如何使用 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 的数量?的主要内容,如果未能解决你的问题,请参考以下文章