Ich bin ein Neuling in OpenCL. Ich verstehe jedoch die C/C++ - Grundlagen und die OOP. Meine Frage lautet wie folgt: Ist es irgendwie möglich, die Summenberechnungsaufgabe parallel auszuführen? Ist es theoretisch möglich? Im Folgenden werde ich beschreiben, was ich zu tun versucht:Kann die Summenberechnung in OpenCL parallel ausgeführt werden?
Die Aufgabe ist, zum Beispiel:
double* values = new double[1000]; //let's pretend it has some random values inside
double sum = 0.0;
for(int i = 0; i < 1000; i++) {
sum += values[i];
}
Was ich in OpenCL-Kernel versucht zu tun (und ich glaube, es ist falsch, weil vielleicht greift er auf die gleiche "sum" -Variable aus verschiedenen Threads/Tasks gleichzeitig):
__kernel void calculate2dim(__global float* vectors1dim,
__global float output,
const unsigned int count) {
int i = get_global_id(0);
output += vectors1dim[i];
}
Dieser Code ist falsch. Ich würde es sehr schätzen, wenn mir jemand antworten würde, wenn es theoretisch möglich wäre, solche Aufgaben parallel zu erledigen und wenn es - wie!
Das ist eine klassische Reduktion Problem. Sehen Sie [hier] (http://developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/projects/reduction/doc/reduction.pdf) für eine Schritt für Schritt Erklärung, wie Sie diesen Prozess für viele optimieren können. Core-Architekturen (es ist CUDA, aber die Prinzipien sind genau die gleichen, außer dem Teil über Vorlagen vielleicht). Obwohl mehr einleitendes Material zu dem Thema hilfreicher sein könnte, überlasse ich es aber einer richtigen Antwort. –
Vielen Dank! Jetzt weiß ich, es ist ein häufiges Problem und wird lernen, es zu lösen! – Vladimir