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

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

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

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

LINEで4Gamerアカウントを登録
[WinHEC 2006#06]Direct3D 10.1世代のグラフィックスチップでは仮想化とマルチスレッド化がメインテーマに
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2006/05/30 20:07

ニュース

[WinHEC 2006#06]Direct3D 10.1世代のグラフィックスチップでは仮想化とマルチスレッド化がメインテーマに

 WinHEC 2006のレポート第4弾で紹介したように,DirectX 10(Direct 3D 10)の“次”,DirectX 10.1(Direct 3D 10.1)では,グラフィックスチップが完全に仮想化される。WinHEC 2006では,さらにこの仮想化をテーマに,ドライバレベルの視点で解説し,開発者の注目を集めたセッション「Windows Display Driver Model v2 And Beyond」が行われたので,その内容をレポートしよう。

■Windows Vista世代で求められる
■グラフィックスチップの役割


 Windowsより前の時代,グラフィックスチップは1クライアント(≒一つのアプリケーション)だけを相手にしていればよかった。
 これがマルチタスクを前提としたWindows時代になると,アプリケーションが全画面を占有することは許されなくなった。Windowsでは,旧来のDOSアプリケーションが,それぞれのウィンドウ内で独立して動作する。もし,各アプリケーションが画面を自分専用で使おうとすると,Windowsの画面表示自体が壊れてしまうのだ。

セッションで登壇したMicrosoftのSteve Pronovost氏
 この問題を解決するため,WindowsのデスクトップGUIは,画面表示処理を仮想化したGDI(Graphic Device Interface)で処理されることになった。デスクトップ上で,各アプリケーションは自由に画面を使っているつもりでいても,Windows側でうまく画面を割り当てて処理していたわけだ。また,基本的に,アプリケーションはGDI上で動作することになるため,グラフィックスチップの差異はGDIに吸収されることになった。
 例外は3Dゲームとビデオ再生で,3Dゲームはグラフィックスチップをフル画面描画で駆動させ(たいていウィンドウモードでも動作は可能だが,パフォーマンスが落ちる),ビデオ再生はグラフィックスチップの再生支援機能を使いつつオーバーレイ表示させている。

 そして,Windows Vistaでは,GUIも3Dゲームもビデオ再生も,すべてDirect3Dによって実現されるようになる。最先端のGPGPU(Genral Purpose GPU,グラフィックスチップで汎用コンピューティングを行わせるパラダイム)では,物理や画像処理といった分野までがDirect3D管理下で行われる。
 Windows Vistaにおいて,グラフィックスチップは“大人気で大忙し”なハードウェアデバイスとなり,Windows Vistaの処理をスムースに行っていくためには,グラフィックスチップをスムースに動かす必要が生じてくるわけだ。

 これを実現するための近道が,グラフィックスチップの仮想化という発想だ。これは夢物語でもなんでもなく,先のレポートでも紹介したとおり,Windows Vistaのライフスパン中に,確実に実現される。
 もちろん,ある日を境にいきなり切り替わるのではなく,段階を経て実現されていくことになるのだが,その第1段階と言えるのが「現行グラフィックスチップの仮想化」である。

 Windows Vistaは2007年1月に発売され,前後してDirectX 10(Direct3D 10)に対応した新しいグラフィックスチップが登場する見込み。とはいえ,多くのユーザーは,現行のDirectX 9世代=プログラマブルシェーダ3.0(Shader Model 3.0)世代のグラフィックスチップでWindows Vistaを利用することになるだろう。
 Windows Vistaが,グラフィックスチップの仮想化を行うのなら,これらDirectX 9世代グラフィックスチップの仮想化を,まずなんとかしなければならない。

■現行グラフィックスチップはWDDM 1.0で
■ノンプリエンプティブ・マルチタスキングを実現


WDDM 1.0は2006年時点の現行グラフィックスチップをWindows Vista環境下で仮想化するドライバモデル
 Windows VistaのDirect3Dである「Direct3D 9 Ex」あるいは「Direct3D 10」は,グラフィックスチップを仮想化したハードウェア資源として取り扱えるよう設計されている。

 現行のDirect3D 9世代グラフィックスチップは,WDDM 1.0と呼ばれるWindows Vista専用設計のディスプレイ(=グラフィックス)ドライバによって仮想化が実現される。なお,WDDMはWindows Display Driver Modelの略だ。
 WDDM 1.0では,ソフトウェア的にグラフィックスチップの仮想化を実装する。もともとDirectX 9世代の現行グラフィックスチップは,仮想化を前提とした設計になっていないから,仮想化という概念自体をソフトウェア次元で実装するわけだ。

 Windows Vistaにおいてグラフィックスドライバは,アプリケーションとの対話を担当するユーザーモードドライバ(User Mode Driver,以下UMD)と,システムカーネルと対話をするカーネルモードドライバ(Kernel Mode Driver,以下KMD)の2段階層モデルになる。
 複数のアプリケーションから発行されるグラフィックスチップへの“仕事の依頼”をUMDが解釈し,実際のグラフィックスコアの仕事形態(コマンド)に翻訳。これが「DXGKrnl」(DirectX Graphics Kernel)に渡され,スケジューリング化され,取りまとめられて,KMDに渡される。KMDは,これをグラフィックスチップが実際に実行する形態に近い仕事リストにまとめて,グラフィックスチップへと実際に渡すDMAバッファ(Execute Buffer)に書き込む手はずを整える。

 もともと,仮想化という概念に対応していない現行グラフィックスチップでは,タスクの切り替え単位は「ひとまとまりの描画」単位,描画コマンドを複数ひとまとめにした「描画パケット単位」になる。グラフィックスメモリについても,仮想メモリは一応サポートされるが,グラフィックスチップ側にMMU(Memory Management Unit,メモリ管理ユニット)はない。よって,仮想メモリの管理はソフトウェアで実装されるため,オーバーヘッドが極端に大きい。しかも,マルチタスクは,グラフィックスチップを活用するアプリケーション自体が,別タスクへの切り替えを許可しなければ実現されない。このため,ノンプリエンプティブ・マルチタスキング(non-preemptive multi-tasking,別名「協調型マルチタスキング」(Cooperarive Multi-tasking)となってしまう。

 WDDM 1.0は,現行のグラフィックスチップをWindows Vistaで動作させるための“つじつま合わせ”を行うための形態といったところだ。

左:Windows Vistaでは,ドライバモデルがユーザーモードとカーネルモードに分かれる
右:WDDM 1.0ではKMDがソフトウェアMMUでメモリアドレス補完を行う


■DirectX 10世代グラフィックスチップは
■WDDM 2.0で自発的なマルチタスキングを実現し始める


DirectX 10世代のグラフィックスチップはWDDM 2.0で駆動し,仮想化がより進んで,さらに高度なマルチタスク動作が可能になるとするスライド
 Windows Vistaのリリースに前後して登場するといわれる第一世代のDirectX10世代SM4.0対応GPUは,WDDM2.0アーキテクチャのドライバで駆動され,より進んだGPU仮想化が実現される。

 まずWDDM 2.0では,タスク切り替えの単位がWDDM 1.0のパケット単位から,より微細化された「描画コマンド単位」になる。
 UMDは,アプリケーションが発行した描画依頼を解釈して,グラフィックスチップへ直接発行可能なコマンド列を,グラフィックスチップへ即時転送されるDMAバッファに出力していく。

 WDDM 1.0では,KMDの時点でやっとグラフィックスチップネイティブな描画コマンドを組み立てるが,WDDM 2.0ではUMDの時点でネイティブ描画コマンドを出力していくため,リアルタイム性がWDDM 1.0よりも優れることになる。
 グラフィックスチップ側は,各アプリケーションが依頼してきた最小単位の仕事区切り「Run List」単位で仕事をこなしていくが,そのとき,グラフィックスチップが「自分がどのタスクの処理を実行しているのか“自覚”している」のが,WDDM 1.0とは大きく異なる部分だ。

左:WDDM 1.0と2.xの違い。簡単にいえば,2.xだと手間が1段階少なくて済む。DirectX 10世代のグラフィックスチップは仮想化を前提に作られており,ソフトウェアでマルチタスクを実装する必要がないためだ
右:WDDM 1.0はKMDの言いなりで,ただ与えられた仕事を無思考でこなす。これに対してWDDM 2.0では,グラフィックスチップ自体が自発的にマルチタスクを意識して仕事をこなす,といったイメージ


WDDM 2.0で駆動されるDirectX 10世代のグラフィックスチップは,MMUを持ち,仮想メモリに対して自発的に対応する
 また,DirectX 10世代では,グラフィックスチップ側にMMUが実装されるので,仮想メモリについては,自発的な処理が行えるようになる。例えば,これから実行しようとする処理に必要なメモリが実メモリ空間にないとき,これをグラフィックスチップ自体が気づいて,OS側に仮想メモリのページング(いわゆるスワッピング)を要求したりといったことが可能になるのだ。

 ただ,タスクの切り替えは描画コマンド単位となるので,非常に長いシェーダプログラムを実行しているときなどは,その実行が終わるまでタスクは切り替わらない。さらにいえば,巨大なポリゴンの描画を実行するコマンドが実行された場合,その大量のピクセル描画が終了するまでは,タスクを切り替えられない。
 WDDM 1.0のパケット単位と比べれば,各段に細かくなった切り替え単位だが,状況によってはタスク切り替えに「待ち」が起こりうるわけだ。

このセッションではMicrosoftのほか,ATI TechnologiesのTim Kelley氏(左)とNVIDIAのHenry Moreton氏(右)が壇上に上がった。グラフィックスチップの仮想化は業界全体にとって重要なテーマなのだ


■WDDM 2.1で完成するグラフィックスチップ仮想化計画

 グラフィックスチップの完全な仮想化を達成する,最終的なゴールとして設定されているのがWDDM 2.1だ。DirectX 10.1世代のグラフィックスチップによって実現されることが,当面の目標とされている。

 UMDやKMDのタスク自体はWDDM 2.0の時と同じだが,WDDM 2.1では,実際にグラフィックスチップがタスクを実行するとき,グラフィックスチップのタスク切り替えが完全にプリエンプティブとなり,要求の発生した直後に行えるようになる。
 WDDM 2.0では待ち時間が生じるような,長いシェーダプログラムの実行時や大きなポリゴン描画時でも,タスク切り替えが可能になるのだ。

DirectX 10.1世代のグラフィックスチップはWDDM 2.1で駆動される。グラフィックスチップは理想どおりの仮想化が行われ,マルチタスクの粒度もCPU並みになるという


 仮想メモリ管理においても,WDDM 2.1ではより進んだ実現方式になる。

 WDDM 2.0では,グラフィックスチップが実行中の仕事に必要なデータが実メモリにない場合,スワッピング要求が発生する。そして,その処理実行中,グラフィックスチップはストール(停止)してしまう。
 これに対してWDDM 2.1では,スワッピングで待たされる間にタスク切り替えを行って,発行されている別の処理をこなすことが可能になるのだ。仮想メモリをグラフィックスチップ側でサポートするという意味では変わらないが,ページフォルトのときにグラフィックスチップが停止せず,別の処理を行えるのが,WDDM 2.1のアドバンテージになる。

左:WDDM 2.1では,仮想メモリの処理についてもWDDM 2.0より高度なものになる
右:グラフィックスチップが,3Dグラフィックス処理と並行してその他の処理(例えば物理シミュレーションのようなGPGPUタスク)を実行しているようなときには,WDDM 2.1のタスク切り替えはかなり有用になるという


■グラフィックスチップの仮想化が次世代の
■マルチグラフィックスチップパラダイムを切り開く


 下の表は,WDDM 1.0と2.0,2.1の違いをまとめたものだ。

WDDM 1.0/2.0/2.1の違い


仮想メモリ処理において,グラフィックスチップがストールせずにタスク切り替えが行われるのがWDDM 2.1の特徴
 WDDM 2.1は,WDDM 2.0に対して“+0.1”という表記にはなるが,このステップアップ幅は大きい。今回のセッションを聞いた限り,DirectX 10からDirectX 10.1への進化は,グラフィックスパイプラインの進化やプログラマブルシェーダ仕様のバージョンアップよりも,このWDDM 2.1の実現が優先されるような印象を受けた。

 WDDM 2.1によってグラフィックスチップの仮想化が達成され,プリエンプティブなマルチタスクが実現可能となったとしよう。そうなると,NVIDIA SLIやCrossFireのようなマルチグラフィックスチップ環境においても,より多くのタスクが並列に一度に処理できるようになって,これまで以上にスケーラブルなパフォーマンスアップが期待できるかもしれない。

 DirectX 10および10.1世代のグラフィックスチップは,ジオメトリシェーダ等のパイプライン一新と,グラフィックスチップ仮想化のためのハードウェアの搭載で,とつてもなく規模が大きくなることが予想されている。グラフィックスチップ仮想化の恩恵を受けて,グラフィックスコアの数次第でスケーラブルに性能が伸ばせるなら,ハイコストな1個の巨大なチップを製造するより,マルチグラフィックスチップ構成のほうがリーズナブルなソリューションとなる。
 今でこそ「ハイエンドユーザーのレクリエーション」に近い扱いのマルチグラフィックスチップだが,Windows Vista時代では。性能強化において必然のソリューションとなってくるかもしれない。(トライゼット 西川善司)

左:WDDM 2.1に対応するためには,かなり高度な専用MMUをグラフィックスチップに搭載しなければならないはずだ
右:グラフィックスチップが仮想化されたときに,マルチグラフィックスチップがどう取り扱われるのかを示したスライド
  • 関連タイトル:

    DirectX

  • 関連タイトル:

    Windows Vista

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