AMD、NVIDIAが、ともに汎用アプリケーションをGPU側で処理させる「GPGPU」としての利用を推進しているのは周知の通りだ。AMDはRadeon HD 4800シリーズで1TFLOPSの演算性能を強くアピールし、NVIDIAのGeForce GTX 200シリーズはGPGPUにおける性能を強く意識したマイクロアーキテクチャを採用した。 この分野で一歩先に進んでいるのがNVIDIAだ。NVIDIAのGPGPUプログラミング環境である「CUDA」は、すでにHPCの分野では広く知られ、実際に使用されている。そして、5月1日にリリースされたCUDA 2.0ではWindows Vistaへの対応や、Adobe Photoshopプラグインのサンプルファイルを同梱。コンシューマユースへの適用を強く意識したアップデートが行なわれた。 その応用例の1つとして、NVIDIAでは動画エンコードやPhysXエンジンをGeForce上で動作させるサンプルを用意している。ここでは、これらGPUを利用したアプリケーションをテストしてみたい。 ●CPUの2倍以上の速度でH.264エンコードを実行 まずは、GPGPUを利用した動画エンコードのテストを実施するが、その前に要件をまとめておきたい。といっても、必要なのは対応ビデオカードと対応ドライバのみだ。 この対応製品に関しては現在のところドライバに依存すると考えて良い。ドライバはGeForce Release 177番台が必要となるが、WHQL認定としてはGeForce GTX 280/260に対応したドライバしかリリースされていない。ただ、ベータ版としては、GeForce Release Version 177.39がGeForce 9800 GTXおよび9800 GTX+をサポートしている。現時点では、この4製品が対応ビデオカードということになる。 そこで、ここでは、マイクロアーキテクチャの異なるGeForce GTX 280とGeForce 9800 GTX+のリファレンスカードを各1枚用意し、それぞれのビデオカードを用いてアプリケーションを試していくことにしたい。そのほかの環境は表1の通りである。
【表1】テスト環境
使用するアプリケーションはNVIDIAから配布されたElemental Technologiesの「BadaBOOM Media Converter」と呼ばれるものである(画面1、2)。もともと「RapiHD」という名称で開発されていたもので、日本でも記者説明会や秋葉原のイベントなどで披露されたことがあった。
Elemental TechnologyのWebサイトを見ると、RapiHDという名称自体は残っており、リリースが予定されているAdobe Premiere用プラグインにはロゴが記されている(画面3、4)。RapiHDはエンコードエンジンの名称、BadaBOOM Media Converterはコンシューマ向けフロントエンドアプリケーションの名称、と捉えるのが良さそうである。
このアプリケーションはiPhoneやiPodといったポータブルビデオプレイヤー向けのH.264動画を作成するためのアプリケーションである。評価版ということで、エンコード設定は極めて簡略化されており、上部に設けられたスライダーでクオリティを決め、対象デバイスを指定するのみである。対象デバイスの指定は出力解像度を決めるものと考えていい。このほか、入力ソースも制限が多く、ビデオはMPEG-2のみ。オーディオはAC3またはMP2に限定されている。また、とくに制限事項とはされていないのだが、長時間の映像ファイルをエンコードすると、約2分のところで終了してしまう。 そこで、今回のテストには、3,400フレーム、時間にして約1分53秒のMPEG-2ファイルを用意した。このファイルは、映像が720×480ドット、スクリーンアスペクト比4:3で、映像ビットレートは8,000Kbps。音声はMP2、224Kbps、ジョイントステレオとなっている。元々のソースはDVで撮影したものだが、地上アナログ放送を録画したものをポータブルデバイスへ転送する、という状況をイメージしている。 このファイルをApple TV用ファイルへエンコード。スライダーによるクオリティ設定は、一番左(もっともクオリティが低い:Low)、中央(中間のクオリティ:Normal)、一番右(もっともクオリティが高い:High)の3種類でテストした。 そして、作成されたファイルを黒羽製作所氏製作の真空波動研などを使って調査。同等の設定を施したファイルを、TMPGEnc 4.0 XPressのH.264エンコーダ(MainConcept製エンジン)を使ってCPUによるエンコードを実施した。 そのエンコードに要した時間から、1秒当たりの処理フレーム数を割り出してグラフ化したものがグラフ1である。大雑把にいえば、GeForce GTX 280やGeForce 9800 GTX+によるエンコードは、Core 2 Extreme QX9650の2倍強といったところで、高速にエンコード処理できることが分かる。 少々気になるのはGeForce GTX 280とGeForce 9800 GTX+の差が意外に小さいことである。グラフではフレームレートに換算しているので今回のような短時間のソースでは差が開いて見えるが、Low設定およびNormal設定において、両者の作業時間の差は1秒しかない。もちろん、長時間ソースになれば開いていく可能性が高いわけだが、単純にSP数の差を考えると、差が小さい印象が拭えない。 この差の小ささについて、GPUに対する最適化が不十分、HDDなどがボトルネックになっている、などの理由も考えられる。後者についてはRAMディスクを作って作業することを考えたものの、BadaBOOM Media Converterの出力先フォルダが固定されており変更することができなかった。元ファイルをRAMディスクに置いて読み込むことはできたが、エンコード所要時間の差はまったく出なかった。こうしたこともあって、この数値はあくまで現時点における数値として捉えていただきたい。BadaBOOM Media Converterがユーザーに提供される際には、また違った傾向が出る可能性もある。
そのほか、この結果で気に留めておきたいのは、動画エンコードをGPUによって作業しているということは、その間、CPUをほかの用途に利用することができる点だ。例えば、動画エンコード中にMP3再生をする場合、MP3再生がCPUリソースの一部を使ってしまうため、動画エンコード完了までの所要時間は延びてしまう。しかし、GPUによるエンコードならば、こうした影響は最小限に抑えられるわけだ。 ちなみに、本来は画面描画を行なっていなければならないGPUの側はどうなっているかというと、グラフィックを描画するモードと、GPGPUとして利用するモードとをコンテキストスイッチして使用している。例えば240個のSPのうち40個をグラフィック描画、200個を動画エンコードに割り当てる、といったことは行なえないため、内部的には確実にレイテンシが発生しているはずだ。 ただ、スイッチングが行なわれているということを体感することはできなかったし、少なくもこのような動画エンコード用途では描画パフォーマンスが求められない。つまり、本来の仕事に影響が出ない程度に作業して、この性能を実現しているのである。 ところで、いくら動画エンコード速度が高速であっても、画質が著しく劣るようでは意味がない。念のため、画質の比較も行なっておきたい。画面5は、前述のテストにおいて作成されたファイルを真空波動研Liteで分析させたものである。BadaBOOM Media ConverterとTMPGEnc 4.0 XPressでフレームレートの指定が異なるため、出来上がりファイルのフレーム数も異なってしまったりするが、ほぼ同等程度の画質といっていいだろう。また、画質比較においては、NVIDIAから提供されたMPEG-2/720pソースをエンコードした結果も参考までに紹介しておく。そちらの出力ファイルの詳細は画面6の通りだ。
ちなみに、ベータ版なので致し方ないと思うしかないのであろうが、エンコードされたファイルには少々問題がある。Apple TV用ファイルを作成した場合、ソース解像度に関わらず、640×360ドットの動画ファイルが作成される。画面アスペクト比はソースファイルから引き継ぐようなのだが、QuickTimeでこのファイルを視聴した場合、この指定された画面アスペクト比がなぜか反映されない。一方で、Windows Media Player 11やTMPGEnc 4.0 XPressでファイルを読み込んだ場合などは正常に表示される。 また、BadaBOOM Media Converter側で下部の数ドットを勝手にトリミングしてしまうのも問題だ。画面7~10は正常な画面アスペクト比で表示したものをキャプチャしたものだが、トリミングした映像を正常な画面アスペクト比で表示することになるため、上下に伸張してしまう。全体に画質の印象が著しく劣る印象は受けないものの、このトリミング+伸張表示の状態は画質評価以前の問題となってしまう。 現時点では動画エンコーダとして本格的に利用できるとは言いがたいものの、速度面では文句なしに高速であるだけに期待するユーザーも多いと思われる。この夏にはユーザーへの提供を開始する予定とされているので、よりブラッシュアップしたバージョンを期待して待ちたい。
●物理演算をGPUで処理する「GeForce PhysX」 NVIDIAでは、もう1つ、コンシューマに向けたGPGPUの使い方として、PhysXエンジンをGeForce上で動作させる「GeForce PhysX」の提供を開始している。PhysXはもともとAGEIA Technologyが開発した物理演算エンジンで、本コラムで過去にレビューしたことがある。そのAGEIAを、2008年に入ってNVIDIAが買収。CUDA 2.0への移植が進められた。 余談ながら、AGEIA時代は「フィジックス」と発音されることが多かったPhysXだが、最近NVIDIAのイベントなどでは「フィズエックス」という発音が多用されている。一般名詞であるPhysicsと、固有のブランドであるPhysXの徹底的な差別化を図っているのかも知れない。 さて、PhysXは主にゲームにおける表現を豊かにするものであったことを考えれば、先の動画エンコードよりもNVIDIAがこれまで取り組んできた3Dゲームグラフィックスの分野に近いGPGPUの利用法とはいえるだろう。 このGeForce上でPhysXエンジンを動作させる方法だが、先に紹介したGeForce Release 177番台ドライバと、GeForce PhysXに対応したドライバ(現在の最新版はVersion:8.06.12)をインストールするだけだ。GeForce Release 177番台が必要なので、現時点で利用可能なGPUは先述の通り、GeForce GTX 280/260およびGeForce 9800 GTX/GTX+となる。 ドライバをインストールすると、コントロールパネルにPhysX設定が用意されるのも同様。設定画面は画面11~13に示したが、画面構成自体はAGEIA時代と大きな違いがない。ただし、GeForce PhysXとPhysX PPUのどちらを使用するかの選択メニューが用意されていたり、用意されているデモの内容が異なるなどの変更は行なわれている(画面14~18)。 このGeForce PhysXに対応したアプリケーションは現時点で2つ。1つは3DMark Vantage、もう1つはUnreal Tournament 3である。
3DMark Vantageは、CPUテスト2が「Physics Test」と名付けられており、飛行機を衝突させたときの表現を物理演算によって処理するテストとなっている。この演算にPhysXエンジンを使っており、ハードウェアアクセラレートも可能なのである。PhysXハードウェアは自動認識されるが、Advanced Edition以上ならハードウェアアクセラレーションを無効にして実行することもできる(画面19)。 注意したいのは、このテストにおいてはCPUコア数やPhysXハードウェアの有無によって重み付けが成される点である。このテストは飛行機がゲートをくぐるデモになっており、ゲート当たり数台の飛行機が宙を舞う。 このゲートの数が、PhysXハードウェアが存在しない場合は「CPUコアと同じゲート数」となり、例えばクアッドコアなら4個、デュアルコアなら2個のゲートが用意される(画面20)。 PhysXハードウェアが存在する場合は「CPUコア数-1+4個」という数になり、クアッドコア+PhysXハードウェアなら7個、デュアルコア+PhysXハードウェアなら5個となる(画面21)。
このことを確認したうえで実施したテストの結果がグラフ2である。見ての通り、Graphics ScoreはGPUが同じであればほぼ横ばいであるが、CPU ScoreはGeForce PhysXを有効にすることで3倍に迫る値になる。そのため、Overall Scoreも総じてPhysX有効時のスコアが良好になる。ただ、3DMark VantageのOverall Scoreは解像度が高くなるほどGraphics Scoreの重みが増すように調整されているので、Extremeプリセットでの差は非常に小さなものになっている。 もう1つ、各環境における、Performanceプリセットの全結果を示したのが表2である。これを見ても、同じGPUの結果で明確な違いがあるのはPhysics Testのみであることが分かると思う。
【表2】3DMark Vantage Build 1.0.1の詳細結果
もっとも、3DMark Vantageに関してはベンチマークソフトであり、Physics Testにおいても演算処理能力しか試されない。その点、もう1つの対応アプリケーションであるUnreal Tounament 3は実際のゲームであるだけに意味が大きい。 Unreal Tournament 3でGeForce PhysXを利用するための条件は先と同じく、GeForce Release 177番台ドライバとPhysXドライバをインストールすることである。さらに、NVIDIAでは、Unreal Tournament 3でPhysX対応マップを追加するModファイルを提供しているので、これをインストールする。 アプリケーションの設定画面に「Hardware Physics」という項が存在するので、これを有効にすれば準備は完了だ(画面22)。Modファイルに含まれるマップには、末尾に「PhysX」と付けられているので、これを選択して実行すれば、PhysXエンジンによる物理演算効果を堪能できるマップでゲームを楽しむことができる(画面23、24)。 パフォーマンスに関しては、適切な比較対象がない(残念ながらPhysX PPUも手元になかった)ため、数値の紹介は行なわない。ここでは、Modファイルに含まれる3つのマップを、1,280×720ドット/60fpsでキャプチャした動画ファイルを紹介しておきたい。公開するファイルは容量の都合で、640×360ドットに変換しているが、物理演算による表現を含んだゲーム画面が、非常に軽快に動作していることを体感していただけると思う。 ●とにかく今はアプリケーションが増えることを望む 以上の通りGPGPUを利用したアプリケーションをいくつか試してきた。いずれもパフォーマンスや表現力に関して非常に意味のあるものといえるだろう。もちろん、GPUで処理することに意味があるアプリケーションのみが提案されているわけで、ここで効果を体感できるのは当たり前のことなのだが、こうしたCPUとGPUの役割分担が確立されていけば、ユーザーにとっては手持ちのPC環境において最大効果を得られることにつながっていくと思う。 ただ、前半に紹介した動画エンコードにしても、ポータブルデバイス向けのH.264エンコーダだけではあまりに寂しい。Adobe Premiere用プラグインはもちろん、そのほかのコーデックに対応した製品などに期待がかかる。例えば、TMPGEnc並みの機能を持ったエンコーダが登場すれば動画エンコードを頻繁に行なうユーザーへの注目が高まるだろうし、FFmpegのような汎用性の高いアプリケーションが登場すれば、極端な例では動画共有サイト用のサーバのトレンドを一新させるインパクトを持つのではないだろうか。 また、PhysXに関しても、AGEIAのPhysXエンジンに対応したアプリケーションはもっとあるわけで、こうしたアプリケーションへの対応を網羅していくことが求められる。 さらにいえば、動画/ゲーム以外への適用も考えられる。例えばCUDA 2.0にはAdobe Photoshop用プラグインのサンプルが含まれるわけだが、高画素デジカメで撮影したファイルの処理もかなりストレスのたまる作業であり、フォトレタッチやRaw現像アプリケーションへの広範な適用にも期待がかかる。この用途を求めるユーザーは動画エンコードやゲームよりも遙かに多そうなので、GPGPUの周知にも大きな意味をもちそうだ。 HPC分野など、効果があるジャンルにおけるパフォーマンスに関しては、すでに定評あるだけに、今はともかくアプリケーション数を増やしてほしい。NVIDIAがこの夏に、同社初の開発者向け会議である「NVISION08」を開催するのも、こうしたことが理由の1つだろう。 少なくともGeForce 8シリーズの登場時期には漠然としたニュアンスでしかなかったが、ようやくコンシューマユーザーにとってのGPGPUも具体的な姿が見えてきた。「今後に期待したい」という言葉も、これまで以上に現実味を持って発することができる。 □関連記事 (2008年7月23日) [Text by 多和田新也]
【PC Watchホームページ】
|