後藤弘茂のWeekly海外ニュース

NVIDIA Keplerアーキテクチャのカギは仮想化



●NVIDIAによるGPU仮想化構想

 NVIDIAは、Kepler(ケプラ)アーキテクチャで、GPU上のバーチャルマシンをハードウェアサポートすることで、GPUをデータセンターに浸透させようとしている。グラフィックス処理をサーバーサイドで実行し、クライアントにH.264で転送するシステムだ。クラウドによってサーバー側のCPUリソースを自由に利用できるのと同じように、今後はサーバー側のGPUリソースもクライアントが利用できるようにしようとしている。

 この構想のアプリケーションの第1弾が、クラウドゲーミングで、マルチゲーマーをバーチャルマシン上でサポートすることで、より経済的なクラウドゲーミングプラットフォーム「GeForce GRID」を可能にする。クラウドによって、高度な3Dゲームはローカルマシン側で実行するものという常識を覆そうとしている。

 そして、データセンターへのより汎用的な導入のために、仮想化の利用を前提としたサーバー向けGPUプラットフォーム「NVIDIA VGX」を用意する。NVIDIAの大きな狙いは、最終的にサーバールームにGPUが普通に入るようにすることだと見られる。GPUをクライアントから利用することを一般的にして、GPUサーバーを普及させようというのがNVIDIAの戦略だと見られる。

 これからは、NVIDIAのこの構想が十分に実用的なのかどうかを、データセンター側が評価するフェイズとなるだろう。そこでカギとなるのは、仮想化でのバーチャルマシンの切り替えのオーバーヘッドだ。言い換えれば、ユーザーにとってのレイテンシだ。NVIDIAはKepler GPUは最大で256のバーチャルマシンをサポートできるとしているが、これはスペック上の限界であり、実用上の限界はオーバーヘッドを加味する必要があるだろう。

KeplerのGPU仮想化構想

●なぜGPUの仮想化が難しかったのか

 NVIDIAは、クラウドゲーミングでも、ゲームにとって重要なレイテンシを十分に短縮できると説明した。下のスライドがそれだ。ゲームコンソールより進んだGPUによってゲームパイプライン自体の実行が高速化されるため、ネットワークディレイを加味してもゲームプレイを損なわないレベルのレイテンシに押さえ込めることを示している。サーバーで生成した画像は、H.264でエンコードして転送し、クライアントでデコードする。H.264は、サーバーGPUとクライアントGPUでハードウェアアクセラレートできるため、このディレイも短縮される。それによって、アクション系ゲームの命である短レイテンシを実現できるとしている。

GeForce GRIDのレイテンシ

 しかし、この図は、ゲームパイプラインに限ったもので、少しトリッキーだ。というのは、バーチャルマシンの切り替えのオーバーヘッドが示されていないからだ。NVIDIAのクラウドゲーミング戦略の根幹が、GPUの仮想化による、GPU上での複数ゲーマーのサポートにあるなら、バーチャルマシンを切り替える際のレイテンシにも言及しなければならないが、図にはそれが示されていない。そして、今回、NVIDIAはこの肝心な部分について、詳しい説明を行なわなかった。

 なぜバーチャルマシンの切り替えオーバーヘッドがそれほど問題なのかというと、GPUではそもそもタスクをスイッチすること自体が非常に重いからだ。それは、保持しなければならないプロセッサのアーキテクチャルステイトの量が膨大であるためだ。NVIDIAも、この問題を重要だとしており、今回のGTCでも、Jen-Hsun Huang氏がバーチャルマシン切り替えの難しさを、次のように説明していた。

 「(GPUの仮想化には)5年以上も取り組んできた。しかし、これは難しかった。GPUパイプラインではレイテンシを隠蔽するために(超並列化しているため)、膨大なステイトを内部に抱えているからだ。ステイトは数MBにも達する。(CPUなら各CPUコアで)2スレッドがそれぞれ8レジスタを持つのに対して、(GPU全体では)数千ものスレッドがそれぞれKB単位のステイトを持つ。膨大なステイトであることが計算できるだろう。そして、GPUを共有する各バーチャルユーザーのために、その全て(のステイト)をトラックしてタスクを実行させなければならない」。

 こうしたアーキテクチャ上の背景があるため、GPUでの仮想化のサポートには、何らかのテクニックが必要になる。CPUでの仮想化よりもずっとハードルが高い。この件は、以前からGPUの最大の課題の1つで、開発の焦点の部分でもあった。そして、GTCでは、クラウドゲーミングのデモを実際に行なうことで、NVIDIAがこの問題を解決できたことを示した。

●2種類のGPU仮想化

 少し紛らわしいのは、PC業界では、6年ほど前に「GPU仮想化」のロードマップを示していることだ。Windows Vistaでの「Windows Display Driver Model」導入からGPU仮想化がスタートした。この時は、業界全体でGPUのマルチタスク化を、GPU仮想化という名称で呼んでいた。その時点で、CPUでは、バーチャルマシンのハードウェア支援の意味の用語として仮想化が使われていたため、この名称はややまぎらわしかった。NVIDIAもその当時、名称が混乱しやすいことを認め、「WDDMで目指しているのは、正確にはGPUのマルチタスク化だ」と説明していた。下は2006年当時のWDDMロードマップで、現在は変更されて、WDDM v1.2でプリエンプティブマルチタスキングとなっている。

WDDMのロードマップ

 今回NVIDIAが示したのは、前回のGPU仮想化とはレイヤーが1段異なり、OSレベルのデバイスの仮想化ではなく、ハイパーバイザーレベルでのバーチャルマシンのハードウェア支援となっている。OS上でGPUがバーチャル化され複数のアプリケーションの共有リソースになるのではなく、ハイパーバイザーでGPUがバーチャル化され複数バーチャルマシンの共有リソースとなる。区別するために、NVIDIAは今回のバーチャルマシンサポートは、バーチャライズドGPUと呼んでいる。

 もっとも、今回のバーチャライズドGPUで、GPU側に実装しなければならない機能は、マルチタスク化の機能をベースに、プラスしたものになる。2つ層の仮想化で、GPUが抱える問題はある程度は共通している。

 ちなみに、WDDMで制御されるGPUのマルチタスク化では、段階的にGPU上でのタスクを細い粒度でスイッチできるようにして行くロードマップが示された。この時も最大の課題は、どうやってプロセッサステイトをスイッチするかだと説明された。もっとも原始的な方法としては、必ずバッチを全て実行し終えてからスイッチする方法がある。しかし、完全なプリエンプティブマルチタスキングをサポートしようとすると、プログラムの実行途中でスイッチする必要があり、ステイトの保持が問題となる。

●GPUのステイトをどう切り替えるかが問題

 解決策としては、何らかの方法でステイトのスイッチを高速にするか、複数のステイトをGPU内で保持できるようにするか、その2つの組み合わせか、という選択になる。5年前、AMDはこの問題について、次のように説明していた。「本当に、複数のコンテクストをGPU上で並列にプロセッシングするのか、それともGPU上での時分割をより高速にするのか、そこが課題となる。より難しいのは、複数のコンテクストを、機能の上で分割されたGPU上で効率的に走らせることだ」(当時AMDに在籍していたDavid(Dave) E. Orton(デイブ・オートン)氏(元Executive Vice President, Visual and Media Businesses, AMD))。

 GPUベンダーは、Windows 8のWDDM v1.2ために小粒度でのプリエンプティブマルチタスキングをサポートする必要があり、現在はこの部分に注力している。Windows 8のために、機能的には大きく改革されているはずで、バーチャルマシンのサポートも、その延長で可能になったと推測される。AMDが指摘しているように、CPUのように時分割でスイッチするか、あるいはマルチコアCPUのように分割されたGPU上で異なるプロセスに属するステイトを混在させるか、その組み合わせ、という選択となるだろう。

 現在のGPUは、マルチコアに近いアーキテクチャへと向かっているため、GPUを領域分割して異なるタスク/バーチャルマシンをサポートすることもできる。例えば、NVIDIA GPUなら、GPC (Graphics Processing Cluster)がグラフィックス固定機能パイプイランも含めたクラスタとなっている。Keplerアーキテクチャでは、GK104系が2個のSMXで1GPCを、GK110系では、おそらく3個のSMXで1GPCを構成していると見られ、グラフィックス処理もGPC単位で分割されている。これを、マルチタスク/バーチャルマシンのサポートに利用することは可能だと推測される。

 ただし、NVIDIAがデータセンター用にバーチャライズドGPUを利用するためのプラットフォームとして出したNVIDIA VGXのGPUボードは、最小構成の1SMXのGPUになっている。1SMXで1GPCのGPUチップを物理的に4個搭載したボードであり、GPUチップに複数個のSMXやGPCを搭載していない。上の推測とは逆に、1個のGPUを時分割で使うアプローチだ。

 このことから、汎用的なバーチャルマシンの利用のサポートに最適なのは、物理的なGPUチップ個数が多く、各GPUチップ内部のステイトが少ないボードであることが推測できる。構成が大きなGPUでは、バーチャルマシンの切り替えに、無視できないオーバーヘッドがあることも暗示している。

NVIDIA VGXのボード

 このあたりはユーセージにも左右されるため、まだ明瞭なことはわからない。ちなみに、クラウドゲーミング用のボードは、データセンター用の汎用のVGXボードと異なり、複数SMX/GPCのチップをデュアルで搭載している。これは、ゲームではスイッチングの粒度がより大きいことを前提としているからかもしれない。

●NVIDIAの特許からわかる15年越しの取り組み

 NVIDIAは、バーチャルマシンのサポートについての説明で、NVIDIAがいくつかの特許も保持していることを示した。Jen-Hsun Huang氏のキーノートスピーチで映し出された下のスライドの図は、NVIDIAが1997~1998年頃に申請した一連の特許(US5638535, US5696990, US5740406, US5805930, US5924126, US6081854)のものだ。これらの特許は、GPUのようなプロセッサでマルチアプリケーションを走らせる場合の、I/Oやメモリ回りの設計の拡張に関するものだ。図中では、31の「First-In First-Out (FIFO)」や36の「Physical Address Table」などが、多重化されていることがわかる。

NVIDIAのGPU仮想化技術特許

 特許の申請時期からわかるように、NVIDIAは15年前から、こうした問題に取り組んでいた。そして、バーチャライズドGPUのプレゼンテーションで、このマルチタスクの特許を示したことでわかる通り、この2つのレイヤーの仮想化では、GPUの拡張は共通している部分が多い。また、NVIDIAはほかにもさまざまなマルチタスク/マルチユーザー/仮想化に関連する特許を取得または申請している。メモリのバーチャル化に関するものも多い。GPUでマルチユーザーをサポートするための専用コントロールユニットについての特許もある。

 こうして概観すると、NVIDIAが、長年取り組んできたGPUでのタスク切り替えの拡張の実現とともに、バーチャルマシンのサポートへと進み、それをテコにデータセンターへの浸透を狙おうとしていることが見えてくる。この構想では、サーバー側にGPUを置くことで、GPUの並列コンピューティングリソースをクライアントから自由に利用できるようにする。エンドユーザーは、GPUの演算パワーを簡便に使うことができるようになる。

 NVIDIAのBill Dally氏(Chief Scientist)は次のようにその利点を説明した。

 「クラウド化の利点で、利便性の他の、もう1つの大きな利点は電力だ。モバイルデバイスでは、数W(に制限されたアプリケーションプロセッサの電力)に制限されている。しかし、クラウドでは、2Wのモバイルデバイスでも数百Wあるいは数千Wのゲーム体験ができるようになる」。

 もちろん、このストーリーでは、通信帯域が消費する電力も加味する必要がある。しかし、一定の通信電力の枠で、スケーラブルにサーバー側のGPUコンピューティングパフォーマンスを使うことができることは確かだ。

GK110のブロックダイヤグラム
PDF版はこちら