16.matlab並行處理,呼叫CPU得多核
Matlab 多核 多個CPU 並行運算 - xiaolu的專欄 - CSDN部落格 https://blog.csdn.net/zjxiaolu/article/details/44886173
Matlab並行運算
目前,新購置的電腦大部分都是多核的了,使用Matlab進行大量計算時如何有效利用多核呢?Matlab目前版本已經比較好的支援多核並行運算了。是用的Matlab版本是R2007b。電腦是雙核的。
先簡單試試:
>> matlabpool local 2
Submitted parallel job to the scheduler, waiting for it to start.
Connected to a matlabpool session with 2 labs.
顯示正在進行多核配置,然後,提示連線到2個“實驗室”(labs)。我這也理解的:本地虛擬出2臺可以執行matlab的工作站,這樣用分散式計算工具箱可以進行平行計算(matlabpool這個命令好像是在平行計算工具箱裡的)。
>> testParallel
Elapsed time is 7.750534 seconds.
這裡執行testParallel函式,已經開闢了2個labs,為了進行多核並行運算,testParallel中,要用parfor代替原來的for迴圈。
在執行這個時,觀察windows工作管理員,可以發現一共有3個MATLAB.exe程序。其中一個佔記憶體較多的,應該是主控的,他基本不幹活,只負責分配,進行計算時他的cpu佔用率只有1~2%,剩下兩個程序專門用來計算的,跑起來各佔cpu 49%左右。看上去還是每個matlab程序單核運算,但是一下開2個程序,所以能把cpu用滿。當執行完testParallel後,三個程序的cpu都立刻降為1%左右了。
>> matlabpool close
Sending a stop signal to all the labs...
Waiting for parallel job to finish...
Performing parallel job cleanup...
Done.
當要關閉開闢的2個labs時,使用matlabpool close關閉即可。
程式碼及使用時間對比如下表:
function testParallel
%非並行
% matlabpool local 2
tic
total=10^5;
for (i=1:total)
ss(i)=inSum;
end
plot(ss);
toc
% matlabpool close
function [s]=inSum
x=abs(round(normrnd(50,40,1,1000)));
s=sum(x);
function testParallel
%並行
matlabpool local 2
tic
total=10^5;
parfor (i=1:total)
ss(i)=inSum;
end
plot(ss);
toc
matlabpool close
function [s]=inSum
x=abs(round(normrnd(50,40,1,1000)));
s=sum(x);
Elapsed time is 70.471469 seconds.Elapsed time is 7.750534 seconds.
70.471469/7.750534 = 9.0925,並行與否的時間比竟然是9倍,足以表明,在Matlab中使用多核並行運算給我們帶來很多好處。