(57)【要約】  プロセッサ内で実行する対象の命令のソース・オペランドを供給するための方法及び装置。特定の実施例は、レジスタを有するレジスタ・ファイル・ユニットと、命令をスケジューリングするためのスケジューラとを有し得る。特定の実施例では、スケジューラは、命令と、その命令のソース・オペランドとを非同期に受け取るものとし、ソース・オペランドは、レジスタ・ファイル・ユニットから受け取られる。
2008515117.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
複数のレジスタを備えるレジスタ・ファイル・ユニットと、
命令をスケジューリングするためのスケジューラとを備えており、前記スケジューラは、スケジューリングする対象の命令を受取るものとし、前記スケジューラは前記レジスタ・ファイル・ユニットから、スケジューリングする対象の前記受け取られた命令のソース・オペランドを受け取るものとし、前記スケジューラは前記命令及び前記ソース・オペランドを非同期に受け取るものとするプロセッサ。
【請求項２】
請求項１記載のプロセッサであって、前記レジスタ・ファイル・ユニット内のレジスタをインフライト状態の命令によって用いるものとするか否かを示すためのエレメントを更に備えるプロセッサ。
【請求項３】
請求項２記載のプロセッサであって、前記エレメントが、メモリ及び複数のコンパレータのうちの一方を備えるプロセッサ。
【請求項４】
請求項２記載のプロセッサであって、前記プロセッサは、前記スケジューラに命令をディスパッチするためのディスパッチャを更に備えており、前記ディスパッチャは、ディスパッチする対象の命令のソース・オペランドの場所として規定されるレジスタからデータを読み出す旨の要求を生成するか否かを前記エレメントから判定し、前記要求が生成された場合、前記読み出し要求の完了に先行して前記命令をディスパッチするものとするプロセッサ。
【請求項５】
請求項１記載のプロセッサであって、前記レジスタ・ファイル・ユニット内のレジスタからデータを読み出す旨の要求をバッファリングするための読み出しキューを更に備えるプロセッサ。
【請求項６】
請求項５記載のプロセッサであって、前記読み出しキューが、複数のメモリ・セル・バンクを備えるプロセッサ。
【請求項７】
請求項６記載のプロセッサであって、前記レジスタ・ファイル・ユニットが、複数のスタティック・ランダム・アクセス・メモリ・セルを備えるプロセッサ。
【請求項８】
請求項１記載のプロセッサであって、前記レジスタ・ファイル・ユニット内の前記複数のレジスタが複数のバンク内に配置されたプロセッサ。
【請求項９】
請求項８記載のプロセッサであって、前記プロセッサは、前記レジスタ・ファイル・ユニットに結合されて、前記レジスタ・ファイル・ユニットへの書き込みをキューイングするための書き込みキューを更に備えており、前記書き込みキューが複数のバンクを備えるプロセッサ。
【請求項１０】
請求項１記載のプロセッサであって、前記レジスタ・ファイル・ユニットが４つのポートを更に備えるプロセッサ。
【請求項１１】
請求項１記載のプロセッサであって、前記プロセッサは、機能ユニット及びバスを更に備えており、前記バスは、前記スケジューラの入力ポートに結合され、前記機能ユニットの出力ポートに結合され、前記複数のレジスタ内の第１のレジスタの出力ポートに結合され、前記バスは、前記機能ユニット及び前記第１のレジスタによって共有されるプロセッサ。
【請求項１２】
請求項１１記載のプロセッサであって、前記スケジューラの前記入力ポートが、前記機能ユニット及び前記第１のレジスタによって共有されるプロセッサ。
【請求項１３】
請求項１記載のプロセッサであって、前記プロセッサは、機能ユニットを更に備えており、前記プロセッサは、前記レジスタ・ファイル・ユニットに結合された入力ポートを有しており、前記機能ユニットに結合された出力ポートを有しているバイパス・ネットワークを更に備えており、命令は、前記命令のソース・オペランドが前記バイパス・ネットワーク内で利用可能であるインフライト・ステータスを有するプロセッサ。
【請求項１４】
プロセッサであって、
命令をスケジューリングするためのスケジューラと、
複数のレジスタを備えるレジスタ・ファイル・ユニットと、
前記複数のレジスタのうちの１つから読み出す対象のソース・オペランドを規定する新たな命令を前記スケジューラにディスパッチするためのディスパッチャとを備えており、前記新たな命令によって読み出される対象のレジスタをインフライト状態の先行する命令によっても用いるものとする場合、前記ディスパッチャは、前記新たな命令のために前記レジスタから前記ソース・オペランドを読み出す旨の要求を生成することなく前記新たな命令をディスパッチするものとするプロセッサ。
【請求項１５】
請求項１４記載のプロセッサであって、前記新たな命令によって読み出される対象のレジスタが、インフライト状態の先行する命令によっても用いるものとする場合、前記スケジューラは、前記先行する命令の結果として、前記新たな命令の前記ソース・オペランドを受け取るものとするプロセッサ。
【請求項１６】
請求項１５記載のプロセッサであって、前記新たな命令の前記ソース・オペランドが、前記スケジューラにバイパス・ネットワークから供給されるプロセッサ。
【請求項１７】
請求項１５記載のプロセッサであって、前記プロセッサは、配列を記憶するためのメモリを更に備えており、前記配列内のエントリは、前記レジスタ・ファイル・ユニット内のレジスタについて、前記レジスタを用いるものとする命令がインフライト状態で存在しているか否かを示すプロセッサ。
【請求項１８】
請求項１７記載のプロセッサであって、前記レジスタ・ファイル・ユニット内のレジスタからデータを読み出す旨の要求をバッファリングするための読み出しキューを更に備えるプロセッサ。
【請求項１９】
請求項１８記載のプロセッサであって、前記読み出しキューが、複数のメモリ・セル・バンクを備えるプロセッサ。
【請求項２０】
請求項１４記載のプロセッサであって、前記レジスタ・ファイル・ユニット内の前記複数のレジスタが複数のバンクとして配置されたプロセッサ。
【請求項２１】
請求項１４記載のプロセッサであって、前記プロセッサは、前記レジスタ・ファイル・ユニットに結合されて、前記レジスタ・ファイル・ユニットへの書き込みをキューイングするための書き込みキューを更に備えており、前記書き込みキューが複数のバンクを備えるプロセッサ。
【請求項２２】
請求項１４記載のプロセッサであって、前記プロセッサは、前記スケジューラの入力ポートに結合された出力ポートを有する機能ユニットを更に備えており、前記レジスタ・ファイル・ユニット内の第１のレジスタの出力ポートが、前記機能ユニットとしての前記スケジューラの同じ入力ポートに結合されたプロセッサ。
【請求項２３】
請求項２２記載のプロセッサであって、前記プロセッサは、前記機能ユニットの前記出力ポートを前記スケジューラの前記入力ポートに結合する共有バスを更に備えており、前記共有バスは更に、前記第１のレジスタの前記出力ポートを前記スケジューラの前記入力ポートに結合するプロセッサ。
【請求項２４】
システムであって、
複数のレジスタを備えるレジスタ・ファイル・ユニットと、
命令をスケジューリングするためのスケジューラと、 
前記複数のレジスタのうちの１つから読み出す対象のソース・オペランドを有する命令を前記スケジューラにディスパッチするためのディスパッチャと、
前記ソース・オペランドを、先行する命令から得ることができるか否かを前記ディスパッチャに示すためのエレメントとを備えるシステム。
【請求項２５】
請求項２４記載のシステムであって、前記レジスタ・ファイル・ユニットを前記スケジューラに結合して、前記スケジューラ内で待つ命令のソース・オペランドを前記スケジューラに供給するシステム。
【請求項２６】
請求項２４記載のシステムであって、前記プロセッサは、機能ユニット及びバスを更に備えており、前記バスは、前記スケジューラの入力ポートに結合され、前記機能ユニットの出力ポートに結合され、前記レジスタ・ファイル・ユニット内の第１のレジスタの出力ポートに結合され、前記バスは、前記機能ユニット及び前記第１のレジスタによって共有されるシステム。
【請求項２７】
請求項２６記載のシステムであって、前記スケジューラの前記入力ポートが、前記機能ユニット及び前記第１のレジスタによって共有されるシステム。
【請求項２８】
請求項２４記載のシステムであって、前記レジスタ・ファイル・ユニット内のレジスタからデータを読み出すための要求をバッファリングするための読み出しキューを更に備えるシステム。
【請求項２９】
請求項２８記載のシステムであって、前記読み出しキューが、複数のスタティック・ランダム・アクセス・メモリ・セル・バンクを備えるシステム。
【請求項３０】
方法であって、
レジスタから読み出す対象のソース・オペランドを新たな命令が有することを判定する工程と、
前記新たな命令によって読み出される対象のレジスタと同じレジスタをインフライト命令が用いるものとするか否かを判定する工程と、
前記新たな命令によって読み出される対象のレジスタと同じレジスタをインフライト命令が用いるものとする場合に前記ソース・オペランドを読み出す旨の要求を前記レジスタに送出することなく、前記新たな命令をスケジューラにディスパッチする工程とを備える方法。
【請求項３１】
請求項３０記載の方法であって、先行する命令による前記レジスタからの読み出しの結果を用いて、前記新たな命令によって用いるために前記スケジューラに前記ソース・オペランドを供給する工程を更に備える方法。
【請求項３２】
請求項３０記載の方法であって、インフライト命令は、前記新たな命令によって読み出されるレジスタと同じレジスタを用いるものと、前記インフライト命令が前記同じレジスタから読み出すか、又は前記同じレジスタに書き込む場合、みなされる方法。
【請求項３３】
請求項３０記載の方法であって、インフライト命令が、前記新たな命令によって読み出されるレジスタと同じレジスタを用いるものとするか否かを判定する工程は、メモリ内の配列を検査して、インフライト状態の何れかの命令を、前記新たな命令と同じレジスタから読み出すか、又は、前記同じレジスタに書き込むものとするかを判定する工程を備える方法。
【請求項３４】
請求項３０記載の方法であって、
ソース命令によって読み出される対象のレジスタと同じレジスタを用いるものとするインフライト命令が存在していないことを判定する工程と、
前記同じレジスタを読み出す旨の要求を生成する工程と、
前記同じレジスタを読み出す旨の生成された要求の結果を受け取る前に前記新たな命令を前記スケジューラにディスパッチする工程とを更に備える方法。
【請求項３５】
請求項３４記載の方法であって、前記レジスタを読み出す旨の要求を生成する工程が、前記ソース・オペランドを前記レジスタから読み出す旨の要求を前記レジスタの読み出しキューに送出する工程を備える方法。
【請求項３６】
請求項３０記載の方法であって、前記新たな命令の前記ソース・オペランドを、前記レジスタの出力ポートからか、又は機能ユニットの出力ポートから前記スケジューラの入力ポートに供給する工程を更に備えており、前記レジスタ及び前記機能ユニットが、前記スケジューラの入力ポートを共有する方法。
【請求項３７】
方法であって、
レジスタから読み出す対象のソース・オペランドを新たな命令が有していることを判定する工程と、
前記新たな命令をスケジューラにディスパッチする工程と、
前記スケジューラへの前記新たな命令の前記ディスパッチとは非同期に前記ソース・オペランドを前記スケジューラに供給する工程とを備える方法。
【請求項３８】
請求項３７記載の方法であって、前記新たな命令の実行をスケジューリングする工程を更に備え、前記スケジューラは、前記新たな命令の実行をスケジューリングする前に、前記スケジューラに前記ソース・オペランドが供給されるのを待つ方法。
【請求項３９】
請求項３７記載の方法であって、先行する命令による前記レジスタからの読み出しの結果を用いて、前記新たな命令によって用いるために前記スケジューラに前記ソース・オペランドを供給する工程を更に備える方法。
【請求項４０】
請求項３７記載の方法であって、前記新たな命令の前記ソース・オペランドを、前記レジスタの出力ポートからか、又は機能ユニットの出力ポートから前記スケジューラの入力ポートに供給する工程を更に備えており、前記レジスタ及び前記機能ユニットが、前記スケジューラの入力ポートを共有する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例は一般に、コンピュータ・プロセッサにおける命令パイプラインに関する。
【背景技術】
【０００２】
コンピュータ・システム内のプロセッサは通常、命令の実行を一連のステ―ジにおいて行う。これはパイプラインと呼ばれることがあり得る。前述のステージそれぞれは、プロセッサの別々の部分によって行われ得る。例として、命令をデコーダによってデコードすることができ、後に、デコードされた命令を機能ユニットによって実行することができる。「アウト・オブ・オーダー」アーキテクチャでは、命令は、導き出されるプログラムによって規定される順序とは異なる順序で実行ユニットによって実行することができる。前述の場合、命令は、ディスパッチャによってスケジューラにディスパッチすることができ、スケジューラは、命令を実行する機能ユニットに命令が出される順序を判定することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
プロセッサが行う命令は通常、レジスタを用いてデータを記憶する。命令は、レジスタに記憶され得る１つ又は複数のソース・オペランドを有し得る。命令は結果をもたらし得る。この結果もレジスタに記憶され得る。命令は、レジスタを用いるものと、ソース・オペランドがそのレジスタに記憶される（すなわち、レジスタから読み出す）場合か、又は結果がそのレジスタに記憶される（すなわち、レジスタに書き込む）場合に言うことができる。例えば、特定の命令の場合、プロセッサは、レジスタR0からデータ・オペランドを読み出し、レジスタR3からデータ・オペランドを読み出し、前述のデータ・オペランドを加算し、次いで、結果をもう一度レジスタR4に記憶することができる。一部の従来のアーキテクチャはレジスタ・キャッシュを有していることがあり得る。前述のアーキテクチャでは、ソース・オペランドはレジスタ・キャッシュから得ることができ、キャッシュ・ミスの場合、レジスタ・ファイル・ユニットから得ることができる。従来のアーキテクチャでは、パイプライン内の命令は全て、レジスタ・ファイル・ユニット（又は関連したレジスタ・キャッシュ）を通って流れなければならない。例えば、一部の従来のアウト・オブ・オーダー・アーキテクチャは、主パイプラインにおいてスケジューラの後にレジスタ・ファイル・ユニットを有する（その場合、命令がスケジューラを出て機能ユニットにスケジューリングされるにつれ、レジスタ・ファイル・ユニットをアクセスすることができる）か、又は主パイプラインにおいてスケジューラの前にレジスタ・ファイル・ユニットを有し得る（その場合、レジスタ・ファイル・ユニットは、命令がスケジューラに入るにつれ、アクセスすることができる）。
【課題を解決するための手段】
【０００４】
本発明の実施例は、プロセッサのパイプライン内の命令のソース・オペランドを供給するための方法及び装置に関する。特定の実施例では、プロセッサは、スケジューラ内の命令のデータ・オペランドを供給することに関し、機能ユニットに並列に実現されるレジスタ・ファイル・ユニットを有しており、機能ユニットであるかのようにデータ・オペランドを供給するものとみなし得る。特定の実施例では、レジスタから読み出される対象のソース・オペランドを有する命令は、このソース・オペランドの生成側命令がインフライト状態で存在している場合、読み出された要求をそのレジスタに送出することなくディスパッチすることができ、もしそうでなくても、そのレジスタに対する読み出し要求の結果が利用可能になる前にディスパッチすることができる。特定の実施例によれば、複数の命令による同じ物理レジスタに対する複数の読み出しは、単一のレジスタ・ファイル読み出しに落とし込むことができる。よって、レジスタ・ファイルの１つの読み出しによって、スケジューラ内で1乃至n個の待機命令にそのデータを潜り込ませることができる。特定の実施例では、プロセッサは、可変レーテンシを有するレジスタ・ファイル・アクセスを許容するよう企図することができる。
【発明を実施するための最良の形態】
【０００５】
本明細書及び特許請求の範囲記載の例の修正及び変形が、以下に記載した教示によって包含され、特許請求の範囲記載の範囲内にあることが分かるであろう。
【実施例】
【０００６】
図１は、本発明の実施例による、ソース・オペランドをスケジューラに供給するプロセッサの単純化された構成図である。図１は、リタイヤメント・オーダー・バッファ１１０と、ディスパッチャ１２０と、インフライト・メモリ１２５と、スケジューラ１３０と、読み出しキュー１４０と、レジスタ・ファイル・ユニット１５０と、機能ユニット１６０とを含むプロセッサ１００を示す。プロセッサ１００は、コンピュータ・システム用の何れかのタイプのプロセッサ（例えば、インテル社(Santa  Clara,  California)によるペンティアム（登録商標）クラスのプロセッサなど）であり得る。図１に示すユニットは、例えば、ハードウェア、ファームウェア、又はこれらの特定の組み合わせとして実現することができる。図１は、プロセッサ１００の命令パイプラインを示すが、他の実施例では、命令パイプラインは、より多くのユニット、異なるユニット、及び／又は更なるユニットを含み得る。
【０００７】
図１に示すように、リタイヤメント・オーダー・バッファ１１０は、複数の命令（命令１５乃至１７など）を記憶する。前述の命令は例えば、（例えば、既知の命令処理手法によって）プロセッサ１００によって実行する対象のプログラム命令組からデコードされたマイクロ命令であり得る。前述の命令は、マクロ命令、マイクロ命令及びマクロ命令の特定の組み合わせ等でもあり得る。例えば、命令１５は、「ADD  R0=R3,R4」するための命令であり得る。これは、レジスタ0に記憶されたデータ・オペランドを、レジスタ3に記憶されたデータ・オペランドに加算し、その結果をレジスタ4に記憶することを必要とし得る。当然、リタイヤメント・オーダー・バッファ１１０は、実行する対象の4つ以上の命令を記憶することができる。図示した実施例では、命令は、命令によって用いられる対象の何れのデータ・オペランドとともにもリタイヤメント・オーダー・バッファ１１０に記憶されるものでない。後述するように、データはパイプライン内の先のユニットによって供給される。
【０００８】
リタイヤメント・オーダー・バッファ１１０は、ディスパッチャ１２０に結合され、ディスパッチャ１２０に命令を供給することができる。２つのアイテムは、直接又は間接に接続されている場合、「結合されている」ものとして本明細書及び特許請求の範囲で表し得る。特定の実施例において、かつ、図１に示すように、ディスパッチャ１２０は読み出しキュー１４０に結合される。読み出しキュー１４０は同様にレジスタ・ファイル・ユニット１５０に結合される。図１に示す実施例では、レジスタ・ファイル・ユニット１５０は、第１のレジスタ・バンク１５１及び第２のレジスタ・バンク１５２を含み、読み出しキュー１４０は同様に、第１のメモリ・セル・バンク１４１及び第２のメモリ・セル・バンク１４２を含む。例えば、キューは、偶数レジスタ・バンク及び奇数レジスタ・バンクに構成することができる。他の実施例では、レジスタ・ファイル・ユニット１５０及び読み出しキュー１４０は、バンクに構成されないことがあり得るか、又は異なる数のバンクを含み得る。特定の実施例では、プロセッサは、単純なSRAMセルによって実現された2個のバンクのレジスタ・ファイル・ユニット（バンク毎の２つの読み出しポートを備える）を含み得る。サイクル毎の読み出し結果は、最大計４個である。図示した実施例では、ディスパッチャ120は、レジスタ・ファイル・ユニット150内のレジスタを読み出して、命令によって用いる対象のデータ・オペランドを供給する旨の要求を読み出しキュー140に送出することができ、読み出しキュー140は、前述の要求をバッファリングし、これをレジスタ・ファイル・ユニット150内の適切なレジスタに転送することができる。例えば、ディスパッチャ120は、レジスタR3からデータ・オペランドを読み出すものとする命令１３をディスパッチする場合、レジスタR3からの読み出しを要求する要求121を読み出しキュー140に送出することができる。特定の実施例では、待機要求が存在しない場合、読み出しキューをバイパスすることができる。読み出しキュー１４０は、キューを実現する何れかのタイプのメモリ装置であり得る。読み出しキューは、例えば、最悪のケースの読み出し要求レートを吸収するよう企図することができ、レジスタ・ファイル・ユニットの読み出しパス（例えば、対応するバンク内の利用可能なレジスタ読出しポート経由）によってサポートされるレートで排出させることができる。特定の実施例では、レジスタ読み出しキューは、レジスタ読み出し要求のフロー・レートを定常状態レベルに向けて平滑化させることができる。
【０００９】
レジスタ・ファイル・ユニット１５０は、周知のように、プロセッサ１００によって実行される命令によって用いられるデータ・オペランドを記憶するのに用いることができるレジスタ群R0乃至Rnを含む。レジスタ・ファイル・ユニット１５０は、何れかのタイプのメモリ・ユニット（スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）セル群、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）群や、伝統的なレジスタ・セルなど）であり得る。レジスタ・ファイル・ユニット１５０は、何れかの数のレジスタ（例えば、512個の82ビット・レジスタなど）を含み得る。特定の実施例では、たくさんの物理レジスタを、例えば、高密度低電力ＳＲＡＭセル（例えば、データ・キャッシュ内など）を用いて実現することができる。アーキテクチャ上の、かつ投機的なレジスタ状態を同じ物理レジスタ・ファイル内で混ぜることができる。前述の実施例では、アーキテクチャ上の、かつ投機的なレジスタ・リネーミングによって、リネーム・ポインタが調節され得る。正しいアーキテクチャ状態を維持するために命令が廃棄されるからである。特定の実施例では、レジスタ・ファイル・ユニット内のレジスタは、少数のポートを有する。一実施例では、例えば、レジスタは、4命令／サイクルのディスパッチ・マシン上の2個の読み出しSRAMキャッシュ・セル及び1個の書き込みSRAMキャッシュ・セルを用いて、2個のバンクに分離された、合計４個の読み出しポート及び合計２個の書き込みポートを備えるレジスタ・ファイル・ユニットとして実現することができる。例えば、レジスタ・ファイル・ユニットは、５１２個のレジスタ及び４個の出力ポートを有し得る。
【００１０】
ディスパッチャ１２０はスケジューラ１３０に結合される。スケジューラ１３０は同様に、機能ユニット１６０に結合される。他の実施例では、プロセッサは、複数のスケジューラ（機能ユニット毎又は機能ユニット・クラスタ毎に１つなど）を有し得る。ディスパッチャ１２０は、命令１３などの命令をスケジューラ１３０にディスパッチすることができる。スケジューラ１３０は、機能ユニットのうちの１つによる実行がスケジューリングされることを待ついくつかの命令（命令１１乃至１２など）を記憶することができる。スケジューラ１３０は、（スケジューラ１３０に示す空の欄によって示唆されているように）命令によって用いる対象のオペランド無しの命令を記憶することができる。特定の実施例では、命令は、スケジューラ１３０にディスパッチされると「インフライト」のステータスを有し始め得る。命令は、データ結果が、そのレジスタに対して供給され（後述するように、例えば、レジスタ・ファイル・ユニットや機能ユニットによって）、（例えば、機能ユニットやバイパス・ネットワークから）もう利用可能でない状態になるまでインフライト・スタータスを持ち続け得る。機能ユニット１６０は、命令を行う1つ又は複数のユニット（算術論理演算ユニット、浮動小数点演算実行ユニット、整数演算実行ユニットや分岐演算実行ユニット等など）であり得る。命令は、実行するものとする場合、機能ユニット１６０のうちの適切な機能ユニットに転送される。その機能ユニットは命令を実行する。スケジューラ１３０は、生起する順序とは異なる順序で命令を実行し得るという点でアウトオブオーダー・スケジューラであり得る。例えば、命令１２の前に命令１１がスケジューラ１３０にディスパッチされていても、命令１２を命令１１の前に実行し得る。スケジューラ１３０は、何れかのスケジューリング・アルゴリズムを実現することによって命令をスケジューリングすることができる。
【００１１】
図１に示すように、レジスタ・ファイル・ユニット１５０の出力ポートは、（ここでは、マルチプレクサを介して）スケジューラ１３０の入力ポートに結合される。更に、機能ユニット１６０は、スケジューラ１３０の入力ポートに結合された出力ポートを有する。特定の実施例によれば、レジスタから読み出す対象のデータ・オペランドを規定する命令は、規定されるソース・オペランド無しで、かつオペランドが利用可能になる前にスケジューラ１３０にディスパッチすることができる。特定の実施例では、スケジューラ130は、命令であって、レジスタを規定し、その命令のソース・オペランドのスケジューラにおける到着に基づいて、記憶された命令をスケジューリングするソース・オペランドを備える命令を記憶する。特定の実施例では、命令のソース・オペランドは、新たな命令をスケジューラにディスパッチする時点とは非同期でスケジューラに供給される。これは、命令がスケジューラにディスパッチされる時点と、ソース・オペランドがスケジューラに到着する時点との間で時間上の相関が何ら存在しないことがあり得ることを意味する。よって、命令のスケジューラにおける到着は、その命令のデータ・オペランドのスケジューラにおける到着と切り離し得る。図２を参照して以下に更に詳細に説明するように、スケジューラ内で待機している命令によって用いる対象のソース・オペランドは、スケジューラに、レジスタ・ファイル１５０又は機能ユニット１６０から供給することができる。例えば、命令１２が、レジスタから読み出す対象のソース・オペランド１５３を用いる対象の命令であるとし、そのソース・オペランドが利用可能な状態になる前にスケジューラ１３０にディスパッチされていたとすれば、ソース・オペランド１５３を、レジスタ・ファイル１５０又は機能ユニット１６０から、待機命令１２によって用いるためにスケジューラ１３０に供給することができる。
【００１２】
図１は、ディスパッチャ１２０に結合されるインフライト・メモリ１２５も示す。図示したように、インフライト・メモリ１２５は、図１において例証的な目的のためにエントリ0乃至nとラベリングされた複数の１ビット・メモリ位置を有する。図示した実施例では、レジスタ・ファイル・ユニット内のレジスタを、インフライト状態の命令によって用いることとするか否かを示す配列又はテーブルを記憶する。他の実施例では、他のエレメント／機構（コンテンツ・アドレス指定可能メモリ、コンパレータのラインアップ等など）を用いて、レジスタ・ファイル・ユニット内のレジスタを、インフライト状態の命令によって用いるものとするか否かを示すことができる。図１に示す例では、インフライト・メモリ１２５内のエントリ番号0は値「1」（インフライト状態である命令によってレジスタ0を用いるものとすることを示し得る）を有しており、エントリ番号1は値「0」（レジスタ1を用いるものとする、インフライト状態の命令は存在していないことを示し得る）を有している。特定の実施例では、前述のインフライト・テーブルを、スケジューラにディスパッチされた生成側命令全てを反映するよう更新することができる。特定の実施例では、インフライト・ステータスは、レジスタ読み出し要求の場合にもセットすることができる。レジスタ・ファイル・ユニットは、物理レジスタの生成側であるからである。後述のように、ディスパッチャ１２０は、インフライト・メモリ１２５に記憶された情報を用いて、ディスパッチする対象の命令のキュー１４０を読み出す旨の要求を生成するか（すなわち、命令のソース・オペランドの位置として規定されるレジスタからデータを読み出す旨の要求を生成するか）否かを判定することができる。前述の要求が生成された場合、ディスパッチャ１２０は、読み出し要求の完了前にスケジューラ１３０に命令をディスパッチすることができる。特定の実施例では、インフライト・メモリ１２５内のセルは完全に移し得るか、又は部分的に移し得る。
【００１３】
図２は、本発明の実施例による、命令をスケジューラにディスパッチし、レジスタからの読み出しを要求する方法の単純化されたフロー図である。この方法は、図１に示す装置を参照して説明するが、何れかの他の適切な装置を用いて行うこともできる。命令は、プロセッサ（プロセッサ100など）のパイプラインを通って流れ得る。命令は、例えば、リタイヤメント・オーダー・バッファ110に記憶することができる。新たな命令を検査することができる。レジスタ(201)から読み出す対象のソース・オペランドを命令が有することを判定することができる。例えば、ディスパッチャ120は、リタイヤメント・オーダー・バッファから命令を取得し、命令が「ADD  R0=R3,R4」命令であることを判定することができる。その場合、ソース・オペランドは、レジスタ0及びレジスタ3から読み出さなければならない。別の例では、新たな命令は、レジスタから読み出すソース・オペランドを有しない場合、当業者が分かるように、単に、スケジューリングのためにスケジューラに転送し得る。
【００１４】
新たな命令が、レジスタから読み出すソース・オペランドを有する場合、図示した実施例によって、何れかのインフライト命令が、新たな命令によってそこから読み出されるものとするその同じレジスタを用いるか否かが判定される(202)。特定の実施例では、インフライト命令は、その同じレジスタから読み出すか、又はその同じレジスタに書き込む場合、新たな命令によってそこから読み出されるその同じレジスタを用いるものとみなされる。特定の実施例では、インフライト命令が、新たな命令によってそこから読み出されるその同じレジスタを用いるものとするか否かを判定する工程は、メモリ内の配列を検査して、インフライト状態の何れかの命令を、新たな命令と同じレジスタから読み出すか、又は、その同じレジスタに書き込むものとするか否かを判定する工程を備える。例えば、レジスタ0及びレジスタ3から読み出す「ADD  R0=R3,  R4」である命令14を受け取った場合、ディスパッチャ120は、何れかのインフライト命令がレジスタ0及びレジスタ3を用いるものとするかをみるためにインフライト・メモリ125を検査し得る。図１に示す例では、（レジスタ0に対応する）インフライト・メモリ125内のエントリ0は、値「1」を有する（これは、インフライト命令（例えば、命令11）がレジスタ0を用いるものとすることを示し得る）。
【００１５】
インフライト命令が、新たな命令によってそこから読み出されるものとするその同じレジスタを用いる場合、新たな命令を、ソース・オペランドを読み出す旨の要求をレジスタに送出することなくスケジューラにディスパッチすることができる（203）。この場合、インフライト命令からの結果オペランドを、新たな命令によってソース・オペランドとして用いるために、スケジューラに供給することができる(204)。前述の例では、命令14が、レジスタ0に記憶されたソース・オペランドを用いるものとするが、命令11が、インフライト状態であり、レジスタ0から読み出されるか、又はレジスタ0に書き込むものとする場合、レジスタ0を読み出す旨の読み出し要求をレジスタ・ファイル・ユニット150に送出することなく、命令14をスケジューラ130にディスパッチすることができる。命令11が単にレジスタ0から読み出す場合、レジスタ0から読み出されるオペランド（図1のオペランド153など）を、レジスタの出力ポートからスケジューラ130の入力に供給することができる。この時点で、オペランドは、将来、命令14によって、その命令が実行されると用いるためにスケジューラ130に記憶することができる。命令11が、レジスタ0の値を変える（例えば、結果をレジスタ0に書き込む）場合、命令11（図1のオペランド153など）を実行すると機能ユニット160によってもたらされる結果は、機能ユニットの出力ポートからスケジューラ130の入力に、前述のように、将来、命令14によって用いるために供給し得る。当然、新たな命令には、それが依存するインフライト命令に先行した実行がスケジューリングされないものとする。よって、特定の実施例によれば、生成側命令がインフライト状態である場合、読み出し要求が生成されない。ここで、生成側命令は、機能ユニット又はレジスタ・ファイル・ユニットによって行われるものであり得る。
【００１６】
新たな命令によってそこから読み出されるものとするその同じレジスタを用いるインフライト命令が存在しない場合、新たな命令のソース・オペランドを含むレジスタから読み出す旨の要求を生成し得る(205)。上記例では、レジスタ0を用いるインフライト命令が存在しないことをインフライト・メモリ125が示す場合、ディスパッチャ120は、レジスタ0を読み出すための要求121を生成することができる。特定の実施例では、レジスタを読み出す旨の要求を生成する工程は、そのレジスタの読み出しキュー（例えば、読み出しキュー140）に、ソース・オペランドをレジスタから読み出す旨の要求を送出する工程を備える。よって、特定の実施例によれば、ディスパッチャは、読み出し要求を受け取るのに利用可能なポートがレジスタ・ファイル内に十分存在していなくても命令を命令スケジューラにディスパッチし続けることができる。図2に示す実施例では、新たな命令は、生成された読み出し要求の結果を受け取る前にスケジューラにディスパッチされる(206)。上記例では、読み出し要求121に応答してレジスタ0がまだ読み出されていなくても命令14をスケジューラ130にディスパッチすることができる。図2に示すように、新たな命令のソース・オペランドを、読み出し要求が完了するとレジスタから新たな命令によって用いるためにスケジューラに供給することができる。例えば、命令12は、読み出し要求121に応答してレジスタ0からスケジューラ130にオペランド153が供給されるのをスケジューラ130において待ち得る。
【００１７】
特定の実施例では、プロセッサ機能ユニットに用いることができるように、コンテンツ・アドレス指定可能メモリ(CAM)を用いてレジスタ・ファイル結果をスケジューラにロードすることができる。特定の実施例では、新たな命令のソース・オペランドを、レジスタの出力ポートからか、又は機能ユニットの出力ポートからスケジューラの入力ポートに供給することができる。レジスタ・ファイル・ユニット及び機能ユニットは、スケジューラ入力ポートを共有する。特定の実施例では、スケジューラ内で待つ命令は、レジスタ・ファイル・データ値が到着する時点に影響を受けないことがあり得る。よって、スケジューラはソース・オペランド・データを機能ユニットとしてキャプチャすることができ、レジスタ・ファイル・ユニットはその結果をもたらす。スケジューラは、特定の命令に要求されるソース・オペランド・データ値を全て有している場合、正しい機能ユニットに命令を出し得る。特定の実施例では、レジスタ読み出し値を必要としない後の命令は、レジスタ・ファイル読み出しを必要とする命令近くでスケジューリングされるためにスケジューラに直ちに入り得る。よって、ソース・オペランドを、新たな命令のスケジューラへのディスパッチとは非同期にスケジューラに供給することができる。スケジューラは、実行するために新たな命令をスケジューリングする前にスケジューラにソース・オペランドが供給されるのを待ち得る。
【００１８】
図３は、本発明の更なる実施例による、スケジューラに結合されたレジスタ・ファイル・ユニット及び機能ユニットを備えるプロセッサの詳細を示す単純化された構成図である。図３は、図１に示す構成部分の一部を備えるプロセッサ100を示す。特に、図３は、スケジューラ130、レジスタ・ファイル・ユニット150及び機能ユニット160を示す。図３に示す実施例では、プロセッサ100は、スケジューラ130、レジスタ・ファイル・ユニット150及び機能ユニット160に結合されたバイパス・ネットワーク310も有する。特に、バイパス・ネットワーク310の出力ポートは、スケジューラ130の入力ポートに結合されており、（ここでは、マルチプレクサを介して）機能ユニット160の入力ポートに結合される。更に、レジスタ・ファイル・ユニット150の出力ポート及び機能ユニット160の出力ポートは、バイパス・ネットワーク310の入力ポートに結合される。特定の実施例では、レジスタ・ファイル・ユニット150又は機能ユニット160からの出力データは、将来の命令によって用いるためにスケジューラ130又は機能ユニット160に転送することができる。特定の実施例では、バイパス・ネットワーク310は、データ・オペランドを一時的に記憶するためのバッファを有し得る。当然、バイパス・ネットワーク310からの出力ポートを（レジスタ・ファイル・ユニット・ポートを介して）レジスタ・ファイル・ユニット150内のレジスタそれぞれに、かつ、機能ユニット160における機能ユニットの組に結合することができる。特定の実施例では、バイパス・ネットワークは、もたらされた後に結果を一時的に記憶するキュー又はバッファを有し得る。特定の実施例では、命令は、その命令によってもたらされた結果がバイパス・ネットワーク内でなお利用可能である限り、インフライトのステータスを有するものとみなし得る。特定の実施例では、前述のバッファリングを用いることによって、レジスタ・ファイル・ユニットからの読み出しトラフィックの減少がもたらされ得る。
【００１９】
図３に示す実施例では、プロセッサ１００は、レジスタ・ファイル・ユニット１５０、機能ユニット１６０及びバイパス・ネットワーク３１０に結合された書き込みキューも有する。特に、書き込みキュー３２０は、レジスタ・ファイル・ユニット１５０の入力ポートに結合された出力ポート、バイパス・ネットワーク３１５を介してバイパス・ネットワーク３１０に結合された出力ポート、及びレジスタ・ファイル・ユニット１５０及び機能ユニット１６０の出力ポートに結合された入力ポートを有し得る。特定の実施例によれば、レジスタ書き込みを書き込みキュー３２０にバッファリングし、バックグランドにおいてレジスタ・ファイル・ユニットに書き込むことができる。特定の実施例では、命令をレジスタから読み出すものとし、書き込みが、書き込みキュー３２０内のそのレジスタに対して未処理である場合、データを、書き込みキューからスケジューラ１３０にバイパス・ネットワーク３１５を介して供給することができる。レジスタ・ファイル・ユニット１５０と同様に、特定の実施例では、書き込みキュー３２０は、複数のバンクを有し得る。当然、書き込みキュー３２０からの出力ポートを、レジスタ・ファイル・ユニット１５０内のレジスタそれぞれに結合することができる。特定の実施例において、レジスタ・ファイルの書き込み対読み出しの競合が存在している場合、まだ書き込まれていないレジスタ値は、書き込みキューからレジスタ読み出しデータ・パスにバイパスすることができる。
【００２０】
図4は、本発明の更なる実施例による、スケジューラに結合されたレジスタ・ファイル・ユニット及び機能ユニットを備えるプロセッサの詳細を示す単純化された構成図である。特定のプロセッサでは、バス及びバイパス・マルチプレクサを用いて、レジスタ・データを機能ユニット／スケジューラ／バイパス・ネットワークに供給することができる。前述のプロセッサの実施例によれば、実行ユニット・スケジューラへの更なるCAMポートを用いて、レジスタ・ファイル・ユニットからスケジューラへのデータの供給に対応することができる。特定の実施例において、かつ、図４に示すように、機能ユニット結果バス、及び選択された数の実行ユニットのCAMポートを、レジスタ・ファイル読み出し結果バスによって過負荷状態にする、かつ／又はレジスタ・ファイル読み出し結果バスと共有することができる。
【００２１】
図４は、図１に示す構成部分の一部を備えるプロセッサ１００を示す。特に、図４は、図１のスケジューラ１３０、レジスタ・ファイル・ユニット１５０及び機能ユニット１６０を示す。図４に示す実施例では、レジスタ・ファイル・ユニット１５０は４つの読み出しポートRP0乃至RP3を備えており、機能ユニット１６０は、２つのメモリ機能ユニット（M0及びM1）、並びに２つの整数演算実行機能ユニット(I0及びI1)を備える。当然、他の実施例では、レジスタ・ファイル・ユニットは、より多くの読み出しポートを有していても、より少ない読み出しポートを有していてもよい。より多くの機能ユニット、より少ない機能ユニット、及び／又は異なる機能ユニットが存在し得る。図４に示すように、スケジューラ１３０は複数の入力ポートを有する。図示したように、レジスタ・ファイル・ユニット読み出しポートRP0を、バスRB0を介して、スケジューラ130の一入力ポートに結合することができる。更に、レジスタ・ファイル・ユニットからのレジスタ・ファイル・ユニット読み出しポートRP1、及び機能ユニットM0の出力ポートをともに、共有バス（図４でAとラベリングしている）を介してスケジューラ１３０内の第２の（共有）入力ポートに結合することができる。レジスタ・ファイル・ユニット読み出しポートRP2はバスRB2を介してスケジューラ130内の第３の入力ポートに結合することができる。レジスタ・ファイル・ユニット読み出しポートRP３、及び機能ユニットM1の出力ポートをともに、共有バス（図４でBとラベリングしている）を介してスケジューラ１３０内の第４の（共有）入力ポートに結合することができる。最後に、整数演算実行機能ユニット0の出力ポートを、バスCを介して、スケジューラ130内の第５の入力ポートに結合することができ、整数演算実行機能ユニット１の出力ポートを、バスDを介してスケジューラ１３０内の第６の入力ポートに結合することができる。
【００２２】
よって、特定の実施例では、スケジューラに結合されたバスは、機能ユニット及びレジスタによって共有することができ、かつ／又は、スケジューラのCAM入力ポートを、機能ユニット及びレジスタによって共有することができる。特定の実施例では、機能ユニットとレジスタ・ファイル・ユニットとの間の結果バスを過負荷状態にすることによって、バイパス・ネットワーク及びスケジューラに対するレジスタ・ファイル・ユニットの影響が最小になる。図４に示すように、レジスタ・ファイル・ユニット及び機能ユニットからのバスそれぞれはオペランド（オペランド１５３など）をスケジューラ１３０（例えば、図１乃至図３に関して前述しているようなもの）に供給することができる。
【００２３】
特定の実施例では、機能ユニット結果のピーク負荷時間及びレジスタ・ファイル結果のピーク負荷時間は直交であり得る。例えば、定常状態の実行中に、機能ユニットは新たな結果を供給することができ、大半の命令は、インフライト命令から（例えば、バイパス・ネットワークを介して）その必要なソース・オペランド結果を得ることができる。この場合、要求されるレジスタ・ファイル読み出しは、低頻度であり得る。逆に、再起動後、機能ユニットは、アイドル状態になり、結果バス上にデータを出さないことがあり得る一方、レジスタ・ファイル読み出しは、マシンに入ってくる新たな命令を処理するようピークに達し得る。前述の直交性を、結果バス及びCAMポートの共有において考慮に入れ得る。
【００２４】
以下の表は、図４に示すものと類似したプロセッサ例における実行ユニット全ての結果バスを示す。図４のプロセッサは２つのメモリ実行ユニット（M0及びM1）並びに２つの整数演算実行ユニット（I0及びI1）を有する一方、以下の表のプロセッサは、第３の整数演算実行ユニット（１２）、浮動小数点演算実行ユニット（F）及び分岐演算実行ユニット（Br）も有する。以下の表では、最も左の列のユニットを結果生成側として列挙しており、一番上の行は、結果が送出される先の消費側を列挙している。この表では、前述の結果バスには、図４に示すものと同様に、結果バス「A」上のポート0から結果バス「F」上の浮動小数点ポートまで任意に名称を付した。この実施例では、特定のマクロ命令分解を、この構成について仮定し得る。よって、この例では、メモリ・ユニット0によって、かつ、読み出しポート1によってもたらされる結果は、バスAを介して、機能ユニット（及びスケジューラ）のそれぞれに供給することができる。同様に、メモリ・ユニット1によって、かつ、読み出しポート2によってもたらされる結果は、バスCを介して、機能ユニット（及びスケジューラ）のそれぞれに供給することができる。機能ユニットの一部は、生成側（分岐ユニットなど）の何れからのデータも消費しないことがあり得るか、又は、生成側の部分集合からのデータしか消費しないことがあり得る。
【００２５】
【表１】
2008515117.tif 000003
上記表は、読み出しポート0乃至読み出しポート３を列挙している。読み出しポート0及び1は、バンク0を共有することができ、読み出しポート１及び２はバンク１を共有することができる。実施例では、下線を引いた表エントリは、このレジスタ・ファイル構成をサポートするために追加されたCAMポートを表す。この表によって表しているプロセッサ例では、性能の影響は、２つのレジスタ・ファイル読み出しポートをサポートするために２つの完全なCAMポートを追加することによって、かつ、残りの２つのレジスタ・ファイル読み出しポートをメモリ結果バスと共有することによって最小にすることができる。このことは、読み出しポート１が結果バスA（メモリ・ポート0）を共有しており、読み出しポート３が結果バスB（メモリ・ポート1）を共有していることによって表に示している。読み出しポート１及び３は、同じレジスタ・バンク上で２つの読み出しが同時にアクティブであったより一般的でない場合にのみ実行結果バスが必要であるように選ぶことができる。その他の実施例においては、かつ性能の要件に基づけば、バスの全部又は一部を過負荷状態にしてもよく、どのバスも過負荷状態にしないようにしてもよい。
【００２６】
上記表によって示す例では、整数ポートではなくメモリ・ポートが過負荷状態にされる。整数演算実行命令がより一般的であり得るからであり、メモリ・ポートがより長いレーテンシを有し得るからである。特定の実施例では、レジスタ・ファイルとその結果バスを共有するその実行ユニットは、有効な命令が結果をもたらすとレジスタ・ファイルに通知する。前述の実施例では、レジスタ読み出しが、レジスタ・ファイル・ルックアップに出され、実行結果と衝突することを阻止するのに十分早くこの通知を供給することが可能であるように十分長いレーテンシを有するべきである。レジスタ読み出しが遅れた場合、オペランドは、例えば、次のクロック・サイクルまで、レジスタ・ファイル・ユニット読み出しキューから出るのを待ち得る。レーテンシが短すぎる場合、読み出し要求は、読み出しキューから外され、レジスタ・ファイル・ルックアップ・パイプラインに挿入されることがあり得る。これは、場合によっては、結果バスの衝突につながり得る。前述のプロセッサの実施例は、可変のレーテンシを許容し得るが、スケジューラにディスパッチされるか、又は機能ユニットに出される命令を減速することなく、レジスタ・ファイル読み出しを出すことを遅れさせることができる。
【００２７】
特定の実施例では、浮動小数点ポートが、（全ての実行ポートに達する読み出しポートに対して）十分な数のポートに達せず、浮動小数点のベンチマークの問題が存在し得る場合、過負荷状態にする対象のポートを選ぶ場合（上記表によって示す例など）に、浮動小数点ポートを見のがすことができる。特定の実施例では、レジスタ読み出しポートとの共有をサポートするために、メモリ・ポートを、分岐ポートに達するよう延ばすことができる。
【００２８】
以上が、特定の実施例の詳細な説明である。当然、特許請求の範囲記載の範囲が前述のもの以外のその他の実施例及びその均等物を包含することを意図している。例えば、前述の命令形式及びレジスタ呼称は例証のために過ぎず、何れかの命令形式及び／又はレジスタをその他のケースに用いることができる。同様に、別の例として、プロセッサは読み出しキューを用いないことがあり得る。 
【図面の簡単な説明】
【００２９】
【図１】本発明の実施例による、ソース・オペランドをスケジューラに供給するプロセッサの単純化された構成図である。
【図２】本発明の実施例による、命令をスケジューラにディスパッチし、レジスタからの読み出しを要求する方法の単純化されたフロー図である。
【図３】本発明の更なる実施例による、スケジューラに結合されたレジスタ・ファイル・ユニット及び機能ユニットを備えるプロセッサの詳細を示す単純化された構成図である。
【図４】本発明の更なる実施例による、スケジューラに結合されたレジスタ・ファイル・ユニット及び機能ユニットを備えるプロセッサの詳細を示す単純化された構成図である。
【図１】
2008515117.tif 000004
【図２】
2008515117.tif 000005
【図３】
2008515117.tif 000006
【図４】
2008515117.tif 000007
【国際調査報告】
2008515117.tif 000008
2008515117.tif 000009