行为不一致:GTX 1080上的CUDA 8

时间:2016-09-30 14:39:23

标签: cuda nvidia

我在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,但即使是错误的代码也一切正常。 有关如何调试此行为的任何提示? [编辑我以错误的方式显示代码的输出]

1 个答案:

答案 0 :(得分:1)

经过两天的故障排除后,我得到了答案。 问题是由nvidia安装程序安装的驱动程序引起的(运行文件或CUDA下载部分提供的.deb) 我的操作系统是Ubuntu 16.04 x64

通过使用https://launchpad.net/~graphics-drivers/+archive/ubuntu/ppa处提供的驱动程序,我得到了正确的行为。