超线程 - 当两个线程都准备好时运行哪个线程
hyperthreading - which thread runs when both threads are ready
英特尔超线程背后的想法是(据我所知)一个内核以时间复用的方式用于两个线程。
HW 通过将与状态相关的资源加倍并分时使用其他资源来支持这一点。如果 运行ning 线程停止(例如,因为它必须从 RAM 中获取新数据),另一个线程可以访问共享资源。结果是更好地利用了共享资源。
因此,如果一个线程未就绪,则允许另一个线程 运行。换句话说 - 当正在执行的线程停止时,可能会发生线程切换。
我试图找出如果两个线程都准备好很长时间会发生什么,但我一直无法找到信息。
如果 运行ning 线程不停止会怎样?
运行ning 线程是否会在准备就绪后继续?
一段时间后核心会切换到另一个线程吗?如果是这样 - 转换的标准是什么?是硬件控制还是软件控制?
超线程是同步多线程 (SMT)。所以它不只是在一些相对粗粒度的尺度上来回切换(比如停顿),在 Sandy Bridge 和更新的情况下,获取器和解码器在线程之间交替。执行单元是竞争性共享的,所以即使两个线程都没有停止,它们仍然可以一起实现比单独 运行 更好的利用率(但这并不典型)。所以你发现的问题不适用,因为它首先不是那样工作的。
英特尔超线程背后的想法是(据我所知)一个内核以时间复用的方式用于两个线程。
HW 通过将与状态相关的资源加倍并分时使用其他资源来支持这一点。如果 运行ning 线程停止(例如,因为它必须从 RAM 中获取新数据),另一个线程可以访问共享资源。结果是更好地利用了共享资源。
因此,如果一个线程未就绪,则允许另一个线程 运行。换句话说 - 当正在执行的线程停止时,可能会发生线程切换。
我试图找出如果两个线程都准备好很长时间会发生什么,但我一直无法找到信息。
如果 运行ning 线程不停止会怎样?
运行ning 线程是否会在准备就绪后继续?
一段时间后核心会切换到另一个线程吗?如果是这样 - 转换的标准是什么?是硬件控制还是软件控制?
超线程是同步多线程 (SMT)。所以它不只是在一些相对粗粒度的尺度上来回切换(比如停顿),在 Sandy Bridge 和更新的情况下,获取器和解码器在线程之间交替。执行单元是竞争性共享的,所以即使两个线程都没有停止,它们仍然可以一起实现比单独 运行 更好的利用率(但这并不典型)。所以你发现的问题不适用,因为它首先不是那样工作的。