Detecting FPU presence on Android

孤人 提交于 2019-12-17 20:34:45

问题


I want to get the most performance of my mobile application on Android. I would like to know if someone is aware of a trick to check if the phone possesses an FPU.

After some research it seems that using FloatMath class is slower on a unit that possesses an FPU, so I would like to have best of both worlds.

Most newer phones have an FPU, but I would like to get the most performance the device can offer.


回答1:


It's a Linux kernel underneath, and at least the default Android configuration will mount procfs. That means you can look into /proc/cpuinfo, which on an ARM system looks something like:

# 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
[ ... ]

If the "Features" line lists at least vfp, then the ARM SoC has an FPU.

You should be able to read /proc/cpuinfo via Dalvik/Java interfaces, just like a normal file, no privileged access or anything required. I'm not a Java programmer, so leaving that as an exercise to the reader.




回答2:


Even though it is a very old thread, for anyone like me landed here by google may find this useful. Here I am showing how we can do it using NDK (C++) as the Java-way is already given.

Using NDK, by including cpu-features.h, we can utilize a number of API and predefined macros to detect the availability of FPU.

For 32 bit processor, you should check one of ANDROID_CPU_ARM_FEATURE_VFPv3, ANDROID_CPU_ARM_FEATURE_VFPv2, ANDROID_CPU_ARM_FEATURE_VFP_D32, ANDROID_CPU_ARM_FEATURE_VFP_FP16 or ANDROID_CPU_ARM_FEATURE_VFP_FMA on the return value of android_getCpuFeatures() which will ensure that your processor is armed with an FPU.

For 64 bit, please check ANDROID_CPU_ARM64_FEATURE_FP flag.

Additionally, call android_getCpuFamily() to get CPU family/architecture (ARM/MIPS, 32/64 bit etc).

The cpufeatures library manual has everything to include and use it in your project.



来源:https://stackoverflow.com/questions/8161184/detecting-fpu-presence-on-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!