x86 SIMD内部函数的头文件 [英] Header files for x86 SIMD intrinsics

查看:157
本文介绍了x86 SIMD内部函数的头文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

哪个头文件提供了不同的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆