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

我知道__syncthreads()将等待块的所有线程,但如果同步是唯一可见的线程的一部分会发生什么?与线程同步发生什么不都在循环

回答

1

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

一般来说,这是一个非法用例为__syncthreads(),这是覆盖在the documentation

__syncthreads()是允许在条件代码,但只有当条件估值相同整个螺纹块,否则代码执行可能会挂起或产生意想不到的副作用。

所以你提出的if语句中使用的结果将是undefined(假设某些线程有tid大于或等于size)。

有额外的讨论here和你的问题可以说是一个重复的。我不希望质疑问题是否真的重复(丢弃的线程与排除的线程),所以我提供了与此相关的CW答案。

如果有人想标记这是重复的,我会删除这个答案。

+0

那么如果未定义,那么一些线程将等待并取决于_function1()_中的内容可能导致死锁(可能是无限循环)? – realbas

+2

未定义意味着您无法预测行为,也无法预测行为。我无法回答有关未定义行为时会发生什么的问题。我的回应不是基于'function1()'的任何特性。该文档明确指出** **(可能来自死锁)是一个可能的结果。 –

相关问题