後藤弘茂のWeekly海外ニュース

次世代ゲーム機Xbox OneのGPUアーキテクチャ

ジオメトリパイプは2並列のXbox OneのGPUコア

Xbox Oneが展示された東京ゲームショウ会場

 次世代ゲーム機の季節がやってきた。ソニー・コンピュータエンタテインメント(SCE)はPlayStation 4(PS4)を、MicrosoftはXbox Oneを北米などで来月から発売する。発売が迫ったことで、両コンソールのアーキテクチャもさらに見えてきた。

 Xbox OneのGPUコアは、各スペックが8月に開催された「Hot Chips 25」で明らかにされたため、構成が推測できるようになった。GPUコアのアーキテクチャはGCN(Graphics Core Next)だが、CU(Compute Unit)は12ユニット。各CUそれぞれが16レーンのベクタユニットを4ユニット備えるため、合計で768個の浮動小数点積和(FMAD)演算ユニットとなる。AMDの表現では768コアだ。この数字自体は、かなり早い段階から知られていた。GPUコアの演算ユニットの数は、PS4の3分の2で、このスペック差が論議を呼んで来た。

GPU/GPU MMUの接続
Graphics Core NextのCompute Unit(PDF版はこちら)

 シェーダコアの演算性能は1.31TFLOPSで、853MHzの動作周波数で駆動することが分かる。ゲーム機の場合、PC向けのGPUやAPUと異なり、低周波数でしか動作できないチップを、低価格の低周波数モデルとして販売することができない。スペックの動作周波数に達しないチップはスピードイールドではねられてしまう。そのため、歩留まりを上げ製造コストを抑えようとすると、動作周波数を上げることが難しい。

 ジオメトリ性能で1.71G Primitive/secというスペックは、853MHzで2 Primitive/Cycleであることを示している。この数字は、ジオメトリパイプラインを2基備えていることを意味している。つまり、Xbox OneのGPUコアは、グラフィックスパイプ的にはデュアルコア的な構成になっている。

デュアルジオメトリパイプ構成のGPUコア

 AMDの現在のミッドレンジから上のディスクリートGPUも、デュアルジオメトリパイプ構成となっている。Xbox Oneは、プロセッシングパフォーマンスに対して、相対的に固定のジオメトリ性能が高い構成だ。AMDは通常は10個程度かそれ以上の数のCUに対して、1個のジオメトリパイプラインを配置する。Xbox One GPUコアは6個のCUに対して1ジオメトリエンジンの比率となっている。下の図が推定図だ。

Xbox One GPUの概要(PDF版はこちら)

【お知らせ】前回の記事に添えた同図において、ジオメトリの数値を17.1G Primitives/secとしておりましたが、1.71G Primitives/secが正しい数値となります。お詫びとともに訂正いたします。

 図でCUのクラスタを4個構成に描いたのは、CUの数が左右対称で2グループに分けられていると推測したからだ。ジオメトリパイプが2-wayに分かれているとすると、実際のシェーディングタスクをディスパッチされるシェーダコアも2つに分かれている方が都合がいい。

 通常、ジオメトリパイプが2パイプの場合は、画面を分割してジオメトリタスクを2並列で流し、頂点やプリミティブのシェーディングを行ない、その後、ラスタライズしてピクセルシェーディングへと移す。(PowerVRのような)タイリングアーキテクチャGPUのようにジオメトリだけ全画面を処理してメモリに保存、その後、ピクセル処理をタイル単位で行なうのではなく、分割した画面それぞれのジオメトリとピクセルプロセッシングを2つのパイプラインでベルトコンベアのように実行するイミーディエイトモードとなっている。そのため、上流のジオメトリエンジンが2分割されていると、処理のパイプは2つに分かれる。図は、そういったパイプラインを前提として、演算部分もクラスタ単位で2分割に描いている。

 もっとも、カーネルのディスパッチはCU単位で行なわれクラスタ単位ではないため、実際にはCUのクラスタは3個の可能性もある。ただし、CUは冗長性を持たせるために実際には12個以上実装しておいて12個だけを有効にしている可能性も高い。ちなみに、PS4は20個のCUを実装して、そのうち18個を有効にしていると見られる。

コンピュートのコマンドプロセッサを2倍に

 Xbox OneのGPUコアは、グラフィックス用のコマンドプロセッサが2ユニット、演算用のコマンドプロセッサが2ユニットの構成となっている。コマンドプロセッサは、オンメモリのコマンドバッファ(キュー)からコマンドをフェッチしてGPUコアのディスパッチャに送り込む。キューからのフェッチ以降はGPU側のハードウェア処理となっており、CPU側からは自動的にフェッチが行なわれるように見える。

 従来のAMD APUではコマンドプロセッサはグラフィックスと演算でそれぞれ1ユニットだったのを、Xbox Oneでは倍増させた。グラフィックス用のコマンドプロセッサが2ユニットあるということは、独立した2つのグラフィックスコンテクストを並列に扱えることを意味する。

AMD GPUのコマンド実行

 そのため、Xbox Oneでは2つの独立したグラフィックスコンテクストを同時にGPUコアで走らせることができる。時分割でコンテクストを切り替えるのではなく、CPUのマルチスレッド実行と同じように、2つのコンテクストを保持し、それぞれが異なるバーチャルメモリ空間で動作する。CPU的な意味でのマルチスレッディングに近い。この構成は、全く異なる画面を同時にレンダリングする場合には利があるが、通常はフレーム毎に時分割でレンダリングを行なっている。

 演算コマンドプロセッサは、SCEやAMDが現在「ACE (Asynchronous Compute Engine)」と呼んでいるユニットと基本は同じものだ。演算コマンドプロセッサは、PS4や最新のAMD GPUのACEと同様に、1ユニットがそれぞれ最大8個のオンメモリキューをハンドルできる。つまり、1つのコマンドプロセッサが、最大で8つの異なる命令ストリームをバッファして、毎サイクル、そのうちの1つのストリームをタスクディスパッチャに送り込むことが可能だ。Xbox Oneの場合は2ユニットなので、最大16のキューに保持した命令ストリームをインフライトで制御できる。

PS4と比べると演算タスクの思想が異なる

 Xbox Oneは演算コマンドプロセッサが2ユニットの構成で、旧来のAMD APUより倍増している。しかし、ライバルのPS4は同等のユニット(ACEs)が8ユニットもある。そのため、PS4の場合は、合計で64の演算タスクキューを保持することができる。つまり、GPUで実行する汎用演算タスクのディスパッチ性能は両者で大きく異なる。シェーダコアで実行する演算タスクのWaveのディスパッチは、Xbox Oneが毎サイクル2の性能であるのに対してPS4は8だ。

 これは、Xbox Oneは粒度の大きな少数のタスク、PS4は粒度の小さな多数のタスクを扱うという発想で作られていることを意味している。粒度が大きいことを期待するのは従来のGPUコンピューティング的で、粒度を小さくするのはどちらかというとPS3の「Cell B.E.」の発想に近い。APU設計はXbox Oneの方がアグレッシブなカスタマイズが多いが、演算タスクのディスパッチ部分はPS4の方がアグレッシブだ。

 Xbox One GPUのROP(Rendering Output Pipeline)ユニットは、レンダリングパフォーマンスが13.6G Pixels/secであることから、ROPは4クラスタで16ユニットと推測できる。この構成は、eSRAMを加えたメモリ帯域に対して、相対的にかなり弱い。ROPはメモリ帯域を食うため、通常はメモリ帯域とのバランスを取った数を搭載する。Xbox 360ではeDRAMのおかげでここに利点があったのが、Xbox Oneでは一変しておりROPはかなり制約されている。これは構成上の妥協だと見られる。

 GPUのROPはメモリコントローラのクライアントユニットであるため、通常のGPUはメモリコントローラと同数かその整数倍のROPクラスタを備える。そのため、美しい比率を維持しようとすると、Xbox OneのROPクラスタの数は4個か8個という選択となる。

 問題はROPがそれなりにダイ(半導体本体)面積を食うことで、8個にするとタダでさえ大きなXbox One APUのダイがさらに大きくなってしまうと判断したのかも知れない。ちなみに、ROPクラスタを6個といったメモリコントローラと一致しない数字にすると、変則的な構成となり効率的に動かすために工夫が必要となるという。

オーディオのポイントはAMDとの互換性

 AMD GPUではGPUコアはHubに接続されており、HubにスポークでGPUコア以外の多数の画像関係のコプロセッサがぶら下がる構成となっている。HubがI/Oコントローラとも接続されているのは、ディスクリートGPUからアーキテクチャが継承されているためだ。ディスクリートでは、HubにPCI Expressインターフェイスが接続されており、PCI Express経由でホストCPUにアクセスする仕組みとなっている。

Xbox One APUのアーキテクチャ(PDF版はこちら)
Xbox One全体のブロックダイヤグラム

 Xbox Oneでは、AMD APUと比べてHubに接続されるユニットの数が増えている。オーディオのI/Oもここに接続されており、これらのI/Oはオンダイのオーディオプロセッサ群に併設されたオーディオDMAに接続されている。

 オーディオプロセッサ自体は画像系のコプロセッサではないため、I/Oコントローラの側に直結している。外付けのオーディオプロセッサカードをI/O経由で接続した場合と同じ位置付けだ。Hub側のプロセッサとは異なり、メモリアクセスはIOMMUを経由する。

オーディオプロセッサの構造

 Xbox Oneのオーディオプロセッサは上のスライドのようにベクタコアが強力な構成で、コーデックなどに強いエンジンとなっている。AMDも新しい「AMD Radeon R9/R7」系ディスクリートGPUにオーディオコプロセッサ「TrueAudio」を統合した。

 以前の記事で、Microsoftのオーディオコアは「TrueAudio」とは異なるという推測を書いたが、間違いだった。MicrosoftもAMDと同じTensilicaのオーディオDSP IPを使っているという。ただし、オプションでXbox One用のカスタマイズを加えている。特に目立つのは2個のベクタDSPコアで、128-bit幅SIMD(Single Instruction, Multiple Data)アーキテクチャ、演算パフォーマンスは15.4GFLOPSとなっている。ちなみに、PS4のコアはTensilicaかどうか、分かっていない。

 オーディオDSPのIPコアのライセンシーがXbox OneとAMD Radeon R9/R7で共通しているとなると、ポイントはオーディオAPIの共通性はあるのかという点になる。共通性が高ければ、オーディオ機能の移植が容易となる。組み込みDSPの場合はコンフィギュレーションによって命令セット自体も大きく拡張され異なっている場合があるため、同じメーカーのDSPでも、ネイティブ命令が完全に同じとは限らない。とはいえ、共通性は高いはずだ。

x86のアドレススペースとの適合性

 ちなみに、AMDはゲームコンソールとAMD GPUの間で、ローレベルのグラフィックスAPIの共通性を利用しようとする「Mantle(マントル)」戦略を打ち出している。Mantleの真の狙いは、ゲームコンソールとAMD GPUの間で、ローレベルAPIベースでGPUを使うゲームコードの移植を容易にすることにある。オーディオDSPのIPが同じなら、オーディオについても似たようなローレベルアクセスの共通化が可能になるかも知れない。

Mantleの概要

 前回の記事で、GPU側のメモリアドレステーブルシステムなどを変更した可能性を書いたが、これは正確ではなかった。なぜなら、GCN(Graphics Core Next)アーキテクチャのバーチャルメモリアドレスシステムは、もともとx86のページシステムと親和性が高くなるように設計されているからだ。4KBページをサポートし、x86のアドレススペースに簡単にマッピングできるようになっている。ちなみに、GCNではGPUコア側もTranslation Lookaside Buffer(TLB)を備え、物理メモリアドレスへのトランスレーションをハードウェア支援する仕組みとなっている。

GCNのバーチャルメモリアドレスシステム
Xbox One SoCの構成要素

 また、Hot Chips 25のレポート時には、Xbox One SoCの製造プロセスについて、TSMCの28nm HPMプロセスと書いた。これについてTSMCの28nm HPプロセスで製造されると、Microsoft自身のプレゼンテーションに訂正が入っている。スタンダードのハイパフォーマンスプロセスだ。次のステップで、Microsoftはプレーナの20nmに移行するか、20nmをスキップして3Dトランジスタの16/14nmプロセスに移行すると見られる。

Xbox One SoCの概要

(後藤 弘茂 (Hiroshige Goto)E-mail