2011-05-19 87 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