1
にミューテックスを追加:Iは、カーネル関数を定義する次のOpenCLコードを有するOpenCLのカーネル
kernel void test_print(global char* src)
{
printf("%c\t", src[0]);
src[0]++;
printf("%c\n", src[0]);
}
src
出力が
0 0 0 0 1
1
1
1
Iである{'0'};
つの要素を持つ配列でありますこれは、スレッドごとにミューテックスが存在しないために発生していると考えられます。しかし、どのようにOpenCLでmutexを追加するのですか?誰かが簡単な例を挙げることができますか?
OpenCLにミューテックスを追加する方法はありません。 SIMDでは、すべてのスレッドが各命令を同時に処理する必要があります。 1つのスレッドをブロックすると、スレッドのグループ全体がブロックされます。グローバル/ローカルメモリ+アトミックを使用する回避策がありますが、恐ろしく遅いので、人々にそれらを使用することを推奨したくありません。 – DarkZeros