java 调用cuda程序
来源:互联网 发布:淘宝卖家如何上淘抢购 编辑:程序博客网 时间:2024/05/22 12:24
【转载】 原链接地址
http://hpcbbs.it168.com/thread-6014-1-1.html
由于CUDA不支持Java下直接调用,因此,想在Java程序中把计算量密集的一部分(for循环)移植到GPU上使用CUDA来做比较麻烦。虽然现在有些lib(JCuda,JCUDA等)通过封装来隐藏Java调用CUDA程序之间的繁琐,但是如果理解了如何去在Java中实现调用,那么自己就可以动手解决,甚至可以自己动手写个lib或者简单的compiler来实现操作。
CUDA是基于C的,而Java提供了调用C函数的API----JNI(Java Native Interface),因此,最简单通用的方法就是通过JNI来调用写好的CUDA程序,或者调用CUDA Driver/Runtime API 去执行编译好的CUDA kernel(cubin 或者ptx)。下面介绍通过JNI调用CUDA 程序的方法。
先介绍基本的Java调用JNI步骤。首先,编写带有native声明的方法的java 类。例如方法loadFile,这里只需要声明方法,不需要实现,具体的实现在C中实现:
class ReadFile {
//Native method declaration
native byte[] loadFile(String name);
//Load the library
static {
System.loadLibrary("nativelib");
}
其次,利用javac命令编译所写的java类。
Javac ReadFile.java
第三,利用javah 命令来编译生成.h的头文件,以便导入到C程序中。
Javah –jni ReadFile
第四,实现C的本地方法,即编写CUDA kernel程序,在程序中导入生成的.h文件,并把c程序保存在以.cu为后缀名的文件中。
最后,将包含CUDA程序的.cu文件编译生成动态链接库,windows下为dll,Linux下为.so。Linux下的编译命令为:
nvcc -arch sm_20 --compiler-options '-fPIC' -o libhelper.so --shared jniHelper.cu -I./GPU_TLS -I/usr/java/jdk1.6.0_20/include -I/usr/java/jdk1.6.0_20/include/linux
注意,这里要使用nvcc而不是gcc进行编译,在要生成的.so文件名称前添加lib。-shared命令生成动态链接库,不要忘记添加-fPIC选项,--compiler-options(或者-Xcompiler)来将其传送给底层的gcc编译器。最后要把JNI需要的一些头文件路径(系统的jdk路径)添加进去。
这样,简单的Java调用CUDA程序就OK了 :-D
- java 调用cuda程序
- Java通过JNI调用CUDA程序
- Linux下,JAVA通过JNI调用CUDA程序
- MATLAB中调用cuda程序
- MATLAB中调用cuda程序
- 通过JNI调用cuda程序
- Java通过JNI调用CUDA
- hadoop通过JNI调用cuda程序
- Java通过JNI调用CUDA矩阵乘法
- cuda 程序
- cpp文件中部分调用cuda程序—环境配置
- CUDA: CUDA程序优化步骤
- java调用外部程序
- Java调用windows程序
- Java调用外部程序
- Java 程序调用 exe
- java调用.dll程序
- Java调用windows程序
- Cve-2012-1823 PHP CGI Argument Injection Exploit
- 顺序文件的选用
- 浅析C#中new、override、virtual关键字的区别
- hibernate中对象的三种状态 --瞬时态,持久态,脱管态
- struts.xml配置文件(package,namespace,action)
- java 调用cuda程序
- Career Opportunity in Oracle Asian R&D Center (Shenzhen EBS Development Team - ERP)
- java程序在linux下出现的乱码问题
- 个人税收的计算
- JBOSS服务的启动、停止
- iPhone开发资料汇总
- 关于rails yml 配置文件的使用
- MyEclipse配置tomcat
- 使用 watchdog 构建高可用性的 Linux 系统及应用