Автор: 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-разрядных систем. Для этого нужно выполнить следующие действия:
- Загрузите и установите нужную версию NDK.
Ее можно получить на официальном веб-сайте [2] или самостоятельно собрать в AOSP.
[Примечание. Существуют две версии NDK для 32- и 64-разрядных систем, начиная с NDK R10.]
Для ОС Windows* и Linux необходимо распаковать файл NDK и задать нужный путь в переменной среды PATH. - Соберите библиотеки для поддержки 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 напрямую.
В большинстве случаев приведенная выше команда будет работать правильно, но иногда могут возникать ошибки. Необходимо будет исправить нативный код на основе информации об ошибках. - Заново соберите весь проект, чтобы получить новое приложение.
Теперь можно установить созданное приложение и протестировать его на эмуляторе или на целевых устройствах.
Запуск 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 | Android 5.0 | Android 5.0 | Android 5.0 |
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.