CUDA - 将CPU变量传输到GPU __constant__变量

时间:2011-05-19 10:01:47

标签: cuda gpu

与CUDA一样,最基本的东西有时候最难......

所以...我只是想将一个变量从CPU复制到GPU的常量变量,我很难过。

这就是我所拥有的:

__constant__ int contadorlinhasx_d;

int main(){

(...)
int contadorlinhasx=100;
     status=cudaMemcpyToSymbol(contadorlinhasx_d,contadorlinhasx,1*sizeof(int),0,cudaMemcpyHostToDevice);

我得到了这个错误

presortx.cu(222): error: no instance of overloaded function "cudaMemcpyToSymbol" matches the argument list
        argument types are: (int, int, unsigned long, int, cudaMemcpyKind)

有人能帮帮我吗?我知道这是一个愚蠢的错误,但我厌倦了谷歌搜索,我花了差不多30分钟试图复制一个愚蠢的变量:/

提前致谢

1 个答案:

答案 0 :(得分:3)

您需要执行类似

的操作
cudaMemcpyToSymbol("contadorlinhasx_d",
                   &contadorlinhasx,
                   1*sizeof(int),
                   0,
                   cudaMemcpyHostToDevice);

[注意这是旧的API调用,现在已在CUDA 4.0及更新版本中弃用]

cudaMemcpyToSymbol(contadorlinhasx_d,
                   &contadorlinhasx,
                   1*sizeof(int),
                   0,
                   cudaMemcpyHostToDevice);

如果查看API documentation,前两个参数就是指针。第一个可以是字符串,它将强制在API内部进行符号查找(前CUDA 4),或者设备符号地址(CUDA 4和更高版本)。第二个参数是副本的主机源内存的地址。编译器错误消息非常明确 - 您传递的参数类型错误,编译器无法在库中找到匹配的实例。