自分が所属する研究室はGPUは良くないという主張を展開している。(もちろんそれを対外的には明示的に言うことは少ない)
しかし、そのような主張は少なくともweb上では少数派。恐らく学術界でも少数派である。
ここで偉そうなことを書いている自分もちゃんと説明を受けるまではGPUは良いものと思っていたので人のことは言えない。
ということで、他人から聞いたGPUのダメなところをメモしていきたいと思う。
教えてくださったM先輩、ありがとうございました。
消費電力
GPUは熱くなるイメージがある。実際にそのとおりだ。
GPUの消費電力が大きくなる原因はスレッドの割り当て部分だそうだ。
そもそもGPUはたくさんのスレッドを並列に動かしているが、1コアあたりに割り当てるスレッド数を大きくすることでメモリのレイテンシを隠蔽している。(これをSIMTと呼ぶ)
コンテキストスイッチの時に次に割り当てられるスレッドを探すのにハードウェアの実装が大きくなり、結果として消費電力が大きくなる。
メモリとのデータ転送
GPUのメモリといえば、256bit幅だったりGDDRだったりしてすごい高速だと思っていた。しかしながら計算能力と比較するとそんなことはなく、圧倒的に足らないのだそうだ。この性能は1byte転送する間にどの程度演算命令があればメモリ律速にならないかという指標であるFLOPS/Byteを使うらしい。GPUがどの程度FLOPS/Byteなのかというのは聞いたが、外に出していい情報かわからないのでここには書かないでおこうと思う。
プログラミングの難しさ
一番のGPUの難点はここだ。簡単にはプログラミングを行えないのである。1スレッドごとのプログラムを書いていくわけだが、これが難しいし書ける人にとっても本筋の計算とは違う苦労をするわけで積極的に書きたいわけでなはいだろう。とりあえず自分はCUDAを書けるようになるところから勉強してみようと思う。
アーキテクチャの勉強は思わぬところに落とし穴があるのが難しいけれど楽しいね。