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

Determine the number of cores at compile time in C/C++

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

我知道其他方法,例如 C++11 中的 td::thread::hardware_concurrency()sysconf(_SC_NPROCESSORS_ONLN),但我很想知道是否真的有办法在编译时获取此信息。

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

例子

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 替换为查询目标机器上处理器数量的方法。详细信息将取决于您在构建期间对目标机器的访问形式。