我想在 Android 上获得我的移动应用程序的最大性能。我想知道是否有人知道检查手机是否具有 FPU 的技巧。
经过一些研究,似乎FloatMath
在拥有 FPU 的单元上使用类会更慢,所以我希望两全其美。
大多数较新的手机都有 FPU,但我希望获得该设备可以提供的最高性能。
我想在 Android 上获得我的移动应用程序的最大性能。我想知道是否有人知道检查手机是否具有 FPU 的技巧。
经过一些研究,似乎FloatMath
在拥有 FPU 的单元上使用类会更慢,所以我希望两全其美。
大多数较新的手机都有 FPU,但我希望获得该设备可以提供的最高性能。
它是底层的 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 程序员,所以将其作为练习留给读者。
尽管这是一个非常古老的线程,但对于像我这样被谷歌登陆这里的人来说可能会发现这很有用。在这里,我将展示我们如何使用 NDK (C++) 来完成它,因为已经给出了 Java 方式。
使用 NDK,通过包含cpu-features.h,我们可以利用许多 API 和预定义的宏来检测 FPU 的可用性。
对于32 位处理器,您应该检查 、 、 或 之一ANDROID_CPU_ARM_FEATURE_VFPv3
的ANDROID_CPU_ARM_FEATURE_VFPv2
返回值,ANDROID_CPU_ARM_FEATURE_VFP_D32
以确保您的处理器配备了 FPU。ANDROID_CPU_ARM_FEATURE_VFP_FP16
ANDROID_CPU_ARM_FEATURE_VFP_FMA
android_getCpuFeatures()
对于64 位,请检查ANDROID_CPU_ARM64_FEATURE_FP
标志。
此外,调用android_getCpuFamily()
以获取 CPU 系列/架构(ARM/MIPS、32/64 位等)。
cpufeatures 库手册包含在您的项目中包含和使用它的所有内容。