我正在尝试收集系统信息,并在 Intel Xeon E5420 上注意到以下内容:
执行后CPUID(EAX=1)
,EDX[28] 被设置,表明支持超线程,尽管处理器在英特尔网站上被列为不支持超线程 ( ark.intel.com )
有人对此有解释吗?
我正在尝试收集系统信息,并在 Intel Xeon E5420 上注意到以下内容:
执行后CPUID(EAX=1)
,EDX[28] 被设置,表明支持超线程,尽管处理器在英特尔网站上被列为不支持超线程 ( ark.intel.com )
有人对此有解释吗?
英特尔谈话中有一个半官方的解释https://software.intel.com/en-us/articles/hyper-threading-technology-and-multi-core-processor-detection
基本上,在 Intel 在 Pentium 4 的最终版本中引入 SMT/超线程之后,他们创建了 Pentium D,它是多核被认为是超线程模型的演变,因为一个核心与另一个核心相比 SMT 单元具有更多的独立性。彼此,因此多核在相同线程数下的性能优于 SMT。因此,出于这个原因,他们使用相同的位来表示 SMT/超线程或多核,即多核被视为超线程的改进形式。您询问的 Intel Xeon E5420 是多核处理器,所以这就是设置该位的原因。
当然,一旦你可以在同一个包中同时拥有超线程和多核,有时需要将它们区分开来,例如因为你宁愿在一个未加载的核上而不是在另一个超线程半上安排一个新线程已经加载的核心。因此,为了描述组合的 SMT 和多核拓扑,最终引入了新的 cpuid 位(或者更确切地说是叶子)。这些用于查询处理器拓扑的最新 cpuid 功能是 EAX=0xB 叶。
顺便说一句,对于 2010 年及之后制造的处理器,您不应该使用旧英特尔演讲中给出的拓扑枚举算法,因为它会给出不正确/夸大的核心计数。请改用https://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/中提供的更新方法。唉,这个较新的页面更加枯燥,例如不回答您提出的问题,而旧的谈话确实......
这是根据英特尔开发人员手册对该位的定义:
Max APIC IDs 保留字段有效。HTT 的值为 0 表示包中只有一个逻辑处理器,并且软件应假定仅保留一个 APIC ID。HTT 的值为 1 表示 CPUID.1.EBX[23:16](此包中逻辑处理器的最大可寻址 ID 数)中的值对包有效。
在手册第 3A 卷的第 8 章中,它描述了如何正确检测硬件多线程。
这是一个链接:
http://download.intel.com/products/processor/manual/325462.pdf