在AVX / SSE中将寄存器与任意通道选择组合的最快/最佳方法是什么?

时间:2014-09-01 17:09:41

标签: intel sse intrinsics avx

假设我有一个128寄存器,其中包含一些浮点数[x1,x2,x3,x4],另一个包含[y1,y2,y3,y4]。 得到类似[x1,y1,x2,y2]的最佳方式,性能明智是什么?

我想我可以多次移动寄存器,使用临时工,然后将它们组合成多个步骤,但我想知道我是否缺少一些方便的指令可以让我的生活更轻松。我认为这是一件很常见的事情,所以我想知道这里最好的做法是什么。

谢谢!

1 个答案:

答案 0 :(得分:3)

在这种特殊情况下,你可以用一条指令来完成:

z = _mm_unpacklo_epi32(x, y);

_mm_unpacklo_xxx / _mm_unpackhi_xxx对各种数据重组操作非常有用。对于更一般的情况,还有_mm_shuffle_xxx指令。