AVX指令集 in CP
概述
AVX(Advanced Vector Extensions)是一种为SIMD(Single Instruction, Multiple Data)操作设计的指令集扩展。它提供了更宽的向量寄存器和额外的指令,以实现对多个数据元素的并行处理。
2008年3月Intel宣布Sandy Bridge微架构将引入全新的AVX指令集,同年4月公布AVX指令集规范,随后开始不断进行更新,业界普遍认为支持AVX指令集是Sandy Bridge最重要的进步,没有之一。
2013年,英特尔正式发布了AVX-512指令集,和之前的 AVX/AVX2一样(只是为了迷惑大家,用位数512命名下一代),AVX-512是一组新的指令集,都属于向量运算指令,将指令宽度进一步扩展到了512bit,相比AVX2在数据寄存器宽度、数量以及FMA单元的宽度都增加了一倍,所以在每个时钟周期内可以打包32 次双精度和 64 次单精度浮点运算,或者8个 64 位和16个 32 位整数,因此在图像/音视频处理、数据分析、科学计算、数据加密和压缩以及人工智能/深度学习等密集型计算应用场景中,会带来前所未有的强大性能表现,理论上浮点性能翻倍,整数计算则增加约33%的性能。
Usage in C++
1 |
|
这个头文件提供了必要的函数与数据类型,这些代码底层使用AVX指令集。使用这个头文件就不必在文件中内联汇编去实现AVX支持。
数据类型:AVX引入了新的数据类型,比如m256用于单精度浮点数(float)的256位宽向量。还有对应的双精度(m256d)和整数数据的类型。
实操
1 |
|
输出:
1 |
|
References
AVX指令集 in CP
https://a48zhang.github.io/2023/11/27/CP/