我看书上说一般要避免在分支里面同步,这样容易形成死锁。但是很多例子里面都有这样的代码: global kernel_test1() { int id = threadIdx.x;if (id < N) { do something… __syncthreads(); do something… } }
这样写会不会死锁呢?
不会!
因为__syncthreads()只针对存活的线程的。这种代码,大于等于N的线程会死掉,而死掉的线程默认算成参与了同步了。
故不会有任何问题。