什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]
Posted
技术标签:
【中文标题】什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]【英文标题】:What is crossplatform code snippet for getting totall cores amount in C++? [duplicate] 【发布时间】:2011-08-28 00:36:57 【问题描述】:可能重复:Programatically detect number of physical processors/cores or if hyper-threading is active on Windows, Mac and Linux
我想知道是否有任何跨平台(基于 std 或 boost 甚至 c)的方式来以跨平台方式获取内核总数? (适用于 linux Mac Os X 和 Windows)
【问题讨论】:
您是第一个投票结束您自己的问题的人吗? O_o 【参考方案1】:您可以使用 OpenMP 的 omp_get_max_threads ()
函数。对于 g++,使用 -fopenmp 指令启用 OpenMP。对于 MS Visual Studio,在项目属性 - 配置属性 - C/C++ - 语言中启用它。请注意,如果 omp_set_num_threads ()
已用于限制允许 OpenMP 并行区域使用的线程数(在程序启动时不是问题),则 omp_get_max_threads ()
可能返回少于实际硬件内核/线程数。您还应该注意,对于超线程 CPU,omp_get_max_threads ()
不会返回硬件 CPU 内核的数量,而是 CPU 支持的硬件线程数(并且超线程提供的额外线程并不能完全减少它)。
【讨论】:
【参考方案2】:哦,你可能得开始组装了……
http://code.google.com/p/geekinfo/source/browse/trunk/
或go boost:
boost::thread::hardware_concurrency(); // returns number of cores/HT/procs
【讨论】:
我不这么认为;从什么时候开始汇编语言跨平台? 此代码仅适用于win32(使用SetThreadAffinityMask
等)
@krax11erx,库本身是跨平台的,至少它声称是这样...code.google.com/p/geekinfo
@bdonlan - 其他系统在库的其他文件中
现在c++11中的boost方法是标准的:std::thread::hardware_concurrency()以上是关于什么是在 C++ 中获取总内核数量的跨平台代码片段? [复制]的主要内容,如果未能解决你的问题,请参考以下文章