关闭

hadoop通过JNI调用cuda程序

1084人阅读 评论(0) 收藏 举报
分类:

一、通过JNI,将C写成的cuda编译成动态链接库

1、 写一个java类,类中包含一个native的函数,导入.so动态链接库,注意,linux中,SiftGPU其实指的是libSiftGPU.so。


2、javac编译这个类生成.class文件,我直接用eclipse编译了。

3、在项目目录下的./bin文件目录下,使用如下命令,生成C++函数的头文件

javah -jni -classpath . nfs.sil.image.sift.main.FeatureExtractSIFT_GPU

在该目录下会出现一个nfs_sil_image_sift_main_FeatureExtractSIFT_GPU.h的头文件,文件内容如下


4、实现nfs_sil_image_sift_main_FeatureExtractSIFT_GPU.cu,实现.h中的C++函数

5、编译,生成动态链接库

先把所有的.cu文件用nvcc编译成.o文件

最后 gcc -Wall -rdynamic 'pkg-config --cflags opencv' -fopenmp -shared -L/home/OpenCV-2.4.3/lib -lopencv_core -lopencv_highgui -L/usr/local/cuda/lib -lcudart -o libSiftGPU.so $(ALL)


二、使用hadoop运行程序

注意,在需要运行的类中包含,将一些参数分析交给GenericOptionsParser做。

GenericOptionsParser parser = new GenericOptionsParser(conf, args);
String[]otherArgs = parser.getRemainingArgs();

运行命令

hadoop jar imageRetrieval.jar nfs.sil.image.sift.index.SiftHadoopImageIndexer  -files libSiftGPU.so images index

-files意思是把libSiftGPU.so拷贝到工作机上。

另一个可行的办法是,手动将libSiftGPU.so拷贝到java.library.path所指向的文件夹下

咳咳,这种方法比较暴力~~




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:51984次
    • 积分:1223
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:13篇
    • 译文:0篇
    • 评论:12条
    最新评论