我是想通過這種方式來複制到常量內存的結構:cudaMemcpyToSymbol使用或不使用字符串
struct Foo {
int a, b, c;
};
__constant__ Foo cData;
int main() {
Foo hData = {1, 2, 3};
cudaMemcpyToSymbol(cData, &hData, sizeof(Foo));
// ...
}
這工作得很好,在我的內核,我可以直接訪問常量數據:
__global__ void kernel() {
printf("Data is: %d %d %d\n", cData.a, cData.b, cData.c); // 1 2 3
}
但後來我試圖用const char *
作爲符號的名字,事情停止工作:
cudaMemcpyToSymbol("cData", &hData, sizeof(Foo)); // prints 0 0 0
我以爲兩個版本都是相似的,但似乎我錯了。
發生了什麼事?
編輯: 我要報告與cudaGetSymbolAddress,這工作對我來說這同樣的行爲,如果沒有const char *
使用:
__constant__ int someData[10];
__constant__ int *ptrToData;
int *dataPosition;
cudaGetSymbolAddress((void **)&dataPosition, someData); // Works
// cudaGetSymbolAddress((void **)&dataPosition, "someData"); // Do not work
cudaMemcpyToSymbol(ptrToData, &dataPosition, sizeof(int *));
Ooooh,我錯過了!謝謝! :) – AkiRoss 2013-03-15 15:52:45