【问题标题】:How compile on linux KNN CUDA?如何在 linux KNN CUDA 上编译?
【发布时间】:2013-06-30 09:09:17
【问题描述】:

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

【问题讨论】:

    标签: c linux matlab cuda mex


    【解决方案1】:

    我是这个 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 提供了一个相当不错的教程。

    【讨论】:

    • 我可以在 matlab 和 nsight 中编译 kNN 代码。这是我用来在matlab中编译的脚本。 dropbox.com/s/626buoisasw2gg1/nvmex2.m
    • 根据您的paper。如果数据是 dim = 3 且 n=65536,则最好使用 ANN 库而不是 Cuda 或 cublas knn。我可以将 n 增加到更高的值,例如 100000 或 200000 以加快速度吗?
    【解决方案2】:

    你也可以在没有 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-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2011-10-14
      • 2019-05-13
      • 2013-02-09
      相关资源
      最近更新 更多