android - 使用 ARM neon 将短数组转换为 float

标签 android c arm assembly neon

我刚刚开始尝试使用 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/

相关文章:

android - 使用 QT 创建 Android 库

c - 整数不作为对 Swift 中函数的引用传递

objective-c - C 对比 vDSP 对比 NEON - NEON 怎么会和 C 一样慢?

arm - 使用 NEON 指令与零进行比较

c++ - Linux, openssl : where is THIRTY_TWO_BIT defined?

android - 如何同时使抽屉导航选框 ListView 中的所有 TextView ?

Android 媒体播放器在接到来电后无法恢复。?

c - 左移 uint64_t 将最重要的双字清零

c - "long"在 C 中仍然有用吗?

java - 如何将 URI 传递给 Intent ?