2011-05-19 51 views
2

与CUDA,最基础的东西,有时最难的事情......CUDA - Transfering CPU变量GPU __constant__变量

所以...我只是想给一个变量从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) 

谁能帮助我?我知道这是一些愚蠢的错误,但我累了Google上搜寻它,我已经花了近30分钟就好想一个愚蠢的变量拷贝:/

在此先感谢

回答

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及更高版本)内部强制进行符号查找。第二个参数是副本的主机源内存地址。编译器的错误信息是非常明确的 - 你传递错误类型的参数,编译器无法在库中找到匹配的实例。

+0

谢谢!有一点我有“contadorlinhasx_d”,但我完全忘记了“&”。我非常感谢你的帮助;) – Bernardo 2011-05-19 10:40:26