Android平台利用CUDA框架实现并行开发
来源:互联网 发布:原生js手风琴效果 编辑:程序博客网 时间:2024/06/06 03:29
1. 搭建Android-CUDA开发环境
本文在ubuntu 14.04环境中搭建开发环境,安装过程主要分为以下三个目标:
目标1:首先安装elicpse软件所需要的Java Development Kit (JDK)开发工具包,为搭建开发环境作基础。
目标2:JDK安装完成后,在 nvidia官网下载“NVIDIA CodeWorks for Android”工具包,这个工具包由nvidia公司整理打包,其中包括所有用于开发环境的软件(如eclipse, Android_sdk, Android_ndk等软件)。CodeWorksforAndroid软件包可以在nvidia官网“https://developer.nvidia.com/codeworks-android”下载。
本次安装的开发环境是在官网下载的 “CodeWorksforAndroid-1R4-linux-x64.run”文件包。下载完成后可以通过命令行直接运行。
目标3:运行Android-CUDA自带实例,检查安装环境是否搭建成功。进入eclipse软件,载入工程文件。如果通过NDK正常编译,并且可以正常运行在Tegra X1平台内,说明Android-CUDA开发环境已经正确搭建好。
2. Android系统下CUDA文件编译
1、源代码使用CUDA编写的“*.cu文件”只能通过nvcc编译器来编译, 然而工程最终需要的“*.SO文件”需要使用andorid-NDK-build编译器将C语言编写的源文件编译打包为“*.SO文件”, 那么如何将CUDA编写的“*.cu文件”加载到“*.SO文件”就是十分关键的。
2、由于将CUDA编写的“*.cu文件”加载到“*.so文件”比较复杂,因此通过两个步骤完成
步骤一:通过nvcc编译器把“*.cu文件”首先编译为可执行文件;再将可执行文件生成一个静态链接库;
步骤二:最后把静态链接库的加载到“*.SO文件”。
3. CUDA实例BoxFilter的目录结构
在这个工程文件中包含jni文件夹,cuda文件夹,以及libs文件夹。在com.examlpe.boxfilter文件夹内含有buildConfig.java和R.java文件。jni文件夹中包含C++的源文件NativeApp.cpp、Utils.cpp和头文件NativeApp.h、Utils.h以及android.mk、Application.mk配置文件。
cuda文件夹包含boxFilter_kernel.cu和boxFilter_kernel.h等与cuda有关的文件。libs中包含相关的库文件如:nv_and_util、nv_egl_util、nv_shader等文件。
编译时首先在 /cuda文件夹下由Makefile将boxFilter_kernel.cu和boxFilter_kernel.h等与cuda有关的文件生成lib_boxFiler.a文件;此后,通过NDK编译器将C++源文件编译生成为libboxfiler.so。由于在NDK编译C++文件时没有将lib_boxFiler.a”库文件载入libboxfiler.so内。所以可能在应用程序“boxFilter”运行时,在需要调用CUDA时向“lib_boxFiler.a”库文件调用CUDA内容。
- Android平台利用CUDA框架实现并行开发
- Android平台利用OpenCL框架实现并行开发初试
- 【并行计算-CUDA开发】CUDA ---- Warp解析
- 【并行计算-CUDA开发】CUDA存储器模型
- Kmeans 的 CUDA 并行实现
- 利用PS3和Linux搭建一个并行程序开发平台
- 【并行计算-CUDA开发】CUDA并行存储模型
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- 5.Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- Android平台下利用zxing实现二维码开发
- 用户体验和网站
- 小知识整理
- JDBC入门
- 树莓派意外删除.profile 文件
- js 获取对象属性的数量。js 遍历对象的属性
- Android平台利用CUDA框架实现并行开发
- JSP的out内置对象及其常用方法
- sqlite数据库的储存
- Spark MLlib系列(一):入门介绍
- java-方法的重写以及方法重写和方法重载的区别
- Spark MLlib系列(二):基于协同过滤的电影推荐系统
- 为什么switch case语句需要加入break
- 差分运算
- javaSE_8系列博客——Java语言的特性(五)--接口和继承(4)--使用接口作为类型