获取CPU的名称、主频和核数(附源码)

本文介绍了如何获取CPU的名称、主频、物理核数和逻辑核数。通过读取注册表获取CPU主频和名称,利用GetSystemInfo和GetLogicalProcessorInformation函数获取核数,并讨论了在不同Windows系统中保持兼容性的动态获取函数地址方法。

       有时我们需要获取CPU的主频和核数(物理核数和逻辑核数)等信息去判断PC的性能,本文我们就介绍如何去获取这些信息。

1、获取CPU名称和主频

       CPU的主频及名称等信息均存储在注册表中,可以到下列注册表位置中读取:

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

该位置的系统注册表截图如下所示:

从上述注册表位置中读取CPU主频及名称信息的代码如下:

// 获取CPU信息
BOOL GetCpuInfo( TCHAR* lpszCpuName, DWORD& dwCpuMFreq )
{
 &nbs
<think> 我们参考用户提供的引用内容,来回答如何查看Linux系统的CPU主频。 根据引用[2]引用[4],我们可以通过查看/proc/cpuinfo文件来获取CPU信息。 另外,引用[3]提到调整CPU频率的方法,但用户主要需求是查看,所以我们关注查看方法。 查看CPU主频: 命令:`grep 'MHz' /proc/cpuinfo | uniq` 或者 `grep 'cpu MHz' /proc/cpuinfo | uniq` 这样可以避免重复显示每个逻辑心的频率(因为可能相同),但注意如果CPU有不同频率的心,uniq会合并相同的行。 查看CPU(物理): 我们可以通过查看每个物理心的唯一标识(physical id)心标识(core id)来统计物理。 但更简单的方法有: 方法1:`grep 'core id' /proc/cpuinfo | sort | uniq | wc -l` 注意:这并不总是准确,因为不同物理CPU可能有相同core id,所以需要结合physical id。 方法2:直接使用`lscpu`命令(推荐),因为它会汇总信息,更清晰。 查看逻辑CPU(线程): 命令:`grep -c 'processor' /proc/cpuinfo` 或者 `nproc` 或者 `lscpu | grep '^CPU(s):'` 引用[4]中提到了`lscpu`命令,它能够显示非常全面的CPU信息,包括架构、CPU操作模式、字节序、CPU量(逻辑CPU)、每个心的线程、每个插槽的、插槽、NUMA节点、厂商ID、型号、主频、缓存等信息。 因此,我们推荐使用`lscpu`命令,因为它可以一次性获取主频线程等信息。 步骤: 1. 打开终端。 2. 输入命令:`lscpu` 3. 在输出中查找: CPU MHz: 当前主频(注意,可能有多个心,这里显示的是当前运行频率,动态变化) 但是`lscpu`输出中有一个“CPU max MHz”CPU min MHz”,可以查看频率范围。 另外,还可以通过`/proc/cpuinfo`查看每个心的当前频率。 如果需要更详细的每个心的频率,可以使用: `cat /proc/cpuinfo | grep 'MHz'` 4. 在`lscpu`输出中: “CPU(s)”表示逻辑CPU量(即线程) “Thread(s) per core”表示每个心的线程(超线程技术下,一个心可以有多个线程) “Core(s) per socket”表示每个插槽(物理CPU)的 物理CPU个数(插槽)由“Socket(s)”表示。 因此,物理心总 = Socket(s) × Core(s) per socket 逻辑CPU = Socket(s) × Core(s) per socket × Thread(s) per core 另外,也可以使用`nproc`命令直接查看逻辑CPU个数。 如果系统没有`lscpu`命令(一般都会有),则使用`/proc/cpuinfo`。 总结命令: 1. 查看逻辑CPU量(线程): `nproc` 或者 `grep -c processor /proc/cpuinfo` 2. 查看物理: `lscpu | grep 'Core(s) per socket' | awk '{print $4}'` 得到每个插槽的 `lscpu | grep 'Socket(s)' | awk '{print $2}'` 得到插槽 然后相乘即可。或者直接使用: `lscpu -p | grep -v '#' | awk -F, '{print $2}' | sort | uniq | wc -l` 解释:`lscpu -p`以可解析的格式输出,第二列是心id(每个物理心一个唯一id),所以统计唯一的心id量就是物理。 3. 查看当前CPU主频(每个逻辑心的当前频率): `cat /proc/cpuinfo | grep 'MHz'` 4. 查看CPU型号基础频率(标称频率): `lscpu`输出中的“Model name”CPU max MHz”(注意,有些CPU有基础频率加速频率) 注意:CPU主频是动态变化的,所以查看的结果是当前频率。如果要查看标称频率,可以看型号名称(Model name)中通常有标注,或者查看“CPU max MHz”CPU min MHz”。 示例输出(部分): ``` Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 2 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 60 Model name: Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz Stepping: 3 CPU MHz: 2594.000 CPU max MHz: 3200.0000 CPU min MHz: 800.0000 BogoMIPS: 5188.00 ... ``` 在这个例子中: 逻辑CPU(线程)为4(CPU(s):4) 每个心有2个线程(Thread(s) per core:2) 每个插槽有2个心(Core(s) per socket:2) 插槽(物理CPU个数)为1(Socket(s):1) 因此,物理心总=1×2=2 标称主频为2.60GHz(从Model name中看),当前运行频率为2594MHz(即2.594GHz),最大可加速到3.2GHz。 所以,我们可以通过`lscpu`命令快速获取这些信息。 如果用户需要每个心的详细频率,则使用: `watch -n 1 "cat /proc/cpuinfo | grep 'MHz'"` 可以每秒刷新一次,观察频率变化。 因此,回答如下: </think> 在Linux系统中,查看CPU主频的常用方法如下: ### 一、查看CPU主频(时钟频率) #### 方法1:通过`/proc/cpuinfo`文件 ```bash # 查看所有心的当前频率 grep 'MHz' /proc/cpuinfo # 查看最大主频(标称值) grep 'model name' /proc/cpuinfo | uniq ``` 输出示例: ``` cpu MHz : 2899.998 model name : Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz ``` > 第一行显示**当前实际运行频率**(动态调整),第二行显示**标称基础频率**[^1][^3]。 #### 方法2:使用`cpufreq-info`(需安装) ```bash # 安装工具 sudo apt install cpufrequtils # 查看频率信息 cpufreq-info | grep "current CPU frequency" ``` 输出示例: ``` current CPU frequency is 3.80 GHz ``` ### 二、查看CPU线程 #### 方法1:使用`lscpu`命令(推荐) ```bash lscpu | grep -E 'CPU\(s\)|Thread|Core|Socket' ``` 输出示例: ``` CPU(s): 16 # 逻辑处理器(线程) Thread(s) per core: 2 # 每个物理心的线程(超线程) Core(s) per socket: 8 # 每个CPU插槽的物理 Socket(s): 1 # 物理CPU量 ``` 计算逻辑: - **物理心总** = Socket(s) × Core(s) per socket $物理心 = 1 \times 8 = 8$ - **逻辑处理器** = Socket(s) × Core(s) per socket × Thread(s) per core $线程 = 1 \times 8 \times 2 = 16$[^4] #### 方法2:解析`/proc/cpuinfo` ```bash # 查看物理 grep 'core id' /proc/cpuinfo | sort | uniq | wc -l # 查看逻辑处理器 grep 'processor' /proc/cpuinfo | wc -l ``` #### 方法3:使用`nproc`命令 ```bash nproc --all # 显示逻辑处理器 ``` ### 三、信息解读示例 典型输出分析: ```bash $ lscpu ... CPU(s): 16 # 系统共有16个逻辑处理器 Thread(s) per core: 2 # 启用超线程(每个物理心对应2线程) Core(s) per socket: 8 # 单个CPU有8个物理心 Socket(s): 1 # 1个物理CPU Model name: Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz CPU max MHz: 5100.0000 # 最高睿频 ... ``` 结论: - **物理心**:8 - **逻辑处理器**:16线程 - **主频范围**:基础频率3.8GHz,最高睿频5.1GHz > 💡 提示:CPU实际频率会因负载节能设置动态变化,`/proc/cpuinfo`显示实时值,`model name`显示标称值[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值