有没有一种方法可以以平台无关的方式确定一台机器有多少个C/ c++内核?如果不存在这样的东西,如何确定每个平台(Windows/*nix/Mac)?
当前回答
在linux上,据我所知,最好的编程方式是使用
sysconf(_SC_NPROCESSORS_CONF)
or
sysconf(_SC_NPROCESSORS_ONLN)
这些不是标准的,但是在我的Linux手册页中。
其他回答
你也可以在。net中使用WMI,但这样你就依赖于WMI服务的运行 等。有时它在本地工作,但当相同的代码在服务器上运行时就会失败。 我认为这是一个名称空间问题,与您正在读取其值的“名称”有关。
OpenMP在许多平台(包括Visual Studio 2005)上都得到了支持,并且它提供了一种支持
int omp_get_num_procs();
函数返回调用时可用的处理器/核数。
这个功能是c++ 11标准的一部分。
#include <thread>
unsigned int nthreads = std::thread::hardware_concurrency();
对于较老的编译器,可以使用Boost。线程库。
#include <boost/thread.hpp>
unsigned int nthreads = boost::thread::hardware_concurrency();
在任何一种情况下,hardware_concurrency()都会根据CPU内核和超线程单元的数量返回硬件能够并发执行的线程数。
如果具有汇编语言访问权限,则可以使用CPUID指令获取有关CPU的各种信息。它在操作系统之间是可移植的,尽管您需要使用特定于制造商的信息来确定如何找到内核的数量。这里有一个文档描述了如何在英特尔芯片上做到这一点,这个文档的第11页描述了AMD的规范。
在linux上,据我所知,最好的编程方式是使用
sysconf(_SC_NPROCESSORS_CONF)
or
sysconf(_SC_NPROCESSORS_ONLN)
这些不是标准的,但是在我的Linux手册页中。