クリプキクローネ日記帳

ある種の音楽と数学とランニングはミニマルなところが似ていると思う。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

GPUプログラミング入門 [伊藤智義(編)] (講談社)

またCUDA本を借りてきてしまいました。読んでいておもしろいんですよね。


この本は2013年出版の新しい本なので、NVIDIAのGPUの新アーキテクチャKeplerとCUDA 5が記述のベースになっています。
1つ前のアーキテクチャFermiと比べるとKeplerの進化っぷりがよく分かります。

と書いてから念のため調べてみたところ、2017年現在のアーキテクチャはKeplerからさらに2世代進んでPascal、
CUDAのバージョンは8.0でした。進むのが速すぎます。
とは言え、少しくらい世代やバージョンが変わろうとも大事なことはそんなに変わらないので気にしません。

CUDAの本を読むのも3冊目なので、スレッド、ブロック、グリッドと、
SP, SM(SMX), それからwarpの概念がやっと分かってきました。
1ブロックが1SMで実行されるというのは分かりやすいです。
32スレッドからなる制御の流れの1単位であるwarpが複数のSPで並列実行される様子を
アーキテクチャの図を眺めながら妄想するとワクワクします。

スレッド配列を2次元以上にした場合、総数が同じでもどのような形の2次元配列にするかで
計算効率が大幅に変わってくるというのにびっくりしました。
スレッド配列の形はコードの見やすさにしか影響しないと思っていました。
この辺はCUDAコンパイラが何をどう考えているのか分かりません。
warpの組み方とかが変わるせいなんでしょうか。

メモリアクセスの話もお馴染みですが、実際にやってみると難しいんだろうなと思います。
以前読んだ本には、レジスタは少ないからローカル変数を定義しすぎるとはみ出る、みたいなことが書いてありましたが、
最新のGPUはレジスタたくさんあってそこまで気にしなくていいみたいですね。
ローカル変数の数にまでやたらと神経質になるのはしんどそうです。
昔の組み込みみたいでそれはそれで楽しいんだろうけど。

ライブラリ群については今回初めて知りました。
cuFFT、cuRAND、cuBLAS、そしてSTLのCUDA版であるThrustがすごすぎてびっくりです。
もうこれCUDA単品はいらないじゃんとすら思ってしまいます。
最大値探索みたいに本来はfor文1つのあっさり文でも
並列処理だと二分木でやらないと性能がでないので地道に書くと大変ですが
Thrustさんが全部やってくれそうな気配です。
バイナリ関数ならなんでも渡せばやってくれる感も素敵です。
こうして世の中便利になってブラックボックス化していくわけです。

OpenCVのCUDA版も、あるべくしてあるという感じでさすがです。
グラフィックをプロセッシングするユニットの名に恥じないです。
並列処理のOpenCLと画像処理のOpenCVと3DCGのOpenGLが混ざります。
いくらなんでも似たような名前つけすぎだろと思います。
開発環境になんでもStudioをつける安易さと双璧をなしていると思います。

モンテカルロ法による皮膚の光学特性シミュレーションの例は
内容自体おもしろいのと、条件分岐を減らす地道な努力を感じ取れる例でした。
Warp Divergenceはかなり強敵そうです。
この例ではすぐにメインフローに戻るようにして改良していますが、
他にも特殊ケースを0に割り当てて無理矢理1本のフローで進めるとか、
複数の場合を1つの配列にまとめてゴリゴリ進むとか、
2つのケースをプラスとマイナスに割り当てるとか、
ifしないで頑張る方法をいろいろ考える必要がありそうです。
この間読んだ本には分岐の結果がそれぞれ違うwarpで処理されるようにするとかいう
アクロバティックなコツも載っていてあれもおもしろかったです。

電解の振動の伝搬シミュレーションのFDTD法もおもしろいです。
メモリアクセスの回数と演算回数から計算時間を見積もるのはすごく難しそうです。
この例のように正しくキャッシュの使われ方を見積もらないといけないし、
同期とかあったらさらにややこしそうです。

CUDA Fortranは「そんなのあるんだ」という驚きはあったものの、
Fortranに興味がないのでスルー。

OpenCLは以前別の本を読んだ時にも思ったけど、
動的コンパイルなのがしんどそうです。
ホスト側コードと同時にコンパイルされてほしいです。
動的コンパイルは計算機科学的な気持ちでおもしろいなと思うけど、
実際に実装する局面では何かとしんどそう。
他にもいろいろやらないといけなくて、
CUDAがどれだけ隠蔽してくれていたかがよく分かりました。

CUDAの本はソフトウェアの記述とハードウェアの記述が近いのでおもしろいんですが、
家のPCにCUDA対応GPUがついていない、増設もできない、というガッカリ環境。
PCを買い換えたら遊ぼう。
いつになるやら。
  1. 2017/02/21(火) 23:59:07|
  2. | トラックバック:0
  3. | コメント:0
<<すばらしい新世界 [オルダス・ハクスリー(著), 黒原敏行(訳)] (光文社) | ホーム | ユーザーズディジタル信号処理[江原義郎(著)](東京電機大学出版局)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://myumbrella.blog42.fc2.com/tb.php/351-6989e4f5
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。