GetSystemInfo(在Windows上)是否总是返回逻辑处理器的数量?

时间:2010-04-02 10:40:02

标签: c++ windows winapi hyperthreading

阅读本文,特别是阅读Microsoft文档,它看起来应该返回PHYSICAL处理器的数量,并且您应该使用GetLogicalProcessorInformation来确定您拥有多少个LOGICAL处理器。

以下是我在SYSTEM_INFO结构中找到的文档:http://msdn.microsoft.com/en-us/library/ms724958(v=VS.85).aspx 这里是关于GetLogicalProcessorInformation的文档:(通过垃圾邮件过滤器添加的空格) http:// msdn.microsoft.com/ en-us/ library/ ms683194.aspx

进一步阅读,在我在这个主题上发现的大多数讨论中,开发人员说GetSystemInfo(和SYSTEM_INFO结构)报告了LOGICAL处理器的数量。

当我再次搜索时,我发现MS确实发布了一些关于此信息(以及一个热修复)的信息,这里(通过垃圾邮件过滤器添加了空格): http:// support. microsoft.com/ kb/936235

读到它,听起来像在Xp上,预服务包3,GetSystemInfo报告SYSTEM_INFO结构中的LOGICAL处理器的数量。它还告诉我,在Windows Vista和Windows 7上,GetSystemInfo应该报告PHYSICAL处理器的数量(与Windows XP pre-service Pack 3不同)。

有谁知道它实际上做了什么? GetSystemInfo是否真的以不同方式报告物理处理器的数量(在同一台计算机上),具体取决于它运行的操作系统?

1 个答案:

答案 0 :(得分:4)

  

读到它,听起来像在Xp上,预服务包3,GetSystemInfo报告SYSTEM_INFO结构中的LOGICAL处理器的数量。它还告诉我,在Windows Vista和Windows 7上,GetSystemInfo应该报告PHYSICAL处理器的数量(与Windows XP pre-service Pack 3不同)。

这是正确的。 Windows XP pre SP2)在逻辑和物理处理器之间没有任何区别。 (毕竟,当Windows XP发布时,逻辑处理器不存在)因此,当函数返回操作系统认为是“物理处理器”时,SP2之前没有区别。

我相信保持兼容性,XP SP2 +继续为该特定功能报告逻辑处理器,因为这是应用程序期望它为XP机器做的事情。它会更快更容易地问:“我在XP上吗?”而不是问“我在XP SP3上吗?”。

为什么SP2和SP3之间存在差异?尽管处理SP2中物理和逻辑处理器之间的差异,但该更改仅影响平台SKU的计费方式。基本上,XP系统中最多可以有32个逻辑处理器,但SP2后最多只能有2个物理处理器。在SP2之前,您只能使用2个逻辑处理器。但是,在SP3发布之前,操作系统没有在API中公开此功能。

长话短说,如果你想获得逻辑处理器,预备SP3,只需获得物理处理器 - 操作系统不知道有什么区别。发布SP3后,请致电GetLogicalProcessorInformation。如果你想获得物理处理器,那么SP3之前你想要的是不可能的(编辑:至少使用win32 apis)。发布SP3当然可以致电GetLogicalProcessorInformation