【发布时间】:2017-06-25 14:37:13
【问题描述】:
我有一个 4 个浮点数的 128 位向量已经计算出来,我想像这样改变这个向量的顺序:
Vector A before reordering
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
Vector A after reordering
+---+---+---+---+
| b | a | c | d |
+---+---+---+---+
正如我所说的,向量是通过早期计算计算出来的,所以无法使用_mm_set_ps()...有人知道如何完成吗?
【问题讨论】:
-
用 gcc 或 clang 编译
__m128 f(__m128 x){return _mm_setr_ps(x[1],x[0],x[2],x[3]);}和-O3 -msse4产生shufps $225, %xmm0, %xmm0,看起来像是一个强烈的提示...... -
查看software.intel.com/sites/landingpage/IntrinsicsGuide 以获得方便的搜索工具,以及sse tag wiki 和x86 tag wiki 中的其他链接。如果你发现你的代码有太多的洗牌,看看重新排列你的数据结构,或者你如何向量化一个嵌套循环,尽可能减少洗牌的数量。
标签: c x86 sse simd intrinsics