ニュース
AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?
Async Shaders自体は,AMD独自の仮想現実(以下,VR)対応ソフトウェア開発キット「LiquidVR」に関連してアピールが始まったものだ。その効用は,Game Developer Conference 2015で明らかになっているため(関連記事),完全なる新情報がもたらされたわけではないが,「なぜいまAsync Shadersか」を考えるにはいい機会だと思うので,要点を簡単にまとめてみたいと思う。
GCNアーキテクチャにもともと備わっていた
Async Shaders
というわけで,まず「Async Shadersとは何か」だが,簡潔にまとめるなら「グラフィックスのタスクと計算(Compute,以下 コンピュート)のタスクをGPUで同時に実行できる機能」ということになるだろう。このとき,グラフィックスとコンピュートタスクを非同期(Asynchronous)に並列動作させられるからAsync Shadersと命名したのだそうだ。
AMDのSasa Marinkovic(サシャ・マリンコヴィチ)氏によると,これは「GCNアーキテクチャが当初から持っていたもの」。それもそのはずで,Async Shadersは,AMDが主導しているHSA(Heterogeneous System Architecture)のために必要とされる機能だったりする。
GCNアーキテクチャには,グラフィックス用のタスクの実行を管理するユニットとは別に,コンピュートタスクを管理するユニット「Asynchronous Compute Engine」(以下,ACE)が実装されている。
ACEはいわば,コンピュートタスク用の命令発行ユニットで,GCNの実行単位となる「Wavefront」ごとに,GCNの実行ユニットにあたるCompute Unitに対してコンピュートタスクを発行するのがその役割だ。
一般的なGPUはACEのようなユニットを持っていないため,グラフィックスタスクとコンピュートタスクを並行して実行するにはちょっとした工夫が必要になる。Marinkovic氏が挙げていたのは,「マルチスレッド」(Multi-thread)と「プリエンプション」(Pre-Emption)の2つである。
ここでいうマルチスレッドは,簡単にいえばグラフィックスタスクとコンピュートタスクを交互に実行していくというもので,あるグラフィックスタスクが終わったらコンピュートタスクを実行し,それが終わったら次のグラフィックスタスクを……というような手法になる。片方のタスク実行中には一方のタスクの実行が止まるのでオーバーヘッドが大きい。
一方のプリエンプションは,グラフィックスタスクを一時中断してコンピュートタスクの命令を割りこませて実行する方法だ。そのためには,「コンテキスト」と呼ばれる,グラフィックスタスクの実行途中の結果をどこかに一時保存しなければならない。グラフィックスタスクのコンテキストは一般的に極めて大きいため,一時保存は非常に大きなオーバーヘッドになる。
この点,Async Shaders機能を持つGCNアーキテクチャのGPUなら,そうしたオーバーヘッドなしにグラフィックスタスクとコンピュートタスクを並列実行できる。これが,AMDのアピールしたいポイントだ。概要をイメージしやすいムービーも公開されたので,興味のある人はチェックしてみてほしい。
DirectX 12やVulkanで
Async Shadersの実力が発揮される
本稿の冒頭でお伝えしているとおり,Async ShadersのLiquidVRにおける効用は,すでに明らかになっている(関連記事)。一方で,Marinkovic氏が述べたように,Async Shaders自体はGCNアーキテクチャにもともと備わっていた機能でもある。なぜAMDは今になって急にアピールしだしたのか。
その背景には,DirectX 12やVulkanといった,次世代グラフィックスAPIの存在があるようだ。
その点はVulkanも同様と考えられるため,AMDとしては,新世代APIが出揃うことでAsync Shaderが活かされると考えているようだ。
下に示したのは,3Dグラフィックスのポストプロセス(=後処理)をコンピュートタスクで実装した,AMD製デモムービーである。ポストプロセスを行わない場合にフレームレートが245fps出ているのに対して,ポストプロセスを“普通に”使うと158fpsまで落ち込むが,Async Shadersでポストプロセスを行えば,230fpsを確保できる,というものだ。「Async Shadersを使うと,ポストプロセスを行わないときに近いフレームレートが得られる」と,Marinkovic氏は胸を張っていた。
実際PS4向けのカスタムAPUの開発にあたっては,ACEの存在が重視されたようだ。PS4のセミカスタムAPUには複数のACE――8基といわれている――が統合されており,OSやソフトウェア開発キットのレベルでグラフィックスタスクとコンピュートタスクを並列実行できる仕組みが提供されているという。
これは,PlayStation 3のCELLプロセッサでSPE(Synergistic Processor Element)を使ってグラフィックスタスクとコンピュートタスクを非同期に並列実行させるような手法が使われていたことが影響しているかもしれない。似たようなことができる機能をソニー・コンピュータエンタテインメントがAMDに求めたとしても不思議ではないだろう。
Async ShadersはGCNアーキテクチャ開発当時からAMDが温めてきた機能だが,ようやく日の目を見る機会がきた,といったところだろうか。実際のゲームにどう応用されるのか,今後の動向を注視しておくといいかもしれない。
AMDのLiquidVR解説ページ(英語)
- 関連タイトル:
DirectX
- この記事のURL: