用于在推测微处理器中转换指令的方法

文档序号:6537211阅读:176来源:国知局
专利名称:用于在推测微处理器中转换指令的方法
背景技术
发明领域本发明涉及计算机系统,尤其涉及用于提高微处理器的操作效率的方法,该微处理器动态地将指令从目标指令集转换到主机指令集,并推测(speculate)被转换的分支操作。
现有技术的历史近年来,人们开发了一种新的微处理器,它将简单但快速的主机处理器(被称作“变体主机(morph host)”)和软件(被称作“代码变体软件(code morphsoftware)”)组合起来,以便执行为一种处理器(“目标”处理器)设计的应用程序,该处理器具有与变体主机处理器不同的指令集。变体主机处理器执行代码变体软件,该软件将目标程序动态地转换成能够实现原来的目标软件的目的的变体主机处理器指令。当目标指令被转换时,新的主机指令被执行并被存储在转换缓冲器中,在那里,它们可以被存取起来而无须进一步转换。虽然程序的初始转换缓慢,但是,一旦被转换,现有技术的硬件因执行程序通常所需的许多步骤就不再需要了。新的微处理器已经证明,简单、快速的低功能处理器能够以等同于“目标”处理器(程序为它而设计)的一种速率来执行被转换的“目标”指令。
为了能够快速执行为其他处理器设计的程序,变体主机处理器包括许多硬件改进。其中的一项改进是门控存储缓冲器,它保存执行各个序列的变体主机指令时所生成的存储器内存。第二项改进是一套主机寄存器,它们存储任何序列的正在被转换的目标指令开始时目标处理器的状态。如果被转换的变体主机指令的执行没有出现例外,则该序列指令开始时的目标状态被更新到完成该序列的点处的目标状态,存储器内存进行记忆。
如果在执行已被转换的一系列主机指令期间发生例外,则处理停止;整个操作可返回到该序列的目标指令的开端(其处存在目标处理器的已知状态)。这使得能够非常快速、准确地处理例外,同时动态地转换和执行指令。
读者将注意到,通过在已成功完成执行之前影响暂时存储器,新的微处理器处理转换的执行所用的方法是一种非常快速的有效推测(speculate)方法。实际上,新的微处理器使用相同的线路,用于推测其他操作的结果。例如,通过临时保存由自然转换的序列指令得到的软件调度程序所重新安排的各个序列指令的执行结果,与现有技术中进行的尝试相比,可以实现更进取的重新安排。当执行这种被重新安排的序列的指令以产生正确的结果时,由执行被重新安排的序列所产生的存储器内存可以被记住,目标状态可以被更新。如果被重新安排的序列在执行时生成例外(exception),那么,处理器的状态可以返回到序列开始时的目标状态并且采用一种更保守的方法来转换序列。
新的微处理器最有利的一个特点是它链接短序列的目标指令的能力,这些短序列的目标指令已被转换,并被发现无例外地加以执行,以便形成较长序列的指令。这使得可以高速执行转换程序,因为微处理器不需要查找每个较短的被转换序列或经历通常由硬件处理器采取的所有步骤来执行指令。甚至可以达到比可能预期的更高的速度,因为一旦长序列被链接,优化器就经常可以取消许多步骤,而不改变产生的结果。硬件优化器从未能够优化足够长的各个序列的指令,以便允许某些模式使重要的优化能够变得显而易见(例如,回路)。
新的处理器所用的原来的推测方法总是通过记住来自门控存储缓冲器的存储并在已被正确执行的一系列指令结束时和任何下一个序列的目标指令被转换之前将新的状态转换到目标寄存器,来更新目标处理器的状态。这种更新状态的方法对于许多情况而言是有效的。
但是,该方法的某些特征在某些环境中不太有用。首先,通常需要执行尽可能长的序列。为了获得各个提交之间的长序列指令,经常必须包括后面不紧跟提交指令的一个或多个分支指令。当代码变体软件确定几乎所有时间都采用分支并决定将通常所采用的分支作为正常的执行路径来处理时,可能会发生这种情况。代码变体软件推测,这是将被采用的分支,并忽略分支指令后的提交指令,以便提供可进一步被优化的较长序列。但是,由于没有紧跟每个内部分支指令的提交指令(那时,目标处理器的状态在采用分支之前被提交),因此,如果在采用内部分支之后的序列执行期间的某个点发生例外,则机器的操作必须返回分支指令前的初始序列的开端(是存在目标处理器的正确状态的最后的点)。这可能十分费时。
其次,提交被存到内存的同时推测各个序列的主机指令的原来的方法很有用,因为需要创建尽可能长的转换,以便加速执行。但是,各个序列的指令会由采用在不被提交指令跟随的各个序列内的分支而产生,提交指令很长,以致存储器内存的数量对于被用来实现推测的门控存储缓冲器的限定的长度而言太大。这使执行停止,使重新运行发生,使较短序列的指令被生成,过程执行被减慢。
另一个问题由在被转换的序列结束时提交被存到内存的这种原来的方法所引起。当该序列的某个部分的所有步骤必须被不中断地连续完成以便产生所需的结果时,会发生这个问题。输入/输出操作经常是这些序列的一个例子。在这些情况下,通常关闭中断,直到序列结束。但是,在序列结束时必须释放关闭,以便实现优化的全部好处。但是,没有提交,就不会发生解锁,因为在序列锁定期间被尝试的任何异步中断因锁定而被延迟,它将被产生并使执行返回到最近已知的正确状态。这会使输入/输出等操作被重复,这会违反系统的语意(原文symantics,估计是semantics——译者注)。
人们需要一种改善、提供转换各个序列的指令的新方法,通过这种方法,可以维持或提高新的微处理器的速度。
发明概要所以,本发明的目的是加速能够运行为其他微处理器设计的应用程序的微处理器的执行。
本发明的这个和其他目的通过主机微处理器使用的一种方法来加以实现,它将指令序列从用于目标处理器的目标指令集转换成用于主机微处理器的指令序列,包括的步骤是通过提交目标处理器的状态和在目标处理器的状态已知的目标指令执行中的一个点存储由执行以前生成的存储器内存,开始执行第一目标指令序列;执行推测序列的主机指令,直到目标处理器的状态已知的目标指令执行中的另一点为止;如果执行失败,则返回到目标处理器的最近被提交的状态,并且放弃由推测序列的主机指令所产生的存储器内存,如果通过提交目标处理器的状态和存储以前生成的存储器内存而执行成功,则开始执行下一序列的目标指令。
通过参考以下详细的描述并结合附图,读者将能更好地理解本发明的这些和其他的目的与特点。附图中,相同的元件所表示的意义相同。
附图简述

图1示出的是转换指令的一种方法,这些指令已在以前版本的新微处理器中得以实践。
图2是根据本发明来转换新微处理器中实行指令的一种方法。
图3示出另一种根据本发明来转换新微处理器中实行的指令的方法。
图4示出另一种根据本发明来转换新微处理器中实行的指令的方法。
详细描述现在参考图1,该图描述了一系列指令的执行。该图左下侧处的图例提供了对图中一部分的定义。箭头处结束的直线代表正在被执行的一个序列的转换指令,圆圈代表提交操作。由于在本发明之前,指令序列通常是使用新微处理器来执行的,因而该指令序列的执行从点10处的开端开始,并继续到发生提交操作的点11处的末端。这由左边最上面的序列表示,该序列在“开始”处开始,一直进行到“提交”。在执行这种短序列的过程中,直接在“开始”点(它是目标操作的状态已知的最近的一个点)之前存在的各种操作状态被记录下来。当该序列的执行在刚超过点11的提交操作处终止时,提交点处的必要的操作状态被保存下来。
在包括一项分支操作的短指令序列中,如果分支在该序列结束时发生,则目标处理器的适当状态就在执行分支序列之前被提交。结果,在任何一个分支中发生的例外所具有的效果是使操作返回提交点,其处,正确的状态直接存在于开始执行分支序列之前。
但是,在该序列的目标指令中,将开始执行分支操作,而无需提交操作。例如,转换与优化软件可以推测一个分支将几乎总是被包括在内,并认为那个方向是该指令序列的正常方向。在这种情况下,软件可创建一个序列,其中,退出点处的状态是不提交的。图中左上侧的序列就是这种序列,它在点10处开始,并将点12处的分支提供给第二序列。这种序列中,分支前是不发生提交操作的,这是因为转换软件将判断,通常可能将会执行从点10到点11的序列,并省略提交,以便加速执行。
当序列包括了在这种情况下所采用的分支操作时,执行过程将分支到第二序列,而无需在该分支处进行提交操作,分支序列在其开始指令(例如,点13)处开始执行。可发生提交的最早可能点是点14处分支序列完结的时候。如果分支序列在其结束之前也包括采用分支进行的分支操作(如图1最右边的第三个序列中),则甚至这种提交也不会发生。可见,这提供了在提交发生前具有无限制长度的序列转换的可能性。
因为如果在执行序列中的各个中间点处采用分支,则各个提交点之间的转换路径可能会太长,所以,当最后达到提交点时,还没有被提交的存储器内存的数量可能会太大。实际上,被执行的存储指令的数量可能会大于门控存储缓冲器中用于存储的空间。如果发生这种情况,则必须有所供应,以确保数据不会丢失。所以,翻译程序和优化器在将分支放置在各个序列的转换中间时必须更加保守。这已经有效地产生了更加缓慢执行的最佳代码。
由旧过程产生的第二个问题是如果正在各个点(其处,目标状态未被提交)被执行的一系列指令中采用许多分支,并且在大量指令已被执行之后的某个点处的执行时期发生失败,那么,在返回发生提交的最近的点和随后从该点转换之前执行指令的过程中将已经浪费许多时间。
当必须无中断地连续完成序列的某个部分的所有步骤以便产生所需的结果时,会发生在被转换的序列结束时提交被存到内存的这种原来的方法所产生的另一个问题。输入/输出操作经常是这些序列的一个例子。在这种情况下,通常关闭中断,直到完成序列为止。但是,关闭必须在序列结束时被释放,以便实现优化的全部好处。但是,没有提交,就不会发生解锁,因为在序列锁定期间被尝试的任何异步中断因锁定而被延迟,它将被产生并使执行返回到最近已知的正确状态。这会使输入/输出等操作被重复,这会违反系统的语意(原文symantics,估计是semantics——译者注)。
本发明排除了原来过程的这些问题。图2示出了使用本发明的过程的一套被链接序列的转换。在这个新的过程中,在发生目标指令的任何执行之前的新序列的开端过程中,在发生目标指令的任何执行之前的新序列的开端,提交指令存储操作的目前状态,它包括由前面正确执行的序列的转换指令生成的任何存储器内存。这样,当较早的序列包括分支指令时,如果对新指令序列采用该分支,则该新指令序列从提交操作开始。如果不采用分支,则序列继续到目标处理器的状态已知的末端。在该点处,新序列的执行从提交操作开始,该提交操作提交已知状态并存储由执行前面的序列生成的存储器内存。
新的过程产生正确的结果。在决定将采用的分支之后和刚刚在开始执行下一个序列的转换指令之前,序列指令在分支点结束后存在的目标处理器的状态被提交。为了达到在分支后面将被转换的新序列的指令,前面的指令序列一定已经由新的微处理器无误地执行。如果前面的指令序列没有正确地执行,则尝试执行将会生成导致重新运行的中断;主机将不在分支处开始转换分支序列的指令。所以,转换指令的正确执行已经发生,可以提交由程序执行所生成的新的目标状态和存储器内存。
新过程有许多好处。首先,提交点之间发生的任何序列的存储长度只会与从发生最近提交的初始点(例如,图2中的点20到点21)的单一转换中最长的那一指令序列一样长。因此,该序列的存储是受限的。这样可以密切控制可能位于门控存储缓冲器中的未提交存储的数量,以便很少发生存储缓冲器的溢出。
其次,由于只要在执行分支后面的下一个序列指令的开端采用分支就会发生提交,因此,没有未提交的分支操作。这样,如果发生例外,在采用分支后必须进行重新运行操作,则处理器已做的工作量被放弃。必须被放弃的存储的数量被严格加以限制。这样,大大减少了因重新运行而带来的延迟。
新过程也允许开始和释放锁定操作,而不会生成不合乎需要的重新运行操作或在一段不确定的时期内扩展处于锁定下的处理模式。图3示出了许多序列的转换指令,这些转换指令包括一个部分,在该部分中,必须在锁定下执行一套指令,以便正确地执行。为了开始锁定,翻译过程生成一个锁定指令。从该点一直到序列达到分支指令,过程按连续的顺序转换指令,而无须重新安排或优化(而不是例如在锁定开始前可能已测试的那样)。在过程应该从锁定被释放的分支处,采用多个分支中的一个分支。在采用该分支之后,不管跟随哪个路径,当新序列开始执行时,会发生提交。提交操作保存提交点处的已知状态,以便重新运行不放弃正确的转换。然后,选择的分支执行解锁指令,以便按连续执行指令的要求来释放序列。继续从那个点执行分支序列的指令的剩余部分。
为了确保一完成要求锁定的序列就发生解锁,操作的锁定状态的指示与状态一起被存储在每个提交处。在一个实施例中,这个指示是被存储在主机处理器的上下文寄存器(context register)中的一个位。这个锁定指示在序列开始时被确定,并指出在序列期间存在的状态。这个锁定指示被用于操作的其他状态(包括目标状态),以便在下一个提交点处确定接下来跟随的序列指令。也就是说,下一个序列必须提供解锁指令,用于终止锁定条件,以便成为可以接下来秩序井然地发生的合格序列。执行接下来可以实行的任何一个分支都应该是这种形式。
通过组合前面过程和较佳实施例的各个方面,与较佳方法相比,更有可能利用处理的其他方法。例如,图4示出了一个过程,该过程组合两个过程的特点并提供某些优点。所示过程使用在一系列指令结束时发生的提交,这些提交用于包括锁定操作的指令序列。所有其他的指令序列按本发明的方式或在操作开始时提交。包括一个不可中断部分的一系列指令通常要求秩序井然地执行该指令序列,它排除了多数优化。这样,虽然序列的顺序不能改变的,但是,额外的提交可以被加到序列,因为它们不改变被锁定的序列。通过将提交放置在序列的末端处,然后通过除去锁定,涉及锁定的状态可以被包含在一个指令序列内。这具有的优点是允许一系列转换的状态被作为不可中断操作的场所来处理。按具有所述效果的上述方式来执行其他被转换序列的操作。
虽然已经根据一个较佳实施例描述了本发明,但是,读者将理解,在不脱离本发明的精神和范围的前提下,精通该技术领域的人员可以进行各种修改和变化。所以,本发明应该按照以下的权利要求书来被衡量。
权利要求
1.一种主机微处理器使用的方法,它将指令序列从用于目标处理器的目标指令集转换成用于主机微处理器的指令序列,其特征在于,它包括以下步骤通过提交目标处理器的状态以及在目标处理器的状态已知的指令执行中的某一点处存储由以前执行的各个指令序列所生成的存储器内存,开始执行第一个目标指令序列,通过立即提交状态并存储存储器内存,开始执行来自第一目标指令序列的分支后面的推测(speculative)序列的主机指令,尝试执行该推测序列的主机指令,直到目标指令执行中的另一个点为止,该点处的目标处理器的状态为已知,如果执行失败,则返回到目标处理器的最近被提交的状态,并放弃由推测序列的主机指令生成的存储器内存,以及如果执行成功,则开始执行下一个序列的目标指令。
2.如权利要求1所述的方法,其特征在于,它包括另一个步骤,即,在提交目标处理器的状态和存储由以前执行的转换序列生成的存储器内存之后,立即释放在被锁定条件下运行的所有序列的主机指令的锁定。
3.一种主机微处理器使用的方法,它将指令序列从用于目标处理器的目标指令集转换成用于主机微处理器的指令序列,其特征在于,它包括以下步骤通过提交目标处理器的状态并在目标处理器的状态已知的指令执行中的某一点处存储由以前执行的各个序列指令生成的存储器内存,开始执行第一目标指令序列,执行来自第一目标指令序列的主机指令序列,直到目标处理器的状态已知的目标指令转换中的另一点为止,所述第一目标指令序列在提交所述目标处理器的状态和存储由执行以前生成的存储器内存之后立即开始,通过提交目标处理器的状态并在该状态已知的目标指令执行中的某一点处存储由执行第一目标指令序列所生成的存储器内存,开始执行下一个目标指令序列,执行来自下一目标指令序列的主机指令序列,直到目标处理器的状态已知的目标指令执行中的另一点为止,所述下一个目标指令序列在提交了目标处理器的状态和存储了由执行第一目标指令序列生成的存储器内存之后立即开始。
4.一种主机微处理器使用的方法,它将指令序列从用于目标处理器的目标指令集转换成用于主机微处理器的指令,其特征在于,它包括以下步骤转换来自第一目标指令序列的第一推测序列的主机指令,所述第一目标指令序列来自所述目标处理器的状态已知的目标指令转换中的一个点,响应于遇到来自目标程序中第一序列的分支而结束第一目标指令序列,方法是分支到分支序列的目标指令,在执行分支序列的主机指令之前,提交目标处理器的状态并存储由所采用的分支后的第一转换序列生成的存储器内存,以及,如果不从第一序列采用分支,则结束执行第一目标指令序列,方法是如果执行失败,则返回到目标处理器最近被提交的状态,并且放弃由推测序列的主机指令生成的存储器内存,以及提交目标处理器的状态,并存储在目标处理器的状态已知的该序列的目标指令结束时由第一序列生成的存储器内存。
全文摘要
一种主机微处理器使用的方法,将指令序列从用于目标处理器的目标指令集转换成用于主机微处理器指令序列,包括的步骤是:通过提交目标处理器的状态和在目标处理器的状态已知的指令执行中的一个点(20)处存储由执行以前生成的存储器内存,开始执行推测序列的目标指令;执行推测序列的主机指令,直到目标处理器的状态已知的目标指令执行中的另一点(21)为止;如果执行失败,则返回到目标处理器的最近被提交的状态,并且放弃由推测序列的主机指令生成的存储器内存;如果执行成功,则开始执行下一个序列的目标指令。
文档编号G06F9/38GK1379875SQ00814345
公开日2002年11月13日 申请日期2000年9月6日 优先权日1999年10月13日
发明者L·托瓦尔德斯, R·贝迪切克, S·约翰森 申请人:全斯美达有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1