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

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

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

1. 概要
-----

AMDによると、BulldozerベースCPUはグローバルファウンドリーズ32nm SOIプロセス技術に基づき、マルチタスク性能のために賛否が分かれるDECのアプローチを再利用した。プレスノートによれば、「パフォーマンスをスケーリングするためにチップ上で簡単に複製できる非常にコンパクトで、ユニット数の多い設計を提供するためコンピューターリソースの専占と共有のバランスを取った」。言い換えれば、マルチコア設計に自然に忍び寄る「冗長」要素のいくつかを排除することにより、AMDは、より少ない電力を使用しながらハードウェア機能をより有効に活用することを望んでいた。 HKMGを使用して32nmSOI上に構築されたBulldozerベースの実装は、サーバーとデスクトップの両方で2011年10月に到着した。サーバーセグメントにはコードネームInterlagosデュアルチップとコードネームValenciaシングルチップOpteronプロセッサが含まれていたが一方、Zambeziは、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. 特徴
-----

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

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

3. アーキテクチャの詳細
-------------

3.1. Bulldozerコア
----------------

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

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

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

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

モジュールは、2つの「従来の」x86アウトオブオーダー処理コアのカップリングで構成されている。処理コアは、パイプラインの初期段階、FPU、およびモジュールの残りの部分と共にL2キャッシュを共有する。
各モジュールには、次の独立したハードウェアリソースがある。
1コアあたり16KBの4ウェイL1データおよび1モジュールあたり2ウェイ64KBのL1命令、2つのコアのそれぞれに1ウェイ
1モジュールごとに2MBのL2キャッシュ
Write Coalescing Cacheは、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ユニットは、可変レイテンシーでの除算および平方根演算も可能である。
存在するすべてのモジュールは、高度なデュアルチャネルメモリサブシステムと同様にL3キャッシュを共有する。
1つのモジュールには、、前身のK10コアの12サイクルと比較して、20サイクルである。より長いパイプラインにより、Bulldozerファミリーのプロセッサは、前身のK10と比較してはるかに高いクロック周波数を達成することができた。これにより周波数とスループットが向上したが、パイプラインが長くなると、レイテンシが増加し、分岐予測の予測ミスによるペナルティが増加した。

Bulldozer整数コアの幅は、K10コアの幅よりもいくらか狭くなっている。BobcatとJaguarも4つのワイド整数コアを使用したが、まだより軽い実行ユニットで：1つのALU、1つの単純なALU、1つのロードAGU、1つのストアAGUである。Jaguar、K10、およびBulldozerコアの発行幅は、それぞれ2、3、および4である。これにより、BulldozerはJaguar/Bobcatと比較してよりスーパースカラーのデザインになった。しかしながら、, ただしこれは、AMDによって以前に提案されたAVXコーディングスキームとの互換性があるSSE5命令セットと同じ機能を備えている。

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

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

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

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

最大8MBのL3は同じシリコンダイ上のすべてのコア間で共有される、それぞれ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にダウンクロックされる。

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

HyperTransportテクノロジー リビジョン3.1[2010年3月にSocket G34のOpteronプラットホームにて「Magny-Cours」が、そして2010年6月Socket C32のOpteronプラットホームにて「Lisbon」がHY-D1リビジョンになって最初に実装された。]
Socket AM3+ 
942ピン, DDR3サポートのみ
、Socket AM3マザーボードとの下位互換性を維持する。しかしながら、これはAMDによって公式にサポートされていない; AM3+ マザーボードは、AM3プロセッサとの下位互換性がある。
サーバーセグメントには、既存のSocket G34とSocket C32が使用される。

4. OSの対応
--------

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

4.1. Windows
------------

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

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

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

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

4.2. Linux
----------

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

5. 虚偽広告訴訟
---------

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

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

6. 改良
-----

6.1. Piledriver
---------------

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

6.2. Steamroller
----------------

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

6.3. Excavator
--------------

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

7. 脚注
-----

8. 関連項目
-------

Alpha 21264
UltraSPARC T1

9. 参考資料
-------

[1]
[2]