例子:不能CUDA中使用常量
#include <cuda.h>
#include <stdint.h>
#include <assert.h>
__constant__ int32_t m;
int main(int argc, char* argv[])
{
void* s;
int r = cudaGetSymbolAddress(&s, m);
assert(r == cudaSuccess);
return 0;
}
編譯:
$ nvcc test.cu -o test -arch compute_20 -code sm_20
運行:
$ ./test
得到:
test: test.cu:15: int main(int, char**): Assertion `r == cudaSuccess' failed.
Aborted (core dumped)
(如果日在兩個不同的計算機中,我在兩張不同的卡片上測試了這一點。 Cuda 6在這兩種情況下)。
有什麼不對?
好吧,我會咬人的。你實際得到的錯誤是什麼,即'r'的價值是什麼?這個參數不應該是'&m'嗎? – Angew
@Angew它應該可以同時工作....但是,我嘗試了你的建議。它也不起作用。錯誤是cudaErrorInvalidSymbol – dsign
你測試過哪些GPU?如果代碼編譯的目標體系結構高於執行代碼的GPU,則會得到相同的錯誤。 – sgarizvi