我發現我用MATLAB運算時,CPU佔用率的極限大概是55%左右,即使是使用並行運算(使用parfor),也無法超過55%。請問有沒有辦法提高CPU佔用率呢?還是說這個已經是極限了,原因是什麼?在windows7下測試,出現這種現象。


matlab自帶一些函數會調用並行,但只能調用物理核心,所以超線程的u只能用到一半的邏輯處理器。


我的電腦是雙核四線程的,matlab默認將最大開啟workers的數量定義為了核心數,也就是2。因此要想使用全部4個線程,需要在設置中將workers的數量更改為4(下圖2,3)。設置完畢後開啟並行池parpool(local,4), 循環中使用parfor進行並行運算,cpu使用效率可達到100%。


修改 matlabpool profile的worker number(默認情況下每個核心一個worker)。另外你在用 parfor-loop的時候有沒有開啟matlabpool?

瀉藥

matlab在使用並行運算時,默認是佔用CPU所有核心,不包括線程。

比如:i7-8700,六核十二線程,六核全開CPU佔用率大概60%-70%

parfor

圖裡matlab佔用cpu85%,內存是16G的,佔50%。

想提高佔用率有兩個方法:

1.修改matlab預設的並行計算選項為電腦線程數

2.也可以多開matlab,我一般用一個滿載並行加多開,這樣可以算不同的東西,速度也可以。


問題:「我發現我用MATLAB運算時,CPU佔用率的極限大概是55%左右,即使是使用並行運算(使用parfor),也無法超過55%。請問有沒有辦法提高CPU佔用率呢?還是說這個已經是極限了,原因是什麼?」

隨便鼓搗了下,這問題不適用OS X系統。我用的是OS X 10.9.5,Matlab 2014b,相信在Linux版本的Matlab也沒有這個問題,建議問題添加操作系統平台。再說為什麼windows上CPU佔用率上不去,這就要去問操作系統了。在OS X和Linux系統中,Matlab進程基本可以從0飆到100%,而且可能因為耗盡系統內存而無響應自動退出,windows就沒這情況,印象里假如分配太多內存的話會出現「Out of Memory」的提示。
應該是硬體的原因吧, 我的台式機 (4核8線程, win7) 和伺服器 (12核24線程, ubuntu) 只能運行到 50 %, 同時運行兩個 matlab 才能完全佔用 CPU. 但是工作站 (12核12線程, win7) 可以直接運行到 100%.
是不是程序本身的問題?如果parfor對應的迭代次數少,通信佔用的時間較長?
推薦閱讀:
相关文章