利用寄存器更名实现自并行化的制作方法

文档序号:6412343阅读:291来源:国知局
专利名称:利用寄存器更名实现自并行化的制作方法
技术领域
本发明一般涉及存储有程序的数字计算机,尤其涉及这样一种计算机系统和方法即指令序列的执行按如下两种方式进行,第一种方式是在执行指令的同时将尚未并行化的指令序列进行并行化处理;第二种方式是在各自独立的处理单元并行地执行已经并行化了的指令序列。本发明还涉及指令序列的并行化格式。
一种较快地执行数字计算机程序的方法是在各自独立的处理器上并行地执行该程序的若干部分。要做到这一点,一种途径是定义一种编程环境和计算机系统以使写出的程序以并行模式执行。遗憾的是,大量的应用程序却是按照指令顺序执行的方式写成的。当然,人们也希望以较快的速度执行这些顺序程序,于是在现有技术中,人们做了一些努力将这种程序并行化以并行执行。
该领域中大部分现有技术是建立一个程序的并行规格。已实现的就有好几种方法。已创建的复杂的编译器可以完成下面功能即将程序并行化并产生具有多个常规处理器的多处理器系统及生成代码。其中一些编译器已经自动地揭示了并行性。(如“Advanced CompilerOptimizations for Supercomputers”by D.A.Padua and M.J.Wolfe inComm.of ACM,Vol.29,page 12 et seq.,Dec.1986)。别的一些也能从编程人员的注释中得到一些线索(如“Programming for Parallelism”byAlan H.karp in Computer,VOL.20,Page 5 et seq.,May 1987)。另一种途径是建立可以完成并行操作的专用硬件,如向量处理器,VLIW体系结构等。还有一种编译器是将顺序程序翻译成适合于在这类机器上运行的代码。这些例子中编译效果是很显著的。实质上,另一种更为完全的方法是建立一种执行并行处理的机器,如数据流机器(见“DataflowSupercomputers”by J.B.Dennis in Computer,Vol.13,page 11 etseq.,Nov.1980),及用于为上述机器自动生成并行代码的编程规格(见“Future Scientific Programming on Parallel Machines”by Arvindand K.Ekanadham in the jour of parallel & Distributed Computing,Vol.5,Dec.1988)。
上述所有解决方法中,对计算机程序执行并行处理及判断并行地执行不同部分的操作是否安全这些工作或者是在编译阶段完成,或者更早地在编程阶段完成(即带有数据的代码实际批量执行之前)。处理器在判定执行期间并行地执行各部分操作是否安全方面没有起什么作用,这是由于这种判定已经被编程人员或编译器代作。
另一种方法是在执行期间向多处理器系统提供未并行化的代码并让该多处理器系统担当起实际任务,即将代码分离使之适合于并行处理及判定代码的并行处理是否有效。这种方法与其它方法有所区别,即它要临时地执行至少一些指令。一般来讲,执行之前不知道该并行处理是否完全有效。这种方法通过以下对比文件可以得到说明。
在已经公开并转让给本申请的受让人的编号为5,297,281名称为“Multiple Sequence Processor System”的美国专利中,根据一些划界规则,指令被分成若干组,并且至少有两组被并行执行。指令的一个组在顺序上比所有其它组执行的早,并且假设最早的组正确执行,而较后的组只是临时地并行执行。较后的组从寄存器和存储器中读取数据,就好象指令的较早组已经被执行。控制器监控是否有任何被指令的较后的组使用的数据(在其被较后的组使用后)被较前组的指令改变过。较后的组对存储器区域和寄存器的存储仅在某分离的区域暂时执行。若较后组使用的所有数据都是有效的(即,没有被较前的组修改),则较后的组的结果是有效的可以被提交,否则重新执行后面的组。
在美国专利4,825,360中,使用了相似的技术方案,即暂时地并行执行指令组然后顺序确认。但是,该方案通过一个编译步骤和一个对除了作为一个组中的结束指令的那些起负作用的指令的减少步骤(最好是淘汰(elimination)),增加了成功的机会。结果,不清楚该系统是否可以用于对常规的顺序代码执行并行处理。
在美国专利4,903,196中,单处理器将代码进行并行处理以在彼此独立的异步执行单元上执行,并且如有需要执行单元互相等待,以避免使用这样的数据,即该数据在常规的顺序上将被较早的指令修改。这些执行单元要等到所有上述指令已被执行后再执行。此专利仅提供一组通用寄存器(GPRs)及一个译码器。一组专用标志与单处理器中的每个GPR和执行单元相关联。该标志在保持由GPR供给执行单元的数据的完整性的同时,允许多个执行单元顺序地使用GPR或并发地使用不同的GPR以并行地执行多个指令。与每个GPR和每个执行单元相关联的标志存储单个GPR和执行单元之间的序列结尾(sequence trail),从而在允许一给定执行单元存储某一具体GPR之前,紧跟其前的由别的不同的执行单元对该具体GPR的存储必须完成。而且,标志也确保在允许对某一GPR进行存储操作之前,一个或多个执行单元对该GPR的读操作已经完成。
在由本发明的作者所提出的美国专利5,347,639中,实现了自并行功能,其中目标并行机包括n个相同的处理器单元,每个都能通过对单个执行序列执行分析功能进行调度。这些以并行操作模式运行的处理器单元使用各自的一组通用寄存器执行属于自己的原执行序列某部分的操作。通过对顺序执行序列的分析得知哪些指令设置了别的指令使用的寄存器的值。当多个指令设置使用对(set/use pairs of instructions)在不同的处理器单元上调度时需要在这种指令之间建立发送和接收约束。与某指令相关的接收约束在下列情况下禁止处理器单元将其自己通用寄存器组中的某当前值作为某指令的输入即在顺序执行时别的处理器单元所执行的介入指令将该寄存器设置为新的值。设置指令的发送约束从而将被正确地标记的寄存器的当前的正确值传送给应用处理器单元。
另外,必须对涉及某指令的输入可用性的该指令进行定时并且对与在同一个处理器单元上调度的别的指令相关的指令进行调度以使在某处理器单元上调度的所有指令按其原来的顺序被调度。这种约束允许在某个处理器单元中,若没有同这种使用重叠的接收约束时,那么概念上在后的指令可以使用概念上靠前指令的结果。
在与本发明有关的并行化方面还有两个要点。第一个要点涉及当不同的处理器单元对同一目标内存区域执行存储和读取指令时对存储然后读取(store-then-fetch)条件的处理。第二个要点涉及在并行化处理的最后或分支错误推测(branch wrong guess)后恢复机器状态。前者通过一组FETCH/STORE表来控制,此表是处理器单元组与系统存储器之间的接口。后者涉及一组新的发送约束,此约束是每个条件级中设置寄存器的结束指令与生成机构的状态之间的约束。
在本发明作者所提出的美国专利5,412,784中,自并行化方案被扩展,从而使生成的并行代码可以进行分支处理。从某个并行化处理生成的每段代码序列中标识有一入口点。这种入口点的每一个相对于每个处理器单元的入口点集被称为配置文件(profile)。根据配置文件可以进入并行化处理并且并行化处理的所有方面都是有效的。这一点使得并行代码具有与顺序代码相关的公共属性,即可以在任一点进入并从此点开始执行。
在本发明的某个作者所提出的美国专利4,574,349中,提出了寄存器更名方案,使得一个处理器可以访问由一个指令所标识的大量的寄存器。该寄存器更名操作通过一寄存器对应表完成,即在每个点即时地将多个硬件寄存器的一个与一给定的结构寄存器(architected register)相关联。在指令执行期间保持这种与处理器间的关联,并且执行结果用于更新硬件寄存器。
本发明的目的在于对计算机程序的若干部分执行有效的并行处理,而看起来好象程序是顺序执行的。
通过本发明的自并行化计算机系统和方法可以实现此目的及进一步的目的,其中,单个的指令执行序列被分为指令子序列集,每条指令子序列在各自独立的处理单元集中的某一个上执行,这些独立的处理单元共享公共寄存器文件。该机器和方法被命名为SPURR(Self-Parallelization Using Register Renaming)。
处理单元将被指令所使用的寄存器更名,此指令用于更新寄存器,结果,当指令以并行方式执行时,执行结果出现在公共寄存器集中,此寄存器集可以为所有处理单元访问。顺序执行序列中每个更新寄存器的指令都可。以从公共寄存器库(Pool)中得到下一个编码更高的寄存器。该指令所更新的结构寄存器此时被更名为该硬件寄存器并且在寄存器对照表中被标识。概念上需要这种寄存器作为输入的子序列指令此时将与更名的公共寄存器相关联,并且从寄存器更新指令的执行结果中提取其输入。这样就不需要发送和接收约束来解决由顺序执行序列所隐含的寄存器设置/使用要求。而且,单个的指令流被动态地更名为使用公共扩展的寄存器文件。另外,根据以下简单的约束,各个指令可以在一组处理器单元上调度在同一个周期,不超过n个指令被调度执行并行操作(OCCUPANCY RULE),并且在其所有输入可以使用之前,在某个周期任何指令都不被调度执行(DEADLOCK AVOLDANCE)。
通过以下参照附图的详细描述将更能理解本发明上述目的及其它目的,优点,和效果。


图1是根据本发明一个实施例的自并行处理系统的方框图。
图2(A)是实施例中被单个处理单元所使用的专用Z高速缓存(Z-Cache)的结构。
图2(B)是Z高速缓存字典中某入口的格式。
图2(C)是存储在Z高速缓存单元中Z指令的格式。
图2(D)是Z高速缓存单元中指令格式的扩展。
图3(A)是实施例中监控失序危险的OSC/PSC控制器的方框图。
图3(B)是OSC/PSC控制器中读取表入口格式。
图3(C)是OSC/PSC控制器中存储表入口格式。
图3(D)是OSC/PSC控制器中的删除监控器。
图4(A)和4(B)是E模式(E-mode)的操作顺序。
下面对SPUR R实施例的描述将分成六个部分,与前三个部分相关的一个或多个附图具有与该部分相同的序列。图4与第五部分相关。下面的描述包括以下几个部分第一部分SPURR结构概况第二部分专用Z高速缓存第三部分对操作数存储比较进行监控第四部分处理分支第五部分在E模式下向处理器单元分配指令并执行第六部分在Z模式下执行第一部分SPURR结构概况本发明是单处理器结构,其中具有一组共享一个公共寄存器文件的处理器单元,主要用于执行连续的指令流片段。每个处理单元都能以并行方式执行指令的译码操作,生成存储器的操作数地址,执行指令及参考和更新由指令所访问的公共寄存器集。这些处理单元在一起开始执行程序段时主要用于更新寄存器及根据原始程序段生成独立的指令流或指令子序列并存储起来。这些对应于某段的独立指令子序列是原程序段的并行格式,称为Z代码。这是真正意义上的片段,原始程序段的每条指令都以并行的Z代码格式仅被放在某一个生成的子序列中。由于在该程序段被第一次执行期间每个处理单元仅对分配给自己的指令进行译码和执行,并且其它处理单元也是并行地执行分配给自己的指令,故紧接着重新执行相同的程序段将更快。
程序可以是P程序段或Z程序段。P程序段是顺序执行指令的序列(即,通常的单处理器指令流程序段),该程序段按第一模式进行数据处理(称为“E模式”,E-mode)并产生以下两个结果即通常的数据执行结果及一个或多个Z程序段。当相应的Z程序段准备就绪时再一次执行程序段,此时SPURR以第二执行模式(称为“Z模式”Z-mode)执行Z程序段而不是P程序段。
E模式和Z模式之间最主要的差别在于在E模式时所有处理单元都能看到P程序段的所有指令,但是仅执行分配给它们的那些指令。而Z模式时,每个处理单元不仅是仅执行分配给它的那些指令,而且仅看到和译码那些指令。
E模式下程序的顺序执行结果建立起以下情况所需的所有信息需求,即这些信息需求是在Z模式下处理可能发生的异常情况所必需的。对于每条分支指令都保存了寄存器对照表,对照表将由原始程序所使用的结构寄存器及其更名对象相关联。该信息与称为Z代码的并行执行实体相关联。若在Z模式下执行的分支在E模式下执行时没有达到相同的目标和相同的操作,则认为此时发生了分支错误推测。此时就要使用所存储的与该分支相关联的对照表以从公共寄存器文件中取出系统状态,并正确地开始下一程序段的处理。
为了在识别出分支错误推测后停止Z代码的执行,需要一种方法以确保分支前的所有指令都被执行。(允许处理单元处理失序指令)的一种系统中,上面的保证方式引入了处理单元条件级(Level of conditio nality)这样的概念。
SPURR中的程序段进一步被分为若干条件级。某条指令的条件级是指程序段中在其之前所有分支的数目。条件级从0开始每过一个分支指令就增量。在SPURR中每个程序段条件级的最大数受硬件资源限制,在达到此限制之前,E模式下SPURR中的P程序段将被中止。尽管在Z模式下仅由单个处理单元处理分支指令,但是在E模式下允许所有处理器单元看到分支指令,从而分配给某处理器单元的所有指令的条件级也将为所有处理器单元所知。在指令按原始顺序执行的系统中,若处理单元识别出其已经处理了具有较高的条件级的指令,这就确保了它也已经处理了具有较低的条件级的所有指令。当允许失序指令调度时,则使用另一个处理过程。对于每条分支指令,在每个处理器单元进行调度下;被调度的指令在最后一个周期被标记上该分支的条件级,这也称为处理器单元条件级。该入口确保被该处理器单元所调度的所有具有较低条件级的指令在该标记指令之前均被调度。
在实施例中,仅仅是流过寄存器(或寄存器等价物)的数据能被观察到并被记录成Z代码然后在Z模式下被重新生成。若E代码将数据存储到主存中然后再读出同样的数据(与存入寄存器然后使用该寄存器中的数据操作相反),则该数据流不会在Z模式下再生。在生成数据的处理单元真正生成其之前,假设通过对主存的存储处理的数据流不会经常导致某个处理器单元需要该数据。实施例中,若这种不受欢迎的错误情况出现则能够被检测到。
当检测到错误情况时,Z代码的执行被挂起,恢复有效的机器状态,并且以任何一种合适的模式从对应于所恢复的机器状态的最早点继续执行。假设与这种错误相关联的所有指令都在同一程序段的同一条件级并且被分配给同一处理单元,则处理单元有能力避免这种错误。因此,根据本发明,对这种错误进行恢复最好还包括指令调度的更新,以使当发生失序错误后生的新的Z代码执行时不会产生同样的错误。
由于对于能被存储的Z代码的总数有一些限制,因此在实际执行中在一些点必须对要置换出什么Z代码进行判定。这一点与高速缓存管理中进行的判定很相似,并且处理也相同。在实施例中,每个处理器单元使用了LRU(最近使用,Least Recently Used)算法以置换存储的Z代码。在E模式下及在每个处理周期终了时要不停地查找指向已经建立的Z代码段的入口集以停止生成已经存在的Z代码。一个处理周期在如下情况下结束在Z代码段的结束部分,或Z模式下发生分支错误推测后,或E模式中断后。
在实施例中,可以在程序段的开始(即从第一条指令序列开始的重新执行指令序列)或从任何事先指定的入口点序号开始执行Z代码程序段。E模式可以通过如下方法生成入口点当声明某指令作为入口点时,在每个Z高速缓存的每个Z代码高速缓存建立一个字典入口,该入口标识入口点并且创建起Z代码的第一条指令,使得进入Z程序段时某个处理器单元必须执行。与每个入口点相关联的是被更名的第一个公共寄存器的序号,该寄存器被概念上从入口点开始的指令集更名。并行化的其它两个方面实现了与从某入口点开始的并行模式处理相关的需求。每个处理器单元保持有一个Z代码寄存器表,此表在对P程序段进行E模式处理期间标识与每个结构寄存器相关联的公共寄存器文件中的寄存器的名称。另外,对指令的调度进行组织,以使在P程序段中不会存在任何概念上跟在某入口点之后的指令,在概念上排在该入口点之前的指令已被调度。有了这种调度约束,任何处理器单元的Z代码中的所有指令在概念上将跟在P程序段某入口点之后,这些指令在每个处理器单元Z高速缓存中某个入口点之后顺序排列。在进行Z代码处理时,某指令中所遇到的源寄存器编号由某处理器单元设置,其中该源寄存器编号大于或等于与入口点相关联的公共寄存器的编号,处理单元从入口点开始进行Z代码处理。若指令中源寄存器编号小于与入口点相关联的公共寄存器编号,则通过如下方式取出源寄存器的值,即首先利用与入口点相关联的寄存器对照表识别相关的结构寄存器,然后从入口处系统的状态中取出结构寄存器的值,并送给Z程序段。
实施例中,每个处理单元都有专用Z高速缓存,其中存储用于该处理单元的Z代码,但是所有处理单元通过访问公共存储层来存取没有存储在寄存器或其等价装置中的E代码及数据。存储层装有附加的控制器以确保发生异步地存取操作数时不会违反与对存储器中值进行设置和查看时相关的体系规则。
尽管从SPURR执行指令流的效率来看执行E模式操作所完成的某些分配方案比在Z模式下好,SPURR还是不管使用何种分配方案,均正确工作。例如,最合适的分配方案可能是分配给第一个处理单元5个顺序指令,接下去的5个顺序指令分配给第二个处理单元等等,当把某5个顺序指令分配给最后一个处理单元后重复这种分配顺序直到P程序段中所有指令均被分配。执行这种分配的一个具体方法,也是获得了广泛应用的方法见于名称为“SELF-SCHEDULING PARALLELCOMPUTER SYSTEM AND METHOD”的美国独立专利5,408,658中。
SPURR结构的详细实施例很象名称为“SELF PARALLELIZINGCOMPUTER SYSTEM AND METHOD”的美国专利5,347,639,此专利被引为对比文件使用。主要的不同在于所有处理单元均访问一个公共寄存器文件,并且若使用这种并行处理器目标机器,则所引用的现有专利中许多细节将不再需要,如在设置寄存器的处理单元和必须使用该寄存器的处理单元之间进行消息传递;传递消息的消息句柄,每个处理器单元中有一个寄存器文件结构以存储由其它处理器单元传递的消息,及根据多个寄存器文件设置机器状态。生成的Z代码可以进行分支处理并能象单个的处理器单元按原始概念顺序执行指令一样能进行完全的并行化处理。从而大大简化了名称为“SELF-SCHEDULINGPARALLEL COMPUTER SYSTEM AND METHOD”的美国专利5,408,658中执行的调度操作。此专利被引为本专利的对比文件。
下述自并行处理器的总体特征实质上与名称为“SELFPARALLELIZING COMPUTER SYSTEM AND METHOD”的美国专利5,347,639的现有自并行方法相同,除了目标并行结构涉及公共寄存器,在E模式下生成并行代码的操作涉及寄存器更名,寄存器更名合并在指令的并行格式中。
通过对以下SPURR处理器的操作的简要概述将能对SPURR与其它自并行处理器之间的区别有一个更完整的总体认识。
在E模式下所有处理单元能看到程序段中的所有指令并进行译码。尽管可能在不同的时间,处理单元也能异步、独立地执行实质上相同的任务。译码操作的结果是将指令所更改的寄存器更名并且给对应于寄存器的本地拷贝中可用的寄存器赋一个新名称。每个使用指令的处理器单元将根据该指令的输入的可用性导出其可以被译码的最早可能时间。此时间分配为所有保持在寄存器对照表中的输入寄存器提供可用的时间。然后,处理器单元根据下面将描述的占用分配算法为指令计算调度时间。此占用分配算法决定指定了执行指令的处理器单元的编号。然后,其它处理器单元将继续执行下一个指令。而被指定了指令的处理器单元将首先生成指令的并行格式,包括被更名的寄存器,指令的序号,及在Z模式下正确执行并行代码所需的附加信息。然后,指定的处理器单元将指令的并行格式放在其Z代码高速缓存中的某个位置,此位置对应于由译码的调度周期所指定的Z高速缓存中并行代码的开始位置。接着,指定的处理器单元使用并行化的格式执行指令以更新适当的被更名的寄存器。在E模式下操作的最后,处理器单元将分配给自己的那部分程序段放在自己的Z代码高速缓存中。根据指令集各自的调度时间对其排序。在Z模式期间,这些指令将直接从Z代码高速缓存传递到相关的处理器单元。指令不需对所需要的寄存器进行更名即可访问之,这是由于在E模式期间这些寄存器已经被更名。在Z模式程序执行期间,任何正确执行并行代码所需的附加信息及某个分支错误推测进行恢复的信息都合并成可用信息。Z模式的初始化是基于查找所有处理器单元的Z代码高速缓存字典中的一个入口,此入口是需要处理的下一指令的地址。尽管不同的处理器单元有不同的高速缓存内容,由于所有Z代码高速缓存字典是相同的,所以所有的处理器单元都能对于SPURR处理器下一个处理阶段是用E模式还是Z模式做出共同判定。各处理器单元涉及并行代码的执行部分与E模式下执行指令部分相同。处理器单元的E模式和Z模式的不同在于给处理器单元分配指令,寄存器更名,及指令并行格式的高速缓存,这些均在E模式下发生。处理器单元的指令执行部分在两种模式下均相同。
图1是SPURR处理器结构的方框图。每个处理器单元100可以使用指令译码器/调度部件(Decoder/Scheduler)500对指令译码,通过110访问公共寄存器文件160以生成存储器操作数地址及存取寄存器操作数。SPURR的公共寄存器文件包括能被所有处理器单元直接访问的M个寄存器。其中前m个寄存器是为P程序段中的指令所使用。这些寄存器被称为结构寄存器,剩下的寄存器是结构寄存器的更名版本。处理器单元在两种模式,即E模式和Z模式下操作。在Z模式期间,被执行指令已经进行更名并且指令所存取的寄存器是由指令指定的。在E模式下,只要发生指令更新寄存器,寄存器就被更名为下一个还未使用的序号更高的寄存器。寄存器的新名存储在寄存器对照表170中并且在E模式处理期间任何对结构寄存器名称的参照都得到被更改的新名称。指令在执行期间就好象访问的是被更名的寄存器,并且组成Z程序段的并行格式包括指令的更名版本。指令所访问的操作数被传递给处理单元中的执行部件130,该执行部件执行指令操作,并且将执行结果放入更名寄存器中。SPURR中的处理单元都是相同的,除了每个处理单元都有一个预先指定的识别序号(在具有n个处理单元的系统中是1,2…)。处理器单元知道该名字,并且在E模式期间,允许处理单元判断其正在译码的指令是否是分配给它的。为说明这一点,当在某个周期调度某指令时,被分配指令的处理器单元是这样的处理器单元即处理器单元编号等于包括刚被调度的指令的指令编号,其中这些指令在该周期内被调度执行。每个处理器单元都通过一个总线135与存储层140相连,该存储层在读取操作时提供数据操作数,在存储操作时接收存储操作数,并且在E模式期间用于指令读取。实际的存取操作数的操作是通过一组OSC/PSC控制器300来实现的,用于确保检测出与失序存储器访问操作相关的所有危险情况。
每个处理器单元都具有各自的专用Z高速缓存200,用于存储Z模式操作的注释指令。在每个处理器单元,Z模式下读取指令是通过专用总线150。
第二部分 专用Z高速缓存本部分的信息是通过对对比文件U.S专利5,412,784作了实质性的修改后得出的,其名称为“APPARATUS FOR PARALLELIZINGSERIAL INSTRUCTION SEQUENCES AND CREATING ENTRYPOINTS INTO PARALLELIZED INSTRUCTION SEQUENCES ATPLACES OTHER THAN BEGINNING OF PARTICULARPARALLELIZED INSTRUCTION SEQUENCE”。在Z模式期间,指令读取是通过读取与每个处理单元相联的Z高速缓存200(图1)中的Z代码实现的。图2(A)是Z高速缓存的结构。Z高速缓存字典210用于记录存储在Z高速缓存数组220中的Z程序段。Z高速缓存200中的内容表示一个预先指定的Z程序段序号,每个Z程序段具有最大单元(Cell)序号225,每个单元容纳一个Z指令。每个Z高速缓存200包括一个字典210及该字典所访问的单元的数组220。图2(B)是Z高速缓存字典入口211的格式。其包括·入口地址212,它或者是P程序段中开始生成Z程序段的起始地址,或者是Z程序段的中间入口点地址;·单元(Cell)的Z高速缓存地址213,包括用于该处理器单元的Z程序段的第一条Z指令,该Z指令概念上的执行不迟于这样的指令即其地址是该Z高速缓存字典的查找参数;·用于生成该Z程序段的P程序段起始地址214;·在该入口点之后作为更名寄存器217的第一个公共寄存器的编号;·代表入口点的指令的条件级218;·有效位219。
使用有效位219的字典无效特征用于两种情况当检测到发生程序存储比较(PSC program store Compare)危险时使用信号线331将所有处理单元中的所有Z代码无效化。当检测到操作数存储比较(OSCOperand store Compare)危险时使用信号线332将当前的Z程序段无效化。这两种危险将在第三部分详细描述。
在Z模式期间从Z高速缓存中读取(即I读取)指令。若缺乏与任一字典入口地址212的匹配,则通过判定模块216处理器单元设置为E模式。并且E模式下的I读取是在存储层140进行(图1)。
Z高速缓存数组220包括Z指令,Z指令具有固定长度和格式,格式见图2(C)。每个Z指令包括如下信息·指令映像222(操作码,操作数等),这是执行指令所必须的常用信息。每个寄存器操作数指定公共寄存器文件中M个公共寄存器的某一个,并且不用进行任何寄存器更名即可直接使用。
·条件级202,在高速缓存中被操作数存储比较(OSC)控制器使用,用于管理OSC危险的检测并且判定何时进行存储层的存储操作,就象指令执行期间解决分支问题一样。
·指令标识符203,它是指令序列码以标识Z程序段中的指令。指令标识符由OSC控制器使用以在STORE和FETCH指令共享一个条件级时标识OSC危险。
·对于遇到的每条分支指令,有必要标记分支指令条件级下的具有最大调度周期时间的指令。这是通过使用处理器单元条件级(PELC)来完成的,PELC在Z高速缓存中指令的域227中表示。
·Z程序段的结束位228,它与每个处理器单元的每个Z程序段的最后一个指令相关。
作为I读取操作的一部分,在相对于入口点参照后,Z高速缓存单元中所有信息都传送给译码器及处理器单元的其它相关部分。在对由总线215传送的地址进行初始匹配时,所匹配入口的LC218被放入LC对比器(Relativizer)290中。
由于顺序地从Z高速缓存数组220中取出每条指令,通过减去LC对比器290中的值减少了Z指令的条件级202,从而对于所有将来的指令处理都将指令的条件级,其操作数等作为相对物考虑(relativizing)。进一步地,也必须通过使用LC对比器290中的值来减少处理器单元条件级227,从而将与该指令相关的处理器单元条件级进行相对化处理。
每个处理器单元的连续Z指令将占用与该处理器单元相关的Z高速缓存单元220的连续单元225,并在使用数组地址增量器访问该单元。
在E模式下生成Z程序段受Z高速缓存大小和结构的限制,尽管从概念上讲Z高速缓存的大小和结构是任意的,但是在任何执行中都受限制。由于E模式被终止和调整为最后条件级,不能生成超过Z高速缓存容量的Z程序段。
指令的存储层地址和它们在Z高速缓存中的位置没有关系,一些Z指令还必须有与之相关的指令格式扩展域240(图2(D)),它包括当需要某信息时其在存储层中的地址。在处理分支指令时需要该扩展域。每个条件分支指令具有假定地址241的地址,该地址用于生成Z代码,贯穿地址(Fall-Through address)242是程序计数器(PC)的值并且指向跟在分支后的下一条顺序指令。
若分支目标是·与假定地址一样,则不需任何操作,·由于没有执行分支而不是假定地址,则根据贯穿地址242执行分支错误推测(BWG)动作,·若分支的目标不是假定地址241,而该目标地址是由处理器单元在生成分支指令地址这一点生成的,则根据该目标执行BWG操作。
对于无条件分支,只使用假定地址241,并且程序计数器(PC)值能占用贯穿地址242。当诸如BAL(R)(分支和链接(寄存器))这样的指令需要依赖于PC的值时PC值可以用于设定寄存器值。
尽管不同的处理单元中Z高速缓存数组的Z指令单元内容也不同,所有Z高速缓存字典的内容却相同。对多个相同的Z高速缓存字典进行维护表示这样一种均衡(trade-off),即在初始化新的Z程序段时在处理器单元中产生更大的自主性及向其发送消息之间进行均衡。
在E模式的开始,通过写总线230,在所有Z高速缓存中使用由处理器单元所提供的信息生成公共字典入口。若所有字典入口都是有效的,则使用最近最少参照算法(Least RecentlyReferenced(LRU))选择将被替换的Z程序段(即,使用具有时效标志(Age Tag)218的字典入口的标准时效标志进行时间推断)。
通过总线228更新每个处理器单元中Z程序段单元225。该总线在与指令相关的调度周期一起工作,从而使分配给某处理器单元的指令按顺序作为Z指令存储,其中所调度的Z指令可能与其在原始P程序段中的位置顺序不一致。
为了指定Z高速缓存字典中入口的范围,该范围考虑到了在同一个Z程序段中有多个入口点的情况,具有如下要求·需要将附加入口放入Z高速缓冲字典中从而生成的Z代码可以从不同的起始地址使用。
·这种入口必须具有一个相关的条件级LC,该条件级由作为整体的P程序段导出,从而顺序指令的LC可以被相对考虑(relativized)。
可以用如下方式达到这种要求通过E模式处理生成入口点。或者是通过外部设备对适用于入口点的指令地址进行识别,或者是周期性地为下一个指令声明一个入口点,该入口点是E模式提供的该入口点所需的所有需求信息。当指令调度存在潜在的失序序列时,必须对所有处理器单元Z高速缓存中所有入口点或其后的指令进行调度,这些指令概念上应排在该入口点之前的指令之后。
第三部分 OSC和PSC的监控操作数存储比较(Operand Store Compare(OSC))控制器和程序存储比较(Program Store Compare(PSC))控制器300的结构部件如图3(A)所示。由于每个FETCH和STORE都供给存储层接口145,控制器300监控OSC和PSC并参予存取操作。从而控制器300可以是存储层接口145的一部件并且可以做为它的一个附件。下面分别描述这些控制器。
操作数存储比较(OSC)处理器的结构通常要求对存储区域执行FETCH操作时必须能看到存储在该位置中的值,该位置由概念顺序上在该FETCH指令之前的最后一个STORE指令所访问。这就称为OSC,违反了它就称为OSC危险。在SPURR中,由于可能在不同的处理单元异步地执行FETCH和STORE指令,故需要对它们进行监控以判定是否发生了OSC危险。
在本部分以下章节,术语FETCH表示操作数读取,在需要的时候也将详细说明指令读取。如果是在同一个处理器单元中执行相应的FETCH和STORE操作,则OSC危险被称为处理器单元内部(intra-Processor-Element)危险。由于在处理器单元中指令并不按概念顺序排列,故需要监控处理单元内部OSC危险。指令标识符203与FETCH和STORE操作相联时允许OSC控制器判定是否发生了OSC危险。
若在不同处理器单元上执行相应的FETCH和STORE操作,则认为OSC危险是处理器单元间的(inter-Processor-Element)。一旦调度部件考虑处理器单元内失序指令调度情况,在监控OSC危险方面再区分处理器单元内或处理器单元间就没有意义了。监控OSC的问题涉及三个因素·由于必须避免在Z程序段结束时与提交存储操作有关的延迟,故存储操作应在定时的基础上提交。当与OSC相关的危险与表的读取和存储无关时,可以删除读取和存储表。通过如下方式可以确保作到这一点所有可能导致出现OSC危险的相关行为,读取和存储操作均已处理。使用处理器单元条件级确保了所有被某个处理器单元所调度的低于条件级的动作都已发布。由于使用了失序指令调度,在处理器单元中,由该处理器单元所调度的指令序列的指令的条件级不再是单调的,则可以取代常规的与各个读取和存储相关的条件级。
·当执行Z程序段,对存储层读取和存储时,对于每个处理器单元都发生处理器单元条件级的更新操作。处理器单元中条件级的最小值可以与通过对Z程序段中分支的分解导出的当前条件级进行比较。两者的最小值确定了读取/存储表中所有可以被删除的读取和存储的条件级。删除了某个读取操作就删除了该操作对存储器的读取,删除了某个存储操作就删除了该操作对存储器的存储。
·对于同属于一个分支组(branch group)中的所有指令,其条件级是相同的。该条件级也被中止分支组的分支指令共享。当检测到分支错误推测时,概念上排在第一个的分支错误推测条件级对必须向存储层提交的存储动作进行限定。即,Z程序段中所有条件级小于或等于第一个分支错误推测条件级的存储操作必须提交给存储层,而其它存储操作均不提交。每个存储指令必须带相对于Z程序段入口点的条件级。
这样,通过使用指令的如下三个属性监控这两种危险1.条件级(202)-图3(B)和3(C)基于子程序入口点的,经适当相对化的,包括分支指令的条件级是排在P程序段指令之前并且概念上跟在入口点之后的分支指令的数目。包括终止分支组在内的分支组中的所有指令共享同一个条件级。没有对照物参照的Z程序段中指令的初始条件级值为零。在同一个分支组中作为入口点的所有指令的相对条件级为零。
2.处理器单元条件级(LC)302-图3(B)和(C)LC是从处理器单元条件级(PELC)导出的,其中PELC是在每个处理器单元通过监控所处理的指令域227来维护的。该域是根据LC对比器290中所保持的入口点的条件级来对比确定的。未作对比考虑的初始值为零,若对比考虑则该条件级值要由入口点的条件级补偿。概念上跟在入口点之后的所有指令的所有PE LC值至少等于入口点条件级,这是由于PE LC的初始设定值是顺序执行的分支指令的条件级。当某指令域227中具有一个非零的相对PELC时,其后所有FETCH和STORE操作都给出一个当前值(302)以注释它们在存储器访问操作。
3.指令标识符(ID)203-图3(B)ID是P程序段中指示的顺序编号。
E模式下,所有处理单元顺序执行所有指令,所以按通常方法确定LC(202)和ID(203)。由于指令是顺序执行的,因而遇到分支指令时,PELC(227)的设定涉及每个处理器单元中与分支条件级相等的最近被调度指令的设定。执行Z代码时,从Z指令中可以得到每条指令的LC(202),ID(203),并且根据被处理的设定于Z模式下的最后的指令,可以获取每个处理器单元的当前PELC(227)。这些可以用来对所有需求信息中的FETCH(图3B)和STORE(图3C)进行注释。尽管使用象(302)那样的PELC是单调的,但是当发生分支错误推测时,可以跳过中间值,并且不必给出确定需提交哪个存储操作的提示。
OSC控制器维护两张表用比较器314维护读取表310(图3(A)),用比较器326维护存储表320。
图3(B)是读取表入口311的格式(地址,LC,PELC,ID)。地址312存储FETCH全地址及其扩展字节。生成FETCH的FETCH指令的LC202,ID203及由处理器单元所处理的当前最后一个PELC也包括在读取表入口311中。跨越多个双字(DW,Double Words)的FETCHS在读取表中生成多个入口。
图3(C)是存储表入口321的格式(地址,LC,PELC,ID,数据)。地址322是STORE的全地址及其扩展字节。LC202,ID203和PELC从STORE指令中导出,并由处理器单元维护。数据324是要存入存储层全DW,是STORE指令的一部分。通过将STORE的结果与从存储层中取出的DW的其它字节合并起来导出数据324。若STORE超出DW范围,则在存储表中需要两个入口,此两个入口分别用于每个所涉及到的DW。生成多个DW的存储指令在处理上是相似的。不需要将存储指令提交给存储层就可以执行合并操作。
FETCH的执行过程如下1.通过匹配地址域,从存储表中选择出具有如下特征的入口该入口与FETCH指令具有同样的地址且ID比该FETCH指令小。
2.若存在匹配,则FETCH将数据324从具有最大当前ID小于该FETCH的ID的所匹配的存储表入口中传递给需要该数据的处理器单元。
3.若在任何具有较小ID的STORE入口中找不到匹配,则从存储层140中获取FETCH所读取的值。
4.在读取表中为该FETCH指令增加一个入口。若处理器单元FETCH/STORE LC表344改变了,则使用读取操作的PELC(302)域将其修改。
STORE执行过程如下1.通过匹配地址域,选择出具有如下特征的入口该入口具有与STORE指令相同的地址并且其ID值比STORE指令大。
2.若存在任何一个这种入口,则认为发生了OSC危险。
3.在存储表中为该STORE指令增加一个入口。若处理器单元FETCH/STORE LC表344改变了,则修改它。
图3(D)详细图示了使用删除监控器删除上面两张表中的入口的情况,它包括如下三方面1.总体确认的条件级(OCLC,Overall Certified Level ofconditionality)341每个处理器单元中的分支分解部件通过总线390与删除监控器相连,并将每个Z代码分支指令分解结果传递给该监控器。在任何时间,OCLC是最大的LC,从而所有较低层的分支都被正确地分解。当将处于比OCLC大一级的存储指令分解为BWG时,将该LC或更低LC的存储指令删除,清空OSC控制器,该LC级的分支错误推测传送给所有处理器单元,接收到该信号的处理器单元的动作将在第五部分Z代码处理中加以描述。
2.总体操作数条件级(OOLC)343一旦执行一条存储器FETCH或STORE指令,就使用PELC为该处理器单元更新FETCH/STORE LC表344入口,并且所有处理单元中这些入口的最小值是OOLC342。一旦处理器单元执行由Z程序段结束位228(图2(C))所指示的Z代码的最后一个指令,处理器单元就将最后一个Z代码信号作为一个伪FETCH发送。该信号的主要目的是减少参加用于判定OOLC的最小化计算的FETCH/STORE LC表中用于该处理器单元的PELC。
3.总体条件级(OLC)340OLC是OOLC和OCLC的最小值。
其含义为每个处理器单元都执行了所有条件级小于OLC的所有指令。而且,所有低于OLC的分支也已分解。从而任何LC小于等于OLC的FETCH/STORE入口可以被删除。一旦OLC改变,删除监控器通过总线345执行如下操作1.从读取表中删除所有LC小于或等于OLC的入口。
2.从存储表中选出所有LC小于或等于OLC的入口。
3.若没有一个选出的入口提出PSC(以后将描述),则按照这些入口ID的升序扫描上述选出的入口。并且,当扫描每个入口时,提交STORE并且从存储表中删除入口。
为避免条件级危险,对于那些指令格式显示它们将访问同一个存储位置的FETCH和STORE指令(如若它们的操作数使用同样的基址和变址寄存器并且有相同的偏移),将它们在同样的处理器单元上、按概念顺序调度。
程序存储比较(Program Store Compare(PSC))有一种体系结构通过允许“向指令流中扩入存储指令”“Stores into the instruction stream”来支持自修改程序。对于这种体系结构,SPURR需要通过监控判断生成的Z代码是否有效,这是由于用于生成该Z程序段的代码的指令流中可能插入存储指令或者,某个活动的Z程序段可能自己STORE进其自己的指令流(I-Stream),这种危险就称为PSC。
存储层具有一个高速缓存及一个关联字典,该关联字典包括一个指令参照位,用于指明该行是用来作为E模式下的指令读取源。若该行离开高速缓存则发生PSC,此时通过总线331将所有Z代码无效化(也可见于图2(A))。
若根据设定的指令参照位,存储提交器(Store Commiter)330判定出某一行有一个STORE操作,其中存储提交器用于根据存储表320的删除操作向存储层提交STORES,这时将引起PSC危险并且将发生PSC危险的LC处所有提交的存储操作取消。将机器状态恢复至前一个LC处,并且按照处理OSC危险的方法将PSC危险清除。
第四部分 处理分支及公共寄存器文件在并行体系结构中,进行分支判定之前可以部分执行若干指令。通常这是通过使用一些准则对分支判定进行推测来完成的。当分支推测错时,必须将处理器的中断状态恢复至分支后正确的机器状态。处理器体系结构的不同处在于其机器状态是由什么构成的。一般来讲,状态包括可存取寄存器的内容。
SPURR在以下两个方面将状态恢复处理复杂化了首先E模式下的BWG导致丢弃所生成的Z代码,这些Z代码是由于错误推测的分支指令及为了使跟在分支后的指令序列正确而重新调整指令ID而被丢弃的。其次,Z模式下寄存器状态分布在公共寄存器文件中,在分配给结构寄存器的空间中必须将其统一。
另外,即使没有BWG,SPURR也涉及E模式和Z模式之间的转换。这与有BWG的情况相同。在E模式完成后,Z模式完成后、或BWG(branch wrong guss)之后采集处理器的寄存器状态的操作是基于以下条件的即SPURR处理器的每个处理周期所需的相对(vis-a-vis)寄存器的初始状态。这些初始状态涉及将组成公共寄存器文件的前m个寄存器的结构寄存器置为有效状态,将剩下的M-m个寄存器置为无效状态。要实现这一点,需要从公共寄存器文件中恢复结构寄存器的值。寄存器对照表(170)标识出与每个结构寄存器相关联的公共寄存器。在E模式期间,寄存器对照表的状态在每条分支指令之后和E模式处理结束时判定。该信息被高速缓存并根据Z程序段的起始地址和分支指令的条件级来索引。
执行完Z程序段后,将检索与执行完的Z程序段相关联的寄存器对照表,并且用合适的检索值初始化公共寄存器文件。将分支入口之后的寄存器状态恢复至Z程序段中不需要特别的准备工作。若使用合适的非相对条件级访问高速缓存的寄存器对照表,该对照表与BWG相关联,则若寄存器是有效的,所识别出的公共寄存器就是正确的。若寄存器是有效的,则在Z代码程序段中设置了该寄存器并且其值必须被恢复并放入适当的结构寄存器中。被设置是指将跟在入口点之后的指令设置入Z程序段中。若高速缓存的寄存器对照表中所识别出的寄存器是无效的,就意味着该寄存器没有被跟在入口点之后的指令所设定,在入口处结构寄存器的值是传递给下一处理程序段的正确值。而且,与在寄存器对照表高速缓存(180)中高速缓存的并与分支相关联的一组寄存器对照表一起,另一组寄存器对照表也与入口点相关联。这些称为入口点寄存器对照表(190)(RCTE),当声明入口点时,该RCTE与Z代码入口点相关联,并且被E模式扩展。若入口点寄存器对照表是作为处理器单元和用于访问寄存器的公共寄存器文件的接口时,这两个高速缓存可以很容易地合并起来,其中这些被访问寄存器的序号低于跟在入口点之后第一个更名寄存器的序号。即,若每个处理器单元都标志了那些需要使用RCTE进行再译(retranslation)的寄存器,则该信息可以保存并与公共寄存器文件相关联,而不是局限于只被所有处理器单元可用。
当执行某Z程序段的分支入口时,从高速缓存(190)中检索出入口点寄存器对照表,并且用于访问公共寄存器表以访问寄存器的处理器单元可以使用此与入口点相关联的对照表以判定哪个结构寄存器的值需要作为此次访问的返回值,其中该寄存器的编号小于作为更名寄存器(217)的第一个公共寄存器的编号,更名寄存器是入口点信息(图2(B))的部分信息。这样做的原因是对于所有处理器单元的所有Z代码指令,这些指令概念上对应于顺序代码入口点后面的指令,参照寄存器或者是(1)跟在入口点后的寄存器集或者是(2)入口点前寄存器集的最后拷贝。前一种情况下,源寄存器编号至少等于跟在入口点之后第一个寄存器集数目,后一种情况下,使用的寄存器是与入口点相关的寄存器对照表中某一个寄存器。如果任何处理器单元的Z代码中,跟在入口点后的某指令概念上跟在入口点之前,则在Z模式处理中通过一些部件可以忽略该指令。在当前应用中,此种情况不能作为E模式调度发生,在Z代码中,所有概念上在入口点之前的指令都排在概念上跟在入口点之后的所有指令之前。第五部分将详述之。在这种应用中,每个Z代码中的入口点都将概念上在入口点之前的指令与概念上在入口点之后的指令分开。若在Z高速缓存字典中可以得到包括指令顺序编号和入口点顺序编号的Z代码,则可以识别出并忽略概念上较早的指令。
第五部分在E模式下向指令单元分配指令及进行指令处理。
关于在发生OSC所采取的比通常的指令调度优势大的体系结构及在E模式下识别并行处理器中的分支错误推测并进行恢复这些情况的细节见于名称为“SELF PARALLELIZINGCOMPUTER SYSTEM AND METHOD”的美国专利5,347,639第7、8、9章中,该专利为本申请的对比文件。在考虑了SPURR和在此对比专利中描述的MSIS处理器的差别的SPURR环境下可以使用这些自同步方法。MSIS处理器和SPURR处理器实施例之间的主要差别已经讨论过了,下面将说明SPURR的调度操作和指令处理通过以下操作可以概括描述E模式下的操作,这些操作包括E模式下必须实现的功能·寄存器更名·指令调度·状态恢复寄存器对应表高速缓存的分支处理·创建PELC的分支处理·入口点创建处理·处理结束P程序段指令/中止E模式图4(A)和4(B)是E模式下这些操作的顺序,但其执行顺序与上述情况稍有差别。其原因在于E模式下有些功能,如入口点创建和指令调度,完全取决于上一个指令处理结束时每个处理器单元所保持的本地信息状态。而其它一些功能取决于指令处理过程中所生成的信息。理解E模式下操作序列的一种方法是要明白所有处理器单元都按照组成P程序段的指令顺序执行操作集。每个处理器单元在执行所有指令时所看到的P程序段指令是按原始概念上的顺序排列的。每个处理器单元所执行的结果将仅仅取决于指令的排列顺序,并且即使操作的时序不同,该顺序也能维持。处理器单元操作唯一不同之处在于当判定某个处理器单元要调度某个指令时,该处理器单元必须生成该指令的Z代码,通过更新所涉及的寄存器执行指令,并将其放入自己的Z代码高速缓存中。每个处理器单元可以异步地执行操作,处理器单元之间缺少同步处理对其毫无影响。在另一个实施例中,一个处理器单元可以执行E模式下所有操作。这就需要一种将Z代码分配到处理器单元中的方法。通过让所有处理器单元执行E模式处理可以避免进行这种分配。最后,某些E模式操作只需在每个P程序段执行一次。包括在分支指令处理那一点将寄存器对照表高速缓存及将入口点寄存器对照表高速缓存。这些操作最好由一个处理器单元来完成,如处理器单元1。
如图4(A)和4(B)所示,E模式下指令的操作顺序包括1.入口点生成的处理(图4(A),步骤410)2.指令调度(图4(A),步骤420)3.寄存器更名(图4(A),步骤430)4.状态恢复寄存器对照表高速缓存分支处理(图4(B),步骤440)。
5.创建PELC的分支处理(图4(B),步骤450)6.最后P程序段指令处理(图4(B),步骤460)/中止C模式以下术语用于描述在这些操作中所使用的处理器单元的动作·当前寄存器更名(Current Register Rename)CRR在每个处理器单元对某个程序段执行E模式处理时保持该数值并将其进行增量处理。每个更新寄存器的指令都具有更名为CRR的当前值的寄存器,并且在下一个更名操作之前,CRR的值立即增量。
·条件级LC每个处理器单元都保持下一指令的条件级。条件级是程序段中所遇到的分支指令的编号,并且在对每条分支指令译码之后增量。若分支前的指令不是分支指令,则其后的分支指令与其具有相同的条件级。
·周期占用向量(Cycle Occupancy Vector)COV
每个处理器单元都有一任意长度的向量,其分量包括介于0和处理器单元数目n之间的一个数值。调度器使用该COV来判定分配了某指令的处理器单元及该处理器单元在Z模式下对该指令进行译码的周期。
·寄存器可用时间(Register Availability Time)RAT每个处理器单元都保持有一张表,该表内保存结构寄存器的可用时间。每个更新了寄存器的指令都导致重新计算可用时间。寄存器可用时间等于寄存器更新指令的译码时间加上并行操作模式下与存储器访问或执行时间相关的任何延迟。
·指令ID或顺序编号每个处理器单元都保持一个从程序段开始执行的指令运行次数的计数值。该计数值从1开始,在E模式下每处理一个指令,计数值就增1。
·入口点(Entry Point)Z代码的每个入口点是一个Z高速缓存地址集,每个处理器单元有一个,这些指令集并行地与每个处理器单元的Z高速缓存字典中所保持的固定指令地址相关联。当找到这个指令地址后,处理器单元被设置成Z模式,并且每个处理器单元访问自己的Z高速缓存以访问待处理的指令。Z程序段的开始是一个普通的入口点。字典入口中特殊入口点还包括被选为入口点的指令的条件级及由概念上跟在该入口点之后的任何指令所设置的第一个公共寄存器编号。
5.1入口点创建处理(步骤410)为了在一个Z程序段中创建一个入口点,E模式必须能识别要成为入口点的指令地址。有不少方法可以做到这一点。一种方法是在收集了来自于不同的地址的由程序段所共享的地址信息之后进行二次并行化(secondary parallelization)时创建入口点。一旦收集了这信息,程序段进行再并行化时就可以从这些共享地址中创建入口点。另一种方法是周期地(即,在P程序段中每隔固定条数的指令)为下一指令声明一个入口点。
一旦创建,入口点连同如下信息必须放入每个处理器单元的Z代码高速缓存字典中·每一个Z代码指令的地址,当使用该入口点时,从每个处理器单元Z高速缓存中取出该地址;·指向保存在入口点寄存器对照表高速缓存(190)中寄存器对照表拷贝的指针;·CRR的当前值,它标识出在该入口点之后的代码要更名的公共寄存器;及·处理器单元中当前可用的LC。
与该入口点相关联的寄存器对照表是对被声明为入口点的指令进行译码之前所存在的表。每个处理器单元将与入口点相关联的寄存器对照表进行高速缓冲,并且当通过对程序段执行并行操作以搜索入口点时使用该表。另外,每个处理器单元都保持该处理器单元在调度指令时所占用的最大周期值MAXCYCLE。当为每个处理器单元声明入口点时,值MAXCYCLE+1表示在处理器单元中入口点之后的第一个执行周期。在任何一个指令被调度到该周期之前却碰到P程序段结束指令这种不希望遇到情况下,值MAXCYCLE+1被放入最后使用ENTRY POINT CYCLE(EPC)的处理器单元中。E模式下结束P程序段指令处理程序将使用该EPC以做适应调整。
尽管在处理器单元中用占用分配算法所调度的代码(步骤420)是与概念顺序不同(out-of-conceptual-sequence)的代码,对于每个处理器单元,其对跟在某入口点之后的指令进行的调度必须跟在分配给该处理器单元的概念上在该入口点之前的所有指令执行之后进行。这是在每个处理器单元声明入口点时通过调整周期占用向量VOC来完成的。其主要要求是没有任何一个跟在入口点之后的指令分配给处理器单元K,即分配一个周期序号小于处理器单元K的MAXCYCLE,即MAXCYCLE(K)的周期,其中MAXCYCLE(K)在入口点进行判定。令COV实现该要求的处理是通过如下方式实现的即将COV分量中所有周期位置(cycleposition)小于MAXCYCLE(K)的值都调整为最少的K。这相当于在COV中所有周期进行索引时使COV在数值上为单调非增索引。这是通过使用了对所有处理器单元进行调度时的最大周期值MAXMAXCYC LE并延COV反序对COV进行直接观测实现的,对于COV中的每个小于MAXMAXCYCLE的周期位置,COV的值被设置为COV分量周期值及下一较高周期位置的COV分量值的最大值。在对COV的第一个位置或当插入COV分量的值等于n时该处理中止,n等于SPURR中处理器单元的个数。这时,COV中所有在前的位置值都设置为n。
5.2指令调度(步骤420)每个处理器单元都包括一个周期占用向量COV,其记录进行到当前指令被执行时每个周期中被调用的指令数目。每当寄存器被更名,并且判断出导致寄存器更新的指令的译码周期开始时,在寄存器对照表的局部拷贝中为该寄存器设置一个寄存器可用时间RAT,此表用于记录寄存器的更名。在5.3中将更详细地描述寄存器更名操作。
在E模式处理的开始,所有结构寄存器被置为可用状态,并且其可用时间被置为零。新修改的寄存器的可用时间等于生成新值的指令的译码时间加上与指令相关的执行时间和任何存储器访问的延迟时间。对指令所需操作数进行访问的存储器访问延迟是一个固定值,在此认为是一个周期。对指令进行译码的时间肯定超过指令的所有译码输入的一个RAT周期,因此要受下面将描述的占用分配算法(OAA)所限定的有效占用约束。1+输入指令译码的所有RAT的最大值所得的结果值被称为指令的最小时隙时间。
分配算法是确定P程序段中每条指令的译码时间及为该指令分配一个译码时隙及处理器单元的规则。一般按如下方式进行指令检测,寄存器更名,按概念顺序分配指令及按其输入的RAT进行调度1.COV中每个时隙都与分配给该时隙的指令数目有关,即所谓的时隙占用(OCCUPANCY)
2.根据与由指令所使用的寄存器有关的RAT内容计算该指令的时隙,即所谓指令的最小时隙。
·若COV最小时隙值小于n,即SPURR处理器中处理器单元数,则选中的(SELECTED)时隙成为最小时隙。
·若COV最小时隙值等于n,即SURR处理器中处理器单元数,则指令被分配给第一个较后的其COV入口小于n的时隙。并且该时隙成为选中的时隙。
3.选中的时隙的占用被增1,并且指令被分配给其编号等于当前COV中选中的时隙值的处理器单元。
4.译码时间等于选中时间(SELECTED time)并且用计算出的指令执行的RAT来更新寄存器对照表中的RAT域。
5.每个处理器单元都保持有最高编号周期(the highestnumbered cycle),即MAXCYCLE,并在此周期调度分配给它的一个指令。若选中的时隙大于被分配给该指令的处理器单元的MAXCYCLE,则该处理器单元的当前MAXCYCLE被更新为等于选中的时间(SELECTED time)。
6.每个处理器单元都保持有最高编号周期MAXMAXCYLE,并在此周期调度任何指令。若选中的时隙大于MAXMAXCYCLE,则当前的MAXMAXCYLE值被更名为选中的时间值。
用这种方法产生的分配结果将确定出执行指令的处理器单元及该指令的译码时间。在4.3节中将使用指令的译码时间值来计算指令可能更新的寄存器RAT。
5.3寄存器更名(步骤430)在E模式下处理指令时,只要指令为结构寄存器设定了一个新的值,就要发生寄存器更名操作。SPURR中的寄存器被统一化(generalized)以产生任何一种一条指令所生成的,而另一条指令可以使用的,并且还可以设定条件代码的值。在使用条件代码设定指令体系中,条件代码用结构寄存器来表示并可以用来更名。
每个处理器单元在CRR中记录寄存器文件中下一个可用于更名的寄存器。这时在指令处理时,处理器单元已经调度了指令,并且也确定了该指令的译码时间。为避免更新寄存器的指令与输入指令相混淆,处理器单元执行的指令处理在指令是否被某处理器单元调度的情况下是不同的。若指令被处理器单元a调度,则处理器单元a将在E模式下执行如下操作·处理器单元将使用寄存器对照表将所有指令源寄存器转换为其更名值。
·处理器单元a将参照其CRR将指令的接收寄存器更名并将CRR增量。
·处理器单元a将将执行指令,并在公共寄存器文件中设置更名寄存器值。
·处理器单元a将生成指令222(图2C)的Z代码,并将指令放在自己的Z代码高速缓存的对应于调度该指令的周期的地址中。
·然后,处理器单元a将在所有其它处理器对指令的接收寄存器进行更名后完成它们所执行的操作。
若处理器单元不是处理器单元a并且指令更新了寄存器值,则·处理器单元使用CRR中的值将指令的接收寄存器更名并将CRR值增量。
然后处理器单元将执行如下指令,其执行结果将最终改变寄存器的值·此更名结果将放入每个处理器单元的寄存器对照表的当前复制中。
·使用4.2节中确定的被调度指令的译码时间,通过将译码时间与指令存储器访问和执行的延迟时间相加可以确定指令所更新的寄存器的RAT。若所处理的指令不是分支指令,也不是P程序段结束指令,则可以跳过4.4,4.5和4.6节,并从4.1节E模式处理开始执行下一条指令。
5.4状态恢复寄存器对照表高速缓存分支处理(步骤440)在E模式下处理器单元1遇到分支指令时,不管哪个处理器单元被分配进行指令的译码和执行操作,在指令的更名操作的最后都必须节省一些寄存器对照表空间从而使SPURR处理器可以执行状态恢复操作。与本地寄存器对照表相关联的信息必须被高速缓存进分支寄存器对照表(180)中,该表将在指令执行时的公共寄存器同更名的相应的结构寄存器相关联。并且根据P程序段的起始地址及分支条件级可以将该信息检索出来。若P程序段是分支的,则检索中所用到的条件级是相对于入口点的条件级,其使用入口点条件级在相对化后的代码中进行分支的计数和检验。从寄存器对照表检索出信息的方式用于在SPURR并行处理结束时或如第四部分所描述的分支错误推测发生时生成用于复位的初始化寄存器状态。
5.5创建PELC的分支处理(步骤450)当在Z模式下发生分支错误推测时,必须使每个处理器单元在某一点停止执行,在这一点,P程序段中所有概念上排在分支之前的指令,条件级小于等于被推测为错误的分支的条件级的指令都要完成其处理。由于处理器单元所执行的指令不再按顺序排列(即,失序执行),所以不能够使用由处理器单元所发布的单个指令的条件级来确保处理器单元中所有具有较低条件级的指令都已执行完。在每个处理器单元中中断处理的方法是使用处理器单元条件级PELC,它是在E模式下设定的。当处理器单元遇到P程序段中某个分支时,不管分支是否是分配给该处理器单元的,处理器单元将在227(见图2(C))中的分支指令条件级附加到该处理器单元,在MAXCYCLE所调度的指令中某条指令可能将其227重写多次但总是以逐渐上升的值重写。PELC确保了没有一条跟在具有PELC=a的指令之后的指令所具有的条件级小于等于a。PELC可能跳过中间值从而不适用于作为FETCH/STORE控制中用于执行删除STORE指令的主要依据。这一点在第三部分已经讨论过。另外,若指令是一个分支,则所有的处理器单元必须将其条件级增量,从而按照正确的条件级处理下一条指令。
5.6处理P程序段结束指令/中止E模式(步骤460)当遇到P程序段最后一条指令时,每个处理器单元通过将位228(图2C)设置为开(on)将在与该处理器单元相关的MAXCYCLE,将分配给它的指令声明为程序段结束指令。这种规则的主要例外情况是,当某个处理器单元MAXCYCLE的当前值小于EPC时,与EPC相关的指令位置被填上非操作指令NOP,即被标志为P程序段结束指令。若某条指令的下一条指令地址是Z代码高速缓存字典的入口则可以声明该指令为P程序段结束指令。然后,E模式使用下一条指令的地址以判定当前指令是否中止E模式并表示P程序段的结束。
P程序段的结束指令常常是一个分支,但是,不管怎样,当遇到P程序段最后一条指令时,处理器单元1将生成一个由当前条件级索引的寄存器对应表的高速缓存复制。SPURR现在将使用该条件级初始化一个状态恢复以确保所有指令都被执行,并且FETCH/STORE表的删除工作也完成了。
在第二部分已作过说明,在每个处理步骤结束时,恢复状态及删除FETCH/STORE表后,用下一个指令地址查找Z代码高速缓存字典以判定下一个处理期间将涉及E模式还是Z模式。当下一个指令地址与P程序段起始地址或P程序段中某入口点一致时就建立起Z模式处理期间。
第六部分 Z模式处理由于不需要寄存器更名,指令调度或恢复信息的高速缓存,因此Z模式处理比E模式处理更直观。Z模式处理继续执行,直到所有处理器单元执行到最后一条执行或声明有分支错误推测。分支错误推测由整体确认条件级(OCLC)341(见图3A)声明。每个处理器单元中分支分解部件通过总线390与删除监控器相连将每个Z代码分支指令分解。在任何给定时间,OCLC是最大的LC,这样所有较低层的分支都被正确分解。当在大于OCLC的LC处的分支被分解为BWG时,位于LC级的分支错误推测被传送给所有处理器单元。当所有处理器单元都停止工作,状态恢复已经完成,并且FETCH/STORE表已被删除时,声明该分支错误推测的处理器单元将把正确的目标地址传送给所有处理器单元。一旦处理器单元的PELC大于等于分支错误推测;该处理器单元在分支错误推测之后将停止工作。然后,将根据分配给它的任何指令的最大PELC227(图2C)继续复位它的PELC。当处理器单元处理到结束段位228为打开状态的指令时自动停止工作。
尽管本发明是根据一个简单的实施例进行说明的,熟练的技术人员将能意识到,在附带的权利要求书的精神和范围内的修改也是本发明可以实现的。
权利要求
1.一种计算机处理装置,包括用于存储指令序列的存储器;多个执行单元;及并行指令生成装置,用于在执行存储在所述存储器中所述指令序列的同时生成存储在所述存储器中所述指令序列的第一个序列的替代编码,其中所述替代编码可以以并行异步方式被所述多个执行单元执行,并且所述多个执行单元通过一公共寄存器文件进行交互。
2.如权利要求1所述的计算机处理装置,其特征在于,所述替代编码包括所述第一指令序列的多个子序列,其中所述指令子序列可以被所述多个执行单元以并行异步方式执行。
3如权利要求2所述的计算机处理装置,其特征在于,所述多个执行单元的每一个都与存储所述指令子序列中的一个的专用指令高速缓存相联。
4.如权利要求2所述的计算机处理装置,其特征在于,所述并行指令生成装置识别所述指令子序列的多个入口点。
5.如权利要求2所述的计算机处理装置,其特征在于,所述并行指令生成装置利用寄存器更名生成所述第一指令序列的所述多个子序列。
6.如权利要求5所述的计算机处理装置,其特征在于,所述并行生成装置存储与每个指令子序列相关联的寄存器对照表,其中所述寄存器对照表反映出由相关的指令子序列中指令所使用和定义的寄存器与所述公共寄存器文件的寄存器之间的映射关系。
7.如权利要求6所述的计算机处理装置,其特征在于,所述寄存器对照表包括与所述公共寄存器文件的每个寄存器对应的入口,该入口映射一个寄存器,该寄存器是由与寄存器对照表相关联的指令子序列中的指令使用和/或定义的,其中所述入口包括可用数据,该数据代表与所述公共寄存器文件的相应寄存器相关的可用时间。
8.在包括用于存储指令序列的存储器和多个执行单元的计算机处理装置中,一种执行所述指令序列的方法,包括步骤执行存储在所述存储器中的所述指令序列,与所述执行存储在所述存储器中的所述指令序列相并发地,生成所述存储器中所述指令序列的第一序列的替代编码,其中所述替代编码可以由所述多个执行单元并行异步地执行,并且所述多个执行单元通过公共寄存器文件进行交互。
9.如权利要求8所述的方法,其特征在于,所述替代编码包括所述第一指令序列的多个子序列,其中所述多个执行单元可以以并行异步方式执行所述指令子序列。
10.如权利要求9所述的方法,其特征在于,所述多个执行单元的每一个都与用于存储所述指令子序列的一个的专用指令高速缓存相关联。
11.如权利要求9所述的方法,其特征在于,进一步包括识别所述指令子序列多个入口的步骤。
12.如权利要求9所述的方法,其特征在于,生成步骤利用寄存器更名生成所述第一指令序列的所述多个子序列。
13.如权利要求12所述的方法,其特征在于,进一步包括存储与每个指令子序列相关联的寄存器对照表的步骤,其中所述寄存器对照表反映由相应的指令子序列中的指令所使用和定义的寄存器与所述公共寄存器文件的寄存器之间的映射关系。
14.如权利要求13所述的方法,其特征在于,所述寄存器对照表包括与所述公共寄存器文件的每个寄存器对应的入口,该入口映射一个寄存器,该寄存器是由与寄存器对照表相关联的指令子序列中的指令所使用和/或定义的,其中所述入口包括可用数据,该数据代表与所述公共寄存器文件的相应寄存器相关的可用时间。
15.一种计算机处理装置,包括存储指令序列的存储器;多个执行单元;并行指令生成装置,用于与存储在所述存储器单元中的所述指令序列的执行相并发地,生成存储在所述存储器中所述指令序列的第一个序列的替代编码,其中所述多个执行单元可以以并行异步方式执行所述替代编码,并且所述替代编码包括至少一个失序调度的指令及至少一个推测分支指令;及恢复装置包括,用于生成分支错误推测信号的装置,该信号表示所述至少一个推测的分支指令是错误的,及用于响应所述分支错误推测信号,在执行完存储在所述存储器中的至少一个推测分支指令之前的所有指令之后控制所述执行单元停止执行所述替代编码的装置。
16.如权利要求1 5所述的计算机处理装置,其特征在于,根据所述分支指令的初始执行情况推测所述推测分支指令的处理结果。
17.如权利要求15所述的计算机处理装置,其特征在于,所述恢复装置包括一个存储第一数据的表,该数据代表与由所述执行单元所执行的每个替代编码相关的条件级;一个生成第二数据的装置,该数据代表所述至少一个推测分支指令的条件级;一种用于判定出与由所述执行单元所执行的所述替代编码相关的所述第一数据与所述第二数据相对应时控制每个执行单元停止执行所述替代编码的装置。
18.在包括用于存储指令序列的存储器和多个执行单元的计算机处理装置中,一种执行所述指令序列的方法,包括步骤执行存储在所述存储器中的所述指令序列;与所述执行所述指令序列并发地,生成存储在所述存储器中的所述指令序列的第一序列的替代编码,其中所述多个执行单元并行异步地执行所述替代编码,并且其中所述替代编码包括至少一个失序调度的指令及至少一个推测分支指令;生成一个分支错误推测信号,该信号表示所述至少一个推测分支指令被推测错了;及响应所述分支错误推测信号,在执行完存储在所述存储器中的所述至少一个推测分支指令之前的所有指令之后控制所述执行单元停止执行所述替代编码。
19.如权利要求18所述的方法,其特征在于,根据所述分支指令的初始执行情况推测所述推测分支指令的执行结果。
20.如权利要求18所述的方法,其特征在于,进一步包括如下步骤生成第一数据,该数据表示由所述执行单元所执行的每个替代编码相关的条件级;生成第二数据,该数据代表所述至少一个推测分支指令的条件级;及当判定由所述执行单元所执行的所述替代编码相关的所述第一数据与所述第二数据相对应时控制每个执行单元停止执行所述替代编码。
全文摘要
一种自并行计算机系统,其中单个执行序列被分为指令子序列集,每个指令子序列在各自独立的处理器单元的某一个上执行,这些处理器单元共享一个公共寄存器文件。这种装置和方法被称为SPURR(利用寄存器更名实现自并行)。
文档编号G06F9/45GK1178942SQ97118000
公开日1998年4月15日 申请日期1997年8月29日 优先权日1996年10月1日
发明者鲁道夫·内森·雷克斯查菲恩, 卡塔玛瑞·埃卡那德哈姆 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1