同步不在循环中的线程会发生啥
Posted
技术标签:
【中文标题】同步不在循环中的线程会发生啥【英文标题】:What happens with threads that synchronization not are in the loop同步不在循环中的线程会发生什么 【发布时间】:2016-05-14 13:45:16 【问题描述】: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 答案。
如果有人想将此标记为重复,我将删除此答案。
【讨论】:
如果未定义,那么一些线程将等待,根据 function1() 中的内容,可能会导致死锁(可能是无限循环)? 未定义意味着您无法预测行为,我也不能。我无法回答有关未定义行为时会发生什么的问题。我的回答不是基于function1()
的任何特征。文档明确指出挂起(可能来自死锁)是可能的结果。以上是关于同步不在循环中的线程会发生啥的主要内容,如果未能解决你的问题,请参考以下文章