英特尔 IPP 为图像处理、信号处理、向量数学和小矩阵计算提供了高度优化的构造块函数。 同时在几个 IPP 域中针对英特尔(R) 凌动™ 处理器提供了可以手动调整的函数,利用的是英特尔® 流 SIMD 扩展 (Intel® SSE) 指令。IPP 静态非线程 Linux* 库现在支持 Android* 操作系统,同时可以和 Android 应用一起使用。
本文将为您介绍如何将英特尔 IPP 函数添加到 Android NDK 应用中。 英特尔 IPP 提供了处理器特有的优化功能,同时只能关联到本地 Android C/C++ 代码上。为了在您的应用中使用英特尔 IPP,您需要在您的源代码中包含英特尔 IPP 函数,同时你还需要将 IPP 库添加到构建命令行中。
使用英特尔 IPP
1. 在源文件中添加英特尔 IPP 函数
- 在源文件中加入英特尔 IPP 头文件 (ipp.h)
- 在使用任何其他 IPP 函数之前调用 ippInit()。英特尔 IPP 检测到处理器的特性之后为目标处理器选择出适合的优化代码路径。在调用任何其他英特尔 IPP 函数之前,先调用 ippInit()以便为英特尔 IPP 初始化 CPU 调度。
- 在您的 C/C++ 源代码中调用英特尔 IPP 函数。
2. 在 Android NDK 构造文件中添加英特尔 IPP 库
- 将英特尔 IPP 库和头文件拷贝到您的项目文件夹中。
- 将 IPP 库添加到 android 构建脚本文件 “jni/Android.mk”之中:
将每个 IPP 库声明为预构建库模块。 例如,如果该应用使用两个英特尔 IPP 库 — "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)
添加头文件路径和 IPP 库到调用 IPP 函数的模块中:
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)
构建一个示例代码
下面给出的简单示例中说明了如何在本地 Android 代码中使用英特尔 IPP。 该代码使用英特尔 IPP 的 ippsAdd_32f()函数为两个数组添加数据。
如欲查看英特尔 IPP 在该代码中的用法:
- 下载示例代码并将其解包到您的项目文件夹 (<projectdir>) 中。
- 了解源文件中的 IPP 用法:"jni/IppAdd.c"文件 提供了一个本地函数 NativeIppAdd() 的实现方法。 该函数调用英特尔 IPP 的 ippsAdd_32f() 函数。"src/com/example/testippadd/ArrayAddActivity.java" 文件通过 JNI 调用本地 "NativeIppAdd()"函数。
- 检查 "jni/Andriod.mk" 文件。 该文件将所需的 IPP 库添加到构建脚本中。 本示例使用的是 ippsAdd_32f()函数,该函数属于英特尔 IPP 信号处理域。 该函数依赖 "libipps.a" 和 "libippcore.a" 库。"Andriod.mk" 文件为它们创建两个预构建库。
你在构建示例代码时可以使用 SDK 和 NDK 命令工具,也可以使用 Eclipse* IDE
从一个命令行中构建示例
- 将英特尔 IPP 头文件和库拷贝到您的项目文件夹 (例如 <projectdir>/ipp) 中。
- 运行项目目录中的 "ndk-build"脚本,构建本地代码
>cd <projectdir>
><ndkdir>/ndk-build - 构建 android 包并安装应用
>cd <projectdir>
>android update project -p . -s
>ant debug
>adb install bin/ArrayAddActivity-debug.apk
使用 Eclipse* IDE 构建示例
- 将英特尔 IPP 头文件和库拷贝到您的项目文件夹 (例如 <projectdir>/ipp) 中。
- 在 Eclipse 中,点击 File >> New >> Project...>>Andriod>> Andriod Project from Existing Code。 在 "Root Directory"中,选择示例代码文件夹,然后点击 Finish。
- 运行项目目录中的 "ndk-build"脚本,构建本地代码:
>cd <projectdir>
><ndkdir>/ndk-build - 在 Eclipse IDE 中构建应用并部署 .apk 文件。
总结
本文通过本地 Android* 应用介绍了 IPP 的用法。 更多有关英特尔 IPP 函数的信息,请参阅 IPP 手册。