GCC 是否有用于 AVX512 操作的内置功能?



我期待找到这样的函数

__builtin_ia32_fmaddps512

根据手册,在最近的GCC中,可以使用512位AVX512寄存器,就像可以使用256位AVX2寄存器一样,但它们在GCC 9.2中不存在。这只是等待的问题,还是有一些政策原因导致它们不存在?

AVX512 内置组件采用掩码(可以-1(。

可移植固有_mm512_fmadd_ps(#include <immintrin.h>(在GCC9.1的标头中定义为:

extern __inline __m512
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
_mm512_fmadd_ps (__m512 __A, __m512 __B, __m512 __C)
{
return (__m512) __builtin_ia32_vfmaddps512_mask ((__v16sf) __A,
(__v16sf) __B,
(__v16sf) __C,
(__mmask16) -1,
_MM_FROUND_CUR_DIRECTION);
}

我通过查看系统上的/usr/lib/gcc/x86_64-pc-linux-gnu/9.1.0/include/avx512*.h找到了这个。 (不要直接包括那些,只包括来自immintrin.h(

IDK 为什么你想使用__builtin_ia32_vfmaddps512_mask而不是英特尔的内部函数之一,如_mm512_mask_fmadd_ps(合并到第一个操作数(或_mm512_mask3_fmadd_ps(合并到+c操作数(或_mm512_maskz_fmadd_ps(零掩码(。

甚至是完整的_mm512_maskz_fmadd_round_ps,它还允许指定舍入覆盖和掩码。

但无论如何,这就是您可以在任何英特尔内部函数(如果有的话(下找到真正的 GCC 内置名称的方法。

最新更新