每一代CPU的改进到底在什么地方?
CPU的设计是一个系统工程,通常可以分为微结构(学术界喜欢把micro-architecture翻译成“微结构”,传媒上多见“微架构”)、电路,器件,工艺这几大层面,每个层面内部都有很多细分方向,每个方向都有专家去研究,都有专门的工程团队在做。我现在接触比较多的是微结构这块,所以我只说微结构的改进。
微结构内部有很多地方是可以修改的,下面仅列举其中一部分:
发射宽度(主要包括前端取指令的宽度、解码宽度、dispatch/issue宽度,retire宽度)。
分支预测(包括但不限于预测器结构,预测准确率,branch resolve的延迟,流水线回退的耗时,以及寄存器重命名表能够保存多少个分支的快照)
乱序执行窗口的大小(包括ROB,Reservation Station)
Cache(扩充Cache大小,改进组织结构)
Interconnect
各种bypass,loop cache,etc.
对于普通消费者而言,这些改进最终会贡献多大分量的性能差别?
上面列了这么多不明觉厉的术语,但是实际上,现在每一代新的CPU性能只能增长~10%左右。【出处为Hotchips 2013 DARPA Microsystems Technology Office的Director Robert Colwell所做的Keynote】
微结构研究的黄金年代我认为是在80年代~2005年前后,微结构上的很多经典成果,例如RISC,分支预测,超流水线这些东西,都是那时候火热起来的,当时的CPU性能提高比较快,这么多年过去,现在能挖的差不多都已经挖出来了,处理器的基本微结构已经相对固化,剩下的是一些小幅度的增量式改进,一点一点儿地抠性能。
现在业界的注意力已经转向其他方向,比如异构计算的概念最近就被炒的很热。
Bonus:CPU的性能瓶颈在什么地方?如何判断?
对于不同的程序,性能瓶颈也是不同的,比如说有的程序指令缓存miss率很高,流水线前端取不到指令导致停顿,有的程序是因为指令重命名时竞争寄存器的读取端口,有的程序是因为cache装不下工作集,所以很难一概而论。目前的大势主要是访存引发停顿。
通过CPU的参数判断CPU的性能瓶颈,我个人认为对于普通消费者而言是做不到的。那种一看网媒上公布的粗略架构图就嫩判断出CPU性能瓶颈的决不是仙人,而是异想天开的民科。那些巨头公司的架构师都是经过多年训练经验丰富,在大参数上犯下明显错误的可能性几乎为0,更不用说整个CPU是许多架构师的通力合作。
判断性能瓶颈需要做精确的量化分析,现在的CPU内部一般都集成了成百上千个性能计数器,有perf之类的专用工具可以读取这些地方的数值,统计各个不同部件的性能表现。这是一个比较专精化的领域,如果您想要了解这方面的知识,可以阅读《计算机体系结构:量化研究方法》作为起步。