获取可用的处理器(CPU)核数【转】

linux下获取cpu核数,sysconf(_SC_NPROCESSORS_CONF),,,
from:红黑联盟,https://www.2cto.com/kf/201210/164480.html
c编程技巧——获取可用的处理器(CPU)核数
2012-10-30 08:58:47      0个评论      
收藏   我要投稿

需求
我们在编程时,尤其是在涉及到系统环境的程序开发中,可能会需要动态的获得当前机器中可用的CPU核数。例如,当我们需要做并行计算时,我们可能会根据CPU核数来决定并行度,因此我们需要在C程序中获得当前机器中可用的CPU核数。

方法
为了跨平台的需要,我们需要同时考虑在不同平台下获取机器处理器核数的方法。在这里我们考虑Linux与Windows两个平台,不同的平台有不同的方法来获取处理器核数。

在Windows平台下,我们可以使用GetSystemInfo( )这个函数来获取当前系统的一些软硬件信息。其中有一项即是当前机器中处理器的核数。通过如下语句即可获得所要的信息:
SYSTEM_INFO info;
GetSystemInfo(&info);
return info.dwNumberOfProcessors;

而在Linux平台下,我们可以使用sysconf( )或者get_nprocs( )来获取处理器核数。下面分别介绍:
sysconf( )有unistd.h提供,要使用该函数需要#include<unistd.h>,其参数可以是_SC_NPROCESSORS_CONF,也可以是_SC_NPROCESSORS_ONLN。sysconf(_SC_NPROCESSORS_CONF)返回系统可以使用的核数,但是其值会包括系统中禁用的核的数目,因此该值并不代表当前系统中可用的核数。而sysconf(_SC_NPROCESSORS_ONLN)的返回值真正的代表了系统当前可用的核数。

GNU C库提供了另外一种获取机器可用核数的方法。函数int
 get_nprocs_conf (void),int get_nprocs (void)在 sys/sysinfo.h中定义,这两个函数可用获取机器的核数。其中get_nprocs_conf (void)的返回值与sysconf(_SC_NPROCESSORS_CONF)类似,并不真正表名当前可用核数;而get_nprocs
 (void)的返回值与sysconf(_SC_NPROCESSORS_ONLN)类似,真正的反映了当前可用核数。

跨平台函数
跨平台的获取系统当前可用核数的函数如下所示:

[cpp]
Int_t get_CPU_core_num( ) 

#if defined(WIN32) 
    SYSTEM_INFO info; 
    GetSystemInfo(&info); 
    return info.dwNumberOfProcessors; 
#elif defined(LINUX) || defined(SOLARIS) || defined(AIX) 
    return get_nprocs();   //GNU fuction 
#else 
#error  不支持的操作系统 
#endif 
}

时间: 2024-11-06 17:42:35

获取可用的处理器(CPU)核数【转】的相关文章

如何获取 Android 设备的CPU核数、时钟频率以及内存大小

因项目需要,分析了一下 Facebook 的开源项目 - Device Year Class. Device Year Class 的主要功能是根据 CPU核数.时钟频率 以及 内存大小 对设备进行分级.代码很简单,只包含两个类: DeviceInfo -> 获取设备参数, YearClass -> 根据参数进行分级. 下表是 Facebook 公司提供的分级标准,其中 Year 栏表示分级结果. Year Cores Clock RAM 2008 1 528MHz 192MB 2009 n/

获取当前IOS设备的CPU型号,CPU核数,GPU,GPU核数,屏幕分辨率,屏幕尺寸,PPI等信息

今天和大家一起分享下如何获取当前IOS设备的CPU型号,CPU核数,GPU,GPU核数,屏幕分辨率,屏幕尺寸,PPI等信息.相信各位发现通过苹果官方开放的API想要获取当前设备以上的一些信息似乎做不到.如今苹果的硬件更新速度相当的快,还要在网上发现有有心人收集了所有已发布苹果设备的相关设备信息,且不定期回去更新.详情请见:Blake's iOS Device Specifications Grid http://www.blakespot.com/ios_device_specification

C++编写代码查看CPU个数,单个CPU核数,单个CPU线程数

CPU个数:这里指物理上的CPU个数,即在dos界面中,输入systeminfo时,显示信息中的处理器个数 CPU核数:这里指CPU核心数,即在dos界面中,输入wmic后,在键入CPU get * 时所显示的NumberOfCores CPU线程数:这里指在dos界面中,输入wmic后,在键入CPU get * 时所显示的NumberOfLogicalProcessors 通常情况下,我们的CPU说的是几核,如双核,四核等,指的就是核心,而现在有种技术是超线程技术,此技术即为一个核心,两个线程

Linux下区分物理CPU、逻辑CPU和CPU核数

判断依据: 一个物理封装的CPU(通过physical id区分判断)可以有多个核(通过core id区分判断). 而每个核可以有多个逻辑cpu(通过processor区分判断). 一个核通过多个逻辑cpu实现这个核自己的超线程技术. cpu cores 条目包含位于相同物理封装中的内核数量. siblings 条目列出了位于相同物理封装中的逻辑处理器的数量. // proc文件用processor做索引,是因为processor是拥有其下所列所有信息的最小单位.方便查看细化信息. //例如如果

[转]物理CPU、CPU核数、逻辑CPU、超线程

转自:http://wulc.me/2016/01/06/物理CPU.CPU核数.逻辑CPU.超线程/ 基本概念 物理CPU: 物理CPU就是插在主机上的真实的CPU硬件,在Linux下可以数不同的physical id 来确认主机的物理CPU个数. 核心数: 物理CPU下一层概念就是核心数,我们常常会听说多核处理器,其中的核指的就是核心数.在Linux下可以通过cores来确认主机的物理CPU的核心数. 逻辑CPU: 核心数下一层的概念是逻辑CPU,逻辑CPU跟超线程技术有联系,假如物理CPU

使用Python自动获取可用代理列表

今天闲来无事,随便写的一个从代理发布网站上提取可用代理列表的脚本.运行后,可以获取 http://cn-proxy.com/ 发布的可用代理ip和端口的列表. 运行效果如下: 源代码如下,请指教: # -*- coding: utf-8 -*- # Python:      2.7.8 # Platform:    Windows # Author:      wucl # Program:     从代理网站获取可用代理 # History:     2015.6.11 import urll

如何获取多核、多cpu系统中指定cpu的序列号

如何获取多核.多cpu系统中指定cpu的序列号作者:SkyJacker(转贴请保持完整并注明作者和出处)http://www.cnpack.orgCnPack IV  QQ Group: 1309702007-01-23 感谢:Passion,Bahamut,早安,空气,SkyJacker...没有Bahamut的奇思妙点,就没有这片文章. 在多cpu.多核中,会随机的获得不同的序列号.这就为我们根据cpu序列号来制作注册机带来了很大的麻烦.Windows 2000/xp允许设置进程和线程的亲缘

vc 获取 硬盘序列号 和 cpu

vc 获取 硬盘序列号 和 cpu 唯一iD的方法?如题---------网上找来很多资料 也没找到, 要支持xp win7 32/64 系统下都能获取 硬盘序列号 和cpu ID 哪位朋友帮帮忙:------解决方案--------------------不是很确定 没有测试64位的 http://blog.sina.com.cn/s/blog_612b382d0100efdt.html------解决方案--------------------CString cpu_id(){ int s1

CentOS-6.x系列查看cpu核数

使用CentOS7.x使用习惯了后用top命令,然后按1就可以查看相关的cpu核心数等相关信息 相关概念: 物理CPU:实际Server中插槽上的CPU个数. 物理cpu数量:可以数不重复的 physical id 有几个. 逻辑CPU: Linux用户对 /proc/cpuinfo 这个文件肯定不陌生. 它是用来存储cpu硬件信息的信息内容分别列出了processor 0 – n 的规格 这里需要注意,如果你认为n就是真实的cpus数的话, 就大错特错了 一般情况,我们认为一颗cpu可以有多核