【问题标题】:Is there an x86 intrinsic that generates the AVX512 broadcast operation from a 32 bit floating point value in memory to a 512 bit register?是否有 x86 内在函数可以从内存中的 32 位浮点值生成 AVX512 广播操作到 512 位寄存器?
【发布时间】:2020-03-26 11:14:58
【问题描述】:

指令存在 (vbroadcastss zmm/m32),但似乎没有生成它的内在因素。

我可以把它编码为

static inline  __m512 mybroadcast(float *x) {
    __m512 v;
    asm inline ( "vbroadcastss %1,%0 "
                 : "=v" (v)
                 : "m" (*x)
                 );
    return v;
}

有没有办法在没有内联 asm 的情况下做到这一点?

【问题讨论】:

  • 您忘记在标签中指定使用哪种语言
  • 这将完全取决于编译器......但我怀疑“不:你已经得到了你可能找到的最佳解决方案”。
  • @FoggyDay 我在考虑标准的英特尔内在函数。
  • @JL2210: 是的,这是一个错字,x 操作数应该是 "m"(*x) 告诉编译器你希望 float 在内存中,而不是在内存中的指针.或者更好,"xm"(*x) 可能会让编译器在 XMM 寄存器中而不是内存中将它提供给您,以防万一;与 AVX1 不同,vbroadcastss 的 AVX2 和 AVX512 版本可用作 reg-reg shuffle 和负载。 felixcloutier.com/x86/vbroadcast。无论如何,这仍然比内在函数更糟糕,因为它在其他方面破坏了持续传播优化。
  • @PeterCordes 你不应该进行这样的全面编辑。

标签: c intrinsics avx512


【解决方案1】:

【讨论】:

  • @SteveLinton:如果您在同一份内在函数指南中搜索 broadcast,则 _mm_set1 内在函数会出现在结果中(隐藏在大量 AVX512 蒙面、未制作等内容下)。但是,如果您在页面内使用 control-f 搜索 float,您会很快找到它们以及 AVX1 _mm256_broadcast_ss。 (但没有该内在函数的 AVX512 版本。)
猜你喜欢
  • 2011-01-14
  • 2019-12-04
  • 1970-01-01
  • 2011-03-02
  • 2012-02-26
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多