JP3093624B2 - 投機例外を処理する方法及び装置 - Google Patents
投機例外を処理する方法及び装置Info
- Publication number
- JP3093624B2 JP3093624B2 JP08006386A JP638696A JP3093624B2 JP 3093624 B2 JP3093624 B2 JP 3093624B2 JP 08006386 A JP08006386 A JP 08006386A JP 638696 A JP638696 A JP 638696A JP 3093624 B2 JP3093624 B2 JP 3093624B2
- Authority
- JP
- Japan
- Prior art keywords
- exception
- speculative
- instruction
- register
- bit
- 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 - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 22
- 238000012545 processing Methods 0.000 claims description 24
- 230000004044 response Effects 0.000 claims description 8
- 230000007246 mechanism Effects 0.000 description 11
- 230000006870 function Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000006073 displacement reaction Methods 0.000 description 3
- 238000012805 post-processing Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000002360 preparation method Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007373 indentation Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3865—Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
【0001】
【発明の属する技術分野】本発明はコンピュータ・プロ
グラムの並行処理に関し、特に、投機命令の処理に関す
る。
グラムの並行処理に関し、特に、投機命令の処理に関す
る。
【0002】
【従来の技術】CPU性能を改良する1つの方法は、サ
イクル・タイムを改良することである。サイクル・タイ
ムの改良における1つの障害は分岐命令である。分岐命
令は通常、それ自身が取るパス、すなわち"taken"(タ
ーゲット)パスまたは"not taken"(順次)パスを決定
する以前に特定の命令の結果を待機しなければならな
い。takenパスは分岐を含みうる命令のシーケンスを含
み、それらの幾つかはtaken分岐であり、他はnot taken
分岐である。パイプラインまたは多機能ユニットの使用
により並列性をサポートする特定のアーキテクチャは、
アプリケーションにおける有効な並列性の度合いを向上
するために命令を条件付きで実行することを可能にす
る。これらの"投機命令(speculative instructions)"
は、条件がまだ決定されていない条件付き分岐命令の後
に現れ、続くプログラム実行により取られる実際のパス
(いわゆるtakenパス)内に存在したりしなかったりす
る。CPUは分岐が取ろうとするパスを推測する。推測
がされるとCPUはパスの実行を開始する。推測が正し
いと遅延は発生せずに実行が最速に継続される。推測が
不正の場合には、CPUは取られるべきであったパスの
実行を開始するが、推測がされない場合よりも悪い実行
遅延は発生しない。投機命令の実行はプログラムにより
要求されないかも知れないので、これらの命令の結果は
それらがtakenパス内に存在するか否かが決定されるま
でコミットされるべきではない。非投機命令はtakenパ
ス内に存在する。
イクル・タイムを改良することである。サイクル・タイ
ムの改良における1つの障害は分岐命令である。分岐命
令は通常、それ自身が取るパス、すなわち"taken"(タ
ーゲット)パスまたは"not taken"(順次)パスを決定
する以前に特定の命令の結果を待機しなければならな
い。takenパスは分岐を含みうる命令のシーケンスを含
み、それらの幾つかはtaken分岐であり、他はnot taken
分岐である。パイプラインまたは多機能ユニットの使用
により並列性をサポートする特定のアーキテクチャは、
アプリケーションにおける有効な並列性の度合いを向上
するために命令を条件付きで実行することを可能にす
る。これらの"投機命令(speculative instructions)"
は、条件がまだ決定されていない条件付き分岐命令の後
に現れ、続くプログラム実行により取られる実際のパス
(いわゆるtakenパス)内に存在したりしなかったりす
る。CPUは分岐が取ろうとするパスを推測する。推測
がされるとCPUはパスの実行を開始する。推測が正し
いと遅延は発生せずに実行が最速に継続される。推測が
不正の場合には、CPUは取られるべきであったパスの
実行を開始するが、推測がされない場合よりも悪い実行
遅延は発生しない。投機命令の実行はプログラムにより
要求されないかも知れないので、これらの命令の結果は
それらがtakenパス内に存在するか否かが決定されるま
でコミットされるべきではない。非投機命令はtakenパ
ス内に存在する。
【0003】投機命令のスケジューリングは命令を大域
コンテキストにおいて、基本ブロック境界を越えて移動
する重要なツールと見なされる。
コンテキストにおいて、基本ブロック境界を越えて移動
する重要なツールと見なされる。
【0004】非投機命令の場合同様、ページ不在、演算
オーバフロー及び無効アドレス指定などの例外が投機命
令の実行の間にも起こりうる。しかしながら、後者の場
合には、投機命令がtakenパス外に存在することが判明
するかも知れないので各例外の処理において、できるだ
け小さなオーバヘッドを招くことが望ましい。一方、例
外を生じる投機命令はtakenパス内に存在することが判
明しているので、適切に例外を管理し、それらの結果に
依存する命令だけを再実行することが要求される。更に
例外自身が"致命的(fatal)"の場合には(例えばプロ
グラム実行が打切られるなど)、CPU及びメモリ内容
が正確であるべきである。例えば保管プロセス状態がプ
ログラム実行の順次モデル(次の命令が開始する以前
に、1命令が完了する)に対応する場合、割込みは正確
である。従って、CPU及びメモリ内容は同一プログラ
ムの逐次実行により達せられる状態に同一でなければな
らない。
オーバフロー及び無効アドレス指定などの例外が投機命
令の実行の間にも起こりうる。しかしながら、後者の場
合には、投機命令がtakenパス外に存在することが判明
するかも知れないので各例外の処理において、できるだ
け小さなオーバヘッドを招くことが望ましい。一方、例
外を生じる投機命令はtakenパス内に存在することが判
明しているので、適切に例外を管理し、それらの結果に
依存する命令だけを再実行することが要求される。更に
例外自身が"致命的(fatal)"の場合には(例えばプロ
グラム実行が打切られるなど)、CPU及びメモリ内容
が正確であるべきである。例えば保管プロセス状態がプ
ログラム実行の順次モデル(次の命令が開始する以前
に、1命令が完了する)に対応する場合、割込みは正確
である。従って、CPU及びメモリ内容は同一プログラ
ムの逐次実行により達せられる状態に同一でなければな
らない。
【0005】M.S.Lam及びM.A.Horowitzにより提案
されるアーキテクチャ"Boosting Beyond Static Schedu
ling in a Superscalar Processor"、Proc.17th Int'l
Symposium on Computer Architecture、Seattle、WA、
May 1990、pp.344-354)は、投機命令("boosted"命令
と呼ばれる)をレジスタ・ファイルの"シャドー"・コピ
ー及びメモリ記憶バッファの使用により、それらの副作
用をバッファリングすることによりサポートする(現投
機命令が依存する各条件付き分岐に対して、1つのこう
したシャドー・コピーが要求される)。ここでは例外
が"boosted命令がコミットしようと試み
る...(...the boosted instruction attempts t
ocommit.)"時にのみ発生すると述べている以外には、
例外を処理する機構について明示的に述べられていな
い。この点でシャドー構造は無効にされ、全てのbooste
d命令が今度は非投機命令として再実行される。結局、
例外を発生する命令が再実行され、その時例外が処理さ
れる。再実行される必要のあるboosted命令、及びboost
ed命令に関連付けられる例外の存在を追跡する実際のハ
ードウェアについては述べられていない。更に例外を発
生した命令に関係無しに全てのboosted命令を再実行す
ることは明らかに非効率的である。例えば非常に多くの
命令がブーストされ、例外が最後のboosted命令におい
て発生する場合を考えると、M.D.Smithらによる機構
は単一の命令を再実行するだけで十分であっても、これ
らの全ての命令を再実行する。
されるアーキテクチャ"Boosting Beyond Static Schedu
ling in a Superscalar Processor"、Proc.17th Int'l
Symposium on Computer Architecture、Seattle、WA、
May 1990、pp.344-354)は、投機命令("boosted"命令
と呼ばれる)をレジスタ・ファイルの"シャドー"・コピ
ー及びメモリ記憶バッファの使用により、それらの副作
用をバッファリングすることによりサポートする(現投
機命令が依存する各条件付き分岐に対して、1つのこう
したシャドー・コピーが要求される)。ここでは例外
が"boosted命令がコミットしようと試み
る...(...the boosted instruction attempts t
ocommit.)"時にのみ発生すると述べている以外には、
例外を処理する機構について明示的に述べられていな
い。この点でシャドー構造は無効にされ、全てのbooste
d命令が今度は非投機命令として再実行される。結局、
例外を発生する命令が再実行され、その時例外が処理さ
れる。再実行される必要のあるboosted命令、及びboost
ed命令に関連付けられる例外の存在を追跡する実際のハ
ードウェアについては述べられていない。更に例外を発
生した命令に関係無しに全てのboosted命令を再実行す
ることは明らかに非効率的である。例えば非常に多くの
命令がブーストされ、例外が最後のboosted命令におい
て発生する場合を考えると、M.D.Smithらによる機構
は単一の命令を再実行するだけで十分であっても、これ
らの全ての命令を再実行する。
【0006】第2の解決策は、制限された数の特殊場合
の投機命令、すなわち"大域"アドレス(既知の"大域"テ
ーブルを指し示す基底レジスタにより識別される)、"
類似"アドレス(同一の基底レジスタ及び"緊密な"非投
機ロードへの類似の変位により識別される)、及び"NIL
ポインタ"・アドレス(値0を含むことが判明してお
り、メモリ内の第1ページをアドレス指定する)の投機
LOAD命令だけを処理するソフトウェア機構を提案する
(D.Bernstein、M.Rodeh及びM.Sagivによる"Proving
Safety of Speculative Load Instructions at Compil
e Time"(Lecture Notes in Computer Science、Vol.5
82、B.Krieg-Brueckner(Ed.)、Proc.4thEuropen S
ymposium on Programming、Rennes、France、Feb.199
2、Springer-Verlag)参照)。Bernsteinらにより提案
される機構は上記特殊な場合に限り、リンカ(Linker)
及びオペレーティング・システムからの支援により、オ
ブジェクト・コードまたはソース・コードを分析して投
機ロードを生成し、投機命令がtakenパス内に存在しな
い場合の例外を回避する
の投機命令、すなわち"大域"アドレス(既知の"大域"テ
ーブルを指し示す基底レジスタにより識別される)、"
類似"アドレス(同一の基底レジスタ及び"緊密な"非投
機ロードへの類似の変位により識別される)、及び"NIL
ポインタ"・アドレス(値0を含むことが判明してお
り、メモリ内の第1ページをアドレス指定する)の投機
LOAD命令だけを処理するソフトウェア機構を提案する
(D.Bernstein、M.Rodeh及びM.Sagivによる"Proving
Safety of Speculative Load Instructions at Compil
e Time"(Lecture Notes in Computer Science、Vol.5
82、B.Krieg-Brueckner(Ed.)、Proc.4thEuropen S
ymposium on Programming、Rennes、France、Feb.199
2、Springer-Verlag)参照)。Bernsteinらにより提案
される機構は上記特殊な場合に限り、リンカ(Linker)
及びオペレーティング・システムからの支援により、オ
ブジェクト・コードまたはソース・コードを分析して投
機ロードを生成し、投機命令がtakenパス内に存在しな
い場合の例外を回避する
【0007】3つの問題がこのアプローチでは解決され
ない。それらはすなわち、takenパス内の投機命令が例
外を発生する可能性、リンカにより導入される変更によ
る順次プログラム内で発生しうる例外の(危険な)マス
キング、及びオリジナル・プログラムでは発生しない例
外を導入する可能性である。これら3つの全ての場合に
おいて、投機命令を有するプログラムの振舞いがプログ
ラマから見るとオリジナル(順次)コードの振舞いとは
異なる。
ない。それらはすなわち、takenパス内の投機命令が例
外を発生する可能性、リンカにより導入される変更によ
る順次プログラム内で発生しうる例外の(危険な)マス
キング、及びオリジナル・プログラムでは発生しない例
外を導入する可能性である。これら3つの全ての場合に
おいて、投機命令を有するプログラムの振舞いがプログ
ラマから見るとオリジナル(順次)コードの振舞いとは
異なる。
【0008】上記3つの場合を説明するために、次の命
令シーケンスについて考えてみよう。 #1 LOAD R3、0(R5) #2 LOAD R4、8(R5) #3 COMPARE R4、0 #4 BEQ OUT #5 COMPARE R3、1000 #6 BEQ OUT #7 LOAD R5、16(R4) OUT:
令シーケンスについて考えてみよう。 #1 LOAD R3、0(R5) #2 LOAD R4、8(R5) #3 COMPARE R4、0 #4 BEQ OUT #5 COMPARE R3、1000 #6 BEQ OUT #7 LOAD R5、16(R4) OUT:
【0009】Bersteinらによるアプローチによれば、命
令#7が命令#3の上に安全に移動され、投機ロードが
実行される。第1の場合では、プログラマが命令#2に
おいて、変位4の代わりに8を指定するなどのプログラ
ム内のバグを仮定すると、R4の(非0の)内容に16
を加算して形成されるアドレスは、無効アドレスを指し
示す結果となる。命令#7の実行はそれが移動されるか
否かに関わらず例外を生じるが、その移動は不正な例外
となる(マシン状態が両方の場合で異なる)。
令#7が命令#3の上に安全に移動され、投機ロードが
実行される。第1の場合では、プログラマが命令#2に
おいて、変位4の代わりに8を指定するなどのプログラ
ム内のバグを仮定すると、R4の(非0の)内容に16
を加算して形成されるアドレスは、無効アドレスを指し
示す結果となる。命令#7の実行はそれが移動されるか
否かに関わらず例外を生じるが、その移動は不正な例外
となる(マシン状態が両方の場合で異なる)。
【0010】第2の場合はより重大であり、プログラム
内のバグを表す順次コード内に存在する例外が、"類似"
ロードによる境界横断から保護するためにデータ・セグ
メント境界に追加されるダミー余分ページ(Bersteinら
により提案される)によりマスクされる。上記コード・
セグメントにおいて命令#1により、R3が1000と
は異なる特定の値(例えば2000)をロードされると
仮定する。更に命令#7の有効アドレスがプログラムの
データ・セグメントの外にあると仮定する(例えば変位
が16の代わりに0である)。リンカにより挿入される
ダミー・ページにより、ロード命令は(それが移動され
るか否かに関わらず)例外を発生せず、誤った結果を導
きうることになるが、その原因はプログラマにとって容
易には明らかとならない。
内のバグを表す順次コード内に存在する例外が、"類似"
ロードによる境界横断から保護するためにデータ・セグ
メント境界に追加されるダミー余分ページ(Bersteinら
により提案される)によりマスクされる。上記コード・
セグメントにおいて命令#1により、R3が1000と
は異なる特定の値(例えば2000)をロードされると
仮定する。更に命令#7の有効アドレスがプログラムの
データ・セグメントの外にあると仮定する(例えば変位
が16の代わりに0である)。リンカにより挿入される
ダミー・ページにより、ロード命令は(それが移動され
るか否かに関わらず)例外を発生せず、誤った結果を導
きうることになるが、その原因はプログラマにとって容
易には明らかとならない。
【0011】第3の場合は、オリジナル・コード内には
存在せず、投機ロードにより発生する例外の導入を取り
扱う。この場合を説明するために、命令#1によりR3
に値1000がロードされると仮定する。またR4の
(非0の)内容に16を加算することにより形成される
アドレスが無効アドレスであると仮定する。命令#5に
よる比較は、"等値(equql)"結果を生成し、命令#6
の分岐が取られる。従って、命令#7はオリジナル・コ
ードでは実行されない。しかしながら、命令#7が命令
#3上に移動されるとこれは実行されるだけでなく例外
をも発生する。
存在せず、投機ロードにより発生する例外の導入を取り
扱う。この場合を説明するために、命令#1によりR3
に値1000がロードされると仮定する。またR4の
(非0の)内容に16を加算することにより形成される
アドレスが無効アドレスであると仮定する。命令#5に
よる比較は、"等値(equql)"結果を生成し、命令#6
の分岐が取られる。従って、命令#7はオリジナル・コ
ードでは実行されない。しかしながら、命令#7が命令
#3上に移動されるとこれは実行されるだけでなく例外
をも発生する。
【0012】
【発明が解決しようとする課題】本発明の目的は、take
nパス内に存在することが判明した投機命令からの例外
を効率的に処理すると同時に、投機命令からの例外によ
るCPUオーバヘッドを最小化することである。本発明
の教示によれば、投機命令からの例外がオリジナル順次
プログラム内で発生する場合に限り処理される。
nパス内に存在することが判明した投機命令からの例外
を効率的に処理すると同時に、投機命令からの例外によ
るCPUオーバヘッドを最小化することである。本発明
の教示によれば、投機命令からの例外がオリジナル順次
プログラム内で発生する場合に限り処理される。
【0013】
【課題を解決するための手段】ここで開示される本発明
は、投機命令により発生する例外を処理するハードウェ
ア機構を含む。投機命令は投機ビットとして参照されて
セットされる余分ビットを有する。投機命令は、投機命
令がtakenパス内に存在するか否かを決定する条件付き
ジャンプ命令の上に移動される命令である。非投機命令
は投機ビットをリセットされる。
は、投機命令により発生する例外を処理するハードウェ
ア機構を含む。投機命令は投機ビットとして参照されて
セットされる余分ビットを有する。投機命令は、投機命
令がtakenパス内に存在するか否かを決定する条件付き
ジャンプ命令の上に移動される命令である。非投機命令
は投機ビットをリセットされる。
【0014】本発明はVLIW(超長命令ワード:Very
Long Instruction word)プロセッサ・アーキテクチャ
の状況において述べられるが、類似のアプローチがスー
パースカラまたはパイプライン式アーキテクチャにおい
ても使用できる。VLIWの状況では単一の命令が多数
の命令を含み、それらの全てが同時に発行され、それら
の幾つかが投機的である。従って、投機オペレーション
は投機命令となるが原理的には同じである。従って、こ
こでは一般的に用語"投機命令"を使用する。この機構
は、投機命令によるレジスタ使用を追跡するコンパイラ
を並列化することによりサポートされ、コンパイラは投
機命令が例外により影響されるとき、それらの再実行を
可能にする。
Long Instruction word)プロセッサ・アーキテクチャ
の状況において述べられるが、類似のアプローチがスー
パースカラまたはパイプライン式アーキテクチャにおい
ても使用できる。VLIWの状況では単一の命令が多数
の命令を含み、それらの全てが同時に発行され、それら
の幾つかが投機的である。従って、投機オペレーション
は投機命令となるが原理的には同じである。従って、こ
こでは一般的に用語"投機命令"を使用する。この機構
は、投機命令によるレジスタ使用を追跡するコンパイラ
を並列化することによりサポートされ、コンパイラは投
機命令が例外により影響されるとき、それらの再実行を
可能にする。
【0015】本発明によれば、CPUオーバヘッドが次
のステップにより最小化される。すなわち、a)例外解
決の間の後処理に備え、投機例外を追跡するステップ
(これらの投機命令のアドレスを指し示すステップを含
む)、及びb)これらの例外の原因を訂正し、takenパ
ス内に存在することが知れる命令を再実行することによ
り、これらの例外を解決するステップである。投機例外
の追跡は、例外ビットを使用する2つの要素を有する。
のステップにより最小化される。すなわち、a)例外解
決の間の後処理に備え、投機例外を追跡するステップ
(これらの投機命令のアドレスを指し示すステップを含
む)、及びb)これらの例外の原因を訂正し、takenパ
ス内に存在することが知れる命令を再実行することによ
り、これらの例外を解決するステップである。投機例外
の追跡は、例外ビットを使用する2つの要素を有する。
【0016】第1の要素は、オリジナル投機例外の追跡
であり、この例外は、例外ビットがセットされていない
オペランドを有する投機命令が例外条件に遭遇するとき
に発生する。要するに、この追跡は、i)投機命令のア
ドレスを指し示すように、レジスタ・ファイル内のター
ゲット・レジスタをセットするステップ、ii)例外ビ
ット・ファイル内の例外ビットをセットするステップ、
iii)余分レジスタに投機命令のオペランドを記憶す
るステップ、及びiv)余分例外ビット・ファイル内に
例外ビットを記憶するステップを含む。
であり、この例外は、例外ビットがセットされていない
オペランドを有する投機命令が例外条件に遭遇するとき
に発生する。要するに、この追跡は、i)投機命令のア
ドレスを指し示すように、レジスタ・ファイル内のター
ゲット・レジスタをセットするステップ、ii)例外ビ
ット・ファイル内の例外ビットをセットするステップ、
iii)余分レジスタに投機命令のオペランドを記憶す
るステップ、及びiv)余分例外ビット・ファイル内に
例外ビットを記憶するステップを含む。
【0017】第2の要素は、投機命令が上述のようにセ
ットされた例外ビットを有するレジスタを使用しようと
するとき使用される。この場合、2次投機例外が生成さ
れ、例外追跡が、i)上述のように投機命令アドレスを
指し示すように、ターゲット・レジスタをセットするス
テップ、ii)ターゲット・レジスタの例外ビットをセ
ットするステップ、及びiii)余分レジスタの内容を
投機命令のオペランドのレジスタ番号(レジスタ内容で
はなく)にセットする(そして余分例外ビット・ファイ
ルの例外ビットをセットする)ステップを含む。これに
より例外解決において、オリジナル投機例外を発生する
投機命令を逆トレースすることが可能になる。例外追跡
はまた、takenパス外に存在することが判明した投機例
外に関する情報を廃棄する。投機例外解決はtakenパス
内に存在する非投機命令が、その例外ビットがセットさ
れたレジスタからのオペランドを使用するとき、トリガ
される。投機例外解決は例外を発生した例外条件を訂正
するステップと、投機例外を発生する命令の結果に依存
した命令を再実行するステップとを含む。
ットされた例外ビットを有するレジスタを使用しようと
するとき使用される。この場合、2次投機例外が生成さ
れ、例外追跡が、i)上述のように投機命令アドレスを
指し示すように、ターゲット・レジスタをセットするス
テップ、ii)ターゲット・レジスタの例外ビットをセ
ットするステップ、及びiii)余分レジスタの内容を
投機命令のオペランドのレジスタ番号(レジスタ内容で
はなく)にセットする(そして余分例外ビット・ファイ
ルの例外ビットをセットする)ステップを含む。これに
より例外解決において、オリジナル投機例外を発生する
投機命令を逆トレースすることが可能になる。例外追跡
はまた、takenパス外に存在することが判明した投機例
外に関する情報を廃棄する。投機例外解決はtakenパス
内に存在する非投機命令が、その例外ビットがセットさ
れたレジスタからのオペランドを使用するとき、トリガ
される。投機例外解決は例外を発生した例外条件を訂正
するステップと、投機例外を発生する命令の結果に依存
した命令を再実行するステップとを含む。
【0018】このアプローチの利点は従来技術のように
全ての投機命令を再実行するのではなく、a)例外を発
生する命令に依存し、且つb)takenパス内に存在する
投機命令だけを再実行することである。このアプローチ
はCPU処理時間を節約する。
全ての投機命令を再実行するのではなく、a)例外を発
生する命令に依存し、且つb)takenパス内に存在する
投機命令だけを再実行することである。このアプローチ
はCPU処理時間を節約する。
【0019】
【発明の実施の形態】VLIWアーキテクチャ及び本発
明の概要: 図1及び図2を参照すると、VLIWコンパイラ108
がユーザ・プログラム104をVLIW106にコンパ
イルする動作が示される。VLIWはその名が示す通
り、高度に並列な水平マイクロコード(例えば500ビ
ット長乃至2000ビット長)として実現される。図2
に示されるように、VLIW106は、各々がVLIW
データ・プロセッサまたはマシン102内の異なる資源
(例えば算術演算論理ユニット(ALU)、分岐ユニッ
トなど)を制御する多数の縮小命令セット(RISC)
命令を含み、これらはここではパーセル(parcel)とし
ても参照される。従って、単一サイクル内でVLIWマ
シン102は多くのRISC命令に等価な命令を実行す
ることができる。
明の概要: 図1及び図2を参照すると、VLIWコンパイラ108
がユーザ・プログラム104をVLIW106にコンパ
イルする動作が示される。VLIWはその名が示す通
り、高度に並列な水平マイクロコード(例えば500ビ
ット長乃至2000ビット長)として実現される。図2
に示されるように、VLIW106は、各々がVLIW
データ・プロセッサまたはマシン102内の異なる資源
(例えば算術演算論理ユニット(ALU)、分岐ユニッ
トなど)を制御する多数の縮小命令セット(RISC)
命令を含み、これらはここではパーセル(parcel)とし
ても参照される。従って、単一サイクル内でVLIWマ
シン102は多くのRISC命令に等価な命令を実行す
ることができる。
【0020】各RISC命令はオペコード・フィール
ド、第1オペランド・フィールド、第2オペランド・フ
ィールド、及びターゲット・レジスタ番号フィールドを
含む。追加の1ビット・フィールドは、ここでは投機ビ
ット・フィールドまたは単に投機ビットとして参照さ
れ、これは以降で詳述されるように、投機RISC命令
と非投機RISC命令とを区別するために提供される。
ド、第1オペランド・フィールド、第2オペランド・フ
ィールド、及びターゲット・レジスタ番号フィールドを
含む。追加の1ビット・フィールドは、ここでは投機ビ
ット・フィールドまたは単に投機ビットとして参照さ
れ、これは以降で詳述されるように、投機RISC命令
と非投機RISC命令とを区別するために提供される。
【0021】オペレーションにおいて、並列コンパイラ
108は従来の順次アセンブリ・コード(または高級言
語コンパイラからの中間コード)を入力として受取り、
必要に応じて任意の複雑命令を単純なRISC命令に拡
張し、順次コードのRISCバージョンを提供する。そ
して、高度コンパイル技法(例えば好適な1コンパイル
技法が、T.Nakatani及びK.Ebciogluによる"Using a L
ookahead Window in aCompaction Based Parallelizing
Compiler"、Proc.23rd Workshop on Microprogrammin
g and Microarchitecture、IEEE Computer Society Pre
ss、Nov.1990、pp.57-68に述べられている)を用い
て、同時に実行されうるRISC命令及び分岐(これら
はコード内で遠く離れていることもある)のグループ1
09を決定する。並列処理コンパイラ108は次にこう
した各グループ109をVLIWマシン102が単一サ
イクルにおいて実行できるVLIW106内に配置す
る。その結果、ユーザ・プログラム104が並列処理コ
ンパイラ108において実行される再コンパイル・プロ
セスを通じて、ソース・コードの変更を要求すること無
しに高速に実行される。
108は従来の順次アセンブリ・コード(または高級言
語コンパイラからの中間コード)を入力として受取り、
必要に応じて任意の複雑命令を単純なRISC命令に拡
張し、順次コードのRISCバージョンを提供する。そ
して、高度コンパイル技法(例えば好適な1コンパイル
技法が、T.Nakatani及びK.Ebciogluによる"Using a L
ookahead Window in aCompaction Based Parallelizing
Compiler"、Proc.23rd Workshop on Microprogrammin
g and Microarchitecture、IEEE Computer Society Pre
ss、Nov.1990、pp.57-68に述べられている)を用い
て、同時に実行されうるRISC命令及び分岐(これら
はコード内で遠く離れていることもある)のグループ1
09を決定する。並列処理コンパイラ108は次にこう
した各グループ109をVLIWマシン102が単一サ
イクルにおいて実行できるVLIW106内に配置す
る。その結果、ユーザ・プログラム104が並列処理コ
ンパイラ108において実行される再コンパイル・プロ
セスを通じて、ソース・コードの変更を要求すること無
しに高速に実行される。
【0022】VLIWコンパイラ108はVLIWマシ
ン102の一部であっても、別のデータ・プロセッサで
あっても良い。VLIWコンパイラ108の構造及びオ
ペレーションの詳細は本発明の一部を形成しないので、
ここでは詳しく述べないことにする。
ン102の一部であっても、別のデータ・プロセッサで
あっても良い。VLIWコンパイラ108の構造及びオ
ペレーションの詳細は本発明の一部を形成しないので、
ここでは詳しく述べないことにする。
【0023】投機命令による例外を処理するために、V
LIWマシン102は、余分ビット(レジスタ103が
通常、32ビット長と仮定すると33番目のビット)を
有するレジスタ(図1ではレジスタ103として一般に
示される)を有する。この点については、K.Ebcioglu
による"Some Design Ideas for VLIW Architecture for
Sequential-Natured Software"、Proc.IFIPWG10.3 W
orking Conf.on Parallel Processing、N.Holland、1
988、pp.3-21を参照されたい。
LIWマシン102は、余分ビット(レジスタ103が
通常、32ビット長と仮定すると33番目のビット)を
有するレジスタ(図1ではレジスタ103として一般に
示される)を有する。この点については、K.Ebcioglu
による"Some Design Ideas for VLIW Architecture for
Sequential-Natured Software"、Proc.IFIPWG10.3 W
orking Conf.on Parallel Processing、N.Holland、1
988、pp.3-21を参照されたい。
【0024】従って、図2では、VLIW命令106の
パーセル内で使用される各RISC命令が、投機及び非
投機バージョンを有する。すなわち、パーセル内の余分
ビット(投機ビット)がこのRISC命令が投機的か否
かを示す。
パーセル内で使用される各RISC命令が、投機及び非
投機バージョンを有する。すなわち、パーセル内の余分
ビット(投機ビット)がこのRISC命令が投機的か否
かを示す。
【0025】RISC命令の投機ビットがオンの場合、
この命令はVLIWマシン102内において、この命令
がオリジナル順次コード内で実行されるか否かを決定す
るVLIW106内の条件付きジャンプの結果を知る以
前に実行される。またレジスタ103の例外ビットがセ
ットされているときには、投機命令がエラーを発生した
ことを示す(例えばオーバフロー、無効アドレスからの
ロードなど)。
この命令はVLIWマシン102内において、この命令
がオリジナル順次コード内で実行されるか否かを決定す
るVLIW106内の条件付きジャンプの結果を知る以
前に実行される。またレジスタ103の例外ビットがセ
ットされているときには、投機命令がエラーを発生した
ことを示す(例えばオーバフロー、無効アドレスからの
ロードなど)。
【0026】投機例外の処理: 図3は、本発明によるデータ処理システムのブロック図
である。CPUオーバヘッドが次のステップにより最小
化される。すなわち、a)例外解決の間の後処理に備
え、投機例外を追跡するステップ(202)(これらの
投機命令のアドレスを指し示すステップを含む)、及び
b)これらの例外の原因を訂正し(206)、takenパ
ス内に存在することが知れる命令を再実行する(20
8)ことにより、これらの例外を解決するステップ(2
04)である。
である。CPUオーバヘッドが次のステップにより最小
化される。すなわち、a)例外解決の間の後処理に備
え、投機例外を追跡するステップ(202)(これらの
投機命令のアドレスを指し示すステップを含む)、及び
b)これらの例外の原因を訂正し(206)、takenパ
ス内に存在することが知れる命令を再実行する(20
8)ことにより、これらの例外を解決するステップ(2
04)である。
【0027】投機例外の追跡は、例外条件213に応答
してセットされる例外ビットを使用する2つの要素を有
する。例外条件は多様に生成され、例えば例外条件が算
術演算論理ユニット(ALU)209の演算から生じた
りする。
してセットされる例外ビットを使用する2つの要素を有
する。例外条件は多様に生成され、例えば例外条件が算
術演算論理ユニット(ALU)209の演算から生じた
りする。
【0028】第1の要素はオリジナル投機例外の追跡で
あり、この例外は、例外ビットがセットされていないオ
ペランドを有する投機命令が例外条件に遭遇するときに
発生する。要するにこの追跡は、i)マルチプレクサ
(MUX)を介して提供される命令アドレスにより提供
される投機命令のアドレスを指し示すように、レジスタ
・ファイル210内のターゲット・レジスタをセットす
るステップ、ii)ALU209からの例外条件213
に応答して、ターゲット・レジスタに関連付けられる例
外ビット・ファイル212内の例外ビットをセットする
ステップ、iii)余分レジスタ・ファイル214内の
余分レジスタに投機命令のオペランドを記憶し、余分例
外ビット・ファイル216内に例外ビット(これはオリ
ジナル投機例外に対してはセットされないが、2次投機
例外に対してはセットされる。すなわち、投機例外を発
生する投機命令の結果を使用する)を記憶するステップ
を含む。命令解読論理(命令デコーダ)201からのオ
ペランド選択信号線217は、レジスタ・ファイル21
0及び余分レジスタ・ファイル214の両方に信号を提
供する。ブロック218内の論理はオリジナル投機例外
と2次投機例外とを区別する。
あり、この例外は、例外ビットがセットされていないオ
ペランドを有する投機命令が例外条件に遭遇するときに
発生する。要するにこの追跡は、i)マルチプレクサ
(MUX)を介して提供される命令アドレスにより提供
される投機命令のアドレスを指し示すように、レジスタ
・ファイル210内のターゲット・レジスタをセットす
るステップ、ii)ALU209からの例外条件213
に応答して、ターゲット・レジスタに関連付けられる例
外ビット・ファイル212内の例外ビットをセットする
ステップ、iii)余分レジスタ・ファイル214内の
余分レジスタに投機命令のオペランドを記憶し、余分例
外ビット・ファイル216内に例外ビット(これはオリ
ジナル投機例外に対してはセットされないが、2次投機
例外に対してはセットされる。すなわち、投機例外を発
生する投機命令の結果を使用する)を記憶するステップ
を含む。命令解読論理(命令デコーダ)201からのオ
ペランド選択信号線217は、レジスタ・ファイル21
0及び余分レジスタ・ファイル214の両方に信号を提
供する。ブロック218内の論理はオリジナル投機例外
と2次投機例外とを区別する。
【0029】第2の要素は、投機命令が上述のオリジナ
ル投機例外の場合のように、例外ビットがセットされた
レジスタを使用しようとするとき、2次投機例外が生成
される。例外追跡が、i)上述のように投機命令アドレ
スを指し示すように、レジスタ・ファイル210内のタ
ーゲット・レジスタをセットするステップ、ii)例外
条件213に応答して、余分レジスタの例外ビット21
2をセットするステップ、及びiii)レジスタ選択信
号線217により、余分レジスタ・ファイル214の余
分レジスタの内容を投機命令のオペランドのレジスタ番
号(レジスタ内容ではなく)にセットする(そして余分
例外ビット・ファイル216の例外ビットをセットす
る)ステップを含む。これにより例外解決204におい
て、オリジナル投機例外を発生する投機命令を逆トレー
スすることが可能になる。
ル投機例外の場合のように、例外ビットがセットされた
レジスタを使用しようとするとき、2次投機例外が生成
される。例外追跡が、i)上述のように投機命令アドレ
スを指し示すように、レジスタ・ファイル210内のタ
ーゲット・レジスタをセットするステップ、ii)例外
条件213に応答して、余分レジスタの例外ビット21
2をセットするステップ、及びiii)レジスタ選択信
号線217により、余分レジスタ・ファイル214の余
分レジスタの内容を投機命令のオペランドのレジスタ番
号(レジスタ内容ではなく)にセットする(そして余分
例外ビット・ファイル216の例外ビットをセットす
る)ステップを含む。これにより例外解決204におい
て、オリジナル投機例外を発生する投機命令を逆トレー
スすることが可能になる。
【0030】投機例外解決は、takenパス内に存在する
非投機命令が例外ビットがセットされたレジスタからの
オペランドを使用するとき、トリガされる。例外条件及
び非投機命令の存在は例外解決ブロック204に例外信
号220を生成する。投機例外解決204は余分レジス
タ及び余分例外ビットからの出力信号に応答して、例外
を発生した例外条件を訂正するステップ206と、投機
例外を発生する命令の結果に依存した命令を再実行する
ステップ208とを含む。
非投機命令が例外ビットがセットされたレジスタからの
オペランドを使用するとき、トリガされる。例外条件及
び非投機命令の存在は例外解決ブロック204に例外信
号220を生成する。投機例外解決204は余分レジス
タ及び余分例外ビットからの出力信号に応答して、例外
を発生した例外条件を訂正するステップ206と、投機
例外を発生する命令の結果に依存した命令を再実行する
ステップ208とを含む。
【0031】コンパイラ・サポート: 図3では、並列処理コンパイラ108が投機/非投機ビ
ットを次のように利用する。最初に、ユーザ・プログラ
ム104内の全ての命令が非投機的とマークされる(ス
テップ302)。並列処理の間、ある命令がこの命令が
オリジナル・コード内で実行されるか否かを決定する条
件付きジャンプ命令の上に移動されるとき、この命令は
コンパイラ304により投機的とマークされる(ある命
令が条件付き分岐の両方のパス上で明確に実行されない
場合、この条件付き分岐は順次コード内でその命令が実
行されるか否かを決定する)。これが例外ビット機構を
最も単純に使用するために必要とされることである。
ットを次のように利用する。最初に、ユーザ・プログラ
ム104内の全ての命令が非投機的とマークされる(ス
テップ302)。並列処理の間、ある命令がこの命令が
オリジナル・コード内で実行されるか否かを決定する条
件付きジャンプ命令の上に移動されるとき、この命令は
コンパイラ304により投機的とマークされる(ある命
令が条件付き分岐の両方のパス上で明確に実行されない
場合、この条件付き分岐は順次コード内でその命令が実
行されるか否かを決定する)。これが例外ビット機構を
最も単純に使用するために必要とされることである。
【0032】オリジナル・プログラム内で発生する全て
の例外が、並列プログラム内で検出されるように望まれ
る場合には、並列処理コンパイラ108(図1)は、必
要に応じて新たな非投機命令を導入することにより(通
常、これはストア命令及び条件付き分岐命令が投機的で
ないために常に必要ではない)、各投機命令の結果が、
非投機命令により直接的または間接的に使用されること
を保証しなければならない。
の例外が、並列プログラム内で検出されるように望まれ
る場合には、並列処理コンパイラ108(図1)は、必
要に応じて新たな非投機命令を導入することにより(通
常、これはストア命令及び条件付き分岐命令が投機的で
ないために常に必要ではない)、各投機命令の結果が、
非投機命令により直接的または間接的に使用されること
を保証しなければならない。
【0033】ここで述べられる本発明はまた、不要な割
込みを処理する問題を解決する。本発明の教示によれ
ば、例外がオリジナル順次プログラム内で発生する場合
に限り、例外がVLIW106内で処理される。
込みを処理する問題を解決する。本発明の教示によれ
ば、例外がオリジナル順次プログラム内で発生する場合
に限り、例外がVLIW106内で処理される。
【0034】投機例外ハードウェア機構−追跡(Tracki
ng): 前セクションで述べたように、投機例外は例外を発生す
る命令の結果を受信したレジスタ(いわゆるターゲッ
ト)に関連付けられる。この意味で、用語"レジスタ"は
通常の"汎用(general purpose)"レジスタを越える範
囲を含み、例外ビットをセットされる任意のレジスタを
意味する。従って、同一のレジスタが一時に複数の投機
命令のターゲットで有り得ないようにコンパイラが保証
すれば、例外発生の記録がそのレジスタに関連付けられ
る。このことは、レジスタ結果が非投機命令により消費
される以前に、或いは投機命令がtakenパス外に存在す
るためにレジスタ結果が不要と判明するまでそのレジス
タが再使用されえないことを意味する。
ng): 前セクションで述べたように、投機例外は例外を発生す
る命令の結果を受信したレジスタ(いわゆるターゲッ
ト)に関連付けられる。この意味で、用語"レジスタ"は
通常の"汎用(general purpose)"レジスタを越える範
囲を含み、例外ビットをセットされる任意のレジスタを
意味する。従って、同一のレジスタが一時に複数の投機
命令のターゲットで有り得ないようにコンパイラが保証
すれば、例外発生の記録がそのレジスタに関連付けられ
る。このことは、レジスタ結果が非投機命令により消費
される以前に、或いは投機命令がtakenパス外に存在す
るためにレジスタ結果が不要と判明するまでそのレジス
タが再使用されえないことを意味する。
【0035】レジスタ・サイズは32ビットと仮定さ
れ、余分ビット(33番目のビット)が投機例外に対応
するフラグとして機能する。しかしながら、より大きな
または小さなレジスタ・サイズについても、本発明の範
囲に含まれ、一般的にn+1ビット目が例外ビットの役
割を果たし、nビットがレジスタに対応する。
れ、余分ビット(33番目のビット)が投機例外に対応
するフラグとして機能する。しかしながら、より大きな
または小さなレジスタ・サイズについても、本発明の範
囲に含まれ、一般的にn+1ビット目が例外ビットの役
割を果たし、nビットがレジスタに対応する。
【0036】本発明では、例外を発生する命令のアドレ
スをターゲット・レジスタに保管し、その例外ビットを
セットすることにより投機例外がターゲット・レジスタ
に関連付けられる。代替方法としては命令解読の後に命
令自身を保管する。これは命令を保持するための余分な
記憶を必要とするが、命令がtakenパス内に存在するこ
とが判明すれば、その実行を高速化する。また、これは
キャッシュ・ミスを回避する。なぜなら、命令を含むラ
インが2度目にアクセスされる必要がないからである。
スをターゲット・レジスタに保管し、その例外ビットを
セットすることにより投機例外がターゲット・レジスタ
に関連付けられる。代替方法としては命令解読の後に命
令自身を保管する。これは命令を保持するための余分な
記憶を必要とするが、命令がtakenパス内に存在するこ
とが判明すれば、その実行を高速化する。また、これは
キャッシュ・ミスを回避する。なぜなら、命令を含むラ
インが2度目にアクセスされる必要がないからである。
【0037】投機命令処理には、2つの残りの要素が含
まれる。それらはa)ハードウェアにより完全に実現さ
れる例外追跡、及びb)主としてソフトウェアにより制
御される例外解決である。
まれる。それらはa)ハードウェアにより完全に実現さ
れる例外追跡、及びb)主としてソフトウェアにより制
御される例外解決である。
【0038】例外追跡は投機例外の発生時にそれらを処
理し、2つの場合を識別する。第1の場合はオリジナル
投機例外に関し、第2の場合は、投機命令がオペランド
として例外ビットをセットされた値を使用しようとする
状況に関し、ここではこれは2次投機例外として参照さ
れる。例外追跡はまたtakenパス外に存在することが判
明した投機例外に関連する情報を廃棄する役割もする。
理し、2つの場合を識別する。第1の場合はオリジナル
投機例外に関し、第2の場合は、投機命令がオペランド
として例外ビットをセットされた値を使用しようとする
状況に関し、ここではこれは2次投機例外として参照さ
れる。例外追跡はまたtakenパス外に存在することが判
明した投機例外に関連する情報を廃棄する役割もする。
【0039】例外解決要素は、非投機命令がオペランド
として、例外ビットがセットされたレジスタを使用する
ときトリガされる。ここではこの時点において、その例
外ビットをセットした投機例外が"具体化する"(materi
alize)と表現することにする。例外の具体化及び解決
は、主としてソフトウェア・サポートを取り扱う次のセ
クションの主題である。このセクションの残りの部分で
は、例外追跡のためのハードウェア・サポートを取り扱
う。
として、例外ビットがセットされたレジスタを使用する
ときトリガされる。ここではこの時点において、その例
外ビットをセットした投機例外が"具体化する"(materi
alize)と表現することにする。例外の具体化及び解決
は、主としてソフトウェア・サポートを取り扱う次のセ
クションの主題である。このセクションの残りの部分で
は、例外追跡のためのハードウェア・サポートを取り扱
う。
【0040】1)オリジナル投機例外追跡 このセクションは、正規の例外を発生する投機命令に関
する。ここで正規の例外とは、例外ビットがセットされ
たレジスタ値を使用する試みにより発生するのではない
例外をさす。任意の命令オペランドがレジスタ・ファイ
ル210に含まれる場合、それらの値が余分レジスタ・
ファイル214の対応する余分レジスタにコピーされ
る。その際、例外ビットはリセットされる。余分レジス
タが使用されない(対応するオペランドがレジスタ内に
存在しないか、命令がそれを要求しない)場合には、そ
の例外ビットがリセットされ、その値が未定義状態のま
ま維持される。レジスタ・ファイル210の値のコピー
はレジスタ・ファイル210から、レジスタ・ファイル
・ポートからの追加のデータ・パスを介して、余分レジ
スタ・ファイル214に直接実行される。
する。ここで正規の例外とは、例外ビットがセットされ
たレジスタ値を使用する試みにより発生するのではない
例外をさす。任意の命令オペランドがレジスタ・ファイ
ル210に含まれる場合、それらの値が余分レジスタ・
ファイル214の対応する余分レジスタにコピーされ
る。その際、例外ビットはリセットされる。余分レジス
タが使用されない(対応するオペランドがレジスタ内に
存在しないか、命令がそれを要求しない)場合には、そ
の例外ビットがリセットされ、その値が未定義状態のま
ま維持される。レジスタ・ファイル210の値のコピー
はレジスタ・ファイル210から、レジスタ・ファイル
・ポートからの追加のデータ・パスを介して、余分レジ
スタ・ファイル214に直接実行される。
【0041】図5を参照しながら、オリジナル投機例外
についてより詳細に述べることにする(図中、丸印は命
令解読論理201からの入力であり、4角印は図3の例
外解決204からの入出力である)。このタイプの例外
は、例外ビットがセットされていないオペランドを有す
る投機命令が、オーバフローやページ不在などの例外条
件に遭遇するときに発生する。これが発生すると、例外
信号線401がセットされ、ORゲート402の出力が
真となる。例外を発生する命令は投機的であるので、A
NDゲート404への下方の入力403が偽となり、A
NDゲート404から例外信号220は出力されない。
これはこの時点において、例外の直接処理が発生しない
ことを意味する。
についてより詳細に述べることにする(図中、丸印は命
令解読論理201からの入力であり、4角印は図3の例
外解決204からの入出力である)。このタイプの例外
は、例外ビットがセットされていないオペランドを有す
る投機命令が、オーバフローやページ不在などの例外条
件に遭遇するときに発生する。これが発生すると、例外
信号線401がセットされ、ORゲート402の出力が
真となる。例外を発生する命令は投機的であるので、A
NDゲート404への下方の入力403が偽となり、A
NDゲート404から例外信号220は出力されない。
これはこの時点において、例外の直接処理が発生しない
ことを意味する。
【0042】後処理に備え例外を追跡するために、信号
線405が必要に応じて例外信号を例外ビット・レジス
タ406の入力ポートに伝達する。例外ビット・レジス
タ406及びレジスタ・ファイル417の書込み選択ポ
ートがターゲット選択信号線407からの信号により、
例外を発生する投機命令のターゲット・レジスタに対応
するビットを選択する。同時に信号線405は、MUX
410がその右入力の結果信号線412ではなく、その
左入力の命令アドレス信号線411を選択するように、
MUX410を制御する。これにより命令アドレス41
1がターゲット・レジスタ・ファイル417に記憶さ
れ、例外解決の間に例外発生命令を指し示すポインタと
して機能する。
線405が必要に応じて例外信号を例外ビット・レジス
タ406の入力ポートに伝達する。例外ビット・レジス
タ406及びレジスタ・ファイル417の書込み選択ポ
ートがターゲット選択信号線407からの信号により、
例外を発生する投機命令のターゲット・レジスタに対応
するビットを選択する。同時に信号線405は、MUX
410がその右入力の結果信号線412ではなく、その
左入力の命令アドレス信号線411を選択するように、
MUX410を制御する。これにより命令アドレス41
1がターゲット・レジスタ・ファイル417に記憶さ
れ、例外解決の間に例外発生命令を指し示すポインタと
して機能する。
【0043】例外ビット・レジスタ406からの"左出
力"及び"右出力"ポート(1ビット幅の2度読出し/1
度書込みファイル)は、命令の左右のオペランドに対応
する例外ビットを供給し、これらはそれぞれ左レジスタ
選択信号線409及び右レジスタ選択信号線408によ
り選択される。オペランドはそれらの例外ビットがセッ
トされていないと仮定したので、これらの出力は両方と
も偽であり、従って信号線415は偽となる。"2度読
出し/1度書込み"として指定されるファイルにより、
このファイルは2つの読出しポートを通じてデータを出
力すると同時に、1つの書込みポートを通じてデータを
入力できることが意味される。
力"及び"右出力"ポート(1ビット幅の2度読出し/1
度書込みファイル)は、命令の左右のオペランドに対応
する例外ビットを供給し、これらはそれぞれ左レジスタ
選択信号線409及び右レジスタ選択信号線408によ
り選択される。オペランドはそれらの例外ビットがセッ
トされていないと仮定したので、これらの出力は両方と
も偽であり、従って信号線415は偽となる。"2度読
出し/1度書込み"として指定されるファイルにより、
このファイルは2つの読出しポートを通じてデータを出
力すると同時に、1つの書込みポートを通じてデータを
入力できることが意味される。
【0044】信号線405は、左余分レジスタ・ファイ
ル413及び左余分例外ビット・ファイル414の書込
み許可信号としても機能する。信号線415は等価の"
右"レジスタ・ファイル(図示せず)に対しても同様に
機能する。このことは1命令当たり高々2つのオペラン
ドを仮定するが、より多くのオペランドに対応する一般
化は容易に理解される。両ファイルの"書込み選択"ポー
トは、ターゲット選択信号線407からそれらの入力を
受信し、投機例外を発生する命令に対応するレジスタ・
ファイル417内のターゲット・レジスタに記憶される
情報への拡張として機能する。左余分レジスタ・ファイ
ル413(1度読出し/1度書込みファイル)は、その
幅(例えば32ビット)が所与のアーキテクチャのオペ
ランド長により決定され、命令の左オペランドを記憶す
る。左オペランドは信号線415により制御されるMU
X417cにより選択され(上述のように信号線415
は偽)、レジスタ・ファイル417の"左データ出力"ポ
ートにより生成される。レジスタ・ファイル417は2
度読出し/1度書込みファイルであり、その幅(例えば
32ビット)は所与のアーキテクチャのオペランドによ
り決定される。この出力はレジスタ選択信号線409に
より選択される。並行して信号線415の状態が、左余
分例外ビット・ファイル414(1ビット幅の1度読出
し/1度書込みファイル)に記憶される。
ル413及び左余分例外ビット・ファイル414の書込
み許可信号としても機能する。信号線415は等価の"
右"レジスタ・ファイル(図示せず)に対しても同様に
機能する。このことは1命令当たり高々2つのオペラン
ドを仮定するが、より多くのオペランドに対応する一般
化は容易に理解される。両ファイルの"書込み選択"ポー
トは、ターゲット選択信号線407からそれらの入力を
受信し、投機例外を発生する命令に対応するレジスタ・
ファイル417内のターゲット・レジスタに記憶される
情報への拡張として機能する。左余分レジスタ・ファイ
ル413(1度読出し/1度書込みファイル)は、その
幅(例えば32ビット)が所与のアーキテクチャのオペ
ランド長により決定され、命令の左オペランドを記憶す
る。左オペランドは信号線415により制御されるMU
X417cにより選択され(上述のように信号線415
は偽)、レジスタ・ファイル417の"左データ出力"ポ
ートにより生成される。レジスタ・ファイル417は2
度読出し/1度書込みファイルであり、その幅(例えば
32ビット)は所与のアーキテクチャのオペランドによ
り決定される。この出力はレジスタ選択信号線409に
より選択される。並行して信号線415の状態が、左余
分例外ビット・ファイル414(1ビット幅の1度読出
し/1度書込みファイル)に記憶される。
【0045】幾つかのオペランドは、例外を発生する投
機命令の統合部分に相当しない。左余分レジスタ・ファ
イル413の機能は、例外を発生する投機命令の統合部
分に相当しないオペランドに関する十分な情報を記憶す
ることであり、それにより命令がtakenパス内に存在す
ることが判明すると、その命令が再実行される。換言す
ると、命令の一部であるオペランド(命令に含まれるリ
テラル)が、例外解決(後述)の間に再実行される命令
から抽出される。他の入力はレジスタ・ファイル417
の下方のMUX417a及び417bに供給される。こ
れらの入力は命令のリテラル(即値)フィールドから到
来する。従って、命令は2つのオペランドを有しうる
が、それらの一方だけがレジスタから到来しうる(両者
とも存在しない場合もある)。他方のオペランドは命令
解読論理201の制御の下で左右のオペランド選択信号
線を通じて、命令の特定のフィールドから獲得されたり
する。オペランドの他の可能な資源には、レジスタ・フ
ァイルとは別のデータ・プロセッサ内の専用レジスタが
含まれる。
機命令の統合部分に相当しない。左余分レジスタ・ファ
イル413の機能は、例外を発生する投機命令の統合部
分に相当しないオペランドに関する十分な情報を記憶す
ることであり、それにより命令がtakenパス内に存在す
ることが判明すると、その命令が再実行される。換言す
ると、命令の一部であるオペランド(命令に含まれるリ
テラル)が、例外解決(後述)の間に再実行される命令
から抽出される。他の入力はレジスタ・ファイル417
の下方のMUX417a及び417bに供給される。こ
れらの入力は命令のリテラル(即値)フィールドから到
来する。従って、命令は2つのオペランドを有しうる
が、それらの一方だけがレジスタから到来しうる(両者
とも存在しない場合もある)。他方のオペランドは命令
解読論理201の制御の下で左右のオペランド選択信号
線を通じて、命令の特定のフィールドから獲得されたり
する。オペランドの他の可能な資源には、レジスタ・フ
ァイルとは別のデータ・プロセッサ内の専用レジスタが
含まれる。
【0046】2)2次投機例外 投機命令がオペランドとして、例外ビット・レジスタ4
06内の対応する例外ビットがセットされたレジスタ・
ファイル417内のレジスタを使用しようとすると
き、"2次投機例外"が生成される。以降では、少なくと
も左オペランドが例外ビットをセットされているものと
仮定する。投機命令内の左オペランドに対応する例外ビ
ットは、左レジスタ選択信号線409により例外ビット
・ファイル406内で選択される。この例外ビットは例
外ビット・ファイル406の"左出力"ポートに現れ、A
NDゲート418に供給される。ANDゲート418も
また左オペランド使用信号419により制御され、この
信号は、命令が実際にレジスタ・ファイル417内のレ
ジスタ内の左オペランドを使用するとき、真である。2
オペランドを有する命令をサポートするアーキテクチャ
では、1オペランドだけを有したり、オペランドを有さ
ない命令も幾つか存在する。ANDゲート418はこう
した場合に真となり、ORゲート402にその真値が供
給され、信号線405上に真値が生成され、投機例外を
信号で知らせる。
06内の対応する例外ビットがセットされたレジスタ・
ファイル417内のレジスタを使用しようとすると
き、"2次投機例外"が生成される。以降では、少なくと
も左オペランドが例外ビットをセットされているものと
仮定する。投機命令内の左オペランドに対応する例外ビ
ットは、左レジスタ選択信号線409により例外ビット
・ファイル406内で選択される。この例外ビットは例
外ビット・ファイル406の"左出力"ポートに現れ、A
NDゲート418に供給される。ANDゲート418も
また左オペランド使用信号419により制御され、この
信号は、命令が実際にレジスタ・ファイル417内のレ
ジスタ内の左オペランドを使用するとき、真である。2
オペランドを有する命令をサポートするアーキテクチャ
では、1オペランドだけを有したり、オペランドを有さ
ない命令も幾つか存在する。ANDゲート418はこう
した場合に真となり、ORゲート402にその真値が供
給され、信号線405上に真値が生成され、投機例外を
信号で知らせる。
【0047】レジスタ・ファイル417内のターゲット
・レジスタへの命令アドレスの保管、及び例外ビット・
ファイル406内のその例外ビットのマーキングの両方
は、オリジナル例外の場合同様に進行する。しかしなが
ら、この場合には、左余分レジスタ・ファイル413及
び左余分例外ビット・ファイル414の内容は、オリジ
ナル投機例外の場合とは異なる。左余分レジスタ・ファ
イル413は左オペランド自体の代わりに、オペランド
を保持するように試行されたレジスタの番号を受信す
る。コンパイラは1ターゲット・レジスタ当たり高々1
つの投機例外を保証すると仮定するので、レジスタ番号
の指定は解決が要求される場合に、オリジナル投機例外
を発生する命令を逆トレースすることを可能にする。レ
ジスタ番号は左レジスタ選択信号線409により決定さ
れ、(真値を有する)信号線415により制御されるM
UX417cを介して供給される。信号線415はま
た、左余分例外ビット・ファイル414内の例外ビット
をセットする役割をする。レジスタの内容ではなくレジ
スタ番号の記録は、2つの余分レジスタ・ファイルの各
々の入力ポートにマルチプレクサ417cを要求する。
マルチプレクサ417cはターゲット・レジスタ・ファ
イル417から内容を供給され、命令解読論理201か
らレジスタ番号を供給される。
・レジスタへの命令アドレスの保管、及び例外ビット・
ファイル406内のその例外ビットのマーキングの両方
は、オリジナル例外の場合同様に進行する。しかしなが
ら、この場合には、左余分レジスタ・ファイル413及
び左余分例外ビット・ファイル414の内容は、オリジ
ナル投機例外の場合とは異なる。左余分レジスタ・ファ
イル413は左オペランド自体の代わりに、オペランド
を保持するように試行されたレジスタの番号を受信す
る。コンパイラは1ターゲット・レジスタ当たり高々1
つの投機例外を保証すると仮定するので、レジスタ番号
の指定は解決が要求される場合に、オリジナル投機例外
を発生する命令を逆トレースすることを可能にする。レ
ジスタ番号は左レジスタ選択信号線409により決定さ
れ、(真値を有する)信号線415により制御されるM
UX417cを介して供給される。信号線415はま
た、左余分例外ビット・ファイル414内の例外ビット
をセットする役割をする。レジスタの内容ではなくレジ
スタ番号の記録は、2つの余分レジスタ・ファイルの各
々の入力ポートにマルチプレクサ417cを要求する。
マルチプレクサ417cはターゲット・レジスタ・ファ
イル417から内容を供給され、命令解読論理201か
らレジスタ番号を供給される。
【0048】明らかに、命令アドレスはラッチされて保
存され(VLIW命令106(図1)内のその命令の位
置を含む)、投機例外が発生するとき、レジスタ・ファ
イル417にコピーされうる。このプロセスの完了時に
VLIW106の実行が通常通りに再開される。
存され(VLIW命令106(図1)内のその命令の位
置を含む)、投機例外が発生するとき、レジスタ・ファ
イル417にコピーされうる。このプロセスの完了時に
VLIW106の実行が通常通りに再開される。
【0049】3)投機例外の廃棄 takenパス外に存在することが判明した投機命令は、そ
れらの実行の間の例外の結果として、例外ビット406
がセットされたレジスタ・ファイル417を残すことが
できる。従って、非投機命令または例外を発生しない投
機命令により、結果がレジスタに記憶される度に、その
レジスタに対応する例外ビットがリセットされる。有効
状態(live)のレジスタを追跡することにより、並列処
理コンパイラ108(図1)は投機値及び非投機値が混
合しないように保証し、それにより外来の例外がユーザ
・プログラム104(図1)内で発生することはない。
れらの実行の間の例外の結果として、例外ビット406
がセットされたレジスタ・ファイル417を残すことが
できる。従って、非投機命令または例外を発生しない投
機命令により、結果がレジスタに記憶される度に、その
レジスタに対応する例外ビットがリセットされる。有効
状態(live)のレジスタを追跡することにより、並列処
理コンパイラ108(図1)は投機値及び非投機値が混
合しないように保証し、それにより外来の例外がユーザ
・プログラム104(図1)内で発生することはない。
【0050】次に述べる問題がこの技法では存在しうる
ことに注意されたい。例えばオリジナル(順次)プログ
ラムが、(バグのために)初期化されていないレジスタ
を使用するかも知れない。そして投機命令がそのレジス
タをセットし、従ってレジスタがある値を含んだり、投
機例外によりその例外ビットがセットされる可能性があ
る。いずれの場合にも、プログラムの振舞いはオリジナ
ル・バージョンとは合致しない。これを防止するために
初期化のチェック、または投機値を含むレジスタ(の少
なくとも投機ビット)の明示的なリセットが、レジスタ
が有効状態に維持されるプログラム・セグメントの終り
に挿入されうる(次セクション参照)。
ことに注意されたい。例えばオリジナル(順次)プログ
ラムが、(バグのために)初期化されていないレジスタ
を使用するかも知れない。そして投機命令がそのレジス
タをセットし、従ってレジスタがある値を含んだり、投
機例外によりその例外ビットがセットされる可能性があ
る。いずれの場合にも、プログラムの振舞いはオリジナ
ル・バージョンとは合致しない。これを防止するために
初期化のチェック、または投機値を含むレジスタ(の少
なくとも投機ビット)の明示的なリセットが、レジスタ
が有効状態に維持されるプログラム・セグメントの終り
に挿入されうる(次セクション参照)。
【0051】例: 表1に示される命令シーケンス(ほとんどが投機命令)
を考えて見よう。説明の都合上、命令は個々に示される
が(1ライン当たり1命令)、VLIW環境では、これ
らは1VLIW命令当たり複数命令にグループ化され
る。
を考えて見よう。説明の都合上、命令は個々に示される
が(1ライン当たり1命令)、VLIW環境では、これ
らは1VLIW命令当たり複数命令にグループ化され
る。
【表1】 . : 100 LOAD R4、0(R5) S 101 LOAD R6、0(R3) S 102 LOAD R1、8(R4) S 103 LOAD R2、12(R6) S 104 ADD R1、R2、R7 S 105 MULT R1、R8、R9 S 106 ADD R9、R9、R10 S . : 200 STORE R7、8(R11) N . :
【0052】表1は命令のサンプル・シーケンスを含
む。各命令は投機的である場合、"S"によりフラグ付け
され、非投機的である場合、"N"によりフラグ付けされ
る(これは命令内の投機ビットの値により表現され
る)。LOAD命令は右オペランドのアドレスによりメモリ
をアクセスし、その内容を左(ターゲット)レジスタに
ロードする(STORE命令は反対の機能を実行する)。ADD
及びMULT命令は入力として第1及び第2(左右の)オペ
ランドを使用し、結果を第3の(ターゲット)レジスタ
に記憶する。
む。各命令は投機的である場合、"S"によりフラグ付け
され、非投機的である場合、"N"によりフラグ付けされ
る(これは命令内の投機ビットの値により表現され
る)。LOAD命令は右オペランドのアドレスによりメモリ
をアクセスし、その内容を左(ターゲット)レジスタに
ロードする(STORE命令は反対の機能を実行する)。ADD
及びMULT命令は入力として第1及び第2(左右の)オペ
ランドを使用し、結果を第3の(ターゲット)レジスタ
に記憶する。
【0053】レジスタR5及びR3が例えば2000及
び30000などの、メモリ内に存在しないページ・ア
ドレスを含むと仮定すると、命令100及び101内で
のそれらの使用が各々ページ不在例外を発生する。他の
関連レジスタはR8及びR11であり、これらはそれら
の例外ビットがリセットされており(これらは例外を発
生した投機命令のターゲットではない)、それぞれ23
4及び10000を含むものとする(アドレス1000
0を含むページがメモリ内に存在すると仮定する)。実
行が非投機命令である命令200に達すると投機例外が
具体化する。例外が解決される以前に、関連レジスタの
内容が表2にリストされる。各行は"正規(regular)"
レジスタ417、及び対応する("左"及び"右")余分レ
ジスタ413の内容、更に前記それぞれのレジスタに対
応する例外ビット406及び414を示す。表中、I-nn
n入力はシーケンス内の命令nnnのアドレスを記号化す
る。
び30000などの、メモリ内に存在しないページ・ア
ドレスを含むと仮定すると、命令100及び101内で
のそれらの使用が各々ページ不在例外を発生する。他の
関連レジスタはR8及びR11であり、これらはそれら
の例外ビットがリセットされており(これらは例外を発
生した投機命令のターゲットではない)、それぞれ23
4及び10000を含むものとする(アドレス1000
0を含むページがメモリ内に存在すると仮定する)。実
行が非投機命令である命令200に達すると投機例外が
具体化する。例外が解決される以前に、関連レジスタの
内容が表2にリストされる。各行は"正規(regular)"
レジスタ417、及び対応する("左"及び"右")余分レ
ジスタ413の内容、更に前記それぞれのレジスタに対
応する例外ビット406及び414を示す。表中、I-nn
n入力はシーケンス内の命令nnnのアドレスを記号化す
る。
【表2】
【0054】表2は、正規レジスタ及び余分レジスタの
内容及びフラグを示す。中央の3つの列は右オペランド
に対応するファイル417/406、413/414、
及び413/414に等価なファイルのロケーションに
対応する。状態は(正規)レジスタR1、R2、R3、
R4、R6、R7、R8、R9及びR10の投機例外を
反映する。命令200の実行は例外をR7上で具体化
し、更にR1、R2、R4及びR6上では間接的に具体
化する。
内容及びフラグを示す。中央の3つの列は右オペランド
に対応するファイル417/406、413/414、
及び413/414に等価なファイルのロケーションに
対応する。状態は(正規)レジスタR1、R2、R3、
R4、R6、R7、R8、R9及びR10の投機例外を
反映する。命令200の実行は例外をR7上で具体化
し、更にR1、R2、R4及びR6上では間接的に具体
化する。
【0055】投機例外の具体化及び解決: 非投機命令が、その例外ビットがセットされたオペラン
ド(レジスタ)に遭遇するとき、その例外ビットをセッ
トした投機例外が具体化したと表現される。この時、制
御が表3に示される投機例外解決機構に渡される。この
機構は、a)例外の原因を解決し、b)例外に依存し且
つtakenパス内に存在すると判断された投機命令を再実
行しようとする。例外原因の解決は投機例外を発生した
原因を何とか訂正する特定のアクションを実行すること
を意味する。例えば例外がメモリ内に現在存在しないデ
ータをアドレス指定することにより生じるページ不在の
場合、原因の解決にはデータを含むページをメモリに転
送するステップ、及びテーブルを更新するステップなど
が含まれる。第2の要素すなわち再実行は、takenパス
内に存在することが知れる命令の実行の繰返しを含み、
これは例外を発生するオペレーションの結果を用いて達
成される。
ド(レジスタ)に遭遇するとき、その例外ビットをセッ
トした投機例外が具体化したと表現される。この時、制
御が表3に示される投機例外解決機構に渡される。この
機構は、a)例外の原因を解決し、b)例外に依存し且
つtakenパス内に存在すると判断された投機命令を再実
行しようとする。例外原因の解決は投機例外を発生した
原因を何とか訂正する特定のアクションを実行すること
を意味する。例えば例外がメモリ内に現在存在しないデ
ータをアドレス指定することにより生じるページ不在の
場合、原因の解決にはデータを含むページをメモリに転
送するステップ、及びテーブルを更新するステップなど
が含まれる。第2の要素すなわち再実行は、takenパス
内に存在することが知れる命令の実行の繰返しを含み、
これは例外を発生するオペレーションの結果を用いて達
成される。
【表3】
【0056】表3は例外解決を実現する帰納的関数の概
要を示す。R[i]が例外を具体化したレジスタである
と仮定しよう。R[i]の内容が例外を解決するために
再実行されるべき(投機)命令を指し示し、R[i]に
対応する余分レジスタXL[i](左)及びXR[i]
(右)が、命令を実行するために要求されるオペランド
を含みうることが思い起こされよう。c(r)及びf
(r)の表記は、それぞれレジスタrの内容及び例外ビ
ットに対応して使用され、ここでrは正規(R)、左余
分(XL)、または右余分(XR)レジスタである。従
って、例外解決(resolve_exception)関数は、その投
機ビットをセットされた非投機命令内の各オペランド・
レジスタに対して1度呼出される。
要を示す。R[i]が例外を具体化したレジスタである
と仮定しよう。R[i]の内容が例外を解決するために
再実行されるべき(投機)命令を指し示し、R[i]に
対応する余分レジスタXL[i](左)及びXR[i]
(右)が、命令を実行するために要求されるオペランド
を含みうることが思い起こされよう。c(r)及びf
(r)の表記は、それぞれレジスタrの内容及び例外ビ
ットに対応して使用され、ここでrは正規(R)、左余
分(XL)、または右余分(XR)レジスタである。従
って、例外解決(resolve_exception)関数は、その投
機ビットをセットされた非投機命令内の各オペランド・
レジスタに対して1度呼出される。
【0057】例: 再度表1に示される命令シーケンス及び表2に示される
レジスタ内容を参考にして、表4を考えてみよう。命令
200の実行は表4に示される呼出しシーケンスを発生
する(字下げは再帰レベルを反映する)。ここでvvv、w
ww、xxx及びyyyは、それぞれ(I-100により)R4に、
(I-102により)R1に、(I-101により)R6に、そし
て(I-103により)R2に割当てられる値を表す。
レジスタ内容を参考にして、表4を考えてみよう。命令
200の実行は表4に示される呼出しシーケンスを発生
する(字下げは再帰レベルを反映する)。ここでvvv、w
ww、xxx及びyyyは、それぞれ(I-100により)R4に、
(I-102により)R1に、(I-101により)R6に、そし
て(I-103により)R2に割当てられる値を表す。
【表4】
【0058】命令200の完了後に、特定の非投機命令
がR10をその右オペランドとして使用すると、呼出し
シーケンスは表5に示されるようになる(zzzは命令I-1
05によりR9に割当てられる値を表す)。
がR10をその右オペランドとして使用すると、呼出し
シーケンスは表5に示されるようになる(zzzは命令I-1
05によりR9に割当てられる値を表す)。
【表5】
【0059】明らかに投機例外解決機構204により、
またはレジスタ417に書込む非投機命令により、レジ
スタ417の例外ビットを(暗黙的に)リセットするこ
とはもとより、余分レジスタの内容及びそれらのフラグ
を読み書きするためのアクセスをサポートするハードウ
ェア(図5に部分的に示される)が要求される。
またはレジスタ417に書込む非投機命令により、レジ
スタ417の例外ビットを(暗黙的に)リセットするこ
とはもとより、余分レジスタの内容及びそれらのフラグ
を読み書きするためのアクセスをサポートするハードウ
ェア(図5に部分的に示される)が要求される。
【0060】投機例外が解決されている間に致命的例外
が発生すると、幾つかのレジスタが特定のプログラムの
順次実行バージョンにおけるそれらの状態に合致しない
可能性がある。例えば上述のように、命令102の再実
行を試行中に致命的例外が発生し、その時R7の投機例
外を解決しているとしよう。この場合、命令100(R
4をセットする)は完了しているが、命令101(R6
をセットする)は解決中である。従ってR6の内容が、
命令102が致命的例外を発生する命令である事実に矛
盾する。それにも関わらずR6の例外ビットはセットさ
れたままであるので、これは保留の投機例外を有する命
令のアドレスを含むように識別される。更に例外ビット
がセットされた全てのレジスタの内容を単にリストする
ことにより、こうした全ての命令のリストが(診断目的
のために)致命的例外に関連付けられるデータの一部と
して提供される。
が発生すると、幾つかのレジスタが特定のプログラムの
順次実行バージョンにおけるそれらの状態に合致しない
可能性がある。例えば上述のように、命令102の再実
行を試行中に致命的例外が発生し、その時R7の投機例
外を解決しているとしよう。この場合、命令100(R
4をセットする)は完了しているが、命令101(R6
をセットする)は解決中である。従ってR6の内容が、
命令102が致命的例外を発生する命令である事実に矛
盾する。それにも関わらずR6の例外ビットはセットさ
れたままであるので、これは保留の投機例外を有する命
令のアドレスを含むように識別される。更に例外ビット
がセットされた全てのレジスタの内容を単にリストする
ことにより、こうした全ての命令のリストが(診断目的
のために)致命的例外に関連付けられるデータの一部と
して提供される。
【0061】コンパイラ・サポート: 前セクションで既に述べたように、並行処理コンパイラ
108(または投機命令を作成するためにどのようなプ
ログラムが使用されようと)は、投機命令により使用さ
れるレジスタ413または417を追跡しなければなら
ない。従って、プログラムのどの時点においても、複数
のこうした命令が同一のレジスタ413または417を
その結果のターゲットとして有することはない。換言す
ると、投機命令によりセットされるレジスタ413また
は417は、その値が非投機命令により消費されるか、
投機命令がtakenパス外に存在することが判明し、この
値がもはや必要とされないと判断されるまで再使用され
るべきではない。前記第1の場合、すなわち非投機命令
がそのオペランドとして、投機命令によりセットされる
レジスタ413または417の内容を使用する場合で
は、コンパイラ108がそのレジスタ413または41
7を"有効状態(live)"に維持し、他の命令によるその
セットを防止する。
108(または投機命令を作成するためにどのようなプ
ログラムが使用されようと)は、投機命令により使用さ
れるレジスタ413または417を追跡しなければなら
ない。従って、プログラムのどの時点においても、複数
のこうした命令が同一のレジスタ413または417を
その結果のターゲットとして有することはない。換言す
ると、投機命令によりセットされるレジスタ413また
は417は、その値が非投機命令により消費されるか、
投機命令がtakenパス外に存在することが判明し、この
値がもはや必要とされないと判断されるまで再使用され
るべきではない。前記第1の場合、すなわち非投機命令
がそのオペランドとして、投機命令によりセットされる
レジスタ413または417の内容を使用する場合で
は、コンパイラ108がそのレジスタ413または41
7を"有効状態(live)"に維持し、他の命令によるその
セットを防止する。
【0062】第2の場合をカバーするために、並列処理
コンパイラ108は投機パスの終りにダミー命令を導入
する。このダミー命令は投機命令によりセットされる全
てのレジスタ413または417をオペランドとして使
用する。しかしながら、これらのレジスタは非投機命令
によってはオペランドとして使用されない。これらのレ
ジスタ413、417が、それらがtakenパス外に存在
するか否かが判断される時点まで"有効状態"に維持され
る理由は、それらが投機命令のオペランドとして機能
し、それらがtakenパスの一部であると判断されるとき
に、それら自体が解決されるべき投機例外を含みうるか
らである。
コンパイラ108は投機パスの終りにダミー命令を導入
する。このダミー命令は投機命令によりセットされる全
てのレジスタ413または417をオペランドとして使
用する。しかしながら、これらのレジスタは非投機命令
によってはオペランドとして使用されない。これらのレ
ジスタ413、417が、それらがtakenパス外に存在
するか否かが判断される時点まで"有効状態"に維持され
る理由は、それらが投機命令のオペランドとして機能
し、それらがtakenパスの一部であると判断されるとき
に、それら自体が解決されるべき投機例外を含みうるか
らである。
【0063】上記アプローチの使用において、レジスタ
413、417がオリジナル・プログラム内で初期化さ
れないために、投機命令によりセットされるレジスタ4
13、417がそれらが適切に初期化される以前に、非
投機命令により続いて使用される可能性がある。これは
外来例外を発生しうることになり(レジスタ413、4
17がその例外ビットをセットされている場合)、これ
が実際にレジスタ413、417を初期化し損なった場
合の結果となる。この状況を回避するために、レジスタ
413、417の投機ビットをリセットする命令(任意
選択的にその値を"未定義(undefined)"にセットす
る)が、投機命令によりセットされるレジスタ413、
417を"有効状態"に維持するダミー命令の代わりに使
用されうる。
413、417がオリジナル・プログラム内で初期化さ
れないために、投機命令によりセットされるレジスタ4
13、417がそれらが適切に初期化される以前に、非
投機命令により続いて使用される可能性がある。これは
外来例外を発生しうることになり(レジスタ413、4
17がその例外ビットをセットされている場合)、これ
が実際にレジスタ413、417を初期化し損なった場
合の結果となる。この状況を回避するために、レジスタ
413、417の投機ビットをリセットする命令(任意
選択的にその値を"未定義(undefined)"にセットす
る)が、投機命令によりセットされるレジスタ413、
417を"有効状態"に維持するダミー命令の代わりに使
用されうる。
【0064】また、投機例外と特定のタスクまたはタス
ク・セグメントの例外の許可/禁止との関係も考慮され
るべきである。単純なアプローチでは、特定の例外が具
体化されるまで、その例外が許可または禁止されている
かを問題としない。その具体化の時点であたかも例外が
非投機命令により発生されたかのように、チェックが行
われ、処理がどうあるべきかを確認する。ほとんどの場
合では、コンパイラは例外を許可及び禁止する命令を追
跡できるので、結果の振舞いは順次プログラムに合致す
る。これが可能でない場合では、コンパイラ108は命
令シーケンスに対応する投機命令の生成を回避する。要
するに投機命令は、それらが禁止されるか否かに関係無
しに記録される。解決時にのみ投機例外は許可される例
外かどうかをチェックされる。並行処理コンパイラは例
外が禁止されるべきときには、例外が実行されないよう
に保証する。
ク・セグメントの例外の許可/禁止との関係も考慮され
るべきである。単純なアプローチでは、特定の例外が具
体化されるまで、その例外が許可または禁止されている
かを問題としない。その具体化の時点であたかも例外が
非投機命令により発生されたかのように、チェックが行
われ、処理がどうあるべきかを確認する。ほとんどの場
合では、コンパイラは例外を許可及び禁止する命令を追
跡できるので、結果の振舞いは順次プログラムに合致す
る。これが可能でない場合では、コンパイラ108は命
令シーケンスに対応する投機命令の生成を回避する。要
するに投機命令は、それらが禁止されるか否かに関係無
しに記録される。解決時にのみ投機例外は許可される例
外かどうかをチェックされる。並行処理コンパイラは例
外が禁止されるべきときには、例外が実行されないよう
に保証する。
【0065】
【発明の効果】以上説明したように、本発明によれば、
takenパス内に存在することが判明した投機命令からの
例外を効率的に処理すると同時に、投機命令からの例外
によるCPUオーバヘッドを最小化することができる。
takenパス内に存在することが判明した投機命令からの
例外を効率的に処理すると同時に、投機命令からの例外
によるCPUオーバヘッドを最小化することができる。
【図1】VLIWをVLIWデータ・プロセッサに提供
するための出力を有するVLIWコンパイラのブロック
図である。
するための出力を有するVLIWコンパイラのブロック
図である。
【図2】VLIWコード・ラインの一部を示す図であ
る。
る。
【図3】本発明の投機命令処理機構のブロック図であ
る。
る。
【図4】投機命令をマークする技法を示す流れ図であ
る。
る。
【図5】本発明による投機例外追跡のために使用される
ハードウェアのブロック図である。
ハードウェアのブロック図である。
102 VLIWマシン 103 レジスタ 104 ユーザ・プログラム 106 VLIW命令 108 VLIWコンパイラ、並列コンパイラ 109 グループ 201 命令解読論理(命令デコーダ) 204 例外解決 209 算術演算論理ユニット(ALU) 210 レジスタ・ファイル 212 例外ビット・ファイル 213 例外条件 214 余分レジスタ・ファイル 216 余分例外ビット・ファイル 217 オペランド選択信号線 220 例外信号 304 コンパイラ 401 例外信号線 402 ORゲート 403 入力 404 ANDゲート 405、412、415 信号線 406 例外ビット・レジスタ 407 ターゲット選択信号線 408 右レジスタ選択信号線 409 左レジスタ選択信号線 410 MUX 411 命令アドレス信号線 413 左余分レジスタ・ファイル 414 左余分例外ビット・ファイル 417 レジスタ・ファイル
フロントページの続き (72)発明者 ガブリエル・マウリシオ・シルベルマン アメリカ合衆国10546、ニューヨーク州 ミルウッド、ヒドン・ホロー・レーン 141 (56)参考文献 特開 平2−75023(JP,A) 特開 昭62−54342(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/38
Claims (17)
- 【請求項1】順次コードを並列処理しながら投機例外を
処理する方法であって、 1つ以上の命令を投機的に実行するステップと、 1つの投機命令によって起こされた投機例外を追跡する
ステップと、 例外条件を訂正し、前記投機命令及びそれに依存する投
機命令だけを再実行することにより、前記投機例外を解
決するステップとを含む、方法。 - 【請求項2】前記追跡するステップがオリジナル投機例
外と、前記投機命令がオペランドとして、関連例外ビッ
トがセットされた値を使用しようとするとき発生する2
次投機例外の両方を追跡するステップを含む、請求項1
記載の方法。 - 【請求項3】前記追跡するステップにおいて、 a)前記オリジナル投機例外が、 i)前記例外条件に応答して、レジスタ・ファイル内の
第1のターゲット・レジスタに関連付けられる例外ビッ
ト・ファイル内の例外ビットをセットするステップと、 ii)前記投機命令のアドレスを指し示すように、前記
第1のターゲット・レジスタをセットするステップと、 iii)余分レジスタ・ファイル内の余分レジスタに、
必要に応じて前記投機命令の少なくとも1つのオペラン
ドを記憶し、余分例外ビット・ファイルに前記例外ビッ
トを記憶するステップとにより追跡され、 b)前記2次投機例外が、 i)前記例外条件に応答して、前記レジスタ・ファイル
内の第2のターゲット・レジスタに関連付けられる前記
例外ビット・ファイル内の例外ビットをセットするステ
ップと、 ii)前記投機命令のアドレスを指し示すように、前記
第2のターゲット・レジスタをセットするステップと、 iii)前記余分レジスタ・ファイルの前記余分レジス
タの内容を前記投機命令の前記オペランドのレジスタ番
号(レジスタ内容ではなく)にセットし、前記余分例外
ビット・ファイルの前記例外ビットをセットするステッ
プであって、前記解決において、前記オリジナル投機例
外を発生する前記投機命令を逆トレースすることを可能
にする、前記セッティング・ステップとにより追跡され
る、請求項2記載の方法。 - 【請求項4】前記方法の実行の初期条件が、 全ての命令を非投機的とマークするステップと、 条件付き分岐の上に移動される命令を投機的とマークす
るステップであって、前記条件付き分岐が前記命令が前
記順次コードのtakenパス内で実行されるか否かを決定
する、前記マーキング・ステップとを含む、請求項1記
載の方法。 - 【請求項5】順次コードを並行処理しながら投機例外を
処理する方法であって、前記投機例外を追跡するステッ
プが、 例外条件を発生する投機命令の発生に応答するステップ
と、 前記例外条件に応答して、前記投機命令のアドレス及び
例外ビットを記憶するステップと、 前記例外条件に応答して、必要に応じて前記投機命令の
少なくとも1つのオペランド及び関連例外ビットを記憶
するステップと、 非投機命令が前記投機命令のターゲット・レジスタなど
の、前記関連例外ビットがセットされたオペランドを使
用するとき、前記例外条件を訂正し、前記ターゲット・
レジスタにより指し示される前記投機命令を前記少なく
とも1記憶オペランドを用いて再実行することにより、
前記投機例外を解決するステップとを含む、方法。 - 【請求項6】前記追跡ステップが、オリジナル投機例外
と、前記投機命令がオペランドとして、前記関連例外ビ
ットがセットされた値を使用しようとするとき発生する
2次投機例外の両方を追跡するステップを含む、請求項
5記載の方法。 - 【請求項7】前記追跡ステップにおいて、 a)前記オリジナル投機例外を追跡する前記ステップ
が、 i)前記例外条件に応答して、レジスタ・ファイル内の
第1のターゲット・レジスタに関連付けられる例外ビッ
ト・ファイル内の例外ビットをセットするステップと、 ii)前記投機命令のアドレスを指し示すように、前記
第1のターゲット・レジスタをセットするステップと、 iii)余分レジスタ・ファイル内の余分レジスタに、
必要に応じて前記投機命令の少なくとも1つのオペラン
ドを記憶し、余分例外ビット・ファイルに前記例外ビッ
トを記憶するステップとを含み、 b)前記2次投機例外を追跡するステップが、 i)前記例外条件に応答して、前記レジスタ・ファイル
内の第2のターゲット・レジスタに関連付けられる前記
例外ビット・ファイル内の例外ビットをセットするステ
ップと、 ii)前記投機命令のアドレスを指し示すように、前記
第2のターゲット・レジスタをセットするステップと、 iii)前記余分レジスタ・ファイルの前記余分レジス
タの内容を前記投機命令の前記オペランドのレジスタ番
号(レジスタ内容ではなく)にセットし、前記余分例外
ビット・ファイルの前記例外ビットをセットするステッ
プであって、前記解決において、前記オリジナル投機例
外を発生する前記投機命令を逆トレースすることを可能
にする、前記セッティング・ステップとを含む、請求項
5記載の方法。 - 【請求項8】前記方法の実行の初期条件が、 全ての命令を非投機的とマークするステップと、 条件付き分岐の上に移動される命令を投機的とマークす
るステップであって、前記条件付き分岐が前記命令が前
記順次コードのtakenパス内で実行されるか否かを決定
する、前記マーキング・ステップとを含む、請求項5記
載の方法。 - 【請求項9】順次コードを並列処理しながら投機例外を
処理する装置であって、 1つ以上の命令を投機的に実行する手段と、 1つの投機命令によって起こされた投機例外を追跡する
手段と、 例外条件を訂正し、前記投機命令及びそれに依存する投
機命令だけを再実行することにより、前記投機例外を解
決する手段とを含む、装置。 - 【請求項10】前記追跡する手段がオリジナル投機例外
と、前記投機命令がオペランドとして、関連例外ビット
がセットされた値を使用しようとするとき発生する2次
投機例外の両方を追跡する手段を含む、請求項9記載の
装置。 - 【請求項11】前記追跡する手段において、 a)前記オリジナル投機例外が、 i)前記例外条件に応答して、レジスタ・ファイル内の
第1のターゲット・レジスタに関連付けられる例外ビッ
ト・ファイル内の例外ビットをセットする手段と、 ii)前記投機命令のアドレスを指し示すように、前記
第1のターゲット・レジスタをセットする手段と、 iii)余分レジスタ・ファイル内の余分レジスタに、
必要に応じて前記投機命令の少なくとも1つのオペラン
ドを記憶し、余分例外ビット・ファイルに前記例外ビッ
トを記憶する手段とにより追跡され、 b)前記2次投機例外が、 i)前記例外条件に応答して、前記レジスタ・ファイル
内の第2のターゲット・レジスタに関連付けられる前記
例外ビット・ファイル内の例外ビットをセットする手段
と、 ii)前記投機命令のアドレスを指し示すように、前記
第2のターゲット・レジスタをセットする手段と、 iii)前記余分レジスタ・ファイルの前記余分レジス
タの内容を、前記投機命令の前記オペランドのレジスタ
番号(レジスタ内容ではなく)にセットし、前記余分例
外ビット・ファイルの前記例外ビットをセットする手段
であって、前記解決において、前記オリジナル投機例外
を発生する前記投機命令を逆トレースすることを可能に
する、前記セッティング手段とにより追跡される、請求
項10記載の装置。 - 【請求項12】前記装置の実行の初期条件が、 全ての命令を非投機的とマークする手段と、 条件付き分岐の上に移動される命令を投機的とマークす
る手段であって、前記条件付き分岐が前記命令が前記順
次コードのtakenパス内で実行されるか否かを決定す
る、前記マークする手段とを含む、請求項9記載の装
置。 - 【請求項13】順次コードを並行処理しながら投機例外
を処理する装置であって、前記投機例外を追跡する手段
が、 例外条件を発生する投機命令を検出する手段と、 前記例外条件に応答して前記投機命令のアドレス及び例
外ビットを記憶する手段と、 前記例外条件に応答して前記投機命令の1つ以上のオペ
ランド及び関連例外ビットを記憶する手段と、 非投機命令が前記関連例外ビットがセットされたオペラ
ンドを使用するとき、前記例外条件を訂正し、前記投機
命令を前記少なくとも1記憶オペランドを用いて再実行
することにより、前記投機例外を解決する手段とを含
む、装置。 - 【請求項14】前記追跡手段がオリジナル投機例外と、
前記投機命令がオペランドとして、前記関連例外ビット
がセットされた値を使用しようとするとき発生する2次
投機例外の両方を追跡する手段を含む、請求項13記載
の装置。 - 【請求項15】前記追跡手段において、 a)前記オリジナル投機例外を追跡する前記手段が、 i)前記例外条件に応答して、レジスタ・ファイル内の
第1のターゲット・レジスタに関連付けられる例外ビッ
ト・ファイル内の例外ビットをセットする手段と、 ii)前記投機命令のアドレスを指し示すように、前記
第1のターゲット・レジスタをセットする手段と、 iii)余分レジスタ・ファイル内の余分レジスタに、
必要に応じて前記投機命令の少なくとも1つのオペラン
ドを記憶し、余分例外ビット・ファイルに前記例外ビッ
トを記憶する手段とを含み、 b)前記2次投機例外を追跡する手段が、 i)前記例外条件に応答して、前記レジスタ・ファイル
内の第2のターゲット・レジスタに関連付けられる前記
例外ビット・ファイル内の例外ビットをセットする手段
と、 ii)前記投機命令のアドレスを指し示すように、前記
第2のターゲット・レジスタをセットする手段と、 iii)前記余分レジスタ・ファイルの前記余分レジス
タの内容を、前記投機命令の前記オペランドのレジスタ
番号(レジスタ内容ではなく)にセットし、前記余分例
外ビット・ファイルの前記例外ビットをセットする手段
であって、前記解決において、前記オリジナル投機例外
を発生する前記投機命令を逆トレースすることを可能に
する、前記セッティング手段とを含む、請求項13記載
の装置。 - 【請求項16】前記装置の実行の初期条件が、 全ての命令を非投機的とマークする手段と、 条件付き分岐の上に移動される命令を投機的とマークす
る手段であって、前記条件付き分岐が前記命令が前記順
次コードのtakenパス内で実行されるか否かを決定す
る、前記マークする手段とを含む、請求項13記載の装
置。 - 【請求項17】前記順次コードが超長命令ワード形式に
編成されるRISC命令を含む、請求項13記載の装
置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/377,563 US5799179A (en) | 1995-01-24 | 1995-01-24 | Handling of exceptions in speculative instructions |
US377563 | 1995-01-24 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08263287A JPH08263287A (ja) | 1996-10-11 |
JP3093624B2 true JP3093624B2 (ja) | 2000-10-03 |
Family
ID=23489627
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP08006386A Expired - Fee Related JP3093624B2 (ja) | 1995-01-24 | 1996-01-18 | 投機例外を処理する方法及び装置 |
Country Status (10)
Country | Link |
---|---|
US (1) | US5799179A (ja) |
EP (1) | EP0804759B1 (ja) |
JP (1) | JP3093624B2 (ja) |
KR (1) | KR100290269B1 (ja) |
CN (1) | CN1109966C (ja) |
CA (1) | CA2203124C (ja) |
CZ (1) | CZ293714B6 (ja) |
DE (1) | DE69600995T2 (ja) |
PL (1) | PL181901B1 (ja) |
WO (1) | WO1996023254A1 (ja) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5778219A (en) * | 1990-12-14 | 1998-07-07 | Hewlett-Packard Company | Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations |
US6185668B1 (en) * | 1995-12-21 | 2001-02-06 | Intergraph Corporation | Method and apparatus for speculative execution of instructions |
US5872990A (en) * | 1997-01-07 | 1999-02-16 | International Business Machines Corporation | Reordering of memory reference operations and conflict resolution via rollback in a multiprocessing environment |
AU1078099A (en) * | 1997-10-13 | 1999-05-03 | Institute For The Development Of Emerging Architectures, Llc | Method and apparatus for optimizing instruction execution |
US6505296B2 (en) | 1997-10-13 | 2003-01-07 | Hewlett-Packard Company | Emulated branch effected by trampoline mechanism |
US6044454A (en) * | 1998-02-19 | 2000-03-28 | International Business Machines Corporation | IEEE compliant floating point unit |
US6260190B1 (en) * | 1998-08-11 | 2001-07-10 | Hewlett-Packard Company | Unified compiler framework for control and data speculation with recovery code |
US6301705B1 (en) * | 1998-10-01 | 2001-10-09 | Institute For The Development Of Emerging Architectures, L.L.C. | System and method for deferring exceptions generated during speculative execution |
US6519694B2 (en) | 1999-02-04 | 2003-02-11 | Sun Microsystems, Inc. | System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity |
US6453463B1 (en) | 1999-06-07 | 2002-09-17 | Sun Microsystems, Inc. | Method and apparatus for providing finer marking granularity for fields within objects |
US6513109B1 (en) | 1999-08-31 | 2003-01-28 | International Business Machines Corporation | Method and apparatus for implementing execution predicates in a computer processing system |
US6487716B1 (en) | 1999-10-08 | 2002-11-26 | International Business Machines Corporation | Methods and apparatus for optimizing programs in the presence of exceptions |
US6658555B1 (en) * | 1999-11-04 | 2003-12-02 | International Business Machines Corporation | Determining successful completion of an instruction by comparing the number of pending instruction cycles with a number based on the number of stages in the pipeline |
US6766447B1 (en) * | 2000-01-25 | 2004-07-20 | Dell Products L.P. | System and method of preventing speculative reading during memory initialization |
US6631460B1 (en) | 2000-04-27 | 2003-10-07 | Institute For The Development Of Emerging Architectures, L.L.C. | Advanced load address table entry invalidation based on register address wraparound |
US7240186B2 (en) * | 2001-07-16 | 2007-07-03 | Hewlett-Packard Development Company, L.P. | System and method to avoid resource contention in the presence of exceptions |
EP1444571B1 (en) * | 2001-10-08 | 2007-12-12 | Telefonaktiebolaget LM Ericsson (publ) | Hidden job start preparation in an instruction-parallel processor system |
US7114059B2 (en) * | 2001-11-05 | 2006-09-26 | Intel Corporation | System and method to bypass execution of instructions involving unreliable data during speculative execution |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US7500126B2 (en) * | 2002-12-04 | 2009-03-03 | Nxp B.V. | Arrangement and method for controlling power modes of hardware resources |
US7263600B2 (en) * | 2004-05-05 | 2007-08-28 | Advanced Micro Devices, Inc. | System and method for validating a memory file that links speculative results of load operations to register values |
US7934082B2 (en) * | 2004-08-27 | 2011-04-26 | Panasonic Corporation | Information processing apparatus and exception control circuit |
US8312297B2 (en) * | 2005-04-21 | 2012-11-13 | Panasonic Corporation | Program illegiblizing device and method |
US8024714B2 (en) | 2006-11-17 | 2011-09-20 | Microsoft Corporation | Parallelizing sequential frameworks using transactions |
US7860847B2 (en) * | 2006-11-17 | 2010-12-28 | Microsoft Corporation | Exception ordering in contention management to support speculative sequential semantics |
US8010550B2 (en) | 2006-11-17 | 2011-08-30 | Microsoft Corporation | Parallelizing sequential frameworks using transactions |
JP5154119B2 (ja) * | 2007-03-26 | 2013-02-27 | テレフオンアクチーボラゲット エル エム エリクソン(パブル) | プロセッサ |
US8458684B2 (en) * | 2009-08-19 | 2013-06-04 | International Business Machines Corporation | Insertion of operation-and-indicate instructions for optimized SIMD code |
US20110047358A1 (en) * | 2009-08-19 | 2011-02-24 | International Business Machines Corporation | In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication |
US8825982B2 (en) | 2010-06-10 | 2014-09-02 | Global Supercomputing Corporation | Storage unsharing |
US9996348B2 (en) * | 2012-06-14 | 2018-06-12 | Apple Inc. | Zero cycle load |
US11068271B2 (en) | 2014-07-28 | 2021-07-20 | Apple Inc. | Zero cycle move using free list counts |
CN104598808B (zh) * | 2015-01-08 | 2018-02-16 | 中国科学院信息工程研究所 | 基于寄存器架构的Android应用完整性验证方法 |
US10120656B1 (en) | 2017-11-07 | 2018-11-06 | Bank Of America Corporation | Robotic process automation system for functional evaluation and improvement of back end instructional constructs |
US11416254B2 (en) | 2019-12-05 | 2022-08-16 | Apple Inc. | Zero cycle load bypass in a decode group |
US11436830B2 (en) | 2020-03-11 | 2022-09-06 | Bank Of America Corporation | Cognitive robotic process automation architecture |
WO2022094964A1 (zh) * | 2020-11-06 | 2022-05-12 | 华为技术有限公司 | 处理指令的方法以及图计算装置 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4539635A (en) * | 1980-02-11 | 1985-09-03 | At&T Bell Laboratories | Pipelined digital processor arranged for conditional operation |
US5487156A (en) * | 1989-12-15 | 1996-01-23 | Popescu; Valeri | Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched |
FR2656442B1 (fr) * | 1989-12-21 | 1994-07-29 | Bull Sa | Processeur a plusieurs unites microprogrammees avec mecanisme d'execution anticipee des instructions. |
US5303355A (en) * | 1991-03-27 | 1994-04-12 | Motorola, Inc. | Pipelined data processor which conditionally executes a predetermined looping instruction in hardware |
US5479616A (en) * | 1992-04-03 | 1995-12-26 | Cyrix Corporation | Exception handling for prefetched instruction bytes using valid bits to identify instructions that will cause an exception |
KR100310581B1 (ko) * | 1993-05-14 | 2001-12-17 | 피터 엔. 데트킨 | 분기목표버퍼의추측기록메카니즘 |
US5421022A (en) * | 1993-06-17 | 1995-05-30 | Digital Equipment Corporation | Apparatus and method for speculatively executing instructions in a computer system |
US5428807A (en) * | 1993-06-17 | 1995-06-27 | Digital Equipment Corporation | Method and apparatus for propagating exception conditions of a computer system |
US5537559A (en) * | 1994-02-08 | 1996-07-16 | Meridian Semiconductor, Inc. | Exception handling circuit and method |
US5634023A (en) * | 1994-07-01 | 1997-05-27 | Digital Equipment Corporation | Software mechanism for accurately handling exceptions generated by speculatively scheduled instructions |
US5655115A (en) * | 1995-02-14 | 1997-08-05 | Hal Computer Systems, Inc. | Processor structure and method for watchpoint of plural simultaneous unresolved branch evaluation |
-
1995
- 1995-01-24 US US08/377,563 patent/US5799179A/en not_active Expired - Fee Related
-
1996
- 1996-01-09 KR KR1019970705171A patent/KR100290269B1/ko not_active IP Right Cessation
- 1996-01-09 DE DE69600995T patent/DE69600995T2/de not_active Expired - Lifetime
- 1996-01-09 EP EP96900925A patent/EP0804759B1/en not_active Expired - Lifetime
- 1996-01-09 WO PCT/EP1996/000060 patent/WO1996023254A1/en active IP Right Grant
- 1996-01-09 CZ CZ19972084A patent/CZ293714B6/cs not_active IP Right Cessation
- 1996-01-09 CA CA002203124A patent/CA2203124C/en not_active Expired - Fee Related
- 1996-01-09 PL PL96321542A patent/PL181901B1/pl not_active IP Right Cessation
- 1996-01-12 CN CN96100643A patent/CN1109966C/zh not_active Expired - Fee Related
- 1996-01-18 JP JP08006386A patent/JP3093624B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
DE69600995D1 (de) | 1998-12-24 |
EP0804759A1 (en) | 1997-11-05 |
WO1996023254A1 (en) | 1996-08-01 |
PL181901B1 (pl) | 2001-10-31 |
JPH08263287A (ja) | 1996-10-11 |
CA2203124C (en) | 2002-11-19 |
US5799179A (en) | 1998-08-25 |
CN1109966C (zh) | 2003-05-28 |
CA2203124A1 (en) | 1996-08-01 |
EP0804759B1 (en) | 1998-11-18 |
PL321542A1 (en) | 1997-12-08 |
CZ293714B6 (cs) | 2004-07-14 |
KR19980701774A (ko) | 1998-06-25 |
CN1136182A (zh) | 1996-11-20 |
CZ208497A3 (en) | 1997-12-17 |
DE69600995T2 (de) | 1999-07-08 |
KR100290269B1 (ko) | 2001-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3093624B2 (ja) | 投機例外を処理する方法及び装置 | |
US5692169A (en) | Method and system for deferring exceptions generated during speculative execution | |
JP2786574B2 (ja) | コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置 | |
JP3120152B2 (ja) | コンピューターシステム | |
US5778219A (en) | Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations | |
KR950006616B1 (ko) | 변환된 프로그램 코드에서 소스 명령 분자를 보전하기 위한 시스템 및 방법 | |
US5918005A (en) | Apparatus region-based detection of interference among reordered memory operations in a processor | |
US5901308A (en) | Software mechanism for reducing exceptions generated by speculatively scheduled instructions | |
US6631460B1 (en) | Advanced load address table entry invalidation based on register address wraparound | |
US5694577A (en) | Memory conflict buffer for achieving memory disambiguation in compile-time code schedule | |
US6505296B2 (en) | Emulated branch effected by trampoline mechanism | |
JP3745819B2 (ja) | ノン・フォルティング・ロード命令をインプリメントする方法及び装置 | |
JPH1069386A (ja) | 推測的な実行を支援する論理装置 | |
US5761467A (en) | System for committing execution results when branch conditions coincide with predetermined commit conditions specified in the instruction field | |
US5996059A (en) | System for monitoring an execution pipeline utilizing an address pipeline in parallel with the execution pipeline | |
JPH09152973A (ja) | カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置 | |
JPH07120284B2 (ja) | データ処理装置 | |
KR102379886B1 (ko) | 벡터 명령 처리 | |
Rau et al. | Instruction-level parallelism | |
JPH06290057A (ja) | ループ最適化方法 | |
JPH0212429A (ja) | ディレイド・ジャンプ対応機能付情報処理装置 | |
Shah et al. | SPSIM: SuperScalar Processor SIMulater CS305 Project Report | |
JPH09185507A (ja) | プロセッサ及びその制御方法 | |
JPH07219772A (ja) | データキャッシュ機構 | |
MXPA98002291A (en) | Apparatus for detection based on region of interference between reordered memory operations in a process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |