精简指令集计算机(DOC)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CHAPTER 12 REUCED INSTRUCTION SET COMPUTERS
(第12章精简指令集计算机)
●对设计RISC计算机,高级语言程序行为的研究成果是有指导意义。程序中赋值
语句占有最大份额,这暗示着简单的数据传送应当优化。程序中还有许多IF和LOOP语句,基础的顺序控制机制需要进行优化,以准许有效地使用流水技术。操作数引用样式的研究表明,在寄存器中保持适当数量的操作数会有助于性能的提高。
●RISC机器的关键特征:①有限的指令集并具有固定格式,②大量的寄存器或利用编译器来优化寄存器的作用,③强调对指令流水线的优化(optimizing)。
●RISC的简单指令集自身便利于有效的流水化;RISC指令集自身也有助于实施延迟转移技术(the delayed branch technique):将转移指令和其他指令重排能提高流水线效率。
下面给出了自计算机诞生以来某些最主要的进步。
●Family Concept:以不同的价格/性能特征提供的一级计算机,性能和价格方面的差
异在于同样结构的不同实现。
●Microprogrammed Control Unit:微编程使控制器的设计和实现变得更容易,并提供
了对系列概念的支持。
●Cache Memory:极大地改善了系统性能。
●Pipelining:将并行性引入机器指令程序顺序本性的一种方式。
●Multiple Processors:包含几种不同的组织和目标
●RISC:最重要的变革,在语言和行为方面对大多数计算机结构的学识是一个挑战
RISC系统的关键点是:
①有限的和简单的指令集并具有固定格式,
②大量的寄存器或利用编译器来优化寄存器的作用,
③强调指令流水线的优化(optimizing)
CP332+EP458表12.1比较了几个RISC和非RISC系统
12.1INSTRUCTION EXECUTION CHARACTERISTICS 指令执行特征
计算机发展最易见的形式是编程语言;随着硬件成本的下降,软件成本相对上升;通用性的扩展和编程人员的长期缺乏驱使软件成本在绝对意义上上升;软件运行多年后虽经不断修正仍继续出现新的缺欠。因此,一个计算机系统存活期的主要成本是软件而不硬件。
研究人员和工业界对此的响应是,开发出了功能更强、更复杂的高级程序设计语言,高级语言(HLL:high-level language)允许编程人员能更简明地表示算法,更关注细节,并经常支持结构化程序设计。
由此而来的是语义间隙问题(Semantic Gap),即HLL中提供的操作与计算机结构提供的操作间的差异。这种间隙现象(Symptoms of the Semantic Gap)被认为是,包括执行的低效、过长的机器程序和编译器的复杂性。设计者试图以结构的改进来减小这个间隙。关键的做法包括大指令集、若干的寻址方式和硬件实现的各种HLL语句
设计人员寻找新的方法:使支持HLL的结构更简单而不是更复杂。
为了理解主张RISC的理由,先简要地重新审视指令执行的特征:
●完成的操作
●所用的操作数
●执行顺序
下面总结的几个有关高级语言研究的报告中,动态测量是通过收集某些特征已出现或某一具体特性已由该情况下的程序所执行,并统计执行次数来进行的。静态测量只是在源程序文本上进行统计,它们没有加权到每条语句的执行次数。
12.1.1Operations 操作
CP106+EP146表4.9包括了几个研究的重要结论:赋值语句在程序中很显著,这暗示简单的数据传送非常重要;条件语句亦在程序中占有优势,这表明指令集的顺序控制机制亦是关键。因而应以一种“优化”形式(an optimal fashion)来支持它们。
研究者曾在V AX、PDP-11和Motorola68000上编译Patterson程序,以确定每类语句的平均机器指令数和平均存储器访问数。将这些平均数乘以每类语句的出现频度,就得到了CP334+EP460表12.2。结果表明:过程调用/返回是典型HLL程序中最耗时的操作。12.1.2Operands 操作数
Patterson的研究报告查看了各类变量的动态出现频度,详见CP334+EP460表12.3。Pascal和C程序的结论是一致的:主要使用的简单标量变量,而且80%以上的标量是(过程的)局部变量。
结论:程序中大量访问的是标量,而且它们是高度局部化的。
研究显示,因为操作数存取如此频繁,适用快速存取的结构将起重要作用。Patterson 研究提示,优化的主选方向应是对局部标量变量的存储和访问。
12.1.3Procedure Calls 过程调用
过程调用和返回是HLL程序的一个重要部分。表12.2指出,过程调用和返回是编译后的HLL程序中最耗时的操作。因此,考虑高效实现这些操作的方式将是有益的。
Tanenbaum的研究指出,98%的动态调用过程中传送的量少于6个,而且其中92%是少于6个局部标量变量。
Berkeley的RISC小组报告的结果,如CP335+EP461表12.4所示。
Berkeley小组发现程序保持在相当窄的过程调用窗口区域内。这就进一步证实了操作数访问(operand reference)是“高度局部化(highly localized )”的结论。
12.1.4Implications 结论
试图让指令集结构更接近HLL并不是一个有效的策略;而通过优化典型HLL程序中最耗时操作的性能,能更好地支持HLL。
由此,表征RISC结构体现在如下三点:①使用大量的寄存器,可以优化操作数的访问;
②精心谨慎地设计指令流水线,因为条件转移和过程调用指令的高比例,一个过于简单的指令流水线将是低效的;③对简单(Reduced)的指令集的需求。
12.2THE USE OF A LARGE REGISTER FILE 大寄存器方案的使用
已经看到:①HLL程序中有大量的赋值语句;②每个HLL语句都有一定数量的操作数访问;③大多数访问的是局部标量。
故:侧重于寄存器存储是明智的。其理由是,寄存器存储是比主存和Cache还要快的最快可用存储装置。寄存器集从物理上讲是小的,与ALU和控制器建在同一芯片上,使用比主存和Cache地址还要短的地址。
因此:需要一种策略能使最频繁访问的操作数保持在寄存器中,并减少(minimize)“寄存器—存储器”操作。
有两种基本途径:①基于软件,②基于硬件。
软件方法是依赖编译器来使寄存器使用最大化(maximize)。编译器将试图为那些在一给定时间期内使用最多的变量分配寄存器,并要求使用复杂的程序分析算法。
硬件方法是简单地装备更多的寄存器,以致更多的变量更长时间地保持在寄存器中。
12.2.1Register Windows 寄存器窗口
使用一大组寄存器应能减少对存储器访问的需求。显然,设计的任务就是很好地组织寄存器来实现这个目标。
因为大多数操作数量局部标量,局部的定义是随着每次过程调用和返回而改变的,过程调用是频繁出现的操作。
解决的方法是基于两个结论:①典型的过程只使用少数传送参数和局部变量;②过程动作的深度仅限定在一个相对窄的范围内(CP75+EP106图4.3)。
因此,使用多个小的寄存器组,每个小组指派给一个不同的过程。过程调用时自动地切换来使用不同的但大小固定的寄存器窗口;相邻过程的窗口是重叠的,以允许参数传递。
CP337+EP463图12.1说明了上述方法:任何时刻,只有一个寄存器窗口是可见的和可寻址的;窗口分成三个固定长度域:参数寄存器域、局部寄存器域和临时寄存器域。