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

Bulldozer（ブルドーザー）とは、AMDのx64実装のマイクロプロセッサアーキテクチャである。デスクトップ向けAMD FXとサーバー向けOpteronに採用された。
Bulldozerは、K10 マイクロアーキテクチャの次世代CPUコアに与えられたコードネームのひとつで、TDPは10Wから125Wを目標としていた。このアーキテクチャはゼロから完全に新しく作られた物で、AMDは、HPCアプリケーションに Bulldozerコアを用いる事で、を劇的に向上させる事ができると主張している。
概要.
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倍の整数パフォーマンスを発揮する。（一般的なコード全体としてより現実的には、ポラックの法則はformula_1のスピードアップ係数、つまりパフォーマンスの約40％の向上を推定する。） 
CMTプロセッサと一般的なSMTプロセッサは、スレッドのペア間でL2キャッシュを効率的に共有して使用する点で類似している。 
より長いパイプラインにより、Bulldozerファミリーのプロセッサは、前身のK10と比較してはるかに高いクロック周波数を達成することができた。これにより周波数とスループットが向上したが、パイプラインが長くなると、レイテンシが増加し、分岐予測の予測ミスによるペナルティが増加した。
Jaguar、K10、およびBulldozerコアの(命令)発行幅（およびサイクルごとの命令実行ピーク）は、それぞれ2、3、および4である。これにより、BulldozerはJaguar/Bobcatと比較してよりスーパースカラーのデザインになった。しかしながら、(第1世代の設計には改良と最適化がないことに加えて）K10のコアがやや広いため、Bulldozerアーキテクチャは通常、前身のK10と比較してやや低いIPCで実行された。BulldozerファミリーのIPCがPhenom IIなどのK10プロセッサのIPCを明らかに上回り始めたのは、PiledriverとSteamrollerで行われた改良が行われるまではなかった。 
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などの命令がサポートされた。