我有一个用户问他为什么他的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。
答案 0 :(得分:1)
验证用户是否未运行多线程MEX功能。 -singleCompThread
开关不控制外部函数,只是内置的MATLAB函数。
需要对MEX函数进行代码更改以接受指示最大线程数的输入参数。这应该没什么大不了的。我在我的线程MEX函数中执行此操作。如果作者没有创建一些指定线程数的机制,我会感到惊讶。
答案 1 :(得分:0)
您的用户是否正在使用Parallel Computing Toolbox中的功能(例如matlabpool
或parfor
)?这些将启动多个MATLAB Worker进程 - 通常,默认情况下,每个处理器或每个核心一个 - 每个都在启用-singleCompThread
的情况下运行。
这样做是为了显式并行化这些MATLAB Workers的计算密集型操作。这些很可能会最大化他们正在运行的核心(这就是他们的观点)。