使用英特尔 IPP 构建 Android NDK 应用

nutxzycftqg 2014-02-20 02:58:40
英特尔 IPP 为图像处理、信号处理、向量数学和小矩阵计算提供了高度优化的构造块函数。 同时在几个 IPP 域中针对英特尔 凌动 处理器提供了可以手动调整的函数,利用的是英特尔 流 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 库被分成不同的域。 每个域都有自己的库,其中一些域的库彼此相互依赖。需要将所有的域库和它们的依赖库包含在联动线之内。查看“英特尔 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 手册

文章转自可点击查看:http://g.csdn.net/5260728
...全文
270 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdsakjc 2014-02-21
  • 打赏
  • 举报
回复
小黄鸭和大树 2014-02-21
  • 打赏
  • 举报
回复
学习从现在开始

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧