我对多核CPU系统的负载平衡感兴趣。如果您将1个CPU与多个内核一起使用,则平衡多个内核上的负载还是尝试填充单个内核并使其他内核保持空闲状态是否更节能?
基本假设是,两种情况下同时完成的工作量完全相同。因此,在同一个CPU中使用4个内核(每个内核负载25%)或使用1个内核(100%负载内核)效率更高。
我认为1个100%负载的内核应该更有效,但是由于我可能错了,我一直在寻找有关此问题的认真答案(没有猜测)。
我对多核CPU系统的负载平衡感兴趣。如果您将1个CPU与多个内核一起使用,则平衡多个内核上的负载还是尝试填充单个内核并使其他内核保持空闲状态是否更节能?
基本假设是,两种情况下同时完成的工作量完全相同。因此,在同一个CPU中使用4个内核(每个内核负载25%)或使用1个内核(100%负载内核)效率更高。
我认为1个100%负载的内核应该更有效,但是由于我可能错了,我一直在寻找有关此问题的认真答案(没有猜测)。
Answers:
IMO在一般情况下根本无法回答这个问题。
在我的办公桌上,我拥有这些新型的酷睿i7-980x 6核TurboBoost支持的CPU之一。如果在此计算机上加载单个内核,它将提高该内核的时钟速度,从而增加CPU的功耗,因此将产生巨大的差异。该CPU以及其他更现代的CPU可以部分关闭不活动的内核的电源,从而节省更多功率。在较旧的CPU型号上并非如此。
请记住,您使用一个核心所做的工作必然不同于您使用多个核心所做的工作。如果可以将负载分散到多个内核上,则会发现在单个内核上花费大量额外时间来执行昂贵的上下文切换,并且性能会受到影响。
无论如何,这个问题有太多的变量无法真正回答。人们可能会不断研究不同类型的负载,而任何试图进行基准测试以获得答案的人最终(可能是无意间)进行了苹果到橙色的比较,而这种比较不适用于其他用例。
哦,还有一件事。大多数人可能会以功率来引用效率。您不想陷入这个陷阱。 由于根据负载的平衡方式,处理负载的时间必定会有所不同,因此,您必须随时间对结果进行积分,以找到完成作业所需的净能量,以得出可靠的结果。
我今天使用这台计算机(Intel C2D T8100)和来自lunatics安装程序0.36的优化SETI @ Home应用程序进行了一些测试。我使用M $ Joulmeter来计算功耗。我测量了消耗树的时间。首先,我让BOINC占用100%的内核和100%的CPU时间,并使其运行一小时。处理器消耗的功率为20W,任务管理器的CPU时间图稳定在100%。我的计算机的平均功耗为45.05W,并且还在上升,此刻我停止测试功耗为46.18W。
在第二个测试中,我将BOINC设置为使用50%的可用内核和100%的CPU时间,并使其运行一小时。CPU功耗在12W和13W之间变化。平均功耗为42.72W,并且还在上升。在我停止测试的那一刻,功耗为44W。为了使目标内核的CPU时间图平坦,我将程序的亲和力设置为一个内核,并将优先级设置为高。其他内核的图形显示比正常的CPU使用时间要高一些。
对于第三个测试,我将BOINC设置为使用100%的可用内核和50%的CPU时间。功耗在5W和17W之间大幅度变化。经过一小时的测试,平均功耗为39.96W并在下降。CPU时间图像/\/\/\/\/\/\/\/\/\/\/\/\/\
。由于BOINC使用的时间单位大小,预计会出现峰值。
因此,我相信使用两个半负载运行的内核比在一个满负载运行的内核效率更高。
是的,我知道要进行适当的研究,需要更多的样本,但是当时我没有足够的计算机或时间来进行适当的统计。
您的问题的答案是双重的:如果您正在运行高度可矢量化的并行代码,那么平衡多个内核上的负载总是更有效的。磁芯将在较低的负载下运行,比单个磁芯达到极限时释放的热量更少。另一方面,如果您的代码不可并行化,则在多个内核上运行它的效率会降低,原因是由于跨代码的依赖关系而导致的高速缓存未命中数。这可能仍会产生较少的热量,但是与在单个内核上运行相比,完成任务肯定会花费更长的时间。