matlab-GPU计算
我正在学习MatlabGPU函数。My functionmatlab-GPU计算,matlab,gpu,Matlab,Gpu,我正在学习MatlabGPU函数。My functionmyfun采用2个输入参数delta,p。最后,我将把myfun应用于delta,p的许多组合。对于每个delta,p,“myfun”将显示满足条件delta*V-p>0,其中V=[0:0.001:1]的V。理想情况下,我希望V成为全局变量。但MatlabGPU似乎对全局变量有一些限制。所以我用另一种方法来做这件事。代码如下: function result = gpueg2() dd = 0.1;
myfun
采用2个输入参数delta,p
。最后,我将把myfun
应用于delta,p
的许多组合。对于每个delta,p
,“myfun”将显示满足条件delta*V-p>0
,其中V=[0:0.001:1]
的V
。理想情况下,我希望V
成为全局变量
。但MatlabGPU似乎对全局变量有一些限制。所以我用另一种方法来做这件事。代码如下:
function result = gpueg2()
dd = 0.1;
DELTA = [dd:dd:1];
dp = 0.001;
P = [0:dp:1];
[p,delta]=meshgrid(P,DELTA);
p = gpuArray(p(:));
delta = gpuArray(delta(:));
V = [0:0.001:1];
function [O] = myfun(delta,p)
O = sum((delta*V-p)>0);
end
result = arrayfun(@myfun,delta,p);
end
但是,它通过一条错误消息进行了修改
Function passed as first input argument contains unsupported or unknown function 'sum'.
但我相信sum
适用于GPU
非常感谢您的建议。sum的问题不在于GPU,而在于在GPU上使用
arrayfun
。此处给出了GPU上接受的arrayfun
函数列表:<代码>总和不在该文档页的列表中
你的向量没有那么大(尽管我承认这可能是你真正问题的一个玩具例子)。我建议采取以下替代实施方式:
function result = gpueg2()
dd = 0.1;
DELTA = dd:dd:1;
dp = 0.001;
P = 0:dp:1;
V = 0:0.001:1;
[p,delta,v] = meshgrid(P,DELTA,V);
p = gpuArray(p);
delta = gpuArray(delta);
v = gpuArray(v);
result = sum(delta.*v-p>0, 3);
end
请注意以下差异:
delta.*v-p>0
:这将在GPU上很好地分割V
我已经检查了您在CPU上的例程和我在GPU上的例程是否给出了相同的结果。sum的问题不在于GPU,而在于在GPU上使用
arrayfun
。此处给出了GPU上接受的arrayfun
函数列表:<代码>总和不在该文档页的列表中
你的向量没有那么大(尽管我承认这可能是你真正问题的一个玩具例子)。我建议采取以下替代实施方式:
function result = gpueg2()
dd = 0.1;
DELTA = dd:dd:1;
dp = 0.001;
P = 0:dp:1;
V = 0:0.001:1;
[p,delta,v] = meshgrid(P,DELTA,V);
p = gpuArray(p);
delta = gpuArray(delta);
v = gpuArray(v);
result = sum(delta.*v-p>0, 3);
end
请注意以下差异:
delta.*v-p>0
:这将在GPU上很好地分割V