RISC的关键技术.doc

上传人:仙人指路1688 文档编号:2393137 上传时间:2023-02-17 格式:DOC 页数:9 大小:107.50KB
返回 下载 相关 举报
RISC的关键技术.doc_第1页
第1页 / 共9页
RISC的关键技术.doc_第2页
第2页 / 共9页
RISC的关键技术.doc_第3页
第3页 / 共9页
RISC的关键技术.doc_第4页
第4页 / 共9页
RISC的关键技术.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《RISC的关键技术.doc》由会员分享,可在线阅读,更多相关《RISC的关键技术.doc(9页珍藏版)》请在三一办公上搜索。

1、RISC的关键技术RISC要达到很高的性能,必须有响应的技术支持。目前,在RISC处理机中采用主要技术有如下几种: 1延时转移技术在RISC处理机中,指令一般采用流水线方式工作。取指令和执行指令并行进行。如果取指令和执行指令各需要一个周期,那么,在正常情况下,每一个周期就能执行完一条指令。然而,在遇到转移指令时,流水线就可能断流。如图2.15(a)所示的一个简单程序,当执行JMP NEXT2指令时,由于转移的目的地址要在指令执行完成后才能产生,这时,下一条指令已经取出来了,因此,必须把已经取出来了的指令3作废,并按照转移地址重新取出正确的指令,如图2.15(b)所示。如果已经取出来了的指令3不

2、作废,而继续执行,那么,整个程序的语义就可能发生错误。有两种办法可以作废指令3,一种是用硬件来作废指令3,即控制指令3的执行结果不写入目的寄存器。另一种办法是通过软件在转移指令后面加入一条空操作指令(NOP)。但是,无论采用那一种办法,都要浪费一个周期。如果把JMP NEXT2这条指令提前执行,情况就完全不同了。如图2.16(a)所示,把第一和第二条指令交换位置。程序在流水线中执行的情况如图2.16(b)所示。这时,流水线没有断流情况发生,程序语义也正确。如图2.16所示。延迟转移技术:在转移指令之后插入一条有效的指令,程序执行时,要等这条插入的指令执行完成之后,才执行转移指令,因此,转移指令

3、好象被延迟执行了,这种技术称为延迟转移技术。图2.15因转移指令引起的流水线断流图2.16采用延时转移技术的指令流水线采用指令延迟转移技术时,指令序列的调整由编译器自动进行,一般不需要人来干预,但是,如果要在目标程序一级调试程序,这种已经被调整过了的程序将很难看懂,很容易引起人们的误解。很容易会提出这样一个问题:如果是条件转移指令时,还能不能采用延迟转移技术呢?我们来看下面的程序:1: MOVE R1, R22: CMP R3, R4 ;(R3)与(R4)比较3: BEQ EXIT ;如果(R3)(R4)则转移到NEXT4: ADD R4, R5N: NEXT: MOVE R4, A重新调整一

4、下程序的指令序列,把原来的第一条指令插入到条件转移指令之后。得到一个新的程序:1: CMP R3, R4 ;(R3)与(R4)比较2: BEQ EXIT ;如果(R3)(R4)则转移到NEXT3: MOVE R1, R2 ;插入一条指令,但不能有数据相关,不能改变条件码4: ADD R4, R5N: NEXT: MOVE R4, A以上程序在执行时流水线就不会有断流情况发生。必须注意:调整指令序列一定不能改变原来程序的数据相关关系,即被移动指令中的所有数据存储单元与移动过程中所经过的指令的所有数据存储单元之间不能有数据的读-写、写-读和写-写相关。另外,还要求,被移动的指令不要破坏机器的条件码

5、,至少不要影响后面的条件码测试指令所要求的条件码。如果找不到符合上述条件的指令来调整程序中指令序列,那么,编译程序必须在条件转移指令后面插入一条空操作指令。如果指令的执行过程分为多个流水段,则要插入多条空操作指令。2指令取消技术采用指令延时技术,遇到条件转移指令时,调整指令序列非常困难,在许多情况下找不到可以用来调整的指令。有些RISC处理机采用指令取消技术。在使用指令取消技术的处理机中,所有转移指令和数据变换指令都可以决定下面待执行的指令是否应该取消。如果指令被取消,其效果相当于执行了一条空操作指令,不影响程序的运行环境。为了提高程序的执行效率,应该尽量少取消指令,以保持指令流水线处于充满状

6、态。因此,可以采用如下规则:如果是向后转移(转移的目标地址小于当前程序计数器PC的值),则在转移不成功时取消下条指令,否则,执行下条指令;如果是向前转移,则正好相反,在转移不成功时执行下条指令,否则,取消下条指令。 循环体的第一条指令(X X X)经调整后安排在两个位置,第一个位置是在循环体的前面,即在进入循环之前要先执行一次。第二个位置安排在循环体的后面,即在循环的出口条件判断指令COMP的下面。如果转移成功,则执行下面的X X X指令,然后返回到LOOP;如果转移不成功,则取消下面的X X X指令,接着执行W W W指令。 由于向后转移时,绝大多数情况下是转移成功的,只有在循环全部结束最后

7、一次,转移才不成功。因此,采用这种指令取消技术能够使指令流水线在绝大多数情况下不断流,保持很高的流水效率。对于向前转移的情况,即IF THEN控制结构,有如下一个程序:如果COMP指令的转移条件不成立,则下条指令T T T不取消,“THEN”部分的程序代码照常执行;如果转移条件成立,下条指令T T T的执行被取消,程序执行转向THRU位置,“THEN”部分的程序代码全部不执行。由于向前转移成功与不成功的概率通常各为50,因此,采用正常的指令取消技术就可以了。另外,对于条件分支中只有一条指令的情况,可以采用隐含转移技术。例如,为了实现下面的语句:IF (ab) THEN bb1用汇编语言可以写成

8、:COMP =, Ra, Rb ;a与b已经存放在通用寄存器Ra和Rb中INC Rb指令COMP比较a与b的大小,若(Ra)=(Rb),则取消下条指令,否则,执行下条指令。3重叠寄存器窗口技术RISC的指令系统比较简单,CISC中的一条复杂指令,在RISC中通常要用一段子程序来实现。因此,RISC程序中的CALL和RETURN指令要比CISC程序中的多。在执行CALL指令时,必须把硬件现场(主要包括程序计数器和处理机状态字)和程序本身的软件现场(主要指在子程序中要使用的通用寄存器等)保存到主存储器中。另外,还要把执行子程序所需要的参数从主程序传送过去。在执行RETURN指令时,要做相反的工作,

9、最后把运算结果传送回主程序。因此,执行CALL和RETURN指令时,访问存储器的信息量非常大。据统计,在PASCAL语言和C语言中分别有15和12的CALL和RETURN操作,而它们访问存储器的信息量却占整个访存信息量的44和45。为了使CALL和RETURN操作尽量少访问存储器,美国加洲大学伯克利分校的F, Baskett提出重叠寄存器窗口(Overlapping Register Window)技术。并且首先在RISC I上应用,在RISC II上,寄存器的数量增加到138个。目前,重叠寄存器窗口技术已经成为RISC的一种基本技术。重叠寄存器窗口的基本思想是:在处理机中设置一个数量比较大的

10、寄存器堆,并把它划分成很多个窗口。每个过程使用其中相邻的3个窗口和一个公共的窗口,而在这些窗口中有一个窗口是与前一个过程共用,还有一个窗口是与下一个过程共用的。与前一过程共用的窗口可以用来存放前一过程传送给本过程的参数,同时也存放本过程传送给前一过程的计算结果。同样,与下一过程共用窗口可以用来存放本过程传送给下一过程的参数和存放下一过程传送给本过程的计算结果。图2.18是RISC II中采用的重叠寄存器窗口。共有138个寄存器,分成17个窗口,其中,有一个由10个寄存器组成的窗口是全局窗口,能被所有过程访问。另外有8个窗口,每个窗口各10个寄存器,分别作为8个过程的局部寄存器。还有8个窗口,每

11、个窗口各有6个寄存器,是相邻两个过程公用的,称为重叠寄存器窗口。每个过程均可以访问32个寄存器,其中,有10个是所有过程公用的全局寄存器,有10个是只供本过程使用的局部寄存器,有6个是与上一过程公用的寄存器,还有6个是与下一过程公用的寄存器。图2.18 重叠寄存器窗口技术只要调用的深度不超过规定的层数(如8层),重叠寄存器窗口技术可以减少大量的访存操作。当调用层数超过规定层数时,称为寄存器溢出,这时,可以在主存中开辟一个堆栈,把超过规定层数的寄存器中的内容压入堆栈中。在SUN公司的SPARC处理机中,以及后来的Super SPARC和Utra SPARC处理机中,还把最后一个过程的公用寄存器与

12、第一个过程的公用寄存器重叠起来,形成一个循环圈。在调用层数很多时,可以循环使用。F, Baskett等人使用Quicksort和Puzzle两个程序对寄存器窗口技术的有效性进行了测试。Quicksort程序的特点是过程调用的次数在整个程序中所占的比例比较大,但调用的深度不大,而Puzzle程序正好相反。RISC II与VAX-11两种机器的比较结果如表2.14所示,RISC II的访存次数主要是寄存器窗口溢出引起的,而VAX-11访存次数是为了保持和恢复通用寄存器中内容而引起的。从表中看出,RISC II寄存器溢出的次数很少,只占千分之一左右,影响也不大。由于采用了寄存器窗口技术,由程序调用引

13、起的访问存储器次数只占程序总访存次数的1左右。表2.14寄存器窗口技术的效果 程序名称调用次数最大调用深度RISC II溢出次数RISC II访存次数VAX-11访存次数Quicksort111K(0.7)10644K(0.8)696K(50)Puzzle43K(8.0)201248K(1.0)444K(28)表2.15是RISC II处理机与几种CISC处理机的每次过程调用的开销比较。从表中可以看出,在执行时间、执行指令条数、访问存储器次数等方面,采用重叠寄存器窗口技术都是十分有效的。表2.15 过程调用所需开销的比较机 器执行指令条数执行时间(微秒)访问存储器次数VAX-11PDP-11M

14、C68000RISC II5199626221921015120.23.重叠寄存器窗口技术原因:RISC中,子程序比CISC中多因传送参数而访问存储器的信息量很大。实现方法:设置一个数量比较大的寄存器堆,并把它划分成很多个窗口。在每个过程使用的几个窗口中有一个窗口是与前一个过程共用,还有个窗口是与下一个过程共用。RISC机控制线路少,芯片上有大量通用寄存器,在执行程序时可以存放更多的操作数或公用参数,采用寄存器窗口技术还可以更好地支持过程的调用和返回,提高机器工作效率。寄存器窗口技术就是把整个寄存器组分成很多小组,每个过程分配一个寄存器小组,当发生过程调用时, 自动地把CPU转换到不同的寄存器

15、小组使用,不再需要作保存和恢复的操作,这个寄存器小组就叫做寄存器窗口,相邻的寄存器窗口间有部分是重叠的,便于调用参数传送。给每个过程提供有限数量的寄存器窗口,让各个过程的部分寄存器窗口是重叠的,这就是重叠寄存器窗口技术。图4.4.3是RISC II的寄存器窗口。每个窗口内的寄存器分为三个部分,一部分为参数寄存器有6个, 用来与高一级过程(本过程的主调过程)交换参数,第二部分为本地寄存器,供本过程自用有10个,第三部分为暂存寄存器也有6个,用来与低一级的过程交换参数。RISC II共有138个实际寄存器, 第0-9号实际寄存器为全局寄存器,存放各过程的公用参数, 各窗口都能用,其余的128个实际

16、寄存器分成8个窗口, 在任何一个时刻只能见到一个窗口,对这个窗口内的寄存器编号,它们就是程序或过程所能访问到的逻辑寄存器,共有32个,每个程序或过程只能直接访问到32个寄存器,在过程调用或返回时只要切换窗口即可,每次从高一级过程转到低一级过程时,前者的暂存寄存器和后者的参数寄存器是同一组的实际寄存器,这样在过程转换时,参数无需在寄存器中移动,窗口切换安排由编译程序自动完成。图中给出了A、B、C三个过程,A过程调用B过程,B过程又调用 C过程, 这些窗口按堆栈方式组织,采用相邻过程的低区和高区共用一组物理寄存器的重叠技术,不需要花费任何附加的操作可以实现两过程参数直接交换,因而显著减少过程调用和

17、返回执行时间、执行的指令条数和访问存储器的次数。每次调用新过程,切换到一个相邻的窗口,这种重叠寄存器窗口技术已经被很多RISC机采用。效果:可以显著减少过程调用和返回执行时间、执行的指令条数和访问存储器的次数。另外,要在主存中开辟一个堆栈,当调用层数超过规定层数(寄存器溢出)时,把溢出部分的寄存器中内容压入堆栈。窗口数毕竟是有限的, 当过程调用超过8重时,可通过在寄存器中开辟一个堆栈使得寄存器组有一个足够大虚拟容量可提供使用,把老的过程参数保存到存储器中,等嵌套深度减小后再恢复。环形管理窗口技术:寄存器组的组成实际上就像一个由互相间部分重叠的窗口构成的环形缓冲器,图4.4.4示出了一个有6个窗

18、口(W0W5)的环形缓冲器。图中画的情况是这个缓冲器存放的深度为4(A调用B,B调用C,C调用D),现行的过程是D,有一个现用窗口指示器CWP指向现在活动的窗口。 机器指令中用的是逻辑寄存器编号,一条机器指令要从寄存器存取数时, 要通过CWP确定实际寄存器编号。还有一个已保存窗口指示器SWP指向最近一次保存到存储器去的窗口, 若出现过程D要调用到过程E,则应把E需要的参数放在D的窗口暂存寄存器中(它同E窗口参数寄存器重叠),并把CWP推进一个窗口。如果 E过程再调用过程P, 因为F窗口同A窗口有重叠部分,过程F的参数将放到过程A的参数寄存器中, 这是不允许的。这时CWP已推进到同SWP相等。此

19、情况下就要发生中断, 先把过程A窗口保存到存储器中,把SWP向前推进一个窗口,然后再调用过程F。当从过程F返回时,则CWP每次返回一个窗口, 一直退回到过程B。要返回到过程A,这时CWP又同SWP相等, 再一次发生中断, 把过程A的窗口从存储器中取回寄存器,然后再返回到过程A。4指令流调整技术为了使RISC处理机中的指令流水线高效率地工作,尽量不断流。优化编译器必须分析程序的数据流和控制流,当发现指令流有断流可能时,要调整指令序列。对有些可以通过变量重新命名来消除的有数据相关,要尽量消除。这样,可以提高流水线的执行效率,缩短程序的执行时间。例如,有图2.19(a)这样一个简单的指令序列,由于存

20、在R3寄存器的数据相关,第二条指令必须等第一条指令执行完后才能开始执行,后续的指令也是这样。如果执行一条指令需要两个机器周期,那么,每两条指令之间都要浪费一个周期。图2.19 指令流调整技术ADD R1, R2, R3 ;(R1)(R2)R3 ADD R1, R2, R3ADD R3, R4, R5 ;(R3)(R4)R5 MUL R6, R7, R0MUL R6. R7, R3 ;(R6)(R7)R3 ADD R3, R4, R5MUL R3, R8, R9 ;(R3)(R8)R9 MUL R0, R8, R9 (a) 调整前的指令序列 (b) 调整后的指令序列图2.19(b)是通过优化编译器调整后的指令序列。在两条乘法指令中用R0寄存器代替原来的R3寄存器,消除了两条乘法指令与两条加法指令之间的数据相关,并且重新调整指令序列。调整后的指令序列比原指令序列的执行速度快一倍。调整指令序列,消除数据相关,提高流水线的工作效率还有很多种方法。在第五章流水线工作原理等章节还要详细介绍。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号