向量并行
概念
SIMD(Single Instruction, Multiple Data,单指令多数据)是一种指令集扩展,允许一条指令同时对多个数据元素执行相同的操作。
现代 SIMD 指令集
| 指令集 | 位宽 | 处理器 |
|---|---|---|
| MMX | 64 位 | Intel Pentium |
| SSE/SSE2 | 128 位 | Intel Pentium III/4 |
| AVX/AVX2 | 256 位 | Intel Sandy Bridge/Haswell |
| AVX-512 | 512 位 | Intel Xeon Phi/Skylake X |
使用方式
编译器自动向量化
- GCC 在
-O3级别尝试自动向量化 - 需要循环结构规则、无数据依赖
内建函数(Intrinsics)
__m256 v = _mm256_load_ps(data);
__m256 result = _mm256_add_ps(v, v);内联汇编
直接编写 SIMD 汇编指令。
性能优势
- AVX 一次可处理 8 个单精度浮点数(256位 / 32位)
- 结合可接近
- 对规则数据结构和循环效果最佳
相关笔记:
链接到
- 上一个知识点:5.15 重组计算
- 下一个知识点:5.17 分支预测与条件传送