即使使用-singleCompThread,MATLAB CPU使用也会失控

时间:2013-12-18 04:45:26

标签: multithreading matlab cpu cpu-usage

我有一个用户问他为什么他的MATLAB进程正在读取top中800%的CPU使用率。他有四个这样的MATLAB过程。以下是关于他所使用的服务器的一些规范:

# physical processors: 4
abc@server1[~]$ grep "physical id" /proc/cpuinfo | sort -u | wc -l
4

# cores per processor: 8
abc@server1[~]$ grep "cpu cores" /proc/cpuinfo | sort -u | cut -d ":" -f2
 8

# logical cores: 32
abc@server1[~]$ grep -c "processor" /proc/cpuinfo
32

使用800%= 3200的4个进程.8个核心x 4个CPU = 3200个。巧合?不知怎的,我怀疑它,但我真的没有别的东西可以为想法堆做贡献,考虑到这些是在启用了-singleCompThread的情况下运行的。他的代码可能是效率低下还是什么东西导致性能不佳或类似的东西超出了我们的控制范围?

我能找到/做什么来帮助诊断他的CPU使用率是通过屋顶的呢?

为了完成起见,这里是top的样子(缩写为只展示他的任务):

Tasks: 768 total,   3 running, 763 sleeping,   2 stopped,   0 zombie
Cpu(s):  0.0%us,  0.1%sy, 99.9%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132141096k total, 52020588k used, 80120508k free,  3343272k buffers
Swap: 16383992k total,        0k used, 16383992k free, 38806216k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
16179 user      30  10 3732m 220m  78m S 804.3  0.2   1006:24 MATLAB
16346 user      30  10 3729m 221m  78m S 799.2  0.2 977:04.20 MATLAB
16491 user      30  10 4167m 225m  78m S 788.9  0.2 958:12.45 MATLAB
16623 user      30  10 3473m 227m  78m S 785.1  0.2 960:48.42 MATLAB

编辑:只是为了澄清,虽然它在top中说“MATLAB”是他的命令,htop将完整的命令显示为包括-singleCompThread。

2 个答案:

答案 0 :(得分:1)

验证用户是否未运行多线程MEX功能。 -singleCompThread开关不控制外部函数,只是内置的MATLAB函数。

需要对MEX函数进行代码更改以接受指示最大线程数的输入参数。这应该没什么大不了的。我在我的线程MEX函数中执行此操作。如果作者没有创建一些指定线程数的机制,我会感到惊讶。

答案 1 :(得分:0)

您的用户是否正在使用Parallel Computing Toolbox中的功能(例如matlabpoolparfor)?这些将启动多个MATLAB Worker进程 - 通常,默认情况下,每个处理器或每个核心一个 - 每个都在启用-singleCompThread的情况下运行。

这样做是为了显式并行化这些MATLAB Workers的计算密集型操作。这些很可能会最大化他们正在运行的核心(这就是他们的观点)。