【Practical】<RISC,CPI>

每条指令时钟周期数CPI.

  • 几乎每台计算机都有一个以固定频率运行的时钟,CPU内部有个叫晶体振荡器(Oscillator Crystal)的东西简称晶振,可以将晶振理解为那种老式摆钟,一天下来它要摆好多次,每次摆动之间的间隔称为时钟周期时间-Clock Cycle
  • 一个程序的CPU时间可以计算如下(记为①式):
    【Practical】<RISC,CPI>
  • 如果已知程序的CPU时钟周期数和程序的指令数IC,粗略来看将二者做商,就能够得到每条指令时钟周期数CPI(记为②式):
    【Practical】<RISC,CPI>
  • 结合①②两式,得到CPU时间的另一种表示(记为③式):
    【Practical】<RISC,CPI>
    直观理解为,一个程序需要的CPU时间是程序中的指令数、每条指令需要的时钟周期数以及单个时钟周期的时间这三者之积。

不同指令CPI.

  • ②式中的计算方法实际上携带了一种假设,即所有的指令都是等价的,MOVADD以及LOOP等等所有指令都被视为同样的"1",纳入了IC之中,如果考虑不同指令之间的差异,则②式应修改为(记为④式):
    【Practical】<RISC,CPI>
  • 相应修改CPU时间计算式③,得到⑤式:
    【Practical】<RISC,CPI>
  • 最终回到CPI的计算,从⑤式中得到CPI计算公式⑥:
    【Practical】<RISC,CPI>

RISC设计思路.

  • RISC - Reduced Instruction Set Computer是一种CPU的设计模式,其中的指令-Instruction指的是那些能够被计算机直接识别的指令,与之相对的一个概念是CISC - Reduced Instruction Set Computer.
  • 从最早的程序谈起更能说清RISC和CISC出现的原因,那时的程序绝大多数是由机器语言或者汇编语言编写的。而随着计算机系统的发展,人们要求计算机指令系统能够使得计算机程序运行得越来越稳定,首先出现的优化方法就是复杂指令集CISC.
  • CISC的思想是让计算机指令做更多的事,将一些原本由软件实现的功能也改用硬件实现,以此来提高计算机的执行速度。催生越来越复杂、功能越来越强大的指令出现的原因是多方面的:
  • ①当时情况下的硬件设计效率高于编译器设计(编译器技术直至20世纪90年代才逐步成熟);
  • ②内存容量小,每一字节都是珍贵资源,使得指令倾向于高度编码、不等长、聚合多个操作;
  • ③CPU内部缓存过于昂贵,数量稀少。
  • 综合上面这些因素,CPU设计师选择让指令做更多的事,例如一条指令能够独自完成取出数据、计算、将计算结果存储在内存中整个过程。
  • 但显然我们如今使用的计算机指令系统并不是这样的复杂指令,学习汇编语言时,对于上面这样一个操作,我们并不是一条指令直接完成,而是有着LoadAdd以及Store等等分工完成的指令。这也就意味着,在指令集发展的某个时期,CISC暴露出了其弊端,被某种新的设计思路替换了。
  • 1979年以帕特逊教授为首的一批科学家也开始在美国加州大学伯克利分校开展了针对指令系统合理性的研究,并且提出了"2-8准则",也就是在计算机程序中,各种指令的使用频率之间存在很大的差值,一个程序中80%的指令,实际上只是一个指令系统中20%的部分,像存、取、加这样的简单指令出现频率相当高。所以复杂指令系统的设计,实际上是在设计一些实际使用中很难用到的指令,导致初衷是为了提高计算机执行速度的CISC,很多情况下缺拖累了计算机执行速度。CISC会降低那些被频繁调用的简单指令系统的运行速度,基于上面第⑥式的计算公式以及贪心策略,这显然会导致CPI远远不是全局最优值。
  • 于是在20世纪80年代,RISC优化技术发展起来,其策略是正对CISC做出改进的,一方面在指令系统中只包括那些被频繁调用的简单指令(例如选取运算指令、加载、存储指令和转移指令作主指令集),并且采用统一指令编码而非不等长指令;另一方面提供一些必要的指令来支持OS和高级语言,使得较为复杂的功能可以通过一段子程序来实现。
  • 基于第⑥式的计算公式,RISC的策略就是降低那些高 P i P_i Pi值的指令的 C P I i CPI_i CPIi值,从而使得CPI能够接近全局最优解。

Moreover.

  • RISC的设计思路实际上远远不局限于CPI方面大概率优先的思路,固定长度的编码带来了很多方面的优化:
  • ①指令趋于固定的格式,操作码、操作数都尽量出现在固定的位置上,使得RISC与日渐成熟的编译器技术能够较好地契合;
  • ②规格化、简单化的指令使得RISC能够采用高效的流水线操作,实现并行操作,提高处理数据和指令的速度,并且简化了寻址方式;
  • ③采用大量的寄存器操作指令,使得控制部件更加简化,执行速度提高,也得益于VLSI技术在20世纪80年代已经能够在一个芯片上做出大容量寄存器;采用载入-存储ISA,除了LoadStore指令能够访问内存,其余指令均在寄存器之间处理数据;
  • ④抛弃微代码(会增加指令的复杂度、降低执行速度),采用硬布线的逻辑控制;
  • 更多内容可以查阅wikipedia以及Hennessy先生Patterson先生的《Computer Architecture:A Quantitative Approach》(fifth edition).