JP3057904B2 - ベクトル化方式 - Google Patents
ベクトル化方式Info
- Publication number
- JP3057904B2 JP3057904B2 JP4152761A JP15276192A JP3057904B2 JP 3057904 B2 JP3057904 B2 JP 3057904B2 JP 4152761 A JP4152761 A JP 4152761A JP 15276192 A JP15276192 A JP 15276192A JP 3057904 B2 JP3057904 B2 JP 3057904B2
- Authority
- JP
- Japan
- Prior art keywords
- loop
- loop structure
- value
- information table
- incr
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Description
【0001】
【産業上の利用分野】本発明は高級言語で記述された原
始プログラムを入力してベクトル計算機に対する目的プ
ログラムを生成するコンパイラにおけるベクトル化方式
に関する。
始プログラムを入力してベクトル計算機に対する目的プ
ログラムを生成するコンパイラにおけるベクトル化方式
に関する。
【0002】
【従来の技術】ベクトル演算命令を持つ計算機(ベクト
ル計算機)においては、複数の規則的に並んだデータ列
(ベクトルデータ)間の演算をベクトル命令により一度
に高速に実行できる。FORTRAN言語のような高級
言語で記述された原始プログラムを翻訳してベクトル計
算機に対する目的プログラムを生成するコンパイラにお
いては、原始プログラムを解析して可能な限りベクトル
命令を用いて処理するような命令列を生成する。これを
ベクトル化と呼ぶ。ベクトル化は通常ループ構造に対し
て行われる。
ル計算機)においては、複数の規則的に並んだデータ列
(ベクトルデータ)間の演算をベクトル命令により一度
に高速に実行できる。FORTRAN言語のような高級
言語で記述された原始プログラムを翻訳してベクトル計
算機に対する目的プログラムを生成するコンパイラにお
いては、原始プログラムを解析して可能な限りベクトル
命令を用いて処理するような命令列を生成する。これを
ベクトル化と呼ぶ。ベクトル化は通常ループ構造に対し
て行われる。
【0003】ところで、ベクトル化を行う場合、作業用
配列が必要となる場合がある。
配列が必要となる場合がある。
【0004】例えば、ベクトル演算の結果を全てメモリ
上に格納する方式のベクトル計算機では、図2に示すF
ORTRAN言語で記述されたループをベクトル化する
場合、代入文の右辺の式 B(I)+C(I)*D(I) に対し、C(I)*D(I)の中間結果を格納するため
の作業用配列を用意する必要がある。
上に格納する方式のベクトル計算機では、図2に示すF
ORTRAN言語で記述されたループをベクトル化する
場合、代入文の右辺の式 B(I)+C(I)*D(I) に対し、C(I)*D(I)の中間結果を格納するため
の作業用配列を用意する必要がある。
【0005】一方、ベクトル演算の結果をベクトルレジ
スタに格納する方式のベクトル計算機においては、中間
結果はベクトルレジスタに保存できるので、上の例のよ
うな作業用配列を使う必要はない。しかし、ループ構造
中に、ベクトル処理可能な文とベクトル処理不可能な文
が混在しているため、ループ構造をベクトル処理可能な
部分と不可能な部分に分割して、ベクトル処理可能な部
分のみをベクトル化する方法をとる場合に作業用配列が
必要となることがある。
スタに格納する方式のベクトル計算機においては、中間
結果はベクトルレジスタに保存できるので、上の例のよ
うな作業用配列を使う必要はない。しかし、ループ構造
中に、ベクトル処理可能な文とベクトル処理不可能な文
が混在しているため、ループ構造をベクトル処理可能な
部分と不可能な部分に分割して、ベクトル処理可能な部
分のみをベクトル化する方法をとる場合に作業用配列が
必要となることがある。
【0006】例えば、FORTRAN言語で記述された
図3のようなループにおいて、変数Sはベクトル処理で
きる代入文で定義され、ベクトル処理できないWRI
TE文で参照されている。このままではループを分割
することはできないため、ループ全体がベクトル化でき
ない。しかし、変数Sに作業用の配列wを割り当てるこ
とにより図4のようにループの分割が行えるので、代入
文を含むループがベクトル化されるようになる。
図3のようなループにおいて、変数Sはベクトル処理で
きる代入文で定義され、ベクトル処理できないWRI
TE文で参照されている。このままではループを分割
することはできないため、ループ全体がベクトル化でき
ない。しかし、変数Sに作業用の配列wを割り当てるこ
とにより図4のようにループの分割が行えるので、代入
文を含むループがベクトル化されるようになる。
【0007】
【発明が解決しようとする課題】しかしながら、図2や
図3に示すFORTRAN言語で記述されたループで
は、ループの終値が変数Mであるため、作業用配列wの
大きさが実行時にならないとわからない。そのため、従
来技術では、実行時に必要になった場所で必要なだけの
作業領域を確保するような目的プログラムを生成する方
法や、コンパイル時に必要な作業用配列の大きさを仮定
し、その分だけ静的に領域を割り付ける方法がとられて
いた。
図3に示すFORTRAN言語で記述されたループで
は、ループの終値が変数Mであるため、作業用配列wの
大きさが実行時にならないとわからない。そのため、従
来技術では、実行時に必要になった場所で必要なだけの
作業領域を確保するような目的プログラムを生成する方
法や、コンパイル時に必要な作業用配列の大きさを仮定
し、その分だけ静的に領域を割り付ける方法がとられて
いた。
【0008】しかし、これらの方法で生成された目的プ
ログラムでは、実行時に必要な領域が確保できない場合
やコンパイル時に仮定した大きさより大きかった場合に
は、それ以上実行を続行することができないという問題
があった。
ログラムでは、実行時に必要な領域が確保できない場合
やコンパイル時に仮定した大きさより大きかった場合に
は、それ以上実行を続行することができないという問題
があった。
【0009】本発明はこのような事情に鑑みて為された
ものであり、その目的は、ループ長が実行時にならない
とわからないようなループが作業用配列を必要とする場
合でも、実行時のループ長に制限されずに支障なく実行
を続けることができる目的プログラムを生成するベクト
ル化方式を提供することにある。
ものであり、その目的は、ループ長が実行時にならない
とわからないようなループが作業用配列を必要とする場
合でも、実行時のループ長に制限されずに支障なく実行
を続けることができる目的プログラムを生成するベクト
ル化方式を提供することにある。
【0010】
【課題を解決するための手段】本発明は上記の目的を達
成するために、高級言語で書かれた原始プログラムを入
力してベクトル計算機に対する目的プログラムを生成す
るコンパイラのベクトル化方式において、以下のような
手段を備えている。
成するために、高級言語で書かれた原始プログラムを入
力してベクトル計算機に対する目的プログラムを生成す
るコンパイラのベクトル化方式において、以下のような
手段を備えている。
【0011】(1)原始プログラム中のループ構造を認
識し、該ループ構造に対する第1中間テキストを生成す
るとともに、該ループ構造の初期値,終値,増分値,ル
ープ長および指標変数を格納したループ情報テーブルを
生成するループ構造解析手段 (2)該ループ構造解析手段で求められたループ構造の
第1中間テキストを入力し、ループ構造をベクトル処理
で実行する第2中間テキストに変換するとともに、ベク
トル処理で実行するために必要となる作業用配列の情報
を格納した作業用配列情報テーブルを生成するベクトル
化手段 (3)前記ループ構造解析手段で生成されたループ情報
テーブルと前記ベクトル化手段で生成された作業用配列
情報テーブルを入力し、ループ構造の初期値、終値、増
分値の少なくとも1つが実行時に定まる変数であるが故
にループ長も実行時に定まる変数となる為、必要となる
作業用配列の大きさがコンパイル時には定まらないルー
プ構造を選択するループ構造選択手段 (4)該ループ構造選択手段で選択されたループ構造に
対し、前記ベクトル化手段で生成された第2中間テキス
トと作業用配列情報テーブルおよび前記ループ構造解析
手段で生成されたループ情報テーブルを入力し、当該ル
ープ構造の初期値をinit、終値をterm、増分値
をincr、ループ長をm、ループの各繰り返し毎に更
新される指標変数をIとするとき、当該ループ構造の前
にループ長m以下で確保可能な最大の要素数の作業用配
列を確保し且つ該確保した要素数を変数nに設定する処
理を行う中間テキストを挿入するとともに、ループ構造
を、ループの各繰り返し毎に更新される新たに追加した
指標変数iの初期値が0、終値がterm−incr、
増分値がn×incrの外側ループと、前記指標変数I
の初期値がinit+i,終値がmin{init+i
+(n−1)×incr,term},増分値がinc
rの内側ループとからなる2重ループ構造に変形し、ル
ープ中に現れる作業用配列のI番目の要素の定義,参照
を(I−init−i)/incr+1番目の要素への
定義,参照に置換した第3中間テキストを生成するルー
プ構造変形手段 (5)該ループ構造変形手段で生成された第3中間テキ
ストを入力して目的プログラムを生成する目的プログラ
ム生成手段
識し、該ループ構造に対する第1中間テキストを生成す
るとともに、該ループ構造の初期値,終値,増分値,ル
ープ長および指標変数を格納したループ情報テーブルを
生成するループ構造解析手段 (2)該ループ構造解析手段で求められたループ構造の
第1中間テキストを入力し、ループ構造をベクトル処理
で実行する第2中間テキストに変換するとともに、ベク
トル処理で実行するために必要となる作業用配列の情報
を格納した作業用配列情報テーブルを生成するベクトル
化手段 (3)前記ループ構造解析手段で生成されたループ情報
テーブルと前記ベクトル化手段で生成された作業用配列
情報テーブルを入力し、ループ構造の初期値、終値、増
分値の少なくとも1つが実行時に定まる変数であるが故
にループ長も実行時に定まる変数となる為、必要となる
作業用配列の大きさがコンパイル時には定まらないルー
プ構造を選択するループ構造選択手段 (4)該ループ構造選択手段で選択されたループ構造に
対し、前記ベクトル化手段で生成された第2中間テキス
トと作業用配列情報テーブルおよび前記ループ構造解析
手段で生成されたループ情報テーブルを入力し、当該ル
ープ構造の初期値をinit、終値をterm、増分値
をincr、ループ長をm、ループの各繰り返し毎に更
新される指標変数をIとするとき、当該ループ構造の前
にループ長m以下で確保可能な最大の要素数の作業用配
列を確保し且つ該確保した要素数を変数nに設定する処
理を行う中間テキストを挿入するとともに、ループ構造
を、ループの各繰り返し毎に更新される新たに追加した
指標変数iの初期値が0、終値がterm−incr、
増分値がn×incrの外側ループと、前記指標変数I
の初期値がinit+i,終値がmin{init+i
+(n−1)×incr,term},増分値がinc
rの内側ループとからなる2重ループ構造に変形し、ル
ープ中に現れる作業用配列のI番目の要素の定義,参照
を(I−init−i)/incr+1番目の要素への
定義,参照に置換した第3中間テキストを生成するルー
プ構造変形手段 (5)該ループ構造変形手段で生成された第3中間テキ
ストを入力して目的プログラムを生成する目的プログラ
ム生成手段
【0012】また、別の構成においては、上記(4)お
よび(5)のループ構造変形手段および目的プログラム
生成手段に代えて以下の手段を備えている。
よび(5)のループ構造変形手段および目的プログラム
生成手段に代えて以下の手段を備えている。
【0013】(4’)前記ベクトル化手段で生成された
第2中間テキストと作業用配列情報テーブルおよび前記
ループ構造解析手段で生成されたループ情報テーブルを
入力し、前記ループ構造選択手段で選択されたループ構
造を、当該ループ構造の初期値をinit、終値をte
rm、増分値をincr、ループ長をm、ループの各繰
り返し毎に更新される指標変数をIとし、且つ、コンパ
イラが適宜定める定数をLとすると、ループの各繰り返
し毎に更新される新たに追加した指標変数iの初期値が
0、終値がterm−incr、増分値がL×incr
の外側ループと、前記指標変数Iの初期値がinit+
i,終値がmin{init+i+(L−1)×inc
r,term},増分値がincrの内側ループとから
なる2重ループ構造に変形し、更にループ中に現れる作
業用配列要素の定義,参照を(I−init−i)/i
ncr+1番目の要素への定義,参照に置換した第3中
間テキストを生成するループ構造変形手段 (5’)該ループ構造変形手段で生成された第3中間テ
キストと前記ベクトル化手段で生成された作業用配列情
報テーブルを入力し、大きさLで作業用配列を割り付け
た目的プログラムを生成する目的プログラム生成手段
第2中間テキストと作業用配列情報テーブルおよび前記
ループ構造解析手段で生成されたループ情報テーブルを
入力し、前記ループ構造選択手段で選択されたループ構
造を、当該ループ構造の初期値をinit、終値をte
rm、増分値をincr、ループ長をm、ループの各繰
り返し毎に更新される指標変数をIとし、且つ、コンパ
イラが適宜定める定数をLとすると、ループの各繰り返
し毎に更新される新たに追加した指標変数iの初期値が
0、終値がterm−incr、増分値がL×incr
の外側ループと、前記指標変数Iの初期値がinit+
i,終値がmin{init+i+(L−1)×inc
r,term},増分値がincrの内側ループとから
なる2重ループ構造に変形し、更にループ中に現れる作
業用配列要素の定義,参照を(I−init−i)/i
ncr+1番目の要素への定義,参照に置換した第3中
間テキストを生成するループ構造変形手段 (5’)該ループ構造変形手段で生成された第3中間テ
キストと前記ベクトル化手段で生成された作業用配列情
報テーブルを入力し、大きさLで作業用配列を割り付け
た目的プログラムを生成する目的プログラム生成手段
【0014】
【作用】本発明のベクトル化方式においては、コンパイ
ラが高級言語で書かれた原始プログラムを入力してベク
トル計算機に対する目的プログラムを生成する際、ルー
プ構造解析手段が、原始プログラム中のループ構造を認
識し、そのループ構造に対する第1中間テキストを生成
するとともに、そのループ構造の初期値,終値,増分
値,ループ長および指標変数を格納したループ情報テー
ブルを生成し、次いでベクトル化手段が、ループ構造解
析手段で求められたループ構造の第1中間テキストを入
力し、ループ構造をベクトル処理で実行する第2中間テ
キストに変換するとともに、ベクトル処理で実行するた
めに必要となる作業用配列の情報を格納した作業用配列
情報テーブルを生成し、次いでループ構造選択手段が、
ループ構造解析手段で生成されたループ情報テーブルと
ベクトル化手段で生成された作業用配列情報テーブルを
入力し、ループ構造の初期値、終値、増分値の少なくと
も1つが実行時に定まる変数であるが故にループ長も実
行時に定まる変数となる為、必要となる作業用配列の大
きさがコンパイル時には定まらないループ構造を選択す
る。
ラが高級言語で書かれた原始プログラムを入力してベク
トル計算機に対する目的プログラムを生成する際、ルー
プ構造解析手段が、原始プログラム中のループ構造を認
識し、そのループ構造に対する第1中間テキストを生成
するとともに、そのループ構造の初期値,終値,増分
値,ループ長および指標変数を格納したループ情報テー
ブルを生成し、次いでベクトル化手段が、ループ構造解
析手段で求められたループ構造の第1中間テキストを入
力し、ループ構造をベクトル処理で実行する第2中間テ
キストに変換するとともに、ベクトル処理で実行するた
めに必要となる作業用配列の情報を格納した作業用配列
情報テーブルを生成し、次いでループ構造選択手段が、
ループ構造解析手段で生成されたループ情報テーブルと
ベクトル化手段で生成された作業用配列情報テーブルを
入力し、ループ構造の初期値、終値、増分値の少なくと
も1つが実行時に定まる変数であるが故にループ長も実
行時に定まる変数となる為、必要となる作業用配列の大
きさがコンパイル時には定まらないループ構造を選択す
る。
【0015】そして、手段(4),(5)を備える構成
においては、実行時にループ長分の要素数の作業用配列
が確保できればそのような要素数の作業用配列を確保し
て処理を行うように、またそれだけの要素数の作業用配
列が確保できなければ確保可能な最大の要素数の作業用
配列を確保して処理が続行できるようにするために、ル
ープ構造変形手段が、ループ構造選択手段で選択された
ループ構造に対し、ベクトル化手段で生成された第2中
間テキストと作業用配列情報テーブルおよびループ構造
解析手段で生成されたループ情報テーブルを入力し、当
該ループ構造の初期値をinit、終値をterm、増
分値をincr、ループ長をm、ループの各繰り返し毎
に更新される指標変数をIとするとき、当該ループ構造
の前にループ長m以下で確保可能な最大の要素数の作業
用配列を確保し且つ該確保した要素数を変数nに設定す
る処理を行う中間テキストを挿入するとともに、ループ
構造を、ループの各繰り返し毎に更新される新たに追加
した指標変数iの初期値が0、終値がterm−inc
r、増分値がn×incrの外側ループと、前記指標変
数Iの初期値がinit+i,終値がmin{init
+i+(n−1)×incr,term},増分値がi
ncrの内側ループとからなる2重ループ構造に変形
し、ループ中に現れる作業用配列のI番目の要素の定
義,参照を(I−init−i)/incr+1番目の
要素への定義,参照に置換した第3中間テキストを生成
し、目的プログラム生成手段が、ループ構造変形手段で
生成された第3中間テキストを入力して目的プログラム
を生成する。
においては、実行時にループ長分の要素数の作業用配列
が確保できればそのような要素数の作業用配列を確保し
て処理を行うように、またそれだけの要素数の作業用配
列が確保できなければ確保可能な最大の要素数の作業用
配列を確保して処理が続行できるようにするために、ル
ープ構造変形手段が、ループ構造選択手段で選択された
ループ構造に対し、ベクトル化手段で生成された第2中
間テキストと作業用配列情報テーブルおよびループ構造
解析手段で生成されたループ情報テーブルを入力し、当
該ループ構造の初期値をinit、終値をterm、増
分値をincr、ループ長をm、ループの各繰り返し毎
に更新される指標変数をIとするとき、当該ループ構造
の前にループ長m以下で確保可能な最大の要素数の作業
用配列を確保し且つ該確保した要素数を変数nに設定す
る処理を行う中間テキストを挿入するとともに、ループ
構造を、ループの各繰り返し毎に更新される新たに追加
した指標変数iの初期値が0、終値がterm−inc
r、増分値がn×incrの外側ループと、前記指標変
数Iの初期値がinit+i,終値がmin{init
+i+(n−1)×incr,term},増分値がi
ncrの内側ループとからなる2重ループ構造に変形
し、ループ中に現れる作業用配列のI番目の要素の定
義,参照を(I−init−i)/incr+1番目の
要素への定義,参照に置換した第3中間テキストを生成
し、目的プログラム生成手段が、ループ構造変形手段で
生成された第3中間テキストを入力して目的プログラム
を生成する。
【0016】また、手段(4’),(5’)を備える構
成においては、コンパイラが適宜定める定数L分の要素
数の作業用配列を静的に確保し、それだけの要素数で処
理が続行できるようにするために、ループ構造変形手段
が、ベクトル化手段で生成された第2中間テキストと作
業用配列情報テーブルおよびループ構造解析手段で生成
されたループ情報テーブルを入力し、ループ構造選択手
段で選択されたループ構造を、当該ループ構造の初期値
をinit、終値をterm、増分値をincr、ルー
プ長をm、ループの各繰り返し毎に更新される指標変数
をIとし、且つ、コンパイラが適宜定める定数をLとす
ると、ループの各繰り返し毎に更新される新たに追加し
た指標変数iの初期値が0、終値がterm−inc
r、増分値がL×incrの外側ループと、前記指標変
数Iの初期値がinit+i,終値がmin{init
+i+(L−1)×incr,term},増分値がi
ncrの内側ループとからなる2重ループ構造に変形
し、更にループ中に現れる作業用配列要素の定義,参照
を(I−init−i)/incr+1番目の要素への
定義,参照に置換した第3中間テキストを生成し、目的
プログラム生成手段が、ループ構造変形手段で生成され
た第3中間テキストとベクトル化手段で生成された作業
用配列情報テーブルを入力し、大きさLで作業用配列を
割り付けた目的プログラムを生成する。
成においては、コンパイラが適宜定める定数L分の要素
数の作業用配列を静的に確保し、それだけの要素数で処
理が続行できるようにするために、ループ構造変形手段
が、ベクトル化手段で生成された第2中間テキストと作
業用配列情報テーブルおよびループ構造解析手段で生成
されたループ情報テーブルを入力し、ループ構造選択手
段で選択されたループ構造を、当該ループ構造の初期値
をinit、終値をterm、増分値をincr、ルー
プ長をm、ループの各繰り返し毎に更新される指標変数
をIとし、且つ、コンパイラが適宜定める定数をLとす
ると、ループの各繰り返し毎に更新される新たに追加し
た指標変数iの初期値が0、終値がterm−inc
r、増分値がL×incrの外側ループと、前記指標変
数Iの初期値がinit+i,終値がmin{init
+i+(L−1)×incr,term},増分値がi
ncrの内側ループとからなる2重ループ構造に変形
し、更にループ中に現れる作業用配列要素の定義,参照
を(I−init−i)/incr+1番目の要素への
定義,参照に置換した第3中間テキストを生成し、目的
プログラム生成手段が、ループ構造変形手段で生成され
た第3中間テキストとベクトル化手段で生成された作業
用配列情報テーブルを入力し、大きさLで作業用配列を
割り付けた目的プログラムを生成する。
【0017】
【実施例】次に本発明の実施例について図面を参照して
詳細に説明する。
詳細に説明する。
【0018】図1を参照すると、本発明のベクトル化方
式を適用したコンパイラ2の一実施例は、ループ構造解
析手段3と、ベクトル化手段4と、ループ構造選択手段
5と、ループ構造変形手段6と、目的プログラム生成手
段7とから構成され、原始プログラム1を入力し、目的
プログラム8を生成する。
式を適用したコンパイラ2の一実施例は、ループ構造解
析手段3と、ベクトル化手段4と、ループ構造選択手段
5と、ループ構造変形手段6と、目的プログラム生成手
段7とから構成され、原始プログラム1を入力し、目的
プログラム8を生成する。
【0019】なお、図1において、9,11,13,1
0,12は、それぞれコンパイラ2が処理の過程で生成
する第1,第2,第3中間テキスト,ループ情報テーブ
ル,作業用配列情報テーブルである。
0,12は、それぞれコンパイラ2が処理の過程で生成
する第1,第2,第3中間テキスト,ループ情報テーブ
ル,作業用配列情報テーブルである。
【0020】以下、各部の機能および動作を説明する。
【0021】コンパイラ2は、高級言語で記述された原
始プログラム1を入力し、目的プログラム8を生成す
る。
始プログラム1を入力し、目的プログラム8を生成す
る。
【0022】このとき、ループ構造解析手段3は、原始
プログラム1中に現れるループ構造を認識し、そのルー
プ構造に対する第1中間テキスト9を生成するととも
に、そのループ構造の初期値init,終値term,
増分値incrおよびこれらから求められるループ長
m,それにループ構造の指標変数j=Iを格納したルー
プ情報テーブル10を生成する。
プログラム1中に現れるループ構造を認識し、そのルー
プ構造に対する第1中間テキスト9を生成するととも
に、そのループ構造の初期値init,終値term,
増分値incrおよびこれらから求められるループ長
m,それにループ構造の指標変数j=Iを格納したルー
プ情報テーブル10を生成する。
【0023】例えば図3のループ構造の場合、ループ構
造解析手段3は、初期値init=1,終値term=
M,増分値incr=1で、ループ長m=M,指標変数
j=Iというループ情報テーブル10を生成する。
造解析手段3は、初期値init=1,終値term=
M,増分値incr=1で、ループ長m=M,指標変数
j=Iというループ情報テーブル10を生成する。
【0024】次に、ベクトル化手段4は、ループ構造の
第1中間テキスト9を入力し、ループ構造をベクトル処
理で実行する第2中間テキスト11に変形する。また、
ベクトル化するために必要となる作業用配列の大きさや
種類などの情報を格納した作業用配列情報テーブル12
を生成する。
第1中間テキスト9を入力し、ループ構造をベクトル処
理で実行する第2中間テキスト11に変形する。また、
ベクトル化するために必要となる作業用配列の大きさや
種類などの情報を格納した作業用配列情報テーブル12
を生成する。
【0025】例えば図3のループ構造の場合、ベクトル
化手段4は図4に示すように、変数Sを作業用配列wで
置換して2つのループ構造に分割し、代入文を含むルー
プ構造をベクトル処理するような第2中間テキスト11
を生成する。また、作業用配列wに対し、置換前の変数
がSで、型は実数型であるといった情報を格納した作業
用配列情報テーブル12を生成する。
化手段4は図4に示すように、変数Sを作業用配列wで
置換して2つのループ構造に分割し、代入文を含むルー
プ構造をベクトル処理するような第2中間テキスト11
を生成する。また、作業用配列wに対し、置換前の変数
がSで、型は実数型であるといった情報を格納した作業
用配列情報テーブル12を生成する。
【0026】次に、ループ構造選択手段5は、ベクトル
化手段4で生成された作業用配列情報テーブル12およ
びループ構造解析手段3で生成されたループ情報テーブ
ル10を入力し、作業用配列が必要で、しかもループ長
が定数でないため実行時でないと作業用配列の大きさが
決定しないループ構造を変形処理を行う対象として選択
する。
化手段4で生成された作業用配列情報テーブル12およ
びループ構造解析手段3で生成されたループ情報テーブ
ル10を入力し、作業用配列が必要で、しかもループ長
が定数でないため実行時でないと作業用配列の大きさが
決定しないループ構造を変形処理を行う対象として選択
する。
【0027】図3の例は、ループ長が変数Mでコンパイ
ル時にループ長が不明で、しかも変数Sを置換するため
の作業用配列が必要なループ構造であるため、ループ構
造選択手段5によって処理対象として選択される。
ル時にループ長が不明で、しかも変数Sを置換するため
の作業用配列が必要なループ構造であるため、ループ構
造選択手段5によって処理対象として選択される。
【0028】次に、ループ構造変形手段6は、ループ構
造選択手段5で選択されたループ構造の中間テキストを
以下のように変形した第3中間テキスト13を生成す
る。
造選択手段5で選択されたループ構造の中間テキストを
以下のように変形した第3中間テキスト13を生成す
る。
【0029】先ず、ベクトル化手段4で生成された第2
中間テキスト11およびループ構造解析手段3で生成さ
れたループ情報テーブル10を入力し、ループ構造の直
前に、ループ長m以下で確保可能な最大の要素数の作業
用配列を確保し、確保した要素数を変数nに設定する処
理を行う中間テキストを挿入する。
中間テキスト11およびループ構造解析手段3で生成さ
れたループ情報テーブル10を入力し、ループ構造の直
前に、ループ長m以下で確保可能な最大の要素数の作業
用配列を確保し、確保した要素数を変数nに設定する処
理を行う中間テキストを挿入する。
【0030】次に、そのループ構造を、初期値0,終値
term−incr,増分値n×incrで、指標変数
がiの外側ループと、初期値init+i,終値min
{init+i+(n−1)×incr,term},
増分値incrで指標変数Iの内側ループとからなる2
重ループ構造に変形する。
term−incr,増分値n×incrで、指標変数
がiの外側ループと、初期値init+i,終値min
{init+i+(n−1)×incr,term},
増分値incrで指標変数Iの内側ループとからなる2
重ループ構造に変形する。
【0031】更に、ループ構造中に現れる作業用配列の
I番目の要素の定義,参照を(I−init−i)/i
ncr+1番目の要素への定義,参照に置換する。
I番目の要素の定義,参照を(I−init−i)/i
ncr+1番目の要素への定義,参照に置換する。
【0032】従って、図3に示したループ構造の場合、
図5に示すように、外側ループの初期値が0,終値がM
−1,増分値がn,指標変数がiで、内側ループの初期
値が1+i,終値がMIN(i+n,M),増分値が
1,指標変数がIの2重ループ構造に変形され、また、
作業用配列要素w(I)の定義,参照がw{(I−1−
i)/1+1}=w(I−i)の定義,参照に置換さ
れ、更にループの前に、ループ長M以下で確保可能な最
大の要素数の作業用配列wを確保しその要素数をnに設
定するサブルーチンgetwork(M,w,n)が挿
入された、第3中間テキスト13が生成される。
図5に示すように、外側ループの初期値が0,終値がM
−1,増分値がn,指標変数がiで、内側ループの初期
値が1+i,終値がMIN(i+n,M),増分値が
1,指標変数がIの2重ループ構造に変形され、また、
作業用配列要素w(I)の定義,参照がw{(I−1−
i)/1+1}=w(I−i)の定義,参照に置換さ
れ、更にループの前に、ループ長M以下で確保可能な最
大の要素数の作業用配列wを確保しその要素数をnに設
定するサブルーチンgetwork(M,w,n)が挿
入された、第3中間テキスト13が生成される。
【0033】最後に、目的プログラム生成手段7は、ル
ープ構造変形手段6で生成された第3中間テキスト13
を入力し、一連のベクトル命令およびスカラ命令を生成
して目的プログラム8を生成する。
ープ構造変形手段6で生成された第3中間テキスト13
を入力し、一連のベクトル命令およびスカラ命令を生成
して目的プログラム8を生成する。
【0034】以上のようにして生成された目的プログラ
ム8がベクトル計算機で実行されると、Mが決定する。
そして、決定されたM分の要素数の作業用配列wが確保
できれば、そのような作業用配列wを使用して処理が行
われる。また、Mより少ない要素数の作業用配列wしか
確保できなかった場合においても、多少処理の効率は低
下するが、確保できた要素数の作業用配列wを使用して
支障なく処理が続行される。
ム8がベクトル計算機で実行されると、Mが決定する。
そして、決定されたM分の要素数の作業用配列wが確保
できれば、そのような作業用配列wを使用して処理が行
われる。また、Mより少ない要素数の作業用配列wしか
確保できなかった場合においても、多少処理の効率は低
下するが、確保できた要素数の作業用配列wを使用して
支障なく処理が続行される。
【0035】以上の実施例は作業用配列を実行時に動的
に確保するものであったが、予め静的に確保するように
しても良い。
に確保するものであったが、予め静的に確保するように
しても良い。
【0036】図6はそのようなベクトル化方式を適用し
たコンパイラの構成図であり、図1と同一符号は同一部
分を示し、6’はループ構造変形手段、7’は目的プロ
グラム生成手段である。図6に示す実施例が図1に示す
実施例と相違するところは、ループ構造変形手段6’と
目的プログラム生成手段7’の点にあるので、以下その
点についてのみ説明する。
たコンパイラの構成図であり、図1と同一符号は同一部
分を示し、6’はループ構造変形手段、7’は目的プロ
グラム生成手段である。図6に示す実施例が図1に示す
実施例と相違するところは、ループ構造変形手段6’と
目的プログラム生成手段7’の点にあるので、以下その
点についてのみ説明する。
【0037】ループ構造変形手段6’は、ベクトル化手
段3で生成された第2中間テキスト11と作業用配列情
報テーブル12およびループ構造解析手段3で生成され
たループ情報テーブル10を入力し、ループ構造を、初
期値0,終値term−incr,増分値L×inc
r,指標変数iの外側ループと、初期値init+i,
終値min{init+i+(L−1)×incr,t
erm},増分値incr,指標変数Iの内側ループと
からなる2重ループ構造に変形し、更にループ構造中に
現れる作業用配列要素の定義,参照を(I−init−
i)/incr+1番目の要素への定義,参照に置換す
る。
段3で生成された第2中間テキスト11と作業用配列情
報テーブル12およびループ構造解析手段3で生成され
たループ情報テーブル10を入力し、ループ構造を、初
期値0,終値term−incr,増分値L×inc
r,指標変数iの外側ループと、初期値init+i,
終値min{init+i+(L−1)×incr,t
erm},増分値incr,指標変数Iの内側ループと
からなる2重ループ構造に変形し、更にループ構造中に
現れる作業用配列要素の定義,参照を(I−init−
i)/incr+1番目の要素への定義,参照に置換す
る。
【0038】ここで、Lはコンパイラ2が適宜定める定
数であり、好ましくはベクトルレジスタ長の大きさと等
しい値が用いられる。
数であり、好ましくはベクトルレジスタ長の大きさと等
しい値が用いられる。
【0039】また目的プログラム生成手段7’は、ルー
プ構造変形手段6’で生成された第3中間テキスト13
とベクトル化手段4で生成された作業用配列情報テーブ
ル12を入力し、大きさLで作業用配列を割り付けた目
的プログラムを生成する。
プ構造変形手段6’で生成された第3中間テキスト13
とベクトル化手段4で生成された作業用配列情報テーブ
ル12を入力し、大きさLで作業用配列を割り付けた目
的プログラムを生成する。
【0040】ベクトルレジスタを持つベクトル計算機に
おいては、1つのベクトル命令で処理できる要素数がベ
クトルレジスタの大きさに制限される。従って、作業用
配列の大きさもベクトルレジスタ長分だけ確保しておけ
ば充分である。そして、一般にベクトルレジスタ長は数
十〜数百程度なので、作業用配列の要素数もベクトルレ
ジスタ長で固定的に割り当てておいた方が実行時に領域
を確保するオーバヘッドもなくなる。
おいては、1つのベクトル命令で処理できる要素数がベ
クトルレジスタの大きさに制限される。従って、作業用
配列の大きさもベクトルレジスタ長分だけ確保しておけ
ば充分である。そして、一般にベクトルレジスタ長は数
十〜数百程度なので、作業用配列の要素数もベクトルレ
ジスタ長で固定的に割り当てておいた方が実行時に領域
を確保するオーバヘッドもなくなる。
【0041】図6の実施例はこのような点に着目したも
のであり、例えば図3に示したループ構造は、Lを10
とした場合、図7に示すように、外側ループの初期値が
0,終値がM−1,増分値が10,指標変数がiで、内
側ループの初期値が1+i,終値がMIN(i+10,
M),増分値が1,指標変数がIの2重ループ構造に変
形される。また、作業用配列要素w(I)の定義,参照
がw(I−i)の定義,参照に置換される。作業用配列
wはDIMENSION w(10)により大きさ10
で静的に割り当てられる。
のであり、例えば図3に示したループ構造は、Lを10
とした場合、図7に示すように、外側ループの初期値が
0,終値がM−1,増分値が10,指標変数がiで、内
側ループの初期値が1+i,終値がMIN(i+10,
M),増分値が1,指標変数がIの2重ループ構造に変
形される。また、作業用配列要素w(I)の定義,参照
がw(I−i)の定義,参照に置換される。作業用配列
wはDIMENSION w(10)により大きさ10
で静的に割り当てられる。
【0042】
【発明の効果】以上説明したように、本発明は、実行時
にループ長以下で確保可能な最大の要素数の作業用配列
を確保して処理が続行できるような、または、予め静的
に確保した要素長Lの作業用配列で処理が続行できるよ
うな目的プログラムを生成するので、ループ長が実行時
にならないとわからないようなループが作業用配列を必
要とする場合でも、実行時のループ長に制限されずに支
障なく実行を続けることができる目的プログラムを作成
できるという効果がある。
にループ長以下で確保可能な最大の要素数の作業用配列
を確保して処理が続行できるような、または、予め静的
に確保した要素長Lの作業用配列で処理が続行できるよ
うな目的プログラムを生成するので、ループ長が実行時
にならないとわからないようなループが作業用配列を必
要とする場合でも、実行時のループ長に制限されずに支
障なく実行を続けることができる目的プログラムを作成
できるという効果がある。
【図1】本発明のベクトル化方式の一実施例を適用した
コンパイラの構成図である。
コンパイラの構成図である。
【図2】FORTRAN言語で記述されたループ構造の
例を示す図である。
例を示す図である。
【図3】FORTRAN言語で記述された別のループ構
造の例を示す図である。
造の例を示す図である。
【図4】図3のループ構造を作業用配列wを用いて分割
したループ構造の例を示す図である。
したループ構造の例を示す図である。
【図5】図3のループ構造を図1の実施例のベクトル化
方式で変形した例を示す図である。
方式で変形した例を示す図である。
【図6】本発明のベクトル化方式の別の実施例を適用し
たコンパイラの構成図である。
たコンパイラの構成図である。
【図7】図3のループ構造を図6の実施例のベクトル化
方式で変形した例を示す図である。
方式で変形した例を示す図である。
1…原始プログラム 2…コンパイラ 3…ループ構造解析手段 4…ベクトル化手段 5…ループ構造選択手段 6,6’…ループ構造変形手段 7,7’…目的プログラム生成手段 8…目的プログラム 9…第1中間テキスト 10…ループ情報テーブル 11…第2中間テキスト 12…作業用配列情報テキスト 13…第3中間テキスト
Claims (2)
- 【請求項1】 高級言語で書かれた原始プログラムを入
力してベクトル計算機に対する目的プログラムを生成す
るコンパイラのベクトル化方式において、 原始プログラム中のループ構造を認識し、該ループ構造
に対する第1中間テキストを生成するとともに、該ルー
プ構造の初期値,終値,増分値,ループ長および指標変
数を格納したループ情報テーブルを生成するループ構造
解析手段と、 該ループ構造解析手段で求められたループ構造の第1中
間テキストを入力し、ループ構造をベクトル処理で実行
する第2中間テキストに変換するとともに、ベクトル処
理で実行するために必要となる作業用配列の情報を格納
した作業用配列情報テーブルを生成するベクトル化手段
と、 前記ループ構造解析手段で生成されたループ情報テーブ
ルと前記ベクトル化手段で生成された作業用配列情報テ
ーブルを入力し、ループ構造の初期値、終値、増分値の
少なくとも1つが実行時に定まる変数であるが故にルー
プ長も実行時に定まる変数となる為、必要となる作業用
配列の大きさがコンパイル時には定まらないループ構造
を選択するループ構造選択手段と、 該ループ構造選択手段で選択されたループ構造に対し、
前記ベクトル化手段で生成された第2中間テキストと作
業用配列情報テーブルおよび前記ループ構造解析手段で
生成されたループ情報テーブルを入力し、当該ループ構
造の初期値をinit、終値をterm、増分値をin
cr、ループ長をm、ループの各繰り返し毎に更新され
る指標変数をIとするとき、当該ループ構造の前にルー
プ長m以下で確保可能な最大の要素数の作業用配列を確
保し且つ該確保した要素数を変数nに設定する処理を行
う中間テキストを挿入するとともに、ループ構造を、ル
ープの各繰り返し毎に更新される新たに追加した指標変
数iの初期値が0、終値がterm−incr、増分値
がn×incrの外側ループと、前記指標変数Iの初期
値がinit+i,終値がmin{init+i+(n
−1)×incr,term},増分値がincrの内
側ループとからなる2重ループ構造に変形し、ループ中
に現れる作業用配列のI番目の要素の定義,参照を(I
−init−i)/incr+1番目の要素への定義,
参照に置換した第3中間テキストを生成するループ構造
変形手段と、 該ループ構造変形手段で生成された第3中間テキストを
入力して目的プログラムを生成する目的プログラム生成
手段とを具備したことを特徴とするベクトル化方式。 - 【請求項2】 高級言語で書かれた原始プログラムを入
力してベクトル計算機に対する目的プログラムを生成す
るコンパイラのベクトル化方式において、 原始プログラム中のループ構造を認識し、該ループ構造
に対する第1中間テキストを生成するとともに、該ルー
プ構造の初期値,終値,増分値,ループ長および指標変
数を格納したループ情報テーブルを生成するループ構造
解析手段と、 該ループ構造解析手段で求められたループ構造の第1中
間テキストを入力し、ループ構造をベクトル処理で実行
する第2中間テキストに変換するとともに、ベクトル処
理で実行するために必要となる作業用配列の情報を格納
した作業用配列情報テーブルを生成するベクトル化手段
と、 前記ループ構造解析手段で生成されたループ情報テーブ
ルと前記ベクトル化手段で生成された作業用配列情報テ
ーブルを入力し、ループ構造の初期値、終値、増分値の
少なくとも1つが実行時に定まる変数であるが故にルー
プ長も実行時に定まる変数となる為、必要となる作業用
配列の大きさがコンパイル時には定まらないループ構造
を選択するループ構造選択手段と、 前記ベクトル化手段で生成された第2中間テキストと作
業用配列情報テーブルおよび前記ループ構造解析手段で
生成されたループ情報テーブルを入力し、前記ループ構
造選択手段で選択されたループ構造を、当該ループ構造
の初期値をinit、終値をterm、増分値をinc
r、ループ長をm、ループの各繰り返し毎に更新される
指標変数をIとし、且つ、コンパイラが適宜定める定数
をLとすると、ループの各繰り返し毎に更新される新た
に追加した指標変数iの初期値が0、終値がterm−
incr、増分値がL×incrの外側ループと、前記
指標変数Iの初期値がinit+i,終値がmin{i
nit+i+(L−1)×incr,term},増分
値がincrの内側ループとからなる2重ループ構造に
変形し、更にループ中に現れる作業用配列要素の定義,
参照を(I−init−i)/incr+1番目の要素
への定義,参照に置換した第3中間テキストを生成する
ループ構造変形手段と、 該ループ構造変形手段で生成された第3中間テキストと
前記ベクトル化手段で生成された作業用配列情報テーブ
ルを入力し、大きさLで作業用配列を割り付けた目的プ
ログラムを生成する目的プログラム生成手段とを具備し
たことを特徴とするベクトル化方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4152761A JP3057904B2 (ja) | 1992-05-20 | 1992-05-20 | ベクトル化方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP4152761A JP3057904B2 (ja) | 1992-05-20 | 1992-05-20 | ベクトル化方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH05324346A JPH05324346A (ja) | 1993-12-07 |
JP3057904B2 true JP3057904B2 (ja) | 2000-07-04 |
Family
ID=15547576
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP4152761A Expired - Fee Related JP3057904B2 (ja) | 1992-05-20 | 1992-05-20 | ベクトル化方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3057904B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009070070A (ja) * | 2007-09-12 | 2009-04-02 | Nec Corp | コンパイラ及びコンパイル方法 |
-
1992
- 1992-05-20 JP JP4152761A patent/JP3057904B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH05324346A (ja) | 1993-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4833606A (en) | Compiling method for vectorizing multiple do-loops in source program | |
Caine et al. | PDL: A tool for software design | |
US8839212B2 (en) | Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations | |
Bischof et al. | Combining source transformation and operator overloading techniques to compute derivatives for MATLAB programs | |
US5790760A (en) | Program generating apparatus and method thereof | |
US4821181A (en) | Method for converting a source program of high level language statement into an object program for a vector processor | |
US5287510A (en) | Method for improving the efficiency of arithmetic code generation in an optimizing compiler using machine independent update instruction generation | |
EP0467629B1 (en) | A loop compiler method & apparatus for a data processing system | |
JP3057904B2 (ja) | ベクトル化方式 | |
Brode | Precompilation of Fortran programs to facilitate array processing | |
Colbrook et al. | The retrospective introduction of abstraction into software | |
JP3196625B2 (ja) | 並列化コンパイル方式 | |
JPH0594470A (ja) | ベクトル化方式 | |
JPH03135630A (ja) | 命令スケジューリング方式 | |
JP3658771B2 (ja) | コンパイラ装置 | |
JP2701246B2 (ja) | コンパイラのベクトル化処理方式 | |
JP2533938B2 (ja) | ベクトル演算処理方式 | |
JPH0512033A (ja) | 並列化コンパイル方式 | |
JPH05257707A (ja) | コンパイル方式 | |
JPH0264766A (ja) | ベクトル化処理方式 | |
JPH0748205B2 (ja) | ベクトル化処理方式 | |
JPH02109135A (ja) | Do形並び入力変換方式 | |
JPH04295960A (ja) | コンパイラのベクトル化処理方式 | |
JPH0713962A (ja) | コンパイラ装置 | |
JPH0291766A (ja) | 制御依存解析方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |