在Android上检测FPU存在

时间:2011-11-17 01:57:02

标签: android optimization mobile fpu

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

经过一些研究后,似乎在拥有FPU的单位上使用FloatMath类的速度较慢,所以我想拥有两个世界中最好的。

大多数新手机都有FPU,但我希望能够获得该设备所能提供的最佳性能。

2 个答案:

答案 0 :(得分:9)

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

# cat /proc/cpuinfo 
Processor       : ARMv7 Processor rev 3 (v7l)
BogoMIPS        : 249.96
Features        : swp half thumb fastmult vfp edsp neon vfpv3 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x1
CPU part        : 0xc08
CPU revision    : 3
[ ... ]

如果" Features"行列表至少vfp,然后ARM SoC有一个FPU。

您应该能够通过Dalvik / Java接口读取/proc/cpuinfo,就像普通文件一样,没有特权访问或任何需要的东西。我不是Java程序员,所以把它作为练习留给读者。

答案 1 :(得分:1)

即使它是一个非常古老的主题,对于像我这样的任何人来到这里谷歌可能会觉得这很有用。在这里,我展示了如何使用NDK(C ++)来实现它,因为已经给出了Java方法。

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

对于 32位处理器,您应该选中ANDROID_CPU_ARM_FEATURE_VFPv3ANDROID_CPU_ARM_FEATURE_VFPv2ANDROID_CPU_ARM_FEATURE_VFP_D32ANDROID_CPU_ARM_FEATURE_VFP_FP16ANDROID_CPU_ARM_FEATURE_VFP_FMA之一android_getCpuFeatures()的返回值,可确保您的处理器配备FPU。

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

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

cpufeatures library manual包含所有内容并在项目中使用它。