我想问一下是否有人在Matlab上运行了一些包含CUDA代码的C代码?
我已阅读Mathworks网站上的文档,但我仍然无法理解它。我确实理解通过构造具有函数parallel.gpu.CUDAKernel
的对象执行CUDA内核或者通过从.cu文件构建 mex文件来执行CUDA内核的两种主要方式。虽然在使用这两种方法时我不明白但有些事情。
答案 0 :(得分:4)
这两件事都可行。
如果你想拥有灵活性,我的建议是用.c(或.cpp)文件*写你的.cu文件。一旦你有一些基本的工作,你应该能够编写a mex wrapper around it以获取MATLAB变量并将它们转换为C / C ++,这样你就可以将它们传递给CUDA或从CUDA传递它们。这要求您拥有一个兼容您的MATLAB,CUDA和OS版本的编译器。一个例子是寡妇和大多数版本的MATLAB和CUDA中的Visual Studio 2013,但请检查。通常,这是通过在使用某些xml文件进行安装后将nvcc链接到mex编译器来完成的(请参阅example here from my toolbox)。这种方法为您提供了充分的灵活性,不仅适用于使用CUDA,还适用于您可能希望与内核一起使用的任何内容,例如: tensorflow,eigen,SQL,......它充分的灵活性。
如果您只想通过简单方法加速一些操作,请使用带有gpuarray
的并行计算工具箱进行标准MATLAB操作,或使用parallel.gpu.CUDAKernel
进行自己的内核。要使用第二个文件,您需要编译一个ptx文件which seems pretty straightforward。先验这会给你灵活性降低,因为它只运行一个内核,但通常复杂的GPU程序可能需要几个内核和数据处理技术,以及内核之间的通信等。但我个人没有尝试过,也许你可以实现充分的灵活性让我知道,我将编辑答案。
简而言之,您的选择取决于您的应用/需求。
*您可能不需要使用现代版MATLAB和mexcuda
的.c或.cpp文件。