__syncthreads() Deadlock
__syncthreads() Deadlock
本文关键字:Deadlock syncthreads 更新时间:2023-10-16
如果只有一些线程执行__syncthreads(),它会导致死锁吗?
我有一个像这样的内核:
__global__ void Kernel(int N,int *a)
{
if(threadIdx.x<N)
{
for(int i=0;i<N;i++)
{
a[threadIdx.x]= //Some calculation using a and i
__syncthreads()
}
}
}
如果块中的线程数大于N,则某些线程将不会执行代码。这会造成僵局吗
如果是,那么我如何修改代码?
您应该不要在发散代码中使用__syncthreads()
。它在这种情况下的行为是不明确的。
__syncthreads()
可能出现在条件分支中,前提是您确信该分支将以相同的方式由块中的所有线程统一求值(块中的全部线程或没有线程使用该分支)。
从技术上讲,内核不能死锁;他们只能暂停。但是,是的,你所描述的是真实的,是可能发生的。这个问题以前已经讨论过了,例如:CUDA/OpenCL 中的真实死锁示例
相关文章:
- 是"deadlock"吗?如何在多线程中避免它?
- OpenCV OpenCL Thread Saftey - Deadlock (将 cv::Mat 更改为 UMat)
- 是否有一个术语来表示"single mutex deadlock"(具有非递归互斥锁的死锁类型情况)?
- IDirect3DDevice9 Release deadlock
- RPi2, OpenMAX, Deadlock
- Linux 3.0: futex-lock deadlock bug?
- WaitForSingleObject Deadlock
- std::thread.join() deadlock
- "Deadlock"与MPI_Waitall
- __syncthreads() Deadlock