【问题标题】:How can I exchange the middle two 64 bits in a 256 bit AVX(YMM) register如何在 256 位 AVX(YMM) 寄存器中交换中间两个 64 位
【发布时间】:2013-01-11 11:53:25
【问题描述】:

有什么办法可以交换256位AVX(YMM)寄存器中的中间两个64位吗?

我知道我们可以利用 VPERM2F128 来交换低 128 位和高 128 位,而 vshufps 似乎只能在高 128 位和低 128 位内工作。

所以我想知道对于这种典型情况是否有任何有效的说明?

提前致谢!

【问题讨论】:

  • 您将需要同时使用 shuffle 和 permute。没有指令既具有 64 位粒度又可以跨越 128 位边界。我认为 AVX2 将能够在一条指令中完成。
  • 我怀疑存在某种架构障碍将 YMM 寄存器的两半分开。 AVX 参考特别指出,对于 VPERMILPS/VPERMILPD,本来应该能够毫无问题地完成这项工作,“源元素被限制在与目标相同的源 128 位区域中”。

标签: x86 simd avx


【解决方案1】:

谢谢大家!我发现 AVX2 vpermq 可以很好地解决这个问题。

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 2012-05-26
    • 2021-06-02
    • 1970-01-01
    • 2019-04-21
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多