CUDA:共享内存分配

Isa*_*man 1 cuda

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

__shared__ int var;
Run Code Online (Sandbox Code Playgroud)

现在,让我们在我的内核某些时候,我想分配一些值,说,说100var.话

var = 100;
Run Code Online (Sandbox Code Playgroud)

导致块中的所有线程执行此赋值.

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

if( threadIdx.x == 0)
    var = 100;
Run Code Online (Sandbox Code Playgroud)

tal*_*ies 10

你唯一的选择就是:

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

__syncthreads();
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯?问题是"我怎样才能让任务*只进行一次*?" [强调我的],答案是,条件赋值+同步. (2认同)