Пример кода с оптимизацией производительности и потребления электроэнергии для Android* с использованием интринзиков Intel®

Посмотреть видео

Введение

Безусловно, длительность работы устройств от аккумулятора, особенно если речь идет о мобильных устройствах, крайне важна для пользователей. Мы все порой оказывались в ситуациях, когда аккумулятор разряжался в самый нужный момент: при попытке сориентироваться в незнакомом городе, в самой середине важного телефонного разговора и так далее. Этот подход может быть не слишком интуитивным, но при оптимизации производительности приложения разработчики снижают потребление электроэнергии этим приложениям и тем самым помогают пользователям.

Анализ приложений с помощью сочетания Intel® Graphics Performance Analyzers и VTune™ Amplifier

Каков первый шаг при работе над повышением экономичности и производительности вашего приложения? Сначала следует определить, какие вычислительные ресурсы задействует приложение: ЦП или ГП? Для этого можно использовать набор инструментов Intel®.

Intel® GraphicsPerformanceAnalyzers (GPA) — это средство для анализа графики и оптимизации приложений Microsoft DirectX* и Android* OpenGL ES*. Подробные сведения см. здесь: https://software.intel.com/ru-ru/articles/gpa-which-version.

Для оптимизации приложений для Android я предпочитаю консольный клиент GPA. Прочесть о нем можно здесь: https://software.intel.com/ru-ru/android/articles/using-intel-graphics-performance-analyzers-console-client-for-android-application.

VTuneAmplifier помогает анализировать выбранные алгоритмы и определять, каким образом ваше приложение может наиболее эффективно использовать доступные аппаратные ресурсы. Используйте VTune Amplifier для обнаружения следующего:

  • функций, расходующих больше всего вычислительных ресурсов, в вашем приложении и во всей системе;
  • сегментов кода, недостаточно эффективно использующих доступные ресурсы процессора;
  • наиболее подходящих фрагментов кода, которые можно оптимизировать для последовательной и многопоточной обработки;
  • объектов синхронизации, влияющих на производительность приложений;
  • сведений о том, где, когда и как ваше приложение тратит время на операции ввода-вывода;
  • влияния на производительность различных методов синхронизации, различного количества потоков или разных алгоритмов;
  • действий потоков и переходов между ними;
  • узких мест в коде, связанных с аппаратными ресурсами.

Настройте сбор данных в основной системе (Linux*, OS X* или Windows*) и запустите анализ на удаленной системе (Linux или Android). Удаленный анализ в Android и встроенных системах Linux поддерживается только в VTune Amplifier для систем.

На приведенном ниже рисунке показано, как использовать сочетание GPA и VTune Amplifier для анализа и оптимизации приложения.

 

Что такое интринзики Intel®

Интринзики Intel® представляют собой функции на ассемблере, позволяющие использовать вызовы функций и переменные C/C++ вместо инструкций ассемблера. Интринзики предоставляют доступ к инструкциям, которые невозможно создать с помощью стандартных конструкций языков C и C++.

Интринзики исключают издержки вызовов функций. Они предоставляют такие же преимущества, как встроенный ассемблер, но повышают удобочитаемость кода, помогают планировать инструкции и сокращают объем работы по отладке.

Подробные сведения см. здесь: https:///software.intel.com/ru-ru/node/523351.

Как найти и подключить компилятор Intel® C++ для Android* к вашему проекту?

Компилятор Intel® C++для ОС Android* входит в состав пакета Intel® INDE. Компилятор Inte® C++ для Android* интегрирован в Android NDK и является оптимизированной альтернативой для компиляции библиотек x86.

Загрузите и установите компилятор Intel® C++ для Android. Укажите путь к папке NDK при установке, чтобы интегрировать компилятор Intel C++ для Android в Android NDK.

После успешной установки компилятор Intel® C++ для Android будет автоматически интегрирован в цепочку инструментов Android NDK и будет компилировать библиотеки, оптимизированные для архитектуры x86.

Пример

Для демонстрации использования интринзиков Intel рассмотрим код С++:

Float x = 1.0f / sqrtf( y );

Такой тип кода (особенно в физических алгоритмах) часто встречается в областях активных вычислений.

Если проанализировать эту строку в VTune Amplifier, в профиле будет видно, что компилятор создает sqrt + div вместо rsqrt.

Это можно исправить с помощью интринзиков Intel:

Float x = rsqrt( y );

Где rsqrt — это:

         #include 

         …

         inline float rsqrt(const float x)
         {
             float r;
             _mm_store_ss(&r, _mm_rsqrt_ss( _mm_load_ss(&x)));
             return r;
         }

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

Дополнительные сведения см. в моем видео: https://videoportal.intel.com/media/0_qgvcof5s.

 

Об авторе

Станислав Павлов работает в отделе Software & Service Group корпорации Intel. Он обладает более чем десятилетним опытом работы в технической сфере. Основной круг его интересов включает оптимизацию производительности и потребления электроэнергии, а также параллельное программирование. В настоящее время Станислав работает старшим инженером по разработке приложений и предоставляет техническую поддержку для устройств на базе архитектуры Intel. Станислав тесно сотрудничает с разработчиками программного обеспечения и архитекторами платформ «система на кристалле» для достижения наивысшей производительности на платформах Intel. Станислав окончил научно-исследовательский институт Высшей школы экономики по специальности «математическая экономика» со званием магистра. В настоящее время он проходит программу MBA в Московской бизнес-школе.

Дополнительные сведения об оптимизации компиляторов см. в нашем уведомлении об оптимизации.

ВложениеРазмер
Иконка изображения 31.png114.9 КБ
Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.
Возможность комментирования русскоязычного контента была отключена. Узнать подробнее.