JP3575632B2 - 計算機システムにおける演算方法および計算機システム - Google Patents
計算機システムにおける演算方法および計算機システム Download PDFInfo
- Publication number
- JP3575632B2 JP3575632B2 JP28157994A JP28157994A JP3575632B2 JP 3575632 B2 JP3575632 B2 JP 3575632B2 JP 28157994 A JP28157994 A JP 28157994A JP 28157994 A JP28157994 A JP 28157994A JP 3575632 B2 JP3575632 B2 JP 3575632B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- pipeline
- result
- package
- value
- 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 25
- 230000015654 memory Effects 0.000 claims description 114
- 230000006870 function Effects 0.000 claims description 24
- 238000007667 floating Methods 0.000 claims description 18
- 238000012545 processing Methods 0.000 claims description 15
- 230000004044 response Effects 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 claims description 10
- 230000002457 bidirectional effect Effects 0.000 claims description 9
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 238000004891 communication Methods 0.000 description 39
- 230000007246 mechanism Effects 0.000 description 36
- 238000013461 design Methods 0.000 description 30
- 238000007792 addition Methods 0.000 description 13
- 230000008901 benefit Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 5
- 238000011144 upstream manufacturing Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 239000003550 marker Substances 0.000 description 4
- 230000003993 interaction Effects 0.000 description 3
- 230000003446 memory effect Effects 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000001186 cumulative effect Effects 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
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/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/3824—Operand accessing
-
- 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/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
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)
- Executing Machine-Instructions (AREA)
Description
【0001】
【産業上の利用分野】
本発明は、パイプラインプロセッサ、特にカウンタパイプラインプロセッサに関する。
【0002】
【従来の技術】
パイプラインプロセッサーRISC
多くの最新のマイクロプロセッサは、縮小命令セットコンピュータ(RISC)技術を使用して設計されている。このようなマシンは、比較的簡単な命令セットを使用するが、これらの命令を非常に高速に実行することに注力している。高速動作が、6前後の数のステージのパイプラインを使用することよって高められる。
【0003】
各命令は順次パイプラインに入り、パイプラインにおける各ステージの種々の処理ステップを通過する。始めの部分のステージでは、例えば、命令が、そのための後のパイプラインステージの動作が識別できるようにデコードされる。他のステージでは、命令のために要求されるデータ値はレジスタファイルから検索される。後のステージでは、命令によって要求される算術演算又は論理演算が実行される。
【0004】
パイプラインの初期部分のステージでレジスタファイルにアクセスすることはマイクロプロセッサでは一般的なことである。命令によって要求されるレジスタファイルからの値が命令実行の過程で初期にパイプラインに供給され得るようにこれが行われる。レジスタファイルへのアクセス速度は、しばしばマシン速度におけるペイシング(pacing)項目となる。パイプラインにおいて後で計算された結果は、レジスタファイルに戻され蓄積される。
【0005】
バイパスパス
レジスタファイルを通して全てのデータを移動するプロセスは、マイクロプロセッサの性能におけるボトルネックであることが分かった。したがって、最新のマイクロプロセッサの設計は、一つの命令で計算された値をその後の命令に伝えるためにパイプラインのステージ間の複雑な“バイパス”パスのセットを使用する。したがって、例えば、もし一つの命令が、それの直後の命令への入力として必要とされる値を計算するならば、その値は、レジスタファイルを通して循環するよりもむしろパイプラインにおける一つのステージに戻して手渡される。同様に、もしその値が2つの命令が後続する命令によって要求されるならば、この値はパイプラインにおける2つのステージに戻して手渡される。データパスの複雑なネットワークが、最近計算された値のための命令の全ての可能な要求に適応させるために要求される。複雑なバイパスパスセットの設計及び管理は、マイクロプロセッサの設計では主要な仕事である。それらのバイパスパスは、パイプラインにおける幾つかのステージを通るため、通常隣接ステージを接続するワイヤよりも長いワイヤを必要とする。長いワイヤは、隣接ステージを接続する短いワイヤよりもより大きな遅延を有し、マシンの性能を低下させる。バイパスパスの特別なタイミングの制約に適応させるために、相当な努力が要求される。第二に、パイプラインにおけるバイパス通信は幾つかのステージを通過するため、バイパスパスによって接続されるステージのタイミングは、慎重に制御されなければならない。隣接ステージ間に小さいタイミングエラーがあるならば、タイミングエラーがバイパスが通過する幾つかのステージを通じて累積され、バイパス通信における困難の原因となる。第三に、万一パイプラインの一部が機能停止すると、すなわち、本質的データ項目何か受け取らずには続行できなけくなると、バイパスパスはデータ消失の危険にさらされるから、パイプラインの残りの全ての部分も機能停止をしなければならない。パイプラインの任意の部分における機能停止状態を検出し、かつ全ての部分の歩調を合わせるために全ての部分に機能停止状態を伝送する論理回路網は、コンピュータの性能をしばしば制限する。最後に、多数のバイパスパスを使用するマシンは、種々のバイパスデータをバイパスパスからプロセッサの適当な部分に種々のバイパスデータを伝達するためのスイッチを必要とする。これらのスイッチ自体が、プロセッサにおける遅延のみならず設計おける複雑性を持ち込む。
【0006】
順序どおりでない実行
コンピュータにおける速度を高める一つの方法は、順序どおりでなく命令を実行することである。命令によってはその実行に十分なだけ知らされると、たとえ、“前”の命令がまだ実行されていないとしても、コンピュータはそれを実行できる。もっとも、このようなマシンでは、書かれた順序で命令の逐次実行によって得られる結果と同一の結果が生じなければならない。“順序どおりでない実行(out of order execution)”という用語は、プログラムによって示された順序とは異なる順序で命令を完了できる何らかのメカニズムを説明するために、使われる。順序どおりでない実行は、浮動小数点演算命令又は三角関数のような複雑で、したがって比較的遅い数値演算を含むいろいろなプログラムの実行速度を速めることができる。算術演算が進行中である間、コンピュータの他の部分は、別の状態に費やされた時間にできるだけ多くの作業を完了して、他の一般により簡単な命令を順序どおりでなく実行する。
【0007】
複数命令効果点ないしスーパースカラ
性能を高めるための他の方法は、“スーパースカラ(superーscalar)”マシンに使用される“複数命令効果点(multiple instruction issue”と呼ばれる。スーパースカラマシンでは、命令は一つずつよりもむしろグループで処理される。より大きな速度は、単一の処理装置を逐次使用するよりも複数の処理装置を並列に使用することによって達成される。
【0008】
グループにおける命令が相互作用するに違いないことが時々起こる。例えば、グループにおける第2の命令はグループにおける第1の命令によって計算された値を要求する。幾つかのコンピュータは、この種の要求に適応するために並列処理装置間に通信パスを設ける。他のコンピュータは、互いに相互作用がない命令だけをグループ内に配置するよう選択することによってこの要求を回避する。例えば、一方の命令が固定小数点演算のみを要求し、かつ他方の命令が浮動小数点演算のみを要求するならば、幾つかのこのようなコンピュータは一度に2つの命令を実行することができる。
【0009】
推測実行
性能を増すための他の有用な機構は、推測実行である。コンピュータによって実行されるべき命令は通常、メモリの連続するセルに記憶されているが、“ブランチ(分岐)”と呼ばれる幾つかの命令は、コンピュータに全く異なる記憶位置から命令を取り出すように指令する。“条件付きブランチ”と呼ばれる幾つかの命令は、計算されるいくらかのデータ要素の値によって、命令を順次実行し続けるか又はいくらかの他のシーケンスから命令を取り出すかのいずれかをコンピュータに指令する。
【0010】
高性能マシンでは、命令をメモリから取り出す機構は、命令が実際実行される十分前に、命令を取り出している。取り出されてまだ実行されていない命令は、命令取り出しユニットと命令が実際実行されている位置の間のパイプラインにある。命令取り出し機構(フェッチメカニズム)は、条件付きブランチに到達すると、2つの可能な次の命令のどれを取り出すかを確実には知らないことがある。どれが適当な次の命令であるかについては、条件付きブランチによってテストされるデータ要素が実際計算されるまで待って知ることになるかもしれない。しかしながら、この計算を待つのではなく、多くの最新マシンの命令取り出しユニットでは結果の推測に基づいて命令を取り出す。約85%の成功率が従来公知である比較的簡単な予測値によって達成される。このような命令は、それらが全て実行されるとは限らないため、“推測(speculative)”と呼ばれる。ブランチ予測が間違っているならば、推測的に発行される命令は、除去されねばならず、その動作の全ての足跡は破棄されねばならない。
【0011】
レジスタ・リネーミング
単純なコンピュータ設計では、計算値はレジスタファイルに記憶される。命令のための入力として要求される値は、レジスタファイルから取り出され、計算値はレジスタファイルに戻される。より複雑な設計では、中間値は、レジスタファイルに中間値を移動するか又はレジスタファイルから中間値を移動するために他の方法で使用されるだろう時間を節約するために一時保持記憶位置に時々記憶される。かかるコンピュータための制御システムは、一時保持記憶位置に記憶されるレジスタの値及び識別(アイデンティティ)の両方を記録する。実際には、各一時保持記憶位置は、レジスタファイルと異なるレジスタで時々識別される。この機構は一般に“レジスタリネーミング”として知られている。
【0012】
レジスタリネーミングは通常、特別な設計上の考察を要求する。設計者は、どの一時保持レジスタがリネームされ得るかを決定しなければならないし、いかにその内容の識別が記録されるかを決定しなければならない。広範囲の種類の機構がこのために開発された。
【0013】
多重メモリ効果点
最新のコンピュータの動作の高速化のために使用される他の方法は、多重メモリ効果点(multiple memory issue)と呼ばれる。単純なメモリシステムでは、値は一度に一つメモリから取り出される。メモリへの各アクセスは、他のアクセスが開始可能となる以前に完了されていなければならない。このようなシステムでは、情報をメモリから取り出し得る速度は、メモリのアクセス時間によって制限される。
【0014】
幾つかの最新のマシンは、一度に2以上のメモリリクエストに適応できる特別な回路を含むことによってメモリアクセスの速度を改善する。かかる回路では、各メモリリクエストのディテールをメモリシステムに導入し、メモリシステムを通して互いに干渉なしにディテールを渡すために、ディテール用の記憶回路並びに制御回路を含まれていなければならない。メモリ制御回路の簡単化のために、メモリからの応答を、それに対するリクエストと同一のシーケンスで戻すのが、メモリでは通例である。
【0015】
より複雑なメモリシステムでは、メモリから順序どおりでない応答をなすことができる。高速キャッシュメモリへのアクセスによってメモリリクエストの幾つかは満足できるが、他のメモリリクエストはコンピュータの主メモリシステムへのアクセスが必要となる。メモリアクセス時間におけるこの差を、最も複雑なコンピュータは利用する。たとえメモリに対する前のリクエストがまだ完了していなくても、メモリから直ちに使用可能な答を得ることができる。これは、順序どおりでない実行と類似しているが、コンピュータの演算部及び論理部ではなく、メモリシステムに関するものである。
【0016】
プログラマのモデルの保存
命令セットの正確な実行の確保のためには、複数の効果点、すなわち、順序どおりでない実行、推測実行、レジスタリネーミング、多重メモリアクセス又は順序どおりでないメモリアクセスの効果点が可能であるコンピュータの設計では、十分な注意が払われなければならない。現在、一般に使用されている命令セットは、命令の逐次実行を予想し、そして全ての計算値が、発生され、それらを発生する命令の順序で記録されていることを予想している。マシンのより高速化を可能ならしめるには、当初単純なマシンに用に向けられたプログラムとの互換性を保証するために、十分な注意を払う必要がある。
【0017】
プログラマは、プログラムを自分が定義したシーケンスで実行されるべき一連の命令として考える。順序どおりでない実行を行うコンピュータは、(順序通りの)逐次動作で得られ結果と同一の結果を生じるように設計されなければならない。実際、順序どおりでなく実行される動作は、他の命令から独立したものでなければならないため、通常、これは容易である。しかしながら、順序どおりでなく実行される命令がある種の誤りを生じるとき、逐次動作との互換性を保持することは困難である。例えば、ブランチ決定命令が実行された場合に、シーケンス中でそれ以前の命令がメモリ障害を生じたとき、既に実行されたブランチ決定命令の結果は取り消されなければならない。同様に、浮動小数点除算が開始させられると仮定して、プログラムにおけるその後の命令は、除算が完了する前に実行される。除算命令の除数がゼロならば、順序どおりでなく実行される除算後のオーバーフローの結果及び命令は取り消されなければならない。順序どおりでなく実行できるコンピュータとシーケンス通り実行するコンピュータと間の互換性を保持することは、命令シーケンスの多くの特別な場合に対して複雑な回路が要求され困難であることが分かった。
【0018】
【解決すべき課題】
本発明は、順序どおりでない実行、スーパースカラ演算、推測実行、レジスタリネーミング及び多重メモリ効果点の利点を提供し、プログラマモデルを保存する簡単で規則的な設計でトラップ、例外及び割り込みを解決する。
【0019】
【課題を解決するための手段】
本出願と同日付けで同一出願人によって出願された他の特許出願「カウンタフローパイプライン」には、単一のパイプラインを通して双方向に情報を送信する機構が記載されている。一方の方向に流れる各データ要素は、他方に流れる各データ要素と出会い、かつ相互作用するかもしれない。
【0020】
ここでは、カウンタフローパイプラインがマイクロコンピュータを形成するために使用される。パイプラインのための命令及びデータは上向きに流れ、前の命令の結果は下向きに流れる。命令は、予め計算された値の下向きの流れからの結果値をコピーすることによって前の命令からソース値を得る。必要ならば、レジスタファイルからの値は、別の方法では得られない結果値を提供するために下向きの流れの上部に挿入される。
【0021】
各ステージはそれの2つの隣接ステージと主に通信する。したがって、現在のマイクロプロセッサで共通のバイパスパスを最少化する。1命令で計算され、2つの命令後ある命令によって要求される値は、下向きに流れ各ステージに到達する。ステージは幾つかの細部、例えばそこで実行される特定の演算機能又は論理機能で異なるかもしれないが、概要は類似し、同様な制御システム、同様な記憶レジスタセット及び配列等が使用される。
【0022】
本発明の単純さは、設計及びデバッグの容易さ、費用及び速度において多くの利点を提供する。ステージ制御システムための1つの設計が、例えば、多くのステージで再使用でき、したがって設計努力は多重に報われる。これらのマシンを構成する集積回路技術は非常に急速に改良される。設計の完了に数年かかるならば、その設計で使用するに適当な集積回路技術を企画することは困難である。設計サイクルが短いと、使用する技術の目標を正確に設定でき、より高度な機能を設計に取り入れることが可能となる。さらに、従来の設計のチェックは、それを設計するのと同様か又はそれよりもより費用がかかる。本発明の単純さにより、以前よりもより迅速により正確な設計を達成する機会が提供される。
【0023】
単純さはまた、本発明の潜在速度能力に貢献する。各ステージに必要とされる回路は非常に簡単であり、命令の迅速な実行及び高性能に導く。また、設計の規則性により、集積回路としての実現において幾何学的規則性を得られる。それにより、異なるステージの幾何学的幅を一致させることが可能であり、各ステージを列に配置できるので、ステージ間の通信パスを短く真っすぐにすることが可能となり、高速で低電力動作が提供される。
【0024】
簡単でかつ規則的な設計にかかわらず、本発明は、最新の最も複雑な設計に見られる高度の機能の多くを提供する。これらには以下の事項が含まれる。
【0025】
順序どおりでない実行
本発明は、必要とされる情報が使用可能となると直ちに命令を実行することによって、命令メモリから発生される順序以外の順序で命令を完了し得るようにして、プログラムの完了を速める。それにもかかわらず、本発明の簡単な規則的な構成は、命令が順序正しく実行されるコンピュータとの互換性を保持する。簡単な構成により、これを達成にこれまで使用された複雑な方法のホストが取り換えられる。
【0026】
推測実行及びトラップ
本発明における簡単な機構は、計算するパイプラインからの望まれない命令をクリアすることができる。この機構により、選択された命令が実際に正しい命令となるであろうとの推測に基づく条件付きブランチの後で、コンピュータが命令を部分的に処理することを可能にする。推測実行ために選択された命令が実行されるべきでなかった場合、クリア機構が命令を取り除き、命令が発生した結果を取り除く。同様に、演算障害又はメモリ障害のような例外事象がトラップ状態を形成すると、トラップを引き起こした命令に続く命令の結果を容易にキャンセルできる。
【0027】
レジスタリネーミング
本発明は、速度における犠牲を伴ってレジスタファイルを通して答を通す必要なしに、前の命令の結果を記憶する簡単で柔軟な方法を提供する。それは、共通のパイプラインを下る逆の流れを使用して新しい命令にこれらの結果を供給する。この簡単な機構は“処理している”幾つかの値のための一時記憶を提供するため、それは“レジスタリネーミング”として一般に知られている役割に役立つ。
【0028】
多重メモリアクセス及び順序どおりでないメモリアクセス
カウンタフローパイプラインを分岐することによって、本発明は、多重メモリ効果点のみならずメモリからの順序どおりでない戻りに適応することができる。通常は複雑なこのタスクは、分岐されたパイプラインの柔軟な接続機構に結合された命令に本発明によって課された厳密な幾何学的配列によって非常に単純化される。
【0029】
本発明は、命令パッケージがソースアドレス及びデスティネーションアドレスを含み、結果パッケージはデスティネーションアドレスを含む計算システムを動作させる装置及び方法を提供する。命令パッケージは双方向パイプラインのステージを通して上向きに流れ、結果パッケージは双方向パイプラインのステージを通して下向きに流れる。命令パッケージは、前記パイプラインにおける相対位置を交換することを防止する上向きの流れにシーケンスで保持され、同一のデスティネーションアドレスを含む結果パッケージは、前記パイプラインにおける相対位置を交換することを防止する下向きの流れにシーケンスで保持される。各命令パッケージのソースアドレスは、出会う各結果パッケージのデスティネーションアドレスと比較され、命令パッケージのためのソース値は、前記ソース/デスティネーションアドレス比較に応じて結果パッケージからレトリーブされる。各命令パッケージのデスティネーションアドレスは、出会う各結果パッケージのデスティネーションアドレスと比較され、結果パッケージによって再計算されたか又は再計算されるだろう結果パッケージにおける何らかの結果値は、ソース/デスティネーションアドレス比較に応じて無効にされる。結果値は、ソース値から計算され、下向きの流れの結果パッケージに供給される。
【0030】
【実施例】
概 観
“カウンタフローパイプライン(counterflow pipeline)”と呼ばれる新しいパイプライン構成を用いて汎用コンピュータを構成する。汎用コンピュータの形成に役立てるてめ、カウンタフローパイプラインの構成には3つの主要な機能がある。第1に、カウンタフローパイプライン構成は、線形様式で互いに接続されている一連の非常に類似したステージからなる。もちろん、電子装置におけるその実際の位置はその動作に重要でないけれども、これらのステージは、一方を他方の上流に配置されるように概念的に記載されている。類似ステージの簡単な線形配置は、カウンタフローパイプラインの設計を容易にする。第二に、カウンタフローパイプラインにおける各ステージは隣接するステージと双方向に通信できる。もちろん、実際の方向は装置の物理的実施例における通信パスによって確立されるけれども、これらの通信を“上向き”及び“下向き”として概念的に表現する。双方向の通信により、命令が一方の方向にパイプラインを流れることが可能となり、かつ前の命令からの答えが他方の方向にパイプラインを流れることを可能となる。第三に、カウンタフローパイプラインは、一方の方向に流れる各値が、正確に一度だけ、他方の方向に流れるどの値とも出会い、相互に作用することを確実にする。この特性を、“カウンタ同期比較(countersynchronized comparison)”と呼ばれる。カウンタフローパイプラインのカウンタ同期比較は、各命令が全ての前の命令の結果と出会い、もし必要ならば、それらからのデータのコピーを可能とする。
【0031】
初期部分の命令からの結果は、後の命令がアクセスできるようにパイプラインを下向きに流れる。各ステージがその最も近い隣り合うステージとのみ通信することにより、ステージを接続するのに必要とされるワイヤの長さが制限できる。ローカル通信により、全てのステージは形において同一であり、それぞれはその2つの隣り合うステージと通信するのであるから、各ステージの設計が簡単化される。
【0032】
順序通り上向きに流れる命令
パイプラインを上向きに流れる命令を考える。下部端として称されるパイプラインの端は、メモリから命令を取り出す機構を介しての命令を含むメモリに接続される。命令は、その下部端でパイプラインに入り、パイプラインを上向きに流れる。パイプラインを流れる間、厳密には、命令はシーケンスのままである。後の命令は、前の命令を通過させない。すなわち、後の命令は、前の命令との相対位置を変える。パイプラインにおける上向きに流れる命令を考えているので、後の命令は前の命令の下にある。パイプラインにおけるある時点での命令についてスナップ写真がとれるとすると、それはプログラマによる命令のリストのように見える。
【0033】
命令パッケージの内容
パイプラインにおいて上向きに流れる各命令は、処理動作に有用であるデータを伴う。このような“命令パッケージ”は、以下のものを含む。
1.命令が何をなす予定かを知らせるオペレーションコード。加算、減算、シフト、メモリからのロード等のような種々の演算のために別々のオペレーションコードがある。オペレーションコードは、メモリに記憶されている命令についての情報の転写であるか又は同情報の変換形である。パイプラインにおける後のステージは、オペレーションを検査してその命令で如何なる作業が行われるかを決定する。例えば、加算のみができるステージは、加算演算を要求する命令時だけに作動し、他の演算を要求する命令を通過させる。
2.命令は、メモリから取り出されるとき、実行されるべき演算への入力として役立つ値の幾つかのソースレジスタを識別する。これらのソースレジスタは、“アドレス”又はレジスタの“名前”と呼ばれる独特なビットの組み合わせによってそれぞれ識別される。
ソースレジスタのアドレス又は名前の識別子は、命令パッケージの一部として送られる。命令を行う際に使用されるべき各ソースレジスタのための適切な値は、判明したときに、命令パッケージの一部を構成する。これらのソース値が命令パッケージにどのようにして入るかを後に述べる。アドレス及び値に加えて、命令パッケージは、各レジスタ値の妥当性を指示する幾つかのマーカビットを含む。これらのマーカビットは、値が既に検出されたか又はまだ未知のままであるかどうかを指示する。
3.命令のデスティネーションレジスタのアドレス又は名前の識別子も、命令パッケージで送られる。命令が実行されると、そのデスティネーション値は既知となり、命令パッケージの一部を形成する。命令によって識別される一つ又は複数のデスティネーションレジスタは、命令によって計算された一つの値又は複数の値の最大の貯蔵所である。各デスティネーションレジスタのためのアドレス及び値に加えて、各デスティネーションレジスタ値が計算済みであるか又は未知のままであるかを示す幾つかのマーカビットもある。
【0034】
命令実行
パイプラインの異なるステージは、異なる命令を実行することができる。もちろん、パイプラインは、処理されるべき命令の各タイプを実行できる少なくとも一つのステージを有するが、幾つかの演算を行える1つ以上のステージを有するかもしれない。命令パッケージは、その命令を実行でき、自由に実行できる状態のステージに到達した時、命令パッケージが、必要なソース値のそれぞれの値を含んでいれば、そのステージによりその命令が実行される。ソース値が全て使用可能でない場合、後のステージで命令が実行され得るならば、命令パッケージはパイプラインを上向きに進行する。命令パッケージが命令を実行できる最後のステージに到達して、命令がまだ実行されてないならば、命令パッケージは、全てのソース値が満たされて命令が実行されるまで待つ。
【0035】
命令が実行されるとき、それにより発生される計算値は2つの場所に入れられる。第一に、それらは命令パッケージ自体のデスティネーションレジスタ部に入る。命令パッケージの一部としてこれらはパイプラインを上向きに進行し、間もなく説明するように最後にはレジスタファイルに記録される。
【0036】
第二に、計算値のコピーは、結果ストリームに配置される。これらの“答え値”は、コピーして結果パッケージに入れられるか又は新しい結果パッケージが、これらを保持するために形成される。いずれの場合も、これらは、パイプラインを下向きに流れる。パイプラインを下向きに流れる計算値のコピーは、出会った後の命令と相互作用する。結果パッケージ内の答え値のこの下向きの流れにより、後の命令が必要とするソース値を得る機構を提供する。
【0037】
結果パッケージ内容
答え値は、“結果パッケージ”でパイプラインを下向きに流れる。このようなパッケージそれぞれは一つ以上の予め計算された値についての情報を含む。各々のこのような答え値に対して、結果パッケージは以下のものを含む。
1.この値が最後に入れられるデスティネーションレジスタのアドレス又は名前。もちろん、これは、レジスタファイルに到達すれる結果パッケージにおけるデスティネーション情報のコピーではなく、命令パッケージで伝えられるデスティネーション情報のコピーである。結果パッケージにおけるコピーは、その前の命令によって計算された値について後の命令に知らせるためのものである。
2.計算値。この答え値は計算された情報の全てを含む。幾つかの演算は、非常に小さい情報、例えば条件コードのみを計算する。他の演算はバイト又は文字値を計算する。多くの演算は、32ビット,64ビットまたはそれ以上のビットのフルコンピュータ“ワード”を計算する。
3.このレジスタ値が意味があるかどうかを識別する幾つかの予備ビット。予備ビットは、後述するある状況下では、結果パッケージの幾つかの部分を無効にするのに必要である。これらのマーカビットはそのために使用される。
【0038】
部分的な順序づけで下向きに流れる答え
結果ストリームに流れ込む結果は、好ましくは部分的順序づけを保持する。同一のレジスタアドレスを有する任意の2つの結果は、順序づけが維持されるべきである。異なるレジスタアドレスを有する結果は、任意の順序でよい。設計によっては、重要な結果が他の結果よりもより迅速に移動できる特別のパスを備えることが望ましい。このような特別のパスは結果の順序を乱す。同一のデスティネーションレジスタの名前又はアドレスを結果が有する場合のみ、正しい演算を得るために、特定の結果の順序の維持が必要であろう。
【0039】
本発明により形成されたパイプラインにおける命令の順序は、一般に、パイプラインの下部端で発生た順序に一致する。しかしながら、パイプラインを下向きに流れる結果における結果値は、部分的に順序づけられるだけである。同一のレジスタの名前又はアドレスを有する値は相対的な順序を維持するが、レジスタの名前又はアドレスが異なっている値は如何なる順序でも良い。
【0040】
命令はパイプラインを厳格に順序づけられて上向きに流れることができ、同一のデスティネーションアドレスのための結果も厳格に順序づけられ得る。適用されるならば、これらの2つのルールにより、各命令は、シーケンスで先行する命令のみにより発生された結果に出会い、その結果からのソース値を得ることが保証される。間もなく説明するように、他の機構により、各命令が、ソース情報として要求する任意のレジスタ値のための適切な結果値のみに出会うことが確実にされる。
【0041】
通過する全ての結果と比較される全ての命令
本発明により使用されるカウンタフローパイプラインの非常に有用な特徴は、“カウンタ同期比較(countersynchronized comparison)”である。カウンタフローパイプラインのカウンタ同期比較のため、パイプラインを上向きに通過する命令パッケージは何れも、出合った、下向きに流れてくる結果パッケージと比較される。同時係属出願の「カウンタフローパイプライン」に記載されているように、パイプライン通信は、次のように構成される。すなわち、もし、命令が前の方のステージEから後の方のステージLに送られており、同時に結果がステージLからステージEに送られているならば、命令及び結果が、L及びEを含むLとEの間のどれかのステージで正確に一度出会わなければならないよう、構成される。このカウンタ同期比較機能は、カウンタフローパイプラインに形成され、前述の出願に記載されている特別の回路によって成し遂げられる。
【0042】
カウンタフローパイプラインのカウンタ同期比較は、以下のように命令と結果間の有用な相互作用を可能にする。
命令及び結果がパイプラインの任意のステージで出会うと、そのステージは、命令パッケージのソースアドレスと結果パッケージのレジスタアドレスとを比較する。そこでの一致は、命令がソース値として必要しているデータを、結果が伝えていることを示している。したがって、この比較における一致に応じて、ステージは、結果パッケージからの答え値をコピーして命令パッケージに入れる。この処理によって、命令パッケージは、結果ストリームから必要とする値を“蓄積する”ことができる。
【0043】
命令及び結果がパイプラインの任意のステージで出会うと、そのステージは、命令パッケージにおけるデスティネーションアドレスの全てと結果パッケージにおけるデスティネーションアドレスの全てとを比較する。そこでの一致は、命令が、結果パッケージによって伝えられる答え値を有するか又は再計算するだろうことを示している。したがって、答え値は、本発明によって再計算されたか又は再計算されるだろうこのレジスタの前の値を表す。この結果によって伝えられる前の値は、したがって、古いものである。よって、ステージは、デスティネーションアドレスと結果アドレスとの一致を見い出すと、結果ストリームから結果パッケージを削除するか又は結果あるいはその答え値に廃棄とマークするかのいずれかによって結果を“没(kill)にする”。いずれの場合も、結果と命令とがさらに相互作用することを防止する。
【0044】
結果を没にすることは、カウンタフローパイプライン・プロセッサの適正な動作を容易にする非常に有用な属性である。結果は、その値を再計算するか又は再計算するであろう命令に出会うならば、没にされる。結果を没にすることにより、特定の結果値が結果ストリームの非常に限られた部分だけに存在することになる。この結果値は、最初にその値を計算する命令によって発生される。それは、引き続く命令に、その値を有するか又は再計算するだろう最初の命令に至るまで、出会うことができる。結果値は、それを計算した命令からそれを有するか又は再計算する次の命令までの間に限り、ソース値として使用る。予め計算された結果は、その結果値を有するか又は再計算するだろう命令に続く命令においては、ソース値として使用できない。しかしながら、これらの後の命令は、結果の最初のバージョンを没にした命令によって既に計算されているか又は計算されるべきである新しいバージョンを受け取る。したがって、あらゆる命令は、ソース情報として使用するかもしれない各レジスタの最新値のみを受け取る。
【0045】
没(削除)による、りレジスタリネーミング機構の提供
この非常に簡単で、かつ規則的な機構により、同一の名前又はレジスタアドレスで指定された幾つかの異なる値が結果ストリームにおいて共存することが可能となる。この機構により、このような値それぞれが、その値を適切に使用する命令だけに到達することを確実にする。このような値が、それが有効とされる領域の外でもって、命令と不適切に相互作用することを防止する。結果の名前又はアドレスと、命令におけるデスティネーションの名前又はアドレスとを比較することは、非常に簡単で、かつ規則的構成におけるレジスタリネーミングの効果を提供する。
【0046】
終端におけるレジスタファイル
今日、使用されている他のプロセッサと同様にカウンタフローパイプラインプロセッサは、計算値を保持するためにレジスタファイルを含んでいる。このようなレジスタファイルは、データが迅速に入れられ、かつ取り出せるように高速回路で形成されている。このレジスタファイルは、全部で数十個のレジスタを含むだけあるから、高速に作動する。従来のマイクロプロセッサで使用されているパイプラインでは、これらのレジスタは、レジスタからの値ができるだけ早く各命令に使用可能にされ得るようにパイプラインの発端近くに置かれる。これい対して、カウンタフローパイプラインプロセッサでは、パイプラインの終端またはその近く、すなわちパイプラインの上部端に置かれる。
【0047】
命令の完了後のみの値の記録
命令が完全に処理された後だけ到達するパイプラインの上部端にレジスタファイルを配置することによって、適切に計算された値だけレジスタファイルに記録される。命令は、計算された値をレジスタファイルまで伝えるだけでなく、計算された値を結果として結果ストリームに挿入し、この結果ストリームは、続く命令と相互作用し、それらの命令が必要とするソース値をそれらに与える。したがって、カウンタフロープロセッサは、従来のコンピュータがアクセスするよりも少ない頻度でそのレジスタファイルからの値をアクセスする。
パイプラインの上部端のレジスタファイルは、ファイルの側を通過する古い命令の結果の一覧として考えられ、その結果の答えをファイルに入れる。
【0048】
レジスタファイルから結果を得る
実用的なステージ数を有するカウンタフローパイプラインプロセッサでは、レジスタファイルは必要である。多くの命令及びうまく設計されたシステムではたいていの命令は、レジスタファイルを参照しないで結果ストリームからのそのソース値を蓄積する。しかしながら、幾つかの命令はずっと前に計算されたソース値を使用する。このような命令によって要求される結果は、その命令がパイプラインに入るずっと以前に、結果ストリームを完全に通過し、結果ストリームを離れている。このような命令は、結果ストリームに残っている値から命令が必要とする値を蓄積できない。このような命令に対してソース値を提供するために、レジスタファイルは、その記録された値を結果ストリームを下向きに送らねばならない。
【0049】
カウンタフローパイプラインプロセッサは、レジスタファイルが広範囲の再発行方式のどれかを使用する。幾つかの方式は、レジスタファイルにまだレジスタファイルに到達しないパイプラインにおける命令によって古いものとされた値を再発行させる。他の結果と同様にレジスタファイルによって再発行された結果は、それらが、それらの値を有するか又は再計算するだろう命令に到達するならば、没にされるだろう。したがって、レジスタファイルからのレジスタ値の再発行のための方式は、ファイルにおける値の古さに関与する必要はない。
【0050】
一つの再発行方式は、それぞれのレジスタの値を周期的に再発行することである。最後には、全てのレジスタ値は再発行され、それで値を待っている任意の命令の要求は、結局満足されるだろう。
【0051】
他の方式は、パイプラインに入る各命令によって要求される全ての値を再発行することである。この方式では、命令がデコードされるとすぐに、各命令のソースレジスタアドレスをレジスタファイルに送る必要がある。このための通信パスは、本発明の好ましい実施例に含まれている。
【0052】
再発行のための他の方式は、どのレジスタ値が現在パイプラインで再計算されているかについてパイプラインにおいて初期に記録しておくことを必要とする。各命令がデコードされると、そのデスティネーションレジスタは注目され、その識別の記録が保持される。これらのレジスタの値は、最後には結果パスに戻る。値が戻るまで、値は、これを必要とする任意の後の命令に対してパイプライン内で使用可能である。この機構によってプロセッサは、命令によって要求され、かつ既にパイプライン内で使用可能でないと識別されたレジスタのレジスタ値のみの再発行を要求することができる。これは好ましい実施例の機構である。
【0053】
特別のレジスタ
ほとんど全ての命令セット定義は、一定命令、例えば、コンディションコード(CC)及びプログラム状態語(PSW)によって選択的にアクセスされ得る幾つかの特別のレジスタを有する。カウンタフローパイプラインプロセッサでは、これらのレジスタは、汎用レジスタと全く同様に扱われ得る。これらのレジスタからのデータを使用する命令は、あたかも命令がソースレジスタとして特別のレジスタを使用するかのように処理され得る。特別のレジスタを変更する命令は、あたかも特別のレジスタがデスティネーションであるかのように処理され得る。これらの特別のレジスタは、マシンにおける他のレジスタと一緒にレジスタファイルに記憶され、他のレジスタと同様に、必要とされるときアクセスされる。
【0054】
コンディションコード
一つの共通の特別のレジスタは、コンディションコードと呼ばれる。これらは、最後の演算がゼロ(Z)、負値(N)を発生したか、オーバーフロー(O)を生じたか、又はキャリー出力(C)を発生したかを一般に記録する。SPARC命令セットを含む多くの命令セットでは、ZNOCビットは4ビットレジスタとして扱われ得る。これを計算することによって、コンディションコードをセットする任意の算術演算は特別のデスティネーション、すなわちコンディションコードを有する。コンディションコードをテストする任意の演算は特別のソース、すなわちコンディションコードを有する。このコンディションコードの処理は、これらの値が他の計算された答え値と全く同様に結果パイプラインに流れることを可能にする。いつでも、命令のために計算された幾つかの異なる命令の出力に対応している、結果パイプラインにあるコンディションコードの幾つかの異なる値がある。
【0055】
プログラム状態語
他の共通の特別のレジスタはプログラム状態語(PSW)である。このレジスタはある特殊命令のみによって使用され、かつセットされる。にもかかわらず、他のレジスタと全く同様に扱われ得る。プログラム状態語は、一般にマシンの動作モードについての情報を含んでいる。例えば、マシンは今回割り込みに応動するか、特権命令を実行できるか等である。
【0056】
プログラム状態語のコピーをパイプラインに沿ってに配置することは、カウンタフローパイプラインプロセッサでは十分に許容可能である。これらのコピーは、PSW結果パッケージが到達すると、変更されるだろう。したがって、時宜を得た方法で最新のコピーを保持する。これらは、任意の命令が新しい値を再発行するかもしれないコピーを渡すときはいつでも、古いものとされるだろう。
【0057】
トラップ及び例外
パイプラインの発端でなく終端にレジスタファイルを配置することの他の重要な利点は、規則的な命令の流れにおいてトラップ及び他の例外を処理するときに存在する。異常な状態がコンピュータのある部分で起こると、トラップ又は割り込みが発生する。例えば、無意味な答えが得られる0による割り算は、大抵のコンピュータではトラップを引き起こす。同様に、不適当なメモリアドレスを参照することもまたトラップ又は割り込みを引き起こす。プログラムは、トラップ又は割り込み以前の命令が、割り込みが作動される前に完了され、それに続く命令が、割り込みがサービスされるた後まで待つだろうことを期待する。
【0058】
全ての種類のパイプラインプロセッサは、あたかもパイプラインが存在せず、各命令は次を開始する前に完了されたかのようにトラップ及び割り込みを処理しなければならない。コンピュータファミリの命令セットのために記載されたプログラミングモデルは、ここで記載されたものを含む多くのパイプラインでは、たとえ幾つかの命令が直ぐに実行されるか又は命令が順序が狂って実行されるとしても、一度に一つ命令の実行を考慮する。トラップ又は割り込み以前の命令が全て完了され、かつその後、それらは完了されなかったかのように作動するコンピュータを設計することは、命令が同時に実行されるか又は順序どおりでなく実行されるとき非常に難しい仕事である。
【0059】
パイプラインの終端にレジスタファイルに配置することによって、本発明は、トラップ又は割り込みを処理するのに要求される演算を一般に簡単にする。完全に処理され、かつ首尾よく処理された命令だけがレジスタファイルに到達し、それに結果を記録する。レジスタファイルにまだ到達していない全ての命令は、いつでも放棄され、トラップ又は割り込みが処理された後、再始動される。
【0060】
カウンタフローパイプラインプロセッサでは、特定命令がトラップを引き起こすならば、このような困難を発見したステージは、特別の種類の“トラップ”結果を結果ストリームに挿入する。トラップ結果は、それがパイプラインで全ての後の命令と出会うとき全ての後の命令にトラップの発生を知らせる。それが命令とどこで出会っても、出合われた命令は、無効とマークされるか又はパイプラインから削除されるかのいずれかが行われる。マーキング又は削除によって、このような命令は、レジスタファイルの内容を変更することを防止され、よってコンピュータの成功した動作の永久記録にいかなる影響も与えない。
【0061】
同一のトラップ結果は、どの命令が障害及び故障の種類を引き起こすかについての情報をそれとともに伝える。最後には、トラップ結果は、障害を引き起こすもの次の任意の命令を全パイプラインから追い出した後、パイプラインの下部にある命令取り出し機構に到達するだろう。この命令取り出し機構は、すぐにトラップハンドラから命令を取り出し始めることができる。トラップハンドラが完了し後、トラップ結果が、プログラムが再開できる点を識別しているため、命令取り出し機構は、命令取り出しを再開し、障害を引き起こした命令から開始する。
【0062】
詳 細
ステージの垂直配置
本発明による汎用コンピュータのための基本構成は、図1に示すようにカウンタフローパイプライン40を形成する複数のステージ20〜32からなる。各ステージは、パイプラインにおいて上下のステージと双方向に通信する。図1は、情報がステージを通して上下に流れるように互いの上に連続するステージによって示されている。もちろん、実際のマシンでは、物理的通信パスの幾何学によってどんな方向にセットされても情報が流れ込むことが認識されねばならない。この図において、図1の垂直配置及びフローの方向“上”及び“下”の使用は、単なる説明の便宜のためである。
【0063】
命令は上向きに流れ、結果は下向きに流れる
図1の矢印の方向で示すように、命令に関する情報は、パイプラインにおいて上向きに流れ、完了された命令の計算結果に関する情報は下向きに流れる。実際のマシンでは、フローの方向は重要でないけれども、パイプラインにおける命令のスナップ写真が撮影できたとすると、その写真はプログラマによって一般に使用されるような命令のリストに似ているから、命令が上向きに流れるものとして考えるのが、パイプラインの動作を理解するのに便利である。スナップ写真及びリストの両方とも、後の命令は、前の命令の下に現れる。命令は、パイプラインの下部端に入り、パイプラインを通して上向きに流れる、そして完全に処理されると、パイプラインの上部端に存在する。
【0064】
図1に示されるようなパイプラインプロセッサでは、パイプラインの下部端にある命令取り出し機構34は命令をパイプラインの下部に送り込むのに役立つ。この命令取り出し機構は、命令メモリローンチステージ20、命令キャッシュメモリ36及び命令メモリリターンステージ22からなる。特に図示されていないプログラムカウンタは命令メモリローンチステージ20の一部である。
【0065】
種々の命令取り出し機構が、今日、コンピュータに使用されている。図1に示すために選ばれた形は、使用されたかもしれない種々の機構の1つである。その機能は命令をステージ22にあるパイプラインに導入することである。
【0066】
命令がパイプラインの上部端にあるレジスタファイル制御ステージ32に到達するとき、命令が計算したか又はメモリから検索した値が、パイプラインの上部端に示されたレジスタファイル50に記録される。完全に実行された命令だけがパイプラインの上部端に存在する。レジスタファイル50は値を記憶し、要求のあり次第、パイプラインの結果側にその値を導入することができる。
【0067】
通信パス52は、デコードステージ24とレジスタファイル50との間に示されている。使用されるとき、このパス上の信号は、名前又はアドレスで、その値が下向きに流れる結果ストリームに再導入されるべきであるレジスタファイルにおけるレジスタを識別する。
【0068】
メモリ及びデータキャッシュ
主メモリ60及びデータキャッシュ62が図1に示されている。これらの動作は、以下に詳述される。データメモリ・ローンチ・ステージ26及びデータメモリリターンステージ30に接続されているデータキャッシュが、図1に示されている。これらの構成要素の多くの配置が、当業者に明らかなように可能である。
【0069】
図1に示されたデータキャッシュ及び主メモリの接続は次のように作動する。メモリからの情報を要求する命令がデータメモリローンチステージ26に到達すると、その要求はパス61を介してデータキャッシュ62に信号が送られる。その間に、命令は、それが答えを待っているステージ30にパイプラインを上流に自由にどんどん先に進む。答えが見つかると、データキャッシュは、パス63を介してデータメモリリターンステージ30に要求される情報を送る。このパス63で情報は、それを要求した命令と再結合する。データがデータキャッシュで使用不可能ならば、データキャッシュは主メモリにおける情報を探す。万一情報がそこで使用不可能ならば、トラップリターンが、マシンのトラップ動作が後述されるように呼び出されるだろうところのステージ30で待っている命令に与えれるだろう。
【0070】
パイプラインは、部分的に処理された命令を各ステージに記憶することができるため、図1のデータキャッシュ62、主メモリ60、及びパイプラインステージ26及び30の構成は、一度に3つのしがかりのメモリ参照があることを可能にする点に注意されたい。3つのメモリ参照がしがかり中であるとき、関与している3つの命令はステージ26、28及び30にあるだろう。命令がステージ30の命令に答えを戻すまで、わずかに命令はデータキャッシュにアクセスできるにすぎない。図9に関連して、別の未完了のメモリ命令を可能にするメモリ部の他の構成を後述する。
【0071】
パイプラインにおける通信
通信パス100及び102は、図1の各ステージ対間に示されている。通信パス100は、命令をパイプラインの上流に送るために使用され、通信パス102は、結果をパイプラインの下流に送るために使用される。これらの通信手段は、各ステージ対間にある通信制御装置38によって制御される。通信は、前述の同時係属出願「カウンタフローパイプライン」に記載されている規則に従う。各ステージ対間の制御装置38は、競合要求が、出願「カウンタフローパイプライン」に記載されているような“カウンタ同期比較”を提供するような方法で満たされることを確実にして、情報を順序正しく上下に進行させるために設けられている。
【0072】
単一ステージのレジスタ構成
本発明により形成されたパイプラインでは、ステージは基本構成において互いに全く類似している。典型的な構成は、典型的なパイプラインステージ28のより詳細図である図2に示されている。ステージは、主に隣接ステージと、図1で既に示され、図2に一部示されている通信パス100及び102に沿って両方向に通信する。
【0073】
通信パス100を通して下から上に流れる命令は、レジスタ装置104で捕らえられる。典型的な命令の構成は、命令コードOP及び3つの同様なレジスタ部からなる装置104に示されている。3つのレジスタのうちの2つはソースレジスタのためのもので、1つはデスティネーションレジスタのためのものである。多数のソースレジスタ及びデスティネーションレジスタを適用し得るが、説明のために3つだけが示されている。示されている3つのレジスタ部は、下記のようになる。rd=デスティネーションレジスタ名又はアドレス及び付加妥当性ビット、rdd=デスティネーションレジスタ値(既知ならば)、r1s=第1のソースレジスタ名又はアドレス及び付加妥当性ビット、r1sd=第1のソースレジスタ値(既知ならば)、r2s=第2のソースレジスタ名又はアドレス及び付加妥当性ビット、r2sd=第1のソースレジスタ値(既知ならば)。
【0074】
同様に、通信パス102を通して上から下に流れる命令は、レジスタ装置106で捕らえられる。典型的な結果パッケージの構成は、レジスタ装置を表すボックスの中に示されている。図示されるように結果パッケージは2つの結果値を含んでいる。多数の結果値は結果パッケージで使用される。説明のために2つだけが使用される。示されている結果パッケージは次のものを含む。rr1=第1の結果レジスタ名又はアドレス(既知ならば)及び付加妥当性ビット、rr1d=第1の結果レジスタ値(既知ならば)、rr2=第2の結果レジスタ名又はアドレス(既知ならば)及び付加妥当性ビット、rr2d=第2の結果レジスタ値(既知ならば)。
【0075】
各ステージは命令セットのある一部を実行する
図2は、命令修正装置108、関数計算ボックス110、結果修正装置130及びこれらの間の通信パス112、114、116及び128を示している。種々の動作が起こるとき示される制御パスは、図示されていない。
【0076】
本発明のパイプラインでは、パイプラインの異なるステージは、マシンに使用可能である全命令セットの異なる部分を実行することができる。図2に示されるように、適当な値を計算することができる回路は選択されたステージに含まれる。幾つかのステージは全く計算も行わない。幾つかの実施例では、単一のステージは計算の全てを行うが、しかし通常、異なる種類の計算動作は異なるステージで行われる。もちろん、あるステージは使用されるべきである各命令の種類を実行することができなければならないが、しかし一つのステージも命令の種類を実行する必要がない。その上、命令の種類のどれか一つ実行することができる複数のステージがある。例えば、幾つかのステージは加算ができることで有用であることが分かるかもしれない。ステージ間のこれらの差異の詳細は、ステージ間で非常に異なっている関数ボックス110の特別の細部に一般に依存する。レジスタ104及び106、及び修正ボックス108及び130は、ステージ間で類似している。
【0077】
結果パッケージ修正
図3は、結果修正ボックス130の内容を示している。図2のレジスタの現在値を示す情報は、その構成部分にして示された通信パス128の上部からこの装置に入力する。図3の結果修正ボックス130の目的は、その情報の多く又は全てを要求されるような命令からの情報と置換することにある。
【0078】
2つのマルチプレクサ132及び134は、その構成部分として示された出力パス102の下流のステージに送るためにその3つの入力のうちの一つを選択する。したがって、通信パス102を介して下流に送られる次のステージへの出力結果値は、このステージで保持されるrr1d及びrr2dと呼ばれる入力、rddと呼ばれてこのステージで計算され、かつ通信パス114で送られる予め保持されたデスティネーション値、ridと呼ばれてこのステージで計算され、図2の関数ボックス110からの通信パス112で送られ、かつレジスタ手段142に保持される値のいずれかを入力する。
【0079】
2つのアドレス又は名前比較ユニット136及び138は、現在の結果rr1d及びrr2dのアドレス又は名前と命令の現在の結果rd及びriとを比較する。これらの比較の結果は、図示されているようにマルチプレクサ132及び134を制御する。比較ボックス136及び138は、マルチプレクサのために選択する選択の範囲と一致する出力通信パス102に、名前情報又はアドレス情報を送る。
【0080】
命令パッケージ修正
図4は、図2に示された命令修正ボックス108の内容を示している。レジスタ104からのデータパス114は、構成部分として図4の下部に示されている。出力通信パス100は図4の上部に示されている。関数ボックス110への通信パス116、118及び120は図4の右側に示されている。
【0081】
マルチプレクサ123及び関連制御装置122は、図の上部でデスティネーション出力rddを形成するのに役立つ。デスティネーション出力rddは、前のステージから送られて図の下部に入力する情報、又は通信パス112を介して関数ボックスからの代替デスティネーション情報のいずれかを示す。いずれの場合も、デスティネーションアドレスrdは、多分妥当性ビットを修正する制御装置122によってコピーされる。
【0082】
制御装置124は、現在の命令のソースレジスタ名又はアドレスr1sと結果パッケージのレジスタ名又はアドレスrr1及びrr2とを比較する。一致する場合、マルチプレクサ125は、結果パッケージrr2d又はrr1dからの正しい新しい情報に代える。合致しない場合、前の値r1sdは上向きに送られる。制御装置126及びマルチプレクサ127は、第2のソース値のための同一関数に役立つ。
【0083】
レジスタ・レジスタ命令
本発明を理解するために、最新のコンピュータに使用される命令の共通の形式を理解しなければならない。その内容が大抵の命令を実行するときに使用される数十のレジスタのファイルを含むことは、最新のコンピュータでは普通である。各命令は、実行されるべき演算を指定し、かつ命令が実行されるべきであるレジスタファイルから1つ以上のレジスタを識別する。指定されたレジスタの幾つかは、命令のためのソースデータを保持し、指定されたレジスタの幾つかは、演算の結果として計算された値のためのデスティネーションである。例えば、SPARCアーキテクチャマニュアルで特定されている一つのフォーマットの命令は、その合計が所望されている2つの値を提供する2つのソースレジスタ及び加算の結果を入れる単一のデスティネーションレジスタを参照する。
【0084】
最新のコンピュータファミリための命令セット、例えば、SPARC命令セットは、指定レジスタの内容で異なる算術演算及び論理演算を実行するために多数のこのような演算を含んでいる。例えば、固定小数点加算、乗算、除算、論理シフト及びマスク処理が含まれている。多くのマシンはまた、同様な方法で別々のレジスタセットを参照する浮動小数点算術演算を含んでいる。
【0085】
ほとんど最新のマシンでは、主メモリを参照する命令は、レジスタファイルに記憶された値に関しても、そのようにする。例えば、SPARC命令セットでロードと呼ばれる命令は、一つのレジスタの内容を、そこから情報を取り出し、取り出した情報を他のレジスタに配置する主メモリにおけるアドレスとして使用する。したがって、メモリ演算の形式は、ソースレジスタ及びデスティネーションレジスタの両方をアクセスする算術演算の形式と同一である。新しいデータを見つけるために使用される機構のみが違っている。算術演算の場合、計算回路は新しい値を見つける。メモリ演算の場合、新しい値は大容量メモリにおけるルックアップによって見つけられる。
【0086】
各命令は、その命令によって使用され又は影響されるだろうレジスタを指定する。指示は、レジスタセットから特定のレジスタを独特に記述する2進コードである。SPARC命令セットでは、例えば、各レジスタを指定する2進コードは、5ビット長である。
【0087】
本発明の目的のため、レジスタ指示がいかに符号化されたかは重要でない。しかしながら、符号化されたその特定の指示を意味するレジスタの“名前”又はレジスタ“アドレス”をここで、参照する。レジスタの名前又はアドレスは、それを他の同様なレジスタと区別する単なる指示であることを思い出すことが重要である。
【0088】
レジスタとしてのコンディションコード
大抵の最新のマシンは、コンディションコードと呼ばれる数ビットによってそれらが処理される数について少数の簡単な事実を報告する。4つのコンディションコードは、一般に、(1)結果がゼロ(Z)であるかどうか、(2)結果が負(N)であるかどうか、(3)実行された算術演算又は論理演算がオーバーフロー(O)を生じたかどうか、及び(4)実行された算術演算がキャリー(C)を生じたかどうかを指示するために使用される。
【0089】
本発明により形成されたパイプラインプロセッサでは、このようなコンディションコードは、便宜的にレジスタとして扱われる。コンディションコードを発生する命令は、あたかもコンディションレジスタが付加デスティネーションレジスタであるかのように扱われる。入力としてコンディションコードを使用する命令は、それをソースレジスタ値として扱う。コンディションコード自身は、他のレジスタのコンディションコードと同様な名前又はアドレスを与えられる。レジスタアドレス比較回路は、丁度他のレジスタ値のようなコンディションコードを扱う。コンピュータのレジスタセットにおける単なる他のレジスタのようなコンディションコードのこの見方は、普通でない。大抵のマシンにおけるコンディションコードは、特別の重要性を保有していると考えられているため、それらは、しばしば、他のレジスタとは別々に扱われる。したがって、SPARC命令セットは、命令が2つのソースレジスタの内容を結合して、単一のデスティネーションレジスタに入れる“3アドレス”命令セットとして一般に考えられている。しかしながら、いくつかの命令が、2つのソースレジスタ値及び古いコンディションコード値を結合して、新しい演算の答え及び新しいコンディションコードセットの両方を生じるので、SPARC命令セットは“5アドレス”命令セットである。本発明では、コンディション値は、構成において有益な単純化が行われるならば、他のレジスタと丁度同じように扱われる。
【0090】
最少規則
カウンタ同期比較
本発明の非常に有用な特徴は、各ステージが、上向きに流れる命令パッケージにおけるレジスタ名と下向きに流れる結果パッケージにおけるレジスタ名とを比較する回路を有することである。レジスタ名が一致する場合、ステージは、下向きのデータから情報を上向きの流れにコピーするか、又は、一方もしくは他方の方向のデータを削除するかあるいは削除するためにマークする。結果として、本発明では、パイプラインの幾つかのステージのそれぞれにおいて別々に実施されている簡単なローカル演算は、最新のコンピュータの必要とされる複合動作を適切に実施できる。カウンタフローパイプライン制御システムは、“カウンタ同期比較”のために設けられているため、このような簡単なローカル機構は、予想どおり機能する。カウンタ同期比較は、上向きに流れる命令をすべて、下向きに流れる結果の全てと強制的に出会わせ、かつ相互作用させ得ることを確実にする。
【0091】
データパス回路
同時出願に記載されている制御機構は、カウンタ同期比較が実行できることを確実にする。図5には、汎用コンピュータで典型的な比較を行うアドレス比較回路又は名前比較回路が示されている。好ましくは、パイプラインの各ステージには、適切な制御及びこの最少比較装置を含んでいるので、どの命令もみな適切に処理される。
【0092】
比較回路は、ソース及びデスティネーションを比較する多数の比較回路(150、152及び154が図示されている)からなる。これらは、図2、図3及び図4に関して一部既に記載されているような命令保持レジスタ104と結果保持レジスタ106間に接続されている。ここで、図5には、その機能をよりはっきりと示すために比較回路を示している。
【0093】
命令パッケージ104におけるアドレス部又は名前部のそれぞれは、結果パッケージにおけるアドレス部又は名前部のそれぞれと比較されなければならない。図5では、図2に示されている二重結果パッケージと対比すると、単一の結果レジスタを有する一つの結果パッケージが示されている。これらの比較回路151、153及び155の結果は、システムを通してデータの流れを制御する制御回路156に送られる。図3でこの例は、既に示されている。比較装置150は、図3に示された比較及び制御装置136の一部である。同様に、比較装置152は、図4における比較及び制御装置124の一部である。同様に、比較装置154は、図4における比較及び制御装置126の一部である。
動作では、比較回路は、制御回路156によって作動される幾つかの場合を示している。
【0094】
不一致
比較は、結果のレジスタ名と命令を伝えるソース及びデスティネーション名前間の不一致を示すことがある。この場合、結果は、後の命令と比較されるように下向きに送られる。
【0095】
ソース一致
比較は、結果のレジスタ名と命令を伝える1つ以上のソースオペランドレジスタ名間の一致を示すことがある。この場合、ステージは、結果によって伝えるデータをコピーしてソースオペランド値ために命令における予約場所に入れる。これは図4のマルチプレクサ125及び127によって行われる。この処理は、“蓄積”と呼ばれる。これを、命令が、結果ストリームから必要とする値を“蓄積”すると言う。
【0096】
デスティネーション一致
比較により、結果パッケージにおけるレジスタ名と命令パッケージにおいて伝えられるデスティネーションレジスタ名間の一致が示される場合、命令は、デスティネーションレジスタのための新しい値を有するか又は計算するかのいずれかである。この命令に続く命令は新しい値だけに応ずる。したがって、古い値は結果ストリームから取り除かれるか又は無効とマークされるかしなければならない。どちらの場合も後の命令に影響を及ぼさない。
【0097】
デスティネーションが一致する場合、このような一致を有する命令が既に完了しているならば、一致されたレジスタために計算されたより新しい値がその結果パイプラインを通して既に下向きに送られていることに注目すべきである。それによって新しい結果は、新しい値を続く命令に既に送っている。このような一致を有する命令が未だ実行されていないならば、それは、後ほどその出力を結果ストリームに送る、よって順次それに続く命令に送る。どちらの場合も、前の命令から生じるように一致された結果は、同一のデスティネーションレジスタための値を有するか計算するだろう命令の存在によって古いものとされる。
【0098】
機能停止
本発明により形成されたコンピュータでは、命令は、それがパイプラインのステージを通過するときソースデータを蓄積する。命令は、行き合う反対方向に流れる結果からこのソースデータを収集する。最後に、各命令は、それを実行することができるパイプラインのステージに到達する。命令が既に必要とされるソースデータの全てを蓄積していたならば、それは直ちに実行される。しかし、必要とされるソースデータの幾つか又は全部は消失されているかもしれない。
【0099】
必要とされるソースデータの幾つか又は全部が消失されているならば、2つのことのうちの一つが起こる。パイプラインの後のステージは必要とされる値を計算することできるならば、命令は、その別のステージで実行されるべきパイプラインを通して上向きに送られる。しかしながら、命令がそれを実行することができるパイプラインにおける最後のステージに既に到達していて、命令がなおソースデータの幾つか又は全部を消失しているならば、その命令は、ソースデータが結果パイプを介して到達するまでそこで待たなければならない。このような遅延は“機能停止”と呼ばれる。
【0100】
このような機能停止は、本発明の場合では、それが純粋にローカル事象であり得ることを除けば、他のプロセッサにおける機能停止事象と同様である。パイプのどこかで1つのステージがただ機能停止しただけであるため、全パイプラインを機能停止する必要はない。その関数を実行するか又はデータを前に又は結果を後ろに送るために他のステージのためのパイプラインに十分な空のスペースがあるならば、他のステージは依然として自由にそのように行える。本発明のパイプラインの設計においては一般的なグローバル機能停止を必要とするものは何もない。従来のパイプラインにおいて機能停止状態を認識し、作動する回路は、このようなシステムの速度においてはしばしば制限要因であるため、これは相当な長所である。
【0101】
弾力的である、すなわち要求があり次第余分のデータを吸収又は送ることのできる空のスペースを有しているパイプラインプロセッサをいかに設計するかは、当業者に周知である。本発明のパイプラインにこのようなバッファを入れることによって、幾らかのローカル機能停止が発生したとしても、機能停止によって影響を受けない部分は作動し続ける。もちろん、機能停止が十分長く存続するならば、パイプラインにおけるどこかでの機能停止は、最後には全パイプラインを停止させるだろう。しかしこのような事象はまれである。
【0102】
レジスタファイル及びレジスタキャッシュ
ここで、開示したパイプラインプロセッサの簡単な形式は、過去の命令だけからの結果をパイプラインの上部にあるレジスタファイルに記憶する。ソース値を必要とする命令は結果ストリームからの命令を蓄積する。このような結果は、もしこれが別の方法で使用可能でないならば、レジスタファイルからの結果ストリームを入力しなければならない。おおくの命令は2つのソース値を必要とするため、これはレジスタファイルからの値に対して大きな要求を発生する。
【0103】
プログラムの統計的分析により、レジスタのサブセットはその他のものよりも非常にしばしば使用されることが示される。しばしば使用されるレジスタの値を早くパイプラインに記憶させることによって、より精巧な設計は、レジスタファイルからの情報に対する要求を減少させる。このような機構を“レジスタキャッシュ”と呼ぶ。このようなレジスタキャッシュを有するパイプラインは図6に示されている。
【0104】
図6では、レジスタキャッシュ160は、通信パス162によってレジスタキャッシュインターフェースステージ25に接続されている。レジスタキャッシュインターフェースステージは、その動作を制御するために通信パス52によってレジスタファイルに接続する。図6では、単一のレジスタキャッシュはデコードステージ24の丁度上に示されている。これはレジスタキャッシュを配置する妥当な場所であるけれども、それは決して唯一の可能な場所ではない。パイプラインにおいて、レジスタキャッシュを配置するのに便利なところはどこでも1つ以上のレジスタキャッシュが配置される。いかなる方法でも、レジスタキャッシュを含ませることは、パイプライン動作の正確さを変えない。レジスタキャッシュは、随分前に計算された結果をレジスタファイルで探す必要がある機会を減少させることによってマシンの速度を速めることをただ助けるだけである。
【0105】
幾つかのレジスタキャッシュのそれぞれは、レジスタファイルにおけるレジスタのサブセットための値を記憶する。これらのサブセットは部分的に重なるかもしれないし又は重ならないかもしれない。その最新の既知値がキャッシュに記憶される特定のレジスタの名前又はアドレスは一定であるか又はキャッシュに記憶されているサブセットは動的に変化する。可能な構成数はエンドレスである。何か特定の応用のために最も費用がかかる有効な装置の選択は、各構成が提供する性能上の改良の詳細な統計的研究を必要とする。
【0106】
ソース一致
レジスタキャッシュは次のような2ステップで機能する。第一に、レジスタキャッシュにおける有効レジスタのレジスタ名又はレジスタアドレスは、ステージ25で保持される命令におけるソースレジスタ名又はレジスタアドレスと比較される。一致がある所はどこででも命令は、それをコピーすることによってキャッシュからの値を蓄積する。
【0107】
デスティネーション一致
第二に、命令のデスティネーションレジスタ名は、レジスタキャッシュに保持される全てのレジスタ名と比較される。一致が見つかった任意のレジスタ名は、次のようなレジスタキャッシュの内容又は状態に変化を引き起こす。もし命令が既にそのデスティネーションレジスタのための値を計算したならば、その値はコピーされ、レジスタキャッシュに入れられ、かつ有効とマークされる。もし命令がそのデスティネーションレジスタのための値をまだ計算されていないならば、対応するレジスタキャッシュエントリは無効とマークされる。
【0108】
結果一致
結果がレジスタキャッシュに送られるとき、それはまたレジスタキャッシュの状態又は内容を変更する。もし一致が、結果の名前とレジスタキャッシュにおけるレジスタ名の間で見つかったならば、結果からの値は、コピーされレジスタキャッシュに入れられ、そのレジスタは有効とマークされる。
【0109】
命令削除
トラップ
トラップ及び割り込みは、最新のコンピュータの設計において連続する難事の原因である。本発明により形成されたパイプラインでは、トラップ及び割り込みは容易に処理される。トラップを生じる命令は、トラップそのものを、あたかもそれが特殊な種類の結果であったかのように扱い、それを結果ストリームに挿入する。トラップの結果がパイプラインを通過すると、それは、それが出会った命令を、命令パイプラインから命令を取り除くか又は命令に無効とマークするかのいずれかによって削除する。
【0110】
図7A及び図7Bは、本発明のパイプラインにおけるトラップの動作を示すことを意図している。ステージ27〜41を有するパイプラインが示されている。各ステージの左部は、その命令内容を示し、各ステージの右部は、その結果内容を示している。図7Aでは、命令I1〜I6は、選択されたステージにおいて、パイプラインが動作している場合を示している。ステージ27及び31は、たまたま命令を含んでいない。単一の普通の結果R1はステージ31における一つの位置を占有する。
【0111】
図7Aは、トラップ結果がその長さに沿って部分的な通路に送られた後の典型的なパイプラインの状態を示す。トラップを引き起こす命令I2はステージ39に示されている。トラップ結果は、2つのステージを下向きに移動してステージ35に到る。トラップI2を引き起こした命令及びトラップ結果によって送られた他の命令I3及びI4は、その名前に斜線を引くことによって図に示されるように無効とマークされる。それらは、その後、パイプから取り除かれる。
【0112】
図7Bは、トラップ結果がさらにパイプラインの下端の方へ移動した後の同一パイプラインの状態を示す。このトラップはステージ29に到達した。その前方に下向きに移動する結果RIは視界から見えなくなった。トラップが渡した命令は、主としてパイプラインを空のままにしておいて、全てパイプラインから取り除かれる。新しい命令I7は、丁度パイプラインに入るが、しかし、トラップが最初に移動するならば、ステージ27で、又は命令が最初に移動するならばステージ29でのいずれかで複数の命令が出会うやいなやトラップによって削除されるだろう。
【0113】
図7Aと図7B間の時間分離は任意である。特定のパイプライン設計では、命令は結果よりも早く又は遅く移動する。したがって、ここで、図示されているのは動作を表しているだけである。当業者は、いかにトラップが特定の命令と相互作用するかの他の最もらしいシナリオをもたらすことが容易にできる。トラップの前方の命令は、パイプライン及び結果パスのこれらの部分の相対速度によりさらに進んで又はより少なく移動する。トラップは、トラップ及び命令の相対伝搬速度によりパイプラインにおいて早かれ遅かれ近づいてくる命令と出会う。
【0114】
トラップ結果が、パイプラインの下部にある図1の命令取り出しユニット34に到達すると、命令取り出しユニットはトラップロケーション又は割り込みロケーションから命令を取り出し始める。したがって、トラップ後の全ての命令は取り除かれ、レジスタファイルの内容を変える。トラップ以前の全ての命令は、もちろん、通常の方法で完了し、その結果をレジスタファイルに正しく配置したままである。
【0115】
推測実行
本発明では、トラップによる不所望命令の削除を可能にする同一の機構は、推測実行ために不適当に発行された命令を削除するために使用され得る。図1の条件付きブランチ取り出しユニット34は、可能な後続命令ストリームの一方又は他方から命令を取り出し、これらを推測的に発行してパイプラインに入れる。そのように発行された各命令は、条件付きブランチの2つの結果のどちらがそれを許容可能にするか、どちらがそれを古いものと認定するかを識別するためにマークされる。
【0116】
条件付きブランチ命令は通常のようにパイプラインを上流に進行する。条件付きブランチ命令は、その結果のどれが推測発行のために選択されるかを示す情報を伝える。条件付きブランチ命令は、そのソースデータとしてデータ要素の値又はそれがテストすることであるレジスタの値を必要とすることに注意されたい。最後には、条件付きブランチ命令は結果ストリームからのその値を蓄積する。そのようにするならば、条件付きブランチ命令は、実行する用意ができている。
【0117】
条件付きブランチの実行
条件付きブランチの実行は任意の他の命令の実行と非常に似ている。命令タイプ及びソースデータに基づいて、条件付きブランチを実行するステージはその結果を決定する。この結果は、前述のトラップ結果と非常に似ている特別の結果として結果パイプに挿入される。条件付きブランチの結果の結果は、推測で不適当に発行された全ての命令を選択的に削除するために下流のステージによって使用される情報をそれとともに伝える。条件付きブランチの結果の結果が命令取り出し機構に到達するとき、命令取り出し機構は、連続命令取り出しのための適当なアドレスを伝える。もちろん、推測が正しかったならば、このような特別な結果が省略される。
【0118】
本発明に使用されるカウンタフローパイプラインのカウンタ同期比較特性は、パイプラインを下流に移動するあらゆる結果が、上流に移動するあらゆる命令に出会うことを確実する。したがって、条件付きブランチ結果は、それが命令取り出し機構に到達するまでどの後の命令もみな相互作用する。したがって、命令が必要とされるならば、いかなる命令も削除を免れられない。
【0119】
サイディング
同時出願におけるカウンタフローパイプラインの記載は、分岐されたパイプラインの説明を含んでいる。この節では、本発明の特別な特徴を示すためにこれらのアイデアを幾分専門的な形で時々使用する。
【0120】
通常、任意の命令セットに含まれる幾つかのタイプの算術演算及び論理演算がある。本発明により形成されたパイプラインでは、各々のこのようなタイプの命令は別々のステージで実行される。例えば、単一ステージはシフト演算に当てられる。シフト演算は比較的まれであるため、このステージはパイプラインを通る情報の流れを滑らかにするために他の演算のためのバッファステージとして役立つ。
【0121】
乗算のようにより長くかかる非常に難しい算術演算に関しては、分岐するパイプラインが使用される。図8は、乗算及び加算を実行するために使用される2つの算術“サイディング(siding)”のブロック図である。4つのパイプラインステージ47、49、51及び53が含まれる。含まれる計算素子は、任意の所望の計算を実行できたけれども、説明に役立つために、乗算器170及び加算器176がまた示されている。乗算器170及び加算器176又は他の計算素子が含まれるものは何でも米国特許第5,187,800号明細書等に記載されているようなパイプライン型装置である。乗算器及び加算器の唯一の重要な特徴は、その入力にオペランドを与えると、最後にはその出力に結果を生じることである。それらはそれ自身パイプライン型装置であるならば、それらは、それらの第1の出力セットを生じる以前に付加的入力セットを受け入れることができる。
【0122】
図8に示されるように、乗算器は、主パイプラインのステージ47からステージ51まで延び、加算器は、ステージ49からステージ57まで延びる。スパンの範囲、すなわち計算素子、この場合、加算器及び乗算器が延びるパイプラインのステージ数は、設計するのに便利であれば何でもよいことを理解しなければならない。この範囲は、含まれる関数の最も高速な実行又はより安価な実行のために選択されるだろう。
【0123】
単一のサイディングの動作
図8の構成は、次のように動作する。ステージ47に到達する乗算命令は、それがそのソースデータ値の全てを蓄積してしまうまで待つ。乗算器の入力に接続されたステージ47は、次に、データパス172上の乗算器にソース値を送ることによって乗算演算を開始する。これは、前述のカウンタフローパイプラインの同時継続出願に記載されている分岐されたパイプラインを修正して使用たものである。これを行った後、次に、ステージは乗算命令を放出して、ステージ49を通って、主パイプラインを上流に進行してステージ51に到る。ステージ51では、乗算演算は積を戻すために乗算装置を待つ。もちろん、よく設計されたマシンでは、命令が2つのステージを前進するのに要する時間は、乗算演算を行うのに要する時間に一致し、計算された積が命令に再結合する前に何らかな待ちが必要であるならば、小さいものである。ステージ51で積が受け取られるならば、乗算命令が実行される。次に、ステージ51は、答えを命令のデスティネーション部及び結果のパイプラインの両方に配置する。
【0124】
インターロックされたサイディングの動作
乗算命令の後に、累積加算命令が続くことがしばしば起こる。このようなプログラムは、多くの数学演算で必要な“積の和”を計算するために一般に使用される。累積加算命令は、新しく形成された積に、レジスタ、例えばレジスタXに記憶されたソース値を加算して、そのデスティネーションレジスタXにその和を戻す。
【0125】
このような命令が与えられたとき、図8に示された演算素子のインターロック配置がいかに動作するかに注目されたい。乗算は前述のように実行される。ステージ51は、乗算命令によって生じた積を、命令が下方に移動し、間もなく加算命令に遭遇する結果ストリームに挿入する。加算命令は、乗算命令の結果なしにその必要なソース値の全てを蓄積することができないため、パイプラインのステージ49を越えて進むことはできない。乗算命令の結果がステージ49おける加算命令に到達するとき、このステージは、加算演算をデータパス178を沿って加算器サイディング176で開始する。加算命令は、次に、ステージ51〜53を通って前進する。加算命令が完了すると、ステージ53は加算命令のデスティネーション部に値を記録し、その上に結果ストリームにもそれを挿入する。それは、結果パイプを下って新しい値を蓄積する次の累積加算命令に進む。
【0126】
その間に、次の乗算命令はステージ47に到達し、その乗算演算を開始している。したがって、計算ステージのインターロック配置は、前の累積加算が終了する前に次の乗算が開始することを可能にする。この演算の重なりは、パイプラインにおける非常に高速な計算を提供する。
【0127】
図8のインターリーブされた構成は、乗算演算及び累積加算演算のシーケンスを必要とする積の非常な高速形成を可能にすることに注目されたい。その上に、結局レジスタXに記憶させる実行和の適性値が、レジスタファイルに参照しないで一つの累積加算演算から次の累積加算演算まで結果パイプラインを下がって送られるため、パイプラインの上部端にあるレジスタファイルへの参照は、完全に避けられることに注目されたい。
【0128】
本発明は、パイプラインの各ステージが特定の命令タイプにある特別の関係を有することを企図する。幾つかのステージは加算し、幾つかはメモリに参照し、幾つかは論理演算を行う。幾つかのステージは、いくつもの演算又は全ての演算さえ実行する結合ステージである。本発明は、ステージにおいて異なる演算の配列を有する多くのステージ配置があることを企図する。例えば、加算器ステージは、本発明の一つの実施例においてシフトステージより先にきて、他の実施例においてシフトステージの後にくる。ステージが演算を実行することができる特定の順序は、実行されるべき命令の細部によって決定されるべきである。多くの異なる配列は異なる目的のため有用であることが分かる。
【0129】
メモリ
図9は、本発明の主パイプラインと主メモリ60の間の好ましい接続を示している。主メモリ60は、一般的形で現在普通に使用されているものと同様で、当業者によく知られている。メモリシステムは、メモリシステム制御190、キャッシュメモリ62及び主メモリ60からなる。メモリシステムは、前述のように主パイプラインのデータメモリローンチステージ26から入力される。
【0130】
メモリ参照命令が主パイプラインのステージ26に到達すると、そのステージは、通信パス196及び制御パス197を介してメモリシステム制御190に命令からのソース情報を送り込む。他のこのような演算に関してのように、命令のためのソース情報が命令において全てまだ使用可能でないならば、そのソース情報が結果ストリームから蓄積されるまで、命令はステージ26で待つ。ソース情報をメモリシステムに送ったならば、ステージ26は、メモリ参照命令がパイプラインを上がって移動することを可能にする。メモリ参照命令は、メモリシステムからの応答をステージ192で待つ。
【0131】
アドレス変換
当業者は、メモリシステムの動作ステップを認識する。メモリシステムは、最初にソース情報をその内容が所望されるメモリアドレスに変換する。最新のコンピュータには使用されている多くの変換方式がある。本発明の設計者は、このシステムの要求に応じて一つの方式を選択する。それらの目的は、もちろん、プログラムに使用されているアドレス値をコンピュータのメモリシステムにおけるロケーションに変換することである。
【0132】
キャッシュルックアップ
次に、メモリシステムは、そのキャッシュメモリにおいてアドレスされたロケーションの値を探す。このような値が見つかるならば、“キャッシュヒット”が発生すると言われ、後述されるように必要なメモリ動作はほとんど終了される。このような値が見つからないならば、“キャッシュミス”が発生すると言われ、メモリシステムは主メモリにおいてこの値を探さなければならない。
【0133】
キャッシュヒット
従来の計算機システムでは、キャッシュミスは、通常コンピュータに報告されない。しかしながら、本発明の好ましい実施例では、メモリ動作を開始した命令は、主パイプラインのステージ192で待っている。もしキャッシュヒットが発生するならば、キャッシュからの取り出された値を示すデータは、パス198を介してステージ192に戻り、メモリ命令が実行される。ステージ192は、その情報を命令のデスティネーション部へコピーし、またそれを結果ストリームにそれを配置する。その結果、メモリ命令は完了し、それがそのデスティネーション値をパイプラインの上部端にあるレジスタファイルにコピーするまで更なる動作要求はない。
【0134】
キャッシュミス
キャッシュミスが発生するならば、メモリシステムは、パス198を介してステージ192にキャッシュミスがあったことを示すメッセージを送る。この場合ステージ192は、メモリ命令を出して、パイプを上向きに移動させるが、しかし命令はまだ完了していない。このようなメモリ命令は、それが、主メモリから戻るために情報を再び待つステージ194に移動する。主メモリへのアクセスが成功するならば、情報は、パス200を介してメモリ動作を完了するステージ194に送られる。このステージ194は、命令のデスティネーション部に戻された値を配置し、それを結果ストリームに挿入する。
【0135】
メモリ障害
要求される情報が主メモリで使用可能でないことが起こる。これが検出されるやいなや、アドレス変換処理の一部として又は主メモリへのアクセス後のいずれかに、障害メッセージが、それぞれパス198を介してステージ192又はパス200を介してステージ194のいずれかに戻される。この場合、トラップが指示されなければならない。前述の如く、ステージ192又はステージ194は、結果ストリームに特別のトラップ結果を配置することによって開始される。
【0136】
サイディング構成の利点
好ましい実施例の構成の一つの利点は、それが、幾つかのメモリ参照が直ぐにしがかり中(outstanding)となることを可能にすることである。メモリ参照命令が主パイプラインのステージ26を離れるやいなや、他の命令がその位置につく。メモリシステムは、幾つかの部分的に処理された参照を同時に含むパイプライン法でこれらの参照を処理することができる。キャッシュヒットを生じさせる参照は、実際ステージ192で完了する。キャッシュミス及び主メモリへのアクセスを必要とする参照は、時間が長くかかり、ステージ194に値を戻す。キャッシュヒットを生じさせる幾つかの命令は、主メモリへの1回以上の参照が進行中、完了することができる。主パイプラインの簡単な構成は、各命令のために取り出されたデータが、命令が正確な順序で実行されるならば、到達するであろうような他の命令だけに到達することを確実にする。
【0137】
浮動小数点
多くの命令セット、特にSPARC命令セットでは、固定小数点演算と浮動小数点演算との区別がされる。別々のレジスタセットが使用され、別々のコンディションコードなどが使用される。
【0138】
固定小数点演算と浮動小数点演算とのこのような区別がされるコンピュータでは、図10に示されるように分岐されたパイプラインが利点を得るために使用され得る。示されているパイプラインは3つの部分に分けられている。第1のセクション204は、固定小数点演算と浮動小数点演算の両方で共通に使用される。2つの上部セクションの一方、例えば、204は固定小数点演算のために使用され、他方208は浮動小数点演算のために使用される。分岐点にある制御機構210は適切な演算タイプを上向きにそれぞれのパイプラインセクションに送る。
【0139】
分岐点で、固定小数点演算が固定小数点パイプラインを上向きに送られ、浮動小数点演算は浮動小数点演算パイプラインを上向きに送られる。これは、前述のカウンタフローパイプラインに記載されているように分岐の種類に依存するデータである。2つの別々の上部パイプラインからの結果は、結合装置211によって多数の方法のどれかで下位結果ストリームに結合される。最初に来たものが最初にサービスされることが適当である。しかしながら、結果は異なるレジスタを参照し、したがって特定な方法で配列される必要がないため、特定な選択は重要でない。
【0140】
浮動小数点を実施するための他の構成が図11に示されている。ここで、単一のパイプラインは2つのレジスタファイルにサービスする。一方のレジスタファイルは浮動小数点演算212のためのもので、他方のレジスタファイルは固定小数点演算214のためのものである。命令が第1のレジスタファイルに到達する時間までに任意の浮動小数点演算が完了する。固定小数点演算はそのソースオペランドの幾つかを蓄積したが、まだ実行されていない。ステージ212とステージ214間のパイプラインの上部は、固定小数点演算を行うことに必要である回路を含む。
【0141】
この分離は、ファミリの幾つかのメンバーは特定の種類の命令を実行でき、その他のメンバーは実行できないコンピュータファミリにおいて特に有用である。ファミリの単純なメンバーは、図11の外部に対して形成され得る一方、より強力なメンバーは付加ステージを含んでいる。多くの種類の特別な演算が浮動小数点演算に加えて使用される。例えば、グラフィック演算、信号処理演算又は特別の論理関数が設けられている。
【0142】
本発明の好ましい実施例は図10に示すような分岐されたカウンタフローパイプラインからなる。
【0143】
分岐されたカウンタフローパイプラインに接続されているのは、図8に示されるような演算のためのサイディングであり、図9に示されるようなメモリのためのサイディングである。固定小数点乗算及び浮動小数点乗算並びに加算のための演算サイディングが含まれる。
【0144】
本発明の好ましい実施例は、図11に示されるような同時継続出願のカウンタフローパイプラインに概説されている通信プロトコルの非同期形式を使用する。
【0145】
非同期通信プロトコルは、それがパイプラインの弾力的な形式を簡単にし、よって要求されるときはいつでもどこでも結果を結果パイプラインに挿入されることを可能にするため、好ましい。通信されなければならないデータを考慮して、それは回路ができるだけ高速に実行することを可能にするために、好ましい。特に、パイプラインが空であるとき、最大データ転送速度を提供する。
【0146】
本発明の好ましい例では、各ステージは必要とされる処理の特殊部分を行う。加算は、他の演算よりも時間がかかるキャリー演算を必要とするため、別々のステージで論理演算と分離される。
【0147】
当業者は多くの他の方法及び本発明を使用する応用を理解するだろう。したがって、本発明の範囲は、前述の詳細な実施に限定されるものでない。
【図面の簡単な説明】
【図1】命令取り出し装置及びレジスタファイルを含む本発明により形成された一般的なパイプラインプロセッサのブロック図、
【図2】隣接ステージに通信パスを示す本発明により形成されたプロセッサの単一ステージのブロック図、
【図3】本発明により形成された単一ステージための結果修正回路のブロック図、
【図4】本発明により形成された単一ステージための命令修正回路のブロック図、
【図5】命令及び結果がいかに比較されるかを示す本発明の典型的実施例の単一ステージにおける命令ラッチ及びデータラッチ並びにアドレス比較回路のブロック図、
【図6】1以上のレジスタキャッシュがいかにパイプラインに配置されるかを示す図、
【図7】どの命令がなお有効であるかを指示するトラップが発生した直後に本発明により形成されたパイプラインの状態を示す図(A)、および、トラップの結果パッケージが使用できない命令を一掃するパイプラインを通して移動した後のこのようなパイプラインの状態を示す図、
【図8】本発明により形成されたコンピュータは、いかに演算要素を組み込んだかを示す図、
【図9】本発明により形成されたコンピュータは、いかにメモリシステムを組み込んだかを示す図、
【図10】浮動小数点演算及びレジスタファイルを固定小数点演算及びレジスタファイルから分離するブランチパイプラインを示す図、
【図11】別々のレジスタファイル及び別々のステージが、浮動小数点演算を固定小数点演算から分離するために使用される単一のパイプラインを示す図である。
【符号の説明】
20・・命令メモリランチステージ、22・・命令メモリリターンステージ、
24・・デコードステージ、25・・レジスタキャッシュインターフェースステージ、26・・データメモリランチステージ、28・・ALUステージ、
30・・データメモリリターンステージ、32・・レジスタファイル制御ステージ、34・・命令取り出しユニット、36・・命令キャッシュ、
38・・制御装置、40・・カウンタフローパイプライン、
50・・レジスタファイル、52・・通信パス、60・・主メモリ、
61・・パス、62・・データキャッシュ、63・・パス、
100,102・・通信パス。
【産業上の利用分野】
本発明は、パイプラインプロセッサ、特にカウンタパイプラインプロセッサに関する。
【0002】
【従来の技術】
パイプラインプロセッサーRISC
多くの最新のマイクロプロセッサは、縮小命令セットコンピュータ(RISC)技術を使用して設計されている。このようなマシンは、比較的簡単な命令セットを使用するが、これらの命令を非常に高速に実行することに注力している。高速動作が、6前後の数のステージのパイプラインを使用することよって高められる。
【0003】
各命令は順次パイプラインに入り、パイプラインにおける各ステージの種々の処理ステップを通過する。始めの部分のステージでは、例えば、命令が、そのための後のパイプラインステージの動作が識別できるようにデコードされる。他のステージでは、命令のために要求されるデータ値はレジスタファイルから検索される。後のステージでは、命令によって要求される算術演算又は論理演算が実行される。
【0004】
パイプラインの初期部分のステージでレジスタファイルにアクセスすることはマイクロプロセッサでは一般的なことである。命令によって要求されるレジスタファイルからの値が命令実行の過程で初期にパイプラインに供給され得るようにこれが行われる。レジスタファイルへのアクセス速度は、しばしばマシン速度におけるペイシング(pacing)項目となる。パイプラインにおいて後で計算された結果は、レジスタファイルに戻され蓄積される。
【0005】
バイパスパス
レジスタファイルを通して全てのデータを移動するプロセスは、マイクロプロセッサの性能におけるボトルネックであることが分かった。したがって、最新のマイクロプロセッサの設計は、一つの命令で計算された値をその後の命令に伝えるためにパイプラインのステージ間の複雑な“バイパス”パスのセットを使用する。したがって、例えば、もし一つの命令が、それの直後の命令への入力として必要とされる値を計算するならば、その値は、レジスタファイルを通して循環するよりもむしろパイプラインにおける一つのステージに戻して手渡される。同様に、もしその値が2つの命令が後続する命令によって要求されるならば、この値はパイプラインにおける2つのステージに戻して手渡される。データパスの複雑なネットワークが、最近計算された値のための命令の全ての可能な要求に適応させるために要求される。複雑なバイパスパスセットの設計及び管理は、マイクロプロセッサの設計では主要な仕事である。それらのバイパスパスは、パイプラインにおける幾つかのステージを通るため、通常隣接ステージを接続するワイヤよりも長いワイヤを必要とする。長いワイヤは、隣接ステージを接続する短いワイヤよりもより大きな遅延を有し、マシンの性能を低下させる。バイパスパスの特別なタイミングの制約に適応させるために、相当な努力が要求される。第二に、パイプラインにおけるバイパス通信は幾つかのステージを通過するため、バイパスパスによって接続されるステージのタイミングは、慎重に制御されなければならない。隣接ステージ間に小さいタイミングエラーがあるならば、タイミングエラーがバイパスが通過する幾つかのステージを通じて累積され、バイパス通信における困難の原因となる。第三に、万一パイプラインの一部が機能停止すると、すなわち、本質的データ項目何か受け取らずには続行できなけくなると、バイパスパスはデータ消失の危険にさらされるから、パイプラインの残りの全ての部分も機能停止をしなければならない。パイプラインの任意の部分における機能停止状態を検出し、かつ全ての部分の歩調を合わせるために全ての部分に機能停止状態を伝送する論理回路網は、コンピュータの性能をしばしば制限する。最後に、多数のバイパスパスを使用するマシンは、種々のバイパスデータをバイパスパスからプロセッサの適当な部分に種々のバイパスデータを伝達するためのスイッチを必要とする。これらのスイッチ自体が、プロセッサにおける遅延のみならず設計おける複雑性を持ち込む。
【0006】
順序どおりでない実行
コンピュータにおける速度を高める一つの方法は、順序どおりでなく命令を実行することである。命令によってはその実行に十分なだけ知らされると、たとえ、“前”の命令がまだ実行されていないとしても、コンピュータはそれを実行できる。もっとも、このようなマシンでは、書かれた順序で命令の逐次実行によって得られる結果と同一の結果が生じなければならない。“順序どおりでない実行(out of order execution)”という用語は、プログラムによって示された順序とは異なる順序で命令を完了できる何らかのメカニズムを説明するために、使われる。順序どおりでない実行は、浮動小数点演算命令又は三角関数のような複雑で、したがって比較的遅い数値演算を含むいろいろなプログラムの実行速度を速めることができる。算術演算が進行中である間、コンピュータの他の部分は、別の状態に費やされた時間にできるだけ多くの作業を完了して、他の一般により簡単な命令を順序どおりでなく実行する。
【0007】
複数命令効果点ないしスーパースカラ
性能を高めるための他の方法は、“スーパースカラ(superーscalar)”マシンに使用される“複数命令効果点(multiple instruction issue”と呼ばれる。スーパースカラマシンでは、命令は一つずつよりもむしろグループで処理される。より大きな速度は、単一の処理装置を逐次使用するよりも複数の処理装置を並列に使用することによって達成される。
【0008】
グループにおける命令が相互作用するに違いないことが時々起こる。例えば、グループにおける第2の命令はグループにおける第1の命令によって計算された値を要求する。幾つかのコンピュータは、この種の要求に適応するために並列処理装置間に通信パスを設ける。他のコンピュータは、互いに相互作用がない命令だけをグループ内に配置するよう選択することによってこの要求を回避する。例えば、一方の命令が固定小数点演算のみを要求し、かつ他方の命令が浮動小数点演算のみを要求するならば、幾つかのこのようなコンピュータは一度に2つの命令を実行することができる。
【0009】
推測実行
性能を増すための他の有用な機構は、推測実行である。コンピュータによって実行されるべき命令は通常、メモリの連続するセルに記憶されているが、“ブランチ(分岐)”と呼ばれる幾つかの命令は、コンピュータに全く異なる記憶位置から命令を取り出すように指令する。“条件付きブランチ”と呼ばれる幾つかの命令は、計算されるいくらかのデータ要素の値によって、命令を順次実行し続けるか又はいくらかの他のシーケンスから命令を取り出すかのいずれかをコンピュータに指令する。
【0010】
高性能マシンでは、命令をメモリから取り出す機構は、命令が実際実行される十分前に、命令を取り出している。取り出されてまだ実行されていない命令は、命令取り出しユニットと命令が実際実行されている位置の間のパイプラインにある。命令取り出し機構(フェッチメカニズム)は、条件付きブランチに到達すると、2つの可能な次の命令のどれを取り出すかを確実には知らないことがある。どれが適当な次の命令であるかについては、条件付きブランチによってテストされるデータ要素が実際計算されるまで待って知ることになるかもしれない。しかしながら、この計算を待つのではなく、多くの最新マシンの命令取り出しユニットでは結果の推測に基づいて命令を取り出す。約85%の成功率が従来公知である比較的簡単な予測値によって達成される。このような命令は、それらが全て実行されるとは限らないため、“推測(speculative)”と呼ばれる。ブランチ予測が間違っているならば、推測的に発行される命令は、除去されねばならず、その動作の全ての足跡は破棄されねばならない。
【0011】
レジスタ・リネーミング
単純なコンピュータ設計では、計算値はレジスタファイルに記憶される。命令のための入力として要求される値は、レジスタファイルから取り出され、計算値はレジスタファイルに戻される。より複雑な設計では、中間値は、レジスタファイルに中間値を移動するか又はレジスタファイルから中間値を移動するために他の方法で使用されるだろう時間を節約するために一時保持記憶位置に時々記憶される。かかるコンピュータための制御システムは、一時保持記憶位置に記憶されるレジスタの値及び識別(アイデンティティ)の両方を記録する。実際には、各一時保持記憶位置は、レジスタファイルと異なるレジスタで時々識別される。この機構は一般に“レジスタリネーミング”として知られている。
【0012】
レジスタリネーミングは通常、特別な設計上の考察を要求する。設計者は、どの一時保持レジスタがリネームされ得るかを決定しなければならないし、いかにその内容の識別が記録されるかを決定しなければならない。広範囲の種類の機構がこのために開発された。
【0013】
多重メモリ効果点
最新のコンピュータの動作の高速化のために使用される他の方法は、多重メモリ効果点(multiple memory issue)と呼ばれる。単純なメモリシステムでは、値は一度に一つメモリから取り出される。メモリへの各アクセスは、他のアクセスが開始可能となる以前に完了されていなければならない。このようなシステムでは、情報をメモリから取り出し得る速度は、メモリのアクセス時間によって制限される。
【0014】
幾つかの最新のマシンは、一度に2以上のメモリリクエストに適応できる特別な回路を含むことによってメモリアクセスの速度を改善する。かかる回路では、各メモリリクエストのディテールをメモリシステムに導入し、メモリシステムを通して互いに干渉なしにディテールを渡すために、ディテール用の記憶回路並びに制御回路を含まれていなければならない。メモリ制御回路の簡単化のために、メモリからの応答を、それに対するリクエストと同一のシーケンスで戻すのが、メモリでは通例である。
【0015】
より複雑なメモリシステムでは、メモリから順序どおりでない応答をなすことができる。高速キャッシュメモリへのアクセスによってメモリリクエストの幾つかは満足できるが、他のメモリリクエストはコンピュータの主メモリシステムへのアクセスが必要となる。メモリアクセス時間におけるこの差を、最も複雑なコンピュータは利用する。たとえメモリに対する前のリクエストがまだ完了していなくても、メモリから直ちに使用可能な答を得ることができる。これは、順序どおりでない実行と類似しているが、コンピュータの演算部及び論理部ではなく、メモリシステムに関するものである。
【0016】
プログラマのモデルの保存
命令セットの正確な実行の確保のためには、複数の効果点、すなわち、順序どおりでない実行、推測実行、レジスタリネーミング、多重メモリアクセス又は順序どおりでないメモリアクセスの効果点が可能であるコンピュータの設計では、十分な注意が払われなければならない。現在、一般に使用されている命令セットは、命令の逐次実行を予想し、そして全ての計算値が、発生され、それらを発生する命令の順序で記録されていることを予想している。マシンのより高速化を可能ならしめるには、当初単純なマシンに用に向けられたプログラムとの互換性を保証するために、十分な注意を払う必要がある。
【0017】
プログラマは、プログラムを自分が定義したシーケンスで実行されるべき一連の命令として考える。順序どおりでない実行を行うコンピュータは、(順序通りの)逐次動作で得られ結果と同一の結果を生じるように設計されなければならない。実際、順序どおりでなく実行される動作は、他の命令から独立したものでなければならないため、通常、これは容易である。しかしながら、順序どおりでなく実行される命令がある種の誤りを生じるとき、逐次動作との互換性を保持することは困難である。例えば、ブランチ決定命令が実行された場合に、シーケンス中でそれ以前の命令がメモリ障害を生じたとき、既に実行されたブランチ決定命令の結果は取り消されなければならない。同様に、浮動小数点除算が開始させられると仮定して、プログラムにおけるその後の命令は、除算が完了する前に実行される。除算命令の除数がゼロならば、順序どおりでなく実行される除算後のオーバーフローの結果及び命令は取り消されなければならない。順序どおりでなく実行できるコンピュータとシーケンス通り実行するコンピュータと間の互換性を保持することは、命令シーケンスの多くの特別な場合に対して複雑な回路が要求され困難であることが分かった。
【0018】
【解決すべき課題】
本発明は、順序どおりでない実行、スーパースカラ演算、推測実行、レジスタリネーミング及び多重メモリ効果点の利点を提供し、プログラマモデルを保存する簡単で規則的な設計でトラップ、例外及び割り込みを解決する。
【0019】
【課題を解決するための手段】
本出願と同日付けで同一出願人によって出願された他の特許出願「カウンタフローパイプライン」には、単一のパイプラインを通して双方向に情報を送信する機構が記載されている。一方の方向に流れる各データ要素は、他方に流れる各データ要素と出会い、かつ相互作用するかもしれない。
【0020】
ここでは、カウンタフローパイプラインがマイクロコンピュータを形成するために使用される。パイプラインのための命令及びデータは上向きに流れ、前の命令の結果は下向きに流れる。命令は、予め計算された値の下向きの流れからの結果値をコピーすることによって前の命令からソース値を得る。必要ならば、レジスタファイルからの値は、別の方法では得られない結果値を提供するために下向きの流れの上部に挿入される。
【0021】
各ステージはそれの2つの隣接ステージと主に通信する。したがって、現在のマイクロプロセッサで共通のバイパスパスを最少化する。1命令で計算され、2つの命令後ある命令によって要求される値は、下向きに流れ各ステージに到達する。ステージは幾つかの細部、例えばそこで実行される特定の演算機能又は論理機能で異なるかもしれないが、概要は類似し、同様な制御システム、同様な記憶レジスタセット及び配列等が使用される。
【0022】
本発明の単純さは、設計及びデバッグの容易さ、費用及び速度において多くの利点を提供する。ステージ制御システムための1つの設計が、例えば、多くのステージで再使用でき、したがって設計努力は多重に報われる。これらのマシンを構成する集積回路技術は非常に急速に改良される。設計の完了に数年かかるならば、その設計で使用するに適当な集積回路技術を企画することは困難である。設計サイクルが短いと、使用する技術の目標を正確に設定でき、より高度な機能を設計に取り入れることが可能となる。さらに、従来の設計のチェックは、それを設計するのと同様か又はそれよりもより費用がかかる。本発明の単純さにより、以前よりもより迅速により正確な設計を達成する機会が提供される。
【0023】
単純さはまた、本発明の潜在速度能力に貢献する。各ステージに必要とされる回路は非常に簡単であり、命令の迅速な実行及び高性能に導く。また、設計の規則性により、集積回路としての実現において幾何学的規則性を得られる。それにより、異なるステージの幾何学的幅を一致させることが可能であり、各ステージを列に配置できるので、ステージ間の通信パスを短く真っすぐにすることが可能となり、高速で低電力動作が提供される。
【0024】
簡単でかつ規則的な設計にかかわらず、本発明は、最新の最も複雑な設計に見られる高度の機能の多くを提供する。これらには以下の事項が含まれる。
【0025】
順序どおりでない実行
本発明は、必要とされる情報が使用可能となると直ちに命令を実行することによって、命令メモリから発生される順序以外の順序で命令を完了し得るようにして、プログラムの完了を速める。それにもかかわらず、本発明の簡単な規則的な構成は、命令が順序正しく実行されるコンピュータとの互換性を保持する。簡単な構成により、これを達成にこれまで使用された複雑な方法のホストが取り換えられる。
【0026】
推測実行及びトラップ
本発明における簡単な機構は、計算するパイプラインからの望まれない命令をクリアすることができる。この機構により、選択された命令が実際に正しい命令となるであろうとの推測に基づく条件付きブランチの後で、コンピュータが命令を部分的に処理することを可能にする。推測実行ために選択された命令が実行されるべきでなかった場合、クリア機構が命令を取り除き、命令が発生した結果を取り除く。同様に、演算障害又はメモリ障害のような例外事象がトラップ状態を形成すると、トラップを引き起こした命令に続く命令の結果を容易にキャンセルできる。
【0027】
レジスタリネーミング
本発明は、速度における犠牲を伴ってレジスタファイルを通して答を通す必要なしに、前の命令の結果を記憶する簡単で柔軟な方法を提供する。それは、共通のパイプラインを下る逆の流れを使用して新しい命令にこれらの結果を供給する。この簡単な機構は“処理している”幾つかの値のための一時記憶を提供するため、それは“レジスタリネーミング”として一般に知られている役割に役立つ。
【0028】
多重メモリアクセス及び順序どおりでないメモリアクセス
カウンタフローパイプラインを分岐することによって、本発明は、多重メモリ効果点のみならずメモリからの順序どおりでない戻りに適応することができる。通常は複雑なこのタスクは、分岐されたパイプラインの柔軟な接続機構に結合された命令に本発明によって課された厳密な幾何学的配列によって非常に単純化される。
【0029】
本発明は、命令パッケージがソースアドレス及びデスティネーションアドレスを含み、結果パッケージはデスティネーションアドレスを含む計算システムを動作させる装置及び方法を提供する。命令パッケージは双方向パイプラインのステージを通して上向きに流れ、結果パッケージは双方向パイプラインのステージを通して下向きに流れる。命令パッケージは、前記パイプラインにおける相対位置を交換することを防止する上向きの流れにシーケンスで保持され、同一のデスティネーションアドレスを含む結果パッケージは、前記パイプラインにおける相対位置を交換することを防止する下向きの流れにシーケンスで保持される。各命令パッケージのソースアドレスは、出会う各結果パッケージのデスティネーションアドレスと比較され、命令パッケージのためのソース値は、前記ソース/デスティネーションアドレス比較に応じて結果パッケージからレトリーブされる。各命令パッケージのデスティネーションアドレスは、出会う各結果パッケージのデスティネーションアドレスと比較され、結果パッケージによって再計算されたか又は再計算されるだろう結果パッケージにおける何らかの結果値は、ソース/デスティネーションアドレス比較に応じて無効にされる。結果値は、ソース値から計算され、下向きの流れの結果パッケージに供給される。
【0030】
【実施例】
概 観
“カウンタフローパイプライン(counterflow pipeline)”と呼ばれる新しいパイプライン構成を用いて汎用コンピュータを構成する。汎用コンピュータの形成に役立てるてめ、カウンタフローパイプラインの構成には3つの主要な機能がある。第1に、カウンタフローパイプライン構成は、線形様式で互いに接続されている一連の非常に類似したステージからなる。もちろん、電子装置におけるその実際の位置はその動作に重要でないけれども、これらのステージは、一方を他方の上流に配置されるように概念的に記載されている。類似ステージの簡単な線形配置は、カウンタフローパイプラインの設計を容易にする。第二に、カウンタフローパイプラインにおける各ステージは隣接するステージと双方向に通信できる。もちろん、実際の方向は装置の物理的実施例における通信パスによって確立されるけれども、これらの通信を“上向き”及び“下向き”として概念的に表現する。双方向の通信により、命令が一方の方向にパイプラインを流れることが可能となり、かつ前の命令からの答えが他方の方向にパイプラインを流れることを可能となる。第三に、カウンタフローパイプラインは、一方の方向に流れる各値が、正確に一度だけ、他方の方向に流れるどの値とも出会い、相互に作用することを確実にする。この特性を、“カウンタ同期比較(countersynchronized comparison)”と呼ばれる。カウンタフローパイプラインのカウンタ同期比較は、各命令が全ての前の命令の結果と出会い、もし必要ならば、それらからのデータのコピーを可能とする。
【0031】
初期部分の命令からの結果は、後の命令がアクセスできるようにパイプラインを下向きに流れる。各ステージがその最も近い隣り合うステージとのみ通信することにより、ステージを接続するのに必要とされるワイヤの長さが制限できる。ローカル通信により、全てのステージは形において同一であり、それぞれはその2つの隣り合うステージと通信するのであるから、各ステージの設計が簡単化される。
【0032】
順序通り上向きに流れる命令
パイプラインを上向きに流れる命令を考える。下部端として称されるパイプラインの端は、メモリから命令を取り出す機構を介しての命令を含むメモリに接続される。命令は、その下部端でパイプラインに入り、パイプラインを上向きに流れる。パイプラインを流れる間、厳密には、命令はシーケンスのままである。後の命令は、前の命令を通過させない。すなわち、後の命令は、前の命令との相対位置を変える。パイプラインにおける上向きに流れる命令を考えているので、後の命令は前の命令の下にある。パイプラインにおけるある時点での命令についてスナップ写真がとれるとすると、それはプログラマによる命令のリストのように見える。
【0033】
命令パッケージの内容
パイプラインにおいて上向きに流れる各命令は、処理動作に有用であるデータを伴う。このような“命令パッケージ”は、以下のものを含む。
1.命令が何をなす予定かを知らせるオペレーションコード。加算、減算、シフト、メモリからのロード等のような種々の演算のために別々のオペレーションコードがある。オペレーションコードは、メモリに記憶されている命令についての情報の転写であるか又は同情報の変換形である。パイプラインにおける後のステージは、オペレーションを検査してその命令で如何なる作業が行われるかを決定する。例えば、加算のみができるステージは、加算演算を要求する命令時だけに作動し、他の演算を要求する命令を通過させる。
2.命令は、メモリから取り出されるとき、実行されるべき演算への入力として役立つ値の幾つかのソースレジスタを識別する。これらのソースレジスタは、“アドレス”又はレジスタの“名前”と呼ばれる独特なビットの組み合わせによってそれぞれ識別される。
ソースレジスタのアドレス又は名前の識別子は、命令パッケージの一部として送られる。命令を行う際に使用されるべき各ソースレジスタのための適切な値は、判明したときに、命令パッケージの一部を構成する。これらのソース値が命令パッケージにどのようにして入るかを後に述べる。アドレス及び値に加えて、命令パッケージは、各レジスタ値の妥当性を指示する幾つかのマーカビットを含む。これらのマーカビットは、値が既に検出されたか又はまだ未知のままであるかどうかを指示する。
3.命令のデスティネーションレジスタのアドレス又は名前の識別子も、命令パッケージで送られる。命令が実行されると、そのデスティネーション値は既知となり、命令パッケージの一部を形成する。命令によって識別される一つ又は複数のデスティネーションレジスタは、命令によって計算された一つの値又は複数の値の最大の貯蔵所である。各デスティネーションレジスタのためのアドレス及び値に加えて、各デスティネーションレジスタ値が計算済みであるか又は未知のままであるかを示す幾つかのマーカビットもある。
【0034】
命令実行
パイプラインの異なるステージは、異なる命令を実行することができる。もちろん、パイプラインは、処理されるべき命令の各タイプを実行できる少なくとも一つのステージを有するが、幾つかの演算を行える1つ以上のステージを有するかもしれない。命令パッケージは、その命令を実行でき、自由に実行できる状態のステージに到達した時、命令パッケージが、必要なソース値のそれぞれの値を含んでいれば、そのステージによりその命令が実行される。ソース値が全て使用可能でない場合、後のステージで命令が実行され得るならば、命令パッケージはパイプラインを上向きに進行する。命令パッケージが命令を実行できる最後のステージに到達して、命令がまだ実行されてないならば、命令パッケージは、全てのソース値が満たされて命令が実行されるまで待つ。
【0035】
命令が実行されるとき、それにより発生される計算値は2つの場所に入れられる。第一に、それらは命令パッケージ自体のデスティネーションレジスタ部に入る。命令パッケージの一部としてこれらはパイプラインを上向きに進行し、間もなく説明するように最後にはレジスタファイルに記録される。
【0036】
第二に、計算値のコピーは、結果ストリームに配置される。これらの“答え値”は、コピーして結果パッケージに入れられるか又は新しい結果パッケージが、これらを保持するために形成される。いずれの場合も、これらは、パイプラインを下向きに流れる。パイプラインを下向きに流れる計算値のコピーは、出会った後の命令と相互作用する。結果パッケージ内の答え値のこの下向きの流れにより、後の命令が必要とするソース値を得る機構を提供する。
【0037】
結果パッケージ内容
答え値は、“結果パッケージ”でパイプラインを下向きに流れる。このようなパッケージそれぞれは一つ以上の予め計算された値についての情報を含む。各々のこのような答え値に対して、結果パッケージは以下のものを含む。
1.この値が最後に入れられるデスティネーションレジスタのアドレス又は名前。もちろん、これは、レジスタファイルに到達すれる結果パッケージにおけるデスティネーション情報のコピーではなく、命令パッケージで伝えられるデスティネーション情報のコピーである。結果パッケージにおけるコピーは、その前の命令によって計算された値について後の命令に知らせるためのものである。
2.計算値。この答え値は計算された情報の全てを含む。幾つかの演算は、非常に小さい情報、例えば条件コードのみを計算する。他の演算はバイト又は文字値を計算する。多くの演算は、32ビット,64ビットまたはそれ以上のビットのフルコンピュータ“ワード”を計算する。
3.このレジスタ値が意味があるかどうかを識別する幾つかの予備ビット。予備ビットは、後述するある状況下では、結果パッケージの幾つかの部分を無効にするのに必要である。これらのマーカビットはそのために使用される。
【0038】
部分的な順序づけで下向きに流れる答え
結果ストリームに流れ込む結果は、好ましくは部分的順序づけを保持する。同一のレジスタアドレスを有する任意の2つの結果は、順序づけが維持されるべきである。異なるレジスタアドレスを有する結果は、任意の順序でよい。設計によっては、重要な結果が他の結果よりもより迅速に移動できる特別のパスを備えることが望ましい。このような特別のパスは結果の順序を乱す。同一のデスティネーションレジスタの名前又はアドレスを結果が有する場合のみ、正しい演算を得るために、特定の結果の順序の維持が必要であろう。
【0039】
本発明により形成されたパイプラインにおける命令の順序は、一般に、パイプラインの下部端で発生た順序に一致する。しかしながら、パイプラインを下向きに流れる結果における結果値は、部分的に順序づけられるだけである。同一のレジスタの名前又はアドレスを有する値は相対的な順序を維持するが、レジスタの名前又はアドレスが異なっている値は如何なる順序でも良い。
【0040】
命令はパイプラインを厳格に順序づけられて上向きに流れることができ、同一のデスティネーションアドレスのための結果も厳格に順序づけられ得る。適用されるならば、これらの2つのルールにより、各命令は、シーケンスで先行する命令のみにより発生された結果に出会い、その結果からのソース値を得ることが保証される。間もなく説明するように、他の機構により、各命令が、ソース情報として要求する任意のレジスタ値のための適切な結果値のみに出会うことが確実にされる。
【0041】
通過する全ての結果と比較される全ての命令
本発明により使用されるカウンタフローパイプラインの非常に有用な特徴は、“カウンタ同期比較(countersynchronized comparison)”である。カウンタフローパイプラインのカウンタ同期比較のため、パイプラインを上向きに通過する命令パッケージは何れも、出合った、下向きに流れてくる結果パッケージと比較される。同時係属出願の「カウンタフローパイプライン」に記載されているように、パイプライン通信は、次のように構成される。すなわち、もし、命令が前の方のステージEから後の方のステージLに送られており、同時に結果がステージLからステージEに送られているならば、命令及び結果が、L及びEを含むLとEの間のどれかのステージで正確に一度出会わなければならないよう、構成される。このカウンタ同期比較機能は、カウンタフローパイプラインに形成され、前述の出願に記載されている特別の回路によって成し遂げられる。
【0042】
カウンタフローパイプラインのカウンタ同期比較は、以下のように命令と結果間の有用な相互作用を可能にする。
命令及び結果がパイプラインの任意のステージで出会うと、そのステージは、命令パッケージのソースアドレスと結果パッケージのレジスタアドレスとを比較する。そこでの一致は、命令がソース値として必要しているデータを、結果が伝えていることを示している。したがって、この比較における一致に応じて、ステージは、結果パッケージからの答え値をコピーして命令パッケージに入れる。この処理によって、命令パッケージは、結果ストリームから必要とする値を“蓄積する”ことができる。
【0043】
命令及び結果がパイプラインの任意のステージで出会うと、そのステージは、命令パッケージにおけるデスティネーションアドレスの全てと結果パッケージにおけるデスティネーションアドレスの全てとを比較する。そこでの一致は、命令が、結果パッケージによって伝えられる答え値を有するか又は再計算するだろうことを示している。したがって、答え値は、本発明によって再計算されたか又は再計算されるだろうこのレジスタの前の値を表す。この結果によって伝えられる前の値は、したがって、古いものである。よって、ステージは、デスティネーションアドレスと結果アドレスとの一致を見い出すと、結果ストリームから結果パッケージを削除するか又は結果あるいはその答え値に廃棄とマークするかのいずれかによって結果を“没(kill)にする”。いずれの場合も、結果と命令とがさらに相互作用することを防止する。
【0044】
結果を没にすることは、カウンタフローパイプライン・プロセッサの適正な動作を容易にする非常に有用な属性である。結果は、その値を再計算するか又は再計算するであろう命令に出会うならば、没にされる。結果を没にすることにより、特定の結果値が結果ストリームの非常に限られた部分だけに存在することになる。この結果値は、最初にその値を計算する命令によって発生される。それは、引き続く命令に、その値を有するか又は再計算するだろう最初の命令に至るまで、出会うことができる。結果値は、それを計算した命令からそれを有するか又は再計算する次の命令までの間に限り、ソース値として使用る。予め計算された結果は、その結果値を有するか又は再計算するだろう命令に続く命令においては、ソース値として使用できない。しかしながら、これらの後の命令は、結果の最初のバージョンを没にした命令によって既に計算されているか又は計算されるべきである新しいバージョンを受け取る。したがって、あらゆる命令は、ソース情報として使用するかもしれない各レジスタの最新値のみを受け取る。
【0045】
没(削除)による、りレジスタリネーミング機構の提供
この非常に簡単で、かつ規則的な機構により、同一の名前又はレジスタアドレスで指定された幾つかの異なる値が結果ストリームにおいて共存することが可能となる。この機構により、このような値それぞれが、その値を適切に使用する命令だけに到達することを確実にする。このような値が、それが有効とされる領域の外でもって、命令と不適切に相互作用することを防止する。結果の名前又はアドレスと、命令におけるデスティネーションの名前又はアドレスとを比較することは、非常に簡単で、かつ規則的構成におけるレジスタリネーミングの効果を提供する。
【0046】
終端におけるレジスタファイル
今日、使用されている他のプロセッサと同様にカウンタフローパイプラインプロセッサは、計算値を保持するためにレジスタファイルを含んでいる。このようなレジスタファイルは、データが迅速に入れられ、かつ取り出せるように高速回路で形成されている。このレジスタファイルは、全部で数十個のレジスタを含むだけあるから、高速に作動する。従来のマイクロプロセッサで使用されているパイプラインでは、これらのレジスタは、レジスタからの値ができるだけ早く各命令に使用可能にされ得るようにパイプラインの発端近くに置かれる。これい対して、カウンタフローパイプラインプロセッサでは、パイプラインの終端またはその近く、すなわちパイプラインの上部端に置かれる。
【0047】
命令の完了後のみの値の記録
命令が完全に処理された後だけ到達するパイプラインの上部端にレジスタファイルを配置することによって、適切に計算された値だけレジスタファイルに記録される。命令は、計算された値をレジスタファイルまで伝えるだけでなく、計算された値を結果として結果ストリームに挿入し、この結果ストリームは、続く命令と相互作用し、それらの命令が必要とするソース値をそれらに与える。したがって、カウンタフロープロセッサは、従来のコンピュータがアクセスするよりも少ない頻度でそのレジスタファイルからの値をアクセスする。
パイプラインの上部端のレジスタファイルは、ファイルの側を通過する古い命令の結果の一覧として考えられ、その結果の答えをファイルに入れる。
【0048】
レジスタファイルから結果を得る
実用的なステージ数を有するカウンタフローパイプラインプロセッサでは、レジスタファイルは必要である。多くの命令及びうまく設計されたシステムではたいていの命令は、レジスタファイルを参照しないで結果ストリームからのそのソース値を蓄積する。しかしながら、幾つかの命令はずっと前に計算されたソース値を使用する。このような命令によって要求される結果は、その命令がパイプラインに入るずっと以前に、結果ストリームを完全に通過し、結果ストリームを離れている。このような命令は、結果ストリームに残っている値から命令が必要とする値を蓄積できない。このような命令に対してソース値を提供するために、レジスタファイルは、その記録された値を結果ストリームを下向きに送らねばならない。
【0049】
カウンタフローパイプラインプロセッサは、レジスタファイルが広範囲の再発行方式のどれかを使用する。幾つかの方式は、レジスタファイルにまだレジスタファイルに到達しないパイプラインにおける命令によって古いものとされた値を再発行させる。他の結果と同様にレジスタファイルによって再発行された結果は、それらが、それらの値を有するか又は再計算するだろう命令に到達するならば、没にされるだろう。したがって、レジスタファイルからのレジスタ値の再発行のための方式は、ファイルにおける値の古さに関与する必要はない。
【0050】
一つの再発行方式は、それぞれのレジスタの値を周期的に再発行することである。最後には、全てのレジスタ値は再発行され、それで値を待っている任意の命令の要求は、結局満足されるだろう。
【0051】
他の方式は、パイプラインに入る各命令によって要求される全ての値を再発行することである。この方式では、命令がデコードされるとすぐに、各命令のソースレジスタアドレスをレジスタファイルに送る必要がある。このための通信パスは、本発明の好ましい実施例に含まれている。
【0052】
再発行のための他の方式は、どのレジスタ値が現在パイプラインで再計算されているかについてパイプラインにおいて初期に記録しておくことを必要とする。各命令がデコードされると、そのデスティネーションレジスタは注目され、その識別の記録が保持される。これらのレジスタの値は、最後には結果パスに戻る。値が戻るまで、値は、これを必要とする任意の後の命令に対してパイプライン内で使用可能である。この機構によってプロセッサは、命令によって要求され、かつ既にパイプライン内で使用可能でないと識別されたレジスタのレジスタ値のみの再発行を要求することができる。これは好ましい実施例の機構である。
【0053】
特別のレジスタ
ほとんど全ての命令セット定義は、一定命令、例えば、コンディションコード(CC)及びプログラム状態語(PSW)によって選択的にアクセスされ得る幾つかの特別のレジスタを有する。カウンタフローパイプラインプロセッサでは、これらのレジスタは、汎用レジスタと全く同様に扱われ得る。これらのレジスタからのデータを使用する命令は、あたかも命令がソースレジスタとして特別のレジスタを使用するかのように処理され得る。特別のレジスタを変更する命令は、あたかも特別のレジスタがデスティネーションであるかのように処理され得る。これらの特別のレジスタは、マシンにおける他のレジスタと一緒にレジスタファイルに記憶され、他のレジスタと同様に、必要とされるときアクセスされる。
【0054】
コンディションコード
一つの共通の特別のレジスタは、コンディションコードと呼ばれる。これらは、最後の演算がゼロ(Z)、負値(N)を発生したか、オーバーフロー(O)を生じたか、又はキャリー出力(C)を発生したかを一般に記録する。SPARC命令セットを含む多くの命令セットでは、ZNOCビットは4ビットレジスタとして扱われ得る。これを計算することによって、コンディションコードをセットする任意の算術演算は特別のデスティネーション、すなわちコンディションコードを有する。コンディションコードをテストする任意の演算は特別のソース、すなわちコンディションコードを有する。このコンディションコードの処理は、これらの値が他の計算された答え値と全く同様に結果パイプラインに流れることを可能にする。いつでも、命令のために計算された幾つかの異なる命令の出力に対応している、結果パイプラインにあるコンディションコードの幾つかの異なる値がある。
【0055】
プログラム状態語
他の共通の特別のレジスタはプログラム状態語(PSW)である。このレジスタはある特殊命令のみによって使用され、かつセットされる。にもかかわらず、他のレジスタと全く同様に扱われ得る。プログラム状態語は、一般にマシンの動作モードについての情報を含んでいる。例えば、マシンは今回割り込みに応動するか、特権命令を実行できるか等である。
【0056】
プログラム状態語のコピーをパイプラインに沿ってに配置することは、カウンタフローパイプラインプロセッサでは十分に許容可能である。これらのコピーは、PSW結果パッケージが到達すると、変更されるだろう。したがって、時宜を得た方法で最新のコピーを保持する。これらは、任意の命令が新しい値を再発行するかもしれないコピーを渡すときはいつでも、古いものとされるだろう。
【0057】
トラップ及び例外
パイプラインの発端でなく終端にレジスタファイルを配置することの他の重要な利点は、規則的な命令の流れにおいてトラップ及び他の例外を処理するときに存在する。異常な状態がコンピュータのある部分で起こると、トラップ又は割り込みが発生する。例えば、無意味な答えが得られる0による割り算は、大抵のコンピュータではトラップを引き起こす。同様に、不適当なメモリアドレスを参照することもまたトラップ又は割り込みを引き起こす。プログラムは、トラップ又は割り込み以前の命令が、割り込みが作動される前に完了され、それに続く命令が、割り込みがサービスされるた後まで待つだろうことを期待する。
【0058】
全ての種類のパイプラインプロセッサは、あたかもパイプラインが存在せず、各命令は次を開始する前に完了されたかのようにトラップ及び割り込みを処理しなければならない。コンピュータファミリの命令セットのために記載されたプログラミングモデルは、ここで記載されたものを含む多くのパイプラインでは、たとえ幾つかの命令が直ぐに実行されるか又は命令が順序が狂って実行されるとしても、一度に一つ命令の実行を考慮する。トラップ又は割り込み以前の命令が全て完了され、かつその後、それらは完了されなかったかのように作動するコンピュータを設計することは、命令が同時に実行されるか又は順序どおりでなく実行されるとき非常に難しい仕事である。
【0059】
パイプラインの終端にレジスタファイルに配置することによって、本発明は、トラップ又は割り込みを処理するのに要求される演算を一般に簡単にする。完全に処理され、かつ首尾よく処理された命令だけがレジスタファイルに到達し、それに結果を記録する。レジスタファイルにまだ到達していない全ての命令は、いつでも放棄され、トラップ又は割り込みが処理された後、再始動される。
【0060】
カウンタフローパイプラインプロセッサでは、特定命令がトラップを引き起こすならば、このような困難を発見したステージは、特別の種類の“トラップ”結果を結果ストリームに挿入する。トラップ結果は、それがパイプラインで全ての後の命令と出会うとき全ての後の命令にトラップの発生を知らせる。それが命令とどこで出会っても、出合われた命令は、無効とマークされるか又はパイプラインから削除されるかのいずれかが行われる。マーキング又は削除によって、このような命令は、レジスタファイルの内容を変更することを防止され、よってコンピュータの成功した動作の永久記録にいかなる影響も与えない。
【0061】
同一のトラップ結果は、どの命令が障害及び故障の種類を引き起こすかについての情報をそれとともに伝える。最後には、トラップ結果は、障害を引き起こすもの次の任意の命令を全パイプラインから追い出した後、パイプラインの下部にある命令取り出し機構に到達するだろう。この命令取り出し機構は、すぐにトラップハンドラから命令を取り出し始めることができる。トラップハンドラが完了し後、トラップ結果が、プログラムが再開できる点を識別しているため、命令取り出し機構は、命令取り出しを再開し、障害を引き起こした命令から開始する。
【0062】
詳 細
ステージの垂直配置
本発明による汎用コンピュータのための基本構成は、図1に示すようにカウンタフローパイプライン40を形成する複数のステージ20〜32からなる。各ステージは、パイプラインにおいて上下のステージと双方向に通信する。図1は、情報がステージを通して上下に流れるように互いの上に連続するステージによって示されている。もちろん、実際のマシンでは、物理的通信パスの幾何学によってどんな方向にセットされても情報が流れ込むことが認識されねばならない。この図において、図1の垂直配置及びフローの方向“上”及び“下”の使用は、単なる説明の便宜のためである。
【0063】
命令は上向きに流れ、結果は下向きに流れる
図1の矢印の方向で示すように、命令に関する情報は、パイプラインにおいて上向きに流れ、完了された命令の計算結果に関する情報は下向きに流れる。実際のマシンでは、フローの方向は重要でないけれども、パイプラインにおける命令のスナップ写真が撮影できたとすると、その写真はプログラマによって一般に使用されるような命令のリストに似ているから、命令が上向きに流れるものとして考えるのが、パイプラインの動作を理解するのに便利である。スナップ写真及びリストの両方とも、後の命令は、前の命令の下に現れる。命令は、パイプラインの下部端に入り、パイプラインを通して上向きに流れる、そして完全に処理されると、パイプラインの上部端に存在する。
【0064】
図1に示されるようなパイプラインプロセッサでは、パイプラインの下部端にある命令取り出し機構34は命令をパイプラインの下部に送り込むのに役立つ。この命令取り出し機構は、命令メモリローンチステージ20、命令キャッシュメモリ36及び命令メモリリターンステージ22からなる。特に図示されていないプログラムカウンタは命令メモリローンチステージ20の一部である。
【0065】
種々の命令取り出し機構が、今日、コンピュータに使用されている。図1に示すために選ばれた形は、使用されたかもしれない種々の機構の1つである。その機能は命令をステージ22にあるパイプラインに導入することである。
【0066】
命令がパイプラインの上部端にあるレジスタファイル制御ステージ32に到達するとき、命令が計算したか又はメモリから検索した値が、パイプラインの上部端に示されたレジスタファイル50に記録される。完全に実行された命令だけがパイプラインの上部端に存在する。レジスタファイル50は値を記憶し、要求のあり次第、パイプラインの結果側にその値を導入することができる。
【0067】
通信パス52は、デコードステージ24とレジスタファイル50との間に示されている。使用されるとき、このパス上の信号は、名前又はアドレスで、その値が下向きに流れる結果ストリームに再導入されるべきであるレジスタファイルにおけるレジスタを識別する。
【0068】
メモリ及びデータキャッシュ
主メモリ60及びデータキャッシュ62が図1に示されている。これらの動作は、以下に詳述される。データメモリ・ローンチ・ステージ26及びデータメモリリターンステージ30に接続されているデータキャッシュが、図1に示されている。これらの構成要素の多くの配置が、当業者に明らかなように可能である。
【0069】
図1に示されたデータキャッシュ及び主メモリの接続は次のように作動する。メモリからの情報を要求する命令がデータメモリローンチステージ26に到達すると、その要求はパス61を介してデータキャッシュ62に信号が送られる。その間に、命令は、それが答えを待っているステージ30にパイプラインを上流に自由にどんどん先に進む。答えが見つかると、データキャッシュは、パス63を介してデータメモリリターンステージ30に要求される情報を送る。このパス63で情報は、それを要求した命令と再結合する。データがデータキャッシュで使用不可能ならば、データキャッシュは主メモリにおける情報を探す。万一情報がそこで使用不可能ならば、トラップリターンが、マシンのトラップ動作が後述されるように呼び出されるだろうところのステージ30で待っている命令に与えれるだろう。
【0070】
パイプラインは、部分的に処理された命令を各ステージに記憶することができるため、図1のデータキャッシュ62、主メモリ60、及びパイプラインステージ26及び30の構成は、一度に3つのしがかりのメモリ参照があることを可能にする点に注意されたい。3つのメモリ参照がしがかり中であるとき、関与している3つの命令はステージ26、28及び30にあるだろう。命令がステージ30の命令に答えを戻すまで、わずかに命令はデータキャッシュにアクセスできるにすぎない。図9に関連して、別の未完了のメモリ命令を可能にするメモリ部の他の構成を後述する。
【0071】
パイプラインにおける通信
通信パス100及び102は、図1の各ステージ対間に示されている。通信パス100は、命令をパイプラインの上流に送るために使用され、通信パス102は、結果をパイプラインの下流に送るために使用される。これらの通信手段は、各ステージ対間にある通信制御装置38によって制御される。通信は、前述の同時係属出願「カウンタフローパイプライン」に記載されている規則に従う。各ステージ対間の制御装置38は、競合要求が、出願「カウンタフローパイプライン」に記載されているような“カウンタ同期比較”を提供するような方法で満たされることを確実にして、情報を順序正しく上下に進行させるために設けられている。
【0072】
単一ステージのレジスタ構成
本発明により形成されたパイプラインでは、ステージは基本構成において互いに全く類似している。典型的な構成は、典型的なパイプラインステージ28のより詳細図である図2に示されている。ステージは、主に隣接ステージと、図1で既に示され、図2に一部示されている通信パス100及び102に沿って両方向に通信する。
【0073】
通信パス100を通して下から上に流れる命令は、レジスタ装置104で捕らえられる。典型的な命令の構成は、命令コードOP及び3つの同様なレジスタ部からなる装置104に示されている。3つのレジスタのうちの2つはソースレジスタのためのもので、1つはデスティネーションレジスタのためのものである。多数のソースレジスタ及びデスティネーションレジスタを適用し得るが、説明のために3つだけが示されている。示されている3つのレジスタ部は、下記のようになる。rd=デスティネーションレジスタ名又はアドレス及び付加妥当性ビット、rdd=デスティネーションレジスタ値(既知ならば)、r1s=第1のソースレジスタ名又はアドレス及び付加妥当性ビット、r1sd=第1のソースレジスタ値(既知ならば)、r2s=第2のソースレジスタ名又はアドレス及び付加妥当性ビット、r2sd=第1のソースレジスタ値(既知ならば)。
【0074】
同様に、通信パス102を通して上から下に流れる命令は、レジスタ装置106で捕らえられる。典型的な結果パッケージの構成は、レジスタ装置を表すボックスの中に示されている。図示されるように結果パッケージは2つの結果値を含んでいる。多数の結果値は結果パッケージで使用される。説明のために2つだけが使用される。示されている結果パッケージは次のものを含む。rr1=第1の結果レジスタ名又はアドレス(既知ならば)及び付加妥当性ビット、rr1d=第1の結果レジスタ値(既知ならば)、rr2=第2の結果レジスタ名又はアドレス(既知ならば)及び付加妥当性ビット、rr2d=第2の結果レジスタ値(既知ならば)。
【0075】
各ステージは命令セットのある一部を実行する
図2は、命令修正装置108、関数計算ボックス110、結果修正装置130及びこれらの間の通信パス112、114、116及び128を示している。種々の動作が起こるとき示される制御パスは、図示されていない。
【0076】
本発明のパイプラインでは、パイプラインの異なるステージは、マシンに使用可能である全命令セットの異なる部分を実行することができる。図2に示されるように、適当な値を計算することができる回路は選択されたステージに含まれる。幾つかのステージは全く計算も行わない。幾つかの実施例では、単一のステージは計算の全てを行うが、しかし通常、異なる種類の計算動作は異なるステージで行われる。もちろん、あるステージは使用されるべきである各命令の種類を実行することができなければならないが、しかし一つのステージも命令の種類を実行する必要がない。その上、命令の種類のどれか一つ実行することができる複数のステージがある。例えば、幾つかのステージは加算ができることで有用であることが分かるかもしれない。ステージ間のこれらの差異の詳細は、ステージ間で非常に異なっている関数ボックス110の特別の細部に一般に依存する。レジスタ104及び106、及び修正ボックス108及び130は、ステージ間で類似している。
【0077】
結果パッケージ修正
図3は、結果修正ボックス130の内容を示している。図2のレジスタの現在値を示す情報は、その構成部分にして示された通信パス128の上部からこの装置に入力する。図3の結果修正ボックス130の目的は、その情報の多く又は全てを要求されるような命令からの情報と置換することにある。
【0078】
2つのマルチプレクサ132及び134は、その構成部分として示された出力パス102の下流のステージに送るためにその3つの入力のうちの一つを選択する。したがって、通信パス102を介して下流に送られる次のステージへの出力結果値は、このステージで保持されるrr1d及びrr2dと呼ばれる入力、rddと呼ばれてこのステージで計算され、かつ通信パス114で送られる予め保持されたデスティネーション値、ridと呼ばれてこのステージで計算され、図2の関数ボックス110からの通信パス112で送られ、かつレジスタ手段142に保持される値のいずれかを入力する。
【0079】
2つのアドレス又は名前比較ユニット136及び138は、現在の結果rr1d及びrr2dのアドレス又は名前と命令の現在の結果rd及びriとを比較する。これらの比較の結果は、図示されているようにマルチプレクサ132及び134を制御する。比較ボックス136及び138は、マルチプレクサのために選択する選択の範囲と一致する出力通信パス102に、名前情報又はアドレス情報を送る。
【0080】
命令パッケージ修正
図4は、図2に示された命令修正ボックス108の内容を示している。レジスタ104からのデータパス114は、構成部分として図4の下部に示されている。出力通信パス100は図4の上部に示されている。関数ボックス110への通信パス116、118及び120は図4の右側に示されている。
【0081】
マルチプレクサ123及び関連制御装置122は、図の上部でデスティネーション出力rddを形成するのに役立つ。デスティネーション出力rddは、前のステージから送られて図の下部に入力する情報、又は通信パス112を介して関数ボックスからの代替デスティネーション情報のいずれかを示す。いずれの場合も、デスティネーションアドレスrdは、多分妥当性ビットを修正する制御装置122によってコピーされる。
【0082】
制御装置124は、現在の命令のソースレジスタ名又はアドレスr1sと結果パッケージのレジスタ名又はアドレスrr1及びrr2とを比較する。一致する場合、マルチプレクサ125は、結果パッケージrr2d又はrr1dからの正しい新しい情報に代える。合致しない場合、前の値r1sdは上向きに送られる。制御装置126及びマルチプレクサ127は、第2のソース値のための同一関数に役立つ。
【0083】
レジスタ・レジスタ命令
本発明を理解するために、最新のコンピュータに使用される命令の共通の形式を理解しなければならない。その内容が大抵の命令を実行するときに使用される数十のレジスタのファイルを含むことは、最新のコンピュータでは普通である。各命令は、実行されるべき演算を指定し、かつ命令が実行されるべきであるレジスタファイルから1つ以上のレジスタを識別する。指定されたレジスタの幾つかは、命令のためのソースデータを保持し、指定されたレジスタの幾つかは、演算の結果として計算された値のためのデスティネーションである。例えば、SPARCアーキテクチャマニュアルで特定されている一つのフォーマットの命令は、その合計が所望されている2つの値を提供する2つのソースレジスタ及び加算の結果を入れる単一のデスティネーションレジスタを参照する。
【0084】
最新のコンピュータファミリための命令セット、例えば、SPARC命令セットは、指定レジスタの内容で異なる算術演算及び論理演算を実行するために多数のこのような演算を含んでいる。例えば、固定小数点加算、乗算、除算、論理シフト及びマスク処理が含まれている。多くのマシンはまた、同様な方法で別々のレジスタセットを参照する浮動小数点算術演算を含んでいる。
【0085】
ほとんど最新のマシンでは、主メモリを参照する命令は、レジスタファイルに記憶された値に関しても、そのようにする。例えば、SPARC命令セットでロードと呼ばれる命令は、一つのレジスタの内容を、そこから情報を取り出し、取り出した情報を他のレジスタに配置する主メモリにおけるアドレスとして使用する。したがって、メモリ演算の形式は、ソースレジスタ及びデスティネーションレジスタの両方をアクセスする算術演算の形式と同一である。新しいデータを見つけるために使用される機構のみが違っている。算術演算の場合、計算回路は新しい値を見つける。メモリ演算の場合、新しい値は大容量メモリにおけるルックアップによって見つけられる。
【0086】
各命令は、その命令によって使用され又は影響されるだろうレジスタを指定する。指示は、レジスタセットから特定のレジスタを独特に記述する2進コードである。SPARC命令セットでは、例えば、各レジスタを指定する2進コードは、5ビット長である。
【0087】
本発明の目的のため、レジスタ指示がいかに符号化されたかは重要でない。しかしながら、符号化されたその特定の指示を意味するレジスタの“名前”又はレジスタ“アドレス”をここで、参照する。レジスタの名前又はアドレスは、それを他の同様なレジスタと区別する単なる指示であることを思い出すことが重要である。
【0088】
レジスタとしてのコンディションコード
大抵の最新のマシンは、コンディションコードと呼ばれる数ビットによってそれらが処理される数について少数の簡単な事実を報告する。4つのコンディションコードは、一般に、(1)結果がゼロ(Z)であるかどうか、(2)結果が負(N)であるかどうか、(3)実行された算術演算又は論理演算がオーバーフロー(O)を生じたかどうか、及び(4)実行された算術演算がキャリー(C)を生じたかどうかを指示するために使用される。
【0089】
本発明により形成されたパイプラインプロセッサでは、このようなコンディションコードは、便宜的にレジスタとして扱われる。コンディションコードを発生する命令は、あたかもコンディションレジスタが付加デスティネーションレジスタであるかのように扱われる。入力としてコンディションコードを使用する命令は、それをソースレジスタ値として扱う。コンディションコード自身は、他のレジスタのコンディションコードと同様な名前又はアドレスを与えられる。レジスタアドレス比較回路は、丁度他のレジスタ値のようなコンディションコードを扱う。コンピュータのレジスタセットにおける単なる他のレジスタのようなコンディションコードのこの見方は、普通でない。大抵のマシンにおけるコンディションコードは、特別の重要性を保有していると考えられているため、それらは、しばしば、他のレジスタとは別々に扱われる。したがって、SPARC命令セットは、命令が2つのソースレジスタの内容を結合して、単一のデスティネーションレジスタに入れる“3アドレス”命令セットとして一般に考えられている。しかしながら、いくつかの命令が、2つのソースレジスタ値及び古いコンディションコード値を結合して、新しい演算の答え及び新しいコンディションコードセットの両方を生じるので、SPARC命令セットは“5アドレス”命令セットである。本発明では、コンディション値は、構成において有益な単純化が行われるならば、他のレジスタと丁度同じように扱われる。
【0090】
最少規則
カウンタ同期比較
本発明の非常に有用な特徴は、各ステージが、上向きに流れる命令パッケージにおけるレジスタ名と下向きに流れる結果パッケージにおけるレジスタ名とを比較する回路を有することである。レジスタ名が一致する場合、ステージは、下向きのデータから情報を上向きの流れにコピーするか、又は、一方もしくは他方の方向のデータを削除するかあるいは削除するためにマークする。結果として、本発明では、パイプラインの幾つかのステージのそれぞれにおいて別々に実施されている簡単なローカル演算は、最新のコンピュータの必要とされる複合動作を適切に実施できる。カウンタフローパイプライン制御システムは、“カウンタ同期比較”のために設けられているため、このような簡単なローカル機構は、予想どおり機能する。カウンタ同期比較は、上向きに流れる命令をすべて、下向きに流れる結果の全てと強制的に出会わせ、かつ相互作用させ得ることを確実にする。
【0091】
データパス回路
同時出願に記載されている制御機構は、カウンタ同期比較が実行できることを確実にする。図5には、汎用コンピュータで典型的な比較を行うアドレス比較回路又は名前比較回路が示されている。好ましくは、パイプラインの各ステージには、適切な制御及びこの最少比較装置を含んでいるので、どの命令もみな適切に処理される。
【0092】
比較回路は、ソース及びデスティネーションを比較する多数の比較回路(150、152及び154が図示されている)からなる。これらは、図2、図3及び図4に関して一部既に記載されているような命令保持レジスタ104と結果保持レジスタ106間に接続されている。ここで、図5には、その機能をよりはっきりと示すために比較回路を示している。
【0093】
命令パッケージ104におけるアドレス部又は名前部のそれぞれは、結果パッケージにおけるアドレス部又は名前部のそれぞれと比較されなければならない。図5では、図2に示されている二重結果パッケージと対比すると、単一の結果レジスタを有する一つの結果パッケージが示されている。これらの比較回路151、153及び155の結果は、システムを通してデータの流れを制御する制御回路156に送られる。図3でこの例は、既に示されている。比較装置150は、図3に示された比較及び制御装置136の一部である。同様に、比較装置152は、図4における比較及び制御装置124の一部である。同様に、比較装置154は、図4における比較及び制御装置126の一部である。
動作では、比較回路は、制御回路156によって作動される幾つかの場合を示している。
【0094】
不一致
比較は、結果のレジスタ名と命令を伝えるソース及びデスティネーション名前間の不一致を示すことがある。この場合、結果は、後の命令と比較されるように下向きに送られる。
【0095】
ソース一致
比較は、結果のレジスタ名と命令を伝える1つ以上のソースオペランドレジスタ名間の一致を示すことがある。この場合、ステージは、結果によって伝えるデータをコピーしてソースオペランド値ために命令における予約場所に入れる。これは図4のマルチプレクサ125及び127によって行われる。この処理は、“蓄積”と呼ばれる。これを、命令が、結果ストリームから必要とする値を“蓄積”すると言う。
【0096】
デスティネーション一致
比較により、結果パッケージにおけるレジスタ名と命令パッケージにおいて伝えられるデスティネーションレジスタ名間の一致が示される場合、命令は、デスティネーションレジスタのための新しい値を有するか又は計算するかのいずれかである。この命令に続く命令は新しい値だけに応ずる。したがって、古い値は結果ストリームから取り除かれるか又は無効とマークされるかしなければならない。どちらの場合も後の命令に影響を及ぼさない。
【0097】
デスティネーションが一致する場合、このような一致を有する命令が既に完了しているならば、一致されたレジスタために計算されたより新しい値がその結果パイプラインを通して既に下向きに送られていることに注目すべきである。それによって新しい結果は、新しい値を続く命令に既に送っている。このような一致を有する命令が未だ実行されていないならば、それは、後ほどその出力を結果ストリームに送る、よって順次それに続く命令に送る。どちらの場合も、前の命令から生じるように一致された結果は、同一のデスティネーションレジスタための値を有するか計算するだろう命令の存在によって古いものとされる。
【0098】
機能停止
本発明により形成されたコンピュータでは、命令は、それがパイプラインのステージを通過するときソースデータを蓄積する。命令は、行き合う反対方向に流れる結果からこのソースデータを収集する。最後に、各命令は、それを実行することができるパイプラインのステージに到達する。命令が既に必要とされるソースデータの全てを蓄積していたならば、それは直ちに実行される。しかし、必要とされるソースデータの幾つか又は全部は消失されているかもしれない。
【0099】
必要とされるソースデータの幾つか又は全部が消失されているならば、2つのことのうちの一つが起こる。パイプラインの後のステージは必要とされる値を計算することできるならば、命令は、その別のステージで実行されるべきパイプラインを通して上向きに送られる。しかしながら、命令がそれを実行することができるパイプラインにおける最後のステージに既に到達していて、命令がなおソースデータの幾つか又は全部を消失しているならば、その命令は、ソースデータが結果パイプを介して到達するまでそこで待たなければならない。このような遅延は“機能停止”と呼ばれる。
【0100】
このような機能停止は、本発明の場合では、それが純粋にローカル事象であり得ることを除けば、他のプロセッサにおける機能停止事象と同様である。パイプのどこかで1つのステージがただ機能停止しただけであるため、全パイプラインを機能停止する必要はない。その関数を実行するか又はデータを前に又は結果を後ろに送るために他のステージのためのパイプラインに十分な空のスペースがあるならば、他のステージは依然として自由にそのように行える。本発明のパイプラインの設計においては一般的なグローバル機能停止を必要とするものは何もない。従来のパイプラインにおいて機能停止状態を認識し、作動する回路は、このようなシステムの速度においてはしばしば制限要因であるため、これは相当な長所である。
【0101】
弾力的である、すなわち要求があり次第余分のデータを吸収又は送ることのできる空のスペースを有しているパイプラインプロセッサをいかに設計するかは、当業者に周知である。本発明のパイプラインにこのようなバッファを入れることによって、幾らかのローカル機能停止が発生したとしても、機能停止によって影響を受けない部分は作動し続ける。もちろん、機能停止が十分長く存続するならば、パイプラインにおけるどこかでの機能停止は、最後には全パイプラインを停止させるだろう。しかしこのような事象はまれである。
【0102】
レジスタファイル及びレジスタキャッシュ
ここで、開示したパイプラインプロセッサの簡単な形式は、過去の命令だけからの結果をパイプラインの上部にあるレジスタファイルに記憶する。ソース値を必要とする命令は結果ストリームからの命令を蓄積する。このような結果は、もしこれが別の方法で使用可能でないならば、レジスタファイルからの結果ストリームを入力しなければならない。おおくの命令は2つのソース値を必要とするため、これはレジスタファイルからの値に対して大きな要求を発生する。
【0103】
プログラムの統計的分析により、レジスタのサブセットはその他のものよりも非常にしばしば使用されることが示される。しばしば使用されるレジスタの値を早くパイプラインに記憶させることによって、より精巧な設計は、レジスタファイルからの情報に対する要求を減少させる。このような機構を“レジスタキャッシュ”と呼ぶ。このようなレジスタキャッシュを有するパイプラインは図6に示されている。
【0104】
図6では、レジスタキャッシュ160は、通信パス162によってレジスタキャッシュインターフェースステージ25に接続されている。レジスタキャッシュインターフェースステージは、その動作を制御するために通信パス52によってレジスタファイルに接続する。図6では、単一のレジスタキャッシュはデコードステージ24の丁度上に示されている。これはレジスタキャッシュを配置する妥当な場所であるけれども、それは決して唯一の可能な場所ではない。パイプラインにおいて、レジスタキャッシュを配置するのに便利なところはどこでも1つ以上のレジスタキャッシュが配置される。いかなる方法でも、レジスタキャッシュを含ませることは、パイプライン動作の正確さを変えない。レジスタキャッシュは、随分前に計算された結果をレジスタファイルで探す必要がある機会を減少させることによってマシンの速度を速めることをただ助けるだけである。
【0105】
幾つかのレジスタキャッシュのそれぞれは、レジスタファイルにおけるレジスタのサブセットための値を記憶する。これらのサブセットは部分的に重なるかもしれないし又は重ならないかもしれない。その最新の既知値がキャッシュに記憶される特定のレジスタの名前又はアドレスは一定であるか又はキャッシュに記憶されているサブセットは動的に変化する。可能な構成数はエンドレスである。何か特定の応用のために最も費用がかかる有効な装置の選択は、各構成が提供する性能上の改良の詳細な統計的研究を必要とする。
【0106】
ソース一致
レジスタキャッシュは次のような2ステップで機能する。第一に、レジスタキャッシュにおける有効レジスタのレジスタ名又はレジスタアドレスは、ステージ25で保持される命令におけるソースレジスタ名又はレジスタアドレスと比較される。一致がある所はどこででも命令は、それをコピーすることによってキャッシュからの値を蓄積する。
【0107】
デスティネーション一致
第二に、命令のデスティネーションレジスタ名は、レジスタキャッシュに保持される全てのレジスタ名と比較される。一致が見つかった任意のレジスタ名は、次のようなレジスタキャッシュの内容又は状態に変化を引き起こす。もし命令が既にそのデスティネーションレジスタのための値を計算したならば、その値はコピーされ、レジスタキャッシュに入れられ、かつ有効とマークされる。もし命令がそのデスティネーションレジスタのための値をまだ計算されていないならば、対応するレジスタキャッシュエントリは無効とマークされる。
【0108】
結果一致
結果がレジスタキャッシュに送られるとき、それはまたレジスタキャッシュの状態又は内容を変更する。もし一致が、結果の名前とレジスタキャッシュにおけるレジスタ名の間で見つかったならば、結果からの値は、コピーされレジスタキャッシュに入れられ、そのレジスタは有効とマークされる。
【0109】
命令削除
トラップ
トラップ及び割り込みは、最新のコンピュータの設計において連続する難事の原因である。本発明により形成されたパイプラインでは、トラップ及び割り込みは容易に処理される。トラップを生じる命令は、トラップそのものを、あたかもそれが特殊な種類の結果であったかのように扱い、それを結果ストリームに挿入する。トラップの結果がパイプラインを通過すると、それは、それが出会った命令を、命令パイプラインから命令を取り除くか又は命令に無効とマークするかのいずれかによって削除する。
【0110】
図7A及び図7Bは、本発明のパイプラインにおけるトラップの動作を示すことを意図している。ステージ27〜41を有するパイプラインが示されている。各ステージの左部は、その命令内容を示し、各ステージの右部は、その結果内容を示している。図7Aでは、命令I1〜I6は、選択されたステージにおいて、パイプラインが動作している場合を示している。ステージ27及び31は、たまたま命令を含んでいない。単一の普通の結果R1はステージ31における一つの位置を占有する。
【0111】
図7Aは、トラップ結果がその長さに沿って部分的な通路に送られた後の典型的なパイプラインの状態を示す。トラップを引き起こす命令I2はステージ39に示されている。トラップ結果は、2つのステージを下向きに移動してステージ35に到る。トラップI2を引き起こした命令及びトラップ結果によって送られた他の命令I3及びI4は、その名前に斜線を引くことによって図に示されるように無効とマークされる。それらは、その後、パイプから取り除かれる。
【0112】
図7Bは、トラップ結果がさらにパイプラインの下端の方へ移動した後の同一パイプラインの状態を示す。このトラップはステージ29に到達した。その前方に下向きに移動する結果RIは視界から見えなくなった。トラップが渡した命令は、主としてパイプラインを空のままにしておいて、全てパイプラインから取り除かれる。新しい命令I7は、丁度パイプラインに入るが、しかし、トラップが最初に移動するならば、ステージ27で、又は命令が最初に移動するならばステージ29でのいずれかで複数の命令が出会うやいなやトラップによって削除されるだろう。
【0113】
図7Aと図7B間の時間分離は任意である。特定のパイプライン設計では、命令は結果よりも早く又は遅く移動する。したがって、ここで、図示されているのは動作を表しているだけである。当業者は、いかにトラップが特定の命令と相互作用するかの他の最もらしいシナリオをもたらすことが容易にできる。トラップの前方の命令は、パイプライン及び結果パスのこれらの部分の相対速度によりさらに進んで又はより少なく移動する。トラップは、トラップ及び命令の相対伝搬速度によりパイプラインにおいて早かれ遅かれ近づいてくる命令と出会う。
【0114】
トラップ結果が、パイプラインの下部にある図1の命令取り出しユニット34に到達すると、命令取り出しユニットはトラップロケーション又は割り込みロケーションから命令を取り出し始める。したがって、トラップ後の全ての命令は取り除かれ、レジスタファイルの内容を変える。トラップ以前の全ての命令は、もちろん、通常の方法で完了し、その結果をレジスタファイルに正しく配置したままである。
【0115】
推測実行
本発明では、トラップによる不所望命令の削除を可能にする同一の機構は、推測実行ために不適当に発行された命令を削除するために使用され得る。図1の条件付きブランチ取り出しユニット34は、可能な後続命令ストリームの一方又は他方から命令を取り出し、これらを推測的に発行してパイプラインに入れる。そのように発行された各命令は、条件付きブランチの2つの結果のどちらがそれを許容可能にするか、どちらがそれを古いものと認定するかを識別するためにマークされる。
【0116】
条件付きブランチ命令は通常のようにパイプラインを上流に進行する。条件付きブランチ命令は、その結果のどれが推測発行のために選択されるかを示す情報を伝える。条件付きブランチ命令は、そのソースデータとしてデータ要素の値又はそれがテストすることであるレジスタの値を必要とすることに注意されたい。最後には、条件付きブランチ命令は結果ストリームからのその値を蓄積する。そのようにするならば、条件付きブランチ命令は、実行する用意ができている。
【0117】
条件付きブランチの実行
条件付きブランチの実行は任意の他の命令の実行と非常に似ている。命令タイプ及びソースデータに基づいて、条件付きブランチを実行するステージはその結果を決定する。この結果は、前述のトラップ結果と非常に似ている特別の結果として結果パイプに挿入される。条件付きブランチの結果の結果は、推測で不適当に発行された全ての命令を選択的に削除するために下流のステージによって使用される情報をそれとともに伝える。条件付きブランチの結果の結果が命令取り出し機構に到達するとき、命令取り出し機構は、連続命令取り出しのための適当なアドレスを伝える。もちろん、推測が正しかったならば、このような特別な結果が省略される。
【0118】
本発明に使用されるカウンタフローパイプラインのカウンタ同期比較特性は、パイプラインを下流に移動するあらゆる結果が、上流に移動するあらゆる命令に出会うことを確実する。したがって、条件付きブランチ結果は、それが命令取り出し機構に到達するまでどの後の命令もみな相互作用する。したがって、命令が必要とされるならば、いかなる命令も削除を免れられない。
【0119】
サイディング
同時出願におけるカウンタフローパイプラインの記載は、分岐されたパイプラインの説明を含んでいる。この節では、本発明の特別な特徴を示すためにこれらのアイデアを幾分専門的な形で時々使用する。
【0120】
通常、任意の命令セットに含まれる幾つかのタイプの算術演算及び論理演算がある。本発明により形成されたパイプラインでは、各々のこのようなタイプの命令は別々のステージで実行される。例えば、単一ステージはシフト演算に当てられる。シフト演算は比較的まれであるため、このステージはパイプラインを通る情報の流れを滑らかにするために他の演算のためのバッファステージとして役立つ。
【0121】
乗算のようにより長くかかる非常に難しい算術演算に関しては、分岐するパイプラインが使用される。図8は、乗算及び加算を実行するために使用される2つの算術“サイディング(siding)”のブロック図である。4つのパイプラインステージ47、49、51及び53が含まれる。含まれる計算素子は、任意の所望の計算を実行できたけれども、説明に役立つために、乗算器170及び加算器176がまた示されている。乗算器170及び加算器176又は他の計算素子が含まれるものは何でも米国特許第5,187,800号明細書等に記載されているようなパイプライン型装置である。乗算器及び加算器の唯一の重要な特徴は、その入力にオペランドを与えると、最後にはその出力に結果を生じることである。それらはそれ自身パイプライン型装置であるならば、それらは、それらの第1の出力セットを生じる以前に付加的入力セットを受け入れることができる。
【0122】
図8に示されるように、乗算器は、主パイプラインのステージ47からステージ51まで延び、加算器は、ステージ49からステージ57まで延びる。スパンの範囲、すなわち計算素子、この場合、加算器及び乗算器が延びるパイプラインのステージ数は、設計するのに便利であれば何でもよいことを理解しなければならない。この範囲は、含まれる関数の最も高速な実行又はより安価な実行のために選択されるだろう。
【0123】
単一のサイディングの動作
図8の構成は、次のように動作する。ステージ47に到達する乗算命令は、それがそのソースデータ値の全てを蓄積してしまうまで待つ。乗算器の入力に接続されたステージ47は、次に、データパス172上の乗算器にソース値を送ることによって乗算演算を開始する。これは、前述のカウンタフローパイプラインの同時継続出願に記載されている分岐されたパイプラインを修正して使用たものである。これを行った後、次に、ステージは乗算命令を放出して、ステージ49を通って、主パイプラインを上流に進行してステージ51に到る。ステージ51では、乗算演算は積を戻すために乗算装置を待つ。もちろん、よく設計されたマシンでは、命令が2つのステージを前進するのに要する時間は、乗算演算を行うのに要する時間に一致し、計算された積が命令に再結合する前に何らかな待ちが必要であるならば、小さいものである。ステージ51で積が受け取られるならば、乗算命令が実行される。次に、ステージ51は、答えを命令のデスティネーション部及び結果のパイプラインの両方に配置する。
【0124】
インターロックされたサイディングの動作
乗算命令の後に、累積加算命令が続くことがしばしば起こる。このようなプログラムは、多くの数学演算で必要な“積の和”を計算するために一般に使用される。累積加算命令は、新しく形成された積に、レジスタ、例えばレジスタXに記憶されたソース値を加算して、そのデスティネーションレジスタXにその和を戻す。
【0125】
このような命令が与えられたとき、図8に示された演算素子のインターロック配置がいかに動作するかに注目されたい。乗算は前述のように実行される。ステージ51は、乗算命令によって生じた積を、命令が下方に移動し、間もなく加算命令に遭遇する結果ストリームに挿入する。加算命令は、乗算命令の結果なしにその必要なソース値の全てを蓄積することができないため、パイプラインのステージ49を越えて進むことはできない。乗算命令の結果がステージ49おける加算命令に到達するとき、このステージは、加算演算をデータパス178を沿って加算器サイディング176で開始する。加算命令は、次に、ステージ51〜53を通って前進する。加算命令が完了すると、ステージ53は加算命令のデスティネーション部に値を記録し、その上に結果ストリームにもそれを挿入する。それは、結果パイプを下って新しい値を蓄積する次の累積加算命令に進む。
【0126】
その間に、次の乗算命令はステージ47に到達し、その乗算演算を開始している。したがって、計算ステージのインターロック配置は、前の累積加算が終了する前に次の乗算が開始することを可能にする。この演算の重なりは、パイプラインにおける非常に高速な計算を提供する。
【0127】
図8のインターリーブされた構成は、乗算演算及び累積加算演算のシーケンスを必要とする積の非常な高速形成を可能にすることに注目されたい。その上に、結局レジスタXに記憶させる実行和の適性値が、レジスタファイルに参照しないで一つの累積加算演算から次の累積加算演算まで結果パイプラインを下がって送られるため、パイプラインの上部端にあるレジスタファイルへの参照は、完全に避けられることに注目されたい。
【0128】
本発明は、パイプラインの各ステージが特定の命令タイプにある特別の関係を有することを企図する。幾つかのステージは加算し、幾つかはメモリに参照し、幾つかは論理演算を行う。幾つかのステージは、いくつもの演算又は全ての演算さえ実行する結合ステージである。本発明は、ステージにおいて異なる演算の配列を有する多くのステージ配置があることを企図する。例えば、加算器ステージは、本発明の一つの実施例においてシフトステージより先にきて、他の実施例においてシフトステージの後にくる。ステージが演算を実行することができる特定の順序は、実行されるべき命令の細部によって決定されるべきである。多くの異なる配列は異なる目的のため有用であることが分かる。
【0129】
メモリ
図9は、本発明の主パイプラインと主メモリ60の間の好ましい接続を示している。主メモリ60は、一般的形で現在普通に使用されているものと同様で、当業者によく知られている。メモリシステムは、メモリシステム制御190、キャッシュメモリ62及び主メモリ60からなる。メモリシステムは、前述のように主パイプラインのデータメモリローンチステージ26から入力される。
【0130】
メモリ参照命令が主パイプラインのステージ26に到達すると、そのステージは、通信パス196及び制御パス197を介してメモリシステム制御190に命令からのソース情報を送り込む。他のこのような演算に関してのように、命令のためのソース情報が命令において全てまだ使用可能でないならば、そのソース情報が結果ストリームから蓄積されるまで、命令はステージ26で待つ。ソース情報をメモリシステムに送ったならば、ステージ26は、メモリ参照命令がパイプラインを上がって移動することを可能にする。メモリ参照命令は、メモリシステムからの応答をステージ192で待つ。
【0131】
アドレス変換
当業者は、メモリシステムの動作ステップを認識する。メモリシステムは、最初にソース情報をその内容が所望されるメモリアドレスに変換する。最新のコンピュータには使用されている多くの変換方式がある。本発明の設計者は、このシステムの要求に応じて一つの方式を選択する。それらの目的は、もちろん、プログラムに使用されているアドレス値をコンピュータのメモリシステムにおけるロケーションに変換することである。
【0132】
キャッシュルックアップ
次に、メモリシステムは、そのキャッシュメモリにおいてアドレスされたロケーションの値を探す。このような値が見つかるならば、“キャッシュヒット”が発生すると言われ、後述されるように必要なメモリ動作はほとんど終了される。このような値が見つからないならば、“キャッシュミス”が発生すると言われ、メモリシステムは主メモリにおいてこの値を探さなければならない。
【0133】
キャッシュヒット
従来の計算機システムでは、キャッシュミスは、通常コンピュータに報告されない。しかしながら、本発明の好ましい実施例では、メモリ動作を開始した命令は、主パイプラインのステージ192で待っている。もしキャッシュヒットが発生するならば、キャッシュからの取り出された値を示すデータは、パス198を介してステージ192に戻り、メモリ命令が実行される。ステージ192は、その情報を命令のデスティネーション部へコピーし、またそれを結果ストリームにそれを配置する。その結果、メモリ命令は完了し、それがそのデスティネーション値をパイプラインの上部端にあるレジスタファイルにコピーするまで更なる動作要求はない。
【0134】
キャッシュミス
キャッシュミスが発生するならば、メモリシステムは、パス198を介してステージ192にキャッシュミスがあったことを示すメッセージを送る。この場合ステージ192は、メモリ命令を出して、パイプを上向きに移動させるが、しかし命令はまだ完了していない。このようなメモリ命令は、それが、主メモリから戻るために情報を再び待つステージ194に移動する。主メモリへのアクセスが成功するならば、情報は、パス200を介してメモリ動作を完了するステージ194に送られる。このステージ194は、命令のデスティネーション部に戻された値を配置し、それを結果ストリームに挿入する。
【0135】
メモリ障害
要求される情報が主メモリで使用可能でないことが起こる。これが検出されるやいなや、アドレス変換処理の一部として又は主メモリへのアクセス後のいずれかに、障害メッセージが、それぞれパス198を介してステージ192又はパス200を介してステージ194のいずれかに戻される。この場合、トラップが指示されなければならない。前述の如く、ステージ192又はステージ194は、結果ストリームに特別のトラップ結果を配置することによって開始される。
【0136】
サイディング構成の利点
好ましい実施例の構成の一つの利点は、それが、幾つかのメモリ参照が直ぐにしがかり中(outstanding)となることを可能にすることである。メモリ参照命令が主パイプラインのステージ26を離れるやいなや、他の命令がその位置につく。メモリシステムは、幾つかの部分的に処理された参照を同時に含むパイプライン法でこれらの参照を処理することができる。キャッシュヒットを生じさせる参照は、実際ステージ192で完了する。キャッシュミス及び主メモリへのアクセスを必要とする参照は、時間が長くかかり、ステージ194に値を戻す。キャッシュヒットを生じさせる幾つかの命令は、主メモリへの1回以上の参照が進行中、完了することができる。主パイプラインの簡単な構成は、各命令のために取り出されたデータが、命令が正確な順序で実行されるならば、到達するであろうような他の命令だけに到達することを確実にする。
【0137】
浮動小数点
多くの命令セット、特にSPARC命令セットでは、固定小数点演算と浮動小数点演算との区別がされる。別々のレジスタセットが使用され、別々のコンディションコードなどが使用される。
【0138】
固定小数点演算と浮動小数点演算とのこのような区別がされるコンピュータでは、図10に示されるように分岐されたパイプラインが利点を得るために使用され得る。示されているパイプラインは3つの部分に分けられている。第1のセクション204は、固定小数点演算と浮動小数点演算の両方で共通に使用される。2つの上部セクションの一方、例えば、204は固定小数点演算のために使用され、他方208は浮動小数点演算のために使用される。分岐点にある制御機構210は適切な演算タイプを上向きにそれぞれのパイプラインセクションに送る。
【0139】
分岐点で、固定小数点演算が固定小数点パイプラインを上向きに送られ、浮動小数点演算は浮動小数点演算パイプラインを上向きに送られる。これは、前述のカウンタフローパイプラインに記載されているように分岐の種類に依存するデータである。2つの別々の上部パイプラインからの結果は、結合装置211によって多数の方法のどれかで下位結果ストリームに結合される。最初に来たものが最初にサービスされることが適当である。しかしながら、結果は異なるレジスタを参照し、したがって特定な方法で配列される必要がないため、特定な選択は重要でない。
【0140】
浮動小数点を実施するための他の構成が図11に示されている。ここで、単一のパイプラインは2つのレジスタファイルにサービスする。一方のレジスタファイルは浮動小数点演算212のためのもので、他方のレジスタファイルは固定小数点演算214のためのものである。命令が第1のレジスタファイルに到達する時間までに任意の浮動小数点演算が完了する。固定小数点演算はそのソースオペランドの幾つかを蓄積したが、まだ実行されていない。ステージ212とステージ214間のパイプラインの上部は、固定小数点演算を行うことに必要である回路を含む。
【0141】
この分離は、ファミリの幾つかのメンバーは特定の種類の命令を実行でき、その他のメンバーは実行できないコンピュータファミリにおいて特に有用である。ファミリの単純なメンバーは、図11の外部に対して形成され得る一方、より強力なメンバーは付加ステージを含んでいる。多くの種類の特別な演算が浮動小数点演算に加えて使用される。例えば、グラフィック演算、信号処理演算又は特別の論理関数が設けられている。
【0142】
本発明の好ましい実施例は図10に示すような分岐されたカウンタフローパイプラインからなる。
【0143】
分岐されたカウンタフローパイプラインに接続されているのは、図8に示されるような演算のためのサイディングであり、図9に示されるようなメモリのためのサイディングである。固定小数点乗算及び浮動小数点乗算並びに加算のための演算サイディングが含まれる。
【0144】
本発明の好ましい実施例は、図11に示されるような同時継続出願のカウンタフローパイプラインに概説されている通信プロトコルの非同期形式を使用する。
【0145】
非同期通信プロトコルは、それがパイプラインの弾力的な形式を簡単にし、よって要求されるときはいつでもどこでも結果を結果パイプラインに挿入されることを可能にするため、好ましい。通信されなければならないデータを考慮して、それは回路ができるだけ高速に実行することを可能にするために、好ましい。特に、パイプラインが空であるとき、最大データ転送速度を提供する。
【0146】
本発明の好ましい例では、各ステージは必要とされる処理の特殊部分を行う。加算は、他の演算よりも時間がかかるキャリー演算を必要とするため、別々のステージで論理演算と分離される。
【0147】
当業者は多くの他の方法及び本発明を使用する応用を理解するだろう。したがって、本発明の範囲は、前述の詳細な実施に限定されるものでない。
【図面の簡単な説明】
【図1】命令取り出し装置及びレジスタファイルを含む本発明により形成された一般的なパイプラインプロセッサのブロック図、
【図2】隣接ステージに通信パスを示す本発明により形成されたプロセッサの単一ステージのブロック図、
【図3】本発明により形成された単一ステージための結果修正回路のブロック図、
【図4】本発明により形成された単一ステージための命令修正回路のブロック図、
【図5】命令及び結果がいかに比較されるかを示す本発明の典型的実施例の単一ステージにおける命令ラッチ及びデータラッチ並びにアドレス比較回路のブロック図、
【図6】1以上のレジスタキャッシュがいかにパイプラインに配置されるかを示す図、
【図7】どの命令がなお有効であるかを指示するトラップが発生した直後に本発明により形成されたパイプラインの状態を示す図(A)、および、トラップの結果パッケージが使用できない命令を一掃するパイプラインを通して移動した後のこのようなパイプラインの状態を示す図、
【図8】本発明により形成されたコンピュータは、いかに演算要素を組み込んだかを示す図、
【図9】本発明により形成されたコンピュータは、いかにメモリシステムを組み込んだかを示す図、
【図10】浮動小数点演算及びレジスタファイルを固定小数点演算及びレジスタファイルから分離するブランチパイプラインを示す図、
【図11】別々のレジスタファイル及び別々のステージが、浮動小数点演算を固定小数点演算から分離するために使用される単一のパイプラインを示す図である。
【符号の説明】
20・・命令メモリランチステージ、22・・命令メモリリターンステージ、
24・・デコードステージ、25・・レジスタキャッシュインターフェースステージ、26・・データメモリランチステージ、28・・ALUステージ、
30・・データメモリリターンステージ、32・・レジスタファイル制御ステージ、34・・命令取り出しユニット、36・・命令キャッシュ、
38・・制御装置、40・・カウンタフローパイプライン、
50・・レジスタファイル、52・・通信パス、60・・主メモリ、
61・・パス、62・・データキャッシュ、63・・パス、
100,102・・通信パス。
Claims (23)
- 命令パッケージがソースアドレス及びデスティネーションアドレスを含み、結果パッケージがデスティネーションアドレスを含む計算機システムにおける演算方法において、
命令パッケージを双方向パイプラインのステージを通して上向きに流すステップと、
結果パッケージを前記双方向パイプラインのステージを通して下向きに流すステップと、
シーケンスの命令パッケージを、前記パイプラインにおける相対位置を交換できないよう上向きの流れを維持するステップと、
同一のデスティネーションアドレスを含むシーケンスの結果パッケージを、前記パイプラインにおける相対位置を交換できないよう下向きの流れを維持するステップと、
前記双方向パイプラインを流れている間、各命令パッケージのソースアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較するステップと、
前記ソース/デスティネーションアドレスの比較に応じて前記結果パッケージから前記命令パッケージためのソース値をリトリーブするステップと、
前記双方向パイプラインを流れている間、各命令パッケージのデスティネーションアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較するステップと、
前記ソース/デスティネーションアドレスの比較に応じて、前記命令パッケージによって再計算されているか又は再計算されるだろう前記結果パッケージにおける結果値を無効にするステップと、
ソース値から結果値を計算するステップと、
計算された結果値を前記下向きの流れの結果パッケージに供給するステップとを含むことを特徴とする計算機システムの演算方法。 - ソース値及び命令パッケージにおける前記ソース値の妥当性を識別する情報を保持するステップと、
命令パッケージに計算された結果値を保持するステップと、
結果値及び結果パッケージにおける前記結果値の妥当性を識別する情報を保持するステップと、
前記パイプラインの下部に命令パッケージを注入するステップと、
前記パイプラインの上部又は前記パイプライン内の中間位置に結果パッケージを注入するステップとをさらに含むことを特徴とする請求項1に記載の計算機システムの演算方法。 - 結果値の収集をレジスタセットに保持するステップと、
前記パイプライン内の命令パッケージに対して使用可能である前記収集における前記結果値の選択値を生じさせるステップと
をさらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。 - 前記パイプラインの上部に前記レジスタセットを保持するステップと、
前記収集における前記結果値の選択値を前記パイプラインにおける結果パッケージの下向きの流れに注入するステップとをさらに含むことを特徴とする請求項3に記載の計算機システムの演算方法。 - 前記パイプラインの上部又は前記パイプライン内の中間位置に前記レジスタセットを保持するステップと、
前記レジスタセットの前記結果値を前記パイプラインを下向きに流れる結果パッケージから抽出するステップと、
有効ソース値が前記レジスタセットにあるか又は前記パイプラインにおける後のステージに供給されるべきであるならば、命令パッケージを前記レジスタセットに渡すことを可能にするステップとをさらに含むことを特徴とする請求項3に記載の計算機システムの演算方法。 - 少なくとも一つがしばしば使用される結果値を保持している複数のレジスタセットを前記パイプライン内に保持するステップをさらに含むことを特徴とする請求項3に記載の計算機システムの演算方法。
- 前記パイプラインの種々の前記ステージで特定の処理関数を実行するステップをさらに含み、前記ステージのいくつかは、前記パイプラインに沿った異なる位置で同様な処理関数を実行することを特徴とする請求項2に記載の計算機システムの演算方法。
- 命令パッケージが全ての必要なソース値を検索した後、このような関数を実行することができるパイプラインにおける最も早いステージで処理関数を実行するステップと、
前記可能なステージがこのような処理関数を実行することができるパイプラインにおける最後のステージでなければ、命令パッケージが全ての必要なソース値を検索しなかったならば、このような処理関数を実行することができるステージを越えて進むステップとをさらに含むことを特徴とする請求項7に記載の計算機システムの演算方法。 - 前記パイプラインの動作における通常の結果値としてコンディションコードを処理することによってコンディションコードをハンドリングするステップをさらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。
- 結果ストリームに結果の削除を挿入することによってトラップ及び割り込みのような例外をハンドリングするステップをさらに含み、命令ストリームにおける下位の命令パッケージはトラップ結果に応じて命令パッケージの上向きの流れから取り除くことを特徴とする請求項2に記載の計算機システムの演算方法。
- 異なる種類の命令パッケージの実行を容易にするために前記パイプラインにブランチを提供するステップをさらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。
- 固定小数点算術演算、浮動小数点算術演算、及び/又はメモリ演算を容易にするために前記パイプラインにブランチを提供するステップをさらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。
- 命令ストリームの推測実行を実行するステップと、
前記結果ストリームを下向きに流す条件付きブランチの結果に応じて命令パッケージの上向きの流れから不正確に選択された命令ストリームから命令パッケージを取り除くステップとを
さらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。 - 前記結果ストリームを下向きに流す結果パッケージにおけるコンディションコード及び/又はプログラム状態語情報を含めるステップをさらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。
- 少なくとも2つの位置で接続するサイディングを前記パイプラインに提供するステップと、
前記パイプラインに沿った第1の位置にある情報を命令パッケージ又は結果パッケージからサイディングパッケージに供給するステップと、
前記サイディングパッケージを前記命令パッケージ又は結果パッケージに並列に前記サイディングに沿って流れるようにするステップと、
前記サイディングパッケージを前記パイプラインに沿った第2の位置にある前記命令パッケージ又は結果パッケージを再結合するステップとをさらに含むことを特徴とする請求項2に記載の計算機システムの演算方法。 - 算術演算、メモリ演算又はレジスタ演算あるいはキャッシュアクセス演算を実行するためにサイディングを使用するステップをさらに含むことを特徴とする請求項15に記載の計算機システムの演算方法。
- 前記パイプラインに沿って命令パッケージの上向きの流れと通信するためにサイディングを接続するステップをさらに含むことを特徴とする請求項15に記載の計算機システムの演算方法。
- 前記パイプラインに対する他のサイディングにサイディングを接続するステップをさらに含むことを特徴とする請求項15に記載の計算機システムの演算方法。
- 双方向パイプラインのステージを通して上向きに流れるソースアドレス及びデスティネーションアドレスを含む命令パッケージと、
双方向パイプラインのステージを通して下向きに流れるデスティネーションアドレスを含む結果パッケージと、
命令パッケージを元来のシーケンスで前記上向きの流れに保持する回路と、
同一のデスティネーションアドレスを含む結果パッケージを前記下向きの流れにシーケンスで保持する回路と、
前記双方向パイプラインを流れている間、各命令パッケージのソースアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較する回路と、
前記ソース/デスティネーションアドレスの比較に応じて前記結果パッケージから前記命令パッケージためのソース値をリトリーブする回路と、
前記双方向パイプラインを流れている間、各命令パッケージのデスティネーションアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較する回路と、
前記ソース/デスティネーションアドレスの比較に応じて前記命令パッケージによって再計算されているか又は再計算されるだろう前記結果パッケージにおける結果値を無効にする回路と、
ソース値から結果値を計算する回路と、
計算された結果値を前記下向きの流れの結果パッケージに供給する回路と
を備えたことを特徴とする計算機システム。 - ソース値及び命令パッケージにおける前記ソース値の妥当性を識別する情報を保持する回路と、
命令パッケージに計算された結果値を保持する回路と、
結果値及び結果パッケージにおける前記結果値の妥当性を識別する情報を保持する回路と、
前記パイプラインの下部に命令パッケージを注入する回路と、
前記パイプラインの上部又は前記パイプライン内の中間位置に結果パッケージを注入する回路と
をさらに備えたことを特徴とする請求項19に記載の計算機システム。 - 結果値の収集を保持するレジスタセットと、前記結果値の選択値を前記パイプラインの下向きの流れに注入する回路とをさらに備えたことを特徴とする請求項20に記載の計算機システム。
- 前記パイプライン内にあり、少なくとも一つがしばしば使用される結果値を保持する複数のレジスタセットをさらに備えたことを特徴とする請求項21に記載の計算機システム。
- 前記パイプラインの種々の前記ステージで特定の処理関数を実行する回路をさらに備え、前記ステージのいくつかは、前記パイプラインに沿った異なる位置で同様な処理関数を実行することを特徴とする請求項20に記載の計算機システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14065593A | 1993-10-21 | 1993-10-21 | |
US140,655 | 1993-10-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH07271579A JPH07271579A (ja) | 1995-10-20 |
JP3575632B2 true JP3575632B2 (ja) | 2004-10-13 |
Family
ID=22492224
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP28157994A Expired - Fee Related JP3575632B2 (ja) | 1993-10-21 | 1994-10-21 | 計算機システムにおける演算方法および計算機システム |
Country Status (5)
Country | Link |
---|---|
US (1) | US5600848A (ja) |
EP (1) | EP0650116B1 (ja) |
JP (1) | JP3575632B2 (ja) |
KR (1) | KR100335478B1 (ja) |
DE (1) | DE69415126T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011102432A1 (ja) | 2010-02-18 | 2011-08-25 | Inoue Katsumi | 情報絞り込み検出機能を備えたメモリ、このメモリを用いた情報検出方法、このメモリを含む装置、情報の検出方法、メモリの使用方法、およびメモリアドレス比較回路 |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5956747A (en) * | 1994-12-15 | 1999-09-21 | Sun Microsystems, Inc. | Processor having a plurality of pipelines and a mechanism for maintaining coherency among register values in the pipelines |
US5704054A (en) * | 1995-05-09 | 1997-12-30 | Yale University | Counterflow pipeline processor architecture for semi-custom application specific IC's |
JP3510729B2 (ja) * | 1996-02-29 | 2004-03-29 | 三洋電機株式会社 | 命令実行方法および命令実行装置 |
US5790826A (en) * | 1996-03-19 | 1998-08-04 | S3 Incorporated | Reduced register-dependency checking for paired-instruction dispatch in a superscalar processor with partial register writes |
US5778248A (en) * | 1996-06-17 | 1998-07-07 | Sun Microsystems, Inc. | Fast microprocessor stage bypass logic enable |
JP3790602B2 (ja) * | 1997-04-25 | 2006-06-28 | 富士ゼロックス株式会社 | 情報共有装置 |
US5996059A (en) * | 1997-07-01 | 1999-11-30 | National Semiconductor Corporation | System for monitoring an execution pipeline utilizing an address pipeline in parallel with the execution pipeline |
US6360288B1 (en) * | 1997-10-17 | 2002-03-19 | Sun Microsystems, Inc. | Method and modules for control of pipelines carrying data using pipelines carrying control signals |
US6393552B1 (en) | 1998-06-19 | 2002-05-21 | International Business Machines Corporation | Method and system for dividing a computer processor register into sectors |
US6336160B1 (en) | 1998-06-19 | 2002-01-01 | International Business Machines Corporation | Method and system for dividing a computer processor register into sectors and storing frequently used values therein |
US6085316A (en) * | 1998-07-28 | 2000-07-04 | Sun Microsystems, Inc. | Layered counterflow pipeline processor with anticipatory control |
US6163839A (en) | 1998-09-30 | 2000-12-19 | Intel Corporation | Non-stalling circular counterflow pipeline processor with reorder buffer |
JP4170543B2 (ja) | 1998-12-03 | 2008-10-22 | エルジー化学株式会社 | モノグリセリドスルフォン酸塩を含有する複合石鹸組成物の製造方法 |
US6807624B1 (en) | 1998-12-17 | 2004-10-19 | Fujitsu Limited | Instruction control device and method therefor |
US6192466B1 (en) | 1999-01-21 | 2001-02-20 | International Business Machines Corporation | Pipeline control for high-frequency pipelined designs |
WO2001016702A1 (en) | 1999-09-01 | 2001-03-08 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
EP1236088B9 (en) | 1999-09-01 | 2008-10-08 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
US6862677B1 (en) * | 2000-02-16 | 2005-03-01 | Koninklijke Philips Electronics N.V. | System and method for eliminating write back to register using dead field indicator |
US7681018B2 (en) * | 2000-08-31 | 2010-03-16 | Intel Corporation | Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set |
US7437724B2 (en) * | 2002-04-03 | 2008-10-14 | Intel Corporation | Registers for data transfers |
US6981131B2 (en) * | 2002-09-04 | 2005-12-27 | Arm Limited | Early condition code evaluation at pipeline stages generating pass signals for controlling coprocessor pipeline executing same conditional instruction |
CN1816799A (zh) * | 2003-04-16 | 2006-08-09 | 皇家飞利浦电子股份有限公司 | 在时间-固定处理器中对条件操作的支持 |
US7743238B2 (en) * | 2003-05-09 | 2010-06-22 | Arm Limited | Accessing items of architectural state from a register cache in a data processing apparatus when performing branch prediction operations for an indirect branch instruction |
US20070123792A1 (en) * | 2005-11-17 | 2007-05-31 | Charlotte-Mecklenburg Hospital Authority D/B/A Carolinas Medical Center | System and method for determining airway obstruction |
US7913007B2 (en) * | 2007-09-27 | 2011-03-22 | The University Of North Carolina | Systems, methods, and computer readable media for preemption in asynchronous systems using anti-tokens |
US8669779B2 (en) | 2008-06-27 | 2014-03-11 | The University Of North Carolina At Chapel Hill | Systems, pipeline stages, and computer readable media for advanced asynchronous pipeline circuits |
US8452944B2 (en) * | 2009-05-22 | 2013-05-28 | Canon Kabushiki Kaisha | Information processing apparatus and information processing method |
US20140281413A1 (en) * | 2013-03-14 | 2014-09-18 | Mips Technologies, Inc. | Superforwarding Processor |
WO2015192062A1 (en) | 2014-06-12 | 2015-12-17 | The University Of North Carolina At Chapel Hill | Camera sensor with event token based image capture and reconstruction |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
NL297562A (ja) * | 1962-09-06 | |||
GB1506972A (en) * | 1976-02-06 | 1978-04-12 | Int Computers Ltd | Data processing systems |
JPS57139856A (en) * | 1981-02-23 | 1982-08-30 | Nippon Telegr & Teleph Corp <Ntt> | Data driving information processing system |
JPS6015746A (ja) * | 1983-07-08 | 1985-01-26 | Hitachi Ltd | デ−タ処理装置 |
US5187800A (en) * | 1985-01-04 | 1993-02-16 | Sun Microsystems, Inc. | Asynchronous pipelined data processing system |
US4679213A (en) * | 1985-01-08 | 1987-07-07 | Sutherland Ivan E | Asynchronous queue system |
DE3782819D1 (de) * | 1987-06-02 | 1993-01-07 | Itt Ind Gmbh Deutsche | Steuerprozessor. |
US4991078A (en) * | 1987-09-29 | 1991-02-05 | Digital Equipment Corporation | Apparatus and method for a pipelined central processing unit in a data processing system |
JPH081599B2 (ja) * | 1988-02-24 | 1996-01-10 | 三菱電機株式会社 | データ処理装置 |
GB8817911D0 (en) * | 1988-07-27 | 1988-09-01 | Int Computers Ltd | Data processing apparatus |
US4996661A (en) * | 1988-10-05 | 1991-02-26 | United Technologies Corporation | Single chip complex floating point numeric processor |
EP0365188B1 (en) * | 1988-10-18 | 1996-09-18 | Hewlett-Packard Company | Central processor condition code method and apparatus |
JPH0719222B2 (ja) * | 1989-03-30 | 1995-03-06 | 日本電気株式会社 | ストアバッフア |
US5123108A (en) * | 1989-09-11 | 1992-06-16 | Wang Laboratories, Inc. | Improved cpu pipeline having register file bypass and working register bypass on update/access address compare |
JP2816248B2 (ja) * | 1989-11-08 | 1998-10-27 | 株式会社日立製作所 | データプロセッサ |
US5289577A (en) * | 1992-06-04 | 1994-02-22 | International Business Machines Incorporated | Process-pipeline architecture for image/video processing |
US5386563A (en) * | 1992-10-13 | 1995-01-31 | Advanced Risc Machines Limited | Register substitution during exception processing |
US5386585A (en) * | 1993-02-03 | 1995-01-31 | Intel Corporation | Self-timed data pipeline apparatus using asynchronous stages having toggle flip-flops |
-
1994
- 1994-10-17 DE DE69415126T patent/DE69415126T2/de not_active Expired - Fee Related
- 1994-10-17 EP EP94307600A patent/EP0650116B1/en not_active Expired - Lifetime
- 1994-10-20 KR KR1019940026837A patent/KR100335478B1/ko not_active IP Right Cessation
- 1994-10-21 JP JP28157994A patent/JP3575632B2/ja not_active Expired - Fee Related
-
1995
- 1995-06-07 US US08/477,533 patent/US5600848A/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011102432A1 (ja) | 2010-02-18 | 2011-08-25 | Inoue Katsumi | 情報絞り込み検出機能を備えたメモリ、このメモリを用いた情報検出方法、このメモリを含む装置、情報の検出方法、メモリの使用方法、およびメモリアドレス比較回路 |
Also Published As
Publication number | Publication date |
---|---|
US5600848A (en) | 1997-02-04 |
DE69415126T2 (de) | 1999-07-08 |
JPH07271579A (ja) | 1995-10-20 |
DE69415126D1 (de) | 1999-01-21 |
KR100335478B1 (ko) | 2002-10-04 |
EP0650116A1 (en) | 1995-04-26 |
EP0650116B1 (en) | 1998-12-09 |
KR950012209A (ko) | 1995-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3575632B2 (ja) | 計算機システムにおける演算方法および計算機システム | |
US6163839A (en) | Non-stalling circular counterflow pipeline processor with reorder buffer | |
Franklin et al. | The expandable split window paradigm for exploiting fine-grain parallelsim | |
US5974538A (en) | Method and apparatus for annotating operands in a computer system with source instruction identifiers | |
US6918030B2 (en) | Microprocessor for executing speculative load instructions with retry of speculative load instruction without calling any recovery procedures | |
US5649138A (en) | Time dependent rerouting of instructions in plurality of reservation stations of a superscalar microprocessor | |
US6216234B1 (en) | Processor having execution core sections operating at different clock rates | |
JP5221546B2 (ja) | 同時に予測された分岐命令を解決するための方法および装置 | |
US5790821A (en) | Control bit vector storage for storing control vectors corresponding to instruction operations in a microprocessor | |
US20090037697A1 (en) | System and method of load-store forwarding | |
US6487675B2 (en) | Processor having execution core sections operating at different clock rates | |
JP3678443B2 (ja) | スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ | |
JP2000029699A (ja) | プロセサア―キテクチャ | |
JP2004145903A (ja) | スーパースケーラマイクロプロセサ | |
US10338923B2 (en) | Branch prediction path wrong guess instruction | |
KR100216684B1 (ko) | 명령어 분기 방법 및 프로세서 | |
US6381691B1 (en) | Method and apparatus for reordering memory operations along multiple execution paths in a processor | |
Torng et al. | Interrupt handling for out-of-order execution processors | |
KR100431975B1 (ko) | 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템 | |
EP0912927B1 (en) | A load/store unit with multiple pointers for completing store and load-miss instructions | |
Hillebrand et al. | Design and evaluation of a superscalar RISC processor | |
Garalnabi | Hardware/software cost analysis of interrupt processing strategies | |
WO1998002801A1 (en) | A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same | |
WO1998020416A1 (en) | A stride-based data address prediction structure | |
JPH11259295A (ja) | プロセッサの命令スケジューリング装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040531 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040615 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040701 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |