JP3235462B2 - whileループ構造変換装置 - Google Patents
whileループ構造変換装置Info
- Publication number
- JP3235462B2 JP3235462B2 JP11121796A JP11121796A JP3235462B2 JP 3235462 B2 JP3235462 B2 JP 3235462B2 JP 11121796 A JP11121796 A JP 11121796A JP 11121796 A JP11121796 A JP 11121796A JP 3235462 B2 JP3235462 B2 JP 3235462B2
- Authority
- JP
- Japan
- Prior art keywords
- loop
- expression
- control variable
- update
- repetition
- 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
た繰り返し数の計算が困難なwhileループを、繰り
返し数が容易に計算できるforループに変換するwh
ileループ構造変換装置に関する。
化を行うことにより処理速度を高速化するということは
従来から行われている。ところで、ループを並列化する
場合には、ループの入口点に於いてループの繰り返し数
を求めておくことが必要であり、従来は次のようにして
ループの繰り返し数を求めるようにしている。
Oループの場合は、ループの制御変数が存在し、更に、
制御変数の初期値,終値,増分値が記述されているた
め、繰り返し数=(終値−初期値+増分値)/増分値な
る演算を行うことにより、容易にループの繰り返し数を
求めることができる。
も記述可能なC言語のforループの場合は、forル
ープに与えられた第1式(初期化式),第2式(繰り返
し条件式),第3式(増分式)の3つの式から、ループ
の制御変数と、その初期値,終値,増分値とを求め、そ
れらに基づいて上記したと同様の演算を行うことにより
ループの繰り返し数を求めている(例えば、特開平5−
303499号公報)。
れたwhileループには、forループの第1式,第
3式に相当する式がなく、第2式に相当する繰り返し条
件式のみが存在している。そのため、whileループ
に於いては、forループのように制御変数及びその初
期値,終値,増分値を確定することができず、ループの
繰り返し数が求められなかった。従って、whileル
ープについては、従来、ベクトル化等の並列化を行うこ
とが困難であった。
れたwhileループをループ繰り返し数を求めること
が可能なforループに変換することにより、whil
eループに対してもベクトル化等の並列化を行えるよう
にすることにある。
するため、ソースファイルからwhileループを抽出
するループ構造解析部と、該ループ構造解析部が抽出し
たwhileループを、初期化式と繰り返し条件式と増
分式と前記whileループ中の制御変数に対する更新
式と対応する更新式とを含むforループであって、前
記初期化式として前記whileループの制御変数がル
ープに入る直前に保持していた値を、前記whileル
ープの制御変数とは異なる前記forループの制御変数
の初期値にする式を含み、前記繰り返し条件式として前
記forループの制御変数が前記whileループの繰
り返し条件式によって定まる終値に達したか否かを判定
する式を含み、前記増分式として前記whileループ
中に制御変数に対する更新式が複数含まれている場合
は、該複数の更新式それぞれに於ける、制御変数を増加
或いは減少させる値の合計値だけ前記forループの制
御変数を増加或いは減少させる式を含み、前記whil
eループ中の制御変数に対する更新式と対応する更新式
として前記whileループの制御変数を前記forル
ープの制御変数のインダクション変数とする式を含むf
orループに変換するループ構造変換部とを備えたもの
である。
が、ソースファイルからwhileループを抽出し、ル
ープ構造変換部が、上記whileループを、初期化式
と繰り返し条件式と増分式とwhileループ中の制御
変数に対する更新式と対応する更新式とを含むforル
ープに変換する。
対してベクトル化等の並列化を行うことができない場合
であっても、元のwhileループをそのままスカラで
実行するより処理を高速に行えるようにするため、前記
ループ構造変換部は、前記whileループ中のループ
内不変式を前記forループの直前に組み込む構成を備
えたものである。
が、whileループ中のループ内不変式をforルー
プの直前に組み込む。
図1を参照して詳細に説明する。
部11は、ソースファイル2を読み込み、whileル
ープ21の記述を探す。whileループ21の記述を
探し出すと、ループ構造解析部11は、それを変換対象
として繰り返し条件判定部12に渡す。whileルー
プ以外の記述は、そのまま、中間ファイル3に書き出
す。
ープ21の繰り返し条件式211が比較識別子を含むか
否かを、即ち図2に示す繰り返し条件式のパターンに合
致するかどうかを試験する。条件式の左辺及び右辺の式
は、変数,定数同士の演算から構成され、関数が含まれ
ていてはならない。もし、繰り返し条件式211が図2
に示すパターンに合致していなかったり、関数を含んで
いるならwhileループ21は、変換対象からはずさ
れ、元の形のままの形で中間ファイル3に書き出され
る。
部12に於いて繰り返し条件のパターンに合致するとみ
なされた繰り返し条件式211の中からループの制御変
数を探し出す。制御変数は、ループの繰り返し毎に一定
値ずつ単調増加或いは単調減少しなくてはならない。逆
に、制御変数以外の変数に関しては、ループ内で常に一
定の値を保たねばならない。よって、繰り返し条件式2
11中の、左辺及び右辺の式中に現れる変数の内、ルー
プ内で更新されるものがただ1つである時、それが制御
変数となる可能性がある。
211中に現れる変数のそれぞれについて、ループ内で
更新があるかどうかについて調べ、ただ1つの変数のみ
がループ内で更新されており、それ以外の変数について
は、ループ内で更新されることがない場合のみ、この変
数を制御変数として抽出する。制御変数が抽出できない
場合には、このwhileループ21を変換対象のルー
プからはずし、元の形のまま中間ファイル3に書き出
す。
数抽出部13が抽出した制御変数の更新式212につい
て検査を行い、更新式212が増分式であるかどうかを
試験する。更新式212が増分式であるかどうかを見極
めるために、増分式判定部14は、更新式212が図3
に示すような増分式のパターンに合致しているかどうか
を試験する。増分式中に現れるループ内不変式は、変
数,定数同士の演算で構成されるが、ループ内では常に
一定の値とならねばならない。このため、ループ内不変
式の中に変数が存在する場合、この変数は、ループ内で
更新があってはならない。また、増分式は、ループの繰
り返し毎に必ず実行されなければならない。よって、増
分式は、条件文下の実行文であってはならない。増分式
判定部14は、併せてこの条件の試験も行う。
新式がwhileループ中の複数の箇所に現れても、f
orループへの変換が可能であることが挙げられるが、
この場合、制御変数についての全ての更新式〔1〕〜更
新式〔n〕が上記した条件を満たしていなくてはならな
い。もし、上記の条件に当てはまらない制御変数の更新
式が1つでも存在する場合は、whileループ21は
変換の対象からはずされ、中間ファイル3にそのまま書
き出される。
定部12が繰り返し条件式のパターンに合致していると
判定した繰り返し条件式211と、制御変数抽出部13
が抽出した制御変数と、増分式判定部14が増分式であ
ると判定した更新式212とに基づいて、whileル
ープ21をforループ31,終値の計算式313,増
分値の計算式314に変換し、それを中間ファイル3に
書き出す。
RTRAN言語のDOループに比べて記述の自由度が高
く、DOループのように制御変数の値域によってループ
が繰り返されるもの以外にも様々なループを記述でき
る。しかし、このようなループでは、ループの繰り返し
数が不明となり、ベクトル化,並列化といった最適化を
行えなくなってしまう。そこで、forループ31は、
DOループと同様に制御変数を用いてループを構成し、
その初期値,終値,増分値が明確になるようにする。
数は、元のwhileループとは異なるforループの
制御変数を用いる。元のwhileループに使われてい
た制御変数は、forループの制御変数のインダクショ
ン変数(ループの制御変数の、ループの繰り返し毎の増
加或いは減少に比例して増加減少する変数で、制御変数
の一次式で表される)となる。
2式3112,第3式3113は、次のようになる。
数に対して初期値を与える初期化式であり、ループの入
口で1回だけ実行される。
し条件式で、ループが繰り返される度に評価され、評価
結果が偽になると、ループは終了する。ここでは、fo
rループの制御変数が、終値に達したかどうかを評価す
る式を与える。
で、ループの繰り返し毎にforループの制御変数を一
定の値だけ増加或いは減少させる。
る。
与える式であり、元のwhileループに於いてループ
に入る直前でwhileループの制御変数に保持されて
いた値を初期値とするものである。つまり、第1式31
11は、下記(A)のようになる。
中のある制御変数を条件式の左辺に移項し、それ以外の
ループ内で一定の値をとる変数,定数を右辺に移項し、
下記(B)に示すように変形する。
で常に一定の値をとるので、ループの繰り返し毎に計算
されるのでは効率が悪い。そこで、ループ内不変式中に
変数を含む場合には、不変式のとる値を終値とし、終値
の計算式313を下記(C)に示すものとおいて、この
式をforループの前で予め計算しておく。
(D)のように書き改められる。
forループの制御変数に置き換えたものを第2式31
12とする。つまり、第2式3112は下記(E)に示
すものとなる。
変数の更新式212を、forループの制御変数を使っ
てforループに於ける更新式312に書き改める。
今、元のwhileループ中にn個の更新式212が存
在するものとし、それらは、次のようなパターンになっ
ていることが、増分式判定部14で判明している。
変数+ループ内不変式〔1〕 更新式〔2〕: whileループの制御変数=whileループの制御
変数+ループ内不変式〔2〕 : 更新式〔n〕: whileループの制御変数=whileループの制御
変数+ループ内不変式〔n〕
用いて次のように書き換えることができる。
+ループ内不変式〔1〕 更新式〔2〕: whileループの制御変数=forループの制御変数
+ループ内不変式〔1〕+ループ内不変式〔2〕 : 更新式〔n〕: whileループの制御変数=forループの制御変数
+ループ内不変式〔1〕+ループ内不変式〔2〕+…+
ループ内不変式〔n〕
御変数以外のループ内不変の変数や、定数同士の演算か
らなる式で、ループ内で常に一定の値をとる。そこで、
各増分式の、ループ内不変式のとる値を増分値とし、n
個の増分値の計算式314をそれぞれ、 増分値〔1〕=ループ内不変式〔1〕 増分値〔2〕=増分値〔1〕+ループ内不変式〔2〕 増分値〔3〕=増分値〔2〕+ループ内不変式〔3〕 : 増分値〔n〕=増分値〔n−1〕+ループ内不変式
〔n〕 とおいて、これらの式をforループの前で予め計算し
ておく。この増分値を使って更新式を書き直すことによ
り、forループ内に於ける、元のwhileループの
制御変数の更新式312が得られる。
+増分値〔1〕 更新式〔2〕: whileループの制御変数=forループの制御変数
+増分値〔2〕 更新式〔3〕: whileループの制御変数=forループの制御変数
+増分値〔3〕 : 更新式〔n〕: whileループの制御変数=forループの制御変数
+増分値〔n〕
の更新式の変形である。次に、forループの制御変数
に対する増分式(第3式)3113であるが、これは、
増分値〔n〕を用いて下記(F)のように表される
ループ31,終値の計算式313,増分値の計算式31
4へと変換される。
読み込んだソースファイル2からwhileループの記
述を探し出す。図4はループ構造解析部11が探し出し
たwhileループ4の一例を示した図である。尚、w
hileループ以外の記述は、そのまま中間ファイル3
に書き出される。
析部11が探し出した、図4に示すwhileループ4
中の繰り返し条件式41が、図2に示した繰り返し条件
式のパターンに合致するかどうかを試験する。この例の
繰り返し条件式41は、図2のパターンに合致してい
る。
1中に現れる変数の中から、制御変数となるものを探し
出す。この例の場合、繰り返し条件式41中に現れる変
数は、i,j,kの3つである。この内、ループの中で
更新されているものがただ1つであれば、その変数が制
御変数となる可能性がある。ここで、制御変数抽出部1
3は、変数iが唯一ループ内で更新されており、変数
j,kの更新は無いことから、変数iを制御変数として
抽出する。
更新式421,422,423が増分式であるかどうか
を試験する。これらの更新式は、図3に示す増分式のパ
ターンに合致してしなければならない。また、更新式中
に現れるループ内不変式は変数,定数同士の演算で構成
されるが、ループ内では常に一定の値とならねばならな
い。ループ内の3箇所に現れる更新式421,422,
423中には、i以外にもm,nの2つの変数が存在す
るが、これら2つの変数m,nは、ループ内部で更新さ
れることはなく、常に一定の値をとる。このため、3つ
の更新式421,422,423は、どれも図3の増分
式のパターンに合致しており、増分式である。
eループ4を図5のforループ5,終値の計算式5
3,増分値の計算式541,542,543に変換す
る。forループ5には、whileループ4の制御変
数iとは異なったforループ用の制御変数を用いる。
ここでは、そのforループ用の制御変数をINDXと
する。forループ5に与える第1式511,第2式5
12,第3式513はそれぞれ次のように導かれる。
する式で、元のwhileループの入口に於ける変数i
の値を制御変数INDXに与える。従って、forルー
プの第1式511は、下記(G)に示すものとなる。
式41は、 3+k>j+i であり、制御変数iを繰り返し条件式の左辺に移項し、
それ以外のループ内で一定の値をとる変数,定数を右辺
に集めると、 i<3+k−j となる。ここで、この繰り返し条件式の右辺の3+k−
jは、ループ内で不変式であるから、ループの外に追い
出すことができる。そこで、終値をTERMとすると、
終値の計算式53は、 TERM=3+k−j となる。この式をforループに入る直前で計算してお
く。更に、このTERMを使って、繰り返し条件式を、 i<TERM とし、このwhileループの制御変数iをforルー
プの制御変数INDXで置き換えると、 INDX<TERM が得られる。これが、forループ5の第2式512と
なる。
の更新式421,422,423を、forループの制
御変数INDXを用いて書き直す。
順に、 更新式〔1〕… i=i+n+1 …(421) 更新式〔2〕… i=i+m …(422) 更新式〔3〕… i=i+1 …(423) の3つの更新式421,422,423が存在する。こ
れらをforループの制御変数INDXを使って書き直
すと、下記のようになる。
式を増分値としてまとめる。増分値をINCR1,IN
CR2,INCR3とすると、 増分値〔1〕… INCR1=n+1 …(541) 増分値〔2〕… INCR2=INCR1+m …(542) 増分値〔3〕… INCR3=INCR2+1 …(543) となる。これらの式541,542,543は、for
ループの直前で計算しておく。
と、 更新式〔1〕… i=INDX+INCR1 …(521) 更新式〔2〕… i=INDX+INCR2 …(522) 更新式〔3〕… i=INDX+INCR3 …(523) が得られる。これらの更新式が、forループ5に於け
る、元のwhileループの制御変数iの更新式52
1,522,523となる。
であるが、その増分値は、増分値INCR3を用いて、 INDX=INDX+INCR3 …(513) となる。以上で、図4のwhileループ4は、図5の
forループ5へと変換される。
3を既存のベクトル化,或いは並列化コンパイラに与え
ることによって、ループのベクトル化或いは並列化が可
能になる。
次のような効果がある。
困難であったwhileループをベクトル化等の並列化
の対象にすることができることである。その理由は、f
orループの繰り返し条件式に相当する式しか持たない
whileループを、初期化式,繰り返し条件式,増分
式を含み、従来の技術で繰り返し数を求めることができ
るforループに変換するループ構造変換部を備えてい
るからである。
変数を更新する更新式が組み込まれているwhileル
ープであっても、ベクトル化等の並列化の対象にするこ
とができることである。その理由は、forループの増
分式を、whileループ中に制御変数に対する更新式
が複数含まれている場合は、上記複数の更新式それぞれ
に於ける、制御変数を増加或いは減少させる値の合計値
だけforループの制御変数を増加或いは減少させる式
としたからである。
leループが、その実行文中にベクトル化等の並列化に
不向きな実行文を含むものであり、forループに変換
しても上記実行文のためにベクトル化等が不可能であ
り、スカラでしか実行できないものであったとしても、
元のwhileループのままスラカで実行するより高速
に実行されることである。その理由は、元のwhile
ループに於けるループ内不変式をforループの直前に
組み込むようにしており、forループ中の繰り返し条
件式や増分式が、元のwhileループより簡潔なもの
になるためであり、たとえ、forループをスカラによ
り実行しなくてはならない場合であっても元のwhil
eループをスラカにより実行する場合よりも高速にな
る。
Claims (3)
- 【請求項1】 ソースファイルからwhileループを
抽出するループ構造解析部と、 該ループ構造解析部が抽出したwhileループを、初
期化式と繰り返し条件式と増分式と前記whileルー
プ中の制御変数に対する更新式と対応する更新式とを含
むforループであって、前記初期化式として前記wh
ileループの制御変数がループに入る直前に保持して
いた値を、前記whileループの制御変数とは異なる
前記forループの制御変数の初期値にする式を含み、
前記繰り返し条件式として前記forループの制御変数
が前記whileループの繰り返し条件式によって定ま
る終値に達したか否かを判定する式を含み、前記増分式
として前記whileループ中に制御変数に対する更新
式が複数含まれている場合は、該複数の更新式それぞれ
に於ける、制御変数を増加或いは減少させる値の合計値
だけ前記forループの制御変数を増加或いは減少させ
る式を含み、前記whileループ中の制御変数に対す
る更新式と対応する更新式として前記whileループ
の制御変数を前記forループの制御変数のインダクシ
ョン変数とする式を含むforループに変換するループ
構造変換部とを備えたことを特徴とするwhileルー
プ構造変換装置。 - 【請求項2】 前記ループ構造変換部は、前記whil
eループ中のループ内不変式を前記forループの直前
に組み込む構成を備えたことを特徴とする請求項1記載
のwhileループ構造変換装置。 - 【請求項3】 前記ループ構造解析部が抽出したwhi
leループ中の繰り返し条件式に比較条件子が含まれて
いるか否かを判定する繰り返し条件判定部と、 該繰り返し条件判定部で比較条件子が含まれていると判
定された繰り返し条件式から前記whileループ制御
変数を抽出する制御変数抽出部と、 該制御変数抽出部が抽出したwhileループの制御変
数に対する全ての更新式が増分式のパターンに合致する
か否かを判定する増分式判定部とを備え、 前記ループ構造変換部は、前記増分式判定部で全ての更
新式が増分式のパターンに合致すると判定されたwhi
leループのみを処理対象にする構成を備えたことを特
徴とする請求項2記載のwhileループ構造変換装
置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11121796A JP3235462B2 (ja) | 1996-04-08 | 1996-04-08 | whileループ構造変換装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11121796A JP3235462B2 (ja) | 1996-04-08 | 1996-04-08 | whileループ構造変換装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09282171A JPH09282171A (ja) | 1997-10-31 |
JP3235462B2 true JP3235462B2 (ja) | 2001-12-04 |
Family
ID=14555503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11121796A Expired - Fee Related JP3235462B2 (ja) | 1996-04-08 | 1996-04-08 | whileループ構造変換装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3235462B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5038760B2 (ja) * | 2007-03-28 | 2012-10-03 | 株式会社東芝 | ソースコード変換装置及びソースコード変換方法 |
-
1996
- 1996-04-08 JP JP11121796A patent/JP3235462B2/ja not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
R.Allen他,"Compiling C for Vectorization,Parallelization,and Inline Expansion",ACM SIGPLAN Notices,1988,Vol.23,No.7,p241−249 |
情報処理学会第45回(平成4年後期)全国大会講演論文集,p.5−51〜5−52 |
Also Published As
Publication number | Publication date |
---|---|
JPH09282171A (ja) | 1997-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0533813B1 (en) | Method for representing scalar data dependencies for an optimizing compiler | |
Wang et al. | Bmat-a binary matching tool for stale profile propagation | |
Balazinska et al. | Advanced clone-analysis to support object-oriented system refactoring | |
US4773007A (en) | Complier code optimization method for a source program having a first and second array definition and use statements in a loop | |
EP0669574A2 (en) | Program transformation processing system and method | |
US5109331A (en) | Compiling a source program by analyzing a subscript of an array included in a loop processing of a computer | |
JPH0814817B2 (ja) | 自動ベクトル化方法 | |
US5067068A (en) | Method for converting an iterative loop of a source program into parellelly executable object program portions | |
US5790859A (en) | Method of, system for, and computer program product for efficient identification of private variables in program loops by an optimizing compiler | |
JP2004288163A (ja) | 代入ステートメントのリダクション変数の検出方法、システムおよびプログラム製品 | |
CN112948828A (zh) | 一种二进制程序恶意代码检测方法、终端设备及存储介质 | |
US5522074A (en) | Vectorization system for vectorizing loop containing condition induction variables | |
US6282704B1 (en) | Method for analyzing array summary for loop including loop exit statement | |
JP3235462B2 (ja) | whileループ構造変換装置 | |
Arutunian et al. | A method to evaluate binary code comparison tools | |
CN114969446B (zh) | 一种基于敏感度模型的分组混合精度配置方案搜索方法 | |
US9274929B2 (en) | Constraint derivation in context following for use with object code insertion | |
JP3032030B2 (ja) | ループ最適化方法及び装置 | |
JP3028821B2 (ja) | 並列化コンパイル方法 | |
EP0423597A2 (en) | Cross iteration common sub-expression elimination | |
JP3311774B2 (ja) | コンパイラ装置 | |
JP2801193B2 (ja) | インダクション変数のベクトル化処理装置 | |
JP3311775B2 (ja) | ポインタベクトル化方式 | |
US20020038452A1 (en) | Constant bit folding and propagation | |
JPS6367676A (ja) | 一般ル−プベクトル化処理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080928 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080928 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090928 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090928 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100928 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110928 Year of fee payment: 10 |
|
LAPS | Cancellation because of no payment of annual fees |