Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Matlab Mexfiles和Cuda:计算函数句柄_Function_Matlab_Cuda_Handle_Mex - Fatal编程技术网

Function Matlab Mexfiles和Cuda:计算函数句柄

Function Matlab Mexfiles和Cuda:计算函数句柄,function,matlab,cuda,handle,mex,Function,Matlab,Cuda,Handle,Mex,嘿,那里, 我有一个mex文件,我想在CUDA的帮助下并行化。当前的功能是:我将一个函数句柄和大量的“点”传递给mex文件,它以顺序模式(在CPU上)在每个点上计算函数。因此,它使用类似于: mxArray* y; const mxArray *e[2] = {functionHandle, point}; mexCallMATLAB(1, &y, 2, (mxArray **)e, "feval"); 使用matlab函数feval评估点上的函数句柄。现在我想知道当我尝试通过CUDA

嘿,那里, 我有一个mex文件,我想在CUDA的帮助下并行化。当前的功能是:我将一个函数句柄和大量的“点”传递给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语言中的某一点上直接计算函数句柄的任何方法

谢谢你!
你会帮我大忙的

否,
mexCallMATLAB
将无法从GPU调用。通常,主机端调用不能在CUDA内核的主体内进行

您可能会发现,如果您有权访问,则可以使用。例如,如果要跨多个点计算的函数如下所示:

function y = myFcn( x )
y = 1;
for ii = 1:10
  y = sin(x * y);
end
然后你可以在GPU上这样调用它:

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

哇,谢谢,我想这就是我要找的职位!现在的问题是:如果我不能在CUDA内核之外使用
mexCallMATLAB
,我如何从我的mex文件中访问它?实际上,我的建议不是直接使用CUDA内核,而是使用arrayfun方法作为替代方法。如果您希望在MATLAB中运行现有的CUDA代码,并行计算工具箱将支持一个“CUDAKernel”对象来帮助您实现这一点。