在C/C++编译时确定核心数

问题描述 投票:0回答:1

在 GCC 下的 Linux 中的 C/C++ 中,有没有办法确定目标机器在编译时有多少个物理内核?

我知道其他方法,例如 C++11 中的

std::thread::hardware_concurrency()
sysconf(_SC_NPROCESSORS_ONLN)
,但我很好奇是否确实有办法在编译时获取此信息。

c++ c gcc compile-time
1个回答
7
投票

您可以在构建过程中查询信息并将其作为预处理器定义传递到程序中。

示例

g++ main.cpp -D PROC_COUNT=$(grep -c ^processor /proc/cpuinfo)

哪里

main.cpp

#include <iostream>
int main() {
    std::cout << PROC_COUNT << std::endl;
    return 0;
}

编辑

正如评论中所指出的。如果目标机器与构建机器不同,那么您需要将方法

grep -c ^processor /proc/cpuinfo
替换为查询目标机器上处理器数量的方法。详细信息取决于您在构建过程中对目标计算机的访问形式。

© www.soinside.com 2019 - 2024. All rights reserved.