我编写了一个非常占用CPU的线程任务,该任务可以在我的2012 MacBook Pro四核上正常运行。我用20个线程将其松开,并且使用英特尔Power Gadget测得的温度最高达到约100°C,而节流效果却很小。
将相同的程序和数据文件带到配备双核计算机的2016 13英寸MacBook Pro上,然后启动它,我希望它还能保持3.3-3.4 GHz的温度,直到温度接近100°C。上面的命令以350%的速度显示任务(每个双线程2个内核),但是CPU温度被降低到1.6-1-8 GHz,温度仅在60°C左右,而风扇则安静下来。如果我单独启动4个在执行单线程CPU任务时,机器在保持3.3-3.4 GHz的频率下达到预期的性能,直到达到100°C,风扇开始转动;问题是为什么我的CPU被节流?
两台机器都是最新的,并运行相同版本的gcc。如果我什至从工作机上获取二进制文件并将其放在2016 Mac上,它也会遇到同样的问题。
如果我运行3个或4个CPU单线程,以使计算机全速运行,然后启动线程程序,它也会降低频率。
两台机器都有16 GB的RAM。
编辑
在玩完代码后,我怀疑当任务创建太多线程时,它会受到限制。在此程序中,我将读取所有记录,并为其创建一个线程。我一次只允许20个左右的线程通过,因此在任何时候都不会有超过21个线程,但是有14,400,000条记录需要处理,因此在30分钟左右的时间内,每个记录都将由一个单独的线程处理。
我创建了一个琐碎的pthread程序,该程序消耗CPU时间并设置其中10个运行。有问题的笔记本电脑可以正常运行,并且可以预热到95C。
我想我将重写代码以重用同一线程,而不是销毁它们并重新启动它们。
更新5/13/17
经过几个小时的工作,它现在仅创建n个线程并仅重用它们,这无济于事。除了CPU温度,什么会导致本机减速?