CN100346314C - 保存代码重新排序中的精确异常的方法和设备 - Google Patents
保存代码重新排序中的精确异常的方法和设备 Download PDFInfo
- Publication number
- CN100346314C CN100346314C CNB031560741A CN03156074A CN100346314C CN 100346314 C CN100346314 C CN 100346314C CN B031560741 A CNB031560741 A CN B031560741A CN 03156074 A CN03156074 A CN 03156074A CN 100346314 C CN100346314 C CN 100346314C
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- software
- recovery block
- place
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 80
- 238000011084 recovery Methods 0.000 claims abstract description 52
- 230000008707 rearrangement Effects 0.000 claims description 26
- 230000002159 abnormal effect Effects 0.000 claims description 11
- 230000008878 coupling Effects 0.000 claims description 9
- 238000010168 coupling process Methods 0.000 claims description 9
- 238000005859 coupling reaction Methods 0.000 claims description 9
- 230000037431 insertion Effects 0.000 claims description 4
- 238000003780 insertion Methods 0.000 claims description 2
- 230000000694 effects Effects 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 42
- 238000010586 diagram Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 3
- 239000000654 additive Substances 0.000 description 2
- 230000000996 additive effect Effects 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
揭示了用于通过采用控制预测来保存代码重新排序中的精确异常的方法和设备。所揭示的系统使用一个控制预测模块来重新排序应用程序内的指令并保存精确异常。如果指令满足特定的条件,无论是异常指令或者非异常指令,都可由控制预测模块来重新排序。当重新排序异常指令时,校验指令被插入到程序执行路径中,并且生成了一个恢复块。校验指令确定被重新排序的异常指令是否实际需要生成一个异常。恢复块包含用于逆转代码重新排序的效果的指令。如果校验指令检测到需要一个异常,将执行恢复块来恢复处理器的体系状态并处理异常。
Description
技术领域
本发明涉及代码重新排序,尤其涉及用于通过采用控制预测来保存代码重新排序中的精确异常的方法和设备。
背景技术
代码重新排序使一条指令或者指令序列,在获知动态代码流实际到达程序中指令序列所需的位置之前,即可被执行。这样,通过预见(lookahead),可以删除程序流中的等待时间。由于指令可被提前执行,代码重新排序可以提高应用程序的性能。不过,由于被重新排序的指令将生成其他情况下不会生成的异常,被重新排序的代码序列将产生与标准代码流所生成的不同的体系状态。在诸如二进制翻译等必须保存精确异常的特定环境中,这可能是无法接受的。
已经提出了可以解决保存精确异常的问题的方法,但是所有这些方法都将在硬件、处理速度和(或)存储器方面招致一些额外的代价。这些方法中,其中一些需要有不可以为通用目的访问的附加寄存器,并且需要附加的处理运算来恢复体系状态。其他方法需要附加的硬件支持和存储器来保存预测的寄存器值,并使用原始的代码序列来恢复体系状态。
发明内容
本发明涉及一种保存代码重新排序中的异常的方法,该方法包括:接收软件指令序列,所述软件指令序列包括一条在该序列内的第一位置处的软件指令;确定该软件指令是不是异常指令;如果该软件指令是异常指令,在所述软件指令序列内的第二位置处插入与该软件指令相关的控制预测指令;在第一位置处用一条校验指令代替第一位置处的该软件指令;以及生成一个从该校验指令分支出来的恢复块,该恢复块包括该软件指令的一份拷贝。
本发明还涉及一种保存代码重新排序中的异常的方法,该方法包括:接收包括一条第一指令在内的多条指令;确定第一指令是不是异常指令;确定第一指令是否要被上移跨越一条校验指令;如果第一指令不是异常指令并且要被上移跨越一条校验指令,在所述多条指令内,确定一条用于计算与第一指令相关联的目标寄存器的先前值的第二指令;确定与第二指令相关联的源操作数是否可为校验指令所用;如果与第二指令相关联的源操作数不可为校验指令所用,向所述多条指令中插入一条第三指令来保存目标寄存器的值;以及向一个恢复块中插入一条第四指令来恢复目标寄存器的值。
本发明还涉及一种保存代码重新排序中的精确异常的设备,该设备包括:用于执行多条软件指令的处理器;与处理器可操作地耦联用以保存所述多条软件指令的存储器设备;与处理器可操作地耦联的控制预测模块,该控制预测模块被构建为向所述多条软件指令中插入软件指令的控制预测指令;以及与处理器可操作地耦联的异常处理程序,该异常处理程序被构建为用来处理与软件指令的控制预测指令相关联的异常。
本发明还涉及一种用于保存代码重新排序中的精确异常的设备,该设备包括一个计算设备,该计算设备包括:接收软件指令序列的装置,所述软件指令序列包括一条在该序列内第一位置处的软件指令;确定该软件指令是不是异常指令的装置;如果该软件指令是异常指令,在所述软件指令序列的第二位置处插入与该软件指令相关的控制预测指令的装置;在第一位置处用一条校验指令代替第一位置处的该软件指令的装置;生成一个从校验指令分支的恢复块的装置,该恢复块包括该软件指令的一份拷贝。
附图说明
图1是显示用于所揭示的系统的环境的一个计算机系统的示范实施例的框图。
图2是显示用于所揭示的系统的环境的另一个计算机系统的示范实施例的框图。
图3是示例机器可读指令的一个典型流程图,该示例机器可读指令可由一设备执行,来实现一个在保存精确异常的同时,进行代码重新排序的方法的示范实施例。
图4是示例机器可读指令的一个典型流程图,该示例机器可读指令可由一设备执行,来实现一个重新排序异常指令的方法的示范实施例。
图5是图4中所示的流程图的继续。
图6是示例机器可读指令的一个典型流程图,该示例机器可读指令可由一设备执行,来实现一个向上跨越一条校验指令重新排序指令的方法的示范实施例。
图7是示例机器可读指令的一个典型流程图,该示例机器可读指令可由一设备执行,来实现一个向上跨越一条校验指令重新排序指令的方法的示范实施例,其中,与该指令相关联的目标寄存器由异常指令决定。
图8是示例机器可读指令的一个典型流程图,该示例机器可读指令可由一设备执行,来实现一个向上跨越一条校验指令重新排序指令的方法的示范实施例,其中,与该指令相关联的目标寄存器和异常指令无关。
图9是示例机器可读指令的一个典型流程图,该示例机器可读指令可由一设备执行,来实现一个向下跨越一条校验指令重新排序指令的方法的示范实施例。
图10是图9中所示流程图的继续。
具体实施方式
总体上,所揭示的系统采用一个控制预测模块来重新排序应用程序内的指令并保存精确异常。通过将异常推迟和在更晚的时间检测异常来重新定位异常指令并且保存它们的异常。利用控制预测模块,其他指令(即,非异常指令)也可以在应用程序内被重新定位。指令被重新定位时,生成了一个恢复块。恢复块包括可以被执行来将处理器的体系状态恢复到和代码重新排序未发生时一样的状态(例如,和正常程序流被有效执行时一样的状态)的指令。如果检测到了一个被推迟的异常,就执行恢复块,恢复体系状态,同时处理异常。
图1是显示用于所揭示的系统的环境的一个计算机系统的示范实施例的框图。计算机系统100可以是个人计算机(PC)或者任何其他计算设备。在所示的示范实施例中,计算机系统100包括由电源104供电的主处理单元102。主处理单元102可以包括处理器106,其通过系统互连108与主存储器设备110、闪存设备112,以及一个或多个接口电路114电气耦联。在一个示范实施例中,系统互连108是地址/数据总线。当然,本领域内具有普通技术水准的人很容易明白,除了总线,其他互连也可以用于将处理器106与其他设备110、112和114连接起来。在一个示范实施例中,可以用一个或多个专用线和(或)一个十字头(crossbar)来将处理器106与其他设备110、112和114相连。
处理器106可以是任何公知类型的处理器,例如一个Intel Pentium微处理器系列、Intel Itanium微处理器系列、Intel Centrino微处理器系列,和(或)Intel XScale微处理器系列的处理器。此外,处理器106可以包括任何公知类型的高速缓存,例如静态随机存取存储器(SRAM)。主存储器设备110可以包括动态随机存取存储器(DRAM)和(或)任何其他形式的随机存取存储器。在一个示范实施例中,主存储器设备110可以包括双倍数据速率随机存取存储器(DDRAM)。主存储器设备110也可以包括非易失存储器。在一个示范实施例中,主存储器设备110保存了一个由处理器106按照公知的方式执行的一个软件程序。闪存设备112可以是任何类型的闪存设备。闪存设备112可以保存用于引导计算机系统100的固件。
接口电路114可以用任何公知类型的接口标准(例如,以太网接口和(或)通用串行总线(USB)接口)来实现。可以将一个或多个输入设备116连接到接口电路114,以便向主处理单元102输入数据和命令。在一个示范实施例中,输入设备116可以是键盘、鼠标、触摸屏、跟踪板、跟踪球、isopoint,和(或)语音识别系统。
通过一个或多个接口电路114,也可将一个或多个显示器、打印机、扬声器和(或)其他输出设备118连接到主处理单元102上。显示器118可以是阴极射线管(CRT)、液晶显示器(LCD),或者任何其他类型的显示器。显示器118可以生成主处理单元102运行期间生成的数据的可视表示。可视表示可以包括用于人工输入的提示符、计算值、检测数据等。
计算机系统100也可以包括一个或多个存储设备120。在一个示范实施例中,计算机系统100可以包括一个或多个硬盘驱动器、光盘(CD)驱动器、数字多媒体光盘驱动器(DVD),和(或)其他的计算机介质输入/输出(I/O)设备。
计算机系统100也可以通过和网络124相连与其他设备122交换数据。网络连接可以是任何类型的网络连接,例如以太网联接、数字用户线(DSL)、电话线、同轴电缆等。网络124可以是任何类型的网络,例如互联网、电话网、电缆网,和(或)无线网络。网络设备122可以是任何类型的网络设备122。在一个示范实施例中,网络设备122可以是客户机、服务器、硬盘驱动器等。
图2显示了另一个示范实施例计算机系统200。在这个示范实施例中,计算机系统200包括处理器202、控制预测模块206、主存储器204、异常处理程序208和程序指令210。
此外,处理器202可以是任何公知类型的处理器,例如一个IntelPentium微处理器系列、Intel Itanium微处理器系列、Intel Centrino微处理器系列,和(或)Intel XScale微处理器系列的处理器。主存储器设备204可以包括动态随机存取存储器(DRAM)和(或)任何其他形式的随机存取存储器。在一个示范实施例中,主存储器设备204可以包括双倍数据速率随机存取存储器(DDRAM)。主存储器设备204也可以包括非易失存储器。在一个示范实施例中,主存储器设备204保存了一个可由处理器202按照公知的方式执行的软件程序。
典型情况下,处理器202从程序指令210中取一条或多条指令,并且按照指令210排列的顺序执行由每条取到的指令所定义的操作。指令210可以是处理器的指令集中的任何指令,如数学/逻辑操作和(或).存储器操作。
在一个示范实施例中,由于存在一个控制预测模块206,程序指令210可以乱序执行。控制预测模块206使得指令210可以被重新排序,并在获知动态代码流实际到达程序210中被重新排序的指令所需的位置之前执行。这有助于提高应用程序的性能。
异常指令是指可以导致异常发生的指令。当程序210中的一条异常指令被重新排序时,问题就会发生。典型情况下,当一条异常指令发出信号通知一个异常已经发生时,异常处理程序208将通过指定的方法来提供异常服务。该指定方法可以包括,但不限于,保存冲突指令的地址和(或)将计算机系统100的控制权移交给某些指定地址处的某些其他的应用软件或程序。在一个示范实施例中,算术溢出是一个可能由乘法指令产生的异常。当处理器202检测到算术溢出时,将保存乘法指令的地址。随后,异常处理程序208把控制权交给计算机系统100来处理该异常。
由于被重新排序的异常指令(其将生成一个异常)实际上可以不必按照原始程序流来执行,问题就会发生。在一个示范实施例中,如果一条加载指令被重新排序,并且加载指令在被原始(即,未被重新排序的)程序流执行前就被执行,加载指令将生成一个异常。不过,由于程序的原始动态流实际上可能没有执行该加载指令,这个异常实际上可能不需要处理。这样,当一条被重新排序的异常指令生成一个异常时,该异常就被推迟了,而控制权也没有移交给异常处理程序208。相反,在到达异常指令将被原始程序流执行的位置处(即,被推迟的异常点)前,程序指令210将继续按照重新排序过的序列执行。当到达该被推迟的异常点并且检测到该被推迟的异常时,异常指令被重新执行,而同时异常处理程序208也被允许接收控制权。
图3-10是示例机器可读指令的典型流程图,该示例机器可读指令可由一设备执行,来实现一个通过采用控制预测来保存代码重新排序中的精确异常的示例方法。优选地,六个显示的流程(例如,300、400、600、700、800和900)被具体实现在一个或多个软件程序中,这些软件程序保存在一个或多个存储器(例如,闪存112和(或)硬盘120)中,并且由一个或多个处理器(例如,处理器106)按照公知的方式执行。不过,流程300、400、600、700、800和900的一些或者全部块可以由人工和(或者)通过其他一些设备来完成。尽管流程300、400、600、700、800和900是用图3-10中所显示的流程图来描述的,本领域内具有普通技术水准的人很容易明白,可以使用许多其他方法来完成这六个流程300、400、600、700、800和900。在一个示范实施例中,许多块的次序可以更改,一个或多个块的操作可被改变,块可以被组合和(或)被取消。
通常,示例的流程300使用一个控制预测模块206来重新排列一个程序的指令210,以便提高应用程序的性能。控制预测使程序的指令210可以被重新排序,以便一条或多条指令可以不按照原始次序执行。此外,控制预测允许由被重新排序的指令生成的异常被推迟并在程序的指令执行路径中的更晚时刻进行处理。体系状态,如寄存器内容,可以被恢复到未发生代码重新排序时的状态。这可以通过执行位于恢复块中的指令来完成。换言之,恢复块包括一个逆转代码重新排序的效果的指令序列。
流程300开始时,检查程序的指令210,并且确定是否有任何代码移动候选者(块302)。代码移动候选者是指可被重新排序的指令。编译器或者二进制翻译器应用程序可以按照公知的方式确定何时移动代码移动候选者对于提高处理能力具有潜在的优势。如果没有代码移动候选者,流程300就退出(块304)。如果存在代码移动候选者,流程300将确定该代码移动候选者是否满足特定的条件。根据所满足的条件,将启动流程400、600或900其中的一个。具体而言,通过检查代码移动候选者“INST”来确定它是不是“异常指令”。异常指令是可以在处理器(例如,处理器106或者处理器202)内引起内部异常的指令(块308)。在一个示范实施例中,“加载”指令可以是异常指令。
如果代码移动候选者INST是异常指令,图4中所显示的流程400将开始。在流程400中,将INST 402在程序的执行序列中从原始位置404上移至新位置406,这使INST 402可在更早时候被执行(块408)。INST402用于指代INST的一个具体的示范实施例,其中INST是一条被重新排序的异常指令。
接下来,将INST 402转换成一条控制预测指令410(块412)。有几种不同的方法来实现将一条指令向该指令的控制预测版本进行转换。一种实现转换的方法是采用一个查询表来保存控制预测指令。在一个示范实施例中,当需要转换一条“ld”指令时,流程400可以访问查询表并确定适当的控制预测指令是“ld.s”。
接下来,在程序执行路径中的INST 402的原始位置404处插入一条校验指令414(例如,chk.s)(块416),并且生成一个恢复块502(参看图5,块504)。恢复块502是可以用来恢复处理器的体系状态的一条或者一组指令。如果需要执行恢复块502,校验指令414就转移到恢复块502。在一个示范实施例中,控制预测模块206可以校验一个或者多个状态位,来确定是否需要执行恢复块502。如果状态位指示应该执行恢复块502,程序流将延续到恢复块502。异常指令INST 402被复制在恢复块502中,这里称作RECOVERY EXCEPTION INST 508(块506)。
在将异常指令INST 402重新排序,并且生成合适的恢复块502后,流程400退出并返回到流程300。然后,流程300继续进行来确定是否还有任何代码移动候选者(块302)。
如果INST不是异常指令,流程300将确定是否将INST上移跨越一条校验指令(例如,校验指令414),以便INST可在校验指令414之前被执行(块310)。如果要将INST上移跨越校验指令412,那么流程600开始(参看图6)。流程600通过上移INST(例如,指令602和指令604)跨越校验指令414来开始(块606)。INST 602和INST 604是INST的示范实施例,二者被重新排序向上跨越了校验指令414。
接下来,流程600发现了指令“PREV INST”(例如,指令608)(块610)。PREV INST 608是计算INST 604的目标寄存器(即,保存INST 604结果的寄存器)先前值的指令。在一个示范实施例中,流程600使用一个高速缓存结构来找到PREV INST 604。高速缓存结构可以保存修改每个寄存器的最近的指令和原始程序内的每一条这些指令的地址。当INST 604被重新排序跨越校验指令414时,控制预测模块206可以检查高速缓存结构,并试图查找修改INST 604的目标寄存器的最近的指令(例如,PREVINST 608)。另一种查找PREV INST 604的方法是使用软件遍历程序指令210并查找最近修改过INST 604的目标寄存器的指令。
流程600接下来确定PREV INST的源操作数612(即,PREV INST 608用于其操作的寄存器或值)对校验指令414是否可用(块614)。可以使用和上述用于查找PREV INST 608的相类似的高速缓存结构来确定源操作数是否可用。在图6中的示范实施例中,I1是用于指令I6的PREV INST。操作数b和c是I1的源操作数612。高速缓存结构可以保存用于修改操作数寄存器和某些最近使用的存储器位置的指令的地址。通过检查最近修改过源操作数612的指令的指令地址,流程600可以确定源操作数612是否可用。
INST 602表示一条其源操作数不可为校验指令414所用的指令。对于源操作数不可用的情形,流程700开始(参看图7)。一条新的指令702“NEW INST”被插入到程序的执行路径中来保存PREV INST的目标寄存器(块704)。NEW INST 702指令可以是任何将PREV INST的目标寄存器的内容赋值给一个未使用的寄存器或者某些其他的存储器位置的指令。在所显示的示范实施例中,NEW INST 702是将寄存器i的值保存到临时位置t的指令。
另一条新的指令706“NEW RECOVERY INST”被插入到恢复块502中,并且被放置在RECOVERY EXCEPTION INST 508之前(块708)。当执行恢复块502时,PREV INST的目标寄存器由NEW RECOVERY INST 706恢复。NEW RECOVERY INST 706可以是任何将PREV INST的目标寄存器恢复为由NEW INST 702保存的值的指令。在图7中的示范实施例中,NEW RECOVERYINST 706是将保存在临时位置t的值移到PREV INST的目标寄存器i的指令。这导致i的内容被恢复为其正常的代码流内容。
在将NEW INST 702插入到程序执行路径中,并且将NEW RECOVERYINST 706插入到恢复块502中后,流程700退出并返回至流程300。然后,流程300继续执行并确定是否还有任何代码移动候选者(块302)。
如果PREV INST的源操作数612可以为校验指令414所用(块614),那么流程800开始(参看图8)。在图6中的示范实施例中,PREV INST 608是与INST 604相关联的先前的指令。操作数b和c是I1的源操作数612。在执行校验指令414时,b和c的值还没有被改变,并且被认为可为校验指令414所用。
流程800复制了一份PREV INST 802并且将PREV INST 802的拷贝放到了恢复块502中(块804)。在恢复块502中,该PREV INST 802的拷贝被放在RECOVERY EXCEPTION INST 508的前面(块806)。当执行该PREV INST 802的拷贝时,它将恢复目标寄存器的值。既然源操作数612的值可为校验指令414所用,因此流程800可以通过重新执行恢复块502中的PREV INST 802来恢复INST 604的目标寄存器状态。由于源操作数b和c的内容尚未被改变,因此目标寄存器中将恢复正确的值。
在恢复块502包含一条恢复INST的目标寄存器的指令的状态下,流程800将退出并返回至流程300。流程300将继续执行并确定是否还有任何代码移动候选者(块302)。
返回到图3,如果INST没有被上移跨越一条校验指令(例如,校验指令414)以便INST较早执行(块310),流程300将确定是否将INST下移跨越一条校验指令414,以使INST晚些时候执行(块312)。某些编译器或者二进制翻译器应用程序可以按照公知的方式确定下移INST是有利的。在一个示范实施例中,可以将INST下移以防止流水线中的失速。这种情形的一个示范实施例是,第一指令修改了一个存储器位置,紧接着第二指令立即要读取同一存储器位置。该读指令可以是下移的候选者。通过下移该指令,可以消除与第一指令写入一个存储器位置和第二指令需要访问同一存储器位置相关联的流水线中的时延。
如果INST被下移跨越校验指令414,流程900将开始(参看图9)。INST 902是被重新排序下移跨越校验指令414的INST的一个示范实施例。流程900将INST 902下移跨越校验指令414(块904)。接着INST 902的一份拷贝(即,指令906)被放置到恢复块502中(块908)。该INST 906的拷贝被放置在RECOVERY EXCEPTION INST 508之前(图10中的块1002)。既然将INST 902下移跨越校验指令414,在程序流到达该校验指令414时,不会执行INST 902。通过将INST 906的一份拷贝放置到恢复块502中,并且使INST 906的拷贝在RECOVERY EXCEPTION INST 508之前执行,可以逆转重新排序INST 902的效果。
在生成合适的恢复块502之后,流程900将退出并返回至流程300。接下来,流程300将继续执行并确定是否还有任何代码移动候选者(块302)。
返回到图3,如果INST不是异常指令(块308),并且INST没有被上移跨越一条校验指令414(块310),而且INST也没有被下移跨越一条校验指令414(块312),那么将按公知的方式执行正常的代码移动(块314)。接下来,流程300将继续进行并确定是否还有任何代码移动候选者(块302)。
尽管以上内容揭示的是包括除去其他组件之外,在硬件上执行的软件的示例系统,需要明白的是,这样的系统仅仅是说明性的,不应看作是对本发明的限制。在一个示范实施例中,可以预期,所揭示的硬件和软件组件中的任一个或者全部可以只用专用硬件来实现,也可以只用软件来实现,还可以只用固件来实现,或者用硬件、固件和(或)软件的某种结合来实现。
此外,虽然这里描述的是特定的方法、设备和产品,本专利所覆盖的范围却不限于这些。相反,本专利将覆盖无论是在文字上,还是根据等同原则,明确落入附加权利要求范围内的所有方法、设备和产品。
Claims (16)
1.一种保存代码重新排序中的异常的方法,该方法包括:
接收软件指令序列,所述软件指令序列包括一条在该序列内的第一位置处的软件指令;
确定该软件指令是不是异常指令;
如果该软件指令是异常指令,在所述软件指令序列内的第二位置处插入与该软件指令相关的控制预测指令;
在第一位置处用一条校验指令代替第一位置处的该软件指令;以及
生成一个从该校验指令分支出来的恢复块,该恢复块包括该软件指令的一份拷贝。
2.根据权利要求1中所述的方法,其中所述的软件指令包括一条加载指令。
3.根据权利要求1中所述的方法,其中所述的第二位置在指令执行上的位置先于第一位置。
4.根据权利要求1中所述的方法,其中所述的在第二位置处插入与该软件指令相关的控制预测指令的步骤包括插入一条与加载指令相关的控制预测指令。
5.一种保存代码重新排序中的异常的方法,该方法包括:
接收包括一条第一指令在内的多条指令;
确定第一指令是不是异常指令;
确定第一指令是否要被上移跨越一条校验指令;
如果第一指令不是异常指令并且要被上移跨越一条校验指令,在所述多条指令内,确定一条用于计算与第一指令相关联的目标寄存器的先前值的第二指令;
确定与第二指令相关联的源操作数是否可为校验指令所用;
如果与第二指令相关联的源操作数不可为校验指令所用,向所述多条指令中插入一条第三指令来保存目标寄存器的值;以及
向一个恢复块中插入一条第四指令来恢复目标寄存器的值。
6.根据权利要求5中所述的方法,进一步包括:如果与第二指令相关联的源操作数可为校验指令所用,则向恢复块中插入第二指令的一份拷贝。
7.根据权利要求6中所述的方法,其中所述的向恢复块中插入第二指令的一份拷贝的步骤包括:在异常指令的拷贝之前向恢复块中插入第二指令的一份拷贝。
8.一种保存代码重新排序中的异常的方法,该方法包括:
接收包括一条第一指令在内的多条指令;
确定第一指令是不是异常指令;
确定第一指令是否要被上移跨越一条校验指令;
确定第一指令是否要被下移跨越该校验指令;以及
如果(i)第一指令不是异常指令,(ii)第一指令不要被上移跨越一条校验指令,并且(iii)第一指令被下移跨越一条校验指令,那么向恢复块中插入第一指令的一份拷贝。
9.根据权利要求8中所述的方法,其中所述的向恢复块中插入第一指令的一份拷贝包括:在异常指令的拷贝之前向恢复块中插入第一指令的一份拷贝。
10.一种保存代码重新排序中的精确异常的设备,该设备包括:
用于执行多条软件指令的处理器;
与处理器可操作地耦联用以保存所述多条软件指令的存储器设备;
与处理器可操作地耦联的控制预测模块,该控制预测模块被构建为向所述多条软件指令中插入软件指令的控制预测指令;以及
与处理器可操作地耦联的异常处理程序,该异常处理程序被构建为用来处理与软件指令的控制预测指令相关联的异常。
11.根据权利要求10中所述的设备,其中所述的控制预测模块向所述多条软件指令中插入一条校验指令。
12.根据权利要求11中所述的设备,其中所述控制预测模块生成一个从校验指令分支的恢复块。
13.一种用于保存代码重新排序中的精确异常的设备,该设备包括一个计算设备,该计算设备包括:
接收软件指令序列的装置,所述软件指令序列包括一条在该序列内第一位置处的软件指令;
确定该软件指令是不是异常指令的装置;
如果该软件指令是异常指令,在所述软件指令序列的第二位置处插入与该软件指令相关的控制预测指令的装置;
在第一位置处用一条校验指令代替第一位置处的该软件指令的装置;
生成一个从校验指令分支的恢复块的装置,该恢复块包括该软件指令的一份拷贝。
14.根据权利要求13中所述的设备,其中所述的软件指令包括一条加载指令。
15.根据权利要求13中所述的设备,其中所述的第二位置在指令执行上的位置先于第一位置。
16.根据权利要求13中所述的设备,其中所述的在第二位置处插入与该软件指令相关的控制预测指令包括插入一条与加载指令相关的控制预测指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/601,439 US7313790B2 (en) | 2003-06-23 | 2003-06-23 | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation |
US10/601,439 | 2003-06-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1573712A CN1573712A (zh) | 2005-02-02 |
CN100346314C true CN100346314C (zh) | 2007-10-31 |
Family
ID=33517975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB031560741A Expired - Fee Related CN100346314C (zh) | 2003-06-23 | 2003-08-29 | 保存代码重新排序中的精确异常的方法和设备 |
Country Status (2)
Country | Link |
---|---|
US (2) | US7313790B2 (zh) |
CN (1) | CN100346314C (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7770169B2 (en) * | 2004-05-17 | 2010-08-03 | Oracle America, Inc. | Thread rendezvous for read-only code in an object-oriented computing environment |
US7747993B2 (en) * | 2004-12-30 | 2010-06-29 | Michigan Technological University | Methods and systems for ordering instructions using future values |
US7200742B2 (en) * | 2005-02-10 | 2007-04-03 | International Business Machines Corporation | System and method for creating precise exceptions |
CN100495322C (zh) * | 2006-05-18 | 2009-06-03 | 中国科学院计算技术研究所 | 对预处理微指令发生异常多层嵌套进行处理的设备及方法 |
US7698534B2 (en) * | 2007-02-21 | 2010-04-13 | Arm Limited | Reordering application code to improve processing performance |
US8473930B2 (en) * | 2008-11-05 | 2013-06-25 | Oracle America, Inc. | Handling signals and exceptions in a dynamic translation environment |
US8495343B2 (en) * | 2009-09-09 | 2013-07-23 | Via Technologies, Inc. | Apparatus and method for detection and correction of denormal speculative floating point operand |
WO2013095392A1 (en) * | 2011-12-20 | 2013-06-27 | Intel Corporation | Systems and method for unblocking a pipeline with spontaneous load deferral and conversion to prefetch |
US9411560B2 (en) * | 2012-01-26 | 2016-08-09 | Oracle International Corporation | Error propagation |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
CN113221119B (zh) * | 2021-05-13 | 2024-03-29 | 中金金融认证中心有限公司 | 嵌入式处理器分支预测漏洞检测方法、计算机设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0306042B1 (en) * | 1987-09-03 | 1994-04-27 | Bull HN Information Systems Inc. | Microprocessor vectored interrupts |
JPH10154080A (ja) * | 1996-08-19 | 1998-06-09 | Samsung Electron Co Ltd | 非対称マルチプロセッサアーキテクチャーの割り込み及び例外事象を処理するためのシステムおよび方法 |
CN1242546A (zh) * | 1998-03-31 | 2000-01-26 | 英特尔公司 | 用于处理不精确异常的一种方法和装置 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5121928A (en) * | 1991-04-30 | 1992-06-16 | Salerno Sonneberg Nadja | Method of playing a question and answer movie board game |
US5802337A (en) * | 1995-12-29 | 1998-09-01 | Intel Corporation | Method and apparatus for executing load instructions speculatively |
US5738354A (en) * | 1996-09-09 | 1998-04-14 | Easley; Aaron G. | Educational board game |
US5882008A (en) * | 1997-01-17 | 1999-03-16 | Siegesmund; Kenneth A. | Board game apparatus and method involving answering objective and subjective questions |
US5913519A (en) * | 1997-08-11 | 1999-06-22 | Sindelar; Joseph A. | Theatrical learning game |
AUPO907397A0 (en) * | 1997-09-09 | 1997-10-02 | Fullgrabe, Kym | Game |
JP3320358B2 (ja) * | 1998-06-18 | 2002-09-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイル方法、例外処理方法、及びコンピュータ |
US6247172B1 (en) * | 1998-07-02 | 2001-06-12 | Hewlett-Packard Company | Method for a translation system that aggressively optimizes and preserves full synchronous exception state |
US6260190B1 (en) * | 1998-08-11 | 2001-07-10 | Hewlett-Packard Company | Unified compiler framework for control and data speculation with recovery code |
US6279909B1 (en) * | 1998-08-17 | 2001-08-28 | Cranium, Inc. | Game having multiple game activities |
US7065750B2 (en) * | 1999-02-17 | 2006-06-20 | Elbrus International | Method and apparatus for preserving precise exceptions in binary translated code |
US6463579B1 (en) * | 1999-02-17 | 2002-10-08 | Intel Corporation | System and method for generating recovery code |
US6470493B1 (en) * | 1999-09-30 | 2002-10-22 | Compaq Information Technologies Group, L.P. | Computer method and apparatus for safe instrumentation of reverse executable program modules |
US6487716B1 (en) * | 1999-10-08 | 2002-11-26 | International Business Machines Corporation | Methods and apparatus for optimizing programs in the presence of exceptions |
JP3664478B2 (ja) * | 2001-03-29 | 2005-06-29 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ、変換プログラム、例外処理プログラム及びこれらを用いたコンピュータ装置 |
US6669196B1 (en) * | 2002-06-06 | 2003-12-30 | Rita Washko | Public health oriented board game system |
US6931515B2 (en) * | 2002-07-29 | 2005-08-16 | Hewlett-Packard Development Company, L.P. | Method and system for using dynamic, deferred operation information to control eager deferral of control-speculative loads |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US20040128658A1 (en) * | 2002-12-27 | 2004-07-01 | Guei-Yuan Lueh | Exception handling with stack trace cache |
US7213242B2 (en) * | 2002-12-31 | 2007-05-01 | Intel Corporation | Run-time behavior preserving partial redundancy elimination |
US7103880B1 (en) * | 2003-04-30 | 2006-09-05 | Hewlett-Packard Development Company, L.P. | Floating-point data speculation across a procedure call using an advanced load address table |
GB0315844D0 (en) * | 2003-07-04 | 2003-08-13 | Transitive Ltd | Method and apparatus for performing adjustable precision exception handling |
US20050149913A1 (en) * | 2003-12-29 | 2005-07-07 | Yun Wang | Apparatus and methods to optimize code in view of masking status of exceptions |
US7607125B2 (en) * | 2004-11-11 | 2009-10-20 | Microsoft Corporation | Programming language support for integrating undo and exception handling |
-
2003
- 2003-06-23 US US10/601,439 patent/US7313790B2/en not_active Expired - Fee Related
- 2003-08-29 CN CNB031560741A patent/CN100346314C/zh not_active Expired - Fee Related
-
2007
- 2007-11-08 US US11/937,264 patent/US8769509B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0306042B1 (en) * | 1987-09-03 | 1994-04-27 | Bull HN Information Systems Inc. | Microprocessor vectored interrupts |
JPH10154080A (ja) * | 1996-08-19 | 1998-06-09 | Samsung Electron Co Ltd | 非対称マルチプロセッサアーキテクチャーの割り込み及び例外事象を処理するためのシステムおよび方法 |
CN1242546A (zh) * | 1998-03-31 | 2000-01-26 | 英特尔公司 | 用于处理不精确异常的一种方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
US8769509B2 (en) | 2014-07-01 |
US20080065872A1 (en) | 2008-03-13 |
US20040261068A1 (en) | 2004-12-23 |
CN1573712A (zh) | 2005-02-02 |
US7313790B2 (en) | 2007-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8769509B2 (en) | Methods and apparatus for preserving precise exceptions in code reordering by using control speculation | |
CN1188778C (zh) | 处理指令的方法、处理器和数据处理系统 | |
CN1324460C (zh) | 用最近条目队列补充分支目标缓冲器的方法和系统 | |
CN101031897A (zh) | 在次序混乱的dma命令队列中建立命令次序 | |
CN1122917C (zh) | 维护转移信息的系统与方法 | |
JP3488162B2 (ja) | コンピュータ処理システムにおけるロード動作を順序変更する方法および装置 | |
CN1013067B (zh) | 紧配合的多处理器指令同步 | |
CN1790256A (zh) | 用于微处理器的分支前瞻预取 | |
CN1629799A (zh) | 用于超前执行下的结果推测的方法和装置 | |
JPH10269080A (ja) | 順不同ロード命令とストア命令との干渉を検出回復するための方法及び装置 | |
TW200417915A (en) | Generating prefetches by speculatively executing code through hardware scout threading | |
CN1940861A (zh) | 在信息处理系统的处理器中发布指令的方法及设备 | |
CN1829977A (zh) | 利用一个栈跟踪高速缓存器改善垃圾收集的性能的方法和装置 | |
CN1716184A (zh) | 处理器和流水线重配置控制方法 | |
US6219781B1 (en) | Method and apparatus for performing register hazard detection | |
CN1758215A (zh) | 更新指令错误状态暂存器 | |
CN1912853A (zh) | 用于管理高速缓存数据的方法和数据处理系统 | |
CN1890637A (zh) | 基于垃圾收集器分析与对象的布局动态插入预取指令的方法和装置 | |
JP2010067265A (ja) | データアクセス違反を検出する方法および装置 | |
CN1320450C (zh) | 提供可变宽度的至少六路加法指令的方法及相应装置 | |
US6516462B1 (en) | Cache miss saving for speculation load operation | |
CN100338571C (zh) | 处理器的扩展寄存器空间装置和方法 | |
US6889314B2 (en) | Method and apparatus for fast dependency coordinate matching | |
CN1124546C (zh) | 一种超标量处理器及在该超标量处理器中完成指令的方法 | |
CN1900904A (zh) | 用于改善按次序的处理器的性能的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20071031 Termination date: 20150829 |
|
EXPY | Termination of patent right or utility model |