TaskManager、超线程:哪些 CPU 是真实的,哪些是 HT?

Mic*_*tum 5 windows-7 intel-core-i7

当我打开任务管理器时,我在 CPU 图表中看到 8 个 CPU,因为我有一个具有 4 个核心 + 超线程的 Core i7(在 Win7 x64 上运行)。

当我设置进程关联时,我会列出 CPU 0 到 CPU 7。

我如何知道哪些 CPU 是真正的核心,哪些是 HT 核心?

我听说 0/2/4/6 是真正的核心,因此第一、第三、第五和第七个 CPU 图是真正的核心。

真的吗?

afr*_*ier 5

Intel 最初希望 BIOS 实施者先枚举所有物理 CPU,然后再枚举逻辑 (HT) CPU。原因是,如果操作系统支持的 CPU 数量少于系统中可用的 CPU 数量,它会先看到物理核心,然后再看到逻辑核心。现在这已经不是问题了,但在当时可以购买双核 Pentium 4 w/ HT,将其放入 Windows 2000 Pro 系统中,无论如何都只能看到 2 个 CPU,这是一个真正的问题。我怀疑实施会偏离这一点。因此,在您的情况下,CPU 0-3 很可能是物理核心,CPU 4-7 是 HT 核心。

如果您的多线程软件因超线程而无法很好地平衡,那么您可能需要将线程数限制为仅物理核心,或者致力于您的算法/数据结构,使其更加超线程 -友好的。 GetLogicalProcessorInformation是您需要查看的 API 调用,以确定物理核心数与逻辑核心数。 此页面包含用于确定物理 CPU 数量的示例代码。

让你的代码对 HT 更友好是完全不同的蜡球,并不真正适合超级用户。:-)


And*_*aKo 0

嗯,HT 核心的目的是让它们在系统中看起来就像是真正的处理器一样。我不是 100% 确定,但我认为没有真正的方法可以知道哪些是真实的,哪些是 HT。

另外,如果我正确理解 HT,它是通过使用真实核心的空闲处理能力来工作的。如果 HT 核心正在执行要求较高的进程,而真正的核心没有执行,则处理能力将被 HT 耗尽。不过,这可能会导致问题,即最苛刻的进程可能会分配给真实核心及其 HT 核心,并让一些真实核心运行后台任务。