java可以调用cuda程序吗
1个回答
2017-03-17 · 百度知道合伙人官方认证企业
尚学堂科技有限公司
北京尚学堂科技有限公司是一家从事JAVA、大数据、web前端、网络在线教育、互联网架构师、Android、ios技术开发、咨询为一体的软件公司。公司由海外留学人员和国内IT人士创建。
向TA提问
关注
展开全部
由于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了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询