当前位置: 华文问答 > 数码

CPU 每一代之间的差距体现在什么地方?

2014-01-10数码

我想您的问题可以分成两个部分:


每一代CPU的改进到底在什么地方?

CPU的设计是一个系统工程,通常可以分为微结构(学术界喜欢把micro-architecture翻译成「微结构」,传媒上多见「微架构」)、电路,器件,工艺这几大层面,每个层面内部都有很多细分方向,每个方向都有专家去研究,都有专门的工程团队在做。我现在接触比较多的是微结构这块,所以我只说微结构的改进。

微结构内部有很多地方是可以修改的,下面仅列举其中一部分:

  • 发射宽度(主要包括前端取指令的宽度、解码宽度、dispatch/issue宽度,retire宽度)。
  • 分支预测(包括但不限于预测器结构,预测准确率,branch resolve的延迟,流水线回退的耗时,以及寄存器重命名表能够保存多少个分支的快照)
  • 乱序执行窗口的大小(包括ROB,Reservation Station)
  • Cache(扩充Cache大小,改进组织结构)
  • Interconnect
  • 各种bypass,loop cache,etc.
  • 每次Intel,AMD,IBM等巨头推出的新架构,您能在各大媒体上看到的新闻宣传,大多是从这些地方的参数入手,比如说Haswell把乱序执行窗口从168加大到192,诸如此类。


    对于普通消费者而言,这些改进最终会贡献多大分量的性能差别?

    上面列了这么多不明觉厉的术语,但是实际上,现在每一代新的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之类的专用工具可以读取这些地方的数值,统计各个不同部件的性能表现。这是一个比较专精化的领域,如果您想要了解这方面的知识,可以阅读【计算机体系结构:量化研究方法】作为起步。