お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2015/03/31 13:01

ニュース

AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

画像集 No.004のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?
 2015年3月31日13時01分,AMDは,同社製GPUやAPUが備える「Asynchronous Shaders」(以下,Async Shaders)に関する新たな資料と広報用ムービーを公開した。
 Async Shaders自体は,AMD独自の仮想現実(以下,VR)対応ソフトウェア開発キット「LiquidVR」に関連してアピールが始まったものだ。その効用は,Game Developer Conference 2015で明らかになっているため(関連記事),完全なる新情報がもたらされたわけではないが,「なぜいまAsync Shadersか」を考えるにはいい機会だと思うので,要点を簡単にまとめてみたいと思う。


GCNアーキテクチャにもともと備わっていた

Async Shaders


 というわけで,まず「Async Shadersとは何か」だが,簡潔にまとめるなら「グラフィックスのタスクと計算(Compute,以下 コンピュート)のタスクをGPUで同時に実行できる機能」ということになるだろう。このとき,グラフィックスとコンピュートタスクを非同期(Asynchronous)に並列動作させられるからAsync Shadersと命名したのだそうだ。

一般的なGPUで採用される同期(Synchronous)型マルチスレッド処理では,1つのキューにグラフィックスとコンピュートのタスクを積み上げ順次処理していくカタチになる。それに対して非同期では,異なるキューに異なるタスクを別々に積み上げて並列動作させることができる
画像集 No.005のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

Sasa Marinkovic氏(Globalhead,VR & Software Marketing,AMD)
画像集 No.002のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?
 実をいうと,AMDの「Graphics Core Next」(以下,GCN)アーキテクチャには,「グラフィックス処理用のタスクキュー(※コマンドを積み上げておくところ)とコンピュートタスクのキュー,さらにデータコピーのためのキューという3つのキューがそれぞれ独立して動作する」という特徴がある。
 AMDのSasa Marinkovic(サシャ・マリンコヴィチ)氏によると,これは「GCNアーキテクチャが当初から持っていたもの」。それもそのはずで,Async Shadersは,AMDが主導しているHSA(Heterogeneous System Architecture)のために必要とされる機能だったりする。

 GCNアーキテクチャには,グラフィックス用のタスクの実行を管理するユニットとは別に,コンピュートタスクを管理するユニット「Asynchronous Compute Engine」(以下,ACE)が実装されている。
 ACEはいわば,コンピュートタスク用の命令発行ユニットで,GCNの実行単位となる「Wavefront」ごとに,GCNの実行ユニットにあたるCompute Unitに対してコンピュートタスクを発行するのがその役割だ。

GCNアーキテクチャのGPUは,グラフィックスタスク用の命令発行ユニットである「Graphics Command Processor」とは別に,コンピュートタスク用の命令発行ユニットにあたるACEを持っている。そのため,グラフィックスタスクとコンピュートタスクを同時に実行できるのである
画像集 No.006のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

 一般的なGPUはACEのようなユニットを持っていないため,グラフィックスタスクとコンピュートタスクを並行して実行するにはちょっとした工夫が必要になる。Marinkovic氏が挙げていたのは,「マルチスレッド」(Multi-thread)と「プリエンプション」(Pre-Emption)の2つである。
 ここでいうマルチスレッドは,簡単にいえばグラフィックスタスクとコンピュートタスクを交互に実行していくというもので,あるグラフィックスタスクが終わったらコンピュートタスクを実行し,それが終わったら次のグラフィックスタスクを……というような手法になる。片方のタスク実行中には一方のタスクの実行が止まるのでオーバーヘッドが大きい。

まだマーケティングキーワードが固まっていないのか,マルチスレッドグラフィックス(Multi-Threaded Graphics)と呼ばれることもあるマルチスレッドの例
画像集 No.007のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

 一方のプリエンプションは,グラフィックスタスクを一時中断してコンピュートタスクの命令を割りこませて実行する方法だ。そのためには,「コンテキスト」と呼ばれる,グラフィックスタスクの実行途中の結果をどこかに一時保存しなければならない。グラフィックスタスクのコンテキストは一般的に極めて大きいため,一時保存は非常に大きなオーバーヘッドになる。

プリエンプションの例
画像集 No.008のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

 この点,Async Shaders機能を持つGCNアーキテクチャのGPUなら,そうしたオーバーヘッドなしにグラフィックスタスクとコンピュートタスクを並列実行できる。これが,AMDのアピールしたいポイントだ。概要をイメージしやすいムービーも公開されたので,興味のある人はチェックしてみてほしい。



DirectX 12やVulkanで

Async Shadersの実力が発揮される


 本稿の冒頭でお伝えしているとおり,Async ShadersのLiquidVRにおける効用は,すでに明らかになっている(関連記事)。一方で,Marinkovic氏が述べたように,Async Shaders自体はGCNアーキテクチャにもともと備わっていた機能でもある。なぜAMDは今になって急にアピールしだしたのか。
 その背景には,DirectX 12やVulkanといった,次世代グラフィックスAPIの存在があるようだ。

DirectX 11ではキューが1つしかないため,Async Shadersを持つGCNのメリットを発揮させにくい
画像集 No.009のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?
 現行のDiurectX 11は,構造的にタスクキューを1つしか持たないため,Async Shadersを有効活用しづらい。一方のDirectX 12では,スレッドごとにタスクキューが持てるようになるため,コンピュートタスクとグラフィックスタスクの並列実行を,ゲーム側で容易に実装できるようになる。
 その点はVulkanも同様と考えられるため,AMDとしては,新世代APIが出揃うことでAsync Shaderが活かされると考えているようだ。

DirectX 12やVulkanではスレッドごとにキューを持てるため,グラフィックスのタスクとコンピュートタスク,さらにデータコピー用のタスクといった具合で,並列実行を容易に実装できるようになる
画像集 No.010のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

 下に示したのは,3Dグラフィックスのポストプロセス(=後処理)をコンピュートタスクで実装した,AMD製デモムービーである。ポストプロセスを行わない場合にフレームレートが245fps出ているのに対して,ポストプロセスを“普通に”使うと158fpsまで落ち込むが,Async Shadersでポストプロセスを行えば,230fpsを確保できる,というものだ。「Async Shadersを使うと,ポストプロセスを行わないときに近いフレームレートが得られる」と,Marinkovic氏は胸を張っていた。


Async Shadersは,PS4用の「Battlefield 4」および「InFAMOUS Second Son」「Ther Tomorrow Children」と,PC用Mantle版「Thief」ですでに採用されているという
画像集 No.003のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?
 ちなみに,Async Shadersは,PlayStation 4(以下,PS4)用タイトルで,すでに使われているそうだ。
 実際PS4向けのカスタムAPUの開発にあたっては,ACEの存在が重視されたようだ。PS4のセミカスタムAPUには複数のACE――8基といわれている――が統合されており,OSやソフトウェア開発キットのレベルでグラフィックスタスクとコンピュートタスクを並列実行できる仕組みが提供されているという。
 これは,PlayStation 3のCELLプロセッサでSPE(Synergistic Processor Element)を使ってグラフィックスタスクとコンピュートタスクを非同期に並列実行させるような手法が使われていたことが影響しているかもしれない。似たようなことができる機能をソニー・コンピュータエンタテインメントがAMDに求めたとしても不思議ではないだろう。

Async Shadersのまとめ。グラフィックスタスクとコンピュートタスクを並列に実行することで,より高いフレームレートやより良いVR体験を得たり,映像の品質を向上させたりすることができるとされている
画像集 No.011のサムネイル画像 / AMDが「Async Shaders」を猛烈にアピール。“とっくに実装済みの機能”が,DX12時代の切り札となる!?

 Async ShadersはGCNアーキテクチャ開発当時からAMDが温めてきた機能だが,ようやく日の目を見る機会がきた,といったところだろうか。実際のゲームにどう応用されるのか,今後の動向を注視しておくといいかもしれない。

AMDのLiquidVR解説ページ(英語)

  • 関連タイトル:

    DirectX

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:11月28日〜11月29日