後藤弘茂のWeekly海外ニュース

GPUの進化に対応したMicrosoftの次世代API「DirectX 12」の背景

ゲーム機風のAPIへと変わるDirectX 12

GDC会場となった米サンフランシスコのMoscone Center

 Microsoftが次世代のグラフィックスAPI「Direct3D 12」のプレビューを、3月17日〜21日に米サンフランシスコで開催されたゲーム開発者向けカンファレンス「GDC(Game Developers Conference)」で行なった。Direct3D 12はAPIセット「DirectX 12」の中の3DグラフィクスAPIだ。前回のグラフィックスAPIのメジャーチェンジ「DirectX 11」は2009年。DirectX 12のリリース目標は2015年なので、6年振りのAPI革新となる。

 しかし、DirectX 12は、新しいDirectXという、単純なAPI刷新に留まらない。DirectX 12は、DirectX始まって以来の改革で、API資産をいったんご破算にして、新たにAPIを構築する。1996年に3DグラフィックスAPIの「Direct3D」を導入してからこれまで、DirectXは継続的に進化してきた。DirectX 12ではその方向を大きく変える。

2015年のリリース目標となるDirectX 12は、2009年のDirectX 11以来、6年ぶりのAPI革新

 DirectX 12の最大のポイントは、ゲームコンソール(ゲーム機)風のAPIへの転換だ。分厚いAPI層でハードウェアを抽象化するのではなく、API層はできるだけ薄くして、よりローレベルでのハードウェアへのアクセスを可能にする。APIとドライバのオーバーヘッドを減らし、ハードウェアの性能を引き出せるようにする。アプリケーションが、より直裁的にリソースをコントロールできるようにする。

 また、プログラマブル化したGPUをより効率的に使えるように、マルチコア化したCPUをスケーラブルに使えるようにする。CPUとGPUの同期も改善し、メモリモデルをより効率的にする。こうした改革を行ないながら、DirectX 12は過去のGPUでも動作する互換性を持つ。AMDならGCN(Graphics Core Next)、NVIDIAならFermi(フェルミ)以降のGPUでサポートされる。

 さらに、Microsoftはこの革新的なDirectX 12を、PCだけでなく、Xbox OneからWindows Phoneにまで幅広く展開する。モバイル主体のコンピューティングの時代にも対応するAPIとして推進する。GDCでのDirectX 12のプレビューセッションには、AMDやNVIDIA、Intelといったお馴染みのPCグラフィックスベンダーに加えて、Qualcommが登壇してサポートを表明した。

 DirectX 12のリリース目標は2015年末の商戦に間に合う時期。DirectX 12のプレビュリリースは今年(2014年)登場する。GDCのセッションでは、Microsoftのレーシングゲーム「Forza Motorsport 5」による、DirectX 12プロトタイプのデモが行なわれた。

DirectX 12プロトタイプによる「Forza Motorsport 5」デモ

CPUが頭打ちになりGPUが伸びるチップの現状に対応

 DirectX 12の背景には、半導体チップの技術トレンドの変化、GPUハードウェアと市場の変化、開発者からの要求の変化、グラフィックスAPIの役割の変化がある。

 半導体チップの変化は顕著で、CPUはマルチコア化したがCPUコアの性能向上は鈍化している。それに対してGPUは急激に性能を増しており、CPUとGPUの統合チップではこの傾向はますます強まっている。これは、CPUコアよりもGPUコアの方が7〜10倍も性能/電力の効率が高いため、電力の制約の中で性能を上げるにはGPUコアを強化する以外の道がないからだ。

半導体チップのトレンドの変化
CPUとGPUの性能向上度合いの比較

 こうした背景から、現在のコンピュータアーキテクチャでは、性能を引き出すためにはGPUをよりスケーラブルに活用して行かなければならなくなっている。一方、ソフトウェア開発者は、シェーダグラフィックスに移ったGPUを有効に使うため、より直裁的にGPUハードを扱えることを求めている。また、アプリケーション側も、GPUを汎用コンピューティングにも活用し、よりタスクレベルの並列性の比率を高めようと、変化して来た。

 しかし、グラフィックスAPIの方は、そうした変化に追従できていなかった。APIのモデルは20年以上前にデザインされたモデルの延長にある。GPUは、CPUが制御するラージステイトマシーンとして扱われ、直裁的ではないメモリモデルで、マルチコアCPUのスケーラビリティを活かすことも不十分で、CPU-GPUの同期も効率的ではない。名前とは裏腹に、Direct3Dはダイレクトに(直接)ハードウェアを扱うことができなかった。

ゲーム開発者の要求
アプリケーションはGPUも利用して並列性を高めるよう変化
20年以上も前にデザインされたモデルの延長にあるグラフィックスAPI

 従来のグラフィックスAPIがこんなに抽象化されているのは、以前のPCのグラフィックスAPIが、多種多様なハードウェアを抽象化しなければならなかったからだ。しかし、現在では、GPUハードウェア自体は、PCグラフィックスに関して言えば、GPUを開発するメーカー数が少なくなり、ハードウェアアーキテクチャは集約しつつある。また、GPUが汎用化したために、プロセッサとしての性格は各社で似通って来ており、かつてのように固定機能ハードウェアの差異がある状態とは異なってきている。

 一方、ゲームコンソールでは、決め打ちのハードウェアをカバーするだけなので、PCグラフィックスのような高い抽象度は必要がなかった。薄いAPIレイヤーで、直裁的にハードを叩けるのがゲームコンソールスタイルだ。オーバーヘッドが小さいため、ゲームコンソールは、例えPCと同じアーキテクチャのGPUであっても、より高い実効性能を達成することができた。

 多くのコンソールがこうした薄いソフトウェア層を持ち、コンソールゲーム開発者はそのスタイルに慣れ親しんできた。そのため、多くのゲーム開発者は以前からコンソールスタイルのAPIをPCにも求めていた。そして、今世代でゲームコンソールがPCアーキテクチャと似通ったことで、潜在的な要求はさらに高まっていた。

マルチコアCPUなど現在のリソースをうまく使うDirectX 12

 こうした課題を解決するために、DirectX 12では、20年の積み重ねを抜本的に再編成した。冒頭で触れたようにオーバーヘッドを減らし、アプリケーションがリソースにより直裁的にアクセスできるようにし、リソースハザードトラッキングを容易にし、マルチCPUコアでのスケーラビリティを高める。下のMicrosoftのスライドもNVIDIAのスライドも、言っていることはほぼ同じで、DirectX 12の主眼が、グラフィックス機能の追加よりもAPI/ドライバの抽象化を下げることにあることが分かる。

DirectX 12の概要をまとめたMicrosoftのスライド
同じくDirectX 12の概要を示すNVIDIAのスライド

 Microsoftはその一例として、現在のDirectX 12のプロトタイプでのデモを見せた。4 CPUコアマシンでのレンダリングをDirect3D 11とDirect3D 12で比較したものだ。Direct3D 11ではメインスレッドの負荷ばかり非常に高かったのが、Direct3D 12では4スレッドに負荷が均等に分散され、CPUの実行時間が大幅に短くなっている。

4 CPUコアのマシンによるDirect3D 11とDirect3D 12の比較

 実際には、DirectX 12はまだ開発中で、多くの機能は、今後実装予定だが、方向性は非常に明白だ。現時点で、ステイトマネージメントの改良のためのパイプラインステイトオブジェクトや、レンダリングコマンド発行の再利用のためのバンドル化、コマンドリストの改良、リソースバインディングモデルの改良など、さまざまな要素が決まっている。具体的な実装が進めば、DirectX 11に対して、同じハードで何倍の性能といった数値が出てくるだろう。

DirectX 12で実装される機能

 MicrosoftはDirectX 12を、PCだけでなくXbox Oneにも提供する。だが、そもそもXbox OneのAPI自体が、コンソールスタイルでDirectX 12との親和性が高い。GDCのセッションでは、Xbox OneのタイトルであるForza Motorsport 5をDirectX 12プロトタイプにポートするのに、かかった労力は4人月で済んだと説明していた。

DirectX 12プロトタイプへのXbox OneのForza Motorsport 5移植について

MantleとDirectX 12の関係

 レイヤーを薄くするDirectX 12の姿は、AMDの新グラフィックスAPI「Mantle(マントル)」ともよく似ている。もちろん、AMDが薄いレイヤーのMantleを出した途端に、DirectX 12のプレビューが行なわれたことは偶然ではない。複数のGPU関係者が、DirectX 12を「Mantleに触発されたAPI」と呼んでいた。Mantleへの反応として登場したのがDirectX 12と考えてよさそうだ。

 あるAMD関係者は、もっと明瞭に語る。「グラフィックスAPIを軽くしたいとMicrosoftに何年も呼びかけていたが、Microsoftは動かなかった。そこで、業を煮やしてMantleを出したら、Microsoftがやっと重い腰を上げた。Mantleが業界を動かした」。

 Microsoftを動かしてスタンダードAPIもMantleと同じ方向へ向けることができたのなら、GPUベンダーとしては成功ということになる。AMDにすれば、Mantleをすでに持っている同社は、2015年のDirectX 12に対して2年のアドバンテージを持つことになる。MantleからDirectX 12への移植が容易であるなら、DirectX 12までMantleで橋渡しをしようと考えるゲーム開発者が増えても不思議ではない。DirectX 12とMantleが併存するようになれば、Mantleにラッパーソフトウェア層を被せて対応することもできるかもしれない。

 AMDはDirectX 12のセッションでは、GCNでDirectX 12をサポートすると説明した。ちなみに、DirectX 12のセッションにAMDから登壇したのは、Mantleを発表したAMDのRaja Koduri氏(Corporate Vice President, Visual and Perceptual Computing)だった。

AMDのセッションではGCNでDirectX 12をサポートすると説明

 一方、NVIDIAは、Mantleが発表された直後、「スタンダードAPIでも、MantleでAMDが主張しているのと同じことができる。NVIDIAはスタンダードAPIでなければ意味がないと考えている」と説明していた。NVIDIAがこう説明していたのは、その時点で、すでにDirectX 12の動きがあったからだろう。DirectX 12のセッションに登壇したのは、スタンダードAPIでもできると説明していたTony Tamasi氏(Senior Vice President of Content and Technology, Nvidia)だ。Mantleによる触発で、DirectXがMantle的な方向に向かうのなら、GPU中心のメーカーであるNVIDIAにとっても利がある。

Fermi以降のGPUでDirectX 12をサポートするNVIDIA

 GDCでのDirectX 12プレビューにはIntelも登場、同社のHaswell(ハズウェル)のIris GPUコアがDirectX 12をサポートすると説明。また、QualcommはDirectX 12によって性能が上がることは、電力効率が向上することだとして、モバイルでもDirectX 12の利点があると説明した。ちなみに、Qualcommの代表として説明を行なったEric Demmers氏(Vice President, Engineering, Qualcomm Technologies)は、元はAMDのグラフィックス部門のCTOだった人物だ。

 既存のGPUコアでDirectX 12をサポートできるため、DirectX 12はローンチ時から膨大なインストールドベースを期待できる。DirectX 12が出る以前のデスクトップGPUでも100%がDirectX 12をサポートできるほか、DirectX 12をMicrosoftがリリースする時点のゲームPCの50%がDirectX 12をサポートできるとしている。

IntelはIris GPUコアでDirectX 12をサポート
電力効率の面からQualcommもDirectX 12をサポートする
ローンチ時点で50%のゲームPCがDirectX 12をサポートできるとする
GDCのDirectX 12プレビューでプレゼンテーションを行なった各社の面々。GPUベンダーの幹部は右からEric Demmers氏(Vice President, Engineering, Qualcomm Technologies)、Tony Tamasi氏(Senior Vice President of Content and Technology, Nvidia)、Raja Koduri氏(Corporate Vice President, Visual and Perceptual Computing, AMD)、Eric Mentzer氏(Vice President, Platform Engineering Group, Intel)

役割が変化したグラフィックスAPI

 従来のDirectXは、APIがリリースされた時点では、対応するハードが揃っていないのが当たり前だった。しかし、今回のDirectX 12は異なる。その背景には、グラフィックスAPI自体の役割の変化がある。

 DirectX 9までは、GPUハードウェアをグラフィックスAPIが規定して来た。グラフィックスAPIがサポートした機能を、GPUのグラフィックスパイプラインの中にハードウェアとして実装した。DirectX 8までは、APIとGPUハードウェアの関係は密接に結びついており、API側から見えるパイプラインがそのまま固定ハードウェアで実現されていた。下はDirectX 8の例で、左がAPI上から見えるパイプラインで、右が実際のハードウェアだ。

DirectX 8 APIとGPU実装(※PDFはこちら)

 こうしたAPIとGPUハードの密接な関係は、プログラマブルになったDirectX 9から揺らぎ始めた。そして、DirectX 10/11ではAPIが規定するパイプラインと、実際のGPUハードウェアは大きく乖離した。APIがGPUハードウェアを規定するのではなく、プログラマブルでフレキシブルなGPUハードウェア上に、特定の機能を実現するAPIが乗るというCPU的なスタイルに変わり始めた。

DirectX 11 APIとGPU実装(※PDFはこちら)

 上の図はDirectX 11で、左がAPI上のパイプライン、中央がNVIDIAやAMDのGPU、右がLarrabee型の実装だ。こうして、APIのくびきから離れたGPUハードウェアは、APIとは無関係に勝手に進化し始めた。そうしたAPIとハードウェアの関係の変化の末に、DirectX 11でAPI側の変化が止まってしまった。

 その状況で、ようやく登場したDirectX 12には、もう、ハードウェアを定義するという方向は薄い。DirectX 12でも部分的に新しい固定ハードウェアを必要とする部分はあるが、主眼はグラフィックス固定機能の強化にはない。

 DirectX 12は、APIの機能を固定ハードウェアで実現した時代からの重い資産を精算し、プログラマブルハードウェアにより直接的にアクセスする道を開く。ハードウェアの実態に、より近いアプローチとも言える。

 DirectX 12が、既存のGPUでサポートできるとGPUベンダーが宣言する理由はここにある。APIがハードウェアを規定するのではなく、プログラマブルなハードウェアの上にAPIが乗る。CPUと似通ったスタイルなら、CPU同様に新しいAPIが少し前の世代のGPUで動作するのは当たり前とも言える。

GPUコンピューティングとの関係

 今回、DirectX 12プレビューで触れられなかったポイントの1つは、GPUコンピューティングについてだ。そもそも、GPUコンピューティングで、グラフィックスとは異なるランタイムを使うのは、グラフィックスのソフトウェアスタックが複雑でオーバヘッドが大きく扱いにくかったからだ。グラフィックスAPIを整理してより直裁的にして行くと、原理的にはGPUコンピューティングにも使いやすいランタイムシステムになって行く。つまり、グラフィックスとコンピュートの融合のチャンスが出てくる。

 実際、グラフィックスAPIのもう片方であるOpenGL系を策定するKhronosグループのある関係者は「グラフィックスAPIが変わって行くと、将来、例えば、OpenCLのランタイムにOpenGLなどを抱合できるようになるかもしれない。具体的にそうした計画があるわけではない。しかし、OpenCLのランタイムが統合的なランタイムになり、さまざまなコンパイラからのコードを漏斗のように受けるようになり、その1つにグラフィックスAPIがあるという風になる可能性はある」と語っていた。より直裁的でシンプルなGPUコンピューティング側のソフトウェアスタックに、グラフィックスAPIを抱合するという発想だ。ちなみに、OpenGL系も、基本的にはDirectX 12と似たような方向へ向かい始めている。

 また、今回はDirectX 12の3Dグラフィックス以外のAPIについては触れられなかった。ナチュラルヒューマンインターフェイスの普及やバーチャルリアリティの登場で、入力系のAPIの拡張も重要になりつつある。

(後藤 弘茂 (Hiroshige Goto) E-mail