NVIDIA、第3世代のGPU切り替え技術「Optimus Technology」
〜シームレスで自動的な切り替えにより長時間駆動と高性能を両立

2月9日(現地時間)発表



 米NVIDIAは9日(現地時間)、同社にとって第3世代目となるGPUの切り替え技術「Optimus Technology」(オプティマス テクノロジ)を発表した。

 GPUの切り替え技術というのは、チップセットやCPUに内蔵されたグラフィックス機能(以降IGPと呼称)とNVIDIAの単体GPU(以降dGPUと呼称)の両方を搭載し、それらを任意に切り替えて利用する技術である。

●これまでのGPU切り替え技術

 一般に、IGPは消費電力が少ないが、性能が低く、dGPUは性能が高いが、消費電力が高い。これらを切り替えて利用することで、必要に応じたバッテリ駆動時間とグラフィックス性能を得ることができるようになる。

 その最初の例が2006年1月に発表されたソニーの「VAIO type SZ」。この製品は、GPU切り替え技術を採用し、13.3型のモバイル向けでありながら、dGPU利用時に高い性能を発揮できることで話題を呼んだ。ただし、当時はIGPとdGPUを切り替えるのに、OSの再起動が必要で、起動時にシステムBIOSがハードウェア的に片方を有効、もう一方を無効にしてから立ち上げるという仕組みになっていた。そのため、切り替えに当たってはアプリケーションを全て終了し、再起動まで2〜3分ほど待つ必要があった。

【動画】第1世代のVAIO type SZによるGPU切り替えのデモ。スイッチを切り替えると、再起動を促すダイアログが表示され、OKボタンを押すと再起動のプロセスが走る。背後での英語の説明は「これでも出た当時はこれが画期的なものだった」というもの。再起動して再び使えるまでには2分半近くかかる

第2世代のGPU切り替え技術ではソフトウェア式の切り替えとなったが、どのドライバの開発には大きな困難が伴う

 この後継製品で2008年7月に発表され、今なお現行製品である「VAIO type Z」では、この問題を克服し、IGPとdGPUの切り替えをソフトウェアスイッチでできるようにした。この第2世代のGPU切り替え技術では、IGPのドライバ(Intel製)とdGPUのドライバ(NVIDIA製)をDisplay Driver Interposerと呼ばれるソフトでラップすることでOSから1つのGPUに見せかけ、InterposerがカスタムAPIを使ってIGPと通信する仕組みとなっている。そのため、ディスプレイドライバの開発に当たっては、NVIDIAはIntelの開発者の協力を仰ぐ必要があった。また、このカスタムドライバでWindowsのWHQLを取得するにあたっては、Microsoftとも協業する必要があったほか、IGPとdGPUのドライバがアップデートされる度に膨大な量の検証も要した。

 問題はこれだけではない。IGPとdGPUからの信号を切り替えるには、ミニD-Sub15ピンやHDMIなど、ディスプレイインターフェイスごとに、データ信号用、制御信号用、バックライト用など3個程度のマルチプレクサ(MUX)という切り替え回路の実装が必要となる。これは第1世代から変わっていない点だ。

 これによって、元々面積や熱設計枠に制限があるノートPCの、実装部品点数や、マザーボードの配線の複雑さ、品質管理の難しさ、そしてコストなどが同時に上昇してしまう。

GPU切り替え技術は第2世代になりソフトウェア切り替えとなったが、ハードウェアは同じ仕組みとなっている IGPとGPUの信号線を切り替えるため、ディスプレイインターフェイスごとに3個程度のMUXが必要 左の図では1本の線になっているデータ線も、実際にはこのような複雑な配線となる

 とはいえ、これらの問題は(コストは別として)基本的にNVIDIAやPCメーカー側の問題であり、ユーザーにとっては、再起動が不要になったことで、使いやすさは格段に増したと言える。しかし、この第2世代のユーザー体験にも改良すべき点は残されている。

 同社GeForce & ION GPUビジネスユニット担当ジェネラルマネージャのDrew Henry氏は、それを次のように説明する。

 「今、私がNVIDIA GPUを搭載したGPU切り替え対応ノートPCを買った、一般的(PCの知識があまり豊富でない)ユーザーだと仮定しよう。私は今、移動中なので電源から外している。このとき、このPCは自動的にIGPで動作する。しかし、私はそのことを承知していないので、3Dゲームを動かすとフレームレートが非常に悪く、CUDA対応のBadaboomに至ってはエラーが出て起動しないことに憤りを覚え、PCメーカーのコールセンターに電話するだろう。

 そこで、私は電源オプションを省電力モードから高性能モードに切り替えることで、GPUがオンになることを学ぶ。そうして、高性能モードに切り替え、Badaboomを起動してみると、やはりエラーで起動しない。何故か? それはソリティアを起動していたがために、切り替えが阻害されたからだ。実は第2世代でも、切り替え時に、一部のアプリケーションについては終了を要求されるのだ。

 というわけで、ソリティアを終了することで、ようやく私はGPUに切り替えることができるようになる。しかし、切り替えを行なう間、時間にして5秒程度、画面が暗転してしまうので、慣れない間はPCに問題が発生したのかと思ってしまうだろう。」

 こういった事情もあり、実は第2世代のGPU切り替え技術対応PCのユーザーにおいても、実際に切り替えを利用しているのは1%に過ぎないという。残りの99%はIGPかGPUに固定したまま使っているのだ。

NVIDIAのDrew Henry氏 dGPUがオフの状態でBadaboomを起動しようとしてもエラーが出るだけ ソリティアなどのアプリケーションが起動していると、切り替えができないというダイアログが出る

【動画】第2世代のPCでのGPU切り替えの実例。切り替え時にソリティアが起動しているため、警告のポップアップが表示される。その指示に従い、ソリティアを終了すると、切り替えられる。この際、物理的な回線切り替えが発生するので、画面が5秒程度暗転する
【動画】こちらはAMDのGPUを搭載した切り替え対応PCの例。はやり、ソリティアが起動していると切り替えられない。また、切り替え時に暗転が生ずるのもNVIDIAの場合と同じ

●GPU内のフレームバッファコピー機能を利用するOptimus

 この問題を解決しようとするのが、新たにOptimusという名称が付けられた第3世代の切り替え技術だ。

 Optimusではハードウェアの構成を根本的に変更している。Optimus対応のdGPUには、内部に「Copy Engine」という回路が内蔵されている。これは、dGPUの3Dエンジン(シェーダ)が計算し、レンダリングしたローカルフレームバッファのデータを、その都度IGPがフレームバッファとして利用するシステムメモリに転送することを請け負う。

 そしてOptimusシステムでは、dGPUからディスプレイインターフェイスへの直接出力が省略される。システムメモリに渡されたフレームデータは、GPUに代わってIGPが直接ディスプレイインターフェイスへと出力するのだ。イメージとしては、同社が過去に買収した3dfxの3Dアクセラレータ「Voodoo」シリーズと近い。

 これによって、MUXは不要となり、これに起因する、コストや配線などのハードウェアの問題が一挙に解決する。Copy Engineによって、システムメモリへフレームバッファが転送される時間は、正確な値は分からないが、通常、GPUが1フレームを描画して、次のフレームの計算が完了するまでの1/5程度で済むため、IGPを経由することによる性能への犠牲は生じないという。

 消費電力の面についても、まずIGPだけが動いているとき、dGPUへの電源供給は、それが接続されているPCI Expressのレーンを含め完全にゼロになるという。写真撮影は許可されなかったが、同社が開発者向けに用意しているキットを使ったデモでは、まずdGPUを動かしてから、IGPへ切り替え、その間にdGPUのモジュールを一度取り外し、そのまま取り付けて、再度アプリケーションからdGPUを利用すると、何事もなかったかのようにdGPUが動き出す様子が紹介された。また、dGPUが動いている間、IGPはディスプレイコントローラとしてのみ機能するので、最も低い消費電力状態に移行する。

直近および今後のNVIDIA製GPUには、Copy Engineというフレームバッファをシステムメモリに転送する専用機能が内蔵される これにより、MUXおよびそれに関わる配線などが不要となり、設計が楽になる

●dGPUとIGPの切り替えの完全な自動化が実現

 さらにOptimusではソフトウェアの面でも先進的な機能が取り入れられている。これまで、GPUの切り替えはユーザーがスイッチや設定で明示的に行なうか、あるいは電源の接続状態に応じて切り替えが行なわれていた。これがOptimusでは、完全に自動化された。

ルーティングレイヤーをオンラインで常にアップデートすることで数多くのアプリケーションに即座に対応できる

 Optimusのソフトウェアには「ルーティングレイヤー」と呼ばれるカーネルレベルのライブラリが含まれる。このソフトは、現在実行されているそのほかのアプリケーションがdGPUを必要とするかどうかを判断し、それに応じてdGPUのオン/オフを切り替える役割を持つ。

 この“必要とするかどうか”というのは、具体的にはそのアプリケーションが、「DirectX」、「DXVA」、あるいは「CUDA」のコールを行なうかどうかを検知している。つまり、この3種類のAPIを利用するアプリケーションが起動すると、dGPUが自動的にオンになり、アプリケーションを終了すると、dGPUがオフになるのだ。

 ちなみに、DXVAについてはIGPでも再生支援機能を持っている場合がある。この際は、再生するファイルのCODECがGPUでしかサポートできなければ当然GPUがオンになる。また、IGP、GPUでも同じような性能/画質で再生できると判断した場合は、消費電力の観点からIGPを利用する仕組みになっている。言い換えると、同じプレーヤーソフトを使っても、SDクラスならIGPのまま、フルHDならGPUを使う、といったことが自動的に処理される。

 この検知に際しては、Optimus専用のアプリケーションプロファイルを用意している。同社のグラフィックスドライバは、以前からSLIについてのプロファイルを持っており、特定のゲームがSLIに対応しているかどうかの判断基準に使われている。

 これと同じようにOptimusでも、NVIDIAは、DirectX、DXVA、CUDAを利用するアプリケーションのリストをプロファイルとして持っている。

 さて、世の中にはそれこそ無数のWindows対応アプリケーションがある。DirectX、DXVA、CUDAのいずれかを使うものに限定しても、膨大な量だ。また、それらは日々新しいものが作られている。

 NVIDIAでは、それらを逐一検証し、プロファイルへ追加している。そしてプロファイルがアップデートされると、それはNVIDIAのサーバーからオンラインで各ユーザーのPCに保存されたプロファイルにも即時反映されるようになっている。これは、アンチウイルスソフトのパターンファイルが日々更新されるのと同じような仕組みだ。つまり、ユーザーが意識することなく、かつドライバ自体を変更することなく、プロファイルを最新のものに保てるようになっている。

 このプロファイルおよびルーティングレイヤーはグラフィックスドライバに統合されており、プロファイルのリストはNVIDIA Control Panelから見ることができる。また、アプリケーションごとにIGPを使うかdGPUを使うかをユーザーが変更したり、まだリストに挙がっていないアプリケーションを登録することもできる。

 なお、現在はほとんどの場合、アプリケーションの起動が引き金となって、GPUをオンにしているが、アプリケーションによっては、DirectXなどのコールを行なった時点で初めてGPUをオンにすることもできる。このときGPUは数百ms程度で起動するので、体感できる遅延は発生しないという。

●今後の課題
対応システム

 対応システムだが、OSはWindows 7のみ。これはOptimusが、Windows 7における、異なるGPUでデュアルスクリーン表示させる機能を利用しているからである。Windows Vistaにはこの機能がないので、利用できない。

 対応dGPUは、現行の40nmプロセス採用のGeForce 200MとGeForce 300Mシリーズ、および次世代のGeForce MシリーズとIONとなる。組み合わせられるプラットフォーム(IGP)は、Arrandale(Core i7/i5/i3)、Montevina(Core 2 Duo + Intel GM4 Express)、Pine Trail(Atom N400)となる。

 このようにOptimusでは、ユーザーが操作することなく、PCの持つGPU性能とバッテリ性能を常に最善の形で実現できる。加えるならば、第2世代のように、Intelのグラフィックスドライバに手を加える必要がなくなったため、ユーザーが自由にアップデートできる。

 OptimusにおけるdGPUの使い方は、切り替えるというよりも、オンデマンドで必要なときにだけ使うといった形になる。その点でも、これまでの切り替え技術とは一線を画すものだ。

 しかし、課題も残されている。それはグラフィックの出力仕様がIGPに引きずられるという点だ。例えば、dGPUがDisplayPortや10bitカラー出力に対応していても、IGPが対応していない場合は、それらを利用できない。120Hz出力を使う3D VisionもIGPは対応していないのでやはりダメだ。

 この点についてはNVIDIAも承知しており、今後、そういった用途に向けて、dGPUからの直接ディスプレイ出力を持たせることも検討しているという。

(2010年 2月 9日)

[Reported by 若杉 紀彦]