Intereting Posts
Android InApp Billing v3 – тестирование с использованием нескольких устройств Множественное уведомление Android Платформа Android S3 против макета Galaxy Nexus Сохранение пользовательского интерфейса при изменении ориентации – onSaveInstanceState не работает, как ожидалось, если сохранить фрагмент Получить текущее местоположение пользователя без использования gps или Интернета, но используя Network_Provider в android Как написанный для Android-скрипт для ARM на языке x86? Android-залп, отправляющий данные дважды Вопросы эмулятора Android создает папки во внутренней памяти Использование javaagent с Android Как включить перенос приложения на SD-карту (и поддержка андроида еще <2.2)? Защитите и удалите защищенный файл, чтобы избежать случайного удаления на Android с помощью прослушиваемых приложений для очистки Не удалось найти оболочку градиента в Android SDK. Возможно, вам нужно обновить Android SDK Как определить макет в PopupWindow из XML-файла, когда метод PopupWindow вызывается из отдельного класса Как добавить компьютеры в белый список отладки Android USB

Математическая производительность с плавающей запятой Android

У меня есть приложение для Android, которое использует NDK для выполнения большого количества математики с плавающей запятой.

Я только что приобрел новый Galaxy Nexus. К моему удивлению, мое приложение работает МНОГО медленнее, чем нужно. Я подозреваю, что это связано с тем, что большинство устройств используют аппаратное ускорение, а Galaxy Nexus – нет. Если я выполняю операцию, которая не требует математики с плавающей запятой, Galaxy Nexus выполняет так, как я ожидал.

Здесь приведены спецификации CPU / GPU и временные интервалы выборки для нескольких устройств. Я нормализовал статистику, чтобы учесть разрешение экрана:

Droid CPU: TI OMAP 3430 (ARM Cortex-A8 600 MHz underclocked to 550 MHz) GPU: PowerVR SGX530 Instruction Set: ARMv7 Test Run: 1,980 pixels per second Galaxy Nexus CPU: TI OMAP 4460 (ARM Cortex-A9 dual-core 1.2 GHz) GPU: PowerVR SGX540 Instruction Set: ARMv7 Test Run: 2,253 pixels per second Droid Incredible CPU: QSD8650 (Qualcomm Snapdragon 1 GHz) GPU: Adreno 200 Instruction Set: ARMv7 Test Run: 4,571 pixels per second 

У меня есть эта конфигурация в файле Application.mk :

 APP_ABI := armeabi armeabi-v7a 

Я не перекомпилировал свой код с NDK-r7, но я не понимаю, почему это привело бы к такой драматической разнице. Любая идея, что не так?

Вы можете попытаться использовать APP_ABI := armeabi-v7a чтобы принудительно использовать только инструкции v7a.
Я мог представить, что новый процессор не распознается как поддерживающий инструкции v7a и что, таким образом, код no-FPU используется во время выполнения в качестве резервной копии.

Этот вопрос StackOverflow может быть причиной низкой производительности вашего Galaxy Nexus: Galaxy Nexus – неправильный процессор ABI, выбранный во время установки .

Кажется, это ошибка. Я также тестировал его, создав небольшой проект с использованием собственного кода, и, действительно, Galaxy Nexus выбирает неправильную библиотеку (armeabi вместо armeabi-v7a).

Я сообщил об этой ошибке на странице http://code.google.com/p/android/issues/detail?id=25321 , с примером проекта, прикрепленным к ошибке. Пожалуйста, запустите его, чтобы привлечь внимание инженеров Android.

Я думаю, проблема в том, что в процессоре есть 2 ядра. Таким образом, у вас есть 600 Mhz для одного ядра. Поэтому, если ваш математический метод использует только один поток, это может быть ответом. Хотя, я не понимаю, почему он в 2 раза медленнее (сопоставимое время можно объяснить).