2013-02-10 61 views
4

下面我列出了一個自包含的示例,它使用cudaMemcpyFromSymbol()從內核檢索結果。該示例將符號參數(調用中的第二個參數)作爲常規變量傳遞。不過,據我所知的CUDA文檔,傳遞的參數爲一個字符串,那就是:瞭解cudaMemcpyFromSymbol()的符號參數

cudaMemcpyFromSymbol(&out, "out_d", sizeof(out_d), 0, cudaMemcpyDeviceToHost); 

(與周圍的符號名引號),也應該工作。這對我不起作用。

什麼時候符號名稱會起作用,符號名稱何時會作爲字符串工作?

#include "cuda_runtime.h" 
#include <stdio.h> 

__device__ int out_d; 

__global__ void test() { 
    out_d = 123; 
} 

int main() { 
    test<<<1,1>>>(); 
    int out; 
    cudaMemcpyFromSymbol(&out, out_d, sizeof(out_d), 0, cudaMemcpyDeviceToHost); 
    printf("%d\n", out); 
    return 0; 
} 

回答

8

將符號名稱作爲字符串參數傳遞在CUDA 4.2中已被棄用,並且語法在cuda 5.0中被刪除。原因與啓用單獨的設備代碼鏈接程序功能有關,該功能出現在CUDA 5中。對於cuda 5工具包,此更改記錄在release notes中。 「•不再支持使用字符串來指示某些API函數可能使用的設備符號,而是應該直接使用該符號。」