2011-11-17 2 views
6

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

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

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

+2

Прошел ли кто-нибудь из процессоров без FPU за последние 15 лет? – Robert

+1

Некоторые телефоны Android не имеют одного, вот и все. HTC Hero, например, – gimpycpu

+1

@gimpycpu Я звоню в shenanigans. Я не могу понять, что CPU не имеет FPU –

ответ

8

Это под Linux под 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.

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

0

Несмотря на то, что это очень старая тема, для тех, кто, как я, приземлился здесь, может оказаться полезным. Здесь я показываю, как мы можем это сделать, используя 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 library manual есть все, что можно включить и использовать в своем проекте.

Смежные вопросы