Determine the number of cores at compile time in C/C++
有没有一种方法可以确定在GCC中Linux下C/C++中目标机在编译时有多少物理内核?
我知道在C++ 11或EDCOX1 1中有其他方法,比如EDCOX1 0,但是我很想知道在编译时是否有一种方法来获取这些信息。
- 如果您在编译时确定这一点,您的程序将变得不可移植。
- 您可以使用cmake填写一个模板化的头文件,该头文件包含在定义该文件的程序中:cmake.org/cmake/help/v3.0/module/processorcount.html和cmake.org/cmake/help/v3.0/command/configure_file.html该文件在任何平台(cmake支持)上都有效。
- 请注意,这只检索运行编译器的PC的核心计数。编译后的exe仍可以在具有不同核心计数的其他PC上运行。
- -DNCARS=8。您如何期望编译器自己知道这一点?
- @程序源Henri不一定会变得不可移植(例如,他可以简单地使用宏)。程序本身不会比没有它(elf/pe可执行文件)更不可移植。
您可以在构建过程中查询信息,并将其作为预处理器定义传递到程序中。
例子
g++ main.cpp -D PROC_COUNT=$(grep -c ^processor /proc/cpuinfo)
其中main.cpp是
1 2 3 4 5
| #include <iostream>
int main() {
std::cout << PROC_COUNT << std::endl;
return 0;
} |
编辑
正如评论中指出的。如果目标机器与构建机器不同,那么您需要用查询目标机器上处理器数量的东西替换方法grep -c ^processor /proc/cpuinfo。详细信息将取决于您在构建期间对目标计算机的访问方式。
- 对于PROC_COUNT的方法,您可以在这里提出的任何方法中进行替换:stackoverflow.com/questions/6481005/&hellip;
- 请注意,这只检索运行编译器的PC的核心计数。编译后的exe仍可以在具有不同核心计数的其他PC上运行。
- 那将是构建机器,而不是目标机器,但谁在乎…