if(tid < size){
function1();
__syncthreads(); //In this synchronization, all threads will waiting here or only threads that enter in statement if?
}
__syncthreads();
我知道 __ syncthreads()会等待所有块的线程,但是如果同步只对部分线程可见,会发生什么?
答案 0 :(得分:1)
如果同步仅对部分线程可见,会发生什么?
一般来说,这是__syncthreads()
的非法用例,the documentation涵盖了这一点:
__ syncthreads()在条件代码中是允许的,但仅当条件在整个线程块中进行相同的求值时,否则代码执行可能会挂起或产生意外的副作用。
因此,您在if
语句中使用的建议结果为undefined(假设某些线程的tid
大于或等于size
)。
还有其他讨论here,您的问题可以说与该问题重复。我不想狡辩关于问题是否实际上是重复的(删除线程与排除的线程),所以我提供了与该链接相关的CW答案。
如果有人想将此标记为重复,我将删除此答案。