数据通信对并行循环的影响

数据通信对并行循环的影响

Matlab执行并行循环绝不是将关键字由for改为parfor这么简单。在应用并行运算是必须要考虑数据通信的影响。当数据通信问题处理不当时,并行运算的效率会远远低于预期。

for循环与parfor循环执行相同的操作,通过循环需要的数据在循环外和循环内生成,从而看出数据通信对并行循环的影响。

1、影响较大的情况

function [t1 t2]=partry27(m)
n=10^6;
a=rand(m,n);
display(strcat('datasize:',num2str(m*n/1024/1024),'M doubles'));
mypool=parpool;
tic
parfor k=1:n
    b1(k)=sum(sqrt(a(:,k)));
end
t1=toc;
display(strcat('parfor:',num2str(t1),'s'));
delete(mypool)
tic
b2=zeros(n,1);
for k=1:n
    b2(k)=sum(sqrt(a(:,k)));
end
t2=toc;
display(strcat('for:',num2str(t2),'s'));

运行结果

2.影响较小的情况

function [t1,t2]=partry28(N,M)
data=cell(1,N);
for kk=1:N
    data{kk}=rand(M);
end
display(strcat('datasize:',num2str(N*M*M/1024/1024),'M doubles'));
mypool=parpool;
tic;     
parfor ii=1:N
       c1(:,ii)=eig(data{ii});
end
t1=toc;
display(strcat('parfor:',num2str(t1),'seconds'));
delete(mypool)
tic;      
for ii=1:N
    c1(:,ii)=eig(data{ii});
end
t2=toc;
display(strcat('for:',num2str(t2),'seconds'));

运行结果

  由此可以看出,for循环与parfor循环执行相同的操作,循环需要的数据在循环外时,parfor循环执行效果不如for(for不涉及到数据传递)。

发布了152 篇原创文章 · 获赞 124 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_44762986/article/details/104723140