奇怪的CPU使用率:100%利用率,但温度异常低

问题描述 投票:2回答:1

我的算法/ CPU遇到奇怪的行为,我想知道是什么原因造成的。

我正在使用的CPU:AMD 2990WX 32c / 64t,操作系统:具有4.15.0-64-通用内核的Ubuntu 18.04LTS。

算法(Julia 1.0.3):

@sync @distributed for var in range(0.1,step=0.1,stop=10.0)
                       res=do_heavy_stuff(var) #solves differential equation,
                                               #basically, multiplying 200x200 matrices many times
                       save(filename,"RES",res)
end

Function do_heavy_stuff(var)需要大约3个小时才能在单个CPU内核上求解。当我与10个进程(julia -p 10 my_code.jl)并行启动时,每个并行循环大约需要4个小时,这意味着每4个小时就可以保存10个文件。由于cpu频率从4.1Ghz下降到3.4Ghz,因此预计会有所放缓。

如果我启动3个单独的实例,每个实例具有10个进程,因此cpu的总利用率为30个内核,那么一个循环周期仍需要约4个小时,这意味着我可以完成30个运行并每4个小时保存一次。

但是,如果我运行2个实例(一个实例的值为0,另一个实例值为+10),每个实例一次具有30个进程julia -p 30 my_code.jl,我看到(使用htop)该CPU利用率是60(+)个线程,但是算法变得非常慢(20小时后仍保存了零个文件)。此外,我发现CPU温度异常低(〜45C而不是预期的65C)。

根据这些信息,我可以猜测,使用(几乎)cpu的所有线程会使它执行无用的工作,从而耗尽了CPU周期,但没有执行浮点操作。我看不到SSD的I / O,我只使用一半的RAM。

我启动了mpstat mpstat -Ahttps://pastebin.com/c19nycsT,我可以看到我所有的内核都处于空闲状态,这说明温度很低,但是,我仍然不明白确切是什么瓶颈?如何从这里进行故障排除?是否有任何办法可以查看(在不接触硬件的情况下)问题是否出在RAM带宽或其他方面?

EDIT:引起我注意的是,我使用mpstat错误。显然,mpstat -A提供自计算机启动以来的CPU统计信息,而我需要的是可以通过mpstat -P ALL 2获得的短时积分结果。不幸的是,我只是在杀死有问题的代码之后才学到这一点,所以没有来自mpstat的真实数据。但是,我仍然很感兴趣,如何解决这种情况,即内核似乎在做某事,但结果却没有显示?我如何找到瓶颈?

linux multithreading optimization julia cpu-usage
1个回答
0
投票

I / O的长时间延迟。当您处理大量磁盘数据或从网络读取数据时,您的进程自然就会停滞。在这种情况下,CPU利用率可能很低,并且执行时间较长。

    do_heavy_stuff的执行时间差异很大。这种差异可能是由于不稳定的I / O或不同的模型参数导致不同的执行时间而引起的。为什么会出现问题,需要了解@distributed如何在工作进程之间共享工作负载。即,每个工作人员都具有相等的for循环。例如,如果您有4个工人,则第一个工人在var范围内获得0.1:0.1:2.5,第二个工人在2.6:0.1:5.0范围内,依此类推。现在,如果某些var值导致繁重的任务,则第一名工人可能会工作5h,其他工人可能会工作1h。这意味着@sync在5个小时后完成,只有一个CPU一直在工作。
  • [查看您的帖子,我强烈押注第二个原因。
  • © www.soinside.com 2019 - 2024. All rights reserved.