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

IntelのスカラCPU+LarrabeeのヘテロジニアスCPUビジョン



●ヘテロジニアスへと向かうIntel
Justin R. Rattner氏

 Intelは、データ並列重視型のIA(x86)メニイコアCPU「Larrabee(ララビー)」をどのようにCPUに統合して行くのか。その方向性が見えてきた。IntelのCTOであるJustin R. Rattner(ジャスティン・R・ラトナー)氏(Senior Fellow, Vice President, Director of Intel Labs, Intel Chief Technology Officer, Intel)が、今年(2009年)10月の記者会見でLarrabee型のアーキテクチャを統合した将来CPUのビジョンを示したからだ。

 Rattner氏のビジョンでは、メインの大型CPUコアは8-wayのSIMDユニットを実装、それに小型のLarrabeeタイプのCPUコアを多数統合する。小型コアにはLarrabeeのような16-way SIMDか、さらに広い32-way SIMDを実装する。もちろん明確な製品計画ではないが、このビジョンからは、Intelがどのような方向性でCPUの将来を考えているかがよくわかる。

 PC向けCPUでは、データ並列コアの統合による「ヘテロジニアス(Heterogeneous:異種混合)コンピューティング」化は、もはや明瞭な方向となっている。例えば、AMDは、11月のAnalyst Dayでも、ヘテロジニアスコンピューティングを大々的に謳い、データ並列コアを汎用に使う方向を示した。

 AMDは2011年に投入するAPU(Accelerated Processing Unit)から、CPUとGPUの統合でヘテロジニアス化を目指す。Intelも同様に2011年の「Sandy Bridge(サンディブリッジ)」からGPUコアを統合する。GPUを統合するという点では、両社の方向は一致している。それは、CPUのパフォーマンスを伸ばす方法として、データ並列コアを取り込むことが近道だからだ。

Sandy Bridgeのダイレイアウト
CPUのトレンドと性能向上

 もっとも、AMDの現状のGPUコアは、実際にはグラフィックスに偏重しており、NVIDIAほど汎用コンピューティングに最適化はされていない。その点は、IntelのSandy Bridgeも同様で、現状の統合グラフィックスコアとほぼ同じものをCPUに入れ込む。真にヘテロジニアスコンピューティングへ最適化した統合は、両社とも次のステップとなる。そして、Intelは、そうした方向で開発を進めたLarrabeeアーキテクチャを持っている。

●64コアのLarrabeeのシミュレーション

 IntelはLarrabeeを開発するに当たって、Larrabeeを単体の製品としてだけでなく、ある程度の移植性を持つように設計した。Larrabeeの新しい命令拡張である「LNI(Larrabee New Instruction)」自体は、製品としてのLarrabee専用ではなく、x86命令セットの拡張として他のCPUコアにも実装できる。Larrabeeの実体は、製品としてのLarrabeeプロセッサではなく、IAの新しいベクトル演算拡張命令だ。

 現在公開されているLarrabeeの実装は、Pentium(P54C)をベースにしたスーパースカラパイプに、LNIを実装したCPUコアを備えたものだ。では、Larrabeeの次の発展は、LNIを別なCPUに実装する方向へ向かうのか、それとも現在のLarrabeeコアを発展させる方向へ向かうのか。

LarrabeeとPentiumの比較
CPU命令セットアーキテクチャの進化

 Intelから離れたPatrick(Pat) P. Gelsinger(パット・P・ゲルシンガー)氏(元Senior Vice President and General Manager, Digital Enterprise Group)は、かつて、LNIはPC用のCPUコアに実装することも、現状のLarrabeeコアをCPUコアと混載することもできると語った。Rattner氏も、同様の説明をしている。

 「Larrabee New Instruction、LNIは、さまざまなパフォーマンスレベル、パワーレベル(のCPU)に実装することができる。LNIをフルフィーチャのCPUに入れて、拡張型の汎用CPUを作ることもできるだろう。ただし、少なくとも、近いうちにはそうした試みをするつもりはない。今のところは、Larrabeeでどこまでできるかを、注意深く見ている。シングルコアLarrabee、デュアルコアLarrabeeといった具合に増やして、……『IEEE Visualization 2009』で発表した共同論文では、64コア版のLarrabeeまで研究していたと思う」。

●メインCPUコアは8-way、サブCPUコアは16/32-wayのベクトルエンジン

 技術的にはLNIをどのIA CPUにも実装できることはRattner氏も明確に認めている。しかし、当面は、現在のLarrabeeアーキテクチャのCPUコアを増殖させる方向を見ていることがわかる。Rattner氏が言及した論文「Mapping High-Fidelity Volume Rendering for Medical Imaging to CPU, GPU and Many-Core Architectures」では、現在のシリコンであるLarrabee 16コアの構成の他に、32コアと64コアの構成のシミュレーションがされている。Larrabeeのリングバスは、リング数を増やしてコア数を増やすことができるアーキテクチャとなっている。Sandy BridgeのようなPC&サーバー向け汎用CPUに、Larrabeeを取り込む計画は、現状では持っていないようだ。

 Rattner氏は、CPUのダイにデータ並列コアを統合する場合に、どうやって統合するのかという質問に、次のように答えている。

 「Larrabeeの命令セットをフルフィーチャのCPUに統合することもできるが、そこには問題がある。それは、すでに大きなプロセッサコアに、大きなSIMD(Single Instruction, Multiple Data)パイプラインを加えて、さらに大きなプロセッサを作ることになってしまうからだ(笑)。

 このトレードオフが望ましくないのは、そうしたSIMD拡張ベースのエンジンで走らせたいコンピュテーションが、大型CPUコアのスカラ演算パフォーマンスを必要としないことだ。だから、少なくとも近々では、我々はコア毎に最適化する方向にいる。大きなSIMDエンジンを持つコアでは、スカラパフォーマンスを下げることで、コアサイズを小さくする。それによって、コア自体を多数に増やす。

 そのため、近い将来は、おそらく、大きなコアが8-wayのベクトルエンジン、スモールコアは16または32-wayのベクトルエンジンという組み合わせになるだろう。すると、トータルパフォーマンスが高くなり、電力効率のいいアーキテクチャになる」。

 ポイントは、Rattner氏がヘテロジニアスのIAコアの構成を明確に言い切っている点。Rattner氏は以前から、命令セット的には共通ベースで、性格が異なるコアを統合した構成になると説明していた。OSなどシリアルコード向けのスカラパフォーマンスを重視したコアと、データ演算向けにベクトルパフォーマンスを重視したコアの2本立てと見られる。今回は、それがより明瞭な形で示された。

●LNIを実装したCPUの姿

 Rattner氏のビジョンを図式化すると、下の図のように同じIA命令セットで、異なる命令拡張と異なる実装を持つコアが混在する。メインのラージIA CPUコアは8-wayまでのベクトル命令を備える。それとは別に16-way/32-wayのベクトル命令をサポートするデータ並列に最適化したスモール IA CPUコアが多数並ぶ。制御と演算という役割分担的にはCell Broadband Engine(Cell B.E.)と発想が若干似ているが、1つのCPUで2つの命令セットのCell B.E.と異なり命令セットはある程度まで共通化する。

Intelの将来のCPU

 IntelはSandy Bridge世代から単精度で8-way(256-bit)のベクトル命令拡張AVX(Advanced Vector Extensions)を実装する。Sandy Bridge世代が、実際に256-bit幅のSIMD演算ユニットを実装するかどうかはわからないが、命令的にはメインのCPUコアは8-wayのベクトルへと向かう。Rattner氏の言葉は、当面はメインのCPUコアはAVXの8-wayに留まることを示唆している。

 その一方で、データ並列に最適化したLarrabeeコアはIA命令セットに加えて単精度16-way(512-bit)のベクトル命令拡張LNIを備えている。Rattner氏の発言からは、現在のLarrabeeコアのように、スカラ演算ユニットはシンプルで、ベクトル演算ユニットを強化したコアをCPUに載せる方向で考えていることがわかる。

 Larrabeeの研究では、Larrabeeのようなシンプルなスカラパイプと広いベクトルパイプの組み合わせのコアは、PC&サーバー向けの大型CPUコアの4分の1以下のダイサイズで済むとされている。つまり、4分の1以下の面積で2倍のベクトル演算パフォーマンスを得ることができる。ベクトル演算は、小さなコアでも演算コアさえ大きくすれば性能を上げることができる。

 一方、整数演算を主眼としたスカラ演算パイプのパフォーマンスは簡単には上げられない。整数演算のパフォーマンス向上については、IntelのCPU設計の法則『ポラックの法則(Pollack's Rule)』が参考になる。同法則では、CPUのサイズを大きくしても、整数演算パフォーマンスは平方根程度にしか向上しないとされている。2倍のサイズのCPUなら、性能は1.4倍程度となり、性能効率が悪くなる。そのため、整数パフォーマンスをあまり必要としないアプリケーションをターゲットにするCPUでは、スカラパイプはできるだけシンプルにやめた方がいい。ポラックの法則に従えば、4分の1のサイズのCPUコアなら、整数演算パフォーマンスは2分の1となる。

ポラックの法則。性能と消費電力、ダイサイズの関係

●各社で異なるデータ並列コアの命令の実装

 Intelがヘテロジニアス型のマルチコア構成を展望に入れている背景には、こうした事情がある。ここで一応概略として、PC市場でIntelが争う、他の2社のアーキテクチャ方向性と比較しよう。

 NVIDIAはPCクラスのCPUコアを持たないため、CPUとGPUの統合はありえない。また、CPU命令セットとは完全に別個にGPUの命令セットを設計している。CPUとGPUのやりとりは、CPU側で走るランタイムでコンパイルしたカーネルプログラムを、GPUにダウンロードする方式だ。

 CPUとGPUにはネイティブ命令セットの共通性もないし、CPUの命令ユニットからGPUに直接命令を発行することもできない。NVIDIAの場合は、ヘテロジニアスコンピューティングと言っても、システムレベルに留まる。チップレベルではない。これはNVIDIAの弱点だが、自由なチップ設計ができるという利点でもある。

 AMDも現在はこの方式だ。APU(Accelerated Processing Unit=Fusion)になると、CPUコアとGPUコアは同じダイに統合され、同じ物理メモリを共有するようになる。しかし、プログラミング上では、GPUにランタイムを通じてアクセスすることは変わらないと見られる。

 しかし、AMDの元CTOだったPhil Hester(フィル・へスター)氏は、以前のインタビューで、将来はx86命令セットの中にGPU命令をマップする可能性を示唆していた。これは、CPU側の命令ユニットからGPUに直接の命令発行が可能になることを意味している。一見、IA命令セットにLNIを入れ込んだIntelと似たように見えるが、大きく違う。

 AMDの構想では、GPUコアはあくまでもコプロセッサであり、「GPUコア側にx86命令を実装はしない」とHester氏は語っていた。ちょうど、GPUコアはx87コプロセッサのような扱いで、CPUの命令の一部がGPUコアで実行される。「例えば、SSE5(当時AMDはAVXとは異なるSSE5を実装する方向だった)命令はGPUコアで実行されるかもしれない」といった具合だ。現在のようにCPUからカーネルをダウンロードして走らせることもできるし、CPU側から直接命令をディスパッチすることもできる仕組みを考えていた(現在も考えている?)と見られる。AMDのBulldozerのアプローチを見ると、こうしたアーキテクチャを取る場合には、GPUコアはCPUコア間の共有リソースになることが予想される。ただし、そのためには、AMDはGPUコアのアーキテクチャ自体を大きく変えなければならない。

 それに対して、Intelはx86を実装した小型のデータ並列コアを用意するLarrabee方式を継続すると推定される。AMDとの違いは、Larrabeeコアは独立してIA互換のスカラ演算コアを持ち、OSも走らせることができる。メインのCPUコアの命令ユニットから命令を発行するスタイルではない。

●まだ帰着点が見えない新時代のSIMDの演算幅

 Rattner氏の発言で、もう1つ面白いのは、データ並列重視コアにおいて、16-wayだけでなく、32-wayのSIMDの実装も示唆している点。これは、Intelが現在のLNIの16-wayのSIMDが、最終的な解答であるとまだ決定していないことを示唆している。

 現在は、各社のプロセッサのベクトル長は、AMDが64-way、NVIDIAが32-way、Intelが16-wayと分かれている。PC側はベクトルで処理する要素を多くする方向へ、GPU側は要素を少なくする方向へ向かい、16から64のどこかに帰着点を見つけようとしている。SIMDで処理する幅が広ければ広いほど、プロセッサの構造は効率的になるが、その逆にプログラムの制御は非効率になってしまう。プログラムが分岐する場合の分岐粒度が大きくなるからだ。データ並列の場合、ベクトル分岐をサポートしていても、ベクトル中の各スレッド(Larrabee用語ではストランド)の分岐方向が分かれる場合は、実行時間にロスが出るからだ。

 例えば、レイトレーシングなどの場合には分岐が発生するので16-wayあたりが効率がよく、32-wayでもまあまあだが、64-wayは効率がかなり悪くなるという。しかし、伝統的なグラフィックスのように分岐方向が限られていると、64-wayの方が効率がよくなる。今後のアプリケーションにとってのスイートスポットとなるベクトル長については、まだ明確な指針ができていない。Intelも16-wayが決定打と考えていないことが透けて見える。

ベクタプロセッシングの違い
ベクタの粒度

 こうして見ると、IntelがLarrabeeの技術をPCとサーバー向けCPUに統合する場合の大まかな方向性は見えてくる。しかし、現実的には、まだLNIをIntelのメインCPUに統合する方向が決まっているわけではない。それどころか、Larrabeeを推進していたGelsinger氏は、もはやIntelにおらず、Larrabeeの単体製品すらいつリリースするのか見えない。製品としてのLarrabeeだけでなく、LNI自体の行方も不確かだ。とはいえ、PC向けCPUはヘテロジニアス化を急がなければならないことも確かで、LNIに絡むIntelの今後の動きは重要なポイントとなる。