1. ホーム
  2. x86

[解決済み] x86 SIMD intrinsics用ヘッダファイル

2022-04-28 06:27:41

質問

異なる x86 SIMD 命令セット拡張 (MMX, SSE, AVX, ...) 用の intrinsics を提供するヘッダーファイルはどれでしょうか? そのようなリストをオンラインで見つけることは不可能のようです。もし私が間違っているならば、訂正してください。

どのように解決するのですか?

最近では、通常 <immintrin.h> . すべてを含んでいるのです。

GCCとclangは、コンパイル時に有効にしていない命令に対して、intrinsicsを使うことを止めます(たとえば、intrinsicsを使うために -march=native または -mavx2 -mbmi2 -mpopcnt -mfma -mcx16 -mtune=znver1 など)

MSVC と ICC では、コンパイル時に何も有効にしなくても intrinsics を使用できるようになりますが、それでも べきである AVX intrinsicsを使用する前にAVXを有効にしてください。


歴史的に(以前は immintrin.h はすべてを引き込みます) 望む最高レベルのintrinsicsのために手動でヘッダを含める必要がありました。

これは、MSVCやICCで、必要としない命令セットを使わないようにするために、今でも役に立つかもしれません。

<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 は引き込まない)

また、一部のコンパイラは <zmmintrin.h> AVX512用です。