CUDAでは修飾子によりその関数がGPU側,CPU側どちらで実行されるかを指定する. 例えば, __device__ inline void func(int i) { // 処理 } のように__device__と指定することでGPU側(デバイス)で実行される関数となる. 修飾子の種類†修飾子の種類を実行場所と呼び出し元でまとめると,
その他注意事項は以下.
インライン関数†compute capability 1.* では__device__関数は常にインライン化されるが, compute capability 2.* ではコンパイラが適切と判断したもののみインライン化される. ユーザが明示的にインライン化を指定したい場合は,__forceinline__修飾子を用いる. 逆にインライン化したくない場合は__noinline__修飾子を用いる. compute capability 1.* ではポインタ引数を持つ関数と引数が多い関数に関しては__noinline__は無視される可能性がある. compute capability 2.* では__noinline__はほとんどの場合有効である. |