我发现我用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对应的迭代次数少,通信占用的时间较长?
推荐阅读:
相关文章