什么是在 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++ 中获取总内核数量的跨平台代码片段? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Posix 系统中的总可用磁盘空间?

如何获取指针数组中的元素数量?

如何在 C# 中获取 CPU 逻辑内核/线程的数量?

C++两种计时方式(windows平台,毫秒级&微秒级)

这些 C++ 代码片段有啥作用?

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?