CN104317555B - Simd处理器中写合并和写撤销的处理装置和方法 - Google Patents
Simd处理器中写合并和写撤销的处理装置和方法 Download PDFInfo
- Publication number
- CN104317555B CN104317555B CN201410546093.8A CN201410546093A CN104317555B CN 104317555 B CN104317555 B CN 104317555B CN 201410546093 A CN201410546093 A CN 201410546093A CN 104317555 B CN104317555 B CN 104317555B
- Authority
- CN
- China
- Prior art keywords
- register
- mark
- instruction
- write
- data
- 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
Links
Landscapes
- Advance Control (AREA)
Abstract
本发明提供了一种SIMD处理器中写合并和写撤销的处理装置和方法,体系结构寄存器堆作为指令的操作数存储部件,连接到处理器的执行单元;标记表的输出连接到标记分派单元;标记分派单元从标记表中对当前需要写回寄存器的指令分派一个标记,该标记与已经进入流水线中的指令分派的标记不同,并输出连接到标记寄存器堆;译码逻辑产生的目的寄存器的写信号控制标记分派单元分派的标记写入标记寄存器堆。本发明能够提高SIMD结构处理器的执行效率,降低或几乎不增加编译器设计的复杂度。
Description
技术领域
本发明适用于处理器体系结构设计领域,涉及SIMD结构处理器中支持写合并和写撤销的指令结果写回逻辑的设计。
背景技术
目前处理器设计中,一方面处理指令集设计提供了更多的指令支持,如DSP处理器提供的乘累加指令、支持浮点计算的处理器提供的单精度浮点指令,甚至扩展精度浮点操作指令;另一方面为了提高处理器工作的主频,处理器的流水线被进一步细分,完成一条复杂指令的执行甚至需要十多级流水操作。为了提高处理器的指令执行效率,对指令的流水段划分会按照指令的功能分成不同长度的流水线,如寄存器传输、算术逻辑等简单操作指令具有较短的流水线长度,而浮点计算等复杂操作指令有较长的流水线。
对于SIMD结构的处理器,不同长度的流水线划分会导致以下冲突:
1.写资源冲突。流水线内的多条指令在同一拍提交执行指令执行结果,且指令写回的目的寄存器是SIMD结构中同一组寄存器或不同组寄存器,由于寄存器端口限制,每次只能一条指令写入寄存器,导致写资源冲突。
2.写后写冲突。由于指令周期数不同,会出现较短执行周期数指令先于较长执行周期指令将结果写回寄存器,导致执行结果错误。
一般静态流水线的处理器设计中,会检测指令的各类相关性,并将导致相关的后续指令停顿,待较老的指令执行完成后再解除较新指令的停顿。这样的结构设计方法,对与具有较长流水段的指令引起的多拍停顿,指令执行效率不高。另一方面,需要大量的相关检测逻辑来判断流水线中各指令的写操作,来避免冲突发生。尤其对于支持SIMD结构的处理器,根据并行度不同,一条指令的执行结果会对多个寄存器进行写操作,使得检测和解除相关的逻辑复杂度大幅增加。
发明内容
为了克服现有技术的不足,本发明提供一种SIMD处理器中写合并和写撤销的处理装置,能够提高SIMD结构处理器的执行效率,对于具有多并行度的SIMD结构处理器,本发明能有效减少由于不同流水线长度的指令执行结束提交结果时,由于各类冲突引起的流水线停顿周期数;本发明可以使得编译器对于背景中提到的几类指令冲突是透明的,降低或几乎不增加编译器设计的复杂度。
本发明解决其技术问题所采用的技术方案是:一种SIMD处理器写合并和写撤销的处理装置包括体系结构寄存器堆、标记寄存器堆、标记分派单元和一个标记表。
所述的体系结构寄存器堆作为指令的操作数存储部件,连接到处理器的执行单元;标记表的输出连接到标记分派单元;标记分派单元从标记表中对当前需要写回寄存器的指令分派一个标记,该标记与已经进入流水线中的指令分派的标记不同,并输出连接到标记寄存器堆;译码逻辑产生的目的寄存器的写信号控制标记分派单元分派的标记写入标记寄存器堆;
所述标记寄存器堆是体系结构寄存器堆的标记存储单元,与体系结构寄存器堆一一对应;标记寄存器用于当指令需要将数据写入寄存器时,在对应的标记寄存器上写入一个分配给当前执行指令的标记;
所述标记表中包含一个独立的标记和一组可分配的标记;所述独立标记表示寄存器不会被任何已进入执行单元的指令写入结果数据;所述标记表中的可分配标记由标记分派单元分配给进入执行单元的指令;可分配标记用来对流水的指令和寄存器进行标记;在寄存器的标记和指令携带的标记一致时,指令的结果数据才能写回寄存器。
所述体系结构寄存器堆包括W个寄存器,从0~(W-1)对寄存器依次索引;寄存器堆的访问索引为w位,W=2w;W个寄存器分成M组,每组N个寄存器,其中,N=2n,N为SIMD结构的最大并行度,表明组内包含的寄存器的数量;M=2m,M为寄存器堆的组数量;n,m都是非负整数,m+n=w;
所述体系结构寄存器堆中,寄存器访问的索引位宽为m+n位,m+n=w;其中,索引的(m+n-1,n)位为组选择信号,索引的(n-1,0)位为组内选择信号;寄存器的读操作根据指令的寄存器操作数索引,其中的高(m+n-1,n)位作为寄存器访问的组号,从寄存器堆中读出一组寄存器,再根据低位索引(n-1,0)位和并行度P将相应的数据放在数据总线上;寄存器的写操作同样由指令目的索引的高(m+n-1,n)位作为寄存器堆写回的组号,由低位索引(n-1,0)位和并行度P译码出相应的写使能信号,对组内的寄存器写入数据;
所述体系结构寄存器堆的物理访问和指令逻辑访问的映射关系是:寄存器堆的逻辑访问索引为w位,W=2w;所述SIMD处理器支持多种并行度P,其中P=2p,0≤p≤n;当访问的并行度为P时,由索引(w-1,p)位将寄存器堆逻辑地分成2(w-p)组,每组内包括P=2p个寄存器;对应到物理访问上,索引的(w-1,n)位为寄存器的逻辑组所在的物理寄存器组,索引的(n-1,p)位选择物理组内的P个寄存器作为指令的操作数。
本发明还提供了一种SIMD处理器写合并和写撤销的处理方法,包括以下步骤:
步骤1、判断当前指令是否写回寄存器堆,如果指令的执行结果需要写回寄存器堆,由所述标记分派单元为该指令分派一个标记;否则,标记分派单元不为指令分派标记;根据并行度不同,指令的结果会写回一个或一组体系结构寄存器,但是对当前指令仅分配一个标记;
步骤2、将分派的标记写入指令目的寄存器对应的标记寄存器中;
步骤3、指令携带分派的标记进入处理器执行单元,执行指令功能;
步骤4、指令执行结束写回体系结构寄存器时,将指令携带的标记与指令目的寄存器的标记进行比对,如果标记相同,将指令的执行结果写回寄存器,进入步骤5;否则,指令的执行结果不写回;
步骤5、如果寄存器写入,将对应的寄存器的标记清除。
所述步骤4包括以下步骤:
步骤4-1、从多个具有写回数据的流水段中按优先级由高到低选择一个写回的物理寄存器组的组号;
步骤4-2、根据4-1得到的组号,从标记寄存器堆读出该组寄存器的标记;读出的一组标记有N个,依次为tag0~tagN-1,N为最大并行度;
步骤4-3、从多个写回操作中,选择写回的寄存器数据,对结果数据总线进行重排,产生写回数据总线,并产生组内的写使能信号;
在步骤4-3中,首先将每个指令写回的数据总线进行复制;复制的方法是:数据总线的宽度为N个数据;如果并行度P=1,数据总线上第0个数据有效,将这个数据赋值到数据0~N-1上;如果并行度为P,数据总线上第0~P-1个数据有效,将这P个数据复制N/P份到数据P~N-1上;然后将多个写回指令携带的标记逐个分别与tag0~tagN-1进行比较,如果标记一致,就将该指令对应复制后的数据总线的第i个数据选择到写回数据总线上,并置该路数据的写使能信号为有效;否则,该路数据的写使能信号无效;写回数据总线位置和组内的寄存器的位置一一对应;
步骤4-4、按照对应数据和寄存器的位置对应关系,在写使能有效的情况下将数据写入寄存器内。
所述步骤5中,清除寄存器的标记的操作是将标记表中提到的一个独立的标记项写入标记寄存器中。
本发明的有益效果是:处理方法及结构适用于多周期流水线的写回处理,提高了写入的并发程度,减少的流水线的停顿;突破了传统处理器设计中每一个节拍仅允许一条指令执行结果写回的限制。本发明提供的方法和结构可用于处理器设计技术的改进,特别是SoC技术中处理器IP核的改进。
附图说明
图1是本发明实施实例指令译码的方法流程图;
图2是本发明实施实例写回操作合并和撤销的方法流程图。
具体实施方式
下面结合附图和实施例对本发明进一步说明,本发明包括但不仅限于下述实施例。
本发明提供一种SIMD结构处理器中指令执行结果写合并和写撤销的处理装置和方法。
所述SIMD处理器写合并和写撤销的处理装置包括:体系结构寄存器堆、标记寄存器堆、标记分派单元、一个标记表。
以上部件的连接关系为:体系结构寄存器堆作为指令的操作数存储部件,连接到处理器的执行单元。标记表的输出连接到标记分派单元。标记分派单元从标记表中选择一个标记,并输出连接到标记寄存器堆。译码逻辑产生的目的寄存器的写信号控制标记分派单元分派的标记写入标记寄存器堆。其中译码逻辑和执行单元为处理器内的通用部件,在本专利中不再赘述。
所述体系结构寄存器堆包括W个寄存器,从0~(W-1)对寄存器依次索引。寄存器堆的访问索引为w位,W=2w.所述寄存器堆的物理实现结构是:W个寄存器分成M组,每组N个寄存器。其中,N=2n,N为SIMD结构的最大并行度,表明组内包含的寄存器的数量;M=2m,M为寄存器堆的组数量;n,m都是非负整数,m+n=w。寄存器堆按照SIMD处理器的最大并行度N,将N个寄存器组成一组,整个寄存器堆分成M组。
所述SIMD结构处理器内的体系结构寄存器堆在实现上是按组访问。由上述寄存器堆的实现结构设计,寄存器访问的索引位宽为m+n位,m+n=w。其中,索引的(m+n-1,n)位为组选择信号,索引的(n-1,0)位为组内选择信号。寄存器的读操作根据指令的寄存器操作数索引,其中的高(m+n-1,n)位作为寄存器访问的组号,从寄存器堆中读出一组寄存器,再根据低位索引(n-1,0)位和并行度P将相应的数据放在数据总线上。寄存器的写操作同样由指令目的索引的高(m+n-1,n)位作为寄存器堆写回的组号,由低位索引(n-1,0)位和并行度P译码出相应的写使能信号,对组内的寄存器写入数据。
所述寄存器堆的物理访问和指令逻辑访问的映射关系是:寄存器堆的逻辑访问索引(即指令中出现的寄存器索引,同时该索引也是寄存器物理访问的索引)为w位,W=2w.所述SIMD处理器支持多种并行度P,其中P=2p,0≤p≤n.当访问的并行度为P时,由索引(w-1,p)位将寄存器堆逻辑地分成2(w-p)组,每组内包括P=2p个寄存器。对应到物理访问上,索引的(w-1,n)位为寄存器的逻辑组所在的物理寄存器组,索引的(n-1,p)位选择物理组内的P个寄存器作为指令的操作数。
从上述结构实现可以看出,所述寄存器堆的寄存器物理访问操作的最小单元是一组寄存器。当寄存器写入数据时,根据组内的写使能有效信号对组内全部或部分寄存器产生写操作。这种写操作的访问方式有利于实现SIMD结构的写合并和写撤销功能。
所述标记寄存器堆是体系结构寄存器堆的标记存储单元,与体系结构寄存器堆一一对应。标记寄存器用于当指令需要将数据写入寄存器时,在对应的标记寄存器上写入一个分配给当前执行指令的标记。
所述标记寄存器堆是结构寄存器,用户不可见。其物理实现结构和逻辑访问方式与体系结构寄存器堆的结构一致,在此不再重复说明。
所述标记分派单元的作用是对当前需要写回寄存器的指令分派一个标记。该标记与已经进入流水线中的指令分派的标记不同。
所述标记表中包含一个独立的标记和一组可分配的标记;所述独立标记表示寄存器不会被任何已进入执行单元的指令写入结果数据;所述标记表中的可分配标记由标记分派单元分配给进入执行单元的指令。可分配标记用来对流水的指令和寄存器进行标记。在寄存器的标记和指令携带的标记一致时,指令的结果数据才能写回寄存器。
所述标记表中可分配的标记的最少数量为执行和写回逻辑的流水段数量。本专利中不对标记的具体编码作权利要求。
为实现本发明的目的,专利还提供了一种SIMD处理器写合并和写撤销的处理方法。该方法包括以下步骤:
步骤1、判断当前指令是否写回寄存器堆,如果指令的执行结果需要写回寄存器堆,由所述标记分派单元为该指令分派一个标记;否则,标记分派单元不为指令分派标记。根据并行度不同,指令的结果会写回一个或一组体系结构寄存器,但是对当前指令仅分配一个标记。
步骤2、将分派的标记写入指令目的寄存器对应的标记寄存器中;
步骤3、指令携带分派的标记进入处理器执行单元,执行指令功能;
步骤4、指令执行结束写回体系结构寄存器时,将指令携带的标记与指令目的寄存器的标记进行比对,如果标记相同,将指令的执行结果写回寄存器;否则,指令的执行结果不写回。
步骤5、如果寄存器写入,将对应的寄存器的标记清除。
所述步骤5中,清除寄存器的标记的操作是将标记表中提到的一个独立的标记项写入标记寄存器中。
所述步骤4的处理步骤进一步描述为:
步骤4-1、从多个具有写回数据的流水段中按优先级由高到低选择一个写回的物理寄存器组的组号。
步骤4-2、根据4-1得到的组号,从标记寄存器堆读出该组寄存器的标记。读出的一组标记有N个,依次为tag0~tagN-1,N为最大并行度。
步骤4-3、从多个写回操作中,选择写回的寄存器数据,对结果数据总线进行重排,产生写回数据总线,并产生组内的写使能信号。
在步骤4-3中,首先将每个指令写回的数据总线进行复制。复制的方法是:数据总线的宽度为N个数据。如果并行度P=1,数据总线上第0个数据有效,将这个数据赋值到数据0~N-1上。如果并行度为P,数据总线上第0~P-1个数据有效,将这P个数据复制N/P份到数据P~N-1上。
然后将多个写回指令携带的标记逐个分别与tag0~tagN-1进行比较,如果标记一致,就将该指令对应复制后的数据总线的第i个数据选择到写回数据总线上,并置该路数据的写使能信号为有效;否则,该路数据的写使能信号无效。
写回数据总线位置和组内的寄存器的位置一一对应。
步骤4-4、按照对应数据和寄存器的位置对应关系,在写使能有效的情况下将数据写入寄存器内。
实施实例中优选的处理器模型的基本特征为:
下表所示是优选实例中寄存器堆的结构。寄存器堆中共有32×32个通用寄存器R,W=32,w=5,每个寄存位宽32位。寄存器堆的读端口有两个,分别对应指令集中的两个源操作数的读;写端口只有一个,用于指令将结果写回通用寄存器。
R3 | R2 | R1 | R0 |
R7 | R6 | R5 | R4 |
R11 | R10 | R9 | R8 |
R15 | R14 | R13 | R12 |
R19 | R18 | R17 | R16 |
R23 | R22 | R21 | R20 |
R27 | R26 | R25 | R24 |
R31 | R30 | R29 | R28 |
处理器结构采用哈佛结构设计,有独立的数据存储器和程序存储器。指令位宽为32位。处理器SIMD特征的并行度为P={1,2,4},0≤p≤2.P=1时,寄存器堆逻辑地分成2(5-0)=32组,每组20=1个寄存器;P=2时,寄存器堆逻辑地分成2(5-1)=16组,每组21=2个寄存器;P=4时,寄存器堆逻辑地分成2(5-2)=8组,每组22=4个寄存器。
寄存器堆的实现结构按照最大并行度划分,N=22,M=23,将4个寄存器组成一组,整个寄存器堆分成8组。
处理器的执行分为取指→译码→执行→写回四个周期。流水段划分为PF→FE→DC→EX1→EX2→EX3→EX4→EX5八个流水段。根据指令执行周期的不同,在EX1,EX3,EX5三个流水段内都有对应类型的指令执行结束,产生写回操作。
发明中所述的标记表的一个优选编码格式为:0000标记表示寄存器不会被任何已进入执行流水线的指令写入数据,该标记不会被标记分配单元分配给指令。DC段之后有5个流水段,设计了5个标记项1000,1001,1010,1011,1100用于标记分派单元分配给进入执行单元的指令。这5个标记项,在指令流水过程中由指令携带,当指令执行完成写回数据后,该标记被分派单元回收,因此5个标记按照轮转的方式分配给进入流水线的指令。
相应地,处理器硬件实现设置一个标记寄存器堆TAG,TAG寄存器与通用寄存器R一一对应。TAG中每个寄存器位宽为4位,用于存储上述标记。
寄存器标记值是允许覆盖的,在给目的寄存器分配标记值后,若该寄存器又有写入操作,则它的标记标记会被更新成和较新指令对应。
如图1的具体方法流程。按发明内容中所述的方法,结合实施实例中的SIMD结构处理器模型,具体的实施步骤详述如下:
步骤1、在译码阶段,如果处理的指令有寄存器写回操作,则由标记分派逻辑分配一个标记给指令,具体在本例中是分配一个非零标记。如指令ADDI R0,R4R8完成R0+R4→R8的定点加法操作,当指令进入DC译码时,指令要对寄存器完成数据写回操作,那么标记分配单元按轮转方式将标记表中的1000分配给ADDI指令。这里列举并行度为1的指令的标记分配,在本发明的方法中,标记的分配与并行度无关,对进入执行单元的指令分配唯一的一个标记。
步骤2、将分派的标记写入目的寄存器对应的标记寄存器中。步骤2的寄存器标记与并行度有关。按照指令的并行度,指令的逻辑目的寄存器组对应的标记寄存器都要写入步骤1为指令分配的标记。如ADDI(2)R0,R4R8指令的并行度为2,需要将标记1000写入目的寄存器组{R8,R9}对应的标记寄存器TAG[8]和TAG[9]中。按照发明内容中TAG寄存器的实现结构,TAG[8,9]属于标记寄存器堆的第2组,组内第0和第1路寄存器,那么第2组的写使能和组内第0路寄存器的写使能有效,将标记1000写入。
步骤3、指令携带标记发射到执行单元。在本例中,ADDI指令进入流水线的同时,标记1000随指令在执行流水线上流动。
如图2所示的写回操作合并和撤销操作流程。为方便说明实施过程,步骤4被进一步详细描述为以下步骤:
步骤4-1、从三个具有写回数据的流水段EX5、EX3、EX1上选择一个写回的物理目的寄存器组号。
三个流水段的写回操作的选择具有优先级,其中EX5的优先级最高,EX3次之,EX1最低。这是因为从EX5提交的指令是最先进入流水线的指令,按照程序的执行的逻辑顺序应该要先于EX3和EX1上的指令执行完成。
这样的选择有以下两种情况:
(a)、EX5、EX3和EX1写入的逻辑寄存器组位于同一物理寄存器组内。由于不同的并行度,EX5、EX3和EX1的逻辑目的寄存器组可能完全不重叠,即没有索引相同的寄存器。但是物理寄存器堆按照最大并行度分组,使得三个流水段的逻辑目的索引位于同一组内。这种情况下,该物理寄存器组成为写回的组号。
(b)、EX5、EX3和EX1分别对应的逻辑目的寄存器组部分或全部位于不同的物理寄存器组内。这种情况下选择当前最高优先级的写回操作,该操作的目的寄存器映射到的物理寄存器组成为写回的序号。没有被选中的写回操作被阻塞或进入队列中。
EX5、EX3和EX1三者中部分有写回操作的处理与上述情况处理相同。
我们将在后续的具体程序片段分析中看到,步骤4-1的选择方法,会对SIMD指令的写回操作产生有益的效果,使得流水线关于写冲突的停顿减少,提高指令的执行效率。
步骤4-2、根据4-1得到的组号,从标记寄存器堆读出对应的4个标记,按组内索次序依次为tag3,tag2,tag1和tag0,这4个标记将要与流水段中的标记进行匹配,以确定对应位置上的数据是否写入组内对应寄存器中。
步骤4-3、组内写使能产生及结果总线重排。
对流水段写回数据根据并行度进行处理,取EX1、EX3、EX5段在输出有效时的128位输出数据作为输入,处理过程如下:
并行度为1:取输入数据的低32位,复制3份分别到最高32位、次高32位、次低32位,拼合成128位输出数据;
并行度为2:取输入数据的低64位,复制1份到高64位,拼合成128位输出数据;
并行度为4:取输入数据的128位送至输出数据;
和3个写入流水段相对应,3组128位输出数据用作数据重排操作的输入,这样就可以使得数据总线在最高并行度下和组内寄存器位置对应,在写合并阶段就无需考虑写并行度,对128位总线的每一路(32位)单独进行写操作即可。
组内写使能逻辑和数据重排按如下操作进行:
假如当前节拍EX5/EX3/EX1三个流水段都提交了数据写回操作。判断EX5/EX3/EX1段结果数据输出信号有效时,用各自流水段中的指令携带的标记和步骤4-2取出的寄存器标记tag3~0作比较。以tag0为例,即用3不同流水段的标记与tag0比较,若匹配成功,则将对应流水段的输入数据截取低32位,送至寄存器写入总线的低32位,并将该路的写入使能设为有效;若匹配不成功,将该路的写入使能设为无效。tag1,tag2,tag3的处理过程和tag0处理过程相同,依次得到寄存器写入总线数据的次低32位,次高32位和高32位,拼合在一起就是完整的128位写入数据,这样就实现了多流水段写数据操作的合并。三个流水段的标记与tag3~0不能匹配的情况,说明寄存器标记已被较新指令所更新,写入操作被迫撤销。
对于写入寄存器不在当前寄存器组内的而没有成功进行写合并的流水段,将在下一节拍尝试写合并。只有部分流水段提交写回操作的情况与上述处理过程相同。
步骤4-4、将结果写入目的寄存器。
经过重排后的结果总线由高到低与组内4个寄存器是一一对应的
经过步骤4-3的处理,组内四个寄存器对应的写使能信号和数据已经产生,按照使能逻辑是否有效,将数据写入对应寄存器。同时,根据使能有效信号将组内对应的标记寄存器清除。清除的方法就是将前述标记表中独立的标记编码0000写入标记寄存器中。原来的标记值被分派逻辑回收,用于后续指令的表记分派。
步骤5、如果对目的寄存器写入数据,将目的寄存器对应的标记寄存器内的标记清除。在实施实例中,是将标记0000写入标记寄存器中。
所述步骤4中,由于SIMD结构处理器支持多种并行度的指令执行,对寄存器的逻辑写入也是按最大并行度为对一组寄存器写入数据。如果在同一个时钟节拍同时有多条指令执行结束,可以将同一组内的寄存器的写回操作合并起来,作为一次写操作,完成多条指令执行结果的合并写回。
所述步骤4中,由于处理器指令流水线长度不同,较新的指令会将较老的指令的目的寄存器的标记覆盖,这样在指令执行结束写回寄存器时,由于较老指令携带的标记和目的寄存器的标记不相同,那么较老指令的执行结果不会写回寄存器,这是写撤销的情况。同时,由于SIMD结构支持多种并行度,存在对一条SIMD指令中部分寄存器被写回,部分寄存器的结果被撤销的情况。此外,如果指令在同一拍提交的目的寄存器不在同一物理组内,会导致较新的指令被阻塞,等待较老指令执行完成后才能写回,这是写阻塞的情况。
下面分别结合实例对步骤4的对写操作处理方式逐一说明。
首先说明本发明中提出的写合并处理。实施示例程序为:
MPYF R0,R1 R0
NOP
ADDI R3,R4 R1
NOP
LD(2) R7 R2
NOP
上述程序片段中,MPYF和ADDI指令的并行度为1,LD指令的并行度为2.其中,MPYF为浮点操作指令,浮点操作需要4个流水段,在EX5将结果写回;ADDI指令为定点指令,定点操作2个流水段,在EX3将结果写回;LD指令为寄存器传输指令,在EX1将结果写回。上述指令按顺序进入流水线,由于不存在指令相关引起的停顿,三条指令在同一拍内执行结束,提交写回结果。
传统的指令写回处理方式中,检测指令的相关性,对流水线产生停顿,使得三条指令依次写入寄存器。为了提高指令的执行效率,在本发明所述的方法中,采用了写合并的方法处理上述指令同时写回的情况。这是对步骤4实现的第一种效果。
假设进入程序片段之前标记分派单元的候选待分配标记为1000。
根据前述的步骤1~3.从MPYF指令进入译码段开始,标记分派单元依次为需要分派标记的指令MPYF、ADDI、LD依次分派标记1000、1001、1010.该标记也同时和指令进入执行单元,分别由各指令携带在流水线中流动。同时,在译码阶段对标记寄存器的修改依次为TAG[0]=1000;TAG[1]=1001;{TAG[2]=1010;TAG[3]=1010;}。上述程序片段直到LD指令提交写回结果,标记寄存器对的状态不会再改变。
写合并的具体操作为:
(1)、上述指令片段中,EX5段的MPYF指令提交的目的寄存器R0、EX3段的ADDI指令目的寄存器R1、EX1段的LD指令的目的寄存器{R2,R3},这些寄存器对应的物理寄存器是第0组寄存器。因此,第0组寄存器作为写回的目的寄存器组。
(2)、从标记寄存器堆的第0组中读取标记{tag3,tag2,tag1,tag0}={1010,1010,1001,1000}.
(3)、MPYF在EX5提交的写回数据为A(32位),同时携带的指令标记为1000;ADDI在EX3提交的写回数据为B(32位),同时携带的指令标记1001;LD在EX1提交的写回数据为{D,C}(64位),同时携带的指令标记为1010.总线复制后的128位数据总线分别为{A,A,A,A}EX5_BUS、{B,B,B,B}EX3_BUS、{D,C,D,C}EX1_BUS.经过步骤4-3的合并处理后,寄存器组的写回数据按高低位置次序组合出的128位总线为{DLD,CLD,BADDI,AMPYF},并且组内4个寄存器的写使能有效。
(4)、将总线{D,C,B,A}按位置对应写入4个寄存器。
从上述指令的执行过程可以看出,程序片段中的MPYF、ADDI、LD指令虽然在不同的节拍进入流水线,由于不同流水段的设置,3条指令在同一节拍提交写回数据。按照传统的写回方法,指令按照先后顺序依次写入数据,这样ADDI、LD的写回数据将分别被延迟写入,一方面需要额外的硬件逻辑处理延迟,另一方面降低了流水线效率。在本发明中,通过写合并将上述3条指令的结果在一个时钟节拍同时提交到通用寄存器组中,通过简单的机制解决了上述问题。示例中说明了一个优选例子,在更复杂、流水线更细致的结构中,可以按发明中提出的办法实现多条指令的结果一次写回。即使对于没有SIMD结构特征的处理器,本发明中寄存器文件的逻辑和物理组织结构,以及写回操作的处理仍有很大使用价值。
对于组内4路寄存器只有部分写回的情况与上述处理相同,通过控制组内写使能控制更新组内寄存器。
下述实例说明本发明中提出的写撤销处理。实施示例程序为:
MPYF(4) R0,R1 R0
NOP
ADDI(2) R9,R4 R1
NOP
LD(2) R7 R2
NOP
上述指令片段的流水段与前面例子中介绍的相同。MPYF指令的并行度为4,ADDI指令并行度为2.标记分派单元为指令每次分配一个标记,标记的分配与并行度无关。仍然假设进入上述指令片段前候选待分配标记为1000,对上述修改寄存器的指令分配的标记依次为1000、1001、1010.各指令在译码阶段对标记寄存器的修改依次为{TAG[0]=1000;TAG[1]=1000;TAG[2]=1000;TAG[3]=1000}MPYF(4)→{TAG[0]=1001;TAG[1]=1001}ADDI(2)→{TAG[2]=1010;TAG[3]=1010}LD(2).
上述3条指令同时执行结束,提交写回结果。根据指令的目的寄存器组索引得到,第0组物理寄存器作为写回操作的寄存器组。相应地,从标记寄存器堆的第0组读取的标记此刻是:{tag3,tag2,tag1,tag0}={1010,1010,1001,1001}.
设MPYF提交的数据为{E,F,G,A};ADDI提交的数据为{H,B};LD提交的数据为{D,C}。总线复制后的128位数据总线分别为{E,F,G,A}EX5_BUS、{H,B,H,B}EX3_BUS、{D,C,D,C}EX1_BUS。按照步骤4-3中的操作,组内第0路位置上ADDI指令携带的标记与tag0相同,因此重排后数据线最低一组的数据选择ADDI指令提交的数据B选择到写回数据线上。对高3组处理后,重建后写回数据总线为{DLD,CLD,HADDI,BADDI}。组内4个寄存器写使能有效,将重建后的数据写回寄存器,完成上述指令的执行。
可见,MPYF提交的数据完全没有出现在写回数据总线上,MPYF指令的执行结果被撤销。这是因为,后续指令进入流水线后,将MPYF的目的寄存器的标记清除掉,当MPYF指令提交时,它携带的标记与目的标记不匹配,结果不能写入寄存器。从程序运行角度看,上述指令片段的执行效果是R0~3寄存器内的数据最终是ADDI和LD指令执行的结果,所述“写撤销”的效果与程序的执行从逻辑上也是一致的。通过“写撤销”的处理,MPYF指令的结果被丢弃,没有占用写回操作的时间,而当前的写回节拍被交给ADDI和LD的指令,两者将结果合并写入。
以上两个示例的目的寄存器都映射到同一组物理寄存器上。在此,说明一种同时映射到多组物理寄存器的实施实例。实施示例程序为:
MPYF(4) R0,R1 R0
INTF(2) R8 R8
ADDI(2) R9,R4 R1
SUB R15,4 R15
LD(2) R7 R4
NOP
上述示例中,MPYF和ADDI指令的目的寄存器映射到第0组物理寄存器上,LD指令的目的寄存器映射到第1组物理寄存器上。按照步骤4-1选择的优先级,第0组被选择为当前拍写回的寄存器组。由于寄存器堆的物理实现上,只有一个写入的端口,LD指令的写回数据被阻塞,到下一拍再次提交结果。从上述示例中还可以看到,由于INTF(EX5提交写回)和SUB(EX3提交写回)指令连续提交写回结果,LD指令的写回被连续阻塞两拍,直到第4拍写回逻辑才处理LD指令的写回操作,这与程序执行的逻辑顺序也是相同的。这个实例说明了本发明的设计中,如果有多个不同物理寄存器组写入时,写回操作被阻塞的情况。
上述实例还说明了,在没有指令写后读相关的情况下,指令的写回顺序并不一定按指令的顺序进行,但是从逻辑上并不影响程序的执行结果。上例中,指令写回顺序为:MPYF/ADDI→INTF→SUB→LD.
实施实例中以通用寄存器堆的写回作为优选实例说明了本发明的具体操作方法。其他寄存器的写回处理也可以使用本发明的处理方法来提高执行效率。
Claims (5)
1.一种SIMD处理器中写合并和写撤销的处理装置,包括体系结构寄存器堆、标记寄存器堆、标记分派单元和一个标记表,其特征在于:
所述的体系结构寄存器堆作为指令的操作数存储部件,连接到处理器的执行单元;标记表的输出连接到标记分派单元;标记分派单元从标记表中对当前需要写回寄存器的指令分派一个标记,该标记与已经进入流水线中的指令分派的标记不同,并输出连接到标记寄存器堆;译码逻辑产生的目的寄存器的写信号控制标记分派单元分派的标记写入标记寄存器堆;
所述标记寄存器堆是体系结构寄存器堆的标记存储单元,与体系结构寄存器堆一一对应;标记寄存器用于当指令需要将数据写入寄存器时,在对应的标记寄存器上写入一个分配给当前执行指令的标记;
所述标记表中包含一个独立的标记和一组可分配的标记;所述独立标记表示寄存器不会被任何已进入执行单元的指令写入结果数据;所述标记表中的可分配标记由标记分派单元分配给进入执行单元的指令;可分配标记用来对流水的指令和寄存器进行标记;在寄存器的标记和指令携带的标记一致时,指令的结果数据才能写回寄存器。
2.根据权利要求1所述的SIMD处理器中写合并和写撤销的处理装置,其特征在于:
所述体系结构寄存器堆包括W个寄存器,从0~(W-1)对寄存器依次索引;寄存器堆的访问索引为w位,W=2w;W个寄存器分成M组,每组N个寄存器,其中,N=2n,N为SIMD结构的最大并行度,表明组内包含的寄存器的数量;M=2m,M为寄存器堆的组数量;n,m都是非负整数,m+n=w;
所述体系结构寄存器堆中,寄存器访问的索引位宽为m+n位,m+n=w;其中,索引的(m+n-1,n)位为组选择信号,索引的(n-1,0)位为组内选择信号;寄存器的读操作根据指令的寄存器操作数索引,其中的高(m+n-1,n)位作为寄存器访问的组号,从寄存器堆中读出一组寄存器,再根据低位索引(n-1,0)位和并行度P将相应的数据放在数据总线上;寄存器的写操作同样由指令目的索引的高(m+n-1,n)位作为寄存器堆写回的组号,由低位索引(n-1,0)位和并行度P译码出相应的写使能信号,对组内的寄存器写入数据;
所述体系结构寄存器堆的物理访问和指令逻辑访问的映射关系是:寄存器堆的逻辑访问索引为w位,W=2w;所述SIMD处理器支持多种并行度P,其中P=2p,0≤p≤n;当访问的并行度为P时,由索引(w-1,p)位将寄存器堆逻辑地分成2(w-p)组,每组内包括P=2p个寄存器;对应到物理访问上,索引的(w-1,n)位为寄存器的逻辑组所在的物理寄存器组,索引的(n-1,p)位选择物理组内的P个寄存器作为指令的操作数。
3.一种利用权利要求1所述装置在SIMD处理器中写合并和写撤销的处理方法,其特征在于包括下述步骤:
步骤1、判断当前指令是否写回寄存器堆,如果指令的执行结果需要写回寄存器堆,由所述标记分派单元为该指令分派一个标记;否则,标记分派单元不为指令分派标记;根据并行度不同,指令的结果会写回一个或一组体系结构寄存器,但是对当前指令仅分配一个标记;
步骤2、将分派的标记写入指令目的寄存器对应的标记寄存器中;
步骤3、指令携带分派的标记进入处理器执行单元,执行指令功能;
步骤4、指令执行结束写回体系结构寄存器时,将指令携带的标记与指令目的寄存器的标记进行比对,如果标记相同,将指令的执行结果写回寄存器,进入步骤5;否则,指令的执行结果不写回;
步骤5、如果寄存器写入,将对应的寄存器的标记清除。
4.根据权利要求3所述装置在SIMD处理器中写合并和写撤销的处理方法,其特征在于:所述步骤4包括以下步骤:
步骤4-1、从多个具有写回数据的流水段中按优先级由高到低选择一个写回的物理寄存器组的组号;
步骤4-2、根据4-1得到的组号,从标记寄存器堆读出该组寄存器的标记;读出的一组标记有N个,依次为tag0~tagN-1,N为最大并行度;
步骤4-3、从多个写回操作中,选择写回的寄存器数据,对结果数据总线进行重排,产生写回数据总线,并产生组内的写使能信号;
在步骤4-3中,首先将每个指令写回的数据总线进行复制;复制的方法是:数据总线的宽度为N个数据;如果并行度P=1,数据总线上第0个数据有效,将这个数据赋值到数据0~N-1上;如果并行度为P,数据总线上第0~P-1个数据有效,将这P个数据复制N/P份到数据P~N-1上;然后将多个写回指令携带的标记逐个分别与tag0~tagN-1进行比较,如果标记一致,就将写回指令对应复制后的数据总线的第i个数据选择到写回数据总线上,并置该第i个数据的写使能信号为有效;否则,该第i个数据的写使能信号无效;写回数据总线位置和组内的寄存器的位置一一对应;
步骤4-4、按照对应数据和寄存器的位置对应关系,在写使能有效的情况下将数据写入寄存器内。
5.根据权利要求3所述装置在SIMD处理器中写合并和写撤销的处理方法,其特征在于:所述步骤5中,清除寄存器的标记的操作是将标记表中提到的一个独立的标记项写入标记寄存器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410546093.8A CN104317555B (zh) | 2014-10-15 | 2014-10-15 | Simd处理器中写合并和写撤销的处理装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410546093.8A CN104317555B (zh) | 2014-10-15 | 2014-10-15 | Simd处理器中写合并和写撤销的处理装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104317555A CN104317555A (zh) | 2015-01-28 |
CN104317555B true CN104317555B (zh) | 2017-03-15 |
Family
ID=52372791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410546093.8A Active CN104317555B (zh) | 2014-10-15 | 2014-10-15 | Simd处理器中写合并和写撤销的处理装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104317555B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106909343B (zh) * | 2017-02-23 | 2019-01-29 | 北京中科睿芯科技有限公司 | 一种基于数据流的指令调度方法及装置 |
CN109446127B (zh) * | 2018-02-27 | 2020-03-24 | 上海安路信息科技有限公司 | 一种物理bram匹配方法 |
CN109002322B (zh) * | 2018-06-26 | 2021-07-23 | 飞腾技术(长沙)有限公司 | 用于执行部件模块级验证的寄存器分配与释放方法及部件 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5696959A (en) * | 1993-11-30 | 1997-12-09 | Texas Instruments Incorporated | Memory store from a selected one of a register pair conditional upon the state of a selected status bit |
CN1414465A (zh) * | 2002-05-09 | 2003-04-30 | 智慧第一公司 | 选择性地控制结果回写的装置及方法 |
CN1816799A (zh) * | 2003-04-16 | 2006-08-09 | 皇家飞利浦电子股份有限公司 | 在时间-固定处理器中对条件操作的支持 |
CN1950797A (zh) * | 2004-05-13 | 2007-04-18 | 皇家飞利浦电子股份有限公司 | 多指令字处理器中反馈连接的运行时间选择 |
US7434032B1 (en) * | 2005-12-13 | 2008-10-07 | Nvidia Corporation | Tracking register usage during multithreaded processing using a scoreboard having separate memory regions and storing sequential register size indicators |
CN101930358A (zh) * | 2010-08-16 | 2010-12-29 | 中国科学技术大学 | 一种单指令多数据流结构上的数据处理方法及处理器 |
CN101930355A (zh) * | 2010-08-24 | 2010-12-29 | 中国航天科技集团公司第九研究院第七七一研究所 | 实现寄存器文件分组编址、读写控制方法的寄存器电路 |
CN102089742A (zh) * | 2008-02-26 | 2011-06-08 | 高通股份有限公司 | 执行单元内的数据转发系统和方法 |
CN104035749A (zh) * | 2014-05-26 | 2014-09-10 | 浙江大学 | 一种加快芯片流水线处理的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006120367A1 (en) * | 2005-05-11 | 2006-11-16 | Arm Limited | A data processing apparatus and method employing multiple register sets |
JP2007011580A (ja) * | 2005-06-29 | 2007-01-18 | Toshiba Corp | 情報処理装置 |
-
2014
- 2014-10-15 CN CN201410546093.8A patent/CN104317555B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5696959A (en) * | 1993-11-30 | 1997-12-09 | Texas Instruments Incorporated | Memory store from a selected one of a register pair conditional upon the state of a selected status bit |
CN1414465A (zh) * | 2002-05-09 | 2003-04-30 | 智慧第一公司 | 选择性地控制结果回写的装置及方法 |
CN1816799A (zh) * | 2003-04-16 | 2006-08-09 | 皇家飞利浦电子股份有限公司 | 在时间-固定处理器中对条件操作的支持 |
CN1950797A (zh) * | 2004-05-13 | 2007-04-18 | 皇家飞利浦电子股份有限公司 | 多指令字处理器中反馈连接的运行时间选择 |
US7434032B1 (en) * | 2005-12-13 | 2008-10-07 | Nvidia Corporation | Tracking register usage during multithreaded processing using a scoreboard having separate memory regions and storing sequential register size indicators |
CN102089742A (zh) * | 2008-02-26 | 2011-06-08 | 高通股份有限公司 | 执行单元内的数据转发系统和方法 |
CN101930358A (zh) * | 2010-08-16 | 2010-12-29 | 中国科学技术大学 | 一种单指令多数据流结构上的数据处理方法及处理器 |
CN101930355A (zh) * | 2010-08-24 | 2010-12-29 | 中国航天科技集团公司第九研究院第七七一研究所 | 实现寄存器文件分组编址、读写控制方法的寄存器电路 |
CN104035749A (zh) * | 2014-05-26 | 2014-09-10 | 浙江大学 | 一种加快芯片流水线处理的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104317555A (zh) | 2015-01-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Fang et al. | swdnn: A library for accelerating deep learning applications on sunway taihulight | |
KR101754462B1 (ko) | 동적 비순차적 프로세서 파이프라인을 구현하기 위한 방법 및 장치 | |
US20170097826A1 (en) | System, Method, and Apparatus for Improving Throughput of Consecutive Transactional Memory Regions | |
US7568089B1 (en) | Flag management in processors enabled for speculative execution of micro-operation traces | |
TWI507980B (zh) | 最佳化暫存器初始化操作 | |
CN108027807A (zh) | 基于块的处理器核拓扑寄存器 | |
TWI505192B (zh) | 在執行時間擷取資料平行處理的平行執行單元 | |
CN108027771A (zh) | 基于块的处理器核复合寄存器 | |
CN108027772A (zh) | 用于逻辑处理器的不同的系统寄存器 | |
CN108027769A (zh) | 使用寄存器访问指令发起指令块执行 | |
CN108027729A (zh) | 分段式指令块 | |
KR101655713B1 (ko) | 이동 제거 연산들에서의 플래그 트래킹을 위한 시스템들 및 방법들 | |
US20130042089A1 (en) | Word line late kill in scheduler | |
CN105426160A (zh) | 基于sprac v8指令集的指令分类多发射方法 | |
CN101558388A (zh) | 数据高速缓存虚拟提示路线预测及其应用 | |
JPH03282958A (ja) | 電子計算機 | |
US20170024213A1 (en) | Method and apparatus for implementing dynamic portbinding within a reservation station | |
KR102513265B1 (ko) | 레지스터 뱅크에 저장된 데이터 요소들의 하나 이상의 벡터와 메모리 사이에서 복수의 데이터 구조를 전송하는 장치 및 방법 | |
CN109478140A (zh) | 基于块的处理器中的加载-存储顺序 | |
CN104317555B (zh) | Simd处理器中写合并和写撤销的处理装置和方法 | |
CN104536914B (zh) | 基于寄存器访问标记的相关处理装置和方法 | |
CN104049947B (zh) | 基于动态重命名的矢量寄存器堆的寄存器重新配置 | |
CN107810486A (zh) | 锁定用于原子地执行的指令组的操作数的值 | |
TW201606645A (zh) | 在處理器管線中管理指令順序 | |
JP7046087B2 (ja) | キャッシュ・ミス・スレッド・バランシング |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |