我尝试编写集成了 Cuda 的 matlab mex 代码,但它很难编译和调试。有没有更好的编码和测试方法?我在 Matlab 2012b 上。
目前我正在用 sublime 编写代码,然后在 matlab 上编译它,但我也是 CUDA 的新手,因此很难在没有立即看到结果的情况下对其进行编码。
我尝试编写集成了 Cuda 的 matlab mex 代码,但它很难编译和调试。有没有更好的编码和测试方法?我在 Matlab 2012b 上。
目前我正在用 sublime 编写代码,然后在 matlab 上编译它,但我也是 CUDA 的新手,因此很难在没有立即看到结果的情况下对其进行编码。
Robert Crovella 的评论很有趣。
我只是想提一下我使用 CUDA 指令编译 mex 文件的方式(它也适用于不同版本的 MATLAB)。
1)通过nvcc
命令将源代码编译并转换为C++代码
system(sprintf('nvcc -I"%s/extern/include" -cuda "mex-fun.cu" -output-file "mexfun.cpp"', matlabroot));
2)将其链接到Matlab
mex -I/opt/cuda/include -L/opt/cuda/lib -lcudart mex-fun.cpp
这最初是在MATLAB Newsreader 页面上建议的。
我有一个 matlab 入口点(即一个带有函数“mexFunction”的文件)和一个 C++ 入口点(一个带有“main”的文件),而我的实际 CUDA 代码的其余部分与使用的入口点无关。这样,我可以使用标准的 CUDA 工具集(即 nvprof、cuda-memcheck 等)调试用于 MEX 文件的代码,而无需处理 MEX 文件。然后,一旦我确定我没有错误或内存泄漏,我只需将其编译为 MEX 文件。或者,您总是可以将 cuda-gdb 附加到您的 MEX 文件中,尽管您的里程可能会因此而有所不同。