在http://docs.nvidia.com/cuda/cuda-c-programming-guide/#device-variable-qualifier它表示__device_限定符變量具有「應用程序的生命週期」。這是否意味着內核?如果有幾個內核,CUDA如何知道哪個變量屬於哪個內核?__device__限定符的範圍
如果我聲明__device_變量,像這樣:
void someHOSTfunction() {
__device__ int var;
// Launch kernel etc...
}
是「無功」還是在這個意義上全球,它仍然是從不同的功能推出了內核訪問,即使它是「本地」在someHOSTfunction()的堆棧上並在someHOSTfunction()返回時獲取作用域(?)?它是否有任何區別如下所示:
__device__ int var;
void someHOSTfunction() {
// Launch kernel etc...
}
現在var是一個全局變量。但這意味着它也可以從其他翻譯單位訪問。這可能不會阻止:
static __device__ int var;
void someHOSTfunction() {
// Launch kernel etc...
}
這樣做的適當方式是什麼?
這是真實的功能是在設備上:即__ device__ void fun(){}? Afaik可以這種方式聲明__ shared__ var – Bwawhwmopoloin
如果函數被聲明爲'__device__',它將只能從設備代碼(即從內核或任何其他'__device__'函數中)訪問**。 '__shared__'只引用變量,意味着它們將存儲在線程共享內存中(一個塊中的所有線程都可以訪問該變量)。請參閱以下鏈接瞭解更多信息:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions – Matso
我有點不確定。我的意思是,如果我在__device __函數中聲明__device __變量,那會好嗎? – Bwawhwmopoloin