我编写了简单的内核来测试 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();
}
请帮助我完成这个非常简单的测试程序,但仍然无法正常工作。我们需要设置一些编译器标志吗?