Bulldozer (マイクロアーキテクチャ)

Bulldozer（ブルドーザー）とは、AMDのx64実装のマイクロプロセッサアーキテクチャである。デスクトップ向けAMD FXとサーバー向けOpteronに採用された。

Bulldozerは、K10 マイクロアーキテクチャの次世代CPUコアに与えられたコードネームのひとつで、TDPは10Wから125Wを目標としていた。このアーキテクチャはゼロから完全に新しく作られた物で、AMDは、HPCアプリケーションに Bulldozerコアを用いる事で、1Wあたりの性能を劇的に向上させる事ができると主張している。

概要 
AMDによると、BulldozerベースCPUはグローバルファウンドリーズ32nm SOIプロセス技術に基づき、マルチタスク性能のために賛否が分かれるDECのアプローチを再利用した。プレスノートによれば、「パフォーマンスをスケーリングするためにチップ上で簡単に複製できる非常にコンパクトで、ユニット数の多い設計を提供するためコンピューターリソースの専占と共有のバランスを取った」。言い換えれば、マルチコア設計に自然に忍び寄る「冗長」要素のいくつかを排除することにより、AMDは、より少ない電力を使用しながらハードウェア機能をより有効に活用することを望んでいた。 HKMG(High-k/Metal Gate)を使用して32nmSOI上に構築されたBulldozerベースの実装は、サーバーとデスクトップの両方で2011年10月に到着した。サーバーセグメントにはコードネームInterlagos(Socket G34用16コア)デュアルチップとコードネームValencia(Socket C32用4、6、または8コア)シングルチップOpteronプロセッサが含まれていたが一方、Zambezi(4、6、および8コア)は、Socket AM3+のデスクトップを対象としていた。BulldozerはAMDがK8プロセッサを発売した2003年以来AMDプロセッサアーキテクチャ初の主要な再設計であり、1つの256ビットFPUに組み合わせることができる2つの128ビットFMA対応FPUも備えている。この設計には、それぞれ4つのパイプラインを持つ2つの整数クラスターが付属している(フェッチ/デコードステージは共有される)。Bulldozerはまた、新しいアーキテクチャに共有L2キャッシュを導入した。 AMDはこの設計を「モジュール」と呼んでいる。  16コアプロセッサの設計では、これらの「モジュール」のうち8つを備えているが、オペレーティングシステムは各「モジュール」を2つの論理コアとして認識する。 モジュラーアーキテクチャは、マルチスレッド対応共有L2キャッシュと同時マルチスレッディングを使用するFlexFPUで構成されている。 2つの仮想同時スレッドが単一の物理コアのリソースを共有するIntelのハイパースレッディングとは対照的に、各物理整数コアはモジュールごとに2つシングルスレッドである。

特徴 

2つの整数演算ユニット、1つのFPU、1つの命令デコーダ、1つのL2キャッシュなどからなるモジュール（Bulldozerコア）を基本単位として構成されるクラスタードアーキテクチャとなる。命令キャッシュからデコーダまでのフロントエンドと、FPU及びL2キャッシュが2つの整数演算ユニットで共有されており、2つの整数演算ユニットと2つのL1データキャッシュのみがBulldozerコア毎(ごと)に独立している構造になっている。そのため、(整数のみ)完全なデュアルコアと(FPUとその他が)SMTと中間的な構造である。その他特徴的な点として、浮動小数点の積和算をサポートしている。1サイクルに従来命令換算で、4つの128ビット演算を行えるため、モジュール単位でPhenom II 1コアと比較して2倍のスループットを得られる。整数演算装置が2/3の性能で、IPCがK10より下がるため、クロックを上げて性能を補う、近年のAMDには珍しいスピードデーモン寄りのアーキテクチャとなり、K10と比べてクロックが25%ほど上昇している。

L2キャッシュは1モジュールにつき2MBとなる。デスクトップ向けの Zambezi は、L3は8MBで、メモリはDDR3-1866デュアルチャネルに対応する。
液体ヘリウムを使用したオーバークロックを行った結果、8.461GHzを達成し、ギネス世界記録となった。

アーキテクチャの詳細

Bulldozerコア 
Bulldozerはプロセッサのある一部は2つのスレッドの間で共有され、またある一部はスレッドごとに固有である技法、「クラスタード・マルチスレッディング(CMT)」を駆使する。型破りなマルチスレッディングへのそのようなアプローチの以前の例は、2005年のサン・マイクロシステムズのUltraSPARC T1プロセッサにまで遡ることができる。 ハードウェアの複雑さと機能性の観点から、ブルドーザーCMTモジュールは、整数演算能力においてデュアルコアプロセッサと、浮動小数点演算能力の点においては、同じCMTモジュールで実行されている両方のスレッドの浮動小数点命令でコードが飽和しているかどうかそして、FPUが128ビットまたは256ビットの浮動小数点演算を実行しているかどうかに応じて、シングルコアまたはハンディキャップのあるデュアルコアプロセッサのいずれかと同等である。この理由は、つまり同じモジュール内に、2つの整数コアごとに、128ビットFMAC実行ユニットの対からなる単一のFPUが存在するためである。

CMTは、ある意味でSMTと単純だが、類似した設計哲学である; どちらの設計も、実行ユニットを効率的に利用しようとする; どちらの方法でも、2つのスレッドが一部の実行パイプラインをめぐって競合すると、1つかそれ以上のスレッドのパフォーマンスが低下する。専用の整数コアにより、Bulldozerファミリーモジュールは完全に整数であるか、整数と浮動小数点の計算が混在するコードのセクションで、ほぼデュアルコアの、デュアルスレッドプロセッサのように動作した; ただし、SMTは共有浮動小数点パイプラインを使用するため、モジュールは、浮動小数点命令で飽和スレッドのペアについてシングルコアのデュアルスレッドSMTプロセッサ（SMT2）と同様に振る舞う。(これらの最後の2つの比較はどちらもプロセッサがそれぞれ、整数単位と浮動小数点単位で、等幅で同等能力のある実行コアを持っていることを前提としている。)

CMTとSMTはどちらも整数と浮動小数点コードをスレッドのペアで実行しているときに最大の効果を発揮する。CMTは両方共に整数コードから成るスレッドのペアで作業している間、最高の効果を維持し、一方SMTの下では、整数実行ユニットの競合により一方または両方のスレッドのパフォーマンスが低下する。CMTの欠点はシングルスレッドの場合にアイドル状態の整数実行ユニットの数が増えることである。シングルスレッドの場合、CMTはモジュール内の整数実行ユニットの最大半分を使用するように制限されているが、SMTはそのような制限を課していない。2つのCMTコアと同じ幅で高速な整数回路を備えた大規模なSMTコアは、理論上、シングルスレッドの場合に瞬間的に最大2倍の整数パフォーマンスを発揮する。（一般的なコード全体としてより現実的には、ポラックの法則はのスピードアップ係数、つまりパフォーマンスの約40％の向上を推定する。） 

CMTプロセッサと一般的なSMTプロセッサは、スレッドのペア間でL2キャッシュを効率的に共有して使用する点で類似している。 

 モジュールは、2つの「従来の」x86アウトオブオーダー処理コアのカップリングで構成されている。処理コアは、パイプラインの初期段階（例えば L1命令(キャッシュ)、フェッチ、デコードなど）、FPU、およびモジュールの残りの部分と共にL2キャッシュを共有する。 
 各モジュールには、次の独立したハードウェアリソースがある。
 1コアあたり16KBの4ウェイL1データ(キャッシュ)（ウェイ予測）および1モジュールあたり2ウェイ64KBのL1命令(キャッシュ)、2つのコアのそれぞれに1ウェイ
 1モジュールごとに2MBのL2キャッシュ（2つの整数コア間で共有）
 Write Coalescing(合体) Cache(W.C.C.)は、BulldozerマイクロアーキテクチャにおいてL2キャッシュの一部である特別なキャッシュである。 1モジュール内の両方のL1データキャッシュからのストアは、W.C.C.を通過し、そこでバッファリングおよび合体される。W.C.C.のタスクは、L2キャッシュへの書き込み数を減らすことである。
 2つの専用整数コア
 –それぞれの整数コアに2つのALUと2つのAGUが含まれており、1コアごとの1クロックごとに合計4つの独立した算術演算とメモリ操作が可能である。
 –整数スケジューラと実行パイプラインを複製することは、2つのスレッドのそれぞれに専用のハードウェアが提供され、マルチスレッドの整数負荷の性能が2倍になる。
 –モジュールの2番目の整数コアは、Bulldozerモジュールのダイを約12％増加させ、チップレベルでダイスペース全体の約5％が追加される。
 モジュールごとに2つの対称128ビットFMAC（融合積和演算機能つき）浮動小数点パイプラインは整数コアの1つがAVX命令と2つの対称x87/MMX/SSE対応浮動小数点パイプラインをディスパッチして、SSE2非最適化ソフトウェアとの下位互換性を確保する場合、1つの大きな256ビット幅のユニットに統合できる。各FMACユニットは、可変レイテンシーでの除算および平方根演算も可能である。
 存在するすべてのモジュールは、高度なデュアルチャネルメモリサブシステム（IMC – 統合メモリコントローラー）と同様にL3キャッシュを共有する。
 1つのモジュールには、(2MBの共有L2キャッシュを含む）オロチダイ上の30.9mm²のエリアに2億1300万個のトランジスタがある。
 Bulldozerのパイプラインの深さは（同様にPiledriverとSteamrollerも)、前身のK10コアの12サイクルと比較して、20サイクルである。

より長いパイプラインにより、Bulldozerファミリーのプロセッサは、前身のK10と比較してはるかに高いクロック周波数を達成することができた。これにより周波数とスループットが向上したが、パイプラインが長くなると、レイテンシが増加し、分岐予測の予測ミスによるペナルティが増加した。

 Bulldozer整数コアの幅（4 = (2ALU + 2AGU)）は、K10コアの幅（6 = (3ALU + 3AGU)）よりもいくらか狭くなっている。BobcatとJaguarも4つのワイド整数コアを使用したが、まだより軽い実行ユニットで：1つのALU、1つの単純なALU、1つのロードAGU、1つのストアAGUである。

Jaguar、K10、およびBulldozerコアの(命令)発行幅（およびサイクルごとの命令実行ピーク）は、それぞれ2、3、および4である。これにより、BulldozerはJaguar/Bobcatと比較してよりスーパースカラーのデザインになった。しかしながら、(第1世代の設計には改良と最適化がないことに加えて）K10のコアがやや広いため、Bulldozerアーキテクチャは通常、前身のK10と比較してやや低いIPCで実行された。BulldozerファミリーのIPCがPhenom IIなどのK10プロセッサのIPCを明らかに上回り始めたのは、PiledriverとSteamrollerで行われた改良が行われるまではなかった。

分岐予測器 

 2レベルの分岐ターゲットバッファ(BTB)
 条件文用ハイブリッド予測器
 間接予測器

拡張命令セット 

 256ビット浮動小数点演算、およびSSE4.1、4.2、AES、CLMULをサポートするIntelのAdvanced Vector Extensions（AVX）命令セットのサポート, 及びAMDが提案した将来性ある128ビット命令セット（XOP、FMA4、およびF16C), ただしこれは、AMDによって以前に提案されたAVXコーディングスキームとの互換性があるSSE5命令セットと同じ機能を備えている。

 第4世代Bulldozer(Excavator)はAVX2命令セットをサポートする。

プロセス技術とクロック周波数 

 第1世代グローバルファウンドリーズHigh-Kメタルゲート（HKMG）によって実装される11層メタルレイヤー32nm SOIプロセス
 TurboCore2パフォーマンスブーストはTDPの制限内で、すべてのスレッドがアクティブな場合（ほとんどのワークロードの場合）にクロック周波数を最大500MHzまで、スレッドの半分がアクティブな場合に最大1GHzまでクロック周波数を上げる。
 チップは0.775〜1.425Vで動作し、3.6GHz以上のクロック周波数を実現する。
 TDP: 最小25ワット〜最大140ワット

キャッシュとメモリ・インタフェース 

 最大8MBのL3は同じシリコンダイ上のすべてのコア間で共有される(デスクトップセグメントの4コアの場合は8MB、サーバーセグメントの8コアの場合は16MB)、それぞれ2MBの4つのサブキャッシュに分割され、1.1125Vで2.2GHz動作が可能である
 DDR3-1866までのネイティブDDR3メモリをサポート
 デスクトップおよびサーバー/ワークステーション用Opteron 42xx "Valencia"はデュアルチャネルDDR3統合メモリコントローラー; サーバー/ワークステーション用Opteron 62xx "Interlagos"はクワッドチャネルDDR3統合メモリコントローラーである
 AMDはチャネルごとにDDR3-1600の2つのDIMMのサポートを主張する。シングルチャンネル上のDDR3-1866の2つのDIMMは、1600にダウンクロックされる。

I/Oおよびソケット・インターフェース 

 HyperTransportテクノロジー リビジョン3.1(3.2GHz、6.4GT/s、25.6GB/sそして16ビット幅のリンク)[2010年3月にSocket G34のOpteronプラットホームにて「Magny-Cours」が、そして2010年6月Socket C32のOpteronプラットホームにて「Lisbon」がHY-D1リビジョンになって最初に実装された。]

 Socket AM3+ (AM3r2)
 942ピン, DDR3サポートのみ
 (マザーボードメーカーの選択にもよるが、もしBIOSアップデートが提供されている場合)、Socket AM3マザーボードとの下位互換性を維持する。しかしながら、これはAMDによって公式にサポートされていない; AM3+ マザーボードは、AM3プロセッサとの下位互換性がある。
 サーバーセグメントには、既存のSocket G34(LGA1974)とSocket C32(LGA1207)が使用される。

OSの対応 
旧来のどのアーキテクチャとも異なる構成なのでIntel HTTの時と同じようにOSスケジューラの対応が必要となる場合がある。

Windows 
Windowsのスケジューラは空いているコアに対してスレッドを割り振るが、対策前のWindowsでは「Bulldozerコア」の特性（フロントエンドやFPUの共有）を考慮していないため、同一モジュール内かどうかを考慮せずにスレッドを割り振る。このために空いているモジュールがあるにもかかわらず、同一モジュールにスレッドを割り振ってフロントエンドやFPUがボトルネックになり性能低下が起こる事があった。

マイクロソフトは2012年1月にKB2645594とKB2646060のパッチを公開しこの問題に対応した。KB2645594はBulldozerコア1基を物理1コア論理2コアと見立てるように修正するパッチで、KB2646060はKB2645594の副作用でBulldozerコアが頻繁にC6ステートに入ってしまい，結果，マルチスレッド化があまり進んでいない環境で性能が低下する問題を修正するパッチである。

このパッチ群により性能低下への対応は行われたが、対策後のWindowsからは 物理コア数=Bulldozerコア数のSMTタイプCPUとして扱われるため、本来の性能を発揮しているかどうかは未知数である。

AMDはWindows 8でBulldozerへの最適化がなされるようマイクロソフトと協力しているという。

Linux 
1モジュールあたり1コア2スレッドのSMTプロセッサとして扱われる。

虚偽広告訴訟 
2015年11月、AMDはBulldozerチップの仕様を不実表示したとしてカリフォルニア消費者法的救済法および不公正競争法に基づいて訴えられた。10月26日にカリフォルニア北部地区連邦地方裁判所に提起された集団訴訟では、各Bulldozerモジュールは実際には真のデュアルコア設計ではなく、いくつかのデュアルコア特性を備えた単一のCPUコアであると主張していた。

2019年8月、AMDは12.1百万ドルで訴訟を和解することに合意した。

改良

Piledriver 

Piledriver は二世代目の Bulldozer として2012年に発表された。IPC と動作周波数の向上が図られた。

Steamroller 

Steamroller は三世代目の Bulldozer として2013年に発表された。

Excavator 

Excavator は四世代目の Bulldozer として2015年に発表された。AVX2などの命令がサポートされた。

脚注

関連項目 

 Alpha 21264
 UltraSPARC T1

参考資料 
 後藤弘茂のWeekly海外ニュースついにベールを脱いだAMDの「Bulldozer」と「Bobcat」
 適用で8コアのAMD FXが「4コア」に!? Microsoftの「Bulldozerアーキテクチャ最適化パッチ」を試す

AMDのマイクロプロセッサ