【问题标题】:Android ARMv6/v7 and VFP/NEONAndroid ARMv6/v7 和 VFP/NEON
【发布时间】:2012-03-12 21:57:19
【问题描述】:
我想了解更多 Android 手机上使用的 CPU。原因是我们正在构建 C 库,它具有我们可以设置的某些 CPU/数学处理器架构标志。
到目前为止,我们发现所有 Android 设备的 CPU 都是 ARM 设计的,或者是 ARMv6(旧设备、低端、华为、中兴、小 SE)或 ARMv7(Honeycomb 平板电脑和所有更昂贵的设备,几乎所有设备都具有 WVGA 或更高的分辨率)我检查了大约 20 台设备,并且都有这种类型的处理器。那是对的吗?还有其他的吗?
现在谈到多媒体和数学运算,我认为有两个单元很重要——浮点运算的 VFP 和 SIMD - NEON。在测试了上面提到的一组设备后,我发现几乎所有设备都支持 VFP,而 NEON 不支持。有什么办法吗?
我不知道 ARMv6 和 ARMv7 的区别到底是什么(除了一般的速度)。现在我们正在构建一个多媒体 C 库,它有几个用于构建的标志。我的问题是如何在一侧定位最多数量的设备,以及如何让更好设备的用户使用他们的硬件。我的建议是准备 3 个不同的版本:ARMv6/VFP、ARMv7/VFP 和 ARMv7/VFP/NEON。其他建议?
我认为 ARMv6/VFP 应该在所有配置上运行,但缺少 VFP 的设备除外(例如旧的 HTC Wildfire),但仍不受支持。
这是一个好方法吗?欢迎任何cmets。
问候,
斯滕
【问题讨论】:
标签:
android
arm
neon
armv7
【解决方案1】:
没错。目前有两种类型 - ARMv6 和 ARMv7。最有可能在最近的将来会有另外的 x86 目标。最新的 NDK 已经支持构建它。
VFP 在 ARMv7 上是强制性的,但在 ARMv6 上不是。 NEON 是可选的,并非所有设备都支持它。最明显的例子是 Nvidia Tegra 2。它部署在大多数高端平板电脑和手机上,但不支持 NEON。 Nvidia Tegra 3 支持 NEON。
我认为您应该坚持使用带有浮点仿真的 ARMv6、ARMv7+VFP、ARMv7+NEON。
完全正确 - 并非所有 ARMv6 设备都支持 VFP。所以根本不要在那里使用它。默认情况下,NDK 构建用于 ARMv6 设备且不使用 VFP 的 armeabi 目标。 armeabi-v7a 为 ARMv7 构建并使用 VFP。
【解决方案2】:
确实,大多数 Android 设备都属于这三类:
1) ARMv6
2) ARMv7
3) ARMv7 + 霓虹灯
NDK 不完全支持这一点。没有 ARMv6 ABI 构建目标,NDK 仅支持两个 ARM 构建目标:
1) ARMv5(将在所有 Android ARM 设备上运行)
2) ARMv7(可选择使用 VFP 和 NEON)
由此带来的限制是,如果您想使用 ARMv6 指令(来自 C 或 ASM 代码),您需要在 NDK 中定位 ARMv7 ABI。
【解决方案3】:
我会专注于 v7。
几乎没有任何新产品随 v6 一起发布,当您的库准备好生产时,v6 将不再是问题。
这里有一些信息:
- 霓虹灯总是包括 VFP
- Coretex A8 可以采用霓虹灯或无霓虹灯
- A8 的 Neon 上的 VFP 实际上是 VFP-lite,速度要慢得多。比 V6 的 VFP 慢得多。
- Coretex A9 及更高版本可以使用 Neon、VFP 或无。
- V7 有许多增强的指令,非常适合数学运算,除了双重问题能力。
- 芯片供应商可以省略 Neon 甚至 VFP,但无论如何他们都会向 ARM 支付相同的许可费。他们只会节省很少的制造成本。
- Neon 在有能力的手中非常强大,但不能做到双精度。
- 除了没有霓虹灯的 Tegra 之外,我不知道基于 v7 的 Android 手机没有霓虹灯。 (原因在上面)
- Tegra3 确实有 Neon