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位向量
标签:__,ps,AVX,指令集,SSE,CPU From: https://www.cnblogs.com/xixixing/p/18236154