我编写了简单的内核来测试CUDA的功能__syncthreads.在内核中,我设法从每个线程打印,如果更新的值对其他线程不可见.理想情况下,没有线程应该打印Not visible to me错误消息,但有些线程最终会打印此消息.这是内核.
__device__ int a=0;
__global__ void kernel()
{
isItOK=false;
if(threadIdx.x==0 && blockIdx.x==0)
{
atomicAdd(&a,1);
__threadfence();
}
__syncthreads();
if(atomicAdd(&a,0)==0)
{
cuPrintf("Not Visible to me\n");
}
}
int main()
{
int *a;
cudaPrintfInit();
kernel<<<16,16>>>();
cudaPrintfDisplay(stdout,true);
cudaPrintfEnd();
}
Run Code Online (Sandbox Code Playgroud)
请帮我这个,非常简单的测试程序,但仍然无法正常工作.我们需要设置一些编译器标志吗?
__syncthreads() 是同步屏障原语,仅同步同一块中的线程.
CUDA没有跨线程块安全同步的机制.
建议不要在线程块之间进行通信和同步,因为它会破坏具有不同数量的多处理器的GPU的执行可伸缩性,这就是首先使用线程块的原因.
| 归档时间: |
|
| 查看次数: |
2962 次 |
| 最近记录: |