CUDA Advent Calendar 2019 23日目の記事です.
CUDAではポインタを引数にとってそれがどの記憶領域を指しているかを返す関数があります.
それがこの4つです.
- __isConstant
- __isGlobal
- __isLocal
- __isShared
g [0x7f9adb400000] : global h [0x7f9adb600000] : global s [0x7f9b04000000] : shared r [0x7f9b06fffce0] : local c [0x7f9ae0800000] : constant null [(nil)] : globalnullptrはGlobalメモリ扱いなんですね.
当然コンパイル時には判別しようがないことなので実行時に判定するのですが,PTXではどうなっているかと言うと,それぞれ
- isspacep.const
- isspacep.global
- isspacep.local
- isspacep.shared
しかしアドレスを見れば空間の判定なんてできそうな気がしますよね?
そんなことを思いSASSを見てみたところ,適当にアドレスにマスクをかけて判定する系のコードに変わっていました.
流石にハードウェア実装することはないようです.
カテゴリー:CUDA
記事作成日:2019-12-23