在这里不讨论为什么不使用Jcuda,只是说明如何通过JNI(Java Native Interface)调用CUDA程序
(1)编写java程序通过native关键字声明调用接口
(2)生成调用头文件xx.h,使用javah命令生成(如果你够牛逼可以自己手写,但是这样容易出错)
(3)编写CUDA程序(跟编写C/C++差不多)
(4)编译生成动态链接库libxx.so文件(windows下应该是xx.dll文件,我这里讲的都是基于linux下的)
(5)java加载上述动态链接库,然后就可以通过接口调用CUDA程序了
(6)编译运行,OK
说的挺简单了,其实有很多细节要注意的
(1)编写java程序通过native关键字声明调用接口
package com.lzh
public class Hello
{
static
{
try
{
System.loadLibrary("sharedLibraryProject");
}
catch(UnsatisfiedLinkError e)
{
System.err.println("can not load hello library :\n"+
e.toString());
}
}
public native void SayHello(String strName);
public native int Add(int a,int b);
}
上面通过native声明了两个接口函数SayHello和Add
SayHello没有返回值,有一个字符串参数
Add返回一个int类型,有两个int参数
上面加载动态链接库的代码可以先