一种适用于通用处理器的硬件循环处理装置的制作方法



1.本发明涉及一种硬件循环预测期,尤其是涉及一种适用于通用处理器的硬件循环处理装置。


背景技术:



2.在计算机程序中,循环操作是很常见的类型。一般软件编写为for(i=0; i《n; i++) {循环体},而在通用处理器的指令集设计中,编译器一般会将循环体最后一条指令编译为分支指令。分支指令(branch)是计算机程序中的一种指令,它可以使计算机开始执行不同的指令序列,从而偏离其按顺序执行指令的默认行为。例如,可以使用条件分支指令(conditional branch)来实现双向分支(if
…ꢀ
else

),在循环中指代是要跳出循环还是再次执行循环。
3.处理器硬件循环组件的设计与指令集设计强相关。对于循环操作,在指令集设计中一般有三种实现方案:(1)循环体最后加入条件分支指令,达到计数条件后跳出,未达到则继续循环。
4.(2)设计专门的循环(loop)指令,给出循环次数及循环体入口/出口信息。
5.(3)使用普通指令替换分支指令,达到同样的效果。
6.目前主流的通用处理器使用方案(1)作为循环的实现方式,一般在指令集中不会设计专门的循环指令,arm指令集的示例如下所示:通过比较寄存器r1中的数值是否与立即数#1相等来决定是否继续循环还是跳出;支持自定义指令集的通用处理器或专用的人工智能处理器、数字信号处理器(dsp)会使用方案(2),下表所示为高通的hexagon v5x指令集中的循环指令设计。
7.但这种指令设计一般都会加入限制,比如:因此,方案(2)实际只支持最多两层循环嵌套。而方案(3)由于编译效率的问题一般不作为实际选项。
8.上节提到的三种实现方案在目前的业界产品中均有其固有缺陷:对于方案(1),在没有分支预测的情况下,处理器必须等到分支指令(例如,条件跳转指令)通过执行阶段,然后下一条指令才能进入提取阶段。分支预测器通过确定分支(例如,条件跳转)是否更有可能跳转来避免这种等待。然后在最可能的分支处的指令(例如,序列中的下一条指令或不同的指令)被提取并且从预测指令开始的一个或多个指令被推测性地(投机)执行。如果处理器稍后检测到分支预测错误,则刷新流水线(导致投机执行的指令被丢弃)并且流水线以正确的指令重新开始。在预测循环时,不是单纯对循环体结尾处的条件分支进行预测,而是需要推测当前循环的循环(总)次数和实时监测当前循环的次数,这
样就增加了分支预测器的的实现开销,并且预测准确度难以维持在高水平,因此,在通用处理器设计中,循环预测器甚至都不是分支预测单元设计中的必选项。而且,目前的人工智能处理器以及浅流水线处理器中,一般不设计分支预测器。不设计的原因主要是因为认为浅流水线的停顿和冲刷可以忍受。另外,人工智能处理器的指令集与通用的超标量处理器的指令集存在一定的差异,因此,对于人工智能处理器以及浅流水线通用处理器,现有技术方案即使做分支预测,往往是非常简易并且与自身指令集高度耦合。
9.对于方案(2),一个重大缺陷是会影响指令集架构(isa)对于分支指令的定义,为了避免性能损失,会加入各种限制,例如循环体中不能包含分支指令,循环体本身不能嵌套等等,这样对于软件设计人员编程是不友好的。
10.对于方案(3),如果编译器使用常规指令来替代分支指令,那么1条分支指令需要5到6条常规指令才能描述相同的行为,效率十分低下。
11.参考文献[1] hexagon v5x programmer’s reference manual. qualcomm technologies, inc.[2] arm
®ꢀ
architecture reference manual
‑‑
armv8, for armv8-a architecture profile. arm limited。


技术实现要素:



[0012]
本发明提供了一种适用于通用处理器的硬件循环处理装置,是针对精简指令集通用处理器和人工智能处理器提出了一种硬件资源开销小,性能收益高,指令集设计限制少的硬件循环设计,解决了上述现有技术的缺陷。其技术方案如下所述:一种适用于通用处理器的硬件循环处理装置,包括应用循环指令的微架构,所述微架构包括:硬件循环预测器:用于提供循环体跳出或是返回入口地址的预测;指令缓存单元:用于接收硬件循环预测器返回的预测的入口地址,在所识别的地址处检索指令,取出的指令被发送到指令译码单元;指令译码单元:指令被译码以产生用于控制指令执行单元进行操作的控制信号,从而实现所需的操作;指令执行单元:当指令执行完毕,将执行完毕信息发送给指令提交单元;指令提交单元:将提交信息返回给硬件循环预测器进行更新。
[0013]
所述循环指令需要直接或间接传递三个参数给到微架构:循环体入口地址,循环体出口地址,循环次数;所述循环指令的第一种设计形式为:loop begin, iteration
ꢀꢀꢀꢀꢀꢀꢀꢀ
loopend循环体起始地址begin与循环次数iteration在loop指令中使用寄存器rs存储,或使用立即数表示,循环体出口地址对应于loopend指令对应的地址;所述循环指令的第二种设计形式为:loop begin,end,iteration在loop一条指令内给出三个参数,循环体入口地址begin与循环次数iteration在
loop指令中使用寄存器rs1存储,或使用立即数表示,循环体出口地址在寄存器rs2中直接存储,或在寄存器rs2中存储出口地址相对于入口地址的偏移量。
[0014]
所述硬件循环预测器,在指令缓存单元每次取指令时访问,当索引到循环体的出口,能够预测接下来即将执行的指令块地址,预测的提取指令块包括存储器地址空间内的一个或多个顺序指令,预测的提取指令块由该指令块内的第一条指令的地址作为标签来识别;如果在提取指令块内没有识别出循环体出口地址,则下一个提取指令块的起始地址是当前指令块的最后一条指令的地址之后的顺序地址或是取决于其它分支预测组件的预测地址。
[0015]
所述指令缓存单元在所识别的地址处检索指令,所述地址包括输入地址和内存系统,如果在指令缓存单元中检测到输入地址的命令中,则可以直接从指令缓存单元输出对应的指令,否则指令从内存系统的层次结构的较低级别请求,并且在检索时从指令缓存单元中输出。
[0016]
所述硬件循环预测器包括循环缓冲区、跳出状态跟踪表,以及控制单元,所述循环缓冲区用于判断循环被预测为终止跳出或者返回起始地址继续,所述跳出状态跟踪表记录已经跳出的硬件循环的出口索引,所述控制单元的作用在于循环缓冲区条目的新建、更新,以及清理。
[0017]
所述循环缓冲区能够设置多条条目,条目包括依次连接的有效位、标签、循环次数和循环起始地址;所述有效位表示该条目是否有效,所述标签和循环起始地址为程序计数器的部分,所述标签源于循环指令中给出的循环体跳出地址,由寄存器或者loopend对应地址获得;循环次数初始值与循环起始地址都是由循环指令解析的信息得到,循环次数初始化为循环需要执行的总次数。
[0018]
当循环被预测为终止时,指令流被预测为顺序向下取新的指令,否则跳转到条目内所存循环起始地址。
[0019]
所述跳出状态跟踪表记录的是已经跳出的硬件循环的出口索引,即在同一循环指令的预测器出口到循环指令提交阶段的流水线中每级维护n位的寄存器,n取决于循环缓冲区的最大条目数。
[0020]
所述控制单元在于循环缓冲区条目的新建、更新,以及清理,所述新建是指当接收到一条新的loop指令,需要新建一个循环缓冲区条目;所述更新是指每经过一次循环体出口地址,对应条目中的循环计数器减1,所述清理是指当最外层循环体正确跳出后,循环缓冲区所有条目清空。
[0021]
所述循环指令的循环体允许投机跳出,在当前出口地址处指令确认提交之前,指令流继续执行,如果当指令流再次走到循环体出口地址时,前一圈循环的指令仍未确认正确提交,则反压流水线,使得任何一层循环都只允许投机向后执行一圈。
[0022]
所述适用于通用处理器的硬件循环处理装置,在精简指令集(risc)或超长指令字(vliw)架构通用处理器和人工智能处理器芯片设计中,以较小的硬件资源开销实现高效的硬件循环(hardware loop)预测器,显著提升指令编译效率与硬件执行效率,减少指令集设计限制。
附图说明
[0023]
图1是所述硬件循环处理装置的微架构设计示意图;图2是所述硬件循环预测器内部结构示意图;图3是所述循环缓冲区中的条目的具体内容示意图。
具体实施方式
[0024]
在通用处理器,人工智能推理/训练处理器,数字信号处理器芯片应用中,循环操作是很常见的编程类型,因此有必要设计硬件循环预测器专门真的循环指令进行预测。相较于通用的分支预测器,通过指令集与硬件循环处理装置配合设计达到预测准确度100%的效果,能够显著提升处理器运行效率。
[0025]
所述硬件循环处理装置包括设计有硬件循环预测器的微架构,结合循环指令,实现循环操作。所述循环指令需要直接或间接传递三个参数给到硬件:循环体入口地址,循环体出口地址,循环次数。该指令有两种设计形式:形式1: loop begin, iteration
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
loopend循环体起始地址begin与循环次数iteration在loop指令中可以使用寄存器rs存储,也可以使用立即数表示。循环体出口地址对应于loopend指令对应的地址。
[0026]
形式2: loop begin,end,iteration相比于形式1,形式2中不需要专门的loopend指令,但是需要在loop一条指令内给出三个参数,对于指令编码长度就有了一定的要求,可以根据实际情况灵活选择。与形式1相同, 循环体入口地址begin与循环次数iteration在loop指令中可以使用寄存器rs1存储,也可以使用立即数表示。循环体出口地址可以在寄存器rs2中直接存储,也可以在寄存器rs2中存储出口地址相对于入口地址的偏移量,这样能够减少寄存器开销,但需要额外的运算资源。
[0027]
如图1所示,所述硬件循环处理装置的微架构中,包括硬件循环预测器,其提供循环体跳出或是返回入口地址的预测,预测的地址被发送到指令缓存单元,该指令缓存单元在所识别的地址处检索指令,取出的指令被发送到指令译码单元,在那里指令被译码以产生用于控制指令执行单元进行操作的控制信号,从而实现所需的操作。当指令执行完毕,需要将提交信息通过指令提交单元返回给硬件循环预测器进行更新。其中,指令缓存单元在所识别的地址处检索指令,所述地址包括输入地址和内存系统中,如果在指令缓存单元中检测到输入地址的命令中,则可以直接从指令缓存单元输出对应的指令,否则指令可以从内存系统的层次结构的较低级别请求,并且在检索时可以从指令缓存单元中输出。
[0028]
所述硬件循环预测器可以在指令缓存单元每次取指令时访问,当索引到循环体的出口,就可以预测接下来即将执行的指令块地址,预测的提取指令块可以包括存储器地址空间内的一个或多个顺序指令。预测的提取指令块可以由该指令块内的第一条指令的地址作为标签来识别,并且指令块中的指令条数通常是确定的,例如可以是1,2,4,8,16,32条。
[0029]
如果在提取指令块内没有识别出循环体出口地址,则下一个提取指令块的起始地址是当前指令块的最后一条指令的地址之后的顺序地址或是取决于其它分支预测组件的预测(跳转)地址。
[0030]
硬件循环预测器内部结构如图2所示,包括循环缓冲区、跳出状态跟踪表,以及控制单元三部分。所述循环缓冲区用于判断循环被预测为终止跳出或者返回起始地址继续,所述跳出状态跟踪表记录已经跳出的硬件循环的出口索引,所述控制单元的作用在于循环缓冲区条目的新建、更新,以及清理。
[0031]
循环缓冲区能够设置多条条目,条目的具体内容如图3所示,包括依次连接的有效位、标签、循环次数和循环起始地址。标签和循环起始地址一般为程序计数器(通常为一个32位的二进制数)的部分。其中,标签源于指令中给出的循环体跳出地址,在本发明中可以由寄存器或者loopend对应地址获得;循环次数初始值与循环起始地址都是由指令解析的信息得到。循环次数初始化为循环需要执行的总次数。
[0032]
在循环缓冲区索引访问时,根据有效位判断条目是否有效,如果条目有效且标记匹配,该标记来源于该循环体内最后一条指令的地址的部分,此时提取指令块中已包含循环体内最后一条指令,则根据当前循环次数判断:为0,则该循环被预测为终止跳出。除此之外,该循环返回起始地址继续,同时该条目中的当前循环计数减1。也就是说,当循环被预测为终止时,指令流被预测为顺序向下取指,否则跳转到为条目内所存循环起始地址。循环预测器的条目可以基于实际应用场景确定,当指令集架构中设计专门的循环指令并能够给出循环总数与循环体长度时,循环缓冲区的预测准确率预期为100%。
[0033]
因为循环体内允许存在分支指令,那么也就意味着循环的跳出有可能在错误的指令路径上,后续应该被纠正。因为loop指令不同于普通的分支指令,指令执行单元无法记录硬件循环所有信息,因此无法纠正错误的循环跳出,因此预测器本身必须有恢复机制。
[0034]
所述跳出状态跟踪表记录的是已经跳出的硬件循环的出口索引(可以是多层),在同一循环指令的操作过程中,即在预测器出口到循环指令提交阶段的流水线中每级维护n位的寄存器(n取决于循环缓冲区的最大条目数)。循环指令提交阶段通过指令提交单元处理,当硬件循环预测器预测当前地址为循环体出口,并且当前循环次数已经为0,则将其流水线阶段对应的跳出状态跟踪表相应位置置1,所述相应位置是指当前循环指令所处的流水线阶段,后续当该地址处指令成功提交后,将前级流水线中所有跳出状态跟踪表对应位置置0。当发现指令流在错误路径上时,流水线冲刷的同时需要根据最新的跳出状态跟踪表的内容对为1位置对应的循环缓冲区条目的循环次数恢复。
[0035]
控制单元的作用在于循环缓冲区条目的新建、更新,以及清理。上面提到,当接收到一条新的loop指令,需要新建一个循环缓冲区条目。当循环体是多层嵌套的时,循环缓冲区是同时有多个条目有效的。每经过一次循环体出口地址,对应条目中的循环计数器减1。当指令流在错误路径上时,流水线冲刷的同时需要根据最新的跳出状态跟踪表的内容对为1位置对应的循环缓冲区条目的循环次数恢复。当最外层循环体正确跳出后(出口处指令正确提交没有流水线冲刷),循环缓冲区所有条目清空。
[0036]
需要指出的是,循环体允许投机跳出,即在当前出口地址处指令确认提交之前,指令流可以继续执行。但是,如果当指令流再次走到循环体出口地址时,前一圈循环的指令仍未确认正确提交,则反压流水线。也就是说,任何一层循环都只允许投机向后执行一圈。
[0037]
对于编译器的指令排布,需要注意在loop指令发出后,在进入循环体入口地址之前需要保证插入的其它指令执行的周期能够覆盖硬件流水线指令解析的时间窗口。
[0038]
本发明产生的有益效果主要有:
(1)预测能够在计算取指令地址的同一时钟周期给出预测结果,避免了因为预测带来的流水线冲刷(pipeline flush),实现了流水线“零气泡(zero bubble)”预测的效果,且预测准确度达到100%。
[0039]
(2)通用性好,不会对指令集架构(isa)的循环指令设计带来限制(现有方案往往会在指令集设计时对分支指令加以限制,例如循环体中不能包含分支指令,循环体本身不能嵌套等等)。
[0040]
(3)对编译器设计友好,对于循环的处理不必插入无用指令占有机器运行周期。

技术特征:


1.一种适用于通用处理器的硬件循环处理装置,其特征在于:包括应用循环指令的微架构,所述微架构包括:硬件循环预测器:用于提供循环体跳出或是返回入口地址的预测;指令缓存单元:用于接收硬件循环预测器返回的预测的入口地址,在所识别的地址处检索指令,取出的指令被发送到指令译码单元;指令译码单元:指令被译码以产生用于控制指令执行单元进行操作的控制信号,从而实现所需的操作;指令执行单元:当指令执行完毕,将执行完毕信息发送给指令提交单元;指令提交单元:将提交信息返回给硬件循环预测器进行更新。2.根据权利要求1所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述循环指令需要直接或间接传递三个参数给到微架构:循环体入口地址,循环体出口地址,循环次数;所述循环指令的第一种设计形式为:loop begin, iteration
ꢀꢀꢀ
loopend循环体起始地址begin与循环次数iteration在loop指令中使用寄存器rs存储,或使用立即数表示,循环体出口地址对应于loopend指令对应的地址;所述循环指令的第二种设计形式为:loop begin,end,iteration在loop一条指令内给出三个参数,循环体入口地址begin与循环次数iteration在loop指令中使用寄存器rs1存储,或使用立即数表示,循环体出口地址在寄存器rs2中直接存储,或在寄存器rs2中存储出口地址相对于入口地址的偏移量。3.根据权利要求1所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述硬件循环预测器,在指令缓存单元每次取指令时访问,当索引到循环体的出口,能够预测接下来即将执行的指令块地址,预测的提取指令块包括存储器地址空间内的一个或多个顺序指令,预测的提取指令块由该指令块内的第一条指令的地址作为标签来识别;如果在提取指令块内没有识别出循环体出口地址,则下一个提取指令块的起始地址是当前指令块的最后一条指令的地址之后的顺序地址或是取决于其它分支预测组件的预测地址。4.根据权利要求3所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述指令缓存单元在所识别的地址处检索指令,所述地址包括输入地址和内存系统,如果在指令缓存单元中检测到输入地址的命令中,则可以直接从指令缓存单元输出对应的指令,否则指令从内存系统的层次结构的较低级别请求,并且在检索时从指令缓存单元中输出。5.根据权利要求3所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述硬件循环预测器包括循环缓冲区、跳出状态跟踪表,以及控制单元,所述循环缓冲区用于判断循环被预测为终止跳出或者返回起始地址继续,所述跳出状态跟踪表记录已经跳出的硬件循环的出口索引,所述控制单元的作用在于循环缓冲区条目的新建、更新,以及清理。6.根据权利要求5所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述循环缓冲区能够设置多条条目,条目包括依次连接的有效位、标签、循环次数和循环起始地址;所述有效位表示该条目是否有效,所述标签和循环起始地址为程序计数器的部分,所述标签源于循环指令中给出的循环体跳出地址,由寄存器或者loopend对应地址获得;循环次
数初始值与循环起始地址都是由循环指令解析的信息得到,循环次数初始化为循环需要执行的总次数。7.根据权利要求6所述的适用于通用处理器的硬件循环处理装置,其特征在于:当循环被预测为终止时,指令流被预测为顺序向下取新的指令,否则跳转到条目内所存循环起始地址。8.根据权利要求5所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述跳出状态跟踪表记录的是已经跳出的硬件循环的出口索引,即在预测器出口到循环指令提交阶段的流水线中每级维护n位的寄存器,n取决于循环缓冲区的最大条目数。9.根据权利要求5所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述控制单元在于循环缓冲区条目的新建、更新,以及清理,所述新建是指当接收到一条新的loop指令,需要新建一个循环缓冲区条目;所述更新是指每经过一次循环体出口地址,对应条目中的循环计数器减1,所述清理是指当最外层循环体正确跳出后,循环缓冲区所有条目清空。10.根据权利要求9所述的适用于通用处理器的硬件循环处理装置,其特征在于:所述循环指令的循环体允许投机跳出,在当前出口地址处指令确认提交之前,指令流继续执行,如果当指令流再次走到循环体出口地址时,前一圈循环的指令仍未确认正确提交,则反压流水线,使得任何一层循环都只允许投机向后执行一圈。

技术总结


本发明提供一种适用于通用处理器的硬件循环处理装置,包括应用循环指令的微架构,所述微架构包括硬件循环预测器,用于提供循环体跳出或是返回入口地址的预测,预测的入口地址发送到指令缓存单元,在所识别的地址处检索指令,取出的指令被发送到指令译码单元,指令被译码以产生用于控制指令执行单元进行操作的控制信号,从而实现所需的操作,当指令执行完毕,将提交信息通过指令提交单元返回给硬件循环预测器进行更新,所述硬件循环预测器包括循环缓冲区、跳出状态跟踪表,以及控制单元。本发明显著提升指令编译效率与硬件执行效率,减少指令集设计限制。指令集设计限制。指令集设计限制。


技术研发人员:

李东声

受保护的技术使用者:

北京数渡信息科技有限公司

技术研发日:

2022.11.18

技术公布日:

2022/12/19

本文发布于:2024-09-22 01:36:43,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/41279.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   循环体   地址   所述
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议