JP2006065682A - コンパイラプログラム、コンパイル方法およびコンパイラ装置 - Google Patents

コンパイラプログラム、コンパイル方法およびコンパイラ装置 Download PDF

Info

Publication number
JP2006065682A
JP2006065682A JP2004249052A JP2004249052A JP2006065682A JP 2006065682 A JP2006065682 A JP 2006065682A JP 2004249052 A JP2004249052 A JP 2004249052A JP 2004249052 A JP2004249052 A JP 2004249052A JP 2006065682 A JP2006065682 A JP 2006065682A
Authority
JP
Japan
Prior art keywords
instruction
scheduling
pipelined
instructions
compiler
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.)
Withdrawn
Application number
JP2004249052A
Other languages
English (en)
Inventor
Kotaro Taki
康太郎 瀧
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004249052A priority Critical patent/JP2006065682A/ja
Publication of JP2006065682A publication Critical patent/JP2006065682A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】パイプライン処理されない命令を命令セットに含む計算機で効率的なパイプライン処理が行われないことに起因する性能低下を防ぐこと。
【解決手段】第一命令スケジューラ130のスケジューリング範囲決定部132がパイプライン処理されない命令が平均的に1個含まれる命令数Lを計算し、スケジュール部133がスケジューリング範囲決定部132により計算された命令数Lごとの命令群に対して命令スケジューリングを行う。あるいは、パイプライン処理されない命令が含まれるクリティカルパスのレイテンシやパイプライン処理されない命令の出現間隔に基づいてスケジューリング範囲を決定する。
【選択図】 図2

Description

この発明は、パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラム、コンパイル方法およびコンパイラ装置に関し、特に、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができ、実行効率の良い目的プログラムを生成することができるコンパイラプログラム、コンパイル方法およびコンパイラ装置に関するものである。
従来から、目的プログラムの最適化の一部として、命令スケジューラとレジスタ割り付けがある。命令スケジューラは、計算機の演算ユニットを効率的に使用できるように命令列を並べ替える機能であり(例えば、非特許文献1参照。)、特に、命令をパイプラインによって処理する計算機においては、パイプラインの未使用状態が少なくなるように命令の実行順序を入れ替えることが重要になる。
また、レジスタ割り付けは、全ての変数にレジスタを割り当てる機能であるが(例えば、非特許文献2参照。)、一般に、計算機が使用できるレジスタの数は有限であるため、変数が多数存在する場合には、メモリ上に値を待避するコードを出力する必要があり、ここでは、この退避コードの出力もレジスタ割り付けの機能の一つに数える。
一般的に、命令スケジューラは並列性を高めることで性能を良くし、レジスタ割り付けはメモリへの待避命令の数を少なくすることで性能を良くする。しかし、並列性を高くすると足りないレジスタの数が増えてメモリへの待避命令が増え、並列性を低くすれば待避命令は減るものの性能が良くならない(例えば、非特許文献3参照。)。そこで、両者の効果的な運用のために、命令スケジューラをレジスタ割り付けの前後の両方で動作させることが行われている。
Mike Johnson著、村上和彰監訳、「スーパースカラ・プロセッサ」、日経BP出版センター、10章4節 Andrew W.Appel著、「modern compiler imprementation in ML」、Cambridge Univ.Press、11章 中田育男著、「コンパイラの構成と最適化」、朝倉書店、362頁
しかしながら、レジスタ割り付け前の命令スケジューラでは、レジスタによる依存関係がないため、対象とする範囲を調整しないと並列度を抽出しすぎて同時に存在する変数の全てをレジスタに割り付けられなくなる可能性がある。
したがって、命令を動かす範囲を広げすぎないように限定することが必要となるが、命令を動かす範囲の最適値はプログラムごとに異なり、最適値を求めることが困難であるという問題がある。すなわち、命令スケジューラによる命令スケジューラとレジスタ割り付けを相互に効果的に機能させることが困難であるという問題がある。
この発明は、上述した従来技術による問題点を解消するためになされたものであり、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができ、実行効率の良い目的プログラムを生成することができるコンパイラプログラム、コンパイル方法およびコンパイラ装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、請求項1の発明に係るコンパイラプログラムは、パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムであって、命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手順と、前記スケジューリング範囲決定手順により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手順と、をコンピュータに実行させることを特徴とする。
この請求項1の発明によれば、命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定し、決定した大きさの命令群に対して命令スケジューリングを行うよう構成したので、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができる。
また、請求項2の発明に係るコンパイラプログラムは、請求項1の発明において、前記スケジューリング範囲決定手順は、パイプライン処理されない命令が平均的に一つ含まれる命令数を命令スケジューリングの対象とする命令群の大きさとすることを特徴とする。
この請求項2の発明によれば、パイプライン処理されない命令が平均的に一つ含まれる命令数を命令スケジューリングの対象とする命令群の大きさとするよう構成したので、各プログラムに最適な範囲で命令スケジューリングを行うことができる。
また、請求項3の発明に係るコンパイラプログラムは、パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムであって、メモリへ退避する退避変数の選択に使用する退避コストをパイプライン処理されない命令によって定義される変数に対しては他の変数より大きなコストとなるように評価する退避コスト評価手順と、前記退避コスト評価手順により評価された退避コストに基づいて退避変数を選択する退避変数選択手順と、をコンピュータに実行させることを特徴とする。
この請求項3の発明によれば、メモリへ退避する退避変数の選択に使用する退避コストをパイプライン処理されない命令によって定義される変数に対しては他の変数より大きなコストとなるように評価し、評価した退避コストに基づいて退避変数を選択するよう構成したので、パイプライン処理されない命令によって定義される変数が退避変数として選択されることを防ぐことができる。
また、請求項4の発明に係るコンパイル方法は、パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイル方法であって、命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定工程と、前記スケジューリング範囲決定工程により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール工程と、を含んだことを特徴とする。
この請求項4の発明によれば、命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定し、決定した大きさの命令群に対して命令スケジューリングを行うよう構成したので、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができる。
また、請求項5の発明に係るコンパイラ装置は、パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラ装置であって、命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手段と、前記スケジューリング範囲決定手段により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手段と、を備えたことを特徴とする。
この請求項5の発明によれば、命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定し、決定した大きさの命令群に対して命令スケジューリングを行うよう構成したので、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができる。
請求項1、4および5の発明によれば、命令スケジューラとレジスタ割り付けを相互に効果的に機能させるので、実行効率の良い目的プログラムを生成することができるという効果を奏する。
また、請求項2の発明によれば、各プログラムに最適な範囲で命令スケジューリングを行うので、実行効率の良い目的プログラムを生成することができるという効果を奏する。
また、請求項3の発明によれば、パイプライン処理されない命令によって定義される変数が退避変数として選択されることを防ぐので、実行効率の良い目的プログラムを生成することができるという効果を奏する。
以下に添付図面を参照して、この発明に係るコンパイラプログラム、コンパイル方法およびコンパイラ装置の好適な実施例を詳細に説明する。
まず、本実施例1に係るコンパイラ装置によるスケジューリング範囲決定処理の概念について説明する。図1は、本実施例1に係るコンパイラ装置によるスケジューリング範囲決定処理の概念を説明するための説明図である。
同図は、命令スケジューラによるスケジューリング範囲の命令群を示している。同図において、固定部分は命令を動かすことができない命令群であり、スケジュール対象部分が命令を動かすことができる範囲である。すなわち、命令スケジューラは、スケジュール対象部分の命令を動かすことによって命令の実行効率を向上させる。
ここで、スケジュール対象部分の範囲の最適値をどのように求めるかが問題となるが、本実施例1に係るコンパイラ装置では、スケジュール対象部分の範囲の最適値は、パイプライン処理されない命令の数に依存するものとしてスケジューリング範囲を求める。なお、パイプライン処理されない命令としては、浮動小数点除算、平方根演算などの命令がある。
本実施例1に係るコンパイラ装置が、スケジュール対象部分の範囲の最適値をパイプライン処理されない命令の数に基づいて決定する理由は以下のとおりである。命令をパイプラインによって処理するRISC型計算機においては、パイプライン処理されない命令が性能の障害になる。何故ならば、パイプライン処理されない命令同士は並列に実行することができず、なおかつこうした命令は実行が終了するまでに時間がかかるためである。
そこで、命令スケジューラの処理は、パイプライン処理されない命令の待ち時間が少なくなるようにしなければならない。すなわち、命令スケジューラは、パイプライン処理されない命令を実行している間に他のパイプライン処理できる命令を実行するようにスケジュールすることで、効率的に演算ユニットを使用する必要がある。
したがって、パイプライン処理されない命令が多ければ、パイプライン処理されない命令を実行している時間が長くなり、パイプライン処理されない命令を実行している間に実行するパイプライン処理できる命令の数が多く必要となり、スケジュール対象部分を大きくする必要がある。すなわち、スケジュール対象部分の範囲の最適値がパイプライン処理されない命令の数に依存することとなる。
このように、本実施例1に係るコンパイラ装置では、スケジュール対象部分の範囲の最適値がパイプライン処理されない命令の数に依存することを利用して、パイプライン処理されない命令の数が平均的に一つ含まれる命令数をスケジューリング範囲としている。
次に、本実施例1に係るコンパイラ装置の構成について説明する。図2は、本実施例1に係るコンパイラ装置の構成を示す機能ブロック図である。同図に示すように、このコンパイラ装置100は、入力プログラム解析部110と、最適化部120と、第一命令スケジューラ130と、レジスタ割り付け部140と、第二命令スケジューラ150と、出力オブジェクト生成部160とを有する。
入力プログラム解析部110は、原始プログラムを入力して構文解析や意味解析を行う処理部である。最適化部120は、命令スケジューリングおよびレジスタ割り付け以外の最適化を行う処理部であり、入力プログラム解析部110が解析した結果に対して各種の最適化を行う。
第一命令スケジューラ130は、レジスタ割り付け前に命令実行順序の入れ替えを行う処理部であり、基本ブロック解析部131と、スケジューリング範囲決定部132と、スケジュール部133とを有する。
基本ブロック解析部131は、最適化部120による最適化結果に対して基本ブロックの解析を行う処理部である。ここで、基本ブロックとは、プログラムを分岐や合流のない部分に分割して得られる部分プログラムであり、第一命令スケジューラ130は、各基本ブロックに対して命令実行順序の入れ替えを行なう。
スケジューリング範囲決定部132は、基本ブロック内で命令スケジューリングを行う単位となる命令群の命令数をパイプライン処理されない命令に基づいて決定する処理部である。具体的には、このスケジューリング範囲決定部132は、パイプライン処理されない命令が平均的に一つ含まれる命令数を命令スケジューリングを行う命令数とする。
例えば、対象基本ブロック内に命令が1000個あり、そのうち10個のパイプライン処理されない命令があるとする。この場合、平均的に1000÷10=100個の命令中にパイプライン処理されない命令が1個含まれていると考えることができる。したがって、この場合のスケジューリング範囲は100命令の命令群となる。
このスケジューリング範囲決定部132が、パイプライン処理されない命令が平均的に一つ含まれる命令数を命令スケジューリングを行う命令数とすることによって、命令スケジューリングを各プログラムに最適な範囲で行うことができる。
スケジュール部133は、スケジューリング範囲決定部132により決定された命令数ごとに基本ブロックを分割し、分割して得られる各命令群ごとに命令スケジューリングを行う処理部である。
レジスタ割り付け部140は、第一命令スケジューラ130による命令スケジューリング結果に対してレジスタ割り付けを行う処理部であり、レジスタを割り当てることができない変数に対しては、メモリへの退避命令を作成する。このレジスタ割り付け部140は、第一命令スケジューラ130が各プログラムに最適なスケジューリング範囲を対象として命令スケジューリングを行った結果に対してレジスタを割り付けることによって、並列性とメモリ退避とのバランスのとれた実行効率の良い目的プログラムを作成することができる。
第二命令スケジューラ150は、レジスタ割り付け部140によるレジスタ割り付け結果に対して再度命令スケジューリングを行う処理部である。この第二命令スケジューラ150は、レジスタ割り付けが行われた後であるので、並列性をできるだけ高めるために広い範囲でのスケジューリングを行う。
出力オブジェクト生成部160は、第二命令スケジューラ150によるスケジューリング結果に対して目的プログラムを生成する処理部である。
次に、本実施例1に係るスケジューリング範囲決定部132によるスケジューリング範囲決定処理の処理手順について説明する。図3は、本実施例1に係るスケジューリング範囲決定部132によるスケジューリング範囲決定処理の処理手順を示すフローチャートである。
同図に示すように、このスケジューリング範囲決定部132は、基本ブロック内の命令数Nおよびパイプライン処理されない命令の数Mをカウントする(ステップS101〜ステップS102)。
そして、パイプライン処理されない命令が平均的に1個含まれる命令数Lを計算する。すなわち、L=N/Mを計算する(ステップS103)。そして、スケジューリング範囲をL、すなわち、スケジューリングする命令群の命令数をLとする(ステップS104)。
このように、スケジューリング範囲決定部132が、パイプライン処理されない命令が平均的に1個含まれる命令数Lを計算してスケジューリング範囲とすることによって、各プログラムに最適な範囲で命令スケジューリングを行うことができる。
上述してきたように、本実施例1では、第一命令スケジューラ130のスケジュール範囲決定部132がパイプライン処理されない命令が平均的に1個含まれる命令数Lを計算し、スケジュール部133がスケジューリング範囲決定部132により計算された命令数Lごとの命令群に対して命令スケジューリングを行うこととしたので、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができ、実行効率の良い目的プログラムを生成することができる。
なお、本実施例1では、基本ブロックを対象としたリストスケジューリングを行う場合について説明したが、基本ブロックをまたがった広域スケジューリングについては、直列に接続された複数の基本ブロックを一つの命令列として捉えることによって、同様の処理を適用することができる。
ところで、上記実施例1では、パイプライン処理されない命令が平均的に1個含まれる命令数をスケジューリング範囲とする場合について説明したが、パイプライン処理されない命令についての他の指標を用いてスケジューリング範囲を決定することもできる。そこで、本実施例2では、パイプライン処理されない命令についての他の指標として、命令パスのうちパイプライン処理されない命令を含むクリティカルパスのレイテンシを用いる場合について説明する。
なお、レイテンシとは、ある命令の実行が終了するまでの時間であり、その単位は”サイクル”である。これが大きいほどその命令は“重い”命令ということになり、スケジュールする上での障害となりうる。1サイクルの実時間は、CPUのクロック数に依存する。
また、クリティカルパスとは、ある基準で決定した命令群に対し、依存のある命令(例えば、ある命令が定義する変数を参照する命令は正依存の関係にある)同士を木構造で図4に示すように繋げた場合に、先頭の命令が実行されてから最後の命令が実行されるまでの全レイテンシが最も大きいパスのことを言う。
図4において、○は命令を示し、○を結ぶ線は命令の依存関係示す。すなわち、ある命令は、その命令の上に接続された命令が実行された後に実行される。基本ブロックを解析すると、このような命令パスが複数得られ、それぞれの命令パスが並列に実行可能となる。本実施例2に係るコンパイル装置は、これらの複数の命令パスのうちパイプライン処理されない命令を含むクリティカルパスのレイテンシを基準としてスケジューリング範囲を決定する。
例えば、対象基本ブロック内にあるパイプライン処理されない命令を含むクリティカルパスのレイテンシが100であるとする。これはつまり、クリティカルパスを構成する木の頂点命令をパイプラインに投入してから100サイクル後に、クリティカルパスを構成する全ての命令の実行が完了するという意味である。したがって、この場合のスケジューリング範囲は100命令を対象とすれば良い。
なお、本実施例2に係るコンパイラ装置は、実施例1に係るコンパイラ装置と同様の機能構成を有し、主にスケジューリング範囲決定部によるスケジューリング範囲決定処理が実施例1に係るコンパイラ装置と異なる。
そこで、スケジューリング範囲決定部によるスケジューリング範囲決定処理について説明する。図5は、本実施例2に係るスケジューリング範囲決定部によるスケジューリング範囲決定処理の処理手順を示すフローチャートである。
同図に示すように、このスケジューリング範囲決定部は、基本ブロック内の命令パスを解析し(ステップS201)、パイプライン処理されない命令を含むクリティカルパスを特定する(ステップS202)。
そして、特定したクリティカルパスのレイテンシを算出し(ステップS203)、算出したレイテンシに基づいてスケジューリング範囲を決定する(ステップS204)。
このように、スケジューリング範囲決定部が、パイプライン処理されない命令を含むクリティカルパスのレイテンシを基準としてスケジューリング範囲を決定することによって、各プログラムに最適な範囲で命令スケジューリングを行うことができる。
なお、本実施例2に係るコンパイラ装置により生成される目的プログラムの実行性能については、SPEC2000ベンチマーク(Cプログラム15本、FORTRANプログラム10本、C++プログラム1本)、およびオリジナルのFORTRAN実プログラム91本で従来のコンパイル装置により生成された目的プログラムと実行性能を比較したところ、本実施例2に係るコンパイラ装置により生成される目的プログラムの実行性能は同等以上となり、最大で5%改善されることを確認することができた。
上述してきたように、本実施例2では、スケジューリング範囲決定部が、パイプライン処理されない命令を含むクリティカルパスのレイテンシを基準としてスケジューリング範囲を決定し、スケジュール部がスケジュール範囲決定部により決定されたスケジューリング範囲に基づいて命令スケジューリングを行うこととしたので、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができ、実行効率の良い目的プログラムを生成することができる。
本実施例3では、パイプライン処理されない命令についての他の指標として、パイプライン処理されない命令の出現間隔を用いる場合について説明する。例えば、対象基本ブロック内のパイプライン処理されない命令が100命令おきに存在する場合には、100命令を同時にスケジュール対象にすることで、パイプライン処理されない命令の待ち時間を有効に使用できることが期待できる。したがって、この場合のスケジューリング範囲は100命令を対象とすれば良い。
なお、本実施例3に係るコンパイラ装置は、実施例1に係るコンパイラ装置と比較して主にスケジューリング範囲決定部によるスケジューリング範囲決定処理が異なる。そこで、スケジューリング範囲決定部によるスケジューリング範囲決定処理について説明する。図6は、本実施例3に係るスケジューリング範囲決定部によるスケジューリング範囲決定処理の処理手順を示すフローチャートである。
同図に示すように、このスケジューリング範囲決定部は、基本ブロック内のパイプライン処理されない命令の出現間隔を解析し(ステップS301)、パイプライン処理されない命令の出現間隔の平均値を算出する(ステップS302)。そして、算出した平均値をスケジューリング範囲として決定する(ステップS303)。
このように、スケジューリング範囲決定部が、パイプライン処理されない命令の出現間隔の平均値をスケジューリング範囲とすることによって、各プログラムに最適な範囲で命令スケジューリングを行うことができる。
上述してきたように、本実施例3では、スケジューリング範囲決定部が、パイプライン処理されない命令の出現間隔の平均値をスケジューリング範囲として決定し、スケジュール部がスケジュール範囲決定部により決定されたスケジューリング範囲に基づいて命令スケジューリングを行うこととしたので、命令スケジューラとレジスタ割り付けを相互に効果的に機能させることができ、実行効率の良い目的プログラムを生成することができる。
なお、本実施例3では、パイプライン処理されない命令の出現間隔の平均値をスケジューリング範囲とすることとしたが、平均値の代わりに最大値、最小値など他の指標を用いることもできる。
上記実施例1〜3では、パイプライン処理されない命令に基づいて命令スケジューリングのスケジューリング範囲を決定する場合について説明したが、パイプライン処理されない命令に基づいてレジスタ割り付けを行うことによっても実行効率を向上することができる。具体的には、パイプライン処理されない命令の定義する変数をメモリへの待避対象にしないようにすることによって実行効率を向上することができる。そこで、本実施例4では、パイプライン処理されない命令の定義する変数をメモリへの待避対象にしないようにするコンパイラ装置について説明する。
なお、パイプライン処理されない命令の定義する変数をメモリへの待避対象にしないようにすることによって実行効率を向上することができる理由は以下のとおりである。レジスタ割り付けがパイプライン処理されない命令をメモリに待避する対象に選ぶと、待避命令はパイプライン処理されない命令の実行終了を待たなければならない。ここに逆依存が発生すると、パイプライン処理されない命令の待ち時間を効果的に使うことができない。
なぜなら、逆依存によって、それ以降の命令を待避命令より前に移動することができないため、パイプライン処理されない命令の待ち時間に実行するように配置することができないからである。
なお、逆依存とは、あるレジスタを参照する命令と、同じレジスタを定義する命令との間に生じる依存関係である。例えば
STORE r1→memory
ADD r2,r3→r1
では、レジスタr1について逆依存が発生している。
この例では、命令スケジューラは、プログラムの意味を変えて実行結果を変えることはできないので、命令の順序を逆にすることはできない。したがって、ADD命令を、STORE命令の前に移動することはできない。
なお、本実施例4に係るコンパイラ装置は、実施例1に係るコンパイラ装置と同様の機能構成を有し、レジスタ割り付け部がパイプライン処理されない命令に基づいてレジスタ割り付けを行う。そこで、レジスタ割り付け部によるレジスタ割り付け処理について説明する。
レジスタ割り付け部は、同時に値を保持する必要がある変数が、計算機の持つレジスタ数よりも多くなると、どれかの変数をメモリに待避しなければならない。この場合、なるべく待避命令の実行が少ないほど性能が良くなる。したがって、退避される数が少ない変数を退避することが良さそうであるが、必ずしも退避命令が出力される数が少ない変数が良いとは限らない。例えば、100回通る場所に一つ退避命令を出すより、1回しか通らない場所に10個退避命令を出した方が性能は良い。
そこで、レジスタ割り付け部は、変数を評価関数に通し、評価関数による点数で対象を決定する。その際、例えば、ループ構造内で参照されている変数は4の重みを掛け、ループが重なるごとに16、64、と増やしていく。この結果の点数が低い変数が、待避命令を出した場合のコストが低いと考えることができるので、待避対象に選ぶようにする。
ここで、レジスタ割り付け部は、パイプライン処理されない命令が定義する変数にはさらに重みを3倍する。こうすることで、同じ条件で定義/参照されている変数間では、パイプライン処理されない命令が定義する変数が退避対象となることを避けることができる。なお、評価関数を用いて評価した点数はスピルコスト(退避コスト)という。ここで、スピルは変数をメモリに退避することを意味する。
図7は、本実施例4に係るレジスタ割り付け部によるレジスタ割り付け処理の処理手順を示すフローチャートである。同図に示すように、このレジスタ割り付け部は、まずレジスタの割り付け順序を決定する(ステップS401)。ここで、レジスタの割り付け順序は、変数の干渉状況などに基づいて割り付けの難しさを基準に決定する。
そして、全ての変数にレジスタを割り付けることができるか否かを判定し(ステップS402)、割り付けることができれば処理を終了する。一方、全ての変数にレジスタを割り付けることができなければ、割り付け順序にしたがって、レジスタを割り振ってみる(ステップS403)。ここで、割り振るべきレジスタが存在しない変数をスピル候補と呼ぶこととする。
そして、評価関数を用いて変数を評価したスピルコストに基づく優先順位にしたがってスピル候補から変数を選択し(ステップS404)、スピル候補から選択した変数よりスピルコストの低い変数をレジスタを割り振られた変数から選択して実スピルリストに登録する(ステップS405)。ここで、実スピルリストは、メモリに退避することに決定した変数を登録するリストである。
そして、実スピルリストに登録した変数に割り振られていたレジスタをスピル候補から選択した変数に割り振り(ステップS406)、実スピルリストに登録した変数以外の全変数にレジスタが割り振られたか否かを判定する(ステップS407)。
その結果、実スピルリストに登録した変数以外の全変数にレジスタが割り振られていない場合には、ステップS404に戻ってスピル候補から新たな変数を選択して処理を行い、実スピルリストに登録した変数以外の全変数にレジスタが割り振られた場合には、実スピルリストに登録されている全ての変数に対して退避命令を発行し(ステップS408)、ステップS401に戻る。
ここで、ステップS401に戻る理由は、実スピルリストに登録した変数以外の全変数にレジスタが割り振られた場合でも、実際には、一時的に使用されるレジスタなどによってレジスタの割り付けが行えない場合があり、実際に割り付けを行う必要があるためである。
上述してきたように、本実施例4では、レジスタ割り付け部が、パイプライン処理されない命令により定義される変数の重みを重くしてスピルコストを計算し、スピルコストの高い変数はできるだけメモリへの退避を避けることとしたので、パイプライン処理されない命令により定義される変数のメモリの退避に起因する実行効率の低下を防ぐことができる。
なお、本実施例4では、退避対象を選ぶ際の評価関数の重み付けを用いて、パイプライン処理されない命令により定義される変数が退避対象に選ばれないようにする場合について説明したが、退避対象としてパイプライン処理されない命令により定義される変数が選ばれた場合に、別の候補となる変数を選択することで、パイプライン処理されない命令により定義される変数が退避対象に選ばれないようにすることもできる。
なお、本実施例4では、レジスタ割り付け部によるレジスタ割り付けについて説明したが、第一命令スケジューラについては、従来のように予め定められたスケジューリング範囲を用いることも、実施例1〜3のようにパイプライン処理されない命令に基づいてスケジューリング範囲を決定することもできる。
また、本実施例1〜4では、コンパイラ装置について説明したが、このコンパイラ装置が有する構成をソフトウェアによって実現することで、同様の機能を有するコンパイラプログラムを得ることができる。そこで、このコンパイラプログラムを実行するコンピュータシステムについて説明する。
図8は、本実施例1〜4に係るコンパイラプログラムを実行するコンピュータシステムを示す図である。同図に示すように、このコンピュータシステム200は、本体部201と、本体部201からの指示により表示画面202aに情報を表示するディスプレイ202と、このコンピュータシステム200に種々の情報を入力するためのキーボード203と、ディスプレイ202の表示画面202a上の任意の位置を指定するマウス204と、LAN206または広域エリアネットワーク(WAN)に接続するLANインタフェースと、公衆回線207に接続するモデムとを有する。ここで、LAN206は、他のコンピュータシステム(PC)211、サーバ212、プリンタ213などとコンピュータシステム200とを接続している。
また、図9は、図8に示した本体部201の構成を示す機能ブロック図である。同図に示すように、この本体部201は、CPU221と、RAM222と、ROM223と、ハードディスクドライブ(HDD)224と、CD−ROMドライブ225と、FDドライブ226と、I/Oインタフェース227と、LANインタフェース228と、モデム229とを有する。
そして、このコンピュータシステム200において実行されるコンパイラプログラムは、フロッピィディスク(FD)208、CD−ROM209、DVDディスク、光磁気ディスク、ICカードなどの可搬型記憶媒体に記憶され、これらの記憶媒体から読み出されてコンピュータシステム200にインストールされる。
あるいは、このコンパイラプログラムは、LANインタフェース228を介して接続されたサーバ212のデータベース、他のコンピュータシステム(PC)211のデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータシステム200にインストールされる。
そして、インストールされたコンパイラプログラムは、HDD224に記憶され、RAM222、ROM223などを利用してCPU221により実行される。
(付記1)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムであって、
命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手順と、
前記スケジューリング範囲決定手順により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手順と、
をコンピュータに実行させることを特徴とするコンパイラプログラム。
(付記2)前記スケジューリング範囲決定手順は、パイプライン処理されない命令が平均的に一つ含まれる命令数を命令スケジューリングの対象とする命令群の大きさとすることを特徴とする付記1に記載のコンパイラプログラム。
(付記3)前記スケジューリング範囲決定手順は、命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令を含むクリティカルパスのレイテンシに基づいて決定することを特徴とする付記1に記載のコンパイラプログラム。
(付記4)前記スケジューリング範囲決定手順は、命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令の出現間隔に基づいて決定することを特徴とする付記1に記載のコンパイラプログラム。
(付記5)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムであって、
メモリへ退避する退避変数の選択に使用する退避コストをパイプライン処理されない命令によって定義される変数に対しては他の変数より大きなコストとなるように評価する退避コスト評価手順と、
前記退避コスト評価手順により評価された退避コストに基づいて退避変数を選択する退避変数選択手順と、
をコンピュータに実行させることを特徴とするコンパイラプログラム。
(付記6)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手順と、
前記スケジューリング範囲決定手順により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手順と、
をコンピュータに実行させるコンパイラプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
(付記7)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイル方法であって、
命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定工程と、
前記スケジューリング範囲決定工程により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール工程と、
を含んだことを特徴とするコンパイル方法。
(付記8)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラ装置であって、
命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手段と、
前記スケジューリング範囲決定手段により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手段と、
を備えたことを特徴とするコンパイラ装置。
(付記9)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイル方法であって、
メモリへ退避する退避変数の選択に使用する退避コストをパイプライン処理されない命令によって定義される変数に対しては他の変数より大きなコストとなるように評価する退避コスト評価工程と、
前記退避コスト評価工程により評価された退避コストに基づいて退避変数を選択する退避変数選択工程と、
を含んだことを特徴とするコンパイル方法。
(付記10)パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラ装置であって、
メモリへ退避する退避変数の選択に使用する退避コストをパイプライン処理されない命令によって定義される変数に対しては他の変数より大きなコストとなるように評価する退避コスト評価手段と、
前記退避コスト評価手段により評価された退避コストに基づいて退避変数を選択する退避変数選択手段と、
を備えたことを特徴とするコンパイラ装置。
以上のように、本発明に係るコンパイラ装置、コンパイル方法およびコンパイラプログラムは、パイプライン処理されない命令を命令セットに含む計算機に有用であり、特に、効率的なパイプライン処理が行われないことに起因する性能低下を解決したい場合に適している。
本実施例1に係るコンパイラ装置によるスケジューリング範囲決定処理の概念を説明するための説明図である。 本実施例1に係るコンパイラ装置の構成を示す機能ブロック図である。 本実施例1に係るスケジューリング範囲決定部によるスケジューリング範囲決定処理の処理手順を示すフローチャートである。 命令パスを示す図である。 本実施例2に係るスケジューリング範囲決定部によるスケジューリング範囲決定処理の処理手順を示すフローチャートである。 本実施例3に係るスケジューリング範囲決定部によるスケジューリング範囲決定処理の処理手順を示すフローチャートである。 本実施例4に係るレジスタ割り付け部によるレジスタ割り付け処理の処理手順を示すフローチャートである。 本実施例1〜4に係るコンパイラプログラムを実行するコンピュータシステムを示す図である。 図8に示した本体部の構成を示す機能ブロック図である。
符号の説明
100 コンパイラ装置
110 入力プログラム解析部
120 最適化部
130 第一命令スケジューラ
131 基本ブロック解析部
132 スケジューリング範囲決定部
133 スケジュール部
140 レジスタ割り付け部
150 第二命令スケジューラ
160 出力オブジェクト生成部
200,211 コンピュータシステム
201 本体部
202 ディスプレイ
202a 表示画面
203 キーボード
204 マウス
206 LAN
207 公衆回線
208 フロッピィディスク
209 CD−ROM
212 サーバ
213 プリンタ
221 CPU
222 RAM
223 ROM
224 ハードディスクドライブ
225 CD−ROMドライブ
226 フロッピィディスクドライブ
227 I/Oインタフェース
228 LANインタフェース
229 モデム

Claims (5)

  1. パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムであって、
    命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手順と、
    前記スケジューリング範囲決定手順により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手順と、
    をコンピュータに実行させることを特徴とするコンパイラプログラム。
  2. 前記スケジューリング範囲決定手順は、パイプライン処理されない命令が平均的に一つ含まれる命令数を命令スケジューリングの対象とする命令群の大きさとすることを特徴とする請求項1に記載のコンパイラプログラム。
  3. パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラプログラムであって、
    メモリへ退避する退避変数の選択に使用する退避コストをパイプライン処理されない命令によって定義される変数に対しては他の変数より大きなコストとなるように評価する退避コスト評価手順と、
    前記退避コスト評価手順により評価された退避コストに基づいて退避変数を選択する退避変数選択手順と、
    をコンピュータに実行させることを特徴とするコンパイラプログラム。
  4. パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイル方法であって、
    命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定工程と、
    前記スケジューリング範囲決定工程により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール工程と、
    を含んだことを特徴とするコンパイル方法。
  5. パイプライン処理されない命令を命令セットに含む計算機で実行される目的プログラムを生成するコンパイラ装置であって、
    命令の実行順序を入れ替える命令スケジューリングの対象とする命令群の大きさをパイプライン処理されない命令に基づいて決定するスケジューリング範囲決定手段と、
    前記スケジューリング範囲決定手段により決定された大きさの命令群に対して命令スケジューリングを行うスケジュール手段と、
    を備えたことを特徴とするコンパイラ装置。
JP2004249052A 2004-08-27 2004-08-27 コンパイラプログラム、コンパイル方法およびコンパイラ装置 Withdrawn JP2006065682A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004249052A JP2006065682A (ja) 2004-08-27 2004-08-27 コンパイラプログラム、コンパイル方法およびコンパイラ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004249052A JP2006065682A (ja) 2004-08-27 2004-08-27 コンパイラプログラム、コンパイル方法およびコンパイラ装置

Publications (1)

Publication Number Publication Date
JP2006065682A true JP2006065682A (ja) 2006-03-09

Family

ID=36112111

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004249052A Withdrawn JP2006065682A (ja) 2004-08-27 2004-08-27 コンパイラプログラム、コンパイル方法およびコンパイラ装置

Country Status (1)

Country Link
JP (1) JP2006065682A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016207161A (ja) * 2015-04-28 2016-12-08 富士通株式会社 情報処理装置、コンパイル方法およびコンパイルプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016207161A (ja) * 2015-04-28 2016-12-08 富士通株式会社 情報処理装置、コンパイル方法およびコンパイルプログラム

Similar Documents

Publication Publication Date Title
Xie et al. Enabling coordinated register allocation and thread-level parallelism optimization for GPUs
US9798528B2 (en) Software solution for cooperative memory-side and processor-side data prefetching
Canis et al. Modulo SDC scheduling with recurrence minimization in high-level synthesis
CN101957773B (zh) 用于多轮次动态概要分析的方法及其***
US9207916B2 (en) Simulation apparatus, method and medium
Choi et al. The impact of if-conversion and branch prediction on program execution on the intel itanium processor
JP2004302706A (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP2007272692A (ja) プロファイリングプログラムおよびプロファイリング方法
JP2011138219A (ja) 並列プログラム解析結果表示装置および並列プログラム解析結果表示方法
US6360360B1 (en) Object-oriented compiler mechanism for automatically selecting among multiple implementations of objects
US8612958B2 (en) Program converting apparatus and program conversion method
Gou et al. Addressing GPU on-chip shared memory bank conflicts using elastic pipeline
Bobrek et al. Stochastic contention level simulation for single-chip heterogeneous multiprocessors
JP2009080583A (ja) 情報処理装置、並列処理最適化方法およびプログラム
Lu et al. Efficient code assignment techniques for local memory on software managed multicores
Sazeides Modeling value speculation
Stephenson et al. PGZ: automatic zero-value code specialization
Gao et al. TotalProf: a fast and accurate retargetable source code profiler
Whitham et al. Using trace scratchpads to reduce execution times in predictable real-time architectures
JP2006065682A (ja) コンパイラプログラム、コンパイル方法およびコンパイラ装置
KR20150040663A (ko) 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치
Bai et al. Computing execution times with execution decision diagrams in the presence of out-of-order resources
CN114041116A (zh) 数据移动任务优化的方法和装置
Chuang et al. Dynamic profile driven code version selection
JP6776914B2 (ja) 並列化方法、並列化ツール

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20071106