【发布时间】:2019-08-06 00:13:51
【问题描述】:
我正在学习 matlab GPU 函数。我的函数myfun 有两个输入参数delta, p。最终,我会将myfun 应用于delta,p 的许多组合。对于delta,p 的每个组合,“myfun”将有多少V 满足条件delta*V-p>0,其中V = [0:0.001:1]。理想情况下,我希望 V 成为 global variable。但似乎matlab GPU对全局变量有一些限制。所以我用另一种方式来做这件事。代码如下:
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(A) 和 sum(A>10) 在底层实现不同。第二个,插入一个控制流 if,这对于 GPU 来说很重要。 GPU 很难编码,只有某些功能可以从它们的架构中受益,所以当 Matlab 说它支持 GPU 数组的 sum 时,我猜它支持 sum(A)、sum(A(10:30)) 和类似的东西,其中输入是一个实际的数组。