連載
西川善司の3DGE:AMDによる主張「NVIDIA製GPUは,DirectX 12の優位性を活用できない」を考察する
今回,筆者は,AMDのGPUエヴァンジェリストであるRichard Huddy(リチャード・ハディ)氏によるプレゼンテーションを受けることができたので,その内容に,筆者による考察を添えて紹介してみたい。
GCN世代のRadeonは,競合に対していかなる優位性を持つのか
DirectX 12やVulkan(あるいはその基となるMantle)といった新世代グラフィックスAPIでは,より直接的にGPUを駆動できるようになった。これはDirectX 12やVulkan,Mantleの発表時に幾度となく繰り返されたメッセージなので「もう知っているよ」という人も多いだろう。
少し振り返っておくと,DirectX 11(Direct3D 11)以前のAPIでは,GPUへ伝送するコマンド列の形成をDirectX 11 APIが担当していたので,GPUにグラフィックス描画用コマンドを発行するのもGPGPU処理用コマンドを発行するのも,ほぼ順送り式となっていた。この実行形態では,GPUがグラフィックス描画とGPGPU処理を並列に行えるとしても,その優位性は表に出てきづらい。
それに対して,DirectX 12やVulkanなどといった「直接的にGPUを駆動できるAPI」では,グラフィックス描画用コマンド列とGPGPU処理用コマンド列を,マルチコアCPUを駆使したマルチスレッド処理によってアプリケーション側から並列に生成し,任意のタイミングで発行できる。それこそ,生成したそばから並列的に発行することも――実行されるかどうかはハードウェアの仕様次第だが――可能だ。
そして,いま述べたような「グラフィックス描画とGPGPU処理の並列的な実行」を実現するのが,GCNベースのGPUに実装される「Asynchronous Shaders」(非同期シェーダ,以下 Async Shaders)であり,このAsync Shadersがある分,DirectX 12世代では,RadeonのほうがGeForceよりも性能がいい。AMDの主張とは,端的にまとめると,以上のようなものになる。
GCNの世代と型番の対応は下にまとめたが,GCN 1.2ではさらに,進行中のグラフィックス描画に対して割り込みをかけ,別の用途のグラフィックス描画を実行させることができる機能「GPU Graphics Preemption」(GPUグラフィックスプリエンプション)を搭載(関連記事)。GPU内部の稼働率を上げつつ,より低遅延な処理を実現することも可能となった。
●GCNの世代と型番の関係
(※OEM向け製品を除く。カッコ内は開発コードネーム)
- GCN 1.2:Radeon R9 Furyシリーズ(Fiji),Radeon R9 380(Antigua(Tonga Refresh)),Radeon R9 285(Tonga)
- GCN 1.1:Radeon R9 390シリーズ(Grenada(Hawaii Refresh)),Radeon R7 360(Tobago(Bonaire Refresh),Radeon R9 29xシリーズ(Hawaii),Radeon R7 260シリーズ(Bonaire)
- GCN 1.0::Radeon R7 370(Trinidad(Curaçao Refresh),Radeon R9 280シリーズ(Tahiti),Radeon R9 270シリーズ(Curaçao),Radeon R7 250・240シリーズ(Cape Verde&Oland)
では,GeForceはどうかというと,第1世代Maxwell以前と第2世代Maxwell以降では事情が若干異なる。第1世代Maxwell以前は,グラフィックス描画とGPGPU処理の並列実行には対応しておらず,どちらか一方が終了してから「グラフィックスモード/GPGPUモード」のモードチェンジを行ってからでないと処理に取りかかれない。
それに対し,第2世代Maxwell(≒GeForce GTX 900シリーズ)では,並列実行を行えるようになっている。アーキテクチャ上はGCN 1.1ベースのRadeonと同じというわけだ。
Oxide Games自体は,NVIDIA主催のカンファレンスに登壇していたこともあったりと,必ずしも「AMDべったり」なデベロッパではない。むしろ,「自社製品の評判に関わる(≒「Radeonで速く,GeForceで遅いという事態が,予期せぬ風評被害を生む可能性がある)ため,早期の対応を求むべく,この事実を公開した」というのが,発表の趣旨のようだ。NVIDIA側も,ドライバ側の問題として,現在,対応を進めているところだという。
DX12世代の立ち上がりによって明らかになる,GPU側の「DX12対応能力」
ここからは筆者の私見と考察になるが,実際のところ,2015年の10月時点において,たとえば動的なシャドウマップ生成と環境マップ生成といった,異なるコンテクストの描画タスクが発行された場合の処理効率で比較すると,アーキテクチャ上はGCN 1.2のほうが第2世代Maxwellよりも優れている。
それは,前段でも触れてあるとおり,GCN 1.2では,ハードウェアレベルにおけるプリエンプション機能の搭載によって,異なるタスクを切り換えながら実行できるからだ。GPU視点に立った場合,GPU内部の演算リソースを休ませずに実行できるうえ,アプリケーション視点では,発行したタスクが低遅延で実行されるメリットを生みやすい。
それがNVIDIAのGPUだと,第2世代Maxwellでも,異なるコンテクストの描画タスクは,現在実行中の描画タスクが終了したタイミングで切り換えられることになる。NVIDIAも,この点については「次世代で以降で解決される課題」として認知している。
ただ,繰り返すが,Async Shaders自体は,DirectX 12で最低限されるべきAPIなので,DirectX 12に対応する第2世代Maxwellでも描画タスクとGPGPUタスクの並列実行自体はできるはずだ。にもかかわらず,性能が上がらないのは,ハードウェア的にちゃんと並列実行できていないからだというのが,Oxide Gamesによる指摘なのである。
今後,DirectX 12ベースのPCゲームタイトルや,PlayStation 4(以下,PS4)およびXbox Oneで開発されたゲームのPC移植が増えてくるに連れ,Async Shadersメカニズムの有効性は一般ユーザーからもはっきりと分かるようになるはず。その意味において,このタイミングでAMD,そしてOxide Gamesが問題を提起したことは,悪いことではないように思う。
GPUにおけるグラフィックス描画処理系とGPGPU処理系の違いは,実質的に,ジオメトリ演算機能の利用とグラフィックス処理専用の固定機能の利用,ROPユニットの活用という3点ができるかできないかだけだ。なので,先端的なゲームグラフィックス処理では,GPUでグラフィックス描画をさせつつ,GPGPUを活用してグラフィックス描画支援を行うという実装形態が目立ち始めている。
仮に,この流れがDirectX 12時代のPCゲームにもそのままやってくるとすれば,Async Shadersの実効性は,グラフィックス品質に直結しやすくなるという予測が成り立つ。つまり,グラフィックス表現がリッチになったり,あるいはフレームレートを上げやすくなったりするため,ユーザーの側から見て分かりやすいメリットとして表れる可能性が高いということだ。
もちろん本来的な,GPGPUを用いた物理シミュレーションやAI処理といった活用が進めば,Async Shadersの効能はゲーム全体の性能や品質に大きく影響することになるだろう。
現状,ユーザーに何かできることはあるのかというと,残念ながらない。しばらくは静観ということになるだろうか。
NVIDIAが,第2世代MaxwellでAsync Shadersをちゃんと動くようにしてくれれば,それはそれでいい。そうならない場合,短期的には,DirectX 12世代のタイトルを重視する場合,GCN系のRadeonを選択するのが正解ということになりそうだ。この瞬間について語るなら,DirectX 12周りで有利だが,HDMI 2.0をサポートしないRadeonか,HDMI 2.0をサポートし,4K解像度との互換性において優勢ながら,DirectX 12周りで不利なGeForceかという,悩ましい選択を迫られることになると思われる。
AMDのデスクトップ用GPU製品情報ページ
- 関連タイトル:
Radeon R9 Fury
- 関連タイトル:
Radeon R9 300
- 関連タイトル:
Radeon R9 200
- 関連タイトル:
Ashes of the Singularity
- この記事のURL:
キーワード
(C)2016 Oxide Games. Ashes of the Singularity is a trademark of Stardock Entertainment. All rights reserved.