答案 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 );