有没有办法确定目标机器在GCC下的C / C ++编译时有多少个物理内核?
我知道其他方法,例如C ++ 11中的td::thread::hardware_concurrency()
或sysconf(_SC_NPROCESSORS_ONLN)
,但我很想知道在编译时是否真的有办法获取这些信息。
答案 0 :(得分: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;
}
修改强>
正如评论中指出的那样。如果目标计算机与构建计算机不同,那么您需要使用查询目标计算机上处理器数量的方法替换方法grep -c ^processor /proc/cpuinfo
。详细信息取决于构建期间对目标计算机的访问形式。