我正在arrayfun
和MATLAB中的GPU上进行了大量的计算工作。
我的代码如下
N = 2000;
dp = 0.005;
p1 = [0:dp:1];
p2 = [0:dp:1];
pB = [0:dp:2];
[p1,p2,pB] = meshgrid(p1,p2,pB);
p1 = gpuArray(p1);
p2 = gpuArray(p2);
pB = gpuArray(pB);
A = zeros(N,1);
parfor i = 1:N
A(i) = arrayfun(@MYFUN,p1,p2,pB);
end
首先,我感到惊讶的是,对于N=2000
,parfor
几乎与普通for
循环所花的时间相同(当使用parfor
时,似乎我的MATLAB连接到6个工人)。那是因为我的笔记本电脑只有1个GPU,所以parfor
没有帮助吗?
答案 0 :(得分:1)
parfor
不在GPU上运行,而是在计算机CPU的可用内核上运行多个“工作者”。通常,GPU内核不能用作matlabpool / parpool工作器。
如果有多个GPU,则可以将parfor
与spmd
结合使用,以便在GPU上运行它。 mathwork answer,但这是在您要在GPU上执行特定功能的情况下。