【发布时间】:2016-05-11 15:42:03
【问题描述】:
我有以下定义内核函数的 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 0 1
1
1
1
我认为这是因为每个线程都没有互斥锁。但是如何在 OpenCL 中添加互斥锁?谁能举个简单的例子?
【问题讨论】:
-
没有办法在 OpenCL 中添加互斥锁。在 SIMD 中,所有线程都需要同时处理每条指令。阻塞一个线程,阻塞整个线程组。有一些使用全局/本地内存 + 原子的解决方法,但速度非常慢,所以我不想鼓励人们使用它们。