Cuda cudaMemcpy“无效论证”

时间:2014-10-29 20:18:56

标签: c cuda

尝试调试更大的应用程序我遇到了一个问题,我似乎无法将值从主机复制到设备。我在下面提供了一个最小的示例我认为应该将6复制到设备然后再回来。

#include <stdio.h>
__device__ float a_d;

main(){
    float a = 6.0;
    float b;
    puts(cudaGetErrorString(cudaMemcpy(&a_d,&a,sizeof(float),cudaMemcpyHostToDevice)));
    puts(cudaGetErrorString(cudaMemcpy(&b,&a_d,sizeof(float),cudaMemcpyDeviceToHost)));
    printf("%e",b);
}

我在64位Linux上使用CUDA 5.5获得以下输出。

$ nvcc test.cu -run
invalid argument
invalid argument
0.000000e+00

而我期待cudaSuccess6.000000e+00

1 个答案:

答案 0 :(得分:2)

您不能将cudaMemcpy直接用于__device__个变量。 correct API to usecudaMemcpyTo/FromSymbol

以下内容应该有效:

#include <stdio.h>
__device__ float a_d;

main(){
    float a = 6.0;
    float b;
    puts(cudaGetErrorString(cudaMemcpyToSymbol(a_d,&a,sizeof(float)));
    puts(cudaGetErrorString(cudaMemcpyFromSymbol(&b,a_d,sizeof(float)));
    printf("%e",b);
}

不清楚为什么你期待0.000000e+00。根据您的代码,我希望6.000000e+00或类似的东西。