CPU指令集SSE、AVX等
C++使用CPU指令集,可以引入头文件 #include <intrin.h> 包含了所有指令集。
部分具体的指令集头文件如下:
<xmmintrin.h> //包含SSE库 <emmintrin.h> //包含SSE2库 <pmmintrin.h> //包含SSE3库
CPU指令集发展从MMX,到SSE、SSE2、SSE3、SSE4、AVX/AVX2、AVX512,推荐使用128位的SSE指令集,256位的AVX/AVX2指令集(若CPU支持,优先使用此类型)。注意必须以16位字节边界对齐。
SSE数据类型:__m128, __m128d 和 __m128i,分别用以表示单精度浮点型、双精度浮点型和整型。
AVX/AVX2 数据类型:__m256, __m256d 和 __m256i,分别用以表示单精度浮点型、双精度浮点型和整型。
具体参考玩转SIMD指令编程 - 知乎 (zhihu.com)
AVX一次计算8个单精度浮点数据
int main(int argc, char **argv) { __m256 a = _mm256_set_ps(8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0); __m256 b = _mm256_set_ps(18.0, 17.0, 16.0, 15.0, 14.0, 13.0, 12.0, 11.0); __m256 c = _mm256_add_ps(a, b); float d[8]; _mm256_storeu_ps(d, c); std::cout << "result equals " << d[0] << "," << d[1] << "," << d[2] << "," << d[3] << "," << d[4] << "," << d[5] << "," << d[6] << "," << d[7] << std::endl; return 0; }
函数格式及含义:mm256指256位数据,set和add就是函数本身含义
- ps: 由float类型数据组成的向量
- pd:由double类型数据组成的向量
- epi8/epi16/epi32/epi64: 由8位/16位/32位/64位的有符号整数组成的向量
- epu8/epu16/epu32/epu64: 包含8位/16位/32位/64位的无符号整数组成的向量
- si128/si256: 未指定的128位或者256位向量
具体的官方函数 Intel® Intrinsics Guide
其他入门案例 SSE的学习_ssebzg@-CSDN博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?