JPH09185507A - プロセッサ及びその制御方法 - Google Patents

プロセッサ及びその制御方法

Info

Publication number
JPH09185507A
JPH09185507A JP34221095A JP34221095A JPH09185507A JP H09185507 A JPH09185507 A JP H09185507A JP 34221095 A JP34221095 A JP 34221095A JP 34221095 A JP34221095 A JP 34221095A JP H09185507 A JPH09185507 A JP H09185507A
Authority
JP
Japan
Prior art keywords
instruction
address
memory
identifier
registered
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
Application number
JP34221095A
Other languages
English (en)
Inventor
Hiroyasu Nishiyama
博泰 西山
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP34221095A priority Critical patent/JPH09185507A/ja
Publication of JPH09185507A publication Critical patent/JPH09185507A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】マイクロプロセッサにおいて、エイリアス関係
にあるかどうかがコンパイル時に不明なメモリ参照命令
を、性能を低下することなく自由にスケジュールするこ
とを可能とする。 【解決手段】参照したメモリアドレスとその命令の識別
子を記憶する表をハードウェア上に設け、メモリ参照を
行なった際に、参照したアドレスと当該命令の識別子を
この表上に記憶する命令により、参照したアドレスと当
該命令の識別子を登録する。後続して実行されるメモリ
参照命令の参照アドレスが登録されたアドレスと同一で
あれば、表上に記憶された識別子の表す命令に対する補
正コードを実行する。これにより、エイリアス関係のな
い場合に実行される命令数を増加することなく、メモリ
参照を行なう命令を自由にスケジュールできるようにな
る。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はマイクロプロセッサ
の命令実行方式に関し、さらに詳しくは、互いに依存関
係を持つ可能性のあるメモリ参照命令をスケジュールし
プログラムを高速に実行するために有効な命令実行方式
とコンパイル方式に関する。
【0002】
【従来の技術】最近のマイクロプロセッサシステムで
は、スーパスカラ、VLIWといった方式により命令レベル
の並列性を利用し、プログラムを高速に実行できるよう
になっている。このような命令レベルの並列性を最大限
に利用するためには、命令間の依存関係を正確に検出す
る必要がある。このような命令間の依存には、データ依
存と制御依存がある。データ依存はさらに、フロー依
存、逆依存、出力依存に分類される。コンパイラによっ
てプログラムをコンパイルする際に、このようなデータ
依存を常に正確に検出可能であるとは限らない。例え
ば、メモリ参照先のアドレスはプログラムのコンパイル
時には不明な場合があるので、参照するメモリ領域が重
なるかどうかをコンパイラが正確に判定することはでき
ない。このような参照アドレスの重なりはエイリアスと
呼ばれ、この関係が不明な場合には依存関係が存在する
ものと仮定してプログラムの最適化が行なわれる。特に
C言語で記述されたプログラムではポインタが多用され
るため、メモリ参照のエイリアス関係をコンパイル時に
正確に検出できない場合が多い。プログラムの最適化時
には、命令間に依存関係がない方がプログラムを並列化
し性能を向上することができるため、エイリアス関係の
不明なメモリ参照による依存によってプログラムの実行
性能が低く押えられてしまう。
【0003】このような場合に対処するため、例えば
「A.Nicolau,Run-Time Disambiguation: Coping with
Statically Unpredictable Dependencies, IEEE Transa
ctionson Computers, Vol.38, No.5, pp.663-678, 198
9」や「A.S.Huang他、 Speculative Disambiguation: A
Compilation Technique for Dynamic Memory Disambig
uation, Proceedings of the 21st Annual Internation
al Symposium on Computer Architecture, pp.200-210,
1994」に述べられているように、実行時に動的にメモ
リ参照間の依存関係を調べる方式が研究されている。
【0004】これら従来の方式では、プログラムをコン
パイルする際に、エイリアス関係が不明なことによって
依存関係を持つかどうかが不明なメモリ参照命令に関し
て、その参照対象アドレス同士を比較し、これらメモリ
参照対象のアドレスが同一の場合と同一でない場合で異
なるコードを選択して実行するように変換している。プ
ログラムの実行時には、アドレスが同一かどうかに応じ
てそのどちらかが選択的に実行されることとなる。
【0005】
【発明が解決しようとする課題】上記従来の方式では、
依存関係を持つ可能性のあるメモリ参照毎に、アドレス
の比較命令と依存の有無によって実行される命令を生成
する。この結果、実際にはメモリ参照を行なう命令間に
依存がない場合にも実行されるコード量が増加し、却っ
て性能が低下してしまう可能性が高くなる。
【0006】本発明の目的は、エイリアス関係にない場
合に実行されるコード量の増加を低く押えて実行時にメ
モリ参照命令間の依存関係を検出し、自由に命令スケジ
ューリングを行なうための命令実行方式を提供すること
にある。
【0007】
【課題を解決するための手段】以下、説明のため、メモ
リ参照命令I0と後続するメモリ参照命令I1に対して、プ
ログラムの実行速度向上のためには命令I1が命令I0より
先に実行されるよう命令スケジュールする必要がある
が、参照アドレスが重なるかどうかが不明のためにフロ
ー依存または出力依存が存在する可能性があるものとす
る。上記課題を解決するため、本発明では以下のような
手段を用いる。
【0008】(1) メモリ参照命令によって参照されたア
ドレスとその識別子を登録する表をハードウェア上に用
意する。
【0009】(2) 他のメモリ参照命令Xの参照対象とエ
イリアス関係にある可能性のあるメモリ参照を行なう命
令Yを先行的に実行する場合、(1)の表に参照アドレスと
その識別子を登録する。
【0010】(3) メモリ参照命令Xの実行時に(1)の表を
参照し、エイリアス関係にあるメモリ参照Yが先行的に
実行されていれば、メモリ参照命令Yは誤った結果を参
照しているので、その結果を補正するための命令を実行
する。
【0011】具体的な命令実行は以下のように行なわれ
る。
【0012】(1) メモリ参照命令I1によって参照したア
ドレスAと命令I1の識別子の組を、ハードウェア上に用
意された表に記録する。この時、アドレスAが既に表上
に登録されていれば、そのエントリを書き換える。
【0013】(2) メモリ参照命令I0の実行時、I0が参照
するアドレスBと(1)の表に登録されたアドレスを比較
し、一致するものがあれば、メモリ参照命令の実行を中
断して、表上に記憶されたアドレスAに対応する識別子
に対応する補正コードへ制御を移す。一致するアドレス
がなければ、通常通りメモリ参照を行なう。
【0014】(3) (2)で補正コードへ制御を移した場
合、命令I0の識別子を利用して命令I0に対する命令実行
の補正処理を行ない、命令I0の次の命令に制御を移す。
【0015】上記方法によれば、コンパイル時にエイリ
アス関係を持つかどうかを決定することができないメモ
リ参照命令に関して、実行時にエイリアス関係がなけれ
ば、実行される命令数を増加することなく自由に命令を
スケジュールすることが可能になり、プログラムの実行
性能を向上することができる。
【0016】
【発明の実施の形態】以下、図面を参照しながら本発明
の一実施例について説明する。本実施例では、RISC型の
単一命令発行のマイクロプロセッサを仮定する。ただ
し、本発明はRISC型単一命令発行のプロセッサのみに適
用対象を限定するものではなく、スーパスカラおよびVL
IWといったプロセッサへも適用することが可能である。
【0017】図1は本発明を適用したマイクロプロセッ
サの例である。プロセッサ100において、101はレジスタ
ファイル、102は演算器、103はキャッシュメモリ、104
は本発明で特徴的な部分である参照したメモリアドレス
とその命令の識別子の組からなる表(以下、エイリアス
検出表と呼ぶ)である。また、105はエイリアス検出時に
実行されていた命令のアドレスを記憶する特殊レジスタ
CPCである。本実施例では、この表に登録する命令の識
別子としてエイリアス発生時に実行する補正コードのア
ドレスを用いる。
【0018】エイリアス検出表104を用いてエイリアス
の検出と補正処理を行なうために、図2に示すように、L
OAD命令およびSTORE命令それぞれ対して、エイリアス検
出表に参照アドレスとエイリアス発生時に実行補正を行
なうためのコードの分岐先を登録する機能を持つSLOAD
命令201およびSSTORE命令202、エイリアス検出表を検査
し参照するアドレスが既に登録されている場合に、エイ
リアス検出表に登録された補正コードのアドレスに制御
を移す命令であるCLOAD命令203およびCSTORE命令204を
設ける。この図の各命令において、targetおよびsource
はそれぞれターゲットレジスタおよびソースレジスタ、
addressは参照対象アドレス、adjustは補正コードアド
レスを示している。
【0019】図3にSLOAD命令およびSSTORE命令の実行時
の動作を示す。
【0020】まず、処理301で実行を開始する。処理302
において参照対象のアドレスがエイリアス検出表に登録
されているかどうかを検査する。既に登録されていれ
ば、処理303で登録されているエントリの補正コードア
ドレスを更新する。登録されていなければ、処理304で
新たなエントリを作成し、参照アドレスと誤って実行さ
れたメモリ参照を補正するためのコードのアドレスを登
録する。次に処理305で通常のLOAD、STORE処理を実行
し、処理306で終了する。
【0021】図4にCLOAD命令およびCSTORE命令の実行時
の動作を示す、まず、処理402で参照対象のアドレスが
エイリアス検出表に登録されているかどうかを検査す
る。アドレスが登録されている場合、処理403でエイリ
アス発生時の命令アドレスを保存するためのレジスタCP
Cに現在実行中の命令のアドレスを格納し、エイリアス
表に登録されている補正コードアドレスに分岐しする。
参照アドレスがエイリアス表に登録されていない場合、
処理404で通常のLOAD、STORE処理を実行して、処理405
で処理を終了する。
【0022】なお、図3および図4に示した命令の動作フ
ローチャートは命令によって実行される処理の実現の1
つの例であり、処理の並列実行等に制限を加えるもので
はない。
【0023】次に、これらの命令の具体的な適用例につ
いて示す。まず、以下に示すようなフロー依存の場合の
例を考える。ここで、コンパイル時にp0とp2の指すアド
レスとp1とp2の指すアドレスがエイリアス関係にあるか
どうかは不明とする。このため、一般的には、命令I2は
命令I0およびI1にフロー依存するものとして扱わなけれ
ばならない。
【0024】 ... I0: STORE *p0 ← r0 ... I1: STORE *p1 ← r1 ... I2: LOAD r2 ← *p2 ... 命令I2を命令I0の上に移動する場合、命令I0およびI1を
CSTORE命令に変換し、命令I2をSLOAD命令に変換する。S
LOAD命令の最後のオペランドに指定したアドレスには、
アドレスがエイリアス関係にあった場合の誤った命令実
行を補正するためのコードとして、まず、レジスタCPC
の内容に従ってエイリアスを生じた各命令に対する補正
コードへ分岐する。次に、ストア命令I0に対する補正コ
ードでは、まず命令I0のターゲットアドレスp0へソース
レジスタr0の値をストアし、続いて命令I0のソースレジ
スタを命令I2のターゲットレジスタへコピーするコー
ド、命令スケジューリングにより命令I0より上に移動さ
れた、命令I2のターゲットレジスタの値に依存する命令
をコピーし、最後に命令I1の次の命令への分岐命令を生
成する。同様に、ストア命令I1に対する補正コードで
は、まず命令I1のターゲットアドレスp1へソースレジス
タr1の値をストアし、続いて命令I1のソースレジスタを
命令I2のターゲットレジスタへコピーするコード、命令
スケジューリングにより命令I0より上に移動された、命
令I2のターゲットレジスタの値に依存する命令をコピー
し、最後に命令I1の次の命令への分岐命令を生成する。
【0025】以上の補正コード生成処理では、メモリへ
のストア命令や例外を引き起こす可能性のある命令な
ど、システムに対して不可逆な操作を行なう命令に関し
ては命令I0およびI1より上に移動することを制限する。
上の例を変換した結果は、以下に示すようになる。
【0026】 ... I2: SLOAD r2 ← *p2、 L2 ... I0: CSTORE *p0 ← r0 L0n: ... I1: CSTORE *p1 ← r1 L1n: ... L2: GOTO L1c if(CPC == I1) L0c: STORE *p0 ← r0 COPY r2 ← r0 ... GOTO L0n L1c: STORE *p1 ← r1 COPY r2 ← r1 ... GOTO L1n ... このコードを実行する場合、命令I2を実行した時点で、
アドレスp2と補正コードアドレスL2をエイリアス検出表
に登録する。次に命令I0を実行する時点で、アドレスp0
とアドレスp2が異なっていれば、エイリアスは生じてい
ないので通常と同様にレジスタr0の値をアドレスp0へ格
納する。これに対して、アドレスp0とp1が同じであれ
ば、アドレスp0へのストア処理を中断して、レジスタCP
CにI0のアドレスを格納し、補正コードL2に制御を移
す。ここでCPCはI0のアドレスを指しているので、命令I
0に対する補正コードを実行する。ここで、命令I2で参
照した値はアドレスp0およびp2の指しているメモリの古
い値であるので、まずレジスタr0に格納された値をアド
レスp0に書き込み、次に、命令I0のソースレジスタr0の
値を命令I2のターゲットレジスタr2にコピーしてr2の値
を使用する命令を再実行し、命令I0の次の命令に制御を
移す。
【0027】同様に、命令I1を実行した時点で命令I2と
の間にエイリアスが検出された場合、ストア処理を中断
して命令I1に対する補正処理を実行する。
【0028】次に、出力依存の場合の例を示す。フロー
依存の場合と同様にp0とp1の指すアドレスがエイリアス
関係にあるかどうかは不明とする。このため、一般的に
は、命令I1は命令I0に出力依存するものとして扱わなけ
ればならない。
【0029】 ... I0: STORE *p0 ← r0 ... I1: STORE *p1 ← r1 ... I1をI0より前に移動した場合、命令I0をCSTORE命令に変
換し、命令I1をSSTORE命令に変換する。SLOAD命令の最
後のオペランドに指定したアドレスには、*p1、*p2で指
されるアドレスがエイリアス関係る場合に、命令I1によ
る誤った値の参照の補正処理を行なうコードとして、I1
の次の命令への分岐命令を生成する。
【0030】 ... I1: SSTORE *p1 ← r1、 L1 ... I0: CSTORE *p0 ← r0 L: ... L1: goto L ... このコードを実行する場合、命令I1を実行した時点で、
*p1の内容のレジスタr1へのロードを行なうと共にアド
レスp1と補正コードアドレスL1をエイリアス検出表に登
録する。次に、命令I0を実行する時点で、アドレスp0と
アドレスp1が異なっていれば、通常と同様にレジスタp0
の指すアドレスへレジスタr0の値を格納する。これに対
して、アドレスp0とp1が同じであれば、補正コードL1に
制御を移す。ここで、命令I0でストア対象となっている
値は、命令I1のストア操作によって上書きされる値であ
るので、補正コードでは何も行なわず、命令I0の次の命
令に制御を移す。
【0031】以上、本実施例では、エイリアス検出表
に、参照アドレスと補正コードアドレスを格納したが、
命令フィールド長の制約などにより補正コードアドレス
を命令識別子として利用できない場合には、レジスタ等
によって規定された共通の補正コードに制御を移し、命
令に指定された識別子によって補正処理を選択するよう
な実現を行なうことも可能である。
【0032】
【発明の効果】本発明によれば、メモリ参照命令の参照
アドレス間にエイリアス関係のない場合には、実行され
る命令数を増加することなく依存関係を持つ可能性のあ
るメモリ参照命令を自由にスケジュールすることが可能
になる。これにより命令間の待ちを減少したり命令レベ
ルの並列度を増加することが可能となり、計算機プログ
ラムの実行の高速化に効果がある。
【図面の簡単な説明】
【図1】本発明を適用したプロセッサの例。
【図2】本発明を利用するためのメモリ参照命令の例。
【図3】SLOAD、 SSTORE命令の動作フローチャート。
【図4】CLOAD、 CSTORE命令の動作フローチャート。
【符号の説明】
101…レジスタファイル、 102…演算器、 103…
キャッシュメモリ、104…エイリアス検出表。

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】参照したメモリのアドレスとそのメモリを
    参照したメモリ参照命令の識別子の対応表を持ち、メモ
    リからのデータのロードまたはストア時に参照対象のメ
    モリのアドレスと当該メモリ参照命令の識別子を登録
    し、後続して実行されるメモリ参照命令の実行時にこの
    表を検査し参照対象アドレスが先に登録されたアドレス
    と同じであれば、登録された識別子に対応したメモリ参
    照命令の補正コードを実行して命令実行の補正を行なう
    ことを特徴とするプロセッサ。
  2. 【請求項2】請求項1の参照対象のメモリアドレスと参
    照した命令の識別子の対応表に、参照対象のメモリアド
    レスと参照した命令の識別子の組を登録する機能を持つ
    メモリ参照命令を備えることを特徴とするプロセッサ。
  3. 【請求項3】請求項1の参照対象のメモリアドレスと参
    照した命令の識別子の対応表を検査して、参照対象アド
    レスと同じアドレスが登録されていれば、対応表に登録
    された識別子に対応したメモリ参照命令に対する補正コ
    ードへ制御を移す機能を持つメモリ参照命令を備えるこ
    とを特徴とするプロセッサ。
  4. 【請求項4】プログラミング言語のコンパイラにおい
    て、メモリ参照命令AとAに依存する可能性のあるメモリ
    参照命令Bに対して、命令Bを命令Aの上に移動し、請求
    項2および請求項3の命令を用いてメモリ参照命令Aおよ
    びメモリ参照命令Bの間に依存がある場合に補正を行な
    うためのコードを生成することを特徴とするプロセッサ
    及びその制御方法。
JP34221095A 1995-12-28 1995-12-28 プロセッサ及びその制御方法 Pending JPH09185507A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP34221095A JPH09185507A (ja) 1995-12-28 1995-12-28 プロセッサ及びその制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP34221095A JPH09185507A (ja) 1995-12-28 1995-12-28 プロセッサ及びその制御方法

Publications (1)

Publication Number Publication Date
JPH09185507A true JPH09185507A (ja) 1997-07-15

Family

ID=18351975

Family Applications (1)

Application Number Title Priority Date Filing Date
JP34221095A Pending JPH09185507A (ja) 1995-12-28 1995-12-28 プロセッサ及びその制御方法

Country Status (1)

Country Link
JP (1) JPH09185507A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7418583B2 (en) 2000-11-29 2008-08-26 Nec Corporation Data dependency detection using history table of entry number hashed from memory address

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7418583B2 (en) 2000-11-29 2008-08-26 Nec Corporation Data dependency detection using history table of entry number hashed from memory address

Similar Documents

Publication Publication Date Title
TWI681333B (zh) 可靠度提升系統、方法和電腦可讀取媒體
US5778219A (en) Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
CA2203124C (en) Handling of exceptions in speculative instructions
US5901308A (en) Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US7818547B2 (en) Method and apparatus for efficient resource utilization for prescient instruction prefetch
US7571304B2 (en) Generation of multiple checkpoints in a processor that supports speculative execution
US6634023B1 (en) Compile method, exception handling method and computer
US6513109B1 (en) Method and apparatus for implementing execution predicates in a computer processing system
US6631460B1 (en) Advanced load address table entry invalidation based on register address wraparound
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
US5923863A (en) Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US7065750B2 (en) Method and apparatus for preserving precise exceptions in binary translated code
US6631514B1 (en) Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
JP2786574B2 (ja) コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
US6505296B2 (en) Emulated branch effected by trampoline mechanism
US5949995A (en) Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US5634023A (en) Software mechanism for accurately handling exceptions generated by speculatively scheduled instructions
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
JP3564072B2 (ja) コンピュータ処理システムにおけるスタック・リファレンスのリネーム方法およびそのプログラム記憶装置
Ebcioglu et al. Optimizations and oracle parallelism with dynamic translation
EP0742517B1 (en) A program translating apparatus and a processor which achieve high-speed execution of subroutine branch instructions
JPH10133884A (ja) 推測的なコードを含むプログラミング・コードを実行する方法
JP4137735B2 (ja) 動的遅延演算情報を使用して制御投機ロードの即時遅延を制御する方法およびシステム
JPH09185507A (ja) プロセッサ及びその制御方法
JPH06290057A (ja) ループ最適化方法