JPH0795274B2 - 配列添字解析方法 - Google Patents
配列添字解析方法Info
- Publication number
- JPH0795274B2 JPH0795274B2 JP61219543A JP21954386A JPH0795274B2 JP H0795274 B2 JPH0795274 B2 JP H0795274B2 JP 61219543 A JP61219543 A JP 61219543A JP 21954386 A JP21954386 A JP 21954386A JP H0795274 B2 JPH0795274 B2 JP H0795274B2
- Authority
- JP
- Japan
- Prior art keywords
- loop
- array
- variable
- array subscript
- induction
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Description
【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、電子計算機用言語のコンパイラに係り、特
に、自動ベクトル化、スカラ,ベクトル並列化などの配
列最適化に必要な情報を提供する配列添字解析方式に関
する。
に、自動ベクトル化、スカラ,ベクトル並列化などの配
列最適化に必要な情報を提供する配列添字解析方式に関
する。
コンパイラにおける自動ベクトル化などの配列最適化を
実施するためには配列のループ内における2参照に対し
て、2つの配列添字のループ繰り返しに関する重なり方
を解析し、配列の2参照間のデータの依存関係を明らか
にする必要がある。ループ内の配列添字がループ内で定
義が唯一のインダクション変数の線型結合で表わされる
場合の添字解析方法は、例えば情報処理学会論文誌第24
巻第2号第238頁から第248頁(1983年)に述べられてい
る。
実施するためには配列のループ内における2参照に対し
て、2つの配列添字のループ繰り返しに関する重なり方
を解析し、配列の2参照間のデータの依存関係を明らか
にする必要がある。ループ内の配列添字がループ内で定
義が唯一のインダクション変数の線型結合で表わされる
場合の添字解析方法は、例えば情報処理学会論文誌第24
巻第2号第238頁から第248頁(1983年)に述べられてい
る。
上記従来技術においては、配列添字が、1つの式で定義
されるインダクション変数の線型結合で表現される場合
しかコンパイラにおいて解析することができなかった。
されるインダクション変数の線型結合で表現される場合
しかコンパイラにおいて解析することができなかった。
例として第7図のプログラムを使用する。この図におけ
る配列Aの定義点d1において定義された値が使用点u1で
はどのループの繰り返しにおいても使用(同じ項目をア
クセスする)されず、使用点u2では必ず同じループの繰
り返しにおいて使用される。ところが、従来の配列添字
解析法では1つの定義式で表わされたインダクション変
数しか解析できないものであったため、このような場合
には解析を行ない最適化をするというコンパイル時に要
求される処理ができない。
る配列Aの定義点d1において定義された値が使用点u1で
はどのループの繰り返しにおいても使用(同じ項目をア
クセスする)されず、使用点u2では必ず同じループの繰
り返しにおいて使用される。ところが、従来の配列添字
解析法では1つの定義式で表わされたインダクション変
数しか解析できないものであったため、このような場合
には解析を行ない最適化をするというコンパイル時に要
求される処理ができない。
第7図では例えば、u2はd1と同じインダクション変数を
扱っている。従って、d1の値をレジスタ(メインメモリ
ではなく)にラッチしておきこれをu2で使用することに
より高速化を図るという最適化の可能性があった。
扱っている。従って、d1の値をレジスタ(メインメモリ
ではなく)にラッチしておきこれをu2で使用することに
より高速化を図るという最適化の可能性があった。
本発明の目的は、従来技術ではコンパイラにおいて配列
添字が1つの式で定義されるインダクション変数(定義
が再帰的な変数)の線型結合で表現される場合しか対応
できなかった配列添字解析を、ループ内で複数の増分処
理を持つようなインダクション変数を含む配列添字に対
しても従来よりも正確に解析することができる配列添字
解析方法を提供することにあります。
添字が1つの式で定義されるインダクション変数(定義
が再帰的な変数)の線型結合で表現される場合しか対応
できなかった配列添字解析を、ループ内で複数の増分処
理を持つようなインダクション変数を含む配列添字に対
しても従来よりも正確に解析することができる配列添字
解析方法を提供することにあります。
上記目的は、コンパイラにおいて、(1)インダクショ
ン変数をループの1回目の繰り返しにおける値(初期
値)及び、ループ繰り返し毎に増加する値(増分値)に
分割して表現(初期値と増分値で表わる表現形式を標準
形式という)し、(2)ループ内の配列によって使われ
る添字を順に読み出してその添字を(1)で作成された
標準形の線型結合として表現する。そして、(3)
(2)で作成された添字標準形を用いて、多重ループ内
の配列(A)の複数の参照間で、ループの同一の繰り返
しにおいて、同一配列要素(Ai)を参照するか否かの
判定を行なうとともに、ループの異なる繰り返しにおい
て同一配列要素(Ai)を参照するか否かの判定を行な
うことにより達成される。
ン変数をループの1回目の繰り返しにおける値(初期
値)及び、ループ繰り返し毎に増加する値(増分値)に
分割して表現(初期値と増分値で表わる表現形式を標準
形式という)し、(2)ループ内の配列によって使われ
る添字を順に読み出してその添字を(1)で作成された
標準形の線型結合として表現する。そして、(3)
(2)で作成された添字標準形を用いて、多重ループ内
の配列(A)の複数の参照間で、ループの同一の繰り返
しにおいて、同一配列要素(Ai)を参照するか否かの
判定を行なうとともに、ループの異なる繰り返しにおい
て同一配列要素(Ai)を参照するか否かの判定を行な
うことにより達成される。
配列添字解析においてはソースプログラム中の多重ルー
プ及びその多重ループ内の配列を参照するに対して動作
する。配列添字解析部の各構成要素は以下のように動作
する。
プ及びその多重ループ内の配列を参照するに対して動作
する。配列添字解析部の各構成要素は以下のように動作
する。
(1) インダクション変数標準化部は、各ループ内の
インダクション変数をそのループにおける初期値と増分
値に分割し標準形という形に表現する。
インダクション変数をそのループにおける初期値と増分
値に分割し標準形という形に表現する。
(2) 配列添字標準化部は、ループ内の配列参照の配
列添字を走査して、その配列添字を(1)で作成された
標準形の線型結合として表現する。
列添字を走査して、その配列添字を(1)で作成された
標準形の線型結合として表現する。
(3) 配列添字比較部は(2)で作成された配列添字
標準形を用いて、多重ループ内の配列の2参照が、ルー
プの同一の繰り返しにおいて、同一アドレスを参照する
か否かの判定を行なうとともに、ループの異なる繰り返
しにおいて同一アドレスを参照するか否かの判定を行な
う。
標準形を用いて、多重ループ内の配列の2参照が、ルー
プの同一の繰り返しにおいて、同一アドレスを参照する
か否かの判定を行なうとともに、ループの異なる繰り返
しにおいて同一アドレスを参照するか否かの判定を行な
う。
以下本発明の実施例を第1図から第6図を用いて説明す
る。
る。
第1図に本発明が適用されたコンパイラの配列添字解析
部の構成を示す。配列添字解析部101はインダクション
変数標準化部102,配列添字標準化部103,配列添字標準化
部104の3つの処理部により構成される。インダクショ
ン変数標準化部102はインダクション変数情報情報105及
び、制御フロー情報106を入力し、インダクション変数
の標準形107を出力する。配列添字標準化部103は制御フ
ロー情報106及び、インダクション変数の標準形107を入
力して、配列添字標準形108を出力する。
部の構成を示す。配列添字解析部101はインダクション
変数標準化部102,配列添字標準化部103,配列添字標準化
部104の3つの処理部により構成される。インダクショ
ン変数標準化部102はインダクション変数情報情報105及
び、制御フロー情報106を入力し、インダクション変数
の標準形107を出力する。配列添字標準化部103は制御フ
ロー情報106及び、インダクション変数の標準形107を入
力して、配列添字標準形108を出力する。
配列添字比較部104は配列添字標準形108を入力して配列
添字解析情報109を出力する。これが配列添字解析部101
の出力となる。
添字解析情報109を出力する。これが配列添字解析部101
の出力となる。
配列添字解析部には解析すべき多重ループの最外側ルー
プを入力するものとする。
プを入力するものとする。
具体的な処理内容の説明に入る前に規準インダクション
変数、プログラム中の式の標準化と標準形について説明
しておく。
変数、プログラム中の式の標準化と標準形について説明
しておく。
(1) 規準インダクション変数 規準インダクション変数とは初期値0、増分値1の仮想
的なインダクション変数であり、各ループに対して1つ
ずつ設ける。
的なインダクション変数であり、各ループに対して1つ
ずつ設ける。
(2) 標準化と標準形 プログラム中の式を規準インダクション変数の定数係数
の線型結合で表現することを標準化と呼ぶ、また標準化
による表現形を、標準形と呼ぶ。ループLの規準インダ
クション変数をLLで表わしたとき、標準形は一般に CO+ΣL:全てのループCLIL(CO,CLは定数) という形になる。
の線型結合で表現することを標準化と呼ぶ、また標準化
による表現形を、標準形と呼ぶ。ループLの規準インダ
クション変数をLLで表わしたとき、標準形は一般に CO+ΣL:全てのループCLIL(CO,CLは定数) という形になる。
以下処理101を構成する処理102,103,104について説明す
る。
る。
第2図のフローチャートはインダクション変数標準化部
102及び、配列添字標準化部103を実現している。処理20
1において入力されたループLとL内の全てのインダク
ション変数Jに対してインダクション変数JのループL
における標準化処理202を行なう。処理202は第3図で示
したフローチャートにより実現される。処理201でのイ
ンダクション変数の標準化を行なった後、処理203にお
いて、入力されたループLとL内の全ての配列参照Rに
対して、Rの各次元の添字式のループLにおける標準化
処理204を行なう。処理204は、第4図で示したフローチ
ャートにより実現される。つぎに処理205において、入
力されたループLの全ての内側ループに対して処理201,
203,205の処理を繰り返し行なう。
102及び、配列添字標準化部103を実現している。処理20
1において入力されたループLとL内の全てのインダク
ション変数Jに対してインダクション変数JのループL
における標準化処理202を行なう。処理202は第3図で示
したフローチャートにより実現される。処理201でのイ
ンダクション変数の標準化を行なった後、処理203にお
いて、入力されたループLとL内の全ての配列参照Rに
対して、Rの各次元の添字式のループLにおける標準化
処理204を行なう。処理204は、第4図で示したフローチ
ャートにより実現される。つぎに処理205において、入
力されたループLの全ての内側ループに対して処理201,
203,205の処理を繰り返し行なう。
第3図のフローチャートは、ループLとLのインダクシ
ョン変数Jに対して、第2図におけるJのループLにお
ける標準化処理201を実現している。処理301において入
力されたループLとインダクション変数Jの全ての代入
文Sに対して、処理302,303,304を繰り返し実行する。
処理302はインダクション変数Jの代入文Sが、J=J
+d(dは定数)という形であれば真となる判定文であ
る。処理302で真と判定されれば処理303を行ない、偽と
判定されれば、処理309でインダクション変数Jはルー
プLで標準化不可能であると判定して処理を終了する。
処理303はインダクション変数Jの代入文Sが、ループ
L内の条件分岐下にないならば真となる判定文である。
処理303で真と判定されれば、処理304を行ない、偽と判
定されれば処理309でインダクション変数JはループL
で標準化不可能であると判定して処理を終了する。処理
304はインダクション変数Jの代入文SがループLの内
側ループ内にないならば真となる判定文である。処理30
4で真と判定されれば処理301の次の繰り返し処理を行な
い、偽と判定されれば処理309でインダクション変数J
はループLで標準化不可能であると判定して処理を終了
する。処理305はJの初期値代入文がLのひとつ外側ル
ープ内にあれば真となる判定文である。処理305で偽と
判定されれば、処理309においてインダクション変数J
はループLで標準化不可能であると判定して処理を終了
する。処理306はJの初期値代入文の右辺の式とLのひ
とつ外側ループに対して第4図により実現される処理を
行なう。処理307はJの初期値代入文の右辺の式が、L
のひとつ外側ループで標準化可能であれば真となる判定
文である。処理307で偽と判定されれば、処理309におい
てインダクション変数JはループLで標準化不可能であ
ると判定して処理を終了する。
ョン変数Jに対して、第2図におけるJのループLにお
ける標準化処理201を実現している。処理301において入
力されたループLとインダクション変数Jの全ての代入
文Sに対して、処理302,303,304を繰り返し実行する。
処理302はインダクション変数Jの代入文Sが、J=J
+d(dは定数)という形であれば真となる判定文であ
る。処理302で真と判定されれば処理303を行ない、偽と
判定されれば、処理309でインダクション変数Jはルー
プLで標準化不可能であると判定して処理を終了する。
処理303はインダクション変数Jの代入文Sが、ループ
L内の条件分岐下にないならば真となる判定文である。
処理303で真と判定されれば、処理304を行ない、偽と判
定されれば処理309でインダクション変数JはループL
で標準化不可能であると判定して処理を終了する。処理
304はインダクション変数Jの代入文SがループLの内
側ループ内にないならば真となる判定文である。処理30
4で真と判定されれば処理301の次の繰り返し処理を行な
い、偽と判定されれば処理309でインダクション変数J
はループLで標準化不可能であると判定して処理を終了
する。処理305はJの初期値代入文がLのひとつ外側ル
ープ内にあれば真となる判定文である。処理305で偽と
判定されれば、処理309においてインダクション変数J
はループLで標準化不可能であると判定して処理を終了
する。処理306はJの初期値代入文の右辺の式とLのひ
とつ外側ループに対して第4図により実現される処理を
行なう。処理307はJの初期値代入文の右辺の式が、L
のひとつ外側ループで標準化可能であれば真となる判定
文である。処理307で偽と判定されれば、処理309におい
てインダクション変数JはループLで標準化不可能であ
ると判定して処理を終了する。
処理308でインダクション変数JのループLでの標準形
を求める。ループLを第5図に示すようにインダクショ
ン変数JのループL内での全ての代入文J=J+d1,J
=J+d2,…,J=J+dp(d1,…,dpは定数)で領域
S0,S1,…,Spに分割したとき、領域Siにおけるインダ
クション変数の標準形は J0+Σj=1,i−1 dj+(Σj=1,pCj)IL となる。ここでJ0はインダクションJの初期値代入文
の右辺の式のループLのひとつ外側ループにおける標準
形であるとする。
を求める。ループLを第5図に示すようにインダクショ
ン変数JのループL内での全ての代入文J=J+d1,J
=J+d2,…,J=J+dp(d1,…,dpは定数)で領域
S0,S1,…,Spに分割したとき、領域Siにおけるインダ
クション変数の標準形は J0+Σj=1,i−1 dj+(Σj=1,pCj)IL となる。ここでJ0はインダクションJの初期値代入文
の右辺の式のループLのひとつ外側ループにおける標準
形であるとする。
第4図のフローチャートはプログラム中の式EXPとEXPの
属するループLを入力として第2図における処理204、
及び第3図における処理306を実現する。処理401は入力
された式EXPが、定数係数の一次式として表現されてい
る場合に真となる判定文である。処理401で真と判定さ
れた場合は処理402を実行し、偽と判定された場合は処
理408により式EXPはループLで標準化不可能であると判
定して処理を終了する。処理402は入力されたループL
と式EXP内の全て全ての変数参照xに対して処理403〜40
7を繰り返し実行させる処理である。処理402を正常に終
了すれば式EXPはループLで標準化され、その標準形が
出力される。処理403は式EXP内の変数参照xに対してx
がループL又はLの外側ループの標準化可能なインダク
ション変数であれば真となる判定文である。処理403で
真と判定された場合は処理407においてxをループLに
おけるインダクション変数としての標準形でおきかえ
る。処理403で偽と判定された場合は、処理404を行な
う。処理404は式EXP内の変数参照xにおいて使用される
値を定義する代入文が唯一でそれがループL(内側ルー
プは含まない)内又はLの外側ループ内にあれば真とな
る判定文である。処理404で偽と判定された場合は、処
理408において式EXPはループLで標準化不可能であると
判定して処理を終了する。処理404で真と判定された場
合は処理405を行なう。処理405は式EXP内の変数参照x
において使用される値を定義する代入文の右辺の式、及
びその代入文の属するループに対して本第4図中の処理
401〜408を実行する。処理405は出力として式EXP内の変
数参照xにおいて使用される値を定義する代入文の右辺
の式がその代入文の属するループにおいて標準化可能か
否かの情報と、可能な場合は、その標準形を出力する。
処理406は処理405で標準化可能と判定された場合に真と
なる判定文である。処理406で真と判定された場合は処
理407においてxを処理406が出力する標準形でおきかえ
る。処理406で偽と判定された場合は、処理408におい
て、式EXPはループLで標準化不可能であると判定して
処理を終了する。
属するループLを入力として第2図における処理204、
及び第3図における処理306を実現する。処理401は入力
された式EXPが、定数係数の一次式として表現されてい
る場合に真となる判定文である。処理401で真と判定さ
れた場合は処理402を実行し、偽と判定された場合は処
理408により式EXPはループLで標準化不可能であると判
定して処理を終了する。処理402は入力されたループL
と式EXP内の全て全ての変数参照xに対して処理403〜40
7を繰り返し実行させる処理である。処理402を正常に終
了すれば式EXPはループLで標準化され、その標準形が
出力される。処理403は式EXP内の変数参照xに対してx
がループL又はLの外側ループの標準化可能なインダク
ション変数であれば真となる判定文である。処理403で
真と判定された場合は処理407においてxをループLに
おけるインダクション変数としての標準形でおきかえ
る。処理403で偽と判定された場合は、処理404を行な
う。処理404は式EXP内の変数参照xにおいて使用される
値を定義する代入文が唯一でそれがループL(内側ルー
プは含まない)内又はLの外側ループ内にあれば真とな
る判定文である。処理404で偽と判定された場合は、処
理408において式EXPはループLで標準化不可能であると
判定して処理を終了する。処理404で真と判定された場
合は処理405を行なう。処理405は式EXP内の変数参照x
において使用される値を定義する代入文の右辺の式、及
びその代入文の属するループに対して本第4図中の処理
401〜408を実行する。処理405は出力として式EXP内の変
数参照xにおいて使用される値を定義する代入文の右辺
の式がその代入文の属するループにおいて標準化可能か
否かの情報と、可能な場合は、その標準形を出力する。
処理406は処理405で標準化可能と判定された場合に真と
なる判定文である。処理406で真と判定された場合は処
理407においてxを処理406が出力する標準形でおきかえ
る。処理406で偽と判定された場合は、処理408におい
て、式EXPはループLで標準化不可能であると判定して
処理を終了する。
以上で第1図におけるインダクション変数標準化部10
2、配列添字標準化部103の実現方法について説明を終
る。
2、配列添字標準化部103の実現方法について説明を終
る。
次に第1図における配列添字比較部104の実現方法につ
いて第6図を用いて説明する。
いて第6図を用いて説明する。
まず配列添字比較部104への入力と出力について説明す
る。入力は、解析すべき多重ループ内の配列の2参照u
とvに対して、配列添字標準化部103が出力するuの配
列添字標準形Uとvの配列添字標準形V、及び、配列の
2参照u,vを共に含むループL0(これを比較基準ループ
と呼ぶ)及び負でない整数n(比較基準ループ繰り返し
回数と呼ぶ)の4つ(U,V,LS,n)であり、出力は次の
(1)〜(5)で定義するBoolean値、Neceq,Indep,Sin
dep,Poseq,Sposeqの5つである。
る。入力は、解析すべき多重ループ内の配列の2参照u
とvに対して、配列添字標準化部103が出力するuの配
列添字標準形Uとvの配列添字標準形V、及び、配列の
2参照u,vを共に含むループL0(これを比較基準ループ
と呼ぶ)及び負でない整数n(比較基準ループ繰り返し
回数と呼ぶ)の4つ(U,V,LS,n)であり、出力は次の
(1)〜(5)で定義するBoolean値、Neceq,Indep,Sin
dep,Poseq,Sposeqの5つである。
(1) Neceq:任意の非負整数kに対して、Uのループ
L0のk回目の繰り返しにおける値が、VのループL0の
k+n回目の繰り返しにおける値と等しいときのみ真と
する。
L0のk回目の繰り返しにおける値が、VのループL0の
k+n回目の繰り返しにおける値と等しいときのみ真と
する。
(2) Indep:任意の非負整数kに対して、Uのループ
L0のk回目の繰り返しにおける値が、VのループL0の
k+n回目の繰り返しにおける値と異なるときのみ真と
する。
L0のk回目の繰り返しにおける値が、VのループL0の
k+n回目の繰り返しにおける値と異なるときのみ真と
する。
(3) Sindep:任意の非負整数k,lに対して、Uのルー
プL0のk回目の繰り返しにおける値が、VのループL0
のk+n+l回目の繰り返しにおける値と異なるときの
み真とする。
プL0のk回目の繰り返しにおける値が、VのループL0
のk+n+l回目の繰り返しにおける値と異なるときの
み真とする。
(4) Poseq:Indepが偽のときのみ真とする。
(5) Sposeq:Sindepが偽のときのみ真とする。
以下簡単のためU,Vは一次元の標準形であるとし、それ
ぞれ U=C0+ΣL:全てのループCLIL(C0,CLは定数) V=C′0+ΣL:全てのループC′LIL(C′0,C′Lは
定数) と表現されているものとする。
ぞれ U=C0+ΣL:全てのループCLIL(C0,CLは定数) V=C′0+ΣL:全てのループC′LIL(C′0,C′Lは
定数) と表現されているものとする。
また各ループLのループ繰り返し回数の上限をlLで表
わすことにする。
わすことにする。
以下上記の標準形及び記号を用いて配列添字比較部の処
理の実現方法を説明する。(処理501〜514)処理501に
おいてUとVの規準インダクション変数及び定数部を比
較して、Neceqを決定する。具体的には次の(a),
(b),(c)が成立するときのみNeceqを真とし、ひ
とつでも成立しなれければ偽とする。(a)C0=C′0
+C′L0×n,(b)L0及びL0の全ての外側ループLに
対してCL=C′L,(c)(b)以外の全てのループL
に対してCL=C′L=0。
理の実現方法を説明する。(処理501〜514)処理501に
おいてUとVの規準インダクション変数及び定数部を比
較して、Neceqを決定する。具体的には次の(a),
(b),(c)が成立するときのみNeceqを真とし、ひ
とつでも成立しなれければ偽とする。(a)C0=C′0
+C′L0×n,(b)L0及びL0の全ての外側ループLに
対してCL=C′L,(c)(b)以外の全てのループL
に対してCL=C′L=0。
処理502は処理501で決定されたNeceqに対する判定文で
ある。Neceqが真のときは処理510においてIndepを偽,Si
ndepを偽、Poseqを真,Sposeqを真とする。Neceqが偽の
ときは処理503を行なう。処理503はUとVからDiophant
us方程式Diophを立て、これを解く処理である。
ある。Neceqが真のときは処理510においてIndepを偽,Si
ndepを偽、Poseqを真,Sposeqを真とする。Neceqが偽の
ときは処理503を行なう。処理503はUとVからDiophant
us方程式Diophを立て、これを解く処理である。
Diophantus方程式Diophは以下のように定める。
まず、標準形Vを比較基準ループLSと、比較基準ルー
プ繰り返し回数nに従って次の式V′に変型する。
プ繰り返し回数nに従って次の式V′に変型する。
V′=C′0+C′L0×n +ΣL:L0及びL0の全ての外側ループC′LIL +ΣL:上記以外の全てのループC′LI′L ここにI′LはILと独立に変化する整数変数とし、その
とりうる値の範囲は0以上lL−1以下であるとする。D
iophantus方程式Diophは上記V′とUを用いて U=V′ で定める。Diophantus方程式Diophはユーグリッドの互
除法と同様の方法でその解を求めることができる。例え
ば、Diophantus方程式(即ち、整数係数の不定方程式) 6*I+13*J=7 ……(a) を解く方法は以下のようになる。
とりうる値の範囲は0以上lL−1以下であるとする。D
iophantus方程式Diophは上記V′とUを用いて U=V′ で定める。Diophantus方程式Diophはユーグリッドの互
除法と同様の方法でその解を求めることができる。例え
ば、Diophantus方程式(即ち、整数係数の不定方程式) 6*I+13*J=7 ……(a) を解く方法は以下のようになる。
(a)の変数I,Jの係数6と13について、これらは互い
に素である(従って(a)は整数解を持つ)。また、13
=6*2+1より(a)は次の(a)′に変形できる。
に素である(従って(a)は整数解を持つ)。また、13
=6*2+1より(a)は次の(a)′に変形できる。
6*(I+2*J)+J=7 ……(a)′ よって t=I+2*J ……(b) と置くと(a)′は次の(b)″となる。
6*t+J=7 ……(b)″ 従ってJ=7−6*tであり、これを(b)に代入して
整理すると I=13*t−14、J=7−6*t(tは任意の整数) となる。
整理すると I=13*t−14、J=7−6*t(tは任意の整数) となる。
処理503の出力はDiophantus方程式Diophが解をもつか否
かの情報と、解をもつ場合はその解である。処理504は
処理504でDiophantus方程式Diophが解をもつと判定され
た場合に真となる判定文である。処理504で偽と判定さ
れた場合は、処理511においてIndepを真として処理507
を実行する。処理504で偽と判定された場合は、処理505
を実行する。
かの情報と、解をもつ場合はその解である。処理504は
処理504でDiophantus方程式Diophが解をもつと判定され
た場合に真となる判定文である。処理504で偽と判定さ
れた場合は、処理511においてIndepを真として処理507
を実行する。処理504で偽と判定された場合は、処理505
を実行する。
処理505においては処理503で得られたDiophantus方程式
Diophの解空間の近似を行なう。
Diophの解空間の近似を行なう。
Diophantus方程式Diophの解空間の近似は次の2段階で
行なう。
行なう。
第1段階:比較基準ループL0に対してはl′L0をlL0
−nとおき、その他のループLに対しては、l′LをlL
−1とおく。このときDiophantus方程式Diophの解空間
を で近似する。
−nとおき、その他のループLに対しては、l′LをlL
−1とおく。このときDiophantus方程式Diophの解空間
を で近似する。
第2段階:Diophantus方程式Diophの解のうち、唯一の整
数変数パラメータの定数係数の線型結合で表わされるも
のが、 であり、それぞれ と表わされているものとする。ここで、 は全て整数定数であり、 は整数変数パラメータであるとする。このとき上記第1
段階の近似から連立不等式 が成立する。この連立不等式を各 の整数の範囲で解き、その解を とする。
数変数パラメータの定数係数の線型結合で表わされるも
のが、 であり、それぞれ と表わされているものとする。ここで、 は全て整数定数であり、 は整数変数パラメータであるとする。このとき上記第1
段階の近似から連立不等式 が成立する。この連立不等式を各 の整数の範囲で解き、その解を とする。
このとき、各ループLに対してlLmin,lLmaxを以下の
(i),(ii),(iii)に従って定義する。
(i),(ii),(iii)に従って定義する。
(iii) L=Li又はL=Li′となるiがないとき lLmin=0 lLmax=l′L 以上のlLmin,lLmaxを利用して、Diophantus方程式Diop
hの解空間を で近似する。
hの解空間を で近似する。
以上で処理505の説明を終る。
処理506では処理505で求めたDiophantus方程式Diophの
解空間の近似を用いてIndepを決定する。具体的には次
のようにIndepを決定する。すなわち、D=U−V′と
おいたとき、処理505で求めたDiophantus方程式の近似
された解空間中の任意のIL,I′Lに対して、D≠0が成
立するときのみIndepを真とする。例えば、 DO 10 i=1,10 (ループL1) DO 20 j=1,10 (ループL2) 20 A(i+3*j−5)=‥‥ (定義U) DO 30 k=1,10 (ループL3) 30 ‥‥=A(−i−4*k+5)(参照V)
10 CONTINUE に対し、比較基準ループをL1として、UとVの添字がL1
の同一繰り返し(即ち比較基準ループでの繰り返し回数
n=0)で一致するか否か判定するものとする。
解空間の近似を用いてIndepを決定する。具体的には次
のようにIndepを決定する。すなわち、D=U−V′と
おいたとき、処理505で求めたDiophantus方程式の近似
された解空間中の任意のIL,I′Lに対して、D≠0が成
立するときのみIndepを真とする。例えば、 DO 10 i=1,10 (ループL1) DO 20 j=1,10 (ループL2) 20 A(i+3*j−5)=‥‥ (定義U) DO 30 k=1,10 (ループL3) 30 ‥‥=A(−i−4*k+5)(参照V)
10 CONTINUE に対し、比較基準ループをL1として、UとVの添字がL1
の同一繰り返し(即ち比較基準ループでの繰り返し回数
n=0)で一致するか否か判定するものとする。
U、Vに対する配列添字標準形をU、Vで示すと、それ
ぞれ、 U=−1+IL1+3*IL2 V=−2*IL1−4*IL3′ となる。ここで、IL1,IL2,IL3′はそれぞれループL1,L
2,L3の基準インダクション変数である。
ぞれ、 U=−1+IL1+3*IL2 V=−2*IL1−4*IL3′ となる。ここで、IL1,IL2,IL3′はそれぞれループL1,L
2,L3の基準インダクション変数である。
Diophantus方程式Diophは −・1+IL1+3*IL2=−2*IL1−4*IL3′ となり、解は整数変数t1,t2により I=3*t1−2*t2−1 I=−2*t1+1 ……(a) I=t2 と表せる。IL1,IL2,IL3′に対するループ繰り返し回数
はすべて10であるから 0<=IL1<=9 0<=IL2<=9 ……(b) 0<=IL3′<=9 となる。
はすべて10であるから 0<=IL1<=9 0<=IL2<=9 ……(b) 0<=IL3′<=9 となる。
(これが、第2段階のDiophの解空間の近似である) 近似したDiophの解空間上で D=U−V=2*IL1+3*IL2+4*IL3′−1>=
3*1−1=2>0 であるため、Indepを真とする。(即ち、UとVの添字
がL1の同一繰り返しで一致する可能性がない)処理507
はPoseqをIndepの否定として決定する。
3*1−1=2>0 であるため、Indepを真とする。(即ち、UとVの添字
がL1の同一繰り返しで一致する可能性がない)処理507
はPoseqをIndepの否定として決定する。
処理508,処理509処理512〜処理515における処理は処理5
03〜処理507,処理511における処理と殆んど同様なので
説明は省略する。
03〜処理507,処理511における処理と殆んど同様なので
説明は省略する。
以上、本発明の一実施例を説明した。本実施例によれ
ば、多重ループ内の配列の2参照間のループ繰り返しに
関するデータ依存関係を強力に解析することが可能とな
る。すなわち第7図に示すような複数の増分処理を持つ
ようなインダクション変数jを含む配列添字に対しても
その挙動を正確に解析することが可能となる。この配列
添字解析部が出力した情報を使用すれば、自動ベクトル
化その他の最適化処理を行う際に強力な最適化が可能と
なり、目的プログラムの実行時間を短縮することができ
る。
ば、多重ループ内の配列の2参照間のループ繰り返しに
関するデータ依存関係を強力に解析することが可能とな
る。すなわち第7図に示すような複数の増分処理を持つ
ようなインダクション変数jを含む配列添字に対しても
その挙動を正確に解析することが可能となる。この配列
添字解析部が出力した情報を使用すれば、自動ベクトル
化その他の最適化処理を行う際に強力な最適化が可能と
なり、目的プログラムの実行時間を短縮することができ
る。
本発明によれば、ループ内で複数の増分処理を持つよう
なインダクション変数を含む配列添字の挙動を正確に解
析することが可能である。
なインダクション変数を含む配列添字の挙動を正確に解
析することが可能である。
第1図は本発明の技術手段である配列添字解析部の構成
図、第2図はインダクション変数標準化部及び配列添字
標準化部のフローチャート、第3図はインダクション変
数標準化処理のフローチャート、第4図はループ内の式
の標準化処理のフローチャート、第5図はインダクショ
ン変数標準化処理のための説明図、第6図は配列添字比
較部のフローチャート、第7図は従来の解析法の問題点
の説明図。 101……配列添字解析部、102……インダクション変数標
準化部、103……配列添字標準化部、104……配列添字比
較部。
図、第2図はインダクション変数標準化部及び配列添字
標準化部のフローチャート、第3図はインダクション変
数標準化処理のフローチャート、第4図はループ内の式
の標準化処理のフローチャート、第5図はインダクショ
ン変数標準化処理のための説明図、第6図は配列添字比
較部のフローチャート、第7図は従来の解析法の問題点
の説明図。 101……配列添字解析部、102……インダクション変数標
準化部、103……配列添字標準化部、104……配列添字比
較部。
Claims (1)
- 【請求項1】コンパイルするべきソースプログラムに対
してその制御の流れ及びループの構成をあらわす制御フ
ロー情報を求め、プログラム内の変数のデータの流れを
解析し、ループ内の変数への代入文で右辺が左辺への定
数の加減算を行なっているもの(この時、右辺の変数を
インダクション変数という)を検出するコンパイラの最
適化処理において、 インダクション変数を(1)ループの1回目の繰り返し
における値(初期値)及び、ループ繰り返し毎に増加す
る値(増分値)に分割して表現し(この表現を標準形と
いう)、 ループ内の配列参照の配列活字を操作して、その配列活
字を(1)で作成された標準形の線形結合として表現
し、 上記処理で作成された配列添字標準形を用いて、多重ル
ープ内の配列の2参照がループの同一の繰り返しにおい
て同一アドレスを参照するか否かの判定を行なうととも
に、ループの異なる繰り返しにおいて同一アドレスを参
照するか否かの判定を行なうことを特徴とする配列添字
解析方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP61219543A JPH0795274B2 (ja) | 1986-09-19 | 1986-09-19 | 配列添字解析方法 |
GB08721721A GB2196452A (en) | 1986-09-19 | 1987-09-15 | Analyzing a subscript of an array included in loop processing of a computer |
US07/097,196 US5109331A (en) | 1986-09-19 | 1987-09-16 | Compiling a source program by analyzing a subscript of an array included in a loop processing of a computer |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP61219543A JPH0795274B2 (ja) | 1986-09-19 | 1986-09-19 | 配列添字解析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS6375935A JPS6375935A (ja) | 1988-04-06 |
JPH0795274B2 true JPH0795274B2 (ja) | 1995-10-11 |
Family
ID=16737141
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP61219543A Expired - Fee Related JPH0795274B2 (ja) | 1986-09-19 | 1986-09-19 | 配列添字解析方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US5109331A (ja) |
JP (1) | JPH0795274B2 (ja) |
GB (1) | GB2196452A (ja) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0353819B1 (en) * | 1988-08-02 | 1997-04-09 | Koninklijke Philips Electronics N.V. | Method and apparatus for synchronizing parallel processors using a fuzzy barrier |
JPH04211830A (ja) * | 1990-02-05 | 1992-08-03 | Matsushita Electric Ind Co Ltd | 並列化コンパイル方式 |
CA2010056C (en) * | 1990-02-14 | 1998-05-12 | Charles Brian Hall | Method for improving the efficiency of arithmetic code generation in an optimizing compiler using machine independent update instruction generation |
JPH0475139A (ja) * | 1990-07-18 | 1992-03-10 | Toshiba Corp | ループ並列化装置 |
IL100989A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Analysis of inductive expressions in multilingual mehadoptimization |
JP3032031B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
US5450585A (en) * | 1991-05-15 | 1995-09-12 | International Business Machines Corporation | Compiler with delayed conditional branching |
JPH04367033A (ja) * | 1991-06-14 | 1992-12-18 | Hitachi Ltd | コンパイル方法 |
US5293631A (en) * | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
US5386562A (en) * | 1992-05-13 | 1995-01-31 | Mips Computer Systems, Inc. | Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop |
US6055627A (en) * | 1992-06-22 | 2000-04-25 | Hitachi, Ltd. | Compiling method of accessing a multi-dimensional array and system therefor |
US5522074A (en) * | 1992-12-14 | 1996-05-28 | Nec Corporation | Vectorization system for vectorizing loop containing condition induction variables |
US5452457A (en) * | 1993-01-29 | 1995-09-19 | International Business Machines Corporation | Program construct and methods/systems for optimizing assembled code for execution |
AU6774894A (en) * | 1993-04-26 | 1994-11-21 | Comdisco Systems, Inc. | Method for scheduling synchronous data flow graphs |
US5485619A (en) * | 1993-12-29 | 1996-01-16 | International Business Machines Corporation | Array variable transformation system employing subscript table mapping to scalar loop indices |
US5584027A (en) * | 1994-08-31 | 1996-12-10 | Motorola Inc. | Method and apparatus for finding induction variables for use in compiling computer instructions |
JP3317825B2 (ja) * | 1995-09-28 | 2002-08-26 | 富士通株式会社 | ループ最適化翻訳処理方法 |
US6286135B1 (en) * | 1997-03-26 | 2001-09-04 | Hewlett-Packard Company | Cost-sensitive SSA-based strength reduction algorithm for a machine with predication support and segmented addresses |
US6272676B1 (en) * | 1998-01-13 | 2001-08-07 | Intel Corporation | Method and apparatus for finding loop— lever parallelism in a pointer based application |
JP2004021425A (ja) * | 2002-06-13 | 2004-01-22 | Hitachi Ltd | コンパイラにおけるメモリ配置方式 |
JP5017410B2 (ja) * | 2010-03-26 | 2012-09-05 | 株式会社東芝 | ソフトウェア変換プログラム、および、計算機システム |
JP6547477B2 (ja) * | 2015-07-15 | 2019-07-24 | 富士通株式会社 | ソースコード最適化装置、ソースコード最適化プログラム及びオブジェクトコード生成方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0235349B2 (ja) * | 1983-07-08 | 1990-08-09 | Fujitsu Ltd | Ruupunaihairetsushoribekutorukashorihoshiki |
US4646256A (en) * | 1984-03-19 | 1987-02-24 | The Board Of Trustees Of The Leland Stanford Junior University | Computer and method for the discrete bracewell transform |
US4744028A (en) * | 1985-04-19 | 1988-05-10 | American Telephone And Telegraph Company, At&T Bell Laboratories | Methods and apparatus for efficient resource allocation |
US4710872A (en) * | 1985-08-07 | 1987-12-01 | International Business Machines Corporation | Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops |
JPH0685148B2 (ja) * | 1986-03-07 | 1994-10-26 | 株式会社日立製作所 | 配列デ−タフロ−解析装置 |
US4797729A (en) * | 1988-02-05 | 1989-01-10 | Eastman Kodak Company | System incorporating an error tolerant picture compression algorithm |
-
1986
- 1986-09-19 JP JP61219543A patent/JPH0795274B2/ja not_active Expired - Fee Related
-
1987
- 1987-09-15 GB GB08721721A patent/GB2196452A/en not_active Withdrawn
- 1987-09-16 US US07/097,196 patent/US5109331A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US5109331A (en) | 1992-04-28 |
JPS6375935A (ja) | 1988-04-06 |
GB8721721D0 (en) | 1987-10-21 |
GB2196452A (en) | 1988-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0795274B2 (ja) | 配列添字解析方法 | |
Brameier et al. | Basic concepts of linear genetic programming | |
Zhao et al. | Optimizing CNN-based object detection algorithms on embedded FPGA platforms | |
US5230053A (en) | Processor scheduling method for iterative loops | |
US5586020A (en) | Program transformation processing system and method | |
US5274812A (en) | Method of compiling source code into vectorized object code by performing a one-dimensional analysis on each dimension of a multi-dimensional array within a loop | |
JPH0814817B2 (ja) | 自動ベクトル化方法 | |
Gorlatch | Extracting and implementing list homomorphisms in parallel program development | |
Bhasker et al. | An optimizer for hardware synthesis | |
Hu et al. | An accumulative parallel skeleton for all | |
JPH11167492A (ja) | ループ飛び出し文を含むループに対する配列サマリ解析方法 | |
US9600777B2 (en) | Configuring and optimizing computational structure for a machine learning application using a tuple of vectors | |
JP2002527816A (ja) | プログラム最適化装置および方法 | |
Olsson et al. | Automatic synthesis of neurons for recurrent neural nets | |
Moyen et al. | Loop quasi-invariant chunk motion by peeling with statement composition | |
JP2002041496A (ja) | コンピュータ実施される方法、計算装置およびコンピュータ・プログラム製品 | |
JPH0540780A (ja) | ベクトル化処理方式 | |
JP3757825B2 (ja) | プロセッサ間通信削減方法と並列化コンパイラ装置並びにプログラム | |
JPH02236638A (ja) | レジスタ割付け管理方式 | |
CN112817599B (zh) | 软件函数形式语义及形式化证明脚本自动生成方法 | |
US20240135210A1 (en) | Replacing lambda expressions in a rete network with corresponding code classes | |
JP2956591B2 (ja) | ループ外への条件付き飛び出しがあるループの並列化方法及び装置 | |
JPH09319722A (ja) | 並列化コンパイル方法 | |
JP3235462B2 (ja) | whileループ構造変換装置 | |
Madden et al. | A general technique for automatically optimizing programs through the use of proof plans |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |