您的位置:首页 > 移动开发 > Android开发

Android平台利用CUDA框架实现并行开发

2017-06-26 08:40 363 查看
本文运行的例程使用NVIDIA Jeston X1平台运行,该平台的核心GPU为Tegra X1,搭载Android操作系统。本文通过三部分介绍Android平台下实现CUDA并行开发:第一部分是搭建开发环境;第二部分是交叉编译CUDA源代码;第三部分是CUDA实例说明。
 

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内容。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: