GCC 是否有用于 AVX512 操作的内置函数?
Does GCC have builtins for AVX512 operations?
我期待找到像
这样的函数
__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
,它还允许指定舍入覆盖和屏蔽。
但无论如何,这就是您如何在任何 Intel 内在函数(如果有的话)下找到真正的 GCC 内建函数的名称。
我期待找到像
这样的函数__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
,它还允许指定舍入覆盖和屏蔽。
但无论如何,这就是您如何在任何 Intel 内在函数(如果有的话)下找到真正的 GCC 内建函数的名称。