CUDA:添加两个数字给出了错误的答案

这是该计划

#include  #include  #include  #include  __global__ void Addition(int *a,int *b,int *c) { *c = *a + *b; } int main() { int a,b,c; int *dev_a,*dev_b,*dev_c; int size = sizeof(int); cudaMalloc((void**)&dev_a, size); cudaMalloc((void**)&dev_b, size); cudaMalloc((void**)&dev_c, size); a=5,b=6; cudaMemcpy(dev_a, &a,sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(dev_b, &b,sizeof(int), cudaMemcpyHostToDevice); Addition<<>>(dev_a,dev_b,dev_c); cudaMemcpy(&c, dev_c,size, cudaMemcpyDeviceToHost); cudaFree(&dev_a); cudaFree(&dev_b); cudaFree(&dev_c); printf("%d\n", c); return 0; } 

这是我如何编译它

 $ nvcc -o test test.cu 

这是我的输出

 1 

这是deviceQuery的输出

 ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "GeForce 8400 GS" CUDA Driver Version / Runtime Version 6.5 / 6.5 CUDA Capability Major/Minor version number: 1.1 Total amount of global memory: 511 MBytes (536150016 bytes) ( 1) Multiprocessors, ( 8) CUDA Cores/MP: 8 CUDA Cores GPU Clock rate: 1350 MHz (1.35 GHz) Memory Clock rate: 400 Mhz Memory Bus Width: 64-bit Maximum Texture Dimension Size (x,y,z) 1D=(8192), 2D=(65536, 32768), 3D=(2048, 2048, 2048) Maximum Layered 1D Texture Size, (num) layers 1D=(8192), 512 layers Maximum Layered 2D Texture Size, (num) layers 2D=(8192, 8192), 512 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 16384 bytes Total number of registers available per block: 8192 Warp size: 32 Maximum number of threads per multiprocessor: 768 Maximum number of threads per block: 512 Max dimension size of a thread block (x,y,z): (512, 512, 64) Max dimension size of a grid size (x,y,z): (65535, 65535, 1) Maximum memory pitch: 2147483647 bytes Texture alignment: 256 bytes Concurrent copy and kernel execution: No with 0 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): No Device PCI Bus ID / PCI location ID: 1 / 0 Compute Mode:  deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = GeForce 8400 GS Result = PASS 

CUDA 6.5默认编译为cc2.0目标。 您的GeForce 8400GS是cc1.1设备。 因此,以这种方式编译的内核将无法启动,并且您的代码中没有正确的cuda错误检查 (这会给您一个问题的指示)。

如果在编译时指定了正确的arch开关,则代码应该正常运行:

 nvcc -arch=sm_11 -o test test.cu 

将显示一条警告消息, sm_11不推荐使用sm_11 ,但仍应正确编译代码。