GCC是否具有用于AVX512操作的内置程序?

时间:2019-11-30 17:30:21

标签: gcc avx512 gcc9

我希望找到类似的功能

__builtin_ia32_fmaddps512

在最新的GCC中,

启用512位AVX512寄存器的方式与使用256位AVX2寄存器的方式相同,但根据手册,它们在GCC 9.2中不存在。仅仅是等待的问题,还是有一些政策原因导致它们不存在?

1 个答案:

答案 0 :(得分: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这样的Intel内部函数中?操作数)或_mm512_maskz_fmadd_ps(零掩码)。

甚至是完整的_mm512_maskz_fmadd_round_ps,它也允许指定舍入覆盖和遮罩。

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