2010年5月6日木曜日
CUDA講習会
いまさらで恥ずかしいが、東工大で行われたCUDAの講習会に行ってきた。
CUDAはnVidiaのGPGPU(汎用GPU)向け開発環境の名前。CやFortranでGPGPU
プログラムができる。
ユーザは、GPGPU上で実行される「カーネル」と呼ばれるコードを書く。
このカーネルを、大量のスレッドで同時並列に実行する事で、並列実行が
行われる。面白いのは、多量に実行するスレッドを2段階に階層化すること。
スレッドグループがコアに割り当てられるので、コア単位の並列度を稼ぐには
スレッドグループを増やさなければならない。
個々のスレッドグループは一つのコア上で実行される。このときメモリアクセス
のレイテンシを隠蔽するために、SMT的な並列実行が行われるので、
ここにも複数のスレッドを割り当てておかなければ効率が落ちる。
スレッドグループ内からのみアクセスできるローカルメモリと呼ばれる
メモリがあり、これをうまく使うことで、大幅に高速化が可能。
今後はローカルメモリに変わって普通のキャッシュが導入されるとのこと。
この辺の最適化が不要になるので、さらに使いやすくなるだろう。
印象的なのは、CUDAの開発環境の完成度。コンパイルと実行が、ほとんど普通の
CPUと同じようにできる。カーネルとホストプログラムを一つのファイルに書けたり、
a.outが一つのファイルになるのも、地味だが
非常に重要なポイント。プログラミングモデルも、単純で並列に
親しみのないユーザにもわかりやすくてよい。この程度の作業で
数倍-数十倍の高速化ができるのなら、やってみたくもなる。
ただ、今後のGPGPUの行く末がちょっと気になる。この種のアクセラレータが
今後主流になるのはいいとして、開発コストをGPUユーザに負わせるモデルが
どこまで持続可能だろうか。ハイエンドGPUのユーザ層は先細りだし、
今後のGPUはプロセッサ内蔵の、よりカジュアルなものに移行していくだろう。
そうなったときにGPGPUの開発コストはHPCユーザが負わなければならない。
その場合のGPGPUの価格は、どのくらいになるんだろうか。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿