如何讓我的matlab內存使用率達百分之百?
01-07
不要簡單說並行!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的作用是把矩陣從內存中傳遞到顯存中
ticfor k=1:300 %這個for循環在cpu中進行,不並行 fft(a+k); endtoc%--------------ticparfor k=1:300 %把for換成parfor fft(a+k); %parfor循環仍在cpu中進行,會並行。end
toc%--------------ticfor k=1:300 %這個for循環在gpu中進行,高度並行。 fft(b+k); %矩陣b保存在顯存中。endtoc---------------------------------------------------------------速度對比:時間已過 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%究竟意味著幾個核在全速計算。至於內存佔用率,很大程度上取決於你的內存有多大。
現在就可以來一發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 |