在数据处理系统中改进系统性能的方法和装置的制作方法

文档序号:6410214阅读:192来源:国知局
专利名称:在数据处理系统中改进系统性能的方法和装置的制作方法
技术领域
本发明一般相关于数据处理系统,详细地说,涉及到数据处理系统执行外存储器中存储的指令。
计算机体系结构通常基于程序执行的顺序模型,其中,它从存储器中取出程序的每条指令,全部予以执行,并且将所有结果返回到存储器,然后以类似的方式处理下一条指令。在这个模型中,被执行的下一条指令通常是紧跟在刚被执行的那条指令之后的指令,它被存储在相对于刚被执行的那条指令而言具有下一较高地址的存储器的一个单元中。与该下一相继单元不同的一个单元可以在转移指令中予以指定,该分支指令在典型的计算机应用程序中以某种频率出现。
在简单地执行这种顺序模型时,每条指令被同样地并且可预测地处理,因此执行一组指令所需要的时间完全正比于被执行的指令数目。在流水线或重叠执行时,也就是说,当前一条指令仍被执行时取出下一条指令,只要目前正被执行的指令之间没有相关性,那么就不会出现延迟。当一条指令只有在另一条指令的结果得知时才能完成执行时才遇到相关性,在这种情况下,第二条指令必须一直等到第一条指令产生结果为止,因而在执行过程中造成了延迟。
为了减少由于流水线执行中的相关性所产生的延迟,采用了各种方法。第一种方法是将详细的执行情况输入到一个编译器,该编译器对指令进行调度,从而使得相关指令不能在完全相同的时间被执行。这需要编译器顾及到所有的相关性,并且具有保持执行简单化的优势。由于结果总是计划得能够及时得到,所以由内部时钟的周期进行测量此系统的速度,唯一的限制是指令集中的单个基本运算或逻辑操作的复杂性。这种方法的缺点是允许应用程序只与特定的设备相兼容,从而对所有预先存在的计算机应用软件,为了在此特定的设备上运行,需要重新编译以及要求终端用户重新购买。
第二种方法是在处理器中包括检查指令之间的相关性,并且细心调度指令的硬件,以使得该指令对数据的存取只有在产生数据的指令已经完成之后才进行。第二种方法除了基本运算的复杂性外,还受到找出指令之间的相关性的复杂性的限制,当可以被执行的重叠操作数量增大时,这种复杂性也相应增大。它所带来的影响是,或者增大系统内部时钟的周期时间,或者增大完成程序的执行需要的时钟周期数目,两者都会降低系统的性能。但是,这种方案有一项非常重要的优点,即能够在不同的设备上执行一单一的被编译的程序。
本发明的一个目的是改进数据处理系统的整体系统性能。
本发明的另一个目的是改进处理器执行指令的速率。
本发明的又一个目的是找出指令流中的相关性所花费的工作量最小。
本发明的再一个目的是处理器能够动态地了解它能并行执行一个指令流中若干指令的操作。
本发明的最后另一个目的是处理器能够了解它能并行执行多个指令流。
在该发明中,称作译码指令缓冲器(DIB)的一个缓冲器被用来存储代表能够被并行执行的指令的命令组。在一个DIB组中的每个模式可以是一条长指令的译码操作,命名为被译码的长指令(LDI)。每条指令可以包括执行该指令所需要的所有信息,例如,包括执行指令中采用的功能单元和寄存器资源。此LDI也可包括指向下一组和/或根据当前指令的输出要执行的下个LDI的指针集合。
DIB同一台常规的计算机处理设备一起进行工作,后者包括一个存储系统、一个指令队列,以及一个馈送到一组执行单元的指令调度单元。当一条指令在DIB中得不到时,这条指令和随后的指令从存储器系统中取出,送到指令队列,并且以常规方式执行,其中或者包括可用的功能单元的子集,或者专用于该目的的功能单元。在常规设备执行指令的同时,一个组格式化装置(Formatter)产生一组LDI,其中每一个是能够并行执行的一组原始指令的替代编码。在构成LDI时,组格式化装置分析指令和指令执行时间之间的相关性。由组格式化装置构成的每组LDI被存储在DIB中,以便同一组指令的下一次执行可以在全部功能单元的基础上从DIB中直接执行,不需要为相关性和执行时间的分析花费时间。
DIB可以被构成为超高速缓冲存储器,由指令标识符,例如原始指令流中的指令地址来索引。在这种最简单的形式中,它可以被安排成一个存储器,采用地址中的一适当的位组来存取。在这种情况下,全部地址与其内容存储在一起或者存储在并行存储器中,并且与所要求的地址进行比较,来验证所述的组。存储器系统也与该存取并行地被存取,从而,如果DIB中有失配的话,可以在没有存储器系统延迟的情况下恢复执行。


图1示出了根据本发明的计算机处理装置的结构;图2示出了图1的并行机器的结构;图3示出了图2的译码指令缓冲器的项格式;图4示出了图2的当前组缓冲器的项格式;图5是图2的译码指令缓冲器的功能方框图;图6是图2的当前组缓冲器的功能方框图;图7是由图1的执行单元所执行的一系列指令的程序图;图8的表格示出了图7的程序序列中的指令之间的相关性;图9(A)-(C)是图7的程序序列的可执行路径;图10(A)-(C)示出了在分别处理图9(A)-(C)的程序序列时图1的组格式化装置的操作;图11是图1的组格式化装置的功能方框图;图12的流程图示出了图11的分配器在构造一组LDI时的操作;图13的流程图示出了图11的分配器在关闭一组LDI时的操作;图14(A)-(B)示出了当分配器在图11的组缓冲器中构造一组LDI时时间标记表和组缓冲器的状态;图15的流程图示出了图11的分配器在采用寄存器重新命名技术构造一组LDI时的操作;图16(A)-(B)示出了当分配器在采用寄存器重新命名技术在图11的组缓冲器中构造一组LDI时时间标记表和组缓冲器的状态;图17的流程图示出了分配器在处理指令以便将其结合到一组LDI中时进行的另外操作;
图18(A)-(D)示出了当分配器在采用图17所示的附加操作在图11的组缓冲器中构造一组LDI,以使得装入和存储操作保持次序时的时间标记表和组缓冲器的状态;图19示出了图1的组格式化装置在根据由图1的并行机产生的组的执行结果来修正一个组时的操作;图20是图2的当前组缓冲器的功能方框图,它能够扩展被压缩的LDI,以便由并行机的执行单元所执行。
参看图1,本发明的计算机处理设备包括一个常规的时序机,它有一个或多个定点执行单元101(示出了一个),一个或多个浮点执行单元103(示出了一个),以及一个或多个转移处理单元105(示出了一个)。存储系统107存储要被执行单元101、103、105执行的指令,数据超高速缓冲存储器109存储与定点和浮点执行单元103和105执行的指令有关的数据,由于是常规形式的,因此存储系统107可以包括一个主存储器和一个超高速缓冲存储器存储子系统。通常数据超高速缓冲存储器109和超高速缓冲存储器存储子系统被设置为相关的结构。数据超高速缓冲存储器109可以是与存储器系统107的超高速缓冲存储器存储子系统分开的一个结构(通常称为分离超高速缓冲存储器),或者是存储系统107的超高速缓冲存储器存储子系统的一部分(通常称为组合超高速缓冲存储器)。
指令队列111连接起来接收从存储系统107中取出的指令。指令可以逐条从存储系统107中取出,也可以成组取出,通常将组称为块。在超高速缓冲存储器中,最佳的方式是取指令块,因为它能为操作数提供更大的超高速缓冲存储器存取。在目前的情况下,一块通常是一个4倍字(QW-16个字节)或者是8个字(32个字节),但是在未来的机器中,块的规格可能会更大。此外,指令可以或者不可以定位在块边界上。
从存储系统107取出指令到指令队列111的操作由取指控制单元113协调。取指控制单元113的功能可以包括产生地址和对取指地址的翻译。取指控制单元113的基本功能是将某个地址装入取指地址寄存器(没有示出),而该地址识别从存储系统107取到指令队列111的指令块。取指控制单元111也可以包括,控制存储系统107推测性地预取指令到指令队列111的预取逻辑。通常这种预取逻辑包括一个转移历史表和相关的控制逻辑。在Pomerene等人的美国专利4679141中可以看到对这种预取逻辑的详细描述,该美国专利被共同转让给本发明的受让人,在此将全部作为本发明的参考文献。
调度单元115从指令队列111装入指令,将该指令译码,并且调度被译码的指令由适当的执行单元101、103和105执行,由定点和浮点执行单元101和103执行的指令结果被送到通用寄存器组117进行更新。由转移处理单元105执行的转移指令的结果被提供到条件寄存器119进行更新。定点和浮点执行单元101、103和转移处理单元105按常规方式对专用寄存器组120进行存取。专用寄存器组120可以包括例如一个连接寄存器、一个计数寄存器和一个定点异常寄存器。
完成/异常单元116从调度到执行跟踪指令,然后按程序次序推出指令。此外,完成/异常单元116包括一个程序计数器(没有示出),它存储指令流中的下一条指令的地址,并且经由NEXT_IADDR总线121将该地址输出到取指控制单元113。
运行常规时序机的逻辑大部分类似于Grohoski,G.F.在IBMJournal of Research and Development,vol.34,no.1,Jan.1990,pp.37-58″Machine Organization of the IBM RISC System/6000Processor″中描述的逻辑。一般来说,由取指控制单元113向存储系统107提供的地址被用于存取一组连续的指令,并将它们取到指令队列111。在接下来的一个周期,调度单元115从指令队列的底部装入一条和多条指令,对这些指令进行译码,并且安排被译码的指令由适当的执行单元101、103、105执行。例如,调度单元115可以安排一条定点指令到定点单元101,一条浮点指令到浮点单元103,一条转移指令到转移处理单元105。此外,如果没有一条被译码指令是转移指令,那么可以对指令队列111中的剩余指令进行扫描,来搜寻转移指令,如果找到一条转移指令,那么该指令也在当前的周期中被安排给转移处理单元105执行。
在接下来的周期。执行从调度单元115送出的被安排的指令。在这同一周期,完成/异常单元116重排已完成的指令的结果,并且将下一条指令的地址经由NEXT_IADDR总线121提供给取址单元113。
此外,时序机的调度单元115可以将某些被译码指令翻译为一条和多条指令,在安排这些被翻译的指令由执行单元101、103、105执行之前,这些指令与原始的指令具有不同的格式。例如,调度单元115可以翻译某些复杂的(例如CISC类型)指令为一条和多条较简单的(例如RISC类型)指令,并且安排这些指令由执行单元101、103、105来执行。
如上所述,常规的时序机每周期最多能够执行一个定点操作、一个浮点操作以及一个转移操作,条件是指令块包括了所需要的指令,并且相关的数据被提供在存储系统的超高速缓冲存储器子系统中,另外转移处理单元105不浪费等待由定点和/或浮点执行单元101、103产生结果的周期。
根据本发明,在将一条与多条指令调度给执行单元101、103和105的同时,被调度的指令提供给组格式化装置123进行分析。在指令执行的同时和/或指令执行之后,组格式化装置123分析指令的依赖性和指令等待时间,根据分析的情况产生多组长译码指令(LDI),并且将多组LDI作为指令项保存在并行机125的译码指令缓冲器(DIB)中。每组代表存储在存储系统107中的原始指令流的一个序列SG。一个特定组的每个LDI代表能在一个单机器周期中并行执行的(原始指令流的序列SG的)一个子序列SL的替代编码。由组格式化装置123构成的多组LDIs被保存在并行机125的DIB中,所以同一指令序列的下一步执行可以由并行机125的功能单元并行执行。下面描述的组格式化装置和并行机的执行可以是流水式的,以提供改进的吞吐量。
重要的是,组格式化装置123将LDI按组安排,以便在组内不按次序执行指令,从而使并行机125的效率最大。此外,注意到组格式化装置123并不简单地翻译存储在存储系统107中的指令,使得这些指令和存储在DIB中的替代编码之间具有一一对应关系。事实上,组格式化装置123相对于先前的被调度指令分析被调度的指令相关性和指令等待时间,并且根据这一分析推导出替代编码。由于由组格式化装置进行的分析是“上下文相关的”(即相关于先前指令的控制流和运行约束),组格式化装置可以导出与存储在存储系统107中的特定指令有关的多个替代编码。例如,考虑存储在存储系统107中的两个指令序列,第一指令序列包括在存储系统107的存储单元A、B、X、Y位置上的指令,第二指令序列包括在存储系统107的存储单元A、C、Y位置上的指令。在这个例子中,组格式化装置123可以产生与每个序列有关的替代编码,然而,由组格式化装置123产生的所有这些替代编码都与指令A和Y有关。下面对组格式化装置123作更详细的描述。
如图2所示,并行机125包括一个当前组缓冲器(CGB)204和若干能够执行存储在CGB204中的替代被译码指令的执行单元。并行机125的执行单元可以是对称的,从而可以进行定点运行、浮点运行和转移运行中的任意一种。在另一种情况下,并行、125的执行单元可以是非对称的。例如,如图2所示,并行机125包括四个功能单元FU0,…,FU3,和两个转移处理单元BP0,BP1。功能单元可以是定点执行单元和/或浮点执行单元。在这种情况下,每个功能单元具有经由GPR总线往来于通用寄存器117、经由数据_超高速缓冲存储器总线往来于数据超高速缓冲存储器109、经由CR总线往来于条件寄存器119以及经由SPR总线往来于SPR装置120的一条通路。此外,执行定点操作的并行机125的执行单元可以有计算和翻译地址的能力,并且能与数据超高速缓冲存储器进行通讯。对并行机执行单元的例子的详细描述可以参看美国申请(代理人案卷号AT992-907),该申请的申请人是Ebcioglu和Groves,并且与本发明转让给同一受让人,该申请在此全文作为本发明的参考文献。此外,如果存储在CGB 204中由LDI编码的指令的格式与时序机的一个和多个执行单元兼容,兼容指令可以在时序机的执行单元上执行,从而使得并行机125和时序机共享执行单元。
一般来说,DIB 200可以像超高速缓冲存储器一样安排作为一个指令项阵列,其中,每个指令项包括一个组标识符(GID)和组指令数据(GRP)。如图3所示。组标识符(GID)识别由指令项编码的指令组内的第一指令的地址。组标识符(GID)最好是组内第一指令的地址的一部分。组指令数据(GRP)代表在组内被编码的LDI集。此外,每个指令项也可以包括一个应用字段U(没有示出),它可以在例如DIB200满时用于控制指令项的替换和/或重写。如图5所示,DIB200可以像常规的超高速缓冲存储器一样被安排为一个指令项阵列300。例如,DIB200可以包括256个指令项,每个指令项包括128个字节。此外,DIB200可以具有全相联、组相联或直接映象结构。如图所示,DIB200是组相联的,它被安排为2组,每组128个指令项。DIB200的结构与运行的详细例子可以参看Addison-Wesley Pub.Co.,1987,第29至69页,Stone所著的“高性能计算机体系结构”,在此全文作为本发明的参考文献。
如图4和图6所示,CGB204可以被安排为一个指令项阵列,其中每个指令项存储一个LDI,如上所述,LDI代表能够在一个单机器周期中执行的一组原始指令的一个替代编码。例如,CGB204可以包括如图所示的四个指令项LDI0、LDI1、LDI2、LDI3。每个LDI包括描述一个单机器周期内对图2的并行机125的执行单元的控制的操作字段。例如,LDI0包括分别控制功能单元FU0、FU1、FU2、FU3的操作字段FU00,FU10、FU20、FU30,以及包括分别控制转移处理单元BP0和BP1的操作字段BP00和BP10。在这个例子中,LDI0的操作字段可以在一个第一机器周期控制并行机125的执行单元,操作字段LDI1在继第一周期之后的一个第二机器周期控制执行单元,操作字段LDI2在继第一周期和第二周期之后的一个第三机器周期控制执行单元,操作字段LDI3在继第一周期、第二周期和第三周期之后的一个第四机器周期控制执行单元。
重要的是,LDI0、LDI1、LDI2、LDI3中的一个包括一个BP操作字段,它通过控制一个转移处理单元BP0或BP1来中止该组,以便转移到组外。该转移到组外的地址可以是到存储在DIB200中的另一组的地址,也可以是到存储在存储系统107的原始序列中的一条指令的地址。例如,如果一组是满的(即在每个LDI中包含指令),LDI3可以包括操作字段BP03,它通过控制转移处理单元BP0来中止该组,以便转移到组外。在另一个例子中,LDI1可以包括操作字段BP11,它通过控制转移处理单元BP1来中止该组,以便转移到组外。转移处理单元最好是通过将组外的地址放在NEXT_IADDR总线121上来向组外转移。
此外,由于并行机125的多个转移处理单元能够在一个给定的机器周期内完成一条以上的转移指令,因此最好将一个转移处理单元指定为比其它转移处理单元具有较高的优先级,从而,如果两个转移处理单元都确定由相应的操作字段编码的转移指令已经做了分解,那么具有最高优先级的转移处理单元将做了分解的转移指令的目标地址放在NEXT_IADDR总线121上。例如,可以指定BP0比BP1具有较高的优先级。在这种情况下,与BP1相关的LDI的操作字段所相应的转移指令比与BP0相关的LDI的操作字段所相应的转移指令在原始程序序列中较后出现。因此,在给定的LDI中,如果两个转移处理单元BP0和BP1都确定由相应的操作字段编码的转移指令已经做了分解,那么具有最高优先级的转移处理单元BP0将做了分解的转移指令的目标地址放在NEXT_IADDR总线121上,从而保持原始程序序列的控制流。
并行机125的功能单元按次序执行CGB204的LDI。更详细地说,在第一机器周期,LDI0的操作字段被调度到并行机125的功能单元予以执行,LDI1、LDI2、LDI3的操作字段被分别移位到LDI0、LDI1、LDI2。在该第一周期,功能单元FU0,…,FU3执行由它们在LDI0中的相应操作字段编码的指令。此外,在第一周期,转移处理单元BP0和BP1通过检查条件寄存器119并将其与要求的条件进行比较,来执行由它们在LDI0中的相应操作字段编码的转移指令。
如果转移处理单元BP0和BP1中仅有一个确定由LDI0的相应的操作字段编码的转移指令已经做了分解,那么这一个转移处理单元检查已做了分解的转移指令的目标地址,确定目标地址是否指向当前存储在CGB204中的组内的一个LDI,或指向组外的指令。如果这一个转移处理单元确定目标地址指向组内的一个LDI,那么这个转移处理单元相应地移位LDI的操作字段,以使得特定的LDI由并行机125的功能单元和转移处理单元在下一机器周期调度执行。然而,如果这一个转移处理单元确定目标地址指向组外,那么这个转移处理单元通过将目标地址提供在NEXT_IADDR总线121上来向组外转移。
如果两个转移处理单元BP0和BP1都确定由LDI0的相应的操作字段编码的转移指令已经做了分解,那么具有最高优先级的转移处理单元,例如BP0,检查已做了分解的转移指令的目标地址,来确定目标地址是否指向当前存储在CGB204中的组内的一个LDI,或指向组外的指令。如果具有最高优先级的转移处理单元确定目标地址指向组内的一个LDI,那么这个具有最高优先级的转移处理单元相应地移位LDI的操作字段,以使得特定的LDI由并行机125的功能单元和转移处理单元在下一机器周期调度执行。然而,如果这个具有最高优先级的转移处理单元确定目标地址指向组外,那么这个具有最高优先级的转移处理单元通过将目标地址提供在NEXT_IADDR总线121上来向组外转移。
最后,如果两个转移处理单元BP0和BP1都确定由LDI0的相应的操作字段编码的转移指令没有做分解,并行机125继续处理序列中的下一个LDI,除非当前的LDI包括如上所述的中止转移到组外,此时组外的地址被放在NEXT_IADDR总线121上。
在描述了DIB200和CGB204的结构之后,现在参考图2-6来描述DIB200和CGB204的运行。为了方便描述起见,考虑三个机器周期,其中第二机器周期紧随第一机器周期,第三机器周期紧随第二机器周期。此外,在第一机器周期中,常规的时序机已经完成了一条指令,并将下一条指令的地址放在NEXT_IADDR总线121上。如上所述,DIB200存储代表原始指令集的数据,使得同一原始指令集的下一步执行可以由并行机125的执行单元并行执行。另一方面,CGB202存储代表当前正由并行机125的执行单元并行执行的一个单一原始指令集或组的数据。
为了确定下一条指令是否是在DIB200中编码的指令集的一部分,一个NID发生器206根据NEXT_IADDR总线121上提供的下一条指令的地址产生下一条指令标识符(NID)。该下一条指令标识符NID必须对应于DIB200的指令项的GID(s)。例如,当每个指令项的GID是组中第一指令的地址的一部分时,该下一条指令标识符(NID)可以是NEXT_IADDR总线12上提供的地址的相应部分。
在第一机器周期,控制单元202经由DIB控制总线208控制DIB200将NID发生器206产生的NID装入输入锁存器304,如图5所示。在第一机器周期,存储在DIB200中的输入锁存器304的NID或全部NID的一部分被提供给一个译码器306,它的功能是启动阵列300的相应行。被启动行的每个指令项(如图所示的两个指令项)被从阵列300读出,并与存储在输入锁存器304中的NID一起提供给命中识别与检测逻辑308。命中识别与检测逻辑确定从阵列304读出的一个指令项的GID是否与经由输入锁存器304提供的NID匹配。如果该条件满足,命中识别与检测逻辑308输出一个DIB命中信号到控制单元202,并且输出匹配指令项的GRP数据。否则,命中识别与检测逻辑308输出一个DIB未命中信号到控制单元202。
在第一周期,如果控制单元202从DIB200的命中识别与检测逻辑308接收一个DIB命中信号(即指令是存储在DIB200中的一个组的一部分),控制单元202控制CGB204装入由DIB200输出的组数据。然而,如果控制单元202从DIB200的命中识别与检测逻辑308接收一个DIB未命中信号(即指令不是存储在DIB200中的一个组的一部分),控制单元202控制时序机在第二周期执行由NEXT_IADDR总线121上提供的地址所指示的下一条指令。
在第二周期,并行机125的功能单元和转移处理单元执行在第一周期装入到CGB204的LDI组的LDI0。如上所述,并行机125的转移处理单元通过检查条件寄存器119并将其与要求的条件进行比较,执行由LDI0的相应操作字段编码的转移指令。
如果转移处理单元BP0或BP1中仅有一个确定由LDI0的相应的操作字段编码的转移指令已经做了分解,那么这一个转移处理单元检查已做了分解的转移指令的目标地址,确定目标地址是否指向当前存储在CGB204中的组内的一个LDI,或指向组外的指令。如果这一个转移处理单元确定目标地址指向组内的一个LDI,那么这个转移处理单元相应地移位LDI的操作字段,以使得特定的LDI被调度给并行机125的功能单元和转移处理单元在第三机器周期执行。然而,如果这一个转移处理单元确定目标地址指向组外,那么这个转移处理单元将目标地址提供到NEXT_IADDR总线121上。
如果两个转移处理单元BP0和BP1都确定由LDI0的相应的操作字段编码的转移指令已经做了分解,那么具有最高优先级的转移处理单元,例如BP0,检查已做了分解的转移指令的目标地址,来确定目标地址是否指向当前存储在CGB204中的组内的一个LDI,或指向组外的指令。如果具有最高优先级的转移处理单元确定目标地址指向组内的一个LDI,那么这个具有最高优先级的转移处理单元相应地移位LDI的操作字段,以使得特定的LDI被调度给并行机125的功能单元和转移处理单元在第三机器周期执行。然而,如果这个具有最高优先级的转移处理单元确定目标地址指向组外,那么这个具有最高优先级的转移处理单元将目标地址提供到NEXT_IADDR总线121上。
此外,在第二周期,如果LDI0包括一个如上所述在组外的中止转移指令,那么适当的转移处理单元将组外的下一条指令的地址提供给NEXT_IADDR总线121。
在第二周期中,当并行机125的一个转移处理单元将一个地址提供给NEXT_IADDR总线121时,NID发生器206根据NEXT_IADDR总线121上的地址产生下一个指令识别符(NID),并且控制单元202用如上所述产生的NID存取DIB200,来确定是否在DIB200中发现了匹配指令项。如果发现了,控制单元202从DIB200的命中识别与检测逻辑308接收一个DIB命中信号,并且控制单元202控制CGB204装入由DIB200输出的组数据,以在第三机器周期执行。然而,如果没有发现匹配指令项,那么控制单元202从DIB200的命中识别与检测逻辑308接收一个DIB未命中信号,并且控制单元202控制时序机在第三周期执行由NEXT_IADDR总线121上的地址所识别的下一条指令。
最后,在第二周期,如果两个转移处理单元BP0和BP1都确定由LDI0的相应操作字段编码的转移指令没有予以分解,那么并行机125的运行继续到第三机器周期,在其中,序列中的下一个LDI,即LDI1,按如上所描述的在第二机器周期处理LDI0那样被处理。
因此,只要下一地址指向CGB204中的一个LDI或指向DIB200的一个指令项,并行机125就在每个周期退出一个LDI。
如上所述,并行机125中只有一个转移处理单元存取DIB200来确定序列中的下一条指令是否在DIB200中。然而,本发明并非仅仅局限于此。在一个更复杂的实施例中,DIB200可以是多端口的,从而使得例如并行机125的两个转移处理单元BP0和BP1能够存取DIB200。在这种情况下,DIB200的结构可以予以改进,以使得若干匹配指令项可以从DIB中读出,并且相应于具有最高优先级的转移处理单元的匹配指令项被选择并且被装入到CGB204进行处理。这种方法可以被用来使得确定序列中的下一条指令是否在DIB200中所需要的时间最短。
在由时序机的执行单元执行指令的同时和/或即此之后,组格式化装置123分析这些指令的相关性和指令等待性,根据分析结果产生长译码指令(LDI)组,并且将LDI组作为指令项保存在并行机125的DIB中,以便这些指令的下一次执行可以由并行机125并行进行。
现在采用图7至10所示的一个例子描述组格式化装置123根据原始指令序列的分析产生LDI组的运行。
图7的程序图示出了存储在存储系统107中将要由时序机的执行单元101、103、105执行的一个指令序列的例子。在指令a、b、c之后是一个转移指令bcx,它测试一个条件x,如果x=0,转移到指令d,如果x=1,转移到指令k。在指令k的路线上有指令l、m、n和o,在指令d的路线上有指令e、f、g和另一个转移指令bcy,它测试一个条件y,如果y=0,转移到指令p,如果y=1,转移到指令h。这两个路线都向后并入指令i、j。
图8示出了序列内每个指令的相关性。在这个序列中,指令a和b不依赖于其他指令。指令c依赖于指令a及指令b,这意味着它只能在指令a和b执行之后才能执行。其它指令与此类似。最后,转移指令bcx依赖于指令a的结果,而转移指令bcy依赖于指令e的结果。
图9示出了由时序机的执行单元101、103、105执行指令序列的三个例子。在如图9(A)所示的第一例中,转移指令bcx采用与x=0对应的路线,而转移指令bcy采用与y=1对应的路线。在如图9(B)所示的第二例中,转移指令bcx采用另一路线,即与x=1相对应的通道。最后在如图9(C)所示的第三例中,转移指令bcx采用与x=0相对应的路线,而转移指令bcy采用与y=0相对应的路线。
图10(A)示出了组格式化装置123根据图9(A)指令序列的分析结果产生一组LDI(LDI0,…,LDI3)的操作。指令序列以指令a和b开头。由于指令a和指令b不依赖于任何其它指令,组格式化装置123分别产生对应于指令a和b的操作字段FU0和FU1,并且将操作字段如图所示放入LDI0。指令c跟在指令a和b之后。由于指令c同时依赖于指令a和b,组格式化装置123产生相应于指令C的操作字段FU0,并且将操作字段如图所示放入LDI1。
接下来是转移指令bcx。如果转移指令按次序放置(如图所示),那么转移指令必须在不早于先于转移指令的指令的LDI之前被放在LDI中。要求这种条件是因为当执行组的LDI时,如果并行机125确定被编码的转移指令的转移条件已得到满足,那么必须完成转移之前的指令。如果转移指令不按次序安排,那么必须存储额外的信息来指明对每条转移指令相应于特定转移指令之前的指令的最后LDI。在这种情况下,当执行组的LDI时,如果并行机125确定一条被编码指令的转移条件已经得到满足,那么并行机必须一直执行LDI直到由存储信息指明的最后的LDI为止,从而完成转移指令之前的指令。
因此,对于按序执行转移指令(如图所示),组格式化装置123相应于转移指令bcx产生一个操作字段BP0,并放入LDI1。此外,由组格式化装置123在操作字段BP0中编码的控制流最好相应于时序机确定的转移指令bcx的输出。因此,由于时序机已确定条件x=0在遇到转移指令bcx时满足,图中所示的LDI1的BP0指示如果x=1,并行机125应该转移到组外,至标号LK(即指令k)。
指令d在序列中跟随在转移指令bcx之后。由于指令d依赖于指令a和c,组格式化装置123相应于指令d产生一个操作字段,并放入LDI2。组格式化装置123也可以设置一个相关于指令d的标志位,指示指令d只有当bcx的条件满足x=0时才由并行机125执行。指令d之后是指令e。由于指令e不依赖于任何其他指令,组格式化装置123相应于指令e产生一个操作字段FU2,并放入LBI0。组格式化装置123也可以设置一个相关于指令e的标志位,指示指令e只有当bcx的条件满足x=0时才由并行机125执行。序列中的下一条指令是指令f。由于指令f依赖于指令e,组格式化装置123相应于指令f产生一个操作字段FU1,并放入LDI1。组格式化装置123也可以设置一个相关于指令f的标志位,指示指令f只有当bcx的条件满足x=0时才由并行机125执行。序列中的下一条指令是指令g。由于指令g依赖于指令e和f,组格式化装置123相应于指令g产生一个操作字段FU1,并放入LDI2。组格式化装置123也可以设置一个相关于指令g的标志位,指示指令g只有当bcx的条件满足x=0时才由并行机125执行。
指令g之后是转移指令bcy。由于转移指令bcy必须在不早于先于转移指令bcy的指令的LDI之前放入LDI,组格式化装置123相应于转移指令bcy产生一个操作字段BP0,并放入LDI2。此外,由组格式化装置123在操作字段BP0中编码的控制流最好相应于时序机确定的转移指令bcy的输出。因此,由于时序机已确定条件y=1在遇到转移指令bcy时满足,图中所示的LDI2的操作字段BP0指示如果y=0,并行机125应该转移到组外,至标号LP(即指令p)。
指令h跟随在转移指令bcy之后。由于指令h依赖于指令b和f,组格式化装置123相应于指令h产生一个操作字段FU2,并放入LDI2。组格式化装置123也可以设置一个相关于指令h的标志位,指示指令h只有当bcx的条件满足x=0,并且bcy的条件满足y=1时才由并行机125执行。指令h之后是指令i。由于指令i依赖于指令d和g,组格式化装置123相应于指令i产生一个操作字段FU0,并放入LDI3。组格式化装置123也可以设置一个相关于指令i的标志位,指示指令i只有当bcx的条件满足x=0,并且bcy的条件满足y=1时才由并行机125执行。
序列中接下来是指令j。由于指令j依赖于指令i,并且没有更多可用的LDI(即指令i在组中最后的LDI(LDI3)中被编码),指令j不能放在当前组中。在这种情况下,组格式化装置123通过产生一个操作字段BP0来关闭该组,该操作字段BP0只有当bcx的条件满足x=0并且bcy的条件满足y=1时表示向指令j的地址的转移。
当组关闭后,组格式化装置123将被关闭的组写入到DIB中,然后通过产生相应与指令j的一个操作字段FU0来开始新组,并将操作字段放入新组的LDI0中。对于新组的指令序列,组格式化装置123继续上面所描述的操作。
与此类似,图10(B)和10(C)示出了由组格式化装置123分别根据图9(B)和9(C)的指令序列所实现的组的格式。
在描述了组格式化装置123的运行之后,现在提出组格式化装置123的一个特定的硬件实施例。如图11所示,组格式化装置123可以包括一个分配器501,一个操作字段编码器503,一个时间标记表(TST)505和一个组缓冲器507。
操作字段编码器503接收由调度单元115调度的指令,由时序机的执行单元执行,并且还接受由时序机的转移处理单元105产生的转移输出(BR)。对这些指令的每一个,操作字段编码器503产生至少一个相应于该指令的操作字段。由操作字段编码器503所作的编码可以包括对指令进行格式化,使得它的格式与并行机125的功能单元和转移处理单元兼容,和/或将指令翻译为与并行机125的功能单元和转移处理单元兼容的一个或多个操作字段。操作字段编码器503翻译指令操作的详细描述可以参看例如美国专利申请(专利案卷号为Y0 995-026),申请人为P.Emma,发明名称为“由任意的基础指令集结构透明仿真现有指令集结构的方法和设备”,该申请与本发明同时提交,并转让给同一受让人,在此全文作为本发明的参考文献。此外,对于转移指令来说,由操作字段编码器503进行的编码最好相应于由从时序机的转移处理单元105提供的BR数据所证实的转移指令的输出。
TST505包括与指令或可使用或可定义的并行机125的每个寄存器资源有关的定时信息。一般来说,分配器501采用存储在TST505中的定时信息和由操作字段编码器503产生的操作字段来构造当前的LDI组。组缓冲器507在由分配器501构造组时被用来存储当前的LDI组。
详细地说,TST505存储识别当前组的LDI的时间标记识别符,在该当前组中并行机125的相关寄存器资源是可用的(即定义该寄存器资源的组的先前指令将被完成)。例如,并行机125可以包括76个寄存器,如PowerPC微处理器的通常情况那样,其中,76个寄存器中有32个通用寄存器,32个浮点寄存器,一个连接(LR)寄存器,一个计数(CTR)寄存器,一个定点异常(XER)寄存器和一个浮点状态和控制(FPSCR)寄存器。在这种情况下,TST505可以包括76个单元,每个单元存储一个识别当前组的LDI的标识,其中的相关寄存器是可用的。
对每个被调度来由时序机的执行单元执行的指令,分配器501与TST505、操作字段编码器503和组缓冲器507交互作用,如图12和13的流程图所示,来形成并存储与这些指令相关的LDI组。分配器501的执行可能包括例如一个定序器或组合逻辑。从步骤600开始,分配器501检查特定的指令是否为一条条件转移指令。如果是,那么在步骤602,分配器501控制操作字段编码器503将相应于指令的操作字段写入到对应于组缓冲器507中的一个current_max标志的LDI的可用存储槽,并且对由指令定义的每个资源,将与资源相关的时间标记识别符更新为{current_max标志+1},并且将更新的时间标记识别符写入TST505。current_max标志跟踪当前最大LDI,从而使得条件转移指令可以保持次序。如果条件转移指令被无序放置,那么必须存储额外的信息来指示对于每条转移指令而言相应于该特定转移指令之前的指令的最后的LDI。在这种情况下,当执行组的LDI时,如果并行机125确定一条被编码的条件转移指令的转移条件已得到满足,那么并行机执行LDI直至由存储的信息指示的最后的LDI,从而使得条件转移指令之前的指令被完成。步骤602之后,为了归并到当前组,运行返回步骤600,开始处理序列的下一条指令。
如果在步骤600中,分配器确定该指令不是一条件转移指令,运行继续进行到步骤601。在步骤601,对由特定指令使用的每个资源来说,分配器501从TST505检索相应于该资源的时间标记识别符,识别其中的资源将是可用的LDI。在步骤603,分配器501确定在步骤601中检索的最大的时间标记识别符,为了示意起见标记为TSuse(MAX)。在步骤605,对由特定指令定义的每个资源而言,分配器501从TST505检索相应于该资源的时间标记识别符,识别其中的资源将是可用的LDI。在步骤607,分配器501确定在步骤605中检索的最大的时间标记识别符,为了示意起见标记为TSdef(MAX)。
在步骤609,分配器501给TSuse(MAX)和TSdef(MAX)中的较大者设置一个最先LDI标志,从而,如果特定的指令定义已经由组中的指令所限定的资源(即重新定义的任何资源),那么特定指令位于这些指令之前。在步骤613,分配器501确定通过检查该最先LDI标志是否大于3来确定在当前组中是否还有存放指令的空间(即组是否已满)。如果是,那么组是满的,运行继续到图13所示的步骤,来关闭该组,并且将关闭的组从组缓冲器507写入到并行机125的DIB,对此下面将作讨论。如果组不是满的,运行继续到步骤615,确定相应于最先LDI标志的LDI中的存储槽是否可用。如果不,在步骤617中,最先LDI标志被递增,运行返回到步骤613。然而,如果在步骤615中,在相应于最先LDI标志的LDI中的一个存储槽是可用的,那么运行进行到步骤619至621。在步骤619,分配器501控制操作字段编码器503将相应于指令的操作字段写入到存储在组缓冲器507中的LDI的可用存储槽中。在步骤621,对每个由指令定义的资源来说,分配器501将相关于资源的时间标记识别符更新为{最先LDI标志+1},并将被更新的时间标志识别符写入到TST505中。
在步骤622中,分配器501确定current_max标志是否小于最先LDI标志,如果是的话,将current_max标志设置为最先LDI标志,由此更新current_max标志。
在最佳实施例中,特定指令可以被指定为停止指令(即,即使组不满也可以使组自动关闭的指令)。例如,一条寄存器转移指令可以被指定为一个停止指令。在这种情况下,在步骤623中,分配器501检查指令是否为一条停止指令,如果是,运行继续到图13所示的步骤,如下面所述,关闭该组,并且将关闭的组从组缓冲器505写入到并行机125的DIB。然而,如果在步骤623中,分配器确定指令不是一条停止指令,那么分配器的运行返回到步骤601去处理序列中的下一条指令。
分配器501关闭组并将被关闭的组从组缓冲器507写入到并行机125的DIB中的操作详细地示于图13。在步骤650中,分配器501启动,检查组是否由于一条寄存器转移指令而被停止。这可以通过检查步骤623中设置的一个标志来完成。如果在步骤650中分配器501确定指令是一条寄存器转移指令,那么在步骤652中,分配器控制操作字段编码器503将相应于指令的操作字段写入到相应于组缓冲器507中一个current_max标志的LDI的可用存储槽,并且,对每个由指令定义的资源来说,将相关于资源的时间标记识别符更新为{current_max标志+1},并将被更新的时间标记识别符写入TST505。
如果在步骤650,分配器501确定指令不是转移指令,那么组一定是满的。因此,在步骤651,分配器501确定相应于current_max标志的LDI的BP0存储槽是否可用。如果是,在步骤653,分配器501将代表一条终止转移指令的操作字段放入组缓冲器505的可用的BP0存储槽,并且继续到步骤655。终止转移指令的目标地址指向序列中将要被执行的下一条指令的地址。
然而,如果在步骤651中,BP0存储槽不可用,那么,运行继续到步骤617,其中分配器501把代表终止转移指令的操作字段放到相应于组缓冲器507的current_max标志的LDI的BP1存储槽中。并且运行继续到步骤655。终止转移指令的目的地址指向序列中将要被执行的下条指令的地址。
在步骤655,分配器501将组缓冲器507写入并行机125的DIB。在步骤659,分配器501清除组缓冲器507。最后,在步骤661,在返回到相关于图12所讨论的步骤来开始处理序列的下一条指令以便合并到一个新组之前,分配器501复位最先_LDI标志和TST505。
上面讨论的组格式化装置123的运行最好用一个简单的例子示出。考虑下面的指令序列1. a r1=r2,r3(R1=R2+R3)2. a r4=r1,r5(R4=R1+R5)3.mulr3=r1,r4(R3=R1*R4)4. a r4=r2,r5(R4=R2+R5)5.incr4(R4=R4+1)6.mulr2=r3+r4(R2=R3*R4)图14(A)和(B)示出了当组格式化装置123运行来将这一指令序列格式化为上面相应于图12和13描述的一个组时TST505和组缓冲器507的状态。
在组的开始,在处理第一指令之前,将TST505初始化,使每个存储单元为零。对第一指令来说,由于指令采用的资源r2和r3有一个相应的时间标记识别符0,分配器在步骤603将TSuse(MAX)定义为0。此外,由于由指令定义的资源r1有一个相应的时间标记识别符0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为0,并且流程进行到步骤613。在步骤613,由于现在被设置为0的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI0)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI0中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第一指令的操作字段放在LDI0的存储槽中,如图14(B)所示。然后,在步骤621,分配器501相应于由第一指令定义的资源(此时为r1)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为1,如图14(A)所示。在步骤623,由于第一指令不是一条停止指令,组格式化装置123的运行继续到序列中的第二指令。
对第二指令来说,由于指令采用的资源r1和r5分别有一个相应的时间标记识别符1和0,分配器在步骤603将TSuse(MAX)定义为1。此外,由于由指令定义的资源r4有一个相应的时间标记识别符0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为TSuse(MAX),所以它等于1,并且流程进行到步骤613。在步骤613,由于现在被设置为1的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI1)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI0中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第二指令的操作字段放在LDI1的FU0存储槽中,如图14(B)所示。然后,在步骤621,分配器501相应于由第二指令定义的资源(此时为r4)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为2,如图14(A)所示。在步骤623,由于第二指令不是一条停止指令,组格式化装置123的运行继续到序列中的第三指令。
对第三指令来说,由于指令采用的资源r1和r4分别有一个相应的时间标记识别符1和2,分配器在步骤603将TSuse(MAX)定义为2,此外,由于由指令定义的资源r3有一个相应的时间标记识别符0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为TSuse(MAX),所以它等于2,并且流程进行到步骤613。在步骤613,由于现在被设置为2的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI2)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI2中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第三指令的操作字段放在LDI2的FU0存储槽中,如图14(B)所示。然后,在步骤621,分配器501相应于由第三指令定义的资源(此时为r3)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为3,如图14(A)所示。在步骤623,由于第三指令不是一条停止指令,组格式化装置123的运行继续到序列中的第四指令。
对第四指令来说,由于指令采用的资源r2和r5有一个相应的时间标记识别符0,分配器在步骤603将TSuse(MAX)定义为0,此外,由于由指令定义的资源r4有一个相应的时间标记识别符2,分配器在步骤607将TSdef(MAX)定义为2。在步骤609,分配器501将最先_LDI标志设置为2,并且流程进行到步骤613。在步骤613,由于现在被设置为2的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI2)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU1在LDI2中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第四指令的操作字段放在LDI2的FU1存储槽中,如图14(B)所示。然后,在步骤621,分配器501相应于由第四指令定义的资源(此时为r4)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为3,如图14(A)所示。在步骤623,由于第四指令不是一条停止指令,组格式化装置123的运行继续到序列中的第五指令。
对第五指令来说,由于指令采用的资源r4有一个相应的时间标记识别符3,分配器在步骤603将TSuse(MAX)定义为3,此外,由于由指令定义的资源r4有一个相应的时间标记识别符3,分配器在步骤607将TSdef(MAX)定义为3。在步骤609,分配器501将最先_LDI标志设置为3,并且流程进行到步骤613。在步骤613,由于现在被设置为3的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI3)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI3中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第五指令的操作字段放在LDI3的FU0存储槽中,如图14(B)所示。然后,在步骤621,分配器501相应于由第五指令定义的资源(此时为r4)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为4,如图14(A)所示。在步骤623,由于第五指令不是一条停止指令,组格式化装置123的运行继续到序列中的第六指令。
对第六指令来说,由于指令采用的资源r3和r4分别有一个相应的时间标记识别符3和4,分配器在步骤603将TSuse(MAX)定义为4,此外,由于由指令定义的资源r2有一个相应的时间标记识别符0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为TSuse(MAX),它等于4,并且流程进行到步骤613。在步骤613,由于现在被设置为4的最先_LDI标志大于三,分配器501转移到图13的步骤,关闭该组并将存储在组缓冲器507中的被关闭的组写入并行机125的DIB。然后分配器501的运行继续进行,按如上相应于第一至第五指令所述将第六指令和随后的指令格式化为一个新的组。
当在步骤609遇到资源重新定义条件时,分配器501如上所述在继定义公共资源的组的一条和多条先前指令之后将指令写入到一个LDI,即使由特定指令采用的资源可以在组中较早的LDI中得到。这不是对资源的最有效利用。在另一个实施例中,组格式化装置123可以采用美国专利4992938中描述的常规寄存器更名技术,该专利授予J.Cocke等人,与本发明转让给同一受让人,并在此作为本发明的参考文献。寄存器重新命名能够达到对并行机125的资源的更有效利用。
更详细地说,如图15所示,如上根据图12和13所描述的分配器501的运行可与予以修改,来使用寄存器重新命名技术。在这种情况下,在步骤700,分配器501首先检查特定指令是否是一条件转移指令。如果是,在步骤702,分配器501控制操作字段编码器503将相关于指令的操作字段写入相应于组缓冲器507中current_max标志的LDI的可用存储槽中,并且,对于每个由指令定义的资源,将相关于资源的时间标记识别符更新为{current_max标志+1},并将更新的时间标记识别符写入到TST 505。如上所述,current_max标志跟踪当前最大LDI,以便使得条件转移指令可以保持次序。步骤702之后,为了归并到当前的组中,运行返回到步骤700,开始处理序列的下一条指令。
如果在步骤700分配器501确定指令不是一条条件转移指令,操作则进行到步骤701。在步骤701,对由特定指令采用的每个资源来说,分配器501检查与资源相关的一个重新命名标志(下面会详细地讨论),并因此重新命名该资源。然后,在步骤704,对由特定指令采用的每个资源来说,分配器501从TST505检索相关于资源的时间标记识别符,它识别资源在其上面将是可用的LDI。在步骤706,分配器501确定在步骤704中检索的最大的时间标记识别符,为了示意的目的将其标记为TSuse(MAX)。
在步骤708,对由特定指令定义的每个资源而言,分配器501检查是否设置了相关的重新命名标志。如果没有,分配器501在步骤712设置重新命名标志,由此而指示组的随后指令,特定资源已经在先前被定义并且又将新的资源名初始化为资源的原始名称,并将操作进行到步骤718。
然而,如果在步骤708中,对于由特定指令定义的每个资源而言,分配器501确定重新命名标志已经设置,操作则进行到步骤710至716。在步骤710,分配器501定位一个自由资源,并且在步骤714将特定资源重新命名给该自由资源。在步骤716,分配器501设置一个重新命名标志来指示特定资源已经被重新命名,并将新的资源名设置给自由资源名,并将操作进行到步骤718。
在步骤718,分配器501将最先_LDI标志设置给步骤706中定义的TSuse(MAX),并且操作按如上关于图12所述的继续进行到步骤613,将代表指令的操作字段放在组缓冲器507中适当的LDI之中。
为了示意组格式化装置123采用如上所述的资源重新命名技术的操作,考虑上面提供的具有六条指令的同一序列。图16(A)和(B)示出了当组格式化装置123运行来将这一指令序列格式化为上面关于图15描述的一个组时的TST505和组缓冲器507的状态。
由于第四指令是序列中触发重新命名的第一条指令,组格式化装置123在处理第一至第三指令的操作结果保持不变。然而,对于第四条指令来说,在步骤708,相关于r4的重新命名标志已经设置,操作继续到步骤710,定位一个自由资源,例如图16(A)所示的资源rM。在步骤712,分配器501重新命名造成再定义条件的特定资源(在这种情况下为r4),为自由资源rM,并且在步骤716,分配器501设置相关于特定资源r4的重新命名标志和资源名称,来指示资源r4已经被明确地重新命名为rM。在步骤718,分配器501将最先_LDI标志设置为TSuse(MAX),它等于0,且流程进行到步骤613。在步骤613,由于现在被设置为0的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI0)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU1在LDI0中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第四指令的操作字段放在LDI0的存储槽FU1中,如图16(B)所示。然后,在步骤621,分配器501相应于由第四指令定义的资源(此时为rM)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为1,如图16(A)所示。在步骤623,由于第四指令不是一条停止指令,组格式化装置123的运行继续到序列中的第五指令。
对于第五指令,由于与由指令采用的资源(在这种情况下是r4)相关的重新命名标志指示资源r4已经被重新命名,分配器501将资源r4在步骤701重新命名为rM,如图16(A)所示。此外,由于由指令采用的资源rM有一个相应的时间标记识别符为1,分配器在步骤706定义TSuse(MAX)为1。在步骤708,由于相关于由指令定义的资源(此时是r4)的重新命名标志被设置,操作继续到步骤710,定位一个自由资源,例如图16(A)所示的资源rN。在步骤712,分配器501重新命名造成再定义条件的特定资源(在这种情况下为r4),为自由资源rN,并且在步骤716,分配器501设置相关于特定资源r4的重新命名标志和资源名称,来指示资源r4已经被明确地重新命名为rN。在步骤718,分配器501将最先_LDI标志设置为TSuse(MAX),它等于1,且流程进行到步骤613。在步骤613,由于现在被设置为1的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI1)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU1在LDI1中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第五指令的操作字段放在LDI1的存储槽FU1中,如图14(B)所示。然后,在步骤621,分配器501相应于由第五指令定义的资源(此时为rN)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为2,如图16(A)所示。在步骤623,由于第五指令不是一条停止指令,组格式化装置123的运行继续到序列中的第六指令。
对于第六指令,由于与由指令采用的资源(在这种情况下是r4)相关的重新命名标志指示资源r4已经被重新命名,分配器501将资源r4在步骤701重新命名为rN,如图16(A)所示。此外,由于由指令采用的资源r3和rN分别有一个相应的时间标记识别符为3和2,分配器在步骤706定义TSuse(MAX)为3。在步骤708,分配器501确定相关于由指令定义的资源(此时是r2)的重新命名标志还没有被再设置,操作继续到步骤712,以设置相关于r2的重新命名标志和将相关于r2的资源名标志设置为其原始名称。在步骤718,分配器501将最先_LDI标志设置为TSuse(MAX),它等于3,并且流程进行到步骤613。在步骤613,由于现在被设置为3的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI3)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU1在LDI3中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第六指令的操作字段放在LDI3的存储槽FU1中,如图14(B)所示。然后,在步骤621,分配器501相应于由第六指令定义的资源(此时为r2)更新时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为4,如图16(A)所示。在步骤623,由于第六指令不是一条停止指令,组格式化装置123的运行如上相对于第一至第六指令所作的描述继续进行到序列中的下一条相继的指令(没有示出)。
除了上面描述的处理步骤外,分配器501在步骤619可以相关于LDI的操作字段设置一个标志,指出根据由特定操作字段代表的功能要(或不)被执行的条件。在这种情况下,并行机125的执行单元被控制,只有当在由相关的字段代表的条件已经得到满足时,才执行由相应的操作字段代表的功能。
在上面描述的例子中,对于被调度来由时序机的执行单元执行的每个指令来说,操作字段编码器503产生一个对应于可以由并行机125的功能单元和转移处理单元在一个单机器周期中执行的指令单一操作字段。然而,本发明并不仅仅局限在此。在另一个实施例中,相应于指令的操作字段可以用一个以上的机器周期在并行机125的功能单元和转移处理单元上执行。分配器501在步骤621的操作被修改,以更新相应于由具有适当数目的等待单元的指令所定义的资源的时间标记识别符。例如,如果操作字段花费3个机器周期来执行,那么用3来更新相应于由指令定义的资源的时间标记识别符。此外,在另一个实施例中,操作字段编码器503可以产生相应于一条单指令的操作字段,该指令被调度给时序机的执行单元执行。在这种情况下,分配器501的操作被修改,使得相应于指令的若干操作字段在步骤619被放在适当的LDI中。此外,在另一个实施例中,并行机125的一个和多个功能单元可以在一个单周期中执行一条以上的原始指令,例如,可以参看Proceedings of Micro-25,Portland,Oregon,1992年12月,第149-157页中Malik等人的论文“Interlock Collapsing ALU forIncreased Instruction-Level Parallelism”。在这种情况下,操作字段编码器503产生一个相应于一条以上原始指令的单操作字段。并且修改分配器501的运行方式,使得相应于一条以上原始指令的单操作字段在步骤619被放在适当的LDI中。
根据本发明的第二实施例,上面相关于第一实施例描述的分配器501的操作可以包括如图17所示的额外的处理步骤。详细地说,对调度给时序机的执行单元执行的每条指令来说,分配器501的操作可以包括步骤801,此时分配器501检查特定指令是否是一条停止指令。这里所说的停止指令可以是时序机结构的指令集的一个预定义子集。该预定义子集最好包括具有长执行时间的指令,例如一条装入多寄存器指令或整数除法指令,这样可能会不能有效地格式化到当前组中,或者不能由并行机125执行。如果在步骤801分配器501确定指令是一条停止指令,分配器501的操作继续到图13所示的步骤,如上所述,将组关闭,并将被关闭的组从组缓冲器507写入到并行机125的DIB中。
此外,组格式化装置123可以保持装入和存储操作的次序,使得数据不会丢失和/或出错。这可以通过分配TST505的一个单元(指定为ML)给存储器装入操作以及分配TST505的一个单元(指定为MS)给存储器存储操作来实现。更详细地说,存储单元ML存储一个识别当前组的LDI的时间标识识别符,在该当前组中,组的最近的存储器装入操作(如果有的话)将被完成,并且单元MS存储一个识别当前组的LDI的时间标识识别符,在该当前组中,组的最近的存储器存储操作(如果有的话)将被完成。在这种情况下,组格式化装置123的分配器501采用存储在存储单元ML和MS中的时间标记识别符来保持装入和存储操作次序,如图17所示。在步骤803,分配器501检查指令是否包含装入操作。如果是,操作继续进行到步骤805,在其中分配器501将TST505的单元ML与TST505的那些与由特定指令定义相关系的资源的单元联系起来,并且将单元MS与TST505的那些相关于由特定指令使用的资源的单元联系起来。步骤805之后,分配器501的操作继续进行到如上所述的步骤601,来处理指令并且如果在可获得的情况下将指令放在当前组的适当的LDI中。
然而,如果在步骤803中分配器501确定指令不包括装入操作,那么操作继续到步骤807,检查指令是否包括存储操作。如果是,操作继续进行到步骤809,在其中分配器501将TST505的单元MS与TST505的那些相关于由特定指令定义的资源的单元联系起来,并且将单元MS和ML与TST505的那些相关于由特定指令使用的资源的单元联系起来。步骤809之后,分配器501的操作继续进行到如上所述的步骤601,来处理指令,并且如在可获得的情况下将指令放在当前组的适当的LDI中。
最后,如果在步骤807中分配器501确定指令并不包含存储操作,那么操作继续进行到如上所述的步骤601,来处理指令,并且如果在可获得的情况下将指令放在当前组的适当的LDI中。
为了示出分配器501在保持包含存储器装入和存储操作的指令的次序的操作方式,考虑下面的指令序列1. Storer7 → 8(r10)2. Add r3.r4 → r23. Load 5(r2) → r34. Load 7(r6) → r95. Storer9 → 8(r2)图18(A)和(B)示出了当组格式化装置123运行来将这一指令序列格式化为上面描述过的例如与图17、12和13有关的一个组时的TST505和组缓冲器507的状态。
在组的开始,在处理第一指令之前,将TST505初始化,使每个存储单元为零。对第一指令来说,在步骤807,分配器501确定指令包含一个存储操作,这样操作继续进行到步骤809,在其中分配器501将TST505的单元MS与TST505的那些相关于由第一指令定义的资源的单元联系起来,并且又将单元MS和ML与TST505的那些相关于由第一指令使用的资源的单元联系起来。然后,由于相关于由第一指令采用的资源r7、r10、MS和ML的TST505的单元的时间标记识别符为0,分配器在步骤603将TSuse(MAX)定义为0。此外,由于相关于由指令定义的资源MS的TST505的单元的时间标记识别符为0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为0,并且流程进行到步骤613。在步骤613,由于现在被设置为0的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI0)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI0中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第一指令的操作字段放在LDI0的存储槽中,如图18(B)所示。然后,在步骤621,分配器501相应于由第一指令定义的资源(此时为MS)更新单元的时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为1,如图18(A)所示。在步骤623,由于第一指令不是一条停止指令,组格式化装置123的运行继续到序列中的第二指令。
对第二指令来说,由于指令不包含装入或存储操作,步骤805和809被旁路,操作继续到步骤601。由于由指令采用的资源r1和r5的时间标记识别符为0,分配器在步骤603将TSuse(MAX)定义为0。此外,由于由指令定义的资源r2的时间标记识别符为0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为0,并且流程进行到步骤613。在步骤613,由于现在被设置为0的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI0)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU1在LDI0中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第二指令的操作字段放在LDI0的存储槽FU1中,如图18(B)所示。然后,在步骤621,分配器501更新相应于由第二指令定义的资源(此时为r2)单元时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为1,如图18(A)所示。在步骤623,由于第二指令不是一条停止指令,组格式化装置123的运行继续到序列中的第三指令。
对第三指令来说,在步骤803,分配器501确定该指令包含一个装入操作和操作继续进行到步骤805,在其中分配器501将TST505的单元ML与TST505的那些相关于由第三指令定义的资源的单元联系起来,并且也将单元MS与TST505的那些相关于由第三指令使用的资源的单元联系起来。然后,由于相关于由第三指令采用的资源r2、MS的TST505的单元的时间标记识别符为1,分配器在步骤603将TSuse(MAX)定义为1。此外,由于相关于由指令定义的资源r3和ML的TST505的单元的时间标记识别符为0,分配器在步骤607将TSdef(MAX)定义为0。在步骤609,分配器501将最先_LDI标志设置为TSuse(MAX),它等于1,并且流程进行到步骤613。在步骤613,由于现在被设置为0的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI1)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI1中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第三指令的操作字段放在LDI1的存储槽FU0中,如图18(B)所示。然后,在步骤621,分配器501更新相应于由第三指令定义的资源(此时为r3和ML)的单元时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为2,如图18(A)所示。在步骤623,由于第三指令不是一条停止指令,组格式化装置123的运行继续到序列中的第四指令。
对第四指令来说,在步骤803,分配器501确定该指令包含一个装入操作和操作继续进行到步骤805,在其中分配器501将TST505的单元ML与TST505的那些相关于由第四指令定义的资源的单元联系起来,并且也将单元MS与TST505的那些相关于由第四指令使用的资源的单元联系起来。然后,由于相关于由第四指令定义的资源r6、MS的TST505的单元的时间标记识别符分别为0和1,分配器在步骤603将TSuse(MAX)定义为1。此外,由于相关于由指令定义的资源r9和ML的TST505的单元的时间标记识别符分别为0和2,分配器在步骤607将TSdef(MAX)定义为2。在步骤609,分配器501将最先_LDI标志设置为TSuse(MAX),它等于2,并且流程进行到步骤613。在步骤613,由于现在被设置为2的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI2)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI2中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第四指令的操作字段放在LDI2的存储槽FU0中,如图18(B)所示。然后,在步骤621,分配器501更新相应于由第四指令定义的资源(此时为r9和ML)的单元时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为3,如图18(A)所示。在步骤623,由于第四指令不是一条停止指令,组格式化装置123的运行继续到序列中的第五指令。
对第五指令来说,在步骤807,分配器501确定该指令包含一个存储操作和操作继续进行到步骤809,在其中分配器501将TST505的单元MS与TST505的那些相关于由第五指令定义的资源的单元联系起来,并且也将单元ML和MS与TST505的那些相关于由第五指令使用的资源的单元联系起来。然后,由于相关于由第五指令采用的资源r2、r9、ML、MS的TST505的单元的时间标记识别符分别为1、3、3、1,分配器在步骤603将TSuse(MAX)定义为2。此外,由于相关于由指令定义的资源MS的TST505的单元的时间标记识别符为1,分配器501在步骤607将TSdef(MAX)定义为1。在步骤609,分配器501将最先_LDI标志设置为TSuse(MAX),它等于3,并且流程进行到步骤613。在步骤613,由于现在被设置为3的最先_LDI标志不大于三,分配器501在步骤615检查在相应于最先_LDI标志(在这种情况下为LDI3)的LDI中存储槽FU0,…,FU3是否可用。由于存储槽FU0在LDI3中是可用的,运行进行到步骤619,在其中分配器501控制操作字段编码器503将相应于第五指令的操作字段放在LDI3的存储槽FU0中,如图18(B)所示。然后,在步骤621,分配器501更新相应于由第五指令定义的资源(此时为MS)的单元时间标记识别符,即将最先_LDI标志递增(即最先_LDI+1),在这种情况下为4,如图18(A)所示。在步骤623,由于第五指令不是一条停止指令,组格式化装置123的运行继续到序列中的下一条指令。
此外,组格式化装置123并非一定要保持装入指令的次序。例如,将一条装入指令相比于其它装入指令放在一个较早的LDI中可能会更加有效。为了这样做,所描述的分配器501的操作被修改,使得步骤605-609对装入指令而言被旁路掉,从而,分配器501的操作从步骤603直接进行到611。在这种情况下,当组格式化装置123运行,以将这个指令序列格式化为一个组时的TST505和组缓冲器507的状态示于图18(C)和(D)。此外,如上所述采用TST505的ML和MS单元来保持装入和存储操作的次序的技术可以被扩展到其他操作,例如,移动专用寄存器操作。
根据本发明的等三个实施例,组格式化装置123的操作可以这样修改,使得它与并行机125的功能单元和/或转移处理单元产生的组的执行结果相连。更详细地说,当感受到存储在CGB204中的一个当前组向外转移时,组格式化装置123可以被控制来修改存储在CGB204中的当前组,而不是开始形成一个新的组。
为了示意这一特征,考虑如上所述相应于图10(A)讨论的由组格式化装置123格式化并且随后由并行机125的功能单元和/或转移处理单元执行的组。假设,例如,当LDI1被执行时,条件指示x=1,并且一个组发生向外转移,至标号LK。此时,现有的组被装入到组格式化装置123,并且被如图19所示予以加强,而不是开始一个新组。首先,在LDI1中的组向外转移被排除,指令k被放在最早可得的LDI中,在这种情况下指令K放在LDI0的FU3存储槽中。由于下一条指令1依赖于指令k,指令1被放在LDI1的一个可用存储槽中,此时为FU2。由于下一条指令m依赖于指令e和k,指令m被放在LDI2的一个可用存储槽中,此时为FU3。下一条指令n不依赖于任何指令,然而LDI0和LDI1的所有存储槽都已被采用,因此指令n被放在LDI2的一个可用存储槽中,此时为FU3。因为下条指令0依赖于n,指令0被放在可用的存储槽中,在这种情况下为LDI2中的FU1。组格式化装置123的操作接下来继续到序列中的下一条指令,该指令从存储系统107中取出,并且由调度单元115调度给时序机的执行单元执行。
为了完成这一操作,在格式化过程中,当遇到转移时,组格式化装置123对转移指令进行编码,并且将被编码的指令与TST505的当前状态一起存储到指派给转移指令的LDI的存储槽中,例如BP0和BP1。因此,每个BP存储槽都较宽,因为它包括许多信息。然后,当组接着被并行机125的功能单元和/或转移处理单元执行时,如果转移指令决定采用与由组格式化装置123编码的通道不同的一条路径,那么存储在CGB204中的LDI的当前组和与转移指令一起编码的TST的状态被装入组格式化装置123,用于随后按如上所述的进行处理。
此外,如果按如上所述采用寄存器重新命名技术,当遇到转移指令时,组格式化装置123将重新命名信息的当前状态与被编码转移指令和TST505的当前状态一起存储到指派给转移指令的LDI的存储槽中。然后,当接着被并行机的功能单元和/或转移处理单元执行组时,如果转移指令决定采用与由组格式化装置123编码的路线不同的一条路径,那么存储在CGB204中的LDI的当前组和与转移指令一起编码的TST的状态以及重新命名信息的状态被装入组格式化装置123,用于随后按如上所述的进行处理。
根据本发明的第四个实施例,由组格式化装置123产生并且存储在DIB中的LDI可以被压缩。压缩操作可以由操作字段编码器503执行,其中,每个操作字段被单独压缩并随后被插入到一个组的LDI中,并且组被写入DIB。在另一种情况下,可以对每个LDI进行压缩,或者例如当组被写入DIB时,将组作为一个整体进行压缩。在这种情况下,当图2的控制单元202接收到一个DIB命中信号时(即序列中的下一条指令是存储在DIB中的一个组的一部分),从DIB输出的被压缩LDI必须在按如上相关于第一实施例所述执行组的LDI之前被扩展到LDI。为了完成这一操作,如上所述的图7的当前组缓冲器可以被修改为如图20所示。
详细地说,CGB204可以包括一个接收从DIB输出的被压缩LDI(CLDI)的扩展器1001。例如,扩展器1001可以接收来自DIB的CLDI0、CLDI1、CLDI2、CLDI3。最好是当并行机125的控制单元202接收一个DIB命中信号时,在同一机器周期,扩展器1001装入从DIB输出的CLDI,将组的第一个CLDI,即CLDI0扩展成一个LDI,并将该LDI作为LDI0写入CGB204中。在下一个周期中,并行机125的功能单元和转移处理单元执行由如上相关于第一实施例所述的LDI0的操作手段所指定的功能。在该操作进行之时,扩展器1001将剩下的CLDIs(CLD1、CLD2、CLD3)扩展为LDIs,并将LDIS(LDI1、LDI2、LDI3)写入CGB204。在下一周中,操作继续到组中的下一个LDI,或者到组中的另一个LDI,或者到组外的一条指令,这取决于并行机在执行如上关于第一实施例所述由LDI0的操作字段指定的功能中的结果。
在另一个实施例中,为了减小组执行时间,如上所述由组格式化装置123执行的压缩操作可以对组的第一LDI,即LDI0,禁止。
在上面描述的实施例中,当并行机125的执行单元完成了由存储在CGB204中的LDI的操作字段编码的操作后,执行结果必须放到适当的资源中贮存起来备用。当并行机125不采用寄存器重新命名时,执行单元可以将执行结果在每个LDI之后存储在适当的资源中备用。然而,当并行机125采用寄存器重新命名时,当并行机125经受一次向组外转移或经受一次组结束时,执行单元必须将执行结果存储备用。在这种情况下,存储备用操作包括根据重新命名标志将存储在重新命名的资源中的执行结果传送到原始分配的资源中(如果需要的话)。
此外,常常出现当执行流程需要被中断以便以特定的方式处理某个事件时的情况(即页面出错)。这些情况被称为中断或异常。在许多情况下,在异常发生时系统精确地了解机器的状态是非常重要的。但当在本发明的情形下,指令不按次序执行时,就会变得很困难。
为了处理这些需求,本发明的并行机125最好只有当组的执行完成之后将操作结果(不管该操作是寄存器写入操作还是存储器存储操作)指派给构造的寄存器。当在组内出现一个异常时,被执行但没被指派的指令结果被丢弃,使得机器精确地保持组被进入时的状态。当前组的地址现在被用于取指令,并且每次一条在时序机中执行,直到异常点再次达到为止。在异常被处理之后,如果在DIB中有一个命中信号,并行机125的执行在导致异常的指令之后的一条指令处恢复,否则按顺序模式恢复。
从前面的描述中可以看出,通过保持执行历史,带有一个短周期时间的短流水线可以被用来执行相遇不止一次的指令。另外,如果能够并行执行的这些指令也保持与第一次遇到这些指令时一致,如果有足够的功能单元用来执行,那么这些同样的指令可以在每个随后的时间并行执行。
对可以并行执行的指令进行译码和确定的逻辑并不复杂,因为它们可以在一条流水线上多个周期进行,相比过去说过的一个周期而言,它有更多的流水站。期望(并且实际的观察)是采用多周期执行这一操作的花费足以可从在一个较短的流水线上并行重复执行这些同样的指令中找回来。
与先前提议的方案,如预先译码的指令超高速缓冲存储器相比,这个方案有许多优点。第一,几乎没做任何无用工作,这是因为DIB只包含在程序执行时能实际遇到的那些指令,而预先译码的指令超高速缓冲存储器即使在第一次遇到一条指令时也需要预先确定执行路径。第二,在跨过取转移分支合并指令时没有额外的花费。第三,多分支路径可以动态合并到被译码的指令组,而不需要等待从这些路径在可能的情况由从下一级存储器取出来的指令。第四,编码机构动态地对实际的执行时间进行调节,而不是期待的等待时间。第五,该方案在现有的指令集体系结构下运行良好,不需要依靠重新编译。
与传统的超级标量方案相比,该方案有以下几条优点第一,通过在多个周期上操作,调度与译码逻辑被大大简化。第二,因为同样原因,处理器的周期时间变短。第三,通过将操作从几条路径并入代码,而不是只从一条路径并入代码,可以更好地利用功能单元。第四,通过将所有这些信息并入指令流历史,可以省去转移预测和转移历史表与VLIW机相比,该方案有以下优点第一,它以现有的指令集体系结构来进行工作,不需要定义新的指令集。第二,可以改变DIB中的功能单元数目和内部编码操作,以适应工艺能力/局限和/或处理器花费的限制,并且不影响被编译的代码。
虽然本发明是参考特定的实施例示出并描述的,对于本领域的普通技术人员来说,在不脱离本发明精神与范围的前提下,可以在形式与细节上进行前面所述的和其它的变化。
权利要求
1.计算机处理设备,包括(1)、第一处理机,包括第一存储器,用于存储将由至少一个执行单元执行的指令;一个取指单元,用于根据指令控制信号将指令从所述第一存储器取送到指令队列;一个调度单元,用于调度存储在所述指令队列中的指令给所述执行单元执行;以及,根据由所述执行单元执行指令的结果更新所述取指控制信号的装置;(2)、一个组格式化装置,用于在由所述第一处理机的所述执行单元执行所述指令序列的同时,产生一个由所述调度单元调度的指令序列的替代编码。
2.根据权利要求1所述的计算机处理设备,其特征在于所述组格式化装置在由所述第一处理机的所述执行单元执行所述指令序列之后产生所述替代编码。
3.根据权利要求1所述的计算机处理设备,其特征在于由所述组格式化装置产生的替代编码适用于并行执行。
4.根据权利要求1所述的计算机处理设备,其特征在于进一步包括第二存储器,用于存储由所述组格式化装置产生的所述替代编码;替代编码执行装置,在检测到所述取指控制信号相关于存储在所述第二存储器中的替代编码时,执行存储在所述第二存储器中的替代编码。
5.根据权利要求4所述的计算机处理设备,其特征在于所述替代编码执行装置不同于所述第一处理机的所述执行单元。
6.根据权利要求4所述的计算机处理设备,其特征在于所述替代编码执行装置包括所述第一处理机的所述执行单元。
7.根据权利要求4所述的计算机处理设备,其特征在于由所述组格式化装置产生的所述替代编码适宜于由所述替代编码执行装置并行执行。
8.根据权利要求7所述的计算机处理设备,其特征在于所述替代编码执行装置包括若干执行单元,并且由所述组格式化装置产生的所述替代编码包括一组长译码指令,其中所述长译码指令组的每个长译码指令(LDI)包括操作字段,而每个操作字段与所述替代编码执行装置的所述若干执行单元的一个相关,并且其中每个操作字段可以由所述替代编码执行装置相关的执行单元在一个单机器周期中被执行。
9.根据权利要求8所述的计算机处理设备,其特征在于所述替代编码执行装置包括所述操作字段可以使用和/或定义的若干寄存器资源,并且所述组格式化装置包括一个操作字段编码器,它根据被调度来由所述调度单元执行的所述指令序列产生所述操作字段;一个时间标记表,用于存储相关于每个所述寄存器资源的时间标记识别符,其中所述时间标记识别符识别相关的寄存器资源将在所述长译码指令组的哪个LDI上可用;一个分配器,它根据所述指令序列内的指令、存储在所述时间标记表中的时间标记识别符以及由所述操作字段编码器产生的操作字段之间的相关性建立所述长译码指令组。
10.根据权利要求9所述的计算机处理设备,其特征在于所述分配器根据所述指令序列内指令执行时间来建立所述长译码指令组。
11.根据权利要求9所述的计算机处理设备,其特征在于所述分配器在检测到所述指令序列内的一条指令相关于一条预定的停止指令时关闭所述的长译码指令组。
12.根据权利要求9所述的计算机处理设备,其特征在于所述一旦检测到所述指令序列中的一条指令定义先前已由当前组的操作字段定义的一个资源时,所述分配器就将所述资源重新命名给一个自由资源。
13.根据权利要求9所述的计算机处理设备,其特征在于所述时间标记表包括分别与装入和存储操作相关的时间标记识别符;所述分配器采用所述相关于装入和存储操作的时间标记识别符来保持所述装入和存储操作的次序。
14.根据权利要求8所述的计算机处理设备,其特征在于所述第二存储器包括一个指令项阵列,每个指令项包括一组长译码指令;用于在确定出所述一个指令项相关于所述取指控制信号时读出所述信号的装置;用于在确定出所述一个指令项相关于所述取控制信号时读出所述一个指令项的一组长译码指令的装置;并且,所述替代编码执行装置包括用于存储从所述第二存储器读出的所述长译码指令组的缓冲器,并且所述若干执行单元执行存储在所述缓冲器中的所述长译码指令组的所述操作字段。
15.根据权利要求14所述的计算机处理设备,其特征在于所述替代编码执行装置进一步包括用于根据所述操作字段执行结果更新所述取指控制信号的装置。
16.根据权利要求14所述的计算机处理设备,其特征在于所述若干执行单元在每个LDI执行完成之后,将每个LDI的所述操作字段的执行结果放入适当的寄存器资源中备用。
17.根据权利要求14所述的计算机处理设备,其特征在于所述若干执行单元在所述长译码指令组执行完成之后,将所述长译码指令组的所述操作字段的执行结果放置备用。
18.根据权利要求14所述的计算机处理设备,其特征在于进一步包括一个异常控制器,在一旦遭受一个异常时,更新所述取指控制信号,以相应于在存储于所述缓冲器中的所述长译码指令组之内编码的第一指令;把与所述第一处理机相关的寄存器资源更新到它们所述第一指令前的原有状态;启动所述第一处理机开始处理所述第一指令。
19.根据权利要求14所述的计算机处理设备,其特征在于存储在所述第二存储器中的一条或多条所述长译码指令被压缩;所述替代编码执行装置包括用于扩展在执行之前被压缩的每条长译码指令的装置。
20.根据权利要求14所述的计算机处理设备,其特征在于进一步包括装置,用于在一旦检测到存储在所述缓冲器中的所述长译码指令组的一条所述操作字段被认定为存储在所述缓冲器中的所述长译码指令组之外的一条转移指令时,将当前存储在缓冲器中的所述长译码指令组装入到所述组格式化装置,随后进行处理。
全文摘要
计算机处理设备包括一个称为译码指令缓冲器(DIB)的缓冲器,它用于存储代表能并行执行指令的命令组。在由常规的设备执行指令的同时,组格式化装置产生一组LDI,其中每个是可以并行执行的一组原始指令的替代编码。由组格式化装置构成的每组LDI被存储在DIB中,使得同一组指令的下一次执行可以在对功能单元的全互补的基础上直接由DIB执行,而不需要进行相关性和执行时间的分析。
文档编号G06F9/38GK1136184SQ9610450
公开日1996年11月20日 申请日期1996年4月1日 优先权日1995年4月13日
发明者M·E·霍普金斯, R·K·内尔 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1