JPH0594470A - ベクトル化方式 - Google Patents
ベクトル化方式Info
- Publication number
- JPH0594470A JPH0594470A JP3278322A JP27832291A JPH0594470A JP H0594470 A JPH0594470 A JP H0594470A JP 3278322 A JP3278322 A JP 3278322A JP 27832291 A JP27832291 A JP 27832291A JP H0594470 A JPH0594470 A JP H0594470A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- loop structure
- intermediate text
- information table
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
(57)【要約】
【目的】 x(i)=f(x(i−n))の形の式を含
むループをベクトル化して、ベクトル計算機上で高速に
実行できる目的プログラムを生成する。 【構成】 x(i)=f(x(i−1))の形をした漸
化式のベクトル命令をもつベクトル計算機に対して、高
級言語で記述された原始プログラム41を入力し目的プ
ログラム48を生成するコンパイラ42において、ルー
プ構造選択手段44は初期値init,終値term,
増分値incrのループ構造のうちx(i)=f(x
(i−n))の形の代入文を含み、しかもnがincr
の倍数であるようなループを選択し、ループ構造変形手
段45は選択されたループ構造を初期値0,終値n/i
ncr,増分値1,ループ制御変数iの外側ループと初
期値init+i,終値term,増分値nの内側ルー
プとからなる2重ループ構造に変形し、ベクトル化手段
46は変形された2重ループの内側ループをベクトル化
する。
むループをベクトル化して、ベクトル計算機上で高速に
実行できる目的プログラムを生成する。 【構成】 x(i)=f(x(i−1))の形をした漸
化式のベクトル命令をもつベクトル計算機に対して、高
級言語で記述された原始プログラム41を入力し目的プ
ログラム48を生成するコンパイラ42において、ルー
プ構造選択手段44は初期値init,終値term,
増分値incrのループ構造のうちx(i)=f(x
(i−n))の形の代入文を含み、しかもnがincr
の倍数であるようなループを選択し、ループ構造変形手
段45は選択されたループ構造を初期値0,終値n/i
ncr,増分値1,ループ制御変数iの外側ループと初
期値init+i,終値term,増分値nの内側ルー
プとからなる2重ループ構造に変形し、ベクトル化手段
46は変形された2重ループの内側ループをベクトル化
する。
Description
【0001】
【産業上の利用分野】本発明は、高級言語で書かれた原
始プログラムを入力してベクトル計算機に対する目的プ
ログラムを生成するコンパイラに関し、特に、ループ構
造を高速に実行するようなベクトル命令列を生成するベ
クトル化方式に関する。
始プログラムを入力してベクトル計算機に対する目的プ
ログラムを生成するコンパイラに関し、特に、ループ構
造を高速に実行するようなベクトル命令列を生成するベ
クトル化方式に関する。
【0002】
【従来の技術】ベクトル演算命令をもつ計算機(ベクト
ル計算機)においては、複数の規則的に並んだデータ列
(ベクトルデータ)間の演算をベクトル命令により一度
に高速に実行できる。そこでFORTRAN言語のよう
な高級言語で記述された原始プログラムを翻訳してベク
トル計算機に対する目的プログラムを生成するコンパイ
ラにおいては、原始プログラムを解析して可能なかぎり
ベクトル命令を用いて処理するような命令列を生成す
る。これをベクトル化と呼ぶ。ベクトル化は通常ループ
構造に対して行われる。
ル計算機)においては、複数の規則的に並んだデータ列
(ベクトルデータ)間の演算をベクトル命令により一度
に高速に実行できる。そこでFORTRAN言語のよう
な高級言語で記述された原始プログラムを翻訳してベク
トル計算機に対する目的プログラムを生成するコンパイ
ラにおいては、原始プログラムを解析して可能なかぎり
ベクトル命令を用いて処理するような命令列を生成す
る。これをベクトル化と呼ぶ。ベクトル化は通常ループ
構造に対して行われる。
【0003】一般に、或るループ構造がベクトル化可能
かどうかは、そのループ構造中に現れる配列の定義参照
関係がベクトル化した場合も保存されるかどうかにより
決まる。そして、次の4つの条件のうちのどれかを満た
していれば、定義参照関係がベクトル化に適合すること
が知られている。
かどうかは、そのループ構造中に現れる配列の定義参照
関係がベクトル化した場合も保存されるかどうかにより
決まる。そして、次の4つの条件のうちのどれかを満た
していれば、定義参照関係がベクトル化に適合すること
が知られている。
【0004】その配列がループ中のどこでも定義され
ていない。 その配列の或る要素に対する定義参照はすべてループ
の同一の繰り返し回に閉じている。 その配列の或る要素がループの異なる繰り返しにおい
てそれぞれ定義されるか定義かつ参照される場合、その
定義あるいは参照の原始プログラム上での出現順序とル
ープの繰り返しの進行における出現順序とが一致してい
る。 その配列の或る要素がループ中で定義されていると
き、定義されている配列のループの他の場所で定義また
は参照されている同一配列の要素との間に重なりがな
い。
ていない。 その配列の或る要素に対する定義参照はすべてループ
の同一の繰り返し回に閉じている。 その配列の或る要素がループの異なる繰り返しにおい
てそれぞれ定義されるか定義かつ参照される場合、その
定義あるいは参照の原始プログラム上での出現順序とル
ープの繰り返しの進行における出現順序とが一致してい
る。 その配列の或る要素がループ中で定義されていると
き、定義されている配列のループの他の場所で定義また
は参照されている同一配列の要素との間に重なりがな
い。
【0005】なお、条件からを満たさないような配
列要素の定義参照関係を後方依存関係があるという。
列要素の定義参照関係を後方依存関係があるという。
【0006】そこで、従来は、ループ構造がベクトル化
可能かどうかを上記4つの条件に照らして判断し、可能
と判断したループ構造についてベクトル化を行ってい
た。
可能かどうかを上記4つの条件に照らして判断し、可能
と判断したループ構造についてベクトル化を行ってい
た。
【0007】
【発明が解決しようとする課題】したがって、たとえ
ば、図2に示すFORTRAN言語で記述されたループ
では、 ・配列A,Bとも定義されているため条件は不成立。 ・配列要素B(n)は、図2の代入文aでn回目の繰り
返しのとき定義され、図2の代入文bでn−10回目の
繰り返しのとき参照されているため、条件は不成立。 ・配列要素B(n)が、n回目の繰り返しのとき図2の
代入文aで参照され、n−10回目の繰り返しのとき図
2の代入文bで定義されるので定義参照の原始プログラ
ム上での出現順序とループの繰り返しの進行における出
現順序とが逆になっており、条件は不成立。 ・配列Bの定義される要素は11から110番目、参照
される要素は1から100番目である。したがって、1
1から100番目までの要素が定義参照されるため、条
件は不成立。 となり、条件からのすべてが成り立たないため、従
来技術では図2のようなループはベクトル化できないと
いう問題点があった。
ば、図2に示すFORTRAN言語で記述されたループ
では、 ・配列A,Bとも定義されているため条件は不成立。 ・配列要素B(n)は、図2の代入文aでn回目の繰り
返しのとき定義され、図2の代入文bでn−10回目の
繰り返しのとき参照されているため、条件は不成立。 ・配列要素B(n)が、n回目の繰り返しのとき図2の
代入文aで参照され、n−10回目の繰り返しのとき図
2の代入文bで定義されるので定義参照の原始プログラ
ム上での出現順序とループの繰り返しの進行における出
現順序とが逆になっており、条件は不成立。 ・配列Bの定義される要素は11から110番目、参照
される要素は1から100番目である。したがって、1
1から100番目までの要素が定義参照されるため、条
件は不成立。 となり、条件からのすべてが成り立たないため、従
来技術では図2のようなループはベクトル化できないと
いう問題点があった。
【0008】また、たとえば、図5に示すFORTRA
N言語で記述されたループでも、配列Aの第i番目の要
素は、図5の代入文cで、第i回目の繰り返しで定義さ
れ第i+1回目の繰り返しで参照されているため、条件
からのどれも満たされていないので原則としてベク
トル化はできない。
N言語で記述されたループでも、配列Aの第i番目の要
素は、図5の代入文cで、第i回目の繰り返しで定義さ
れ第i+1回目の繰り返しで参照されているため、条件
からのどれも満たされていないので原則としてベク
トル化はできない。
【0009】但し、この図5の例のように配列の各要素
の値がその配列のひとつ前の要素の値に依存するような
漸化式は科学技術計算においてはよく現れるため、ベク
トル計算機のなかには漸化式をベクトル処理できるよう
な特別の命令を備えたものが多い。したがって、このよ
うな漸化式のベクトル命令を備えたベクトル計算機用の
目的プログラムを生成するコンパイラでは、ループ中の
漸化式のパターンを認識することにより図5のようなル
ープもベクトル化していた。
の値がその配列のひとつ前の要素の値に依存するような
漸化式は科学技術計算においてはよく現れるため、ベク
トル計算機のなかには漸化式をベクトル処理できるよう
な特別の命令を備えたものが多い。したがって、このよ
うな漸化式のベクトル命令を備えたベクトル計算機用の
目的プログラムを生成するコンパイラでは、ループ中の
漸化式のパターンを認識することにより図5のようなル
ープもベクトル化していた。
【0010】しかしながら、図6に示す代入文dを含む
FORTRAN言語で記述されたループでは、配列Aの
各要素は、ひとつ前の要素ではなく、図7(a)に示す
ように3つ前の要素の値に依存している。したがって、
漸化式のパターンには当てはまらないため従来技術では
図6のようなループはベクトル化できないという問題点
があった。
FORTRAN言語で記述されたループでは、配列Aの
各要素は、ひとつ前の要素ではなく、図7(a)に示す
ように3つ前の要素の値に依存している。したがって、
漸化式のパターンには当てはまらないため従来技術では
図6のようなループはベクトル化できないという問題点
があった。
【0011】そこで本発明の目的は、従来技術ではベク
トル化できなかった図2,図6のようなループをベクト
ル化することができるベクトル化方式を提供することに
ある。
トル化できなかった図2,図6のようなループをベクト
ル化することができるベクトル化方式を提供することに
ある。
【0012】即ち、たとえば図2のループは、1から1
0,11から20,……,91から100の各繰り返し
に分割すると、分割されたそれぞれの繰り返し間では配
列Bの定義される要素と参照される要素の間に重なりが
ないため、それらは別個にベクトル化可能である。本発
明のベクトル化方式は、このような変形を自動的に行う
ことにより、従来技術ではベクトル化できなかったルー
プをベクトル化することにより、より実行性能の高い目
的プログラムを生成することを可能にするものである。
0,11から20,……,91から100の各繰り返し
に分割すると、分割されたそれぞれの繰り返し間では配
列Bの定義される要素と参照される要素の間に重なりが
ないため、それらは別個にベクトル化可能である。本発
明のベクトル化方式は、このような変形を自動的に行う
ことにより、従来技術ではベクトル化できなかったルー
プをベクトル化することにより、より実行性能の高い目
的プログラムを生成することを可能にするものである。
【0013】また、たとえば図6のループ構造が実際に
行う処理は、図7(b)に示すような配列Aの1,4,
7,10、2,5,8,11、3,6,9,12の3組
の要素列に対する漸化式演算と同等であり、これらはベ
クトル化可能である。本発明のベクトル化方式は、この
ような変形を自動的に行うことにより、従来技術ではベ
クトル化できなかったループをベクトル化することによ
り、より実行性能の高い目的プログラムを生成すること
を可能にするものである。
行う処理は、図7(b)に示すような配列Aの1,4,
7,10、2,5,8,11、3,6,9,12の3組
の要素列に対する漸化式演算と同等であり、これらはベ
クトル化可能である。本発明のベクトル化方式は、この
ような変形を自動的に行うことにより、従来技術ではベ
クトル化できなかったループをベクトル化することによ
り、より実行性能の高い目的プログラムを生成すること
を可能にするものである。
【0014】
【課題を解決するための手段】図2のようなループのベ
クトル化を可能にする本発明のベクトル化方式は、高級
言語で書かれた原始プログラムを入力し、ベクトル計算
機に対する目的プログラムを生成するコンパイラにおい
て、原始プログラム中のループ構造を認識し、該ループ
構造に対する第1中間テキストを生成するとともに、該
ループの初期値init,終値term,増分値inc
rの情報を格納したループ情報テーブルを生成するルー
プ構造解析手段と、該ループ構造解析手段で求められた
前記ループ構造の第1中間テキストおよびループ情報テ
ーブルを入力し、ループ構造内に現れる配列の定義・参
照関係を解析し、配列の定義参照関係の情報を格納した
定義参照テーブルを生成する定義参照関係解析手段と、
該定義参照関係解析手段で求められた定義参照テーブル
を入力し、前記ループ構造中に後方依存関係のある配列
があった場合、該ループ構造中で該配列の各要素が参照
される繰り返し回と定義される繰り返し回の差nを求
め、その差nの値がループ構造内で一定であるループ構
造を選択するとともに、nを格納したループ変形情報テ
ーブルを生成するループ構造選択手段と、該ループ構造
選択手段で選択されたループ構造について前記ループ構
造解析手段で生成された第1中間テキストおよびループ
情報テーブルと、前記ループ構造選択手段で生成された
ループ変形情報テーブルとを入力し、前記ループ構造
を、初期値init,終値term,増分値incr×
nの指標変数iをもつ外側ループと元のループ構造のi
からmin(i+(n−1)×incr,term)の
繰り返しを実行する内側ループとからなる2重ループ構
造に変形した第2中間テキストを生成するループ構造変
形手段と、該ループ構造変形手段により生成された第2
中間テキストを入力し、2重ループの内側ループ構造を
ベクトル処理を行う第3中間テキストに変形するベクト
ル化手段と、該ベクトル化手段で生成された第3中間テ
キストを入力し一連のベクトル命令およびスカラ命令列
を生成する命令生成手段とを備えている。
クトル化を可能にする本発明のベクトル化方式は、高級
言語で書かれた原始プログラムを入力し、ベクトル計算
機に対する目的プログラムを生成するコンパイラにおい
て、原始プログラム中のループ構造を認識し、該ループ
構造に対する第1中間テキストを生成するとともに、該
ループの初期値init,終値term,増分値inc
rの情報を格納したループ情報テーブルを生成するルー
プ構造解析手段と、該ループ構造解析手段で求められた
前記ループ構造の第1中間テキストおよびループ情報テ
ーブルを入力し、ループ構造内に現れる配列の定義・参
照関係を解析し、配列の定義参照関係の情報を格納した
定義参照テーブルを生成する定義参照関係解析手段と、
該定義参照関係解析手段で求められた定義参照テーブル
を入力し、前記ループ構造中に後方依存関係のある配列
があった場合、該ループ構造中で該配列の各要素が参照
される繰り返し回と定義される繰り返し回の差nを求
め、その差nの値がループ構造内で一定であるループ構
造を選択するとともに、nを格納したループ変形情報テ
ーブルを生成するループ構造選択手段と、該ループ構造
選択手段で選択されたループ構造について前記ループ構
造解析手段で生成された第1中間テキストおよびループ
情報テーブルと、前記ループ構造選択手段で生成された
ループ変形情報テーブルとを入力し、前記ループ構造
を、初期値init,終値term,増分値incr×
nの指標変数iをもつ外側ループと元のループ構造のi
からmin(i+(n−1)×incr,term)の
繰り返しを実行する内側ループとからなる2重ループ構
造に変形した第2中間テキストを生成するループ構造変
形手段と、該ループ構造変形手段により生成された第2
中間テキストを入力し、2重ループの内側ループ構造を
ベクトル処理を行う第3中間テキストに変形するベクト
ル化手段と、該ベクトル化手段で生成された第3中間テ
キストを入力し一連のベクトル命令およびスカラ命令列
を生成する命令生成手段とを備えている。
【0015】また、図6のようなループのベクトル化を
可能にする本発明のベクトル化方式は、高級言語で書か
れた原始プログラムを入力し、x(i)=f(x(i−
1))の形式の漸化式を処理するベクトル命令をもつベ
クトル計算機に対する目的プログラムを生成するコンパ
イラにおいて、原始プログラム中のループ構造を認識
し、該ループ構造に対する第1中間テキストを生成する
とともに、該ループの初期値init,終値term,
増分値incrの情報を格納したループ情報テーブルを
生成するループ構造解析手段と、該ループ構造解析手段
で求められた前記ループ構造の第1中間テキストおよび
ループ情報テーブルを入力し、x(i)=f(x(i−
n))の形式の式を含みしかもnが前記増分値incr
の倍数となっているループ構造を選択するとともにnを
格納したループ変形情報テーブルを生成するループ構造
選択手段と、該ループ構造選択手段で選択されたループ
構造について前記ループ構造解析手段で生成された第1
中間テキストおよびループ情報テーブルと、前記ループ
構造選択手段で生成されたループ変形情報テーブルとを
入力し、該ループ構造を、初期値0,終値n/inc
r,増分値1で指標変数iをもつ外側ループと初期値i
nit+i,終値term,増分値nの内側ループとか
らなる2重ループ構造に変形した第2中間テキストを生
成するループ構造変形手段と、該ループ構造変形手段に
より生成された第2中間テキストを入力し、2重ループ
の内側ループ構造をベクトル処理を行う第3中間テキス
トに変形するベクトル化手段と、該ベクトル化手段で生
成された第3中間テキストを入力し一連のベクトル命令
およびスカラ命令列を生成する命令生成手段とを備えて
いる。
可能にする本発明のベクトル化方式は、高級言語で書か
れた原始プログラムを入力し、x(i)=f(x(i−
1))の形式の漸化式を処理するベクトル命令をもつベ
クトル計算機に対する目的プログラムを生成するコンパ
イラにおいて、原始プログラム中のループ構造を認識
し、該ループ構造に対する第1中間テキストを生成する
とともに、該ループの初期値init,終値term,
増分値incrの情報を格納したループ情報テーブルを
生成するループ構造解析手段と、該ループ構造解析手段
で求められた前記ループ構造の第1中間テキストおよび
ループ情報テーブルを入力し、x(i)=f(x(i−
n))の形式の式を含みしかもnが前記増分値incr
の倍数となっているループ構造を選択するとともにnを
格納したループ変形情報テーブルを生成するループ構造
選択手段と、該ループ構造選択手段で選択されたループ
構造について前記ループ構造解析手段で生成された第1
中間テキストおよびループ情報テーブルと、前記ループ
構造選択手段で生成されたループ変形情報テーブルとを
入力し、該ループ構造を、初期値0,終値n/inc
r,増分値1で指標変数iをもつ外側ループと初期値i
nit+i,終値term,増分値nの内側ループとか
らなる2重ループ構造に変形した第2中間テキストを生
成するループ構造変形手段と、該ループ構造変形手段に
より生成された第2中間テキストを入力し、2重ループ
の内側ループ構造をベクトル処理を行う第3中間テキス
トに変形するベクトル化手段と、該ベクトル化手段で生
成された第3中間テキストを入力し一連のベクトル命令
およびスカラ命令列を生成する命令生成手段とを備えて
いる。
【0016】
【作用】図2のようなループのベクトル化を可能にする
本発明のベクトル化方式においては、高級言語で書かれ
た原始プログラムを入力し、ベクトル計算機に対する目
的プログラムを生成する際、ループ構造解析手段が、原
始プログラム中のループ構造を認識し、該ループ構造に
対する第1中間テキストを生成するとともに、該ループ
の初期値init,終値term,増分値incrの情
報を格納したループ情報テーブルを生成し、定義参照関
係解析手段が、ループ構造解析手段で求められた前記ル
ープ構造の第1中間テキストおよびループ情報テーブル
を入力し、ループ構造内に現れる配列の定義・参照関係
を解析し、配列の定義参照関係の情報を格納した定義参
照テーブルを生成し、ループ構造選択手段が、定義参照
関係解析手段で求められた定義参照テーブルを入力し、
前記ループ構造中に後方依存関係のある配列があった場
合、該ループ構造中で該配列の各要素が参照される繰り
返し回と定義される繰り返し回の差nを求め、その差n
の値がループ構造内で一定であるループ構造を選択する
とともに、nを格納したループ変形情報テーブルを生成
し、ループ構造変形手段が、ループ構造選択手段で選択
されたループ構造について前記ループ構造解析手段で生
成された第1中間テキストおよびループ情報テーブル
と、前記ループ構造選択手段で生成されたループ変形情
報テーブルとを入力し、前記ループ構造を、初期値in
it,終値term,増分値incr×nの指標変数i
をもつ外側ループと元のループ構造のiからmin(i
+(n−1)×incr,term)の繰り返しを実行
する内側ループとからなる2重ループ構造に変形した第
2中間テキストを生成し、ベクトル化手段が、ループ構
造変形手段により生成された第2中間テキストを入力
し、2重ループの内側ループ構造をベクトル処理を行う
第3中間テキストに変形し、命令生成手段が、ベクトル
化手段で生成された第3中間テキストを入力し一連のベ
クトル命令およびスカラ命令列を生成する。
本発明のベクトル化方式においては、高級言語で書かれ
た原始プログラムを入力し、ベクトル計算機に対する目
的プログラムを生成する際、ループ構造解析手段が、原
始プログラム中のループ構造を認識し、該ループ構造に
対する第1中間テキストを生成するとともに、該ループ
の初期値init,終値term,増分値incrの情
報を格納したループ情報テーブルを生成し、定義参照関
係解析手段が、ループ構造解析手段で求められた前記ル
ープ構造の第1中間テキストおよびループ情報テーブル
を入力し、ループ構造内に現れる配列の定義・参照関係
を解析し、配列の定義参照関係の情報を格納した定義参
照テーブルを生成し、ループ構造選択手段が、定義参照
関係解析手段で求められた定義参照テーブルを入力し、
前記ループ構造中に後方依存関係のある配列があった場
合、該ループ構造中で該配列の各要素が参照される繰り
返し回と定義される繰り返し回の差nを求め、その差n
の値がループ構造内で一定であるループ構造を選択する
とともに、nを格納したループ変形情報テーブルを生成
し、ループ構造変形手段が、ループ構造選択手段で選択
されたループ構造について前記ループ構造解析手段で生
成された第1中間テキストおよびループ情報テーブル
と、前記ループ構造選択手段で生成されたループ変形情
報テーブルとを入力し、前記ループ構造を、初期値in
it,終値term,増分値incr×nの指標変数i
をもつ外側ループと元のループ構造のiからmin(i
+(n−1)×incr,term)の繰り返しを実行
する内側ループとからなる2重ループ構造に変形した第
2中間テキストを生成し、ベクトル化手段が、ループ構
造変形手段により生成された第2中間テキストを入力
し、2重ループの内側ループ構造をベクトル処理を行う
第3中間テキストに変形し、命令生成手段が、ベクトル
化手段で生成された第3中間テキストを入力し一連のベ
クトル命令およびスカラ命令列を生成する。
【0017】また、図6のようなループのベクトル化を
可能にする本発明のベクトル化方式においては、高級言
語で書かれた原始プログラムを入力し、x(i)=f
(x(i−1))の形式の漸化式を処理するベクトル命
令をもつベクトル計算機に対する目的プログラムを生成
する際、ループ構造解析手段が、原始プログラム中のル
ープ構造を認識し、該ループ構造に対する第1中間テキ
ストを生成するとともに、該ループの初期値init,
終値term,増分値incrの情報を格納したループ
情報テーブルを生成し、ループ構造選択手段が、ループ
構造解析手段で求められた前記ループ構造の第1中間テ
キストおよびループ情報テーブルを入力し、x(i)=
f(x(i−n))の形式の式を含みしかもnが前記増
分値incrの倍数となっているループ構造を選択する
とともにnを格納したループ変形情報テーブルを生成
し、ループ構造変形手段が、ループ構造選択手段で選択
されたループ構造について前記ループ構造解析手段で生
成された第1中間テキストおよびループ情報テーブル
と、前記ループ構造選択手段で生成されたループ変形情
報テーブルとを入力し、前記ループ構造を、初期値0,
終値n/incr,増分値1で指標変数iをもつ外側ル
ープと初期値init+i,終値term,増分値nの
内側ループとからなる2重ループ構造に変形した第2中
間テキストを生成し、ベクトル化手段が、ループ構造変
形手段により生成された第2中間テキストを入力し、2
重ループの内側ループ構造をベクトル処理を行う第3中
間テキストに変形し、命令生成手段が、ベクトル化手段
で生成された第3中間テキストを入力し一連のベクトル
命令およびスカラ命令列を生成する。
可能にする本発明のベクトル化方式においては、高級言
語で書かれた原始プログラムを入力し、x(i)=f
(x(i−1))の形式の漸化式を処理するベクトル命
令をもつベクトル計算機に対する目的プログラムを生成
する際、ループ構造解析手段が、原始プログラム中のル
ープ構造を認識し、該ループ構造に対する第1中間テキ
ストを生成するとともに、該ループの初期値init,
終値term,増分値incrの情報を格納したループ
情報テーブルを生成し、ループ構造選択手段が、ループ
構造解析手段で求められた前記ループ構造の第1中間テ
キストおよびループ情報テーブルを入力し、x(i)=
f(x(i−n))の形式の式を含みしかもnが前記増
分値incrの倍数となっているループ構造を選択する
とともにnを格納したループ変形情報テーブルを生成
し、ループ構造変形手段が、ループ構造選択手段で選択
されたループ構造について前記ループ構造解析手段で生
成された第1中間テキストおよびループ情報テーブル
と、前記ループ構造選択手段で生成されたループ変形情
報テーブルとを入力し、前記ループ構造を、初期値0,
終値n/incr,増分値1で指標変数iをもつ外側ル
ープと初期値init+i,終値term,増分値nの
内側ループとからなる2重ループ構造に変形した第2中
間テキストを生成し、ベクトル化手段が、ループ構造変
形手段により生成された第2中間テキストを入力し、2
重ループの内側ループ構造をベクトル処理を行う第3中
間テキストに変形し、命令生成手段が、ベクトル化手段
で生成された第3中間テキストを入力し一連のベクトル
命令およびスカラ命令列を生成する。
【0018】
【実施例】次に本発明の実施例について図面を参照しな
がら説明する。
がら説明する。
【0019】図1を参照すると、本発明のベクトル化方
式の一実施例を適用したコンパイラ2は、ループ構造解
析手段3と、定義参照関係解析手段4と、ループ構造選
択手段5と、ループ構造変形手段6と、ベクトル化手段
7と、命令生成手段8とから構成され、高級言語で書か
れた原始プログラム1を入力し、ベクトル計算機に対す
る目的プログラム9を生成する。
式の一実施例を適用したコンパイラ2は、ループ構造解
析手段3と、定義参照関係解析手段4と、ループ構造選
択手段5と、ループ構造変形手段6と、ベクトル化手段
7と、命令生成手段8とから構成され、高級言語で書か
れた原始プログラム1を入力し、ベクトル計算機に対す
る目的プログラム9を生成する。
【0020】なお、図1において、10,14,15,
11,12,13はそれぞれコンパイラ2が処理の過程
で生成する第1,第2,第3中間テキスト,ループ情報
テーブル,定義参照テーブル,ループ変形情報テーブル
をあらわす。
11,12,13はそれぞれコンパイラ2が処理の過程
で生成する第1,第2,第3中間テキスト,ループ情報
テーブル,定義参照テーブル,ループ変形情報テーブル
をあらわす。
【0021】以下、本実施例の各部の機能および動作を
説明する。
説明する。
【0022】コンパイラ2は原始プログラム1を入力
し、目的プログラム9を生成する。
し、目的プログラム9を生成する。
【0023】このとき、ループ構造解析手段3は原始プ
ログラム1中に現れるループ構造を認識し、そのループ
構造に対する第1中間テキスト10を生成するととも
に、そのループ構造の初期値init,終値term,
増分値incrを格納したループ情報テーブル11を生
成する。
ログラム1中に現れるループ構造を認識し、そのループ
構造に対する第1中間テキスト10を生成するととも
に、そのループ構造の初期値init,終値term,
増分値incrを格納したループ情報テーブル11を生
成する。
【0024】つぎに定義参照関係解析手段4は、ループ
構造解析手段3で生成された第1中間テキスト10およ
びループ情報テーブル11を入力し、そのループ構造中
に現れるすべての配列の定義参照関係を解析し、各配列
の原始プログラム中で定義参照されている位置,定義参
照される繰り返し回の情報を求め、定義参照テーブル1
2に格納する。
構造解析手段3で生成された第1中間テキスト10およ
びループ情報テーブル11を入力し、そのループ構造中
に現れるすべての配列の定義参照関係を解析し、各配列
の原始プログラム中で定義参照されている位置,定義参
照される繰り返し回の情報を求め、定義参照テーブル1
2に格納する。
【0025】つぎにループ構造選択手段5は、定義参照
関係解析手段4で生成された定義参照テーブル12を入
力し、ループ構造中に後方依存関係をもつ配列の定義参
照があるかどうか調べる。もし後方依存関係が或る配列
が存在したなら、その配列の各要素が定義される繰り返
し回と参照される繰り返し回の差をとり、それをnとす
る。そして、もしnがそのループ構造内で値が一定なら
ば、そのループ構造を変形可能としてループ変形情報テ
ーブル13にnを格納してループ構造変形手段6に制御
を渡す。
関係解析手段4で生成された定義参照テーブル12を入
力し、ループ構造中に後方依存関係をもつ配列の定義参
照があるかどうか調べる。もし後方依存関係が或る配列
が存在したなら、その配列の各要素が定義される繰り返
し回と参照される繰り返し回の差をとり、それをnとす
る。そして、もしnがそのループ構造内で値が一定なら
ば、そのループ構造を変形可能としてループ変形情報テ
ーブル13にnを格納してループ構造変形手段6に制御
を渡す。
【0026】つぎにループ構造変形手段6はループ構造
解析手段3で生成された第1中間テキスト10およびル
ープ情報テーブル11と、ループ構造選択手段5で生成
されたループ変形情報テーブル13とを入力し、初期値
init、終値term、増分値incr×nの外側ル
ープと、初期値i,終値MIN(i+(n−1)×in
cr,term)、増分値incrの内側ループとから
なる2重ループ構造に変形した第2中間テキスト14を
生成する。ここでiは外側ループの指標変数、MIN
(n,m)はn,mのうち小さい値をもつ方を返す関数
である。
解析手段3で生成された第1中間テキスト10およびル
ープ情報テーブル11と、ループ構造選択手段5で生成
されたループ変形情報テーブル13とを入力し、初期値
init、終値term、増分値incr×nの外側ル
ープと、初期値i,終値MIN(i+(n−1)×in
cr,term)、増分値incrの内側ループとから
なる2重ループ構造に変形した第2中間テキスト14を
生成する。ここでiは外側ループの指標変数、MIN
(n,m)はn,mのうち小さい値をもつ方を返す関数
である。
【0027】たとえば、図2に示したループ構造は、初
期値が1,終値が100,増分値が1,nが10なの
で、図3に示すように、外側ループの初期値が1,終値
が100,増分値が10で、内側ループの初期値が外側
ループの指標変数L,終値がMIN(L+(10−1)
×1,100)つまりMIN(L+9,100),増分
値1であるような、2重ループ構造に変形される。この
2重ループ構造の内側ループにおいては、条件が満た
されているためにベクトル化が可能となっている。
期値が1,終値が100,増分値が1,nが10なの
で、図3に示すように、外側ループの初期値が1,終値
が100,増分値が10で、内側ループの初期値が外側
ループの指標変数L,終値がMIN(L+(10−1)
×1,100)つまりMIN(L+9,100),増分
値1であるような、2重ループ構造に変形される。この
2重ループ構造の内側ループにおいては、条件が満た
されているためにベクトル化が可能となっている。
【0028】つぎに、ベクトル化手段7では、ループ構
造変形手段6で変形された第2中間テキスト14を入力
し、2重ループの内側ループ構造をベクトル処理の第3
中間テキスト15に変形する。
造変形手段6で変形された第2中間テキスト14を入力
し、2重ループの内側ループ構造をベクトル処理の第3
中間テキスト15に変形する。
【0029】最後に、命令生成手段8はベクトル化手段
7で生成された第3中間テキスト15を入力して一連の
ベクトル命令およびスカラ命令を生成し、目的プログラ
ム9を出力する。
7で生成された第3中間テキスト15を入力して一連の
ベクトル命令およびスカラ命令を生成し、目的プログラ
ム9を出力する。
【0030】図4を参照すると、本発明のベクトル化方
式の別の実施例を適用したコンパイラ42の一実施例
は、ループ構造解析手段43と、ループ構造選択手段4
4と、ループ構造変形手段45と、ベクトル化手段46
と、命令生成手段47とから構成され、高級言語で書か
れた原始プログラム41を入力し、ベクトル計算機に対
する目的プログラム48を生成する。
式の別の実施例を適用したコンパイラ42の一実施例
は、ループ構造解析手段43と、ループ構造選択手段4
4と、ループ構造変形手段45と、ベクトル化手段46
と、命令生成手段47とから構成され、高級言語で書か
れた原始プログラム41を入力し、ベクトル計算機に対
する目的プログラム48を生成する。
【0031】なお、図4において、49,52,53,
50,51はそれぞれコンパイラ42が処理の過程で生
成する第1,第2,第3中間テキスト,ループ情報テー
ブル,ループ変形情報テーブルをあらわす。
50,51はそれぞれコンパイラ42が処理の過程で生
成する第1,第2,第3中間テキスト,ループ情報テー
ブル,ループ変形情報テーブルをあらわす。
【0032】また、目的プログラムを生成する対象とな
るベクトル計算機は、x(i)=x(i−1)+y
(i)の形式の漸化式のベクトル命令を備えているもの
とする。
るベクトル計算機は、x(i)=x(i−1)+y
(i)の形式の漸化式のベクトル命令を備えているもの
とする。
【0033】以下、本実施例の各部の機能および動作を
説明する。
説明する。
【0034】コンパイラ42は原始プログラム41を入
力し、目的プログラム48を生成する。
力し、目的プログラム48を生成する。
【0035】このとき、ループ構造解析手段43は原始
プログラム41中に現れるループ構造を認識し、そのル
ープ構造に対する第1中間テキスト49を生成するとと
もに、そのループ構造の初期値init,終値ter
m,増分値incrを格納したループ情報テーブル50
を生成する。
プログラム41中に現れるループ構造を認識し、そのル
ープ構造に対する第1中間テキスト49を生成するとと
もに、そのループ構造の初期値init,終値ter
m,増分値incrを格納したループ情報テーブル50
を生成する。
【0036】たとえば、図6のループ構造では、初期値
3,終値12,増分値1というループ情報テーブル50
が生成される。
3,終値12,増分値1というループ情報テーブル50
が生成される。
【0037】つぎにループ構造選択手段44は、ループ
構造解析手段43で生成された第1中間テキスト49お
よびループ情報テーブル50を入力し、ループ構造中に
x(i)=x(i−m)+y(i)の形の式が現れるか
どうかを調べ、もしそのような式があったならば、mが
ループ構造の増分値incrの倍数であるかどうかを調
べる。そして、mがincrの倍数であればそのループ
構造を変形によりベクトル化可能であるものとして、ル
ープ変形情報テーブル51にmを格納し、つぎのループ
構造変形手段45に制御を渡す。
構造解析手段43で生成された第1中間テキスト49お
よびループ情報テーブル50を入力し、ループ構造中に
x(i)=x(i−m)+y(i)の形の式が現れるか
どうかを調べ、もしそのような式があったならば、mが
ループ構造の増分値incrの倍数であるかどうかを調
べる。そして、mがincrの倍数であればそのループ
構造を変形によりベクトル化可能であるものとして、ル
ープ変形情報テーブル51にmを格納し、つぎのループ
構造変形手段45に制御を渡す。
【0038】たとえば、図6のループ構造では、代入文
dはx(i)=x(i−n)+y(i)の形式に合致
し、しかもm=3=3×1で、ループ構造の増分値1の
倍数となっており条件が満たされているので、ループ変
形情報テーブル51に3を格納する。
dはx(i)=x(i−n)+y(i)の形式に合致
し、しかもm=3=3×1で、ループ構造の増分値1の
倍数となっており条件が満たされているので、ループ変
形情報テーブル51に3を格納する。
【0039】つぎにループ構造変形手段45は、ループ
構造解析手段43で生成された第1中間テキスト49お
よびループ構造選択手段44で生成されたループ変形情
報テーブル51を入力し、ループ構造を初期値0,終値
m/incr−1,増分値1で制御変数iの外側ループ
と、初期値incr+i,終値term,増分値nの内
側ループとからなる2重ループ構造に変形した第2中間
テキスト52を生成する。
構造解析手段43で生成された第1中間テキスト49お
よびループ構造選択手段44で生成されたループ変形情
報テーブル51を入力し、ループ構造を初期値0,終値
m/incr−1,増分値1で制御変数iの外側ループ
と、初期値incr+i,終値term,増分値nの内
側ループとからなる2重ループ構造に変形した第2中間
テキスト52を生成する。
【0040】たとえば、図6に示したループ構造は初期
値3,終値12,増分値1,m=3であるから、図8に
示すような、初期値0,終値3/1−1=2,増分値
1,制御変数Lの外側ループと、初期値が1+L,終値
が12,増分値が3の内側ループからなる2重ループ構
造に変形される。
値3,終値12,増分値1,m=3であるから、図8に
示すような、初期値0,終値3/1−1=2,増分値
1,制御変数Lの外側ループと、初期値が1+L,終値
が12,増分値が3の内側ループからなる2重ループ構
造に変形される。
【0041】つぎに、ベクトル化手段46では、ループ
構造変形手段45で変形された第2中間テキスト52を
入力し、2重ループの内側ループ構造をベクトル処理の
第3中間テキスト53に変形する。
構造変形手段45で変形された第2中間テキスト52を
入力し、2重ループの内側ループ構造をベクトル処理の
第3中間テキスト53に変形する。
【0042】最後に、命令生成手段47はベクトル化手
段46で生成された第3中間テキスト53を入力して一
連のベクトル命令およびスカラ命令を生成し、目的プロ
グラム48を出力する。
段46で生成された第3中間テキスト53を入力して一
連のベクトル命令およびスカラ命令を生成し、目的プロ
グラム48を出力する。
【0043】
【発明の効果】以上説明した本発明のベクトル化方式
は、以下のような効果を有する。
は、以下のような効果を有する。
【0044】後方依存関係のある間にまたがる定義参照
の依存関係がある図2のようなループ構造もベクトル化
できるため、実行速度がより高速な目的プログラムを生
成できる。
の依存関係がある図2のようなループ構造もベクトル化
できるため、実行速度がより高速な目的プログラムを生
成できる。
【0045】x(i)=f(x(i−1))の形式の漸
化式を処理するベクトル命令をもつベクトル計算機に対
し、増分値incrのループ構造中にx(i)=f(x
(i−n))でnがincrの倍数であるような形式の
式が含まれる場合にもベクトル化できるようになり、よ
り性能の高い目的プログラムを生成できる。
化式を処理するベクトル命令をもつベクトル計算機に対
し、増分値incrのループ構造中にx(i)=f(x
(i−n))でnがincrの倍数であるような形式の
式が含まれる場合にもベクトル化できるようになり、よ
り性能の高い目的プログラムを生成できる。
【図1】本発明の一実施例を適用したコンパイラの構成
図である。
図である。
【図2】FORTRAN言語で記述された後方依存関係
のあるループ構造の例を示す図である。
のあるループ構造の例を示す図である。
【図3】図2のループ構造を図1の実施例のベクトル化
方式で変形したループ構造の説明図である。
方式で変形したループ構造の説明図である。
【図4】本発明の別の実施例を適用したコンパイラの構
成図である。
成図である。
【図5】FORTRAN言語で記述された漸化式を含む
ループ構造の例を示す図である。
ループ構造の例を示す図である。
【図6】FORTRAN言語で記述されたx(i)=f
(x(i−n))の形式の代入文を含むループ構造の例
を示す図である。
(x(i−n))の形式の代入文を含むループ構造の例
を示す図である。
【図7】図6のループ構造における配列Aの各要素の依
存関係の説明図である。
存関係の説明図である。
【図8】図6に示したループ構造を図4の実施例のベク
トル化方式で変形したループ構造の説明図である。
トル化方式で変形したループ構造の説明図である。
1,41…原始プログラム 2,42…コンパイラ 3,43…ループ構造解析手段 4…定義参照関係解析手段 5,44…ループ構造選択手段 6,45…ループ構造変形手段 7,46…ベクトル化手段 8,47…命令生成手段 9,48…目的プログラム 10,49…第1中間テキスト 11,50…ループ情報テーブル 12…定義参照テーブル 13,51…ループ変形情報テーブル 14,52…第2中間テキスト 15,53…第3中間テキスト
Claims (2)
- 【請求項1】 高級言語で書かれた原始プログラムを入
力し、ベクトル計算機に対する目的プログラムを生成す
るコンパイラにおいて、 原始プログラム中のループ構造を認識し、該ループ構造
に対する第1中間テキストを生成するとともに、該ルー
プの初期値init,終値term,増分値incrの
情報を格納したループ情報テーブルを生成するループ構
造解析手段と、 該ループ構造解析手段で求められた前記ループ構造の第
1中間テキストおよびループ情報テーブルを入力し、ル
ープ構造内に現れる配列の定義・参照関係を解析し、配
列の定義参照関係の情報を格納した定義参照テーブルを
生成する定義参照関係解析手段と、 該定義参照関係解析手段で求められた定義参照テーブル
を入力し、前記ループ構造中に後方依存関係のある配列
があった場合、該ループ構造中で該配列の各要素が参照
される繰り返し回と定義される繰り返し回の差nを求
め、その差nの値がループ構造内で一定であるループ構
造を選択するとともに、nを格納したループ変形情報テ
ーブルを生成するループ構造選択手段と、 該ループ構造選択手段で選択されたループ構造について
前記ループ構造解析手段で生成された第1中間テキスト
およびループ情報テーブルと、前記ループ構造選択手段
で生成されたループ変形情報テーブルとを入力し、前記
ループ構造を、初期値init,終値term,増分値
incr×nの指標変数iをもつ外側ループと元のルー
プ構造のiからmin(i+(n−1)×incr,t
erm)の繰り返しを実行する内側ループとからなる2
重ループ構造に変形した第2中間テキストを生成するル
ープ構造変形手段と、 該ループ構造変形手段により生成された第2中間テキス
トを入力し、2重ループの内側ループ構造をベクトル処
理を行う第3中間テキストに変形するベクトル化手段
と、 該ベクトル化手段で生成された第3中間テキストを入力
し一連のベクトル命令およびスカラ命令列を生成する命
令生成手段とを含むことを特徴とするベクトル化方式。 - 【請求項2】 高級言語で書かれた原始プログラムを入
力し、x(i)=f(x(i−1))の形式の漸化式を
処理するベクトル命令をもつベクトル計算機に対する目
的プログラムを生成するコンパイラにおいて、 原始プログラム中のループ構造を認識し、該ループ構造
に対する第1中間テキストを生成するとともに、該ルー
プの初期値init,終値term,増分値incrの
情報を格納したループ情報テーブルを生成するループ構
造解析手段と、 該ループ構造解析手段で求められた前記ループ構造の第
1中間テキストおよびループ情報テーブルを入力し、x
(i)=f(x(i−n))の形式の式を含みしかもn
が前記増分値incrの倍数となっているループ構造を
選択するとともにnを格納したループ変形情報テーブル
を生成するループ構造選択手段と、 該ループ構造選択手段で選択されたループ構造について
前記ループ構造解析手段で生成された第1中間テキスト
およびループ情報テーブルと、前記ループ構造選択手段
で生成されたループ変形情報テーブルとを入力し、前記
ループ構造を、初期値0,終値n/incr,増分値1
で指標変数iをもつ外側ループと初期値init+i,
終値term,増分値nの内側ループとからなる2重ル
ープ構造に変形した第2中間テキストを生成するループ
構造変形手段と、 該ループ構造変形手段により生成された第2中間テキス
トを入力し、2重ループの内側ループ構造をベクトル処
理を行う第3中間テキストに変形するベクトル化手段
と、 該ベクトル化手段で生成された第3中間テキストを入力
し一連のベクトル命令およびスカラ命令列を生成する命
令生成手段とを含むことを特徴とするベクトル化方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3278322A JPH0594470A (ja) | 1991-09-30 | 1991-09-30 | ベクトル化方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3278322A JPH0594470A (ja) | 1991-09-30 | 1991-09-30 | ベクトル化方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0594470A true JPH0594470A (ja) | 1993-04-16 |
Family
ID=17595716
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3278322A Pending JPH0594470A (ja) | 1991-09-30 | 1991-09-30 | ベクトル化方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0594470A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2005078579A1 (ja) * | 2004-02-12 | 2005-08-25 | Matsushita Electric Industrial Co., Ltd. | プログラム変換装置およびプログラム変換方法 |
| JP2009070070A (ja) * | 2007-09-12 | 2009-04-02 | Nec Corp | コンパイラ及びコンパイル方法 |
-
1991
- 1991-09-30 JP JP3278322A patent/JPH0594470A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2005078579A1 (ja) * | 2004-02-12 | 2005-08-25 | Matsushita Electric Industrial Co., Ltd. | プログラム変換装置およびプログラム変換方法 |
| JP2009070070A (ja) * | 2007-09-12 | 2009-04-02 | Nec Corp | コンパイラ及びコンパイル方法 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US4833606A (en) | Compiling method for vectorizing multiple do-loops in source program | |
| US4821181A (en) | Method for converting a source program of high level language statement into an object program for a vector processor | |
| EP0467629B1 (en) | A loop compiler method & apparatus for a data processing system | |
| JP4077252B2 (ja) | コンパイラプログラムおよびコンパイル処理方法 | |
| US5790760A (en) | Program generating apparatus and method thereof | |
| JPH06103463B2 (ja) | コード生成方法 | |
| JPH04102926A (ja) | 繰り返しループの展開最適化方式 | |
| Hale | Programming in temporal logic | |
| US5349665A (en) | Compiler vectorizing system | |
| JPH0594470A (ja) | ベクトル化方式 | |
| US6055627A (en) | Compiling method of accessing a multi-dimensional array and system therefor | |
| Povhan | Logical classification trees in recognition problems | |
| JPH07152576A (ja) | アレイ関数をもつプログラミング言語におけるインライン展開方法 | |
| Kahn | Partial evaluation, programming methodology, and artificial intelligence | |
| JPH04293150A (ja) | コンパイル方法 | |
| JP3057904B2 (ja) | ベクトル化方式 | |
| Sai Pardha Saketh et al. | Top-Down Parsing: A Comprehensive Review | |
| JP2748582B2 (ja) | コンパイル処理装置 | |
| JPH04307624A (ja) | ループ最適化方法及び装置 | |
| JPH05257707A (ja) | コンパイル方式 | |
| JPH09160784A (ja) | 並列化コンパイル方式 | |
| JP2003256214A (ja) | 配列拡張によるループ変換方法 | |
| Huang et al. | Efficient Inference of Transformers on Bare-Metal Devices with RISC-V Vector Processors | |
| JPH05341966A (ja) | M系列乱数発生組み込み関数の最適化方式 | |
| JP3726992B2 (ja) | 一括関数呼出化方法 |