Qsの日記: ちょっとでもいいから触れてみよう 2
CUDAがSPEよりプログラミングしやすいかっていったらそれは無い気がする。どっちも短所が痛すぎる。その短所とはメモリ関係とプログラミングモデル。
SPEは256kBしかないからダメ、とか言われるけど、CUDAだって本当に高速にアクセスできるメモリなんて高々16kB。これを8つのプロセッサで共有するからプロセッサあたり2kB。そしてメモリの入れ替えもプロセッサがやらないといけない。CUDAではプログラマブルキャッシュなんて呼んでいた気がするけど、ただのスクラッチメモリ。ただ、プロセッサが512MBとかある外部メモリにアクセスできるのがCellよりマシなところ。もちろんレイテンシは数百クロック程度。
また、いまのところCUDAでは同時に1種類のプログラムしか動作しない。だから、Cellで言えば、あるSPEは音処理、別のSPEは画像処理、またまた別のSPEは違う処理といったことができない。
CUDAのプログラミングモデルは汎用プロセッサのそれとは大きく異なる。1つのデータセットを100個以上のプロセッサがよってたかって処理するわけだが、全部のプロセッサは同じプログラムである。言い換えれば、1つのソースコードで100個以上のプロセッサを操り、1つの目的の処理を達成するのである。んで、高速なメモリはプロセッサあたり2kB。
プログラムを考えるときの頭は、どちらかといえばRTLを作っている感じだった気がする。ソフトウェアしかできないスタッフに丸投げしたら、CUDAの特徴を活かしていないプログラムしか書けなかった。CellはSIMDなので一応ソフトウェアな頭でかける。
CUDAの例題として、簡単なデジタル信号処理をさせたがあまり速度がでなかった。ある意味当然な結果だったかもしれないけど、処理の並列性が少なかったのである(せいぜい数十個)。そして同じ処理をCPUのSIMDでプログラミングしたら、それ以上の速度が出た。SPEも試してみたいので、leadtekの例の奴を入手したらやってみるつもり。
てなわけで、CUDA(というかGPU)が常に良いアドバンテージを持っているわけではなく、逆にツボる場所はCell以上に狭いのではないかと思う今日この頃。
たぶん、汎用CPUは演算速度は無いけど大きな自由度があり、GPUは演算速度は高いが自由度が低く、Cellはその中間(ど真ん中じゃないけど)に位置するんだろうなと。
んー、なんか前にも似たようなことを書いた気がする。
オモテにコメントとして書いてくださいよ〜 (スコア:1)
GPUのほうはいじったことないですが、どっちもたぶんプログラミングと
最適化がオオゴトでプログラマには苦痛(変態プログラマには快感)なの
だと思います。コードが読みにくくなるし。
ライブラリが充実する頃にはシステムが陳腐化してそうだし。
love && peace && free_software
t-nissie
Re:オモテにコメントとして書いてくださいよ〜 (スコア:1)
仕様書読んだところ、GPU側のメモリ管理や実行などを
コントロールする感じで、CUDAと似たようなフレームワークに
なっている感じです。
PC側のソースコードはGPUの種類に関わらず使い回しができる
ように見えますが、GPU側のコードはGPUの種類に応じた最適化が
必要そう。
openCLの仕様書をきっちり読んでいないんで、すげー適当な
ことかいてるかもしれません。