JP3093629B2 - 命令シーケンスを実行するための方法および装置 - Google Patents
命令シーケンスを実行するための方法および装置Info
- Publication number
- JP3093629B2 JP3093629B2 JP08086944A JP8694496A JP3093629B2 JP 3093629 B2 JP3093629 B2 JP 3093629B2 JP 08086944 A JP08086944 A JP 08086944A JP 8694496 A JP8694496 A JP 8694496A JP 3093629 B2 JP3093629 B2 JP 3093629B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instructions
- ldi
- execution
- group
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/22—Microcontrol or microprogram arrangements
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
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)
- Communication Control (AREA)
- Hardware Redundancy (AREA)
Description
【0001】
【発明の属する技術分野】本発明は、一般的にはデータ
処理システムに関し、より具体的にはデータ処理システ
ムによる外部メモリに格納された命令の実行に関する。
処理システムに関し、より具体的にはデータ処理システ
ムによる外部メモリに格納された命令の実行に関する。
【0002】
【従来の技術】一般に、コンピュータ・アーキテクチャ
は、プログラム実行の順次モデルに基づき、プログラム
内の各命令がメモリから取り出され、完全に実行され、
すべての結果がメモリに返されてから、次の命令が同様
に処理される。このモデルでは、次に実行される命令
は、通常、実行したばかりの命令の直後の命令であり、
実行したばかりの命令に対して次に高位のアドレスを有
するメモリ内の位置に格納されている。分岐命令では連
続する次の位置とは異なる位置を指定することができ、
典型的なコンピュータ・プログラム・アプリケーション
ではある程度の頻度でこのような分岐命令が発生する。
は、プログラム実行の順次モデルに基づき、プログラム
内の各命令がメモリから取り出され、完全に実行され、
すべての結果がメモリに返されてから、次の命令が同様
に処理される。このモデルでは、次に実行される命令
は、通常、実行したばかりの命令の直後の命令であり、
実行したばかりの命令に対して次に高位のアドレスを有
するメモリ内の位置に格納されている。分岐命令では連
続する次の位置とは異なる位置を指定することができ、
典型的なコンピュータ・プログラム・アプリケーション
ではある程度の頻度でこのような分岐命令が発生する。
【0003】この順次モデルの単純な実施態様では、そ
れぞれの命令が定期的に同じ方法で処理される。したが
って、1組の命令の実行に必要な時間は、実行する命令
の数に正確に比例する。前の命令が実行されている間に
命令が取り出されるようなパイプライン化またはオーバ
ラップ化実施態様では、現在実行中の命令間に依存関係
がない限り、遅延は一切検出されない。別の命令の結果
が得られるまで命令が実行を完了できない場合には、依
存関係が検出される。このような状況では、第1の命令
がその結果を生成してしまうまで第2の命令は待機しな
ければならず、その結果、実行遅延が発生する。
れぞれの命令が定期的に同じ方法で処理される。したが
って、1組の命令の実行に必要な時間は、実行する命令
の数に正確に比例する。前の命令が実行されている間に
命令が取り出されるようなパイプライン化またはオーバ
ラップ化実施態様では、現在実行中の命令間に依存関係
がない限り、遅延は一切検出されない。別の命令の結果
が得られるまで命令が実行を完了できない場合には、依
存関係が検出される。このような状況では、第1の命令
がその結果を生成してしまうまで第2の命令は待機しな
ければならず、その結果、実行遅延が発生する。
【0004】パイプライン化実施態様の依存関係による
遅延を低減するため、様々な方法が使用されている。第
1の手法では、実施の詳細がコンパイラに入力され、依
存命令が完全に同時に実行用として得られれないよう
に、コンパイラが命令をスケジューリングする。これに
は、コンパイラがすべての依存関係を処理しなければな
らず、実施態様を単純なものに維持するという利点があ
る。結果は必ず適切な時期に得られるようにスケジュー
リングされるので、その内部クロックのサイクル時間で
測定したシステムの速度に対する制限は、命令セット内
の単一プリミティブ算術演算または論理演算の複雑さだ
けである。この手法の欠点は、コンパイルしたアプリケ
ーションが特定の実施態様との互換性しかなく、したが
って、特定の実施態様上で実行するためにはすべての既
存のコンピュータ・プログラム・アプリケーションに応
じて再コンパイルやエンド・ユーザによる再購入が必要
になる。
遅延を低減するため、様々な方法が使用されている。第
1の手法では、実施の詳細がコンパイラに入力され、依
存命令が完全に同時に実行用として得られれないよう
に、コンパイラが命令をスケジューリングする。これに
は、コンパイラがすべての依存関係を処理しなければな
らず、実施態様を単純なものに維持するという利点があ
る。結果は必ず適切な時期に得られるようにスケジュー
リングされるので、その内部クロックのサイクル時間で
測定したシステムの速度に対する制限は、命令セット内
の単一プリミティブ算術演算または論理演算の複雑さだ
けである。この手法の欠点は、コンパイルしたアプリケ
ーションが特定の実施態様との互換性しかなく、したが
って、特定の実施態様上で実行するためにはすべての既
存のコンピュータ・プログラム・アプリケーションに応
じて再コンパイルやエンド・ユーザによる再購入が必要
になる。
【0005】第2の手法では、命令間の依存関係を検査
し、依存する命令がデータを生成した後でのみ命令がそ
のデータにアクセスするように、それらの命令の実行を
スケジューリングするようなハードウェアをプロセッサ
が含んでいる。プリミティブ演算の複雑さに加え、第2
の手法も、命令間の依存関係を発見する複雑さによる制
限を受け、実行可能なオーバラップ演算の回数が増すに
つれてこの複雑さも増す。これは、システムの内部クロ
ックのサイクル時間を増加するか、またはプログラムの
実行を完了するのに必要なクロック・サイクル数を増加
するかのいずれかの影響を及ぼし、いずれもシステムの
パフォーマンスを低下させる。しかし、この方式には、
様々な実施態様上で単一のコンパイル済みプログラムを
実行できるという重要な利点がある。
し、依存する命令がデータを生成した後でのみ命令がそ
のデータにアクセスするように、それらの命令の実行を
スケジューリングするようなハードウェアをプロセッサ
が含んでいる。プリミティブ演算の複雑さに加え、第2
の手法も、命令間の依存関係を発見する複雑さによる制
限を受け、実行可能なオーバラップ演算の回数が増すに
つれてこの複雑さも増す。これは、システムの内部クロ
ックのサイクル時間を増加するか、またはプログラムの
実行を完了するのに必要なクロック・サイクル数を増加
するかのいずれかの影響を及ぼし、いずれもシステムの
パフォーマンスを低下させる。しかし、この方式には、
様々な実施態様上で単一のコンパイル済みプログラムを
実行できるという重要な利点がある。
【0006】
【発明が解決しようとする課題】本発明の一目的は、デ
ータ処理システムの全体的システム・パフォーマンスを
改善することにある。
ータ処理システムの全体的システム・パフォーマンスを
改善することにある。
【0007】本発明の他の目的は、プロセッサによって
命令が実行される速度を改善することにある。
命令が実行される速度を改善することにある。
【0008】本発明の他の目的は、命令ストリーム内の
依存関係を発見する際に必要な作業を最小限にすること
にある。
依存関係を発見する際に必要な作業を最小限にすること
にある。
【0009】本発明の他の目的は、プロセッサが並列実
行可能な1つの命令ストリームの動作に関し、プロセッ
サが動的に学習できるようにすることにある。
行可能な1つの命令ストリームの動作に関し、プロセッ
サが動的に学習できるようにすることにある。
【0010】本発明の他の目的は、プロセッサが並列実
行可能な複数の命令ストリームに関し、プロセッサが学
習できるようにすることにある。
行可能な複数の命令ストリームに関し、プロセッサが学
習できるようにすることにある。
【0011】
【課題を解決するための手段】本発明では、デコード済
み命令バッファ(DIB)というバッファを使用して、
並列実行可能な複数の命令を表すコマンド・グループを
格納する。DIBグループ内の各パターンは、長デコー
ド済み命令(LDI)という長い命令をコード化したも
のである可能性がある。それぞれのLDIは、その命令
を実行する際に使用する機能ユニットおよびレジスタ資
源などを含む、その命令の実行に必要なすべての情報を
含む可能性がある。また、LDIは、現行命令の結果に
応じて、次に実行すべきグループまたはLDIあるいは
その両方を指す1組のポインタも含む可能性がある。
み命令バッファ(DIB)というバッファを使用して、
並列実行可能な複数の命令を表すコマンド・グループを
格納する。DIBグループ内の各パターンは、長デコー
ド済み命令(LDI)という長い命令をコード化したも
のである可能性がある。それぞれのLDIは、その命令
を実行する際に使用する機能ユニットおよびレジスタ資
源などを含む、その命令の実行に必要なすべての情報を
含む可能性がある。また、LDIは、現行命令の結果に
応じて、次に実行すべきグループまたはLDIあるいは
その両方を指す1組のポインタも含む可能性がある。
【0012】DIBは、メモリ・システム、命令待ち行
列、1組の実行ユニットへの供給を行う命令ディスパッ
チ・ユニットから構成される、従来のコンピュータ処理
装置とともに機能する。命令がDIB内にない場合、こ
の命令および後続の命令がメモリ・システムから命令待
ち行列に取り出され、使用可能な機能ユニットのサブセ
ットまたはこの目的専用の機能ユニットのいずれかを必
要とする従来の方法で実行される。従来の装置による命
令の実行と同時に、グループ・フォーマッタは1組のL
DIを作成し、それぞれのLDIは並列実行可能な1組
の元の命令の代替コード化になる。LDIを構築する際
に、グループ・フォーマッタは命令間の依存関係および
命令待ち時間を分析する。グループ・フォーマッタによ
って構築された各組のLDIは、同一組の命令の次の実
行が全機能ユニット上でDIBから直接行え、依存関係
や待ち時間の分析の労力を必要としないように、DIB
内に保管される。
列、1組の実行ユニットへの供給を行う命令ディスパッ
チ・ユニットから構成される、従来のコンピュータ処理
装置とともに機能する。命令がDIB内にない場合、こ
の命令および後続の命令がメモリ・システムから命令待
ち行列に取り出され、使用可能な機能ユニットのサブセ
ットまたはこの目的専用の機能ユニットのいずれかを必
要とする従来の方法で実行される。従来の装置による命
令の実行と同時に、グループ・フォーマッタは1組のL
DIを作成し、それぞれのLDIは並列実行可能な1組
の元の命令の代替コード化になる。LDIを構築する際
に、グループ・フォーマッタは命令間の依存関係および
命令待ち時間を分析する。グループ・フォーマッタによ
って構築された各組のLDIは、同一組の命令の次の実
行が全機能ユニット上でDIBから直接行え、依存関係
や待ち時間の分析の労力を必要としないように、DIB
内に保管される。
【0013】DIBは、命令ID、たとえば、元の命令
ストリーム内の命令のアドレスによって索引付けされた
キャッシュとして編成することができる。その最も単純
な形式では、メモリとして配置し、アドレスからの適当
な1組のビットを使用してアクセスすることができる。
この場合、完全なアドレスが内容とともに、または並列
メモリに格納され、そのグループの妥当性を検査するた
めに必要なアドレスと比較される。このアクセスと並行
して、メモリ・システムもアクセスされるので、DIB
内に不一致があれば、メモリ・システムから遅延なしで
実行を再開することができる。
ストリーム内の命令のアドレスによって索引付けされた
キャッシュとして編成することができる。その最も単純
な形式では、メモリとして配置し、アドレスからの適当
な1組のビットを使用してアクセスすることができる。
この場合、完全なアドレスが内容とともに、または並列
メモリに格納され、そのグループの妥当性を検査するた
めに必要なアドレスと比較される。このアクセスと並行
して、メモリ・システムもアクセスされるので、DIB
内に不一致があれば、メモリ・システムから遅延なしで
実行を再開することができる。
【0014】
【発明の実施の形態】図1に関して、本発明のコンピュ
ータ処理装置は、1つまたは複数の固定小数点実行ユニ
ット101(1つを図示する)と、1つまたは複数の浮
動小数点実行ユニット103(1つを図示する)と、1
つまたは複数の分岐処理ユニット105(1つを図示す
る)とを有する従来の順次マシンを含んでいる。メモリ
・システム107は、実行ユニット101、103、1
05が実行すべき命令を格納する。データ・キャッシュ
109は、固定小数点実行ユニットおよび浮動小数点実
行ユニット103、105が実行する命令に関連するデ
ータを格納する。メモリ・システム107は、従来のよ
うに、メイン・メモリと、キャッシュ・メモリ・サブシ
ステムとを含むことができる。通常、データ・キャッシ
ュ109とキャッシュ・メモリ・サブシステムは、セッ
ト・アソシアティブ構造である。データ・キャッシュ1
09は、メモリ・システム107のキャッシュ・メモリ
・サブシステムから分離した構造(一般にスプリット・
キャッシュという)である場合もあれば、あるいは、メ
モリ・システム107のキャッシュ・メモリ・サブシス
テムの一部(一般に結合キャッシュという)である場合
もある。
ータ処理装置は、1つまたは複数の固定小数点実行ユニ
ット101(1つを図示する)と、1つまたは複数の浮
動小数点実行ユニット103(1つを図示する)と、1
つまたは複数の分岐処理ユニット105(1つを図示す
る)とを有する従来の順次マシンを含んでいる。メモリ
・システム107は、実行ユニット101、103、1
05が実行すべき命令を格納する。データ・キャッシュ
109は、固定小数点実行ユニットおよび浮動小数点実
行ユニット103、105が実行する命令に関連するデ
ータを格納する。メモリ・システム107は、従来のよ
うに、メイン・メモリと、キャッシュ・メモリ・サブシ
ステムとを含むことができる。通常、データ・キャッシ
ュ109とキャッシュ・メモリ・サブシステムは、セッ
ト・アソシアティブ構造である。データ・キャッシュ1
09は、メモリ・システム107のキャッシュ・メモリ
・サブシステムから分離した構造(一般にスプリット・
キャッシュという)である場合もあれば、あるいは、メ
モリ・システム107のキャッシュ・メモリ・サブシス
テムの一部(一般に結合キャッシュという)である場合
もある。
【0015】命令待ち行列111は、メモリ・システム
107から取り出した命令を受け取るように接続されて
いる。命令は、個別にまたは一般にブロックと呼ばれる
グループ単位でメモリ・システム107から取り出すこ
とができる。キャッシュ・システムでは、オペランド用
のキャッシュ・アクセスが高まるので、ブロック単位で
の命令取出しの方が好ましい。現在、1つのブロックは
通常、1クワッドワード(QW−16バイト)または8
ワード(32バイト)であるが、今後のマシンでは、ブ
ロック・サイズが拡大される可能性がある。さらに、命
令がブロック境界上に位置合せされる場合もあれば、位
置合せされない場合もある。
107から取り出した命令を受け取るように接続されて
いる。命令は、個別にまたは一般にブロックと呼ばれる
グループ単位でメモリ・システム107から取り出すこ
とができる。キャッシュ・システムでは、オペランド用
のキャッシュ・アクセスが高まるので、ブロック単位で
の命令取出しの方が好ましい。現在、1つのブロックは
通常、1クワッドワード(QW−16バイト)または8
ワード(32バイト)であるが、今後のマシンでは、ブ
ロック・サイズが拡大される可能性がある。さらに、命
令がブロック境界上に位置合せされる場合もあれば、位
置合せされない場合もある。
【0016】メモリ・システム107から命令待ち行列
111への命令の取出しは、命令取出し制御ユニット1
13によって調整される。命令取出し制御ユニット11
3の機能は、アドレス生成と、命令取出しアドレスの変
換を含むことができる。命令取出し制御ユニット113
の主な機能は、メモリ・システム107から命令待ち行
列111に取り出すべき命令のブロックを識別するアド
レスをI-FETCHアドレス・レジスタ(図示せず)にロー
ドすることである。また、命令取出し制御ユニット11
1は、メモリ・システム107から命令待ち行列111
への命令の予測事前取出しを制御する、事前取出し論理
回路を含む場合もある。通常、このような事前取出し論
理回路は、分岐履歴テーブルと、関連制御論理回路とを
含む。このような事前取出し論理回路の一例の詳細につ
いては、Pomerene他による米国特許第4679141号
に記載されているが、同特許は、本出願人に譲渡され、
参照によりその全体が本発明に組み込まれる。
111への命令の取出しは、命令取出し制御ユニット1
13によって調整される。命令取出し制御ユニット11
3の機能は、アドレス生成と、命令取出しアドレスの変
換を含むことができる。命令取出し制御ユニット113
の主な機能は、メモリ・システム107から命令待ち行
列111に取り出すべき命令のブロックを識別するアド
レスをI-FETCHアドレス・レジスタ(図示せず)にロー
ドすることである。また、命令取出し制御ユニット11
1は、メモリ・システム107から命令待ち行列111
への命令の予測事前取出しを制御する、事前取出し論理
回路を含む場合もある。通常、このような事前取出し論
理回路は、分岐履歴テーブルと、関連制御論理回路とを
含む。このような事前取出し論理回路の一例の詳細につ
いては、Pomerene他による米国特許第4679141号
に記載されているが、同特許は、本出願人に譲渡され、
参照によりその全体が本発明に組み込まれる。
【0017】ディスパッチ・ユニット115は、命令待
ち行列111からの命令をロードし、その命令をデコー
ドし、適切な実行ユニット101、103、105が実
行するためにデコードした命令のスケジューリングを行
う。固定小数点実行ユニットおよび浮動小数点実行ユニ
ット101、103によって実行された命令の結果は、
汎用レジスタ・セット117に供給されて更新される。
分岐処理ユニット105によって実行された分岐命令の
結果は、条件レジスタ119に供給されて更新される。
固定小数点および浮動小数点実行ユニット101、10
3と、分岐処理ユニット105は、従来のように、特殊
目的レジスタ(SPR)セット120にアクセスする。
SPRセット120は、たとえば、リンク・レジスタ、
カウンタ・レジスタ、固定小数点例外レジスタなどを含
むことができる。
ち行列111からの命令をロードし、その命令をデコー
ドし、適切な実行ユニット101、103、105が実
行するためにデコードした命令のスケジューリングを行
う。固定小数点実行ユニットおよび浮動小数点実行ユニ
ット101、103によって実行された命令の結果は、
汎用レジスタ・セット117に供給されて更新される。
分岐処理ユニット105によって実行された分岐命令の
結果は、条件レジスタ119に供給されて更新される。
固定小数点および浮動小数点実行ユニット101、10
3と、分岐処理ユニット105は、従来のように、特殊
目的レジスタ(SPR)セット120にアクセスする。
SPRセット120は、たとえば、リンク・レジスタ、
カウンタ・レジスタ、固定小数点例外レジスタなどを含
むことができる。
【0018】完了/例外ユニット116は、ディスパッ
チから実行まで命令を追跡し、その後、プログラム順に
命令を撤収する。さらに、完了/例外ユニット116
は、命令ストリーム内の次の命令のアドレスを格納し、
NEXT_IADDRバス121を介して命令取出し制御ユニット
113にそのアドレスを出力する、プログラム・カウン
タ(図示せず)を含む。
チから実行まで命令を追跡し、その後、プログラム順に
命令を撤収する。さらに、完了/例外ユニット116
は、命令ストリーム内の次の命令のアドレスを格納し、
NEXT_IADDRバス121を介して命令取出し制御ユニット
113にそのアドレスを出力する、プログラム・カウン
タ(図示せず)を含む。
【0019】従来の順次マシンを操作する論理回路は、
Grohoski, G.F.による"Machine Organization of the I
BM RISC System/6000 Processor"(IBM Journal of Res
earch and Development, vol. 34, no. 1, 1990年
1月, pp. 37-58)に記載されている論理回路に非常に
よく似ている。一般に、命令取出し制御ユニット113
がメモリ・システム107に提示するアドレスは、1組
の連続命令にアクセスし、それを命令待ち行列111に
取り出すために使用する。次のサイクルでは、ディスパ
ッチ・ユニット115は、命令待ち行列111の最下部
からの1つまたは複数の命令をロードし、その命令をデ
コードし、適切な実行ユニット101、103、105
が実行するためにデコードした命令のスケジューリング
を行う。たとえば、ディスパッチ・ユニット115は、
固定小数点ユニット101への固定小数点命令と、浮動
小数点ユニット103への浮動小数点命令と、分岐処理
ユニット105への分岐命令とをスケジューリングする
ことができる。さらに、デコードした命令のいずれも分
岐命令ではない場合、命令待ち行列111内に残ってい
る命令を走査して分岐命令を探すことができ、分岐命令
が検出されると、現行サイクル中にその分岐命令につい
ても、分岐処理ユニット105が実行するためにスケジ
ューリングを行う。
Grohoski, G.F.による"Machine Organization of the I
BM RISC System/6000 Processor"(IBM Journal of Res
earch and Development, vol. 34, no. 1, 1990年
1月, pp. 37-58)に記載されている論理回路に非常に
よく似ている。一般に、命令取出し制御ユニット113
がメモリ・システム107に提示するアドレスは、1組
の連続命令にアクセスし、それを命令待ち行列111に
取り出すために使用する。次のサイクルでは、ディスパ
ッチ・ユニット115は、命令待ち行列111の最下部
からの1つまたは複数の命令をロードし、その命令をデ
コードし、適切な実行ユニット101、103、105
が実行するためにデコードした命令のスケジューリング
を行う。たとえば、ディスパッチ・ユニット115は、
固定小数点ユニット101への固定小数点命令と、浮動
小数点ユニット103への浮動小数点命令と、分岐処理
ユニット105への分岐命令とをスケジューリングする
ことができる。さらに、デコードした命令のいずれも分
岐命令ではない場合、命令待ち行列111内に残ってい
る命令を走査して分岐命令を探すことができ、分岐命令
が検出されると、現行サイクル中にその分岐命令につい
ても、分岐処理ユニット105が実行するためにスケジ
ューリングを行う。
【0020】次のサイクルでは、ディスパッチ・ユニッ
ト115から送られるスケジューリング済み命令が実行
される。これと同じサイクル中に、完了/例外ユニット
116は、完了した命令の結果を再配列し、NEXT_IADDR
バス121を介して命令取出しユニット113に次の命
令のアドレスを提示する。
ト115から送られるスケジューリング済み命令が実行
される。これと同じサイクル中に、完了/例外ユニット
116は、完了した命令の結果を再配列し、NEXT_IADDR
バス121を介して命令取出しユニット113に次の命
令のアドレスを提示する。
【0021】さらに、順次マシンのディスパッチ・ユニ
ット115は、実行ユニット101、103、105が
実行するために変換した命令のスケジューリングを行う
前に、元の命令とは異なるフォーマットを有する1つま
たは複数の命令に所与のデコード済み命令を変換するこ
とができる。たとえば、ディスパッチ・ユニット115
は、所与の複雑な(たとえば、CISCタイプ)命令を
1つまたは複数のそれほど複雑ではない(たとえば、R
ISCタイプ)命令に変換し、次に実行ユニット10
1、103、105が実行するためにその命令のスケジ
ューリングを行うことができる。
ット115は、実行ユニット101、103、105が
実行するために変換した命令のスケジューリングを行う
前に、元の命令とは異なるフォーマットを有する1つま
たは複数の命令に所与のデコード済み命令を変換するこ
とができる。たとえば、ディスパッチ・ユニット115
は、所与の複雑な(たとえば、CISCタイプ)命令を
1つまたは複数のそれほど複雑ではない(たとえば、R
ISCタイプ)命令に変換し、次に実行ユニット10
1、103、105が実行するためにその命令のスケジ
ューリングを行うことができる。
【0022】前述のように、従来の順次マシンは、所望
の命令と関連データを含む命令のブロックがメモリ・シ
ステム107のキャッシュ・サブシステム内に存在し、
しかも固定小数点または浮動小数点あるいはその両方の
実行要素101、103が結果を生成するのを待つ間に
分岐処理ユニット105が数サイクルを浪費しない限
り、1サイクル当たり最高で1回の固定小数点操作と、
1回の浮動小数点操作と、1回の分岐操作とを実行する
ことができる。
の命令と関連データを含む命令のブロックがメモリ・シ
ステム107のキャッシュ・サブシステム内に存在し、
しかも固定小数点または浮動小数点あるいはその両方の
実行要素101、103が結果を生成するのを待つ間に
分岐処理ユニット105が数サイクルを浪費しない限
り、1サイクル当たり最高で1回の固定小数点操作と、
1回の浮動小数点操作と、1回の分岐操作とを実行する
ことができる。
【0023】本発明によれば、実行ユニット101、1
03、105への1つまたは複数の命令のディスパッチ
と同時に、ディスパッチ済み命令がグループ・フォーマ
ッタ123に供給されて分析される。その命令の実行と
同時またはその命令の実行後あるいはその両方の時点
で、グループ・フォーマッタ123は、依存関係と命令
待ち時間について命令を分析し、その分析に応じて長デ
コード済み命令(LDI)のグループを生成し、並列エ
ンジン125のデコード命令バッファ(DIB)に項目
としてそのLDIのグループを保管する。それぞれのグ
ループは、メモリ・システム107に格納された元の命
令ストリームのシーケンスSGを表す。特定のグループ
のそれぞれのLDIは、単一マシン・サイクル中に並列
実行可能な(元の命令ストリームのシーケンスSGの)
サブシーケンスSLの代替コード化を表す。グループ・
フォーマッタ123によって構築されたLDIのグルー
プは、同一命令シーケンスSGの次の実行が並列エンジ
ン125の機能ユニットによって並列実行できるよう
に、並列エンジン125のDIBに保管される。以下に
記載するグループ・フォーマッタと並列エンジンの実施
態様は、スループットを改善するためにパイプライン化
することができる。
03、105への1つまたは複数の命令のディスパッチ
と同時に、ディスパッチ済み命令がグループ・フォーマ
ッタ123に供給されて分析される。その命令の実行と
同時またはその命令の実行後あるいはその両方の時点
で、グループ・フォーマッタ123は、依存関係と命令
待ち時間について命令を分析し、その分析に応じて長デ
コード済み命令(LDI)のグループを生成し、並列エ
ンジン125のデコード命令バッファ(DIB)に項目
としてそのLDIのグループを保管する。それぞれのグ
ループは、メモリ・システム107に格納された元の命
令ストリームのシーケンスSGを表す。特定のグループ
のそれぞれのLDIは、単一マシン・サイクル中に並列
実行可能な(元の命令ストリームのシーケンスSGの)
サブシーケンスSLの代替コード化を表す。グループ・
フォーマッタ123によって構築されたLDIのグルー
プは、同一命令シーケンスSGの次の実行が並列エンジ
ン125の機能ユニットによって並列実行できるよう
に、並列エンジン125のDIBに保管される。以下に
記載するグループ・フォーマッタと並列エンジンの実施
態様は、スループットを改善するためにパイプライン化
することができる。
【0024】グループ・フォーマッタ123がLDIを
グループ単位に配置して、そのグループ内の命令の順不
同実行に対応し、その結果、並列エンジン125の効率
が最大化されることは重要である。さらに、グループ・
フォーマッタ123は、メモリ・システム107内に格
納された命令とDIBに格納された代替コード化との間
に1対1の対応ができるように、これらの命令を変換す
るだけではないことに留意されたい。実際には、グルー
プ・フォーマッタ123は、先行するディスパッチ済み
命令に対する依存関係および命令待ち時間についてディ
スパッチ済み命令を分析し、この分析に応じて代替コー
ド化を導出する。グループ・フォーマッタが実行する分
析は「コンテキスト依存」(すなわち、制御の流れと先
行する命令の動作上の制約に依存する)であるので、グ
ループ・フォーマッタは、メモリ・システム107に格
納された特定の命令に関連する複数の代替コード化を導
出する場合もある。たとえば、メモリ・システム107
に格納された2つの命令シーケンスについて検討する。
第1の命令シーケンスは、メモリ・システム107内の
位置A、B、X、Yにある命令を含んでいる。第2の命
令シーケンスは、メモリ・システム107内の位置A、
C、Yにある命令を含んでいる。この例では、グループ
・フォーマッタ123は、それぞれのシーケンスに関連
する代替コード化を1つずつ生成することができる。し
かし、グループ・フォーマッタ123が生成したこれら
の代替コード化はいずれも命令AおよびYに関連する。
グループ・フォーマッタ123の詳細については、以下
に説明する。
グループ単位に配置して、そのグループ内の命令の順不
同実行に対応し、その結果、並列エンジン125の効率
が最大化されることは重要である。さらに、グループ・
フォーマッタ123は、メモリ・システム107内に格
納された命令とDIBに格納された代替コード化との間
に1対1の対応ができるように、これらの命令を変換す
るだけではないことに留意されたい。実際には、グルー
プ・フォーマッタ123は、先行するディスパッチ済み
命令に対する依存関係および命令待ち時間についてディ
スパッチ済み命令を分析し、この分析に応じて代替コー
ド化を導出する。グループ・フォーマッタが実行する分
析は「コンテキスト依存」(すなわち、制御の流れと先
行する命令の動作上の制約に依存する)であるので、グ
ループ・フォーマッタは、メモリ・システム107に格
納された特定の命令に関連する複数の代替コード化を導
出する場合もある。たとえば、メモリ・システム107
に格納された2つの命令シーケンスについて検討する。
第1の命令シーケンスは、メモリ・システム107内の
位置A、B、X、Yにある命令を含んでいる。第2の命
令シーケンスは、メモリ・システム107内の位置A、
C、Yにある命令を含んでいる。この例では、グループ
・フォーマッタ123は、それぞれのシーケンスに関連
する代替コード化を1つずつ生成することができる。し
かし、グループ・フォーマッタ123が生成したこれら
の代替コード化はいずれも命令AおよびYに関連する。
グループ・フォーマッタ123の詳細については、以下
に説明する。
【0025】図2に示すように、並列エンジン125
は、現行グループ・バッファ(CGB)204と、CG
B204に格納された代替コード化命令を実行できる複
数の実行ユニットとを含む。並列エンジン125の実行
ユニットは、対称にすることができ、したがって、固定
小数点操作、浮動小数点操作、分岐操作のいずれか1つ
を実行することができる。代替実施例では、並列エンジ
ン125の実行ユニットを非対称にすることができる。
たとえば、図2に示すように、並列エンジン125は、
図示のように4つの機能ユニットFU0・・FU3と、
2つの分岐処理ユニットBP0・・BP1とを含む。機
能ユニットは、固定小数点実行ユニットまたは浮動小数
点実行ユニットあるいはその両方にすることができる。
この場合、各機能ユニットは、GPR_バスによる汎用レジ
スタ・セット117への経路と、data_cacheバスによる
データ・キャッシュ109への経路と、CRバスによる条
件レジスタ119への経路と、SPR_バスによるSPRセ
ット120への経路とを有する。さらに、固定小数点操
作を実行する並列エンジン125の実行ユニットは、ア
ドレスを計算して変換し、データ・キャッシュとやりと
りすることができる場合もある。並列エンジン125の
実行ユニットの一例に関する詳細は、本出願人に譲渡さ
れ、参照によりその全体が本発明に組み込まれる、Ebci
ogluおよびGrovesによる米国特許出願第390267号
に記載されている。さらに、CGB204に格納されて
いるLDIによってコード化された命令のフォーマット
が順次マシンの実行ユニットのうちの1つまたは複数と
の互換性を備えている場合、この互換命令は順次マシン
の実行ユニット上で実行することができ、その結果、並
列エンジン125と順次マシンとが実行ユニットを共用
することができる。
は、現行グループ・バッファ(CGB)204と、CG
B204に格納された代替コード化命令を実行できる複
数の実行ユニットとを含む。並列エンジン125の実行
ユニットは、対称にすることができ、したがって、固定
小数点操作、浮動小数点操作、分岐操作のいずれか1つ
を実行することができる。代替実施例では、並列エンジ
ン125の実行ユニットを非対称にすることができる。
たとえば、図2に示すように、並列エンジン125は、
図示のように4つの機能ユニットFU0・・FU3と、
2つの分岐処理ユニットBP0・・BP1とを含む。機
能ユニットは、固定小数点実行ユニットまたは浮動小数
点実行ユニットあるいはその両方にすることができる。
この場合、各機能ユニットは、GPR_バスによる汎用レジ
スタ・セット117への経路と、data_cacheバスによる
データ・キャッシュ109への経路と、CRバスによる条
件レジスタ119への経路と、SPR_バスによるSPRセ
ット120への経路とを有する。さらに、固定小数点操
作を実行する並列エンジン125の実行ユニットは、ア
ドレスを計算して変換し、データ・キャッシュとやりと
りすることができる場合もある。並列エンジン125の
実行ユニットの一例に関する詳細は、本出願人に譲渡さ
れ、参照によりその全体が本発明に組み込まれる、Ebci
ogluおよびGrovesによる米国特許出願第390267号
に記載されている。さらに、CGB204に格納されて
いるLDIによってコード化された命令のフォーマット
が順次マシンの実行ユニットのうちの1つまたは複数と
の互換性を備えている場合、この互換命令は順次マシン
の実行ユニット上で実行することができ、その結果、並
列エンジン125と順次マシンとが実行ユニットを共用
することができる。
【0026】一般に、DIB200は、キャッシュのよ
うに複数項目の配列として配置することができ、それぞ
れの項目は、図3に示すようにグループID(GID)
と、グループ命令データ(GRP)とを含む。グループ
ID(GID)は、その項目によってコード化された命
令のグループ内の最初の命令のアドレスを識別する。グ
ループID(GID)は、そのグループ内の最初の命令
のアドレスの一部であることが好ましい。グループ命令
データ(GRP)は、そのグループ内でコード化された
LDIのセットを表す。さらに、各項目は、たとえば、
DIB200が一杯になっているときに項目の置換また
は上書きあるいはその両方を制御するのに使用できる用
途フィールドU(図示せず)も含むことができる。図5
に示すように、DIB200は、従来のキャッシュのよ
うに、複数項目の配列300として配置することができ
る。たとえば、DIB200は、256項目を含み、そ
れぞれが128バイトを含むことができる。さらに、D
IB200は、フル・アソシアティブ構造、セット・ア
ソシアティブ構造、または直接マップ構造を有すること
ができる。図示の通り、DIB200は、それぞれ12
8項目のセット2つとして編成されたセット・アソシア
ティブである。DIB200の構造および動作の詳細例
については、参照によりその全体が本発明に組み込まれ
る、Stoneによる"HIGH-PERFORMANCE COMPUTER ARCHITEC
TURE"(pg. 29-69, Addison-WesleyPub. Co., 1987
年)に記載されている。
うに複数項目の配列として配置することができ、それぞ
れの項目は、図3に示すようにグループID(GID)
と、グループ命令データ(GRP)とを含む。グループ
ID(GID)は、その項目によってコード化された命
令のグループ内の最初の命令のアドレスを識別する。グ
ループID(GID)は、そのグループ内の最初の命令
のアドレスの一部であることが好ましい。グループ命令
データ(GRP)は、そのグループ内でコード化された
LDIのセットを表す。さらに、各項目は、たとえば、
DIB200が一杯になっているときに項目の置換また
は上書きあるいはその両方を制御するのに使用できる用
途フィールドU(図示せず)も含むことができる。図5
に示すように、DIB200は、従来のキャッシュのよ
うに、複数項目の配列300として配置することができ
る。たとえば、DIB200は、256項目を含み、そ
れぞれが128バイトを含むことができる。さらに、D
IB200は、フル・アソシアティブ構造、セット・ア
ソシアティブ構造、または直接マップ構造を有すること
ができる。図示の通り、DIB200は、それぞれ12
8項目のセット2つとして編成されたセット・アソシア
ティブである。DIB200の構造および動作の詳細例
については、参照によりその全体が本発明に組み込まれ
る、Stoneによる"HIGH-PERFORMANCE COMPUTER ARCHITEC
TURE"(pg. 29-69, Addison-WesleyPub. Co., 1987
年)に記載されている。
【0027】図4および図6に示すように、CGB20
4は、複数項目の配列として配置することができ、それ
ぞれの項目は、前述のように、単一マシン・サイクル中
に実行可能な1組の元の命令の代替コード化を表すLD
Iを1つずつ格納する。たとえば、CGB204は、図
示の通り、4つの項目LDI0、LDI1、LDI2、L
DI3を含むことができる。それぞれのLDIは、単一
マシン・サイクル間の図2の並列エンジン125の実行
ユニット用の制御を記述する命令フィールドを含む。た
とえば、LDI0は、機能ユニットFU0・・FU3を
それぞれ制御する命令フィールドFU00、FU10、F
U20、FU30を含み、分岐処理ユニットBP0および
BP1をそれぞれ制御する命令フィールドBP00、B
P10を含む。この例では、LDI0の命令フィールドは
第1のマシン・サイクル中に並列エンジン125の実行
ユニットを制御し、LDI1の命令フィールドは第1の
サイクルに続く第2のマシン・サイクル中に実行ユニッ
トを制御し、LDI2の命令フィールドは第1および第
2のサイクルに続く第3のマシン・サイクル中に実行ユ
ニットを制御し、LDI3の命令フィールドは第1、第
2、第3のサイクルに続く第4のマシン・サイクル中に
実行ユニットを制御することができる。
4は、複数項目の配列として配置することができ、それ
ぞれの項目は、前述のように、単一マシン・サイクル中
に実行可能な1組の元の命令の代替コード化を表すLD
Iを1つずつ格納する。たとえば、CGB204は、図
示の通り、4つの項目LDI0、LDI1、LDI2、L
DI3を含むことができる。それぞれのLDIは、単一
マシン・サイクル間の図2の並列エンジン125の実行
ユニット用の制御を記述する命令フィールドを含む。た
とえば、LDI0は、機能ユニットFU0・・FU3を
それぞれ制御する命令フィールドFU00、FU10、F
U20、FU30を含み、分岐処理ユニットBP0および
BP1をそれぞれ制御する命令フィールドBP00、B
P10を含む。この例では、LDI0の命令フィールドは
第1のマシン・サイクル中に並列エンジン125の実行
ユニットを制御し、LDI1の命令フィールドは第1の
サイクルに続く第2のマシン・サイクル中に実行ユニッ
トを制御し、LDI2の命令フィールドは第1および第
2のサイクルに続く第3のマシン・サイクル中に実行ユ
ニットを制御し、LDI3の命令フィールドは第1、第
2、第3のサイクルに続く第4のマシン・サイクル中に
実行ユニットを制御することができる。
【0028】LDI0、LDI1、LDI2、LDI3の1
つが分岐処理ユニットの1つBP0またはBP1を制御
することによってそのグループを終了して、そのグルー
プから外へ分岐するようなBP命令フィールドを含むこ
とは重要である。グループからの分岐先は、DIB20
0に格納された別のグループのアドレスである場合もあ
れば、メモリ・システム107内に格納された元のシー
ケンス内の1つの命令のアドレスである場合もある。た
とえば、あるグループが一杯である(すなわち、それぞ
れのLDIに命令を含む)場合、LDI3は、分岐処理
ユニットBP0を制御することによってそのグループを
終了して、グループから外へ分岐するような命令フィー
ルドBP03を含むことができる。別の例では、LDI1
は、分岐処理ユニットBP1を制御することによってそ
のグループを終了して、グループから外へ分岐するよう
な命令フィールドBP11を含むこともできる。分岐処
理ユニットは、グループ外のアドレスをNEXT_IADDRバス
121上に置くことによってそのグループから外へ分岐
することが好ましい。
つが分岐処理ユニットの1つBP0またはBP1を制御
することによってそのグループを終了して、そのグルー
プから外へ分岐するようなBP命令フィールドを含むこ
とは重要である。グループからの分岐先は、DIB20
0に格納された別のグループのアドレスである場合もあ
れば、メモリ・システム107内に格納された元のシー
ケンス内の1つの命令のアドレスである場合もある。た
とえば、あるグループが一杯である(すなわち、それぞ
れのLDIに命令を含む)場合、LDI3は、分岐処理
ユニットBP0を制御することによってそのグループを
終了して、グループから外へ分岐するような命令フィー
ルドBP03を含むことができる。別の例では、LDI1
は、分岐処理ユニットBP1を制御することによってそ
のグループを終了して、グループから外へ分岐するよう
な命令フィールドBP11を含むこともできる。分岐処
理ユニットは、グループ外のアドレスをNEXT_IADDRバス
121上に置くことによってそのグループから外へ分岐
することが好ましい。
【0029】さらに、並列エンジン125の複数の分岐
処理ユニットが所与のマシン・サイクル中に複数の分岐
命令を完了することができるので、それぞれの命令フィ
ールドによってコード化された分岐命令が分岐すると解
決されたことを両方の分岐処理ユニットが判定した場合
に、最も優先順位の高い分岐処理ユニットが分岐すると
解決された分岐命令のターゲット・アドレスをNEXT_IAD
DRバス121上に置くように、分岐処理ユニットの1つ
に他の分岐処理ユニットより高い優先順位が割り当てら
れることが好ましい。たとえば、BP0はBP1より高
い優先順位を割り当てることができる。この場合、BP
1に関連するLDIの命令フィールドは、元のプログラ
ム・シーケンス中、BP0に関連するLDIの命令フィ
ールドに対応する分岐命令より後で発生する分岐命令に
対応する。したがって、所与のLDIでは、それぞれの
命令フィールドによってコード化された分岐命令が分岐
すると解決されたことを両方の分岐処理ユニットBP0
およびBP1が判定した場合、最も優先順位の高い分岐
処理ユニットBP0が分岐すると解決された分岐命令の
ターゲット・アドレスをNEXT_IADDRバス121上に置
き、その結果、元のプログラム・シーケンスの制御の流
れが維持される。
処理ユニットが所与のマシン・サイクル中に複数の分岐
命令を完了することができるので、それぞれの命令フィ
ールドによってコード化された分岐命令が分岐すると解
決されたことを両方の分岐処理ユニットが判定した場合
に、最も優先順位の高い分岐処理ユニットが分岐すると
解決された分岐命令のターゲット・アドレスをNEXT_IAD
DRバス121上に置くように、分岐処理ユニットの1つ
に他の分岐処理ユニットより高い優先順位が割り当てら
れることが好ましい。たとえば、BP0はBP1より高
い優先順位を割り当てることができる。この場合、BP
1に関連するLDIの命令フィールドは、元のプログラ
ム・シーケンス中、BP0に関連するLDIの命令フィ
ールドに対応する分岐命令より後で発生する分岐命令に
対応する。したがって、所与のLDIでは、それぞれの
命令フィールドによってコード化された分岐命令が分岐
すると解決されたことを両方の分岐処理ユニットBP0
およびBP1が判定した場合、最も優先順位の高い分岐
処理ユニットBP0が分岐すると解決された分岐命令の
ターゲット・アドレスをNEXT_IADDRバス121上に置
き、その結果、元のプログラム・シーケンスの制御の流
れが維持される。
【0030】並列エンジン125の機能ユニットは、C
GB204のLDIを順次、実行する。より具体的に
は、第1のマシン・サイクルでは、LDI0の命令フィ
ールドが並列エンジン125の機能ユニットにディスパ
ッチされて実行され、LDI1、LDI2、LDI3の命
令フィールドがLDI0、LDI1、LDI2にそれぞれ
シフトする。この第1のサイクル中、機能ユニットFU
0・・FU3は、LDI0内のそれぞれの命令フィール
ドによってコード化された命令を実行する。さらに、第
1のサイクルでは、分岐処理ユニットBP0およびBP
1は、条件レジスタ119を検査し、それを所望の条件
と比較することにより、LDI0内のそれぞれの命令フ
ィールドによってコード化された分岐命令を実行する。
GB204のLDIを順次、実行する。より具体的に
は、第1のマシン・サイクルでは、LDI0の命令フィ
ールドが並列エンジン125の機能ユニットにディスパ
ッチされて実行され、LDI1、LDI2、LDI3の命
令フィールドがLDI0、LDI1、LDI2にそれぞれ
シフトする。この第1のサイクル中、機能ユニットFU
0・・FU3は、LDI0内のそれぞれの命令フィール
ドによってコード化された命令を実行する。さらに、第
1のサイクルでは、分岐処理ユニットBP0およびBP
1は、条件レジスタ119を検査し、それを所望の条件
と比較することにより、LDI0内のそれぞれの命令フ
ィールドによってコード化された分岐命令を実行する。
【0031】LDI0のそれぞれの命令フィールドによ
ってコード化された分岐命令が分岐すると解決されたこ
とを分岐処理ユニットBP0またはBP1の一方だけが
判定した場合、その分岐処理ユニットは、分岐すると解
決された分岐命令のターゲット・アドレスを検査して、
そのターゲット・アドレスがCGB204内に現在格納
されているグループ内のLDIを指しているか、または
そのグループ外の命令を指しているかを判定する。ター
ゲット・アドレスがそのグループ内のLDIを指してい
るとその分岐処理ユニットが判定した場合、その分岐処
理ユニットは、次のマシン・サイクル中に並列エンジン
125の機能ユニットおよび分岐処理ユニットが実行す
るために特定のLDIがディスパッチされるように、そ
の判定に応じてLDIの命令フィールドをシフトする。
しかし、ターゲット・アドレスがグループ外を指してい
るとその分岐処理ユニットが判定した場合は、その分岐
処理ユニットは、ターゲット・アドレスをNEXT_IADDRバ
ス121上に提示することにより、グループから外へ分
岐する。
ってコード化された分岐命令が分岐すると解決されたこ
とを分岐処理ユニットBP0またはBP1の一方だけが
判定した場合、その分岐処理ユニットは、分岐すると解
決された分岐命令のターゲット・アドレスを検査して、
そのターゲット・アドレスがCGB204内に現在格納
されているグループ内のLDIを指しているか、または
そのグループ外の命令を指しているかを判定する。ター
ゲット・アドレスがそのグループ内のLDIを指してい
るとその分岐処理ユニットが判定した場合、その分岐処
理ユニットは、次のマシン・サイクル中に並列エンジン
125の機能ユニットおよび分岐処理ユニットが実行す
るために特定のLDIがディスパッチされるように、そ
の判定に応じてLDIの命令フィールドをシフトする。
しかし、ターゲット・アドレスがグループ外を指してい
るとその分岐処理ユニットが判定した場合は、その分岐
処理ユニットは、ターゲット・アドレスをNEXT_IADDRバ
ス121上に提示することにより、グループから外へ分
岐する。
【0032】LDI0のそれぞれの命令フィールドによ
ってコード化された分岐命令が分岐すると解決されたこ
とを両方の分岐処理ユニットBP0およびBP1が判定
した場合、最も優先順位の高い分岐処理ユニット、たと
えばBP0は、分岐すると解決された分岐命令のターゲ
ット・アドレスを検査して、そのターゲット・アドレス
がCGB204内に現在格納されているグループ内のL
DIを指しているか、またはそのグループ外の命令を指
しているかを判定する。ターゲット・アドレスがそのグ
ループ内のLDIを指していると最も優先順位の高い分
岐処理ユニットが判定した場合、最も優先順位の高い分
岐処理ユニットは、次のマシン・サイクル中に並列エン
ジン125の機能ユニットおよび分岐処理ユニットが実
行するために特定のLDIがディスパッチされるよう
に、その判定に応じてLDIの命令フィールドをシフト
する。しかし、ターゲット・アドレスがグループ外を指
していると最も優先順位の高い分岐処理ユニットが判定
した場合は、最も優先順位の高い分岐処理ユニットは、
ターゲット・アドレスをNEXT_IADDRバス121上に置く
ことにより、グループから外へ分岐する。
ってコード化された分岐命令が分岐すると解決されたこ
とを両方の分岐処理ユニットBP0およびBP1が判定
した場合、最も優先順位の高い分岐処理ユニット、たと
えばBP0は、分岐すると解決された分岐命令のターゲ
ット・アドレスを検査して、そのターゲット・アドレス
がCGB204内に現在格納されているグループ内のL
DIを指しているか、またはそのグループ外の命令を指
しているかを判定する。ターゲット・アドレスがそのグ
ループ内のLDIを指していると最も優先順位の高い分
岐処理ユニットが判定した場合、最も優先順位の高い分
岐処理ユニットは、次のマシン・サイクル中に並列エン
ジン125の機能ユニットおよび分岐処理ユニットが実
行するために特定のLDIがディスパッチされるよう
に、その判定に応じてLDIの命令フィールドをシフト
する。しかし、ターゲット・アドレスがグループ外を指
していると最も優先順位の高い分岐処理ユニットが判定
した場合は、最も優先順位の高い分岐処理ユニットは、
ターゲット・アドレスをNEXT_IADDRバス121上に置く
ことにより、グループから外へ分岐する。
【0033】最後に、LDI0のそれぞれの命令フィー
ルドによってコード化された分岐命令が分岐しないもの
として解決されたことを両方の分岐処理ユニットBP0
およびBP1が判定した場合は、前述のように現行LD
Iがグループから外への終了分岐を含み、グループ外の
アドレスがNEXT_IADDRバス121上に置かれるまで、並
列エンジン125の動作はそのシーケンス内の次のLD
Iの処理を続行する。
ルドによってコード化された分岐命令が分岐しないもの
として解決されたことを両方の分岐処理ユニットBP0
およびBP1が判定した場合は、前述のように現行LD
Iがグループから外への終了分岐を含み、グループ外の
アドレスがNEXT_IADDRバス121上に置かれるまで、並
列エンジン125の動作はそのシーケンス内の次のLD
Iの処理を続行する。
【0034】DIB200およびCGB204の構造に
ついて説明してきたが、次に図2〜6を参照してDIB
200およびCGB204の動作について説明する。説
明のため、第1のマシン・サイクルの直後に第2のマシ
ン・サイクルが続き、その直後に第3のマシン・サイク
ルが続くという3つのマシン・サイクルについて検討す
る。さらに、第1のマシン・サイクル中に、従来の順次
マシンは1つの命令を完了し、次の命令のアドレスをNE
XT_IADDRバス121上に提示している。前述のように、
DIB200は、並列エンジン125の実行ユニットに
よって同一組の元の命令の次の実行を並列実行できるよ
うに、元の命令を表すデータを格納している。これに対
して、CGB202は、並列エンジン125の実行ユニ
ットによって現在、並列実行されている、単一組または
グループの元の命令を表すデータを格納している。
ついて説明してきたが、次に図2〜6を参照してDIB
200およびCGB204の動作について説明する。説
明のため、第1のマシン・サイクルの直後に第2のマシ
ン・サイクルが続き、その直後に第3のマシン・サイク
ルが続くという3つのマシン・サイクルについて検討す
る。さらに、第1のマシン・サイクル中に、従来の順次
マシンは1つの命令を完了し、次の命令のアドレスをNE
XT_IADDRバス121上に提示している。前述のように、
DIB200は、並列エンジン125の実行ユニットに
よって同一組の元の命令の次の実行を並列実行できるよ
うに、元の命令を表すデータを格納している。これに対
して、CGB202は、並列エンジン125の実行ユニ
ットによって現在、並列実行されている、単一組または
グループの元の命令を表すデータを格納している。
【0035】次の命令がDIB200内にコード化され
た1組または複数組の命令の一部であるかどうかを判定
するため、NID生成器206は、NEXT_IADDRバス12
1上に提示された次の命令のアドレスに応じて次の命令
のID(NID)を生成する。次の命令のID NID
は、DIB200の項目のGID(複数も可)に対応し
ていなければならない。たとえば、各項目のGIDがグ
ループ内の第1の命令のアドレスの一部である場合、次
の命令のID(NID)は、NEXT_IADDRバス121上に
存在するアドレスの対応部分にすることができる。
た1組または複数組の命令の一部であるかどうかを判定
するため、NID生成器206は、NEXT_IADDRバス12
1上に提示された次の命令のアドレスに応じて次の命令
のID(NID)を生成する。次の命令のID NID
は、DIB200の項目のGID(複数も可)に対応し
ていなければならない。たとえば、各項目のGIDがグ
ループ内の第1の命令のアドレスの一部である場合、次
の命令のID(NID)は、NEXT_IADDRバス121上に
存在するアドレスの対応部分にすることができる。
【0036】第1のマシン・サイクル中、制御ユニット
202は、図5に示すようにNID生成器206によっ
て生成されたNIDを入力ラッチ304にロードするよ
うに、DIB制御バス208によりDIB200を制御
する。第1のサイクルでは、DIB200の入力ラッチ
304に格納されたNIDまたは完全NIDの一部がデ
コーダ306に供給されるが、そのデコーダの機能は配
列302の対応行を活動化することである。活動化され
た行(図示の通り、2つの項目)の各項目は、配列30
2から読み出され、入力ラッチ304内に格納されてい
るNIDとともに、ヒット認識検出論理回路308に供
給される。ヒット認識検出論理回路は、配列302から
読み取られた1つの項目のGIDが入力ラッチ304を
介して供給されたNIDと一致するかどうかを判定す
る。この条件が満たされる場合、ヒット認識検出論理回
路308はDIBヒット信号を制御ユニット202に出
力し、一致項目のGRPデータを出力する。この条件が
満たされない場合、ヒット認識検出論理回路308はD
IBミス信号を制御ユニット202に出力する。
202は、図5に示すようにNID生成器206によっ
て生成されたNIDを入力ラッチ304にロードするよ
うに、DIB制御バス208によりDIB200を制御
する。第1のサイクルでは、DIB200の入力ラッチ
304に格納されたNIDまたは完全NIDの一部がデ
コーダ306に供給されるが、そのデコーダの機能は配
列302の対応行を活動化することである。活動化され
た行(図示の通り、2つの項目)の各項目は、配列30
2から読み出され、入力ラッチ304内に格納されてい
るNIDとともに、ヒット認識検出論理回路308に供
給される。ヒット認識検出論理回路は、配列302から
読み取られた1つの項目のGIDが入力ラッチ304を
介して供給されたNIDと一致するかどうかを判定す
る。この条件が満たされる場合、ヒット認識検出論理回
路308はDIBヒット信号を制御ユニット202に出
力し、一致項目のGRPデータを出力する。この条件が
満たされない場合、ヒット認識検出論理回路308はD
IBミス信号を制御ユニット202に出力する。
【0037】第1のサイクルでは、制御ユニット202
がDIB200のヒット認識検出論理回路308からD
IBヒット信号を受け取る(すなわち、命令がDIB2
00に格納されたグループの一部である)場合、制御ユ
ニット202は、DIB200によって出力されたグル
ープ・データをロードするようにCGB204を制御す
る。しかし、制御ユニット202がDIB200のヒッ
ト認識検出論理回路308からDIBミス信号を受け取
る(すなわち、命令がDIB200に格納されたグルー
プの一部ではない)場合、制御ユニット202は、第2
のサイクル中にNEXT_IADDRバス121上に存在するアド
レスによって識別される次の命令を実行するように順次
マシンを制御する。
がDIB200のヒット認識検出論理回路308からD
IBヒット信号を受け取る(すなわち、命令がDIB2
00に格納されたグループの一部である)場合、制御ユ
ニット202は、DIB200によって出力されたグル
ープ・データをロードするようにCGB204を制御す
る。しかし、制御ユニット202がDIB200のヒッ
ト認識検出論理回路308からDIBミス信号を受け取
る(すなわち、命令がDIB200に格納されたグルー
プの一部ではない)場合、制御ユニット202は、第2
のサイクル中にNEXT_IADDRバス121上に存在するアド
レスによって識別される次の命令を実行するように順次
マシンを制御する。
【0038】第2のサイクルでは、並列エンジン125
の機能ユニットと分岐処理ユニットが第1のサイクルで
CGB204にロードされたLDIのグループのLDI
0を実行する。前述のように、並列エンジン125の分
岐処理ユニットは、条件レジスタ119を検査し、それ
を所望の条件と比較することにより、LDI0のそれぞ
れの命令フィールドによってコード化された分岐命令を
実行する。
の機能ユニットと分岐処理ユニットが第1のサイクルで
CGB204にロードされたLDIのグループのLDI
0を実行する。前述のように、並列エンジン125の分
岐処理ユニットは、条件レジスタ119を検査し、それ
を所望の条件と比較することにより、LDI0のそれぞ
れの命令フィールドによってコード化された分岐命令を
実行する。
【0039】LDI0のそれぞれの命令フィールドによ
ってコード化された分岐命令が分岐すると解決されたこ
とを分岐処理ユニットBP0またはBP1の一方だけが
判定した場合、その分岐処理ユニットは、分岐すると解
決された分岐命令のターゲット・アドレスを検査して、
そのターゲット・アドレスがCGB204内に現在格納
されているグループ内のLDIを指しているか、または
そのグループ外の命令を指しているかを判定する。ター
ゲット・アドレスがそのグループ内のLDIを指してい
るとその分岐処理ユニットが判定した場合、その分岐処
理ユニットは、第3のマシン・サイクル中に並列エンジ
ン125の機能ユニットおよび分岐処理ユニットが実行
するために特定のLDIがディスパッチされるように、
その判定に応じてLDIの命令フィールドをシフトす
る。しかし、ターゲット・アドレスがグループ外を指し
ているとその分岐処理ユニットが判定した場合は、その
分岐処理ユニットは、ターゲット・アドレスをNEXT_IAD
DRバス121に提示する。
ってコード化された分岐命令が分岐すると解決されたこ
とを分岐処理ユニットBP0またはBP1の一方だけが
判定した場合、その分岐処理ユニットは、分岐すると解
決された分岐命令のターゲット・アドレスを検査して、
そのターゲット・アドレスがCGB204内に現在格納
されているグループ内のLDIを指しているか、または
そのグループ外の命令を指しているかを判定する。ター
ゲット・アドレスがそのグループ内のLDIを指してい
るとその分岐処理ユニットが判定した場合、その分岐処
理ユニットは、第3のマシン・サイクル中に並列エンジ
ン125の機能ユニットおよび分岐処理ユニットが実行
するために特定のLDIがディスパッチされるように、
その判定に応じてLDIの命令フィールドをシフトす
る。しかし、ターゲット・アドレスがグループ外を指し
ているとその分岐処理ユニットが判定した場合は、その
分岐処理ユニットは、ターゲット・アドレスをNEXT_IAD
DRバス121に提示する。
【0040】LDI0のそれぞれの命令フィールドによ
ってコード化された分岐命令が分岐すると解決されたこ
とを両方の分岐処理ユニットBP0およびBP1が判定
した場合、最も優先順位の高い分岐処理ユニット、たと
えばBP0は、分岐すると解決された分岐命令のターゲ
ット・アドレスを検査して、そのターゲット・アドレス
がCGB204内に現在格納されているグループ内のL
DIを指しているか、またはそのグループ外の命令を指
しているかを判定する。ターゲット・アドレスがそのグ
ループ内のLDIを指していると最も優先順位の高い分
岐処理ユニットが判定した場合、最も優先順位の高い分
岐処理ユニットは、第3のマシン・サイクル中に並列エ
ンジン125の機能ユニットおよび分岐処理ユニットが
実行するために特定のLDIがディスパッチされるよう
に、その判定に応じてLDIの命令フィールドをシフト
する。しかし、ターゲット・アドレスがグループ外を指
していると最も優先順位の高い分岐処理ユニットが判定
した場合は、最も優先順位の高い分岐処理ユニットは、
ターゲット・アドレスをNEXT_IADDRバス121に提示す
る。
ってコード化された分岐命令が分岐すると解決されたこ
とを両方の分岐処理ユニットBP0およびBP1が判定
した場合、最も優先順位の高い分岐処理ユニット、たと
えばBP0は、分岐すると解決された分岐命令のターゲ
ット・アドレスを検査して、そのターゲット・アドレス
がCGB204内に現在格納されているグループ内のL
DIを指しているか、またはそのグループ外の命令を指
しているかを判定する。ターゲット・アドレスがそのグ
ループ内のLDIを指していると最も優先順位の高い分
岐処理ユニットが判定した場合、最も優先順位の高い分
岐処理ユニットは、第3のマシン・サイクル中に並列エ
ンジン125の機能ユニットおよび分岐処理ユニットが
実行するために特定のLDIがディスパッチされるよう
に、その判定に応じてLDIの命令フィールドをシフト
する。しかし、ターゲット・アドレスがグループ外を指
していると最も優先順位の高い分岐処理ユニットが判定
した場合は、最も優先順位の高い分岐処理ユニットは、
ターゲット・アドレスをNEXT_IADDRバス121に提示す
る。
【0041】さらに、第2のサイクルでは、前述のよう
にLDI0がグループから外への終了分岐命令を含む場
合、適切な分岐処理ユニットがグループから出る次の命
令のアドレスをNEXT_IADDRバス121に提示する。
にLDI0がグループから外への終了分岐命令を含む場
合、適切な分岐処理ユニットがグループから出る次の命
令のアドレスをNEXT_IADDRバス121に提示する。
【0042】第2のサイクル中、並列エンジン125の
分岐処理ユニットの1つがNEXT_IADDRバス121にアド
レスを提示すると、NID生成器206はNEXT_IADDRバ
ス121上に提示されたアドレスに応じて次の命令のI
D(NID)を生成し、制御ユニット202は、前述の
ように生成されたNIDを備えたDIB200にアクセ
スして、DIB200で一致項目が見つかるかどうかを
判定する。一致項目が見つかると、制御ユニット202
はDIB200のヒット認識検出論理回路308からD
IBヒット信号を受け取り、制御ユニット202は、第
3のマシン・サイクル中に実行するためにDIB200
によって出力されたグループ・データをロードするよう
にCGB204を制御する。しかし、一致項目が見つか
らない場合は、制御ユニット202はDIB200のヒ
ット認識検出論理回路308からDIBミス信号を受け
取り、制御ユニット202は、第3のマシン・サイクル
中にNEXT_IADDRバス121上に存在するアドレスによっ
て識別される次の命令を実行するように順次マシンを制
御する。
分岐処理ユニットの1つがNEXT_IADDRバス121にアド
レスを提示すると、NID生成器206はNEXT_IADDRバ
ス121上に提示されたアドレスに応じて次の命令のI
D(NID)を生成し、制御ユニット202は、前述の
ように生成されたNIDを備えたDIB200にアクセ
スして、DIB200で一致項目が見つかるかどうかを
判定する。一致項目が見つかると、制御ユニット202
はDIB200のヒット認識検出論理回路308からD
IBヒット信号を受け取り、制御ユニット202は、第
3のマシン・サイクル中に実行するためにDIB200
によって出力されたグループ・データをロードするよう
にCGB204を制御する。しかし、一致項目が見つか
らない場合は、制御ユニット202はDIB200のヒ
ット認識検出論理回路308からDIBミス信号を受け
取り、制御ユニット202は、第3のマシン・サイクル
中にNEXT_IADDRバス121上に存在するアドレスによっ
て識別される次の命令を実行するように順次マシンを制
御する。
【0043】最後に、第2のサイクルでは、LDI0の
それぞれの命令フィールドによってコード化された分岐
命令が分岐しないものとして解決されたことを両方の分
岐処理ユニットBP0およびBP1が判定した場合、並
列エンジン125の動作は第3のマシン・サイクルに移
行し、そのシーケンス内の次のLDIであるLDI1が
第2のマシン・サイクル中のLDI0の処理に関して前
述したように処理される。
それぞれの命令フィールドによってコード化された分岐
命令が分岐しないものとして解決されたことを両方の分
岐処理ユニットBP0およびBP1が判定した場合、並
列エンジン125の動作は第3のマシン・サイクルに移
行し、そのシーケンス内の次のLDIであるLDI1が
第2のマシン・サイクル中のLDI0の処理に関して前
述したように処理される。
【0044】したがって、次のアドレスがCGB204
内のLDIまたはDIB200の項目を指している限
り、並列エンジン125はサイクルごとにLDIを1つ
ずつ撤収する。
内のLDIまたはDIB200の項目を指している限
り、並列エンジン125はサイクルごとにLDIを1つ
ずつ撤収する。
【0045】前述のように、並列エンジン125の分岐
処理ユニットの一方だけがDIB200にアクセスし
て、シーケンス内の次の命令がDIB200に存在する
かどうかを判定する。しかし、この点について本発明は
限定されない。より複雑な実施例のDIB200は、マ
ルチポート式にすることができ、したがって、たとえ
ば、並列エンジン125の両方の分岐処理ユニットBP
0およびBP1がDIB200にアクセスすることがで
きる。この場合、DIB200の構造は、複数の一致項
目がDIBから読み出せるように修正することができ、
最も優先順位の高い分岐処理ユニットに対応する一致項
目が選択され、CGB204にロードされて処理され
る。この手法を使用すると、シーケンス内の次の命令が
DIB200内に存在するかどうかを判定するのに必要
な時間を最小限にすることができる。
処理ユニットの一方だけがDIB200にアクセスし
て、シーケンス内の次の命令がDIB200に存在する
かどうかを判定する。しかし、この点について本発明は
限定されない。より複雑な実施例のDIB200は、マ
ルチポート式にすることができ、したがって、たとえ
ば、並列エンジン125の両方の分岐処理ユニットBP
0およびBP1がDIB200にアクセスすることがで
きる。この場合、DIB200の構造は、複数の一致項
目がDIBから読み出せるように修正することができ、
最も優先順位の高い分岐処理ユニットに対応する一致項
目が選択され、CGB204にロードされて処理され
る。この手法を使用すると、シーケンス内の次の命令が
DIB200内に存在するかどうかを判定するのに必要
な時間を最小限にすることができる。
【0046】順次マシンの実行ユニットによる命令の実
行と同時またはその実行後あるいはその両方の時点で、
グループ・フォーマッタ123は、これらの命令の依存
関係および命令待ち時間を分析し、その分析に応じて長
デコード済み命令(LDI)のグループを生成し、この
ような命令の次の実行を並列エンジン125が並列実行
できるように、並列エンジン125のDIB内の項目と
してそのLDIのグループを保管する。
行と同時またはその実行後あるいはその両方の時点で、
グループ・フォーマッタ123は、これらの命令の依存
関係および命令待ち時間を分析し、その分析に応じて長
デコード済み命令(LDI)のグループを生成し、この
ような命令の次の実行を並列エンジン125が並列実行
できるように、並列エンジン125のDIB内の項目と
してそのLDIのグループを保管する。
【0047】次に、図7〜14に示す例を使用して、元
の命令シーケンスの分析に応じてLDIのグループを生
成する際のグループ・フォーマッタ123の動作につい
て説明する。
の命令シーケンスの分析に応じてLDIのグループを生
成する際のグループ・フォーマッタ123の動作につい
て説明する。
【0048】図7は、メモリ・システム107内に格納
され、順次マシンの実行ユニット101、103、10
5によって実行すべき命令のシーケンスの一例を示すプ
ログラム・グラフである。命令a、b、cの後には、条
件xをテストし、x=0の場合に命令dに分岐し、x=
1の場合に命令kに分岐する分岐命令bcxが続く。命
令kからの経路上には、命令l、m、n、oが存在す
る。命令dからの経路上には、命令e、f、gと、別の
分岐命令bcyが存在する。この分岐命令bcyは、条
件yをテストし、y=0の場合に命令pに分岐し、y=
1の場合に命令hに分岐する。これらの経路はともに命
令i、jに合流する。
され、順次マシンの実行ユニット101、103、10
5によって実行すべき命令のシーケンスの一例を示すプ
ログラム・グラフである。命令a、b、cの後には、条
件xをテストし、x=0の場合に命令dに分岐し、x=
1の場合に命令kに分岐する分岐命令bcxが続く。命
令kからの経路上には、命令l、m、n、oが存在す
る。命令dからの経路上には、命令e、f、gと、別の
分岐命令bcyが存在する。この分岐命令bcyは、条
件yをテストし、y=0の場合に命令pに分岐し、y=
1の場合に命令hに分岐する。これらの経路はともに命
令i、jに合流する。
【0049】図8は、シーケンス内の各命令ごとの依存
関係を示している。命令aとbはこのシーケンス内の他
の命令に依存していない。命令cは命令aとbの両方に
依存しており、命令aとbの実行完了後にのみ実行でき
ることを意味する。他の命令についても同様である。最
後に、分岐命令bcxは命令aの結果に依存し、分岐命
令bcyは命令eの結果に依存する。
関係を示している。命令aとbはこのシーケンス内の他
の命令に依存していない。命令cは命令aとbの両方に
依存しており、命令aとbの実行完了後にのみ実行でき
ることを意味する。他の命令についても同様である。最
後に、分岐命令bcxは命令aの結果に依存し、分岐命
令bcyは命令eの結果に依存する。
【0050】図9から図11は、順次マシンの実行ユニ
ット101、103、105によるこの命令シーケンス
の3通りの実行例を示している。図9に示す第1の例で
は、分岐命令bcxはx=0に対応する経路をたどり、
分岐命令bcyはy=1に対応する経路をたどってい
る。図10に示す第2の例では、分岐命令bcxはもう
一方の経路、すなわち、x=1に対応する経路をたどっ
ている。最後に、図11に示す第3の例では、分岐命令
bcxはx=0に対応する経路をたどり、分岐命令bc
yはy=0に対応する経路をたどっている。
ット101、103、105によるこの命令シーケンス
の3通りの実行例を示している。図9に示す第1の例で
は、分岐命令bcxはx=0に対応する経路をたどり、
分岐命令bcyはy=1に対応する経路をたどってい
る。図10に示す第2の例では、分岐命令bcxはもう
一方の経路、すなわち、x=1に対応する経路をたどっ
ている。最後に、図11に示す第3の例では、分岐命令
bcxはx=0に対応する経路をたどり、分岐命令bc
yはy=0に対応する経路をたどっている。
【0051】図12は、図9の命令シーケンスの分析に
応じてLDIのグループ(LDI0・・LDI3)を生成
する際のグループ・フォーマッタ123の動作を示して
いる。この命令シーケンスは命令aとbから始まる。命
令aと命令bのいずれも他の命令に依存していないの
で、グループ・フォーマッタ123は、命令aとbのそ
れぞれに対応する命令フィールドFU0およびFU1を
生成し、その命令フィールドを図示のようにLDI0に
入れる。命令aとbの後には命令cが続く。命令cは命
令aとbの両方に依存するので、グループ・フォーマッ
タ123は、命令cに対応する命令フィールドFU0を
生成し、その命令フィールドを図示のようにLDI1に
入れる。
応じてLDIのグループ(LDI0・・LDI3)を生成
する際のグループ・フォーマッタ123の動作を示して
いる。この命令シーケンスは命令aとbから始まる。命
令aと命令bのいずれも他の命令に依存していないの
で、グループ・フォーマッタ123は、命令aとbのそ
れぞれに対応する命令フィールドFU0およびFU1を
生成し、その命令フィールドを図示のようにLDI0に
入れる。命令aとbの後には命令cが続く。命令cは命
令aとbの両方に依存するので、グループ・フォーマッ
タ123は、命令cに対応する命令フィールドFU0を
生成し、その命令フィールドを図示のようにLDI1に
入れる。
【0052】次は分岐命令bcxである。分岐命令を
(図示のように)順序正しく置く場合、この分岐命令
は、分岐命令より先行する命令のLDI以降のLDIに
置かなければならない。そのグループのLDIを実行す
る際に、コード化した分岐命令の分岐条件が満足された
と並列エンジン125が判定した場合、分岐より先行す
る命令が完了していなければならないので、この条件が
必要になる。分岐命令を順不同に置く場合、それぞれの
分岐命令ごとに特定の分岐命令より先行する命令に対応
する最後のLDIを示す追加情報を格納しておかなけれ
ばならない。この場合、そのグループのLDIを実行す
る際に、コード化した分岐命令の分岐条件が満足された
と並列エンジン125が判定した場合、分岐命令より先
行する命令が完了するように、並列エンジンは、格納さ
れている情報が示す最新LDIまでLDIを実行しなけ
ればならない。
(図示のように)順序正しく置く場合、この分岐命令
は、分岐命令より先行する命令のLDI以降のLDIに
置かなければならない。そのグループのLDIを実行す
る際に、コード化した分岐命令の分岐条件が満足された
と並列エンジン125が判定した場合、分岐より先行す
る命令が完了していなければならないので、この条件が
必要になる。分岐命令を順不同に置く場合、それぞれの
分岐命令ごとに特定の分岐命令より先行する命令に対応
する最後のLDIを示す追加情報を格納しておかなけれ
ばならない。この場合、そのグループのLDIを実行す
る際に、コード化した分岐命令の分岐条件が満足された
と並列エンジン125が判定した場合、分岐命令より先
行する命令が完了するように、並列エンジンは、格納さ
れている情報が示す最新LDIまでLDIを実行しなけ
ればならない。
【0053】したがって、(図示のように)分岐命令の
順序正しい実行の場合、グループ・フォーマッタ123
は、分岐命令bcxに対応する命令フィールドBP0を
生成し、その命令フィールドをLDI1に入れる。さら
に、グループ・フォーマッタ123によって命令フィー
ルドBP0にコード化される制御の流れは、順次マシン
が判定した分岐命令bcxの結果に対応することが好ま
しい。したがって、分岐命令bcxを検出したときに条
件x=0が満足されていると順次マシンが判定している
ので、図示のようにLDI1のBP0は、x=1であれ
ば、並列エンジン125はそのグループからラベルLK
(すなわち、命令k)に分岐しなければならいことを示
す。
順序正しい実行の場合、グループ・フォーマッタ123
は、分岐命令bcxに対応する命令フィールドBP0を
生成し、その命令フィールドをLDI1に入れる。さら
に、グループ・フォーマッタ123によって命令フィー
ルドBP0にコード化される制御の流れは、順次マシン
が判定した分岐命令bcxの結果に対応することが好ま
しい。したがって、分岐命令bcxを検出したときに条
件x=0が満足されていると順次マシンが判定している
ので、図示のようにLDI1のBP0は、x=1であれ
ば、並列エンジン125はそのグループからラベルLK
(すなわち、命令k)に分岐しなければならいことを示
す。
【0054】このシーケンスでは、分岐命令bcxの後
に命令dが続く。命令dは命令aとcに依存するので、
グループ・フォーマッタ123は、命令dに対応する命
令フィールドを生成し、その命令フィールドをLDI2
に入れる。また、グループ・フォーマッタ123は、命
令dに関連するフラグを設定し、x=0のときにbcx
の条件が満足される場合のみ、並列エンジン125が命
令dを実行することを示すこともできる。命令dの後に
は命令eが続く。命令eは他のいずれの命令にも依存し
ないので、グループ・フォーマッタ123は、命令eに
対応する命令フィールドFU2を生成し、その命令フィ
ールドをLDI0に入れる。また、グループ・フォーマ
ッタ123は、命令eに関連するフラグを設定し、x=
0のときにbcxの条件が満足される場合のみ、並列エ
ンジン125が命令eを実行することを示すこともでき
る。シーケンス中、次は命令fである。命令fは命令e
に依存しているので、グループ・フォーマッタ123
は、命令fに対応する命令フィールドFU1を生成し、
その命令フィールドをLDI1に入れる。また、グルー
プ・フォーマッタ123は、命令fに関連するフラグを
設定し、x=0のときにbcxの条件が満足される場合
のみ、並列エンジン125が命令fを実行することを示
すこともできる。次に命令gが続く。命令gは命令eと
fに依存しているので、グループ・フォーマッタ123
は、命令gに対応する命令フィールドFU1を生成し、
その命令フィールドをLDI2に入れる。また、グルー
プ・フォーマッタ123は、命令gに関連するフラグを
設定し、x=0のときにbcxの条件が満足される場合
のみ、並列エンジン125が命令gを実行することを示
すこともできる。
に命令dが続く。命令dは命令aとcに依存するので、
グループ・フォーマッタ123は、命令dに対応する命
令フィールドを生成し、その命令フィールドをLDI2
に入れる。また、グループ・フォーマッタ123は、命
令dに関連するフラグを設定し、x=0のときにbcx
の条件が満足される場合のみ、並列エンジン125が命
令dを実行することを示すこともできる。命令dの後に
は命令eが続く。命令eは他のいずれの命令にも依存し
ないので、グループ・フォーマッタ123は、命令eに
対応する命令フィールドFU2を生成し、その命令フィ
ールドをLDI0に入れる。また、グループ・フォーマ
ッタ123は、命令eに関連するフラグを設定し、x=
0のときにbcxの条件が満足される場合のみ、並列エ
ンジン125が命令eを実行することを示すこともでき
る。シーケンス中、次は命令fである。命令fは命令e
に依存しているので、グループ・フォーマッタ123
は、命令fに対応する命令フィールドFU1を生成し、
その命令フィールドをLDI1に入れる。また、グルー
プ・フォーマッタ123は、命令fに関連するフラグを
設定し、x=0のときにbcxの条件が満足される場合
のみ、並列エンジン125が命令fを実行することを示
すこともできる。次に命令gが続く。命令gは命令eと
fに依存しているので、グループ・フォーマッタ123
は、命令gに対応する命令フィールドFU1を生成し、
その命令フィールドをLDI2に入れる。また、グルー
プ・フォーマッタ123は、命令gに関連するフラグを
設定し、x=0のときにbcxの条件が満足される場合
のみ、並列エンジン125が命令gを実行することを示
すこともできる。
【0055】命令gの後には分岐命令bcyが続く。分
岐命令bcyは、分岐命令bcyより先行する命令のL
DI以降のLDIに置かなければならないので、グルー
プ・フォーマッタ123は、分岐命令bcyに対応する
命令フィールドBP0を生成し、その命令フィールドを
LDI2に入れる。さらに、グループ・フォーマッタ1
23によって命令フィールドBP0にコード化された制
御の流れは、順次マシンが判定した分岐命令bcyの結
果に対応することが好ましい。したがって、分岐命令b
cyを検出したときに条件y=1が満足されていると順
次マシンが判定したので、図示のようにLDI2の命令
フィールドBP0は、y=0の場合、並列エンジン12
5はそのグループからラベルLP(すなわち、命令p)
に分岐しなければならないことを示す。
岐命令bcyは、分岐命令bcyより先行する命令のL
DI以降のLDIに置かなければならないので、グルー
プ・フォーマッタ123は、分岐命令bcyに対応する
命令フィールドBP0を生成し、その命令フィールドを
LDI2に入れる。さらに、グループ・フォーマッタ1
23によって命令フィールドBP0にコード化された制
御の流れは、順次マシンが判定した分岐命令bcyの結
果に対応することが好ましい。したがって、分岐命令b
cyを検出したときに条件y=1が満足されていると順
次マシンが判定したので、図示のようにLDI2の命令
フィールドBP0は、y=0の場合、並列エンジン12
5はそのグループからラベルLP(すなわち、命令p)
に分岐しなければならないことを示す。
【0056】分岐命令bcyの後には命令hが続く。命
令hは命令bとfに依存しているので、グループ・フォ
ーマッタ123は、命令dに対応する命令フィールドF
U2を生成し、その命令フィールドをLDI2に入れ
る。また、グループ・フォーマッタ123は、命令hに
関連するフラグを設定し、x=0のときにbcxの条件
が満足され、y=1のときにbcyの条件が満足される
場合のみ、並列エンジン125が命令hを実行すること
を示すこともできる。命令hの後には命令iが続く。命
令iは命令dとgに依存しているので、グループ・フォ
ーマッタ123は、命令iに対応する命令フィールドF
U0を生成し、その命令フィールドをLDI3に入れ
る。また、グループ・フォーマッタ123は、命令iに
関連するフラグを設定し、x=0のときにbcxの条件
が満足され、y=1のときにbcyの条件が満足される
場合のみ、並列エンジン125が命令iを実行すること
を示すこともできる。
令hは命令bとfに依存しているので、グループ・フォ
ーマッタ123は、命令dに対応する命令フィールドF
U2を生成し、その命令フィールドをLDI2に入れ
る。また、グループ・フォーマッタ123は、命令hに
関連するフラグを設定し、x=0のときにbcxの条件
が満足され、y=1のときにbcyの条件が満足される
場合のみ、並列エンジン125が命令hを実行すること
を示すこともできる。命令hの後には命令iが続く。命
令iは命令dとgに依存しているので、グループ・フォ
ーマッタ123は、命令iに対応する命令フィールドF
U0を生成し、その命令フィールドをLDI3に入れ
る。また、グループ・フォーマッタ123は、命令iに
関連するフラグを設定し、x=0のときにbcxの条件
が満足され、y=1のときにbcyの条件が満足される
場合のみ、並列エンジン125が命令iを実行すること
を示すこともできる。
【0057】シーケンス中、次は命令jである。命令j
は命令iに依存し、使用可能なLDIがそれ以上存在し
ない(すなわち、命令iはそのグループの最後のLDI
であるLDI3にコード化されている)ので、命令jは
現行グループに入れることができない。この場合、グル
ープ・フォーマッタ123は、x=0のときにbcxの
条件が満足され、y=1のときにbcyの条件が満足さ
れる場合のみ、命令jのアドレスへの分岐(すなわち、
図示のようにラベルLJ)を表す命令フィールドBP0
を生成することによって、そのグループをクローズす
る。
は命令iに依存し、使用可能なLDIがそれ以上存在し
ない(すなわち、命令iはそのグループの最後のLDI
であるLDI3にコード化されている)ので、命令jは
現行グループに入れることができない。この場合、グル
ープ・フォーマッタ123は、x=0のときにbcxの
条件が満足され、y=1のときにbcyの条件が満足さ
れる場合のみ、命令jのアドレスへの分岐(すなわち、
図示のようにラベルLJ)を表す命令フィールドBP0
を生成することによって、そのグループをクローズす
る。
【0058】グループのクローズ後、グループ・フォー
マッタ123は、クローズしたグループをDIBに書き
込み、次に、命令jに対応する命令フィールドFU0を
生成し、その命令フィールドを新しいグループのLDI
0に入れることによって新しいグループを開始する。グ
ループ・フォーマッタ123の動作は、新しいグループ
の命令シーケンスの間、前述のように続行される。
マッタ123は、クローズしたグループをDIBに書き
込み、次に、命令jに対応する命令フィールドFU0を
生成し、その命令フィールドを新しいグループのLDI
0に入れることによって新しいグループを開始する。グ
ループ・フォーマッタ123の動作は、新しいグループ
の命令シーケンスの間、前述のように続行される。
【0059】同様に、図13および図14は、それぞれ
図10および図11の命令シーケンスによりグループ・
フォーマッタ123が実行するグループの形成を示して
いる。
図10および図11の命令シーケンスによりグループ・
フォーマッタ123が実行するグループの形成を示して
いる。
【0060】グループ・フォーマッタ123の動作につ
いて説明してきたが、次に、グループ・フォーマッタ1
23のハードウェア実施例の具体的な例について説明す
る。図15に示すように、グループ・フォーマッタ12
3は、割振り機構501と、命令フィールド・エンコー
ダ503と、タイム・スタンプ・テーブル(TST)5
05と、グループ・バッファ507とを含むことができ
る。
いて説明してきたが、次に、グループ・フォーマッタ1
23のハードウェア実施例の具体的な例について説明す
る。図15に示すように、グループ・フォーマッタ12
3は、割振り機構501と、命令フィールド・エンコー
ダ503と、タイム・スタンプ・テーブル(TST)5
05と、グループ・バッファ507とを含むことができ
る。
【0061】命令フィールド・エンコーダ503は、順
次マシンの実行ユニットによる実行のためにディスパッ
チ・ユニット115がディスパッチした命令を受け取
り、順次マシンの分岐処理ユニット105が生成した分
岐結果(BR)データも受け取る。命令フィールド・エ
ンコーダ503は、それぞれの命令ごとに、その命令に
対応する命令フィールドを少なくとも1つずつ生成す
る。命令フィールド・エンコーダ503によって行われ
るコード化は、その命令を並列エンジン125の機能ユ
ニットおよび分岐処理ユニットと互換性のあるフォーマ
ットにフォーマット化すること、またはその命令を並列
エンジン125の機能ユニットおよび分岐処理ユニット
と互換性のある1つまたは複数の命令フィールドに変換
すること、あるいはその両方を含むことができる。命令
を変換する際の命令フィールド・エンコーダ503の動
作の詳細については、たとえば、本出願人に譲渡され、
本発明と同時に出願され、参照によりその全体が本発明
に組み込まれる、P. Emmaによる"Method and Apparatus
for the Transparent Emulation of an Existing Inst
ruction-Set Architecture by an Arbitrary Underlyin
g Instruction-Set Architecture"という名称の米国特
許出願第421344号に記載されている。さらに、分
岐命令の場合、命令フィールド・エンコーダ503によ
って行われるコード化は、順次マシンの分岐処理ユニッ
ト105から供給されるBRデータが示すように、分岐
命令の結果に対応することが好ましい。
次マシンの実行ユニットによる実行のためにディスパッ
チ・ユニット115がディスパッチした命令を受け取
り、順次マシンの分岐処理ユニット105が生成した分
岐結果(BR)データも受け取る。命令フィールド・エ
ンコーダ503は、それぞれの命令ごとに、その命令に
対応する命令フィールドを少なくとも1つずつ生成す
る。命令フィールド・エンコーダ503によって行われ
るコード化は、その命令を並列エンジン125の機能ユ
ニットおよび分岐処理ユニットと互換性のあるフォーマ
ットにフォーマット化すること、またはその命令を並列
エンジン125の機能ユニットおよび分岐処理ユニット
と互換性のある1つまたは複数の命令フィールドに変換
すること、あるいはその両方を含むことができる。命令
を変換する際の命令フィールド・エンコーダ503の動
作の詳細については、たとえば、本出願人に譲渡され、
本発明と同時に出願され、参照によりその全体が本発明
に組み込まれる、P. Emmaによる"Method and Apparatus
for the Transparent Emulation of an Existing Inst
ruction-Set Architecture by an Arbitrary Underlyin
g Instruction-Set Architecture"という名称の米国特
許出願第421344号に記載されている。さらに、分
岐命令の場合、命令フィールド・エンコーダ503によ
って行われるコード化は、順次マシンの分岐処理ユニッ
ト105から供給されるBRデータが示すように、分岐
命令の結果に対応することが好ましい。
【0062】TST505は、命令が使用または定義す
ることができる、並列エンジン125の各レジスタ資源
に関連するタイミング情報を含む。一般に、割振り機構
501は、TST505に格納されているタイミング情
報と、命令フィールド・エンコーダ503が生成した命
令フィールドとを使用して、LDIの現行グループを構
築する。グループ・バッファ507は、そのグループが
割振り機構501によって構築されているときにLDI
の現行グループを格納するために使用する。
ることができる、並列エンジン125の各レジスタ資源
に関連するタイミング情報を含む。一般に、割振り機構
501は、TST505に格納されているタイミング情
報と、命令フィールド・エンコーダ503が生成した命
令フィールドとを使用して、LDIの現行グループを構
築する。グループ・バッファ507は、そのグループが
割振り機構501によって構築されているときにLDI
の現行グループを格納するために使用する。
【0063】より具体的には、TST505は、並列エ
ンジン125の関連レジスタ資源が使用可能になってい
る(すなわち、そのグループのうち、そのレジスタ資源
を定義する先行命令が完了されることになる)現行グル
ープのLDIを識別するタイム・スタンプIDを格納す
る。たとえば、並列エンジン125は、PowerPC
マイクロプロセッサでは当然のように、76個のレジス
タを含むことができ、その76個のレジスタは、32個
の汎用レジスタと、32個の浮動小数点レジスタと、1
つのリンク(LR)レジスタと、1つのカウント(CT
R)レジスタと、1つの固定小数点例外(XER)レジ
スタと、1つの浮動小数点状況制御(FPSCR)レジ
スタとを含む。この場合、TST505は、それぞれが
関連レジスタが使用可能になっている現行グループのL
DIを識別するIDを1つずつ格納する、76個のセル
を含むことができる。
ンジン125の関連レジスタ資源が使用可能になってい
る(すなわち、そのグループのうち、そのレジスタ資源
を定義する先行命令が完了されることになる)現行グル
ープのLDIを識別するタイム・スタンプIDを格納す
る。たとえば、並列エンジン125は、PowerPC
マイクロプロセッサでは当然のように、76個のレジス
タを含むことができ、その76個のレジスタは、32個
の汎用レジスタと、32個の浮動小数点レジスタと、1
つのリンク(LR)レジスタと、1つのカウント(CT
R)レジスタと、1つの固定小数点例外(XER)レジ
スタと、1つの浮動小数点状況制御(FPSCR)レジ
スタとを含む。この場合、TST505は、それぞれが
関連レジスタが使用可能になっている現行グループのL
DIを識別するIDを1つずつ格納する、76個のセル
を含むことができる。
【0064】割振り機構501は、順次マシンの実行ユ
ニットによる実行のためにディスパッチされる命令ごと
に、図16〜18の流れ図に示すように、TST50
5、命令フィールド・エンコーダ503、グループ・バ
ッファ507とやりとりして、これらの命令と対応する
LDIのグループを形成して格納する。割振り機構50
1の実施態様は、たとえば、シーケンサまたは組合せ論
理回路を含むことができる。ステップ600から開始
し、割振り機構501は、特定の命令が条件付き分岐命
令であるかどうかを検査する。条件付き分岐命令である
場合、割振り機構501は、ステップ602でグループ
・バッファ507内のcurrent_maxフラグに対応するL
DIの使用可能スロットにその命令に対応する命令フィ
ールドを書き込むように命令フィールド・エンコーダ5
03を制御し、その命令が定義した各資源ごとに、その
資源に関連するタイム・スタンプIDを[current_max f
lag +1}に更新し、更新したタイム・スタンプIDをT
ST505に書き込む。current_maxフラグは、条件付
き分岐命令が正しい順序で維持できるように、現行最大
LDIを追跡する。条件付き分岐命令を順不同に置く場
合は、分岐命令ごとに特定の分岐命令より先行する命令
に対応する最後のLDIを示す追加情報を格納しなけれ
ばならない。この場合、そのグループのLDIの実行時
に、コード化された条件付き分岐命令の分岐条件が満足
されていると並列エンジン125が判定した場合、並列
エンジンは、条件付き分岐命令より先行する命令が完了
するように、格納された情報が示す最後のLDIまでL
DIを実行する。ステップ602の後、動作はステップ
600に戻り、現行グループに組み込むためにそのシー
ケンスの次の命令の処理を開始する。
ニットによる実行のためにディスパッチされる命令ごと
に、図16〜18の流れ図に示すように、TST50
5、命令フィールド・エンコーダ503、グループ・バ
ッファ507とやりとりして、これらの命令と対応する
LDIのグループを形成して格納する。割振り機構50
1の実施態様は、たとえば、シーケンサまたは組合せ論
理回路を含むことができる。ステップ600から開始
し、割振り機構501は、特定の命令が条件付き分岐命
令であるかどうかを検査する。条件付き分岐命令である
場合、割振り機構501は、ステップ602でグループ
・バッファ507内のcurrent_maxフラグに対応するL
DIの使用可能スロットにその命令に対応する命令フィ
ールドを書き込むように命令フィールド・エンコーダ5
03を制御し、その命令が定義した各資源ごとに、その
資源に関連するタイム・スタンプIDを[current_max f
lag +1}に更新し、更新したタイム・スタンプIDをT
ST505に書き込む。current_maxフラグは、条件付
き分岐命令が正しい順序で維持できるように、現行最大
LDIを追跡する。条件付き分岐命令を順不同に置く場
合は、分岐命令ごとに特定の分岐命令より先行する命令
に対応する最後のLDIを示す追加情報を格納しなけれ
ばならない。この場合、そのグループのLDIの実行時
に、コード化された条件付き分岐命令の分岐条件が満足
されていると並列エンジン125が判定した場合、並列
エンジンは、条件付き分岐命令より先行する命令が完了
するように、格納された情報が示す最後のLDIまでL
DIを実行する。ステップ602の後、動作はステップ
600に戻り、現行グループに組み込むためにそのシー
ケンスの次の命令の処理を開始する。
【0065】その命令は条件付き分岐命令ではないと割
振り機構がステップ600で判定した場合、動作はステ
ップ601に移行する。ステップ601では、割振り機
構501は、特定の命令が使用する各資源ごとに、その
資源が使用可能になるLDIを識別する、資源に対応す
るタイム・スタンプIDをTST505から取り出す。
ステップ603で割振り機構501は、ステップ601
で取り出したタイム・スタンプIDのうちの最大ID
(例示のため、TSuse(MAX)と示す)を決定す
る。ステップ605で割振り機構501は、特定の命令
が定義した各資源ごとに、その資源が使用可能になるL
DIを識別する、資源に対応するタイム・スタンプID
をTST505から取り出す。ステップ607で割振り
機構501は、ステップ605で取り出したタイム・ス
タンプIDのうちの最大ID(例示のため、TS
def(MAX)と示す)を決定する。
振り機構がステップ600で判定した場合、動作はステ
ップ601に移行する。ステップ601では、割振り機
構501は、特定の命令が使用する各資源ごとに、その
資源が使用可能になるLDIを識別する、資源に対応す
るタイム・スタンプIDをTST505から取り出す。
ステップ603で割振り機構501は、ステップ601
で取り出したタイム・スタンプIDのうちの最大ID
(例示のため、TSuse(MAX)と示す)を決定す
る。ステップ605で割振り機構501は、特定の命令
が定義した各資源ごとに、その資源が使用可能になるL
DIを識別する、資源に対応するタイム・スタンプID
をTST505から取り出す。ステップ607で割振り
機構501は、ステップ605で取り出したタイム・ス
タンプIDのうちの最大ID(例示のため、TS
def(MAX)と示す)を決定する。
【0066】ステップ609では、割振り機構501
は、グループ内の命令によってすでに定義されている資
源を特定の命令が定義する(すなわち、いずれかの資源
を再定義する)場合にその特定の命令がこのような命令
より先行するように、earliest_LDIフラグをTS
use(MAX)とTSdef(MAX)のうちの大きい方に
設定する。ステップ613では、割振り機構501は、
earliest_LDIフラグが3より大きいかどうかを検査する
ことにより、現行グループ内にその命令を入れる余地が
ある(すなわち、グループが一杯である)かどうかを判
定する。そのような場合、そのグループは一杯であり、
以下に説明するように動作は図18に示す諸ステップに
移行して、グループをクローズし、クローズしたグルー
プをグループ・バッファ507から並列エンジン125
のDIBに書き込む。そのグループが一杯ではない場
合、動作はステップ615に移行し、earliest_LDIフラ
グに対応するLDI内のスロットが使用可能であるかど
うかを判定する。スロットが使用可能ではない場合、ス
テップ617でearliest_LDIフラグが増分され、動作は
ステップ613に戻る。しかし、ステップ615でearl
iest_LDIフラグに対応するLDI内のスロットが使用可
能である場合、動作はステップ619〜621に移行す
る。ステップ619では、割振り機構501は、グルー
プ・バッファ507内に格納されたLDIの使用可能ス
ロットにその命令に対応する命令フィールドを書き込む
ように、命令フィールド・エンコーダ503を制御す
る。ステップ621では、割振り機構501は、その命
令が定義した資源ごとに、その資源に関連するタイム・
スタンプIDを[earliest_LDI flag +1}に更新し、更
新したタイム・スタンプIDをTST505に書き込
む。
は、グループ内の命令によってすでに定義されている資
源を特定の命令が定義する(すなわち、いずれかの資源
を再定義する)場合にその特定の命令がこのような命令
より先行するように、earliest_LDIフラグをTS
use(MAX)とTSdef(MAX)のうちの大きい方に
設定する。ステップ613では、割振り機構501は、
earliest_LDIフラグが3より大きいかどうかを検査する
ことにより、現行グループ内にその命令を入れる余地が
ある(すなわち、グループが一杯である)かどうかを判
定する。そのような場合、そのグループは一杯であり、
以下に説明するように動作は図18に示す諸ステップに
移行して、グループをクローズし、クローズしたグルー
プをグループ・バッファ507から並列エンジン125
のDIBに書き込む。そのグループが一杯ではない場
合、動作はステップ615に移行し、earliest_LDIフラ
グに対応するLDI内のスロットが使用可能であるかど
うかを判定する。スロットが使用可能ではない場合、ス
テップ617でearliest_LDIフラグが増分され、動作は
ステップ613に戻る。しかし、ステップ615でearl
iest_LDIフラグに対応するLDI内のスロットが使用可
能である場合、動作はステップ619〜621に移行す
る。ステップ619では、割振り機構501は、グルー
プ・バッファ507内に格納されたLDIの使用可能ス
ロットにその命令に対応する命令フィールドを書き込む
ように、命令フィールド・エンコーダ503を制御す
る。ステップ621では、割振り機構501は、その命
令が定義した資源ごとに、その資源に関連するタイム・
スタンプIDを[earliest_LDI flag +1}に更新し、更
新したタイム・スタンプIDをTST505に書き込
む。
【0067】ステップ622では、割振り機構501
は、current_maxフラグがearliest_LDIフラグより小さ
いかどうかを判定し、そのような場合にはcurrent_max
フラグをearliest_LDIフラグに設定し、その結果、curr
ent_maxフラグを更新する。
は、current_maxフラグがearliest_LDIフラグより小さ
いかどうかを判定し、そのような場合にはcurrent_max
フラグをearliest_LDIフラグに設定し、その結果、curr
ent_maxフラグを更新する。
【0068】好ましい実施例では、特定の命令を停止命
令(すなわち、そのグループが一杯ではなくても、その
グループを自動的にクローズさせる命令)と指定するこ
とができる。たとえば、レジスタ分岐命令は停止命令の
1つと指定することができる。この場合、ステップ62
3で割振り機構501は、その命令が停止命令であるか
どうかを検査する。その命令が停止命令である場合、動
作は以下に説明するように図18に示す諸ステップに移
行して、そのグループをクローズし、クローズしたグル
ープをグループ・バッファ505から並列エンジン12
5のDIBに書き込む。しかし、ステップ623でその
命令が停止命令ではないと割振り機構が判定した場合、
割振り機構501の動作はステップ601に戻り、シー
ケンス内の次の命令を処理する。
令(すなわち、そのグループが一杯ではなくても、その
グループを自動的にクローズさせる命令)と指定するこ
とができる。たとえば、レジスタ分岐命令は停止命令の
1つと指定することができる。この場合、ステップ62
3で割振り機構501は、その命令が停止命令であるか
どうかを検査する。その命令が停止命令である場合、動
作は以下に説明するように図18に示す諸ステップに移
行して、そのグループをクローズし、クローズしたグル
ープをグループ・バッファ505から並列エンジン12
5のDIBに書き込む。しかし、ステップ623でその
命令が停止命令ではないと割振り機構が判定した場合、
割振り機構501の動作はステップ601に戻り、シー
ケンス内の次の命令を処理する。
【0069】グループをクローズし、クローズしたグル
ープをグループ・バッファ507から並列エンジン12
5のDIBに書き込む際の割振り機構501の動作を図
18に詳しく示す。ステップ650では、割振り機構5
01は、レジスタ分岐命令のためにそのグループが停止
されるかどうかを検査することから開始する。これは、
ステップ623で設定したフラグを検査することにより
実施することができる。その命令がレジスタ分岐命令で
あるとステップ650で割振り機構501が判定した場
合、ステップ652で割振り機構は、グループ・バッフ
ァ507内のcurrent_maxフラグに対応するLDIの使
用可能スロットにその命令に対応する命令フィールドを
書き込むように、命令フィールド・エンコーダ503を
制御し、その命令が定義する各資源ごとに、その資源に
関連するタイム・スタンプIDを[current_max flag +
1}に更新し、更新したタイム・スタンプIDをTST
505に書き込む。
ープをグループ・バッファ507から並列エンジン12
5のDIBに書き込む際の割振り機構501の動作を図
18に詳しく示す。ステップ650では、割振り機構5
01は、レジスタ分岐命令のためにそのグループが停止
されるかどうかを検査することから開始する。これは、
ステップ623で設定したフラグを検査することにより
実施することができる。その命令がレジスタ分岐命令で
あるとステップ650で割振り機構501が判定した場
合、ステップ652で割振り機構は、グループ・バッフ
ァ507内のcurrent_maxフラグに対応するLDIの使
用可能スロットにその命令に対応する命令フィールドを
書き込むように、命令フィールド・エンコーダ503を
制御し、その命令が定義する各資源ごとに、その資源に
関連するタイム・スタンプIDを[current_max flag +
1}に更新し、更新したタイム・スタンプIDをTST
505に書き込む。
【0070】その命令が分岐命令ではないとステップ6
50で割振り機構501が判定した場合、そのグループ
は一杯でなければならない。したがって、ステップ65
1で割振り機構501は、current_maxフラグに対応す
るLDIのBP0スロットが使用可能であるかどうかを
判定する。使用可能である場合、ステップ653で割振
り機構501は、終了分岐命令を表す命令フィールドを
グループ・バッファ507の使用可能BP0スロットに
入れ、動作はステップ655に移行する。終了分岐命令
のターゲット・アドレスは、そのシーケンス内で次に実
行すべき命令のアドレスを指し示す。
50で割振り機構501が判定した場合、そのグループ
は一杯でなければならない。したがって、ステップ65
1で割振り機構501は、current_maxフラグに対応す
るLDIのBP0スロットが使用可能であるかどうかを
判定する。使用可能である場合、ステップ653で割振
り機構501は、終了分岐命令を表す命令フィールドを
グループ・バッファ507の使用可能BP0スロットに
入れ、動作はステップ655に移行する。終了分岐命令
のターゲット・アドレスは、そのシーケンス内で次に実
行すべき命令のアドレスを指し示す。
【0071】しかし、ステップ651でBP0スロット
が使用不能である場合、動作はステップ657に移行
し、そこで割振り機構501が終了分岐命令を表す命令
フィールドをグループ・バッファ507内のcurrent_ma
xフラグに対応するLDIのBP1スロットに入れ、動
作はステップ655に移行する。終了分岐命令のターゲ
ット・アドレスは、そのシーケンス内で次に実行すべき
命令のアドレスを指し示す。
が使用不能である場合、動作はステップ657に移行
し、そこで割振り機構501が終了分岐命令を表す命令
フィールドをグループ・バッファ507内のcurrent_ma
xフラグに対応するLDIのBP1スロットに入れ、動
作はステップ655に移行する。終了分岐命令のターゲ
ット・アドレスは、そのシーケンス内で次に実行すべき
命令のアドレスを指し示す。
【0072】ステップ655では、割振り機構501は
グループ・バッファ507を並列エンジン125のDI
Bに書き込む。ステップ659では、割振り機構501
はグループ・バッファ507をクリアする。最後に、ス
テップ661では、割振り機構501はearliest_LDIフ
ラグとTST505をリセットしてから、図16および
図17に関して前述した諸ステップに戻り、新しいグル
ープに組み込むためにそのシーケンス内の次の命令の処
理を開始する。
グループ・バッファ507を並列エンジン125のDI
Bに書き込む。ステップ659では、割振り機構501
はグループ・バッファ507をクリアする。最後に、ス
テップ661では、割振り機構501はearliest_LDIフ
ラグとTST505をリセットしてから、図16および
図17に関して前述した諸ステップに戻り、新しいグル
ープに組み込むためにそのシーケンス内の次の命令の処
理を開始する。
【0073】前述のグループ・フォーマッタ123の動
作は、単純な例で最もよく示される。以下の命令シーケ
ンスについて検討する。 1. a r1 = r2,r3 (R1 = R2 + R3) 2. a r4 = r1,r5 (R4 = R1 + R5) 3. mul r3 = r1,r4 (R3 = R1 * R4) 4. a r4 = r2,r5 (R4 = R2 + R5) 5. inc r4 (R4 = R4 + 1) 6. mul r2 = r3,r4 (R2 = R3 * R4) 図19および図20は、この命令シーケンスを図16〜
18に関して前述したグループにフォーマット化するよ
うにグループ・フォーマッタ123が動作するときのT
ST505とグループ・バッファ507の状態を示して
いる。
作は、単純な例で最もよく示される。以下の命令シーケ
ンスについて検討する。 1. a r1 = r2,r3 (R1 = R2 + R3) 2. a r4 = r1,r5 (R4 = R1 + R5) 3. mul r3 = r1,r4 (R3 = R1 * R4) 4. a r4 = r2,r5 (R4 = R2 + R5) 5. inc r4 (R4 = R4 + 1) 6. mul r2 = r3,r4 (R2 = R3 * R4) 図19および図20は、この命令シーケンスを図16〜
18に関して前述したグループにフォーマット化するよ
うにグループ・フォーマッタ123が動作するときのT
ST505とグループ・バッファ507の状態を示して
いる。
【0074】グループの先頭では、第1の命令を処理す
る前にTST505が各セルにゼロが入るように初期設
定される。第1の命令の場合、命令が使用する資源r2
およびr3には対応するタイム・スタンプIDとして0
が付いているので、割振り機構はステップ603でTS
use(MAX)を0として定義する。さらに、その命令
が定義する資源r1には対応するタイム・スタンプID
として0が付いているので、割振り機構はステップ60
7でTSdef(MAX)を0として定義する。ステップ
609で割振り機構501はearliest_LDIフラグを0に
設定し、流れはステップ613に移行する。ステップ6
13では、その時点で0に設定されているearliest_LDI
フラグが3以下なので、割振り機構501はステップ6
15で、earliest_LDIフラグに対応するLDI、この場
合はLDI0でスロットFU0・・FU3が使用可能に
なっているかどうかを検査する。LDI0でスロットF
U0が使用可能になっているので、動作はステップ61
9に移行し、そこで割振り機構501は、第1の命令に
対応する命令フィールドを図20に示すようにLDI0
のFU0スロットに入れるように命令フィールド・エン
コーダ503を制御する。次に、ステップ621で割振
り機構501は、第1の命令が定義する資源、この場合
はr1に対応するタイム・スタンプIDをearliest_LDI
フラグの増分(すなわち、earliest_LDI + 1)に更新す
る。この場合、図19に示すようにこの増分は1にな
る。ステップ623では、第1の命令が停止命令ではな
いので、グループ・フォーマッタ123の動作はシーケ
ンス内の第2の命令に移行する。
る前にTST505が各セルにゼロが入るように初期設
定される。第1の命令の場合、命令が使用する資源r2
およびr3には対応するタイム・スタンプIDとして0
が付いているので、割振り機構はステップ603でTS
use(MAX)を0として定義する。さらに、その命令
が定義する資源r1には対応するタイム・スタンプID
として0が付いているので、割振り機構はステップ60
7でTSdef(MAX)を0として定義する。ステップ
609で割振り機構501はearliest_LDIフラグを0に
設定し、流れはステップ613に移行する。ステップ6
13では、その時点で0に設定されているearliest_LDI
フラグが3以下なので、割振り機構501はステップ6
15で、earliest_LDIフラグに対応するLDI、この場
合はLDI0でスロットFU0・・FU3が使用可能に
なっているかどうかを検査する。LDI0でスロットF
U0が使用可能になっているので、動作はステップ61
9に移行し、そこで割振り機構501は、第1の命令に
対応する命令フィールドを図20に示すようにLDI0
のFU0スロットに入れるように命令フィールド・エン
コーダ503を制御する。次に、ステップ621で割振
り機構501は、第1の命令が定義する資源、この場合
はr1に対応するタイム・スタンプIDをearliest_LDI
フラグの増分(すなわち、earliest_LDI + 1)に更新す
る。この場合、図19に示すようにこの増分は1にな
る。ステップ623では、第1の命令が停止命令ではな
いので、グループ・フォーマッタ123の動作はシーケ
ンス内の第2の命令に移行する。
【0075】第2の命令の場合、命令が使用する資源r
1およびr5には対応するタイム・スタンプIDとして
1と0がそれぞれ付いているので、割振り機構はステッ
プ603でTSuse(MAX)を1として定義する。さ
らに、その命令が定義する資源r4には対応するタイム
・スタンプIDとして0が付いているので、割振り機構
はステップ607でTSdef(MAX)を0として定義
する。ステップ609で割振り機構501はearliest_L
DIフラグをTSuse(MAX)、すなわち1に設定し、
流れはステップ613に移行する。ステップ613で
は、その時点で1に設定されているearliest_LDIフラグ
が3以下なので、割振り機構501はステップ615
で、earliest_LDIフラグに対応するLDI、この場合は
LDI1でスロットFU0・・FU3が使用可能になっ
ているかどうかを検査する。LDI1でスロットFU0
が使用可能になっているので、動作はステップ619に
移行し、そこで割振り機構501は、第2の命令に対応
する命令フィールドを図20に示すようにLDI1のF
U0スロットに入れるように命令フィールド・エンコー
ダ503を制御する。次に、ステップ621で割振り機
構501は、第2の命令が定義する資源、この場合はr
4に対応するタイム・スタンプIDをearliest_LDIフラ
グの増分(すなわち、earliest_LDI + 1)に更新する。
この場合、図19に示すようにこの増分は2になる。ス
テップ623では、第2の命令が停止命令ではないの
で、グループ・フォーマッタ123の動作はシーケンス
内の第3の命令に移行する。
1およびr5には対応するタイム・スタンプIDとして
1と0がそれぞれ付いているので、割振り機構はステッ
プ603でTSuse(MAX)を1として定義する。さ
らに、その命令が定義する資源r4には対応するタイム
・スタンプIDとして0が付いているので、割振り機構
はステップ607でTSdef(MAX)を0として定義
する。ステップ609で割振り機構501はearliest_L
DIフラグをTSuse(MAX)、すなわち1に設定し、
流れはステップ613に移行する。ステップ613で
は、その時点で1に設定されているearliest_LDIフラグ
が3以下なので、割振り機構501はステップ615
で、earliest_LDIフラグに対応するLDI、この場合は
LDI1でスロットFU0・・FU3が使用可能になっ
ているかどうかを検査する。LDI1でスロットFU0
が使用可能になっているので、動作はステップ619に
移行し、そこで割振り機構501は、第2の命令に対応
する命令フィールドを図20に示すようにLDI1のF
U0スロットに入れるように命令フィールド・エンコー
ダ503を制御する。次に、ステップ621で割振り機
構501は、第2の命令が定義する資源、この場合はr
4に対応するタイム・スタンプIDをearliest_LDIフラ
グの増分(すなわち、earliest_LDI + 1)に更新する。
この場合、図19に示すようにこの増分は2になる。ス
テップ623では、第2の命令が停止命令ではないの
で、グループ・フォーマッタ123の動作はシーケンス
内の第3の命令に移行する。
【0076】第3の命令の場合、命令が使用する資源r
1およびr4には対応するタイム・スタンプIDとして
1と2がそれぞれ付いているので、割振り機構はステッ
プ603でTSuse(MAX)を2として定義する。さ
らに、その命令が定義する資源r3には対応するタイム
・スタンプIDとして0が付いているので、割振り機構
はステップ607でTSdef(MAX)を0として定義
する。ステップ609で割振り機構501はearliest_L
DIフラグをTSuse(MAX)、すなわち2に設定し、
流れはステップ613に移行する。ステップ613で
は、その時点で2に設定されているearliest_LDIフラグ
が3以下なので、割振り機構501はステップ615
で、earliest_LDIフラグに対応するLDI、この場合は
LDI2でスロットFU0・・FU3が使用可能になっ
ているかどうかを検査する。LDI2でスロットFU0
が使用可能になっているので、動作はステップ619に
移行し、そこで割振り機構501は、第3の命令に対応
する命令フィールドを図20に示すようにLDI2のF
U0スロットに入れるように命令フィールド・エンコー
ダ503を制御する。次に、ステップ621で割振り機
構501は、第3の命令が定義する資源、この場合はr
3に対応するタイム・スタンプIDをearliest_LDIフラ
グの増分(すなわち、earliest_LDI + 1)に更新する。
この場合、図19に示すようにこの増分は3になる。ス
テップ623では、第3の命令が停止命令ではないの
で、グループ・フォーマッタ123の動作はシーケンス
内の第4の命令に移行する。
1およびr4には対応するタイム・スタンプIDとして
1と2がそれぞれ付いているので、割振り機構はステッ
プ603でTSuse(MAX)を2として定義する。さ
らに、その命令が定義する資源r3には対応するタイム
・スタンプIDとして0が付いているので、割振り機構
はステップ607でTSdef(MAX)を0として定義
する。ステップ609で割振り機構501はearliest_L
DIフラグをTSuse(MAX)、すなわち2に設定し、
流れはステップ613に移行する。ステップ613で
は、その時点で2に設定されているearliest_LDIフラグ
が3以下なので、割振り機構501はステップ615
で、earliest_LDIフラグに対応するLDI、この場合は
LDI2でスロットFU0・・FU3が使用可能になっ
ているかどうかを検査する。LDI2でスロットFU0
が使用可能になっているので、動作はステップ619に
移行し、そこで割振り機構501は、第3の命令に対応
する命令フィールドを図20に示すようにLDI2のF
U0スロットに入れるように命令フィールド・エンコー
ダ503を制御する。次に、ステップ621で割振り機
構501は、第3の命令が定義する資源、この場合はr
3に対応するタイム・スタンプIDをearliest_LDIフラ
グの増分(すなわち、earliest_LDI + 1)に更新する。
この場合、図19に示すようにこの増分は3になる。ス
テップ623では、第3の命令が停止命令ではないの
で、グループ・フォーマッタ123の動作はシーケンス
内の第4の命令に移行する。
【0077】第4の命令の場合、命令が使用する資源r
2およびr5には対応するタイム・スタンプIDとして
0が付いているので、割振り機構はステップ603でT
Sus e(MAX)を0として定義する。さらに、その命
令が定義する資源r4には対応するタイム・スタンプI
Dとして2が付いているので、割振り機構はステップ6
07でTSdef(MAX)を2として定義する。ステッ
プ609で割振り機構501はearliest_LDIフラグを2
に設定し、流れはステップ613に移行する。ステップ
613では、その時点で2に設定されているearliest_L
DIフラグが3以下なので、割振り機構501はステップ
615で、earliest_LDIフラグに対応するLDI、この
場合はLDI2でスロットFU0・・FU3が使用可能
になっているかどうかを検査する。LDI2でスロット
FU1が使用可能になっているので、動作はステップ6
19に移行し、そこで割振り機構501は、第4の命令
に対応する命令フィールドを図20に示すようにLDI
2のFU1スロットに入れるように命令フィールド・エ
ンコーダ503を制御する。次に、ステップ621で割
振り機構501は、第4の命令が定義する資源、この場
合はr4に対応するタイム・スタンプIDをearliest_L
DIフラグの増分(すなわち、earliest_LDI +1)に更新
する。この場合、図19に示すようにこの増分は3にな
る。ステップ623では、第4の命令が停止命令ではな
いので、グループ・フォーマッタ123の動作はシーケ
ンス内の第5の命令に移行する。
2およびr5には対応するタイム・スタンプIDとして
0が付いているので、割振り機構はステップ603でT
Sus e(MAX)を0として定義する。さらに、その命
令が定義する資源r4には対応するタイム・スタンプI
Dとして2が付いているので、割振り機構はステップ6
07でTSdef(MAX)を2として定義する。ステッ
プ609で割振り機構501はearliest_LDIフラグを2
に設定し、流れはステップ613に移行する。ステップ
613では、その時点で2に設定されているearliest_L
DIフラグが3以下なので、割振り機構501はステップ
615で、earliest_LDIフラグに対応するLDI、この
場合はLDI2でスロットFU0・・FU3が使用可能
になっているかどうかを検査する。LDI2でスロット
FU1が使用可能になっているので、動作はステップ6
19に移行し、そこで割振り機構501は、第4の命令
に対応する命令フィールドを図20に示すようにLDI
2のFU1スロットに入れるように命令フィールド・エ
ンコーダ503を制御する。次に、ステップ621で割
振り機構501は、第4の命令が定義する資源、この場
合はr4に対応するタイム・スタンプIDをearliest_L
DIフラグの増分(すなわち、earliest_LDI +1)に更新
する。この場合、図19に示すようにこの増分は3にな
る。ステップ623では、第4の命令が停止命令ではな
いので、グループ・フォーマッタ123の動作はシーケ
ンス内の第5の命令に移行する。
【0078】第5の命令の場合、命令が使用する資源r
4には対応するタイム・スタンプIDとして3が付いて
いるので、割振り機構はステップ603でTSuse(M
AX)を3として定義する。さらに、その命令が定義す
る資源r4には対応するタイム・スタンプIDとして3
が付いているので、割振り機構はステップ607でTS
def(MAX)を3として定義する。この場合、割振り
機構501はearliest_LDIフラグを3に設定し、流れは
ステップ613に移行する。ステップ613では、その
時点で3に設定されているearliest_LDIフラグが3以下
なので、割振り機構501はステップ615で、earlie
st_LDIフラグに対応するLDI、この場合はLDI3で
スロットFU0・・FU3が使用可能になっているかど
うかを検査する。LDI3でスロットFU0が使用可能
になっているので、動作はステップ619に移行し、そ
こで割振り機構501は、第5の命令に対応する命令フ
ィールドを図20に示すようにLDI3のFU0スロッ
トに入れるように命令フィールド・エンコーダ503を
制御する。次に、ステップ621で割振り機構501
は、第5の命令が定義する資源、この場合はr4に対応
するタイム・スタンプIDをearliest_LDIフラグの増分
(すなわち、earliest_LDI + 1)に更新する。この場
合、図19に示すようにこの増分は4になる。ステップ
623では、第5の命令が停止命令ではないので、グル
ープ・フォーマッタ123の動作はシーケンス内の第6
の命令に移行する。
4には対応するタイム・スタンプIDとして3が付いて
いるので、割振り機構はステップ603でTSuse(M
AX)を3として定義する。さらに、その命令が定義す
る資源r4には対応するタイム・スタンプIDとして3
が付いているので、割振り機構はステップ607でTS
def(MAX)を3として定義する。この場合、割振り
機構501はearliest_LDIフラグを3に設定し、流れは
ステップ613に移行する。ステップ613では、その
時点で3に設定されているearliest_LDIフラグが3以下
なので、割振り機構501はステップ615で、earlie
st_LDIフラグに対応するLDI、この場合はLDI3で
スロットFU0・・FU3が使用可能になっているかど
うかを検査する。LDI3でスロットFU0が使用可能
になっているので、動作はステップ619に移行し、そ
こで割振り機構501は、第5の命令に対応する命令フ
ィールドを図20に示すようにLDI3のFU0スロッ
トに入れるように命令フィールド・エンコーダ503を
制御する。次に、ステップ621で割振り機構501
は、第5の命令が定義する資源、この場合はr4に対応
するタイム・スタンプIDをearliest_LDIフラグの増分
(すなわち、earliest_LDI + 1)に更新する。この場
合、図19に示すようにこの増分は4になる。ステップ
623では、第5の命令が停止命令ではないので、グル
ープ・フォーマッタ123の動作はシーケンス内の第6
の命令に移行する。
【0079】第6の命令の場合、命令が使用する資源r
3およびr4には対応するタイム・スタンプIDとして
3と4がそれぞれ付いているので、割振り機構はステッ
プ603でTSuse(MAX)を4として定義する。さ
らに、その命令が定義する資源r2には対応するタイム
・スタンプIDとして0が付いているので、割振り機構
はステップ607でTSdef(MAX)を0として定義
する。ステップ609では、割振り機構501はearlie
st_LDIフラグをTSuse(MAX)、すなわち4に設定
し、流れはステップ613に移行する。ステップ613
では、その時点で4に設定されているearliest_LDIフラ
グが3より大きいので、割振り機構501は図18の諸
ステップに分岐して、そのグループをクローズし、グル
ープ・バッファ507に格納されているクローズ済みグ
ループを並列エンジン125のDIBに書き込む。次
に、割振り機構501の動作は、第1〜第5の命令に関
して前述したように第6およびそれ以降の命令を新しい
グループにフォーマット化するステップに移行する。
3およびr4には対応するタイム・スタンプIDとして
3と4がそれぞれ付いているので、割振り機構はステッ
プ603でTSuse(MAX)を4として定義する。さ
らに、その命令が定義する資源r2には対応するタイム
・スタンプIDとして0が付いているので、割振り機構
はステップ607でTSdef(MAX)を0として定義
する。ステップ609では、割振り機構501はearlie
st_LDIフラグをTSuse(MAX)、すなわち4に設定
し、流れはステップ613に移行する。ステップ613
では、その時点で4に設定されているearliest_LDIフラ
グが3より大きいので、割振り機構501は図18の諸
ステップに分岐して、そのグループをクローズし、グル
ープ・バッファ507に格納されているクローズ済みグ
ループを並列エンジン125のDIBに書き込む。次
に、割振り機構501の動作は、第1〜第5の命令に関
して前述したように第6およびそれ以降の命令を新しい
グループにフォーマット化するステップに移行する。
【0080】ステップ609で資源再定義条件を検出す
ると、割振り機構501は前述のように、特定の命令が
使用する資源がグループ内の先行LDIで使用可能にな
る可能性があっても、そのグループで共通資源を定義す
る1つまたは複数の直前命令に続くLDIに命令を書き
込む。これは、最も効率のよい資源の使い方ではない。
代替実施例のグループ・フォーマッタ123は、本出願
人に譲渡され、参照により本発明に組み込まれる、J. C
ocke他による米国特許第4992938号に記載されて
いる従来のレジスタ・リネーム技法を使用することがで
きる。レジスタ・リネームは、並列エンジン125の資
源利用の効率化に対応するものである。
ると、割振り機構501は前述のように、特定の命令が
使用する資源がグループ内の先行LDIで使用可能にな
る可能性があっても、そのグループで共通資源を定義す
る1つまたは複数の直前命令に続くLDIに命令を書き
込む。これは、最も効率のよい資源の使い方ではない。
代替実施例のグループ・フォーマッタ123は、本出願
人に譲渡され、参照により本発明に組み込まれる、J. C
ocke他による米国特許第4992938号に記載されて
いる従来のレジスタ・リネーム技法を使用することがで
きる。レジスタ・リネームは、並列エンジン125の資
源利用の効率化に対応するものである。
【0081】より具体的には、図21および図22に示
すように、図16〜18に関して前述した割振り機構5
01の動作は、レジスタ・リネーム技法を使用するよう
に変更することができる。この場合、ステップ700で
割振り機構501は、特定の命令が条件付き分岐命令で
あるかどうかを検査することから開始する。そのような
命令である場合、ステップ702で割振り機構501
は、その命令に対応する命令フィールドをグループ・バ
ッファ507内のcurrent_maxフラグに対応するLDI
の使用可能スロットに書き込むように命令フィールド・
エンコーダ503を制御し、その命令が定義する各資源
ごとに、その資源に関連するタイム・スタンプIDを[c
urrent_max flag + 1}に更新し、更新したタイム・ス
タンプIDをTST505に書き込む。前述のように、
current_maxフラグは、条件付き分岐命令が順序正しく
維持されるように、現行最大LDIを追跡する。ステッ
プ702の後、動作はステップ700に戻り、現行グル
ープに組み込むためにそのシーケンスの次の命令の処理
を開始する。
すように、図16〜18に関して前述した割振り機構5
01の動作は、レジスタ・リネーム技法を使用するよう
に変更することができる。この場合、ステップ700で
割振り機構501は、特定の命令が条件付き分岐命令で
あるかどうかを検査することから開始する。そのような
命令である場合、ステップ702で割振り機構501
は、その命令に対応する命令フィールドをグループ・バ
ッファ507内のcurrent_maxフラグに対応するLDI
の使用可能スロットに書き込むように命令フィールド・
エンコーダ503を制御し、その命令が定義する各資源
ごとに、その資源に関連するタイム・スタンプIDを[c
urrent_max flag + 1}に更新し、更新したタイム・ス
タンプIDをTST505に書き込む。前述のように、
current_maxフラグは、条件付き分岐命令が順序正しく
維持されるように、現行最大LDIを追跡する。ステッ
プ702の後、動作はステップ700に戻り、現行グル
ープに組み込むためにそのシーケンスの次の命令の処理
を開始する。
【0082】ステップ700で割振り機構501は、そ
の命令が条件付き分岐命令ではないと判定し、動作はス
テップ701に移行する。ステップ701では、割振り
機構501は、特定の命令が使用する各資源ごとに、そ
の資源に関連するリネーム・フラグ(詳細は以下に記載
する)を検査し、それに応じてその資源をリネームす
る。次にステップ704で割振り機構501は、特定の
命令が使用する各資源ごとに、その資源が使用可能にな
るLDIを識別する、資源に対応するタイム・スタンプ
IDをTST505から取り出す。ステップ706で割
振り機構501は、ステップ704で取り出したタイム
・スタンプIDのうちの最大ID(例示のため、TS
use(MAX)と示す)を決定する。
の命令が条件付き分岐命令ではないと判定し、動作はス
テップ701に移行する。ステップ701では、割振り
機構501は、特定の命令が使用する各資源ごとに、そ
の資源に関連するリネーム・フラグ(詳細は以下に記載
する)を検査し、それに応じてその資源をリネームす
る。次にステップ704で割振り機構501は、特定の
命令が使用する各資源ごとに、その資源が使用可能にな
るLDIを識別する、資源に対応するタイム・スタンプ
IDをTST505から取り出す。ステップ706で割
振り機構501は、ステップ704で取り出したタイム
・スタンプIDのうちの最大ID(例示のため、TS
use(MAX)と示す)を決定する。
【0083】ステップ708で割振り機構501は、特
定の命令が定義する各資源ごとに、関連のリネーム・フ
ラグが設定されているかどうかを検査する。設定されて
いない場合、割振り機構501はステップ712でリネ
ーム・フラグを設定し、その結果、特定の資源がすでに
定義されていることをそのグループの後続命令に示し、
さらに、新しい資源名をその資源の元の名前として初期
設定し、動作はステップ718に移行する。
定の命令が定義する各資源ごとに、関連のリネーム・フ
ラグが設定されているかどうかを検査する。設定されて
いない場合、割振り機構501はステップ712でリネ
ーム・フラグを設定し、その結果、特定の資源がすでに
定義されていることをそのグループの後続命令に示し、
さらに、新しい資源名をその資源の元の名前として初期
設定し、動作はステップ718に移行する。
【0084】しかし、ステップ708で割振り機構50
1が、特定の命令が定義する各資源ごとに、リネーム・
フラグが設定されていると判定した場合、動作はステッ
プ710〜716に移行する。割振り機構501は、ス
テップ710で空き資源を突き止め、ステップ714で
特定の資源をその空き資源にリネームする。ステップ7
16で割振り機構501は、特定の資源がリネームされ
たことを示すリネーム・フラグを設定し、その資源の新
しい名前を空き資源名に設定し、動作はステップ718
に移行する。
1が、特定の命令が定義する各資源ごとに、リネーム・
フラグが設定されていると判定した場合、動作はステッ
プ710〜716に移行する。割振り機構501は、ス
テップ710で空き資源を突き止め、ステップ714で
特定の資源をその空き資源にリネームする。ステップ7
16で割振り機構501は、特定の資源がリネームされ
たことを示すリネーム・フラグを設定し、その資源の新
しい名前を空き資源名に設定し、動作はステップ718
に移行する。
【0085】ステップ718で割振り機構501は、ea
rliest_LDIフラグをステップ706で定義したTSuse
(MAX)に設定し、図16〜17に関して前述したよ
うに動作はステップ613に移行して、その命令を表す
命令フィールドをグループ・バッファ507内の適切な
LDIに入れる。
rliest_LDIフラグをステップ706で定義したTSuse
(MAX)に設定し、図16〜17に関して前述したよ
うに動作はステップ613に移行して、その命令を表す
命令フィールドをグループ・バッファ507内の適切な
LDIに入れる。
【0086】前述の資源リネーム技法を使用するグルー
プ・フォーマッタ123の動作を例示するため、上記の
6つの命令からなる同一シーケンスについて検討する。
図23および図24は、図21および図22に関して前
述したようにグループ・フォーマッタ123がこの命令
シーケンスを1つのグループに形式化するように動作す
るときのTST505とグループ・バッファ507の状
態を示している。
プ・フォーマッタ123の動作を例示するため、上記の
6つの命令からなる同一シーケンスについて検討する。
図23および図24は、図21および図22に関して前
述したようにグループ・フォーマッタ123がこの命令
シーケンスを1つのグループに形式化するように動作す
るときのTST505とグループ・バッファ507の状
態を示している。
【0087】第4の命令はリネームを起動するためのシ
ーケンスの第1の命令なので、第1〜第3の命令を処理
する際のグループ・フォーマッタ123の動作の結果は
変わらない。しかし、第4の命令の場合、ステップ70
8でr4に関連するリネーム・フラグが設定されてお
り、動作はステップ710に移行して空き資源、たとえ
ば、図23に示す資源rNを突き止める。ステップ71
2で割振り機構501は、再定義条件の原因となった特
定の資源、この場合はr4を空き資源rNにリネーム
し、ステップ716で割振り機構501は、特定の資源
r4に関連するリネーム・フラグと資源名とを設定し
て、資源r4が明示的にrNにリネームされたことを示
す。ステップ718で割振り機構501は、earliest_L
DIフラグをTSuse(MAX)、すなわち0に設定し、
流れはステップ613に移行する。ステップ613で
は、その時点で0に設定されているearliest_LDIフラグ
が3以下であるので、割振り機構501はステップ61
5で、earliest_LDIフラグに対応するLDI、この場合
はLDI0でスロットFU0・・FU3が使用可能にな
っているかどうかを検査する。LDI0でスロットFU
1が使用可能になっているので、動作はステップ619
に移行し、そこで割振り機構501は、図24に示すよ
うに第4の命令に対応する命令フィールドをLDI0の
FU1スロットに入れるように命令フィールド・エンコ
ーダ503を制御する。次にステップ621で割振り機
構501は、第4の命令が定義する資源、この場合はr
Nに対応するタイム・スタンプIDをearliest_LDIフラ
グの増分(すなわち、earliest_LDI + 1)に更新する。
この場合、図23に示すようにこの増分は1になる。ス
テップ623で第4の命令が停止命令ではないので、グ
ループ・フォーマッタ123の動作はそのシーケンス内
の第5の命令に移行する。
ーケンスの第1の命令なので、第1〜第3の命令を処理
する際のグループ・フォーマッタ123の動作の結果は
変わらない。しかし、第4の命令の場合、ステップ70
8でr4に関連するリネーム・フラグが設定されてお
り、動作はステップ710に移行して空き資源、たとえ
ば、図23に示す資源rNを突き止める。ステップ71
2で割振り機構501は、再定義条件の原因となった特
定の資源、この場合はr4を空き資源rNにリネーム
し、ステップ716で割振り機構501は、特定の資源
r4に関連するリネーム・フラグと資源名とを設定し
て、資源r4が明示的にrNにリネームされたことを示
す。ステップ718で割振り機構501は、earliest_L
DIフラグをTSuse(MAX)、すなわち0に設定し、
流れはステップ613に移行する。ステップ613で
は、その時点で0に設定されているearliest_LDIフラグ
が3以下であるので、割振り機構501はステップ61
5で、earliest_LDIフラグに対応するLDI、この場合
はLDI0でスロットFU0・・FU3が使用可能にな
っているかどうかを検査する。LDI0でスロットFU
1が使用可能になっているので、動作はステップ619
に移行し、そこで割振り機構501は、図24に示すよ
うに第4の命令に対応する命令フィールドをLDI0の
FU1スロットに入れるように命令フィールド・エンコ
ーダ503を制御する。次にステップ621で割振り機
構501は、第4の命令が定義する資源、この場合はr
Nに対応するタイム・スタンプIDをearliest_LDIフラ
グの増分(すなわち、earliest_LDI + 1)に更新する。
この場合、図23に示すようにこの増分は1になる。ス
テップ623で第4の命令が停止命令ではないので、グ
ループ・フォーマッタ123の動作はそのシーケンス内
の第5の命令に移行する。
【0088】第5の命令の場合、その命令が使用する資
源、この場合はr4に関連するリネーム・フラグは、そ
の資源r4がリネームされていることを示しているの
で、割振り機構501は、図23に示すようにステップ
701で資源r4をrNにリネームする。さらに、その
命令が使用する資源rNには対応するタイム・スタンプ
IDとして1が付いているので、割振り機構はステップ
706でTSuse(MAX)を1として定義する。ステ
ップ708では、その命令が定義する資源、この場合は
r4に関連するリネーム・フラグが設定されているの
で、動作はステップ710に移行して空き資源、たとえ
ば、図23に示すように資源rNを突き止める。ステッ
プ712で割振り機構501は、再定義条件の原因とな
った特定の資源、この場合はr4を空き資源rNにリネ
ームし、ステップ716で割振り機構501は、特定の
資源r4に関連するリネーム・フラグと資源名とを設定
して、資源r4が明示的にrNにリネームされたことを
示す。ステップ718で割振り機構501は、earliest
_LDIフラグをTSuse(MAX)、すなわち1に設定
し、流れはステップ613に移行する。ステップ613
では、その時点で1に設定されているearliest_LDIフラ
グが3以下であるので、割振り機構501はステップ6
15で、earliest_LDIフラグに対応するLDI、この場
合はLDI1でスロットFU0・・FU3が使用可能に
なっているかどうかを検査する。LDI1でスロットF
U1が使用可能になっているので、動作はステップ61
9に移行し、そこで割振り機構501は、図20に示す
ように第5の命令に対応する命令フィールドをLDI1
のFU1スロットに入れるように命令フィールド・エン
コーダ503を制御する。次にステップ621で割振り
機構501は、第5の命令が定義する資源、この場合は
rNに対応するタイム・スタンプIDをearliest_LDIフ
ラグの増分(すなわち、earliest_LDI + 1)に更新す
る。この場合、図23に示すようにこの増分は2にな
る。ステップ623で第5の命令が停止命令ではないの
で、グループ・フォーマッタ123の動作はそのシーケ
ンス内の第6の命令に移行する。
源、この場合はr4に関連するリネーム・フラグは、そ
の資源r4がリネームされていることを示しているの
で、割振り機構501は、図23に示すようにステップ
701で資源r4をrNにリネームする。さらに、その
命令が使用する資源rNには対応するタイム・スタンプ
IDとして1が付いているので、割振り機構はステップ
706でTSuse(MAX)を1として定義する。ステ
ップ708では、その命令が定義する資源、この場合は
r4に関連するリネーム・フラグが設定されているの
で、動作はステップ710に移行して空き資源、たとえ
ば、図23に示すように資源rNを突き止める。ステッ
プ712で割振り機構501は、再定義条件の原因とな
った特定の資源、この場合はr4を空き資源rNにリネ
ームし、ステップ716で割振り機構501は、特定の
資源r4に関連するリネーム・フラグと資源名とを設定
して、資源r4が明示的にrNにリネームされたことを
示す。ステップ718で割振り機構501は、earliest
_LDIフラグをTSuse(MAX)、すなわち1に設定
し、流れはステップ613に移行する。ステップ613
では、その時点で1に設定されているearliest_LDIフラ
グが3以下であるので、割振り機構501はステップ6
15で、earliest_LDIフラグに対応するLDI、この場
合はLDI1でスロットFU0・・FU3が使用可能に
なっているかどうかを検査する。LDI1でスロットF
U1が使用可能になっているので、動作はステップ61
9に移行し、そこで割振り機構501は、図20に示す
ように第5の命令に対応する命令フィールドをLDI1
のFU1スロットに入れるように命令フィールド・エン
コーダ503を制御する。次にステップ621で割振り
機構501は、第5の命令が定義する資源、この場合は
rNに対応するタイム・スタンプIDをearliest_LDIフ
ラグの増分(すなわち、earliest_LDI + 1)に更新す
る。この場合、図23に示すようにこの増分は2にな
る。ステップ623で第5の命令が停止命令ではないの
で、グループ・フォーマッタ123の動作はそのシーケ
ンス内の第6の命令に移行する。
【0089】第6の命令の場合、その命令が使用する資
源、この場合はr4に関連するリネーム・フラグは、そ
の資源r4がリネームされていることを示しているの
で、割振り機構501は、図23に示すようにステップ
701で資源r4をrNにリネームする。さらに、その
命令が使用する資源r3とrNには対応するタイム・ス
タンプIDとして3と2がそれぞれ付いているので、割
振り機構はステップ603でTSuse(MAX)を3と
して定義する。ステップ708では、その命令が定義す
る資源、この場合はr2に関連するリネーム・フラグが
設定されていないと割振り機構501が判定し、動作は
ステップ712に移行してr2に関連するリネーム・フ
ラグを設定し、r2に関連する資源名フラグをその元の
名前に設定する。ステップ718で割振り機構501
は、earliest_LDIフラグをTSuse(MAX)、すなわ
ち3に設定し、流れはステップ613に移行する。ステ
ップ613では、その時点で3に設定されているearlie
st_LDIフラグが3以下であるので、割振り機構501は
ステップ615で、earliest_LDIフラグに対応するLD
I、この場合はLDI3でスロットFU0・・FU3が
使用可能になっているかどうかを検査する。LDI3で
スロットFU1が使用可能になっているので、動作はス
テップ619に移行し、そこで割振り機構501は、図
20に示すように第6の命令に対応する命令フィールド
をLDI3のFU1スロットに入れるように命令フィー
ルド・エンコーダ503を制御する。次にステップ62
1で割振り機構501は、第6の命令が定義する資源、
この場合はr2に対応するタイム・スタンプIDをearl
iest_LDIフラグの増分(すなわち、earliest_LDI + 1)
に更新する。この場合、図23に示すようにこの増分は
4になる。ステップ623で第6の命令が停止命令では
ないので、グループ・フォーマッタ123の動作は、第
1〜第6の命令に関して前述したようにシーケンス内の
次の命令(図示せず)に移行する。
源、この場合はr4に関連するリネーム・フラグは、そ
の資源r4がリネームされていることを示しているの
で、割振り機構501は、図23に示すようにステップ
701で資源r4をrNにリネームする。さらに、その
命令が使用する資源r3とrNには対応するタイム・ス
タンプIDとして3と2がそれぞれ付いているので、割
振り機構はステップ603でTSuse(MAX)を3と
して定義する。ステップ708では、その命令が定義す
る資源、この場合はr2に関連するリネーム・フラグが
設定されていないと割振り機構501が判定し、動作は
ステップ712に移行してr2に関連するリネーム・フ
ラグを設定し、r2に関連する資源名フラグをその元の
名前に設定する。ステップ718で割振り機構501
は、earliest_LDIフラグをTSuse(MAX)、すなわ
ち3に設定し、流れはステップ613に移行する。ステ
ップ613では、その時点で3に設定されているearlie
st_LDIフラグが3以下であるので、割振り機構501は
ステップ615で、earliest_LDIフラグに対応するLD
I、この場合はLDI3でスロットFU0・・FU3が
使用可能になっているかどうかを検査する。LDI3で
スロットFU1が使用可能になっているので、動作はス
テップ619に移行し、そこで割振り機構501は、図
20に示すように第6の命令に対応する命令フィールド
をLDI3のFU1スロットに入れるように命令フィー
ルド・エンコーダ503を制御する。次にステップ62
1で割振り機構501は、第6の命令が定義する資源、
この場合はr2に対応するタイム・スタンプIDをearl
iest_LDIフラグの増分(すなわち、earliest_LDI + 1)
に更新する。この場合、図23に示すようにこの増分は
4になる。ステップ623で第6の命令が停止命令では
ないので、グループ・フォーマッタ123の動作は、第
1〜第6の命令に関して前述したようにシーケンス内の
次の命令(図示せず)に移行する。
【0090】上記の処理ステップに加え、割振り機構5
01はステップ619で、特定の命令フィールドが表す
機能(複数も可)を実行する(か否かの)条件を示す、
LDIの命令フィールドに関連するフラグを設定するこ
とができる。この場合、並列エンジン125の実行ユニ
ットは、関連フラグが表す条件が満足された場合のみ、
対応する命令フィールドが表す機能を実行するように制
御される。
01はステップ619で、特定の命令フィールドが表す
機能(複数も可)を実行する(か否かの)条件を示す、
LDIの命令フィールドに関連するフラグを設定するこ
とができる。この場合、並列エンジン125の実行ユニ
ットは、関連フラグが表す条件が満足された場合のみ、
対応する命令フィールドが表す機能を実行するように制
御される。
【0091】上記の例では、実行のために順次マシンの
実行ユニットにディスパッチされる各命令ごとに、命令
フィールド・エンコーダ503は、その命令に対応し、
並列エンジン125の機能ユニットと分岐処理ユニット
が単一マシン・サイクル中に実行可能な単一命令フィー
ルドを生成する。しかし、この点について本発明は限定
されない。代替実施例では、命令に対応する命令フィー
ルドを並列エンジン125の機能ユニットと分岐処理ユ
ニット上で実行するのに要する時間が1マシン・サイク
ルを上回る場合がある。ステップ621の割振り機構5
01の動作は、その命令が定義する資源に対応するタイ
ム・スタンプIDを適切な数の待ち時間ユニットで更新
するように変更される。たとえば、命令フィールドを実
行するのに3マシン・サイクルを要する場合、その命令
が定義する資源に対応するタイム・スタンプIDは3で
更新される。さらに、代替実施例の命令フィールド・エ
ンコーダ503は、順次マシンの実行ユニットが実行す
るためにディスパッチされる単一命令に対応して複数の
命令フィールドを生成することができる。この場合、割
振り機構501の動作は、ステップ619でその命令に
対応する複数の命令フィールドが適切なLDI(複数も
可)に入るように変更される。さらに、たとえば、参照
によりその全体が本発明に組み込まれる、Malik他の"In
terlock Collapsing ALU for Increased Instruction-L
evel Parallelism"(Proceedings ofMicro-25, Portlan
d, Oregon, 1992年12月, pp. 149-157)に記載さ
れているように、代替実施例では、並列エンジン125
の1つまたは複数の機能ユニットが単一マシン・サイク
ル中に複数の元の命令を実行することができる。この場
合、命令フィールド・エンコーダ503は複数の元の命
令に対応する単一命令フィールドを生成し、割振り機構
501の動作は、ステップ619で複数の元の命令に対
応する単一命令フィールドが適切なLDIに入るように
変更される。
実行ユニットにディスパッチされる各命令ごとに、命令
フィールド・エンコーダ503は、その命令に対応し、
並列エンジン125の機能ユニットと分岐処理ユニット
が単一マシン・サイクル中に実行可能な単一命令フィー
ルドを生成する。しかし、この点について本発明は限定
されない。代替実施例では、命令に対応する命令フィー
ルドを並列エンジン125の機能ユニットと分岐処理ユ
ニット上で実行するのに要する時間が1マシン・サイク
ルを上回る場合がある。ステップ621の割振り機構5
01の動作は、その命令が定義する資源に対応するタイ
ム・スタンプIDを適切な数の待ち時間ユニットで更新
するように変更される。たとえば、命令フィールドを実
行するのに3マシン・サイクルを要する場合、その命令
が定義する資源に対応するタイム・スタンプIDは3で
更新される。さらに、代替実施例の命令フィールド・エ
ンコーダ503は、順次マシンの実行ユニットが実行す
るためにディスパッチされる単一命令に対応して複数の
命令フィールドを生成することができる。この場合、割
振り機構501の動作は、ステップ619でその命令に
対応する複数の命令フィールドが適切なLDI(複数も
可)に入るように変更される。さらに、たとえば、参照
によりその全体が本発明に組み込まれる、Malik他の"In
terlock Collapsing ALU for Increased Instruction-L
evel Parallelism"(Proceedings ofMicro-25, Portlan
d, Oregon, 1992年12月, pp. 149-157)に記載さ
れているように、代替実施例では、並列エンジン125
の1つまたは複数の機能ユニットが単一マシン・サイク
ル中に複数の元の命令を実行することができる。この場
合、命令フィールド・エンコーダ503は複数の元の命
令に対応する単一命令フィールドを生成し、割振り機構
501の動作は、ステップ619で複数の元の命令に対
応する単一命令フィールドが適切なLDIに入るように
変更される。
【0092】本発明の第2の実施例によれば、第1の実
施例に関して前述した割振り機構501の動作は、図2
5に示すように追加の処理ステップを含むことができ
る。より具体的には、順次マシンの実行ユニットが実行
するためにディスパッチされる各命令ごとに、割振り機
構501の動作がステップ801を含むことができ、そ
こで割振り機構501は特定の命令が停止命令であるか
どうかを検査する。この場合、停止命令は、順次マシン
のアーキテクチャの命令セットの事前定義サブセットに
することができる。この事前定義サブセットは、複数レ
ジスタ・ロード命令や整数除算命令など、高い待ち時間
を有する命令を含むことが好ましく、したがって、現行
グループにフォーマット化するには効率が悪い恐れがあ
り、あるいは、並列エンジン125が実行できない場合
もある。ステップ801でその命令が停止命令であると
割振り機構501が判定した場合、割振り機構501の
動作は、前述のように図18に示す諸ステップに移行
し、そのグループをクローズし、クローズしたグループ
をグループ・バッファ507から並列エンジン125の
DIBに書き込む。
施例に関して前述した割振り機構501の動作は、図2
5に示すように追加の処理ステップを含むことができ
る。より具体的には、順次マシンの実行ユニットが実行
するためにディスパッチされる各命令ごとに、割振り機
構501の動作がステップ801を含むことができ、そ
こで割振り機構501は特定の命令が停止命令であるか
どうかを検査する。この場合、停止命令は、順次マシン
のアーキテクチャの命令セットの事前定義サブセットに
することができる。この事前定義サブセットは、複数レ
ジスタ・ロード命令や整数除算命令など、高い待ち時間
を有する命令を含むことが好ましく、したがって、現行
グループにフォーマット化するには効率が悪い恐れがあ
り、あるいは、並列エンジン125が実行できない場合
もある。ステップ801でその命令が停止命令であると
割振り機構501が判定した場合、割振り機構501の
動作は、前述のように図18に示す諸ステップに移行
し、そのグループをクローズし、クローズしたグループ
をグループ・バッファ507から並列エンジン125の
DIBに書き込む。
【0093】さらに、グループ・フォーマッタ123
は、データが紛失または破壊されないように、ロード操
作とストア操作の順序付けを維持することができる。こ
れは、MLというTST505のセルをメモリ・ロード
操作に割り振り、MSというTST505のセルをメモ
リ・ストア操作に割り振ることによって実施することが
できる。より具体的には、セルMLは、現行グループの
最新メモリ・ロード操作がある場合にそれが完了される
現行グループのLDIを識別するタイム・スタンプID
を格納し、セルMSは、現行グループの最新メモリ・ス
トア操作がある場合にそれが完了される現行グループの
LDIを識別するタイム・スタンプIDを格納する。こ
の場合、グループ・フォーマッタ123の割振り機構5
01は、図25に示すように、セルMLおよびMSに格
納されたタイム・スタンプIDを使用して、ロード操作
とストア操作の順序を維持する。ステップ803で割振
り機構501は、その命令がロード操作を含んでいたか
どうかを検査する。含んでいた場合、動作はステップ8
05に移行し、そこで割振り機構501は、TST50
5のセルMLを、特定の命令が定義する資源に対応する
TST505のセルに関連付け、さらに、セルMSを、
特定の命令が使用する資源に対応するTST505のセ
ルに関連付ける。ステップ805の後、割振り機構50
1の動作は前述のステップ601に移行して命令を処理
し、現行グループの適切なLDIが使用可能であればそ
のLDIにそれを入れる。
は、データが紛失または破壊されないように、ロード操
作とストア操作の順序付けを維持することができる。こ
れは、MLというTST505のセルをメモリ・ロード
操作に割り振り、MSというTST505のセルをメモ
リ・ストア操作に割り振ることによって実施することが
できる。より具体的には、セルMLは、現行グループの
最新メモリ・ロード操作がある場合にそれが完了される
現行グループのLDIを識別するタイム・スタンプID
を格納し、セルMSは、現行グループの最新メモリ・ス
トア操作がある場合にそれが完了される現行グループの
LDIを識別するタイム・スタンプIDを格納する。こ
の場合、グループ・フォーマッタ123の割振り機構5
01は、図25に示すように、セルMLおよびMSに格
納されたタイム・スタンプIDを使用して、ロード操作
とストア操作の順序を維持する。ステップ803で割振
り機構501は、その命令がロード操作を含んでいたか
どうかを検査する。含んでいた場合、動作はステップ8
05に移行し、そこで割振り機構501は、TST50
5のセルMLを、特定の命令が定義する資源に対応する
TST505のセルに関連付け、さらに、セルMSを、
特定の命令が使用する資源に対応するTST505のセ
ルに関連付ける。ステップ805の後、割振り機構50
1の動作は前述のステップ601に移行して命令を処理
し、現行グループの適切なLDIが使用可能であればそ
のLDIにそれを入れる。
【0094】しかし、ステップ803でその命令がロー
ド操作を含んでいないと割振り機構501が判定した場
合、動作はステップ807に移行し、その命令がストア
操作を含んでいるかどうかを検査する。含んでいる場
合、動作はステップ809に移行し、そこで割振り機構
501は、TST505のセルMSを、特定の命令が定
義する資源に対応するTST505のセルに関連付け、
さらに、セルMSとMLを、特定の命令が使用する資源
に対応するTST505のセルに関連付ける。ステップ
809の後、割振り機構501の動作は前述のステップ
601に移行して命令を処理し、現行グループの適切な
LDIが使用可能であればそのLDIにそれを入れる。
ド操作を含んでいないと割振り機構501が判定した場
合、動作はステップ807に移行し、その命令がストア
操作を含んでいるかどうかを検査する。含んでいる場
合、動作はステップ809に移行し、そこで割振り機構
501は、TST505のセルMSを、特定の命令が定
義する資源に対応するTST505のセルに関連付け、
さらに、セルMSとMLを、特定の命令が使用する資源
に対応するTST505のセルに関連付ける。ステップ
809の後、割振り機構501の動作は前述のステップ
601に移行して命令を処理し、現行グループの適切な
LDIが使用可能であればそのLDIにそれを入れる。
【0095】最後に、ステップ807でその命令がスト
ア操作を含んでいないと割振り機構501が判定した場
合、動作は前述のステップ601に移行して命令を処理
し、現行グループの適切なLDIが使用可能であればそ
のLDIにそれを入れる。
ア操作を含んでいないと割振り機構501が判定した場
合、動作は前述のステップ601に移行して命令を処理
し、現行グループの適切なLDIが使用可能であればそ
のLDIにそれを入れる。
【0096】メモリ・ロード操作とメモリ・ストア操作
を含む命令の順序を維持する際の割振り機構501の動
作を例示するため、以下の命令シーケンスについて検討
する。 1. ストア r7 → 8(r10) 2. 加算 r3,r4 → r2 3. ロード 5(r2) → r3 4. ロード 7(r6) → r9 5. ストア r9 → 8(r2) 図26および図27は、この命令シーケンスを図25お
よび図16〜18に関して前述したグループにフォーマ
ット化するようにグループ・フォーマッタ123が動作
するときのTST505とグループ・バッファ507の
状態を示している。
を含む命令の順序を維持する際の割振り機構501の動
作を例示するため、以下の命令シーケンスについて検討
する。 1. ストア r7 → 8(r10) 2. 加算 r3,r4 → r2 3. ロード 5(r2) → r3 4. ロード 7(r6) → r9 5. ストア r9 → 8(r2) 図26および図27は、この命令シーケンスを図25お
よび図16〜18に関して前述したグループにフォーマ
ット化するようにグループ・フォーマッタ123が動作
するときのTST505とグループ・バッファ507の
状態を示している。
【0097】グループの先頭では、第1の命令を処理す
る前にTST505が各セルにゼロが入るように初期設
定される。第1の命令の場合、割振り機構501はステ
ップ807でその命令がストア操作を含んでいると判定
し、動作はステップ809に移行し、そこで割振り機構
501は、TST505のセルMSを第1の命令が定義
する資源に対応するTST505のセルに関連付け、さ
らにセルMSとMLを第1の命令が使用する資源に対応
するTST505のセルに関連付ける。次に、第1の命
令が使用する資源r7、r10、MS、MLに対応する
TST505のセルにはタイム・スタンプIDとして0
が付いているので、割振り機構はステップ603でTS
use(MAX)を0として定義する。さらに、その命令
が定義する資源MSに対応するTST505のセルには
タイム・スタンプIDとして0が付いているので、割振
り機構はステップ607でTSdef(MAX)を0とし
て定義する。ステップ609で割振り機構501はearl
iest_LDIフラグを0に設定し、流れはステップ613に
移行する。ステップ613では、その時点で0に設定さ
れているearliest_LDIフラグが3以下なので、割振り機
構501はステップ615で、earliest_LDIフラグに対
応するLDI、この場合はLDI0でスロットFU0・
・FU3が使用可能になっているかどうかを検査する。
LDI0でスロットFU0が使用可能になっているの
で、動作はステップ619に移行し、そこで割振り機構
501は、図27に示すように第1の命令に対応する命
令フィールドをLDI0のFU0スロットに入れるよう
に命令フィールド・エンコーダ503を制御する。次
に、ステップ621で割振り機構501は、第1の命令
が定義する資源、この場合はMSに対応するセルのタイ
ム・スタンプIDをearliest_LDIフラグの増分(すなわ
ち、earliest_LDI + 1)に更新する。この場合、図26
に示すようにこの増分は1になる。ステップ623で
は、第1の命令が停止命令ではないので、グループ・フ
ォーマッタ123の動作はシーケンス内の第2の命令に
移行する。
る前にTST505が各セルにゼロが入るように初期設
定される。第1の命令の場合、割振り機構501はステ
ップ807でその命令がストア操作を含んでいると判定
し、動作はステップ809に移行し、そこで割振り機構
501は、TST505のセルMSを第1の命令が定義
する資源に対応するTST505のセルに関連付け、さ
らにセルMSとMLを第1の命令が使用する資源に対応
するTST505のセルに関連付ける。次に、第1の命
令が使用する資源r7、r10、MS、MLに対応する
TST505のセルにはタイム・スタンプIDとして0
が付いているので、割振り機構はステップ603でTS
use(MAX)を0として定義する。さらに、その命令
が定義する資源MSに対応するTST505のセルには
タイム・スタンプIDとして0が付いているので、割振
り機構はステップ607でTSdef(MAX)を0とし
て定義する。ステップ609で割振り機構501はearl
iest_LDIフラグを0に設定し、流れはステップ613に
移行する。ステップ613では、その時点で0に設定さ
れているearliest_LDIフラグが3以下なので、割振り機
構501はステップ615で、earliest_LDIフラグに対
応するLDI、この場合はLDI0でスロットFU0・
・FU3が使用可能になっているかどうかを検査する。
LDI0でスロットFU0が使用可能になっているの
で、動作はステップ619に移行し、そこで割振り機構
501は、図27に示すように第1の命令に対応する命
令フィールドをLDI0のFU0スロットに入れるよう
に命令フィールド・エンコーダ503を制御する。次
に、ステップ621で割振り機構501は、第1の命令
が定義する資源、この場合はMSに対応するセルのタイ
ム・スタンプIDをearliest_LDIフラグの増分(すなわ
ち、earliest_LDI + 1)に更新する。この場合、図26
に示すようにこの増分は1になる。ステップ623で
は、第1の命令が停止命令ではないので、グループ・フ
ォーマッタ123の動作はシーケンス内の第2の命令に
移行する。
【0098】第2の命令の場合、その命令はロード操作
またはストア操作を含んでいないので、ステップ805
と809は迂回され、動作はステップ601に移行す
る。その命令が使用する資源r1とr5には対応するタ
イム・スタンプIDとして0が付いているので、割振り
機構はステップ603でTSuse(MAX)を0として
定義する。さらに、その命令が定義する資源r2には対
応するタイム・スタンプIDとして0が付いているの
で、割振り機構はステップ607でTSdef(MAX)
を0として定義する。ステップ609で割振り機構50
1はearliest_LDIフラグを0に設定し、流れはステップ
613に移行する。ステップ613では、その時点で0
に設定されているearliest_LDIフラグが3以下なので、
割振り機構501はステップ615で、earliest_LDIフ
ラグに対応するLDI、この場合はLDI0でスロット
FU0・・FU3が使用可能になっているかどうかを検
査する。LDI0でスロットFU1が使用可能になって
いるので、動作はステップ619に移行し、そこで割振
り機構501は、図27に示すように第2の命令に対応
する命令フィールドをLDI0のFU1スロットに入れ
るように命令フィールド・エンコーダ503を制御す
る。次に、ステップ621で割振り機構501は、第2
の命令が定義する資源、この場合はr2に対応するセル
のタイム・スタンプIDをearliest_LDIフラグの増分
(すなわち、earliest_LDI + 1)に更新する。この場
合、図26に示すようにこの増分は1になる。ステップ
623では、第2の命令が停止命令ではないので、グル
ープ・フォーマッタ123の動作はシーケンス内の第3
の命令に移行する。
またはストア操作を含んでいないので、ステップ805
と809は迂回され、動作はステップ601に移行す
る。その命令が使用する資源r1とr5には対応するタ
イム・スタンプIDとして0が付いているので、割振り
機構はステップ603でTSuse(MAX)を0として
定義する。さらに、その命令が定義する資源r2には対
応するタイム・スタンプIDとして0が付いているの
で、割振り機構はステップ607でTSdef(MAX)
を0として定義する。ステップ609で割振り機構50
1はearliest_LDIフラグを0に設定し、流れはステップ
613に移行する。ステップ613では、その時点で0
に設定されているearliest_LDIフラグが3以下なので、
割振り機構501はステップ615で、earliest_LDIフ
ラグに対応するLDI、この場合はLDI0でスロット
FU0・・FU3が使用可能になっているかどうかを検
査する。LDI0でスロットFU1が使用可能になって
いるので、動作はステップ619に移行し、そこで割振
り機構501は、図27に示すように第2の命令に対応
する命令フィールドをLDI0のFU1スロットに入れ
るように命令フィールド・エンコーダ503を制御す
る。次に、ステップ621で割振り機構501は、第2
の命令が定義する資源、この場合はr2に対応するセル
のタイム・スタンプIDをearliest_LDIフラグの増分
(すなわち、earliest_LDI + 1)に更新する。この場
合、図26に示すようにこの増分は1になる。ステップ
623では、第2の命令が停止命令ではないので、グル
ープ・フォーマッタ123の動作はシーケンス内の第3
の命令に移行する。
【0099】第3の命令の場合、割振り機構501はス
テップ803でその命令がロード操作を含んでいると判
定し、動作はステップ805に移行し、そこで割振り機
構501は、TST505のセルMLを第3の命令が定
義する資源に対応するTST505のセルに関連付け、
さらにセルMSを第3の命令が使用する資源に対応する
TST505のセルに関連付ける。次に、第3の命令が
使用する資源r2、MSに対応するTST505のセル
にはタイム・スタンプIDとして1が付いているので、
割振り機構501はステップ603でTSuse(MA
X)を1として定義する。さらに、その命令が定義する
資源r3とMLに対応するTST505のセルにはタイ
ム・スタンプIDとして0が付いているので、割振り機
構501はステップ607でTSdef(MAX)を0と
して定義する。ステップ609で割振り機構501はea
rliest_LDIフラグをTSuse(MAX)、すなわち1に
設定し、流れはステップ613に移行する。ステップ6
13では、その時点で0に設定されているearliest_LDI
フラグが3以下なので、割振り機構501はステップ6
15で、earliest_LDIフラグに対応するLDI、この場
合はLDI1でスロットFU0・・FU3が使用可能に
なっているかどうかを検査する。LDI1でスロットF
U0が使用可能になっているので、動作はステップ61
9に移行し、そこで割振り機構501は、図27に示す
ように第3の命令に対応する命令フィールドをLDI1
のFU0スロットに入れるように命令フィールド・エン
コーダ503を制御する。次に、ステップ621で割振
り機構501は、第3の命令が定義する資源、この場合
はr3とMLに対応するセルのタイム・スタンプIDを
earliest_LDIフラグの増分(すなわち、earliest_LDI +
1)に更新する。この場合、図26に示すようにこの増
分は2になる。ステップ623では、第3の命令が停止
命令ではないので、グループ・フォーマッタ123の動
作はシーケンス内の第4の命令に移行する。
テップ803でその命令がロード操作を含んでいると判
定し、動作はステップ805に移行し、そこで割振り機
構501は、TST505のセルMLを第3の命令が定
義する資源に対応するTST505のセルに関連付け、
さらにセルMSを第3の命令が使用する資源に対応する
TST505のセルに関連付ける。次に、第3の命令が
使用する資源r2、MSに対応するTST505のセル
にはタイム・スタンプIDとして1が付いているので、
割振り機構501はステップ603でTSuse(MA
X)を1として定義する。さらに、その命令が定義する
資源r3とMLに対応するTST505のセルにはタイ
ム・スタンプIDとして0が付いているので、割振り機
構501はステップ607でTSdef(MAX)を0と
して定義する。ステップ609で割振り機構501はea
rliest_LDIフラグをTSuse(MAX)、すなわち1に
設定し、流れはステップ613に移行する。ステップ6
13では、その時点で0に設定されているearliest_LDI
フラグが3以下なので、割振り機構501はステップ6
15で、earliest_LDIフラグに対応するLDI、この場
合はLDI1でスロットFU0・・FU3が使用可能に
なっているかどうかを検査する。LDI1でスロットF
U0が使用可能になっているので、動作はステップ61
9に移行し、そこで割振り機構501は、図27に示す
ように第3の命令に対応する命令フィールドをLDI1
のFU0スロットに入れるように命令フィールド・エン
コーダ503を制御する。次に、ステップ621で割振
り機構501は、第3の命令が定義する資源、この場合
はr3とMLに対応するセルのタイム・スタンプIDを
earliest_LDIフラグの増分(すなわち、earliest_LDI +
1)に更新する。この場合、図26に示すようにこの増
分は2になる。ステップ623では、第3の命令が停止
命令ではないので、グループ・フォーマッタ123の動
作はシーケンス内の第4の命令に移行する。
【0100】第4の命令の場合、割振り機構501はス
テップ803でその命令がロード操作を含んでいると判
定し、動作はステップ805に移行し、そこで割振り機
構501は、TST505のセルMLを第4の命令が定
義する資源に対応するTST505のセルに関連付け、
さらにセルMSを第4の命令が使用する資源に対応する
TST505のセルに関連付ける。次に、その命令が使
用する資源r6、MSに対応するTST505のセルに
はタイム・スタンプIDとして0と1がそれぞれ付いて
いるので、割振り機構はステップ603でTSuse(M
AX)を1として定義する。さらに、その命令が定義す
る資源r9とMLに対応するTST505のセルにはタ
イム・スタンプIDとして0と2がそれぞれ付いている
ので、割振り機構はステップ607でTSdef(MA
X)を2として定義する。ステップ609で割振り機構
501はearliest_LDIフラグをTSdef(MAX)、す
なわち2に設定し、流れはステップ613に移行する。
ステップ613では、その時点で2に設定されているea
rliest_LDIフラグが3以下なので、割振り機構501は
ステップ615で、earliest_LDIフラグに対応するLD
I、この場合はLDI2でスロットFU0・・FU3が
使用可能になっているかどうかを検査する。LDI2で
スロットFU0が使用可能になっているので、動作はス
テップ619に移行し、そこで割振り機構501は、図
27に示すように第4の命令に対応する命令フィールド
をLDI2のFU0スロットに入れるように命令フィー
ルド・エンコーダ503を制御する。次に、ステップ6
21で割振り機構501は、第4の命令が定義する資
源、この場合はr9とMLに対応するセルのタイム・ス
タンプIDをearliest_LDIフラグの増分(すなわち、ea
rliest_LDI + 1)に更新する。この場合、図26に示す
ようにこの増分は3になる。ステップ623では、第4
の命令が停止命令ではないので、グループ・フォーマッ
タ123の動作はシーケンス内の第5の命令に移行す
る。
テップ803でその命令がロード操作を含んでいると判
定し、動作はステップ805に移行し、そこで割振り機
構501は、TST505のセルMLを第4の命令が定
義する資源に対応するTST505のセルに関連付け、
さらにセルMSを第4の命令が使用する資源に対応する
TST505のセルに関連付ける。次に、その命令が使
用する資源r6、MSに対応するTST505のセルに
はタイム・スタンプIDとして0と1がそれぞれ付いて
いるので、割振り機構はステップ603でTSuse(M
AX)を1として定義する。さらに、その命令が定義す
る資源r9とMLに対応するTST505のセルにはタ
イム・スタンプIDとして0と2がそれぞれ付いている
ので、割振り機構はステップ607でTSdef(MA
X)を2として定義する。ステップ609で割振り機構
501はearliest_LDIフラグをTSdef(MAX)、す
なわち2に設定し、流れはステップ613に移行する。
ステップ613では、その時点で2に設定されているea
rliest_LDIフラグが3以下なので、割振り機構501は
ステップ615で、earliest_LDIフラグに対応するLD
I、この場合はLDI2でスロットFU0・・FU3が
使用可能になっているかどうかを検査する。LDI2で
スロットFU0が使用可能になっているので、動作はス
テップ619に移行し、そこで割振り機構501は、図
27に示すように第4の命令に対応する命令フィールド
をLDI2のFU0スロットに入れるように命令フィー
ルド・エンコーダ503を制御する。次に、ステップ6
21で割振り機構501は、第4の命令が定義する資
源、この場合はr9とMLに対応するセルのタイム・ス
タンプIDをearliest_LDIフラグの増分(すなわち、ea
rliest_LDI + 1)に更新する。この場合、図26に示す
ようにこの増分は3になる。ステップ623では、第4
の命令が停止命令ではないので、グループ・フォーマッ
タ123の動作はシーケンス内の第5の命令に移行す
る。
【0101】第5の命令の場合、割振り機構501はス
テップ807でその命令がストア操作を含んでいると判
定し、動作はステップ809に移行し、そこで割振り機
構501は、TST505のセルMSを第5の命令が定
義する資源に対応するTST505のセルに関連付け、
さらにセルMLとMSを第5の命令が使用する資源に対
応するTST505のセルに関連付ける。次に、第5の
命令が使用する資源r2、r9、ML、MSに対応する
TST505のセルにはタイム・スタンプIDとして
1、3、3、1がそれぞれ付いているので、割振り機構
はステップ603でTSuse(MAX)を3として定義
する。さらに、その命令が定義する資源MSに対応する
TST505のセルにはタイム・スタンプIDとして1
が付いているので、割振り機構501はステップ607
でTSdef(MAX)を1として定義する。ステップ6
09で割振り機構501はearliest_LDIフラグをTS
use(MAX)、すなわち3に設定し、流れはステップ
613に移行する。ステップ613では、その時点で3
に設定されているearliest_LDIフラグが3以下なので、
割振り機構501はステップ615で、earliest_LDIフ
ラグに対応するLDI、この場合はLDI3でスロット
FU0・・FU3が使用可能になっているかどうかを検
査する。LDI3でスロットFU0が使用可能になって
いるので、動作はステップ619に移行し、そこで割振
り機構501は、図27に示すように第5の命令に対応
する命令フィールドをLDI3のFU0スロットに入れ
るように命令フィールド・エンコーダ503を制御す
る。次に、ステップ621で割振り機構501は、第5
の命令が定義する資源、この場合はMSに対応するセル
のタイム・スタンプIDをearliest_LDIフラグの増分
(すなわち、earliest_LDI + 1)に更新する。この場
合、図26に示すようにこの増分は4になる。ステップ
623では、第5の命令が停止命令ではないので、グル
ープ・フォーマッタ123の動作はシーケンス内の次の
命令に移行する。
テップ807でその命令がストア操作を含んでいると判
定し、動作はステップ809に移行し、そこで割振り機
構501は、TST505のセルMSを第5の命令が定
義する資源に対応するTST505のセルに関連付け、
さらにセルMLとMSを第5の命令が使用する資源に対
応するTST505のセルに関連付ける。次に、第5の
命令が使用する資源r2、r9、ML、MSに対応する
TST505のセルにはタイム・スタンプIDとして
1、3、3、1がそれぞれ付いているので、割振り機構
はステップ603でTSuse(MAX)を3として定義
する。さらに、その命令が定義する資源MSに対応する
TST505のセルにはタイム・スタンプIDとして1
が付いているので、割振り機構501はステップ607
でTSdef(MAX)を1として定義する。ステップ6
09で割振り機構501はearliest_LDIフラグをTS
use(MAX)、すなわち3に設定し、流れはステップ
613に移行する。ステップ613では、その時点で3
に設定されているearliest_LDIフラグが3以下なので、
割振り機構501はステップ615で、earliest_LDIフ
ラグに対応するLDI、この場合はLDI3でスロット
FU0・・FU3が使用可能になっているかどうかを検
査する。LDI3でスロットFU0が使用可能になって
いるので、動作はステップ619に移行し、そこで割振
り機構501は、図27に示すように第5の命令に対応
する命令フィールドをLDI3のFU0スロットに入れ
るように命令フィールド・エンコーダ503を制御す
る。次に、ステップ621で割振り機構501は、第5
の命令が定義する資源、この場合はMSに対応するセル
のタイム・スタンプIDをearliest_LDIフラグの増分
(すなわち、earliest_LDI + 1)に更新する。この場
合、図26に示すようにこの増分は4になる。ステップ
623では、第5の命令が停止命令ではないので、グル
ープ・フォーマッタ123の動作はシーケンス内の次の
命令に移行する。
【0102】さらに、グループ・フォーマッタ123が
ロード命令の順序を維持することは必ず必要なわけでは
ない。たとえば、他のロード命令より先行するLDIに
ロード命令を入れた方が効率がよい場合もある。このよ
うにするため、前述の割振り機構501の動作は、ロー
ド命令の場合にステップ605〜609を迂回するよう
に変更され、その結果、ロード命令の場合は割振り機構
501の動作がステップ603から611に直接移行す
る。この場合、この命令シーケンスをグループにフォー
マット化するようにグループ・フォーマッタ123が動
作するときのTST505とグループ・バッファ507
の状態を図28および図29に示す。さらに、前述のよ
うにTST505のMLセルとMSセルを使用してロー
ド操作およびストア操作の順序を維持するという技法
は、特殊目的レジスタ移動操作などの他の操作に拡張す
るすることもできる。
ロード命令の順序を維持することは必ず必要なわけでは
ない。たとえば、他のロード命令より先行するLDIに
ロード命令を入れた方が効率がよい場合もある。このよ
うにするため、前述の割振り機構501の動作は、ロー
ド命令の場合にステップ605〜609を迂回するよう
に変更され、その結果、ロード命令の場合は割振り機構
501の動作がステップ603から611に直接移行す
る。この場合、この命令シーケンスをグループにフォー
マット化するようにグループ・フォーマッタ123が動
作するときのTST505とグループ・バッファ507
の状態を図28および図29に示す。さらに、前述のよ
うにTST505のMLセルとMSセルを使用してロー
ド操作およびストア操作の順序を維持するという技法
は、特殊目的レジスタ移動操作などの他の操作に拡張す
るすることもできる。
【0103】本発明の第3の実施例によれば、グループ
・フォーマッタ123の動作は、並列エンジン125の
機能ユニットまたは分岐処理ユニットあるいはその両方
によって生成されたグループの実行結果にリンクされる
ように変更することができる。より具体的には、CGB
204内に格納された現行グループからの分岐を検出す
ると、グループ・フォーマッタ123は、新しいグルー
プの形成を開始するのではなく、CGB204内に格納
された現行グループを変更するように制御することがで
きる。
・フォーマッタ123の動作は、並列エンジン125の
機能ユニットまたは分岐処理ユニットあるいはその両方
によって生成されたグループの実行結果にリンクされる
ように変更することができる。より具体的には、CGB
204内に格納された現行グループからの分岐を検出す
ると、グループ・フォーマッタ123は、新しいグルー
プの形成を開始するのではなく、CGB204内に格納
された現行グループを変更するように制御することがで
きる。
【0104】この特徴を例示するため、図12に関して
前述したグループ・フォーマッタ123によってフォー
マット化され、その後、並列エンジン125の機能ユニ
ットまたは分岐処理ユニットあるいはその両方によって
実行されるグループについて検討する。たとえば、LD
I1が実行されたときに、条件はx=1を示し、ラベル
LKでグループからの分岐が行われると想定する。この
時点では、新しいグループを開始するのではなく、図3
0〜31に示すように既存のグループがグループ・フォ
ーマッタ123にロードされ、機能強化される。第1
に、LDI1のグループからの分岐が除去され、命令k
は可能な限り最も早いLDI、この場合はLDI0のF
U3スロットに入る。次の命令lは命令kに依存するの
で、命令lはLDI1の使用可能スロット、この場合は
FU2に入る。次の命令mはeとkに依存するので、命
令mはLDI2の使用可能スロット、この場合はFU3
に入る。次の命令nはどの命令にも依存しないが、LD
I0とLDI1のすべてのスロットが使用されるので、命
令nはLDI2の使用可能スロットであるFU3に入
る。次の命令oはnに依存しているので、命令oはLD
I3の使用可能スロット、この場合はFU1に入る。次
に、グループ・フォーマッタ123の動作はシーケンス
内の次の命令に移行し、その命令はメモリ・システム1
07から取り出され、順次マシンの実行ユニットが実行
するためにディスパッチ・ユニット115によってディ
スパッチされる。
前述したグループ・フォーマッタ123によってフォー
マット化され、その後、並列エンジン125の機能ユニ
ットまたは分岐処理ユニットあるいはその両方によって
実行されるグループについて検討する。たとえば、LD
I1が実行されたときに、条件はx=1を示し、ラベル
LKでグループからの分岐が行われると想定する。この
時点では、新しいグループを開始するのではなく、図3
0〜31に示すように既存のグループがグループ・フォ
ーマッタ123にロードされ、機能強化される。第1
に、LDI1のグループからの分岐が除去され、命令k
は可能な限り最も早いLDI、この場合はLDI0のF
U3スロットに入る。次の命令lは命令kに依存するの
で、命令lはLDI1の使用可能スロット、この場合は
FU2に入る。次の命令mはeとkに依存するので、命
令mはLDI2の使用可能スロット、この場合はFU3
に入る。次の命令nはどの命令にも依存しないが、LD
I0とLDI1のすべてのスロットが使用されるので、命
令nはLDI2の使用可能スロットであるFU3に入
る。次の命令oはnに依存しているので、命令oはLD
I3の使用可能スロット、この場合はFU1に入る。次
に、グループ・フォーマッタ123の動作はシーケンス
内の次の命令に移行し、その命令はメモリ・システム1
07から取り出され、順次マシンの実行ユニットが実行
するためにディスパッチ・ユニット115によってディ
スパッチされる。
【0105】これを達成するため、フォーマット時に分
岐が検出されると、グループ・フォーマッタ123は、
その分岐命令をコード化し、TST505の現行状態と
ともにコード化した分岐命令を、分岐命令に割り振られ
たLDIのスロット、たとえば、BP0またはBP1に
格納する。したがって、各BPスロットは、大量の情報
を取り入れるので幅が広くなっている。次に、その後、
グループが並列エンジン125の機能ユニットまたは分
岐処理ユニットあるいはその両方によって実行される場
合、その分岐命令がグループ・フォーマッタ123によ
ってコード化された経路以外の経路をたどるように解決
されていると、CGB204内に格納されたLDIの現
行グループと、分岐命令によってコード化されたTST
の状態とがグループ・フォーマッタ123にロードさ
れ、その後、前述のように処理される。
岐が検出されると、グループ・フォーマッタ123は、
その分岐命令をコード化し、TST505の現行状態と
ともにコード化した分岐命令を、分岐命令に割り振られ
たLDIのスロット、たとえば、BP0またはBP1に
格納する。したがって、各BPスロットは、大量の情報
を取り入れるので幅が広くなっている。次に、その後、
グループが並列エンジン125の機能ユニットまたは分
岐処理ユニットあるいはその両方によって実行される場
合、その分岐命令がグループ・フォーマッタ123によ
ってコード化された経路以外の経路をたどるように解決
されていると、CGB204内に格納されたLDIの現
行グループと、分岐命令によってコード化されたTST
の状態とがグループ・フォーマッタ123にロードさ
れ、その後、前述のように処理される。
【0106】さらに、レジスタ・リネーム技法を前述の
ように使用する場合、分岐が検出されると、グループ・
フォーマッタ123は、コード化した分岐命令およびT
ST505の現行状態とともにリネーム情報の現行状態
を、その分岐命令に割り振られたLDIのスロットに格
納する。次に、その後、グループが並列エンジンの機能
ユニットまたは分岐処理ユニットあるいはその両方によ
って実行される場合、その分岐命令がグループ・フォー
マッタ123によってコード化された経路以外の経路を
たどるように解決されていると、CGB204内に格納
されたLDIの現行グループと、分岐命令によってコー
ド化されたTSTの状態とリネーム情報の状態とがグル
ープ・フォーマッタ123にロードされ、その後、処理
される。
ように使用する場合、分岐が検出されると、グループ・
フォーマッタ123は、コード化した分岐命令およびT
ST505の現行状態とともにリネーム情報の現行状態
を、その分岐命令に割り振られたLDIのスロットに格
納する。次に、その後、グループが並列エンジンの機能
ユニットまたは分岐処理ユニットあるいはその両方によ
って実行される場合、その分岐命令がグループ・フォー
マッタ123によってコード化された経路以外の経路を
たどるように解決されていると、CGB204内に格納
されたLDIの現行グループと、分岐命令によってコー
ド化されたTSTの状態とリネーム情報の状態とがグル
ープ・フォーマッタ123にロードされ、その後、処理
される。
【0107】本発明の第4の実施例によれば、グループ
・フォーマッタ123によって生成され、DIBに格納
されたLDIは圧縮することができる。この圧縮操作は
命令フィールド・エンコーダ503が実行することがで
き、それぞれの命令フィールドが個別に圧縮され、次に
あるグループのLDIに挿入され、そのグループがDI
Bに書き込まれる。この代替実施例では、たとえば、グ
ループをDIBに書き込むときに、それぞれのLDIに
ついて圧縮を行うか、グループ全体について圧縮を行う
ことができる。この場合、図2の制御ユニット202が
DIBヒット信号を受け取る(すなわち、シーケンス内
の次の命令がDIBに格納されたグループの一部であ
る)と、第1の実施例に関して前述したようにそのグル
ープのLDIを実行する前に、DIBから出力される圧
縮済みLDIをLDIに展開しなければならない。これ
を実施するため、前述の図6の現行グループ・バッファ
を図32に示すように変更することができる。
・フォーマッタ123によって生成され、DIBに格納
されたLDIは圧縮することができる。この圧縮操作は
命令フィールド・エンコーダ503が実行することがで
き、それぞれの命令フィールドが個別に圧縮され、次に
あるグループのLDIに挿入され、そのグループがDI
Bに書き込まれる。この代替実施例では、たとえば、グ
ループをDIBに書き込むときに、それぞれのLDIに
ついて圧縮を行うか、グループ全体について圧縮を行う
ことができる。この場合、図2の制御ユニット202が
DIBヒット信号を受け取る(すなわち、シーケンス内
の次の命令がDIBに格納されたグループの一部であ
る)と、第1の実施例に関して前述したようにそのグル
ープのLDIを実行する前に、DIBから出力される圧
縮済みLDIをLDIに展開しなければならない。これ
を実施するため、前述の図6の現行グループ・バッファ
を図32に示すように変更することができる。
【0108】より具体的には、CGB204は、DIB
から出力される圧縮済みLDI(CLDI)を受け取る
展開器1001を含むことができる。たとえば、展開器
1001は、DIBからCLDI0、CLDI1、CLD
I2、CLDI3を受け取ることができる。並列エンジン
125の制御ユニット202がDIBヒット信号を受け
取ると、同一マシン・サイクル中に展開器1001は、
DIBから出力されたCLDIをロードし、そのグルー
プの第1のCLDIであるCLDI0をLDIに展開
し、そのLDIをLDI0としてCGB204に書き込
むことが好ましい。次のサイクルでは、第1の実施例に
関して前述したように、並列エンジン125の機能ユニ
ットおよび分岐処理ユニットがLDI0の命令フィール
ドによって指定された機能を実行する。これが進行する
間に、展開器1001は残りのCLDI(CLDI1、
CLDI2、CLDI3)をLDIに展開し、そのLDI
(LDI1、LDI2、LDI3)をCGB204に書き
込む。第1の実施例に関して前述したようにLDI0の
命令フィールドによって指定された機能を実行する際の
並列エンジンの結果に応じて、次のサイクルで動作は、
グループ内の次のLDI、グループ内の別のLDI、ま
たはグループ外の命令に移行する。
から出力される圧縮済みLDI(CLDI)を受け取る
展開器1001を含むことができる。たとえば、展開器
1001は、DIBからCLDI0、CLDI1、CLD
I2、CLDI3を受け取ることができる。並列エンジン
125の制御ユニット202がDIBヒット信号を受け
取ると、同一マシン・サイクル中に展開器1001は、
DIBから出力されたCLDIをロードし、そのグルー
プの第1のCLDIであるCLDI0をLDIに展開
し、そのLDIをLDI0としてCGB204に書き込
むことが好ましい。次のサイクルでは、第1の実施例に
関して前述したように、並列エンジン125の機能ユニ
ットおよび分岐処理ユニットがLDI0の命令フィール
ドによって指定された機能を実行する。これが進行する
間に、展開器1001は残りのCLDI(CLDI1、
CLDI2、CLDI3)をLDIに展開し、そのLDI
(LDI1、LDI2、LDI3)をCGB204に書き
込む。第1の実施例に関して前述したようにLDI0の
命令フィールドによって指定された機能を実行する際の
並列エンジンの結果に応じて、次のサイクルで動作は、
グループ内の次のLDI、グループ内の別のLDI、ま
たはグループ外の命令に移行する。
【0109】代替実施例では、グループ実行時間を最小
限にするため、グループの第1のLDIであるLDI0
については、前述のようにグループ・フォーマッタ12
3によって実行される圧縮動作を使用禁止にすることが
できる。
限にするため、グループの第1のLDIであるLDI0
については、前述のようにグループ・フォーマッタ12
3によって実行される圧縮動作を使用禁止にすることが
できる。
【0110】上記のすべての実施例では、並列エンジン
125の実行ユニットがCGB204内に格納されたL
DIの命令フィールドによってコード化された操作の実
行を終了すると、実行結果を適切な資源に片づける必要
がある。並列エンジン125がレジスタ・リネームを使
用しない場合、実行ユニットは、それぞれのLDIの後
に適切な資源に実行結果を片づけることができる。しか
し、並列エンジン125がレジスタ・リネームを使用す
る場合は、実行ユニットは、並列エンジン125がグル
ープからの分岐を検出したとき、またはグループの末尾
を検出したときに、実行結果を片づける必要がある。こ
の場合、片づけ操作は、必要であればリネーム・フラグ
に応じて、リネーム済み資源に格納されている実行結果
を元の割振り済み資源に転送することを含む。
125の実行ユニットがCGB204内に格納されたL
DIの命令フィールドによってコード化された操作の実
行を終了すると、実行結果を適切な資源に片づける必要
がある。並列エンジン125がレジスタ・リネームを使
用しない場合、実行ユニットは、それぞれのLDIの後
に適切な資源に実行結果を片づけることができる。しか
し、並列エンジン125がレジスタ・リネームを使用す
る場合は、実行ユニットは、並列エンジン125がグル
ープからの分岐を検出したとき、またはグループの末尾
を検出したときに、実行結果を片づける必要がある。こ
の場合、片づけ操作は、必要であればリネーム・フラグ
に応じて、リネーム済み資源に格納されている実行結果
を元の割振り済み資源に転送することを含む。
【0111】さらに、何らかの事象を特別に処理するた
めに実行の流れを中断する必要があるような状況(たと
えば、ページ・フォルト)は頻繁に発生する。このよう
な状況は、割込みまたは例外と呼ばれる。多くの場合、
例外が発生したときのマシンの状態をシステムが正確に
把握することが重要である。本発明のように命令を順不
同で実行できる場合、これは困難なことになる。
めに実行の流れを中断する必要があるような状況(たと
えば、ページ・フォルト)は頻繁に発生する。このよう
な状況は、割込みまたは例外と呼ばれる。多くの場合、
例外が発生したときのマシンの状態をシステムが正確に
把握することが重要である。本発明のように命令を順不
同で実行できる場合、これは困難なことになる。
【0112】このような要件に対処するため、本発明の
並列エンジン125は、グループの実行が完了した場合
のみ、操作がレジスタ書込み操作またはメモリ・ストア
操作のいずれであってもその操作の結果をアーキテクチ
ャ化レジスタにコミットすることが好ましい。グループ
内で例外が発生した場合、マシンの状態がそのグループ
に入ったときの状態そのものになるように、実行したが
まだコミットしていない命令の結果は破棄される。この
場合、現行グループのアドレスを使用して、命令を取り
出し、もう一度、例外点に達するまでその命令を一度に
1つずつ順次マシンで実行する。例外の処理後、並列エ
ンジン125の実行は、DIBでヒットすれば例外の原
因となった命令の後の命令から再開し、それ以外の場合
は順次モードで再開する。
並列エンジン125は、グループの実行が完了した場合
のみ、操作がレジスタ書込み操作またはメモリ・ストア
操作のいずれであってもその操作の結果をアーキテクチ
ャ化レジスタにコミットすることが好ましい。グループ
内で例外が発生した場合、マシンの状態がそのグループ
に入ったときの状態そのものになるように、実行したが
まだコミットしていない命令の結果は破棄される。この
場合、現行グループのアドレスを使用して、命令を取り
出し、もう一度、例外点に達するまでその命令を一度に
1つずつ順次マシンで実行する。例外の処理後、並列エ
ンジン125の実行は、DIBでヒットすれば例外の原
因となった命令の後の命令から再開し、それ以外の場合
は順次モードで再開する。
【0113】上記の説明から分かるように、実行履歴を
管理することにより、サイクル時間が短い短パイプライ
ンを使用して、複数回検出される命令を実行できるはず
である。また、並列実行可能な命令が初めて検出された
ときにそのIDも管理する場合、その実行のために十分
な機能ユニットが使用可能になっていれば、その後、毎
回、これらの命令を並列実行することができる。
管理することにより、サイクル時間が短い短パイプライ
ンを使用して、複数回検出される命令を実行できるはず
である。また、並列実行可能な命令が初めて検出された
ときにそのIDも管理する場合、その実行のために十分
な機能ユニットが使用可能になっていれば、その後、毎
回、これらの命令を並列実行することができる。
【0114】並列実行可能な命令をデコードし判定する
ための論理回路は複雑である必要はない。というのは、
このような命令は、複数のステージを有するパイプライ
ン上で複数サイクル中に実行できるからである。複数サ
イクルを使用してこの操作を実行する際のコストは、同
一命令をより短いパイプライン上で並列に繰り返し実行
することによって十分回収されることが予想され、実際
に確認されている。
ための論理回路は複雑である必要はない。というのは、
このような命令は、複数のステージを有するパイプライ
ン上で複数サイクル中に実行できるからである。複数サ
イクルを使用してこの操作を実行する際のコストは、同
一命令をより短いパイプライン上で並列に繰り返し実行
することによって十分回収されることが予想され、実際
に確認されている。
【0115】事前デコード済み命令キャッシュなど、こ
れまでに提案された方式と比較すると、この方式にはい
くつかの利点がある。第1に、プログラムの実行中に実
際に検出された命令だけがDIBに含まれるので無駄な
作業がほとんど発生しないのに対し、事前デコード済み
命令キャッシュでは、命令が初めて検出されたときでも
実行経路を予想する必要がある。第2に、実行済み分岐
間で命令を統合する際に追加のコストが一切発生しな
い。第3に、複数の分岐経路からの命令が次のレベルの
メモリから取り出されるのを待つ必要がなく、このよう
な経路をデコード済み命令グループに動的に統合するこ
とができる。第4に、コード化機構は、予想待ち時間で
はなく、実際の待ち時間に応じて動的に調整される。第
5に、この方式は既存の命令セット・アーキテクチャで
も十分に機能し、再コンパイルに依存しない。
れまでに提案された方式と比較すると、この方式にはい
くつかの利点がある。第1に、プログラムの実行中に実
際に検出された命令だけがDIBに含まれるので無駄な
作業がほとんど発生しないのに対し、事前デコード済み
命令キャッシュでは、命令が初めて検出されたときでも
実行経路を予想する必要がある。第2に、実行済み分岐
間で命令を統合する際に追加のコストが一切発生しな
い。第3に、複数の分岐経路からの命令が次のレベルの
メモリから取り出されるのを待つ必要がなく、このよう
な経路をデコード済み命令グループに動的に統合するこ
とができる。第4に、コード化機構は、予想待ち時間で
はなく、実際の待ち時間に応じて動的に調整される。第
5に、この方式は既存の命令セット・アーキテクチャで
も十分に機能し、再コンパイルに依存しない。
【0116】従来のスーパースカラー方式と比較する
と、この方式にはいくつかの利点がある。第1に、ディ
スパッチ操作とデコード操作を複数サイクル中に実行す
ることにより、ディスパッチ・デコード論理回路の複雑
さが大幅に低減される。第2に、同じ理由から、プロセ
ッサのサイクル時間が短縮される。第3に、コード内の
唯一の予想経路ではなく、コード内の複数の経路からの
動作を統合することにより、機能ユニットの使用効率を
改善することができる。第4に、分岐予想および分岐履
歴テーブルという情報をすべて命令ストリーム履歴にフ
ォールディングすることにより、このようなテーブルの
必要性が解消される。
と、この方式にはいくつかの利点がある。第1に、ディ
スパッチ操作とデコード操作を複数サイクル中に実行す
ることにより、ディスパッチ・デコード論理回路の複雑
さが大幅に低減される。第2に、同じ理由から、プロセ
ッサのサイクル時間が短縮される。第3に、コード内の
唯一の予想経路ではなく、コード内の複数の経路からの
動作を統合することにより、機能ユニットの使用効率を
改善することができる。第4に、分岐予想および分岐履
歴テーブルという情報をすべて命令ストリーム履歴にフ
ォールディングすることにより、このようなテーブルの
必要性が解消される。
【0117】VLIWマシンと比較すると、この方式に
は次の利点がある。第1に、いずれの既存の命令セット
・アーキテクチャでも十分に機能し、新しい命令セット
を定義する必要がない。第2に、コンパイルしたコード
に影響せずに、技術的な能力/制限やプロセッサ・コス
ト上の制限に適合するように、機能ユニットの数とDI
Bの内部コード化を変更することができる。
は次の利点がある。第1に、いずれの既存の命令セット
・アーキテクチャでも十分に機能し、新しい命令セット
を定義する必要がない。第2に、コンパイルしたコード
に影響せずに、技術的な能力/制限やプロセッサ・コス
ト上の制限に適合するように、機能ユニットの数とDI
Bの内部コード化を変更することができる。
【0118】特定の実施例に関連して本発明を示し説明
してきたが、当業者であれば、本発明の精神および範囲
を逸脱せずに形式および細部について上記およびその他
の変更が可能であることが分かるだろう。
してきたが、当業者であれば、本発明の精神および範囲
を逸脱せずに形式および細部について上記およびその他
の変更が可能であることが分かるだろう。
【0119】まとめとして、本発明の構成に関して以下
の事項を開示する。
の事項を開示する。
【0120】(1) 第1の処理エンジンであって、少なくとも1つの実行ユ
ニットによって実行すべき命令を格納する第1のメモリ
と、取出し制御信号に応じて、前記第1のメモリから命
令待ち行列に命令を取り出す命令取出しユニットと、前
記実行ユニットによる実行のために前記命令待ち行列に
格納された命令をディスパッチするディスパッチ・ユニ
ットと、前記実行ユニットによる命令の実行に応じて、
前記取出し制御信号を更新する手段とを含む、第1の処
理エンジンと、前記第1の処理エンジンの前記実行ユニ
ットによる前記命令シーケンスの実行と同時に、前記デ
ィスパッチ・ユニットによりディスパッチされる命令シ
ーケンスの代替コード化を生成するグループ・フォーマ
ッタと、前記グループ・フォーマッタによって生成され
た前記代替コード化を格納する第2のメモリと、前記取
出し制御信号が前記第2のメモリに格納された前記代替
コード化に対応することを検出したときに、前記第2の
メモリに格納された前記代替コード化を実行する代替コ
ード化実行手段と前記代替コード化実行手段が、複数の
実行ユニットを含み、前記グループ・フォーマッタによ
って生成された前記代替コード化が、1組の長デコード
済み命令を含み、前記1組の長デコード済み命令のそれ
ぞれの長デコード済み命令(LDI)が、それぞれが前
記代替コード化実行手段の前記複数の実行ユニットの1
つに関連する複数の命令フィールドを含み、それぞれの
命令フィールドが、単一マシン・サイクル中に前記代替
コード化実行手段の関連実行ユニットによって実行可能
であることを特徴とする、コンピュータ処理装置。 (2) 前記代替コード化実行手段が、前記命令フィールドが使
用または定義あるいはその両方を行うことができる複数
のレジスタ資源を含み、前記グループ・フォーマッタ
が、前記ディスパッチ・ユニットによりディスパッチさ
れた前記命令シーケンスに応じて、前記命令フィールド
を生成する命令フィールド・エンコーダと、前記レジス
タ資源のそれぞれに関連するタイム・スタンプIDを格
納するタイム・スタンプ・テーブルであって、前記タイ
ム・スタンプIDが、前記1組の長デコード済み命令の
うちのどのLDIで関連レジスタ資源が使用可能になる
かを識別する、タイム・スタンプ・テーブルと、前記命
令シーケンス内の命令間の依存関係と、前記タイム・ス
タンプ・テーブルに格納されたタイム・スタンプID
と、前記命令フィールド・エンコーダによって生成され
た前記命令フィールドとに応じて、前記1組の長デコー
ド済み命令を構築する割振り機構とを含むことを特徴と
する、(1)に記載のコンピュータ処理装置。 (3) 前記割振り機構が、前記命令シーケンス内の命令の待ち
時間に応じて、前記1組の長デコード済み命令を構築す
ることを特徴とする、(2)に記載のコンピュータ処理
装置。 (4) 前記命令シーケンス内の1つの命令が事前定義済み停止
命令に対応することを検出したときに、前記割振り機構
が、前記1組の長デコード済み命令をクローズすること
を特徴とする、(2)に記載のコンピュータ処理装置。 (5) 前記命令シーケンスの1つの命令が現行グループの命令
フィールドによって以前に定義された資源を定義するこ
とを検出したときに、前記割振り機構が、前記資源を空
き資源にリネームすることを特徴とする、(2)に記載
のコンピュータ処理装置。 (6) 前記タイム・スタンプ・テーブルが、ロード操作とスト
ア操作にそれぞれ関連するタイム・スタンプIDを含
み、前記割振り機構が、ロード操作とストア操作に関連
する前記タイム・スタンプIDを使用して、前記ロード
操作とストア操作の順序を維持することを特徴とする、
(2)に記載のコンピュータ処理装置。 (7) 前記第2のメモリが、それぞれが1組の長デコード済み
命令を含む、複数項目の配列と、前記複数項目の配列の
うちの1つの項目が前記取出し制御信号に対応するかど
うかを判定する手段と、前記1つの項目が前記取出し制
御信号に対応すると判定したときに、前記1つの項目か
ら1組の長デコード済み命令を読み出す手段とを含み、
前記代替コード化実行手段が、前記第2のメモリから読
み出した前記1組の長デコード済み命令を格納するバッ
ファと、前記バッファに格納された前記1組の長デコー
ド済み命令の前記命令フィールドを実行する前記複数の
実行ユニットとを含むことを特徴とする、(1)に記載
のコンピュータ処理装置。 (8) 前記代替コード化実行手段が、前記命令フィールドの実
行結果に応じて前記取出し制御信号を更新する手段をさ
らに含むことを特徴とする、(7)に記載のコンピュー
タ処理装置。 (9) 前記複数の実行ユニットが、各LDIの実行終了後に、
各LDIの前記命令フィールドの実行結果を適切なレジ
スタ手段に片づけることを特徴とする、(7)に記載の
コンピュータ処理装置。 (10) 前記複数の実行ユニットが、前記1組の長デコード済み
命令の実行終了後に、前記1組の長デコード済み命令の
前記命令フィールドの実行結果を片づけることを特徴と
する、(7)に記載のコンピュータ処理装置。 (11) 例外を検出したときに、前記バッファに格納された前記
1組の長デコード済み命令内にコード化された第1の命
令に対応するように、前記取出し制御信号を更新し、前
記第1の処理エンジンに関連するレジスタ資源を前記第
1の命令以前のその元の状態に更新し、前記第1の処理
エンジンが前記第1の命令の処理を開始できるようにす
る、例外制御装置をさらに含むことを特徴とする、
(7)に記載のコンピュータ処理装置。 (12) 前記第2のメモリに格納された前記長デコード済み命令
の1つまたは複数が圧縮され、前記代替コード化実行手
段が、圧縮されたそれぞれの長デコード済み命令を実行
に先立って展開する手段を含むことを特徴とする、
(7)に記載のコンピュータ処理装置。 (13) 前記バッファに格納された前記1組の長デコード済み命
令の前記命令フィールドの1つが、前記バッファに格納
された前記1組の長デコード済み命令から外への分岐命
令として解決されていることを検出したときに、その後
の処理のために、前記バッファに現在格納されている前
記1組の長デコード済み命令を前記グループ・フォーマ
ッタにロードする手段をさらに含むことを特徴とする、
(7)に記載のコンピュータ処理装置。 (14) 命令シーケンスが第1のメモリに格納されているコンピ
ュータ処理システムにおいて、取出し制御信号に応じ
て、前記第1のメモリから命令待ち行列に命令を取り出
すステップと、少なくとも1つの実行ユニットによる実
行のために前記命令待ち行列に格納された命令をディス
パッチするステップと、前記実行ユニットによる命令の
実行に応じて、前記取出し制御信号を更新するステップ
と、前記実行ユニットによる前記命令シーケンスの実行
と同時にディスパッチされる命令シーケンスの代替コー
ド化を生成するステップと、前記代替コード化を第2の
メモリに格納するステップと、前記取出し制御信号が前
記第2のメモリに格納された前記代替コード化に対応す
ることを検出したときに、前記第2のメモリに格納され
た前記代替コード化を実行するステップとを含み、前記
代替コード化が、1組の長デコード済み命令を含み、前
記1組の長デコード済み命令のそれぞれの長デコード済
み命令(LDI)が、それぞれが前記複数の実行ユニッ
トの1つに関連する複数の命令フィールドを含み、それ
ぞれの命令フィールドが、単一マシン・サイクル中に関
連実行ユニットによって実行可能であることを特徴とす
る、方法。 (15) 前記コンピュータ処理システムが、前記命令フィールド
が使用または定義あるいはその両方を行うことができる
複数のレジスタ資源と、実行のためにディスパッチされ
た前記命令シーケンスに応じて、前記命令フィールドを
生成する命令フィールド・エンコーダと、前記レジスタ
資源のそれぞれに関連するタイム・スタンプIDを格納
するタイム・スタンプ・テーブルであって、前記タイム
・スタンプIDが、前記1組の長デコード済み命令のう
ちのどのLDIで関連レジスタ資源が使用可能になるか
を識別する、タイム・スタンプ・テーブルとを含み、前
記方法が、前記命令シーケンス内の命令間の依存関係
と、前記タイム・スタンプ・テーブルに格納されたタイ
ム・スタンプIDと、前記命令フィールド・エンコーダ
によって生成された前記命令フィールドとに応じて、前
記1組の長デコード済み命令を構築するステップをさら
に含むことを特徴とする、(14)に記載の方法。 (16) 前記命令シーケンス内の命令の待ち時間に応じて、前記
1組の長デコード済み命令が構築されることを特徴とす
る、(15)に記載の方法。 (17) 前記命令シーケンス内の1つの命令が事前定義済み停止
命令に対応することを検出したときに、前記1組の長デ
コード済み命令をクローズするステップをさらに含むこ
とを特徴とする、(15)に記載の方法。 (18) 前記命令シーケンスの1つの命令が前記1組の長デコー
ド済み命令内の1つのLDIの命令フィールドによって
以前に定義された資源を定義することを検出したとき
に、前記資源を空き資源にリネームするステップをさら
に含むことを特徴とする、(15)に記載の方法。 (19) 前記タイム・スタンプ・テーブルが、ロード操作とスト
ア操作にそれぞれ関連するタイム・スタンプIDを含
み、ロード操作とストア操作に関連する前記タイム・ス
タンプIDに従って、前記ロード操作とストア操作の順
序を維持するステップをさらに含むことを特徴とする、
(15)に記載の方法。 (20) 前記第2のメモリが、それぞれが1組の長デコード済み
命令を含む、複数項目の配列を含み、前記複数項目の配
列のうちの1つの項目が前記取出し制御信号に対応する
かどうかを判定するステップと、前記1つの項目が前記
取出し制御信号に対応すると判定したときに、前記1つ
の項目から1組の長デコード済み命令を読み出すステッ
プと、前記第2のメモリから読み出した前記1組の長デ
コード済み命令を格納するステップと、前記バッファに
格納された前記1組の長デコード済み命令の前記命令フ
ィールドを実行するステップとをさらに含むことを特徴
とする、(15)に記載の方法。 (21) 前記命令フィールドの実行結果に応じて前記取出し制御
信号を更新するステップをさらに含むことを特徴とす
る、(20)に記載の方法。 (22) 各LDIの実行終了後に、各LDIの前記命令フィール
ドの実行結果を適切なレジスタ手段に片づけるステップ
をさらに含むことを特徴とする、(20)に記載の方
法。 (23) 前記1組の長デコード済み命令の実行終了後に、前記1
組の長デコード済み命令の前記命令フィールドの実行結
果を片づけるステップをさらに含むことを特徴とする、
(20)に記載の方法。 (24) 例外を検出したときに、前記バッファに格納された前記
1組の長デコード済み命令内にコード化された第1の命
令に対応するように、前記取出し制御信号を更新するス
テップと、前記少なくとも1つの実行ユニットに関連す
るレジスタ資源を前記第1の命令以前のその元の状態に
更新するステップと、前記少なくとも1つの実行ユニッ
トによる実行のために前記第1の命令の処理を可能にす
るステップとをさらに含むことを特徴とする、(20)
に記載の方法。 (25) 前記長デコード済み命令の前記1つまたは複数を前記第
2のメモリに格納する前に、前記1つまたは複数の長デ
コード済み命令を圧縮するステップと、前記1つまたは
複数の長デコード済み命令を実行する前に、圧縮された
それぞれの長デコード済み命令を展開するステップとを
さらに含むことを特徴とする、(20)に記載の方法。 (26) 前記バッファに格納された前記1組の長デコード済み命
令の前記命令フィールドの1つが、前記バッファに格納
された前記1組の長デコード済み命令から外への分岐命
令として解決されていることを検出したときに、前記バ
ッファに現在格納されている前記1組の長デコード済み
命令を更新するステップをさらに含むことを特徴とす
る、(20)に記載の方法。 (27) 前記バッファに格納された前記1組の長デコード済み命
令の前記更新が、前記命令シーケンスと、前記命令シー
ケンス内の命令間の依存関係に応じて、前記1組の長デ
コード済み命令に少なくとも1つの長デコード済み命令
を追加するステップを含むことを特徴とする、(20)
に記載の方法。 (28) 前記少なくとも1つの長デコード済み命令が、前記命令
シーケンス内の前記命令の待ち時間に応じて前記バッフ
ァに格納された前記1組の長デコード済み命令に追加さ
れることを特徴とする、(27)に記載の方法。
ニットによって実行すべき命令を格納する第1のメモリ
と、取出し制御信号に応じて、前記第1のメモリから命
令待ち行列に命令を取り出す命令取出しユニットと、前
記実行ユニットによる実行のために前記命令待ち行列に
格納された命令をディスパッチするディスパッチ・ユニ
ットと、前記実行ユニットによる命令の実行に応じて、
前記取出し制御信号を更新する手段とを含む、第1の処
理エンジンと、前記第1の処理エンジンの前記実行ユニ
ットによる前記命令シーケンスの実行と同時に、前記デ
ィスパッチ・ユニットによりディスパッチされる命令シ
ーケンスの代替コード化を生成するグループ・フォーマ
ッタと、前記グループ・フォーマッタによって生成され
た前記代替コード化を格納する第2のメモリと、前記取
出し制御信号が前記第2のメモリに格納された前記代替
コード化に対応することを検出したときに、前記第2の
メモリに格納された前記代替コード化を実行する代替コ
ード化実行手段と前記代替コード化実行手段が、複数の
実行ユニットを含み、前記グループ・フォーマッタによ
って生成された前記代替コード化が、1組の長デコード
済み命令を含み、前記1組の長デコード済み命令のそれ
ぞれの長デコード済み命令(LDI)が、それぞれが前
記代替コード化実行手段の前記複数の実行ユニットの1
つに関連する複数の命令フィールドを含み、それぞれの
命令フィールドが、単一マシン・サイクル中に前記代替
コード化実行手段の関連実行ユニットによって実行可能
であることを特徴とする、コンピュータ処理装置。 (2) 前記代替コード化実行手段が、前記命令フィールドが使
用または定義あるいはその両方を行うことができる複数
のレジスタ資源を含み、前記グループ・フォーマッタ
が、前記ディスパッチ・ユニットによりディスパッチさ
れた前記命令シーケンスに応じて、前記命令フィールド
を生成する命令フィールド・エンコーダと、前記レジス
タ資源のそれぞれに関連するタイム・スタンプIDを格
納するタイム・スタンプ・テーブルであって、前記タイ
ム・スタンプIDが、前記1組の長デコード済み命令の
うちのどのLDIで関連レジスタ資源が使用可能になる
かを識別する、タイム・スタンプ・テーブルと、前記命
令シーケンス内の命令間の依存関係と、前記タイム・ス
タンプ・テーブルに格納されたタイム・スタンプID
と、前記命令フィールド・エンコーダによって生成され
た前記命令フィールドとに応じて、前記1組の長デコー
ド済み命令を構築する割振り機構とを含むことを特徴と
する、(1)に記載のコンピュータ処理装置。 (3) 前記割振り機構が、前記命令シーケンス内の命令の待ち
時間に応じて、前記1組の長デコード済み命令を構築す
ることを特徴とする、(2)に記載のコンピュータ処理
装置。 (4) 前記命令シーケンス内の1つの命令が事前定義済み停止
命令に対応することを検出したときに、前記割振り機構
が、前記1組の長デコード済み命令をクローズすること
を特徴とする、(2)に記載のコンピュータ処理装置。 (5) 前記命令シーケンスの1つの命令が現行グループの命令
フィールドによって以前に定義された資源を定義するこ
とを検出したときに、前記割振り機構が、前記資源を空
き資源にリネームすることを特徴とする、(2)に記載
のコンピュータ処理装置。 (6) 前記タイム・スタンプ・テーブルが、ロード操作とスト
ア操作にそれぞれ関連するタイム・スタンプIDを含
み、前記割振り機構が、ロード操作とストア操作に関連
する前記タイム・スタンプIDを使用して、前記ロード
操作とストア操作の順序を維持することを特徴とする、
(2)に記載のコンピュータ処理装置。 (7) 前記第2のメモリが、それぞれが1組の長デコード済み
命令を含む、複数項目の配列と、前記複数項目の配列の
うちの1つの項目が前記取出し制御信号に対応するかど
うかを判定する手段と、前記1つの項目が前記取出し制
御信号に対応すると判定したときに、前記1つの項目か
ら1組の長デコード済み命令を読み出す手段とを含み、
前記代替コード化実行手段が、前記第2のメモリから読
み出した前記1組の長デコード済み命令を格納するバッ
ファと、前記バッファに格納された前記1組の長デコー
ド済み命令の前記命令フィールドを実行する前記複数の
実行ユニットとを含むことを特徴とする、(1)に記載
のコンピュータ処理装置。 (8) 前記代替コード化実行手段が、前記命令フィールドの実
行結果に応じて前記取出し制御信号を更新する手段をさ
らに含むことを特徴とする、(7)に記載のコンピュー
タ処理装置。 (9) 前記複数の実行ユニットが、各LDIの実行終了後に、
各LDIの前記命令フィールドの実行結果を適切なレジ
スタ手段に片づけることを特徴とする、(7)に記載の
コンピュータ処理装置。 (10) 前記複数の実行ユニットが、前記1組の長デコード済み
命令の実行終了後に、前記1組の長デコード済み命令の
前記命令フィールドの実行結果を片づけることを特徴と
する、(7)に記載のコンピュータ処理装置。 (11) 例外を検出したときに、前記バッファに格納された前記
1組の長デコード済み命令内にコード化された第1の命
令に対応するように、前記取出し制御信号を更新し、前
記第1の処理エンジンに関連するレジスタ資源を前記第
1の命令以前のその元の状態に更新し、前記第1の処理
エンジンが前記第1の命令の処理を開始できるようにす
る、例外制御装置をさらに含むことを特徴とする、
(7)に記載のコンピュータ処理装置。 (12) 前記第2のメモリに格納された前記長デコード済み命令
の1つまたは複数が圧縮され、前記代替コード化実行手
段が、圧縮されたそれぞれの長デコード済み命令を実行
に先立って展開する手段を含むことを特徴とする、
(7)に記載のコンピュータ処理装置。 (13) 前記バッファに格納された前記1組の長デコード済み命
令の前記命令フィールドの1つが、前記バッファに格納
された前記1組の長デコード済み命令から外への分岐命
令として解決されていることを検出したときに、その後
の処理のために、前記バッファに現在格納されている前
記1組の長デコード済み命令を前記グループ・フォーマ
ッタにロードする手段をさらに含むことを特徴とする、
(7)に記載のコンピュータ処理装置。 (14) 命令シーケンスが第1のメモリに格納されているコンピ
ュータ処理システムにおいて、取出し制御信号に応じ
て、前記第1のメモリから命令待ち行列に命令を取り出
すステップと、少なくとも1つの実行ユニットによる実
行のために前記命令待ち行列に格納された命令をディス
パッチするステップと、前記実行ユニットによる命令の
実行に応じて、前記取出し制御信号を更新するステップ
と、前記実行ユニットによる前記命令シーケンスの実行
と同時にディスパッチされる命令シーケンスの代替コー
ド化を生成するステップと、前記代替コード化を第2の
メモリに格納するステップと、前記取出し制御信号が前
記第2のメモリに格納された前記代替コード化に対応す
ることを検出したときに、前記第2のメモリに格納され
た前記代替コード化を実行するステップとを含み、前記
代替コード化が、1組の長デコード済み命令を含み、前
記1組の長デコード済み命令のそれぞれの長デコード済
み命令(LDI)が、それぞれが前記複数の実行ユニッ
トの1つに関連する複数の命令フィールドを含み、それ
ぞれの命令フィールドが、単一マシン・サイクル中に関
連実行ユニットによって実行可能であることを特徴とす
る、方法。 (15) 前記コンピュータ処理システムが、前記命令フィールド
が使用または定義あるいはその両方を行うことができる
複数のレジスタ資源と、実行のためにディスパッチされ
た前記命令シーケンスに応じて、前記命令フィールドを
生成する命令フィールド・エンコーダと、前記レジスタ
資源のそれぞれに関連するタイム・スタンプIDを格納
するタイム・スタンプ・テーブルであって、前記タイム
・スタンプIDが、前記1組の長デコード済み命令のう
ちのどのLDIで関連レジスタ資源が使用可能になるか
を識別する、タイム・スタンプ・テーブルとを含み、前
記方法が、前記命令シーケンス内の命令間の依存関係
と、前記タイム・スタンプ・テーブルに格納されたタイ
ム・スタンプIDと、前記命令フィールド・エンコーダ
によって生成された前記命令フィールドとに応じて、前
記1組の長デコード済み命令を構築するステップをさら
に含むことを特徴とする、(14)に記載の方法。 (16) 前記命令シーケンス内の命令の待ち時間に応じて、前記
1組の長デコード済み命令が構築されることを特徴とす
る、(15)に記載の方法。 (17) 前記命令シーケンス内の1つの命令が事前定義済み停止
命令に対応することを検出したときに、前記1組の長デ
コード済み命令をクローズするステップをさらに含むこ
とを特徴とする、(15)に記載の方法。 (18) 前記命令シーケンスの1つの命令が前記1組の長デコー
ド済み命令内の1つのLDIの命令フィールドによって
以前に定義された資源を定義することを検出したとき
に、前記資源を空き資源にリネームするステップをさら
に含むことを特徴とする、(15)に記載の方法。 (19) 前記タイム・スタンプ・テーブルが、ロード操作とスト
ア操作にそれぞれ関連するタイム・スタンプIDを含
み、ロード操作とストア操作に関連する前記タイム・ス
タンプIDに従って、前記ロード操作とストア操作の順
序を維持するステップをさらに含むことを特徴とする、
(15)に記載の方法。 (20) 前記第2のメモリが、それぞれが1組の長デコード済み
命令を含む、複数項目の配列を含み、前記複数項目の配
列のうちの1つの項目が前記取出し制御信号に対応する
かどうかを判定するステップと、前記1つの項目が前記
取出し制御信号に対応すると判定したときに、前記1つ
の項目から1組の長デコード済み命令を読み出すステッ
プと、前記第2のメモリから読み出した前記1組の長デ
コード済み命令を格納するステップと、前記バッファに
格納された前記1組の長デコード済み命令の前記命令フ
ィールドを実行するステップとをさらに含むことを特徴
とする、(15)に記載の方法。 (21) 前記命令フィールドの実行結果に応じて前記取出し制御
信号を更新するステップをさらに含むことを特徴とす
る、(20)に記載の方法。 (22) 各LDIの実行終了後に、各LDIの前記命令フィール
ドの実行結果を適切なレジスタ手段に片づけるステップ
をさらに含むことを特徴とする、(20)に記載の方
法。 (23) 前記1組の長デコード済み命令の実行終了後に、前記1
組の長デコード済み命令の前記命令フィールドの実行結
果を片づけるステップをさらに含むことを特徴とする、
(20)に記載の方法。 (24) 例外を検出したときに、前記バッファに格納された前記
1組の長デコード済み命令内にコード化された第1の命
令に対応するように、前記取出し制御信号を更新するス
テップと、前記少なくとも1つの実行ユニットに関連す
るレジスタ資源を前記第1の命令以前のその元の状態に
更新するステップと、前記少なくとも1つの実行ユニッ
トによる実行のために前記第1の命令の処理を可能にす
るステップとをさらに含むことを特徴とする、(20)
に記載の方法。 (25) 前記長デコード済み命令の前記1つまたは複数を前記第
2のメモリに格納する前に、前記1つまたは複数の長デ
コード済み命令を圧縮するステップと、前記1つまたは
複数の長デコード済み命令を実行する前に、圧縮された
それぞれの長デコード済み命令を展開するステップとを
さらに含むことを特徴とする、(20)に記載の方法。 (26) 前記バッファに格納された前記1組の長デコード済み命
令の前記命令フィールドの1つが、前記バッファに格納
された前記1組の長デコード済み命令から外への分岐命
令として解決されていることを検出したときに、前記バ
ッファに現在格納されている前記1組の長デコード済み
命令を更新するステップをさらに含むことを特徴とす
る、(20)に記載の方法。 (27) 前記バッファに格納された前記1組の長デコード済み命
令の前記更新が、前記命令シーケンスと、前記命令シー
ケンス内の命令間の依存関係に応じて、前記1組の長デ
コード済み命令に少なくとも1つの長デコード済み命令
を追加するステップを含むことを特徴とする、(20)
に記載の方法。 (28) 前記少なくとも1つの長デコード済み命令が、前記命令
シーケンス内の前記命令の待ち時間に応じて前記バッフ
ァに格納された前記1組の長デコード済み命令に追加さ
れることを特徴とする、(27)に記載の方法。
【図1】本発明によるコンピュータ処理装置の編成を示
す図である。
す図である。
【図2】図1の並列エンジンの編成を示す図である。
【図3】図2のデコード済み命令バッファの入力フォー
マットを示す図である。
マットを示す図である。
【図4】図2の現行グループ・バッファの入力フォーマ
ットを示す図である。
ットを示す図である。
【図5】図2のデコード済み命令バッファの機能ブロッ
ク図である。
ク図である。
【図6】図2の現行グループ・バッファの機能ブロック
図である。
図である。
【図7】図1の実行ユニットによって実行される一連の
命令を示すプログラム・グラフである。
命令を示すプログラム・グラフである。
【図8】図7のプログラム・シーケンス用の命令間の依
存関係を示す表である。
存関係を示す表である。
【図9】図7のプログラム・シーケンスでの実行可能経
路を示す図である。
路を示す図である。
【図10】図7のプログラム・シーケンスでの実行可能
経路を示す図である。
経路を示す図である。
【図11】図7のプログラム・シーケンスでの実行可能
経路を示す図である。
経路を示す図である。
【図12】図9のプログラム・シーケンスを処理する際
の図1のグループ・フォーマッタの動作を示す図であ
る。
の図1のグループ・フォーマッタの動作を示す図であ
る。
【図13】図10のプログラム・シーケンスを処理する
際の図1のグループ・フォーマッタの動作を示す図であ
る。
際の図1のグループ・フォーマッタの動作を示す図であ
る。
【図14】図11のプログラム・シーケンスを処理する
際の図1のグループ・フォーマッタの動作を示す図であ
る。
際の図1のグループ・フォーマッタの動作を示す図であ
る。
【図15】図1のグループ・フォーマッタの機能ブロッ
ク図である。
ク図である。
【図16】1群のLDIを構築する際の図15の割振り
機構の動作を示す流れ図である。
機構の動作を示す流れ図である。
【図17】1群のLDIを構築する際の図15の割振り
機構の動作を示す流れ図である。
機構の動作を示す流れ図である。
【図18】1群のLDIをクローズする際の図15の割
振り機構の動作を示す流れ図である。
振り機構の動作を示す流れ図である。
【図19】割振り機構がグループ・バッファ内に1群の
LDIを構築するときの図15のタイム・スタンプ・テ
ーブルとグループ・バッファの状態を示す図である。
LDIを構築するときの図15のタイム・スタンプ・テ
ーブルとグループ・バッファの状態を示す図である。
【図20】割振り機構がグループ・バッファ内に1群の
LDIを構築するときの図15のタイム・スタンプ・テ
ーブルとグループ・バッファの状態を示す図である。
LDIを構築するときの図15のタイム・スタンプ・テ
ーブルとグループ・バッファの状態を示す図である。
【図21】レジスタ・リネーム技法を使用して1群のL
DIを構築する際の図15の割振り機構の動作を示す流
れ図である。
DIを構築する際の図15の割振り機構の動作を示す流
れ図である。
【図22】レジスタ・リネーム技法を使用して1群のL
DIを構築する際の図15の割振り機構の動作を示す流
れ図である。
DIを構築する際の図15の割振り機構の動作を示す流
れ図である。
【図23】レジスタ・リネーム技法を使用して割振り機
構がグループ・バッファ内に1群のLDIを構築すると
きの図15のタイプ・スタンプ・テーブルとグループ・
バッファの状態を示す図である。
構がグループ・バッファ内に1群のLDIを構築すると
きの図15のタイプ・スタンプ・テーブルとグループ・
バッファの状態を示す図である。
【図24】レジスタ・リネーム技法を使用して割振り機
構がグループ・バッファ内に1群のLDIを構築すると
きの図15のタイプ・スタンプ・テーブルとグループ・
バッファの状態を示す図である。
構がグループ・バッファ内に1群のLDIを構築すると
きの図15のタイプ・スタンプ・テーブルとグループ・
バッファの状態を示す図である。
【図25】1群のLDIに組み込むために命令を処理す
る際の割振り機構の追加動作を示す流れ図である。
る際の割振り機構の追加動作を示す流れ図である。
【図26】ロード動作とストア動作が秩序を維持するよ
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
【図27】ロード動作とストア動作が秩序を維持するよ
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
【図28】ロード動作とストア動作が秩序を維持するよ
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
【図29】ロード動作とストア動作が秩序を維持するよ
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
うに、図25に示す追加動作を使用して割振り機構がグ
ループ・バッファ内に1群のLDIを構築するときの図
15のタイム・スタンプ・テーブルとグループ・バッフ
ァの状態を示す図である。
【図30】図1の並列エンジンによって生成されたグル
ープの実行結果に応じてグループを修正する際の図1の
グループ・フォーマッタの動作を示す図である。
ープの実行結果に応じてグループを修正する際の図1の
グループ・フォーマッタの動作を示す図である。
【図31】図1の並列エンジンによって生成されたグル
ープの実行結果に応じてグループを修正する際の図1の
グループ・フォーマッタの動作を示す図である。
ープの実行結果に応じてグループを修正する際の図1の
グループ・フォーマッタの動作を示す図である。
【図32】並列エンジンの実行ユニットが実行するため
に圧縮済みLDIを展開することができる、図2の現行
グループ・バッファの機能ブロック図である。
に圧縮済みLDIを展開することができる、図2の現行
グループ・バッファの機能ブロック図である。
125 並列エンジン 200 デコード命令バッファ 202 制御ユニット 204 現行グループ・バッファ 206 NID生成器
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ラヴィンドラ・ケイ・ナイル アメリカ合衆国10510 ニューヨーク州 ブライアークリフ・マナー シュレー ド・ロード 52 (56)参考文献 特開 平4−229326(JP,A) 特開 平4−309131(JP,A) 特表 平8−507889(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 9/38
Claims (28)
- 【請求項1】第1の処理エンジンであって、 少なくとも1つの実行ユニットによって実行すべき命令
を格納する第1のメモリと、 取出し制御信号に応じて、前記第1のメモリから命令待
ち行列に命令を取り出す命令取出しユニットと、 前記実行ユニットによる実行のために前記命令待ち行列
に格納された命令をディスパッチするディスパッチ・ユ
ニットと、 前記実行ユニットによる命令の実行に応じて、前記取出
し制御信号を更新する手段とを含む、第1の処理エンジ
ンと、 前記第1の処理エンジンの前記実行ユニットによる前記
命令シーケンスの実行と同時に、前記ディスパッチ・ユ
ニットによりディスパッチされる命令シーケンスの代替
コード化を生成するグループ・フォーマッタと、前記グループ・フォーマッタによって生成された前記代
替コード化を格納する第2のメモリと、 前記取出し制御信号が前記第2のメモリに格納された前
記代替コード化に対応することを検出したときに、前記
第2のメモリに格納された前記代替コード化を実行する
代替コード化実行手段と前記代替コード化実行手段が、
複数の実行ユニットを含み、 前記グループ・フォーマッタによって生成された前記代
替コード化が、1組の長デコード済み命令を含み、前記
1組の長デコード済み命令のそれぞれの長デコード済み
命令(LDI)が、それぞれが前記代替コード化実行手
段の前記複数の実行ユニットの1つに関連する複数の命
令フィールドを含み、それぞれの命令フィールドが、単
一マシン・サイクル中に前記代替コード化実行手段の関
連実行ユニットによって実行可能であることを特徴とす
る、コンピュータ処理装置。 - 【請求項2】前記代替コード化実行手段が、前記命令フ
ィールドが使用または定義あるいはその両方を行うこと
ができる複数のレジスタ資源を含み、 前記グループ・フォーマッタが、 前記ディスパッチ・ユニットによりディスパッチされた
前記命令シーケンスに応じて、前記命令フィールドを生
成する命令フィールド・エンコーダと、 前記レジスタ資源のそれぞれに関連するタイム・スタン
プIDを格納するタイム・スタンプ・テーブルであっ
て、前記タイム・スタンプIDが、前記1組の長デコー
ド済み命令のうちのどのLDIで関連レジスタ資源が使
用可能になるかを識別する、タイム・スタンプ・テーブ
ルと、 前記命令シーケンス内の命令間の依存関係と、前記タイ
ム・スタンプ・テーブルに格納されたタイム・スタンプ
IDと、前記命令フィールド・エンコーダによって生成
された前記命令フィールドとに応じて、前記1組の長デ
コード済み命令を構築する割振り機構とを含むことを特
徴とする、請求項1に記載のコンピュータ処理装置。 - 【請求項3】前記割振り機構が、前記命令シーケンス内
の命令の待ち時間に応じて、前記1組の長デコード済み
命令を構築することを特徴とする、請求項2に記載のコ
ンピュータ処理装置。 - 【請求項4】前記命令シーケンス内の1つの命令が事前
定義済み停止命令に対応することを検出したときに、前
記割振り機構が、前記1組の長デコード済み命令をクロ
ーズすることを特徴とする、請求項2に記載のコンピュ
ータ処理装置。 - 【請求項5】前記命令シーケンスの1つの命令が現行グ
ループの命令フィールドによって以前に定義された資源
を定義することを検出したときに、前記割振り機構が、
前記資源を空き資源にリネームすることを特徴とする、
請求項2に記載のコンピュータ処理装置。 - 【請求項6】前記タイム・スタンプ・テーブルが、ロー
ド操作とストア操作にそれぞれ関連するタイム・スタン
プIDを含み、前記割振り機構が、ロード操作とストア
操作に関連する前記タイム・スタンプIDを使用して、
前記ロード操作とストア操作の順序を維持することを特
徴とする、請求項2に記載のコンピュータ処理装置。 - 【請求項7】前記第2のメモリが、 それぞれが1組の長デコード済み命令を含む、複数項目
の配列と、 前記複数項目の配列のうちの1つの項目が前記取出し制
御信号に対応するかどうかを判定する手段と、 前記1つの項目が前記取出し制御信号に対応すると判定
したときに、前記1つの項目から1組の長デコード済み
命令を読み出す手段とを含み、 前記代替コード化実行手段が、 前記第2のメモリから読み出した前記1組の長デコード
済み命令を格納するバッファと、 前記バッファに格納された前記1組の長デコード済み命
令の前記命令フィールドを実行する前記複数の実行ユニ
ットとを含むことを特徴とする、請求項1に記載のコン
ピュータ処理装置。 - 【請求項8】前記代替コード化実行手段が、前記命令フ
ィールドの実行結果に応じて前記取出し制御信号を更新
する手段をさらに含むことを特徴とする、請求項7に記
載のコンピュータ処理装置。 - 【請求項9】前記複数の実行ユニットが、各LDIの実
行終了後に、各LDIの前記命令フィールドの実行結果
を適切なレジスタ手段に片づけることを特徴とする、請
求項7に記載のコンピュータ処理装置。 - 【請求項10】前記複数の実行ユニットが、前記1組の
長デコード済み命令の実行終了後に、前記1組の長デコ
ード済み命令の前記命令フィールドの実行結果を片づけ
ることを特徴とする、請求項7に記載のコンピュータ処
理装置。 - 【請求項11】例外を検出したときに、 前記バッファに格納された前記1組の長デコード済み命
令内にコード化された第1の命令に対応するように、前
記取出し制御信号を更新し、 前記第1の処理エンジンに関連するレジスタ資源を前記
第1の命令以前のその元の状態に更新し、 前記第1の処理エンジンが前記第1の命令の処理を開始
できるようにする、例外制御装置をさらに含むことを特
徴とする、請求項7に記載のコンピュータ処理装置。 - 【請求項12】前記第2のメモリに格納された前記長デ
コード済み命令の1つまたは複数が圧縮され、 前記代替コード化実行手段が、圧縮されたそれぞれの長
デコード済み命令を実行に先立って展開する手段を含む
ことを特徴とする、請求項7に記載のコンピュータ処理
装置。 - 【請求項13】前記バッファに格納された前記1組の長
デコード済み命令の前記命令フィールドの1つが、前記
バッファに格納された前記1組の長デコード済み命令か
ら外への分岐命令として解決されていることを検出した
ときに、その後の処理のために、前記バッファに現在格
納されている前記1組の長デコード済み命令を前記グル
ープ・フォーマッタにロードする手段をさらに含むこと
を特徴とする、請求項7に記載のコンピュータ処理装
置。 - 【請求項14】命令シーケンスが第1のメモリに格納さ
れているコンピュータ処理システムにおいて、 取出し制御信号に応じて、前記第1のメモリから命令待
ち行列に命令を取り出すステップと、 少なくとも1つの実行ユニットによる実行のために前記
命令待ち行列に格納された命令をディスパッチするステ
ップと、 前記実行ユニットによる命令の実行に応じて、前記取出
し制御信号を更新するステップと、 前記実行ユニットによる前記命令シーケンスの実行と同
時にディスパッチされる命令シーケンスの代替コード化
を生成するステップと、 前記代替コード化を第2のメモリに格納するステップ
と、前記取出し制御信号が前記第2のメモリに格納された前
記代替コード化に対応することを検出したときに、前記
第2のメモリに格納された前記代替コード化を実行する
ステップとを含み、 前記代替コード化が、1組の長デコード済み命令を含
み、前記1組の長デコード済み命令のそれぞれの長デコ
ード済み命令(LDI)が、それぞれが前記複数の実行
ユニットの1つに関連する複数の命令フィールドを含
み、それぞれの命令フィールドが、単一マシン・サイク
ル中に関連実行ユニットによって実行可能であることを
特徴とする、方法。 - 【請求項15】前記コンピュータ処理システムが、 前記命令フィールドが使用または定義あるいはその両方
を行うことができる複数のレジスタ資源と、 実行のためにディスパッチされた前記命令シーケンスに
応じて、前記命令フィールドを生成する命令フィールド
・エンコーダと、 前記レジスタ資源のそれぞれに関連するタイム・スタン
プIDを格納するタイム・スタンプ・テーブルであっ
て、前記タイム・スタンプIDが、前記1組の長デコー
ド済み命令のうちのどのLDIで関連レジスタ資源が使
用可能になるかを識別する、タイム・スタンプ・テーブ
ルとを含み、 前記方法が、 前記命令シーケンス内の命令間の依存関係と、前記タイ
ム・スタンプ・テーブルに格納されたタイム・スタンプ
IDと、前記命令フィールド・エンコーダによって生成
された前記命令フィールドとに応じて、前記1組の長デ
コード済み命令を構築するステップをさらに含むことを
特徴とする、請求項14に記載の方法。 - 【請求項16】前記命令シーケンス内の命令の待ち時間
に応じて、前記1組の長デコード済み命令が構築される
ことを特徴とする、請求項15に記載の方法。 - 【請求項17】前記命令シーケンス内の1つの命令が事
前定義済み停止命令に対応することを検出したときに、
前記1組の長デコード済み命令をクローズするステップ
をさらに含むことを特徴とする、請求項15に記載の方
法。 - 【請求項18】前記命令シーケンスの1つの命令が前記
1組の長デコード済み命令内の1つのLDIの命令フィ
ールドによって以前に定義された資源を定義することを
検出したときに、前記資源を空き資源にリネームするス
テップをさらに含むことを特徴とする、請求項15に記
載の方法。 - 【請求項19】前記タイム・スタンプ・テーブルが、ロ
ード操作とストア操作にそれぞれ関連するタイム・スタ
ンプIDを含み、 ロード操作とストア操作に関連する前記タイム・スタン
プIDに従って、前記ロード操作とストア操作の順序を
維持するステップをさらに含むことを特徴とする、請求
項15に記載の方法。 - 【請求項20】前記第2のメモリが、それぞれが1組の
長デコード済み命令を含む、複数項目の配列を含み、 前記複数項目の配列のうちの1つの項目が前記取出し制
御信号に対応するかどうかを判定するステップと、 前記1つの項目が前記取出し制御信号に対応すると判定
したときに、前記1つの項目から1組の長デコード済み
命令を読み出すステップと、 前記第2のメモリから読み出した前記1組の長デコード
済み命令を格納するステップと、 前記バッファに格納された前記1組の長デコード済み命
令の前記命令フィールドを実行するステップとをさらに
含むことを特徴とする、請求項15に記載の方法。 - 【請求項21】前記命令フィールドの実行結果に応じて
前記取出し制御信号を更新するステップをさらに含むこ
とを特徴とする、請求項20に記載の方法。 - 【請求項22】各LDIの実行終了後に、各LDIの前
記命令フィールドの実行結果を適切なレジスタ手段に片
づけるステップをさらに含むことを特徴とする、請求項
20に記載の方法。 - 【請求項23】前記1組の長デコード済み命令の実行終
了後に、前記1組の長デコード済み命令の前記命令フィ
ールドの実行結果を片づけるステップをさらに含むこと
を特徴とする、請求項20に記載の方法。 - 【請求項24】例外を検出したときに、 前記バッファに格納された前記1組の長デコード済み命
令内にコード化された第1の命令に対応するように、前
記取出し制御信号を更新するステップと、 前記少なくとも1つの実行ユニットに関連するレジスタ
資源を前記第1の命令以前のその元の状態に更新するス
テップと、 前記少なくとも1つの実行ユニットによる実行のために
前記第1の命令の処理を可能にするステップとをさらに
含むことを特徴とする、請求項20に記載の方法。 - 【請求項25】前記長デコード済み命令の前記1つまた
は複数を前記第2のメモリに格納する前に、前記1つま
たは複数の長デコード済み命令を圧縮するステップと、 前記1つまたは複数の長デコード済み命令を実行する前
に、圧縮されたそれぞれの長デコード済み命令を展開す
るステップとをさらに含むことを特徴とする、請求項2
0に記載の方法。 - 【請求項26】前記バッファに格納された前記1組の長
デコード済み命令の前記命令フィールドの1つが、前記
バッファに格納された前記1組の長デコード済み命令か
ら外への分岐命令として解決されていることを検出した
ときに、前記バッファに現在格納されている前記1組の
長デコード済み命令を更新するステップをさらに含むこ
とを特徴とする、請求項20に記載の方法。 - 【請求項27】前記バッファに格納された前記1組の長
デコード済み命令の前記更新が、前記命令シーケンス
と、前記命令シーケンス内の命令間の依存関係に応じ
て、前記1組の長デコード済み命令に少なくとも1つの
長デコード済み命令を追加するステップを含むことを特
徴とする、請求項20に記載の方法。 - 【請求項28】前記少なくとも1つの長デコード済み命
令が、前記命令シーケンス内の前記命令の待ち時間に応
じて前記バッファに格納された前記1組の長デコード済
み命令に追加されることを特徴とする、請求項27に記
載の方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US421272 | 1995-04-13 | ||
| US08/421,272 US5699536A (en) | 1995-04-13 | 1995-04-13 | Computer processing system employing dynamic instruction formatting |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0922354A JPH0922354A (ja) | 1997-01-21 |
| JP3093629B2 true JP3093629B2 (ja) | 2000-10-03 |
Family
ID=23669880
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP08086944A Expired - Fee Related JP3093629B2 (ja) | 1995-04-13 | 1996-04-09 | 命令シーケンスを実行するための方法および装置 |
Country Status (10)
| Country | Link |
|---|---|
| US (1) | US5699536A (ja) |
| EP (1) | EP0737915B1 (ja) |
| JP (1) | JP3093629B2 (ja) |
| KR (1) | KR100230552B1 (ja) |
| CN (1) | CN1122227C (ja) |
| AT (1) | ATE210851T1 (ja) |
| CA (1) | CA2168896A1 (ja) |
| DE (1) | DE69524570T2 (ja) |
| ES (1) | ES2168329T3 (ja) |
| TW (1) | TW274600B (ja) |
Families Citing this family (57)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6105124A (en) * | 1996-01-26 | 2000-08-15 | Intel Corporation | Method and apparatus for merging binary translated basic blocks of instructions |
| JP3623840B2 (ja) | 1996-01-31 | 2005-02-23 | 株式会社ルネサステクノロジ | データ処理装置及びマイクロプロセッサ |
| JPH09265397A (ja) * | 1996-03-29 | 1997-10-07 | Hitachi Ltd | Vliw命令用プロセッサ |
| US5913054A (en) * | 1996-12-16 | 1999-06-15 | International Business Machines Corporation | Method and system for processing a multiple-register instruction that permit multiple data words to be written in a single processor cycle |
| US5923862A (en) * | 1997-01-28 | 1999-07-13 | Samsung Electronics Co., Ltd. | Processor that decodes a multi-cycle instruction into single-cycle micro-instructions and schedules execution of the micro-instructions |
| US6009263A (en) * | 1997-07-28 | 1999-12-28 | Institute For The Development Of Emerging Architectures, L.L.C. | Emulating agent and method for reformatting computer instructions into a standard uniform format |
| US6237077B1 (en) * | 1997-10-13 | 2001-05-22 | Idea Corporation | Instruction template for efficient processing clustered branch instructions |
| US5913047A (en) * | 1997-10-29 | 1999-06-15 | Advanced Micro Devices, Inc. | Pairing floating point exchange instruction with another floating point instruction to reduce dispatch latency |
| US6249855B1 (en) * | 1998-06-02 | 2001-06-19 | Compaq Computer Corporation | Arbiter system for central processing unit having dual dominoed encoders for four instruction issue per machine cycle |
| US6304960B1 (en) | 1998-08-06 | 2001-10-16 | Intel Corporation | Validating prediction for branches in a cluster via comparison of predicted and condition selected tentative target addresses and validation of branch conditions |
| US6240510B1 (en) | 1998-08-06 | 2001-05-29 | Intel Corporation | System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions |
| US6385708B1 (en) * | 1998-11-16 | 2002-05-07 | Infineon Technologies Ag | Using a timing-look-up-table and page timers to determine the time between two consecutive memory accesses |
| US6247097B1 (en) | 1999-01-22 | 2001-06-12 | International Business Machines Corporation | Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions |
| JP2001005675A (ja) * | 1999-06-21 | 2001-01-12 | Matsushita Electric Ind Co Ltd | プログラム変換装置及びプロセッサ |
| US6708267B1 (en) | 2000-02-04 | 2004-03-16 | International Business Machines Corporation | System and method in a pipelined processor for generating a single cycle pipeline stall |
| WO2001065362A1 (en) | 2000-02-28 | 2001-09-07 | Koninklijke Philips Electronics N.V. | Data processor with multi-command instruction words |
| GB2367653B (en) | 2000-10-05 | 2004-10-20 | Advanced Risc Mach Ltd | Restarting translated instructions |
| US6622269B1 (en) * | 2000-11-27 | 2003-09-16 | Intel Corporation | Memory fault isolation apparatus and methods |
| US6877089B2 (en) | 2000-12-27 | 2005-04-05 | International Business Machines Corporation | Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program |
| US7072347B2 (en) * | 2001-02-23 | 2006-07-04 | International Business Machines Corporation | Assignment of packet descriptor field positions in a network processor |
| US7356673B2 (en) * | 2001-04-30 | 2008-04-08 | International Business Machines Corporation | System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form |
| US7114058B1 (en) * | 2001-12-31 | 2006-09-26 | Apple Computer, Inc. | Method and apparatus for forming and dispatching instruction groups based on priority comparisons |
| US7761852B2 (en) * | 2003-11-26 | 2010-07-20 | International Business Machines Corporation | Fast detection of the origins of memory leaks when using pooled resources |
| US7665070B2 (en) * | 2004-04-23 | 2010-02-16 | International Business Machines Corporation | Method and apparatus for a computing system using meta program representation |
| US7730470B2 (en) * | 2006-02-27 | 2010-06-01 | Oracle America, Inc. | Binary code instrumentation to reduce effective memory latency |
| TWI348135B (en) | 2006-06-05 | 2011-09-01 | Chunghwa Picture Tubes Ltd | Image contrast correct system and method thereof |
| US8301870B2 (en) * | 2006-07-27 | 2012-10-30 | International Business Machines Corporation | Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system |
| JP4996945B2 (ja) * | 2007-02-28 | 2012-08-08 | 公立大学法人広島市立大学 | データ処理装置、データ処理方法 |
| US8281109B2 (en) | 2007-12-27 | 2012-10-02 | Intel Corporation | Compressed instruction format |
| CN101290589B (zh) * | 2007-12-27 | 2010-06-16 | 华为技术有限公司 | 一种并发指令操作方法和装置 |
| CN102063330B (zh) * | 2011-01-05 | 2013-04-24 | 北京航空航天大学 | 一种大规模并行程序性能数据采集方法 |
| US9395988B2 (en) * | 2013-03-08 | 2016-07-19 | Samsung Electronics Co., Ltd. | Micro-ops including packed source and destination fields |
| GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
| US20150220343A1 (en) * | 2014-02-05 | 2015-08-06 | Mill Computing, Inc. | Computer Processor Employing Phases of Operations Contained in Wide Instructions |
| GB2539411B (en) * | 2015-06-15 | 2017-06-28 | Bluwireless Tech Ltd | Data processing |
| US11954491B2 (en) | 2022-01-30 | 2024-04-09 | Simplex Micro, Inc. | Multi-threading microprocessor with a time counter for statically dispatching instructions |
| US11829187B2 (en) | 2022-01-30 | 2023-11-28 | Simplex Micro, Inc. | Microprocessor with time counter for statically dispatching instructions |
| US11829762B2 (en) | 2022-01-30 | 2023-11-28 | Simplex Micro, Inc. | Time-resource matrix for a microprocessor with time counter for statically dispatching instructions |
| US12001848B2 (en) | 2022-01-30 | 2024-06-04 | Simplex Micro, Inc. | Microprocessor with time counter for statically dispatching instructions with phantom registers |
| US11829767B2 (en) | 2022-01-30 | 2023-11-28 | Simplex Micro, Inc. | Register scoreboard for a microprocessor with a time counter for statically dispatching instructions |
| US12443412B2 (en) | 2022-01-30 | 2025-10-14 | Simplex Micro, Inc. | Method and apparatus for a scalable microprocessor with time counter |
| US12190116B2 (en) * | 2022-04-05 | 2025-01-07 | Simplex Micro, Inc. | Microprocessor with time count based instruction execution and replay |
| US12141580B2 (en) | 2022-04-20 | 2024-11-12 | Simplex Micro, Inc. | Microprocessor with non-cacheable memory load prediction |
| US12169716B2 (en) | 2022-04-20 | 2024-12-17 | Simplex Micro, Inc. | Microprocessor with a time counter for statically dispatching extended instructions |
| US12288065B2 (en) | 2022-04-29 | 2025-04-29 | Simplex Micro, Inc. | Microprocessor with odd and even register sets |
| US12106114B2 (en) | 2022-04-29 | 2024-10-01 | Simplex Micro, Inc. | Microprocessor with shared read and write buses and instruction issuance to multiple register sets in accordance with a time counter |
| US12112172B2 (en) | 2022-06-01 | 2024-10-08 | Simplex Micro, Inc. | Vector coprocessor with time counter for statically dispatching instructions |
| US12282772B2 (en) | 2022-07-13 | 2025-04-22 | Simplex Micro, Inc. | Vector processor with vector data buffer |
| US12124849B2 (en) | 2022-07-13 | 2024-10-22 | Simplex Micro, Inc. | Vector processor with extended vector registers |
| US12541369B2 (en) | 2022-07-13 | 2026-02-03 | Simplex Micro, Inc. | Executing phantom loops in a microprocessor |
| US12147812B2 (en) | 2022-07-13 | 2024-11-19 | Simplex Micro, Inc. | Out-of-order execution of loop instructions in a microprocessor |
| US12566609B2 (en) | 2023-03-14 | 2026-03-03 | Simplex Micro, Inc. | Microprocessor with apparatus and method for handling of instructions with long throughput |
| US12566610B2 (en) | 2023-03-14 | 2026-03-03 | Simplex Micro, Inc. | Microprocessor with apparatus and method for replaying load instructions |
| US12566613B2 (en) | 2023-11-13 | 2026-03-03 | Simplex Micro, Inc. | Microprocessor with speculative and in-order register sets |
| US12393424B2 (en) * | 2024-01-25 | 2025-08-19 | Texas Instruments Incorporated | Systems and methods for monitoring an instruction bus |
| US12613698B2 (en) | 2024-03-19 | 2026-04-28 | Simplex Micro, Inc. | Apparatus and method for hiding vector load latency in a time-based vector coprocessor |
| KR102865865B1 (ko) | 2025-06-23 | 2025-09-29 | (주)올포랜드 | 스테이트 머신을 이용한 계층적 명령 객체 기반의 동적 명령처리 방법 |
Family Cites Families (20)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4295193A (en) * | 1979-06-29 | 1981-10-13 | International Business Machines Corporation | Machine for multiple instruction execution |
| US4466061A (en) * | 1982-06-08 | 1984-08-14 | Burroughs Corporation | Concurrent processing elements for using dependency free code |
| US4484272A (en) * | 1982-07-14 | 1984-11-20 | Burroughs Corporation | Digital computer for executing multiple instruction sets in a simultaneous-interleaved fashion |
| JPS5932045A (ja) * | 1982-08-16 | 1984-02-21 | Hitachi Ltd | 情報処理装置 |
| US4679141A (en) * | 1985-04-29 | 1987-07-07 | International Business Machines Corporation | Pageable branch history table |
| GB8521672D0 (en) * | 1985-08-30 | 1985-10-02 | Univ Southampton | Data processing device |
| US5021945A (en) * | 1985-10-31 | 1991-06-04 | Mcc Development, Ltd. | Parallel processor system for processing natural concurrencies and method therefor |
| US4903196A (en) * | 1986-05-02 | 1990-02-20 | International Business Machines Corporation | Method and apparatus for guaranteeing the logical integrity of data in the general purpose registers of a complex multi-execution unit uniprocessor |
| US4825360A (en) * | 1986-07-30 | 1989-04-25 | Symbolics, Inc. | System and method for parallel processing with mostly functional languages |
| US4811214A (en) * | 1986-11-14 | 1989-03-07 | Princeton University | Multinode reconfigurable pipeline computer |
| US5127104A (en) * | 1986-12-29 | 1992-06-30 | Dataflow Computer Corporation | Method and product involving translation and execution of programs by automatic partitioning and data structure allocation |
| 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 |
| EP0394624B1 (en) * | 1989-04-24 | 1997-06-18 | International Business Machines Corporation | Multiple sequence processor system |
| US5197137A (en) * | 1989-07-28 | 1993-03-23 | International Business Machines Corporation | Computer architecture for the concurrent execution of sequential programs |
| ATE146611T1 (de) * | 1990-05-04 | 1997-01-15 | Ibm | Maschinenarchitektur für skalaren verbundbefehlssatz |
| EP0474297B1 (en) * | 1990-09-05 | 1998-06-10 | Koninklijke Philips Electronics N.V. | Very long instruction word machine for efficient execution of programs with conditional branches |
| US5299321A (en) * | 1990-12-18 | 1994-03-29 | Oki Electric Industry Co., Ltd. | Parallel processing device to operate with parallel execute instructions |
| CA2109799A1 (en) * | 1991-05-24 | 1992-12-10 | Daniel Mark Nosenchuck | Optimizing compiler for computers |
| 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 |
-
1995
- 1995-04-13 US US08/421,272 patent/US5699536A/en not_active Expired - Fee Related
- 1995-10-06 DE DE69524570T patent/DE69524570T2/de not_active Expired - Fee Related
- 1995-10-06 AT AT95115748T patent/ATE210851T1/de not_active IP Right Cessation
- 1995-10-06 ES ES95115748T patent/ES2168329T3/es not_active Expired - Lifetime
- 1995-10-06 EP EP95115748A patent/EP0737915B1/en not_active Expired - Lifetime
- 1995-10-07 TW TW084110576A patent/TW274600B/zh active
-
1996
- 1996-02-06 CA CA002168896A patent/CA2168896A1/en not_active Abandoned
- 1996-04-01 CN CN96104502A patent/CN1122227C/zh not_active Expired - Fee Related
- 1996-04-04 KR KR1019960010200A patent/KR100230552B1/ko not_active Expired - Fee Related
- 1996-04-09 JP JP08086944A patent/JP3093629B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| EP0737915B1 (en) | 2001-12-12 |
| KR100230552B1 (ko) | 1999-11-15 |
| CN1136184A (zh) | 1996-11-20 |
| EP0737915A1 (en) | 1996-10-16 |
| ES2168329T3 (es) | 2002-06-16 |
| ATE210851T1 (de) | 2001-12-15 |
| CA2168896A1 (en) | 1996-10-14 |
| DE69524570T2 (de) | 2002-08-22 |
| KR960038600A (ko) | 1996-11-21 |
| TW274600B (en) | 1996-04-21 |
| CN1122227C (zh) | 2003-09-24 |
| DE69524570D1 (de) | 2002-01-24 |
| JPH0922354A (ja) | 1997-01-21 |
| US5699536A (en) | 1997-12-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3093629B2 (ja) | 命令シーケンスを実行するための方法および装置 | |
| US7363467B2 (en) | Dependence-chain processing using trace descriptors having dependency descriptors | |
| JP2898820B2 (ja) | 自己並列化式のコンピュータ・システムおよび方法 | |
| US5802386A (en) | Latency-based scheduling of instructions in a superscalar processor | |
| US7458069B2 (en) | System and method for fusing instructions | |
| JP3182740B2 (ja) | 単一クロック・サイクルに非連続命令を取り出すための方法およびシステム。 | |
| US6247106B1 (en) | Processor configured to map logical register numbers to physical register numbers using virtual register numbers | |
| US5758112A (en) | Pipeline processor with enhanced method and apparatus for restoring register-renaming information in the event of a branch misprediction | |
| US5911057A (en) | Superscalar microprocessor having combined register and memory renaming circuits, systems, and methods | |
| US5867684A (en) | Method and processor that permit concurrent execution of a store multiple instruction and a dependent instruction | |
| JPH11510291A (ja) | スーパースケーラープロセッサにおけるout−of−order実行のための統一化された機能オペレーションスケジューラ | |
| JPH10254699A (ja) | 浮動小数点演算システム | |
| US5872949A (en) | Apparatus and method for managing data flow dependencies arising from out-of-order execution, by an execution unit, of an instruction series input from an instruction source | |
| US5708837A (en) | Method and apparatus for register renaming in a computer system using a separate arithmetic available queue | |
| JP3866921B2 (ja) | ストアアドレス生成およびユニバーサルな依存性ベクトルに基づくロードブロックのためのメカニズム | |
| KR100483463B1 (ko) | 사전-스케쥴링 명령어 캐시를 구성하기 위한 방법 및 장치 | |
| US6826522B1 (en) | Methods and apparatus for improved efficiency in pipeline simulation and emulation | |
| US5850563A (en) | Processor and method for out-of-order completion of floating-point operations during load/store multiple operations | |
| US20030182538A1 (en) | Method and system for managing registers | |
| JP2886838B2 (ja) | スーパースカラパイプライン式データ処理装置の可変長命令の並列デコーディング装置及び方法 | |
| JP2828219B2 (ja) | オブジェクト・コード互換性を与える方法、オブジェクト・コード互換性並びにスカラ・プロセッサ及びスーパスカラ・プロセッサとの互換性を与える方法、ツリー命令を実行するための方法、データ処理システム | |
| EP0924603A2 (en) | Compiler controlled dynamic scheduling of program instructions | |
| JPH117389A (ja) | プロセサ用の命令を処理するシステム及び方法 | |
| US6175909B1 (en) | Forwarding instruction byte blocks to parallel scanning units using instruction cache associated table storing scan block boundary information for faster alignment | |
| US6266761B1 (en) | Method and system in an information processing system for efficient maintenance of copies of values stored within registers |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| LAPS | Cancellation because of no payment of annual fees |