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

Sandy BridgeとBulldozer世代のCPUアーキテクチャ



●2つのスループットコンピューティングの方向

 AMDのCPUアーキテクトであるChuck Moore(チャック・ムーア)氏(Senior Fellow)は、昨年(2008年)11月に開催されたCPUアーキテクチャのカンファレンス「Micro41」で行なったスピーチで、スループットコンピューティングへと向かうAMDの方向性を説明した。ただし、その中で、Moore氏は、AMDのスループットコンピューティングが、データ並列とタスク並列のどちらに寄るのかを明瞭にはしなかった。

 これは重要なポイントだ。Webサーバーのようなワークロードならタスク並列が適しているし、メディアプロセッシングや科学技術演算のようなワークロードならデータ並列が適している。具体的にはどうするのか、AMDのプレゼンテーションからは見えない。

 しかし、今のトレンドを見ると、Cell Broadband Engine(Cell B.E.)やIntelのLarrabeeのように、データ並列とタスク並列の組み合わせになりつつあるように見える。例えば、Larrabeeは、データ並列を強化したコアを多数並べてタスク並列ができる。トラディショナルな言い方をすれば、SIMD(Single Instruction, Multiple Data)とMIMD(Multiple Instruction, Multiple Data)の組み合わせだ。

 Larrabeeの命令セットは、GPUのそれと同じように、ベクトルスーパーコンピュータの影響を強く受けているが、ベクタ長は相対的に短い。その一方で、Larrabeeの各CPUコアは、通常のCPUと同じように、個別のスレッドを走らせることができる。データ並列とタスク/スレッド並列の中間に位置する。

ベクタプロセッシング
Larrabeeの概要
SIMDとMIMD

●クラスタに細分化されたプログラマブルGPU

 プログラマブルGPUも、長い目で見れば、その方向へと進化する可能性がある。現実には、今のプログラマブルGPUは、SIMDのプロセッサクラスタを複数内蔵しており、それぞれのSIMDクラスタは別個のワークグループを処理できる。分岐粒度を小さく保ち、効率を高めている。SIMDとMIMDの組み合わせと考えることもできる。

 ただし、現在のGPUでは、制御上の問題から、GPU全体で1つのカーネルプログラムしか実行できない。それぞれのプロセッサクラスタは、1つのカーネルプログラムを同期せずに実行しているが、異なるカーネルを走らせることはできない。NVIDIAのアーキテクトであるJohn Nickolls(ジョン・ニコルズ)氏(現Director of Architecture, Nvidia)は、同時に複数カーネルを実行するには、カーネル同士の依存性を検知しなければならないと説明している。

 厳密に言えば、GPUはグラフィックス処理では、頂点、ジオメトリ、ピクセル、それぞれ個別のカーネルプログラムを並列に実行できる。しかし、これは、頂点-ジオメトリ-ピクセルがひと連なりの処理であるため、依存の問題が発生しないからだ。各ワークグループ毎に走らせるカーネルの順番が決まっている。しかし、もし、コンピュテーションタスクのカーネルとグラフィックスタスクのカーネルを並列に走らせるすると、依存するケースが出てしまう。そのため、現在のGPUはこの2つの種類のカーネルは切り替えている。結果として、現状のGPUは依然としてラージSIMDマシンの性格をある程度保っている。しかし、構造的には、MIMDに片足をかけている。

GT200の概要

●データ並列の粒度とデータ並列ハードウェアの関係

 AMDのプレゼンテーションでは、データ並列とスループットコンピューティングについても論じている。下のスライドがそれだ。

データ並列とスループットコンピューティング

 (1)いちばん左はほとんどがシリアルコードのケース。ループも単純で、繰り返しのループがあまり見られない場合を想定している。この場合は、命令レベルで並列に並べ替えて高速化する余地があるが、データ並列に落とし込む余地はあまりない。

 (2)真ん中は、ファイングレインのデータ並列コードの例。このケースでは、シリアルコードの中にデータ並列化が可能な部分がある程度存在する。しかし、データ並列可能部分の粒度は小さく、例えば、16ピースのデータに対して16回のループ演算を行なうようなケースだ。この場合には、SSEのようなCPUに内蔵されたショートSIMDがうまく働く。上のケースなら、コンパイラレベルで、4wayのSIMDの4ループに変換する余地があるからだ。IntelとAMDが、それぞれのCPUコアの中のSIMDを強化しつつあるのは、このケースのためだ。

 (3)右はコースグレインのデータ並列コードの例。データ並列化が可能な部分の粒度が非常に大きく、例えば、シリアルに処理すると1M(100万)ピースのデータに対しての1M回のループになるような場合。あるいは膨大なデータの2Dアレイの演算など。この場合は、スループットコンピューティングに特化したベクタ演算エンジンにマップするのが適するという。この好例がGPUコンピューティングだ。

 3番のコースグレインのケースの場合は、ラージベクトルマシンの場合と同様にデータをセットアップ(またはスタートアップ)するオーバーヘッドがある。データブロックのセットアップなどで、GPUの場合は、ドライバオーバーヘッドの中に含まれている。そのため、粒度が充分大きくないと、ロスが大きくなり、並列化の利を減らしてしまう。

 これについては、AMDの元CTOだったPhil Hester(フィル・へスター)氏が、CTOだった2年前に説明している。

 「GPUのようなベクタエンジンでは、セットアップのための膨大なオーバーヘッドがある。そこを注意しなければならない。

 もし、あなたのコードの中で、ベクタ化できる部分が大きいなら、充分な性能アップが得られるだろう。なぜなら、ベクタによる高速化が、セットアップタイムを充分に埋め合わせることができるからだ。

 その一方、アプリケーションが充分に長いベクタコードを含まない場合。セットアップのロスと実行の高速化のトレードオフが問題になる。もし、ベクタが小さすぎる場合は、x86プロセッサの中のSSEリソースで実行した方が高速になるだろう。シリアルとパラレルが小さな粒度でミックスされているような場合はその方がいい。われわれは、並列データの特性がどんなものかを理解する必要がある」

 AMDやIntelが、ベクタサイズが比較的大きなスループットコンピューティングの研究開発を進めつつ、x86系CPUコアの中のベクタエンジンも強化している理由はここにある。

ベクタ粒度

●大型の汎用CPUコアの回りに多数のスループットエンジンを搭載

 ここまで来ると、2010年代のCPUのおおまかな構図が見えてくる。

 まず、汎用のPC&サーバー向けCPUは、今後はスループットコンピューティングを目指さなければならない。しかし、中核となるCPUコアは、現在のPC向けのCPUコアと似たような、単体のプロセッサ性能が非常に高い汎用コアとなる。そうした強力なコアを、1個または複数個搭載する。このメインコアでは、シングルスレッド性能は維持またはスローペースながら向上させる。AMDのプレゼンでは、このコアの候補として次世代Opteron(=Bulldozer:ブルドーザ)を挙げている。

 シングルスレッド性能の高いコアを搭載する目的は、(1)レガシーアプリケーションを充分な性能でサポートすることだけでなく、(2)スループットコンピューティングの際のセントラルコントローラとして充分な性能を発揮できるようにするためだ。ベクタのセットアップやスケジュールなどはセントラルコントローラの役割が大きくなるため、ここを強化しないとアムダールの法則のボトルネックになりかねない。

 強力な汎用コアの回りに、さらに多数の小型でパワー効率のいい、特定の分野に最適化したコンピュートオフロードエンジンを加える。このエンジンは、データ並列とタスク並列のバランスを取ることになると推測される。また、これらのスループット最適化コアは、必ずしもx86と互換のフロントエンドを持つエンジンである必要はない。元AMDのHester氏は、以前、部分的にはx86の命令空間にマップする可能性を示唆していたが、これは、どうなったのかまだわからない。

オフロードエンジンの追加
システムレベルインテグレーションのCPU

●システムレベルの統合へ

 これらのコア群に対して最適化したメモリシステムも用意する。メモリは共有され、最適化されたコア間のコミュニケーションと同期、データ転送の構造を構築する。最初からこれを目指すところが、GPUとの大きな違いだ。また、カギとなるメモリ帯域を確保するため、CPUのダイ(半導体本体)に、メモリのダイを重ねる3Dダイスタッキングが最終的には採用される可能性も高い。

 さらに、クライアントPC向けCPUの構成なら、スループットエンジン以外にもPCの諸機能が完全にCPUの中に統合され、ワンチップでPCのほとんど全てを構成できるようになる。DRAMコントローラとチップ間高速インターフェイスはすでに統合されているが、次はPCI Expressなど高速I/Oなどが統合されて行くだろう。半導体的に言えば、CPUがシステムLSI化する。

 その原動力の1つはCPUコアが余ってしまうことだ。CPUコアがCMOSスケーリングでプロセス世代毎に小さくなってしまうため、積極的に他の機能を取り込まざるを得ない。

余るCPUのダイ
AMDのプロセス別CPUコアサイズ

 また、CPUに搭載されるさまざまなリソースとイベントを管理するための、コントロールシステムも整備される。電力制御のためにプログラマブルなマイクロコントローラを搭載し、リアルタイムのモニタリングをベースに必要な部分にだけ電力が供給されるようになる。こうした、システム統合的で複雑なハードウェアの上に、ハードの複雑性を隠蔽して、プログラミングを容易にするためのプログラミングモデルが構築される。

 こうしたポイントの多くは、AMDだけでなくIntelも共有している。両社は、ある意味で同じ方向へ進んでおり、2010年代はスループットコンピューティングでの戦いとなるだろう。

AMD CPUの移行図
AMD CPUのダイサイズ移行図