【发布时间】: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 位区域中”。