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

NVIDIAのTegra 4から見えてくるMaxwell世代のTegra

非統合アーキテクチャのTegra 4 GPUコア

 NVIDIAが投入する新しいモバイルSoC(System on a Chip)「Tegra 4」。そのアーキテクチャは、まだベールが完全にははがされておらず、いくつかの疑問がある。

 Tegra 4のGPUコアは、バーテックスシェーダとピクセルシェーダが分離した非統合シェーダ型アーキテクチャとなっている。3Dグラフィックスパイプラインのうち、頂点シェーディングはバーテックスシェーダプロセッサで、ピクセルシェーディングはピクセルシェーダプロセッサで行なう方式だ。これは、Tegra 2/3のGPUコアのベースとなったGeForce 7(G70)アーキテクチャが、分離型シェーダの古いアーキテクチャであったためだ。Tegra 2以来、ベースはある程度共通するアーキテクチャで、演算ユニット数を増やして来たと見られる。

 NVIDIAはTegra 2/3では、バーテックスシェーダとピクセルシェーダをそれぞれ4コアずつとカウントしている。これは、両シェーダプロセッサの、「vec4」4-way積和算ユニット部分を数えていると見られる。具体的には、Tegra 2が、1個のvec4 バーテックスシェーダと1個のvec4 ピクセルシェーダの構成で、合計で8個の積和算ユニット。Tegra 3が1個のvec4 バーテックスシェーダと2個のvec4 ピクセルシェーダの構成で、合計で12個の積和算ユニットとなる。

Tegraファミリの積和算ユニット数の変化
※PDF版はこちら

 これが、Tegra 4になると、6個のバーテックスシェーダで24個の積和算ユニット、12個のピクセルシェーダで48個の積和算ユニットの構成となる。面白いのは、G70系のアーキテクチャはPLAYSTATION 3(PS3)のRSX(Reality Synthesizer)でも使われており、Tegra 4の構成は、バランス的にはRSXよりもバーテックスシェーダの比率が高い(1対3に対して1対2)こと。PS3のRSXの弱点は頂点シェーディングのスループットにあったため、Tegra 4を「頂点スループットの高いRSXになりそう」と評するゲーム開発者もいる。ちなみに、QualcommのAdrenoは、Xbox 360のGPUの流れをある程度引いている。

 NVIDIAはTegra 2の最初の説明では、G70をベースとして低電力向けに大幅に改良したコアだと説明していた。G70系のバーテックスシェーダとピクセルシェーダのアーキテクチャは下のようになっている。バーテックスシェーダは4-wayのベクタ積和算ユニットと、スカラのスペシャルファンクションユニットの構成。ピクセルシェーダはちょっとトリッキーで、4-wayのベクタ積和算ユニットと、スカラプロセッサのミニALUがあり、さらにテクスチャユニットもシェーダユニットとして使うことができる構成となっていた。

Tegra 2以降のGPUコアのベースとなったG70アーキテクチャ
※PDF版はこちらこちら

 実際にはTegraはG70から派生したと言っても、かなり変更が加わっているという。Tegraでは、演算ユニットとしてカウントしているのは両シェーダの基本のvec4部分のみとなっている。ちなみに、TegraのGPUコアの利点の1つは、モバイルGPUコアにしては最高520MHzと、動作周波数が高いことがある。これは、演算ユニットのパイプラインが深いことを意味している。

CESで公開したTegra 4のダイ。しかし、GPUコアやCPUコアの配置は実際とは異なると見られる

他のモバイルGPUとは異なるプロセッサの制御方式

 G70では、バーテックスシェーダとピクセルシェーダの制御方式が異なっており、バーテックスシェーダはMIMD(Multiple Instruction Stream, Multiple Data Stream)方式、ピクセルシェーダはSIMD(Single Instruction, Multiple Data)方式で制御していた。つまり、バーテックスシェーダでは複数のvec4シェーダプロセッサが、それぞれ別な頂点に対して別な命令を実行できる。それに対して、ピクセルシェーダでは複数のvec4シェーダプロセッサが、別なピクセルに対して同じ命令を実行する。これは、G70の根幹に関わるアーキテクチャであるため、Tegra系でも継承されていると推測される。

 Tegra 2のように1シェーダプロセッサずつの場合でも、MIMDとSIMDの違いがあるのかと疑問に思うかも知れない。しかし、GPUでは複数サイクルで同じ命令を実行するため、この違いが影響する。伝統的なPC向けGPUでは、同じシェーダプログラムの同じ命令を、一定の粒度のデータに対して連続して実行する。典型的には64ピクセルを束ねて、同じ命令を実行する64-wayのSIMD実行を行なっている。そのため、シェーダプロセッサがたとえ1個であっても、SIMD実行による粒度がある。

 これは、分岐命令を実行する際の効率性にも影響するため、シェーダプログラムの作り方(分岐命令を入れるかどうか)にも大きな影響を与える。ちなみに、現行のPowerVR Series5XTやMali-T6xxなど他のモバイルGPUは、こうした大きな粒度のSIMD実行は行なっていない。各頂点やピクセル毎にプログラムカウンタを持ち、個別の命令を実行できる。これは、モバイルGPUが、小さな画面を描画するため同じシェーダを走らせる粒度が小さい上に、限られたトランジスタを有効に使わなければならないという制約があったためだ。

Tegra 4の疑問の1つはSIMD実行の粒度

 Tegra 4アーキテクチャでの疑問の1つは、SIMD実行の粒度がどうなっているかという点にある。SIMDの粒度は、ピクセルシェーダの物理的な構成にも影響する。12個のピクセルシェーダは、おそらく2~4個のピクセルシェーダグループに分割されているはずで、それはSIMD実行の粒度と直結しているはずだからだ。

 例えば、Tegra 4が64ピクセルの粒度でSIMD実行を行なうとすると、ピクセルシェーダは割り切れる数でグループ化されていなければならない。もし、4個のピクセルシェーダずつグループ化されているとすると、それぞれが16サイクルずつ同じ命令を実行することで64ピクセルを処理できる。3個では64は割り切れないので、3の倍数の粒度を持つことになる。おそらく、4個のピクセルシェーダのグループが3個の構成になっている可能性が高い。

 SIMD実行の粒度は、テクスチャフェッチの際の粒度にも影響する。GPUのメモリアクセスのかなりの比率を占めるテクスチャフェッチでは、隣接したテクセルを連続してフェッチした方がメモリアクセス効率がよくなる。そのため、効率性のために一定の粒度が必要になり、それはピクセルシェーディングの粒度と連携する。

 Tegra 4アーキテクチャでは、テクスチャユニットの配置も疑問だ。Tegra 2/3では、ピクセルシェーダにテクスチャユニットが付随していたと見られる。しかし、Tegra 3からTegra 4では、メモリ帯域は倍以上になるものの、それでも、Tegra 3に対して6倍になったピクセルシェーダ数に見合うほどのメモリ帯域ではない。そのため、テクスチャユニット数は、Tegra 3の6倍にはなっていないと予想される。おそらく、一定の粒度のピクセルシェーダでテクスチャユニットが共有されていると推測される。このあたりは、より詳細な説明がNVIDIAから行なわれないと見えてこない。

Tegra 4のGPUコアアーキテクチャの推測図
※PDF版はこちら

他社GPUコアが統合シェーダ構成を取る理由

 Tegra 4が非統合シェーダアーキテクチャであるのに対して、ライバルとなるImagination TechnologiesのPowerVR SGXやQualcommのAdreno 2xx/3xxやARMのMali-T6xxは、いずれも統合シェーダ構成を取る。同じ演算プロセッサが、頂点とピクセルの両方のシェーディングを行なうアーキテクチャだ。PC向けGPUでは、DirectX 10世代から統合シェーダに移行した。

左が非統合シェーダ、右が統合シェーダ
※PDF版はこちら
PowerVRの最新のSGX554 MP4のアーキテクチャ
※PDF版はこちら

 この点だけを見ると、ライバルGPUコアの方がTegra 4より先進的なアーキテクチャに見える。しかし、ライバルコアには統合にしなければならない理由がある。それは、他のGPUコアがタイリングアーキテクチャを取っているからだ(Adreno 320はタイリングとイミーディエイトの両方が可能)。

 PC向けGPUやTegra系のようなイミーディエイトモードのGPUアーキテクチャでは、頂点処理からピクセルシェーディング、ROP処理までは流れ作業のように行なわれる。頂点/プリミティブは、処理されると次々にラスタライズされ、すぐにピクセルシェーディングへと回される。そのため、バーテックスシェーダとピクセルシェーダがそれぞれ専用アーキテクチャになっていても、頂点とピクセルが並列に処理できるため、ある程度は効率良く処理できる。もちろん、頂点かピクセルのどちらかに処理が偏重する場合はムダが生じるが、基本的には両方のシェーダプロセッサが同時に稼働できる。

 それに対して、タイリングアーキテクチャでは、基本は頂点処理が終わって、頂点をいったんメモリに書き出して、タイル毎に読み込み直さないとピクセル処理を始めることができない。原理的には頂点とピクセルそれぞれの処理が交互に行なわれることになる。

左がイミーディエイトモード、右の2つがタイリング系アーキテクチャ
※PDF版はこちら

 そのため、頂点とピクセルそれぞれのシェーダが専用プロセッサとなっていると、ムダな空きサイクルが生じて効率が悪くなる。実際には頂点とピクセルをオーバーラップさせることもできる(例えば2フレームをダブルバッファリングする)のだが、それでも、タイリングベースでは、演算ユニットの効率を上げようとすると統合シェーダの方がいい。

 つまり、ライバルのタイリング系アーキテクチャのGPUコアは、その基本となるレンダリング方式のために、統合シェーダにしなければならない。それに対して、Tegra 2/3/4系は、統合シェーダにしなければならない必然性が薄い。Tegra 4の非統合型シェーダも、必ずしも遅れているとは言い切れない。

 ただし、GPUの潮流は、OpenCLなどでGPUコアに汎用プログラムを走らせるGPUコンピューティングへと向かっている。GPUコンピューティングでは、全ての演算コアをフラットに使うことができる統合シェーダの方が効率が高いことは明白だ。NVIDIAのTegra 4の場合は、ピクセルシェーダの方しか汎用に使うことができない。こうしたことを考えると、GPUコンピューティングの旗手であるはずのNVIDIAが、Tegra 4で統合シェーダ型アーキテクチャを取らなかったことは、出遅れていると言える。

NVIDIAの性能効率アップのロードマップがTegraの未来を示唆する

 以前の記事で説明したように、NVIDIAはTegra 4の世代では、本当はGPUコンピューティング向けのアーキテクチャに切り替えたかった。しかし、モバイルGPUは、現在、熾烈な性能競争にあり、異常なペースで拡大する画面解像度をサポートするために、生シェーダ性能が求められている。NVIDIAとしては背に腹を変えられず、トランジスタコストの低い古いタイプのアーキテクチャで、GPUの演算ユニット数を増やす道を選んだと見られる。

 しかし、中期的に見ると、NVIDIAは大きく巻き返すチャンスがある。それは、NVIDIAのPC & HPC(High Performance Computing)向けGPUコアが、急激に低消費電力/性能へと向かっているからだ。Fermi(フェルミ)よりKepler(ケプラー)の方がずっと電力効率が高く、さらに、次のMaxwell(マクスウェル)の方が電力効率が高くなる。

NVIDIAが2010年のスパコンカンファレンスSC10で示した性能効率のビジョン

 HPCでNVIDIAが目指すゴールは50GFLOPS/Wだが、図中で2013となっているMaxwellの世代で20GFLOPS/Wかそれ以上のレベルにNVIDIAが引き上げようとしていることが分かる。それなら、電圧を落とし、モバイル向けのプロセス技術を使えば、同じアーキテクチャでより高い性能効率を得られるようになる。ちなみに、NVIDIAがDARPA(Defense Advanced Research Projects Agency:国防高等研究計画局)と昨年(2012年)末に結んだ組み込みプロセッサの研究プロジェクト「Project Osprey (プロジェクト・オスプレイ)」では、75GFLOPS/Wを目指している。

 こうした効率向上のロードマップを見ると、NVIDIAはMaxwell世代になると、上から下まで、つまりTeslaからTegraまでのGPUアーキテクチャをある程度共通化できるようになる可能性がある。NVIDIAのコードネームで「Stark」と呼ばれる、20nm世代と見られるTegraになると、GPUアーキテクチャは躍進する可能性がある。

 また、その世代になると、CPUコア側も64-bit ARMへと切り替えが可能になる。より高性能な市場向けのSoCである「Project Denver」も登場する。NVIDIAは、TegraとDenverでも、GPUコアとCPUコアの両方で、共通性を持たせることができるようになる。つまり、TegraとPC/HPCと切り分けられているアーキテクチャが、共通性を持つようになるかも知れない。

(後藤 弘茂 (Hiroshige Goto)E-mail