当我打开任务管理器时,我看到CPU图中有8个CPU,因为我有一个带有4个核心+超线程的Core i7(在Win7 x64上运行)。
当我设置Process affinity时,我将CPU 0添加到CPU 7中。
我怎么知道哪些CPU是真正的核心,哪些是HT核心?
我听说0/2/4/6是真正的核心,因此第一,第三,第五和第七CPU图是真实的。
真的吗?
当我打开任务管理器时,我看到CPU图中有8个CPU,因为我有一个带有4个核心+超线程的Core i7(在Win7 x64上运行)。
当我设置Process affinity时,我将CPU 0添加到CPU 7中。
我怎么知道哪些CPU是真正的核心,哪些是HT核心?
我听说0/2/4/6是真正的核心,因此第一,第三,第五和第七CPU图是真实的。
真的吗?
Answers:
英特尔最初希望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。:-)
好吧,HT核心的要点是让它们在系统中看起来就好像它们是真正的处理器一样。我不是100%肯定,但我认为没有真正的方法可以知道哪些是真实的,哪些是HT。
此外,如果我正确理解HT,它可以通过使用真实核心的免费处理能力来工作。如果HT核心正在执行要求严格的过程而实际核心没有执行,则处理能力将被HT用尽。尽管如此,这可能会导致出现问题,即可以将最苛刻的流程提供给真正的核心及其HT核心,并让一些真正的核心运行后台任务。