Спасибо большое за идею исследовать масштабируемость данного приложения. Мы решили провести «усложненный» тест производительности. Демонстрационное приложение из статьи вычисляет взаимодействие 192 коробок, падающих на плоскость. Мы заставили наше устройство попотеть — увеличили число коробок в 16 раз — 3072 штуки.
ARM версия — 2 fps
x86 версия — 4 fps
Замеры проводились на одном и том же устройстве Samsung Galaxy tab 3 10.1, брали средний FPS за минуту работы приложения.
Чтобы убедиться, что данное приложение является CPU-bound, то есть львиная доля работы приходится именно на вычислительную составляющую мы воспользовались возможностью Intel GPA — Disable Draw Calls (данный эксперимент эмулирует бесконечно быстрый драйвер и GPU) в результате FPS не изменился, следовательно можно предположить, что данное приложение CPU-bound.
Да, вы поняли правильно — под ARM взята версия из коробки, а под х86 потребовались небольшие изменения, но они окупились. :)
Для того чтобы ответить на ваше вопрос нужно сначала проанализировать какой ассемблер генерится компилятором, если он не векторизует критические к производительности участки кода, то тогда необходима ручная модификация, например, переписывание на интринсики или ассемблерные вставки. Такой анализ мы еще не проводили.
Версия 2.6.29 используется в эмуляторе, который идет с Android SDK. Если этой версии не достаточно, можно попробовать собрать более новую. Процесс точно такой же — единственное отличие это конфигурационный файл.
1. Профилирование. Подразумевается низкоуровневое профилирование с помощью профилировщиков: Oprofile, Perf. Все они требуют включения опции в ядре.
2. Сборка собственных модулей может потребоваться для поддержки аппаратной части. Например, собрать отладочную версию видеодрайвера.
ARM версия — 2 fps
x86 версия — 4 fps
Замеры проводились на одном и том же устройстве Samsung Galaxy tab 3 10.1, брали средний FPS за минуту работы приложения.
Чтобы убедиться, что данное приложение является CPU-bound, то есть львиная доля работы приходится именно на вычислительную составляющую мы воспользовались возможностью Intel GPA — Disable Draw Calls (данный эксперимент эмулирует бесконечно быстрый драйвер и GPU) в результате FPS не изменился, следовательно можно предположить, что данное приложение CPU-bound.
Для того чтобы ответить на ваше вопрос нужно сначала проанализировать какой ассемблер генерится компилятором, если он не векторизует критические к производительности участки кода, то тогда необходима ручная модификация, например, переписывание на интринсики или ассемблерные вставки. Такой анализ мы еще не проводили.
Да, сэмплы удалили тоже :)
2. Сборка собственных модулей может потребоваться для поддержки аппаратной части. Например, собрать отладочную версию видеодрайвера.