I die folgende OpenCL Code Definieren einer Kernfunktion haben:Hinzufügen Mutex auf OpenCL Kernel
kernel void test_print(global char* src)
{
printf("%c\t", src[0]);
src[0]++;
printf("%c\n", src[0]);
}
die src
ist ein Array mit einem Element {'0'};
Der Ausgang ist
0 0 0 0 1
1
1
1
I Das liegt daran, dass für jeden Thread kein Mutex vorhanden ist. Aber wie fügt man Mutex in OpenCL hinzu? Kann jemand ein einfaches Beispiel geben?
Es gibt keine Möglichkeit, Mutex in OpenCL hinzuzufügen. In SIMD müssen alle Threads jeden Befehl gleichzeitig verarbeiten. Blockiert einen Thread, blockiert die gesamte Gruppe von Threads. Es gibt Workarounds, die globalen/lokalen Speicher und Atomics verwenden, aber schrecklich langsam sind, also ziehe ich es vor, die Leute nicht zu ermutigen, sie zu benutzen. – DarkZeros