後藤弘茂のWeekly海外ニュース
NVIDIAの最強モバイルSoC「Tegra K1」の省電力技術の秘密
(2014/1/9 00:00)
CPUからGPUへのオフロードが求められるモバイル
NVIDIAは、CUDAベースのGPUコンピューティングを可能にする新しいモバイルSoC(System on a Chip)「Tegra K1(Logan:ローガン)」を発表した。現在、モバイルSoCは、アプリケーションプロセッサ部分の強化だけでなく、GPUコア部分の汎用化へと猛進している。それは、GPUコアで汎用プログラムを走らせることが、今後のモバイルSoCの成功の鍵だからだ。Tegra K1は、NVIDIAのPC向けGPUと同アーキテクチャのGPUコアを載せることで、その潮流のトップランナーに躍り出た。
モバイルでは、電力の制約が厳しいため、CPUからより電力効率の高いハードウェアへのオフロードが求められている。CPUからGPUや固定機能回路へと処理を移せば移すほど、電力効率が上がり、バッテリセーブになる。PCではCPUにやらせても問題がない処理でも、電力が限られたモバイル機器ではCPUに処理させるとバッテリ駆動時間に影響が出る場合が多い。バッテリ駆動時間を延ばす(または維持する)ためには、できる限り多くの処理をCPUからオフロードしたい。CPUからのオフロードは、ダークシリコン問題(電力の制約からシリコン上でオンにできないエリアが広がって行く)を回避して、シリコンダイを有効に活用するためにも必須だ。
CPUからのオフロードでは、汎用性が高い現在のGPUコアは非常に重要だ。多くの処理をGPUコアに移すことができる。GPUの方がCPUより、電力効率は7~10倍も高いため、GPUにオフロードした方が圧倒的に有利となる。そのため、いったん移行が始まれば、モバイル機器の方がPCよりもGPUコンピューティングへの適用が急速に進む可能性がある。NVIDIAが、KeplerコアをTegraにもたらし、GPUコンピューティングの浸透を目指す背景には、こうした事情がある。
NVIDIAは今回、PC向けのハイエンドGPUボードでは250Wの電力を消費するKepler(ケプラ)アーキテクチャを、2WレンジのTegraに統合した。GPUは消費電力が多いイメージもあるが、それは演算性能も数TFLOPSと桁外れに高いからだ。演算性能に対する電力効率は極めて高い。
とはいえ、Unreal Engine 4が動作するようなGPUコアを2Wのレンジに収めるには工夫が必要だった。Keplerをモバイル機器に載せると聞くと、消費電力が跳ね上がり、バッテリ駆動時間が極端に限られると思うかも知れないが、実際にはそうではない。NVIDIAはKeplerで省電力を達成できたから、モバイルSoCに載せてきた。GPUコアの電力効率では、ライバルとなるiPhone 5SのA7のPowerVR 6400コアや、Xperia Z UltraのSnapdragon 800のAdreno 330コアと比べると、圧倒的に電力効率が高いと主張している。
プロセス技術や回路設計、電圧の低減などでSMXの電力を削減
KeplerアーキテクチャではGPUのプロセッサコアは「SMX (Streaming Multiprocessor eXtreme)」という単位でまとめられている。1個のSMXには192 CUDAコア(FMADユニット)が搭載されており、Tegra K1ではピークで365GFLOPS(950MHz時)のパフォーマンスとなる。Tegra K1では、1ユニットのSMXを搭載している。SMX自体の構成は、PC向けKeplerとほぼ同じ。目立つ違いは、テクスチャユニットの数が半分になっている点だけだ。では、NVIDIAはこのコアをどうやってモバイルSoCに搭載できる電力にまで省電力化したのか。
PC向けのKepler系ディスクリートGPUでの最小構成は「GeForce GT 740M」。これは2個のSMXを備えたKepler GPUで、Tegra K1のような1個のSMXの構成のKeplerダイはPC向けでは存在しない。NVIDIAによると、740MのGPUダイ自体の電力は約19Wだという。そのうち、約3WはGPUコア以外のメモリインターフェイスやPCI ExpressといったI/Oやその他の電力消費分だという。純粋にGPUコアだけの電力消費は16Wとなる。
現在のハイパフォーマンス向けプロセス技術の場合、アクティブ時の電力のうちかなりの部分をリーク電流(Leakage)が占める。ダイの温度が上がるとリーク電流が増えるため、温度の高いピーク時の電力の多くをリークが占める。GeForce GT 740Mの場合は、16Wの電力のうち約6Wがリーク分だとJonah Alben氏(SVP, GPU Engineering, NVIDIA)は説明する。
しかし、リーク電流は、リーク電流が少ないモバイル機器向けのプロセス技術を選び、駆動電圧を下げ、温度を抑えることで大幅に減らすことができるという。Tegra K1は、リーク電流が低いモバイル向けの28nm HPMプロセスを採用しているため、通常のパフォーマンスプロセスを使うPC向けGPUよりリーク電流が少ない。さらに、電圧と温度を下げるためリーク電流を抑えられる。16Wからリーク電流の6W分を差し引くと、残りは10Wとなる。2 SMX構成のリーク分を抜いた電力が10Wなので、1個のSMXの分は計算上は約5W程度になるという。
Tegra K1のKeplerコアは最初のPC向けのコア設計時から成熟度が高まっており、より効率が高く、より小さなコアになっているという。そのため、電圧を落としても、相対的に高いパフォーマンスを維持できる。駆動電圧を1.1Vから0.9Vに落とせば、それだけで60%台にまで電力を落とすことが可能になるという。アクティブ電力は電圧の2乗に比例するため、単純計算では電圧低減だけで3W台にまで電力を減らすことができることになる。
このように、プロセス技術オプションや物理設計のチューン、電圧の低減などによってKepler SMXの電力を抑えることが可能になったという。実際には、アーキテクチャ面でもTegra K1のGPUコアには省電力技術が織り込まれている。その結果、さらに電力消費を抑え込んで2W以下のレンジに持ってきている。
補足すると、フルにパフォーマンスを活かす場合はSoC全体で平均が5Wとなる。あとは、CPUコアの電圧と動作周波数を切り替える「DVFS(Dynamic Voltage and Frequency Scaling)」のポイントをどう設定するかはOEM次第となる。OEMによってはTDP(Thermal Design Power:熱設計消費電力)に合わせて周波数を抑えることになる。そのため、全てのTegra K1マシンがフルの性能を常に出せるわけではないのは、他のモバイルSoCと同様だ。
内部ファブリックを再設計して電力を抑える
アーキテクチャ面でのTegra K1 GPUコアの最大の省電力化は、SMX以外の部分、SMXと他のユニットとのインターコネクトのファブリックの設計にあるという。NVIDIAはKeplerのSMX自体は省電力に設計したが、実はPC向けGPUではファブリックは省電力性よりもスケーラビリティを重視して設計した。そのため、ファブリック部分の電力消費がバカにならない量になっているという。
もともと、PC向けKeplerは最大構成では15個のSMX、メインストリームGPUでも8個のSMXを搭載している。SMX群は、複数のメモリコントローラと、そこに付随するL2キャッシュ群とROP(Rendering Output Pipeline)ユニット群に接続されている。また、2個または3個のSMXでラスタエンジンを共有するGPC (Graphics Processing Cluster)を構成している。
これらユニット群が多数の広帯域ポートを持つ複数のクロスバースイッチで接続されている。ファブリックはスイッチングのためのキューもそれぞれのポートに大量に備え、スイッチングを調整するための大規模なアービトレーション回路を備える。多数のユニットを接続した場合の効率が非常に高いものの、電力の消費も大きい。
PC向けGPUでは、大型のGPU向けに設計したファブリックをスケールダウンして小構成のGPUにも使っていたという。しかし、Tegra K1ではSMXはたった1個で、L2キャッシュも1個、ROPも4ユニットであるため、複雑なファブリックは必要としない。そこでファブリックは完全に設計し直し、シンプルで電力の消費の低いものに置き換えたという。
この設計変更で、かなりの電力削減が達成できたのは、大規模な並列プロセッサであるGPUではファブリックの比重が高いからだ。NVIDIAのAlben氏は「サーバー向けのネットワークスイッチと家庭向けのLANスイッチが違うように、PC向けとTegraではファブリックが異なる」と説明する。
このほか、回路設計面では、パワーゲーティングを強化した。Jonah Alben氏によると、Tegra K1のパワーゲーティングは2レベルになっており、コア単位でのパワーゲーティングの他に、ボルテージレギュレータからのパワーレイル単位で落とすレイルゲーティングも行なっているという。これによって、復帰レイテンシはより長いが、電力削減はより大きなパワーゲーティングモードを追加したという。このほかにも多数の細かな省電力設計が加えられている。
もともと電力効率第一で設計されたKeplerコア
こうして見ると、意外なことに、NVIDIAはKeplerに大改造を行なうことなくモバイルに移植できたことが分かる。ファブリックや細部はさまざまな工夫がなされているものの、KeplerのSMX部分の基本アーキテクチャには手を加えていない。これは、Keplerがもともと電力効率を高めることにフォーカスして設計されたGPUアーキテクチャだったから可能になった。
NVIDIAはG80からFermiまでは、ダイ面積当たりのパフォーマンスに最適化した設計を採った。しかし、Keplerからはパフォーマンス/電力に最適化した設計へと、根本的な発想を切り替えた。いわば、設計の大転換点がKeplerだった。
Keplerでは、NVIDIAはコントロールロジックのオーバーヘッドの削減と、パイプラインオーバーヘッドの削減を行なった。ダイ上のコントロールロジックの比率が大幅に下がり、その分を演算ユニットに割けるようになり、個々の演算ユニットの消費電力も大幅に下がった。
まず、Keplerとそれ以前のNVIDIAのPC向けGPUでは、命令スケジューリングの手法が異なっている。Keplerでは、FermiまでのNVIDIA PC向けGPUでのハードウェアによる複雑な命令スケジューリング機構を簡素化し、ドライバソフトウェア(コンパイラ)ベースのプリスケジューリングに切り替えた。これまでは、NVIDIA GPUのプロセッサ単位である「SM(Streaming Multiprocessor)」の中にある命令ユニットが、スコアボーディングによって、レジスタを監視してデータが有効になった命令から実行する仕組みを採っていた。
Keplerでは、この仕組みを一新。スコアボードで管理する命令は、ロードやテクスチャフェッチのような長レイテンシ命令だけにし、レイテンシが固定されている命令については、CPU側で走るドライバソフトウェアのコンパイラで管理するようにした。コンパイラは、GPUネイティブ命令に変換する際に、レイテンシ情報や命令間の依存性の情報をネイティブ命令に埋め込んでしまう。GPUハードウェア側は、それをチェックして、実行できるタイミングで命令を取り出す。モバイルのアプリケーションプロセッサでは、以前はGPUのドライバの処理が重かった。しかし、Kepler GPUコアと組み合わせるCPUコアは、現状ではCortex-A15以上なので、コンパイラの作業を増やしても問題がない。
従来のNVIDIA PC向けGPUでは、シェーダ演算コアのパイプラインを深くすることで、演算コアを高クロック動作させていた。そのため、パイプラインを細分化することでラッチ(Latch)回路が増え、しかも倍クロックで動作するため、消費電力が増大し、パフォーマンス/電力が低下していた。
NVIDIAはKeplerではパイライン段数を半分に減らして、パイプライン中のラッチを減らした。動作周波数の上限を抑える代わりに、演算コア数を増やすことでパフォーマンスのバランスを取った。ラッチとクロッキングの電力消費を減らすことで、電力効率を高めた。
こうしたKeplerの電力効率設計のベースがあって、Keplerのモバイル版コアは実現した。Jonah Alben氏によると、実際にはKeplerを開発していた段階では、モバイル版まで作ることは計画されていなかったという。しかし、Keplerの電力効率が高いため、モバイルにも移植できた。
さらに、Keplerの次のMaxwell(マクスウェル)アーキテクチャ以降は、最初からモバイル版にスケールダウンすることを考えて設計されているという。つまり、今後は、NVIDIAのPC向けGPUアーキテクチャが刷新されると、すぐ後を追いかけてモバイルSoC向けGPUも同アーキテクチャに揃うことになる。また、こうした設計思想の変更は、ムーアの法則が鈍化しつつあることへの対応でもあるという。
ジオメトリ圧縮となるテッセレーション
Tegra K1のKeplerコアは、グラフィックスの固定機能の面でも電力効率が高い。よりリッチなグラフィックス表現を、より少ないメモリ帯域で実現できるようにしたことも、表現能力に対する電力を低減している。
GPUでは、チップ内部のプロセッシングよりも、外部のDRAMへのアクセスの方が電力を消費する。演算よりデータの移動の方が、電力面ではコストが高いのが現状だ。そのため、省電力の要は、いかにオフチップメモリアクセスを抑えるかにかかっている。
Tegra K1では、相対的にプロセッシング能力に対して大きな128KBのL2キャッシュメモリを搭載したことは、外部メモリアクセスを減らす役に立っている。特にNVIDIAアーキテクチャの場合は、全てのプロセッシングがユニファイドL2でキャッシュされる。
また、旧世代アーキテクチャのTegra 4までのGPUコアと比べると、グラフィックスパイプの各段階で省メモリアクセスの技術が織り込まれていることも電力低減に利いている。ただし、これはモバイル版Kepler独自の機能ではなく、Keplerアーキテクチャ自体の利点だ。
DirectX 11世代のKeplerアーキテクチャでのモバイルでの大きな利点は、ハードウェアテッセレーションだ。テッセレーションを使うと、GPU内部で頂点を生成するため、より緻密なグラフィックスを、より少ない頂点データで実現できる。モバイルでは、テッセレーションは、ジオメトリデータ圧縮の効果の利点が大きい。同じことは、プリミティブを生成するジオメトリシェーディングにも言える。同じ程度のメモリ帯域とメモリアクセス電力で、よりリッチなディテールのグラフィックスを実現できるからだ。
テッセレーションは、NVIDIAのようなイミーディエイトアーキテクチャを取るGPUでは特に有利だ。なぜなら、生成した頂点をいったん外部メモリにストアする必要がないためだ。テッセレーションによって増殖した頂点データが溢れた場合も、オンチップメモリで拾うことができる。そのため、テッセレーションによってメモリアクセス消費電力が増える可能性が低い。
GPUへのオフロードで3Dゲーム以外のグラフィックス処理も省電力化
そのほか、Keplerグラフィックスパイプラインでは、無駄なプロセッシングを削減するZカーリングや、メモリアクセスの帯域を減らすZバッファの圧縮、テクスチャ圧縮、カラー圧縮などさまざまな部分に無駄を削減する仕組みが織り込まれている。ちなみに、テクスチャ圧縮ではASTCがTegra K1から加わっている。
NVIDIAは、こうしたKeplerグラフィックスパイプラインの機能は、3Dグラフィックスだけでなく、一般的なディスプレイ描画全般での省電力化に役立つと説明している。例えば、カラー圧縮によってUI描画のメモリ帯域も大幅に圧縮できると言う。もっとも、モバイルGPUコアのPowerVRを開発するImagination TechnologiesやMaliを開発するARMも似たような説明をしており、今後のトレンドとなる可能性がある。
また、NVIDIAはTegra K1の有効な使い方として、2DのベクタグラフィックスをGPUで処理する「GPU Accelerated Path Rendering」も推奨している。Webレンダリングのような処理でも、GPUにオフロードすれば電力効率を上げることができる。
ここで重要なのは、3Dグラフィックス以外のグラフィックスでも、GPUへのオフロードが電力効率向上のカギとなる点だ。この発想は、GPUコンピューティングとも共通している。できる限りGPUへと処理を移し、ハードウェアベースのデータ圧縮などGPUの機能も使うことで、電力効率を上げようという流れだ。
CUDAがフルに走るKeplerアーキテクチャで、NVIDIAのTegraファミリは新世代に差し掛かった。対抗するモバイルGPU IPベンダ各社も、それぞれ汎用コンピューティング機能の強化を進めている。NVIDIA以外の主要モバイルGPUコアは、いずれもHSA(Heterogeneous System Architecture)に加わっている。プログラミング&実行モデルでは、CUDA対HSAの構図になろうとしている。