(57)【特許請求の範囲】
【請求項１】
フェッチされたインストラクションをデコードするように構成されたデコーダと、
前記デコードされたインストラクションを受け取るように構成されたレジスタ再ネームユニットと、
複数の物理的レジスタを含む物理的レジスタファイルと、
を備え、
インストラクションの行先オペランドにより識別された行先に所与の数値を書き込むように行先オペランドを有するインストラクション（以下先行インストラクションという）が構成されるのを検出するのに応答して、前記レジスタ再ネームユニットは、前記所与の数値に関連付けられた再ネームレジスタ識別子を識別し、前記再ネームレジスタ識別子を前記行先オペランドに指定するように構成され、
前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、前記レジスタ再ネームユニットは、前記物理的レジスタファイルの物理的レジスタを読み出さずに前記所与の数値を前記物理的レジスタファイルの読み出しデータポートへ搬送するように構成された、プロセッサ。
【請求項２】
前記検出に応答して、インストラクションの完了を示す指示が記憶される、請求項１に記載のプロセッサ。
【請求項３】
前記プロセッサは、更に、関連再ネームレジスタによって各々識別された複数の物理的レジスタを含む物理的レジスタファイルを備え、前記行先オペランドに指定された前記再ネームレジスタ識別子は、前記複数の物理的レジスタのいずれにも関連付けられない、請求項１に記載のプロセッサ。
【請求項４】
前記レジスタ再ネームユニットは、複数のインストラクションにより同時に使用するように前記再ネームレジスタを指定するように構成された、請求項１に記載のプロセッサ。
【請求項５】
フェッチされたインストラクションをデコードする段階と、
行先オペランドによって識別された位置に数値を書き込むように行先オペランドを有するインストラクション（以下先行インストラクションという）が構成されるのを検出するのに応答して、所与の数値に関連付けられた再ネームレジスタ識別子を識別する段階と、
再ネームレジスタ識別子を前記行先オペランドに指定する段階と、
前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、物理的レジスタを読み取らずに前記所与の数値を物理的レジスタファイルの読み出しデータポートへ搬送する段階と、
を備えた方法。
【請求項６】
前記先行インストラクションの検出に応答して、前記先行インストラクションが実行パイプライン段において実行されるのを防止する、請求項１に記載のプロセッサ。
【請求項７】
前記先行インストラクションの検出に応答して、前記先行インストラクションが実行パイプライン段において実行されるのを防止する、請求項５に記載の方法。
【請求項８】
前記検出は、前記インストラクションは移動インストラクションであり、当該移動インストラクションのソースオペランドは前記数値と同じ値を有する即時値である、ことを検出することを含む、請求項５に記載の方法。
【請求項９】
前記行先オペランドに指定された前記所与の再ネームレジスタ識別子は、物理的レジスタに関連付けられていない、請求項５に記載の方法。
【請求項１０】
レジスタ再ネームユニットであって、
デコードされたインストラクションを受け取るように構成された第１のインターフェイスと、
インストラクションをスケジューラへディスパッチするように構成されたディスパッチユニットへの第２のインターフェイスと、
初期化ロジックと、
を備え、
行先オペランドによって識別された位置に数値を書き込むように行先オペランドを有するインストラクション（以下先行インストラクションという）が構成されたことを検出するのに応答して、前記初期化ロジックは、前記所与の数値に関連付けられた再ネームレジスタ識別子を識別し、前記行先オペランドに前記再ネームレジスタ識別子を指定するように構成され、
前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、前記レジスタ再ネームユニットは、物理的レジスタを読み出すことなく前記所与の数値を物理的レジスタファイルの読み出しデータポートへ搬送するように構成される、レジスタ再ネームユニット。
【請求項１１】
前記先行インストラクションの検出に応答して、前記初期化ロジックは、更に、前記先行インストラクションが実行パイプライン段において実行されるのを防止するように構成される、請求項１０に記載のレジスタ再ネームユニット。
【請求項１２】
前記行先オペランドに指定された前記再ネームレジスタ識別子は、物理的レジスタに関連付けられていない、請求項１０に記載のレジスタ再ネームユニット。
【請求項１３】
前記インストラクションを検出することは、移動インストラクションであり、移動インストラクションのソースオペランドは前記数値と同じ値を有する、を検出することを含む、請求項１０に記載のレジスタ再ネームユニット。
【請求項１４】
前記位置に数値を書き込むように前記インストラクションが構成されるのを検出することは、（ｉ）即時ソースオペランドが前記所与の数値と同じ値を有すること、及び（ii）ｏｐｃｏｄｅが、次の動作、即ち乗算演算、移動、及びブールの論理ＡＮＤ、のうちの少なくとも１つを指示すること、を検出することを含む、請求項１２に記載のレジスタ再ネームユニット。
【請求項１５】
コントロールロジックと、
関連再ネームレジスタ識別子により各々識別される複数の物理的レジスタを含む物理的レジスタファイルと、
を備え、行先オペランドに数値を書き込むようにソースオペランドと行先オペランドを有するインストラクション（以下先行インストラクションという）が構成されるのを検出するのに応答して、前記コントロールロジックは、前記所与の数値に関連付けられた再ネームレジスタ識別子を識別し、前記行先オペランドに前記再ネームレジスタを指定するよう構成され、
前記先行インストラクションより後続のインストラクションにおいて、前記所与の再ネームレジスタ識別子をソースオペランドとして指定すべきことを検出することに応答して、前記コントロールロジックは、前記物理的レジスタファイルの物理的レジスタを読み出すことなく前記所与の数値を前記物理的レジスタファイルの読み出しデータポートへ搬送するように構成された、装置。
【請求項１６】
前記先行インストラクションの検出に応答して、前記コントロールロジックは、更に、前記先行インストラクションが実行パイプライン段において実行されるのを防止するように構成される、請求項１５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関するもので、より詳細には、レジスタ初期化のレイテンシを効率的に減少することに関する。
【背景技術】
【０００２】
マイクロプロセッサは、典型的に、重畳するパイプライン段及びインストラクションの無秩序(out-of-order)実行を含む。更に、マイクロプロセッサは、スループットを高めるために同時マルチスレッディングをサポートする。これらの技術は、ソースコードにおけるインストラクションレベル並列性の効果を取り入れるものである。各クロックサイクル中に、マイクロプロセッサは、理想的には、パイプラインの各段に対してスレッド当たり最大Ｎ個のインストラクションの有用な実行を生じさせ、Ｎは、１より大きな整数である。しかしながら、コントロールの依存性及びデータの依存性がマイクロプロセッサの最大スループットを段当たりＮ個のインストラクションより低く減少させる。
【０００３】
条件付きコントロールフローインストラクションにより生じるコントロール依存性は、ソースコードのコントロールフローグラフに沿った条件付き分岐及び結合においてインストラクションをシリアル化する。ソースコードにおけるコントロール依存性に関わらず、インストラクションの推論的実行を使用して、インストラクションの並列実行が遂行される。
【０００４】
インストラクションのオペランドがプログラム順に若いインストラクションの結果に依存するときにデータ依存性が生じる。データ依存性は、直線コードセグメントにおける後続インストラクションのオペランド間又は後続ループ反復に属するインストラクションのオペランド間に現れる。直線コードでは、書き込み後の読み取り（ＲＡＷ）、読み取り後の書き込み（ＷＡＲ）又は書き込み後の書き込み（ＷＡＷ）依存性に遭遇する。ＷＡＲ及びＷＡＷ依存性に関わらず、レジスタ再ネーミングを使用してインストラクションの並列実行を許す。しかしながら、真の依存性又はＲＡＷは、依然そのままである。それ故、行先レジスタとして使用されそしてその後にソースレジスタとして使用されるアーキテクチャーレジスタは、関連ソースコードセグメントに対するインストラクション実行のシリアル化を生じさせる。
【０００５】
アーキテクチャーレジスタとの共通のＲＡＷ依存性の一例は、レジスタを特定値に初期化した後に、そのレジスタをその後のコードで使用し及び／又はテストすることである。例えば、ソフトウェアアプリケーションにおけるフラグ、カウンタ及び設定に特定の初期値が指定される。レジスタを初期化する１つの方法は、即時移動インストラクションを使用することである。それ故、レジスタの初期化は、プログラムの実行中に頻繁に生じ、ＲＡＷ依存性を含む。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以上に鑑み、レジスタ初期化のレイテンシを効率的に減少するための効率的な方法及びメカニズムが要望される。
【課題を解決するための手段】
【０００７】
レジスタ初期化のレイテンシを効率的に減少するためのシステム及び方法が提供される。１つの実施形態において、プロセッサは、レジスタ再ネームユニットを備え、このユニットは、デコードされたインストラクションを受け取りそしてデコードされた所与のインストラクションがゼロサイクル動作の資格がある(qualify)かどうか決定するように構成されている。又、実行パイプライン段の前に、デコードされた所与のインストラクションが行先オペランドに特定数値を書き込むことが知られているかどうかの決定がなされる。行先オペランドに０の値を書き込む即時移動インストラクションは、その一例である。少なくとも他のブール論理動作及び演算動作も資格がある。その決定がなされた場合には、再ネームレジスタユニットが物理的なレジスタ番号を行先オペランドに指定し、その物理的なレジスタ番号は、特定の数値に関連している。更に、その物理的なレジスタ番号は、物理的なレジスタファイル内の実際の物理的レジスタには関連していない。
【０００８】
レジスタ再ネームユニット内のコントロールロジックは、所与のインストラクションを、それがプロセッサパイプラインにおいて進行するのを防止するためにマークする。例えば、コントロールロジックは、ディスパッチパイプライン段において完了を指示するために所与の移動インストラクションをマークする。更に、物理的なレジスタファイルは、再ネームレジスタ番号を、読み取るべきソースオペランドとして受け取ると、実際の物理的レジスタにアクセスすることなく、特定の数値を搬送する。
【０００９】
これら及び他の実施形態は、以下の説明及び添付図面を参照することにより更に明らかとなろう。
【図面の簡単な説明】
【００１０】
【図１】ゼロサイクルレジスタ初期化動作でスーパースカラーの無秩序実行をなすプロセッサの一実施形態の一般的なブロック図である。
【図２】物理的レジスタファイル番号の一実施形態の一般化されたブロック図である。
【図３】物理的レジスタファイルの一実施形態の一般化されたブロック図である。
【図４】変換ゼロサイクル動作でレジスタ再ネーミングする一実施形態を示す一般化されたブロック図である。
【図５】ゼロサイクルレジスタ初期化動作を生成する方法の一実施形態を示す一般化されたフローチャートである。
【発明を実施するための形態】
【００１１】
本発明は、種々の変更を受けそして別の形態でも実施できるが、その特定の実施形態を一例として添付図面に示して以下に詳細に説明する。しかしながら、添付図面及び詳細な説明は、本発明を、ここに開示する特定の形態に限定するものではなく、本発明は、特許請求の範囲に規定される本発明の精神及び範囲内に入る全ての変更、等効物及び代替え物を網羅することを理解されたい。本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味（即ち、〜の潜在性があるという意味）で使用されるもので、強制の意味（即ち、〜しなければならないという意味）ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
【００１２】
種々のユニット、回路又は他のコンポーネントは、１つ又は複数のタスクを遂行するように「構成される」ものとして述べる。この点について、「構成される」とは、動作中に１つ又は複数のタスクを遂行する「回路を有する」ことを一般的に意味する構造を広く表現するものである。従って、ユニット／回路／コンポーネントは、そのユニット／回路／コンポーネントが現在オンでなくても、タスクを遂行するように構成することができる。一般的に、「構成される」に対応する構造を形成する回路は、ハードウェア回路を含む。同様に、種々のユニット／回路／コンポーネントは、説明の便宜上、１つ又は複数のタスクを遂行するものとして説明されてもよい。そのような説明は、「構成される」という句を含むものと解釈されねばならない。１つ以上のタスクを遂行するように構成されたユニット／回路／コンポーネントを表現する場合に、そのユニット／回路／コンポーネントに関して３５Ｕ.Ｓ.Ｃ.§１１２、第６節の解釈を引用しないことが明確に意図される。
【００１３】
以下の説明では、本発明を完全に理解するため多数の特定の細部について述べる。しかしながら、当業者であれば、これら特定の細部がなくても本発明を実施できることが認識されよう。ある場合には、本発明を不明瞭にしないために、良く知られた回路、構造及び技術は、詳細に示さない。
【００１４】
図１を参照すれば、ゼロサイクルレジスタ初期化動作でスーパースカラーの無秩序実行をなすプロセッサ１００の一実施形態を示す一般的なブロック図が示されている。プロセッサコア１００は、インストラクションを処理するために多段パイプラインを使用する。ファンクション及びコントロールブロックが特定の順序で特定のパイプライン段に示されているが、他の組み合わせも考えられ、意図される。更に、ファンクション及びコントロールブロックが２つ以上のパイプライン段を占有することもある。ほとんどの場合には、説明を容易にするために各ファンクションブロックに対して単一のパイプライン段が示される。
【００１５】
ソフトウェアアプリケーションのインストラクションは、プロセッサ１００内のｉキャッシュ１０４にロードされる。ソフトウェアアプリケーションは、外部ディスクメモリ、外部ＤＲＡＭ、及び／又は複数の周辺装置の１つに記憶されている。一般的に述べると、ソフトウェアプログラマがアルゴリズム又は方法により仕事を行うためにアプリケーションを書き込むときに、プログラマは、変数を使用して一時的及び結果データを参照する。このデータは、コンピュータメモリに割り当てられたスペースを使用する。オペレーティングシステムは、ソフトウェアアプリケーションに対してメモリの領域を割り当てる。
【００１６】
アプリケーションの処理中に、割り当てられたメモリ領域からデータキャッシュ１６２へデータがロードされる。その後、物理的レジスタファイル１６４内の１つ以上のアーキテクチャーレジスタを使用して、一時的及び結果データをロードし、記憶する。アーキテクチャーレジスタは、アーキテクチャー的に見ることができる。それ故、ソフトウェアプログラマ及び／又はコンパイラーは、ソフトウェアアプリケーション内のアーキテクチャーレジスタを識別する。アーキテクチャーレジスタは、所与のインストラクションセットアーキテクチャー（ＩＳＡ）に関連している。プロセッサ１００のハードウェアは、所与のＩＳＡに基づいてインストラクションを処理するための回路を備えている。種々の実施形態において、所与のＩＳＡに対してＡＲＭインストラクションセットアーキテクチャーが選択される。或いは又、Ａｌｐｈａ、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、ＭＩＰＳ、ｘ８６又は他のＩＳＡが選択されてもよい。
【００１７】
種々の実施形態において、所与のＩＳＡを使用して、メモリの領域を宣言し且つ割り当てる方法を選択することができる。所与のＩＳＡは、更に、プロセッサリセットのためのステップ、及び動作モード（例えば、スーパーバイザーモード、ユーザモード）の間を切り換えるためのステップを決定する。これらのステップ及びユーザアプリケーションは、所与のＩＳＡ内の１つ以上のインストラクションを使用してアーキテクチャーレジスタを特定の数値にリセット又は初期化する。更に、これらのステップ及びユーザアプリケーションは、アーキテクチャー的に見えるレジスタの数より多数のレジスタを含むレジスタファイルの一部分をリセットする。レジスタファイルをそのようにリセットすると、リセット動作が完了した後にプロセッサが予想できる仕方で振舞うようにさせる。典型的に、ステートマシンを使用して、特定の数値をレジスタファイル内の各レジスタに書き込む動作が挿入される。ある実施形態では、このステートマシンは、以下に述べるように除去されそして異なるロジックと交換される。特定の値をレジスタに書き込む動作に関して、ある実施形態では、即時移動インストラクションを使用して、特定の数値をレジスタファイル内の所与のレジスタへ移動させる。特定の数値の一例は、値０である。他の演算インストラクションを使用して、リセット又は初期化を行うこともできる。“ｒｌ”により指示された所与のレジスタをリセットする幾つかの例を以下に示す。
【００１８】
0005853303.tif 000002
【００１９】
前記例では、行先オペランドが最初にリストされた後に、ソースオペランド（１つ又は複数）がリストされる。しかしながら、逆の規定も考えられ、意図される。更に、大半のインストラクションについては、２つのソースオペランドがリストされる。しかしながら、特定のアーキテクチャーレジスタが行先オペランド及びソースオペランドの両方である場合には、１つのソースオペランドは、第２のソースオペランドとして示唆される行先アーキテクチャーレジスタ番号と共にリストされる。前記例では、中間値は、記号をもたない数字として示される。他のケースでは、記号が数字を伴う。例えば、ＡＲＭ  ＩＳＡでは、中間値は、“０”に代わって“＃０”のようなプレフィックス“＃”を使用する。前記インストラクションは、擬似コードの例及び言語不可知論であることを意味する。
【００２０】
前記例のコードステートメントから明らかなように、複数のインストラクション形式を使用して、値０のような特定の数値でレジスタｒ１を初期化することができる。前記インストラクション形式の幾つかは、他のインストラクション形式よりもレイテンシが低い。１つの例において、論理的ＸＯＲ及びＡＮＤ動作は、他のインストラクション形式の前に完了する。演算ＭＵＬ又は乗算インストラクションは、前記インストラクション形式の最長レイテンシを有し、従って、レジスタ初期化に対して選択されない。インストラクション形式に関わらず、ソフトウェアプログラマのアプリケーションを具現化するのに使用されるアッセンブル言語インストラクションがレジスタ初期化ステートメントを含む割合は顕著である。更に、初期化に使用されないソフトウェアアプリケーションステートメントがあるが、ステートメントを実際に実行する前に結果が分かる。前記演算乗算インストラクションは、１つの例である。これら形式のステートメントのレイテンシを減少すると、性能が高くなる。
【００２１】
プロセッサ１００は、特定のデコードされたインストラクションに関連した実行パイプライン段の前に、特定のインストラクションが所与の数値をその行先オペランドに書き込むことを決定するゼロサイクル初期化ロジック１２４を備えている。例えば、インストラクション“ｍｏｖｅ  ｒ１，０  ／／ｒ１  ←０”がデコードされたとき、そのインストラクションは即時移動形式であることが分かり、そしてそのインストラクションは、行先オペランドｒ１を数値０と共に書き込む。数値０は、即時移動インストラクションの即時フィールドにある。この決定に応答して、ゼロサイクル初期化ロジック１２４は、所与の再ネームレジスタ番号を行先オペランドに指定するように再ネームコントロールロジック１２２に指令し、所与の再ネームレジスタ番号は、所与の数値に関連している。
【００２２】
レジスタ初期化インストラクションをゼロサイクル動作として具現化して続けると、物理的レジスタファイル１６４は、関連再ネームレジスタ番号により各々識別される複数の物理的レジスタを含む。しかしながら、前記即時移動インストラクションの行先オペランドに指定された所与のレジスタ番号は、複数の物理的レジスタのいずれにも関連していない。むしろ、所与の再ネームレジスタ番号は、即時フィールドの数値に関連している。このケースでは、数値は、ゼロである。
【００２３】
１つの実施形態において、物理的レジスタファイル１６４は、２５６個の物理的レジスタの１つを独特に識別するのに使用できる８ビットインデックスを有する。他の実施形態では、異なる巾のインデックス及び異なる数の物理的レジスタが使用される。そのような他の値も考えられ、意図される。８ビットインデックスを使用する実施形態では、物理的レジスタファイルは、２５６より少ない実際の物理的レジスタを含む。例えば、物理的レジスタファイル１６４は、２５６個の物理的レジスタではなく、１２０個の物理的レジスタを含む。これらの１２０個の物理的レジスタは、１０進又は他のフォーマットの０と１１９との間の値を伴う８ビットインデックスを使用して識別される。１６進フォーマットでは、１２０個の物理的レジスタは、ｈ００からｈ７７の値を伴う８ビットインデックスにより識別される。種々の実施形態において、８ビットインデックス２５５は、物理的レジスタファイル１６４内の物理的レジスタのいずれにも関連していない。むしろ、８ビットインデックス２５５又はｈＦＦを使用して数値０が指示される。他の実施形態において、所与の数値を表わすためにｈＦＦ以外のインデックスが選択され、そして０以外の数値を表わすこともできる。
【００２４】
種々の実施形態において、前記即時移動インストラクションのｒ１である行先オペランドは、Ｐ２５５と再ネーミングされる。行先オペランドは、値０が書き込まれるか、さもなければ、０の値に対応することが知られている。更に、ゼロサイクル初期化ロジック１２４は、第１のインストラクションを、それがプロセッサのパイプラインを進行するのを防止するためにマークする。例えば、ゼロサイクル初期化ロジック１２４は、ディスパッチパイプライン段において完了を指示するために即時移動インストラクションをマークする。そのような実施形態では、プロセッサ１００内の電力消費が減少される。というのは、即時移動インストラクションは、ディスパッチパイプライン段を越えて進行しないからである。更に、即時移動インストラクションは、そうでなければ使用されるディスパッチパイプライン段の後のリソース（キュー、実行ユニット、ステージングフロップ、等）を使用しないので、他のインストラクションに対するスループットが高くなる。この場合も、他の実施形態では、インデックスの巾、及びインデックスにより識別される物理的レジスタの数に対して、他の値が使用されてもよい。更に、物理的レジスタを識別するのに使用されるインデックスに対する値の範囲は、値の最小セット又は値の連続範囲を含む。
【００２５】
ある実施形態において、再ネームコントロールロジック１２２は、プログラム順において所与の即時移動インストラクションより若く且つ即時移動インストラクションに対するデータ依存性を有する１つ以上のインストラクションへ再ネームレジスタ番号Ｐ２５５をバイパスさせる。更に、再ネームレジスタ番号Ｐ２５５を、読み取るべきソースオペランドとして受け取るのに応答して、物理的レジスタファイル１６４は、複数の物理的レジスタのいずれも読み取らずに数値０を出力する。物理的レジスタファイル１６４内の読み取りバイパスロジック１６６は、再ネームレジスタ番号Ｐ２５５が、プログラム順において即時移動インストラクションより若いインストラクションにより読み取るためのソースオペランドとして与えられることを検出し、この若いインストラクションは、即時移動インストラクションに依存する。それに応答して、実際の物理的レジスタにアクセスされることはない。むしろ、読み取りバイパスロジック１６６は、再ネームレジスタ番号Ｐ２５５をデコードし、そして数値０を読み出しデータポートへ搬送すべきであると決定する。レジスタファイル内のロジックは、レジスタ番号Ｐ２５５を受け取るのに応答してゼロのような所与の値を返送するものとして述べるが、他の実施形態では、レジスタファイル内にないか、さもなければ、その一部分でもないロジックがレジスタ番号を検出して所与の値を与えてもよい。例えば、ある実施形態では、パイプラインデータ路の一部分として含まれたバイパスｍｕｘのようなロジックは、レジスタ番号を検出し、そして所与の値（例えば、ゼロ）で応答させる。そのような実施形態では、レジスタファイルそれ自体は、特定のレジスタ番号に関連した特殊な特徴を知らない。多数のそのような実施形態が考えられ、意図される。
【００２６】
即時移動インストラクション“ｍｏｖｅ  ｒ１，０  ／／ｒ１  ←０”についての前記ステップは、実行パイプライン段の前に知られた特定の数値を行先オペランドに書き込む他のインストラクションにも使用される。アーキテクチャーレジスタをリセットする前記例及び付加的な例を次に示す。
【００２７】
0005853303.tif 000003
【００２８】
ゼロサイクル初期化ロジック１２４は、特定のデコードされたインストラクションに関連した実行パイプライン段の前に特定のインストラクションがその行先オペランドに所与の数値を書き込むことを決定する。１つの実施形態において、ロジック１２４は、インストラクションが即時移動インストラクションのためのｏｐｃｏｄｅを有しそして即時の値が上述した特定の数値であることを決定する。他の実施形態では、ゼロサイクル初期化ロジック１２４は、インストラクションが、ＡＮＤ又はＸＯＲのようなブールの論理演算のためのｏｐｃｏｄｅを有することを決定する。更に、ロジック１２４は、その後の実行パイプライン段の間に０の結果が行先オペランドに書き込まれることをソースオペランドから決定する。例えば、ブールの論理ＡＮＤ動作に対する０のソースオペランドは、０の結果を生じる。
【００２９】
別の例では、ブールの論理ＸＯＲ動作に対する２つの同じソースオペランドが０の結果を生じる。それ故、実際の物理的レジスタに関連しないＰ２５５のような特定の再ネームレジスタ番号でのレジスタ再ネーミングに関して上述した同様のステップが使用される。同様に、物理的レジスタファイル１６４は、再ネームレジスタ番号Ｐ２５５を、読み取るべきソースオペランドとして受け取るときに、物理的レジスタにアクセスせずに０の値を搬送する。前記と同様に、Ｐ２５５以外の、実際の物理的レジスタに関連しない他の利用可能な物理的レジスタ番号を使用してもよい。
【００３０】
更に別の実施形態において、ゼロサイクル初期化ロジック１２４は、デコードされたインストラクションが演算動作のためのｏｐｃｏｄｅを有することを決定すると共に、その後の実行パイプライン段の間に０の結果が行先オペランドに書き込まれることをソースオペランドから決定する。例えば、２つの同じソースオペランドでの減算演算動作は、０の結果を生じさせる。同様に、０のソースオペランドでの乗算演算動作も、０の結果を生じさせる。それ故、実際の物理的レジスタに関連しないＰ２５５のような特定の再ネームレジスタ番号でのレジスタ再ネーミングに関して上述した同様のステップが使用される。同様に、物理的レジスタファイル１６４は、再ネームレジスタ番号Ｐ２５５を、読み取るべきソースオペランドとして受け取るときに、物理的レジスタにアクセスせずに０の値を搬送する。これらの演算動作の例を再び以下に示す。
【００３１】
0005853303.tif 000004
【００３２】
更に別の実施形態では、ゼロサイクル初期化ロジック１２４は、特定の数値が１のような別の値であることを決定する。例えば、上述した最後のインストラクションは、数値１を行先オペランド“ｒ２”に書き込む即時移動インストラクションである。１つの実施形態において、再ネームレジスタ番号Ｐ２５５は、数値０に対して予約される。Ｐ２５４のような別の利用可能な再ネームレジスタ番号は、数値１に対して予約される。それ故、実際の物理的レジスタに関連しない特定の再ネームレジスタ番号でのレジスタ再ネーミングに関して上述した同様のステップが使用される。
【００３３】
前記の例では、行先オペランドｒ２は、数値１を指示する再ネームレジスタ番号Ｐ２５４に再ネーミングされる。同様に、物理的レジスタファイル１６４は、再ネームレジスタ番号Ｐ２５４を、読み取るべきソースオペランドとして受け取るときに、物理的レジスタにアクセスせずに１の値を搬送する。レジスタ初期化インストラクション及び他の特定のインストラクションをゼロサイクル動作へ変換することに関して更に詳細な説明を続ける前に、コンピュータシステム１０のコンポーネントを更に詳細に説明する。
【００３４】
ソフトウェアアプリケーションの１つ以上のインストラクションがｉキャッシュ１０４からフェッチされる。１つ以上のインストラクションは、アドレスセレクトロジック１０２により搬送されたアドレスにより指示される。ｉキャッシュミスがない場合にはクロックサイクルごとにｉキャッシュ１０４から複数のインストラクションがフェッチされる。次フェッチプレディクタ１０６によりアドレスがインクリメントされる。次フェッチプレディクタ１０６及びその後のパイプライン段のコントロールフロー評価ロジック１１２の各々に分岐方向プレディクタ１０８が結合される。このプレディクタ１０８は、次の順次インストラクションを実行することからインストラクションのフローを変化させるインストラクションの情報を予想することができる。
【００３５】
デコードユニット１１０は、複数のフェッチされたインストラクションのｏｐｃｏｄｅをデコードする。或いは又、インストラクションは、マイクロインストラクション、又はマイクロｏｐへ分割される。ここで使用する用語「インストラクション」及び「マイクロｏｐ」は、本発明がいずれの具現化も使用するアーキテクチャーに使用されるので、交換可能である。１つの実施形態において、コントロールフロー評価ブロック１１２は、アドレスセレクタ１０２においてインストラクションのフェッチを変更する。例えば、無条件分岐ｏｐｃｏｄｅに関連した絶対的アドレス値がアドレスセレクタ１０２へ送られる。
【００３６】
再ネームイントラグループ(intra-group)依存性検出ロジック１１４は、デコードユニット１１０によりデコードされたインストラクション間で依存性を見出す。インストラクションのイントラグループは、１つ以上のクロックサイクル又はパイプライン段からのデコードされたインストラクションを含む。読み取り後の書き込み（ＷＡＲ）、書き込み後の書き込み（ＷＡＷ）、及び書き込み後の読み取り（ＲＡＷ）のような依存性が検出される。インストラクション間の依存性を示す依存性ベクトルが発生される。マッパー１１６は、得られる同時性、依存性チェーンの重大さ、及び通信ペナルティのようなファクタを使用して、分布されたハードウェアリソース間でインストラクションを分割する。
【００３７】
スーパースカラーマイクロアーキテクチャー内の実行ユニットへのインストラクションの無秩序発行に加えて、プロセッサ１００は、スループットを高めるためにレジスタ再ネーミングを行う。プロセッサ１００は、整数のセットより大きな物理的レジスタのセットと、物理的レジスタファイルのようなアーキテクチャー的に見えるフローティングポイントレジスタとを含む。ハードウェアを使用して、プロセッサ１００は、行先オペランドとして使用されるアーキテクチャーレジスタ識別子を動的に再ネーミングする。ソースオペランドが、再ネーミングされた行先オペランドと同じアーキテクチャーレジスタ識別子を有するとの決定に応答して、プロセッサ１００は、行先オペランドを再ネーミングするのに使用される同じ物理的レジスタ識別子をソースオペランドに指定する。再ネーミングは、インストラクションデコードの後に生じる。
【００３８】
行先オペランドが再ネーミングされるときには、フリーリストアロケータ１３０からの新たな物理的レジスタ番号が使用される。或いは又、物理的レジスタファイル１６４内の複数の物理的レジスタのいずれにも関連していない非定義の物理的レジスタ番号が使用されてもよい。むしろ、この物理的レジスタ番号は、特定の数値に関連付けられる。インストラクションがコミットするとき、インストラクション行先値を記憶している物理的レジスタは、フリーリストアロケータ１３０内の再ネームレジスタ番号のフリーリストへ返送されるべき候補となる。しかしながら、非定義の物理的レジスタ番号が行先オペランドとして使用される場合には、そのインストラクションに対して再ネームパイプライン段の間にフリーリストから再ネームレジスタ番号がまだ除去されていない。同様に、このインストラクションのコミット及びリタイア中にフリーリストに再ネームレジスタ番号が追加されていない。
【００３９】
ハードウェアがアーキテクチャーレジスタ識別子を物理的レジスタ識別子で再ネーミングするときには、ハードウェアは、マッピングテーブルのようなデータ構造体にマッピングを記憶する。ここで使用する、アーキテクチャーレジスタ又は物理的レジスタの識別子は、番号とも称される。それ故、アーキテクチャーレジスタ識別子は、アーキテクチャーレジスタ番号とも称される。同様に、物理的レジスタ識別子は、物理的レジスタ番号とも称される。又、アーキテクチャーレジスタ番号を再ネーミングするのに使用される物理的レジスタ番号は、再ネームレジスタ番号とも称される。
【００４０】
レジスタ再ネームユニット１２０は、再ネームコントロールロジック・アレイ１２２と、ゼロサイクル初期化ロジック１２４とを含む。レジスタ再ネームユニット１２０は、インストラクション内の行先及びソースの両オペランドに使用されるアーキテクチャーレジスタ番号を再ネーミングするのにどの物理的レジスタ番号を使用すべきか決定する。レジスタ再ネームユニットは、フリーリストアロケータ１３０、再ネームコントロールロジック１２２内の再ネームマッピングテーブル、又はゼロサイクル初期化ロジック１２４から候補の物理的レジスタ番号をセレクトする。
【００４１】
レジスタ再ネームユニットは、上述したようにゼロサイクル動作へ変換されるべき所与のインストラクションクオリファイアを決定する。レジスタ再ネームユニット１２０は、特定の数値には関連するが物理的レジスタファイル１６４内の実際の物理的レジスタには関連しない再ネームレジスタ番号を行先オペランドに指定する。更に、レジスタ再ネームユニット１２０は、所与のインストラクションを、それがインストラクション実行のために進行するのを防止するように、マークする。例えば、レジスタ再ネームユニット１２０は、移動インストラクションを、ディスパッチパイプライン段で完了するものとしてマークする。
【００４２】
インストラクションがデコードされそして再ネーミングされた後に、それに関連するエントリがディスパッチキュー１４０において割り当てられる。インストラクション及びそれに関した再ネーム識別子、プログラムカウンタ（ＰＣ）値、依存性ベクトル、完了のためのマーキング、等は、ディスパッチキュー１４０へ送られ、その後、スケジューラ１５０へ送られる。種々の例外が実行コア１６０等によって検出される。例えば、それらは、メモリアクセスに対する保護例外、アドレス変換なし、等を含む。これらの例外は、マイクロコード１４２等により、対応する例外取り扱いルーチンを実行するようにさせる。
【００４３】
スケジューラ１５０は、インストラクションを、実行コア１６０で実行するためにスケジューリングする。オペランドが得られ且つハードウェアリソースも得られるときには、スケジューラ１５０から実行コア１６０内のファンクションユニットの１つへインストラクションが無秩序に発行される。スケジューラ１５０は、再ネーミングされた識別子をマッピングテーブルで変換した後に物理的レジスタファイル１６４から、又はオペランドバイパスロジックから、そのソースオペランドを読み取る。特定の数値には関連しているが実際の物理的レジスタには関連していない特定の再ネームレジスタ番号が使用されるときは、読み取りバイパスロジック１６６が特定の数値を与える。そのようなケースでは、実際の物理的レジスタがアクセスされないことがある。ソースオペランドは、実行コア１６０に与えられる。
【００４４】
実行コア１６０は、ロード／記憶ユニットを含む。ロード／記憶ユニットは、データキャッシュ（図示せず）及び記憶バッファ１７２に直接的に又はリオーダーバッファ（ｒｏｂ）１７０を経て接続される。プロセッサ１００は、キャッシュアクセスを遂行するときに完全メモリ変換を遂行するコストを回避するためにｉキャッシュ１０４及びデータキャッシュの各々に対して変換ルックアサイドバッファ（ＴＬＢ）を含む。記憶バッファ１７２は、記憶インストラクションに対応するアドレスを記憶する。ｒｏｂ１７０は、実行コア１６０から結果を受け取る。更に、結果は、パイプラインに既にある従属インストラクションへ送られるデータとして手前のパイプライン段へバイパスされる。ｒｏｂ１７０は、インストラクションの秩序正しいコミット及びリタイアを保証する。
【００４５】
図２を参照すれば、レジスタファイル識別子又は番号２００を含むテーブルの一実施形態の一般化されたブロック図が示されている。１つの実施形態において、レジスタ番号２００は、レジスタの再ネーミングに使用するための利用可能な再ネームレジスタ番号を示す順次番号リストである。別の実施形態では、レジスタ番号は、順次である必要はない。１つの実施形態において、レジスタ番号２００は、実際の物理的レジスタ２０２ａ−２０２ｍのための識別子、及び実際の物理的レジスタを識別しない予約識別子２０２ｎ−２０２ｖの両方を含む。例えば、レジスタ番号２０２ａは、識別子“０”を有し、物理的レジスタ番号２０２ｂは、識別子“１”を有し、等々となる。
【００４６】
レジスタ番号２０２ａ−２０２ｍは、アーキテクチャー物理的レジスタ及び非アーキテクチャー（推論的）物理的レジスタの両方を含むレジスタファイルに使用される。アーキテクチャーレジスタは、アーキテクチャー的に見える識別子を有する。非アーキテクチャー（推論的）レジスタの識別子は、アーキテクチャー的に見えない。ある実施形態では、アーキテクチャー物理的レジスタ及び非アーキテクチャー（推論的）物理的レジスタの両方の物理的レジスタは、レジスタファイル内で互いに混合される。次いで、マッピングメカニズムを使用して、レジスタファイル内の所与のアーキテクチャーレジスタの位置を決定することができる。例えば、識別子ｒ７を伴う所与のアーキテクチャーレジスタは、識別子Ｐ２３を伴う非アーキテクチャー（推論的）レジスタへマッピングされる。その後に、レジスタｒ７は、Ｐ１２のような異なる非アーキテクチャー（推論的）レジスタへマップされる。
【００４７】
１つの実施形態において、所与の物理的レジスタファイルは、１２０個の物理的レジスタを含み、そして物理的レジスタファイルに関連した所与のインストラクションセットアーキテクチャー（ＩＳＡ）は、３５個のアーキテクチャー的に見えるレジスタを有する。そのようなケースでは、レジスタファイルは、３５個のアーキテクチャー的に見えるレジスタに加えて８５個の物理的レジスタを含む。この例では、８５個の物理的レジスタに関連したレジスタ番号が非アーキテクチャーレジスタ番号２１２に含まれる。１つの例では、アーキテクチャー及び非アーキテクチャー（推論的）物理的レジスタ番号２０２ａ−２０２ｍは、連続する再ネームレジスタ番号０−１１９又はｈ０−ｈ７７を表わす。この場合も、アーキテクチャーレジスタ番号２１０及び非アーキテクチャーレジスタ番号２１２は、実際の物理的レジスタに関連している。
【００４８】
１つの実施形態において、８ビットインデックスを使用して、物理的レジスタファイルにアクセスすることができる。そのようなケースでは、インデックスは、最大２５６個の物理的レジスタにアクセスするのをサポートする。しかしながら、電力消費、ダイ上占有面積制約、マイクロアーキテクチャーシミュレーション、及び／又は他のファクタのために、物理的レジスタファイルは、最大インデックスサポートサイズより小さいサイズにされる。１つの実施形態では、物理的なレジスタファイルが、サポートされるインデックスサイズより小さくても、実際の物理的レジスタに関連しない１つ以上のインデックスを依然使用することができる。先に述べたように、実際の物理的レジスタに関連しない所与の再ネームレジスタ番号は、特定の数値に関連付けることができる。前記例では、インデックス１２０−２５５（例えば、レジスタ番号２０２ｎ−２０２ｖに対応する）は、実際の物理的レジスタを識別しない。それ故、これらの利用可能な再ネームレジスタ番号は、実行パイプライン段の前に特定の数値が書き込まれることが知られている行先オペランドを再ネーミングするのに使用される。例えば、物理的レジスタ番号２５５又はｈＦＦは、数値０に関連している。又、物理的レジスタ番号２５４又はｈＦＥは、数値１に関連している。物理的レジスタ番号は、０と、多ビットインデックスで表された最大値との間の範囲で連続値として提示されるが、予約レジスタ番号２１４内の物理的レジスタ番号及び数値の他の組み合わせも考えられ、意図される。
【００４９】
図３を参照すれば、物理的レジスタファイル３００の一実施形態の一般化されたブロック図が示されている。図示されたように、物理的レジスタファイル３００は、アレイ３２０と、複数のデコーダ３１０と、読み出しロジック・データドライバ３７０と、読み出しバイパスロジック３８０とを備えている。アレイ３２０は、複数のセルを含み、各セル３３０は、関連レジスタに対する情報のビットを記憶する。情報は、状態情報と、オペランドに対応するデータとを含む。プロセッサのマイクロアーキテクチャーに関して、物理的レジスタファイル３００は、大きなレジスタプールである。先に述べたように、これらのレジスタの一部分は、ソフトウェアプログラマ及びコンパイラーに見えるアーキテクチャーレジスタである。残りのレジスタは、レジスタ再ネームプロセス中に使用される非アーキテクチャーレジスタである。
【００５０】
図３に見られるように、物理的レジスタファイル３００は、相当の回路を含み、そして物理的レジスタファイル３００のアクセスは、著しい量の電力を消費する。更に、そのアクセスは、関連出力又は応答を受け取るまでに著しい遅延を含む。しかしながら、ある読み取り動作については、読み取りバイパスロジック３８０は、デコーダ３１０内の回路、ワードラインドライバ３１８、アレイ３２０及び読み出しロジック３７０を使用せずに、読み出しデータ３８４を与える。例えば、読み出しバイパスロジック３８０が、実際の物理的レジスタに関連していないが特定の数字番号に関連している予約物理的レジスタ番号を識別する読み取りレジスタ識別子３８２を受け取るのに応答して、読み出しバイパスロジックは、読み出しデータ３７２で指示された出力ラインに特定の数字番号を与える。デコーダ３１０内の回路、ワードラインドライバ３１８、アレイ３２０、及び読み出しロジック３７０は、使用されない。それ故、この形式のアクセスに対して電力消費及びレイテンシの両方が減少される。
【００５１】
動作中に、物理的レジスタファイル３００は、読み取りレジスタ識別子３８２を受け取る。この読み取りレジスタ識別子３８２は、読み取り動作のソースオペランド又は書き込み動作の行先オペランドのための再ネームレジスタ番号（物理的レジスタ番号）である。デコーダ３１０及びワードラインドライバ３１８は、読み取り動作のためのアクセスであるか書き込み動作のためのアクセスであるか指示するコントロール信号（図示せず）を受け取る。更に、デコーダ３１０及びワードラインドライバ３１８は、読み取りバイパスロジック３８０を経てライン３８２上の読み取りレジスタ識別子を受け取る。或いは又、デコーダ３１０及びワードラインドライバ３１８は、ライン３８２上の読み取りレジスタ識別子を直接受け取ってもよい。しかしながら、読み取りバイパスロジック３８０は、コントロール信号をデコーダ３１０へ送信し、そしてワードラインドライバ３１８は、この回路がアレイ３２０へ送信すべき有効な出力を発生するかどうか決定する。例えば、ライン３８２上の読み取りレジスタ識別子がゼロサイクルレジスタ初期化動作に対応することを読み取りバイパスロジック３８０が決定する場合には、ロジック３８０は、コンポーネント３１０−３７０内の回路がアクセスに使用されるのを防止する。むしろ、ロジック３８０は、それに関連する読み出しデータをライン３８４に与える。
【００５２】
アレイ３２０は、典型的に、専用の読み取り及び書き込みポートを伴うダイ上スタティックランダムアクセスメモリ（ＲＡＭ）として具現化される。セル３３０の１つの具現化が図３に示されている。典型的に、デコーダ３１２−３１６の各々は、ワードラインドライバ３１８内の適当なワードラインロジックを駆動する一連のブールロジックＡＮＤゲートを含む。ここに示す実施形態では、デコーダ３１０は、２つの読み取りデコーダ３１２及び３１４と、１つの書き込みデコーダ３１６とを含む。従って、アレイ３２０内の所与のセル３３０は、ライン３５８上のワードライン０と、ライン３６０上のワードライン１である２本の読み取りワードラインを含む。更に、セル３３０は、ライン３５０上の読み取りポート０と、ライン３５２上の読み取りポート１である２つの読み取りポートを含む。同様に、セル３３０は、ライン３５６上の単一の書き込みワードラインを含む。他の実施形態では、異なる数の読み取りデコーダ、読み取りポート、書き込みポート、及び書き込みワードラインが使用される。
【００５３】
図示されたように、各セル３３０は、セル３０内に情報を記憶するための背中合わせのインバータ３３２及び３３４を有する。インバータ３３２及び３３４各々の出力は、セルの関連ビット値、又はビット値の反転形態のいずれかを与える。論理高値は、電力基準値に等価である。論理低値は、接地基準値に等価である。
【００５４】
書き込み動作中に、書き込みワードラインは、特定の行に対してライン３５６上の論理高値にアサートされる。ワードラインドライバ３１８は、書き込みワードラインをアサートする。ブロック３７０のデータドライブ回路によりライン３４８上の書き込みビット０及びライン３５４上の書き込みビット１の各々に適当なデータ値が入れられる。これらの値は、一対のインバータ３３２及び３３４に結合された２つのノードの一方を、ｎｍｏｓトランジスタ３４０及び３４２を含むトランジスタスタック、又はｎｍｏｓトランジスタ３４４及び３４６を含むトランジスタスタックのいずれかを経て、論理低値へ放電させる。
【００５５】
読み取り動作が読み取りバイパスロジック３８０により取り扱われないときは、コンポーネント３１０−３７０内の回路が使用される。そのような読み取り動作の間に、ライン３５８及び３６０上の読み取りワードラインの一方又は両方が論理高値にアサートされる。ｎｍｏｓトランジスタ３３６及び３３８の一方又は両方がターンオンされる。従って、一対のインバータ３３２及び３３４により記憶された状態は、ライン３５０及び３５２上の読み取りポートの一方又は両方に与えられる。ライン３５０及び３５２上の値は、回路ブロック３７０内の読み出しロジックへ送られる。この読み出しロジックは、ラッチ、フリップ・フロップ、及びセンス増幅器の１つ以上を含む。物理的レジスタファイル３００のブロック図及び回路説明から明らかなように、読み取りバイパスロジック３８０がゼロサイクルレジスタ初期化動作に対して読み出しデータを与えることができるときは、回路コンポーネント３１０−３７０に関連した電力消費を回避することができる。更に、読み取り動作のレイテンシを減少することができる。
【００５６】
図４を参照すれば、ゼロサイクルレジスタ初期化動作でレジスタ再ネーミング４００を行う１つの実施形態を示す一般化されたブロック図が示されている。展開されたループの簡単な例は、インストラクション４１０ａを含む。この例では、行先オペランドがインストラクション記憶後に最初にリストされ、その後、１つ以上のソースオペランドとなる。レジスタは、一般的な術語“ｒ”を使用し、その後に、レジスタ識別子となる。例えば、レジスタ１は、“ｒ１”で表される。インストラクション４１０ａを伴う展開されたコードを導出するのに使用される元のループを以下に示す。
【００５７】
0005853303.tif 000005
【００５８】
ここでは、ループが使用されるが、レジスタ初期化動作がゼロサイクルレジスタ初期化動作であることを決定するためのループは不要である。この決定、及びその後のゼロサイクル動作の生成は、種々の形式のコードに対して使用される。インストラクション４１０ａは、ｒ１−ｒ５と示す５つのアーキテクチャーレジスタを使用する。これらの物理的レジスタ番号は、実際の物理的レジスタに関連している。インストラクション４１０ａは、擬似コードの例及び言語不可知論であることを意味する。マッピングテーブル４２０ａは、一般的に、アーキテクチャーレジスタ番号と物理的レジスタ番号との間のマッピングを記憶するためのデータ構造を示す。
【００５９】
フリーリスト４３０ａは、再ネーミングの目的で利用できる非アーキテクチャー物理的レジスタ番号を指示するためのデータ構造を示す。これらの物理的レジスタ番号も、実際の物理的レジスタに関連している。この例では、一般的術語“ｐ”と、その後にレジスタ識別子を使用する１４個の物理的レジスタネームがある。フリーリスト４３０ａは、物理的レジスタｐ１−ｐ１４の各々がレジスタ再ネーミングに使用できることを示す。
【００６０】
予約リスト４３２は、再ネーミングのための少なくとも１つの物理的レジスタ番号のグループを示す。この例では、一般的術語“ｐ”と、その後にレジスタ識別子を使用する４個の物理的レジスタネームがある。この例では、これらのレジスタ識別子は、フリーリスト４３０ａにおける物理的レジスタネームより大きな番号にされる。フリーリスト４３０ａにおける物理的レジスタネームとは異なり、予約リスト４３２における物理的レジスタネームの各々は、実際の物理的レジスタには関連していない。むしろ、予約リスト４３２における物理的レジスタネームは、特定の数値に関連している。例えば、物理的レジスタネームｐ１５は、数値０に関連している。同様に、物理的レジスタネームｐ１６は、数値１に関連している。
【００６１】
１つの例において、物理的レジスタ番号を識別するのに４ビットインデックスが使用される。それ故、１６個の個別の物理的レジスタ番号は、物理的レジスタネームｐ１−ｐ１６のような４ビットインデックスにより識別される。しかしながら、物理的レジスタファイルには、１４個の実際の物理的レジスタしか存在しない。近代的なプロセッサは、この例で与えられたものより大きい番号を使用する。この簡単な例は、例示のために使用されるに過ぎない。ｒ１−ｒ５のような５つのアーキテクチャーレジスタでは、最初の５つの物理的レジスタネームｐ１−ｐ５で１対１の再ネーミングが行われる。更に、９個の物理的レジスタがある。それ故、物理的レジスタネームｐ６−ｐ１４は、非アーキテクチャー物理的レジスタネームであるが、その各々は、実際の物理的レジスタに依然関連している。残りの２つの物理的レジスタネーム、ｐ１５及びｐ１６は、特定の数値を表わすのに使用される。この例では、数値が、各々、０及び１である。
【００６２】
インストラクション４１０ｂを参照すれば、これらのインストラクションは、インストラクション４１０ａと同じであるが、各インストラクションに対してレジスタ再ネーミングが生じる。再ネーミングプロセスは、所与のパイプライン段において１つ以上のインストラクションを再ネーミングする。同時処理のために、パイプライン段当たりいかなる数のインストラクションが選択されてもよい。マッピングテーブル４２０ｂは、インストラクションごとにマッピングを記憶する。マッピングテーブル４２０ｂは、インストラクションごとにアーキテクチャーレジスタ番号と物理的レジスタ番号と予約レジスタ番号との間の記憶されたマッピングを示す。フリーリスト４３０ｂは、インストラクション４１０ｂの各々が再ネーミングされた後に物理的レジスタｐ７−ｐ１４の各々が依然利用可能であることを示す。物理的レジスタｐ１−ｐ６の各々は、インストラクション４１０ｂにおいてアーキテクチャーレジスタｒ１−ｒ５を再ネーミングするのに使用されている。
【００６３】
予約リスト４３２は、インストラクション４１０ｂの各々が再ネーミングされた後に、予約物理的番号ｐ１５−ｐ１６の各々が依然利用可能であることを示す。しかしながら、マッピングテーブル４２０ｂは、予約物理的番号ｐ１５及びｐ１６の各々がアーキテクチャーレジスタｒ１−ｒ５の１つ以上を再ネーミングするのに使用されたことを示している。予約物理的番号ｐ１５−ｐ１６の各々は、実際の物理的レジスタではなく、数値に関連している。それ故、予約物理的番号ｐ１５−ｐ１６の各々は、再ネーミングの目的で利用可から利用不可へと変化しない。予約物理的番号ｐ１５−ｐ１６の所与の１つは、第１のインストラクションにおいて第１のアーキテクチャーレジスタを再ネーミングするのに使用された後に、それより若い第２のインストラクションにおいて第２のアーキテクチャーレジスタを再ネーミングするのに使用されるが、第１のインストラクションは、まだコミットされなくてもよい。
【００６４】
インストラクション４１０ｂを見ると、第１のインストラクションは、ゼロサイクルレジスタ初期化動作へ変換される資格がある。このｍｏｖｅインストラクションは、即時移動動作であり、数値０を、レジスタｒ１である行先オペランドに書き込む。予約物理的レジスタ番号ｐ１５は、数値０に関連している。それ故、レジスタｒ１は、ｐ１５へ再ネーミングされる。このマッピングは、マッピングテーブル４２０ｂに示されている。このｍｏｖインストラクションは、それがプロセッサの実行パイプライン段へ進行するのを防止するためにマークされる。例えば、ｍｏｖインストラクションは、ディスパッチパイプラン段で完了するようにマークされる。そのような実施形態では、ｍｏｖインストラクションがディスパッチパイプ段を越えて進行しないので、電力消費がプロセッサ内で減少される。更に、ｍｏｖインストラクションは、そうでなければ使用されるディスパッチパイプ段の後の複数のリソースを使用しないので、他のインストラクションに対するスループットが高くなる。更に、物理的レジスタｐ１−ｐ１４の各々がレジスタ再ネーミングに依然使用できるので、フリーリスト４３０ｂのサイズが増加される。増加されたフリーリストサイズは、性能の改善にも貢献する。
【００６５】
再ネームロジックは、プログラム順でこの第１のｍｏｖインストラクションより若いインストラクションにおいてレジスタｒ１と同じ識別子をもつソースオペランドに予約物理的レジスタ番号ｐ１５を指定する。物理的レジスタ番号ｐ１５のこのバイパス動作は、それより若いインストラクションが、レジスタｒ１を、数値０が書き込まれることを知らない行先オペランドとして使用するまで行われる。これらの若いインストラクションが、ｐ１５に再ネーミングされたソースオペランドに対して物理的レジスタファイルにアクセスするときに、物理的レジスタファイル内の読み取りバイパスロジックは、データ出力ラインを経て数値０を搬送する。ｐ１５に再ネーミングされたソースオペランドに対応する読み取り動作中にアクセスされる実際の物理的レジスタはない。
【００６６】
同様に、第２のインストラクションは、ゼロサイクルレジスタ初期化動作へ変換される資格がある。このｍｏｖｅインストラクションは、即時移動動作であり、数値１を、レジスタｒ２である行先オペランドに書き込む。予約物理的レジスタ番号ｐ１６は、数値１に関連している。それ故、レジスタｒ２は、ｐ１６へ再ネーミングされる。このマッピングは、マッピングテーブル４２０ｂに示されている。この第２のｍｏｖインストラクションは、それがプロセッサの実行パイプライン段へ進行するのを防止するためにマークされる。上述したレジスタｒ１に対する再ネーミングと同様に、第２のｍｏｖインストラクションは、実行パイプライン段を通して進行しないので、電力消費の減少及びインストラクションスループットの増加のような種々の利益が得られる。
【００６７】
再ネーミングロジックは、プログラム順でこの第２のｍｏｖインストラクションより若いインストラクションにおいてレジスタｒ２と同じ識別子をもつソースオペランドに予約物理的レジスタ番号ｐ１６を指定する。物理的レジスタ番号ｐ１６のこのバイパス動作は、それより若いインストラクションが、レジスタｒ２を、数値１が書き込まれることを知らない行先オペランドとして使用するまで行われる。これらの若いインストラクションが、ｐ１６に再ネーミングされたソースオペランドに対して物理的レジスタファイルにアクセスするときに、物理的レジスタファイル内の読み取りバイパスロジックは、データ出力ラインを経て数値１を搬送する。ｐ１６に再ネーミングされたソースオペランドに対応する読み取り動作中にアクセスされる実際の物理的レジスタはない。
【００６８】
第３のインストラクションは、即時移動動作であるが、この例では、ゼロサイクルレジスタ初期化動作へ変換される資格をもたない。第３のインストラクションは、数値１０をレジスタｒ３に書き込む。この例では、予約物理的レジスタ番号ｐ１５−ｐ９３の中で、数値１０に関連したものはない。それ故、レジスタｒ３は、物理的レジスタ番号ｐ１に再ネーミングされる。このマッピングがマッピングテーブル４２０ｂに示されている。
【００６９】
第４のインストラクションは、ブールロジックＸＯＲ動作である。ソースオペランドの各々は、ｒ４である同じアーキテクチャーレジスタネームを有する。それ故、結果が０であって、行先オペランドに数値０が書き込まれることが分かる。時々、ソフトウェアプログラマは、即時移動動作を使用するのではなく、ブールロジックＸＯＲ動作を意図的に使用して、所与のレジスタをリセットする。あるハードウェア具現化では、ブールロジックＸＯＲ動作は、即時移動動作よりレイテンシが小さいことが知られている。第４のインストラクションでは、行先オペランドは、ソースオペランドと同じアーキテクチャーレジスタネームをもつが、インストラクションは、その特性から外れたゼロサイクル動作の資格をもつ。予約物理的レジスタ番号ｐ１５は、数値０に関連している。それ故、レジスタｒ４は、ｐ１５に再ネーミングされる。このマッピングがマッピングテーブル４２０ｂに示されている。更に、ブールロジックＸＯＲインストラクションも、それがプロセッサの実行パイプライン段へ進行するのを防止するためにマークされる。物理的レジスタファイルのアクセス中の再ネーミングされたレジスタ番号のバイパス動作及び読み取りバイパスロジックの使用は、第１のｍｏｖインストラクションに対する予約物理的レジスタｐ１５に関して先に述べたように行われる。
【００７０】
第５のインストラクションは、ゼロサイクルレジスタ初期化動作へ変換される資格がある。このｍｏｖインストラクションは、即時移動動作であって、数値０を、レジスタｒ５である行先オペランドに書き込む。この第５のインストラクションにも、第１のｍｏｖインストラクションについて先に述べた再ネーミング、マーキング、バイパス、及び物理的レジスタファイルアクセスステップが適用される。
【００７１】
第６のインストラクションは、演算ＡＤＤ動作である。このインストラクションは、ゼロサイクル動作へ変換される資格がない。ソースオペランドｒ１及びｒ２の各々は、マッピングテーブル４２０ｂのアクセス及び再ネーム値のバイパスのためにｐ１５及びｐ１６に再ネーミングされる。行先オペランドは、ｐ２に再ネーミングされる。第７ないし第１０インストラクションの各々に対して、第６インストラクションと同様のステップがとられる。第７ないし第１０インストラクションの中で、ゼロサイクルオペレーションへ変換される資格のあるものはない。
【００７２】
図５を参照すれば、ゼロサイクル動作を生成する方法５００の一実施形態の一般化されたフローチャートが示されている。ブロック５０２において、実際の物理的レジスタに関連しない所与のレジスタ識別子が、特定の数値に対応するように選択される（例えば、特定の数値を表わすように指定される）。最後の特定の数値に到達した場合には（条件付きブロック５０４）、ブロック５０６において、プログラムインストラクションが処理される。インストラクションは、コンパイルされ、メモリからフェッチされ、デコードされ、及び実行される。説明上、この実施形態におけるステップは、特定の順序で示されている。しかしながら、他の実施形態では、幾つかのステップが図示されたものとは異なる順序で生じてもよく、幾つかのステップが同時に実行されてもよく、幾つかのステップが他のステップと結合されてもよく、そして幾つかのステップが存在しなくてもよい。
【００７３】
デコーディングの後、所与のインストラクションは、資格付けされた(qualified)数値に対するレジスタ初期化動作であると決定される。ｏｐｃｏｄｅ及びソースオペランドは、この決定を行うためにチェックされる。コントロールロジックは、特定のデコードされたインストラクションに関連した実行パイプライン段の前に、特定のインストラクションが資格付けされた数値をその行先オペランドに書き込むことを決定する。１つの実施形態では、ロジックは、インストラクションが即時移動インストラクションのためのｏｐｃｏｄｅを有し、そして即時の値が資格付けされた数値であると決定する。
【００７４】
ある実施形態では、１つ以上の資格付けされた数値の１つが値０である。そのようなケースでは、コントロールロジックは、インストラクションが、ＡＮＤ又はＸＯＲのようなブール論理動作のためのｏｐｃｏｄｅを有することを決定する。更に、ロジックは、ソースオペランドから、その後の実行パイプライン段の間に０の結果が行先オペランドに書き込まれることを決定する。同様に、ブールロジックＸＯＲ動作のための２つの等しいソースオペランドは、０の結果を生じさせる。更に、コントロールロジックは、デコードされたインストラクションが特定の演算動作のためのｏｐｃｏｄｅを有すると決定し、そしてソースオペランドのための特定の値がその後の実行パイプライン段の間に０の結果を行先オペランドに書き込ませる。例えば、２つの同じソースオペランドを伴う減算演算動作は、０の結果を生じさせる。同様に、０のソースオペランドを伴う乗算演算動作は、０の結果を生じさせる。
【００７５】
少なくとも、その後の実行パイプライン段において０の結果を行先オペランドに書き込むことを決定する前記ケースの各々に対して、実際の物理的レジスタに関連しない特定の再ネームレジスタ識別子でのレジスタ再ネーミングに関して先に述べた同様のステップが使用される。所与のインストラクションが、資格付けされた数値に対するレジスタ初期化動作であると決定されない場合には（条件付きブロック５０８）、方法５００のコントロールフローがブロック５０６へ戻る。例えば、所与のインストラクションのソース及び行先オペランドは、物理的レジスタファイル内の実際の物理的レジスタに関連した再ネームレジスタ識別子で再ネームングされる。プログラムインストラクションの処理が続行される。
【００７６】
所与のインストラクションが、資格付けされた数値に対するレジスタ初期化動作であると決定された場合には（条件ブロック５０８）、ブロック５１０において、行先アーキテクチャーレジスタ識別子が、資格付けされた数値に指定されたレジスタ識別子で再ネーミングされる。このレジスタ識別子は、物理的レジスタファイルの実際の物理的レジスタに関連していない。その後のパイプライン段では、物理的レジスタファイルは、この特定の再ネームレジスタ識別子を、読み取るべきソースオペランドとして受け取るときに、実際の物理的レジスタにアクセスすることなく、資格付けされた数値を搬送する。１つの実施形態では、資格付けされた数値は、０である。しかしながら、他の数値も考えられ、資格付けされた値として意図される。ブロック５１２において、レジスタ初期化動作は、それがプロセッサパイプラインにおいて進行するのを防止するためにマークされる。例えば、動作は、ディスパッチパイプライン段において完了するものとしてマークされる。上述したように、レジスタ初期化動作がパイプラインを通して進行しないので、プロセッサ内の電力消費が減少される。更に、レジスタ初期化動作がパイプラインの後続段において複数のリソース（キュー、実行ユニット、ステージングフロップ、等）を使用しないので、他のインストラクションに対するスループットが高くなる。更に、このケースではレジスタ再ネーミングに使用される物理的レジスタがないので、フリーリストのサイズが増加する。フリーリストサイズの増加は、性能の改善にも貢献する。
【００７７】
以上、本発明の実施形態を詳細に述べたが、当業者であれば、前記開示が完全に理解されると、多数の種々の変更や修正が明らかとなろう。そのような修正や変更は、全て、特許請求の範囲に網羅される。
【符号の説明】
【００７８】
１００：プロセッサ
１０２：アドレスセレクト
１０４：ｉキャッシュ
１０６：次フェッチプレディクタ
１０８：分岐方向プレディクタ
１１０：デコードユニット
１１２：コントロールフロー評価
１１４：再ネームイントラグループ依存性検出
１１６：マッパー
１２０：レジスタ再ネームユニット
１２２：再ネームコントロールロジック・アレイ
１２４：ゼロサイクル初期化ロジック
１３０：フリーリストアロケータ
１４０：ディスパッチキュー
１４２：マイクロコード
１５０：スケジューラ
１６０：実行コア
１６２：データキャッシュ
１６４：物理的レジスタファイル
１６６：読み取りバイパス
１７０：リオーダーバッファ
１７２：記憶バッファ
【図１】
0005853303.tif 000006
【図２】
0005853303.tif 000007
【図３】
0005853303.tif 000008
【図４】
0005853303.tif 000009
【図５】
0005853303.tif 000010