如何获取Win32中的内核数量?

时间:2010-04-11 23:57:38

标签: c windows multithreading winapi cpu-cores

我在Windows上编写一个程序,需要运行与可用内核一样多的线程。但我不知道如何获得核心数量。有什么想法吗?

5 个答案:

答案 0 :(得分:6)

您可以调用GetSystemInfo WinAPI函数;它返回一个SYSTEM_INFO结构,它具有处理器数(这是具有多个核心CPU的系统上的核心数)。

答案 1 :(得分:5)

您可以阅读NUMBER_OF_PROCESSORS个环境变量。

答案 2 :(得分:1)

即使这个问题涉及.NET和你的C,基本响应应该有所帮助:

Detecting the number of processors

答案 3 :(得分:1)

正如@ Changming-Sun在​​上面的评论中提到的,GetSysInfo返回逻辑处理器的数量,该数量并不总是与处理器核心的数量相同。在支持超线程的计算机(包括大多数现代的Intel CPU)上,一个内核上可以运行多个线程(从技术上讲,一个线程将在同一内核上加载多个线程上下文)。要获得处理器核心数量,需要调用GetLogicalProcessorInformation并进行一些编码工作。基本上,您将获得SYSTEM_LOGICAL_PROCESSOR_INFORMATION条目的列表,并且必须计算设置了RelationProcessorCore的条目的数量。 Microsoft提供的GetLogicalProcessorInformation文档中如何进行编码的一个很好的示例: https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getlogicalprocessorinformation

答案 4 :(得分:0)

键入" cmd"在Windows启动并打开" cmd.exe"。 现在输入以下命令:

WMIC CPU Get /Format:List

你会发现像" NumberOfCores"和" NumberOfLogicalProcessors"。通常,逻辑处理器通过线程实现。因此,这种关系通常会像;

NumberOfLogicalProcessors = NumberOfCores *每个核心的线程数。

由于每个核心服务于一个处理单元,因此通过线程化,逻辑处理单元在现实空间中实现。

更多信息here