我是MATLAB新手,我只是試着執行一個並行的小程序,但問題是並行執行需要比串行更多的時間嗎?在MATLAB中並行執行
close all
clear all
clc
a= rand(1e6,1);
b= rand(1e6,1);
c= zeros(size(a));
d= ones(size(c));
e= zeros(size(d));
tic
tstart=tic;
for i=1:length(a)
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
end
t_normal_for=toc(tstart)
tstart=tic;
parfor i=1:length(a)
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
c(i)=a(i)+b(i);
d(i)=c(i)+b(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
e(i)=d(i)+c(i)*a(i)+b(i)/a(i)+b(i)*a(i)+b(i);
end
t_parfor=toc(tstart)
***************************************
t_normal_for =
0.3860
t_parfor =
2.8403
誰能幫助!事實上,我的電腦裏有4名工人,MATLAB的版本是R2014a。 請問另一個問題,我可以發送相同的功能給我的電腦中的每個工人嗎?
預先感謝您 阿馬爾
你在哪裏打開你的並行池?打開一個需要大約2秒,如果這包括在parfor時間林沒有驚訝它需要更長的時間。 – Adriaan
我只是運行相同的代碼,它給了我相同的結果,以及在執行代碼之前打開我的並行池時。 數組a和b可能首先發送給所有工作人員,因此可以複製數據四次,然後完成操作,然後必須將數組c,d和e收集到客戶端。開銷很大。 – Adriaan