1. 程式人生 > >16.matlab並行處理,呼叫CPU得多核

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中使用多核並行運算給我們帶來很多好處。