从程序员视角浅入浅出了解计算机硬件——CPU

前言

CPU是计算机中最复杂的电子器件(之一),承担着执行计算机程序中的指令、处理数据的核心任务,协调和控制计算机系统中的各个部件。简单来说,CPU就像是计算机的大脑,负责处理所有的数据和指令。
在正文开始前,让我们先思考以下几个问题:

  1. CPU的执行速度有多快,时间级别是多少?
  2. 服务器CPU的性能一定比消费级CPU强吗?

CPU简介

目前生产CPU的产家主要有Intel和AMD两家,Intel产品线分为赛扬、奔腾、酷睿、至强等;AMD 的产品线分为速龙、锐龙、线程撕裂者、霄龙等。根据面向用户的不同可以分为消费级和专业级。
Intel的酷睿和AMD的锐龙为常见的消费级CPU,酷睿产品线又分为i3、i5、i7、i9等型号,分别对应入门、中端、高端、旗舰;锐龙产品线分为R3、R5、R7、R9等型号,分别对应入门、中端、高端、旗舰。在各个型号中,又细分代数(系列),代数(系列)后还有子型号…具体命名格式可以看图1。
在这里插入图片描述

图1 intel CPU命名规则(左)AMD CPU命名规则(右)
Intel常见的尾缀
尾缀 含义
F 表明处理器需要独立显卡,‌没有集成显卡。‌
H 和 HK 表示针对移动设备进行优化的高性能处理器,‌其中HK是未锁频版本,‌适合高性能需求。‌
HQ 代表针对移动设备进行优化的高性能四核处理器。‌
K 表示处理器支持超频,‌适合追求高性能的用户。‌
M 和 U M代表笔记本专用CPU,‌通常为双核,‌而U代表低功耗处理器,‌常见于轻薄型笔记本电脑。‌
QM 和 MQ 笔记本专用四核CPU,‌QM代表标准电压处理器,‌MQ代表低电压四核处理器。‌
S 代表标准功率处理器,‌通常是桌面处理器的标准版本。‌
T 和 Y T代表节能版处理器,‌适合长时间运行的应用;‌Y代表极低功耗处理器,‌常见于超薄设备如平板电脑。‌
X 表示极端性能处理器,‌适合需要极大计算能力的专业应用。‌

AMD常见的尾缀

尾缀 含义
G 代表带有集成显卡的处理器,‌内置了Radeon Vega图形处理器(GPU),‌适合不打算单独购买独立显卡的用户。‌
X 代表高性能版本,‌通常拥有更高的基础频率和加速频率,‌适合追求高性能的用户。‌
XT X系列的进一步提升,‌代表极限性能版本,‌比同系列的X型号有着更高的频率和更好的超频潜力。‌
U 主要出现在AMD的移动处理器上,‌代表低功耗版本,‌适合笔记本电脑,‌注重续航和便携性。‌
H 也是移动处理器的标识,‌但与U系列不同,‌H系列强调的是高性能,‌适合游戏笔记本和高性能工作站。‌
S 代表特别低功耗版本,‌主要用于需要极低功耗的特定场合,‌如一体机或超薄型设备。‌
E 代表嵌入式应用,‌这类处理器通常用于嵌入式系统,‌如工业控制、‌医疗设备等专业领域。‌
WX 代表工作站级别的处理器,‌通常拥有更多的核心和更高的性能,‌适合专业的图形设计、‌视频编辑和3D渲染等工作。‌

这里需要注意的是,高端与低端的比较只有在同一代进行才有可比性。不同代数(系列)不能简单的通过型号来判断性能强弱。旧款的高端CPU不一定比新款低端CPU性能强,如i3-12100 不管是单核性能还是多核性能都优于i7-7700K,还拥有更低的功耗(图2)。
在这里插入图片描述

图2 i3-12100与i7-7700k对比

Intel的至强(Xeon)和AMD(EPYC)的霄龙,则是专业级CPU系列,用于服务器和高级工作站。关于这部分的CPU系列、型号、子型号、孙型号…,感兴趣的小伙伴可以自行搜索,规则跟消费级有所差别,但大抵相似。
在这里插入图片描述

图3 专业级CPU名称

CPU对比

图4是同一年2020年发布的专业级Xeon Sliver 4214R 和消费级Core i9-10900X,简单对比,似乎看不出专业级CPU有啥优势。这里只是将两个发布时期相近、价格相当的CPU进行对比。 i9-10900X是当年消费级的旗舰,而Xeon Sliver 4214R 只是银牌级别(Sliver ),在它之上还有金牌、铂金级别。两者的定位也不同,追求的目标也不同。
消费级CPU对用户使用场景进行了优化,多数应用对单线程的依赖较大,没有多线程优化,所以太多线程往往没有什么意义,还不如睿频高一些。
专业级CPU对服务器场景做了特殊优化,如在TDP极限下,尽可能加入更多核心而不是提高单核性能。支持超大内存,更多的内存通道,极大的扩展了内存带宽;支持ECC内存和RDIMM,数据安全性高。还其他的特点就不一一列举,总之,专业级追求高并发、稳定、安全。
在这里插入图片描述

图4 专业级Xeon Sliver 4214R 和消费级Core i9-10900X对比

CPU参数

我们以Core i9-14900K CPU为例,从官网我们可以看到各种各样的参数,包括基本要素、CPU 规格、内存规格、封装规格安等,我们这里可以把这个参数分为几类,像功耗、TDW是跟功率、散热相关;内存规格、扩展选项这些跟主板的支持的接口及传输协议相关,以上参数,如果是自己DIY主机的话,需要额外关注一下,避免买到不适合或者不兼容的配件。
在性能方面,我们主要关心的参数有核心架构、内核数、线程数、频率、缓存等。核心架构影响指令的执行效率;时钟频率指CPU每秒钟执行的周期数,通常用赫兹(Hz)表示;核心数代表CPU内部的处理核心数量,多核CPU能够同时处理多个任务;而缓存则是用于临时存储数据的高速存储器,有助于提高CPU的性能。

在这里插入图片描述

图5 CPU详情页1

在这里插入图片描述

图6 CPU详情页2

CPU性能指标

根据图6的CPU整体性能公式可知,性能主要受到频率(frequency)、IPC(Instruction Per Clock)每个时钟执行的指令数、核心数影响。因此,我们就可以知道牙膏厂(Intel)挤牙膏的基本方向了,今年提升一点频率,明年优化核心架构提升IPC、后年增加核心数…
这个公式表示的是CPU的整体性能,我们平常说的服务器的性能强,一般指的是整体性能,由于服务的CPU核心数都比较多,允许安装多个CPU,所以整体的性能很强,但单核性能不见得就比消费级CPU强。消费级CPU往往有更高的睿频,在某些使用场景下,CPU的单核性能更为重要,如玩游戏。
在这里插入图片描述

图6 CPU性能公式

频率的单位为GHz,5GHz则表示CPU在1秒内能产生内数字脉冲信号5,000,000,000(50亿次)次。频率的倒数表示一个时钟周期,通过计算我们可以得知,5GHz的时钟周期是0.000,000,0002秒(0.2纳秒)。根据这些数值,我们可以大胆地猜想CPU的执行每次执行指令的时间应该是在纳秒级别。
核心架构影响着IPC,IPC表示在一个时钟周期内可以执行的指数,在频率一定的情况下,IPC越大则代表CPU的性能越强。
我们用程序员最熟悉的工作–送外卖来比喻,频率相当于是骑电动车的速度,而IPC相当于是送餐箱每次能放多少,速度越快,送餐箱单次装的越多,则表示我们送外卖的能力越强。
关于CPU的频率参数我可以从官方详情页或者是一些测试软件得知,如CPU-Z,关于IPC的数据就不好获取了,只能通过SPEC组织的基准测试,这个途径非常不适合小白(我)这也是我们在平常一般只关心频率,而不太注意IPC的原因。
在这里插入图片描述

图7 CPU-Z处理器截图

CPU性能测试

我们通过实际的例子来测试频率对CPU性能的影响。
测试环境:i7-7700K 。
频率控制:控制处理器的电源管理(图8)来控制不同频率的高低。
关键数据:执行相同的代码,统计实际耗时。
在这里插入图片描述

图8 电源管理
public class Cpu {
    public static void main(String[] args) {
        long add = 0;
        long hz = 5_000_000_000L;
        long begin = System.nanoTime();
        for (long i = 0; i < hz; i++) {
            add += i;
        }
        long end = System.nanoTime();
        System.out.println(end - begin);
        System.out.println(add);
    }
}
测试结果
最高睿频(GHz) 执行时间(ns) 每次循环平均时间(ns) 时钟周期(ns)
1 4.50 1258112900 0.25162258 0.222222222222
2 4.50 1280454900 0.25609098 0.222222222222
3 4.50 1236614800 0.24732296 0.222222222222
4 2.08 2798028400 0.55960568 0.480769230769
5 2.08 2653620300 0.53072406 0.480769230769
6 2.08 2756895900 0.55137918 0.480769230769
7 0.97 6055035900 1.21100718 1.030927835052
8 0.97 6176137600 1.23522752 1.030927835052
9 0.97 6020355600 1.20407112 1.030927835052

从测试结果可以看出,在同其他条件相同的情况下,随着最大睿频的降低,时钟周期变得越长,代码的运行时间变得越长,单次平均执行时间也越长。

我们将以上代码放在服务器中执行,控制i7-7700K的电源来限制最高睿频,来对比测试服务器CPU的单核性能情况。
测试环境:Xeon Sliver 4212R、Core i7-7700K
频率控制没权限、俺也不会
关键数据:执行相同的代码,统计实际耗时。

测试结果
CPU 架构 最高频率(GHz) 执行时间(ns) 每次循环平均时间(ns) 时钟周期(ns)
1 Xeon Sliver 4212R Cascade Lake 3.50 1921282032 0.384256406 0.285714285714
2 Xeon Sliver 4212R Cascade Lake 3.50 1876427025 0.375285405 0.285714285714
3 Xeon Sliver 4212R Cascade Lake 3.50 1887650854 0.377530171 0.285714285714
4 Core i7-7700K Kaby Lake 3.49 1565007100 0.313001420 0.286532951289
5 Core i7-7700K Kaby Lake 3.49 1613055600 0.322611120 0.286532951289
6 Core i7-7700K Kaby Lake 3.49 1601329000 0.320265800 0.286532951289

从测试的结果来看,严谨地说我们不能得到任何结果,因为两者的频率没有一致,为啥不控制到一样的的频率,原因是CPU不听话,只能调到一个尽可能靠近的值。此外,两者的测试环境不一致,一个在Linux系统,一个在Window系统,两者也没有保证在空载的情况下测试,所以这个结果就图一乐。
粗略而又不太严谨地总结一下,Cascade Lake架构是新于Kaby Lake架构的,但从测试结果来看,新的架构偏高的的频率并没有使得Xeon Sliver 4212R的单核性能更强。这里我们已经把消费机CPU的睿频进行限制了,表现出的效果还是优于4212R。

总结

综上,我们可以得出结果,目前主流的CPU单次指令的执行时间为纳秒级别,消费级的单核能力比较强,专业级CPU总体性能比较强、稳定性高、安全性强。

相关推荐

  1. 容器化部署

    2024-07-21 02:04:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 02:04:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 02:04:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 02:04:02       45 阅读
  4. Python语言-面向对象

    2024-07-21 02:04:02       55 阅读

热门阅读

  1. Spring Cloud Gateway 响应数据加密

    2024-07-21 02:04:02       21 阅读
  2. HTTP爬虫IP流量和数量计费模式选择指南

    2024-07-21 02:04:02       20 阅读
  3. PHP项目开发流程概述

    2024-07-21 02:04:02       16 阅读
  4. Go知识点记录

    2024-07-21 02:04:02       20 阅读
  5. DAY05 CSS

    DAY05 CSS

    2024-07-21 02:04:02      17 阅读
  6. MacOS命令行运行fortran程序|编程私教解答

    2024-07-21 02:04:02       18 阅读
  7. 类与对象-多态-案例3-电脑组装具体实现

    2024-07-21 02:04:02       18 阅读
  8. OpenPyXL 写入 Excel 文件

    2024-07-21 02:04:02       15 阅读
  9. 量化机器人如何实现无缝交易?

    2024-07-21 02:04:02       17 阅读