从程序员视角浅入浅出了解计算机硬件——概述
从程序员视角浅入浅出了解计算机硬件——CPU
从程序员视角浅入浅出了解计算机硬件——内存
从程序员视角浅入浅出了解计算机硬件——硬盘
前言
CPU是计算机中最复杂的电子器件(之一),承担着执行计算机程序中的指令、处理数据的核心任务,协调和控制计算机系统中的各个部件。简单来说,CPU就像是计算机的大脑,负责处理所有的数据和指令。
在正文开始前,让我们先思考以下几个问题:
- CPU的执行速度有多快,时间级别是多少?
- 服务器CPU的性能一定比消费级CPU强吗?
CPU简介
目前生产CPU的产家主要有Intel和AMD两家,Intel产品线分为赛扬、奔腾、酷睿、至强等;AMD 的产品线分为速龙、锐龙、线程撕裂者、霄龙等。根据面向用户的不同可以分为消费级和专业级。
Intel的酷睿和AMD的锐龙为常见的消费级CPU,酷睿产品线又分为i3、i5、i7、i9等型号,分别对应入门、中端、高端、旗舰;锐龙产品线分为R3、R5、R7、R9等型号,分别对应入门、中端、高端、旗舰。在各个型号中,又细分代数(系列),代数(系列)后还有子型号…具体命名格式可以看图1。
尾缀 | 含义 |
---|---|
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)。
Intel的至强(Xeon)和AMD(EPYC)的霄龙,则是专业级CPU系列,用于服务器和高级工作站。关于这部分的CPU系列、型号、子型号、孙型号…,感兴趣的小伙伴可以自行搜索,规则跟消费级有所差别,但大抵相似。
CPU对比
图4是同一年2020年发布的专业级Xeon Sliver 4214R 和消费级Core i9-10900X,简单对比,似乎看不出专业级CPU有啥优势。这里只是将两个发布时期相近、价格相当的CPU进行对比。 i9-10900X是当年消费级的旗舰,而Xeon Sliver 4214R 只是银牌级别(Sliver ),在它之上还有金牌、铂金级别。两者的定位也不同,追求的目标也不同。
消费级CPU对用户使用场景进行了优化,多数应用对单线程的依赖较大,没有多线程优化,所以太多线程往往没有什么意义,还不如睿频高一些。
专业级CPU对服务器场景做了特殊优化,如在TDP极限下,尽可能加入更多核心而不是提高单核性能。支持超大内存,更多的内存通道,极大的扩展了内存带宽;支持ECC内存和RDIMM,数据安全性高。还其他的特点就不一一列举,总之,专业级追求高并发、稳定、安全。
CPU参数
我们以Core i9-14900K CPU为例,从官网我们可以看到各种各样的参数,包括基本要素、CPU 规格、内存规格、封装规格安等,我们这里可以把这个参数分为几类,像功耗、TDW是跟功率、散热相关;内存规格、扩展选项这些跟主板的支持的接口及传输协议相关,以上参数,如果是自己DIY主机的话,需要额外关注一下,避免买到不适合或者不兼容的配件。
在性能方面,我们主要关心的参数有核心架构、内核数、线程数、频率、缓存等。核心架构影响指令的执行效率;时钟频率指CPU每秒钟执行的周期数,通常用赫兹(Hz)表示;核心数代表CPU内部的处理核心数量,多核CPU能够同时处理多个任务;而缓存则是用于临时存储数据的高速存储器,有助于提高CPU的性能。
CPU性能指标
根据图6的CPU整体性能公式可知,性能主要受到频率(frequency)、IPC(Instruction Per Clock)每个时钟执行的指令数、核心数影响。因此,我们就可以知道牙膏厂(Intel)挤牙膏的基本方向了,今年提升一点频率,明年优化核心架构提升IPC、后年增加核心数…
这个公式表示的是CPU的整体性能,我们平常说的服务器的性能强,一般指的是整体性能,由于服务的CPU核心数都比较多,允许安装多个CPU,所以整体的性能很强,但单核性能不见得就比消费级CPU强。消费级CPU往往有更高的睿频,在某些使用场景下,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的原因。
CPU性能测试
我们通过实际的例子来测试频率对CPU性能的影响。
测试环境:i7-7700K 。
频率控制:控制处理器的电源管理(图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总体性能比较强、稳定性高、安全性强。