7

我想在 Android 上获得我的移动应用程序的最大性能。我想知道是否有人知道检查手机是否具有 FPU 的技巧。

经过一些研究,似乎FloatMath在拥有 FPU 的单元上使用类会更慢,所以我希望两全其美。

大多数较新的手机都有 FPU,但我希望获得该设备可以提供的最高性能。

4

2 回答 2

9

它是底层的 Linux 内核,至少默认的 Android 配置会挂载procfs。这意味着您可以查看/proc/cpuinfo,它在 ARM 系统上看起来像:

# 猫 /proc/cpuinfo
处理器:ARMv7 处理器版本 3 (v7l)
BogoMIPS : 249.96
特点:swp 半拇指 fastmult vfp edsp 霓虹灯 vfpv3
CPU实现者:0x41
CPU架构:7
CPU变体:0x1
CPU部分:0xc08
CPU 修订版:3
[ ... ]

如果 " Features" 行至少列出了vfp,则 ARM SoC 具有 FPU。

您应该能够/proc/cpuinfo通过 Dalvik/Java 接口进行读取,就像普通文件一样,无需特权访问或任何要求。我不是 Java 程序员,所以将其作为练习留给读者。

于 2011-11-23T18:05:39.307 回答
1

尽管这是一个非常古老的线程,但对于像我这样被谷歌登陆这里的人来说可能会发现这很有用。在这里,我将展示我们如何使用 NDK (C++) 来完成它,因为已经给出了 Java 方式。

使用 NDK,通过包含cpu-features.h,我们可以利用许多 API 和预定义的宏来检测 FPU 的可用性。

对于32 位处理器,您应该检查 、 、 或 之一ANDROID_CPU_ARM_FEATURE_VFPv3ANDROID_CPU_ARM_FEATURE_VFPv2返回值,ANDROID_CPU_ARM_FEATURE_VFP_D32以确保您的处理器配备了 FPU。ANDROID_CPU_ARM_FEATURE_VFP_FP16ANDROID_CPU_ARM_FEATURE_VFP_FMAandroid_getCpuFeatures()

对于64 位,请检查ANDROID_CPU_ARM64_FEATURE_FP标志。

此外,调用android_getCpuFamily()以获取 CPU 系列/架构(ARM/MIPS、32/64 位等)。

cpufeatures 库手册包含在您的项目中包含和使用它的所有内容。

于 2017-11-05T06:30:13.643 回答