一种处理器装置及其循环处理方法

文档序号:6435881阅读:284来源:国知局
专利名称:一种处理器装置及其循环处理方法
技术领域
本发明涉及一种处理器技术,尤其涉及一种处理器装置及其循环处理方法。
背景技术
随着计算机和信息技术的飞速发展,数字信号处理(Digital Signal Processing, DSP)技术应运而生并得到迅速的发展。DSP处理器则广泛的应用于数据密集型计算类应用,如图像、视频编码等。这些应用的计算复杂性和实时性特点对处理器的性能提出了更高的要求。而这些应用大部分计算都集中在循环以及循环嵌套中完成。在DSP的应用中,如果DSP处理器能够实现零开销循环,将可以大大提高DSP处理器的性能。所谓零开销循环是DSP处理器在执行循环时,不用花时间去检查循环计数器的值就能执行一组指令,由硬件完成循环跳转和循环计数器的增减。现有的零循环开销技术大多不支持超长指令字(Very Long Instruction Word, VLIff)结构的DSP处理器,而且增加的循环指令众多,硬件实现方法复杂。所支持的循环体内指令数目和循环次数有限,循环的控制不能完全由硬件实现,循环开销依然存在。如2010年12月6-8号在成都举办的第18届智能信号处理与通信系统国际会议(ISPACS)上 Zhenqi Wei, Peilin Liu, Ji Kong, Rendong Ying 等人发表的《Low-Power Microarchitecture of Zero-Overhead Nested Loops in Embedded Processors))文章中公开了通过增加专用的循环指令L00P. C,LOOP. B, LOOP. R,LOOP. BR来通知硬件接下来循环体的指令数目和循环次数,或者刷新硬件中循环计数器等专用寄存器的值。通过增加硬件单元,包括一个循环寄存器堆栈和循环缓存器,其中循环寄存器堆栈用于存储循环体的起始地址、结束地址、当前循环PC、循环次数和循环体是否可用、是否使用循环缓冲的标志位,循环缓存器用于存储小循环的循环指令。文章所公开的方法虽然能较好的解决零循环开销的问题,但是增加的指令较多,虽然文章提出其支持循环嵌套,但是没有提出具体的硬件实现方式。而且该方法只适用于单发射的DSP处理器结构,不适用于具有VLIW结构的高性能DSP处理器。如计算机期干U IEEE Transactions on computers, Vol 57,NO. 2,February 2008 中 Nikolaos Kavvadias and Spirdon Nikoladis 等人发表的《Elimination of overhead operations in complex loop structures for embedded microprocessors))文章中提到通过任务控制循环图(Task Control-flow Graph,TCFG)优化应用程序的循环节点,编译产生优化后的代码。增加的循环硬件模块包括循环参数表、索引计算单元和任务选择单元。 可以支持循环嵌套,以及多入口和多出口循环。多入口和多出口循环主要用于控制密集型循环,而大多数程序的计算密集型循环控制逻辑简单,不存在多入口和多出口。而且这种方法只支持单发射的处理器结构,而且不能被传统编译器优化,硬件结构复杂。如德州仪器(Texas Instruments, Tl)公司DSP芯片C64X+系列支持VLIW,主要采用软件流水机制减少循环开销。硬件部分包括1个缓冲器和两个计数器,另外还有7条相关指令。其中,缓冲器可以用来存储最多14个指令执行包的循环体代码,使得循环时不用每次访问内存重新取值,节省功耗和存储访问带宽。在程序编译过程中,编译器会自动将可以放入缓冲器的循环指令用特殊指令标识,用MVC指令将循环次数装载到内部循环计数器,循环代码的开始和结束分别用指令SPLOOP和SPKERNEL指令标识。这样循环体执行结束时,其硬件机制可以控制代码从循环体开始处继续执行,减少了分支指令的开销。但是该方法中,对计数器的写入和读取,循环体的开始和结束都需要通过指令实现,浪费指令周期。循环次数由循环计数器的值决定,而且从加载循环计数器值到它的内容可以使用需要 4个时钟周期,因而要求在SPLOOP指令前4个周期加载循环计数器。这种方法对指令顺序要求严格,而且这4个周期的间隔通道需要通过插入空指令来实现,浪费指令周期。

发明内容
本发明的目的是通过在超长指令字的处理器中增加一条指令和一个循环单元,解决超长指令字的处理器循环控制不能完全由硬件实现,循环执行开销大的问题。为实现上述目的,本发明一方面提供了一种超长指令字的处理器装置,包括循环单元、地址发送单元和指令译码单元,其中循环单元的接收端与译码单元的输出端相连接, 循环单元的发送端与地址发送单元相连接,当指令译码单元译码到循环标志指令(L P指令)时,则将循环标志指令携带的循环参数信息发送给循环单元,循环单元进一步包括循环体数据计算模块、循环计数模块、存储模块和取指地址计算模块,其中循环体数据计算模块用于接收指令译码单元发送的循环参数,并根据循环标志指令的地址和循环参数得到循环体数据循环起始地址、循环结束地址和循环次数;存储模块与循环体数据计算模块连接,用于存储循环体数据;取指地址计算模块与存储模块连接,用于读取存储模块得到当前循环体数据当前循环起始地址、当前循环结束地址和当前循环次数,根据当前取指地址得到下一取指地址,若下一取指地址大于当前循环结束地址并且当前循环次数非0,则产生本次循环完成标志信号,更改当前取指地址为当前循环起始地址并发送给地址发送单元,否则将下一取指地址作为当前取指地址发送给地址发送单元;循环计数模块连接指令取指地址计算模块和存储模块,用于读取存储模块得到当前循环次数,根据本次循环结束标志信号更新当前循环次数为当前循环次数减1并存入所述存储模块。本发明另一方面提供了一种超长指令字处理器的循环处理方法,该方法的步骤包括(1)获取循环标志指令;(2)提取循环标志指令携带的循环参数;(3)根据循环标志指令的地址和循环参数得到并保存循环体数据循环起始地址、循环结束地址、循环次数; 根据循环标志指令的地址得到当前取指地址;(4)将保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址、当前循环次数;( 根据当前取指地址获取指令并执行;根据当前取指地址得到下一取指地址,判断下一取指地址是否大于当前循环结束地址,如否,则将下一取指地址作为当前取指地址,重复本步骤;若是,则判断当前循环次数是否是0,若不是0,则更新当前循环次数为所述当前循环次数减1,将当前循环起始地址作为当前取指地址,重复本步骤,若是0,则将下一取指地址作为当前取指地址。根据本发明的处理器装置及其循环处理方法,循环执行完全由硬件实现,无需通过指令实现循环计数器的赋值和修改,能够实现超长指令字的处理器循环零开销,可以大大提高超长指令字处理器的性能。


通过以下结合附图以举例方式对本发明的实施方式进行详细描述后,本发明的其他特征、特点和优点将会更加明显。图1是循环标志指令示意图;图IA是本发明一实施例循环标志指令编码示意图;图IB是本发明另一实施例循环标志指令编码示意图;图2A是本发明一个实施例超长指令字的处理器结构示意图;图2B是本发明另一个实施例超长指令字的处理器结构示意图;图3是本发明实施例处理器的循环处理方法流程图。
具体实施例方式本发明通过在现有技术的超长指令字的处理器中增加一条循环标志指令(LP指令)和一个循环单元实现了超长指令字的处理器循环执行零开销。针对LP指令的编码格式以及该指令的定义做如下描述。LP指令语法中带有一个标号(label),一个无符号参数(uimmn)和一个并行标志位符号。标号(label)代表该循环体结束后下一个指令执行包的标号,无符号参数(uimmn) 代表该循环体内的循环次数,并行标志位符号代表本条指令和下一条指令是否同属于一个指令执行包,即是否可以并行执行。程序中每个指令执行包内可包括1到N条指令,N为该超长指令字处理器支持的多发射数目。如图1所示,可以通过自动或手动标识循环体内容, 循环次数,在循环体结束后下一个指令执行包前插入相应的标号(label),并且在循环体前插入指令LP label,uimmn. 0其中参数label等于循环体结束后下一个指令执行包前插入的标号名称。在链接过程中,汇编器和链接器通过(label指令包的首地址-LP指令的地址)/ (指令编码长度/处理器最小寻址单元长度)-1得到循环体内指令数目,并将其赋给 LP指令编码中无符号参数(ui_)。无符号参数(uimmn)代表该循环体内的循环次数。“.,, 是并行标志位符号,可自己定义。此处“.”表示该指令与后面的指令不属于一个指令执行包,不能并行执行。图IA是本发明一实施例循环标志指令编码示意图。如图所示,LP指令编码总长度为Linst,其中指令标识位占a位;并行位等占b位;LP指令第一操作数Uimmm占m位,用于存储循环体中的指令的数目,该指令的数目由公式(ui_+l)*(LinstAt印)+lp_pc = PC_ label计算得到,其中lp_pc代表LP指令的地址,PC_label代表循环体结束后下一个指令执行包的首指令地址;第二操作数uimmn占η位,用于存储循环体的循环次数ftep代表处理器的最小寻址单元位宽,例如按字节寻址的处理器的最小寻址单元位宽为8比特,按字寻址的处理器的最小寻址单元位宽为32比特。在指令译码阶段,通过译码可以将循环体中的指令数目ui_信息和循环的次数 uimmn信息传递给循环单元做相应的处理。针对不同的处理器,其LP指令编码总长度Z,以及标识位和并行位等所占的长度都不一致,但都是固定的,而m+n = Linst-a-b,具体m和η 的长度可以根据不同的处理器编码格式进行调节,一般η >m。由于超长指令字的处理器应用中,密集计算的循环体内容都不会很大,但循环次数却可能会很大。可以支持的循环体内指令条数为2n,支持循环次数为2m。要求LP指令必须为其所在指令执行包中的最后一条指令。在一个实施例中,以某一超长指令字的处理器设计为例。LP指令编码如图IB所示,LP指令编码总长度为32比特,其中标识位占5比特;pr占3比特,代表推断寄存器的索引;ρ占1比特,代表并行标志位;操作数imm9占9比特,代表循环体内的指令数目高达 29 ;操作数imml4占14比特,代表循环次数高达214。根据操作数imm9、操作数imml4和当前LP指令所在指令执行包的首指令地址和该指令执行包内指令数目可以计算出循环体的开始的指令地址和结束的指令地址。以上针对超长指令字的处理器中增加的LP指令做了相应描述,以下结合附图针对DSP处理器进行描述。图2A是本发明一个实施例超长指令字的处理器结构示意图。如图2A所示,该处理器包括循环单元10、地址发送单元15、指令接收单元16、指令拆包单元17、指令译码单元 18和指令存储器20,其中循环单元10的接收端与指令译码单元18的输出端相连接,循环单元10的发送端与地址发送单元15相连接。指令接收单元I6根据地址发送单元15发送的取指地址从指令存储器20中接收指令,由指令拆包单元17对指令接收单元16接收的指令进行拆包处理,并将拆包处理后的指令发送给指令译码单元18。当指令译码单元18译码到循环标志指令后,则将循环标志指令携带的循环参数发送给循环单元10进行处理,循环参数包括循环体中指令数目(Uimmm) 和循环次数(uimmn)。其中循环体中指令数目和循环次数通过循环标志指令编码中的第一操作数和第二操作数获取。循环单元10根据接收到的循环参数信息以及接收的指令译码单元18当前正在译码的指令执行包中的指令数目(N)、正在译码的指令执行包首指令地址 (PC_current)、LP指令标志(IpJable)。根据循环标志指令所在指令执行包的首指令地址和所在指令执行包中指令数目得到该循环标志指令的地址,根据循环标志指令的地址和循环参数得到并保存循环体数据循环起始地址、循环结束地址和循环次数。按照先进后出顺序将保存的循环体数据读出作为当前循环体数据当前循环起始地址、当前循环结束地址和当前循环次数;根据当前循环体数据和地址发送单元15发送的取指地址(pc_fetch),计算并获得下一周期指令的取指地址再发送给地址发送模块15。图2B是本发明另一个实施例超长指令字的处理器结构示意图。如图2B所示,处理器的循环单元10进一步包括循环体数据计算模块11、循环计数模块12、存储模块13和取指地址计算模块14。循环体数据计算模块11与存储模块13和指令译码单元18连接,接收来自指令译码单元18发送的循环参数,上述循环参数包括循环体中指令数目(Uimmm)和循环次数 (uimmn)。此外循环体数据计算模块11还接收译码单元18当前正在译码的指令执行包中的指令数目(N)、正在译码的指令执行包首指令地址(PC_CUrrent)、LP指令标志(IpJable), 此外循环体数据计算模块11还接收存储模块13的信号counter
寄存器的值。循环体数据计算模块11通过上述接收的循环参数信息生成循环使能信号(l00p_en),当LP指令标志 (IpJable)有效时,置循环使能信号有效,当从存储模块13中读出的COimter
寄存器为0时,说明循环(对于嵌套循环而言指最外层循环)执行完毕,置循环使能信号无效,其余情况下循环使能信号保持不变。循环体数据包括循环起地址、循环结束地址和循环次数, 其中根据公式:lp_pc = PC_current+(N-l)*(Linst/St印),计算出LP指令的地址(lp_pc);根据公式lpC_Start = lp_pc+(LinstAt印),计算出循环体的起始地址(lpC_Start);根据公式lpc_end = lp_pc+(ui_+l)* (LinstAt印),计算出循环体的结束地址(lpc_end);根据公式counter = uimmn,得到循环次数(counter)。循环体数据计算模块11将得到的循环体数据和循环使能信号和LP指令标志一起发送给存储模块13,同时将循环使能信号发送给循环计算模块12。存储模块13连接循环体数据计算模块11和取指地址计算模块14,存储由循环体数据计算模块11发送的循环体数据循环体的起始地址、循环体的结束地址和循环体的循环次数。存储模块13选用FIL0(First In Last Out,先进后出)存储模块,通过该存储模块可支持多层嵌套循环,设支持的嵌套循环层数为N,那么存储模块的深度就必须为N。以 N = 4为例,如表一所示,支持4层嵌套循环。存储模块内含3组寄存器,分别为lpC_start 寄存器、lpc_end寄存器和counter寄存器,分别用于存储循环体起始地址、循环体结束地址和循环体循环次数。表一
权利要求
1.一种超长指令字的处理器装置,其特征在于包括循环单元(10)、地址发送单元 (15)和指令译码单元(18),所述循环单元(10)的接收端与所述指令译码单元(18)的输出端相连接,所述循环单元(10)的发送端与所述地址发送单元(1 相连接,当所述指令译码单元(18)译码循环标志指令后,将所述循环标志指令携带的循环参数发送给所述循环单元(10),所述循环单元(10)进一步包括循环体数据计算模块(11)、循环计数模块(12)、存储模块(1 和取指地址计算模块(14),其中循环体数据计算模块(11),用于接收所述指令译码单元(18)发送的循环参数,并根据所述循环标志指令的地址和循环参数得到循环体数据循环起始地址、循环结束地址和循环次数;存储模块(13),与所述循环体数据计算模块(11)连接,用于存储所述循环体数据;取指地址计算模块(14),与所述存储模块(1 连接,用于读取所述存储模块(13)得到当前循环体数据当前循环起始地址、当前循环结束地址和当前循环次数,根据当前取指地址得到下一取指地址,若所述下一取指地址大于所述当前循环结束地址并且所述当前循环次数非0,则产生本次循环完成标志信号,更改当前取指地址为所述当前循环起始地址并发给地址发送单元(15),否则将所述下一取指地址作为当前取指地址发送给地址发送单元 (15);循环计数模块(12),连接所述指令取指地址计算模块(14)和所述存储模块(13),用于读取所述存储模块(1 得到当前循环次数,根据所述本次循环结束标志信号更新当前循环次数为所述当前循环次数减1并存入所述存储模块(13)。
2.根据权利要求1所述的装置,其特征在于,按照先进后出顺序存储和读出所述存储模块(1 的循环体数据;所述取指地址计算模块(14)还用于当所述当前取指地址大于所述当前循环结束地址以及所述当前循环次数是0,产生当前循环结束标志信号;所述存储模块(1 还用于根据所述当前循环结束标志信号将存储的对应循环体数据清除,然后判断所述存储模块(13)中是否还有保存的循环体数据,若有,则所述取指地址计算模块(14)按照先进后出顺序读取所述存储模块(1 得到当前循环体数据。
3.根据权利要求1所述的装置,其特征在于所述装置还包括指令接收单元(16)、指令拆包单元(17)和指令存储器(20),所述指令接收单元(16)根据所述地址发送单元(15)发送的取指地址从所述指令存储器00)中接收指令,所述指令拆包单元(17)对接收的指令进行拆包,将拆包后的指令发送给所述指令译码单元(18)。
4.根据权利要求1所述的装置,其特征在于所述循环参数包括循环体中指令数目和循环次数。
5.根据权利要求4所述的装置,其特征在于所述循环标志指令携带的循环体中指令数目由链接器计算并赋给。
6.根据权利要求4所述的装置,其特征在于所述循环标志指令是其所在指令执行包的最后一条指令;根据所述循环标志指令地址和所述循环参数得到循环体数据是通过循环标志指令地址+指令编码长度/处理器最小寻址单元长度得到循环起始地址,通过循环标志指令地址 + (循环体中指令数目+1) X (指令编码长度/处理器最小寻址单元长度)得到循环结束地址,循环次数是所述循环标志指令携带的循环次数。
7.一种超长指令字处理器的循环处理方法,其特征在于包括以下步骤1)获取循环标志指令;2)提取所述循环标志指令携带的循环参数;3)根据所述循环标志指令的地址和所述循环参数得到并保存循环体数据循环起始地址、循环结束地址和循环次数;根据所述循环标志指令的地址得到当前取指地址;4)将所述保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址和当前循环次数;5)根据所述当前取指地址获取指令并执行;根据所述当前取指地址得到下一取指地址,判断所述下一取指地址是否大于所述当前循环结束地址,如否,则将所述下一取指地址作为当前取指地址,重复本步骤;若是,则判断所述当前循环次数是否是0,若不是0,则更新当前循环次数为所述当前循环次数减1,将所述当前循环起始地址作为当前取指地址,重复本步骤,若是0,则将所述下一取指地址作为当前取指地址。
8.根据权利要求7所述的方法,其特征在于,步骤4)进一步包括按照先进后出顺序将所述保存的循环体数据作为当前循环体数据,得到当前循环起始地址、当前循环结束地址、当前循环次数;步骤幻进一步包括若所述下一取指地址大于所述当前循环结束地址并且所述当前循环次数是0,则清除保存的对应循环体数据;步骤幻之后还包括步骤判断是否有保存的循环体数据,若有,则转到步骤4)。
9.根据权利要求7所述的方法,其特征在于所述循环参数包括循环体中指令数目和循环次数。
10.根据权利要求9所述的方法,其特征在于所述循环标志指令携带的循环体中指令数目由链接器计算并赋给。
11.根据权利要求9所述的方法,其特征在于所述循环标志指令是其所在指令执行包的最后一条指令;根据所述循环标志指令地址和所述循环参数得到循环体数据是通过循环标志指令地址+指令编码长度/处理器最小寻址单元长度得到循环起始地址,通过循环标志指令地址 + (循环体中指令数目+1) X (指令编码长度/处理器最小寻址单元长度)得到循环结束地址,循环次数是所述循环标志指令携带的循环次数。
全文摘要
本发明公开了一种超长指令字的处理器装置及其循环处理方法,该装置包括循环单元、地址发送单元和指令译码单元,其中循环单元包括循环体数据计算模块、循环计数模块、存储模块和取指地址计算模块。该方法包括获取循环标志指令;提取循环标志(LP)指令携带的循环参数;根据循环标志指令的地址和循环参数得到并保存循环体数据;将保存的循环体数据作为当前循环体数据;根据所述当前取指地址获取指令并执行;根据当前取指地址得到下一取指地址,并通过比较下一取指地址和循环体数据得到当前取指地址。本发明解决了超长指令字的处理器循环的控制不能完全由硬件实现,且循环执行开销大的问题,从而大大提高了超长指令字的处理器性能。
文档编号G06F9/30GK102508635SQ20111031909
公开日2012年6月20日 申请日期2011年10月19日 优先权日2011年10月19日
发明者侯朝焕, 张铁军, 洪缨, 王东辉, 王琪 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1