ニュース
[WinHEC 2006#06]Direct3D 10.1世代のグラフィックスチップでは仮想化とマルチスレッド化がメインテーマに
■Windows Vista世代で求められる
■グラフィックスチップの役割
Windowsより前の時代,グラフィックスチップは1クライアント(≒一つのアプリケーション)だけを相手にしていればよかった。
これがマルチタスクを前提としたWindows時代になると,アプリケーションが全画面を占有することは許されなくなった。Windowsでは,旧来のDOSアプリケーションが,それぞれのウィンドウ内で独立して動作する。もし,各アプリケーションが画面を自分専用で使おうとすると,Windowsの画面表示自体が壊れてしまうのだ。
例外は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で
■ノンプリエンプティブ・マルチタスキングを実現
現行の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で動作させるための“つじつま合わせ”を行うための形態といったところだ。
■DirectX 10世代グラフィックスチップは
■WDDM 2.0で自発的なマルチタスキングを実現し始める
まず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のパケット単位と比べれば,各段に細かくなった切り替え単位だが,状況によってはタスク切り替えに「待ち」が起こりうるわけだ。
■WDDM 2.1で完成するグラフィックスチップ仮想化計画
グラフィックスチップの完全な仮想化を達成する,最終的なゴールとして設定されているのがWDDM 2.1だ。DirectX 10.1世代のグラフィックスチップによって実現されることが,当面の目標とされている。
UMDやKMDのタスク自体はWDDM 2.0の時と同じだが,WDDM 2.1では,実際にグラフィックスチップがタスクを実行するとき,グラフィックスチップのタスク切り替えが完全にプリエンプティブとなり,要求の発生した直後に行えるようになる。
WDDM 2.0では待ち時間が生じるような,長いシェーダプログラムの実行時や大きなポリゴン描画時でも,タスク切り替えが可能になるのだ。
仮想メモリ管理においても,WDDM 2.1ではより進んだ実現方式になる。
WDDM 2.0では,グラフィックスチップが実行中の仕事に必要なデータが実メモリにない場合,スワッピング要求が発生する。そして,その処理実行中,グラフィックスチップはストール(停止)してしまう。
これに対してWDDM 2.1では,スワッピングで待たされる間にタスク切り替えを行って,発行されている別の処理をこなすことが可能になるのだ。仮想メモリをグラフィックスチップ側でサポートするという意味では変わらないが,ページフォルトのときにグラフィックスチップが停止せず,別の処理を行えるのが,WDDM 2.1のアドバンテージになる。
■グラフィックスチップの仮想化が次世代の
■マルチグラフィックスチップパラダイムを切り開く
下の表は,WDDM 1.0と2.0,2.1の違いをまとめたものだ。
WDDM 2.1によってグラフィックスチップの仮想化が達成され,プリエンプティブなマルチタスクが実現可能となったとしよう。そうなると,NVIDIA SLIやCrossFireのようなマルチグラフィックスチップ環境においても,より多くのタスクが並列に一度に処理できるようになって,これまで以上にスケーラブルなパフォーマンスアップが期待できるかもしれない。
DirectX 10および10.1世代のグラフィックスチップは,ジオメトリシェーダ等のパイプライン一新と,グラフィックスチップ仮想化のためのハードウェアの搭載で,とつてもなく規模が大きくなることが予想されている。グラフィックスチップ仮想化の恩恵を受けて,グラフィックスコアの数次第でスケーラブルに性能が伸ばせるなら,ハイコストな1個の巨大なチップを製造するより,マルチグラフィックスチップ構成のほうがリーズナブルなソリューションとなる。
今でこそ「ハイエンドユーザーのレクリエーション」に近い扱いのマルチグラフィックスチップだが,Windows Vista時代では。性能強化において必然のソリューションとなってくるかもしれない。(トライゼット 西川善司)
- 関連タイトル:
DirectX
- 関連タイトル:
Windows Vista
- この記事のURL:
(C)2007 Microsoft Corporation.