― 連載 ―
NVIDIA SLIにまつわるナゾを一気に解決

 NVIDIA SLI(Scalable Link Interface)が紹介されてほぼ1年が経過した。実際の導入実績が日本でどれくらいあるのかは分からないが,少なくともPCゲーマーから一目置かれる存在になってきたのは確かだ。
 さて,6月にサンフランシスコで行われたGeForce 7800 GTX先行発表会では,登場後1年経ったNVIDIA SLI技術に関して,プレスやユーザーからよく寄せられる質問・疑問についての回答を行う「特別講義」も行われた。その内容を中心に,NVIDIA SLIにまつわるさまざまなナゾを解明していきたいと思う。

本題へ入る前に基本事項の復習

 まずはNVIDIA SLI関連の基本事項をおさらいしておこう。
 NVIDIA SLIとは,同一モデルのGeForce 6600(以上)のグラフィックスカードを2枚同時に利用することで,3D描画性能を理論値で2倍に高めるソリューションである。2個のグラフィックスチップを同時に動作させて描画の並列化を実現し,並列化がうまく働けば働くほど性能は向上するという仕組みだ。
 NVIDIA SLIでは,2個のグラフィックスチップの活用方式(≒3D描画方法)として,「Alternate Frame Rendering」(以下AFR),「Split-Frame Rendering」(以下SFR)の2通りが用意されている。
 AFRは,奇数フレームを一つめのグラフィックスチップ,偶数フレームを二つめのグラフィックスチップで……という具合に,2個のグラフィックスチップで交互に1画面ずつ描画を行う方式だ。各グラフィックスチップの描画がオーバーラップできた分だけ高速化できる,というわけ。
 一方SFRでは,1枚のフレームを2基のGPUで協調して描画する。その仕組み上,頂点パイプライン(Vertex Pipeline)は,2個のグラフィックスチップがまったく同じものを同じタイミングで処理することになるため,ピクセルパイプライン(Pixel Pipeline)の高速化しか見込めず,最大パフォーマンスはAFRに及ばない。しかし,SFRはAFRと比べて,より確実性の高いパフォーマンスアップが見込めるというメリットがある。
 各描画方法の優位点と弱点の詳細については,本連載でATI Technologies(以下ATI)の2グラフィックスチップソリューション「CrossFire」を採り上げた「こちら」を援用してかまわない。なお,CrossFireでは,NVIDIA SLIでいうSFRのことを「Scissorモード」と呼んでいるので,参照するときは読み替えてほしい。

AFR SFR
AFR(左)とSFR(右)の違い。AFRでは各フレームを2個のグラフィックスチップが交互にレンダリングし,SFRでは1フレームを分割して,2個のグラフィックスチップで描画する

SLIの疑問(1)
SLIってプロファイルのないソフトでは動かないの?

 GeForceシリーズ用グラフィックスドライバ「ForceWare」のプロパティウインドウにある「パフォーマンスと品質の設定」には,「アプリケーション」と「アクティブプロフィール」という設定項目がある。
 ForceWareの日本語訳には昔から各所におかしいところがあるが,この「プロフィール」もその一つ。これは設定状態をファイル化したプロファイルを意味している。本稿では以後,ForceWare設定ウインドウ内記述の引用時のみプロフィールとし,設定状態をファイル化したものはプロファイルと呼ぶが,本質的にはまったく同義なので,あらかじめご了承願いたい。

アプリケーションとアクティブプロフィールプルダウン
「パフォーマンスと品質の設定」の「アプリケーション」と「アクティブプロフィール」のプルダウンには,60以上のゲームタイトルとベンチマークアプリケーションの名前が列記されている。ここに名前があるタイトルやアプリケーションなら,最適なパフォーマンスと画質設定が得られるよう,NVIDIAによって用意されたプロファイルを利用できるというわけである

 「アプリケーション」のプルダウンから適当なタイトルを選択すると,「アクティブプロフィール」のプルダウンでは対応するプロファイルが自動的に選ばれる。なぜこのような二重構造なのかというと,ウインドウの中央部にある「ドライバのグローバル設定」の内容を,プロファイルとしてアプリケーションごとに複数作成できるようになっているからだ。
 例えば「アプリケーション」のプルダウンから「3DMark05」を選択すると,「アクティブプロフィール」のプルダウンも自動的に「3DMark05」に変わる。このとき,「ドライバのグローバル設定」を変更して,「3DMark05 my setting」といったような名前を付けて「プロフィールの追加」から保存すれば,「アクティブプロフィール」として,デフォルトの「3Dmark05」と,ユーザーメイドの「3DMark05 my setting」を選べるようになる。


 さらに,NVIDIA SLIを有効にしたシステムでは,このウインドウから「マルチGPUレンダリングモード」の選択が可能だ。これを利用すれば,NVIDIA SLI動作モードをアプリケーションごと(正確にはプロファイルごと)に設定できる。言うまでもないことだが,シングルグラフィックスチップ時と同様,NVIDIAの品質管理チームが実際にそのタイトルでテストを行って,最適な動作モードになるよう設定している。NVIDIA SLI時にはパフォーマンスが低下することが明らかなタイトルの場合は,自動的にシングルグラフィックスチップ動作するようになっているのだ。
 とにかく,このプルダウンに名前のあるソフトは「最適な動作モードが判明している」という解釈でいいだろう。


 では,ここに名前のないタイトルは,NVIDIA SLI動作できないのか。「こちら」の記事で,"ATI Technologies版SLI"であるCrossFireについてATIが「CrossFireにはCatalyst A.I.という仕組みがあり,最適な動作モードが自動選択される。一方,NVIDIA SLIにはない」といった趣旨の発言をしたことを紹介したので,覚えている人もいるだろう。
 NVIDIAはこう反論する。
 「CrossFireにも実際にはプロファイルが存在する。彼らはこれを隠蔽して,『適切なプロファイルを選ぶ仕組み』をCatalyst A.Iと呼んでいるに過ぎない。それなら,NVIDIA SLIにも動作モードの自動選択設定があるから,あれを"ForceWare A.I."と呼んでもらってもいい
 デュアルグラフィックスチップ環境において最大性能を引き出すにはAFRが最適ということは,NVDIAもATIも認めている。2個のグラフィックスチップで頂点,ピクセルの両パイプラインを並列実行できるからだ。AFRを有効にして,なおかつ最大パフォーマンスを得るようにするためには,そのアプリケーション固有の設定――プロファイルが必要不可欠であり,AFRを有効にするためのゲームタイトルやベンチマークアプリケーション別プロファイルがCatalyst A.I.には内蔵されている,というのがNVIDIAの言い分だ。
 ちなみに,「アプリケーション」のプルダウンから「グローバルドライバ設定の使用」,「アクティブプロフィール」のプルダウンから「ドライバのグローバル設定」が選択され,さらに「ドライバのグローバル設定」の「マルチGPUレンダリングモード」が「SLIマルチGPUレンダリング」が選ばれていれば,自動的に適切な動作モードが採択されるとのこと。また,ForceWare 77.72においては,プロファイルのうち75%が,NVIDIA SLI動作時にAFRを選択するような設定になっているという。

ForceWareのSLI隠し機能を有効化しよう

 もちろん,「自動選択は信用ならない」という読者もいるだろう。最新のForceWare 77.72からは,隠し機能扱いながら,NVIDIA SLI動作時のAFR/SFR手動設定機能が搭載された。これを活用すれば,ユーザーは明示的に動作モードを指定できる。隠し機能の呼び出し方法は以下のとおりだ。  なお,この方法ではWindowsのレジストリを直接いじることになるので,操作を誤るとWindowsに致命的なダメージを与える危険があるので注意してほしい。何らかのトラブルが発生しても,筆者および4Gamer編集部は責任を負わないことをあらかじめお断りしておく。

(1)[スタート]メニューから「ファイル名を指定して実行」を選択し,「regedit」と入力してエンターキーを押す。これでレジストリエディタが起動する

(2)レジストリエディタから「HKEY_LOCAL_MACHINE」−「SOFTWARE」−「NVIDIA Corporation」−「Global」−「NVTweak」を開き,マウスカーソルを「NVTweak」に合わせる

(3)この状態から右クリックしてコンテキストメニューを出し,「新規」−「DWORD値」を選択。するとウインドウ右側に「新しい値 #1」が作られるので,これに「CoolBits」と入力してエンターキーを押す

(4)CoolBitsにマウスカーソルを合わせて右クリックからコンテキストメニューを出し,「修正」を選択。「16進」のラジオボタンをオンにして「FF」と入力し,「OK」を押す

(5)この設定は,ForceWareのバージョンアップや再インストールを行うと失われてしまう。ドライバのアップデートごとに繰り返すのは面倒なので,バックアップを取っておこう。CoolBitsを選択した状態で「ファイル」メニューの「エクスポート」を選択し,適当なファイル名(「CoolBits」とかでいいだろう)を付けて,分かりやすい場所に保存しておけばいい。以後は保存したファイルをダブルクリックするとレジストリにCoolBitsが追加されるようになる

もっと知りたい人向けの追加情報

 ここで,もっと知りたい人向けに補足しておこう。一般ユーザーは読み飛ばしてもらってかまわない。
 NVIDIA SLI動作の隠し機能有効化は,CoolBitsキーの第4ビット(値にして8)に対応している。上でFFとしたのは便宜上,CoolBitsの下位8ビットをすべて1とするためだ。  ちなみに,この設定を行うと,グラフィックスチップのオーバークロック用プロパティが出現するのは比較的よく知られた話だが,今回のテーマとは違うので解説は行わない。オーバークロック機能は自己責任でいじってもらいたい。

 CoolBitsの設定を終えたら,ForceWareのプロパティウインドウを開いてみよう。
 「パフォーマンスと品質の設定」を選択し,「ドライバのグローバル設定」をデフォルトの「基本設定」から「詳細設定」へ変更する。そして「SLIレンダリングモード」のプルダウンをクリックしてみよう。「フレームのレンダリングを交互にする」「分割フレームのレンダリング」「フレームのレンダリングを交互にする 2」という項目が増えているはずだ。

CoolBitsの値をFFと設定した後の「パフォーマンスと品質の設定」。「マルチGPUレンダリングモード」の項目に隠し項目が現れる。左の選択項目サブウインドウ内にオーバークロック用メニュー「クロック周波数の設定」が出現している点にも注目

 項目名が日本語訳されているのて一瞬戸惑う人もいるかもしれないが,「フレームのレンダリングを交互にする」はAFR,「分割フレームのレンダリング」はSFRのことを指している。こうなると「フレームのレンダリングを交互にする 2」は,「AFR2」と解釈するのが正しくなり,NVIDIA SLIではAFRに2バリエーションあることになるわけだが,現在のところ,AFRとAFR2の違いは明らかになっていない。

NVIDIA SLIのプロファイルを編集しよう

 動作モードだけでなくプロファイルを直接編集する方法もある。
 NVIDIA SLIのプロファイルは「C:\Windows\System32」フォルダ内の「NvApps.xml」にまとめらているのだ。つまり,これをテキストエディタで編集すれば,プロファイルを改変できるというわけ。
 書式は以下に挙げるものが1セットである。

 「動作モードの指定」とした部分(ここでは「2」)がレンダリングモードを指定する部分。「実行ファイル名」で記載されたアプリケーションごとに特別な動作モードが定義づけられているケースでは,異なる値になっている場合もあるが,基本的には,この「Value=" "」部に入力した数値が,以下のような関係で動作モードに対応している。

1=AFR
2=SFR
4=シングルグラフィックスチップ動作(明示的にNVIDIA SLIを無効化する)

 変更するとNVIDIA SLI動作に保証がなくなるのはいうまでもないが,設定を変更して,パフォーマンスの違いをチェックし,なぜNVIDIAがその設定にしたのかを検討してみるのは面白いかもしれない。

NVIDIA SLIの各動作モードにパフォーマンスの違いはあるのか

 というわけで,各動作モードのパフォーマンス差を確認してみよう。
 NVIDIAのGeForce 7800 GTXリファレンスカードを差したのテスト環境で,マルチGPUレンダリングモードを「自動選択」「フレームのレンダリングを交互にする」(AFR)「フレームのレンダリングを交互にする 2」(AFR2)「分割フレームのレンダリング」(SFR)で「3DMark05 Build1.2.0」(以下3DMark05)と「FINAL FANTASY XI Official Benchmark 3」(以下FFXIベンチ)を実行してみた。この結果を「シングルGPUレンダリング」,そして「アプリケーション」から選択できるNVIDIA提供のプロファイル利用時(ここでは「3DMark05プロファイル」と呼ぶ)と比較した結果がグラフ1,2だ。
 まず3DMark05(グラフ1)では,案の定というかなんというか,3DMark05プロファイル利用時のスコアが最も高く,自動選択がこれに続いた。一方AFR,AFR2,SFRのマニュアル設定だと,1%程度ではあるものの,スコアの低下を確認できている。
 4Gamerのレビュー記事で何度となく採り上げているとおり,FFXIベンチはNVIDIA SLIに対応していない。このため,グラフ2ではシングルGPUレンダリングが最もよいスコアを出しており,NVIDIA SLI動作時にはすべてスコアが低下した。とくにAFRでは「シングルGPUレンダリング」と比べて14〜15%も低い。さらに,AFRとAFR2では画面の一部が点滅するなど,まともに動作しているとはいえない状況だった。

スペック
グラフ1 3DMark05 Build1.2.0
グラフ2 FINAL FANTASY XI Official Benchmark 3

 マニュアル設定の紹介をしておいてナンだが,NVIDIA SLI非対応が明らかなゲームタイトルをプレイするときは,素直にシングルGPUレンダリングを選ぶか,自動選択設定にしておくのが無難かもしれない。

SLIの疑問2
NVIDIA SLIに初めから対応したタイトルはないの?

 NVIDIAがプロファイルを用意してくれるのはありがたいが,NVIDIAの品質管理チームが実際にそのタイトルをプレイしてから設定する以上,ゲームの発売直後はNVIDIA SLIによるパフォーマンス向上が期待できない。この仕様に関しては,イマイチ感がぬぐえないところだ。また,ユーザーがNVIDIA SLIモードを切り換えて最適設定を探れるというのも,PCそのものが趣味の人にはいいだろうが,純粋にパフォーマンスが欲しいだけのゲーマーにとっては,面倒な作業が増えるだけでしかない。
 この問題について,NVIDIAは真剣に受け止めているという。実際,ゲームスタジオ(デベロッパ)との連携をこの1年の間,強めてきたとのことだ。

この夏に以降リリースするタイトルから,NVIDIA SLI正式対応を謳うことに協賛したデベロッパの一覧

 右のスライドは,2005年夏以降にリリースするタイトルから,NVIDIA SLI正式対応を謳うとするデベロッパの一覧だ。今後はForceWareからいちいち設定しなくても,ゲーム内の標準オプションとしてNVIDIA SLI動作モードを選択したりできるようになるようだ。

 というわけで前編はここまで。後編も,まだまだあるNVIDIA SLIの疑問を解決していきたい。(トライゼット 西川善司)