gpt4 book ai didi

arm - 如何使用 ARM Neon 内在函数重新排序矢量数据?

转载 作者:行者123 更新时间:2023-12-03 21:02:59 25 4
gpt4 key购买 nike

这与 ARM Neon SIMD 编码特别相关。我正在为视频解码器中的某些模块使用 ARM Neon instrinsics。我有一个矢量化数据如下:

Neon 寄存器中有四个 32 位元素 - 例如 Q0 - 大小为 128 位。

3B 3A 1B 1A

在其他 Neon 寄存器中还有另外四个 32 位元素,例如 Q1,其大小为 128 位。
3D 3C 1D 1C

我希望最终数据有序,如下所示:
1D 1C 1B 1A
3D 3C 3B 3A

什么 Neon instrinsics 可以实现所需的数据顺序?

最佳答案

像这样的东西怎么样:

  int32x4_t q0, q1;

/* split into 64 bit vectors */
int32x2_t q0_hi = vget_high_s32 (q0);
int32x2_t q1_hi = vget_high_s32 (q1);
int32x2_t q0_lo = vget_low_s32 (q0);
int32x2_t q1_lo = vget_low_s32 (q1);

/* recombine into 128 bit vectors */
q0 = vcombine_s32 (q0_lo, q1_lo);
q1 = vcombine_s32 (q0_hi, q1_hi);

理论上这应该只编译成两个移动指令,因为 vget_high 和 vget_low 只是将 128 位 Q 寄存器重新解释为两个 64 位 D 寄存器。 vcombine otoh 仅编译为一两次移动(取决于寄存器分配)。

哦 - 输出中整数的顺序可能完全是错误的。如果是这样,只需将参数交换为 vcombine_s32。

关于arm - 如何使用 ARM Neon 内在函数重新排序矢量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com