假设我在cuda内核中定义了一个共享变量,如下所示:
__shared__ int var;
现在,让我们说在我的内核中的某些时候我想指定一些值,比如说100
到var
。说
var = 100;
导致块中的所有线程执行此赋值。
如何才能让作业只进行一次?这是我唯一的选择:
if( threadIdx.x == 0)
var = 100;
答案 0 :(得分:10)
你唯一的选择就是:
if( threadIdx.x == 0)
var = 100;
__syncthreads();
如果省略同步障碍,则无法保证在执行赋值语句后,块中的所有线程都将读取var
的值。