関連する技術記事・ガイドを検索
AVX-512(Advanced Vector Extensions 512)は、Intelが開発した512ビット幅のSIMD(Single Instruction Multiple Data)命令セット拡張で、科学計算、AI/ML、暗号化などの並列処理を大幅に高速化します。
スカラー演算: 1データ/命令
SSE (128bit): 4データ/命令
AVX2 (256bit): 8データ/命令
AVX-512 (512bit): 16データ/命令
例: 32bit浮動小数点
AVX-512: 16個同時処理
| サブセット | 機能 | 対応CPU | |-----------|------|---------| | AVX-512F | 基本命令 | Skylake-X以降 | | AVX-512DQ | 倍精度/四倍精度 | 同上 | | AVX-512BW | バイト/ワード | 同上 | | AVX-512VL | 可変長ベクトル | 同上 | | AVX-512VNNI | AI推論加速 | Cascade Lake以降 |
サーバー向け:
- Xeon Scalable(全機能)
- Xeon W(ワークステーション)
コンシューマー向け:
- Core X(Skylake-X〜)
- 第11世代Core(Rocket Lake)
- 第12世代以降: E-coreは非対応
- Zen 4(2022〜): AVX-512対応
- 2×256bit実装(効率重視)
- 全コア有効(Intelと異なる)
行列乗算(1024×1024):
AVX2: 100 GFLOPS
AVX-512: 180 GFLOPS(1.8倍)
画像処理(8K解像度):
スカラー: 1000ms
AVX-512: 125ms(8倍)
| 用途 | 高速化率 | 備考 | |------|---------|------| | 科学計算 | 2-4倍 | 完全最適化時 | | 動画エンコード | 1.5-2倍 | x265等 | | 暗号化 | 3-5倍 | AES-NI併用 | | AI推論 | 2-3倍 | INT8使用時 |
#include <immintrin.h>
// AVX-512での配列加算
void vector_add(float* a, float* b, float* c, int n) {
for (int i = 0; i < n; i += 16) {
__m512 va = _mm512_load_ps(&a[i]);
__m512 vb = _mm512_load_ps(&b[i]);
__m512 vc = _mm512_add_ps(va, vb);
_mm512_store_ps(&c[i], vc);
}
}
// コンパイラフラグ
// gcc/clang: -march=skylake-avx512 -O3
// MSVC: /arch:AVX512
// 自動ベクトル化されやすいコード
#pragma omp simd
for (int i = 0; i < n; i++) {
c[i] = a[i] * b[i] + d[i];
}
通常時: 4.0GHz
AVX2使用: 3.7GHz(-300MHz)
AVX-512使用: 3.4GHz(-600MHz)
対策:
- オフセット調整
- 電圧調整
- ワークロード最適化
| 命令種別 | TDP乗数 | 消費電力 | |---------|---------|---------| | 通常 | 1.0x | 125W | | AVX2 | 1.3x | 162W | | AVX-512 | 1.8x | 225W |
// 64バイト境界にアライメント
float* data = (float*)_mm_malloc(size * sizeof(float), 64);
// アライメントされたロード/ストア
__m512 v = _mm512_load_ps(data); // aligned
__m512 v = _mm512_loadu_ps(data); // unaligned(遅い)
// 条件付き処理
__mmask16 mask = _mm512_cmp_ps_mask(va, vb, _CMP_LT_OS);
vc = _mm512_mask_add_ps(vc, mask, va, vb);
// マスクがtrueの要素のみ加算
! Fortranでの自動ベクトル化
!$OMP SIMD
do i = 1, n
y(i) = alpha * x(i) + y(i)
end do
// ガウシアンブラー
void gaussian_blur_avx512(uint8_t* img, int width, int height) {
__m512i kernel = _mm512_set_epi32(...);
// 16ピクセル同時処理
}
// CPU機能チェック
#include <cpuid.h>
bool has_avx512f() {
unsigned int eax, ebx, ecx, edx;
__cpuid_count(7, 0, eax, ebx, ecx, edx);
return (ebx & (1 << 16)) != 0;
}
// 実行時分岐
if (has_avx512f()) {
process_avx512();
} else if (has_avx2()) {
process_avx2();
} else {
process_scalar();
}
# GCC
gcc -march=native -O3 -ftree-vectorize
# Intel Compiler
icc -xCORE-AVX512 -O3
# MSVC
cl /arch:AVX512 /O2
// BLAS/LAPACK自動最適化
#include <mkl.h>
cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, k, b, n, beta, c, n);
### 高速化ライブラリ
- **Intel IPP**: 画像/信号処理
- **FFTW**: 高速フーリエ変換
- **OpenBLAS**: オープンソース数値計算
### 次世代拡張
- **AVX10**: 可変幅ベクトル(128-512bit)
- **APX**: レジスタ数倍増
- **AMX**: 行列演算専用
AVX-512は強力な並列処理能力を提供しますが、電力消費とのトレードオフを考慮した適切な使用が重要です。対応アプリケーションでは劇的な性能向上が期待できます。