(57)【特許請求の範囲】
【請求項１】
コンピュータプログラムの命令を処理するシステムであって、
レジスタと、
コンピュータプログラムの命令を実行するよう構成され、第１のステージおよび第２のステージを有するパイプラインと、
前記レジスタから第１の述語値を読出すと共に、第２の述語値を受信するよう構成され、前記第２のステージにおける命令がストールしているか否かを検出するよう構成され、前記レジスタから読み出された前記第１の述語値を前記第１のステージに送信すると共に、前記第２のステージにおける前記命令がストールされているか否かに基づいて、前記第２の述語値および前記レジスタから読み出された前記第１の述語値の中から選択するように構成され、さらに前記選択された述語値を前記第２のステージに送信するよう構成される、回路と、
を含むシステム。
【請求項２】
レジスタと、
コンピュータプログラムの命令を実行するよう構成され、第１のステージおよび第２のステージを有するパイプラインと、
前記レジスタおよび前記第１のステージに結合され、少なくとも１つは前記レジスタから受信したものである第１の複数の述語値を同時に受信するよう構成され、前記第１の複数の述語値のうち１つを選択するよう構成され、さらに前記第１の複数の述語値のうち前記選択されたものを前記第１のステージに送信し、前記第１の複数の述語値の前記選択されたものを接続を介して送信するよう構成される第１の回路と、
前記接続および前記第２のステージに結合され、前記接続を介して送信された前記１つの述語値を含む第２の複数の述語値を同時に受信するよう構成され、前記第２の複数の述語値のうち１つを選択し、前記第２の複数の述語値のうち前記選択されたものを前記第２のステージに送信するよう構成され、前記第２のステージにおける命令がストールしているか否かを検出し、前記第２のステージにおける前記命令がストールされているか否かに基づいて、前記第２の複数の述語値のうち前記１つを選択するようさらに構成される第２の回路と、
を含むシステム。
【請求項３】
コンピュータプログラムの命令を処理する方法であって、
第１のステージおよび第２のステージを有するパイプラインを提供するステップと、
述語値を生成するステップと、
該述語値をレジスタに書込むステップと、
命令を受信するステップと、
制御信号を受信するステップと、
前記命令に含まれるレジスタ識別子に基づいて、前記レジスタから前記述語値を読出すステップと、
該読出しステップにおいて前記レジスタから読出された前記述語値を前記パイプラインの前記第１のステージに送信するステップと、
前記第１のステージに送信された前記述語値に基づいて、前記パイプラインの前記第１のステージを介して前記命令を処理するステップと、
新しい述語値を受信するステップと、
前記命令がストールされているか否かを検出するステップと、
前記制御信号に基づいて、前記新しい述語値と前記読出しステップにおいて前記レジスタから読出された前記述語値との中から選択するステップであって、該検出ステップに基づくステップと、
該選択ステップにおいて選択された前記述語値を前記パイプラインの前記第２のステージに送信するステップと、
該選択ステップにおいて選択された前記述語値に基づいて、前記第２のステージを介して前記命令を処理するステップと、
を含む方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にデータ処理に関し、特に、プロセッサパイプラインによって処理される命令をパイプラインで実行すべきか否かを定義する述語（predicate）データを効率的に提供するためのシステムおよび方法に関する。
【０００２】
【従来の技術】
従来のコンピュータシステムの性能を改善するため、パイプライン処理が可能なスーパースカラプロセッサが開発されている。このようなプロセッサは、典型的に複数のパイプラインを使用してコンピュータプログラムの命令を処理し、実行する。各パイプラインは複数の命令を同時に処理することができる。従って、このようなスーパースカラプロセッサは、比較的多数の命令を高速で処理し、実行する能力を有する。
【０００３】
コンピュータプログラムの各命令をコンピュータプログラムの実行毎に実行する必要がないことは、周知のとおりである。この点に関して、命令の多くはある一定の条件が真である場合にのみ実行される。しかし、プログラムを実行する際に、実行すべきではない多くの命令がパイプラインに入力され、そのパイプラインによって処理される。例えば、プログラムの実行を、比較命令の実行結果に基づいて、プログラムの２つの部分のうちの一方に分岐すべき状況を考えてみる。このような状況では、一般に、プログラムの両方の部分からの命令をパイプラインに入力し、パイプラインが命令の処理を開始することが望ましい。しかし、比較命令の実行結果に応じて、その部分のうちの一方に関連する命令のみをパイプラインは実行するべきであり、他方の部分における命令は、実行されることなくパイプラインを通過するべきである。
【０００４】
このように命令を選択的に実行することを可能とするため、各命令は、命令をイネーブル（enable）するか否かを示す述語値を含む述語レジスタに関連付けられる。述語値は様々な長さを持つことができるが、通常は１ビットの情報である。述語値がアサート（assert）されている場合、述語レジスタに関連付けられた命令は現在イネーブルされており、従って、その命令を実行するべきであることを示す。述語値がデアサート（deassert）されている場合、述語レジスタに関連付けられた命令は現在ディスエーブル（disable）されており、従って、その命令を実行するべきではないことを示す。
【０００５】
上述した例では、上記の比較命令が一旦実行されて、プログラムのいずれの部分を実行するべきかがわかった場合、実行するべきプログラムの部分における命令に関連付けられたレジスタに含まれる述語値がアサートされると共に、実行するべきではないプログラムの部分における命令に関連付けられたレジスタに含まれる述語値がデアサートされる。
【０００６】
さらに、プログラムの両方の部分における命令の処理中に、命令に関連付けられたレジスタに含まれる述語値が分析されて、各命令がイネーブルされているか否かを判断する。述語データが、命令はイネーブルされていることを示す（すなわち、命令に関連付けられた述語レジスタの値がアサートされている）場合、命令を処理しているパイプラインは、その命令を実行する。しかし、述語データが、命令がディスエーブルされていることを示す（すなわち、命令に関連付けられた述語レジスタの値がデアサートされている）場合、命令を処理しているパイプラインはその命令を実行しない。従って、述語データを保持し分析することにより、プログラムの上記部分のうちの１つにおける命令が、パイプラインにより実行される一方、その他の部分における命令は、実行されることなく、パイプラインを通過することができる。
【０００７】
命令がパイプラインによって処理されている間、述語データを用いてデータハザードを解決することもできる。例えば、命令がまだ使用可能ではないデータに従属する場合、データ従属性エラーを防止するため、実行前にその命令をストール（stall）するべきであることは周知のとおりである。必要なデータが使用可能になると、ストールは取り消され、命令の実行が可能になる。
【０００８】
ストールはエラーを防止するが、命令をストールすると、命令の処理に必要な時間が増大してしまう。ストールによる悪影響を最小限に抑えるため、ストールするべき命令に関連付けられた述語レジスタに含まれる述語値を分析して、命令がイネーブルされているか否かを判断することができる。命令がディスエーブルされている場合には、その命令は実行されず、従ってエラーの原因とはならないので、ストールする必要はない。結果として、述語データを使用することで、不必要なストールを防止しまたは取り除いて、プロセッサの性能を増大させることができる。
【０００９】
通常、述語レジスタは、適切な述語レジスタに対する述語データの書込みおよび読出しを可能にする書込みポートおよび読出しポートを備えるレジスタファイルに保持される。レジスタファイルは、処理システムが利用するすべての述語値を格納する中央ロケーションとしての役割を果たす。従って、任意の命令の述語ステータスが、任意のパイプラインの一部により必要とされる場合、命令に関連付けられた述語レジスタに含まれる述語値をレジスタファイルから読出すことができる。しかし、レジスタファイルの書込みポートおよび読出しポートは、面積、配線、および多くはプロセッサ速度の観点から比較的高価であるため、レジスタファイルに対する書込みおよび読出しに必要な書込みポートおよび読出しポートの数を最小にすることが望ましい。
【００１０】
さらに、プログラムの命令に関連付けられた述語レジスタに含まれる述語値は、プログラムが実行されるにつれ、どの命令を実行すべきであり、どの命令を実行すべきではないかがわかってくるため、プログラムの実行中に変更することができる。パイプラインにおける遅延を最小にするため、パイプラインの回路は述語データに対するあらゆる更新を迅速に受信することが望ましい。しかし、レジスタファイルに対する述語値の書込みおよび読出しでは、比較的相当量の時間を（１またはそれ以上のクロックサイクルのオーダーで）利用することから、述語データの変更を回路に通知する際の遅延は増大してしまう。
【００１１】
【発明が解決しようとする課題】
このように、プロセッサが処理している命令を実行すべきか否かを示す述語データを効率的に提供するシステムおよび方法に対する未解決の要望が本業界において存在する。
【００１２】
【課題を解決するための手段】
本発明は、上述した従来技術の欠点および欠陥を克服する。本発明は、一般に、プロセッサパイプラインにより処理される命令をパイプラインによって実行するべきか否かを定義する述語データを効率的に提供するシステムおよび方法に関する。
【００１３】
構造に関して、本発明のシステムは、レジスタと、パイプラインと、述語回路と、を利用する。パイプラインは、コンピュータプログラムの命令を処理する第１のステージおよび第２のステージを含む。述語回路は、レジスタから第１の述語値を読出し、第２の述語値を受信するよう構成される。述語回路は、レジスタから読出した第１の述語値を第１のステージに送信し、その後第１の述語値および第２の述語値の中から選択することができる。述語回路によって選択された述語値は、第２のステージに送信される。
【００１４】
第２のステージにおける命令がストールされると、命令の述語ステータスを示す新しい述語値を受信するまで、第２のステージに送信された述語値が継続して選択され、ストールが続く間、第２のステージに送信される。新しい述語値を受信すると、新しい述語値が代わりに選択され、第２のステージに送信される。
【００１５】
また、本発明を、コンピュータプログラムの命令を処理する方法を提供するものとして見ることもできる。本方法は、以下のステップによって広く概念化することが可能である。すなわち、第１のステージおよび第２のステージを有するパイプラインを提供するステップと、述語値を生成するステップと、該述語値をレジスタに書込むステップと、命令を受信するステップと、制御信号を受信するステップと、命令に含まれるレジスタ識別子に基づいて、レジスタから述語値を読出すステップと、読出しステップにおいて読出された述語値をパイプラインの第１のステージに送信するステップと、第１のステージに送信された述語値に基づいて、パイプラインの第１のステージを介して命令を処理するステップと、新しい述語値を受信するステップと、制御信号に基づいて、新しい述語値と読出しステップにおいて読出された述語値の中から選択するステップと、選択ステップにおいて選択された述語値を、パイプラインの第２のステージに送信するステップと、選択ステップにおいて選択された述語値に基づいて、第２のステージを介して命令を処理するステップと、である。
【００１６】
本発明の他の特徴および利点は、当業者にとって以下の詳細な説明により明らかとなろう。かかるすべての特徴および利点は、本明細書において本発明の範囲内に含まれ、特許請求の範囲によって保護されるよう意図されている。
【００１７】
【発明の実施の形態】
本発明は、一般に、コンピュータプログラムの命令を実行するべきか否かを示す述語データを効率的に提供するシステムおよび方法に関する。本発明の原理を説明するため、従来のスーパースカラ処理システム15を示す図１を参照する。処理システム15は、コンピュータプログラムの命令を受信し、各命令を複数のパイプライン21のうちの１つに割り当てる命令分配ユニット18を含む。各パイプライン21は、パイプライン21が受信した各命令を処理するよう構成されている。
【００１８】
各パイプライン21は、通常、特定のタイプの命令（例えば、整数演算、浮動小数点演算、メモリ演算等）のみを処理するよう構成されている。従って、命令分配ユニット18は、各命令をその命令に適合するパイプライン21にのみ割り当てるよう構成されている。さらに、簡略化のため、図１では、述語制御回路22を１つのパイプライン21に結合するように図示しているが、各パイプライン21が同様に述語制御回路22に結合されていることに留意されたい。
【００１９】
図１に示すように、パイプライン21は、典型的に命令をステージにおいて処理する。本明細書で用いられるように、「ステージ」とは、命令を処理すると共に、クロック信号のエッジに応答してステージへのデータ入力を制御できるように、その入力でラッチを含むパイプライン21の任意の部分である。図１に示すパイプライン21は、命令を４つのステージで処理する。すなわちレジスタステージ25、実行ステージ28、例外検出ステージ32、および書込みステージ35である。他の実施形態では、処理システム15は、他のタイプのステージおよびステージの組合せで命令を処理することが可能である。
【００２０】
図１に示す処理システム15において、パイプライン21の１つによって受信される命令は、まずレジスタステージ25において処理される。レジスタステージ25では、命令の実行に必要なあらゆるオペランドが取得される。オペランドが取得されると、命令は、命令を実行する実行ステージ28に入る。実行ステージ28で命令が実行された後、その命令は、例外検出ステージ32に入る。例外検出ステージ32は、例えばデータの低信頼性を示す実行中のオーバラン等の状態をチェックする。例外検出ステージ32が完了した後、命令は書込みステージ35に入る。書込みステージ35は、レジスタまたはメモリのロケーションに実行ステージ28の結果を書込む。
【００２１】
典型的に、パイプライン21の各ステージ25、28、32、35は、一度に１つの命令のみを処理し、ステージ25、28、32、35がそれぞれの命令を同時に処理することで各パイプライン21は複数の命令を処理することができる。例えば、図１に示す処理システム15において、パイプライン21の１つは４つの命令を同時に処理することができ、そのときパイプライン21の各ステージ25、28、32、35は４つの命令のうちの１つを処理している。さらに、各パイプライン21は、他のパイプライン21が他の命令を処理している時に命令を処理することができる。従って、図１に示す処理システム15により、相対的に大量の命令を同時に処理することが可能である。
【００２２】
タイミングを制御するために、命令は典型的にクロック信号のエッジに応答してステージ25、28、32、35を通ってステップする。例えば、書込みステージ35における命令は、レジスタステージ25、実行ステージ28および例外検出ステージ32における命令がそれぞれ同じパイプライン21の実行ステージ28、例外検出ステージ32および書込みステージ35にステップインするのと同じクロックエッジで、パイプライン21からステップアウトする。しかし、パイプライン21における各命令が、クロック信号の同じエッジで次のステージにステップインする必要はない。実際、パイプライン21の命令のいくつかがパイプライン21を通ってステップされる間、あるエラーの発生を防止するために、パイプライン21の他の命令がストールされてもよい（すなわち、一時的にステージからステップアウトしないようにしてもよい）。1999年9月7日に出願された、「Superscalar Processing System and Method for Efficiently Performing In-order Processing of Instructions」と題する米国特許出願第09／390,199号には、データエラーを防止するために命令を選択的にストールさせるプロセスが記載されており、参照により本明細書に援用される。
【００２３】
図２は、パイプライン21のうちの１つのより詳細な図であり、パイプライン21を通って命令をステップするために典型的に使用される回路を示す。ここで、命令はラッチされ、クロック信号のアクティブエッジに応答してラッチ54を介して処理回路52に提供される。処理回路52における処理が完了すると、命令はラッチされ、クロック信号のアクティブエッジに応答し、ラッチ58を介して処理回路56に提供される。処理回路56における処理が完了すると、命令はラッチされ、クロック信号のアクティブエッジに応答し、ラッチ64を介して処理回路62に提供される。処理回路62における処理が完了すると、命令はラッチされ、クロック信号のアクティブエッジに応答し、ラッチ68を介して処理回路66に提供される。処理回路66における処理が完了すると、命令はパイプライン21から出る。
【００２４】
処理回路52、56、62、および66はそれぞれ、ステージ25、28、32、および35に関して上述した機能を実行する。つまり、処理回路52はオペランドを取得し、処理回路56は命令を実行し、処理回路64は例外についてチェックし、処理回路66は命令の実行を介して生成されたデータをレジスタまたはメモリ内のロケーションに書込む。データ従属性ハザードの解決を可能にするため、あるいは先行する命令の処理をまだ終えていないステージに後の命令がステップしてしまわないようにするため、ステージ25、28、32、および35のいずれか１つにおいて命令は一時的にストールされてもよい。
【００２５】
図２に示すように、システム15は、システム15によって処理される命令についての述語データを格納する述語レジスタファイル71を備える。簡略化のため、レジスタファイル71は図２において単一のパイプライン21に結合されるように示されているが、好ましい実施形態におけるレジスタファイル71は、システム15の各パイプライン21に同様に結合される。
【００２６】
図２および図３に示すように、レジスタファイル71は、複数のレジスタ73を含む。各レジスタ73は、レジスタ73に関連する命令を実行するべきか否かを示す述語ビットを含む。当技術分野で既知の方法により、任意のパイプライン21の実行ステージ28、例外検出ステージ32、および／または書込みステージ35で処理されている命令は、述語レジスタファイル71におけるビットを制御するために用いられる述語データを生成することがある。例えば、実行時に、パイプライン21のうちの１つである実行ステージ28における第１の命令は、レジスタファイル71における特定のレジスタ73に書込まれることになる述語値を生成することができる。命令を定義するデータは、特定のレジスタ73を識別するレジスタ識別子を含む。命令が実行されると、処理回路56（図２）がラッチ74、接続75および76を介して述語値をレジスタファイル71に送信すると共に、ラッチ74、接続79および81を介して上記レジスタ識別子をレジスタファイル71に送信する。ラッチ74に結合された書込みポート77は、述語値およびレジスタ識別子を受信し、その受信したレジスタ識別子で識別されるレジスタ73に述語値を送信する。述語値を受信する特定のレジスタ73は、受信した述語値に基づいて、レジスタ73に含まれる値を更新する。
【００２７】
述語データを生成することができる任意の他のステージ25、32、および／または35は、同様にレジスタファイル71に結合されて、レジスタファイル71が述語データを受信して適切に処理できるようにする。例えば、図２における例外検出ステージ32は、処理回路62で生成された新しい述語データビットを処理回路62がラッチ83、接続85および86を介してレジスタファイル71に送信することができるように、レジスタファイル71に結合される。さらに、新しい述語ビットを書込むべきレジスタ73（図３）を識別するレジスタ識別子を、ラッチ83、接続87および88を介してレジスタファイル71に送信することができる。図２には図示しないが、レジスタファイル71が他のパイプライン21のステージ25、28、32、および／または35から述語データを受信できるように、任意の他のパイプライン21の任意のステージ25、28、32、および／または35を同様にレジスタファイル71に結合することもできる。
【００２８】
システム15によって処理される各命令は、述語レジスタファイル71に配置されるレジスタ73の１つと関連付けられる。ここで、命令を定義するデータは、命令と関連するレジスタ73を識別する述語レジスタ識別子を含む。関連付けられたレジスタ73に含まれる述語値は、パイプライン21の１つが命令を処理している間、命令がイネーブルされているか否かを示す。命令がイネーブルされている場合は、命令を実行するべきである。命令がディスエーブルされている場合は、命令を実行せずにパイプライン21を通過させるべきである。
【００２９】
任意のステージ25、28、32、および／または35における命令を処理するために、命令に関連付けられたレジスタ73に含まれる述語値を利用してもよい。例えば、命令が実行ステージ28に入るとき、その命令を実行すべきか否かを判断するために、関連付けられたレジスタ73における述語値を用いることができるだけでなく、その述語値をデータハザードの解決にも使用することができる。ここで、レジスタステージ25における命令は、現在は使用可能でないデータを、後に実行ステージ28における実行時に使用することができる。命令によって利用されるデータが使用可能となるまで、データエラーを防止するために命令を実行しないようにすべきである。従って、上述したデータが使用可能となるまで、命令がディスエーブルされていると判断できなければ、レジスタステージ25において命令をストールするべきである（すなわち、命令が実行ステージ28に入ったときに、実行しない）。
【００３０】
ここで、処理回路52は、述語レジスタファイル71の関連するレジスタ73に含まれる述語値を利用して、命令がイネーブルされているか、またはディスエーブルされているかを判断することができる。このため、処理回路52は、接続82を介して命令の述語レジスタ識別子をレジスタファイル71に送信する。この識別子は、受信した述語レジスタ識別子によって識別されるレジスタ73における述語値を読出すように設計される読出しポート84（図３）によって受信される。次に、この述語値は処理回路52に戻され、処理回路52は、受信した述語値に基づいて、命令がイネーブルされているか、またはディスエーブルされているかを判断する。処理回路52が、レジスタファイル71から読出された述語値に基づいて、命令がディスエーブルされている（すなわち、実行ステージ28で実行されない）と判断すると、処理回路52は、レジスタステージ25における命令のストールを取りやめることができ、これによってシステム15の全体的な効率が上がる。
【００３１】
各パイプライン21の各ステージ25、28、32、および／または35がレジスタファイル71に含まれる述語データを利用できるようにするため、レジスタファイル71は、各パイプライン21の各ステージ25、28、32、および／または35について別個の読出しポート84を備えることに留意すべきである。従って、スーパースカラプロセッサでは、読出しポート84の数がかなり多くなる可能性があり、そのため、システム15において比較的大きな面積を利用すると共に、システム15の配線および複雑さが増大してしまう。
【００３２】
状況によっては、レジスタファイル71から処理回路52に送信される述語値を、処理回路52により受信される前に、更新する必要がある場合がある。ここで、通常、レジスタファイル71に対して書込みまたは読出しを行う際には有限量の遅延がある。従って、レジスタファイル71における特定のレジスタ73からの述語値が接続91を介して送信されるとき、新しい述語値がレジスタファイル71によって受信され処理されると、特定のレジスタ73に含まれる値を後で更新または変更する新しい述語値がすでに接続75または86上に存在することがある。その結果、接続91を介して現在送られた値は旧くなってしまう。従って、接続91は、必要であれば、接続91を介して送信された述語値を更新するよう構成される選択回路94に結合される。
【００３３】
ここで、選択回路94は、接続91の他に接続75および86と結合されているため、レジスタファイル71から読出され接続91を介して送信された述語値と同様に、接続75および86を介して送信された新しい述語値も受信する。選択回路94は、現在接続75または86上にある新しい述語値がいずれも接続91から受信した値を生成したのと同じレジスタ73に向かっていない場合は、接続91から受信した値を選択して接続97を介して送信する。接続91からの値が、接続75または86上の新しい値が向かっているのと同じレジスタ73から読出されている場合は、選択回路94は、接続91から読出した値の代わりに新しい値を選択して接続97を介して送信する。その結果、接続97を介して送信される値は、使用可能な最新の述語データに基づいて、レジスタステージ25における命令の述語ステータスを反映する。
【００３４】
選択回路94は、簡略化のため、１つのパイプライン21からの入力のみを受信するよう図２において示されていることに留意されたい。任意のパイプライン21における任意のステージ25、28、32、および／または35が述語データを生成することができるので、選択回路94は、同様に他のパイプライン21および／または述語データを生成可能な他のステージ25および／または35に結合されて、新しい述語値をそれぞれ受信してそれらの中からレジスタファイル71に現在送信されているものを選択することができる。従って、選択回路94によって選択された値は、図２に図示していないパイプライン21によって生成された新しい述語値であることもある。
【００３５】
選択回路94が、接続97を介して送信するのに適したビット値を選択できるように、述語制御回路22は、選択回路94が受信した値のいずれを選択すべきかを示す制御信号を選択回路94に送信する。上述したように、述語制御回路22は、各パイプライン21の各ステージ25、28、32、および／または35に結合される。述語制御回路22は、命令によって生成された述語データを書込むべきレジスタ73を識別するレジスタ識別子を分析する。従って、述語制御回路22は、上記レジスタ識別子および接続82を介して送信されたレジスタ識別子を分析することにより、接続75または86上に現在ある新しい述語値が、接続91から選択回路94が現在受信した述語値を生成したのと同じレジスタ73に向かっているときを検出することができる。
【００３６】
状況によっては、接続97を介して送信するために選択回路94が選択した述語値の信頼性が低い場合がある。例えば、パイプライン21における命令の述語レジスタ識別子を分析する際、パイプライン21の１つによって処理されている命令がレジスタステージ25における命令の述語ステータスに影響を及ぼしうる述語データを後に生成する可能性があるということを、述語制御回路22が検出することがある。その結果、レジスタステージ25における命令が、接続75、86、および91を介して現在送信される値に関係なく、結局実行されてしまう場合がある。、データエラーの発生を確実に防ぐため、命令が実行されるであろうと仮定すべきである。
【００３７】
従って、述語制御回路22は、ある命令により生成された述語データが後にレジスタステージ25に現在ある命令の述語ステータスを変更する可能性があることを検出すると、「悲観的（pessimistic）信号」または「悲観的制御信号」と呼ばれるアサートされた制御信号をＯＲゲート98に送信する。その他の場合には、制御回路22によってＯＲゲート98に送信される悲観的制御信号は、デアサートされる。結果として、ＯＲゲート98の出力は、選択回路94によって現在選択された値がアサートされている（すなわち、レジスタステージ25における命令がイネーブルされていることを示す）場合、または、制御回路22からＯＲゲート98に送信される制御値がアサートされている場合には、レジスタステージ25における命令がイネーブルされていることを示す。その結果、レジスタステージ25における命令の述語ステータスに影響を及ぼしうる述語データを別の命令が後に生成する可能性のあることを制御回路22が検出した場合、選択回路94によって選択された値に関係なく、レジスタステージ25における命令をイネーブルされているものとして処理すべきであり、それによって、レジスタステージ25における命令がさらに処理されるとき、データエラーを引き起こさないことが確実になる。
【００３８】
レジスタステージ25における命令がストールされる場合、述語値を処理回路52に提供する上記のプロセスが次のクロックサイクル中に繰り返される。つまり、レジスタステージ25における命令の述語レジスタ識別子は、レジスタファイル71に送信され、この識別子によって識別されるレジスタ73の値が読出され、接続91を介して選択回路94に送信される。そして選択回路94は、述語制御回路22からの制御信号に基づいて、接続75、86、または91から値を選択し、選択した値をＯＲゲート98に送信する。上記の値および述語制御回路22からの悲観的制御信号の値に基づいて、ＯＲゲート98は、レジスタステージ25における命令の現在の述語ステータスを示す値を処理回路52に送信する。
【００３９】
レジスタステージ25における命令の処理が完了し、命令がラッチされて、実行ステージ28に提供されると、実行ステージ28における処理回路56が、命令を実行すべきか否かを判断する。ここで、述語値は、述語値が処理回路52に送信されるのと同様にして処理回路56に送信される。従って、命令の述語レジスタ識別子が、接続101を介して処理回路56からレジスタファイル71に送信される。読出しポート84（図３）のうちの１つが命令に関連付けられたレジスタ73の値（すなわち、接続101を介して送信された命令の述語レジスタ識別子によって識別されるレジスタ73の値）を読出し、この値を接続104を介して選択回路99に送信する。
【００４０】
選択回路99は、選択回路94が接続75、86、または91から値を選択する上述の仕方と同様に、述語制御回路22からの制御信号に基づいて、接続75、86、または104から値を選択する。そして、選択された値はＯＲゲート106に送信される。ＯＲゲート106は、別の命令によって後に生成される述語データが図２に示すパイプライン21の実行ステージ28における命令の述語ステータスに影響を及ぼしうる場合にアサートされる述語制御回路22からの悲観的制御信号も受信する。その結果、ＯＲゲート106の出力は、アサートされている場合、実行ステージ28における命令をイネーブルされているものとして処理するべきであることを示す。従って、ＯＲゲート106から受信した信号がアサートされている場合、処理回路56は命令を実行する。その他の場合には、処理回路56は命令の実行を回避し、命令を実行せずに通過させる。
【００４１】
上記の技法に従って、処理システム15の性能を増大させパイプライン21への命令入力を適切に実行するために、述語データを保持し利用することができる。しかし上述したように、レジスタファイル71の読出しポート84および書込みポート77（図３）は比較的高価であり、これらのポートを可能な限り最小に抑えることが望ましい。さらに、レジスタファイル71に対する書込みステップおよび読出しステップは、比較的長い時間がかかる。システム15の全体的な効率を強化するため、ステージ25、28、32、および／または35に更新された述語データを提供するのに要する時間量を最小に抑えることが望ましい。
【００４２】
一般に、本発明は、述語データを保持し、提供するためのシステムおよび方法に関する。図４は、本発明の好ましい実施形態の原理による処理システム110を示したものである。図４に示すように、処理システム110は、メモリ109に格納されているコンピュータプログラム107からの命令を実行するため、コンピュータシステム105内に採用することができる。
【００４３】
処理システム110は、１つまたは複数のバスを含みうるローカルインタフェース112を介して、システム105内のその他の要素と通信しかつそれらを駆動する。さらに、例えばキーボードまたはマウス等の入力装置114は、システム105のユーザからデータを入力するために使用でき、スクリーンディスプレイ116またはプリンタ118は、データをユーザに対して出力するために使用できる。ディスク記憶機構121は、不揮発性ディスク（例えば、磁気ディスク、光ディスク等）に対してまたはそこからデータを転送するために、ローカルインタフェース112に結合することができる。システム105は、システム105がネットワーク125とデータを交換できるようにするネットワークインタフェース123に結合することが可能である。
【００４４】
述語データを処理する回路を除き、処理システム110の構成は従来の処理システム15の構成と同じであることが好ましい。従って図５に示すように、処理システム110は、従来のシステム15に関して上述したようにレジスタステージ25、実行ステージ28、例外検出ステージ32、および書込みステージ35において、パイプライン21を介して命令を処理する。なお、所望であれば、他のステージおよび他のステージの組合せを介して、パイプライン21によって実施される処理を分割することが可能であることに留意されたい。さらに、述語制御回路143は、簡略化のため図５では１つのパイプライン21に結合されて示されているが、好ましい実施形態においては、各パイプライン21が同様に述語制御回路143に結合されることに留意されたい。
【００４５】
図６に示すように、従来のシステム15のレジスタファイル71と同様に、処理システム110はレジスタファイル144を備える。レジスタファイル114は、図６において、１つのパイプライン21に結合されて示されているが、好ましい実施形態において、各パイプライン21が同様にレジスタファイル144に結合されることに留意されたい。
【００４６】
図７を参照して、レジスタファイル144は、述語値をレジスタ73に書込むための少なくとも１つの書込みポート77を備える。図７は、簡略化のために、２つの書込みポートしか図示していないが、レジスタファイル144は、述語値を生成しうる各パイプライン21の各ステージ25、28、32、および／または35毎に少なくとも１つの書込みポート77を備えることが好ましい。レジスタファイル144はまた、レジスタファイル73に含まれる述語値を読出すための、少なくとも１つの読出しポート84も備える。しかし、従来のレジスタファイル71とは異なり、好ましい実施形態のレジスタファイル144は、各パイプライン21毎に１つの読出しポート84しか備えない。従って、図６に示すパイプライン21は、好ましい実施形態において、１つの読出しポート84にしか結合されない。所望であれば、図６のパイプライン21は、複数の読出しポート84に結合してもよいが、読出しポート84が複数になると、システム110の実施に必要な回路の量および回路の複雑さが増大してしまい、これは望ましくない。
【００４７】
さらに、図６に示すように、処理システム110は、システム110のタイミングを制御するために使用されるラッチ54、58、64、および68を備える。この点に関して、当技術分野で既知の技術を介して、ラッチ54、58、64、および68はそれぞれ命令をラッチし処理回路52、56、62、および66に提供する。従来のシステム15と同様に、ラッチ54、58、64、および68は、各ステージ25、28、32、および35における処理回路52、56、62、および66それぞれが、一度に１つの命令のみを処理するように、制御されることが好ましい。さらに、図６に示すパイプライン21は、各処理回路52、56、62、および66毎に１つの命令として、４つまでの命令を同時に処理することができる。しかし、他の実施形態において、任意の処理回路52、56、62、および／または68が、一度に複数の命令を同時に処理することも可能である。
【００４８】
処理回路52は、レジスタステージ25において命令を処理しているとき、従来のシステム15に関して上述したように、命令に関連付けられたレジスタ73（図７）に含まれる述語値を利用するように構成することができる。この述語値は、図２の処理回路52への述語データの提供に関して上述したのと同じ技法を介して、処理回路52に提供される。つまり、命令の述語レジスタ識別子は、接続82を介してレジスタファイル144に送信される。読出しポート84（図７）は、レジスタ識別子を受信して、その受信した識別子によって識別されるレジスタ73に含まれる値を読出す。そして、この値は、接続91を介して選択回路94に送信される。
【００４９】
述語制御回路143は、図２の述語制御回路22と同様に、システム110によって処理される命令の述語制御レジスタ識別子を分析し、選択回路94が受信したいずれの値を選択して送信するべきかを示す制御信号を、選択回路94に送信するよう設計される。つまり、述語制御回路143は、接続75、86、および／または他のステージおよび／またはパイプライン21からの他の接続を介してレジスタファイル144に送信されている新しい述語値がレジスタステージ25における命令の述語ステータスに影響を及ぼす可能性のない場合、少なくとも１つの制御信号を選択回路94に送信して、選択回路94に接続91から現在受信した値を選択させる。レジスタファイル144に現在送信された新しい述語値がレジスタステージ25における命令の述語ステータスに影響を及ぼしうる場合には、述語制御回路143からの上記制御信号は、選択回路94に代わりに新しい述語値を選択させる。
【００５０】
選択回路94は、接続97を介して選択された値をＯＲゲート98に送信すると共に、選択回路94が受信した他の値を無視する。本明細書の文脈において、値のさらなる処理をしない回路が値を受信したとき、値は無視される。選択回路94によって選択される値は、以下「適格（qualifying）レジスタステージ述語値（QPreg）」と呼ぶことに留意されたい。
【００５１】
述語制御回路143からの悲観的制御信号は、QPregと共にＯＲゲート98に送信される。悲観的制御信号は、レジスタステージ25における命令の述語ステータスに影響を及ぼしうる述語データを別の命令が後に生成する可能性があることを述語制御回路143が検出した場合に、アサートされる。従って、システム110におけるＯＲゲート98は従来のシステム15と同様に動作し、ＯＲゲート98の出力は、アサートされている場合、レジスタステージ25における命令をイネーブルされているものとして処理するべきであることを示す。デアサートされている場合、ＯＲゲート98の出力は、レジスタステージ25における命令をディスエーブルされているものとして処理するべきであることを示す。
【００５２】
図６に示すように、QPregは、接続97に結合された接続164を介して選択回路162に提供される。選択回路162はまた、接続76、85、および他のステージおよび／またはパイプライン21からの任意の他の同様な接続（図示せず）（すなわち、ラッチされて、レジスタファイル144に提供されることになる新しい述語値を送信する任意の他の接続）を介して送信される新しい述語値も受信する。
【００５３】
図６に示すパイプライン21のレジスタステージ25における命令がストールされない場合、述語制御回路143は、選択回路162が受信した上記の値のいずれを選択してラッチ172に送信するべきかを示す制御信号を、選択回路162に送信する。ここで、述語制御回路143は、選択回路162の受信した新しい述語値（例えば、接続76および85から受信した値）のいずれがレジスタステージ25に現在ある命令の述語ステータスを示すかを検出する。命令の述語レジスタ識別子によって識別されるレジスタ73に向かっている場合には、新しい述語値は命令の述語ステータスを示す。例えば、接続75を介して送信される新しい述語値が、レジスタステージ25における命令の述語レジスタ識別子によって識別されたレジスタ73に向かっている場合、接続75から選択回路162が受信した値は、上記命令の述語ステータスを示す。
【００５４】
選択回路162が受信した新しい述語値のうちのいずれか１つがレジスタステージ25における命令の述語ステータスを表す場合、述語制御回路143は、その１つの新しい述語値を選択すべきであることを示す制御信号を、選択回路162に送信する。それに応答して、選択回路162は上記新しい述語値を選択して、この新しい述語値をラッチ172に送信する。一方、選択回路162が受信した新しい述語値のいずれもレジスタステージ25における命令の述語ステータスを示さない場合、述語制御回路143は、接続164からのQPregを選択すべきであることを示す制御信号を選択回路162に送信し、それに応答して、選択回路162はQPregをラッチ172に送信する。選択回路162が、ラッチ172に送信するために選択した値は、本明細書において「適格実行ステージ述語値（QPexe）」と呼ばれる。
【００５５】
ラッチ172は、クロック信号の次のアクティブエッジにおいて、QPexeをＯＲゲート106に送信する。これは、レジスタステージ25における命令が実行ステージ28に入るのと同じアクティブエッジであるべきである。ＯＲゲート106はまた、述語制御回路143から悲観的制御信号も受信する。悲観的制御信号は、任意のパイプライン21における命令が実行ステージ28に現在ある命令の述語ステータスに後に影響を及ぼしうる述語データを生成する可能性があることを述語制御回路143が検出した場合、アサートされる。従って、ＯＲゲート98の出力と同様に、ＯＲゲート106の出力は、ラッチ172からの述語値が実行ステージ28における命令がイネーブルされていることを示す（すなわち、好ましい実施形態において、ラッチ172からの述語値がアサートされている）場合、または述語制御回路143からの悲観的制御信号がアサートされている場合に、アサートされる。ＯＲゲート106の出力がアサートされている場合、処理回路56は、処理回路56における命令をイネーブルされているものとして処理するよう設計される。反対に、ＯＲゲート106の出力がデアサートされている場合、処理回路56は、処理回路56における命令をディスエーブルされているものとして処理するよう設計される。
【００５６】
しかし、選択回路162がQPregを受信したとき、実行ステージ28における命令がストールされている場合、レジスタステージ25における命令は、クロック信号の次のエッジにおいて実行ステージ28に入るべきではなく、システム110の動作は、上述したものとはわずかに異なる。つまり、実行ステージ28における命令がストールされている場合、選択回路162は、実行ステージ28における命令がストールされていない場合に可能なように、QPreg（すなわち、接続164上の信号）を選択しない。選択回路162は、代わりに、述語制御回路143からの制御信号に基づいて、フィードバック接続177を介して現在送信されたフィードバック値を選択するか、または、接続85またはレジスタファイル144に提供されかつ実行ステージ28よりも後のステージ32または35からラッチされることになる新しい述語値を送信する任意の他の同様な接続（図示せず）から、選択回路162に現在送信された新しい述語値の１つを選択する。
【００５７】
ここで、上記新しい述語値の１つが実行ステージ28における命令の述語ステータスを表す場合、述語制御回路143から選択回路162に送信された制御信号は、その１つの新しい述語値を選択するべきであることを示す。このような新しい述語値が選択回路162に送信されていない場合は、述語制御回路143から選択回路162に送信される制御信号は、フィードバック接続177におけるフィードバック値を代わりに選択するべきであることを示す。
【００５８】
選択回路162は、述語制御回路143からの制御信号によって示される値を選択し、この選択した値をラッチ172に送信する。次に、述語制御回路143から送信された悲観的制御信号がＯＲゲート106の出力に影響を及ぼさない場合、クロック信号の次のアクティブエッジにおいて、この値が処理回路56に提供される。上述したように、実行ステージ28における命令の述語ステータスに後に影響を及ぼしうる述語データを命令が生成する可能性のあることを述語制御回路162が検出する場合に、悲観的制御信号はアサートされる。
【００５９】
その結果、命令が最初に実行ステージ28にステップインすると、接続回路162が命令の述語ステータスを示すより新しい述語値を接続76、85、または他の同様な接続から受信していない場合、QPreg（すなわち、接続164を介して送信される値）が選択されて、ＯＲゲート106に送信される。選択回路162が命令の述語ステータスを示す新しい述語値を受信すると、QPregの代わりに、上記新しい述語値がＯＲゲート106に送信される。
【００６０】
命令が実行ステージ28にある間にストールされると、選択回路162が命令の述語ステータスを示すより新しい述語値を接続85または実行ステージ28の後の（任意のパイプライン21の）ステージ32または35に結合された他の同様な接続から受信していない場合、命令が処理回路56にステップインしたときに選択された上記の値が継続して選択され、選択回路162、ラッチ172、およびフィードバック接続177を介してＯＲゲート106に送信される。選択回路162がこのような新しい述語値を受信する場合、この新しい述語値が代わりにＯＲゲート106に送信される。選択回路162が命令の述語ステータスを示す別の新しい述語値を接続85または実行ステージ28の後の（任意のパイプライン21の）ステージ32または35に結合された他の同様な接続から受信していない場合、上記新しい述語値が継続して選択されて、選択回路162、ラッチ172、およびフィードバック接続177を介してＯＲゲート106に送信される。
【００６１】
命令の述語ステータスを示すより新しい述語値が受信されない限りフィードバック接続177からの値を継続して選択し送信するというこのプロセスは、実行ステージ28における命令に対するストールが解除されるまで繰り返される。これが生じると、別の命令が実行ステージ28にステップインし、上記プロセス全体がその他の命令について繰り返される。従って、ＯＲゲート106は、実行ステージ28における命令の述語ステータスを示す最新の使用可能な述語値を常に受信するはずである。
【００６２】
本発明の処理回路56は、実行ステージ28における命令の述語ステータスを表すデータを、従来のシステム15の処理回路56よりも速くＯＲゲート106から受信することに留意されたい。これは、命令が実行ステージ28にステップする際に、レジスタファイル144のデータが実際に選択回路162によって読出されないためである。
【００６３】
さらに、実行ステージ28における命令の述語ステータスを判断するために実行ステージ28がQPregを用いる仕方と同様に、後の各段階32および／または35はステージの命令の述語ステータスを判断するために、先行ステージについて選択された最新の適格述語値（QPxxx）を使用することが可能である。用語QPxxxは、任意のステージ25、28、32、または35によって選択された適格述語値を表し、従ってQPreg、QPexe、QPdet、またはQPwrtを表しうる。ステージ28、32、および35は、各先行ステージ25、28、および32について選択された適格述語値を利用することができるので、パイプライン21の１つのステージ25、28、32、または35だけが実際にレジスタファイル144を読出す必要がある。残りの後のステージ（もしあれば）は、１つのステージ25、28、32、または35によって読出された結果から導き出されたデータを利用することができる。従って、レジスタファイル144の読出しポート84に結合する必要のあるものは、１つのゲート25、28、32、または35のみであるため、レジスタファイル144における読出しポート84の数は低減される。これによって、システム110の実施のコストおよび複雑さは相当に低減される。
【００６４】
本発明の精神および原理から実質的に逸脱せずに、本発明の上記実施形態に、多くの変形および変更を行いうる。かかるすべての変更および変形は、本開示および本発明の範囲内に含まれる。
【００６５】
本発明は例として以下の実施形態を含む。
【００６６】
（１）  コンピュータプログラムの命令を処理するシステム（110）であって、
レジスタ（73）と、
コンピュータプログラム（107）の命令を実行するよう構成され、第１のステージ（25、28、32、35）および第２のステージ（25、28、32、35）を有するパイプライン（21）と、
前記レジスタ（73）から第１の述語値を読出すと共に、第２の述語値を受信するよう構成され、前記第１の述語値を前記第１のステージ（25、28、32、35）に送信すると共に、前記述語値のうちの１つを選択するように構成され、さらに前記選択された述語値を前記第２のステージ（25、28、32、35）に送信すると共に、その他の前記述語値を無視するよう構成される、回路（94、162）と、
を含むシステム。
【００６７】
（２）  前記回路（94、162）によって選択された前記１つの述語値は前記第１の述語値である前記（１）に記載のシステム。
【００６８】
（３）  前記回路（94、162）によって選択された前記１つの述語値は前記第２の述語値である前記（１）に記載のシステム。
【００６９】
（４）  前記回路（94、162）は、前記第２のステージ（25、28、32、35）における命令がストールしているか否かを検出し、前記第２のステージ（25、28、32、35）における前記命令がストールされているか否かに基づいて、前記述語値の前記選択された１つを選択するようさらに構成される、前記（１）に記載のシステム。
【００７０】
（５）  レジスタ（73）と、
コンピュータプログラム（107）の命令を実行するよう構成され、第１のステージ（25、28、32、35）および第２のステージ（25、28、32、35）を有するパイプライン（21）と、
前記レジスタ（73）および前記第１のステージ（25、28、32、35）に結合され、少なくとも１つは前記レジスタ（73）から受信したものである第１の複数の述語値を同時に受信するよう構成され、前記第１の複数の述語値のうち１つを選択するよう構成され、さらに前記第１の複数の述語値のうち前記選択されたものを前記第１のステージ（25、28、32、35）に送信し、前記第１の複数の述語値の前記選択されたものを接続（164）を介して送信するよう構成される第１の回路（94）と、
前記接続（164）および前記第２のステージ（25、28、32、35）に結合され、前記接続（164）を介して送信された前記１つの述語値を含む第２の複数の述語値を同時に受信するよう構成され、前記第２の複数の述語値のうち１つを選択し、前記第２の複数の述語値のうち前記選択されたものを前記第２のステージ（25、28、32、35）に送信するよう構成される第２の回路（162）と、
を含むシステム（110）。
【００７１】
（６）  前記第２の回路（162）は前記第２の複数の述語値の前記選択されたものを含む第３の複数の述語値を同時に受信するようさらに構成され、さらに前記第３の複数の述語値のうち一つを選択し、前記第３の複数の述語値のうち前記選択されたものを前記第２のステージ（25、28、32、35）に送信するよう構成される、前記（５）に記載のシステム。
【００７２】
（７）  コンピュータプログラムの命令を処理する方法であって、
第１のステージ（25、28、32、35）および第２のステージ（25、28、32、35）を有するパイプライン（21）を提供するステップと、
述語値を生成するステップと、
該述語値をレジスタ（73）に書込むステップと、
命令を受信するステップと、
制御信号を受信するステップと、
前記命令に含まれるレジスタ識別子に基づいて、前記レジスタ（73）から前記述語値を読出すステップと、
該読出しステップにおいて読出された前記述語値を前記パイプライン（21）の前記第１のステージ（25、28、32、35）に送信するステップと、
前記第１のステージ（25、28、32、35）に送信された前記述語値に基づいて、前記パイプライン（21）の前記第１のステージ（25、28、32、35）を介して前記命令を処理するステップと、
新しい述語値を受信するステップと、
前記制御信号に基づいて、前記新しい述語値と前記読出しステップにおいて読出された前記述語値の中から選択するステップと、
該選択ステップにおいて選択された前記述語値を前記パイプライン（21）の前記第２のステージ（25、28、32、35）に送信するステップと、
前記選択ステップにおいて選択された前記述語値に基づいて、前記第２のステージ（25、28、32、35）を介して前記命令を処理するステップと、
を含む方法。
【００７３】
（８）  前記選択ステップにおいて選択される前記述語値は前記新しい述語値であり、前記選択するステップは前記読出しステップにおいて読出された前記述語値を無視するステップをさらに含む、前記（７）に記載の方法。
【００７４】
（９）  前記新しい述語値が前記命令の述語ステータスを示すか否かを検出するステップと、
該検出するステップに基づいて、前記選択するステップを実施するステップと、
をさらに含む前記（７）に記載の方法。
【００７５】
（１０）  第２の新しい述語値を受信するステップと、
該第２の新しい述語値と前記第２の回路（162）に送信される前記述語値の中から選択するステップと、
前記命令がストールされていることを検出するステップと、
前記検出するステップに応答して、前記第２の新しい述語値と前記第２の回路（162）に送信される前記述語値の中から選択するステップを実施するステップと、
をさらに含む前記（７）に記載の方法。
【００７６】
【発明の効果】
本発明によると、レジスタファイルに対する読出しに必要な読出しポートの数を最小にすることができ、また、各ステージに更新された述語データを提供するのに要する時間量を最小に抑えることができる。
【図面の簡単な説明】
【図１】従来の処理システムを示すブロック図である。
【図２】図１に示す処理パイプラインのより詳細な図を示すブロック図である。
【図３】図２に示すレジスタファイルのより詳細な図を示すブロック図である。
【図４】本発明による処理システムを採用したコンピュータシステムを示すブロック図である。
【図５】図４の処理システムを示すブロック図である。
【図６】図５に示す処理パイプラインのより詳細な図を示すブロック図である。
【図７】図６に示すレジスタファイルのより詳細な図を示すブロック図である。
【符号の説明】
21        パイプライン
25、28、32、35      第１のステージ、第２のステージ
73        レジスタ
94        第１の回路
107      コンピュータプログラム
162      第２の回路
164      接続
【図１】
0003756410.tif 000002
【図２】
0003756410.tif 000003
【図３】
0003756410.tif 000004
【図４】
0003756410.tif 000005
【図５】
0003756410.tif 000006
【図６】
0003756410.tif 000007
【図７】
0003756410.tif 000008