JP3731843B2 - 命令シーケンスを実行する方法及び装置 - Google Patents

命令シーケンスを実行する方法及び装置 Download PDF

Info

Publication number
JP3731843B2
JP3731843B2 JP25972997A JP25972997A JP3731843B2 JP 3731843 B2 JP3731843 B2 JP 3731843B2 JP 25972997 A JP25972997 A JP 25972997A JP 25972997 A JP25972997 A JP 25972997A JP 3731843 B2 JP3731843 B2 JP 3731843B2
Authority
JP
Japan
Prior art keywords
instruction
register
processing
instructions
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP25972997A
Other languages
English (en)
Other versions
JPH10124317A (ja
Inventor
ルドルフ・ナサン・リッチスカッフン
カタッムリ・エカナハム
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH10124317A publication Critical patent/JPH10124317A/ja
Application granted granted Critical
Publication of JP3731843B2 publication Critical patent/JP3731843B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、一般に、プログラム記憶式デジタル・コンピュータに関し、より具体的には、命令の実行シーケンスが二つの実行モードで実行され、第一の実行モードが、命令を実行するだけでなく、同時にまだ並列化されていない命令シーケンスを並列化するために使用され、第二のモードが、すでに並列化されている命令シーケンスを別々の処理要素で並列に実行するのに使用されるコンピュータ・システムおよび方法に関する。本発明はまた、命令シーケンスの並列化形態にも関する。
【0002】
【従来の技術】
デジタル・コンピュータ・プログラムをより速く実行する一つの方法は、その部分のいくつかを別々のプロセッサで並列に実行する方法である。これを行う一つの方法は、そのような並列的な実行に備えてプログラムを書くことができるよう、プログラミング環境およびコンピュータ・システムを定義する方法である。不運にも、命令の逐次実行が仮定されている多くの有用なプログラムがすでに作成されている。これらの逐次プログラムをより速く実行できることが望ましく、そのため、従来技術において、そのようなプログラムを並列実行に備えて並列化する試みがなされてきた。
【0003】
この分野の従来の研究の大部分は、プログラムの並列仕様を作成することに依存する。これはいくつかの方法で達成されてきた。プログラムを並列化し、従来のプロセッサを数多く有するマルチプロセッサ・システムのためのコードを生成する高性能のコンパイラが作成された。このようなコンパイラのいくつかは、並列性を自動的に明らかにする(たとえば、D. A. PaduaおよびM. J. Wolfeによる、Comm. of ACMにおける「Advanced Compiler Optimizations for Supercomputers」Vol. 29, page 12 et seq., Dec. 1986)。他のものは、プログラマによって供される注釈を手がかりにする(たとえば、Alan H. Karpによる、Computerにおける「Programming for Parallelism」Vol. 20, Page 5 et seq., May 1987)。もう一つの手法は、並列実行に順応することができる特殊化したハードウェア、たとえばベクトル・プロセッサ、VLIWアーキテクチャなどを創造することである。ここでもまた、コンパイラが逐次プログラムをこれらの機械で使用するのに適したコードに翻訳する。これらの場合では、コンパイル労力は相当大きい。より斬新な手法は、本来は並列な実行機構、たとえばデータフロー機(J. B. Dennisによる、Computerにおける「Dataflow Supercomputers」Vol. 13, page 11 et seq., Nov. 1980)およびその機構で使用するための並列コードを自動的に生成するプログラムの宣言仕様を創造することであった(ArvindおよびK. Ekanadhamによる、Jour. of Parallel & Distributed Computingにおける「Future Scientific Programming on Parallel Machines」Vol. 5, Dec. 1988を参照)。
【0004】
前記手法のすべてにおいて、コンピュータ・プログラムを並列化し、異なる部分を並列に実行することが安全であることを決定するタスクは、コンパイラレベルで実施されるか、それよりも早くにプログラミングレベルで(すなわち、データをもつコードの実働実行の前に)実施されるかのいずれかである。プロセッサは、実行時に異なる部分を並列に実行することが安全であるかどうかを決定するのに役割を演じない。その理由は、この決定は、プログラマまたはコンパイラのいずれかによってすでに下されているからである。
【0005】
もう一つの手法は、並列化されていないコードを実行時にマルチプロセッサ・システムに持ち込み、並列実行に備えてコードを分割し、コードの並列実行が有効であるかどうかを決定することにおいてそのマルチプロセッサシステムに積極的な役割を与える手法である。この手法は、命令の少なくともいくつかの実行が暫定的に行われることにおいて、他の手法から区別することができる。並列実行が完全に有効であるかどうかは、実行前には一般にわからない。このような手法は、以下の参考文献によって例示されている。
【0006】
本特許出願と譲受人を同じくする「Multiple Sequence Processor System」と題する米国特許第5,297,281号では、命令は、何らかの区切り規則にしたがってグループに分割されたのち、少なくとも二つのグループが並列に実行される。命令のグループの一つが他のすべてよりも順序的に早く、もっとも早いグループの正しい実行が仮定され、その後のグループは暫定的にしか並列には実行されない。その後の命令グループは、それより先の命令グループがすでに実行されているかのように、レジスタおよび記憶場所からデータを読み出す。制御装置が、後の命令グループによって使用されるデータがそれよりも先のグループ中の命令によって変更されるかどうか(後のグループによってそれが使用されたのち)を監視する。後のグループによる記憶場所およびレジスタへの格納は、別の場所で一時的にしか実施されない。後のグループによって使用されるデータのすべてが有効である(すなわち、先のグループによって変更されていない)ならば、後のグループの結果が有効であり、コミットされることができる。そうでなければ、その後のグループは再実行される。
【0007】
米国特許第4,825,360号では、命令グループが暫定的に並列に実行されたのち、順番に確認されるという点で同様な方式が使用されている。しかし、この方式では、コンパイルステップにより、また、グループ中の最後の命令以外の命令に対する副作用を減らす(好ましくは除く)ことにより、成功の確率が高められている。その結果、このシステムが従来の逐次コードを並列化するのに使用することができるかは明かではない。
【0008】
米国特許第4,903,196号では、ユニプロセッサが別個の非同期実行装置での実行に備えてコードを並列化し、実行装置どうしは、概念的順序ではより早い命令によって変更されるデータを使用することを避けるため、それらの命令が実行されるまで、必要ならば互いに待機し合う。1セットの汎用レジスタ(GPR)および1個のデコーダしかない。一連の専用タグがユニプロセッサ中の各GPRおよび実行装置に関連している。これらのタグは、多数の実行装置が、GPRを順に使用して、または、異なるGPRを並行に使用して、多数の命令を並行に実行することを可能にすると同時に、GPRによって実行装置に供給されるデータの論理完全性を保持する。各GPRおよび各実行装置に関連するタグが、所与の実行装置がある特定のGPRに格納することを許される前に、異なる実行装置によるその当のGPRへの直前の格納が必ず完了しているよう、個々のGPRと実行装置との間の順序のつながりを格納する。また、タグは、1個以上の実行装置による所与のGPRからのすべての読み出しが、そのGPRへの後続の格納動作が許される前に完了することを保証する。
【0009】
本発明の著者たちによって発案された米国特許第5,347,639号では、目標並列化エンジンが、それぞれが一つの実行シーケンスの解析によってスケジュールされるn個の同一の処理要素からなる自己並列化方式が実現されている。これらの処理要素は、並列モードの動作で、それぞれの汎用レジスタのセットを使用することにより、元の実行シーケンスのそれぞれの個々の部分を実行する。逐次実行シーケンスの解析が、他の命令が使用するレジスタの値をどの命令がセットするかを確立する。そのようなセット/使用対の命令が異なる処理要素でスケジュールされるとき、そのような命令の間で送り出しおよび受け取りの義務を確立する必要性が存在する。命令に関連する受け取り義務は、逐次実行シーケンスの中で別の処理要素によって実行される介在する命令がそのレジスタの新たな値をセットしたとき、処理要素が現在値をそれ自体の汎用レジスタのセットの中で所与の命令のための入力として使用することを妨げる。セットする命令における送り出し義務は、レジスタの正しい現在値を、適切にタグ付けした状態で、使用する処理要素に送り出す。
【0010】
さらに、所与の処理要素上でスケジュールされた命令がそれらの元の概念的順序でスケジュールされるよう、命令の、その入力の可用性に対するタイミングおよび同じ処理要素上にスケジュールされた他の命令に対する命令のスケジューリングを実施しなければならない。これは、所与の処理要素の中で、概念的に後の命令が概念的に先の命令の結果を利用することを、そのような使用を打ち消す受け取り義務がないときに考慮する。
【0011】
他にも二つの重要な並列化の態様が本発明に関連する。第一の態様は、同じ記憶場所を目標にする格納命令と取り出し命令とが異なる処理要素によって実行されるときの格納後取り出し条件の扱いに関する。第二のものは、並列化の最後に、または分岐予測誤りの後で機械状態を復元することに関する。前者は、処理要素のセットをシステムのメモリにインタフェースさせる取り出し/格納表のセットを介して制御される。後者は、レジスタをセットする各条件性レベル中の最後の命令と状態生成機構との間の送り出し義務の新たなセットを含む。
【0012】
本発明の著者たちによって発案された米国特許第5,412,784号では、生成される並列コードが分岐進入可能になるよう、自己並列化方式が強化されている。所与の並列化から生成されるコードの各分割された順列の中で、エントリ・ポイントが識別される。処理要素ごとに1個ずつのそのようなエントリ・ポイントのセットをプロフィールと呼ぶ。並列化は、輪郭に沿って入れることができ、並列化のすべての側面が有効なまま残る。これは、並列コードに対し、並列コードを任意の点で入れ、その点から先で実行することを許す、逐次コードに共通に関連する特性を与える。
【0013】
本発明の著者の1人によって発案された米国特許第4,574,349号では、プロセッサが、命令によって識別されるよりも多数のレジスタをアドレス指定することを許すレジスタ・リネーミング方式が発案されている。レジスタ・リネーミングと呼ばれるこの操作は、各時点で、複数のハードウェア・レジスタの1個を所与のアーキテクチャレジスタに関連させるレジスタ対応表の中で実施される。この関連づけは、命令の実行の間にプロセッサによって維持され、実行の結果は、ハードウェア・レジスタを更新するのに使用される。
【0014】
【発明が解決しようとする課題】
本発明の目的は、コンピュータ・プログラムが逐次的に実行されたかのような見かけを与えながらも、そのコンピュータ・プログラムのいくつかの部分の効率的な並列実行を提供することにある。
【0015】
【課題を解決するための手段】
前記目的およびさらなる目的は、本発明にしたがって、一つの命令実行シーケンスをサブ命令シーケンスのセットに分割し、各サブ命令シーケンスを、共通のレジスタ・ファイルを共用する別個の処理要素のセットの異なる1個で実行する自己並列化コンピュータ・システムおよび方法によって達成される。この機械および方法を、SPURR(レジスタ・リネーミングを使用する自己並列化)と名付けた。
【0016】
処理要素が、命令が並列モードで実行されるとき、実行の結果が、すべての処理要素にとってアクセス可能なレジスタの共通のセットに現れるよう、レジスタを変更する命令によって使用されるレジスタをリネームする。レジスタを変更する、逐次実行シーケンスの中の各命令は、共通のレジスタ・プールから次に高い番号のレジスタを割り当てられる。すると、この命令で変更したアーキテクチャ・レジスタはこのハードウェア・レジスタにリネームされ、レジスタ対応表の中でそのように識別される。そして、このレジスタを入力として要する概念的に後続する命令は、リネームされた共通レジスタに関連し、それらの入力をレジスタ変更命令の実行の結果から導出する。そのようなものとして、逐次実行シーケンスによって暗示されるレジスタのセット/使用要求を解決するのに送り出しおよび受け取りの義務がない。そのようなものとして、一つの命令ストリームが動的にリネームされて、共通の拡大したレジスタ・ファイルを使用し、個々の命令を、以下の簡単な制限に合わせて、処理要素のセット上でスケジュールすることができる。すなわち、n個以下の命令は同じサイクルで並列に実行するようにスケジュールされ(占有規則)、命令は、すべてのその入力が利用可能になる前のサイクルで実行するようにスケジュールされることはない(デッドロック回避)。
【0017】
【発明の実施の形態】
SPURRの好ましい実施態様の以下の説明は、6個のセクションに細分する。説明は、以下のセクションからなる。
【0018】
セクション1 SPURR編成の概要
セクション2 専有Zキャッシュ
セクション3 オペランド格納比較の監視
セクション4 分岐の扱い
セクション5 Eモードにおける処理要素に対する命令の割り当ておよび命令処理
セクション6 Zモードにおける処理
【0019】
セクション1 SPURR編成の概要
本発明は、共通のレジスタ・ファイルを共用する処理要素のセットが調和して、命令ストリームの連続セグメントを実行するユニプロセッサ編成である。各処理要素は、命令をデコードし、記憶オペランド・アドレスを生成し、命令を実行し、並列モードで実行する命令によってアドレス指定される共通のレジスタのセットを参照し、更新することができる。これらの処理要素は、プログラム・セグメントの最初の実行の際に調和してレジスタを再命名し、元のセグメントから別個の命令ストリームまたはサブ命令シーケンスを作成し、それらを格納する。セグメントに対応するこれら別個のサブ命令シーケンスは、元のセグメントの並列化形態であり、Zコードと呼ばれる。元のセグメントからの各命令が、並列化されたZコード形態で作成されたサブシーケンスの一つにしか配されないという意味において、これは真の分割である。処理要素それぞれがセグメントの最初の実行の際にそれ自体に割り当てられた命令だけをデコードし、実行し、他の処理要素がそれら自体に割り当てられた命令を並行に実行するため、その同じプログラムセグメントのその後の再実行ははるかに高速になる。
【0020】
セグメントは、PセグメントまたはZセグメントのいずれかである。Pセグメントは、データとで第一の実行モード(「Eモード」と呼ぶ)で処理されて、データとで通常の実行結果を生成するだけでなく、1個以上のZセグメントをも生成する、連続的に実行される命令のシーケンス(すなわち、ユニプロセッサ命令ストリームの通常のセグメント)である。対応するZセグメントが利用可能であるときにプログラム・セグメントが再び実行されるならば、Zセグメントが、Pセグメントの代わりに、SPURRによって第二の実行モード(「Zモード」と呼ぶ)で処理される。
【0021】
EモードとZモードとの間の主な違いは、Eモードの間、すべての処理要素は、Pセグメント中のすべての命令を見るが、それらに割り当てられた命令しか実行しないということである。Zモードの間、各処理要素は、自らに割り当てられた命令だけを実行するだけでなく、それらの命令を見て、デコードする。
【0022】
Eモードにおけるプログラムの逐次実行の結果は、Zモードの間に生じうる例外条件を扱うのに必要なすべての情報要件を確立する。分岐命令ごとに、元のプログラムによって使用されるアーキテクチャレジスタとそれらのリネームされた対応物とを関連させるレジスタ対応表が保存される。この情報は、Zコードと呼ばれる並列実行エンティティに関連する。Zモードで実行されたときの分岐が、Eモードの間に発生した同じ目標および動作を有しないならば、分岐予測誤りが発生したと考えられる。そこで、その分岐に関連する保存した対応表を使用して、共通のレジスタ・ファイルからシステム状態を抽出し、次のセグメントの処理を適切に開始させる。
【0023】
分岐予測誤りを認識したのちZコードを停止させるためには、分岐に先行するすべての命令が実行されたことを保証するための手段が必要である。処理要素が命令を順序外で実行することを許すシステムでは、この保証を得る方法は、処理要素の条件性レベルの概念を含む。
【0024】
SPURRにおけるセグメントは、条件性レベルにさらに分割される。ある命令の条件性レベルとは、セグメント中でその命令に先行する分岐命令の数である。条件性レベルは0で始まり、分岐命令ごとにインクリメントする。セグメントあたりの条件性レベルの最大数は、SPURR中のハードウェア・リソースによって制限され、SPURR中のPセグメントは、この限界に達する前に、Eモードで終了させることができる。Zモードでは分岐命令は1個の処理要素だけによって処理されるが、Eモードは、すべての処理要素が分岐命令を見ることを許し、したがって、ある処理要素に割り当てられたすべての命令の条件性レベルがすべての処理要素によって知られる。命令がそれらの元の順序で処理されるシステムにおいては、処理要素による、より高い条件性レベルをもつ命令がその処理要素によって処理されたという認識が、より小さい条件性レベルをもつすべての命令がその処理要素によって処理されたことを保証する。順序外の命令のスケジューリングが許可されるときには、もう一つの手法が用いられる。分岐命令ごとに、処理要素ごとのスケジュールの中で、最新のサイクルにスケジュールされている命令に分岐の条件性レベルのタグを付け、これを処理要素の条件性レベルとして解釈する。このエントリが、この処理要素でスケジュールされている、より低い条件性レベルをもつすべての命令が、このタグを付けられた命令よりも先にスケジュールされることを保証する。
【0025】
好ましい実施態様では、レジスタ(またはレジスタ同等物)を通過するデータだけが観られ、Zコードで記録されたのち、Mコードで再生される。Eコードがデータを主記憶に格納し、後で同データを主記憶から読み出すならば(レジスタに格納し、後でそのレジスタの中のデータを使用するのとは逆に)、このデータ流はZモードでは再生されない。格納によって扱われて主記憶に達するデータ流が1個の処理要素をしてデータをそのデータを生成する処理要素が実際にそれを生成する前に必要とさせることはあまりないと推測される。好ましい実施態様では、この起こりそうにないエラー状態が起こるならば、それは検出される。
【0026】
エラー状態が検出されると、Zコードの実行は停止し、有効な機械状態が復元し、実行は、復元した機械状態に対応するより早い時点から、いずれか適切なモードで続行する。そのようなエラーに関連する命令のすべてが同じセグメント中で同じ条件性レベルの中に位置し、同じ処理要素に割り当てられているならば、そのようなエラーを回避することは処理要素の能力の範囲内であると仮定される。したがって、本発明によると、新たなZコードが順序外のエラーの発生の結果として生成される場合、新たなZコードが実行するとき、それが同じエラーを生成しないよう、そのようなエラーからの回復もまた、命令のスケジューリングの変更を含むことが好ましい。
【0027】
格納することができるZコードの量に何らかの限界を設けなければならないため、実際の実施態様では、どこかの点で、どのZコードを置き換えるかに関して決定を下さなければならない。これは、キャッシュ管理に関して直面する決定とまさに同様であり、同じ方法で扱われる。好ましい実施態様では、LRU(最長時間末使用)アルゴリズムを適用して、各処理要素中に格納されたZコードを古い順に捨てる。すでに存在するZコードの生成を止めるため、Eモードの間および各処理サイクルの終了時に、確立されたZコード・セグメントへのエントリ・ポイントのセットを絶えず探索する。処理サイクルは、Zコード・セグメントの終了時、またはZモードの間の分岐予測誤りののち、またはEモードの終了ののち、終了する。
【0028】
好ましい実施態様では、Zコード・セグメントを、始まりで入れることもできるし(すなわち、命令シーケンスの再実行はそのシーケンスの最初の命令で開始する)、セグメント中のあらかじめ割り当てられた任意の数のエントリ・ポイントに入れることもできる。エントリ・ポイントは、Eモードにより、以下の方法で作成することができる。命令がエントリ・ポイントして宣言されると、Zコード中のディレクトリ・エントリが各Zキャッシュの中に作成される。このエントリは、エントリ・ポイントを識別し、Zコード中に、Zセグメントが入れられると、所与の処理要素が実行しなければならないという第一の命令を確立する。各エントリ・ポイントには、概念的にそのエントリ・ポイントで開始する命令のセットによってリネームされる第一の共通のレジスタの番号が関連している。並列化の他の二つの態様が、エントリ・ポイントで開始する並列モードでの処理に関連する要件を完了させる。各処理要素は、PセグメントのEモード処理の間に各アーキテクチャレジスタに関連していた、共通のレジスタ・ファイル中のレジスタの名前を識別するZコード・レジスタ表を維持する。さらに、命令のスケジューリングは、概念的にエントリ・ポイントに続く命令が、Pセグメント中で、そのエントリ・ポイントに概念的に先行するどの命令よりも先にスケジューリングされることのないように編成される。このようなスケジューリング制限により、各処理要素のZキャッシュ中のエントリ・ポイントに続いて順番に遭遇される、任意の処理要素のためのZコード中のすべての命令は、Pセグメント中のそのエントリ・ポイントに続く。Zコード処理においては、命令の中で遭遇するソース・レジスタ番号は、エントリ・ポイントに関連していた共通レジスタ番号に等しいか、それよりも大きい。それは、エントリ・ポイントでそのZコードを開始する処理要素によってセットされる。命令の中のソース・レジスタ番号がエントリ・ポイントに関連する共通のレジスタ番号によりも小さいならば、ソース・レジスタの値は、まずエントリ・ポイントに関連するレジスタ対応表を使用して関連のアーキテクチャレジスタを識別し、Zセグメントに入るときのシステム状態からアーキテクチャレジスタの値を抽出することによって導出される。
【0029】
好ましい実施態様においては、各処理要素は、その処理要素のZコードが格納される専有Zキャッシュを有しているが、すべての処理要素が、レジスタまたは同等物に格納されていないEコードおよびデータを求めて共通の記憶階層にアクセスする。記憶階層には、非同期的に起こるオペランドの取り出しおよび格納が、記憶内の値に設定および値の検査に関連するアーキテクチャ上の規則を違反しないことを保証するためのさらなる制御が備えられている。
【0030】
Eモード実行で実現されるいくつかの割り当て方式は、SPURRがいかに効率的にZモードで命令ストリームを実行することができるかの点で他のものよりも優れているが、SPURRは、使用される割り当て方式にかかわらず、正確に機能する。完璧に適した割り当て方式は、たとえば、連続5個の命令を第一の処理要素に割り当て、次の連続5個の命令を第二の処理要素に割り当てるなどし、連続5個の命令を最後の処理要素に割り当てたのち、Pセグメント中のすべての命令が割り当てられるまでこの割り当て順序を再び繰り返すことであるかもしれない。この割り当てを行うための、しかも、より広い用途を有するある特定の方法が、別の特許である「SELF-SCHEDULING PARALLEL COMPUTER SYSTEM AND METHOD」と題する米国特許第5,408,658号の主題である。
【0031】
SPURR編成の詳細な実施態様は、米国特許第5,347,639号「SELF PARALLELIZING COMPUTER SYSTEM AND METHOD」に用いられているものにきわめて類似している。主な違いは、処理要素すべてが共通のレジスタ・ファイルにアクセスし、そのような並列プロセッサ目標機械により、引用した従来の特許の詳細の多く、たとえば、レジスタをセットする処理要素と、そのレジスタを使用しなければならない処理要素との間でのメッセージの受け渡し、メッセージを移動させるメッセージ・ハンドラ、他の処理要素によって送られたメッセージを収納する各処理要素中のレジスタ・ファイル構造および複数のレジスタ・ファイルから機械状態をアセンブルする手段がもはや必要とされないことである。生成されたZコードは、分岐入れ込み可能にされることができ、個々の処理要素が命令を命令の元の概念的順序外で実行することができるため、利用しうる完全な並列性を利用することができる。これが、米国特許第5,408,658号「SELF-SCHEDULING PARALLEL COMPUTER SYSTEM AND METHOD」で扱われたスケジューリング動作を大幅に簡略化する。
【0032】
以下の点での自己並列化プロセッサの全体的性質は、目標並列アーキテクチャが共通のレジスタ・ファイルを含み、並列コードをMモードで作成する動作が、命令の並列形態に組み込まれるレジスタ・リネーミングを含むことを除き、米国特許第5,347,639号「SELF PARALLELIZING COMPUTER SYSTEM AND METHOD」の従来技術の自己並列化手法に含まれるものと本質的に同じである。
【0033】
SPURRプロセッサ内での以下の動作の簡潔な概要が、SPURRプロセッサと他の自己並列化プロセッサとの違いを理解するための十分な枠組みを与えるはずである。
【0034】
Eモードの間、すべての処理要素は、プログラム・セグメント中のすべての命令を見て、デコードする。処理要素は、おそらくは異なる期間ではあるが、本質的に同じ作業を非同期的かつ独立して行いながら実行する。デコード動作の結果は、命令によって変更されたレジスタをリネームし、レジスタの新たな名前をレジスタ対応のローカル・コピーの中で利用可能にすることである。各処理要素は、この命令を使用して、その入力の可用性に基づいて命令をデコードすることができる可能なもっとも早い時期を導出する。このタイミングは、レジスタ対応表に維持されているすべての入力レジスタの可用性時間を使用する。そして、処理要素は、以下に説明する占有割り当てアルゴリズムに基づいて、命令のスケジュール時間を計算する。この占有割り当てアルゴリズムは、命令の実行を割り当てられる処理要素の番号を決定する。そして、他の処理要素が次の命令から続くが、命令を割り当てられた処理要素がまず、リネームされたレジスタ、命令のシーケンス番号およびZモードでの並列コードの正しい実行に要するさらなる情報を含む並列形態の命令を作成する。そして、割り当てを受けた処理要素は、並列化形態の命令を、そのZキャッシュの中で、デコードのスケジュールされたサイクルによって指定される、Zキャッシュ中の並列コードの開始位置に対する位置に配する。そして、割り当てを受けた処理要素は、並列化形態を使用して命令を実行して、適切なリネームされたレジスタを更新する。Eモードの最後で、各処理装置は、プログラム・セグメントの一部をそれ自体のZコード・キャッシュの中に割り当てられている。命令のセットは、それら個々のスケジューリング時間によって順序づけされる。これらの命令は、Zモードの間、Zコード・キャッシュから直接的に関連の処理要素に達する。レジスタはEモードの間にすでにリネームされているため、命令は、リネームなしで、それらの命令が必要とするレジスタにアクセスすることができる。並列コードの正しい実行および分岐予測誤りからの回復に要するさらなる情報が、プログラムのZモード実行の間に利用可能な情報に組み込まれている。Zモードの開始は、すべての処理要素のZコード・キャッシュ・ディレクトリの中に、処理に必要な次の命令のアドレスであるエントリを見いだすことに基づく。すべてのZコード・キャッシュ・ディレクトリが同一であるため、キャッシュの内容は処理要素ごとに異なるとしても、すべての処理要素が、SPURRプロセッサの次の処理段階がEモードにあるのかZモードにあるのかに関して共通の決定を下す。並列コードの実行に関与する個々の処理要素の部分は、Eモードでの命令の実行に関与する部品と同じである。処理要素にとってのEモードとZモードとの違いは、すべてEモードで起こるものである、処理要素への命令の割り当て、レジスタ・リネーミングおよび並列形態の命令のキャッシュ記憶を含む。命令を実行する処理要素の部分は両モードで同一である。
【0035】
SPURRプロセッサの編成のブロック図を図1に示す。各処理要素100は、命令デコーダ/スケジューラ500を使用して命令をデコードし、110を介して共通のレジスタ・ファイル160にアクセスして記憶オペランドのアドレスを生成し、レジスタ・オペランドにアクセスすることができる。SPURRの共通のレジスタ・ファイルは、すべての処理要素によって直接アドレス指定されることができるM個のレジスタからなる。これらのレジスタの最初のmは、Pセグメント中の命令によって使用されるレジスタである。これらはいわゆるアーキテクチャレジスタである。残りのレジスタは、アーキテクチャレジスタのリネームされたバージョンである。処理要素は、二つのモード、すなわちEモードおよびZモードで動作する。Zモードの間、処理される命令は、すでにリネームを受けており、命令によってアクセスされるレジスタは、その命令によって指定されるレジスタである。Eモードでは、命令がレジスタを変更するたび、そのレジスタは、まだ使用されていない、次に高い順番のレジスタにリネームされる。レジスタの新たな名前はレジスタ対応表170に配され、アーキテクチャレジスタ名に対する何らかの参照は、Eモードの処理の間に、その名前をそのリネームされた値に翻訳される。命令は、それらがリネームされたレジスタをアドレス指定したかのように処理され、命令リネームのされたバージョンこそが、Zセグメントを構成する並列形態のプログラムに組み込まれる。命令によってアクセスされるオペランドは、処理要素の中の実行装置130に送られ、この実行要素が、命令によって指定される動作を実行し、その実行の結果をリネームされたレジスタの中にしまい込む。SPURRにおける処理要素は、各処理要素があらかじめ指定された識別番号(n個の処理要素を有するシステムでは1、2)を有することを除き、同一である。処理要素のこの名前は処理要素には知れており、たとえばEモードの間、それは、処理要素をして、その処理要素がデコードしている命令がその処理要素に割り当てられるかどうかを判定させる。この点を説明するため、命令が所与のサイクルでスケジュールされているとき、その命令を割り当てられる処理要素は、そのサイクルで処理されるよう現在スケジュールされている、スケジュールされたばかりの命令を含む命令の数に等しい番号を有する処理要素である。各処理要素はバス135を介して記憶階層140に接続され、この記憶階層が、取り出し動作においてデータ・オペランドを供給し、格納動作において格納オペランドを受け取り、Eモードの間には命令取り出しに使用される。オペランドの実際の取り出しおよび格納は、順番外の記憶アクセス動作に関連するすべてのハザードが検出されることを保証するOSC/PSC制御装置300のセットによって実施される。
【0036】
各処理要素は、Zモードの動作のための注釈つき命令を格納するそれ自体の専有Zキャッシュ200を有している。Zモードの間の命令取り出しは、各処理要素の中の専用バス150を使用する。
【0037】
セクション2 専有Zキャッシュ
このセクションの情報は、米国特許第5,412,784号「APPARATUS FOR PARALLELIZING SERIAL INSTRUCTION SEQUENCES AND CREATING ENTRY POINTS INTO PARALLELIZED INSTRUCTION SEQUENCES AT PLACES OTHER THAN BEGINNING OF PARTICULAR PARALLELIZED INSTRUCTION SEQUENCE」から本質的な変形によって導出する。Mモード中の命令取り出しは、各処理要素に関連するZキャッシュ200(図1)中のZコードにアクセスすることによって実施される。Zキャッシュの編成を図2に示す。Zキャッシュ・ディレクトリ210を使用して、Zキャッシュ・アレイ200に格納されたZセグメントを追跡する。Zキャッシュ・アレイ200の内容は、あらかじめ指定されたZセグメントの数を表す。各Zセグメントは、最大数のセル225を有し、各セルが1個のZ命令を収容している。各Zキャッシュ200は、ディレクトリ210およびそのディレクトリからアドレス指定されるセルのアレイ220を含む。Zキャッシュ・ディレクトリ・エントリ211のフォーマットを図3に示す。
【0038】
このフォーマットは以下を含む。
【0039】
エントリ・アドレス212。これは、このZセグメントが作成された元のPセグメントの開始アドレスであるか、または、このZセグメント中の中間エントリ・ポイントのアドレスである。
【0040】
セルのZキャッシュ・アドレス213。これは、Zキャッシュ・ディレクトリの探索引き数であったアドレスを有する命令よりも概念的に後ではない最初のZ命令をその処理要素のZセグメント中に含む。
【0041】
Pセグメント開始アドレス214。このZセグメントを生成するのに使用されたものである。
【0042】
このエントリ・ポイントののちリネームされたレジスタとして使用される第一の共通レジスタの番号217。
【0043】
エントリ・ポイントを表す命令の条件性レベル218。
【0044】
有効ビット219。
【0045】
有効ビット219を使用するディレクトリ無効化機能は二つの状況で使用される。信号ライン331は、プログラム格納比較(PSC)ハザードが検出されたとき、すべての処理要素中のすべてのZコードを無効化するのに使用される。信号ライン332は、オペランド格納比較(OSC)ハザードが検出されたとき、現在のZコードを無効化するのに使用される。これらのハザードはいずれもセクション3で詳細に説明する。
【0046】
Mモードの間の命令取り出し(すなわち、I取り出し)はZキャッシュから導出される。どのディレクトリ・エントリ・アドレス212とも突き合わせがないと、判定ブロック216によって処理要素がEモードにセットされ、EモードでのI取り出しが記憶階層140(図1)から導出される。
【0047】
Zキャッシュ・アレイ220はZ命令を含む。Z命令は、サイズおよびフォーマットが固定されており、それを図4に示す。各Z命令は以下の情報を含む。
【0048】
命令の実行に必要な通常の情報である命令イメージ222(演算コード、オペランドなど)。各レジスタ・オペランドは、共通のレジスタ・ファイル中のM個の共通レジスタの1個を指定し、レジスタ再命名なしで直接使用される。
【0049】
条件性レベル202。これは、命令の実行中に分岐が解かれるとき、キャッシュ中のオペランド格納比較(OSC)制御により、OSCハザードの検出を管理し、格納をいつ記憶階層に放出することができるかを決定するのに使用される。
【0050】
命令識別子203。これは、Zセグメント中の命令を識別する命令シーケンス番号である。命令識別子は、OSC制御により、格納命令と取り出し命令とが条件性レベルを共用するとき、OSCハザードを識別するのに使用される。
【0051】
分岐命令に遭遇するごとに、もっとも高くスケジュールされたサイクル時間を有する命令を分岐命令の条件性レベルでフラグ付けすることが必要である。これは、Zキャッシュ中の命令の処理要素条件性レベル(PELC)フィールド227を使用することによって実施される。
【0052】
Zセグメントの終わりビット228は、処理要素ごとの各Zセグメント中の最後の命令に関連している。
【0053】
I取り出し動作の一部として、Zキャッシュ・セル中のすべての情報が、エントリ・ポイントに対して相対化されたのち、デコーダおよび処理要素の他の関連部分に移される。バス215で提示されたアドレスとの間で最初の突き合わせがあった時点で、突き合わさったエントリのLC218がLC相対化機構290に配置される。
【0054】
各命令がZキャッシュ・アレイ220から正常に導出されると、Z命令の条件性レベル202がLC相対化機構290中の値によって減らされ、それにより、命令の条件性レベル、そのオペランドなどがすべての将来の命令処理に備えて相対化される。さらに、処理要素条件性レベル227もまた、LC相対化機構290中の値によって減らされ、それにより、命令に関連する処理要素条件性レベルが相対化されなければならない。
【0055】
処理要素ごとの連続的なZ命令が、処理要素に関連するZキャッシュ・アレイ220の連続するセル225を占有し、そのセルにアクセスするのにアレイ・アドレス・インクリメンタ226が使用される。
【0056】
EモードでのZセグメントの作成は、原則的には自由であるが、実施において制限されるZキャッシュのサイズおよび構造による制限を受けやすい。Eモードが終了し、最後の完全な条件性レベルにトリミングされると、Zキャッシュの能力を超えるZセグメントは作成できなくなる。
【0057】
命令の記憶階層アドレスとZキャッシュ中のそれらの位置との間には関係がないため、Z命令のいくつかはまた、それらに関連する命令フォーマット拡張部240(図5)を有しなければならない。この拡張部は、この情報が求められるとき、記憶階層アドレスを含む。分岐命令の場合、この拡張部が要求される。各条件付き分岐命令は、Zコードを生成するのに使用された推定アドレス241と、プログラム・カウンタ(PC)の値であるフォールスルー・アドレス242とを有し、分岐の後に続く次の逐次命令を指す。
【0058】
分岐目標に基づいて、次のように動作が起こる。
【0059】
分岐目標が推定アドレス241と同じならば、何の動作も起こらない。
【0060】
分岐が取られないため、分岐目標が推定アドレス241ではないならば、フォールスルー・アドレス242に関して分岐予測誤り(BWG)動作が起こる。
【0061】
推定アドレス241以外の目標に対して分岐が取られるならば、そのアドレスが分岐命令のアドレス生成の点で処理要素によって生成され、その目標に対してBWG動作を取ることができる。
【0062】
無条件分岐の場合、推定アドレス241だけが使用され、プログラム・カウンタ(PC)の値がフォールスルー・アドレス242を占有することができる。BAL(R)(分岐および連結(レジスタ))のような命令についてPC依存値が必要であるとき、PCの値を使用してレジスタの値をセットすることができる。
【0063】
Zキャッシュ・アレイ中のZ命令セルの内容は処理要素ごとに異なるが、すべてのZキャッシュ・ディレクトリの内容は同じである。多数の同一のZキャッシュ・ディレクトリの維持は、処理要素間により大きな自律性を創造することと、新たなZセグメントが開始されるときに処理要素にメッセージを送ることとのつり合いを表す。
【0064】
Eモードの開始時に、処理要素によって書込みバス230を介して提供された情報を使用して、すべてのZキャッシュの中に共通のディレクトリ・エントリが作成される。ディレクトリ210中のすべてのエントリが有効であるならば、最長時間未使用(LRU)アルゴリズムを使用して、置き換えるべきZセグメントを選択する(たとえば、エイジ・タグ218を使用してディレクトリ・エントリの標準的なエイジ・タグ日付けを用いる)。
【0065】
各処理要素中のZセグメントのセル225は、バス228を使用して更新される。このバスは、処理要素に割り当てられた命令が、Z命令として、元のPセグメント中のそれらの位置に対する概念的順序から外れていてもよい、それらがスケジュールされた順序で格納されるよう、命令に関連するスケジューリングのサイクルと協働する。
【0066】
同じセグメント中の多数のエントリ・ポイントを考慮する、Zキャッシュ・ディレクトリ中のエントリの範囲を指定するためには、以下が必要である。
【0067】
Zコードとして生成されたZコードを、ただし異なる開始アドレスから使用することができるよう、さらなるエントリをZキャッシュ・ディレクトリに加える必要がある。
【0068】
そのようなエントリは、後続の命令の条件性レベルLCを相対化することができるよう、Pセグメントから全体として導出された関連の条件性レベルLCを有しなければならない。
【0069】
これを達成する方法は、エントリ・ポイントの生成をEモード処理にすることである。エントリ・ポイントに適した命令のアドレスの外部手段を介する識別により、または次の命令に対しエントリ・ポイントを周期的に宣言することにより、Eモードは、エントリ・ポイントによって要求される必要なすべての情報を利用することができる。命令のスケジューリングは潜在的に概念的順序から外れているため、すべての処理要素Zキャッシュ中のエントリ・ポイントに概念的に先行するすべての命令の後のエントリ・ポイント以降、すべての命令をスケジュールすることが必要である。
【0070】
セクション3 OSCおよびPSCの監視
オペランド格納比較(OSC)制御およびプログラム格納比較(PSC)制御300の構造要素を図6に示す、各取り出しおよび格納が記憶階層インタフェース145に提示されると、制御300がOSCおよびPSCを監視し、アクセスと対話する。したがって、制御300の配置は、記憶階層インタフェース145の一部であることができ、それに対する付属物とみなすことができる。以下、これらの制御300それぞれを別々に説明する。
【0071】
オペランド格納比較(OSC)
プロセッサのアーキテクチャは普通、記憶場所からの取り出しが、概念的順序でその取り出しよりも先行する最新の格納によってその場所に格納された値を見ることを要する。これがOSCと呼ばれ、この違反がOSCハザードとして知られる。SPURRでは、取り出しと格納とを異なる処理要素上で非同期的に実行することができるため、可能なOSCハザードが起こったかどうかを決定するために処理要素を監視しなければならない。
【0072】
このセクション3の残りに関して「取り出し」とは、オペランドの取り出しを指し、命令の取り出しは、その意味で使用するたび、そのようなものとして別段指定する。
【0073】
対応する取り出し動作と格納動作とが同じ処理要素上で実行されるならば、OSCハザードは処理要素内的であるといわれる。処理要素の中で命令は概念的順序では維持されないため、処理要素内的OSCの監視が必要とされる。命令識別子203が、取り出しおよび格納動作と関連すると、OSC制御をして、OSCハザードに遭遇したかどうかを決定させる。
【0074】
対応する取り出し動作と格納動作とが異なる処理要素上で実行されるならば、OSCハザードは処理要素間的であるといわれる。ひとたびスケジューラが処理要素内で順番外の命令スケジューリングを考慮するならば、OSCハザードの監視に関して処理要素内的と処理要素間的とを区別する意味はない。OSCを監視する問題は三つの要因を含む。
【0075】
Zセグメントの最後で格納をコミットすることに伴う遅延を避ける必要があるため、格納は適時ベースでコミットされなければならない。OSCに関連するハザードが表の中の取り出しおよび格納にとって無関係になると、取り出し表および格納表の刈り込みを達成することができる。これは、OSCハザードを生じさせることができたすべての関連の活動、すべての取り出しおよび格納がすでに処理されたことを保証することによって実施される。処理要素条件性レベルの使用は、その条件性レベルよりも低い、所与の処理要素にスケジュールされたすべての活動がすでに発されたことを保証する。処理要素にスケジュールされた命令順序の中では、順序外の命令スケジューリングの場合と同様、処理要素の中で命令の条件性レベルがもはや単調ではないため、これは、個々の取り出しおよび格納に関連する従来の条件性レベルに代わる。
【0076】
Zセグメントが実行し、取り出しおよび格納が記憶階層に送られると、各処理要素ごとに処理要素条件性レベルの更新が起こる。処理要素間で取られる処理要素条件性レベルの最小値を、Zセグメント中の分岐の解から導出した現在の条件性レベルに比較することができる。これら二つの量の最小値が、刈り込むことができる取り出し/格納表の中のすべての取り出しおよび格納の条件性レベルを決定する。取り出しの刈り込みは取り出しを除き、格納の刈り込みは格納を記憶階層にコミットする。
【0077】
条件性レベルは分岐グループ内のすべての命令に共通である。このレベルは、分岐グループを終了させる分岐命令によって共用される。分岐予測誤りが検出されると、概念的に最初の分岐予測誤りの条件性レベルが、記憶階層に対してコミットされなければならない格納活動を区切る。すなわち、Zセグメント中の最初の分岐予測誤りの条件性レベル以下の条件性レベルをもつすべての格納が記憶階層に対してコミットされなければならず、他の格納がコミットされてはならない。格納は、それらの条件性レベルをZセグメントのエントリ・ポイントに正しく相対化させて運なければならない。
【0078】
したがって、そのような両ハザードの監視は、命令の以下の三つの属性を用いて実施される。
【0079】
1.条件性レベル(202) 図7および8
Zセグメントのエントリ・ポイントに基づいて適切に相対化された、分岐命令を含む命令の条件性レベルとは、Pセグメント中の命令に先行し、エントリ・ポイントに後続する分岐命令の数である。グループの末端分岐を含む分岐グループ中のすべての命令は同じ条件性レベルを共用する。相対化されていない、Zセグメント中の命令の条件性レベルの初期値はゼロである。エントリ・ポイントと同じ分岐グループ中のすべての命令は、相対化されたゼロの条件性レベルを有している。
【0080】
2.処理要素条件性レベル(LC)302 図7および8
LCは、処理される命令のフィールド227を監視することにより、各処理要素中に維持されている処理要素条件性レベル(PELC)から導出される。このフィールドは、LC相対化機構中に維持されているエントリ・ポイントの条件性レベルに基づいて相対化される。相対化されていない初期値はゼロであり、相対化されると、その値はエントリ・ポイントの条件性レベルによってオフセットされる。PELCの初期設定は、次に遭遇する分岐命令の条件性レベルであるため、概念的にエントリ・ポイントに続くすべての命令のPELCのすべての値は、エントリ・ポイントの条件性レベルに少なくとも等しい値を有している。命令が、ゼロではない相対化PELCをフィールド227中に有するならば、後続のすべての取り出しおよび格納動作は現在値(302)を与えられて、それらの記憶アクセス動作を注釈する。
【0081】
3.命令識別子(ID)203 図7
このIDは、Pセグメント中の命令のシーケンス番号である。
【0082】
Eモードでは、LC(202)およびID(203)が自然な方法で知れるよう、すべての処理要素がシーケンス中のすべての命令を見る。命令が順に処理されるとき、分岐命令に遭遇したときのPELC(227)の設定は、分岐の条件性レベルに等しい処理要素ごとの最後にスケジュールされた命令の設定(227)を含む。Zコードが実行されると、各命令のLC(202)およびID(203)がZ命令から利用可能になり、処理要素ごとの現在のPELC(227)が、それがセットされたZモード中で処理された最後の命令から利用可能になる。これらを使用して、すべての取り出し(図7)および格納(図8)を必要な情報で注釈することができる。(302)としてのPELCの使用は単調ではあるが、それは、中間値をスキップすることができ、分岐予測誤りが生じたとき、どの格納動作がコミットされるべきかを決定するのに適切な粒度を与えない。
【0083】
OSC制御は、二つの表、すなわち、コンパレータ314を有する取り出し表310(図6)と、コンパレータ326を有する格納表320とを維持する。
【0084】
取り出し表エントリ311が図7に示され、アドレス、LC、PELCおよびIDからなる形態を有している。アドレス312は、取り出しおよびその拡張のバイト単位の全アドレスである。取り出しを生成した取り出し命令のLC202およびID203ならびに処理要素によって処理される現在最後のPELCであるPELCもまた、取り出し表エントリ311に含まれる。多数の倍長語(DW)に及ぶ取り出しは、取り出し表中に多数のエントリを作成する。
【0085】
格納表エントリ321が図8に示され、アドレス、LC、PELC、IDおよびデータからなる形態を有している。アドレス322は、格納およびその拡張のバイト単位の全アドレスである。LC202、ID203およびPELCは、処理要素によって維持される格納命令および情報から導出される。データ324は、格納命令の一部として、記憶階層に格納される全DWである。データ324は、格納の結果を、記憶階層から取り出されたDW中の他のバイトとマージすることによって導出される。格納がDW境界を越えるならば、影響を受けたDWごとに1個ずつ、2個のエントリが格納表中に作られる。多数のDWを生成する格納命令も同様に扱われる。マージ動作は、記憶階層に対して格納がコミットされることなく実施される。
【0086】
取り出しは次のように実行される。
【0087】
1.アドレス・フィールドに突き合わすことにより、取り出し命令と同じアドレスを有し、取り出し命令のIDよりも小さいIDを有するエントリを格納表から選択する。
【0088】
2.一致が起こるならば、取り出しは、データ324を、取り出しのIDよりも小さい最大の現在IDを有する一致した格納表エントリから、要求側の処理要素に戻す。
【0089】
3.より低いIDを有するどの格納エントリにも一致がないならば、取り出しの値を記憶階層140から得る。
【0090】
4.この取り出し命令に関して取り出し表にエントリを作成する。変化するならば、取り出し動作のPELC(302)フィールドを使用して、処理要素取り出し/格納LC表344を更新する。
【0091】
格納は次のように実行される。
【0092】
1.アドレス・フィールドに突き合わすことにより、格納命令と同じアドレスを有し、格納命令のIDよりも大きいIDを有するエントリを取り出し表から選択する。
【0093】
そのようなエントリが存在するならば、OSCハザードが発生している。
【0094】
この格納命令に関して格納表にエントリを作成する。変化するならば、処理要素取り出し/格納LC表344を更新する。
【0095】
図9に詳細に示す、三つの量を維持する刈り込みモニタ342を使用して、上記二つの表のエントリを刈り込む。
【0096】
1.全証明された条件性レベル(OCLC)341
各処理要素中の分岐解機構がバス390を介してZコードでの各分岐命令の解を刈り込みモニタに通信する。所与の時点で、OCLCは、より低いレベルのすべての分岐が正しく解かれているような最大のLCである。OCLCよりも大きいものであるLCでの分岐がBWGとして解かれると、分岐のLCまたはより低いLCにおける格納が刈り込まれ、OSC制御がクリアされ、このレベルのLCにおける分岐予測誤りがすべての処理要素に通信される。この信号を受けたときの処理要素の動作は、Zコード処理の下でセクション5に説明する。
【0097】
2.全オペランド条件性レベル(OOLC)343
記憶取り出しまたは格納命令が実行されるたび、そのPELCを使用して、その処理要素の取り出し/格納LC表344のエントリを更新し、すべての処理要素にわたるこれらのエントリの最小のものがOOLC342である。処理要素が、Zセグメントの終わりビット228(図4)によって示される、そのZコードの最後の命令を実行するたび、処理要素は、Zコードの終わり信号を疑似取り出しとして送出する。この信号の唯一の目的は、その処理要素のPELCを取り出し/格納LC表から除いて、OOLCを決定する最小化計算に参与させないことである。
【0098】
3.全条件性レベル(OLC)340
OLCはOOLCおよびOCLCの最小値である。
【0099】
含意は、各処理要素がOLCよりも低いレベルですべての命令を実行したということである。さらに、OLCよりも低いレベルでのすべての分岐も解かれている。したがって、OLC以下のLCをもつ取り出し/格納エントリを刈り込むことができる。OLCが変化するたび、刈り込みモニタがバス345を介して以下の動作を行う。
【0100】
1.OLC以下のLCをもつすべてのエントリを取り出し表から除く。
【0101】
2.OLC以下のLCをもつすべてのエントリを格納表から選択する。
【0102】
3.選択したエントリのどれもPSC(のちに説明する)を発生しないならば、上記の選択したエントリをそれらのIDの小さい順に走査し、各エントリを走査するごとに、格納をコミットし、格納表からエントリを削除する。
【0103】
OSCハザードが発生すると、そのハザードを作り出した命令の命令識別子がデコーダ500に提示される。ハザードは、先行するLCで分岐予測誤りをシミュレートすることによってクリアされる。条件性レベルゼロで発生したハザードは、プログラム・セグメント(Pセグメント)の開始に対応する機械状態を復元する。何らかの非ゼロLCで発生したハザードは、先行するLCでの分岐命令に対応する機械状態を復元する。いずれの場合でも、バス332を使用するすべてのZキャッシュにおいて現在のZコードが無効化され、Eモードに入る。
【0104】
条件性レベルの中でハザードを避けるため、同じ記憶場所にアクセスすることを命令フォーマットが示唆する取り出しおよび格納(たとえば、それらのオペランドが同じベースおよびインデックス・レジスタを使用し、同じ偏位を有する)は、同じ処理要素にスケジュールされ、それらの概念的順序でスケジュールされるべきである。
【0105】
プログラム格納比較(PSC)
特定のアーキテクチャは、「命令ストリームへの格納」を可能にすることにより、自己変更性プログラムをサポートする。このようなアーキテクチャの場合に、SPURRは、このZセグメントを生成するのに使用されるコードのIストリームへの格納が起こったかもしれない可能性を監視することにより、生成されたZコードが後続の再実行に有効であるか、または、アクティブなZセグメントそのものがそれ自体のIストリームに格納することができるのを決定することを求められる。このハザードに与えられた名前がPSCである。
【0106】
記憶階層は、キャッシュと、ラインがEモードにおける命令取り出しのソースとして使用されたことを指定する命令参照ビットを含む関連のディレクトリとを有している。このようなラインがキャッシュを離れるならば、PSCが発生し、バス331(図2にも示す)を使用するすべてのZコードが無効化される。
【0107】
格納表320の刈り込みに基づいて記憶階層に対する格納をコミットする格納コミッタ330が、命令参照ビットをオンにセットした状態のラインに格納が実施されると判断するならば、それがPSCハザードを発生させ、PSCハザードが発生したLCですべての格納のコミットを取り消す。先のLCでの機械状態が復元され、PSCハザードは、OSCハザードと同じ方法でクリアされる。
【0108】
セクション4 分岐および共通レジスタ・ファイルの扱い
パイプライン式アーキテクチャでは、分岐決定が下される前にいくつかの命令を部分的に実行されることもある。しばしば、これは、何らかの規準を使用して分岐決定を予測することによって実施される。分岐が誤って予測されたときには、プロセッサの崩壊状態を、分岐直後に機械があった状態に復元しなければならない。プロセッサのアーキテクチャは、それらの機械状態を構成するものにおいて異なる。一般に、状態は、アドレス指定可能なレジスタの内容を含む。
【0109】
SPURRは二つの方法で状態復元処理を複雑化する。第一に、EモードでのBWGは、誤って予測された分岐命令および分岐の後の正しい命令順序のための命令IDの再調節以来に作成されたZコードを捨てる結果となる。第二にZモードでのレジスタ状態は、共通レジスタ・ファイル中に分散しており、アーキテクチャレジスタに割り当てられた空間の中で統合しなければならない。
【0110】
さらには、SPURRは、BWGなしでさえ、EモードとZモードとの間の移行を含む。そのような移行の際に取られる動作は、BWGの間に取られる動作と同一である。Eモードが完了したのち、Zモードが完了したのち、またはBWG(分岐予測誤り)ののち、プロセッサのレジスタ状態を集める方法は、SPURRプロセッサの各処理サイクルによって予測される、レジスタに相対する初期状態に基づく。これらの初期状態は、共通のレジスタ・ファイルの最初のm個のレジスタを含むアーキテクチャレジスタの正しさと、残るM−m個のレジスタの無効状態とを含む。これを達成するためには、共通のレジスタ・ファイルからのアーキテクチャレジスタの値の回復が必要である。レジスタ対応表(170)が、各アーキテクチャレジスタに関連する共通のレジスタを識別する。Eモードの間、レジスタ対応表の状態は、各分岐命令ののち、また、Eモード処理の最後に決定される。この情報はキャッシュに記憶され、Zセグメントの開始アドレスおよび分岐命令の条件性レベルによって索引される。
【0111】
Zセグメントが完了すると、完了したZセグメントに関連するレジスタ対応表を検索し、使用して、共通のレジスタ・ファイルを適切な値で初期化する。Zセグメントへの分岐エントリののち、レジスタ状態の回復のために特別な備えを施す必要はない。適切な相対化されていない条件性レベルを使用して、キャッシュに記憶された、BWGに関連するレジスタ対応表にアクセスするならば、レジスタが有効であるならば、識別される共通のレジスタは正しい。レジスタが有効であるならば、レジスタはZコード・セグメント中にセットされたものであり、値を回復し、適切なアーキテクチャレジスタに入れなければならない。それがセットされていたという事実が、設定命令がZセグメントへのエントリ・ポイントに続いたということを示す。キャッシュに記憶されたレジスタ対応表で識別されるレジスタが無効であるならば、それは、そのレジスタがエントリ・ポイントに続く命令によってセットされたのではないことを意味し、エントリ時のアーキテクチャレジスタ値が、次の処理セグメントに渡すべき正しい値である。さらには、レジスタ対応表キャッシュ(180)に記憶され、分岐と関連するレジスタ対応表のセットとともに、レジスタ対応表のもう一つのセットがエントリ・ポイントに関連している。これらは、エントリ・ポイントのレジスタ対応表RCTEと呼ばれる。これらの表は、Zコード・エントリ・ポイントに関連し、エントリ・ポイントが宣言されるとき、Eモードによって作成される。これらの二つのキャッシュは、番号がエントリ・ポイントに続く最初のリネームされたレジスタよりも小さいレジスタにアクセスするために、エントリ・ポイント・レジスタ対応表を使用して処理要素と共通のレジスタ・ファイルとをインタフェースさせるならば、簡単に合わせることができる。すなわち、各処理要素が、RCTEを使用する再翻訳を要するレジスタをフラグ付けするならば、その情報を維持し、すべての処理要素に局所的に利用できるようにするのではなく、共通のレジスタ・ファイルに関連させることができる。
【0112】
既存のZセグメントへの分岐エントリが実行されるとき、エントリ・ポイントのレジスタ対応表がそのキャッシュから検索され、各処理要素が、番号が、エントリ・ポイント情報(図3)の一部である、リネームされたレジスタとして使用される第一の共通のレジスタの番号(217)よりも小さいレジスタの共通のレジスタ・ファイルにアクセスする際に、エントリ・ポイントに関連する対応表を使用して、値がこのアクセスに対する応答として戻されべきであるアーキテクチャレジスタを決定することができる。これが作用する理由は、Zコードをもつすべての命令が、逐次コード中のエントリ・ポイントに概念的に続く命令に対応するすべての処理要素に関し、(1)エントリ・ポイントの後でセットされるか、または(2)エントリ・ポイントよりも先のレジスタセットの最後のコピーであるレジスタを参照するからである。前者の場合、ソース・レジスタ番号は、少なくとも、エントリ・ポイントの後でセットされた第一のレジスタの番号と同じ大きさであり、後者の場合、使用されるレジスタは、エントリ・ポイントに関連するレジスタ対応表に関連するレジスタの1個である。処理要素のZコードの中で、Zコード中のエントリ・ポイントに続く命令が概念的にエントリ・ポイントに先行するならば、それは、Zモード処理の中の何らかの機構によって無視することができる。現在のインプリメンテーションでは、エントリ・ポイントに概念的に先行するすべての命令は、エントリ・ポイントによりも概念的に後であるすべての命令に先行する。これをセクション5で説明する。このインプリメンテーションでは、各Zコード中のエントリ・ポイントが、エントリ・ポイントに概念的に先行する命令を、そのエントリ・ポイントに概念的に後続する命令から分ける。Zコードが命令シーケンス番号を含み、エントリ・ポイントのシーケンス番号がZキャッシュ・ディレクトリ中で利用可能になるならば、概念的により先の命令を識別し、無視することもできる。
【0113】
セクション5 Eモードおよび命令処理における命令の処理要素への割り当て
OSCの発生の後に要求されるかもしれない正規の命令スケジューリングに対するアーキテクチャオーバライドならびにパイプライン式プロセッサでEモードが分岐予測誤りを識別し、それから回復する方法に関する詳細は、米国特許第5,347,639号「SELF PARALLELIZING COMPUTER SYSTEM AND METHOD」のセクション7、セクション8およびセクション9で完全に記載されている。これらの同じ手法そのものを、SPURRと、この引用例の特許に記載されているMSISプロセッサとの間に存在する違いを考慮しながら、SPURR環境に応用することができる。MSISプロセッサと、SPURRプロセッサの実施態様との主な違いはすでに論じたため、SPURRにおけるスケジューリング動作および命令処理の詳細を次に説明する。
【0114】
Eモードでの動作は、Eモードで達成しなければならない機能を含む以下の動作の点で要約することができる。
【0115】
レジスタ・リネーミング
命令スケジューリング
状態回復のための分岐処理−レジスタ対応表キャッシュ
PELCを確立するための分岐処理
エントリ・ポイント確立の扱い
最後のPセグメント命令の扱い/Eモードの終了
【0116】
Eモードでのこれらの動作の順序を図10および11に示す。この順序は、上記に示した順序とはわずかに異なる。その理由は、Eモードでの機能のいくつか、たとえばエントリ・ポイント確立および命令のスケジューリングがすべて、先の命令の処理の最後で各処理要素中に維持されている局所的情報に依存するからである。Eモードでの他いくつかの機能は、命令の処理の間に生成される情報に依存する。Eモードにおける動作の順序を理解する一つの要点は、すべての処理要素が、Pセグメントを構成する命令の順列に対して同一のセットの動作を実行することを理解することである。Pセグメントからの情報は、各処理要素がすべての命令に対して同一の動作を実行している間、各処理要素により、それらの元の概念的順序で見られる。各処理要素によるすべての動作の結果は、命令が提示される順序だけに依存するので同じであり、この順序は、動作のタイミングが異なるかもしれない場合でも維持される。処理要素の動作の間の唯一の違いがそれであるため、ある命令が所与の処理要素にスケジュールされると決定されると、その処理要素は、その命令のZコード・バージョンを作成し、影響を受けたレジスタを更新することによってその命令を実行し、それをZコード・キャッシュの中に配置しなければならない。各処理装置中の動作は非同期的に実施されてもよいが、処理装置どうしの間で同期を欠いても影響はない。代替の実施態様では、1個の処理装置がEモードでのすべての動作を実行することも可能である。これは、処理要素の間にZコードを分散するための手段を要するであろう。Eモード処理をすべての処理要素によって実行できるようにすることにより、この分散を避けることもできる。最後に、特定のEモード動作は、Pセグメントあたり1回だけ実施すればよい。これは、分岐命令が処理される点でのレジスタ対応表のキャッシュ記憶およびエントリ・ポイントのレジスタ対応表のキャッシュ記憶を含む。このような動作は、1個の処理要素、たとえば処理要素1だけで実施することが好ましい。
【0117】
図10および11に示すように、命令のEモード処理での一連の動作は以下を含む。
【0118】
1.エントリ・ポイント確立の扱い(図10、ステップ410)
2.命令スケジューリング(図10、ステップ420)
3.レジスタ・リネーミング(図10、ステップ430)
4.状態回復の分岐処理−レジスタ対応表キャッシュ(図11、ステップ440)
5.PELCを確立するための分岐処理(図11、ステップ450)
6.最後のPセグメント命令の扱い(図11、ステップ460)/Cモードの終了
【0119】
これらの機能の一つ以上に使用される処理要素の態様を説明するのには、以下の術語が使用される。
【0120】
現在のレジスタ・リネームCRR
この量は、各処理要素中のプログラム・セグメントのEモード処理の間に維持され、インクリメントされる。レジスタを変更する各命令は、CRRの現在値にリネームされたレジスタを有し、CRRの値は次のリネーム活動の前にただちにインクリメントされる。
【0121】
条件性レベルLC
各処理要素は次の命令の条件性レベルを維持する。条件性レベルは、プログラム・セグメント中に遭遇する分岐命令の数であり、各分岐命令のデコードののちにインクリメントされる。分岐命令は、分岐に先行する命令とで(それらの命令そのものが分岐命令ではないならば)条件性レベルを共用する。
【0122】
サイクル占有ベクトルCOV
各処理要素は、0からnまで処理要素の数を含む要素を有する任意の長さのベクトルを維持する。COVは、スケジューラにより、所与の命令に割り当てられる処理要素およびその処理要素が命令をZモードでデコードするサイクルを決定するのに使用される。
【0123】
レジスタ可用性時間RAT
各処理要素は、アーキテクチャレジスタの可用性時間の表をこの表の中に維持する。レジスタを変更する各命令は可用性時間を再計算させる。レジスタ可用性時間とは、命令を変更するレジスタのデコード時間と、記憶アクセスに関連する待ち時間または並列動作モードでの実行時間とを足したものである。
【0124】
命令IDまたはシーケンス番号
各処理要素は、その処理要素がプログラム・セグメントからすでに処理した命令の実行カウントを維持する。カウントは1から始まり、各命令がEモードで処理されるごとに局所的にインクリメントされる。
【0125】
エントリ・ポイント
Zコード中のエントリ・ポイントは、各処理要素のZキャッシュ・ディレクトリ中に維持される固定命令アドレスに並行に関連する、処理要素あたり1個のZキャッシュ・アドレスのセットである。そのような命令アドレスが見いだされると、処理要素のモードはZモードにセットされ、各処理要素は、それが処理すべき命令を求めてそれ自身のZキャッシュにアクセスし始める。Zセグメントの開始はトリビアルなエントリ・ポイントである。トリビアルでないエントリ・ポイントはまた、ディレクトリ・エントリ中に、エントリ・ポイントとして選択された命令の条件性レベルと、エントリ・ポイントに概念的に後続する命令によってセットされる第一の共通のレジスタセットの番号とを含む。
【0126】
セクション5.1 エントリ・ポイント確立の扱い(ステップ410)
既存のZセグメントの中にエントリ・ポイントを確立するためには、Eモードは、エントリ・ポイントとなる命令のアドレスを識別することができなければならない。これを達成することができるいくつかの手段がある。一つの手段は、異なるアドレスから発生するプログラム・セグメントによって共用されるアドレスに関する情報を集めたのち、二次的な並列化においてエントリ・ポイントを確立することである。ひとたびこの情報が集められると、プログラム・セグメントの再並列化が、これらの共用アドレスからエントリ・ポイントを作成することができる。もう一つの手段は、次の命令に対し、エントリ・ポイントを周期的に(すなわち、Pセグメントをもつ一定数の命令ごとに)宣言することである。
【0127】
ひとたび確立されると、エントリ・ポイントは、以下の情報とともに各処理要素のZコード・キャッシュ・ディレクトリに配置されなければならない。
【0128】
このエントリ・ポイントを使用するときに各処理要素Zキャッシュから導出される最初のZコード命令のアドレス。
【0129】
エントリ・ポイント・キャッシュのレジスタ対応表(190)に維持されているレジスタ対応表のコピーに対するポインタ。
【0130】
このエントリ・ポイントの後のコードがリネームする共用のレジスタを識別するCCRの現在値。
【0131】
処理要素中で現在利用可能であるLC。
【0132】
このエントリ・ポイントに関連するレジスタ対応表は、エントリ・ポイントと宣言される命令のデコードの前に存在する表である。エントリ・ポイントに関連するレジスタ対応表は、各処理要素によってキャッシュに記憶され、エントリ・ポイントがプログラム・セグメントの並列化実行によって利用されるときに用いられる。加えて、各処理要素は、処理要素が命令をスケジュールする際に使用した最大サイクルMAXCYCLEを維持する。各処理要素に関してエントリ・ポイントが宣言される点でのMAXCYCLE+1の値は、エントリ・ポイントに後続する処理要素中の第一の実行サイクルを表す。何らかな命令がこのサイクルにスケジュールされる前にPセグメントの最後の命令に遭遇するという起こりそうにないイベントにおいては、MAXCYCLE+1の値が、最後に使用された処理要素エントリ・ポイント・サイクルEPCに配置される。このEPCは、必要な調節を行うために、Eモード中の最後のPセグメント命令ハンドラ・ルーチンによって使用される。
【0133】
占有割り当てアルゴリズム(420)によってスケジュールされたコードは処理要素の中で概念的順序にはないが、エントリ・ポイントに後続する各処理要素の命令のスケジュールは、概念的にエントリ・ポイントに先行する処理要素に割り当てられたすべての命令に後続しなければならない。これは、エントリ・ポイントが宣言されたとき、各処理要素中でサイクル占有ベクトルCOVを調節することによって達成される。唯一の要件は、たとえば処理要素kに割り当てられる、エントリ・ポイントに後続する命令を、エントリ・ポイントで決定された処理要素kのMAXCYCLE、MAXCYCLE(k)未満のサイクルに割り当てることができないことである。COVをしてこの要件を実施させる処理は、MAXCYCLE(k)未満のすべてのサイクル位置のCOV中の値をすべてのk値に関して少なくともkになるよう調節することである。これは、サイクル上で索引されるときのCOVを値において単調で非増加的にすることに等しい。これは、すべての処理要素にわたって最大のサイクル・スケジュールの値MAXMAXCYCLEを使用し、COVに沿って逆方向に進むCOVの直接観察によって実施することができる。MAXMAXCYCLE未満のCOV中のサイクル位置ごとに、COVの値は、COV要素中のサイクル値の最大値および次に高いサイクル位置のCOV要素の値になるようにセットされる。この手順は、COVの最初の位置で、または、COV要素に挿入すべき値がn、すなわち、SPURR中の処理要素の数に等しいとき、終了する。これが起こると、COV中のすべての先行位置がnに等しくセットされる。
【0134】
セクション5.2 命令スケジューリング(ステップ420)
各処理要素は、現在処理されている命令の点までサイクルごとにスケジュールされた命令の数を記録するサイクル占有ベクトルCOVを含む。レジスタがリネームされ、レジスタ変更を生じさせる命令のデコードのサイクルが決定されるたびに、このレジスタのレジスタ可用性時間RATが、レジスタのリネームを記録するレジスタ対応表の局所コピーの中にセットされる。レジスタ・リネーム動作の詳細は、以下セクション5.3に説明する。
【0135】
Eモード処理のはじめには、すべてのアーキテクチャレジスタは、利用可能であると見なされ、アーキテクチャレジスタの可用性時間はゼロであると見なされる。新たに変更されたレジスタの可用性時間は、新たな値を作成する命令のデコード時間と、命令に関連する実行時間および記憶アクセス遅延とをプラスしたものである。命令によって要求されるオペランドの記憶アクセス遅延は、1サイクルであると考える一定の量である。命令のデコード時間は、命令のすべてのデコード入力のRATを1サイクルだけ超えなければならず、そして、以下に記載する占有割り当てアルゴリズム(OAA)によって定義される占有可用性制限を受ける。命令のデコードに入力されるすべてのRATの1+最大値を、命令の最小スロット時間と呼ぶ。
【0136】
割り当てアルゴリズムとは、Pセグメント中の各命令のデコード時間を決定し、その命令をデコードタイムスロットおよび処理要素に割り当てる規則である。通常、以下のようにして、命令が審査され、それらのレジスタがリネームされ、概念的順序で割り当てられ、それらの入力のRATの後にスケジュールされる。
【0137】
1.COV中の各タイムスロットを、そのタイムスロットに割り当てられた命令の数、いわゆるタイムスロットの占有に関連させる。
【0138】
2.命令によって使用されるレジスタに関連するRATの内容に基づいて、命令のタイムスロットを計算する。このタイムスロットを命令の最小スロット時間と呼ぶ。
【0139】
最小スロット時間のCOVの値が、n、すなわちSPURRプロセッサ中の処理要素の数よりも小さいならば、選択されたタイムスロットが最小スロット時間となる。
【0140】
最小スロット時間のCOVの値が、n、すなわちSPURRプロセッサ中の処理要素の数であるならば、命令は、COVエントリがn未満であるその後最初のタイムスロットに割り当てられ、これが選択されたタイムスロットになる。
【0141】
3.選択されたタイムスロットの占有は1ずつインクリメントされ、命令は、番号が、選択されたタイムスロットのCOV中にある値に等しい処理要素に割り当てられる。
【0142】
4.デコード時間は選択時間に等しく、命令の実行の結果のRATの計算を使用して、レジスタ対応表の中のRATフィールドを更新する。
【0143】
5.各処理要素は、その割り当てられた命令の1個がスケジュールされている最高の番号のサイクルMAXCYCLEを維持する。選択されたタイムスロットが、命令に割り当てられた処理要素のMAXCYCLEを超えるならば、割り当てられた処理要素のMAXCYCLEの現在値を更新して、選択時間に等しくする。
【0144】
6.各処理要素は、いずれかの命令がスケジュールされている最高の番号のサイクルMAXCYCLEを維持する。選択されたタイムスロットがMAXCYCLEを超えるならば、MAXCYCLEの現在値を選択時間の値に更新する。
【0145】
この方法で作成された割り当てが、命令を実行する処理要素およびこの命令のデコード時間を決定する。命令のデコード時間の値がセクション4.3で使用されて、命令が変更するレジスタがあるならばそのRATが計算される。
【0146】
セクション5.3 レジスタ・リネーミング(ステップ430)
Eモードにある命令を処理する際、命令がアーキテクチャレジスタの新たな値をセットするたびにレジスタ・リネーム動作が起こる必要がある。SPURR中のレジスタは、一つの命令が作成する、別の命令が依存することができる何かを包含するように汎用化されており、したがって、条件コードの設定にも関連する。条件コード設定命令を用いるアーキテクチャにおいて、条件コードは、アーキテクチャレジスタによって表され、したがってリネーミングを受ける。
【0147】
各処理要素は、レジスタ・ファイル中の、リネーミングに使用することができる次のレジスタをCRR中に記録する。命令処理のこの点で、すでに命令はある処理要素にスケジュールされており、そのデコード時間が決定されている。命令への入力としても使用されるレジスタを変更する命令の混乱を避けるため、処理要素による命令の処理は、命令が所与の処理要素にスケジュールされているかどうかで異なる。命令が処理要素αにスケジュールされているならば、Eモード中の処理要素αが以下の動作を実行する。
【0148】
処理要素がレジスタ対応表を使用して、すべての命令ソース・レジスタをそれらのリネーミング値に翻訳する。
【0149】
処理要素αは、そのCRRを参照して、命令のシンク・レジスタをリネームし、CRRをインクリメントする。
【0150】
処理要素αは、命令を実行し、リネームされたレジスタの値を共通のレジスタ・ファイル中にセットする。
【0151】
処理要素αは、命令222のZコード・バージョンを作成し(図4を参照)、その命令を、それ自体のZコード・キャッシュ中の、命令がスケジュールされたサイクルと相応するアドレスに配置する。
【0152】
そして、処理要素αは、命令のシンク・レジスタのリネームに続いて、他すべてのプロセッサによって実行される処理を完了する。
【0153】
処理要素が処理要素αではなく、命令がレジスタの値を変更するならば、次のようになる。
【0154】
処理要素は、CRR中の値を使用して命令のシンク・レジスタをリネームし、CRR中の値をインクリメントする。
【0155】
そして、すべての処理要素が、実行がレジスタの値を潜在的に変更する命令ごとに、以下を実施する。
【0156】
このリネームの結果を、各処理要素によって維持されるレジスタ対応表の現在のコピーに転記する。
【0157】
セクション4.2で決定した命令のスケジュールされたデコード時間を使用して、命令記憶アクセスおよび実行に含まれる待ち時間をデコードに加えることにより、命令によって変更されるレジスタのRATを決定する。これが、RATを次の命令の処理に利用することを可能にする。
【0158】
処理される命令が分岐命令でもPセグメント終了命令でもないならば、セクション4.4、4.5および4.6をスキップすることができ、セクション4.1のEモード処理によって次の命令を処理する。
【0159】
セクション5.4 状態回復の分岐処理−レジスタ対応表キャッシュ(ステップ440)
Eモードの間、処理要素1が分岐命令に遭遇すると、どの処理要素がその命令のデコードおよび実行に割り当てられるかにかかわらず、その処理要素は、SPURRプロセッサが状態回復を実施することができるよう、その命令のリネーム動作の最後にそのレジスタ対応表の内容を保存しなければならない。共通のレジスタを、命令処理のこの点で共通のレジスタがリネームするそれらのアーキテクチャ対応物と関連させる局所レジスタ対応表に関連する情報を、分岐のためのレジスタ対応表(180)に記憶しなければならず、Pセグメントの開始アドレスおよび分岐の条件性レベルを使用してこのキャッシュから検索することができる。Pセグメントが分岐で入れ込まれるならば、エントリ・ポイントの条件性レベルを使用してコード中の分岐をカウントし、立証する方法を相対化したのと同様にして、検索に使用される条件性レベルをエントリ・ポイントの条件性レベルに相対化させる。情報をレジスタ対応表から検索する方法を使用して、SPURRの並列処理段階が完了したのち、またはセクション4にすでに説明した分岐予測誤りが発生したのち、処理の再会のために初期レジスタ状態を確立する。
【0160】
セクション5.5 PELCを確立するための分岐処理(ステップ450)
分岐予測誤りがZモードで起こると、Pセグメント中の誤って予測された分岐の条件性レベル以下の条件性レベルをもつ分岐命令よりも概念的に早いすべての命令がそれらの処理を完了する点で各処理要素を停止させなければならない。処理要素によって実行される命令はもはや順序どおりではない(すなわち、順序外で実行される)ため、処理要素によって発される個々の命令の条件性レベルを、より低い条件性レベルをもつすべての命令が処理要素中で完了したという保証とみなすことはできない。各処理要素中で処理を停止させる方法は、Eモードの間にセットされる処理要素条件性レベルPELCを使用する方法である。いずれかの処理要素がPセグメント・ストリーム中で分岐に遭遇すると、その分岐がその処理要素に割り当てられているかどうかにかかわらず、その処理要素は、その処理要素のMAXCYCLEにスケジュールされた命令に対し、227(図4を参照)で遭遇した分岐命令の条件性レベルを添付した。所与の命令は、その227を何回も、しかも常に増大する値で上書きされているかもしれない。PELCは、PELC=αと標識された命令に後続する命令が、α以下の条件性レベルを有してはいなかったことを保証する。PELCは、中間値をスキップすることができ、したがって、取り出し/格納制御の中で格納命令を刈り込むための唯一のベースとしては不適当である。これはセクション3で論じた。さらに、命令が分岐であるならば、すべての処理要素は、次の命令が正しい条件性レベルで処理されるよう、それらの条件性レベルをインクリメントしなければならない。
【0161】
セクション5.6 最後のPセグメント命令の扱い/Eモードの終了(ステップ460)
Pセグメント中の最後の命令に遭遇すると、各処理要素は、ビット228(図4を参照)をオンにすることにより、処理要素に関連するMAXCYCLEでその処理要素に割り当てられた命令を、セグメントの終わり命令として宣言する。この規則に対する唯一の例外は、所与の処理要素のMAXCYCLEの現在値がEPC未満である場合である。この場合、EPCに関連する命令位置には、Pセグメントの最後の命令としてフラグ付けされている無操作NOP命令が充填されている。次の命令のアドレスがZコード・キャッシュ・ディレクトリにおけるエントリであるならば、Pセグメントの最後の命令を宣言することができる。したがって、次の命令のアドレスをEモードによって使用して、現在の命令がEモードを終了させ、Pセグメントの最終命令を表すかどうかが決定される。
【0162】
Pセグメントの最後の命令は普通は分岐であるが、いずれにしても、処理要素1は、Pセグメントの最後の命令に遭遇したとき現在の条件性レベルで索引されるそのレジスタ対応表のキャッシュ記憶可能なコピーを生成する。ここでSPURRは、この条件性レベルを使用して、すべての命令が完了し、取り出し/格納表の刈り込みが達成されることを保証する状態回復を開始する。
【0163】
処理ステップの終了時および状態の回復および取り出し/格納表の刈り込みののち、次の命令アドレスを使用して、Zコード・キャッシュ・ディレクトリを探索して、次の処理間隔がEモードを含むのかZモードを含むのかを決定するということは、セクション2ですでに記載した。次の命令のアドレスがPセグメント開始アドレスまたはPセグメント中のエントリ・ポイントと一致する。Zモード処理間隔が確立される。
【0164】
セクション6 Zモードにおける処理
Zモード処理は、レジスタ・リネーミング、命令スケジューリングまたは回復情報のキャッシュ記憶が必要ではないため、Eモード処理よりも簡素である。Zモードにおける処理は、すべての処理要素がそれらの最後の命令に達するか、分岐予測誤りが宣言されるまで継続する。分岐予測誤りは、全証明条件性レベル(OCLC)341(図6を参照)によって宣言される。各処理要素中の分岐解機構がZコードでの各分岐命令の解をバス390を介して刈り込みモニタに通信する。所与の期間に、OCLCは、より低いレベルのすべての分岐が正しく解かれているよう、最大のLCである。OCLCを超えるものであるLCでの分岐がBWGとして解かれると、このレベルのLCでの分岐予測誤りがすべての処理要素に通信される。この分岐予測誤りを宣言した処理要素は、すべての処理要素が静止し、状態回復が完了し、取り出し/格納表が刈り込まれると、正しい目標アドレスをすべての処理要素に通信する。Zモードでは、ひとたび処理要素のPELCが分岐予測誤りのLC以上になると、処理要素は分岐予測誤りののち静止する。処理要素は、それに割り当てられた命令の最高のPELC227(図4を参照)に基づいて継続的にそのPELCをリセットする。処理要素は、セグメントの終わりビット228がオンになっている命令に達すると、自動的に静止する。
【0165】
一つの好ましい実施態様に関して本発明を説明したが、当業者であれば、請求項の真髄および範囲の中で、本発明に変更を加えて実施しうることを認識するであろう。
【0166】
まとめとして、本発明の構成に関して以下の事項を開示する。
(1)命令のシーケンスを格納するメモリと、
複数の実行装置と、
前記メモリに格納された前記命令のシーケンスの第一のシーケンスの代替符号化を、前記メモリに格納された前記命令のシーケンスの実行と同時に生成する並列命令生成手段と、
を含み、
前記代替符号化を、前記複数の実行装置によって非同期的に並列で実行することができ、前記複数の実行装置が共通のレジスタ・ファイルを介してインタフェースすることを特徴とするコンピュータ処理装置。
(2)前記代替符号化が前記命令の第一のシーケンスの複数のサブシーケンスを含み、前記命令のサブシーケンスを、前記複数の実行装置によって非同期的に並列で実行することができる上記(1)記載のコンピュータ処理装置。
(3)前記複数の実行装置それぞれが、前記命令のサブシーケンスの一つを格納するための専有命令キャッシュに関連している上記(2)記載のコンピュータ処理装置。
(4)前記並列命令生成手段が前記命令のサブシーケンスへの複数のエントリ・ポイントを識別する上記(2)記載のコンピュータ処理装置。
(5)前記並列命令生成手段がレジスタ・リネーミングを使用して前記命令の第一のシーケンスの前記複数のサブシーケンスを生成する上記(2)記載のコンピュータ処理装置。
(6)前記並列生成手段が、命令の各サブシーケンスに関連するレジスタ対応表を格納し、前記レジスタ対応表が、関連する命令のサブシーケンスの中の命令によって使用され、定義されるレジスタと、前記共通のレジスタ・ファイルのレジスタとの間のマッピングを表す上記(5)記載のコンピュータ処理装置。
(7)前記レジスタ対応表が、レジスタ対応表に関連する命令のサブシーケンスの中の命令によって使用および/または定義されるレジスタがマッピングされる前記共通のレジスタ・ファイルの各レジスタに対応するエントリを含み、前記エントリが、前記共通のレジスタ・ファイルの対応するレジスタに関連する可用性期間を表す可用性データを含む上記(6)記載のコンピュータ処理装置。
(8)命令のシーケンスを格納するメモリと、複数の実行装置とを含むコンピュータ処理装置において前記命令のシーケンスを実行する方法において、
前記メモリに格納された前記命令のシーケンスを実行するステップと、
前記メモリに格納された前記命令のシーケンスの前記実行ステップと同時に、前記メモリに格納された前記命令のシーケンスの第一のシーケンスの代替符号化を生成するステップと、
を含み、
前記代替符号化を、前記複数の実行装置によって非同期的に並列で実行することができ、前記複数の実行装置が共通のレジスタ・ファイルを介してインタフェースすることを特徴とする方法。
(9)前記代替符号化が前記命令の第一のシーケンスの複数のサブシーケンスを含み、前記命令のサブシーケンスを、前記複数の実行装置によって非同期的に並列で実行することができる上記(8)記載の方法。
(10)前記複数の実行装置それぞれが、前記命令のサブシーケンスの一つを格納するための専有命令キャッシュに関連している上記(9)記載の方法。
(11)前記命令のサブシーケンスへの複数のエントリ・ポイントを識別するステップをさらに含む上記(9)記載の方法。
(12)前記生成ステップがレジスタ・リネーミングを使用して前記命令の第一のシーケンスの前記複数のサブシーケンスを生成する上記(9)記載の方法。
(13)命令の各サブシーケンスに関連するレジスタ対応表を格納するステップをさらに含み、前記レジスタ対応表が、関連する命令のサブシーケンスの中の命令によって使用され、定義されるレジスタと、前記共通のレジスタ・ファイルのレジスタと間のマッピングを表す上記(12)記載の方法。
(14)前記レジスタ対応表が、レジスタ対応表に関連する命令のサブシーケンスの中の命令によって使用および/または定義されるレジスタがマッピングされる前記共通のレジスタ・ファイルの各レジスタに対応するエントリを含み、前記エントリが、前記共通のレジスタ・ファイルの対応するレジスタに関連する可用性期間を表す可用性データを含む上記(13)記載の方法。
(15)命令のシーケンスを格納するメモリと、
複数の実行装置と、
前記メモリに格納された前記命令のシーケンスの第一のシーケンスの代替符号化を、前記メモリに格納された前記命令のシーケンスの実行と同時に生成する並列命令生成手段と、
を含み、
前記代替符号化を、前記複数の実行装置によって非同期的に並列で実行することができ、前記代替符号化が、順序外にスケジュールされた少なくとも一つの命令と、少なくとも一つの推論的分岐命令とを含み、
前記少なくとも一つの推論的分岐命令が誤って推測されたことを示す分岐予測誤り信号を生成する手段と、
前記メモリに格納された、前記少なくとも一つの推論的分岐命令に先行するすべての命令の実行を完了したとき、前記分岐予測誤り信号に応答して、前記実行装置を制御して、前記代替符号化の実行を停止させる手段とを含む回復手段と、を含むことを特徴とするコンピュータ処理装置。
(16)前記推論的分岐命令の結果が前記分岐命令の最初の実行に基づいて推論される上記(15)記載のコンピュータ処理装置。
(17)前記回復手段が、
前記実行装置によって実行される各代替符号化に関連する条件性レベルを表す第一のデータを格納する表と、
前記少なくとも一つの推論的分岐命令の条件性レベルを表す第二のデータを生成する手段と、
前記実行装置によって実行される前記代替符号化に関連する前記第一のデータが前記第二のデータに対応すると決定したとき、各実行装置を制御して、前記代替符号化の実行を停止させる手段と、
を含む上記(15)記載のコンピュータ処理装置。
(18)命令のシーケンスを格納するメモリと、複数の実行装置とを含むコンピュータ処理装置において前記命令のシーケンスを実行する方法において、
前記メモリに格納された前記命令の順列を実行するステップと、
前記命令のシーケンスの前記実行ステップと同時に、前記メモリに格納された前記命令のシーケンスの第一のシーケンスの代替符号化を生成するステップと、を含み、
前記代替符号化を、前記複数の実行装置によって非同期的に並列で実行することができ、前記代替符号化が、順序外にスケジュールされた少なくとも一つの命令と、少なくとも一つの推論的分岐命令とを含み、
前記少なくとも一つの推論的分岐命令が誤って推測されたことを示す分岐予測誤り信号を生成するステップと、
前記メモリに格納された、前記少なくとも一つの推論的分岐命令に先行するすべての命令の実行を完了したとき、前記分岐予測誤り信号に応答して、前記実行装置を制御して、前記代替符号化の実行を停止させるステップと、
を含むことを特徴とする方法。
(19)前記推論的分岐命令の結果を、前記分岐命令の最初の実行に基づいて推論する上記(18)記載の方法。
(20)前記実行装置によって実行される各代替符号化に関連する条件性レベルを表す第一のデータを生成するステップと、
前記少なくとも一つの推論的分岐命令の条件性レベルを表す第二のデータを生成するステップと、
前記実行装置によって実行される前記代替符号化に関連する前記第一のデータが前記第二のデータに対応すると決定したとき、各実行装置を制御して、前記代替符号化の実行を停止させるステップとをさらに含む上記(18)記載の方法。
【図面の簡単な説明】
【図1】 本発明の自己並列化処理システムの好ましい実施態様のブロック図である。
【図2】 好ましい実施態様において一つの処理要素によって使用される専有Zキャッシュの構造を示す図である。
【図3】 Zキャッシュのディレクトリ中のエントリのフォーマットを示す図である。
【図4】 Zキャッシュのセルに記憶されたZ命令のフォーマットを示す図である。
【図5】 Zキャッシュ・セルの命令フォーマット拡張部を示す図である。
【図6】 好ましい実施態様において順番外ハザードを監視するOSC/PSC制御のブロック図である。
【図7】 OSC/PSC制御における取り出し表エントリのフォーマットを示す図である。
【図8】 OSC/PSC制御における格納表エントリのフォーマットを示す図である。
【図9】 OSC/PSC制御における刈り込みモニタを示す図である。
【図10】 Eモードにおける動作の順序を示す図である。
【図11】 Eモードにおける動作の順序を示す図である。
【符号の説明】
100 処理要素
130 実行装置
140 記憶階層
145 インタフェース
160 共通のレジスタ・ファイル
170 レジスタ対応表
180 レジスタ対応表キャッシュ
200 Zキャッシュ
300 OSC/PSC制御
500 命令デコーダ/スケジューラ

Claims (9)

  1. 命令のシーケンスを格納するメモリと、
    複数の処理装置であって、各処理装置が、
    実行装置と、
    少なくとも1つの、並列化された命令のシーケンス(サブ命令シーケンス)を生成する並列命令生成手段と、
    を含む、複数の処理装置、とを含み、
    前記各処理装置は、二つの実行モードで命令を実行することができ、第一の実行モードでは、逐次命令のシーケンスの実行と、サブ命令シーケンスの生成とが行われ、第二のモードでは、サブ命令シーケンスが実行される、
    自己並列化コンピュータ処理装置において、
    前記サブ命令シーケンスの生成が、前記並列命令生成手段がレジスタ・リネーミング法を使用することによって行われ、及び、
    前記メモリには、前記複数の処理装置に共通のレジスタ・ファイルが格納され、前記共通のレジスタ・ファイルには、前記第一の実行モードで処理される逐次命令により使用されるアーキテクチャレジスタと、該アーキテクチャレジスタのリネームされたレジスタが含まれ、
    前記各処理装置は、前記リネームされたレジスタと、前記アーキテクチャレジスタとの間のマッピングを表すところの、レジスタ対応表を格納するメモリを有し
    前記コンピュータ処理装置は、前記レジスタ対応表の内容を格納しておくための、前記複数の処理装置に共通のレジスタ対応表キャッシュを備え、
    一の処理装置によるレジスタ・リネーミング動作の最後に、分岐が誤って予測された場合にレジスタ状態を回復できるように、当該処理装置により変更されたレジスタ対応表の内容を前記レジスタ対応表キャッシュに格納し、及び、他の各処理装置は各々のレジスタ対応表を更新し
    前記複数の処理装置が前記共通のレジスタ・ファイルを参照しながら、互いに非同期的に並列処理を行うことを特徴とするコンピュータ処理装置。
  2. 各処理装置が、サブ命令シーケンスを割り当てる処理装置を決定する手段を有することを特徴とする請求項1記載のコンピュータ処理装置。
  3. 前記処理装置の夫々が、割り当てられたサブ命令シーケンスを格納する専有キャッシュ・メモリを有する、請求項2記載のコンピュータ処理装置。
  4. 前記並列命令生成手段が、前記サブ命令シーケンスへの複数のエントリ・ポイントを識別する手段を含む、請求項1〜3のいずれか1項記載のコンピュータ処理装置。
  5. 前記レジスタ対応表が、前記リネームされたレジスタの可用性期間を表す可用性データをさらに含む請求項1〜4のいずれか1項記載のコンピュータ処理装置。
  6. 前記サブ命令シーケンスが、前記逐次命令シーケンスの順序外にスケジュールされた少なくとも一つの命令と、少なくとも一つの推論的分岐命令とを含み、
    前記各処理装置が、
    前記少なくとも一つの推論的分岐命令が誤って推測されたことを示す分岐予測誤り信号を生成する手段と、
    前記メモリに格納された、前記少なくとも一つの推論的分岐命令に先行するすべての命令の実行を完了したとき、前記分岐予測誤り信号に応答して、各処理装置を制御して、各処理装置に割り当てられたサブ命令シーケンスの実行を停止させる手段とを含む回復手段と、
    をさらに含むことを特徴とする、請求項1〜のいずれか1項記載のコンピュータ処理装置。
  7. 前記推論的分岐命令の結果が前記分岐命令の最初の実行に基づいて推論される請求項記載のコンピュータ処理装置。
  8. 前記回復手段が、
    前記処理装置によって実行されるサブ命令シーケンスの、逐次命令シーケンス中で前記サブ命令シーケンスに先行する分岐命令の数であるところの、条件性レベルを表す第一のデータを生成する手段と、
    前記少なくとも一つの推論的分岐命令の条件性レベルを表す第二のデータを生成する手段と、
    前記第一のデータが前記第二のデータに対応すると決定されたとき、各処理装置を制御して、前記サブ命令シーケンスの実行を停止させる手段と、
    をさらに含む請求項6または7記載のコンピュータ処理装置。
  9. 命令のシーケンスを格納するメモリと、
    複数の処理装置であって、各処理装置が、
    実行装置と、
    少なくとも1つの、並列化された命令のシーケンス(サブ命令シーケンス)を生成する並列命令生成手段と、
    を含む、複数の処理装置、とを含み、
    前記各処理装置は、二つの実行モードで命令を実行することができ、第一の実行モードでは、逐次命令のシーケンスの実行と、サブ命令シーケンスの生成とが行われ、第二のモードでは、サブ命令シーケンスが実行される、自己並列化方式により命令シーケンスを実行する方法において、
    前記並列命令生成手段が、レジスタ・リネーミング法を使用して前記サブ命令シーケンスの生成を行い、
    前記各処理装置は、前記リネームされたレジスタと、前記アーキテクチャレジスタとの間のマッピングを表すところの、レジスタ対応表を格納するメモリを有し
    前記コンピュータ処理装置は、前記レジスタ対応表の内容を格納しておくための、前記複数の処理装置に共通のレジスタ対応表キャッシュを備え、
    一の処理装置によるレジスタ・リネーミング動作の最後に、分岐が誤って予測された場合にレジスタ状態を回復できるように、当該処理装置により変更されたレジスタ対応表の内容を前記レジスタ対応表キャッシュに格納し、及び、他の各処理装置は各々のレジスタ対応表を更新する、
    ことを特徴とする方法。
JP25972997A 1996-10-01 1997-09-25 命令シーケンスを実行する方法及び装置 Expired - Lifetime JP3731843B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/724633 1996-10-01
US08/724,633 US5802338A (en) 1996-10-01 1996-10-01 Method of self-parallelizing and self-parallelizing multiprocessor using the method

Publications (2)

Publication Number Publication Date
JPH10124317A JPH10124317A (ja) 1998-05-15
JP3731843B2 true JP3731843B2 (ja) 2006-01-05

Family

ID=24911209

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25972997A Expired - Lifetime JP3731843B2 (ja) 1996-10-01 1997-09-25 命令シーケンスを実行する方法及び装置

Country Status (4)

Country Link
US (1) US5802338A (ja)
JP (1) JP3731843B2 (ja)
CN (1) CN1127016C (ja)
GB (1) GB2318660B (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5898849A (en) * 1997-04-04 1999-04-27 Advanced Micro Devices, Inc. Microprocessor employing local caches for functional units to store memory operands used by the functional units
US6161167A (en) * 1997-06-27 2000-12-12 Advanced Micro Devices, Inc. Fully associate cache employing LRU groups for cache replacement and mechanism for selecting an LRU group
US6088789A (en) 1998-05-13 2000-07-11 Advanced Micro Devices, Inc. Prefetch instruction specifying destination functional unit and read/write access mode
US6757816B1 (en) * 1999-12-30 2004-06-29 Intel Corporation Fast branch misprediction recovery method and system
US6748492B1 (en) * 2000-08-07 2004-06-08 Broadcom Corporation Deterministic setting of replacement policy in a cache through way selection
US6732234B1 (en) 2000-08-07 2004-05-04 Broadcom Corporation Direct access mode for a cache
US6848024B1 (en) * 2000-08-07 2005-01-25 Broadcom Corporation Programmably disabling one or more cache entries
US6748495B2 (en) 2001-05-15 2004-06-08 Broadcom Corporation Random generator
US20030154419A1 (en) * 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
US7266587B2 (en) * 2002-05-15 2007-09-04 Broadcom Corporation System having interfaces, switch, and memory bridge for CC-NUMA operation
WO2005013123A1 (en) * 2003-07-29 2005-02-10 Bitfone Corporation Mobile handset with update agent implemented in hardware
US7904895B1 (en) 2004-04-21 2011-03-08 Hewlett-Packard Develpment Company, L.P. Firmware update in electronic devices employing update agent in a flash memory card
JP2006053662A (ja) * 2004-08-10 2006-02-23 Matsushita Electric Ind Co Ltd 多重プロセッサ
US8526940B1 (en) 2004-08-17 2013-09-03 Palm, Inc. Centralized rules repository for smart phone customer care
US8281083B2 (en) * 2005-06-30 2012-10-02 Intel Corporation Device, system and method of generating an execution instruction based on a memory-access instruction
EP2025095A2 (en) 2006-06-08 2009-02-18 Hewlett-Packard Development Company, L.P. Device management in a network
US8752044B2 (en) 2006-07-27 2014-06-10 Qualcomm Incorporated User experience and dependency management in a mobile device
US7849290B2 (en) * 2007-07-09 2010-12-07 Oracle America, Inc. Store queue architecture for a processor that supports speculative execution
US8423584B2 (en) * 2008-05-08 2013-04-16 International Business Machines Corporation Conditional inclusion of resources in a computer system configuration
US20110320766A1 (en) * 2010-06-29 2011-12-29 Youfeng Wu Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type
WO2012019111A2 (en) * 2010-08-06 2012-02-09 Frederick Furtek A method and apparatus for a compiler and related components for stream-based computations for a general-purpose, multiple-core system
US20130339666A1 (en) * 2012-06-15 2013-12-19 International Business Machines Corporation Special case register update without execution
JP6307975B2 (ja) * 2014-03-28 2018-04-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
DE102017209697A1 (de) * 2016-06-13 2017-12-14 Denso Corporation Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung
JP2017228029A (ja) * 2016-06-21 2017-12-28 株式会社デンソー 並列化方法、並列化ツール、車載装置
US10430197B2 (en) 2017-05-12 2019-10-01 Samsung Electronics Co., Ltd. Banking register renaming to reduce power

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4574349A (en) * 1981-03-30 1986-03-04 International Business Machines Corp. Apparatus for addressing a larger number of instruction addressable central processor registers than can be identified by a program instruction
JPH0658631B2 (ja) * 1983-12-19 1994-08-03 株式会社日立製作所 デ−タ処理装置
US4829422A (en) * 1987-04-02 1989-05-09 Stellar Computer, Inc. Control of multiple processors executing in parallel regions
US4992938A (en) * 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
DE69030931T2 (de) * 1989-04-24 1998-01-15 Ibm Mehrfachsequenzprozessorsystem
US5355457A (en) * 1991-05-21 1994-10-11 Motorola, Inc. Data processor for performing simultaneous instruction retirement and backtracking
US5412784A (en) * 1991-07-15 1995-05-02 International Business Machines Corporation Apparatus for parallelizing serial instruction sequences and creating entry points into parallelized instruction sequences at places other than beginning of particular parallelized instruction sequence
US5408658A (en) * 1991-07-15 1995-04-18 International Business Machines Corporation Self-scheduling parallel computer system and method
US5347639A (en) * 1991-07-15 1994-09-13 International Business Machines Corporation Self-parallelizing computer system and method
US5511172A (en) * 1991-11-15 1996-04-23 Matsushita Electric Co. Ind, Ltd. Speculative execution processor
US5434985A (en) * 1992-08-11 1995-07-18 International Business Machines Corporation Simultaneous prediction of multiple branches for superscalar processing
US5481683A (en) * 1992-10-30 1996-01-02 International Business Machines Corporation Super scalar computer architecture using remand and recycled general purpose register to manage out-of-order execution of instructions
US5581719A (en) * 1992-11-12 1996-12-03 Digital Equipment Corporation Multiple block line prediction
DE69408769T2 (de) * 1993-10-18 1998-07-09 Cyrix Corp Fliessbandsteuerung und Registerübersetzung in Mikroprozessor
DE69425311T2 (de) * 1993-10-18 2001-03-15 Nat Semiconductor Corp Mikroprozessor mit spekulativer Befehlsausführung
EP0724215A1 (en) * 1995-01-26 1996-07-31 Sun Microsystems, Inc. Method and apparatus for recovering from mispredicted branches in a pipelined processor

Also Published As

Publication number Publication date
CN1127016C (zh) 2003-11-05
GB2318660B (en) 2001-07-04
CN1178942A (zh) 1998-04-15
JPH10124317A (ja) 1998-05-15
GB2318660A (en) 1998-04-29
US5802338A (en) 1998-09-01
GB9719580D0 (en) 1997-11-19

Similar Documents

Publication Publication Date Title
JP3731843B2 (ja) 命令シーケンスを実行する方法及び装置
JP2898820B2 (ja) 自己並列化式のコンピュータ・システムおよび方法
US7363467B2 (en) Dependence-chain processing using trace descriptors having dependency descriptors
US5408658A (en) Self-scheduling parallel computer system and method
Smith et al. The microarchitecture of superscalar processors
Friendly et al. Putting the fill unit to work: Dynamic optimizations for trace cache microprocessors
US5758051A (en) Method and apparatus for reordering memory operations in a processor
KR100388952B1 (ko) 비순서적 멀티스레드 실행을 수행하는 적재 및 저장명령어를 배열하기 위한 시스템
US8028152B2 (en) Hierarchical multi-threading processor for executing virtual threads in a time-multiplexed fashion
US6415380B1 (en) Speculative execution of a load instruction by associating the load instruction with a previously executed store instruction
US5412784A (en) Apparatus for parallelizing serial instruction sequences and creating entry points into parallelized instruction sequences at places other than beginning of particular parallelized instruction sequence
US20080133889A1 (en) Hierarchical instruction scheduler
US20080133893A1 (en) Hierarchical register file
Krishnan et al. The need for fast communication in hardware-based speculative chip multiprocessors
WO1998037485A1 (en) Method and apparatus for forwarding of operands in a computer system
KR20010033242A (ko) 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
KR20010024750A (ko) 오예측 이후의 명령어 리플레이를 위한 파이프라인 외부의트레이스 버퍼
US6032244A (en) Multiple issue static speculative instruction scheduling with path tag and precise interrupt handling
JP2007531164A (ja) データスペキュレーションの明示的ソフトウェア制御のための方法及び構造
Tian et al. Enhanced speculative parallelization via incremental recovery
WO2009076324A2 (en) Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system
Yiapanis et al. Compiler-driven software speculation for thread-level parallelism
Purser et al. Slipstream memory hierarchies
Wang et al. Exploiting speculative thread-level parallelism in data compression applications
EP1190313B1 (en) Result field queue

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041001

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20041224

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050330

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20050330

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: 20050926

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20050926

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20050926

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051007

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081021

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091021

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091021

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101021

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101021

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111021

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121021

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121021

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131021

Year of fee payment: 8

EXPY Cancellation because of completion of term