CUDAってなんなのさ
CUDAってなんなのさ
CUDAをかじろうかと思う。
CUDAってのはGPGPUプログラムのための開発言語、開発環境のことで、まぁ詳しくはこちらを参照ってことで。
GPGPUに関してはこれから出るOpenCLの方が便利そうですし普及しそうだけど、そのベースになるCUDAも勉強しといて損はないかなと。
CUDAは以前サンプルを読んだりもしていたのですが、かなり断片的にしか分かっていないので今回は改めてお勉強。
基本的に本家本元NVIDIAのCUDAのページがとても親切に教えてくれるので、それを追う形でいこうかと。
CUDAのしくみ
アーキテクチャはこんなん。

NVIDIAHPより
ここでは実装に重きを置いて書くことにするので、基本的なCUDAの仕組みはここの「CUDA ベーシックプログラミングガイド」で学んでくださいな。というか私も今はこのページをなぞるだけ。
環境構築
以前よりSDKのバージョンも上がってるし、動かないサンプルがあったので開発環境構築から。
グラボ:GeForce9600GT
OS:Vista 32bit
ここから
1. 最新CUDAドライバ(185.85)
2. CUDAツールキット一式(2.2)
3. CUDA SDKコードサンプル(2.21)
をダウンロード・インストール。
CUDAトレーニング コース
nVidiaのページの学習コースに乗っかる。第1巻: CUDAプログラミング入門 (日本語版)ってとこ。
・エクササイズ1: ホストとデバイス間でのコピー
ホストはCPUで、デバイスはGPU。ホスト-デバイスはGlobal Memoryを通じてデータをやりとりする。大容量だけど遅いから使用は最小限に抑える。
課題部分のソースを抜粋
// Part 1 of 5: allocate device memory
size_t memSize = dimA*sizeof(float);
cudaMalloc((void**)&d_a, memSize);
cudaMalloc((void**)&d_b, memSize);
// Part 2 of 5: host to device memory copy
cudaMemcpy(d_a, h_a, memSize, cudaMemcpyHostToDevice);
// Part 3 of 5: device to device memory copy
cudaMemcpy(d_b, d_a, memSize, cudaMemcpyDeviceToDevice);
// Part 4 of 5: device to host copy
cudaMemcpy(h_a, d_b, memSize, cudaMemcpyDeviceToHost);
// Part 5 of 5: free device memory pointers d_a and d_b
cudaFree(d_a);
cudaFree(d_b);
とこんな風に、ホストとデバイスのメモリを意識して使い分ける。
おそらく、対象データをホストからデバイスにコピー→デバイス内で演算→結果データをデバイスからホストにコピーの流れになる。
今回は以上。次もエクササイズを追っていきます。




最近のコメント