我有以下僞代碼(一個循環),我試圖通過使用Matlab並行計算工具箱或Matlab分佈式服務器計算來實現它(可變步長實現)。實際上,我在這個循環中有一個matlab代碼,可以在普通的matlab 2013a中工作。我應該使用並行計算工具箱還是Matlab分佈式計算服務器?
給定:U0,T_0,T(初始和結束時間值)時,初始步長:H0
while t_0 < T
% the fist step is to compute U1, U2 which depend on t_0 and some known parameters
U1(t_0, h0, u0, parameters)
U2(t_0, h0, u0, parameters)
% so U1 and U2 are independent, which can be computed in parallel using Matlab
% the next step is to compute U3, U4, U5, U6 which depends on t_0, U1, U2, and known parameters
U3(t_0, h0, u0, U1, U2, parameters)
U4(t_0, h0, u0, U1, U2, parameters)
U5(t_0, h0, u0, U1, U2, parameters)
U6(t_0, h0, u0, U1, U2, parameters)
% so U3, U4, U5, U6 are independent, which can be also computed in parallel using Matlab
%finally, compute U7 and U8 which depend on U1,U2,..,U6
U7(t0, u0,h0, U1,U2,U3,U4,U5,U6)
U8(t0, u0,h0,U1,U2,U3,U4,U5,U6)
% so U7 and U8 are also independent, and we can compute them in parallel as well.
%做步長控制這裏,然後分配H0:= h_new
T0 = t0時+ h_new
end
你能否建議我使用Matlab並行實現上述代碼的最佳方式? 通過最好的方式,我的意思是我希望儘可能快地完成整個計算。我有一個訪問超級計算機LEO III,它有162個計算機節點(總共有1944個核心),因此每個節點有12個核心。)
我的想法是計算U1,U2在兩個獨立的工人)同時擁有自己的記憶。使用U1,U2得到的結果,可以對U3,U4,U5,U6進行相似的計算,最後對U7,U8進行計算。爲此,我想我需要在Matlabpool中使用PARFOR?但我不知道循環需要多少個索引(對應於內核/處理器的數量)。
我的問題是:
我可以使用超級計算機如上所述,這樣我就可以使用MATLAB分佈式計算服務器?
對於此代碼,我應該使用並行計算工具箱還是Matlab分佈式計算服務器? 我的意思是並行計算工具箱(本地工人),我不能指定哪些工作人員將計算U1和U2(也用於U3,U4,...),因爲他們共享內存並以交互方式運行,是不是?
如果我使用提議的想法,那麼我需要多少工人?大概8個核心? 這是更好的使用1個計算節點,並要求9個核心(8使用,一個用於matlab會話)或使用8個計算機節點?
我是初學Matlab並行計算。請給出你的建議! 謝謝!
彼得
做T循環的任何迭代取決於過去的迭代? – Jonas
不,它不是! T循環(while循環你的意思)僅僅是從t_0(初始)到T(結束時間)的積分時間。 – user3517471