モバイルGPUの解析状況

Update: VideoCoreのvector registerは64x64だった

FOSDEM2013で、"Open ARM GPUs"と題された発表があり、現状のモバイルGPUの解析状況が纏められた。PowerVR/videocore以外に関してはLinuxで動作するドライバプロジェクトが一応存在する。Videocoreはプロジェクトは存在し、実際のコードも動作しているが、アーキテクチャの特殊性から他のアーキテクチャに比べて遠い位置にいる。
モバイルGPUは端境期に有り、デスクトップGPUの勃興期のように様々なベンダから絶妙なアーキテクチャGPUが幾つかリリースされている。今後、製造プロセスが22nmのように先端プロセスになっていくにつれ、このような解析は下火になり、デスクトップGPUと大きく違わない状況になっていくだろう。
ZiiLabsのZMSはここには出てこない。Design winが殆ど無いので仕方ないか。。Zii LabsはIntelに部分的に買収されている。
全体的に、統合/分離シェーダモデルの他に、フロントエンド(描画リスト等を受け入れる部分)のデザインに大きく差異があるように見える。PowerVRとVideocoreは比較的大規模なファームウェアを持っていて、それ以外のGPUは描画パケットの処理を受け持つ単純なフロントエンドとシェーダエンジンを分離したデザインになっている。

ARM Mali 200/400

  • バーテックスシェーダ(128?bit VLIW) / フラグメントシェーダ(32bit可変長命令)
  • 単純フロントエンド + ホストCPUによるシェーダコンパイル

Mali 400MP等はARM買収前のFalanxによるGPUの直接的な展開で、安価なタブレットでは多く採用されている。
600以降はOpenCL等にも対応した近代的なアーキテクチャとなっている。こちらはまだあまり解析されていない。

Adreno

  • Unified shader(r600風の96x3bit VLIW)
  • 単純フロントエンド + ホストCPUによるシェーダコンパイル

AdrenoはATIGPUをそのまま引いている。AMDはr600の情報をかなり公開しているので、これとの差分で考えることができる。

Tegra

  • バーテックスシェーダ(128bit VLIW) / フラグメントシェーダ(64+64?+32bit VLIW)
  • 単純フロントエンド + ホストCPUによるシェーダコンパイル

Tegraは5以降で通常のCUDAコア + 統合シェーダアーキテクチャに移行するとしている。現状のTegra2/3はかなりレガシーなGeForceアーキテクチャを引いていて、CPUの方もneon無し、VFPも縮小版といったなかなか男らしいアーキテクチャになっている。

Vivante GCxxxx

VivanteのGPUはエリア効率の良さをウリにしていて、確かに他のGPUに比べて多くの部分で単純化を感じる。アーキテクチャが実行可能なシェーダは512ステップとショッキングな短さで、OpenVGなどは独立したアクセラレータでサポートする。

PowerVR

(コメントなし)

Broadcom Videocore

RaspberryPiに採用されて、シェーダコンパイラGPU側に有るために多くの人の度肝を抜いた男らしいアーキテクチャ。Alphamosaic開発で、2004にBroadcomに買収された。
OpenGLやOpenVG実装は、Videocore側にRPCすることで実装されている。確かにOpenGLはリモート実行されることを想定してデザインされているが、まさかモバイルGPUでこれが行われるとは。。
Videocoreのアーキテクチャは昔懐かしい香りが漂う32bitsx32汎用レジスタ + 8bitsx8x8 8bitsx64x64ベクトルレジスタの構成となっている。普通のCPUとしての機能性も持つが、GPUとしての固定機能ももちろん持つ。