使用英特尔® IPP 构建 Android* NDK 应用
来源:互联网 发布:淘宝店卖话费充值 编辑:程序博客网 时间:2024/04/27 23:34
作者:杜伟 (Intel)
英特尔 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 库被分成不同的域。 每个域都有自己的库,其中一些域的库彼此相互依赖。需要将所有的域库和它们的依赖库包含在联动线之内。查看“英特尔 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 手册。
- 使用英特尔® IPP 构建 Android* NDK 应用
- Android* 教程:使用英特尔® 线程构建模块编写多线程应用
- Android* 教程: 使用英特尔® 线程构建模块编写多线程应用
- 面向英特尔® 架构 (IA) 创建和移植基于 NDK 的 Android* 应用
- 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用
- 面向英特尔® 架构 (IA) 创建和移植基于 NDK 的 Android* 应用
- 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用
- 英特尔的优化库IPP
- Android Stuido 使用cMake构建NDK项目
- android ndk 构建简介
- 英特尔 IPP:实施宽带编解码器 VoIP 解决方案
- 使用Ant构建Android应用
- 使用Gradle构建Android应用
- IPP 应用范围
- 使用实验性的 Gradle 工具构建 Android NDK 环境
- Android Studio如何下载NDK及使用新的Gradle构建工具配置NDK环境
- 我的Android NDK之旅(二),使用ndk-build构建Jni
- Android Studio下构建NDK
- linux 备份mysql
- udhcpc命令
- ofbiz-kendoUI-dropDownList
- linux kill 关闭进程命令
- SSH三大框架所必须使用的jar包
- 使用英特尔® IPP 构建 Android* NDK 应用
- 准确率与召回率
- plsql创建用户权限设置,导入导出说明
- request和response的中文乱码问题
- mysql 乱码
- u-boot源码分析 --- 启动第二阶段003
- Win7安装好后,IIS不能用,报"HTTP 错误 404.3 – Not Found"错误,"HTTP 错误 500.21"
- Android Studio更新后 Eclipse项目导入问题
- 不同时间入库的相同药品中,只获取最后一次入库的药品信息的方法