实际用来看效果。我自已感觉超线程有作用。K值高了,棋力强了就是证明。
理论性的东西,俺也不明白。
转载一些文字:
以下情况下,HT是完全没起作用:
多开很多应用程序(如WOW/word/Chrome/Mozilla Firefox/etc.);
任何不支持2线程以上的游戏;
以下情况下HT会发挥作用,但是仍然不会影响性能(性能影响基本可以忽略)
任何支持超过2线程的游戏;
以下情况下HT会发挥显著作用(HT的真正用法):
同步冗余校验计算(就是两个线程算同样的东西,然后比较结果来确定计算没有出错);
任何能把CPU彻底灌满100%的程序,比如Pr/AE/VMware/gcc/etc.;
下面是解释,可能会有错误,欢迎批评指导.主要理论依据为ark.intel.com和wiki的文献;
什么是HT?
HT是intel对自家处理器SMT技术的称呼;
什么是SMT?
SMT叫做"同步多线程",是指单个处理器可以同时处理多个线程(Thread)的技术,这项技术依赖的底层是Superscaler(超纯量/超标量(是"标量",不是"超标"));
什么是Superscaler(超标量) CPU?
简单地说,就是一个CPU核心内有多个更小的处理单元,比如3-4个整数ALU,1-2个FPU等等,如果这些单元可以同步工作,同时处理无关的指令(也就是CPU同时能够处理多个指令),那么这个处理器就叫超标量处理器;
反之,如果没有Superscaler的支持,一个CPU核心将会只有一个ALU和FPU--你放多了也没用,反正一次只能处理一条指令,一条指令是很难填满多个ALU和FPU的.
SMT做了什么?
SMT在Superscaler上的修改很小,Superscaler依赖编译器和CPU本身来判断指令的无关性,比如B=A+1;然后C=B+2;显然这是有顺序要求的,先算C=B+2结果就错了,所以这两条指令不能同时计算,这时候Superscaler的局限性就凸显了--Superscaler是全自动的,没有手动挡,我(程序员)想人工标记某两条语句没有关系,就没有办法了.
这时候SMT就诞生了,SMT让CPU对外宣称能同时处理两个线程,程序员只要把无关的指令分别放到两个线程里去,就能手动控制优化Superscaler的性能.但是要注意SMT对于CPU实际处理指令是没有影响的,两个线程进了CPU之后,还是利用superscaler来同步处理.通常,SMT的两个线程是没有优先级的,是完全平等的,没有那个线程是物理的,另一个是虚拟的这种说法.
我看晕了,有没有形象的解释?
我们把CPU看成一个小工厂,工厂里有拧螺丝的,电焊的,拼插元件的等等员工,这个工厂靠一个小窗口收集订单,有一个订单队列(但是外面看不见),有人按照订单要求分配工作,员工能同时为不同的订单工作,这就叫Superscaler,突然有一天,来了一个订单,要组装一个天线,然后又来了一个订单,要组装一台用那个天线的收音机,这时候这个工厂就有很多员工空闲了.
这时候工厂升级了一下,里面都不变,但是窗口改成了两个,只要提供订单的人稍微花点时间细分一下订单,把组装收音机中的电路板这个订单单独送到新窗口里去,里面的员工就知道,这个可以和天线同时生产了--这就是SMT
现在应该都能理解SMT的作用了,说明白就是让CPU全速运转,不浪费性能,下面是SMT带来的问题:
还是刚才那个工厂,生产天线和电路板都需要电焊,但是只有一个电焊工,这时候由于资源的原因,势必有一个订单要拖慢一点,等一下别人占用的资源,但是整体效率提高了.
对于游戏来说,这种等是不能接受的--等待就是卡顿!如果关键线程(比如WOW负载最重的主线程)被其他次要线程阻塞了,那就会造成性能的下降.但是从全局看,这种卡顿是性能提高的表现....游戏玩家估计不能理解"卡"居然等于性能提高这个情况....
所以解释在这里:
SMT用时间换取空间,让每个线程都稍微慢一点,但是提高效率,总吞吐量上升.这在需要很长时间连续计算的(比如视频转码/渲染这种一跑好几个小时的长期非实时计算)应用看来是没有负面影响的,他们不在乎每个指令是不是执行得快,而是希望天文数字级别的一大堆指令执行得快,可以早日完工.
现在我想大家应该已经很明白了,为什么游戏在HT上有时候性能会下降...而且,由于HT是提高CPU占用率的技术,如果这个CPU核心没达到100%的占用,HT是不会有任何效果的.对于4c8T来说,任何游戏都不可能让他4个核心8线程同时100%满载,就算CPU是瓶颈且游戏支持8线程,也是卡在某一个核心100%,其他的60%-80%左右的情况下,这时候只有一个核心的HT是发挥效力的(就是那个100%负载的核心,而且还不知道是正效果还是反效果,囧),剩下的3个核心的HT完全是摆设,没有起实际作用
再看一下为什么Cinebench渲染可以用好HT,4c8T跑Cinebench的时候4个CPU的8线程统统100%,这时候4个核心的HT都在优化superscaler并行,所以可以获得显著的性能提高(最高可达20%).而且由于Cinebench不在乎每个线程的工作速度,只看重整体速度,所以HT有可能降低单线程性能这件事在这里完全忽略了.
PS:额外结论:HT效率被利用的越高,单线程性能就越容易降低.
所以深度优化HT=完全抛弃单线程计算,只要一个程序还存在重载的主线程,他就不可能是HT优化的程序,为HT优化的程序的样子应该是这样的:
一个线程负责任务分配,动态的负载均衡,剩下的线程一视同仁,被灌入各种任务.显然,这种模型和现代游戏开发完全就不在一条路上.....所以游戏优化HT属于坑爹行为,不可能真的去优化HT的.