2024-06-09 17:00:21 | 我爱编程网
由于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了
工具/原料
电脑
方法/步骤
打开开始,运行cmd,进入dos界面。
分别运行java,和javac,检测jdk是否已经配置好,如果没有配置好需先配置好JDK。
新建一个文件夹,在文件夹下,新建一个文本文档,以.java为文件格式,选择打开方式,用记事本打开。
用记事本打开之后,编辑java源程序,编辑完成之后,保存。
在dos 运行javac 将桌面的java程序 拖到到javac命令后方,在桌面生成.class文件。我爱编程网
用命令语句将当前目录,跳转到新建的文件夹下,在dos下运行java 命令,输出java程序结果。
我爱编程网(https://www.52biancheng.com)小编还为大家带来dos下怎么运行java程序的相关内容。
首先,安装jdk并配置环境变量。打开cmd窗口运行java -version检查环境变量是否配置正确。
然后,编译java文件。可以把cmd的路径转换到源文件目录下,也可以直接在命令中加入绝对路径。例如:有E:\src\Hello.java源文件,可以在cmd的E:\src>下执行javac Hello.java,也可以直接javac E:\src\Hello.java编译源文件。
最后,执行和编译一样可以转换cmd当前工作目录,也可以加绝对路径。例如:java Hello,或者java E:\src\Hello。如果是窗体程序就用javaw命令,例如:javaw Hello。注意不要加后缀.java或者.class.
举个例子:
1。改为haha.java.之后可以把文件放在D盘根目录下
2.开始--运行--输入cmd
3.进入dos后,在光标定位处输入d: (回车)
4.D:\javac haha.java (回车)
5.D:\java haha (回车)
2025-02-01 20:24:39
2024-01-05 14:11:24
2025-02-10 15:19:48
2025-01-28 17:58:32
2024-11-22 05:08:01
2024-09-10 08:50:00