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

Cam*_*man 3 c c++ gcc compile-time

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

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

jod*_*dag 6

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

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;
}
Run Code Online (Sandbox Code Playgroud)

编辑

正如评论中指出的那样.如果目标机器与构建机器不同,那么您将需要grep -c ^processor /proc/cpuinfo用查询目标机器上的处理器数量的方法替换该方法.详细信息取决于您在构建期间对目标计算机的访问形式.

  • 请注意,这仅检索运行编译器的PC的核心数.编译的EXE仍然可以在具有不同核心数的其他PC上运行. (4认同)
  • 对于`PROC_COUNT'的方法,你可以用这里提出的任何方法替代:/sf/ask/453670381/所述的命令行 (2认同)