(57)【特許請求の範囲】
【請求項１】
プログラムを変換するプログラム変換装置において、
配列代入文における両辺の配列のサイズが等しいことを示す言語仕様情報解析関数を含む言語仕様情報を記憶する言語仕様情報記憶手段と、
前記プログラムから、一方の配列の要素番号の始まり値と終わり値のいずれかに変数を含む配列代入文を取得し、前記言語仕様情報記憶手段に記憶された前記言語仕様情報解析関数に基づいて、取得した配列代入文に含まれる両辺の各配列の要素番号の始まり値から終わり値までの要素数が等しくなるように前記変数の変数値を特定する言語仕様情報解析手段と、
前記プログラム内の前記言語仕様情報解析手段が取得した配列代入文の前に、前記言語仕様情報解析手段が特定した前記変数値を前記変数に代入する代入式を埋め込む言語仕様解析結果情報埋め込み手段と、
を備えていることを特徴とするプログラム変換装置。
【請求項２】
前記言語仕様情報記憶手段には、前記プログラムの言語種別ごとに、前記言語種別に応じた前記言語仕様情報が登録されており、
前記言語仕様情報解析手段は、前記プログラムの言語種別を特定して、特定した前記言語種別に応じた前記言語仕様情報を選択する、
ことを特徴とする請求項１記載のプログラム変換装置。
【請求項３】
プログラムをコンパイルしてオブジェクトコードまたはソースプログラムを生成するコンパイラ装置において、
配列代入文における両辺の配列のサイズが等しいことを示す言語仕様情報解析関数を含む言語仕様情報を記憶する言語仕様情報記憶手段と、
前記プログラムから、一方の配列の要素番号の始まり値と終わり値のいずれかに変数を含む配列代入文を取得し、前記言語仕様情報記憶手段に記憶された前記言語仕様情報解析関数に基づいて、取得した配列代入文に含まれる両辺の各配列の要素番号の始まり値から終わり値までの要素数が等しくなるように前記変数の変数値を特定する言語仕様情報解析手段と、
前記プログラム内の前記言語仕様情報解析手段が取得した配列代入文の前に、前記言語仕様情報解析手段が特定した前記変数値を前記変数に代入する代入式を埋め込む言語仕様解析結果情報埋め込み手段と、
前記代入式が埋め込まれた前記プログラムに基づいて、当該プログラムのコンパイルを実行するコンパイル手段と、
を備えていることを特徴とするコンパイラ装置。
【請求項４】
コンピュータを、
配列代入文における両辺の配列のサイズが等しいことを示す言語仕様情報解析関数を含む言語仕様情報を記憶する言語仕様情報記憶手段、
プログラムから、一方の配列の要素番号の始まり値と終わり値のいずれかに変数を含む配列代入文を取得し、前記言語仕様情報記憶手段に記憶された前記言語仕様情報解析関数に基づいて、取得した配列代入文に含まれる両辺の各配列の要素番号の始まり値から終わり値までの要素数が等しくなるように前記変数の変数値を特定する言語仕様情報解析手段、
前記プログラム内の前記言語仕様情報解析手段が取得した配列代入文の前に、前記言語仕様情報解析手段が特定した前記変数値を前記変数に代入する代入式を埋め込む言語仕様解析結果情報埋め込み手段、
として機能させることを特徴とするプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は最適化促進装置に関し、特にＦｏｒｔｒａｎ９０，９５言語のように、言語仕様の定義からプログラム上の変数の値や依存関係が明確にできる言語に対して、その言語仕様を利用した解析結果情報を最適化部が利用できる形式に変換し、各最適化機能を促進させるようにしたプログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
通常、コンパイラ装置では、フロントエンド部にてソースプログラムの構文解析などを行い、最適化部でプログラムの最適化を実施し、出力装置で目的プログラムを生成する。ここで、プログラムがたとえば配列記述を含んでいる場合、そのような配列記述はループとして認識される。このとき、目的プログラムにおけるループの部分は実行時間の比重が高いため、最適化部が配列記述に関係する部分のコードを最適な状態に制御して、実行性能を改善することが行なわれている。
【０００３】
【従来の技術】
従来より、プログラム言語によってその表記方法が異なるが、言語仕様の定義からプログラム上の変数の値や依存関係を明確にすることができる言語がある。その言語の例として、Ｆｏｒｔｒａｎ９０，９５言語がある。Ｃ言語やＦｏｒｔｒａｎ７７言語などでは、配列アクセスを要素単位でしか記述できないのに対して、Ｆｏｒｔｒａｎ９０，９５言語は、図８の（Ａ）に示したような配列のスカラ表現を（Ｂ）に示したようなベクトル表現で表記することができる。ここで、言語仕様の定義からプログラム上の変数の定義や依存関係が明確にできるというのは、図８の（Ｂ）において、４行目の記述から「Ｌ＝１００」が成立することを意味する。
【０００４】
従来の最適化技術の一つとして、ループ融合という最適化は著名な技術であり、その際、利用する配列の依存関係解析も高度な技術が存在している。ここで、ループ融合とは、所定の条件を満足する複数のループによって実行される処理を一つのループによる処理にまとめ、これによって、ループを繰り返し実行するために必要な回転制御のオーバーヘッドをループ数の減少によって削減する処理である。その依存関係解析技術を使ってループ融合の最適化を促進させる方法が既に提案されている（特開平９−６２５１４号公報）。
【０００５】
この方法によれば、Ｆｏｒｔｒａｎ９０，９５のようなベクトル表現ができる言語に対して、配列の添字解析機能を用いてループ融合を促進し、最適な融合ループを作成している。たとえば図９において、上方に記述した３行が配列のベクトル表現を示しており、これに対して配列の添字解析を実行する。言語仕様上、代入文の右辺と左辺のサイズは同じであることから、「Ｌ＝５＝Ｍ−１＝Ｎ−２」という配列の添字解析結果情報が得られる。この配列の添字解析結果情報、すなわち「Ｌ＝５」という情報は、ｄｏ文において、ループの回数が５回というループ融合促進とそれによる最適なループ形状の出力とに利用されていることが分かる。
【０００６】
【発明が解決しようとする課題】
このように、従来では、配列の添字解析結果情報は、ループ融合という最適化の一つに適用することによって、最適化の促進に有効に働いたが、しかし、この配列の添字解析結果情報は他の最適化において利用されることなく捨てられていたという問題点があった。
【０００７】
本発明はこのような点に鑑みてなされたものであり、言語仕様の定義が示唆する情報を利用してさらに他の最適化が促進される最適化促進装置を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記課題を解決するためにプログラム変換装置が提供される。このプログラム変換装置は、言語仕様情報記憶手段、言語仕様情報解析手段および言語仕様解析結果情報埋め込み手段を有する。言語仕様情報記憶手段は、配列代入文における両辺の配列のサイズが等しいことを示す言語仕様情報解析関数を含む言語仕様情報を記憶する。言語仕様情報解析手段は、プログラムから、一方の配列の要素番号の始まり値と終わり値のいずれかに変数を含む配列代入文を取得し、言語仕様情報記憶手段に記憶された言語仕様情報解析関数に基づいて、取得した配列代入文に含まれる両辺の各配列の要素番号の始まり値から終わり値までの要素数が等しくなるように変数の変数値を特定する。言語仕様解析結果情報埋め込み手段は、プログラム内の言語仕様情報解析手段が取得した配列代入文の前に、言語仕様情報解析手段が特定した変数値を変数に代入する代入式を埋め込む。
【０００９】
また、上記課題を解決するためにコンパイラ装置が提供される。このコンパイラ装置は、言語仕様情報記憶手段、言語仕様情報解析手段、言語仕様解析結果情報埋め込み手段およびコンパイラ手段を有する。言語仕様情報記憶手段は、配列代入文における両辺の配列のサイズが等しいことを示す言語仕様情報解析関数を含む言語仕様情報を記憶する。言語仕様情報解析手段は、プログラムから、一方の配列の要素番号の始まり値と終わり値のいずれかに変数を含む配列代入文を取得し、言語仕様情報記憶手段に記憶された言語仕様情報解析関数に基づいて、取得した配列代入文に含まれる両辺の各配列の要素番号の始まり値から終わり値までの要素数が等しくなるように変数の変数値を特定する。言語仕様解析結果情報埋め込み手段は、プログラム内の言語仕様情報解析手段が取得した配列代入文の前に、言語仕様情報解析手段が特定した変数値を変数に代入する代入式を埋め込む。コンパイラ手段は、代入式が埋め込まれたプログラムに基づいて、そのプログラムのコンパイルを実行する。
【００１０】
また、上記プログラム変換装置と同様の機能をコンピュータに実行させるプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体が提供される。
【００１３】
【発明の実施の形態】
まず、本発明の概略について図面を参照して説明する。
図１は本発明による最適化促進装置の構成例を示す図である。図１は全体としては本発明による最適化促進装置を適用したコンパイラ装置を示している。コンパイラ装置は、基本的には、プログラムソースを入力する入力部１と、入力されたプログラムソースに対して構文解析などを実施するフロントエンド部２と、プログラムの最適化を実施する最適化部３と、プログラムまたはオブジェクトコードを出力する出力部４とから構成されており、これに本発明による最適化促進装置５が実装されている。
【００１４】
最適化促進装置５はフロントエンド部２と最適化部３との間に挿入され、言語仕様情報解析部６と、言語仕様テーブル７と、言語仕様解析結果情報埋め込み部８とを備えている。その言語仕様解析結果情報埋め込み部８には、関数テーブル９を有している。また、この最適化促進装置５における言語仕様テーブル７には、各種言語に対する言語仕様の情報があらかじめ保持されている。
【００１５】
以上の構成において、コンパイラ装置の入力部１にプログラムソースが投入されると、フロントエンド部２ではそのプログラムソースに対して構文解析などが行われる。次に、最適化促進装置５では、言語仕様情報解析部６が言語仕様テーブル７を参照して言語仕様情報を解析する言語仕様情報解析関数（以下チェック関数という）を決め、そのチェック関数を言語仕様解析結果情報埋め込み部８の関数テーブル９に登録する。次に、言語仕様情報解析部６がプログラムの命令を獲得すると、言語仕様解析結果情報埋め込み部８は、関数テーブル９に登録された各チェック関数に対して言語仕様の定義からプログラムの変数の定義や依存関係が明確にできるかどうかをチェックし、言語仕様解析結果情報を獲得する。そして、言語仕様解析結果情報埋め込み部８は、獲得された言語仕様解析結果情報のコードを獲得した命令の前に埋め込む。このようにして言語仕様解析結果情報が埋め込まれたプログラムは、最適化部３に渡されて最適化が実施され、出力部４よりプログラムまたはオブジェクトコードが出力される。
【００１６】
このように、最適化促進装置５は、言語仕様テーブル７に保持された言語仕様の定義からプログラムソース上の変数の定義や依存関係が明確な言語仕様解析解析結果情報を最適化部３が利用できるコードに変換し、プログラムソースに埋め込むようにした。これにより、最適化部３では、変数として渡されていた言語仕様情報が定数として渡されるようになる。この結果、最適化部３で実施される最適化は、たとえばループ融合のような特定の最適化が促進されるのではなく、複数の最適化が促進される可能性が出てくる。
【００１７】
次に、本発明の実施の形態をさらに詳細に説明する。まず、言語仕様テーブル７が保持する言語仕様情報の例について説明する。
図２は言語仕様テーブルの例を示す図であって、（Ａ）は言語仕様情報の第１のテーブルの例を示し、(Ｂ)は言語仕様情報の第２のテーブルの例を示している。図２の（Ａ）に示した言語仕様情報の第１のテーブルによれば、言語仕様情報解析関数（チェック関数）として、たとえば「配列のベクトル表記」が各言語に対して可能かどうかを定義している。また、（Ｂ）に示した言語仕様情報の第２のテーブルによれば、言語仕様情報解析関数（チェック関数）として、たとえばＮｏ．１に「配列代入文において、参照側の結果サイズと定義側のサイズは等しい」ということが各言語に対して当てはまるかどうかを定義している。
【００１８】
図３はプログラムソースの一例を示す図である。このプログラムソースの４行目および５行目の命令に注目すると、配列代入文の記述がある。配列代入文は、言語仕様情報解析部６による解析の結果、Ｆｏｒｔｒａｎ９０およびＦｏｒｔｒａｎ９５言語では、右辺と左辺のサイズが等しいことから、Ｌは５に等しく、Ｎは６に等しいことが分かる。本発明では、これら言語仕様解析結果情報である「Ｌ＝５」および「Ｎ＝６」を最適化部３に伝えることで、最適化の促進を図ることができる。この例では、プログラムソースの６行目に「ｄｏ  ｉ＝１，Ｌ」の記述がなされているが、その記述の中の変数Ｌは５であることを最適化部３に伝えることになる。その伝え方は、言語仕様解析結果情報埋め込み部８により、プログラムに言語仕様解析結果情報である「Ｌ＝５」および「Ｎ＝６」を埋め込むことによって行う。
【００１９】
図４は言語仕様解析結果情報を埋め込んだプログラムソースを示す図である。この図４によれば、図３に示すプログラムに対して、ＬおよびＮを含む命令の前に、「Ｌ＝５」、「Ｎ＝６」という言語仕様解析結果情報がそれぞれ埋め込まれている。この例では、実際に最適化部３に伝えられて有効になるのは、「Ｌ＝５」の言語仕様解析結果情報だけである。
【００２０】
ここで、具体的な効果を明示するために、「Ｌ＝５」という情報を最適化部３に伝えることで、促進される最適化について説明する。
図５はループの全展開最適化を適用した場合の例を示す図である。この図５のプログラムは、「Ｌ＝５」という情報をプログラムソースの６行目のｄｏループの終値として適用することにより、ループアンローリング最適化が促進された関数本体部分を示している。図５によれば、ループアンローリング最適化が実施されて、ループは全展開され、プログラム上にループはなくなっている。
【００２１】
次に、図５のループアンローリング最適化を実施したプログラムに対して、さらに並列度を高める最適化を適用した例を示す。
図６は並列度を向上させる最適化を適用した場合の例を示す図である。図５のプログラムに対して演算順序を変更することにより、並列度を高める最適化を適用すると、図６のプログラムのように最適化される。すなわち、図５のプログラムでは、ｋの演算が連なっているが、これらは、それぞれ前の演算が終了しないと、後ろの演算を実行することはできない。しかし、図６のプログラムでは、「ｋ＝ｋ＋ａ(１)」、「ｋ１＝ａ(２)＋ａ（３）」および「ｋ２＝ａ(４)＋ａ（５）」という記述に注目してみると、たとえば「ｋ１＝ａ(２)＋ａ(３)」という演算は、その上の「ｋ＝ｋ＋ａ(１)」という演算の結果を使わないので、上の演算と関係なく演算を実行することができる。その下の「ｋ２＝ａ(４)＋ａ（５）」という演算も上の演算に依存せずに演算を実行することができる。したがって、この三つの演算は、複数の足し算を一回で発行できるようなマシンにおいて、複数の足し算を並行して行うことができるような最適化が実施されたことになる。ただし、配列ａ、変数ｋが浮動少数点数である場合、この最適化は精度誤差が生じる可能性がある。
【００２２】
このように、プログラムから明確となる言語仕様解析結果情報である「Ｌ＝５」をプログラムに埋め込むだけで、後に記述されたｄｏループの終値に定数伝搬することができ、従来技術の最適化が促進されるのである。
【００２３】
次に、最適化促進装置の処理の流れについて図３に示したプログラムソースが入力された場合を例に説明する。この場合、処理のターゲットであるプログラムは、Ｆｏｒｔｒａｎ９０言語である。
【００２４】
図７は最適化促進装置のアルゴリズムを示すフローチャートである。まず、言語仕様情報解析部６は、言語仕様テーブル７を元に、ターゲットである言語仕様を利用して情報解析を行うチェック関数（言語仕様情報解析関数）を決定し、それを言語仕様解析結果情報埋め込み部８の関数テーブル９ヘ登録を行う（ステップＳ１）。すなわち、図２に示した二つのテーブルが参照され、そこから、第２のテーブルにおけるＮｏ．１およびＮｏ．２のチェック関数が関数テーブル９に登録される。次に、言語仕様情報解析部６は、プログラムから命令を獲得し（ステップＳ２）、獲得した命令が最後の命令かどうかを判断する（ステップＳ３）。最後の命令であれば、この処理は終了し、最後の命令でなければ、カウンタ値ｉをその初期値である「１」に設定する（ステップＳ４）。次に、ｉがチェック関数テーブルサイズ以下かどうかが判断される（ステップＳ５）。ここでは、チェック関数テーブルサイズは、関数テーブル９にはＮｏ．１およびＮｏ．２のチェック関数が登録されているので、「２」である。ｉがチェック関数テーブルサイズを越えていれば、ステップＳ２に戻り、ｉがチェック関数テーブルサイズ以下であれば、言語仕様情報解析部６は関数テーブル９からｉ番目のチェック関数を呼び出し（ステップＳ６）、プログラム内の言語仕様情報の解析を行い、言語仕様解析結果情報を獲得する（ステップＳ７）。すなわち、プログラムソースの４行目の命令に対して「Ｌ＝５」、５行目の命令に対して「Ｎ＝６」という言語仕様解析結果情報を獲得する。次に、言語仕様解析結果情報埋め込み部８は、獲得した言語仕様解析結果情報をプログラムソースに埋め込む（ステップＳ８）。この埋め込みは、獲得した言語仕様解析結果情報を獲得した命令の前の行に対して行う。そして、カウンタ値ｉをインクリメントし（ステップＳ９）、ステップＳ５に戻る。
【００２５】
このようにして、登録されたチェック関数すべてについて、言語仕様情報の解析および言語仕様解析結果情報の獲得を行い、プログラムソースへの埋め込みを行うことで、図４に示したプログラムソースが得られる。この言語仕様解析結果情報が埋め込まれたプログラムが最適化部３への入力となり、この結果、図５および図６に示したような最適化が可能になる。
【００２６】
なお、以上の実施の形態では、最適化促進装置５への入力は、プログラムソースの場合を示したが、これに限らず、コンパイラ中間言語であってもよい。
また、以上の実施の形態では、言語仕様情報の解析結果を表す情報を最適化部３へ伝える方法として、言語仕様情報解析結果情報をプログラムソースに埋め込むやり方を例示したが、得られた言語仕様情報解析結果情報をテーブルに保持しておいて、その情報を最適化部３に渡すという方法もある。ただし、この言語仕様解析結果情報テーブルを利用する方法は、ある変数の値がいくつでそれの有効範囲がどこからどこまでであるという情報を求めるための手間のかかる解析が必要であることと、言語仕様解析結果情報埋め込み機能では、既存最適化にプラグインする形で適用できるが、言語仕様解析結果情報テーブルを利用するやり方は、最適化自体、そのテーブルの検索をし、ある命令の時点でそれが参照する変数の値が分かるかどうかをチェックする処理が必要となる。
【００２７】
さらに、上記の最適化促進装置５の処理内容は、コンピュータで読み取り可能な記録媒体に記録されたプログラムに記述させておくことができる。このプログラムをコンピュータで実行することにより、上記処理がコンピュータで実現できる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置や半導体メモリなどがある。市場に流通させる場合には、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）やフロッピーディスクなどの可搬型記録媒体にプログラムを格納して流通させたり、ネットワークを介して接続されたコンピュータの記憶装置に格納しておき、ネットワークを通じて他のコンピュータに転送することもできる。コンピュータで実行する際には、コンピュータ内のハードディスク装置などにプログラムを格納しておき、メインメモリにロードして実行する。
【００２８】
【発明の効果】
以上説明したように本発明では、言語仕様の定義からプログラム内の変数の値や依存関係が明確にできる言語に対して、その言語仕様を利用した解析結果情報を最適化部で利用できる形式に変換するように構成した。このため、従来の技術では不可能であった様々な最適化を促進させることができるようになる。
【００２９】
また、促進される最適化は特定の最適化が促進されるわけではなく、複数の最適化が促進される可能性があり、その効果は非常に大きい。
【図面の簡単な説明】
【図１】本発明による最適化促進装置の構成例を示す図である。
【図２】言語仕様テーブルの例を示す図であって、（Ａ）は言語仕様情報の第１のテーブルの例を示し、(Ｂ)は言語仕様情報の第２のテーブルの例を示している。
【図３】プログラムソースの一例を示す図である。
【図４】言語仕様解析結果情報を埋め込んだプログラムソースを示す図である。
【図５】ループの全展開最適化を適用した場合の例を示す図である。
【図６】並列度を向上させる最適化を適用した場合の例を示す図である。
【図７】最適化促進装置のアルゴリズムを示すフローチャートである。
【図８】配列の記述例を示す図であって、（Ａ）は配列のスカラ表現を示し、(Ｂ)は配列のベクトル表現を示している。
【図９】配列の添字解析機能を用いたループ融合促進および最適なループ形状の決定の例を示す図である。
【符号の説明】
１  入力部
２  フロントエンド部
３  最適化部
４  出力部
５  最適化促進装置
６  言語仕様情報解析部
７  言語仕様テーブル
８  言語仕様解析結果情報埋め込み部
９  関数テーブル
【図１】
0004462676.tif 000002
【図２】
0004462676.tif 000003
【図３】
0004462676.tif 000004
【図４】
0004462676.tif 000005
【図５】
0004462676.tif 000006
【図６】
0004462676.tif 000007
【図７】
0004462676.tif 000008
【図８】
0004462676.tif 000009
【図９】
0004462676.tif 000010