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

ついにベールを脱いだAMDの「Bulldozer」と「Bobcat」



●AMDがカンファレンスとWebで新CPUアーキテクチャを発表

 AMDは2011年のCPUコアである「Bulldozer(ブルドーザ)」と「Bobcat(ボブキャット)」の概要を発表した。AMDは、2011年にBulldozerコアのCPUファミリをサーバーとパフォーマンスデスクトップに、BobcatベースのAPU(Accelerated Processing Unit)をノートPC/ネットブック市場に投入する予定だ。米スタンフォードで開催されたチップカンファレンス「Hot Chips 22(A Symposium on High Performance Chips)」では、AMDは両CPUコアの技術的な内容をある程度明らかにした。また、AMDは同時にWebサイトでもBulldozerとBobcatの大まかな概要を公表した。

Mike Butler氏(AMD Fellow, Chief Architect, Bulldozer Core) Hot Chipsの会場となったStanford大学のMemorial Auditorium
BulldozerとBobcatの対象セグメント

 AMDはBulldozerとBobcatについて、簡略な構造を昨年(2009年)11月のアナリスト向けカンファレンス「2009 Analyst Day」で明らかにしている。今回のHot Chipsでは、BulldozerのCPUモジュール(結合した2CPUコアのモジュール)の内部と、Bobcat CPUコアのパイプライン構成などが明らかにされた。しかし、Bulldozerの全体構成の詳細や、BobcatのSoC(System on a Chip)の概要(統合されるGPUコアの規模など)は明らかにされなかった。

 つまり、BulldozerとBobcatのCPUコアの中身は見えてきたが、製品としての最終形はまだ見えない状態だ。しかし、AMDは公式ブログでBulldozerのサポートメモリタイプ(DDR3 1.25Vのサポート)などの情報も明らかにしつつある。そのため、今回は、学会やイベントでの情報公開以外の方法で、新CPUの概要を公開して行くと見られる。

AMD CPUアーキテクチャの推移(PDF版はこちら)

●動作周波数が上がる可能性が高いBulldozer

 Hot Chipsでの発表から、BulldozerとBobcatのCPUコアの概要は見えてきた。

 Bulldozerは、2個のCPUコアを統合したCPUモジュールで2スレッドを実行する。1個のCPUモジュールの中に2個の整数コア(Integer Core)とL1キャッシュを備え、2スレッドを並列実行する。一方、浮動小数点ユニット群(FP Units)や命令デコーダ(Instruction Decoder)、L2キャッシュなどは、CPUモジュールに1個(または1グループ)づつで、2スレッドの共有リソースとなっている。1コアで2スレッドを実行するHyper-ThreadingのようなSMT(Simultaneous Multithreading)技術と異なり、それぞれのスレッドの整数演算を実行するコアは完全に分離されている。

マルチスレッディング技術の比較(PDF版はこちら)
Bulldozerの概要

 Hot ChipsではBulldozerのモジュール内部の姿が明らかになった。2つの整数演算コアそれぞれが、整数演算パイプが2、ロード/ストアのアドレス生成パイプが2の構成となる。2コアで共有される浮動小数点演算ユニット部は、2つの128-bit SIMD(Single Instruction, Multiple Data)型の浮動小数点積和算(FMAC)ユニットと、2つのSIMD型整数演算ユニットを備えている。

 目立つのは命令とデータそれぞれのプリフェッチを強化して、演算ユニットの効率を上げている点。分岐予測も強化されているほか、Intel CPUの「Macro-Fusion」と同等の機能など命令デコード回りも強化されている。省電力機能では、32nm版のK10から実装されるパワーゲーティングがBulldozerにも採用され、“本格的な”ターボモードも実装される。しかし、噂に上がっていた分岐履歴ベースのトレースキャッシュなどの採用はなかった。

 全体的に言えば、Bulldozerは予想通りスレッド性能を重視したコアで、同じ規模のIntel CPUよりマルチスレッド性能は高くなる可能性が高い。その反面、整数演算系パイプを、従来のK7/K8/K10系より細くしたことで、シングルスレッド性能には不安が出る。しかし、AMDはBulldozerの設計が、IPC(Instruction-per-Clock)のスイートスポットを狙ったものであり、クロック当たりのゲート数を少なくすることも目的としていると、設計意図を説明した。Bulldozerは、命令並列度の高いCPUコアと比べるとIPCは下がるが、電力当たりのIPCの効率が高く、さらに動作周波数も上がると推測される。

●IntelのCPUアーキテクチャのギャップにはまるBobcat
Bobactのアーキテクチャ

 一方、BobcatはライバルとなるIntelのAtom系コア(Bonnellアーキテクチャ)より、1段リッチな構成であることが明確になった。2 x86命令デコードでアウトオブオーダ実行のアーキテクチャで、整数演算は演算が2パイプ、ロード/ストアが2パイプ、浮動小数点演算が2パイプの構成となっている。同じ2 x86命令デコードでも、インオーダ実行で演算パイプがずっと限られているAtomよりも、クロック当たりの性能は高くなると見られる。Bobcatもパワーゲーティングなどの新しい省電力フィーチャを備えている。

 そのため、BobcatコアのCPUは、パフォーマンス的には、現在のIntelラインナップのAtom系とCore系ブランドの中間のパフォーマンス&電力層に収まると推定される。IntelはAtomをスマートフォンなど小さなデバイスに入れることを目指しており、それがAtomコアのパフォーマンスのきつい制約となっている。しかし、AMDはATI Technologies買収時に得た携帯機器系チップ部門とTVチップ部門を売り払ってしまった。そのため、当初はその部門のコアとして使うはずだったBobcatは、現在低消費電力&低価格PCにフォーカスしている。そのため、AMDは狙うパフォーマンスレンジをAtomより上げることができる。Bobcatのマイクロアーキテクチャからは、そうしたAMDの戦略が透けて見える。

AMDアーキテクチャの比較(PDF版はこちら)

●強化されたBulldozerモジュールのフロントエンド

 2スレッドの命令ストリームを円滑に流すため、Bulldozerのフロントエンドは、従来のK8/K10と比べて著しく強化されている。まず、予測パイプラインが、命令フェッチパイプから独立して動作する。予測機構にガイドされた命令プリフェッチ機構が命令を先読みする。L1命令キャッシュは64KBと大きく、BTB(Branch Target Buffer)のキャパシティも大きく取られている。

 L1命令キャッシュから、命令フェッチキューへのフェッチ帯域は32-byte幅。キューはスレッドに合わせて二重化されている可能性がある。命令デコーダは最大4個のx86命令を内部命令へとデコードできる。命令デコーダは、IntelのMacro-Fusionと同じように、比較命令と条件分岐命令を融合させることで、命令数を減らす機能を備える。そのため、デコーダの命令フェッチ数は、最大5個のx86命令だと推定される。

 ここまでのフロントエンド部分は、サイクル単位でスレッドをスイッチしたり、キューを2重化するなどの方法によって、2つのスレッドで共有されている。つまり、スレッド当たりのパフォーマンスは2分の1になり、例えば、x86命令デコードも平均で2命令/スレッド/クロックになると見られる。

Bulldozerのアーキテクチャ(PDF版はこちら)
Bulldozerのフロントエンド
同じ機能を持つ整数演算コア

 2個の整数演算コアは、同じ機能を持つ。命令フェッチユニットからは、最大4命令がそれぞれの整数命令スケジューラに発行される。演算パイプは2本で、通常の演算回路の他に、片方のパイプが乗算ユニット(MUL:Multiplier)、もう片方のパイプが除算ユニット(DIV:Divider)を備えている。その他に、ロード/ストアのアドレス生成(Address Generation)パイプが2本ある。命令デコード側が、2命令/スレッド/クロックと見られるのに、パイプラインが4本なのは、x86命令のうち、演算とメモリアクセスが複合した命令が、演算Micro-OPとメモリアクセスMicro-OPに分離されるためだと推定される。

 それぞれの整数コアのロード/ストアユニットは、2個の128-bitロードと1個の128-bitストアを1サイクルに同時に実行できる。16KBのL1データキャッシュに対しては3つのメモリオペレーションを同時に行なえる。ただし、アドレス生成は2パイプしかない。レジスタは、物理レジスタをレジスタリネーミングでマップする方式を取っており、レジスタセットとシャドウレジスタを入れ替える方式は取らない。これはデータ移動を最小にするためだ。それぞれのスレッドの命令リタイヤは、整数演算ユニット内で行なう。

●コプロセッサ的な位置づけの浮動小数点演算ユニット
Bulldozerの浮動小数点コア

 浮動小数点(FP)演算ユニットは、コプロセッサ的な発想で作られている。命令のコンプリーションは、その命令の属する整数コアへとバックされる。FPユニットは、整数ユニットに従属する形だ。また、ロード/ストア命令も整数ユニット側で実行され、FPユニット内にはL1データキャッシュも備えず、ロードバッファだけを持つ。演算パイプは2個の128-bit SIMD(Single Instruction, Multiple Data)型の浮動小数点積和算(FMAC)ユニットと、2個の128-bit SIMD型整数演算ユニット。浮動小数点演算系と整数演算系が分離されている。また、浮動小数点演算パイプ群は、複数のスレッドの命令を1サイクルに混在できるSMT(Simultaneous Multithreading)実行になっているという。2つのスレッドの浮動小数点演算命令を同時に実行できる。

 BulldozerモジュールのL2キャッシュは2つの整数コアで共有されている。L1とL2のデータプリフェッチは大きく強化された。規則正しい並びのデータをプリフェッチするストライドベース(Stride-Based)プリフェッチャだけでなく、データの規則性が掴みにくい場合にも対応できるプリフェッチャを備える。また、先読みによってデータ帯域を圧迫するプリフェッチを、ロードの量に応じて休止させるメカニズムも備える。

L2キャッシュの仕組み

 省電力機能では、モジュール単位で電源を完全にオフにできるパワーゲーティングを実装。AMDは、6コアCPU「Phenom II X6(Thuban:トゥバン)」からターボモードを採用した。Thubanのターボは3コア単位で1ビンだけのターボだ。しかし、Bulldozerのターボは、それよりずっと拡張されているという。

Bulldozerの命令セットと省電力機能

 Bulldozerの利点は、“コア数”とマルチスレッドパフォーマンスだ。AMDは、Intelの6コア(12スレッド)CPUに、Bulldozerベースの8コア(4モジュール)CPUを当て、Intelの上位の10コア(20スレッド)CPUには、16コア(8モジュール、2ダイ)CPUを当てると推定される。サーバー向けのBulldozer 8コア版は「Valencia(バレンシア)」、16コア版は「Interlagos(インテルラゴス)」、デスクトップ向けの8コア版は「Zambezi(ザンビージ)」だ。

 Interlagosは4 DDR3メモリチャネルの「ソケットG34」、Valenciaは2 DDR3メモリチャネルの「ソケットG32」。いずれもGPUコアは統合しない、CPUコアとノースブリッジチップ機能だけのCPUだ。サポートメモリでは、新たにDDR3の次期スペックである1.25V版のサポートが加わる(現在は1.5Vと1.35V)ほか、Load Reduced DIMMのサポートも行なわれる。

Bulldozerの利点(PDF版はこちら)