将matlab m文件编译为可用的C函数

时间:2011-05-06 14:36:16

标签: cuda mex matlab

嘿那里, 有没有办法编译(或更好地说:'翻译')matlab m函数到C函数,以便我可以在我的mex文件的CUDA内核中使用它? 非常感谢!

4 个答案:

答案 0 :(得分:6)

MATLAB Coder将为mex文件生成C代码。我还没有要评估的副本,所以我不能与任何权威人士谈论生成代码的质量和性质。

然而,如果我不得不猜测,我会说生成的代码可能需要大量按摩才能让它在GPU上运行。根据您正在做的事情,您可能会更好地使用Jacket之类的产品。

答案 1 :(得分:1)

您可以使用this函数调用从C / fortran调用matlab(m或mex)函数。然后,您可以将其与CUDA内核连接起来。

然而,它可能不是最有效的做事方式。您可以为您拥有的m文件编写自己的C代码,或者在matlab中心查找,如果有其他人已经完成的话。

答案 2 :(得分:1)

C函数最终会调用设置设备变量并调用CUDA内核吗?

我原本想为项目尝试这个,因为我认为这个方法比将我的所有MATLAB代码首先转换为C更容易,但我最终还是这样做了。

有一些用户创建的MATLAB脚本可以帮助提供此功能,但由于它们不是来自Mathworks,因此您必须自行承担使用它们的风险。我尝试了它们,从未发现任何恶意,但你永远不会知道。由于其特殊的复杂性,我无法让他们使用我的项目,但它应该适用于更简单的任务。

1)NvMEX:这是直接来自Nvidia。 http://developer.stage.nvidia.com/matlab-cuda http://www.mathworks.com/discovery/matlab-gpu.html

2)CUDA MEX:这是来自用户。 http://www.mathworks.com/matlabcentral/fileexchange/25314-cuda-mex

答案 3 :(得分:1)

这不是您问题的直接答案,但如果您的目标只是让您的MATLAB代码在GPU上运行,那么您可能会发现如果您有Parallel Computing Toolbox的访问权限,则可以使用{ {3}}与GPUArrays。例如,如果您希望在多个点上评估的函数如下所示:

function y = myFcn( x )
y = 1;
for ii = 1:10
  y = sin(x * y);
end

然后你可以这样在GPU上调用它:

gx = gpuArray( rand(1000) );
gy = arrayfun( @myFcn, gx );