超线程 - 当两个线程都准备好时,哪个线程运行

时间:2015-05-09 16:30:32

标签: hyperthreading

英特尔超线程的理念是(据我所知)一个核心以时间复用的方式用于两个线程。

硬件通过使状态相关资源加倍并分时其他资源来支持此功能。如果正在运行的线程停止(例如,因为它必须从RAM获取新数据),则另一个线程可以访问共享资源。结果是更好地利用共享资源。

因此,如果一个线程尚未就绪,则允许另一个线程运行。换句话说 - 当执行的线程停止时,可能发生线程切换。

我试图找出如果两条线程已经准备好很长时间会发生什么,但我还没能找到这些信息。

如果正在运行的线程没有停止会怎样?

正在运行的线程会在准备就绪后继续吗?

核心会在一段时间后切换到另一个线程吗?如果是这样 - 交换机的标准是什么?它是由HW还是SW控制?

1 个答案:

答案 0 :(得分:1)

超线程是同步多线程(SMT)。所以它不仅仅是在一些相对粗粒度(如档位)上来回切换,在Sandy Bridge和更新的情况下,提取器和解码器在线程之间交替。执行单元是竞争性共享的,因此即使两个线程都没有停止,它们仍然可以共同实现比单独运行时更好的利用率(但这不是典型的)。所以你发现的问题不适用,因为它首先不像那样。