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

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

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

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

LINEで4Gamerアカウントを登録
[GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2015/03/10 14:01

イベント

[GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

画像集 No.003のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった
Andrew Lauritzen氏(Graphics Software Engineer,Intel)
画像集 No.002のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった
Michael Apodaca氏(Graphics Software Architect,Intel)
 Intelは近年,ゲーム開発者に対するアピールの場としてのGame Developers Conference(以下,GDC)を重視しているようで,GDC 2015でも,多数の講演を行っていた。すでにGDC 2015のレポートとしてお届けしているものもあるが,本稿では,そんなIntelの講演のなかから,DirectX 12と同社製の統合型グラフィックス機能(以下,iGPU)に関する「Efficient Rendering with DirectX 12 on Intel Graphics」(IntelのiGPUを用いたDirectX 12の効果的なレンダリング)をレポートしてみたい。

 セッションを担当したのは,Intelでグラフィックスソフトウェアエンジニアを務めるAndrew Lauritzen氏と,グラフィックスソフトウェアアーキテクトを務めるMichael Apodaca氏の2名である。
 なお,本稿で取り扱う「DirectX 12」は事実上「Direct3D 12」のことだが,両氏はDirectX 12と呼んでいたので,本稿もそれに倣う。この点はあらかじめお断りしておきたい。


DirectX 12世代ではCPUの利用効率が上がり

Intel製iGPUの性能が向上する!?


 講演でIntelがまず語ったのは,DirectX 12世代になると,従来よりもCPUを効率よく利用できるようになるということだ。

 これは簡単にいうと,「DirectX 12ではマルチスレッド処理の効率を上げられる」ということになる。たとえば,DirectX 11だと,GPUに対するコマンドのバッファは1つしかなった。その1つしかないバッファにアプリケーション側からコマンドを積み上げていって,GPUに実行してもらうという形だ。

DirectX 11は,「命令バッファにGPU用の命令を積み上げておくと,グラフィックスドライバがそれをDMAバッファに転送して,GPUに実行させてくれる」仕組みで動作している
画像集 No.004のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 この方式だと,命令を作成する処理の並列化にあたってさまざまな制限が出てくる。そこでDirectX 11では,複数のレンダリングコンテクストを生成し,それぞれを別のスレッドで処理できる仕組みが導入された。メインスレッドではメインコンテクストとなる「Immediate Context」(イミーディエイトコンテクスト)を,サブスレッドでは,サブコンテクストとなる「Deferred Context」(ディファードコンテクスト,以下 遅延コンテクスト)を処理するというものだ(関連記事)。
 「ただ,遅延コンテクストも,『バッファが1つしかない』制約を受ける。その分だけ,CPUを効率的に利用できない」(Lauritzen氏)。

「キャッシュの関係でCPUの性能を生かせない」など,遅延コンテクストにもいろいろ問題があるよ,というスライド
画像集 No.005のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 DirectX 12ではこの部分が大きく変わる。具体的には,スレッドごとに命令バッファを持つようになるのだ。それにより,DirectX 11環境にある制限は緩和され,CPUのポテンシャルをより活かせるようになると,Lauritzen氏は述べている。

DirectX 12ではスレッドごとに命令バッファを持てるようになり,DirectX 11にあった問題が解消される
画像集 No.006のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 では,iGPUにおけるDirectX 12の効果はどのようなものになるのだろう。下に示したグラフは,左が「同じ性能を得るのに必要な消費電力の違い」,右が「同じ消費電力で得られる性能の違い」を示したもので,いずれも左半分がDirectX 11,右がDirectX 12ベースのものだ。青がCPUの消費電力,赤がiGPUの消費電力。縦軸がCPUとiGPUの総消費電力量で,横軸が経過時間となる。

 ここで使われているのはHaswellベースの第5世代Coreプロセッサだが,左のグラフを見ると,DirectX 11に比べて,DirectX 12ではCPUの消費電力が大きく低減されているのが分かる。
 また,右のグラフを見ると,トータルの消費電力はほぼ同じだが,DirectX 12ではCPUの消費電力が下がり,その分,iGPUが電力を消費できる(=より高い動作クロックで駆動できる)ことが見て取れよう。CPUの動作効率が向上して消費電力が下がり,その分,iGPUを駆動させるための余裕が生まれているわけだ。

DirectX 12の効果を示したスライド
画像集 No.007のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった


HaswellとBroadwell,最大の違いはメモリ管理法にあり


 ちなみに,いま紹介した内容は,基本的にSIGGRAPH 2014の時点で発表済みだ(関連記事)。2014年8月の時点で,すでにDirectX 12への対応はかなりのところまで進んでいたというわけである。
 実際,IntelはすでにiGPU向けにβ版のDirectX 12対応グラフィックスドライバを提供中だ。現時点ではHaswell世代およびBroadwell世代のiGPUをサポートしている。

 ただ,BroadwellとHaswellでは,DirectX 12のサポート方法に,明確な違いがあるようだ。それが語られたのが,セッションの後半で,メモリ管理に関する話題に移ったときだった。

 DirectX 11ではWDDM(Windows Display Driver Model)1.x世代のメモリ管理法を採用している。簡単にまとめると,グラフィックスメモリという「固定されたリソース」があって,そのリソースを,グラフィックスドライバが管理しているというイメージだ。
 アプリケーションは,グラフィックスメモリを使うときに,DirectX 11のAPIを介して,「これはテクスチャです」といった具合にいちいち宣言したり定義したりして,メモリを使わせてもらうしかなかった。アプリケーションが自由にグラフィックスメモリを使うことはできなかった,と言い換えてもいい。
 それに対してDirectX 12では,グラフィックスメモリをアプリケーションから自由に利用できるようになる。というのも,DirectX 12ではメモリ管理法がWDDM 2.0ベースとなり,グラフィックスメモリ管理の仕組みも一新されるからだ。
 グラフィックスメモリは仮想メモリとして扱えるようになり,アプリケーションは,GPU用の仮想メモリアドレス(GPU Virtual Address)を使うことにより,CPUが仮想メモリアドレスを使ってメインメモリにアクセスしているのと同じような感覚でグラフィックスメモリにアクセスできるようになるのだ。いちいちドライバに“おうかがい”を立てていたDirectX 11と比べれば,グラフィックスメモリ利用の自由度は格段に上がることになる。

WDDM 2.0では,GPU Virtual Address(GPU仮想メモリアドレス)によって,CPUのメインメモリに近い扱いが可能となる
画像集 No.008のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 ここで注意が必要なのはHaswellで,Haswell世代のiGPUでは,仮想メモリアドレスの利用に制限があるという。
 iGPUは仮想メモリを管理するためにGPUのメモリページテーブルを持っているのだが,「GPUのメモリページテーブルとCPUのメモリページテーブルを同期する仕組みが,Haswell世代にはない」(Apodaca氏)のだという。これが制限を生むことになるというわけだ。

Haswell世代のiGPUにもGPU用のメモリページテーブルはあるが,その利用には制限がある
画像集 No.009のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 どんな制限かというのは複雑な話になるのだが,極力簡単にまとめると,「Haswell世代のiGPUでは,CPUとの間で,仮想メモリアドレスの連携を行えない」ということになる。iGPUに割り当てられているメモリリソースの範囲でしか仮想メモリを使えないのである。

HaswellのiGPUにおける仮想メモリアドレス周りの制限。限られた範囲のメモリしか扱えないので,アプリケーションがグラフィックスメモリを要求しても失敗するということが起こり得るという
画像集 No.010のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 その点,Broadwell世代のiGPUに,この制限はない。要するに,「CPUとGPUの仮想メモリを同期させる仕組み」がBroadwell世代のプロセッサには組み込まれているというわけだ。

Broadwell世代のGPU仮想メモリはCPUの仮想メモリと同じ程度に自由に使えるようになるという。ただし,動作するグラフィックスドライバは,まだできていないそうだ
画像集 No.011のサムネイル画像 / [GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった

 「Haswell世代とBroadwell世代のiGPUでは,メモリ管理の仕組みに違いがある」ことが,エンドユーザーにどんな違いをもたらすかは,セッションのテーマでないこともあって語られなかったが,DirectX 12をサポートするという点で表面的な違いは生じないだろう。ただ,Haswell世代だと,メモリリソースの解放と確保が頻繁に生じ,それが性能面でのオーバーヘッドとなって,Broadwell世代比で性能が低下する,といったことは起こり得る可能性として挙げられそうだ。

 Broadwell世代のiGPUが持つポテンシャルを引き出せるグラフィックスドライバは開発中ということなので,現時点ではまだ比較できないが,Windows 10とDirectX 12世代のゲームタイトルが出揃ったときには,「HaswellとBroadwellにおけるiGPU仕様の大きな違い」が,再び話題になるかもしれない。

Intelのゲーム開発者向け情報ページ「Achievement Unlocked」

GDC公式Webサイト

4GamerのGDC 2015関連記事一覧

  • 関連タイトル:

    Core i7・i5・i3・M(Broadwell)

  • 関連タイトル:

    Core i7・i5・i3-4000番台(Haswell)

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