如何使用 C 在 Linux 中获取物理 CPU:s 的数量?

Posted

技术标签:

【中文标题】如何使用 C 在 Linux 中获取物理 CPU:s 的数量?【英文标题】:How to get number of physical CPU:s in Linux using C? 【发布时间】:2011-02-25 14:02:18 【问题描述】:

我知道sysconf(_SC_NPROCESSORS_ONLN) 会给我逻辑处理器的数量。但是如何获取物理处理器的数量呢?

【问题讨论】:

【参考方案1】:

@Havoc P: /proc/cpuinfo 中不显示离线 CPU。

CPU 拓扑由 /sys/devices/system/cpu/cpu*/topology/* 描述

【讨论】:

【参考方案2】:

您可以解析 /proc/cpuinfo 并计算不同的“物理 id:”行数。有点烦人,但我不知道是否有更好的选择。如果您使用 GLib 或其他支持正则表达式的库,那就更容易了。或者,如果您感觉很hacky,您可以popen() 一个命令行来执行此操作。命令行示例:http://www.brandonhutchinson.com/Understanding_proc_cpuinfo.html

【讨论】:

POSIX 正则表达式支持(BRE 和 ERE)是任何 POSIX 系统(包括 Linux)上标准库的一部分。不需要花言巧语。【参考方案3】:

我认为获取此信息的最佳方式是使用 hwloc:http://www.open-mpi.org/projects/hwloc/。

它们提供了一堆用户工具,可以让您了解系统的 cpu 拓扑,但它们还提供了一个库,您可以从 C:http://www.open-mpi.org/projects/hwloc/doc/v1.1.1/#interface 使用它

【讨论】:

【参考方案4】:

也许this answer 对类似问题有帮助。有一条关于代码不正确的评论,但这可能是一个很好的起点。

【讨论】:

以上是关于如何使用 C 在 Linux 中获取物理 CPU:s 的数量?的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 中使用 C/C++ 获取机器序列号和 CPU ID

如何使用 C++ 在 Linux 中获取总 CPU 使用率

Linux c 获取cpu使用率

如何查看linux的物理cpu信息

Linux上如何查看物理CPU个数,核数,线程数

linux -cpu