【问题标题】:What is the fastest/best way to combine registers with arbitrary lane selections in AVX/SSE?在 AVX/SSE 中将寄存器与任意通道选择相结合的最快/最佳方法是什么?
【发布时间】:2014-10-25 22:51:49
【问题描述】:

假设我有一个 128 寄存器持有一些浮点数 [x1,x2,x3,x4] 和另一个持有 [y1,y2,y3,y4]。 在性能方面,获得类似 [x1,y1,x2,y2] 的最佳方法是什么?

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

谢谢!

【问题讨论】:

    标签: intel sse intrinsics avx


    【解决方案1】:

    在这种特殊情况下,您可以通过一条指令完成:

    z = _mm_unpacklo_epi32(x, y);
    

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

    【讨论】:

    • 太酷了!我稍后会试一试。一般来说,这是我应该检查任意车道选择的指令系列吗?还有其他这样方便的技巧吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 2011-12-25
    • 1970-01-01
    • 2011-11-05
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多