JPH0944362A - コンパイラ - Google Patents
コンパイラInfo
- Publication number
- JPH0944362A JPH0944362A JP19192195A JP19192195A JPH0944362A JP H0944362 A JPH0944362 A JP H0944362A JP 19192195 A JP19192195 A JP 19192195A JP 19192195 A JP19192195 A JP 19192195A JP H0944362 A JPH0944362 A JP H0944362A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- target program
- register
- optimization
- instructions
- 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)
Abstract
(57)【要約】
【課題】 プロセッサのハードウエア規模を増加させる
ことなく、目的プログラムのコードサイズの増加を回避
し、実行の高速化を図ることである。 【解決手段】 前記目的プログラムの命令を解析して、
前記命令列中に分岐及び分岐先を持たないコード列であ
る基本ブロック毎に、前記目的プログラムを分割する解
析処理手段S100と、この解析処理手段S100で分
けられた所定の基本ブロックについて、ロード命令を抽
出し、この抽出されたロード命令のデータキャッシュの
ミス時のレジスタ書き戻しステージにおけるクロックサ
イクルが、レジスタに書き込まない命令のレジスタ書き
戻しステージとなるように命令の順序の入れ換えを、前
記基本ブロック内で行なう最適化処理手段S200と、
この最適化処理手段S200にて最適化された目的プロ
グラムの出力を行う出力手段S300とを備えてある。
ことなく、目的プログラムのコードサイズの増加を回避
し、実行の高速化を図ることである。 【解決手段】 前記目的プログラムの命令を解析して、
前記命令列中に分岐及び分岐先を持たないコード列であ
る基本ブロック毎に、前記目的プログラムを分割する解
析処理手段S100と、この解析処理手段S100で分
けられた所定の基本ブロックについて、ロード命令を抽
出し、この抽出されたロード命令のデータキャッシュの
ミス時のレジスタ書き戻しステージにおけるクロックサ
イクルが、レジスタに書き込まない命令のレジスタ書き
戻しステージとなるように命令の順序の入れ換えを、前
記基本ブロック内で行なう最適化処理手段S200と、
この最適化処理手段S200にて最適化された目的プロ
グラムの出力を行う出力手段S300とを備えてある。
Description
【0001】
【発明の属する技術分野】本発明はコンパイラに関し、
特に、パイプラインのインターロックを回避するコンパ
イラに関する。
特に、パイプラインのインターロックを回避するコンパ
イラに関する。
【0002】
【従来の技術】今日、ほとんどのプログラミングは高級
言語でなされる。コンパイラの第1目標は正確さであ
る。すべての誤りのないプログラムは正確にコンパイル
されなければならない。第2目標は普通、コンパイルさ
れたコードの速度である。高速コンパイル、デバッグ支
援、言語間での相互利用性など、他の目標はすべてこれ
ら2つの目標と比べると優先順位が低い。通常、コンパ
イラの多数のパスを経て、高級言語による抽象度の高い
表現が次第により抽象度の低い表現に変換され、命令セ
ットによる記述にまで行きつく。
言語でなされる。コンパイラの第1目標は正確さであ
る。すべての誤りのないプログラムは正確にコンパイル
されなければならない。第2目標は普通、コンパイルさ
れたコードの速度である。高速コンパイル、デバッグ支
援、言語間での相互利用性など、他の目標はすべてこれ
ら2つの目標と比べると優先順位が低い。通常、コンパ
イラの多数のパスを経て、高級言語による抽象度の高い
表現が次第により抽象度の低い表現に変換され、命令セ
ットによる記述にまで行きつく。
【0003】コンパイラのパス構造を図11に示す。コ
ンパイラは普通2パスから4パスで構成され、より高度
のコンパイラはそれ以上のパスからなる。ここで、パス
とは、コンパイラが全プログラムを読んで、変換を行う
1つのフェーズを表す。最適化パスはあってもなくても
よい。すなわち、より高速コンパイルが必要とされ、コ
ードの質が低くても構わない場合には、最適化パスは省
略される。
ンパイラは普通2パスから4パスで構成され、より高度
のコンパイラはそれ以上のパスからなる。ここで、パス
とは、コンパイラが全プログラムを読んで、変換を行う
1つのフェーズを表す。最適化パスはあってもなくても
よい。すなわち、より高速コンパイルが必要とされ、コ
ードの質が低くても構わない場合には、最適化パスは省
略される。
【0004】コンパイラによってなされる最適化を変換
の形態によって分類すると、以下のようになる。
の形態によって分類すると、以下のようになる。
【0005】1.高レベル最適化 ソース・プログラム・レベルで行うことが多く、後続の
最適化パスへ情報を出力する、マシンに対して独立した
最適化を行う。手続呼び出しの手続きを本体で置き換え
る(インライン展開)手続き最適化等を行う。
最適化パスへ情報を出力する、マシンに対して独立した
最適化を行う。手続呼び出しの手続きを本体で置き換え
る(インライン展開)手続き最適化等を行う。
【0006】2.局所最適化 直列実行される命令コード部分(基本ブロック)内での
最適化を行う。同一計算が2度生起する際に、一方を値
のコピーで置き換える共通式の除去、定数が割り付けら
れる変数が生起する際に、それを定数で置き換える定数
伝搬、及び式の評価に必要とされる資源を最小化するよ
うに式を再構成するスタック長の縮小等を行う。
最適化を行う。同一計算が2度生起する際に、一方を値
のコピーで置き換える共通式の除去、定数が割り付けら
れる変数が生起する際に、それを定数で置き換える定数
伝搬、及び式の評価に必要とされる資源を最小化するよ
うに式を再構成するスタック長の縮小等を行う。
【0007】3.広域最適化 局所最適化を分岐命令を越えられるように拡張し、ルー
プの最適化をめざした変換を導入して分岐を越えた領域
での最適化を行う。局所最適化の場合と同じであるが、
分岐を越えた領域に対して適用する大域共通式の除去、
分が割り付けられる変数Aの箇所すべてをXで置き換え
るコピー伝搬、ループ内の各反復で同一値を計算する命
令をループ外に移動するコード移動、及び、ループ内の
配列アドレス計算の単純化/除去を行う誘導変数の除去
等を行う。
プの最適化をめざした変換を導入して分岐を越えた領域
での最適化を行う。局所最適化の場合と同じであるが、
分岐を越えた領域に対して適用する大域共通式の除去、
分が割り付けられる変数Aの箇所すべてをXで置き換え
るコピー伝搬、ループ内の各反復で同一値を計算する命
令をループ外に移動するコード移動、及び、ループ内の
配列アドレス計算の単純化/除去を行う誘導変数の除去
等を行う。
【0008】4.レジスタ割付け レジスタを効率良く活用するための最適化を行う。メモ
リアクセスを低減して処理性能を向上させる。
リアクセスを低減して処理性能を向上させる。
【0009】5.マシン依存の最適化 マシン固有の特徴を活かした試みより最適化を行う。マ
シンに関する知識に依存する。パイプラインの性能を引
き出すため、命令を並べ換えるパイプライン・スケジュ
ーリング、及び、分岐先へ届くかぎりの最小のディスプ
レースメントを選択する分岐オフセットの最適化等を行
う。
シンに関する知識に依存する。パイプラインの性能を引
き出すため、命令を並べ換えるパイプライン・スケジュ
ーリング、及び、分岐先へ届くかぎりの最小のディスプ
レースメントを選択する分岐オフセットの最適化等を行
う。
【0010】一方、パイプライン・スケジューリングに
は、遅延スロットを利用した最適化がある。ロード命令
は、オペランドをメモリからプロセッサレジスタに読み
込み、後続の命令が使用できるようにする。メモリの動
作速度は通常、プロセッサ・クロック速度よりはるかに
遅いため、命令パイプラインを使用しているプロセッサ
内に格納されている後続命令は、ロードされるオペラン
ドを直ちに使用できるわけではない。このデータ依存関
係を図12に示す。この図12において、第1命令によ
りロードされたオペランドは、第2命令の“A”サイク
ルでは使用できない。この依存関係を処理する一つの方
法は、ロードされるデータが使用可能になるまで、第2
命令の実行に余分なクロックサイクルを挿入することで
パイプラインを遅らせる方法である。この方法では実行
に遅延が生じることは明らかで、したがって、「サイク
ル/命令」の要因は大きくなる。
は、遅延スロットを利用した最適化がある。ロード命令
は、オペランドをメモリからプロセッサレジスタに読み
込み、後続の命令が使用できるようにする。メモリの動
作速度は通常、プロセッサ・クロック速度よりはるかに
遅いため、命令パイプラインを使用しているプロセッサ
内に格納されている後続命令は、ロードされるオペラン
ドを直ちに使用できるわけではない。このデータ依存関
係を図12に示す。この図12において、第1命令によ
りロードされたオペランドは、第2命令の“A”サイク
ルでは使用できない。この依存関係を処理する一つの方
法は、ロードされるデータが使用可能になるまで、第2
命令の実行に余分なクロックサイクルを挿入することで
パイプラインを遅らせる方法である。この方法では実行
に遅延が生じることは明らかで、したがって、「サイク
ル/命令」の要因は大きくなる。
【0011】このデータ依存関係を処理するために、大
部分のRISC設計ではすべてのロード命令には本質的
に待ち時間、つまりロード遅延があることを認めたうえ
で、コンパイラにそのことを意識させる方法を採用して
いる。上記の例では、ロード遅延、つまり命令分の待ち
時間が生じている。ロードの直後の命令は、ロード遅延
スロット内にあるという。このスロット内の命令がロー
ドからのデータを必要としない場合は、パイプラインを
遅らせる必要はない。コンパイラは命令を再編すること
を行う。ロード命令とロード遅延スロット内の命令の間
にデータ依存関係がないようにする一番簡単な方法は、
図13のようにNOP(No Operation)命令をスロット
に入れることである。これにより、パイプラインの停止
状態をハードウエアで制御する必要はなくなったが、遅
延スロットをNOPで埋める方法は、NOP命令により
コードサイズが大きくなり、またNOPが有効な作業を
しているわけでもないため、パイプライン・ストリーム
を効果的に使いこなしているとはいえない。
部分のRISC設計ではすべてのロード命令には本質的
に待ち時間、つまりロード遅延があることを認めたうえ
で、コンパイラにそのことを意識させる方法を採用して
いる。上記の例では、ロード遅延、つまり命令分の待ち
時間が生じている。ロードの直後の命令は、ロード遅延
スロット内にあるという。このスロット内の命令がロー
ドからのデータを必要としない場合は、パイプラインを
遅らせる必要はない。コンパイラは命令を再編すること
を行う。ロード命令とロード遅延スロット内の命令の間
にデータ依存関係がないようにする一番簡単な方法は、
図13のようにNOP(No Operation)命令をスロット
に入れることである。これにより、パイプラインの停止
状態をハードウエアで制御する必要はなくなったが、遅
延スロットをNOPで埋める方法は、NOP命令により
コードサイズが大きくなり、またNOPが有効な作業を
しているわけでもないため、パイプライン・ストリーム
を効果的に使いこなしているとはいえない。
【0012】データ依存関係を処理するためのさらに効
果的な解決方法は、ロード遅延スロットを実際のタスク
が行う命令で埋める方法である。最適化機能が優れてい
るコンパイラは、特にロード遅延が1サイクルだけの場
合、通常はこの方法を採用する。図14の例は、コンパ
イラがデータ依存関係を処理するために命令を再編成す
る様子を示している。Add命令は、3番目のLoad
命令から得られるデータが使用できるかどうかに依存し
ていないため、遅延スロットを命令で埋めてパイプライ
ンを完全に使いこなすことが出来る。
果的な解決方法は、ロード遅延スロットを実際のタスク
が行う命令で埋める方法である。最適化機能が優れてい
るコンパイラは、特にロード遅延が1サイクルだけの場
合、通常はこの方法を採用する。図14の例は、コンパ
イラがデータ依存関係を処理するために命令を再編成す
る様子を示している。Add命令は、3番目のLoad
命令から得られるデータが使用できるかどうかに依存し
ていないため、遅延スロットを命令で埋めてパイプライ
ンを完全に使いこなすことが出来る。
【0013】以上のようにして、従来からコンパイラ
は、上述のような最適化のための処理を行うことで、処
理の効率化、高速化を図っている。
は、上述のような最適化のための処理を行うことで、処
理の効率化、高速化を図っている。
【0014】
【発明が解決しようとする課題】しかしながら、従来の
コンパイラの最適化は、キャッシュがヒットすることを
前提としている。データキャッシュがミスした場合に
は、不必要なパイプラインのインターロックが生じる可
能性がある。たとえば、従来例のロード命令の場合を説
明する。
コンパイラの最適化は、キャッシュがヒットすることを
前提としている。データキャッシュがミスした場合に
は、不必要なパイプラインのインターロックが生じる可
能性がある。たとえば、従来例のロード命令の場合を説
明する。
【0015】ロード命令でデータキャッシュがミスした
場合、ロードされるオペランドはやはり直ちに使用でき
るわけではない。データキャッシュがミスした場合、外
部メモリにアクセスするわけであるが、大部分のRIS
Cではパイプラインがインターロックし、処理が停止し
てしまう。
場合、ロードされるオペランドはやはり直ちに使用でき
るわけではない。データキャッシュがミスした場合、外
部メモリにアクセスするわけであるが、大部分のRIS
Cではパイプラインがインターロックし、処理が停止し
てしまう。
【0016】そこで、データキャッシュがミスした場合
でも、アクセス中のオペランドが使用される命令が出現
するまで、後続の命令を続けるノンブロッキング・ロー
ドという方法がある。ノンブロッキング・ロードを用い
れば、リフィルによるインターロックを抑制できるが、
命令列はデータキャッシュがヒットしていることを想定
して生成されているので、次のような問題が現れる。
でも、アクセス中のオペランドが使用される命令が出現
するまで、後続の命令を続けるノンブロッキング・ロー
ドという方法がある。ノンブロッキング・ロードを用い
れば、リフィルによるインターロックを抑制できるが、
命令列はデータキャッシュがヒットしていることを想定
して生成されているので、次のような問題が現れる。
【0017】データキャッシュのリフィルに4サイクル
かかる場合を想定し、図15のような命令列を考える。
データキャッシュにミスが生じない場合は、パイプライ
ンはインターロックすることなく進み、処理が進行す
る。データキャッシュにミスが生じた場合は以下のよう
になる。すなわち、ロード命令に続く命令は、r2を使
用していないので、データキャッシュがミスを起こして
も、ノンブロッキング・ロードにより処理を続けること
ができる。以下のような5段のパイプラインを想定する
と、実行中のパイプラインの様子は図16の通りであ
る。
かかる場合を想定し、図15のような命令列を考える。
データキャッシュにミスが生じない場合は、パイプライ
ンはインターロックすることなく進み、処理が進行す
る。データキャッシュにミスが生じた場合は以下のよう
になる。すなわち、ロード命令に続く命令は、r2を使
用していないので、データキャッシュがミスを起こして
も、ノンブロッキング・ロードにより処理を続けること
ができる。以下のような5段のパイプラインを想定する
と、実行中のパイプラインの様子は図16の通りであ
る。
【0018】サイクル#4でデータキャッシュにミスが
発生すると、リフィル動作を開始する。ノンブロッキン
グ・ロードにより後続の処理は続けられる。ところがリ
フィル終了後に、オペランドをレジスタに書き込もうと
すると、後続のadd命令もレジスタに書き込もうとす
るので衝突してしまう。レジスタの資源競合が発生して
しまう。add命令のレジスタ書き込みを遅らせるた
め、パイプラインをインターロックしなければならな
い。これを防ぐためにはレジスタの入力ポートを増やし
たり、レジスタ・リネーミングの機構を用意したりすれ
ばよいが、いずれもハードウエアの規模が大きくなって
しまい、コンパイラ技術だけでこの問題を回避する方法
はなかった。
発生すると、リフィル動作を開始する。ノンブロッキン
グ・ロードにより後続の処理は続けられる。ところがリ
フィル終了後に、オペランドをレジスタに書き込もうと
すると、後続のadd命令もレジスタに書き込もうとす
るので衝突してしまう。レジスタの資源競合が発生して
しまう。add命令のレジスタ書き込みを遅らせるた
め、パイプラインをインターロックしなければならな
い。これを防ぐためにはレジスタの入力ポートを増やし
たり、レジスタ・リネーミングの機構を用意したりすれ
ばよいが、いずれもハードウエアの規模が大きくなって
しまい、コンパイラ技術だけでこの問題を回避する方法
はなかった。
【0019】本発明は上記事情に鑑みてなされたもので
あり、その目的とするところは、データキャッシュがミ
スした場合でも、インターロックを回避し得る最適化を
図ることで、プロセッサのハードウエア規模を増加させ
ることなく、目的プログラムのコードサイズの増加を回
避し、実行の高速化を図ることのできるコンパイラを提
供することにある。
あり、その目的とするところは、データキャッシュがミ
スした場合でも、インターロックを回避し得る最適化を
図ることで、プロセッサのハードウエア規模を増加させ
ることなく、目的プログラムのコードサイズの増加を回
避し、実行の高速化を図ることのできるコンパイラを提
供することにある。
【0020】
【課題を解決するための手段】上記目的を達成するため
に、第1の発明の特徴は、高級言語あるいはアセンブリ
言語から目的プログラムを生成するコンパイラにおい
て、データキャッシュがミスした場合に、レジスタの資
源競合によりパイプラインがインターロックを起こさな
いように、前記目的プログラムの命令の順序を入れ換え
る最適化処理手段を有することである。
に、第1の発明の特徴は、高級言語あるいはアセンブリ
言語から目的プログラムを生成するコンパイラにおい
て、データキャッシュがミスした場合に、レジスタの資
源競合によりパイプラインがインターロックを起こさな
いように、前記目的プログラムの命令の順序を入れ換え
る最適化処理手段を有することである。
【0021】上記構成によれば、目的プログラムのコー
ドサイズの増加を回避し、実行の高速化を図ることがで
きるのである。
ドサイズの増加を回避し、実行の高速化を図ることがで
きるのである。
【0022】また、上記目的を達成するため、第2の発
明の特徴は、少なくとも、レジスタ書き戻しステージを
有する命令パイプラインを使用するプロセッサで用いら
れ、高級言語あるいはアセンブリ言語から目的プログラ
ムを生成するコンパイラにおいて、前記目的プログラム
の命令を解析して、前記命令列中に分岐及び分岐先を持
たないコード列である基本ブロック毎に、前記目的プロ
グラムを分割する解析処理手段と、この解析処理手段で
分けられた所定の基本ブロックについて、ロード命令を
抽出し、この抽出されたロード命令のデータキャッシュ
のミス時のレジスタ書き戻しステージにおけるクロック
サイクルが、レジスタに書き込まない命令のレジスタ書
き戻しステージとなるように命令の順序の入れ換えを、
前記基本ブロック内で行なう最適化処理手段と、この最
適化処理手段にて最適化された目的プログラムの出力を
行う出力手段と、を具備することである。
明の特徴は、少なくとも、レジスタ書き戻しステージを
有する命令パイプラインを使用するプロセッサで用いら
れ、高級言語あるいはアセンブリ言語から目的プログラ
ムを生成するコンパイラにおいて、前記目的プログラム
の命令を解析して、前記命令列中に分岐及び分岐先を持
たないコード列である基本ブロック毎に、前記目的プロ
グラムを分割する解析処理手段と、この解析処理手段で
分けられた所定の基本ブロックについて、ロード命令を
抽出し、この抽出されたロード命令のデータキャッシュ
のミス時のレジスタ書き戻しステージにおけるクロック
サイクルが、レジスタに書き込まない命令のレジスタ書
き戻しステージとなるように命令の順序の入れ換えを、
前記基本ブロック内で行なう最適化処理手段と、この最
適化処理手段にて最適化された目的プログラムの出力を
行う出力手段と、を具備することである。
【0023】上記構成において、本発明は、マイクロプ
ロセッサなどの情報処理装置のプログラムにおいて、高
級言語、あるいはアセンブリ言語から目的プログラムを
生成する際に、プログラムの因果律が変わらない範囲
で、データキャッシュのミス時にパイプラインをインタ
ーロックさせないように、命令列の順序を入れ換えるよ
うする。すなわち、 1.まず、高級言語あるいはアセンブリ言語がコンパイ
ルされ、目的プログラが生成される。更に各種最適化処
理をされたアセンブリ・コードが解析処理手段に入力さ
れる。
ロセッサなどの情報処理装置のプログラムにおいて、高
級言語、あるいはアセンブリ言語から目的プログラムを
生成する際に、プログラムの因果律が変わらない範囲
で、データキャッシュのミス時にパイプラインをインタ
ーロックさせないように、命令列の順序を入れ換えるよ
うする。すなわち、 1.まず、高級言語あるいはアセンブリ言語がコンパイ
ルされ、目的プログラが生成される。更に各種最適化処
理をされたアセンブリ・コードが解析処理手段に入力さ
れる。
【0024】2.解析処理手段にて命令の依存関係、レ
ジスタの依存関係などを検索し、命令を入れ換えてもプ
ログラム処理の因果律が変わらない範囲を特定する。
ジスタの依存関係などを検索し、命令を入れ換えてもプ
ログラム処理の因果律が変わらない範囲を特定する。
【0025】3.最適化処理手段では、解析処理手段で
特定した依存関係などを検索し、各命令(イミディエイ
トなどの数値データを含む)の順序を入れ換えて、デー
タキャッシュのミス時にパイプラインをインターロック
させないように置き換える。ここで、この置き換えに
は、まず、ロード命令を抽出し、この抽出されたロード
命令のデータキャッシュのミス時のレジスタ書き戻しス
テージにおけるクロックサイクルが、レジスタに書き込
まない命令のレジスタ書き戻しステージとなるように命
令の順序の入れ換えようにする。このようにすることに
より、データキャッシュがミスした場合でも、インター
ロックを回避し得る最適化を図ることができるのであ
る。また、前記レジスタに書き込まない命令は、各プロ
セッサのアーキテクチュアにより異なるが、例えば、R
3000(MIPS社)ではmul命令が該当する。
特定した依存関係などを検索し、各命令(イミディエイ
トなどの数値データを含む)の順序を入れ換えて、デー
タキャッシュのミス時にパイプラインをインターロック
させないように置き換える。ここで、この置き換えに
は、まず、ロード命令を抽出し、この抽出されたロード
命令のデータキャッシュのミス時のレジスタ書き戻しス
テージにおけるクロックサイクルが、レジスタに書き込
まない命令のレジスタ書き戻しステージとなるように命
令の順序の入れ換えようにする。このようにすることに
より、データキャッシュがミスした場合でも、インター
ロックを回避し得る最適化を図ることができるのであ
る。また、前記レジスタに書き込まない命令は、各プロ
セッサのアーキテクチュアにより異なるが、例えば、R
3000(MIPS社)ではmul命令が該当する。
【0026】4.最適化されたアセンブリ・コードを出
力手段により出力する。なお、前記出力手段により出力
されるものとしては、ディスプレイ装置、プリンタ装置
等の出力のほか、メモリ装置やディスク装置等の記憶装
置が含まれる。
力手段により出力する。なお、前記出力手段により出力
されるものとしては、ディスプレイ装置、プリンタ装置
等の出力のほか、メモリ装置やディスク装置等の記憶装
置が含まれる。
【0027】以上のような構成により、パイプラインが
インターロックを起こさないように、目的プログラムの
命令の順序を入れ換え、目的プログラムのコードサイズ
の増加を回避し、実行の高速化を図ることができるので
ある。
インターロックを起こさないように、目的プログラムの
命令の順序を入れ換え、目的プログラムのコードサイズ
の増加を回避し、実行の高速化を図ることができるので
ある。
【0028】
【発明の実施の形態】以下、図面を用いて本発明の実施
の形態を説明する。図1は、命令列最適化方式の処理手
順を示したフローチャートである。本処理は、大きく分
けて前処理である解析処理S100と、本処理である最
適化処理S200とに分けられる。
の形態を説明する。図1は、命令列最適化方式の処理手
順を示したフローチャートである。本処理は、大きく分
けて前処理である解析処理S100と、本処理である最
適化処理S200とに分けられる。
【0029】本実施の形態における入力は高級言語から
コンパイラにより生成された、あるいは人手で書かれた
アセンブリ言語プログラムであり、出力は命令順を入れ
換えられたアセンブリ言語プログラムである。一般にコ
ンパイルの過程では、さまざまな目的を持った最適化が
行われる。本発明の要旨とする最適化と、他の最適化を
行う順序は、処理手順、処理順序には直接依存すること
なくコンパイラを構成することができる。
コンパイラにより生成された、あるいは人手で書かれた
アセンブリ言語プログラムであり、出力は命令順を入れ
換えられたアセンブリ言語プログラムである。一般にコ
ンパイルの過程では、さまざまな目的を持った最適化が
行われる。本発明の要旨とする最適化と、他の最適化を
行う順序は、処理手順、処理順序には直接依存すること
なくコンパイラを構成することができる。
【0030】解析処理S100は、目的プログラムの命
令を解析して、前記命令列中に分岐及び分岐先を持たな
いコード列である基本ブロック毎に、前記目的プログラ
ムを分割するための処理を行う。すなわち、プログラム
の基本ブロック(命令列中に分岐及び分岐先を持たない
コード列)を検索し、基本ブロック内の命令列に対し、
それらの命令の依存関係、レジスタの依存関係を解析
し、命令の入れ換えによって、処理の因果律が変化しな
い範囲を特定する。
令を解析して、前記命令列中に分岐及び分岐先を持たな
いコード列である基本ブロック毎に、前記目的プログラ
ムを分割するための処理を行う。すなわち、プログラム
の基本ブロック(命令列中に分岐及び分岐先を持たない
コード列)を検索し、基本ブロック内の命令列に対し、
それらの命令の依存関係、レジスタの依存関係を解析
し、命令の入れ換えによって、処理の因果律が変化しな
い範囲を特定する。
【0031】最適化処理S200では、解析処理S10
0で解析された各基本ブロックをひとつの処理単位とし
て、順次最適化処理を施していく。本実施の形態では、
解析処理手段で分けられた所定の基本ブロックについ
て、ロード命令を抽出し、この抽出されたロード命令の
データキャッシュのミス時のレジスタ書き戻しステージ
におけるクロックサイクルが、レジスタに書き込まない
命令のレジスタ書き戻しステージとなるように命令の順
序の入れ換えを、前記基本ブロック内で行なう。
0で解析された各基本ブロックをひとつの処理単位とし
て、順次最適化処理を施していく。本実施の形態では、
解析処理手段で分けられた所定の基本ブロックについ
て、ロード命令を抽出し、この抽出されたロード命令の
データキャッシュのミス時のレジスタ書き戻しステージ
におけるクロックサイクルが、レジスタに書き込まない
命令のレジスタ書き戻しステージとなるように命令の順
序の入れ換えを、前記基本ブロック内で行なう。
【0032】出力処理S300で、最適化されたアセン
ブリ・リストを出力する。出力ステップS300により
出力されるものとしては、ディスプレイ装置、プリンタ
装置等の出力のほか、メモリ装置やディスク装置等の記
憶装置が含まれる。
ブリ・リストを出力する。出力ステップS300により
出力されるものとしては、ディスプレイ装置、プリンタ
装置等の出力のほか、メモリ装置やディスク装置等の記
憶装置が含まれる。
【0033】以下、最適化処理S200の詳細を説明す
る。最適化処理S200では、命令の順序に関して全て
の組合せを考慮し、できる限りインターロックを発生し
ないような最適解を、シラミ潰しに探す方法も考えられ
る。しかし、この方法は現実的ではないので、あるい
は、基本ブロック内の命令に対して、以下の処理を施す
方法も考えられる。
る。最適化処理S200では、命令の順序に関して全て
の組合せを考慮し、できる限りインターロックを発生し
ないような最適解を、シラミ潰しに探す方法も考えられ
る。しかし、この方法は現実的ではないので、あるい
は、基本ブロック内の命令に対して、以下の処理を施す
方法も考えられる。
【0034】図2に示した最適化は以下のような場合を
想定している。すなわち、データキャッシュのリフィル
動作には、Tサイクル必要であるとする。あるロード命
令でデータキャッシュのミスが発生した場合、上記ロー
ド命令からT命令後の命令がレジスタへの書き込みを行
う場合、インターロックを発生してしまう。このインタ
ーロックを回避するための最適化である。以下、図2を
用いて説明する。
想定している。すなわち、データキャッシュのリフィル
動作には、Tサイクル必要であるとする。あるロード命
令でデータキャッシュのミスが発生した場合、上記ロー
ド命令からT命令後の命令がレジスタへの書き込みを行
う場合、インターロックを発生してしまう。このインタ
ーロックを回避するための最適化である。以下、図2を
用いて説明する。
【0035】S201にてロード命令の集合をLG0=
Lnとする。移動禁止領域の集合をDG=Dn=φとす
る。S202にてLG0に属する全てのロード命令に対
して、命令間の依存関係を満たす制約下で移動可能な領
域であり、DGと重ならない領域を求める。ここでは領
域Anと呼ぶことにする。領域Anをもつロード命令の
集合をLG1=Lnとする。
Lnとする。移動禁止領域の集合をDG=Dn=φとす
る。S202にてLG0に属する全てのロード命令に対
して、命令間の依存関係を満たす制約下で移動可能な領
域であり、DGと重ならない領域を求める。ここでは領
域Anと呼ぶことにする。領域Anをもつロード命令の
集合をLG1=Lnとする。
【0036】次に、S203にてLG1=φのときは終
了し、それ以外の場合には、S204へ進む。S204
にて、各ロード命令Lnに対して、領域Anにおいて他
の全てのロード命令の領域(Am≠n)と重ならない領
域を求める。ここでは領域Bnと呼ぶことにする。領域
Bnをもつロード命令の集合をLG2=Lnとする。集
合LG3=φとする。
了し、それ以外の場合には、S204へ進む。S204
にて、各ロード命令Lnに対して、領域Anにおいて他
の全てのロード命令の領域(Am≠n)と重ならない領
域を求める。ここでは領域Bnと呼ぶことにする。領域
Bnをもつロード命令の集合をLG2=Lnとする。集
合LG3=φとする。
【0037】次に、S205にて、LG2=φのときは
後述するS213へ進み、それ以外の場合には、S20
6へ進む。S206にて基本ブロック内からLG0全て
の領域Bn、後述するDGを取り去った領域を求める。
ここでは領域Cと呼ぶことにする。
後述するS213へ進み、それ以外の場合には、S20
6へ進む。S206にて基本ブロック内からLG0全て
の領域Bn、後述するDGを取り去った領域を求める。
ここでは領域Cと呼ぶことにする。
【0038】次に、S207にて、LG2から任意のロ
ード命令Lnを取り出し、領域Bnに属する全ての命令
から、命令間の距離が前方の場合はT、後方の場合は
(T−1)である命令の集合IG=Inを求める。S2
08にて、IGに属する命令の中で、領域Bn∪領域C
に含まれ、レジスタに書き込みを行わない命令の集合を
CG=Cnとする。
ード命令Lnを取り出し、領域Bnに属する全ての命令
から、命令間の距離が前方の場合はT、後方の場合は
(T−1)である命令の集合IG=Inを求める。S2
08にて、IGに属する命令の中で、領域Bn∪領域C
に含まれ、レジスタに書き込みを行わない命令の集合を
CG=Cnとする。
【0039】次に、S209にて、CG=φのときはS
212へ進み、それ以外の場合にはS210へ進む。S
210にて、CGから任意の命令Cnを選び、領域Bn
内の、命令Cnから距離Tの位置に、ロード命令Lnを
挿入する。S211にて、ロード命令Lnから命令Cn
に至る命令列を、移動禁止領域Dnとし、集合DGに入
れる。LG0,LG1からLnを取り除く。Lnを集合
LG3へ入れる。
212へ進み、それ以外の場合にはS210へ進む。S
210にて、CGから任意の命令Cnを選び、領域Bn
内の、命令Cnから距離Tの位置に、ロード命令Lnを
挿入する。S211にて、ロード命令Lnから命令Cn
に至る命令列を、移動禁止領域Dnとし、集合DGに入
れる。LG0,LG1からLnを取り除く。Lnを集合
LG3へ入れる。
【0040】次に、S212にて、LG2=φかつLG
3=φのときはS213へ進み、LG2=φかつLG3
≠φのときはS202へ進み、いずれでもないときはS
207へ進む。S213では、LG1から任意のロード
命令Lnを取り出し、領域Anに属する全ての命令か
ら、命令間の距離がTである命令の集合IG=Inを求
める。S214にて、IGに属する命令の中で、レジス
タに書き込みを行わない命令の集合をCG=Cnとす
る。
3=φのときはS213へ進み、LG2=φかつLG3
≠φのときはS202へ進み、いずれでもないときはS
207へ進む。S213では、LG1から任意のロード
命令Lnを取り出し、領域Anに属する全ての命令か
ら、命令間の距離がTである命令の集合IG=Inを求
める。S214にて、IGに属する命令の中で、レジス
タに書き込みを行わない命令の集合をCG=Cnとす
る。
【0041】次に、S215にてCG=φかつLG1=
φのときは終了する。CG=φかつLG1≠φのときは
S213へ進み、いずれでもないときはS216へ進
む。S216にて、CGから任意の命令Cnを選び、領
域Bn内の、命令Cnから距離Tの位置に、ロード命令
Lnを挿入する。S217にて、ロード命令Lnから命
令Cnに至る命令列を、移動禁止領域Dnとし、集合D
Gに入れる。LG0からLnを取り除き、S202へ進
み、再び処理を行い、全ての領域に関して処理を行う。
φのときは終了する。CG=φかつLG1≠φのときは
S213へ進み、いずれでもないときはS216へ進
む。S216にて、CGから任意の命令Cnを選び、領
域Bn内の、命令Cnから距離Tの位置に、ロード命令
Lnを挿入する。S217にて、ロード命令Lnから命
令Cnに至る命令列を、移動禁止領域Dnとし、集合D
Gに入れる。LG0からLnを取り除き、S202へ進
み、再び処理を行い、全ての領域に関して処理を行う。
【0042】次に、具体例を用いて、本発明の最適化手
法の操作について説明する。以下では、パイプラインに
MIPS社のR3000を例として用いる。R3000
のパイプラインを図3に示す。図4はアセンブリ言語で
書かれた再帰型フィルタのプログラムである。プログラ
ムの内容は、今井聖,“ディジタル信号処理”,廣済堂
産報出版株式会社、ISBN4-386-07088-5 を参照された
い。アセンブリ言語命令の詳細は、Gerry Kane and Joe
Heinrich,“MIPS RISC Architecture”,Prentice-Hal
l,Inc.,ISBNO-13-590472-2 を参照されたい。
法の操作について説明する。以下では、パイプラインに
MIPS社のR3000を例として用いる。R3000
のパイプラインを図3に示す。図4はアセンブリ言語で
書かれた再帰型フィルタのプログラムである。プログラ
ムの内容は、今井聖,“ディジタル信号処理”,廣済堂
産報出版株式会社、ISBN4-386-07088-5 を参照された
い。アセンブリ言語命令の詳細は、Gerry Kane and Joe
Heinrich,“MIPS RISC Architecture”,Prentice-Hal
l,Inc.,ISBNO-13-590472-2 を参照されたい。
【0043】以下の例ではデータキャッシュのリフィル
動作必要なサイクル数T=3の場合を説明する。図4の
アセンブリプログラムに対して解析処理S100で依存
関係を解析すると、B1〜B6の6つの基本ブロックに
分解される。ここでは、基本ブロックB3に最適化処理
を施す場合を説明する。基本ブロックB3の命令間での
依存関係を表す有向グラフを図5に示す。次に、最適化
処理S200で、図6に示す基本ブロックB3に対し
て、最適化処理を施す。以下、図2に示した最適化処理
のステップごとに各パラメータの状況を示す。
動作必要なサイクル数T=3の場合を説明する。図4の
アセンブリプログラムに対して解析処理S100で依存
関係を解析すると、B1〜B6の6つの基本ブロックに
分解される。ここでは、基本ブロックB3に最適化処理
を施す場合を説明する。基本ブロックB3の命令間での
依存関係を表す有向グラフを図5に示す。次に、最適化
処理S200で、図6に示す基本ブロックB3に対し
て、最適化処理を施す。以下、図2に示した最適化処理
のステップごとに各パラメータの状況を示す。
【0044】 S201 LG0={I1,I2,I3,I4,I17,I30,I43,I5 6} DG=φ S202 A1=φ A2=φ A3=φ A4={I5,…,I13} A17={I6,…,I16,I18,…,I26} A30={I19,…,I29,I31,…,I39} A43={I32,…,I42,I44,…,I52} A56={I45,…,I55,I57} LG1={I4,I17,I30,I43,I56} S203 S204へ S204 B4={I5} B17={I14,I15,I16,I18} B30={I27,I28,I29,I31} B43={I40,I41,I42,I44} B56={I53,I54,I55} LG2={I4,I17,I30,I43,I56} LG3=φ S205 S206へ S206 C={I57} S207 L4=I4を選ぶ LG2={I17,I30,I43,I56} IG={I2,I7} S208 CG=φ S209 S212へ S212 S207へ S207 L17=I7を選ぶ LG2={I30,I43,I56} IG={I11,I12,I13,I14,I15,I16,I1 7,I18,I20} S208 CG={I18} S209 S210へ S210 C17=I18を選ぶ I15の位置にI17を挿入する S211 D17={I17,I15,I16,I18} DG={I17,I15,I16,I18} LG0={I1,I2,I3,I4,I30,I43,I56} LG1={I4,I30,I43,I56} LG3={I17} S212 S207へ S207 L30=I30を選ぶ LG2={I43,I56} IG={I24,I25,I28,I29,I30,I31,I3 2,I33} S208 CG={I31} S209 S210へ S210 C30=I31を選ぶ I28の位置にI30を挿入する S211 D30={I30,I28,I29,I31} DG={I17,I15,I16,I18,I30,I28,I2 9,I31} LG0={I1,I2,I3,I4,I43,I56} LG1={I4,I43,I56} LG3={I17,I30} S212 S207へ S207 L43=I43を選ぶ LG2={I56} IG={I37,I38,I39,I41,I42,I43,I4 4,I46} S208=CG={I44} S209 S210へ S210 C43=I44を選ぶ I41の位置にI43を挿入する S211 D43={I43,I41,I42,I44} DG={I17,I15,I16,I18,I30,I28,I2 9,I31,I43,I41,I42,I44} LG0={I1,I2,I3,I4,I56} LG1={I4,I56} LG3={I17,I30,I43} S212 S207へ S207 L56=I56を選ぶ LG2=φ IG={I50,I51,I52,I55,I56,I57} S208 CG=φ S209 S212へ S212 S202へ
【0045】最適化処理の現時点での状態を図7に示
す。 S202 A1=φ A2=φ A3=φ A4={I5,…,I13} A56={I45,…,I55} LG1={I4,I56} S203 S204へ S204 B4={I5,…,I13} A56={I45,…,I55} LG2={I4,I56} LG3=φ S205 S206へ S206 C={I14,I19,…,I27,I32,…,I40,I57 } S207 L4=I4を選ぶ LG2={I56} IG={I2,I3,I4,I5,I6,I7,I8,I9,I1 0,I11,I12,I13,I14,I17} S208 CG={I5,I8,I11,I14} S209 S210へ S210 C4=I8を選ぶ I6の位置にI4を挿入する S211 D4={I4,I6,I7,I8} DG={I4,I6,I7,I8,I17,I15,I16,I1 8,I30,I28,I29,I31,I43,I41,I42,I44} LG0={I1,I2,I3,I56} LG1={I56} LG3={I4} S212 S207へ S207 L56=I56を選ぶ LG2=φ IG={I42,I43,I44,I45,I46,I47,I4 8,I49,I50,I51,I52,I53,I54,I55,I56,I5 7} S208 CG={I47,I50,I53} S209 S210へ S210 C56=I53を選ぶ I51の位置にI56を挿入する S211 D56={I51,I52,I53,I56} DG={I4,I6,I7,I8,I17,I15,I16,I1 8,I30,I28,I29,I31,I43,I41,I42,I44,I5 1,I52,I53,I56} LG0={I1,I2,I3} LG1=φ LG3={I4,I56} S212 S202へ
す。 S202 A1=φ A2=φ A3=φ A4={I5,…,I13} A56={I45,…,I55} LG1={I4,I56} S203 S204へ S204 B4={I5,…,I13} A56={I45,…,I55} LG2={I4,I56} LG3=φ S205 S206へ S206 C={I14,I19,…,I27,I32,…,I40,I57 } S207 L4=I4を選ぶ LG2={I56} IG={I2,I3,I4,I5,I6,I7,I8,I9,I1 0,I11,I12,I13,I14,I17} S208 CG={I5,I8,I11,I14} S209 S210へ S210 C4=I8を選ぶ I6の位置にI4を挿入する S211 D4={I4,I6,I7,I8} DG={I4,I6,I7,I8,I17,I15,I16,I1 8,I30,I28,I29,I31,I43,I41,I42,I44} LG0={I1,I2,I3,I56} LG1={I56} LG3={I4} S212 S207へ S207 L56=I56を選ぶ LG2=φ IG={I42,I43,I44,I45,I46,I47,I4 8,I49,I50,I51,I52,I53,I54,I55,I56,I5 7} S208 CG={I47,I50,I53} S209 S210へ S210 C56=I53を選ぶ I51の位置にI56を挿入する S211 D56={I51,I52,I53,I56} DG={I4,I6,I7,I8,I17,I15,I16,I1 8,I30,I28,I29,I31,I43,I41,I42,I44,I5 1,I52,I53,I56} LG0={I1,I2,I3} LG1=φ LG3={I4,I56} S212 S202へ
【0046】最適化処理の現時点での状態を図8に示
す。 S202 A1=φ A2=φ A3={I5,I9,I10} LG1={I3} S203 S204へ S204 B3={I5,I9,I10} LG2={I3} LG3=φ S205 S206へ S206 C={I11,…,I14,I19,…,I27,I32,…,I 40,I45,…,I50,I54,I55,I57} S207 L3=I3を選ぶ LG2=φ IG={I2,I6,I7,I11,I12} S208 CG={I11} S209 S210へ S210 C3=I11を選ぶ I9の位置にI3を挿入する S211 D3={I3,I9,I10,I11} DG={I3,I4,I6,I7,I8,I9,I10,I11, I17,I15,I16,I18,I30,I28,I29,I31,I43, I41,I42,I44,P56,P51,P52,P53} LG0={I1,I2} LG1=φ LG3={I3} S212 S202へ
す。 S202 A1=φ A2=φ A3={I5,I9,I10} LG1={I3} S203 S204へ S204 B3={I5,I9,I10} LG2={I3} LG3=φ S205 S206へ S206 C={I11,…,I14,I19,…,I27,I32,…,I 40,I45,…,I50,I54,I55,I57} S207 L3=I3を選ぶ LG2=φ IG={I2,I6,I7,I11,I12} S208 CG={I11} S209 S210へ S210 C3=I11を選ぶ I9の位置にI3を挿入する S211 D3={I3,I9,I10,I11} DG={I3,I4,I6,I7,I8,I9,I10,I11, I17,I15,I16,I18,I30,I28,I29,I31,I43, I41,I42,I44,P56,P51,P52,P53} LG0={I1,I2} LG1=φ LG3={I3} S212 S202へ
【0047】最適化処理の現時点での状態を図9に示
す。 S202 A1=φ A2={I5} LG1={I2} S203 S204へ S204 B2={I5} LG2={I2} LG3=φ S206 C={I12,…,I14,I19,…,I27,I32,…,I 40,I45,…,I50,I54,I55,I57} S207 L2=I2を選ぶ IG2=φ IG={I6} S208 CG=φ S209 S212へ S212 S213へ S213 L2=I2を選ぶ LG1=φ IG={I6} S214 CG=φ S215 終了
す。 S202 A1=φ A2={I5} LG1={I2} S203 S204へ S204 B2={I5} LG2={I2} LG3=φ S206 C={I12,…,I14,I19,…,I27,I32,…,I 40,I45,…,I50,I54,I55,I57} S207 L2=I2を選ぶ IG2=φ IG={I6} S208 CG=φ S209 S212へ S212 S213へ S213 L2=I2を選ぶ LG1=φ IG={I6} S214 CG=φ S215 終了
【0048】以上のような最適化処理による最適化結果
は図9のようになる。シラミ潰し法と比べると、この方
法では必ずしも最適な解は得られないが、高速に最適解
に近い近似解を得ることが出来る。この近似解を用いて
も、実用上は十分満足できる。
は図9のようになる。シラミ潰し法と比べると、この方
法では必ずしも最適な解は得られないが、高速に最適解
に近い近似解を得ることが出来る。この近似解を用いて
も、実用上は十分満足できる。
【0049】具体的に本発明の効果を説明する。図16
のような命令列を考え、図16を図10のようにadd
命令とmul命令を入れ換えると、レジスタの資源競合
を回避でき、ストールを起こさない。以上のような最適
化によってインターロックを回避できるので、プログラ
ムの実行が高速になる。レジスタの入力ポートを複数持
つ場合は、書き込みレジスタが一致しないように最適化
すれば良い。この場合もレジスタ・リネーミングの機構
を用意する必要がないので、ハードウエアの規模を抑え
ることが出来る。
のような命令列を考え、図16を図10のようにadd
命令とmul命令を入れ換えると、レジスタの資源競合
を回避でき、ストールを起こさない。以上のような最適
化によってインターロックを回避できるので、プログラ
ムの実行が高速になる。レジスタの入力ポートを複数持
つ場合は、書き込みレジスタが一致しないように最適化
すれば良い。この場合もレジスタ・リネーミングの機構
を用意する必要がないので、ハードウエアの規模を抑え
ることが出来る。
【0050】
【発明の効果】以上説明したように、本発明は、高級言
語あるいはアセンブリ言語から目的プログラムを生成す
る際、目的プログラムを構成する命令において、命令の
順序を入れ換えることにより、データキャッシュがミス
を起こした場合に、レジスタの資源競合等、パイプライ
ンをインターロックさせる要因となる状況を回避するこ
とが出来、したがって目的プログラムの実行が高速にな
る。また、コンパイラによる最適化であるので、プロセ
ッサのハードウエア規模の増大を招かない。
語あるいはアセンブリ言語から目的プログラムを生成す
る際、目的プログラムを構成する命令において、命令の
順序を入れ換えることにより、データキャッシュがミス
を起こした場合に、レジスタの資源競合等、パイプライ
ンをインターロックさせる要因となる状況を回避するこ
とが出来、したがって目的プログラムの実行が高速にな
る。また、コンパイラによる最適化であるので、プロセ
ッサのハードウエア規模の増大を招かない。
【図1】本発明に係るコンパイラの実行を表すフローチ
ャートである。
ャートである。
【図2】本発明に係るコンパイラの最適化処理を表すフ
ローチャートである。
ローチャートである。
【図3】R3000のパイプラインを示す図である。
【図4】本発明の実施の形態で用いるアセンブリプログ
ラムを示す図である。
ラムを示す図である。
【図5】基本ブロックB3の依存関係を表す有向グラフ
である。
である。
【図6】基本ブロックB3を抽出したプログラムを示す
図である。
図である。
【図7】基本ブロックB3の最適化処理(1)を施した
プログラムを示す図である。
プログラムを示す図である。
【図8】基本ブロックB3の最適化処理(2)を施した
プログラムを示す図である。
プログラムを示す図である。
【図9】基本ブロックB3の最適化処理(3)を施した
プログラムを示す図である。
プログラムを示す図である。
【図10】本発明を適用した実行例である。
【図11】コンパイラのパス構造を示す図である。
【図12】コード命令のデータ依存関係を示す図であ
る。
る。
【図13】NOPを用いた依存関係の解消を説明するた
めの図である。
めの図である。
【図14】遅延ロードを説明するための図である。
【図15】実行プログラムの例を示す図である。
【図16】従来の命令の実行例(インターロックする場
合)を示す図である。
合)を示す図である。
S100 解析処理 S200 最適化処理 S300 出力
Claims (2)
- 【請求項1】 高級言語あるいはアセンブリ言語から目
的プログラムを生成するコンパイラにおいて、 データキャッシュがミスした場合に、レジスタの資源競
合によりパイプラインがインターロックを起こさないよ
うに、前記目的プログラムの命令の順序を入れ換える最
適化処理手段を有することを特徴とするコンパイラ。 - 【請求項2】 少なくとも、レジスタ書き戻しステージ
を有する命令パイプラインを使用するプロセッサで用い
られ、高級言語あるいはアセンブリ言語から目的プログ
ラムを生成するコンパイラにおいて、 前記目的プログラムの命令を解析して、前記命令列中に
分岐及び分岐先を持たないコード列である基本ブロック
毎に、前記目的プログラムを分割する解析処理手段と、 この解析処理手段で分けられた所定の基本ブロックにつ
いて、ロード命令を抽出し、この抽出されたロード命令
のデータキャッシュのミス時のレジスタ書き戻しステー
ジにおけるクロックサイクルが、レジスタに書き込まな
い命令のレジスタ書き戻しステージとなるように命令の
順序の入れ換えを、前記基本ブロック内で行なう最適化
処理手段と、 この最適化処理手段にて最適化された目的プログラムの
出力を行う出力手段と、 を具備することを特徴とするコンパイラ。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP19192195A JPH0944362A (ja) | 1995-07-27 | 1995-07-27 | コンパイラ |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP19192195A JPH0944362A (ja) | 1995-07-27 | 1995-07-27 | コンパイラ |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0944362A true JPH0944362A (ja) | 1997-02-14 |
Family
ID=16282666
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP19192195A Pending JPH0944362A (ja) | 1995-07-27 | 1995-07-27 | コンパイラ |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0944362A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014146311A (ja) * | 2013-01-28 | 2014-08-14 | Samsung Electronics Co Ltd | パイプラインでブロックをスケジュールするコンパイル方法及び装置 |
-
1995
- 1995-07-27 JP JP19192195A patent/JPH0944362A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2014146311A (ja) * | 2013-01-28 | 2014-08-14 | Samsung Electronics Co Ltd | パイプラインでブロックをスケジュールするコンパイル方法及び装置 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US7926046B2 (en) | Compiler method for extracting and accelerator template program | |
| US6718541B2 (en) | Register economy heuristic for a cycle driven multiple issue instruction scheduler | |
| US5797013A (en) | Intelligent loop unrolling | |
| US7082602B2 (en) | Function unit based finite state automata data structure, transitions and methods for making the same | |
| US8448150B2 (en) | System and method for translating high-level programming language code into hardware description language code | |
| Ferdinand et al. | Cache behavior prediction by abstract interpretation | |
| US5901308A (en) | Software mechanism for reducing exceptions generated by speculatively scheduled instructions | |
| US6367071B1 (en) | Compiler optimization techniques for exploiting a zero overhead loop mechanism | |
| US8869121B2 (en) | Method for the translation of programs for reconfigurable architectures | |
| EP2369476B1 (en) | Method and system for converting high-level language code into hdl code | |
| US20020199179A1 (en) | Method and apparatus for compiler-generated triggering of auxiliary codes | |
| US7849453B2 (en) | Method and apparatus for software scouting regions of a program | |
| US20070079298A1 (en) | Thread-data affinity optimization using compiler | |
| US20090313458A1 (en) | Method and apparatus for vector execution on a scalar machine | |
| US20100070730A1 (en) | Minimizing memory access conflicts of process communication channels | |
| US7058937B2 (en) | Methods and systems for integrated scheduling and resource management for a compiler | |
| JPH0792752B2 (ja) | 命令スケジューラ及び入力命令シーケンスを再スケジュールする方法 | |
| US7302557B1 (en) | Method and apparatus for modulo scheduled loop execution in a processor architecture | |
| WO2007055889A1 (en) | Facilitating communication and synchronization between main and scout threads | |
| JPH11194948A (ja) | コンパイラ最適化アルゴリズム | |
| Gupta et al. | Compilation techniques for parallel systems | |
| US20050257200A1 (en) | Generating code for a configurable microprocessor | |
| Tsai et al. | Compiler Techniques for the Superthreaded Architectures1, 2 | |
| US20050081016A1 (en) | Method and apparatus for program execution in a microprocessor | |
| Krolik et al. | rndn: Fast query compilation for nvidia gpus |