用于处理器的适于短操作数的扩展指令执行方法及装置与流程

文档序号:15229622发布日期:2018-08-21 19:13阅读:211来源:国知局

本发明涉及微处理器的体系结构技术领域,具体地说,本发明涉及一种用于处理器的适于短操作数的扩展指令执行方法及装置。



背景技术:

随着计算技术的发展,为了满足各种新应用的需求,提高某一方面的性能,许多厂商扩展了指令集。例如,为了提高图像和多媒体之类软件的性能,增加了单指令多数据流指令;为了加密解密的速度,增加了加密解密类指令。这种对指令集的扩展使得处理器的指令数目快速增加。例如,x86架构的指令在2015年已经达到1300条;armv8架构的指令达到1070条。指令数目快速增加给指令编码带来问题。

x86架构本身使用变长指令编码,增加编码前缀可以扩展新的指令,但增加编码前缀会增加静态代码的内存占用和动态取指令的传输。而对于risc架构的指令集,指令扩展大多使用之前保留的或非法的指令进行扩展编码,但这些编码资源毕竟有限。可以想象,随着新的计算需求的提出,还需要扩展出大量的新的指令。例如,针对当前非常火热的深度学习,已经有学者提出了相关的指令集,相信在不久的将来,各厂商也需要扩展相应的指令。这就导致指令集原始设计中可用于指令扩展的保留的(或非法的)指令资源非常紧张。

另一方面,现在的寄存器文件大多为64位,而许多应用中的操作数并不需要用64位表示。例如用于测试cpu性能的spec2000标准应用集中,40%的操作数可以只用16位表示,还有45%的操作数据用32位表示,只有15%的操作数只能用64位表示(可参考文献ergino,balkand,ghosek,etal.registerpacking:exploitingnarrow-widthoperandsforreducingregisterfilepressure[c]//microarchitecture,2004.micro-372004.37thinternationalsymposiumon.ieee,2004:304-315.的记载)。因此很多操作数并不需要用到一个寄存器项的所有位。现有的一些研究基于这一特点,按位划分寄存器文件,将一个寄存器中没有用的位分配给其它操作数使用,这种方法使寄存器宽度变窄,相同物理面积下增加了寄存器项的个数,减少寄存器的功耗。然而这种方案需要检测或预测操作数宽度(可参考文献ahmadiansn,fazelim,ghalatynf,etal.value-awarelow-powerregisterfilearchitecture[c]//computerarchitectureanddigitalsystems(cads),201216thcsiinternationalsymposiumon.ieee,2012:44-49.),这样就需要设计检测或预测操作数宽度的逻辑单元,从而带来额外的开销。



技术实现要素:

因此,本发明的任务是克服现有技术的上述缺陷,提供一种不需增加编码前缀、且不需要消耗预留的用于指令扩展的编码资源的指令扩展解决方案。

根据本发明的一个方面,提供了一种用于处理器的适于短操作数的扩展指令执行方法,包括下列步骤:

1)取出指令,所述指令是由处理器的原始长操作数指令扩展而得的扩展指令;所述原始长操作数指令包括至少两个用于指定操作数位置的域,所述操作数包括源操作数和目的操作数;其中,将原始长操作数指令的至少两个用于指定操作数位置的域中的一个,重定义为指定两个短操作数位置的域,从而得到所述扩展指令,并且这两个短操作数分别存储于所指定寄存器的高位区段和低位区段;

2)对指令进行译码,将扩展指令分解成对应于一系列微操作的控制信号;

3)将步骤2)所得的控制信号派发,基于这些控制信号寻址并取出短操作数,执行原始长操作数指令对应的运算,然后再将运算结果存入扩展指令所指定的寄存器。

其中,所述步骤1)中,所述原始长操作数指令具有两个源操作数,所述扩展指令的指定存入同一寄存器的所述两个短操作数是两个源操作数。

其中,所述步骤3)中,所述的取出短操作数是在寻址到扩展指令所指定的源操作数存储寄存器后,分别从该寄存器的高位区段和低位区段取出两个作为源操作数的短操作数。

其中,所述步骤1)中,所述原始长操作数指令仅具有一个源操作数,所述扩展指令的指定存入同一寄存器的所述两个短操作数是一个源操作数和一个目的操作数。

其中,所述步骤3)中,所述的取出短操作数是在寻址到扩展指令所指定的存放短操作数的寄存器后,从该存放短操作数的寄存器的预先定义的一个区段取出一个作为源操作数的短操作数,所述的将运算结果存入是将运算结果存入扩展指令所指定的存放短操作数的寄存器的另一个区段,所述区段是高位区段或低位区段。

其中,所述步骤1)中,将原始长操作数指令的至少两个用于指定操作数位置的域中的另一个,作为扩展指令的扩展编码域。

根据本发明的另一方面,还提供了一种用于处理器的适于短操作数的扩展指令执行装置,包括:

取指单元,用于取出指令,所述指令是由处理器的原始长操作数指令扩展而得的扩展指令;所述原始长操作数指令包括至少两个用于指定操作数位置的域,所述操作数包括源操作数和目的操作数;其中,将原始长操作数指令的至少两个用于指定操作数位置的域中的一个,重定义为指定两个短操作数位置的域,从而得到所述扩展指令,并且这两个短操作数分别存储于所指定寄存器的高位区段和低位区段;

译码单元,用于对指令进行译码,将扩展指令分解成对应于一系列微操作的控制信号;以及

派发单元,用于将所述译码单元所得的控制信号派发,基于这些控制信号寻址并取出短操作数,执行原始长操作数指令对应的运算,然后再将运算结果存入扩展指令所指定的寄存器。

其中,所述派发单元还用于:在寻址到扩展指令所指定的源操作数存储寄存器后,分别从该寄存器的高位区段和低位区段取出两个作为源操作数的短操作数。

其中,所述派发单元还用于:在寻址到扩展指令所指定的存放短操作数的寄存器后,从该存放短操作数的寄存器的预先定义的一个区段取出一个作为源操作数的短操作数;以及将运算结果存入扩展指令所指定的存放短操作数的寄存器的另一个区段,所述区段是高位区段或低位区段。

与现有技术相比,本发明具有下列技术效果:

1、本发明不需增加编码前缀、不需要消耗预留的用于指令扩展的编码资源,即能够增加实现短操作数运算的扩展指令。

2、本发明的扩展指令在实现短操作数运算的同时,还增加了该指令的预留位,为进一步的功能扩展留下了空间。

3、本发明的扩展指令能够提高了逻辑寄存器和物理寄存器的利用率,原本2个源操作数需要占用2个独立的物理寄存器,但是现在面向短操作数时,2个源操作数可以共享同一个物理寄存器。在总寄存器数不变的前提下,变相增加逻辑寄存器和物理寄存器的可用数量,即利用率。

4、本发明的扩展指令能够减少寄存器的读写次数或范围,达到降低功耗的目的。

附图说明

以下,结合附图来详细说明本发明的实施例,其中:

图1示出了可以基于短操作数扩展指令的指令类型;

图2示出了图1中类型1指令具体对应的指令格式;

图3示出了类型1指令扩展方式,(a)为扩展前指令格式,(b)为扩展后指令格式,(c)为扩展前寄存器映射方式,(d)为扩展后寄存器映射方式;

图4示出了类型2指令扩展方式,(a)为扩展前指令格式,(b)为扩展后指令格式,(c)为扩展前寄存器映射方式,(d)为扩展后寄存器映射方式;

图5示出了类型3指令扩展方式,(a)为扩展前指令格式,(b)为扩展后指令格式,(c)为扩展前寄存器映射方式,(d)为扩展后寄存器映射方式;

图6示出了类型4指令扩展方式,(a)为扩展前指令格式,(b)为扩展后指令格式,(c)为扩展前寄存器映射方式,(d)为扩展后寄存器映射方式;

图7示出了类型5指令扩展方式,(a)为扩展前指令格式,(b)为扩展后指令格式,(c)为扩展前寄存器映射方式,(d)为扩展后寄存器映射方式;

图8示出了类型6指令扩展方式,(a)为扩展前指令格式,(b)为扩展后指令格式,(c)为扩展前寄存器映射方式,(d)为扩展后寄存器映射方式。

具体实施方式

指令是计算机规定执行操作的类型和操作数的基本命令,它由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字和特征码。现有的处理器(即cpu)通常基于流水线结构来执行指令。因此在对指令进行扩展时,也需要满足处理器指令执行的流水线结构的要求,能够被该流水线结构所识别和执行。流水线包括:取指、译码、派发、取操作数、发送至指令队列、执行运算以及存储运算结果等步骤。

根据本发明的一个实施例,提供了一种基于上述流水线结构的由原始的长操作数运算指令扩展而成的短操作数运算指令以及处理器执行该扩展后的指令的方法,该方法实现了以较少的寄存器和较少的寻址次数和范围来完成短操作数运算,从而降低功耗,提升资源利用率,提升cpu性能。并且该扩展不占用指令集预留的指令操作码。

图1示出了本实施例中处理器执行扩展指令的方法的流程,包括下列步骤:

步骤1:取指。即取出需要执行的指令。本实施例,需要执行的指令是基于原始长操作数指令扩展而成的指令。目前,64位处理器已成为主流的通用处理器,其寄存器文件大多为64位,而许多应用中的操作数并不需要用64位表示。例如用于测试cpu性能的spec2000标准应用集中,40%的操作数可以只用16位表示,还有45%的操作数据用32位表示,只有15%的操作数只能用64位表示(可参考文献ergino,balkand,ghosek,etal.registerpacking:exploitingnarrow-widthoperandsforreducingregisterfilepressure[c]//microarchitecture,2004.micro-372004.37thinternationalsymposiumon.ieee,2004:304-315.的记载)。因此很多操作数并不需要用到一个寄存器项的所有位。本文中把这些位数较少的操作数(例如32位的操作数、16位的操作数)称为短操作数,把位数较多的操作数(例如64位的操作数)称为长操作数。

处理器本身的指令集是基于长操作数而设计的,当应用只需要对短操作数进行运算时,处理器的资源利用率不高。如果要对指令集进行扩展,现有技术中典型的扩展方法就是添加新指令。这就要用到指令集中的预留操作码。利用预留码(即预留的操作码)来实现新指令虽然简捷方便,但是在实际应用中有局限性问题,因为指令集的预留码一般都很有限,这些预留码很可能已经被其它功能扩展所占用。基于上述分析,本实施例在原长操作数运算指令的基础上进行修改,得到能够实现短操作数运算功能的扩展指令。

本实施例中以power指令集架构指令格式来说明指令扩展方法,但这种实施方式并不只限于power指令集。图1示出了power指令集中多个类型的能够针对短操作数运算进行扩展的原长操作数运算指令。图中列出了6种类型,图中opcd域为指令的主操作码,rs域与rb域指定源操作数寄存器,rt域指定目标寄存器,类型1指令11与类型6指令16中ra域指定源操作数寄存器,而类型2指令12,类型3指令13与类型4指令14中ra域指定目标寄存器。图中符号“?”表示的域可能由一个或多个域构成。格式满足图1所示的6种格式即可被作为待扩展的指令,不需要考虑“?”域表示的内容。

图2示出了图1中类型1指令具体对应的指令格式,包括x-form,xo-form,evx-form和evs-form四类。图2中xo21为扩展操作码域,指令中/22表示此位为保留位。eh23表示指令是loadandreserve指令,rc24表示是否改变条件寄存器的域,oe25表示指令是否设置xer的ov与so位。bfa26表示将cr或fpscr的一个域作为源。类型1指令中“?”域就是由这些域构成。其它5种类型指令与类型1指令类似,具体各指令类型结构参考相应指令集架构用户手册,本文中不再一一赘述。

图3示出了类型1指令的扩展方式。图3(a)示出扩展前类型1指令的格式。参考图3(a),类型1指令用三个域指定操作数:ra域32,rb域33和rt域31,其中rt域31指定目标寄存器,ra域32与rb域33指定源操作数寄存器。利用短操作数特点,即ra域32与rb域33指定寄存器中保存的源操作数长度小于或等于32位,可以将这两个源操作数分配到同一个64位寄存器中。图3(b)示出扩展后类型1指令的格式,扩展后的指令只用rb’域36指定源操作数寄存器,rt’域313指定目的操作数寄存器,节省下的域用ext_ctrl35标记,可以用于新增加指令编码。图3(c)与图3(d)示出了扩展前后类型1指令操作数的寄存器对应方式。原指令ra域32与rb域33指定的源操作数[ra]39与[rb]38均保存在扩展指令rb’域36指定寄存器中,[ra]39与[rb]38在这个寄存器的相对位置(即高32位还是低32位)可以用ext_ctrl域35指定,但为了增加指令编码,本实施例中直接约定,源操作数[ra]39与[rb]38分配在rb’域36指定寄存器的低32位311与高32位312,指令计算结果[rt]37分配到rt’域313指定寄存器的低32位310。

图4示出了类型2指令的扩展方式。图4(a)示出扩展前类型2指令的格式,类型2指令用三个域指定操作数:ra域42,rb域43和rs域41,其中ra域42指定目标寄存器,rs域41与rb域43指定源操作数寄存器。利用短操作数特点,即rs域41与rb域43指定寄存器中保存的源操作数小于或等于32,可以将这两个源操作数分配到同一个寄存器中。图4(b)示出扩展后类型2指令的格式,扩展后的指令只用rb’域46指定源操作数,ra’域413指定目的操作数保存位置,节省下的域用ext_ctrl45标记,可以用于新增加指令编码。图4(c)与图4(d)示出了扩展前后类型2指令操作数的寄存器对应方式。原指令rs域41与rb域43指定的源操作数[rs]48与[rb]49保存在扩展指令rb’域46指定寄存器中,[rs]48与[rb]49在这个寄存器的相对位置(即高32位还是低32位)可以用ext_ctrl域45指定,但为了增加指令编码,本实施例中约定,源操作数[rs]48与[rb]49分配在rb’域46指定寄存器的低32位411与高32位412,指令计算结果[ra]37分配到ra’域413指定寄存器的低32位410。

图5示出了类型3指令的扩展方式。图5(a)示出扩展前类型3指令的格式,类型3指令用两个域指定操作数:ra域52和rs域51,其中ra域52指定目标寄存器,rs域51指定源操作数寄存器。利用短操作数特点,即rs域51指定寄存器中保存的源操作数长度小于或等于32位。图5(b)示出扩展后类型3指令的格式,扩展后的指令用rs’域54指定源操作数,约定源操作数[rs]56保存在rs’域指定寄存器的高32位59,指令运行结果[ra]55保存在rs’域指定寄存器的低32位57。节省下的域用ext_ctrl58标记,它可以用于新增加指令编码。

图6示出了类型4指令的扩展方式。图6(a)示出扩展前类型4指令的格式,类型4指令用两个域指定操作数:rt域61和rb域63,其中rt域61指定目标寄存器,rb域63指定源操作数寄存器。利用短操作数特点,即rb域63指定寄存器中保存的源操作数小于或等于32。图6(b)示出扩展后类型4指令的格式,扩展后的指令用rb’域66指定源操作数,约定源操作数[rb]68保存在rb’域指定寄存器的高32位69,指令运行结果[rt]67保存在rb’域指定寄存器的低32位610。节省下的域用ext_ctrl65标记,可以用于新增加指令编码。

图7示出了类型5指令的扩展方式。图7(a)示出扩展前类型5指令的格式,类型5指令用两个域指定操作数:rs域71和rb域73,其中rs域71与rb域73指定源操作数寄存器。利用短操作数特点,即rs域71和rb域73指定寄存器中保存的源操作数小于或等于32。图7(b)示出扩展后类型5指令的格式,扩展后的指令用rb’域76指定源操作数,约定源操作数[rb]78保存在rb’域指定寄存器的高32位79,源操作数[rs]77保存在rb’域指定寄存器的低32位710。节省下的域用ext_ctrl75标记,可以用于新增加指令编码。

图8示出了类型6指令的扩展方式。图8(a)示出扩展前类型6指令的格式,类型6指令用两个域指定操作数:rt域81和ra域82,其中rt域81指定目的操作数寄存器,ra域82指定源操作数寄存器。利用短操作数特点,即ra域82指定寄存器中保存的源操作数小于或等于32。图8(b)示出扩展后类型6指令的格式,扩展后的指令用ra’域85指定源操作数寄存器,约定源操作数[ra]86保存在ra’域85指定寄存器的高32位89,指令执行结果[rt]87保存在rb’域指定寄存器的低32位89。节省下的域用ext_ctrl84标记,可以用于新增加指令编码。

基于上述描述,可以看出,可扩展的原始长操作数指令具有如下特征:该原始长操作数指令至少包括两个用于指定操作数位置的域,所述操作数包括源操作数和目的操作数。例如,原始长操作数指令包括一个用于指定源操作数位置的域和一个用于指定目的操作数位置的域;或者包括两个用于指定源操作数位置的域和一个用于指定目的操作数位置的域(例如加指令,该指令需要两个源操作数)。

对原始长操作数指令的扩展,就是将该原始长操作数指令(该至少包括两个用于指定操作数位置的域)其中一个用于指定操作数位置的域重定义为指定两个短操作数位置的域,这两个短操作数分别存储于寄存器的高位区段和低位区段,所述两个短操作数是两个源操作数,或者一个源操作数和一个目的操作数。这样,原始长操作数指令中的一个用于指定操作数位置的域被节省下来,它可以作为扩展指令的扩展编码域,这个扩展编码域可用于对扩展指令做进一步地功能扩展。

步骤2:译码,即对所取出的指令进行译码。译码通常由译码单元完成,译码单元是cpu控制部件,主要负责对指令译码,它把指令分解成一系列的微操作,然后生成各种控制信号以便执行微操作系列从而完成一条指令的执行。本实施例中,由于扩展指令的具体微操作相对于与原始的长操作数运算指令发生了变化,因此译码单元也会做出相应的扩展,使得这些扩展后的微操作系列能够顺利执行。本实施例中,在原始指令的基础上增加了一批用于执行短操作数运算的指令。为区分原始指令和短操作数指令,可以在处理器的控制寄存器增加一位来使能短操作数指令。这样译码单元可以通过所增加的控制寄存器使能为来识别当前指令是原始长操作数指令,还是扩展后的用于执行短操作数运算的指令。

步骤3:将译码后得到的相应微操作的控制信号派发至参与当前扩展浮点运算指令执行的各个部件,包括:存放操作数的寄存器、alu以及存放运算结果的目标寄存器等。

步骤4:基于译码所得的控制信号,从当前扩展运算指令中对应字段(即指定源操作数的域)寻址到对应的寄存器,从该浮点寄存器中取出操作数。当源操作数有两个时,分别从该寄存器的高位区段和低位区段取出这两个源操作数(它们均为短操作数)。当源操作数仅有一个时,从该寄存器中的预定义的区段(例如低位区段)取出这个源操作数(其为短操作数)。

步骤5:基于译码所得的控制信号,将当前扩展运算指令和所取出的源操作数发送到指令队列。

步骤6:基于译码所得的控制信号,由当前扩展运算指令对应的执行单元(例如alu)执行运算,获得运算结果。

步骤7:基于译码所得的控制信号,执行单元将运算结果存储至当前扩展运算指令中相应字段(指定目标操作数的域)对应的目标寄存器。当原始指令仅有两个指定操作数的域时,扩展后的指令的指定目标操作数的域与指定源操作数的域一致,即扩展后的指令的源操作数与目标操作数分别存储在同一寄存器的高位区段和低位区段。当原始指令有三个指定操作数的域时,扩展后的指令具有独立的指定目标操作数的域。

基于上述步骤1~7,即可实现短操作数的运算。

正是由于发现指令中有很大一部分不仅源操作数是窄宽度的,而且产生的结果也是窄宽度的,发明人利用这个特点,提出这样的方案:针对窄宽度的操作数,把两个源操作数分别放入到一个寄存器的高位字段和低位字段。这样做能够带来如下好处:如果指令是针对两个源寄存器进行操作,那么指令中原本用于指定第二个源操作数寄存器的字段可以空闲出来,可以用于指令扩展;提高了逻辑寄存器和物理寄存器的利用率,原本2个源操作数需要占用2个独立的物理寄存器,但是现在面向短操作数时,2个源操作数可以共享同一个物理寄存器。在总寄存器数不变的前提下,变相增加逻辑寄存器和物理寄存器的可用数量,即提高了资源利用率;当运算需要两个源操作数时,扩展指令的两个源操作数均存储在同一寄存器内,这样能够减少寄存器的读写次数或范围,达到降低功耗的目的;并且,这种扩展不需增加编码前缀、不需要消耗预留的用于指令扩展的编码资源。

最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1