资源分配装置的制作方法

文档序号:6410127阅读:115来源:国知局
专利名称:资源分配装置的制作方法
技术领域
本发明是关于在用高级语言编写的程序翻译成机器语言程序的编译程序中将程序中的变量分配到寄存器、存贮器等资源的资源分配装置。
近年来,采用面向机内用途的微处理器以适应各种各样要求的信息设备正在蓬勃发展。在这样的信息设备开发中,在软件方面,也要求处理的高速化和彻底降低硬件成本(缩小存贮器尺寸)。因此,在上述信息设备的开发中,应彻底去掉冗长的传输命令、最大限度地发挥寻址方式等微处理器所具有的功能,采用汇编语言进行软件的开发。但是,由于汇编语言的语法是微处理器的命令体系,所以,开发效率低,在源文件的移植性方面有问题。因而采用高级编程语言来完成面向机内用途的微处理器的软件来提高开发效率,近年引起了很大的关注。
如采用高级编程语言,程序员可以用将变量作为操作算符的运算来表现程序中的数值的保持、运算、传送等处理。此变量可以利用程序任意地定义,而且,可以只采用必要的个数,所以,程序员可以自由地描述程序。另外,所描述的程序(称为源程序)经过编译就成为计算机可以理解的机器语言程序。该机器语言程序中的运算由机器语言命令表示,而由于该机器语言命令将寄存器或存贮器作为操作算符,因而必须给上述变量分配寄存器或存贮器。这种分配处理被称为资源分配处理。此资源分配处理在最大限度发挥微处理器的能力的软件开发中受到特别的重视。
在对现有的资源分配装置加以描述以前,对下面的说明中使用的术语进行说明。
变量的定义、引用、使用设定变量值称为“定义”;使用设定的值称为“引用”。另外,在程序中定义或引用变量,称为“使用”。
中间命令为易于处理,编译程序将源程序码变换成为中间的代码称为中间码,中间代码的一步叫做中间命令。在中间命令中存在4组或3组等,将它们变换后就生成最终的目标码。另外,将源程序变换成中间命令串的程序叫做中间程序。
生存区间所谓生存区间,广义地说就是各变量所保持的值为有效的区间,狭义地说就是指从定义变量值的中间命令到最后引用该被定义的值的中间命令为止的程序中的区间,生存区间即以其区间由所包含的中间命令的集合来表示。这里,定义变量值的中间命令相当于生存区间的开始点,在引用在生存区间中定义的值的中间命令中,最后引用的中间命令相当于生存区间的结束点。另外,由于以中间命令的集合积来判断生存区间的重复、非重复,所以,在生存区间的终始一致的中间命令中,设定生存区间不重叠。
中间命令程序(将图3A所示的源程序变换后的程序)和与该生存区间的对应的例子示于

图1中。在图1中,生存区间以竖线条s1、s2、s3表示。生存区间的起始点和结束点以p1、p2、p3、p4……代表。在图1中,变量c和d存在2个起始点,这是因为变量c、d是在判定语言“if(b<10){处理p1}else{处理p2}”的处理p1、p2中定义的缘故。
分配对象作为资源的分配对象,还有单纯地取变量的情况,但是,对于一个变量存在多个生存区间时,可以对各个生存区间分配各自的资源元素,所以,在本说明书中分配对象是指变量和生存区间的组合,分配对象保持变量和生存区间。这里,当如图1的变量b那样存在多个生存区间时,为了相互区别起见,对于分配对象b1、b2,作为独立的分配对象表示。
而将“定义”、“引用”、“使用”分配对象保持的变量分别称之为“定义”、“引用”、“使用”保持该变量的分配对象。并将分配对象定义的中间命令和引用的中间命令分别称做该分配对象的定义中间命令、引用中间命令,而将定义和引用中间命令合并称之为使用中间命令。
分配优先级进行分配时用于决定分配对象的分配顺序的参数。
计算分配优先级有各种各样的方法。例如,下面{公式1}中所示即为以程序中的分配对象的使用率作为分配优先级时的计算公式的例子。
{公式1}分配优先级=使用率=分配对象使用的中间命令的个数/生存区间的长度另外,在程序中的循环处理中存在分配对象使用的中间命令时,亦可在分配优先级中算入其循环层次。
例如分配优先级=使用率=使用中间命令存在的循环层次总和/生存区间的长度。
资源元素是计算机硬件的元素中可以对分配对象分配的最小单位。暂时保存值的缓存器和各个寄存器、存贮器中的单位地址的存贮器元素即为其例子。0号寄存器、1号寄存器、地址100的存贮器、地址101的存贮器即分别为别的资源元素。
资源表示完成相同功能的资源元素的集合。
例如,在资源中存在寄存器和存贮器。另外,寄存器能像地址寄存器(AR)、数据寄存器(DR)、全局寄存器、局部寄存器这样按完成相同功能来加以分类。存贮器则能像高速存贮器、低速存贮器那样以实现相同功能来分类。这样,只要资源元素能按完成相同功能加以分类,则其分类就成为各个资源。
干涉图形是用图形来表示分配对象与分配对象之间的生存区间的重叠的图象。
干涉图形是以分配对象作为图形的顶点,以生存区间作为相互连结重叠的分配对象(顶点)的边来描绘的。
顶点的次数在干涉图形中,是与顶点连接的边数。
图2是编译程序的结构图。编译程序由语法分析设备11、优化设备12、资源分配设备63、代码生成设备14组成。下面,利用图1、图2的结构图及图3A、3B、3C的说明图说明该编译程序的各组成部分。
语法分析设备11对作为文件存贮在存贮装置(图外)中的源程序进行句法分析、语法分析和语义分析,将源程序变换成中间程序。例如,将图3A的源程序变换成图1的中间程序。
优化设备12为了改善最后生成的机器语言程序的程序大小及处理执行时间对中间程序作优化处理。由于优化过程的细节不是本发明的主要着眼点,所以,说明从略,仅对与资源分配处理特别相关点加以说明。优化操作中包含有称为基本分块化、控制流分析、数据流分析的操作。基本分块化处理是将处理对象程序分割成基本程序块。
现对这种分割处理作简单说明。首先,优化设备12检测中间程序的最初的中间命令、无条件或条件转移的目的中间命令、无条件或条件转移之后的中间命令,将所检测的这些作为引导。优化设备12,由此引导开始提取直至下一引导的前一个或直至程序的最后为止的一系列中间命令。利用该提取处理得到的命令串称为基本程序块,作为以后的处理单位。
控制流分析是指对各基本程序块间的控制流程进行分析。
数据流分析是指对各基本程序块中各个的变量在何处定义,在何处被引用的情况进行分析。参照这些分析结果可以获得变量的生存区间的信息。
资源分配设备63采用作为资源分配用算法之一的利用图形退化的图形彩色法,将寄存器、存贮器分配给中间程序中的分配对象。利用图形退化的图形彩色法是指在进行干涉图形各顶点的分色时按照如果以边连接就涂不同的颜色的规则近似地以最少的颜色数来进行干涉图形各顶点的分色的算法。图3A的程序中的分配对象通过资源分配处理,如图3B那样分配资源元素。在本图中,示出了对图3A所示的分配对象分配资源元素R0,对分配对象b2分配资源元素R2。
代码生成装置14如图3c所示的那样使中间程序内各中间命令实现机器语言命令化,将中间程序变换成目标机器能识读的机器语言程序。将这样由代码生成装置14变换的机器语言程序称为目标程序。此目标程序中的机器语言命令与图1的源程序和中间程序的对应用符号①②③④表示。在上述机器语言命令化中,对各机器语言命令的操作数使用图3B中所示的资源分配结果。另外,图中的传输命令t11、t12、t13、t14、t15……是为了图1的中间程序的各中间命令的处理利用机器语言命令实现而由代码生成设备14生成的。按照资源分配的结果,也有可能某几个这种传送命令是不用的。在图3c中,由于分配对象b2和c分配给同一寄存器,所以,⑦是无需生成传送命令的例子。
下面对资源分配设备63进行说明。上述采用图形彩色法的资源分配处理的详情在下列文献中有记载。
作为现有的资源分配方式,特别是寄存器的分配方式的有[1]A.V.Aho,R.Sethi,J.D.Ullman“CompilersPrinciples,Techniques and Tools(编译程序原理,技术及工具)”,Addison-wesley,1986[2]Chaitin“Register Allocation and Spilling via graphcoloring(通过图形彩色进行寄存器分配和散失)”US Patenr No.4 571 678,Feb.18,1986[3]Frederick Chow,John Hennessy“Register Allocation byPriority-based Coloring(利用优先级的彩色进行寄存器分配)”,Compnter Systems Laboratory,Stanford University[4]David Bornstein,…Ron Y.Pinter“Spill Codeminimization techniques of ontimizing compilers(优化编译程序的散失码最小化技术)”,SIGPLAN 1989,IBM Israel Science andTechonolugy Techniow City Haifa Israel[5]佐佐政孝“プロゲラミング言语处理系(编程语言处理系统)”,岩波书店レヅスタ割付け(寄存器分配)p420~p423。森、他“复合バンク机构み考虑レた系统的存レジスタ割当て方式とその一般化(考虑复合存贮装置的系统的寄存器分配方式及其通用化)”,情报处理学会Vol.30,No,6,Jun,1989(基本上是以基于寄存器彩色法为主流。)上述资源分配设备63的结构示于图4。如图4所示,资源分配设备63具有根据优化设备12的处理结果生成分配对象的分配对象生成部分71、保存由分配对象生成部71所生成的分配对象的分配对象保持部分72、应用上述{公式1}所示的计算式计算并存储该保持部所保持的各分配对象的优先级的优先级计算部73、存贮关于图1所示的各分配对象的生存区间的信息和该生存区间如何重叠的信息的生存区间信息存贮部74、将保持部所保持的全部分配对象展开成干涉图形状的展开部75、用于展开部进行展开用的缓存器76、用于装载全部由展开部暂时展开的分配对象的堆栈77、以上述利用图形退化的图形彩色法进行资源分配的控制部80和以图3B的形式存贮资源分配结果的存贮部78。
图5A、5B及图6A~6I用来说明利用图形退化的图形彩色法。现在利用这些图来说明上述资源分配设备63的处理情况。这里,设能分配的寄存器为三个,没有分配给寄存器的即分配主存贮器。
上述展开部75用图5A所示的干涉图形表示图1所示的分配对象和该分配对象的生存区间的重叠。在这样的干涉图形中,各分配对象具有怎样的分配对象和生存区间的重叠用由顶点发出的边数(次数)表示。另外,由于在图5B所示的分配对象中生存区间的终点和始点在1中间命令中彼此相一致的(图1的分配对象b2、c)可看作是一个分配对象,所以,图5B所示的控制部80将各自相对应的顶点加以结合来简化干涉图形(图5B分配对象b2、c)。这样简化之后干涉图形的顶点中出现高低不同的现象,顶点的次数在寄存器的数量小于3时的顶点称为次数低的顶点,次数大于寄存器的数量的顶点称为次数高的顶点。这种次数的高低被用作为图形退化的成立条件。所谓图形退化是指,如图6A的矢量y11、y12指示的那样按由{公式1}求得优先级低的顺序消除次数低的顶点,将对消除的顶点的分配对象装载入后进先出式的堆栈区内,消除e2和d的结果是图5A和5B所示的干涉图形向图6B所示状态变迁。
在此图6B的状态下,由于所有顶点的次数都高,所以,上述条件不成立。因此,在这些顶点中,如矢量y13所示的那样,对优先级最低的分配对象b1分配存贮器消除顶点b1。通过消除该顶点b1,干涉图形向图6c变迁,上述成立条件再次成立。在图6c的状态下再次反复进行图形退化处理,如图6D所示的那样将全部分配对象装入堆栈。在这样装载处理结果之后,进行资源分配处理。首先,如图6E所示从堆栈顶点取出分配对象a,将寄存器R0分配给分配对象a,同样,从堆栈顶点取出分配对象e1、b2c,如图6F、6G所示,将寄存器R1、R2分配给分配对象e1、b2c。下一顺序的分配对象e2、d与b2c的生存区间重叠,但与分配对象a、e1的生存区间不重叠,所以,如图6H中所示,将能分配的寄存器中号码最小的寄存器R0分配到分配对象e2,同样,如图6I所示,将寄存器R1分配给分配对象d。借助这样的分配处理,可将不同的寄存器分配给生存区间相互重叠的分配对象。
上述分配对象a、b2、c、d、e1、e2、b1通过资源分配处理分配某个资源元素,在C语言等高级语言中存在预先设定与分配对象的组合的寄存器。这就是为了实现提高函数调用操作的效率所采用的寄存器,称为自变量寄存器、返回值寄存器、破坏性寄存器。
自变量寄存器是指在调用函数时以寄存器引渡自变量所用的寄存器。中间程序中作为自变量使用的分配对象分配这种自变量寄存器。
返回值寄存器是用于送回函数调用的返回值的寄存器。中间程序中用于送回返回值的分配对象分配此返回值寄存器。
破坏性寄存器是分配给在函数调用开始和结束时的存放值无需保留的寄存器。这种破坏性寄存器的目的是为减轻函数调用的总开销。在进行上述函数调用时,利用在所调用的函数内的处理可以改写各寄存器的内容,在函数调用的前后必须进行寄存器内容的保存、复元。但是,由于对全部寄存器进行这种保存、复元操作会使函数调用操作的总开销增大,因此,预先设定不必进行寄存器内容的保存、复元作业的破坏性寄存器,为了在生存区间不合有分配对象中的函数调用命令,还是分配破坏性寄存器,以使保存、复元操作减少到最低限度。
但是,按照上述现有技术的资源分配设备,则存在只能进行使目标程序的执行时间、存贮器尺寸增大的资源分配的问题。现参照图7对此问题进行说明。此图中的竖线表示分配对象的生存区间,其中,空白部分表示未分配的分配对象,画斜线的部分表示已经分配的分配对象。另一方面,在此图中,由于表示分配对象x0、x1、x5的竖线具有与表示分割对象z0、z1、z2的竖线平行的部分,可见它们生存区间相互重叠。
例如,如图7所示,生存区间相互连接的那些分配对象之间(分配对象x0、x1、x2、x3、x4、x5)通过上述顶点结合而结合为一个分配对象y。结合的分配对象y与已经分配了资源元素R0的分配对象z0、分配了资源元素R1的分配对象z1、分配了资源元素R2的分配对象z2的生存区间重叠。这样,如果与已经分配的分配对象的生存区间相重叠,则分配给已经分配的分配对象的资源元素(资源元素R0、R1、R2)就不能分配给分配对象y。因此,组成分配对象y的分配对象x0、x1、x2、x3、x4、x5便全部分配了存贮器。如果将这些分配对象全都分配给存贮器,则将这些分配对象作为操作算符使用的中间命令就全部变换为将存贮器作为操作算符的机器语言命令。一般说来,操作算符在存贮器的机器语言命令的执行速度慢、存贮器的尺寸大时,将对目标程序的执行时间和存贮器的尺寸产生不良的影响。
另外,当资源分为3种以上的功能时,若不进行与资源的功能对应的分配对象的分配,就会对目标程序的执行时间和存贮器尺寸产生不良的影响。
在上述文献中,[6]所记载的内容是描述关于参照地址寄存器、数据寄存器等多种不同类的寄存器进行访问所需要的成本的资源分配。在该文献中,附加所谓的“保持C语言中的指针式那样的地址型变量的分配对象全都分配至地址寄存器”的规则。但在地址型的分配对象中,也可以存在加法运算和减法运算中多次使用,并且,少量进行存贮器作的间接引用的分配对象。关于数据寄存器,在具有高速加法运算和减法运算的目标机器中,如果一律将这样的分配对象分配到地址寄存器,在目标程序中就会产生多个从地址寄存器向数据寄存器传送的传输命令,结果,将使目标程序的存贮器的尺寸和执行时间增大。
这样,只单纯考虑在访问某种寄存器时所必须的成本,反而会招致生成很多传输命令。
另外,还存在有无法实现可能直接利用为了改善函数调用效率而设定的自变量寄存器、返回值寄存器、破坏性寄存器的存贮值进行资源分配方面的问题。
图形彩色法是一种为了最适当地区别干涉图形的顶点的近似算法。由于自变量寄存器、返回值寄存器、破坏性寄存器是在算法执行前预先分配给分配对象的资源元素,所以,在干涉图形中这些寄存器被看做是着色的顶点。为了实现能直接利用返回值寄存器、自变量寄存器的存放值的资源分配,如果将着色的顶点编入干涉图形内是有效的,就必须进行将其他顶点着色成这种颜色的处理,这就超出了图形彩色法的范围。鉴于上述理由,通常作为图形彩色法中分配的寄存器必须准备用于各个独立的自变量寄存器、返回值寄存器、破坏性寄存器的寄存器。并且,为了使用自变量寄存器、返回值寄存器的存放值,需要分配用寄存器的传输命令。这样,如果需要传输命令,则必然增大与追加该命令对应的目标程序的存贮器大小和执行时间。
上述问题所造成的影响仅在寄存器的数量足够充裕的情况下才可以不考虑。但是,如许多面向机内用途的微处理器那样限制寄存器的数量时,或者在设置完成功能不同的寄存器数量少但品种多时,这些问题就显得很突出了。
本发明的第一目的在于提供一种能按优先级顺序将资源元素分配给分配对象、并且可以通过将传送命令的生成数量限制到最低限度而将目标程序的存贮器大小和执行时间限制到最低限度的资源分配设备。
本发明的第二目的是提供能对嵌套级深的场所优先分配寄存器并能获得将这种已分配的寄存器不断向嵌套级浅的场所扩散的灵活的分配结果的资源分配设备。
本发明的第三目的在于提供能在使用频度高的场所优先分配寄存器并能获得不断地将这些已经分配的寄存器扩散到使用频度低的场所的灵活的分配结果的资源分配设备。
本发明的第四目的是提供详细地掌握生存区间的连接和已分配场所的远近及重叠而进行资源分配的资源分配设备。
本发明的第五目的在于提供能够确实地理解微处理器具有的资源的各个功能并适当地分配给分配对象的资源分配设备。
本发明的第六目的是提供自变量寄存器、返回值寄存器、破坏性寄存器等分配的对象预先确定的分配对象能够实现将其资源向周围扩展的那样灵活的资源分配的资源分配设备。
本发明的第一、第四目的可以按如下方式达到,即在将以高级语言编写的程序翻译成为机器语言程序的编译程序中使用的、生成多个作为以编程语言描述的程序中的变量与生存区间的组合的分配对象、顺序将具有寄存器、存贮器等硬件资源的资源元素分配给所生成的分配对象的资源分配设备中,具有根据分配对象中已经被分配的分配对象的生存区间与下一个应分配的分配对象的生存区间之间在程序中具有怎样的位置关系来对各资源元素计算出表示下一个应分配的分配对象中哪个资源元素合适的得失值的得失值计算装置、根据对各资源元素计算出的得失值的大小,将哪一资源元素分配给应分配的分配对象的分配装置和反复启动得失值计算装置及分配装置直至所有分配对象均被分配为止的控制装置。
利用这种结构,生存区间具有互相连接的位置关系的多个分配对象群根据生存区间的长短增加得失值,另外,因为在该群中的分配对象中尽管已分配的分配对象和生存区间重复,分配不同的资源元素,所以,生存区间相互连接的多个分配对象不是一律地分配到同一资源元素,而是以对生存区间的远近发生影响来进行资源分配。因而,周围的分配状态将影响下次的资源分配,从而可以进一步减少传输命令。
这里,如所述的那样,上述资源分配设备具有判定程序中各分配对象的位置关系的位置关系判定装置。此位置关系判定装置设置有判定已被分配资源元素的分配对象的生存区间与应分配的分配对象的生存区间是否重复的重复关系判定装置,和判定已被分配资源元素的分配对象的生存区间与应分配的分配对象的生存区间是否连接的已分配—被分配间连续判定装置。得失值计算装置设置有在由已分配—被分配间连续判定装置判定应分配的分配对象与生存区间为连接时,就根据从已被分配资源元素的分配对象到应分配的分配对象的生存区间长短,使判定为连接的已分配的分配对象增加被分配的资源元素的得失值的第一增加部。分配装置不将分配给具有由重复关系判定装置判定生存区间重复的已分配的分配对象的资源元素分配给应分配的分配对象,而将判定为生存区间不重复的已分配的分配对象中得失值最大的资源元素分配给应分配的分配对象。
如所述的那样,位置关系判定装置设置有检测具有与已分配了资源元素的分配对象重叠的生存区间的未分配的分配对象的已分配一侧的重叠分配对象检测装置和判定所检测的未分配的分配对象的生存区间与应分配的分配对象的生存区间是否连接的未分配—被分配间连续判定装置。得失值计算装置设置有当判定为连接时根据从由已分配一侧的重叠分配对象检测装置检测的未分配的分配对象到应分配的分配对象止的生存区间的长短减少分配给该已分配的分配对象的资源元素的得失值的第一减小部。
另外,由于通过减小得失值从应分配的分配对象角度看分配给发生损失的位置的分配对象的资源元素评估为较低级的,所以,周围的分配状态将影响下次的资源分配,从而可以大为减少传输命令。
如所述的那样,当利用分配毕侧重叠分配检测装置判定有多个未分配的分配对象时,未分配—被分配间连续判定装置就判断在被检测出的多个未分配的分配对象中哪一个生存区间与应分配的分配对象的生存区间连接。
按照上述就能够防止通过检测未分配的分配对象,多次减少已分配的分配对象所分配的资源元素的得失值,可以防止比其他情况评价为较低级的。
本发明的第二、三目的如所述的那样,具有与各分配对象相对应地存贮反映程序中分配对象的使用频度和/或生存区间的嵌套级的分配对象优先级的优先级存贮装置,得失值计算装置和分配装置按照优先级存贮装置存贮的优先级顺序确定应分配的分配对象。
按照上述由于按照使用频度或嵌套水平高的顺序进行资源元素分配,所以,可以实现计及生存区间的位置关系、使用频度和嵌套级的资源分配,从而可以提高目标程序的质量。
如所述的那样,位置关系判定装置设置有当由得失值计算装置对各资源元素计算出的得失值在多个资源元素相互间具有相同大小时,就检测具有与应分配的分配对象的生存区间重叠的生存区间的未分配的分配对象的被分配一侧重叠分配对象检测装置,和判定检测的分配对象的生存区间与已分配了资源元素的分配对象的生存区间是否连接的未分配—已分配间连续判定装置。得失值计算装置设置有检测由被分配一侧重叠分配对象检测装置检测的分配对象的优先级的优先级检测部计算从已分配的分配对象到被检测得的未分配的分配对象的生存区间长短的第一长短计算部和将检测的优先级乘以所计算出的长短值,并根据此计算结果减小该已分配的资源元素的得失值的第二减小部。
由此,按照上述,由于通过减小得失值,从应分配对象方面看分配给发生损失的位置的分配对象的资源元素评价为较低级的,所以,周围的分配状态对下次的资源分割产生影响,从而可以大为减少传输命令。
如所述的那样,位置关系判定装置设置有,检测具有与已分配了资源元素的分配对象的生存区间重叠的生存区间的未分配的分配对象的已分配一侧重叠分配对象检测装置和判定由被分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间是否与由已分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间相连接的未分配—未分配间连续判定装置。得失值计算装置设置有,计算从由被分配一侧重叠分配对象检测装置检测的未分配的分配对象开始到由已分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间长短的第二长短计算部和将检测的优先级乘以计算出的减短值并根据此乘法结果使分配给已分配的分配对象的资源元素的得失值增大的第二增加部。
按照上述,由于通过增大得失值从应分配的分配对象方面看分配给获益的位置的分配对象的资源元素评价为较高级的,所以,周围的分配状态对下次的资源分配产生影响,从而可以大为减少传输命令。
如所示的那样,当由已分配一侧重叠分配对象检测装置判定为多个未分配的分配对象时,未分配—未分配间连续判定装置判断所检测的多个未分配的分配对象中哪一个生存区间与应分配的分配对象的生存区间连接。
按照上述,通过检测未分配的分配对象,多次减少分配给已分配的分配对象的资源元素的得失值,可以防止比其他情况评价为较低级的。
如所述的那样,资源分配设备设置有对应地存贮全部资源元素和各个别资源元素的得失值的初始值的得失值存贮部。第一及第二增加部使得失值存贮部存放的各资源元素的得失值增加,第一及第二减少部使失值存贮部存放的各资源元素的得失值减小。
按照上述,得失值存贮部所存放的各资源元素的得失值由第一及第二增加部增加,得失值存贮部中所存放的各资源元素的得失值由第一及第二减小部减小。因此,从应分配的分配对象方面看,即使将同一资源元素分配给获益的位置和发生损失的位置,也能客观地评价该资源元素带来何种程度的利益或损失,从而可以更周密进行资源分配。或者,由于得失值存贮部对应地存放全部资源元素和各资源元素的得失值的累计的初始值,所以,如果全部资源元素分配给发生损失的位置,则不论未分配给哪一个分配对象的资源元素的得失值都比较大。因此,可以将不论未分配给哪个分配对象的资源元素分配到应分配的分配对象。
如所述的那样,本发明的第五目的,可以按如下方式达到,即具有当在程序中分配各资源的资源元素时,通过对应分配的分配对象与各资源元素的组合计算出其集合值的推断值来估算应分配的分配对象定义的全部定义命令和使用的全部使用命令的执行周期和/或代码大小的总和值达到何种程度的推断装置和比较各资源元素的推断结果即推断值并判断推断值为最小的资源元素是一个还是多个的资源元素单复判定装置。当判定为一个时,前述分配装置将推断值最小的资源元素分配给应分配的分配对象,当判定为多个时将得失值为最大的资源元素分配给应分配的分配对象。
按照上述,在切换使用推断值还是使用得失值后而使用推断值时,由于能将代码大小及执行时间反映到资源分配中,所以,可以充分灵活运用微处理器所具有的命令的详细的成本信息,为了从分为三种以上的功能的资源分配给分配对象,所以选出合适的多个资源元素。在开发面向具有多个功能不同的资源的机构用途的微处理器的程序时,如果使用本发明的编译程序,就能作成充分发挥该微处理器具备的功能的目标程序。
如所述的那样,推断装置具有使用机器语言的命令格式对程序中的分配对象的全部定义命令及使用命令输出表示程序中的分配对象的定义命令及使用命令的信息即命令模式的命令模式输出部、与由命令模式输出部输出的命令模式分别对应地存贮表示在机器语言命令的各操作数中应用各资源的资源元素时的该定义命令及使用命令的执行周期和/或代码大小的成本的成本存贮部和由成本存贮部取出与所输出的命令模式相对应的成本并将所取出的成本按各资源元素求和后将求和所得的总和值作为推断值的成本总和部。
按照上述,由于为了使分配对象的定义命令及使用命令实现机器语言化而精密地判断哪种资源的资源元素合适,所以,可以作成充分发挥目标机器的微处理器所备有的功能的目标程序。
如上述所述的那样,资源分配设备具有当由得失值计算装置对各资源元素计算出的得失值在多个不同资源的资源元素之间具有相同的大小时,对优先级比应分配的分配对象低并在应分配的分配对象之后分配的全部未分配的分配对象预测最适宜的资源元素的预测装置,而上述分配装置将由预测装置预测的资源元素分配给应分配的分配对象。
按照上述,当对已分配的资源元素计算的得失值在多个不同的资源的资源元素之间成为同样大小时,由于分配装置根据预测为与优先级更低的所有的分配对象相适应的资源元素,将资源元素分配给应分配的分配对象,所以,根据利用得失值的比较难分优劣时,便可进行更精密的资源元素的选择。结果,便可进行优先级更低的全部分配对象的定义命令、使用命令的执行时间和/或代码尺度小的资源分配。进而,如果这样分配资源元素,由于在进行下一个分配对象的分配时可以继承该资源元素,所以,生存区间互相连接的分配对象能够分配同一资源元素的可能性就提高了。
如上所述的那样,预测装置具有如下装置的结构,即检测所有具有与应分配的分配对象所具有的生存区间连接的生存区间并且优先级比该分配对象低的未分配的分配对象的第一后续分配对象检测装置,通过对由第一后续分配对象检测装置检测的全部分配对象与各资源元素的组合计算出该总和值的推断值来推断当将各资源元素分配给所检测的各分配对象时该分配对象定义的全部定义命令和使用的全部使用命令的执行周期和/或代码大小的总和值达到何种程度的第一推断装置、对由第一后续分配对象检测装置检测的每一分配对象计数介于第一后续分配对象检测装置检测的各分配对象与应分配的分配对象之间的连续的生存区间的长度的第一生存区间长度计数装置、将对所检测的各分配对象计数的生存区间的长短作为加权值,对由第一推断装置对检测的分配对象与各资源元素的组合所计算的推断值进行加权的第一加权装置、将由第一加权装置加权的推断值对每一资源元素进行求和的第一求和装置和将由第一求和装置求和的总和结果为最小的资源元素判定为与优先级比应分配的分配对象低的未分配的分配对象最适合的第一最佳资源元素判定装置。
按照上述,由于在优先级更低、并在应分配的分配对象之后进行分配的分配对象中,根据生存区间相互连续的定义命令、使用命令的执行时间和/或代码大小的推断值的大小和未分配的分配对象离应分配的分配对象多远进行预测,所以,位于接近应分配的分配对象的位置上的分配对象的定义命令、使用命令的执行时间和/或代码大小评估为大的,而将位于离应分配的分配对象远的位置上的分配对象的定义命令、使用命令的执行时间和/或代码大小评估为小的。因此,只要将同一资源元素分配给生存区间相互连续的分配对象便可提高可能性。结果,对于后续的分配对象,可以可靠地进行使执行时间和/或代码大小减小的资源元素的预测。
如上所述的那样,预测装置具有如下装置的结构,即当由第一最佳资源元素判定装置判定多个资源元素最合适时检测生存区间与应分配的分配对象重叠的未分配的分配对象和具有与此未分配的分配对象的生存区间相连接的生存区间的未分配的分配对象的第二后续分配对象检测装置、通过对检测的分配对象与各资源元素的组合计算出该总和值的推断值来推断当对由第二后续分配对象检测装置检测的未分配的分配对象分配以各资源元素时被检测的各分配对象定义的全部定义命令和使用的所有使用命令的执行周期和/或代码大小的总和值达到何种程度的第二推断装置、对由该第二后续分配对象检测装置检测的每一分配对象计数介于应分配的分配对象具有的生存区间与生存区间重叠的未分配的分配对象和具有与此重叠一侧的分配对象的生存区间连接的生存区间的分配对象之间而连续的生存区间长度的第二生存区间长度计数装置、将对该分配对象计数的生存区间的长短和各分配对象的优先级作为加权值对于由第2推断装置对由第二后续分配对象检测装置检测的未分配的分配对象与各资源元素的组合推断的推断值进行加权的第二加权装置、将经第二加权装置加权后的各分配对象的推断值对每一资源元素进行求和的第二求和装置和将由第二求和装置求和的各资源元素的总和值为最大的资源元素判定为与在应分配的分配对象之后进行分配的全部未分配的分配对象最合适的资源元素的第二最佳资源元素判定装置。
按照上述,由于在优先级更低并在应分配的分配对象之后进行分配的分配对象中,根据生存区间重叠一侧的分配对象的定义命令、使用命令的执行时间和/或代码大小的推断值的比较和应分配的分配对象离未分配的分配对象多远进行预测,所以,对于后续的分配对象,可以可靠地进行使执行时间和/或代码尺度减小的资源元素的预测。
如上所述的那样,第一和第二加权装置在由第一和第二生存区间长度计数装置计数的分配对象的生存区间长度为0时,将1作为生存区间的长短进行加权,当计数的生存区间的长度不是0时,就计算该生存区间长度的倒数,并将算出的生存区间长度的倒数作为生存区间的长短进行加权处理。
按照上述,由于计算应分配的分配对象的生存区间长度与由求和部求和的生存区间长度之和的倒数、并由倒数计算部将计算结果作为生存区间的长短,所以,可以将生存区间的长度之和反映在资源分配中,从而可以更多地减少传输命令。
如上所述的那样,资源分配设备中还具有存贮多个使用机器语言命令格式表示程序中的分配对象的定义命令和使用命令的信息即命令模式和与各命令模式对应地存贮表示在机器语言命令的各操作数中使用各资源的资源元素时程序中的分配对象的定义命令及使用命令的执行周期和/或代码大小的成本的成本存贮装置。第一推断装置具有读取与由第一后续分配对象检测装置检测的未分配的分配对象的所有定义命令及使用命令对应的命令模式并将读出的命令模式输出的第一命令模式输出部和从成本存贮装置取出与输出的命令模式对应的成本并将取出的成本对每一资源元素求和从而将求和的总和值作为推断值的第一成本求和部。第二推断装置具有读出与由第二后续分配对象检测装置检测的未分配的分配对象的全部定义命令及使用命令对应的命令模式并将读出的命令模式输出的第二命令模式输出部和从成本存贮装置取出与输出的命令模式对应的成本并将取出的成本对各资源元素进行求和从而将求和的总和值作为推断值的第二成本求和部。
按照上述,由于为了使分配对象的定义命令及使用命令实现机器语言命令化而精密地判断哪一资源的资源元素最适合,所以,对于后续的分配对象,可以更可靠地进行使执行时间和/或代码大小减少的资源元素的预测。
本发明的第六目的,可以如所述的那样,利用如下方式实现,即资源分配设备进而还具有从前述程序中检测应分配的资源元素预先确定的分配对象的预约分配对象检测装置和存贮应分配给预约分配对象检测装置检测的分配对象的资源元素的预约资源元素存贮装置。分配装置将应分配的资源元素分配给由预约分配对象检测装置检测的分配对象,并在分配之后将某个资源元素分配给优先级最大的分配对象。
按照上述,可以将自变量寄存器、返回值寄存器、破坏性寄存器分配给其他分配对象,从而可以进行能直接利用自变量寄存器、返回值寄存器、破坏性寄存器的存贮值的资源分配。因此,可以更多地减少传输命令。
如所述的那样,分配对象的生存区间的起始点和结束点均用程序中的命令位置信息表示。资源分配设备进而还具有分别对应地存贮程序中的分配对象、与各分配对象的生存区间的起始点相当的命令位置信息和与各分配对象的生存区间的结束点相当的命令位置信息的起始结束点存贮装置、参照起始结束点存贮装置查找出程序中与各分配对象的生存区间的起始点相当的命令位置信息和与结束点相当的命令位置信息、并将找出的分配对象和程序中的分配对象作成同一生存区间继承关系集合的第二集合化装置、参照起始结束点存贮装置查找出程序中与各分配对象的生存区间的结束点相当的命令位置信息和与结束点相当的命令位置信息,并将找出的分配对象和程序中的分配对象作成同一生存区间继承关系集合的第二集合化装置和将程序中的分配对象与由第一及第二集合化装置进行集合化处理后的生存区间继承集合对应地写入生存区间继承关系集合存贮部的写入装置。
按照上述,由于利用写入装置将程序中的分配对象和由第一及第二集合化装置进行集合化处理后的生存区间继承集合对应地写入生存区间继承关系集合存贮部,所以,可以更有效地判断生存区间的继承和非继承。
如所述的那样,是一种将用高级语言编写的程序翻译成机器语言程序的编译程序并将寄存器、存贮器等硬件即资源具有的资源元素分配给用编程语言描述的程序中的变量和生存区间的组合即分配对象的资源分配设备,该资源分配设备具有与优先级对应地保持程序中的分配对象的分配对象保持装置、从前述分配对象保持装置取出优先级最高的分配对象将某个资源元素分给此优先级最高的分配对象的第一资源元素分配装置、从前述分配对象保持装置中取出相对于此前分配的分配对象的优先级,具有下一位的优先级的分配对象的分配对象取出装置、对于前述分配对象取出装置取出的分配对象,检测生存区间重叠的分配对象的一次重叠分配对象检测装置、对于前述一次重叠分配对象检测装置检测的分配对象检测已分配的资源元素的资源元素检测装置、检测已分配了与检测的资源元素不同的资源元素的全部分配对象的分配对象—资源元素检测装置、在由分配对象—资源元素检测装置检测的已分配的分配对象中判断生存区间与由分配对象取出装置取出的分配对象连接的全部分配对象的增益一侧连续已分配的分配对象判断装置、根据从判定为连续的已分配的分配对象到由分配对象取出装置取出的分配对象的生存区间长短,对分配给判定为生存区间连续的分配对象的全部资源元素,计算出表示已分配给分配对象的资源元素对此后要分配的分配对象适合到何种程度数值即得失值的第一得失值计算装置、将计算出的得失值对由分配对象—资源元素检测装置所判定的各资源元素进行累计的累计装置、将由累计装置累计的累计值为最大的资源元素分配给由分配对象取出装置取出的分配对象的第二分配装置和反复起动前述分配对象取出装置直到全部分配对象分配完为止的控制装置。
如所述的那样,资源分配设备还具有在由分配对象—资源元素检测装置检测的已分配的分配对象中判断生存区间与由分配对象取出装置取出的分配对象不连接而且生存区间不重叠的分配对象的第一非重叠非连续已分配的分配对象判断装置、对于生存区间与由第一非重叠非连续已分配的分配对象判断装置判断的已分配的分配对象的生存区间重叠的未分配的分配对象,检测生存区间与由分配对象取出装置取出的分配对象连续的分配对象的增益一侧连续未分配的分配对象检测装置、根据从由增益一侧连续未分配的分配对象检测装置检测的未分配的分配对象到由分配对象取出装置取出的分配对象的生存区间长短,计算分配给由第一非重叠非连续已分配的分配对象判断装置判断的已分配的分配对象的资源元素的得失值的第二得失值计算装置和从关于由前述累计装置累计的该资源元素的得失值减去由第二得失值计算装置计算的得失值的第一减法装置。第二分配装置将由第一减法装置对得失值进行减法运算后的得失值为最大的资源元素分配给分配对象取出装置取出的分配对象。
按照上述,由于将已分配的分配对象中得失值大的分配给应分配的分配对象,所以,在将资源元素分配给分配对象的过程中,可以精密地判断向分配对象分配的资源元素的分配状况。因此,存贮器与寄存器间、和寄存器与寄存器间的传输命令也减少,从而可以提高最后生成的机器语言程序的程序大小和执行速度。尤其是在对寄存器数量少的目标机器进行资源分配时,上述程序大小和执行速度的提高特别明显。
如所述的那样,资源分配设备还具有在由分配对象—资源元素检测装置检测的已分配的分配对象中判断生存区间与由一次重叠分配对象检测装置检测的分配对象连续的重叠一侧连续已分配的分配对象判断装置、根据从由重叠一侧连续已分配的分配对象判断装置判断的已分配的分配对象到由一次重叠分配对象检测装置检测的分配对象的生存区间的长短,计算分配给由重叠一侧连续已分配的分配对象判断装置判断的已分配的分配对象的资源元素的得失值的第三得失值计算装置和从由经前述累计装置累计的关于该资源元素的累计值中减去由第三得失值计算装置计算的得失值的第二减法装置。第二分配装置将由第二减法装置对得失值进行减法运算后的累计值为最大的资源元素分配给由分配对象取出装置取出的分配对象。
按照上述,利用减小得失值,从应分配的分配对象方面看,将分配给发生损失位置的分配对象的资源元素评价为低级的,所以,周边的分配状况将影响下次的资源分配,从而可以更多地减少传输命令。
如所述的那样,资源分配设备还具有在由分配对象—资源元素检测装置检测的已分配的分配对象中判断生存区间与由一次重叠分配对象检测装置检测的分配对象不连接而且生存区间不重叠的分配对象的第二非重叠非连续已分配的分配对象判断装置、对于生存区间与由第二非重叠非连续已分配的分配对象判断装置判断的已分配的分配对象的生存区间重叠的未分配的分配对象,判断生存区间与由一次重叠分配对象检测装置检测的分配对象连续的重叠一侧连续未分配的分配对象判断装置、根据从重叠一侧未分配的分配对象判断装置判断的分配对象到由一次重叠分配对象检测装置检测的分配对象的生存区间的长短,计算分配给由第二非重叠非连续已分配的分配对象判断装置判断的已分配的分配对象的资源元素的得失值的第四得失值计算装置和将由前述累计装置累计的关于该资源元素的累计值与由第四得失值计算装置计算的得失值相加的第二加法装置。第二分配装置将由第二加法装置对得失值进行加法运算后的累计值为最大的资源元素分配给分配对象取出装置取出的分配对象。
按照上述,通过减少得失值,从应分配的分配对象方面看,分配给发生损失的位置的分配对象的资源元素评价为低级的,因此周边的分配状况将影响下次的资源分配,从而可以更多地减少传输命令。
图1为表示程序及该程序中分配对象的图;图2为编译程序的结构图;图3A~3C是编译程序的处理过程的图;图4是先有的资源分配装置63的结构的图;图5A、5B是干涉图形和通过将该干涉图形顶点连接而干涉图形如何变化的图;图6A~6F是干涉图形发生图形简并的图;图7是表示顶点连接引起的问题的图;图8是实施例的资源分配设备13的结构图;图9为分配资源元素确定部26的结构图;图10为使用成本计算部34的结构图;图11A为推断增益计算部36的结构图;图11B为资源类别成本计算部39的结构图;图12为资源分配控制部27的流程图;图13为资源元素确定部38的流程图;图14是使用成本计算控制部14的控制内容的流程图;图15是增益推断控制部5 1的控制内容的流程图;图16为得失计算的流程图;图17是资源类别成本计算控制部501的控制内容的流程图;图18为后续成本计算子程序的流程图;图19是资源与成本的对应的图;图20是通过将各资源的资源元素分配给分配对象,该分配对象定义、使用的中间命令的成本如何增减的图;图21是已分配的分配对象的得失值如何增减的说明图;图22是已分配的分配对象的得失值如何增减的说明图;图23是未分配的分配对象的后续成本值成为何值的说明图;图24是分配对象保持部21的保持内容的一例的图;图25是分配对象保持部21的保持内容的一例的图;图26A是分配状态表的保持内容的变化的一例的图;图26B是分配候补资源元素保持部31的保持内容的一例的图;图27A是运算成本表的一例的图;图27B是使用成本保持部的变化的一例的图;图28A是增益保持部37的保持内容变化的一例的图;图28B是得失保持部56的保持内容变化的一例的图;图28C是追踪对象保持部52的保持内容变化的一例的图;图29A是已处理的分配对象保持部53的保持内容变化的一例的图;图29B是已损失的分配对象保持部54的保持内容变化的一例的图;图29C是重复分配对象保持部55的保持内容变化的一例的图;图30A是资源类别成本保持部40的保持内容变化的一例的图;图30B是资源类别总成本保持部505的保持内容变化的一例的图;图30C是追踪对象保持部504的保持内容变化的一例的图;图31A是已处理分配对象保持部506的保持内容变化的一例的图;图31B是资源成本模式保持部502的保持内容变化的一例的图;图31C是评价资源保持部41的保持内容变化的一例的图;图31D是重复分配对象保持部507的保持内容变化的一例的图;图32是用高级语言编写的程序的示例图;图33是程序例的中间代码与分配对象的生存区间的图;图34是对图33中的分配对象t265计算得失值时可寻求资源继承关系的分配对象的图。
下面,在对本发明实施例说明之前先对所用的术语加以说明。
循环层次所谓循环层次,是指循环的嵌套深度,中间命令的循环层次是指存在中间命令的循环的层次。例如,在图33中,中间命令i1的循环层次为1。由于中间命令i8处在中间命令i31的转移之前,所以循环层次为2。
多资源表示像存贮器等那样具有较其他的装置更丰富的资源元素,不论将哪个资源元素分配给分配对象也不会对生成代码的质量产生特别的影响的资源。
分配资源是指以分配给分配对象的资源元素或多资源作为基元的集合。通常,对一个分配对象分配一个分配资源,但是这里,如前所述,由于资源是指具有相同功能的资源元素的集合,所以,所谓将多资源R分配给分配对象,就是指将属于R的某一资源元素分配给分配对象。
资源元素(广义)表示分配资源的元素。下面,只要没有特别申明,资源元素就是广义的意义。
资源继承关系所谓资源继承关系是指可以继承分配对象之间分配的资源元素的关系。另外,所谓资源元素的继承,是指分配与已分配的资源元素相同的资源元素,通过分配这种相同的资源元素,可以省去在代码生成设备中,生成传输命令。此外,还可以将已分配的资源元素向周围扩展。在程序中,这种资源继承关系利用生存区间的连续来表示。亦即,如果程序中的某一中间命令s1是分配对象y的生存区间的结束点,而且中间命令s1是分配对象x的起始点,则分配对象x与分配对象y就存在资源元素继承关系。但是,生存区间的终始点一致,当即使分配同一资源元素也不能明显地免除生成传输命令时,就不存在资源继承关系。
例如,在程序的中间命令s1∶x=y;中,当分配对象x的生存区间的起始点是中间命令s1、分配对象y的生存区间的结束点是中间命令s1时,如果分配对象x和分配对象y分配相同的资源元素,就不需要从分配对象y向分配对象x传送。因此,分配对象x与分配对象y具有资源继承关系。
另外,当目标机器是=地址形式的微处理器、向运算符存贮运算结果时(目标机器的减法命令的被减数一侧的操作数存贮运算结果时),在程序的中间命令s2∶z=x-w;中,当分配对象z的生存区间的起始点是中间命令s2、分配对象x的生存区间的结束点是中间命令s2时,分配对象x与分配对象z具有资源继承关系。因此,如果对分配对象x与分配对象z分配相同的资源元素,就不用生成不需要的传输命令。但是,当分配对象w也是中间命令s2为生存区间的结束点时,如果对分配对象z分配资源元素,反而会增加传输命令,所以,分配对象z与分配对象w不存在资源继承关系。
另外,通常当分配对象A与分配对象A1、分配对象A2……分配对象An-2与分配对象An-1、分配对象An-1与分配对象An分别存在资源继承关系时,就说分配对象A与分配对象An“间接地存在资源继承关系”。例如,在上述的中间命令s1、s2中,分配对象y与分配对象z通过分配对象x间接地存在资源继承关系。
使用成本值所谓使用成本值是指如果将各个资源的资源元素分配给现在想分配的分配对象x时表示分配对象x使用的中间命令的代码大小和执行时间达到何种程度的值。下面,照图19及20中所示的使用成本计算例的说明图说明中间命令和使用成本值的关系。
图19是通过将各资源的资源元素成为运算符表示机器语言命令的代码大小及执行时间如何增减的图。
图中,示出了“C(X,AR,INDIRECT REFERENCE)=1”、“C(X,DR,INDIRECT REFERENCE)=2”、“C(X,Mem,INDIRECT REFERENCE)=3”数学表达式。它们表示为了用机器语言命令执行称为“间接引用”的命令可以使用哪个资源。
“C(X,AR,INIRECT REFERENCE)=1”表示用地址寄存器(AR)执行称为间接引用的命令时存贮器大小或执行时间增加“1”。
“C(X,DR,INDIRECT REFERENCE)=2”表示用数据寄存器(DR)执行称为间接引用的命令时存贮器大小或执行时间增加“2”。
“C(X,Mem,INDIRECT REFERENCE)=3”表示用存贮器(Mem)进行称为间接引用的命令时存贮器大小或执行时间增加“3”。
另外,图中的“C(X,Mem,ADDITION)=3”表示用存贮器进行加法运算时存贮器大小或执行时间增加“3”。
“C(X,Mem,SUBTRACTION)=3”表示用存贮器进行减法运算时存贮器大小或执行时间增加“3”。
在图20中,左半部所示的是中间程序的例子。此中间程序内的一部分分配对象用○符号包围,从该○符号伸出箭头线。箭头线a11从图中的分配对象“s”伸出,a11的末端分为三个箭头。位于该末端的“C(S,AR,INDIRECT REFERENCE)”“C(S,DR,INDIRECT REFERENCE)”“C(S,Mem,INDIRECTREFEPENCE)”表示分配对象s由间接引用命令的使用。其下面的“Cost(AR,S)=1”“Cost(DR,S)=2”“Cost(Mem,S)=3”表示对分配对象s的使用成本值的总和。亦即,表示当将资源AR的资源元素分配给分配对象s时,其使用成本值为“1”,将资源DR的资源元素分配给分配对象s时,使用成本值为“2”。另外,还表示当将Mem分配给分配对象s时,使用成本值为“3”。
另外,在此程序例中三个地点存在有分配对象r,这些分配对象也用○符号包围。并由此分配对象伸出箭头线a13、a14、a15。在这些箭头线的末端各自存在三个“C(r,AR,INDIRECTREFERENCE)”、“C(r,DR,INDIRECT REFERENCE)”、“C(r,Mem,INDIRECT REFERENCE)”,它们表示由于在基本程序中三个地方使用分配对象r,所以,对三个地方进行评价。这三个地方的使用成本值的总和为“Cost(AR,r)=3”“Cost(DR,r)=6”“Cost(Mem,r)=9”。
按照箭头线a11、a12、a13……所示的那样,计算上述这种使用成本值的总和值时,如图20下半部的表所示的那样,可以得到全部分配对象的三种资源的使用成本值的总和。这一总和是对各分配对象合适、不合适的参数,该值越小,表示资源对该分配对象越合适。但是,这种使用成本的缺点是以代码大小和执行时间为标准。所以,相同功能的数据寄存器D0~D2和地址寄存器A0~A2不论使用成本成为哪个相同的值,都只是一个大致的标准。
得失值得失值是指表示已分配给分配对象的资源元素对现在要分配的分配对象的影响有多大的值。因此,将得失值赋予已分配的各资源元素。将此得失值对每一资源元素累计的值称为增益值。
下面,参照图21所示说明图说明已分配的资源元素的得失值达到多大的值。图21是表示将增益因素作为处理对象时的各资源元素的得失值的说明图。图中的分配对象x按优先级的优先顺序为第二位、分配的序号巡回过来的分配对象(在以后的说明中如未加特别申明,均在这种意义上使用分配对象x)。
图中所示的竖线表示分配对象的生存区间,其中,空白的表示未分配的分配对象,画黑斜线的表示已分配的分配对象。该分配对象的生存区间的起点和终点用黑点“·”表示。在图中的黑点中间存在用横向虚线连接的情况。这表示生存区间的终点与起点一致,这样便可知道,起始点和结束点利用虚线连结的分配对象之间存在资源继承关系。在表示生存区间的竖线上分别以“分配对象x1”“分配对象x2”“分配对象x11”附加上表示具有该生存区间的分配对象的名称的字符串。
在相应分配对象中,分配了资源元素的在该字符串正下方示出表示资源元素的名称的字符串。从此表示该资源元素的名称的字符串伸出箭头线,在其箭头端部有数学式“+1/L1”、“+1/(L1+L2)”、“+1/(L1+L3+L4)”,这些数式表示各资源元素的得失值。
在本图中,由字符串“资源元素D2”伸出箭头线,其箭头端伸至数学式“+1/L1”,这表示分配给分配对象x3的资源元素D2的得失值为“+1/L1”。
由字符串“资源元素D3”伸出箭头线,其箭头端伸至数学式“+1/(L1+L2)”,这表示分配给分配对象x1的资源元素D3的得失值为“+1/(L1+L2)”。得失值成为这样的值是因为生存区间长度L2,介于在分配对象x1的生存区间与分配对象x的生存区间之间,此生存区间长度反映在得失值中的缘故。
由字符串“资源元素D1”伸出箭头线,其箭头端伸至数学式“+1/(L1+L3+L4)”,这表示分配给分配对象x2的资源元素D1的得失值为“+1/(L1+L3+L4)”。得失值成为这样的值,是因为生存区间长L3及生存区间长L4的生存区间介于分配对象x2的生存区间和分配对象x的生存区间之间,此生存区间的长度反映在得失值中的缘故。
另一方面,在本图中,由于表示分配对象x11有竖线具有与具有生存区间L3的分配对象相并行的部分,所以,判定分配对象x11与具有生存区间L3的分配对象x5的生存区间重叠。
在此竖线的左下部附加有字符串“-1/(L1+L3)”,它表示分配给分配对象x11的资源元素D0的得失值为“-1/(L1+L3)”。得失值之所以成为这样的值,是因为生存区间长度L3的生存区间介于分配对象x11的生存区间和分配对象x的生存区间之间,反映此生存区间的长度的缘故。
另外,在本图中,得失值“-1/(L1+L3)”带负号,而“+1/(L1+L2)”、“+1/(L1+L3+L4)”带正号,其理由如下。
因为赋予得失值“+1/(L1+L2)”的资源元素D3分配给分配对象x时,分配给可以去掉传输命令的分配对象(分配对象x1),赋予得失值“+1/(L1+L3+L4)”的资源元素D1分配给分配对象x时,分配给可以去掉传输命令的分配对象(分配对象x2),与之相反,赋予得失值“-1/(L1+L3)”的资源元素D0分配给分配对象x时,分配给产生传输命令的分配对象(分配对象x11)。
另外,由于得失值的分母是以分配对象x作为基点的生存区间长度之和,所以,简单地将生存区间长度L1作为“1”亦可。
由以上说明可知,分配给离分配对象x越近的分配对象的资源元素,得失值越大,分配给离分配对象x越远的分配对象的资源元素,得失值越小。分配的顺序巡回过来的分配对象影响更近的已分配的资源元素。如前所述,在数据寄存器D0、D1、D2间和地址寄存器A0、A1、A2间等相同功能的资源间难于按使用成本决定优劣。与此相反,在数据寄存器D0、D1、D2中,得失值则影响先分配的那一个处理。即使在已分配的情况下,在数据寄存器D0、D1、D2中,利用哪一个最接近分配对象x来决定优劣。
另外,从已分配的分配对象方面来看,可以对本身临近的后续分配对象发生影响。也就是说,已分配的分配对象可以将与自身相同的资源元素分配给周围的分配对象。在本实施例中,也是按表征嵌套级和使用频度的分配优先级的顺序将资源元素分配给分配对象的,但是,利用此优先级与得失值的组合,对嵌套级深的地点优先地分配寄存器,便可获得将此已分配的寄存器向嵌套级浅的地点扩散的灵活的分配结果。同样,对使用频度高的地点优先地分配寄存器,也可获得将已分配的寄存器向嵌套级低的地点扩散的灵活的分配结果。而且,还能实现自变量寄存器、返回值寄存器、破坏性寄存器等预先分配的对方已确定的分配对象将其资源向周围扩散的灵活的资源分配。
以上的说明对生存区间与分配对象x连续的已分配的分配对象进行了说明,但是,如果只看到连续的情况,反而会产生损失。这就是与分配对象x重叠一侧的延长线上已分配了数个资源元素时,应避免对它们进行任何分配。在不能避免时,就必须从中选择损失最轻的进行分配。为了定量地评估这种损失,也可使用得失值。下面,参照图22的说明图说明为了评估损失使用得失值的情况。在图22中,竖线表示分配对象,其中,空白的表示未分配的分配对象,画黑斜线的表示已分配的分配对象。该生存区间的起点和终点用黑点“·”表示。图中的黑点间用横向虚线连接的,表示其生存区间的终点与起点相一致,这样,便可知道利用虚线连接终起点的分配对象之间存在资源继承关系。在表示生存区间的竖线上分别用“分配对象x2”、“分配对象x3”、“分配对象x4”字样标上表示具有该生存区间的分配对象的名称的字符串。
在该分配对象中,分配了资源元素在该字符串的正下方示出表示资源元素的名称的字符串。在由这些表示资源元素名称的字符串伸出的箭头线的端部表示出数学式“+Px/(L2+L3)”、“-Px/(L2+L3)”,它们表示各资源元素的得失值。
在本图中,由字符串“资源元素D1”伸出箭头线,其箭头端到达字符串“-Px/(L2+L3)”,这表示分配给分配对象x4的资源元素D1的带负号的得失值,也就是说,表示损失的得失值是“-Px/(L2+L3)”。得失值之所以成为这样的值,是因为生存区间长度L2和L3的生存区间介于分配对象x4的生存区间与和分配对象x生存区间重叠的分配对象x2的生存区间之间,这一生存区间的长度反映在得失值中。
另一方面,在本图中,由于表示分配对象x31的竖线具有与具有生存区间长度L3的分配对象x3相并行的部分,所以,可知分配对象x31与分配对象x3的生存区间互相重叠。
此竖线的左下方标有字符串“+Px(L2+L3)”,它表示分配给分配对象x31的资源元素D2的得失值为“+Px/(L2+L3)”。得失值之所以成为这一值,是因为介于生存区间长度L2和生存区间长度L3的生存区间分配对象x31的生存区间与和分配对象x生存区间重叠的分配对象x2的生存区间之间,反映此生存区间的长度的缘故。
在本图中,得失值“-Px(L2+L3)”带有负号,“+Px(L2+L3)”带有正号,其理由如下。这是因为赋予得失值“+Px/(L2+L3)”的资源元素D2分配给分配对象时,分配到可以去掉传输命令的分配对象(分配对象x31)赋予得失值“-Px(L2+L3)”的资源元素D2分配给分配对象x时,分配给产生传输命令的分配对象(分配对象x4)。另外,由于得失值的分母是以分配对象x2为基点的生存区间长度之和,所以,将生存区间长度L2简单地作为“1”亦可。
追踪对象所谓追踪对象,是指为追寻资源继承关系而计算出各资源元素的得失值的信息。由此,追踪对象包含表示在程序中追寻当前资源继承关系的地址的信息(它以分配对象名表示)和介于此地点的分配对象与分配对象x之间的生存区间的总和以及在当前位置上成为可以分配的资源元素的集合。由于包含这些信息,所以,在本实施例中,将追踪对象作为结构体变量处理,将上述当前位置信息、生存区间的总和和可以分配的资源元素的集合作为其结构体的结构要素来处理(在本实施例中,追踪对象用A表示、当前追踪位置的分配对象用A.ASO表示、生存区间长度的总和用A.LNS表示、资源元素集合用A.RES表示)。
后续成本值后续成本值是表示通过将各资源的资源元素分配给分配对象x而使用优先级比分配对象x更低、在分配对象x之后进行分配的分配对象的中间命令的代码大小和实行时间如何增减的值。
下面,参照图23的说明图说明优先次序为下位的未分配的分配对象的后续成本值成为多大的值。图23是表示未分配的分配对象的后续成本的说明图。
图中所示的空白的竖线表示分配对象的生存区间,该分配对象的生存区间的起点和终点用空白圆圈表示。图中的空白圆圈中存在用横虚线连接的情况,它表示生存区间的终点与起点一致,这样,便可知道用虚线连接终始点的分配对象之间存在资源继承关系。在表示生存区间的竖线上分标用“分配对象x1”、“分配对象x2”、“分配对象x3”标以表示分配对象的名称的字符串。另外,在分配对象x1的左边列有中间命令群“x1=u+v’‘y=x1+200’‘r=x1/40’‘t=30+x1’‘w=x1+3’”。这些表示在中间程序中使用分配对象x1的中间命令群。
在分配对象x2的左边列有中间命令群“‘x2=u+v’‘y=x2+200’‘r=x2/40’‘t=30+x2’‘w=x2+3’”,它们表示在中间程序中使用分配对象x2的中间命令群。
另外,在分配对象x3的左边列有中间命令群“‘x3=u+v’‘y=x3+200’‘r=x3/40’‘t=30+x3’‘w=x3+32’”,它们表示在中间程序中使用分配对象x3的中间命令群。
在本图中,在字符串“分配对象1”的正下方存在字符串“DR的后续成本值”和“AR的后续成本值”,进而在它的下面还有数学式“Cost(DR)/L”和“Cost(AR)/L”,这些数学式表示将资源即数据寄存器、地址寄存器的资源元素分配给分配对象x1时分配对象x1的后续成本值。另外,从位于分配对象x1左边的中间命令群的各中间命令“‘x1=u+v’、‘y=x1+200’、‘r=x1/40’‘t=30+x1’、‘w=x1+3’”,伸出的箭头到达该数学式中的“Cost(DR)”“Cost(AR)”,这表示后续成本值的算式中的使用成本的总和值“Cost(DR)”、“Cost(AR)”是分配数据寄存器DR、地址寄存器AR的资源元素时分配对象x1的使用成本值的总和值。
在本图中,在字符串“分配对象x2”正下方存在字符串“DR的后续成本”和“AR的后续成本”,在其下面还有数学式“Cost(DR)/(L1+L)”和“Cost(AR)/(L1+L)”,这些数学式表示分配对象x2的后续成本。另外,从位于分配对象x2的左侧的中间命令群的各中间命令“‘x2=u+v’‘y=x3+200’‘r=x2/40’‘t=30+x2’‘w=x2+3’”伸出的箭头到达该后续成本值的算式中的“Cost(DR)”“Cost(AR)”,这表示后续成本值的算式中的使用成本的总和值“Cost(DR)”“Cost(AR)”是在分配数据寄存器DR、地址寄存器AR的资源元素时中间命令群中的分配对象x2的使用成本值的总和值。此使用成本总和值“Cost(DR)”、“Cost(AR)”在数学式中用生存区间长度(L1+L)相除,这表示分配对象x1介于分配对象x2与分配对象x之间、其生存区间长度(L1+L)反映在后续成本值中。
在字符串“分配对象x3”的正下方存在字符串“DR的后续成本值”和“AR的后续成本值”,在其下面还有数学式“Cost(DR)/(L1+L2+L)”和“Cost(AR)/(L1+L2+L)”,这些数学式表示分配对象x3的后续成本值。另外,从位于分配对象左侧的中间命令群的各中间命令“‘x1=u+v’‘y=x3+200’‘r=x3/40’‘t=30+x3’‘w=x3+32’”伸出的箭头到达该后续成本值式中的使用成本的总和值“Cost(DR)”、“Cost(AR)”,这表示后续成本式中的“Cost(DR”、“Cost(AR)”是分配数据寄存器DR、地址寄存器AR的资源元素对中间命令群中的分配对象x3的使用成本值的总和值。此使用成本值的总和值“Cost(DR)”、“Cost(AR)”在数学式中除以生存区间长度(L1+L2+L),这表示分配对象x1、x2介于分配对象x3与分配对象x之间,其生存区间长度的总和(L1+L2+L)反映在后续成本值中。而且,由于后续成本值的分母是以分配对象x作为基点的生存区间之和,所以,可以简单地将生存区间长L作为“1”。
<资源分配设备13的结构>
图8是资源分配设备13的结构图。资源分配设备13由分配对象保持部21、分配对象生成部22、生存区间重复分配对象检测部23、资源继承分配对象检测部24、分配优先级计算部25、分配资源元素确定部26和资源分配控制部27构成。
分配对象保持部21保存由分配对象生成部生成的分配对象和分配对象信息所组成的分配信息表,另外,还保存分配状态表。
图24和25是分配信息表的一个例子。图24表示利用下面进行的分配处理分配资源元素的分配对象的分配信息。图中的这些内容与图33所示的中间程序例中存在的分配对象及生存区间对应。
如图24中所示,分配信息表由以中间命令集合表示分配对象n10及该分配对象的生存区间在程序中占多大范围的分配对象的生存区间n11、以该集合的元素数表示的该分配对象的生存区间长度n12、表示该分配对象使用的中间命令的使用中间命令集合n13、成为该生存区间的起始点的中间命令的集合即起始点集合n14、成为该生存区间的结束点的中间命令的集合即结束点集合n15、具有与该分配对象的生存区间重复的生存区间的分配对象的集合即重复分配对象集合n16、表示与该分配对象具有资源继承关系的分配对象的集合的资源继承分配对象集合n17和该分配对象的分配优先级n18组成。
在本图中,分配对象“t35”的右侧的“i2~i6”表示分配对象t35的生存区间由图33中的i2到i6的中间命令描述。
其右侧的“5”表示分配对象“t35”的生存区间长度。其右侧的“i1、i5、i6”表示使用分配对象“t35”的中间命令。其右侧的“i1”表示分配对象“t35”的起始点集合为“i1”。其右侧的“i6”表示分配对象“t35”的结束点集合为“i6”。其右侧的“t34、t1、a1、p1”表示分配对象“t35”的重复分配对象集合为“t34、t1、a1、p1”。其右侧的“t1、pr1”表示与分配对象“t35”具有资源继承关系的分配对象为“Pr1”。其右侧的“0.6”表示分配对象“t35”的优先级。而且,起始点即“i1”之所以不包含在生存区间n11中,是因为可以根据生存区间的集合积简单地判定生存区间的起始点一致的分配对象间的生存区间不重叠。因此,设定在所有的分配对象的生存区间中不包含起始点。
图25是实变量(Ar)、函数的返回值(Fr)、破坏性寄存器(Br)等已分配了资源元素的分配对象的分配信息的示例。
图25所示分配信息表由分配对象n20、以中间命令的集合表示该分配对象的生存区间在中间程序内占多大范围的分配对象的生存区间n21、以该集合的元素数表示的该分配对象的生存区间长度n22、表示使用该分配对象的中间命令的使用中间命令集合n23、成为该生存区间的起始点的中间命令的集合即起始点集合n24、成为该生存区间的结束点的中间命令的集合即结束点集合n25、具有与该分配对象的生存区间相重复的生存区间的分配对象的集合即重复分配对象集合n26、表示与该分配对象具有资源继承关系的分配对象的资源继承关系分配对象集合n27和分配给该分配对象的分配资源元素n28组成。
图26A是分配状态表的示例。分配状态表由分配对象一览和记入分配给各分配对象的资源元素的记入栏组成,反映分配是如何进行的。此图的内容与图33所示的中间程序例内存在的分配对象和生存区间相对应。
在此图记入栏内,右端付加“(a)”的表示优先级最高的分配对象“t262”在进行分配时的分配状态。右端付加“(b)”的表示优先级为次一级的分配对象“t263”进行分配时的分配状态。在右端附加“(c)”的是优先级再下一级分配对象“t264”进行分配时的分配状态。
分配对象生成部22根据数据流分析结果(下面称为数据流信息)和控制流分析结果(下面称为控制流信息)生成分配对象。另外,这时还检测出生存区间、使用中间命令和生存区间的起始点及结束点。如图25所示,在进行分配处理之前,需要进行分配的分配对象在此处分配资源元素。生成的分配对象存放到分配对象保持部21中。
生存区间重复分配对象检测部23检验分配对象彼此间的生存区间的重叠。亦即,寻求生存区间与任一分配对象x重叠的分配对象的集合即分配对象集合Ov(x)。Ov(x)的内容保持在分配对象保持部21中。
资源继承分配对象检测部24对保持在分配对象保持部21中的分配对象检测具有资源继承关系的全部分配对象。亦即,寻求与任意的分配对象x具有继承关系的分配对象的集合即分配对象集合Rs(x)。Rs(x)的内容保持在分配对象保持部21中。
为了获得Rs(x)的集合化,按如下过程进行。
由于分配对象保持部21对应地保持各分配对象、与各分配对象的生存区间的起始点相当的中间命令和与各分配对象的生存区间的结束点相当的中间命令,所以,资源继承分配对象检测部24从保持的分配对象中检测全部与分配对象x的生存区间的起始点相当的中间命令与结束点相当的分配对象。并且,使检测出的分配对象与分配对象x成为同一集合。
另外,检测全部与分配对象x的生存区间的结束点相当的中间命令与起始点相当的全部分配对象。并且,使探测出的分配对象与分配对象x成为同一集合。反复进行上述处理,生成各分配对象的Rs(x)。但是,显而易见,即使将相同的资源元素分配给测得的分配对象与分配对象x,当不能省掉传输命令时,也不能使之成为同一集合。
分配优先级计算部25对保持在分配对象保持部21中的分配对象x计算分配优先级。所谓分配优先级,是指表示从哪一个分配对象开始进行对资源元素的分配的优先次序。这里,使用下面的算式来进行计算分配优先级=(存在x的使用中间命令的循环层次的总和)/(x的生存区间的长度)。
分配资源元素确定部26根据分配信息表的记载内容将资源元素分配给分配对象。
资源分配控制部27控制全部分配处理。
图12是资源分配控制部27的流程图。
在步骤a1,资源分配控制部27启动分配对象生成部22。
在步骤a2,资源分配控制部27启动生存区间重复分配对象检测部23。
在步骤a3,资源分配控制部27启动资源继承分配对象检测部24。
在步骤a4,资源分配控制部27启动分配优先级计算部25。
在步骤a5,分配资源控制部27启动分配资源元素确定部26。
分配资源元素确定部26构成为根据分配信息表保持的内容确定分配给各分配对象的资源元素。
图9为图8中的分配资源元素确定部26的结构图。
分配资源元素确定部26由分配候补资源元素保持部31、可分配资源元素检测部32、使用成本计算部34、使用成本保持部35、推断增益计算部36、增益保持部37、资源元素确定控制部38、资源类别成本计算部39、资源类别成本保持部40和评价资源保持部41组成。
图13为资源元素确定控制部38的流程图。如图13所示,此流程图包括下列步骤求取可分配给分配对象x的资源元素(步b3);当存在多个可分配资源元素时,通过计算各资源元素的使用成本来选取应分配的资源元素(步b4);如果选取的结果只剩下一个资源元素时,就将该资源元素分配给分配对象x(步b16);如果选取结果剩下多个资源元素时,就对它们筛选候补元素的(步b7);通过对筛选的候补元素计算得失值对分配给分配对象x的资源元素进行再次选择(步b8);当再次选取的结果仅剩下单一资源的资源元素时,就将此资源元素分配给分配对象x(步b14);当再次选取的结果还有多个资源的资源元素时,就计算各资源的后续成本值对各资源所具有的资源元素再一次进行选择(步b12)。从而,对于未分配的分配对象,便成为按照分配优先级顺序进行上述处理(步b1~b14)循环结构。
在在此流程图中,集合R表示未分给生存区间与分配对象x重叠的分配对象的资源元素的集合。
下面,按照顺序对此流程图的各个步骤作更详细的说明。
在步骤b1,资源元素确定控制部38当存在保持在分配对象保持部21内并且还未分配资源元素的分配对象时,就执行步骤b2,当在分配对象保持部21中不存在时,就结束分配资源元素确定部26的处理。
在步骤b2,资源元素确定控制部38从分配对象保持部21保持的未分配的分配对象中取出由分配优先级计算部25求出的分配优先级最高的分配对象x。
在步骤b3,启动可分配资源元素检测部32,计算可分配给分配对象x的资源元素的集合。亦即,计算未分配给生存区间与分配对象x重叠的分配对象的资源元素(称为可分配资源元素)的集合R,并保存到分配候补资源元素保持部31中。
在步骤b4,详细地说,就是启动使用成本计算部34,对分配候补资源元素保持部31所保持的集合R的各资源元素,计算分配对象x的中间命令的使用成本,并将计算结果保存在使用成本保持部35中。
在步骤b5,在分配候补资源元素保持部31所保存的资源元素中,当在由步骤b5所得到的使用成本为最小的资源元素中存在多资源rh时,就执行步骤b15,否则就执行步骤b6。
在步骤b6,在分配候补资源元素保持部31所保存的资源元素中,当由步骤b4得到的使用成本为最小的资源元素r只有一个时,就执行步骤b16,否则就执行步骤b7。
在步骤b7,使分配候补资源元素保持部31暂时空出来,只将在步骤b4得到的使用成本为最小的资源元素重新保存到分配候补资源元素保持部31中。
在步骤b8,更详细地说,就是启动推断增益计算部36,根据具有分配对象x的资源继承关系的分配对象求各资源元素的增益值,并将求得的增益值保存到增益保持部37内。
在步骤b9,在分配候补资源元素保持部31中保存的资源元素中,计算在步骤b8求得的保存在增益保持部37中的增益值为最大的资源元素的集合Rs,使分配候补资源元素保持部31的内容暂时空出来保存属于此集合Rs的资源元素。
在步骤b10,计算集合Rs内的资源元素所属的资源的集合RES,并保存到评价资源保持部41内。
在步骤b11,当在评价资源保持部41保持的集合RES中存在多个资源时,就执行步骤b12,否则就执行步骤b14。
在步骤b12,更详细地说,就是启动资源类别成本计算部39,计算后续成本值,并将对各资源的计算结果保存到资源类别成本保持部40内。
在步骤b13,将属于评价资源保持部41的是资源类别成本保持部40所存放的成本为最小的资源所具有的资源元素并且保存在分配候补资源元素保持部31中的资源元素分配给分配对象x;然后返回步骤b1。
在步骤b14,将分配候补资源元素保持部31中所保存的资源元素分配给分配对象x,然后返回步骤b1。
在步骤b15,当将多资源rh的资源元素分配给生存区间与分配对象x重叠的分配对象时,就将与其资源元素不同的多资源rh的资源元素分配给分配对象x,然后返回步骤b1。
在步骤b16,将资源元素r分配给分配对象x,然后返回步骤b1。
分配候补资源元素保持部31保持对分配对象x可分配的资源元素。分配候补资源元素保持部31的保存内容及其保持内容的变化如图26B所示。在本图中,标在右端的(a)、(d)、(e)、(f)…与图26A所示的(a)、(d)、(e)、(f)…对应。从而与图33所示的程序例内的(a)、(e)、(f)、…对应。这里,所谓可分配资源元素就是未分配给生存区间与分配对象x重叠的分配对象的资源元素。
由图26B的(a)、(d)的状态可知D0、D1、D2、D3、A0、A1、A2、Mm是可分配资源元素。另外,还可知道,当从(f)的状态变化为(f-1)的状态时,资源元素D1则作为可分配资源元素而被除外。
可分配资源元素检测部32在步骤b3启动,检测可分配的资源元素。由可分配资源元素检测部32求得的可分配资源元素的集合存储到分配候补资源元素保持部31内。
使用成本计算部34在步骤b4启动,通过计算使用成本来评估在将保存在分配候补资源元素保持部31中的各资源元素分配给分配对象x时,与分配对象x使用的中间命令对应的机器语言命令占据多大的存贮器空间或需要多少执行时间,并选择各资源元素。另外,使用成本计算部34将作为评估结果而计算的成本值按各资源元素保存到使用成本保持部35中。
使用成本保持部35保存在步骤b4计算的使用成本计算部34的计算结果。
使用成本计算部34评估存贮器大小或执行时间与此相反,通过计算得失值将各资源元素分配给分配对象x时,推断增益计算部36,估算能删除多少传输命令,并选择各资源元素。
增益保持部37在步骤b9保存由推断增益计算部36计算得的得失值的累计即增益值。图28A是增益保持部37的保持内容的示例。在本图中,各记入栏的右端标以符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,它们表示推断增益计算部36对于分配对象t265的各资源元素的增益值的保持内容的变化。
资源元素确定控制部38控制所有确定资源分配的处理。
资源类别成本计算部39在步骤b12当由推断增益计算部36计算的增益值对多个资源为最大时,进行后续成本值的计算。
资源类别成本保持部40按每一资源保存资源类别成本计算部39的计算结果即后续成本值。
评价资源保持部41保存在步骤b12根据资源类别成本计算部39的计算判明为有效的资源。图31c是评价资源保持部41的保存内容的示例。图中各记入栏右端标以符号“(d)”、“(d-1)”,这些符号表示资源类别成本计算部39对于分配对象t265的评价资源保持部41的保持内容的变化。
图9所示的使用成本计算部34构成为计算各分配对象的使用成本。图10是使用成本计算部34的结构。
使用成本计算部34由模式保持部43、运算成本保持部44、总成本保持部46和使用成本计算控制部47组成。
图14为使用成本计算控制部47的流程图。
在此流程图中,中间命令i表示分配对象使用的中间命令。资源元素r表示分配候补资源元素保持部31中保存的资源元素。成本模式p表示使用资源元素r对中间命令i生成的成本模式(关于成本模式下面说明)。
此流程图是对分配对象x的全部使用中间命令反复执行生成将资源元素r用于分配对象x中的使用中间命令i的算符(操作数)时的成本模式p的步骤c5、计算与生成的成本模式p匹配的成本项的步骤c6和将求得的成本项累加到总成本保持部46中的步骤c7的循环结构(步骤c4~c9),此循环结构还是对可分配的全部资源元素反复进行的二重循环结构(步骤c2~c10,关于成本项下面介绍)。
下面,对此流程图的各个步骤按顺序作更详细说明。
在步骤c1,将使用成本保持部35的保持区域中与分配候补资源元素保持部31保存的资源元素对应的位置写入零,否则就写入“无效”。
在步骤c2,对分配候补资源元素保持部31保持的所有资源元素r反复执行步骤c3到c10的处理。反复处理结束后,便结束使用成本计算部34的操作。
在步骤c3,使总成本保持部46保持为零。
在步骤c4,每次取出一个使用作为输入所赋予的分配对象x的中间命令,并对取出的中间命令反复执行从步骤c5到步骤c9的一系列处理。
在步骤c5,将资源元素r嵌套到在中间命令i中使用分配对象x的部分,生成中间命令i的成本模式p,并保存到模式保持部43中。
在步骤c6,使成本模式p与运算成本保持部44保存的成本项进行匹配,并取出匹配的成本项e1。
在步骤c7,取出成本项e1的成本,并将取出的成本累加到总成本保持部46中。
在步骤c8,判断在成本项e1的WORK中是否已设定资源元素,已设定时就执行步骤c9,否则就执行步骤c4。所谓WORK,就是除了对机器指令的操作数及运算结果设定的资源元素外,利用代码生成部14变换中间命令i时所需要的资源元素。
在步骤c9,计算分配给在生存区间包含中间命令i的分配对象的资源元素的集合R1,当在集合R1中存在由成本项e1的WORK指定的资源元素r1时,就将溢出成本累加到总成本保持部46中。所谓溢出成本,是指一旦将资源元素r1的存贮值保存到堆积中,在中间命令i使用后返回时所需的成本。在溢出成本的相加运算后执行步骤c4(下面,将资源元素r1称做中间命令i中的溢出资源元素)。
在步骤c10,将对分配对象x分配资源元素r时的使用成本作为总成本保持部46保存的值存放到使用成本保持部35中,然后执行步骤c2。
模式保持部43保存在步骤c5生成的成本模式。所谓成本模式,是指按如下所示的四个项目的组合表示使用分配对象x的中间命令,是为了更具体更精确地计算使用成本中所必须的。四个项目的组合为(OP,OPR1,OPR2,RESULT)OP—在此项目内设定“乘法”、“加法”、“代入”等中间命令的运算符的种类。
OPR1—此项目与中间命令的第一操作数(OP为二项运算时与左边的操作数相当)对应,描述此第一操作数是如何设定的。
如果第一操作数设定的即时值,就设定表示即时值的“IM”。如果第一操作数的分配对象已分配,就设定该资源元素。当操作数不是即时值并且未分配资源元素时,就设定表示未分配的“未”。另外,在此第一操作数的项目内还附加有表示此中间命令是否相当于结束点的“K”或“N”的特征。
OPR2—在此项目内设定与中间命令的第二操作数相当(为二项运算时与右边的操作数相当)的和OPR1相同的值。
RESULT—在此项目内设定表示用于保存运算结果的资源元素与分配给哪个分配对象的资源元素相同的信息。
当与左边分配的资源元素相同时,就在RESULT内设定为“左同”、与右边相同时,就设定为“右同”,当左右两边均不同时,就设定为“异”。另外,在结果中未分配资源元素时,就设定为“未”。但是,在进行代入运算和比较运算时,此项目就是未设定。
(下面称此四组模式为成本模式)例如,在图33的程序例中的中间命令i3“t1=t34+3”中,分配对象t34分配给D0、而分配对象t1未分配时,就将运算类型的项目设定为“加法”。另外,由于中间命令i3为分配对象t34的结束中间命令,而分配对象t34分配给分配对象D0,所以,OPR1设定为“D0.K”。由于第二操作数是即时值“3”,所以,OPR2设定为“IM”。由于运算结果的t1是未分配,所以,RESULT的项目设定为“未”。
因此,中间命令i3“t1=t43+3”的成本模式为(加法,D0.K,IM,未)。
运算成本保持部44保存以所有成本模式和与该成本模式对应的成本为栏目的运算成本表,是更具体、更精确地进行使用成本计算所必须的。
图27A是运算成本表的示例。成本模式由前面所说的四个项目OP,OPR1,OPR2,RESULT、表示除在该项目的组合中分配给操作数和结果的资源元素之外所需的资源元素的WORK和表示该组合的成本值的COST组成(下面构成本表的元素称为成本项)。
例如,在图27中,Dn,Dm表示资源DR的资源元素中不论D0~D3中的哪一个都匹配。另外,An、Am表示资源AR的资源元素中不论A0~A2中的哪一个都匹配。IM表示与即时值匹配。Dn与An由“1”分开,这表示不论资源DR或资源AD的哪一个资源元素都匹配。如图27A(a)的成本项那样,没有“K”、“N”特征的表示不管成本模式中是否标有“K”、“N”特征都与其匹配。前述的“t1=t34+3”的成本模式(加法D0.K,IM,未)与图27A(b)的成本项匹配。因此,该成本模式的成本为3。
这样,匹配的成本便在总成本保持部46中累加求总和。
使用成本计算控制部47输入分配对象x,为了计算将分配候补资源元素保持部31保存的各资源元素分配给分配对象x时的使用成本,按照图14所示的流程图进行控制。
推断增益计算部36构成为通过计算增益值来估算传输命令的削减情况。图11A为推断增益计算部36的结构图。
推断增益计算部36由增益推断控制部5-1、追踪对象保持部52、已处理的分配对象保持部53、已损失的分配对象保持部54、重复分配对象保持部55和得失保持部56组成。
增益推断控制部51进行用于计算分配对象x的增益值的处理控制。
图15及图16是增益推断控制部15的处理内容的流程图。图15是增益推断控制部51的处理控制的主流程,图16为得失计算处理的流程图(由此流程图表示的得失值计算处理称为得失计算子程序)。
图15的流程图具有根据分配对象x生成用于追寻资源继承关系的追踪对象的步骤d3、利用追踪对象顺序追寻资源继承关系并在计算出各资源元素的得失值后进行资源元素的第一阶段的再次选择的步骤d4和当第一阶段的再次选择的结果增益值为最大的资源元素是多个时追寻生存区间与分配对象x重叠并且未分配的分配对象的资源继承关系并在计算各资源元素的得失值后进行资源元素的第二阶段的再次选择的步骤d12~d17。
本流程图的第二阶段的再次选择的部分由对分配对象y(生存区间与分配对象x重叠的并且未分配的分配对象)生成追踪对象的步骤d15、对该追踪对象计算得失值的步骤d16和从资源元素的增益值中减去将计算的得失值乘以分配对象y的优先级所得值的步骤d17构成对全部分配对象y反复进行的循环结构(步骤d12~d17)。
下面,对本流程图的各个步骤按顺序作更详细说明。
在图15中步骤d1,增益推断控制部51将与增益保持部37和得失保持部56的各资源元素对应的内容置为零。
在步骤d2,清除追踪对象保持部52、处理毕分配对象保持部53、已损失分配对象保持部54。
在步骤d3,对分配对象x生成追踪对象A(x),将A(x)的各字段项设定为追踪对象A(x)的分配对象=A(X).ASO=X
追踪对象A(x)的生存区间长度之和=A(x).LNS=1追踪对象A(x)的资源元素集合=A(x).RES=分配候补资源元素保持部31所保存的资源元素的集合并将生成的追踪对象A(x)存贮到追踪对象保持部52内。
在步骤d4,调出后而所述的得失计算子程序进行得失计算,并将各资源元素的计算结果保存在得失保持部56中。
在步骤d5,将按各资源元素保存在得失保持部56中的值存入增益保持部37。
在步骤d6,计算分配候补资源元素保持部31存放的资源元素并且存放于增益保持部37中的值为最大的资源元素的集合RS。
在步骤d7,当集合RS的元素数为多个时就执行步骤d8。否则就结束推断增益计算部36的处理。
在步骤d8,当存在生存区间与分配对象x重叠并且未分配的分配对象时,就执行步骤d9。否则就结束推断增益计算部36的处理。
在步骤d9,暂时清除分配候补资源元素保持部31,并重新全部存放集合RS的资源元素。
在步骤d10,将与增益保持部37的各资源元素对应的内容置为零,并清除追踪对象保持部52。
在步骤d11,只将生存区间与分配对象x重叠并且未分配的分配对象存入重复分配对象保持部55。
在步骤d12,反复执行步骤d13~d17直至将重复分配对象保持部55清除为止。
在步骤d13,从重复分配对象保持部55取出一个分配对象y,并从重复分配对象保持部55中将其去除。
在步骤d14,将与得失保持部56各资源元素相对应的内容置为零,并清除处理毕分配对象保持部53和已损失分配对象保持部54。
在步骤d15,对分配对象y生成追踪对象B(y),将B(y)的各项设定为追踪对象B(y)的分配对象=B(y).ASO=y追踪对象B(y)的生存区间长之和=B(y).LNS=1追踪对象B(y)的资源元素集合=B(y).RES=分配候补资源元素保持部31中保存的资源元素的集合。
并将生成的追踪对象B(y)存入追踪对象保持部52。
在步骤d16,调出后而所述的得失计算子程序进行得失计算,并将各资源元素的计算结果存入得失保持部56。
在步骤d17,将分配给按各资源元素保持在得失保持部56中的值乘以分配对象y的分配优先级的值,从增益保持部37中减去,然后返回步骤d12。
如上所述,增益推断控制部51根据与分配对象x具有资源继承关系的分配对象计算出增益值(步骤d1~d5),当计算的增益值为最大的资源元素有多个时,还要考虑其中分配给生存区间重叠的其他分配对象y有可能削减传输命令的情况,然后才计算最后的增益值(步骤d9~d17)。
特别是对生存区间与分配对象x重叠的分配对象y计算的得失值,表示如果分配给分配对象y时是有多大益处的资源元素。益处越大的资源元素分配给分配对象x时表示传输命令越增加。而且由于在分配对象y中分配优先级小的分配给寄存器等个数有限的资源元素的可能性也很小,所以,必须将其效果评估得较小。因此,在步骤d17中将对分配对象y计算的得失值乘以分配对象y的分配优先级的值从增益保持部37中减除。<得失计算程序的详细流程>
得失计算子程序是从图15的步骤d4及步骤d16调出的一个子程序,在图15的流程步骤d3及步骤d15对追踪对象保持部52存放的所有追踪对象反复执行图16的处理。
在得失计算子程序中,有判断在连续生存群(生存区间相互连接的一系列分配对象的集合)中资源元素是否已分配给当前正在寻求资源继承关系的位置的分配对象A.ASO的步骤e3,并按照此步骤e3的判断结果切换是执行步骤e4还是执行步骤e5~e10。
在步骤e4,当判定已分配时就假定已追寻到已分配的分配对象,并计算其资源元素的得失值,资源元素的增益值只增加该得失值。与此相反,在步骤e3,当未分配时,就在步骤e5~e10将搜索范围向生存区间与分配对象A.ASO重叠的一侧扩展。具体说,就是具有计算分配对象A.ASO的损失因素(成为增益值减少的因素的分配对象)的步骤e5~e8、计算分配给成为损失因素的分配对象的资源元素的得失值并将该资源元素的增益值只减少此得失值的步骤e9和在减少之后对与分配对象A.ASO具有资源继承关系的分配对象重新生成追踪对象的步骤10,反复执行步骤e2~e10直至保存追踪对象的追踪对象保持部52中不存在追踪对象为止,从而构成顺序追踪具有资源继承关系的分配对象的循环结构。
下面,对此流程图中的各个步骤按顺序更详细地说明。
在步骤e1,反复执行步骤e2至步骤e10直到追踪对象保持部52空了为止。如果空了就结束得失计算子程序的处理。
在步骤e2,从追踪对象保持部52中取出一个追踪对象A,从追踪对象保持部52中除去,并将追踪对象A的分配对象项目即分配对象A.ASO存入已处理分配对象保持部53中。
在步骤e3,判断资源元素r是否已分配给分配对象A.ASO,已分配时就执行步骤e4,否则就执行步骤e5。
在步骤e4,资源元素r属于追踪对象A的资源元素集合的项目即A.RES时计算得失值=1/追踪对象A的生存区间长度之和A.LNS,并将此值与得失保持部56的资源元素r的内容相加。然后,返回步骤e1。
在步骤e5,计算生存区间与分配对象A.ASO重叠的并且已分配资源元素的分配对象的集合OSI。
在步骤e6,计算已分配给属于集合OSI的分配对象的资源元素的集合RSI。
在步骤e7,计算属于集合OS1并且未存入已损失分配对象保持部54的分配对象x的集合OS2,并将集合OS2的元素存入已损失分配对象保持部54。
在步骤e8,计算已分配给属于集合OS2的分配对象的资源元素的集合RS2。
在步骤e9,计算得失值=1/追踪对象A的生存区间长度之和A.LNS,并从属于得失保持部56内的集合RS2的资源元素的内容减去求得的得失值。
在步骤e10,对全部与分配对象A.ASO具有资源继承关系的分配对象,并且未存放在已处理的分配对象保持部53中的分配对象y按每一个y生成追踪对象B(y),将B(y)的各项设定为追踪对象B(y)的分配对象=B(y).ASO=y追踪对象B(y)的生存区间长度之和=B(y).LNS=生存区间长之和A.LNS+分配对象A.A.SO的生存区间长追踪对象B(y)的资源元素集合=B(y).RES=资源元素集合A.RES-集合RS1,并将生成的追踪对象B(y)存入追踪对象保持部52,在执行步骤e10之后返回步骤e1。
如上所述,得失计算子程序通过利用步骤e10将具有资源继承关系的分配对象重新追加到追踪对象保持部52内,便可追循资源继承关系。由于利用该设定可以增加追踪对象,所以,还扩大了得失值计算的搜索范围。
追踪对象保持部52保存在步骤d3、d15、e10作为得失计算子程序的处理对象而生成的多个追踪对象。图28C是追踪对象保持部52保存的内容示例。图中各记入栏标有符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,它们表示与分配对象t265对应的由推断增益计算部36的追踪对象保持部52的保存内容的变化。标有这些符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……的追踪对象的分配对象表示计算分配对象t265的得失值对寻求资源继承关系的分配对象。寻求这种资源继承关系的分配对象与分配对象t265的生存区间具有怎样的位置关系如图34所示。图中用粗黑竖线表示成为得失值计算对象的分配对象t265,在进行该得失计算时寻求资源继承关系的分配对象空白竖线表示。
在图28C记入栏内,右端标有“(d-1)”的表示已生成将分配对象t265作为结构体的结构部件的追踪对象。同样,右端标有“(d-4)”的表示已生成将具有与分配对象t265的生存区间重叠的生存区间的分配对象p1作为结构体的结构部件的追踪对象。同样,右端标有“(d-6)”的表示已生成将具有与分配对象t265的生存区间重叠的生存区间的分配对象a3作为结构体的结构部件的追踪对象。
另外,右端标有“(d-8)”的表示已生成将与具有与分配对象t265的生存区间重叠的生存区间的分配对象a3存在资源继承关系的分配对象t263、t264、x2、x3作为结构体的结构部件的追踪对象。
利用图28C中的“(d-4)”,将生存区间相互重叠的分配对象p1选择为对分配对象t265的追踪对象。利用图28C中的“(d-6)”将生存区间相互重叠的分配对象a3选择为对分配对象t265的追踪对象。利用图28C中的“(d-8)”将与分配对象a3具有资源继承关系的分配对象t263、t264、x2、x3选择为对分配对象t265的追踪对象。
这样,参照图28C可知,为了计算分配对象t265的得失值,将搜索范围扩展到了分配对象t263、t264、x2、x3。
已处理的分配对象保持部53保存在步骤e2结束得失计算子程序的处理的追踪对象的分配对象。特别是已处理分配对象保持部53的作用是直接或间接地循环资源继承关系时,是为了防止得失计算子程序的处理发生无限反复的情况。
图29A是已处理分配对象保持部53的保存内容的示例。图中,各记入栏标有符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,这表示与分配对象t265对应的推断增益计算部36的已处理分配对象保持部53的保持内容的变化。在本图的记入栏内,右端标有“(d-1)”的表示分配对象t265已成为已处理的分配对象。由此可知,随着按“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……的顺序进入下一栏,预先将具有与分配对象t265的生存区间重叠的生存区间的分配对象P1、具有与分配对象t265的生存区间重叠的生存区间的分配对象a3及与分配对象a3存在资源继承关系的分配对象t263、t264、x2、x3作为结构部件的追踪对象追加到已处理分配对象保持部53内。
由于已损失分配对象保持部54在得失计算子程序的过程中对同一分配对象不进行二次以上的减除得失值的处理。所以,在步骤e7作为损失因素暂时保存选择的分配对象。这样,设置已损失分配对象保持部54就是为了要避免过度地估量损失因素。例如,首先在步骤d3将保持图21的分配对象x的追踪对象存入追踪对象保持部52中。然后,将得失计算子程序调出,在步骤e10将保持分配对象x3、x4、x5的追踪对象存入追踪对象保持部52。此时如果不经过步骤e7、e8,而在步骤e9使用集合RS1代替集合RS2时,在步骤e9处理保持分配对象x4、x5的追踪对象时,生存区间与分配对象x4、x5重叠的分配对象x11分配的资源元素D0的得失值便减除二次。此后,保持分配对象x6的追踪对象在步骤e9进行处理时同样也减除分配对象x11分配的资源元素D0的得失值,从而有可能将资源元素D0的得失值计算得极小。为了防止出现这种情况,在步骤e7仅将已损失分配对象保持部54中未存放的分配对象作为得失值计算的对象。
图29B是已损失分配对象保持部54的保持内容的示例。图中,各记入栏标有符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,它表示与对对象t265对应的推断增益计算部36的已损失分配对象保持部54的保持内容的变化。在该图记入栏内,右端标有“(d)”、“(d-1)”、“(d-2)”的表示在对分配对象t265的推断增益计算的初期阶段已成为损失因素的分配对象。由此可知,对在“(d-3)”栏中具有与分配对象t265的生存区间重叠的生存区间的分配对象p1调出得失计算子程序,预先将与分配对象p1生存区间重叠的分配对象Ar11、Fr1、Ar12等追加到已损失分配对象保持部54中。
重复分配对象保持部55保持生存区间与分配对象x重叠并未分配资源元素的分配对象。图29C是重复对象保持部55的保持内容的示例。图中各记入栏内,右端标有符号“(d)”、“(d-1)”、“(d-2)”,它表示与分配对象t265对应的推断增益计算部36的重复分配对象保持部55的保持内容的变化。特别是右端标有“(d)”的表示具有与分配对象t265的生存区间重叠的生存区间的分配对象p1、分配对象a3已存入重复分配对象保持部55。
得失保持部56按每一资源元素保持在步骤d4、d16通过执行得失计算子程序计算的得失值。图28B是得失保持部56的保持内容的示例。图中各记入栏内,右端标有符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,这表示与分配对象t265对应的推断增益计算部36的得失保持部56的保持内容的变化。
图11B中所示的资源类别成本计算部39构成为对分配顺序在后的分配对象分配更合适的资源元素。
资源类别成本计算部39由资源类别成本计算控制部501、成本模式保持部502、资源运算成本保持部503、追踪对象保持部504、资源类别总成本保持部505、处理毕分配对象保持部506、和重复分配对象保持部507组成。
资源类别成本计算控制部501进行用于计算分配对象x的资源类别的使用成本的处理进行控制。
图17和图18是资源类别成本计算控制部501的处理内容的流程图。图17是表示资源类别成本计算控制部的处理控制的主流程,图18为后续成本值计算处理的主流程(将利用此流程图表示的后续成本值计算处理称为后续成本值计算子程序)。
图17的流程图具有,生成用于从分配对象x追循资源继承关系的追踪对象的步骤f3、按照追踪对象顺序追寻资源继承关系及计算出各资源的后续成本值后进行资源的第一阶段又一次选择的步骤f4、当第一阶段的又一次选择的结果即后续成本值为最小的资源有多个时追寻生存区间与分配对象x重叠并且未分配的分配对象的资源继承关系以及在计算出各资源的后续成本值后进行资源元素的第二阶段的又一次选择的步骤f15。
此流程图的第二阶段的又一次选择的部分,具有对分配对象y(生存区间与分配对象x重叠并且未分配的分配对象)生成追踪对象的步骤f14、对该追踪对象计算后续成本值的步骤f15和将计算的后续成本值乘以分配对象y的优先级的乘积值从资源的后续成本值中减去的步骤f16,从而构成的对所有的分配对象y反复进行循环结构(步骤f11~f16)。
下面,按照顺序对此流程图的各个步骤作更详细说明。
在步骤f1,将与资源类别成本保持部40和资源类别总成本保持部505的各资源对应的内容置为零。
在步骤f2,清除追踪对象保持部504、处理毕分配对象保持部506。
在步骤f3,对分配对象x生成追踪对象rA(x),将rA(x)的各项目设定为追踪对象rA(x)的分配对象 =rA(x).ASO=x追踪对象rA(x)的生成区间长之和=rA(x).LNS=1,并将生成的追踪对象rA(x)存入追踪对象保持部504。
在步骤f4,调出后面所述的后续成本值计算子程序,进行成本计算,并将各资源的计算结果存入资源类别总成本保持部505。
在步骤f5,将按各资源存放在资源类别总成本保持部505中的值存进资源类别成本保持部40。
在步骤f6,计算资源类别成本保持部40中存放的值为最小的资源的集合R,将评价资源保持部41清除存进属于集合R的资源。
在步骤f7,当集合R的元素数为多个时就执行步骤f8。否则就结束资源类别成本计算部39的处理。
在步骤f8,当存在生存区间与分配对象x重叠并且未分配的分配对象时,就执行步骤f9。否则就结束资源类别成本计算部39的处理。
在步骤f9,将与资源类别成本保持部40的各资源对应的内容置为零,清除追踪对象保持部504。
在步骤f10,只将生存区间与分配对象x重叠并且未分配的分配对象存入重复分配对象保持部507。
在步骤f11,反复执行步骤f12至步骤f16的处理直至将重复分配对象保持部507清除为止。清除后就结束资源类别成本计算部39的处理。
在步骤f12,从重复分配对象保持部507取出一个分配对象y,并从重复分配对象保持部507中除去。
在步骤f13,将与资源类别总成本保持部505的各资源对应的内容置为零,并清除处理毕分配对象保持部506。
在步骤f14,对分配对象y生成追踪对象rB(y),将rB(y)的各项目设定为追踪对象rB(y)的分配对象 =rB(y).ASO=y追踪对象rB(y)的生存区间长之和=rB(y).LNS=1,并将生成的追踪对象rB(y)存入追踪对象保持部504。
在步骤f15,调出后面所述的后续成本值计算子程序,进行成本计算,并将各个资源的计算结果存入资源类别总成本保持部505。
在步骤f16,对评价资源保持部41存放的各资源,将控制资源类别总成本保持部505存放的值乘以分配对象y的分配优先级的乘积值从资源类别成本保持部40中减去,然后返回步骤f11。
如上所述,资源类别成本计算控制部501根据与分配对象x具有资源继承关系的分配对象计算出使用成本值(步骤f1~步骤f5),当计算的成本值为最小的资源有多个时,通过对其中生存区间重叠的其他分配对象y进行成本计算,计算还考虑了分配对象y的分配对象x的成本(步骤f9~步骤f16),特别是,在步骤f15求出的使用成本大的资源对于生存区间与分配对象x重叠的分配对象y来说是需要使用成本的资源并在分配对象x中除了包含该资源还存在其他可分配的资源时,如果将该资源分配给分配对象x,则将不需要成本的资源分配给分配对象y的可能性就增大了。因此,在步骤f16中将求得的成本从资源类别成本保持部40中减去。另外,在步骤f16中将求得的成本乘以分配对象y的优先级,是因为在分配对象y中优先级低的分配给寄存器等的个数有限的资源的可能也小,所以,将其效果估算得小。
图18为后续成本值计算子程序的流程图。后续成本值计算子程序具有对分配对象rA.ASO中的使用中间命令生成成本模式的步骤g5、与成本项进行匹配并取出成本项e1的成本c的步骤g6、根据该成本c和追踪对象rA的生存区间长度之和rA.LNS计算出后续成本值=成本c/rA.LNS的步骤g7和将计算的后续成本值加到资源r的后续成本值的步骤g8,从而构成对分配对象rA.ASO中所含的全部使用中间命令反复进行的循环结构(步骤g4~g8)。
这一循环结构还构成为对资源元素又一次进行选择后剩余的资源反复进行的二重循环结构(步骤g3)。
另外,该二重循环结构每当从追踪对象保持部504取出的追踪对象rA时进行起动,在追踪对象保持部504中每执行一次二重循环结构时便构成重新存入与追循当前资源继承关系的地点的分配对象rA.ASO存在资源继承关系的分配对象(步骤g9)。因此,该二重循环结构便构成为直到连续地反复进行到处理完具有资源继承关系的全部分配对象为止的三重循环结构(步骤g1)。
下面,按顺序对本流程图的各个步骤作更详细地说明。
在步骤g1,反复执行步骤g2至步骤g9的处理直到将追踪对象保持部504清除为止。清除之后就结束后续成本值计算子程序的处理。
在步骤g2,从追踪对象保持部504取出一个追踪对象rA,从追踪对象保持部504中消除。并将追踪对象rA的分配对象项目即分配对象rA.ASO存入处理毕分配对象保持部506。
在步骤g3,对保持在评价资源保持部41中的资源并且可分配给追踪对象rA的分配对象项目即分配对象rA.ASO的资源r一个一个地反复执行步骤g4~步骤g8的一连串的处理。在结束该反复处理之后就执行步骤g9。这里,所谓可分配给分配对象rA.ASO的资源是指未分配给生存区间与分配对象rA.ASO重叠的分配对象的资源元素所属的资源。亦即,生存区间与分配对象rA.ASO重叠的分配对象中的资源具有的资源元素已全部配完时该资源就成为不可分配的。
在步骤g4,逐次取出一个使用分配对象rA.ASO的中间命令,对取出的中间命令i反复执行步骤g5~步骤g8的一连串处理。当反复处理结束后,返回步骤g3。
在步骤g5,将资源r分配给在中间命令i中使用分配对象rA.ASO的部分,生成中间命令i的成本模式p,并保存到成本模式保持部502中。
在步骤g6,使成本模式保持部502中保存的成本模式p与资源运算成本保持部503中保持的成本项间进行匹配,并取出匹配的成本项e1。
在步骤g7,取出成本项e1的成本c,并根据该成本c和追踪对象rA的生存区间长度之和rA.LNS计算后续成本值=成本c/rA.LNS。
在步骤g8,将在步骤g7求得的后续成本值加进资源类别总成本保持部505的资源r的内容中。接着,返回步骤g4。
在步骤g9,对与分配对象rA.ASO存在资源继承关系的未分配的分配对象并且未存进已处理分配对象保持部506内的所有分配对象y生成各个分配对象的追踪对象rB(y),将rB(y)的各项目设定为追踪对象rB(y)的分配对象=rB(y).ASO=y追踪对象rB(y)的生存区间长度之和=rB(y).LNS=生存区间长度之和rA.LNS+分配对象rA.ASO的生存区间长,并将生成的追踪对象rB(y)存入追踪对象保持部504,然后返回步骤g1。
成本模式保持部502保存为了计算后续成本值而在图18的步骤g5中生成的成本模式。由于此成本模式是由与模式保持部43所保持的相同的项目构成的,所以,省略其说明。图31B是资源成本模式保持部502的保持内容的示例。图中各记入栏内,右端标有符号“(d)”,它表示与分配对象t265对应的资源类别成本计算部39的资源成本模式保持部502的变化。
资源运算成本保持部503为了用于后续成本值计算而保存以全部成本模式和与该成本模式对应的成本为栏目的运算成本表。
资源运算成本保持部503保持的运算成本表由图27A中的OP、OPR1、OPR2、RESULT构成的四个项目和表示该项目的组合的成本值的成本组成。
追踪对象保持部504保存成为后续成本值计算子程序的处理对象的多个追踪对象。追踪对象保持部504保持的追踪对象与在推断增益计算部36中使用的追踪对象保持部52保持的追踪对象不同,从组成部件中省去了可分配的资源元素的集合。因此,追踪对象保持部504保持的追踪对象由分配对象与生成区间长度之和的二个项目的数据构成。在本实施例中,为了与追踪对象保持部52中保持的追踪对象相区别,在追踪对象中,用ASO表示追循当前资源继承关系的地点的分配对象,用LNS表示到其为止的生存区间长度之和,在引用它们时,在前面附加上“r”进行表示,如分配对象rA.ASO和生存区间长度之和rA.LNS那样。
资源类别总成本保持部505保存在后续成本值计算子程序中计算的成本。
已处理分配对象保持部506与推断增益计算部36的已处理分配对象保持部53一样,保存完成后续成本值计算子程序的处理的分配对象。与处理毕分配对象保持部53一样,已处理分配对象保持部506的作用也是当资源继承关系直接或间接地循环时用预防止后续成本值计算子程序的处理发生无限反复的情况。图31A是已处理分配对象保持部506的保持内容示例。图中各记入栏内,右端标有符号“(d)”、“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……,这表示与分配对象t265对应的资源类别成本计算部39的处理毕分配对象保持部506的变化。图中记入栏内,右端标以“(d-1)”的是表示资源类别成本计算部39对分配对象t265处理完的最初时刻的分配对象。由此可知,随着按照“(d-1)”、“(d-2)”、“(d-3)”、“(d-4)”……顺序进入下一栏,预先将具有与分配对象t265的生存区间重叠的生存区间的分配对象a3以及和分配对象a3存在资源继承关系的分配对象x2、x3作为组成部件的追踪对象被追加到处理毕分配对象保持部506内。
重复分配对象保持部507保存生存区间与分配对象x重叠并且未分配资源元素的分配对象。图31D是重复分配对象保持部507的保持内容的示例。图中各记入栏内,右端标有符号“(d)”、“(d-1)”、“(d-2)”……,它们表示与分配对象t265对应的资源类别成本计算部39的重复分配对象保持部507的变化。右端标以“(d)”的表示重复分配对象保持部507已存进具有与分配对象t265的生存区间重叠的生存区间的分配对象p1和分配对象a3。
下面,再次参照前所示的流程图说明上述那样构成的本实施例的资源分配装置的具体处理内容。
首先,作为前提,设这里进行处理的资源为地址寄存器(AR)、数据寄存器(DR),设多资源为存贮器(Mm)。另外,设资源AR的资源元素为A0、A1、A2,资源DR的资源元素为D0、D1、D2,多资源Mm也作为资源元素。
另外,作为资源类别的功能限制资源AR具有间接引用存贮器的功能,但是,资源DR不具有。资源DR可以成为乘除法运算的运算符,资源AR则不能。另外,在函数的自变量传送使用的自变量寄存器和函数调用中,设破坏性寄存器为D0、D1、A0,函数的返回值使用的返回值寄存器为D0、A0,并按照返回值的数据类进行D0、A0的区别使用。
对图32中的c语言编写的程序利用现有语法分析装置11和优化装置12输出图33(1)所示的3地址式中间程序。利用优化装置12从中间程序中抽出基本程序块,得到控制流信息和数据流信息。在图33(1)中,特别以箭头↑表示间接引用运算,图中的变量Ar1、Ar2、Fr分别表示保存函数的实自变量和函数的返回值的变量。
在这种状态下,将处理转移到资源分配设备13中。资源分配控制部27起动分配对象生成部22。分配对象生成部22根据控制流信息和数据流信息生成与变量对应的分配对象(步骤a1)。结果,便得到从图24的n10到n15的信息。图24表示利用下面进行的分配处理分配资源元素,图25示出表示实自变量(Ar)、函数的返回值(Fr)、破坏性寄存器(Br)的分配对象。图33(2)用实线表示生存区间的状态。在图33(2)和图24中,如变量t26那样生存区间存在多个的变量分别成为不同的分配对象,所以,区分为t261、t262。
图24所示的分配对象的信息保存在图8中的分配对象保持部21中。
接着,资源分配控制部27起动生存区间重复分配对象检测部23。生存区间重复分配对象检测部23对分配对象保持部21保存的各个分配对象求生存区间重叠的分配对象(步骤a2)。结果,得到图24的n16的信息。
然后,资源分配控制部27起动资源继承分配对象检测部24。资源继承分配对象检测部24对分配对象保持部21中所保存的各个分配对象求存在资源继承关系的分配对象(步骤a3)。结果,得到图24的n17的信息。
而后,资源分配控制部27起动分配优先级计算部25。分配优先级计算部25对各分配对象的按下式计算分配优先级(步骤a4)分配优先级=使用率=使用中间命令存在的循环层次总和/生存区间的长。
再后,资源分配控制部27起动分配资源元素决定部26。分配资源元素决定部26从分配优先级高的分配对象开始顺序将资源元素分配给分配对象(步骤a5)。
下面,参照图13所示的资源元素决定控制部38的流程图说明分配资源元素决定部26的处理。
首先,资源元素决定控制部38判断是否存在未分配的分配对象,从未分配的分配对象中取出分配优先级最高的分配对象t262(步骤b1、b2)。
接着,资源元素决定控制部38起动可分配资源元素检测部32(步骤b3)。可分配资源元素检测部32将未分配给生存区间重叠的分配对象的资源元素即D0、D1、D2、D3、A1、A2和多资源元素的Mm保存到分配候补资源元素保持部31中(图26B的(a))。然后,资源元素决定控制部38起动使用成本计算部34(步骤b4)。
使用成本计算部34对各资源元素求在分配对象t262的使用地点使用保存在分配候补资源元素保持部31中的资源元素时的使用成本。
下面,参照图14所示的使用成本计算控制部的流程图说明使用成本计算部34的处理内容。
首先,使用成本计算控制部47将使用成本保持部35的各资源元素的内容置为零(步骤c1)。
接着,使用成本计算控制部47取出分配候补资源元素保持部31存放的尚未计算使用成本的资源元素D0(步骤c2)。
然后,使用成本计算控制部47将总成本保持部46清零(步骤c3)。
再后,使用成本计算控制部47在分配对象t262的使用中间命令中取出对D0进行使用成本计算的中间命令i10(步骤c4)。
使用成本计算控制部47对使用中间命令i10生成成本模式(代入,D0.N,D0.K,-),并保存在模式保持部43中(步骤c5)。
接着,使用成本计算控制部47将运算成本保持部44中保持的图27A中的运算成本表与模式保持部43中保持的成本模式进行匹配。此时与图27A(C)的成本项的匹配成立,得到成本0并将所得到的成本加到总成本保持部46中所保持的值上(步骤c6、c7)。
然后,使用成本计算控制部47判定匹配的成本项的WORK项目还没有设定,并执行步骤c4。
使用成本计算控制部47取出对分配对象t262的D0尚未计算使用成本的中间命令i11,生成成本模式(加法,D0,K,Im,未),并保存进保持部43。使之与图27A的运算成本表的(b)成本项匹配成立,得到成本并加到总成本保持部46中。接着,判定匹配的成本项的WORK项目还未设定。并执行步骤c4(步骤c4~c8)。
随后,使用成本计算控制部47对资源元素D0检测不存在尚未计算使用成本的分配对象t262的中间命令的资源元素,将总成本保持部46中保存的值作为将D0分配给t262时的使用成本保存为使用成本保持部35的D0的内容(步骤c4、c10)。
使用成本计算控制部47从分配候补资源元素保持部31中取出尚未计算使用成本的资源元素D1,与资源元素D0时一样,对分配对象t262的中间命令i10、i11分别生成成本模式(代入,D1.N,D0.K,-)(加法,D1.K,Im,未),使之与运算成本表匹配,与图27A(d)、(b)的成本项匹配后,分别得到成本1、2。并且,在总成本保持部46中得到其总和后,保存进使用成本保持部35的D1栏中(步骤c2~c8)。
接着,使用成本计算控制部47对资源元素D2、D3、A0、A1、A2也与资源元素D1一样进行计算,得到使用成本值的结果。
然后,使用成本计算控制部47从分配候补资源元素保持部31中取出尚未计算使用成本的资源元素Mm,分别对分配对象t265的中间命令i10、i11生成成本模式(代入,Mm.N,D0.K,-),(加法,Mm.K,Im,未),使之与运算成本表匹配,与图27A的(e)、(f)的成本项匹配后,分别得到成本2、3。并且,在总成本保持部46得到其总和5后,保存进使用成本保持部35的Mm栏内(步骤c2~c7)。另外,图27A(f)的成本项的WORK项目虽然已指定,但是,由于不存在中间命令i11的溢出资源元素,所以,总成本保持部46中不计算入溢出成本(步骤c8、c9)。
再后,使用成本计算控制部47判定不存在存放在分配候补资源元素保持部31中的尚未求使用成本的资源元素(步骤c2),结束使用成本计算部34的处理,并返回步骤b4。这一时刻的使用成本保持部35的内容,可以如图27B的(a)那样得到。
资源元素决定控制部38参照使用成本保持部35判定多资源即Mm的成本并非最小后(步骤b5),就执行步骤b6。
然后,资源元素决定控制部38参照成本保持部35判定存在使用成本为最小的资源元素D0,并将资源元素D0分配给分配对象t262(步骤b6、b16、图26A的(a)、图27B的(a))。
资源元素决定控制部38返回到步骤b1,对未分配的分配对象t263、t264也和分配对象t262一样进行分配处理,如图26A的(b)、(c)那样分配D0。
资源元素决定控制部38取出未分配的并且优先级高的t265(步骤b1、b2)。
接着,资源元素决定控制部38起动可分配资源元素检测部32,得到可分配的资源元素D0、D1、D2、D3、A0、A1、A2、Mm后保存进分配候补资源元素保持部31中(步骤b3,图26B的(d))。
然后,资源元素决定控制部38起动使用成本计算控制部34,如图27B(d)所示的那样对分配候补资源元素保持部31的各资源元素的计算使用成本(步骤b4)。
资源元素决定控制部38判断多资源即存贮器的使用成本是否为最小,但是,由于不是最小,所以进行步骤b6(步骤b5)。
然后,资源元素决定控制部38判断使用成本最小的资源元素是否是唯一的,但是,由于不是唯一的,所以进行步骤b7(步骤b6)。
资源元素决定控制部38将使用成本不是最小的资源元素从分配候补资源元素保持部31的分配候补集合中去除(步骤b7、图26B的(d-1))。
而后,资源元素决定控制部38输入t265,起动推断增益计算部36,对分配候补资源元素保持部31中保持的各资源元素进行增益计算(步骤b8)。
这里,参照图15、图16所示的增益推断控制部51的流程图说明关于t265的推断增益计算部36的处理内容。
首先,增益推断控制部51将与增益保持部37和得失保持部56各资源元素对应的内容置为零(步骤d1、图28A(d)、图28B(d))。
接着,增益推断控制部51清除追踪对象保持部52、已处理分配对象保持部53和已损失分配对象保持部54(步骤d2、图28C(d)、图29A(d)、图29B(d))。
然后,增益推断控制部51对分配对象t265生成追踪对象A1,按图24将A1的各项目设定为A1.ASO=t265A1.LNS=1A1.RES=D0、D1、D2、D3、A0、A1、A2。
如图28C(d-1)所示的那样,将A1存入追踪对象保持部52(步骤d3)。在图28C(d-1)中用(A1、t265、1(D0、D1、D2、D3、A0、A1、A2))表示追踪对象,各项目表示(追踪对象名、分配对象、生存区间长度之和,资源元素集合)。
再后,增益推断控制部51调出得失计算子程序。
这里,参照图16所示的流程图进一步说明关于分配对象t265的增益推断控制部51的处理内容。
首先,在步骤e1、e2,从追踪对象保持部52中取出追踪对象A1,并从追踪对象保持部52中消除。将追踪对象A1的分配对象项目即分配对象t265存入已处理分配对象保持部53(图28C(d-2),图29A(d-1))。
接着,在步骤e3,因为追踪对象A1的分配对象项目即分配对象t265没有分配资源元素,所以,进入步骤e5。
在步骤e5~e9,因为集合OS1是空的,所以,集合RS1、集合OS2、集合RS2也是空的,不计算得失值(图29B(d-1))。
而后,在步骤e10,因为不存在与追踪对象A1的分配对象项目即分配对象t265具有资源继承关系的分配对象,所以,不生成新的追踪对象,并返回步骤e1。
再后,在步骤e1,因为追踪对象保持部52如图28C(d-2)所示的那样是空的,所以,结束得失计算子程序的处理,并返回步骤d4。
现在,参照图15所示流程图的步骤d5以下的步骤进一步对关于分配对象t265的增益推断控制部51的处理内容加以说明。
首先,增益推断控制部51将图28B(d)所示的得失保持部56的值存入增益保持部37(步骤d5,图28A(d-1))。
接着,增益推断控制部51计算存放在图28A(d-1)所示的增益保持部37中的值为最大的资源元素的集合RS=(D0、D1、D2、D3、A0、A1、A2)(步骤d6)。
由于集合RS的元素为多个,存在生存区间与分配对象t265重叠并且未分配的分配对象p1、p3,所以,增益推断控制部51执行步骤d9(步骤d7、d8)。
增益推断控制部51将集合RS存入分配候补资源元素保持部31,将与增益保持部37的各资源元素对应的内容置为零,将追踪对象保持部52清除,并将生存区间与分配对象t265重叠并且未分配的分配对象p1、a3存入重复分配对象保持部55(步骤d9、d10、d11,图26B(d-2)、图28C(d-3)、图28A(d-2)、图29C(d))。
接着,增益推断控制部51从重复分配对象保持部55中取出分配对象p1,并从重复分配对象保持部55中消除(步骤d12、d13,图29C(d-1))。
将与得失保持部56的各资源元素对应的内容置为零,增益推断控制部51清除已处理分配对象保持部53和已损失分配对象保持部54(步骤d14、图28B(d-1)、图29A(d-2)、图29B(d-2))。
然后,增益推断控制部51对分配对象p1生成追踪对象A2,根据图24将A2的各项目设定为A2.ASO=P1A2.LNS=1A2.RES=D0、D1、D2、D3、A0、A1、A2。并如图28C(d-4)所示的那样将A2存入追踪对象保持部52(步骤d15)。
再后,增益推断控制部51调出得失计算子程序。
现在,参照图16所示的流程图进一步说明关于分配对象t265的增益推断控制部51的处理内容。
首先,在步骤e1、e2从追踪对象保持部52中取出追踪对象A2,并从追踪对象保持部52中消除。将追踪对象A2的分配对象项目即分配对象p1存进已处理分配对象保持部52(图28C(D-5)、图29A(d-3))。
然后,在步骤e3,因为追踪对象A2的分配对象项目即分配对象p1未分配资源元素,所以,进入步骤e5。
在步骤e5、e6,计算集合OS1=(Ar11,Fr1,Ar12,Ar22,Fr2,Ar13,Ar23,Fr3,Br1,Br2,Br3,t262,t263,t264)和集合RS1=(D0、D1、A0)。
在步骤e7、e8,因为如图29B(d-2)所示的那样已损失分配对象保持部54为空的,所以,有集合OS2=CAr11,Fr1,Ar12,Ar22,Fr2,Ar13,Ar23,Fr3,Br1,Br2,Br3,t262,t263,t264)、集合RS2=(D0、D1、A0),已损失分配对象保持部54成为图29B的(d-3)。
在步骤e9,计算得失值=1/A2.LNS=1,并从图28B(d-1)的得失保持部56的资源元素D0、D1、A0的内容中减除(图28B(d-2))。
在步骤e10,因为不存在与追踪对象A2的分配对象项目即分配对象b2具有资源继承关系的分配对象,所以,不生成新的追踪对象。并返回步骤e1。
然后,在步骤e1,如图28C(d-5)所示的那样,由于追踪对象保持部52为空的,所以,结束得失计算子程序的处理,并返回步骤d16。
现在,参照图15的流程图的步骤d17以下的步骤说明有关分配对象t265的增益推断控制部51的处理内容。
首先,增益推断控制部51将存放在图28B(d-2)所示的得失保持部56中的值乘以分配对象p1的分配优先级0.27的值从增益保持部37中减去。亦即,如图28B(d-2)所示的那样,当得失值为负值时,最后就如图28A(d-3)那样将各值相加。并返回步骤d12(步骤d17)。
接着,增益推断控制部51从重复分配对象保持部55中取出分配对象a3,并从重复对象保持部55中消除(步骤d12、d13,图29C(d-2))。
再后,增益推断控制部51将与得失保持部56的各资源元素对应的内容置为零,清除已处理分配对象保持部53和已损失分配对象保持部54(步骤d14,图28B(d-3)、图29A(d-4)、图29B(d-4))。
增益推断控制部51对分配对象a3生成追踪对象A3,按图24和图26B的(d-2)将A3的各项目设定为A3.ASO=a3A3.LNS=1A3.RES=D0、D1、D2、D3、A0、A1、A2。如图28C(d-6)所示的那样,将A2存入追踪对象保持部52(步骤d15)。
然后,增益推断控制部51调出得失值计算子程序(步骤d16)。
这里,参照图16所示的流程图说明有关分配对象t265的增益推断控制部51的处理内容。
首先,在步骤e1、e2,从追踪对象保持部52中取出追踪对象A3,从追踪对象保持部52中消除。并将追踪对象A3的分配对象项目即分配对象a3存入已处理分配对象保持部53(图28C(D-7),图29A(d-5))。
在步骤e3,由于追踪对象A3的分配对象项的分配对象a3未分配资源元素,所以,进入步骤e5。
在步骤e5~e9,由于集合OS1为空的,所以,集合RS1、集合OS2、集合RS2也是空的,所以,不计算得失值(图29B(d-5))。
然后,在步骤e10,对与追踪对象A3的分配对象项目即分配对象a3具有资源继承关系的分配对象t263、t264、x2、x3,如图28C的(d-8)所示的那样生成追踪对象A4、A5、A6、A7。这里,各追踪对象的生存区间长度之和成为A3.LNS的1与分配对象a3的生存区间长度3的和4,并返回步骤e1。
接着,在步骤e1、e2,从追踪对象保持部52中取出追踪对象A4,从追踪对象保持部52中消除。并将追踪对象A4的分配对象项目即分配对象t263存入已处理分配对象保持部53(图28C(d-9)、图29A(d-6))。
在步骤e3,由于追踪对象A4的分配对象项目即分配对象t263已分配资源元素D0,故进入步骤e4。
在步骤e4,计算得失值=1/A4.LNS=0.25,加到图28B(d-3)的得失保持部56的资源元素D0的内容中,并返回步骤e1(图28B(d-4))。
接着,对追踪对象A5也进行与追踪对象A4同样的处理,追踪对象保持部52转移到图28C的(d-10),得失保持部56转移到图28B的(d-5),已处理分配对象保持部53转移到图29A的(d-7)(步骤e1~e4、e11)。
然后,在步骤e1、e2,从追踪对象保持部52中取出追踪对象A6,从追踪对象保持部52中去除。并将追踪对象A6的分配对象项目即分配对象x2存入已处理分配对象保持部53中(图28C(d-11),图29A(d-8))。
在步骤e3,由于追踪对象A6的分配对象项目即分配对象x2未分配资源元素,所以,进入步骤e5。
在步骤e5、e6,计算集合OS1=(Ar12,Ar22,Fr2,t263,Br2)和集合RS1=(D0、D1、A0)。
在步骤e7、e8,由于已损失分配对象保持部54如图29B的(d-5)所示的那样是空的,所以,成为集合OS2=(Ar12、Ar22、Fr2、t263、Br2),集合RS2=(D0、D1、A0),已损失分配对象保持部54成为图29B的(d-6)。
在步骤e9,计算得失值=1/A6.LNS=0.25,从图28B(d-5)的得失保持部56的资源元素D0、D1、A0的内容中减除(图28B(d-6))。
然后,在步骤e10,因为与追踪对象A6的分配对象项目即分配对象x2具有资源继承关系的分配对象a3已存进图29A(d-8)的已处理分配对象保持部53中,故不生成追踪对象。返回步骤e1。
对追踪对象A7也作与追踪对象A6同样的处理,追踪对象保持部52转移到图28C的(d-12),得失保持部56转移到图28B的(d-7),已处理分配对象保持部转移到图29A的(d-9)(步骤e1~e4、e10)。
在步骤e1,由于追踪对象保持部52如图28C的(d-12)所示的那样是空的,故结束得失计算子程序的处理,并返回步骤d16。
现在,参照图15所示的流程图的步骤d17以下的步骤说明有关分配对象t265的增益推断控制部51的处理内容。
首先,增益推断控制部51将图28B的(d-7)所示的得失保持部56中存放的值乘以分配对象a3的分配优先级2.67的值从增益保持部37中减去。亦即,如图28B的(d-7)所示的那样,得失为负数时,最后就如图28A的(d-4)所示的那样将各值相加,并返回步骤d12(步骤d17)。
然后,如图29C的(d-2)所示的那样,由于重复分配对象保持部55是空的,故增益推断控制部51使推断增益计算部36结束处理,并返回步骤b8。
现在,参照图14所示的流程图的步骤b9以下的步骤再次说明关于分配对象t265的资源类别成本计算部39的处理内容。
首先,资源元素决定控制部38计算存放在图28A的(d-4)所示的增益保持部37中的值为最大的资源元素的集合RS=(D1、A0),并存进分配候补资源元素保持部33中(图26B(d-3))(步骤b9)。
然后,资源元素决定控制部38根据集合RS的内容得到集合RES=(AR,DR),并存入评价资源41(步骤b10,图31C(d))。
由于集合RES存在二个资源,故资源元素决定控制部38执行步骤b12(步骤b11)。
然后,资源元素决定控制部38起动资源类别成本计算部39,进行成本计算(步骤b12)。
现在,参照图17所示的流程图再次说明关于分配对象t265的资源类别成本计算部39的处理内容。
首先,资源类别成本计算控制部501将与资源成本保持部40和资源类别总成本保持部505的各资源元素对应的内容置为零(步骤f1,图30A(d),图30B(d))。
资源类别成本计算控制部501清除追踪对象保持部504和已处理分配对象保持部506(步骤f2,图30C(d),图31A(d))。
然后,资源类别成本计算控制部501对分配对象t265生成追踪对象rA1,将rA1的各项目设定为rA1.ASO=t265rA1.LNS=1。然后,如图30C的(d-1)所示的那样,将rA1存入追踪对象保持部504(步骤f3)。在图30C(d-1)中如(rA1,t265,1)那样表示追踪对象,各项目表示(分配对象名、分配对象、生存区间长之和)。
而后,资源类别成本计算控制部501调出后续成本值计算子程序(步骤f4)。
现在,参照图18所示的流程图说明有关分配对象t265的资源类别成本计算部39的处理内容。
首先,在步骤g1、g2,从追踪对象保持部504中取出追踪对象rA1,从追踪对象保持部504中消除。并将追踪对象rA1的分配对象项目即t265存入已处理分配对象保持部506中(图30C(d-2),图31A(d-1))。
然后,在步骤g3,由于存在存放在图31C(d)的评价资源保持部41中的具有可分配给分配对象t265的资源AR、DR,所以,首先对资源AR执行步骤g4以下的各步。
在步骤g4,首先取出分配对象t265的使用中间命令i27,在步骤g5生成成本模式(间接引用,An,未,一),并存入成本模式保持部502中(图31B(d))。
在步骤g6,取出与成本模式(间接引用,An,未)相匹配的成本项即图27A的(g)。
在步骤g7,根据取出的成本项的成本2与追踪对象rA1的生存区间长度之和即rA1.LSN计算后续成本值2/1=2。
然后,将在步骤g8求得的后续成本值与资源类别总成本保持部505的资源AR的内容相加。(图30B(d-1))。
然后,返回步骤g4,取出分配对象t265的中间命令i28,生成成本模式(加法,未,An,未),取出与该成本模式相匹配的图27A的(f)的成本模式。根据该成本模式的成本3与追踪对象rA1的生成区间长度之和即rA1.LSN计算后续成本值3/1=3,并与资源类别总成本保持部505的资源AR的内容相加,成为图30B的(d-2)。
然后,返回到步骤g4,但是由于已取出全部分配对象t265的中间命令,所以,返回步骤g3。
对资源DR也进行与资源AR同样的成本计算时,由于与图27A的(g)、(f)的成本项匹配,结果资源类别总成本保持部505成为图30B的(d-3)。
然后,返回步骤g3,由于对评价资源保持部41存放的全部资源AR、DR(图31C(d))的成本计算已结束,所以,执行步骤g9。
在步骤g9,由于不存在与分配对象t265具有资源继承关系的分配对象,所以,不生成追踪对象。
然后,返回步骤g1,但是,如图30C的(d-2)所示的那样,由于追踪对象保持部504是空的,故结束后续成本值计算子程序的处理,返回步骤f4。
现在,参照图17的流程图中步骤f5以下的步骤说明关于分配对象t265的资源类别成本计算部39的处理内容。
首先,在步骤f5,将资源类别总成本保持部505存放的值存入资源类别成本保持部40中(图30A(d-1))。
然后,在步骤f6,计算资源类别成本保持部40的值为最小的资源AR、DR,如图31C的(d-1)所示的那样存入评价资源保持部41。
在步骤f7,由于资源类别成本保持部40的值为最小的资源有多个,故执行步骤f8。
在步骤f8,由于存在生存区间与分配对象t265重叠的分配对象p1、a3,故执行步骤f9。
在步骤f9、f10,将资源类别成本保持部40的内容置为零,清除追踪对象保持部504,将分配对象p1、a3存入重复分配对象保持部507(图30A(d-2)、图30C(d-3)、图31D(d))。
在步骤f11、f12、f13,从重复分配对象保持部507中取出分配对象p1,将资源类别总成本保持部505的内容置为零,清除已处理分配对象保持部505(图31D(d-1)、图30B(d-4)、图31A(d-2))。
在步骤f14,对取出的分配对象p1生成追踪对象rA2,将rA2的各项目设定为rA2.ASO=P1rA2.LNS=1。如图30C的(d-4)所示的那样,将rA2存入追踪对象保持部504。
然后,资源类别成本计算部501调出后续成本值计算子程序(步骤f15)。
现在,参照图18所示的流程图说明关于分配对象t265的资源类别成本计算部39的处理内容。
首先,在步骤g1、g2,从追踪对象保持部504中取出追踪对象rA2,从追踪对象504中消除。并将追踪对象rA2的分配对象项目即分配对象p1存入已处理分配对象保持部506中(图30C(d-5),图31A(d-3))。
然后,在步骤g3,由于存在存放在图31C(d-1)的评价资源保持部41中的可分配给分配对象p1的资源AR、DR,所以,首先对资源AR执行步骤g4以下的步骤。
对分配对象p1的使用中间命令i5、i27、i29、i30分别生成成本模式(代入,An,未,一),(间接引用,未,An,一)、(加法、An,IM,左同)、(间接引用,未,An,一),使之分别与图27A的成本项(h)(i)(a)(i)匹配,根据追踪对象rA2的生存区间长度之和rA2.LNS计算后续成本值时,如图30R的(d-5)所示的那样更新资源类别总成本保持部505的资源AR的内容(步骤g4~g8)。
然后,返回步骤g3,取出资源DR,对分配对象的使用中间命令i5、i27、i29、i30分别生成成本模式(代入,Dn,未,一)、(间接引用,未,Dn,一)、(加法,Dn,IM,左同)、(间接引用,未,Dn,一),使之分别与图27A的成本项(h)(j)(a)(i)匹配,根据追踪对象rA2的生存区间长度之和即rA2.LNS计算后续成本值时,如图30B的(d-6)所示的那样,更新资源类别总成本保持部505的资源DR的内容(步骤g4~g8)。
然后,返回步骤g3,由于满足条件的资源已全部取出,故执行步骤g9。
在步骤g9,由于不存在与分配对象p1具有资源继承关系的分配对象,故不重新生成追踪对象,并返回步骤g1。
然后,在步骤g1,如图30C的(d-5)所示的那样,由于追踪对象保持部504为空的,所以,结束后续成本值计算子程序,并返回步骤f15。
现在,参照图17的流程图中步骤f16以下的步骤说明关于分配对象t265的资源类别成本计算部39的处理内容。
首先,在步骤f16,按照得失保持部56中存放的值和分配对象p1的优先级0.27,如图30A的(d-3)所示的那样,更新资源类别成本保持部40的资源AR、DR的内容。
在步骤f11、f12、f13,从重复分配对象保持部507中取出分配对象a3,将资源类别总成本保持部505的内容置为零,清除已处理分配对象保持部506(图31D(d-2)、图30B(d-7)、图31A(d-4))。
在步骤f14,对取出的分配对象a3的生成追踪对象rA3,将rA3的各项目设定为rA3.ASO=a3rA3.LNS=1。如图30C的(d-6)所示的那样,将rA3存入追踪对象保持部504。
然后,在步骤f15,资源类别成本计算控制部501调出后续成本值计算子程序。
现在,参照图18所示的流程图说明有关分配对象t265的资源类别成本计算部39的处理内容。
首先,在步骤g1、g2,从追踪对象保持部504中取出追踪对象rA3,从追踪对象保持部504中删除。并将追踪对象rA3的分配对象项目即分配对象a3存入处理毕分配对象保持部506(图30C(d-7),图31A(d-5))。
在步骤g3,由于存在存放在图31C的(d-1)的评价资源保持部41中的可分配给分配对象a3的资源AR、DR,故执行步骤g4以下各步。
对分配对象a3的中间命令i20、i26、i28分别生成成本模式(加法,未,未,不同)、(加法,未,未,不同)、(加法,An,未,未),使之与图27的成本项(k)(k)(1)匹配,如图30B的(d-8)所示的那样,更新资源类别总成本保持部505的资源AR的内容(步骤g4~g8)。
然后,返回步骤g3,取出资源DR,对资源DR进行同样的处理,如图30B的(d-9)所示的那样,更新资源类别总成本保持部505的资源DR的内容(步骤g4~g8)。
然后,返回步骤g3,由于满足条件的资源已全部取出,所以,执行步骤g9。
在步骤g9,对与分配对象a3具有资源继承关系的未分配的分配对象并且未存放到图31A的(d-5)的已处理分配对象保持部506中的分配对象x2、x3,如图30C的(d-8)所示的那样,生成追踪对象rA4、rA5。
接着,在步骤g1、g2,从追踪对象保持部504中取出追踪对象rA4,从追踪对象保持部504中消除。并将追踪对象rA4的分配对象项目即x2存入已处理分配对象保持部506中(图30C(d-9),图31A(d-6))。
在步骤g3,由于存在存放在图31C(d-1)的评价资源保持部41中的可分配给分配对象x2的资源AR、DR,所以,执行步骤g4以下的处理。
对分配对象x2的使用中间命令i12、i13、i20分别生成(加法,未,IM,不同)、(加法,An,IM,未)、(加法、未,An,未),使之与图27A的成本项(m)(b)(f)匹配,计算成本值8,由于追踪对象rA4的生存区间长度之和项目即rA4.LNS为4,所以,后续成本值就成为8/4=2,如图30B的(d-10)所示的那样,更新资源类别总成本保持部505的资源AR的内容(步骤g4~g8)。
然后,返回步骤g3,取出资源DR,对资源DR进行同样的处理,如图30B(d-11)所示的那样,更新资源类别总成本保持部505的资源DR的内容(步骤g4~g8)。
然后,返回步骤g3,由于满足条件的资源已全部取出,故执行步骤g9。
在步骤g9,因为与分配对象x2具有资源继承关系的唯一分配对象a3,如图31A(d-6)所示的那样未存入已处理分配对象保持部506中,故不重新生成追踪对象,并返回步骤g1。
在步骤g1、g2,从追踪对象保持部504中取出追踪对象rA5,从追踪对象保持部504中消除。并将追踪对象rA5的分配对象项目即x3存入处理毕分配对象保持部506中(图30C(d-10)、图31A(d-7))。
接着,与前述追踪对象rA4的分配对象x2一样,对分配对象x3的使用中间命令i13、i26计算资源AR、DR的后续成本值如图30B(d-12)所示的那样,更新资源类别总成本保持部505的资源AR及资源DR的内容(步骤g3~g8)。
在步骤g9,由于与分配对象x3具有资源继承关系的唯一的分配对象a3如图31A(d-7)所示的那样未存入已处理分配对象保持部506,故不生成新的追踪对象而返回步骤g1。
接着,在步骤g1,如图30C(d-10)所示的那样,由于追踪对象保持部504为空的,故结束后续成本值计算子程序,并返回步骤f15。
现在,参照图17的流程图中步骤f16以下步骤说明关于分配对象t265的资源类别成本计算部39的处理内容。
首先,在步骤f16,根据得失保持部56中存放的值和分配对象a3的优先级2.67,如图30A(d-4)所示的那样,更新资源成本保持部40的资源AR、DR的内容。
接着,返回步骤f11,但是,如图31D(d-2)所示的那样,由于重复分配对象保持部507是空的,所以,终止资源类别成本计算部39的处理,并返回步骤b12。
现在,参照图14所示的流程图的步骤b13以下各步说明有关分配对象t265的资源类别成本计算部39的处理内容。
首先,资源元素决定控制部38将属于图31C(d-1)的评价资源保持部41的、存放在图30A(d-4)的资源类别成本保持部40中的成本为最小的资源、并且是存放在图26B(d-3)的分配候补资源元素保持部31中的资源元素D1,分配给t265(步骤b13)。
对全部分配对象进行这样的处理,并将资源元素分配给各分配对象(对上述分配对象t265以后的分配对象的说明省略)。
这样,根据本发明,由于参照程序中的各分配对象的资源继承关系达到多大范围,所以,可以进行更理想的资源分配。
向嵌套级深的地点优先分配寄存器,再可以获得预先将此已分配的寄存器向嵌套浅的场所扩散的灵活的分配结果。另外,向使用频率高的场所优先分配寄存器,也可以获得预先将此已分配的寄存器向嵌套级浅低的地点扩散的灵活的分配结果。进而,可以实现自变量寄存器、返回值寄存器、破坏性寄存器等预先分配的对象已确定的分配对象将其资源向周围扩展的灵活的资源分配。
由于分配结果极其简单,所以,可以进一步改善最后生成的机器语言程序的程序大小和执行速度。
上述实施例虽然是按顺次进行使用成本值计算、得失值计算、后续成本值计算的结构将计算处理按层次细分的形式加以说明的,但本实施例在不离开其宗旨的范围内可以变更地实施。下面列举出二个代表性的应用示例。
应用例1特别是当对减少执行时间比对缩小编译程序生成的目的代码的大小更重视时,已知存在分配对象x的使用中间命令i的循环级或i的执行次数时,可以将其执行次数与在步骤c7取出的成本项e1的成本相乘、并将乘积值加到总成本保持部中(在图15的使用成本计算控制部47的流程图的步骤c4检测循环级次,并输入使用成本计算部34)。
应用例2在步骤b9求出的资源元素的集合RS中存在多个资源元素时,在步骤b12的资源类别成本计算的后续成本值计算中,通过进行与在步骤b4进行的使用成本计算相同的处理,也可以从集合RS中选出更合适的资源元素分配给分配对象x。
这时,首先将步骤g5~g8置换为与步骤c5~c9相同的处理,计算使用成本,然后,将如图17、18中的总成本保持部46置换为资源类别总成本保持部505、将使用成本保持部35置换为资源类别成本保持部40、将使用成本置换为后续成本值。然后,在步骤b11判定集合RS的元素是否为多个。
在步骤b12和步骤f1~f6,计算将属于资源RS的资源元素分配给与分配对象x具有资源继承关系或者间接地具有资源继承关系的未分配的分配对象x1时的使用成本,并将计算出的使用成本再除以从分配对象x到分配对象x1的生存区间的长度,然后,将得到的值保存进使用成本保持部35中。反之,在步骤f7,当使用成本保持部35中所保存的最小成本的资源元素有多个时,就执行步骤f8,在步骤f8~f11,计算将属于集合RS的资源元素分配给生存区间与分配对象x重叠并且未分配的分配对象x2存在资源继承关系的或者间接地具有资源继承关系的未分配的分配对象x3时的使用成本,并将计算出的值除以从分配对象x2到分配对象x3的生存区间的长度,然后再乘以-1,最后将所得结果保存于使用成本保持部35中。
这样,参照保持使用成本的使用成本保持部35的保持内容,便可将保持内容为最小的资源元素分配给分配对象x。
<应用例3>
作为得失值虽然使用了生存区间之和,但也可将其作为分配对象的个数。例如,在图21中,可用从分配对象x到分配对象x2存在的分配对象的个数3(分配对象x、x5、x6),使分配给分配对象x2的资源要素D1的得失值为1/3。
<应用例4>
在本实施例中,求出正号得失值和负号得失值后,将它们的和作为最后的得失值,但也可以分别使用上述得失值,根据一方的得失值缩小分配寄存器的候补,另外根据另一方的得失值决定分配寄存器。例如,在图15中的分配对象x的寄存器决定中,可分配给分配对象x的资源要素为D1、D2、D3。这时,可分配的资源要素中,首先将负得失值最小的资源要素作为分配对象x的分配候补。但是,关于负得失值不能设定的资源要素,将负得失值取为0。于是,资源要素D2、D3的负得失值变为0。这样一来,由于资源要素D1的负得失值为Px/(L2+L3),所以负得失值最大的资源要素变为D2、D3,将其作为新的分配对象x的分配候补。
其次,将正得失值最大的资源要素分配给分配对象x。但是,关于正得失值设定的资源要素,正得失值取0。于是,资源要素D3的得失值变为0,将得失值最大的资源要素D2分配给分配对象。
权利要求
1.用于将高级语言编写的程序翻译成机器语言程序的编译程序、生成多个以编程语言描述的程序中的变量与生存区间的组合即分配对象并将寄存器、存贮器等硬件资源所具有的资源元素顺序分配给所生成的分配对象的资源分配设备,其特征是包含如下结构,即得失值计算装置,根据分配对象中已分配的分配对象的生存区间和随后应分配的分配对象的生存区间在程序处于什么样的位置关系,对各资源元素计算表示哪一资源元素对随后应分配的分配对象适宜的得失值;分配装置,根据对各资源元素计算的得失值的大小将某个资源元素分配给应分配的分配对象;和控制装置,反复起动得失值计算装置和分配装置,直至全部分配对象被分配为止。
2.权利要求1中所述资源分配设备,其特征是具有判断程序中各分配对象的位置关系的位置关系判断装置,所述位置关系判断装置包含如下结构,即重复关系判断装置,判断已分配资源元素的分配对象的生存区间是否与应分配的分配对象的生存区间相重复;已分配一被分配间连续判断装置,判断已分配资源元素的分配对象的生存区间与应分配的分配对象的生存区间是否连续。所述得失值计算装置包含如下结构,即第一增加部,当由已分配一被分配间连续判断装置判定生存区间与应分配的分配对象连续时,就根据从已分配资源元素的分配对象到应分配的分配对象为止的生存区间的长短,在判定为连续的已分配的分配对象中,使已分配的资源元素的得失值增加,上述分配装置不将分配给具有由重复关系判断装置判定生存区间重复的已分配的分配对象的资源元素分配给应分配的分配对象,而将判定生存区间不重复的已分配的分配对象中得失值为最大的资源元素分配给应分配的分配对象。
3.权利要求2中所述资源分配设备,其特征是所述位置关系判断装置包含如下结构,即已分配一侧重叠分配对象检测装置,检测具有与已分配资源元素的分配对象重叠的生存区间的未分配的分配对象;和未分配—被分配间连续判断装置,判断所检测的未分配的分配对象的生存区间与应分配的分配对象的生存区间是否连续,所述得失值计算装置包含如下结构,即第一减少部,当判断为连续时,根据从已分配一侧重叠分配对象检测装置检测的未分配的分配对象到应分配的分配对象的生存区间的长短,减小分配给该已分配的分配对象的资源元素的得失值。
4.权利要求3中所述资源分配设备,其特征是当由已分配一侧重叠分配对象检测装置判定有多个未分配的分配对象时,所述未分配—被分配间连续判断装置判断所检测的多个未分配的分配对象中哪一个的生存区间与应分配的分配对象的生存区间连续。
5.权利要求3中所述资源分配设备,其特征是还包含优先级存贮装置,用于与各分配对象相对应地存贮反映程序中分配对象的使用频度和/或生存区间的嵌套级的分配对象的优先级;所述得失值计算装置和分配装置按此优先级存贮装置存贮的优先级顺序确定应分配的分配对象。
6.权利要求5中所述资源分配设备,其特征是所述位置关系判断装置包含如下结构,即被分配一侧重叠分配对象检测装置,在由得失值计算装置对各资源元素计算出的得失值在多个资源元素相互大小相同时,检测具有与应分配的分配对象的生存区间重叠的生存区间的未分配的分配对象;和未分配—已分配间连续判定装置,判断所检测的分配对象的生存区间与已分配资源元素的分配对象的生存区间是否连续,所述得失值计算装置包含如下结构,即优先级检测部,检测由被分配一侧重叠分配对象检测部检测的分配对象的优先级;第一缩短计算部,计算从已分配的分配对象到所检测的未分配的分配对象的生存区间的长短;和第二减小部,将所检测的优先级乘以计算的长短,根据此乘积结果减小该已分配资源元素的得失值。
7.权利要求6中所述资源分配设备,其特征是所述位置关系判断装置包含如下结构,即已分配一侧重叠分配对象检测装置,检测具有与已分配资源元素的分配对象的生存区间重叠的生存区间的未分配的分配对象;未分配—未分配间连续判断装置,判断由被分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间是否与由已分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间相连续,所述得失值计算装置包含如下结构,即第二缩短计算部,计算从被分配一侧重叠分配对象检测装置所检测的未分配的分配对象到已分配侧重叠分配对象检测装置所检测的未分配的分配对象的生存区间长短;第二增加部,将检测的优先级乘以计算长短,根据此乘积结果增加分配给已分配的分配对象的资源元素的得失值。
8.权利要求7中所述资源分配设备,其特征是当由已分配一侧重叠分配对象检测装置判定有多个未分配的分配对象时,所述未分配—未分配间连续判断装置判断所检测的多个未分配的分配对象中哪一个的生存区间与应分配的分配对象的生存区间相连续。
9.权利要求7中所述资源分配设备,其特征是还包含有得失值存贮部,存放全部资源元素和各自对应的各资源元素的得失值的初始值,第一和第二增加部使得失值存贮部中存放的各资源元素的得失值增加,而第一和第二减小部则使得失值存贮部中存放的各资源元素的得失值减少。
10.权利要求9中所述资源分配设备,其特征是还包含如下结构,即推断装置,在程序中分配各资源的资源元素时,对于分配的分配对象与各资源元素的组合通过计算其总和值的推断值,来推断定义3应分配的分配对象的全部定义命令和使用的全部使用命令的执行周期和/或代码大小的总和值达到什么程度;和资源元素单复判断装置,对各资源元素的推断结果即推断值进行比较,判断推断值为最小的资源元素是一个还是多个,当判定为一个时,所述分配装置将推断值为最小的资源元素分配给应分配的分配对象,当判定为多个时,将得失值为最大的资源元素分配给应分配的分配对象。
11.权利要求10中所述资源分配设备,其特征是所述推断装置包含如下结构,即命令模式输出部,对在程序中分配对象的全部定义命令和使用命令,采用机器语言命令格式输出表示程序中的该分配对象的定义命令和使用命令的信息即命令模式;成本存贮部,与由命令模式输出部输出的命令模式分别对应地存贮表示机器语言命令的各操作数中应用各资源的资源元素时该定义命令和使用命令的执行周期和/或代码大小的成本;和成本总和部,从成本存贮部中取出与所输出的命令模式对应的成本,将取出的成本对各资源元素累计求和,并将求和所得的总和值作为推断值。
12.权利要求10中所述资源分配设备,其特征是还包含预测装置,用于当时各资源元素由得失值计算装置计算的得失值在多个不同资源的资源元素之间具有相同大小时,预测优先级比应分配的分配对象低、并且对于在此应分配的分配对象之后进行分配的全部未分配的分配对象最适合的资源元素。上述分配装置将由预测装置预测的资源元素分配给应分配的分配对象。
13.权利要求12中所述资源分配设备,其特征是所述预测装置包含如下结构,即第一后续分配对象检测装置,用于检测全部具有与应分配的分配对象的生存区间相连续的生存区间并且优先级比该分配对象低的未分配的分配对象。第一推断装置,对于第一后续分配对象检测装置检测的全部分配对象和各资源元素的组合通过计算该总和值的推断值,推断当向检测的各分配对象分配各资源元素时定义该分配对象的全部定义命令和使用的全部使用命令的执行周期和/或代码大小的总和值达到什么程度;第一生存区间长度计数装置,对由第一后续分配对象检测装置所检测的每一分配对象,计数介于由第一后续分配对象检测装置检测的各分配对象与应分配的分配对象之间的连续的生存区间长度;第一加权装置,对于检测的各分配对象与各资源元素的组合,将对该分配对象计数的生存区间的长短作为权重对由第一推断装置计算的推断值进行加权;第一总和装置,对由第一加权装置加权后的推断值按各资源元素进行求和计算;和第一优化资源元素判断装置,将由第一总和装置求和的总和结果为最小的资源元素判断为最合适于优先级比应分配的分配对象低的未分配的分配对象的资源元素。
14.权利要求13中所述资源分配设备,其特征是所述预测装置包含如下结构,即第二后续分配对象检测装置,当判定由第一优化资源元素判断装置是多个资源元素最合适时,检测生存区间与应分配的分配对象重叠的未分配的分配对象和具有与该未分配的分配对象的生存区间连续的生存区间的未分配的分配对象;第二推断装置,当将各资源元素分配给由第二后续分配对象检测装置检测的未分配的分配对象时,对于检测的分配对象与各资源元素的组合,通过计算该总和值的推断值;来推断定义所检测的各分配对象的全部定义命令和使用的全部使用命令的执行周期和/或代码大小的总和值达到什么程度;第二生存区间长计数装置,对于由第二后续分配对象检测装置检测的每一分配对象,计数介于生存区间与应分配的分配对象的生存区间重叠的未分配的分配对象和具有与该重叠一侧的分配对象的生存区间连续的生存区间的分配对象之间的连续的生存区间的长度;第二加权装置,对于由第二后续分配对象检测装置检测的未分配的分配对象与各资源元素的组合,将对该分配对象计数的生存区间的长短和各分配对象的优先级作为权重对由第二推断装置推断的推断值进行加权;第二总和装置,对由第二加权装置加权后的各分配对象的推断值按各资源元素进行求和计算;和第二优化资源元素判断装置,判定由第二总和装置对各资源元素求和的总和值为最大的资源元素为最合适于在应分配的分配对象之后进行分配的全部未分配的分配对象的资源元素。
15.权利要求14中所述资源分配设备,其特征是所述第一和第二加权装置,在第一和第二生存区间长度计数装置计数的分配对象间的生存区间长度为0时,将1作为生存区间的长短进行加权,当计数的生存区间长度不是0时,就计算该生存区间长度的倒数,并将计算的此生存区间长的倒数作为生存区间长短进行加权。
16.权利要求15中所述资源分配设备,其特征是包含有成本存贮装置,当存贮多个使用机器语言命令格式表示程序中分配对象的定义命令和使用命令的信息即命令模式、并在机器语言命令中使用各资源的资源元素时,与各命令模式对应地存贮表示程序中的分配对象的定义命令和使用命令的执行周期和/或代码大小的成本,上述第一推断装置包含如下结构,即第一命令模式输出部,读出与由第一后续分配对象检测装置检测的未分配的分配对象的全部定义命令和使用命令对应的命令模式,并输出读出的命令模式;和第一成本总和部,从成本存贮装置中取出与输出的命令模式对应的成本,按每一资源元素对取出的成本进行求和计算,并将求和的总和值作为推断值,所述第二推断装置包含如下结构,即第二命令模式输出部,读出与由第二后续分配对象检测装置检测的未分配的分配对象的全部定义命令和使用命令对应的命令模式,并输出读出的命令模式;和第二成本总和部,从成本存贮装置中取出与输出的命令模式对应的成本,按每一资源元素对取出的成本进行求和计算,并将求和的总和值作为推断值。
17.权利要求16中所述资源分配设备,其特征是命令模式具有表示运算结果的存贮目标为哪一操作数或与任一操作数也不一致的信息,与存贮目标为操作数的命令模式对应的成本小于与非操作数命令模式对应的成本。
18.权利要求16中所述资源分配设备,其特征是命令模式具有表示对应的使用命令是生存区间的结束点或非结束点的信息,与是结束点的命令模式对应的成本小于与非结束点对应的命令模式的成本。
19.权利要求9中所述资源分配设备,其特征是还包含如下结构,即预约分配对象检测装置,根据上述程序检测应分配的资源元素预先确定的分配对象;和预约资源元素存贮装置,存贮应分配给预约分配对象检测装置检测的分配对象的资源元素,分配装置将应分配的资源元素分配给由预约分配对象检测装置检测的分配对象,在分配之后将某个资源元素分配给优先级最大的分配对象。
20.权利要求19中所述资源分配设备,其特征是所述预约分配对象检测装置根据上述程序检测保持调用函数的自变量的分配对象,上述预约资源元素存贮装置存贮应分配给该分配对象的自变量寄存器。
21.权利要求19中所述资源分配设备,其特征是所述预约分配对象检测装置根据上述程序检测保持函数调用的返回值的分配对象,上述预约资源元素存贮装置存贮应分配给该分配对象的返回值寄存器。
22.权利要求19中所述资源分配设备,其特征是所述预约分配对象检测装置根据上述程序检测数值可重置的分配对象,所述预约资源元素存贮装置存贮应分配给该分配对象的破坏寄存器。
23.权利要求9中所述资源分配设备,其特征是还包含如下结构,即生存区间继承关系集合存贮装置,与由生存区间在该分配对象的起始点结束的全部分配对象和生存区间在该分配对象的结束点开始的全部分配对象组成的集合即生存区间继承关系集合对应地存贮程序中的各分配对象,上述已分配—被分配间连续判断装置包含如下结构,即第一判断部,参照关于应分配的分配对象的生存区间继承关系集合,判断在该生存区间继承关系集合中是否存在已分配的分配对象;第二判定部,用于当判定不存在已分配的分配对象时,取出生存区间继承关系集合内的其他分配对象,并参照关于取出的分配对象的生存区间继承关系集合,判断该生存区间继承关系集合中是否存在已分配的分配对象;控制部,用于反复起动第二判定部直至判定存在已分配的分配对象时为止;总和部,用于对作为检测结果的分配对象的生存区间长度进行求和计算;和倒数计算部,计算应分配的分配对象的生存区间长度与由总和部求和的生存区间长度之和的倒数,并将计算结果作为生存区间长短。
24.权利要求23中所述资源分配设备,其特征是分配对象的生存区间利用从该生存区间所占据的程序中由开始点到结束点的命令位置信息表示,所述总和部对此命令位置信息进行求和计算,并将总和值作为生存区间长度。
25.权利要求24中所述资源分配设备,其特征是分配对象的生存区间的开始点和结束点用程序中的命令位置信息表示,所述资源分配设备还包含如下结构,即开始结束点存贮装置,对应地存贮程序中的分配对象、与各分配对象的生存区间的开始点相当的命令位置信息和与各分配对象的生存区间的结束点相当的命令位置信息;第一集合化装置,参照开始结束点存贮装置,查找出与程序中各分配对象的以生存区间的开始点相当的命令位置信息与结束点相当的全部分配对象,并将查找出的分配对象和程序中的分配对象作为同一生存区间继承关系集合;第二集合化装置,参照开始结束点存贮装置,查找出与程序中各分配对象的于生存区间的结束点相当的命令位置信息与开始点相当的全部分配对象,并将查找出的分配对象和程序中的分配对象作为同一生存区间继承关系集合;和写入装置,将程序中的分配对象和由第一及第二集合化装置进行集合化处理后的生存区间继承集合对应地写入生存区间继承关系集合存贮部。
26.权利要求9中所述资源分配设备,其特征是还包含生存区间继承关系集合存贮装置,与由生存区间在分配对象的开始点结束的全部分配对象和生存区间在该分配对象的结束点开始的全部分配对象组成的集合即生存区间继承关系集合对应地存贮程序中的各分配对象;上述未分配—被分配间连续判断装置包含如下结构,即第一判断部,参照关于应分配的分配对象的生存区间继承关系集合,判断该生存区间继承关系集合中是否存在由已分配一侧重分配对象检测装置检测的未分配的分配对象;第二判断部,用于当判定不存在未分配的分配对象时就取出生存区间继承关系集合内的其他的分配对象,并参照关于取出的分配对象的生存区间继承关系集合,判断该生存区间继承关系集合中是否存在由已分配一侧重分配对象检测装置检测的未分配的分配对象;控制部,用于反复起动第二判断部直至判定存在有未分配的分配对象时为止,上述得失值计算装置包含如下结构,即总和部,用于对作为检测结果的分配对象的生存区间长度进行求总和;倒数计算部,计算应分配的分配对象的生存区间长度与由总和部求和的生存区间长度之和的倒数,并将计算结果作为生存区间长短。
27.权利要求26中所述资源分配设备,其特征是分配对象的生存区间利用从该生存区间所占据的程序中开始点到结束点的命令位置信息表示。
28.权利要求27中所述资源分配设备,其特征是分配对象的生存区间的开始点和结束点用程序中的命令位置信息表示。上述资源分配设备还包含如下结构,即开始结束点存贮装置,对应地存贮程序中的分配对象、与各分配对象的生存区间的开始点相当的命令位置信息和与各分配对象的生存区间的结束点相当的命令位置信息;第一集合化装置,参照开始结束点存贮装置查找出与程序中各分配对象的生存区间开始点相当的命令位置信息与结束点相当的全部分配对象,并将查找出的分配对象与程序中的分配对象作为同一生存区间继承关系集合;第二集合化装置,参照开始结束点存贮装置查找出与程序中各分配对象的生存区间结束点相当的命令位置信息与开始点相当的全部分配对象,并将查找出的分配对象与程序中的分配对象作为同一生存区间继承关系集合;写入装置,将程序中的分配对象和由第一及第二集合化装置进行集合化处理后的生存区间继承集合对应地写入生存区间继承关系集合存贮部。
29.权利要求9中所述资源分配设备,其特征是还包含有生存区间继承关系集合存贮装置,用于与由生存区间在该分配对象的开始点结束的全部分配对象和生存区间在该分配对象的结束点开始的全部分配对象构成的集合即生存区间继承关系集合对应地存贮程序中的各分配对象,上述未分配—分配毕间连续判断装置包含如下结构,即第一判断部,参照关于由被分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间继承关系集合,判断该生存区间继承关系集合中是否存在已分配的分配对象;第二判断部,用于当不存在已分配的分配对象时,取出生存区间继承关系集合内的其他的分配对象,并参照关于取出的分配对象的生存区间继承关系集合,判断该生存区间继承关系集合中是否存在有已分配的分配对象;控制部,用于反复起动第二判断部直到判定存在已分配的分配对象时为止,上述得失值计算装置包含如下结构,即总和部,对作为检测结果的分配对象的生存区间长度进行求和计算;倒数计算部,计算应分配的分配对象的生存区间长度与由总和部求和的生存区间长度之和的倒数,并将计算结果作为生存区间长短。
30.权利要求29中所述资源分配设备,其特征是分配对象的生存区间用该生存区间所占据的程序中的开始点到结束点的命令位置信息表示,总和部对命令位置信息数进行求和,并将总和值作为生存区间长度。
31.权利要求30中所述资源分配设备,其特征是分配对象生存区间的开始点和结束点用程序中的命令位置信息表示,上述资源分配设备还包含如下结构,即开始结束点存贮装置,对应地存贮程序中的分配对象、与各分配对象的生存区间的开始点相当的命令位置信息和与各分配对象的生存区间的结束点相当的命令位置信息;第一集合化装置,参照开始结束点存贮装置,查找出与程序中各分配对象的生存区间的开始点相当的命令位置信息与结束点相当的全部分配对象,并将查找出的分配对象与程序中的分配对象作为同一生存区间继承关系集合;第二集合化装置,参照开始结束点存贮装置,查找出与程序中各分配对象的生存区间的结束点相当的命令位置信息与开始点相当的全部分配对象,并将查找出的分配对象与程序中的分配对象作为同一生存区间继承关系集合;和写入装置,将程序中的分配对象和由第一及第二集合化装置进行集合化处理后的生存区间继承集合对应地写入生存区间继承关系集合存贮部。
32.权利要求9中所述资源分配设备,其特征是还包含生存区间继承关系集合存贮装置,对应与由生存区间在该分配对象的开始点结束的全部分配对象和生存区间在该分配对象的结束点开始的全部分配对象构成的集合即生存区间继承关系集合对应地存贮程序中的各分配对象,上述未分配—未分配间连续判断装置包含如下结构,即第一判断部,参照关于由被分配一侧重叠分配对象检测装置检测的未分配的分配对象的生存区间继承关系集合,判断在该生存区间继承关系集合中是否存在由已分配一侧重分配对象检测装置检测的未分配的分配对象;第二判断部,用于当判定不存在未分配的分配对象时,取出生存区间继承关系集合中的其他分配对象,并参照关于取出的分配对象的生存区间继承关系集合,判断该生存区间继承关系集合中是否存在由已分配一侧重分配对象检测装置所检测的未分配的分配对象;控制部,用于反复起动第二判断部直到判定存在未分配的分配对象时为止;总和部,对作为检测结果的分配对象的生存区间长度进行求和计算;和倒数计算部,计算应分配的分配对象的生存区间长度与由总和部求和的生存区间长度之和的倒数,并将计算结果作为生存区间长短。
33.权利要求32中所述资源分配设备,其特征是分配对象的生存区间用该生存区间所占据的程序中的开始点到结束点的命令位置信息表示,总和部对命令位置信息数求和,并将求和值作为生存区间长度。
34.权利要求33中所述资源分配设备,其特征是分配对象的生存区间的开始点和结束点用程序中的命令位置信息表示,上述资源分配设备还包含如下结构,即开始结束点存贮装置,对应地存贮程序中的分配对象、与各分配对象生存区间的开始点相当的命令位置信息和与各分配对象生存区间结束点相当的命令位置信息;第一集合化装置,参照开始结束点存贮装置,查找出与程序中各分配对象的生存区间开始点相当的命令位置信息与结束点相当的全部分配对象,并将查找出的分配对象与程序中的分配对象作为同一的生存区间继承关系集合;第二集合化装置,参照开始结束点存贮装置,查找出与程序中各分配对象的生存区间的结束点相当的命令位置信息与起始点相当的全部分配对象,并将查找出的分配对象与程序中的分配对象作为同一的生存区间继承关系集合;写入装置,将程序中的分配对象与由第一和第二集合化装置进行集合化处理后的生存区间继承集合对应地写入生存区间继承关系集合存贮部。
35.用于将高级语言编写的程序翻译成机器语言程序的编译程序、生成多个以编程语言描述的程序中的变量与生存区间的组合即分配对象并将优先级赋予生成的分配对象后,按优先级顺序将寄存器、存贮器等硬件即资源的资源元素分配给分配对象的资源分配设备,其特征是包含如下结构,即优先级赋予装置,从程序各部分检测程序中的分配对象的使用频度和/或生存区间的嵌套级,并根据检测结果将优先级赋予分配对象;得失值计算装置,根据分配对象中已分配的分配对象的生存区间与随后应分配的分配对象的生存区间在程序中处于什么样的位置关系对各资源元素计算表示哪一资源元素合适于随后应分配的分配对象的得失值;分配装置,根据对各资源元素计算出的得失值的大小将某个资源元素分配给应分配的分配对象;控制装置,用于反复起动得失值计算装置和分配装置直至全部分配对象分配完为止。
36.权利要求35中所述资源分配设备,其特征是还包含如下结构,即推断装置,对应分配的分配对象与各资源元素的组合,通过计算其总和值的推断值,来推断在程序中分配各资源的资源元素时应分配的分配对象已定义的全部定义命令和使用的全部使用命令的执行周期和/或代码大小的总和值达到什么程度;资源元素单复判断装置,将每一资源元素的推断结果即推断值加以比较,判断推断值为最小的资源元素是一个还是多个,所述分配装置,当判定为一个时就将推断值为最小的资源元素分配给应分配的分配对象,当判定为多个时就将得失值为最大的资源元素分配给应分配的分配对象。
37.权利要求36中所述资源分配设备,其特征是所述推断装置包含如下结构,即命令模式输出部,对程序中的该分配对象的全部定义命令和使用命令输出使用机器语言命令的命令格式表示程序中的分配对象的定义命令和使用命令的信息即命令模式;成本存贮部,与由命令模式输出部输出得的命令模式对应地分别存贮表示当在机器语言命令的各操作数中使用各资源的资源元素时的该定义命令和使用命令的执行周期和/或代码大小的成本;成本总和部,取出与由成本存贮部输出的命令模式对应的成本,对取出的成本按每一资源元素进行求和计算,并将求和的总和值作为推断值。
38.用于将高级语言编写的程序翻译成机器语言程序的编译程序,将寄存器、存贮器等硬件即资源的资源元素分配给用编程语言描述的程序中的变量与生存区间的组合即分配对象的资源分配设备,其特征是包含如下结构,即分配对象保持装置,与优先级对应地保持程序中的分配对象;第一资源元素分配装置,从上述分配对象保持装置中取出优先级最高的分配对象,并将某个资源元素分配给优先级最高的分配对象。分配对象取出装置,从上述分配对象保持装置中取出相对于此前分配的分配对象的优先级具有下一级的优先级的分配对象;一次重叠分配对象检测装置,检测生存区间与所述分配对象取出装置取出的分配对象重叠的分配对象;资源元素检测装置,检测已分配给上述一次重叠分配对象检测装置检测的分配对象的资源元素;分配对象—资源元素检测装置,检测已分配了与检测的资源元素不同的资源元素的全部分配对象;增益侧连续已分配分配对象判定装置,判断由分配对象—资源元素检测装置检测的已分配的分配对象中生存区间与由分配对象取出装置取出的分配对象连续的全部分配对象;第一得失值计算装置,根据从判断为连续的已分配的分配对象到由分配对象取出装置取出的分配对象的生存区间的长短,对分配给判定生存区间连续的分配对象的所有资源元素,计算表示已分配给分配对象的资源元素对现在要分配的分配对象适合到何种程度的值即得失值;累计装置,对由分配对象—资源元素检测装置判定的各资源元素累计计算的得失值;第二资源分配装置,将由累计装置累计的累计值为最大的资源元素分配给由分配对象取出装置取出的分配对象;控制装置,反复起动所述分配对象取出装置直至全部分配对象分配完为止。
39.权利要求38中所述资源分配设备,其特征是还包含如下结构,即第一非重叠非连续已分配分配对象判定装置,判断由分配对象—资源元素检测装置检测的已分配的分配对象中生存区间与分配对象取出装置取出的分配对象不连续并且生存区间不重叠的分配对象;增益一侧连续未分配分配对象检测装置,检测生存区间与由第一非重叠非连续分配毕分配对象判定装置判定的已分配的分配对象的生存区间重叠的未分配的分配对象,并且生存区间与由分配对象取出装置取出的分配对象连续的分配对象;第二得失值计算装置,根据从由增益一侧连续未分配分配对象检测装置检测的未分配的分配对象到分配对象取出装置取出的分配对象的生存区间的长短,计算分配给由第一非重叠非连续已分配分配对象判定装置判定的已分配的分配对象的资源元素的得失值;第一减法装置,从上述累计装置累计的该资源元素的得失值中减去由第二得失值计算装置计算出的得失值,上述第二分配装置将由第一减法装置减掉得失值后的得失值为最大的资源元素分配给分配对象取出装置取出的分配对象。
40.权利要求39中所述资源分配设备,其特征是还包含如下结构,即重叠一侧连续已分配分配对象判定装置,判断由分配对象—资源元素检测装置检测的已分配的分配对象中,生存区间与由一次重叠分配对象检测装置检测的分配对象连续的分配对象;第三得失值计算装置,根据从由重叠一侧连续已分配分配对象判定装置判定的已分配的分配对象到由一次重叠分配对象检测装置检测的分配对象的生存区间的长短,计算分配给由重叠一侧连续已分配的分配对象判定装置判定的已分配的分配对象的资源元素的得失值;第二减法装置,从由上述累计装置累计的该资源元素的累计值中减去由第三得失值计算装置计算的得失值,上述第二分配装置将由第二减法装置减去得失值后的累计值为最大的资源元素分配给分配对象取出装置取出的分配对象。
41.权利要求40中所述资源分配设备,其特征是还包含如下结构,即第二非重叠非连续已分配的分配对象判定装置,判断由分配对象—资源元素检测装置检测的已分配的分配对象中,生存区间与由一次重叠分配对象检测装置检测的分配对象不连续并且生存区间不重叠的分配对象;重叠一侧连续未分配分配对象判定装置,判定生存区间与由第二非重叠非连续已分配的分配对象判定装置判定的已分配的分配对象的生存区间重叠的未分配的分配对象并且生存区间与由一次重叠分配对象检测装置检测的分配对象连续的分配对象;第四得失值计算装置,根据从由重叠一侧连续未分配分配对象判定装置判定的分配对象到由一次重叠分配对象检测装置所检测的分配对象的生存区间的长短,计算分配给由第二非重叠非连续已分配的分配对象判定装置判定的已分配的分配对象的资源元素的得失值;加法装置,将由上述累计装置累计的关于该资源元素的累计值与由第四得失值计算装置计算的得失值进行加法运算;上述第二分配装置将由第二加法装置将得失值加进后的累计值为最大的资源元素分配给由分配对象取出装置取出的分配对象。
全文摘要
资源分配设备生成变量和该变量的生存区间的组合即分配对象,对每一分配对象分别求生存区间重叠的分配对象和存在资源继承关系的分配对象,并计算分配的优先级。然后,分配资源元素确定部从优先级高的分配对象起对各分配对象分配可分配的资源元素时,计算在程序中分配对象的使用场所所花费的成本和具有资源继承关系的分配对象将目标代码中传输命令的减少程度定量化的增益值,将使用成本最少并且增益值最大的资源元素分配给分配对象。
文档编号G06F9/45GK1138173SQ96101898
公开日1996年12月18日 申请日期1996年3月13日 优先权日1995年3月16日
发明者田中旭, 佐山旬子, 汤川博司, 小谷谦介 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1