Обнаружение наличия FPU на Android - PullRequest
7 голосов
/ 17 ноября 2011

Я хочу получить максимальную производительность моего мобильного приложения на Android.Я хотел бы знать, знает ли кто-нибудь об уловке, чтобы проверить, обладает ли телефон FPU.

После некоторых исследований кажется, что использование класса FloatMath медленнее на устройстве, которое имеет FPU, поэтому яхотелось бы иметь лучшее из обоих миров.

Большинство новых телефонов имеют FPU, но я хотел бы получить максимальную производительность, которую может предложить устройство.

Ответы [ 2 ]

9 голосов
/ 23 ноября 2011

Это ядро ​​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, то в SoC ARM есть FPU.

Вы должны иметь возможность читать /proc/cpuinfo через интерфейсы Dalvik / Java, как обычный файл, без привилегированного доступа или чего-либо еще.Я не программист на Java, поэтому оставляю это в качестве упражнения для читателя.

1 голос
/ 05 ноября 2017

Несмотря на то, что это очень старая тема, для любого, как я, найденного здесь Google, может оказаться полезным. Здесь я показываю, как мы можем сделать это, используя 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, ANDROID_CPU_ARM_FEATURE_VFP_FP16 или ANDROID_CPU_ARM_FEATURE_VFP_FMA в возвращаемом значении android_getCpuFeatures(), который будет гарантировать, что ваш процессор оснащен FPU.

Для 64 бит установите флажок ANDROID_CPU_ARM64_FEATURE_FP.

Кроме того, позвоните android_getCpuFamily(), чтобы получить семейство / архитектуру ЦП (ARM / MIPS, 32/64 бит и т. Д.).

В руководстве по библиотеке cpufeatures есть все, что нужно включить и использовать в своем проекте.

...