【问题标题】:Does GCC have builtins for AVX512 operations?GCC 是否有用于 AVX512 操作的内置函数?
【发布时间】:2019-11-30 17:30:21
【问题描述】:

我期待找到类似的功能

__builtin_ia32_fmaddps512

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

【问题讨论】:

  • 你有什么理由不能只使用普通的内在函数吗?
  • @paulr。不知道他们。谢谢

标签: gcc avx512 gcc9


【解决方案1】:

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 而不是 Intel 的内部函数之一,例如 _mm512_mask_fmadd_ps(合并到第一个操作数)或 _mm512_mask3_fmadd_ps(合并到 +c 操作数)或 _mm512_maskz_fmadd_ps(零屏蔽)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    相关资源
    最近更新 更多