如何使用 Intel 内在函数重新排序 128 位向量?

How can I reorder a 128 bit vector using Intel intrinsics?

我有一个已计算的 4 个浮点数的 128 位向量,我想像这样更改此向量的顺序:

Vector A before reordering
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+

Vector A after reordering
+---+---+---+---+
| b | a | c | d |
+---+---+---+---+

正如我所说,矢量是通过早期计算计算出来的,所以无法使用 _mm_set_ps()...任何人都知道如何完成它?

您正在寻找 SHUFPS instruction(随机打包的单精度浮点数)。
对应的内在是_mm_shuffle_ps:

__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8);

第三个参数,8位立即数,是排列。这表明您希望如何打乱这些值。要以可读的方式创建它,您需要使用 _MM_SHUFFLE 宏。这是有关 _MM_SHUFFLE 工作原理的有用图形说明,摘自 some old Microsoft documentation: