2010年5月12日水曜日

クラウド研究会@青山オラクル

浅海さん:
クラウドアプリのモデリング

大規模になり、同期通信は現実的でなくなるので、非同期になる。
したがってキューのような構造が重要。

メッセージフローという抽象化。ScalaのDSLで書いたモノを
自動的にコードに変換する。Yahoo pipesのようなイメージ

感想:DSLは超読みづらい。あれでいいとは思えない。単純な構造は
書けるだろうけど、複雑な構造は難しそう。
マイクロソフト 砂子さん:
Azureのアップデート


  シンクフレームワーク

  Azure SQL - Azure SQL間、 SQL Server  - Azure SQL間、
  Azure SQL - クライアントアプリ間で データをシンクする
  汎用フレームワーク。これはすごい。
  シンクが効率的にきれいに実装されているなら、シンクのみを
  ベースにアプリを作ったっていいぐらいだ。

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