CUDA 3.0版本与编译器选项的兼容性-arch=sm_12

CUDA 3.0版本与编译器选项的兼容性-arch=sm_12,cuda,nvidia,gpu,Cuda,Nvidia,Gpu,我有一个非常简单的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 *

我有一个非常简单的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);
int*dev_int,val;
val=0;
Cudamaloc((void**)和dev_int,sizeof(int));
cudaMemset((void*)dev_int,0,sizeof(int));
cudaMemcpy(dev_int,&val,sizeof(int),cudamemcpyhostodevice);
dev_test>(dev_int);
int*host_int=(int*)malloc(sizeof(int));
cudaMemcpy(主机int、开发int、sizeof(int)、cudaMemcpyDeviceToHost);
printf(“从设备%d\n复制回来,*host\u int”);
当使用-arch=sm_11编译时,print语句正确地打印100。 但是,当使用-arch=sm_12编译时,它会打印0,即内核函数内部的更改不会生效。我猜这是因为我的CUDA版本和英伟达驱动程序之间的一些不兼容。 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)


非常感谢您的帮助。

我的问题终于解决了。。不确定哪一个真正解决了这个问题-我升级到Cuda 4.1并升级了我的nVidia驱动程序,两者的结合解决了这个问题

我的问题终于解决了。。不确定哪一个真正解决了这个问题-我升级到Cuda 4.1并升级了我的nVidia驱动程序,两者的结合解决了这个问题

dev_int不是一个悬空指针。我用Cudamaloc为它分配了内存。我简化了代码以说明我的问题。我基本上希望使用sm_12,以便在共享变量上使用atomicCAS。我的问题是,在使用sm_12时,内核中发生的任何写入操作在主机上都是不可见的。向内核函数传递指针并不罕见。这里唯一不寻常的是,他的指针指向一个1元素数组。我已经在装有特斯拉M2090的CUDA 4.1系统上试用过该代码,无论我指定了什么
-arch
,它都能正常工作。维诺德:你能升级到CUDA 4.1吗?@Paul。我不太明白你的意思。我已经在这里初始化了指针-
cudaMemcpy(dev_int,&val,sizeof(int),cudaMemcpyHostToDevice)我在以前的所有程序中都传递了没有任何问题的指针。它与arch=sm_11配合使用的事实表明,这不是指针的问题,而是与设备的计算能力有关。@harrism感谢您的建议。。。我确实安装了4.1。。但是当我试图编译时,我得到了一个错误,说其中一个共享库没有找到(我认为它是libcudart4.so.。我现在不在我的机器上,因此不知道库的确切名称)dev_int不是一个悬空的指针。我用Cudamaloc为它分配了内存。我简化了代码以说明我的问题。我基本上希望使用sm_12,以便在共享变量上使用atomicCAS。我的问题是,在使用sm_12时,内核中发生的任何写入操作在主机上都是不可见的。向内核函数传递指针并不罕见。这里唯一不寻常的是,他的指针指向一个1元素数组。我已经在装有特斯拉M2090的CUDA 4.1系统上试用过该代码,无论我指定了什么
-arch
,它都能正常工作。维诺德:你能升级到CUDA 4.1吗?@Paul。我不太明白你的意思。我已经在这里初始化了指针-
cudaMemcpy(dev_int,&val,sizeof(int),cudaMemcpyHostToDevice)我在以前的所有程序中都传递了没有任何问题的指针。它与arch=sm_11配合使用的事实表明,这不是指针的问题,而是与设备的计算能力有关。@harrism感谢您的建议。。。我确实安装了4.1。。但是当我试图编译时,我得到了一个错误,说其中一个共享库没有找到(我想它是libcudart4。所以..我现在不在我的机器上,因此不知道库的确切名称)