JP2009211458A - コンパイラ、変数最適化装置、方法、及び、プログラム - Google Patents

コンパイラ、変数最適化装置、方法、及び、プログラム Download PDF

Info

Publication number
JP2009211458A
JP2009211458A JP2008054361A JP2008054361A JP2009211458A JP 2009211458 A JP2009211458 A JP 2009211458A JP 2008054361 A JP2008054361 A JP 2008054361A JP 2008054361 A JP2008054361 A JP 2008054361A JP 2009211458 A JP2009211458 A JP 2009211458A
Authority
JP
Japan
Prior art keywords
array
expression
formula
variable
intermediate code
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.)
Granted
Application number
JP2008054361A
Other languages
English (en)
Other versions
JP5169322B2 (ja
Inventor
Yasuko Tatai
靖子 多田井
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 JP2008054361A priority Critical patent/JP5169322B2/ja
Publication of JP2009211458A publication Critical patent/JP2009211458A/ja
Application granted granted Critical
Publication of JP5169322B2 publication Critical patent/JP5169322B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】ループ回数が、異なる変数や式を用いて定義された場合でも、ループ融合が可能な変数最適化装置を提供する。
【解決手段】宣言情報・配列式検出手段21は、中間コード32を入力し、ソースプログラム31における配列の宣言情報、及び、配列式を検出し、宣言情報テーブル、配列式テーブル33に登録する。参照配列検出手段22は、宣言情報テーブル、配列式テーブル33を参照して配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する。変数関係確定手段23は、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、下限/上限を定義する変数を定数化する。または、変数間の関係式を決定する。変数置換手段25は、中間コードに含まれる変数を、定数化した値、又は、決定した関係式を用いて置換する。
【選択図】図1

Description

本発明は、コンパイラ、及び、変数最適化装置に関し、更に詳しくは、ソースプログラムから中間コードを生成し、中間コードからオブジェクトプログラムを生成するコンパイラ、及び、そのようなコンパイラに用いられる変数最適化装置に関する。また、本発明は、コンパイル方法、変数最適化方法、及び、プログラムに関する。
近年、CPU(プロセッサ)の動作速度は、ハードウェアの改善などにより、高速化が進んでいる。一方で、メモリアクセスの性能は、CPUの速度の高速化に比べて改善が進んでいない。このため、メモリアクセスの少ないプログラムでは、性能を大きく改善することができるものの、メモリアクセスの多いプログラムは、性能改善の幅が小さい。プログラムの生成に際しては、メモリアクセスが多いプログラムの性能をいかに改善するかが課題となっている。
メモリアクセス回数は、ループ融合などのループ変形を行い、共通式の削除により、複数のループに存在している同一メモリへのアクセスを1つにまとめることで、削減可能である。コンパイラにて、このような処理を行い、実行プログラムにおけるメモリアクセスの回数を減らすことで、ソフトウェア的に、性能改善を図ることができる。
Fortranなどのプログラムでは、配列式で参照される配列の下限/上限が変数を用いて宣言されることがある。その場合、配列の形状を翻訳時には決定できないので、配列式に対して十分な最適化が行われないことがあった。変数を定数に置き換えてコンパイルする技術の一例が、特許文献1に記載されている。特許文献1では、変数の定義が一度のものを選択して、変数から定数への置換を行っている。
特開平2−118732号公報
ところで、科学技術計算で広く使われているFortranなどのプログラミング言語では、配列と配列の演算や、演算結果を代入する式を1つの文中に記述することで、配列の要素ごとに演算が可能な配列式が定義されている。図23に、ソースプログラムの一例を示す。式1−1のa(m1:m2)は、配列aの要素a(m1)からa(m2)を含む配列の一部である部分配列を表す。m1は下限、m2は上限と呼ばれている。配列の寸法は、アクセスする配列の要素の数を表す。例えば、a(1:5)の場合、a(1)、a(2)、a(3)、a(4)、a(5)の5つの要素を含むので、配列の寸法は5となる。式1−1は、m1からm2までの要素について、a(m1)=b(m1)+c(m1)、a(m1+1)=b(m1+1)+c(m1+1)のように、配列bと配列cとの要素ごとの加算結果を配列aの各要素に代入することを表す。配列の要素ごとに演算するので、1つの配列式では同じ形状の配列のみを記述するのが通常である。一方、式1−3は、全配列である。式1−3は、xの各要素に、cの部分配列の各要素を代入することを表す。
コンパイラは、配列式に対し、その配列式に現れる配列の下限と上限とに基づいて計算した初期値と終値とを持つループを内部的に生成する。コンパイラは、生成したループに対して最適化処理を行い、同じループ回数のループを融合し、共通式を削除することでループ内にある同じ配列要素へのアクセスを削減し、プログラムの高速化を図る。この最適化処理にて、複数のループを融合するためには、翻訳時に、ループの初期値と終値とを元に計算するループの繰り返し回数が同じである必要がある。しかし、Fortranなどのプログラムでは、配列式で参照される配列の下限と上限とが変数を用いて宣言されることがあり、その場合、配列の形状を翻訳時に決定できないために、配列式に対して十分に最適化が行えないことがあった。以下、これについて説明する。
図24に、図23のソースプログラムから生成される中間コードを示す。図23のソースプログラムに含まれる式1−1〜式1−3、式1−5の配列式は、中間コード生成部により、図24に含まれる4つのループ(do〜enddoまで)に変換される。ループへの変換では、配列が全配列であれば、宣言式における下限と上限とに基づいてループの初期値と終値とを決定し、部分配列の場合は、参照箇所の下限と上限とに基づいて、初期値と終値とを決定する。例えば、配列式1−1は、部分配列(m1:m2)の演算であり、寸法はm2−m1+1であるので、また、配列式1−3は、部分配列c(m1:m2)を含むので、ループの初期値は0に、終値m2−m1に設定される。
従来方式では、一つの配列式で参照する全ての配列の次元数と寸法とが同じであることを利用し、その配列式で参照される一つの配列の下限と上限とを元に、ループの初期値と終値を決定していた。例えば、配列式1−3について、配列式1−3で参照する配列の次元数と寸法のみに着目して、ループ回数をm2−m1+1に決定していた。このように、従来方式では、配列式で参照する全ての配列の下限/上限の情報を元にループの初期値と終値を決定していないので、配列の下限や上限が異なる変数や式で定義される場合は、複数の配列式間複数の配列式のループを融合することはできなかった。その結果、共通式削除によってループ内の同じ配列要素へのアクセスまとめることができず、メモリアクセスを削減できなかった。
例えば、図24では、配列式1−1、1−3のループ回数はm2−m1+1回に、配列式1−2のループ回数はn2−n1+1回に設定される。ここで、配列式1−3に着目すれば、全配列xの寸法と部分配列c(m1:m2)の寸法が同じことから、n2−n1とm2−m1とは等しいことがわかる。この情報を、他の配列式に適用することができれば、配列式1−2のループ回数n2−n1+1は、m2−m1+1に置き換えることが可能となり、3つのループを1つにまとめることが可能である。しかし、従来技術では、このような解析は行わないので、コンパイラは、m2−m1とn2−n1とが同じ値になることを認識できず、ループをまとめることができなかった。
変数の定数への置換に関し、特許文献1では、変数の定義が一度のものを選択して、変数から定数への置換を行っている。しかし、特許文献1では、手続き内に定義がない変数を定数に置換することはできない。また、変数を定数に置き換えることのみを行っており、変数同士や式を解析してはいない。このため、ループ回数が、異なる変数や式を用いて定義された場合に、ループ回数が同じであることを認識して、ループの融合を行うことはできない。
本発明は、上記従来技術の問題点を解消し、ループ回数が、異なる変数や式を用いて定義された場合でも、ループ融合が可能なコンパイラ、変数最適化装置、方法、及び、プログラムを提供することを目的とする。
本発明の変数最適化装置は、配列式を含むソースプログラムに基づく中間コードを入力し、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する参照配列検出部と、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する変数関係確定部と、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する変数置換部とを備えることを特徴とする。
本発明のコンパイラは、配列式を含むソースプログラムに基づいて中間コードを生成する中間コード生成部と、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する参照配列検出部と、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する変数関係確定部と、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する変数置換部と、前記変数置換部にて変数置換が行われた中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する最適化部と、前記最適化部が出力する中間コードに基づいて、オブジェクトプログラムを生成するコード生成部とを有することを特徴とする。
本発明の変数最適化方法は、コンピュータを用い、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を行う方法であって、前記コンピュータが、前記ソースプログラムに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録するステップと、前記コンピュータが、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録するステップと、前記コンピュータが、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換するステップとを有することを特徴とする。
本発明のコンパイル方法は、コンピュータを用い、配列式を含むソースプログラムのコンパイルを行うコンパイル方法であって、前記コンピュータが、配列式を含むソースプログラムに基づいて中間コードを生成するステップと、前記コンピュータが、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録するステップと、前記コンピュータが、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録するステップと、前記コンピュータが、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換するステップと、前記コンピュータが、前記置換が行われた中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力するステップと、前記コンピュータが、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成するステップとを有することを特徴とする。
本発明のプログラムは、コンピュータに、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を実行させるプログラムであって、前記コンピュータに、前記ソースプログラムに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する処理と、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する処理と、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する処理とを実行させることを特徴とする。
本発明のプログラムは、コンピュータに、配列式を含むソースプログラムのコンパイルを実行させるプログラムであって、前記コンピュータに、配列式を含むソースプログラムに基づいて中間コードを生成する処理と、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する処理と、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する処理と、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する処理と、前記置換が行われた中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する処理と、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成する処理とを実行させることを特徴とする。
本発明の変数最適化装置は、配列式を含むソースプログラムに基づく中間コードを入力し、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する参照配列検出部と、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する寸法比較部と、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する分岐追加部とを備えることを特徴とする。
本発明のコンパイラは、配列式を含むソースプログラムに基づいて中間コードを生成する中間コード生成部と、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する参照配列検出部と、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する寸法比較部と、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する分岐追加部と、前記分岐追加部にてコードが追加された中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する最適化部と、前記最適化部が出力する中間コードに基づいて、オブジェクトプログラムを生成するコード生成部とを有することを特徴とする。
本発明の変数最適化方法は、コンピュータを用い、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を行う方法であって、前記コンピュータが、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録するステップと、前記コンピュータが、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録するステップと、前記コンピュータが、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加するステップとを有することを特徴とする。
本発明のコンパイル方法は、コンピュータを用い、配列式を含むソースプログラムのコンパイルを行うコンパイル方法であって、前記コンピュータが、前記ソースプログラムに基づいて中間コードを生成するステップと、前記コンピュータが、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録するステップと、前記コンピュータが、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録するステップと、前記コンピュータが、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加するステップと、前記コンピュータが、前記コードが追加された中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力するステップと、前記コンピュータが、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成するステップとを有することを特徴とする。
本発明のプログラムは、コンピュータに、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を実行させるプログラムであって、前記コンピュータに、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する処理と、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する処理と、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する処理とを実行させることを特徴とする。
本発明のプログラムは、コンピュータに、配列式を含むソースプログラムのコンパイルを行う処理を実行させるプログラムであって、前記コンピュータに、前記ソースプログラムに基づいて中間コードを生成する処理と、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する処理と、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する処理と、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する処理と、前記コンピュータが、前記コードが追加された中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する処理と、前記コンピュータが、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成する処理とを有することを特徴とする。
本発明のコンパイラ、変数最適化装置、方法、及び、プログラムでは、ループ回数が、異なる変数や式を用いて定義された場合でも、ループ融合が可能である。
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図1は、本発明の第1実施形態のコンパイラを示している。コンパイラ10は、中間コード生成部11、変数最適化部12、最適化部13、及び、コード生成部14を有する。コンパイラは、Fortranなどのプログラムを翻訳しロードモジュールを生成する。コンパイラの各部の機能は、コンピュータ上で所定プログラムを実行することで、実現できる。
ソースプログラム31は、Fortranなどの所定のプログラミング言語で記述されたプログラムのソースである。ソースプログラム31は、メモリなどに記憶されている。中間コード生成部11は、ソースプログラム31を読み出し、ソースプログラム31に基づいて中間コード32を生成する。生成した中間コード32は、メモリなどに記憶する。
変数最適化部12は、中間コード32を読み出し、中間コード32における変数の最適化処理を行い、中間コード36を生成する。生成した中間コード36は、メモリなどに記憶する。最適化部13は、中間コード36に対して、ベクトル化や、並列化、ループ最適化、共通式の削除などを行う。最適化部13が行う処理は、少なくとも同一ループ回数のループをまとめるループ最適化と、共通式の削除を含むものとする。最適化部13は、ループ最適化などを行った結果の中間コード37を、メモリなどに記憶する。
コード生成部14は、最適化部13により最適化された中間コード37を読み出し、中間コード37に基づいて、オブジェクトプログラム38を生成する。生成したオブジェクトプログラム38は、メモリや保持記憶装置などに記憶する。中間コード生成部11、最適化部13、及び、コード生成部14には、それぞれ既存の中間コード生成手段、最適化手段、コード生成手段を用いることができる。
変数最適化部12は、宣言情報・配列式検出手段21、参照配列検出手段22、変数関係確定手段23、変数定義検出手段24、及び、変数置換手段25を有する。宣言情報・配列式検出手段21は、中間コード32を検索して、配列の宣言情報と配列式とを検出し、宣言情報テーブル、配列式テーブル33に登録する。参照配列検出手段22は、配列式テーブルに登録されている配列式に対し、各配列式で参照している配列を調べ、各配列について、配列の種類(全配列/部分配列)、配列の下限及び上限を、参照配列テーブル34に登録する。配列の上限及び下限は、配列が全配列であれば、宣言情報テーブルに登録されている下限及び上限であり、配列が部分配列であれば、参照箇所における下限及び上限である。
変数関係確定手段23は、参照配列テーブル34を参照して、配列の下限及び上限に基づいて配列の寸法を計算し、同一配列式内の配列の各次元の寸法が同じであることを利用して、寸法の計算に用いる変数や式の値を決定する。値が決定しない場合には、他の変数や式との関係を決定する。例えば、下限/上限がn1/n2である配列と、下限/上限がm1/m2である配列とが同一配列式で参照される場合には、双方の寸法が同じであることを利用して、両者の関係式をn2−n1=m2−m1と決定する。変数関係確定手段23は、決定した値又は関係を表す関係式と、その関係を決定した配列式である決定式とを、確定変数テーブル35に登録する。
変数定義検出手段24は、確定変数テーブル35に登録されている決定式を起点に、前後の中間コード32を検索し、確定変数テーブル35に登録される関係式が、部分配列の下限又は上限に表れる変数を参照しているか否かを調べる。参照している場合は、決定式の前後で、関係式で参照する変数を定義する式を検索し、決定式よりも前で変数を定義する式(前定義式)と、後ろで変数を定義する式(後定義式)とを検出する。変数定義検出手段24は、検出した前定義式及び後定義式を、確定変数テーブル35に登録する。前定義式及び後定義式がそれぞれ複数検出される場合は、実行経路において決定式の最も近くで実行される可能性がある式を登録する。定義する式が存在しない場合は、確定変数テーブル35の前定義式又は後定義式に、NULLを登録する。全配列の宣言式で使用する変数のみ参照する場合は、確定変数テーブル35の前定義式及び後定義式にNULLを登録する。
変数置換手段25は、中間コード32を検索し、前定義式と後定義式との間で、確定変数テーブル35に登録された関係式の右辺又は左辺(以下では、左辺として説明する)を参照する箇所を検出し、これを、関係式の右辺で置換する。検索では、前定義式がNULLの場合には先頭から後定義式との間を検索し、後定義式がNULLの場合は前定義式から最後までを検索する。例えば、関係式がn2−n1=m2−m1であれば、中間コード32にて、前定義式と後定義式との間に、n2−n1が存在すれば、これを、m2−m1に置換する。変数置換手段25は、置換した結果を、中間コード36として出力する。
変数最適化部12が生成した中間コード36は、最適化部13にて、ループの最適化や共通式の削除などの最適化が適用され、中間コード36に比して、メモリアクセスが削減された中間コード37が得られる。コード生成部14にて、中間コード37からオブジェクトプログラム38を生成することで、中間コード生成部11が生成した中間コード32に対して最適化部13にて最適化を行った中間コードからオブジェクトプログラムを生成した場合に比して、メモリアクセスが削減されたプログラムが得られる。
図2に、変数最適化部12の動作手順を示す。宣言情報・配列式検出手段21は、中間コード32を検索し、配列の宣言情報と、配列式とを検出して、これらを、宣言情報テーブル、配列式テーブル33に登録する(ステップS1)。図3及び図4に、それぞれ、宣言情報テーブル及び配列式テーブルのデータ例を示す。図23に示すソースプログラム31に対応する中間コード32から、配列の宣言情報を検出することで、配列a、b、c、d、e、x、y、zが宣言情報テーブルに登録される(図3)。また、中間コード32から、配列式を検出することで、図23の配列式1−1〜1−3、1−5に対応する配列式が配列式テーブルに登録される(図4)。
参照配列検出手段22は、配列式テーブルに登録されている各配列式に対して、参照配列テーブル34を作成し、各参照配列テーブルに、各配列式で参照している配列の配列名、配列の形状、配列の種別(全配列/部分配列)を登録する(ステップS2)。形状(下限:上限)については、配列が全配列であれば、宣言情報テーブルに登録されている下限と上限を登録し、部分配列であれば、参照箇所における下限と上限を登録する。図5(a)〜(d)に、参照配列テーブルのデータ例を示す。図4に示す配列式テーブルを参照すると、中間コード32には4つの配列式(配列式1−1〜1−3、1−5)があるので、これらに対応して、参照配列テーブルを作成する(図5(a)〜(d))。
ステップS2では、式1−1に対しては配列a、b、cを(図5(a))、式1−2に対しては配列c、d、eを(図5(b))、式1−3に対してはc、xを(図5(c))、式1−5に対してはy、zを(図5(d))、それぞれ参照配列テーブルに登録する。また、式1−3の配列xに対しては全配列である旨を登録し、それ以外の配列に対しては、部分配列である旨を登録する。全配列であるxについては、宣言情報テーブルに登録されている形状(n1:n2)を参照配列テーブル34に登録し、その他の配列については、参照箇所の形状を参照配列テーブル34に登録する。例えば、図23を参照すると、式1−1の配列aの参照箇所はm1からm2であるので、式1−1に対する参照配列テーブルには、配列aの形状として、(m1:m2)を登録する。
変数関係確定手段23は、参照配列テーブル34を参照して、各配列式における配列の下限と上限とから寸法を計算し、同一配列式内では配列の各次元の寸法が同じであることを利用して、寸法の計算で参照する変数や式の値を決定する。例えば、同一参照配列テーブル内にて、形状が2つの変数で定められる配列と、2つの定数で定められる配列とが存在するときは、配列の寸法が同じであることを利用して、両者の関係から変数の定数化が可能である。値が決定しないときは、他の変数や式との関係を決定する。例えば、同一参照配列テーブル内で、形状が2つの変数で定められる配列と、これとは異なる2つの変数で定められる別の配列とがあるときは、両者の寸法が同じであることを利用して、4つの変数間の関係式を導き出すことができる。変数関係確定手段23は、決定した値又は関係を表す関係式と、その関係を決定した配列式である決定式とを、確定変数テーブル35に登録する(ステップS3)。
図6に、確定変数テーブル35のデータ例を示す。式1−1、1−2、1−5に対応する参照配列テーブル(図5(a)、(b)、(d))を参照すると、これらでは、形状が同じ変数(m1、m2又はn1、n2)で定義されるので、これらから決定できる値又は関係式はない。式1−3に対応する参照配列テーブル(図5(c))を参照すると、配列xの形状は(n1:n2)で、配列cの形状(参照箇所)は(m1:m2)となっている。両者の形状が等しいことを利用すると、n1−n2=m1−m2という関係式が得られる。変数関係確定手段23は、得られた関係式「n1−n2=m1−m2」と、関係式を決定した配列式「1−3」とを、確定変数テーブル35に登録する。
変数定義検出手段24は、確定変数テーブル35に登録されている決定式の前後の中間コード32を検索し、決定式によって決定される関係式が、部分配列の下限/上限に表れる変数を参照しているか否かを判断する。参照している場合は、決定式の前後で、関係式で参照する変数を定義する式を検索する。変数定義検出手段24は、検索により得られた、決定式の前で変数を定義する式を前定義式として確定変数テーブル35に登録し、決定式の後ろで変数を定義する式を後定義式として確定変数テーブル35に登録する(ステップS4)。検索にて、前定義式又は後定義式が複数検索された場合は、実行経路において決定式の最も近くで実行される可能性がある式を登録する。前定義式及び後定義式がない場合は、確定変数テーブル35にNULLを登録する。また、決定式によって決定される関係式が、部分配列の下限/上限に現れる変数を参照していない場合は、確定変数テーブル35にNULLを登録する。
図23に示すソースプログラムにて、決定式「1−3」によって決定される関係式「n2−n1=m2−m1」が、部分配列の下限/上限に現れる変数を参照しているか否かを調べると、配列式1−1、1−2、1−5で、関係式が、部分配列の下限/上限に現れる変数を参照している。決定式の前後で、関係式で参照する変数を定義する式を検索すると、決定式よりも後の式1−4で、n2の値を定義している。決定式の前で定義する存在していない。従って、変数定義検出手段24は確定変数テーブル35の後定義式に式1−4を登録し、前定義式にNULLを登録する。
決定式よりも前に、関係式の変数を定義する式がある場合、前定義式よりも前では、関係式で定義される関係をそのまま用いることができるかどうかは不明である。同様に、決定式よりも後ろに、関係式の変数を定義する式がある場合は、その後定義式以降で、関係式で定義される関係を適用可能かどうかは不明である。従って、関係式を用いることができる範囲は、中間コード32において、前定義式と後定義式とに挟まれた範囲となる。図23では、配列式1−1、1−2、1−5で、関係式が、部分配列の下限/上限に現れる変数を参照しているが、これらのうち、配列式1−5は、後定義式よりも後なので、関係式を適用可能なのは、配列式1−1、1−2ということになる。
変数置換手段25は、確定変数テーブル35と参照配列テーブル34とを参照しながら中間コード32を検索し、前定義式と後定義式との間で、確定変数テーブル35に登録された関係式の左辺に該当する部分を検出し、その部分を、右辺で置換する(ステップS5)。値が決定しているときは、その値で置換する。検索は、前定義式がNULLであれば、中間コードの先頭から後定義式までの範囲で行い、後定義式がNULLであれば、前定義式から中間コードの最後までの範囲で行う。変数置換手段25は、置換後、中間コード36を出力する。
図7に、変数最適化部12で変数最適化を行った後の中間コード36を示す。変数最適化前の中間コード32は、図24に示す通りであり、配列式1−1〜1−3がそれぞれ独立したループとなっている。それぞれのループ回数は、m2−m1+1回、n2−n1+1回、m2−m1+1回である。ステップS5では、関係式「n2−n1=m2−m1」を用いて、中間コード32にて先頭から式1−4までの範囲で、n2−n1で表される部分を、m2−m1で置き換える。これにより、図7に示す中間コード36が得られる。
図8に、上記中間コード36に対してループ最適化や共通式の削除を行った中間コード37を示す。図7に示す中間コード36に対して、最適化部13にてループ最適化や共通式の削除を行うことで、メモリアクセスが削減された中間コード37が得られる(図8)。すなわち、配列式1−1〜1−3が、1つのループの中に記述された中間コード37が得られる。その後、中間コード37に対して、コード生成部14にてオブジェクトプログラム38を生成することで、メモリアクセスが削減され、高速化されたプログラムが得られる。
図9に、実行されるメモリアクセスと演算とを示す。また、比較例として、図10に、図24に示す中間コードからオブジェクトプログラムを生成した場合に実行されるメモリアクセスと演算とを示す。図9及び図10において、矢印で表される部分がメモリアクセスを表している。図24の中間コードからオブジェクトプログラムを生成した場合、メモリアクセス回数は、5(m2−m1+1)+3(n2−n1+1)+2(10−n1+1)回となる。これは、m2−m1=n2−n1なので、8(m2−m1+1)+2(10−n1+1)と書き直すことができる。これに対し、図8に示す中間コードからオブジェクトプログラムを生成した場合のメモリアクセス回数は、7(m2−m1+1)+2(10−n1+1)回となる。従って、変数最適化処理を行うことで、メモリアクセス回数を(m2−m1+1)回減らすことができ、その分だけ、プログラム実行を高速化できる。
本実施形態では、変数関係確定手段23にて、同一配列式を構成する配列の各次元の寸法が同じであることを利用して、配列式で参照される各配列の下限/上限を定義する変数又は式の値を決定し、又は、変数間の関係式を決定する。値が決定する場合、全配列であれば手続内の配列宣言で使用する変数の値を決定でき、部分配列であれば参照箇所を決定する変数や式の値を決定できる。値が決定しないときは、他の変数や式との関係を決定する。部分配列に対しては、決定した値又は関係が他の式で変更されるか否かを解析し、決定した値又は関係が適用可能な範囲を求めておく。その後、変数置換手段25にて、決定した値により、変数や式を定数化する。また、決定した関係式を用いて、変数や式を、同じ変数又は同じ式に置換する。
コンパイラは、配列式に対して、その配列式に現れる配列の下限と上限とを基に計算した初期値と終値とを持つループを内部的に生成する。変数置換手段25にて、変数の置換を行い、変数の定数化や変数の統一を行うことで、異なる変数で初期値と終値とが定義されるためにループ回数が同じであるか否かが不明であった複数のループのループ回数が、同じループ回数であると判定できるようになる。その結果、ループ融合が可能となり、共通式の削除が可能となる。共通式を削除し、ループ内にある同じ配列要素へのアクセスをまとめることで、メモリアクセス回数を削減するができる。これにより、プログラム実行時間を短縮できる。
次に、本発明の第2実施形態について説明する。図11は、本発明の第2実施形態のコンパイラを示している。本実施形態のコンパイラ10aでは、変数最適化部15は、宣言情報・配列式検出手段21、参照配列・連続出現配列式検出手段26、寸法比較手段27、及び、分岐追加手段28を有する。第1実施形態では、変数最適化部12(図1)にて、翻訳時に各次元の寸法の計算で参照されている変数や式の値、同じ値を持つ変数又は式が決定したときに、決定した変数又は式で元の式を置き換えた。本実施形態では、翻訳時に各次元の寸法の計算で参照されている変数や式の値、同じ値を持つ変数又は式が決定しない場合に、実行時に実行するコードを選択するコードを生成する。
宣言情報・配列式検出手段21は、中間コード32を検索し、配列宣言の上限と下限、及び、配列式を検出し、宣言情報テーブル、配列式テーブル33に登録する。参照配列・連続出現配列式検出手段26は、配列式テーブルに登録されている配列式に対し、各配列式で参照している配列、配列の種類(全配列/部分配列)、配列の下限及び上限を調べ、参照配列テーブル39に登録する。また、配列式の直前及び直後に配列式が続くか否かを調べ、直前又は直後に配列式が続くときは、その配列式を参照配列テーブル39に登録する。
寸法比較手段27は、参照配列テーブル39を参照して、連続する配列式で参照する配列の寸法が、翻訳時に同一であると判断できるか否かを調べる。翻訳時に寸法が同じであると判断できない連続した配列式がある場合、その配列式を、最適化候補配列式リスト40に登録する。分岐追加手段28は、最適化候補配列式リスト40に登録された配列式について、寸法が同じである場合と、同じでない場合とを選択するコードを、中間コード32に追加した中間コード36を生成する。寸法が同じである場合に実行されるコードについては、先頭の配列式に対して生成されるループの初期値及び終値で、他のループの初期値及び終値を置き換える。
図12に、本実施形態の変数最適化部15の動作手順を示す。宣言情報・配列式検出手段21は、中間コード32を検索し、配列の宣言情報と、配列式とを検出して、これらを、宣言情報テーブル、配列式テーブル33に登録する(ステップS11)。図13に、ソースプログラム例を示す。また、図14及び図15に、宣言情報テーブル、配列式テーブル33のデータ例を示す。図13に示すソースプログラム31に対応する中間コード32から、配列の宣言情報を検出することで、配列a、b、c、d、e、xが宣言情報テーブルに登録される(図14)。また、中間コード32から、配列式を検出することで、図13の配列式9−1〜9−3に対応する配列式が、配列式テーブルに登録される(図15)。
参照配列・連続出現配列式検出手段26は、配列式テーブルに登録されている各配列式に対して参照配列テーブル39を作成し、各参照配列テーブルに、各配列式で参照している配列の配列名、配列の形状、配列の種別(全配列/部分配列)を登録する。また、各配列式について、当該配列式の直前又は直後に配列式があるときは、その配列式を直前又は直後の配列式として参照配列テーブル39に登録する(ステップS12)。配列の形状(下限:上限)の登録に際しては、配列が全配列であれば、宣言情報テーブルに登録されている下限と上限を登録し、部分配列であれば、参照箇所における下限と上限を登録する。
図16(a)〜(c)に、参照配列テーブルのデータ例を示す。図15に示す配列式テーブルを参照すると、中間コードには3つの配列式(配列式9−1〜9−3)があるので、参照配列・連続出現配列式検出手段26は、これらに対応して、参照配列テーブルを作成する(図16(a)〜(c))。その後、9−1に対しては配列a、b、cを(図16(a))、式9−2対しては配列c、d、eを(図16(b))、式9−3に対してはc、xを(図16(c))、それぞれ参照配列テーブルに登録する。配列の種別は、全て部分配列である。形状には、各配列の参照箇所の形状を参照配列テーブル39に登録する。例えば、図13を参照すると、式9−1の配列aの参照箇所はm1からm2であるので、式9−1に対する参照配列テーブルには、配列aの形状として、(m1:m2)を登録する。
図13を参照すると、配列式9−1の直前に他の配列式はなく、直後には配列式9−2が続く。参照配列・連続出現配列式検出手段26は、配列式9−1に対応する参照配列テーブルの「直前」に、配列式がないことを示すnoneを登録し、「直後」に、配列式9−2を登録する。配列式9−2については、直前に配列式9−1があり、直後には配列式9−3があるので、参照配列テーブルの「直前」に配列式9−1を登録し、「直後」に配列式9−3を登録する。配列式9−3は、直前に配列式9−2があり、直後には配列式がないので、参照配列テーブルの「直前」に配列式9−2を登録し、「直後」にはnoneを登録する。
寸法比較手段27は、参照配列テーブル39を参照して、配列式が連続する箇所を検出する。その後、連続する配列式について、これら配列式で参照する配列の寸法が、翻訳時に同一であると判断できるか否かを調べる。翻訳時に寸法が同じであると判断できない連続した配列式がある場合は、その配列式を、最適化候補配列式リスト40に登録する(ステップS13)。図16(a)〜(c)を参照し、各配列式の「直前」、「直後」を調べることで、配列式9−1〜9−3が連続する配列式であると検出される。連続する配列式の検出後、参照配列テーブル39の各配列の形状を参照して、連続する配列式9−1〜9−3で参照する配列の寸法が同じであると判断できるか否かを調べる。
図17に、最適化候補配列式リスト40のデータ例を示す。図16(a)を参照すると、配列式9−1で参照する配列の寸法は、m2−m1+1である。図16(b)を参照すると、配列式9−2で参照する配列の寸法は、n2−n1+1である。この場合、配列式9−1と配列式9−2とで、参照する配列の寸法が同じであるか否かは不明であるので、寸法比較手段27は、最適化候補配列式リスト40に、配列式9−1、9−2を登録する(図17)。同様に、配列式9−2と配列式9−3とで、参照する配列の寸法が同じであると判断できるか否かを調べると、配列式9−3で参照する配列の寸法はm2−m1+1であるので、同じであると判断できない。寸法比較手段27は、最適化候補配列式リスト40に、配列式9−3を追加登録する。
分岐追加手段28は、最適化候補配列式リスト40に登録された配列式について、寸法が同じである場合と、同じでない場合とを実行時に選択するコードを、中間コード32に追加した中間コード36を生成する(ステップS14)。分岐追加手段28が生成した中間コード36が、変数最適化部15が出力する中間コードとなる。図18及び図19に、分岐追加手段28による追加前後の中間コードのデータ例を示す。図18に示す中間コード32は、中間コード生成部11にて生成された、図13に示すソースプログラムに対応した中間コードである。分岐追加手段28は、中間コード32から、配列式9−1〜9−3で参照する配列の寸法が同じ、すなわち、m2−m1=n2−n1が成立するときに実行されるコードを生成し、これを追加した中間コード36を生成する(図19)。
図19に示す中間コード36は、m2−m1=n2−n1が成立するときに実行されるコード部分(if〜elseの間)と、成立しないときに実行されるコード部分(else〜endifの間)とを有する。寸法が同じときに実行されるコード部分は、生成元となる中間コード32(図18)における各配列式に対応するループの初期値及び終値を、先頭の配列式である配列式9−1に対応するループの初期値及び終値で置き換えたものである。つまり、図18では初期値=0、終値n2−n1であった配列式9-2に対応するループの初期値及び終値が、それぞれ配列式9−1に対応するループの初期値及び終値である0、m2−m1で置き換えられたものである。寸法が同じではないときに実行されるコード部分の内容は、図18に示す内容と同じである。
最適化部13は、変数最適化部15が出力する中間コード36(図19)に対して、最適化を行う。図20に、最適化後の中間コード37を示す。最適化後の中間コード37では、m2−m1=n2−n1が成立するときに実行されるコード部分にて、ループが1つにまとめられる。一方、m2−m1=n2−n1が成立しないときに実行されるコード部分は、ループ融合ができないので、図18に示す中間コード32と同じままである。
図21に、図20に示す中間コードを実行したときのメモリアクセスと演算とを示す。最適化された中間コード37に基づいて生成されたオブジェクトプログラムを実行すると、実行時にm2−m1=n2−n1が成立するときのメモリアクセス回数は、7(m2−m1+1)回となる。また、実行時にm2−m1=n2−n1が成立しないときのメモリアクセス回数は、5(m2−m1+1)+3(n2−n1+1)回となる。
図18に示す中間コード32を、変数最適化部15を経ずに最適化部13にて最適化した場合は、中間コード36におけるm2−m1=n2−n1が成立しないときに実行されるコード部分と同様に、ループが融合される箇所はない。従って、中間コード32に基づいて生成されたオブジェクトプログラムを実行したときの、メモリアクセス回数は5(m2−m1+1)+3(n2−n1+1)回となる。m2−m1とn2−n1の値が等しいとすると、メモリアクセス回数は、8(m2−m1+1)回と表すことができる。
図22に、メモリアクセス回数の比較表を示す。中間コード36に基づくオブジェクトプログラムを実行した場合のメモリアクセス回数は、寸法が同じ、つまり、m2−m1=n2−n1が成立する場合で7(m2−m1+1)回、寸法が異なる、つまり、m2−m1=n2−n1が成立しない場合で5(m2−m1+1)+3(n2−n1+1)となる。一方、中間コード32に基づくオブジェクトプログラムを実行した場合のメモリアクセス回数は、m2−m1=n2−n1が成立する場合で、8(m2−m1+1)、m2−m1=n2−n1が成立しない場合で5(m2−m1+1)+3(n2−n1+1)回となる。このように、変数最適化部15で、連続する配列式が参照する配列の寸法が同じ場合に実行されるコードを追加することにより、実行時に寸法が同じときのメモリアクセス回数を(m2−m1+1)回削減することができる。
本実施形態では、連続して現れる配列式の形状が、翻訳時に一致するか否かが不明であるとき、寸法が同じときに実行されるコードを中間コードに追加し、実行時に、寸法が等しいか否かを判断して、寸法が同じときに実行されるコードと、寸法が異なるときに実行するコードを呼び分ける。寸法が同じであるときに実行されるコード部分は、最適化部13にて、ループ融合、共通式の削除が可能である。従って、実行時に、連続する配列式の寸法が等しいときのメモリアクセス回数を削減することができ、プログラムの実行速度を向上させることができる。
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のコンパイラ、変数最適化装置、方法、及び、プログラムは、上記実施形態にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。
本発明の第1実施形態のコンパイラを示すブロック図。 変数最適化部の動作手順を示すフローチャート。 宣言情報テーブルのデータ例を示す図。 配列式テーブルのデータ例を示す図。 (a)〜(d)は、参照配列テーブルのデータ例を示す図。 確定変数テーブルのデータ例を示す図。 変数最適化部による最適化後の中間コードを示す図。 最適化部による最適化後の中間コードを示す図。 図8に示す中間コードにおけるメモリアクセスを示す図。 変数最適化部による最適化を経ない中間コードにおけるメモリアクセスを示す図。 本発明の第2実施形態のコンパイラを示すブロック図。 第2実施形態における変数最適化部の動作手順を示すフローチャート。 ソースプログラム例を示す図。 宣言情報テーブルのデータ例を示す図。 配列式テーブルのデータ例を示す図。 (a)〜(c)は、参照配列テーブルのデータ例を示す図。 最適化候補配列式リストのデータ例を示す図。 図13に示すソースプログラムに対応する中間コードを示す図。 変数最適化部による最適化後の中間コードを示す図。 最適化部による最適化後の中間コードを示す図。 図20に示す中間コードにおけるメモリアクセスを示す図。 変数最適化前後でのメモリアクセス回数を示す図。 ソースプログラムの一例を示す図。 図23のソースプログラムから生成される中間コードを示す図。
符号の説明
10:コンパイラ
11:中間コード生成部
12、15:変数最適化部
13:最適化部
14:コード生成部
21:宣言情報・配列式検出手段
22:参照配列検出手段
23:変数関係確定手段
24:変数定義検出手段
25:変数置換手段
26:参照配列・連続出現配列式検出手段
27:寸法比較手段
28:分岐追加手段
31:ソースプログラム
32、36、37:中間コード
33:宣言情報テーブル、配列式テーブル
34、39:参照配列テーブル
35:確定変数テーブル
38:オブジェクトプログラム
40:最適化候補配列式リスト

Claims (18)

  1. 配列式を含むソースプログラムに基づく中間コードを入力し、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する参照配列検出部と、
    前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する変数関係確定部と、
    前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する変数置換部とを備える変数最適化装置。
  2. 前記配列式で参照する配列が、全配列と部分配列とを含んでおり、前記参照配列検出部は、全配列については、前記宣言情報テーブルに登録されている当該配列の下限/上限を前記参照配列テーブルに登録し、部分配列については、配列式での参照箇所の下限/上限を前記参照配列テーブルに登録する、請求項1に記載の変数最適化装置。
  3. 前記変数関係確定部は、前記定数化又は関係式の決定に用いた配列式を、決定式として確定変数テーブルに登録する、請求項2に記載の変数最適化装置。
  4. 前記決定式前後の中間コードを検索して、前記関係式が、部分配列の下限/上限に現れる変数を参照しているか否かを調べ、参照しているときには、前記決定式の前後で、前記関係式に含まれる変数の値を定義する式を検索し、検索された前定義式及び後定義式を前記確定変数テーブルに登録する変数定義決定部を更に備える、請求項3に記載の変数最適化装置。
  5. 前記変数置換部は、前記前定義式と前記後定義式との間の中間コードを検索し、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する、請求項4に記載の変数最適化装置。
  6. 前記変数関係確定部は、前記同一配列式内に部分配列と全配列とが含まれ、かつ、部分配列の参照箇所の下限/上限を定義する変数と、全配列の下限/上限を定義する変数とが異なるときは、上限と下限との差が、両変数間で等しいことを利用して、前記部分配列の参照箇所の下限/上限を定義する変数を左辺又は右辺の何れか一方に配置し、全配列の下限/上限を定義する変数を他方に配置した式を前記関係式として決定する、請求項2乃至5の何れか一に記載の変数最適化装置。
  7. 配列式を含むソースプログラムに基づいて中間コードを生成する中間コード生成部と、
    前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する参照配列検出部と、
    前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する変数関係確定部と、
    前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する変数置換部と、
    前記変数置換部にて変数置換が行われた中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する最適化部と、
    前記最適化部が出力する中間コードに基づいて、オブジェクトプログラムを生成するコード生成部とを有するコンパイラ。
  8. コンピュータを用い、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を行う方法であって、
    前記コンピュータが、前記ソースプログラムに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、
    前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録するステップと、
    前記コンピュータが、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録するステップと、
    前記コンピュータが、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換するステップとを有する変数最適化方法。
  9. コンピュータを用い、配列式を含むソースプログラムのコンパイルを行うコンパイル方法であって、
    前記コンピュータが、配列式を含むソースプログラムに基づいて中間コードを生成するステップと、
    前記コンピュータが、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、
    前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録するステップと、
    前記コンピュータが、前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録するステップと、
    前記コンピュータが、前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換するステップと、
    前記コンピュータが、前記置換が行われた中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力するステップと、
    前記コンピュータが、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成するステップとを有するコンパイル方法。
  10. コンピュータに、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を実行させるプログラムであって、前記コンピュータに、
    前記ソースプログラムに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する処理と、
    前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する処理と、
    前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する処理とを実行させるプログラム。
  11. コンピュータに、配列式を含むソースプログラムのコンパイルを実行させるプログラムであって、前記コンピュータに、
    配列式を含むソースプログラムに基づいて中間コードを生成する処理と、
    前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状とを参照配列テーブルに登録する処理と、
    前記参照配列テーブル及び宣言情報テーブルを参照し、同一配列式で参照する配列の各次元の寸法が同じであることを利用して、前記下限/上限を定義する変数を定数化し、又は、変数間の関係式を決定し、定数化した定数又は決定した関係式を確定変数テーブルに登録する処理と、
    前記確定変数テーブルに登録された定数又は関係式を用いて、前記中間コードに含まれる変数を、前記定数又は関係式で置換する処理と、
    前記置換が行われた中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する処理と、
    前記処理後の中間コードに基づいて、オブジェクトプログラムを生成する処理とを実行させるプログラム。
  12. 配列式を含むソースプログラムに基づく中間コードを入力し、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する参照配列検出部と、
    前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する寸法比較部と、
    前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する分岐追加部とを備える変数最適化装置。
  13. 前記分岐追加部は、前記寸法が相互に等しいときに実行されるコード部分にて、連続する配列式に対応する各ループのループ初期値及び終値を、連続する配列式間で共通の初期値及び終値とする、請求項12に記載の変数最適化装置。
  14. 配列式を含むソースプログラムに基づいて中間コードを生成する中間コード生成部と、
    前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する宣言情報・配列式検出部と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する参照配列検出部と、
    前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する寸法比較部と、
    前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する分岐追加部と、 前記分岐追加部にてコードが追加された中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する最適化部と、
    前記最適化部が出力する中間コードに基づいて、オブジェクトプログラムを生成するコード生成部とを有するコンパイラ。
  15. コンピュータを用い、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を行う方法であって、
    前記コンピュータが、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、
    前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録するステップと、
    前記コンピュータが、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録するステップと、
    前記コンピュータが、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加するステップとを有する変数最適化方法。
  16. コンピュータを用い、配列式を含むソースプログラムのコンパイルを行うコンパイル方法であって、
    前記コンピュータが、前記ソースプログラムに基づいて中間コードを生成するステップと、
    前記コンピュータが、前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録するステップと、
    前記コンピュータが、前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録するステップと、
    前記コンピュータが、前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録するステップと、
    前記コンピュータが、前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加するステップと、
    前記コンピュータが、前記コードが追加された中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力するステップと、
    前記コンピュータが、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成するステップとを有するコンパイル方法。
  17. コンピュータに、配列式を含むソースプログラムに基づく中間コードにおける変数の最適化処理を実行させるプログラムであって、前記コンピュータに、
    前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する処理と、
    前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する処理と、
    前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する処理とを実行させるプログラム。
  18. コンピュータに、配列式を含むソースプログラムのコンパイルを行う処理を実行させるプログラムであって、前記コンピュータに、
    前記ソースプログラムに基づいて中間コードを生成する処理と、
    前記中間コードに基づいて、前記ソースプログラムにおける配列の宣言情報、及び、前記配列式を検出し、宣言情報テーブル及び配列式テーブルに登録する処理と、
    前記宣言情報テーブル及び配列式テーブルを参照して前記配列式で参照する配列を調べ、各配列の種類と、下限/上限で表される形状と、当該配列式の直前及び直後に続く配列式とを参照配列テーブルに登録する処理と、
    前記参照配列テーブルを参照し、連続する配列式について、配列式で参照する配列の寸法が翻訳時に同一であると判断できるか否かを調べ、同一であると判断できないときは、前記連続する配列式を最適化候補配列式リストに登録する処理と、
    前記最適化候補配列式リストに登録された配列式について、連続する配列式の寸法が相互に等しい場合と、それ以外の場合とを選択するコードを、前記中間コードに追加する処理と、
    前記コンピュータが、前記コードが追加された中間コードに対して、少なくともループ最適化及び共通式の削除を行い、処理後の中間コードを出力する処理と、
    前記コンピュータが、前記処理後の中間コードに基づいて、オブジェクトプログラムを生成する処理とを有するプログラム。
JP2008054361A 2008-03-05 2008-03-05 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法 Active JP5169322B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008054361A JP5169322B2 (ja) 2008-03-05 2008-03-05 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008054361A JP5169322B2 (ja) 2008-03-05 2008-03-05 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法

Publications (2)

Publication Number Publication Date
JP2009211458A true JP2009211458A (ja) 2009-09-17
JP5169322B2 JP5169322B2 (ja) 2013-03-27

Family

ID=41184528

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008054361A Active JP5169322B2 (ja) 2008-03-05 2008-03-05 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法

Country Status (1)

Country Link
JP (1) JP5169322B2 (ja)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63198130A (ja) * 1987-02-13 1988-08-16 Nec Corp ル−プ最適命令列選択方式
JPS6418876A (en) * 1987-07-14 1989-01-23 Nec Corp Production system for vector instruction column
JPH02118732A (ja) * 1988-10-28 1990-05-07 Toshiba Corp プログラム処理方式
JPH0334030A (ja) * 1989-06-30 1991-02-14 Fujitsu Ltd コンパイラ装置
JPH04332044A (ja) * 1991-05-07 1992-11-19 Nec Corp コンパイラのベクトル化処理方式
JPH05257707A (ja) * 1992-03-13 1993-10-08 Hitachi Ltd コンパイル方式
JPH0962514A (ja) * 1995-08-25 1997-03-07 Fujitsu Ltd 配列記述の最適化制御装置および制御方法
JP2002073579A (ja) * 2000-08-29 2002-03-12 Hitachi Ltd 分散共有メモリ向けコンパイル方法
JP2003256214A (ja) * 2002-02-27 2003-09-10 Hitachi Ltd 配列拡張によるループ変換方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63198130A (ja) * 1987-02-13 1988-08-16 Nec Corp ル−プ最適命令列選択方式
JPS6418876A (en) * 1987-07-14 1989-01-23 Nec Corp Production system for vector instruction column
JPH02118732A (ja) * 1988-10-28 1990-05-07 Toshiba Corp プログラム処理方式
JPH0334030A (ja) * 1989-06-30 1991-02-14 Fujitsu Ltd コンパイラ装置
JPH04332044A (ja) * 1991-05-07 1992-11-19 Nec Corp コンパイラのベクトル化処理方式
JPH05257707A (ja) * 1992-03-13 1993-10-08 Hitachi Ltd コンパイル方式
JPH0962514A (ja) * 1995-08-25 1997-03-07 Fujitsu Ltd 配列記述の最適化制御装置および制御方法
JP2002073579A (ja) * 2000-08-29 2002-03-12 Hitachi Ltd 分散共有メモリ向けコンパイル方法
JP2003256214A (ja) * 2002-02-27 2003-09-10 Hitachi Ltd 配列拡張によるループ変換方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSND199801135003; 堀田耕一郎、辻森誘二、原口正寿、松山 学: '講座 コンパイラ:Fortran90に完全準拠,配列演算をループ融合で最適化' 日経エレクトロニクス 第649号, 19951120, p.142, 日経BP社 *
JPN6012012778; 堀田耕一郎、辻森誘二、原口正寿、松山 学: '講座 コンパイラ:Fortran90に完全準拠,配列演算をループ融合で最適化' 日経エレクトロニクス 第649号, 19951120, p.142, 日経BP社 *

Also Published As

Publication number Publication date
JP5169322B2 (ja) 2013-03-27

Similar Documents

Publication Publication Date Title
JP7172435B2 (ja) 抽象コードグラフを用いたソフトウェアの表現
JP5775829B2 (ja) ソフトウェアの構造可視化プログラムおよびシステム
US20060195828A1 (en) Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator
JP4839424B2 (ja) プログラムの解析を支援するための方法、並びにそのコンピュータ・プログラム及びコンピュータ・システム
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
US20160321039A1 (en) Technology mapping onto code fragments
JP6486574B2 (ja) プログラムコード生成装置、プログラムコード生成方法及びプログラムコード生成プログラム
Blazy et al. Verified validation of program slicing
US20150193617A1 (en) Signature verification device, signature verification method, and program
JP2007041804A (ja) プログラム生成装置、プログラム検証装置および検証プログラム
US9715374B2 (en) Multi-branch determination syntax optimization apparatus
US20010044930A1 (en) Loop optimization method and a compiler
JP4541196B2 (ja) 故障検出改善装置、故障検出改善プログラム、故障検出改善方法
Sargsyan et al. Scalable and accurate clones detection based on metrics for dependence graph
JP5169322B2 (ja) 変数最適化装置、変数最適化プログラム、コンパイラ、変数最適化方法、及びコンパイル方法
US20160371066A1 (en) Computer that performs compiling, compiling method and storage medium that stores compiler program
JP6002507B2 (ja) ソフトウェア検証用プログラムおよびソフトウェア検証システム
JP2009265708A (ja) コンパイラ及びそのコード生成方法
JP2009193488A (ja) ソフトウェアテスト項目編集支援装置およびソフトウェアテスト項目編集支援方法
WO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP2000020318A (ja) メモリアクセス命令削減装置および記録媒体
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
JPH09160784A (ja) 並列化コンパイル方式
JP2007249262A (ja) 配列範囲外アクセス検出方式及び方法
JP3584204B2 (ja) 原始プログラム自動変換装置

Legal Events

Date Code Title Description
RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20100224

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120217

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120313

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120514

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120911

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121109

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: 20121204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121217

R150 Certificate of patent or registration of utility model

Ref document number: 5169322

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150