JPH05120029A - 最適化方法 - Google Patents
最適化方法Info
- Publication number
- JPH05120029A JPH05120029A JP3282690A JP28269091A JPH05120029A JP H05120029 A JPH05120029 A JP H05120029A JP 3282690 A JP3282690 A JP 3282690A JP 28269091 A JP28269091 A JP 28269091A JP H05120029 A JPH05120029 A JP H05120029A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- size
- expansion
- instruction cache
- cache
- 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.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
(57)【要約】
【目的】ループに係る最適化において、命令キャッシュ
(IC)の大きさを超えないようにコードを生成し、実
行時のICのフラッシュを減らしたオブジェクトコード
(OC)を得る。 【構成】コンパイラの最適化処理部の中に図1のような
コード見積もり手段1、およびループ分割可否判定手段
6を設け、対象ループのOCがICサイズよりも大きい
場合に、6,7,8によりループ分割を試みる。また、
対象ループがICサイズより小さく、そのループの展開
やル−プ内の関数または手続きのインライン展開が必要
な場合で、かつ、その展開後のそのループのOCがIC
サイズより小さい場合にのみ、目的とする展開処理を行
う。 【効果】実行時のICのフラッシュが少なくなり、プロ
グラムの実行時間が短くなる。
(IC)の大きさを超えないようにコードを生成し、実
行時のICのフラッシュを減らしたオブジェクトコード
(OC)を得る。 【構成】コンパイラの最適化処理部の中に図1のような
コード見積もり手段1、およびループ分割可否判定手段
6を設け、対象ループのOCがICサイズよりも大きい
場合に、6,7,8によりループ分割を試みる。また、
対象ループがICサイズより小さく、そのループの展開
やル−プ内の関数または手続きのインライン展開が必要
な場合で、かつ、その展開後のそのループのOCがIC
サイズより小さい場合にのみ、目的とする展開処理を行
う。 【効果】実行時のICのフラッシュが少なくなり、プロ
グラムの実行時間が短くなる。
Description
【0001】
【産業上の利用分野】本発明は命令キャッシュを持つ計
算機の目的プログラムを生成するコンパイラにおける最
適化方法に関する。
算機の目的プログラムを生成するコンパイラにおける最
適化方法に関する。
【0002】
【従来の技術】プログラムの実行時間を短くするコンパ
イラの最適化技術として、ループ展開や関数および手続
きのインライン展開があることが、中田育男著「コンパ
イラ」(昭和58年,産業図書)に記載されている。
イラの最適化技術として、ループ展開や関数および手続
きのインライン展開があることが、中田育男著「コンパ
イラ」(昭和58年,産業図書)に記載されている。
【0003】
【発明が解決しようとする課題】上記の従来技術では、
命令キャッシュのヒット率について考慮されておらず、
命令キャッシュのフラッシュが頻発するようになるとプ
ログラムの実行時間が長くなるという問題があった。す
なわち、上記のループ展開やインライン展開は、コード
量を増大させるという副作用があり、そのため生成され
る目的プログラムまたはその部分であるループに係るコ
ードの量が命令キャッシュの大きさを超えた場合に命令
キャッシュのフラッシュが頻発するようになるためプロ
グラムの実行時間が長くなる。また、ループの本体が元
々大きくて命令キャッシュに入りきれない場合にもフラ
ッシュの頻発のためプログラムの実行時間が長くなる。
命令キャッシュのヒット率について考慮されておらず、
命令キャッシュのフラッシュが頻発するようになるとプ
ログラムの実行時間が長くなるという問題があった。す
なわち、上記のループ展開やインライン展開は、コード
量を増大させるという副作用があり、そのため生成され
る目的プログラムまたはその部分であるループに係るコ
ードの量が命令キャッシュの大きさを超えた場合に命令
キャッシュのフラッシュが頻発するようになるためプロ
グラムの実行時間が長くなる。また、ループの本体が元
々大きくて命令キャッシュに入りきれない場合にもフラ
ッシュの頻発のためプログラムの実行時間が長くなる。
【0004】本発明の第1の目的は、上記の問題点を解
消するため命令キャッシュの容量を考慮してループ展開
やループ内の関数および手続きのインライン展開を行う
最適化方法を提供することにある。
消するため命令キャッシュの容量を考慮してループ展開
やループ内の関数および手続きのインライン展開を行う
最適化方法を提供することにある。
【0005】第2の目的は、ループの本体が命令キャッ
シュの容量より大きい場合に可能であれば、キャッシュ
の容量以下の大きさのループへの分割を行う最適化方法
を提供することにある。
シュの容量より大きい場合に可能であれば、キャッシュ
の容量以下の大きさのループへの分割を行う最適化方法
を提供することにある。
【0006】
【課題を解決するための手段】上記第1の目的達成のた
め、本発明の最適化方法では、コンパイル時にループ展
開やループ内のインライン展開をしようとする部分のオ
ブジェクト量を見積もる手段を設け、ループ展開やイン
ライン展開の採否を決定し、さらにループ展開の展開倍
率を制限することにより達成される。
め、本発明の最適化方法では、コンパイル時にループ展
開やループ内のインライン展開をしようとする部分のオ
ブジェクト量を見積もる手段を設け、ループ展開やイン
ライン展開の採否を決定し、さらにループ展開の展開倍
率を制限することにより達成される。
【0007】また、第2の目的達成のために、ループの
オブジェクト量を見積もる手段とループ分割可否判定手
段とを設けることによって、キャッシュ容量より大きな
ループをより小さい単位に分割することにより達成され
る。
オブジェクト量を見積もる手段とループ分割可否判定手
段とを設けることによって、キャッシュ容量より大きな
ループをより小さい単位に分割することにより達成され
る。
【0008】
【作用】本発明において、第1の観点では、オブジェク
トの量を見積もる手段によってループ展開しようとする
ループから生成されるコード量を見積もり、その大きさ
と命令キャッシュのサイズとを比較して展開の結果生成
されるループのコードの大きさがキャッシュのサイズを
超えないように展開を制限する。またインライン展開し
ようとするループ内の手続きや関数の大きさを見積もる
ことにより、インライン展開した結果生成されるループ
のコードの大きさがキャッシュのサイズを超る場合にそ
の展開を抑止する。これらによって、生成されるループ
のオブジェクトがキャッシュに入らなくなることを防ぐ
ことができる。
トの量を見積もる手段によってループ展開しようとする
ループから生成されるコード量を見積もり、その大きさ
と命令キャッシュのサイズとを比較して展開の結果生成
されるループのコードの大きさがキャッシュのサイズを
超えないように展開を制限する。またインライン展開し
ようとするループ内の手続きや関数の大きさを見積もる
ことにより、インライン展開した結果生成されるループ
のコードの大きさがキャッシュのサイズを超る場合にそ
の展開を抑止する。これらによって、生成されるループ
のオブジェクトがキャッシュに入らなくなることを防ぐ
ことができる。
【0009】第2の観点では、ループに係るオブジェク
ト量を見積もった結果、キャッシュサイズよりも大きい
と判断された場合に、データ依存解析を用いてそのルー
プが分割可能か否かを判定し、可能な場合に分割処理を
行う。これによって、ループがそれぞれキャッシュに入
る部分に分割できた場合に、命令キャッシュのヒット率
を高くすることができる。
ト量を見積もった結果、キャッシュサイズよりも大きい
と判断された場合に、データ依存解析を用いてそのルー
プが分割可能か否かを判定し、可能な場合に分割処理を
行う。これによって、ループがそれぞれキャッシュに入
る部分に分割できた場合に、命令キャッシュのヒット率
を高くすることができる。
【0010】
【実施例】以下、本発明の一実施例を図1,2を用いて
説明する。なお、本実施例によって本発明が限定される
ものではない。
説明する。なお、本実施例によって本発明が限定される
ものではない。
【0011】まず、図2でコンパイラの処理の流れを説
明する。コンパイラの本体11への入力である原始プロ
グラム10は、構文解析部12で処理をされた後、コー
ド生成部13の入力となる。このコード生成部13は、
最適化処理部14を含む。その最適化処理部14の中に
は従来の最適化処理方法の他に本発明のキーとなるルー
プに関する最適化処理方法(図1)が含まれており、こ
こでの処理を受けることによって、出力である効率等が
改善された目的プログラム15となる。
明する。コンパイラの本体11への入力である原始プロ
グラム10は、構文解析部12で処理をされた後、コー
ド生成部13の入力となる。このコード生成部13は、
最適化処理部14を含む。その最適化処理部14の中に
は従来の最適化処理方法の他に本発明のキーとなるルー
プに関する最適化処理方法(図1)が含まれており、こ
こでの処理を受けることによって、出力である効率等が
改善された目的プログラム15となる。
【0012】次に、図1でループに関する最適化処理方
法について説明する。ここで、1は生成するオブジェク
トの大きさを見積もる手段、2は見積もったループのオ
ブジェクトの大きさとキャッシュサイズとを比較し分岐
する手段、3はそのループがループ展開する候補である
か否か、またはそのループ内に手続か関数のインライン
展開をする候補があるか否かを判定し分岐をする手段で
ある。そして、4はループ展開やインライン展開を行っ
た場合に対象としているループのオブジェクトの大きさ
が命令キャッシュの大きさより小さいか否かを判定し分
岐する手段、5は候補であったループ展開または関数や
手続のインライン展開を行う手段である。さらに6は、
例えばデータ依存解析等を用いてループが分割できるか
否かを判定する手段、7は判定手段6の結果によって分
岐を行う手段、そして8は対象としていたループの分割
を行う手段である。
法について説明する。ここで、1は生成するオブジェク
トの大きさを見積もる手段、2は見積もったループのオ
ブジェクトの大きさとキャッシュサイズとを比較し分岐
する手段、3はそのループがループ展開する候補である
か否か、またはそのループ内に手続か関数のインライン
展開をする候補があるか否かを判定し分岐をする手段で
ある。そして、4はループ展開やインライン展開を行っ
た場合に対象としているループのオブジェクトの大きさ
が命令キャッシュの大きさより小さいか否かを判定し分
岐する手段、5は候補であったループ展開または関数や
手続のインライン展開を行う手段である。さらに6は、
例えばデータ依存解析等を用いてループが分割できるか
否かを判定する手段、7は判定手段6の結果によって分
岐を行う手段、そして8は対象としていたループの分割
を行う手段である。
【0013】処理の詳細は、まずループに関する処理に
はいると、1でそのループ全体のオブジェクト量がどの
位になるかを見積もり、2でそれが命令キャッシュの大
きさより大きいかどうかを判定する。キャッシュサイズ
より大きい場合には、6によってより小さいループに分
割できないかどうかを調べ、7の分岐手段により分割が
可能な時には8の処理に分岐し、そのループをキャッシ
ュサイズより小さくなるようなループに分割をして処理
を終る。具体的には、図3に示したように、1つのルー
プ31を、32のように同じ長さの2つのループに分割
する。
はいると、1でそのループ全体のオブジェクト量がどの
位になるかを見積もり、2でそれが命令キャッシュの大
きさより大きいかどうかを判定する。キャッシュサイズ
より大きい場合には、6によってより小さいループに分
割できないかどうかを調べ、7の分岐手段により分割が
可能な時には8の処理に分岐し、そのループをキャッシ
ュサイズより小さくなるようなループに分割をして処理
を終る。具体的には、図3に示したように、1つのルー
プ31を、32のように同じ長さの2つのループに分割
する。
【0014】また、2でキャッシュサイズより小さいと
判定された場合は、3の処理に行き、そのループが最適
化の対象としてループ展開の候補となっているか、また
は、そのループの中にインライン展開をしようとしてい
る関数か手続きの呼出しがあるかどうかを判定し、なけ
れば処理を終了する。ループ展開の候補であるか、また
はインライン展開の候補である関数か手続きの呼出しが
含まれている場合には、1の手段を用いてその展開をし
た後のループ全体のオブジェクト量を見積もる。そし
て、その結果として展開してもまだキャッシュのサイズ
を超えないと4で判定された時にのみ、5で実際にルー
プ展開や関数または手続きのインライン展開を行い、展
開することによりオブジェクトの大きさが命令キャッシ
ュの大きさを超えることになる場合にはその展開を行わ
ない。具体的には、ループ展開では図4のように、ルー
プ41を、42のようなループに変換する。また、イン
ライン展開では、図5の52のように、関数や手続きの
呼出しがある部分に、その定義を展開する。
判定された場合は、3の処理に行き、そのループが最適
化の対象としてループ展開の候補となっているか、また
は、そのループの中にインライン展開をしようとしてい
る関数か手続きの呼出しがあるかどうかを判定し、なけ
れば処理を終了する。ループ展開の候補であるか、また
はインライン展開の候補である関数か手続きの呼出しが
含まれている場合には、1の手段を用いてその展開をし
た後のループ全体のオブジェクト量を見積もる。そし
て、その結果として展開してもまだキャッシュのサイズ
を超えないと4で判定された時にのみ、5で実際にルー
プ展開や関数または手続きのインライン展開を行い、展
開することによりオブジェクトの大きさが命令キャッシ
ュの大きさを超えることになる場合にはその展開を行わ
ない。具体的には、ループ展開では図4のように、ルー
プ41を、42のようなループに変換する。また、イン
ライン展開では、図5の52のように、関数や手続きの
呼出しがある部分に、その定義を展開する。
【0015】
【発明の効果】本発明によれば、ループに係るオブジェ
クトの大きさを命令キャッシュのサイズ以下に抑えるこ
とにより、命令キャッシュのミスヒットを少なくするこ
とができるので、プログラムの実行時間を短くすること
ができるという効果がある。
クトの大きさを命令キャッシュのサイズ以下に抑えるこ
とにより、命令キャッシュのミスヒットを少なくするこ
とができるので、プログラムの実行時間を短くすること
ができるという効果がある。
【図1】本発明のキーとなる部分の流れ図である。
【図2】本発明の一実施例を示すブロック図である。
【図3】ループ分割を説明する図である。
【図4】ループ展開を説明する図である。
【図5】インライン展開を説明する図である。
1…対象とするループから生成されるオブジェクトの量
を見積もる手段、2…見積もったオブジェクトの量が命
令キャッシュサイズより大か否かを判定する手段、4…
展開後のオブジェクトの量と命令キャッシュサイズとの
比較により展開を実際に行うか否かを決める判断、6…
ループが分割できるかどうかを判定する手段。
を見積もる手段、2…見積もったオブジェクトの量が命
令キャッシュサイズより大か否かを判定する手段、4…
展開後のオブジェクトの量と命令キャッシュサイズとの
比較により展開を実際に行うか否かを決める判断、6…
ループが分割できるかどうかを判定する手段。
Claims (2)
- 【請求項1】命令キャッシュを持つ計算機の目的プログ
ラムを生成するコンパイラにおいて、ループ展開又はル
ープ内関数および手続のインライン展開をするにあた
り、その展開する部分のオブジェクトの大きさを見積も
り、その大きさが命令キャッシュの大きさを超えないよ
うにコンパイルすることを特徴とする最適化方法。 - 【請求項2】命令キャッシュを持つ計算機の目的プログ
ラムを生成するコンパイラにおいて、生成するオブジェ
クトの大きさを見積もりし、ループの部分のオブジェク
トの大きさを見積もり、その大きさが命令キャッシュの
大きさを超えている場合に、そのループを分割してから
オブジェクトに変換することを特徴とする最適化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP3282690A JPH05120029A (ja) | 1991-10-29 | 1991-10-29 | 最適化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP3282690A JPH05120029A (ja) | 1991-10-29 | 1991-10-29 | 最適化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH05120029A true JPH05120029A (ja) | 1993-05-18 |
Family
ID=17655791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP3282690A Pending JPH05120029A (ja) | 1991-10-29 | 1991-10-29 | 最適化方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH05120029A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005122506A (ja) * | 2003-10-17 | 2005-05-12 | Matsushita Electric Ind Co Ltd | コンパイラ装置 |
US9760354B2 (en) | 2015-04-28 | 2017-09-12 | Fujitsu Limited | Information processing apparatus and compiling method |
JP2021111136A (ja) * | 2020-01-10 | 2021-08-02 | 富士通株式会社 | 情報処理装置、情報処理プログラム、及び情報処理方法 |
-
1991
- 1991-10-29 JP JP3282690A patent/JPH05120029A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005122506A (ja) * | 2003-10-17 | 2005-05-12 | Matsushita Electric Ind Co Ltd | コンパイラ装置 |
US9760354B2 (en) | 2015-04-28 | 2017-09-12 | Fujitsu Limited | Information processing apparatus and compiling method |
JP2021111136A (ja) * | 2020-01-10 | 2021-08-02 | 富士通株式会社 | 情報処理装置、情報処理プログラム、及び情報処理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6192515B1 (en) | Method for software pipelining nested loops | |
CA1319757C (en) | Echelon method for execution of nested loops in multiple processor computers | |
US7784039B2 (en) | Compiler, compilation method, and compilation program | |
US20010047511A1 (en) | Method of reducing unnecessary barrier instructions | |
US6044221A (en) | Optimizing code based on resource sensitive hoisting and sinking | |
JP3546341B2 (ja) | 多重ループ向けデータプリフェッチ方法およびプログラム生成方法 | |
US20010020294A1 (en) | Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program | |
JPH05120029A (ja) | 最適化方法 | |
JP3606654B2 (ja) | コンパイラ装置 | |
US20060225049A1 (en) | Trace based signal scheduling and compensation code generation | |
JPH06202875A (ja) | インライン展開による最適化を行うコンパイラ | |
JP3702789B2 (ja) | 条件付きベクトル演算方法および条件付きベクトル演算装置 | |
JP2005352894A (ja) | 性能解析プログラム及び性能解析プログラムの生成方法 | |
JP3486014B2 (ja) | ソフトウェア/ハードウェア協調設計システム及びその設計方法 | |
JP2585793B2 (ja) | コンパイラシステム | |
JPH0573335A (ja) | プログラムの自動インライン展開方式 | |
JP3956113B2 (ja) | データ処理装置及びプログラム | |
JPH10326193A (ja) | インライン展開関数の最適化のためのコンパイル方法 | |
JPH10312291A (ja) | コンパイラ装置 | |
JP3324486B2 (ja) | ループ最適化方式およびそのプログラム記録媒体 | |
JP2832330B2 (ja) | ソフトウェア改造支援装置および方法 | |
JPH04165537A (ja) | プログラム自動インライン展開方式 | |
KR0179179B1 (ko) | 비동기 전달모드 프로세서를 위한 최적 명령 수순 선택 방법 | |
JPH04252336A (ja) | プログラム最適化処理装置 | |
JP2004126835A (ja) | シフト関数高速化のためのコンパイル方法 |