x86 SIMD内部函数的头文件 [英] Header files for x86 SIMD intrinsics
问题描述
哪个头文件提供了不同的x86 SIMD指令集扩展(MMX,SSE,AVX等)的内在函数?在网上找不到这样的列表似乎是不可能的.如果我错了,请纠正我.
Which header files provide the intrinsics for the different x86 SIMD instruction set extensions (MMX, SSE, AVX, ...)? It seems impossible to find such a list online. Correct me if I'm wrong.
推荐答案
这几天,您通常应该只包含<immintrin.h>
.它包含了一切.
These days you should normally just include <immintrin.h>
. It includes everything.
GCC和clang会阻止您将内部函数用于您在编译时尚未启用的指令(例如,使用-march=native
或-mavx2 -mbmi2 -mpopcnt -mfma -mcx16 -mtune=znver1
或任何其他方式).
GCC and clang will stop you from using intrinsics for instructions you haven't enabled at compile time (e.g. with -march=native
or -mavx2 -mbmi2 -mpopcnt -mfma -mcx16 -mtune=znver1
or whatever.)
MSVC和ICC将允许您使用内部函数而无需在编译时启用任何功能,但是您仍然应该在使用AVX内部函数之前启用AVX.
MSVC and ICC will let you use intrinsics without enabling anything at compile time, but you still should enable AVX before using AVX intrinsics.
从历史上讲(在immintrin.h
引入所有内容之前),您必须手动添加一个头文件,以获取所需的最高级别的内在函数.
Historically (before immintrin.h
pulled in everything) you had to manually include a header for the highest level of intrinsics you wanted.
这对于MSVC和ICC仍然有用,可以阻止您使用不需要的指令集.
This may still be useful with MSVC and ICC to stop yourself from using instruction-sets you don't want to require.
<mmintrin.h> MMX
<xmmintrin.h> SSE
<emmintrin.h> SSE2
<pmmintrin.h> SSE3
<tmmintrin.h> SSSE3
<smmintrin.h> SSE4.1
<nmmintrin.h> SSE4.2
<ammintrin.h> SSE4A
<wmmintrin.h> AES
<immintrin.h> AVX, AVX2, FMA
在所有以前的版本中包括其中之一(除了仅AMD的SSE4A:immintrin.h
不会将其引入)
Including one of these pulls in all previous ones (except AMD-only SSE4A: immintrin.h
doesn't pull that in)
某些编译器还具有用于AVX512的<zmmintrin.h>
.
Some compilers also have <zmmintrin.h>
for AVX512.
这篇关于x86 SIMD内部函数的头文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!