オススメ機能
Twitter
お気に入り
記事履歴
ランキング
4Gamer.net
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

募集中
LINEで4Gamerアカウントを登録
QRコードでLINEの4Gamer
アカウントを友達登録すると
月〜金の週5回,21時に厳選
ニュースをお届けします!
※購読にはLINEアプリが必要です
西川善司の3DGE:GeForceの隠し機能「Tiled Caching」が明らかに。PowerVRの特徴を取り入れて高性能化を図る!?
特集記事一覧
注目のレビュー
注目のムービー
印刷2017/03/09 23:00

連載

西川善司の3DGE:GeForceの隠し機能「Tiled Caching」が明らかに。PowerVRの特徴を取り入れて高性能化を図る!?

イベントで披露されたGTX 1080 Ti Founders Editionの実機
GeForce GTX 10
 北米時間2017年2月28日,NVIDIAは,米国サンフランシスコで開催した自社イベントにおいて,Pascalベースの新型GPU「GeForce GTX 1080 Ti」(以下,GTX 1080 Ti)を発表した。
 主なスペックや価格,イベントの概要などはレポート記事で報じたとおりで,
4Gamerでは別途レビュー記事も掲載済みだが,今回は,それら2つの記事で触れていない「2つの技術」を取りあげてみたいと思う。

Jonah M.Alben氏(SVP,GPU Engineering,NVIDIA)
 もったいぶってもしょうがないので書いてしまうと,2つの技術とは,「Tiled Caching」と「Dual DualFET」だ。
 NVIDIAの自社イベントで技術解説を担当した同社のJonah M.Alben(ジョナ・アルベン)氏によると,実のところTiled Cachingは,GTX 1080 Tiどころか,Pascal世代の新機能ですらなく,Maxwell世代のGPUで導入済みのものとのこと。それをGTX 1080 Ti発表のタイミングで,「実は,こんな機能があってね……」と明らかにしたのである。

 もう1つのDual DualFET(もしくは「DualFET×2」)は,電源供給に関わる技術で,要は「GTX 1080 Tiではさらなる効率化を実現するために,DualFETをさらに二重化した」というものだ。

 今回は,より重要なTiled Cachingを中心に,NVIDIAが語った新情報をまとめてみたいと思う。


Zバッファのおさらい

重複描画はGPUの処理時間を無駄にする


 というわけで,まずはTiled Cachingからだが,いくつか前提となる情報を説明しておく必要があるので,そこから始めよう。現代的な3Dグラフィックス技術を熟知している人にとっては既知の情報となるが,おさらいと思って付き合ってもらえれば幸いだ。

 ゲーム画面において,背景とキャラクターを描画する場面を考えてみよう。
 一般的なGPUでは,GPUに描画コマンドが送られてきた順に描画は行われる。たとえば,先にキャラクターを描画したあとから,背景の描画コマンドが送られてきた場合,あとから描画する背景は,手前にあるキャラクターを避けて描画しなければならない。こうした処理に有用なのが,「Zバッファ」(深度バッファ)という概念である。

キャラクターや背景を正しく重ね合わせて描画しないと,不自然な映像になってしまう
※出典:西川善司著「ゲーム制作者になるための3Dグラフィックス技術 増補改訂版」(インプレス刊)
GeForce GTX 10

 Zバッファとは,描画進行中のフレームにおいて「各ピクセルがどういう前後関係にあるのか」を表すの都合のよい奥行き情報(≒Z座標値)を記録する作業領域だ。
 すでに描画済みのキャラクターと,これから描画する背景の描画が重なる場合,Zバッファに記録されているピクセル単位の奥行き値を比較して,上書きしてもよいか,それとも上書きしない(避けるべき)かを判断するのだ。

Zバッファを参照することで,ピクセル単位の奥行きが分かるので,正しい位置関係でキャラクターを描画できる
※出典:西川善司著「ゲーム制作者になるための3Dグラフィックス技術 増補改訂版」(インプレス刊)
GeForce GTX 10

 ここでは,先にキャラクターを描画してから,次に背景を描画する事例なので,Zバッファがあれば,重複描画を避けることが可能になる。だが,これが先に背景を描画したあとで,キャラクターの描画を行う場合はどうなるか。
 描画済みの背景は,キャラクターよりも奥にあるので,すでに描画した背景の上にキャラクターを上書きで描画することになる。つまり背景のあとにキャラクターを描画するケースでは,上書きされた背景部分の描画は,結果として無駄な描画だったことになる。背景に美しい映り込み表現があったり,微細凹凸の法線マッピングが適用されていたりして,高負荷なピクセルシェーダを実行したとしても,塗りつぶされてしまえば,すべて水の泡だ。
 このように,処理はしたのに見た目には何の結果も残せなかった描画のことを,本稿では「重複描画」と呼ぶことにする。


タイルベースレンダリングの基本的な概念とは


 いきなり話が脱線するようで申しわけないが,Imagination Technologies(以下,Imagination)のGPU IPコア「PowerVR」を知っているだろうか。20年ほど前にPC用のGPUとして登場し,現在ではPlayStation Vitaが搭載するSoC(System-on-a-Chip)のGPUコアや,iPhoneシリーズで使われているApple製SoCのGPUコアに採用されているものだ。
 さて,このPowerVR。登場当時は「Zバッファを持たないGPU」としてアピールしていたのだが,ここにはウソが混じっている。PowerVRも,Zバッファにあたるものは持っているのだ。

 PowerVRシリーズは,「タイルベースレンダリング」(タイルレンダリングと呼ばれることもある)というアーキテクチャを採用している。
 タイルのサイズは,PowerVRの世代や設定によって異なるのだが,おおむね16×16ドットや,32×32ドットの矩形を1タイルとして扱う。そして,1920×1080ドットの画面をレンダリングする場合なら,画面全体を横60×縦34個のタイルに分けて,タイル単位で描画を行う仕組みとなっているのだ。

画面をタイルに分けたイメージ(※Imagination公式Webサイトの資料より引用)
GeForce GTX 10

 PowerVRで実際にレンダリングを行うときは,まず最初のレンダリングパスで,シーン内に登場するすべてのポリゴン(ジオメトリ)のレンダリングを,画面(=フレームバッファ)への描画を行わずに実行して,どのタイルにどのポリゴンが配置されるかの情報,ポリゴンリストを作成する。
 そして続くレンダリングパスでは,各タイル単位でのレンダリングを行う。各タイルにどのポリゴンを描画するかは,最初のレンダリングパスで把握できているので,その情報をもとに,タイル単位でポリゴンをドットに分解するラスタライズを行うのだ。
 ちなみに,タイル単位の描画をいくつ同時に実行できるかは,PowerVR GPUの世代やコア数(シェーダーユニットの数)によって変わる。コア数の多いGPUほど,一度に同時のタイルベースレンダリングを行えることは,容易に想像できるだろう。

 ここで,前段でも例に挙げた,背景を描画したあとから,背景の手前にキャラクターを描画するケースを考える。通常のレンダリングでは,無駄な重複描画が生じるのだが,タイルベースレンダリングでは,この重複描画を行わずに描画することが可能だ。
 タイルベースレンダリングでは,「どのポリゴンが手前に来るのか」や「どのポリゴンが,他のポリゴンによって上書きされるのか」といったことを,タイル単位で判定する。つまり,Zバッファ処理に相当することを,タイル単位で行っているのだ。
 これにより,タイル内の各ピクセルは,どのポリゴンを最終的に描画すべきか確定している。キャラクターで上書きされてしまう背景のピクセルは,背景描画用のピクセルシェーダを実行せずに,キャラクターを描画するピクセルシェーダだけを実行することが可能になるというのが,タイルベースレンダリングの大きな利点なのだ。

 さて,この一連の工程で行われるポリゴンの奥行きや重なりを確認する実質的なZバッファ処理には,GPU内蔵の高速なメモリ「On-Chip Depth Buffer」を使用する。つまり,この高速メモリは事実上,タイルサイズのZバッファであるのだから,PowerVRの都市伝説「PowerVRはZバッファを持たない」は,半分正解だが半分間違いといったところか。

 ここまでの説明で,Zバッファの基本と,PowerVRのタイルベースレンダリングでも,Zバッファに相当する処理があることは把握できたと思う。だが,結局はZバッファを使うのなら,タイルベースレンダリングのメリットはどこにあるのだろうか。

 一般的なGPUの場合,Zバッファはグラフィックスメモリ上に置かれる。つまりZバッファの処理は,グラフィックスメモリへのアクセスを必要とするわけだ。
 一方,PowerVRのタイルベースレンダリングで行う「タイル単位のZバッファ処理系」は,GPU内部のキャッシュメモリ上で行われる。つまり,グラフィックスメモリ上にZバッファを持たないため,グラフィックスメモリへのアクセスを減らせるのだ。GPUの外にあるグラフィックスメモリへのアクセスと,GPUコア内部のキャッシュに対するアクセスで,どちらが高速かは明白だろう。

一般的なGPUにおけるレンダリングパイプライン(Immediate Rendering)と,タイルベースレンダリングの違い。一般的なレンダリングでは重複描画が発生するため,ピクセルの出力においてメモリバス帯域幅を消費しやすい。一方のタイルベースレンダリングでは,ジオメトリレンダリング処理を2回行うため,ジオメトリ処理時にメモリバス帯域幅を消費しやすい。しかし,GPUコア内部のキャッシュメモリ(タイルバッファ)上で行う局所Zバッファ処理で,無駄な処理を排除できる利点がある
GeForce GTX 10

 とはいえ,タイルベースレンダリングには弱点もある。
 先述したように,タイルとジオメトリの対応を計算するためには,フレームバッファに描画しないジオメリレンダリングをプリプロセス(前段処理)として実行する必要があるのだが,この工程には,普通にグラフィックスメモリのアクセスがともなう。
 1フレームあたり,1000万ポリゴンを超えるほどの描画を行うこともある現代のゲームグラフィックスにおいて,ジオメトリデータの読み出しは相当なメモリアクセスが必要だ。「タイルベースレンダリングによる性能面での利点は小さい」と言われる由縁である。

 一方で,PCや据え置き型ゲーム機ほどは多ポリゴンの描画を行わないスマートフォン向けゲームグラフィックスならば,タイルベースレンダリングの効果が大きいのも事実。実際,PowerVRだけでなく,QualcommのGPUコアであるAdrenoシリーズや,ARMのGPUコアであるMaliシリーズといったスマートフォン向けのGPUは,すべてがタイルベースレンダリングを採用しているのだ。
 スマートフォン向けSoCはメモリバス帯域幅が狭いため,とにかくメモリアクセスを低減させることが性能向上に結びつくと言われているので,タイルベースレンダリングを使うGPUアーキテクチャが主流になったのだろう。


タイルベースレンダリングの利点を通常のレンダリングでも得られる?


 さて,ここからがようやく本題だ。
 NVIDIAは,MaxwellとPascal世代のGPUコアで,このタイルベースレンダリングのアーキテクチャを取り込むことにした。それがNVIDIAのTiled Cachingである。
 といっても,アプリケーション側は,タイルベースレンダリング的な処理が行われていることを気にしないで済むような形でだ。言い換えると,タイルベースレンダリングの利点を,通常のGPUパイプラインに組み込んだハイブリッドアーキテクチャを実装したと言っていいのかもしれない。

Tiled Cachingは,普通のレンダリングパイプラインにタイルベースレンダリングの処理系を組み合わせたハイブリッドな処理系で,ジオメトリ処理やピクセル処理時に,余計なメモリアクセスを隠蔽できる利点があると主張するスライドだが,正直分かりにくい
GeForce GTX 10

 頂点シェーダやテッセレーションステージ,ジオメトリシェーダを有するジオメトリパイプライン(※下に掲載した図にあるVertex,Tessellation,Geometry)からの出力をもとに,どのポリゴンがどのタイルに配置されるかの情報(※図中ではattributes)を生成する。そのうえで,この情報をL2キャッシュに書き込む。図中では「Post-Transform Geometry」と記載されている部分だ。
 タイルベースレンダリングにおけるフレームバッファ出力なしのジオメトリレンダリングに相当する処理を,ここで行っていると考えれば分かりやすい。

 続いて「Binner」と呼ばれる工程では,L2キャッシュに書き込まれた「ポリゴンとタイルの割り当て情報」をもとにタイルベースレンダリング的な局所Zバッファ処理を行って,ほかのポリゴンで上書きされるのが確実な無駄なポリゴンを破棄しておく。そのうえで,確実に表示されるピクセルのラスタライズを,後段のラスタライザで行うのだ。

Tiled Cachingを使うレンダリング工程。図の「Binner」がタイルベースレンダリング的な処理をする部分であり,その処理でアクセスするのは,L2キャッシュ上に置かれた「Post-Transform Geometry」と「Tile」の情報だ
GeForce GTX 10

 そのあとは,通常ならピクセルシェーダがROPを通してレンダリング結果を描き出すのだが,この時点ではグラフィックスメモリではなく,ひとまずは各ピクセルの座標に対応する「L2キャッシュ上に用意した仮想的なタイル」(※図中のTile)に描き出す。
 GPU内では,次から次へとオブジェクトの描画が続いているので,「Post-Transform Geometry」の内容も更新され続けている。この内容とレンダリング結果との整合性を取る必要があるので,グラフィックスメモリには直接出力せず,L2キャッシュ上の仮想タイルを更新するわけだ。
 L2キャッシュ内でタイルベースレンダリング的な処理をするから,Tiled Cachingという名称になったのだろう。

 NVIDIAによれば,Tiled Cachingによるメモリ帯域節約と,Pascal世代で実装となった新しいロスレスカラー圧縮技術を組み合わせると,メモリバス帯域幅が1200GB/sほど増えたことに匹敵する性能を発揮できると,Alben氏は述べていた。

GTX 1080 Tiで,Tiled Cachingとロスレスカラー圧縮を組み合わせた場合,2スタックのHBM2を使った本来のメモリバス帯域幅よりも,2倍以上の実効性能を発揮するという
GeForce GTX 10

PCゲームでは表示可能な解像度が4K〜5Kへと上がっているが,それに応じてフレームバッファの容量を増やしても,メモリバス帯域幅は大きく増やせるわけではない。Tiled Cachingのようなメモリバス帯域幅を削減する技術が,今後のGPUでは重視すべきである,という主張のスライド
GeForce GTX 10


Dual DualFET採用の新電力供給部と新開発の冷却システム


 GPUのような最新のプロセッサが,低い電圧の直流電流で動いていることを知っている人は少なくないだろう。そして,低電圧の直流電流を安定的に供給するために,直流電流をプロセッサの駆動電圧に下げる用途で使われているのが,「スイッチング電源」だ。

 スイッチング電源とは,電圧の変換処理をトランジスタ(MOSFET)による高速のスイッチング(オン/オフ)で行う電源である。大雑把な例を挙げると,10Vの電圧を0.5秒間通電し,0.5秒間は通電してなかった場合,1秒間の合計電圧は半分の5Vになる,といった仕組みと考えればいい。
 ところがGPUのように,「消費電力を下げるために低電圧で動かしたい」という要求と,「回路規模が大きいので大電流が欲しい」という要求があるプロセッサを動かすには,スイッチング電源にもいろいろな工夫が必要になる。そして,安定したノイズの少ない電源のほうが電力供給効率を高くできるので,動作特性が近いMOSFETを複数組み合わせたスイッチング電源「DualFET」が適するという。

 「GeForce GTX 1080」(以下,GTX 1080)では,電源回路にDualFETを採用したのだが,より多くの電力を消費するGTX 1080 Tiでは,さらに効率を高める目的で,DualFETを二重化して使う「Dual DualFET」(DualFET×2)を採用したそうだ。

 下に示したスライドは,GTX 1080 TiとGTX 1080,そして「GeForce GTX 980」の消費電力(横軸)と電力供給効率(縦軸)を比較したグラフだ。
 いずれも80W付近が電力供給効率のピークであるが,GTX 1080 Tiでは,効率が85%を超える範囲が30〜140W程度までに拡大していることが分かる。つまり,より広範囲のGPU動作領域で電力効率に優れるわけだ。
 また,電力消費が最大となる200W近辺でも,GTX 1080 Tiの電力効率は,従来製品より良好であることが分かるだろう。

GTX 1080 TiとGTX 1080,GeForce GTX 980の電力効率を比較したグラフ
GeForce GTX 10

 またAlben氏は,「GTX 1080 Tiでは,冷却システムをGTX 1080よりも改善した」ともアピールしていた。
 イベントの時点では,具体的な構造の違いは説明されなかったのだが,後日配付となった資料を確認したところ,GPUやグラフィックスメモリなどが,銅製ヒートパイプを経由して2スロットサイズの大型ヒートシンクに接続する構造にしたことと,ブラケット部上段に実装していたHDMI出力端子とDual-link DVI-D出力端子を省略し,上段側を開口部にすることで2倍のエアフローが得られるようになったことが,改良のポイントとして挙げられている。

 GTX 1080の場合,消費電力220Wの最大パフォーマンス発揮時には35dB以上の騒音レベルで空冷ファンを駆動しないと,安定動作領域となる90℃以下までGPUの表面温度を下げることができなかったという。
 それがGTX 1080 Tiでは冷却システムの改良によって,騒音レベルが2.5dB低い32.5dBでも,90℃以下まで温度を下げられるようになったそうだ。

GTX 1080(グラフ上側)とGTX 1080 Ti(グラフ下側)の動作温度(縦軸)と騒音レベル(横軸)を比較したグラフ。GTX 1080 Tiのほうが,同じ動作温度なら騒音レベルが2.5dBほど低く,同じ騒音レベルなら動作温度が5℃も低い
GeForce GTX 10


明らかになったTiled Cachingの秘密

Radeon RX Vegaは,いかにして対抗するのか?


 2016年夏に発表となった「NVIDIA TITAN X」のGeForceバージョンといった製品であるため,GTX 1080 Tiだけの新情報はあまりなかったな,というのが正直なところ。とはいえTiled Cachingは,Maxwell世代以降のGeForceにおける高性能ぶりを裏付ける技術として,興味深いものではあろう。

 AMDが,2017年第2四半期中に投入予定の次世代GPU「Radeon RX Vega」は,北米での価格が699ドルというGTX 1080 Tiに対して,性能と価格のどちらで挑んでくるのかも気になる。筆者としては,HBM2を搭載するRadeon RX Vegaの性能が,Tiled Caching搭載のGTX 1080 Tiにどれくらい迫れるのかが,見物になるだろうと期待しているところだ。

「GeForce GTX 1080 Ti」レビュー。699ドルのGeForceは1200ドルのTITAN Xより本当に速かった

NVIDIAのGTX 1080 Ti製品情報ページ

  • 関連タイトル:

    GeForce GTX 10

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:03月24日〜03月25日
タイトル評価ランキング
87
82
NieR:Automata (PS4)
70
FINAL FANTASY XV (PS4)
2016年09月〜2017年03月