AMDのGCNアーキテクチャ
VLIW5やVLIW4命令は、4要素の頂点データやピクセルデータを扱うのには適しているのであるが、汎用の科学技術計算となると、4要素のデータばかりとは限らない。そうなると、VLIWに命令を詰め込むコンパイラの仕事は、より難しくなり、演算命令のスロットが余ってしまい、使われない演算ユニットが多くなるというケースが増えてくる。
そこで、AMDは、2012年に「Graphics Core Next(GCN)」という新GPUアーキテクチャに切り替えた。GCNは、HD7000シリーズのハイエンドのHD7700~HD7900 GPUから実装が始まっている。
図8.3はAMDのGCN Whitepaperに載っている図であるが、VLIW4とGCNの実行のやり方の違いが分かりやすく書かれている。そして、利害得失が下側の箇条書きにまとめられている。
VLIW4の場合は、4つの演算器を持つレーンが16あり、各レーンで同じ4命令のVLIW命令が実行される。一方、GCNでは16個の演算器を持つレーンが4レーン存在し、各レーンの16個の演算器は同じ1つの命令を実行する。そして、レーン0は、VLIW4の最初の演算命令、レーン1はVLIW4の2番目の演算命令、…というようにVLIW4の4命令が4つのレーンで実行される。
どちらも演算器の数は64個で、VLIW4の各命令が16個の演算器で実行されるのは同じであるが、レーンの演算器の数やレーン数が逆になっている。
箇条書きの方を見ると、64個の単精度(FP32)の積和演算を実行するというのは両者同じであるが、VLIW4の方は、ひとまとめになる4演算命令の間に依存性が無い命令を選ぶ必要がある。依存性が無く、かつ、使用するレジスタファイルのポートの衝突などが無い命令を見つける必要があり、コンパイラにとっては難しい作業である。また、このような4命令をまとめるために、アセンブラ命令の順序が入れ替わり、デバッグが難しくなるという問題もある。
前に述べたように、グラフィックスの場合は4要素のデータが中心なので問題は少ないが、汎用の計算では利用率が下がり、ピーク性能を出すには注意深い最適化が必要になる。
一方、GCNの方は4つのSIMDユニットにそれぞれ1つの命令を実行させる。並列に16個の計算が必要ない場合にはムダが生じるが、仕事が十分ある場合は、全部の演算器をフルに動作させるのは容易である。そして各演算器は専用のレジスタファイルポートを使うので、レジスタファイルのポート使用が衝突することも無い。
また、コンパイラとしては、普通のスカラプロセサと同じように命令をスケジュールすれば良いので、VLIW4のような難しい作業は必要ない。そのため、ツールチェインの開発やメンテナンスも簡単になり、安定して性能も出しやすい。