为什么不支持超线程技术的处理器会被报告为支持该技术?

9

我正在收集系统信息,发现在Intel Xeon E5420上执行CPUID(EAX=1)后,EDX [28]被设置为支持超线程,尽管该处理器在Intel网站上列出为不支持超线程 (ark.intel.com)

有人能解释一下这是什么原因吗?


它的“超线程”只是仅有一个线程的特殊情况。 - Flexo
"使用AMD芯片组,所有多核AMD CPU都会设置特征信息位的第28位,以指示芯片具有多个内核。即使AMD不支持超线程,这也是事实。" 但这只适用于AMD芯片。 - Mysticial
MSDN上的图表还将第28位标记为“多线程”... - Mysticial
2个回答

4
在英特尔的一个讲座中有半官方的解释,链接在这里:https://software.intel.com/en-us/articles/hyper-threading-technology-and-multi-core-processor-detection。基本上,在英特尔在 Pentium 4 中引入 SMT/超线程技术后,他们创建了 Pentium D,而 Pentium D 是多核心处理器,被认为是超线程模型的一种演进,因为一个核心与另一个核心相比具有更多的独立性,而 SMT 单元之间的相对独立性较低,因此在相同的线程计数下,多核心性能更好。因此,他们使用同一位来指示 SMT/超线程或多核心,即多核心被视为超线程的改进形式。你问的英特尔 Xeon E5420 是一款多核心处理器,所以该位被设置了。
当然,一旦你可以在同一封装中同时拥有超线程和多核心,有时需要区分它们,例如因为你更希望将新线程调度到未加载的核心上,而不是已经加载的核心上的另一半超线程。因此,为了描述组合的 SMT 和多核心拓扑,最终推出了新的 cpuid 位(或 rather leaves)。这些较新的 cpuid 功能中最近用于查询处理器拓扑的是 EAX=0xB leaf。
顺便说一句,不应该使用那篇旧的英特尔讲座中提供的拓扑枚举算法来处理2010年及以后制造的处理器,因为它会给出错误/夸大的核心数。相反,应该使用在这里给出的更新方法:https://software.intel.com/en-us/articles/intel-64-architecture-processor-topology-enumeration/。遗憾的是,这个较新的页面更加枯燥,比如它没有回答你提出的问题,而旧的讲座则有...

3
以下是根据英特尔开发者手册提供的位定义:

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


是的,这似乎表明随着时间的推移,HTT 位已经开始表示每个处理器中不止一个逻辑线程,无论是由于 HTT 还是多个物理核心。 - andrewmu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接