JP3032030B2 - ループ最適化方法及び装置 - Google Patents

ループ最適化方法及び装置

Info

Publication number
JP3032030B2
JP3032030B2 JP3071978A JP7197891A JP3032030B2 JP 3032030 B2 JP3032030 B2 JP 3032030B2 JP 3071978 A JP3071978 A JP 3071978A JP 7197891 A JP7197891 A JP 7197891A JP 3032030 B2 JP3032030 B2 JP 3032030B2
Authority
JP
Japan
Prior art keywords
loop
stages
floating
integer
unrolling
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
Application number
JP3071978A
Other languages
English (en)
Other versions
JPH04307624A (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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP3071978A priority Critical patent/JP3032030B2/ja
Publication of JPH04307624A publication Critical patent/JPH04307624A/ja
Application granted granted Critical
Publication of JP3032030B2 publication Critical patent/JP3032030B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
[発明の目的]
【0001】
【産業上の利用分野】本発明は、複数の命令の列を並列
に実行可能とする電子計算機におけるループ最適化方法
及び装置に関する。
【0002】
【従来の技術】従来、電子計算機の命令列は逐次処理さ
れることを前提に構成され、電子計算機はこれに従って
命令を1個ずつ取り出して実行していた。
【0003】この命令列の処理高速化のため、パイプラ
イン技術が導入された。これは命令の実行を複数の段階
(ステージ)に分解し、この分解された実行段階を単位
として、異なる段階の複数の命令を同時に演算する技術
であり、これにより処理のサイクルタイム短縮が可能と
なり命令列全体の処理時間も短縮された。しかし、パイ
プライン技術においても実行開始される命令は1サイク
ルあたり1個であり、これを超えた命令の並列実行は行
われていなかった。
【0004】これに対し、近年、命令単位で並列実行を
可能とする技術が導入されており、1サイクルあたり1
個以上の命令を処理することが可能になってきている。
VLIW(Very Long Instruction Word) 技術とスーパ
ースカラー技術と呼ばれる2つの手法が代表的なもので
ある。
【0005】VLIW技術は、予め定められた数の複数
命令を1つの実行単位として定義し、計算機はこれら複
数の命令を必ず同時に実行する。計算機は処理対象の複
数命令が同時に実行可能であるか否かを判定する必要が
なく制御が単純であるため、少ないハードウェア量で実
現可能であり、またサイクルタイムの短縮が可能であ
る。しかしながら、処理の並列性はコンパイラまたは人
手により判定し、予め命令の割当を行っておかなければ
ならない。この命令割当を「命令スケジューリング」と
呼ぶ。
【0006】一方スーパースカラー技術は、従来と同様
の逐次実行を前提とした命令列を解釈して並列実行可能
性を調べるハードウェアを備え、並列実行可能な場合に
はこれらの複数命令を並列実行するように制御する方式
である。この方式では命令の並列実行可能性判定を専用
ハードウェアに委ねているため、通常のプログラムであ
っても逐次実行時との互換性を保った実行は保証され
る。しかし実際にスーパースカラー方式で性能向上を目
指す場合には、ハードウェアリソースやデータ依存性等
の情報を元に演算ユニットが出来る限り動作状態にある
ようにするため、VLIW方式と同様の命令スケジュー
リングを行っておくことが必須である。
【0007】これらの並列実行方式における命令スケジ
ューリング手法として、1つの基本ブロック(プログラ
ムのうち分岐、脱出のない命令列)を処理対象としてハ
ードウェアリソースやデータ依存関係などの制約条件を
元に命令を並べ替えていく「リストスケジューリング」
と呼ばれる方式が知られている。この方式は実現が容易
であるが、一般のプログラムでは1つの基本ブロックに
含まれる命令数には限りがあるため充分な性能向上が得
られないという欠点もある。この欠点を解消するため、
プログラムのループ部分を対象とする場合に、ループ内
の演算を複数反復分展開して処理する「ループ展開(ル
ープアンローリング)」と呼ばれる手法を組み合わせて
使用することがある。この方式でループ部分を処理する
と、リストスケジュリング単独で適用するより高い並列
性を得られることもよく知られている。
【0008】この「ループ展開」とは、複数の隣接する
ループ反復を展開して処理する方法である。例えば、C
言語で記述したループ図3(a) を考える。このループを
そのままアセンブラに変換すると図3(b) を得る。 こ
のループに4段のループ展開を施すとループ図4(a) が
得られる。ループ展開処理では、このようにループの4
回分の反復処理を1つのループ反復にまとめて等価なル
ープを構成する。このループをアセンブラに変換すると
図4(b) を得る。
【0009】以上の2つのループのコンパイル結果から
判るように、ループ展開によりループ内の命令スケジュ
ーリング処理対象となる命令が図3(b) の7個から図4
(b)の16個に増加する。またこの例では、ループの各
段階の演算(sub )は独立に実行できるので、命令スケ
ジューリングにより、VLIW、スーパースカラー方式
に適した並列化プログラムに変換できる。このようなル
ープ展開をソースプログラムに手を加えることなく、コ
ンパイラ内部で処理するループ最適化技法が一般に行わ
れている。
【0010】このようにループ展開とリストスケジュー
リングを組み合わせて命令列を再構成する手法は、従来
の方法に比べ高い並列性を達成できるが、一方ではルー
プを展開するためにオブジェクトプログラムのサイズが
増加してしまう欠点があった。
【0011】またこのループ展開とリストスケジューリ
ングの組み合わせ手法は必ずしも万能ではない。例えば
図5(a) に示すループのようにループ内のデータ参照関
係が循環するような場合(データリカージョン)では1
回前の反復結果を次回の計算に使用するため、ループを
展開しても前後2回の反復間で演算を多重化できず、さ
ほど並列化効果をあげることができない。実際、図5
(a) に4段のループ展開を施してアセンブラに変換した
結果の図5(b)を見ると、ループ内の命令は増加してい
るが、データリカージョンがあるため4つのsub 命令は
本質的に逐次実行しなければならない。即ち、(*) のsu
b は(**)のsub の計算結果をオペランドに持っているの
で(**)が完全に終了するまでは実行してはいけない。こ
のため、このようなループではたとえ複数の演算器を持
つVLIW、スーパースカラー計算機でも並列化性能は
高くできないという問題があった。
【0012】またコンパイラのコード生成方式によって
は、図6のようにループ内に帰納変数(この例ではk)
でアクセスするような配列参照がある場合も、ループ展
開を施しても各段での帰納変数計算のため演算実行の多
重化が妨げられる場合がある。
【0013】つまり、以上示した図5、図6のように
「ループ展開」の効果が小さいループを対象とする場合
は、従来のループ展開処理を行っても、単にオブジェク
トコードサイズが増加するだけで充分な並列化効果が得
られず、システムの有効な稼働の障害になっていた。
【0014】さらに、ループ展開とリストスケジューリ
ングを組み合わせて命令列を再構成する手法には、上記
の問題の他にも、ループ内の演算種類に偏りがある場合
に計算機の有する複数の処理ユニットが有効に利用でき
ず性能があまり向上しないという欠点があった。即ち、
ループ内の各演算種類(整数演算、浮動小数点演算)の
演算数比ができる限り計算機の持つ演算ユニット数比に
近い状態で実行するようにはなっていないために、効率
のよい並列実行ができなかった。
【0015】このことを図9を例にとって説明する。図
9(a) に示すループを整数演算ユニット2個、浮動小数
点演算ユニット1個の計算機で実行することを考える
と、ループ展開段数を変化させた場合にはループ内の整
数演算数、浮動小数点演算数は図9(b) のように変化す
る。この整数演算数/浮動小数点演算数比は、できる限
り整数ユニット数/浮動小数点ユニット数比に近い方が
効率の良いスケジューリングが得られる可能性が高くな
る。実際、図9(a) のプログラムのループ展開段数を変
えて命令スケジューリングを行った場合のループ内1サ
イクルあたり命令数は図9(b) のように変化するが、こ
れは整数演算数/浮動小数点演算数比が演算ユニット数
比に近い場合が最適値を出している。
【0016】またこのループ展開とリストスケジューリ
ングの組み合わせ手法を行う場合、一定段数以上ループ
展開を行うとループ内で使用されるレジスタ数が計算機
の持つレジスタ数を越えてしまう場合が起こりうる。こ
の場合使用できるレジスタがないのでスタックへの値の
セーブが発生する(このような状況を「レジスタあふ
れ」という)。一般にスタックへのアクセスは効率が悪
いので、このようなレジスタあふれを発生させてしまう
とループ展開を行ったにもかかわらずかえって性能が低
下してしまうという問題があった。実際、図9(a) のプ
ログラムについて図9(b) を見るとループ展開段数が12
以上でレジスタあふれが発生して性能が低下している。
【0017】つまり、「ループ展開」を有効に適用する
ためには、以上に示したようにループ内の演算数、ルー
プ内で使用されるレジスタ数を元に最適な展開段数を決
定して処理することが非常に重要であるが、従来はこれ
らの情報を活かした柔軟なループ展開処理を行うことが
できなかった。
【0018】
【発明が解決しようとする課題】このように、従来VL
IW、スーパースカラー方式用に提案されているループ
展開とリストスケジューリングの組み合わせ最適化方式
では、プログラムのループ自体の特性に応じて命令スケ
ジュール方式を自由に切り替えることが不可能であり、
その結果、さほど並列化効果が上がらないにもかかわら
ず、ループを多重展開するためオブジェクトコードサイ
ズが膨大になり、システムの効率的運用を阻害してしま
う場合が起こってしまう欠点があった。さらに、演算種
類の演算数比と計算機の持つ演算ユニット数比が大きく
異なるために、計算機の有するハードウェアを有効に利
用できず充分な並列化効果が得られなかったり、あるい
はループ展開段数を大きく設定しすぎるために、レジス
タあふれを発生してかえって性能低下を起こしてしまう
などシステムの効率的運用を阻害してしまう欠点があっ
た。
【0019】本発明は、このような事情を考慮してなさ
れたものであり、システムの有効運用を保証するループ
最適化方法及び装置を提供することを目的とする
【0020】
【課題を解決するための手段】本発明では、ループ内の
整数演算数、浮動小数点演算数、ループ内で使用するレ
ジスタ数を求め、計算機の有する演算ユニット数に応じ
て、できるだけ並列化効果が高くかつレジスタあふれを
起こさない最適ループ展開段数決定した上で処理を行
う。例えば、ループ展開とリストスケジューリングの組
合せ最適化を行うループ最適化部と、ループ内の整数演
算数、浮動小数点演算数、整数レジスタ数、浮動小数点
レジスタ数を求め、ループ展開処理適用時の整数演算
数、浮動小数点演算数、使用する整数レジスタ数、浮動
小数点レジスタ数を求めるループ解析部と、このループ
解析部の出力結果を元に、計算機の有する整数ユニット
数、浮動小数点ユニット数、レジスタ数を考慮して最も
ハードウェアを有効に使用でき、かつ、レジスタあふれ
を起こさせない最適なループ展開段数を決定するループ
展開段数決定部とを具備し、このループ展開段数決定部
の判定結果に基づき、ループ展開、及びリストスケジュ
ーリングを行いループ部分の最適化を行う。
【0021】
【0022】
【作用】本発明によれば、予めプログラム内の各ループ
の整数/浮動小数点演算数、ループ内で使用する整数/
浮動小数点レジスタ数を求め、これを元に計算機の有す
る演算ユニット数やレジスタ数を考慮して最適なループ
展開段数を決定してループの展開、及び命令の並べ替え
を行うので、従来方式で充分な並列化効果を得られない
ループであっても性能を向上させ、かつレジスタあふれ
による性能の低下を未然に防止することができる。
【0023】
【0024】
【実施例】以下、図面に基づいて本発明の一実施例につ
いて説明する。 ○実施例1
【0025】図1は本発明の一実施例に係るループ最適
化方式を適用したコンパイラの構成を示す図である。コ
ンパイラは、プログラム入力部21、構文解析部22、
ループ抽出部23、ループ解析部24、ループ展開部2
5、命令スケジュール部26、コード生成部27より構
成されている。
【0026】プログラム入力部21で読み込まれたソー
スプログラムは構文解析部22で中間テキストに変換さ
れてループ抽出部23に入力される。ループ抽出部23
は入力された中間テキストを調べ、プログラム内のルー
プ部分を検出して取り出し、この内容をループ解析部2
4に渡す。
【0027】ループ解析部24はループ内に現れる各デ
ータの参照、更新アドレスを調べ、ある反復で生成され
たデータ値を後続の反復で使用する場合がないかどうか
を調べる。もしそのようなアドレス重なりがある場合
は、相互にアドレスが重なり合うループ反復段数の差
(この値を、以下「最小アドレス重なり反復差」と称す
る)を求めて、これをループ展開部25に通知する。
【0028】この解析には、ループ内の左辺、右辺に共
通に現れる配列の添字式を調べて両者が共通の値を取り
うるか否かを調べるデータ依存解析の手法を使用すれば
よい。またポインタ変数を使用する言語では、ポインタ
値の変化を追跡することにより同様の解析を行うことが
できる。このデータ依存解析部分は、処理対象言語や最
適化要求仕様に応じて任意に構成すればよい。
【0029】例えば、図7(a) に示すループの場合、ル
ープ反復iで定義されたデータx[i]を2回後の反復
で参照することが認識できる。この場合ループ解析部2
4は最小のデータアドレス重なりを生ずる反復差2をル
ープ展開部25に通知する。同様に図8の場合、ループ
反復iで定義されたデータx[i]を次の反復で参照す
るので、ループ解析部24は最小アドレス重なり反復差
1を通知する。
【0030】ループ展開部25は、ここで通知された最
小アドレス重なり反復差を元にループ展開処理を行う。
この際、もしループ解析部24が最小アドレス重なり反
復差Mを通知した場合には、最大でもM段までしかルー
プを展開しないようにする。従って図7(a) のループに
対しては1段または2段のループ展開は行うが、3段以
上には展開しない。また図8のループに対しては1段の
み、従ってループ展開は全く適用しないことにする。
【0031】実際、図7(a) のループを3段以上展開し
たり、図8のループを2段以上展開しても、反復間でデ
ータ依存性により命令並べ替えに制限が生じ、並列性を
高めることは困難である。例えば図8に2段ループ展開
した場合は、図5の場合と同様に2つのsub 命令が逐次
実行される必要があるので、これらの命令を並列に処理
できず高性能な並列化プログラムは得られない。一方、
図7(a) をループ解析部24の判定結果に従って、2段
ループ展開した場合のアセンブラ出力は図7(b) のよう
になるが、この場合は2つのsub 命令は独立したデータ
に対する処理になるので、自由に並列実行してよく、性
能のよい並列プログラムを構成することが可能である。
このようにしてループ最適化された中間テキストはコー
ド生成部26により機械語に翻訳されオブジェクトプロ
グラムとして出力される。
【0032】図2は本発明の別の実施例に係るループ最
適化方式を適用したコンパイラの構成を示す図である。
このコンパイラは、図1と同様のプログラム入力部3
1、構文解析部32、ループ抽出部33、ループ解析部
34、ループ展開部35、命令スケジュール部36、コ
ード生成部37に加えて帰納変数解析部38をもって構
成されている。
【0033】この実施例は図6に示したようなループの
各反復毎に計算される帰納変数を伴う配列アクセスによ
りループ展開での並列化性能向上が阻害される場合に適
用するもので、この場合、ループ展開部35はループ解
析部34の判定結果と共に帰納変数解析部38の判定結
果を元にループ展開を行うか否かを判断する。
【0034】帰納変数解析部38は、ループ抽出部33
から入力されたループ内中間テキストの各データを調
べ、図6に示すような帰納変数kが出現した場合はその
旨をループ展開部35に通知する。ループ展開部はこの
通知を受けた場合には、そのループの展開を行わないよ
うにしてループの最適化を行う。
【0035】なお本方式では、不要なループ展開を行わ
ないのでプログラムのコンパイル時間、最適化時間を短
縮できるという副次的効果も得られるので、より一層の
システムの有効活用が可能となる。 ○実施例2
【0036】本実施例に係るループ最適化方式を適用し
たコンパイラの構成を、図11に示す。コンパイラは、
プログラム入力部11、構文解析部12、ループ抽出部
13、ループ解析部14、ループ展開段数決定部15、
ループ展開部16、命令スケジュール部17、コード生
成部18より構成されている。
【0037】プログラム入力部11で読み込まれたソー
スプログラムは構文解析部12で中間テキストに変換さ
れてループ抽出部13に入力される。ループ抽出部13
は入力された中間テキストを調べ、プログラム内のルー
プ部分を検出して取り出し、この内容をループ解析部1
4に渡す。である。
【0038】本実施例におけるループ解析部14は、ル
ープ内に現れる整数演算数、浮動小数点演算数、ループ
内で使用される整数レジスタ数、浮動小数点レジスタ数
を中間テキストを解析して求める。例えば図9(a) のル
ープ内演算をtree形式の中間テキストで表現したものは
図10のようになる。ループ解析部14ではこれらの中
間テキストを辿って各treeの重複しない(異なるデータ
オブジェクトに対応する)末端ノードをレジスタ、中間
ノードを演算として演算数、レジスタ数を求めていく。
また、この際に演算の型情報から整数/浮動小数点演算
数、整数/浮動小数点レジスタ数を個別に求める。また
ループ脱出条件評価のための演算数も別に求める。さら
にコード生成方式を考慮して必要があれば、中間ノード
に対してテンポラリレジスタが使用されるものとして整
数/浮動小数点テンポラリレジスタ数を求めても良い。
図10に対する各々の値は、 整数演算数=0 浮動小数点演算数=16 アドレス計算、分岐計算数=4 整数レジスタ数=1(ループ変数k) 浮動小数点レジスタ数=12 となる。これら算出した情報をループ展開段数決定部1
5に通知する。
【0039】ループ展開段数決定部15はループ解析部
14の出力情報とハードウェア情報を元にレジスタあふ
れを起こさずにかつ計算機の構成に適合した演算数が得
られる最適なループ展開段数を決定する。ハードウェア
情報としては計算機の有する整数ユニット数、浮動小数
点ユニット数、整数レジスタ数、浮動小数点レジスタ
数、整数テンポラリレジスタ数、浮動小数点テンポラリ
レジスタ数、各演算の遅延サイクル数などを計算機の構
成、コード生成方式などに応じて与える。またハードウ
ェア情報は、特定の計算機用の情報をコンパイラ内部に
登録してもよいし、コンパイラ起動時にオプションなど
で与えてもよく、本発明ではハードウェア情報の入力形
式は任意のものを使用して構わない。
【0040】以下、整数ユニット2個、浮動小数点ユニ
ット1個、整数レジスタ32個、浮動小数点レジスタ3
2個、整数ロード命令の遅延が1サイクル、浮動小数点
ロード命令も整数ユニットで実行され遅延が2サイク
ル、浮動小数点演算の遅延が2サイクルである計算機を
仮定して説明していく。ループ解析部14で得られた情
報を元に最適なループ展開段数を得るには、以下の計算
を行う。
【0041】まず、整数演算数、浮動小数点演算数、整
数レジスタ数、浮動小数点レジスタ数を元にループ展開
をn段行った場合の演算数を計算する。レジスタ数はロ
ード命令で演算ユニットが使用されるサイクルを考慮に
入れるために使用する。一般にループ展開を行う場合
は、ループ内配列のアドレス加算はn段分をまとめて行
う。またループ終了条件の評価計算もn段分で1回に減
るので、整数演算、浮動小数点演算が混在するループの
場合はループ展開段数が増えると全演算に占める整数演
算の比率は小さくなっていく。整数演算数IOP は、 IOP = (整数演算数+(整数レジスタ数)*2+(浮動
小数点レジスタ数)*3)*(ループ展開段数)+(ア
ドレス、分岐演算数) で求められる。ここで(整数レジスタ数)*2は1サイ
クル遅延で実行される整数ロード命令、(浮動小数点レ
ジスタ数)*3は整数ユニットで2サイクル遅延実行さ
れる浮動小数点ロード命令に整数ユニットが使用される
サイクルを近似している。同様に浮動小数点演算数FOP
は、 FOP = 浮動小数点演算数*3*(ループ展開段数) で求められる。*3は浮動小数点演算命令が2サイクル
遅延で実行されることを表している。
【0042】これらの値から、 IFrate=IOP*2/FOP を各ループ展開段数について求めていく。ハードウェア
は2つの整数ユニットと1つの浮動小数点ユニットをも
っているので、IFrateが1に近いほど各種別の命
令分布がハードウェアに適合することになる。演算数の
評価と同時に、レジスタ数も評価する。この場合、ルー
プ解析部14で求めたレジスタノードをさらに解析し
て、 ・独立なスカラー変数のノード数 ・独立な配列変数のノード数 を計算する。ここで独立な配列変数というのは、例えば
図3(a) のループに対するアセンブラプログラム図3
(b) を見ると、配列y[i]には予めループ外でレジス
タが確保され($f2)、ループ内でy[i+1]に対
するレジスタ($f0)のみが使用される。次段に移る
際にレジスタ間移動命令(mov)で値をコピーするよ
うになっている。このようにループ制御変数iと一定値
オフセットでアクセスされる同一配列は1つのレジスタ
で割付が可能になるので1レジスタに対応として数え
る。配列xはこれとは別にレジスタが使用されるので独
立な配列変数である。図9に示すプログラムでは独立な
配列ノードはX、Y、Z、Uの4つになる。このような
方式で使用レジスタ数を算出すると、整数レジスタ数IR
EGは IREG=(独立整数配列ノード数)*ループ展開段数+
(総整数ノード数ー独立整数配列ノード数)
【0043】独立整数配列ノードはループ展開されると
別のレジスタを必要とするのでループ展開段数倍される
が、それ以外のスカラー変数はループ内で変化しないの
で1個のレジスタで充分であることを表している。同様
に浮動小数点レジスタ数FREGは、 FREG=(独立浮動小数点配列ノード数)*ループ展開段
数+(総浮動小数点ノード数ー独立浮動小数点配列ノー
ド数) となる。これらのレジスタ数が計算機の持つレジスタ数
を越えない範囲でループ展開段数を決定する。以上示し
た、演算数、レジスタ数評価を併せた最適ループ展開段
数決定部分のフローチャートを図12に示す。
【0044】なお本実施例では、変数レジスタのみを対
象にして評価を行う方式を述べたが、レジスタ割当方式
が確定しておりまたレジスタの使用形態も確定して一定
のテンポラリレジスタを使用することが決まっている場
合には演算treeの中間ノードに対してテンポラリレジス
タが割り当てられるとして評価に加えてもよいし、演算
ユニットに関してもさらに細分化して、整数ユニット/
浮動小数点加減算ユニット/浮動小数点乗算ユニットな
どを固有に評価してもよい。
【0045】ループ展開部16は、ループ展開段数決定
部15から通知された最適ループ展開段数でループ展開
処理を行う。通知される展開段数でループ展開を行うと
レジスタあふれを起こすことなく、かつ計算機の有する
ハードウェアリソース数の構成と展開されたループ内の
演算の構成が最も適合した命令列を得ることができ、命
令スケジュール部17での命令並べ変えにより効率の良
い並列実行を行うことができる。このようにしてループ
最適化された中間テキストはコード生成部18により機
械語に翻訳されオブジェクトプログラムとして出力され
る。
【0046】なお本方式は使用する計算機のハードウェ
ア構成に依らず適用可能である。即ちループ展開段数決
定部で使用するハードウェアパラメータを交換するだけ
で内部の制御を全く変えることなく最適ループ展開段数
を決定することが可能であり、非常に広範囲の計算機に
適用可能である。
【0047】また、実施例1と実施例2を組み合わせて
実施することもできる。この場合、例えば、実施例1の
ループ解析部24により求めた、参照あるいは更新デー
タの相互間でアドレスが重なり合う最小の反復段数の差
Mを、実施例2の展開段数決定部15においてループ展
開段数を決定する際の上限とする。すると、展開段数決
定部15で決定されるループ展開段数は、参照あるいは
更新データの相互間でアドレスが重なり合うことがな
く、かつ、レジスタあふれを起こすことのない範囲で、
計算機の有するユニットを最大限有効に利用できるもの
となる。
【0048】
【発明の効果】以上説明したように本発明によれば、予
めプログラム内の各ループの整数/浮動小数点演算数、
ループ内で使用する整数/浮動小数点レジスタ数を求
め、これを元に計算機の有する演算ユニット数やレジス
タ数を考慮して最適なループ展開段数を決定してループ
の展開、及び命令の並び替えを行うので、従来方式で充
分な並列化効果を得られないループであっても性能を向
上させ、かつ、レジスタあふれによる性能の低下を未然
に防止することが可能なループ最適化方式を提供でき
る。
【図面の簡単な説明】
【図1】 本発明の第1の実施例に係るループ最適化方
式を適用したコンパイラの構成例を示す図。
【図2】 本発明の第1の実施例に係るループ最適化方
式を適用したコンパイラの別の構成例を示す図。
【図3】 (a) は本発明に係るループ最適化方式の処理
対象となるループを示すソースプログラム、(b) は(a)
のプログラムをコンパイルした結果を示すアセンブラプ
ログラムを表す図。
【図4】 (a) は図3(a) に4段のループ展開を施した
ループを示すソースプログラム、(b) は(a) のプログラ
ムをコンパイルした結果を示すアセンブラプログラムを
表す図。
【図5】 (a) は内部にデータリカージョンを含むルー
プを示すソースプログラム、(b) は(a) のプログラムを
4段のループ展開でコンパイルした結果を示すアセンブ
ラプログラムを表す図。
【図6】 ループ内に帰納変数アクセスを含むループを
示すソースプログラムを表す図。
【図7】 (a) は最小アドレス重なり反復差が2となる
ループを示すソースプログラム、(b) は(a) のプログラ
ムをループ解析部の判定結果に従って2段ループ展開し
てコンパイルした結果を示すアセンブラプログラムを表
す図。
【図8】 最小アドレス重なり反復差が1となるループ
を示すソースプログラムを表す図。
【図9】 (a) は本発明に係るループ最適化方式の処理
対象となるループを示すソースプログラム、(b) は(a)
のプログラムをループ展開段数を変えてコンパイルした
場合の整数演算数、浮動小数点演算数、命令スケジュー
リングした場合のループ内の1サイクルあたり命令数を
示す図。
【図10】 図9(a) のプログラムのループ部分のtree
形式中間テキストを示す図。
【図11】 本発明の第2の実施例に係るループ最適化
方式を適用したコンパイラの構成例を示す図。
【図12】 本発明の第2の実施例に係るループ最適化
方式における最適ループ展開段数を求める処理の流れ
図。
【符号の説明】
21 プログラム入力部 22 構文解析部 23 ループ抽出部 24 ループ解析部 25 ループ展開部 26 命令スケジュール部 27 コード生成部 31 プログラム入力部 32 構文解析部 33 ループ抽出部 34 ループ解析部 35 ループ展開部 36 命令スケジュール部 37 コード生成部 38 帰納変数解析部 11 プログラム入力部 12 構文解析部 13 ループ抽出部 14 ループ解析部 15 ループ展開段数決定部 16 ループ展開部 17 命令スケジュール部 18 コード生成部
フロントページの続き (56)参考文献 「情報処理学会第42回(平成3年前 期)全国大会講演論文集」(1991−3) P.5−111〜112 「情報処理学会研究報告」Vol. 89,No.99(89−ARC−79)(1989 −11)P.57−64 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45,9/38

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 命令列を複数回反復して実行するループ
    処理を含むプログラムを構成する複数の命令列を並行し
    て実行し得る電子計算機で用いるループ最適化装置にお
    いて、 前記ループ処理をループ展開段数分同一ループ内で展開
    する場合のループ展開段数と、このループ展開段数で展
    開を行なった場合の前記同一ループ内の命令列に含まれ
    る整数演算数と浮動小数点演算数とを検出する第1の検
    出手段と、 前記ループ処理をループ展開段数分同一ループ内で展開
    する場合のループ展開段数と、このループ展開段数で展
    開を行った場合に前記同一ループ内で使用される整数レ
    ジスタ数と浮動小数点レジスタ数とを検出する第2の検
    出手段と、 前記第1の検出手段で検出された整数演算数と浮動小数
    点演算数とから求められる比率が該電子計算機の有する
    整数演算ユニット数と浮動小数点演算ユニット数の比率
    に最も近く、かつ、前記第2の検出手段で検出された整
    数レジスタ数および浮動小数点レジスタ数が該電子計算
    機の有する整数レジスタ数および浮動小数点レジスタ数
    を超えない範囲で前記ループ展開段数を決定する決定手
    段と、 ループ内の命令列を、前記決定手段により決定されたル
    ープ展開段数分1つのループ内に展開し、前記ループ内
    の命令列と等価な命令列に変換するプログラム変換手段
    と、 このプログラム変換手段で1つのループ内に展開した前
    記ループ展開段数分の命令列を並行して実行するプログ
    ラム実行手段とを備えたことを特徴とするループ最適化
    装置。
  2. 【請求項2】 命令列を複数回反復して実行するループ
    処理を含むプログラムを構成する複数の命令列を並行し
    て実行し得る電子計算機で用いるループ最適化方法にお
    いて、 前記ループ処理をループ展開段数分同一ループ内で展開
    する場合のループ展開段数と、このループ展開段数で展
    開を行った場合の前記同一ループ内の命令列に含まれる
    整数演算数と浮動小数点演算数とを検出し、 前記ループ処理をループ展開段数分同一ループ内で展開
    する場合のループ展開段数と、このループ展開段数で展
    開を行った場合に前記同一ループ内で使用される整数レ
    ジスタ数と浮動小数点レジスタ数とを検出し、 検出された前記整数演算数と浮動小数点演算数とから求
    められる比率が該電子計算機の有する整数演算ユニット
    数と浮動小数点演算ユニット数の比率に最も近く、か
    つ、検出された前記整数レジスタ数および浮動小数点レ
    ジスタ数が該電子計算機の有する整数レジスタ数および
    浮動小数点レジスタ数を超えない範囲で前記ループ展開
    段数を決定し、 ループ内の命令列を、決定された前記ループ展開段数分
    1つのループ内に展開して、前記ループ内の命令列と等
    価な命令列に変換し、 前記1つのループ内に展開した前記ループ展開段数分の
    命令列を並行して実行することを特徴とするループ最適
    化方法。
JP3071978A 1991-04-05 1991-04-05 ループ最適化方法及び装置 Expired - Fee Related JP3032030B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3071978A JP3032030B2 (ja) 1991-04-05 1991-04-05 ループ最適化方法及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3071978A JP3032030B2 (ja) 1991-04-05 1991-04-05 ループ最適化方法及び装置

Publications (2)

Publication Number Publication Date
JPH04307624A JPH04307624A (ja) 1992-10-29
JP3032030B2 true JP3032030B2 (ja) 2000-04-10

Family

ID=13476064

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3071978A Expired - Fee Related JP3032030B2 (ja) 1991-04-05 1991-04-05 ループ最適化方法及び装置

Country Status (1)

Country Link
JP (1) JP3032030B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5402752B2 (ja) * 2010-03-19 2014-01-29 富士通株式会社 コンパイル装置およびコンパイルプログラム
US9753733B2 (en) * 2012-06-15 2017-09-05 Apple Inc. Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold
JP6245031B2 (ja) * 2014-03-27 2017-12-13 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
「情報処理学会研究報告」Vol.89,No.99(89−ARC−79)(1989−11)P.57−64
「情報処理学会第42回(平成3年前期)全国大会講演論文集」(1991−3)P.5−111〜112

Also Published As

Publication number Publication date
JPH04307624A (ja) 1992-10-29

Similar Documents

Publication Publication Date Title
JP3032031B2 (ja) ループ最適化方法及び装置
JP4077252B2 (ja) コンパイラプログラムおよびコンパイル処理方法
US6708325B2 (en) Method for compiling high level programming languages into embedded microprocessor with multiple reconfigurable logic
JP3311462B2 (ja) コンパイル処理装置
US5664193A (en) Method and apparatus for automatic selection of the load latency to be used in modulo scheduling in an optimizing compiler
US6754893B2 (en) Method for collapsing the prolog and epilog of software pipelined loops
JP2921190B2 (ja) 並列実行方式
US6308316B1 (en) Apparatus for analyzing operations of parallel processing system
US5809308A (en) Method and apparatus for efficient determination of an RMII vector for modulo scheduled loops in an optimizing compiler
JPH09282179A (ja) オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置
EP1039382B1 (en) Memory access optimizing method
JP3032030B2 (ja) ループ最適化方法及び装置
US6954927B2 (en) Hardware supported software pipelined loop prologue optimization
JP3028821B2 (ja) 並列化コンパイル方法
JP3196625B2 (ja) 並列化コンパイル方式
JPS62217325A (ja) アセンブラコ−ド最適化方式
JPH02176938A (ja) 機械語命令最適化方式
US6694512B1 (en) Data processing device, data processing method and supply medium thereof
JP3551352B2 (ja) ループ分割方法
JP3114884B2 (ja) ファジィ推論処理コンパイルシステム
JP2003131888A (ja) 手続き間命令スケジューリング方法
JP3323147B2 (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JPH02132525A (ja) コンパイル方法
JPH04308937A (ja) コード生成方法
JPH08115220A (ja) ループ最適化方法

Legal Events

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

Free format text: PAYMENT UNTIL: 20080210

Year of fee payment: 8

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

Free format text: PAYMENT UNTIL: 20090210

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20100210

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20100210

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20110210

Year of fee payment: 11

LAPS Cancellation because of no payment of annual fees