JP2898105B2 - コンパイル中にソフトウェア・スケジューリング技術を用いてハードウェアのパイプライン処理の中断を最小化する方法 - Google Patents
コンパイル中にソフトウェア・スケジューリング技術を用いてハードウェアのパイプライン処理の中断を最小化する方法Info
- Publication number
- JP2898105B2 JP2898105B2 JP2405114A JP40511490A JP2898105B2 JP 2898105 B2 JP2898105 B2 JP 2898105B2 JP 2405114 A JP2405114 A JP 2405114A JP 40511490 A JP40511490 A JP 40511490A JP 2898105 B2 JP2898105 B2 JP 2898105B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- buffer
- instructions
- attribute
- data store
- 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 - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4451—Avoiding pipeline stalls
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Description
ミングの技術、特にコンパイラに関し、さらに詳細には
パイプライン処理の中断を最小化するために命令をスケ
ジュールするコンパイラに関するものである。
連のマシン・レベルの命令のリストよりも、プログラム
作成者にとって(またはそのプログラム構造を理解しよ
うとする他者にとって)より容易に理解されうる意味を
もつ「C」、フォートラン、パスカル、ベーシックなど
の高級言語で書かれる。高級言語で表現されたプログラ
ムは「ソース・コード」として知られている。しかし、
ソース・コードは直接には実行されず、したがって、プ
ログラムが走っているときに、実行可能なコードに、一
文毎に変換されるか、またはまず、(所定のオペレーテ
ィング・システムを用いる所定のハードウェア上で意味
を有する)「オブジェクト・コード」にコンパイル(翻
訳)されてオブジェクト・コードとして走る。このコン
パイルはそのオブジェクト・コードが使用されるコンピ
ュータ・システムの構造を知っており、したがって、各
ソース・コード文を1以上の特定なオブジェクト・コー
ド命令に変換することができる特定な用途の「コンパイ
ラ」プログラムにより成され得る。この分野の熟練家で
あれば、コンパイルされたオブジェクト・コードを実行
することはインタプリタによりソース・コードを実行す
るよりもずっと速いことを理解するだろうし、ほとんど
の商用のコードはコンパイルされた形態のみにより供給
されている。
につれ、その目的を達成するために多くのハードウェア
/ファームウェアのフィーチャが用いられてきた。動作
速度を速くするために、広く組み込まれてきた1つのフ
ィーチャは一連の連続するマシン・レベルの命令の実行
の様々な段階が同時に行われるパイプライン処理であ
る。しかして、所定の一単位時間の間に、(実行の順番
が)4番目の命令の第1の段階が行われる一方で、3番
目の命令の第2の段階、2番目の命令の第3の段階、お
よび1番目の命令の第4の段階が全て、同時に行われ
る。
タ・システムの外見上の動作速度を劇的に速くする。し
かしがら、パイプライン処理の「中断」(break)すなわ
ち、衝突を回避するために連続する命令の円滑な介挿
(interleave)を中止する必要をもたらしうる、連続す
る命令間の衝突が生じる場合がある。初歩的な例とし
て、4番目の命令の第1の段階が行われているとき、あ
るレジスタがオペランド・アドレスのために使用され、
同じレジスタが3番目の命令の第2の段階を行うことに
より、同時に変更されているならば、衝突することとな
り、4番目の命令の第1の段階は延期されなければなら
ず、これにより、パイプラインの処理は中断され、その
結果、外見上の実行速度は遅くなる。本発明はパイプラ
イン化された構造を用いるコンピュータ・プロセッサ内
に使われているコンパイルされたオブジェクト・コード
内のソフトウェアの中断の問題を提起し、その問題を最
小化するためのものである。
ラを提供することである。
理の中断を極力少なくするために、接近して連続するオ
ブジェクト・コード命令を選択的に再スケジュールする
コンパイラ・モジュールを提供することである。
のこれらおよび他の目的は、バッファ内に一時的に保持
される小規模な連続するグループの各オブジェクト・コ
ードの命令の表現を、各々がスケジューリング・プロセ
スに入るときに、命令属性テーブル(Instrluction Att
ribute Table)から展開される一対の属性ワイド(Attr
ibute Words)に割り当てるコンパイラ・モジュールに
よって達成される。新しい命令と既にバッファ内にある
命令との間に起こりうる潜在的衝突は、ゼロ以外の応答
が潜在的衝突を示すように、その属性ワードと他の命令
の属性ワードとの論理積をとることにより、第1のサブ
・プロセスにおいて容易に確かめられる。衝突がなけれ
ば、バッファ内の最も古い命令はオブジェクト・モジュ
ールへ送られ、最も新しい命令がそのバッファにプッシ
ュされる。しかしながら、衝突が存在すれば、可能であ
れば、または可能な範囲において、バッファ内に既にあ
る、その衝突する命令がその衝突が最小にされるか、ま
たは除かれるようにバッファ内の1以上の他の命令の前
に動かしうる否かを決定することにより、その衝突を解
決するように第2のサブ・プロセスが行われる。このサ
ブ・プロセスはバッファ内の他の命令と動かされるべき
候補の命令の属性ワイドを比較することを含む。その衝
突する命令の移動が可能であり、その衝突を解決または
最小化するならば、そのバッファ内の命令は適宜、再ス
ケジュールされ、最も古い命令はオブジェクト・モジュ
ールへ送られ、新しい命令がバッファへプッシュされ
る。
するために選ばれた例示的構成は基本のワード長が36
ビットである4段のパイプライン・プロセッサである。
本技術の熟練者であれば、プロセッサは異なる段数のパ
イプラインおよび/または異なる長さの基本ワードによ
るものでもよいことは理解するであろう。また、本発明
の例示的な動作を説明する目的のために特定の例が選ば
れたが、様々なバッファ、スタック、属性ワードなどの
機能を設定し、構成するために異なる技術が用いられう
ることも理解されうるであろう。
のパイプラインの段は「フェッチ(fethc)」、「アド
レス(address)」、「キャッシュ(cache)」、および
「実行(execution)」であることがわかるであろう。
「フェッチ」の段階の間に、命令それ自体がプロセッサ
の命令復号ロジックにもってこられる。「アドレス」の
段階の間に、命令の実行に必要とされるオペランドまた
は他のアドレスが展開される。「キャッシュ」の段階の
間には、メモリからの必要とされるオペランド/データ
が(一般的にはキャッシュ・メモリから)フェッチされ
る。そして、「実行」の段階の間に、命令の実際の実行
が行われる。
の間に、I3がフェッチされている一方で、アドレス成
分がI2のために展開されており、I1は必要とされる
とき、キャッシュ・メモリまたは主メモリをアクセスし
ており、一つ前の命令が実行されている。理想的にはt
3の間、I4がフェッチされながら、アドレス成分がI
3のために展開され、I2がキャッシュ(cache)をア
クセスし、I1が実行されるだろう。そしてt4の間、
I5がフェッチされる等であろう。しかしI3によって
ロードされているレジスタを、I4がオペランドアドレ
スのために使用する状況を考えてみよう。I3の実行フ
ェーズがそのレジスタをロードするt5の後になるまで
I4はパイプライン処理のアドレス段階へ進むことがで
きない。その結果、(2つのアスタリスクにより示され
るように)パイプライン処理を中断して待たなければな
らず、これに応じてシステム効率が低下することにな
る。
衝突を起こすことなくI1の前に再付ジュールできれ
ば、そのパイプライン処理の中断は避けられるか、また
最小にすることができ、これは本件発明の動作のための
基本をなすものである。図2はパイプライン処理の中断
を避けるためにマシン言語の命令を再スケジュールする
基本概念を示す高いレベルのフローチャートである。図
2に述べられ、示されているとおり、斯くように簡単で
あるが、効率的な意志決定のプロセスは理解しにくいも
のであり、本発明の意志決定のプロセスはその重要な特
徴の中にある。
ロセスのポイントはスケジュール・プロセスの際、各命
令に一時的に関係付けられる属性ワードの展開である。
また、これらの属性ワードは命令属性テーブルの中に保
持されている情報から個々に展開される。各命令(すな
わち、所定のコンピュータ・プロセッサにより使用され
る多くの命令のうちの各々)は(レジスタおよび/また
はメモリのような)個々のリソースを参照し、使用する
ことができるので、アドレシングが行われうる方法(ア
ドレシングは暗黙的にレジスタおよび/またメモリを使
用するかもしれない)において、どのレジスタが使われ
るか、レジスタが使われる方法においてどのレジスタが
変更されるか、およびレジスタが変更される方法と他の
関連する情報とが全て、そのシステム内のある命令のた
めの独自な命令テーブル属性ワードに組み込まれうる。
グ・システムを用いる大規模コンピュータ・システムの
ためのオブジェクト・コードを作成するコンパイラによ
り使われうる命令テーブル属性ワードの例が図3に示さ
れている。前述したとおり、令令属性テーブル内の各エ
ントリはシステム内のある命令のための属性を与え、そ
のシステムにある命令と同じ数のエントリがテーブル内
に一般的には存在するであろう。これらの属性はある命
令が使用するレジスタ/メモリおよびその中での前後関
係を定義する。例において、興味のあるシステム属性
は、以下の4つの属性(図示せず)である。 アドレシング属性 T=命令はダグ付けされうる(ビット30〜35) M=命令はメモリ・アドレスをもちうる AR=命令はビット29がオンであれば、アドレスレジ
スタを使用しうる。 使用属性(アドレシング属性を含む) X=(命令の24〜26ビットにおいて)インデックス
を使用 XD=X+1も使用 E=エクスポネント・レジスタを使用 A=Aレジスタを使用 Q=Qレジスタを使用 G=ジュネラル・レジスタを使用(命令の0〜3ビッ
ト) GD=G+1を使用 R=ジュネラル・レジスタを使用(命令の32〜35ビ
ット) RD=R+1を使用 変更属性 X=インデックスを変更(命令の24〜26ビット) XD=X+1も変更 E=エクスポネント・レジスタを変更 A=Aレジスタを変更 Q=Qレジスタを変更 G=ジュネラル・レジスタを変更(命令の0〜3ビッ
ト) GD=G+1を変更 R=ジュネラル・レジスタを変更(命令の32〜35ビ
ット) RD=R+1を変更 一般属性 TR=制御を移すことができる SP=特殊特殊(sreg,lreg・・・) EI=eisタイプの命令 VC=ベクトル・タイプの命令 図3において命令テーブル属性ワードのフォーマットは
以下の通りである。 tra=制御の移転 eis=マルチワードeis vec=マルチワード・ベクトル spc=特殊(lreg,sreg,・・・) n1、n2、n3=eis/vec命令のタイプを指定する3ビット
の数
る」命令を表わす情報(表現)を含んでいる。命令バッ
ファは適当な長さの循環的なFIFOスタックとして容
易に実現される。(4段階のパイプライン処理の例のた
めには5個の長さが適当であるが、必ずそうでなければ
ならないことはない)それは2つのインデックス、すな
わち、そのバッファ内に入った最新の命令を指し示すT
OPSTおよびバッファ内の最も古い命令を指し示すB
OTSTにより容易に管理されうる。そして、TOPS
TがBOTSTと等しければ、バッファ内には命令がな
い。命令をバッファ内に入れるためには、TOPSTは
1だけ増される。TOPSTがバッファ内の長さを越え
ると、TOPSTは0にリセットされる。
示せず)を含んでいる。 ISSA=命令スケジュール・スタックa(命令) ISSQ=命令スケジュール・スタックq(再配置のタ
イプ) ISSIC=命令のメモリ内の位置 ISSATT=命令の属性(2ワード)
開された命令のアドレス/使用/変更の属性ワードのフ
ォーマットは図4および図5に示されている。属性ワー
ド1はアドレスおよび使用を属性を含んいる。属性ワー
ド2は変更および特殊の属性を含んでいる。属性ワード
2において、 tra=転送命令 eis=eis命令(mlr,mtm,・・・) vec=ベクトル命令(vfad,・・・) sp=special(lreg,steg,・・・) dsc=ベクトルまたはeisのための記述子(vdsc,adsc
9,・・・) lst=lstouのために使用されるワード(注釈フェーズ) mu=使用されたメモリ mc=変更されたメモリ
入れられている“ロードAレジスタ”命令のための属性
ワードが例示の状況にひき出される方法の具体例を考え
てみよう。“LDA”命令はそのopコード・フィール
ドに加え、オペランド・フィールドを備えている。その
機能はそのオペランド・フィールド内で指定される場所
にある情報がフェッチされAレジスタに格納されるよう
にすることである。このオペランドは インディエート(immediate) ;例えば、LDA7、D
L=定義7 オフセットのみ;例えば、LDA A=位置A内の値ま
たは、LDA 12=位置12内の値 インデックス付;例えば、LDA A,7=メモリ位置
(A+インデックス7の内容)からの値 または、LDA A,,0=アドレス、レジスタ0内
の情報により修飾されるメモリ位置Aからの値
た、LDA命令のための命令属性ワードは次の通りであ
る。 0 7 4 0 0 0 0 0 0 4 0 0 000 111 100 000 000 000 000 000 000 100 000 000
ットされている1の意味は次のとおりである。2番目の
8進数値7において、最上位の2進数はインデックス・
アドレッシングが可能であり、2番目の2進数はメモリ
の利用が可能であり、最下位の2進数はアドレス・レジ
スタの利用が可能であることを示している。3番目の8
進数値4において、最上位の2進数はメモリが実行の間
に使用されることを示しており、10番目の8進数値4
において、最上位の2進数はAれレジスタが実行の間に
変更されることを示している。この情報から、例示のL
DA名のための(8進で表わされた)属性ワードの展開
はすでにバッファ内にある他の命令と可能性のあるロー
ド/使用の衝突のために調べられるべきである。 命令 ワード1 ワード2 LDA5,DL 0000000 000000 00002 000000 (イメディエート・オペランド (Aレジスタ変更) のためのアドレスなし) LDA A 000000 000000 000002 000000 LDA A,1 000400 000000 000002 000000 (アドレスの中で用いられているX1) LDA A,,O 400000 000000 000002 000000 (アドレスの中で用いられている AR0)
とロード/使用の衝突はあるか」が広汎な決定を行うた
めに必要なサブプロセス・ステップに分解された点にお
いて図2より詳細なフローチャートである。以下に更に
説明されるとおり、「命令」は現実に、バッファのフラ
ッシュを要求するラベルであることがこの時点でわかる
かもしれない。そこで、図6において、新しい命令はま
ず、それがラベルであれか否かチェックされ、もしそう
であれば、バッファ内の全ての命令がオブジェクト・モ
ジュールへ送られ、別の新しい命令がプロセスの中に呼
び込まれる。新しい命令がレベルでなければ、オペラン
ド利用属性フィールド(例の中の属性ワード2)、レジ
スタ/メモリ利用フィールド(例の中の属性ワード1の
最初の半分)、およびレジスタ/メモリ変換フィールド
(例の中の属性ワード2の2番目の半分)が例えば、前
述したように展開される。(もちろん、これらの属性フ
ィールドの展開の順番は重要ではなく、システムにとっ
て都合のいいように行われうる。)
い命令の属性フィールド(すなわち、例の中では属性ワ
ード1および2)を、現在、バッファの中にある他の命
令の属性フィールドと論理的にアンドをとることによっ
て行われる。ゼロという結果は衝突が存在しないことを
表わし、その結果、バッファ内の最も古い命令がスタッ
クの底から取り除かれ、オブジェクト・モジュールへ送
られ、新しい命令がスタックの一番上に置かれる。新し
い命令が制御の転送でなければ、調べられるべき次の命
令が呼び出される。しかしながら、新しい命令が制御の
移転(例えば、無条件の分岐)であれば、ラベルが特定
された行き先に対してセットされ、次の新しい命令がプ
ロセスの中に呼び出される前にバッファの内容はフラッ
シュされる。
が存在し、それを解消するよう試みられる。その衝突が
(すでに解消プロセスが少なくとも1回成功裏に終了し
ていることを示す)移動された命令とのものであれば、
パイプライン処理の中断の影響が最小となるので、(こ
のことは完全な除去となるかもしれない)、フローは結
果がゼロであったかのように進みうる。しかしながら、
衝突が移動された命令とのものでなく、更なる改善が可
能であることを示していれば、衝突解消サブプロセスが
続行される。
てみると、図7は図2のブロック「可能であればロード
/使用の衝突を解消する」が決定を行うために、およ
び、可能であれば衝突解消動作を実行するために必要な
ステップに分解されている点で図2より詳細なフローチ
ャートである。もう少し詳細に説明すると、図7は図6
のブロック「新しい命令をImとして指定し、衝突を解
消しに行く」の展開であるとも考えられる。以下の説明
において、Imが新しい命令ではなく、衝突を解消する
ために、シーケンス内でより前に移されるべき候補であ
る、すでにバッファ内にある命令であることを理解する
ことは重要なことである。常にではないが、しばしば、
ImはImが移されるまで、新しい命令の直前の命令であ
ろう。
判定がImはおよびバッファ内のその前に現在ある命令
の各々に対して行われる。くり返すが、判定の順番(お
よび判定自体さえも)はそのシステム環境に都合よく、
適合するように選択されうる。Im以前のバッファ内の
全ての命令に対し所望の判定をして、次の判定に移るよ
り、図7に示されるようにImに対するある命令のため
のいくつかの判定を順次、行うことの方がより効率的で
好ましいことがわかっている。このより好ましい方法に
よれば各テストが失敗となるポイントの数を節約する必
要性を避け、また、Imはがそれと相互に関係付けられ
たより古い命令を越えて移され得なければ、その可能性
のある最も早い時点でそのプロセスを停止させることが
できる。
されている)Imの次の古い、バッファ内の命令がImに
より使用されるレジスタを変更するか否かである。これ
はImの属性ワード1の前半分とInの属性ワード1の後
半分との論理積をとることにより行われうる。ゼロでな
い結果であれば、Imが衝突する命令を越えて移され得
ないことを示し、その解消プロセスが終了する。この時
点において、サブプロセスがパイプライン処理の中断の
影響を最小化するであろう。
シングのためにInにより使用されるレジスタを変更す
るか否かである。これはImの属性ワード2の前半分と
Inの属性ワード1の前半分との論理積をとることによ
り行われる。
にImにより変更されるレジスタを変更するか否かであ
る。これはImの属性ワード2の後半分とInの属性ワー
ド1の前半分との論理積をとることにより行われる。
にInにより変更されるレジスタを変更するか否かであ
る。これはImの属性ワード1の前半分とInの属性ワー
ドの前半分との論理積をとることにより行われる。
シングのために、Imにより使用されるメモリを変更す
るか否かである。Inのための属性ワード2のビット3
5が「1」にセットされていなければ(すなわち、メモ
リが変更されていれば)、この場合は生ぜず、そして、
異なるテストが行われうる。それが「1」であれば、命
令Imのアドレシング・モードがメモリを使用している
か否かを判定するためのチェックが行われうる。メモリ
を使用していなければ、フローは次の判定に進み、使用
していれば、ImアドレスがInのアドレスとははっきり
と異なるか否かを判定するためのチェックが行われる。
これが判定され得なければ、InはImがアドレシングの
際に使用するメモリを変更すると仮定されなければなら
ない。本分野の熟練家であれば、2つのアドレスが等し
いか否かを判定することができる、いくつかの簡単なケ
ースがありうることがわかるであろう。
シングのためにInにより使用されるメモリを変更する
か否かである。Imのための属性ワード2のビット35
が「1」にセットされていなければ(すなわち、メモリ
が変更されなければ)、このケースは生ぜず、更なるチ
ェックが行われうるが、このビットが1」にセットされ
ていれば、Inのアドレシング・モードがメモリを使用
するか否かを判定するようチェックが行われる。メモリ
を使用しなければ、次の判定が行われ、メモリを使用す
れば、InのアドレスがImのためのアドレスとははっき
りと異なるか否かを判定するようチェックが行われる。
これが判定され得なければ、ImはInがアドレシングの
際に使用するメモリを変更すると仮定されなければなら
ない。
の間にImより使用されるメモリを変更するか否かであ
る。Inのための属性ワード2のビット35が「1」セ
ットされていなければ、またはImのための属性ワード
2のビット34が「1」にセットされていなければ(そ
れはメモリが使用されていることを示しているが)、事
象は生ぜず、次の判定が行われうる。両ビットともオン
であれば、両命令のアドレスはそれらがはっきりと異な
るものであるか否かを判定するようチェックが行われな
ければならない。それが判定され得なければ、それは同
じであり、ImはInの後に移され得ないと仮定されなけ
ればならない。
間にInにより使用されるメモリを変更するか否かであ
る。Imのための属性ワード2のビット35が「1」に
セットされていなければ、または、Inのための属性ワ
ード2のビット34が「1」にセットされていなければ
(それはメモリが使用されていることを示している
が)、事象は生ぜず、プロセスは次に進みうる。両ビッ
トともオンであれば、両命令のアドレスはそれらがはっ
きりと異なるものであるか否かを判定するようチェック
されなければならない。これが判定され得なければ、そ
れらは同じであり、ImはInの後に移され得ないと仮定
されなければならない。
前には移され得ないと判定されると、パイプライン処理
の中断は現行の命令列により可能な範囲で最小化され
た。そして、次の新しい命令が解析のために呼び出され
る。しかしながら、Imがすぐ前の命令の前に移され得
ると判定されると、その判定は選択的に(しかし、そう
することが好ましいのであるが)パイプライン処理の中
断を更に最小化し、若しくは除去するために、それが更
に前に移され得るか否かをみるよう続けられうる。この
フィーチャは図7に示されており、同図において、全て
のテストにおける解消法がImおよびInの交換を生じせ
しめ、バッファ内の次に古い命令がInとして指定され
た後、このサブプロセスを反復せしめることがわかるで
あろう。もちろん、バッファ内により古い命令がさらに
なければ、全ての可能性のあるケースはその状態に至る
までに解消されるであろう。
れる最も早い位置が決定されると、バッファ内の最も古
い命令はオブジェクト・モジュールへ送られ、新しい命
令がバッファ内のスタックの最も上に置かれる。そし
て、次の新しい命令が解析のために呼び出される。中断
が解消され、新しい命令がバッファの中にプッシュされ
た後、その新しい命令が制御の移転であるか否かを判定
するチェックが行われる。そうであれば、制御の移転命
令を含むバッファは制御の移転の前に命令を移すことは
誤まりであろうために、オブジェクト・モジュールにそ
の内容が流し出される。(実用においては、バッファの
大きさは場合によって変わりうるであろう。それは長さ
ゼロのところで再スタートし得、命令が処理されるにつ
れ、最大の大きさ、本実施例においては5、にまで長く
なり、その結果、新しい命令が含まれることにより命令
がオブジェクト・モジュールに「押し出されること」が
開始されるようになる。)さらに、その移転の宛先が調
べられ、それが現行のプログラム内にあり、かつ以前の
位置になければ、その宛先の位置は「ラベル」(この意
味においてラベルとは一般に転送の宛先である)テーブ
ルの中に保持される。そして、この情報は命令が処理の
ために再び呼び出されるときに使用されうる。
明による再スケジュールがうまくいった、その結果が理
解され得よう。図8においては、Im(すなわち、I
3)がI2およびI1の前に確実に移され得、確実に行
われるかぎり移されうると判定されたと一実施例として
想定されている。図1および図8の比較から明らかなよ
うにパイプライン処理の中断を完全に除去する結果とな
り、これにより処理効率の実質的向上がもたらされる。
他の例においても、上述のように、パイプライン処理の
中断が本発明を適用することにより完全に除去され得る
か、また最小化され得、そのことは明らかにプロセッサ
の処理効率を向上せしめる。
らかにされてきたが、本技術の熟練家にとって、これら
の原理を逸脱することなく特定の環境および動作要件の
ために特に採用された本発明の実際に用いられうる多く
の構造、配置、比率、順番などの変形例があることは明
らかであろう。
段階のパイプラインの例において用いられる命令を示し
た表を表わしたものである。
属性ワードの例を図示している。
用の属性ワードの例を図示している。
属性ワードの例を図示している。
するためのより詳細なフローチャートである。
するためのより詳細なフローチャートである。
プライン処理の命令が本発明により再スケジュールされ
た、図1に類似する表を表わしたものである。
Claims (5)
- 【請求項1】 パイプライン処理の中断を最も少なくす
るように、パイプライン化された構造のプロセッサ内で
用いられる、コンパイルされたプログラムの命令の順序
をスケジューリングする方法であって、 (A) すでに命令バッファ内に存在する命令の表現に
関して、スケジュール処理されるべき新しい命令の表現
を受け取るための命令バァファを準備し、 (B) スケジュール処理されるべき命令が残っていれ
ば新しい命令を呼び、そうでなければそのスケジュール
・プロセスを終結し、 (C) そのスケジュール処理されるべき新しい命令の
ために、アドレシングが行われうる方法と、どのレジス
タが使用されるかと、レジスタが使用される方法と、ど
のレジスタが修飾されるかと、スケジューリング・プロ
セスが適用されるべきコンピュータ・プロセッサに与え
られた命令の各々のためにレジスタが修飾される方法に
ついて、符号化された記述を含む命令属性テーブルの内
容をアクセスすることにより、前記命令のメモリ及びレ
ジスタの利用方法に関する情報をもたらす複数の属性フ
ィールドを設定し、 (D) 衝突が存在するか否かを判別するために新しい
命令の属性フィールドをその時バァファ内にある複数の
命令の属性フィールドと論理的に比較し、 (E) ステップ(D)において衝突がないと判別され
るとステップ(F)へ進み、 (F) バッファ内の最も古い命令をオブジェクト・モ
ジュールへ送り、新しい命令を前記バッファへプッシュ
し、 (G) ステップ(B)へ復帰し、 (H) ステップ(D)において衝突があると判別され
るとステップ(I)へ進み、 (I) 前記バッファ内にすでにある最新の命令を前記
バッファ内のより前の位置に動かされるべき候補、Im
として指定し、 (J) Imの複数の属性フィールドを、バッファ内の
命令のうちのImの直前にある選択されたInの複数の属
性フィールドと逐次かつ論理的に比較する事によって、
ImおよびInのバッファ内の位置が安全に交換できるか
否か決定し、 (K) ImおよびInが安全に交換できれば、その交換
を行い、Imがバッファ内のさらに前に動かせるか否か
決定するためにステップ(J)に復帰し、 (L) ImおよびInが安全に交換できなければ、又は
Inとして指定される命令が前記バッファ内に残ってい
なければステップ(F)へ進む ステップを含む、スケジューリング方法。 - 【請求項2】 ステップ(G)とステップ(B)との間
に次のステップが含まれることを特徴とする請求項1の
方法。 (M) 前記バッファにプッシュされた新しい命令が制
御の移転であるか否かを決定するステップ、 (N) ステップ(M)で新しい命令が制御の移転であ
ると決定されれば、前記バッファの内容を前記オブジェ
クト・モジュールに流し出し、そしてステップ(B)へ
進むステップ、および (O) ステップ(M)で新しい命令が制御の移転でな
いと決定されれば、ステップ(B)へ進むステップ。 - 【請求項3】 ステップ(N)の間、後刻にそのプロセ
スに再エントリーするために、宛先ラベルが発生される
ことを特徴とする請求項2記載の方法。 - 【請求項4】 プロセッサーのパイプライン形態で用い
るために準備されたコンピュータ命令の当初の順序を並
べ変える方法であって、前記プロセッサーは前記命令の
順序付けられたサブセットを保持するためのデータ記憶
(バッファ)を含む方法を実行し、前記記憶から取り出
された命令は前記プロセッサーのパイプライン形態で用
いるための新たな命令の順序を与えるように取り出され
た順序に組み合わせられ、前記プロセッサーが、前記当
初の順序に含まれ得る異なるタイプのコンピュータ命令
の夫々に対する、夫々の命令の属性の符号化された表現
を含むエントリーを有する表をアクセスし、前記並べ変
える方法が、 (1)前記当初の順序を検査して、処理するべき残りの
命令が含まれているかどうか決定し、 (i)もし無ければ、この方法を終了する。 (ii)もし有れば、ステップ(2)へ行く。 (2)前記当初の順序における次の順番の命令をアクセ
スし、 (3)前記次の順番の命令のために、該次の順番の命令
のタイプに対応するエントリーに対する前記表をアクセ
スして得られたエントリー内の符号化された表現を用い
て前記次の順番の命令の実行によるメモリーおよびレジ
スターのアクセスと用途を表す属性情報フィールドを作
り、 (4)前記次の順番の命令の前記属性情報フィールド内
の項目を、前記データ記憶内に現在保持されている前記
命令に関連した属性情報フィールド内の対応する項目と
比較し、 (i)もし比較された対応する項目に関して衝突が無け
れば、 (a)もし前記データ記憶が一杯なら、前記データ記憶
に現在保持されている前記サブセットの実行のための最
初の命令を前記データ記憶から取り出し、 (b)前記次の順番の命令を前記データ記憶に入れて、
ステップ(1)へ行く。 (ii)もし比較された対応する項目に関して衝突が有
れば、ステップ(5)へ行く。 (5)前記データ記憶に入れられた最後の命令に関連し
た前記属性情報フィールド内の項目を、前記データ記憶
内に現在保持されているものの内の前記命令の直前の1
つに関連した属性情報フィールド内の対応する項目と比
較し、 (i)もし比較された対応する項目に関して衝突が無け
れば、属性情報の関連する項目をステップ(5)で比較
した前記命令の前記データ記憶内での位置を交換し、前
記データ記憶に入れられた前記最後の命令に関連した前
記属性情報フィールド内の項目を、前記データ記憶内に
現在保持されている前記他の命令の異なるものの内の1
つに関連した属性情報フィールド内の対応する項目と比
較するために、前記他の命令の全てに対してステップ
(5)が繰り返されるまで、ステップ(5)を繰り返
し、その後にステップ(4)(i)(a)へ行く。 (ii)もし比較された対応する項目に関して衝突が有
れば、ステップ(4)(i)(a)へ行く。 ステップからなる、コンピュータ命令の当初の順序を並
べ変える方法。 - 【請求項5】 前記ステップ(4)(i)(b)におい
て、ステップ(1)へ行く前に、前記次の順番の命令を
検査して、その実行が制御の移転を起こすかどうかを決
定し、 (4)(i)(b)(α)もし制御の移転が起こらない
なら、ステップ(1)へ行く。 (4)(i)(b)(β)もし制御の移転が起こるな
ら、前記データ記憶内に残っている全ての命令を取り出
すことによって、前記データ記憶をクリアーして、その
後にステップ(1)へ行く。 ことを特徴とする請求項4に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/454,222 US5119495A (en) | 1989-12-21 | 1989-12-21 | Minimizing hardware pipeline breaks using software scheduling techniques during compilation |
US454222 | 1989-12-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH03291726A JPH03291726A (ja) | 1991-12-20 |
JP2898105B2 true JP2898105B2 (ja) | 1999-05-31 |
Family
ID=23803794
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2405114A Expired - Lifetime JP2898105B2 (ja) | 1989-12-21 | 1990-12-21 | コンパイル中にソフトウェア・スケジューリング技術を用いてハードウェアのパイプライン処理の中断を最小化する方法 |
Country Status (8)
Country | Link |
---|---|
US (1) | US5119495A (ja) |
EP (1) | EP0433864B1 (ja) |
JP (1) | JP2898105B2 (ja) |
KR (1) | KR970005458B1 (ja) |
AU (1) | AU642927B2 (ja) |
CA (1) | CA2031112C (ja) |
DE (1) | DE69032394T2 (ja) |
SG (1) | SG48834A1 (ja) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0353819B1 (en) * | 1988-08-02 | 1997-04-09 | Koninklijke Philips Electronics N.V. | Method and apparatus for synchronizing parallel processors using a fuzzy barrier |
JPH02234274A (ja) * | 1989-03-08 | 1990-09-17 | Hitachi Ltd | パイプライン制御論理の自動生成方法及び制御論理 |
CA2010067C (en) * | 1990-02-14 | 1993-10-26 | Steven Murray Hoxey | Reducing pipeline delays in compilers by code hoisting |
IL98248A0 (en) * | 1991-05-23 | 1992-06-21 | Ibm Israel | Instruction scheduler for a computer |
US5404469A (en) * | 1992-02-25 | 1995-04-04 | Industrial Technology Research Institute | Multi-threaded microprocessor architecture utilizing static interleaving |
DE4237417C2 (de) * | 1992-03-25 | 1997-01-30 | Hewlett Packard Co | Datenverarbeitungssystem |
US5671431A (en) * | 1992-09-22 | 1997-09-23 | Siemens Aktiengesellschaft | Method for processing user program on a parallel computer system by inserting a tag during compiling |
JP3338488B2 (ja) * | 1992-11-18 | 2002-10-28 | 富士通株式会社 | データ処理装置の検証方法及び装置 |
GB9412439D0 (en) * | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction pipelining |
JP3113792B2 (ja) * | 1995-04-27 | 2000-12-04 | 松下電器産業株式会社 | 最適化装置 |
US5901295A (en) * | 1995-04-28 | 1999-05-04 | Apple Computer, Inc. | Address and data bus arbiter for pipelined transactions on a split bus |
US5815676A (en) * | 1995-04-28 | 1998-09-29 | Apple Computer, Inc. | Address bus arbiter for pipelined transactions on a split bus |
EP0755003A2 (en) * | 1995-07-19 | 1997-01-22 | Sun Microsystems, Inc. | Method and apparatus for reordering components of computer programs |
US6230317B1 (en) * | 1997-07-11 | 2001-05-08 | Intel Corporation | Method and apparatus for software pipelining of nested loops |
JP3220055B2 (ja) * | 1997-07-17 | 2001-10-22 | 松下電器産業株式会社 | 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。 |
US6332214B1 (en) * | 1998-05-08 | 2001-12-18 | Intel Corporation | Accurate invalidation profiling for cost effective data speculation |
US6381691B1 (en) * | 1999-08-13 | 2002-04-30 | International Business Machines Corporation | Method and apparatus for reordering memory operations along multiple execution paths in a processor |
US7401328B2 (en) * | 2003-12-18 | 2008-07-15 | Lsi Corporation | Software-implemented grouping techniques for use in a superscalar data processing system |
US8612951B2 (en) * | 2009-04-21 | 2013-12-17 | Oracle International Corporation | Method of determining which computer program functions are changed by an arbitrary source code modification |
US8423981B2 (en) * | 2009-06-18 | 2013-04-16 | National Instruments Corporation | Compiling a graphical program having a textual language program portion for a real time target |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4295193A (en) * | 1979-06-29 | 1981-10-13 | International Business Machines Corporation | Machine for multiple instruction execution |
US4493027A (en) * | 1981-05-22 | 1985-01-08 | Data General Corporation | Method of performing a call operation in a digital data processing system having microcode call and return operations |
JPS62259142A (ja) * | 1986-05-02 | 1987-11-11 | Nec Corp | 命令のスケジユ−リング処理方式 |
US4965724A (en) * | 1987-03-05 | 1990-10-23 | Oki Electric Industry Co., Ltd. | Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program |
-
1989
- 1989-12-21 US US07/454,222 patent/US5119495A/en not_active Expired - Lifetime
-
1990
- 1990-11-26 AU AU66966/90A patent/AU642927B2/en not_active Ceased
- 1990-11-29 CA CA002031112A patent/CA2031112C/en not_active Expired - Lifetime
- 1990-12-12 SG SG1996002517A patent/SG48834A1/en unknown
- 1990-12-12 EP EP90123956A patent/EP0433864B1/en not_active Expired - Lifetime
- 1990-12-12 DE DE69032394T patent/DE69032394T2/de not_active Expired - Lifetime
- 1990-12-19 KR KR90021027A patent/KR970005458B1/ko not_active IP Right Cessation
- 1990-12-21 JP JP2405114A patent/JP2898105B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
CA2031112A1 (en) | 1991-06-22 |
DE69032394T2 (de) | 1999-03-25 |
EP0433864A3 (en) | 1993-06-09 |
EP0433864B1 (en) | 1998-06-10 |
EP0433864A2 (en) | 1991-06-26 |
CA2031112C (en) | 1997-05-06 |
SG48834A1 (en) | 1998-05-18 |
KR910012915A (ko) | 1991-08-08 |
JPH03291726A (ja) | 1991-12-20 |
US5119495A (en) | 1992-06-02 |
KR970005458B1 (en) | 1997-04-16 |
AU6696690A (en) | 1991-06-27 |
AU642927B2 (en) | 1993-11-04 |
DE69032394D1 (de) | 1998-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2898105B2 (ja) | コンパイル中にソフトウェア・スケジューリング技術を用いてハードウェアのパイプライン処理の中断を最小化する方法 | |
EP0243892B1 (en) | System for guaranteeing the logical integrity of data | |
KR100292300B1 (ko) | 레지스터재명명시스템및방법 | |
JP2698033B2 (ja) | 順不同の命令実行を可能にするコンピュータ・システム及びその操作方法 | |
EP0686912B1 (en) | Data processor with an execution unit for performing load instructions and method of operation | |
US5197137A (en) | Computer architecture for the concurrent execution of sequential programs | |
US5923863A (en) | Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination | |
US5150470A (en) | Data processing system with instruction queue having tags indicating outstanding data status | |
EP0454985B1 (en) | Scalable compound instruction set machine architecture | |
Bala et al. | Efficient instruction scheduling using finite state automata | |
KR0124812B1 (ko) | 독립적으로 액세스되는 중간 기억 장치를 이용하는 슈퍼스칼라 프로세서 시스템의 명령어 디스패치를 향상시키기 위한 시스템 및 그 방법 | |
EP0312764A2 (en) | A data processor having multiple execution units for processing plural classes of instructions in parallel | |
US5634023A (en) | Software mechanism for accurately handling exceptions generated by speculatively scheduled instructions | |
EP0565705B1 (en) | Out of order job processing method and apparatus | |
US6378062B1 (en) | Method and apparatus for performing a store operation | |
US6272676B1 (en) | Method and apparatus for finding loop— lever parallelism in a pointer based application | |
US6108771A (en) | Register renaming with a pool of physical registers | |
KR100402820B1 (ko) | 기본 블럭 캐쉬를 이용하는 마이크로프로세서 | |
US7836282B2 (en) | Method and apparatus for performing out of order instruction folding and retirement | |
EP0297265A2 (en) | An instruction control mechanism for a computer system | |
JP3779012B2 (ja) | 分岐による中断のないパイプライン化されたマイクロプロセッサ及びその動作方法 | |
CN114995832B (zh) | 一种动静结合的二进制程序翻译方法 | |
US4616315A (en) | System memory for a reduction processor evaluating programs stored as binary directed graphs employing variable-free applicative language codes | |
JPH0764790A (ja) | オペレーションの処理システムおよび方法 | |
HUT75816A (en) | Method of operation of a system for processing information, as well as the processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090312 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090312 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100312 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100312 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110312 Year of fee payment: 12 |
|
EXPY | Cancellation because of completion of term | ||
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110312 Year of fee payment: 12 |