Quantcast
Channel: Статьи Intel Developer Zone
Viewing all articles
Browse latest Browse all 357

Разработка и оптимизация игровых приложений Android, созданных с помощью комплекта NDK, на платформах на базе архитектуры Intel®

$
0
0

Комплект NDK (Native Development Kit) для Android является дополнением к Android SDK и позволяет вам создавать приложения с использованием обычных языков программирования, таких как C и C++.

Вы можете скачать инструментарий NDK на сайте: http://developer.android.com/tools/sdk/ndk/index.html

Комплект NDK для архитектуры, использующей набор команд X86

Android является операционной системой с открытым исходным кодом, которая была разработана Google. В настоящее время ОС Android может работать с тремя семействами наборов команд архитектур ARM, x86 и MIPS. X86 означает семейство наборов команд архитектур, созданных на базе процессора Intel 8086, появившегося в 1978 году. Давайте установим различия между X86 (также называется архитектурой Intel®) и другими наборами микросхем, на которых работает ОС Android с точки зрения приложений.

Приложения для ОС Android можно разделить на два типа:

  • Приложения Dalvik, которые включают в себя код Java* и используют только необходимые файлы ресурсов официального прикладного программного интерфейса Android SDK, например, .xml и .png, скомпилированные в файл APK.
  • Приложения, созданные с помощью комплекта Android NDK, содержащие код Java, файлы ресурсов, исходный код C/C++, а иногда и код ассемблера. Весь оригинальный код компилируется в связанную динамическую библиотеку (файл .so), а затем вызывается с помощью Java в основной программе, используя механизм JNI.

Игровой движок Android

Игровой движок – это ключевой модуль для игровых приложений. Существует несколько движков, работающих в среде Android, в число которых входят движки 2D и 3D на основе открытого исходного кода, а также коммерческие модули. Зачастую существует трудность переноса и разработки игр для платформы Android на платформу Intel. Cocos2d-х и Unity 3D являются самыми популярными игровыми движками для платформ Android.

Движок Cocos2d-х основан на Cocos2d-iPhone, состоит из развивающихся поддерживаемых платформ и использует несколько языков программирования, которые применяют эту же структуру прикладного программного интерфейса. С момента своего появления в июле 2010 года движок cocos2d-х был скачан более 500 миллионов раз. Гиганты индустрии мобильных игр, такие как Zynga, Glu, GREE, DeNA, Konami, TinyCo, Gamevil, HandyGames, Renren Games, 4399, HappyElements, SDO и Kingsoft, используют cocos2d-х.

Unity 3D, разработанный компанией Unity Technologies, представляет собой кроссплатформенный игровой движок с встроенной технологией IDE. Он применяется для разработки видеоигр для веб-плагинов, платформ настольных ПК, консолей и мобильных устройств, и используется более чем миллионом разработчиков. Он был создан в 2005 году из средства разработки игровых приложений, поддерживаемых OS X, и теперь это многоплатформенный движок игровых приложений. Последнее обновление движка Unity 4.1 было выпущено в марте 2013 года. В настоящее время он поддерживает разработки для платформ iOS, Android, Windows, Blackberry 10, OS X, Linux, веб-браузеров, Flash*, PlayStation 3, Xbox 360, Windows Phone и Wii.

Разработка игр с помощью комплекта Android NDK для платформ Intel

Прежде чем мы будем говорить о разработке игр, необходимо представить платформу Android в целом. Как вы знаете, игры создаются в самых разных стилях. Различные стили игр требуют разных принципов разработки. В начале проекта, вы обычно выбираете жанр своей игры. Если вы не сможете придумать что-то совершенно новое и доселе неизвестное, высок шанс того, что ваша игра идея будет соответствовать одному из широко распространенных сейчас жанров. Большинство жанров устанавливают стандарты игровой механики (например, схемы управления, конкретные цели и т.д.). Отклонение от этих стандартов может сделать игру хитом, так как игрокам всегда нравится что-то новое. Вот некоторые из общеизвестных жанров:

  • Аркадные и экшн
  • Развивающие мышление и головоломки
  • Карточные игры и казино
  • Казуальные игры
  • Интерактивные обои
  • Гонки
  • Спортивные игры
  • Виджеты
  • и т.д.

Процесс разработки обычных игр для Android подобен разработке любого другого приложения. Во-первых, нужно загрузить комплекты Android SDK и NDK с сайта Google и корректно установить их.

Я предполагаю, что вы уже выполнили всю установку и подготовительные действия. Используя игровой движок Cocos2d-х в качестве примера, давайте рассмотрим, как создать игру для архитектуры Intel.

Загрузка Cocos2d-х

Загрузите последнюю стабильную версию Cocos2d-х с веб-сайта: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download

Запуск командного файла

Запустите командный файл из Проводника Windows. После запроса о местоположении проекта, установите его как com.yourproject.something, выберите имя проекта и целевой ИД. Это действие создаст папку с именем проекта в каталоге установки cocos2dx. Вы должны увидеть выполнение сценария без каких-либо ошибок, что-то подобное следующему:

Установка переменных среды для NDK_ROOT

Добавьте следующую переменную среды в конце файла home\<ваше_имя>\.bash_profile (в данном случае: c:\cygwin\home\user\.bash_profile):

NDK_ROOT=/cygdrive/<ваше_имя>/

export NDK_ROOT
 

Перезапустите cygwin,input cd $NDK_ROOT, и вы должны увидеть следующий экран:

Запуск файла build_native.sh

В конфигурации по умолчанию выбрана платформа ARM, и мы должны изменить ее для компиляции для платформы x86. Откройте файл \helloworld\proj.android \build_native.sh, найдите команду ndk-build и добавьте в ее конец параметр APP_ABI=x86. Запустите его в Cygwin, и вы увидите следующее:

Импорт проекта в Eclipse

Теперь перейдите в Eclipse, создайте новый проект (project -> Import) из существующего проекта

Сборка и запуск

На данном этапе в Eclipse возникнут некоторые ошибки:

The import org.cocos2dx.lib cannot be resolved HelloWorld.java

/HelloWorld/src/com/young40/test line 26 Java Problem Cocos2dxActivity cannot be resolved to a type HelloWorld.java

/HelloWorld/src/com/young40/test line 30 Java Problem Cocos2dxActivity cannot be resolved to a type HelloWorld.java

/HelloWorld/src/com/young40/test line 33 Java Problem

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

cocos2d-2.1beta3-x-2.1.1/cocos2dx/platform/android/java

Перейдите "Project -> Build"и выполните "Run As -> Android Application":

Будет создана инфраструктура игры для игрового движка cocos2dx. Чтобы игра стала полноценной, вы можете добавить в этот проект ресурсы логики игры, звуки, изображения и пр.

Оптимизация игр, созданных на основе комплекта NDK на платформе Intel

Intel® System Studio представляет собой набор инструментальных средств для профилирования и оптимизации приложений на платформе Android. Конечно, он также может использоваться для оптимизации игр. Intel System Studioвключает

  • Компилятор Intel® C++
  • Intel® Graphics Performance Analyzers
  • Intel® VTune™ Amplifier
  • (Intel® JTAG Debugger)

Мы не будем рассказывать подробно о каждом средстве. Вместо этого, мы рассмотрим пример, который показывает, как работают инструментальные средства Intel.

Во-первых, давайте возьмем приложение с названием Bounding Ball, которое мы будем запускать в системе на базе процессора Intel® Atom™ Z2460 (кодовое название Medfield). В игре насчитывается более 800 шариков, которые движутся с различной скоростью и хаотично сталкиваются друг с другом. После замеров FPS вы видите, что производительность игры недостаточна, и ее значение без оптимизации лишь равно 6.

Мы можем использовать Intel® Graphics Performance Analyzers (Intel® GPA), чтобы определить модуль, являющийся "узким"местом, и выяснить, если проблема относится к ЦП или его связям.

На следующем снимке экрана анализатора производительности графики Intel показана диаграмма, которая описывает данные этого приложения посредством анализа производительности на платформе Android. Изучив эти данные, вы можете заметить, что ЦП загружен на 52,5%. Это довольно высокий показатель для одного приложения. Между тем, процессы ISP Load, TA Load, TSP Load и USSE Total Load работают внутри GPU и используют процессор менее чем на 10%, а это означает, что GPU загружен нормально. Таким образом, можно сделать вывод, что узким местом является модуль центрального процессора. Для дальнейшего анализа проблемы загрузки ЦП, мы должны выполнить профилирование кода с использованием анализатора VTune™.

Здесь мы не будем описывать, как использовать анализатор VTune – мы просто поясним результаты, полученные после его запуска. Основными активными участками являются функции sin и cos внутри libm.so. Таким образом, вопрос заключается в следующем: почему приложение тратит столько времени и циклов процессора для обработки этих двух функций?

Проверяя исходный код приложения, мы обнаружили, что эти две функции вызываются, когда каждый шарик отображается с помощью OpenGL ES*. Хотя геометрия всех шариков одинакова, они имеют разный размер. Мы можем дублировать шарики с помощью функции glScale OpenGL, поэтому загрузка функции может быть существенно снижена.

После оптимизации кода производительность повысилась на 80%, и показатель FPS равен 14. Более того, мы можем скомпилировать приложение с помощью компилятора Intel C/C++ для получения более высокой производительности на платформах архитектуры Intel. Компилятор Intel C/C++ имеет множество флагов для оптимизации производительности на платформах архитектуры Intel. Мы хотим представить некоторые из них.

  • SSSE3_ATOM
    Команды Supplemental Streaming SIMD Extensions 3 (SSSE3 или SSE3S) являются набором команд SIMD, который был создан Intel и представляет четвертую редакцию технологии SSE.
  • IPO
    Межпроцедурный флаг оптимизации, позволяющий уменьшить число вызовов функций, найти неиспользуемый код и изменить порядок распространения констант и процедур.
  • PGO
    Флаг профильной оптимизации, который анализирует оставшиеся без ответа вопросы оптимизатора, например:
    • Как часто х > у
    • Каков размер счетчика
    • Какой код используется и как часто

Кроме того, компилятор Intel C/C++ также может повысить производительность приложений, выполнив следующее:

  • Более точное прогнозирование ветвлений
  • Перемещение общих компонентов для совершенствования кэша команд
  • Поиск лучшего решения при выстраивании порядка функций (помощь IPO)
  • Лучшая оптимизация упорядочивания функций
  • Оптимизация команд-переключателей
  • Лучшие решения векторизации

С использованием различных компиляторов и различных параметров компиляции приложение может иметь различную производительность. Далее приводится сравнение производительности двух компиляторов – GCC и ICC. Одно и то же приложение Bounding Ball работает на телефоне Android на базе платформы Intel Medfield. Синяя часть – это производительность GCC, красная – ICC. В основе лежит компиляция без каких-либо параметров. Вторая часть диаграммы представляет компиляцию с использованием параметра arch=atom. Третья часть – это повторная компиляция со всеми упомянутыми выше параметрами. Наконец, вы можете оценить, что производительность приложения, скомпилированного с помощью ICC, на 60% выше, чем с использованием GCC.

Заключение

В этой статье было представлено введение в разработку игровых приложений для ОС Android и оптимизация приложений на платформах с архитектурой Intel. Движки игровых приложений являются основными компонентами разработки любых игр. Если они хорошо работают на платформах с архитектурой Intel, то и игры также будут хорошо работать на этих платформах. Мы рассмотрели популярный игровой движок cocos2dx в качестве примера для демонстрации разработки на платформах с архитектурой Intel. Корпорация Intel также предлагает разработчикам множество инструментальных средств для оптимизации игровых приложений на платформах Android. Используя средство Intel System Studio, мы продемонстрировали, как оптимизировать демонстрационное приложение.

Об авторе

Тао Пэн (Tao Peng) инженер по приложениям в подразделении программного обеспечения и услуг корпорации Intel, где его работа сосредоточена на внедрении мобильных приложений, включая разработку программ для платформ Android и их оптимизацию для устройств x86, а также веб-разработки приложений HTML5.


Viewing all articles
Browse latest Browse all 357

Trending Articles