i7的超线程是什么意思?
CPU的硬件资源是动态分配的,或者说,看运气。
超线程这东西并不像想象的那么美好,单核超线程,和双核单线程的性能差距是很大的。
在实时性要求较高的操作系统里,首要的事情就是关闭超线程,因为超线程会让线程的运行时间变得不确定,据说高性能计算的也会关。
表面上看,是一个核跑着两个线程,实际上两个线程哪个线跑完是不确定的,同样的代码的两个线程,跑在一个核上,可能一个已经跑完了,另一个1/3都还没过。
操作系统调度的时候,会根据核的繁忙程度来分配线程。至于会不会让某一个核忙死另一个核在摸鱼,这种事情很难说,看操作系统的调度器如何设计了。理论上说稍微有点脑子的操作系统都会解决这个问题,比如线程按照奇偶数的方式分配核心,先分配1、3、5、7,跑满了以后才是2、4、6、8,这样就可以避免摸鱼的问题了。
反正我手头的WIN7能明显看出来这种现象(CPU为4核 i7-3770,开超线程):
------------------------
有人贴了AMD的架构,我放一张haswell的图:
可以看到一个核上有不止一个ALU,像x86的LEA指令实际上是有计算的功能的,有单独的ALU负责执行LEA这种指令,所以在任何时刻,一个核里的执行单元都是不可能完全占满的,占不满的情况下,就有能力让另外一个线程执行了,但如果两个线程都需要同样的执行单元(比如都需要进行浮点计算),那么有一个线程就需要等待,此时线程的实际执行时间就是不可控的。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有