後藤弘茂のWeekly海外ニュース
Xbox One X搭載チップ「Scorpio Engine」の詳細が明らかに
2017年8月28日 14:07
米Microsoftは、11月7日に発売する次世代ゲーム機「Xbox One X (Project Scorpio)」の技術概要を明らかにした。
Xbox One Xの中核となるSoC (System on a Chip)は「Scorpio Engine(スコーピオエンジン)」。Xbox Oneと同様にAMDアーキテクチャで、Xbox One同様にアーキテクチャ的にはPS4系と似通う。PlayStation 4(PS4) Proと同世代で、より高性能となる。
Scorpioの技術概要を発表
米クパチーノで8月20~22日に開催された半導体チップカンファレンス「Hot Chips 29」で、MicrosoftはScorpio Engineの概要を発表した。
ScorpioはMicrosoftの内部コードネームだったが、正式にチップの名称となったという。MicrosoftのJohn Sell氏(Distinguished Engineer,Microsoft)によると、「Scorpioの開発にあたって最も重要なゴールは、真の4Kゲーミングパフォーマンスを達成すること」だったと説明する。それに合わせて、GPU性能やメモリ帯域などすべてが決められたという。
チップのトランジスタ数は70億、これはNVIDIAの「GeForce GTX 1080 (GP104)」に匹敵する。チップのダイサイズは359平方mmで、これは初代Xbox Oneの363平方mmとほぼ同じ。
プロセス技術はTSMCの16nm FinFET 3Dトランジスタテクノロジ「16++」。CPUコアとGPUコアはどちらも、AMDアーキテクチャのXbox One X向け専用カスタムコアとなっている。
GPUが大半を占めるScorpioのダイレイアウト
今回Microsoftは、ダイレイアウトも公開した。ダイの大半を占める黄色の部分は、GPUの演算クラスタであるCU (Compute Unit)群。右側の暗緑のエリアは、8個の省電力CPUコア群。圧倒的にGPUコアの方の面積が大きい。
今回のScorpioではGPUが大幅に強化されているが、ダイレイアウトでもそれがわかる。
CPUコアのベースアーキテクチャは、Xbox Oneと同じJaguar系列なので、CPUコアの面積は小さい。AMD自体は、16nmのJaguar系CPUコアを製品化していないが、Xbox OneとPS4には、16nm版の拡張コアを提供している。
ダイの上、右、下の3周を取り巻いているのは、GDDR5のインターフェイス。メモリインターフェイスがかなりの面積を取っていることがわかる。
Scorpioに搭載されたGPUコアのCUの数は40ユニット。しかし、ダイ上ではCUは44個確認できる。これは、歩留まり向上のために冗長性を持たせた結果だ。
ダイ上でCUは左右に分かれており、左右それぞれが上下2段の構成になっている。合計で4つのシェーダアレイに分割されている。「各シェーダアレイがそれぞれ11個のCUを備えており、そのうち10個がアクティブで、1個が予備となっている」(Sell氏)という。
ゲーム機のGPUコアでは、歩留まりを上げるために演算ユニット数に冗長性を持たせるのが一般的だ。
GPUコア部分のロジック回路は、冗長性を持たせることが難しい。そのため、ダイ上に欠陥が発生すると、欠陥を含むCUが正常に動作できなくなる。ディスクリートGPUの場合は、欠陥が多いダイは、CU数の少ない廉価品として販売できるが、単一スペックのゲーム機の場合、そうはいかない。
この問題を解決するため、CU自体に冗長性を持たせて、数%のCUが動作できなくてもチップとして問題がないように設計する。そのため、演算コアに最初から冗長性を持たせている。
Microsoftでは、前世代のXbox Oneでも、14個のCUのうち12個だけを使っていた。こうした冗長性の持たせ方は、PS4系とも共通している。
3倍以上に大型化したGPUコア
GPUのアーキテクチャは、AMDのGCN (Graphics Core Next)系。これは、従来のXbox OneやPS4と同様だ。世代はGCN4と、AMDのPolaris (Radeon RX 4xx)GPU相当となっている。
GPUのCU数は、初代Xbox Oneの12ユニットから、Xbox One Xでは40ユニットへと3倍以上に増えた。加えて、GPUコアの動作周波数も、853MHzから1,172MHzへと37%上がっている。
各CUは、それぞれFP32(32-bit浮動小数点)積和算ユニットを64個備えている。そのため、64 FMAD×40 CUs×1,172MHzで、演算性能は6TFLOPSに達する。CU内のテクスチャユニット数も同様に増えているため、テクスチャ処理の性能であるテクセルレイトも、187.5G bilinear texels/sになっている。
6TFLOPSというXbox One Xの演算性能は、Xbox One (1.3TFLOPS)の4.6倍で、16nmプロセスのXbox One S(1.4TFLOPS)の4.3倍。テクセルレイトも同様だ。ちなみに、PS4 Proは4.2TFLOPSだ。
Scorpioでは、4つのシェーダアレイそれぞれに、ジオメトリの固定処理を行なうジオメトリエンジンが1ユニット備えられている。独立した4つのグラフィックスアレイを持っているような構造だ。
ジオメトリエンジンの数はXbox Oneの2倍となり、ジオメトリパイプラインの処理能力は4.688G primitives/sと2.6倍になった。
GPUアーキテクチャも拡張
GPUを制御するコマンドプロセッサは2ユニット。これは、初代Xbox Oneの時から同様だ。コマンドプロセッサは、カスタムマイクロコントローラ(MCU)で、GPU全体の制御を行なう。
コマンドプロセッサは、グラフィックスタスクもコンピュートタスクもどちらも扱うことができる。しかし、AMDはGPUの汎用性能を高めるために、より多くのコンピュートタスクを並列実行できるアーキテクチャにした。
そこで、メインのコマンドプロセッサ以外に、コンピュートタスク専用のコマンドプロセッサ「ACE (Asynchronous Compute Engine)」を設置した。ACEは、Xbox Oneでは2個だったのが、今回のScorpioでは4個へと倍増されている。これによりコンピュートタスクの並列度を高めることができる。
ちなみにAMDのGCN4では、コマンドプロセッサとACEに加えて、さらに2個のハードウェアスケジューラコアを加えた。コマンドプロセッサとACEがハンドルするタスクの、スケジューリングの制御だけを専用に行なう。ハードウェアスケジューラについては、Scorpioに実装されているかどうか確認できていない。
ScorpioのGPUコアでは、レンダバックエンドもXbox Oneの2倍に強化された。32ユニット相当で、37.5G pixels/s。PS4系はレンダバックエンドが32ユニット相当なので、ユニット数としては同列で、動作周波数が高い分だけ、性能はXbox One Xの方が高い。
Scorpioアーキテクチャでは、レンダバックエンドは8個のレンダボックスに分かれている。それぞれのボックスに、256KBのグラフィックスL2キャッシュが接続されている。L2キャッシュは合計で2MBとなる。
2個のレンダボックスが、1個のメモリコントローラクラスタに接続されている。メモリコントローラクラスタは、実際には2個のメモリコントローラを含んでいる。これが合計で4クラスタ配置されている。ややこしいことに、メモリチャネルは全部で12で、これを4個のメモリコントローラクラスタからアクセスする。
シンプル化されたGDDR5のメインメモリ
Xbox Oneでは、メモリアーキテクチャが特殊だった。メインメモリはDDR3で、4チャネルx256インターフェイス。オンマザーボードで2,133Mbpsで駆動しており、68.3GB/sのメモリ帯域だった。
これは、2010年代中盤のゲーム機としては貧弱なメモリ帯域だ。同時期のPS4は、x256インターフェイスでGDDR5を5.5Gbpsで駆動して、176GB/sのメモリ帯域を達成していた。
Xbox Oneでは、その不足を広帯域のグラフィックス用SRAMを内蔵することで補っていた。32MBのグラフィックス用の「eSRAM (Embedded SRAM)」を搭載しており、8MBごとのブロックにそれぞれ256-bitの双方向バスで接続されている。
バスは合計で片方向1,024-bitで、ピークメモリ帯域は双方向で204GB/s (Xbox One Sは218GB/s)となっていた。そのため、メインメモリのDDR3の帯域と合計すると、メモリ帯域は272.3GB/s (286.3GB/s)に達していた(片方向なら約170GB/s)。
Xbox Oneのメモリアーキテクチャの利点は、高価なGDDR5を使わずにすむため、メモリコストを大幅に引き下げることができる点。不利は、eSRAMとDDR3に分散したメモリアーキテクチャによって、プログラミングモデルが複雑になることと、ダイの多くを大容量SRAMに割かなければならないため、ダイ面積に対してのGPUコアなどの面積が小さくなってしまうことだった。
Xbox One Xでは、メモリアーキテクチャを一新し、広帯域のGDDR5のメインメモリ1本に絞った。「32MBのeSRAMのようなものは今回はない。開発者にとってよりシンプルになるようにした。ただし、(Scorpioでは)GPUもCPUとは別にキャッシュを備えている。(Xbox Oneソフトに対する互換性では)eSRAMの機能はメモリシステムの小さな部分を使ってエミュレートされている」とSell氏は説明する。
ScorpioのDRAMインターフェイスはx384(384-bit)で、転送レートは6.8Gbps、メモリ帯域は326GB/sに達する。ディスクリートGPUクラスのメモリ帯域だ。
PS4 Proのx256(256-bit)GDDR5で217.6GB/sのメモリ帯域の1.5倍、つまりインターフェイスの幅が広い分だけメモリ帯域も広い。
メモリ容量は12GB。8GbitのGDDR5チップをx32で使っており、DRAMチップ個数は12個で12GBとなる。Sell氏によると、開発用システムではGDDR5をx16で使っており、DRAMチップ個数は24個、メモリ容量は24GBだという。
x32のGDDR5メモリチャネルそれぞれにGPUコアからバス接続
GDDR5は、x32(32-bit)のDRAMコントローラに接続されている。DRAMコントローラは合計で12チャネル。各DRAMチャネルには、CPUとGPUそれぞれが異なる経路でアクセスする仕組みとなっている。
CPU側からは、メモリコントローラの下にDRAMチャネルが3つずつバインドされて接続されている。この部分の詳細はまだ明かされていないが、CPU側からはフルのメモリ帯域は使えないものと推測される。
それに対して、GPU側からは、各x32 DRAMチャネルに対して個別のバスが引かれている。それぞれ256-bitの双方向バスが、合計で12本、GPU側のメモリコントローラのチャネルとDRAMチャネルを接続している。
つまり、GPUコアとDRAMコントローラの間のバス幅は、合計で3,072-bitにもなる。これは、メモリ帯域をフルに活かすためだ。また、12チャネルに分けているのは、メモリアクセスのグラニュラリティを下げるためだ。
Xbox One XのGDDR5のメモリ転送レートは6.8Gbpsなので、各x32チャネルあたりのメモリ帯域は27.2GB/sとなる。Microsoftのスライドでは、GPU側メモリコントローラからの256-bitバスの動作周波数は、1,170/850MHzとなっている。
850MHzの場合、このバスの片方向帯域は27.2GB/sとなり、GDDR5の帯域とマッチする。言い換えれば、256-bitのバスは、GDDR5のメモリ帯域をフルに活かすためのものだ。
Xbox Oneアーキテクチャでは、GPUのメモリコントローラとCPUの間に専用バスがあり、I/Oコントローラを経由せずにGPUコアとCPUコアのコヒーレンシを取ることができる。
この仕組みはXbox One Xにも受け継がれている(互換性を考えれば当然)。Scorpioのメモリコントローラから、CPUのクロスバスイッチに対して、双方向のバスが伸びている。このバスはXbox One系だけのもので、PS4系にはない。
Scorpioのユニークな点はこのほかにも多数ある。CPUコアも、PS4系とは異なるMicrosoftの特殊なニーズに合わせた拡張がされている。