イベント
[GDC 2015]「Haswell」と「Broadwell」の間には,DirectX 12関連の重要な違いがあった
Andrew Lauritzen氏(Graphics Software Engineer,Intel) |
Michael Apodaca氏(Graphics Software Architect,Intel) |
セッションを担当したのは,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では,複数のレンダリングコンテクストを生成し,それぞれを別のスレッドで処理できる仕組みが導入された。メインスレッドではメインコンテクストとなる「Immediate Context」(イミーディエイトコンテクスト)を,サブスレッドでは,サブコンテクストとなる「Deferred Context」(ディファードコンテクスト,以下 遅延コンテクスト)を処理するというものだ(関連記事)。
「ただ,遅延コンテクストも,『バッファが1つしかない』制約を受ける。その分だけ,CPUを効率的に利用できない」(Lauritzen氏)。
DirectX 12ではこの部分が大きく変わる。具体的には,スレッドごとに命令バッファを持つようになるのだ。それにより,DirectX 11環境にある制限は緩和され,CPUのポテンシャルをより活かせるようになると,Lauritzen氏は述べている。
では,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を駆動させるための余裕が生まれているわけだ。
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と比べれば,グラフィックスメモリ利用の自由度は格段に上がることになる。
ここで注意が必要なのはHaswellで,Haswell世代のiGPUでは,仮想メモリアドレスの利用に制限があるという。
iGPUは仮想メモリを管理するためにGPUのメモリページテーブルを持っているのだが,「GPUのメモリページテーブルとCPUのメモリページテーブルを同期する仕組みが,Haswell世代にはない」(Apodaca氏)のだという。これが制限を生むことになるというわけだ。
どんな制限かというのは複雑な話になるのだが,極力簡単にまとめると,「Haswell世代のiGPUでは,CPUとの間で,仮想メモリアドレスの連携を行えない」ということになる。iGPUに割り当てられているメモリリソースの範囲でしか仮想メモリを使えないのである。
その点,Broadwell世代のiGPUに,この制限はない。要するに,「CPUとGPUの仮想メモリを同期させる仕組み」がBroadwell世代のプロセッサには組み込まれているというわけだ。
「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: