JP2003150386A - コンパイラ装置及びコンパイル方法 - Google Patents
コンパイラ装置及びコンパイル方法Info
- Publication number
- JP2003150386A JP2003150386A JP2001349185A JP2001349185A JP2003150386A JP 2003150386 A JP2003150386 A JP 2003150386A JP 2001349185 A JP2001349185 A JP 2001349185A JP 2001349185 A JP2001349185 A JP 2001349185A JP 2003150386 A JP2003150386 A JP 2003150386A
- Authority
- JP
- Japan
- Prior art keywords
- array operation
- variable
- expression
- numerical range
- limit value
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 230000014509 gene expression Effects 0.000 claims description 163
- 238000006467 substitution reaction Methods 0.000 claims description 18
- 239000000284 extract Substances 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 9
- 238000005457 optimization Methods 0.000 description 9
- 230000007704 transition Effects 0.000 description 2
- 241000255777 Lepidoptera Species 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
して、配列演算の演算値を扱うことのできる最小のデー
タ型でベクトル化を行ない得るコンパイラ装置及びコン
パイル方法を提供することにある。 【解決手段】 コンパイラ装置の構文解析部1に、配列
演算の演算値を格納する変数の取り得る数値範囲を解析
する変数範囲解析部16と、配列演算の演算値を格納す
る変数が取り得る数値範囲を扱うことができるデータ型
の中から扱うことができる数値範囲が最も狭いデータ型
を検出し、この検出したデータ型と配列演算を含むソー
スプログラムから抽出される配列演算のデータ型とが一
致するかどうかを判定するデータ型判定部17と、一致
しない場合に、この検出したデータ型で配列演算を行な
う中間コードが生成されるように、配列演算のデータ型
を変更するデータ型変更部18とを備えておく。
Description
ログラムのコンパイルに関し、特にはベクトル化コンパ
イラ装置及びベクトル化コンパイル方法に関する。
置を示す概略構成図である。図8に示すように、従来の
ベクトル化コンパイラ装置は、構文解析部61、ベクト
ル化部63、最適化部65、コード生成部67とで構成
されている。ベクトル化コンパイラ装置は、最初にソー
スプログラム60を入力として受け取る。
渡され、構文解析が行なわれる。その結果、ソースプロ
グラム60の原始言語とオブジェクトコード68の目的
言語との橋渡しをする中間コード62が生成される。
化を実行しやすくするために生成されている。次に、中
間コード62はベクトル化部63に渡され、中間コード
62のベクトル化判定及びベクトル化の実行が行なわれ
る。これによって、ベクトル化が可能な中間コード62
はベクトル化されているベクトル化中間コード64に変
換される。
に渡され、ある種の最適化が施されて最適化中間コード
66が生成される。最適化中間コード66はコード生成
部67に渡され、オブジェクトコード68がベクトル化
コンパイラ装置より出力される。
ンパイラ装置における構文解析部を示す構成図である。
図9に示すように、構文解析部61は、構文認識部7
0、シンボルテーブル登録部71、配列演算部72、構
文処理部(1〜n)73、エラー処理部74、及び中間
コード生成部75で構成されている。
グラム60が、プログラム言語のどの構文に該当するか
を認識する。シンボルテーブル登録部71はシンボルテ
ーブルと呼ばれるデータベースを備えており、構文認識
部70でプログラムの解析対象が変数宣言や定義である
と判定された場合に呼び出され、少なくとも変数の名前
(シンボル名)やその変数のデータ型の情報(シンボル
情報)をシンボルテーブルに登録する。
グラムの解析対象が配列の演算であると判定された場合
に呼び出され、少なくともプログラムに記述されている
配列演算の種類やオペランドのデータ型、オペランドの
値を解析してその情報を中間コード生成部75に渡す。
のもので、配列演算以外の構文が現れた場合に構文認識
部70から呼び出され、その構文に対応する解析処理を
行ない中間コード生成部75に詳細情報を渡す。なお、
各構文に対応する解析処理については、本明細書におい
て重要ではないので省略する。
文が認識できない場合に呼び出され、エラー処理を行な
う。中間コード生成部75は、配列演算部72や構文処
理部73から中間コード62を生成するために必要な情
報を受け取り、その情報に対応する中間コード62を生
成する。
コンパイラ装置を構成する構文解析部の処理を示す流れ
図である。図10に示すように、最初に構文認識部70
により、ソースプログラム60の読み込みが行なわれ
る。(ステップS200)。次に、構文認識部70によ
り、読み込まれたソースプログラム60から文が抽出さ
れて解析が行なわれ(ステップS201)、更にプログ
ラム文の解析対象が変数宣言又は定義であるかの判定が
行なわれる(ステップS202)。
71は変数名やデータ型をシンボルテーブルに登録する
(ステップS210)。その後ステップS203に移行
する。一方、判定が偽の場合は、そのままステップS2
03に移行する。
より、プログラム文の解析対象が配列演算であるかどう
かの判定が行なわれる。配列演算の判定が真の場合、配
列演算部72により演算の種類、演算のデータ型、値に
関する情報が抽出される(ステップS220)。その
後、中間コード生成部75により、抽出された情報をも
とに中間コード62が生成され(ステップS240)、
構文認識部70によりプログラムの終了判定が行なわれ
る(ステップS206)。解析中のソースプログラム6
0のうち、配列演算に対する中間コード62は、この一
連の処理(ステップS220及びS240)により生成
される。
70により、配列演算以外の他の構文であるかどうか、
即ち構文処理部(1〜n)のうちのいずれかが対応する
構文であるかどうかの判定が行なわれる(ステップS2
04)。
文処理が行なわれ、中間コード62を生成するために必
要な情報が抽出される(ステップS230)。その後、
中間コード生成部75により、抽出された情報に基づい
て中間コード62が生成される(ステップS240)。
更に、構文認識部70によりプログラムの終了判定が行
なわれる(ステップS206)。
により、構文エラー処理が実行される(ステップS20
5)。その後、構文認識部70により、プログラムの終
了判定が行なわれる(ステップS206)。
ムの終了判定では、構文認識部70により、解析中のソ
ースプログラム60が終了したかどうかが判定される。
真の場合は、ベクトル化部63に処理が移される。偽の
場合は、ステップS201に戻り、残りのソースプログ
ラム60の解析が続行される。
で示した構文解析部61は、中間コード62を生成す
る。生成された中間コード62の特徴として、配列演算
に対する中間コード62は、ソースプログラム60の中
で宣言された配列のデータ型で生成されていることが挙
げられる。
例、従来のベクトル化コンパイラ装置を使用した場合の
シンボルテーブルの一例、及び中間コードの一例を示す
図である。なお、以下の説明においては、適宜図10を
引用して説明する。
ログラム60の各文((1)〜(12))に対して構文
解析が行なわれる。先ず、(1)の文は引数なしでch
ar型を返す関数gの宣言であるので、ステップS21
0(図10)において、シンボル名(変数名)とそのデ
ータ型がシンボルテーブル69に登録される。
構文処理としては変数宣言の分類にあたるので、ステッ
プS204(図10)の判定が真となる。よって、ステ
ップS230(図10)に移り、ここで変数宣言に対す
る構文解析処理が行なわれ、ステップS240(図1
0)において変数宣言に対する中間コードが生成され
る。その後、ステップS206(図10)において、プ
ログラムの終了判定が行なわれる。プログラムに続きが
あるので、再度ステップS201(図10)に移り、処
理が続行される。なお、ステップS204(図10)、
ステップS230(図10)の処理は、配列演算に該当
する(11)以外のすべてのプログラム文で行なわれる
ので、以降は説明を省略する。
宣言であるので、ステップS210(図10)において
シンボル名及びそのデータ型がシンボルテーブル69に
登録される。(3)、(4)、(5)の各文はそれぞれ
初期値を有する変数定義であるので、同様にステップS
210においてシンボル名とそのデータ型がシンボルテ
ーブル69に登録される。
いるので、これに対してもステップS210において、
シンボル名とデータ型がシンボルテーブル69に登録さ
れる。(7)、(8)の文では、配列変数bとcに対す
る代入式なので、変数の定義とみなされ、ステップS2
10において変数名やデータ型を登録しようとするが、
既に登録されているので、そのまま処理を終える。(1
0)の文では新しい変数jが定義されているので、これ
に対してもシンボル名とそのデータ型がシンボルテーブ
ル69に登録される。
文は配列演算であるので、ステップS220においてソ
ースプログラム60やシンボルテーブル69から演算の
種類、演算のデータ型及び値が抽出される。その後、ス
テップS240において、抽出された演算のデータ型で
演算を行なう中間コード62が生成される。
bやcはint型であることがシンボルテーブル69よ
りわかる。これより、演算種類が+(加算)、演算デー
タ型がint型、第1オペランドがb〔j〕、第2オペ
ランドがc〔j〕である中間コード62が生成される。
上記したように、従来のベクトル化コンパイラ装置で生
成される配列演算に対する中間コード62は、ソースプ
ログラム60の中で宣言されたデータ型(図11の例で
はint型)で生成されていることがわかる。
渡され、中間コード62の演算とデータ型に該当するベ
クトル命令が存在すれば、その演算の並列度に対応する
ベクトル化中間コード64が生成される。図11の例で
は、2並列int型ベクトル加算演算が存在することを
仮定しているので、並列度が2のint型加算演算(i
nt〔2〕でintの2並列を表現)を表すベクトル化
中間コード64が生成される。
ているforループ内の配列演算a〔j〕=b〔j〕+
c〔j〕は、a
=b〔1〕+c〔1〕、a〔2〕=b〔2〕+c〔2〕
とa〔3〕=b〔3〕+c〔3〕、a〔4〕=b〔4〕
+c〔4〕とa〔5〕=b〔5〕+c〔5〕、a〔6〕
=b〔6〕+c〔6〕とa〔7〕=b〔7〕+c
〔7〕、a〔8〕=b〔8〕+c〔8〕とa
即ち、通常10回(j=0、1、・・・8、9)行なわ
れる配列演算は、5回(j=0、2、4、6、8)の並
列配列演算で実行可能となる。
ラ装置では、ソースプログラム60の中で演算対象につ
いて宣言されたデータ型で配列演算が実行されるように
中間コード62が生成され、この中間コード62がベク
トル化部63に渡される。よって、ベクトル化中間コー
ド64もソースプログラム60の中で演算対象について
宣言されたデータ型で配列演算が実行されるように生成
される。
ベクトル化に対応する命令は、演算対象のデータ型のサ
イズが小さいほど、並列度が高まり高速に演算が実行で
きる。具体例を挙げると、アーキテクチャが持つレジス
タのレジスタ長が64bitの場合、int型32bi
tの演算であれば、2(=64/32)並列の演算が可
能であるのに対し、shortデータ型16bitの演
算であれば、4(=64/16)並列、char型8b
itの演算であれば、8(=64/8)並列の演算が可
能である。このことから、配列演算のデータ型(演算対
象について宣言されたデータ型)のサイズを小さくして
ベクトル化を行なうことが理想である。
イラ装置では、配列に格納される可能性のある値、即ち
配列演算の演算値であるa〔j〕に格納される値の上限
値及び下限値を解析することは行われていない。よっ
て、演算値の取り得る数値範囲がプログラム中で宣言さ
れたデータ型よりも小さいデータ型(扱うことができる
数値範囲の狭いデータ型)の数値範囲に収まっている場
合でも、より小さいデータ型でベクトル化は行われず、
最初に演算対象について宣言されたデータ型でベクトル
化の実行が行われる。そのため、上記した従来のベクト
ル化コンパイラ装置では、理想的なベクトル化、即ち、
配列演算の演算値を扱うことのできる最小のデータ型で
ベクトル化を行なうことができず、演算の高速化が図れ
ないという問題がある。
得る数値範囲を解析して、配列演算の演算値を扱うこと
のできる最小のデータ型でベクトル化を行ない得るコン
パイラ装置及びコンパイル方法を提供することにある。
に本発明にかかるコンパイラ装置は、配列演算を含むソ
ースプログラムをコンパイルするコンパイラ装置であっ
て、コンパイル処理における構文の解析の際に、前記配
列演算に用いられる変数の取り得る数値範囲を解析し、
前記配列演算に用いられる変数の取り得る数値範囲を用
いて前記配列演算の演算値を格納する変数の取り得る数
値範囲を解析する変数範囲解析部と、前記配列演算の演
算値を格納する変数が取り得る数値範囲を扱うことがで
きるデータ型の中から、扱うことができる数値範囲が最
も狭いデータ型を検出し、前記扱うことができる数値範
囲が最も狭いデータ型と前記配列演算を含むソースプロ
グラムから抽出される前記配列演算のデータ型とが一致
するかどうかを判定するデータ型判定部と、前記データ
型判定部によって一致しないと判定された場合に、前記
扱うことができる数値範囲が最も狭いデータ型で前記配
列演算を行なう中間コードが生成されるように、前記配
列演算のデータ型を変更するデータ型変更部とを少なく
とも有することを特徴とする。
ては、前記配列演算を含むソースプログラム中におい
て、前記配列演算に用いられる変数の上限値と下限値と
が定義されている場合に、前記変数範囲解析部は、前記
上限値と前記下限値とに基づいて、前記配列演算に用い
られる変数の取り得る数値範囲を解析することができ
る。
がイテレータ変数であれば、前記配列演算に用いられる
変数の上限値と下限値とは、前記イテレータ変数におけ
る初期値、終了条件及び増分値によって定義されてい
る。
ては、前記配列演算を含むソースプログラム中におい
て、前記配列演算に用いられる変数に定数値が代入され
ている場合に、前記変数範囲解析部は、前記定数値を、
前記配列演算に用いられる変数の取り得る数値範囲とす
ることができる。
においては、前記配列演算に用いられる変数が代入式の
左辺である場合に、前記変数範囲解析部は、前記代入式
の右辺に含まれる全ての変数の取り得る数値範囲を解析
し、前記代入式の右辺に含まれる全ての変数の取り得る
数値範囲に基づいて、前記配列演算に用いられる変数の
取り得る数値範囲を解析することができる。
前記代入式が一次式であるか又は多次式であるかを判別
し、多次式である場合は、前記代入式の極値を算出する
ことによって、前記配列演算に用いられる変数の取り得
る数値範囲を解析することができる。一方、一次式であ
る場合は、前記代入式の右辺に含まれる全ての変数の上
限値及び下限値のみを前記代入式に代入することによっ
て、前記配列演算に用いられる変数の取り得る数値範囲
を解析することができる。
右辺に含まれる変数のうち少なくとも一つの変数におい
て、上限値及び下限値のうちの一方又は両方が定義され
ていない場合に、前記変数範囲解析部は、前記配列演算
に用いられる変数において宣言されたデータ型が扱うこ
とができる数値範囲を、前記上限値及び下限値のうちの
一方又は両方が定義されていない変数の取り得る数値範
囲とすることができる。
ては、前記変数解析部は、前記配列演算の式が一次式で
あるか又は多次式であるかを判別し、多次式である場合
に、前記配列演算の極値を算出することによって、前記
配列演算の演算値を格納する変数が取り得る数値範囲を
解析することができる。一方、一次式である場合に、前
記配列演算の式の右辺に含まれる前記配列演算に用いら
れる変数の上限値及び下限値のみを前記配列演算の式に
代入することによって、前記配列演算の演算値を格納す
る変数が取り得る数値範囲を解析することができる。
かかるコンパイル方法は、配列演算を含むソースプログ
ラムをコンパイルする方法であって、(a)コンパイル
処理における構文の解析の際に、前記配列演算に用いら
れる変数の取り得る数値範囲を解析し、前記配列演算に
用いられる変数の取り得る数値範囲を用いて前記配列演
算の演算値を格納する変数の取り得る数値範囲を解析す
る工程と、(b)前記配列演算の演算値を格納する変数
が取り得る数値範囲を扱うことができるデータ型の中か
ら、扱うことができる数値範囲が最も狭いデータ型を検
出し、前記扱うことができる数値範囲が最も狭いデータ
型と前記配列演算を含むソースプログラムから抽出され
る前記配列演算のデータ型とが一致するかどうかを判定
する工程と、(c)一致しないと判定した場合に、前記
扱うことができる数値範囲が最も狭いデータ型で前記配
列演算を行なう中間コードが生成されるように、前記配
列演算のデータ型を変更する工程とを少なくとも有する
ことを特徴とする。
ては、前記配列演算を含むソースプログラム中におい
て、前記配列演算に用いられる変数の上限値と下限値と
が定義されている場合に、前記上限値と前記下限値とに
基づいて、前記配列演算に用いられる変数の取り得る数
値範囲を解析することができる。
がイテレータ変数であれば、前記配列演算に用いられる
変数の上限値と下限値とが、前記イテレータ変数におけ
る初期値、終了条件及び増分値によって定義されてい
る。
ては、前記配列演算を含むソースプログラム中におい
て、前記配列演算に用いられる変数に定数値が代入され
ている場合に、前記定数値を、前記配列演算に用いられ
る変数の取り得る数値範囲とすることができる。
においては、前記配列演算に用いられる変数が代入式の
左辺である場合に、前記代入式の右辺に含まれる全ての
変数の取り得る数値範囲を解析し、前記代入式の右辺に
含まれる全ての変数の取り得る数値範囲に基づいて、前
記配列演算に用いられる変数の取り得る数値範囲を解析
することができる。
であるか又は多次式であるかを判別し、多次式である場
合に、前記代入式の極値を算出することによって、前記
配列演算に用いられる変数の取り得る数値範囲を解析す
ることができる。一方、一次式である場合に、前記代入
式の右辺に含まれる全ての変数の上限値及び下限値のみ
を前記代入式に代入することによって、前記配列演算に
用いられる変数の取り得る数値範囲を解析することがで
きる。
右辺に含まれる変数のうち少なくとも一つの変数におい
て、上限値及び下限値のうちの一方又は両方が定義され
ていない場合に、前記配列演算に用いられる変数におい
て宣言されたデータ型が扱うことができる数値範囲を、
前記上限値及び下限値のうちの一方又は両方が定義され
ていない変数の取り得る数値範囲とすることができる。
ては、前記配列演算の式が一次式であるか又は多次式で
あるかを判別し、多次式である場合に、前記配列演算の
極値を算出することによって、前記配列演算の演算値を
格納する変数が取り得る数値範囲を解析することができ
る。一方、一次式である場合に、前記配列演算の式の右
辺に含まれる前記配列演算に用いられる変数の上限値及
び下限値のみを前記配列演算の式に代入することによっ
て、前記配列演算の演算値を格納する変数が取り得る数
値範囲を解析することができる。
ル方法を具現化するためのプログラムであっても良い。
この場合、かかるプログラムをコンピュータにインスト
ールして実行することにより、上記の本発明にかかるコ
ンパイラ装置を実現することができる。なお、本発明で
いう「配列演算」とはベクトル化の対象となる配列演算
をいう。
実施の形態にかかるコンパイラ装置及びコンパイル方法
について、図1〜図5を参照しながら説明する。最初
に、図1に基づいて本実施の形態にかかるコンパイラ装
置について説明する。図1は、本実施の形態にかかるコ
ンパイラ装置の構成を示す概略構成図である。
ンパイラ装置は、図8に示した従来のコンパイラ装置と
同様に、ソースプログラム20の構文解析を行なって中
間コード5を生成する構文解析部1と、中間コード5を
ベクトル化中間コード6に変換するベクトル化部2、ベ
クトル化中間コード6を最適化中間コード7に変換する
最適化部3、及び最適化中間コード7からオブジェクト
コード21を生成するコード生成部4で構成されてい
る。
装置では、構文解析部1の構成や機能が図8で示した従
来のコンパイラ装置と異なっている。なお、ベクトル化
部2、最適化部3及びコード生成部4は、図8に示され
たものと構成及び機能において同じである。本実施の形
態にかかるコンパイラ装置における構文解析部1につい
て以下に説明する。
認識部10、シンボルテーブル登録部11、配列演算部
12、構文処理部(1〜n)13、エラー処理部14、
中間コード生成部15、変数範囲解析部16、データ型
判定部17及びデータ型変更部18で構成されている。
このうち、構文認識部10、シンボルテーブル登録部1
1、配列演算部12、構文処理部(1〜n)13、エラ
ー処理部14及び中間コード生成部15は、図9で示し
たものと同様のものである。本実施の形態にかかるコン
パイラ装置は、変数範囲解析部16、データ型判定部1
7及びデータ型変更部18が備えられている点で、従来
のコンパイラ装置と異なっている。
20のコンパイル処理における構文解析の際に、ソース
プログラム20中で用いられている変数の取り得る数値
範囲(上限値及び下限値)を解析する機能を有してい
る。なお、変数範囲解析部16は、変数が配列演算の演
算値を格納する変数である場合は、配列演算に用いられ
る変数について解析した数値範囲に基づいて解析を行な
う。
を格納する変数が取り得る数値範囲を扱うことができる
データ型の中から扱うことができる数値範囲が最も狭い
データ型を検出し、この扱うことができる数値範囲が最
も狭いデータ型と配列演算のデータ型とが一致するかど
うかを判定する機能を有している。なお、判定対象とな
る配列演算のデータ型は、ソースプログラム20中で宣
言されたデータ型であり、ソースプログラム20から抽
出される。
一致しない場合に、扱うことができる数値範囲最も狭い
データ型で配列演算を行なう中間コードが生成されるよ
うに、配列演算のデータ型を変更する機能を有してい
る。
ラ装置における処理及び本実施の形態にかかるコンパイ
ル方法について説明する。図2は、図1に示すコンパイ
ラ装置における処理の流れ及び本実施の形態にかかるコ
ンパイル方法を示す流れ図である。なお、図2では構文
解析部1における処理の流れのみが示されており、ベク
トル化部2、最適化部3及びコード生成部4における処
理の流れについては省略している。ベクトル化部2、最
適化部3及びコード生成部4においては、従来と同様の
処理が行われる。また、図1を適宜参酌しながら説明す
る。
(図1参照)により、ソースプログラム20の読み込み
を行ない(S1)、更にソースプログラム20から一つ
のプログラム文を抽出して解析を行なう(S2)。ソー
スプログラム20には配列演算が含まれている。
プログラム文が変数宣言又は定義であるかどうかの判定
を行なう(S3)。変数宣言や定義でない場合は、ステ
ップS4へと移行する。
は、シンボルテーブル登録部11により、変数の名前や
宣言されたデータ型といった情報をシンボルテーブルに
登録する(S10)。更に、この場合は、変数範囲解析
部16により、シンボルテーブルに登録された情報か
ら、抽出されたプログラム文が変数の定義であるかどう
かの判断を行なう(ステップS11)。
S4へと移行する。変数の定義である場合は、変数範囲
解析部16により、変数が取り得る数値範囲の解析を行
ない、解析された数値範囲をシンボルテーブルに登録す
る(ステップS12)。この数値範囲の解析は、ソース
プログラム20中になされた変数の定義に基づいて、変
数に格納される可能性のある値の上限値及び下限値を、
数学的手段を用いて算出することによって行なう。
象となる変数が、配列演算の演算値を格納するものであ
るのか、又は配列演算に用いられるものであるのかに拘
わらず行なう。変数が配列演算の演算値を格納する変数
である場合は、配列演算に用いられる変数について解析
した数値範囲に基づいて解析を行なう。なお、ステップ
S12の具体的な内容については、後述の図3において
説明する。その後ステップS4へと移行する。
り、プログラム文の解析対象が配列演算であるかどうか
の判定を行なう。配列演算である場合は、配列演算部1
2により、演算の種類、演算対象オペランドのシンボル
を抽出し、シンボルテーブルから、抽出したシンボルの
データ型(配列演算のデータ型)、値(演算値を格納す
る変数が取り得る数値範囲)に関する情報を抽出し、こ
れらの情報をシンボルテーブルに登録する(ステップS
20)。更に、データ型判定部17により、ステップS
12で解析した演算値を格納する変数が取り得る数値範
囲に基づいて、この数値範囲を扱うことができるデータ
型の中から、扱うことができる数値範囲が最も狭いデー
タ型を検出し、この扱うことができる数値範囲が最も狭
いデータ型とステップS20で抽出した配列演算のデー
タ型とが一致するかどうかを判定する(ステップS2
1)。
タ型とステップS20で抽出した配列演算のデータ型と
が一致する場合は、ステップS40へと移行する。一
方、一致しない場合は、データ型変更部18により、扱
うことができる数値範囲が最も狭いデータ型で配列演算
を行なう中間コードが生成されるように、配列演算のデ
ータ型を変更する(ステップS22)。その後、ステッ
プS40へと移行する。なお、ステップS21及びS2
2の具体的な内容については、後述の図4において説明
する。
出された情報及びデータ型変更部18によって変更され
た情報に基づき、中間コード生成部15により、中間コ
ード5を生成する。中間コードの生成後、ステップS7
へと移行する。解析中のプログラムのうち、配列演算に
対する中間コード5はこの一連の処理(ステップS20
〜S22及びS40)により生成される。
演算でないと判定した場合は、構文認識部10により、
配列演算以外の他の構文であるかどうか、即ち構文処理
部(1〜n)13のうちのいずれかが対応する構文であ
るかどうかの判定を行なう(ステップS5)。配列演算
以外の他の構文である場合は、対応する構文処理部13
により、構文処理を行なって配列演算以外のプログラム
文に対する中間コード5を生成するために必要な情報を
抽出する(ステップS30)。
基づいて、中間コード生成部15により、中間コードを
2生成する(ステップS40)。この後、ステップS7
へと移行する。
は、構文認識部10により、構文エラー処理を実行する
(ステップS6)。その後、ステップS7へと移行す
る。
り、解析中のソースプログラム20が終了したかどうか
を判定する。終了した場合は、ベクトル化部3に処理を
移す。終了していない場合は、ステップS2へと戻り、
残りのプログラム文の解析を続行する。
て図3を用いて具体的に説明する。図3は、変数範囲解
析部による処理を具体的に示す流れ図である。図3に示
すステップS100〜S108が図2に示すステップS
12に相当する。
部16は、シンボルテーブルに登録された情報に基づい
て、解析対象の変数がループのイテレータ変数であるか
どうかの判定を行なう(ステップS100)。イテレー
タ変数の場合は、ソースプログラム20に定義されてい
る初期値、終了条件、増分値を抽出し、これらの情報を
基にこのイテレータ変数の取り得る数値範囲(上限値及
び下限値)を算出し、算出された数値範囲をシンボルテ
ーブルに登録する(ステップS101)。
析部16は、解析対象の変数に定数値が代入されている
かどうかの判定を行なう(ステップS102)。定数値
が代入されている場合は、この定数値を解析対象の変数
の取り得る数値範囲とし、この定数値をシンボルテーブ
ルに登録する(ステップS103)。定数値が代入され
ていない場合はステップS104に移行する。
又定数値が代入された変数でもない場合は、代入式の左
辺であるか、配列演算の演算値を格納する変数であるか
のどちらかと考えられる。よって、ステップS104で
は、変数範囲解析部16は、代入式又は配列演算の演算
式の右辺に含まれる全ての変数の取り得る数値範囲を解
析する。具体的には変数範囲解析部16は、各変数につ
いて、シンボルテーブルから上限値及び下限値を抽出す
る。
に含まれる変数のうち少なくとも一つの変数について、
上限値及び下限値のうちの一方又は両方がシンボルテー
ブルに登録されていない場合は、シンボルテーブルから
の数値範囲の抽出が行なえないため、変数解析部16
は、上限値及び下限値のうちの一方又は両方がシンボル
テーブルに登録されていない変数が、代入式又は配列演
算の演算式の右辺に含まれているかどうかを判定する
(ステップS105)。
場合は、ステップS107に移行する。上記の変数が含
まれている場合は、解析対象の変数において宣言された
データ型が扱うことができる数値範囲を抽出する(ステ
ップS106)。その後、ステップS107に移行す
る。
6は、代入式又は配列演算の演算式の右辺に含まれる全
ての変数の取り得る数値範囲に基づいて、解析対象の変
数の取り得る数値範囲を解析する。なお、ステップS1
06で解析対象の変数において宣言されたデータ型が扱
うことができる数値範囲を抽出した場合は、この抽出し
た数値範囲を、上限値及び下限値のうちの一方又は両方
がシンボルテーブルに登録されていない変数の取り得る
数値範囲として、解析対象の変数の取り得る数値範囲を
解析する。
式又は配列演算の演算式の右辺に含まれる全ての変数の
上限値と下限値との間に存する全数値に対する代入式又
は配列演算の演算式の計算値を求めることによって、解
析対象の変数の取り得る数値範囲を算出する。
解析部16は、代入式又は配列演算の演算式が一次式で
あるか又は多次式であるかを判別する機能を有してい
る。そのため、代入式又は配列演算の演算式が一次式で
ある場合は、各変数の上限値と下限値との間に存する全
数値に対する代入式又は配列演算の演算式の計算値を求
める必要はない。
の右辺に含まれる全ての変数の上限値及び下限値のみを
代入式又は配列演算の演算式に代入することで、解析対
象の変数の取り得る数値範囲を算出できる。
式である場合は、数学的な極値計算を行ない、これによ
って求められた極値を用いて、解析対象の変数の取り得
る数値範囲を算出することもできる。
た上限値及び下限値を、解析対象となる変数の数値範囲
として、シンボルテーブルに登録する(ステップS10
8)。このように、ソースプログラム10に含まれる全
ての変数について、上記したステップS100〜S10
8を行なうことにより、最終的に配列演算の演算値を格
納する変数の取り得る数値範囲を解析することができ
る。
S22について図4を用いて具体的に説明する。図4
は、データ型判定部及びデータ型変更部による処理を具
体的に示す流れ図である。図4に示すステップS110
は図2に示すステップS20に相当し、図4に示すS1
11〜S112は図2に示すステップS21に相当し、
図4に示すステップS113は図2に示すステップS2
2に相当する。
部17はシンボルテーブルから配列演算に使用されるデ
ータ型と、図3に示したステップS100〜S108に
よって解析された配列演算の演算値を格納する変数の取
り得る数値範囲(上限値及び下限値)を抽出する(ステ
ップS110)。
報(コンパイラ装置が通常有しており、アーキテクチャ
の機種に依存する情報)と配列演算の演算値を格納する
変数の取り得る数値範囲とを対比して、この数値範囲を
扱うことができるデータ型であって、扱うことができる
数値範囲が最も狭いものを検出する。次いで、データ型
判定部17は、ステップS110で抽出した配列演算に
使用されるデータ型と、上記の検出したデータ型とが一
致するかどうかを判定する(ステップS111)。
定部17は、シンボルテーブルから抽出した配列演算に
使用されるデータ型を演算情報として中間コード生成部
15に渡す(ステップS112)。よって、中間コード
生成部15は、シンボルテーブルから抽出した配列演算
に使用されるデータ型で配列演算が行なわれるように中
間コードを生成する。
ータ型判定部17は、配列演算に使用されるデータ型を
上記の扱うことができる数値範囲が最も狭いデータ型に
変更する。即ち、データ型判定部17は、シンボルテー
ブルから抽出した配列演算に使用されるデータ型の代わ
りに、上記の扱うことができる数値範囲が最も狭いデー
タ型を演算情報として中間コード生成部15に渡す(ス
テップS113)。よって、中間コード生成部15は、
上記の扱うことができる数値範囲が最も狭いデータ型で
配列演算が行なわれるように中間コードを生成する。
間コード5が生成される。よって、本実施の形態では、
最も小さいデータ型で配列演算を行なう中間コードを生
成することができ、従来に比べて並列度を上げて高速化
を図ることが可能となる。
いて、本実施の形態にかかるコンパイラ装置及びコンパ
イル方法について説明する。図5は、ソースプログラム
及びシンボルテーブルの一例を示す図である。なお、従
来例との効果の比較を行なうため、図5に示すソースプ
ログラム20は、図11で示したソースプログラム60
と同じものである。図6は、コンパイラ装置が通常有し
ているデータ型情報を示す図である。図7は、図5に示
すソースプログラムに基づいて生成された中間コード及
びベクトル化中間コードを示す図である。
グラム文(1)〜(12)に対し、図2〜図4で示した
ように構文解析が行なわれて、中間コードが生成され
る。図5に示すソースプログラム20中において、変数
aは配列演算の演算値を格納する変数であり、これ以外
の変数b、c、d、e、f、j、jは配列演算に用いら
れる変数である。以下にプログラム文ごとに説明する。
r型を返す関数gの宣言であるので、変数名とデータ型
とがシンボルテーブルに登録される(図2/ステップS
10)。但し、プログラム文(1)は定義ではないの
で、取り得る数値範囲の解析は行なわれない。また、プ
ログラム文(1)は配列演算にも該当せず、構文処理と
しては変数宣言の分類にあたる。よって、変数宣言に対
する構文解析処理が行なわれ(図2/ステップS5、S
30)、変数宣言に対する中間コードが生成される(図
2/ステップS40)。
るが(図2/ステップS7)、プログラムに続きがある
ので、次のプログラム文(2)の処理が行われる(図2
/ステップS2)。なお、変数宣言に対する構文解析処
理(図2/ステップS5、S30)は、配列演算に該当
するプログラム文(11)以外のすべてのプログラム文
で行なわれる。このため、以下の説明においては省略し
ている。
0〕、b〔10〕、c〔10〕の宣言である。よって、
シンボル名とそのデータ型とがシンボルテーブルに登録
される(図2/ステップS10)。プログラム文(2)
も定義ではないため、取り得る数値範囲の解析は行なわ
れない。
は、それぞれ初期値を有する変数の定義である。よっ
て、先ずシンボル名とそのデータ型とがシンボルテーブ
ルに登録され(図2/ステップS10)、次に取り得る
数値範囲の解析が行なわれる(図2/ステップS11及
びS12)。
説明する。プログラム文(3)及び(4)では変数d及
びeに‘100000’や‘1000’といった定数値
が代入されている。よって、これらの定数値が変数d及
びeの取り得る数値範囲(上限値及び下限値)としてシ
ンボルテーブルに登録される(図3/ステップS100
及びS101)。
り、代入式の右辺には関数gの呼び出し結果が代入され
る。よって、定数値が代入されていないので、シンボル
テーブルから代入式の右辺に含まれる変数の上限値と下
限値とが抽出される(図3/ステップS104)。ここ
で、シンボルテーブルにおける変数gの項目を見ると、
上限値及び下限値の両方が登録されていないことがわか
る。
言時に指定されたデータ型、即ちchar型が取り得る
数値範囲とされ、データ型情報から上限値及び下限値と
して‘127’と‘−128’とが抽出される(図3/
ステップS105及びS106)。その後、変数gの上
限値と下限値との間に存する全数値に対する代入式の計
算値を求める(図3/ステップS107)。この場合
は、関数gの返り値そのものが代入されるので、変数g
の取り得る数値範囲が、変数fの取り得る数値範囲とな
る。よって、シンボルテーブルには、変数fの取り得る
数値範囲として、上限値‘127’と下限値‘−12
8’とが登録される(図3/ステップS108)。
義である。よって、先ずシンボル名とデータ型がシンボ
ルテーブルに登録される(図2/ステップS10)。ま
た、プログラム文(6)は変数iの定義であるため、取
り得る数値範囲の解析が行なわれる(図2/ステップS
11及びS12)。
説明する。変数iは、for文におけるイテレータ変数
である(図3/ステップS100)。よって、初期値、
終了条件及び増分値から、変数iの取り得る数値範囲
(上限値及び下限値)が算出され、シンボルテーブルに
登録される(図3/ステップS101)。この場合、初
期値がi=0、終了条件がi<10、増分値が i++
(i=i+1)であるので、変数iの上限値は9、下限
値は0である。よってシンボルテーブルには上限値9と
下限値0とが登録される。
に対する代入式であり、変数b〔i〕の定義とみなされ
る。よって、上記のプログラム文(2)では宣言であっ
たので、シンボル名とそのデータ型とがシンボルテーブ
ルに登録されるだけであったが(図2/ステップS1
0)、プログラム文(7)は定義であるので、取り得る
数値範囲の解析が行なわれる(図2/ステップS11及
びS12)。
説明する。プログラム文(7)においては、代入式の右
辺は‘d/e*i’と言うような変数を含んでいる。こ
のためため、代入式の右辺に含まれる全ての変数(d、
e、i)の取り得る数値範囲(上限値及び下限値)がシ
ンボルテーブルから抽出される(図3/ステップS10
4)。
値及び下限値は、d=100000、e=1000、0
≦i≦9と登録されており、上限値又は下限値が登録さ
れていない変数は存在していない(図3/ステップS1
05)。よって、代入式の右辺に含まれる変数d、e及
びiの上限値と下限値との間に存する全数値に対する代
入式の計算値が求められる(図3/ステップS10
7)。
‘900’、下限値は‘0’であることがわかる。な
お、プログラム文(7)の代入式は一次式であるので、
上限値と下限値との間に存する全数値に対して、代入式
の結果値を計算する必要はなく、各変数の上限値と下限
値とのみを用いて計算が可能である。また、代入式が多
次式の場合は、数学的に極値計算を行なって極値を算出
し、この極値を変数b〔i〕の上限値又は下限値とする
こともできる。計算結果は、変数b〔i〕の取り得る数
値範囲としてシンボルテーブルに登録される(図3/ス
テップS108)。
同様、配列変数c〔i〕に対する代入式なので、変数c
〔i〕の定義とみなされ、取り得る数値範囲の解析が行
なわれる(図2/ステップS11及びS12)。プログ
ラム文(8)では、代入式の右辺は‘e+f’と言うよ
うな変数を含む式である。このため、プログラム(7)
の場合と同様に、代入式の右辺に含まれる全ての変数
(e、f)の取り得る数値範囲(上限値及び下限値)が
シンボルテーブルから抽出される(図3/ステップS1
04)。
値及び下限値は、e=1000、−128≦f≦127
と登録されており、上限値又は下限値が登録されていな
い変数は存在していない(図3/ステップS105)。
よって、代入式の右辺に含まれる変数e及びfの上限値
と下限値との間に存する全数値に対する代入式の計算値
が求められる(図3/ステップS107)。
27’、下限値は‘872’であることがわかる。な
お、プログラム文(8)の代入式も一次式であるので、
上限値と下限値との間に存する全数値に対して、代入式
の結果値を計算する必要はなく、各変数の上限値と下限
値とのみを用いて計算が可能である。この計算結果は、
変数c〔i〕の取り得る数値範囲としてシンボルテーブ
ルに登録される(図3/ステップS108)。
(6)と同様に、イテレータ変数jの定義である。よっ
て、プログラム文(6)と同様に、シンボル名とデータ
型とがシンボルテーブル登録され(図2/ステップS1
0)、初期値j=0、終了条件j<10、及び増分値j
++に基づいて、取り得る数値範囲が算出される。シン
ボルテーブルには、上限値として9が、下限値として0
が登録される。
あり、演算値を格納する配列変数a〔j〕の定義であ
る。よって、プログラム文(7)や(8)と同様に、取
り得る数値範囲の解析が行なわれる(図2/ステップS
11及びS12)。プログラム文(11)において、配
列演算の右辺は‘b〔j〕+c〔j〕’であり、b
〔j〕及びc〔j〕といった変数を含んでいる。このた
め、変数b〔j〕及びc〔j〕の取り得る数値範囲(上
限値及び下限値)がシンボルテーブルから抽出される
(図3/ステップS104)。
値及び下限値は、0≦b〔j〕≦900、872≦c
〔j〕≦1127と登録されており、上限値又は下限値
が登録されていない変数は存在していない(図3/ステ
ップS105)。よって、変数b〔j〕及びc〔j〕の
上限値と下限値との間に存する全数値に対する配列演算
の式の計算値が求められる(図3/ステップS10
7)。
限値は‘2027’、下限値は‘872’であることが
わかる。なお、プログラム文(9)の配列演算の式も一
次式であるので、上限値と下限値との間に存する全数値
に対して、配列演算の式の結果値を計算する必要はな
く、各変数の上限値と下限値とのみを用いて計算が可能
である。また、配列演算の式が多次式の場合は、数学的
に極値計算を行なって極値を算出し、この極値を変数a
〔i〕の上限値又は下限値とすることもできる。この計
算結果は、変数a〔j〕の取り得る数値範囲としてシン
ボルテーブルに登録される(図3/ステップS10
8)。
演算は配列演算であるので、ソースプログラムやシンボ
ルテーブルから演算の種類、演算のデータ型、値(演算
値を格納する変数が取り得る数値範囲)が抽出される
(図2/ステップS4及びS20)。演算対象の配列要
素b〔j〕やc〔j〕はint型であることがシンボル
テーブルより抽出されるので、演算の種類が+(加
算)、演算のデータ型がint型、第1オペランドがb
〔j〕、第2オペランドがc〔j〕というように抽出さ
れる。その後、データ型判定部とデータ型変更部とによ
る処理が実行される(図2/ステップS21及びS2
2)。
上限値及び下限値として872≦a〔j〕≦2027が
抽出され(図4/ステップS110)、この上限値及び
下限値とデータ型情報とが対比され、扱うことができる
数値範囲が最も狭いデータ型が検出される。この例で
は、short型とunsigned short型と
が抽出される。シンボルテーブルから抽出した配列演算
のデータ型はint型であることから、この扱うことが
できる数値範囲が狭いデータ型とは一致していないこと
が分かる(ステップS111)。
rt型(又はunsigned short型)に変更
する。次に、演算情報(演算の種類、演算のデータ型、
オペランドの値)が中間コード生成部に渡される(図4
/ステップS113)。
のデータ型は配列演算を実行するのに必要な最小のデー
タ型へ変更されているので、図7に示すように生成され
る中間コード5は、配列演算を実行するのに必要な最小
のデータ型(実施例では、shortデータ型)で生成
されていることがわかる。また、図7に示すように、こ
の中間コードがベクトル化部に渡され、中間コードの配
列演算とこの配列演算のデータ型との両方に該当するベ
クトル命令が存在すれば、その演算の並列度に対応する
ベクトル化中間コード6が生成される。
クトル加算演算が存在することを仮定しているので、並
列度が4のshort型加算演算(short〔4〕で
shortの4並列を表現)を表すベクトル化中間コー
ドが生成されている。
述されているforループ内の配列演算a〔j〕=b
〔j〕+c〔j〕は、a
a〔1〕=b〔1〕+c〔1〕とa〔2〕=b〔2〕+
c〔2〕とa〔3〕=b〔3〕+c〔3〕との組み合わ
せ、a〔4〕=b〔4〕+c〔4〕とa〔5〕=b
〔5〕+c〔5〕とa〔6〕=b〔6〕+c〔6〕とa
〔7〕=b〔7〕+c〔7〕との組み合わせ、a〔8〕
=b〔8〕+c〔8〕とa
との組み合わせで、並列に行なわれる。
j=0、2、4、6、8の5回行なわれていた配列演算
が、j=0、4、8の3回の配列演算で実行可能とな
る。以上のように、本実施の形態では、演算のデータ型
がソースプログラム中で宣言されているデータ型(in
t型)から演算実行に必要な最小のデータ型(shor
t型)に最適化されているので、従来の方法でコンパイ
ルした場合と比較して、演算の並列度が2から4に増加
し、演算の高速化が図られていると言える。
ンパイラ装置及びコンパイル方法を用いれば、配列演算
の演算値を格納する変数に格納される可能性のある値に
ついて、上限値および下限値を予測でき、この格納され
る可能性のある値を扱うことができる最小のデータ型で
ベクトル化を実行することが可能となる。この結果、利
用できる最大の並列度を持つベクトル命令を使用するこ
とができ(最大の並列度でベクトル命令を実行でき)、
ソースプログラムの実行の高速化を図ることができる。
示す概略構成図
及び本実施の形態にかかるコンパイル方法を示す流れ図
図
を具体的に示す流れ図
を示す図
を示す図
れた中間コード及びベクトル化中間コードを示す図
成図
における構文解析部を示す構成図
置を構成する構文解析部の処理を示す流れ図
クトル化コンパイラ装置を使用した場合のシンボルテー
ブルの一例、及び中間コードの一例を示す
Claims (30)
- 【請求項1】 配列演算を含むソースプログラムをコン
パイルするコンパイラ装置であって、 コンパイル処理における構文の解析の際に、前記配列演
算に用いられる変数の取り得る数値範囲を解析し、前記
配列演算に用いられる変数の取り得る数値範囲を用いて
前記配列演算の演算値を格納する変数の取り得る数値範
囲を解析する変数範囲解析部と、 前記配列演算の演算値を格納する変数が取り得る数値範
囲を扱うことができるデータ型の中から、扱うことがで
きる数値範囲が最も狭いデータ型を検出し、前記扱うこ
とができる数値範囲が最も狭いデータ型と前記配列演算
を含むソースプログラムから抽出される前記配列演算の
データ型とが一致するかどうかを判定するデータ型判定
部と、 前記データ型判定部によって一致しないと判定された場
合に、前記扱うことができる数値範囲が最も狭いデータ
型で前記配列演算を行なう中間コードが生成されるよう
に、前記配列演算のデータ型を変更するデータ型変更部
とを少なくとも有することを特徴とするコンパイラ装
置。 - 【請求項2】 前記配列演算を含むソースプログラム中
において、前記配列演算に用いられる変数の上限値と下
限値とが定義されている場合に、前記変数範囲解析部
が、前記上限値と前記下限値とに基づいて、前記配列演
算に用いられる変数の取り得る数値範囲を解析する請求
項1記載のコンパイラ装置。 - 【請求項3】 前記配列演算に用いられる変数がイテレ
ータ変数であり、前記配列演算に用いられる変数の上限
値と下限値とが、前記イテレータ変数における初期値、
終了条件及び増分値によって定義されている請求項2記
載のコンパイラ装置。 - 【請求項4】 前記配列演算を含むソースプログラム中
において、前記配列演算に用いられる変数に定数値が代
入されている場合に、前記変数範囲解析部が、前記定数
値を、前記配列演算に用いられる変数の取り得る数値範
囲とする請求項1記載のコンパイラ装置。 - 【請求項5】 前記配列演算に用いられる変数が代入式
の左辺である場合に、前記変数範囲解析部が、前記代入
式の右辺に含まれる全ての変数の取り得る数値範囲を解
析し、前記代入式の右辺に含まれる全ての変数の取り得
る数値範囲に基づいて、前記配列演算に用いられる変数
の取り得る数値範囲を解析する請求項1記載のコンパイ
ラ装置。 - 【請求項6】 前記変数解析部が、前記代入式が一次式
であるか又は多次式であるかを判別し、多次式である場
合に、前記代入式の極値を算出することによって、前記
配列演算に用いられる変数の取り得る数値範囲を解析す
る請求項5記載のコンパイラ装置。 - 【請求項7】 前記変数解析部が、前記代入式が一次式
であるか又は多次式であるかを判別し、一次式である場
合に、前記代入式の右辺に含まれる全ての変数の上限値
及び下限値のみを前記代入式に代入することによって、
前記配列演算に用いられる変数の取り得る数値範囲を解
析する請求項5記載のコンパイラ装置。 - 【請求項8】 前記代入式の右辺に含まれる変数のうち
少なくとも一つの変数において、上限値及び下限値のう
ちの一方又は両方が定義されていない場合に、前記変数
範囲解析部が、前記配列演算に用いられる変数において
宣言されたデータ型が扱うことができる数値範囲を、前
記上限値及び下限値のうちの一方又は両方が定義されて
いない変数の取り得る数値範囲とする請求項5記載のコ
ンパイラ装置。 - 【請求項9】 前記変数解析部が、前記配列演算の式が
一次式であるか又は多次式であるかを判別し、多次式で
ある場合に、前記配列演算の極値を算出することによっ
て、前記配列演算の演算値を格納する変数が取り得る数
値範囲を解析する請求項1記載のコンパイラ装置。 - 【請求項10】 前記変数解析部が、前記配列演算の式
が一次式であるか又は多次式であるかを判別し、一次式
である場合に、前記配列演算の式の右辺に含まれる前記
配列演算に用いられる変数の上限値及び下限値のみを前
記配列演算の式に代入することによって、前記配列演算
の演算値を格納する変数が取り得る数値範囲を解析する
請求項1記載のコンパイラ装置。 - 【請求項11】 配列演算を含むソースプログラムをコ
ンパイルする方法であって、 (a)コンパイル処理における構文の解析の際に、前記
配列演算に用いられる変数の取り得る数値範囲を解析
し、前記配列演算に用いられる変数の取り得る数値範囲
を用いて前記配列演算の演算値を格納する変数の取り得
る数値範囲を解析する工程と、 (b)前記配列演算の演算値を格納する変数が取り得る
数値範囲を扱うことができるデータ型の中から、扱うこ
とができる数値範囲が最も狭いデータ型を検出し、前記
扱うことができる数値範囲が最も狭いデータ型と前記配
列演算を含むソースプログラムから抽出される前記配列
演算のデータ型とが一致するかどうかを判定する工程
と、 (c)一致しないと判定した場合に、前記扱うことがで
きる数値範囲が最も狭いデータ型で前記配列演算を行な
う中間コードが生成されるように、前記配列演算のデー
タ型を変更する工程とを少なくとも有することを特徴と
するコンパイル方法。 - 【請求項12】 前記配列演算を含むソースプログラム
中において、前記配列演算に用いられる変数の上限値と
下限値とが定義されている場合に、前記上限値と前記下
限値とに基づいて、前記配列演算に用いられる変数の取
り得る数値範囲を解析する請求項11のコンパイル方
法。 - 【請求項13】 前記配列演算に用いられる変数がイテ
レータ変数であり、前記配列演算に用いられる変数の上
限値と下限値とが、前記イテレータ変数における初期
値、終了条件及び増分値によって定義されている請求項
12記載のコンパイル方法。 - 【請求項14】 前記配列演算を含むソースプログラム
中において、前記配列演算に用いられる変数に定数値が
代入されている場合に、前記定数値を、前記配列演算に
用いられる変数の取り得る数値範囲とする請求項11記
載のコンパイル方法。 - 【請求項15】 前記配列演算に用いられる変数が代入
式の左辺である場合に、前記代入式の右辺に含まれる全
ての変数の取り得る数値範囲を解析し、前記代入式の右
辺に含まれる全ての変数の取り得る数値範囲に基づい
て、前記配列演算に用いられる変数の取り得る数値範囲
を解析する請求項11記載のコンパイル方法。 - 【請求項16】 前記代入式が一次式であるか又は多次
式であるかを判別し、多次式である場合に、前記代入式
の極値を算出することによって、前記配列演算に用いら
れる変数の取り得る数値範囲を解析する請求項15記載
のコンパイル方法。 - 【請求項17】 前記代入式が一次式であるか又は多次
式であるかを判別し、一次式である場合に、前記代入式
の右辺に含まれる全ての変数の上限値及び下限値のみを
前記代入式に代入することによって、前記配列演算に用
いられる変数の取り得る数値範囲を解析する請求項15
記載のコンパイル方法。 - 【請求項18】 前記代入式の右辺に含まれる変数のう
ち少なくとも一つの変数において、上限値及び下限値の
うちの一方又は両方が定義されていない場合に、前記配
列演算に用いられる変数において宣言されたデータ型が
扱うことができる数値範囲を、前記上限値及び下限値の
うちの一方又は両方が定義されていない変数の取り得る
数値範囲とする請求項15記載のコンパイル方法。 - 【請求項19】 前記配列演算の式が一次式であるか又
は多次式であるかを判別し、多次式である場合に、前記
配列演算の極値を算出することによって、前記配列演算
の演算値を格納する変数が取り得る数値範囲を解析する
請求項11記載のコンパイル方法。 - 【請求項20】 前記配列演算の式が一次式であるか又
は多次式であるかを判別し、一次式である場合に、前記
配列演算の式の右辺に含まれる前記配列演算に用いられ
る変数の上限値及び下限値のみを前記配列演算の式に代
入することによって、前記配列演算の演算値を格納する
変数が取り得る数値範囲を解析する請求項11記載のコ
ンパイル方法。 - 【請求項21】 配列演算を含むソースプログラムをコ
ンパイルする方法を、コンピュータに実行させるための
プログラムであって、 (a)コンパイル処理における構文の解析の際に、前記
配列演算に用いられる変数の取り得る数値範囲を解析
し、前記配列演算に用いられる変数の取り得る数値範囲
を用いて前記配列演算の演算値を格納する変数の取り得
る数値範囲を解析するステップと、 (b)前記配列演算の演算値を格納する変数が取り得る
数値範囲を扱うことができるデータ型の中から、扱うこ
とができる数値範囲が最も狭いデータ型を検出し、前記
扱うことができる数値範囲が最も狭いデータ型と前記配
列演算を含むソースプログラムから抽出される前記配列
演算のデータ型とが一致するかどうかを判定するステッ
プと、 (c)一致しないと判定した場合に、前記扱うことがで
きる数値範囲が最も狭いデータ型で前記配列演算を行な
う中間コードが生成されるように、前記配列演算のデー
タ型を変更するステップとを少なくとも有することを特
徴とするコンピュータに実行させるプログラム。 - 【請求項22】 前記配列演算を含むソースプログラム
中において、前記配列演算に用いられる変数の上限値と
下限値とが定義されている場合に、前記上限値と前記下
限値とに基づいて、前記配列演算に用いられる変数の取
り得る数値範囲を解析する請求項21のプログラム。 - 【請求項23】 前記配列演算に用いられる変数がイテ
レータ変数であり、前記配列演算に用いられる変数の上
限値と下限値とが、前記イテレータ変数における初期
値、終了条件及び増分値によって定義されている請求項
22記載のプログラム。 - 【請求項24】 前記配列演算を含むソースプログラム
中において、前記配列演算に用いられる変数に定数値が
代入されている場合に、前記定数値を、前記配列演算に
用いられる変数の取り得る数値範囲とする請求項21記
載のプログラム。 - 【請求項25】 前記配列演算に用いられる変数が代入
式の左辺である場合に、前記代入式の右辺に含まれる全
ての変数の取り得る数値範囲を解析し、前記代入式の右
辺に含まれる全ての変数の取り得る数値範囲に基づい
て、前記配列演算に用いられる変数の取り得る数値範囲
を解析する請求項21記載のプログラム。 - 【請求項26】 前記代入式が一次式であるか又は多次
式であるかを判別し、多次式である場合に、前記代入式
の極値を算出することによって、前記配列演算に用いら
れる変数の取り得る数値範囲を解析する請求項25記載
のプログラム。 - 【請求項27】 前記代入式が一次式であるか又は多次
式であるかを判別し、一次式である場合に、前記代入式
の右辺に含まれる全ての変数の上限値及び下限値のみを
前記代入式に代入することによって、前記配列演算に用
いられる変数の取り得る数値範囲を解析する請求項25
記載のプログラム。 - 【請求項28】 前記代入式の右辺に含まれる変数のう
ち少なくとも一つの変数において、上限値及び下限値の
うちの一方又は両方が定義されていない場合に、前記配
列演算に用いられる変数において宣言されたデータ型が
扱うことができる数値範囲を、前記上限値及び下限値の
うちの一方又は両方が定義されていない変数の取り得る
数値範囲とする請求項25記載のプログラム。 - 【請求項29】 前記配列演算の式が一次式であるか又
は多次式であるかを判別し、多次式である場合に、前記
配列演算の極値を算出することによって、前記配列演算
の演算値を格納する変数が取り得る数値範囲を解析する
請求項21記載のプログラム。 - 【請求項30】 前記配列演算の式が一次式であるか又
は多次式であるかを判別し、一次式である場合に、前記
配列演算の式の右辺に含まれる前記配列演算に用いられ
る変数の上限値及び下限値のみを前記配列演算の式に代
入することによって、前記配列演算の演算値を格納する
変数が取り得る数値範囲を解析する請求項21記載のプ
ログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001349185A JP3598090B2 (ja) | 2001-11-14 | 2001-11-14 | コンパイラ装置及びコンパイル方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001349185A JP3598090B2 (ja) | 2001-11-14 | 2001-11-14 | コンパイラ装置及びコンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003150386A true JP2003150386A (ja) | 2003-05-23 |
JP3598090B2 JP3598090B2 (ja) | 2004-12-08 |
Family
ID=19161893
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001349185A Expired - Fee Related JP3598090B2 (ja) | 2001-11-14 | 2001-11-14 | コンパイラ装置及びコンパイル方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3598090B2 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005301415A (ja) * | 2004-04-07 | 2005-10-27 | Ricoh Co Ltd | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム |
WO2011096016A1 (ja) * | 2010-02-05 | 2011-08-11 | 株式会社 東芝 | コンパイラ装置 |
JP7492655B1 (ja) | 2022-05-12 | 2024-05-29 | 之江実験室 | アレイ型解析プリミティブ構造に基づくバックエンドコンパイラの実現方法及び装置 |
-
2001
- 2001-11-14 JP JP2001349185A patent/JP3598090B2/ja not_active Expired - Fee Related
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005301415A (ja) * | 2004-04-07 | 2005-10-27 | Ricoh Co Ltd | コンパイル方式、シミュレータ、エミュレータおよびプログラム開発支援システム |
WO2011096016A1 (ja) * | 2010-02-05 | 2011-08-11 | 株式会社 東芝 | コンパイラ装置 |
JPWO2011096016A1 (ja) * | 2010-02-05 | 2013-06-06 | 株式会社東芝 | コンパイラ装置 |
JP7492655B1 (ja) | 2022-05-12 | 2024-05-29 | 之江実験室 | アレイ型解析プリミティブ構造に基づくバックエンドコンパイラの実現方法及び装置 |
Also Published As
Publication number | Publication date |
---|---|
JP3598090B2 (ja) | 2004-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4105264B2 (ja) | コンパイラ | |
US20060195828A1 (en) | Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator | |
CN110096439B (zh) | 一种面向solidity语言的测试用例生成方法 | |
Laguna et al. | Gpumixer: Performance-driven floating-point tuning for gpu scientific applications | |
Dahiya et al. | Black-box equivalence checking across compiler optimizations | |
Etessami et al. | Model checking of recursive probabilistic systems | |
Moosbrugger et al. | This is the moment for probabilistic loops | |
JP2008510230A (ja) | 非循環命令パターンの認識の方法 | |
Gupta et al. | Effective use of SMT solvers for program equivalence checking through invariant-sketching and query-decomposition | |
Lee et al. | Raive: Runtime assessment of floating-point instability by vectorization | |
JP2003150386A (ja) | コンパイラ装置及びコンパイル方法 | |
Sargsyan et al. | Scalable and accurate clones detection based on metrics for dependence graph | |
Olschanowsky et al. | Pir: Pmac's idiom recognizer | |
Sharma et al. | Sound bit-precise numerical domains | |
Jeuring et al. | Libraries for generic programming in Haskell | |
Giegerich et al. | Towards a discipline of dynamic programming | |
Szűgyi et al. | C++ metastring library and its applications | |
Grahne et al. | Design and implementation of a string database query language | |
Collberg | Automatic derivation of compiler machine descriptions | |
Ogata | Automatically extracting the correspondence between the natural language and the pseudo-code descriptions of instruction set manuals | |
Pavlatos et al. | Parallel hardware stochastic context-free parsers | |
Cohen et al. | Evaluating and improving recursive descent parsers | |
JP2003067195A (ja) | 最適化コンパイル方法及び最適化コンパイル装置 | |
Gupta et al. | Design of efficient Programming Language with Lexer using’$’-prefixed identifier | |
JP2701246B2 (ja) | コンパイラのベクトル化処理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040622 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040816 |
|
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: 20040907 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040910 |
|
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: 20080917 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080917 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090917 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090917 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100917 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |