如何在linux KNN CUDA上编译?

时间:2013-07-02 20:17:03

标签: c linux matlab cuda mex

最近,我发现knn CUDA是一组基于强力实现knn搜索的Mex文件,但在README.md中我还没有找到使用linux发行版在matlab中编译这些文件的方法。我很感激有关如何应对这个问题的想法。

2 个答案:

答案 0 :(得分:4)

我是这个kNN代码的作者:)

早在2008年,代码就是使用Windows XP操作系统编写的。 由于我提供了源代码,您应该能够生成linux mex文件。 在自述文件中,我为Windows提供了以下命令行:

nvmex -f nvmexopts.bat knn_cuda_with_indexes.cu -I'C:\CUDA\include' -L'C:\CUDA\lib' -lcufft -lcudart -lcuda -D_CRT_SECURE_NO_DEPRECATE

根据您的Linux发行版调整它以生成您的mex文件。 许多事情可能在5年后发生了变化,因此您可能需要修改一些内容。 但是,我从用户那里得到的反馈表明它的工作正常。

还要了解如何在Linux下编译CUDA代码。 我猜NVidia提供了一个非常好的教程。

答案 1 :(得分:0)

你也可以在没有nvmex的情况下编译cuda + mex。在MATLAB命令中,只需运行以下两行

>> !nvcc -c yourfile.cu -Xcompiler -fPIC -I$matlabroot/extern/include -I$matlabroot/toolbox/distcomp/gpu/extern/include
>> mex yourfile.o -L/usr/local/cuda/lib64 -L$matlabroot/bin/glnxa64 -lcudart -lcufft -lmwgpu

用适当的路径替换$matlabroot。 (注意!在matlab中调用系统命令) 第一行创建目标文件,然后mex链接库。

您可能需要将您的CUDA路径修改为/usr/loca/cuda-6.0//usr/local/cuda-YOUR_VERSION/。同样适用于cuda图书馆/usr/local/cuda/lib64/usr/local/cuda/lib请检查。

如果您想优化代码,只需添加-O3 -DNDEBUG

即可
>> !nvcc -O3 -DNDEBUG -c yourfile.cu -Xcompiler -fPIC -I$matlabroot/extern/include -I$matlabroot/toolbox/distcomp/gpu/extern/include

库链接命令是相同的。 另请注意,可能需要其他包含路径-I$path和库路径-L$path或库-l$library以满足您的需求。