オススメ機能
Twitter
お気に入り
記事履歴
ランキング
4Gamer.net
お気に入りタイトル/ワード

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

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

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

LINEで4Gamerアカウントを登録
AMD独自グラフィックスAPI「Mantle」の詳細が明らかに。理論上はGeForceのMantle対応も可能!?
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2013/11/15 00:00

イベント

AMD独自グラフィックスAPI「Mantle」の詳細が明らかに。理論上はGeForceのMantle対応も可能!?

Mantle
 北米時間2013年11月11〜12日にAMDは,米国カリフォルニア州サンノゼで開発者向けイベント「AMD Developer Summit 2013」(略称,APU13。以下略称表記)を開催。そのなかで,「Graphics Core Next」(以下,GCN)ベースのRadeonシリーズ専用に開発されたグラフィックスAPI「Mantle」(マントル)の詳細解説セッション「Mantle: Empowering 3D Graphics Innovation」を実施した。
 Mantleの存在が明らかになった2013年9月の時点では,「Mantleがどのような仕組みでアプリケーションの高速化を実現しようとしているのか」という,肝心の部分は説明されなかった。APU13でようやくその部分に光が当たったので,本稿ではセッションの内容を基に,Mantleの実態を明らかにしていきたい。


GPUの機能を直接操作するMantle

ただし,ご利用は計画的に?


Guennadi Riguer氏(Mantle Chief Architect,AMD)。旧ATI Technologies時代からゲームグラフィックスの開発経験があり,古くは「Neverwinter Nights」シリーズや「F.E.A.R.」シリーズなどに,その名がクレジットされている
 セッションを担当したのは,AMDでMantleのチーフアーキテクトを務めるGuennadi Riguer氏だ。氏はまずMantleを,「PC環境でゲーム開発などのリアルタイムグラフィックスアプリケーションを開発している人達が遭遇している障害を排除するため」に開発したものだと位置づけた。

 現状のMantleは,PlayStation 4(以下,PS4)やXbox Oneなど,新世代ゲーム機に採用されたGCNアーキテクチャをターゲットにして,現在のGPUが持つ機能を,的確かつ直接的に操作するグラフィックスプログラミングAPI(GPUプログラミングAPI)として設計されているという。
 アプリケーションがGPUをほぼ直接と言っていいレベルで駆動させたり,各種リソースマネージメントも担当したりすることになるので,現在のDirectXやOpenGLに比べると,非常にローレベルなAPIとなるわけだ。
 しかし,「ハードウェアの抽象化レイヤーがなくなるわけではない」とも,Riguer氏は述べる。それゆえにNVIDIAなどの競合GPUメーカーが“Mantleの仕組み”に参加することも「技術的には可能」(Riguer氏)だそうだ。これはなかなか驚くべき発言である。

 ハードウェアを抽象化したGPUプログラミングAPIとなると,「だったら,DirectXやOpenGLと何が違うのか?」という疑問は当然湧いてくる。この点について氏は,MantleがDirectXやOpenGLを全面的に置き換えるものではないとしたうえで,「特定の3Dグラフィックスプログラミングシーンにのみ使うべきもの」だとしている。
 では,Mantleはどういうシーンで有効になるのか。Riguer氏は3つの例を挙げて説明した。

Mantleの活用にはグラフィックスパイプラインへの深い理解が必要になるので,万人向けのソリューションではない,としたスライド
Mantle
 1つめは,「圧倒的な性能が必要となるアプリケーション」を開発する場合だ。もちろん,ゲームはその筆頭に挙げられるだろう。逆に言えば,リアルタイム性をゲームほどは重視しない3Dグラフィックスツールやビューワーアプリケーションならば,わざわざMantleを使用する必要はないと言える。

 2つめは,「グラフィックスプログラミングに関わるすべての要素を,アプリケーション側で直接管理したい」場合だ。詳細は後述するが,Mantleでは,GPUのコマンドバッファもアプリケーション側で管理する必要があり,「描画に必要なデータとパラメータを用意して,APIを呼び出せば一発で描画」とはいかない。Mantleの活用には,3Dグラフィックスパイプラインへの深い理解が必要なのである。

 最後の3つめは,「そのアプリケーションを,GCNベースのGPU環境でマルチプラットフォーム展開したい」場合になる。要するに,GCNベースのGPUを採用するPS4やXbox One用のゲームを,同じGCNベースの別の機種やPCへ移植したいという状況だ。NVIDIA製GPUやIntelの統合型グラフィックス機能にも対応する必要があるなら,二度手間になるだけなので,Mantleは使わないほうがよい。


「Small Batch問題」を例にした

Mantleによる高速化の事例


Mantleがもたらす性能向上ポイントに,「Small Batch問題」が例として取り上げられた
Mantle
 Riguer氏はMantleの開発にあたり,「GPUを徹底的に効率よく活用すること」を目標として掲げたと述べる。DirectXやOpenGL経由では実現が難しかったレベルの性能を実現するためだ。それでは,どんな事例にMantleを活用すると,アプリケーションの性能向上が実現できるのだろうか?
 Riguer氏は「1時間足らずのセッションでは語り尽くせない」と笑いながら,分かりやすい事例として「Small Batch問題の解決」を例に挙げて解説した。

 たとえば,草原のシーンを描画するために,草モデルを1万本描画する必要があると考えよう。その場合,「草モデルの描画を1万回実行する」というのが,ごく普通の発想だ。しかし,これを従来のDirectXやOpenGLで処理しようとすると,最悪の場合,GPUに対して,以下のように大量の処理が発生してしまう可能性がある。

  1. 1万回分の草モデルをGPUに転送する
  2. 1万回分の描画コマンドを生成する
  3. グラフィックスドライバが描画コマンドを,GPU固有のコマンドに1万回翻訳して命令を発行する

 大量の処理が発生するとそこにオーバーヘッドが生じ,全体の性能に負の影響を及ぼすことになるが,このような「小規模描画の大量処理」による問題を,専門用語では「Small Batch」(スモールバッチ)問題という。
 GPUとDirectXに詳しい人なら,「それって,ジオメトリインスタンシングで解決できないか?」と気付くかもしれない。たしかに,DirectX 9.0cで導入されたジオメトリインスタンシングという機能を使うと,上の1.で挙げた「1万回分の草モデルの転送」は1回で済ませられる。しかし,2.と3.は解決できない。

 DirectXを使うゲームタイトルではそのため,「草モデルを1万回描画」するのではなく,「1万本の草を1回描画」するように,処理形態を変えて,対策している。こうした処理を「ジオメトリ統合」(Geometric Consolidation)などと呼んだりするが,実際にはゲームロジックとの兼ね合いもあるので,いつもこの手でうまくいくとは限らない。
 そもそも,こうした描画の最適化に頭を悩ませなくてはならないのは,ゲーム開発者としては不本意であろう。

 Riguer氏によれば,近年の平均的なPCゲームの場合,ジオメトリ統合の最適化を行っていたとしても,1フレームあたり3000〜5000個のSmall Batchが生じているという。とくにグラフィックスヘビーなゲームになると,1フレームあたり1万個前後に達する場合もあるそうだ。
 だが,Mantleを活用するゲームでは,1フレームあたり10万個のSmall Batchに相当する処理があっても,性能面で影響は出ないという。

Mantle Mantle
グラフィックスヘビーなDirectXベースのゲームでは,1フレームあたり1万個ものSmall Batchが生じている(左)が,Mantleを使うなら,10万個分の処理でも性能低下を生じないという(右)

現在のGPUプログラミングモデルをイメージしたスライド。「Queues」と書かれているのがコマンドバッファだ
Mantle
 それを実現する要素の1つは,コマンドバッファの扱い方にある。
 現在のGPUプログラミングモデルでは,GPU内の各種機能をアプリケーションが使う場合,アプリケーション側がコマンドを発行すると,それがコマンドバッファにいったん蓄積される。そして,溜め込まれたコマンドは,GPUに順次発行される。それを受けてGPUが処理をするという流れだ。Mantleでもそれは変わらない。

 DirectXやOpenGLの場合,このコマンドバッファの生成や描画コマンドの蓄積,その実行管理を担当するのは,DirectXやOpenGL,そしてGPUデバイスドライバであり,アプリケーションが直接手がける処理ではなかった。たとえばマルチコアCPU環境では,「各コマンドバッファに対する操作が,どのCPUが処理するスレッドに割り当てられているか,アプリケーションからは分からない」という,ブラックボックスとなっている。

 しかしMantle――というか,Mantle対応アプリケーション――の場合は,いま挙げたコマンドバッファの生成や描画コマンドの蓄積,その実行管理のすべてを,アプリケーション側で担当できるようになる。アプリケーション側がコマンドバッファを自由にできるので,「あるコマンドバッファ制御には任意のCPUスレッドを割り当てる」といったことも行える。このように,アプリケーションがハードウェア資源をより有効に使えるようになるため,性能を引き出せるというのが,Mantleの利点であるわけだ。

Mantleにおいて,アプリケーションはコマンドバッファやコマンドの実行を“自分で”管理できる
Mantle

 もっとも,Mantleではコマンドバッファ関連の操作をすべてアプリケーション側で行う以上,コマンドバッファ間の状態管理や,コマンドバッファ間の同期取りなども,アプリケーション側で行う必要がある。そのため,開発者の手間がそれなりに増える可能性はあるだろう。


Mantleではアプリケーションがグラフィックスメモリを管理する


左がDirectXやOpenGLのメモリ利用形態で,APIがメモリを割り当てる。一方Mantleでは,アプリケーション側がメモリを確保して,どう使うかを申告する形とした
Mantle
 Mantleではコマンドバッファだけでなく,アプリケーション側がグラフィックスメモリを自由に管理できるようになったのも,大きな違いとなっている。

 DirectXやOpenGLでは,アプリケーションはAPIを通じてグラフィックスメモリを確保する。しかも,頂点バッファやテクスチャ配列,定数バッファといった用途ごとにアプリケーションが「○○に使うメモリをください」と要求を出すと,APIを経由して,GPUドライバが「ではこれを使いなさい」とメモリを割り当てる仕組みになっている。何かするたびにいちいちメモリを確保しなければならないわけで,処理やグラフィックスメモリの利用効率が悪くなるのも自明だろう。

 そこでMantleでは,「アプリケーション側で,適当な量のグラフィックスメモリを確保したうえで,APIを通じ,『これは○○用に使います』と申告する」形に変わっている。
 この仕組みなら,グラフィックスメモリの利用効率は向上し,アプリケーション内でのグラフィックスメモリの再利用もしやすい。たとえば,あるレンダリングステートで「シャドウマップ用に生成したバッファ」を,「定数バッファ」に再利用するといったことが可能になる。用途別にいちいちメモリを確保しなくて済むので,APIオーバーヘッドは減り,省メモリにもつながるというわけだ。

Mantle Mantle
Mantleによるグラフィックスメモリ管理方式の利点を示した2枚のスライド。Mantleでは用途ごとに細かくグラフィックスメモリを確保したりしなくて済むようになり(左),しかも,確保したメモリをどう使うかはアプリケーション側で自由に決められる(右)

Brian Bennett氏(Mantle Architect,AMD)
 Mantleでのグラフィックスメモリ活用について説明したMantle ArchitectのBrian Bennett氏は,「このメモリ利用形態で,最も直接的に恩恵が得られるのはグラフィックス仮想メモリの活用だ」と主張した。
 グラフィックス仮想メモリとは,CPUにおける仮想メモリと同じ理屈の機能だ。初めに実際のグラフィックスメモリよりも大きなメモリ領域を定義して,それに仮想アドレスを与えておき,アプリケーション側は仮想アドレスを用いてメモリを利用する。そして,実際のグラフィックスメモリに入りきらない分は,外部ストレージにスワップアウトされる。
 グラフィックス仮想メモリ自体は新しい概念ではないが,Mantleでは,実メモリと仮想メモリの割り当てを示すリマッピングテーブルを操作できるようになる。そのため,アプリケーションが必要としたタイミングで,仮想メモリの内容を実メモリにロードすることが可能になったのだ。

 これをうまく活用すると,たとえばオープンワールドタイプのゲームで,エリア移動中にローディング画面を出してゲームの進行を止めたりすることなく,バックグラウンドで必要な3Dモデルやテクスチャデータを読み出しておくといったことが,これまでよりも簡単に行えるようになる。

Mantleにおけるグラフィックス仮想メモリの利用法を示したスライド
Mantle

ゲーム機向けの開発で活用していた技術を,Mantleでも利用できるというスライド
Mantle
 なお,セッションではほかにも,DirectXやOpenGLでは予測不能なタイミングで行われていたシェーダのコンパイルを事前に済ませたり,アンチエリアシングを任意に構成できるようにしたり,各シェーダステージを自在に組み合わせてレンダリングフローを形成したりといったことが,Mantleでは可能になるとも紹介された。

 Mantleで可能になるこれらの要素は,ハードウェアを抽象化したDirectXやOpenGLによるPCゲームの開発だと,確かに今までできなかったことではあるものの,実のところ,PlayStation 3やXbox 360世代のゲーム開発においては珍しくなかった。当然ながら,ゲームデベロッパはPS4やXbox One向けのゲームの開発でも同じような手法を使うので,それらの開発で培った技術をPC環境にそのまま持っていけるというのが,Mantleの大きな利点というわけだ。


MantleではマルチGPU環境を柔軟に活用できるように


 セッションの最後には,PCならではというMantleの利点が紹介された。それは,マルチGPUへの対応である。Mantleでは,PCに搭載されている複数のMantle対応GPUやAPUのすべてを,アプリケーションが自由に扱えるようになるのだ。

 これまで,AMD製GPUが搭載されたマルチGPU環境では,単体GPU同士を協調動作させる「CrossFire」や,単体GPUとAPUを組み合わせる「AMD Dual Graphics Technology」といった機能が提供されていた。しかしこれらは基本的に,まったく同じか,近いスペックのGPUを組み合わせる必要がある……というのは,経験的に知っている読者も多いだろう。
 それがMantleでは,GCN世代という制約はあるものの,異なるスペックのGPUを組み合わせたマルチGPU環境でも,それぞれのGPUをフル活用できるのだという。

 たとえばCrossFire環境では,グラフィックスレンダリングをGPUごとにオーバーラップさせてレンダリングすることで,描画性能を向上させる「Alternate Frame Rendering」(AFR)が基本的な使い方だった。それがMantleでは,「APUと単体GPUとを組み合わせて,APU側のGPUコアをポストエフェクト処理専用で使う」などといった,柔軟な使い方が可能になるのである。

Mantle Mantle
Mantle環境でのマルチGPU活用をイメージしたスライド(左)と,その活用法や利点を挙げたスライド(右)。MantleはマルチGPUのあり方を変えるかもしれない?


ゲームデベロッパの注目を集めるMantle

NVIDIAの対抗策はいかに?


 2013年9月に発表されて以降,Mantleはゲームデベロッパの世界で非常に注目を集めており,「世界のゲームスタジオが続々と採用もしくは採用の検討を始めている」と,AMDは主張している。
 発表時点では,「Battlefield 4」がMantleに対応すると発表されて注目を集めた。また,直近では,「TOMB RAIDER」「HITMAN ABSOLUTION」を手がけ,現在では「Thief」のPC版を開発しているNixxes SoftwareがMantleの採用を決定しており,ThiefのPC版ではMantle版が提供される見込みとのことだ。
 「CryENGINE 3」で名高いCrytekも,Mantleの採用を検討していることが,セッション内で発表されていたりするので(※採用が決定したわけではない),Mantleの採用動向は,PCゲームファンなら注目しておく必要がありそうだ。

 PS4とXbox Oneを制した勢いに乗って,MantleでPCゲーム市場も制覇しようと狙うAMD。だが競合であるNVIDIAも,その動きを黙って見ているわけにはいかないだろう。Mantleに対してNVIDIAは,どのような対抗策を用意してくるのか。当分はそこからも目が離せない。

AMD Developer Summit 2013 公式Webサイト(英語)

  • 関連タイトル:

    Mantle

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