JP2002222088A - コンパイルシステム、コンパイル方法およびプログラム - Google Patents

コンパイルシステム、コンパイル方法およびプログラム

Info

Publication number
JP2002222088A
JP2002222088A JP2001017287A JP2001017287A JP2002222088A JP 2002222088 A JP2002222088 A JP 2002222088A JP 2001017287 A JP2001017287 A JP 2001017287A JP 2001017287 A JP2001017287 A JP 2001017287A JP 2002222088 A JP2002222088 A JP 2002222088A
Authority
JP
Japan
Prior art keywords
runtime
program
source code
executable program
execution
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.)
Withdrawn
Application number
JP2001017287A
Other languages
English (en)
Inventor
Takuya Araki
拓也 荒木
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2001017287A priority Critical patent/JP2002222088A/ja
Publication of JP2002222088A publication Critical patent/JP2002222088A/ja
Withdrawn legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】プログラムの実行速度を低下させずに、実行時
情報を用いた再コンパイルを行うことができるコンパイ
ルシステムを提供する。 【解決手段】指示文付ソースコード1をコンパイルした
実行可能プログラム8の実行時に、指示文付ソースコー
ド1に含まれる変数値に関する実行時情報を取得する実
行時情報取得部9と、実行可能プログラム8の実行中
に、実行時情報取得部9にて取得された変数値に関する
実行時情報を用いて指示文付ソースコード1を最適化ま
たは変形し、これを再コンパイルしてオブジェクトコー
ド16を生成する実行時再コンパイル部12と、実行時
再コンパイル部12から生成されたオブジェクトコード
16をロードし、これを実行可能プログラム8に代えて
実行するサブルーチン呼出管理部10とを有する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ソースプログラム
をオブジェクトプログラムに等価に変換して実行するコ
ンパイルシステムおよびコンパイル方法ならびにそのよ
うなコンパイルを実行可能なプログラムに関する。
【0002】
【従来の技術】従来のコンパイラでは、定数の畳み込み
や強さの低減、ループ融合、ループ入れ替え、並列化、
並列化に伴う通信の挿入等、さまざまな最適化や変形が
行われている。しかし、これらの最適化や変形が可能な
のは、ソースプログラム中に記述されている定数の値が
分かる場合であり、その定数の値が実行時にならないと
分からない場合には最適化や変形を行うことはできな
い。この問題について、ソースプログラムとして「Fort
ran」プログラムを例に挙げて、以下に具体的に説明す
る。
【0003】図19(a)に示すプログラムは、最適化
可能なサブルーチン「do i = 1, 100 a(i) = b(i) * 0
enddo」を含む。この場合は、最適化コンパイラは図
19(b)に示すように、「a(i) = b(i) * 0」を「a
(i) = 0」に最適化することが可能である。これに対し
て、図19(c)に示すプログラムのサブルーチンは、
「do i = 1, 100 a(i) = b(i) * c enddo」となって
おり、この場合は、「a(i) = b(i) * c」の「c」の値が
「0」であるとは限らないため、図19(b)のような
最適化を行うことはできない。
【0004】図20(a)に示すプログラムは、サブル
ーチン「if(0 .eq. 0) then i=1 endif」を含む。この
場合は、「if(0 .eq. 0)」が常に真であることが分かる
ので、コンパイラは図20(b)に示すように「if(0 .
eq. 0) then i=1 endif」を「i = 1」に最適化するこ
とでif文を削除することが可能である。これに対し
て、図20(c)に示すプログラムのサブルーチンは、
「if(k .eq. 0) then i=1 endif」となっており、この
場合は、「if(k .eq. 0)」の「k」の値が「0」であると
は限らないため、図20(b)のような最適化を行うこ
とはできない。
【0005】図21(a)に示すプログラムは、2つの
ループの「do i = 1, 100 a(i) =i enddo」と「do i
= 1, 100 b(i) = i enddo」を含む。この場合は、両
ループの繰り返しに用いられている変数iの変化する範
囲が同じなので、コンパイラは図21(b)に示すよう
に、それらのループを一つのループ「do i = 1, 100a
(i) = i b(i) = i enddo」に変形することができる。
これに対して、図21(c)に示すプログラムでは、1
つ目のループが「do i = 1, n a(i) = i enddo」とな
っており、2つ目のループが「do i = 1, m b(i) = i
enddo」となっており、両ループの繰り返しに用いられ
ている変数iの変化する範囲が同じであるとは限らない
ため、図21(b)のような変形を行うことはできな
い。
【0006】図22(a)に示すプログラムは、1つ目
の「do j = 1, 1000」のループ内に、2つ目の「do i =
1, 10」のループを含み、1つ目のループの「j」が変
化する範囲の方が2つ目のループの「i」が変化する範
囲よりも広い。ベクトル化コンパイラの場合、ベクトル
化は最も内側のループで行われる。ここで、ベクトル長
をできるだけ長くした方が効率が高いため、図22
(b)に示すように、ループ「do j = 1, 1000」とルー
プ「do i = 1, 10」を入れ替えることで最適化が可能で
ある。これに対して、図22(c)示すプログラムのよ
うに、「do j = 1,n」、「do i = 1, m」の2つループ
を持つが、これらはどちらのループ長が長いか分からな
いような場合は、図22(b)のような変形を行うこと
はできない。
【0007】図23(a)に示すプログラムは、1つ目
の「do j = 1, 100」のループ内に、2つ目の「do i =
1, 100」のループを含み、2次元配列のすべての要素
「a (i,j)」に対して「0」を代入するようになってい
る。ベクトル化コンパイラの場合、図23(b)に示す
ように2次元配列を1次元配列として扱い、2重ループ
を1重ループとして計算することで、ベクトル長を長く
する最適化を行うことが可能である。これに対して、図
23(c)に示すプログラムのように、「do j =1,
n」、「do i = 1, m」の2つループのアクセス範囲が変
数であり、配列のサイズと一致するとは限らないような
場合は、図23(b)のような変形を行うことはできな
い。
【0008】図24(a)に示すプログラムは、「do i
= 1, 50 a(i*2) = a(i*2-1) enddo」ループを含む。
この場合は、並列化コンパイラが、「a」の添字である
「i*2」と「i*2-1」は偶数と奇数であるため、重なるこ
とが無いということを判断して、ループの並列化を行う
ことが可能である。このような並列化コンパイラによる
並列化の判定には、さまざまな手法が開発されている。
これに対して、図24(b)に示すプログラムのよう
に、「do i = 1, 50 a(i*2) = a(i*2-k) enddo」ルー
プの「k」の値が奇数であるとは限らず、並列化するこ
とが誤りである可能性があるような場合は、並列化を行
うことはできない。また、図25に示すプログラムのよ
うに、「do i = 1, 100 a(idx1(i)) = a(idx2(i)) en
ddo」ループを持つが、「a」の添字である「idx1(i)」
と「idx2(i)」が重なるかどうかをコンパイラが判断で
きないような場合は、ループを並列化することはできな
い。
【0009】図26(a)に示すように、HPF(High
Performance Fortran)で記述されているもので、配列
aと配列bの分散が指定されているプログラムの場合
は、配列aと配列bの分散が同じであり、かつ添字が共
に「i*2」であるため、通信せずに実行することが可能
である。しかし、図26(b)に示すプログラムの場合
は、aの添字が「i*2」、bの添字が「i*k」であり、
「k」が2で無い場合、「a(i*2)」と「b(i*k)」が同じ
プロセッサに存在しない可能性があるため、ループに入
る前に通信を行う必要がある。また、図26(c)に示
すプログラムの場合は、配列aと配列bのサイズが異な
る可能性があるため、同様に「a(i*2)」と「b(i*k)」が
同じプロセッサに存在しない可能性があり、通信を行う
必要がある。
【0010】以上の問題点を部分的に解決する技術とし
て、マルチバージョン化と呼ばれる手法がある。この手
法では、複数の版のコードをコンパイル時に生成してお
き、実行時の値によってそれらコードのいずれかを選択
する。例えば、並列化したコードと並列化していないコ
ードの両方を用意しておき、実行時の値によってどちら
かを選択する。
【0011】また、その他の技術として、実行時コード
生成と呼ばれるものがある。この技術の一例が「エーシ
ーエム トランザクションズ オン プログラミング
ラングエジズ アンド システムズ 第21巻 第2号 3
24〜369頁 (ACM Transactions on Programming Languag
es and Systems Vol. 21 No. 2 March 1999 Pages 324-
369)」に述べられている。この方法では、実行時に特定
の値に特化したコードを生成する。
【0012】
【発明が解決しようとする課題】上述したとおり、従来
のコンパイラでは、コンパイラはソースプログラムに明
示的に書かれた情報しか最適化に利用することができ
ず、実行時になって初めて得られる情報は最適化に利用
することはできない。このため、コンパイラは、変数の
値が実際には変化しない、あるいはほとんどの場合で同
じ値であるような場合であっても、コンパイル時に値が
分からない場合は、その値を使った最適化を行うことは
できない、という問題点がある。
【0013】マルチバージョン化を行う方法において
は、多重ループの場合、それぞれのループで異なったコ
ードを生成すると、それぞれのループコードの数をかけ
ただけのコードを生成する必要があるため、場合分けの
数が大量になる場合には対応できない。例えば、4重ル
ープの場合で、それぞれのループで3種類のコードを生
成する場合は、3×3×3×3=81種類ものコードを
生成する必要がある。さらにこの方法では、定数の畳み
込みのような、値に依存する最適化には対応できない。
このように、マルチバージョン化では、実行時の値は使
うことができず、あらゆる可能性を考えてコード生成を
行わなければ最適なコードにならないため、一部の最適
化しか対応できず、またコードサイズが膨大なものとな
る恐れもある。
【0014】実行時コード生成を用いる方法において
は、プログラマは実行時に生成するコードのソースコー
ドをプログラム中で明示的に作成する必要があり、プロ
グラミングが困難である。また、プログラミング言語は
専用のものを用いる必要がある。さらに、コードの生成
をプログラムを実行するプロセッサと同じプロセッサで
行うという制限があるため、複雑な最適化はできず、定
数の畳み込み程度の最適化しか行うことができない。さ
らに、コード生成のオーバヘッドのため、実行速度が低
下する可能性もある。このように、実行時コード生成で
は、プログラマに負担がかける上、単純な最適化しか対
応できず、プログラムを実行する速度が低下する危険性
もある。
【0015】なお、特開昭61−7946号公報には、
実行時に得られる情報をファイルなどに保存しておき、
その情報を元にプログラムの終了後にプログラムを再度
コンパイルすることで、1回目のコンパイル時に値が分
からないものについて最適化を行うようにしたコンパイ
ル方式が開示されている。
【0016】しかし、上記公報のコンパイル方式では、
ソースプログラムを読み込んでコンパイルすることによ
りオブジェクトプログラムを生成し(1回目のコンパイ
ル)、この生成したオブジェクトプログラムを実行する
ことで再コンパイルに必要な実行時情報を取得し、オブ
ジェクトプログラムの終了後に、再度ソースプログラム
を読み込んで、取得した実行時情報を用いた再コンパイ
ルを行うようになっているので、少なくとも2回のプロ
グラムの実行が必要となる。このため、プログラマの負
担が大きくなる他、取得した実行時情報が入力データ等
に依存する場合は、異なる入力データを用いた実行には
対応できないという問題がある。
【0017】また、上記公報のコンパイル方式では、再
コンパイルするにあたって、 (1)どのようにして実行時情報を得るのか (2)再コンパイルはどこで、どのように行うのか (3)再コンパイルしたプログラムを実行中のプログラ
ムにどう反映するか などの点については開示されておらず、不明である。こ
のため、そのような構成を具体的に実現することが課題
とされる。
【0018】上記公報の他、特開平11−327906
号公報には、Java(サンマイクロシステムズ社の登
録商標)プログラムのある最適化(メソッド呼び出し)
に関して、実行時の情報(どのクラスが読み込まれてい
るかの情報)を用いて実行時にコンパイルを行う際に最
適化を行う手法が開示されている。しかし、このコンパ
イル手法は、Javaプログラムに関するものであり、
プログラムは一度バイトコード(マシン語でないため、
直接実行することはできない。)と呼ばれるものに変換
される必要があるため、上述の図19(b)〜図26
(b)に示したような最適化や変形に単純に適用するこ
とはできない。例えば、バイトコードを解析しながら実
行(インタープリタを用いる)するか、バイトコードを
プログラムの実行前または実行中にマシン語にコンパイ
ルする方法(Just−In−Timeコンパイラ方
式)を用いる必要がある。
【0019】本発明の目的は、上記各問題を解決し、プ
ログラムの実行速度を低下させずに、実行時情報を用い
た再コンパイルを行うことができるコンパイルシステム
およびコンパイル方法ならびにそのような再コンパイル
を実行可能なプログラムを提供することにある。
【0020】本発明の別の目的は、プログラマの負担の
少ないコンパイルシステムおよびコンパイル方法ならび
にそのようなコンパイルを実行可能なプログラムを提供
することにある。
【0021】
【課題を解決するための手段】上記目的を達成するた
め、本発明のコンパイルシステムは、ソースコードを実
行可能プログラムに変換する実行前コンパイル手段と、
前記実行可能プログラムの実行時に、前記ソースコード
に含まれる変数値に関する実行時情報を取得する実行時
情報取得手段と、前記実行可能プログラムの実行中に、
前記実行時情報取得手段にて取得された変数値に関する
実行時情報を用いて前記ソースコードを最適化または変
形し、これを再コンパイルしてオブジェクトコードを生
成する実行時再コンパイル手段と、前記実行時再コンパ
イル手段から生成されたオブジェクトコードをロード
し、これを前記実行可能プログラムに代えて実行するサ
ブルーチン呼出管理手段とを有することを特徴とする。
【0022】上記の場合、実行時再コンパイル手段は、
実行可能プログラムが起動される計算機またはプロセッ
サとは異なる計算機またはプロセッサ上で起動されるよ
うに構成してもよい。
【0023】また、取得された変数値に関する実行時情
報を実行時情報取得手段から受け取り、該受け取った実
行時情報が所定の条件を満たすか否かを判断する実行時
再コンパイル管理手段をさらに有し、実行時再コンパイ
ル手段は、前記実行時再コンパイル管理手段による判断
が条件を満たすとなった場合にのみ、実行時情報を用い
た再コンパイルを行うように構成してもよい。この場
合、実行時再コンパイル管理手段は、実行可能プログラ
ムが起動される計算機またはプロセッサとは異なる計算
機またはプロセッサ上で起動されるように構成してもよ
い。
【0024】さらに、サブルーチン呼出管理手段は、取
得された変数値に関する実行時情報を実行時情報取得手
段から受け取り、該受け取った実行時情報が所定の条件
を満たしているかを判断し、実行時再コンパイル手段
は、前記サブルーチン呼出管理手段による判断が条件を
満たすとなった場合にのみ、実行時情報を用いた再コン
パイルを行うように構成してもよい。
【0025】さらに、ソースコードは、再コンパイルを
行うルーチンおよびそのタイミングならびに最適化また
は変形の手法を少なくとも記述した指示文を含み、実行
前コンパイル手段は、前記指示文に基づいて、実行時情
報取得手段による実行時情報の取得、実行時再コンパイ
ル手段による再コンパイル、サブルーチン呼出管理手段
によるオブジェクトコードのロードおよびその実行がそ
れぞれ可能となるように前記ソースコードを変形し、こ
れをコンパイルして実行可能プログラムに変換するよう
に構成してもよい。
【0026】さらに、実行前コンパイル手段は、ソース
コード内で参照されている大域シンボルを検出し、該大
域シンボルについて、そのシンボル名とそのシンボルへ
のポインタとを対応づけたシンボルテーブルを作成し、
サブルーチン呼出管理手段は、実行時再コンパイル手段
からオブジェクトコードをロードするにあたって、該オ
ブジェクトコード中で参照される大域シンボルが該オブ
ジェクトコード内で定義されていない場合は、前記シン
ボルテーブルを検索して該当する大域シンボルのポイン
タを参照するように構成してもよい。
【0027】本発明のコンパイル方法は、ソースコード
を実行可能プログラムに変換する第1のステップと、前
記実行可能プログラムを実行して、前記ソースコードに
含まれる変数値に関する実行時情報を取得する第2のス
テップと、前記実行可能プログラムの実行中に、前記第
2のステップで取得された変数値に関する実行時情報を
用いて前記ソースコードを最適化または変形し、これを
再コンパイルしてオブジェクトコードを生成する第3の
ステップと、前記第3のステップで生成されたオブジェ
クトコードをロードし、これを前記実行可能プログラム
に代えて実行する第4のステップとを含むことを特徴と
する。
【0028】上記の場合、第3のステップの処理を、実
行可能プログラムが起動される計算機またはプロセッサ
とは異なる計算機またはプロセッサにより行うようにし
てもよい。
【0029】また、第2のステップで取得された変数値
に関する実行時情報が所定の条件を満たしているかを判
断する第5のステップをさらに含み、前記第5のステッ
プにおける判断が条件を満たすとなった場合にのみ、第
3のステップの処理を実行するようにしてもよい。この
場合、第5のステップの処理を、実行可能プログラムが
起動される計算機またはプロセッサとは異なる計算機ま
たはプロセッサにより行うようにしてもよい。
【0030】さらに、ソースコードとして、再コンパイ
ルを行うルーチンおよびそのタイミングならびに最適化
または変形の手法を少なくとも記述した指示文を含む指
示文付ソースコードを用い、第1のステップが、前記指
示文に基づいて、実行時情報取得手段による実行時情報
の取得、実行時再コンパイル手段による再コンパイル、
サブルーチン呼出管理手段によるオブジェクトコードの
ロードおよびその実行がそれぞれ可能となるように前記
指示文付ソースコードを変形し、これをコンパイルして
実行可能プログラムに変換するステップであってもよ
い。
【0031】さらに、ソースコード内で参照されている
大域シンボルを検出し、該大域シンボルについて、その
シンボル名とそのシンボルへのポインタとを対応づけた
シンボルテーブルを作成する第6のステップと、オブジ
ェクトコードをロードするにあたって、該オブジェクト
コード中で参照される大域シンボルが該オブジェクトコ
ード内で定義されていない場合は、前記第6のステップ
で作成されたシンボルテーブルを検索して該当する大域
シンボルのポインタを参照する第7のステップとをさら
に含むようにしてもよい。
【0032】本発明のプログラムは、ソースコードを実
行可能プログラムに変換する第1の処理と、前記実行可
能プログラムを実行して、前記ソースコードに含まれる
変数値に関する実行時情報を取得する第2の処理と、前
記実行可能プログラムの実行中に、前記第2の処理で取
得された変数値に関する実行時情報を用いて前記ソース
コードを最適化または変形し、これを再コンパイルして
オブジェクトコードを生成する第3の処理と、前記第3
の処理で生成されたオブジェクトコードをロードし、こ
れを前記実行可能プログラムに代えて実行する第4の処
理とをコンピュータに実行させることを特徴とする。
【0033】上記の場合、第3の処理を、実行可能プロ
グラムが起動される計算機またはプロセッサとは異なる
計算機またはプロセッサにより行うようにしてもよい。
【0034】また、第2の処理で取得された変数値に関
する実行時情報が所定の条件を満たしているかを判断す
る第5の処理をさらに含み、前記第5の処理における判
断が条件を満たすとなった場合にのみ、第3の処理を実
行するようにしてもよい。この場合、第5の処理を、実
行可能プログラムが起動される計算機またはプロセッサ
とは異なる計算機またはプロセッサにより行うようにし
てもよい。
【0035】さらに、ソースコードとして、再コンパイ
ルを行うルーチンおよびそのタイミングならびに最適化
または変形の手法を少なくとも記述した指示文を含む指
示文付ソースコードを用い、第1の処理が、前記指示文
に基づいて、実行時情報取得手段による実行時情報の取
得、実行時再コンパイル手段による再コンパイル、サブ
ルーチン呼出管理手段によるオブジェクトコードのロー
ドおよびその実行がそれぞれ可能となるように前記指示
文付ソースコードを変形し、これをコンパイルして実行
可能プログラムに変換する処理であってもよい。
【0036】さらに、ソースコード内で参照されている
大域シンボルを検出し、該大域シンボルについて、その
シンボル名とそのシンボルへのポインタとを対応づけた
シンボルテーブルを作成する第6の処理と、オブジェク
トコードをロードするにあたって、該オブジェクトコー
ド中で参照される大域シンボルが該オブジェクトコード
内で定義されていない場合は、前記第6のステップで作
成されたシンボルテーブルを検索して該当する大域シン
ボルのポインタを参照する第7の処理とをさらにコンピ
ュータに実行させるものであってもよい。
【0037】上記のとおりの本発明によれば、ソースコ
ード(ソースプログラム)は実行前のコンパイルによっ
て実行可能プログラムに変換される。この実行可能プロ
グラムを実行する際、実行時に、上記ソースコードに含
まれている変数値に関する実行時情報が取得され、実行
可能プログラムの実行中にその取得された実行時情報を
用いて上記ソースコードが最適化または変形され、再コ
ンパイルされてオブジェクトコードが生成される。そし
て、上記実行可能プログラムに代えて、このオブジェク
トコードが実行される。このように、本発明では、従来
のコンパイラでは最適化または変形が不可能とされてい
たプログラム(ソースコード)についても最適化または
変形を行って再コンパイルすることが可能である。ま
た、その再コンパイルは、コンパイルされたプログラム
(実行可能プログラム)を実行中に行うことができるの
で、最適化を行うためにプログラムを2度実行する必要
はない。
【0038】また、本発明においては、再コンパイルの
対象となるソースコードに、再コンパイルを行うルーチ
ンおよびそのタイミングならびに最適化または変形の手
法をそれぞれ記述した指示文を付けるだけで良いので、
プログラマへの負担は少なくて済む。
【0039】
【発明の実施の形態】次に、本発明の実施形態について
図面を参照して説明する。
【0040】(第1の実施形態)図1は本発明の第1の
実施形態のコンパイルシステムの実行時再コンパイルを
行う部分の主要部を示すブロック図、図2は本発明の第
1の実施形態のコンパイルシステムの実行前コンパイル
を行う部分の主要部を示すブロック図である。
【0041】図2および図1を参照すると、このコンパ
イルシステムは、指示文付ソースコード1を入力とする
実行前コンパイル部11と、実行可能プログラム8と、
実行時再コンパイル管理部17と、指示文付ソースコー
ド1をソースコード変換して再コンパイルを実行する実
行時再コンパイル部12とを有する。
【0042】まず、実行前コンパイルの動作の概略につ
いて述べる。
【0043】指示文付ソースコード1は、実行前コンパ
イルの対象になるものであって、FortranやCなどのプ
ログラミング言語に対し、どこで実行時再コンパイルを
行うか、どのような最適化を行うかを指示する指示文を
付加したものである。図3に、この指示文付ソースコー
ドの一例を示す。
【0044】図3に示す例では、Fortranのソースコー
ドに対して指示文を付加している。指示文であることを
示すため、指示文の文頭には「!PST$」を付加してい
る。また、サブルーチン呼び出しである「call foo(a,
b,c)」に対し、指示文「!PST$ recompile,trigger(i. e
q. 1)」が付加されており、さらにサブルーチン「foo」
の中では、「!PST$ runtime#constant(c) begin」と「!
PST$ end runtime#constant」が指定されている。さら
に、「call foo(a,b,c)」に対し、指示文「!PST$recomp
ile,trigger(i .eq. 1)」を付加することで、このサブ
ルーチン呼び出しが再コンパイルの対象になること、ま
た、「trigger(i .eq. 1)」の指定により、「i」の値が
1の時に再コンパイルの要求を実行時再コンパイル管理
部17に送る、ということを指定している。また、指示
文「!PST$ runtime#constant(c)」と「!PST$ end runti
me#constant」により、これらの指示文に囲まれた文で
は「c」の値を実行時定数として扱う、ということを指
定している。すなわち、この指定により、「c」の値は
実行時に値が変わらないか、またはほとんどの場合で値
が変わらないものとして、指定された部分が最適化の対
象とされる。
【0045】実行前コンパイル部11は、指示文解釈部
2、シンボルテーブル3、指示文解釈後ソースコード
5、シンボルテーブルコンパイル用コンパイラ4、指示
文解釈後ソースコードコンパイル用コンパイラ6、実行
時コンパイルライブラリ7を含む。
【0046】指示文解釈部2は、前述の再コンパイル用
指示文を解釈し、実行時情報を取得するサブルーチンの
挿入や、再コンパイル対象のサブルーチン呼出を実行時
に再コンパイルしたサブルーチンをロード、実行できる
よう変形するなどの処理を行い、指示文解釈後ソースコ
ード5を出力する。この他、指示文解釈部2は、シンボ
ルテーブル3を作成する。このシンボルテーブル3は、
大域的なシンボルが実行時に再コンパイルしたサブルー
チンから参照できるようにするためものである。なお、
基本的にはシンボルテーブル3の作成は省略することも
可能であるが、シンボルテーブル3は作成する方が好ま
しい。その理由は、シンボルテーブル3の作成を省略し
た場合、再コンパイルしたサブルーチンから大域的なシ
ンボルを参照することができないという制限が加わるた
めである。
【0047】実行時再コンパイルライブラリ7は、指示
文解釈部2によって指示文解釈後ソースコード5に新た
に挿入されるサブルーチンなどを含む。これは実行可能
プログラム8では、実行時情報取得部9とサブルーチン
呼出管理部10に相当する。
【0048】実行可能プログラム8は、シンボルテーブ
ル3をコンパイラ4でコンパイルしたオブジェクトと、
指示文解釈後ソースコード5をコンパイラ6でコンパイ
ルしたオブジェクトと、実行時コンパイルライブラリ7
をリンクして作成される。
【0049】次にプログラム実行時の動作の概略につい
て述べる。
【0050】実行可能プログラム8は、逐次または並列
計算機上で動作する。また、実行時再コンパイル管理部
17と実行時再コンパイル部12は、実行可能プログラ
ム8とは別の計算機上(並列計算機の場合は、実行可能
プログラム8が動作しているプロセッサとは別のプロセ
ッサでも良い)で動作する。なお、実行時再コンパイル
管理部17と実行時再コンパイル部12は実行可能プロ
グラム8と同じ計算機上で実行することも可能である
が、別の計算機上で実行する方が好ましい。その理由
は、実行可能プログラム8と並列に実行することによ
り、実行時再コンパイル管理部17と実行時再コンパイ
ル部12によって実行可能プログラム8の実行速度が低
下することがなくなるからである。
【0051】実行可能プログラム8は、実行時に実行時
情報取得部9により実行時の情報を取得し、その実行時
情報とともに再コンパイル要求を実行時再コンパイル管
理部17に送出する。この実行時情報および再コンパイ
ル要求の実行時再コンパイル管理部17への送出は、再
コンパイル要求を指示文で指定されたタイミングで行わ
れる。
【0052】実行時再コンパイル管理部17は、再コン
パイル要求を受け取ると、実行時再コンパイル部12を
起動して、実行時情報を実行時再コンパイル部12へ送
出する。
【0053】実行時再コンパイル部12は、実行時再コ
ンパイル管理部17から実行時情報を受け取ると、その
実行時情報を元に指示文付ソースコード1をソースコー
ド変換部13で変換してソースコード15を生成する。
さらに、コンパイラ14によりその変換されたソースコ
ード15をコンパイルしてオブジェクトコード16を生
成する。オブジェクトコード16の生成が完了すれば、
実行時再コンパイル部12は、その旨を実行時再コンパ
イル管理部17に伝達する(再コンパイルの終了通
知)。生成されたオブジェクトコード16は、実行可能
プログラム8のサブルーチン呼出管理部10へ渡され
る。
【0054】サブルーチン呼出管理部10は、次に再コ
ンパイル対象のサブルーチンを呼び出す際、実行時再コ
ンパイル管理部17に先の再コンパイルが終了したかど
うかを確認する。再コンパイルが終了していれば、サブ
ルーチン呼出管理部10は、オブジェクトコード16を
ロードし、そちらを実行する。
【0055】次に本実施形態の全体の動作について詳細
に説明する。
【0056】まず、図2の指示文解釈部2の動作につい
て説明する。指示文には、以下のような形での指定が可
能である。
【0057】(1)再コンパイルの対象となるサブルー
チンを指定し、再コンパイルのタイミングを指示する。
一例として、「!PST$ recompie,trigger(Condition)」
のような形式が考えられる。ここで、「Condition」に
は、再コンパイルを開始する条件を変数あるいは条件式
の形で記述する。
【0058】(2)再コンパイルによってどのような最
適化を行うかを指示する。一例として、「!PST$ runtim
e#constant(var) begin」、「!PST$ end runtime#const
ant」と、「!PST$ runtime#constant#noguard(var)」、
「!PST$ end runtime#constant#noguard」の形式が考え
られる。これは、各指示文に囲まれた文の中に出現する
「var」を実行時定数として扱うということを指定す
る。すなわち、実行時に値が変わらないか、ほとんどの
場合で値が変わらないものとして最適化の対象にする。
「var」の部分には、複数の変数を指定してもよく、指
示文を入れ子にしてもよい。「noguard」がついている
方の指示文は、値が一度決定すると二度と変更されるこ
とが無いと表明することを表す。このため、ソースコー
ド変換部13の変換方法が異なる。これについては後述
する。
【0059】上記の指示文の例では、最適化の対象にす
る部分を指示文「!PST$ runtime#constant(var)」と「!
PST$ end runtime#constant」(あるいは「!PST$ runti
me#constant#noguard(var)」)と「!PST$ end runtime#
constant#noguard」で囲むことで表したが、「!PST$ en
d runtime#constant」(あるいは「!PST$ end runtime#
constant#noguard」)を省略することも可能である。こ
の場合、コンパイラが代入文やサブルーチン呼出などで
「var」の値が変更される部分を解析し、「!PST$ runti
me#constant(var)」(あるいは「!PST$ runtime#consta
nt#noguard(var)」)からその部分までを最適化の対象
にする。
【0060】以下、図3に示す指示文付ソースコードを
例に、指示文解釈部2の動作を詳細に説明する。
【0061】図3に示す指示文付ソースコードは、3つ
の指示文「!PST$ recomple,trigger(i .eq. 1)」、「!P
ST$ runtime#constant(c) begin」、「!PST$ end runti
me#constant」を含む。この図3に示すプログラムは、
指示文解釈部2により以下のようにして図4に示すよう
なプログラムに変形される。
【0062】まず、指示文解釈部2では、再コンパイル
の対象となるサブルーチン、再コンパイルのタイミング
を指示する指示文「!PST$ recomple,trigger(i .eq.
1)」(これまでの例では「!PST$ recomple,trigger(Con
dition)」)を見つけると、その直後のサブルーチン呼
出をサブルーチン呼出管理部10への呼出に変換する。
図4に示したプログラム例では、「dcaller」というサ
ブルーチンへの呼出に変換されている。サブルーチン呼
出管理部10への引数には以下の変数を渡す。
【0063】(1)元のサブルーチン(図4の例では
「foo」) (2)実行時情報を伝達するサブルーチン(図4の例で
は「foo#info」) (3)再コンパイル後のサブルーチンを保持する変数
(図4の例では「foo#new」) (4)再コンパイルのタイミングを示す変数(図4の例
では「trg」) (5)現在の再コンパイルの状態を表す変数(図4の例
では「state」) (6)元のサブルーチンの名前(図4の例では「'fo
o'」) (7)元のサブルーチンの引数の数(図4の例では
「3」) (8)元のサブルーチンの引数(図4の例では「a,b,
c」) ただし、使用者は容易にそれら引数の数や種類を変更し
て実施することが可能である。
【0064】次いで、指示文解釈部2では、再コンパイ
ルによってどのような最適化を行うかを指示する指示文
「!PST$ runtime#constant(c) begin」(これまでの例
では「!PST$ runtime#constant(var) begin」、「!PST$
end runtime#constant」あるいは、「!PST$ runtime#c
onstant#noguard(var)」、「!PST$ end runtime#consta
nt#noguard」)を見つけると、以下のような変形が行わ
れる。
【0065】(1)指示文を取り除いた元のサブルーチ
ンとまったく同じサブルーチンを作成する。図4の例で
は、サブルーチン「foo」に相当する。
【0066】(2)「!PST$ runtime#constant(c) begi
n」(これまでの例では、「!PST$ runtime#constant(va
r)」あるいは「!PST$ runtime#constant#noguard(va
r)」)に相当する指示文が存在した場所に、実行時情報
取得部9を呼び出すサブルーチンを挿入した別のサブル
ーチンを作成する。図4の例では、サブルーチン「foo#
info」に相当する。実行時情報取得部9を呼び出すサブ
ルーチンは、「call send#info(c, ID#of#c)」が相当す
る。「ID#of#c」は変数cを特定するIDを表す。この
引数についても、使用者は容易に数や種類を変更して実
施することが可能である。「var」の部分に複数の変数
が指定されていたり、指示文が入れ子になっていた場合
は、それぞれの変数に対して実行時情報を取得するサブ
ルーチンを挿入する。
【0067】次いで、指示文解釈部2では、対象となっ
ているサブルーチン内で参照している大域的なシンボル
が、実行時に再コンパイルしたサブルーチンからも参照
できるようにするためのシンボルテーブル3が以下のよ
うにして作成される。
【0068】図3の例では、コモンブロック「bar」が
大域的なシンボルとなる。この他に、他のサブルーチン
呼出や関数呼出、入出力ルーチン呼出も大域的なシンボ
ルとして扱われる。大域的なシンボルを見つけると、指
示文解釈部2は、そのシンボル名から、そのシンボル名
が表すポインタが引けるようなシンボルテーブル3を作
成する。シンボルテーブル3の作成法には、いくつかの
手法が考えられる。図5に、図3の例を元に単なる組の
配列として実現したシンボルテーブル例を示す。この例
では、シンボルテーブル3はC言語で記述されている。
【0069】図3の例では、サブルーチン内の大域的な
シンボルは「bar」だけである。したがって、変数ba
rの宣言をまず記述する。次に、テーブルを表す構造体
の宣言を行い、最後にその構造体の配列を定義、初期化
する。構造体のメンバは、シンボル名とシンボルへのポ
インタである。この場合は、大域的なシンボル「bar」
の名前である「"bar"」と、「bar」へのポインタである
「&bar」の組みで構造体を初期化する。
【0070】このように作成されたシンボルテーブル
3、指示文解釈後ソースコード5が、それぞれコンパイ
ラ4、コンパイラ6によってコンパイルされ、さらに実
行時コンパイルライブラリ7とともにリンクされること
により、実行可能プログラム8が作成される。
【0071】次にプログラム実行時の動作について説明
する。
【0072】まず、サブルーチン呼出管理部10につい
て述べる。サブルーチン呼出管理部10は、再コンパイ
ル対象のサブルーチンが指示文解釈部2によって変換さ
れたものである。図4の例では「dcaller」というサブ
ルーチンの呼出に変換されている。このサブルーチン呼
出管理部10の動作を、図6のフローチャートを参照し
て詳細に説明する。
【0073】まず、再コンパイルの状態をチェックする
(ステップS1)。このステップS1における再コンパイ
ルの状態では、「再コンパイル前」、「再コンパイル
中」、「再コンパイル失敗」、「再コンパイル済み」の
いずれかの状態になり、それぞれ異なるステップへ分岐
する。
【0074】始めて実行したときの初期値は、「再コン
パイル前」である。この状態は、図4の例では、変数
「state」に相当する。上記ステップS1における再コン
パイルの状態が「再コンパイル前」の場合は、再コンパ
イルのタイミングを示す変数の値をチェックする(ステ
ップS5)。これは、図4の例では、変数「trg」に相
当する。もし、この変数の値が真でなければ実行時情報
を送出するサブルーチンを実行する(ステップS9)。
実行時情報を送出するサブルーチンは、図4の例では
「foo#info」に相当する。もし変数の値が真であれば、
実行時再コンパイル管理部17に対象となるサブルーチ
ン名と共に再コンパイル要求を出す(ステップS6)。
さらに、再コンパイルの状態を「再コンパイル中」に変
更し(ステップS7)、通常のサブルーチンを実行する
(ステップS8)。通常のサブルーチンとは、図4の例
では「foo」に相当する。
【0075】上記ステップS1での再コンパイルの状態
が「再コンパイル中」である場合は、実行時再コンパイ
ル管理部17に再コンパイルの終了状態をたずねる(ス
テップS4)。次に、この再コンパイルの終了状態をチ
ェックする(ステップS10)。このステップS10で
は、「再コンパイル成功」、「再コンパイル失敗」、
「再コンパイル中」のいずれかの状態となっており、そ
れぞれ異なるステップへ分岐する。
【0076】上記ステップS10での再コンパイルの終
了状態が「再コンパイル成功」の場合は、再コンパイル
されたオブジェクトをロードし(ステップS14)、再
コンパイルの状態を「再コンパイル済み」に変更し(ス
テップS15)、ロードした再コンパイル済みのサブル
ーチンを実行する(ステップS16)。ステップS14
で再コンパイルされたオブジェクトをロードしたとき、
ロードしたサブルーチンへのポインタを記録しておく。
図4の例では、「foo#new」に相当する変数に記録す
る。上記ステップS10での再コンパイルの終了状態が
「再コンパイル失敗」の場合は、状態を「再コンパイル
失敗」に変更し(ステップS12)、通常のサブルーチ
ンを実行する(ステップS13)。上記ステップS10
での再コンパイルの終了状態が「再コンパイル中」の場
合は、通常のサブルーチンを実行する(ステップS1
1)。
【0077】上述のステップS1における再コンパイル
の状態が「再コンパイル済み」の場合は、上記ステップ
S14で記録しておいた再コンパイル済みのサブルーチ
ンを実行し(ステップS2)、「再コンパイル失敗」の
場合は、通常のサブルーチンを実行する(ステップS
3)。
【0078】上述のステップS8、ステップS11、ス
テップS13では実行時情報を送出しない通常のサブル
ーチンを実行しているが、ここで実行時情報を送出する
サブルーチンを実行してもよい。ただし、実行時情報送
出のためのオーバヘッドがかかるため、通常のサブルー
チンを実行する方が好ましい。
【0079】実行可能プログラム8が並列計算機上で実
行されるとき、上述のステップS5およびステップS1
0の処理では、すべてのプロセッサで同じ分岐を実行す
るように同期を取る必要がある。これは、各プロセッサ
で異なる版のサブルーチンを実行すると、実行結果に不
整合が生じる可能性があるためである。
【0080】また、再コンパイル対象のサブルーチンが
複数ある場合、それぞれについて上述のステップS1〜
S16の動作を行う。したがって、実行時再コンパイル
部12は、複数個起動される可能性がある。
【0081】次に、ステップS14のオブジェクトコー
ドのロードについて、詳しく説明する。
【0082】コンパイラ14によってコンパイルされて
生成されたオブジェクトコードの形式は、OSに依存す
るが、一般に図7に示すような形式となっている。すな
わち、オブジェクトコードは、プログラムコードが記録
されているtextセクション、初期化済みのデータが
記録されているdataセクション、初期値を持たない
データ領域に対応するbssセクション、他のセクショ
ン、リロケーションエントリ、シンボルテーブルなどに
よって構成される。ここで、リロケーションエントリ
は、サブルーチン呼出や大域変数の参照など、シンボル
の参照について、その参照がオブジェクトコード中のど
こにあるか、そのシンボルの名前は何かなどの情報を保
持する(通常は、この情報を利用してリンカが複数のオ
ブジェクトコードをリンクして実行可能プログラムを作
成する)。リロケーションエントリに登録されているシ
ンボルの参照は、プログラムコード中ではアドレスが未
定になっている。したがって、リロケーションエントリ
中の情報とシンボルテーブル中の情報によって、正しい
アドレスに書きかえる必要がある。シンボルテーブル
は、当該オブジェクトコードで定義されているシンボル
が、オブジェクトコード中のどこにあるかという情報を
保持する。
【0083】次に、オブジェクトをロードする際の動作
を詳細に説明する。図8に、その動作のフローチャート
図を示す。
【0084】図8を参照すると、まず、オブジェクトコ
ードの各セクションをメモリに読み込む(ステップS2
1)。次に、リロケーションエントリを検査し、リロケ
ーションエントリに項目があるかどうかを調べる(ステ
ップS22)。項目があれば、そのエントリを読み込み
(ステップS23)、その参照がオブジェクトコード中
で定義されているシンボルへの参照かどうかを調べる
(ステップS24)。項目が無い場合は、後述するステ
ップS26の処理へ移行する。
【0085】上記ステップS24での判定が、当該オブ
ジェクトコード中で定義されているシンボルへの参照で
ある場合は、シンボルテーブルを検査し、オブジェクト
コード中のアドレスを書き込む(ステップS25)。そ
の後、上述のステップS22へ戻る。上記ステップS2
4での判定が、当該オブジェクトコード中で定義されて
いないシンボルへの参照である場合は、対象シンボルを
コンパイル時に作成したシンボルテーブル3の中から探
す(ステップS27)。そして、リロケーションエント
リで指定されたアドレスにテーブルから検索したアドレ
スを書き込み(ステップS28)、その後、上述のステ
ップS22へ戻る。
【0086】上述のステップS22〜S28の一連の処
理をリロケーションエントリのすべての項目について繰
り返し、項目がなくなれば、すなわちステップS22の
判定が「ノー」となれば、再コンパイルしたサブルーチ
ンのアドレスをオブジェクトコードのシンボルテーブル
から検索してそのアドレスを返却する(ステップS2
6)。
【0087】オブジェクトコードのロードには、以上説
明した方法以外に、ダイナミックリンク(実行可能プロ
グラム8を実行する計算機のOSに用意されている)を
利用する方法があるが、これまでに説明した方法を用い
るほうが好ましい。OSのダイナミックリンクを利用す
る方法では、再コンパイルしたサブルーチンから大域的
なシンボルが参照できないという制限が加わるためであ
る。なお、OSのダイナミックリンクを用いる場合は、
一般にはOSに用意されている「dlopen」、「dlsym」
という呼出で実現される。
【0088】次に、実行時再コンパイル管理部17の動
作について詳細に説明する。図9は、実行時再コンパイ
ル管理部17の動作を示すフローチャート図である。以
下この図9を参照して動作を説明する。
【0089】まず、実行可能プログラム8または実行時
再コンパイル部12からのメッセージを受け付け(ステ
ップS31)、その受け付けたメッセージの種類を判定
する(ステップS32)。メッセージの種類には、「実
行時情報」、「再コンパイル終了通知」、「再コンパイ
ル終了確認」、「再コンパイル要求」、「プログラム終
了メッセージ」があり、それぞれ異なるステップに分岐
する。
【0090】上記ステップS32における判定が、受け
付けたメッセージが実行可能プログラム8からの「実行
時情報」である場合は、その実行時情報を保存し(ステ
ップS33)、ステップS31へ戻って再びメッセージ
の受付を行う。
【0091】上記ステップS32における判定が、実行
可能プログラム8からの「再コンパイル要求」である場
合は、これまでに保存した実行時情報を元に、再コンパ
イルの効果がある実行時情報かどうかを判断する(ステ
ップS36)。このステップS36における判断では、
具体的には同じ値が来る確率が高いか、などを基準に判
断が行われる。もし、再コンパイルの効果がある実行時
情報であれば、実行時再コンパイル部12を起動し(ス
テップS37)、保存しておいた実行時情報を再コンパ
イル部に伝達する(ステップS38)。その後、ステッ
プS31へ戻って再びメッセージの受付を行う。もし、
再コンパイルの効果がある実行時情報でなければ、再コ
ンパイルは行わず、再コンパイルが失敗したという情報
を保存する(ステップS39)。その後、ステップS3
1へ戻って再びメッセージの受付を行う。
【0092】上記ステップS32における判定が、実行
時再コンパイル部12からの「再コンパイル終了通知」
である場合は、再コンパイルが終了したという情報を保
存する(ステップS34)。その後、ステップS31へ
戻って再びメッセージの受付を行う。
【0093】上記ステップS32における判定が、実行
可能プログラム8からの「再コンパイル終了確認」であ
る場合は、再コンパイルが終了したか、失敗したか、再
コンパイル中かを現在の状況に応じて返答する(ステッ
プS35)。この返答は、実行可能プログラム8に対し
て行われる。その後、ステップS31へ戻って再びメッ
セージの受付を行う。
【0094】上記ステップS32における判定が、実行
可能プログラム8からの「プログラム終了メッセージ」
である場合は、実行時再コンパイル管理部17を終了す
る。
【0095】次に、実行時再コンパイル部12の動作に
ついて詳細に説明する。図10は、実行時再コンパイル
部12の動作を示すフローチャート図である。以下、こ
の図10を参照して動作を説明する。
【0096】まず、実行時再コンパイル管理部17によ
って起動された後、実行時再コンパイル管理部17から
実行時情報を受信する(ステップS41)。次に、その
実行時情報に基づき、ソースコード変換部13でソース
コードを変換する(ステップS42)。さらに、その変
換したソースコード15をコンパイラ14でコンパイル
する(ステップS43)。最後に、コンパイル終了通知
を実行時再コンパイル管理部17へ送る(ステップS4
4)。
【0097】次に、上述の実行時再コンパイル部12
の、ステップS42における実行時情報に基づくソース
コードの変換について説明する。図11〜図13は、図
1に示した実行時再コンパイル部12のソースコード変
換部13におけるソースコード変換のためのプログラム
の一例で、それぞれ(a)がソースコード変換前のプロ
グラムで、(b)がソースコード変換後のプログラムで
ある。
【0098】図11(a)のプログラムは、指示文「!P
ST$ runtime#constant(c) begin」と「!PST$ end runti
me#constant」により、これらの指示文に囲まれた文で
は「c」の値を実行時定数として扱う、ということが指
定されている。この場合、実行時に値が変わらないか、
またはほとんどの場合で値が変わらないものとして最適
化の対象となり、実行時情報として変数cの値が得られ
る。この変数cの値が0であったとすると、図11
(b)に示すように変換される。この場合、変数cの値
が0で無い場合でも、正常に動作するようにするため、
変数cの値で分岐するコードを生成している。具体的に
は、変数cの値が0であれば、コード中の変数cの出現
を0に置き換えたコード(「a(i) = b(i) * 0 * d」)
を実行し、そうでなければ元のコード(「a(i) = b(i)
* c * d」)を実行する。変換後のプログラムは、コン
パイラ14により最適化され、変数cの値が0である方
のコードは乗算が削除される。これは、図19(a)に
示したプログラムが、図19(b)に示したプログラム
に最適化されるのと同様である。
【0099】図12(a)のプログラムは、指示文「!P
ST$ runtime#constant#noguard(c)begin」と「!PST$ en
d runtime#constant#noguard」により、これらの指示文
に囲まれた文中で出現する「c」を実行時定数として扱
う、ということが指定されている。このように、図12
(a)のプログラムでは、指示文が「!PST$ runtime#co
nstant」ではなく、「!PST$ runtime#constant#noguar
d」になっている。この場合、cの値は一度決定すると
再び変更されることが無いという表明になるため、図1
2(b)に示すようにcの値による分岐のないプログラ
ムに変換される。
【0100】以上のような変換を適用することで、前述
の図19(c)、図20(c)、図21(c)、図22
(c)、図23(c)、図24(b)、図26(b)、
および図26(c)で示したプログラムは、実行時の値
が期待したものであれば、再コンパイルによりそれぞ
れ、前述の図19(a)、図20(a)、図21
(a)、図22(a)、図23(a)、図24(a)、
および図26(a)で示したプログラムに相当する形式
に変換され、最適化が可能になる。
【0101】図13(a)のプログラムは、指示文「!P
ST$ runtime#constant#noguard(idx1, 1dx2) begin」と
「!PST$ end runtime#constant#noguard」により、これ
らの指示文に囲まれた文中で出現する「idx1」と「idx
2」が依存関係が無い(ループの並列化を阻害しないも
のである)ことを示す。このプログラムの場合は、実行
時情報により「idx1」と「idx2」の値がループの並列化
を阻害しないものであることが分かった場合は、図13
(b)に示すように、ループに「!CDIR nodep」のよう
な指示文を付加する形で変換する。ここで、「!CDIR no
dep」は、該指示文以下のループに依存が無いことを指
定する指示文の例であり、そのことがコンパイラ14で
解釈される。
【0102】前述の図25に示したプログラムでは、
「idx1, idx2」が配列であるため、プログラムテキスト
上で定数値を記述することが難しい。そこで、上述の図
13(a)に示すように、指示文で依存関係が無いこと
を示すようにすれば、実行時情報により「idx1」と「id
x2」の値がループの並列化を阻害しないものであること
が分かった場合、コンパイラ14では「!CDIR nodep」
以下のループに依存が無いと解釈される。
【0103】以上の例以外にも、実行時の値がコンパイ
ル時に確定することで可能になる最適化に対し、本発明
を適用することが可能である。
【0104】以上説明したように構成される、本実施形
態のコンパイルシステムによれば、実行時再コンパイル
管理部17、実行時再コンパイル部12を実行可能プロ
グラム8と別のプロセッサで実行することにより、再コ
ンパイルを行っている間も実行可能プログラム8は処理
を継続することができ、再コンパイルによるオーバヘッ
ドにより実行速度を低下させずに実行することができ
る。
【0105】また、再コンパイルを行うべきかどうかの
判断などを実行時再コンパイル管理部17で行うことに
より、実行可能プログラム8のオーバヘッドを低減する
ことが可能である。
【0106】さらに、再コンパイルを行っている間、処
理を継続する際に実行するサブルーチンでは、実行時情
報を送出しないようにすることで、再コンパイル中のオ
ーバヘッドを低減することが可能である。
【0107】(第2の実施形態)本第2の実施形態のコ
ンパイルシステムは、実行前のコンパイルについては上
述の第1の実施形態のものと同様であるが、実行時に再
コンパイルを行うかどうかの判断を、実行時再コンパイ
ル管理部17ではなく、実行可能プログラム8内で行う
ようになっている。このため、指示文において再コンパ
イルを開始する条件を示す部分(第1の実施形態で用い
た例では、「trigger(Condition)」)は不要になる。
【0108】図14は、本発明の第2の実施形態のコン
パイルシステムの実行時再コンパイル部分の主要部を示
すブロック図である。このコンパイルシステムでは、前
述の図1に示した実行時再コンパイル部分の構成と比較
して、実行時再コンパイル管理部17が削除され、ソー
スコード変換部13とコンパイラ14を内部的に起動す
るソースコード変換・コンパイル部18が付加されてい
る。
【0109】実行可能プログラム8は、実行時に実行時
情報取得部9により実行時の情報を取得、管理し、再コ
ンパイルを行うか否か、あるいは再コンパイルのタイミ
ングを決定する。サブルーチン呼出管理部10は、再コ
ンパイルを行うという決定が実行時情報取得部9によっ
てなされると、実行時再コンパイル部12を起動する。
【0110】実行時再コンパイル部12は、サブルーチ
ン呼出管理部10から実行時情報を受け取り、ソースコ
ード変換・コンパイル部18を起動する。受け取った実
行時情報は、ソースコード変換・コンパイル部18に伝
達される。
【0111】ソースコード変換・コンパイル部18は、
実行時情報を元に指示文付ソースコード1をソースコー
ド変換部13で変形してソースコード15を生成する。
さらに、コンパイラ14により、その変形されたソース
コード15をコンパイルし、オブジェクトコード16を
生成する。オブジェクトコード16の生成が完了すれ
ば、そのことを実行時再コンパイル部12に伝達する。
【0112】サブルーチン呼出管理部10は、次に再コ
ンパイル対象のサブルーチンを呼び出す際は、実行時再
コンパイル部12に再コンパイルが終了したかどうかを
確認する。再コンパイルが終了していれば、オブジェク
トコード16をロードし、そちらを実行する。
【0113】次に、本実施形態のコンパイルシステムの
全体の動作について詳細に説明する。
【0114】図15は、サブルーチン呼出管理部10の
動作を示すフローチャート図である。まず、ステップS
51で再コンパイルの状態をチェックする。このステッ
プS51における再コンパイルの状態には、「再コンパ
イル前」、「再コンパイル中」、「再コンパイル失
敗」、「再コンパイル済み」があり、それぞれ異なるス
テップへ分岐する。なお、再コンパイルの状態が「再コ
ンパイル失敗」の場合と「再コンパイル済み」の場合の
動作であるステップS52、S53の動作は、前述の図
6で示したステップS2、S3の動作と同じであり、こ
こでは、その説明は省略する。
【0115】上記ステップS51の状態が「再コンパイ
ル前」の場合は、記録しておいた実行時情報を元に再コ
ンパイルの効果がある実行時情報かどうかを調べる(ス
テップS55)。もし再コンパイルの効果がある実行時
情報であると判断した場合は、実行時再コンパイル部1
2を起動し(ステップS56)、実行時情報を実行時再
コンパイル部に伝達する(ステップS57)。ただし、
ここで伝達する実行時情報は、プログラムの変形に必要
な情報だけでよく、取得したすべての情報を伝達する必
要は無い。次に状態を「再コンパイル中」に変更し(ス
テップS58)、通常のサブルーチンを実行する(ステ
ップS59)。もしステップS55で再コンパイルの効
果がある実行時情報では無いと判断した場合、状態を
「再コンパイル失敗」に変更し(ステップS60)、通
常のサブルーチンを実行する(ステップS61)。
【0116】上記ステップS51でチェックした再コン
パイルの状態が「再コンパイル中」である場合は、実行
時再コンパイル部12に再コンパイルの終了状態をたず
ね(ステップS54)、この再コンパイル状態をチェッ
クする(ステップS62)。もし、ステップS62の再
コンパイル状態が「再コンパイル成功」ならば、再コン
パイルされたオブジェクトをロードし(ステップS6
4)、状態を「再コンパイル済み」に変更し(ステップ
S65)、再コンパイルしたサブルーチンを実行する
(ステップS66)。上記ステップS62の再コンパイ
ル状態が、もし「再コンパイル中」ならば、通常のサブ
ルーチンを実行する(ステップS63)。
【0117】次に、実行時再コンパイル部12の動作を
詳細に説明する。図16は、実行時再コンパイル部12
の動作を示すフローチャート図である。以下、この図1
6を参照して説明する。
【0118】前述の図15のステップS56で起動され
ると、まず、実行時情報を受信する(ステップS7
1)。次に、ソースコード変換・コンパイラ部18を起
動し(ステップS72)、その実行時情報をソースコー
ド変換・コンパイラ部18に渡す。次に、ソースコード
変換・コンパイル部18あるいはサブルーチン呼出管理
部10からのメッセージを受け取る(ステップS7
3)。受信メッセージの種類をチェックし(ステップS
74)、受信メッセージがソースコード変換・コンパイ
ル部18からのコンパイル終了通知であれば、コンパイ
ルが終了したという結果を保存する(ステップS7
5)。受信メッセージがサブルーチン呼出管理部10か
らの再コンパイル終了確認であれば、上記ステップS7
5で終了通知を受け取ってコンパイル終了が保存された
かどうかの確認を行う(ステップS76)。終了であれ
ば、コンパイルが終了したことを通知し(ステップS4
7)、終了していなければコンパイル中であることを通
知する(ステップS78)。
【0119】次に、上記ステップS72で起動されるソ
ースコード変換・コンパイラ部18の動作について詳細
に説明する。図17は、ソースコード変換・コンパイラ
部18の動作を示すフローチャート図である。以下、こ
の図17を参照して説明する。
【0120】まず、ソースコード変換部13で実行時情
報に基づきソースコードを変換する(ステップS8
1)。次に、変換したソースコードをコンパイラ14で
コンパイルし(ステップS82)、コンパイル終了通知
を実行時再コンパイル部12に送る(ステップS8
3)。
【0121】オブジェクトコードをロードする際の動
作、プログラムを変換する際の動作は前述の第1の実施
形態と同様であるので、ここでは、その説明は省略す
る。
【0122】以上のように構成される本実施形態のコン
パイルシステムでは、前述の第1の実施形態と比較し
て、再コンパイルの効果がある実行時情報かどうかを実
行可能プログラム8内で判断する構成になっているた
め、指示文で再コンパイル開始の指示を行う必要がなく
なる。また、実行時コンパイル管理部を削除することが
できるので、構成を単純にすることができる。
【0123】(他の実施形態)図18は、上述の第1ま
たは第2の実施形態のコンパイルを行うシステムの主要
構成を示す図であって、(a)は実行前コンパイルプロ
グラムを記録した記録媒体を備えるシステム、(b)は
実行時コンパイルプログラムを記録した記録媒体を備え
るシステムのブロック図である。
【0124】図18(a)に示すシステムは、実行前コ
ンパイルプログラムを記録した記録媒体21を備える。
この記録媒体21は磁気ディスク、半導体メモリその他
の記録媒体であってよい。
【0125】実行前コンパイルプログラムは記録媒体2
1から計算機システム20に読みこまれ、計算機システ
ム20の動作を制御する。計算機システム20は実行前
コンパイルプログラムの制御により、前述の第1または
第2の実施の形態における実行前コンパイル部11と同
様の処理を実行する。すなわち、指示文付ソースコード
1を入力とし、実行可能プログラム8を出力する。
【0126】図18(b)に示すシステムは、実行時再
コンパイルプログラムを記録した記録媒体31を備え
る。この記録媒体31は磁気ディスク、半導体メモリそ
の他の記録媒体であってよい。
【0127】実行時コンパイルプログラムは記録媒体3
1から計算機システム30bに読みこまれ、計算機シス
テム30bの動作を制御する。計算機システム30bは
実行時コンパイルプログラムの制御により、前述の第1
の実施形態における実行時コンパイル管理部17および
実行時コンパイル部12と同様の処理を、また前述の第
2の実施形態における実行時再コンパイル部12と同様
の処理を行う。すなわち、実行時情報、再コンパイル指
示を受け取り、実行時情報を元に指示文付ソースコード
1をオブジェクトコード16に変換し、その旨を必要に
応じて実行可能プログラム8が実行される計算機システ
ム30aに通知する。計算機システム30aでは、実行
可能プログラム8によるオブジェクトコードの実行が行
われる。この動作は、前述第1または第2の実施形態に
おける動作と同様である。
【0128】
【発明の効果】以上説明したように、本発明によれば、
従来のコンパイラでは不可能であった最適化が可能にな
るので、プログラムをより高速に実行できる。
【0129】また、再コンパイルに関する処理は、実行
可能プログラムが起動される計算機またはプロセッサと
は異なる計算機またはプロセッサにおいて行われるの
で、並列処理が可能であり、実行速度を低下させること
なく、効率良くプログラムを実行することができる。
【0130】さらに、ソースコードに追加文を加えるだ
けよいので、プログラマへの負担を少なくすることがで
きる。
【図面の簡単な説明】
【図1】本発明の第1の実施形態のコンパイルシステム
の実行時再コンパイルを行う部分の主要部を示すブロッ
ク図である。
【図2】本発明の第1の実施形態のコンパイルシステム
の実行前コンパイルを行う部分の主要部を示すブロック
図である。
【図3】本発明のコンパイルシステムに用いられる指示
文付ソースコードの一例を示す図である。
【図4】図3に示す指示文付ソースコードの変換例を示
す図である。
【図5】図1に示すコンパイルシステムの実行前コンパ
イル部において生成されるシンボルテーブルの一例を示
す図である。
【図6】図1に示すコンパイルシステムのサブルーチン
呼出管理部の動作を示すフローチャート図である。
【図7】本発明のコンパイルシステムの実行時再コンパ
イル部において生成されるオブジェクトコードの一例を
示す模式図である。
【図8】図1に示すコンパイルシステムのサブルーチン
呼出管理部におけるオブジェクトコードのロード動作を
示すフローチャート図である。
【図9】図1に示すコンパイルシステムの実行時再コン
パイル管理部の動作を示すフローチャート図である。
【図10】図1に示すコンパイルシステムの実行時再コ
ンパイル部の動作を示すフローチャート図である。
【図11】図1に示すコンパイルシステムにおけるソー
スコード変換を説明するための図で、(a)はソースコ
ード変換前のプログラムの一例を示す図、(b)は
(a)のプログラムをソースコード変換したイメージを
示す図である。
【図12】図1に示すコンパイルシステムにおけるソー
スコード変換を説明するための図で、(a)はソースコ
ード変換前のプログラムの一例を示す図、(b)は
(a)のプログラムをソースコード変換したイメージを
示す図である。
【図13】図1に示すコンパイルシステムにおけるソー
スコード変換を説明するための図で、(a)はソースコ
ード変換前のプログラムの一例を示す図、(b)は
(a)のプログラムをソースコード変換したイメージを
示す図である。
【図14】本発明の第2の実施形態のコンパイルシステ
ムの実行時再コンパイルを行う部分の主要部を示すブロ
ック図である。
【図15】図14に示すコンパイルシステムのサブルー
チン呼出管理部の動作を示すフローチャート図である。
【図16】図14に示すコンパイルシステムの実行時再
コンパイル部全体の動作を示すフローチャート図であ
る。
【図17】図14に示すコンパイルシステムのソースコ
ード変換・コンパイラ部実行時再コンパイル部全体の動
作を示すフローチャート図である。
【図18】図2および図1、または図14に示すコンパ
イルシステムの主要構成を示す図であって、(a)は実
行前コンパイルプログラムを記録した記録媒体を備える
システムのブロック図、(b)は実行時コンパイルプロ
グラムを記録した記録媒体を備えるシステムのブロック
図である。
【図19】従来のコンパイル方法を説明するための説明
図で、(a)は最適化可能なプログラムの一例を示す
図、(b)は(a)のプログラムを最適化したプログラ
ムのイメージを示す図、(c)は最適化不能なプログラ
ムの一例を示す図である。
【図20】従来のコンパイル方法を説明するための説明
図で、(a)は最適化可能なプログラムの一例を示す
図、(b)は(a)のプログラムを最適化したプログラ
ムのイメージを示す図、(c)は最適化不能なプログラ
ムの一例を示す図である。
【図21】従来のコンパイル方法を説明するための説明
図で、(a)は最適化可能なプログラムの一例を示す
図、(b)は(a)のプログラムを最適化したプログラ
ムのイメージを示す図、(c)は最適化不能なプログラ
ムの一例を示す図である。
【図22】従来のコンパイル方法を説明するための説明
図で、(a)は最適化可能なプログラムの一例を示す
図、(b)は(a)のプログラムを最適化したプログラ
ムのイメージを示す図、(c)は最適化不能なプログラ
ムの一例を示す図である。
【図23】従来のコンパイル方法を説明するための説明
図で、(a)は最適化可能なプログラムの一例を示す
図、(b)は(a)のプログラムを最適化したプログラ
ムのイメージを示す図、(c)は最適化不能なプログラ
ムの一例を示す図である。
【図24】従来のコンパイル方法を説明するための説明
図で、(a)は並列化可能なプログラムの一例を示す
図、(b)は並列化不能なプログラムの一例を示す図で
ある。
【図25】従来のコンパイル方法では並列化不能なプロ
グラムの一例を示す図である。
【図26】従来のコンパイル方法を説明するための説明
図で、(a)は最適化可能なプログラムの一例を示す
図、(b)および(c)は最適化不能であるプログラム
の一例を示す図である。
【符号の説明】
1 指示文付ソースコード 2 指示文解釈部 3 シンボルテーブル 4、6、14 コンパイラ 5 指示文解釈後ソースコード 7 実行時コンパイルライブラリ 8 実行可能プログラム 9 実行時情報取得部 10 サブルーチン呼出管理部 11 実行前コンパイル部 12 実行時再コンパイル部 13 ソースコード変換部 15 変換されたソースコード 16 オブジェクトコード 17 実行時再コンパイル管理部 18 ソースコード変換・コンパイル部 20、30a、30b 計算機システム 21、31 記録媒体

Claims (19)

    【特許請求の範囲】
  1. 【請求項1】 ソースコードを実行可能プログラムに変
    換する実行前コンパイル手段と、 前記実行可能プログラムの実行時に、前記ソースコード
    に含まれる変数値に関する実行時情報を取得する実行時
    情報取得手段と、 前記実行可能プログラムの実行中に、前記実行時情報取
    得手段にて取得された変数値に関する実行時情報を用い
    て前記ソースコードを最適化または変形し、これを再コ
    ンパイルしてオブジェクトコードを生成する実行時再コ
    ンパイル手段と、 前記実行時再コンパイル手段から生成されたオブジェク
    トコードをロードし、これを前記実行可能プログラムに
    代えて実行するサブルーチン呼出管理手段とを有するこ
    とを特徴とするコンパイルシステム。
  2. 【請求項2】 実行時再コンパイル手段は、実行可能プ
    ログラムが起動される計算機またはプロセッサとは異な
    る計算機またはプロセッサ上で起動されることを特徴と
    する請求項1に記載のコンパイルシステム。
  3. 【請求項3】 取得された変数値に関する実行時情報を
    実行時情報取得手段から受け取り、該受け取った実行時
    情報が所定の条件を満たすか否かを判断する実行時再コ
    ンパイル管理手段をさらに有し、 実行時再コンパイル手段は、前記実行時再コンパイル管
    理手段による判断が条件を満たすとなった場合にのみ、
    実行時情報を用いた再コンパイルを行うことを特徴とす
    る請求項1に記載のコンパイルシステム。
  4. 【請求項4】 実行時再コンパイル管理手段は、実行可
    能プログラムが起動される計算機またはプロセッサとは
    異なる計算機またはプロセッサ上で起動されることを特
    徴とする請求項3に記載のコンパイルシステム。
  5. 【請求項5】 サブルーチン呼出管理手段は、取得され
    た変数値に関する実行時情報を実行時情報取得手段から
    受け取り、該受け取った実行時情報が所定の条件を満た
    しているかを判断し、 実行時再コンパイル手段は、前記サブルーチン呼出管理
    手段による判断が条件を満たすとなった場合にのみ、実
    行時情報を用いた再コンパイルを行うことを特徴とする
    請求項1に記載のコンパイルシステム。
  6. 【請求項6】 ソースコードは、再コンパイルを行うル
    ーチンおよびそのタイミングならびに最適化または変形
    の手法を少なくとも記述した指示文を含み、 実行前コンパイル手段は、前記指示文に基づいて、実行
    時情報取得手段による実行時情報の取得、実行時再コン
    パイル手段による再コンパイル、サブルーチン呼出管理
    手段によるオブジェクトコードのロードおよびその実行
    がそれぞれ可能となるように前記ソースコードを変形
    し、これをコンパイルして実行可能プログラムに変換す
    ることを特徴とする請求項1に記載のコンパイルシステ
    ム。
  7. 【請求項7】 実行前コンパイル手段は、ソースコード
    内で参照されている大域シンボルを検出し、該大域シン
    ボルについて、そのシンボル名とそのシンボルへのポイ
    ンタとを対応づけたシンボルテーブルを作成し、 サブルーチン呼出管理手段は、実行時再コンパイル手段
    からオブジェクトコードをロードするにあたって、該オ
    ブジェクトコード中で参照される大域シンボルが該オブ
    ジェクトコード内で定義されていない場合は、前記シン
    ボルテーブルを検索して該当する大域シンボルのポイン
    タを参照することを特徴とする請求項1に記載のコンパ
    イルシステム。
  8. 【請求項8】 ソースコードを実行可能プログラムに変
    換する第1のステップと、 前記実行可能プログラムを実行して、前記ソースコード
    に含まれる変数値に関する実行時情報を取得する第2の
    ステップと、 前記実行可能プログラムの実行中に、前記第2のステッ
    プで取得された変数値に関する実行時情報を用いて前記
    ソースコードを最適化または変形し、これを再コンパイ
    ルしてオブジェクトコードを生成する第3のステップ
    と、 前記第3のステップで生成されたオブジェクトコードを
    ロードし、これを前記実行可能プログラムに代えて実行
    する第4のステップとを含むことを特徴とするコンパイ
    ル方法。
  9. 【請求項9】 第3のステップの処理を、実行可能プロ
    グラムが起動される計算機またはプロセッサとは異なる
    計算機またはプロセッサにより行うことを特徴とする請
    求項8に記載のコンパイル方法。
  10. 【請求項10】 第2のステップで取得された変数値に
    関する実行時情報が所定の条件を満たしているかを判断
    する第5のステップをさらに含み、 前記第5のステップにおける判断が条件を満たすとなっ
    た場合にのみ、第3のステップの処理を実行することを
    特徴とする請求項8に記載のコンパイル方法。
  11. 【請求項11】 第5のステップの処理を、実行可能プ
    ログラムが起動される計算機またはプロセッサとは異な
    る計算機またはプロセッサにより行うことを特徴とする
    請求項10に記載のコンパイル方法。
  12. 【請求項12】 ソースコードとして、再コンパイルを
    行うルーチンおよびそのタイミングならびに最適化また
    は変形の手法を少なくとも記述した指示文を含む指示文
    付ソースコードを用い、 第1のステップが、前記指示文に基づいて、実行時情報
    取得手段による実行時情報の取得、実行時再コンパイル
    手段による再コンパイル、サブルーチン呼出管理手段に
    よるオブジェクトコードのロードおよびその実行がそれ
    ぞれ可能となるように前記指示文付ソースコードを変形
    し、これをコンパイルして実行可能プログラムに変換す
    るステップであることを特徴とする請求項8に記載のコ
    ンパイル方法。
  13. 【請求項13】 ソースコード内で参照されている大域
    シンボルを検出し、該大域シンボルについて、そのシン
    ボル名とそのシンボルへのポインタとを対応づけたシン
    ボルテーブルを作成する第6のステップと、 オブジェクトコードをロードするにあたって、該オブジ
    ェクトコード中で参照される大域シンボルが該オブジェ
    クトコード内で定義されていない場合は、前記第6のス
    テップで作成されたシンボルテーブルを検索して該当す
    る大域シンボルのポインタを参照する第7のステップと
    をさらに含むことを特徴とする請求項8に記載のコンパ
    イル方法。
  14. 【請求項14】 ソースコードを実行可能プログラムに
    変換する第1の処理と、 前記実行可能プログラムを実行して、前記ソースコード
    に含まれる変数値に関する実行時情報を取得する第2の
    処理と、 前記実行可能プログラムの実行中に、前記第2の処理で
    取得された変数値に関する実行時情報を用いて前記ソー
    スコードを最適化または変形し、これを再コンパイルし
    てオブジェクトコードを生成する第3の処理と、 前記第3の処理で生成されたオブジェクトコードをロー
    ドし、これを前記実行可能プログラムに代えて実行する
    第4の処理とをコンピュータに実行させるためのプログ
    ラム。
  15. 【請求項15】 第3の処理を、実行可能プログラムが
    起動される計算機またはプロセッサとは異なる計算機ま
    たはプロセッサにより行うようにしたことを特徴とする
    請求項14に記載のプログラム。
  16. 【請求項16】 第2の処理で取得された変数値に関す
    る実行時情報が所定の条件を満たしているかを判断する
    第5の処理をさらに含み、 前記第5の処理における判断が条件を満たすとなった場
    合にのみ、第3の処理を実行するようにしたことを特徴
    とする請求項14に記載のプログラム。
  17. 【請求項17】 第5の処理を、実行可能プログラムが
    起動される計算機またはプロセッサとは異なる計算機ま
    たはプロセッサにより行うようにしたことを特徴とする
    請求項16に記載のプログラム。
  18. 【請求項18】 ソースコードとして、再コンパイルを
    行うルーチンおよびそのタイミングならびに最適化また
    は変形の手法を少なくとも記述した指示文を含む指示文
    付ソースコードを用い、 第1の処理が、前記指示文に基づいて、実行時情報取得
    手段による実行時情報の取得、実行時再コンパイル手段
    による再コンパイル、サブルーチン呼出管理手段による
    オブジェクトコードのロードおよびその実行がそれぞれ
    可能となるように前記指示文付ソースコードを変形し、
    これをコンパイルして実行可能プログラムに変換する処
    理であることを特徴とする請求項14に記載のプログラ
    ム。
  19. 【請求項19】 ソースコード内で参照されている大域
    シンボルを検出し、該大域シンボルについて、そのシン
    ボル名とそのシンボルへのポインタとを対応づけたシン
    ボルテーブルを作成する第6の処理と、 オブジェクトコードをロードするにあたって、該オブジ
    ェクトコード中で参照される大域シンボルが該オブジェ
    クトコード内で定義されていない場合は、前記第6のス
    テップで作成されたシンボルテーブルを検索して該当す
    る大域シンボルのポインタを参照する第7の処理とをさ
    らにコンピュータに実行させることを特徴とする請求項
    14に記載のプログラム。
JP2001017287A 2001-01-25 2001-01-25 コンパイルシステム、コンパイル方法およびプログラム Withdrawn JP2002222088A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2001017287A JP2002222088A (ja) 2001-01-25 2001-01-25 コンパイルシステム、コンパイル方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001017287A JP2002222088A (ja) 2001-01-25 2001-01-25 コンパイルシステム、コンパイル方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2002222088A true JP2002222088A (ja) 2002-08-09

Family

ID=18883520

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001017287A Withdrawn JP2002222088A (ja) 2001-01-25 2001-01-25 コンパイルシステム、コンパイル方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2002222088A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014157434A (ja) * 2013-02-15 2014-08-28 Mitsubishi Electric Corp プログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014157434A (ja) * 2013-02-15 2014-08-28 Mitsubishi Electric Corp プログラム生成方法、プログラム実行方法、プログラム生成装置、プログラム生成プログラム、プログラム実行装置およびプログラム実行プログラム

Similar Documents

Publication Publication Date Title
US7992140B2 (en) Compiler supporting programs as data objects
CN100481007C (zh) 无需额外的代码分析来进行链接时代码优化的方法和系统
US5276881A (en) ANDF producer using the HPcode-Plus compiler intermediate language
Kennedy et al. Telescoping languages: A strategy for automatic generation of scientific problem-solving systems from annotated libraries
US5339419A (en) ANDF compiler using the HPcode-plus compiler intermediate language
US5768592A (en) Method and apparatus for managing profile data
EP0905617B1 (en) Method for generating a java bytecode data flow graph
US5606697A (en) Compiler system for language processing program
US20020104076A1 (en) Code generation for a bytecode compiler
US5598561A (en) Optimizing compiler which generates multiple instruction streams to be executed in parallel
EP0718760A2 (en) Method and apparatus for generating platform-standard object files containing machine-independent code
US6948160B2 (en) System and method for loop unrolling in a dynamic compiler
US6895580B2 (en) Expression reduction during compilation through routine cloning
US20160246622A1 (en) Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages
Kataev Application of the LLVM Compiler Infrastructure to the Program Analysis in SAPFOR
Garcia et al. A novel approach towards automatic data distribution
Doolin et al. JLAPACK–compiling LAPACK Fortran to Java
US20170206068A1 (en) Program optimization based on directives for intermediate code
JP2002222088A (ja) コンパイルシステム、コンパイル方法およびプログラム
US20050144605A1 (en) Information processing system and code generation method
US20050125783A1 (en) Program optimization with intermediate code
CN113220327A (zh) 智能合约升级方法及区块链系统
Wende C++ data layout abstractions through proxy types
Kessler et al. EPIC-a retargetable, highly optimizing Lisp compiler
Memeti Enabling Dynamic Selection of Implementation Variants in Component-Based Parallel Programming for Heterogeneous Systems

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20041124

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20041124

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20060123

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071212

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20100405