如何讓我的matlab內存使用率達百分之百?

不要簡單說並行!matlab的並行到目前我都持懷疑態度,矢量化是我很認可的!牛人們有什麼推薦?比如處理多循環加速問題?


內存使用率100%?那簡單啊

a=[0];

for i = 1:100000000;

a=[a,a];

內存佔用指數增長,保證秒秒鐘把你電腦卡死!不用謝我

說正經的,你應該是想cpu100%吧。多核想100%cpu佔用率,矢量化沒用,除了並行別無他法。你持懷疑態度是因為你沒能發揮出來,寫的時候注意負載平衡,注意數據關聯性,cpu100%並不難。


在較舊版本的MATLAB上使用這個命令:

matlabpool local 4

"4"指你的cpu核心數,而不是線程數。現在的cpu一般是n核心,2n線程(n=2、4、6、8……等偶數)。

在新版本的MATLAB上會遇到如下警告:

警告: matlabpool will be removed in a future release.

Use parpool instead.

命令執行成功後提示:

Starting matlabpool using the "local" profile ... connected to 4 workers.

看看任務管理器:

如果你在local後面使用的數字超過了你的cpu核心數,就會失敗:

錯誤使用 matlabpool (line 148)

Failed to start a parallel pool. (For information in addition to the causing error, validate the profile "local" in the Cluster Profile Manager.)

原因:

錯誤使用 parallel.internal.pool.InteractiveClient/start (line 329)

Failed to start pool.

錯誤使用 parallel.Job/submit (line 304)

You requested a minimum of 6 workers, but the cluster "local" has the NumWorkers property set to allow a maximum of 4 workers. To run a communicating job on more workers than this(up to a maximum of 512 for the Local cluster), increase the value of the NumWorkers property for the cluster. The default value of NumWorkers for a Local cluster is the number of cores on the local machine.

在新版本的MATLAB上推薦使用這個命令:

parpool(4)

命令執行成功後提示:

Starting parallel pool (parpool) using the "local" profile ... connected to 4 workers.

ans =

Pool (具有屬性):

Connected: true

NumWorkers: 4

Cluster: local

AttachedFiles: {}

IdleTimeout: 30 minute(s) (30 minutes remaining)

SpmdEnabled: true

---------------------------------------------------------------

試一試下面的fft小程序,

N=10^7; a=rand(1,N); b=gpuArray(a);

%gpuArray的作用是把矩陣從內存中傳遞到顯存中

tic

for k=1:300 %這個for循環在cpu中進行,不並行

fft(a+k);

end

toc

%--------------

tic

parfor k=1:300 %把for換成parfor

fft(a+k); %parfor循環仍在cpu中進行,會並行。

end

toc

%--------------

tic

for k=1:300 %這個for循環在gpu中進行,高度並行。

fft(b+k); %矩陣b保存在顯存中。

end

toc

---------------------------------------------------------------

速度對比:

時間已過 49.175600 秒。

時間已過 36.155164 秒。

時間已過 5.052490 秒。

註:本人cpu是4核8線程,第一個for循環中cpu佔用40%左右,第二個parfor時cpu佔用70%左右,第三個for循環cpu佔用率幾乎是0,而gpu佔用100%.由於cpu是n核心,2n線程,我也不知道系統是怎麼樣計算佔用率的,也不知道35%和55%究竟意味著幾個核在全速計算。至於內存佔用率,很大程度上取決於你的內存有多大。

---------------------------------------------------------------

既然評論中有人提到cluster profile manager,那我也來說一說這個。

現在就可以來一發parpool(8)了。

超線程技術(Hyper-Threading,簡稱HT)對密集型計算任務的提速效果不明顯,如果在BIOS設置中關閉HT(然而不是所有的電腦都能進行這樣的設置),我的cpu就變成4核4線程的了。關閉HT後,parpool(4)即可讓cpu達100%滿負荷。k=1:300,4線程36s(HT開啟),4線程33s(HT關閉),8線程33s(HT開啟);k=1:1000,4線程113s(HT開啟),4線程105s(HT關閉),8線程104s(HT開啟).

在parfor執行時,每個MATLAB的後台進程要佔800M左右的內存,parpool(8)(開啟HT)與parpool(4)(關閉HT)都能讓cpu 100%滿負荷,但前者比後者多佔將近3G的內存,實際上很不划算。關於超線程技術帶來的效果,推薦看看這篇測評報告。

10項測試88項成績 揭秘超線程性能真相_Intel 酷睿i7 4770K(盒)_CPUCPU評測


第一眼真以為是問CPU利用率了...

內存利用率主要和你算的東西大小有關吧


用下matlab的mapreduce,爽到爆,雙路e5,2686開到100%


MATLAB沒試過,C++用openmp,CPU可以開到100%,但是會用不到一半


多開


學生黨

我想多開空間不就讓內存爆滿了嗎??不過那時候好像電腦都卡死了,內存使用率顯示不出來。

你確定說的不是CPU使用率??


推薦閱讀:

寫大規模三維並行計算流體力學(CFD)求解器時,有什麼經驗和心得?
哪種函數式語言更適合多核的並行和並發編程?
coursera上有沒有關於分散式系統,並行計算,linux內核,多線程編程的課程?
人腦的並行計算能力有多強?
並行計算在 Quant 中是如何應用的?

TAG:並行編程 | 並行計算 | Matlab2013A |