我刚刚开始尝试使用 NEON 优化一些 android 代码。但是,我遇到了一些问题。主要问题是我真的不知道如何快速将 16 位转换为 float 。
我发现可以使用 vcvt.s32.f32 在 1 条 SIMD 指令中将多个 32 位整数转换为 float 。但是,如何将一组 4 个 S16 转换为 4 个 S32?我认为它与 VUZP 指令有关,但我不知道如何...
同样,我看到可以使用 VCVT.s16.f32 一次将 1 个 16 位转换为 float ,但虽然这很有用,但不能使用 SIMD 来完成它似乎非常浪费。
多年来,我在许多不同的平台上编写过汇编程序,但出于某种原因,我发现 ARM 文档完全深不可测。
因此,我们将不胜感激任何帮助。
还有什么方法可以获取 NEON 单元的吞吐量和延迟数据?
提前致谢!
最佳答案
如果在从 16 位整数到 32 位整数的转换过程中不需要进行其他计算,您可以使用 uint32x4_t = vmovl_u16 (uint16x4_t)
如果在转换之前执行任何简单的加法或乘法等,您可以将它们组合在一条指令中,例如 int32x4_t = vmull_u16 (int16x4_t, int16x4_t) 或 int32x4_t = vaddl_u16 (int16x4_t , int16x4_t) 等,从而节省了一些周期。
关于android - 使用 ARM neon 将短数组转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7799395/