Contenu connexe
Similaire à CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений для Android x86
Similaire à CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений для Android x86 (20)
CodeFest 2014. Коновалов А., Шкурко Д. — Разработка и оптимизация приложений для Android x86
- 2. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
2
План выступления
Обзор
Устройства на базе аппаратуры средств Intel
Инструменты разработки приложений на HTML5
Инструменты разработки приложений для Dalvik* и C/C++ приложений
Разработка C/C++ приложений
Инструменты разработки C/C++ приложений
Демо
- 3. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Телефоны и планшеты на базе x86 архитектуры
3
- 4. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Следующее поколение u-архитектуры Atom*
- 5. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Точка зрения пользователя
Android Runtime
Core Libraries
Dalvik Virtual
Machine
Blink (WebKit)
Приложения на базе Android Dalvik* и HTML5
• Должны работать без изменений
Приложения, содержащие двоичный код,
• Должны работать без изменений, но не с максимальной
эффективностью
Как правило, популярные приложения используют бинарные
библиотеки
- 6. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Типы приложений, поставляемые в бинарном виде
7
• Порт существующего кода с других платформ
• Оптимизация без глобальной переделки
• Требования к производительности в условиях ограничения на ресурсы
• Обработка видео, аудио, сигналов
• Алгоритмы симуляции
• Прямой доступ к CPU/HW
- 7. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Инструменты разработки приложений на HTML5
8
- 8. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Intel® HTML5 Development Environment (XDK)
Создание, отладка и распространение HTML5 приложений
на базе общего кода для разных платформ
xdk.intel.com
- 9. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Инструменты разработки приложений для Dalvik* и
C/C++ приложений
10
- 10. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
11
Integrated Native Developer Experience (beta)
- 11. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
12
Integrated Native Developer Experience (beta)
Базовые инструменты
разработки
Media Pack for Android
Threading Building Blocks
Инструменты для анализа
производительности и отладки
Compute Code Builder
Intel C/C++ компилятор
- 12. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
13
Базовые инструменты разработки
Android developer tools (ADT)
Android NDK
Android SDK Eclipse* IDE
Android plugin for
Visual Studio*
Apache Ant* Intel* HAXM
Android plugin for Eclipse*
- 13. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Hardware Accelerated Execution Manager (Intel®
HAXM)
www.intel.com/software/android
HAXM драйвер для эмулятора
x86
Образ ОС Android для x86
Готовые образы для эмулятора
входят в SDK
• Образы для x86 предоставляются,
начиная с API 10
Виртуализация ускоряет эмуляцию в
2-4 раза
• HAXM на Mac и Windows ОС
• KVM на Linux
- 14. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
15
Демо (тесты на производительность памяти и
процессора)
HAXM off HAXM on
- 15. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Compute Code Builder
16
http://software.intel.com/en-us/articles/getting-started-with-compute-
code-builder
- 16. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Возможности Compute Code Builder
17
• Preview JumpStart kit – учебный инструмент для пошагового построения
OpenCL проекта
• Code editing – Интеграция с популярными IDE:
• Синтаксическая раскраска кода
• Авто-дополнение кода
• Обработка ошибок компиляции
- 17. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Возможности Compute Code Builder (продолжение)
18
• Compile and Build – компиляция OpenCL ядер, подготовка бинарных файлов
на Android устройствах
• OpenCL API debug – отладка вызовов OpenCL API, инспектирование
объектов и очередей OpenCL.
• OpenCL kernel debug – пошаговая отладка на центральном процессоре
• Kernel analyze – анализ производительности OpenCL ядер на машинах с
графическим процессором Intel® Graphics
- 18. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
19
Threading Building Blocks
• Современная C++ библиотека параллельных алгоритмов для эффективного
распараллеливания приложений
• Программирование на уровне элементов работы, а не потоков ОС
• Динамическое распределение нагрузки
• Проверенные алгоритмы
• Код доступен https://www.threadingbuildingblocks.org/ под GPL
• Коммерческая версия http://software.intel.com/en-us/intel-tbb
- 19. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Intel® Threading Building Blocks - Тизер
#include <tbb/parallel_reduce.h>
#include <tbb/blocked_range.h>
double getPi() // int_0^1 4dx/(1+x^2) = pi
{
const int num_steps = 10000000;
const double step = 1./num_steps;
double pi = tbb::parallel_reduce(
tbb::blocked_range<int>(0, num_steps),
double(0),
[&](const tbb::blocked_range<int>& r, double current_sum ) -> double {
for (size_t i=r.begin(); i!=r.end(); ++i) {
double x = (i+0.5)*step;
current_sum += 4.0/(1.0 + x*x);
}
return current_sum; // body returns updated value of the accumulator
},
[]( double s1, double s2 ) {
return s1+s2;
}
);
return pi*step;
}
- 20. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Intel® TBB – Использование в приложениях
В новых версиях Android
обработка зависимостей
между библиотеками
осуществляется автоматически
Android.mk#for including tbb in your project:
include $(CLEAR_VARS)
LOCAL_MODULE := tbb
LOCAL_SRC_FILES := $(TBB_PATH)/lib/android/libtbb.so
LOCAL_EXPORT_C_INCLUDES := $(TBB_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
#for calling tbb from your lib:
LOCAL_CPP_FEATURES += rtti exceptions
LOCAL_SHARED_LIBRARIES += tbb
LOCAL_CFLAGS += -DTBB_USE_GCC_BUILTINS -std=c++11
APP_ABI := x86
APP_STL := gnustl_shared
Application.mk
System.loadLibrary("gnustl_shared");
System.loadLibrary("tbb");
System.loadLibrary("YourLib");
Java
- 21. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
22
Media Pack
Media Pack предоставляет код и примеры использования для:
• Захвата видео потока с камеры и экрана
• Редактирования видео
• Включения потокового видео
• Обработки звука
Media Pack поддерживает x86 и ARM устройств на базе Android версии 4.3
http://software.intel.com/en-us/articles/intel-inde-media-pack-for-
android-tutorials-building-samples
http://software.intel.com/en-us/articles/intel-inde-media-pack-for-
android-tutorials-running-samples
- 22. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
23
Захвата видео потока
http://software.intel.com/en-us/articles/intel-inde-media-pack-for-
android-tutorials-video-capturing-for-libgdx-applications
http://software.intel.com/en-us/articles/intel-inde-media-pack-for-
android-tutorials-video-capturing-for-opengl-applications
- 23. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
24
• Анализ производительности в реальном
времени
• Быстрые эксперименты с системными
настройками для локализации проблем с
CPU и GPU
• Множество метрик для определения и
оптимизации критичного кода
• CPU, GPU, API, RAM, сеть,
энергопотребление и т.д.
Intel® Graphics Performance Analyzers
Инструмент системного анализа ОС Android
http://software.intel.com/en-us/vcsource/tools/intel-gpa
- 24. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Метрики и системные настройки
25
Метрики
BUS/DRAM
CPU
Flash File System I/O
Network I/O
GPU
App Memory
OpenGL API and States
Power
Системные настройки для анализа
производительности и отладки
1x1 Scissor Rect
Disable Alpha Blending
Disable Alpha Test
Disable Draw Calls
Disable Z-Test
Show Wireframe
Texture 2x2
Hyper Threading Disable
CPU Frequency Override
- 25. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Инструменты разработки нативных приложений
26
- 26. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Android* NDK для разработки нативных приложений
27
Зачем он нужен?
• Перенос существующего нативного кода с других платформ
• Требования к производительности в условиях ограничения на ресурсы,
например, на память
• Обработка изображений, сигналов
• Алгоритмы симуляции
• Прямой доступ к CPU/HW
• Оптимизация кода без изменения алгоритма
http://developer.android.com/tools/sdk/ndk/index.html
- 27. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Совместимость приложений со всеми устройствами
28
myapp.apk
APP_ABI := all Application.mklibs/x86/mylib.so
libs/arm/mylib.so
libs/arm-v7a/mylib.so
libs/mips/mylib.so
libs/?/mylib.so
- 28. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Специализация опций для разных архитектур
29
libs/x86/mylib.so
libs/arm/mylib.so
libs/arm-v7a/mylib.so
libs/mips/mylib.so
libs/?/mylib.so
ifeq ($(TARGET_ARCH_ABI),x86)
LOCAL_CFLAGS := -mtune=atom -msse3
endif
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS := -march=armv7-a
Endif
Android.mk
#ifdef __i386__
strlcat(buf, "__i386__", sizeof(buf));
#endif
#ifdef __arm__
strlcat(buf, "__arm__", sizeof(buf));
#endif
source.c
http://software.intel.com/en-us/android/articles/creating-an-x86-and-arm-apk-using-the-
intelr-compiler-and-gnu-gcc
- 29. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
C/C++ компиляторы для Android x86
30
Поддержка x86 включена, начиная с NDK r6
• Включал или включает до сих пор
• GCC 4.4.3, GCC 4.6, GCC 4.7, GCC 4.8
• Clang 3.1, Clang 3.2, Clang 3.3
• ICC 13.1, 14.0
• RenderScript*
• Сейчас по умолчанию используется версия 4.6
- 30. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Рекомендуемые опции GCC
31
Уровни оптимизации -O0, -O1, -O2, -O3, -Os
-O0 уровень оптимизации по умолчанию
Настройки и оптимизации для заданных микроархитектур
• -march=atom (или –mtune=atom)
• -march=slm (или –mtune=slm)
Настройки точности арифметики
• -ffast-math
• -mfpmath=sse
Другие полезные опции
• -flto
• -funroll-loops, -funroll-all-loops
EEMBC® CoreMark®
- 31. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
32
Intel® C/C++ Compiler
Оптимизация приложений и системы в целом
Высокая производительность
• Простая рекомпиляция может дать прирост производительности
• Совместимость с GNU* GCC компилятором
• Intel® Cilk™ Plus – параллелизм данных и задач
• Поддержка стандартов IEEE 754-2008, С++11
Оптимизации
• Поддержка SSE инструкций от SSE до AVX2
• Автоматическая и полуавтоматическая векторизация
• Межфайловые оптимизации
• Оптимизации с использованием профиля
- 32. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Рекомендуемые опции Intel C/C++ компилятора
33
Уровни оптимизации -O0, -O1, -O2, -O3, -Os
• -O2 уровень оптимизации по умолчанию
• если не включена поддержка отладки –g
• -Ofast, -fast
Настройки и оптимизации для заданных микроархитектур
• -xATOM_SSSE3
• -xATOM_SSE4.2
Настройки точности арифметики
• -fp-model fast=1|2
• -no-prec-div
Другие полезные опции
-ansi-alias, -ipo
http://software.intel.com/en-us/android/articles/creating-
an-x86-and-arm-apk-using-the-intelr-compiler-and-gnu-gcc
- 33. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
34
Intel® Cilk™ Plus
- 34. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
35
Intel® Cilk™ Plus
int fib(int n)
{
if (n < 2)
return n;
int x = fib(n-1);
int y = fid(n-2);
return x + y;
}
int fib(int n)
{
if (n < 2)
return n;
int x = cilk_spawn fib(n-1);
int y = fid(n-2);
cilk_sync;
return x + y;
}
Оригинальный код Оптимизированный код
for (int i; i<8; ++i)
{
do_work(i);
}
cilk_for (int i; i<8; ++i)
{
do_work(i);
}
Оригинальный код Оптимизированный код
- 35. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
36
Intel® Cilk™ Plus
//declaring the function body
__declspec((vector)) double ef_add(double x, double y)
{
return x + y;
}
//invoking the function using array notation
//operations on the whole extent of the arrays a,b,c
a[:] = ef_add(b[:], c[:]);
//use the full array notation construct to also specify n as an extend and s as a stride
a[0:n:s] = ef_add(b[0:n:s], c[0:n:s]);
//use the cilk_for construction to invoke the SIMD-enabled function in data parallel context
cilk_for (i = 0; i<n; ++i)
{
a[i] = ef_add(b[i], c[i]);
}
- 36. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
37
Intel® Cilk™ Plus
void add_floats(float *a, float *b, float *c, float *d, float *e, int n)
{
int i;
#pragma simd
for (int i; i<8; i++)
{
a[i] = a[i] + b[i] + c[i] + d[i] + e[i];
}
}
http://software.intel.com/en-us/intel-cilk-plus
- 37. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
40
Оптимизация приложений с Intel® Cilk™ Plus
http://habrahabr.ru/company/intel/blog/202088/
- 38. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
41
Перенос нативных Android* приложений на x86
• Изменение конфигурации построения (makefiles, файлы конфигурации)
• Перенос C/C++ кода
• Изменение типов данных
• Изменение выравнивания типов данных
• Перенос кода с интринсиками
• Перенос ассемблерного кода
http://software.intel.com/en-us/articles/ndk-android-
application-porting-methodologies/
- 39. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Расположение данных в памяти
union {
struct TestStruct {
int mVar1;
long long mVar2;
int mVar3;
};
int mVar4[6];
} var;
Оригинальный код
union {
struct TestStruct {
int mVar1;
long long mVar2 __attribute__ ((aligned(8)));
int mVar3;
};
int mVar4[6];
} var;
Исправленный код
- 40. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
ARM* NEON vs. Intel® SSE
43
http://software.intel.com/en-us/blogs/2012/12/12/from-arm-neon-to-intel-mmxsse-
automatic-porting-solution-tips-and-tricks
// VADD.I8 d0,d0,d0
int8x8_t vadd_s8(int8x8_t a, int8x8_t b);
#ifdef USE_MMX
#define vadd_s8 _mm_add_pi8 //MMX
#else
#define vadd_s8 _mm_add_epi8
#endif
NEONtoSSE.h
- 41. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Примеры
44
- 42. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
45
Демо (ffmpeg-2.1.4)
• Минимум внешних зависимостей
• Используется в нескольких проектах
• Простое построение
• configure
• make –j 16 install
http://www.ffmpeg.org
--disable-shared
--enable-static
--enable-pic
--disable-doc
--disable-symver
--enable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-avdevice
--disable-doc
--target-os=linux
--arch=atom
--enable-cross-compile
--cross-prefix=… --sysroot=…
- 43. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
46
Демо (ffmpeg-2.1.4)
Преобразование из формата h265 в формат h264
ICC: 60 sec, FPS 17
• fmpeg_icc -i surfing.265 -t 40 -f mp4 -threads 4 -y /dev/null
GCC: 87 sec, FPS 11
• fmpeg_gcc -i surfing.265 -t 40 -f mp4 -threads 4 -y /dev/null
Опции GCC 4.8:
• -O3 -march=atom -funroll-all-loops -ffast-math -fomit-frame-pointer -mfpmath=sse
Опции ICC 14.0.1:
• -O3 -xATOM_SSSE3 -no-prec-div
- 44. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
47
Демо (Bouncing balls)
http://software.intel.com/en-us/videos/intel-c-compiler-for-
android-5-optimizing-performance-icc-techniques-to-make-
your-app-soar
- 45. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Intel® Developer Zone (IDZ)
• Учебные материалы и техническая
поддержка
• Обмен опытом
• Специализированные сообщества
• Новости из мира технологий
Intel Android* Developer Website
• Перенос нативных приложений
• Советы и руководства
• Статьи на техническая темы
• Форумы и блоги, которые ведутся
инженерами Intel
• Информация о SW/HW продуктах Intel
для разработчиков на Android
www.intel.com/software/android
Дополнительная информация
- 47. Copyright © 2014, Intel Corporation. All rights reserved. *Other names and brands may be claimed as the property of others. Optimization Notice
Legal Disclaimer & Optimization Notice
INFORMATION IN THIS DOCUMENT IS PROVIDED “AS IS”. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY
INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL
DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO THIS INFORMATION INCLUDING LIABILITY OR WARRANTIES
RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR
OTHER INTELLECTUAL PROPERTY RIGHT.
Software and workloads used in performance tests may have been optimized for performance only on Intel microprocessors.
Performance tests, such as SYSmark and MobileMark, are measured using specific computer systems, components, software,
operations and functions. Any change to any of those factors may cause the results to vary. You should consult other
information and performance tests to assist you in fully evaluating your contemplated purchases, including the performance of
that product when combined with other products.
Copyright © 2014, Intel Corporation. All rights reserved. Intel, Pentium, Xeon, Xeon Phi, Core, VTune, Cilk, and the Intel logo are
trademarks of Intel Corporation in the U.S. and other countries.
Optimization Notice
Intel’s compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel
microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the
availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent
optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are
reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the
specific instruction sets covered by this notice.
Notice revision #20110804
50