最近坛子里掀起了一阵对超线程及对棋软的作用的讨论,其中出现了一些对超线程认识上的廖误和偏差。特开此帖谈谈本人的看法,欢迎不同意见参加讨论。
一. 什么是超线程
CPU生产商为了提高CPU的性能,通常做法是提高CPU的时钟频率和增加缓存容量。不过目前CPU的频率越来越快,如果再通过提升CPU频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。
基于在实际应用中,很多因素令CPU的执行单元不能被充分使用,如果CPU不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降, 因而造成了CPU性能不能得到全部的发挥。
因此,Intel则采用了另一个思路去提高CPU的性能,让CPU可以同时执行多重线程,就能够让CPU发挥更大效率,即所谓“超线程(Hyper-Threading,简称“HT”)”技术。超线程技术就是利用特殊的硬件指令,把一个真正的CPU物理核心分成两个,一个是真正的核心,英文叫physical core(物理核心),另外一个是从属核心,英文叫Logical core(逻辑核心)。逻辑内核只是被模拟成物理芯片,让单个处理器核心都能使用线程级并行计算,也就是说超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,这样就减少了CPU的闲置时间,提高的CPU的运行效率。
以i7 2600K为例,就是把四个逻辑内核模拟成四个物理芯片。当在BIOS里打开超线程设置后(BIOS里的Hyper-threading设置成Enable),在操作系统中看到的CPU数量是实际CPU物理核心数量的两倍,就是原本一个物理核心的可以看到两个,两个的可以看到四个, 四个的可以看到八个......。方法是打开Windows任务管理器(同时按下Ctrl、 Alt、 Del键), 然后在资源监视器的窗口内就可看到原本四个物理内核的2600K变成了八个所谓的CPU: CPU0, 1, 2, 3, 4, 5, 6, 7。
虽然采用超线程技术能同时执行N个线程,但它并不象N个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU物理核心的性能。
需要注意的是,含有超线程技术的CPU需要芯片组、操作系统及应用程序软件支持,才能发挥该项技术的优势。要想使用超线程或将超线程的威力发挥出来,需要五大基本的条件:
1. CPU要支持HT。
2. 主板芯片要支持HT。
3. 双通道内存。
4. 操作系统的支持。
5. 应用程序的支持。
据我所知,目前真正支持HT的应用程序可以说是凤毛麟角。已经支持HT的应用程序,其实是无心插柳之作:例如Adobe的Photoshop与微软的Windows Media Decoder在推出之前,都为了查错的原因,而在上市前加入了多线程功能。
二. 超线程可以在中国象棋软件的运行中发挥作用吗?
这个问题首先要对照上述的关于使用超线程的五大条件,
其中最关键的一点是我们现在使用的中国象棋软件是否支持超线程。很多人有个误解:说棋软的参数设定上有个参数叫THREAD(翻译成中文就是线程), 他就认为既然是线程,
如果棋软信息中显示最大支持线程是8, 就可以设成8线程,尽管他的CPU只有四个物理核心。其实这是个天大的误解,除非你的象棋软件是支持超线程的,否则棋软里说的THREAD是指真正的CPU物理核心。能进行计算的是真正的CPU物理核心,而逻辑核心只是起到减少CPU物理核心空闲的作用。假设一个游戏可以用4核,我们很清楚,这时候最有效的办法是把任务分配到4个真实的物理核心上,如果你明明只有四个CPU物理核心,却在棋软里设置成八线程,不支持超线程的棋软会把八线程需要处理的资料并行交给你的四个物理核心及四个逻辑核心,因为它可分不清哪4个是真实的物理核心,哪4个是HT技术带来的逻辑核心,这时候问题就来了,可是在系统眼里,那8个核心是完全等同的,没有高低贵贱之分,所以很大的可能性是系统把任务分配到了所有物理核心及逻辑核心上了。可悲的事情就这样发生了,逻辑核心与物理核心争抢资源,虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每个CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。(这时候物理核心的处理性能大受影响,逻辑核心所发挥的性能还不如物理核心所损失的,所谓得不偿失),这样等于脱了裤子放屁,效率反而低于关掉超线程只用四个物理核心计算的情况。
这就是为什么当你打开BIOS里超线程而运行棋软的时候,你的CPU占用率不能达到100%, 这说明CPU物理核心没有被充分利用,有一部分工作分配给了逻辑核心,但逻辑核心的工作还是要靠物理核心的计算来完成的,因此造成了真正的CPU物理核心的空闲时间加大。此外,在BIOS里打开超线程支持后,如果处理器以双处理器模式工作,那么处理器内部缓存就会被划分成几区域,互相共享内部资源。对于不支持多处理器工作的软件在运行时效率反而较低,出错的概率也要比单处理器高很多。
现在再说说当下的棋软有那些是支持超线程的,据我所知,没有一个象棋软件的作者或是代理商宣称他们的软件是支持超线程的,如果有的话那我恭喜你,你可以利用超线程去提高软件的效率,比如你是4核心八线程的CPU,就可以使用支持八线程的软件而把THREAD设置成8。 本人使用的是象棋旋风四,代理商的指引是让你设置成与你物理核心数量相等的线程数,换言之就是旋风四不支持超线程技术。因此我认为如果你使用的是不支持超线程的棋软,就没有必要打开超线程,因为打开超线程后处理器内部缓存就会被划分成多于单纯使用物理核心时所划分的区域,并且互相共享内部资源,结果造成单个的子系统性能下降。
结论:
除非你使用的是支持超线程的软件,否则不要期望HT能为你的机器性能带来什么改变。打开超线程反而降低了处理器的性能,而且打开超线程后要使用CPU内部更多的晶体管,从而产生更多的热量,如果你是一个超频玩家,打开超线程会使得CPU温度比关闭超线程高约9度,自然对超频产生不利的影响。