連載
西川善司の3DGE:知られざるPS4 Proの秘密(1)メモリ増量に,Polarisと次世代GPUの機能取り込み!?
あれからしばらくした10月下旬,筆者は,SIEの取締役副社長 兼 ハードウェアエンジニアリング&オペレーション本部長である伊藤雅康氏と,リードシステムアーキテクトであるMark Cerny(マーク・サーニー)氏による技術セミナーに参加し,PlayStation 4 Pro(以下,PS4 Pro)の公式スペックには記載されていない部分について,興味深い話を聞くことができた。
1回でまとめるには情報量が多すぎるので,今回は前後編に分けてレポートしてみようと思う。
PS4 Proの開発コンセプトとは?
Cerny氏がまず語ったのは,PS4 Proの基本コンセプトで,それは以下のとおり3つあるという。
- 約700タイトルある既存PS4ゲームは,一切手を加えることなく,そのまま動作できること
- PS4 Proへ対応させる工数は,そのタイトル開発に掛かる工数およびコスト全体比で1%以下に収まること
- PS4 Proの高性能を活かして,より高いビジュアル体験をユーザーに提供すること
その説明をするに先だって,簡単におさらいしておくと,PS4 ProのカスタムAPUでは,標準PS4と同じく,「Jaguar」マイクロアーキテクチャに基づくCPUコアを8基統合した。一部報道では新しい「Tiger」マイクロアーキテクチャを採用するというものもあったが,Cerny氏が「Jaguarです」と断言していることを押さえておきたい。
一方のGPUでは,標準PS4と比べてコア数,正確には演算ユニット「Compute Unit」の数が2倍に増えた。標準PS4で18基なのが,PS4 Proでは36基になっている。
記憶力のいい読者だと,PS4 ProではCPUコアの動作クロックが従来の1.6GHzから2.1GHz,GPUコアの動作クロックが,従来の800MHzから911MHz,メインメモリのクロックが従来の5.5GHz相当(実クロック1.375GHz)から6.8GHz相当(実クロック1.7GHz)へといずれも上がったことを覚えているかもしれないが,これも,標準PS4用タイトルをプレイするときは標準PS4と同じクロックに落ちるという。
つまりPS4 Proは,標準PS4用ゲームを実行した場合,PS4 Pro特有の機能や性能を「意図的に」抑え込めるような設計になっているのである。
2.については具体例が語られた。PS4 Pro対応タイトルとして発表になった「Days Gone」の場合,PS4 Pro対応を行ったのは,たった1人のプログラマーなのだそうだ。
では,PS4 Proへの対応を行うことで,具体的にどのような「ビジュアル面の向上」を創出させるか。ここが3.のポイントだが,ここに厳格なルールはないという。Cerny氏によれば,倍増した演算ユニットを使って解像度を引き上げるのもよし,解像度は変えずにシェーダで質感表現の向上に活用するのもよし,あるいはフレームレートの安定化や引き上げに充てるのもよしとのことである。
なので,より高いビジュアル体験をどう実装するかは,基本的に,各ゲーム開発者に委ねられるのだが,SIE側でもサンプルコードなど,実践的な素材を提供することで,PS4 Proへの対応に工数をかけたくない開発者ならそれを使うだけで低コストに済ませられるそうだ。
このあたりの詳細は後編で深く解説することにしたい。
PS4 Proは実質的にメモリが増えた!?
今回の技術セミナーにおいて明らかになった内容のうち,最も重要だと思われるのが,Cerny氏の語った,PS4 Proのメモリ周りである。
しかし,標準PS4とPS4 Proとでゲーム体験を同じくする目的から,CPUコアとGPUコアで共有するメインメモリ容量は8GBで変わっていない。
このメモリ容量を増やせば,より多ポリゴン化した3Dモデルへ置き換えたり,より高解像度なテクスチャに変更したりすることもできたが,Cerny氏は「3Dモデルやテクスチャなどのアセットを,標準PS4とPS4 Proの両方に向けてゲーム開発者に用意してもらうとなると,さまざまな問題が出てきます」と語る。
1つは開発コストの問題だ。標準PS4用とPS4 Pro用とで異なるアセットを個別に用意する必要があるような仕様では,PS4 Proの開発コンセプトである「PS4 Proへ対応させる工数は,そのタイトル開発に掛かる工数およびコスト全体比で1%以下に収まること」なんて夢のまた夢だ。
ただ,ここで,1つ自己矛盾が発生する。
いくらアセットの作り分けを行わないと言っても,出力映像を4K解像度にする以上,レンダーターゲット(Render Target)となるバッファや,それに付随するZバッファ(Z-Buffer)やステンシルバッファ(Stencil Buffer),ディファードレンダリング(Deferred Rednering)ならGバッファ(G-Buffer)の解像度を上げる必要があり,必要なメモリ容量は自ずと増大してしまう。なので,標準PS4でメモリ容量8GBをほぼ使い切ってしまうようなゲームがあったとして,それをPS4 Proの4K出力へ対応させようとすると,メモリ容量は不足してしまうのだ。Cerny氏も「PS4 Proで4K出力に対応させようとすると,場合によってはおよそ300MBから400MBの追加メモリ領域が必要になります」と述べている。
「PS4 Pro対応のため,標準PS4のゲームは今までより少ないメモリ容量しか使わないよう設計してください」では開発者側の工数が増えてしまうから,SIEの側で何とかしなければならない。
標準PS4では,スタンバイ時の動作制御やバックグラウンドプロセスの制御用としてサブCPU「セカンダリープロセッサー」を搭載している。このサブCPUは独自のメモリ空間を持っており,標準PS4の場合,(4Gamerで確認した限り)容量256MBのDDR3メモリを採用していたが,PS4 Proでは,このサブCPU用メモリ容量を1GBへと拡張したのである。
標準PS4では,容量8GBあるメインメモリのうち,ゲームが自由に使えるメモリ空間は約5GBとなっている。残る約3GBのうち,約2GBがOS用で,約1GBは,Netflixプレーヤーなど,ノンゲームアプリケーション向けに確保してあるのだが,PS4 Proではこの「ノンゲームアプリケーション向けに確保した,約1GBのメモリ空間」を,サブCPU管理下に設けた容量1GBのメモリへとスワップアウトできるようにしてあるのだ。
サブCPU側へスワップアウトされたプログラムは,メインCPU側から直接実行することはできなくなる。実行させるためには,カスタムAPU側にある容量8GBのメインメモリ側へ書き戻す必要がある。ただ,HDDへ書き出して,使うときに書き戻すよりは格段に高速で,転送自体もDMA(Direct Memory Access,メモリ間でデータを直接伝送する技術)を介して行うため,メインCPUに与えるCPU負荷は無視できる。
では,スワップアウトによって生じた余裕のうち,残りは何に使っているのかというと,Cerny氏いわく「システム用途」。具体的には,4K出力用となる4K解像度対応のメニューグラフィックスやメニューアイテムなどの格納領域として活用することになるとのことだった。
PS4 ProのGPUに搭載されたPolarisの機能
機能面では,Cerny氏が「PS4 ProのGPUでは,(演算ユニット数が36基に倍増しただけでなく)『Polaris』の機能の一部を取り入れています」と語っているところにも注目したい。
標準PS4は,2012年頃に現役を務めた「Southern Islands」(サザンアイランド,開発コードネーム)世代,シリーズ名で言うところのRadeon HD 7800系アーキテクチャをベースにしていた。2016年11月発売のPS4 Proでは,その間に進んだ時間分に相当する最新機能を組み込むことになったようだ。
ではいったい,どんな新機能を採用しているのか。
Cerny氏によると,Polarisからは以下に挙げる4点をPS4 ProのGPUに新規採用したという。
- 省電力機能
- Lossless Delta Color Compression
- Primitive Discard Accelerator
- 16bitビットデータ取り扱いの改善
省電力機能に関する具体的な説明はなかったが,「Polaris世代GPUの省電力機能」と述べていたことからして,「Adaptive Voltage & Frequency Scaling」(以下,AVFS)や「Multi-Bit Flip-Flop」(以下,MBFF)といった機能を実装したと推測できる。
AVFSは,GPUチップ内の複数箇所に設置した消費電力センサーと温度センサー,動作クロックセンサーからの情報を基に,動的かつ適応型の電圧制御と駆動クロック制御を行う機能だ。MBFFは,クロック供給を共有化した構造のフリップフロップ回路のことで,単発フリップフロップ回路で実装するよりも物理スペースを削減できるだけでなく,省電力効果の効果も見込めるというものである。
LDCCの根幹となるのは,差分量子化圧縮技術である。具体的には,あるまとまった量のデータを圧縮するにあたって,当該データ群の平均値と各データとの相対差分値を必要最低限のビット数で表現していくような圧縮法という理解でいい。グラデーションのような近い色値であれば平均値との相対差分値は自ずと小さくなるため,少ないビット数で表現できる。
AMDのLDCCでは2分の1,4分の1,8分の1といった圧縮レートをサポートしており,どの圧縮レートで適切に圧縮できるかは対象データのばらつき(=分散値)に依存する。AMD側の発表によると,平均的にプラス約40%の実効メモリバス帯域幅向上を認められるとのことなので,PS4 Proでもそれくらいは期待してもいいのではなかろうか。
あくまで筆者の試算であると断ってから続けると,仮に平均して4分の1の圧縮レートを利用できるなら,理論値218GB/sのメモリバス帯域幅に対して,その1.4倍,305GB/sくらいは見込めるということだ。もし,PS4 Proの実効メモリバス帯域幅が305GB/sなのだとすれば,標準PS4の同176GB/sに対して1.73倍のメモリ性能が期待できるわけで,俄然,悪くない数字になってくる。
なおCerny氏によれば,LDCC自体,標準PS4には搭載していないとのこと。PS4 Proで初採用ということになる。
描画しても確実に無駄になるジオメトリデータ(≒ポリゴンデータ)をレンダリングパイプラインへ流す前に捨ててしまう,いわゆる「早期カリング」(Early Culling)機能の一種という理解でいい。ただ,一般的な早期カリングでは視界外ポリゴンや裏面ポリゴンを破棄する処理を行うが,PDAは,それよりもさらに高度なカリングを行う。
具体的には「1ピクセルに満たないポリゴンの排除」を行うのだが,ここで言う「1ピクセル」とはZバッファ解像度に相当する。さらに言えば,このZバッファ解像度とは,MSAA(Multi-Sampled Anti-Aliasing,マルチサンプルアンチエイリアシング)の処理面積に該当する。MSAAはZバッファ解像度基準で適用されるためだ。
はるか遠方に存在する3Dオブジェクトを構成するポリゴンは,このZバッファ解像度未満サイズのポリゴンとなることがままあるので,これを早期に破棄することでGPU負荷を低減しようというのがPDAの役割なのである。
たとえば4x MSAAの場合,ピクセル解像度比4倍の解像度があるZバッファを用いて描画を行うわけだが,その「4倍解像度のZバッファ」において,1ピクセル以下のポリゴン達を捨てられれば,ピクセルシェーダの実行のみならず無駄なZ出力を回避できる。このあたりについてCerny氏は「PDAは,直接的にはMSAAのアクセラレーションへとつなげられると言えるかもしれない」と述べていた。
最後に16bitデータの取り扱いの改善は,16bit半精度浮動小数点数と16bit整数を内部レジスタにてネイティブで取り扱えるようになったことを示している。つまり,2つの16bitデータを処理するにあたり,2つのデータを合わせて32bitレジスタに収めることができるようになったということである。
これによる直接の“効能”としては,レジスタファイルの節約と内部バス帯域幅消費の節約が挙げられる。「明示的にこの機能を活用すれば,より多くのWavefrontをGPUに流し込めるので,意外に効果は大きい」(Cerny氏)そうだ。ちなみにWavefrontというのは64スレッドをまとめたもので,32スレッドを1つの演算実行単位とするNVIDIAの「Warp」と似た単位という理解でいい。
PS4 ProのGPUはVega先取りの機能も実装
「それに留まらず,Polarisよりもさらに『先の世代』のAMD製GPUが持つ機能も搭載しています」と,Cerny氏は言う。
「先の世代」とは何かについて,Cerny氏は明言を避けていたが,ほぼ間違いなく,「Vega」(開発コードネーム)のことだろう。
Vega世代のGPUで搭載する機能から先取りしてPS4 Proで実装しているのは,Cerny氏によると,以下に挙げる2点とのことだ。
- 16bit演算の倍速化
- Work Distributorの搭載
16bit演算の倍速化は,16bitサイズのデータを2つ同時に32bit演算器で処理することによって2倍のスループットを稼ぐ仕組みだ。NVIDIAがPascal(パスカル)世代の数値演算アクセラレータ「Tesla P100」で搭載した機能と同等のものという理解でいい。
Cerny氏も「PS4 ProのGPUは,単精度浮動小数点演算の理論性能値は4.2 TFLOPSだが,半精度浮動小数点(FP16)ではこれが8.4 TFLOPSとなります」と述べている。
前段で挙げた,Polaris世代の機能である16bitデータの取り扱いの改善と,いま挙げたVega世代の機能となる16bit演算の倍速化,これらを組み合わせることで,PS4 Proでは,16bitデータがらみの性能向上を相当に期待できそうだ。
実際,Cerny氏も「ピクセルカラー値や法線ベクトル値,接ベクトル値などは16bitデータで十分な場合が多いので,この機能を積極的に活用すれば大幅なパフォーマンス向上が見込めるはずです」と述べていた。
説明を聞く限り,Work Distributorとは,もともとGraphics Core Nextアーキテクチャが持っている「Shader Engineに対する負荷平均化(ロードバランス)を取る仕組み」を改良したものだと思われる。つまり,リソースの消費が激しいShader Engineを避けてスレッドを発行したり,回転率の高いShader Engineに積極的にスレッドを発行したりするメカニズムである可能性が高い。Cerny氏によると,Work Distributorの採用により,ジオメトリの処理効率が向上したとのことだ。
なお,本稿の序盤でも述べているので推測できている読者は多いと思うが,「これら一連の,PolarisやVegaから継承した新機能は,標準PS4モードでは全部無効化される」(Cerny氏)ので,その点は念のため。
……といったところで,前編はここまで。
ここまでPS4 Proに秘密の機能が詰め込まれていたことに驚いた人は多いのではなかろうか。
後編では,さらに驚きの,PS4 Proの疑似4Kレンダリングメカニズムを解説したい。
西川善司の3DGE:知られざるPS4 Proの秘密(2)明らかになった「4Kレンダリングのレシピ」
SIEのPS4公式情報ページ
- 関連タイトル:
PS4本体
- この記事のURL: