« フィッシングサイト対策目的にURLを可視化するというアイディア | トップへ戻る | 実験機がツン期に入った »

2007年02月06日

複数GPUの思想

ぶっちゃけ研究資料のサイトに書いていることなんだけど、日記に回したほうが人の目に触れるので回してみる。

長いので本文は追記に書く。

ちなみに、ここでいう複数GPUってのは、1PCにビデオカードを複数ぶっさす話ね。
PC複数台は話の範疇に置きません。

----

複数GPUというと、SLIやCrossFireを考える人がいそうだが、
私はあえてそうでない方向へ進んでいる。
その辺について考えていることを適当に書いておくことにする。


SLIやCrossFireを使う利点は、1GPU向けプログラムをそのまま2GPUに適用できることだと思う。
ドライバレベル(ユーザプログラムより下のレベル)で最適化をしてくれるなら、それにまかせればユーザの負担が軽減されるのだから、
(主にアプリケーションプログラマが)幸せになれる。

ちなみに、ドライバにお任せで本当に性能が向上するのかは知りません。
GeForceもRadeonもプロファイルを使っているはずなので、
自作アプリだと厳しかったりするのかな?


一方で、いくつもの欠点が思いつく。

まず、SLIやCrossFireが性能を確実に2倍(以上)にするものではなく、対象アプリケーションによっては全く性能向上が行えないという話を聞いたことがある。
とはいえ、これは恐らくCPUとGPUの処理バランスの問題だろうから置いておこう。

次に、VRAM容量を2倍扱いにできないことが挙げられる。
SLIにせよCrossFireにせよ、2GPUそれぞれのVRAMに同一のデータを配置しておき、
それを用いて分割フレームレンダリングなどを可能としているためだ。
VRAMアクセス速度が向上する可能性はあると思うが、メモリ容量は扱える問題サイズの上限に直結する問題であり、
VRAM容量の増加効果が得られないのは残念すぎる。

更に、性能が異なるGPUを組み合わせて利用すると弱い方にひきずられてしまうなど、複数GPUの全ての性能を活用することが困難であるという点も挙げられる。
1世代変わると演算性能が劇的に変わるGPUにおいて、旧機種と新機種の併用にどれだけの効果があるのかという声も聞こえそうだが、
例えば独立した複数のジョブをどんどん消化していくという問題設定を考えた場合、
それなりの性能を持つプロセッサが複数あれば、どんどんジョブを投下できるようになり、実行時間の短縮を行うことができる。
GPUはCPUと比較してアーキテクチャの進化に対してバスの進化速度が極端に遅いため、
旧世代のプロセッサを現行機に追加することが容易であるため、
世代の異なるプロセッサを組み合わせて全部の性能を同時にりようしてやろうという考え方は十分に現実的ではないだろうか。

最後に、SLIやCrossFireでは、当然ながら、 GeForceとRadeonを併用することはできない。


では、複数GPUを複数GPUとして扱う場合について考えてみよう。

こちらの場合は、上記の利点・欠点が逆転する。

欠点は、1GPU向けのプログラムをそのまま2GPUに適用することは不可能であり、実装に手間がかかることである。

利点は、GPUを独立して叩けるためVRAM容量を2倍使うことが可能であり、
性能が異なるGPUでも全て活用できる可能性があり、
もしかしたらGeForceとRadeonを同時に使えるかもしれないことである。


複数GPUの方は半分くらいが想像の範囲を超えていないのだが、
こうして考えると特にGPGPUの世界では複数のGPUを複数のGPUとして扱う方が面白そうに見える。


なんだか自動並列化コンパイラと手動並列化プログラミングの比較をしている気がしてきた。
きっとあながち間違ってないよね。

偽要約:
未踏の成果報告会のデータだけど、HPLで妥協していいよね。
新しい計算基盤ソフトウェアによって現在の計算機プログラミングの世界に新しいパラダイムをもたらそうとしているという主張はできるからいいよね。
……っつーかネタが思いつかないのよ。プレゼン資料を半分くらいでっちあげてから、CLAPACKにでもぶち込んで考えるかなぁ。

投稿者 togabito : 2007年02月06日 02:34

Trackback Pings

このエントリーのトラックバックURL:
http://aaa.jspeed.jp/~togabito/cgi-bin/mt/mt-tbx.cgi/732

コメント

コメントしてください




保存しますか?