计算化学公社
标题: CPU(带HT) 一半线程 vs 100%使用 效率实测 [打印本页]
作者Author: liyuanhe211 时间: 2015-11-13 05:12
标题: CPU(带HT) 一半线程 vs 100%使用 效率实测
本帖最后由 liyuanhe211 于 2017-2-6 14:28 编辑
曾有谣传说做计算应当在BIOS中关闭HyperThread(超线程),Sob已经辟谣:
(, 下载次数 Times of downloads: 101)
(p.s. 如何调整图片大小?)
我对不要关闭超线程是没有异议的,但对“2N比N核并行是否性能有提升”感兴趣,遂做了下列测试:
CPU核数为N。线程数为2N。
一种情况下使得该输入文件占用N个线程,单独运行;
另一种情况同时启动两个同样的输入文件,每个文件占用N个线程,使得2N个线程占满。
(不使用2N线程而是使用2个N线程文件是为了排除Gaussian并行效率不是100%的影响)
测试的硬件,两台机器,一台E5-2680 v2 *2 (20核40线程),一台E5-2643 v2*2(12核24线程),计算分配每线程2G内存。
测试环境是CentOS 6.2,Gaussian 09 D.01 Linux,测试样例,一个47个原子含CHN的有机羧酸负离子(选它只是因为最近算过,想做其他的比较),测试路径[B3LYP/6-31+G(d,p) opt freq]
各进程所用时间(l503和l702 已对循环平均),总CPU时间和总Wall time见下表。
注意看两行高亮的即可,该数值>1说明使用N个核有利,反之说明2N个核效率更高(单位时间内能完成的任务量)。
(, 下载次数 Times of downloads: 109)
从结果可见,E5-2643上使用2N个核的效率稍高10%~15%左右;E5-2680视进程不同结论不同,从总CPU时间上来看使用2N个线程几乎和N个线程,表观上(仅仅是表观上)50%的CPU使用率和100%CPU使用的效率几乎是一样的!总时间上用2N个核心效率还低了4%
以2643 v2为例,这是测试了 【1*12线程计算】 和 【2*12线程计算】的区别,如果测试 【2*6线程】 和 【2*12线程】估计前者会比现在更占优(并行效率<<100%),所以上面的ratio会更接近/超过 1,即使用50%的CPU有利。
综上,对N核、2N个线程的CPU,使用2N线程(100% CPU)并行和N线程(50% CPU)并行,单位Wall Time可完成的任务是基本一样的,但前者使用了两倍的CPU Time。故使用 N线程(表观 50% CPU)是合理的。
该结果只对我自己负责╮(╯▽╰)╭
作者Author: smutao 时间: 2015-11-13 06:01
如果单个任务用N个线程的时候,可以同时跑2个相同的任务(控制变量),这样的话更有可比性。
作者Author: sobereva 时间: 2015-11-13 06:29
很有益的测试。
图片大小只能在传图之前缩放合适。(仅当超过论坛最大宽度的时候才会缩到最大宽度)
作者Author: liyuanhe211 时间: 2015-11-13 13:35
本帖最后由 liyuanhe211 于 2015-11-13 16:45 编辑
没明白什么意思,你是觉得应当2*6和2*12比,不是1*12.和2*12比吗?我觉得这样反而没控制变量。
作者Author: liyuanhe211 时间: 2015-11-13 16:47
用2*6和2*12比较就不能单纯的测量CPU性能的差异,而是掺入了Gaussian并行效率的因素,换个软件可能差别很大。
Gaussian并行效率已经有人测试过了,如果需要2*6和2*12比较的结果,只需要在我测出的当前的数值上乘以Gaussian在6线程和12线程的并行效率的比值就可以了。
作者Author: smutao 时间: 2015-11-13 23:26
我的意思是当你只用N的线程的时候,CPU并没有像用2N个线程时那样100%工作着。但是当你跑了2个相同的任务,每个任务占N线程的时候,CPU就100%工作了,这个结果也许可以和2N的情况比较。
作者Author: 卡开发发 时间: 2015-11-13 23:47
以前不开超线程的时候这样干过,两个任务如果各自使用N/2核心总共使用N个核心,比一个任务单独使用N/2核心还慢。开超线程是怎么个情况我还真不知道呢。
作者Author: liyuanhe211 时间: 2015-11-14 00:19
本帖最后由 liyuanhe211 于 2015-11-14 00:24 编辑
You completely miss my point. 或许我说的不够明白
你这样测出来的是Gaussian在N线程和2N线程的并行效率,我并不想测这个数值,这个数值别人已经测过了。
我想测试的就是CPU只跑N个线程(表观50%)和跑2N的线程(100%)时的CPU性能差异。
因为超线程把一个物理核心变成了两个逻辑线程以压榨剩余资源,但满载时被分配在同一个核心上的两个线程会抢资源,可能因为来回Switch任务,没榨出资源反而效率降低了。
我就是想测试CPU在满载时,使用100%比使用50%时有多大的提高(根据上述推测,应该远小于2),所以做了这个测试,结果是大概110%~115% for E5-2643,也就是用超线程在E5-2643上榨出了10%,而E5-2680是96%,说明资源没榨出来,反而损失了4%。
用Gaussian只不过是一种把CPU塞满的方法,而且又有一定得实用性而已。
作者Author: liyuanhe211 时间: 2015-11-14 00:20
你这个现象是不是因为CPU只用一半核心的时候可以Turbo到更高的频率(和满载相比)?
作者Author: 卡开发发 时间: 2015-11-14 00:58
不好说,下次可以找找原因,比如全部限制Turbo。
作者Author: yjcmwgk 时间: 2016-1-2 11:41
本帖最后由 yjcmwgk 于 2016-1-2 11:45 编辑
这么一来岂不是说,开不开超线程简直无所谓了吗?无论是提高10%还是损失4%,都在可接受范围内呢。
考虑其他方面:
(1)自己私用的服务器,或者有排队系统的公用服务器,那就打开超线程好了,电脑一边干重活儿,那些逻辑核心还能跑个小小轻活儿;
(2)没有排队系统的公用服务器,一定要关掉超线程吧,免得某些人看到CPU利用率只有50%就兴冲冲又提交了更多任务。
作者Author: liyuanhe211 时间: 2016-1-2 13:44
测试是开了超线程,但是只用了一半的逻辑核心,不知道直接BIOS里关掉会是什么结果。
确实是,没有排队系统又有不自觉的确实没招。不过就算是关了超线程,没排队 CPU 100%照样有不自觉的能提交。
作者Author: cdh1075 时间: 2017-2-6 13:25
cpu使用时间和cpu寿命之间毫无影响,除非你想一个cpu用10年
作者Author: ggdh 时间: 2017-2-6 14:17
面对越来越胖的节点。这个问题值得研究。
比如我有一个40核的cpu。同时我有1000个任务。
那么是每个任务设多少个核能够最快的算完呢?
作者Author: yjcmwgk 时间: 2017-2-7 08:17
40核?难道你买了E5-2698v4双路服务器?出个评测呗~
作者Author: ggdh 时间: 2017-2-7 09:52
小卒,已经测过。而且还引用了你的大作。。。
http://bbs.keinsci.com/forum.php?mod=viewthread&tid=4841
欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |