後藤弘茂のWeekly海外ニュース
NVIDIAがMWCに合わせて「Tegra 4/4i」の詳細を明らかに
(2013/2/25 06:00)
NVIDIAの2つのTegra 4ファミリチップ
NVIDIAは次世代のモバイルSoC(System on a Chip)「Tegra 4/4i」の詳細を、スペイン・バルセロナで2月25日(現地時間)から開催される「Mobile World Congress(MWC) 2013」に合わせて発表した。明らかになったのは、Tegra 4/4iが予想以上にタイトに効率性にフォーカスして設計されたアーキテクチャだったことだ。特に、GPUコア部分は、Tegra 3から再設計され、性能/ダイ面積/電力を極限まで追求した設計となっている。これまで記事で予想していたTegra 3の拡張とは大きく異なっている。
Tegra 4ファミリは、上位の「Tegra 4」と、下位の「Tegra 4i」の2製品で構成される。Tegra 4はベースバンドプロセッサが別個の設計、Tegra 4iはベースバンドを内蔵した設計だ。Tegra 4は、CPUにARMの最新の「Cortex-A15」を5コア(1コアは省電力のサービスコア)で、GPUコアが72積和算(MAD:Multiply-Add)ユニット。Tegra 4iは、CPUにCortex-A9の最新拡張版「Cortex-A9r4」を5コア搭載する。Tegra 4はメモリインターフェイスがx64でダイサイズ(半導体本体の面積)が80平方mm台中盤、Tegra 4iはx32でダイサイズは60平方mm台前半だ。CPUコア部の動作クロックはTegra 4が最高1.9GHz、Tegra 4iが最高2.3GHz。
今回は、まずTegra 4で大きく変わったGPUアーキテクチャの詳細についてレポートしたい。
イミーディエイトモードレンダリングのTegra 4
モバイルGPUでは大きく分けて「イミーディエイトモード(Immediate Mode)」と「タイリングモード(Tiling Mode)」の2種類のパイプライン設計が使われている。多数派はタイリングで、Imagination TechnologiesのPowerVR系やARMのMali系が採用している。イミーディエイトがほとんどを占めているPC向けGPUとの大きな違いだ。
そのため、イミーディエイトモードは、モバイルGPUの中ではTegra系の大きな特長となっている。ちなみに、QualcommのAdrenoはタイリング系だが、最新のAdreno 320からはタイリングとイミーディエイトの両方が可能な構造になった。
タイリング系はいったん頂点演算を全て終えて、頂点データをメモリにストアした後、タイルに分割した描画面毎にピクセルシェーディングを行なう方法だ。利点は、隠面処理やピクセル処理の際の外部メモリアクセスの負担を減らすことで、メモリ帯域と電力消費枠が限られたモバイルの構造にフィットさせやすいこと。しかし、イミーディエイトモードもキャッシュの多用や、拡大しつつあるモバイルメモリ帯域のおかげで、今ではモバイルで不利とは言えない。もし、モバイルGPUがタイリングからイミーディエイトへと変化しつつあるのだとしたら、Tegra 4はその先端にいることになる。
イミーディエイトパイプラインは、言ってみれば流れ作業のパイプラインで、読み込んだ頂点を処理した後は、GPUの内部でピクセルパイプラインへと渡す。Tegra 4では、頂点パイプラインは6ユニットの「Vertex Processing Engines(VPE)」で構成されている。
各VPEは、それぞれ4個の浮動小数点積和算(MAD:Multiply-Add)ユニットを備える、典型的な「Vec4」構成となっている。NVIDIAは、この各MADユニットをコアとして数えており、VPE群全体で24個のMAD/コアを持つ。MADユニットの演算精度はFP32単精度浮動小数点で、これはNVIDIAのNV40/G70世代と同様だ。
VPEは、96エントリ分のオブジェクトをバッファできる16KBの大きめのVertex Buffer Object(VBO)キャッシュを備えている。このVBOキャッシュによって、同じ頂点を再利用する際の外部メモリ参照を不要にしている。全体的にキャッシュの強化はTegra 4の方向で、これはメモリアクセスの電力消費を減らすためだ。
VPEの構造は従来のTegraに似ているが、性能は強化されており、Tegra 3のVPEと比較すると同クロック時に1.5倍の性能を発揮するという。GPUコアの動作クロックも、Tegra 3のGPUコアの520MHzに対して、Tegra 4のGPUコアは672MHzと向上する。VPEのユニット数は、Tegra 3に対してTegra 4が6倍、Tegra 4iが3倍だが、実際にはユニット数増加以上の性能アップになるという。
また、Tegra 4/4iのVPEは、DirectX 9レベルのインスタンシングをサポートしており、頂点の自動生成ができる。
ラスタライズエンジンでは隠面消去を強化
VPEで生成した頂点は、固定機能ユニットのラスタエンジン部で、ピクセルに変換される。ピクセルへの変換のレートは8ピクセル/クロックで、各サイクル毎に最大8ピクセルを生成してピクセルパイプラインに送り込むことができる。この規模のGPUとしては一般的だ。
Tegra 4/4iでは、2x/4xのMultisample Antialiasing (MSAA)と24-bit Zバッファ、8-bitステンシルがサポートされている。ラスタエンジンでは、Early-Zユニットが各ピクセルのZテストを行なって、不要なピクセルを除去する隠面消去処理を行なう。タイリングモードでは、全ての頂点が揃っているため、あるピクセルの背後になって見えないピクセルは、タイルの読み込みの段階で完全に除去できる。それに対して、イミーディエイトモードでは、隠面のピクセルを処理するために各ピクセルのZデプスのテストが必要になる。
このステージが非常に重要となるのは、隠面消去がうまく行けば、不要なピクセルのプロセッシングが不要になるだけでなく、ピクセルプロセッシングに関連したメモリの読み書きが減るためだ。特定のオブジェクトが不要なら、そのオブジェクトに貼るテクスチャのフェッチも不要になる。それによって、消費電力とメモリ帯域をセーブできる。イミーディエイトモードの効率性のキモである、このEarly-ZをNVIDIAは重視、ハイエンドのPC向けGPUと同等の実装をしているという。Zバッファのデプスも、Tegra 3では20bitsだったが、Tegra 4/4iでは24bitsへと拡張されている。
従来のTegra 3とも、PC向けGPUとも大きく異なるピクセルシェーダ
Tegra 4/4iのGPUパイプラインのうち、ラスタライズステージまでは、NVIDIAの旧来のNV40/G70系とある程度似ている。しかし、ピクセルシェーディングのステージから下は、大きく異なっている。以前の記事で予想したものとも、全く異なっており、モバイルに特化した特殊な構造となっている。
Tegra 4の「Pixel Fragment Shader」は、それぞれ3個のALU(Arithmetic Logic Unit)を備えている。各ALUは、4個の浮動小数点積和算ユニットと、1個のMFU (Multi-Function Unit)ユニット、それに1個のテクスチャユニットを備える。MFUは、いわゆる超越関数系(logs, exponents, trigonometric, functions)や平方根、MOV命令などのためのユニットで、Tegra 3にはなく、Tegra 4系から搭載された。Tegra 4の場合、Pixel Fragment Shaderの3ALUの合計で、12個のMADと3個のMFU、1テクスチャフィルタリングユニットの構成となる。Tegra 4ではPixel Fragment Shaderユニットが4ユニットあるため、合計では48個のMADユニットと12個のMFU、それに4個のテクスチャフィルタリングユニットの構成となる。
MADユニットの合計数はTegra 3の8ユニットに対して6倍。さらにクロックがTegra 3の520MHzに対して672MHzと上がるため、Tegra 4ではTegra 3の8倍のピクセルプロセッシング性能を発揮すると説明している。
MADユニットの演算精度はFP20(20-bit浮動小数点フォーマット)だ。これは、NVIDIAが以前PCグラフィックスで採用した精度で、Tegra 2以降のPixel Fragment Shaderの浮動小数点演算はこの精度だという。
FP20は、IEEE精度のPF32でもなければ、グラフィックスで一般的だったFP16でもない中途半端な精度に見える。しかし、人間の眼では、ゲーム画面をレンダリングした場合、FP20とFP32の差はほとんど感じられないため、FP20で十分だとNVIDIAは説明する。その例として、NVIDIAはいくつかのゲームをFP20とFP32でそれぞれレンダリングしたケースを提示して、差異をほとんど見分けられないことを示している。
実は、FP20には合理的な理由もある。人間の眼のダイナミックレンジは、FP16精度を超えてしまうが、FP32ほど高くはない。そのため、人間の眼に合わせるならFP20程度が理にかなった実装となる。
とはいえ、汎用コンピューティングに使う場合はFP32は必須だ。現在のGPUがFP32をサポートするのは、GPUを汎用に使うGPUコンピューティング(GPGPU)のためでもあり、Tegra 4/4iに大きく欠けているのはこの部分だ。
NVIDIAがTegra系のPixel Fragment Shaderに、FP20を採用したのは、実装面積を小さくし、消費電力を抑えるためだ。ちなみに、モバイル向けのグラフィックスAPIのOpenGL ESの次期バージョンOpenGL ES 3.0ではシェーダプロセッサの演算精度としてIEEE 32-bit単精度を求めている。Tegra 4/4iはそのスペックを満たさないが、標準APIのサポートを犠牲にしても、NVIDIAは軽い実装で多数の演算ユニットを積む方を選んだ。
もっとも、FP32とテクスチャコンプレッションを別にすれば、他のOpenGL ES 3.0の要素の多くはTegra 4/4iもサポートしている。
VLIW方式の命令発行に変わったTegra 4のピクセル処理ユニット
NV40/G70世代のNVIDIAのPixel ShaderはVec4型のSIMD(Single Instruction, Multiple Data)ユニットだった。正確に言えば、NV40/G70では、Vex4の4レーンを2つに分割して2命令を実行させることができる構造だった。それに対して、Tegra 4/4iの「Pixel Fragment Shader」はVLIW(Very Long Instruction Word)型の命令セットのユニットとなっている。3命令インプットセレクタを備えたVLIW命令に、異なるオペレーションを含めることができる。NVIDIAが例として示したのは下のような命令のミックスだ。
・4xMAD
・2xDP2A + MFU
・1xDP3A + 1xMAD + MFU
・1xDP2A + 2xMAD + MFU
例えば、4つの積和算MAD命令や、1つのDP2A(2コンポーネントのドットプロダクト(内積)とスカラ加算)命令と2つのMAD命令と1つのMFU命令をミックスすることができる。この命令フォーマットからは、例えば、DP2Aには2個のMADユニットを組み合わせると推測できる。つまり、演算ユニットを組み合わせて使うためのVLIW命令化だ。
VLIW命令と言えば、AMDの旧Radeon系のVLIW5/VLIW4を思い浮かべるかも知れないが、性格は異なる。AMDの場合は、スカラ演算が多い場合が出る汎用プログラムの実行性能を上げるためにVLIWを採用したが、NVIDIAのTegra 4/4iはあくまでもグラフィックス処理時の効率を上げるためのものだ。そのため、ドライバ側でのVLIW命令生成にかかる負担も少ないと推測される。また、個々のALUに対する命令はVLIW命令だが、同じVLIW命令をSIMD(Single Instruction, Multiple Data)型で複数ユニットまたはサイクルにまたがって実行させるモデルを取っている。
このほか、演算ユニットの効率を上げる工夫が加えられている。例えば、Tegra 3ではピクセル当たりFP20物理レジスタが16だったが、Tegra 4では24レジスタに増やされた。GPUでは、レジスタは動的にスレッドに割り当てられる構造であるため、レジスタの増量によってインフライトで走らせることができるスレッド数が増えた。その分だけ、メモリレイテンシの隠蔽や、演算ユニットの実効効率を上げることができるようになった。
ROP処理はピクセルシェーダ内部で行なう
Tegra 4では、Pixel Fragment Shader毎に1ユニットをテクスチャフィルタリングユニットを備えている。4シェーダで合計4テクスチャ/クロックのフィルタリング性能となる。Tegra 3は2テクスチャユニットであったため、ユニット数は2倍になった。しかし、クロックと性能の向上によって、実際のテクスチャレートはTegra 3の2.6倍に上がったとNVIDIAは説明する。
テクスチャユニットはFP16フィルタ&ブレンディングをサポートする。16xのAnisotropic Filtering(異方性フィルタリング)が可能だ。また、テクスチャサイズは4k×4kのラージサイズまでサポートする。
各テクスチャユニットは内部に少量のL1キャッシュを備えるほか、16KBの共有L2テクスチャキャッシュも備える。L2はTegra 4/4iから加えられたもので、テクスチャフェッチでの外部メモリアクセスを減らす目的だ。L2によって、ピクセルパイプをまたいでテクスチャの共有ができるようになり、効率が上がる。Tegra 4系列の、GPUにしては相対的に大きなキャッシュは省電力化のためだ。
通常のPC向けGPUでは、Pixel Shaderからの出力はクロスバースイッチで、独立したROP(Rendering Output Pipeline)ユニットに送られる。しかし、Tegra 4/4iアーキテクチャでは、ROP系の処理はPixel Fragment Shaderの内部で行なわれる。アンタイエイリアシングやブレンドはシェーダプロセッサやブレンドユニット、テクスチャユニットなどが行なうという。
PC向けGPUの場合は、メモリチャネル別に分かれたメモリコントローラ毎にROPユニットが配置されるが、これはROPの処理がメモリアクセスを要求するためだ。しかし、Tegra 4/4iはもともとSoC(System on a Chip)でメモリコントローラにはクロスバースイッチを介してアクセスし、他のユニットとメモリを共有している。そのために、こうした構成を取ったを推測される。
ROPをPixel Fragment Shaderの内部で行なうため、通常ではROPに付属するピクセルキャッシュもPixel Fragment Shader内に配置されている。各シェーダ毎に4KBのL1ピクセルキャッシュがあり、これによって、外部のフレームバッファメモリアクセスを50%以上削減できる場合があるとNVIDIAは主張する。
Tegra 4のPixel Fragment Shaderは3 ALUを備えるが、ピクセル出力は1ピクセル/クロック(ppc)となっている。4個のPixel Fragment Shaderで、合計で4ppcのピクセル出力性能のGPUだ。ピクセル出力性能を抑えているのは、省電力化のためだ。PC向けGPUで言えばバリューGPUクラスの性能だが、Tegra 4/4iのGPUコアは、30~40Wを消費するバリューGPUに比べても格段に低い電力しか消費しない。
ちなみに、Tegra 4iでは、Pixel Fragment Shaderの構成がTegra 4と異なっており、6ユニットのALUが1個のPixel Fragment Shaderに含まれる。6 ALUで周辺ユニットを共有する仕組みとなっている。テクスチャレートは2テクスチャ/クロックで、ピクセル出力も2ピクセル/クロックだ。これは、メモリインターフェイスがx32で、メモリ帯域がTegra 4の半分であるためだ。
ほかのモバイルGPUコアよりも格段に小さいダイエリア
こうして概観すると、Tegra 4/4iのGPUコアが極めて効率と省電力重視でコンパクトに設計されていることがわかる。CUDAコンピューティングを犠牲にして、ぎりぎりまでグラフィックス性能効率を追求したのがTegra 4/4iだ。効率性は、例えば、ダイ面積を比較すると明瞭だ。
Tegra 4のGPUコアの面積は10.5平方mmと、チップ全体の1/8程度に過ぎない。それに対して、AppleのA6XのGPUコア「PowerVR SGX 55x MP4」は28nm換算にしても37.3平方mmの面積を取るとNVIDIAは主張する。面積当たりの性能比では、Tegra 4アーキテクチャが圧倒的だというのがNVIDIAの主張だ。この比較については、別のレポートで詳しく説明したい。
ちなみに、NVIDIAのTegra 4の“ダイ写真”に示されているGPUコア(緑の正方形)は、まったくのフェイクで、本当のGPUコアの配置を反映していない。その理由の1つは、小さなGPUコアのサイズを隠すためだったのかも知れない。
もっとも、タイリングアーキテクチャGPUのダイ面積には、タイリングに必要な、相対的に大型のキャッシュ/タイルメモリ面積が含まれているはずで、イミーディエイトのTegra 4との単純な比較はできない。しかし、それを差し引いても相対的にTegra 4系のGPUアーキテクチャが極めて効率がいいことは確かだ。NVIDIAはこの強力なTegra 4/4iファミリで、改めてモバイル市場に切り込む。