CN115904508B - 乱序处理器中队列的队列项选择方法及装置 - Google Patents

乱序处理器中队列的队列项选择方法及装置 Download PDF

Info

Publication number
CN115904508B
CN115904508B CN202310017030.2A CN202310017030A CN115904508B CN 115904508 B CN115904508 B CN 115904508B CN 202310017030 A CN202310017030 A CN 202310017030A CN 115904508 B CN115904508 B CN 115904508B
Authority
CN
China
Prior art keywords
queue
bit
bit vector
executable
entry
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.)
Active
Application number
CN202310017030.2A
Other languages
English (en)
Other versions
CN115904508A (zh
Inventor
李祖松
郇丹丹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Micro Core Technology Co ltd
Original Assignee
Beijing Micro Core Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Micro Core Technology Co ltd filed Critical Beijing Micro Core Technology Co ltd
Priority to CN202310017030.2A priority Critical patent/CN115904508B/zh
Publication of CN115904508A publication Critical patent/CN115904508A/zh
Application granted granted Critical
Publication of CN115904508B publication Critical patent/CN115904508B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Advance Control (AREA)

Abstract

本公开提供了一种乱序处理器中队列的队列项选择方法及装置,涉及处理器技术领域,方法包括:根据队列中各队列项的标签值,生成队列的掩码位向量;根据队列中各队列项是否满足可执行条件,生成队列的可执行位向量;根据掩码位向量和可执行位向量,生成队列的选择位向量;将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中目标位为选择位向量中首个对应值为第一预设值的位。能够减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积,以解决因乱序队列中队列项选择的硬件处理过程复杂而导致的处理器性能差、耗费较多的功耗和面积的问题。

Description

乱序处理器中队列的队列项选择方法及装置
技术领域
本公开涉及处理器技术领域,特别涉及一种乱序处理器中队列的队列项选择方法及装置。
背景技术
在程序员编写程序的时候,认为程序的执行都是按照串行的顺序运行的,只有前面的一条指令执行完了,后面的指令才可以执行,因此处理器在执行程序的时候,也必须保证这种串行的结果,否则就会和程序最初的预想行为不一致。为了提高指令执行效率,现代的处理器都是乱序处理器,乱序处理器的指令就不会按照程序中指定的顺序在处理器中流动,只要满足执行条件,后面的指令可以越过前面的指令先执行,以提高指令的执行速度。
乱序处理器中的乱序队列用来缓存一定数量的指令和数据,负责为进入队列的指令和数据分配空项,将符合一定条件的指令和数据从队列中选择出来执行。其中,指令可以是程序的指令,也可以是处理器内部译码成的内部操作,一条指令可能翻译成一个操作也可能翻译成多个操作。从乱序队列中选择队列项的硬件处理过程比较复杂,一般时序都处于处理器的关键路径上,直接影响着处理器的频率,从而导致处理器的性能较差,而且耗费比较多的功耗和面积。
发明内容
本公开旨在至少在一定程度上解决相关技术中的技术问题之一。
为此,本公开的目的在于提出一种乱序处理器中队列的队列项选择方法及装置,可以减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积。
本公开第一方面实施例提供一种乱序处理器中队列的队列项选择方法,方法包括:获取队列中各队列项的标签值;根据各所述队列项的标签值,生成所述队列的掩码位向量;根据所述队列中各所述队列项的指示信息,生成所述队列的可执行位向量,所述指示信息用于指示所述队列项是否满足可执行条件;根据所述掩码位向量和所述可执行位向量,生成所述队列的选择位向量;将所述选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,所述目标位为所述选择位向量中首个对应值为第一预设值的位。
根据本公开实施例的乱序处理器中队列的队列项选择方法,通过获取队列中各队列项的标签值,根据各队列项的标签值,生成队列的掩码位向量,根据队列中各队列项的指示信息,生成队列的可执行位向量,指示信息用于指示队列项是否满足可执行条件,根据掩码位向量和可执行位向量,生成队列的选择位向量,将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位,能够减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积。
本公开第二方面实施例提供一种乱序处理器中队列的队列项选择装置,所述装置包括:标签值获取模块,用于获取队列中各队列项的标签值;第一生成模块,用于根据各所述队列项的标签值,生成所述队列的掩码位向量;第二生成模块,用于根据所述队列中各所述队列项的指示信息,生成所述队列的可执行位向量,所述指示信息用于指示所述队列项是否满足可执行条件;第三生成模块,用于根据所述掩码位向量和所述可执行位向量,生成所述队列的选择位向量;队列项确定模块,用于将所述选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,所述目标位为所述选择位向量中首个对应值为第一预设值的位。
根据本公开实施例的乱序处理器中队列的队列项选择装置,通过获取队列中各队列项的标签值,根据各队列项的标签值,生成队列的掩码位向量,根据队列中各队列项的指示信息,生成队列的可执行位向量,指示信息用于指示队列项是否满足可执行条件,根据掩码位向量和可执行位向量,生成队列的选择位向量,将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位,能够减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积。
本公开第三方面实施例提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行如上述实施例所述的乱序处理器中队列的队列项选择方法。
本公开第四方面实施例提供一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行如上述实施例所述的乱序处理器中队列的队列项选择方法。
本公开第五方面实施例提供一种计算机程序,包括计算机程序,所述计算机程序在被处理器执行时实现如上述实施例所述的乱序处理器中队列的队列项选择方法的步骤。
本公开附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本公开的实践了解到。
附图说明
本公开上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为队列的首项、末项、队头、队尾以及队头标号和队尾标号的变化示意图;
图2为根据本公开一实施例所提供的一种乱序处理器中队列的队列项选择方法的流程示意图;
图3为根据本公开另一实施例所提供的一种乱序处理器中队列的队列项选择方法的流程示意图;
图4为根据本公开实施例提供的复位时的队列示意图;
图5为根据本公开实施例提供的队头标号和队尾标号都未翻转的队列示意图;
图6为根据本公开实施例提供的队尾标号翻转、队头标号未翻转的队列示意图;
图7为根据本公开实施例提供的队头标号和队尾标号都翻转后的队列示意图;
图8为根据本公开实施例提供的队尾标号再次发生翻转、队头标号还未再次翻转的队列示意图;
图9为根据本公开实施例提供的复位时的另一队列示意图;
图10为根据本公开实施例提供的队头标号和队尾标号都未翻转的另一队列示意图;
图11为根据本公开实施例提供的队尾标号翻转、队头标号未翻转的另一队列示意图;
图12为根据本公开实施例提供的队头标号和队尾标号都翻转后的另一队列示意图;
图13为根据本公开实施例提供的队尾标号再次发生翻转、队头标号还未再次翻转的另一队列示意图;
图14为根据本公开实施例提供的队列示意图;
图15为根据本公开实施例提供的多个位向量的示意图;
图16为根据本公开实施例提供的多个位向量的另一示意图;
图17 为根据本公开实施例提供的选择多项指令执行后的队列示意图;
图18为根据本公开施例提供的另一队列示意图;
图19为根据本公开实施例提供的多个位向量的另一示意图;
图20为根据本公开实施例提供的多个位向量的另一示意图;
图21为根据本公开实施例提供的选择多项指令执行后的另一队列示意图;
图22为根据本公开一实施例所提供的一种乱序处理器中队列的队列项选择装置的结构示意图;
图23为用于实现本公开实施例的乱序处理器中队列的队列项选择方法的示例性电子设备的框图。
具体实施方式
下面详细描述本公开的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本公开,而不能理解为对本公开的限制。
可以理解的是,乱序处理器中的乱序队列包括重定序缓冲区(ROB,ReorderBuffer)、转移重定序队列(BRQ,Branch Queue)、取指目标队列(FTQ,Fetch TargetQueue)、发射队列(IQ,Issue Queue)、保留站(Reservation Station)、各级缓存的访问队列、缓存访问失效队列(MSHR,Miss Status Handling Register),写缓冲区(StoreBuffer)、一致性请求队列等。
乱序处理器的乱序队列需要维护指令的顺序。当乱序队列中有多条指令准备好(其中,指令“准备好”,指该指令满足执行条件),一般优先选择程序序上最早的指令执行,即采用最老指令优先(oldest-first)策略(其中,“最老”指令,指最早入队的指令),选择队列项中的指令执行,因此需要判断指令的先后顺序。这是考虑到越是老的指令,和它存在相关的指令也就越多,因此优先执行最老的指令,能够有效地提高处理器执行指令的并行度,而且最老的指令还占据着处理器中的硬件资源,包括其他的乱序队列等部件,越早地执行这些老的指令,就可以越早地释放这些硬件资源,供后面的指令使用。因此,需要在乱序队列的所有有效且准备好的指令中选择最老的指令,将该最老的指令所在的队列项作为可执行队列项。
乱序队列一般是循环队列,用队头和队尾来维护指令的顺序。队头项(即队头所在的队列项)的指令是队列中最老的指令,队尾项(即队尾所在的队列项)的上一项的指令是队列中最新的指令。对于进入队列的指令,从队尾开始分配可以进入的空项。对于选择乱序队列中的有效且准备好的指令执行,当乱序队列中有多项有效且准备好的指令待执行时,则从队头开始从乱序队列的有效且准备好的指令中选择最老的指令执行。
在循环队列中,指令按照从队列的首项到末项再到首项的顺序写入队列,随着指令写入队列,队尾项会在队列的各队列项中进行切换,随着指令从队列中退出,队头项会在队列的各队列项中进行切换。其中,在队头项和队尾项从队列的末项切换到首项的次数相同时,队头和队尾在同一个“面”上;在队尾项从队列的末项切换到首项的次数大于队头项从队列的末项切换到首项的次数时,队头和队尾不在同一个“面”上。
当队头和队尾在同一个“面”上时,有效的项(即有效的指令所在队列项)都存在于从队头到队尾的上一项之间,可以完全并行选择可执行队列项。因为从队列首项到队头上一项之间不存在有效的项,即只要并行的从队列的首项到末项间选择第一个有效且准备好的队列项,就可以从队列中选出可执行指令中最老的指令。具体可以生成一个位数为队列项数(即队列中包括的队列项的数量)的有效且准备好的位向量(本公开实施例中简称有效准备位向量),从该位向量中找到第一个1,则第一个1对应的队列项就是有效且准备好的指令中最老的指令所在队列项。其中,需要说明的是,本公开各实施例中的“从a项到b项之间”,均包括a项、b项以及a项与b项之间的各项)。其中,有效且准备好的位向量中的每一位,表示对应队列项是否有效且准备好,每一位的值,通过对应队列项的有效位的值与准备好位的值的按位与操作得到。
当队头和队尾不在同一个“面”上时,有效的项是从队头到队列末项之间的项,再加上从队列首项到队尾上一项之间的项。可执行队列项的选择需要分两步,即从队头到队列末项之间的可执行队列项的选择和从队列首项到队尾上一项之间的可执行队列项的选择。当从队头到队列末项中没有选出可执行队列项时,再从队列首项到队尾上一项中选择可执行队列项,因此选择可执行队列项的操作不能完全并行,必须把两步串行起来。具体需要生成一个位数为队列项数的有效且准备好的位向量,先从该位向量的对应队头到队列末项之间的位找第一个1,当位向量中对应队头到末项之间的位不存在1时,再从该位向量的对应首项到队尾上一项之间的位找第一个1,才可以找到有效且准备好的指令中最老的指令所在的队列项,可执行队列项选择的代价和延迟大。
参考图1,以乱序队列包括8个队列项(entry)为例,本公开实施例中可以将各队列项按照从首项到末项的顺序依次标号为0到7之间的整数,并且,将队头所在队列项所对应的标号称为队头项对应的标号,也即队头标号(Head id),将队尾所在队列项所对应的标号称为队尾项对应的标号,也即队尾标号(Tail id)。队列的读取即选择可执行队列项,由队头标号开始选择。
初始化状态时,队列首项的标号最小,为0,而队列末项的标号最大,为7。指令从标号为0的队列项开始写入到队列中,因此队列中标号越小的队列项中的指令越老。队列的写入由队尾开始,队列的退出从队头开始,因此每条进入队列的指令在队列中的项的标号由队尾标号开始分配,队尾标号会重复地出现0、1、2、3、4、5、6、7。每次队尾标号翻转时(也就是7翻转到0),新的队尾标号的值和队头标号的值就出现了大小混乱的情况,即队尾标号的值在这时出现了小于队头标号的值的情况,有效指令从原来位于队头和队尾上一项之间,变成位于队头和末项之间,加上首项到队尾上一项之间,并且队头和末项之间的指令比首项到队尾上一项之间的指令更老。
具体的,队列的队尾标号和队头标号在复位状态时都是0,这是最初始的状态,当有新的指令写入到队列中时,队尾标号会增加。参考图1的左图所示的队列中被写入7条指令后的队列示意图,此时队头项和队尾项从队列的末项切换到首项的次数均为0,队尾标号和队头标号的翻转次数也都为0,队头和队尾处于同一个“面”上,此时的队列中,如图1的左图的阴影部分所示,有效的指令位于从队头项到队尾项的上一项之间,标号越小的指令会更老。这种情况下,可执行队列项的选择可以完全并行。
随着时间的推移,如图1的中间图所示,在图1的左图所示的基础上,队列中从队头开始有两条指令退出了,同时又有两条指令进入了队列,此时队尾标号发生了翻转,变为了1,而队头标号没有翻转,变为了2。如图1的中间图的阴影部分所示,此时队列中有效的指令位于从队头到末项之间,加上从首项到队尾上一项之间,标号越小的指令已不再是老的指令了,老的指令的顺序是从队头项到末项,再从首项到队尾上一项。这种情况下,可执行队列项的选择不能完全并行,必须要分两步串行完成,先从队头项到末项之间选择可执行队列项,如果该部分没有选出可执行队列项,再从首项到队尾上一项之间选择可执行队列项。
随着时间再次推移,如图1的右图所示,在图1的中间图所示的基础上,从队头开始又有7条指令退出了,同时队列中又写入了6条指令,此时的队尾标号变为了7,而队头标号变为了1,队头标号发生了翻转,此时队头项和队尾项从队列的末项切换到首项的次数均为1,队尾标号和队头标号的翻转次数也都为1,队头和队尾又都到了同一个“面”上,此时的队列中,如图1的右图的阴影部分所示,有效的指令又位于从队头到队尾上一项之间,队列中标号越小的指令会更老。可见这种情况可执行队列项的选择又可以完全并行。
由于上述图1的中间图所示的队头和队尾不在同一个“面”上的情况的存在,因此乱序处理器中乱序队列的队列项的选择不能完全并行处理,存在延时,处理器的性能较差,而且耗费比较多的功耗和面积,从而亟需一种低延迟、低功耗、面积小的乱序队列的队列项选择方法,以实现可完全并行的高效的从乱序队列中选择可执行队列项。
本公开实施例提供一种乱序处理器中队列的队列项选择方法及装置,可以减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积。
下面参照附图描述本公开实施例提出的乱序处理器中队列的队列项选择方法及装置。
需要说明的是,本公开各实施例以乱序队列中包括N个队列项,各队列项依次标号为0到N-1之间的整数为例进行说明。其中,指令可以从第0项(即标号为0的队列项)向第N-1项(即标号为N-1的队列项)写入队列,也可以从第N-1项向第0项写入队列,即各队列项可以按照从首项到末项的顺序依次标号为0到N-1之间的整数,也可以按照从末项到首项的顺序依次标号为0到N-1之间的整数,本公开对此不作限制。本公开各实施例以指令从第0项向第N-1项写入队列,即各队列项按照从首项到末项的顺序依次标号为0到N-1之间的整数为例进行说明。
其中,初始化状态时,队列为空,队头标号和队尾标号相同,均为0。
队列写入时从队尾开始,连续写入,每条写入指令在队列中的位置从队尾开始分配,其中,在队列未全满时,队尾标号为下一次将要写入的第一个空项标号;在队列满时,队尾标号和队头标号相同。
乱序处理器中最老的项为队头项,其中,最老的项指最老的指令所在的队列项。对于选择队列中的有效且准备好的指令执行,当队列中有多项有效且准备好的指令待执行时,则从队头开始从队列的有效且准备好的指令中选择最老的指令执行。当队头的指令退出后,队头标号切换为下一个最老的项的标号。
在复位状态时,设置队列的队头标号和队尾标号相同,即为复位项的标号,复位项为队列的任一项。当复位项为0时,即为初始化状态。在队头标号和队尾标号复位时,将队列中所有队列项的有效位(valid)域均置为无效。
当新指令进入到队列中时,将指令的相关信息写入指令所在队列项的各个对应域中,并将所在队列项的有效位(valid)域置为有效,此时队尾标号切换为下一个将要写入的项的标号。
下面将参照附图描述本公开实施例提出的乱序处理器中队列的队列项选择方法。
图2为本公开一实施例所提供的一种乱序处理器中队列的队列项选择方法的流程示意图。
如图2所示,该乱序处理器中队列的队列项选择方法包括以下步骤:
步骤201,获取队列中各队列项的标签值。
其中,队列,指乱序处理器中的乱序队列。
本公开实施例中,可以在队列中增加队列项的标签(TAG)域,标签域中存储队列中每个队列项的标签值。其中,每个队列项的标签值为预设的第一标签值或第二标签值。
其中,第一标签值和第二标签值均可以为1位的二进制值,且第一标签值和第二标签值的值相反。即第一标签值可以为0或1,第二标签值也可以为0或1,其中,在第一标签值为0时,第二标签值为1,在第一标签值为1时,第二标签值为0。
在本公开实施例中,当新指令进入到队列中时,可以将指令的相关信息写入指令所在队列项的各个对应域中,并将所在队列项的有效位域置为有效,并且,可以将对应的标签值写入该队列项的标签域中,此时队尾标号切换为下一个将要写入的项的标号。
其中,在初始化状态时,队列中各队列项的标签值相同,均为第一标签值。
在指令从第0项向第N-1项写入队列时,队头标号和队尾标号按照标号增加的方向(即0至N-1)切换到下一项,标号增加的方向上的指令越新。在队尾标号或队头标号切换到N-1之前,队尾进入项(可以理解为队尾分配进入的项)的标签值为第一标签值;当队尾标号或队头标号切换到N-1时,队尾标号的下一标号或队头标号的下一标号从0开始编码,且当队尾标号切换为N-1后,从队尾下一项(即队尾标号为0)起,队尾进入项的标签值从第一标签值翻转为第二标签值,比如从0翻转为1。
在指令从第N-1项向第0项写入队列时,队头标号和队尾标号按照标号减小的方向(即N-1至0)切换到下一项,标号减小的方向上的指令越新。在队尾标号或队头标号切换到0之前,队尾进入项的标签值为第一标签值;当队尾标号或队头标号切换到0时,队尾标号的下一标号或队头标号的下一标号从N-1开始编码,且当队尾标号切换到0后,从队尾下一项(即队尾标号为N-1)起,队尾进入项的标签值从第一标签值翻转为第二标签值,比如从0翻转为1。
步骤202,根据各队列项的标签值,生成队列的掩码位向量。
其中,掩码位向量,为由一些二进制位组成的向量,掩码位向量的位数为队列中队列项的数量N。
步骤203,根据队列中各队列项的指示信息,生成队列的可执行位向量,指示信息用于指示队列项是否满足可执行条件。
其中,每个队列项具有对应的指示信息,可以指示该队列项是否满足可执行条件。其中,每个队列项的指示信息,可以包括用于指示该队列项中指令是否有效的第一指示信息,以及用于指示该队列项状态是否满足执行条件的第二指示信息,在第一指示信息指示该队列项中指令有效,且第二指示信息指示该队列项状态满足执行条件时,该队列项满足可执行条件。
其中,每个队列项的第一指示信息,可以为该队列项的有效位的值,或者其它用于指示该队列项中指令是否有效的信息,本申请对此不作限制。每个队列项的第二指示信息,可以为该队列项的准备好位的值,或者该队列项中指令的准备好域的值,或者其它用于指示该队列项状态是否满足执行条件的信息,本申请对此不作限制。其中,某个队列项的有效位的值,可以通过判断该队列项中的指令是否有效得到。某个队列项的准备好位的值,可以通过判断该队列项状态是否满足执行条件得到。
作为一种可能的实现方式,在每个队列项的第一指示信息为该队列项的有效位的值,第二指示信息为该队列项的准备好位的值时,可以根据队列中各队列项的有效位的值和准备好位的值,生成队列的可执行位向量。
作为另一种可能的实现方式,在每个队列项的第一指示信息为该队列项的有效位的值,第二指示信息为该队列项中指令的准备好域的值时,可以根据队列中各队列项的有效位的值和队列的各指令中的准备好域的值,生成队列的可执行位向量。
其中,可执行位向量,为由一些二进制位组成的向量,可执行位向量的位数M,大于队列中队列项的数量N。可执行位向量中每个位的值,可以指示该位对应的队列项是否满足可执行条件。
具体的,在N为2的幂次时,M为N的2倍;在N不为2的幂次时,M为X的2倍,其中,X为大于N且最接近N的2的幂次数。
比如,在N=8时,则M为N的两倍,即M=16;在N=6,则M为X的2倍,其中,X为大于N且最接近N的2的幂次数,即X=8,相应的,M=8*2=16。
步骤204,根据掩码位向量和可执行位向量,生成队列的选择位向量。
其中,选择位向量,为由一些二进制位组成的向量,选择位向量的位数与可执行位向量的位数相同,即为M。
步骤205,将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位。
其中,第一预设值,具体可以为1。
在本公开实施例中,可以按照位数从低到高的顺序,从选择位向量中确定第一个对应值为1的目标位,并将目标位对应的队列项作为一个可执行队列项。
进一步的,在需要从队列中选择多个可执行队列项时,在执行步骤205之后,还可以将已确定的可执行队列项设置为不满足可执行条件,比如将已确定的可执行队列项的有效位的值置为无效,并跳转至步骤203,以通过重复执行步骤203-205来确定下一个可执行队列项,直至确定的所有可执行队列项的数量达到目标数量。其中,目标数量为需要从队列中选择的多个可执行队列项的数量。
由此,可以实现从队列中并行选择可执行队列项,从而减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度。
本公开实施例中,根据选择位向量,确定队列中的所有可执行队列项后,可以将可执行队列项中的指令退出队列,并将已退出指令所在的队列项的有效位域置为无效,即为0,并更新队头标号。其中,在已退出指令所在的队列项为队头项时,则队头项切换为下一个最老的项,队头标号更新为下一个最老的项的标号;在已退出指令所在的队列项不为队头项时,则队头项和队头标号不变,待后续队头移动到该指令退出项,再移动到下一个最老的项。
综上,本公开实施例提出的乱序处理器中队列的队列项选择方法,通过获取队列中各队列项的标签值,根据各队列项的标签值,生成队列的掩码位向量,根据队列中各队列项的指示信息,生成队列的可执行位向量,指示信息用于指示队列项是否满足可执行条件,根据掩码位向量和可执行位向量,生成队列的选择位向量,将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位,能够减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积。
下面结合图3,对本公开实施例提供的乱序处理器中队列的队列项选择方法进行进一步说明。
图3为本公开实施例所提供的另一种乱序处理器中队列的队列项选择方法的流程示意图。
如图3所示,该乱序处理器中队列的队列项选择方法包括以下步骤:
步骤301,获取队列中各队列项的标签值。
其中,各队列项具有对应的标号,本公开实施例以各队列项从首项到末项依次标号为0到N-1之间的整数为例进行说明。其中,N为队列中各队列项的数量。其中,N可以为2的幂次,或者N可以不为2的幂次,本公开对此不作限制。
可以理解的是,各队列项中的队尾项随指令写入队列进行切换,其中,在队尾项从队列的末项切换到首项时,队尾项对应的标号即队尾标号会进行翻转,即从N-1翻转到0。
作为一种可能的实现方式,队列中各队列项的标签值可以通过以下方式确定:在初始化状态时,确定各队列项的标签值为预设的第一标签值;在指令写入队列后,确定队尾项对应的标号的翻转次数;根据翻转次数,确定队列中各队列项的标签值。
其中,在翻转次数为0时,确定队列中各队列项的标签值为第一标签值;在翻转次数为奇数时,确定队列中目标队列项的标签值为预设的第二标签值;在翻转次数为除0外的其它偶数时,确定队列中目标队列项的标签值为第一标签值;其中,目标队列项,包括首项以及首项与队尾项之间的各队列项。
另外,在翻转次数为0时,可以确定队列中除目标队列项外的其它队列项的标签值为第一标签值,在翻转次数为除0外的其它偶数时,可以确定队列中除目标队列项外的其它队列项的标签值为第二标签值。
下面分别以N=8即N为2的幂次和N=6即N不为2的幂次为例,对本公开实施例中各队列项的标签值的确定方式进行说明。其中,以队列的首项到末项依次标号为0到7或5的二进制形式,第一标签值为0,第二标签值为1为例进行说明。其中,图5-13中的虚线框部分表示队列中的有效指令所在队列项。
参考图4,在N=8时,队列的队尾标号和队头标号在复位状态时均为标号0,即最初始的状态,各队列项的标签值为第一标签值0。
当有新的指令写入到队列中时,队尾标号会增加,队头项的指令退出后,队头标号会增加。
其中,当队列中写入和退出指令后,队尾标号和队头标号均未翻转即翻转次数为0时,有效指令在从队头标号到队尾标号上一项之间,各队列项的标签值均为第一标签值0。如图5所示,在队列中被写入和退出指令后,比如进入7条指令退出3条指令后,队尾标号变为111,队头标号变为011,此时队尾标号和队头标号都没有翻转过的情况。如图5虚线框部分所示,此时队列中从队头到队尾上一项之间的指令是有效的。队尾标号未发生翻转,队尾标号分配进入的指令所在队列项的标签域和队头项的标签域中的标签值都为第一标签值0。
进一步的,当队列中写入指令和队头指令退出后,队尾标号翻转1次、队头标号未翻转时,队尾标号翻转后写入指令的队列项(即目标队列项)的标签值为第二标签值1,除目标队列项外的其它队列项的标签值为第一标签值0,队头项的标签值为第一标签值0。如图6所示,在队列中被写入指令和队头指令退出后,比如再退出1条指令进入3条指令后,队头标号从011变为100,队尾标号已经达到标号111并翻转后变为010,此时队尾标号发生了1次翻转,队头标号没有翻转。队尾标号翻转后再从标号000开始写入指令的队列项的标签域的标签值置为第二标签值1,即队列项标号为000和001的两个队列项,标签域中的标签值由第一标签值0变为第二标签值1。队头标号还未发生翻转,队头项的标签域中的标签值为第一标签值0。
进一步地,当队列中写入指令和队头的指令退出后,队尾标号和队头标号均发生1次翻转时,队尾标号翻转后写入指令的队列项(即目标队列项)的标签值为第二标签值1,除目标队列项外的其它队列项的标签值为第一标签值0,队头项的标签值为第一标签值1。如图7所示,在队列中被写入指令和队头指令退出后,比如再退出5条指令进入3条指令后,队头标号已经达到标号111并发生翻转,即队头标号从100翻转后变为001,队尾标号从010变为101。由于队尾标号已经发生了1次翻转,则队尾标号翻转后再写入指令的队列项的标签值均为1,也就是说,刚进入的3条指令所在队列项,即标号为010、011、100三个队列项的标签值全部置为第二标签值1,此时队头标号也发生了翻转的情况,则队头项的标签值也为第二标签值1。
进一步地,当队列中写入指令和队头指令退出后,队尾标号再次翻转即翻转2次、队头标号未再次翻转即翻转1次时,队尾标号翻转后写入指令的队列项(目标队列项)的标签值为第一标签值0,除目标队列项外的其它队列项的标签值为第二标签值1,队头项的标签值为第二标签值1。如图8所示,在队列中被写入指令和队头指令退出后,比如再进入了6条指令退出3条指令后,队尾标号再次达到标号111并发生了翻转,队头标号还未再次发生翻转,即队尾标号从101翻转后变为011,队头标号从001变为100。由于队尾标号再次发生了翻转,翻转次数2为偶数,则队尾标号翻转后再从标号为000的队列项开始写入指令的各队列项的标签域的标签值置为第一标签值0,即标号为101、110和111的三个队列项的标签域的标签值置为第二标签值1,标号为000、001、010的三个队列项的标签域的标签值由第二标签值1变为第一标签值0。队头标号还未再次发生翻转,队头项的标签域的标签值为第二标签值1。
进一步地,当队列中写入指令和队头指令退出后,队尾标号和队头标号均再次翻转即翻转次数为2时,队尾标号翻转后写入指令的队列项(目标队列项)的标签值为第一标签值0,除目标队列项外的其它队列项的标签值为第二标签值1,队头项的标签值为第二标签值0。
参考图9,在N=6时,队列的队尾标号和队头标号在复位状态时均为标号0,即最初始的状态,各队列项的标签值为第一标签值0。
当有新的指令写入到队列中时,队尾标号会增加,队头项的指令退出后,队头标号会增加。
其中,当队列中写入和退出指令后,队尾标号和队头标号均未翻转即翻转次数为0时,有效指令在从队头标号到队尾标号上一项之间,各队列项的标签值均为第一标签值0。如图10所示,在队列中被写入和队头指令退出后,比如进入5条指令退出2条指令后,队头标号从000变为010,队尾标号从000变为101,此时队尾标号和队头标号都没有翻转过的情况。如图10虚线框部分所示,此时队列中从队头到队尾上一项之间的指令是有效的。队尾标号未发生翻转,队尾标号分配进入的指令所在队列项的标签域和队头项的标签域中的标签值都为第一标签值0。
进一步的,当队列中写入指令和队头指令退出后,队尾标号翻转1次、队头标号未翻转时,队尾标号翻转后写入指令的队列项(即目标队列项)的标签值为第二标签值1,除目标队列项外的其它队列项的标签值为第一标签值0,队头项的标签值为第一标签值0。如图11所示,队列中被写入指令和队头指令退出后,比如再进入3条指令退出1条指令后,队头标号从010变为011,队尾标号已经从标号101达到标号111并翻转后变为010,此时队尾标号发生了1次翻转,队头标号没有翻转。队尾标号翻转后再从标号000开始写入的指令所在队列项的标签域的标签值置为第二标签值1,即队列项标号为000和001的两个队列项,标签域中的标签值由第一标签值0变为第二标签值1。队头标号还未发生翻转,队头项的标签域中的标签值为第一标签值0。
进一步地,当队列中写入指令和队头的指令退出后,队尾标号和队头标号均发生1次翻转时,队尾标号翻转后写入指令的队列项(即目标队列项)的标签值为第二标签值1,除目标队列项外的其它队列项的标签值为第一标签值0,队头项的标签值为第一标签值1。如图12所示,在队列中被写入指令和队头指令退出后,比如再进入2条指令退出3条指令后,队头标号已经达到标号111并发生翻转,即队头标号从011翻转后变为000,队尾标号从010变为100。由于队尾标号已经发生了1次翻转,则队尾标号翻转后再写入指令的队列项的标签值均为1,也就是说,刚进入的2条指令所在队列项,即标号为010和011两个队列项的标签域的标签值全部置为第二标签值1,此时队头标号也发生了翻转的情况,则队头项的标签值也为第二标签值1。
进一步地,当队列中写入指令和队头指令退出后,队尾标号再次翻转即翻转2次、队头标号未再次翻转即翻转1次时,队尾标号翻转后写入指令的队列项(目标队列项)的标签值为第一标签值0,除目标队列项外的其它队列项的标签值为第二标签值1,队头项的标签值为第二标签值1。如图13所示,在队列中被写入指令和队头指令退出后,比如再进入4条指令退出3条指令后,队尾标号再次达到标号111并发生了翻转,队头标号还未再次发生翻转,即队尾标号从100翻转后变为010,队头标号从000变为011。由于队尾标号再次发生了翻转,翻转次数2为偶数,则队尾标号翻转后再从标号为000的队列项开始写入指令的各队列项的标签域的标签值置为第一标签值0,即标号为100和101的两个队列项的标签域的标签值置为第二标签值1,标号为000和001的两个队列项的标签域的标签值由第二标签值1变为第一标签值0。队头标号还未再次发生翻转,队头项的标签域的标签值为第二标签值1。
进一步地,当队列中写入指令和队头指令退出后,队尾标号和队头标号均再次翻转即翻转次数为2时,队尾标号翻转后写入指令的队列项(目标队列项)的标签值为第一标签值0,除目标队列项外的其它队列项的标签值为第二标签值1,队头项的标签值为第二标签值0。
步骤302,根据各队列项的标签值,生成队列的掩码位向量。
其中,掩码位向量的位数为N。
作为一种可能的实现方式,步骤302可以通过以下方式实现:确定各队列项中的队头项的标签值;对各队列项的标签值与队头项的标签值进行异或处理,得到各队列项的处理后标签值;根据各队列项的处理后标签值,生成队列的掩码位向量。
即如下公式所示,可以对队列从首项到末项各项的标签值与队头项的标签值做异或处理,得到位数为N的掩码位向量。
mask_vec[N-1:0] = TAG[N-1:0] XOR {N’b{TAG[Head id]}}
其中,mask_vec[N-1:0]表示掩码位向量的第0位到第N-1位的值;TAG[N-1:0]表示第0个到第N-1个队列项的标签域的标签值;b{TAG[Head id]}表示队头项的标签域的标签值;N’表示N个;“XOR”表示异或操作。
在本申请实施例中,以每个队列项的指示信息包括有效位的值和准备好位的值为例,可以通过以下步骤303-304所示的方式,实现根据队列中各队列项的有效位的值和准备好位的值,生成队列的可执行位向量。
步骤303,对各队列项的有效位的值和准备好位的值按位进行与操作,得到位数为N的有效准备位向量。
其中,某个队列项的准备好位的值,可以通过判断该队列项状态是否满足执行条件得到;某个队列项的有效位的值,可以通过判断该队列项中的指令是否有效得到。
如下公式所示,可以对队列中各队列项的有效位的值与准备好位的值按位进行与操作,得到位数为N的有效准备位向量。
valid_rdy_vec[N-1:0] = valid[N-1:0] & rdy[N-1:0]
其中,valid_rdy_vec[N-1:0]表示有效准备位向量的第0位到第N-1位的值;valid[N-1:0]表示第0到第N-1个队列项的有效位的值;rdy[N-1:0]表示第0到第N-1个队列项的准备好位的值;“&”表示与操作。
需要说明的是,本实施例以队列中存在有效位和准备好位为例进行说明,在队列中不存在有效位和/或准备好位的情况下,可以根据队列中各队列项的其它形式的第一指示信息和第二指示信息,生成N位的有效准备位向量。比如,可以对各队列项的有效位的值和对应指令中准备好域的值进行与操作,得到位数为N的有效准备位向量。
步骤304,根据有效准备位向量,生成位数为M的可执行位向量。
其中,在N为2的幂次时,M为N的2倍;在N不为2的幂次时,M为X的2倍,其中,X为大于N且最接近N的2的幂次数。
作为一种可能的实现方式,步骤304可以通过以下方式实现:将有效准备位向量的各位的值,分别作为可执行位向量的第0位到第N-1位的值以及第M/2位到第M/2+N-1位的值,得到可执行位向量;其中,在N不为2的幂次时,可执行位向量的除第0位到第N-1位和第M/2位到第M/2+N-1位之外的其它位的值为第二预设值。
其中,第二预设值具体可以为0。
具体的,在N为2的幂次时,可执行位向量从第0位到第N-1位的值,为队列的有效准备位向量对应队列首项到末项的值;可执行位向量从第N位到第2N-1位的值,为复制有效准备位向量对应队列首项到末项的值。
在N不为2的幂次时,可执行位向量从第0位到第N-1位的值,为队列的有效准备位向量对应队列首项到末项的值;可执行位向量的从第M/2位到第M/2+N-1位的值,为复制有效准备位向量对应队列首项到末项的值,可执行位向量的其它位的值为0。
即,步骤304可以通过如下公式所示的方式实现:
exc_vec[N-1:0] = valid_rdy_vec[N-1:0]
exc_vec[M/2+N-1:M/2] = valid_rdy_vec[N-1:0]
exc_vec[M/2-1:N] = {(M/2-N)’b{0}}
exc_vec[M-1:M/2+N] = {(M/2-N)’b{0}}
其中,exc_vec[N-1:0]表示可执行位向量从第0位到第N-1位的值;exc_vec[M/2+N-1:M/2]表示可执行位向量从第M/2位到第M/2+N-1位的值;exc_vec[M/2-1:N]表示可执行位向量从第N位到第M/2-1位的值;exc_vec[M-1:M/2+N]表示可执行位向量从第M/2+N位到第M-1位的值;b{0}表示第二预设值;(M/2-N)’表示(M/2-N)个。
步骤305,根据掩码位向量和可执行位向量,生成队列的选择位向量。
作为一种可能的实现方式,步骤305可以通过以下方式实现:
对掩码位向量按位进行取反操作,并对取反后的第0位到第N-1位的值与可执行位向量的第0位到第N-1位的值按位进行与操作,将与操作后的N个位的值作为选择位向量的第0位到第N-1位的值;将可执行位向量的第N位到第M-1位的值,作为选择位向量的第N位到第M-1位的值;根据选择位向量的第0位到第N-1位的值以及选择位向量的第N位到第M-1位的值,生成选择位向量。
即步骤305可以通过如下公式所示的方式实现:
select_vec[N-1:0] = exc_vec[N-1:0] & ~mask_vec[N-1:0]
select_vec[M-1:N] = exc_vec[M-1:N]
其中,select_vec[N-1:0]表示选择位向量的第0位到第N-1位的值;select_vec[M-1:N]表示选择位向量的第N位到第M-1位的值;exc_vec[M-1:N]表示执行位向量的第N位到第M-1位的值;“~”表示取反操作。
步骤306,将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位。
其中,第一预设值具体可以为1。
作为一种可能的实现方式,可以通过如下方式,确定选择位向量中的目标位对应的队列项,并将该队列项确定为可执行队列项:对目标位进行位置编码,得到目标编码;删除目标编码中的最高位的值,得到处理后编码;将处理后编码作为可执行队列项标号,并将可执行队列项标号对应的队列项,确定为可执行队列项。
其中,可执行队列项标号,即可执行队列项对应的标号。
步骤307,判断可执行队列项的数量是否达到目标数量,若是,则执行步骤309,否则,执行步骤308。
其中,目标数量为需要从队列中选择的多个可执行队列项的数量,目标数量可以为1,也可以大于1,本公开对此不作限制。
步骤308,将有效准备位向量的与可执行队列项对应的位,置为无效,并跳转至根据有效准备位向量,生成位数为M的可执行位向量的步骤。
步骤309,将可执行队列项中的指令退出队列,并将已退出指令所在的队列项的有效位域置为无效,以及更新队头标号。
可以理解的是,在目标数量大于1时,执行一次步骤306后可执行队列项的数量未达到目标数量,则在执行步骤306之后,还可以将有效准备位向量的与可执行队列项对应的位,置为无效,并跳转至步骤304,以通过重复执行步骤304-306来确定下一个可执行队列项,直至确定的所有可执行队列项的数量达到目标数量,再将可执行队列项中的指令退出队列,并将已退出指令所在的队列项的有效位域置为无效,即为0,并更新队头标号。
下面分别以N=8即N为2的幂次和N=6即N不为2的幂次为例,对本公开实施例中从队列中选择可执行队列项的过程进行说明。其中,以队列的首项到末项依次标号为0到7或5的二进制形式,第一标签值为0,第二标签值为1为例进行说明。
其中,队列的每个队列项包括有效位valid域、准备好位rdy域、和数据data域等指令用到的信息域。其中,valid域中存储队列项的有效位的值,记录该队列项是否有效,例如本公开实施例定义valid为1表示有效,valid为0表示无效;rdy域中存储队列项的准备好位的值,记录该队列项中的指令和数据是否已准备好,例如本公开实施例定义rdy为1表示已准备好,即达到可执行的状态,rdy为0表示未准备好;data域记录该队列项的指令用到的命令、数据等信息。队列在选择可执行队列项执行的时候,选择队列中有效且准备好的指令中最老的指令执行。另外,本公开实施例中每个位向量的各个位的值按照位数从高到低的顺序表示。
参考图14,对于N=8的乱序队列,M为16。在8项的队列的每个队列项增加队列项的标签域,存储队列中每个队列项的标签值。本实施例中指令A、B、C、D分别已进入的标号为100、101、110、111的队列项以及未进入指令的标号为010和011的队列项的标签值为0,队尾标号已经从标号111翻转至标号000,指令E和指令F分别已进入的标号为000和001的队列项的标签值由0变为1,即各队列项的标签值为{00000011}。
参考图15,本公开实施例中,可以根据各队列项的标签值,生成队列的8位的掩码位向量mask_vec。具体的,可以按照如下方式,将队列从首项到末项的各项的标签值{00000011}与队头标号为100的队列项的标签值0做异或处理,得到8位的掩码位向量mask_vec。
mask_vec[7:0] = TAG[7:0] XOR {8’b{TAG[100]}} = {00000011} XOR{00000000} = {00000011}
并且,可以根据各队列项的有效位的值和准备好位的值,生成队列8位的有效准备位向量valid_rdy_vec。其中,有效准备位向量中的每个位的值表示队列每一项是否有效且准备好,valid_rdy_vec每项等于对应的有效位valid与准备好位rdy的与操作。由于队列中的指令A、B、C、D、E、F均处于有效状态,即这几条指令所在队列项的有效位均为1,从首项(第0项)到末项(第7项)的有效位向量为{11110011}(位向量的多个位的值按照位数从高到低的顺序表示),准备好位为1的指令表示指令已准备好,即指令A、B、D、E、F处于已准备好、可执行状态,从首项(第0项)到末项(第7项)的准备好位向量为{10110011}(位向量的多个位的值按照位数从高到低的顺序表示),则如下公式所示,有效准备位向量通过有效位向量与准备好位向量的按位与操作得到:
valid_rdy_vec[7:0] = valid[7:0] & rdy[7:0] = {11110011} & {10110011}= {10110011}。
进一步的,根据有效准备位向量,可以生成队列的M位的可执行位向量exc_vec。其中,由于N为8,为2的幂次,因此M为N的2倍,即M为16。具体的,按照下面的公式,可执行位向量exc_vec从第0位到第7位的值exc_vec[7:0],等于队列的有效准备位向量从第0位到第7位的值valid_rdy_vec {10110011},可执行位向量exc_vec从第8位到第15位的值exc_vec[15:8],为复制队列的有效准备位向量从第0位到第7位的值valid_rdy_vec{10110011},即队列的可执行位向量从第0位到第15位的值exc_vec[15:0]为{1011001110110011}。
exc_vec[7:0] = valid_rdy_vec[7:0] = {10110011}
exc_vec[15:8] = {10110011}
即:exc_vec[15:0] = {1011001110110011}
进一步的,可以根据掩码位向量和可执行位向量,生成队列的M=16位的选择位向量select_vec。具体的,按照如下公式,选择位向量的第0位到第7位的值select_vec[7:0],为可执行位向量exc_vec的第0位到第7位的值exc_vec[7:0]与8位的按位取反的掩码位向量mask_vec的第0位到第7位的值进行按位与操作,选择位向量的第8位到第15位的值select_vec[15:8],为复制可执行位向量的第8位到第15位的值exc_vec[15:8],从而得到16位的选择位向量。
select_vec[7:0]=exc_vec[7:0]&~mask_vec[7:0]={10110011}&~{00000011}={10110011}& {11111100} = {10110000}
select_vec[15:8] = exc_vec[15:8] = {10110011}
即:select_vec[15:0] = {1011001110110000}
进一步的,参考图15中的阴影部分,可以按照从低位到高位的顺序,从选择位向量select_vec{1011001110110000}中选择第一个1,该第一个1所在的位即为目标位,对该第一个1在选择位向量中的位置编码后可以得到目标编码0100,删除目标编码0100中的1位最高位的值0可以得到处理后编码100,处理后编码100即为从队列中选出的有效且准备好的指令中最老的指令所在队列项标号,也即可执行队列项标号,该队列项标号100对应的队列项即为可执行队列项,进而通过队列项选择得到指令有效且已经准备好的指令中最老的队列项标号100的指令A来执行。
以目标数量为2为例,进一步的,参考图16中阴影部分,可以将有效准备位向量valid_rdy_vec中已选择出来的指令的位,置为无效,即将有效准备位向量valid_rdy_vec的与标号100的队列项对应的位,置为无效,即置为0,从而得到更新后的有效准备位向量valid_rdy_vec = {10100011}。
进一步的,参考图16,可以根据更新后的有效准备位向量,再次生成队列的M位的可执行位向量。其中,按照下面的公式,可执行位向量exc_vec从第0位到第7位的值exc_vec[7:0],等于队列的有效准备位向量从第0位到第7位的值valid_rdy_vec {10100011},可执行位向量exc_vec从第8位到第15位的值exc_vec[15:8],为复制队列的有效准备位向量从第0位到第7位的值valid_rdy_vec{10100011},即队列的可执行位向量从第0位到第15位的值exc_vec[15:0]为{1010001110100011}。
exc_vec[7:0] = valid_rdy_vec[7:0] = {10100011}
exc_vec[15:8] = {10100011}
即:exc_vec[15:0] = {1010001110100011}
进一步的,可以根据掩码位向量和可执行位向量,生成队列的M=16位的选择位向量select_vec。具体的,按照如下公式,选择位向量的第0位到7位的值select_vec[7:0],为可执行位向量exc_vec的第0位到7位的值exc_vec[7:0]与8位的按位取反的掩码位向量mask_vec的第0位到第7位的值进行按位与操作,选择位向量的第8位到第15位的值select_vec[15:8],为复制可执行位向量的第8位到第15位的值exc_vec[15:8],从而得到16位的选择位向量。
select_vec[7:0]=exc_vec[7:0]&~mask_vec[7:0]={10100011}&~{00000011}={10100011}& {11111100} = {10100000}
select_vec[15:8] = exc_vec[15:8] = {10100011}
即:select_vec[15:0] = {1010001110100000}
进一步的,参考图16中的阴影部分,可以按照从低位到高位的顺序,从选择位向量select_vec{1010001110100000}中选择第一个1,该第一个1所在的位即为目标位,对该第一个1在选择位向量在的位置编码后可以得到目标编码0101,删除目标编码0101中的1位最高位的值0可以得到处理后编码101,处理后编码101即为从队列中选出的有效且准备好的指令中最老的指令所在队列项标号,也即可执行队列项标号,该队列项标号101对应的队列项即为可执行队列项,进而通过队列项选择得到指令有效且已经准备好的指令中最老的队列项标号101的指令B来执行。
综上,本实施例通过并行的方法可以选出两条执行的指令,分别为标号为100的队列项的指令A和标号为101的队列项的指令B。该两条指令退出队列后,可以将队头标号变为110,指令A和指令B所在队列项的有效位域置为0,从而得到如图17所示的队列。
参考图18,对于N=8的乱序队列,M为16。在6项的队列的每个队列项增加队列项的标签域,存储队列中每个队列项的标签值。本实施例中指令A已进入的标号为101的队列项以及未进入指令的标号为011、100的队列项的标签值为0,队尾标号已经从标号111翻转至标号000,指令B、C、D分别已进入的标号为000、001、101的队列项的标签值由0变为1,即各队列项的标签值为{000111}。
参考图19,本公开实施例中,可以根据各队列项的标签值,生成队列的6位的掩码位向量mask_vec。具体的,可以按照如下方式,将队列从首项到末项各项的标签值{000111}与队头标号为101的队列项的标签值0做异或处理,得到6位的掩码位向量mask_vec。
mask_vec[5:0]=TAG[5:0] XOR {6’b{TAG[101]}} = {000111} XOR {000000} ={000111}
并且,可以根据各队列项的有效位的值和准备好位的值,生成队列6位的有效准备位向量valid_rdy_vec。其中,有效准备位向量中的每个位的值,表示队列每一项是否有效且准备好,valid_rdy_vec每项等于有效位valid与准备好位rdy的与操作。由于队列中的指令A、B、C、D均处于有效状态,即这几条指令所在队列项的有效位均为1,从首项(第0项)到末项(第5项)的有效位向量为{100111},准备好位为1的指令表示指令已准备好,即指令A、C、D处于已准备好、可执行状态,从首项(第0项)到末项(第5项)的准备好位向量为{100110}(位向量的多个位的值按照位数从高到低的顺序表示),则如下公式所示,有效准备位向量通过有效位向量与准备好位向量的按位与操作得到:
valid_rdy_vec[5:0] = valid[5:0] & rdy[5:0] = {100111} & {100110} ={100110}。
进一步的,根据有效准备位向量,可以生成队列的M位的可执行位向量exc_vec。其中,由于N为6,不是2的幂次,最接近6的比6大2的幂次数为8,因此M为8的2倍,即M为16。具体的,按照下面的公式,可执行位向量exc_vec从第0位到第5位的值exc_vec[5:0],为队列的有效准备位向量从第0位到第5位的值valid_rdy_vec{100110},可执行位向量exc_vec从第8位到第13位的值exc_vec[13:8],为复制队列的有效准备位向量从第0位到第5位的值valid_rdy_vec{100110},且由于队列项数6不是2的幂次,exc_vec的其余位补0,即队列的可执行位向量从第0位到第15位的值exc_vec[15:0]为{0010011000100110}。
exc_vec[5:0] = valid_rdy_vec[5:0] = {100110}
exc_vec[13:8] = {100110}
exc_vec[7:6] = {00}
exc_vec [15:14] = {00}
即:exc_vec[15:0] = {0010011000100110}
进一步的,可以根据掩码位向量和可执行位向量,生成队列的M=16位的选择位向量select_vec。具体的,按照如下公式,选择位向量的第0位到第5位的值select_vec[5:0],为用可执行位向量exc_vec的第0位到第5位的值exc_vec[5:0]与6位的按位取反的掩码位向量mask_vec的第0位到第5位的值进行按位与操作,选择位向量的第6为到第15位的值select_vec[15:6],为复制可执行位向量的第6位到第15位的值exc_vec[15:6],从而得到16位的选择位向量。
select_vec[5:0] = exc_vec[5:0] & ~mask_vec[5:0] = {100110} & ~{000111} = {100110} & {111000} = {100000}
select_vec[15:6] = exc_vec[15:6] = {0010011000}
即:select_vec[15:0] = {0010011000100000}
进一步的,参考图19中的阴影部分,可以按照从低位到高位的顺序,从选择位向量select_vec{0010011000100000}中选择第一个1,该第一个1所在的位即为目标位,并对该第一个1在选择位向量中的位置编码后可以得到目标编码0101,删除目标编码0101中的1位最高位的值0可以得到处理后编码101,处理后编码101即为从队列中选出的有效且准备好的指令中最老的指令所在队列项标号,也即可执行队列项标号,该队列项标号101对应的队列项即为可执行队列项,进而通过队列项选择得到指令有效且已经准备好的指令中最老的队列项标号101的指令A来执行。
以目标数量为2为例,进一步的,参考图20中阴影部分,可以将有效准备位向量valid_rdy_vec中已选择出来的指令的位,置为无效,即将有效准备位向量valid_rdy_vec的与标号101的队列项对应的位,置为无效,即置为0,从而得到更新后的有效准备位向量valid_rdy_vec = {000110}。
进一步的,参考图20,可以根据更新后的有效准备位向量,再次生成队列的M位的可执行位向量。其中,按照下面的公式,可执行位向量exc_vec的第0位到第5位的值exc_vec[5:0],等于队列的有效准备位向量从第0位到第5位的值valid_rdy_vec{000110},可执行位向量exc_vec从第8位到第13位的值exc_vec[13:8],为复制队列的有效准备位向量从第0位到第5位的值valid_rdy_vec{000110},且由于队列项数6不是2的幂次,exc_vec的其余位补0,即队列的可执行位向量从第0位到第15位的值exc_vec[15:0]为{0000011000000110}。
exc_vec[5:0] = valid_rdy_vec[5:0] = {000110}
exc_vec[13:8] = {000110}
exc_vec[7:6] = {00}
exc_vec[15:14] = {00}
即:exc_vec[15:0] = {0000011000000110}
进一步的,可以根据掩码位向量和可执行位向量,生成队列的M=16位的选择位向量select_vec。具体的,按照如下公式,选择位向量的第0位到第5位的值select_vec[5:0],为用可执行位向量exc_vec的第0位到第5位的值exc_vec[5:0]与6位的按位取反的掩码位向量mask_vec的第0位到第5位的值进行按位与操作,选择位向量的第6位到第15位的值select_vec[15:6],为复制可执行位向量的第6位到第15位的值exc_vec[15:6],从而得到16位的选择位向量。
select_vec[5:0] = exc_vec[5:0] & ~mask_vec[5:0] = {000110} & ~{000111} = {000110} & {111000} = {000000}
select_vec[15:6] = exc_vec[15:6] = {0000011000}
即:select_vec[15:0] = {0000011000000000}
进一步的,参考图20中的阴影部分,可以按照从低位到高位的顺序,从选择位向量select_vec{0000011000000000}中选择第一个1,该第一个1所在的位即为目标位,对该第一个1在选择位向量中的位置编码后可以得到目标编码1001,删除目标编码1001中的1位最高位的值1可以得到处理后编码001,处理后编码001即为从队列中选出的有效且准备好的指令中最老的指令所在队列项标号,也即可执行队列项标号,该队列项标号001对应的队列项即为可执行队列项,进而通过队列项选择得到指令有效且已经准备好的指令中最老的队列项标号001的指令C来执行。
综上,本实施例通过并行的方法可以选出两条执行的指令,分别为标号为101的队列项的指令A和标号为001的队列项的指令C。该两条指令退出队列后,可以将队头标号变为000,指令A和指令C所在队列项的有效位域置为0,从而得到如图21所示的队列。
综上,通过在队列项中增加标签域,复制队列的有效准备位向量来生成可执行位向量,并通过队列项的标签值与队头项的标签值异或产生掩码位向量,根据掩码位向量和可执行位向量,生成队列的选择位向量,可以在队头和队尾不在同一个“面”(即队头和队尾所在队列项的标签值不相同)的情况下,掩码掉可执行位向量的对应从队列首项到队尾上一项之间的位得到选择位向量,从而实现通过在选择位向量中选出第一个对应值为第一预设值的目标位,再根据该目标位得到有效且准备好的指令中最老的指令所在队列项标号。由此,实现了可执行队列项的并行选择,降低选择的复杂度,从而减小选择的延时,有效提高了乱序处理器的性能、降低功耗、节约面积。
与上述图2至图21实施例提供的乱序处理器中队列的队列项选择方法相对应,本公开还提供一种乱序处理器中队列的队列项选择装置,由于本公开实施例提供的乱序处理器中队列的队列项选择装置与上述图2至图21实施例提供的乱序处理器中队列的队列项选择方法相对应,因此在乱序处理器中队列的队列项选择方法的实施方式也适用于本公开实施例提供的乱序处理器中队列的队列项选择装置,在本公开实施例中不再详细描述。
下面参照附图描述根据本公开实施例提出的乱序处理器中队列的队列项选择装置。
图22为本公开一实施例所提供的一种乱序处理器中队列的队列项选择装置的结构示意图。
如图22所示,该乱序处理器中队列的队列项选择装置2200,包括:
标签值获取模块2210,用于获取队列中各队列项的标签值;
第一生成模块2220,用于根据各队列项的标签值,生成队列的掩码位向量;
第二生成模块2230,用于根据队列中各队列项的指示信息,生成队列的可执行位向量,指示信息用于指示队列项是否满足可执行条件;
第三生成模块2240,用于根据掩码位向量和可执行位向量,生成队列的选择位向量;
队列项确定模块2250,用于将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位。
在本公开的一些实施例中,各队列项具有对应的标号,各队列项中的队尾项随指令写入队列进行切换,其中,在队尾项从队列的末项切换到首项时,队尾项对应的标号翻转;
其中,队列中各队列项的标签值通过以下方式确定:
在初始化状态时,确定各队列项的标签值为预设的第一标签值;
在指令写入队列后,确定队尾项对应的标号的翻转次数;
根据翻转次数,确定队列中各队列项的标签值。
在本公开的一些实施例中,根据翻转次数,确定队列中各队列项的标签值,包括:
在翻转次数为0时,确定队列中各队列项的标签值为第一标签值;
在翻转次数为奇数时,确定队列中目标队列项的标签值为预设的第二标签值;
在翻转次数为除0外的其它偶数时,确定队列中目标队列项的标签值为第一标签值;
其中,目标队列项,包括首项以及首项与队尾项之间的各队列项。
在本公开的一些实施例中,根据翻转次数,确定队列中各队列项的标签值,还包括:
在所述翻转次数为奇数时,确定所述队列中除所述目标队列项外的其它队列项的标签值为所述第一标签值;
在所述翻转次数为除0外的其它偶数时,确定所述队列中除所述目标队列项外的其它队列项的标签值为所述第二标签值。
在本公开的一些实施例中,第一生成模块2220,具体用于:
确定各队列项中的队头项的标签值;
对各队列项的标签值与队头项的标签值进行异或处理,得到各队列项的处理后标签值;
根据各队列项的处理后标签值,生成队列的掩码位向量。
在本公开的一些实施例中,每个队列项的指示信息包括有效位的值和准备好位的值;第二生成模块2230,具体用于:
根据队列中各队列项的有效位的值和准备好位的值,生成队列的可执行位向量。
在本公开的一些实施例中,各队列项依次标号为0到N-1之间的整数,N为队列中各队列项的数量;
第二生成模块2230,具体用于:
对各队列项的有效位的值和准备好位的值按位进行与操作,得到位数为N的有效准备位向量;
根据有效准备位向量,生成位数为M的可执行位向量;
其中,在N为2的幂次时,M为N的2倍;在N不为2的幂次时,M为X的2倍,其中,X为大于N且最接近N的2的幂次数。
在本公开的一些实施例中,第二生成模块2230,还用于:
将有效准备位向量的各位的值,分别作为可执行位向量的第0位到第N-1位的值以及第M/2位到第M/2+N-1位的值,得到可执行位向量;
其中,在N不为2的幂次时,可执行位向量的除第0位到第N-1位和第M/2位到第M/2+N-1位之外的其它位的值为第二预设值。
在本公开的一些实施例中,掩码位向量的位数为N;第三生成模块2240,具体用于:
对掩码位向量按位进行取反操作,并对取反后的第0位到第N-1位的值与可执行位向量的第0位到第N-1位的值按位进行与操作,将与操作后的N个位的值作为选择位向量的第0位到第N-1位的值;
将可执行位向量的第N位到第M-1位的值,作为选择位向量的第N位到第M-1位的值;
根据选择位向量的第0位到第N-1位的值以及选择位向量的第N位到第M-1位的值,生成选择位向量。
在本公开的一些实施例中,队列项确定模块2250,具有用于:
对目标位进行位置编码,得到目标编码;
删除目标编码中的最高位的值,得到处理后编码;
将处理后编码作为可执行队列项标号,并将可执行队列项标号对应的队列项,确定为可执行队列项。
在本公开的一些实施例中,乱序处理器中队列的队列项选择装置2220,还包括:
判断模块,用于判断可执行队列项的数量是否达到目标数量;
处理模块,用于在可执行队列项的数量未达到目标数量的情况下,将有效准备位向量的与可执行队列项对应的位,置为无效,并跳转至根据有效准备位向量,生成位数为M的可执行位向量的步骤,直至确定的可执行队列项的数量达到目标数量。
本公开实施例中提供的乱序处理器中队列的队列项选择装置,通过获取队列中各队列项的标签值,根据各队列项的标签值,生成队列的掩码位向量,根据队列中各队列项的指示信息,生成队列的可执行位向量,指示信息用于指示队列项是否满足可执行条件,根据掩码位向量和可执行位向量,生成队列的选择位向量,将选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,目标位为选择位向量中首个对应值为第一预设值的位,能够减少从队列中选择可执行队列项时的选择逻辑,降低选择的复杂度,从而减小选择的延时,有效提高乱序处理器的性能,并且降低功耗、节约面积。
为了实现上述实施例,本公开还提出一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如本公开前述实施例提出的乱序处理器中队列的队列项选择方法。
为了实现上述实施例,本公开还提出一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行如本公开前述实施例提出的乱序处理器中队列的队列项选择方法。
为了实现上述实施例,本公开还提出一种计算机程序产品,当计算机程序产品中的指令由处理器执行时,执行如本公开前述实施例提出的乱序处理器中队列的队列项选择方法。
图23示出了适于用来实现本公开实施方式的示例性电子设备的框图。图23显示的电子设备12仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图23所示,电子设备12以通用计算设备的形式表现。电子设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,存储器28,连接不同系统组件(包括存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics StandardsAssociation;以下简称:VESA)局域总线以及外围组件互连(Peripheral ComponentInterconnection;以下简称:PCI)总线。
电子设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被电子设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)30和/或高速缓存存储器32。电子设备12可以进一步包括其他可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图23未显示,通常称为“硬盘驱动器”)。
尽管图23中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(Compact Disc Read OnlyMemory;以下简称:CD-ROM)、数字多功能只读光盘(Digital Video Disc Read OnlyMemory;以下简称:DVD-ROM)或者其他光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本公开各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其他程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本公开所描述的实施例中的功能和/或方法。
电子设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该电子设备12交互的设备通信,和/或与使得该电子设备12能与一个或多个其他计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,电子设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local Area Network;以下简称:LAN),广域网(Wide Area Network;以下简称:WAN)和/或公共网络,例如因特网)通信。如图23所示,网络适配器20通过总线18与电子设备12的其他模块通信。应当明白,尽管图23中未示出,可以结合电子设备12使用其他硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现前述实施例中提及的乱序处理器中队列的队列项选择方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
需要说明的是,在本公开的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本公开的描述中,除非另有说明,“多个”的含义是两个或两个以上。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本公开的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本公开的实施例所属技术领域的技术人员所理解。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本公开各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。尽管上面已经示出和描述了本公开的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本公开的限制,本领域的普通技术人员在本公开的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (14)

1.一种乱序处理器中队列的队列项选择方法,其特征在于,所述方法包括:
获取队列中各队列项的标签值;
根据各所述队列项的标签值,生成所述队列的掩码位向量;
根据所述队列中各所述队列项的指示信息,生成所述队列的可执行位向量,所述指示信息用于指示所述队列项是否满足可执行条件;
根据所述掩码位向量和所述可执行位向量,生成所述队列的选择位向量;
将所述选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,所述目标位为所述选择位向量中首个对应值为第一预设值的位。
2.根据权利要求1所述的方法,其特征在于,各所述队列项具有对应的标号,各所述队列项中的队尾项随指令写入所述队列进行切换,其中,在所述队尾项从所述队列的末项切换到首项时,所述队尾项对应的标号翻转;
其中,所述队列中各队列项的标签值通过以下方式确定:
在初始化状态时,确定各所述队列项的标签值为预设的第一标签值;
在指令写入所述队列后,确定所述队尾项对应的标号的翻转次数;
根据所述翻转次数,确定所述队列中各所述队列项的标签值。
3.根据权利要求2所述的方法,其特征在于,所述根据所述翻转次数,确定所述队列中各所述队列项的标签值,包括:
在所述翻转次数为0时,确定所述队列中各所述队列项的标签值为所述第一标签值;
在所述翻转次数为奇数时,确定所述队列中目标队列项的标签值为预设的第二标签值;
在所述翻转次数为除0外的其它偶数时,确定所述队列中所述目标队列项的标签值为所述第一标签值;
其中,所述目标队列项,包括所述首项以及所述首项与所述队尾项之间的各所述队列项。
4.根据权利要求3所述的方法,其特征在于,所述根据所述翻转次数,确定所述队列中各所述队列项的标签值,还包括:
在所述翻转次数为奇数时,确定所述队列中除所述目标队列项外的其它队列项的标签值为所述第一标签值;
在所述翻转次数为除0外的其它偶数时,确定所述队列中除所述目标队列项外的其它队列项的标签值为所述第二标签值。
5.根据权利要求1所述的方法,其特征在于,所述根据各所述队列项的标签值,生成所述队列的掩码位向量,包括:
确定各所述队列项中的队头项的标签值;
对各所述队列项的标签值与所述队头项的标签值进行异或处理,得到各所述队列项的处理后标签值;
根据各所述队列项的处理后标签值,生成所述队列的掩码位向量。
6.根据权利要求1-5中任一项所述的方法,其特征在于,每个所述队列项的指示信息包括第一指示信息和第二指示信息,所述第一指示信息用于指示该队列项中指令是否有效,所述第二指示信息用于指示该队列项状态是否满足执行条件,在所述第一指示信息指示该队列项中指令有效,且所述第二指示信息指示该队列项状态满足执行条件时,该队列项满足可执行条件,其中,所述第一指示信息为该队列项的有效位的值,所述第二指示信息包括该队列项的准备好位的值;
所述根据所述队列中各所述队列项的指示信息,生成所述队列的可执行位向量,包括:
根据所述队列中各所述队列项的有效位的值和准备好位的值,生成所述队列的可执行位向量。
7.根据权利要求6所述的方法,其特征在于,各所述队列项依次标号为0到N-1之间的整数,N为所述队列中各所述队列项的数量;
所述根据所述队列中各所述队列项的有效位的值和准备好位的值,生成所述队列的可执行位向量,包括:
对各所述队列项的有效位的值和准备好位的值按位进行与操作,得到位数为N的有效准备位向量;
根据所述有效准备位向量,生成位数为M的可执行位向量;
其中,在N为2的幂次时,M为N的2倍;在N不为2的幂次时,M为X的2倍,其中,X为大于N且最接近N的2的幂次数。
8.根据权利要求7所述的方法,其特征在于,所述根据所述有效准备位向量,生成位数为M的可执行位向量,包括:
将所述有效准备位向量的各位的值,分别作为所述可执行位向量的第0位到第N-1位的值以及第M/2位到第M/2+N-1位的值,得到所述可执行位向量;
其中,在所述N不为2的幂次时,所述可执行位向量的除所述第0位到第N-1位和所述第M/2位到第M/2+N-1位之外的其它位的值为第二预设值。
9.根据权利要求8所述的方法,其特征在于,所述掩码位向量的位数为N;所述根据所述掩码位向量和所述可执行位向量,生成所述队列的选择位向量,包括:
对所述掩码位向量按位进行取反操作,并对取反后的第0位到第N-1位的值与所述可执行位向量的第0位到第N-1位的值按位进行与操作,将与操作后的N个位的值作为所述选择位向量的第0位到第N-1位的值;
将所述可执行位向量的第N位到第M-1位的值,作为所述选择位向量的第N位到第M-1位的值;
根据所述选择位向量的第0位到第N-1位的值以及所述选择位向量的第N位到第M-1位的值,生成所述选择位向量。
10.根据权利要求9所述的方法,其特征在于,所述将所述选择位向量中的目标位对应的队列项,确定为可执行队列项,包括:
对所述目标位进行位置编码,得到目标编码;
删除所述目标编码中的最高位的值,得到处理后编码;
将所述处理后编码作为可执行队列项标号,并将所述可执行队列项标号对应的队列项,确定为所述可执行队列项。
11.根据权利要求7所述的方法,其特征在于,所述将所述选择位向量中的目标位对应的队列项,确定为可执行队列项之后,还包括:
判断所述可执行队列项的数量是否达到目标数量;
若否,则将所述有效准备位向量的与所述可执行队列项对应的位,置为无效,并跳转至根据所述有效准备位向量,生成位数为M的可执行位向量的步骤,直至确定的所述可执行队列项的数量达到所述目标数量。
12.一种乱序处理器中队列的队列项选择装置,其特征在于,所述装置包括:
标签值获取模块,用于获取队列中各队列项的标签值;
第一生成模块,用于根据各所述队列项的标签值,生成所述队列的掩码位向量;
第二生成模块,用于根据所述队列中各所述队列项的指示信息,生成所述队列的可执行位向量,所述指示信息用于指示所述队列项是否满足可执行条件;
第三生成模块,用于根据所述掩码位向量和所述可执行位向量,生成所述队列的选择位向量;
队列项确定模块,用于将所述选择位向量中的目标位对应的队列项,确定为可执行队列项,其中,所述目标位为所述选择位向量中首个对应值为第一预设值的位。
13.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-11中任一项所述的方法。
14.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行权利要求1-11中任一项所述的方法。
CN202310017030.2A 2023-01-06 2023-01-06 乱序处理器中队列的队列项选择方法及装置 Active CN115904508B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310017030.2A CN115904508B (zh) 2023-01-06 2023-01-06 乱序处理器中队列的队列项选择方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310017030.2A CN115904508B (zh) 2023-01-06 2023-01-06 乱序处理器中队列的队列项选择方法及装置

Publications (2)

Publication Number Publication Date
CN115904508A CN115904508A (zh) 2023-04-04
CN115904508B true CN115904508B (zh) 2023-05-05

Family

ID=85746671

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310017030.2A Active CN115904508B (zh) 2023-01-06 2023-01-06 乱序处理器中队列的队列项选择方法及装置

Country Status (1)

Country Link
CN (1) CN115904508B (zh)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111966406B (zh) * 2020-08-06 2021-03-23 北京微核芯科技有限公司 乱序处理器中乱序执行队列的调度方法和装置
CN113805944B (zh) * 2021-11-18 2022-02-25 北京微核芯科技有限公司 乱序处理器中乱序执行队列多指令的分配执行方法和装置
CN114546497B (zh) * 2022-04-26 2022-07-19 北京微核芯科技有限公司 乱序处理器中队列的访问方法及装置

Also Published As

Publication number Publication date
CN115904508A (zh) 2023-04-04

Similar Documents

Publication Publication Date Title
KR102659813B1 (ko) 레지스터 리네이밍을 사용한 무브 명령어 처리
US20120005444A1 (en) Microcode rename reclamation
CN204945992U (zh) 一种处理器
KR100626858B1 (ko) 단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템
US6553482B1 (en) Universal dependency vector/queue entry
US6308259B1 (en) Instruction queue evaluating dependency vector in portions during different clock phases
US6212622B1 (en) Mechanism for load block on store address generation
KR100286416B1 (ko) 여러운영체제기술에서볼수없는상이한데이터형연산을수행하는방법
WO2022100054A1 (zh) 调度乱序队列和判断队列取消项的方法和装置
JP3790039B2 (ja) 分岐予測調整方法
JP2006228241A (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
JP3760041B2 (ja) 分岐予測する情報処理装置
CN103620555A (zh) 抑制不正确的推测性执行路径上的控制转移指令
KR20000064488A (ko) 단일레지스터파일을이용하여부동점과압축데이터명령을실행하는방법및장치
US6260134B1 (en) Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US8806145B2 (en) Methods and apparatuses for improving speculation success in processors
JP2007087108A (ja) 演算処理装置,情報処理装置,及びレジスタファイルの制御方法
US6266763B1 (en) Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
US7000093B2 (en) Cellular automaton processing microprocessor prefetching data in neighborhood buffer
CN115867888A (zh) 用于利用主-影子物理寄存器文件的方法和系统
US6873184B1 (en) Circular buffer using grouping for find first function
CN115904508B (zh) 乱序处理器中队列的队列项选择方法及装置
KR102351200B1 (ko) 메모리 요청 정보에 기반하여 캐시 메모리의 클럭 속도/전압을 설정하는 장치 및 방법
US20070079109A1 (en) Simulation apparatus and simulation method
US7080170B1 (en) Circular buffer using age vectors

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
GR01 Patent grant
GR01 Patent grant