我正在用 C 语言在 Windows 上编写一个程序,该程序需要运行与可用内核一样多的线程。但我不知道如何获得核心数。有任何想法吗?
5 回答
可以调用GetSystemInfo
WinAPI函数;它返回一个SYSTEM_INFO
结构,该结构具有处理器数量(这是具有多个核心 CPU 的系统上的核心数量)。
您可以阅读 NUMBER_OF_PROCESSORS 环境变量。
在 Windows 启动时键入“cmd”并打开“cmd.exe”。现在输入以下命令:
WMIC CPU Get /Format:List
您会找到类似“NumberOfCores”和“NumberOfLogicalProcessors”的条目。通常,逻辑处理器是通过线程实现的。因此,这种关系通常会像这样;
NumberOfLogicalProcessors = NumberOfCores * 每核线程数。
由于每个核心都服务于一个处理单元,因此通过线程,逻辑处理单元是在现实空间中实现的。
更多信息在这里。
即使问题涉及 .NET 而你的问题涉及 C,基本的回答应该会有所帮助:
正如@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