(57)【要約】【課題】ロード動作のレイテンシーを減少するためのシステム及び方法を提供する。【解決手段】プロセッサ内のレジスタ再ネームユニットは、デコードされたロードインストラクションがゼロサイクルロード動作へ変換する資格があるかどうか決定する。もしそうであれば、コントロールロジックは、古い依存の記憶インストラクションのソースオペランドに関連した物理的レジスタ識別子をロードインストラクションの行先オペランドに指定する。更に、レジスタ再ネームユニットは、ロードインストラクションがメモリから記憶インストラクションのソースオペランドに関連したデータを読み取るのを防止するようにロードインストラクションをマークする。複写再ネーミングのために、このデータは、物理的レジスタファイルから、ロードインストラクションより若く且つそれに依存するインストラクションへ転送される。【選択図】図２
2014002735.tif 000002
【特許請求の範囲】
【請求項１】
所与の記憶インストラクションに対する所与のロードインストラクションのメモリ依存性を決定するように構成されたメモリ依存性検出器と、
前記決定されたメモリ依存性の指示を受け取り且つ資格付け条件が満足されたと決定するのに応答して、
前記所与の記憶インストラクションのソースオペランドレジスタＩＤに関連した再ネームレジスタ識別子（ＩＤ）を前記所与のロードインストラクションの行先オペランドレジスタＩＤに指定し、及び
前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止する、
ように構成されたレジスタ再ネームユニットと、
を備えたプロセッサ。
【請求項２】
前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止するために、前記レジスタ再ネームユニットは、メモリ依存性が決定されること、及びメモリ依存性が正しいと検証されること、の少なくとも一方の後、所与のロードインストラクションを完了すべきであることを指示するように構成された、請求項１に記載のプロセッサ。
【請求項３】
前記再ネームレジスタＩＤを所与のロードインストラクションの行先オペランドレジスタＩＤに指定するのに応答して、前記レジスタ再ネームユニットは、更に、前記再ネームレジスタＩＤに関連した複写カウントを記憶するように構成される、請求項２に記載のプロセッサ。
【請求項４】
前記資格付け条件が満足されたと決定することは、少なくとも、
プログラム順序で前記所与の記憶インストラクションと所与のロードインストラクションとの間のインストラクションが、前記所与の記憶インストラクションのソースオペランドレジスタＩＤに等しい行先オペランドレジスタＩＤを有すること、及び
前記所与の記憶インストラクションがまだリタイアしていないこと、
を決定することを含む、請求項３に記載のプロセッサ。
【請求項５】
前記レジスタ再ネームユニットは、更に、
行先オペランドレジスタＩＤがレジスタ再ネームＩＤに指定されたインストラクションをコミットする準備ができたことを検出し、及び
前記再ネームレジスタＩＤが複写されたことを決定するのに応答して前記再ネームレジスタＩＤがフリーリストへ返送されるのを防止する、
ように構成された、請求項３に記載のプロセッサ。
【請求項６】
前記インストラクションは、所与のロードインストラクション、所与の記憶インストラクション、及びプログラム順序で所与のロードインストラクションと所与の記憶インストラクションとの間にあるインストラクション、のうちの少なくとも１つである、請求項５に記載のプロセッサ。
【請求項７】
前記レジスタ再ネームユニットは、更に、再ネームレジスタＩＤに現在マップされていないアーキテクチャー的レジスタＩＤが再ネームレジスタＩＤへマップされるたびに複写カウントをインクリメントするように構成された、請求項５に記載のプロセッサ。
【請求項８】
前記プロセッサは、更に、前記メモリ依存性が正しくないとの決定に応答して、前記所与のロードインストラクション、及びプログラム順序で前記所与のロードインストラクションより若いプログラムインストラクションを再生するように構成されたロード／記憶ユニットを備えた、請求項５に記載のプロセッサ。
【請求項９】
前記プロセッサは、更に、前記所与の記憶インストラクションのソースオペランドに関連したデータを、前記所与のロードインストラクションより（プログラム順序で）若く且つそれに依存するインストラクションへ転送するように構成された物理的レジスタファイルを備えた、請求項５に記載のプロセッサ。
【請求項１０】
所与の記憶インストラクションに対する所与のロードインストラクションのメモリ依存性を決定し、
前記メモリ依存性の指示を受け取り且つ資格付け条件が満足されたと決定するのに応答して、
前記所与の記憶インストラクションのソースオペランドレジスタＩＤに関連した再ネームレジスタ識別子（ＩＤ）を前記所与のロードインストラクションの行先オペランドレジスタＩＤに指定し、及び
前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止する、
段階を含む方法。
【請求項１１】
前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止するために、前記方法は、メモリ依存性が決定されること、及びメモリ依存性が正しいと検証されること、の少なくとも一方の後に、所与のロードインストラクションを完了すべきであると指示する段階を含む、請求項１０に記載の方法。
【請求項１２】
前記再ネームレジスタＩＤを所与のロードインストラクションの行先オペランドレジスタＩＤに指定するのに応答して、前記方法は、更に、前記再ネームレジスタＩＤに関連した複写カウントを記憶する段階を含む、請求項１１に記載の方法。
【請求項１３】
前記資格付け条件が満足されたと決定することは、少なくとも、
前記所与の記憶インストラクションと所与のロードインストラクションとの間に介在するインストラクションが、前記所与の記憶インストラクションのソースオペランドレジスタＩＤに等しい行先オペランドレジスタＩＤを有すること、及び
前記所与の記憶インストラクションがまだリタイアしていないこと、
を決定することを含む、請求項１２に記載の方法。
【請求項１４】
前記所与のロードインストラクションより（プログラム順序で）若く且つそれに依存するインストラクションを前記所与のロードインストラクションと共に発行する段階を更に含む、請求項１３に記載の方法。
【請求項１５】
メモリ依存性を決定するために、前記方法は、少なくとも、前記所与の記憶インストラクション及び所与のロードインストラクションがアドレスオペランドベースレジスタＩＤ及びアドレスオペランド即時値に対して一致する値を有することを決定する段階を更に含む、請求項１４に記載の方法。
【請求項１６】
介在するインストラクションが前記所与の記憶インストラクションのアドレスオペランドベースレジスタを即時値更新で変更することを決定するのに応答して、前記方法は、更に、前記所与のロードインストラクションとのメモリ依存性を決定する前に、前記所与の記憶インストラクションに対するアドレスオペランド即時値の記憶値を調整する段階を含む、請求項１５に記載の方法。
【請求項１７】
インストラクションをコミットする準備ができたことを検出し、インストラクションの行先オペランドレジスタＩＤがレジスタ再ネームＩＤに指定され、及び
前記再ネームレジスタＩＤが複写されるとの決定に応答して前記再ネームレジスタＩＤがフリーリストに返送されるのを防止する、
段階を更に含む請求項１３に記載の方法。
【請求項１８】
前記再ネームレジスタＩＤに現在マップされていない所与のアーキテクチャー的レジスタＩＤが前記再ネームレジスタＩＤへマップされるたびに前記複写カウントをインクリメントする段階を更に含む、請求項１７に記載の方法。
【請求項１９】
デコードされたインストラクションを受け取るように構成された第１インターフェイスと、
インストラクションをスケジューラへディスパッチするように構成されたディスパッチユニットへの第２インターフェイスと、
所与の記憶インストラクションに対する所与のロードインストラクションのメモリ依存性の指示を受け取り且つ資格付け条件が満足されたと決定するのに応答して、
前記所与の記憶インストラクションのソースオペランドレジスタＩＤに関連した再ネームレジスタ識別子（ＩＤ）を前記所与のロードインストラクションの行先オペランドレジスタＩＤに指定し、及び
前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止する、
ように構成されたゼロサイクルロードロジックと、
を備えたレジスタ再ネームユニット。
【請求項２０】
前記資格付け条件が満足されたと決定することは、少なくとも、
前記所与の記憶インストラクションと所与のロードインストラクションとの間に介在するインストラクションが、前記所与の記憶インストラクションのソースオペランドに等しい行先オペランドレジスタＩＤを有すること、及び
前記所与の記憶インストラクションがまだリタイアしていないこと、
を決定することを含む、請求項１９に記載のレジスタ再ネームユニット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサに関するもので、より詳細には、ロード動作のレイテンシー及び電力を効率的に減少することに関する。
【背景技術】
【０００２】
マイクロプロセッサは、典型的に、重畳するパイプライン段と、インストラクションの順序ずれ(out-of-order)実行とを含む。更に、マイクロプロセッサは、スループットを上げるために同時マルチスレッディングをサポートする。これらの技術は、ソースコードにおけるインストラクションレベルパラレル性（ＩＬＰ）の利点を取り入れている。各クロックサイクル中に、マイクロプロセッサは、１より大きな整数をＮとすれば、各パイプライン段に対してスレッド当たり最大Ｎ個のインストラクションの有用な実行を生じさせるのが理想的である。しかしながら、コントロール依存性及びデータ依存性のために、マイクロプロセッサの最大スループットがサイクル当たりＮ個未満のインストラクションへと減少される。
【０００３】
インストラクションの投機的実行を使用して、ソースコードのコントロール依存性に関わらず、インストラクションのパラレル実行が遂行される。インストラクションのオペランドがプログラム順での古いインストラクションの結果に依存するときにデータ依存性が生じる。データ依存性は、直線的コードセグメントにおける後続インストラクションのオペランド間、又は後続ループ繰り返しに属するインストラクションのオペランド間、のいずれかに現れる。直線的コードでは、書き込み後の読み取り（ＲＡＷ）、読み取り後の書き込み（ＷＡＲ）、又は書き込み後の書き込み（ＷＡＷ）依存性に遭遇する。レジスタ再ネーミングを使用して、ＷＡＲ及びＷＡＷ依存性に関わらず、インストラクションをパラレルに実行することができる。しかしながら、真の依存性又はＲＡＷ依存性は、依然、そのままである。それ故、行先レジスタとして、そしてその後、ソースレジスタとして繰り返し使用されるアーキテクチャーレジスタは、関連ソースコードセグメントに対してインストラクションの実行をシリアル化させる。
【０００４】
アーキテクチャーレジスタとの通常のＲＡＷ依存性の一例は、ロードインストラクションであるか、又はまだメモリ位置に結果をコミットしていない（プログラム順序で）古い記憶インストラクションにより変更されたメモリ位置を読み取るよう試みる読み取り動作である。この形式のＲＡＷ依存性は、プログラム実行中に頻繁に生じる。メモリ位置の読み取りは、著しいレイテンシーを含み、プロセッサのスループットを減少する。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
以上に鑑み、ロード動作のレイテンシーを効率的に減少するための効率的な方法及びメカニズムが要望される。
【課題を解決するための手段】
【０００６】
ロード動作のレイテンシーを効率的に減少するためのシステム及び方法が提供される。１つの実施形態において、プロセッサは、デコードされたインストラクションを受け取って、デコードされた所与のインストラクションがゼロサイクルロード動作となる資格があるかどうか決定するレジスタ再ネームユニットを備えている。クオリファイア(qualifier)は、例えば、所与の記憶インストラクションにおける所与のロードインストラクションのための予想メモリ依存性を含む。更に、クオリファイアは、所与の物理的レジスタ番号に対するマッピングの重複カウントを維持するために利用可能なサポートの存在を検出することを含む。決定が真である場合には、再ネームレジスタユニットは、所与の記憶インストラクションのソースオペランドに関連した物理的レジスタ番号を、所与のロードインストラクションの行先オペランドに指定する。
【０００７】
更に、レジスタ再ネームユニット内のコントロールロジックは、所与のロードインストラクションを、それが、メモリからの記憶インストラクションのソースオペランドに関連したデータを読み取るのを防止するようにマークする。重複再ネーミングのために、このデータは、物理的レジスタファイルから、所与のロードインストラクションより（プログラム順序で）若くて且つそれに依存するインストラクションへ転送される。その後のパイプライン段において、予想メモリ依存性が検証される。メモリ依存性が正しい場合には、所与のロードインストラクションは、メモリ（データキャッシュ）から又は記憶バッファからオペランドデータを読み取ることなく完了すると考えられる。メモリ依存性が正しくない場合には、所与のロードインストラクション及びそれより（プログラム順序で）若いインストラクションは、パイプラインからフラッシュされ、そして再生される。
【０００８】
これら及び他の実施形態は、以下の説明及び添付図面から更に明らかとなろう。
【図面の簡単な説明】
【０００９】
【図１】コンピュータシステムの１つの実施形態の一般化されたブロック図である。
【図２】ゼロサイクルロード動作でスーパースカラー順序ずれ実行を遂行するプロセッサコアの１つの実施形態の一般化されたブロック図である。
【図３】ゼロサイクルロード動作を検出する方法の１つの実施形態の一般化されたフローチャートである。
【図４】ゼロサイクルロード動作を処理する方法の１つの実施形態の一般化されたフローチャートである。
【図５】ゼロサイクルロード動作を含むインストラクションをコミットする方法の１つの実施形態の一般化されたフローチャートである。
【発明を実施するための形態】
【００１０】
本発明は、種々の変更を受けそして別の形態でも実施できるが、その特定の実施形態を一例として添付図面に示して以下に詳細に説明する。しかしながら、添付図面及び詳細な説明は、本発明を、ここに開示する特定の形態に限定するものではなく、本発明は、特許請求の範囲に規定される本発明の精神及び範囲内に入る全ての変更、等効物及び代替え物を網羅することを理解されたい。又、本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味（即ち、〜の潜在性があるという意味）で使用されるもので、強制の意味（即ち、〜しなければならないという意味）ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
【００１１】
種々のユニット、回路又は他のコンポーネントは、１つ又は複数のタスクを遂行するように「構成される」ものとして述べる。この点について、「構成される」とは、動作中に１つ又は複数のタスクを遂行する「回路を有する」ことを一般的に意味する構造を広く表現するものである。従って、ユニット／回路／コンポーネントは、そのユニット／回路／コンポーネントが現在オンでなくても、タスクを遂行するように構成することができる。一般的に、「構成される」に対応する構造を形成する回路は、ハードウェア回路を含む。同様に、種々のユニット／回路／コンポーネントは、説明の便宜上、１つ又は複数のタスクを遂行するものとして説明されてもよい。そのような説明は、「構成される」という句を含むものと解釈されねばならない。１つ以上のタスクを遂行するように構成されたユニット／回路／コンポーネントを表現する場合に、そのユニット／回路／コンポーネントに関して３５Ｕ.Ｓ.Ｃ.§１１２、第６節の解釈を引用しないことが明確に意図される。
【００１２】
以下の説明において、本発明を完全に理解するため多数の特定の細部について述べる。しかしながら、当業者であれば、これら特定の細部をもたずに本発明を実施できることが明らかであろう。ある場合には、本発明を不明瞭にしないため、良く知られた回路、構造及び技術は示さない。
【００１３】
図１は、コンピュータシステム１００の一実施形態の一般化されたブロック図である。図示されたように、マイクロプロセッサ１１０は、１つ以上の周辺装置１５０ａ−１５０ｂと、ディスクメモリ１３０及びダイナミックランダムアクセスメモリ（ＤＲＡＭ）１４０のような外部コンピュータメモリとに接続される。ディスクメモリ１３０は、コンピュータシステム１００のオペレーティングシステム（ＯＳ）を記憶する。ソフトウェアアプリケーションのインストラクションは、マイクロプロセッサ１１０内のキャッシュメモリサブシステム１１６にロードされる。ソフトウェアアプリケーションは、１つ以上のディスクメモリ１３０、ＤＲＡＭ１４０、及び１つの周辺装置１５０ａ−１５０ｂに記憶される。
【００１４】
単一のプロセッサコアが示されているが、マイクロプロセッサ１１０は、複数のプロセッサコアを含むことができる。各プロセッサコアは、関連キャッシュメモリサブシステムに接続される。更に、各プロセッサコアは、別のキャッシュメモリサブシステムを共有してもよい。例えば、複数のプロセッサコアの各１つは、関連レベル１（Ｌ１）キャッシュ及びレベル２（Ｌ２）キャッシュを使用し、更に、レベル３（Ｌ３）キャッシュを他のプロセッサコアと共有する。図示されたように、プロセッサコア１１２は、キャッシュメモリサブシステム１１６からソフトウェアアプリケーションインストラクションをロードし、そしてインストラクションを処理する。一般的に述べると、ソフトウェアプログラマがアルゴリズム又は方法に基づいて仕事を遂行するためのアプリケーションを書き込むときには、プログラマは、変数を使用して一時的及び結果データを参照する。このデータは、コンピュータメモリに割り当てられたスペースを使用する。オペレーティングシステムは、ソフトウェアアプリケーションのためにメモリの領域を割り当てる。
【００１５】
プロセッサコア１１２は、物理的レジスタファイル内に複数の物理的レジスタ１１４を含む。物理的レジスタ１１４は、ソフトウェアプログラマ及び／又はコンパイラーがソフトウェアアプリケーション内で識別できるアーキテクチャー的可視性レジスタ(architecturally visible register)を含む。更に、物理的レジスタ１１４は、再ネームレジスタ識別子により識別される非アーキテクチャー的（投機的）レジスタを含む。アーキテクチャー的可視性レジスタは、所与のインストラクションセットアーキテクチャー（ＩＳＡ）に関連付けられる。アプリケーションの処理中に、データは、メモリの割り当てられた領域からキャッシュメモリサブシステム１１６へロードされる。１つ以上の物理的レジスタ１１４を使用して、一時的データ及び結果データをロードし、記憶する。プロセッサコア１１２のハードウェアは、所与のＩＳＡによりインストラクションを処理するための回路を含む。ハードウェア回路は、少なくとも、アーキテクチャー的レジスタ、ファンクションユニット、パイプライン段要素、及びコントロールロジックの関連セットを含む。ＡＲＭインストラクションセットアーキテクチャーは、所与のＩＳＡについて選択される。或いは又、Ａｌｐｈａ、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、ＭＩＰＳ、ｘ８６、又は他のＩＳＡが選択されてもよい。
【００１６】
所与のＩＳＡを使用して、メモリの領域を宣言し及び割り当てる仕方を選択することができる。所与のＩＳＡは、更に、物理的レジスタ１１４を含むマイクロプロセッサ１１０と、ディスクメモリ１３０、ＤＲＡＭ１４０及び周辺装置１５０ａ−１５０ｂの１つ以上におけるメモリ位置との間でデータを転送するのに使用される選択されたアドレスモードを決定する。ロード及び記憶の両インストラクションは、典型的に、メモリとマイクロプロセッサ１１０との間、及びキャッシュメモリサブシステム１１６と物理的レジスタ１１４との間にデータを転送するのに使用される。コンピュータシステム１００に示された破線は、ロード及び記憶操作で遂行されるデータ転送の例を示す。これらデータ転送の各々には著しいレイテンシーが関連している。
【００１７】
スーパースカラーマイクロアーキテクチャー内の実行ユニットへインストラクションを順序ずれで発行するのに加えて、プロセッサコア１１２は、レジスタ再ネーミングを行ってスループットを高める。ハードウェアを使用して、プロセッサコア１１２は、行先オペランドに使用されるアーキテクチャー的レジスタ識別子を動的に再ネームする。行先オペランドと同じアーキテクチャー的レジスタ識別子をもつソースオペランドは、行先オペランドに使用される同じ再ネームレジスタ識別子で再ネームされる。
【００１８】
１つの実施形態において、プロセッサコア１１２は、早期のパイプライン段で記憶インストラクションを検出し、そして少なくともそれに関連したアドレスオペランド識別子をバッファするコントロールロジックを含む。早期のパイプライン段は、インストラクションを順序正しく(in-order)処理し、一方、後期のパイプライン段ではインストラクションが順序ずれして(out-of-order)発行され実行される。所与の記憶インストラクションのアドレスオペランドは、記憶アドレスを発生するために後期パイプライン段で使用される。アドレスオペランドは、アレスオペランドは、ベースレジスタＩＤとして使用されるアーキテクチャー的レジスタ識別子（ＩＤ）、及びオフセットとして使用される中間値を含む。
【００１９】
早期パイプライン段では、プロセッサコア１１２内のコントロールロジックは、後続インストラクションを監視して、それらインストラクションの１つ以上が所与の記憶インストラクションに対して１つ以上のアドレスオペランドを変更するかどうか決定する。例えば、アドレスオペランドＩＤは、１つ以上の後続インストラクションにおいて行先オペランドＩＤに一致することが分かる。この監視は、順序ずれ発行及び実行パイプライン段より前のパイプライン段において、行われる。
【００２０】
コントロールロジックは、物理的レジスタファイルの対応エントリが割り当て解除されるまで所与の記憶インストラクションに対して後続インストラクションを監視し続ける。このエントリは、関連再ネームレジスタ識別子がマッピングテーブルから取り出されてフリーリストに返送されるのに応答して割り当て解除される。例えば、記憶インストラクションに（プログラム順序で）続くインストラクションは、所与の記憶インストラクションのソースオペランド識別子（ソースアーキテクチャー的レジスタ識別子）に等しい行先オペランド識別子（行先アーキテクチャー的レジスタ識別子）を有する。後続インストラクションがコミットするときに、後続インストラクションの行先オペランドに以前に指定された再ネームレジスタ識別子は、別のインストラクションにより再使用するためにフリーリストに入れられる。このフリーとなった再ネームレジスタ識別子は、所与の記憶インストラクションのソースオペランドに使用される同じ識別子である。前記状態を検出するのに応答して、所与の記憶インストラクションに対する監視が終了となる。更なる詳細及び実施例が以下に示される。
【００２１】
１つの実施形態において、監視中に、コントロールロジックは、後続ロード動作が所与の記憶インストラクションと一致するアドレスオペランドを有しそしてそれらのアドレスオペランドが介在するインストラクションにより変更されていないことを決定する。更に、コントロールロジックは、同じアドレスオペランドをもつ他の記憶インストラクションが所与の記憶インストラクションとロードインストラクションとの間に配置されていないことを決定する。換言すれば、所与の記憶インストラクションは、アドレスオペランドをもつ最も若い記憶インストラクションである。この決定に応答して、このロードインストラクションと所与の記憶インストラクションとの間のＲＡＷ依存性の指示がセットされ又はアサートされる。別の実施形態では、少なくともインストラクションタグ及びプログラムカウンタ値のような付加的な情報を比較し又はそれを使用して予想テーブルをインデックスする。コントロールロジックは、この早期パイプライン段において、このロードインストラクションを所与の記憶インストラクションとの間にＲＡＷ依存性が存在することを予想する。このＲＡＷ依存性の決定又は予想は、レジスタ再ネーミングと同じパイプライン段において行われる。或いは又、その決定又は予想は、レジスタ再ネーミングに使用される段より早期のパイプライン段において行われてもよい。このＲＡＷ依存性は、例えば、次の通りである。
【００２２】
ＡＤＤ            r7, r3, r5
ＳＴＯＲＥ        [r10+4], r7          // Address operands are r10 and 4.
ＭＯＶ            r12, r16
ＬＯＡＤ          r14, [r10+4]         // Address operands are r10 and 4.
ＳＵＢ            r2, r6, r14          // For r14, use forwarded data from
// store op's source operand, r7.
ＡＤＤ            r11, r14, r13        // For r14, use forwarded data from
// store op's source operand, r7.
【００２３】
この例では、インストラクション記憶とそれに続く１つ以上のソースオペランドの後に行先オペランドが最初にリストされる。レジスタは、“ｒ”とそれに続くレジスタ識別子という一般的な術語を使用する。例えば、レジスタ７は、“ｒ７”で表される。前記例におけるインストラクションは、擬似コード例及び言語不可理論であることを意味する。以上のことから明らかなように、ロードインストラクションは、記憶インストラクションと同じアドレスオペランドを有する。アドレスオペランド（ｒ１０）を変更するインストラクションは介在しない。従って、コントロールロジックは、ロードインストラクションが記憶インストラクションに対してＲＡＷ依存性を有することを決定する。他の実施形態では、インストラクションタグを比較する、等の予想資格付けが使用されるが、説明を容易にするために図示されていない。
【００２４】
ＲＡＷ依存性を決定又は予想するのに応答して、ロードインストラクションの行先オペランド識別子（ＩＤ）（ｒ１４）は、記憶インストラクションのソースオペランドＩＤ（ｒ７）に使用される同じ再ネームレジスタ識別子に再ネーミングされる。例えば、記憶インストラクションのソースオペランドＩＤ（ｒ７）が再ネームレジスタ識別子Ｐ４４に再ネーミングされた場合には、ロードインストラクションの行先オペランドＩＤ（ｒ１４）が同じ識別子（Ｐ４４）に再ネーミングされる。同様に、減算インストラクション及び最小加算インストラクションの各々に対するソースオペランドＩＤｒ１４は、同じ再ネームレジスタ識別子（Ｐ４４）に再ネーミングされる。
【００２５】
プロセッサコア１１２内のコントロールロジックは、ロードインストラクション及び後続インストラクションを順序付けして発行する。このケースでは、減算インストラクション及び最小加算インストラクションの各々は、ロードインストラクションの前、その間、又はその直後に発行されるが、ロードインストラクションは完了していない。レジスタ識別子ｒ６及びｒ１３のソースオペランドが使用可能である場合には、減算インストラクション及び最小加算インストラクションは、ロードインストラクションが発行される前であって、言うまでもなく完了する前に、発行される。これらのインストラクションは、記憶インストラクションのソースオペランドＩＤであるアーキテクチャー的ソースレジスタＩＤ  ｒ７から転送されるデータと共に発行される。レジスタ再ネーミングを使用することで、転送されるべきデータは、ソースアーキテクチャー的レジスタＩＤ  ｒ７に関連した再ネームレジスタ識別子Ｐ４４により識別された物理的レジスタに記憶される。それ故、ロードインストラクションは、ゼロサイクル動作となる。ロードインストラクションは、オンチップマルチレベルキャッシュハイアラーキー及びオフチップメモリのようなメモリにアクセスせずに完了となる。
【００２６】
前記ステップがとられそしてロードインストラクションがゼロサイクル動作に変換される場合には、インストラクションスループットがパイプラインに対して高くなる。インストラクションスループットが高くなるのは、ロードインストラクションより（プログラム順序で）若く且つそれに依存するインストラクションが、ロードインストラクションのためにデータキャッシュ、記憶バッファ又はオフチップメモリから検索されるデータを待機しないためである。むしろ、これらの若い依存性インストラクションは、物理的レジスタファイルからデータを受け取る。ロードインストラクションをゼロサイクルロード動作へ変換することに関して更なる詳細を続ける前に、コンピュータシステム１００のコンポーネントについて更に詳細に説明する。
【００２７】
対応するキャッシュメモリサブシステムに接続された１つ以上のプロセッサコアを含むのに加えて、マイクロプロセッサ１１０は、インターフェイスロジック１１８及びメモリコントローラ１２０も備えている。説明を容易にするため、他のロジック並びにインター及びイントラブロック通信は図示されていない。マイクロプロセッサ１１０のここに示す機能は、単一の集積回路に合体される。別の実施形態では、ここに示す機能は、コンピュータマザーボード上のチップセットに合体される。ある実施形態では、マイクロプロセッサ１１０は、デスクトップ又はサーバーに含まれる。更に別の実施形態では、ここに示す機能は、システムオンチップ（ＳＯＣ）上の他のプロセッサダイと共に半導体ダイに合体される。
【００２８】
プロセッサコア１１２は、先に述べた所与のＩＳＡによりインストラクションを実行するための回路を備えている。１つの実施形態では、プロセッサコア１１２は、所与のＩＳＡのインストラクションを処理するのに使用されるスーパースカラーマルチスレッドマイクロアーキテクチャーを含む。ある実施形態では、プロセッサコアは、汎用プロセッサコアである。種々の他の実施形態では、マイクロプロセッサ１１０は、１つ以上の他の特定のコア、例えば、デジタル信号プロセッサ（ＤＳＰ）、グラフィック処理ユニット（ＧＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、等を含む。
【００２９】
キャッシュメモリサブシステム１１６は、プロセッサコア１１２に対するメモリレイテンシーを減少する。キャッシュメモリサブシステム１１６により与えられる付加的なメモリで達成されるミスレートの減少は、プロセッサコア１１２とオフチップメモリとの間にレイテンシーギャップを隠す上で役立つ。プロセッサコア１１２とキャッシュメモリサブシステム１１６との間のレイテンシーは、オフチップメモリに対するレイテンシーより小さいが、このレイテンシーは、先に述べたように、ロードインストラクションがゼロサイクルロード動作へ変換される場合には、更に減少される。
【００３０】
要求されたブロックがキャッシュメモリサブシステム１１６に見つからない、等のキャッシュミスが生じた場合には、読み取り要求が発生されて、メモリコントローラ１２０へ送信される。メモリコントローラ１２０は、要求されたブロックに対応するアドレスを変換し、そしてメモリバス１２２を通して揮発性オフチップＤＲＡＭ１４０へ読み取り要求を送信する。メモリコントローラ１２０は、メモリチャンネルにインターフェイスし且つ対応プロトコルに従うコントロール回路を含む。更に、メモリコントローラ１２０は、メモリ要求をキューイングするための要求キューを含む。オフチップＤＲＡＭ１４０には、オフチップディスクメモリ１３０からのデータが充填される。オフチップディスクメモリ１３０は、不揮発性のランダムアクセス二次データ記憶装置をなす。１つの実施形態では、オフチップディスクメモリ１３０は、１つ以上のハードディスクドライブ（ＨＤＤ）を含む。別の実施形態では、オフチップディスクメモリ１３０は、ソリッドステートディスク（ＳＳＤ）を使用する。
【００３１】
説明上、コンピュータシステム１００には２つの周辺装置しか示されていないが、別の数の周辺装置がマイクロプロセッサ１１０に接続されてもよい。周辺装置１５０ａ−１５０ｂの１つ以上は、近代的なＴＶ、コンピュータモニタ、ラップトップ又は移動装置モニタ、等を含むディスプレイである。ディスプレイとマイクロプロセッサ１１０との間にはビデオグラフィックサブシステムが使用される。周辺装置１５０ａ−１５０ｂの１つ以上は、キーボード、マウス、プリンタ、モデム、等の、典型的に使用される入力／出力装置の１つである。
【００３２】
図２は、ゼロサイクルロード動作でスーパースカラー順序ずれ実行を遂行するプロセッサコア２００の１つの実施形態の一般化されたブロック図である。プロセッサコア２００は、インストラクションを処理するための多段パイプラインを使用する。ファンクション及びコントロールブロックが特定の順序で特定のパイプライン段に示されているが、他の組み合わせも考えられ、意図される。更に、ファンクション及びコントロールブロックが２つ以上のパイプライン段を占有することもある。ほとんどの場合には、説明を容易にするために各ファンクションブロックに対して単一のパイプライン段が示される。
【００３３】
インストラクションキャッシュ（ｉ−キャッシュ）２０４は、ソフトウェアアプリケーションのためのインストラクションを記憶する。アドレス選択ロジック２０２により搬送されるアドレスにより指示される１つ以上のインストラクションがｉ−キャッシュ２０４からフェッチされる。ｉ−キャッシュミスがない場合にはクロックサイクル当たり複数のインストラクションがｉ−キャッシュ２０４からフェッチされる。次フェッチプレディクタ２０６によりアドレスがインクリメントされる。次フェッチプレディクタ２０６及びその後のパイプライン段のコントロールフロー評価ロジック２１２の各々に分岐方向プレディクタ２０８が結合される。このプレディクタ２０８は、次の順次のインストラクションを実行することからインストラクションストリームのフローを変化させるインストラクションの情報を予想する。
【００３４】
デコードユニット２１０は、複数のフェッチされたインストラクションのｏｐｃｏｄｅをデコードする。或いは又、インストラクションは、マイクロｏｐへ分割される。ここで使用する用語「インストラクション」、「マイクロｏｐ」及び「動作」は、本発明がいずれの具現化も使用するアーキテクチャーに使用されるので、交換可能である。１つの実施形態において、コントロールフロー評価ブロック１１２は、アドレスセレクタ２０２においてインストラクションのフェッチを変更する。例えば、無条件分岐ｏｐｃｏｄｅに関連した絶対的アドレス値がアドレスセレクタ２０２へ送られる。
【００３５】
再ネームイントラグループ(intra-group)依存性検出ロジック２１４は、デコードユニット２１０によりデコードされたインストラクション間で依存性を見出す。インストラクションのイントラグループは、１つ以上のクロックサイクル又はパイプライン段からのデコードされたインストラクションを含む。読み取り後の書き込み（ＷＡＲ）、書き込み後の書き込み（ＷＡＷ）、及び書き込み後の読み取り（ＲＡＷ）のような依存性が検出される。インストラクション間の依存性を示す依存性ベクトルが発生される。
【００３６】
依存性検出ロジックは、メモリ依存性（ＭＤ）検出器２１６を含む。ある実施形態では、ＭＤ検出器２１６は、記憶対ロード（ＳＴＬ）メモリ依存性を決定する。これらの実施形態では、所与の記憶インストラクションに対してアドレスオペランドとして使用されるベースレジスタＩＤ及び即時値（オフセット値）を記憶するためにテーブルが使用される。更に、記憶インストラクションのためのソースオペランドレジスタＩＤが記憶される。（プログラム順序で）若いインストラクションについては、行先オペランドレジスタＩＤ、アドレスオペランドレジスタＩＤ、及び即時値が、テーブルに記憶された値と比較される。ＭＤ検出器２１６は、ある条件が満足されるとの決定に応答して若いロードインストラクションと所与の記憶インストラクションとの間にＳＴＬメモリ依存性が存在することを指示する。１つの条件は、若いロードインストラクションが、アドレスオペランドレジスタＩＤと、記憶インストラクションのアドレスオペランド値に一致するアドレスオペランド中間値とを有することである。第２の条件は、所与の記憶インストラクションに対してテーブルに記憶された値を変更するインストラクションが介在しないと決定されることである。第３の条件は、記憶インストラクションが、一致するアドレスオペランドをもつロードインストラクションより古くて最も若い記憶インストラクションであると決定されることである。ＭＤ検出器２１６は、ロードインストラクションと所与の記憶インストラクションとの間にＲＡＷ依存性が存在するとの指示を記憶する。
【００３７】
更に、ＭＤ検出器２１６は、ロードインストラクションの行先オペランドレジスタＩＤを、所与の記憶インストラクションのソースオペランドレジスタＩＤに使用される同じ再ネームレジスタ識別子で再ネーミングするための指示をレジスタ再ネームユニット２２０へ送信する。他の実施形態では、コンパイラーがコードを分析し、上述したステップを遂行する。若いロードインストラクションと所与の記憶インストラクションとの間にＲＡＷ依存性が存在することをコンパイラーが決定した場合には、コンパイラーは、少なくともＭＤ検出器２１６により検出されるべき指示をプログラムコードに挿入する。情報は、アサートビットと、所与の記憶インストラクションのソースオペランドレジスタＩＤとを含む。或いは又、情報は、アサートビットと、所与の記憶インストラクションを識別するのに使用されるプログラムカウンタ（ＰＣ）オフセットとを含む。他の情報が使用されてもよい。
【００３８】
更に別の実施形態では、ＭＤ検出器２１６は、ＳＴＬメモリ依存性のためのプレディクタを含む。そのような実施形態では、ＭＤ検出器２１６は、少なくともロード及び記憶インストラクションに関連したプログラムカウンタ（ＰＣ）値で１つ以上のテーブルをインデックスする。又、部分的アドレスタグ及び他のインストラクション識別情報を使用して、テーブルをインデックスしてもよい。又、ハッシュ関数の出力を使用して、飽和カウンタ又は他の予想情報を記憶する予想テーブルをインデックスしてもよい。ある実施形態では、ＭＤ検出器２１６は、介在するインストラクションにより変更されていないアドレスオペランドを決定する。他の実施形態では、ＭＤ検出器２１６は、飽和カウンタのような修正ロジックが予想ミスを考慮できるようにする。テーブルから読み出された情報は、投機的依存性を識別するのに使用される。投機的ＲＡＷメモリ依存性を決定するのに応答して、ＭＤ検出器２１６は、所与の記憶インストラクションと所与の後続ロードインストラクションとの間にＲＡＷ依存性が存在するとの指示を記憶する。更に、ＭＤ検出器２１６は、ロードインストラクションの行先オペランドレジスタＩＤを、所与の記憶インストラクションのソースオペランドレジスタＩＤに使用される同じ再ネームレジスタ識別子で再ネーミングするための指示をレジスタ再ネームユニット２２０へ送信する。更に別の実施形態では、ＳＴＬメモリ依存を見出すための前記方法及びメカニズムの組み合わせが使用される。
【００３９】
マッパー２１８は、得られる同時性、依存性チェーンの重大さ、及び通信ペナルティのようなファクタを使用して、分布されたハードウェアリソース間でインストラクションを分割する。ハードウェアがアーキテクチャー的レジスタ識別子を物理的レジスタ識別子で再ネーミングするとき、ハードウェアは、マッピングテーブルのようなデータ構造であるマッピングをマッパー２１８に記憶する。ここで使用するアーキテクチャー的レジスタ又は物理的レジスタのための識別子は、番号とも称される。それ故、アーキテクチャー的レジスタ識別子は、アーキテクチャー的レジスタ番号とも称される。同様に、物理的レジスタ識別子は、物理的レジスタバントとも称される。又、アーキテクチャー的レジスタ番号を再ネーミングするのに使用される物理的レジスタ番号は、再ネームレジスタ番号とも称される。
【００４０】
レジスタ再ネームユニット２２０は、再ネームコントロールロジック・アレイ２２２、及びレジスタ複写アレイ（ＲＤＡ）２２４を備えている。レジスタ再ネームユニット２２０は、インストラクション内の行先及びソースの両オペランドに使用されるアーキテクチャー的レジスタ識別子を再ネーミングするためにどの物理的レジスタ識別子を使用すべきか決定する。レジスタ再ネームユニットは、フリーリストアロケータ２３０又は再ネームコントロールロジック２２２内の再ネームマッピングテーブルから候補の物理的レジスタ識別子を選択する。種々の実施形態では、複写マッピングの指示を記憶するようにＲＤＡ２２４が構成される。複写マッピングは、ロード動作をゼロサイクルロード動作へ変換する間に使用される。
【００４１】
レジスタ再ネームユニット２２０は、ロードインストラクションはゼロサイクルロード動作へ変換される資格があるとの指示をＭＤ検出器２１６から受け取る。レジスタ再ネームユニット２２０は、ロードインストラクションの行先オペランドレジスタＩＤを、ロード動作が依存する記憶インストラクションのソースオペランドレジスタＩＤに使用される同じ再ネームレジスタ識別子に指定する。マッパー２１８は、再ネームレジスタ識別子に対する複数のマッピングを記憶する。更に、ＲＤＡ２２４は、再ネームレジスタ識別子の複写カウントを記憶する。例えば、初期のコード例では、再ネームレジスタ識別子Ｐ４４は、記憶インストラクションのソースオペランドレジスタＩＤ（ｒ７）及びロードインストラクションの行先オペランドレジスタＩＤ（ｒ１４）の両方に使用される。この複写カウントは、所与のアーキテクチャー的レジスタ識別子が同じ再ネームレジスタ識別子へマップされる回数を含む。
【００４２】
種々の実施形態において、複写カウントは、特定のアーキテクチャー的レジスタがマッピング時に再ネームレジスタ番号へ既にマッピングされているときには、マッピングについてインクリメントされない。ＲＤＡ２２４は、再ネームレジスタ番号及びそれに関連した複写カウントの両方を記憶する。１つの実施形態では、ＲＤＡは、比較的小さな、タグ付きの、完全連想構造として具現化される。ＲＤＡ２２４は、再ネームレジスタ番号及びそれに関連した複写カウントを記憶するための多数のエントリを有する。一例において、ＩＳＡの具現化は、１４４の物理的レジスタ番号を含み、従って、８ビットの物理的レジスタインデックスがＲＤＡのエントリに記憶されると共に、ＲＤＡにアクセスするのに使用される。１つの実施形態では、各複写カウントサイズは、５ビットである。それ故、所与の物理的レジスタ番号に対する最大複写数は、３１である。しかしながら、別の複写カウントサイズも考えられ選択される。
【００４３】
ＲＤＡ２２４は、プロセッサパイプラインにおけるインストラクションディスパッチの前又はその時に更新される。デコードされたロードインストラクションがゼロサイクルロード動作であることをＭＤ検出器２１６が決定したときには、関連記憶インストラクションのソースオペランドレジスタＩＤ及びロードインストラクションの行先オペランドレジスタＩＤの各々を再ネーミングするのに使用すべき物理的レジスタ番号についてエントリが既に存在するかどうか決定するためにＲＤＡ２２４がアクセスされる。エントリが存在する場合には、所与の再ネームレジスタ番号に現在マップされていない所与のアーキテクチャー的レジスタＩＤが所与の再ネームレジスタ番号にマップされるたびに、関連複写カウントがインクリメントされる。ＲＤＡにまだエントリが存在しない場合には、エントリが割り当てられ、そして関連複写カウントが２で開始される。
【００４４】
又、ＲＤＡ２２４は、プロセッサパイプラインにおけるコミットパイプライン段の間にも更新される。複写カウントは、インストラクションコミット中に所与のアーキテクチャー的レジスタに対して物理的なレジスタ識別子をフリーリストに返送する準備ができるたびにデクリメントされる。物理的なレジスタ識別子は、再ネームレジスタ識別子とも称される。物理的なレジスタ識別子は、物理的なレジスタ識別子に関連したマッピングテーブルのエントリがインストラクションコミットのために除去又は無効化されるのに応答してフリーリストへ返送される候補となる。１つの実施形態では、複写カウントが１に減少するのに応答して、複写カウント及び複写マッピングは、もはや記憶されない。
【００４５】
１つの実施形態では、所与の再ネームレジスタ識別子が関連インストラクションコミット中にフリーリストに返送される候補となり、そしてＲＤＡ２２４に記憶される関連複写情報がないのに応答して、再ネームレジスタ識別子がフリーリストへ返送される。別の実施形態では、所与の再ネームレジスタ識別子がフリーリストに返送される候補となり、そしてＲＤＡ２２４に記憶された複写カウントが１だけデクリメントされてゼロになるのに応答して、再ネームレジスタ識別子がフリーリストへ返送される。
【００４６】
１つの実施形態では、所与の再ネームレジスタ識別子がフリーリストに返送される候補となり、そして記憶された複写カウントがデクリメント後も依然１より大きいのに応答して、再ネームレジスタ識別子は、フリーリストへ返送されない。再ネームレジスタ識別子は、この最後のケースでは、依然、複数のアーキテクチャー的レジスタへの複写マッピングを有する。１つの実施形態では、ＲＤＡ２２４は、複写を追跡するためのエントリがないことを確かめるために各潜在的なゼロサイクルロード候補についてチェックされる。ＲＤＡ２２４内に割り当てのためのエントリがない場合には、それに対応するロードインストラクションは、ゼロサイクルロード動作へ変換されない。同様に、ゼロサイクルロード候補について割り当てられたエントリは存在するが、複写カウントが既に飽和した場合にも、ロードインストラクションは、ゼロサイクルロード動作へ変換されない。
【００４７】
ゼロサイクルロード動作については、データコンテンツが、記憶インストラクションソースオペランドのためのデータを記憶する物理的レジスタファイル内の物理的レジスタから、後続ロードインストラクションへ及び他のより若い従属インストラクションへ転送される。データは、データキャッシュ、記憶バッファ、又はオフチップメモリから読み取られない。より若い従属インストラクションは、データキャッシュ、記憶バッファ又はオフチップメモリからデータが読み取られるのを待機せずに発行される。
【００４８】
インストラクションがデコードされそして再ネームされた後に、それに関連するエントリがディスパッチキュー２４０に割り当てられる。インストラクション及びそれに関連した再ネーム識別子、プログラムカウンタ（ＰＣ）値、依存性ベクトル、完了のためのマーキング、等は、ディスパッチキュー２４０へ、その後、スケジューラ２５０へ送られる。実行コア２６０、等により、種々の例外が検出される。例えば、メモリアクセス、アドレス変換なし、等に対する保護例外が挙げられる。例外は、それに対応する例外取り扱いルーチンをマイクロコード２４２等により実行させる。
【００４９】
スケジューラ２５０は、インストラクションを、実行コア２６０で実行するためにスケジューリングする。オペランドが得られ且つハードウェアリソースも得られるときには、スケジューラ２５０から実行コア２６０内のファンクションユニットの１つへインストラクションが順序ずれ状態で発行される。スケジューラ２５０は、再ネーミングされた識別子をマッピングテーブルで変換した後に物理的レジスタファイル（図示せず）から、又はオペランドバイパスロジックから、そのソースオペランドを読み取る。ソースオペランドは、実行コア２６０に与えられる。実行コア２６０は、ロード及び記憶インストラクションに対してアドレスを分析する。更に、実行コア２６０は、複数の整数、浮動小数点及びブール演算の１つ以上を遂行する。
【００５０】
実行コア２６０は、ロード／記憶ユニットを含む。ロード／記憶ユニットは、データキャッシュ（図示せず）及び記憶バッファ２７２に直接的に又はリオーダーバッファ（ｒｏｂ）２７０を経て接続される。プロセッサ２００は、キャッシュアクセスを遂行するときに完全メモリ変換を遂行するコストを回避するためにｉ−キャッシュ２０４及びデータキャッシュの各々に対して変換ルックアサイドバッファ（ＴＬＢ）を含む。記憶バッファ２７２は、記憶インストラクションに対応するアドレスを記憶する。ｒｏｂ２７０は、実行コア２６０から結果を受け取る。更に、結果は、パイプラインに既にある従属インストラクションへ送られるデータとして手前のパイプライン段へバイパスされる。ｒｏｂ２７０は、インストラクションの順序正しいコミット及びリタイアを保証する。
【００５１】
図３は、ゼロサイクルロード動作を検出する方法３００の１つの実施形態の一般化されたフローチャートである。ブロック３０２において、プログラムインストラクションが処理される。インストラクションは、コンパイルされ、メモリからフェッチされ、デコードされ、そして実行される。デコード後に、所与のインストラクションが記憶インストラクションであると検出された場合には（条件ブロック３０４）、ブロック３０６において、少なくとも、アドレスオペランドベースレジスタＩＤ、アドレスオペランド即時値、及び記憶インストラクションのソースオペランドレジスタＩＤがバッファされる。これらの値は、所与のテーブルに記憶される。関連するプログラムカウンタ（ＰＣ）及び他の情報もバッファされる。１つの実施形態では、この情報は、メモリ依存性（ＭＤ）検出器内のテーブルにバッファされる。
【００５２】
ブロック３０８において、（プログラム順序で）後続のインストラクションの情報が、（プログラム順序で）手前の記憶インストラクションのバッファされた情報との潜在的な一致について監視される。比較のための情報は、少なくとも、後続インストラクションの行先オペランドレジスタＩＤと、後続ロードインストラクションのアドレスオペランドベースレジスタＩＤ及び即時値とを含む。コントロールロジックは、所与の記憶インストラクションに関連したレジスタＩＤと、後続インストラクションに関連したレジスタＩＤとの間の一致を検出する。レジスタＩＤは、オペランドを識別するのに使用されるアーキテクチャー的レジスタＩＤである。
【００５３】
記憶インストラクションのアドレスオペランドベースレジスタの変更は、即時値ベースの更新である。早期のコード例を使用して、ＡＤＤ  ｒ１０、ｒ１０、＃４のような加算インストラクションが記憶インストラクションに続く（プログラム順序で）。記号“＃”は、即時値データオペランドを指示するのに使用される。記憶インストラクションのアドレスオペランドベースレジスタｒ１０が変更される。しかしながら、それは、即時値ベースの変更である。アドレスオペランドベースレジスタｒ１０に対してロードインストラクションと記憶インストラクションとの間の介在インストラクションによる即時値ベースの変更以外の他の形式の変更がなされない場合には、即時値ベースの変更を考慮するようにテーブル内で調整が行われる。所与の記憶インストラクションのアドレスオペランドベースレジスタが変更されることが検出され（条件ブロック３１０）そして変更が即時値更新をベースとするものである（条件ブロック３１１）場合には、ブロック３１３において、所与の記憶インストラクションに対するテーブル内の特定の記憶値が更新される。例えば、記憶されたアドレスオペランド即時値が更新される。以上の例を使用して、所与の記憶インストラクションに対するテーブル内の記憶された即時値４が、テーブル内で、ＡＤＤインストラクションにより使用される即時値である４だけデクレメントされる。他の例では、アドレスオペランドベースレジスタが、インクリメントではなくデクリメントされ、そしてテーブル内に記憶された即時値が適宜にインクリメントされる。変更が即時値更新に基づくものでない場合には（条件ブロック３１１）、ブロック３１２において、所与の記憶インストラクションに対応するテーブルエントリ記憶値が無効とされる。その後に、方法３００のコントロールフローは、ブロックＡを通してブロック３０２へ戻る。
【００５４】
所与の記憶インストラクションのソースオペランドが変更されるべきであると検出され（条件ブロック３１４）そして記憶インストラクションがリタイアした（条件ブロック３１６）場合には、方法３００のコントロールフローがブロック３１２へ移動する。このケースを説明するために、記憶インストラクションのソースオペランドの変更及び競争条件を伴うメモリ依存性の別のコード例をここに示す。
【００５５】
ＡＤＤ            r7, r3, r5
ＳＴＯＲＥ        [r10+4], r7          // Address operands are r10 and 4.
ＡＤＤ            r19, r24, r18
ＡＤＤ            r7, r20, r21         // Store op source operand is
// modified.
ＬＯＡＤ          r14, [r10+4]         // Address operands are r10 and 4.
ＳＵＢ            r2, r6, r14          // For r14, use forwarded data from
// store op's source operand, r7.
ＡＤＤ            r7, r14, r13         // For r14, use forwarded data from
// store op's source operand, r7.
ＡＤＤ            r14, r22, r25        // The load op destination operand is
// overwritten. During commit stage,
// return physical register number
// shared by r7&r14 to the free list.
【００５６】
早期のコード例と同様に、前記例では、ロードインストラクションは、記憶インストラクションに対するメモリ依存性を有する。このケースでは、第３の加算インストラクションが記憶インストラクションのソースオペランド（ｒ７）を変更する。パイプラインにおいて、ソースオペランド（ｒ７）に関連した再ネームレジスタ識別子を複写としてマークするロードインストラクションと、同じ再ネームレジスタ識別子をコミットしてフリーリストへ返送させる第３の加算インストラクションとの間には、競争状態がある。ロードインストラクションがこの再ネームレジスタ識別子を複写とマークするときまでに、再ネームレジスタ識別子は、既に、フリーリストに向かって伝播する履歴ファイルにある。
【００５７】
前記ケースを取り扱う１つのオプションは、第３の加算インストラクションのような介在インストラクションを検出し、記憶インストラクションのソースオペランドを変更し、そしてそれに応答して、ロードインストラクションがゼロサイクルロード動作へ変換される資格を奪うことである。前記ケースを取り扱う別のオプションは、介在インストラクションが記憶インストラクションのソースオペランドを変更することを検出し、そしてそれに応答して、記憶インストラクションがリタイアしたかどうか決定することである。記憶インストラクションがリタイアしない場合には、介在インストラクションもリタイアしない。それ故、介在インストラクションは、記憶インストラクションのソースオペランドに関連した再ネームレジスタ識別子をまだフリーリストに返送していない。この再ネームレジスタ識別子の複写カウントがここで維持される。同様に、前記コード例における最後の加算インストラクションのためにロードインストラクションの行先オペランド（ｒ１４）について複写カウントがインクリメントされる。
【００５８】
方法３００に戻ると、所与の記憶インストラクションのソースオペランドが変更されることが検出され（条件ブロック３１４）そして記憶インストラクションがリタイアしない（条件ブロック３１６）場合には、ロードインストラクションが所与の記憶インストラクションに対するメモリ依存性を有するかどうか決定される。同様に、所与の記憶インストラクションのソースオペランドが変更されることが検出されない場合には（条件ブロック３１４）、ロードインストラクションが所与の記憶インストラクションに対してメモリ依存性を有するかどうか決定される。ある実施形態では、条件ブロック３１０、３１４、及び３１８の各々が同時に評価されることに注意されたい。例えば、コントロールロジック及びテーブルは、後続インストラクションに関連した入力を同時に受け取る。
【００５９】
１つの実施形態において、メモリ依存性（ＭＤ）検出器は、ロードインストラクションに関連した情報でアクセスされる。先に述べたように、ＭＤ検出器は、後続インストラクションと比較されるべき特定の記憶インストラクションのためのテーブル保持情報を含む。或いは又、ＭＤ検出器は、コンパイラーからのヒント情報を検出するためのコントロールロジックを含む。又、ＭＤ検出器は、ＳＴＬプレディクタも含む。更に、ＭＤ検出器は、これらの別の設計選択肢の組み合わせを含んでもよい。ＭＤ検出器にアクセスするのに応答して、所与の記憶インストラクション及び他の記憶インストラクションのための値を記憶するコントロールロジック及びテーブルは、両方とも、ロードインストラクションと所与の記憶インストラクションとの間にメモリ依存性が存在することを示す結果を発生する。例えば、１つの実施形態では、ロードインストラクション及び所与の記憶インストラクションの各々に対するアドレスオペランドベースレジスタＩＤ及び即時値が一致する。更に、記憶インストラクションは、一致するアドレスオペランドをもつロードインストラクションより古いが最も若い記憶インストラクションであることが決定される。ロードインストラクションが所与の記憶インストラクションに依存することが決定された場合には（条件ブロック３１８）、ブロック３２０において、ロードインストラクションは、ゼロサイクルロードインストラクションとして処理される。次に、ゼロサイクルロードインストラクションの処理を更に詳細に説明する。
【００６０】
図４は、ゼロサイクルロード動作を処理する方法４００の１つの実施形態の一般化されたフローチャートである。ブロック４０２において、所与のロードインストラクションは、（プログラム順序で）古い記憶インストラクションに依存すると決定される。所与のロードインストラクションは、ゼロサイクルロードインストラクションに変換される資格がある。先に述べたように、１つの条件は、若いロードインストラクションが、記憶インストラクションのアドレスオペランド値に一致するアドレスオペランドレジスタＩＤ及びアドレスオペランド即時値を有することである。第２の条件は、所与の記憶インストラクションに対してアクセステーブルに記憶されたアドレスオペランド及びソースオペランドのような値を変更する介在インストラクションがないと決定されることである。第３の条件は、記憶インストラクションが、一致するアドレスオペランドをもつロードインストラクションより古いが最も若い記憶インストラクションであると決定されることである。第４の条件は、使用可能な複写リソースの指示である。例えば、記憶インストラクションのソースオペランドレジスタＩＤの再ネームレジスタ番号を使用して、ＲＤＡ２２４のようなデータ構造をインデックスする。他の実施形態では、コンパイラーからのＳＴＬメモリ依存性プレディクタ及び／又はヒント情報を使用して、ロードインストラクションと所与の記憶インストラクションとの間のＲＡＷ依存性を指示する。
【００６１】
ＲＤＡ２２４におけるヒットは、ソース再ネームレジスタ識別子が既に複写されていることを指示する。ミスは、ソース再ネームレジスタ識別子がまだ複写されていないことを指示する。ソース再ネームレジスタ識別子がまだ複写されておらず且つＲＤＡ２２４がまだいっぱいでない場合には、ＲＤＡ２２４のエントリがソース再ネームレジスタ識別子について割り当てられる。ソース再ネームレジスタ識別子が既に複写されている場合には、ソース再ネームレジスタ識別子の複写カウントが所与のスレッシュホールドと比較される。１つの実施形態では、スレッシュホールドは、特定のカウントに対応する。関連複写カウントがスレッシュホールドに到達しない場合には、複写リソースを使用することができる。関連複写カウントがスレッシュホールドに到達する場合には、複写リソースを使用することができない。
【００６２】
複写リソースが使用できない場合には（条件ブロック４０４）、ブロック４０６において、ロードインストラクションの行先アーキテクチャー的レジスタが、フリーリストからの再ネームレジスタ識別子で再ネーミングされる。再ネーミングされた識別子、関連プログラムカウンタ（ＰＣ）値、依存性ベクトル、等は、ディスパッチキューへ送られ、その後、スケジューラへ送られる。ブロック４０８では、次に使用できるインストラクションが処理される。次に使用できるインストラクションは、前記ステップとパラレルに、又はその後のクロックサイクルに、処理される。
【００６３】
複写リソースが使用できない場合には（条件ブロック４０４）、ブロック４１０において、ロードインストラクションの行先オペランド識別子（ＩＤ）が、最も若いが古い依存性記憶インストラクションのソースオペランドに使用される再ネームレジスタＩＤで再ネーミングされる。ブロック４１２では、物理的レジスタの複写カウントが更新される。複写カウントは、選択された再ネームレジスタ識別子へ現在マップされていない所与のアーキテクチャー的レジスタ識別子がその再ネームレジスタ識別子へマップされるたびに、インクリメントされる。１つの実施形態では、複写カウントは、２の値で初期化される。
【００６４】
ロードインストラクション及び１つ以上の他のインストラクションに対する再ネームされた識別子は、ディスパッチキューへ送られ、その後に、スケジューラへ送られる。関連プログラムカウンタ（ＰＣ）値、依存性ベクトル、等も送られる。１つの実施形態では、ＲＡＷ依存性は確実なものとみなされ、そしてロードインストラクションは、完了とマークされる。例えば、方法３００で述べたＭＤ検出器のテーブルのアクセスは、確実性がないとみなされ、それ故、ロードインストラクションは、その後のパイプライン段によってそれ以上処理されない。他の実施形態では、ロードインストラクションと記憶インストラクションとの間のＲＡＷ依存性は、不確実性をもたないとはみなされない。それ故、ロードインストラクションは、完了とマークされず、その後のパイプライン段によって更に処理される。ブロック４１４では、完了とマークされないときにロードインストラクションを含む１つ以上のインストラクションがパイプラインに発行される。ブロック４１６では、記憶インストラクションとロードインストラクションとの間のメモリ依存性が検証される。例えば、分析されたアドレス及び他のインストラクション識別情報での記憶バッファへのアクセスが遂行される。
【００６５】
メモリ依存性が正しくないことが分かると（条件ブロック４１８）、ブロック４２０において、ロードインストラクション、及びロードインストラクションより（プログラム順序で）若いインストラクションは、パイプラインからフラッシュされる。次いで、ロードインストラクションが再生される。予想されたメモリ依存性が正しいと分かると（条件ブロック４１８）、ブロック４２２において、オンチップキャッシュハイアラーキー、記憶バッファ、又はオフチップメモリからソースオペランドに関連したデータを読み取ることなく、ロードインストラクションがパイプラインにおいてコミットパイプライン段へ進む。ロードインストラクションに依存する若いインストラクションは、それに対応する記憶インストラクションのソースオペランドに関連した物理的レジスタファイルから受け取られる転送データと共に続けられる。
【００６６】
図５は、ゼロサイクルロード動作を含むインストラクションをコミットする方法５００の１つの実施形態の一般化されたフローチャートである。説明上、この実施形態及び上述した方法３００及び４００の実施形態におけるステップは、逐次の順序で示されている。しかしながら、他の実施形態では、幾つかのステップが、図示された以外の順序で行われてもよく、又、幾つかのステップが同時に遂行されてもよく、又、幾つかのステップが他のステップと組み合わされてもよく、又、幾つかのステップが存在しなくてもよい。
【００６７】
ブロック５０２において、プログラムインストラクションがコミットされる。データ構造内のインストラクションの順序正しいウインドウを使用して、いつインストラクションをコミットし及びリタイアすべきか決定する。例えば、ｒｏｂ２７０は、データ構造として使用される。メモリインストラクションがコミットすべきと検出されるときには、関連再ネームレジスタ識別子が複写されるかどうか決定するためにチェックが行われる。１つの例において、行先及びソース物理的レジスタの各々に対する複写の状態を指示する関連複写フラグ又はフィールドは、インストラクションのための他の関連情報と共に記憶される。別の例では、行先及びソース再ネームレジスタ識別子の各々は、ＲＤＡ２２４のようなデータ構造をインデックスするのに使用される。ヒットは、それに対応する再ネームレジスタ識別子が既に複写されていることを指示する。ミスは、それに対応する再ネームレジスタ識別子がまだ複写されていないことを指示する。
【００６８】
所与の再ネームレジスタ識別子が複写されていない場合には（条件ブロック５０４）、ブロック５０６において、再ネームレジスタ識別子がフリーリストへ戻される。さもなければ、ブロック５０８において、対応する再ネームレジスタ識別子の複写カウントがデクリメントされる。一般的に、関連再ネームレジスタ識別子が、所与のアーキテクチャー的レジスタに対してフリーリストに返送される準備ができるたびに、複写カウントがデクリメントされる。再ネームレジスタ識別子は、マッピングテーブルからマッピングが除去されるのに応答してフリーリストへ返送される準備ができたと決定される。典型的に、再ネームレジスタ識別子は、マッピングテーブルからマッピングが除去されるのに応答してフリーリストへ返送される。しかしながら、ゼロサイクルロード動作のためにマッピングテーブルにマッピング複写がある状態では、ＲＤＡ２２４のようなデータ構造を、フリーリストへ返送する前に検査する。
【００６９】
複写カウントがデクリメントされた後、再ネームレジスタ識別子が依然複写される場合には（条件ブロック５１０）、ブロック５１２において、再ネームレジスタ識別子は、依然複写されたとマークされ、そしてフリーリストへ返送される。例えば、ＲＤＡ２２４のようなデータ構造における有効エントリが、１より大きなカウントと共に依然存在してもよい。
【００７０】
複写カウントがデクリメントされた後、再ネームレジスタ識別子がまだ複写されない場合には（条件ブロック５１０）、ブロック５１４において、再ネームレジスタ識別子は、複写されたではなく、マップされたとマークされる。例えば、ＲＤＡ２２４のようなデータ構造における関連エントリは、無効化される。或いは又、有効エントリが複写カウント１と共に依然存在してもよい。再ネームレジスタ識別子は、フリーリストへ返送されない。
【００７１】
以上、本発明の実施形態を詳細に説明したが、当業者であれば、前記開示を完全に理解したとき種々の変更や修正が明らかとなろう。そのような変更や修正は、全て、特許請求の範囲に包含されることが意図される。
【符号の説明】
【００７２】
１００：コンピュータシステム
１１０：マイクロプロセッサ
１１２：プロセッサコア
１１４：物理的レジスタ
１１６：キャッシュメモリサブシステム
１１８：インターフェイスロジック
１２０：メモリコントローラ
１２２：メモリバス
１３０：ディスクメモリ
１４０：ＤＲＡＭ
１５０ａ、ｂ：周辺装置
２０２：アドレスセレクト
２０４：ｉ−キャッシュ
６０６：次フェッチプレディクタ
２０８：分岐方向プレディクタ
２１０：デコードユニット
２１２：コントロールフロー評価
２１４：再ネームイントラグループ依存性検出
２１６：ＭＤ検出器
２１８：マッパー
２２０：レジスタ再ネームユニット
２２２：再ネームコントロールロジック・アレイ
２２４：ＲＤＡ
２３０：物理的レジスタ
２４０：ディスパッチキュー
２４２：マイクロコード
２５０：スケジューラ
２６０：実行コア
２７０：リオーダーバッファ
２７２：記憶バッファ
【図１】
2014002735.tif 000003
【図２】
2014002735.tif 000004
【図３】
2014002735.tif 000005
【図４】
2014002735.tif 000006
【図５】
2014002735.tif 000007
【外国語明細書】
2014002735000001.pdf