处理器、编译装置与编译方法、存储介质的制作方法

文档序号:6593476阅读:195来源:国知局
专利名称:处理器、编译装置与编译方法、存储介质的制作方法
技术领域
本发明涉及处理器、编译装置以及编译方法,特别是在并行处理中,通过有效地利用运算器,实现性能提高的技术。
背景技术
伴随着近年的微处理器应用产品的高功能化和高速化,就要求具有高处理性能的微处理器(以下,称作“处理器”)。一般为了提高各指令的效率,采用了把一个指令分割为几个处理单位(这里称作“阶段”),通过用各自的硬件执行各步骤,能并行处理多个指令的管道(pipeline)方式。另外,在管道方式那样的空间上并行处理的基础上,在时间上,采用进行指令水平的并行处理的VLIW(Very Long Instruction Word)方式和超标量体系结构方式,能提高性能。
作为妨碍处理器的性能提高的一个主要原因有分支处理的系统开销(overhead)。该系统开销中,所述管道处理的阶段数越多,指令供给的惩罚就越大。另外,当进行指令并行处理时,越提高并行度,分支指令的频率就越多,系统开销就越显著。
这里,作为解决系统开销的以往的技术,有在各指令中附加表示执行条件的信息,只当该条件成立时,执行指令表示的操作的条件执行方式。在该方式下,在执行时,参照附加在各指令中的执行条件所对应的条件标志,当条件不成立时,使该指令的执行结果无效化,即作为无动作指令执行。
例如,如果用在指令中附加表示执行条件的信息的方式记述包含图10所示的条件分支的流程的处理,就成为图11那样的程序。在图11中,C0、C1表示附加在指令中的条件,当与它对应的条件标志的值为真时,执行了该指令,当为假时,把该指令作为无动作指令执行。在该例子中,首先把指令1(比较指令)的比较结果存储在C0中。语词同时,在C1中设置与C0相反的条件。因此,关于指令2和指令3中的任意一方,实际执行了操作,剩下的一方作为无动作指令执行。结果,不需要分支处理,解决了分支处理的系统开销。

发明内容
在所述的以往的条件执行方式中,当条件不成立时,该指令作为无动作指令工作,实质上不执行操作。因此,尽管并行记述了两个指令,使用了两个运算器,实际上只有效利用了一个运算器。结果,对于在程序中记述的并行度,存在有效性能下降的问题。
本发明是鉴于所述问题而提出的,其目的在于提供一种能实现硬件的有效利用、使性能提高的处理器、编译装置与编译方法、存储介质。
本发明目的实现如下——(1)一种处理器,其中,包括如下各单元指令提供单元——用于提供多个指令,和解码单元——用于分别把所述多个指令进行解码,和指令发出控制单元——参照用执行条件信息指定的条件,决定执行有效操作的指令或指令的集合,执行条件信息是在所述多个指令中指定表示是否执行各指令的信息,及执行单元——根据指定执行一个或多个操作,所述指定是指在所述多个指令中指定各指令的动作;指令发出控制单元具有以下功能通过参照用执行条件信息指定的条件,判断是有必要执行的有效指令还是没有必要执行的无效指令,对于判断为是无效指令的指令,通过控制使得该指令在被向所述执行单元发出前被删除,并且还通过控制使得该指令被该指令的后续有效指令所取代,向所述执行单元发出。
据此,即使当条件指令的条件不成立时,也不执行无动作指令,后续的指令有效地利用了执行部件中的运算器,所以运算器的使用率提高,能提高有效性能。
(2)所述执行单元可具有在执行与所述指令对应的操作后用于使执行结果无效化的执行结果无效化单元,还可包括指令无效化方法选择单元——对于各指令,选择是在向所述执行单元发出前删除该指令自身,还是用所述执行结果无效化单元使执行结果无效。
由此,当执行条件判定中使用的条件标志为未确定时,没有必要停止处理器的管道,从而能提高性能。
(3)所述指令无效化方法选择单元可通过参照表示各条件标志的值是否确定的条件标志有效信息,决定选择哪个指令无效化方法;所述条件标志有效信息中,当所述解码单元解码为是更新条件标志的指令时,该条件标志的确定性设置为假,而当用所述执行单元执行该指令、该条件标志的值确定了时,设置为真。
(4)所述指令发出控制单元还可具有以下功能检测能用单一的指令实现多个指令的功能的指令组合,从而进行结合,把这些个指令作为单一的指令处理。据此,能用单一的运算器执行原来打算使用多个运算器的指令,从而提高了运算器的使用率,能提高有效性能。
(5)所述多个指令的结合可适用于向所述执行单元发出前删除指令以后才被适用。
(6)还可以这样所述指令发出控制单元,当在各周期中连续配置了具有相同的所述执行条件信息的指令时,预先把由所述解码单元解码的多个指令按各执行条件分类,按该分类参照条件标志来判断是有必要执行的有效指令还是没有必要执行的无效指令。据此,能把条件标志的参照抑制在最小限度,能削减指令的消除判定所需的时间。
(7)在所述多个指令中,可指定表示是否为各指令并行执行的边界的并行执行边界信息,所述指令发出控制单元还可具有如是功能参照各指令的所述并行执行边界信息,检测出在当前周期中为执行对象的指令群。
(8)还可以这样所述指令发出控制单元,当用指令内的并行执行边界信息检测的边界指令以前的所有指令作为没有必要执行的无效指令被删除时,使该边界指令的并行执行边界信息无效化,通过参照该边界指令以后的并行执行边界信息,检测当前周期的新的并行执行边界。据此,当消除了配置在某周期中的全部指令时,能跳过该周期自身,执行下一周期的指令,所以能削减执行周期数。
(9)一种处理器,其中,包括如下各单元指令提供单元——用于提供多个指令,和解码单元——用于分别把所述多个指令进行解码,和指令发出控制单元——决定执行有效操作的指令或指令的集合,及执行单元——根据指定执行一个或多个操作,所述指定是指在所述多个指令中指定各指令的动作;指令发出控制单元具有以下功能从用所述解码单元解码的指令群中,检测出能用单一的指令实现多个指令的功能的指令组合,进行结合,把这些个指令作为单一的指令处理。
据此,能用单一的运算器执行原来打算使用多个运算器的指令,从而提高了运算器的使用率,能提高有效性能。
(10)所述指令发出控制单元还可具有以下功能检测出在当前周期中未成为执行对象、删除对象、结合对象而剩下的指令群,进行控制使这些指令群在下一周期以后成为发出对象。据此,即使由于例外的发生和编译装置的不良,在某周期中存在未被发出而残留的指令,也不会引起错误动作,能继续正确的执行。
(11)一种编译装置,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有用于把所述源代码中的指令重新排列、使应该并行执行的指令相邻的多个指令安排单元;所述指令安排单元包括如下各单元条件排他性解析单元——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置单元——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述指令再配置单元,判定一下配置在当前周期中的指令中执行有效操作的指令使用的运算资源是否超出搭载在对象仪器上的运算器的限制,并且当判定为配置在当前周期中的两个指令的执行条件在所述条件排他解析单元中不能同时成立时,在一定的条件下,只把任意一方的指令作为使用运算资源的指令处理。
据此,考虑指令的消除,能在一个周期中配置搭载的运算器的个数以上数量的指令,从而能提高有效性能。
(12)所述指令再配置单元,即使当配置在当前周期中的两个指令的执行条件在所述条件排他性解析单元中判定为不会同时成立时,只要所述指令中的至少一方指令的执行条件所对应的条件标志的内容不确定,也作为所述两个指令双方使用运算资源处理。据此,能考虑条件判定中使用的条件标志未确定的状态,没有必要在硬件中停止管道,能保证正确的作业。
(13)所述指令再配置单元,根据当前周期的前一周期中,是否配置了更新所述两个指令的至少一方指令的执行条件所对应的条件标志的指令,判定条件标志的内容是否确定。
(14)所述指令再配置单元,根据所述条件排他性解析单元的分析结果,对于执行条件不会同时成立的指令,处理为只有一方使用运算资源,并且检测出能用单一的指令实现使用运算资源的多个指令的功能的指令组合,把这些多个指令结合,作为单一指令处理。据此,考虑指令消除和结合,能在一个周期中配置搭载的运算器的个数以上数量的指令,从而能提高有效性能。
(15)所述指令再配置单元还具有以下功能对于在当前周期中判定为可配置的指令的集合,调整配置顺序,使具有相同的执行条件的指令连续配置。据此,能把用硬件判定要消除的指令时的条件标志的参照抑制在最低限度,从而取得了简化硬件的效果。
(16)所述指令再配置单元,当选择当前周期中配置的指令时,优先选择多个执行条件中具有特定的执行条件的指令。据此,能生成最适于频率高的特定的执行路径的代码,从而能提高有效性能。
(17)一种编译装置,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有把所述源代码中的指令重新排列、使应该并行执行的多个指令相邻的指令安排单元;所述指令安排单元具有进行指令的重新配置、使得可以按周期区分可并行执行的指令的集合的指令再配置单元;所述指令再配置单元检测能用单一的指令实现多个指令的功能的指令组合,把这些多个指令结合,作为单一指令处理,判定能否在当前周期中配置。
据此,考虑指令的结合,能在一个周期中配置搭载的运算器的个数以上数量的指令,从而能提高有效性能。
(18)所述指令安排单元还具有执行边界附加单元,该执行边界附加单元根据所述指令再配置单元的结果,在指令内附加表示是否为并行执行的边界的并行执行边界信息。
(19)一种编译装置,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有用于把所述源代码中的指令重新排列、使应该并行执行的指令相邻的多个指令安排单元;所述指令安排单元包括如下各单元条件排他性解析单元——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置单元——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述条件排他性解析单元,对于各基本块开头的指令和更新与操作执行的有效性相关的某一条件标志的指令,生成表示在各时刻的各条件标志间的同时成立可能性的表。
据此,通过生成必要的最低限度的信息,就能分析各指令间的执行条件的排他性,能削减编译装置的使用存储器,提高编译速度。
(20)所述指令安排单元还具有用于分析指令间的依存关系的依存关系解析单元;所述依存关系解析单元,根据用所述条件排他性解析单元生成的表,检索各指令的在执行时刻是有效的条件标志间的同时成立可能性,分析两个指令能否同时执行。
(21)一种编译方法,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有把所述源代码中的指令重新排列、使应该并行执行的多个指令相邻的指令安排步骤;所述指令安排步骤包括如下各步骤条件排他性解析步骤——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置步骤——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述指令再配置单元具有如是可配置判定步骤判定一下配置在当前周期中的指令中执行有效操作的指令使用的运算资源是否超出搭载在对象仪器上的运算器的限制,并且当判定为配置在当前周期中的两个指令的执行条件在所述条件排他解析步骤中不能同时成立时,只把任意一方的指令作为使用运算资源的指令处理。
(22)一种记录了程序的存储介质,记录了把用高级语言记述的程序的源代码变换为执行形式代码的程序,其中,所述程序具有把所述源代码中的指令重新排列、使应该并行执行的多个指令相邻的指令安排步骤;所述指令安排步骤包括如下各步骤条件排他性解析步骤——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置步骤——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述指令再配置单元具有如是可配置判定步骤判定一下配置在当前周期中的指令中执行有效操作的指令使用的运算资源是否超出搭载在对象仪器上的运算器的限制,并且当判定为配置在当前周期中的两个指令的执行条件在所述条件排他解析步骤中不能同时成立时,只把任意一方的指令作为使用运算资源的指令处理。


下面简要说明附图。
图1(a)~(c)是表示本发明的实施例1的处理器执行的指令的结构的图。
图2(a)、(b)是表示同一处理器的指令的供给和发出的概念的图。
图3是表示同一处理器的硬件结构的框图。
图4是表示同一处理器的指令寄存器周边的结构的框图。
图5是表示同一处理器的指令发出控制部和它的周边的电路结构的图。
图6是表示用同一处理器执行指令列时的管道定时的图。
图7是表示包含条件执行指令的程序的一部分的图。
图8是表示具有以往的指令发出控制部的处理器的指令存储器周边的结构的框图。
图9是表示用以往的指令发出控制部的处理器进行图7的程序的处理的程序的图。
图10是表示包含条件分支的处理的流程的图。
图11是表示用条件执行方式记述了图10的流程的处理的程序的图。
图12本发明的实施例2的编译装置的结构和相关数据的框图。
图13是表示同一编译装置的条件排他性解析部的处理步骤的程序流程图。
图14是表示同一编译装置的两个指令间的执行条件排他性检测的处理步骤的程序流程图。
图15是表示汇编代码的一个例子的图。
图16是表示与图15的汇编代码的指令2对应的条件排他信息表的图。
图17是与图15对应的依存图表。
图18表示同一编译装置的指令再配置部的处理步骤的程序流程图。
图19是表示汇编代码的一个例子的图。
图20是与图19对应的依存图表。
图21是表示与图19对应的执行形式代码的图。
图22是表示用以往的编译装置安排图19的代码时的执行形式代码的一个例子的图。
图23是表示本发明的实施例3的处理器的指令发出控制部与其周边电路结构的图。
图24是表示包含条件执行指令的程序的一部分的图。
图25是表示本发明的实施例4的编译装置的指令再配置部的处理步骤的程序流程图。
图26是表示汇编代码的一个例子的图。
下面简要说明附图符号。
10-并行执行边界信息(E);11-执行条件信息(P);20-指令供给部(指令供给单元);21-指令取出部;22-指令缓存器;23-指令寄存器;231-A寄存器;232-B寄存器;233-C寄存器;234-D寄存器;30-解码部;31-指令发出控制部(指令发出控制单元);311-条件标志;312-条件标志有效信息;313-执行指令选择控制部;314、315-逻辑电路;32-指令解码器(解码单元);33-第一指令解码器;34-第二指令解码器;35-第三指令解码器;36-第四指令解码器;371~374-指令执行选择器;38-指令无效化方法选择部(指令无效化方法选择单元);40-执行部(执行单元);41-执行控制部;42-PC(程序计数器)部;43-寄存器文件;44-第一运算器;45-第二运算器;46-写入控制部(执行结果无效化单元);47-操作数访问部;48、49-数据总线;100-编译器上游部;101-汇编代码生成部;102-指令安排部(指令安排单元);103-目标代码生成部;110-条件排他性解析部(条件排他性解析单元);111-依存关系解析部(依存关系解析单元);112-指令再配置部(指令再配置单元);113-执行边界附加部(执行边界附加单元);120-源代码;130-目标代码;140-指令发出控制部(指令发出控制单元);141-执行指令选择控制部;142-指令结合部。
具体实施例方式
下面,参照附图,详细说明本发明的处理器、编译装置以及编译方法的实施例。
实施例1处理器(指令格式和结构的概要)首先,使用图1(a)~(c),说明本发明的处理器解码执行的指令的结构。图1(a)~(c)是表示本处理器的指令格式的图。本处理器的各指令是32位的固定长度,各指令保持1位的并行执行边界信息(Eend bit)10。该信息是表示该指令与它的后续指令之间是否存在并行执行的边界。具体而言,当并行执行边界信息E为“1”时,该指令与它的后续指令之间存在并行执行的边界,当并行执行边界信息E为“0”时,不存在并行执行的边界。后面将描述该信息的使用方法。
另外,各指令保持着三位的执行条件信息(Ppredicate)11。该执行条件信息P指定存储了在后述的图5中的八个条件标志C0~C7(311)中是否执行该指令的条件的条件标志。当用该执行条件信息P指定的条件标志的值为“1”时,执行用该指令指定的操作,当条件标志的值为“0”时,不执行操作。
在从各指令的长度中去掉并行执行边界信息E和执行条件信息P后的28位的部分中,指定操作。具体而言,在“Op1”、“Op2”、“Op3”的字段中,指定表示操作的种类的操作码,在“Rs”的区域中,指定成为源操作数的寄存器的寄存器号码,在“Rd”的字段中,指定成为目标操作数的寄存器的寄存器号码。另外,在“imm”的字段中,指定运算用常数操作数。而且,在“disp”的区域中,指定位移(displacement)。
下面,使用图2(a)和(b),就本处理器的结构的概要加以说明。本处理器是以静态并行调度为前提的处理器。
如图2(a)所示,指令的供给是用每周期128位固定长度的指令供给单位(这里,称作“信息包”)每次提供四个指令。而且,如图2(b)所示,指令的执行是在一个周期中,同时执行并行执行边界前的指令(这里称作“执行单位”)。即在各周期中,并行执行到并行执行边界信息E为“1”的指令为止的指令。已提供但却未执行的指令残留在指令存储器中,在接着的周期以后成为执行的对象。
即在该结构中,用固定长度的信息包单位提供指令,以静态求出的信息为基础,在各周期中,发出与并行度相应的适当数量的指令。通过采用该手法,在通常固定长度指令的VLIW方式下发生的无动作指令(nop指令)完全没有了,从而能削减代码尺寸。
(处理器的硬件结构)图3是表示本发明的处理器的硬件结构的框图。本处理器是具有两个运算器的并行执行处理器,大致来分,由指令供给部20、解码部30、执行部40构成。
指令指令供给部20从图中未显示的外部存储器提供指令群,输出到解码部30,其由指令取出部21和指令缓存器22及指令寄存器23构成。指令取出部21通过32位的IA(指令地址)总线以及128位的ID(指令数据)总线,从图,从图中未显示的外部存储器取出指令块,保存在内部的指令高速缓冲存储器中,并且把从PC(程序计数器)部42输出的相当于地址的指令群提供给指令缓存器22。
指令缓存器22具有两个128位的缓存器,用于存储由指令取出部21提供的指令。从指令取出部21以128位的单位向指令缓存器22提供了信息包。存储在指令缓存器22中的指令被输出到指令寄存器23的适当的存储器中。
指令寄存器23由四个32位存储器231~234构成,是用于保存从指令缓存器22传来的指令。关于指令寄存器23的周边,在别的附图中,表示了更详细的结构。
解码部30把保存在指令寄存器23中的指令解码,把与该解码结果对应的控制信号输出到执行部40,大致来分,其由指令发出控制部31、指令解码器32、指令无效化方法选择部38构成。
指令发出控制部31对于保存在指令寄存器23的四个寄存器231~234中的指令,通过参照指令内的执行条件信息P、与它对应的条件标志,对于条件标志的值为假的指令,进行实质上消除该指令自身的处理。可是,只限于用指令无效化方法选择部38选择了解码部30时。另外,指令发出控制部31通过参照指令内的并行执行边界信息E,对于超过并行执行的边界的指令,进行使该指令的发出无效化的关于发出的控制。须指出的是,关于指令发出控制部31,在别的附图中,进行了更详细的动作说明。
指令解码器32是用于对存储在指令寄存器23中有效的指令群解码的装置,由第一指令解码器33、第二指令解码器34、第三指令解码器35、第四指令解码器36构成。这些解码器33~36分别基本上是在一个周期中解码一个指令,提供给执行部40。另外,对于放在指令内的常数操作数,从各指令解码器传送到执行部40的数据总线48。
指令无效化方法选择部38选择是用解码部30使条件标志为假即没有必要执行的指令无效化,还是用执行部40使之无效化。具体而言,当用后述的指令发出控制部31的条件标志有效信息312(图5)表示了该指令的条件标志为有效即确定时,用解码部30进行无效指令的消除,不是这样时,用执行部40的写入控制部46使该指令的执行结果的写入无效化。
执行部40是根据解码部30的解码结果最多并行执行两个操作的电路单元,由执行控制部41、PC部42、寄存器文件43、第一运算器44、第二运算器45、写入控制部46、操作数访问部47、数据总线48、49构成。
执行控制部41是根据解码部30的解码结果控制执行部40的各构成要素42~49的控制电路和布线的总称,具有定时控制、动作允许禁止控制、状态管理、中断控制等电路。
PC部42把存放了接着应该解码执行的指令的图中未显示的外部存储器上的地址输出到指令供给部20内的指令取出部21。
寄存器文件43由64个32位寄存器(R0~R63)构成。存储在这些寄存器中的值根据指令解码器32的解码结果,经由数据总线48,被传送到第一运算器44和第二运算器45,在那里进行运算,或者只在通过那里后,经由数据总线49,传送到寄存器文件43或操作数访问部47。
第一运算器44和第二运算器45在内部具有分别对两个32位数据进行算术逻辑运算的ALU或乘法器、和进行移位运算的桶式移位器,在执行控制部41的控制下,执行运算。
写入控制部46,只当用指令无效化方法选择部38选择了用执行部40使某指令无效化时,并且当该指令的条件标志的内容为假时,才进行控制使该指令的执行结果不写入寄存器文件43。由此,关于该指令,变为与执行无动作指令(nop指令)时同等的结果。
操作数访问部47是寄存器文件43和图中未显示的外部存储器之间进行操作数的传送的电路。具体而言,例如,当在指令内,放置了“ld”(load)作为操作码时,放在外部存储器中的一个字(32位)的数据经过操作数访问部47被输入寄存器文件43的指定寄存器中,另外,当放置了“st”(store)作为操作码时,寄存器文件43的指定的寄存器的存储值被存储到外部存储器中。
如图所示,所述PC部42、寄存器文件43、第一运算器44、第二运算器45、写入控制部46以及操作数访问部47由数据总线48(L1总线、R1总线、L2总线、R2总线)以及数据总线49(D1总线、D2总线)连接。须指出的是,L1总线、R1总线分别连接在第一运算器44的两个输入端口上,L2总线、R2总线分别连接在第二运算器45的两个输入端口上,D1总线、D2总线分别连接在第一运算器44和第二运算器45的输出端口上。
(指令寄存器23的周边结构和指令发出控制部31的动作)图4是表示指令寄存器23的周边的结构的框图。图中,虚线箭头表示控制信号。
指令寄存器23由A寄存器231、B寄存器232、C寄存器233、D寄存器234等四个32位寄存器构成。从指令缓存器22向指令寄存器23提供了指令。
第一~第四指令解码器33、34、35、36以各32位的指令为输入,对其解码,输出与该指令的动作有关的控制信号,并且输出配置在指令内的常数操作数。图4的59和51是各执行确定了的指令常数操作数。
另外,在第二~第四指令解码器34、35、36中输入了一位的无动作指令标志作为控制信号。如果把该标志设置为“1”,则该解码器输出相当于无动作指令的控制信号作为输出。即通过设置无动作指令标志,能使该指令解码器的解码无效化。
然后,指令发出控制部31参照存储在指令寄存器23中的指令内的信息,进行用于使并行执行的边界以后的指令的解码无效化的无动作指令标志的生成,和对执行指令选择器371、372(用于选择进行执行条件为真且应该用执行部40执行操作的有效指令)和执行指令选择器373、374(用于选择与前述选择对应的控制信号)进行控制。
图5表示了本处理器的指令发出控制部31和它的周边电路的结构。指令发出控制部31首先参照各指令内的并行执行边界信息E,决定在该周期中发出的指令到哪为止。然后,通过把与该周期中不发出的指令所对应的指令解码器的无动作指令标志设置为1,使该解码器的输出成为相当于无动作指令的控制信号。该无动作指令标志的生成能用图5的指令发出控制部31的右半部表示的简单的逻辑电路(OR门)314、315实现。与此同时,表示哪些指令未被发出而残留下来的信息传输给指令缓存器22。
如果具体说明,则当A寄存器231的指令的并行执行边界信息E为“1”时,使第二、第三以及第四指令解码器34、35、36的解码无效化。另外,当B寄存器232的指令的并行执行边界信息E为“1”时,使第三以及第四指令解码器35、36的解码无效化。而且,当C寄存器233的指令的并行执行边界信息E为“1”时,使第四指令解码器36的解码无效化。
指令发出控制部31参照各指令内的执行条件信息P,关于条件标志为假的指令即没有必要执行的指令,控制图4的执行指令选择器371~374,实质地消除该指令自身。在本处理器中,各周期最多解码四条指令,但是,实际执行了操作的只有两条指令。由此,当执行条件为假时,用执行部40执行了无动作指令,解决了运算器44、45的利用率变差的问题点。
为了实现它,指令发出控制部31具有执行指令选择控制部313。执行指令选择控制部313通过参照八个条件标志(C0~C7)311中指令内指定的执行条件信息P所对应的条件标志,检测没有必要执行的指令,控制执行指令选择器371~374,不选择该指令,选择后续的有效的指令。未选择的指令自身被实质地消除。条件标志311由八个一位寄存器C0~C7构成,并且通过对各指令内的3位执行条件信息P解码指定。可是,条件标志C7的值总是“1”,经常执行的指令指定C7作为执行条件。在程序中的记述中,能省略C7的指定。
但是,在更新条件标志的指令中,确定条件标志的是执行阶段即执行部40,所以在前一周期中,当执行更新某条件标志的指令时,接着的周期的解码阶段即解码部30未确定该条件标志,不能进行指令的删除可否的判断。为了检测该状态,设置了条件标志有效信息312。
条件标志有效信息312保持着表示各条件标志的值是否有效的一位值,当解码部30判断为执行更新某条件标志的指令时,把该条件标志的有效信息设置为“0”,在执行部40中,如果该条件标志的更新结束,把该条件标志的有效信息设置为“1”。
在指令发出控制部31中,参照了各指令的执行条件信息P后,参照条件标志有效信息312,检测与各执行条件对应的条件标志的值是否有效。然后,当不是有效时,即条件标志有效信息312的对应位为“0”时,不进行该指令自身的消除。把该指令直接发送给执行部40,当确定了条件标志的时刻,如果必要,就使该指令的执行结果的写入无效化。
当条件标志的值为有效时,即条件标志有效信息312的对应位为“1”时,参照用该指令的执行条件信息P指定的条件标志311内的1位,当该值为“1”时,把该指令直接样发送给执行部40,当值为“0”时,控制执行指令选择器371~374,实质上删除该指令自身。
即,当某指令执行条件信息P为“0”、上一指令中所对应的条件标志被更新时,在执行部40使该指令执行无效化,否则,在解码部30实质上删除其指令本身。
图6是表示执行具体的指令列时的管道处理时序的图。这里,假设从上开始按顺序一次一个指令地执行三个指令。最初的指令是这样的比较指令比较寄存器R0的内容和寄存器R1的内容,如果一致,在条件标志C0中设置“1”,如果不是,设置“0”。接着的指令是只当条件标志C0的内容为“1”时从寄存器R3的内容减去寄存器R2的内容、把结果写入寄存器R3的减法指令。最后的指令是只当条件标志C0的内容为“1”时把寄存器R4的内容和寄存器R5的内容相加、把结果写入寄存器R5的加法指令。
图6中,在各指令的右侧表示了各指令的指令取出阶段(IF)、解码阶段(DEC)、执行阶段(EX)的时机。这里,假定最初的比较指令的结果为假即C0为“0”。
由图6可知,在最初的比较指令的解码阶段(DEC)中,检测到是更新C0的指令,C0的有效信息被设置为“0”,在执行阶段(EX)中,确定了比较结果后,C0的有效信息被设置为“1”。
后续的减法指令、加法指令虽然都是以C0为条件执行的指令,但是关于比较指令之后的减法指令,在解码阶段(DEC)中,因为C0的值不是有效,所以不进行指令自身的消除,发送到执行阶段(EX),在该阶段,执行结果被无效化。而关于加法指令,因为在解码阶段(DEC)的时刻,确定了C0的值,所以在解码阶段(DEC)中,指令自身被实质地消除,不发送到执行阶段(EX)。这时,能在加法指令的后续指令中,充分利用空着的运算器。
在基于以上的控制的指令的无效化后,当存在未发出的指令时,指令发出控制部31把剩下的指令的个数传送给指令缓存器22,在指令缓存器22内,进行控制,使这些指令不被无效化,在接着的周期中,再次传送给指令寄存器23。
就这样,通过采用图1所示指令格式、图4及图5所示结构,就可以有效而灵活地利用运算器。
(处理器的动作)下面,说明解码、执行具体的指令时的本实施例的处理器的动作。
图7是表示包含条件执行的程序的一部分的图。该程序由五个指令构成,用助记符号表现了各指令的处理内容。具体而言,助记符号“add”表示常数或寄存器的存储值与寄存器的存储值相加,助记符号“sub”表示从寄存器的存储值减去常数或寄存器的存储值,助记符号“st”表示把寄存器的存储值传送给存储器,助记符号“mov”表示把常数或寄存器的存储值传送到寄存器。
另外,“Rn(n=0~63)表示寄存器文件43中的一个寄存器。而且,关于各指令的并行执行边界信息E,用“0”或“1”表示。关于用执行条件信息P指定的条件标志,在各指令的开头,用“[]”围起来记述。不记述的指令是经常执行的指令。
下面,按执行单位来说明本处理器的动作。这里假设,在最初的时刻,条件标志C0的值为“1”,C1的值为“0”。
(执行单位1)从外部存储器提供了包含指令1、指令2、指令3、指令4的信息包,分别传送给指令寄存器23。接着,指令发出控制部31参照各指令的并行执行边界信息E。这时,因为指令3的并行执行边界信息为“1”,所以使第四指令解码器36的解码结果无效化,即作为无动作指令。
接着,指令发出控制部31参照各指令的执行条件信息P。指令1的执行条件标志是C0,因为C0的值确定为“1”,所以用执行指令选择器371控制操作数的选择,把指令1作为第一指令执行,控制执行指令选择器373,使其选择解码结果。接着,指令2的执行条件标志是C1,因为C1的值是“0”,所以实质地消除指令2自身,不进行操作的执行。然后,因为后续的指令3是经常执行的指令,所以用执行指令选择器372控制操作数的选择,把指令3作为第二指令执行,控制执行指令选择器374,使其选择解码结果。结果,指令1和指令3被作为要执行的指令传送给执行部40,不发出的指令4留在指令缓存器22中。
在执行部40中,把寄存器R0的存储值加1的值被存储到寄存器R0,寄存器R1的存储值与寄存器R2的存储值相加得到的值被存储到寄存器R2。
(执行单位2)留在指令缓存器22中的指令4与新由外部存储器提供的指令5按顺序被传送到指令寄存器23。接着,指令发出控制部31参照各指令的并行执行边界信息E。这时,指令5的并行执行边界信息为“1”,所以使第三指令解码器35和第四指令解码器36的解码结果无效化,即作为无动作指令。
指令4和指令5是经常执行的指令,所以控制执行指令选择器371~374,把指令4作为第一个指令,把指令5作为第二个指令传送给执行部40。这里,发出了提供的全部指令。
在执行部40中,存储器R0的存储值被传送到外部存储器内的用寄存器R3表示的地址,存储器R2的存储值被传送到寄存器R4。
如上所述,图7所示的程序在本处理器中由两个执行单位执行。在本处理器中,预先解码比运算器44、45的个数多的指令,通过适当删除不要的指令,实现运算器44、45的高效利用。在该例子中,各周期都是在执行部40中,执行两个操作,搭载的运算器44、45被高效利用。
(与以往的具有指令发出控制部的处理器的比较)下面,假定在作为以往的技术而举例的把条件执行指令全部发到执行部,并且在该执行部中适当地进行无效化的处理器中进行图7所示的处理,与本发明的处理器的情形比较。
图8是表示以往的处理器的指令寄存器的周边结构的框图。作为以往的处理器,与本发明的处理器同样,具有两个运算器,指令格式与图1的本发明的处理器的指令格式同样。因为是双并行处理器,所以指令寄存器23a具有A寄存器231a和B寄存器232a,指令解码器32a具有第一指令解码器33a和第二指令解码器34a。50a、51a分别是常数操作数。在指令发出控制部31a中,按照存储在A寄存器231a中的指令的并行执行边界信息e,进行使第二指令解码器34a的结果无效化的控制。
图9是表示用具有以往的指令发出控制部31a的处理器运行图7的程序的处理的程序的图。图9的程序中,并行执行边界信息E以外的部分与图7的程序相同。并行执行边界信息E设置为最多同时发出两个指令。
以下,说明各执行单位的以往的处理器的动作。这里假设,在最初的时刻,条件标志的值确定为“1”,C1的值为“0”。
(执行单位1)从外部存储器提供了包含指令1、指令2、指令3以及指令4的信息包,把指令1和指令2按顺序传送给指令寄存器23a。接着,指令发出控制部31a参照存储在A寄存器231a中的指令1的并行执行边界信息E。这时,指令1的并行执行边界信息E是“0”,所以第二指令解码器34a的解码结果不会无效化。因此,指令1和指令2都传送到执行部。未发出的指令3和指令4残留在指令缓存器中。
在执行部中,因为指令1的执行条件标志即C0为“1”,所以寄存器R0的存储值加1的值被存储到寄存器R0。然后,因为指令2的执行条件标志即C1为“0”,所以或者不执行与指令2对应的操作,或者把执行后的结果无效化,结果与执行了无动作指令是同样的。
(执行单位2)残留在指令缓存器中的指令3和指令4按顺序传送到指令寄存器23a,新从外部存储器提供了指令5。接着,指令发出控制部31a参照存储在A寄存器231a中的指令3的并行执行边界信息E。这时,指令3的并行执行边界信息E是“0”,所以第二指令解码器34a的解码结果不会无效化。因此,指令3和指令4都传送到执行部。未发出的指令5残留在指令缓存器22中。
在执行部中,因为指令3和指令4都是经常执行的指令,所以执行了与这两个指令对应的操作。具体而言,寄存器R1的存储值和寄存器R2的存储值相加的值被存储在寄存器R2中,寄存器R0的存储值被传送到外部存储器上用寄存器R3表示的地址。
(执行单位3)残留在指令缓存器中的指令5传送到指令寄存器23a。接着,指令发出控制部31a参照存储在A寄存器231a中的指令5的并行执行边界信息E。这时,因为指令5的并行执行边界信息E是“1”,所以使第二指令解码器34a的解码结果无效化。因此,只发出了指令5。到这里,发出了提供的全部指令。
在执行部中,因为指令5是经常执行的指令,所以执行了与指令5对应的操作。具体而言,寄存器R2的存储值被传送到寄存器R4。
如上所述,图9所示的程序在具有以往的指令发出控制部31a的处理器中,由三个执行单位执行,与本发明的处理器相比,多用了一个执行单位执行。这是因为在具有以往的指令发出控制部31a的处理器中,当条件执行指令的条件为加时,把该指令作为无动作指令执行,徒劳地使用搭载的运算器。
实施例2编译装置下面,说明生成上述实施例1的处理器所执行代码的编译装置及其编译方法的实施例。
(用语说明)首先,说明这里使用的用语。
目标代码——是指包含了可重定位信息的面向对象处理器的机器语言程序。能通过进行连接编辑,决定来确定地址,变换为执行形式代码。
预执行指令——是指为了执行某指令,在此之前,有必要预先执行的某指令。
执行组——是指通过编译装置,把能在同一周期中并行执行的指令群组化的指令群。
基本块——是指执行从开头开始到最后执行的一连串指令列,在块的途中,不会发生跳出块或从块的途中进入块。
(对象处理器)本编译装置视为对象的处理器是所述实施例1中说明的处理器。该处理器通过参照由编译装置提供的并行执行边界信息E,生成执行组,在硬件中判断是否能并行执行。因此,在并行执行边界即执行组内,编译装置保证正确地配置了能同时执行的指令。对于在并行执行边界中能配置的指令的制约为(1)并行执行组中的指令总数不超过4(指令解码器的制约)(2)并行执行组中的指令中,实际用执行部执行的操作的指令的个数不超过2(执行指令数的制约)(3)并行执行组中的指令中,实际在执行部中使用的对象处理器资源的总和不超过2ALU单元、1存储器访问单元、1分支单元(运算器的制约)指令只当满足了这三个制约时,才能并行执行。
图12是表示本发明的实施例2的编译装置的结构和相关数据的框图。本编译装置是从用高级语言写的源代码120生成目标代码130的程序处理装置,由编译器上游部100、汇编代码生成部101、指令安排部102、目标代码生成部103构成。
编译器上游部100读入以文件形式保存的高级语言源代码120,进行语法分析和意思分析,生成内部形式代码。再按照需要,优化内部形式代码,使最终生成的执行形式代码的尺寸和它的执行时间变短。
汇编代码生成部101从由编译器上游部100生成并且优化了的内部形式代码生成汇编代码。
编译器上游部100和汇编代码生成部101的处理不是本发明的主要着眼点,而且,等同于以往的编译装置中进行的处理,所以省略了详细的说明。
(指令安排部102)指令安排部102对于用汇编代码生成部101生成的汇编代码,进行附加在指令中的各条件间的排他性的解析、指令间的依存关系的解析、指令的再配置(指令顺序的改变)以及并行执行边界的附加,把汇编代码排列为面向对象处理器。指令安排部102由条件排他性解析部110、依存关系解析部111、指令再配置部112以及执行边界附加部113构成。
在指令安排部102内,首先条件排他性解析部110工作。然后,在各基本块中,依存关系解析部111、指令再配置部112以及执行边界附加部113工作。各部的具体动作如下。
条件排他性解析部110分析条件标志的排他性,对于各基本块的开头和各条件标志更新指令,生成条件排他信息表。条件排他信息表对于所有条件标志的组合,是具有是否是排他的信息的排列。在后面表示了条件排他信息表的具体例子(图16)。这里,把所有的条件标志的组合不是排他的信息表称作无排他表。
图13是表示条件排他性解析部110的处理步骤的程序流程图。在条件排他性解析部110中,向下检索相当于各指令的编译装置内部的中间代码,对于各基本块的开头和各条件标志更新指令,设置条件排他信息表。
首先,用无排他表初始化在现在时刻有效的有效表Tv(步骤S11)。然后,关于各基本块,向下检索(步骤S12)。
当关于某基本块的判定(步骤S13)的结果为该基本块的先行基本块只有一个时,在该基本块的开头表中设置有效表Tv(步骤S14),不是这样时,因为无法确定这时的排他关系,所以在该基本块的开头表中设置无排他表(步骤S15)。
接着,对于基本块内的各指令进行检索(步骤S16)。当发现了更新比较指令等的条件标志的指令时(步骤S17),判定该指令是否是设置同时排他条件的指令(步骤S18)。设置同时排他的条件的指令相当于更新图11的指令1的条件标志C0、C1的比较指令。
当是设置同时排他的条件的指令时,首先,把相当于有效表Tv内的用该指令更新的条件标志的部分全部设置为假,然后把用该指令设置为排他的条件标志的组设置为真。然后,在该指令用的排他信息表中设置有效表Tv(步骤S19)。
当是不设置同时排他的条件的指令时,因为关于用该指令更新的条件标志的排他性被破坏,所以把相当于有效表Tv内的用该指令更新的条件标志的部分全部设置为假。然后,在该指令用的排他信息表中设置有效表Tv(步骤S20)。
对于各基本块重复以上步骤(步骤S21、S22)。由此,关于设置所有基本块的开头和条件标志的所有指令,能保持关于各时刻的条件标志的排他性的信息。
依存关系解析部111分析处理对象中包含的指令间的依存关系,并以依存标志加以表示。指令间的依存关系有三种。因为变更原来的指令顺序,程序的意思就不同了,具有依存关系中的诸指令中无论哪一个,在指令的重新排列时也有必要遵守依存关系。
数据依存关系定义某资源的指令和参照相同资源的指令之间的依存关系。
逆依存关系参照某资源的指令和定义相同资源的指令之间的依存关系。
输出依存关系定义某资源的指令和定义相同资源的指令之间的依存关系。
在依存关系解析部111中,对于处理对象中包含的各指令,生成与其对应的节点,对于各依存关系,生成与其对应的界限(箭头),生成依存标志。这时,即使是关于参照以及定义的资源,有依存的两个指令之间,如果各指令的执行条件是排他的,即保证了不同时成立,则这两个指令不会都参照或定义资源,所以在这两个指令间,不存在依存关系。因此,在与这两个指令对应的节点间,不生成界限。
为了实现它,关于先行的指令A和指令B,有必要使用用条件排它性解析部110设置的排他信息表,检测两个指令的执行条件是否排他。在图14中表示了检测该排他性的算法。
首先,设指令A的执行条件标志为Cn(步骤S31)。然后,为了求出指令A的执行时刻的有效排他信息,从指令A开始向上检索,在发现更新条件标志的指令或到达了基本块的开头的时刻,设对应的排他信息表为有效表Tv(步骤S32)。
接着,沿到指令B的路线而行,从指令A向下检索(步骤S33)。当发现指令B时(步骤S34),参照该时刻的有效表Tv,求出条件标志Cn和指令B的执行条件的排他关系,之后结束(步骤S35)。当发现更新Cn以外的条件标志的指令时(步骤S36),用与该指令对应的排他信息表更新有效表Tv,继续(步骤S37)。当发现更新条件标志Cn的指令时(步骤S38),因为不能保证排他性,所以返送假(步骤S39)。重复以上步骤(步骤S40)。
这样,对资源定义和参照关系、执行条件的排他性这两者进行解析,建立各指令间的依存关系。
作为具体例,说明对于图15所示的汇编代码的条件排它性解析部110和依存关系解析部111的适用结果。
图16是表示与图15的汇编代码的指令2(比较指令)对应的条件排他信息表的图。条件排他信息表是表示对于条件标志C0~C7的全部组合的排他性的排列。这时,通过指令2,设置条件标志C0和条件标志C1为排他。
图17是表示依存关系解析部111的输出即依存图表的图。图17中,实线表示数据依存关系,虚线表示逆依存关系。指令2(比较指令)因参照用指令1更新的寄存器R0,有数据依存,指令3和指令4因参照用指令2更新的条件标志C0和C1,有数据依存关系。这里,因为在指令3更新寄存器R2,在指令4参照寄存器R2,所以乍一看,存在指令3到指令4的数据依存关系。可是,各指令的执行条件即C0、C1由指令2设置为排他条件,所以通过参照图16所示的条件排他信息表,判断出不会同时执行两个指令,这视为两个指令间不存在依存关系。
返回图12的说明,指令再配置部112使用由依存关系解析部111生成的依存图表,重新排列处理对象的指令,生成面向对象处理器的并行的汇编代码。指令再配置部112的处理的细节如下所述。
图18是表示指令再配置部112的处理步骤的程序流程图。指令再配置部112对于依存关系解析部111生成的依存图表的所有节点,重复以下的循环1(步骤S52~S60)的处理(步骤S51、S61)。
首先,从依存图表中抽出在现在时刻能成为配置候补的节点,作为配置候补节点的集合(步骤S52)。这里,能成为配置候补的节点是指“预执行指令都配置完了”的节点。
接着,指令再配置部112对于配置候补节点集合的所有候补节点,重复以下的循环2(步骤S54~S58)的处理(步骤S53、S59)。
首先,从配置候补节点集合取出被认为是在现在时刻配置最佳的节点(以下,称作“最佳节点”)(步骤S54)。后面,将描述关于最佳节点的决定方法。接着,判断是否能实际配置最佳节点(步骤S55),当可能时,假配置(步骤S56)。为了有效地利用所述的处理器的解码阶段的指令自身的消除的效果,在考虑已经假配置的节点和最佳节点的执行条件的排他性,并看一下是否满足所述的运算器的制约、和执行指令数的制约以及指令解码器的制约决定的情况下,来确定该判断。在考虑条件排他性时,使用条件排它性解析部110的结果。可是,在更新执行条件标志的指令的下一周期中,也考虑到不删除用该执行条件执行的指令自身。即这时,不考虑执行条件的排他性,纯粹用运算器和执行指令数的制约判断可配置性。
接着,调查现在时刻假配置的节点集合,判断能否配置指令(步骤S57)。当判断为不能配置时,结束循环2,把处理转移到步骤S60。
当判断为能配置时,再判断一下是否通过配置了最佳节点产生了能新成为配置候补的节点,当产生了新的配置候补时,把它追加到配置候补节点中(步骤S58)。在步骤S58中能成为配置候补的节点是“只具有(现在要配置的)最佳节点作为预执行指令、并且与最佳节点的依存关系是逆依存或输出依存”的节点。即在这里能成为新的配置候补的节点是能在与最佳节点相同的周期中执行的、但是不能在最佳节点前的周期中执行的节点。
循环2结束后,确定假配置节点集合中包含的节点(步骤S60)。具体而言,从原来的指令列中取出与假配置节点集合中包含的节点对应的指令,再配置到用于传给执行边界附加部113的新的指令列中。在该阶段,配置候补节点的一部分被作为同时执行的指令群汇集确定下来。
下面,描述步骤S54的最佳节点的决定方法。最佳节点是参照依存图表、假配置区域,启发式地选出大概能在最短的时间中执行处理对象的指令全体的指令。这里,在现在时刻的依存图表中,选择到依存图表的结束端的指令的执行时间总和最长的。当符合该条件的指令有多个时,把原来的指令顺序中前面的指令作为最佳节点。
再回到图12,执行边界附加部113在指令再配置部112的步骤S60中确定了配置的指令群的各末尾,设置并行执行边界信息E。
目标代码生成部103把指令安排部102输出的汇编代码变换为目标代码130,作为文件输出。
(编译装置的动作)下面,使用具体的指令,说明本编译装置的特有的构成要素的动作。
图19是把源代码输入编译器上游部100、通过汇编代码生成部101生成的汇编代码。指令安排部102接收图19的代码作为输入。图19中包含的各指令的意思如下。
指令1…比较寄存器R0的存储值是否与常数0一致,在条件标志C0中设置真假,把它的相反条件设置在条件标志C1中。
指令2…只当条件标志C0的值为真时,把寄存器R1的存储值和寄存器R2的存储值相加,存储到寄存器R2中。
指令3…只当条件标志C1的值为真时,把寄存器R2的存储值和寄存器R3的存储值相加,存储到寄存器R3中。
指令4…只当条件标志C0的值为真时,把寄存器R1的存储值和寄存器R3的存储值相加,存储到寄存器R3中。
指令5…只当条件标志C1的值为真时,把寄存器R3的存储值和寄存器R4的存储值相加,存储到寄存器R4中。
指令6…只当条件标志C0的值为真时,把寄存器R2的存储值和寄存器R4的存储值相加,存储到寄存器R4中。
指令7…只当条件标志C1的值为真时,把寄存器R3的存储值和寄存器R5的存储值相加,存储到寄存器R5中。
下面,说明指令安排部102的动作。首先,启动了条件排它性解析部110和依存关系解析部111,生成了依存图表。在图19的代码例子中,考虑用指令1生成的条件标志C0和C1在指令2以后是排他的,分析资源的定义和参照关系。在图20中表示了生成的依存图表。
接着,启动了指令再配置部112。如果沿着图18的程序流程图进行说明,则首先,在第一周期中,生成配置候补节点集合(步骤S52)。由图20的依存图表可知,这里只有指令1成为配置候补节点。接着,取出最佳节点(步骤S54)。这里,自动地选择了指令1。然后,在可配置判定步骤(S55)中,判断为可配置。在配置状态判定步骤(S57)中,判断为可配置,但是,因为在配置候补节点追加步骤(S58)中,不存在成为追加对象的指令,所以在配置节点确定步骤(S60)中,确定为第一周期只发出指令1。
在接着的周期中,指令2、指令3、指令4成为配置候补节点。如果按顺序选择了指令2、指令3作为最佳节点,就假配置。接着,如果选择了指令4作为最佳节点,就进入可配置判定步骤(S55)。这里,应该进行考虑了条件排他性的判定,但是,因为在之前的周期中,更新了执行条件C0、C1的值,所以在该周期中,不进行把C0、C1作为执行条件的指令的解码阶段的消除。因此,由于不消除已经假配置的指令2和指令3,所以根据搭载在硬件上的运算器的限制,判定为指令4是不能同时发出的即不能配置的。这样,在第二周期中,确定为发出指令2和指令3。
在接着的周期中,指令4、指令5、指令6、指令7成为配置候补节点。如果按顺序选择了指令4、指令5作为最佳节点,就假配置。接着,如果选择了指令6作为最佳节点,就进入可配置判定步骤(S55)。这里,进行考虑了排他性的判定。当指令6实际执行操作时,即当指令6的执行条件标志C0为真时,因为条件标志C1是假,所以以C1为执行条件的指令5不执行操作,不使用运算器。因此,在指令4和指令6的组合中,满足了运算器的限制,所以判断为可配置指令6。接着,如果选择了指令7作为最佳节点,与所述同样,当指令7执行操作时,因为消除了指令4和指令6,所以根据指令5和指令7的组合判定运算器的限制,判定为能配置指令7。这样,在第三周期中,确定为能发出指令4、指令5、指令6、指令7。这里,因为没有未配置的节点,所以指令再配置部112的处理结束。
最后,启动了执行边界附加部113。这里,在由所述指令再配置部112配置指令群的末尾的指令中设置并行执行边界信息E。具体而言,在指令1、指令3、指令7的并行执行边界信息E中设置1,在剩下的指令的并行执行边界信息E中设置0。
到这里,指令安排部102的处理就结束了。接着,启动了目标代码生成部103,输出了目标代码。
图21表示了最终的执行形式代码。实际的执行形式代码是总结为128位单位的位列。图21所示的执行形式代码在本发明的具有两个运算器的处理器中,在三个执行组中执行。
(与以往的编译装置的比较)下面,假设用不采用本发明编译装置结构的以往的编译装置编译图19所示的汇编代码,与本发明的编译装置比较。对象处理器与本发明的处理器同样,为具有两个运算器的处理器。
以往的编译装置在指令再配置部有所不同。首先,在最初的周期中,因为依存关系,只发出指令1。在接着的周期中,指令2、指令3、指令4成为候补,但是,因为在一个周期中为2个这一运算器的限制,所以只发出指令2和指令4。在接着的周期中,指令4、指令5、指令6、指令7成为候补,但是,因为运算器的限制,只发出指令4、指令5。在接着的周期中,指令6、指令7成为候补,因为满足运算器的限制,所以发出双方的指令。这样,指令再配置结束。在执行边界附加部中,具体而言,在指令1、指令3、指令5、指令7的并行执行边界信息E中设置“1”,在剩下的指令的并行执行边界信息E中设置“0”。到这里,指令安排处理结束。
图22表示了作为结果而生成的执行形式代码。图22所示的执行形式代码在具有两个运算器的处理器中在四个执行组中执行。
如果比较图21和图22,则在以往的编译装置的生成代码(图22)中,与本发明的编译装置的生成代码(图21)相比,执行组增加了一个。即执行周期增加了一个周期。执行组数之所以增加,是因为未采用本发明的指令安排部102那样的结构,把所有的指令都作为发到执行阶段的指令处理,只能配置以硬件上搭载的运算器的个数为上限的指令。而在本发明的编译装置中,考虑到指令自身的无效化,能在一个周期中配置硬件上搭载的运算器的个数以上的数量的指令,从而能有效利用运算器。
须指出的是,通过把本实施例所示的编译装置的处理步骤存入软盘、硬盘、CD-ROM、MO、DVD等存储介质,就能用计算机实现本实施例中表示的编译装置。
另外,也能把用本实施例的编译装置生成的执行形式代码存入软盘、硬盘、CD-ROM、MO、DVD、半导体存储器等存储介质。
实施例3处理器下面,说明扩充了所述的实施例1的处理器的处理器的实施例。
关于本处理器的硬件结构,大部分与所述的实施例1的处理器相同,但是在执行组内配置的指令群的执行条件信息的配置中加了限制。具体而言,是在一个执行组内,具有同一执行条件的指令必须连续配置的限制。后述的实施例4的编译装置根据该限制生成代码。由此,作为处理器,指令发出控制部的结构不同。
(指令发出控制部的结构和动作)图23表了本实施例的处理器的指令发出控制部140和它的周边电路的结构。图23中的指令发出控制部140的大部分与图5所示的实施例1的处理器的相同。不同之处在于执行指令选择控制部141的控制方法和在执行指令选择控制部141的后段追加了指令结合部142。
首先,执行指令选择控制部141与实施例1所示的同样,对于执行条件为假的指令,进行实质地消除指令自身的控制,但是,如上所述,与实施例1不同,在指令的配置顺序中加了限制,所以积极地利用了它。具体而言,在指令的配置顺序中,因为有连续配置具有相同执行条件的信息的指令限制,所以首先把解码后的指令群按各执行条件分类。根据指令的配置顺序的限制,能容易地进行该分类。
接着,按分类的各执行条件,检查执行条件标志的值是否确定为“0”。进行控制,消除已确定为“0”的条件标志为执行条件的指令群,决定实际应发给执行部40的指令群。由此,条件标志的检查次数停留在最小,能同时检测多个指令的消除可能性,能高速并且简单地进行应发给执行部40的指令的检测。
接着,在基于执行指令选择控制部141的指令的消除后,指令群被传给指令结合部142。这里,对于确定了实际用执行部40执行操作的指令群,检测是否能把多个指令结合为一个复合指令,当能结合时,把该指令的控制信号变更为新复合指令,进行操作数的结合,进行控制,与执行指令选择控制部同样,消除后续的指令。这样,从指令结合部142输出与作为硬件搭载的运算器的个数相应的两个指令所对应的控制信号和操作数数据,传送到执行部40。这些指令分别有可能是多个指令的复合指令。
(处理器的动作)下面,使用图24,就本处理器的具体的动作加以说明。图24是表示包含条件执行指令的程序的一个例子的图。该程序由四个指令构成,表示语言与图9的程序相同。助记符号“lsr”表示寄存器的存储值的逻辑右移。
下面,说明各执行单位的本处理器的动作。在这里,在最初的时刻,条件标志C0的值确定为“0”,C1的值为“1”。
(执行单位1)从外部存储器提供了包含指令1、指令2、指令3、指令4的信息包,分别传送给指令寄存器23。接着,指令发出控制部140参照各指令的并行执行边界信息E。这时,因为指令1、指令2、指令3的并行执行边界信息E都是“0”,所以不进行指令解码器的解码结果的无效化。
接着,指令发出控制部140参照各指令的执行条件信息P,用执行指令选择控制部141选择执行操作的指令。指令1是经常执行的指令。指令2的执行条件标志是C0,C0的值确定为“0”,所以实质地消除指令2自身,不执行操作。因为后续的指令3和指令4的执行条件标志都是C1,所以只参照一次条件标志C1,因为C1的值确定为“1”,所以把指令3和指令4都作为执行对象。这样,指令1、指令3和指令4被送到指令结合部142。
在指令结合部142,对于输入的指令群的全部组合,判定能否生成复合指令。这时,检测出把指令1(移位)和指令4(加法指令)结合,能生成移位加法指令。于是,作为第一个指令,与移位加法对应的控制信号和操作数被传给执行部40;作为第二个指令,与指令3对应的控制信号和操作数被传给执行部40。
在执行部40中,把寄存器R3的存储值逻辑右移寄存器R1的存储值后得到的值加上寄存器R2的存储值,把得到的值存储在寄存器R2中,把寄存器R0的存储值加1得到的值存储在寄存器R0中。
如上所述,图24所示的程序在处理机器中在一个执行单位中执行。在本处理器中,基于确定的执行条件的指令自身的消除后,尝试把指令彼此结合为一个复合指令。由此,能提高实质的运算效率。另外,利用连续配置具有同一执行条件的指令的限制,使在解码阶段选择实际执行操作的指令的处理高速化。
实施例4编译装置下面,说明生成上述实施例3的处理器所执行的代码的编译装置及其编译方法的实施例。
关于本编译装置的结构,大部分与所述的实施例2的编译装置相同,但是不同之处在于关于一个执行组内的指令,按照各自的执行条件,在配置上有限制;考虑了处理器的解码阶段的指令的结合。具体而言,指令安排部的结构不同。
(指令安排部)本实施例的编译装置的指令安排部与实施例2的指令安排部102同样,由条件排他性解析部、依存关系解析部、指令再配置部、以及执行边界附加部构成,但是,不同点只在于指令再配置部的再配置方法。
图25表示了本实施例的编译装置的指令再配置部的程序流程图。本实施例的编译装置的指令再配置部的处理步骤与实施例2的编译装置的指令再配置部112的处理步骤大部分相同,但是不同点在于判定能否配置的部分;在确定了配置节点后,调整配置顺序。具体而言,图25的步骤S71~S82中,可配置判定(步骤S75)和配置顺序调整(步骤S81)与图18所示的流程不同。
与实施例2的编译装置同样,通过条件排他性解析部、依存关系解析部,生成了依存标志,移到指令再配置部。然后,根据考虑了条件排他性的依存标志,应该进行指令的再配置,但是,在步骤S74选择了最佳节点后,当在步骤S75中,进行可配置判定时,关于进行了假配置的节点群和最佳节点,不只是考虑执行条件的排他性,也考虑关于所有组合的指令结合的可能性,进行可配置判定。即当某两个节点有可能结合时,把这两个节点结合,作为一个指令处理,进行可配置判定。
当在步骤S80中,确定为在该周期中可配置的节点后,在步骤S81中,进行配置顺序的调整。具体而言,把在该周期中可配置的节点群分别按各执行条件分类,调整节点的配置顺序,使具有同一执行条件的节点必须连续配置。由此,实现了硬件的控制的简单化。
(编译装置的动作)下面,参照图26,使用具体的指令,就本编译装置的特征构成要素的动作加以说明。图26是通过编译器上游部以及汇编代码生成部生成的汇编代码的一个例子。指令安排部接收图26的代码作为输入。图26中包含的各指令的意思如下。在此,假设条件标志C0和C1根据指令1以前的指令变为排他的关系。
指令1…把寄存器R3的存储值逻辑右移寄存器R1的存储值。
指令2…只当条件标志C1的值为真时,把寄存器R0的存储值加1,存储到寄存器R0。
指令3…只当条件标志C0的值为真时,把寄存器R0的存储值减1,存储到寄存器R0。
指令4…只当条件标志C1的值为真时,把寄存器R1的存储值和寄存器R2的存储值相加后,存储到寄存器R2。
下面,就指令安排部的动作加以说明。首先,启动了条件排它性解析部和依存关系解析部,生成了依存图表。在例子中,考虑条件标志C0和C1是排他的,分析资源的定义和参照关系。
接着,启动了指令再配置部。如果沿着图25的程序流程图进行说明,则首先生成配置候补节点集合(步骤S72)。这里,只有指令1成为配置候补节点。接着,取出最佳节点(步骤S74)。这里,自动地选择了指令1。然后,在可配置判定(步骤S75)中,判断为可配置。在配置状态判定(步骤S77)中,判断为可配置。然后,在配置候补节点追加(步骤S78)中在配置候补节点中追加了指令2、指令3、指令4作为成为追加对象的指令。
然后,再次返回,取出最佳节点(步骤S74)。这里,首先选择了指令2,判断为可配置(步骤S75)。
然后,再次返回,取出最佳节点(步骤S74)。这里,选择了指令3。而且,因为指令2和指令3的执行条件为排他的,所以满足2个这一运算器的限制,判断为可配置(步骤S75)。
再次返回,取出最佳节点(步骤S74)。这里,自动地选择了剩下的指令4。然后,进行可配置判定(步骤S75),但是当假定执行条件C0为真时,只有指令1和指令3有效,所以满足了运算器的限制。而当假定执行条件C1为真时,指令1、指令2、指令4等三个指令有效。于是,对于其间所有组合,调查指令的结合可能性。这里,判断为能把指令1和指令4结合,当成硬件上设置的移位加法指令,结果,因为两个指令变为有效,所以判定为可配置。
在上述步骤中,在第一周期中配置了全部指令,确定配置节点(步骤S80)。接着,按执行条件把各节点分类,进行配置顺序的调整(步骤S81)。具体而言,因为指令2和指令4的执行条件C1相同,所以把配置顺序重新排列为指令1、指令2、指令4、指令3,使指令2和指令4继续配置。到此结束了指令再配置部的处理。
最后,启动了执行边界附加部。这里,在由所述指令再配置部配置的指令群的末尾的指令中设置并行执行边界信息。具体而言,在指令3的并行执行边界信息中设置“1”,在剩下的指令的并行执行边界信息中设置“0”。到此结束了指令安排部的处理。
如上所述,在本实施例的编译装置中,在编译中要做到使图26所示的指令列在一个执行组中执行。这里,在可配置判定(步骤S75)中,体现了考虑了在处理器的解码阶段的指令结合的效果。通过调整使具有相同执行条件的指令连续配置,能简化在处理器的解码阶段选择有效指令时的控制。
须指出的是,通过把本实施例所示的编译装置的处理步骤存入软盘、硬盘、CD-ROM、MO、DVD等存储介质,就能用计算机实现本实施例中表示的编译装置。
另外,也能把用本实施例的编译装置生成的执行形式代码存入软盘、硬盘、CD-ROM、MO、DVD、半导体存储器等存储介质。
以上,根据实施例说明了本发明的处理器和编译装置,但是本发明当然并不局限于这些实施例。下面,列举变形例。
(1)在所述实施例的处理器和编译装置中,假设执行固定长度的指令,但是本发明不局限于这样的指令格式。本发明也适用于可变长度的指令格式。
(2)在所述实施例的处理器和编译装置中,假定为具有两个运算器,但是本发明并不局限于该运算器数。本发明也适用于具有1一个运算器或三个以上运算器的处理器。
(3)在所述实施例的处理器和编译装置中,假设编译装置静态地抽出指令并行性,但是本发明并不局限于该指令并行处理方式。例如本发明也适用于用硬件动态抽出指令并行性的超标量体系结构方式。这时,从本发明的指令格式除去并行执行边界信息E,一边用指令发出控制部动态地检测与该信息依存的处理,一边实施就可以了。
(4)在所述实施例的处理器和编译装置中,作为图18中的步骤S54的最佳节点的决定方法,使用了到依存标志的结束端的执行时间的总和,但是,本发明并不局限于该选择基准。例如,也可以在多个执行流程中,优先选择特定的路径。这时,在取出最佳节点(步骤S54)时,提高具有某特定的执行条件的指令的优先级。由此,能进行特化为执行频率高的路径等特定的执行路径的安排。
(5)在所述实施例的处理器的指令发出控制部中,必须使最初出现的并行执行边界信息E为“1”的指令以后的指令的解码结果无效化,但是也不一定要这样。当用指令发出控制部内的执行指令选择控制部判断为传给执行部的指令在所述最初出现的并行执行边界信息E为“1”的指令以前一个也没有时,可删除该周期全体,把接着出现的并行执行边界信息E为“1”的指令之前的指令群作为该周期的发出对象。即,当并行执行边界信息E为“1”的指令之前只要存在一个判定为应该执行有效操作的指令时,把该指令作为并行执行的边界,使以后的指令的解码结果无效化,当不是这样时,可忽略该指令的并行执行边界信息E,通过参照后续的指令的并行执行边界信息E,检测新的并行执行边界。由此,能进一步削减执行周期数。
如上所述,根据本发明,能提供出实现硬件的有效利用、性能提高的处理器、编译装置与编译方法、存储介质。
权利要求
1.一种处理器,其中,包括如下各单元指令提供单元——用于提供多个指令,和解码单元——用于分别把所述多个指令进行解码,和指令发出控制单元——参照用执行条件信息指定的条件,决定执行有效操作的指令或指令的集合,执行条件信息是在所述多个指令中指定表示是否执行各指令的信息,及执行单元——根据指定执行一个或多个操作,所述指定是指在所述多个指令中指定各指令的动作;指令发出控制单元具有以下功能通过参照用执行条件信息指定的条件,判断是有必要执行的有效指令还是没有必要执行的无效指令,对于判断为是无效指令的指令,通过控制使得该指令在被向所述执行单元发出前被删除,并且还通过控制使得该指令被该指令的后续有效指令所取代,向所述执行单元发出。
2.根据权利要求1所述的处理器,其特征在于所述执行单元具有在执行与所述指令对应的操作后用于使执行结果无效化的执行结果无效化单元,还包括指令无效化方法选择单元——对于各指令,选择是在向所述执行单元发出前删除该指令自身,还是用所述执行结果无效化单元使执行结果无效。
3.根据权利要求2所述的处理器,其特征在于所述指令无效化方法选择单元通过参照表示各条件标志的值是否确定的条件标志有效信息,决定选择哪个指令无效化方法;所述条件标志有效信息中,当所述解码单元解码为是更新条件标志的指令时,该条件标志的确定性设置为假,而当用所述执行单元执行该指令、该条件标志的值确定了时,设置为真。
4.根据权利要求1所述的处理器,其特征在于所述指令发出控制单元还具有以下功能检测能用单一的指令实现多个指令的功能的指令组合,从而进行结合,把这些个指令作为单一的指令处理。
5.根据权利要求4所述的处理器,其特征在于所述多个指令的结合适用于向所述执行单元发出前删除指令以后才被适用。
6.根据权利要求1所述的处理器,其特征在于所述指令发出控制单元,当在各周期中连续配置了具有相同的所述执行条件信息的指令时,预先把由所述解码单元解码的多个指令按各执行条件分类,按该分类参照条件标志来判断是有必要执行的有效指令还是没有必要执行的无效指令。
7.根据权利要求1所述的处理器,其特征在于在所述多个指令中,指定了表示是否为各指令并行执行的边界的并行执行边界信息,所述指令发出控制单元还具有如是功能参照各指令的所述并行执行边界信息,检测出在当前周期中为执行对象的指令群。
8.根据权利要求7所述的处理器,其特征在于所述指令发出控制单元,当用指令内的并行执行边界信息检测的边界指令以前的所有指令作为没有必要执行的无效指令被删除时,使该边界指令的并行执行边界信息无效化,通过参照该边界指令以后的并行执行边界信息,检测当前周期的新的并行执行边界。
9.一种处理器,其中,包括如下各单元指令提供单元——用于提供多个指令,和解码单元——用于分别把所述多个指令进行解码,和指令发出控制单元——决定执行有效操作的指令或指令的集合,及执行单元——根据指定执行一个或多个操作,所述指定是指在所述多个指令中指定各指令的动作;指令发出控制单元具有以下功能从用所述解码单元解码的指令群中,检测出能用单一的指令实现多个指令的功能的指令组合,进行结合,把这些个指令作为单一的指令处理。
10.根据权利要求9所述的处理器,其特征在于所述指令发出控制单元还具有以下功能检测出在当前周期中未成为执行对象、删除对象、结合对象而剩下的指令群,进行控制使这些指令群在下一周期以后成为发出对象。
11.一种编译装置,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有用于把所述源代码中的指令重新排列、使应该并行执行的指令相邻的多个指令安排单元;所述指令安排单元包括如下各单元条件排他性解析单元——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置单元——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述指令再配置单元,判定一下配置在当前周期中的指令中执行有效操作的指令使用的运算资源是否超出搭载在对象仪器上的运算器的限制,并且当判定为配置在当前周期中的两个指令的执行条件在所述条件排他解析单元中不能同时成立时,在一定的条件下,只把任意一方的指令作为使用运算资源的指令处理。
12.根据权利要求11所述的编译装置,其特征在于所述指令再配置单元,即使当配置在当前周期中的两个指令的执行条件在所述条件排他性解析单元中判定为不会同时成立时,只要所述指令中的至少一方指令的执行条件所对应的条件标志的内容不确定,也作为所述两个指令双方使用运算资源处理。
13.根据权利要求12所述的编译装置,其特征在于所述指令再配置单元根据当前周期的前一周期中,是否配置了更新所述两个指令的至少一方指令的执行条件所对应的条件标志的指令,判定条件标志的内容是否确定。
14.根据权利要求11所述的编译装置,其特征在于所述指令再配置单元,根据所述条件排他性解析单元的分析结果,对于执行条件不会同时成立的指令,处理为只有一方使用运算资源,并且检测出能用单一的指令实现使用运算资源的多个指令的功能的指令组合,把这些多个指令结合,作为单一指令处理。
15.根据权利要求11所述的编译装置,其特征在于所述指令再配置单元还具有以下功能对于在当前周期中判定为可配置的指令的集合,调整配置顺序,使具有相同的执行条件的指令连续配置。
16.根据权利要求11所述的编译装置,其特征在于所述指令再配置单元,当选择当前周期中配置的指令时,优先选择多个执行条件中具有特定的执行条件的指令。
17.一种编译装置,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有把所述源代码中的指令重新排列、使应该并行执行的多个指令相邻的指令安排单元;所述指令安排单元具有进行指令的重新配置、使得可以按周期区分可并行执行的指令的集合的指令再配置单元;所述指令再配置单元检测能用单一的指令实现多个指令的功能的指令组合,把这些多个指令结合,作为单一指令处理,判定能否在当前周期中配置。
18.根据权利要求17所述的编译装置,其特征在于所述指令安排单元还具有执行边界附加单元,该执行边界附加单元根据所述指令再配置单元的结果,在指令内附加表示是否为并行执行的边界的并行执行边界信息。
19.一种编译装置,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有用于把所述源代码中的指令重新排列、使应该并行执行的指令相邻的多个指令安排单元;所述指令安排单元包括如下各单元条件排他性解析单元——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置单元——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述条件排他性解析单元,对于各基本块开头的指令和更新与操作执行的有效性相关的某一条件标志的指令,生成表示在各时刻的各条件标志间的同时成立可能性的表。
20.根据权利要求19所述的编译装置,其特征在于所述指令安排单元还具有用于分析指令间的依存关系的依存关系解析单元;所述依存关系解析单元,根据用所述条件排他性解析单元生成的表,检索各指令的在执行时刻是有效的条件标志间的同时成立可能性,分析两个指令能否同时执行。
21.一种编译方法,用于把用高级语言记述的程序的源代码变换为执行形式代码,其中,具有把所述源代码中的指令重新排列、使应该并行执行的多个指令相邻的指令安排步骤;所述指令安排步骤包括如下各步骤条件排他性解析步骤——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置步骤——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述指令再配置单元具有如是可配置判定步骤判定一下配置在当前周期中的指令中执行有效操作的指令使用的运算资源是否超出搭载在对象仪器上的运算器的限制,并且当判定为配置在当前周期中的两个指令的执行条件在所述条件排他解析步骤中不能同时成立时,只把任意一方的指令作为使用运算资源的指令处理。
22.一种记录了程序的存储介质,记录了把用高级语言记述的程序的源代码变换为执行形式代码的程序,其中,所述程序具有把所述源代码中的指令重新排列、使应该并行执行的多个指令相邻的指令安排步骤;所述指令安排步骤包括如下各步骤条件排他性解析步骤——对于执行附加在各指令中的有效操作的条件,解析各条件可否同时成立,及指令再配置步骤——进行指令的重新配置,使得可按周期中区分并行执行的指令的集合;所述指令再配置单元具有如是可配置判定步骤判定一下配置在当前周期中的指令中执行有效操作的指令使用的运算资源是否超出搭载在对象仪器上的运算器的限制,并且当判定为配置在当前周期中的两个指令的执行条件在所述条件排他解析步骤中不能同时成立时,只把任意一方的指令作为使用运算资源的指令处理。
全文摘要
处理器在执行阶段以前,用指令发出控制部31对超过搭载的运算器个数的指令解码,进行执行条件的判定,对于条件为假的指令,使该指令自身无效化,进行分配,使后续的有效指令有效地使用运算器(硬件)。编译装置进行安排,使执行条件为真的指令的个数不超过硬件并行度的上限。在各周期中,并行配置的指令个数自身可以超过硬件并行度。克服了以下问题在条件执行指令中,当条件不成立时,作为无动作指令执行,使硬件的利用率低,有效性能下降。
文档编号G06F9/45GK1409210SQ02142499
公开日2003年4月9日 申请日期2002年9月20日 优先权日2001年9月20日
发明者瓶子岳人, 高山秀一, 田中哲也, 小川一, 桧垣信生 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1