如何使用 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:
我有一个已计算的 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: