同步不在循环中的线程会发生什么

时间:2016-02-04 19:15:07

标签: cuda synchronization

if(tid < size){
    function1();
    __syncthreads(); //In this synchronization, all threads will waiting here or only threads that enter in statement if?
}
__syncthreads();

我知道 __ syncthreads()会等待所有块的线程,但是如果同步只对部分线程可见,会发生什么?

1 个答案:

答案 0 :(得分:1)

  

如果同步仅对部分线程可见,会发生什么?

一般来说,这是__syncthreads()的非法用例,the documentation涵盖了这一点:

  

__ syncthreads()在条件代码中是允许的,但仅当条件在整个线程块中进行相同的求值时,否则代码执行可能会挂起或产生意外的副作用。

因此,您在if语句中使用的建议结果为undefined(假设某些线程的tid大于或等于size)。

还有其他讨论here,您的问题可以说与该问题重复。我不想狡辩关于问题是否实际上是重复的(删除线程与排除的线程),所以我提供了与该链接相关的CW答案。

如果有人想将此标记为重复,我将删除此答案。