我想在啓動需要這些值的內核之前,在我的GPU的常量內存上設置常量值。CUDA常量內存問題:無效的設備符號與cudaGetSymbolAddress
我的代碼(簡化):
__constant__ size_t con_N;
int main()
{
size_t N;
size_t* dev_N = NULL;
cudaError_t cudaStatus;
//[...]
cudaStatus = cudaGetSymbolAddress((void **)&dev_N, &con_N);
if (cudaStatus != cudaSuccess) {
cout<<"cudaGetSymbolAddress (dev_N) failed: "<<cudaGetErrorString(cudaStatus)<<endl;
}
我打算cudaMemcpy
我N
到dev_N
之後。
然而,所有我在代碼中的這一點上得到的是:
cudaGetSymbolAddress (dev_N) failed: invalid device symbol
我和CUDA 6.5工作,所以它不是一個引用符號的問題,因爲它是在大多數將q & A I的至今一直在檢查。
我試圖替換con_N
與con_N[1]
(和前con_N
在cudaGetSymbolAddress
參數除去&
):相同的結果。
由於這個功能的原型是cudaGetSymbolAddress(void **devPtr , const void* symbol)
,我猜想它是想給我的符號的地址。不過,我嘗試了cudaStatus = cudaGetSymbolAddress((void **)&dev_N, (const void*) con_N);
,我收到了同樣的信息。
當我刪除cudaGetSymbolAddress((void **)&dev_N, &con_N)
並直接使用cudaMemcpyToSymbol(&con_N, &N, sizeof(size_t))
代替時,我也收到了非常相同的錯誤消息。
恐怕我錯過了一些必不可少的東西。任何幫助將不勝感激。
謝謝,這是完全意義上的。我必須補充說,我無法編譯'cudaGetSymbolAddress((void **)&dev_N,con_N)',但那只是因爲我所說的所有代碼都在.cpp文件中而不是.cu文件中。包裝我的電話解決了我的編譯問題(感謝這個主題:http://stackoverflow.com/questions/20535683/cuda-5-5-cudamemcpytosymbol-constant-and-out-of-scope-error) – eyam 2014-11-05 11:14:17