我做了耗时的模拟,涉及以下(简化的)代码:
K=10^5; % large number
L=1000; % smaller number
a=rand(K,L);
b=rand(K,L);
c=rand(L,L);
d=zeros(K,L,L);
parfor m=1:L-1
e=zeros(K,L);
for n=m:L-1
e(:,n+1)=e(:,n)+(n==m)+e(:,n).*a(:,n).*b(:,n)+a(:,1:n)*c(n,1:n)';
end
d(:,:,m)=e;
end
有谁知道如何加速这个并行运行的简单代码(使用parfor)吗?
由于每个工作器需要矩阵a和B和c,因此存在较大的并行开销。
如果我只向每个worker发送它需要的矩阵B部分,开销会更小(因为内部循环从m开始),但我认为这并不能使代码更快。
由于开销较大,parfor比串行for循环慢。随着parfor迭代次数的增加(增加L),a、B和c的大小也会增加,开销也会增加。因此,我不期望parfor循环更快,即使L的值很大。还是有人看不一样?
1条答案
按热度按时间kx5bkwkv1#
使用预计算可能存在性能增益: