首页> 中国专利> 指令字处理器及零开销循环处理方法、电子设备及介质

指令字处理器及零开销循环处理方法、电子设备及介质

摘要

本发明公开了一种指令字处理器,包括零开销循环单元、指令译码单元、寄存器访问单元、写回单元和指令存储单元等模块。以及一种处理器的零开销循环处理方法。本发明的装置和方法改进了零开销循环指令和零开销循环单元的设计,放松了编译器采用零开销循环指令优化循环的条件,降低了处理器循环控制逻辑部分的硬件复杂度,还解决了处理器处理中断、异常等事件时,零开销循环单元的现场保护和现场恢复问题,既支持具有循环缓冲的处理器装置,也支持指令宽度不一致,但指令宽度都是最小寻址宽度的整数倍的处理器装置,提高循环处理的灵活性与执行效率。

著录项

  • 公开/公告号CN112835624A

    专利类型发明专利

  • 公开/公告日2021-05-25

    原文格式PDF

  • 申请/专利权人 中国科学院自动化研究所;

    申请/专利号CN202110188273.3

  • 申请日2021-02-18

  • 分类号G06F9/30(20060101);G06F9/32(20060101);

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人周天宇

  • 地址 100190 北京市海淀区中关村东路95号

  • 入库时间 2023-06-19 11:05:16

说明书

技术领域

本发明涉及处理器设计领域,尤其涉及一种指令字处理器及零开销循环处理方法、电子设备及存储介质。

背景技术

在嵌入式应用程序中,数据密集型应用所占比例日益增高,如图像处理、视频编解码等。这些应用通常运算量巨大,而且对处理器的实时性要求很高。因而,对处理器的性能提出了更高的要求。这些应用的核心代码往往是各种循环的计算代码。从而导致不到10%的核心代码占用了处理器90%以上的执行时间。因而,若处理器在执行循环时,能够不用花时间去检查循环计数器的值,不用通过分支指令来实现循环体尾指令到首指令的切换,完全由硬件来完成上述操作,从而节省指令周期,实现零开销循环的处理,则能大大提高处理器的性能。

现有的零开销循环技术大多不支持超长指令字(Very Long Instruction Word,VLIW)结构的处理器,不支持变长指令编码的处理器,没有对循环缓冲配套的解决方法,没有对中断、异常等事件的支持方法,存在增加指令数目多,硬件实现方法复杂,性能提升有限等缺点。

发明内容

针对上述技术问题,本发明的主要目的在于提供一种超长指令字处理器装置及其零开销循环处理方法,以降低零开销循环指令对编译器的限制,提高循环处理的灵活性与执行效率。

为实现上述目的,本发明一方面提供了一种指令字处理器,包括

指令地址计算发送单元、指令等待单元、指令接收及指令拆包单元、指令译码单元、寄存器访问单元、执行单元、写回单元、零开销循环单元和指令存储单元。其中零开销循环单元与指令地址计算发送单元、指令接收及指令拆包单元和寄存器访问单元相连。寄存器访问单元内部可以包含多组循环参数寄存器,以支持多层循环嵌套或循环交叠等情况。并设定循环寄存器组的优先级。当循环体尾执行包的首指令地址不相等时,各循环寄存器组对应的循环单元独立工作,互不影响;当循环体尾执行包的首指令地址相等时,根据设定的优先级,判定各循环的嵌套层次,进而指导循环单元的工作。以2组循环寄存器为例,具体包括分别用于存储循环0和循环1的循环次数(C0、C1),循环体首执行包的首指令地址(T0、T1),循环体尾执行包的首指令地址(B0、B1)。当B0=B1时,默认B1先级更高,B1存放内层循环。寄存器访问单元内部包含BYPASS逻辑,从而保证其发送给零开销循环单元和指令接收及指令拆包单元的循环寄存器的结果是最新的值。当指令译码单元检测到零开销循环标志指令(ZLP指令)时,根据ZLP指令携带的循环的参数信息计算出循环体首执行包/尾执行包的首指令地址,发送给寄存器访问单元,并向寄存器访问单元提出读取用于计算循环次数的通用寄存器的请求,寄存器访问单元根据请求读出通用寄存器的值,并根据运算模式,计算出循环次数。一并将循环次数,循环体首执行包/尾执行包的首指令地址发送到后续执行单元,最后通过写回单元将结果写回到对应编号的循环寄存器中。

零开销循环单元进一步包括取指地址计算及控制模块,指令缓冲读指针变换控制模块,循环缓冲启动模块,循环计数器递减控制模块。其中,取指地址计算及控制模块和指令缓冲读指针变换控制模块均在没有循环缓冲或循环缓冲功能未开启时工作。循环缓冲启动模块不是必须配置的,仅在指令接收及指令拆包单元中配置有循环缓冲的处理器装置中适用。当循环体长度有限,且能够存入循环缓冲中时才开启循环缓冲。取指地址计算及控制模块根据循环寄存器的最新结果和指令地址计算发送单元发送的取指令地址进行运算,若取指令地址大于有效循环单元的尾执行包的首地址,并且对应的循环次数大于0,则产生循环地址切换标志信号,并发送循环起始地址给指令地址计算发送单元,由指令地址计算发送单元将循环起始地址作为新的取指令地址发送给指令存储单元。指令缓冲读指针变换控制模块接收指令接收及指令拆包单元发送的当前成功拆包的指令地址和寄存器访问单元发送的循环寄存器值,并将当前成功拆包的指令地址与当前开启的循环单元的尾执行包的首地址进行比较,若相等,且其对应的循环次数大于0,说明指令读取到循环体尾执行包,则产生指令缓冲读指针变换标志信号,发送给指令接收及指令拆包单元,由其控制指令缓冲读指针的切换。当处理器装置配有循环缓冲,循环缓冲启动模块启动工作,根据寄存器访问单元发送的循环寄存器信息,若检测到有效循环体,且其循环体长度小于循环缓冲的长度,则发送循环缓冲启动信号给指令接收及指令拆包单元,由其控制循环体在循环缓冲中的加载、读取等。循环计数器递减控制模块接收指令接收及指令拆包单元发送的当前成功拆包的指令地址和寄存器访问单元发送的循环寄存器值,并将当前成功拆包的指令地址与其当前开启的循环单元的结束地址进行比较,若相等,且其对应的循环次数非0,说明当前循环体执行完一遍,则产生对应的循环单元计数器递减信号发送给寄存器访问单元,由其进一步传送给执行单元,最后由写回单元控制对应循环次数寄存器的递减。

本发明另一方面提供了一种处理器零开销循环处理方法,该方法包括的步骤包括:(1)对循环标志指令进行译码;(2)计算循环参数,包括循环次数,循环体起始指令地址,循环体结束指令地址,并通过执行级流水逐级往下传递,直到写回阶段,将循环参数写回到对应的循环参数寄存器中;(3)判断是否有循环单元的循环次数大于0(4)若有,则启动零开销循环单元;(5)判断处理器装置是否配备有循环缓冲,若有,进一步判断循环体的长度是否小于或等于循环缓冲的长度,若是,则启动循环缓冲;若处理器没有循环缓冲,或循环体长度大于循环缓冲的长度,则一方面读取当前的取指令地址,并判断当前取指令地址是否大于或等于使能的循环单元的结束地址,若是,则判断对应循环单元的循环次数是否大于0,若是,则更新下一取指令地址为对应循环体的循环起始地址。若当前取指令地址小于使能的循环单元结束地址,或者对应的循环次数大于0,则下一取指令地址等于当前取指令地址的累加。另一方面,读取当前拆包的指令的地址,并判断当前拆包的指令地址是否大于或等于使能的循环单元的结束地址,若是,进一步判断对应循环单元的循环次数是否大于0,若是,则修改指令缓冲的读指针到循环体首指令所在指令包的位置;否则,指令缓冲读指针的位置根据当前拆包指令的长度正常累加。(6)零开销循环单元启动时,也需要读取当前拆包的指令的地址,并判断当前拆包的指令地址是否大于或等于使能的循环单元的结束地址,若是,进一步判断对应循环单元的循环次数是否大于0,若是,则修改对应循环单元的循环次数寄存器,使其减。否则,保持循环参数寄存器不变。

本申请还提供了一种电子设备,包括:

存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器为上述本申请提供的指令字处理器。

本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请实施例上述提供的处理器零开销循环处理方法。

基于上述技术方案可知,本发明的装置和方法改进了零开销循环指令和零开销循环单元的设计,放松了编译器采用零开销循环指令优化循环的条件,降低了处理器循环控制逻辑部分的硬件复杂度,还解决了处理器处理中断、异常等事件时,零开销循环单元的现场保护和现场恢复问题;支持具有循环缓冲的处理器装置,也支持指令宽度不一致,但指令宽度都是最小寻址宽度的整数倍的处理器装置;从而本方法减少了对循环指令的限制,大大增加了可优化的循环范围,包括,循环次数不再受指令编码限制,可支持更大范围的循环,并且支持循环次数或循环步长动态变化的循环体以及多层嵌套循环和交叠循环。循环参数寄存器作为内核通用寄存器的一部分,支持其他指令对其进行访问,从而支持中断、异常等事件的现场保护和现场恢复;此外,本方法还支持具有不同指令宽度的处理器以及超长指令字的处理器,并支持配置有循环缓冲的处理器。可适用于众多处理器。

附图说明

图1是本发明中零开销循环标志指令的示意图;

图2A是本发明一实施例零开销循环标志指令编码示意图;

图2B是本发明另一实施例零开销循环标志指令编码示意图;

图3是本发明一个实施例处理器的结构示意图;

图4是本发明实施例处理器的零开销循环处理方法流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。

图1是本发明中零开销循环标志指令的示意图,本发明通过在现有技术的处理器中增加一类循环标志指令(ZLP指令)和一个循环单元实现了处理器循环的零开销执行,并且支持具有循环缓冲的处理器。

针对ZLP指令的编码格式以及该指令的定义做如下描述:

ZLP指令语法格式中带有两个标号:Tlabel、Blable,一个循环次数寄存器Cn,两个源寄存器:Sreg0、Sreg1。其中,标号Tlabel代表循环体起始执行包的首指令位置,Blabel代表循环体结束执行包的首指令位置;循环次数寄存器Cn中的数字n代表了使用的循环单元的编号,Cn用于存储循环次数。通过对通用寄存器Sreg0、Sreg1的运算,得到循环的次数,并存储在Cn中。在链接过程中,汇编器和链接器通过公式(Tlable标识的执行包首地址-ZLP指令地址)/(最小指令编码长度/处理器最小寻址单元长度)得到ZLP指令与循环体起始执行包首指令之间的间距,并将其赋给ZLP指令编码中的无符号参数uimma中。同理,通过公式(Blable标识的执行包首地址-ZLP指令地址)/(最小指令编码长度/处理器最小寻址单元长度)得到ZLP指令与循环体结束执行包首指令之间的间距,并将其赋给ZLP指令编码中的无符号参数uimmb中。因此,只要处理器的指令编码长度满足处理器最小寻址单元长度的整数倍即可,不要求处理器的每条指令编码长度都一致。

图2A是本发明一实施例零开销循环标志指令编码示意图,图2B是本发明另一实施例零开销循环标志指令编码示意图。如图所示,ZLP指令总长度为L,其中指令标识位和并行位占据d位;循环单元编号Num占据n位,可支持2n个循环单元;循环次数计算模式M占据m位,可支持2

在一个实施例中,以某一处理器为例,该处理器的指令编码宽度为16位或32位,也可以多条指令并行发射,并行指令包指令宽度为64位。如图所示,ZLP指令宽度为32位,其中,标识位和并行位一共占据8位;该处理器支持2个循环单元,Num占1位;循环计数器支持4种运算模式,Mode占2位,如表1所示,可以得到Num和Mode分别对应的指令编码形式。Sreg0、Sreg1为处理器内的地址寄存器,分别占3位,uimma用于存储循环体首指令与ZLP指令的偏移量,占4位。uimmb用于存储循环体尾指令与ZLP指令的偏移量,占11位。

以上针对ZLP指令做了相应的描述,以下结合附图对零开销循环处理方法进行描述。

图3是本发明一个实施例处理器的结构示意图。如图所示,该处理器包括零开销循环单元10、指令地址计算发送单元20、指令等待单元21、指令接收及指令拆包单元22、指令译码单元23、寄存器访问单元24、执行单元25、写回单元26、指令存储单元30。

其中零开销循环单元的接收端与指令地址计算发送单元20、指令接收及指令拆包单元22、寄存器访问单元24的输出端相连接;零开销循环单元的发送端与指令地址计算发送单元20、指令接收及指令拆包单元22、寄存器访问单元24相连接。

指令地址计算发送单元20发送取指令地址给指令存储单元30。经过指令等待单元21后,指令接收及指令拆包单元22从指令存储单元30接收指令,并根据指令编码的规律对指令进行拆包处理,并将拆包后的指令发送给指令译码单元23。

指令译码单元主要负责指令的译码,当译码到ZLP指令后,根据ZLP指令携带的参数(uimma、uimmb)以及ZLP指令的地址计算循环体首指令包首指令的地址、循环体尾指令包首指令的地址,根据ZLP指令编码中的参数(Num)确定要使用的循环单元编号,根据ZLP指令中的Mode发送读取Sreg0、Sreg1的请求,以及具体的运算模式,并将上述信号一起发送给寄存器访问单元24。

寄存器访问单元24根据请求读取对应的寄存器Sreg0、Sreg1,并根据运算模式,计算出循环次数。结合指令译码单元23发送的循环单元编号(Num)以及循环体首指令包首指令的地址,循环体尾指令包首指令的地址,产生对应循环单元循环次数寄存器(Cn)、循环体首指令包首指令的地址(Tn)、循环体尾指令包首指令的地址(Bn)的写使能以及写数据,并发送给执行单元25。当寄存器访问单元24接收到循环计数器递减控制模块14发送的循环次数寄存器递减控制信号后,将其发送给执行单元25。

执行单元25主要负责处理器的指令的运算,根据处理器结构的不同,可能包含多个流级,多个计算宏模块。在对循环的处理中,执行单元25收到循环寄存器的写使能以及写数据,或循环次数递减信号后,按照处理器的流水级将这组信号依次往后续流水级传递,直到发送给写回单元26。

写回单元26负责控制处理器内寄存器的写回。当写回单元26收到循环寄存器写入的信号后,控制将循环寄存器的新值写入对应的寄存器中。当写回单元26收到循环次数寄存器递减信号时,控制对应的循环次数寄存器递减。

指令接收及指令拆包单元22主要负责对接收指令进行拆包,若处理器配置有循环缓冲,循环缓冲位于指令接收及指令拆包单元22。根据循环缓冲启动模块13发送的循环缓冲启动标志,控制单元内的循环缓冲启动。根据寄存器访问单元24发送的最新的循环寄存器的值,与当前拆包的指令进行比较,并控制将循环体指令存储到循环缓冲中,并控制从循环缓冲或指令缓冲区中读取指令,并拆包等。

在寄存器访问单元24中,若处理器还有其他的指令或其他的途径可以修改循环寄存器,并且处理器还设置有BYPASS路径,则由寄存器访问单元24保证,发送给零开销循环单元10的循环寄存器的值是最新的值,即包含BYPASS路径中优先级更高的值。零开销循环单元10需要读取最新的循环寄存器的结果。

零开销循环单元10包括:取指地址计算及控制模块11、指令缓冲读指针变换控制模块12、循环缓冲启动模块13、循环计数器递减控制模块14。

当任意循环单元的循环次数寄存器的值大于0时,零开销循环单元10开启工作。若同时有多个循环次数寄存器大于0,说明存在循环交叠或循环嵌套等情况。

取指地址计算及控制模块11与寄存器访问单元24及指令地址计算发送单元20连接,接收来自寄存器访问单元24发送的最新的循环寄存器的值,并将开启的循环单元对应的循环体尾指令包的首地址与指令地址计算发送单元20发送的当前取指令地址PC_fetch进行比较。以循环单元0为例,若:PC

指令缓冲读指针变换控制模块12与寄存器访问单元24及指令接收及指令拆包单元22连接,接收来自寄存器访问单元24发送的最新的循环寄存器的值,并将开启的循环单元对应的循环体尾指令包的首地址与指令接收及指令拆包发送单元22发送的当前读指令地址PC_read进行比较。以循环单元0为例,若:PC

循环缓冲启动模块13与寄存器访问单元24及指令接收及指令拆包单元22连接。若处理器配置有循环缓冲,循环缓冲启动模块13接收来自寄存器访问单元24发送的最新的循环寄存器的值,开启循环单元的循环体长度与循环缓冲的长度进行比较,以循环单元0为例,若

循环计数器递减控制模块14与寄存器访问单元24及指令接收及指令拆包单元22连接。循环计数器递减控制模块14接收来自寄存器访问单元24发送的最新的循环寄存器的值,当循环次数大于0时,启动循环体结束地址与指令接收及指令拆包单元22发送的当前拆包指令地址的比较。以循环单元0为例,若PC

在上述流程中,循环寄存器作为处理器内的通用寄存器,而不是零开销循环单元10的专用寄存器。循环寄存器的写回是由写回单元26控制完成的,而不是在寄存器访问单元24计算得到循环寄存器的结果时立刻写回。此方法对循环寄存器的写回处理等同于内核其他通用寄存器,因而处理器的指令集中,除了ZLP指令,其他指令也可以访问循环寄存器,如可通过寄存器转移类指令或存储器加载指令等对其进行读写操作。进一步的,若零开销循环单元启动工作后,处理器遇到中断、异常或其他特殊事件时,可以通过寄存器转移类指令和访存类指令,将循环寄存器的值进行现场保护,待事件服务程序完成后,再通过以上指令组合恢复循环执行现场。实现了零开销循环单元对中断、异常等事件的支持。

图4是本发明实施例处理器的零开销循环处理方法的流程图,该方法包括步骤401~419:

在步骤401:指令译码时,根据指令编码中的标识位、并行位编码识别循环标志指令ZLP。若检测到ZLP指令,进入步骤402,否则停留在步骤401。

步骤402:对ZLP指令进一步译码,计算循环参数。根据循环标志指令ZLP携带的操作数信息,计算循环参数,并产生相关的循环寄存器的写信号。根据操作数uimma和ZLP指令的地址,计算出循环体首执行包的首指令地址;根据操作数uimmb和ZLP指令的地址,计算出循环体尾执行包的首指令地址;根据寄存器编号Sreg0、Sreg1申请读取对应的寄存器,获取寄存器值后,根据操作数Mode,计算出循环次数,根据操作数Num确定循环参数需要写入的循环寄存器组编号。然后进入步骤403。

步骤403:对循环次数进行比较。若任意一个循环单元的循环次数大于0,则进入步骤404,否则停留在步骤403。

步骤404:启动零开销循环单元10,然后进入步骤405。

步骤405:判断处理器是否配置有循环缓冲,若有,进入步骤406,否则,进入同时步骤412和417,分别控制取指令和读指令的流程。。

步骤406:进一步判断循环次数大于0的循环单元对应的循环体长度是否小于或等于循环缓冲长度。即循环体是否能存入循环缓冲之中。具体计算公式为

步骤407:循环缓冲启动,在步骤407到411中,循环缓冲读写的具体控制由循环缓冲所在的模块具体控制,实现方法很多,在此不进行具体的限制。然后,进入步骤408。

步骤408:将循环体指令加载到循环体中。加载完毕后,进入步骤409。

步骤409:从循环体中读取循环体的指令,并执行。然后进入步骤410。

步骤410:判断循环体是否执行完毕,若是,进入步骤411,否则返回步骤409。

步骤411:清空循环缓冲,循环体执行完毕。步骤412:取指令地址的判断。获取当前发送给存储器的取指令地址,并将它与循环单元的尾指令包的首指令地址进行比较,若PC

步骤413:取指令模块发送的下一个取指令地址等于当前取指令地址与取指令宽度的累加。并在下一时钟周期,返回步骤412。

步骤414:进一步判断对应的循环单元循环次数寄存器的值是否大于0,若是,说明循环体还需要反复执行,进入步骤415,否则进入步骤416。

步骤415:取指令模块发送的下一个取指令地址为对应循环体的首执行包的首指令地址。并在下一时钟周期,返回步骤412。步骤416:对应循环体的取指令过程完成。此时,可根据处理器的情况,选择继续向后取指令直到指令缓冲满;或者暂停取指令,等待步骤421循环体执行完成后,再继续向后取指令。

步骤417:读指令地址的判断。获取当前拆包的执行包首指令的地址,并将它与循环单元的尾指令包的首指令地址进行比较,若PC

步骤418:进一步判断对应的循环单元循环次数寄存器的值是否大于0,若是,说明循环体还需要反复执行,进入步骤420,否则进入步骤421。

步骤419:继续读取当前的循环体并执行:控对应的循环体指令缓冲读指针正常的累加变换,并保持对应的循环寄存器值不变。在下一时钟周期,返回步骤417。

步骤420:控制指令缓冲读指针切换到对应循环体首执行包首指令所在指令包的位置;控制对应循环体的循环次数寄存器减1。然后,在下一时钟周期,返回步骤417。

步骤421:对应的循环体执行完毕。指令缓冲读指针正常的累加变换,即离开循环体,读取循环体外的指令继续执行;同时控制对应循环的循环寄存器清0。

本发明实施例零开销循环处理方法的循环指令丰富,通过采用寄存器运算的方式得到循环次数,来支持循环次数或循环步长动态变化的循环体,同时可支持的循环次数不受指令编码位数的限制,范围更广。循环参数寄存器采用内核通用寄存器的读写方式,还可以支持其他指令对循环参数寄存器的修改,从而支持中断、异常等事件的现场保护和现场恢复;还支持具有不同指令宽度的处理器,支持超长指令字处理器,支持配置有循环缓冲的处理器;并且,可以通过配置循环参数寄存器对的数目实现对多重嵌套循环的支持。

表1本发明一实施例零开销循环标志类指令关键位编码与指令格式对应表

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号