Разработка и оценка 64-разрядных приложений для Android* на платформах Intel® x86

Автор: ZHEN ZHOU (Intel) 1 декабря 2014 г.

Введение

В современных мощных мобильных устройствах все чаще используется 64-разрядная архитектура. Использование 64-разрядной версии Android* — отличный способ добиться успеха на рынке. В этой статье описывается Android на 64-разрядных процессорах Intel® и рассматриваются уникальные возможности этой системы, технические сведения, данные о приросте производительности, проблемы и решения для Android на платформах с процессором Intel® Atom™.

Корпорация Intel постоянно реализует новые современные возможности в своих 64‑разрядных процессорах. Если разработчики хотят воспользоваться инструкциями Intel® AES-NI и другими новинками, достаточно скомпилировать их приложения для 64‑разрядного режима. Корпорация Intel работает над оптимизацией Android для 64‑разрядных архитектур и создает SDK, раскрывающие возможности ЦП для высокоуровневого кода.

Корпорация Google недавно выпустила образ эмулятора Android 5.0 для 64-разрядной архитектуры x86, поэтому разработчики могут

32- и 64-разрядные версии Android

Многие современные 64-разрядные платформы, включая Solaris, AIX*, HP-UX*, Linux*, OS X*, BSD и IBM z/OS*, используют модель LP64. Поскольку операционная система Android основывается на ядре Linux, 64-разрядные версии Android также используют модель LP64 [1]. Тип данных показан на рис. 1.


Рисунок 1. Размеры различных типов данных в моделях LP32 и LP64

64-разрядные ЦП Intel поддерживают режим совместимости с 32-разрядной архитектурой. 32-разрядные приложения будут работать на 64-разрядных процессорах, но компиляция с оптимизацией для 64-разрядной архитектуры позволит воспользоваться всеми преимуществами 64-разрядной среды.

Создание приложений Android для 64-разрядной среды

Для приложений Android на базе NDK нужно собрать библиотеки нативного кода для поддержки 64-разрядных систем. Для этого нужно выполнить следующие действия:

  1. Загрузите и установите нужную версию NDK.
    Ее можно получить на официальном веб-сайте [2] или самостоятельно собрать в AOSP.
    [Примечание. Существуют две версии NDK для 32- и 64-разрядных систем, начиная с NDK R10.]
    Для ОС Windows* и Linux необходимо распаковать файл NDK и задать нужный путь в переменной среды PATH.
  2. Соберите библиотеки для поддержки 64-разрядных систем.
    Используйте ABI x86_64 для сборки проекта с помощью команды ndk-build APP_ABI=x86_64. Это наилучший способ сборки нативных библиотек для 64‑разрядных систем Android на платформе x86. Для других платформ нужно указать для параметра APP_ABI значение arm64-v8a или mips64. Также можно добавить строку APP_ABI = x86_64 в файл Application.mk и использовать команду ndk-build напрямую.
    В большинстве случаев приведенная выше команда будет работать правильно, но иногда могут возникать ошибки. Необходимо будет исправить нативный код на основе информации об ошибках.
  3. Заново соберите весь проект, чтобы получить новое приложение.
    Теперь можно установить созданное приложение и протестировать его на эмуляторе или на целевых устройствах.

Запуск 64-разрядных приложений на эмуляторах

При отсутствии устройств с полной поддержкой 64-разрядной архитектуры можно тестировать приложения на эмуляторе. Команда Android Dev объявила о выпуске 64‑разрядного эмулятора Android L для архитектуры Intel x86 [3]. Нужно загрузить и установить 64-разрядный образ системы для процессора Intel Atom с помощью Android SDK Manager. Как показано на рис. 2, в Android SDK Manager можно выбрать образ Intel x86 Atom_64 System Image в разделе Android 5.0 (API 21) и установить его.


Рисунок 2. Флажок Intel® x86 Atom_64 System Image в Android* SDK Manager

Создайте новое виртуальное устройство Android (AVD) на базе 64-разрядного системного образа для процессора Intel Atom и откройте AVD Manager в SDK Manager или ADT. Затем щелкните Create и заполните поля, как показано на рис. 3. Теперь 64-разрядный эмулятор AVD готов к работе..


Рисунок 3. Создайте образ x64 в AVD.

Выполните следующие действия для запуска 64-разрядного приложения в эмуляторе.

  • Измените файл ./jni/application.mk, указав APP_ABI := x86_64.
  • Скомпилируйте файлы с нативным кодом.
  • Запустите приложение Android на AVD.


Рисунок 4. Приложение с именем x86_64 Hello-JNI на AVD x64

Производительность на 64-разрядной платформе Android x86

Тестирование показало, что приложение работает быстрее в 64-разрядных системах. Мы запустили демонстрационную версию приложения для шифрования на устройстве с 64-разрядной архитектурой Intel с процессором Bay Trail. В этой демонстрационной программе используются Android и Intel AES-NI последних версий. На рис. 5 показаны результаты шифрования файла MP4 объемом 312 МБ. Без учета времени ввода-вывода общее время составляет 1,56 с в 32-разрядной системе Android 5.0, а в 64-разрядной системе Android 5.0 общее время составило 1,49 с, то есть производительность повысилась на 5 % [4].


Рисунок 5. Время шифрования MP4 с помощью Intel® AES-NI

Подробные результаты тестирования показаны в следующей таблице.

Таблица 1. Подробные результаты тестирования приложения для шифрования

Общее время (+чтение и запись SD)
(секунды)

Время шифрования (–чтение и запись SD)
(секунды)

Android* 5.0
64-разрядная версия

Android 5.0
32-разрядная версия

Android 5.0
64-разрядная версия

Android 5.0
32-разрядная версия

7.046

7.379

1.498

1.649

7.152

7.27

1.49

1.529

7.011

7.368

1.529

1.57

7.151

7.196

1.487

1.522

7.182

7.282

1.468

1.548

7.1084

7.299

1.4944

1.5636

Также мы собрали 64-разрядный кодек FFMPEG и измерили его производительность в Android 5.0. Согласно результатам измерений средняя кадровая скорость в 64-разрядной версии примерно на 7 % выше, чем у 32-разрядной версии на той же платформе Bay Trail [4].


Рисунок 7. Кадровая скорость воспроизведения видео MP4 с разрешением 1080p с помощью FFMPEG на 64-разрядной платформе Android*

Вот еще два примера повышения производительности в 64-разрядной версии Android на платформах Intel. Тестирование приложений некоторых китайских разработчиков программного обеспечения показало увеличение производительности на 7—8 % [4] на 64-разрядной архитектуре по сравнению с 32-разрядной.

Для приложения для декодирования мультимедиа:

этот тест показывает, что производительность при воспроизведении всех форматов (3GP, AVI, FLV, MKV, MOV, MP4, RMVB и WMV) увеличилась в среднем на 20 % (в 64‑разрядной архитектуре по сравнению с 32-разрядной) [4].

Рисунок 8. Кадровая скорость приложения для декодирования мультимедиа в 64‑разрядной версии Android*

Для приложения для распознавания речи:

в модуле синтеза речи для 64-разрядной версии Android производительность возросла на 40 % + ART (10 % по сравнению с 32-разрядной архитектурой) [4].

 

Рисунок 9. Время инициализации модуля синтеза голоса в 64-разрядной версии Android*

Мы провели анализ модулей этой демонстрационной программы для распознавания речи в 64- и 32-разрядных версиях Android, в том числе замерили скорость операций get token, sty cpy, stream и getline: (мс).

Рисунок 10. Результаты работы модулей распознавания речи в 64-разрядной версии Android*

Очевидно преимущество 64-разрядных приложений, особенно в отношении операций ввода-вывода с памятью и поточных операций.

Заключение

Android L с поддержкой 64-разрядной архитектуры платформ Intel Atom помогает разработчикам оптимизировать свои приложения. Сборка приложений Android для 64‑разрядной архитектуры столь же проста, как и сборка традиционных 32-разрядных приложений Android. Теперь можно использовать официальный 64-разрядный эмулятор Android для запуска и отладки 64-разрядных приложений. Для тестирования производительности 64-разрядных платформ x86 Android мы собрали несколько проектов с открытым исходным кодом для 64-разрядной архитектуры, а также попросили некоторых ведущих разработчиков программного обеспечения в Китае выпустить 64‑разрядные версии своих приложений. В среднем на 64-разрядной архитектуре производительность выше на 7—8 % (а в одном особом случае — на 20 %) по сравнению с 32-разрядной архитектурой.

Статьи по теме

64-разрядная версия ОС Android
https://software.intel.com/ru-ru/android/articles/64-bit-android-os

Выравнивание памяти в архитектурах x86 и ARM в Android:
https://software.intel.com/ru-ru/blogs/2011/08/18/understanding-x86-vs-arm-memory-alignment-on-android

 

Справочные материалы

[1] http://en.wikipedia.org/wiki/64-bit_computing
[2] http://developer.Android.com/tools/sdk/ndk/index.html
[3] https://plus.google.com/+AndroidDevelopers/posts/XG1WmNDMe8H
[4] Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения высокой производительности на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся на определенных компьютерных системах, компонентах, программах, операциях и функциях. Любые изменения любого из этих элементов могут привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами. Конфигурации: [Asus T100 (ЦП Intel Atom Baytrail T Z3740, 2 ГБ ОЗУ, SSD), тест производительности выполнили Джань Ли (Zhang Li) и Джоу Жень (Zhou Zhen)]. Дополнительные сведения см. на сайтеhttp://www.intel.com/performance.

Об авторах

Жень Джоу получил степень магистра в области разработки программного обеспечения в шанхайском университете. Он поступил на работу в корпорацию Intel в 2011 году на должность инженера по разработке приложений в отдел Developer Relations Division Mobile Enabling Team. Он работает с внутренними заказчиками и внешними поставщиками программного обеспечения, поставщиками услуг и операторами связи в области развития новых моделей использования и разработки прототипов на процессорах Intel Atom, традиционной архитектуры Intel и встроенных платформ.

Чжань Ли — инженер по разработке приложений в отделе Intel® Software and Solutions Group (SSG) в подразделении Developer Relations Division в составе группы Mobile Enabling Team. Он занимается поддержкой приложений для Android.

ВложениеРазмер
Иконка изображения 1.png33.03 КБ
Иконка изображения 2.png17.43 КБ
Иконка изображения 3.png16.47 КБ
Иконка изображения 5.png18.1 КБ
Иконка изображения 4.png16.61 КБ
Иконка изображения 6.png14.73 КБ
Иконка изображения 7.png18.1 КБ
Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.