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

アーキテクチャ改良で40倍の性能向上を目指すNVIDIAの「Maxwell」



●4年でGPUアーキテクチャを開発するNVIDIAサイクル

 NVIDIAは2013年に投入する次々世代GPU「Maxwell(マクスウェル)」アーキテクチャで、第2世代Tesla(テスラ)つまりGT200世代の約40倍前後のパフォーマンスを目指す。また、プリエンプションやバーチャルメモリ、GPUへのノンブロッキングなデータ転送などの機能も組み込んで行く。さらに、Maxwellの後の世代では、将来の高パフォーマンスARMコアを、ハイエンドGPUにも組み込む。メモリ技術では、シリコン貫通ビア(TSV:Through Silicon Via)によるメモリ積層化などの技術も視野に入れる。

NVIDIA CEO Jen-Hsun Huang氏

 先週米サンノゼで開催された同社のGPUコンピューティング技術カンファレンス「GTC(GPU Technology Conference)」で、NVIDIAはGPUの将来技術と性能向上の指標を示した。NVIDIAのJen-Hsun Huang(ジェンセン・フアン)氏(Co-founder, President and CEO)は、「Teslaに対してFermiは4倍、FermiとKeplerの間は3~4倍、KeplerからMaxwellはさらに3~4倍になる」、「MaxwellはTeslaに対して、約40倍になるはずだ」と語る。

 65nmのTeslaに対して、Fermiは1世代半進歩した40nm、Keplerは1世代進歩した28nmと公表されており、Maxwellはさらに1世代進んだ20nmになると推測される。「Keplerは来年(2011年)遅くに製造に入ると予測している。設計の進展は急速で、何百人ものエンジニアが取り組んでいる。Keplerの完成までに、数十億ドルの研究開発費をつぎ込むことになるだろう」(Huang氏)。

 2つの新アーキテクチャのうち、Keplerはフロムスクラッチ(ゼロからの開発)ではなく、Fermiの拡張版であると推測される。NVIDIAの現在のGPU開発サイクルでは、基本アーキテクチャの開発に4年かけているからだ。そして、同系のアーキテクチャを拡張したバージョンを2年で出すスタイルを取っている。

 例えば、2006年のG80(Teslaアーキテクチャ)の発表時には、NVIDIAは同アーキテクチャの開発に4年かけたと、NVIDIA FellowのDavid B. Kirk(デビッド・B・カーク)氏は語っていた。G80の発展版であるGT200は、2年後の2008年に登場した。Fermiアーキテクチャの場合は時期は明言されていないが、G80の開発が終わった頃からスタートしたと見られている。4年サイクルになったのはTeslaからで、G80以前のNVIDIAの開発サイクルはより短く、NV40は開発に2年半程度で2004年に登場した。Tesla以降は、それだけGPUアーキテクチャが複雑になり、開発にそれだけ時間がかかるようになっている。

 こうやってサイクルを概観すると、NVIDIAがアーキテクチャチームを2つ抱えていない限り、KeplerはFermiの発展版である可能性が高い。もっとも、もし発展版であっても、G80→GT200の時のような大幅な拡張が行なわれることは間違いがない。小幅な拡張ではないだろう。ちなみに、Fermiからは、グラフィックス向けの派生アーキテクチャ(GF104など)も分化している。マイクロアーキテクチャを大きく変更して下位の製品を派生させたのはFermiが初めてだ。それだけ、アーキテクチャの拡張性も高まっている。

NVIDIAの開発サイクル
PDF版はこちら
G80~GF100ファミリの派生
PDF版はこちら

●半導体技術の伸びを超えたNVIDIA GPUのパフォーマンスアップ

 Kepler、Maxwellとプロセスの1世代の微細化とともに新アーキテクチャへと移行する。その度に3~4倍のパフォーマンスアップ。NVIDIAはどうやって、これだけ急ピッチなパフォーマンスアップを実現するのか。

 半導体技術の進歩だけでは、NVIDIAの予告するパフォーマンスアップは得られない。下が、NVIDIA GPUのパフォーマンスカーブと、ムーアの法則によるトランジスタ増加のペースを比較した図だ。NVIDIAロードマップの方が急激に伸びている。

 「明らかに半導体業界(の進歩)だけでは、この(各世代3~4倍)伸びを提供できない。半導体の(プロセス微細化によるトランジスタ数の)伸びを遥かに超えるパフォーマンス/電力の伸びとなる。そのために、NVIDIAは学び続けている。あなたがた(開発者や研究者)から、(NVIDIA GPUの)どこにパフォーマンスボトルネックがあるのかを学んでいる。また、何が障壁で、それを超えるために何をなさなければならないのかを学んでいる。そうして得たアイデアを次の世代のアーキテクチャに注ぎ込むことによって、性能の向上を実現する」とNVIDIAのJen-Hsun Huang氏は語る。

NVIDIA GPUとムーアの法則の比較
PDF版はこちら

 では、どうやってNVIDIAはGPUのパフォーマンスを、ムーアの法則以上に伸ばすことができるのか。その答えは、Huang氏が次世代GPUのために選んだパフォーマンス指標にあると推測される。Huang氏のキーノートスピーチでは、各GPUアーキテクチャを、倍精度浮動小数点(FP)演算のサステイン(持続:Sustain)パフォーマンス/ワットで比較した。

 まず、演算精度は、グラフィックス処理で使う単精度演算ではなく、GPUコンピューティングで重要となる倍精度演算だ。パフォーマンスはピーク値ではなく、持続値を指標にした。それも、電力当たりのパフォーマンスで比較している。

 これらのことが、MaxwellまでのNVIDIAの開発戦略を明確に物語る。つまり、ハイエンドのGPUコンピューティング向け製品については、NVIDIAは倍精度演算性能を相対的に上げ、持続性能をピーク性能に近づけ、性能当たりの電力低減を図ろうとしている。そして、この指標の枠なら、NVIDIAにはパフォーマンスを上げる余地がある。

●倍精度浮動小数点(FP)演算性能を引き上げる?

 NVIDIA GPUでは、浮動小数点(FP)演算の中で64-bit倍精度のパフォーマンスを32-bit単精度に対して抑えてきた。もともと、グラフィックス処理では単精度または16-bit半精度(Half Float)しか使わない。そのため、Tesla(テスラ)世代では、単精度のパフォーマンスにフォーカスして、倍精度は単精度の1/8の性能しか持たなかった。Teslaと同系のアーキテクチャの最初の世代のG80は倍精度すら持たなかった。

 しかし、GPUコンピューティングにより最適化した現世代のFermiでは、倍精度が単精度の1/2のピークパフォーマンスに引き上げられた。これは、CPUのSIMD(Single Instruction, Multiple Data)演算ユニット並の比率だ(下位のグラフィックス向けFermiは、倍精度が1/12の比率に抑えられている)。

 そのため、NVIDIAがMaxwellの世代で、倍精度演算パフォーマンスを、単精度と同レベルに引き上げれば、それだけでピークパフォーマンスは2倍に伸びることになる。例えば、Kepler(ケプラ)からMaxwellで、トランジスタ数が2倍になると、理論上、プロセッサ数を2倍にできる。理論値は2倍になるので、そこでさらに倍精度演算性能を2倍にすれば、Maxwellの目標であるKeplerの3~4倍パフォーマンスに達することになる。

単精度と倍精度の性能比
PDF版はこちら

 もちろん、話はそう簡単には行かない。倍精度性能を増やすにはトレードオフがあるからだ。NVIDIAを率いるHuang氏は次のように説明する。

 「我々にはある程度のフレキシビリティが必要だ。(Maxwellの)倍精度演算の単精度演算に対する比率は、1/2かもしれないし、2/3あるいは3/4、または1対1かもしれない(笑)。いや、これは真実だ。なぜなら、厳然としたトレードオフがあり、そのために、我々は決定を下すことができないからだ。

 例えば、より多くのStreaming Multiprocessor(SM:NVIDIAアーキテクチャでのプロセッサコア)をGPUに備えたとしよう。その場合、メモリサブシステムが増えたSMをビジーに保てるだけのデータを供給できなければ、SMを減らすことになるかもしれない。その一方で、SMが少なくなれば、それぞれのSMの機能を増やす余地ができる。このように、メモリやGPUの構造によって、多くの選択肢がある」。

●GPUのピークBytes/FLOPの維持が大きな課題

 ここでHuang氏が指摘しているのは、プロセッサのBytes/FLOPの比率の問題だ。より正確に言えば、アプリケーションが要求するFLOP(演算オペレーション)に対するBytes(メモリアクセス)の比率(Bytes/FLOP)が、プロセッサのそれにマッチするかどうか。プロセッサ側のメモリ帯域/演算パフォーマンス(Bytes/FLOP)の比率が、アプリケーションの要求値より低いと、結局演算ユニットにデータを供給できないため、プロセッサはアイドルになってしまう。

 現在のGPUは、Bytes/FLOPの比率がかなり低いため、ピークパフォーマンスを達成できないアプリケーションもある。しかも、メモリ帯域の伸びは、プロセッシングパフォーマンスの伸びより遅いため、問題はどんどん悪化している。NVIDIAがGPU内部のメモリの量を増やして深階層化している理由はそこにある。下は、G80以降のNVIDIA GPUのメモリと演算リソースなどのバランスを示した図だ。グラフィックス製品の数字だが、GPUコンピューティング製品でも基本的な傾向は変わらない。

G80~GF100のメモリ演算比率比較
PDF版はこちら

 そして、倍精度演算は、この問題をさらに悪化させる。もし、NVIDIAが倍精度演算を単精度演算と同じパフォーマンス比に引き上げたなら、NVIDIAは2倍のメモリ帯域を必要とするようになる。倍のデータ量を必要とするため、メモリ帯域/パフォーマンス比率(Bytes/FLOP)を2倍に引き上げなければならない。つまり、プロセッサにとっては、倍精度のパフォーマンスが単精度の半分であるのが、メモリ帯域に対してはバランスがいい。

 「それ(Bytes/FLOP比率)が問題となる。この比率については、おそらく、(GPUの設計を)テープアウト(完成)させる時期の6カ月前まで、決定することができないだろう。もしかすると、テープアウトの1年前にわかるかも知れない。

 Maxwellについて言えば、我々は2012年になるまでは、そのトレードオフがどうなるのかを本当に知ることができない。トレードオフは他にもいくつもあり、それが設計と決断を難しくしている。今ここで、Maxwellの倍精度演算の比率を答えられないのは、話したくないからではない。2012年になるまで、我々にもわからないからだ」(Huang氏)。

 Huang氏の説明は、裏返せば、メモリ帯域の問題が解決できるなら、NVIDIAは倍精度演算パフォーマンスを単精度と同等に引き上げる可能性があることを示唆している。ただし、メモリ帯域を倍増させなければ、実効性能は上がらない。ハードルは極めて高い。

 しかし、メモリ帯域について、NVIDIAはシリコン貫通ビア(TSV:Through Silicon Via)技術を使った3つの方法を検討している。この話はポストGDDR5の話とも絡み、後の記事でレポートする。Maxwellに間に合うかどうかわからないが、NVIDIAが中期的にメモリ問題に対するブレイクスルーをつかむ可能性はある。そうなると、NVIDIAはメモリ帯域/パフォーマンス比については、倍精度演算性能を上げる自由を得ることになる。

 もちろん、倍精度演算をフル性能で行なうためには、内部インターコネクトやレジスタアクセス帯域やレジスタ量、演算ユニットそれ自体など、拡張しなければならない部分が山ほどある。これらは、倍精度演算の実効パフォーマンスという部分に絡んでくる。

●ピークではなくサステイン(持続)パフォーマンスを重視へ

 GTCのキーノートスピーチで、Huang氏は、性能の指標に、ピークではなく持続パフォーマンスを使った。Huang氏は、理由を次のように説明した。

 「Fermiアーキテクチャでは、非常に高い倍精度パフォーマンスをECC機能と共に実現した。Fermiの(倍精度の)ピーク性能は768GFLOPSで、持続性能は約500GFLOPSだ。我々が、特に注力しているのは、ピーク性能と持続性能の差をできる限り埋めることだ。アーキテクチャ効率を上げて行くために、何百人ものエンジニアが非常な努力をしている」。

 ここで出てきた768GFLOPSという数字は、Fermiアーキテクチャをフル構成で1.5GHzで稼働した場合の数値だ。つまり、製品(Streaming Multiprocessorが1個以上ディセーブルにされている)スペックではなく、アーキテクチャ上の数字だ。768GFLOPSに対して約500GFLOPSとなると、約65%、2/3の実効性能となる。前回の記事で、製品版Fermiのサステインパフォーマンスを2/3と見積もった根拠はここにある。

 もちろん、何をもって持続性能とするかという議論(アプリケーションによって極端に異なる)は出てくる。しかし、NVIDIAが、現行アーキテクチャでは持続性能がピークに遠く及ばないことを認め、それを引き上げる方向に進んでいることは確かだ。

 Fermiアーキテクチャでは、持続性能が2/3に落ちるのも不思議はない。Fermiでは、倍精度演算命令を発行するサイクルには、他の命令を発行することができない(下位のFermiは異なるが倍精度の性能比率が小さい)。そのため、ロード/ストアを演算と並列に行なうことができず、実効性能はかなり落ちてしまうからだ。また、すでに説明したようにメモリ帯域の制約が相対的にきついことも、実効性能の制約となっている。NVIDIAは、こうした難点を改良しようとしていると思われる。

FermiのWarpスケジューリング
PDF版はこちら

 もし、KeplerがFermiの拡張発展版なら、倍精度のサステインパフォーマンスは、Kepler世代で改善される可能性がある。倍精度演算の裏で、他のユニットに命令を発行できれば効率が上がるからだ。そのためには、NVIDIAはSM(Streaming Multiprocessor)内部のパスなどを拡張する必要がある。

 また、倍精度に限った話ではないが、命令発行機構も改良されるかも知れない。現行のFermiは各2サイクル毎に2命令発行(2warp分の命令)の命令ユニットを備えているが、実行ユニット側は2つの演算クラスタと1つのロード/ストアクラスタ、さらにSpecial Function Unit(SFU)やテクスチャユニットを加えると5つある。つまり、Fermiの命令ユニット構成では、内部パイプラインをビジーに保つことはできない。IPC(Instruction-per-Clock)は最大で2だ。

 ところが、下位のGeForce GTX 460(GF104)では命令発行が4命令に拡張されており、演算クラスタも3つに拡張されている。ターゲットにしているIPCは3(ピークは4)だ。こうした関係にあるため、Fermiをベースに命令ユニットを拡張すれば、IPCを引き上げることができる。ただし、これもメモリ帯域や内部メモリなどさまざまなバランスを取る必要がある。

WARPスケジューリングの変遷
PDF版はこちら
GF100のStreaming Multiprocessor(グラフィックス版)
PDF版はこちら
GF104のStreaming Multiprocessor(グラフィックス版)
PDF版はこちら

●クロックは引き上げずに並列性でパフォーマンスを上げる

 NVIDIAは、パフォーマンスの指標に電力当たりの数値を持ってきた。その理由について、Huang氏は、今後は、電力効率がすなわちパフォーマンスとなるからだと説明する。

 「これからは、パフォーマンス/ワット(Perf/watt)が、イコール、パフォーマンス(Perf)になる。なぜなら、電力消費は一定に止めなければならないからだ。誰も電力がこれ以上増えることを望んではいない。一定の電力の枠の中では、パフォーマンス/ワットが、パフォーマンスになる」。

 それなら、素直にパフォーマンスと指標に書けばよさそうなものだが、これには理由がある。NVIDIAは、電力消費を減らすことで、相対的にパフォーマンスをアップする方向に進んでいるからだ。つまり、省電力機能の拡張も、パフォーマンスの向上へと転化されることを強調している。

 NVIDIAは、低消費電力化では、パワーゲーティングなどの電力制御機構の拡充などとともに、内部パイプラインの見直しを行なう。パイプラインの深さを浅くすることで、プロセスが微細化してトランジスタが高速になっても動作周波数をほとんど上げず、並列性で性能を稼ぎ、電力効率を上げることを検討しているという。パイプラインを浅くすると、GPUのようなインオーダ実行のパイプラインでも電力面で利点がある。パイプラインステージ間のラッチ回路を減らすことで、電力面でのラッチオーバーヘッドを低減できるからだ。

 こうした改良のさらにその先では、CPUコアのGPUへの統合が待っている。NVIDIAは統合するコアの命令セットアーキテクチャとしてはARMを採用する。ただし、ARMの整数演算パフォーマンスが現在の約3倍に上がり、64-bitメモリアドレッシングがサポートされなければ無理だとHuang氏は語る。

 もっとも、ARMは3-wayスーパースカラのOut-of-Order実行マシン「ARM Cortex-A15」を発表している。Cortex-A15は、Keplerと同じ28nmプロセスで最高2.5GHz(HPプロセスの場合)で動作する。NVIDIAが統合できるARMコアは、視野に入りつつある。