CUDAの初期化と終了を行うだけのプログラムです。CUT_DEVICE_INITを実行するとデバイス名が表示されるようです。 私の場合は、使用するGPUとしてGeForce 8800 GTが認識されたようです。以下は実行結果。
次は、実際にホストメモリのデータをGPUのデバイスメモリに転送します。
ただし、これだけでは動作している様子がわからないので次は実際にGPUを使った演算処理を行います。
CUDA_SAFE_CALLは、_DEBUGが定義されていると、引数の関数を呼び出して、その戻り値のエラーを検査しまする エラーの場合はエラーメッセージが出力されます。
GPUで計算してその結果を返すには「メインメモリからGPUメモリへの移動→GPUでの計算処理→GPUメモリからメインメモリへの移動」というプロセスが 必要になってきます。
実行結果は以下のようになります。GPU関数によって配列の要素の値が加算されているのがわかります。
ただし今回のは計算処理を行うスレッド数が1つで、並列処理をしているわけではないのでCUDAもといGPUの利点を活かしていません。
GPU関数であるcudaOperateにforループがなくなっているのがわかります。代わりに配列を指定する変数が「threadIdx.x」 となっています。また、スレッド数がN個になっています。それぞれのスレッドが同時にgpu変数配列の値を加算処理することとなります。
スレッドは3次元まで指定可能で、各次元の最大スレッド数は、512,512,64となっています。