1

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

4

2 回答 2

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 提供了一个非常不错的教程。

于 2013-07-02T21:02:26.343 回答
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以满足您的需要。

于 2014-07-30T18:26:25.573 回答