最近,我发现knn CUDA是一组基于强力实现knn搜索的Mex文件,但在README.md中我还没有找到使用linux发行版在matlab中编译这些文件的方法。我很感激有关如何应对这个问题的想法。
答案 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
以满足您的需求。