x86-64-v3
AVX、AVX2、FMA、BMI1、BMI2、F16C、LZCNT、MOVBE を追加します。Intel の Haswell (2013 年) と AMD の Excavator (2015 年) の機能セットです。ディストリビューションは現在、ベースラインをこのレベルに移しつつあります。
x86-64-v3 は 256 ビット SIMD をもたらします。浮動小数点用の AVX と整数用の AVX2、融合積和演算 (FMA)、そして BMI1 と BMI2 のビット操作命令です。また、オペレーティングシステムが AVX のレジスター状態を有効にしていること (OSXSAVE) も必要です。
| 機能 | 提供するもの | 列挙方法 | Linux のフラグ | 例 |
|---|---|---|---|---|
| AVX | 256-bit floating-point SIMD with VEX encoding. | CPUID.01H:ECX[28] | avx | vzeroall |
| AVX2 | 256-bit integer SIMD, gathers and permutes. | CPUID.(EAX=07H,ECX=0):EBX[5] | avx2 | vpermd |
| BMI1 | Bit manipulation instructions, group 1. | CPUID.(EAX=07H,ECX=0):EBX[3] | bmi1 | andn |
| BMI2 | Bit manipulation instructions, group 2. | CPUID.(EAX=07H,ECX=0):EBX[8] | bmi2 | bzhi |
| F16C | Half-precision float conversion. | CPUID.01H:ECX[29] | f16c | vcvtph2ps |
| FMA | Fused multiply-add (three-operand FMA3). | CPUID.01H:ECX[12] | fma | vfmadd132pd |
| LZCNT | Leading zero count, shown as abm by Linux. | CPUID.80000001H:ECX[5] | abm | lzcnt |
| MOVBE | Load or store with a byte swap. | CPUID.01H:ECX[22] | movbe | movbe |
| OSXSAVE | The OS has enabled XSAVE, so AVX state is saved across context switches. | CPUID.01H:ECX[27]OS のサポート。ハードウェア機能: XSAVE | 表示なし | xgetbv |
ソフトウェアにもたらすもの
コンパイラーは、128 ビットのレジスターの代わりに 256 ビットのレジスターでループをベクトル化し、乗算と加算を丸めが 1 回だけの 1 つの演算に融合し、ビット操作に ANDN、BZHI、SHLX、LZCNT などの命令を使えます。圧縮、ハッシュ、数学関数のコードなどのライブラリで、最も大きな効果が出ることがよくあります。
このレベルのプロセッサー
- Intel Core (client)
- Haswell (2013), Broadwell (2014), Skylake (2015), Kaby Lake (2016), Coffee Lake (2017), Comet Lake (2019), Alder Lake (2021), Raptor Lake (2022), Meteor Lake (2023), Arrow Lake (2024), Lunar Lake (2024), Panther Lake (2026)
- Intel Xeon (server)
- Sierra Forest (2024), Clearwater Forest (2026)
- Intel Atom and E-cores
- Gracemont (2021)
- Intel Xeon Phi
- Knights Landing (2016), Knights Mill (2017)
- AMD (high performance)
- Excavator (2015), Zen (2017), Zen+ (2018), Zen 2 (2019), Zen 3 (2020)
- Hygon
- Dhyana (2018)
- Zhaoxin
- Century Avenue (Shijidadao) (2023)
注意点
- Intel の Atom 系列が x86-64-v3 に達したのは Gracemont (2021 年) になってからです。Pentium Silver や Celeron として販売された、Tremont までのそれ以前の低消費電力チップは x86-64-v2 です。
- AMD の Bulldozer、Piledriver、Steamroller は AVX を備えていますが AVX2 がないため、x86-64-v2 です。v3 に達した最初の AMD のコアは Excavator です。
- 仮想マシンは、特に設定しない限り、ゲストから AVX を隠すことがよくあります。
このレベルを必要とするもの
すべての最小要件を参照してください。
このレベル向けのビルド
gcc -march=x86-64-v3 ... # GCC 11+, Clang 12+
GOAMD64=v3 go build ... # Go 1.18+
RUSTFLAGS="-C target-cpu=x86-64-v3" cargo build ...
この方法でビルドしたバイナリは、このレベルに満たないプロセッサーでは不正な命令のエラー (SIGILL) で停止します。多くの場合、最初のベクトル化されたループで停止します。共有ライブラリの最適化されたコピーを glibc-hwcaps/x86-64-v3 にインストールすれば、これを避けられます。glibc 2.33 以降は、実行できる場所でだけそれを読み込みます。