Matlab で行列乗算のコードを並列に実行したいと考えています。私はそのためのシーケンシャルコードを書きました。「spmd」メソッドを使用して並行して実行しました。ただし、並列コードの実行時間は逐次コードよりも長くなります。私のモットーは、コードを並行して実行する実行時間を短縮することです。forループの依存関係を削除して実行したいので、乗算に組み込み関数を使用したくありません。どうすればできますか?? 私はコードを放棄しようとしました..私を助けてください..
a=[1,2,3,4;5,6,7,0;8,9,10,11;12,13,14,15];
b=[1,2,3,4;5,6,7,0;8,9,10,11;12,13,14,15];
warning off all;
%Sequential code
tic
for i=1:4
for j=1:4
sum=0;
for k=1:4
sum=sum+(a(i,k)*b(k,j));
c(i,j)=sum;
end;
end;
end;
time1 =toc
%parallel code
matlabpool('open');
tic
spmd
for i=1:4
for j=1:4
sum=0;
for k=1:4
sum=sum+(a(i,k)*b(k,j));
c(i,j)=sum;
end;
end;
end;
end;
time2 =toc
私が得た出力は..シーケンシャルの場合はtime1、パラレルの場合はtime2でした
マトリックス
time1 =
0.0041
Starting matlabpool using the 'local' profile ... connected to 2 labs.
time2 =
0.6950
>>