c编程技巧——获取可用的处理器(CPU)核数
- c编程技巧——获取可用的处理器(CPU)核数
需求
我们在编程时,尤其是在涉及到系统环境的程序开发中,可能会需要动态的获得当前机器中可用的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
}
c编程技巧——获取可用的处理器(CPU)核数相关推荐
- 编程linux 获取cpu核数,Linux命令查看以及编程获取CPU核数
㈠ 概念 ① 物理CPU 实际Server中插槽上的CPU个数 物理cpu数量,可以数不重复的 physical id 有几个 ② 逻辑CPU Linux用户对 /proc/cpuinfo 这个文件肯 ...
- Linux通过编程获取CPU核数
sysconf( )有unistd.h提供,要使用该函数需要#include<unistd.h>, 其参数可以是 _SC_NPROCESSORS_CONF,也可以是 _SC_NPROCES ...
- Matlab编程技巧:通过脚本获取/修改Simulink信号线参数
上一篇博客<Matlab编程技巧:批量获取/修改Simulink模块参数>中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数.具体方法可以参考https://blog ...
- 5 获取当前访问的控制名称_LabVIEW编程技巧:网络通信中如何获取计算机名称、IP地址等信息...
问题引出 在网络通讯编程中,经常需要获取当前主机的名称.IP地址等信息,在LabVIEW中如何获取这些信息呢? 下面以本机为例进行说明,先看一下本机的信息.在Windows系统中打开控制台程序,输入& ...
- 【Java API】Java Runtime.availableProcessors()获取处理器cpu数量
描述 java.lang.Runtime.availableProcessors() 方法返回到Java虚拟机的可用的处理器数量.此值可能会改变在一个特定的虚拟机调用.应用程序可用处理器的数量是敏感的 ...
- 单片机应用编程技巧100问
单片机应用编程技巧100问 单片机应用编程技巧100问 1.C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点 ...
- 单片机应用编程技巧---MCU专家答网友问
单片机应用编程技巧---MCU专家答网友问 单片机应用编程技巧 Holtek MCU专家--邓宏杰答网友问 (转自电子工程专辑网站) 1. C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇 ...
- 单片机应用编程技巧问答
C语言和汇编语言在开发单片机时各有哪些优缺点? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言.其主要优点是占用资源少.程序执行效率高.但是不同的CPU,其汇编语言可 ...
- VC++ 常用编程技巧总结
VC++6.0的使用以及编程技巧整理 1.MDI子窗口一启动就最大化 BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs) ...
- 很全的linux网络编程技巧
注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 本文转自:https://www.cnblogs.com/jfyl1573/p/6476607.html 看到好文章想留做自己学习,如有侵权, ...
最新文章
- java 上传的图片大小为0_JAVA技术:上传图片的缩放处理
- 大家都来说说为什么要学习jQuery Mboile?
- ontological 词根词缀_英语中最常见的词缀(一)之 re
- python有多少关键字_Python挖词脚本,挖出几十万关键词不是梦带搜索量
- my.ini修改后服务无法启动_VisualSVN Server 自助修改密码页面
- Oracle相关报错
- 知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?
- 具有InlfuxDB的Spring Boot和Micrometer第1部分:基础项目
- 花了一年时间开发出来的基于DXF文件的加工路径自动生成软件
- python解决数据不均衡,上采样方法解决
- pythonurllib的使用_python re和urllib的使用问题。
- 第六章 线程的基础知识
- 数据库系统概论第五版课后习题——第一章 绪论
- 数据库逻辑结构设计 → E-R图
- 【Matlab】图像裁剪函数imcrop的原点、长度、宽度问题
- java中 implement_详解JAVA中implement和extends的区别
- 计算机显示c盘的文件被损坏,无法读取,怎么办?,电脑提示损坏文件怎么办
- 群晖docker签到京豆_在群晖Docker上的部署qBittorrent
- JIRA + FishEye + Crucible + Confluence + PostgreSQL
- Fuzzy Clustering详解