x86扩展指令集常用于在1条CPU指令中实现更加强大的功能,比较常见的SSE、SSE2、AVX、AVX2、AVX512就是实现SIMD的扩展指令。C\C++中提供了对扩展指令函数式调用支持,使你不需要汇编就可以使用这些扩展指令集。
之前做对性能极度敏感的计算的时候曾三番四次地查找扩展指令集的相关资料,发现SSE的相关资料很多,但AVX就相对凤毛麟角。直到后来找到了Intel的官方在线文档,顿时如获至宝:
这份官方文档文档涵盖了MMX、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AVX2、FMA、AVX-512等扩展指令集,对于每条扩展指令包含以下基本的信息:
- 其对应的C\C++函数接口。
- 其对应的C\C++函数所在的头文件名。
- 指令功能的文字描述。
还有相当多的扩展指令(但不是全部)包含了以下更详细的信息:
- 指令功能的伪代码描述。
- 指令在不同架构的Intel CPU上(Skylake、Broadwell、Haswell等)的延迟和CPI吞吐量。
在有扩展指令编程需求时这篇文档有很好的参考价值。