CN111857826A - 指令执行方法及指令执行装置 - Google Patents
指令执行方法及指令执行装置 Download PDFInfo
- Publication number
- CN111857826A CN111857826A CN202010721141.8A CN202010721141A CN111857826A CN 111857826 A CN111857826 A CN 111857826A CN 202010721141 A CN202010721141 A CN 202010721141A CN 111857826 A CN111857826 A CN 111857826A
- Authority
- CN
- China
- Prior art keywords
- instruction
- micro
- execution
- microinstruction
- exception
- 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.)
- Pending
Links
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/3017—Runtime instruction translation, e.g. macros
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
技术领域
本发明涉及一种指令执行的机制,特别涉及一种针对具有原子性(atomicity)的微指令的指令执行方法及指令执行装置。
背景技术
一般而言,处理器的执行单元(execution unit)的数据总线(data bus)位宽(bitwidth)为固定的位数,例如为128位,即,仅能运算数据位宽(data width)最多为128位的数据。然而,随着科技的发展,尤其是在需要大量处理浮点(floating point)指令或向量(vector)指令的领域,处理器需要处理的数据的位宽越来越大,且指令也越来越复杂,可能需要能够支持更多位数数据的处理,例如处理位宽为256位甚至512位的数据。
因此,如何基于目前处理器的架构,有效地扩展能够处理的指令类型,并可支持需要以较多位呈现的输出结果,已成为本领域需解决的问题之一。
发明内容
为了解决上述问题,本揭示文件提出一种指令执行方法及一种指令执行装置。
根据本揭示文件的一实施方式提出一种指令执行方法,包含:将一宏指令至少翻译为一第一微指令及一第二微指令,并且为该第一微指令标识一第一绑定信息,为该第二微指令标识一第二绑定信息;以及依据该第一绑定信息及该第二绑定信息同时执行该第一微指令及该第二微指令的退出操作;其中,该第一微指令及该第二微指令在微指令存储空间中相邻。
根据本揭示文件的又一实施方式提出一种指令执行装置,指令执行装置包含:一指令翻译器(instruction translator)以及一重排缓冲器(reorder buffer)。指令翻译器将一宏指令至少翻译为一第一微指令及一第二微指令,并且为该第一微指令标识一第一绑定信息,为该第二微指令标识一第二绑定信息。重排缓冲器(reorder buffer)依据该第一绑定信息及该第二绑定信息同时执行该第一微指令及该第二微指令的退出操作。其中,该第一微指令及该第二微指令在微指令存储空间中相邻。
藉由上述的指令执行装置及指令执行方法,可以将宏指令解码成多条微指令(操作微指令),而不需要生成额外的微指令,例如只需将256bit的宏指令解码成两条128bit的微指令(操作微指令),而无须生成额外的微指令,因此,此指令执行方法可减少上述宏指令的执行时间,从而降低耗电量。
附图说明
图1是依照本发明一实施例绘示指令执行装置的方块图。
图2A~2B是依照本发明一实施例绘示一指令执行方法的示意图。
图3是依照本发明一实施例绘示一指令执行方法的示意图。
图4是依照本发明一实施例绘示一指令执行方法的流程图。
图5是依照本发明一实施例绘示一指令执行方法的示意图。
图6是依照本发明一实施例绘示一指令执行方法的流程图。
图7A~7B是依照本发明一实施例绘示一微指令退出方法的流程图
【符号说明】
100:指令执行装置
102:指令高速缓冲存储器
104:指令翻译器
106:寄存器别名表
107:指令路径
108:保留站
ROB entry 1、ROB entry 2、ROB entry 3、ROB entry 4:重排序缓冲器条目
126:架构寄存器
127:执行状态字
124:临时寄存器
112:执行单元
114:整数执行单元
116:浮点执行单元
117:载入执行指令流水线
118:存储次序缓冲器
119:存储指令执行流水线
120:系统存储器
110:重排缓冲器
160:架构寄存器文件
140:临时寄存器文件
400、600:指令执行方法
410~440、620~650、710~752:步骤
AO:AO
Mop:宏指令
μop1:第一微指令
μop2:第二微指令
μop3:第三微指令
700:微指令退出方法
具体实施方式
以下说明为完成发明的较佳实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示元件之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
请参照图1,图1是依照本发明一实施例绘示指令执行装置100的方块图。在一实施例中,指令执行装置100包含一指令翻译器(instruction translator)104以及一执行单元112,指令翻译器104用以接收一宏指令(macro-instruction),并将宏指令翻译成为一第一微指令(micro-instruction)、一第二微指令及一第三微指令;其中,指令翻译器104为第一微指令及第二微指令标识相同的一原子操作(atomic operation)标志(flag),执行单元112用以执行第一微指令,以产生一第一执行结果,并将第一执行结果存储至一临时寄存器124(例如临时寄存器文件140中的多个临时寄存器之一的临时寄存器124);藉由执行单元112执行第二微指令,以产生一第二执行结果,并将第二执行结果存储至一架构寄存器(architecture register)126(例如架构寄存器文件160中的多个架构寄存器之一的架构寄存器126);以及藉由执行单元执行第三微指令,以从临时寄存器124读取第一执行结果并将第一执行结果存入架构寄存器126。架构寄存器文件160中还包括执行状态字127,执行状态字127用于存储执行指令时发生的例外(后文会详述)。
在一实施例中,指令执行装置100可以是一处理器。此外,处理器也可以由集成电路如微控制单元(micro controller)、微处理器(microprocessor)、数字信号处理器(digital signal processor)、特殊应用集成电路(application specific integratedcircuit,ASIC)或一逻辑电路来实施。
在一实施例中,如图1所示,指令执行装置100(例如以微处理器实现的)包括指令高速缓冲存储器(instruction cache)102,用以存储诸如x86指令集架构等的指令集架构的宏指令。此外,指令执行装置100还包括指令翻译器104,其接收宏指令并将其翻译成微指令(micro-instruction或μop)。然后,微指令被提供到寄存器别名表(Register AliasTable,RAT)106,寄存器别名表106会把微指令的依赖性用重排序缓存的索引(ROB index)或者物理寄存器堆的索引(PRF index)等形式做标记,依赖性是指一个指令的源操作数(source operand)依赖于哪个指令的目的操作数(destination operand),例如在后的运算逻辑单元(arithmetic logic unit,ALU)指令的源操作数可能依赖于在前的载入(load)指令的目的操作数,依赖性是由程序(或者是说指令序列本身)所决定的。然后寄存器别名表106按照程序执行次序向保留站(reservation station,RS)108发射微指令,并经由指令路径107向重排缓冲器(reorder buffer,ROB)110发射微指令。从寄存器别名表106发射的微指令(ISSUE INST)通常可以被称为微指令。重排缓冲器110把从寄存器别名表106发射的每个指令的条目存储到重排序缓冲器条目中,即重排序缓冲器条目包括ROB entry 1、ROBentry 2、ROB entry 3、ROB entry 4等,其中,ROB entry 1在ROB entry 2的前面,ROBentry 2在ROB entry 3的前面,ROB entry 3在ROB entry 4的前面,依此类推;如果所有的重排序缓冲器条目都为空,则重排缓冲器110把接收到的第1条微指令存放到ROB entry 1,把接收到的第2条微指令存放到ROB entry 2,把接收到的第3条微指令存放到ROB entry3,把接收到的第4条微指令存放到ROB entry 4,其中,第1个指令条目、第2个指令条目、第3个指令条目和第4个指令条目分别是依程序执行顺序的第1条微指令、第2条微指令、第3条微指令和第4条微指令。保留站108将操作数准备好(ready)的指令派遣到多个执行单元112中合适的一个执行。其中操作数是否准备好可藉由前述依赖性标记是否解除来判断。
执行单元112可以包括:一个或多个整数执行单元,诸如整数算法逻辑单元114、一个或多个浮点执行单元116、存储次序缓冲器(memory order buffer,MOB)118等。存储次序缓冲器118通常处理访问系统存储器120的存储器类型指令,存储次序缓冲器118包括载入指令执行流水线(load instruction execution pipe)117和存储指令执行流水线(storeinstruction execution pipe)119。系统存储器120可以经由数据高速缓冲存储器(例如,L2数据高速缓冲存储器,未绘示)和总线界面单元(BIU,未绘示)与存储次序缓冲器118对接。执行单元112将它们的结果提供到重排缓冲器110,这确保指令的按次序退出(retire)。
保留站108包括至少一个寄存器队列(RS queue或RS matrix),其中,当指令准备好被执行(该指令所有的操作数准备好且所有的依赖性都解除)时,由寄存器队列向对应的执行单元112调度并派遣(dispatch)对应的指令。
值得注意的是,寄存器别名表106及其之前的微指令循序执行(指令依照程序顺序在执行)的最后一级,后面保留站108和执行单元112都属于乱序执行:保留站108中操作数先准备好(ready)的微指令就先派遣到执行单元112执行(同时有多个准备好的微指令,则选择存在保留站108中时间最久的,亦即“最老的”微指令),因此,在此些阶段打破了程序顺序,而由重排缓冲器110来保证执行完以后的微指令按程序顺序退出。请参阅图2A~2B,图2A~2B是依照本发明一实施例绘示一指令执行方法的示意图。在一实施例中,执行单元112运算一次可以得到128位(bit)的执行结果输出,当执行单元112想支持256位的宏指令Mop(256位的宏指令,是指宏指令的目的操作数的位宽为256bit,下同)时须要运算两次,才能得到256位的执行结果输出,例如,当指令翻译器104接收到宏指令Mop后,指令翻译器104将宏指令Mop翻译成一第一微指令μop1及一第二微指令μop2(如图2B所示)。其中,第一微指令μop1及第二微指令μop2皆为128bit的微指令(128bit的微指令,是指微指令的目的操作数的位宽为128bit,下同)。因此,通过将256位的宏指令Mop翻译成两个128位的微指令(第一微指令μop1及第二微指令μop2)后,执行单元112执行两个128位的微指令(第一微指令μop1及第二微指令μop2),可得到256位的输出,藉此扩展执行单元112可处理指令的位数。
在一实施例中,指令翻译器104接收宏指令Mop后,可将宏指令Mop翻译为更多个微指令(例如为5个)。
指令执行装置100在越来越多的场合需要能够支持更多位数的数据处理,以AVX256指令集为例,指令执行装置100的单指令多数据(Single Instruction MultipleData,SIMD)寄存器文件(register file)所支持的位宽增加至256位,但如果执行单元112的数据总线位宽仍为128位,在这种状况下就需要由多个(例如2个)微指令(μop)来实现1个单一的AVX256宏指令的运算。但是,实现该AVX256操作的这2个微指令(后续称为“操作微指令”)由于要更新SIMD寄存器文件中的同一个256位的架构寄存器126,如果这2个操作微指令之一在执行过程中发生重放(replay)或者例外(exception),而另一正确执行的操作微指令可能退出(retire)并提交结果以更新该256位的架构寄存器126自己对应的部分,则在这种情况下,该256位的架构寄存器126就会存在一半正确而一半错误的状态,这是处理器规范/手册所不允许的,其允许架构寄存器126所有位全部正确亦或全部错误,但不允许这种不确定的中间状态。因此本发明提出了将同一宏指令对应的“操作微指令”(例如前述的第一及第二微指令)标识相同的原子操作标志,以表征第一微指令的第一目的操作数(destination)及第二微指令的第二目的操作数均指向相同的架构寄存器126,以供后续当有微指令出现执行例外状况时进行处理(后会详述)。
请一并参阅图2A~2B、3,图3是依照本发明一实施例绘示一指令执行方法的示意图。指令翻译器104将第一微指令μop1及第二微指令μop2标识相同的一原子操作标志,图3用以表示原子操作(atomic operation)AO,原子操作AO可以理解为一个宏指令,例如为宏指令Mop,其可被拆解为第一微指令μop1及第二微指令μop2,换句话说,相同的原子操作标志代表第一微指令的第一目的操作数(destination operand)及第二微指令的第二目的操作数均指向相同的架构寄存器126。在一实施例中,该原子操作标志标识于第一微指令μop1及该第二微指令μop2在该重排缓冲器110中分别对应的重排序缓冲器条目ROB entry 1及ROB entry 2中。在一实施例中,定义两个以上的微指令(例如,第一微指令μop1及第二微指令μop2)视为一组原子操作AO。由于执行单元112需要执行两个128位的微指令(第一微指令μop1及第二微指令μop2)才可得到256位的输出,故第一微指令μop1及第二微指令μop2之间的相关性很强,有时执行单元112会乱序执行指令,例如,执行单元112执行第一微指令μop1后,又执行了许多其他的微指令,才执行第二微指令μop2,在这种状况下,很容易造成输入第二微指令μop2的参数不正确,而执行结果也随之错误的情形。因此,属于同一组原子操作AO的微指令(例如,第一微指令μop1及第二微指令μop2)在执行过程有发生重放(replay)、退出(retire)、例外(exception)时,需要藉由该原子操作标志进行特别的处理,以下以图3为例,说明一实施例的指令执行方法关于依据前述原子操作标志进行重放、退出及例外处理的细部技术特征。值得注意的是,在本实例中,第一微指令μop1及第二微指令μop2的执行结果分别在第一微指令μop1和第二微指令μop2退出后会直接更新至架构寄存器126。
在一实施例中,当第一微指令μop1的执行发生例外(包括格式例外、无效例外、除数为零、精度例外、下溢例外及上溢例外等)时,则将例外状况标示到第一微指令μop1的重排序缓冲器条目ROB entry 1中且不退出第一微指令μop1,直到与第一微指令μop1具有相同的原子操作标志的第二微指令μop2执行结束且当第一微指令μop1为重排缓冲器110中最老(oldest,即此时重排缓冲器110按序应执行第一微指令μop1的退出程序)时,进行第一微指令μop1发生的例外对应的例外处理程序。值得注意的是,必须等到第二微指令μop2执行结束的原因是因为:第二微指令μop2执行结束会更新一执行状态字127(execution statusword),指令翻译器104需要根据该执行状态字127的值决定执行哪个例外处理程序,当第一微指令μop1发生的例外对应的例外处理程序执行完毕,可再次经由指令翻译器104重新译码,以产生第一微指令μop1及第二微指令μop2,且第一微指令μop1及第二微指令μop2执行完毕没有任何错误后,第一微指令μop1和第二微指令μop2才能在最老的时候退出。在本实施例中,重排缓冲器110根据相同的原子操作标志来判断需要与第一微指令μop1绑定进行前述例外处理的第二微指令μop2。
在一实施例中,当第一微指令μop1的执行正常,暂时也不能退出第一微指令μop1,且第二微指令μop2发生例外时,由于第一微指令μop1具有与第二微指令μop2相同的原子操作标志,则将此例外状况标示到第一微指令μop1的重排序缓冲器条目ROB entry 1中,当第一微指令μop1为重排缓冲器110中最老时,进行第二微指令μop2发生的例外对应的例外处理程序,当第二微指令μop2发生的例外对应的例外处理程序执行完毕,再次经由指令翻译器104重新译码产生第一微指令μop1及第二微指令μop2且执行完毕没有任何错误后,第一微指令μop1和第二微指令μop2才能在最老的时候退出。
在一实施例中,有些执行结果错误并不需要从指令翻译器104重新译码执行,可通过执行单元112重新执行一次微指令,即可能得到正确的执行结果,这种操作称之为“重放(replay)”。在一实施例中,当第一微指令μop1的执行结果错误时,执行单元112从第一微指令μop1开始重放,即重新执行第一微指令μop1及其往后的微指令(包含重新执行第二微指令μop2)。在一实施例中,当第一微指令μop1的执行结果正确而第二微指令μop2的执行结果错误时,由于第二微指令μop2与第一微指令μop1具有相同的原子操作标志,重排缓冲器110在第一微指令μop1最老时不执行第一微指令μop1的退出操作而是执行第二微指令μop2的重放,当执行单元112重新执行第二微指令μop2及其往后的微指令后,重排缓冲器110方能执行第一微指令μop1的退出。
值得注意的是,在图3所述的实施例中,第一微指令μop1尽管执行结果正确也因为与其具有原子性的第二微指令μop2发生错误而不能执行退出程序,因此本发明更提出图4和图5的实施例,其中将一宏指令翻译成为至少3个微指令,其中包括至少2个操作微指令(如第一微指令及第二微指令),其中第一微指令执行正确时可退出但并不更新架构寄存器126,而是将结果存储至临时寄存器124,当第一和第二微指令都正确执行后,再藉由第三微指令将其第一执行结果由临时寄存器124整合至架构寄存器126,如此当第一微指令执行正确就可以退出(retire)也不会造成该架构寄存器126的错误状态,同时也不会造成硬件资源上的浪费。
请一并参阅图4~5,图4是依照本发明一实施例绘示一指令执行方法400的流程图。图5是依照本发明一实施例绘示一指令执行方法的示意图。指令执行方法400适用于一处理器中,处理器包括指令翻译器104、执行单元112、架构寄存器126及重排缓冲器110。在一实施例中,可采用图1的指令执行装置100以执行图4的指令执行方法400。
在步骤410中,指令翻译器104接收宏指令,并将宏指令翻译成为第一微指令μop1、第二微指令μop2及一第三微指令μop3(如图3所示)。
在步骤415中,指令翻译器104将第一微指令μop1及第二微指令μop2标识相同的原子操作标志,相同的原子操作标志代表第一微指令μop1及第二微指令μop2是同一宏指令的操作微指令且它们之间具备原子性(atomicity),在一实施例中,原子性表现为第一微指令μop1的第一目的操作数(destination)与第二微指令μop2的第二目的操作数均指向相同的架构寄存器(例如图1的架构寄存器126)。
在一实施例中,指令翻译器104在解码(decode)时,将该相同的原子操作标志分别标识于第一微指令μop1及第二微指令μop2在重排缓冲器110中分别对应的重排序缓冲器条目ROB entry 1及ROB entry 2中,代表此些微指令(第一微指令μop1及第二微指令μop2)为原子操作OA的一部分。在一实施例中,指令翻译器104将第一微指令μop1标上原子操作OA的起始标识,将及第二微指令μop2标上原子操作OA的结束标识,指令执行装置100中的其他元件可以得知起始标识至结束标识之间的微指令(当宏指令需要3个及以上的操作微指令时,例如,其译码后的程序执行次序依序为:第一微指令μop1、第四微指令μop4及第二微指令μop2等来实现其运算,则第一微指令μop1及第二微指令μop2之间的第四微指令μop4可不需要标识原子操作标志)皆属于原子操作OA的一部分。
在一实施例中,当执行单元112执行一浮点指令时,若此浮点指令所需带宽(bandwith)为128位,则执行单元112在执行完毕后会输出128位的执行结果及一些标识字段至重排缓冲器110中该浮点指令对应的重排序缓冲器条目中,标识字段例如包括前述的原子操作标志、重放(replay)标志、例外(exception)标志及其相关信息(例如包括指令翻译器104执行例外处理程序需要的一标识位置及一错误代码等)。
在一实施例中,指令翻译器104译码时会将原子操作标志标识于第一微指令μop1及第二微指令μop2各自的重排序缓冲器条目中,于后续的各个使用到的元件(例如,重排缓冲器110、执行单元112)亦会在第一微指令μop1和/或第二微指令μop2各自的重排序缓冲器条目中标识各种错误状况。在一实施例中,指令高速缓冲存储器102、保留站108和/或浮点执行单元116若检测到第一微指令μop1或第二微指令μop2在它们对应的处理阶段(分别为译码阶段、发射阶段及执行阶段)发生例外,则会在重排缓冲器110中与发生例外的微指令对应的重排序缓冲器条目中标上例外(exception)标志及其相关信息。
在一实施例中,若第一微指令μop1和/或第二微指令μop2在被执行单元112执行前或执行过程中被检测到有重放(replay)的状况、有例外(exception)状况(标上例外状况代码)或其他错误状况,重排缓冲器110可以依据前述标识对具备相同的原子操作标志的微指令进行处理(例如处理例外状况),例如,在浮点执行单元116执行第一微指令μop1之后,第一微指令μop1被检测到其第一执行结果发生一第一例外时,根据其原子操作标志将该第一例外标识于与其具有原子性的第二微指令μop2处,例如标识于第二微指令μop2的重排序缓冲器条目中。值得注意的是,前述实施例中的第一例外可以是在第一微指令μop1被执行单元112执行之后发生的,此种例外可被称之为在后例外(post exception),在后例外例如为一精度例外(precision exception)、一下溢例外(underflow exception)或一上溢例外(overflow exception),而常见的例外状况还包括在被执行单元112执行之前发生的、与源操作数(source operand)相关联的例外,此种例外可被称之为在前例外(pre exception),在前例外例如为一格式例外(de-normal exception)、一无效例外(invalid exception)或一除数为零例外(zero divide exception)。关于不同微指令的不同例外状况的标识方式,以及不同微指令的重放(replay)状况的标识方式,将在后续段落说明之。
在图4对应的实施例中,重排缓冲器110根据该原子操作标志判断一个发生例外状况的微指令是否具备原子性指令,如有,则可将较老微指令(例如前述的第一微指令μop1)的例外状况标识于较年轻的原子性指令(例如前述的第二微指令μop2)处,由于第一微指令μop1退出后其错误的结果仅更新于临时寄存器124,其并不会造成架构寄存器126的状态不确定,因此较老微指令(例如前述的第一微指令μop1)可先退出,而在该较年轻的原子性指令为最老(即执行退出程序)时,一并处理两个微指令的例外状况。其中,处理例外状况的方式例如,但不限于,重排缓冲器110传送应该至少一例外结果的一标识位置与一错误代码到指令翻译器104中的一微码(ucode,图未绘示),该微码依据标识位置与错误代码选择执行其所存储的多个例外处理程序(exception handler)之一。
在步骤420中,执行单元112执行第一微指令μop1,以产生一第一执行结果,并将第一执行结果存储至临时寄存器124。藉此,即使第一执行结果错误,也不会影响到架构寄存器126。
在步骤430中,执行单元112执行第二微指令μop2,以产生一第二执行结果,并将第二执行结果存储至架构寄存器126。
在步骤440中,执行单元112执行第三微指令μop3,以从临时寄存器124读取第一执行结果并将第一执行结果存入架构寄存器126对应的位置。
藉此,请一并参照图1及图5,第一微指令μop1/第二微指令μop2只有成功退出(retire)才能去更新临时寄存器124/架构寄存器126,所以当第一微指令μop1发生例外时,第一微指令μop1可退出并将其例外标识在第二微指令μop2身上,由于第一微指令μop1退出不会更新架构寄存器126,而第二微指令μop2在退出之前会执行例外处理程序,故错误结果不会更新至架构寄存器126,从而避免造成架构寄存器126状态不确定的问题。
为了再进一步论证无论出现哪种异常情况,本实施例描述的指令执行方法都可以解决,下面再具体描述(1)当第一微指令μop1发生在前例外(pre exception)的情形;(2)当第一微指令μop1发生在后例外(post exception)的情形;(3)当第一微指令μop1正确执行且成功退出,第二微指令μop2发生例外(无论是在前例外还是在后例外)的情形;(4)当第一微指令μop1或第二微指令μop2需要重放(replay)时。
(1)当第一微指令μop1发生在前例外(pre exception)的情形:在一实施例中,当第一微指令μop1在被执行单元112执行之前,被检测到对应到第一微指令μop1的至少一源操作数(source operand)发生一格式例外(de-normal exception)、一无效例外(invalidexception)或一除数为零(zero divide exception)时,执行单元112不退出第一微指令μop1(甚至可以根本不执行第一微指令μop1),如此避免造成架构寄存器126状态不确定的问题。其中,格式例外例如为源操作数的格式不正确,无效例外例如为源操作数的操作数无效或存在无法执行的错误,除数为零的例外均为在前例外。此些在前例外都可以在执行前被检测出来。
(2)当第一微指令μop1发生在后例外(post exception)的情形:如前所述,有一些例外的状况是在执行单元112执行微指令后,由执行结果而得知。例如,当第一执行结果包含一精度例外(precision exception)、一下溢例外(underflow exception)或一上溢例外(overflow exception)之中至少一例外结果时,这种例外称之为在后例外(postexception)。执行单元112根据该原子操作标志将第一微指令μop1的至少一在后例外(后续称之为第一例外)标识于第二微指令μop2身上,在一实施例中执行单元112将该第一例外标识于第二微指令μop2在重排缓冲器110中对应的重排序缓冲器条目ROB entry 2中,在重排缓冲器110可当第一微指令μop1在重排缓冲器110中的条目索引为最老时退出第一微指令μop1。当第二微指令μop2在重排缓冲器110中的条目索引为最老时(即按序应执行第二微指令μop2的退出程序时),重排缓冲器110暂不退出第二微指令μop2,而是传送对应前述第一例外的一标识位置与一错误代码到指令翻译器104,指令翻译器104依据标识位置与错误代码执行对应之一例外处理程序(exception handler)。值得注意的是,当第一微指令μop1发生第一例外,而第二微指令亦发生一例外(无论是在前例外或在后例外,后续称之为第二例外)的状况下,执行单元112在检测到第一例外时仍可将该第一例外标识于第二微指令μop2身上,而第二例外被检测到时,同样标识于第二微指令μop2。重排缓冲器110可先退出第一微指令μop1,当重排缓冲器110按序应执行第二微指令μop2的退出程序时,可综合第一和第二例外谁的引起者更老,便将谁的标识位置与错误代码传送到该指令翻译器104以执行对应的例外处理程序。在这里第一微指令μop1较第二微指令μop2更老,因此仍然是将前述第一例外的标识位置与错误代码到指令翻译器104。
(3)当第一微指令μop1正确执行且成功退出,第二微指令μop2发生例外(无论是在前例外还是在后例外)的情形:当第一微指令μop1在被执行单元112执行之后第一执行结果被检测为一正常结果,且第二微指令μop2被检测到发生一第二例外时,重排缓冲器110退出第一微指令μop1(当第一微指令μop1在重排缓冲器110中的条目索引为最老时),但不更新架构寄存器126。在此例中,第二例外可以是在前例外,例如为包含一格式例外、一无效例外、一除数为零,也可以是在后例外,例如为包含一精度例外、一下溢例外或一上溢例外。在一实施例中,重排缓冲器110暂不退出第二微指令μop2(当第二微指令μop2在重排缓冲器110中的条目索引为最老时),重排缓冲器110传送对应该第二例外的一标识位置与一错误代码到指令翻译器104,指令翻译器104依据标识位置与错误代码执行对应的一例外处理程序(exception handler)。
综上所述,在图4及图5对应的实施例中,重排缓冲器110只有在第一微指令μop1发生在前例外(如前状况(1))时,不能退出第一微指令μop1,其他状况下重排缓冲器110均可得以先退出第一微指令μop1;更具体而言,在第一执行结果发生在后例外(如精度例外、下溢例外或上溢例外)或第二执行结果发生所有类型的例外(如格式例外、无效例外、除数为零、精度例外、下溢例外或上溢例外)时,执行单元112都可退出第一微指令μop1且不更新架构寄存器126,并将这些例外状况标识在第二微指令μop2,当重排缓冲器110执行第二微指令μop2的退出时(当第二微指令μop2在重排缓冲器110中最老时),暂不退出第二微指令μop2,而是依据第二微指令μop2所携带的标识进行例外处理,例如,重排缓冲器110依据第二微指令μop2所携带的标识,传送标识位置与错误代码到指令翻译器104,指令翻译器104依据标识位置与错误代码执行对应之一例外处理程序。
(4)当第一微指令μop1或第二微指令μop2需要重放(replay)时:下面讨论执行错误为需要重放(replay)的情形,当第一执行结果错误需要重放时,执行单元112重新执行第一微指令μop1及其之后的所有微指令。当第一执行结果正确但第二执行结果错误需要重放时,执行单元112重新执行第二微指令μop2及其之后的所有微指令。不同于图3的实施方式之处在于,本实例中第一微指令μop1此时可先退出而不用等待与其具有原子性的第二微指令μop2的重放(replay)执行,在图3的实施方式中,重排缓冲器110在第一微指令μop1最老时不能执行第一微指令μop1的退出操作而是执行第二微指令μop2的重放。
值得注意的是,本发明并不限制指令翻译器104在译码宏指令时,将实现该宏指令操作的“操作微指令”的个数限制为2个,在其它实施例中,可以根据需要将该宏指令翻译成为N个(N≥2)操作微指令,其中前(N-1)个操作微指令的执行结果分别存储至(N-1)个对应的临时寄存器124,当N个操作微指令都正确执行并退出后,再藉由第N+1个微指令将(N-1)个临时寄存器124的执行结果存入架构寄存器126。
综上,本发明图4及5图所示的指令执行方法及指令执行装置可以应用指令翻译器将宏指令并将宏指令翻译成为多个微指令,并为此些微指令中实现该宏指令操作的操作微指令(例如前述的第一及第二微指令)标识相同的原子操作标志,藉此可将宏指令分成多个原子性(atomicity)的微指令以进行处理,再藉由此些微指令中的第三微指令整合第一及第二微指令运算结果,本发明的该实施例在扩展指令执行装置的所能处理的输出位数的同时,更可藉由该原子操作标志将处理过程所发生的第一微指令的某些例外标识到与其具有原子性的第二微指令处,而第一微指令的执行结果由于并不更新其所对应的架构寄存器而可以灵活地先退出(retire)而并不会造成架构寄存器的错误状态,藉此可增加将宏指令分成多个微指令以进行运算时的灵活性与正确性。
由上述可知,本发明图4及图5所示的指令执行方法与本发明图3所示的指令执行方法相比,指令翻译器104在译码宏指令时,除了生成与宏指令对应的操作微指令,还要额外生成一个用于将操作微指令的执行结果从临时寄存器124存入架构寄存器126的微指令。指令执行装置100需要使用额外的时间执行这个额外生成的微指令,因而增加了运行时间和耗电量。而本发明图3所示的指令执行方法,由于只需要生成操作微指令,而不需要生成额外的微指令并额外占用指令执行装置100的执行时间,因而可以节省运行时间,从而降低耗电量。下面将结合图6、图7A及图7B,对图3所示的指令执行方法做更详细的说明。
请参阅图6,图6是依照本发明一实施例绘示一指令执行方法600的流程图。指令执行方法600可运行于指令执行装置100中,包含:将一宏指令至少翻译为一第一微指令及一第二微指令,并且为该第一微指令标识一第一绑定信息,为该第二微指令标识一第二绑定信息(步骤620);依据该第一绑定信息及该第二绑定信息同时执行该第一微指令及该第二微指令的退出操作(步骤650);其中,该第一微指令及该第二微指令在微指令存储空间中相邻;其中,所述微指令存储空间为重排缓冲器110,其中,所述重排缓冲器110中存储该第一微指令的重排序缓冲器条目与存储该第二微指令的重排序缓冲器条目相邻,并且存储该第一微指令的重排序缓冲器条目在存储该第二微指令的重排序缓冲器条目的前面。下面将详述指令执行方法600,首先执行步骤620。
在步骤620中,指令翻译器104将一宏指令至少翻译为一第一微指令μop1及一第二微指令μop2,并且为该第一微指令μop1标识一第一绑定信息,为该第二微指令μop2标识一第二绑定信息。具体而言,接收到一宏指令后,指令翻译器104将该宏指令至少翻译为一第一微指令μop1及一第二微指令μop2,并且为该第一微指令μop1标识一第一绑定信息,为该第二微指令μop2标识一第二绑定信息。其中,该第一微指令μop1及该第二微指令μop2为操作微指令,第一绑定信息和第二绑定信息即前文所述的原子操作标志,用于将该第一微指令μop1及该第二微指令μop2绑定为一个原子操作。即,该第一绑定信息及该第二绑定信息表示该第一微指令的一第一目的操作数(destination operand)及该第二微指令的一第二目的操作数均指向相同的一架构寄存器126,且该第一目的操作数与该第二目的操作数分别指向架构寄存器126的第一区域与第二区域,其中该第一区域与该第二区域不重叠;举例来说,以256位的架构寄存器126为例,架构寄存器126的低128bit和高128bit分别为第一区域和第二区域(架构寄存器126的低128bit和高128bit不重叠,即第一区域与第二区域不重叠),第一目的操作数指向架构寄存器126的第一区域,第二目的操作数指向架构寄存器126的第二区域。
在另一实施例中,当指令执行装置100中的宏指令的目的操作数的位宽不是微指令的目的操作数的位宽的整数倍,指令翻译器104将该宏指令翻译为一第一微指令μop1及一第二微指令μop2时,该第一微指令μop1的第一目的操作数指向架构寄存器126的第一区域,该第二微指令μop2的第二目的操作数指向架构寄存器126的第二区域;该第一区域与该第二区域可能存在2种关系:第一区域与第二区域不重叠,以及第一区域与第二区域部分重叠。当第一区域与第二区域不重叠时,又分为3种情况:第一区域的位宽等于第二区域的位宽、第一区域的位宽大于第二区域的位宽及第一区域的位宽小于第二区域的位宽。当第一区域与第二区域部分重叠时,也分为3种情况:第一区域的位宽等于第二区域的位宽、第一区域的位宽大于第二区域的位宽及第一区域的位宽小于第二区域的位宽。
下面以宏指令的目的操作数的位宽是256bit,而微指令的目的操作数的位宽是192bit为例进行说明。指令翻译器104将该宏指令翻译为一第一微指令μop1及一第二微指令μop2时,第一区域和第二区域不重叠时的3种情况分别为:第一区域为架构寄存器126的低128bit,第二区域为架构寄存器126的高128bit;第一区域为架构寄存器126的低192bit,第二区域为架构寄存器126的高64bit;第一区域为架构寄存器126的低64bit,第二区域为架构寄存器126的高192bit。第一区域和第二区域部分重叠时的3种情况分别为:第一区域为架构寄存器126的低192bit,第二区域为架构寄存器126的高192bit;第一区域为架构寄存器126的低192bit,第二区域为架构寄存器126的高128bit;第一区域为架构寄存器126的低128bit,第二区域为架构寄存器126的高192bit。
另外,值得注意的是,当指令执行装置100中的宏指令的目的操作数的位宽是微指令的目的操作数的位宽的整数倍时,一般情况下,指令翻译器104翻译出来的微指令的条数,是宏指令的目的操作数的位宽与微指令的目的操作数的位宽的倍数。例如,宏指令的目的操作数的位宽(比如256bit)与微指令的目的操作数的位宽(比如128bit)的倍数为2时,宏指令被翻译为2条微指令。但本发明并不限于此。在一实施例中,当宏指令的目的操作数的位宽与微指令的目的操作数的位宽的倍数为2时,指令翻译器104将一条宏指令翻译为3条微指令。例如,指令翻译器104将一条256bit的宏指令翻译为3条微指令,第一微指令的目的操作数指向架构寄存器126的第一区域,第二微指令的目的操作数指向架构寄存器126的第二区域,第三微指令的目的操作数指向架构寄存器126的第三区域;其中第一区域为架构寄存器126的低64bit,第二区域为架构寄存器126的中间128bit,第三区域为架构寄存器126的高64bit。
下面对绑定信息进行说明。
在一实施例中,例如,绑定信息包含独立绑定信息、第一绑定信息、中间绑定信息及第二绑定信息。可以用二进制数字“00”、“01”、“10”及“11”分别表示独立绑定信息、第一绑定信息、中间绑定信息及第二绑定信息。各个绑定信息代表的涵义如下述表一所示:
绑定信息 | 涵义 |
00 | 表示独立绑定信息,用于独立的微指令 |
01 | 表示第一绑定信息,用于同一个宏指令的第一条微指令 |
10 | 表示中间绑定信息,用于同一个宏指令的中间位置的微指令 |
11 | 表示第二绑定信息,用于同一个宏指令的最后一条微指令 |
表一
在一实施例中,指令翻译器104将一宏指令翻译为一第一微指令及一第二微指令。例如,指令翻译器104将256bit的宏指令翻译为两条各为128bit的微指令(操作微指令),依据表一的定义,为第一微指令标识一第一绑定信息(以二进制“01”表示,表示该第一微指令为该宏指令的依程序执行次序的第一条微指令),为第二微指令标识一第二绑定信息(以二进制“11”表示,表示该第二微指令为该宏指令的依程序执行次序的最后一条微指令)。该第一绑定信息及该第二绑定信息表示该第一微指令的一第一目的操作数及该第二微指令的一第二目的操作数均指向相同的一架构寄存器126。
在一实施例中,指令翻译器104将一宏指令翻译为一第一微指令、一第二微指令以及至少一中间微指令,并且为所述至少一中间微指令标识至少一中间绑定信息。例如,指令翻译器104将512bit的宏指令翻译为四条各为128bit的微指令(操作微指令),依据表一的定义,为第一微指令标识一第一绑定信息(以二进制“01”表示,表示该第一微指令为该宏指令的依程序执行次序的第一条微指令),为第一中间微指令标识一第一中间绑定信息(以二进制“10”表示,表示该第一中间微指令为该宏指令的依程序执行次序的第二条微指令),为第二中间微指令标识一第二中间绑定信息(以二进制“10”表示,表示该第二中间微指令为该宏指令的依程序执行次序的第三条微指令),为第二微指令表示一第二绑定信息(以二进制“11”表示,表示该第二微指令为该宏指令的依程序执行次序的最后一条微指令)。所述至少一中间微指令在重排缓冲器110中依程序执行次序位于该第一微指令与该第二微指令之间,且该第一微指令、所述至少一中间微指令及该第二微指令在微指令存储空间中相邻。该第一绑定信息、该第一中间绑定信息、该第二中间绑定信息及该第二绑定信息表示该第一微指令的一第一目的操作数、该第一中间微指令的一第一中间目的操作数、该第二中间微指令的一第二中间目的操作数及该第二微指令的一第二目的操作数均指向相同的一架构寄存器126,且该第一目的操作数、该第一中间目的操作数、该第二中间目的操作数与该第二目的操作数分别指向架构寄存器126的第一区域、第一中间区域、第二中间区域与第二区域,其中该第一区域、第一中间区域、第二中间区域与该第二区域不重叠;举例来说,以512位的架构寄存器126为例,架构寄存器126的低128bit、次低128bit、次高128bit和高128bit分别为第一区域、第一中间区域、第二中间区域和第二区域(架构寄存器126的低128bit、次低128bit、次高128bit和高128bit不重叠,即第一区域、第一中间区域、第二中间区域与第二区域不重叠),第一目的操作数指向架构寄存器126的第一区域,第一中间目的操作数指向架构寄存器126的第一中间区域,第二中间目的操作数指向架构寄存器126的第二中间区域,第二目的操作数指向架构寄存器126的第二区域。
在另一实施例中,当指令执行装置100中的宏指令的目的操作数的位宽不是微指令的目的操作数的位宽的整数倍,指令翻译器104将该宏指令翻译为一第一微指令、一第一中间微指令、一第二中间微指令及一第二微指令时,该第一微指令的第一目的操作数指向架构寄存器126的第一区域,该第一中间微指令的第一中间目的操作数指向架构寄存器126的第一中间区域,该第二中间微指令的第二中间目的操作数指向架构寄存器126的第二中间区域,该第二微指令的第二目的操作数指向架构寄存器126的第二区域;这4个区域中,任意相邻的两个区域(比如,第一区域和第一中间区域相邻,第一中间区域和第二中间区域相邻,第二中间区域和第二区域相邻)可能存在2种关系:相邻的两个区域不重叠,以及相邻的两个区域部分重叠。当相邻的两个区域不重叠时,又分为3种情况:两个区域的位宽相等、第一个区域的位宽大于第二个区域的位宽及第一个区域的位宽小于第二个区域的位宽。当两个区域部分重叠时,也分为3种情况:两个区域的位宽相等、第一个区域的位宽大于第二个区域的位宽及第一个区域的位宽小于第二个区域的位宽。
在一实施例中,指令翻译器104将其他小于或等于128bit的宏指令翻译为一条独立的微指令(即不与其它微指令组成原子操作),并依据表一的定义,为微指令标识一独立绑定信息(以二进制“00”表示,表示该微指令为该宏指令的独立的微指令)。
例如,以下表二用以表示指令翻译器104将一条256bit的宏指令解码为两条128bit的微指令的例子:
表二
其中,宏指令为“VADDPD ymm1,ymm2,ymm3/m256”(VADDPD表示宏指令操作码,下同;ymm1表示目的寄存器,ymm2和ymm3分别表示第1源寄存器和第2源寄存器,m256表示VADDPD的操作数的位宽为256bit),第一微指令为“xAdd_PD dSSEDest,S1SSESrc1,S2SSESrc2,S3DC,S4DC,sz128.128,ns,01”(xAdd_PD表示微指令操作码,S3DC表示没有第3源操作数,S4DC表示没有第4源操作数,sz128.128表示目的操作数和源操作数的位宽分别是128bit和128bit,ns表示空字段,下同;dSSEDest为目的寄存器,S1SSESrc1和S2SSESrc2分别为第1源寄存器和第2源寄存器,下同),“01”表示第一微指令被标识第一绑定信息(在此例中,绑定信息位于第一微指令的末端,然而本发明并不限于此,绑定信息也可以位于微指令的开头或中间的位置,下同),第二微指令为“xAdd_PD dAVXDest,S1AVXSrc1,S2AVXSrc2,S3DC,S4DC,sz128.128,ns,11”(dAVXDest为目的寄存器,S1AVXSrc1和S2AVXSrc2分别为第1源寄存器和第2源寄存器,下同),“11”表示第二微指令被标识第二绑定信息。由于第一微指令为依程序执行次序的第一条微指令,因此被标识第一绑定信息。由于第二微指令为依程序执行次序的最后一条微指令,因此被标识第二绑定信息。第一微指令的目的寄存器dSSEDest和第二微指令的目的寄存器dAVXDest指向相同的架构寄存器126。
又例如,以下表三用以表示指令翻译器104将一条512bit的宏指令解码为四条128bit的微指令的例子:
其中,宏指令为“VADDPD zmm1,zmm2,zmm3/m512”(zmm1表示目的寄存器,zmm2和zmm3分别表示第1源寄存器和第2源寄存器,m512表示VADDPD的操作数的位宽为512bit),第一微指令为“xAdd_PD dSSEDest,S1SSESrc1,S2SSESrc2,S3DC,S4DC,sz128.128,ns,01”,“01”表示第一微指令被标识第一绑定信息为,第一中间微指令为“xAdd_PD dAVXDest,S1AVXSrc1,S2AVXSrc2,S3DC,S4DC,sz128.128,ns,10”,“10”表示第一中间微指令被标识第一中间绑定信息。第二中间微指令为“xAdd_PD dAVX512LDest,S1AVX512LSrc1,S2AVX512LSrc2,S3DC,S4DC,sz128.128,ns,10”(dAVX512LDest为目的寄存器,S1AVX512LSrc1和S2AVX512LSrc2分别为第1源寄存器和第2源寄存器),“10”表示第二中间微指令被标识第二中间绑定信息。第二微指令为“xAdd_PD dAVX512HDest,S1AVX512HSrc1,S2AVX512HSrc2,S3DC,S4DC,sz128.128,ns,11”(dAVX512LDest为目的寄存器,S1AVX512HSrc1和S2AVX512HSrc2分别为第1源寄存器和第2源寄存器),“11”表示第二微指令被标识第二绑定信息。由于第一微指令为第一条微指令,因此被标识第一绑定信息。由于第一中间微指令及第二中间微指令为中间位置的微指令,因此被标识中间绑定信息。由于第二微指令为最后一条微指令,因此被标识第二绑定信息。第一微指令的目的寄存器dSSEDest、第一中间微指令的目的寄存器dAVXDest、第二中间微指令的目的寄存器dAVX512LDest和第二微指令的目的寄存器dAVX512HDest指向相同的架构寄存器126。
如此一来,重排缓冲器110、执行单元112或其他元件可以依据绑定信息及微指令在重排缓冲器110中的位置找到属于一个原子操作的所有微指令(后文将详述)。
在一实施例中,指令翻译器104将宏指令翻译成微指令后,会将微指令以程序执行次序发给寄存器别名表106。寄存器别名表106再将此些微指令发送给重排缓冲器110及保留站108。重排缓冲器110将此些微指令依次按程序执行次序存储到对应的重排序缓冲器条目中,并且依程序执行次序需要先执行的微指令被保存在最前面的空闲的重排序缓冲器条目中,例如,当指令翻译器104将宏指令翻译为第一微指令及第二微指令时,将第一微指令存储到重排序缓冲器条目ROB entry 1,将第二微指令存储到重排序缓冲器条目ROB entry2。此外,当指令翻译器104将宏指令翻译为第一微指令、第一中间微指令、第二中间微指令及第二微指令时,将第一微指令存储到重排序缓冲器条目ROB entry 1,将第一中间微指令存储到重排序缓冲器条目ROB entry 2,将第二中间微指令存储到重排序缓冲器条目ROBentry 3,将第二微指令存储到重排序缓冲器条目ROB entry 4。
然后,指令执行装置100执行步骤650。
在步骤650中,重排缓冲器110依据该第一绑定信息及该第二绑定信息同时执行该第一微指令及该第二微指令的退出操作。具体而言,执行单元112执行该第一微指令及该第二微指令之后,重排缓冲器110依据该第一绑定信息及该第二绑定信息及第一微指令和第二微指令在重排缓冲器110中的存放位置可以确定该第一微指令及该第二微指令属于相同的一原子操作。由于宏指令翻译成微指令时,会将翻译出来的微指令存储在连续的(即相邻的)重排序缓冲器条目里,因此只有存储在重排缓冲器110中相邻的重排序缓冲器条目中、并且存储第一微指令的重排序缓冲器条目在存储第二微指令的重排序缓冲器条目的前面时(将微指令存入重排缓冲器110时,先存入的微指令位于后存入的微指令的前面,下同),第一微指令和第二微指令才属于一个原子操作。举例来说,当第一微指令和第二微指令分别存储在重排缓冲器110的重排序缓冲器条目ROB entry 1和ROB entry 2中(ROB entry 1在ROB entry2的前面,即当重排缓冲器110的重排序缓冲器条目全部空闲时,先存入的第一微指令会被存储到ROB entry 1中,后存入的第二微指令会被存储到ROB entry 2中),并且第一微指令和第二微指令的绑定信息分别为01和11时,则表示第一微指令和第二微指令属于一个相同的原子操作。当该第一微指令没有产生一第一执行结果,或该第二微指令没有产生一第二执行结果时,不执行该第一微指令及该第二微指令的退出操作。当重排缓冲器110发现该第一微指令及该第二微指令都已经执行完成、执行结果有效、并且该第一微指令是重排缓冲器110中最老的微指令时(即当与该第一微指令及该第二微指令对应的宏指令前面的所有宏指令对应的微指令都退出后),重排缓冲器110将同时执行该第一微指令及该第二微指令的退出操作(下文将结合图7A~7B进行详述);否则,重排缓冲器110将不执行该第一微指令和该第二微指令的退出操作。在执行单元112执行该第一微指令及该第二微指令的退出操作以后,重排缓冲器110将该第一执行结果及该第二执行结果更新至该架构寄存器126,其中,该第一执行结果藉由执行该第一微指令产生,该第二执行结果藉由执行该第二微指令产生。将该第一执行结果及该第二执行结果更新至该架构寄存器126的具体技术细节已经在前文中进行了描述,此处就不再赘述了。
现在请参阅图7A~7B,图7A~7B是依照本发明一实施例绘示一微指令退出方法700的流程图。具体而言,图7A~7B是图6的指令执行方法600的步骤650的细部流程。下面以将1条宏指令翻译为4条操作微指令为例(即将1条宏指令翻译为第一微指令、第一中间微指令、第二中间微指令和第二微指令,将这4条微指令存储在重排缓冲器110中相邻的重排序缓冲器条目中,并且存储第一微指令的重排序缓冲器条目在存储第一中间微指令的重排序缓冲器条目的前面,存储第一中间微指令的重排序缓冲器条目在存储第二中间微指令的重排序缓冲器条目的前面,存储第二中间微指令的重排序缓冲器条目在存储第二微指令的重排序缓冲器条目的前面),对图7A~7B进行叙述。首先进入步骤710。
在步骤710中,重排缓冲器110判断是否所有微指令都没有发生例外。例如,以将一条宏指令翻译为第一微指令、第一中间微指令、第二中间微指令和第二微指令为例,重排缓冲器110判断是否第一微指令、第一中间微指令、第二中间微指令和第二微指令都没有发生例外。如果第一微指令、第一中间微指令、第二中间微指令和第二微指令都没有发生例外,则进入步骤720;否则,进入步骤730。
在步骤720中,重排缓冲器110同时执行所有微指令的退出操作(即清空所有对应微指令的重排序缓冲器条目ROB entry),并更新架构寄存器126。例如,以将一条宏指令翻译为第一微指令、第一中间微指令、第二中间微指令和第二微指令为例,当第一微指令、第一中间微指令、第二中间微指令和第二微指令都没有发生例外时,重排缓冲器110同时执行第一微指令、第一中间微指令、第二中间微指令及第二微指令的退出操作(即清空第一微指令、第一中间微指令、第二中间微指令及第二微指令对应的重排序缓冲器条目ROB entry1、ROB entry 2、ROB entry 3及ROB entry 4),并将第一微指令、第一中间微指令、第二中间微指令和第二微指令的执行结果更新至架构寄存器126中。以将一条宏指令翻译为第一微指令和第二微指令为例,当第一微指令和第二微指令都没有发生例外时,重排缓冲器110同时执行第一微指令及第二微指令的退出操作(即清空第一微指令及第二微指令对应的重排序缓冲器条目ROB entry 1、ROB entry 2),并将第一微指令和第二微指令的执行结果更新至架构寄存器126中。
在步骤730中,重排缓冲器110判断所有微指令(指由同一个宏指令翻译出的所有微指令,下同)发生的例外中是否包含不可屏蔽(unmask)例外(不可屏蔽例外是指指令处理装置100必须进行处理的例外,包含不可屏蔽在前例外和不可屏蔽在后例外;比如,不可屏蔽在前例外包含不可屏蔽格式例外、不可屏蔽无效例外及不可屏蔽除数为零例外等;不可屏蔽在后例外包含不可屏蔽精度例外、不可屏蔽下溢例外及不可屏蔽上溢例外等;下同)。例如,以将一条宏指令翻译为第一微指令、第一中间微指令、第二中间微指令和第二微指令为例,重排缓冲器110判断第一微指令、第一中间微指令、第二中间微指令和第二微指令发生的例外中是否包含不可屏蔽(unmask)例外。举例来说,当第一微指令发生不可屏蔽精度例外、第一中间微指令发生可屏蔽无效例外、第二中间微指令和第二微指令没有发生例外时,所有微指令发生的例外包含不可屏蔽精度例外、可屏蔽无效例外,因而判断结果为是;当第一微指令没有发生例外、第一中间微指令发生可屏蔽无效例外、第二中间微指令和第二微指令没有发生例外时,所有微指令发生的例外仅包含可屏蔽无效例外,因而判断结果为否;本领域技术人员可以列举出发生例外的其它情形,此处就不再一一列举了。如果判断结果为是,则进入步骤740;否则,进入步骤750。
在步骤740中,重排缓冲器110判断所有微指令发生的所有例外中是否包含不可屏蔽在前例外。例如,以将一条宏指令翻译为第一微指令、第一中间微指令、第二中间微指令和第二微指令为例,重排缓冲器110判断第一微指令、第一中间微指令、第二中间微指令或第二微指令发生的所有例外中是否包含不可屏蔽在前例外。举例来说,当第一微指令发生不可屏蔽格式例外、第一中间微指令发生可屏蔽无效例外、第二中间微指令发生精度例外(可屏蔽精度例外或不可屏蔽精度例外)且第二微指令没有发生例外时,所有微指令发生的例外包含不可屏蔽格式例外(属于不可屏蔽在前例外)和可屏蔽无效例外,因而判断结果为是;当第一微指令没有发生例外、第一中间微指令发生可屏蔽无效例外、第二中间微指令和第二微指令没有发生例外时,所有微指令发生的例外包含可屏蔽无效例外,因而判断结果为否;本领域技术人员可以列举出发生例外的其它情形,此处就不再一一列举了。如果判断结果为是,则进入步骤741;否则(即当该第一微指令或该第二微指令发生的例外中包含不可屏蔽在后例外时),进入步骤742。
在步骤741中,重排缓冲器110只记录所有在前例外,并调用例外处理程序。具体而言,可分为两种情况:一、当宏指令翻译出的所有微指令中只发生在前例外时,重排缓冲器110只将所有在前例外记录到执行状态字127中;二、当宏指令翻译出的所有微指令中,有的微指令发生在前例外,有的微指令发生在后例外时,重排缓冲器110只将所有在前例外记录到执行状态字127中,而不记录任何在后例外。举例来说,以将一条宏指令翻译为第一微指令和第二微指令为例,当该第一微指令及该第二微指令中的一个微指令发生一不可屏蔽在前例外(unmask pre exception),并且该第一微指令及该第二微指令中的另一个微指令发生一在后例外时,重排缓冲器110仅记录该第一微指令或该第二微指令发生的所有在前例外。以将一条宏指令翻译为第一微指令、第一中间微指令、第二中间微指令和第二微指令为例,当第一微指令、第一中间微指令、第二中间微指令或第二微指令中的任何一个微指令发生不可屏蔽在前例外时(其它微指令可能发生在后例外),重排缓冲器110仅记录第一微指令、第一中间微指令、第二中间微指令或第二微指令发生的所有在前例外。然后,重排缓冲器110清空指令执行装置100中所有流水线中的数据(由于发生不可屏蔽例外时,指令执行装置100需要执行例外处理处理程序,所以当前正在执行的指令序列会被中断,等执行完例外处理程序,之前被中断的指令序列会被从断点开始继续执行;执行例外处理程序之前,流水线中的指令都是断点之后的指令,由于断点之后的指令在执行完例外处理程序后会被重新执行,并且执行例外处理程序时也需要使用流水线,所以在执行例外处理程序之前需要清空流水线),再调用例外处理程序进行例外处理,以处理所有微指令发生的所有在前例外。需要注意的是,重排缓冲器110只负责调用(而不是执行)例外处理程序,下同。
在步骤742中,重排缓冲器110记录所有例外,并调用例外处理程序。具体而言,当该第一微指令或该第二微指令发生的例外中包含不可屏蔽在后例外时,重排缓冲器110会将所有例外(或异常状况,例如,第一微指令、第一中间微指令、第二中间微指令及第二微指令发生的所有例外)各自记录到执行状态字127中,清空指令执行装置100中所有流水线中的数据,然后调用例外处理程序,以处理所有微指令发生的所有例外。
如前所述,在步骤730中,重排缓冲器110判断所有微指令发生的所有例外中是否包含不可屏蔽例外,当判断结果为否时,进入步骤750。
在步骤750中,重排缓冲器110判断所有微指令发生的所有例外中是否只包含可屏蔽格式例外或可屏蔽下溢例外(可屏蔽例外是指指令处理装置100可以对其进行处理、也可以不对其进行处理的例外,下同)。具体而言,重排缓冲器110判断第一微指令、第一中间微指令、第二中间微指令和第二微指令发生的所有例外中是否包含可屏蔽格式例外或可屏蔽下溢例外,如果判断结果为是,则进入步骤751;否则,进入步骤752。
在步骤751中,重排缓冲器110记录所有微指令发生的所有例外,并重放发生例外的微指令(replay)。例如,重排缓冲器110将第一微指令、第一中间微指令、第二中间微指令和第二微指令发生的所有例外写入执行状态字127中,然后将发生例外的微指令重新写入保留站108以重新执行(具体执行流程见前文中对保留站108及执行单元112的描述,此处就不再赘述了)。例如,当第一微指令只发生了可屏蔽格式例外、且第一中间微指令、第二中间微指令第二微指令没有发生例外时,重排缓冲器110会把第一微指令的格式例外写入执行状态字127中,然后将第一微指令重新写入保留站108以重新执行第一微指令。
在步骤752中,重排缓冲器110记录所有微指令发生的所有例外,同时退出所有微指令,并更新架构寄存器126。例如,重排缓冲器110将第一微指令、第一中间微指令、第二中间微指令或第二微指令发生的所有例外写入执行状态字127中,然后同时退出第一微指令、第一中间微指令、第二中间微指令和第二微指令,并将第一微指令、第一中间微指令、第二中间微指令和第二微指令的执行结果写入架构寄存器126中。
根据上述对步骤730、750、751及752的描述可知,在步骤730中,当判断结果为否时(即所有微指令发生的所有例外中不包含不可屏蔽例外时),重排缓冲器110都将记录所有微指令发生的所有例外。即在步骤730中,当判断结果为否时,重排缓冲器110记录该第一微指令、该第一中间微指令、该第二中间微指令及该第二微指令发生的所有例外,即把第一微指令、第一中间微指令、第二中间微指令或第二微指令发生的所有例外写入执行状态字127中。
藉由上述的指令执行装置100及指令执行方法600(包含微指令退出方法700),可以将宏指令解码成多条微指令(操作微指令),而不需要生成额外的微指令。例如只需将256bit的宏指令解码成2条128bit的操作微指令(或将512bit的宏指令解码成4条128bit的操作微指令),而无须生成额外的微指令,因此,此指令执行方法可减少指令执行装置100的执行时间,从而降低耗电量。
上述将一条宏指令解码为2或4条微指令仅仅是一个例子,本发明并不限于此。例如,本领域技术人员也可以将一条1024bit的宏指令解码为8条128bit的操作微指令,以达到在128数据位宽的指令执行装置中执行1024位宽的指令的目的。
虽然本发明已以实施方式公开如上,然其并非用以限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,当可作各种的更动与润饰,因此本发明的保护范围当视所附权利要求书界定范围为准。
Claims (24)
1.一种指令执行方法,包含:
将宏指令至少翻译为第一微指令及第二微指令,并且为该第一微指令标识第一绑定信息,为该第二微指令标识第二绑定信息;以及
依据该第一绑定信息及该第二绑定信息同时执行该第一微指令及该第二微指令的退出操作;
其中,该第一微指令及该第二微指令在微指令存储空间中相邻。
2.如权利要求1所述的指令执行方法,其中该第一绑定信息及该第二绑定信息代表该第一微指令的第一目的操作数(destination operand)及该第二微指令的第二目的操作数均指向相同的架构寄存器。
3.如权利要求2所述的指令执行方法,还包含:
当该第一微指令及该第二微指令都没有发生例外时,在执行该第一微指令及该第二微指令的退出操作以后,将第一执行结果及第二执行结果更新至该架构寄存器,其中,该第一执行结果藉由执行该第一微指令产生,该第二执行结果藉由执行该第二微指令产生。
4.如权利要求2所述的指令执行方法,其中,该第一目的操作数与该第二目的操作数分别指向该架构寄存器的第一区域与第二区域,其中该第一区域与该第二区域不重叠或部分重叠。
5.如权利要求1所述的指令执行方法,其中,将该宏指令至少翻译成为该第一微指令及该第二微指令的步骤还包括:
将该宏指令翻译成为该第一微指令、该第二微指令以及至少一中间微指令,并且为所述至少一中间微指令标识至少一中间绑定信息,
其中,所述至少一中间微指令依程序执行次序位于该第一微指令与该第二微指令之间,且该第一微指令、所述至少一中间微指令及该第二微指令相邻。
6.如权利要求1所述的指令执行方法,其中,该第一绑定信息表示该第一微指令为该宏指令的依程序执行次序的第一条微指令,该第二绑定信息表示该第二微指令为该宏指令的依程序执行次序的最后一条微指令。
7.如权利要求1所述的指令执行方法,其中,当该第一微指令没有产生第一执行结果,或该第二微指令没有产生第二执行结果时,不执行该第一微指令及该第二微指令的退出操作。
8.如权利要求1所述的指令执行方法,其中,所述微指令存储空间为重排缓冲器,其中,所述重排缓冲器中存储该第一微指令的重排序缓冲器条目与存储该第二微指令的重排序缓冲器条目相邻,并且存储该第一微指令的重排序缓冲器条目在存储该第二微指令的重排序缓冲器条目的前面。
9.如权利要求1所述的指令执行方法,其中,当该第一微指令或该第二微指令中的一个微指令发生不可屏蔽在前例外(unmask pre exception),并且该第一微指令或该第二微指令中的另一个微指令发生在后例外时,仅记录该第一微指令或该第二微指令发生的所有在前例外。
10.如权利要求9所述的指令执行方法,其中,该第一微指令或该第二微指令发生的所有在前例外被记录在执行状态字中。
11.如权利要求1所述的指令执行方法,其中,当该第一微指令或该第二微指令发生的例外中包含不可屏蔽在前例外时时,该指令执行方法还包含:
记录该第一微指令或该第二微指令发生的所有在前例外;以及
调用例外处理程序,以处理该第一微指令或该第二微指令发生的所有在前例外。
12.如权利要求1所述的指令执行方法,其中,当该第一微指令或该第二微指令发生的例外中包含不可屏蔽在后例外时,该指令执行方法还包含:
记录该第一微指令或该第二微指令发生的所有例外;以及
调用例外处理程序,以处理该第一微指令或该第二微指令发生的所有例外。
13.一种指令执行装置,包含:
指令翻译器(instruction translator),将宏指令至少翻译成为第一微指令及第二微指令,并且为该第一微指令标识第一绑定信息,为该第二微指令标识第二绑定信息;以及
重排缓冲器(reorder buffer),依据该第一绑定信息及该第二绑定信息同时执行该第一微指令及该第二微指令的退出操作;
其中,该第一微指令及该第二微指令在微指令存储空间中相邻。
14.如权利要求13所述的指令执行装置,其中,
该第一绑定信息及该第二绑定信息代表该第一微指令的第一目的操作数(destination operand)及该第二微指令的第二目的操作数均指向相同的架构寄存器。
15.如权利要求14所述的指令执行装置,其中,当该第一微指令及该第二微指令都没有发生例外时,该重排缓冲器在执行该第一微指令及该第二微指令的退出操作以后,将第一执行结果及第二执行结果更新至该架构寄存器,其中,该第一执行结果藉由执行该第一微指令产生,该第二执行结果藉由执行该第二微指令产生。
16.如权利要求14所述的指令执行方法,其中,该第一目的操作数与该第二目的操作数分别指向该架构寄存器的第一区域与第二区域,其中该第一区域与该第二区域不重叠或部分重叠。
17.如权利要求13所述的指令执行装置,其中,该指令翻译器将该宏指令至少翻译成为该第一微指令及该第二微指令的步骤还包括:
将该宏指令翻译成为该第一微指令、该第二微指令以及至少一中间微指令,并且为所述至少一中间微指令标识至少一中间绑定信息,
其中,所述至少一中间微指令在重排缓冲器中依程序执行次序位于该第一微指令与该第二微指令之间,且该第一微指令、所述至少一中间微指令及该第二微指令相邻。
18.如权利要求13所述的指令执行装置,其中,该第一绑定信息表示该第一微指令为该宏指令的依程序执行次序的第一条微指令,该第二绑定信息表示该第二微指令为该宏指令的依程序执行次序的最后一条微指令。
19.如权利要求13所述的指令执行装置,其中,当该第一微指令没有产生第一执行结果,或该第二微指令没有产生第二执行结果时,该重排缓冲器不执行该第一微指令及该第二微指令的退出操作。
20.如权利要求13所述的指令执行装置,其中,所述微指令存储空间为重排缓冲器,其中,所述重排缓冲器中存储该第一微指令的重排序缓冲器条目与存储该第二微指令的重排序缓冲器条目相邻,并且存储该第一微指令的重排序缓冲器条目在存储该第二微指令的重排序缓冲器条目的前面。
21.如权利要求13所述的指令执行装置,其中,当该第一微指令或该第二微指令中的一个微指令发生不可屏蔽在前例外(unmask pre exception),并且该第一微指令或该第二微指令中的另一个微指令发生在后例外时,仅记录该第一微指令或该第二微指令发生的所有在前例外。
22.如权利要求21所述的指令执行装置,其中,该第一微指令或该第二微指令发生的所有在前例外被记录在执行状态字中。
23.如权利要求13所述的指令执行装置,其中,当该第一微指令及该第二微指令发生的例外中包含不可屏蔽在前例外时时,该重排缓冲器更记录该第一微指令及该第二微指令发生的所有在前例外,以及调用例外处理程序,以处理该第一微指令或该第二微指令发生的所有在前例外。
24.如权利要求13所述的指令执行装置,其中,当该第一微指令及该第二微指令发生的例外中不包含不可屏蔽在前例外时,该重排缓冲器更记录该第一微指令及该第二微指令发生的所有例外,以及调用例外处理程序,以处理该第一微指令或该第二微指令发生的所有例外。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010721141.8A CN111857826A (zh) | 2020-07-24 | 2020-07-24 | 指令执行方法及指令执行装置 |
US17/212,194 US11281468B2 (en) | 2019-06-12 | 2021-03-25 | Instruction execution method and instruction execution device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010721141.8A CN111857826A (zh) | 2020-07-24 | 2020-07-24 | 指令执行方法及指令执行装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111857826A true CN111857826A (zh) | 2020-10-30 |
Family
ID=72951091
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010721141.8A Pending CN111857826A (zh) | 2019-06-12 | 2020-07-24 | 指令执行方法及指令执行装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111857826A (zh) |
-
2020
- 2020-07-24 CN CN202010721141.8A patent/CN111857826A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2597811B2 (ja) | データ処理システム | |
US8074060B2 (en) | Out-of-order execution microprocessor that selectively initiates instruction retirement early | |
US7996662B2 (en) | Floating point status/control register encodings for speculative register field | |
US9329868B2 (en) | Reducing register read ports for register pairs | |
US20070011516A1 (en) | Method and apparatus to launch write queue read data in a microprocessor recovery unit | |
JPH03116236A (ja) | 例外処理方法及び例外処理装置 | |
KR100472346B1 (ko) | 명령어 리플레이를 포함하는 프로세서 파이프라인 | |
CN110221862B (zh) | 指令执行方法及指令执行装置 | |
US12020033B2 (en) | Apparatus and method for hardware-based memoization of function calls to reduce instruction execution | |
US6735688B1 (en) | Processor having replay architecture with fast and slow replay paths | |
US9268575B2 (en) | Flush operations in a processor | |
US11281468B2 (en) | Instruction execution method and instruction execution device | |
JP3816845B2 (ja) | プロセッサ及び命令制御方法 | |
US9323532B2 (en) | Predicting register pairs | |
CN111857826A (zh) | 指令执行方法及指令执行装置 | |
US5850563A (en) | Processor and method for out-of-order completion of floating-point operations during load/store multiple operations | |
US11720366B2 (en) | Arithmetic processing apparatus using either simple or complex instruction decoder | |
US5784606A (en) | Method and system in a superscalar data processing system for the efficient handling of exceptions | |
CN110209426B (zh) | 指令执行方法及指令执行装置 | |
US7783692B1 (en) | Fast flag generation | |
EP1762929B1 (en) | Centralized resolution of conditional instructions | |
JP2894438B2 (ja) | パイプライン処理装置 | |
US9298459B2 (en) | Managing register pairing | |
JPS61288230A (ja) | パイプライン制御方式 | |
JP2001092659A (ja) | 投機実行命令例外制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Applicant after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Applicant before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |