[发明专利]高速执行子程序转移指令的程序变换装置和处理器无效
申请号: | 96103712.1 | 申请日: | 1996-03-22 |
公开(公告)号: | CN1099074C | 公开(公告)日: | 2003-01-15 |
发明(设计)人: | 高山秀一;桧垣信生;富永宣辉;宫地信哉;漆原诚一 | 申请(专利权)人: | 松下电器产业株式会社 |
主分类号: | G06F9/45 | 分类号: | G06F9/45;G06F13/36 |
代理公司: | 中国专利代理(香港)有限公司 | 代理人: | 王勇,叶恺 |
地址: | 日本*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 高速 执行 子程序 转移 指令 程序 变换 装置 处理器 | ||
技术领域
本发明是一种关于将源程序翻译为机器语言指令序列并进行连接的程序变换装置,并且也与执行上述程序变换装置所产生的机器语言指令序列的处理器有关,特别是与一种能避免在执行转向子程序的控制转移指令时所发生的流水线停顿的程序变换装置和处理器有关。
背景技术
使CPU(以下简称“处理器”)处理高速化的基本技术之一便是流水线处理。流水线处理是将一条指令的处理划分为多个较小的处理单位(流水线阶段),利用各阶段同时进行处理,从而提高处理速度的技术。但是,在执行转移指令时,便会产生流水线停顿(混乱),使流水线处理的性能低于理想性能。这一现象,称为转移冒险(branch hazard)。
图1表示包括转移冒险的指令序列的状况。图2是执行图1的指令序列时将流水线用时钟周期来表示的示意图。流水线由三个阶段组成(IF:取指令阶段,DEC:指令译码阶段,EX:指令执行及有效地址生成阶段)。
现在假定指令1是一条转移到首地址为A的子程序的转移指令。在第一个时钟周期时在IF阶段所取得的指令1,要在第三个时钟周期的EX阶段才被执行,而在第四个时钟周期,地址为A的指令A才在IF阶段被取出,要执行这条指令,是在第六个时钟周期。也就是说,从这个例子中,已经由流水线取入的指令2、3必须放弃,从指令1开始执行到指令A执行为止,需要三个时钟周期。图2中,用灰色来表示流水线停顿。
为避免这样的转移风险,作为先有技术,有称为延迟转移的方法(例如,David A.Patterson和John L.Hennesy的ComputerArchitecture:AQuantitative Approach”,Morgan KaufmannPublishers,1990)。按此延迟转移方法,编译程序在编译时,对指令进行调整,例如,采用了这样的方法,即将转移目标指令预先移动到相当于转移指令的后继指令的位置(转移延迟槽)。
图3是转移目标指令放到了转移延迟槽时的指令序列的示意图。作为转移目标指令的指令A、B,作为转移指令1的后续指令,被移动到地址2、3。图4是图3中所示的指令序列被执行时的流水线。从该图可知,利用延迟转移方法,不会取出无效的指令,不会产生图2所示的流水线停顿,因而利用图3的延迟转移的调整方法,可以解决转移冒险问题。但是,利用延迟转移方法,并不一定能将转移目标指令移动到转移延迟槽中,并不总能消除转移冒险这一问题。具体来说,在图1所示的例中,有时编译程序并不能识别出以地址A为首址的子程序。通常,编译程序逐个对包含程序的文件进行翻译,有时包含指令1的程序和包含指令A、B的子程序是处于不同的文件中。因此,当只给定包含有指令1的程序所在的文件时,编译程序就不能将转移目标指令A、B移动到转移延迟槽中,因而不能进行调整。因此,当要转移到处于其它文件中的指令时,仍旧会产生转移冒险的问题。
为了避免上述问题,考虑过多种方法,例如在编辑程序时,尽量不要转移到处于其它文件中的子程序,或者是预先对程序中发生转移的位置进行调查,将有关的子程序都收集到同一个文件之中,在进行上述处理之后,再进行编译。但是,这样的方法,在设计程序时必须时常考虑到转移目标处的指令配置,导致了程序的设计或开发的作业效率下降。进而,作为编译单位的文件长度增大,使编译的时间过长。
发明内容
本发明的目的,就是要提供一种变换装置,对子程序调用指令和被调用的子程序来说,即使它们存储在不同的文件中,也不会产生流水线停顿,该程序变换装置就是要生成这样的能够调用子程序的可执行程序,本发明的另一个目的,是提供能够执行前述可执行程序的处理器。
为了达到上述目的,下述的程序变换装置以及执行它的可执行程序的处理器便可达到这一目的。
首先,在将程序翻译为机器语言指令序列时,对程序中的各子程序,逐个地检测出它们所需堆栈的长度,与机器语言指令序列同时保存到文件中。
其次,在连接分散在多个文件中的机器语言指令序列时,从机器语言程序中检测出转移到子程序的转移指令,从包含有该转移目标子程序的前述文件中,读出该子程序所需的堆栈的长度,并将该转移指令转换为既包括转移到转移目标,又包括分配所需堆栈长度的堆栈空间而执行的一系列操作为内容的指令序列。
执行这样的可执行目标程序的处理器,并不象通常的那样在子程序的转移指令执行之后,再取出分配堆栈的指令,而是连续取出子程序转移指令和分配堆栈的指令。
此外,利用下述的程序变换装置和执行其可执行目标程序的处理器,便可达到上述目的。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于松下电器产业株式会社,未经松下电器产业株式会社许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/96103712.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:丙烯聚合物组合物和热模制品
- 下一篇:袋装式多功能刀