1

假设我在 cuda 内核中定义了一个共享变量,如下所示:

__shared__ int var;

现在,假设在我的内核中的某个时刻我想分配一些值,比如100. var

var = 100;

导致块中的所有线程都执行此分配。

我怎样才能让作业只进行一次?这是我唯一的选择:

if( threadIdx.x == 0)
    var = 100;

?

4

1 回答 1

10

你唯一的选择实际上是这样的:

if( threadIdx.x == 0)
    var = 100;

__syncthreads();

如果省略同步屏障,则无法保证块中的所有var线程都会在赋值语句执行后读取 的值。

于 2013-05-06T20:04:29.170 回答