JP3477137B2 - 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体 - Google Patents

最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体

Info

Publication number
JP3477137B2
JP3477137B2 JP2000059506A JP2000059506A JP3477137B2 JP 3477137 B2 JP3477137 B2 JP 3477137B2 JP 2000059506 A JP2000059506 A JP 2000059506A JP 2000059506 A JP2000059506 A JP 2000059506A JP 3477137 B2 JP3477137 B2 JP 3477137B2
Authority
JP
Japan
Prior art keywords
value
iteration
arithmetic expression
sequence
expression
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 - Lifetime
Application number
JP2000059506A
Other languages
English (en)
Other versions
JP2001249818A (ja
Inventor
一 小川
秀一 高山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Priority to JP2000059506A priority Critical patent/JP3477137B2/ja
Priority to US09/798,490 priority patent/US6993756B2/en
Publication of JP2001249818A publication Critical patent/JP2001249818A/ja
Application granted granted Critical
Publication of JP3477137B2 publication Critical patent/JP3477137B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining

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)
  • Advance Control (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、ループ処理内に演
算式を含むソースプログラムを命令列を含む目的プログ
ラムに翻訳するコンパイラに用いられる最適化装置及び
最適化プログラムを記録したコンピュータ読み取り可能
な記録媒体に関し、特に、命令の並列実行を行うプロセ
ッサを対象としたコードを生成するよう、最適化を行う
技術の改良に関する。
【0002】
【従来の技術】いわゆるfor文、while文等を用いて記述
されたループ処理の実行効率を如何に向上させるかは、
言語処理系の技術分野において、古くから議論されてき
た研究テーマの1つである。一般にループ処理は、for
文、while文等の制御文と、1つの以上の演算式からなる
ボディとからなり、制御文にて規定された繰り返し条件
が満たされるまで、ボディが繰り返し実行されることと
なる。こうしたループ処理における実行単位はイタレー
ションと呼ばれ、イタレーションは制御文に示された繰
り返し数と同じ数だけ派生することとなる。仮に制御文
がボディを100回繰り返すよう記述されているのなら、
当該ボディから100個のイタレーションが派生すること
となる。
【0003】ループ処理の実行効率を向上させるには、
かかる複数のイタレーションの全部又は一部を並列に実
行させればよいことはいうまでもない。イタレーション
の並列実行を実現するには、ループ処理のボディに対し
て、ループアンローリング或はソフトウェアパイプライ
ニングといった最適化手法が有効であることが、従来よ
り知られている。
【0004】前者のループアンローリングは、ループ内
のボディに含まれる演算式を複数の演算式に書き換え
て、ループ処理の実行効率を向上させる最適化手法であ
る。図10(a)は、配列bの要素を用いて配列aの要素
の定義を行う演算式『a[i]=b[i]*(x+10)』を、変数iが1
00になるまで繰り返し行うループ処理である。このルー
プ処理に対してループアンローングを行う場合、図1
0(b)に示すようにループボディ内の演算式『a[i]=b
[i]*(x+10)』を『a[i]=b[i]*(x+10)』と、『a[i+1]=b[i
+1]*(x+10)』という2つの演算式に書き換える。また図
10(a)において誘導変数iは、『i++』に示すよう
に、『1』ずつインクリメントされていたが、図10
(b)では、これが『i+=2』に示すように、『2』ずつ
インクリメントしてゆくように書き換えられている。
【0005】図10(a)では、ループ処理を一回実行
する度に、配列aの配列要素が1つずつ決定されていった
が、図10(b)では、ループ処理を一回実行する度
に、『a[i]=b[i]*(x+10)』という演算式と、『a[i+1]=b
[i+1]*(x+10)』という演算式とが並列に実行することが
でき、この場合配列aの配列要素が2つずつ決定されてゆ
くことになる。
【0006】後者のソフトウェアパイプライニングは、
コンパイラがループボディをパイプラインに適合するよ
うな機械語命令に翻訳することにより、性能向上を図ろ
うとする最適化手法である。ソフトウェアパイプライニ
ング技術がどのように行われるかを図11を参照しなが
ら説明する。図11(a)は、ループボディの一例であ
り、このボディは命令A、命令B、命令Cからなる。これ
らの命令は、ボディ内にデータ依存関係を有しているた
め並列実行することが不可能であると仮定する。図11
(b)は、図11(a)に示す命令列の5回の繰り返し
を、パイプラインにて行う場合の一例を示す図である。
本図の縦軸は時間軸であり、横軸は反復数を示す。本図
では、この横軸に1回〜5回の反復数が記されているの
で、5つのイタレーションが生成されることとなる(こ
れらのイタレーションを一巡目のイタレーション、二巡
目のイタレーション、三巡目のイタレーション、四巡目
のイタレーション・・・・・という)。
【0007】時間1、2においては、一巡目のイタレー
ションの命令A、命令Bと、二巡目のイタレーションの命
令Aとがそれぞれのパイプラインに投入されているが、
残るイタレーションについては何れの命令も投入されて
いない。イタレーションのうち、パイプラインに未投入
のものがある状態はプロログと呼ばれる。時間3〜5
は、一巡目のイタレーションにおける命令C、二巡目の
イタレーションにおける命令B、命令C、三巡目のイタレ
ーションにおける命令A〜命令C、四巡目のイタレーショ
ンにおける命令A〜命令B、五巡目のイタレーションにお
ける命令Aがパイプラインに投入されている状態であ
り、定常状態と呼ばれる。時間6〜7は、四巡目のイタ
レーションにおける命令Cと、五巡目のイタレーション
における命令B〜命令Cのパイプラインへの投入がなされ
ている状態であり、イタレーションに含まれる命令実行
が終えてない状態なので、エピログと呼ばれる。
【0008】図11(b)のような命令の並列実行を行
うために、コンパイラは図11(c)のような機械語命
令列(尚、本明細書においては命令列をアセンブラコー
ドで表記するものとする。)を出力する。アセンブラコ
ード中の「E」は、エンドビットを示しており、「E」ま
でが並列に実行されることを示している。プロログにつ
いては、一巡目のイタレーションが命令Aと、エンドビ
ットとに翻訳され、二巡目のイタレーションが命令A、
命令B、エンドビットとに翻訳されていることがわか
る。エピログについては、五巡目のイタレーションが命
令Cとエンドビットとに翻訳され、四巡目のイタレーシ
ョンが命令Bと、命令Cと、エンドビットとに翻訳されて
いることがわかる。
【0009】定常状態の部分については、命令A、命令
B、命令Cと、分岐命令「bt L1」と、エンドビットとに
翻訳され、命令A、命令B、命令Cを所定の数だけループ
するように記述されていることがわかる。ソフトウェア
パイプライニングにおいて以上のような命令を生成する
ことにより、ループ処理の実行性能を高めることができ
る。
【0010】
【発明が解決しようとする課題】ところで上記従来技術
におけるループアンローリングは、運搬依存関係がイタ
レーション間に存在しており、イタレーションの同時実
行が不可能である場合、ループ処理の高速化が不可能と
なるという問題点がある。またソフトウェアパイプライ
ニングにおいては、あるイタレーションにより導かれた
値が、次巡目のイタレーションにより使用されている場
合等、互いに近接しているイタレーション同士で依存関
係が発生している場合、実行効率を向上させることがで
きないという問題点がある。
【0011】例えば、図12(a)のようなソースプロ
グラムに、ソフトウェアパイプライニングを適用する場
合を考える。図12(a)のソースプログラム中のルー
プボディを命令列に変換すると、図12(b)に示すア
センブラコードのようになる。本図に示す命令を説明す
ると、命令Aである『load a[i],r0』は、配列要素a[i]
の値をr0に格納し、命令Bである『mul 3,r0』はr0に3を
乗算し、命令Cである『add 2,r0』は、r0に2を加算し、
命令Dである『store r0,a[i+1]』は、r0の値を配列要素
a[i+1]を格納する。そして、iの値を更新し、iの値を繰
り返し条件として、L1への条件分岐を行う(尚、load命
令、store命令における配列a[i]、a[i+1]は、便宜上、
ソースプログラム中の変数を用いている。)。
【0012】この場合、命令Aのload命令は、前のイタ
レーションの命令Dにおいて格納されるアドレスから値
をロードするため、前のイタレーションの命令Dのstore
命令が完了するまで次のイタレーションにおける命令A
を実行することができない。そのためソフトウェアパイ
プライニングを行っても、図12(c)のように、ある
イタレーションの実行を始めてから、次のイタレーショ
ンの実行を始めるまでに4サイクルの実行遅延が現れる
こととなる。
【0013】本発明の目的は、あるイタレーションによ
り導かれた値が、直後のイタレーションにより使用され
ているような近接した運搬依存関係を有するループ処理
をパイプラインにて実行する場合の実行遅延を解消する
ことができる最適化装置及び最適化プログラムを記録し
たコンピュータ読み取り可能な記録媒体を提供すること
である。
【0014】
【課題を解決するための手段】上記目的を達成するため
に本発明に係る最適化装置は、i回目の繰り返し時に演
算式により定義される値が、同ボディの繰り返しを何回
経た後に参照されるかを解析することにより、演算式に
て値が定義されてから参照されるまでの依存距離xを得
る解析手段と、ボディをパイプラインにて繰り返し実行
させる場合の命令間の投入間隔を、前記演算式に対応す
る命令列と、依存距離xとに基づいて推測する推測手段
と、投入間隔が、投入間隔の最小値より大きい場合、i+
y回目(y>x)の繰り返し時に参照されるべき値をi回目の
繰り返し時に定義するよう、演算式を書き換え、1回目
からy-1回目までの繰り返し時に参照されるべき初期値
の定義式をループ処理の前に配置する書換手段とを備
え、前記数値yは、解析手段の解析により得られた依存
距離xと、推測手段により推測された投入間隔とに基づ
き得られる依存距離の目標値であることを特徴としてい
る。
【0015】
【発明の実施の形態】以下、本発明に係る最適化装置の
2つの実施形態について図面を参照しながら説明する。 (第1実施形態)図1は、第1実施形態に係る最適化装
置を備えるコンパイラの内部構成を示す図である。本図
において、コンパイラは、原始プログラム記憶部40
1、依存解析部402、運搬依存情報記憶部403、依
存距離拡大部404、変換プログラム記憶部405、コ
ード生成部406、オブジェクトコード記憶部407か
らなり、このうち最適化装置の構成要素となるのは、依
存解析部402、運搬依存情報記憶部403、依存距離
拡大部404、変換プログラム記憶部405である。
【0016】原始プログラム記憶部401は、原始プロ
グラムを記憶している。この原始プログラムは、高級プ
ログラミング言語の文法に従って記述された複数の演算
式を含んでいる。演算式は、記号『=』の右辺に示され
る演算子と、被演算子とを用いて、記号『=』の左辺に
示される変数の値を定義するものである。演算式は、配
列型変数を処理する1つ以上のループ処理のボディに配
されるものと、ボディ以外に配されるものがある。この
ループ処理における繰り返し条件は、誘導変数にて記述
され、配列型変数における配列要素のそれぞれは添字式
にて特定される。※図2(a)は、原始プログラムの一
例であり、先頭行の『a[0]=x;』は、0番目の配列要素に
変数xの値を定義するものである。次行のfor文は、1番
目から99番目までの配列要素に値を定義するループ処理
の繰り返し条件を規定する制御文である。『for(i=0;i<
100;i++)』の記述からも明らかなように、誘導変数iは
初期値として0が設定され、i++より、ループ処理の実行
が一巡する度に、誘導変数iは、1ずつインクリメントし
てゆく。更に『i<100』により、このループ処理の実行
は、100回巡回することがわかる。また配列要素は誘導
変数iを含む添字式にて特定されていることがわかる。
【0017】運搬依存情報記憶部403は、原始プログ
ラムにどれだけのループ運搬依存が存在するかを示す運
搬依存情報を複数記憶している。ここで「ループ運搬依
存」とは、ループの各イタレーション間に存在する依存
関係をいい、ボディの命令間に存在する依存関係ではな
い。具体的にいうと、ループ運搬依存は、あるイタレー
ション内の演算式の実行により導かれた値が、次巡以降
のイタレーションにより使用されるために現れる依存関
係であり、かかる依存関係が存在している場合、定義側
の演算式の実行より、参照側の演算式が先行することは
許されない。
【0018】運搬依存情報は、配列要素を参照している
演算式と、配列要素を定義している演算式との組のそれ
ぞれについてのループ運搬依存を示す情報であり、かか
る配列要素の「参照側演算式」と、配列要素の「定義側
演算式」と、「依存距離」と、「投入間隔」とからな
る。「依存距離」とは、ループ運搬依存がイタレーショ
ン間に存在する場合、その依存する命令間のイタレーシ
ョン数の差を示す。
【0019】「投入間隔」とは、パイプラインにおける
実行遅延の一つであり、あるイタレーションの実行を開
始してから、次のイタレーションの実行を開始するまで
の間隔を意味する。これが短ければ短い程、ループ処理
をパイプラインで実行させた場合の実行効率が向上す
る。 ※図3は運搬依存情報の一例を示す図であり、運搬依存
情報1,2,3,4という4つの運搬依存情報が例示されている
ことがわかる。運搬依存情報1 における参照側の演算式
は『a[i+1]=a[i]*3+2』であり、定義側の演算式と一致
していることがわかる。また、これら参照側−定義側の
演算式間の依存距離は『1』、投入間隔は『4』であるこ
とがわかる(尚、以降の説明では、運搬依存情報1のよ
うに参照側の演算式と、定義側の演算式とが一致してい
る場合であっても、表現の統一を図るため、これを『演
算式の組み』と称呼するものとする。)。
【0020】運搬依存情報2における参照側の演算式は
『z=b[i]+x/50』であり、定義側の演算式は『b[i+5]=32
0*z+y』であるので、異なる演算式間で、ループ運搬依
存が存在していることがわかる。依存解析部402は、
原始プログラム記憶部401に記憶されている原始プロ
グラムに対して配列の添字式解析を行うことによりイタ
レーション間にループ運搬依存が存在するかどうかを解
析し、ループ運搬依存が存在する場合、このループ運搬
依存を示す運搬依存情報を生成して、運搬依存情報記憶
部403に書き込む。かかる依存解析部402の機能主
体は、図4のフロ−チャ−トに示す処理手順を記述した
プログラムであるので、以降図4のフロ−チャ−トを参
照して、依存解析部402における処理内容について説
明する。このフロ−チャ−トにて行われるループ運搬依
存の解析は、「スーパーコンパイラ(オーム社)」など
の文献で述べられている配列の添字式解析技術を応用し
たものである。
【0021】ステップS1は、ステップS2と一対にな
って、ステップS3からステップS10までの処理を原
始プログラムに含まれるループ処理のそれぞれについて
繰り返し行わせるためのループ制御文である。つまり、
原始プログラムにいわゆるfor文、while文等を用いて記
述されたループ処理が複数含まれている場合、ステップ
S3からステップS10までの処理は、個々のループ処
理のそれぞれに対して行われることとなる。
【0022】ステップS3においてループ処理が配列要
素を定義している演算式を含むか否かを判定する。かか
る演算式を含まないループ処理については、ステップS
5からステップS10までの処理を行うことなくステッ
プS2に移行する。ループ処理がかかる演算式を含む場
合、ステップS4に移行する。ステップS4では、運搬
依存関係の存否を判定する。具体的にいうなら、定義さ
れた配列要素が次巡以降のイタレーションにより使用さ
れているか否かを判定する。ループ処理により配列要素
が定義されてはいるが、配列要素が次巡以降のイタレー
ションにより使用されていない場合、ループ運搬依存は
存在しないので、ステップS5からステップS10まで
の処理を行うことなくステップS2に移行する。
【0023】ループ運搬依存が存在する場合、ステップ
S5において配列要素を定義している演算式において配
列要素が誘導変数の線形式を含む添字式により特定され
ているか否かを判定する。配列要素が誘導変数の非線形
式を含む添字式により特定されている場合、依存距離が
不定長となり、添字式解析の適用外となる。よって添字
式が非線形式である場合、ステップS6からステップS
10までの処理を行うことなくステップS2に移行す
る。配列要素が誘導変数の線形式を含む添字式により特
定されている場合、ステップS6に移行する。
【0024】ステップS6では、配列要素を参照してい
る演算式において配列要素が誘導変数の線形式を含む添
字式により特定されているか否かを判定する。参照側の
配列要素が誘導変数の非線形式を含む添字式により特定
されている場合も添字式解析の適用外となるのでステッ
プS6からステップS10までの処理を行うことなくス
テップS2に移行する。
【0025】ステップS7において定義側の添字式から
参照側の添字式までのデスプレースメントを、双方の線
形式に基づいて算出して、依存距離を得る。例えば、演算
式『a[i+1]=a[i]*3+2;』におけるデスプレースメント
は、定義側の添字式が『i+1』であり、参照側の添字式
が『i』なのでデスプレースメントは『1』となり、依存
距離『1』を得る。
【0026】ステップS8において、定義側の演算式か
ら参照側の演算式までの文を一時的に命令列に置き換え
ることにより、配列要素を定義する命令から配列要素を
参照する命令までの命令数を推測する。ステップS9に
おいて依存距離と、推測された命令数とに基づいて、投入
間隔を算出する。※図2(b)は、図2(a)を翻訳し
た際に得られるであろう命令列(アセンブラコードにて
表記している。)を示す図である。ここで演算式『a[i+
1]=a[i]*3+2;』は、配列要素a[i]に3を乗じて、2を加算
し、配列要素a[i+1]に代入する演算式なので、これを命
令列にて具現するには、演算式『a[i+1]=a[i]*3+2;』
は、図2(b)の命令列に変換されると予想される。
『load a[i],r0』は、配列要素a[i]の値をr0に格納する
命令であり、『mul 3,r0』は、r0に3を乗算する命令、
『add 2,r0』は、r0に2を加算する命令、『store r0,a
[i+1]』は、r0の値を配列要素a[i+1]を格納する命令で
ある。これらの命令列を参照すると、機械語プログラム
において、配列要素が定義されてから、それが参照され
るまでに介在する命令数は4命令であることがわかる。
図2(b)からも理解できるようにa[1]は、一巡目のイ
タレーションの実行が開始された後、4つの命令の実行
を経た後に定義され、二巡目のイタレーションはこのa
[1]を参照する命令を先頭に配しているので、最も早い
ケースであっても、二巡目のイタレーションの実行が開
始されるのは、一巡目のイタレーションにおける命令
『store r0,a[i+1]』の実行後となる。このことから、
このループ処理における投入間隔は、4と算出されるこ
ととなる。
【0027】ステップS10において配列要素を定義す
る演算式、配列要素を参照する演算式、算出された依存距
離、投入間隔を対応づけて、1つの依存運搬情報として運
搬依存情報記憶部403に書き込む。ステップS10に
おいて、運搬依存情報が書き込まれると、ステップS2
において原始プログラムに含まれる残りのループ処理に
ついて繰り返す。
【0028】依存距離拡大部404は、原始プログラム
記憶部401に記憶されている原始プログラムのループ
処理における依存距離を拡大するように、ループ処理に
含まれる定義側の演算式と、参照側の演算式とを書き換
えて書換結果を変換プログラムとして変換プログラム記
憶部405に書き込む。かかる依存距離拡大部404の
機能主体は、図5のフロ−チャ−トに示す処理手順を記
述したプログラムであるので、以降図5のフロ−チャ−
トを参照して、依存距離拡大部404における処理内容
について説明する。
【0029】ステップS20は、ステップS21と一対
になって、ステップS22からステップS30までの処
理を運搬依存情報のそれぞれについて繰り返し行わせる
ためのループ制御文である。ステップS22において運
搬依存情報に含まれる投入間隔が最小値であるか否かを
判定し、最小値でないならステップS23に移行する。
最小値なら次の運搬依存情報を処理すべくステップS2
1に移行する。※本実施形態における投入間隔の最小値
は"1"であるものとする。図2(a)に示す演算式『a[i
+1]=a[i]*3+2;』についての運搬依存情報1を考えると、
投入間隔は"4"であり、最小値"1"ではないので、ステッ
プS23に移行することとなる。
【0030】ステップS23において 運搬依存情報に
おける定義側演算式と、参照側演算式との組を合成し
て、a[i]を被演算子に用いてa[i+d]を導く漸化式を得
る。※処理対象となる運搬依存情報において含まれてい
るのが図2(a)に示す演算式『a[i+1]=a[i]*3+2;』で
ある場合、定義側と参照側の演算式は一致しており、ま
た演算式が元々この漸化式の形式になっているので、本
ステップにおける変換は行わない。ちなみに、漸化式
『a[i+1]=a[i]*3+2;』におけるデスプレースメントは"
1"と算出される。
【0031】ステップS24において、依存距離の目標
値を算出すると共に、変数xにデスプレースメントdを代
入する。依存距離の目標値は、前記依存距離と、投入間
隔とを乗じることにより得られる。また変数xとは、依
存距離の拡大の過程において、依存距離の現在値を積算
してゆくための変数であり、このステップS24によ
り、変数xには、変数dが代入されることになる。※図3
における運搬依存情報1が処理対象である場合、依存距
離は1、投入間隔は4であるので、依存距離の目標値とし
て、"4"が算出されることとなる。
【0032】以降のステップS25からステップS28
までの処理は、いわゆる『漸化式の変形』を行うために
設けられている。ステップS25では、a[i]を被演算子
に用いてa[i+x]を導く漸化式において、配列要素を特定
する添字式のそれぞれに+dを付加することによりa[i+d]
を被演算子に用いてa[i+x+d]を導く漸化式を得る。※演
算式が図2(a)に示す演算式『a[i+1]=a[i]*3+2;』で
ある場合、右辺−左辺にデスプレースメント"1"が加算
されることにより、演算式『a[i+1]=a[i]*3+2;』は、図
6(a)に示すように『a[i+2]=a[i+1]*3+2;・・・式702』
に変換される。
【0033】ステップS26において参照側演算式にお
いて被演算子として用いられているa[i+d]をa[i]を用い
た演算式に書き換えることにより、被演算子a[i]を用い
てa[i+x+d]を導く漸化式を得る。※ステップS25にお
いて演算式『a[i+2]=a[i+1]*3+8;』が得られた場合、ス
テップS26では、図6(a)に示すように『a[i+1]=a
[i]*3+2;・・・式701』が『a[i+2]=a[i+1]*3+2;・・・式702』
に代入されて計算されることとなる。そうすると『a[i+
2]=(a[i]*3+2)*3+2;』といった変形を経て、『a[i+2]=a
[i]*9+2*3+2;』『a[i+2]=a[i]*9+8;・・・式703』が得られ
る。
【0034】ステップS25においてかかる変形を行っ
た後、ステップS27に移行して、変数xを変数dだけイ
ンクリメントする(x←x+d)。※図6の一例では、演算
式『a[i+2]=a[i]*9+8;』が得られた時点において変数x
が2に更新されたこととなる(2←1+1)。依存距離がイ
ンクリメントされると、ステップS28において、xが
依存距離の目標値に達したかを判定する。達したならス
テップS29に移行し、達しないなら、ステップS25
に移行する。※ここで図6の一例において、依存距離の
目標値が"4"であるので、達しないと判定されてステッ
プS28がNoとなり、ステップS25に移行する。
【0035】※ステップS25に再度移行した際、演算
式『a[i+2]=a[i]*9+8;』の両辺に変数dである"1"が加算
されて、『a[i+3]=a[i+1]*9+8;』が得られる。続くステ
ップS26では、『a[i+1]=a[i]*3+2;・・・式701』を『a
[i+3]=a[i+1]*9+8;』へ代入して計算する。そうする
と、『a[i+3]=(a[i]*3+2)*9+8;』『a[i+3]=a[i]*27+2
6;』を得ることができる。かかる式変形の後ステップS
27に移行して、変数xが3に更新されたこととなる。依
存距離がインクリメントされると、ステップS28にお
いて、xが依存距離の目標値に達したかを判定する。達
しない場合、ステップS28がNoとなり、ステップS2
5に移行する。
【0036】※ステップS25に再々度移行した際、演
算式『a[i+3]=a[i]*27+26;』の両辺に変数dが加算され
て、『a[i+4]=a[i+1]*27+26;』が得られる。続くステッ
プS26では、『a[i+1]=a[i]*3+2;』を『a[i+4]=a[i+
1]*27+26;』へ代入して計算すれば、『a[i+4]=(a[i]*3+
2)*27+26;』が得られ、『a[i+4]=a[i]*81+80;』を得る
ことができる。かかる式変形の後ステップS27に移行
して、変数xが4に更新されたこととなる。依存距離がイ
ンクリメントされると、ステップS28において、xが
依存距離の目標値4に達したかが判定されて、ステップ
S29に移行する。
【0037】ステップS29において変換プログラム記
憶部405は、原始プログラム記憶部401に記憶され
た原始プログラムにおける参照側演算式と、定義側演算
式とを被演算子a[i]を参照する演算式と、a[i+x]を定義
する演算式とに書き換える。ステップS30においてi
の初期値がInitである場合、a[Init]からa[Init+x-1]ま
でを定義する演算式を原始プログラムに生成する。※図
2(a)のプログラムにおいて、Initは0であり、a[0]
を生成する演算式『a[0]=x;』は、予め原始プログラム
内に存在するので、ステップS29において、図6
(b)に示すようにa[1],a[2],a[3]の配列要素を定義す
る演算式『a[1]=x*3+2;』,『a[2]=x*9+2;』,『a[3]=x*2
7+26;』が生成される。以上で1つの運搬依存情報につい
ての処理を終えると、残る運搬依存情報について、以上
の処理を繰り返し行う。
【0038】コード生成部406は、変換プログラム記
憶部405に書き込まれた変換プログラムに対して構文
解析を行い、ソフトウェアパイプライニングなどターゲ
ットマシンへの適合を目的とした最適化を施した後、機
械語プログラムを得て、オブジェクトコード記憶部40
7に書き込む。ここでターゲットマシンは、命令メモ
リ、プログラムカウンタ、命令フェッチ回路、命令レジ
スタ、命令デコーダ、演算器、汎用レジスタ、データメ
モリ、データやアドレス転送用のバス等を備えるプロセ
ッサであり、命令発行形式は、単一命令発行形式、複数
命令同時発行方式のいずれでも良い。更に命令語長は、
命令可変長、固定長のいずれのプロセッサでもよい。本
実施形態では、4命令同時発行可能なプロセッサを例と
して取り上げる。本ターゲットマシンは、全ての命令が
1サイクルで実行できると仮定する(1サイクルで実行
できない命令が存在したとしても、本方式は適用可能で
ある。)。このターゲットマシンに適合するよう、コー
ド生成部406がコード生成を行えば、図6(c)に示
す命令列が得られる。図6(c)は、命令A、命令B、命
令C、命令Dという4つの命令を含む。この図6(c)の
アセンブラコードにおいて、命令Aである『load a[i],r
0』は配列要素a[i]の値をr0に格納し、命令Bである『mu
l 81,r0』はr0に81を乗算し、命令Cである『add 80,r
0』はr0に80を加算し、命令Dである『store r0,a[i+
4]』はr0の値を配列要素a[i+4]を格納する。
【0039】このコードにソフトウェアパイプライニン
グを施すと、図7のような実行イメージとなる。ループ
運搬依存の依存距離は1から4に拡大されたので、一巡目
のイタレーションは、五巡目のイタレーションにより参
照されるa[5]を定義することとなる。二巡目のイタレー
ションは、六巡目のイタレーションにより参照されるa
[6]を、三巡目のイタレーションは、七巡目のイタレー
ションにより参照されるa[7]を、四巡目のイタレーショ
ンは、八巡目のイタレーションにより参照されるa[8]を
それぞれ定義することとなる。
【0040】一巡目のイタレーションは、命令『load a
[i],r0』においてa[0]を参照し、二巡目のイタレーショ
ンは命令『load a[i],r0』においてa[1]、三巡目のイタ
レーションは命令『load a[i],r0』においてa[2]、四巡
目のイタレーションは命令『load a[i],r0』においてa
[3]をそれぞれ参照することとなる。これらのa[1]、a
[2]、a[3]はループ処理外にその値を定義する演算式が
配されているので、二巡目のイタレーション、三巡目の
イタレーション、四巡目のイタレーションは、自身に先
行するイタレーションにより、配列要素が定義されるの
を待つ必要はない。これらの二巡目のイタレーション、
三巡目のイタレーション、四巡目のイタレーションは、
一巡目のイタレーションとループ運搬依存を有さないの
で、投入間隔1を隔てて、順次実行してゆくことができ
る。
【0041】以上のように本実施形態によれば、あるイ
タレーションにより導かれた値が、直後のイタレーショ
ンにより使用されているような、依存関係が極めて近接
したボディを有するループ処理が処理対象であっても、
イタレーション間の依存距離が拡大するようなループ処
理に書き換えられるので、かかる書き換え後のループ処
理に対してソフトウェアパイプライニングにより機械語
命令を生成させれば、当該ループ処理のボディから派生
する複数のイタレーションを、パイプラインにより高速
に実行させることができる。例えばループ処理がs回の
反復繰り返しを行うよう記述されていて、投入間隔が4
である場合、依存距離の拡大前では、s個のイタレーシ
ョンの実行を完遂するのに、s*4サイクルといった時間
が費やされる。これに対して本実施形態に示した依存距
離の拡大を行えば、投入間隔が1に変換されているの
で、3+sサイクルの時間でs個のイタレーションの実行が
完遂することになる(s=100とした場合、依存距離の拡
大前では、s個のイタレーションの実行の完遂に400サイ
クルを費するが、依存距離の拡大により、s個のイタレ
ーションの実行の完遂が103サイクルで終了する。)。
【0042】(第2実施形態)第1実施形態における依
存距離拡大部404は、ループ運搬依存の拡大を実現し
ていたが、第2実施形態では、依存距離拡大部404
は、ループ運搬依存を解消する次のような処理を行う。
第2実施形態における依存距離拡大部404は、図8
(a)の『a[i+1]=a[i]*3+2;・・・式701』に対して処理を
行う場合、依存距離拡大部404は図8(b)に示すよ
うな演算式の書き換えを行う。元のループ内の『a[i+1]
=a[i]*3+3-1;・・・式701』から、『a[i+1]+1=(a[i]+1)*3;
・・・式705』に変形する。ここで、左辺のa[i+1]+1は、右
辺でa[i]+1に3を乗じたものと表されているから、a[i]
+1は、a[0]+1を初期値とした3による等比数列である。
よって演算式『a[i+1]+1=(a[i]+1)*3;』に、『a[i]+1=
(a[i-1]+1)*3;』を代入することにより、『a[i+1]+1=
((a[i-1]+1)*3)*3;』を得て、更にこの式に『a[i-1]+1=
(a[i-2]+1)*3;』を代入することにより、『a[i+1]+1=
(((a[i-2]+1)*3)*3)*3;』を得る。こうした処理を繰り
返すことにより、『a[i+1]=(a[0]+1)*3∧i;』を得るこ
とができる。故に、i番目の配列要素は『a[i]=(a[0]+1)
*3∧i-1;・・・式706』の式を用いて得ることができる。よ
って、依存距離拡大部404は、図8(b)に示す変換
プログラムを変換プログラム記憶部に書き込む。
【0043】変換プログラム記憶部405における漸化
式は、誘導変数iからi番目の要素を導く非漸化式に書き
換えられたので、ループ運搬依存は消滅したことにな
る。ループ運搬依存の消滅により、この変換プログラム
記憶部405については、図9(a)に示すように一巡
目のイタレーション、二巡目のイタレーション、三巡目
のイタレーション、四巡目のイタレーション、五巡目の
イタレーション・・・・といった各イタレーションを並列に
同時実行することができる。
【0044】図9(b)は、演算式『a[i]=(a[0]+1)*3
∧i-1;』を翻訳することにより得られた命令列について
のイタレーションを示す図である。この命令列が命令
A、命令B、命令C、命令Dからなり、これらの命令列につ
いてイタレーションは各々が全くループ運搬依存を有さ
ないので、命令列についての6つのループ運搬依存は、
並列に同時実行されていることがわかる。即ち、上述し
た式変形を行うことにより、ループアンローリングの適
用が可能となり、プロセッサに資源の制約がなければ、
配列aの10個の要素を同時並列に算出することが出来
る。しかし、この場合、各イタレーションを実行するに
は、誘導変数iについてのべき乗計算を行う必要がある
ので、ターゲットマシンのアーキクチャがかかるべき
乗計算を高速に行なえるような場合は良いが、そのよう
な高速化が不可能である場合は、かえって演算負荷が重
くなることも考えられる。
【0045】尚、2つの実施形態は現状において最善の
効果が期待できるシステム例として説明したに過ぎな
い。本発明は、その要旨を逸脱しない範囲で実施変更す
ることができる。具体的には、以下の(a)(b)
(c)に示すような変更実施が可能である。 (a)上述した2つの実施形態は、配列要素が1つの変数
のみにて特定される一次元配列を対象として説明を行っ
たが、配列要素が2つの変数のみにて特定される二次元
配列、3つの変数のみにて特定される三次元配列であっ
ても、上述したような『漸化式の変形』が可能であるな
らば、投入間隔を短縮できることはいうまでもない。
【0046】例えば、2つの変数i,jにて特定される配列
要素に対して、依存距離拡大部404が処理を行う場合
について説明する。変数i,jにて特定される配列要素c
[i,j]はループ処理に含まれる漸化式『c[i+1,j]=c[i,j]
*3+2;』により値が導かれる場合を想定する。先ず初め
にこの漸化式の両辺にデスプレースメント"1"を加算す
ることにより、『c[i+2,j]=c[i+1,j]*3+2』を得て、こ
の漸化式に漸化式『c[i+1,j]=c[i,j]*3+2;』を代入する
ことにより、『c[i+2,j]=c[i,j]*9+8;』を得る。
【0047】ステップS25に再度移行して、漸化式の
両辺にデスプレースメント"1"を加算することにより『c
[i+3,j]=c[i+1,j]*9+8;』を得た後、『c[i+1,j]=c[i,j]
*3+2;』を代入して、『c[i+3,j]=(c[i,j]*3+2)*9+8;』
『c[i+3,j]=c[i,j]*27+26;』を得る。ステップS25に
再々度移行した際、この漸化式の両辺にデスプレースメ
ントdを加算して、『c[i+4,j]=c[i+1,j]*27+26;』を得
て、『c[i+1,j]=c[i,j]*3+2;』を代入することにより、
『c[i+4,j]=(c[i,j]*3+2)*27+26;』、『c[i+4,j]=c[i,
j]*81+80;』を得る。以上のように、3つの変数のみにて
特定される三次元配列であっても、処理対象が漸化式
『c[i+1,j]=c[i,j]*3+2;』であるならば、『漸化式の変
形』が可能となり、投入間隔を短縮できることがわか
る。
【0048】(b)最適化装置は、コンパイラのプリプ
ロセッサとして具備されていてもよい。 (c)図4,図5のフローチャートを参照して説明した
手順等を実行形式プログラムにより実現し、これを記録
媒体に記録して流通・販売の対象にしても良い。このよ
うな記録媒体には、ICカードや光ディスク、フロッピー
(登録商標)ディスク等があるが、これらに記録された機
械語プログラムは汎用コンピュータにインストールされ
ることにより利用に供される。この汎用コンピュータ
は、インストールした実行形式プログラムを逐次実行し
て、本実施形態に示した最適化装置の機能を実現するの
である。
【0049】
【発明の効果】以上の説明したように本発明に係る最適
化装置は、i回目の繰り返し時に演算式により定義され
る値が、同ボディの繰り返しを何回経た後に参照される
かを解析することにより、演算式にて値が定義されてか
ら参照されるまでの依存距離xを得る解析手段と、ボデ
ィをパイプラインにて繰り返し実行させる場合の命令間
の投入間隔を、前記演算式に対応する命令列と、依存距
離xとに基づいて推測する推測手段と、投入間隔が、投
入間隔の最小値より大きい場合、i+y回目(y>x)の繰り返
し時に参照されるべき値をi回目の繰り返し時に定義す
るよう、演算式を書き換え、1回目からy-1回目までの繰
り返し時に参照されるべき初期値の定義式をループ処理
の前に配置する書換手段とを備え、前記数値yは、解析
手段の解析により得られた依存距離xと、推測手段によ
り推測された投入間隔とに基づき得られる依存距離xの
目標値であるので(1)、あるイタレーションにより導か
れた値が、直後のイタレーションにより使用されている
ような、依存関係が極めて近接したボディを有するルー
プ処理が処理対象であっても、書換手段によりイタレー
ション間の依存距離が拡大するようなループ処理に書き
換えられるので、かかる書き換え後のループ処理に対し
てソフトウェアパイプライニングにより機械語命令を生
成させれば、当該ループ処理のボディから派生する複数
のイタレーションを、パイプラインにより高速に実行さ
せることができる。
【0050】ボディを機械語命令列に翻訳し、パイプラ
インにてこの機械語命令列を繰り返し実行させた場合の
実行遅延が所定の閾値より大きくなる演算式のみを処理
対象に絞り込むので、ループ処理に対する書き換えによ
りコードサイズが増大するという不利益を伴う場合に、
そのコードサイズの増大量をなるべく少なくすることが
できる。
【0051】また前記最適化装置は、前記数列における
j番目の値を参照してj+m番目の値を定義する漸化式を、
ボディから検出する検出手段を備え、前記書換手段は、
検出された漸化式を変形することにより、数列における
j番目の値を参照してj+n(n>m)番目の値を定義する漸化
式を得る式変形部と、検出手段により検出された漸化式
を、式変形部の式変形により得られた漸化式を用いて書
き換える書換部とを備えるように構成しても良い(2)。
この場合、高級プログラミング言語にて記述されたルー
プ処理において頻繁に行われる、数列に対するデータ処
理を、高速に実行させることが可能となる。
【0052】また上記装置において、前記検出手段は、
第1検出部により検出された演算式が数列におけるj番
目の値を参照していない場合、j番目の値を参照してい
る別の演算式を検出する第2検出部と、第1検出部によ
り検出された演算式と、第2検出部により検出された別
の演算式とを組み合わせて、漸化式を得る式合成部とを
有しても良い(4)。この場合、数列における値を定義す
る演算式と、値を参照する演算式とがソースプログラム
内に別々に存在する場合でも、依存距離を拡大できるよ
うな式変形が可能となる。
【0053】
【図面の簡単な説明】
【図1】第1実施形態に係る最適化装置を備えるコンパ
イラの内部構成を示す図である。
【図2】(a)配列要素を定義する原始プログラムの一
例を示す図である。 (b)図2(a)を翻訳した際に得られる命令列をアセ
ンブラコードで示す図である。
【図3】運搬依存情報の一例を示す図である。
【図4】依存解析部402における処理内容を示すフロ
−チャ−トである。
【図5】依存距離拡大部404における処理内容を示す
フロ−チャ−トである。
【図6】(a)依存距離を拡大するために依存距離拡大
部404により行われる漸化式の変形を示す図である。 (b)変形された漸化式を用いて書き換えられたソース
プログラムの一例を示す図である。 (c)命令A、命令B、命令C、命令Dという4つの命令を
含むループ処理のボディを示す図である。
【図7】図6(c)に示した命令列にソフトウェアパイ
プライニングを施した場合の実行イメージを示す図であ
る。
【図8】(a)依存距離を拡大するために第2実施形態
の依存距離拡大部404により行われる漸化式の変形を
示す図である。 (b)変形された漸化式を用いて書き換えられたソース
プログラムの一例を示す図である。
【図9】(a)図8(b)に示した漸化式をループアン
ローングにより実行した場合の実行イメージを示す図
である。 (b)図9(a)に示した漸化式を翻訳することにより
得られた命令列が並列実行される場合の実行イメージを
示す図である。
【図10】(a)配列bの要素を用いて配列aの要素の定
義を行う演算式『a[i]=b[i]*(x+10)』を、変数iが100に
なるまで繰り返し行うループ処理の一例を示す図であ
る。 (b)ループアンローングによる最適化を経た後のル
ープ処理の一例を示す図である。
【図11】(a)ループボディの一例を示す図である。 (b)命令列の5回の繰り返しを、三段のパイプライン
にて行う場合の一例を示す図である。 (c)命令列の5回の繰り返しを行うために出力される
アセンブラコードを示す図である。
【図12】(a)ソフトウェアパイプライニングによる
性能向上が期待できないプログラムの一例を示す図であ
る。 (b)(a)のプログラムを翻訳することにより得られ
たアセンブラコードを示す図である。 (c)(b)のプログラムを翻訳することにより得られ
たアセンブラコードをパイプラインにて実行させる場合
の投入間隔を示す図である。
【符号の説明】
401 原始プログラム記憶部 402 依存解析部 403 運搬依存情報記憶部 404 依存距離拡大部 405 変換プログラム記憶部 406 コード生成部 407 オブジェクトコード記憶部
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平6−103083(JP,A) 海永正博・他,「漸化式のスーパース カラ向け高速化」,情報処理学会論文 誌,日本,社団法人情報処理学会,1993 年12月15日,Vol.34, No.12, pp.2592−2598 田中義一・他,「命令レベル並列計算 機のためのリカレンス演算の高速化手法 とコンパイラへの実装」,情報処理学会 論文誌,日本,社団法人情報処理学会, 1996年 9月15日,Vol.37, N o.9,pp.1657−1665 古関、小松、深澤,命令レベル並列ア ーキテクチャのためのループアンローリ ングおよびソフトウェアパイプライニン グ適用技術,電子情報通信学会論文誌, 日本,社団法人電子情報通信学会,1997 年10月25日,Vol.J80−D−I, No.10,pp.824−835 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 9/38 G06F 17/16 JSTファイル(JOIS) CSDB(日本国特許庁) INSPEC(DIALOG) WPI/L(DIALOG)

Claims (14)

    (57)【特許請求の範囲】
  1. 【請求項1】 1つ以上の演算式を含むボディと、当該
    ボディについての繰り返し条件を定める制御文とからな
    るループ処理を含むプログラムを、パイプラインに適合
    するよう最適化する最適化装置であって、 i回目の繰り返し時に演算式により定義される値が、同
    ボディの繰り返しを何回経た後に参照されるかを解析す
    ることにより、演算式にて値が定義されてから参照され
    るまでの依存距離xを得る解析手段と、 ボディをパイプラインにて繰り返し実行させ場合の
    令間の投入間隔を、前記演算式に対応する命令列と、依
    存距離xとに基づいて推測する推測手段と、投入間隔が、投入間隔の最小値より大きい場合、 i+y回
    目(y>x)の繰り返し時に参照されるべき値をi回目の繰り
    返し時に定義するよう、演算式を書き換え、1回目からy
    -1回目までの繰り返し時に参照されるべき初期値の定義
    式をループ処理の前に配置する書換手段とを備え、前記数値yは解析手段の解析により得られた依存距離xと、推測手段
    により推測された投入間隔とに基づき得られる依存距離
    の目標値である ことを特徴とする最適化装置。
  2. 【請求項2】 前記ループ処理は、数列を処理するもの
    であり、 ループ処理のi回目の繰り返し時において前記数列にお
    けるj番目の値が、ループ処理のi+x回目の繰り返し時に
    おいて、数列におけるj+m番目の値がそれぞれ参照さ
    れ、 前記最適化装置は、 前記数列におけるj番目の値を参照してj+m番目の値を定
    義する漸化式を、ボディから検出する検出手段を備え、 前記書換手段は、 検出された漸化式を変形することにより、数列における
    j番目の値を参照してj+n(n>m)番目の値を定義する漸化
    式を得る式変形部と、 検出手段により検出された漸化式を、式変形部の式変形
    により得られた漸化式を用いて書き換える書換部とを備
    えることを特徴とする請求項1記載の最適化装置。
  3. 【請求項3】 前記検出手段は、 数列におけるj+m番目の値を定義している演算式をボデ
    ィから検出する第1検出部を備え、 前記式変形部は、 検出された演算式が数列におけるj番目の値を参照して
    いる場合、第1検出部が検出した演算式を漸化式として
    式変形を行うことを特徴とする請求項2記載の最適化装
  4. 【請求項4】 前記検出手段は、 第1検出部により検出された演算式が数列におけるj番
    目の値を参照していない場合、j番目の値を参照してい
    る別の演算式を検出する第2検出部と、 第1検出部により検出された演算式と、第2検出部によ
    り検出された別の演算式とを組み合わせて、漸化式を得
    る式合成部とを備えることを特徴とする請求項3記載の
    最適化装置。
  5. 【請求項5】 前記推測手段は、 検出手段により検出された漸化式を機械語命令列に置き
    換えた場合、j番目の値を参照する命令からj+m番目の値
    を定義する命令までにどれだけの命令が介在するかを算
    出する第1算出部と、 算出された介在命令数と、解析手段の解析により得られ
    依存距離xとに基づいて前記パイプラインにおける
    入間隔を算出する第2算出部とを備えることを特徴とす
    る請求項3又は4記載の最適化装置。
  6. 【請求項6】 制御文における繰り返し条件は、ループ
    処理が一回実行される毎に一定の割合で増加、或は、減
    少していく誘導変数iにて記述され、 数列における個々の値は、誘導変数iを被演算子とした
    添字式にて特定される配列型変数に格納され、 前記解析手段は、 配列型変数における添字式を解析することにより、i回
    目の繰り返し時に演算式により定義される値が、同ボデ
    ィの繰り返しを何回経た後に参照されるかを解析するこ
    とを特徴とする請求項3〜5の何れかに記載の最適化装
    置。
  7. 【請求項7】 前記最適化装置は、 解析手段の解析により得られた依存距離xと、推測手段
    により推測された投入間隔との乗算値を算出する乗算手
    段を備え、 前記式変形部は、 算出された乗算値を繰り返し数yとして用いることによ
    り、i+y回目の繰り返し時に数列において参照されるべ
    きj+n番目の値を特定し、i回目の繰り返し時に数列にお
    ける当該j+n番目の値を定義する漸化式を得るよう、検
    出された漸化式を変形することを特徴とする請求項1〜
    6の何れかに記載の最適化装置。
  8. 【請求項8】 1つ以上の演算式を含むボディと、当該
    ボディについての繰り返し条件を定める制御文とからな
    るループ処理を含むプログラムを、パイプラインに適合
    するよう最適化する最適化プログラムを記録したコンピ
    ュータ読取可能な記録媒体であって、 i回目の繰り返し時に演算式により定義される値が、同
    ボディの繰り返しを何回経た後に参照されるかを解析す
    ることにより、演算式にて値が定義されてから参照され
    るまでの依存距離xを得る解析ステップと、 ボディをパイプラインにて繰り返し実行させ場合の
    令間の投入間隔を、前記演算式に対応する命令列と、依
    存距離xとに基づいて推測する推測ステップと、投入間隔が、投入間隔の最小値より大きい場合、 i+y回
    目(y>x)の繰り返し時に参照されるべき値をi回目の繰り
    返し時に定義するよう、演算式を書き換え、1回目からy
    -1回目までの繰り返し時に参照されるべき初期値の定義
    式をループ処理の前に配置する書換ステップとからなる
    手順をコンピュータに行せるプログラムが記録され 前記数値yは解析手段の解析により得られた依存距離xと、推測手段
    により推測された投入間隔とに基づき得られる依存距離
    の目標値である ことを特徴とするコンピュータ読取可能
    な記録媒体。
  9. 【請求項9】 前記ループ処理は、数列を処理するもの
    であり、 ループ処理のi回目の繰り返し時において前記数列にお
    けるj番目の値が、ループ処理のi+x回目の繰り返し時に
    おいて、数列におけるj+m番目の値がそれぞれ参照さ
    れ、 前記最適化装置は、 前記数列におけるj番目の値を参照してj+m番目の値を定
    義する漸化式を、ボディから検出する検出ステップを備
    え、 前記書換ステップは、 検出された漸化式を変形することにより、数列における
    j番目の値を参照してj+n(n>m)番目の値を定義する漸化
    式を得る式変形サブステップと、 検出ステップにより検出された漸化式を、式変形サブス
    テップの式変形により得られた漸化式を用いて書き換え
    る書換サブステップとからなる手順をコンピュータに行
    せるプログラムが記録されていることを特徴とする請求
    記載のコンピュータ読取可能な記録媒体。
  10. 【請求項10】 前記検出ステップは、 数列におけるj+m番目の値を定義している演算式をボデ
    ィから検出する第1検出サブステップを備え、 前記式変形サブステップは、 検出された演算式が数列におけるj番目の値を参照して
    いる場合、第1検出サブステップが検出した演算式を漸
    化式として式変形を行うことを特徴とする請求項記載
    のコンピュータ読取可能な記録媒体。
  11. 【請求項11】 前記検出ステップは、 第1検出サブステップにより検出された演算式が数列に
    おけるj番目の値を参照していない場合、j番目の値を参
    照している別の演算式を検出する第2検出サブステップ
    と、 第1検出サブステップにより検出された演算式と、第2
    検出サブステップにより検出された別の演算式とを組み
    合わせて、漸化式を得る式合成サブステップとからなる
    手順をコンピュータに行せるプログラムが記録されてい
    ることを特徴とする請求項10記載のコンピュータ読取
    可能な記録媒体。
  12. 【請求項12】 前記推測ステップは、 検出ステップにより検出された漸化式を機械語命令列に
    置き換えた場合、j番目の値を参照する命令からj+m番目
    の値を定義する命令までにどれだけの命令が介在するか
    を算出する第1算出サブステップと、 算出された介在命令数と、解析ステップの解析により得
    られた依存距離xとに基づいて前記パイプラインにおけ
    投入間隔を算出する第2算出サブステップとからなる
    手順をコンピュータに行せるプログラムが記録されてい
    ることを特徴とする請求項10又は11記載のコンピュ
    ータ読取可能な記録媒体。
  13. 【請求項13】 制御文における繰り返し条件は、ルー
    プ処理が一回実行される毎に一定の割合で増加、或は、
    減少していく誘導変数iにて記述され、 数列における個々の値は、誘導変数iを被演算子とした
    添字式にて特定される配列型変数に格納され、 前記解析ステップは、 配列型変数における添字式を解析することにより、i回
    目の繰り返し時に演算式により定義される値が、同ボデ
    ィの繰り返しを何回経た後に参照されるかを解析するこ
    とを特徴とする請求項10〜12の何れかに記載のコン
    ピュータ読取可能な記録媒体。
  14. 【請求項14】 前記最適化装置は、 解析ステップの解析により得られた依存距離xと、推測
    ステップにより推測された投入間隔との乗算値を算出す
    る乗算ステップを備え、 前記式変形サブステップは、 算出された乗算値を繰り返し数yとして用いることによ
    り、i+y回目の繰り返し時に数列において参照されるべ
    きj+n番目の値を特定し、i回目の繰り返し時に数列にお
    ける当該j+n番目の値を定義する漸化式を得るよう、検
    出された漸化式を変形することを特徴とする請求項8〜
    13の何れかに記載のコンピュータ読取可能な記録媒
    体。
JP2000059506A 2000-03-03 2000-03-03 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体 Expired - Lifetime JP3477137B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2000059506A JP3477137B2 (ja) 2000-03-03 2000-03-03 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
US09/798,490 US6993756B2 (en) 2000-03-03 2001-03-02 Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2000059506A JP3477137B2 (ja) 2000-03-03 2000-03-03 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体

Publications (2)

Publication Number Publication Date
JP2001249818A JP2001249818A (ja) 2001-09-14
JP3477137B2 true JP3477137B2 (ja) 2003-12-10

Family

ID=18579947

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000059506A Expired - Lifetime JP3477137B2 (ja) 2000-03-03 2000-03-03 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体

Country Status (2)

Country Link
US (1) US6993756B2 (ja)
JP (1) JP3477137B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2365375A1 (en) * 2001-12-18 2003-06-18 Ibm Canada Limited-Ibm Canada Limitee Optimizing source code for iterative execution
CA2453685A1 (en) * 2003-12-17 2005-06-17 Ibm Canada Limited - Ibm Canada Limitee Method and system for code modification based on cache structure
US7617496B2 (en) 2004-04-23 2009-11-10 Apple Inc. Macroscalar processor architecture
US7395419B1 (en) 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7565365B2 (en) * 2005-08-31 2009-07-21 Sap Ag Object storage and synchronization hooks for occasionally-connected devices
US8443351B2 (en) * 2006-02-23 2013-05-14 Microsoft Corporation Parallel loops in a workflow
US8181001B2 (en) * 2008-09-24 2012-05-15 Apple Inc. Conditional data-dependency resolution in vector processors
US8176299B2 (en) * 2008-09-24 2012-05-08 Apple Inc. Generating stop indicators based on conditional data dependency in vector processors
US8327345B2 (en) * 2008-12-16 2012-12-04 International Business Machines Corporation Computation table for block computation
CN103250135A (zh) * 2010-12-21 2013-08-14 松下电器产业株式会社 编译装置、编译程序及循环并列化方法
US9081586B2 (en) 2011-11-29 2015-07-14 Futurewei Technologies, Inc. Systems and methods for customizing optimization/transformation/ processing strategies
JP2014016894A (ja) * 2012-07-10 2014-01-30 Renesas Electronics Corp 並列演算装置、並列演算装置を備えたデータ処理システム、及び、データ処理プログラム
US9239712B2 (en) * 2013-03-29 2016-01-19 Intel Corporation Software pipelining at runtime
JP6245031B2 (ja) * 2014-03-27 2017-12-13 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
US9715386B2 (en) 2014-09-29 2017-07-25 Apple Inc. Conditional stop instruction with accurate dependency detection

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1319757C (en) * 1988-07-29 1993-06-29 Digital Equipment Corporation Echelon method for execution of nested loops in multiple processor computers
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
JPH04102926A (ja) * 1990-08-22 1992-04-03 Nec Corp 繰り返しループの展開最適化方式
JP3032031B2 (ja) * 1991-04-05 2000-04-10 株式会社東芝 ループ最適化方法及び装置
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
JPH06103083A (ja) 1992-09-22 1994-04-15 Hitachi Ltd 部分和計算方法
JP3317825B2 (ja) * 1995-09-28 2002-08-26 富士通株式会社 ループ最適化翻訳処理方法
US6247173B1 (en) * 1997-09-24 2001-06-12 Hewlett-Packard Company Computer compiler optimizer for reducing computer resource consumption during dependence analysis after loop unrolling

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
古関、小松、深澤,命令レベル並列アーキテクチャのためのループアンローリングおよびソフトウェアパイプライニング適用技術,電子情報通信学会論文誌,日本,社団法人電子情報通信学会,1997年10月25日,Vol.J80−D−I, No.10,pp.824−835
海永正博・他,「漸化式のスーパースカラ向け高速化」,情報処理学会論文誌,日本,社団法人情報処理学会,1993年12月15日,Vol.34, No.12,pp.2592−2598
田中義一・他,「命令レベル並列計算機のためのリカレンス演算の高速化手法とコンパイラへの実装」,情報処理学会論文誌,日本,社団法人情報処理学会,1996年 9月15日,Vol.37, No.9,pp.1657−1665

Also Published As

Publication number Publication date
JP2001249818A (ja) 2001-09-14
US6993756B2 (en) 2006-01-31
US20010020294A1 (en) 2001-09-06

Similar Documents

Publication Publication Date Title
JP3477137B2 (ja) 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
Bartholomew-Biggs et al. Automatic differentiation of algorithms
US5537620A (en) Redundant load elimination on optimizing compilers
JP6245031B2 (ja) コンパイルプログラム、コンパイル方法およびコンパイル装置
JP3546341B2 (ja) 多重ループ向けデータプリフェッチ方法およびプログラム生成方法
JPH0814817B2 (ja) 自動ベクトル化方法
JP2001167060A (ja) タスク並列化方法
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JP3545938B2 (ja) コンパイラを記録したコンピュータ読み取り可能な記録媒体
Carminati et al. Combining loop unrolling strategies and code predication to reduce the worst-case execution time of real-time software
US6064820A (en) Apparatus and method to incrementally update single static assignment (SSA) form
US5907711A (en) Method and apparatus for transforming multiplications into product table lookup references
Martinez Caamaño et al. Code bones: Fast and flexible code generation for dynamic and speculative polyhedral optimization
Vanbroekhoven et al. A practical dynamic single assignment transformation
JPH04293150A (ja) コンパイル方法
JPH10320212A (ja) キャッシュ向け最適化方法
Wang et al. Gridfor: A domain specific language for parallel grid-based applications
JP3887097B2 (ja) コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
Doroshenko et al. Automated design of parallel programs for heterogeneous platforms using algebra-algorithmic tools
Gupta code Optimization as a side effect of instruction scheduling
van der Spek et al. A compile/run-time environment for the automatic transformation of linked list data structures
Wang A compiler for Silage
US20220382548A1 (en) Compiler, compilation method, and compiler device
JP2003256214A (ja) 配列拡張によるループ変換方法
WO2020116025A1 (ja) コンパイル装置、コンパイル方法、及び非一時的なコンピュータ可読媒体

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080926

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080926

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090926

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090926

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100926

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110926

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120926

Year of fee payment: 9