Низкая производительность с NDK - PullRequest
0 голосов
/ 29 января 2012

У меня есть библиотека безопасности на C, и я пытаюсь импортировать ее в мой проект Android, используя NDK.Библиотека зависит от трех других библиотек: pbc, gmp и openssl.Я построил первые две библиотеки в виде статических библиотек, а последнюю в качестве разделяемых библиотек.

Я рассчитал функции encrypt () и decrypt () в моей библиотеке.

На моем ноутбуке это:

  • encrypt () 30мс
  • decrypt () 160мс

На моем устройстве Android (Droid 2.2.3), это:

  • encrypt () 190ms
  • decrypt () 1300ms

Время только для вызова этих двух функцийиз библиотеки C.Затраты JNI очень малы.

Ожидается ли это?

Обновление:

Оба функции encrypt () и decrypt () не имеют операций ввода-вывода, в основном операций с плавающей запятой,И я скомпилировал код для armeabi-v7a.

1 Ответ

7 голосов
/ 29 января 2012

Прежде всего, я бы сказал, что вам повезло - ваш порт работает только в 8 раз медленнее, чем версия для ноутбука.Это довольно хороший результат для платформ на базе ARM.

Существует несколько причин замедления ARM:

  • Процессоры ARM просто имеют меньшую вычислительную мощность, чем настольные процессоры Intel / AMD для настольных ПК.
  • Медленная память и меньшая пропускная способность
  • Различные архитектурные ограничения (например, модуль с плавающей запятой отделен от целочисленного ядра ЦП в ARM)

Вы можете попробовать следующие вещичтобы улучшить производительность вашего кода:

  • Если ваш телефон оснащен современным FPU, вы можете попробовать перекомпилировать все библиотеки с дополнительным флагом компилятора -mfpu=vfpv3 (или -mfpu=neon).Это может немного повысить скорость вычислений с плавающей запятой из-за удвоенного числа регистров FPU.
  • Попробуйте построить свой код с более новым компилятором. Последняя версия Crystax NDK , которая является модифицированной версией Google NDK, включает в себя gcc 4.6 toolchain.Иногда новый компилятор может создавать более эффективный код.
  • Профилируйте ваш код и оптимизируйте узкие места.Вы можете использовать ряд специальных приемов оптимизации ( здесь немного устаревший, но хороший справочник) или проверить код с помощью NEON SIMD.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...