Библиотеки Intel® Integrated Performance Primitives содержат высоко оптимизированные функции компонентов для обработки изображений, сигналов, данных векторной математики и небольших матричных вычислений. Несколько доменов библиотек Intel Integrated Performance Primitives содержат оптимизированные вручную функции для процессоров Intel® Atom™ и используют при этом команды Intel® Streaming SIMD Extensions. Статическая беспотоковая библиотека Intel Integrated Performance Primitives теперь поддерживает ОС Android* и может использоваться с приложениями для этой платформы.
В этой статье представлен обзор добавления функций библиотек Intel Integrated Performance Primitives в приложения, создаваемые на основе комплекта Android NDK. Библиотеки Intel Integrated Performance Primitives могут использоваться для оптимизации работы конкретных процессоров, и только они могут быть привязаны к оригинальному коду C/C++ ОС Android. Для использования библиотек Intel Integrated Performance Primitives с вашим приложением необходимо включить их функции в исходный код, а также в командную строку во время сборки.
Использование библиотек Intel Integrated Performance Primitives
1. Добавление функций Intel Integrated Performance Primitives в исходный код
- Включите файлы заголовков Intel Integrated Performance Primitives (ipp.h) в файлы исходного кода.
- Перед использованием любых других функций библиотек Intel Integrated Performance Primitives вызовите функцию ippInit(). Intel Integrated Performance Primitives обнаружит функции процессора и выберет вариант оптимизации кода для целевых процессоров. Перед вызовом любых других функций Intel Integrated Performance Primitives также вызовите ippInit()для инициализации операций координации работы процессора.
- Вызовите функции Intel Integrated Performance Primitives в своем исходном коде C/C++.
2. Включение библиотек Intel Integrated Performance Primitives в файлы сборки комплекта Android NDK
- Скопируйте библиотеки Intel Integrated Performance Primitives и заголовки в папку проекта.
- Выберите библиотеки Intel, необходимые для приложения: библиотеки Intel Integrated Performance Primitives подразделяются на различные домены. Каждый домен имеет собственную библиотеку, и некоторые библиотеки домена зависит от других библиотек. Домен должен содержать в строке связей все библиотеки и их зависимости. См. статью “Intel IPP Library Dependencies” (Зависимости библиотек Intel Integrated Performance Primitives), чтобы узнать, какие библиотеки необходимы.
- Добавьте библиотеки Intel Integrated Performance Primitives в файл сценария сборки Android, “jni/Android.mk”:
Объявите каждую библиотеку Intel Integrated Performance Primitives как предварительно подготовленный двоичный модуль. Например, если приложение использует две библиотеки Intel Integrated Performance Primitives, "libipps.a"и "libippcore.a", добавьте следующее в файл:
include $(CLEAR_VARS) LOCAL_MODULE := ipps LOCAL_SRC_FILES := ../ipp/lib/ia32/libipps.a include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := ippcore LOCAL_SRC_FILES := ../ipp/lib/ia32/libippcore.a include $(PREBUILT_STATIC_LIBRARY)
Добавьте путь заголовка и библиотеки Intel Integrated Performance Primitives в модули, вызывающие функции Intel Integrated Performance Primitives:
include $(CLEAR_VARS) LOCAL_MODULE := IppAdd LOCAL_SRC_FILES := IppAdd.c LOCAL_STATIC_LIBRARIES := ipps ippcore LOCAL_C_INCLUDES := ./ipp/include include $(BUILT_SHARED_LIBRARY)
Сборка одного примера кода
В следующем простом примере представлено использование Intel Integrated Performance Primitives в оригинальном коде Android. Код использует функцию Intel Integrated Performance Primitives ippsAdd_32f()для добавления данных в два массива.
Для проверки использования Intel Integrated Performance Primitives в коде:
- Загрузите пример кодаи распакуйте его в папку проекта (<каталог_проекта>).
- Рассмотрите использование Intel Integrated Performance Primitives в исходных файлах: в файле "jni/IppAdd.c"представлена реализация одной оригинальной функции NativeIppAdd(). Эта функция вызывает функцию Intel Integrated Performance Primitives ippsAdd_32f(). Файл "src/com/example/testippadd/ArrayAddActivity.java""вызывает оригинальную функцию "NativeIppAdd()"с помощью JNI.
- Проверьте файл "jni/Android.mk". Этот файл добавляет необходимые библиотеки Intel Integrated Performance Primitives в сценарий сборки. В примере используется функция ippsAdd_32f(), которая принадлежит к домену обработки сигналов Intel Integrated Performance Primitives. Эта функция зависима от библиотек "libipps.a"и "libippcore.a". Файл "Android.mk"создает для них две подготовленные библиотеки.
Вы можете выполнить сборку примера кода из командной строки комплектов SDK и NDK или с помощью Eclipse* IDE.
Сборка примера из командной строки
>cd <projectdir> ><ndkdir>/ndk-build
>cd <projectdir> >android update project -p . -s >ant debug >adb install bin/ArrayAddActivity-debug.apk
- Скопируйте заголовки Intel Integrated Performance Primitives и библиотеки в папку вашего проекта (например, <каталог_проекта>/ipp).
- Запустите сценарий "ndk-build"из каталога проекта для сборки оригинального кода.
- Создайте пакет Android и установите приложение.
Сборка примера с помощью Eclipse* IDE
>cd <projectdir> ><ndkdir>/ndk-build
- Скопируйте заголовки Intel Integrated Performance Primitives и библиотеки в папку вашего проекта (например, <каталог_проекта>/ipp).
- В системе Eclipse щелкните File>> New>> Project...>> Android>> Android Project from Existing Code. В "корневом каталоге"выберите папку, где находится пример кода и нажмите Finish.
- Запустите сценарий "ndk-build"в каталоге проекта для сборки оригинального кода:
- Выполните сборку приложения в Eclipse IDE и установите файл .apk.
Заключение
В этой статье представлен краткий обзор использования библиотек Intel Integrated Performance Primitives с оригинальными приложениями Android. Для получения дополнительной информации о функциях Intel Integrated Performance Primitives см. руководство по Intel Integrated Performance Primitives.