9

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

4

5 回答 5

8

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

于 2010-04-11T23:59:40.143 回答
5

您可以阅读 NUMBER_OF_PROCESSORS 环境变量。

于 2010-04-12T00:00:28.510 回答
2

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

WMIC CPU Get /Format:List

您会找到类似“NumberOfCores”和“NumberOfLogicalProcessors”的条目。通常,逻辑处理器是通过线程实现的。因此,这种关系通常会像这样;

NumberOfLogicalProcessors = NumberOfCores * 每核线程数。

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

更多信息在这里

于 2017-01-19T06:09:44.957 回答
1

即使问题涉及 .NET 而你的问题涉及 C,基本的回答应该会有所帮助:

检测处理器数量

于 2010-04-12T00:04:33.920 回答
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

于 2020-02-01T23:20:11.820 回答