素晴らしい。
という誰もが一度は抱く妄想を具現化したGPGPUに関して調べていました。NVIDIA と AMD どっちに投資した方が将来リターンが大きいかとか。
まとめると
AMD は倍精度が速くてアセンブラが提供されているという、いかにも科学者が好きそうなシステムですね。でも上のN体問題の例だと
というわけで、CUDA みたいな高級言語で loop unrolling をがんばるだけで理論値の6割出せるというのは驚きです。カジュアルプログラマにとっては非常に魅力的です。
で、GPGPU で性能出そうと思ったら loop unrolling をしなくちゃいけなくて、関連してレジスタの数が気になるわけですが、探した限り AMD の GPGPU のレジスタ数ってドキュメントに書いてないんですよねえ。ここにもはてなマークで書いてありますし。アセンブラ提供しておいて、レジスタの数を教えないってどうなのという気がします。いろいろ検索して
NVIDIA GT200 | AMD RV770 | |
Registers per SM/SIMD Core | 16K x 32-bit | 16K x 128-bit |
Registers on Chip | 491,520 (1.875MB) | 163,840 (2.5MB) |
というのを見つけました。レジスタ総数50万個と15万個、総容量1.9MBと2.5MBって、これ本当にレジスタの数字なのか。で、AMD の正確な数字は 128-bit レジスタが1024個/Stream Processor ということらしいです。 1024*16*10=163840個。
あと AMD だと並列実行可能な異なるコードは10までだけど、NVIDIAは30という違いがあったりするらしいです。この点でも NVIDIA の方が柔軟性は高いといえます。
AMD は将来的にBrook+をどうするのかが不透明で、OpenCLがんがりますと言いつつまだOpenCL対応のSDKを配布できていないというのが。
最近のコメント