《计算机组成与体系结构:性能设计》读后小记 13、精简指令集计算机

一、指令执行特征

  1、精简指令集计算机(RISC)的关键特征:

    (1)有限的指令集并具有固定格式;

    (2)大量的寄存器或利用编译器来优化寄存器的使用;

    (3)强调对指令流水线的优化;

  2、操作:研究结论中,赋值语句和条件语句在程序中占有很大比例,这表明简单的数据传送和指令集的顺序控制机制都很重要。

  3、操作数:Pascal和C程序中主要使用简单标量变量,而且80%以上的标量是(过程的)局部变量。所以,优化的主选方向是对局部标量变量的存储和访问。

  4、过程调用:过程调用和返回是HLL(高级语言)程序中最耗时的操作,其中过程使用的参数及变量和嵌套的深度有显著意义。研究发现,程序保持在相当窄的过程调用窗口区域内,进一步证实了操作数访问是“高度局部化”的。

  5、推论:试图让指令集结构更接近HLL并不是一个有效的策略。相反,通过优化典型HLL程序中最耗时操作的性能,能更好地支持HLL。

二、大存储器组方案的使用

   1、采用寄存器的理由:

    (1)寄存器是比主存和cache还要快的最快存储装置;

    (2)寄存器从物理上讲是最小的,通常是与ALU和控制器在同一芯片上;

    (3)并且使用比主存和cache地址还要短的地址;

  2、寄存器窗口

    (1)由于过程调用的嵌套深度过多,会导致数据频繁的在寄存器和存储器中传递。故总结两条结论用于解决这个问题:

      A、一个典型的过程调用只使用少量的传送参数和局部变量;

      B、过程调用的深度仅限定在一个相对窄的范围内;

    (2)环形缓冲器:寄存器窗口只用于保持少数最近过程的调用,更早的过程调用必须保存到存储器中,当嵌套深度减少时再恢复。

   3、解决全局变量的两种方式:

    (1)由编译器为高级程序设计语言(HLL)中声明的全局变量指派存储器位置,所有访问这些变量的机器指令将使用存储器引用的操作数;

    (2)在CUP中包括一组全局寄存器,这些寄存器的数量是固定的,并且可以被所有寄存器使用;

  4、大寄存器组与高速缓存的对比:尽管cahce能与寄存器组一样的快,但cache的存取时间肯定要长。于是,从性能观点看,基于窗口的寄存器组对于局部标量而言是更优化的。通过加入专门的指令cache,能进一步改善性能。

三、基于编译器的寄存器优化

   其原理不太懂,具体见P315页。

四、精简指令集体系结构

   1、采用CISC是理由:

    (1)简化编译器;

    (2)CISC可生成更小、更快的程序;

  2、CISC上的真实情况:

    (1)CISC上的编译器有偏爱简单指令的倾向,结果使得复杂指令所提供的简洁性很少发能发挥作用;

    (2)CISC上更多的指令数要求较长的操作码,这使指令较长;

    (3)RISC强调寄存器而不是存储器的访问,因而要求的指令位数也更少;

  3、使用CISC的结论:

    (1)并不能生成更小的程序;

    (2)并不能生成更快的程序;

  4、精简指令集的共同特征:

    (1)每机器周期一条指令:机器周期被定义成由寄存器取两个操作数,ALU完成算术操作,然后再将结果写入寄存器的时间;

    (2)大多数操作应是寄存器到寄存器的,只以简单的LOAD和STORE操作访问存储器;

    (3)使用简单的寻址方式。几乎全部指令都使用寄存器寻址方式,其他几种寻址方式,像偏移寻址和PC相对寻址,也可能包含进来;

    (4)使用简单的指令格式,而且通常仅使用一种或少数几种格式;

  5、RISC的潜在优势:

    (1)能开发出更有效的优化编译器;

    (2)编译器生成的大多数指令从任何方面讲都是相对简单的指令;

    (3)RISC程序应能更好的响应中断,因为中断是相当于在基本操作之间检查的;

五、RISC流水线技术

  1、使用规整的流水线技术

  2、流水线的优化,没看懂,详情见P320

  3、指令流水线的设计不应与其他适用于系统的优化技术隔离开进行。例如,流水的指令调度策略应与寄存器的动态分配一起考虑,以提高效率。

原文地址:https://www.cnblogs.com/gaojiang/p/4026610.html