0

嘿,我有一个我想在 CUDA 的帮助下并行化的 mex 文件。当前的功能是:我将一个函数句柄和大量“点”传递给 mex 文件,它以顺序模式(在 CPU 上)评估每个点上的函数。因此它使用类似的东西:

mxArray* y;
const mxArray *e[2] = {functionHandle, point};
mexCallMATLAB(1, &y, 2, (mxArray **)e, "feval");

使用 matlab 函数 feval 在点上评估函数句柄。现在我想知道当我尝试通过 CUDA 并行计算时会发生什么:这会正常工作吗?因为如果在 CPU 上使用 mexCallMATLAB 进行评估,那么使用 CUDA 不会有任何好处。但是怎么办呢?我无法想象在不使用 matlab 函数 feval 的情况下直接评估 C 中某个点的函数句柄的任何方法......

到目前为止感谢!你会帮我很多的!

4

1 回答 1

1

不,mexCallMATLAB不能从 GPU 调用。通常,不能从 CUDA 内核的主体中进行主机端调用。

您可能会发现,如果您可以访问Parallel Computing Toolbox,则可以将GPUArraysarrayfun一起使用。例如,如果您希望跨多个点评估的函数如下所示:

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

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

gx = gpuArray( rand(1000) );
gy = arrayfun( @myFcn, gx );
于 2011-05-08T10:24:46.177 回答