影响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)。