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