如何利用多核電腦實現matlab的並行運算

時間 2021-06-18 12:43:10

1樓:匿名使用者

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

tictotal=10^5;

for (i=1:total)

ss(i)=insum;

endplot(ss);

toc% matlabpool close

function [s]=insum

x=abs(round(normrnd(50,40,1,1000)));

s=sum(x);

function testparallel

%並行matlabpool local 2

tictotal=10^5;

parfor (i=1:total)

ss(i)=insum;

endplot(ss);

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

如何提高Matlab計算效率,多核處理器平行計算怎麼弄啊

如果cpu利用率低,而計算慢的話,說明你的程式處理的資料量並不大,但是處理流程很複雜,裡面肯定涉及了很多的類似於for迴圈的語句,使得程式的時間複雜度一下子就上去了。看了下面你的補充回答,好像和多核處理平行計算沒關係的。雖然最新版的matlab支援這種執行方式,但感覺你似乎還用不到這麼做。建議你還是...

如何利用雜交優勢,如何正確利用雜交優勢

中國農業出版社 雜交是指不同群體中個體間的交配。雜交的目的是使各親本的基因配合在一起,造成新的更為有利的基因型,以豐富動物的遺傳型別,導致羊群雜合基因型頻率增加,純合基因型頻率減少。通過雜交能將不同品種的特性結合在一起,創造出親本原來所不具備的特性,並能提高後代的生活力。級進雜交示意圖 如果以提高生...

如何利用vba對操作自動評分,如何利用vba對word操作自動評分

南京新華電腦專修學院 工具 巨集 設定成低 to crazy0ball 你的問題我在網上查了好多資料,但是到目前為止,還沒有辦法直接解決這個問題的辦法,估計是很難,或者說沒有辦法直接解決,因為,在你之前,在好幾個office專業論壇上已經有人就這問題進行了 沒有一個最終的解決方案.其實,說到低,就是...