Quantcast
Channel: Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1616

Использование расширенных возможностей компилятора Intel® C++ для приложений Android*

$
0
0

Содержание

  •  

Использование выполняемого модуля Intel® Cilk™ Plus в Android для реализации многопоточности приложений

 

Intel® Cilk™ Plus — это расширение C и C++, дающее возможность легко и удобно задействовать многоядерную архитектуру и векторную обработку. Три ключевых слова Intel Cilk Plus предоставляют простую, но удивительно мощную модель для параллельного программирования, а модуль рантайма и библиотеки шаблонов образуют удобную среду для создания параллельных приложений.

При использовании Intel Cilk Plus для реализации многопоточности в приложениях требуется линковка с библиотекой времени выполнения Cilk (libcilkrts.so).

Разработка с помощью компилятора Intel C++ и системы сборки NDK (ndk-build)

Система сборки NDK не линкует библиотеки C++ для модулей, написанных на C, в результате чего компилятор не может выбрать нужную библиотеку Intel Cilk Plus при линковке, что может привести к ошибкам линковки.

1. Добавьте пустой файл C++ в проект, чтобы включить линковку C++ в системе сборки NDK.

2. Укажите совместимую реализацию C++ в файле Application.mk.

  • 'APP_STL:=stlport_shared'или
  • 'APP_STL:=gnustl_static'или
  • 'APP_STL:=gnustl_shared'

3. Измените код Java согласно инструкциям в разделе «Подготовка вызовов JNI» ниже.

Разработка с помощью компилятора Intel C++ без системы сборки NDK (ndk-build)

Если ваша среда разработки содержит код C++, нужно явным образом выполнить линковку с библиотекой GNU_STL или stlport.

Выполните следующие действия.

1. Укажите следующие флаги для компиляции и линковки для соответствующей реализации C++ в NDK.

  • Флаги компиляции:
    -I$ANDROID_GNU_LIBSTDCPP/include -I$ANDROID_GNU_LIBSTDCPP/libs/x86/include
  • Флаги линковки (gnustl_shared):
    -L$ANDROID_GNU_LIBSTDCPP/libs/x86 -lgnustl_shared -lsupc++
  • Флаги линковки (gnustl_static):
    -L$ANDROID_GNU_LIBSTDCPP/libs/x86 -lgnustl_static -lsupc++

где
ANDROID_GNU_LIBSTDCPP=$NDK/sources/cxx-stl/gnu-libstdc++/4.6. 4.6 следует заменить на версию GCC, на которую указывает ANDROID_GNU_X86_TOOLCHAIN. Например, если ANDROID_GNU_X86_TOOLCHAINуказывает на $NDK/toolchains/x86-4.8/prebuilt/linux-x86, то замените 4.6 на 4.8.
При использовании Intel Cilk Plus требуется линковка с библиотекой libcilkrts.so. Эта библиотека находится в папке /compiler/lib/ia32/gnustl.

2. Если используется библиотека C++ stlport_shared (требуется NDK r9 или более поздней версии), добавьте следующие флаги.

  • Флаги компиляции:
    -I$ANDROID_STLPORT_LIBSTDCPP/stlport
  • Флаги линковки:
    -L$ANDROID_STLPORT_LIBSTDCPP/libs/x86 -lstlport_shared

Где
ANDROID_STLPORT_LIBSTDCPP = $NDK/sources/cxx-stl/stlport.

При использовании Intel Cilk Plus соответствующая библиотека находится в папке /compiler/lib/ia32/stlport.

Подготовка вызовов JNI

Подготовка вызовов JNI необходима для использования Intel Cilk Plus для всех версий Android вплоть до Android 4.3 (Jelly Bean MR2). Библиотеку libcilkrts.so нужно загружать из кода Java с помощью следующего вызова API:
System.loadLibrary("cilkrts");

Если приложению требуется динамическая реализация C++, нужно загрузить соответствующую библиотеку в дополнение к libcilkrts.so:

System.loadLibrary("gnustl_shared");
 System.loadLibrary("cilkrts");

или

 System.loadLibrary("stlport_shared");
System.loadLibrary("cilkrts"); 

Использование PGO для повышения производительности приложений в ОС Android*

Профильная оптимизация (Profile-guided Optimization, PGO) повышает производительность приложений путем переупорядочения кода, чтобы исключить неэффективное кеширование, уменьшить объем кода и выявить неверное предсказание при ветвлении. PGO предоставляет компилятору информацию о наиболее часто исполняемых областях приложения. Обладая информацией об этих областях, компилятор может оптимизировать работу приложения..

Для использования PGO в Android (по сравнению с другими ОС) требуются определенные дополнительные действия.

1. Добавьте следующие параметры во флаги C в файле jni/Android.mk:
LOCAL_CFLAGS:= -prof-gen -prof-dir /sdcard.

2. Добавьте разрешение WRITE_EXTERNAL_STORAGE, чтобы разрешить приложению запись выходных данных PGO в папку sdcard. Добавьте следующую строку в файл AndroidManifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />.

3. Убедитесь, что данные профилирования записываются. Данные профилирования записываются в режиме по умолчанию только при завершении работы приложения. Приложения в Android* обычно не завершают работу. Используйте следующие варианты для принудительного завершения работы приложения или обхода этой проблемы.

А. Вариант 1.Вызов выхода из кода Java.

System.exit(0);

 

Б. Вариант 2.Принудительный вывод дампа данных PGO из нативного кода.

#include <pgouser.h>
	_PGOPTI_Prof_Dump_All();

 

В. Вариант 3.Использование переменных среды для регулярной записи данных производительности на носитель sdcard при запущенном приложении. Чтобы сделать переменные среды доступными для всех приложений, добавьте их в файл init.rc образа Android:

export INTEL_PROF_DUMP_INTERVAL 5000
	export INTEL_PROF_DUMP_CUMULATIVE 1

 

Примечание. Значение INTEL_PROF_DUMP_INTERVAL измеряется в микросекундах, оно не должно превышать INT_MAX.

4. Копирование созданных файлов dyn на хост в папку исходного кода приложения:

adb pull ...

 

5. Изменение флагов C в файле Android.mk, чтобы использовать созданные файлы dyn. Можно использовать параметр -prof-dir, чтобы указать другое расположение файлов.
LOCAL_CFLAGS := -prof-use

См. раздел Профильная оптимизацияв руководстве пользователя и справочном руководстве компилятора Intel® C++ XE 15.0, поставляемых вместе с пакетом, для получения сведений об использовании PGO для оптимизации приложений, созданных с помощью компилятора Intel(R) C++ в ОС Linux*, Windows* и OS X*.

Прочие статьи по теме и ресурсы

 

Intel® System Studio — многоядерное программирование с помощью Intel® Cilk™ Plus
Intel® Cilk™ Plus
Руководство пользователя и справочное руководство компилятора Intel® C++ 15.0
Android* NDK для архитектуры Intel®
Использование Android* x86 NDK с Eclipse* и перенос образца приложения NDK


Дополнительные сведения о средствах Intel для разработчиков Android см. на сайте Intel® Developer Zone for Android.

  • Desarrolladores
  • Android*
  • Apple OS X*
  • Linux*
  • Microsoft Windows* (XP, Vista, 7)
  • Android*
  • C/C++
  • Avanzado
  • Intel® C++ Compiler
  • Teléfono
  • Equipo Tableta
  • Dirección URL
  • Mejora del rendimiento

  • Viewing all articles
    Browse latest Browse all 1616

    Trending Articles