影响CPU性能的因素

这个文章讲解得比较好,对几种概念做了比喻:

https://www.zhihu.com/question/391134159/answer/1185708543

CPU性能公式

虽然不正确,但是可以粗略这样理解:

CPU性能 = IPC(每个频率周期处理的指令数量) * 频率 * 核心数

IPC的影响因子:架构、指令集、流水线深度

这些年CPU性能增加的原因

频率这些年是没怎么增加的,但是IPC和核心数一直在增加,特别是IPC,所以CPU的性能一直在增加。

CPU性能设计的思路

尽量减少平均执行一个操作所必须的时间:IPC

尽量不闲着:超线程(同时多线程)

尽量增加人员:频率数、核心数

为什么服务器CPU的超线程一般都多于PC的CPU?

PC的CPU,基本都是1个核心2个线程;而服务器的CPU一般会多一些,比如IBM的Power8,12核96线程,一个核8个线程。

PC关心的是延迟,就是我面前这个程序还要几秒能打开;而服务器关心的是吞吐率,我响应一个客户端再快也没有用,我宁愿让大家都等一秒钟,然后一次响应成百上千个客户端。这也是服务器为什么喜欢多线程的原因之一吧。

名词概念

进程

正在执行的程序,OS中资源分配的最小单位。

进程用来获取资源,是资源的拥有者,进程的创建、撤销、切换都需要时空开销。

线程

线程用来使用资源,是程序执行的基本单位,独立调度分配CPU的基本单位,是进程中的一个实体

多线程编程并不一定需要多处理器。多线程在乎的是并发,而非并行。

超线程

CPU的一个核心执行一个线程的时候,通常会有部分处理单元闲置;超线程就是同时运行更多的线程,来把闲置的处理单元利用上。

超线程,其实是英特尔公司命名的技术(HT, Hyper-Threading),但是这项技术最早起源于IBM,学术一些的名字叫同时多线程(SMT,Simulate MultiThreading)。

IPC

IPC(Instruction Per Clock),即CPU每一个频率周期里处理的指令数量

CPI

CPI rate(Clycle Per Instruction retired)。既每个指令平均消耗的周期,如果有一个4指令发射的CPU,那么最理想就是0.25(1/4)。