我有一个非常简单的CUDA程序。使用-arch = sm_11选项编译时,程序按预期正常工作。但是,使用-arch = sm_12编译时,结果是意外的。 这是内核代码:
__global__ void dev_test(int *test) {
*test = 100;
}
我调用内核代码如下:
int *dev_int, val;
val = 0;
cudaMalloc((void **)&dev_int, sizeof(int));
cudaMemset((void *)dev_int, 0, sizeof(int));
cudaMemcpy(dev_int, &val, sizeof(int), cudaMemcpyHostToDevice);
dev_test <<< 1, 1>>> (dev_int);
int *host_int = (int*)malloc(sizeof(int));
cudaMemcpy(host_int, dev_int, sizeof(int), cudaMemcpyDeviceToHost);
printf("copied back from device %d\n",*host_int);
使用-arch = sm_11编译时,print语句正确打印100。 但是,当使用-arch = sm_12进行编译时,它会打印0,即内核函数内的更改不会生效。我猜这是因为我的CUDA版本和nvidia驱动程序之间存在一些不兼容。
CUDA版本 - 3.0 NVRM版本:NVIDIA UNIX x86_64内核模块195.36.24 Thu Apr 22 19:10:14 PDT 2010 GCC版本:gcc版本4.4.3(Ubuntu 4.4.3-4ubuntu5)
非常感谢任何帮助。
答案 0 :(得分:1)
我的问题终于得到了解决..不知道哪一个真正解决了它 - 我升级到Cuda 4.1并升级了我的nVidia驱动程序,两者的结合解决了这个问题。