超线程计算负载

超线程计算负载

我有一台具有超线程的双核 i5。由于超线程允许其他进程使用未使用的 CPU 时间,为什么这会让它看起来像 4 个逻辑处理器(每个实际核心 2 个)。这与乱序执行有何不同?

假设 core0/core1 是一个核心,core2/core3 是另一个核心。如果 core0 和 core2 都达到 100%,我的 CPU 负载是 100% 还是只有 50%?如果所有核心都达到 100%,那意味着什么?另外,为什么进程往往在 core0 和 core2 上执行,而不是在 core1 和 core3 上执行?

在此处输入图片描述

答案1

HT 类似于乱序执行,不同之处在于它可以调度完全不同的线程,而不仅仅是重新排序指令。有时 CPU 处于空闲状态,因为它已经重新排序了所有可以执行的指令,并且仍在等待数据或其他东西。HT 允许另一个线程在第一个线程等待时准备运行。

您的系统中仍然只有两个物理核心。如果 core0 和 core2 都处于 100%,则您的处理器处于 100%。如果逻辑核心(core0、core1、core2 和 core3)都处于 100%,则您的 CPU 实际上以总运行量的 115% 左右运行,而无需超线程。

您看到交替使用核心的原因是因为 core0 和 core1 共享同一个物理核心,而 core2 和 core3 共享同一个物理核心。如果操作系统调度 core0 和 core1 而不是 core0 和 core2,那么一半的处理器大部分时间都会处于空闲状态。

答案2

由于超线程允许其他进程使用未使用的 CPU 时间,为什么这会使其看起来像 4 个逻辑处理器(每个实际核心 2 个)。这与乱序执行有何不同?

这并不完全正确。超线程只是在每个核心上增加了一个执行单元(硬件),但共享核心的其余部分,这就是为什么在某些情况下超线程实际上会降低性能。此外,超线程确实不是明确“允许其他进程使用未使用的 CPU 时间”。 由您的操作系统的进程调度程序处理。

但是,超线程确实会向操作系统公开另一个“核心”,允许它安排更多程序同时运行。除非这会耗尽超线程核心中的共享硬件(例如,如果两个线程在超线程核心中的不同执行单元上运行,而这些执行单元大量使用缓存,而缓存由 HT 核心中的两个线程共享)。有关超线程的技术详细信息,请参阅英特尔酷睿处理器数据表,第 1 卷

假设 core0/core1 是一个核心,core2/core3 是另一个核心。如果 core0 和 core2 都处于 100%,我的 CPU 负载是 100% 还是只有 50%?另外,为什么进程往往在 core0 和 core2 上执行,而不是在 core1 和 core3 上执行?

这取决于处理器的哪些部分承受压力(超线程带来的性能提升与应用程序密切相关,同样参见上文)。从技术上讲,您可能只使用了核心 0 中 50% 的执行单元,但核心中其余硬件的负载可能达到 100%(例如,如果程序大量使用缓存)。

有关详细信息,请参阅问题Windows 处理器亲和性如何与超线程 CPU 协同工作?

相关内容