我想在Matlab中並行運行矩陣乘法的代碼。我已經爲它編寫了順序代碼。我已經使用'spmd'方法並行運行它。但是,並行代碼的執行時間多於順序代碼。我的座右銘是減少並行運行代碼的執行時間。 我不想使用內置函數進行乘法運算,因爲我想要移除for循環中的依賴項並運行它。我該怎麼做?? 我曾嘗試休耕代碼.. 請幫我..matlab中矩陣乘法的並行代碼
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
我得到的輸出是..時間1的序貫和時間2並行
矩陣
time1 =
0.0041
Starting matlabpool using the 'local' profile ... connected to 2 labs.
time2 =
0.6950
>>
嘗試在spmd之後放置抽屜 –
對於這樣一個簡單的例子,您不太可能看到任何改進:您應該嘗試將'a'和'b'設置爲例如'10000x10000'矩陣。然而,這仍然最有可能是平行的慢 - 支持MATLAB的BLAS算法非常快。順便說一句,你這樣做的理由(我把它解釋爲「從你的問題中刪除依賴關係」)是相當不穩定的......並行計算工具箱的依賴關係比簡單矩陣乘法更多。 – wakjah
我嘗試了在SPMD之後放置抽搐,它力量工作 – user1916616