http://docs.nvidia.com/cuda/cuda-c-programming-guide/#device-variable-qualifierには、__device_修飾子変数に「アプリケーションの有効期間」があることが示されています。これはカーネルを意味しますか?複数のカーネルがある場合、CUDAはどの変数がどのカーネルに属しているかをどのように知ることができますか?__device__修飾子の範囲
私は宣言した場合はそのような__device_変数:
void someHOSTfunction() {
__device__ int var;
// Launch kernel etc...
}
が、それは「ローカル」であるにも関わらず、まだ別の関数から起動カーネルからアクセス可能であることをまだグローバル意味で「VAR」ですsomeHOSTfunction()のスタック上にあり、いくつかのHOSTfunction()が返ってくるとスコープ(?)になりますか?
__device__ int var;
void someHOSTfunction() {
// Launch kernel etc...
}
ここで、varはグローバル変数です。しかし、それは他の翻訳単位からもアクセス可能であることを意味します。これはおそらくそれを防ぐためには機能しません:
static __device__ int var;
void someHOSTfunction() {
// Launch kernel etc...
}
これを行う適切な方法はありますか?
これは、関数がデバイス上にあることに該当します。つまり、__ device__ void fun(){}? Af @ ck __ shared__ varをそのように宣言することは可能です – Bwawhwmopoloin
関数が '__device__'として宣言されていれば、それは**単に**デバイスコードを(**カーネル内または他の' __device__'関数から)**アクセス可能になります。 '__shared__'は変数のみを参照し、スレッド共有メモリに格納されることを意味します(1つのブロックのすべてのスレッドは変数へのアクセス権を持ちます)。詳細はリンクを参照してください:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#c-language-extensions – Matso
私は少し不明でした。私は、__device __関数で__device __変数を宣言すると、それは大丈夫でしょうか? – Bwawhwmopoloin