我在GTX 1080上使用Cuda 8运行代码时遇到了不一致的行为。 如果我尝试在我的GTX 1080(Ubuntu 16.04,Cuda 8)上运行此代码
__global__
void setValue(int *ptr, int index, int val)
{
ptr[index] = val;
}
void foo(int size)
{
int *data;
CudaSafeCall(cudaMallocManaged(&data, size*sizeof(int)));
memset(data, 0, size*sizeof(int));
setValue<<<1,1>>>(data, size/2, 5);
CudaCheckError();
CudaSafeCall(cudaDeviceSynchronize());
//useData(data);
for(int i=0;i<size;i++)
printf("%u %u\n",i,data[i]);
CudaSafeCall(cudaFree(data));
}
int main()
{
foo(5);
}
我得到以下输出
0 0
1 0
2 0
3 0
4 0
如果我在装有GeForce GT 740和Cuda 7的机器上运行它,我会得到
0 0
1 0
2 5
3 0
4 0
我真的无法解释这种行为。我检查了CudaErrors,但即使是错误的代码也一切正常。 有关如何调试此行为的任何提示? [编辑我以错误的方式显示代码的输出]
答案 0 :(得分:1)
经过两天的故障排除后,我得到了答案。 问题是由nvidia安装程序安装的驱动程序引起的(运行文件或CUDA下载部分提供的.deb) 我的操作系统是Ubuntu 16.04 x64
通过使用https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa处提供的驱动程序,我得到了正确的行为。