在CUDA中块中的线程是否“松弛”同步?

时间:2017-01-04 12:57:31

标签: cuda synchronization

我知道__syncthreads()是什么,我想做一些不同的事情:

__global__ void kernel()
{
  __shared__ array[1024];
  some other declarations

  load some data into array
label1:
  do some other independent calculations

label2:
  use data from array
  ...
}

所以我可以做__syncthreads();在label2。只有当所有线程都达到label2时,它才具有线程可以超出label2的语义。

我真正需要的是确保当所有其他线程都达到label2时,线程可以超过label1。这样的障碍较弱,我希望它会减少我的计划。有这样轻松的障碍吗?

1 个答案:

答案 0 :(得分:-2)

只有当块的大小等于warp(或一半)的大小时,才能安全地省略__syncthreads()。这种技术被称为" warp-synchronous programming"。由于一个warp中的所有线程同时执行,因此可以确定它们已经执行了先前的指令。在其他情况下,您只能假设块中的所有线程都经过了内核的某些部分 - 这是非常冒险的假设。