2010年11月01日

はじめてのCUDAプログラミング

久しぶりにプログラミング関係の本を買いました。前に買ったのがいつだったか思い出せないくらいです。

買った本は「はじめてのCUDAプログラミング」

はじめてのCUDAプログラミング



CUDAはちょっと前に仕事ネタにできるか検討したことがあり、NVIDIAのドキュメントをはじめWebで色々情報を探し回ったものです。

結局、仕事に使うにはそれほど適していないということがわかり、それから触っていないのですが、まとまった情報として本があると便利ですし、気づいていないこともあるだろうということで購入しました。

その書評でも書いてみます。

いきなり不満点ですが
かぎ括弧が多すぎて読みづらいです。固有名詞はすべてかぎ括弧が付いているんじゃないかと思うくらい頻発しています。
あまりに頻発していて、強調したいと思われる部分が強調になっていなかったりします。

でも気になるのはそれくらい。

中身の半分はNVIDIAからダウンロードできるNVIDIA CUDA C Programming Guideに沿った説明で、それを日本語で説明してくれるから重宝します。


大きな間違いもなさそうです

途中、メモリ階層の説明で物理的構造と論理的なネーミングが混同している感じの部分がありましたが、NVIDIAのドキュメントがそのように書かれていますので、倣ったのだろうと思います。


後半は実際のプログラミング解説で、まずは総和計算を例にしています。

総和計算という名前からも想像できますが、配列の値をすべて加算して1個の答えを出すというものです。これが加算じゃなくて最大値だったり最小値だったり論理演算だったりと応用は広く、リダクションと名前が付いています。

純粋な計算部分なら、Cでfor文1個、3行くらいで書けるシロモノですが、これをGPUでやらせるために10ページも割いています。

10ページの中身はいきなり答えを書いているのではなく、1つのポイントに着目して改良を加え、また1つのポイントに着目して改良、という作業を5回繰り返していて、そのプロセスが重要であることを意味しています。

書評から外れますが
この作業を受け入れられるかどうかがCUDAを使うかどうかのしきい値だろうなと思っています。

たった3行のプログラムをここまでこねくり回して得られるものは高速実行だけど、それがどれだけ必要とされているかと聞かれれば、普通の開発現場ではまず必要ないでしょう。想像だけど、マルチコアとSIMDが普通になった今では、CPUでのプログラミングで終わるでしょう。

だからってCUDAを批判するつもりは無く、逆に趣味としてCUDAを楽しむ方向は大いにあると思っています。いわゆる手段を目的にするということです。ちなみに私がそうです。


総和計算以外には
粒子計算と拡散方程式の解説があります。ちなみに総和演算はスレッド実行、粒子計算は計算方法、拡散方程式はシェアードメモリの使い方に着目していて、これでCUDAの重要ポイントは一通り揃っているように思えます。

ただ、粒子計算と拡散方程式は微分方程式が出てきて、説明はあるにしても前知識が無いと興味が持たないかもしれません。

シェアードメモリの使い方はCUDAプログラミングの最重要ポイントなので、その一例は重宝します。

はじめはたくさん使っていたシェアードメモリですが、計算方法を見直して使用量を減らし、しまいにはほとんど使わずに済むまで最適化する。その過程は圧巻ですが、考え方がわかりやすく説明されています。


最後に少し気をつけなければいけない点です

CPUとの速度比較はかなり割り引いて見たほうがいいですね。CPUコードの最適化がほとんどなされていないと思えるからです。GPGPUの処理速度をアピールしたいからしょうがないけど。


粒子計算や拡散方程式では演算結果をBMP形式にして可視化していますが、それをどう見るかは説明していません。本書の範囲外であることは間違いないけど、アニメーション表示などを期待しているとがっくりするかもしれないですね。

CUDAの開発環境のインストール方法はLinux, Windows, MACの3つの説明がありますが、使い方に関する説明はほとんど無いです。

たまに出てくるコマンド実行例ははLinuxをベースとしていて、WindowsのVisual Studioでの手順はほぼないです。
Visual Studioでの新規プロジェクトを作る例があれば相当重宝するのですが、もちろん無い。windows使いの方は注意が必要です。

訂正も多数あるので、出版元のサポートページをチェックする必要ありです。
はじめてのCUDAプログラミング・サポート情報。サンプルプログラムもダウンロードできますよ。


この内容で2300円ならリーズナブルだと思います。CUDAに興味があるならまず購入して感覚をつかみ、8000円くらいのGPUで試すのはいかがでしょうか。

いつかは趣味でやっている粒子法プログラミングをGPGPUで動かしたいと思っているんですが、なかなか実現できてません。



同じカテゴリー(ソフトウェア)の記事
emacs23.2のdot.emacs
emacs23.2のdot.emacs(2010-09-25 01:50)


上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。