JPH04307625A - ループ最適化方法及び装置 - Google Patents
ループ最適化方法及び装置Info
- Publication number
- JPH04307625A JPH04307625A JP3071979A JP7197991A JPH04307625A JP H04307625 A JPH04307625 A JP H04307625A JP 3071979 A JP3071979 A JP 3071979A JP 7197991 A JP7197991 A JP 7197991A JP H04307625 A JPH04307625 A JP H04307625A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- operations
- program
- instructions
- processing
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
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)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
[発明の目的]
【0001】
【産業上の利用分野】本発明は、複数の命令の列を並列
に実行可能である電子計算機におけるループ最適化方式
に関する。
に実行可能である電子計算機におけるループ最適化方式
に関する。
【0002】
【従来の技術】従来、電子計算機の命令列は逐次処理さ
れることを前提に構成され、電子計算機はこれに従って
命令を1個ずつ取り出して実行していた。
れることを前提に構成され、電子計算機はこれに従って
命令を1個ずつ取り出して実行していた。
【0003】この命令列の処理高速化のため、パイプラ
イン技術が導入された。これは命令の実行を複数の段階
(ステージ)に分解し、この分解された実行段階を単位
として、異なる段階の複数の命令を同時に演算する技術
であり、これにより処理のサイクルタイム短縮が可能と
なり命令列全体の処理時間も短縮された。しかし、パイ
プライン技術においても実行開始される命令は1サイク
ルあたり1個であり、これを超えた命令の並列実行は行
われていなかった。
イン技術が導入された。これは命令の実行を複数の段階
(ステージ)に分解し、この分解された実行段階を単位
として、異なる段階の複数の命令を同時に演算する技術
であり、これにより処理のサイクルタイム短縮が可能と
なり命令列全体の処理時間も短縮された。しかし、パイ
プライン技術においても実行開始される命令は1サイク
ルあたり1個であり、これを超えた命令の並列実行は行
われていなかった。
【0004】これに対し、近年、命令単位で並列実行を
可能とする技術が導入されており、1サイクルあたり1
個以上の命令を処理することが可能になってきている。 VLIW(Very Long Instructi
on Word) 技術とスーパースカラー技術と呼ば
れる2つの手法が代表的なものである。
可能とする技術が導入されており、1サイクルあたり1
個以上の命令を処理することが可能になってきている。 VLIW(Very Long Instructi
on Word) 技術とスーパースカラー技術と呼ば
れる2つの手法が代表的なものである。
【0005】VLIW技術は、予め定められた数の複数
命令を1つの実行単位として定義し、計算機はこれら複
数の命令を必ず同時に実行する。計算機は処理対象の複
数命令が同時に実行可能であるか否かを判定する必要が
なく制御が単純であるため、少ないハードウェア量で実
現可能であり、またサイクルタイムの短縮が可能である
。しかしながら、処理の並列性はコンパイラまたは人手
により判定し、予め命令の割当を行っておかなければな
らない。
命令を1つの実行単位として定義し、計算機はこれら複
数の命令を必ず同時に実行する。計算機は処理対象の複
数命令が同時に実行可能であるか否かを判定する必要が
なく制御が単純であるため、少ないハードウェア量で実
現可能であり、またサイクルタイムの短縮が可能である
。しかしながら、処理の並列性はコンパイラまたは人手
により判定し、予め命令の割当を行っておかなければな
らない。
【0006】一方スーパースカラー技術は、従来と同様
の逐次実行を前提とした命令列を解釈して並列実行可能
性を調べるハードウェアを備え、並列実行可能な場合に
はこれらの複数命令を並列実行するように制御する方式
である。この方式では命令の並列実行可能性判定を専用
ハードウェアに委ねているため、通常のプログラムであ
っても逐次実行時との互換性を保った実行は保証される
。しかし実際にスーパースカラー方式で性能向上を目指
す場合には、ハードウェアリソースやデータ依存性等の
情報を元に演算ユニットが出来る限り動作状態にあるよ
うにするため、VLIW方式と同様の命令並べ替えを行
っておくことが必須である。
の逐次実行を前提とした命令列を解釈して並列実行可能
性を調べるハードウェアを備え、並列実行可能な場合に
はこれらの複数命令を並列実行するように制御する方式
である。この方式では命令の並列実行可能性判定を専用
ハードウェアに委ねているため、通常のプログラムであ
っても逐次実行時との互換性を保った実行は保証される
。しかし実際にスーパースカラー方式で性能向上を目指
す場合には、ハードウェアリソースやデータ依存性等の
情報を元に演算ユニットが出来る限り動作状態にあるよ
うにするため、VLIW方式と同様の命令並べ替えを行
っておくことが必須である。
【0007】これらの並列実行方式において、特にプロ
グラム中のループ部分を高速化するための命令並べ替え
方式としては、ループの反復1回分を固有のハードウェ
アリソースに割り当てて仮想的に複数のループ反復を個
別の処理ユニットを用いてパイプライン的に同時実行す
る「ソフトウェアパイプライニング(Software
Pipelining) 」と呼ばれる方式が知られ
ている。
グラム中のループ部分を高速化するための命令並べ替え
方式としては、ループの反復1回分を固有のハードウェ
アリソースに割り当てて仮想的に複数のループ反復を個
別の処理ユニットを用いてパイプライン的に同時実行す
る「ソフトウェアパイプライニング(Software
Pipelining) 」と呼ばれる方式が知られ
ている。
【0008】例えば浮動小数点ユニット1個、メモリ(
ロード、ストア)ユニット1個、整数ユニット1個、分
岐ユニット1個から構成されるVLIW計算機でソフト
ウェアパイプライニング実行することを仮定する。また
浮動小数点加算、乗算命令は2サイクルの遅延があるも
のと仮定する。C言語で記述したループ図2(a) を
考える。このループはスカラー変数b,cが既にレジス
タ上にロードされているとすれば、 (1) A[i]のロード (2) A[i]*bの乗算 (3) A[i]*b+cの加算 (4) 結果のストア
ロード、ストア)ユニット1個、整数ユニット1個、分
岐ユニット1個から構成されるVLIW計算機でソフト
ウェアパイプライニング実行することを仮定する。また
浮動小数点加算、乗算命令は2サイクルの遅延があるも
のと仮定する。C言語で記述したループ図2(a) を
考える。このループはスカラー変数b,cが既にレジス
タ上にロードされているとすれば、 (1) A[i]のロード (2) A[i]*bの乗算 (3) A[i]*b+cの加算 (4) 結果のストア
【0009】の4段階の処理で1回のループ反復が終了
する。従って従来の逐次計算機における命令列は図2(
b) のようになる。ソフトウェアパイプライニングで
は、この各段階を独立のユニットで処理するので、各ク
ロックでの実行状態は図2(c) のようになる。クロ
ック7、8がループ実行の定常状態でk回目反復のlo
ad, mul 、k+2回目反復のadd 、k+3
回目反復のstore が多重化して処理される。この
ようなソフトウェアパイプライニング処理により、ハー
ドウェアの持つ複数のユニット(加算、乗算、ロード、
ストア)を遊ばせることなく効率の良いループ処理が可
能になる。このような命令並べ替え方式をソースプログ
ラムに手を加えることなくコンパイラ内部で処理するこ
とが、VLIW、スーパースカラー方式においては必要
となる。
する。従って従来の逐次計算機における命令列は図2(
b) のようになる。ソフトウェアパイプライニングで
は、この各段階を独立のユニットで処理するので、各ク
ロックでの実行状態は図2(c) のようになる。クロ
ック7、8がループ実行の定常状態でk回目反復のlo
ad, mul 、k+2回目反復のadd 、k+3
回目反復のstore が多重化して処理される。この
ようなソフトウェアパイプライニング処理により、ハー
ドウェアの持つ複数のユニット(加算、乗算、ロード、
ストア)を遊ばせることなく効率の良いループ処理が可
能になる。このような命令並べ替え方式をソースプログ
ラムに手を加えることなくコンパイラ内部で処理するこ
とが、VLIW、スーパースカラー方式においては必要
となる。
【0010】さて、図2のループの例ではソフトウェア
パイプライニングを適用することで効率の良い命令並べ
替えが実現できたが、それでもプロセッサの持つ最大の
並列化性能が得られるとは限らない。その理由は次の通
りである。
パイプライニングを適用することで効率の良い命令並べ
替えが実現できたが、それでもプロセッサの持つ最大の
並列化性能が得られるとは限らない。その理由は次の通
りである。
【0011】図2(c) で’ー’で示される部分は演
算の遅延サイクルであるが、一般にVLIW、スーパー
スカラー方式では各処理ユニットはパイプライン制御さ
れる場合が多いので、実際にはこのサイクルにも別の独
立な演算命令があれば、それを処理ユニットに供給する
ことが可能である。もしそのような命令を遅延サイクル
に挿入できればさらに並列化性能を高くできるが、この
例では適当な演算がない。このように、元のループ自身
の処理内容が単純すぎる場合、命令の空きスロットがあ
ってもそこに入れられる演算命令がなく最大限の並列性
が得られないことがある。
算の遅延サイクルであるが、一般にVLIW、スーパー
スカラー方式では各処理ユニットはパイプライン制御さ
れる場合が多いので、実際にはこのサイクルにも別の独
立な演算命令があれば、それを処理ユニットに供給する
ことが可能である。もしそのような命令を遅延サイクル
に挿入できればさらに並列化性能を高くできるが、この
例では適当な演算がない。このように、元のループ自身
の処理内容が単純すぎる場合、命令の空きスロットがあ
ってもそこに入れられる演算命令がなく最大限の並列性
が得られないことがある。
【0012】例えば、図3(a) のループは、ループ
内で1つの加算しか行わない単純なループである。これ
に対応する命令列は図3(b) のようになるが、これ
に3段のソフトウェアパイプライニングを行っても、図
3(c) のような実行状態しか作れない。この場合は
、加算の遅延サイクル2クロック内にも別の独立な加算
演算を供給することが可能であるにもかかわらず、実行
対象の命令がないために2クロックを無駄に浪費してし
まう。従ってこのようなループを処理する場合は、ソフ
トウェアパイプライニングをそのまま施してもVLIW
、スーパースカラー計算機の持つ複数の演算ユニットを
最大限有効に利用した並列処理は不可能である。
内で1つの加算しか行わない単純なループである。これ
に対応する命令列は図3(b) のようになるが、これ
に3段のソフトウェアパイプライニングを行っても、図
3(c) のような実行状態しか作れない。この場合は
、加算の遅延サイクル2クロック内にも別の独立な加算
演算を供給することが可能であるにもかかわらず、実行
対象の命令がないために2クロックを無駄に浪費してし
まう。従ってこのようなループを処理する場合は、ソフ
トウェアパイプライニングをそのまま施してもVLIW
、スーパースカラー計算機の持つ複数の演算ユニットを
最大限有効に利用した並列処理は不可能である。
【0013】このようにソフトウェアパイプライニング
によるループ最適化を行うと、ループ反復1回内の演算
命令数、メモリアクセス命令数、プロセッサの持つ演算
ユニット数などがうまくマッチしている場合については
効率の良い並列実行が可能であるが、一方でループ自身
の持つ演算数が少ないような場合には、プロセッサ内の
演算ユニットに余りが生じてしまい、並列化効果が高く
できなくなってしまうという欠点があった。
によるループ最適化を行うと、ループ反復1回内の演算
命令数、メモリアクセス命令数、プロセッサの持つ演算
ユニット数などがうまくマッチしている場合については
効率の良い並列実行が可能であるが、一方でループ自身
の持つ演算数が少ないような場合には、プロセッサ内の
演算ユニットに余りが生じてしまい、並列化効果が高く
できなくなってしまうという欠点があった。
【0014】
【発明が解決しようとする課題】このように、従来、V
LIW、スーパースカラー方式用に提案されているソフ
トウェアパイプライニングによるループ最適化方式では
、プロセッサの持つ演算ユニット数に対しプログラムの
ループ自体の持つ演算数が小さい場合にはプロセッサの
持つ演算ユニットの全てを使用した並列実行が行えず、
充分な並列処理性能が得られないという問題があった。
LIW、スーパースカラー方式用に提案されているソフ
トウェアパイプライニングによるループ最適化方式では
、プロセッサの持つ演算ユニット数に対しプログラムの
ループ自体の持つ演算数が小さい場合にはプロセッサの
持つ演算ユニットの全てを使用した並列実行が行えず、
充分な並列処理性能が得られないという問題があった。
【0015】本発明は、このような事情を考慮してなさ
れたものであり、その目的とするところは、プログラム
内の各ループ内部の演算数に依らず充分な並列化性能を
実現できるループ最適化方式を提供することにある。 [発明の構成]
れたものであり、その目的とするところは、プログラム
内の各ループ内部の演算数に依らず充分な並列化性能を
実現できるループ最適化方式を提供することにある。 [発明の構成]
【0016】
【課題を解決するための手段】本発明に係るループ最適
化方式は、処理対象ループ内の演算数やデータ参照関係
を元にループの展開可能性を判定するループ解析部と、
このループ解析部の結果を元にループ展開処理を行うル
ープ展開部と、展開されたループに対してソフトウェア
パイプライン処理を施すループ最適化部を、具備し、各
ループの演算数、アクセスパターンに応じて前処理を施
したうえでループ部分の最適化を行うことを特徴とする
ものである。
化方式は、処理対象ループ内の演算数やデータ参照関係
を元にループの展開可能性を判定するループ解析部と、
このループ解析部の結果を元にループ展開処理を行うル
ープ展開部と、展開されたループに対してソフトウェア
パイプライン処理を施すループ最適化部を、具備し、各
ループの演算数、アクセスパターンに応じて前処理を施
したうえでループ部分の最適化を行うことを特徴とする
ものである。
【0017】
【作用】本発明によれば、予めプログラム内の各ループ
部分内の演算数やデータ参照数、データ参照関係から、
従来のソフトウェアパイプライニングをそのまま適用し
てもループ内演算数とプロセッサの演算ユニット数が不
適合で充分な並列化性能が得られない場合を検出して、
このようなループに対しては予めループの反復を展開す
る処理を施すことにより、ループの1反復の演算数を増
加したうえでソフトウェアパイプライニングを行うので
、従来方式では充分な並列化性能を得られないループで
あっても高い並列化性能を持つようにできる。
部分内の演算数やデータ参照数、データ参照関係から、
従来のソフトウェアパイプライニングをそのまま適用し
てもループ内演算数とプロセッサの演算ユニット数が不
適合で充分な並列化性能が得られない場合を検出して、
このようなループに対しては予めループの反復を展開す
る処理を施すことにより、ループの1反復の演算数を増
加したうえでソフトウェアパイプライニングを行うので
、従来方式では充分な並列化性能を得られないループで
あっても高い並列化性能を持つようにできる。
【0018】
【実施例】以下、図面に基づいて本発明の一実施例につ
いて説明する。
いて説明する。
【0019】図1は本発明の一実施例に係るループ最適
化方式を適用したコンパイラの構成を示す図である。コ
ンパイラは、プログラム入力部21、構文解析部22、
ループ抽出部23、ループ解析部24、ループ展開部2
5、ループ最適化部26、コード生成部27より構成さ
れている。
化方式を適用したコンパイラの構成を示す図である。コ
ンパイラは、プログラム入力部21、構文解析部22、
ループ抽出部23、ループ解析部24、ループ展開部2
5、ループ最適化部26、コード生成部27より構成さ
れている。
【0020】プログラム入力部21で読み込まれたソー
スプログラムは構文解析部22で中間テキストに変換さ
れてループ抽出部23に入力される。ループ抽出部23
は入力された中間テキストを調べ、プログラム内のルー
プ部分を検出して取り出し、この内容をループ解析部2
4に渡す。
スプログラムは構文解析部22で中間テキストに変換さ
れてループ抽出部23に入力される。ループ抽出部23
は入力された中間テキストを調べ、プログラム内のルー
プ部分を検出して取り出し、この内容をループ解析部2
4に渡す。
【0021】ループ解析部24はループ内に現れる演算
命令数、メモリアクセス命令数を調べ、このループを直
接ソフトウェアパイプライニングして充分な性能が得ら
れるかどうかを判定する。この際の判定基準としては、
(1) ループ内の演算命令数が一定個数より小さい場
合にループ展開する (2) ループ内の演算命令個数のメモリアクセス命令
個数に対する比率が一定値より小さい場合にループ展開
する(3) ループ内の演算命令数のプロセッサの持つ
演算ユニット個数に対する比率が一定値より小さい場合
にループ展開する などが考えられるが、この判定基準は個々のプロセッサ
の演算命令性能(各演算の遅延が何クロックか)やユニ
ット構成等に応じて自由に設定して構わない。
命令数、メモリアクセス命令数を調べ、このループを直
接ソフトウェアパイプライニングして充分な性能が得ら
れるかどうかを判定する。この際の判定基準としては、
(1) ループ内の演算命令数が一定個数より小さい場
合にループ展開する (2) ループ内の演算命令個数のメモリアクセス命令
個数に対する比率が一定値より小さい場合にループ展開
する(3) ループ内の演算命令数のプロセッサの持つ
演算ユニット個数に対する比率が一定値より小さい場合
にループ展開する などが考えられるが、この判定基準は個々のプロセッサ
の演算命令性能(各演算の遅延が何クロックか)やユニ
ット構成等に応じて自由に設定して構わない。
【0022】またループ解析部24ではループ展開を行
った場合に反復間で逐次実行が必要となるデータ参照関
係がないかどうかも同時に解析する。この解析には、ル
ープ内の左辺、右辺に共通に現れる配列の添字式を調べ
て両者が共通の値を取りうるか否かを調べるデータ依存
解析の手法を使用すればよい。例えば図5に示すループ
はk回目反復の結果をk+1回目で使用するため、ルー
プ反復は本質的に逐次実行である。このようなデータ参
照関係がある場合はループ展開を行っても独立な演算命
令が増加しないので展開は行わず、ループ最適化部26
で直接ソフトウェアパイプライニングするものとする。 以上のような基準に基づいて、ループ解析部24がルー
プを展開すべきであると判定した場合はループ展開部2
5でループ展開が実行される。
った場合に反復間で逐次実行が必要となるデータ参照関
係がないかどうかも同時に解析する。この解析には、ル
ープ内の左辺、右辺に共通に現れる配列の添字式を調べ
て両者が共通の値を取りうるか否かを調べるデータ依存
解析の手法を使用すればよい。例えば図5に示すループ
はk回目反復の結果をk+1回目で使用するため、ルー
プ反復は本質的に逐次実行である。このようなデータ参
照関係がある場合はループ展開を行っても独立な演算命
令が増加しないので展開は行わず、ループ最適化部26
で直接ソフトウェアパイプライニングするものとする。 以上のような基準に基づいて、ループ解析部24がルー
プを展開すべきであると判定した場合はループ展開部2
5でループ展開が実行される。
【0023】例えば、図3(a) に示すループがルー
プ展開条件を満足した場合を仮定すると、ループ展開部
25はループ展開を施して図4(a) に等価なループ
形式に変換する。この場合ループ展開段数は2段として
いるが、展開段数はプロセッサの構成やコンパイル時間
、オブジェクトコードサイズの制約に応じて自由に定め
て良い。 ループ展開部25で図4(a) のように変換されたル
ープに対する命令列は図4(b) のようになるが、こ
れをループ最適化部26によりソフトウェアパイプライ
ニングすると図4(c) のように実行できる。図3(
c) と図4(c) を比較すると、図4ではadd
命令後に別の演算のためのld/st 命令が入ってい
るので、図3の場合に見られた演算遅延サイクルでの空
きスロットがなくなっている。このように処理すればプ
ロセッサの持つ複数の処理ユニットを有効に使用した並
列処理が可能である。このようにしてループ最適化され
た中間テキストはコード生成部27により機械語に翻訳
されオブジェクトプログラムとして出力される。
プ展開条件を満足した場合を仮定すると、ループ展開部
25はループ展開を施して図4(a) に等価なループ
形式に変換する。この場合ループ展開段数は2段として
いるが、展開段数はプロセッサの構成やコンパイル時間
、オブジェクトコードサイズの制約に応じて自由に定め
て良い。 ループ展開部25で図4(a) のように変換されたル
ープに対する命令列は図4(b) のようになるが、こ
れをループ最適化部26によりソフトウェアパイプライ
ニングすると図4(c) のように実行できる。図3(
c) と図4(c) を比較すると、図4ではadd
命令後に別の演算のためのld/st 命令が入ってい
るので、図3の場合に見られた演算遅延サイクルでの空
きスロットがなくなっている。このように処理すればプ
ロセッサの持つ複数の処理ユニットを有効に使用した並
列処理が可能である。このようにしてループ最適化され
た中間テキストはコード生成部27により機械語に翻訳
されオブジェクトプログラムとして出力される。
【0024】
【発明の効果】かくして本発明によれば、予めプログラ
ム内の各ループにおける演算数やデータ参照数、データ
参照関係から、従来のソフトウェアパイプライニングを
そのまま適用してもループ内演算数とプロセッサの演算
ユニット数が不適合で充分な並列化性能が得られない場
合を検出して、このようなループに対しては予めループ
反復を展開する前処理を施すことにより、ループの1反
復内の演算数を増加させて、演算ユニット数と演算数と
の適合性をとったうえでソフトウェアパイプライニング
を行うので、従来方式では充分な並列化性能を得られな
かったループに対しても高い並列化性能を得られ、VL
IW、スーパースカラー方式におけるループ処理の効率
向上を図ることのできるループ最適化方式を実現できる
。
ム内の各ループにおける演算数やデータ参照数、データ
参照関係から、従来のソフトウェアパイプライニングを
そのまま適用してもループ内演算数とプロセッサの演算
ユニット数が不適合で充分な並列化性能が得られない場
合を検出して、このようなループに対しては予めループ
反復を展開する前処理を施すことにより、ループの1反
復内の演算数を増加させて、演算ユニット数と演算数と
の適合性をとったうえでソフトウェアパイプライニング
を行うので、従来方式では充分な並列化性能を得られな
かったループに対しても高い並列化性能を得られ、VL
IW、スーパースカラー方式におけるループ処理の効率
向上を図ることのできるループ最適化方式を実現できる
。
【図1】 本発明の一実施例に係るループ最適化方式
を適用したコンパイラの構成を示す図。
を適用したコンパイラの構成を示す図。
【図2】 (a) は本発明に係るループ最適化方式
の処理対象となるループを示すソースプログラム、(b
) は(a) のプログラムを従来の逐次計算機の命令
列に翻訳したアセンブラプログラム、(c) は(a)
にソフトウェアパイプライニングを施した場合の実行状
態を示す図。
の処理対象となるループを示すソースプログラム、(b
) は(a) のプログラムを従来の逐次計算機の命令
列に翻訳したアセンブラプログラム、(c) は(a)
にソフトウェアパイプライニングを施した場合の実行状
態を示す図。
【図3】 (a) は本発明に係るループ最適化方式
の処理対象となるループを示すソースプログラム、(b
) は(a) のプログラムを従来の逐次計算機の命令
列に翻訳したアセンブラプログラム、(c) は(a)
にソフトウェアパイプライニングを施した場合の実行状
態を示す図。
の処理対象となるループを示すソースプログラム、(b
) は(a) のプログラムを従来の逐次計算機の命令
列に翻訳したアセンブラプログラム、(c) は(a)
にソフトウェアパイプライニングを施した場合の実行状
態を示す図。
【図4】 (a) は図3(a) のプログラムに本
発明のループ最適化方式によりループ反復を展開する前
処理を施したループを示すソースプログラム、(b)
は(a) のプログラムを従来の逐次計算機の命令列に
翻訳したアセンブラプログラム、(c)は(a) にソ
フトウェアパイプライニングを施した場合の実行状態を
示す図。
発明のループ最適化方式によりループ反復を展開する前
処理を施したループを示すソースプログラム、(b)
は(a) のプログラムを従来の逐次計算機の命令列に
翻訳したアセンブラプログラム、(c)は(a) にソ
フトウェアパイプライニングを施した場合の実行状態を
示す図。
【図5】 本発明のループ解析部でループ展開が不適
当であると判定されるループを示すソースプログラム。
当であると判定されるループを示すソースプログラム。
21 プログラム入力部
22 構文解析部
23 ループ抽出部
24 ループ解析部
25 ループ展開部
26 ループ最適化部
27 コード生成部
Claims (4)
- 【請求項1】 複数の命令を同時に実行する電子計算
機のループ処理において、ループの各反復内の演算数、
データ参照関係を元に、ループの複数反復分の命令をを
1反復内に展開するループ展開処理を行うか否かを判定
するプログラム解析手段と、ループ内命令列の任意の複
数反復分を1反復内に展開した等価な命令列に変換する
プログラム変換手段と、展開されたループに対して異な
る反復の演算を別の処理ユニットに割り当てて同時に実
行するように命令を並べ替えていく命令再配置手段とを
備えたことを特徴とするループ最適化方式。 - 【請求項2】 前記プログラム変換手段は、前記プロ
グラム解析手段で検出したループ内演算数が一定の基準
値より小さい場合にループ展開を実行することを特徴と
する請求項1記載のループ最適化方式。 - 【請求項3】 前記プログラム変換手段は、前記プロ
グラム解析手段で検出したループ内演算数とループ内ロ
ード、ストア命令数の比率が一定の基準値を越える場合
にループ展開を実行することを特徴とする請求項1記載
のループ最適化方式。 - 【請求項4】 前記プログラム変換手段は、前記プロ
グラム解析手段で検出したループ内演算数と計算機の持
つ演算ユニット数の比率が一定の基準値を越える場合に
ループ展開を実行することを特徴とする請求項1記載の
ループ最適化方式。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3071979A JP3032031B2 (ja) | 1991-04-05 | 1991-04-05 | ループ最適化方法及び装置 |
| US07/863,709 US5303357A (en) | 1991-04-05 | 1992-04-03 | Loop optimization system |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3071979A JP3032031B2 (ja) | 1991-04-05 | 1991-04-05 | ループ最適化方法及び装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH04307625A true JPH04307625A (ja) | 1992-10-29 |
| JP3032031B2 JP3032031B2 (ja) | 2000-04-10 |
Family
ID=13476095
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3071979A Expired - Fee Related JP3032031B2 (ja) | 1991-04-05 | 1991-04-05 | ループ最適化方法及び装置 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US5303357A (ja) |
| JP (1) | JP3032031B2 (ja) |
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014002736A (ja) * | 2012-06-15 | 2014-01-09 | Apple Inc | ループバッファのパッキング |
| KR20150020236A (ko) | 2012-02-03 | 2015-02-25 | 가부시키가이샤 고베 세이코쇼 | 성형 가공용 알루미늄판 |
| US9471322B2 (en) | 2014-02-12 | 2016-10-18 | Apple Inc. | Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold |
| JP2017016570A (ja) * | 2015-07-06 | 2017-01-19 | 富士通株式会社 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
| US9557999B2 (en) | 2012-06-15 | 2017-01-31 | Apple Inc. | Loop buffer learning |
| JP2020526814A (ja) * | 2017-07-07 | 2020-08-31 | エヌチェーン ホールディングス リミテッドNchain Holdings Limited | ブロックチェーンコンパイラ |
Families Citing this family (30)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE68927946T2 (de) * | 1988-08-02 | 1997-10-16 | Philips Electronics Nv | Verfahren und Vorrichtung für die Synchronisierung von parallelen Prozessoren unter Verwendung einer unscharf definierten Sperre |
| IL98248A0 (en) * | 1991-05-23 | 1992-06-21 | Ibm Israel | Instruction scheduler for a computer |
| WO1994025917A1 (en) * | 1993-04-26 | 1994-11-10 | Comdisco Systems, Inc. | Method for scheduling synchronous data flow graphs |
| US5524223A (en) * | 1994-01-31 | 1996-06-04 | Motorola, Inc. | Instruction accelerator for processing loop instructions with address generator using multiple stored increment values |
| JP2634144B2 (ja) * | 1994-07-06 | 1997-07-23 | インターナショナル・ビジネス・マシーンズ・コーポレイション | プログラムの並列化実行方法及び並列化実行コンパイラ |
| JP3626784B2 (ja) * | 1995-03-17 | 2005-03-09 | 富士通株式会社 | 分散メモリ型並列計算機におけるデータ更新方法およびプログラム変換装置 |
| JP3218932B2 (ja) * | 1995-07-06 | 2001-10-15 | 株式会社日立製作所 | データプリフェッチコード生成方法 |
| US6074433A (en) * | 1995-08-25 | 2000-06-13 | Fujitsu Limited | Optimization control apparatus and optimization control method for array descriptions |
| US5920724A (en) * | 1996-03-28 | 1999-07-06 | Intel Corporation | Software pipelining a hyperblock loop |
| US5826054A (en) * | 1996-05-15 | 1998-10-20 | Philips Electronics North America Corporation | Compressed Instruction format for use in a VLIW processor |
| US8583895B2 (en) * | 1996-05-15 | 2013-11-12 | Nytell Software LLC | Compressed instruction format for use in a VLIW processor |
| US5924128A (en) * | 1996-06-20 | 1999-07-13 | International Business Machines Corporation | Pseudo zero cycle address generator and fast memory access |
| US6085315A (en) * | 1997-09-12 | 2000-07-04 | Siemens Aktiengesellschaft | Data processing device with loop pipeline |
| 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 |
| US6070011A (en) * | 1997-10-21 | 2000-05-30 | Hewlett-Packard Co. | Compiler for performing a loop fusion, dependent upon loop peeling and/or loop reversal |
| US6272676B1 (en) * | 1998-01-13 | 2001-08-07 | Intel Corporation | Method and apparatus for finding loop— lever parallelism in a pointer based application |
| US6314493B1 (en) | 1998-02-03 | 2001-11-06 | International Business Machines Corporation | Branch history cache |
| EP0997815A3 (en) * | 1998-10-29 | 2004-05-26 | Texas Instruments Incorporated | Interactive translation system and method |
| JP3477137B2 (ja) * | 2000-03-03 | 2003-12-10 | 松下電器産業株式会社 | 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体 |
| US7039906B1 (en) | 2000-09-29 | 2006-05-02 | International Business Machines Corporation | Compiler for enabling multiple signed independent data elements per register |
| US6988266B2 (en) * | 2001-05-08 | 2006-01-17 | Sun Microsystems, Inc. | Method of transforming variable loops into constant loops |
| US20030171907A1 (en) * | 2002-03-06 | 2003-09-11 | Shay Gal-On | Methods and Apparatus for Optimizing Applications on Configurable Processors |
| JP3847672B2 (ja) * | 2002-07-03 | 2006-11-22 | 松下電器産業株式会社 | コンパイラ装置及びコンパイル方法 |
| US7355743B2 (en) * | 2002-10-25 | 2008-04-08 | Pitney Bowes Inc. | Statement level tracking in a document production and management process |
| US7210018B2 (en) * | 2002-12-30 | 2007-04-24 | International Business Machines Corporation | Multiple-stage pipeline for transaction conversion |
| US7640540B2 (en) * | 2003-10-24 | 2009-12-29 | Microsoft Corporation | Mechanism for providing extended functionality to command line instructions |
| US7318223B2 (en) * | 2004-08-26 | 2008-01-08 | International Business Machines Corporation | Method and apparatus for a generic language interface to apply loop optimization transformations |
| US20110055303A1 (en) * | 2009-09-03 | 2011-03-03 | Azuray Technologies, Inc. | Function Generator |
| JP2013171459A (ja) * | 2012-02-21 | 2013-09-02 | Toshiba Corp | プログラム解析装置、プログラム解析方法および記録媒体 |
| US10754744B2 (en) * | 2016-03-15 | 2020-08-25 | Wisconsin Alumni Research Foundation | Method of estimating program speed-up in highly parallel architectures using static analysis |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4642765A (en) * | 1985-04-15 | 1987-02-10 | International Business Machines Corporation | Optimization of range checking |
| US4858115A (en) * | 1985-07-31 | 1989-08-15 | Unisys Corporation | Loop control mechanism for scientific processor |
| US4782444A (en) * | 1985-12-17 | 1988-11-01 | International Business Machine Corporation | Compilation using two-colored pebbling register allocation method such that spill code amount is invariant with basic block's textual ordering |
| JPH0795274B2 (ja) * | 1986-09-19 | 1995-10-11 | 株式会社日立製作所 | 配列添字解析方法 |
| US4802091A (en) * | 1986-10-31 | 1989-01-31 | International Business Machines Corporation | Method for improving the efficiency of arithmetic code generation in an optimizing compiler using the technique of reassociation |
| US5226128A (en) * | 1987-05-01 | 1993-07-06 | Hewlett-Packard Company | Horizontal computer having register multiconnect for execution of a loop with a branch |
| JPH04211830A (ja) * | 1990-02-05 | 1992-08-03 | Matsushita Electric Ind Co Ltd | 並列化コンパイル方式 |
-
1991
- 1991-04-05 JP JP3071979A patent/JP3032031B2/ja not_active Expired - Fee Related
-
1992
- 1992-04-03 US US07/863,709 patent/US5303357A/en not_active Expired - Lifetime
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| KR20150020236A (ko) | 2012-02-03 | 2015-02-25 | 가부시키가이샤 고베 세이코쇼 | 성형 가공용 알루미늄판 |
| JP2014002736A (ja) * | 2012-06-15 | 2014-01-09 | Apple Inc | ループバッファのパッキング |
| US9557999B2 (en) | 2012-06-15 | 2017-01-31 | Apple Inc. | Loop buffer learning |
| US9753733B2 (en) | 2012-06-15 | 2017-09-05 | Apple Inc. | Methods, apparatus, and processors for packing multiple iterations of loop in a loop buffer |
| US9471322B2 (en) | 2014-02-12 | 2016-10-18 | Apple Inc. | Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold |
| JP2017016570A (ja) * | 2015-07-06 | 2017-01-19 | 富士通株式会社 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
| JP2020526814A (ja) * | 2017-07-07 | 2020-08-31 | エヌチェーン ホールディングス リミテッドNchain Holdings Limited | ブロックチェーンコンパイラ |
Also Published As
| Publication number | Publication date |
|---|---|
| US5303357A (en) | 1994-04-12 |
| JP3032031B2 (ja) | 2000-04-10 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH04307625A (ja) | ループ最適化方法及び装置 | |
| JP4077252B2 (ja) | コンパイラプログラムおよびコンパイル処理方法 | |
| JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
| JP2738692B2 (ja) | 並列化コンパイル方法 | |
| US5815719A (en) | Method and apparatus for easy insertion of assembler code for optimization | |
| Bala et al. | Efficient instruction scheduling using finite state automata | |
| US8789031B2 (en) | Software constructed strands for execution on a multi-core architecture | |
| US20020083423A1 (en) | List scheduling algorithm for a cycle-driven instruction scheduler | |
| JPH09282179A (ja) | オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置 | |
| Anantharaman et al. | A hardware accelerator for speech recognition algorithms | |
| JP3032030B2 (ja) | ループ最適化方法及び装置 | |
| JPH04293150A (ja) | コンパイル方法 | |
| Rajagopalan et al. | Specification of software pipelining using petri nets | |
| JP3887097B2 (ja) | コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体 | |
| Govindarajan et al. | Co-scheduling hardware and software pipelines | |
| JP3028821B2 (ja) | 並列化コンパイル方法 | |
| JPS62217325A (ja) | アセンブラコ−ド最適化方式 | |
| TW518516B (en) | Sub-pipelined and pipelined execution in a VLIW | |
| US8479179B2 (en) | Compiling method, compiling apparatus and computer system for a loop in a program | |
| JPH04308937A (ja) | コード生成方法 | |
| JP2000020482A (ja) | ループ並列化方法 | |
| JPH09160784A (ja) | 並列化コンパイル方式 | |
| JPH0659933A (ja) | コード変換装置 | |
| JP3551352B2 (ja) | ループ分割方法 | |
| JP3394353B2 (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 |