【发布时间】:2013-03-04 10:24:29
【问题描述】:
跟进 Q 至:EarlyExit 和 DroppedThreads
根据上面的链接,下面的代码应该是死锁的。
请解释为什么这不会死锁。 (费米上的 Cuda 5)
__device__ int add[144];
__device__ int result;
add<<<1,96>>>(); // the calling
__global__ void add() {
for(idx=72>>1; idx>0; idx>>=1) {
if(thrdIdx < idx)
add[thrdIdx]+= add[thrdIdx+idx];
else
return;
__syncthreads();
}
if(thrdIdx == 0)
result= add[0];
}
【问题讨论】:
-
你的启动配置是什么? (例如块 && 网格尺寸)
-
你给出的代码不会接近编译,更不用说死锁了。顺便说一句,由于同步线程使用不当而导致的死锁是可能而不是保证。处理不当使用同步线程的正确方法是断定行为是undefined。
标签: cuda