最終更新:2012-03-14 (水) 13:11:42 (4419d)  

CUDA/C言語
Top / CUDA / C言語

拡張

関数修飾子(__device__?, __global__?, __host__?)

  • 関数がどこで動作し、誰から呼びだれるかを指定する修飾子
    __global__?デバイス側で動作し、ホスト側から呼び出される関数(カーネル)です。返値は必ずvoidになります。
    __device__?デバイス側で動作し、デバイス側から呼び出される関数です。
    __host__?ホスト側で動作し、ホスト側から呼び出される関数です。ホスト[CPU]側で利用する通常の関数を意味するので、あえて書く必要はあまりありません。

変数修飾子(__devece__?, __constant__?, __shared__?)

  • 変数がデバイス側のどのメモリに存在するかを指定
    __device__?グローバルメモリにあることを示します。省略可能で、デバイスコード側で変数修飾子をつけていない引数が指す配列などはこの__device__指定に相当します。
    __constant__?コンスタントメモリにあることを示します。書込はホスト側でしかできず、デバイス側は読込のみ可能です。
    __shared__?共有メモリにあることを示します。スレッドブロック?内で共有されており、スレッドブロック?の動作中のみ存在します。

ベクタ型(dim3?, int4?, float4?, etc...)

組み込み変数(gridDim?, blockIdx?, blockDim?, threadIdx?, warpSize?)

同期処理系の関数(__threadfence?, __syncthreads?)

算術系の関数(sin?, cos?, __sinf?, __cosf?, etc...)

テクスチャ系の関数(tex1D?, tex3D?, etc...)

atomic(read-modify-write)関数(atomicAdd, atomicSub, etc...)

実行環境の設定(<<<grid, block, shared-size, stream>>>)

制限(デバイス側)

  • 可変引数の関数呼び出し
  • 再帰関数呼び出し
  • 関数内のstatic変数利用
  • 関数ポインタの利用
  • 標準ヘッダの利用(printf等)

参考