我知道__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
。这样的障碍较弱,我希望它会减少我的计划。有这样轻松的障碍吗?
答案 0 :(得分:-2)
只有当块的大小等于warp(或一半)的大小时,才能安全地省略__syncthreads()
。这种技术被称为" warp-synchronous programming"。由于一个warp中的所有线程同时执行,因此可以确定它们已经执行了先前的指令。在其他情况下,您只能假设块中的所有线程都经过了内核的某些部分 - 这是非常冒险的假设。