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の価格は、どのくらいになるんだろうか。

0 件のコメント:

コメントを投稿