AMD Bulldozer アーキテクチャの詳細解説
AMDのBulldozer(ブルドーザー)
アーキテクチャは、2011年に登場したx86
マイクロプロセッサアーキテクチャです。デスクトップ向けの
AMD FXシリーズやサーバー向けのOpteronシリーズに採用され、その革新的な設計が注目を集めました。
Bulldozerは、AMDがK10マイクロ
アーキテクチャの後継として開発した
CPUコアの
コードネームです。TDP(
熱設計電力)は10Wから125Wまで幅広く設定され、省電力からハイパフォーマンスまで、多様なニーズに対応することを目指しました。AMDは、Bulldozer
アーキテクチャがHPC(ハイパフォーマンスコンピューティング)アプリケーションにおいて、1Wあたりの性能を大幅に向上させると主張していました。
Bulldozer
アーキテクチャの最大の特徴は、
モジュールと呼ばれる単位で構成されている点です。各
モジュールには、2つの整数演算ユニット、1つの浮動小数点演算ユニット(
FPU)、命令デコーダ、
L2キャッシュなどが含まれています。2つの整数演算ユニットはそれぞれ独立したL1データキャッシュを持ちますが、命令キャッシュ、
FPU、
L2キャッシュは
モジュール内で共有されます。この設計は、整数演算処理能力はデュアルコアに近く、浮動小数点演算処理能力はシングルコアに近いという、従来のデュアルコアやSMT(
同時マルチスレッディング)とは異なる独特な構造を持っています。
CMT(クラスタード・マルチスレッディング)
Bulldozerは、プロセッサの資源を複数のスレッド間で共有するCMT(クラスタード・マルチスレッディング)という技術を採用しています。CMTは、ハードウェア資源を効率的に利用しようとする点でSMTと似た設計哲学を持っていますが、その
実装は異なります。CMTでは、整数演算ユニットは専用であるため、整数演算中心の処理では、ほぼデュアルコアプロセッサのように動作します。一方、浮動小数点演算が中心の処理では、
FPUが共有されるため、性能はやや制限される場合があります。
モジュール単位の設計: 2つの整数演算ユニットと共有リソースを持つ
モジュールを基本単位とするクラスタード
アーキテクチャ。
整数演算性能: モジュール内に独立した2つの整数演算ユニットを搭載し、高い整数演算性能を実現。
浮動小数点演算性能: モジュール内で
FPUを共有するため、浮動小数点演算中心の処理では性能が制限される場合がある。
L2キャッシュ: 1
モジュールあたり2MBの
L2キャッシュを搭載。
L3キャッシュ: デスクトップ向けのZambeziは8MB、DDR3-1866
デュアルチャネルに対応。
オーバークロック: 液体ヘリウム冷却によるオーバー
クロックで8.461GHzのギネス記録を達成。
命令セット: 256ビット浮動小数点演算をサポートし、AVX、SSE4.1、4.2、AES、CLMULなどの拡張命令セットに対応。
プロセス技術: 32nm
SOIプロセスを採用。
TurboCore 2: TDP制限内で
クロック周波数を動的に調整するTurboCore 2機能を搭載。
メモリインターフェース: デュアルチャネルまたはクアッドチャネルDDR3メモリに対応。
I/Oインターフェース: HyperTransportテクノロジーを搭載。
コア構成
Bulldozer
モジュールは、2つの整数コア、L1データキャッシュ、
FPU、命令デコーダ、
L2キャッシュ、W.C.C(Write Coalescing Cache)で構成されています。L1命令キャッシュは2つのコアで共有され、
FPUと
L2キャッシュも共有されています。
各コアの機能
各整数コアには、それぞれ2つのALU(算術論理演算ユニット)と2つのAGU(アドレス生成ユニット)が含まれており、1
クロックあたり合計4つの独立した演算とメモリ操作が可能です。
モジュール内の2つのコアが整数演算を分担することで、マルチスレッド時の整数演算性能が向上します。
モジュールには、2つの128ビットFMAC(融合
積和演算機能付き)浮動小数点パイプラインが搭載されており、これらを結合することで、1つの256ビット幅のユニットとして動作させることができます。この機能は、浮動小数点演算のパフォーマンスを向上させるのに役立ちます。
キャッシュ
Bulldozerは、L1キャッシュと
L2キャッシュを
モジュール単位で備えています。L1データキャッシュは各整数コアに16KB、L1命令キャッシュは
モジュールあたり64KBです。
L2キャッシュは1
モジュールあたり2MBで、2つの整数コアで共有されます。L3キャッシュは、デスクトップ版で最大8MB、サーバー版で最大16MBで、すべてのコアで共有されます。
パイプライン
Bulldozerのパイプラインは20サイクルと深く、K10コアの12サイクルと比較して長くなっています。この長いパイプラインにより、
クロック周波数を高くすることが可能になりましたが、レイテンシが増加し、分岐予測ミスによるペナルティが大きくなるという欠点もありました。
整数コアの幅
Bulldozerの整数コアの幅は4(2ALU + 2AGU)で、K10の6(3ALU + 3AGU)よりも狭くなっています。IPC(1
クロックあたりの命令実行数)はK10よりも低く、
クロック周波数を上げることで性能を補う設計となっています。
分岐予測
Bulldozerは、2レベルの分岐ターゲットバッファ(BTB)、条件文用ハイブリッド予測器、間接予測器などの高度な分岐予測機構を備えています。
OSの対応
Bulldozerの
アーキテクチャは、従来のプロセッサとは異なるため、OSスケジューラの対応が必要となる場合があります。特に、Windowsでは、Bulldozerの
モジュール構造を認識しないと、性能が低下する問題がありました。Microsoftは、この問題に対応するためにパッチを公開しましたが、その後のWindowsでは、Bulldozerは物理コア数=Bulldozerコア数のSMTタイプの
CPUとして扱われています。
Linuxでは、1
モジュールあたり1コア2スレッドのSMTプロセッサとして扱われます。
虚偽広告訴訟
2015年、AMDはBulldozerチップの仕様を不実表示したとして訴訟を起こされました。この訴訟では、Bulldozer
モジュールは実際には真のデュアルコア設計ではなく、いくつかのデュアルコア特性を備えた単一の
CPUコアであると主張されました。AMDは2019年に12.1百万ドルで和解しました。
Bulldozerの改良版
Bulldozer
アーキテクチャは、その後、Piledriver、Steamroller、Excavatorといった改良版が登場しました。これらの改良版では、IPCと動作周波数の向上が図られ、新しい命令セットがサポートされました。
Piledriver: 第二世代のBulldozerとして、
2012年に発表されました。
Steamroller: 第三世代のBulldozerとして、2013年に発表されました。
Excavator: 第四世代のBulldozerとして、2015年に発表されました。AVX2命令セットをサポートしました。
まとめ
AMDのBulldozer
アーキテクチャは、斬新な
モジュール設計とCMT技術を採用した意欲的なプロセッサ
アーキテクチャでした。しかし、その独特な構造は、従来のデュアルコアとは異なる性能特性を示し、賛否両論を巻き起こしました。後の改良版でIPCや
クロック周波数を向上させ、より競争力のある製品へと進化を遂げました。
参考資料
後藤弘茂のWeekly海外ニュースついにベールを脱いだAMDの「Bulldozer」と「Bobcat」
適用で8コアのAMD FXが「4コア」に!? Microsoftの「Bulldozer
アーキテクチャ最適化パッチ」を試す