後藤弘茂のWeekly海外ニュース
汎用コンピューティングでも高速なPlayStation 4のGPU
(2013/3/11 00:00)
汎用コンピューティングに向いているPlayStation4のGPUコア
PlayStation 4(PS4)に採用された「GCN(Graphics Core Next)」は、AMDの現行のGPUアーキテクチャだ。従来のAMDのGPUは、VLIW(Very Long Instruction Word)型のプロセッサを束ねてSIMD(Single Instruction, Multiple Data)制御する方式だった。しかし、GCNからはアーキテクチャを一新、スカラ型のプロセッサを束ねる、いわゆるSIMT(Single Instruction, Multiple Thread)方式に変わった。SIMTは、SIMD上でフローコントロールを行なう方式を指している。
GCNアーキテクチャの特長は16レーンのベクタユニットに対して、プレディケーションによるコントロールフロー制御を行なう点。また、これまでのVLIWプロセッサでは、命令スケジューリングはソフトウェア(ドライバ)で行なっていたのを、ハードウェアベースのスケジューリングに切り替えた。
このアーキテクチャ変更の最大の利点は、汎用コンピューティングでのGPUコアの稼働効率を上げることができることだ。GPU設計では、NVIDIAはGeForce 8800(G80)以降、汎用コンピューティングへの最適化を急ピッチで行なってきた。それに対して、AMDは昨年(2012年)までは、汎用コンピューティングにも使えるようにするが、グラフィックスへの最適化にこだわり続けて来た。
GCNは、そうしたAMDの転換点のアーキテクチャで、非グラフィックスアプリケーションでも性能を出しやすいアーキテクチャになっている。また、汎用コンピューティングで性能を出しやすいアーキテクチャは、グラフィックスでも利点がある。変わったシェーダを走らせようとした時に、ガクっと性能が落ちるといった心配がなくなる。シェーダプログラミングも自由度が増える。
AMD GPUのラインナップとPS4
ソニー・コンピュータエンタテインメント(SCE)のハードウェア開発陣は、PS4を設計するに当たって、当初から汎用性の高いGPUコアを選ぼうという意図があったと見られる。そう考えると、SCEがPS4に、AMDのGCNアーキテクチャを選んだことは自然な流れだ。また、GCNを採用して2013年に出すとしたら、半導体技術の選択肢としては28nm以降のプロセスしかなかったと見られる。
GCNを選ぶ場合に、28nmプロセスしか選択肢がないのは、AMDが28nmにしかGCNを載せなかったことだけでなく、トランジスタ効率的にGCNは28nmプロセスでなければならないからだ。下の図はAMDの40nmと28nmのGPUのプロセッサ数などの比較図だ。40nm版のAMD GPUはVLIWアーキテクチャ、28nm版はGCNアーキテクチャとなっている。
ハイエンドGPUを比較すると、40nmのRadeon HD 6970(Cayman:ケイマン)が26.4億トランジスタで1,536個のMAD(Multiply-Add:積和算)ユニットを搭載している。それに対して、28nmのRadeon HD 7900(Tahiti:タヒチ)では、43億トランジスタで2,048個のMADユニットとなっている。同程度のダイサイズで、トランジスタ数は59%ほど増えたが、GPUコアのMADユニット数は33%程度しか増えていない。その下のパフォーマンスGPUになるとさらに比率は悪くなる。これは、GCNの方が実装が重くてトランジスタを必要とするアーキテクチャであることを示している。そのため、SCEはGCNを取るなら、GCNアーキテクチャでも十分なパフォーマンスを得られる28nmプロセス以降を選ぶ必要があった。
また、前回説明したように、SCEはPS4のチップのダイサイズも一定以下に抑える必要があった。ウェハ上の欠陥が同じ比率であっても、ダイサイズが大きいチップの方が劇的に歩留まりが低下するからだ。ダイが2倍になると、1枚のウェハから採れるダイの数は2分の1よりもずっと低くなる。
現状で明らかになっているGPUの構成から考えて、SCEがターゲットとしているチップのダイサイズは300平方mm以下だと推測される。これは、200平方mmを大きく越えるチップ2個で構成していたPlayStation 3(PS3)の時より、かなり大人しい。
冗長性を持たせた方が経済的なゲーム機のチップ
AMDの28nm GPUラインナップで、ユニット構成的にPS4に近いクラスは「Radeon HD 7870/7850(Pitcairn:ピトケーン)」だ。PitcairnはGCNアーキテクチャでCU(Compute Unit)ユニットが20個。それに対して、PS4のAPUはGCNでCUが18個だ。ただし、PS4の場合はCUユニットに冗長性を持たせている可能性がある。
PC向けGPUの場合は、ダイ上に配した20個のCUのうち、ウェハ上の欠陥で使えないユニットが発生しても大きな問題にはならない。欠陥があるCUを無効にして、CU構成の小さな下位GPUとして発売すればいいからだ。実際、Pitcairnでも20個のCUが有効になっているRadeon HD 7870と、16個しか有効になっていないRadeon HD 7850の2ファミリとなっている。
ところが、ゲーム機向けのチップでは、そうした商品構成分けができない。ゲーム機のスペック上で18個のCUとなっているなら、全てのチップで必ずCUが18個必要だ。そのため、CPUのマルチコア化やGPUのマルチユニット化に合わせて、冗長構成を取るようになりつつある。例えば、ダイ上には20個のCUを配置して置き、有効にするのは18個に減らせば、歩留まりを劇的に上げることができる。面積の大きいGPUコア側では、SCEはそうした冗長性を持たせる可能性がある。そのため、PS4のGPUコア部分は、Pitcairnにほぼ匹敵するかも知れない。
Pitcairnはいわゆるゲーマー向けのスィートスポットGPUで、200ドル~300ドル台中盤の価格のグラフィックスカード向けのGPUだ。PS4の公開されているパフォーマンスを、Pitcairnと比べると下のようになる。ただし、PS4の仕様は、まだ今後変わる可能性がある。
ゲーム機ならではのスピード歩留まりの制約
PS4のGPUの生パフォーマンスは1.84TFLOPSで、2.56TFLOPSのRadeon HD 7870の方が39%高いが、Radeon HD 7850と比べるとPS4の方が5%ほど高い。全体的に見て、PS4はRadeon HD 7870とRadeon HD 7850の中間だ。7870の方がパフォーマンスがずっと高くなるのは、より高いクロックで回しているからだ。Radeon HD 7870は1GHz動作で、800MHzと見積もられるPS4のGPUコアクロックより25%も高い。
PS4のクロックが低い原因は、先ほどの歩留まりと冗長性の話と同じ理由からだ。PC向けGPUの場合は、GPUコアの動作クロックを1GHzで製品化した結果、1GHzで動作しないダイが多数発生しても何も問題がない。1GHzで動かないチップは、低クロックの製品として廉価に出荷すればいいからだ。実際、同じPitcairnでも、下位のRadeon HD 7850の方は860MHzで出荷されている。
PC向けでは、こうした製品のビンニングによって、スピードイールドの問題を解決できる。しかし、ゲーム機の組み込み用途ではそうは行かない。使うチップは、全てスペックの動作周波数をパスしなければならない。そのため、歩留まりを高めようとすると、動作周波数を一定に留める必要がある。PC向けGPUと、同じアーキテクチャで同じプロセスなら、ゲーム機は相対的にやや大人しいスペックにせざるを得ない。そのため、ダイサイズ当たりのパフォーマンスで比較すると、PC向けのトップ製品よりスペックが低くなる。
もっとも、それはハードの生パフォーマンスの話だ。ゲーム機は、ソフトウェア層を薄く最適化することで、分厚いソフトウェア層のWindowsなどPC向けOSより、よりハードウェアの性能を引き出しすことができる。相殺されるとも言って良い。
ディスクリートGPUであるPitcairnの構成は、上の図のようになっている。CU(Compute Unit)は3~4ユニットずつバインドされてキャッシュを共有している。PC向けGPUは、現在、グラフィックス専用ハードウェアを多重化したマルチコア化を進めている。AMDもNVIDIAも、GPUコア内部をパーティショニング、内部のプロセッサクラスタだけでなく、ジオメトリエンジンやラスタライザといったグラフィックスの固定機能ユニットを複数備えるようになっている。これは、ジオメトリとラスタライズのスループットがボトルネックになり始めたからだ。Pitcairnは、グラフィックス固定機能パイプラインを2系統持っており、PS4のGPUコアも似たようなデュアルコア構造になっていると推測される。
AMDのSea Islands世代はAPUにフォーカス
ちなみに、前回の記事で多少混乱を招きかねない表現があったので、AMD GPUコアについて整理して置きたい。AMDのGPUは、アーキテクチャを示すコードネームと、製品ファミリを示すコードネーム、そして製品型番がごっちゃになっていてわかりにくい。知られているように、2013年のAMDの28nmプロセスのGPUファミリは、デスクトップが「Sea Islands(シーアイランズ)」でノートPCが「Solar System」。これらは、ブランディングではRadeon HD 8000系となる。デスクトップでは、Sea Islandsの多くは、現行のSouthern Islands系を引き継ぐが、新設計のGPUも含まれている。それが狭義のSea Islandsで、アーキテクチャ的にはGCN2とか第2世代GCNとも報じられている。
Sea Islands世代の新設計のGPUコアはGCNの拡張版となる。しかし、CUの構成が大きく変わるほど大胆な拡張ではないだろう。また、PS4版のGPUコアに、SCE向けのカスタマイズが行なわれていても、GPUアーキテクチャの根源に関わるレベルだとは考えにくい。同じ28nmプロセスの中では、それほど根源的なアーキテクチャ変更ができないからだ。パフォーマンス効率やトランジスタ数を大きく変えずに大がかりなカスタマイズを行なうことは難しい。
AMDはSea Islandsファミリで導入する拡張版アーキテクチャは、ディスクリートデスクトップGPUというより、むしろAPU(Accelerated Processing Unit)への統合で展開すると説明しているという。つまり、Sea Islands世代に当たるRadeon HD 8000系でも、GPUダイの多くは、Radeon HD 7000の世代で導入されたアーキテクチャとなる。
このあたりは、VLIW4アーキテクチャが、ディスクリートGPUのフルラインナップには拡張されなかったのに、TrinityでAPUにもたらされたことと似ている。そして、APUの中には、PS4のAPUも含まれている可能性は高い。しかし、Sea IslandsでGPUコアアーキテクチャが劇的に変わるかというと、すでに指摘したように、それは考えにくい。
GCN世代でのAPU統合でのポイントはHSA(Heterogeneous System Architecture)のサポートだ。現行のTrinityで、HSAサポートの障壁となる要素の1つはメモリモデルだ。Trinityでは、GPUコアとCPUコアの間のメモリモデルの統合がなされていない。これはメモリのアドレスモデルというだけの話に留まらず、CPUコアとGPUコアをAPUの中でどう接続するかという根本的な問題に絡む。
重要となるAPU内部のインターコネクト
Trinityを見ると、AMDがかなりトリッキーな方法で、現在のAPUの中でCPUコアとGPUコアを接続していることがわかる。下の図では、GPUコアとメモリインターフェイスの間のコネクションを赤色で表示してある。「Fusion Compute Link (FCL)」は、CPUのI/Oコントローラを経てGPUコアとCPUコアを繋ぐパスで、従来ディスクリートのGPUを接続していた経路だ。もう1つの「Radeon Memory Bus (RMB)」はGPUコアのメモリコントローラからDRAMコントローラへと直結する経路で、従来ディスクリートGPUの中でGPUコアとDRAMインターフェイスを接続していたパスだ。APUでは、CPUコアとの間でアービトレーションを取ってメモリにアクセスする。
こうした複雑な構造を持つため、これまでのAPUでは、CPUコアとGPUコアの互いのメモリ領域へのアクセスにはさまざまな制約がついていた。アドレッシング上での制約だけでなく、パフォーマンスでもかなりの制約があり、非常に使いにくい。下は、Llano(ラノ)でのメモリアクセス帯域で、アクセス経路によって大きく異なることがわかる。
しかし、GCNを統合したAPU世代では、CPUコアとGPUコアの間でアドレススペースが統合され、メモリコヒーレンシも取られるようになるだけでなく、メモリアクセスのパフォーマンス面でも均質化が図られると予想される。もちろん、APU内部でのインターコネクトは、現在のAPUとは大きく異なるアーキテクチャになるだろう。
まだ疑問が残るPS4でのHSAサポート
AMDがGCNを開発した背景には、同社の次世代プログラミングフレームワーク「HSA(Heterogeneous System Architecture)」がある。AMDはヘテロジニアス(Heterogeneous:異種混合)コンピューティングのために、プログラミングフレームワークとしてHSAを構築しようとしている。そして、HSAに対応する、汎用コンピューティングに最適化されたGPUコアとして開発されたのがGCNだ。
GCNアーキテクチャのPS4のGPUコアは、HSAに対応できることがほぼ確実だと見られる。しかし、ここで手放しにPS4をHSAケイパブルなゲーム機と呼ぶことはできない。なぜなら、HSAサポートについてSCEが態度を、まだ明らかにしていないからだ。HSAをサポートするためには、HSAのソフトウェアスタックが必要になるが、それをPS4のゲームOSの上に載せるかどうかが見えない。
少なくとも、現段階でPS4開発者に提供されつつあるソフトウェアスタックには、HSAもOpenCLも含まれていないという。PS4については、これまでに2回の開発者向けカンファレンスを開催しており、何らかの説明がなされた可能性はあるが、このペースでは、PS4のイニシャルローンチ時にはHSAはない可能性が高い。
ソニーはHSAのメンバーだったのでは、と思うかも知れない。しかし、ソニーはHSAのFounderでもPromoterでもSupporterでもなく、Contributerメンバーに過ぎない。つまり、中心になって活発に推進しているメンバーではない。それに、これは、もともとSony Mobileの加入で、ARMが加わったことでモバイル系のメーカーはこぞってHSAに加わった。そのため、現時点では、まだSCEのHSAに対するやる気を測ることができない。
HSAのポイントは、「OpenCL」や「C++AMP」といった上位のプログラミング言語レベルでのGPGPUの共通化ではない点だ。その下層にある、中間言語(下位コンパイラのインターフェイス)である「HSAIL(HSA Intermediate Language)」やCPUとGPU間での共有メモリモデル、オーバーヘッドの小さなディスパッチ&実行モデル、コンピュートコンテクストスイッチに至るまで、ベンダー横断での標準化を、ある程度図ろうとしている。
HSAサポートに必要なHSAのランタイム層の実装は?
HSAの導入は、ソフトウェア開発者から見ると、GPUで走る汎用アプリケーションの実行時の効率を高くすることが容易になり、パフォーマンスの予測がし易くなり、揃ったフィーチャを期待することが可能となり、共通化した最適化ライブラリの構築が容易になるという利点がある。GPGPUの最大のハードルは最適化によってパフォーマンスを引き出すことなので、HSAには大きな意味がある。究極的には、HSAコミュニティが育ち、容易にGPUのパフォーマンスを引き出す汎用アプリケーションが書けるようになることが目的だ。
しかし、HSAサポートのためには、まずHSAILのコンパイラ層を実装し、HSAのタスクディスパッチャを備えと、ソフトウェア側でやらなければならないことが多い。問題はここにある。まず、PS4のOSにHSAを載せる意味があるのかどうかについて、SCEの上層部がどういう判断を下したのかわからない。
そもそも、PS4では、OSに関して特に発表がないところを見ると、再びSCE製のゲームOSを載せて来る可能性が高い。その場合は、流れとしてはOSの下位部分はPS VitaのOSの拡張版となる可能性が高い。そして、SCEは、重要性が低いと見れば、リソースを割いてHSAを自社OSに載せない可能性がある。これまでの例を見ると、SCEのOS作りはかなり保守的なので、予測が難しい。
もっとも、もし、PS4が最初にHSAをサポートしていなくても、あとからソフトウェアスタックを加えることも可能だ。HSAのいい点は、HSAのランタイムコンパイラは、グラフィックスドライバのコンパイラとは別で、GPGPU側のソフトウェアスタックは、完全にグラフィックスドライバスタックと併存できる点(もちろんデメリットもある)。そのため、後からHSA対応にするといったこともできる。
しかし、ゲームOSの場合、OSのメモリフットプリントを決めなければならない。最初に、xxMBと決めたOSのメモリ占有量を、あとから変更できない。OSの機能を増やす場合は、いったん決めたフットプリントの中で実現しなければならないという制約がある。そして、SCEは毎回、OSのフットプリントが機能の割に多き過ぎると非難されており、器用にできるかどうかわからない。