JP3638171B2 - 資源割付装置 - Google Patents

資源割付装置 Download PDF

Info

Publication number
JP3638171B2
JP3638171B2 JP05944696A JP5944696A JP3638171B2 JP 3638171 B2 JP3638171 B2 JP 3638171B2 JP 05944696 A JP05944696 A JP 05944696A JP 5944696 A JP5944696 A JP 5944696A JP 3638171 B2 JP3638171 B2 JP 3638171B2
Authority
JP
Japan
Prior art keywords
allocation
target
resource
allocation target
allocated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP05944696A
Other languages
English (en)
Other versions
JPH08314727A (ja
Inventor
旭 田中
旬子 佐山
博司 湯川
謙介 小谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP05944696A priority Critical patent/JP3638171B2/ja
Publication of JPH08314727A publication Critical patent/JPH08314727A/ja
Application granted granted Critical
Publication of JP3638171B2 publication Critical patent/JP3638171B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、高級言語で書かれたソースプログラムを機械語プログラムに翻訳するコンパイラにおいてプログラム中の変数をレジスタ、メモリ等の資源へ割り付ける資源割付装置に関する。
【0002】
【従来の技術】
近年、組み込み用途向けのマイクロプロセッサを用いて多種多様なニーズに応えるようにした情報機器が盛んに開発されている。このような情報機器の開発においてはソフトウェアの面でも、処理の高速化やハードウェアコストの縮減(メモリサイズの縮小)の徹底が求められる。そのため上記の情報機器の開発では冗長な転送命令を徹底して除去し、アドレッシングモード等、マイクロプロセッサが有する機能を最大限まで引き出すべく、アセンブリ言語でソフトウェアの開発が行われてきた。ところが、アセンブリ言語の文法はプロセッサの命令体系そのものであるから至って開発効率が低く、ソースファイルの移植性に問題がある。そのため組み込み用途向けのマイクロプロセッサのソフトウェアを高級プログラミング言語で作成することで開発効率を高めることが近年注目を集めている。
【0003】
高級プログラミング言語を用いれば、プログラマはプログラム中の数値の保持、演算、転送等の処理を変数を被演算子とした演算で表現できる。この変数はプログラマによって任意に定義され、また必要な個数だけ用いられるため、プログラマは自由にプログラムを記述できる。また記述されたプログラム(ソースプログラムと称す。)はコンパイルされることよりコンピュータが理解可能な機械語プログラムとなる。当該機械語プログラム中の演算は機械語命令によって表現され、また当該機械語命令はレジスタあるいはメモリを被演算子とするので、上記変数にはレジスタあるいはメモリを割り付ける必要がある。この割り付け処理は資源割付処理と称される。この資源割付処理はマイクロプロセッサの能力を最大限まで引き出すようなソフトウェアの開発においては特に重要視される。
【0004】
従来の資源割付装置に付いて述べる前に以下の説明で使用する用語について説明しておく。
・変数の定義、参照、使用
変数の値を設定することを「定義する」と呼び、設定した値を使用することを「参照する」と呼ぶ。またプログラム上で変数を定義したり、参照したりすることを変数を「使用する」と呼ぶことにする。
・中間命令
処理をし易すくするためにコンパイラがソースプログラムのコードを中間的なコードに変換したものを中間コードと呼び、中間コードの1ステップを中間命令と呼ぶことにする。中間命令には4つ組や3つ組などが存在し、これらが変換されて最終的なオブジェクトコードが生成される。またソースプログラムを中間命令の列に変換したものを中間プログラムと呼ぶことにする。
・生存区間
生存区間とは広義にはそれぞれの変数に保持されている値が有効となる区間であり、狭義には変数に値を定義する中間命令からその定義された値を最後に参照する中間命令までのプログラム上の区間のことであり、生存区間はこの区間に含まれる中間命令の集合で表される。ここで変数に値を定義する中間命令は生存区間の開始点に相当し、生存区間中で定義された値を参照している中間命令のうち、最後に参照する中間命令は生存区間の終了点に相当する。また生存区間の重複、非重複を中間命令の集合積で判定するため、生存区間の終始が一致する中間命令では生存区間は重ならないとする。
【0005】
中間プログラムの例(これは図30(a)に示すソースプログラムを変換したものである。)と、その生存区間との対応の一例を図28に示す。図28において生存区間は縦線s1、s2、s3で表されている。生存区間の開始点、及び終了点は点p1、p2、p3、p4・・・で表現している。図30(a)において変数c及びdの開始点は2箇所存在しているが、これは変数c、dが、判断文if(b>=10){処理p1}else{処理p2}の処理p1、p2において定義されているからである。
・割付対象
資源の割付対象としては単に変数をとる場合もあるが、一つの変数に対して複数の生存区間が存在する場合はそれぞれの生存区間ごとに別々の資源要素に割り付けることができるので、本明細書では割付対象は変数と生存区間の組とし、割付対象は変数と生存区間とを保持するものとする。ここで図28の変数bのように生存区間が複数ある場合は、互いに区別するために割付対象b1、b2として独立した割付対象として表現する。
【0006】
また割付対象が保持する変数を「定義する」こと、「参照する」こと、「使用する」ことをそれぞれ、その変数を保持する割付対象を「定義する」「参照する」「使用する」とも呼ぶことにする。更に割付対象が定義される中間命令、及び参照される中間命令をそれぞれ、その割付対象の定義中間命令、参照中間命令と呼び、定義及び参照中間命令を併せて使用中間命令と呼ぶ。
・割付優先度
割り付けを行う際、割付対象の割り付けの順番を決めるためのパラメータである。
【0007】
割付優先度の計算には様々な方法が存在する。例えば、プログラム中の割付対象の使用率を割付優先度としたときの計算式の例を以下の{数式1}に示す。
Figure 0003638171
尚、割付対象が使用される中間命令が、プログラム中のループ処理の中に存在するときは割付優先度にそのループレベルを算入してもよい。
【0008】
例えば、
割付優先度=使用率=使用中間命令が存在するループレベルの総和/生存区間の長さ
・資源要素
コンピュータのハードウェアの要素のうち、割付対象に割り付け可能な最小単位である。値を一時的に保持するバッファや個々のレジスタ、メモリ内の番地単位のメモリ要素がその例である。0番目のレジスタ、1番目のレジスタ、100番地のメモリ、101番地のメモリはそれぞれ別の資源要素である。
・資源
同じ機能を果たす資源要素の集合を示す。
【0009】
例えば、資源にはレジスタとメモリとが存在する。更にレジスタはアドレスレジスタ(AR)、データレジスタ(DR)、大域的レジスタ、局所的レジスタというように同一機能を果たすもので分類できる。またメモリは高速メモリ、低速メモリというように同一機能を果たすもので分類できる。このように資源要素が同一機能を果たすもの同士で分類できれば、その分類毎が別々の資源になる。
・干渉グラフ
割付対象と、割付対象同士の生存区間の重なりとを図示するためのグラフである。
【0010】
干渉グラフとは割付対象をグラフの頂点とし、生存区間が重なる割付対象(頂点)同士を互いに結んで辺として描かれる。
・頂点の次数
干渉グラフにおいて頂点に結合している辺の数である。
次に図29にコンパイラの構成図を示す。コンパイラは構文解析装置11と、最適化装置12と、資源割付装置63と、コード生成装置14とで構成されている。このコンパイラの各構成について図29の構成図、図28、図30(a)、図30(b)、図30(c)の説明図を用いて説明する。
【0011】
構文解析装置11は記憶装置(図外)にファイルとして記憶されているソースプログラムの字句解析、構文解析および意味解析を行い、ソースプログラムを中間プログラムに変換する。例えば、図30(a)のソースプログラムは図28の中間プログラムに変換される。
最適化装置12は最終的に生成される機械語プログラムのプログラムサイズ及び処理実行時間を向上させる目的で中間プログラムの最適化を行う。この最適化の詳細については本発明の主眼ではないため説明を省略し、資源割付処理と特に関連がある点のみ説明する。最適化作業には基本ブロック化、制御フロー解析、データフロー解析という作業が含まれている。基本ブロック化とは処理対象のプログラムを基本ブロックに分割することである。
【0012】
この分割処理を簡単に説明する。先ず最適化装置12は中間プログラムの最初の中間命令、無条件あるいは条件飛び越しの行き先の中間命令、無条件あるいは条件飛び越しの直後の中間命令を検出し、検出したこれらをリーダーとみなす。更に最適化装置12はリーダーから始まり、次のリーダーの一つ手前まであるいはプログラムの最後までの一連の中間命令を抽出する。この抽出処理によって得られた命令列は基本ブロックと称され、以降の処理単位となる。
【0013】
制御フロー解析とは各基本ブロック間の制御の流れを解析することである。
データフロー解析とは各基本ブロック中、それぞれの変数がどこで定義され、どこで参照されているかについて解析することである。これらの解析結果を参照して変数の生存区間の情報が得られる。
資源割付装置63は資源割り付けのためのアルゴリズムの一つであるグラフ縮退によるグラフ彩色法を用いて中間プログラム中の割付対象にレジスタ、メモリを割り付ける。グラフ縮退によるグラフ彩色法とは、干渉グラフの各頂点の色分けをする場合に辺で結ばれていれば異なる色を塗るという規則に従って、近似的に最も少ない色数で干渉グラフの各頂点の色分けを行うアルゴリズムである。図30(a)のプログラム中の割付対象は資源割付処理によって図30(b)のように資源要素が割り付けられる。本図において図30(a)に示した割付対象aには資源要素R0を割り付けたことを示し、割付対象b2には資源要素R2を割り付けたことを示す。
【0014】
コード生成装置14は図30(c)に示すように中間プログラム内の各中間命令の機械語命令化を行い、中間プログラムをターゲットマシンが解読可能な機械語プログラムに変換する。このようにコード生成装置14によって変換された機械語プログラムを目的プログラムと呼ぶ。本目的プログラム中の機械語命令と、図30(a)、図28のソースプログラム及び中間プログラムとの対応は▲1▼▲2▼▲3▼▲4▼記号で表される。上記機械語命令化において各機械語命令のオペランドには図30(b)に示した資源割付結果のものを用いる。また図中の転送命令t11、t12、t13、t14、t15・・・は図28の中間プログラム中の各中間命令の処理が、機械語命令によって実現されるようにするためコード生成装置14によって生成されたものである。また資源割付の結果によってはこの転送命令の幾つかが不用になることも有り得る。図30(c)において▲7▼は割付対象b2と、cとが同一レジスタに割り付けられたため、転送命令生成が不用になった例である。
【0015】
次に資源割付装置63について説明を行う。上記グラフ彩色法を用いた資源割付処理の詳細は以下に示す文献に記されている。
従来の資源割付け方式、特にレジスタの割付け方式としては
[1]A.V.Aho, R.Sethi, J.D.Ullman: "Compilers Principles, Techniques, and Tools", Addison-Wesley, 1986
[2]Chaitin.. :"Register allocation and spilling via graph coloring",United States Patent, pat.num. 4.571.678, Feb.18, 1986
[3]Frederick Chow, John Hennessy:"Register Allcation by Priority-based Coloring",Computer Systems Laboratory,Stanford University
[4]David Bernstein,..,Ron Y.Pinter:"Spill code minimization techniquesof optimizing compilers",SIGPLAN 1989, IBM Israel Science and Technology Technion City Haifa, Israel
[5]佐々 政孝 :"プログラミング言語処理系", 岩波書店 レジスタ割付け p420〜p423
[6]森、他 :"複合バンク機構を考慮した系統的なレジスタ割当て方式と
その一般化", 情報処理学会, Vol.30, No6, Jun, 1989がある。
【0016】
上記資源割付装置63の構成を図31に示す。図31に示すように資源割付装置63は最適化装置12の処理結果に応じて割付対象を生成する割付対象生成部71と、割付対象生成部71によって生成された割付対象を保持する割付対象保持部72と、当該保持部に保持されている各割付対象の優先度を上記{数式1}に示した計算式を用いて計算し、記憶する優先度計算部73と、図28に示したような各割付対象の生存区間についての情報及び当該生存区間がどう重なっているかの情報を記憶する生存区間情報記憶部74と、保持部に保持されている全割付対象を干渉グラフ状に展開する展開部75と、展開部が展開を行うためのバッファ76と、一旦展開部によって展開された割付対象を全て積み込むためのスタック77と、上記グラフ縮退によるグラフ彩色法で資源割付を行う制御部80と、資源割付の結果を図30(b)の形式で記憶する記憶部78とを備える。
【0017】
図32(a)、図32(b)、及び図33(a)〜図33(i)はグラフ縮退によるグラフ彩色法を説明するための説明図である。これらの説明図を用いて上記資源割付装置63の処理内容を説明する。ここでは割り付け可能なレジスタの個数を3個とし、レジスタに割り付けられなかったものはメモリに割り付けるものとする。
【0018】
上記展開部75は図28に示した割付対象及び当該割付対象間の生存区間の重なりを図32(a)に示すような干渉グラフで表現する。このような干渉グラフにおいて各割付対象がどれだけの割付対象と生存区間の重なりがあるかは、頂点から出ている辺の数(次数)で表現される。また図32(b)に示したように割付対象のうち、生存区間の終了点及び開始点が1中間命令で一致しているもの同士は(図28の割付対象b2、c)、1つの割付対象と見なせ得るため、図32(b)に示すように制御部80はそれぞれが対応している頂点を結合し、干渉グラフの簡易化を図る(図32(b)、割付対象b2c)。このような簡易化の後、干渉グラフの頂点には高低が発生している。頂点の次数が、レジスタの数が3個未満の頂点は次数の低い頂点と称され、次数がレジスタの数以上の頂点は次数の高い頂点と称される。この次数の高低はグラフ縮退の成立条件として利用される。グラフ縮退とは図33(a)の矢線y11、y12に指示するように次数が低い頂点を{数式1}で求めた優先度の低い順に削除してゆき、削除された頂点に割付対象を後積み先出し方式のスタック領域に積み込むことであり、e2及びdを削除した結果、図33(a)に示した干渉グラフは図33(b)に示すものへと変遷する。
【0019】
この図33(b)の状態では全頂点の次数が高いため、上記条件が成立しない。そこでこれらの頂点のうち、矢線y13に示すように最低優先度の割付対象b1にメモリを割り付け頂点b1を削除する。この頂点b1の削除により干渉グラフは図33(c)のものへと変遷し、再び、上記成立条件が成立する。図33(c)の状態で再び、グラフ縮退を繰り返し、図33(d)に示すように全割付対象をスタックに積み込む。このような積み込み処理を終えたのちに、これから資源割付処理を行う。先ず、図33(e)に示すようにスタックのトップから割付対象aを取り出し、割付対象aにレジスタR0を割り付け、同様にスタックのトップから割付対象e1、b2cを取り出し、図33(f)、図33(g)に示すように割付対象e1、b2cにレジスタR1、R2を割り付ける。次順の割付対象e2、dはb2cとは生存区間が重なるが、割付対象a、e1とは生存区間が重ならないため、図33(h)に示すように割付可能なレジスタのうち、最も番号の若いレジスタR0を割付対象e2に割り付け、同じく、図33(i)に示すようにレジスタR1を割付対象dに割り付ける。このような割付処理によって生存区間が重なり合う割付対象同士に異なるレジスタを割り付けることができる。
【0020】
上記の割付対象a、b2、c、d、e1、e2、b1は資源割付処理によって何れかの資源要素を割り付けていたが、C言語等の高級言語においては割付対象との組み合わせが予め設定されているレジスタがある。それは関数呼び出し作業の効率化を図るために用いられるものであり、引数レジスタ、戻り値レジスタ、破壊レジスタと称される。
【0021】
引数レジスタとは関数呼び出し時に引数をレジスタで引き渡すためのレジスタである。中間プログラムにおいて引数として使用されている割付対象はこの引数レジスタが割り付けられる。
戻り値レジスタとは関数呼び出しの戻り値を返すためのレジスタである。中間プログラムにおいて戻り値を返すために使用されている割付対象は、この戻り値レジスタが割り付けられる。
【0022】
破壊レジスタとは関数呼び出しの開始と終了時に格納値を退避・復元する必要のないレジスタである。この破壊レジスタは関数呼び出しのオーバーヘッド軽減を目的としている。上記関数呼び出しを行う場合、呼び出される関数内での処理によって各レジスタの内容は書き換えられる可能性があり関数呼び出しの前後においてレジスタ内容の退避・復元を行う必要がある。但し、全レジスタについてこの退避・復元作業を行うことは関数呼び出しのオーバヘッドを増大させることになるから、レジスタ内容の退避・復元作業が必要でない破壊レジスタを予め設定し、割付対象のうち、関数呼び出し命令を生存区間に含まないものに破壊レジスタを割り付け、退避・復元作業を最低限のものにする。
【0023】
【発明が解決しようとする課題】
しかしながら上記従来技術における資源割付装置によれば、目的プログラムの実行時間、メモリサイズを増加させるような資源割付を行い得るという問題点があった。この問題点を図34を参照しながら説明を行う。本図に示されている縦線は割付対象の生存区間を表し、そのうち、白抜きのものは未割り付けの割付対象、黒で塗り潰されているものは割付済みの割付対象を示す。一方、本図において割付対象x0,x1,x5を表す縦線は割付対象z0,z1,z2を表す縦線と並行部分を有するのでこれらは互いに生存区間が重なっていることが判る。
【0024】
また図34に示すように生存区間が連続し合う割付対象同士(割付対象x0、x1、x2、x3、x4、x5)は、上記の頂点結合によって1つの割付対象yへと結合される。結合された割付対象yは既に資源要素R0が割り付けられている割付対象z0、資源要素R1が割り付けられている割付対象z1、資源要素R2が割り付けられている割付対象z2と生存区間が重なってしまう。このように割付済みの割付対象と生存区間と重なれば、当該割付済みの割付対象に割り付けられている資源要素(資源要素R0、R1、R2)を割付対象yに割り付けることはできない。そのため割付対象yを構成する割付対象x0、x1、x2、x3、x4、x5は全てメモリを割り付けてしまうことになる。これらの割付対象を全てメモリに割り付ければ、これらの割付対象を被演算子として使用している中間命令は全てメモリを被演算子とする機械語命令へと変換される。被演算子がメモリの機械語命令は概して実行速度が遅く、またメモリサイズが大きくなり、目的プログラムの実行時間、メモリサイズに悪影響を及ぼしてしまう。
【0025】
また資源が3種類以上の機能に別れている場合に資源の機能に応じた割付対象の割り付けを行わないと、目的プログラムの実行時間、メモリサイズに悪影響を及ぼしてしまうという問題点があった。
上記文献のうち、[6]に記載されているものはアドレスレジスタ、データレジスタといったクラスが異なる複数種のレジスタへのアクセスに必要なコストを参照する資源割り付けについて述べている。この文献では、「C言語でのポインタ型のようなアドレス型の変数を保持する割付対象は全てアドレスレジスタに割り付ける。」というようなルールづけを行っている。但しアドレス型の割付対象には加算や減算で複数回使用され、メモリの間接参照が僅かな割付対象も存在し得る。データレジスタに関して高速な加算、減算演算を有するターゲットマシンにおいてはこのような割付対象を一律にアドレスレジスタに割り付けてしまえば、目的プログラム中にはアドレスレジスタからデータレジスタへの転送命令が多数生成され、目的プログラムのメモリサイズや実行時間を増大させる結果となる。
【0026】
このように単にあるクラスのレジスタへのアクセスに必要なコストを参照するだけではかえって多くの転送命令を生成する結果を招いてしまう。
更に関数呼び出しを効率良く行うために設定される引数レジスタ、戻り値レジスタ、破壊レジスタの格納値をそのまま利用できるような資源割付が行えないという問題点があった。
【0027】
グラフ彩色法とは干渉グラフの頂点塗り分けを最適に行うための近似アルゴリズムである。引数レジスタ、戻り値レジスタ、破壊レジスタはアルゴリズム実行前に予め割付対象に割り付けられた資源要素であるため、干渉グラフにおいてこれらのレジスタは色付きの頂点とみなされる。戻り値レジスタ、引数レジスタの格納値をそのまま利用出来るような資源割付を実現するためには、色付きの頂点を干渉グラフ内に組み込み、有効であればその色に他の頂点を彩色するという処理が必要となるが、これはグラフ彩色法の域を逸脱してしまう。以上の理由から通常はグラフ彩色法で割り付けるレジスタとは別個に引数レジスタ、戻り値レジスタに用いるためのレジスタを用意する必要がある。そして引数レジスタ、戻り値レジスタの格納値を使用するため、割り付け用レジスタへの転送命令が必要となる。このように転送命令が必要となるとその命令の追加分だけ、目的プログラムのメモリサイズ及び実行時間が増大する。
【0028】
以上の問題点による影響はレジスタの個数にかなり余裕がある場合無視できるレベルに留まる。しかし多くの組み込み用途向けのマイクロプロセッサのようにレジスタの個数が制限されている場合、あるいは果たす機能が異なるレジスタが少数でかつ多種類備えられている場合にはこれらの問題点は顕著に現れる。
本発明の目的は優先度順に割付対象に資源要素を割り付けることができ、転送命令の生成量を最低限に留めることにより目的プログラムのメモリサイズ及び実行時間を最低限にすることができる資源割付装置を提供することである。
【0029】
【課題を解決するための手段】
本発明は、資源要素に既に割り付けられた割付対象の生存区間と割り付けるべき割付対象の生存区間の位置関係に基づいて、資源要素を割付対象に割り付けるようにしている。
【0030】
【発明の実施の形態】
上記目的を達成するために請求項1記載の資源割付装置は、
高級言語で書かれたプログラムを機械語プログラムに翻訳するコンパイラに用いられ、プログラミング言語で記述されたプログラムの中の変数と生存区間の組である割付対象を複数個生成し、生成した割付対象にレジスタ、メモリ等のハードウェアである資源が有する資源要素を割り付ける資源割付装置であって、次に割り付けるべき割付対象にどの資源要素が適切かを示す得失値を、資源要素に既に割り付けられた割付対象の生存区間と割り付けるべき割付対象の生存区間とがプログラムにおいてどのような位置関係にあるかに基づいて、各資源要素について算出する得失値算出手段と、各資源要素について算出された得失値の大きさに基づいて、何れかの資源要素を、割り付けるべき割付対象に割り付ける割付手段と、全ての割付対象が割り付けられるまで、得失値算出手段及び割付手段の起動を繰り返す制御手段とを備えることを特徴としており、
次に割り付けるべき割付対象にどの資源要素が適切かを示す得失値が、資源要素に既に割り付けられた割付対象の生存区間と割り付けるべき割付対象の生存区間とがプログラムにおいてどのような位置関係にあるかに基づいて、得失値算出手段によって各資源要素について算出される。各資源要素について算出された得失値の大きさに基づいて、割付手段によって何れかの資源要素が、割り付けるべき割付対象に割り付けられる。全ての割付対象が割り付けられるまで、制御手段によって得失値算出手段及び割付手段の起動が繰り返される。以上の繰り返しによって、割り付けるべき割付対象には、既に割り付けられた資源要素のうち、得失値が大きいものが割り付けられる。この得失値には、プログラムにおける生存区間の位置関係が反映されているので、この位置関係に準拠した資源要素が、各割付対象に割り付けられる。
【0031】
また、請求項2において、資源割付装置は、プログラム中の各割付対象の位置関係を判定する位置関係判定手段を有し、位置関係判定手段は、既に資源要素が割り付けられた割付対象の生存区間が、割り付けるべき割付対象の生存区間と重複しているかを判定する重複関係判定手段と、資源要素が既に割り付けられた割付対象の生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定する割付済み−被割付間連続判定手段とを備え、得失値算出手段は、割付済み−被割付間連続判定手段によって割り付けるべき割付対象と生存区間が連続していることが判定されると、資源要素が既に割り付けられた割付対象から割り付けるべき割付対象までの生存区間長の短さに応じて、連続が判定された割付済みの割付対象に既に割り付けられている資源要素の得失値を増加させる第1の増加部を備え、割付手段は、重複関係判定手段によって生存区間が重複していることが判定された重複している生存区間を有する割付済みの割付対象に割り付けられている資源要素を割り付けるべき割付対象に割り付けず、生存区間が重複していないことが判定された割付済みの割付対象のうち、得失値が最大の資源要素を割り付けるべき割付対象に割り付けることを特徴としたものであり、
既に資源要素が割り付けられた割付対象の生存区間が、割り付けるべき割付対象の生存区間と重複しているかが重複関係判定手段によって判定される。また資源要素が既に割り付けられた割付対象の生存区間と、割り付けるべき割付対象の生存区間とが連続しているかが割付済み−被割付間連続判定手段によって判定される。割付済み−被割付間連続判定手段によって割り付けるべき割付対象と生存区間が連続していることが判定されると、資源要素が既に割り付けられた割付対象から割り付けるべき割付対象までの生存区間長の短さに応じて、連続が判定された割付済みの割付対象に既に割り付けられている資源要素の得失値が第1の増加部によって増加される。このように、生存区間が連続し合うような位置関係にあっては、生存区間長の短さに応じて得失値が増加されるため、生存区間が連続し合う割付済みの割付対象に割り付けられている資源要素はより割り付けられる確率が高くなる。
【0032】
重複関係判定手段によって生存区間が重複していることが判定されると、重複している生存区間を有する割付済みの割付対象に割り付けられている資源要素が割り付けるべき割付対象に割り付けられないため、生存区間が重複し合う割付対象に、同一の資源要素が割り付けられることが避けられる。また、生存区間が連続し合う割付対象群のうち、生存区間の重なりによって、不具合が生じる割付対象には、異なる資源要素が割り付けられる。
【0033】
また、請求項3において、位置関係判定手段は、資源要素が既に割り付けられた割付対象と重なる生存区間を有する未割り付けの割付対象を検出する第1の割付済み側重なり割付対象検出手段と、検出された未割り付けの割付対象の生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定する未割り付け−被割付間連続判定手段とを備え、得失値算出手段は、連続すると判定されると、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象から、割り付けるべき割付対象までの生存区間長の短さに応じて、当該割付済みの割付対象に割り付けられている資源要素の得失値を減少させる第1の減少部を備えることを特徴としており、
請求項3によれば、資源要素が既に割り付けられた割付対象と重なる生存区間を有する未割り付けの割付対象が、第1の割付済み側重なり割付対象検出手段によって検出される。検出された未割り付けの割付対象の生存区間と、割り付けるべき割付対象の生存区間とが連続しているかが未割り付け−被割付間連続判定手段によって判定される。連続することが判定されると、第1の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象から、割り付けるべき割付対象までの生存区間長の短さに応じて、第1の減少部によって、当該割付済みの割付対象に割り付けられている資源要素の得失値が減少される。このように、得失値が減少されることによって、割り付けるべき割付対象からみて損失となるような位置の割付対象に割り付けられている資源要素は低く見積もられるようになる。このように低く見積もられた資源要素は、得失値が低いものとなるため、割り付けられる可能性が低くなるという作用を有する。
【0034】
また、請求項4において、第1の割付済み側重なり割付対象検出手段によって、複数個の未割り付けの割付対象が判定された場合、未割り付け−被割付間連続判定手段は、検出された複数個の未割り付けの割付対象のうち、何れかのものの生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定することを特徴としており、また、請求項4によれば、第1の割付済み側重なり割付対象検出手段によって、複数個の未割り付けの割付対象が判定された場合、検出された複数個の未割り付けの割付対象のうち、何れかのものの生存区間と、割り付けるべき割付対象の生存区間とが連続しているかが未割り付け−被割付間連続判定手段によって判定されると、いう作用を有する。
【0035】
また、請求項5において、資源割付装置は、プログラムにおける割付対象の使用頻度及び/又は生存区間のネストレベルが反映された割付対象の優先度を、各割付対象に対応づけて記憶する優先度記憶手段を備え、得失値算出手段及び割付手段は、優先度記憶手段が記憶する優先度順に、割り付けるべき割付対象を決定することを特徴としており、請求項5によれば、割り付けるべき割付対象は、得失値算出手段及び割付手段によって優先度記憶手段が記憶する優先度順に決定される。この優先度には、プログラムにおける割付対象の使用頻度及び/又は生存区間のネストレベルが反映されているため、割付対象は、使用頻度又はネストレベルが高い順に資源要素が割り付けられてゆくという作用を有する。
【0036】
また、請求項6において、位置関係判定手段は、各資源要素について得失値算出手段によって算出された得失値が複数個の資源要素同士で同一の大きさになった場合、割り付けるべき割付対象の生存区間と重なる生存区間を有する未割り付けの割付対象を検出する被割付側重なり割付対象検出手段と、検出された割付対象の生存区間と、資源要素が既に割り付けられた割付対象の生存区間とが連続しているかを判定する未割り付け−割付済み間連続判定手段とを備え、得失値算出手段は、被割付側重なり割付対象検出手段によって検出された割付対象の優先度を検出する優先度検出部と、割付済みの割付対象から検出された未割り付けの割付対象までの生存区間長の短さを算出する第1の短さ算出部と、検出された優先度に算出された短さを乗じ、その乗算結果に応じて、当該割付済みの資源要素の得失値を減少させる第2の減少部とを備えることを特徴としており、
請求項6によれば、割り付けるべき割付対象の生存区間と重なる生存区間を有する未割り付けの割付対象が、被割付側重なり割付対象検出手段によって検出される。検出された割付対象の生存区間と資源要素が既に割り付けられた割付対象の生存区間とが連続しているかが未割り付け−割付済み間連続判定手段によって判定される。被割付側重なり割付対象検出手段によって検出された割付対象の優先度が優先度検出部によって検出され、割付済みの割付対象から検出された未割り付けの割付対象までの生存区間長の短さが第1の短さ算出部によって算出される。検出された優先度に算出された短さを乗じ、その乗算結果に応じて、当該割付済みの資源要素の得失値が第2の減少部によって減少される。このように、得失値が減少されることによって、割り付けるべき割付対象からみて損失となるような位置の割付対象に割り付けられている資源要素は低く見積もられるようになる。このように低く見積もられた資源要素は、得失値が低いものとなるため、割り付けられる可能性が低くなるという作用を有する。
【0037】
また、請求項7において、位置関係判定手段は、資源要素が既に割り付けられた割付対象の生存区間と重なる生存区間を有する未割り付けの割付対象を検出する第2の割付済み側重なり割付対象検出手段と、被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象の生存区間と、第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象の生存区間とが連続しているかを判定する未割り付け−未割り付け間連続判定手段とを備え、得失値算出手段は、被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象から、第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象までの生存区間長の短さを算出する第2の短さ算出部と、検出された優先度に算出された短さを乗じ、その乗算結果に応じて、割付済みの割付対象に割り付けられた資源要素の得失値を増加させる第2の増加部とを備えることを特徴としており、請求項7によれば、資源要素が既に割り付けられた割付対象の生存区間と重なる生存区間を有する未割り付けの割付対象が第2の割付済み側重なり割付対象検出手段によって検出される。被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象の生存区間と、第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象の生存区間とが連続しているかが未割り付け−未割り付け間連続判定手段によって判定される。被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象から、第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象までの生存区間長の短さが第2の短さ算出部によって算出される。検出された優先度に算出された短さを乗じ、その乗算結果に応じて、割付済みの割付対象に割り付けられた資源要素の得失値が第2の増加部によって増加される。得失値が増加されることによって、割り付けるべき割付対象からみて利得となるような位置の割付対象に割り付けられている資源要素は高く見積もられるようになる。このように高く見積もられた資源要素は、得失値が高いものとなるため、割り付けられる可能性が高くなるという作用を有する。
【0038】
また、請求項8において、第2の割付済み側重なり割付対象検出手段によって、複数個の未割り付けの割付対象が判定された場合、未割り付け−未割り付け間連続判定手段は、検出された複数個の未割り付けの割付対象のうち、何れかのものの生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定することを特徴としており、請求項8によれば、第2の割付済み側重なり割付対象検出手段によって、複数個の未割り付けの割付対象が判定された場合、検出された複数個の未割り付けの割付対象のうち、何れかのものの生存区間と、割り付けるべき割付対象の生存区間とが連続しているかが未割り付け−未割り付け間連続判定手段によって判定されるという作用を有する。
【0039】
また、請求項9において、資源割付装置は、全ての資源要素と、各々の資源要素の得失値の初期値とを対応づけて記憶する得失値記憶部を備え、第1及び第2の増加部は、得失値記憶部に記憶されている各資源要素の得失値を増加させ、第1及び第2の減少部は、得失値記憶部に記憶されている各資源要素の得失値を減少させることを特徴としており、請求項9によれば、得失値記憶部に記憶されている各資源要素の得失値が、第1及び第2の増加部によって増加され、得失値記憶部に記憶されている各資源要素の得失値が第1及び第2の減少部によって減少させられる。得失値記憶部は、全ての資源要素と、各々の資源要素の得失値の累計の初期値とを対応づけて記憶しているので、全ての資源要素が損失になるような位置に割り付けられていれば、どの割付対象にも割り付けられてない資源要素の得失値が大きく見積もられるようになる。そのため、どの割付対象にも割り付けられてない資源要素を割り付けるべき割付対象に割り付けることができるという作用を有する。
【0040】
また、請求項10において、資源割付装置は更に、プログラムにおいて、各資源の資源要素を割り付けると、割り付けるべき割付対象が定義されている全ての定義命令、及び、使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかを、割り付けるべき割付対象と各資源要素との組み合わせについてその集計値の推定値を算出することで推定する推定手段と、各資源要素毎の推定結果である推定値を比較し、推定値が最小である資源要素が1つか複数かを判定する資源要素単複判定手段とを備え、前記割付手段は、1つと判定された場合、割り付けるべき割付対象に推定値が最小である資源要素を割り付け、複数個と判定された場合、得失値が最大の資源要素を、割り付けるべき割付対象に割り付けることを特徴としており、また、請求項10によれば、プログラム中の各割付対象の定義命令及び使用命令の実行サイクルおよび/又はコードサイズの集計がどれだけになるかを示す推定値が、推定値算出手段によって各資源要素について算出される。各資源要素毎の推定値が比較され、推定値が最小である資源要素が、資源要素単複判定手段によって1つか複数かが判定される。1つと判定された場合、割り付けるべき割付対象に推定値が最小である資源要素が割付手段によって割り付けられ、複数個と判定された場合、得失値の累計が最大の資源要素が割り付けるべき割付対象に割り付けられる。このように割付対象に割り付けるのに際して、推定値を用いるか得失値を用いるかが切り換えられ、推定値が最大の資源要素が1つである場合、推定値が優先されるため、割付対象の定義命令及び使用命令の実行サイクルおよび/又はコードサイズの増加量を優先させた資源割り付けが行えるという作用を有する。
【0041】
また、請求項11において、推定手段は、機械語命令の命令フォーマットを用いて、プログラム中の割付対象の定義命令及び使用命令を表現した情報である命令パタンを、プログラム中における当該割付対象の全ての定義命令及び使用命令について出力する命令パタン出力部と、機械語命令の各オペランドに各資源の資源要素を用いた場合の、当該定義命令及び使用命令の実行サイクルおよび/又はコードサイズを示すコストを、命令パタン出力部によって出力され得る命令パタンのそれぞれに対応づけて記憶するコスト記憶部と、コスト記憶部から、出力された命令パタンに対応するコストを取り出し、取り出したコストを各資源要素毎に集計し、集計した集計値を推定値とするコスト集計部とを備えることを特徴としており、請求項11によれば機械語命令の命令フォーマットを用いて、プログラム中の割付対象の定義命令及び使用命令を表現した情報である命令パタンが、命令パタン出力部によってプログラム中における当該割付対象の全ての定義命令及び使用命令について生成される。コスト記憶部から、出力された命令パタンに対応するコストがコスト集計部によって取り出され、取り出されたコストが各資源要素毎に集計され、集計された集計値が推定値とされる。コスト記憶部は、各機械語命令の各オペランドに各資源の資源要素を用いた場合の当該定義命令及び使用命令の実行サイクルおよび/又はコードサイズを示すコストを命令パタン出力部によって出力され得る命令パタンのそれぞれに対応づけて記憶しているため、割付対象の定義命令及び使用命令を機械語命令化するのに、どの資源の資源要素が適切であるかが綿密に判定されるという作用を有する。
【0042】
また、請求項12において、資源割付装置は更に、各資源要素について得失値算出手段によって算出された得失値が複数個の異なる資源の資源要素同士で同一の大きさになった場合、割り付けるべき割付対象より優先度が低く、割り付けるべき割付対象の後に割り付けられる全ての未割り付けの割付対象に最も相応しい資源要素を予測する予測手段を備え、前記割付手段は、予測手段によって予測された資源要素を、割り付けるべき割付対象に割り付けることを特徴としており、請求項12によれば、各資源要素について得失値算出手段によって算出された得失値が複数個の異なる資源の資源要素同士で同一の大きさになった場合、割り付けるべき割付対象より優先度が低く、割り付けるべき割付対象の後に割り付けられる全ての未割り付けの割付対象に最も相応しい資源要素が予測手段によって予測される。このように予測された資源要素が、割付手段によって割り付けるべき割付対象に割り付けられるという作用を有する。
【0043】
また、請求項13において、予測手段は、割り付けるべき割付対象が有する生存区間と連続する生存区間を有し、かつ、当該割付対象より優先度が低い未割り付けの割付対象を全て検出する第1の後順割付対象検出手段と、検出された各割付対象に各資源要素を割り付けたとすると当該割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかを、第1の後順割付対象検出手段に検出された全ての割付対象と各資源要素との組み合わせについて当該集計値の推定値を算出することにより推定する第1の推定手段と、第1の後順割付対象検出手段によって検出された各割付対象と割り付けるべき割付対象との間に介在する生存区間長を、第1の後順割付対象検出手段によって検出された各割付対象毎に計数する第1の生存区間長計数手段と、検出された各割付対象と各資源要素との組み合わせに対して第1の推定手段によって算出された推定値に、その割付対象に対して計数された生存区間長の短さを重みとして、重み付けを行う第1の重み付け手段と、第1の重み付け手段によって重み付けられた推定値を各資源要素毎に集計する第1の集計手段と、第1の集計手段によって集計された集計結果が最も小さい資源要素を、割り付けるべき割付対象より優先度が低い未割り付けの割付対象に最も相応しい資源要素と判定する第1の最適資源要素判定手段とを備えることを特徴としており、
請求項13によれば、割り付けるべき割付対象が有する生存区間と連続する生存区間を有し、かつ、当該割付対象より優先度が低い未割り付けの割付対象が第1の後順割付対象検出手段によって全て検出される。次に検出された各割付対象に各資源要素を割り付けたとすると当該割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかが、第1の推定手段によって推定される。第1の後順割付対象検出手段によって検出された各割付対象と割り付けるべき割付対象との間に介在する生存区間長が、第1の生存区間長計数手段によって計数される。検出された各割付対象と各資源要素との組み合わせに対して第1の推定手段によって算出された推定値に、その割付対象に対して計数された生存区間長の短さを重みとして、第1の重み付け手段によって重み付けが行われる。第1の重み付け手段によって重み付けられた推定値が第1の集計手段によって各資源要素毎に集計される。第1の集計手段によって集計された集計結果が最も小さい資源要素が割り付けるべき割付対象より優先度が低い未割り付けの割付対象に最も相応しい資源要素として第1の最適資源要素判定手段によって判定され、このように判定された資源要素が割付対象に割り付けられるという作用を有する。
【0044】
また、請求項14において、予測手段は、第1の最適資源要素判定手段によって複数個の資源要素が最も相応しいと判定された場合、割り付けるべき割付対象と生存区間が重なる未割り付けの割付対象、及び、その未割り付けの割付対象の生存区間と連続する生存区間を有する未割り付けの割付対象を検出する第2の後順割付対象検出手段と、第2の後順割付対象検出手段によって検出された未割り付けの割付対象に各資源要素を割り付けたとすると、検出された各割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかを、検出された割付対象と各資源要素との組み合わせについて当該集計値の推定値を算出することで推定する第2の推定手段と、割り付けるべき割付対象が有する生存区間と生存区間が重なる未割り付けの割付対象と、その重なる側の割付対象の生存区間と連続する生存区間を有する割付対象との間に介在し、連続する生存区間長を当該第2の後順割付対象検出手段によって検出された各割付対象毎に計数する第2の生存区間長計数手段と、第2の後順割付対象検出手段によって未割り付けの割付対象と各資源要素との組み合わせに対して第2の推定手段によって推定された推定値に、その割付対象に対して計数された生存区間長の短さと、各割付対象の優先度とを重みとして、重み付けを行う第2の重み付け手段と、第2の重み付け手段によって重み付けられた各割付対象の推定値を資源要素毎に集計する第2の集計手段と、第2の集計手段によって集計された各資源要素についての集計値が最も大きい資源要素を、割り付けるべき割付対象より後に割り付けられる全ての未割り付けの割付対象に最も相応しい資源要素と判定する第2の最適資源要素判定手段とを備えることを特徴としており、
請求項14によれば、第1の最適資源要素判定手段によって複数個の資源要素が最も相応しいと判定された場合、割り付けるべき割付対象と生存区間が重なる未割り付けの割付対象、及び、その未割り付けの割付対象の生存区間と連続する生存区間を有する未割り付けの割付対象が第2の後順割付対象検出手段によって検出される。第2の後順割付対象検出手段によって検出された未割り付けの割付対象に各資源要素が割り付けられたとすると検出された各割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかが、検出された割付対象と各資源要素との組み合わせについて当該集計値の推定値が算出されることで第2の推定手段によって推定される。
【0045】
割り付けるべき割付対象が有する生存区間と生存区間が重なる未割り付けの割付対象と、その重なる側の割付対象の生存区間と連続する生存区間が有する割付対象との間に介在し、連続する生存区間長が第2の生存区間長計数手段によって当該第2の後順割付対象検出手段によって検出された各割付対象毎に計数される。
【0046】
第2の後順割付対象検出手段によって未割り付けの割付対象と各資源要素との組み合わせに対して第2の推定手段によって推定された推定値に、その割付対象に対して計数された生存区間長の短さと各割付対象の優先度とが重みとして、第2の重み付け手段によって重み付けされる。
第2の重み付け手段によって重み付けられた各割付対象の推定値が、第2の集計手段によって資源要素毎に集計される。第2の集計手段によって集計された各資源要素についての集計値が最も大きい資源要素が、第2の最適資源要素判定手段によって割り付けるべき割付対象より後に割り付けられる全ての未割り付けの割付対象に最も相応しい資源要素と判定されるという作用を有する。
【0047】
また、請求項15において、第1及び第2の重み付け手段は、第1及び第2の生存区間長計数手段によって計数された割付対象間の生存区間長が0であった場合、1を生存区間長の短さとして重み付けを行い、計数された生存区間長が0でない場合、その生存区間長の逆数を算出し、算出した生存区間長の逆数を生存区間長の短さとして重み付けを行うことを特徴としており、また、請求項15によれば、第1及び第2の重み付け手段は、第1及び第2の生存区間長計数手段によって計数された割付対象間の生存区間長が0であった場合、1が生存区間長の短さとして重み付けが行われ、計数された生存区間長が0でない場合、その生存区間
長の逆数が算出され、算出された生存区間長の逆数を生存区間長の短さとして重み付けが行われるという作用を有する。
【0048】
また、請求項16において、資源割付装置は、
機械語命令の命令フォーマットを用いてプログラム中の割付対象の定義命令及び使用命令を表現した情報である命令パタンを複数個記憶し、また、機械語命令の各オペランドに各資源の資源要素を用いた場合のプログラム中の割付対象の定義命令及び使用命令の実行サイクルおよび/又はコードサイズを示すコストをそれぞれの命令パタンに対応づけて記憶するコスト記憶手段を備え、第1の推定手段は、第1の後順割付対象検出手段によって検出された未割り付けの割付対象の全ての定義命令及び使用命令に対応する命令パタンを読み出し、読み出した命令パタンを出力する第1の命令パタン出力部と、コスト記憶手段から、出力された命令パタンに対応するコストを取り出し、取り出したコストを各資源要素毎に集計し、集計した集計値を推定値とする第1のコスト集計部とを備え、
第2の推定手段は、第2の後順割付対象検出手段によって検出された未割り付けの割付対象の全ての定義命令及び使用命令に対応する命令パタンを読み出し、読み出した命令パタンを出力する第2の命令パタン出力部と、コスト記憶手段から、出力された命令パタンに対応するコストを取り出し、取り出したコストを各資源要素毎に集計し、集計した集計値を推定値とする第2のコスト集計部とを備えることを特徴としており、
また、請求項17において、命令パタンは、演算結果の格納先がどのオペランドであるか、何れのオペランドにも一致しないかを示す情報を有し、格納先がオペランドである命令パタンに対応するコストは、そうでない命令パタンに対応するコストよりも小さいことを特徴としており、
また、請求項18において、命令パタンは、対応する使用命令が、生存区間の終了点であるか、そうでないかを示す情報を有し、終了点である命令パタンに対応するコストは、そうでない命令パタンに対応するコストよりも小さいことを特徴としており、
また、請求項16〜18によれば、コスト記憶手段には、機械語命令の命令フォーマットを用いてプログラム中の割付対象の定義命令及び使用命令が表現した情報である命令パタンが複数個記憶され、また、機械語命令の各オペランドに各資源の資源要素を用いた場合のプログラム中の割付対象の定義命令及び使用命令の実行サイクルおよび/又はコードサイズを示すコストがそれぞれの命令パタンに対応づけて記憶されている。
【0049】
第1の後順割付対象検出手段によって検出された未割り付けの割付対象の全ての定義命令及び使用命令に対応する命令パタンが読み出され、第1の命令パタン出力部によって読み出された命令パタンが出力される。
コスト記憶手段から、出力された命令パタンに対応するコストが取り出され、取り出したコストが各資源要素毎に集計され、集計した集計値が第1のコスト集計部によって推定値とされる。第2の後順割付対象検出手段によって検出された未割り付けの割付対象の全ての定義命令及び使用命令に対応する命令パタンが読み出され、第2の命令パタン出力部によって読み出された命令パタンが出力される。コスト記憶手段から、第2のコスト集計部によって出力された命令パタンに対応するコストが取り出され、取り出されたコストが各資源要素毎に集計され、集計された集計値が推定値とされるという作用を有する。
【0050】
また、請求項19において、資源割付装置は更に、割り付けるべき資源要素が予め定められている割付対象を、前記プログラムから検出する予約割付対象検出手段と、予約割付対象検出手段が検出した割付対象に割り付けるべき資源要素を記憶する予約資源要素記憶手段と、割付手段は、予約割付対象検出手段によって検出された割付対象に割り付けられるべき資源要素を割り付け、割り付けた後に最大の優先度の割付対象に、資源要素の何れかを割り付けることを特徴としており、
また、請求項20において、前記予約割付対象検出手段は、前記プログラムから関数呼び出しの引数を保持する割付対象を検出し、前記予約資源要素記憶手段は、当該割付対象に割り付けるべき引数レジスタを記憶することを特徴としており、
また、請求項21において、前記予約割付対象検出手段は、前記プログラムから関数呼び出しの戻り値を保持する割付対象を検出し、前記予約資源要素記憶手段は、当該割付対象に割り付けるべき戻り値レジスタを記憶することを特徴としており、
また、請求項22において、前記予約割付対象検出手段は、前記プログラムから値が書き換えられてもよい割付対象を検出し、前記予約資源要素記憶手段は、当該割付対象に割り付けるべき破壊レジスタを記憶することを特徴としており、
また、請求項19〜22によれば、割り付けるべき資源要素が予め定められている割付対象が、予約割付対象検出手段によって前記プログラムから検出される。割付手段は、予約割付対象検出手段によって検出された割付対象に割り付けられるべき資源要素を割り付け、割り付けた後に最大の優先度の割付対象に資源要素の何れかを割り付ける。このように、引数レジスタ、戻り値レジスタ、破壊レジスタ等、割り付けるべき資源要素が予め定められている割付対象への資源割り付けの後に優先度順に割付対象を割り付けるため、引数レジスタ、戻り値レジスタ、破壊レジスタを、他の割付対象に割り付けることができるという作用を有する。
【0051】
また、請求項23において資源割付装置は更に、プログラム中の各割付対象を、当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、割付済み−被割付間連続判定手段は、割り付けるべき割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済みの割付対象が存在するか否かを判定する第1の判定部と、存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済みの割付対象が存在するかを判定する第2の判定部と、存在することが判定されるまで、第2の判定部の起動を繰り返させる制御部とを備え、得失値算出手段は、検出結果とされた割付対象の生存区間長を集計する集計部と、割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部とを備えることを特徴としており、
また、請求項23によれば、
割り付けられるべき割付対象についての生存区間継承関係集合が参照され、当該生存区間継承関係集合に、割付済みの割付対象が存在するか否かが第1の判定部によって判定される。存在しなければ、生存区間継承関係集合内の他の割付対象が取り出され、取り出された割付対象についての生存区間継承関係集合が参照され、当該生存区間継承関係集合に、第2の判定部によって、割付済みの割付対象が存在するかが判定される。存在することが判定されるまで、制御部によって、第2の判定部の起動が繰り返させられる。また、検出された割付対象の生存区間長が集計部によって集計され、割り付けられるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数が算出され、算出結果が、逆数算出部によって生存区間の短さとされるという作用を有する。
【0052】
また、請求項24において、資源割付装置は更に、
プログラム中の各割付対象を、当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、
未割り付け−被割付間連続判定手段は、割り付けるべき割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するか否かを判定する第1の判定部と、存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するかを判定する第2の判定部と、存在することが判定されるまで、第2の判定部の起動を繰り返させる制御部とを備え、得失値算出手段は、検出結果とされた割付対象の生存区間長を集計する集計部と、割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部とを備えることを特徴としており、
また、請求項24によれば、割り付けられるべき割付対象についての生存区間継承関係集合が参照され、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するか否かが第1の判定部によって判定される。存在しなければ、生存区間継承関係集合内の他の割付対象が取り出され、取り出された割付対象についての生存区間継承関係集合が参照され、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するかが第2の判定部によって判定される。存在することが判定されるまで、制御部によって第2の判定部の起動が繰り返させられる。また、検出結果とされた割付対象の生存区間長が集計部によって、集計される。割り付けられるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数が逆数算出部によって算出され、算出結果が生存区間の短さとされるという作用を有する。
【0053】
また、請求項25において、資源割付装置は更に、
プログラム中の各割付対象を、当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、
未割り付け−割付済み間連続判定手段は、被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済みの割付対象が存在するか否かを判定する第1の判定部と、存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済みの割付対象が存在するかを判定する第2の判定部と、存在することが判定されるまで、第2の判定部の起動を繰り返させる制御部とを備え、得失値算出手段は、検出結果とされた割付対象の生存区間長を集計する集計部と、割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部とを備えることを特徴としており、
また、請求項25によれば、被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象についての生存区間継承関係集合が第1の判定部によって参照され、当該生存区間継承関係集合に、割付済みの割付対象が存在するか否かが判定される。存在しなければ、生存区間継承関係集合内の他の割付対象が取り出され、取り出された割付対象についての生存区間継承関係集合が第2の判定部によって参照され、当該生存区間継承関係集合に、割付済みの割付対象が存在するかが判定される。存在することが判定されるまで、第2の判定部の起動が制御部によって繰り返させられる。検出結果とされた割付対象の生存区間長が集計部によって集計される。割り付けられるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数が逆数算出部によって算出され、算出結果が生存区間の短さとされるという作用を有する。
【0054】
また、請求項26において、資源割付装置は更に、プログラム中の各割付対象を、当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、未割り付け−未割り付け間連続判定手段は、被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するか否かを判定する第1の判定部と、存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するかを判定する第2の判定部と、存在することが判定されるまで、第2の判定部の起動を繰り返させる制御部とを備え、得失値算出手段は、検出結果とされた割付対象の生存区間長を集計する集計部と、割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部とを備えることを特徴としており、
また、請求項26によれば、
被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象についての生存区間継承関係集合が第1の判定部によって参照され、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するか否かが判定される。存在しなければ、第2の判定部によって、生存区間継承関係集合内の他の割付対象が取り出され、取り出された割付対象についての生存区間継承関係集合が参照され、当該生存区間継承関係集合に、割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するかが判定される。存在することが判定されるまで、制御部によって第2の判定部の起動が繰り返させられる。検出結果とされた割付対象の生存区間長が集計部によって集計される。割り付けられるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数が逆数算出部によって算出され、算出結果が生存区間の短さとされるという作用を有する。
【0055】
また、請求項27において、割付対象の生存区間は、当該生存区間によって占められるプログラム中の開始点から終了点までの命令位置情報で表され、集計部は、命令位置情報の数を集計し、集計値を生存区間長とすることを特徴としており、
また、請求項27によれば、集計部によって命令位置情報の数が集計され、集計値が生存区間長とされる。
【0056】
また、請求項28において、割付対象の生存区間の開始点及び終了点は、プログラム中の命令位置情報で表され、資源割付装置は更に、プログラム中の割付対象と、各割付対象の生存区間の開始点に相当する命令位置情報と、各割付対象の生存区間の終了点に相当する命令位置情報とを対応づけて記憶する開始終了点記憶手段と、開始終了点記憶手段を参照して、プログラム中の各割付対象の生存区間の開始点に相当する命令位置情報が終了点に相当するものを全て探し出し、探し出した割付対象と、プログラム中の割付対象とを同一の生存区間継承関係集合にする第1の集合化手段と、開始終了点記憶手段を参照して、プログラム中の各割付対象の生存区間の終了点に相当する命令位置情報が、開始点に相当するものを全て探し出し、探し出した割付対象と、プログラム中の割付対象とを同一の生存区間継承関係集合にする第2の集合化手段と、プログラム中の割付対象と、第1及び第2の集合化手段によって集合化された生存区間継承集合とを対応づけて、生存区間継承関係集合記憶部に書き込む書き込み手段とを備えることを特徴としており、請求項28によれば、第1の集合化手段によって開始終了点記憶手段が参照され、プログラム中の各割付対象の生存区間の開始点に相当される命令位置情報が終了点に相当されるものが全て探し出され、探し出された割付対象と、プログラム中の割付対象とが同一の生存区間継承関係集合にされる。第2の集合化手段によって開始終了点記憶手段が参照され、プログラム中の各割付対象の生存区間の終了点に相当される命令位置情報が、開始点に相当されるものが全て探し出され、探し出された割付対象と、プログラム中の割付対象とが同一の生存区間継承関係集合にされる。プログラム中の割付対象と、第1及び第2の集合化手段によって集合化された生存区間継承集合とが書き込み手段によって対応づけられて、生存区間継承関係集合記憶部に書き込まれるという作用を有する。
【0057】
また、請求項29において、高級言語で書かれたプログラムを機械語プログラムに翻訳するコンパイラに用いられ、プログラミング言語で記述されたプログラムの中の変数と生存区間の組である割付対象にレジスタ、メモリ等のハードウェアである資源が有する資源要素を割り付ける資源割付装置であって、
プログラム中の割付対象を、その優先度に対応づけて保持する割付対象保持手段と、前記割付対象保持手段から優先度最大の割付対象を取り出し、優先度が最大の割付対象に資源要素の何れかを割り付ける第1の資源要素割付手段と、直前に割り付けられた割付対象の優先度に対して、次順位の優先度を持つ割付対象を、前記割付対象保持手段から取り出す割付対象取出手段と、前記割付対象取出手段が取り出した割付対象について、生存区間が重なっている割付対象を検出する一次重なり割付対象検出手段と、前記一次重なり割付対象検出手段が検出した割付対象に、既に割り付けられている資源要素を検出する資源要素検出手段と、検出された資源要素とは異なる資源要素が既に割り付けられている割付対象を全て検出する割付対象−資源要素検出手段と、割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、割付対象取出手段によって取り出された割付対象と生存区間が連続している割付対象を全て判定する利得側連続割付済み割付対象判定手段と、既に割付対象に割り付けられた資源要素がこれから割り付けようとする割付対象にどれだけ適切であるかを示す値である得失値を、連続すると判定された割付済みの割付対象から割付対象取出手段によって取り出された割付対象までの生存区間長の短さに基づき、生存区間が連続すると判定された割付対象に割り付けられている全ての資源要素について算出する第1の得失値算出手段と、算出された得失値を、割付対象−資源要素検出手段によって判定された各資源要素毎に累計する累計手段と、累計手段によって累計された累計値が最大の資源要素を、割付対象取り出し手段が取り出した割付対象に割り付ける第2の資源要素割付手段と、全ての割付対象が割り付けられるまで、前記割付対象取出手段の起動を繰り返えす制御手段とを備えることを特徴としており、
また、請求項29によれば、前記割付対象保持手段から優先度最大の割付対象が第1の資源要素割付手段によって取り出され、優先度が最大の割付対象に資源要素の何れかが割り付けられる。直前に割り付けられた割付対象の優先度に対して、次順位の優先度が持つ割付対象が、割付対象取出手段によって前記割付対象保持手段から取り出される。前記割付対象取出手段が取り出された割付対象について、一次重なり割付対象検出手段によって生存区間が重なっている割付対象が検出される。前記一次重なり割付対象検出手段が検出した割付対象に、資源要素検出手段によって既に割り付けられている資源要素が検出される。検出された資源要素とは異なる資源要素が既に割り付けられている割付対象が割付対象−資源要素検出手段によって全て検出される。割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、割付対象取出手段によって取り出された割付対象と生存区間が連続している割付対象が利得側連続割付済み割付対象判定手段によって全て判定される。既に割付対象に割り付けられた資源要素がこれから割り付けようとされる割付対象にどれだけ適切であるかが示す値である得失値が、第1の得失値算出手段によって、連続すると、判定された割付済みの割付対象から割付対象取出手段によって取り出された割付対象までの生存区間長の短さに基づき、生存区間が連続されると、判定された割付対象に割り付けられている全ての資源要素について算出される。算出された得失値が、累計手段によって、割付対象−資源要素検出手段によって判定された各資源要素毎に累計される。累計手段によって累計された累計値が最大の資源要素が、第2の資源要素割付手段によって割付対象取り出し手段が取り出された割付対象に割り付けられる。全ての割付対象が割り付けられるまで、制御手段によって前記割付対象取出手段の起動が繰り返えさせられるという作用を有する。
【0058】
また、請求項30において、資源割付装置は更に、割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、割付対象取出手段によって取り出された割付対象と生存区間が連続せず、かつ、生存区間が重なっていない割付対象を判定する第1の非重なり非連続割付済み割付対象判定手段と、第1の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象の生存区間と生存区間が重なる未割り付けの割付対象であって、割付対象取出手段によって取り出された割付対象と生存区間が連続している割付対象を検出する利得側連続未割り付け割付対象検出手段と、利得側連続未割り付け割付対象検出手段によって検出された未割り付けの割付対象から、割付対象取出手段によって取り出された割付対象までの生存区間長の短さに基づき、第1の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられた資源要素の得失値を算出する第2の得失値算出手段と、前記累計手段によって累計された当該資源要素についての得失値から、第2の得失値算出手段によって算出された得失値を減ずる第1の減算手段とを備え、第2の資源要素割付手段は、第1の減算手段によって得失値が減ぜられた得失値が最大の資源要素を、割付対象取出手段が取り出した割付対象に割り付けることを特徴としており、
また、請求項30によれば、
割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、割付対象取出手段によって取り出された割付対象と生存区間が連続せず、かつ、生存区間が重なっていない割付対象が第1の非重なり非連続割付済み割付対象判定手段によって判定される。第1の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象の生存区間と生存区間が重なる未割り付けの割付対象であって、割付対象取出手段によって取り出された割付対象と生存区間が連続している割付対象が利得側連続未割り付け割付対象検出手段によって検出される。利得側連続未割り付け割付対象検出手段によって検出された未割り付けの割付対象から、割付対象取出手段によって取り出された割付対象までの生存区間長の短さに基づき、第1の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられた資源要素の得失値が第2の得失値算出手段によって算出される。前記累計手段によって累計された当該資源要素についての得失値から、第2の得失値算出手段によって算出された得失値が第1の減算手段によって減ぜられる。第2の資源要素割付手段によって、第1の減算手段によって得失値が減ぜられた得失値が最大の資源要素が、割付対象取出手段が取り出された割付対象に割り付けられるという作用を有する。
【0059】
また、請求項31において、資源割付装置は更に、
割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、一次重なり割付対象検出手段によって検出された割付対象と、生存区間が連続しているものを判定する重なり側連続割付済み割付対象判定手段と、重なり側連続割付済み割付対象判定手段によって判定された割付済みの割付対象から一次重なり割付対象検出手段によって検出された割付対象までの生存区間長の短さに基づき、重なり側連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられた資源要素の得失値を算出する第3の得失値算出手段と、前記累計手段によって累計された当該資源要素についての累計値から、第3の得失値算出手段によって算出された得失値を減ずる第2の減算手段と、第2の資源要素割付手段は、第2の減算手段によって得失値が減ぜられた後の累計値が最大の資源要素を、割付対象取出手段が取り出した割付対象に割り付けることを特徴としており、
また、請求項31によれば、
割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、一次重なり割付対象検出手段によって検出された割付対象と、生存区間が連続しているものが重なり側連続割付済み割付対象判定手段によって判定される。重なり側連続割付済み割付対象判定手段によって判定された割付済みの割付対象から一次重なり割付対象検出手段によって検出された割付対象までの生存区間長の短さに基づき、重なり側連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられた資源要素の得失値が第3の得失値算出手段によって算出される。前記累計手段によって累計された当該資源要素についての累計値から、第3の得失値算出手段によって算出された得失値が第2の減算手段によって減ぜられる。第2の資源要素割付手段によって、第2の減算手段によって得失値が減ぜられた後の累計値が最大の資源要素が、割付対象取出手段が取り出された割付対象に割り付けられるという作用を有する。
【0060】
また、請求項32において、資源割付装置は更に、
割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、一次重なり割付対象検出手段によって検出された割付対象と生存区間が連続せず、かつ、生存区間が重なっていない割付対象を判定する第2の非重なり非連続割付済み割付対象判定手段と、第2の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象の生存区間と生存区間が重なる未割り付けの割付対象であって、一次重なり割付対象検出手段によって検出された割付対象と生存区間が連続しているものを判定する重なり側連続未割り付け割付対象判定手段と、重なり側連続未割り付け割付対象判定手段によって判定された割付対象から、一次重なり割付対象検出手段によって検出された割付対象までの生存区間長の短さに基づいて、第2の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられている資源要素の得失値を算出する第4の得失値算出手段と、前記累計手段によって累計された当該資源要素についての累計値に、第4の得失値算出手段によって算出された得失値を加算する加算手段と、第2の資源要素割付手段は、加算手段によって得失値が加算された累計値が最大の資源要素を、割付対象取出手段が取り出した割付対象に割り付けることを特徴としており、
また、請求項32によれば、
割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、一次重なり割付対象検出手段によって検出された割付対象と生存区間が連続せず、かつ、生存区間が重なっていない割付対象が第2の非重なり非連続割付済み割付対象判定手段によって判定される。第2の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象の生存区間と生存区間が重なる未割り付けの割付対象であって、一次重なり割付対象検出手段によって検出された割付対象と生存区間が連続しているものが重なり側連続未割り付け割付対象判定手段によって判定される。重なり側連続未割り付け割付対象判定手段によって判定された割付対象から、一次重なり割付対象検出手段によって検出された割付対象までの生存区間長の短さに基づいて、第2の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられている資源要素の得失値が第4の得失値算出手段によって算出される。前記累計手段によって累計された当該資源要素についての累計値に、加算手段によって第4の得失値算出手段によって算出された得失値が加算される。加算手段によって得失値が加算された累計値が最大の資源要素が、第2の資源要素割付手段によって割付対象取出手段が取り出された割付対象に割り付けられるという作用を有する。
【0061】
<用語の説明>
本発明の実施形態の説明の前に以下で使用する用語について説明しておく。
・ループレベル
ループレベルとはループのネストの深さのことであり、中間命令のループレベルとはその中間命令が存在するループのレベルを意味する。例えば、図26において中間命令i1 のループレベルは1である。中間命令i8は中間命令i31のジャンプ先になっているのでループレベルは2である。
・多資源
メモリなどのように他に比べて豊富な資源要素を持ち、どの資源要素を割付対象に割り付けても特に生成コードの品質に影響を及ぼさない資源を示す。
・割付資源
割付対象に割付け可能な資源要素または多資源を元とする集合である。通常は1つの割付対象に1つの割付資源を割付けるが、ここでは資源は前述のように同じ機能を果たす資源要素の集合であるから割付対象に多資源Rを割付けるとは、Rに属する資源要素のどれか1つを割付対象に割り付けることとする。
・資源要素(広義)
割付資源の要素を示す。以下特に断りがない限り資源要素は広義の意味とする。
・資源継承関係
資源継承関係とは割付対象同士の割り付けられた資源要素を継承し得る関係をいう。また資源要素の継承とは既に割り付けられた資源要素と同一の資源要素を割り付けることをいい、このような同一資源要素への割り付けによってコード生成装置に転送命令の生成を省かせることができる。加えて割り付け済みの資源要素をまわりに広げてゆくことができる。プログラム中ではこのような資源継承関係は生存区間の連続によって表される。即ちプログラム上のある中間命令s1が、割付対象yの生存区間の終了点であり、かつ中間命令s1が、割付対象xの開始点であれば、これらの割付対象xと割付対象yとは資源要素継承関係にある。但し生存区間の終始点は一致しているが、同一の資源要素に割り付けても転送命令の生成を省かせることが明確に不可能な場合は資源継承関係にないとする。
【0062】
例えばプログラム上の中間命令s1: x = y;において割付対象xの生存区間の開始点が中間命令s1であり、割付対象yの生存区間の終了点が中間命令s1であるとき割付対象x,割付対象yは同じ資源要素に割付られると、割付対象yから割付対象xへの転送は不要である。よって割付対象xと割付対象yは資源継承関係にある。
【0063】
またターゲットマシンが2アドレス形式のマイクロプロセッサであり、被演算子に演算の結果が格納されるとき(ターゲットマシンの減算命令の被減数側のオペランドに演算結果が格納されるとき)、プログラム上の中間命令s2: z = x - w;において割付対象zの生存区間の開始点が中間命令s2であり、割付対象xの生存区間の終了点が中間命令s2である際に割付対象xと割付対象zは資源継承関係にある。そのため割付対象xと割付対象zを同じ資源要素に割り付けると不要な転送命令は生成されない。しかしここで割付対象wも中間命令s2が生存区間の終了点である場合、割付対象zと資源要素に割り付けるとかえって転送命令が増えるので割付対象zと割付対象wとは資源継承関係にない。
【0064】
また一般に割付対象Aと割付対象A1、割付対象A2、....、割付対象An-2と割付対象An-1、割付対象An-1と割付対象Anが各々資源継承関係にあるとき割付対象Aと割付対象Anは「間接的に資源継承関係にある」と言うことにする。例えば、上記の中間命令s1、s2において割付対象yと割付対象zとは割付対象xを介して間接的に資源継承関係にある。
・使用コスト値
使用コスト値とはこれから割り付けられようとする割付対象xに各々の資源の資源要素を割り付ければ、割付対象xが使用されている中間命令のコードサイズ、実行時間がどれだけになるかを示す値である。中間命令と、使用コスト値との関係を図12及び図13に示す使用コスト計算例の説明図を参照しながら説明を行う。
【0065】
図12は各資源の資源要素を被演算子にすることで機械語命令のコードサイズ又は実行時間がどのように増減するかを示した図である。
本図には「C(x,AR,INDIRECT REFERENCE)=1」、「C(x,DR,INDIRECT REFERENCE)=2」、「C(x,Mem,INDIRECT REFERENCE)=3」という数式が示されている。これらは「間接参照」という命令を機械語命令で行うのにどの資源を用いるのがよいかを示すものである。
【0066】
この「C(x,AR,INDIRECT REFERENCE)=1」はアドレスレジスタ(AR)で間接参照という命令を行うとメモリサイズ又は実行時間が「1」だけ増加することを示す。
「C(x,DR,INDIRECT REFERENCE)=2」はデータレジスタ(DR)で間接参照という命令を行うと、メモリサイズ又は実行時間が「2」だけ増加することを示す。
【0067】
「C(x,Mem,INDIRECT REFERENCE)=3」はメモリ(Mem)で間接参照という命令を行うとメモリサイズ又は実行時間が「3」だけ増加することを示す。
また図中の「C(x,Mem,ADDITION)=3」はメモリで加算を行うと、メモリサイズ又は実行時間が「3」増加することを示す。
「C(x,Mem,SUBTRACTION)=3」はメモリで減算を行うとメモリサイズ又は実行時間が「3」増加することを示す。
【0068】
図13において左半分に示しているのは中間プログラム例である。この中間プログラム内の割付対象の一部は○印で囲まれ、当該○印からは矢線が伸びている。図中の割付対象「s」からは矢線a11が伸び、a11の先は3つに別れている。この先にある「C(s,AR,INDIRECT REFERENCE)」「C(s,DR,INDIRECT REFERENCE)」「C(s,Mem,INDIRECT REFERENCE)」は割付対象sが間接参照という命令で使用されていることを示している。その下の「Cost(AR,s)=1」「Cost(DR,s)=2」「Cost(Mem,s)=3」は割付対象sについての使用コスト値の集計を示している。即ち、割付対象sに資源ARの資源要素を割り付ける場合、その使用コスト値が「1」となり、割付対象sに資源DRの資源要素を割り付ける場合、その使用コスト値が「2」となることを示す。また割付対象sにMemを割り付ける場合、その使用コスト値が「3」となることを示す。
【0069】
またこのプログラム例には割付対象rが3箇所存在し、これらの割付対象は○印で囲まれている。更にこれらの割付対象からは矢線a13、a14、a15が伸びている。これらの矢線の先には「C(r,AR,INDIRECT REFERENCE)」、「C(r,DR,INDIRECT REFERENCE)」「C(r,Mem,INDIRECT REFERENCE)」が3つずつ存在するが、これらは基本ブロック中において割付対象rが3箇所使用されているためその3箇所について評価を行うことを示す。この3箇所についての使用コスト値の集計が「Cost(AR,r)=3」「Cost(DR,r)=6」「Cost(Mem,r)=9」である。
【0070】
以上のような使用コスト値の集計値の算出を矢線a11、a12、a13・・・のように行うと、図13の下半分の表に示すように全ての割付対象についての3通りの資源についての使用コスト値の集計が得られる。この集計が各割付対象に対する適応、不適応のパラメータであり、これが小さいほどその割付対象に資源が適応していることを示している。但しこの使用コストの短所はコードサイズや実行時間を目安にしたものであるから、同機能のデータレジスタDO〜D2やアドレスレジスタA0〜A2は使用コストが何れも同値になり、おおまかな目安にしかならないことである。
・得失値
得失値とは、既に割付対象に割り付けられた資源要素がこれから割り付けようとする割付対象にどれだけ影響するかを示す値である。そのため、得失値は既に割り付けられたそれぞれの資源要素に与えられる。この得失値を資源要素毎に累計したものは利得値と称される。
【0071】
割付済みの資源要素の得失値がどのような値になるかを図14に示す説明図を参照しながら説明を行う。図14は利得要因を処理対象とした場合の各資源要素の得失値を表した説明図である。尚、図中の割付対象xは優先度による優先順位が次順であり、割り付けの順番がまわってきた割付対象である(以降の説明において特に断らない場合は割付対象xをこの意味で用いる。)。
【0072】
図中に示されている縦線は割付対象の生存区間を表し、そのうち、白抜きのものは未割り付けの割付対象、黒で塗り潰されているものは割付済みの割付対象を示す。当該割付対象の生存区間の始点及び終点を黒点「・」で表す。図中の黒点の中には破線の横線で結ばれているものが存在するが、これは生存区間の終点と始点とが一致していることを示し、このように破線によって終始点が結ばれている割付対象同士は資源継承関係にあることが判る。生存区間を表す縦線にはそれぞれ、「割付対象x1」、「割付対象x2」、「割付対象x11」のように当該生存区間を有する割付対象の名称を示す文字列が付されている。
【0073】
更に当該割付対象のうち、資源要素を割り付けているものは当該文字列の真下に資源要素の名称を示す文字列が示されている。この資源要素の名称を示す文字列から矢線が伸び、その矢先には「+1/L1」、「+1/(L1+L2)」、「+1/(L1+L3+L4)」という数式が存在するが、これらの数式は各資源要素の得失値を示している。
【0074】
本図において文字列「資源要素D2」から矢線が伸び、その矢先が、数式「+1/L1」に伸びているが、これは割付対象x3に割り付けられた資源要素D2の得失値が「+1/L1」になることを示す。
また文字列「資源要素D3」から矢線が伸び、その矢先が、数式「+1/(L1+L2)」に伸びているが、これは割付対象x1に割り付けられた資源要素D3の得失値が「+1/(L1+L2)」になることを示す。得失値がこのような値になるのは割付対象x1の生存区間と、割付対象xの生存区間との間に生存区間長L2の生存区間が介在しており、この生存区間長が得失値に反映されているからである。
【0075】
更に文字列「資源要素D1」から矢線が伸び、その矢先が、数式「+1/(L1+L3+L4)」に伸びているが、これは割付対象x2に割り付けられた資源要素D1の得失値が、+1/(L1+L3+L4)になることを示す。得失値がこのような値になるのは割付対象x2の生存区間と、割付対象xの生存区間との間に生存区間長L3及び生存区間長L4の生存区間が介在しており、この生存区間長が得失値に反映されているからである。
【0076】
一方、本図において割付対象x11を表す縦線は生存区間L3を有する割付対象と並行部分を有するので割付対象x11と生存区間L3を有する割付対象x5と生存区間が重なることが判る。
この縦線の左下に「−1/(L1+L3)」という文字列が付されれているが、これは割付対象x11に割り付けられている資源要素D0の得失値が「−1/(L1+L3)」であることを示す。得失値がこのような値になるのは割付対象x11の生存区間と、割付対象xの生存区間との間に生存区間長L3の生存区間が介在しており、この生存区間長が反映されるからである。
【0077】
尚、本図において得失値「−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)に割り付けられているからである。
【0078】
また得失値の分母は割付対象xを基点とした生存区間長の和であるので生存区間長L1を単に「1」としても構わない。
以上の説明から割付対象xに近い割付対象に割り付けられた資源要素ほど得失値は大きく割付対象xに遠い割付対象に割り付けられた資源要素ほど得失値は小さくなることが判る。割り付けの順番が回ってきた割付対象はより近い割り付け済み資源要素に影響されるのである。先に述べたように使用コストではデータレジスタD0,D1,D2間アドレスレジスタA0,A1,A2間等同機能の資源間では優劣の決着がつきにくい。これに対して得失値はデータレジスタD0,D1,D2のうち、どれが先に割り付けられているかに影響する。割付済みの場合でもデータレジスタD0,D1,D2のうち、どれが割付対象xに一番近いかで優劣が決着する。
【0079】
また割り付け済みの割付対象からみれば、自身の身近にある後順の割付対象に影響を与えることができる。つまり割付済みの割付対象は周辺の割付対象に自身と同じ資源要素を分配することができる。本実施形態でもネストレベルと使用頻度を表した割付優先度の順に割付対象に資源要素を割り付けてゆくのだが、この優先度と得失値との組み合わせによって、ネストレベルが深い箇所に優先してレジスタを割り付け、その割り付け済みのレジスタをネストレベルが浅くなる箇所に拡散してゆくようなスマートな割付結果が得ることができる。同様に使用頻度が高い箇所に優先してレジスタを割り付け、その割り付け済みのレジスタをネストレベルが低い箇所に拡散してゆくようなスマートな割付結果を得ることができる。更に引数レジスタ、戻り値レジスタ、破壊レジスタ等予め割り付ける相手が決められた割付対象がその資源を周りに拡げてゆくようなスマートな資源割り付けを実現できる。
【0080】
以上の説明は割付対象xと生存区間が連続する割付済み割付対象について説明を行ったが、連続するものばかりを見ていればかえって損失が生じることがある。これは、割付対象xと重なる側の生存区間の延長線上に既に幾つもの資源要素が割り付けられている場合はこれらに割り付けることを何とか避けねばならない。避け得ない場合はこれらのうち、最も損失が軽度のものを選択する必要がある。このような損失を定量的に見積もるためにも得失値は用いられる。損失を見積もるために得失値を用いる場合を図15の説明図を参照しながら説明を行う。図15において縦線は割付対象を表し、そのうち、白抜きのものは未割り付けの割付対象、黒で塗り潰されているものは割付済みの割付対象を示す。当該生存区間の始点及び終点を黒点「・」で表す。図中の黒点の中には破線の横線で結ばれているものが存在するが、これは生存区間の終点と始点とが一致していることを示し、このように破線によって終始点が結ばれている割付対象同士は資源継承関係にあることが判る。生存区間を表す縦線にはそれぞれ、「割付対象x2」、「割付対象x3」、「割付対象x4」のように当該生存区間を有する割付対象の名称を示す文字列が付されている。
【0081】
更に当該割付対象のうち、資源要素を割り付けているものは当該文字列の真下に資源要素の名称を示す文字列が示されている。この資源要素の名称を示す文字列から伸びる矢線の先には「+Px/(L2+L3)」、「−Px/(L2+L3)」という数式が示されているが、これらは各資源要素の得失値を示す。
本図において文字列「資源要素D1」から矢線が伸びその矢先が文字列「−Px/(L2+L3)」に至っているが、これは割付対象x4に割り付けられた資源要素D1のマイナスの符号を持った得失値、つまり損失を示す得失値が「−Px/(L2+L3)」であることを示す。得失値がこのような値になるのは割付対象x4の生存区間と、割付対象xと生存区間が重なる割付対象x2の生存区間との間に生存区間長L2及びL3の生存区間が介在しており、この生存区間長が、得失値に反映されているからである。
【0082】
一方、本図において割付対象x31を表す縦線は生存区間長L3を有する割付対象x3と並行部分を有するので割付対象x31と割付対象x3とは生存区間が重複し合うことが判る。
この縦線の左下に「+Px/(L2+L3)」という文字列が付されれているが、これは割付対象x31に割り付けられている資源要素D2の得失値が「+Px/(L2+L3)」であることを示す。得失値がこのような値になるのは割付対象x31の生存区間と、割付対象xと生存区間が重なる割付対象x2の生存区間との間に生存区間長L2及び生存区間長L3の生存区間が介在しており、この生存区間長が反映されるからである。
【0083】
尚、本図において得失値「−Px/(L2+L3)」に負の符号が付され、「+Px/(L2+L3)」に正の符号が付されている理由は以下の通りである。
得失値「+Px/(L2+L3)」が与えられた資源要素D2は、割付対象xを割り付ける際、転送命令を削除できるような割付対象(割付対象x31)に割り付けられ、得失値「−Px/(L2+L3)」が与えられた資源要素D1は、割付対象xを割り付ける際、転送命令を生じるような割付対象(割付対象x4)に割り付けられているからである。また得失値の分母は割付対象x2を基点とした生存区間長の和であるので生存区間長L2を単に「1」としても構わない。
・追跡対象
追跡対象とは資源継承関係を辿って行き、各資源要素の得失値を算出するための情報である。そのため追跡対象はプログラムにおいて現在資源継承関係を辿っている箇所を示す情報(これは割付対象名で表される)とその箇所の割付対象と割付対象xとの間に介在する生存区間長の総和と、その現在位置において割付可能な資源要素の集合とを含んでいる。これらの情報を含むため、本実施形態では追跡対象を構造体変数として扱い、上記の現在位置情報、生存区間長の総和、割付可能な資源要素集合をその構造体のメンバーとして扱っている(本実施形態では追跡対象をA、現在の追跡位置の割付対象をA.ASO、生存区間長の総和をA.LNS、資源要素集合をA.RESと表している。)。
・後順コスト値
後順コスト値とは優先度が割付対象xより低く割付対象xより後に割り付けられる割付対象を使用している中間命令のコードサイズ、実行時間が割付対象xに各々の資源の資源要素を割り付けることでどう増減するかを示す値である。
【0084】
優先順位が後順である未割り付けの割付対象の後順コスト値がどのような値になるかを図16の説明図を参照しながら説明を行う。図16は未割り付けの割付対象の後順コスト値を表した説明図である。
図中に示されている白抜きの縦線は割付対象の生存区間を表し、当該割付対象の生存区間の始点及び終点を白丸で表す。図中の白丸の中には破線の横線で結ばれているものが存在するが、これは生存区間の終点と始点とが一致していることを示し、このように破線によって終始点が結ばれている割付対象同士は資源継承関係にあることが判る。生存区間を表す縦線にはそれぞれ「割付対象x1」、「割付対象x2」、「割付対象x3」のように割付対象の名称を示す文字列が付されている。また割付対象x1の左隣には「「x1=u+v」「y=x1+200」「r=x1/40」「t=30+x1」「w=x1+3」」といった中間命令群が存在する。これらは中間プログラムにおいて割付対象x1が使用されている中間命令群を表している。
【0085】
また割付対象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が使用されている中間命令群を表している。
【0086】
本図において「割付対象x1」という文字列の真下には『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の使用コスト値の集計値であることを示している。
【0087】
本図において「割付対象x2」といった文字列の真下には『DRの後順コスト値』、『ARの後順コスト値』といった文字列が存在し、更にその下には『Cost(DR)/(L1+L)』『Cost(AR)/(L1+L)』という数式が存在するが、これらの数式は割付対象x2の後順コスト値を示している。また割付対象x2の左隣に位置する中間命令群の各中間命令『「x2=u+v」「y=x2+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)で割られているが、これは割付対象x2と割付対象xとの間に割付対象x1が介在しており、これの生存区間長(L1+L)が後順コスト値に反映されていることを示す。
【0088】
「割付対象x3」の文字列の真下には『DRの後順コスト値』、『ARの後順コスト値』といった文字列が存在し、更にその下には『Cost(DR)/(L1+L2+L)』『Cost(AR)/(L1+L2+L)』という数式が存在するが、これらの数式は割付対象x3の後順コスト値を示している。また割付対象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)で割られているが、これは割付対象x3と割付対象xとの間に割付対象x1、x2が介在しており、これの生存区間長の総和(L1+L2+L)が後順コスト値に反映されていることを示す。尚、後順コスト値の分母は割付対象xを基点とした生存区間長の和であるので生存区間長Lを単に「1」としても構わない。
【0089】
<資源割付装置13の構成>
図1は資源割付装置13の構成図である。資源割付装置13は割付対象保持部21と、割付対象生成部22と、生存区間重複割付対象検出部23と、資源継承割付対象検出部24と、割付優先度計算部25と、割付資源要素決定部26と、資源割付制御部27とで構成される。
【0090】
割付対象保持部21は割付対象生成部22で生成された割付対象と、割付対象の情報とからなる割付情報テーブルを保持し、また割付状況テーブルを保持する。
割付情報テーブルの一例を図17及び図18に示す。図17は以下で行う割り付け処理によって資源要素が割付けられる割付対象の割付情報を表している。尚これらの図の内容は図26に示す中間プログラム例内に存在する割付対象及び生存区間と対応している。
【0091】
図17に示すように割付情報テーブルは割付対象n10と当該割付対象の生存区間がプログラム内のどれだけの範囲を占めているかを中間命令の集合で表した割付対象の生存区間n11と、当該集合の要素数で表された当該割付対象の生存区間長n12と、当該割付対象が使用される中間命令を示す使用中間命令集合n13と、当該生存区間の開始点となる中間命令の集合である開始点集合n14と、当該生存区間の終了点となる中間命令の集合である終了点集合n15と、当該割付対象の生存区間と重複する生存区間を有する割付対象の集合である重複割付対象集合n16と、当該割付対象と資源継承関係にある割付対象の集合を表した資源継承割付対象集合n17と、当該割付対象の割付優先度n18とからなる。
【0092】
本図において割付対象「t35」の右隣の「i2〜i6」は割付対象t35の生存区間が、図26における、i2からi6までの中間命令によって表されることを示す。
またその右隣の「5」は割付対象「t35」の生存区間長を示す。その右隣の「i1、i5、i6」は割付対象「t35」を使用している中間命令を示す。その右隣の「i1」は割付対象「t35」の開始点集合が、「i1」であることを示す。その右隣の「i6」は割付対象「t35」の終了点集合が、「i6」であることを示す。その右隣の「t34、t1、a1、p1」は割付対象「t35」の重複割付対象集合が、「t34、t1、a1、p1」であることを示す。その右隣の「Pr1」は割付対象「t35」と資源継承関係にある割付対象が「Pr1」であることを示す。その右隣の「0.6」は割付対象「t35」の優先度を示す。尚、開始点である「i1」が生存区間n11に含まれていないのは、生存区間の終始が一致する割付対象間の生存区間が重ならないということを、生存区間の集合積により単純に判定可能とするためである。よって全ての割付対象の生存区間には、開始点を含めないものとする。
【0093】
また図18は実引数(Ar)、関数の戻り値(Fr)、破壊レジスタ(Br)等、既に資源要素が割付けられている割付対象の割付情報の一例を表している。
図18に示す割付情報テーブルは割付対象n20と、当該割付対象の生存区間が中間プログラム内のどれだけの範囲を占めているかを中間命令の集合で表した割付対象の生存区間n21と、当該集合の要素数で表された当該割付対象の生存区間長n22と、当該割付対象が使用される中間命令を示す使用中間命令集合n23と、当該生存区間の開始点となる中間命令の集合である開始点集合n24と、当該生存区間の終了点となる中間命令の集合である終了点集合n25と、当該割付対象の生存区間と重複する生存区間を有する割付対象の集合である重複割付対象集合n26と、当該割付対象と資源継承関係にある割付対象を表した資源継承関係割付対象集合n27と、当該割付対象に割り付けられている割付資源要素n28とからなる。
【0094】
更に割付け状況テーブルの一例を図19(a)に示す。割付け状況テーブルは割付対象の一覧と、各割付対象に割り付けられた資源要素を記入する記入欄とからなり割り付けがどのように進行しているかが反映されている。尚本図の内容は図26に示す中間プログラム例内に存在する割付対象及び生存区間と対応している。
【0095】
本図の記入欄のうち、右端に「(a)」と付されたものは優先度が最大の割付対象である「t262」が割り付けられた時点での割り付け状況を示している。また右端に「(b)」と付されたものは優先度が次に大きい割付対象である「t263」が割り付けられた時点での割り付け状況を示している。更に右端に「(c)」と付されたものは優先度が次に大きい割付対象である「t264」が割り付けられた時点での割り付け状況を示している。
【0096】
割付対象生成部22はデータフロー解析の結果(以下データフロー情報と呼ぶ)や制御フロー解析の結果(以下制御フロー情報と呼ぶ)をもとに割付対象を生成する。またこのとき生存区間や使用中間命令、生存区間の開始点、終了点も検出される。更に図18のように割付処理の前に割り付けることが必要な割付対象はここで資源要素を割り付ける。生成された割付対象は割付対象保持部21に格納される。
【0097】
生存区間重複割付対象検出部23は割付対象同士の生存区間の重なりを調べる。つまり任意の割付対象xと生存区間が重なる割付対象の集合である割付対象集合Ov(x)を求める。Ov(x)の内容は割付対象保持部21に保持される。資源継承割付対象検出部24は割付対象保持部21に保持されている割付対象に関して資源継承関係にある全ての割付対象を検出する。即ち任意の割付対象xと資源継承関係にある割付対象の集合である割付対象集合Rs(x)を求める。Rs(x)の内容は割付対象保持部21に保持される。
【0098】
Rs(x)を得るための集合化は以下のようにして行われる。
割付対象保持部21は各割付対象と、各割付対象の生存区間の開始点に相当する中間命令と、各割付対象の生存区間の終了点に相当する中間命令とを対応づけて保持しているので、資源継承割付対象検出部24は保持している割付対象のうち、割付対象xの生存区間の開始点に相当する中間命令が、終了点に相当するものを全て探し出す。そして探し出した割付対象を割付対象xの資源継承割付対象集合に格納する。
【0099】
また割付対象xの生存区間の終了点に相当する中間命令が、開始点に相当する割付対象を全て探し出す。そして探し出した割付対象と、割付対象xとを同一の集合にする。以上の処理を繰り返し、各割付対象についてのRs(x)を生成する。但し明らかに探し出した割付対象と割付対象xとに同じ資源要素を割り付けても、転送命令を省けないときは割付対象xの資源継承割付対象集合に格納しない。
【0100】
割付優先度計算部25は割付対象保持部21に保持されている割付対象xについての割付優先度を計算する。割付優先度とは資源要素への割り付けをどの割付対象から行なうかを示す優先度である。ここでは以下の計算式を使用して求める。
割付優先度 = (xの使用中間命令が存在するループレベルの総和)/xの生存区間の長さ
割付資源要素決定部26は割付情報テーブルの記述内容に基づいて割付対象に資源要素を割付ける。
【0101】
資源割付制御部27は割付け処理全体を制御する。
図5は資源割付制御部27のフローチャートである。
ステップa1では資源割付制御部27は割付対象生成部22を起動する。
ステップa2では資源割付制御部27は生存区間重複割付対象検出部23を起動する。
【0102】
ステップa3では資源割付制御部27は資源継承割付対象検出部24を起動する。
ステップa4では資源割付制御部27は割付優先度計算部25を起動する。
ステップa5では資源割付制御部27は割付資源要素決定部26を起動する。
<図1に示した割付資源要素決定部26の構成>
割付資源要素決定部26は割付情報テーブルの保持内容に基づいて各割付対象に割り付ける資源要素を決定するように構成されている。
【0103】
図2は図1における割付資源要素決定部26の構成図である。
割付資源要素決定部26は割付候補資源要素保持部31と、割付可能資源要素検出部32と、使用コスト計算部34と、使用コスト保持部35と、推定利得計算部36と、利得保持部37と、資源要素決定制御部38と、資源別コスト計算部39と、資源別コスト保持部40と、評価資源保持部41とで構成される。 図6は資源要素決定制御部38のフローチャートである。
【0104】
本フロ−チャ−トは図6に示すように割付対象xに割り付け可能な資源要素を求めるステップb3と、割り付け可能な資源要素が複数個存在する場合、各資源要素の使用コストを算出することによって割り付けるべき資源要素を選考するステップb4と、選考の結果1つの資源要素のみが残れば、その資源要素に割付対象xを割り付けるステップb16と、選考の結果複数の資源要素が残れば、それらに候補を絞り込むステップb7と、絞り込まれた候補について得失値を算出することで割付対象xに割り付ける資源要素の再選考を行うステップb8と、再選考の結果単一資源の資源要素が残った場合、その資源要素を割付対象xに割り付けるステップb14と、再選考の結果、複数資源の資源要素が残った場合、各資源の後順コスト値を算出して各資源が有する資源要素の再々選考を行うステップb12とを有し、以上の処理を未割り付けの割付対象について割付優先度順に行うループ構造(ステップb1〜b14)になっている。
【0105】
本フロ−チャ−トにおいて集合Rは割付対象xと生存区間が重なる割付対象に割付けられていない資源要素の集合を示す。
以降、本フロ−チャ−トが有する各ステップを順を追って更に詳しく説明してゆく。
ステップb1では資源要素決定制御部38は割付対象保持部21に保持されていて資源要素が未だ割付られていない割付対象が存在するときステップb2を行ない、割付対象保持部21に存在しないときは割付資源要素決定部26の処理を終了する。
【0106】
ステップb2では資源要素決定制御部38は割付対象保持部21に保持されている未割付けの割付対象のうち、割付優先度計算部25で求めた割付優先度が最大の割付対象xを取り出す。
ステップb3では割付可能資源要素検出部32を起動して割付対象xに割付け可能な資源要素の集合を求める。即ち、割付対象xと生存区間が重なる割付対象に割付けられていない資源要素(割付可能資源要素という。)の集合Rを求め、割付候補資源要素保持部31に保持させる。
【0107】
ステップb4では更に詳しくは使用コスト計算部34を起動して割付候補資源要素保持部31に保持されている集合Rの各資源要素に対して割付対象xの中間命令での使用コストを計算し、計算結果を使用コスト保持部35に保持させる。
ステップb5では割付候補資源要素保持部31に保持されている資源要素のうち、ステップb4で得られた使用コストが最小である資源要素に多資源rhが存在するときはステップb15を行ない、そうでないときはステップb6を行なう。
【0108】
ステップb6では割付候補資源要素保持部31に保持されている資源要素のうち、ステップb4で得られた使用コストが最小の資源要素rが一つしかないときはステップb16を行ない、そうでないときはステップb7を行なう。
ステップb7では割付候補資源要素保持部31を一旦空にしてステップb4で得られた使用コストが最小の資源要素のみを新たに割付候補資源要素保持部31に保持させる。
【0109】
ステップb8では更に詳しくは推定利得計算部36を起動し、割付対象xの資源継承関係にある割付対象から資源要素毎の利得値を求め、求めた利得値を利得保持部37に保持させる。
ステップb9では割付候補資源要素保持部31に保持されている資源要素のうち、ステップb8で求められ、利得保持部37に保持されている利得値が最大の資源要素の集合RSを求め、割付候補資源要素保持部31の内容を一旦空にし、集合RSに属する資源要素を格納する。
【0110】
ステップb10では集合RS内の資源要素が属する資源の集合RESを求め、評価資源保持部41に格納する。
ステップb11では評価資源保持部41に保持されている集合RESに複数の資源が存在する場合にステップb12を行ない、そうでない場合はステップb14を行なう。
【0111】
ステップb12では更に詳しくは資源別コスト計算部39を起動し、後順コスト値の算出を行ない、各資源毎の計算結果を資源別コスト保持部40に算出する。
ステップb13では評価資源保持部41に属しかつ、資源別コスト保持部40に格納されているコストが最小の資源が有する資源要素でありかつ、割付候補資源要素保持部31に保持されている資源要素を割付対象xに割り付け、ステップb1へ戻る。
【0112】
ステップb14では割付候補資源要素保持部31に保持されている資源要素を割付対象xに割り付け、ステップb1へ戻る。
ステップb15ではxと生存区間が重なる割付対象に多資源rhの資源要素が割付けられているときはその資源要素とは異なる多資源rhの資源要素を割付対象xに割り付け、ステップb1へ戻る。
【0113】
ステップb16では資源要素rを割付対象xに割り付け、ステップb1へ戻る。
割付候補資源要素保持部31は割付対象xについての割付可能資源要素を保持する。割付候補資源要素保持部31の保持内容及び当該保持内容の推移を図19(b)に示す。本図において右端に付された(a)、(d)、(e)、(f)・・・は図19(a)に示した(a)、(d)、(e)、(f)・・・に対応し、図26に示すプログラム例内の(a)、(d)、(e)、(f)・・・に対応している。ここで割付可能資源要素とは割付対象xと生存区間が重なる割付対象に割り付けられていない資源要素である。
【0114】
図19(b)の(a),(d)の状況ではD0、D1、D2、D3、A0、A1、A2、Mmが、割付可能資源要素となっていることがわかる。更に(f)の状態から(f-1)の状態へと遷移すると、資源要素D1が、割付可能資源要素として除外されていることがわかる。
割付可能資源要素検出部32はステップb3で起動され、割付可能資源要素を検出する。割付可能資源要素検出部32によって求められた割付可能資源要素の集合は割付候補資源要素保持部31に格納される。
【0115】
使用コスト計算部34はステップb4で起動され、使用コストを算出することで割付候補資源要素保持部31に保持されている各資源要素を割付対象xに割り付た場合に割付対象xの使用中間命令に対応する機械語命令がどれくらいのメモリサイズまたは実行時間数を費やするかを見積もり、各資源要素の選考を行う。また使用コスト計算部34は見積もり結果として算出したコスト値を各資源要素毎に使用コスト保持部35に保持させる。
【0116】
使用コスト保持部35はステップb4で算出された使用コスト計算部34の計算結果を保持する。
推定利得計算部36は使用コスト計算部34がメモリサイズまたは実行時間を見積もるのに対し、得失値を算出することで割付対象xに各資源要素を割り付けると、どれだけ転送命令が削除できるかを見積もり、各資源要素の選考を行う。
【0117】
利得保持部37はステップb9において推定利得計算部36によって算出された得失値の累計である利得値を保持する。利得保持部37の保持内容の一例を図21(a)に示す。本図において各記入欄には右端に「(d)」「(d-1)」「(d-2)」「(d-3)」「(d-4)」・・・・といった記号が付されているが、これは割付対象t265に対する推定利得計算部36での各資源要素の利得値の保持内容の推移が示されている。
【0118】
資源要素決定制御部38は割付資源決定の処理全体を制御する。
資源別コスト計算部39はステップb12において推定利得計算部36によって算出された利得値が複数の資源について最大であった場合、後順コスト値の計算を行なう。
資源別コスト保持部40は資源別コスト計算部39の計算結果である後順コスト値を資源毎に保持する。
【0119】
評価資源保持部41はステップb12における資源別コスト計算部39の計算によって有効であることが判明した資源を保持する。評価資源保持部41の保持内容の一例を図24(c)に示す。本図において各記入欄には右端に「(d)」「(d-1)」といった記号が付されているが、これは割付対象t265に対する資源別コスト計算部39での評価資源保持部41の保持内容の推移が示されている。
【0120】
<使用コスト計算部34の構成図>
図2に示した使用コスト計算部34は各割付対象の使用コストを算出するように構成されている。図3に使用コスト計算部34の構成を示す。
使用コスト計算部34はパタン保持部43と、演算コスト保持部44と、総コスト保持部46と、使用コスト計算制御部47とで構成される。
【0121】
図7は使用コスト計算制御部47のフローチャートである。
本フロ−チャ−トにおいて中間命令iは割付対象xが使用されている中間命令を表す。資源要素rは割付候補資源要素保持部31に保持されている資源要素を表す。コストパタンpは資源要素rを用いて中間命令iについて生成されたコストパタンを表す(尚、コストパタンについては後述する。)。
【0122】
本フロ−チャ−トは割付対象xの使用中間命令iの被演算子(オペランド)に資源要素rを用いた場合のコストパタンpを生成するステップc5と、生成したコストパタンpとマッチングするコストエントリを求めるステップc6と、求めたコストエントリを総コスト保持部46に加算するステップc7とが割付対象xの全ての使用中間命令に対して繰り返されるループ構造になっており(ステップc4〜c9)、このループ構造が更に割付可能な資源要素の全てについて繰り返される二重ループ構造になっている(ステップc2〜c10 尚、コストエントリについては後述する。)。
【0123】
以降、本フロ−チャ−トが有する各ステップを順を追って更に詳しく説明してゆく。
ステップc1では使用コスト保持部35の保持領域のうち、割付候補資源要素保持部31に保持されている資源要素に対応するものにはゼロを書き込み、そうでないものには「無効」を書き込む。
【0124】
ステップc2では割付候補資源要素保持部31に保持されている資源要素rの全てについてステップc3からc10を繰り返す。繰り返し終了後、使用コスト計算部34を終了する。
ステップc3では総コスト保持部46にゼロを保持させる。
ステップc4では入力として与えられた割付対象xを使用している中間命令を1つずつ取り出し、取り出した中間命令iについてステップc5からステップc9までの1連の処理を繰り返す。
【0125】
ステップc5では中間命令iにおいて割付対象xを使用している部分に資源要素rを当てはめて中間命令iに関するコストパタンpを生成し、パタン保持部43に保持させる。
ステップc6ではコストパタンpと演算コスト保持部44に保持されているコストエントリとのマッチングを行ない、マッチングするコストエントリe1を取り出す。
【0126】
ステップc7ではコストエントリe1のコストを取り出し、取り出したコストを総コスト保持部46に加算する。
ステップc8ではコストエントリe1のWORKに資源要素が設定されているか否かを判定し、設定されているときステップc9を行ない、そうでないときステップc4を行なう。WORKとは、コード生成装置14において機械語命令を生成する際に、中間命令iのオペランド及び演算結果に設定されている資源要素の他に、必要となる資源要素である。
【0127】
ステップc9では中間命令iを生存区間に含む割付対象に割付けている資源要素の集合R1を求め、コストエントリe1のWORKで指定されている資源要素r1が集合R1に存在するときはスピルコストを総コスト保持部46に加える。スピルコストとは資源要素r1の格納値を一旦スタックに退避し、中間命令iの使用後に復帰させるために要するコストである。スピルコストの加算後、ステップc4を行なう(以下では資源要素r1を中間命令iにおけるスピル資源要素と呼ぶことにする。)
ステップc10では割付対象xに資源要素rを割り付けたときの使用コストを総コスト保持部46に保持されている値として使用コスト保持部35に格納し、ステップc2を行なう。
【0128】
パタン保持部43はステップc5で生成されるコストパタンを保持する。コストパタンとは割付対象xを使用している中間命令を以下に示す4つの項目の組み合わせで表したものであり、使用コスト計算をより具体的にかつより精密に計算するために必要なものである。
(OP, OPR1, OPR2, RESULT)
OP ... この項目には「乗算」「加算」「代入」といった、中間命令の演算子の種類が設定される。
【0129】
OPR1... この項目は中間命令の第1オぺランド(OPが2項演算のときは左辺のオペランドに相当する。)と対応し、この第1オペランドがどう設定されているかが記述される。
第1オペランドが、即値に設定されていれば、即値を表す「IM」が設定される。また第1オペランドの割付対象が既に資源要素に割付けられていれば、当該資源要素が設定される。オペランドが即値でなくかつ資源要素も割付けられていないときは未割付けを表す「未」が設定される。またこの第1オぺランドの項目にはこの中間命令が終了点に相当するか否かを示す「K」か「N」の特性も付加される。
【0130】
OPR2...この項目には中間命令の第2オペランド(2項演算のときは右辺のオペランドが相当する。)に相当し、OPR1と同様な値が設定される。
RESULT...この項目には演算結果を保持させるための資源要素が、どの割付対象に割り付けられている資源要素と同一であるかを示す情報が設定される。
左辺に割付けられている資源要素とが同じときにはこのRESULTには「左同」、右辺と同じときに「右同」が設定され、左右辺と異なるときは「異」が設定される。また結果に資源要素が割付けられていないときは「未」が設定される。但し、代入演算及び比較演算のときはこの項は未設定である。
【0131】
(以下ではこの4つ組のパタンをコストパタンと呼ぶことにする。)
例えば、図26のプログラムの一例における中間命令i3「t1=t34+3」において割付対象t34がD0に割付けられ、割付対象t1が未割付けであるとする。このとき演算の種類の項目が「加算」に設定される。また中間命令i3は割付対象t34の終了中間命令であり、割付対象t34は割付対象D0に割付けられているからOPR1は「D0.K」に設定される。第2オペランドは即値3であるからOPR2は「IM」に設定される。演算結果のt1が未割付けであるからRESULTの項目は「未」が設定される。
【0132】
そのため中間命令i3「t1=t34+3」のコストパタンは(加算, D0.K, IM, 未)となる。
演算コスト保持部44は全てのコストパタンと、当該コストパタンに対応するコストとを欄とする演算コストテーブルを保持するものであり、使用コスト計算をより具体的にかつより精密に計算するために必要なものである。
【0133】
演算コストテーブルの一例を図20(a)に示す。コストパタンは先に述べたOP,OPR1,OPR2,RESULTからなる4つの項目と、当該項目の組み合わせにおいてオペランドや結果に割付けられている資源要素以外に必要な資源要素を示すWORKと、当該組み合わせのコスト値を示すCOSTとからなる(以下ではコストのテーブルの要素をコストエントリと呼ぶことにする。)
例えば、図20においてDn,Dmは資源DRの資源要素のうち、D0〜D3の何れであってもマッチングすることを示す。またAn,Amは資源ARの資源要素のうち、A0〜A2の何れかであってもマッチングすることを示す。IMは即値にマッチングすることを示す。Dn及びAnは「|」によって区切られているが、これは資源DRあるいは資源ARの何れの資源要素でもマッチングすることを示す。図20(a)(a)のコストエントリのように「K」「N」の特性がないものはコストパタンに「K」「N」の特性が付いているか否かにかかわらずそれとマッチングすることを表す。前述の「t1=t34+3」のコストパタン(加算,D0.K,IM,未)は図20(a)(b)のコストエントリにマッチングする。そのため当該コストパタンのコストは2となる。
【0134】
このようにマッチングされたコストは総コスト保持部46において総和される。
使用コスト計算制御部47は割付対象xを入力とし、割付対象xに割付候補資源要素保持部31に保持されている各資源要素を割り付けたときの使用コストを算出するよう、図7に示したフロ−チャ−トに従って制御を行う。
【0135】
<推定利得計算部36の構成>
推定利得計算部36は利得値を算出することで転送命令の削減度合を見積もるよう構成されている。図4(a)は推定利得計算部36の構成図である。
推定利得計算部36は利得推定制御部51と、追跡対象保持部52と、処理済割付対象保持部53と、既損失割付対象保持部54と、重複割付対象保持部55、得失保持部56とで構成される。
【0136】
利得推定制御部51は割付対象xについての利得値を計算するよう、処理制御を行う。
利得推定制御部51の処理内容を図8及び図9のフローチャートに示す。図8は利得推定制御部51の処理制御を示すメインフローであり、図9は得失計算処理のフローチャートである(このフローチャートによって表される得失値計算処理を得失計算ルーチンと呼ぶ。)。
【0137】
図8のフローチャートは割付対象xから資源継承関係を辿ってゆくための追跡対象を生成するステップd3と、追跡対象によって順々に資源継承関係を辿って行き、各資源要素の得失値を算出して資源要素の第1段階の再選考を行うステップd4と、第1段階の再選考の結果利得値が最大の資源要素が複数個である場合、割付対象xと生存区間が重なりかつ未割付けの割付対象の資源継承関係を辿って行き、各資源要素の得失値を算出して資源要素の第2段階の再選考を行うステップd12〜d17とを有している。
【0138】
本フロ−チャ−トの第2段階の再選考の部分は割付対象y(割付対象xと生存区間が重なる割付対象であって未割り付けである割付対象)に対して追跡対象を生成するステップd15と、その追跡対象について得失値を算出するステップd16と、算出された得失値に割付対象yの優先度を乗じた値を資源要素の利得値から減じるステップd17とが全ての割付対象yについて繰り返されるループ構造(ステップd12〜d17)になっている。
【0139】
以降、本フロ−チャ−トが有する各ステップを順を追って更に詳しく説明してゆく。
図8のステップd1では利得推定制御部51は利得保持部37および得失保持部56の各資源要素に対応する内容をゼロにする。
ステップd2では追跡対象保持部52、処理済割付対象保持部53、既損失割付対象保持部54を空にする。
【0140】
ステップ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に格納する。
【0141】
ステップd4では後述する得失計算ルーチンを呼び出し、得失計算を行ない、各資源要素毎の計算結果を得失保持部56に保持させる。
ステップd5では各資源要素毎に得失保持部56に格納されている値を利得保持部37に格納する。
ステップd6では割付候補資源要素保持部31に格納されている資源要素であり且つ利得保持部37に格納されている値が最大の資源要素の集合RSを求める。
【0142】
ステップd7では集合RSの要素数が複数個であるときステップd8を行なう。そうでないときは推定利得計算部36の処理を終了する。
ステップd8では割付対象xと生存区間が重なり且つ未割付けの割付対象が存在するときステップd9を行う。そうでないときは推定利得計算部36の処理を終了する。
【0143】
ステップd9では割付候補資源要素保持部31を一旦空にし、新たに集合RSの資源要素を全て格納する。
ステップd10では利得保持部37の各資源要素に対応する内容をゼロにし、追跡対象保持部52を空にする。
ステップd11では割付対象xと生存区間が重なり且つ未割付けの割付対象のみを重複割付対象保持部55に格納する。
【0144】
ステップd12では重複割付対象保持部55が空になるまでステップd13〜ステップd17までを繰り返す。空になったら推定利得計算部36の処理を終了する。
ステップd13では重複割付対象保持部55から割付対象yを一つ取り出し、重複割付対象保持部55から削除する。
【0145】
ステップ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に格納する。
【0146】
ステップd16では後述する得失計算ルーチンを呼び出し、得失計算を行ない、各資源要素毎の計算結果を得失保持部56に算出する。
ステップd17では各資源要素毎に得失保持部56に格納されている値に割付対象yの割付優先度を乗じた値を利得保持部37から減じてステップd12へ戻る。
【0147】
以上のように利得推定制御部51は割付対象xと資源継承関係にある割付対象から利得値を算出し(ステップd1〜ステップd5)、さらに算出した利得値が最大の資源要素が複数個あった場合、このうち、生存区間が重なる他の割付対象yに割り付けた方が転送命令が削減される可能性のある場合も考慮して最終的な利得値を算出している(ステップd9〜ステップd17)
特に割付対象xと生存区間が重なる割付対象yに関して算出された得失値は割付対象yに割り付けるとどれだけ有利な資源要素であるかを示している。この度合が大きい資源要素ほど、割付対象xに割り付けると転送命令が増加する事を示す。さらに割付対象yの中でも、割付優先度が小さいものはレジスタ等の個数が限られている資源要素に割り付けられる可能性も小さいのでその効果を小さく見積もる必要がある。よってステップd17において割付対象yに関して算出された得失値に割付対象yの割付優先度を乗じた値を利得保持部37から減じている。
【0148】
<得失計算ルーチンの詳細フロ−チャ−ト>
得失計算ルーチンは図8のステップd4からもステップd16からも呼び出されるサブルーチンであり、図8のフロ−チャ−トのステップd3及びステップd15で追跡対象保持部52に格納された全ての追跡対象に対して図9の処理を繰り返す。
【0149】
得失計算ルーチンには連続生存群(生存区間が連続し合う一連の割付対象の集合のことである。)において現在資源継承関係を辿っている箇所の割付対象A.ASOに資源要素が割付けられているかを判定するステップe3があり、このステップe3の判定結果に応じてステップe4が実行されるかステップe5〜ステップe10が実行されるかが切り換る。
【0150】
ステップe4では割り付けられていると判定された場合割付済みの割付対象まで辿り着いたとしてその資源要素の得失値を算出して得失値分だけ資源要素の利得値を増加する。これに対しステップe3において割り付けられてない場合、ステップe5〜ステップe10において割付対象A.ASOと生存区間が重なる側へと探索の域を広げる。具体的には割付対象A.ASOについての損失要因(利得値減少の要因となる割付対象)を算出するステップe5〜e8と、損失要因となる割付対象に割り付けられている資源要素の得失値を算出してその資源要素の利得値を得失値だけ減少させるステップe9と、減少後、割付対象A.ASOと資源継承関係にある割付対象について追跡対象を新たに生成するステップe10とを有し、追跡対象を保持する追跡対象保持部52内から追跡対象が無くなるまでステップe2〜e10を繰り返し、資源継承関係にある連続的に割付対象を順に追ってゆくループ構造になっている。
【0151】
以降本フロ−チャ−トが有する各ステップを順を追って更に詳しく説明してゆく。
ステップe1では追跡対象保持部52が空になるまでステップe2〜ステップe10まで繰り返す。空になったら得失計算ルーチンの処理を終了する。
ステップe2では追跡対象保持部52から追跡対象Aを一つ取り出し、追跡対象保持部52から削除し、さらに追跡対象Aの割付対象項目である割付対象A.ASOを処理済割付対象保持部53に格納する。
【0152】
ステップe3では割付対象A.ASOに資源要素rが割付けられているか判定し、割付けられているときはステップe4を行ない、そうでないときはステップe5を行なう。
ステップe4では資源要素rが追跡対象Aの資源要素集合の項目であるA.RESに属しているとき得失値 = 1 / 追跡対象Aの生存区間長の和A.LNSを求め、この値を得失保持部56の資源要素rの内容に加える。次にステップe1に戻る。
【0153】
ステップe5では割付対象A.ASOと生存区間が重なり、かつ資源要素に割り付けられている割付対象の集合OS1を求める。
ステップe6では集合OS1に属している割付対象に割付けられている資源要素の集合RS1を求める。
ステップe7では集合OS1に属しかつ、既損失割付対象保持部54に格納されていない割付対象xの集合OS2を求め、集合OS2の要素を既損失割付対象保持部54に格納する。
【0154】
ステップe8では集合OS2に属している割付対象に割付けられている資源要素の集合RS2を求める。
ステップe9では得失値 = 1 / 追跡対象Aの生存区間長の和A.LNSを求め、得失保持部56内の集合RS2に属する資源要素の内容から求めた得失値を減ずる。
【0155】
ステップe10では割付対象A.ASOと資源継承関係にある割付対象であり、かつ処理済割付対象保持部53に格納されていない割付対象yの全てに関して各々のy毎に追跡対象B(y)を生成し、B(y)の各項目を
追跡対象B(y)の割付対象 = B(y).ASO = y
追跡対象B(y)の生存区間長の和= B(y).LNS =
生存区間長の和 A.LNS + 割付対象A.ASOの生存区間長
追跡対象B(y)の資源要素集合= B(y).RES =
資源要素集合 A.RES − 集合RS1 に設定し、
生成した追跡対象B(y)を追跡対象保持部52に格納し、ステップe10の実行後、ステップe1に戻る。
【0156】
以上のように得失計算ルーチンはステップe10により資源継承関係にあるものを新たに追跡対象保持部52に追加することによって資源継承関係を辿ることを可能としている。この設定によって追跡対象が増えるので得失値算出のための探索の範囲がまた広がることになる。
追跡対象保持部52はステップd3、d15、e10において得失計算ルーチンの処理対象として生成された複数個の追跡対象を保持する。追跡対象保持部52の保持内容の一例を図21(c)に示す。本図において各記入欄には「(d)」「(d-1)」「(d-2)」「(d-3)」「(d-4)」・・・・といった記号が付されているが、これは割付対象t265に対する推定利得計算部36での追跡対象保持部52の保持内容の推移を示している。これらの記号「(d)」「(d-1)」「(d-2)」「(d-3)」「(d-4)」・・・・が付された追跡対象の割付対象は割付対象t265の得失値を計算する際に資源継承関係が辿られる割付対象を示している。これらの資源継承関係が辿られる割付対象が、割付対象t265の生存区間とどのような位置関係にあるかは図27に示す通りである。本図では得失値計算の対象となる割付対象t265を黒で塗り潰された縦線で示し、その得失値計算を行う際、資源継承関係が辿られてゆく割付対象を白抜きの縦線で示す。
【0157】
図21(c)の記入欄のうち、右端に「(d-1)」と付されたものは割付対象t265を構造体のメンバーとした追跡対象が生成されたことを示している。同様に右端に「(d-4)」と付されたものは割付対象t265の生存区間と重なる生存区間を有する割付対象p1を構造体のメンバーとした追跡対象が生成されたことを示している。同様に右端に「(d-6)」と付されたものは割付対象t265の生存区間と重なる生存区間を有する割付対象a3を構造体のメンバーとした追跡対象が生成されたことを示している。
【0158】
また右端に「(d-8)」と付されたものは割付対象t265の生存区間と重なる生存区間を有する割付対象a3と資源継承関係にある割付対象t263、t264、x2、x3を構造体のメンバーとした追跡対象が生成されたことを示している。
図21(c)における「(d-4)」では生存区間が重なり合う割付対象p1が割付対象t265についての追跡対象として選択されている。図21(c)における「(d-6)」では生存区間が重なり合う割付対象a3が割付対象t265についての追跡対象として選択されている。図21(c)における「(d-8)」では割付対象a3と資源継承関係になる割付対象t263,t264,x2,x3が割付対象t265についての追跡対象として選択されている。
【0159】
このように図21(c)を参照すれば割付対象t265の得失値を算出するために割付対象p1,a3,t263,t264,x2,x3まで探索の域が広がっていることがわかる。
処理済割付対象保持部53はステップe2において得失計算ルーチンの処理を完了することになる追跡対象の割付対象を保持する。特に処理済割付対象保持部53の役割は資源継承関係が直接または間接的に循環している場合、得失計算ルーチンの処理が無限に繰り返すことを防ぐためである。
【0160】
処理済割付対象保持部53の保持内容の一例を図22(a)に示す。本図において各記入欄には「(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に追加されてゆくことがわかる。
【0161】
既損失割付対象保持部54は得失計算ルーチンの過程で同じ割付対象に対して得失値を減ずる処理を2回以上行わないようにするため、ステップe7において損失要因として一度選択された割付対象を保持する。このように既損失割付対象保持部54が設られているのは損失要因の極端な見積りを避けるためである。例えば図14における割付対象xを保持する追跡対象をまずステップd3において追跡対象保持部52に格納したとする。その後に得失計算ルーチンが呼び出され、ステップe10で割付対象x3,x4, x5 を保持する追跡対象が追跡対象保持部52に格納されたとする。このときステップe7、e8がなく、ステップe9において集合RS2の代わりに集合RS1を用いるとすると、割付対象x4,x5を保持する追跡対象がステップe9で処理されると、き、割付対象x4, x5と生存区間が重なる割付対象x11の割付けられている資源要素D0の得失値が2回減じられる。さらにその後、割付対象x6を保持する追跡対象がステップe9で処理されると、きも同様に割付対象x11に割付けられている資源要素D0の得失値が減じられ、資源要素D0の得失値が極端に小さく算出されてしまう可能性がある。このことを防ぐためにステップe7において既損失割付対象保持部54に未格納の割付対象のみを得失値計算の対象としている。
【0162】
既損失割付対象保持部54の保持内容の一例を図22(b)に示す。本図において各記入欄には「(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に追加されてゆくことがわかる。
【0163】
重複割付対象保持部55は割付対象xと生存区間が重なりかつ、未だ資源要素を割付けていない割付対象を保持する。重複割付対象保持部55の保持内容の一例を図22(c)に示す。本図において各記入欄には右端に「(d)」「(d-1)」「(d-2)」といった記号が付されているが、これは割付対象t265に対する推定利得計算部36での重複割付対象保持部55の保持内容の推移を示している。特に右端に「(d)」と付されたものは割付対象t265の生存区間と重なる生存区間を有する割付対象p1、割付対象a3が重複割付対象保持部55に格納されたことを示す。
【0164】
得失保持部56はステップd4、d16において得失計算ルーチンの実行によって算出された得失値を各資源要素毎に保持する。得失保持部56の保持内容の一例を図21(b)に示す。本図において各記入欄には右端に「(d)」「(d-1)」「(d-2)」「(d-3)」「(d-4)」・・・・といった記号が付されているが、割付対象t265に対する推定利得計算部36での得失保持部56の保持内容の推移を示している。
【0165】
<資源別コスト計算部39の構成>
図4(b)に示した資源別コスト計算部39は割り付けられる順序が後の割付対象がより適切な資源要素に割り付けられるように構成されている。
資源別コスト計算部39は資源別コスト計算制御部501と、コストパタン保持部502と、資源演算コスト保持部503と、追跡対象保持部504と、資源別総コスト保持部505と、処理済割付対象保持部506と、重複割付対象保持部507とで構成される。
【0166】
資源別コスト計算制御部501は割付対象xについての資源別の使用コストを計算するよう、処理制御を行う。
資源別コスト計算制御部501の処理内容を図10及び図11のフローチャートに示す。図10は資源別コスト計算制御部の処理制御を示すメインフローであり、図11は後順コスト値計算処理のフローチャートである(このフローチャートによって表される後順コスト値計算処理を後順コスト値計算ルーチンと呼ぶ。)。
【0167】
図10のフローチャートは割付対象xから資源継承関係を辿ってゆくための追跡対象を生成するステップf3と、追跡対象によって順々に資源継承関係を辿って行き各資源の後順コスト値を算出して資源の第1段階の再々選考を行うステップf4と、第1段階の再々選考の結果後順コスト値が最小の資源が複数個である場合、割付対象xと生存区間が重なり且つ未割付けの割付対象の資源継承関係を辿って行き、各資源の後順コスト値を算出して資源要素の第2段階の再々選考を行うステップf15とを有している。
【0168】
本フロ−チャ−トの第2段階の再々選考の部分は割付対象y(割付対象xと生存区間が重なる割付対象であって未割り付けである割付対象)に対して追跡対象を生成するステップf14と、その追跡対象について後順コスト値を算出するステップf15と、算出された後順コスト値に割付対象yの優先度を乗じた値を資源の後順コスト値から減じるステップf16とが、全ての割付対象yについて繰り返されるループ構造(ステップf11〜f16)になっている。
【0169】
以降、本フロ−チャ−トが有する各ステップを順を追って更に詳しく説明してゆく。
ステップf1では資源別コスト保持部40および資源別総コスト保持部505の各資源に対応する内容をゼロにする。
ステップf2では追跡対象保持部504、処理済割付対象保持部506を空にする。
【0170】
ステップf3では割付対象xに対して追跡対象rA(x)を生成し、rA(x)の各項目を
追跡対象rA(x)の割付対象 = rA(x).ASO = x
追跡対象rA(x)の生存区間長の和= rA(x).LNS = 1に設定し、
生成した追跡対象rA(x)を追跡対象保持部504に格納する。
【0171】
ステップf4では後述する後順コスト値計算ルーチンを呼び出し、コスト計算を行ない、各資源毎の計算結果を資源別総コスト保持部505に算出する。
ステップf5では各資源毎に資源別総コスト保持部505に格納されている値を資源別コスト保持部40に格納する。
ステップf6では資源別コスト保持部40に格納されている値が最小である資源の集合Rを求め、評価資源保持部41を一旦空にし、集合Rに属する資源を格納する。
【0172】
ステップf7では集合Rの要素数が複数個であるときステップf8を行なう。そうでないときは資源別コスト計算部39の処理を終了する。
ステップf8では割付対象xと生存区間が重なり且つ未割付けの割付対象が存在するときステップf9を行う。そうでないときは資源別コスト計算部39の処理を終了する、
ステップf9では資源別コスト保持部40の各資源に対応する内容をゼロにし、追跡対象保持部504を空にする。
【0173】
ステップf10では割付対象xと生存区間が重なり且つ未割付けの割付対象のみを重複割付対象保持部507に格納する。
ステップf11では重複割付対象保持部507が空になるまでステップf12〜ステップf16までを繰り返す。空になったら資源別コスト計算部39の処理を終了する。
【0174】
ステップ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に格納する。
【0175】
ステップf15では後述する後順コスト値計算ルーチンを呼び出し、コスト計算を行ない、各資源毎の計算結果を資源別総コスト保持部505に算出する。
ステップf16では評価資源保持部41に格納されている各資源に対して資源別総コスト保持部505に格納されている値に割付対象yの割付優先度を乗じた値を資源別コスト保持部40から減じ、ステップf11へ戻る。
【0176】
以上のように資源別コスト計算制御部501は割付対象xと資源継承関係にある割付対象から後順コストを算出し(ステップf1〜ステップf5)、さらに算出したコストが最小の資源が複数個あった場合、このうち、生存区間が重なる他の割付対象yに関する後順コスト計算を行なうことにより割付対象yをも考慮した割付対象xに対する後順コストの算出を行っている(ステップf9〜ステップf16)
特にステップf15おいて求められる後順コストの大きい資源は割付対象xと生存区間が重なる割付対象yにとって後順コストがかかる資源であり、割付対象xに当該資源を含めて他に割付け可能な資源が存在するときは当該資源を割付対象xに割付ければ、割付対象yには後順コストのかからない資源を割り付けれる可能性が増す。よってステップf16では求めた後順コストを資源別コスト保持部40から減じている。またステップf16において求めた後順コストに割付対象yの優先度を乗じているのは割付対象yの中でも割付優先度が小さいものはレジスタ等の個数の限定された資源に割り付けられる可能性も小さいのでその効果を小さく見積もるためである。
【0177】
<後順コスト値計算ルーチンの詳細フローチャート>
図11は後順コスト値計算ルーチンのフローチャートである。後順コスト値計算ルーチンは割付対象rA.ASO中の使用中間命令についてコストパタンを生成するステップg5と、コストエントリとのマッチングをとり、コストエントリe1を取りだすステップg6と、当該コストエントリe1のコストcと、追跡対象rAの生存区間長の和であるrA.LNS とから後順コスト値 = コストc / rA.LNS を算出するステップg7と、算出した後順コスト値を資源rの後順コスト値に加えるステップg8とが割付対象rA.ASOに含まれる全ての使用中間命令に対して繰り返されるループ構造(ステップg4〜g8)になっており、
このループ構造が更に資源要素が再々選考に残った資源について繰り返される二重ループ構造(ステップg3)になっている。
【0178】
またこの二重ループ構造が更に追跡対象保持部504から追跡対象rAが取り出される度に起動され、また追跡対象保持部504には二重ループ構造が1度実行される度に現在資源継承関係を辿っている箇所の割付対象rA.ASOと資源継承関係にある割付対象が新たに格納される構造になっている(ステップg9)。そのため当該二重ループ構造は連続的に資源継承関係にある未割り付けの割付対象が処理されるまで繰り返される三重ループ構造になっている(ステップg1)。
【0179】
以降、本フロ−チャ−トが有する各ステップを順を追って更に詳しく説明してゆく。
ステップg1では追跡対象保持部504が空になるまでステップg2〜ステップg9まで繰り返す。空になったら後順コスト値計算ルーチンの処理を終了する。
【0180】
ステップg2では追跡対象保持部504から追跡対象rAを一つ取り出し、追跡対象保持部504から削除する。さらに追跡対象rAの割付対象項目である割付対象rA.ASOを処理済割付対象保持部506に格納する。
ステップg3では評価資源保持部41に保持されている資源であり、追跡対象rAの割付対象項目である割付対象rA.ASOに割付け可能な資源rの一つ一つについてステップg4〜ステップg8の一連の処理を繰り返す。繰り返し処理を終了したらステップg9を行なう。ここで割付対象rA.ASOに割付け可能な資源とは割付対象rA.ASOと生存区間が重なる割付対象に割付けられていない資源要素が属する資源のことである。つまり割付対象rA.ASOと生存区間が重なる割付対象にある資源が有する資源要素の全てが割付けられているとき当該資源は割付け不可能となる。
【0181】
ステップg4では割付対象rA.ASOを使用している中間命令を1つずつ取りだし、取り出した中間命令iについてステップg5〜ステップg8の一連の処理を繰り返す。繰り返し処理を終了したらステップg3に戻る。
ステップg5では中間命令iにおいて割付対象rA.ASOを使用している部分に資源rを割り付けて中間命令iに関するコストパタンpを生成し、コストパタン保持部502に保持させる。
【0182】
ステップg6ではコストパタン保持部502に格納されているコストパタンpと資源演算コスト保持部503に保持されているコストエントリとのマッチングを行ない、マッチングするコストエントリe1を取り出す。
ステップg7ではコストエントリe1のコストcを取りだし、当該コストcと、追跡対象rAの生存区間長の和であるrA.LNS とから後順コスト値 = コストc / rA.LNS を算出する。
【0183】
ステップg8ではステップg7で求めた後順コスト値を資源別総コスト保持部505の資源rの内容に加える。次にステップg4に戻る。
ステップg9では割付対象rA.ASOと資源継承関係にある未割付けの割付対象であり、かつ処理済割付対象保持部506に格納されていない割付対象yの全てに関して各々の割付対象y毎に追跡対象rB(y)を生成し、
rB(y)の各項目を
追跡対象rB(y)の割付対象 = rB(y).ASO = y
追跡対象rB(y)の生存区間長の和= rB(y).LNS =
生存区間長の和 rA.LNS + 割付対象rA.ASOの生存区間長
に設定し、生成した追跡対象rB(y)を追跡対象保持部504に格納してステップg1へ戻る。
【0184】
コストパタン保持部502は後順コスト値の計算のために図11のステップg5で生成されたコストパタンを保持している。このコストパタンはパタン保持部43が保持したものと同一の項目で構成されているので説明は省略する。コストパタン保持部502の保持内容の一例を図24(b)に示す。本図において各記入欄には右端に「(d)」といった記号が付されているが、これは割付対象t265に対する資源別コスト計算部39でのコストパタン保持部502の推移を示すものである。
【0185】
資源演算コスト保持部503は全てのコストパタンと、当該コストパタンに対応するコストとを欄とする演算コストテーブルを後順コスト値計算用に保持している。
資源演算コスト保持部503が保持する演算コストテーブルは図20(a)のうち、OP, OPR1, OPR2, RESULTからなる4つの項目と、当該項目の組み合わせのコスト値を示すCOSTからなる。
【0186】
追跡対象保持部504は後順コスト値計算ルーチンの処理対象となる複数個の追跡対象を保持する。追跡対象保持部504に保持される追跡対象は推定利得計算部36で使用する追跡対象保持部52によって保持される追跡対象と異なり、割付可能な資源要素の集合がメンバから省かれている。そのため追跡対象保持部504に保持される追跡対象は割付対象と生存区間長の和の2項目のデータで構成されている。本実施形態では追跡対象保持部52で保持される追跡対象と区別するため、追跡対象において現在資源継承関係を辿っている箇所の割付対象をASO、そこまでの生存区間長の和をLNSで表現し、これらを参照する場合は割付対象rA.ASO、生存区間長の和rA.LNSというように先頭に「r」を付けて表している。
【0187】
資源別総コスト保持部505は後順コスト値計算ルーチンで算出されるコストを保持する。
処理済割付対象保持部506は推定利得計算部36の処理済割付対象保持部53同様、後順コスト値計算ルーチンの処理を完了した割付対象を保持する。処理済割付対象保持部53同様、処理済割付対象保持部506の役割も、資源継承関係が直接または間接的に循環している場合、後順コスト値計算ルーチンの処理が無限に繰り返すことを防ぐために備えられている。処理済割付対象保持部506の保持内容の一例を図24(a)に示す。本図において各記入欄には右端に「(d)」「(d-1)」「(d-2)」「(d-3)」「(d-4)」・・・・といった記号が付されているが、これは割付対象t265に対する資源別コスト計算部39での処理済割付対象保持部506の推移を示すものである。本図の記入欄のうち、右端に「(d-1)」と付されたものは割付対象t265に対する資源別コスト計算部39での処理済みの初期の時点での割付対象を示している。これが、「(d-1)」「(d-2)」「(d-3)」「(d-4)」・・・・というように下欄に進むにつれ、割付対象t265の生存区間と重なる生存区間を有する割付対象a3及び割付対象a3と資源継承関係にある割付対象x2、x3をメンバーとした追跡対象が処理済割付対象保持部506に追加されてゆくことがわかる。
【0188】
重複割付対象保持部507は割付対象xと生存区間が重なりかつ、未だ資源要素を割付けていない割付対象を保持する。重複割付対象保持部507の保持内容の一例を図24(d)に示す。本図において各記入欄には右端に「(d)」「(d-1)」「(d-2)」・・・・といった記号が付されているが、これは割付対象t265に対する資源別コスト計算部39での重複割付対象保持部507の推移を示す。右端に「(d)」と付されたものは割付対象t265の生存区間と重なる生存区間を有する割付対象p1、割付対象a3が重複割付対象保持部507に格納されたことを示す。
【0189】
以上のように構成される本実施形態の資源割付装置における具体的な処理内容をこれまでに示したフローチャートを再度参照しながら説明する。
まず前提としてここで扱う資源をアドレスレジスタ(AR)、データレジスタ(DR)、多資源をメモリ(Mm)とする。また資源ARの資源要素をA0,A1,A2とし、資源DRの資源要素をD0,D1,D2,D3とし、また多資源Mmも資源要素とする。
【0190】
また資源別の機能制限として資源ARはメモリの間接参照機能を持つが、資源DRは持たないとする。さらに資源DRは乗除算演算の被演算子となりうるが、資源ARはならないとする。更に関数の引数渡しに使用する引数レジスタ、および関数呼び出しにおいて破壊レジスタをD0,D1,A0とし、関数の戻り値に使用する戻り値レジスタをD0,A0とし、戻り値のデータ型によってD0,A0の使用区別を行なうものとする。
【0191】
図25のC言語記述のプログラムに対して既に構文解析装置11および最適化装置12によって図26(1)のような3番地形式の中間プログラムが出力されている。さらに最適化装置12によって中間プログラムから基本ブロックが抽出され、制御フロー情報、およびデータフロー情報が得られている。図26(1)では特に矢印↑は間接参照演算を表しており、図中の変数Ar1,Ar2, Frはそれぞれ関数の実引数および関数の戻り値を保持させる変数を表している。
【0192】
この状態で資源割付装置13に処理が移る。資源割付制御部27は割付対象生成部22を起動する。割付対象生成部22は制御フロー情報、およびデータフロー情報から変数に対する割付対象を生成する(ステップa1)。その結果図17のn10からn15までの情報が得られる。図17は以下で行う割り付け処理により資源要素が割付けられるものを表し、図18は実引数(Ar)、関数の戻り値(Fr)、破壊レジスタ(Br)を表す割付対象を示している。さらに図26(2)は生存区間を実線で示したものである。図26(2)および図17において変数t26のように生存区間が複数存在する変数はそれぞれ別々に割付対象になるのでt261, t262のように区別される。
【0193】
図17に示された割付対象の情報は図1中の割付対象保持部21に保持される。
次に資源割付制御部27は生存区間重複割付対象検出部23を起動する。生存区間重複割付対象検出部23は割付対象保持部21に保持されている各々の割付対象に関して生存区間が重なる割付け対象を求める(ステップa2)。その結果図17のn16の情報が得られる。
【0194】
次に資源割付制御部27は資源継承割付対象検出部24を起動する。資源継承割付対象検出部24は割付対象保持部21に保持されている各々の割付対象に関して資源継承関係にある割付対象を求める(ステップa3)。その結果図17のn17の情報が得られる。
次に資源割付制御部27は割付優先度計算部25を起動する。割付優先度計算部25は各割付対象に関して次の式により割付優先度を計算する(ステップa4)。
【0195】
割付優先度=使用率
=使用中間命令が存在するループレベルの総和/生存区間の長さ
次に資源割付制御部27は割付資源要素決定部26を起動する。割付資源要素決定部26は割付優先度の高い割付対象から順に資源要素を割付対象に割付ける(ステップa5)。
【0196】
ここで割付資源要素決定部26の処理を図6に示す資源要素決定制御部38のフローチャートを参照しながら説明する。
<(a)割付対象t262を対象とした処理内容>
先ず、資源要素決定制御部38は未割付けの割付対象が存在するか否か判定し、未割付けの割付対象のうち、割付優先度が最大の割付対象t262を取り出す(ステップb1、b2)。
【0197】
次に資源要素決定制御部38は割付可能資源要素検出部32を起動する(ステップb3)。割付可能資源要素検出部32は生存区間が重なる割付対象に割付けられていない資源要素である、D0,D1,D2,D3,A0,A1,A2と多資源要素のMmを割付候補資源要素保持部31に保持させる(図19(b)の(a))。次に資源要素決定制御部38は使用コスト計算部34を起動する(ステップb4)。
【0198】
使用コスト計算部34は割付対象t262の使用箇所において割付候補資源要素保持部31に保持されている資源要素を使用したときの使用コストを各資源要素毎に求める。
<(a-1)割付対象t262の使用中間命令i10と、資源要素D0とを対象にした処理内容>
ここでさらに使用コスト計算部34の処理内容を図7に示す使用コスト計算制御部47のフローチャートを参照しながら説明する。
【0199】
次に使用コスト計算制御部47は使用コスト保持部35の各資源要素の内容にゼロを保持させる(ステップc1)。
次に使用コスト計算制御部47は割付候補資源要素保持部31に格納されており、未だ使用コストを算出していない資源要素D0を取り出す(ステップc2)。
次に使用コスト計算制御部47は総コスト保持部46にゼロを保持させる(ステップc3)。
【0200】
次に使用コスト計算制御部47は割付対象t262の使用中間命令のうち、D0について未だ使用コストの計算を行なってい中間命令i10を取り出す(ステップc4)。
次に使用コスト計算制御部47は使用中間命令i10に対して コストパタン(代入,D0.N,D0.K,-)を生成し、パタン保持部43に保持させる(ステップc5)。
【0201】
次に使用コスト計算制御部47は演算コスト保持部44に保持されている図20(a)の演算コストテーブルと、パタン保持部43に保持されているコストパタンとのマッチングをとる。このとき図20(a)の(c)のコストエントリとマッチングが成立し、コスト0を得、得られたコストを総コスト保持部46に保持されている値に加える(ステップc6、c7)。
【0202】
次に使用コスト計算制御部47はマッチングしたコストエントリのWORK項目が未設定であると判定してステップc4を行なう。
<(a-2)t262の中間命令i11と、資源要素D0とを対象にした処理内容>
次に使用コスト計算制御部47は割付対象t262のD0について未だ使用コストを計算していない中間命令i11を取り出し、コストパタン(加算,D0.K,IM,未)を生成しパタン保持部43に保持させる。図20(a)の演算コストテーブルの(b)のコストエントリとマッチングを成立させてコスト2を得て総コスト保持部46に加える。次にマッチングしたコストエントリのWORK項目が未設定であると判定してステップc4を行なう(ステップc4からc8)。
【0203】
次に使用コスト計算制御部47は資源要素D0について未だ使用コストを計算していない割付対象t262の中間命令が存在しないことを検出し、総コスト保持部46に保持されている値をt262にD0を割付けたときの使用コストととして使用コスト保持部35のD0の内容に保持させる(ステップc4、c10)。
<(a-3)t262の中間命令i10、i11と、資源要素D1とを対象にした処理内容>
次に使用コスト計算制御部47は割付候補資源要素保持部31にから未だ使用コストを算出していない資源要素D1を取り出し、資源要素D0のときと同様に割付対象t262の中間命令i10,i11に対してそれぞれ、コストパタン(代入,D1.N,D0.K,-)(加算,D1.K,Im,未)を生成し、演算コストテーブルとマッチングをとり、それぞれ図20(a)の(d),(b)のコストエントリとマッチングしてそれぞれコスト1,2を得る。そしてその和3を総コスト保持部46に得て使用コスト保持部35のD1の欄に保持させる(ステップc2からc8)。
【0204】
次に使用コスト計算制御部47は資源要素D2,D3,A0,A1,A2 に関しても、資源要素D1と同様に計算を行い、使用コストの結果を得る。
次に使用コスト計算制御部47は割付候補資源要素保持部31にから未だ使用コストを算出していない資源要素Mmを取り出し、割付対象t262の中間命令i10,i11に対してそれぞれ、コストパタン(代入,Mm.N,D0.K,-)(加算,Mm.K,Im,未)を生成し、演算コストテーブルとマッチングをとり、それぞれの図20(a)の(e),(f)のコストエントリとマッチングしてそれぞれコスト 2, 3 を得る。そしてその和 5 を総コスト保持部46に得て使用コスト保持部35のMmの欄に保持させる(ステップc2からc7)。また図20(a)(f)のコストエントリのWORK項目が指定されているが、中間命令i11におけるスピル資源要素が存在しないのでスピルコストを総コスト保持部46には算入しない(ステップc8、c9)。
【0205】
次に使用コスト計算制御部47は割付候補資源要素保持部31に格納されており、未だ使用コストを求めていない資源要素が存在しないことを判定し(ステップc2)、使用コスト計算部34の処理を終え、ステップb4へ戻る。尚、この時点での使用コスト保持部35の内容は図20(b)の(a)のように得られる。
資源要素決定制御部38は使用コスト保持部35を参照して多資源であるMmのコストが最小でないとことを判定して(ステップb5)、ステップb6を行なう。
【0206】
次に資源要素決定制御部38は使用コスト保持部35を参照して使用コストが最小である資源要素D0が存在することを判定し、資源要素D0を割付対象t262に割付ける(ステップb6、b16、図19(a)の(a)、図20(b)の(a))。
<(b)(c)割付対象t263、t264を対象とした処理内容>
次に資源要素決定制御部38はステップb1に戻り、未割付けの割付対象 t263, t264についても割付対象t262と同様に割付け処理を行ない、図19(a)の(b)(c)のようにD0を割り付ける。
<(d)割付対象t265を対象とした処理内容>
次に資源要素決定制御部38は未割り付けで優先度が高いt265を取り出す(ステップb1、b2)。
【0207】
次に資源要素決定制御部38は割付可能資源要素検出部32を起動し、割付可能な資源要素、D0,D1,D2,D3,A0,A1,A2,Mmを得て割付候補資源要素保持部31に保持させる(ステップb3、図19(b)の(d))。
次に資源要素決定制御部38は使用コスト計算部34を起動し、割付候補資源要素保持部31の各資源要素に関して図20(b)(d)のように使用コストを計算する(ステップb4)。
【0208】
次に資源要素決定制御部38は多資源であるメモリが最小の使用コストとなっているかを判定するが、そうでないのでステップb6を行う(ステップb5)。
次に資源要素決定制御部38は使用コストが最小である資源要素が唯一つかどうかを判定するが、そうでないのでステップb7を行う(ステップb6)。
次に資源要素決定制御部38は使用コストが最小でない資源要素を割付候補資源要素保持部31の割付候補集合から削除する(ステップb7、図19(b)の(d-1))。
【0209】
次に資源要素決定制御部38はt265を入力として推定利得計算部36を起動し、割付候補資源要素保持部31に保持されている各資源要素に関して利得計算を行う(ステップb8)。
<割付対象t265に関するステップd1以降の処理>
ここでさらにt265に関して推定利得計算部36の処理内容を図8、図9に示す利得推定制御部51のフローチャートを参照しながら説明する。
【0210】
まず利得推定制御部51は利得保持部37および得失保持部56の各資源要素に対応する内容をゼロにする(ステップd1、図21(a)の(d)、図21(b)の(d))。
次に利得推定制御部51は追跡対象保持部52、処理済割付対象保持部53、既損失割付対象保持部54を空にする(ステップd2、図21(c)の(d)、図22(a)の(d)、図22(b)の(d))。
【0211】
次に利得推定制御部51は割付対象t265に対して追跡対象A1を生成し、A1の各項目を図17からA1.ASO = t265 A1.LNS = 1 A1.RES = D0, D1, D2, D3, A0, A1, A2に設定する。 次に図21(c)の(d-1)のようにA1を追跡対象保持部52に格納する(ステップd3) 図21(c)の(d-1)では追跡対象を(A1, t265, 1, (D0,D1,D2,D3,A0,A1,A2))で表現し、各項目は(追跡対象名、割付対象、生存区間長の和、資源要素集合)を示す。
【0212】
次に利得推定制御部51は得失計算ルーチンを呼び出す。
<追跡対象A1の処理>
ここでさらに割付対象t265に関する利得推定制御部51の処理内容を図9に示すフローチャートを参照しながら説明する。
まず、ステップe1、ステップe2では追跡対象A1を追跡対象保持部52から取り出し、追跡対象保持部52から削除する。さらに追跡対象A1の割付対象項目である割付対象t265を処理済割付対象保持部53に格納する(図21(c)の(d-2)、図22(a)の(d-1))。
【0213】
次にステップe3では追跡対象A1の割付対象項目である割付対象t265は資源要素に割り付けられていないのでステップe5に進む。
次にステップe5〜ステップe9では集合OS1が空であるので集合RS1、集合OS2、集合RS2が空となり得失値は計算されない(図22(b)の(d-1))。
【0214】
次にステップe10では追跡対象A1の割付対象項目である割付対象t265と資源継承関係にある割付対象が存在しないので新しい追跡対象は生成されない。次にステップe1へ戻る。
次にステップe1において追跡対象保持部52が(図21(c)の(d-2))のように空なので得失計算ルーチンの処理を終了し、ステップd4に戻る。
【0215】
<割付対象t265に関するステップd5以降の処理>
ここでさらに割付対象t265に関する利得推定制御部51の処理内容を図8に示すフローチャートのステップd5以降を参照しながら説明する。
まず、利得推定制御部51は図21(b)の(d)に示す得失保持部56の値を利得保持部37に格納する(ステップd5、図21(a)の(d-1))。
【0216】
次に利得推定制御部51は図21(a)の(d-1)に示す利得保持部37に格納されている値が最大の資源要素の集合RS=(D0, D1, D2, D3, A0, A1, A2)を求める(ステップd6)。
次に利得推定制御部51は集合RSの要素数が複数個であり、割付対象t265と生存区間が重なり且つ未割付けの割付対象 p1, a3 が存在するのでステップd9を行う(ステップd7、ステップd8)。
【0217】
次に利得推定制御部51は集合RSを割付候補資源要素保持部31に格納し、利得保持部37の各資源要素に対応する内容をゼロにし、追跡対象保持部52を空にし、重複割付対象保持部55に割付対象t265と生存区間が重なり且つ未割付けの割付対象p1, a3 を重複割付対象保持部55に格納する(ステップd9、ステップd10、ステップd11、図19(b)(d-2)、図21(c)の(d-3)、図21(a)の(d-2)、図22(c)の(d))。
【0218】
次に利得推定制御部51は重複割付対象保持部55から割付対象p1を取り出し、重複割付対象保持部55から削除する(ステップd12、ステップd13、図22(c)の(d-1))。
次に得失保持部56の各資源要素に対応する内容をゼロにし、利得推定制御部51は処理済割付対象保持部53、既損失割付対象保持部54を空にする(ステップd14、図21(b)の(d-1)、図22(a)の(d-2)、図22(b)の(d-2))。
【0219】
次に利得推定制御部51は割付対象p1に対して追跡対象A2を生成し、A2の各項目を図17からA2.ASO = p1,A2.LNS = 1,A2.RES = D0, D1, D2, D3, A0, A1, A2に設定する。 次に図21(c)の(d-4)のようにA2を追跡対象保持部52に格納する(ステップd15)。
次に利得推定制御部51は得失計算ルーチンを呼び出す。
【0220】
ここでさらに割付対象t265に関する利得推定制御部51の処理内容を図9に示すフローチャートを参照しながら説明する。
<追跡対象A2の処理>
まず、ステップe1、ステップe2では追跡対象A2を追跡対象保持部52から取り出し、追跡対象保持部52から削除する。さらに追跡対象A2の割付対象項目である割付対象p1を処理済割付対象保持部53に格納する(図21(c)の(d-5)、図22(a)の(d-3))。
【0221】
次にステップ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) を求める。
【0222】
次にステップe7、ステップe8では既損失割付対象保持部54が図22(b)の(d-2)のように空なので集合OS2 = (Ar11, Fr1, Ar12, Ar22, Fr2, Ar13, Ar23, Fr3, Br1, Br2, Br3, t262, t263, t264)、集合RS2 = (D0, D1, A0) となり、既損失割付対象保持部54は図22(b)の(d-3)となる。
次にステップe9では得失値 = 1 / A2.LNS = 1 を求め、図21(b)の(d-1)の得失保持部56の資源要素D0, D1, A0の内容から減ずる(図21(b)の(d-2))。
【0223】
次にステップe10では追跡対象A2の割付対象項目である割付対象p2と資源継承関係にある割付対象が存在しないので新しい追跡対象は生成されない。次にステップe1へ戻る。
次にステップe1において追跡対象保持部52が(図21(c)の(d-5))のように空なので得失計算ルーチンの処理を終了し、ステップd16に戻る。
【0224】
<割付対象t265に関するステップd17以降の処理その1>
ここでさらに割付対象t265に関する利得推定制御部51の処理内容を図8に示すフローチャートのステップd17以降を参照しながら説明する。
まず、利得推定制御部51は図21(b)の(d-2)に示す得失保持部56に格納されている値に割付対象p1の割付優先度0.27を乗じた値を利得保持部37から減ずる。つまり、図21(b)の(d-2)のように得失値がマイナスであるところは最終的に図21(a)の(d-3)のように各値を加算することになる。 次にステップd12へ戻る(ステップd17)。
【0225】
次に利得推定制御部51は重複割付対象保持部55から割付対象a3を取り出し、重複割付対象保持部55から削除する(ステップd12、ステップd13、図22(c)の(d-2))。
次に利得推定制御部51は得失保持部56の各資源要素に対応する内容をゼロにし、処理済割付対象保持部53、既損失割付対象保持部54を空にする(ステップd14、図21(b)の(d-3)、図22(a)の(d-4)、図22(b)の(d-4))。
【0226】
次に利得推定制御部51は割付対象a3に対して追跡対象A3を生成し、A3の各項目を図17および図19(b)の(d-2)からA3.ASO = a3,A3.LNS = 1,A3.RES = D0, D1, D2, D3, A0, A1, A2に設定する。 次に図21(c)の(d-6)のようにA2を追跡対象保持部52に格納する(ステップd15)。
次に利得推定制御部51は得失計算ルーチンを呼び出す(ステップd16)
ここでさらに割付対象t265に関する利得推定制御部51の処理内容を図9に示すフローチャートを参照しながら説明する。
【0227】
<追跡対象A3の処理>
まず、ステップe1、ステップe2では追跡対象A3を追跡対象保持部52から取り出し、追跡対象保持部52から削除する。さらに追跡対象A3の割付対象項目である割付対象a3を処理済割付対象保持部53に格納する(図21(c)の(d-7)、図22(a)の(d-5))。
【0228】
次にステップe3では追跡対象A3の割付対象項目である割付対象a3は資源要素に割り付けられていないのでステップe5に進む。
次にステップe5〜ステップe9では集合OS1が空であるので集合RS1、集合OS2、集合RS2が空となり得失値は計算されない(図22(b)の(d-5))。
【0229】
次にステップe10では追跡対象A3の割付対象項目である割付対象a3と資源継承関係にある割付対象t263, t264, x2, x3 に対して図21(c)の(d-8)のように追跡対象A4, A5, A6, A7を生成する。ここで各追跡対象の生存区間長の和はA3.LNS の 1と、割付対象a3 の生存区間長 3 の和 4 となる。次にステップe1へ戻る。
【0230】
<追跡対象A4の処理>
次にステップe1、ステップe2では追跡対象A4を追跡対象保持部52から取り出し、追跡対象保持部52から削除する。さらに追跡対象A4の割付対象項目である割付対象t263を処理済割付対象保持部53に格納する(図21(c)の(d-9)、(図22(a)の(d-6))。
【0231】
次にステップe3では追跡対象A4の割付対象項目である割付対象t263は資源要素D0に割り付けられているのでステップe4に進む。
次にステップe4では得失値 = 1 / A4.LNS = 0.25 を求め、図21(b)の(d-3)の得失保持部56の資源要素D0の内容に加え、ステップe1へ戻る(図21(b)の(d-4))。
【0232】
<追跡対象A5の処理>
次に追跡対象A5に対しても、追跡対象A4と同様に処理され、追跡対象保持部52は図21(c)の(d-10)に得失保持部56は図21(b)の(d-5)に処理済割付対象保持部53は図22(a)の(d-7)に推移する(ステップe1〜ステップe4、ステップe11)。
【0233】
<追跡対象A6の処理>
次にステップe1、ステップe2では追跡対象A6を追跡対象保持部52から取り出し、追跡対象保持部52から削除する。さらに追跡対象A6の割付対象項目である割付対象x2を処理済割付対象保持部53に格納する(図21(c)の(d-11)、図22(a)の(d-8))。
【0234】
次にステップe3では追跡対象A6の割付対象項目である割付対象x2は資源要素に割り付けられていないのでステップe5に進む。
次にステップe5、ステップe6では集合OS1 = (Ar12, Ar22, Fr2, t263, Br2)、集合RS1 = (D0, D1, A0) を求める。
次にステップe7、ステップe8では既損失割付対象保持部54が図22(b)の(d-5)のように空であるので集合OS2 = (Ar12, Ar22, Fr2, t263, Br2)、集合RS2 = (D0, D1, A0) となり、既損失割付対象保持部54は図22(b)の(d-6)となる。
【0235】
次にステップe9では得失値 = 1 / A6.LNS = 0.25 を求め、図21(b)の(d-5)の得失保持部56の資源要素D0, D1, A0の内容から減ずる(図21(b)の(d-6))。
次にステップe10では追跡対象A6の割付対象項目である割付対象x2と資源継承関係にある割付対象a3は図22(a)の(d-8)の処理済割付対象保持部53に格納されているので追跡対象は生成されない。次にステップe1へ戻る。
【0236】
<追跡対象A7の処理>
次に追跡対象A7に対しても、追跡対象A6と同様に処理され、追跡対象保持部52は図21(c)の(d-12)に、得失保持部56は図21(b)の(d-7)に、処理済割付対象保持部53は図22(a)の(d-9)に推移する(ステップe1〜ステップe4、ステップe10)。
【0237】
次にステップe1において追跡対象保持部52が図21(c)の(d-12)のように空なので得失計算ルーチンの処理を終了し、ステップd16に戻る。
<割付対象t265に関するステップd17以降の処理その2>
ここでさらに割付対象t265に関する利得推定制御部51の処理内容を図8に示すフローチャートのステップd17以降を参照しながら説明する。
【0238】
まず、利得推定制御部51は図21(b)の(d-7)に示す得失保持部56に格納されている値に割付対象a3の割付優先度2.67を乗じた値を利得保持部37から減ずる。つまり、図21(b)の(d-7)のように得失値がマイナスであるところは最終的に図21(a)の(d-4)のように各値を加算することになる。 次にステップd12へ戻る(ステップd17)。
【0239】
次に利得推定制御部51は図22(c)の(d-2)に示す重複割付対象保持部55が空であるので推定利得計算部36を終了し、ステップb8に戻る。
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図7に示すフローチャートのステップb9以降を参照しながら説明する。
<割付対象t265に関するステップb9以降の処理>
まず、資源要素決定制御部38は図21(a)の(d-4)に示す利得保持部37に格納されている値が最大の資源要素の 集合RS = { D1, A0 }を求め、割付候補資源要素保持部31に格納する(図19(b)の(d-3))(ステップb9)。
【0240】
次に資源要素決定制御部38は集合RSの内容から集合RES = { AR, DR }を得え、評価資源保持部41に格納する(ステップb10、図24(c)の(d))。
次に資源要素決定制御部38は集合RESには二つの資源が存在するのでステップb12を行なう(ステップb11)
次に資源要素決定制御部38は資源別コスト計算部39を起動し、コストの算出を行なう(ステップb12)
<割付対象t265に関する資源別コスト計算部39の処理>
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図10に示すフローチャートを参照しながら説明する。
【0241】
まず、資源別コスト計算制御部501は資源別コスト保持部40および資源別総コスト保持部505の各資源要素に対応する内容をゼロにする(ステップf1、図23(a)の(d)、図23(b)の(d))。
次に資源別コスト計算制御部501は追跡対象保持部504、処理済割付対象保持部506を空にする(ステップf2、図23(c)の(d)、図24(a)の(d))。
【0242】
次に資源別コスト計算制御部501は割付対象t265に対して追跡対象rA1を生成し、rA1の各項目をrA1.ASO = t265,rA1.LNS = 1に設定する。 次に図23(c)の(d-1)のようにrA1を追跡対象保持部504に格納する(ステップf3) 図23(c)の(d-1)では追跡対象を(rA1, t265, 1)のように表現し、各項目は(追跡対象名、割付対象、生存区間長の和)を示す。
【0243】
次に資源別コスト計算制御部501は後順コスト値計算ルーチンを呼び出す(ステップf4)
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図11に示すフローチャートを参照しながら説明する。
<追跡対象rA1の処理>
まず、ステップg1、ステップg2では追跡対象rA1を追跡対象保持部504から取りだし、追跡対象保持部504から削除する。さらに追跡対象rA1の割付対象項目であるt265を処理済割付対象保持部506に格納する(図23(c)の(d-2)、図24(a)の(d-1))。
【0244】
次にステップg3では図24(c)の(d)の評価資源保持部41に格納されておりかつ、割付対象t265に割付け可能な資源AR, DRが存在するのでまず資源ARについてステップg4以降を行なう。
<資源ARについての処理>
次にステップg4においてまず、割付対象t265の使用中間命令i27が取り出され、ステップg5おいてコストパタン(間接参照, An, 未, -)が生成され、コストパタン保持部502に格納される(図24(b)の(d))。
【0245】
次にステップg6においてコストパタン(間接参照, An, 未)とマッチングするコストエントリである図20(a)の(g)が取り出される。
次にステップg7において取り出されたコストエントリのコスト 2 と、追跡対象rA1の生存区間長さの和であるrA1.LSNから後順コスト値 2/1 = 2を算出する。
【0246】
次にステップg8おいて求めた後順コスト値を資源別総コスト保持部505の資源ARの内容に加える(図23(b)の(d-1))。
次にステップg4に戻り、割付対象t265の中間命令i28が取り出され、コストパタン(加算, 未, An, 未)が生成され、このコストパタンとマッチングする図20(a)の(f)のコストパタンが取り出される。当該コストパタンのコスト3と、追跡対象rA1の生存区間長さの和であるrA1.LSNから後順コスト値 3/1 = 3が算出され、資源別総コスト保持部505の資源ARの内容に加算されて図23(b)の(d-2)となる。
【0247】
次にステップg4に戻るが、割付対象t265の中間命令が全て取り出されたのでステップg3に戻る。
<資源DRについての処理>
資源DRについても資源ARと同様にコストの算出を行なうと、図20(a)の(g)(f)のコストエントリにマッチングするので結果的に資源別総コスト保持部505は図23(b)の(d-3)となる。
【0248】
次にステップg3に戻るが、評価資源保持部41に格納されている資源AR, DR(図24(c)(d))全てについてコスト計算が終了したのでステップg9を行なう。
次にステップg9では割付対象t265と資源継承関係にある割付対象が存在しないので追跡対象は生成されない。
【0249】
次にステップg1に戻るが、図23(c)の(d-2)のように追跡対象保持部504が空なので後順コスト値計算ルーチンの処理を終了し、ステップf4に戻る。
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図10に示すフローチャートのステップf5以降を参照しながら説明する。
【0250】
<割付対象t265に関するステップf5以降の処理>
まず、ステップf5では資源別総コスト保持部505に格納されている値を資源別コスト保持部40に格納する(図23(a)の(d-1))。
次にステップf6では資源別コスト保持部40の値が最小である資源 AR, DR を求め、図24(c)の(d-1)のように評価資源保持部41に格納する。
【0251】
次にステップf7では資源別コスト保持部40の値が最小である資源が複数個であるのでステップf8を行なう。
次にステップf8では割付対象t265と生存区間が重なる割付対象p1, a3 が存在するのでステップf9を行う。
次にステップf9、f10では資源別コスト保持部40の内容をゼロにし、追跡対象保持部504を空にし、割付対象p1, a3 を重複割付対象保持部507に格納する(図23(a)の(d-2)、図23(c)の(d-3)、図24(d)の(d))。
【0252】
次にステップf11、f12、f13では重複割付対象保持部507から割付対象p1を取り出し、資源別総コスト保持部505の内容をゼロにし、処理済割付対象保持部506を空にする(図24(d)の(d-1)、図23(b)の(d-4)、図24(a)の(d-2))。
次にステップf14では取り出した割付対象p1に対して追跡対象rA2を生成し、rA2の各項目をrA2.ASO = p1rA2.LNS = 1に設定する。次に図23(c)の(d-4)のようにrA2を追跡対象保持部504に格納する。
次に資源別コスト計算制御部501は後順コスト値計算ルーチンを呼び出す(ステップf15)
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図11に示すフローチャートを参照しながら説明する。
【0253】
<追跡対象rA2の処理>
まず、ステップg1、ステップg2では追跡対象rA2を追跡対象保持部504から取りだし、追跡対象保持部504から削除する。さらに追跡対象rA2の割付対象項目である割付対象p1を処理済割付対象保持部506に格納する(図23(c)の(d-5)、図24(a)の(d-3))。
【0254】
次にステップg3では図24(c)の(d-1)の評価資源保持部41に格納されておりかつ、割付対象p1に割付け可能な資源AR, DR が存在するのでまず資源ARについてステップg4以降を行なう。
<資源ARについての処理>
割付対象p1の使用中間命令i5, i27, i29, i30に対してコストパタンがそれぞれ、(代入, An, 未, -)、(間接参照, 未, An, -)、(加算, An, IM, 左同)、(間接参照, 未, An, -)が生成され、それぞれ図20(a)のコストエントリ(h)(i)(a)(i)とマッチングとられ、追跡対象rA2の生存区間長の和であるrA2.LNSから後順コスト値を求めると、図23(b)の(d-5)のように資源別総コスト保持部505の資源ARの内容が更新される(ステップg4〜ステップg8)。
【0255】
<資源DRについての処理>
次にステップg3に戻り、資源DRが取り出され、割付対象p1の使用中間命令i5, i27, i29, i30に対してコストパタンがそれぞれ、(代入, Dn, 未, -)、(間接参照, 未, Dn, -)、(加算, Dn, IM, 左同)、(間接参照, 未, Dn, -)が生成され、それぞれ図20(a)のコストエントリ(h)(j)(a)(i)とマッチングをとり、追跡対象rA2の生存区間長の和であるrA2.LNSから後順コスト値を求めると、図23(b)の(d-6)のように資源別総コスト保持部505の資源DRの内容が更新される(ステップg4〜ステップg8)。
【0256】
次にステップg3に戻るが、条件を満たす資源がすべて取り出されたのでステップg9を行う。
次にステップg9では割付対象p1と資源継承関係にある割付対象が存在しないので新たに追跡対象は生成せずにステップg1へ戻る。
次にステップg1では図23(c)の(d-5)のように追跡対象保持部504が空であるので後順コスト値計算ルーチンの処理を終了し、ステップf15に戻る。
【0257】
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図10に示すフローチャートのステップf16以降を参照しながら説明する。
<割付対象t265に関するステップf16以降の処理その1>
まず、ステップf16では得失保持部56に格納されている値と、割付対象p1の優先度0.27から資源別コスト保持部40の資源AR, DRの内容は図23(a)の(d-3)のように更新される。
【0258】
次にステップf11、f12、f13では重複割付対象保持部507から割付対象a3を取り出し、資源別総コスト保持部505の内容をゼロにし、処理済割付対象保持部506を空にする(図24(d)の(d-2)、図23(b)の(d-7)、図24(a)の(d-4))。
次にステップf14では取り出した割付対象a3に対して追跡対象rA3を生成し、rA3の各項目をrA3.ASO = a3,rA3.LNS = 1に設定する。
【0259】
次に図23(c)の(d-6)のようにrA3を追跡対象保持部504に格納する。
次に資源別コスト計算制御部501は後順コスト値計算ルーチンを呼び出す(ステップf15)
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図11に示すフローチャートを参照しながら説明する。
【0260】
<追跡対象rA3の処理>
まず、ステップg1、ステップg2では追跡対象rA3を追跡対象保持部504から取りだし、追跡対象保持部504から削除する。さらに追跡対象rA3の割付対象項目である割付対象a3を処理済割付対象保持部506に格納する(図23(c)の(d-7)、図24(a)の(d-5))。
【0261】
次にステップg3では図24(c)の(d-1)の評価資源保持部41に格納されておりかつ、割付対象a3に割付け可能な資源AR, DRが存在するのでステップg4以降を行なう。
<資源ARについての処理>
割付対象a3の中間命令i20, i26, i28に対してコストパタンがそれぞれ、(加算, 未, 未, 異)、(加算, 未, 未, 異)、(加算, An, 未, 未)が生成され、図20のコストエントリ(k)(k)(l)とマッチングがとられ、図23(b)の(d-8)のように資源別総コスト保持部505の資源ARの内容が更新される(ステップg4〜ステップg8)。
【0262】
<資源DRについての処理>
次にステップg3に戻り、資源DRが取り出され、資源DRについてのも同様に処理を行うなわれ、図23(b)の(d-9)のように資源別総コスト保持部505の資源DRの内容が更新される(ステップg4〜ステップg8)。
次にステップg3に戻るが、条件を満たす資源がすべて取り出されたのでステップg9を行う。
【0263】
次にステップg9では割付対象a3と資源継承関係にある未割付けの割付対象であり、図24(a)の(d-5)の処理済割付対象保持部506に格納されていない割付対象x2, x3 に対して追跡対象rA4, rA5を図23(c)の(d-8)のように生成する。
<追跡対象rA4の処理>
次にステップg1、ステップg2では追跡対象rA4を追跡対象保持部504から取りだし、追跡対象保持部504から削除する。さらに追跡対象rA4の割付対象項目であるx2を処理済割付対象保持部506に格納する(図23(c)の(d-9)、図24(a)の(d-6))。
【0264】
次にステップg3では図24(c)の(d-1)の評価資源保持部41に格納されておりかつ、割付対象x2に割付け可能な資源AR, DRが存在するのでステップg4以降を行なう。
<資源ARについての処理>
割付対象x2の使用中間命令i12, i13, i20に対してコストパタンがそれぞれ、(加算, 未, IM, 異)、(加算, An, IM, 未)、(加算, 未, An, 未)が生成され、図20の(a)のコストエントリ(m)(b)(f)とマッチングがとられ、コスト値 8 が求めれられ、さらに追跡対象rA4の生存区間長の和の項目であるrA4.LNS が4であるから後順コスト値 = 8 / 4 = 2 となり、図23(b)の(d-10)のように資源別総コスト保持部505の資源ARの内容が更新される(ステップg4〜ステップg8)。
【0265】
<資源DRについての処理>
次にステップg3に戻り、資源DRが取り出され、資源DRについてのも同様に処理を行うなわれ、図23(b)の(d-11)のように資源別総コスト保持部505の資源DRの内容が更新される(ステップg4〜ステップg8)。
次にステップg3に戻るが、条件を満たす資源がすべて取り出されたのでステップg9を行う。
【0266】
次にステップg9では割付対象x2と資源継承関係にある唯一の割付対象a3が、図24(a)の(d-6)のように処理済割付対象保持部506に格納されていないるので新たな追跡対象は生成せずにステップg1へ戻る。
<追跡対象rA5の処理>
次にステップg1、ステップg2では追跡対象rA5を追跡対象保持部504から取りだし、追跡対象保持部504から削除する。さらに追跡対象rA5の割付対象項目であるx3を処理済割付対象保持部506に格納する(図23(c)の(d-10)、図24(a)の(d-7))。
【0267】
次に前述に追跡対象rA4の割付対象x2と同様に割付対象x3の使用中間命令i13, i26おける、資源AR, DR の後順コスト値が求められ資源別総コスト保持部505の資源AR、資源DRの内容が図23(b)の(d-12)のように更新される(ステップg3〜ステップg8)。
さらにステップg9では割付対象x3と資源継承関係にある唯一の割付対象a3が、図24(a)の(d-7)のように処理済割付対象保持部506に格納されていないるので新たな追跡対象は生成せずにステップg1へ戻る。
【0268】
次にステップg1では図23(c)の(d-10)のように追跡対象保持部504が空であるので後順コスト値計算ルーチンの処理を終了し、ステップf15に戻る。
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図10に示すフローチャートのステップf16以降を参照しながら説明する。
【0269】
<割付対象t265に関するステップf16以降の処理その2>
まず、ステップf16では得失保持部56に格納されている値と、割付対象a3の優先度2.67から資源別コスト保持部40の資源AR, DRの内容は図23(a)の(d-4)のように更新される。
次にステップf11に戻るが、図24(d)の(d-2)のように重複割付対象保持部507が空であるので資源別コスト計算部39の処理を終了し、ステップb12へ戻る。
【0270】
ここでさらに割付対象t265に関する資源別コスト計算部39の処理内容を図7に示すフローチャートのステップb13以降を参照しながら説明する。
<割付対象t265に関するステップb13以降の処理>
まず、資源要素決定制御部38は図24(c)の(d-1)の評価資源保持部41に属し、かつ図23(a)の(d-4)の資源別コスト保持部40に格納されているコストが最小の資源であり、かつ図19(b)の(d-3)の割付候補資源要素保持部31に格納されている資源要素D1を t265に割り付ける(ステップb13)。
【0271】
このような処理を全ての割付対象に対して行い、各割付対象に資源要素を割り付ける(尚、以上割付対象t265以降の割付対象については説明を省略する。)
このように本発明によれば、プログラム中の各割付対象の資源継承関係が広域的にどうなっているかを参照するため、より理想的な資源割付が行われる。
ネストレベルが深い箇所に優先してレジスタを割り付け、その割り付け済みのレジスタをネストレベルが浅くなる箇所に拡散してゆくようなスマートな割付結果が得られる。また使用頻度が高い箇所に優先してレジスタを割り付け、その割り付け済みのレジスタをネストレベルが低い箇所に拡散してゆくようなスマートな割付結果も得られる。更に引数レジスタ、戻り値レジスタ、破壊レジスタ等予め割り付ける相手が決められた割付対象がその資源を周りに拡げてゆくようなスマートな資源割り付けを実現できる。
【0272】
割付結果が非常に洗練されたものになるため最終的に生成する機械語プログラムのプログラムサイズおよび実行速度は一層向上する。
上記実施形態は使用コスト値計算、得失値計算、後順コスト値計算を順に行う構成で計算処理を階層的に詳細化する形で説明してきたが、本実施形態はその要旨を逸脱しない範囲で変更実施することができるのはゆうまでもない。代表的な2つの応用例を以下に示す。
【0273】
<応用例1>
特にコンパイラが生成する目的コードのサイズの縮小より実行時間の短縮を重視するときは割付対象xの使用中間命令iが存在するループレベルまたはiの実行回数が解るときはその実行回数をステップc7において取り出されるコストエントリe1のコストに乗じ、その乗じた値を総コスト保持部に加えてもよい(尚、ループレベルは図8の使用コスト計算制御部47のフローチャートのステップc4で検出され、使用コスト計算部34に入力される。)。
【0274】
<応用例2>
またステップb9で求められる資源要素の集合RSに複数個の資源要素が存在する場合、ステップb12における資源別コスト計算の後順コスト値計算においてステップb4で行った使用コスト計算と同様の処理をすることにより集合RSから更に最適な資源要素を選び出して割付対象xに割り付けてもよい。
【0275】
この場合、先ず、ステップg5からg8を更にステップc5からc9と同様な処理に置き換えて使用コストを算出するようにし、更に図10、図11における資源別総コスト保持部505を総コスト保持部46、資源別コスト保持部40を使用コスト保持部35、後順コスト値を使用コストに置き換える。そしてステップb11で集合RSの要素が複数かどうかで判定するようにする。
【0276】
更にステップb12及びステップf1からf6において割付対象xと資源継承関係にあるか、また間接的に資源継承関係にある未割り付けの割付対象x1に資源RSに属する資源要素を割り付けたときの使用コストを求め、求めた使用コストを更に割付対象xから割付対象x1に至る生存区間の長さで割り算した値を使用コスト保持部35に保持させるようにする。
【0277】
加えてステップf7において使用コスト保持部35に保持されている最小コストの資源要素が複数個存在するときステップf8を行い、ステップf8からステップf11において割付対象xと生存区間が重なりかつ未割り付けである割付対象x2と資源継承関係にあるか、あるいは間接的に資源継承関係にある未割り付けの割付対象x3に集合RSに属する資源要素を割り付けたときの使用コストを求め、求めた値を更に割付対象x2から割付対象x3に至る生存区間の長さで割り算した値に−1を乗じた値を使用コスト保持部35に保持させるようにする。
【0278】
このように使用コストを保持させた使用コスト保持部35の保持内容を参照し、保持内容が最小の資源要素を割付対象xに割り付ける。
<応用例3>
尚、本実施形態では、得失値として生存区間の和を用いているが、これを割付対象の個数としてもよい。例えば、図14において、割付対象xから割付対象x2に達するまでに存在する割付対象の個数3(割付対象x、x5、x6)を用いて割付対象x2に割り付けられた資源要素の得失値を1/3にしてもよい。
【0279】
<応用例4>
また、本実施形態では、正の符号を持つ得失値と、負の符号を持つ得失値を求めてそれの和を最終的な得失値としているが、これを別々に使用して、一方の得失値から割り付けレジスタの候補を絞り、更にもう一方の得失値から割り付けレジスタを決定してもよい。例えば、図15の割付対象xのレジスタ決定において、割付対象xに割付可能な資源要素をD1,D2,D3とする。このとき、割付け可能な資源要素のうち、先ず負の得失値が最小の資源要素を割付対象xの割り付け候補にする。但し、負の得失値が設定されていない資源要素に関しては、負の得失値を0とする。よって資源要素D2,D3の負の得失値は0になる。すると、資源要素D1の負の得失値は『Px/(L1+L2)』であるので、負の得失値が最大の資源要素はレジスタD2,D3となり、これを新たに割付対象xの割付け候補にする。
【0280】
次に正の得失値が最大の資源要素を割付対象xに割り付ける。但し、正の得失値が設定されていない資源要素に関しては正の得失値を0とする。よって資源要素D3の得失値は0となり、得失値が最大の資源要素D2を割付対象xに割り付ける。
【0281】
【発明の効果】
以上説明したように請求項1又は2記載の資源割付装置によれば、生存区間が連続し合うような位置関係にある複数個の割付対象群は生存区間長の短さに応じて得失値が増加され、また群中の割付対象のうち、割付済みの割付対象と生存区間が重複するものには異なる資源要素が割り付けられるので、生存区間が連続し合う複数個の割付対象が一律に同一の資源要素に割り付けられることはなく、また生存区間の遠近が影響するように資源割付が行われる。そのため周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【0282】
また請求項3記載の資源割付装置によれば、得失値が減少されることによって割り付けるべき割付対象からみて損失となるような位置の割付対象に割り付けられている資源要素は低く見積もられるようになるため、周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【0283】
また請求項4記載の資源割付装置によれば、未割り付けの割付対象が検出されることで割付済み割付対象に割り付けられている資源要素の得失値が複数回減じられ、他に比べて低く見積もられてしまうことを防止できる。
また請求項5記載の資源割付装置によれば、使用頻度又はネストレベルが高い順に資源要素が割り付けられてゆくため、生存区間の位置関係と、使用頻度及びネストレベルとを考慮した資源割付を実現でき、目的プログラムの品質を向上させることができる。
【0284】
また請求項6記載の資源割付装置によれば、得失値が減少されることによって割り付けるべき割付対象からみて損失となるような位置の割付対象に割り付けられている資源要素は低く見積もられるようになるため、周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【0285】
また請求項7記載の資源割付装置によれば、得失値が増加されることによって割り付けるべき割付対象からみて利得となるような位置の割付対象に割り付けられている資源要素は高く見積もられるようになるため、周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【0286】
また請求項8記載の資源割付装置によれば未割り付けの割付対象が検出されることで割付済み割付対象に割り付けられている資源要素の得失値が複数回減じられ、他に比べて低く見積もられてしまうことを防止できる。
また請求項9記載の資源割付装置によれば、得失値記憶部に記憶されている各資源要素の得失値が、第1及び第2の増加部によって増加され、得失値記憶部に記憶されている各資源要素の得失値が第1及び第2の減少部によって減少させられる。そのため割り付けるべき割付対象から見て同一の資源要素が利得になる箇所と損失になる箇所とに割り付けられていても、当該資源要素がどれだけの利得あるいは損失をもたらすかを客観的に評価でき、より綿密に資源割付を行える。または得失値記憶部は全ての資源要素と、各々の資源要素の得失値の累計の初期値とを対応づけて記憶しているので全ての資源要素が損失になるような位置に割り付けられていれば、どの割付対象にも割り付けられてない資源要素の得失値が大きく見積もられるようになる。そのためどの割付対象にも割り付けられてない資源要素を割り付けるべき割付対象に割り付けることができる。
【0287】
また請求項10記載の資源割付装置によれば、推定値を用いるか得失値を用いるかが切り換えられ、推定値を用いた場合、コードサイズ及び実行時間を資源割付に反映できるのでマイクロプロセッサの持つ命令の詳しいコスト情報を十分に活用でき、3種類以上の機能に別れている資源から割付対象を割付けるのにふさわしい複数の資源要素を選び出せる。機能が異なる資源を複数個備える組み込み用途向けのマイクロプロセッサのプログラムの開発にあたって本発明のコンパイラを使用すれば、そのマイクロプロセッサが備えている機能を充分に発揮する目的プログラムを作成することができる。
【0288】
また、請求項11記載の資源割付装置によれば、割付対象の定義命令及び使用命令を機械語命令化するのにどの資源の資源要素が適切であるかが綿密に判定されるのでターゲットマシンのマイクロプロセッサが備えている機能を充分に発揮する目的プログラムを作成することができる。
また、請求項12記載の資源割付装置によれば、割り付け済の資源要素について算出された得失値が複数個の異なる資源の資源要素同士で同一の大きさになった場合、優先度がより低い全ての割付対象に相応しいと予測された資源要素をもとに、割付手段が割り付けるべき割付対象に資源要素を割り付けるので、得失値による比較では優劣が付け難い場合に、より綿密な資源要素の選考を行うことができる。その結果として優先度がより低い全ての割付対象の定義命令、使用命令の実行時間および/又はコードサイズが小さくなるような資源割り付けを行うことができる。更にこのように資源要素を割り付ければ、次の割付対象の割り付ける際にその資源要素を継承できるので互いに生存区間が連続しあう割付対象が全て同一の資源要素を割り付ける可能性が高まる。
【0289】
また、請求項13記載の資源割付装置によれば、優先度がより低く、割り付けるべき割付対象より後に割り付けられる割付対象のうち、生存区間が連続し合うものの定義命令、使用命令の実行時間および/又はコードサイズの推定値の大きさと、および、未割り付けの割付対象が、割り付けるべき割付対象からどれだけ遠いかとに基づいて予測が行われるので割り付けるべき割付対象に近い位置にある割付対象の定義命令、使用命令の実行時間および/又はコードサイズが大きく見積もられ、割り付けるべき割付対象に遠い位置にある割付対象の定義命令、使用命令の実行時間および/又はコードサイズが小さく見積もられる。そのため互いに生存区間が連続しあう割付対象が同一の資源要素を割り付ければ可能性が高まる。その結果として後順の割付対象について実行時間および/又はコードサイズが小さくなるような資源要素の予測を確実に行うことができる。
【0290】
また、請求項14または15記載の資源割付装置によれば、優先度がより低く、割り付けるべき割付対象より後に割り付けられる割付対象のうち、生存区間が重なる側の割付対象の定義命令、使用命令の実行時間および/又はコードサイズの推定値の比較と、および、未割り付けの割付対象から割り付けるべき割付対象がどれだけ遠いかとに基づいて予測が行われるので後順の割付対象について実行時間および/又はコードサイズが小さくなるような資源要素の予測を確実に行うことができる。
【0291】
また、請求項16〜18記載の何れかの資源割付装置によれば、割付対象の定義命令及び使用命令を機械語命令化するのにどの資源の資源要素が適切であるかが綿密に判定されるので、後順の割付対象について実行時間および/又はコードサイズが小さくなるような資源要素の予測がより確実になる。
また、請求項19〜22記載の何れかの資源割付装置によれば、
引数レジスタ、戻り値レジスタ、破壊レジスタを他の割付対象に割り付けることができ、引数レジスタ、戻り値レジスタ、破壊レジスタの格納値をそのまま利用できるような資源割付が行える。そのため転送命令の削減数をより多くすることができる。
【0292】
また、請求項23〜26記載の何れかの資源割付装置によれば、
割り付けられるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数が算出され、算出結果が、逆数算出部によって生存区間の短さとされるので生存区間長の和を資源割付に反映させることができ、転送命令の削減数をより多くすることができる。

【0293】
また、請求項27又は28記載の資源割付装置によれば、
プログラム中の割付対象と、第1及び第2の集合化手段によって集合化された生存区間継承集合とが書き込み手段によって対応づけられて、生存区間継承関係集合記憶部に書き込まれるので、生存区間の継承、非継承をより効率良く判定することができる。
【0294】
また、請求項29記載の資源割付装置によれば、割り付けるべき割付対象には既に割り付けられた資源要素のうち、得失値が大きいものが割り付けられるので、資源要素を割付対象に割付ける過程において、割付対象への資源要素の割付け状況を綿密に判断することができる。そのため、メモリ、レジスタ間およびレジスタ、レジスタ間の転送命令も少なくなるので、最終的に生成される機械語プログラムのプログラムサイズおよび実行速度を向上させることができる。特にレジスタ数が少数であるターゲットマシンに対して資源割付けを行う場合、上述のプログラムサイズおよび実行速度の向上は特に顕著になる。
【0295】
また、請求項30記載の資源割付装置によれば、得失値が減少されることによって、割り付けるべき割付対象からみて損失となるような位置の割付対象に割り付けられている資源要素は低く見積もられるようになるため、周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【0296】
また、請求項31記載の資源割付装置によれば、得失値が減少されることによって、割り付けるべき割付対象からみて損失となるような位置の割付対象に割り付けられている資源要素は低く見積もられるようになるため、周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【0297】
また、請求項32記載の資源割付装置によれば、得失値が増加されることによって、割り付けるべき割付対象からみて利得となるような位置の割付対象に割り付けられている資源要素は高く見積もられるようになるため、周辺の割り付け状況が次回の資源割付に影響するようになり、転送命令の削減数をより多くすることができる。
【図面の簡単な説明】
【図1】実施形態に係る資源割付装置13の構成図である。
【図2】割付資源要素決定部26の構成図である。
【図3】使用コスト計算部34の構成図である。
【図4】(a)推定利得計算部36の構成図である。
(b)資源別コスト計算部39の構成図である。
【図5】資源割付制御部27のフローチャートである。
【図6】資源要素決定制御部38のフローチャートである。
【図7】使用コスト計算制御部47の制御内容を示すフローチャートである。
【図8】利得推定制御部51の制御内容を示すフローチャートである。
【図9】得失計算のフローチャートである。
【図10】資源別コスト計算制御部501の制御内容を示すフロ−チャ−トである。
【図11】後順コスト計算ルーチンのフロ−チャ−トである。
【図12】資源とコストとの対応を表す図である。
【図13】割付対象に各資源の資源要素を割り付けることでその割付対象が定義、使用されている中間命令のコストがどう増減するかを示した図である。
【図14】割付済みの割付対象の得失値がどう増減するかを示した説明図である。
【図15】割付済みの割付対象の得失値がどう増減するかを示した説明図である。
【図16】未割り付けの割付対象の後順コスト値がどういう値になるかを示した説明図である。
【図17】割付対象保持部21の保持内容の一例を示す図である。
【図18】割付対象保持部21の保持内容の一例を示す図である。
【図19】(a)割付状況テーブルの保持内容の推移の一例を示す図である。
(b)割付候補資源要素保持部31の保持内容の一例を示す図である。
【図20】(a)演算コストテーブルの一例を示す図である。
(b)使用コスト保持部35の推移の一例を示す図である。
【図21】(a)利得保持部37の保持内容の推移の一例を示す図である。
(b)得失保持部56の保持内容の推移の一例を示す図である。
(c)追跡対象保持部52の保持内容の推移の一例を示す図である。
【図22】(a)処理済割付対象保持部53の保持内容の推移の一例を示す図である。
(b)既損失割付対象保持部54の保持内容の推移の一例を示す図である。
(c)重複割付対象保持部55の保持内容の推移の一例を示す図である。
【図23】(a)資源別コスト保持部40の保持内容の推移の一例を示す図である。
(b)資源別総コスト保持部505の保持内容の推移の一例を示す図である。
(c)追跡対象保持部504の保持内容の推移の一例を示す図である。
【図24】(a)処理済割付対象保持部506の保持内容の推移の一例を示す図である。
(b)コストパタン保持部502の保持内容の推移の一例を示す図である。
(c)評価資源保持部41の保持内容の推移の一例を示す図である。
(d)重複割付対象保持部507の保持内容の推移の一例を示す図である。
【図25】高級言語で書かれたプログラムの一例を示す図である。
【図26】プログラム例に対する中間コードと割付対象の生存区間を示す図である。
【図27】図26中の割付対象t265について得失値が計算される際、資源継承関係が辿られる割付対象を図示した図である。
【図28】プログラムと、当該プログラム中の割付対象とを示した図である。
【図29】コンパイラの構成図である。
【図30】(a)〜(c)コンパイラによる処理過程を示す図である。
【図31】従来の資源割付装置63の構成を示す図である。
【図32】(a)(b)干渉グラフと、当該干渉グラフを頂点結合することで干渉グラフがどう変遷したかを示す図である。
【図33】(a)〜(i)干渉グラフが、グラフ縮退されてゆく様子を示す図である。
【図34】頂点結合による問題点を表した図である。
【符号の説明】
11 構文解析装置
12 最適化装置
13 資源割付装置
21 割付対象保持部
22 割付対象生成部
23 生存区間重複割付対象検出部
24 資源継承割付対象検出部
25 割付優先度計算部
26 割付資源要素決定部
27 資源割付制御部
31 割付候補資源要素保持部
32 割付可能資源要素検出部
34 使用コスト計算部
35 使用コスト保持部
36 推定利得計算部
37 利得保持部
38 資源要素決定制御部
39 資源別コスト計算部
40 資源別コスト保持部
41 評価資源保持部
43 パタン保持部
44 演算コスト保持部
46 総コスト保持部
47 使用コスト計算制御部
51 利得推定制御部
52 追跡対象保持部
53 処理済割付対象保持部
54 既損失割付対象保持部
55 重複割付対象保持部
56 得失保持部
63 資源割付装置
501 資源別コスト計算制御部
502 コストパタン保持部
503 資源演算コスト保持部
504 追跡対象保持部
505 資源別総コスト保持部
506 処理済割付対象保持部
507 重複割付対象保持部

Claims (32)

  1. 高級言語で書かれたプログラムを機械語プログラムに翻訳するコンパイラに用いられ、プログラミング言語で記述されたプログラムの中の変数と生存区間の組である割付対象を複数個生成し、生成した割付対象に順次レジスタ、メモリ等のハードウェアである資源が有する資源要素を割り付ける資源割付装置であって、
    次に割り付けるべき割付対象にどの資源要素が適切かを示す得失値を、資源要素に既に割り付けられた割付対象の生存区間と次に割り付けるべき割付対象の生存区間とがプログラムにおいてどのような位置関係にあるかに基づいて、各資源要素について算出する得失値算出手段と、
    各資源要素について算出された得失値の大きさに基づいて何れかの資源要素を割り付けるべき割付対象に割り付ける割付手段と、
    全ての割付対象が割り付けられるまで得失値算出手段及び割付手段の起動を繰り返す制御手段と
    を備えることを特徴とする資源割付装置。
  2. 請求項1記載の資源割付装置は、
    プログラム中の各割付対象の位置関係を判定する位置関係判定手段を有し、
    前記位置関係判定手段は、
    既に資源要素が割り付けられた割付対象の生存区間が、割り付けるべき割付対象の生存区間と重複しているかを判定する重複関係判定手段と、
    資源要素が既に割り付けられた割付対象の生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定する割付済み−被割付間連続判定手段とを備え、
    前記得失値算出手段は、
    割付済み−被割付間連続判定手段によって割り付けるべき割付対象と生存区間が連続していることが判定されると、資源要素が既に割り付けられた割付対象から割り付けるべき割付対象までの生存区間長の短さに応じて、連続が判定された割付済みの割付対象に既に割り付けられている資源要素の得失値を増加させる第1の増加部と、
    前記割付手段は、
    重複関係判定手段によって生存区間が重複していることが判定された重複している生存区間を有する割付済みの割付対象に割り付けられている資源要素を割り付けるべき割付対象に割り付けず、生存区間が重複していないことが判定された割付済みの割付対象のうち、得失値が最大の資源要素を割り付けるべき割付対象に割り付ける
    ことを特徴とする資源割付装置。
  3. 請求項2記載の資源割付装置において位置関係判定手段は、
    資源要素が既に割り付けられた割付対象と重なる生存区間を有する未割り付けの割付対象を検出する第1の割付済み側重なり割付対象検出手段と、
    検出された未割り付けの割付対象の生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定する未割り付け−被割付間連続判定手段とを備え、
    前記得失値算出手段は、
    連続すると判定されると、第1の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象から割り付けるべき割付対象までの生存区間長の短さに応じて、当該割付済みの割付対象に割り付けられている資源要素の得失値を減少させる第1の減少部
    を備えることを特徴とする資源割付装置。
  4. 請求項3記載の資源割付装置において第1の割付済み側重なり割付対象検出手段によって複数個の未割り付けの割付対象が判定された場合、
    前記未割り付け−被割付間連続判定手段は
    検出された複数個の未割り付けの割付対象のうち、何れかのものの生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定する
    ことを特徴とする資源割付装置。
  5. 請求項3記載の資源割付装置は、
    プログラムにおける割付対象の使用頻度及び/又は生存区間のネストレベルが反映された割付対象の優先度を各割付対象に対応づけて記憶する優先度記憶手段を備え、
    前記得失値算出手段及び割付手段は、優先度記憶手段が記憶する優先度順に、割り付けるべき割付対象を決定する
    ことを特徴とする資源割付装置。
  6. 請求項5記載の資源割付装置において位置関係判定手段は、
    各資源要素について得失値算出手段によって算出された得失値が複数個の資源要素同士で同一の大きさになった場合、割り付けるべき割付対象の生存区間と重なる生存区間を有する未割り付けの割付対象を検出する被割付側重なり割付対象検出手段と、
    検出された割付対象の生存区間と、資源要素が既に割り付けられた割付対象の生存区間とが連続しているかを判定する未割り付け−割付済み間連続判定手段とを備え、
    前記得失値算出手段は、
    被割付側重なり割付対象検出部によって検出された割付対象の優先度を検出する優先度検出部と、
    割付済みの割付対象から検出された未割り付けの割付対象までの生存区間長の短さを算出する第1の短さ算出部と、
    検出された優先度に算出された短さを乗じ、その乗算結果に応じて当該割付済みの資源要素の得失値を減少させる第2の減少部と
    を備えることを特徴とする資源割付装置。
  7. 請求項6記載の資源割付装置において位置関係判定手段は、
    資源要素が既に割り付けられた割付対象の生存区間と重なる生存区間を有する未割り付けの割付対象を検出する第2の割付済み側重なり割付対象検出手段と、
    被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象の生存区間と、第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象の生存区間とが連続しているかを判定する未割り付け−未割り付け間連続判定手段とを備え、
    前記得失値算出手段は、
    被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象から第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象までの生存区間長の短さを算出する第2の短さ算出部と、
    検出された優先度に算出された短さを乗じ、その乗算結果に応じて割付済みの割付対象に割り付けられた資源要素の得失値を増加させる第2の増加部と
    を備えることを特徴とする資源割付装置。
  8. 請求項7記載の資源割付装置において第2の割付済み側重なり割付対象検出手段によって複数個の未割り付けの割付対象が判定された場合、
    前記未割り付け−未割り付け間連続判定手段は
    検出された複数個の未割り付けの割付対象のうち、何れかのものの生存区間と、割り付けるべき割付対象の生存区間とが連続しているかを判定する
    ことを特徴とする資源割付装置。
  9. 請求項7記載の資源割付装置は、
    全ての資源要素と、各々の資源要素の得失値の初期値とを対応づけて記憶する得失値記憶部を備え、
    第1及び第2の増加部は、得失値記憶部に記憶されている各資源要素の得失値を増加させ、第1及び第2の減少部は得失値記憶部に記憶されている各資源要素の得失値を減少させる
    ことを特徴とする資源割付装置。
  10. 請求項9記載の資源割付装置は更に、
    プログラムにおいて各資源の資源要素を割り付けると、割り付けるべき割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかを割り付けるべき割付対象と各資源要素との組み合わせについてその集計値の推定値を算出することで推定する推定手段と、
    各資源要素毎の推定結果である推定値を比較し、推定値が最小である資源要素が1つか複数かを判定する資源要素単複判定手段とを備え、
    前記割付手段は
    1つと判定された場合、割り付けるべき割付対象に推定値が最小である資源要素を割り付け、複数個と判定された場合、得失値が最大の資源要素を割り付けるべき割付対象に割り付ける
    ことを特徴とする資源割付装置。
  11. 請求項10記載の資源割付装置において推定手段は、
    機械語命令の命令フォーマットを用いてプログラム中の割付対象の定義命令及び使用命令を表現した情報である命令パタンをプログラム中における当該割付対象の全ての定義命令及び使用命令について出力する命令パタン出力部と、
    機械語命令の各オペランドに各資源の資源要素を用いた場合の当該定義命令及び使用命令の実行サイクルおよび/又はコードサイズを示すコストを命令パタン出力部によって出力され得る命令パタンのそれぞれに対応づけて記憶するコスト記憶部と、
    コスト記憶部から出力された命令パタンに対応するコストを取り出し、取り出したコストを各資源要素毎に集計し、集計した集計値を推定値とするコスト集計部と
    を備えることを特徴とする資源割付装置。
  12. 請求項10記載の資源割付装置は更に、
    各資源要素について得失値算出手段によって算出された得失値が複数個の異なる資源の資源要素同士で同一の大きさになった場合、割り付けるべき割付対象より優先度が低く、割り付けるべき割付対象の後に割り付けられる全ての未割り付けの割付対象に最も相応しい資源要素を予測する予測手段を備え、
    前記割付手段は、
    予測手段によって予測された資源要素を割り付けるべき割付対象に割り付ける
    ことを特徴とする資源割付装置。
  13. 請求項12記載の資源割付装置において前記予測手段は、
    割り付けるべき割付対象が有する生存区間と連続する生存区間を有し且つ当該割付対象より優先度が低い未割り付けの割付対象を全て検出する第1の後順割付対象検出手段と、
    検出された各割付対象に各資源要素を割り付けたとすると当該割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかを第1の後順割付対象検出手段に検出された全ての割付対象と各資源要素との組み合わせについて当該集計値の推定値を算出することにより推定する第1の推定手段と、
    第1の後順割付対象検出手段によって検出された各割付対象と割り付けるべき割付対象との間に介在する生存区間長を第1の後順割付対象検出手段によって検出された各割付対象毎に計数する第1の生存区間長計数手段と、
    検出された各割付対象と各資源要素との組み合わせに対して第1の推定手段によって算出された推定値にその割付対象に対して計数された生存区間長の短さを重みとして重み付けを行う第1の重み付け手段と、
    第1の重み付け手段によって重み付けられた推定値を各資源要素毎に集計する第1の集計手段と、
    第1の集計手段によって集計された集計結果が最も小さい資源要素を割り付けるべき割付対象より優先度が低い未割り付けの割付対象に最も相応しい資源要素と判定する第1の最適資源要素判定手段と
    を備えることを特徴とする資源割付装置。
  14. 請求項13記載の資源割付装置において予測手段は、
    第1の最適資源要素判定手段によって複数個の資源要素が最も相応しいと判定された場合、割り付けるべき割付対象と生存区間が重なる未割り付けの割付対象及びその未割り付けの割付対象の生存区間と連続する生存区間を有する未割り付けの割付対象を検出する第2の後順割付対象検出手段と、
    第2の後順割付対象検出手段によって検出された未割り付けの割付対象に各資源要素を割り付けたとすると、検出された各割付対象が定義されている全ての定義命令及び使用されている全ての使用命令の実行サイクルおよび/又はコードサイズの集計値がどれだけになるかを検出された割付対象と各資源要素との組み合わせについて当該集計値の推定値を算出することにより推定する第2の推定手段と、
    割り付けるべき割付対象が有する生存区間と生存区間が重なる未割り付けの割付対象と、その重なる側の割付対象の生存区間と連続する生存区間を有する割付対象との間に介在する生存区間長を当該第2の後順割付対象検出手段によって検出された各割付対象毎に計数する第2の生存区間長計数手段と、
    第2の後順割付対象検出手段によって未割り付けの割付対象と各資源要素との組み合わせに対して第2の推定手段によって推定された推定値にその割付対象に対して計数された生存区間長の短さと、各割付対象の優先度とを重みとして重み付けを行う第2の重み付け手段と、
    第2の重み付け手段によって重み付けられた各割付対象の推定値を資源要素毎に集計する第2の集計手段と、
    第2の集計手段によって集計された各資源要素についての集計値が最も大きい資源要素を割り付けるべき割付対象より後に割り付けられる全ての未割り付けの割付対象に最も相応しい資源要素と判定する第2の最適資源要素判定手段と
    を備えることを特徴とする資源割付装置。
  15. 請求項14記載の資源割付装置において第1及び第2の重み付け手段は、
    第1及び第2の生存区間長計数手段によって計数された割付対象間の生存区間長が0であった場合、1を生存区間長の短さとして重み付けを行い、計数された生存区間長が0でない場合、その生存区間長の逆数を算出し、算出した生存区間長の逆数を生存区間長の短さとして重み付けを行う
    ことを特徴とする資源割付装置。
  16. 請求項14又は15記載の資源割付装置において資源割付装置は、
    機械語命令の命令フォーマットを用いてプログラム中の割付対象の定義命令及び使用命令を表現した情報である命令パタンを複数個記憶し、また機械語命令の各オペランドに各資源の資源要素を用いた場合のプログラム中の割付対象の定義命令及び使用命令の実行サイクルおよび/又はコードサイズを示すコストをそれぞれの命令パタンに対応づけて記憶するコスト記憶手段を備え、
    前記第1の推定手段は、
    第1の後順割付対象検出手段によって検出された未割り付けの割付対象の全ての定義命令及び使用命令に対応する命令パタンを読み出し、読み出した命令パタンを出力する第1の命令パタン出力部と、
    コスト記憶手段から出力された命令パタンに対応するコストを取り出し、取り出したコストを各資源要素毎に集計し、集計した集計値を推定値とする第1のコスト集計部とを備え、
    第2の推定手段は、
    第2の後順割付対象検出手段によって検出された未割り付けの割付対象の全ての定義命令及び使用命令に対応する命令パタンを読み出し、読み出した命令パタンを出力する第2の命令パタン出力部と、
    コスト記憶手段から出力された命令パタンに対応するコストを取り出し、取り出したコストを各資源要素毎に集計し、集計した集計値を推定値とする第2のコスト集計部と
    を備えることを特徴とする資源割付装置。
  17. 請求項11又は16記載の資源割付装置において命令パタンは、演算結果の格納先がどのオペランドであるか、何れのオペランドにも一致しないかを示す情報を有し、
    格納先がオペランドである命令パタンに対応するコストはそうでない命令パタンに対応するコストよりも小さい
    ことを特徴とする資源割付装置。
  18. 請求項11又は16記載の資源割付装置において命令パタンは、対応する使用命令が、生存区間の終了点であるか、そうでないかを示す情報を有し、
    終了点である命令パタンに対応するコストはそうでない命令パタンに対応するコストよりも小さい
    ことを特徴とする資源割付装置。
  19. 請求項9記載の資源割付装置において資源割付装置は更に、
    割り付けるべき資源要素が予め定められている割付対象を前記プログラムから検出する予約割付対象検出手段と、
    予約割付対象検出手段が検出した割付対象に割り付けるべき資源要素を記憶する予約資源要素記憶手段と、
    割付手段は予約割付対象検出手段によって検出された割付対象に割り付けられるべき資源要素を割り付け、割り付けた後に最大の優先度の割付対象に資源要素の何れかを割り付ける
    ことを特徴とする資源割付装置。
  20. 請求項19記載の資源割付装置において前記予約割付対象検出手段は、前記プログラムから関数呼び出しの引数を保持する割付対象を検出し、前記予約資源要素記憶手段は当該割付対象に割り付けるべき引数レジスタを記憶する
    ことを特徴とする資源割付装置。
  21. 請求項19記載の資源割付装置において前記予約割付対象検出手段は、前記プログラムから関数呼び出しの戻り値を保持する割付対象を検出し、前記予約資源要素記憶手段は当該割付対象に割り付けるべき戻り値レジスタを記憶する
    ことを特徴とする資源割付装置。
  22. 請求項19記載の資源割付装置において前記予約割付対象検出手段は、前記プログラムから値が書き換えられてもよい割付対象を検出し、前記予約資源要素記憶手段は当該割付対象に割り付けるべき破壊レジスタを記憶する
    ことを特徴とする資源割付装置。
  23. 請求項2〜9記載の何れかの資源割付装置は更に、
    プログラム中の各割付対象を当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、
    割付済み−被割付間連続判定手段は、
    割り付けるべき割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に割付済みの割付対象が存在するか否かを判定する第1の判定部と、
    存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に割付済みの割付対象が存在するかを判定する第2の判定部と、
    存在することが判定されるまで第2の判定部の起動を繰り返させる制御部とを備え、
    得失値算出手段は、
    検出結果とされた割付対象の生存区間長を集計する集計部と、
    割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部と
    を備えることを特徴とする資源割付装置。
  24. 請求項3〜9記載の何れかの資源割付装置は更に、
    プログラム中の各割付対象を、当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、
    未割り付け−被割付間連続判定手段は、
    割り付けるべき割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に第1の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するか否かを判定する第1の判定部と、
    存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に第1の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するかを判定する第2の判定部と、
    存在することが判定されるまで第2の判定部の起動を繰り返させる制御部とを備え、
    得失値算出手段は、
    検出結果とされた割付対象の生存区間長を集計する集計部と、
    割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部と
    を備えることを特徴とする資源割付装置。
  25. 請求項6〜9記載の何れかの資源割付装置は更に、
    プログラム中の各割付対象を当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、
    未割り付け−割付済み間連続判定手段は、
    被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に割付済みの割付対象が存在するか否かを判定する第1の判定部と、
    存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に割付済みの割付対象が存在するかを判定する第2の判定部と、
    存在することが判定されるまで、第2の判定部の起動を繰り返させる制御部とを備え、
    得失値算出手段は、
    検出結果とされた割付対象の生存区間長を集計する集計部と、
    割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部と
    を備えることを特徴とする資源割付装置。
  26. 請求項7〜9記載の何れかの資源割付装置は更に、
    プログラム中の各割付対象を、当該割付対象の開始点で生存区間が終了する全ての割付対象と、当該割付対象の終了点で生存区間が始まる全ての割付対象とからなる集合である生存区間継承関係集合に対応づけて記憶する生存区間継承関係集合記憶手段を備え、
    未割り付け−未割り付け間連続判定手段は、
    被割付側重なり割付対象検出手段によって検出された未割り付けの割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するか否かを判定する第1の判定部と、
    存在しなければ、生存区間継承関係集合内の他の割付対象を取り出し、取り出した割付対象についての生存区間継承関係集合を参照し、当該生存区間継承関係集合に第2の割付済み側重なり割付対象検出手段によって検出された未割り付けの割付対象が存在するかを判定する第2の判定部と、
    存在することが判定されるまで第2の判定部の起動を繰り返させる制御部とを備え、
    得失値算出手段は、
    検出結果とされた割付対象の生存区間長を集計する集計部と、
    割り付けるべき割付対象の生存区間長と集計部によって集計された生存区間長との和の逆数を算出し、算出結果を生存区間の短さとする逆数算出部と
    を備えることを特徴とする資源割付装置。
  27. 請求項23〜26記載の何れかの資源割付装置において割付対象の生存区間は、当該生存区間によって占められるプログラム中の開始点から終了点までの命令位置情報で表され、
    集計部は命令位置情報の数を集計し、集計値を生存区間長とする
    ことを特徴とする資源割付装置。
  28. 請求項27記載の資源割付装置において、割付対象の生存区間の開始点及び終了点は、プログラム中の命令位置情報で表され、
    資源割付装置は更に、
    プログラム中の割付対象と、各割付対象の生存区間の開始点に相当する命令位置情報と、各割付対象の生存区間の終了点に相当する命令位置情報とを対応づけて記憶する開始終了点記憶手段と、
    開始終了点記憶手段を参照してプログラム中の各割付対象の生存区間の開始点に相当する命令位置情報が終了点に相当するものを全て探し出し、探し出した割付対象と、プログラム中の割付対象とを同一の生存区間継承関係集合にする第1の集合化手段と、
    開始終了点記憶手段を参照してプログラム中の各割付対象の生存区間の終了点に相当する命令位置情報が、開始点に相当するものを全て探し出し、探し出した割付対象と、プログラム中の割付対象とを同一の生存区間継承関係集合にする第2の集合化手段と、
    プログラム中の割付対象と、第1及び第2の集合化手段によって集合化された生存区間継承集合とを対応づけて生存区間継承関係集合記憶部に書き込む書き込み手段と
    を備えることを特徴とする資源割付装置。
  29. 高級言語で書かれたプログラムを機械語プログラムに翻訳するコンパイラに用いられ、プログラミング言語で記述されたプログラムの中の変数と生存区間の組である割付対象にレジスタ、メモリ等のハードウェアである資源が有する資源要素を割り付ける資源割付装置であって、
    プログラム中の割付対象をその優先度に対応づけて保持する割付対象保持手段と、
    前記割付対象保持手段から優先度最大の割付対象を取り出し、優先度が最大の割付対象に資源要素の何れかを割り付ける第1の資源要素割付手段と、
    直前に割り付けられた割付対象の優先度に対して、次順位の優先度を持つ割付対象を、前記割付対象保持手段から取り出す割付対象取出手段と、
    前記割付対象取出手段が取り出した割付対象について、生存区間が重なっている割付対象を検出する一次重なり割付対象検出手段と、
    前記一次重なり割付対象検出手段が検出した割付対象に、既に割り付けられている資源要素を検出する資源要素検出手段と、
    検出された資源要素とは異なる資源要素が既に割り付けられている割付対象を全て検出する割付対象−資源要素検出手段と、
    割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、割付対象取出手段によって取り出された割付対象と生存区間が連続している割付対象を全て判定する利得側連続割付済み割付対象判定手段と、
    既に割付対象に割り付けられた資源要素がこれから割り付けようとする割付対象にどれだけ適切であるかを示す値である得失値を連続すると判定された割付済みの割付対象から割付対象取出手段によって取り出された割付対象までの生存区間長の短さに基づき、生存区間が連続すると判定された割付対象に割り付けられている全ての資源要素について算出する第1の得失値算出手段と、
    算出された得失値を割付対象−資源要素検出手段によって判定された各資源要素毎に累計する累計手段と、
    累計手段によって累計された累計値が最大の資源要素を割付対象取り出し手段が取り出した割付対象に割り付ける第2の資源要素割付手段と、
    全ての割付対象が割り付けられるまで前記割付対象取出手段の起動を繰り返えす制御手段と
    を備えることを特徴とする資源割付装置。
  30. 請求項29において資源割付装置は更に、
    割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、割付対象取出手段によって取り出された割付対象と生存区間が連続せず且つ生存区間が重なっていない割付対象を判定する第1の非重なり非連続割付済み割付対象判定手段と、
    第1の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象の生存区間と生存区間が重なる未割り付けの割付対象であって割付対象取出手段によって取り出された割付対象と生存区間が連続している割付対象を検出する利得側連続未割り付け割付対象検出手段と、
    利得側連続未割り付け割付対象検出手段によって検出された未割り付けの割付対象から割付対象取出手段によって取り出された割付対象までの生存区間長の短さに基づき、第1の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられた資源要素の得失値を算出する第2の得失値算出手段と、
    前記累計手段によって累計された当該資源要素についての得失値から第2の得失値算出手段によって算出された得失値を減ずる第1の減算手段とを備え、
    前記第2の資源要素割付手段は、第1の減算手段によって得失値が減ぜられた得失値が最大の資源要素を割付対象取出手段が取り出した割付対象に割り付ける
    ことを特徴とする資源割付装置。
  31. 請求項30において資源割付装置は更に、
    割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、一次重なり割付対象検出手段によって検出された割付対象と、生存区間が連続しているものを判定する重なり側連続割付済み割付対象判定手段と、
    重なり側連続割付済み割付対象判定手段によって判定された割付済みの割付対象から一次重なり割付対象検出手段によって検出された割付対象までの生存区間長の短さに基づき、重なり側連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられた資源要素の得失値を算出する第3の得失値算出手段と、
    前記累計手段によって累計された当該資源要素についての累計値から第3の得失値算出手段によって算出された得失値を減ずる第2の減算手段と、
    第2の資源要素割付手段は第2の減算手段によって得失値が減ぜられた後の累計値が最大の資源要素を割付対象取出手段が取り出した割付対象に割り付ける
    ことを特徴とする資源割付装置。
  32. 請求項31において資源割付装置は更に、
    割付対象−資源要素検出手段によって検出された割付済みの割付対象のうち、一次重なり割付対象検出手段によって検出された割付対象と生存区間が連続せず且つ生存区間が重なっていない割付対象を判定する第2の非重なり非連続割付済み割付対象判定手段と、
    第2の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象の生存区間と生存区間が重なる未割り付けの割付対象であって一次重なり割付対象検出手段によって検出された割付対象と生存区間が連続しているものを判定する重なり側連続未割り付け割付対象判定手段と、
    重なり側連続未割り付け割付対象判定手段によって判定された割付対象から一次重なり割付対象検出手段によって検出された割付対象までの生存区間長の短さに基づいて第2の非重なり非連続割付済み割付対象判定手段によって判定された割付済みの割付対象に割り付けられている資源要素の得失値を算出する第4の得失値算出手段と、
    前記累計手段によって累計された当該資源要素についての累計値に第4の得失値算出手段によって算出された得失値を加算する加算手段と、
    前記第2の資源要素割付手段は加算手段によって得失値が加算された累計値が最大の資源要素を割付対象取出手段が取り出した割付対象に割り付ける
    ことを特徴とする資源割付装置。
JP05944696A 1995-03-16 1996-03-15 資源割付装置 Expired - Fee Related JP3638171B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP05944696A JP3638171B2 (ja) 1995-03-16 1996-03-15 資源割付装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP5759695 1995-03-16
JP7-57596 1995-03-16
JP05944696A JP3638171B2 (ja) 1995-03-16 1996-03-15 資源割付装置

Publications (2)

Publication Number Publication Date
JPH08314727A JPH08314727A (ja) 1996-11-29
JP3638171B2 true JP3638171B2 (ja) 2005-04-13

Family

ID=26398664

Family Applications (1)

Application Number Title Priority Date Filing Date
JP05944696A Expired - Fee Related JP3638171B2 (ja) 1995-03-16 1996-03-15 資源割付装置

Country Status (1)

Country Link
JP (1) JP3638171B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0947922B1 (en) 1998-04-01 2006-09-27 Matsushita Electric Industrial Co., Ltd. Compiler
JP2001290652A (ja) * 2000-04-04 2001-10-19 Matsushita Electric Ind Co Ltd プログラム変換装置、プログラム変換方法及び記録媒体
US7222082B1 (en) * 2000-06-28 2007-05-22 Kronos Technology Systems Limited Partnership Business volume and workforce requirements forecaster
JP4721975B2 (ja) * 2006-07-28 2011-07-13 パナソニック株式会社 コンパイラ装置およびコンパイル方法
JP2011181114A (ja) * 2011-06-23 2011-09-15 Panasonic Corp プログラム変換装置、プログラム変換方法及び記録媒体

Also Published As

Publication number Publication date
JPH08314727A (ja) 1996-11-29

Similar Documents

Publication Publication Date Title
US5790862A (en) Resource assigning apparatus which assigns the variable in a program to resources
Hack et al. Register allocation for programs in SSA-form
JP3299611B2 (ja) 資源割付装置
JP4745341B2 (ja) 依存性チェーン処理のためのシステム、方法及び装置
US8266603B2 (en) Technique for allocating register to variable for compiling
US9760354B2 (en) Information processing apparatus and compiling method
US11526433B2 (en) Data structure allocation into storage class memory during compilation
JPS6149242A (ja) コード最適化方法
US20050144602A1 (en) Methods and apparatus to compile programs to use speculative parallel threads
JPH0776927B2 (ja) コンパイル方法
JP2000347874A (ja) レジスタ割当器を用いた呼出規則プロローグ・エピローグコード構築方法及び装置
US8943484B2 (en) Code generation method and information processing apparatus
US9823911B2 (en) Method and apparatus for compiling code based on a dependency tree
US6360360B1 (en) Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
US20110153988A1 (en) Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
JPH04213118A (ja) プログラム翻訳装置およびプログラム翻訳方法
US20040128661A1 (en) Automatic data locality optimization for non-type-safe languages
JP4177681B2 (ja) コンパイル方法、コンパイラ、およびコンパイル装置
JPH1069389A (ja) ブランチの再配置によるタグなしブランチ予測キャッシュを活用する装置
CN102804142A (zh) 使用双字节序编译器优化代码
US9146719B2 (en) Data layout using data type information
US6584611B2 (en) Critical path optimization—unload hard extended scalar block
JP3638171B2 (ja) 資源割付装置
US11262989B2 (en) Automatic generation of efficient vector code with low overhead in a time-efficient manner independent of vector width
JP6442967B2 (ja) 情報処理プログラム、情報処理装置、情報処理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040928

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050104

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050107

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080121

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090121

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090121

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100121

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110121

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110121

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120121

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees