《计算机组成与体系结构:性能设计》读后小记 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、指令流水线的设计不应与其他适用于系统的优化技术隔离开进行。例如,流水的指令调度策略应与寄存器的动态分配一起考虑,以提高效率。