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

NVIDIAが究極のモバイルSoC「Tegra K1」を発表

192コアのGPUと64-bit CPUコアと盛りだくさんのTegra K1

 NVIDIAは次世代モバイルSoC「Tegra K1(Logan:ローガン)」を、米ラスベガスで開催されている家電ショウ「CES(Consumer Electronics Show)」で発表した。Tegra K1の最大の特徴は、GPUコアをNVIDIAの最新の「Kepler(ケプラ)」アーキテクチャコアに変えたこと。TegraのGPUコアを、PC向けGPUと同アーキテクチャに揃えることで、PCグラフィックスの機能とGPUコンピューティング機能をモバイルにもたらす。NVIDIAは、Tegra K1を搭載したデバイスは、OEMメーカーから今年(2014年)前半に登場するとしている。

Tegra K1
Cortex-A15とKeplerコアの構成のTegra K1-ダイ上のコアの大きさと配置はイメージで実際とは異なると見られる

 最初に登場するTegra K1は、CPUに32-bitアーキテクチャの「Cortex-A15」を4+1コア搭載する。しかし、Tegra K1にはもう1つのバージョンがあり、こちらはCPUコアに64-bitアーキテクチャ(ARMv8)の「Denver(デンバー)」をデュアルで搭載する。Denverは7-wayのスーパースカラCPUで、クロックは2.5GHz以上、128KBのL1命令キャッシュと64KBのL1データキャッシュを備える。

 ARM自身の64-bit CPUコア「Cortex-A57」は3-wayスーパースカラに過ぎず、DenverはARMv8系CPUの中では最高の命令レベル並列度となる。つまり、それだけシングルスレッド性能が高い。IntelのCore i系CPUはCISC(Complex Instruction Set Computer)で4-way(Macro-Fusionも含めると5-way)なので、RISCで7-wayのDenverは同レベルかそれ以上の並列度となる。64-bit版のTegra K1は今年(2014年)後半に登場予定だ。

64-bit DenverとKeplerコアの構成のTegra K1-ダイ上のコアの大きさと配置はイメージで実際とは異なると見られる

 どちらのバージョンのTegra K1も、GPUコアはKeplerアーキテクチャで、192 CUDAコア(FMADユニット)搭載する。GPUコアの生パフォーマンスは365GFLOPS(950MHz時)で、PLAYSTATION 3(PS3)やXbox 360も上回る。コアの消費電力は2W以下。メモリインターフェイスはLPDDR3対応で64-bit幅、メモリ帯域は最高約17GB/sec(2,133Mt/sec時)。4Kディスプレイ出力に対応し、コンピュテーショナルフォトグラフィ機能も高めた。製造プロセスはTSMCの28nm HPMプロセスだ。

PCグラフィックスの機能をそのままモバイルへ

 NVIDIAはTegra K1開発に当たって最も留意したのは、PCで実現している機能を、そのままモバイルに持って来ることだったという。そのため、Tegra K1のKepler GPUコアは、PC向けコアの機能削減版ではなく、ほぼそのままの機能のコアを持ってきた。GPUコアの持つフィーチャはPC版と共通であるため、PCで実現しているようなグラフィックスを、モバイルに持って来ることができる。一言で言えば、現在のPCやPlayStation 4(PS4)/Xbox Oneで実現できるグラフィックスを、モバイルに載せることができる。もちろん、Tegra K1のパフォーマンスの範囲内という制約はつくが、フィーチャとしては可能だ。グローバルイルミネーション、レイトレーシング、ポストプロセッシング、物理シミュレーションなどの例をNVIDIAは挙げていた。

 Tegra K1のKeplerコアは、PC版Keplerコアと命令セットが100%完全互換であるだけでなく、実行ユニットやレジスタやスケジューリングなどのプロセッサの基本リソースもほぼ同一だ。そのため、GPUのキモである最適化についても共通している。API的には、PCと同様にCUDA 6やOpenGL 4.4が使え、DirectX 11.2をサポート(ハードウェアフィーチャはLevel 11_0相当)、モバイルAPIではOpenGL ES 3.0に対応する。同じフィーチャを持つGPUを、250W(GeForce GTX TITAN)から2Wレンジにまで落とし込んだ。

 フル機能のKeplerをモバイルに持って来ることができた背景には、NVIDIAのGPU開発の方針の転換がある。従来のパフォーマンス最優先のアプローチから、『モバイルファースト』のアプローチに切り替えたからだとNVIDIAでGPU開発を担当するJonah Alben氏(SVP, GPU Engineering, Nvidia)は語る。Keplerでは、NVIDIAは電力効率を高めることにフォーカスしてGPUコアを開発した。Kepler以降のGPUコアは、どのアーキテクチャも、モバイル向けにスケールダウンできるように最初から考えて設計されているという。

 現在は、モバイルからスーパーコンピュータに至るまで、どのレベルでも高い電力効率がプロセッサに求められており、アーキテクチャを共通化する必然性が高まっている。その根本には、ムーアの法則が鈍化しつつあるという背景があるとNVIDIAは言う。そうした流れに沿ってモバイルからスーパーコンピュータまでのアーキテクチャ統合が行なわれた最初のGPUコアがKeplerであり、NVIDIAは今後もこの方針を継続する。その意味するところは、モバイルからPC、スーパーコンピュータまで、共通のコードが走る土台ができるということだ。

強化されたTegra K1のCortex-A15コア

 最初のバージョンのTegra K1が搭載するCPUコアは、Tegra 4と同じCortex-A15コア。しかし、同じCortex-A15でも、3つの点で異なっており、パフォーマンスと電力効率がTegra 4より向上している。

(1)1つは製造プロセス技術。Tegra 4とTegra K1は同じTSMCの28nmプロセスだが、Tegra 4が低消費電力向けの最初のプロセスである28HPLを使っているのに対して、Tegra K1は後発で改良されたパフォーマンス&低消費電力プロセスの28HPMを使っている。そのため、Tegra 4のCortex-A15よりも高クロック化が可能で、かつ同じクロック時でもアクティブ電力が少ない。

TSMCのプロセスルール
PDF版はこちら

(2)次に、実装されたCortex-A15のリビジョンは、Tegra 4がCortex-A15r2(Revision2)だったのに対して、Tegra K1ではCortex-A15r3(Revision3)へと上がった。マイクロアーキテクチャ上の拡張により、パフォーマンスが5~10%向上しているという。

Cortex-A15のアーキテクチャ
PDF版はこちら

(3)さらに、NVIDIAはCortex-A15の物理設計を完全に自社で行なっている。物理設計ではTegra 4での経験を経て、Tegra K1ではさらに向上させた。

 こうした改良によって、Tegra K1では、Tegra 4と比べて、CPUパフォーマンス(SPECint2K)は同電力時に約1.4倍、同パフォーマンスなら電力は45%にまで抑えることができたという。ちなみに、Tegra K1でのCortex-A15の最高クロックは2.3GHzだ。

 NVIDIAは、Tegra K1はCPUパフォーマンスの面でも、ライバルを凌ぐと主張する。直前のライバルであるQualcommのSnapdragon 800シリーズ(Tegra K1と同様に28HPMプロセス)よりも同電力(SoC+DRAM)時の性能に優れるとしている。

 また、NVIDIAはTegraシリーズでは、4コアのパフォーマンスコアと、1コアのパワーセービングコアの切り替えによるアイドル時電力の低減を行なっている。Tegra K1でもこれは継続される。4コアのパフォーマンスCortex-A15コアと、1コアのローパワーCortex-A15コアを組み合わせている。NVIDIAは、パフォーマンスコアとローパワーコアでは物理設計が異なっていると説明している。

一気にPCやHPCのGPUコアアーキテクチャに追いついたTegra

 従来のNVIDIAのモバイルGPUコアは、PC向けコアよりアーキテクチャ世代が大幅に遅れていた。Tegra 2/3のGPUコアはGeForce 7(G7x)アーキテクチャをモバイル向けに改良したものだった。頂点シェーダとピクセルシェーダに分離した、古いタイプのアーキテクチャだ。Tegra 4のGPUコアは、下の図のように、Tegra 2/3を拡張して特にピクセルパフォーマンスを高めたものだ。PC向けGPUと比べると、2世代くらい古いアーキテクチャを、さらにモバイル向けにカスタマイズしていたのが従来のTegra GPUコアだった。

Tegra 4のGPUアーキテクチャ
PDF版はこちら

 それに対して、Tegra K1のGPUコアは根本的な発想が異なる。基本アーキテクチャは現行のPC向けGPUのKepler(GK110系ではなくGK104以下のクラス)だ。しかも、GPUコアの演算クラスタである「SMX(Streaming Multiprocessor eXtreme)」のアーキテクチャは、ほぼPC向けのKeplerと変わらない。下の2枚のスライドを見ると、それがよく分かる。

NVIDIAのPC向けKepler(GK104系)のSMXのスライド
NVIDIAのTegra K1版KeplerのSMXのスライド

 PC版とTegra K1版で、Kepler SMXのユニットの構成がほぼ同じであることが分かる。演算ユニットやロード/ストアユニット、レジスタ、共有メモリなどの量、命令発行ユニットなどはPC版と同じに保たれている。これは、GPUコンピューティングでは最適化の部分を含めて、Tegra K1のGPUコアがPCやHPC(High Performance Computing)版と共通性が高いことを意味している。同じGPUコンピューティングのコードが、同じように走ることが期待できる。

 唯一目立つ違いはテクスチャユニットで、PC向けKeplerがSMX当たり16ユニットのテクスチャユニットを備えているのに対して、Tegra K1版KeplerはSMX当たり8テクスチャユニットとなっている。つまり、演算/テクスチャの比率が異なり、この点はグラフィックスシェーダに影響する。テクスチャユニットはダイ面積と電力を食うため、モバイルで削減した理由は分かる。

フル機能のGPUコア

 各SMXは、16-wayに構成されたCUDAコア(浮動小数点演算積和算&整数演算ユニット)を12ユニット備える。合計の32-bit単精度浮動小数点(FP32)演算ユニット数は192ユニットとなる。クロック当たりの浮動小数点演算オペレーションは384FLOP。これは、Tegra 4の頂点シェーダとピクセルシェーダのオペレーション数を合計した144FLOPの2倍以上の数となる。Tegra K1では、GPUコアの動作クロックは950MHz程度までを想定しており、ピークの演算性能は365GFLOPSとなる。

 Tegra 4ではROP(Rendering Output Pipeline)オペレーションをシェーダコア側で行なっていたが、Tegra K1では通常のGPUのように専用のROPユニットを備える構成に戻った。4個のROPユニットを備え、128KBのL2キャッシュを備える。また、ラスタエンジンも1ユニット備える。

 Tegra K1のGPUコアを一言で表せば、PC向けKepler GPUの機能をそのままにスケールダウンしたバージョンだ。また、パフォーマンスレンジも、ローエンドのディスクリートGPUクラスだ。ゲーム系のソフトウェア開発者にとっては馴染みが深い。

 そのため、NVIDIAはゲーム開発者やゲームエンジン開発者に、積極的に働きかけている。ゲームエンジンベンダーとの提携も発表。Epicの「Unreal Engine 4」のデモも公開した。CESのカンファレンスでは、NVIDIAのJen-Hsun Huang(ジェンセン・フアン)氏(Co-founder, President and CEO)が、Unreal Engine 3ではPC版をモバイル版にまで持って来るのに8年かかったが、今回のUE4ではたった2年で持って来ることができたと語った。

Tegra K1上でのUnreal Engine 4のLiving Roomのデモ
NVIDIAのJen-Hsun Huang(ジェンセン・フアン)氏(Co-founder, President and CEO)

PC向けKeplerコアのSMXの違いは

 Tegra K1のGPUコアは、単一のSMX (Streaming Multiprocessor eXtreme)で構成されている。KeplerアーキテクチャのPC向けGPUは、2個以上のSMXで構成されているが、モバイル版は単体SMXの構成となっている。Tegra K1 SMXの中の構成を、プロセッサのブロック図らしい形に編集したのが下の図だ。

SMXのプロセッサ
PDF版はこちら

 KeplerアーキテクチャのSMXは、実際には2つのクラスタが結合した形になっている。相似の実行ユニットクラスタが2つあり、その2つのクラスタに対して命令ユニットが交互に命令を発行する形になっていると見られる。あるサイクルに左側のユニット群に対して命令発行を行なうと、次のサイクルは右側のユニット群に対して命令発行を行なうといった具合だ。

 パッと見ると変な構成に見えるが、NVIDIA GPUアーキテクチャではこれが合理的だ。それは、NVIDIA GPUでは32スレッドずつ「warp」にバインドしてSIMT実行しているからだ。SIMT(Single Instruction, Multiple Thread)は、SIMD(Single Instruction, Multiple Data)型の実行スタイルだが、各スレッドに対してマスクレジスタによるフローコントロールの制御を行ない、見かけ上は個々のスレッドがそれぞれ自由にコントロールフローで分岐するように見せている。しかし、実際には32スレッドをまとめて同じ命令を実行する形には変わりがない。

 Keplerでは、実行ユニット側は16-wayの構成であるため、32スレッド分の命令発行には2サイクルが必要となる。そのため、命令発行は2サイクルに1回で済む。そこで、NVIDIAは2つのクラスタで1つの命令ユニットを共有させる形を採ることで、命令ユニットの重複を避け、より高い実行ユニット/命令ユニット比率にするアーキテクチャを採ったと見られる。

 PC向けのKepler SMX(GK104系)では、下の図のような構成になっている。16個のテクスチャユニットは、4ユニットのバンドルとして編成されており、合計で4バンドルを備える。それに対して、Tegra K1のSMXでは、テクスチャユニットは8ユニットとなっているので、先ほどの図のように4ユニットのバンドルが2つの構成になっていると見られる。

KeplerのSMX
PDF版はこちら

 ちなみに、Keplerアーキテクチャでは、テクスチャパスもロードに使うことが容易になっている。Keplerでは、テクスチャL1キャッシュはリードオンリデータキャッシュとして、テクスチャフィルタリングユニットをバイパスして使うことが可能だ。テクスチャパスの変更による、GPUコンピューティングへの影響も出る可能性はある。

 CUDAコアと呼ばれる演算ユニットは32-bit単精度浮動小数点(FP32)演算ユニットで、整数演算演算も可能。64-bit倍精度浮動小数点(FP64)演算も可能だが、32-bit単精度浮動小数点(FP32)演算に対して性能は1/24(1/6×1/4)になる。FP64のサポートは、あくまでも命令の互換性を保つためのもので、パフォーマンスを期待できるものではない。

 こうして見ると、Tegra K1のGPUコアが、フル機能のKeplerアーキテクチャであることがよく分かる。では、PC向けのGPUコアを、どうやって2WのモバイルSoCに収めることができたのか。そこには、プロセス技術やアーキテクチャなどの工夫がある。次の記事で、概要を説明したい。

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