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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With