/ / Woher weiß ich, dass das Speicher-Mapping in OpenCL erfolgreich ist - Java, Parallelverarbeitung, OpenCL, Gpgpu

Woher weiß ich, dass die Speicherzuordnung in OpenCL erfolgreich ist - java, parallel-processing, opencl, gpgpu

Ich bin neu bei OpenCL. Momentan arbeite ich an einem großen eindimensionalen Array. Die Größe des Arrays beträgt rund 8 Millionen. Das Folgende ist Teil meines Codes:

//allocate opencl hosted memory for input
int[] Counts = new int[8000000];

//get device and create context....

CLBuffer<Integer> memIn1 = context.createIntBuffer(Usage.Input, 8000000);
Pointer<Integer> a = memIn1.map(queue, MapFlags.Write);
a.setInts(Counts);

//memory allocation for the second parameter memIn2

CLKernel kernel = program.createKernel("gpuScoring", memIn1, memIn2, 8000000, memOut);
kernel.enqueueNDRange(queue, new int[] {8000000}, null);

Unten ist mein Kernel-Code:

__kernel void gpuScoring(__global int *Counts, __global int *value, int width, int height, __global int *output){

int gid = get_global_id(0);
int x = gid % width;
int y = gid / width;
int count = Counts[y * width + x];
if(count != 0){
//need to do something here...
}
}

Die Frage ist jedoch, dass ich nie gefunden habegehe in den wahren Zweig des if (count! = 0). Ich bin mir ziemlich sicher, dass das Counts-Array in meinem Java-Code einige Indexwerte aufweist, die nicht 0 sind. Bitte helfen Vielen Dank.

Antworten:

0 für die Antwort № 1

Nach dem Zuordnen des Puffers müssen Sie Ihre Daten dort schreiben und die Zuordnung aufheben. Sie verwenden eher den Puffer, indem Sie die Hostdaten in den Puffer kopieren.