TaskManager,HyperThreading:哪些CPU是真实的,哪些是HT?


4

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

当我设置Process affinity时,我将CPU 0添加到CPU 7中。

我怎么知道哪些CPU是真正的核心,哪些是HT核心?

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

真的吗?


欢迎来到StackAthletes的行列!
丹尼斯威廉姆森2010年

Answers:


4

英特尔最初希望BIOS实施者在逻辑(HT)CPU之前首先枚举所有物理CPU。这样做的原因是,如果操作系统支持的CPU数量少于系统中可用的CPU数量,那么在看到逻辑内核之前,它会首先看到物理内核。现在这不是问题,但是当有可能购买双核Pentium 4 w / HT,将它放入Windows 2000 Pro系统,并且只看到2个CPU时,无论如何,这都是一个真正的问题。我怀疑实施会偏离那个。因此,在您的情况下,最有可能的是0-3 CPU是物理内核,而CPU 4-7是HT内核。

如果你自己的多线程软件出现问题,因为HT不能很好地平衡,那么你可能只想将线程数限制在物理内核上,或者在你的算法/数据结构上工作更多HT-友好。 GetLogicalProcessorInformation是您需要查看的API调用,以确定物理与逻辑核心数。 此页面包含用于确定物理CPU数量的示例代码。

使你的代码更加HT友好是一个完全不同的蜡球,并不适合SuperUser。:-)


1
看起来SIV可以向您展示Windows如何枚举您的CPU。请参阅此屏幕截图以获取示例。
afrazier 2010年

0

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

此外,如果我正确理解HT,它可以通过使用真实核心的免费处理能力来工作。如果HT核心正在执行要求严格的过程而实际核心没有执行,则处理能力将被HT用尽。尽管如此,这可能会导致出现问题,即可以将最苛刻的流程提供给真正的核心及其HT核心,并让一些真正的核心运行后台任务。


实际上,在大多数情况下,它应该是透明的,并由Windows Scheduler处理。但是,如果一个2线程应用程序在Core上运行并且它是HT Core,那么这可能是个问题。特别是手动设置亲和力时。SQL Server是一个可以与HT有一些怪癖的应用程序,但我有一些其他的(主要是我自己写的一些:/)不能很好地平衡。
Michael Stum

@Michael Stum我一直在想这个,我记得在HT是新手的时候,有一款名为Aquanox 2的游戏。它可以选择启用或禁用HT支持。我想知道他们是怎么做到的......
AndrejaKo 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.