(57)【要約】【課題】読み込み／格納ユニット（ＬＳＵ）によってアウトオブオーダー（ＯｏＯ）ウィンドウから複数の命令を発行するための技術的解決策を提供する。【解決手段】この発行は、第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ）エントリをＥＲＴに作成することを含み、このＥＲＴエントリは、第１の実効アドレスを第１の実アドレスにマッピングする。さらに、この実行は、やはり前述の第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、シノニム検出テーブル（ＳＤＴ）エントリをＳＤＴに作成することであって、このＳＤＴエントリが、第２の実効アドレスをＥＲＴエントリにマッピングする、作成することと、第２の命令内の第２の実効アドレスを第１の実効アドレスに置き換えることによって第２の命令を再開することとを含む。【選択図】図１
2020536310.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の命令を実行するための処理ユニットであって、前記処理ユニットは、
メモリとレジスタの間でデータを変換するための読み込み／格納ユニット（ＬＳＵ）を備えており、前記ＬＳＵは、アウトオブオーダー（ＯｏＯ）ウィンドウ内の複数の命令を実行するように構成されており、前記実行することは、
第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ）エントリをＥＲＴに作成することであって、前記ＥＲＴエントリが、前記第１の実効アドレスを前記第１の実アドレスにマッピングする、前記作成することと、
やはり前記第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、
シノニム検出テーブル（ＳＤＴ）エントリをＳＤＴに作成することであって、前記ＳＤＴエントリが前記第２の実効アドレスを前記ＥＲＴエントリにマッピングする、前記作成することと、
前記第２の命令内の前記第２の実効アドレスを前記第１の実効アドレスに置き換えることによって前記第２の命令を再開することと
を含んでいる、処理ユニット。
【請求項２】
やはり前記第１の実アドレスに対応する前記第２の実効アドレスに応答して、
前記第１の命令に関連付けられた第１のページ・サイズを、前記第２の命令に関連付けられた第２のページ・サイズと比較し、
前記第１のページ・サイズが前記第２のページ・サイズより大きいということに応答して、前記第２の実効アドレスを前記ＥＲＴにマッピングする前記ＳＤＴエントリが作成される、請求項１に記載の処理ユニット。
【請求項３】
前記第１のページ・サイズが前記第２のページ・サイズより小さいということに応答して、
前記第１の実効アドレスと前記第１の実アドレスの間の前記マッピングを前記第２の実効アドレスと前記第１の実アドレスの間のマッピングに置き換えることによって、前記ＥＲＴエントリを変更する、請求項２に記載の処理ユニット。
【請求項４】
前記第１のページ・サイズが前記第２のページ・サイズより小さいということにさらに応答して、
前記第１の実効アドレスを前記ＥＲＴエントリにマッピングする前記ＳＤＴエントリを作成する、請求項３に記載の処理ユニット。
【請求項５】
前記ＳＤＴエントリが、前記第１の命令が開始されるスレッドのスレッド識別子と、前記第１の命令の前記実効アドレスと、前記第１の命令のページ・サイズと、前記第１の命令の再開実効アドレスと、前記対応するＥＲＴエントリのＥＲＴエントリ識別子とを含んでいる、請求項１に記載の処理ユニット。
【請求項６】
前記第１の命令が、読み込み命令および格納命令から成る命令のグループからの命令である、請求項１に記載の処理ユニット。
【請求項７】
前記第１の実効アドレスを使用して開始された命令の数を示すようにカウンタが維持され、前記カウンタが所定のしきい値を超えることに応答して、前記第１の実効アドレスに対応する前記ＥＲＴエントリを無効化する、請求項１に記載の処理ユニット。
【請求項８】
処理ユニットによって１つまたは複数のアウトオブオーダー命令を実行するためのコンピュータ実装方法であって、前記方法は、
読み込み／格納ユニット（ＬＳＵ）によってアウトオブオーダー（ＯｏＯ）ウィンドウから複数の命令を発行することを含んでおり、前記発行することが、
第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ）エントリをＥＲＴに作成することであって、前記ＥＲＴエントリが、前記第１の実効アドレスを前記第１の実アドレスにマッピングする、前記作成することと、
やはり前記第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、
シノニム検出テーブル（ＳＤＴ）エントリをＳＤＴに作成することであって、前記ＳＤＴエントリが前記第２の実効アドレスを前記ＥＲＴエントリにマッピングする、前記作成することと、
前記第２の命令内の前記第２の実効アドレスを前記第１の実効アドレスに置き換えることによって前記第２の命令を再開することと
を含んでいる、コンピュータ実装方法。
【請求項９】
やはり前記第１の実アドレスに対応する前記第２の実効アドレスに応答して、
前記第１の命令に関連付けられた第１のページ・サイズを、前記第２の命令に関連付けられた第２のページ・サイズと比較し、
前記第１のページ・サイズが前記第２のページ・サイズより大きいということに応答して、前記第２の実効アドレスを前記ＥＲＴエントリにマッピングする前記ＳＤＴエントリが作成される、請求項８に記載のコンピュータ実装方法。
【請求項１０】
前記第１のページ・サイズが前記第２のページ・サイズより小さいということに応答して、
前記第１の実効アドレスと前記第１の実アドレスの間の前記マッピングを前記第２の実効アドレスと前記第１の実アドレスの間のマッピングに置き換えることによって、前記ＥＲＴエントリを変更する、請求項９に記載のコンピュータ実装方法。
【請求項１１】
前記第１のページ・サイズが前記第２のページ・サイズより小さいということに応答して、
前記第１の実効アドレスを前記ＥＲＴエントリにマッピングする前記ＳＤＴエントリを作成する、請求項１０に記載のコンピュータ実装方法。
【請求項１２】
前記ＳＤＴエントリが、前記第１の命令が開始されるスレッドのスレッド識別子と、前記第１の命令の前記実効アドレスと、前記第１の命令のページ・サイズと、前記第１の命令の再開実効アドレスと、前記対応するＥＲＴエントリのＥＲＴエントリ識別子とを含んでいる、請求項８に記載のコンピュータ実装方法。
【請求項１３】
前記第１の命令が、読み込み命令および格納命令から成る命令のグループからの命令である、請求項８に記載のコンピュータ実装方法。
【請求項１４】
前記第１の実効アドレスを使用して開始された命令の数を示すようにカウンタが維持され、前記カウンタが所定のしきい値を超えることに応答して、前記第１の実効アドレスに対応する前記ＥＲＴエントリを無効化する、請求項８に記載のコンピュータ実装方法。
【請求項１５】
プログラム命令が具現化されているコンピュータ可読記憶媒体を備えているコンピュータ・プログラム製品であって、前記プログラム命令は、プロセッサに、
読み込み／格納ユニット（ＬＳＵ）によってアウトオブオーダー（ＯｏＯ）ウィンドウから複数の命令を発行すること
を含んでいる動作を実行させるように前記プロセッサによって実行可能であり、前記複数の命令は、
第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ）エントリをＥＲＴに作成することであって、前記ＥＲＴエントリが、前記第１の実効アドレスを前記第１の実アドレスにマッピングする、前記作成することと、
やはり前記第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、
シノニム検出テーブル（ＳＤＴ）エントリをＳＤＴに作成することであって、前記ＳＤＴエントリが前記第２の実効アドレスを前記ＥＲＴエントリにマッピングする、前記作成することと、
前記第２の命令内の前記第２の実効アドレスを前記第１の実効アドレスに置き換えることによって前記第２の命令を再開することと
によって発行される、コンピュータ・プログラム製品。
【請求項１６】
やはり前記第１の実アドレスに対応する前記第２の実効アドレスに応答して、
前記第１の命令に関連付けられた第１のページ・サイズを、前記第２の命令に関連付けられた第２のページ・サイズと比較し、
前記第１のページ・サイズが前記第２のページ・サイズより大きいということに応答して、前記第２の実効アドレスを前記ＥＲＴエントリにマッピングする前記ＳＤＴエントリが作成される、請求項１５に記載のコンピュータ・プログラム製品。
【請求項１７】
前記第１のページ・サイズが前記第２のページ・サイズより小さいということに応答して、
前記第１の実効アドレスと前記第１の実アドレスの間の前記マッピングを前記第２の実効アドレスと前記第１の実アドレスの間のマッピングに置き換えることによって、前記ＥＲＴエントリを変更する、請求項１６に記載のコンピュータ・プログラム製品。
【請求項１８】
前記第１のページ・サイズが前記第２のページ・サイズより小さいということに応答して、
前記第１の実効アドレスを前記ＥＲＴエントリにマッピングする前記ＳＤＴエントリを作成する、請求項１７に記載のコンピュータ・プログラム製品。
【請求項１９】
前記ＳＤＴエントリが、前記第１の命令が開始されるスレッドのスレッド識別子と、前記第１の命令の前記実効アドレスと、前記第１の命令のページ・サイズと、前記第１の命令の再開実効アドレスと、前記対応するＥＲＴエントリのＥＲＴエントリ識別子とを含んでいる、請求項１５に記載のコンピュータ・プログラム製品。
【請求項２０】
前記第１の命令が、読み込み命令および格納命令から成る命令のグループからの命令である、請求項１５に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、アウトオブオーダー（ＯｏＯ：out-of-order）プロセッサに関し、より詳細には、アドレス変換なしで動作する読み込み／格納ユニットにおいてシノニム検出テーブル（ＳＤＴ：synonym detection table）を使用して実効アドレスのシノニムを処理することに関する。
【背景技術】
【０００２】
ＯｏＯプロセッサでは、命令順序付けユニット（ＩＳＵ：instructionsequencing unit）が、命令をさまざまな発行キューにディスパッチし、ＯｏＯ実行のサポートにおいてレジスタ名を変更し、さまざまな発行キューから実行パイプラインに命令を発行し、実行された命令を完了し、例外条件を処理する。レジスタ名の変更は、通常、命令が各発行キューに配置される前に、ＩＳＵ内のマッパー論理によって実行される。ＩＳＵは、命令間の依存関係を追跡するための依存関係行列を含んでいる１つまたは複数の発行キューを含む。依存関係行列は、通常、発行キュー内の命令ごとに１行および１列を含む。
【０００３】
中央処理装置（ＣＰＵ）設計の領域では、特にＯｏＯプロセッサに関して、不正な計算結果につながる可能性があるため、後続のクロック・サイクル内で次の命令を実行できない場合に、ＣＰＵマイクロアーキテクチャにおける命令パイプラインに伴うハザードが技術的課題をもたらす。典型的なハザードは、データ・ハザード、構造ハザード、および制御フロー・ハザード（分岐ハザード）を含む。データ・ハザードは、データ依存性を示す命令が、パイプライン内の異なる段（例えば、書き込み後の読み取り（ＲＡＷ：read after write）、読み取り後の書き込み（ＷＡＲ：write afterread）、および書き込み後の書き込み（ＷＡＷ：write after write））でデータを変更する場合に、発生する。構造ハザードは、プロセッサのハードウェアの一部が同時に２つ以上の命令によって必要とされる場合、例えば、命令がメモリから取り出されるフェッチ段と、データがメモリに書き込まれるか、またはメモリから読み取られるか、あるいはその両方が実行されるメモリ段との両方において、メモリ・ユニットがアクセスされている場合に、発生する。さらに、分岐ハザード（制御ハザードとも呼ばれる）は、プロセッサによって実行されているコンピュータ・プログラム内の分岐に伴って発生する。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“Power4 System Microarchitecture” by J. M. Tendler et al., IBM Journal of Research and Development,Volume 46, Number 1, January 2002, pp. 5-25
【発明の概要】
【発明が解決しようとする課題】
【０００５】
読み込み／格納ユニット（ＬＳＵ）によってアウトオブオーダー（ＯｏＯ）ウィンドウから複数の命令を発行するための技術的解決策を提供する。
【課題を解決するための手段】
【０００６】
本発明の実施形態は、アウトオブオーダー・プロセッサにおいて実効アドレスに基づく読み込み／格納ユニットを実装するための方法、システム、およびコンピュータ・プログラム製品を含む。１つまたは複数の命令を実行するための処理ユニットの非限定的な例は、メモリとレジスタの間でデータを転送するための読み込み／格納ユニット（ＬＳＵ：load-store unit）を含む。ＬＳＵは、アウトオブオーダー（ＯｏＯ）ウィンドウ内の複数の命令を実行する。この実行は、第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ：effective real table）エントリをＥＲＴに作成することを含み、このＥＲＴエントリは、第１の実効アドレスを第１の実アドレスにマッピングする。さらに、この実行は、やはり前述の第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、シノニム検出テーブル（ＳＤＴ：synonym detection table）エントリをＳＤＴに作成することであって、このＳＤＴエントリが、第２の実効アドレスをＥＲＴエントリにマッピングする、作成することと、第２の命令内の第２の実効アドレスを第１の実効アドレスに置き換えることによって第２の命令を再開することとを含む。
【０００７】
本発明の１つまたは複数の実施形態によれば、処理ユニットによって１つまたは複数のアウトオブオーダー命令を実行するための例示的なコンピュータ実装方法は、読み込み／格納ユニット（ＬＳＵ）によってアウトオブオーダー（ＯｏＯ）ウィンドウから複数の命令を発行または実行することを含む。発行は、第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ）エントリをＥＲＴに作成することを含み、このＥＲＴエントリは、第１の実効アドレスを第１の実アドレスにマッピングする。さらに、この実行は、やはり前述の第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、シノニム検出テーブル（ＳＤＴ）エントリをＳＤＴに作成することであって、このＳＤＴエントリが、第２の実効アドレスをＥＲＴエントリにマッピングする、作成することと、第２の命令内の第２の実効アドレスを第１の実効アドレスに置き換えることによって第２の命令を再開することとを含む。
【０００８】
１つまたは複数の実施形態によれば、コンピュータ・プログラム製品が、プログラム命令が具現化されているコンピュータ可読記憶媒体を含み、それらのプログラム命令は、処理ユニットに動作を実行させるために、処理ユニットによって実行可能である。それらの動作は、読み込み／格納ユニット（ＬＳＵ）によってアウトオブオーダー（ＯｏＯ）ウィンドウから複数の命令を発行または実行することを含む。発行は、第１の実アドレスに対応する第１の実効アドレスが第１の命令によって使用されているということの決定に応答して、実効実テーブル（ＥＲＴ）エントリをＥＲＴに作成することを含み、このＥＲＴエントリは、第１の実効アドレスを第１の実アドレスにマッピングする。さらに、この実行は、やはり前述の第１の実アドレスに対応する第２の実効アドレスである実効アドレスのシノニムが第２の命令によって使用されているということの決定に応答して、シノニム検出テーブル（ＳＤＴ）エントリをＳＤＴに作成することであって、このＳＤＴエントリが、第２の実効アドレスをＥＲＴエントリにマッピングする、作成することと、第２の命令内の第２の実効アドレスを第１の実効アドレスに置き換えることによって第２の命令を再開することとを含む。
【０００９】
その他の特徴および利点が、本発明の手法によって実現される。本発明のその他の実施形態および態様は、本明細書において詳細に説明され、請求される発明の一部と見なされる。本発明を利点および特徴と共によく理解するために、説明および図面を参照されたい。
【００１０】
本明細書に記載された専有権の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の各実施形態の前述およびその他の特徴と利点は、添付の図面と共に行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１１】
【図１】本発明の１つまたは複数の実施形態に従う、アウトオブオーダー（ＯｏＯ）プロセッサ内に実効アドレスに基づく読み込み／格納ユニットを含んでいるシステムのブロック図である。
【図２】本発明の１つまたは複数の実施形態に従う、実効アドレス・ディレクトリ（ＥＡＤ：effectiveaddress directory）およびこのＥＡＤを利用するための関連するメカニズムが実装される、ＯｏＯプロセッサのプロセッサ・アーキテクチャの例示的なブロック図である。
【図３】本発明の１つまたは複数の実施形態に従うプロセッシング・コアの読み込み／格納ユニット（ＬＳＵ）を示す図である。
【図４】１つの実施形態例に従う実効アドレス・ディレクトリ（ＥＡＤ）構造（Ｌ１キャッシュ）の例示的なブロックである。
【図５】１つの実施形態例に従う実効実テーブル（ＥＲＴ）構造の例示的なブロックである。
【図６】本発明の１つまたは複数の実施形態に従う、ＬＳＵによって命令を実行するためにメモリにアクセスするための例示的な方法のフローチャートである。
【図７】本発明の１つまたは複数の実施形態に従う、ＥＲＴを再度読み込むための方法のフローチャートである。
【図８】本発明の１つまたは複数の実施形態に従うシノニム検出テーブル（ＳＤＴ：synonymdetection table）の例示的な構造を示す図である。
【図９】本発明の１つまたは複数の実施形態に従う、ＥＲＴおよびＳＤＴ  ＥＡの交換を実行するための方法のフローチャートである。
【図１０】本発明の１つまたは複数の実施形態の一部または全部の態様を実装するためのコンピュータ・システムのブロック図である。
【発明を実施するための形態】
【００１２】
本明細書において示される図は、実例である。本発明の思想から逸脱することなく、本明細書に記載された図または動作の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語およびその変形は、２つの要素間に通信経路が存在することを表しており、それらの要素間に要素／接続が介在しない要素間の直接的接続を意味していない。これらのすべての変形は、本明細書の一部であると見なされる。
【００１３】
本明細書に記載された本発明の１つまたは複数の実施形態は、ＯｏＯプロセッサ内の実効実アドレス・テーブルのエントリの動的削除によって、実効アドレス（ＥＡ：effective address）に基づく読み込み／格納ユニット（ＬＳＵ）をアウトオブオーダー（ＯｏＯ）プロセッサに提供する。本明細書に記載された技術的解決策は、チップ面積の削減を促進するために、およびさらに、ＯｏＯプロセッサのタイミングを改善するために、コンポーネントの中でも特に、実効実テーブル（ＥＲＴ：effective real table）およびシノニム検出テーブル（ＳＤＴ：synonymdetection table）と共に実効アドレス・ディレクトリ（ＥＡＤ）を使用する。
【００１４】
前述したように、最新のプロセッサのＯｏＯの性質に起因して、同じ実アドレス（ＲＡ：realaddress）への古い格納命令の前に実行するために、より新しい読み込み命令が選択されることがある。同じＲＡへの古い格納命令の前により新しい読み込み命令が実行された場合、より新しい読み込み命令が古いデータを返すため、プログラムの一貫性を回復するには、プロセッサのパイプライン内の命令がパイプラインからフラッシュされ、再フェッチされなければならない。通常、他の独立した命令を実行することができ、プロセッサのパイプラインから不必要にフラッシュしなくてよいように、同じＲＡへのより古い格納命令が実行されるまで、より新しい読み込み命令を遅延させるのが望ましい。同じＲＡへの古い格納命令の前のより新しい読み込み命令の実行に起因するプロセッサのパイプラインのフラッシュを減らすステップは、同じＲＡに対する、プロセッサのパイプラインのフラッシュが必要になるようにＯｏＯで実行される、読み込み／格納シーケンスを識別することである。代替または追加として、読み込み順序変更キューからの古い読み込み命令およびその後のすべての命令が、読み込み順序変更キューから、または命令フェッチ・ユニット（ＩＦＵ：instruction fetching unit）からフラッシュされる。命令をフラッシュすることは、（命令の適切な識別子を含んでいる）フラッシュ・メッセージをＩＦＵに送信することを含む。
【００１５】
ほとんどの最新のコンピューティング・デバイスは、仮想メモリをサポートする。仮想メモリは、実際には物理メモリが断片化しているときに、および物理メモリがディスク・ストレージにあふれているときにも、連続的な作業メモリまたはアドレス空間が存在するという印象をアプリケーション・プログラムに与える技術である。基本的に、コンピューティング・デバイスのメモリの見え方がアプリケーション・プログラムに提供され、アプリケーションは、アプリケーションから見えるＥＡ空間内のＥＡを使用して、連続的に見えるメモリにアクセスし、その後、この実効アドレスが、アクセス動作を実際に実行するために、実際の物理メモリまたはストレージ・デバイスの物理アドレスに変換される。ＥＡは、動作を発行する実体（例えば、アプリケーション、プロセス、スレッド、割り込みハンドラ、カーネル・コンポーネントなど）の視点から動作によってアクセスされるメモリ位置を指定するために使用される値である。
【００１６】
すなわち、コンピューティング・デバイスが仮想メモリの概念をサポートしない場合、ＥＡおよび物理アドレスは１つであり、同じである。しかし、コンピューティング・デバイスが仮想メモリをサポートする場合、アプリケーションによってサブミットされる特定の動作のＥＡは、コンピューティング・デバイスのメモリ・マッピング・ユニットによって、動作が実行される物理メモリまたはストレージ・デバイス内の位置を指定する物理アドレスに変換される。
【００１７】
さらに、最新のコンピューティング・デバイスでは、コンピューティング・デバイスのプロセッサが、一連のデータ処理要素を含んでいるプロセッサ命令パイプラインを使用して、実体（例えば、アプリケーション、プロセスなど）によってサブミットされた命令（動作）を処理する。命令パイプラインは、コンピュータ命令の処理を、各ステップの最後でストレージを使用する一連のステップに分割することによって、命令スループットを増加させる技術である。命令パイプラインは、コンピューティング・デバイスの制御回路が、最も遅いステップの処理速度で命令をプロセッサ命令パイプラインに発行するのを容易にし、この処理速度は、すべてのステップを同時に実行するために必要な時間よりも非常に高速である。命令パイプラインを使用するプロセッサ（すなわち、パイプライン型プロセッサ）は、別々のジョブに対して半ば独立して動作できる段に内部で構造化される。各段は、パイプラインの最後の段まで各段の出力が別の段に供給されるように構造化され、一連のチェーン内の次の段に接続される。
【００１８】
そのようなパイプライン型プロセッサは、インオーダー・パイプライン型プロセッサまたはアウトオブオーダー・パイプライン型プロセッサの形態を取ってよい。インオーダー・パイプライン型プロセッサの場合、データが、パイプラインの特定の段で処理される命令に使用されない場合に、そのデータが使用可能になるまで、パイプラインを介した命令の実行が停止されるように、命令が順序通りに実行される。一方、ＯｏＯパイプライン型プロセッサは、動作を実行するために必要なデータを使用できないときに発生する停止をプロセッサが回避できるようにする。ＯｏＯプロセッサの命令パイプラインは、処理される準備ができている他の命令で時間の「スロット」を埋め、その後、パイプラインの最後で結果を並べ替え、命令が順序通りに実行されたように見えるようにすることによって、それらの停止を防ぐ。元のコンピュータ・コード内で命令が順序付けられる方法はプログラム順序と呼ばれ、一方、プロセッサでは、命令がデータ順序（すなわち、データおよびオペランドがプロセッサのレジスタ内で使用可能になる順序）で処理される。
【００１９】
最新のプロセッサ命令パイプラインは、命令が命令パイプラインを通って流れるときに、命令のＥＡを追跡する。命令の処理が例外の取得をもたらすか、命令が前の状態をフラッシュするか、命令が現在のメモリ位置と相対的な新しいメモリ位置に分岐するか、または命令の実行が完了するときに、常にこのＥＡが利用されるため、命令のＥＡを追跡することは重要である。
【００２０】
命令のＥＡを追跡することは、プロセッサのチップ面積、電力消費などの観点で、費用がかかる。これは、これらのＥＡが大きいサイズ（例えば、６４ビット）を有しており、最新のプロセッサ命令パイプラインが深く（すなわち、多くの段を含んでおり）、プロセッサ命令パイプラインの命令フェッチ段からプロセッサ命令パイプラインの完了段までの命令の存続期間が非常に長くなることを引き起こすためである。高度にマルチスレッド化されたＯｏＯプロセッサ（すなわち、ＯｏＯの方法で複数のスレッドから命令を実行するプロセッサ）では、異なるアドレス範囲からの膨大な数の命令が同時に処理することができる（すなわち、「インフライト」である）ため、この費用がさらに増えることがある。
【００２１】
１つまたは複数の例では、コンピューティング・デバイスは、パイプライン・ラッチ、分岐情報キュー（ＢＩＱ：branch information queue）、およびグローバル完了テーブル（ＧＣＴ：global completion table）の組み合わせを使用して、命令のＥＡを追跡する。命令のグループのベースＥＡが、命令シーケンサ・ユニット（ＩＳＵ：instruction sequencer unit）のＧＣＴ内に蓄積されて追跡できるようになるまで、ラッチを使用してパイプラインの前端から転送される。このデータを格納するために必要なラッチの数は、おおよそ、パイプラインのフェッチ段とディスパッチ段の間のパイプラインの段数になる。これらのラッチは、これらの段の間に通常はＥＡが不要であるため、無駄である。このデータは、命令がパイプラインを通って流れるときに命令グループと共に「付き合いで参加している」単なるペイロード・データである。加えて、この方法は、分岐命令がＢＩＱとＧＣＴの両方にＥＡを含むため、二重の格納につながる。
【００２２】
したがって、ＧＣＴのみにおいてＥＡを追跡することによって、そのような非効率性を取り除くコンピューティング・デバイスが開発された。例えば、それらの新しいコンピューティング・デバイス（命令シーケンサ・ユニット）は、フェッチ時にエントリをＧＣＴに作成する。ＥＡは、この時点でＧＣＴに読み込まれ、その後、命令が完了したときに削除される。これによって、装置全体で、多くのパイプライン・ラッチを取り除く。アドレス線の数と同じくらいの長さの完全なＥＡ（例えば、６４ビットＥＡ）の代わりに、小さいタグが、パイプラインを通る命令グループと共に運ばれる。このタグは、この命令グループのベースＥＡを保持するＧＣＴ内のエントリを指し示す。分岐が、発行されたときに、ＥＡをＧＣＴから直接取得できるため、ＢＩＱ内のアドレスの格納が不要になる。そのような手法は、面積効率を改善するが、ＯｏＯプロセッサには適用できない。さらに、それらの手法は、プログラム順序に従わないで着信するアドレス要求を処理するための十分な情報を欠いている。加えて、それらの手法は、複数のまとまりのないアドレス範囲から形成されていることがある命令グループを追跡する能力を欠いているため、ＯｏＯ実行に必要なディスパッチおよび完了の帯域幅をサポートできない。従来、そのようなメカニズムは、単一のアドレス範囲からの命令グループのみをサポートしていたため、ＯｏＯに実行するために使用できる命令の数が著しく減少する可能性がある。さらに、ＥＡに対応するＲＡ（またはその逆）などの、対応するアドレスを検索するために、連想メモリ（ＣＡＭ：content addressable memory）が使用される。ＣＡＭは、専用比較回路を使用して、単一クロック・サイクルでのルックアップ・テーブル機能を実装する。ＣＡＭの機能全体は、検索語を受け取って、一致するメモリ位置を返すことである。しかし、そのようなＣＡＭは、チップ面積を必要とし、そのような検索のための電力を消費する。
【００２３】
さらに、ＥＡから対応するＲＡへのそのような変換は、通常、プロセッサに関連付けられたメモリ・ネストの第２のレベルで実行される。本明細書において使用されるとき、メモリ・ネストという用語は、データを格納するためにプロセッサによって使用され得るさまざまな種類のストレージを指す。一般に、メモリ・ネストは、物理メモリとキャッシュの階層を含む。一般に、メモリ・ネストのレベルが増えるにつれて、プロセッサからデータまでの距離が増え、プロセッサがデータを取り出すためのアクセス待ち時間も増える。したがって、ＥＡからＲＡへの変換は、プロセッサの実行速度を遅くする。
【００２４】
本明細書に記載された技術的解決策の実施形態例は、前述したＧＣＴの解決策の面積効率を有するだけでなく、性能を抑制せずに発行幅の広いＯｏＯパイプラインもサポートできる、実効アドレス・ディレクトリ（ＥＡＤ）、実効実テーブル（ＥＲＴ）、およびシノニム検出テーブル（ＳＤＴ：synonym detection table）を提供することによって、これらの手法を改善する。本明細書に記載された技術的解決策は、プロセッサがアウトオブオーダー（ＯｏＯ）ウィンドウ内でＥＡのシノニムを避けることができる限り、プロセッサがＥＡのみを使用して実行するのをさらに容易にする。ＯｏＯウィンドウは、プロセッサの命令パイプライン内の命令のセットである。ＯｏＯウィンドウ内のＥＡのシノニムを防ぐことによって、プロセッサがＯｏＯウィンドウ内のＥＡの変換を回避することができるため、プロセッサは、アドレス変換のためのチップ面積および電力消費を削減する。
【００２５】
言い換えると、本明細書に記載された技術的解決策は、ＯｏＯウィンドウ内のＥＡの別名化を規制し、読み込み／格納ポートに関する変換データ構造およびハードウェアを縮小することによって、技術的問題に対処する。したがって、本明細書に記載された技術的解決策は、１つのアドレス（ＥＡ）のみを追跡することによって、チップ面積の削減を促進する。さらに、これらの技術的解決策は、ＯｏＯプロセッサが分割された読み込み／格納キューを使用して２読み込み／２格納モード（2 load and 2 store mode）で実行することを容易にし、通常はアドレス変換に使用されるＣＡＭポートをさらに削減する。
【００２６】
例えば、ＯｏＯで命令を発行して実行できるプロセッサは、格納命令の前に読み込み命令が実行されることを許可することがある。より新しい読み込み命令の実アドレス（ＲＡ）がより古い格納命令のＲＡと重複しないということを仮定すると、より新しい読み込み命令およびより古い格納命令のＯｏＯ実行は、性能上の利点を提供することができる。標準的なプログラムでは、より新しい読み込み命令のＲＡが（より新しい読み込み命令の後に実行される）より古い格納命令のＲＡと重複する可能性は、相対的に低い。知られているように、格納命令のＲＡが、読み込み／格納ユニット（ＬＳＵ）の読み込み順序変更キュー（ＬＲＱ：load reorder queue）内でヒットした場合、格納違反条件（storeviolation condition）（ストア・ヒット・ロード（ＳＨＬ：store-hit-load））が示される。すなわち、新しく発行されたより古い格納命令のＲＡが、ＬＳＵのＬＲＱ内に存在するより新しい読み込み命令のＲＡに一致する場合、ＳＨＬが示される。しかし、ＳＨＬの検出は、通常、命令実行パイプライン内の後方で発生するため、ＳＨＬからの回復は、多くの場合、プロセッサの性能に対する相対的に重大な不利益をもたらす。例えば、ＳＨＬからの回復は、通常、ＳＨＬを引き起こしたより新しい読み込み命令を無効化すること、およびより新しい読み込み命令に加えて、より古い格納命令の後に発行されたすべての命令を再発行することを伴う。
【００２７】
さらに、例えば、同じアドレスへの２つの読み込み命令がＯｏＯで実行され、そのアドレスのデータの値が、２つの読み込み命令の実行の間で（例えば、別のプロセッサによって）変更された場合、後の（すなわち、より新しい）読み込みが前の（すなわち、古い）値を取得し、前の（すなわち、より古い）読み込みが後の（すなわち、より新しい）値を取得する。この状況は、「読み込み間順序違反（load-load order violation）」または「ロード・ヒット・ロード・ハザード」と呼ばれる。より新しい読み込み命令が古いデータを取得した場合に、同じアドレスへのより古い読み込み命令が新しいデータを取得してはならないという要件は、「順次的読み込みの一貫性」と呼ばれる。加えて、後の（すなわち、より新しい）読み込み命令が、同じアドレス（すなわち、メモリ位置）への前の（すなわち、より古い）格納命令が完了する前に実行される場合、この読み込み命令は前の（すなわち、古い）値を取得する。この状況は、「読み込み−格納間順序違反（load-store order violation）」または「ロード・ヒット・ストア・ハザード」と呼ばれる（例えば、“Power4 System Microarchitecture” by J. M.Tendler et al., IBM Journal of Research and Development, Volume 46, Number 1,January 2002, pp. 5-25を参照）。
【００２８】
しかし、ＥＡを使用して（ＲＡを使用しないで）動作するＯｏＯプロセッサの場合、ＥＡのみに基づいてＳＨＬ条件およびＬＨＬ条件を検出し、それらの状況からさらに回復するための技術的課題がもたらされる。通常、プロセッサは、読み込み間順序違反および読み込み−格納間順序違反を防ぐための専用ハードウェアを含み、それによって、プログラムの正しさを保証することができる。しかし、そのようなハードウェアは、多くの場合、複雑であり、時間遅延を追加する。さらに、そのようなハードウェアは、ハザード条件を検出するためにＲＡを使用することに頼り、したがって、（変換／ＣＡＭポートのための）より大きいチップ面積を占有し、ＥＡからＲＡへの変換またはＲＡからＥＡへの変換あるいはその両方のために、より多くの電力を消費する。本明細書に記載された技術的解決策は、ＥＡを使用すること、およびＥＡＤエントリに格納された実効実変換テーブル（ＥＲＴ：effective real translation table）インデックスを使用することによって、そのような技術的課題に対処する。本明細書における技術的解決策は、ロード・ヒット・ロード・テーブルを使用してロード・ヒット・ロード・ハザードを検出し、そのような状況に従って動作する。このようにして、これらの技術的解決策は、ＯｏＯプロセッサが、実アドレスを格納および操作するための専用のチップ面積を少なくすることを促進する。
【００２９】
ここで図１を参照すると、本発明の１つまたは複数の実施形態に従って、ＯｏＯ命令ウィンドウ内でＥＡのシノニムを防ぐための技術的解決策を実装するＯｏＯプロセッサの命令順序付けユニット（ＩＳＵ）を含んでいるシステム１００のブロック図が、概して示されている。図１に示されているシステム１００は、ＩＳＵのマッパー１１０に入力するためのデコードされた命令を準備する設定ブロック１０８に入力するための命令をフェッチしてデコードする、命令フェッチ・ユニット／命令デコード・ユニット（ＩＦＵ／ＩＤＵ：instruction fetch unit/instruction decode unit）１０６を含んでいる。本発明の１つまたは複数の実施形態に従って、ＩＦＵ／ＩＤＵ１０６によって、スレッドからの一度に６つの命令がフェッチされ、デコードされ得る。本発明の１つまたは複数の実施形態に従って、設定ブロック１０８に送信される６つの命令は、６つの非分岐命令、５つの非分岐命令および１つの分岐命令、または４つの非分岐命令および２つの分岐命令を含むことができる。本発明の１つまたは複数の実施形態に従って、設定ブロック１０８は、フェッチされた命令をＩＳＵ内のそれらのブロックに送信する前に、発行キュー内のエントリ、完了テーブル、マッパー、およびレジスタ・ファイルなどの十分なリソースが存在することをチェックする。
【００３０】
図１に示されたマッパー１１０は、プログラマの命令（例えば、論理レジスタ名）をプロセッサの物理リソース（例えば、物理レジスタ・アドレス）にマッピングする。図１には、条件レジスタ（ＣＲ：condition register）マッパー、リンク／カウント（ＬＮＫ／ＣＮＴ：link/count）レジスタ・マッパー、整数例外レジスタ（ＸＥＲ：exception register）マッパー、汎用レジスタ（ＧＰＲ：generalpurpose registers）およびベクトル−スカラ・レジスタ（ＶＳＲ：vector-scalarregister）をマッピングするための統合マッパー（Ｕマッパー：UMapper）、ＧＰＲおよびＶＳＲをマッピングするための設計済みマッパー（ＡＲＣＨマッパー：architected mapper）、および浮動小数点状態および制御レジスタ（ＦＰＳＣＲ：floating point status and control register）マッパーを含む、さまざまなマッパー１１０が示されている。
【００３１】
設定ブロック１０８からの出力が、現在のＩＳＵ内のすべての命令を追跡するためのグローバル完了テーブル（ＧＣＴ：global completion table）１１２にも入力される。設定ブロック１０８からの出力が、命令を発行キューにディスパッチするためのディスパッチ・ユニット１１４にも入力される。図１に示されているＩＳＵの実施形態は、ＣＲ発行キュー（ＣＲ  ＩＳＱ：CR issue queue）１１６を含んでおり、ＣＲ発行キュー１１６は、ＣＲマッパーからの命令を受信して追跡し、それらの命令を命令フェッチ・ユニット（ＩＦＵ）１２４に発行（１２０）して、ＣＲ論理命令および移動命令を実行する。図１には分岐発行キュー（分岐ＩＳＱ：branch issue queue）１１８も示されており、分岐発行キュー１１８は、分岐命令およびＬＮＫ／ＣＮＴ物理アドレスをＬＮＫ／ＣＮＴマッパーから受信して追跡する。分岐ＩＳＱ１１８は、予測された分岐アドレスまたは方向あるいはその両方が正しくなかった場合、命令をＩＦＵ１２４に発行して、命令フェッチをリダイレクトすることができる。
【００３２】
ディスパッチ論理およびＬＮＫ／ＣＮＴマッパーから名前が変更されたレジスタ、ＸＥＲマッパー、ＵＭａｐｐｅｒ（ＧＰＲ／ＶＳＲ）、ＡＲＣＨマッパー（ＧＰＲ／ＶＳＲ）、ならびにＦＰＳＣＲマッパーから出力された命令が、発行キュー１０２に入力される。図１に示されているように、発行キュー１０２は、ディスパッチされた固定小数点命令（Ｆｘ：fixed point instructions）、読み込み命令（Ｌ：loadinstructions）、格納命令（Ｓ：store instructions）、およびベクトルおよびスカラ・ユニット（ＶＳＵ：vector-and-scaler unit）命令を追跡する。図１の実施形態に示されているように、発行キュー１０２は、２つの部分ＩＳＱ０  １０２０およびＩＳＱ１  １０２１に分割されており、各部分がＮ／２個の命令を保持する。プロセッサがシングルスレッド（ＳＴ）モードで実行している場合、発行キュー１０２が、単一のスレッドのすべての命令（この例では、Ｎ個すべての命令）を処理するために、ＩＳＱ０  １０２０およびＩＳＱ１  １０２１の両方を含んでいる単一論理の発行キューとして使用され得る。
【００３３】
プロセッサがマルチスレッド（ＭＴ）モードで実行している場合、ＩＳＱ０  １０２０が、第１のスレッドからのＮ／２個の命令を処理するために使用可能であり、ＩＳＱ１  １０２１が、第２のスレッドＩＳＱ１  １０２１からのＮ／２個の命令を処理するために使用される。
【００３４】
図１に示されているように、発行キュー１０２は、実行ユニットの２つのグループ（１０４０および１０４１）に分割されている実行ユニット１０４に、命令を発行する。図１に示されている実行ユニットの両方のグループ（１０４０および１０４１）は、完全固定小数点実行ユニット（full fixed point execution unit）（完全ＦＸ０、完全ＦＸ１）、読み込み実行ユニット（ＬＵ０、ＬＵ１）、簡易固定小数点、格納データ、および格納アドレス実行ユニット（簡易ＦＸ０／ＳＴＤ０／ＳＴＡ０、簡易ＦＸ１／ＳＴＤ１／ＳＴＡ１）、ならびに浮動小数点、ベクトル・マルチメディア実行、１０進浮動小数点、および格納データ実行ユニット（ＦＰ／ＶＭＸ／ＤＦＰ／ＳＴＤ０、ＦＰ／ＶＭＸ／ＤＦＰ／ＳＴＤ１）を含んでいる。ＬＵ０、簡易ＦＸ０／ＳＴＤ０／ＳＴＡ０、およびＦＰ／ＶＭＸ／ＤＦＰ／ＳＴＤ０は、集合的に、読み込み／格納ユニット（ＬＳＵ）１０４２を形成する。同様に、ＬＵ１、簡易ＦＸ１／ＳＴＤ１／ＳＴＡ１、およびＦＰ／ＶＭＸ／ＤＦＰ／ＳＴＤ１は、読み込み／格納ユニット（ＬＳＵ）１０４３を形成する。２つのＬＳＵ１０４２および１０４３は、まとめて、システム１００のＬＳＵと呼ばれる。
【００３５】
図１に示されているように、プロセッサがＳＴモードで実行している場合、実行ユニットの第１のグループ１０４０が、ＩＳＱ０  １０２０から発行された命令を実行し、実行ユニットの第２のグループ１０４１が、ＩＳＱ１  １０２１から発行された命令を実行する。プロセッサがＳＴモードで実行している場合の本発明の代替の実施形態では、発行キュー１０２内のＩＳＱ０  １０２０およびＩＳＱ１  １０２１の両方から発行された命令が、実行ユニットの第１のグループ１０４０および実行ユニットの第２のグループ１０４１内の実行ユニット１０４０のいずれかに含まれる実行ユニットに発行され得る。
【００３６】
本発明の１つまたは複数の実施形態に従って、プロセッサがＭＴモードで実行している場合、実行ユニットの第１のグループ１０４０が、ＩＳＱ０  １０２０から発行された第１のスレッドの命令を実行し、実行ユニットの第２のグループ１０４１が、ＩＳＱ１  １０２１から発行された第２のスレッドの命令を実行する。
【００３７】
本発明の実施形態が、さまざまな異なるサイズの発行キューおよびその他の要素に関して実装され得るため、図１に示されている発行キュー１０２内のエントリの数およびその他の要素のサイズ（例えば、バス幅、キュー・サイズ）は、実際は例示的であるよう意図されている。本発明の１つまたは複数の実施形態に従って、サイズが選択可能であるか、またはプログラム可能である。
【００３８】
１つまたは複数の例では、システム１００は、実施形態例に従って、ＯｏＯプロセッサである。図２は、本発明の１つまたは複数の実施形態に従う、ＥＡＤおよびこのＥＡＤを利用するための関連するメカニズムが実装される、ＯｏＯプロセッサのプロセッサ・アーキテクチャの例示的なブロック図である。図２に示されているように、このプロセッサ・アーキテクチャは、命令キャッシュ２０２、命令フェッチ・バッファ２０４、命令デコード・ユニット２０６、および命令ディスパッチ・ユニット２０８を含んでいる。命令が、命令フェッチ・バッファ２０４によって命令キャッシュ２０２からフェッチされ、命令デコード・ユニット２０６に提供される。命令デコード・ユニット２０６は、命令をデコードし、デコードされた命令を命令ディスパッチ・ユニット２０８に提供する。命令ディスパッチ・ユニット２０８の出力が、命令の種類に応じて、グローバル完了テーブル２１０、ならびに分岐発行キュー２１２、条件レジスタ発行キュー２１４、統合発行キュー（unified issue queue）２１６、読み込み順序変更キュー２１８、または格納順序変更キュー２２０あるいはその組み合わせのうちの１つまたは複数に提供される。命令の種類は、命令デコード・ユニット２０６のデコーディングおよびマッピングによって決定される。発行キュー２１２〜２２０は、実行ユニット２２２〜２４０のうちのさまざまな実行ユニットに、入力を提供する。データ・キャッシュ２５０および各ユニットと共に含まれているレジスタ・ファイルは、命令で使用するためのデータを提供する。
【００３９】
命令キャッシュ２０２は、第２のレベルの変換ユニット２６２およびプリデコード・ユニット２７０を介してＬ２キャッシュ２６０から命令を受信する。第２のレベルの変換ユニット２６２は、アソシエート・セグメント・ルックアサイド・バッファ（associate segment look-aside buffer）２６４およびトランスレーション・ルックアサイド・バッファ２６６を使用して、フェッチされた命令のアドレスを実効アドレスからシステム・メモリ・アドレスに変換する。プリデコード・ユニットは、Ｌ２キャッシュから着信する命令を部分的にデコードし、一意の識別情報でそれらの命令を拡大して、下流の命令デコーダの作業を簡略化する。
【００４０】
命令フェッチ・バッファ２０４にフェッチされる命令は、命令が分岐命令である場合、分岐予測ユニット２８０にも提供される。分岐予測ユニット２８０は、分岐履歴テーブル２８２、復帰スタック２８４、およびカウント・キャッシュ２８６を含んでいる。これらの要素は、次に命令キャッシュからフェッチされるべきＥＡを予測する。分岐命令は、制御の流れが変更されるコンピュータ・プログラム内の位置である。分岐命令は、ｉｆ−ｔｈｅｎ−ｅｌｓｅステートメントまたはｄｏ−ｗｈｉｌｅステートメントなどの、コンピュータ・プログラム内の制御構造から生成される低レベルの機械命令である。分岐が選択されないことがあり、その場合、制御の流れが変化せず、次に実行される命令はメモリ内のその分岐の直後の命令であり、または分岐が選択されることがあり、その場合、次に実行される命令はメモリ内のどこか他の場所にある命令である。分岐が選択される場合、新しいＥＡが命令キャッシュに提示される必要がある。
【００４１】
分岐予測ユニットからのＥＡおよび関連する予測情報が、実効アドレス・ディレクトリ２９０に書き込まれる。後で、分岐実行ユニット２２２によって、このＥＡが確認される。このＥＡが正しい場合、このＥＡは、このアドレス領域からのすべての命令が実行を完了するまで、ディレクトリ内に残る。このＥＡが正しくない場合、分岐実行ユニットがアドレスをフラッシュし、修正されたアドレスがその場所に書き込まれる。ＥＡＤ２９０は、ＣＡＭとしてのディレクトリの使用を容易にする論理ユニットも含んでいる。
【００４２】
メモリから読み取る命令またはメモリに書き込む命令（読み込み命令または格納命令など）が、ＬＳ／ＥＸ実行ユニット２３８、２４０に発行される。ＬＳ／ＥＸ実行ユニットは、命令によって指定されたメモリ・アドレスを使用して、データ・キャッシュ２５０からデータを取得する。このアドレスは、ＥＡであり、使用される前に、まず第２のレベルの変換ユニットを介してシステム・メモリ・アドレスに変換される必要がある。アドレスがデータ・キャッシュ内に見つからない場合、Ｌ２キャッシュに対する失敗した要求を管理するために、読み込み失敗キュー（load miss queue）が使用される。そのようなキャッシュ・ミスの不利益を減らすために、高度なデータ・プリフェッチ・エンジンが、近い将来に命令によって使用される可能性が高いアドレスを予測する。このようにして、命令がデータを必要とするときに、そのデータがデータ・キャッシュ内にすでに存在する可能性が高くなり、それによって、Ｌ２キャッシュに対する失敗した要求の長い待ち時間を防ぐ。
【００４３】
ＬＳ／ＥＸ実行ユニット２３８、２４０は、読み込み順序変更キュー２１８および格納順序変更キュー２２０内の命令の古さおよびメモリの依存関係を追跡することによって、プログラム順序に従わずに命令を実行する。これらのキューは、ＯｏＯ実行が同じプログラムのインオーダー実行と一致しない結果を生成したときに、それを検出するために使用される。そのような場合、現在のプログラム・フローがフラッシュされ、再実行される。
【００４４】
プロセッサ・アーキテクチャは、ＥＡＤ２９０をさらに含んでおり、実効アドレス・ディレクトリ（ＥＡＤ）２９０は、ＥＡが必要とされるがパイプラインを通る必要がない場合に、ＥＡを使用できるように、集中化された方法で、命令のグループの実効アドレスを維持する。さらに、ＥＡＤ２９０は、ＯｏＯ処理をサポートするための回路または論理あるいはその両方を含んでいる。図２は、分岐予測ユニット２８０を介してアクセスされているＥＡＤ２９０を示しているが、図２に示されたユニットのうちのさまざまなユニットが、分岐予測ユニット２８０を通る必要なしにＥＡＤ２９０にアクセスできるようにするための回路が提供されてよいということが、理解されるべきである。
【００４５】
当業者は、図１〜２のハードウェアが実装に応じて変わってよいということを、理解するであろう。フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどの、その他の内部ハードウェアまたは周辺機器が、図１〜２に示されているハードウェアに加えて、またはそれらのハードウェアの代わりに、使用されてよい。加えて、実施形態例のプロセスは、本発明の思想および範囲を逸脱することなく、前述したＳＭＰシステム以外のマルチプロセッサ・データ処理システムに適用されてよい。
【００４６】
さらに、データ処理システム１００は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話またはその他の通信デバイス、パーソナル・デジタル・アシスタント（ＰＤＡ：personal digital assistant）などを含む、複数の異なるデータ処理システムのいずれかの形態を取ってよい。一部の例では、データ処理システム１００は、例えばオペレーティング・システム・ファイルまたはユーザによって生成されたデータあるいはその両方を格納するために、不揮発性メモリを提供するようにフラッシュ・メモリを使用して構成された、ポータブル・コンピューティング・デバイスであってよい。基本的に、データ処理システム１００は、アーキテクチャの制限なしで、任意の既知のデータ処理システムまたは後で開発されるデータ処理システムであってよい。
【００４７】
当業者によって理解されるであろうように、本発明は、システム、装置、または方法として具現化されてよい。１つの実施形態例では、メカニズムが、ハードウェア（例えば、プロセッサの回路、ハードウェア・モジュール、またはユニットなど）において全体的に提供される。しかし、他の実施形態例では、ソフトウェアおよびハードウェアの組み合わせが、実施形態例の特徴およびメカニズムを提供または実装するために利用されてよい。例えば、ソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどで提供されてよい。以下で示されるさまざまなフローチャートは、ハードウェア、またはハードウェアとソフトウェアの組み合わせ、あるいはその両方によって実行されてよい動作の概要を提供する。
【００４８】
実施形態例のメカニズムが少なくとも部分的にソフトウェアにおいて実装される実施形態例では、このソフトウェアを格納する１つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体の任意の組み合わせが、利用されてよい。例えば、コンピュータ使用可能媒体またはコンピュータ可読媒体は、電子、磁気、光、電磁気、赤外線、または半導体のシステム、装置、またはデバイスであってよいが、これらに限定されない。コンピュータ可読媒体のさらに具体的な例（非網羅的リスト）としては、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-onlymemory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasableprogrammable read-only memoryまたはフラッシュ・メモリ）などが挙げられる。
【００４９】
通常は、すべての読み込み命令および格納命令について、ＥＡが対応するＲＡに変換される。そのようなＥＡからＲＡへの変換は、命令フェッチ（Ｉ−フェッチ）の場合にも実行される。低次メモリからの命令の取得の場合、そのような変換は、通常、実効アドレスから実アドレスへのテーブル（ＥＡＲＴ：effective to real address table）を必要とした。本明細書に記載された技術的解決策では、ＥＡからＲＡへの変換が、すべての読み込み命令および格納命令について実行されるのではなく、読み込み失敗、Ｉ−フェッチ失敗、およびすべての格納の場合にのみ、実行される。
【００５０】
これらの技術的解決策は、ＥＡのみを動作に使用することによって、ＥＡディレクトリ（Ｌ１ディレクトリとも呼ばれる）、ＬＲＱＦエントリ、ＬＭＱエントリなどの、１つまたは複数のデータ構造からのＲＡビット（例えば、ビット８：５１）の除去を容易にする。さらに、ＥＡのみが使用されている場合、ＳＲＱ  ＬＨＳ  ＲＡ比較論理が実行されない。そのような要素を除去することによって、使用されるプロセッサのチップ面積を削減し、したがって、通常のプロセッサを超えるチップ面積の削減を促進する。
【００５１】
さらに、本明細書における技術的解決策は、ＥＡのみを使用することによって、すべての読み込みアドレスおよび格納アドレスの生成時のＥＲＡＴの検索を除去する。これらの技術的解決策は、ユニット全体のＲＡバスの切り替えをさらに除去し、高速なＳＲＱ  ＬＨＳ  ＲＡ  ｃａｍも回避する。したがって、これらの技術的解決策は、上記の動作を実行しないことによって、プロセッサが、通常のプロセッサと比較して少ない電力を消費するのを促進する。
【００５２】
さらに、本明細書における技術的解決策は、Ｌ１の待ち時間の改善も促進する。例えば、本明細書における技術的解決策は、除去によって、「最終的なｄｖａｌ」を決定することにおいて、アドレス変換が、ＥＡからＲＡへの変換を実行する通常のプロセッサと比較して少なくとも１サイクル速くなる。ＥＡのみを使用する（ＲＡ変換を行わない）ことによって、設定テーブルの複数のヒット、設定テーブルのヒット／ＲＡの失敗などの、「悪いｄｖａｌ」条件を除去するため、待ち時間も改善される。同様の方法で、本明細書における技術的解決策は、Ｌ２の待ち時間の改善を促進する。
【００５３】
ＥＡに基づくＬＳＵのみを使用することの技術的課題は、命令のアウトオブオーダー実行がハザード（ＬＨＬ、ＳＨＬ、ＬＨＳ）につながることがあり、ＥＡのみの実装の場合、そのようなハザードが、対応する実アドレスを使用せずに検出されるべきである、ということを含む。本明細書に記載された技術的解決策は、そのような技術的問題に対処する。ＲＡは、通常使用されているように、ロード・ヒット・ストア、ストア・ヒット・ロード、ロード・ヒット・ロードのいずれのタイプのＯｏＯ実行のハザード検出にも、使用されることがない。格納のためのＲＡ計算は、格納の完了後に格納命令に関する割り込みが処理されないため、格納が完了する前に発生する（格納は、アドレス変換に関連する割り込みを生成することがあり、この割り込みは、格納が完了する前に処理される必要がある）。ここで、格納が発行されるとき（排出されるときではない）に、ＲＡ計算が実行される。本明細書に記載された技術的解決策は、ＥＡディレクトリ・エントリに格納されたＥＡおよびＥＲＴインデックスに基づき、本明細書において説明されている構造および動作と共に読み込み順序変更キュー（ＬＲＱＦ）も使用して、ＬＨＳ（ロード・ヒット・ストア）、ＳＨＬ（ストア・ヒット・ロード）、およびＬＨＬ（ロード・ヒット・ロード）を決定する。
【００５４】
再び図を参照すると、図３は、本発明の１つまたは複数の実施形態に従うプロセッシング・コアの読み込み／格納ユニット（ＬＳＵ）１０４を示している。示されているＬＳＵ１０４は、２読み込み／２格納モードでの実行を容易にするが、本明細書に記載された技術的解決策がそのようなＬＳＵに限定されないということに、注意するべきである。以下では、ＬＳＵの実行の流れが説明される。読み込み命令または格納命令から、ＥＡ（コンピュータ・プログラム内でプログラマによって使用される）が生成される。同様に、命令フェッチの場合にもＥＡが生成される。通常は、すべての命令について、ＥＡがＲＡ（ＥＡからＲＡへの変換後にハードウェアによって使用される実アドレス）に変換され、技術的課題の中でも特に、より大きいチップ面積および頻繁な変換が必要だった。本明細書に記載された技術的解決策は、ＥＡのみを使用し（ＲＡへの変換を行わずに）、読み込み失敗時、Ｉ−フェッチ失敗時、および格納時にのみ、実効実テーブル（ＥＲＴ）２５５を使用してＲＡを生成することによって、そのような技術的課題に対処する。
【００５５】
ＬＳＵ１０４は、読み込み順序変更キュー（ＬＲＱＦ）２１８を含んでおり、読み込み順序変更キュー（ＬＲＱＦ）２１８では、ディスパッチから完了までのすべての読み込み動作が追跡される。ＬＳＵ１０４は、第２の読み込み順序変更キューＬＲＱＥ２２５をさらに含んでいる。読み込みが（キャッシュ・ミスまたは変換失敗のため、あるいは読み込みが依存する前の命令が拒否されたために）拒否された場合、発行キューから読み込みが取り出され、ＬＲＱＥエントリに配置され、このＬＲＱＥエントリから読み込みが再発行される。示されているＬＲＱＥ２２５は、１２個のエントリをそれぞれ含む（合計で２４個のエントリ）、２つの読み込みモード用の２つのインスタンス（ＬＲＱＥ０およびＬＲＱＥ１）に分割される。ＳＴモードでは、スレッド／パイプに基づくパーティションが存在しない。ＭＴモードでは、Ｔ０、Ｔ２の動作がパイプＬＤ０で開始しており、Ｔ１、Ｔ３の動作が、再開のためのパイプＬＤ１で開始している。
【００５６】
示されているように、ＬＲＱＦ２１８は、４０個のエントリを（インスタンスごとに）含む、２つの読み込みモード用の２つのインスタンス（ＬＲＱＦ０およびＬＲＱＦ１）に分割される。ＬＲＱＦ２１８は、循環する順序通りのエントリの割り当て、循環する順序通りのエントリの排出、および循環する順序通りのエントリの割り当て解除である。さらに、ＭＴモードでは、Ｔ０、Ｔ２の動作がパイプＬＤ０、ＳＴ０で開始しており、Ｔ１、Ｔ３の動作が、パイプＬＤ１、ＳＴ１で開始している。ＳＴモードでは、ＬＲＱＦがどのパイプ／スレッドも含まない。
【００５７】
１つまたは複数の例では、ＳＭＴ４モードの場合、ＬＲＱＦ２１８（および本明細書に記載されたその他の構造）が、Ｔ０：ＬＲＱＦ０［０：１９］循環キュー、Ｔ１：ＬＲＱＦ１［０：１９］循環キュー、およびＴ２：ＬＲＱＦ０［２０：３９］循環キュー、Ｔ３：ＬＲＱＦ１［２０：３９］循環キューとして分割される。
【００５８】
１つまたは複数の例では、ＳＭＴ２モードの場合、ＬＲＱＦ２１８（および本明細書に記載されたその他の構造）が、Ｔ０：ＬＲＱＦ０［０：３９］循環キューおよびＴ１：ＬＲＱＦ１［０：３９］循環キューとして分割される。さらに、１つまたは複数の例では、ＳＴモードの場合、ＬＲＱＦ０［０：３９］循環キューであり、ＬＲＱＦ１がＬＲＱＦ０のコピーである。他のデータ構造の場合、ＳＴモードで類似するパーティション・パターンが使用され、第２のインスタンスが第１のインスタンスコピーである。
【００５９】
相互無効化フラッシュ（ＸＩフラッシュ：cross invalidationflush）の場合、ＬＲＱＦに関して、ＮＴＣ＋１が、別のスレッドからのＸＩまたは格納排出がヒットするスレッドをフラッシュし、ＸＩフラッシュの場合に、同期時の明示的なＬ／Ｌの順序付けのフラッシュがＬＳＵ１０４によって実行されないようにする。
【００６０】
すべての格納が、ＳＨＬ検出に関してＬＲＱＦ２１８に対してチェックし、ＳＨＬの検出時に、ＬＲＱＦ２１８が、格納の後の読み込みまたはすべてのもの（命令／動作）のフラッシュを開始する。さらに、ＤＣＢ命令が、ＳＨＬのケースに関してＬＲＱＦ２１８に対してチェックし、ＳＨＬのケースの発生時に、ＬＲＱＦ２１８が、ＤＣＢの後の読み込みまたはすべてのもののフラッシュを引き起こす。さらに、すべての読み込みが、ＬＨＬ検出に関してＬＲＱＦ２１８に対してチェックし（逐次読み込みの一貫性）、ＬＨＬの検出時に、ＲＱＦ２１８が、より古い読み込みの後のより新しい読み込みまたはすべてのもののフラッシュを引き起こす。１つまたは複数の例では、ＬＲＱＦ２１８が、クワッドワードのアトミック性を提供し、ＬＱがクワッドのアトミック性に関してＬＲＱＦ２１８に対してチェックし、アトミックでない場合に、ＬＱをフラッシュする。さらに、ＬＡＲＸ命令の場合、ＬＳＵ１０４がｌａｒｘヒットｌａｒｘのケースに関してＬＲＱＦ２１８に対してチェックし、それに応じて、より古いｌａｒｘ命令の後のより新しいＬＡＲＸまたはすべてのものをフラッシュする。
【００６１】
このようにして、ＬＲＱＦ２１８は、発行から完了までのすべての読み込み動作の追跡を容易にする。ＬＲＱＦ２１８内のエントリは、キュー構造内の物理的位置であるＲｅａｌ＿Ｌｔａｇ（ｒｌｔａｇ）でインデックス付けされる。ＬＲＱＦ２１８内の読み込み動作／エントリの古さが、順序通りであるＶｉｒｔｕａｌ＿Ｌｔａｇ（ｖｌｔａｇ）を使用して決定される。ＬＲＱＦは、ＧＭＡＳＫを使用して読み込みをフラッシュし、一部のグループは、ＧＴＡＧおよびＩＭＡＳＫを使用してフラッシュする。ＬＲＱＦ論理は、現在のｉタグまたはｉタグ＋１あるいは正確な読み込みのｉタグからフラッシュできる。
【００６２】
さらに、ＬＲＱＦは、通常使用されるＲＡ（８：５１）フィールドを含まず、代わりにＥＡに基づき、ＥＲＴ  ＩＤ（０：６）およびＥＡ（４０：５１）を含む（２４ビットの節約）。ＳＨＬ、ＬＨＬでのＬＲＱＦのページの一致は、ＥＲＴ  ＩＤの一致に基づく。さらに、各ＬＲＱエントリは、「ページ一致強制（Force Page Match）」ビットを含んでいる。ＬＲＱエントリのＥＲＴ  ＩＤに一致するＥＲＴ  ＩＤが無効化された場合、ページ一致強制ビットが設定される。ＬＲＱがＬＨＬ、ＳＨＬを検出し、格納の順序付けが、ページ一致強制＝１であるエントリを含めてフラッシュする。
【００６３】
ＬＳＵ１０４のＳＲＱ２２０は、４０個のエントリ（インスタンスごと）の２つのインスタンスＳＲＱＲ０およびＳＲＱＲ１を含む、ＬＲＱＦ２１８に類似する構造を有し、ＳＲＱＲ０およびＳＲＱＲ１は、循環する順序通りのエントリの割り当て、循環する順序通りのエントリの排出、および循環する順序通りのエントリの割り当て解除である。さらに、ＳＲＱ２２０は、ＬＲＱＦ２１８と同様に分割される（例えば、パイプＬＤ０、ＳＴ０上で開始されるＴ０、Ｔ２の動作、パイプＬＤ１、ＳＴ１上で開始されるＴ１、Ｔ３の動作、ＳＴモードではパイプ／スレッドのパーティションがない）。ＳＴモードでは、両方のコピーが同一の値を含み、ＭＴモードでは、各コピーが異なっている。ＳＭＴ４モードでは、両方のインスタンスがさらに分割され、各スレッドに、ＳＲＱ２２０から２０個のエントリが割り当てられる（本明細書に記載されたＬＲＱＦの例示的なパーティションを参照）。１つまたは複数の例では、格納排出調停（store drain arbitration）の場合、ＳＭＴ４モードで、ＳＲＱ内の読み取りポインタの多重化が実行される。代替または追加として、ＳＭＴ２モードおよびＳＭＴ４モードで、ＳＲＱ０／１間の多重化が実行される。ＳＴモードでは、ＳＲＱ０に対してのみ、排出が実行される。
【００６４】
ＳＲＱ２２０の各エントリは、格納のＴＩＤ（０：１）、ＥＲＴ  ＩＤ（０：６）、ＥＡ（４４：６３）、およびＲＡ（８：５１）を含む。ＬＨＳを検出するために、ＬＳＵは｛格納のＴｉｄ，  ＥＡ（４４：６３）｝を使用し、このようにしてＲＡ  ＬＨＳの別名チェックを取り除く。ＥＲＴ  ＩＤは、ＥＡ（４４：６３）の部分的一致の投機失敗を「捕らえる」ために使用される。ＳＱＲエントリはＲＡ（８：５１）を含み、ＲＡ（８：５１）は格納時に再び変換され、格納要求をＬ２に送信する（格納命令が排出され、発行されない）ときにのみ使用される。各ＳＲＱエントリも、「ページ一致強制」ビットを含んでいる。ページ一致強制ビットは、ＳＲＱエントリのＥＲＴ  ＩＤに一致するＥＲＴ  ＩＤが無効化されたときに、設定される。ＳＲＱは、ページ一致強制＝１であるエントリを伴うＬＨＳを検出できる。例えば、ページ一致強制＝１であるエントリに反するＬＨＳは、読み込み命令の拒否を引き起こす。さらに、格納排出は、ＳＱＲエントリに関してページ一致強制＝１の場合に、Ｌ１キャッシュにおける失敗を強制する。これは、「拡張ストア・ヒット・リロード（Extended store hit reload）」ＬＭＱ動作と並行して動作する。
【００６５】
例えば、ＬＭＱの場合、ＬＭＱアドレス一致＝｛ＥＲＴ  ＩＤ，  ＥＡページ・オフセット（ｘｘ：５１），  ＥＡ（５２：５６）｝が一致する。さらに、各ＬＭＱエントリの「ページ一致強制」ビットは、ＬＭＱエントリのＥＲＴ  ＩＤに一致するＥＲＴ  ＩＤが無効化されたときに、設定される（＝１）。ＬＭＱは、有効なＬＭＱエントリ［ｘ］のページ一致強制＝１および読み込み失敗のＥＡ［５２：５６］＝ＬＭＱエントリ［Ｘ］のＥＡ（５２：５６）である場合に、読み込み失敗を拒否する。さらに、ＬＭＱは拡張ストア・ヒット・リロードを含む。例えば、ＬＭＱは、再読み込みのＥＡ（５２：５６）＝ＳＲＱエントリ［Ｘ］のＥＡ（５２：５６）およびＳＲＱエントリ［Ｘ］のページ一致強制＝１である場合に、再読み込みの有効化を抑制する。代替または追加として、ＬＭＱは、ＬＭＱエントリ［Ｘ］のＥＡ（５２：５６）＝格納排出のＥＡ（５２：５６）および格納排出のページ一致強制＝１である場合に、再読み込みの有効化を抑制する。
【００６６】
示されたＬＳＵ１０４は、チップ面積をさらに節約するために、格納データ・キュー（ＳＤＱ：Store Data Queue）をＳＲＱ２２０自体の一部として折りたたむ。オペランドのサイズがＳＲＱエントリのサイズより小さい（例えば、８バイトである）場合、オペランドがＳＲＱ自体のエントリに格納される。ベクトル・オペランドなどの、さらに広いオペランド（例えば、１６バイト幅）の場合、ＭＴモードでは、ＳＲＱ２２０内の２つの連続するエントリを使用して、ＳＲＱがそれらのオペランドを格納する。ＳＴモードでは、さらに広いオペランドがＳＲＱ０およびＳＲＱ１（例えば、それぞれ８バイト）に格納される。
【００６７】
ＳＲＱ２２０は、格納、バリア、ＤＣＢ、ＩＣＢＩ、またはＴＬＢのタイプの動作をキューに入れる。単一のｓタグが、ｓｔｏｒｅ＿ａｇｅｎおよびｓｔｏｒｅ＿ｄａｔａの両方に使用される。ＳＲＱ２２０は、ロード・ヒット・ストア（ＬＨＳ）のケース（同じスレッドのみ）を処理する。例えば、データ競合を伴う古い格納が存在しないことを保証するために、発行されたすべての読み込みがＳＲＱ２２０によってチェックされる。例えば、ＳＲＱ  ＥＡアレイ内の古い格納に対して読み込みのＥＡおよびデータ・バイト・フラグを比較することによって、データ競合が検出される。
【００６８】
ディスパッチでＳＲＱエントリが割り当てられ、ディスパッチされた命令タグ（ｉタグ：instructiontags）が正しい行に入力される。さらに、格納排出の発生時に、ＳＲＱエントリが割り当て解除される。１つまたは複数の例では、ｉタグ・アレイが「オーバーフロー」のディスパッチを保持する。例えば、望ましいＳＲＱ内の行（例えば、ＳＲＱエントリｘ）がまだ使用中である場合、ディスパッチで情報がｉタグ・アレイに書き込まれる。ＳＲＱエントリｘが割り当て解除されるときに、ＳＲＱのオーバーフローのｉタグ構造内の対応する行が読み出され、メインＳＲＱのｉタグ・アレイ構造にコピーされる（オーバーフローのｉタグ構造の読み取りは、特定のスレッド／領域に関して、オーバーフローのｉタグ・アレイ内に有効なエントリが存在するかどうかによって制御される）。メインＳＲＱ０／１のｉタグ・アレイが検索され（またはＳＭＴ４内で１／２検索され）、ＩＳＵがｉタグに基づいて格納を発行するように、格納の発行時にどの物理的行に書き込むかを決定する。ＳＲＱ２２０は、格納排出および割り当て解除の発生時に、ｉタグをＩＳＵに送信する。
【００６９】
ＩＳＵは、重複する発行を防ぐために、ディスパッチを格納するための仮想サブ領域を割り当てる。例えば、ＳＴモードでは、ＩＳＵは、エントリ０の格納排出によって実際のＳＲＱエントリ０の割り当てが解除されるまで、仮想ＳＲＱエントリ４０を発行しない。さらに、ＳＭＴ４モードでは、ＩＳＵは、実際のＴｘ  ＳＲＱエントリ０が排出されて割り当て解除されるまで、Ｔｘ仮想ＳＲＱエントリ２０を発行できない。ＩＳＵは、各スレッドのパーティションを、４つの領域にさらに分割する。
【００７０】
例えば、ＳＴモードの場合、ＳＲＱ２２０を４つのサブ領域にさらに分割する。Ｐｉｎｇ  Ａ：ＳＲＱエントリ０〜９、Ｐｉｎｇ  Ｂ：ＳＲＱエントリ１０〜１９、Ｐｉｎｇ  Ｃ：ＳＲＱエントリ２０〜２９、Ｐｉｎｇ  Ｄ：ＳＲＱエントリ３０〜３９、およびＰｏｎｇ  Ａ：ＳＲＱエントリ０〜９、Ｐｏｎｇ  Ｂ：ＳＲＱエントリ１０〜１９、Ｐｏｎｇ  Ｃ：ＳＲＱエントリ２０〜２９、Ｐｏｎｇ  Ｄ：ＳＲＱエントリ３０〜３９。最初に、ＩＳＵがＰｉｎｇ  Ａ、Ｂ、Ｃ、Ｄのｉタグを発行する。さらに、ＩＳＵは、Ｐｉｎｇ  Ａのｉタグの割り当てが解除されるまで、Ｐｏｎｇ  Ａのｉタグを発行しない。その後、Ｐｉｎｇ  Ａのｉタグの割り当てがすべて解除された後に、ＩＳＵがＰｏｎｇ  Ａのｉタグを発行するが、Ａのケースと同様に、Ｐｉｎｇ  Ｂのｉタグの割り当てが解除されるまで、Ｐｏｎｇ  Ｂのｉタグを発行しない。１つまたは複数の例では、ＩＳＵは、サブ領域に基づいて疑似発行依存関係（pseudo issue dependency）を作成するために、３つの追加ビット（どのサブ領域かを正確に示すための１循環ビット＋２ビット）を発行キュー・エントリ内に保持する。
【００７１】
図４は、１つの実施形態例に従う実効アドレス・ディレクトリ構造（Ｌ１キャッシュ）２９０の例示的なブロックである。１つまたは複数の例では、ＥＡＤがＬＳＵ１０４の一部である。図３に示されているように、ＥＡＤ２９０は、１つまたは複数のエントリ（例えば、エントリ０〜Ｎ）から成り、各エントリが、１つまたは複数の命令のグループに関する情報の複数のフィールドを含んでいる。例えば、１つの実施形態例では、ＥＡＤ２９０内の各エントリが１個〜３２個の命令を表してよい。ＥＡＤ２９０内のエントリは、プロセッサのキャッシュ（例えば、図２のＬ２キャッシュ２６０）の新しいキャッシュ・ライン内にある命令のフェッチに応答して作成される。ＥＡＤ２９０内のエントリは、追加の命令がキャッシュ・ラインからフェッチされるときに、更新される。ＥＡＤ２９０内の各エントリは、選択された分岐（すなわち、キャッシュからフェッチされた分岐命令が「選択された」として解決される）、キャッシュ・ラインの横断（すなわち、次にフェッチされた命令が、現在のキャッシュ・ラインと異なるキャッシュ・ラインである）、またはプロセッサのパイプラインのフラッシュ（分岐予測ミスが発生した場合など）で、終了する。
【００７２】
図３に示されているように、ＥＡＤ２９０のエントリのフィールドは、ベース実効アドレス３１０、第１の命令識別子３２０、最後の命令識別子３３０、終了識別子３４０、グローバル履歴ベクトル・フィールド（global history vector field）３５０、リンク・スタック・ポインタ・フィールド３６０、分岐選択識別子３７０、および分岐情報フィールド３８０を含んでいる。ＥＡＤ２９０は、Ｌ１データ・キャッシュと同様に構造化される。連想構造を設定する。例えば、１つまたは複数の例では、連想構造は、８ウェイでＥＡ（５２：５６）によってアドレス指定され、ＥＡ（０：５１）を使用して選択される、３２個のインデックスである。
【００７３】
ベースＥＡ３１０は、命令のグループの開始ＥＡである。命令のグループ内の各命令は、同じベースＥＡおよびベースＥＡからのオフセットを有する。例えば、１つの実施形態例では、ＥＡは、ビット０：６３を含んでいる６４ビットのアドレスである。１つの実施形態例では、ベースＥＡは、このＥＡのビット０：５６を含んでよく、ビット５７：６１が、命令のグループ内の特定の命令に関する、ベースＥＡからのオフセットを表す。ビット６２および６３は、各命令の特定のバイトを指す。実施形態例では、各アドレスが３２ビット長（すなわち、４バイト）の命令を参照し、メモリ内の各バイトがアドレス指定可能である。命令を、アドレス指定可能なサブコンポーネントにさらに分割することはできず、したがって、命令アドレスのビット６２および６３が常にゼロに設定される。したがって、ビット６２および６３は、格納する必要がなく、ＥＡＤによって、ゼロであるということが常に仮定され得る。
【００７４】
第１の命令識別子フィールド３２０は、ＥＡＤ２９０のエントリに対応する命令のグループ内の第１の命令に関して、ＥＡのオフセット・ビット（例えば、ＥＡのビット５７：６１）を格納する。フィールド３１０からのベースＥＡおよび第１の命令識別子フィールド３２０内のＥＡのオフセット・ビットの組み合わせは、ＥＡＤ２９０のエントリによって表された命令のグループ内の第１の命令にＥＡを提供する。この第１のフィールド３２０は、後で説明されるように、例えばパイプラインがフラッシュされた場合に、再フェッチ・アドレスおよび分岐予測情報を回復するために使用されてよい。
【００７５】
最後の命令識別子フィールド３３０は、ＥＡＤ２９０のエントリに対応する命令のグループ内の最後の命令に関して、ＥＡのオフセット・ビット（例えば、ＥＡのビット５７：６１）を格納する。ＥＡＤ２９０のエントリによって表された命令のグループ内の追加の命令がフェッチされるときに、ＥＡＤの論理がこのフィールドを更新する。ＥＡＤの論理は、キャッシュ・ラインの横断または選択された分岐が検出されたときに、ＥＡＤ２９０のエントリが終了することに応答して、特定のＥＡＤ２９０のエントリ内のこのフィールド３３０の更新を中断する。パイプラインのフラッシュが発生してＥＡＤのエントリの一部を消去しない限り、このフィールドは元の状態のままである。そのような場合、ＥＡＤの論理が、フラッシュの結果としてエントリ内の新しい最後の命令に現在なっている命令のＥＡのオフセット・ビットを格納するように、このフィールドを更新する。このフィールドは、後で説明されるように、ＥＡＤ２９０内のエントリの解放するために、最終的に完了に使用される。
【００７６】
終了識別子フィールド３４０は、ＥＡＤ２９０のエントリが終了しており、ＥＡＤ２９０のエントリに対応する命令グループの命令をフェッチするために、それ以上、命令フェッチが行われないということを示すために、使用される。ＥＡＤ２９０のエントリは、キャッシュ・ラインの横断、分岐が選択されること、またはパイプラインのフラッシュを含む、さまざまな異なる理由のために終了してよい。これらの条件のいずれかが、ＥＡＤのエントリが終了したことを示すように終了フィールド３４０内の値が設定される（例えば、「１」の値に設定される）ことを引き起こしてよい。このフィールド３４０は、後で詳細に説明されるように、ＥＡＤ２９０内のエントリを解放するために、完了時に使用される。
【００７７】
グローバル履歴ベクトル・フィールド３５０は、ＥＡＤ２９０内のエントリを作成した第１の命令フェッチ・グループのグローバル履歴ベクトルを識別する。グローバル履歴ベクトルは、後で詳細に説明されるように、分岐が選択されたかどうかの履歴を識別するために使用される。グローバル履歴ベクトルは、分岐予測の目的に使用され、分岐が選択されたかどうかの最近の履歴に基づいて、現在の分岐が選択される可能性が高いかどうかを判定するのに役立つ。
【００７８】
リンク・スタック・ポインタ・フィールド３６０は、ＥＡＤ２９０内のエントリを作成した第１の命令フェッチ・グループのリンク・スタック・ポインタを識別する。リンク・スタック・ポインタは、後で詳細に説明される別の分岐予測メカニズムである。
【００７９】
分岐選択フィールド３７０は、ＥＡＤ２９０のエントリに対応する命令のグループが、分岐が選択された分岐命令を含んでいたかどうかを示す。分岐選択フィールド３７０内の値は、ＥＡＤ２９０のエントリによって表された命令グループの分岐命令が選択されると予測されることに応答して、更新される。加えて、ＥＡＤ２９０のエントリの命令内の分岐が選択された後に、終了フィールド３４０に適切な値を書き込むことによって、ＥＡＤ２９０のエントリも終了される。予測時に分岐選択フィールドが投機的に書き込まれるため、分岐が実際に実行されるときに、分岐選択フィールドの値を正しい値に置き換える必要があることがある。例えば、分岐が選択されないと予測されることがあり、その場合、「０」が分岐選択フィールドに書き込まれる。しかし、後の実行において、分岐が選択されたことが検出されることがあり、その場合、「１」の値を書き込むことによって、このフィールドが修正されなければならない。分岐が誤って予測された場合にのみ、第２の書き込みが発生する。
【００８０】
分岐情報フィールド３８０は、分岐が解決したときに分岐予測構造を更新するために使用される種々雑多な分岐情報、または分岐命令が完了したときの設計されたＥＡの状態を格納する。
【００８１】
ＥＲＴ＿ＩＤフィールド３８５は、対応するＥＲＴエントリを識別する、ＥＲＴテーブル（さらに説明される）へのインデックスを格納する。ＥＲＴエントリが無効化された場合、関連付けられたＥＲＴ＿ＩＤが無効化され、Ｌ１キャッシュおよびＬ１  Ｄキャッシュ内の関連付けられたすべてのエントリも無効化される。
【００８２】
ベースｅａｔａｇおよびｅａｔａｇオフセットという少なくとも２つの部分を含んでいる実効アドレス・タグ（ｅａｔａｇ：effective address tag）を使用して、ＥＡＤ２９０内のエントリがアクセスされる。１つの実施形態例では、このｅａｔａｇは１０ビットの値であり、６４ビットのＥＡより相対的に非常に小さい。１つの実装例では、１０ビットのｅａｔａｇの値および１４個のエントリというサイズを有するＥＡＤ２９０を使用する場合、ｅａｔａｇは、ＥＡＤ２９０内のエントリを識別するための、ベースｅａｔａｇと呼ばれる第１の５ビット、およびＥＡＤ２９０内のエントリによって表される命令のグループ内の特定の命令のオフセットを提供するための、ｅａｔａｇオフセットと呼ばれる第２の５ビットから成る。ＥＡＤ２９０内のエントリを識別する５ビット内の第１のビットは、ＥＡＤ２９０の最上位のエントリから最下位のエントリに移動するときに、循環が発生したかどうかを示すために、循環ビットとして使用されてよい。このビットは、古さの検出に使用されてよい。ＥＡＤ２９０内のエントリを識別する５ビットのうちの第２〜第５のビットは、ＥＡＤのインデックスを指して、命令のベースＥＡ（すなわち、ＥＡ（０：５６））を識別するために使用されてよい。５ビットのオフセット値は、例えば、特定の命令のＥＡのビット５７：６１を提供するために使用されてよい。この例示的なｅａｔａｇが、以下に示される。
ｅａｔａｇ（０：９）＝ｒｏｗ（０：４）｜｜ｏｆｆｓｅｔ（０：４）
ｒｏｗ（０）：ＥＡＤの最上位のエントリから最下位のエントリへの移動時に循環が発生したかどうかを示すＥＡＤの循環ビット。
ｒｏｗ（１：４）：命令のＥＡ（０：５６）を決定するために使用される１４エントリのＥＡＤへのインデックス。
ｏｆｆｓｅｔ（０：４）：命令のＥＡのビット５７：６１。
【００８３】
図５は、本発明の１つまたは複数の実施形態に従う例示的な実効実テーブル（ＥＲＴ）構造を示している。１つまたは複数の例では、ＥＲＴ２５５が合計で１２８個のエントリを含んでいるが、他の例では、エントリの総数が異なることができるということ、およびさらに、エントリの数が選択可能またはプログラム可能であってよいということに注意するべきである。さらに、ＬＳＵが別々スレッドを介して２つの命令を並列に実行する場合、ＬＳＵは、それぞれ６４個（半分）のエントリを含む、ＥＲＴ２５５の２つのインスタンス（例えば、ＥＲＴ０およびＥＲＴ１）を維持する。以下では、特に指定されない限り、これらのインスタンスのいずれか１つについて説明する。
【００８４】
ＥＲＴ２５５は、有効なＥＲＴエントリを含み、一般に、Ｌ１  Ｉ−キャッシュもしくはＤ−キャッシュ・ディレクトリ（ＥＡＤ２９０）、あるいはＳＲＱエントリまたはＬＲＱＦエントリまたはＬＭＱエントリ内のアクティブなページに対して存在する。言い換えると、ＥＲＴ２５５は、ＬＳＵおよびＩＦＵ（Ｌ１  ＤＣ、ＳＲＱ、ＬＲＱＥ、ＬＲＱＦ、ＬＭＱ、ＩＣ）内のアクティブなすべてのＲＰＮのテーブルである。１つまたは複数の例では、プロセッサ１０６がＳＴモードで動作している場合、ＥＲＴ２５５内のすべてのエントリが、実行されている単一のスレッドに使用される。代替として１つまたは複数の例では、ＥＲＴ２５５内のエントリが複数のセットに分割され、ＳＴモードでは、各セットが同じ内容を含む。例えば、ＥＲＴ２５５が合計で１２８個のエントリを含んでおり、最大２つのスレッドをサポートする場合、プロセッサがＳＴモードで動作しているときに、ＥＲＴ２５５は、それぞれ６４個のエントリの２つのセットを含み、それら２つのセットは同じ内容を含む。
【００８５】
代替として、プロセッサ１０６がＭＴモードで動作している場合、ＥＲＴエントリが、実行されているスレッド間で分割される。例えば、２つのスレッドの場合、ＥＲＴエントリが２つの等しいセットに分割され、エントリの第１のセットが第１のスレッドに関連付けられ、エントリの第２のセットが第２のスレッドに関連付けられる。例えば、ＬＤ０パイプのＬ１の１つのコピーが失敗し、ＳＴ０パイプが、Ｔ０／Ｔ２  Ｉ−フェッチ：ＥＲＴ０を開始して、ＳＭＴ２モードでＴ０を処理し、ＳＭＴ４モードでＴ０／Ｔ２を処理し、ＬＤ１パイプのＬ１の１つのコピーが失敗し、ＳＴ１パイプが、Ｔ１／Ｔ３  Ｉ−フェッチ：ＥＲＴ１を開始して、ＳＭＴ２モードでＴ１を処理し、ＳＭＴ４モードでＴ１／Ｔ３を処理する。
【００８６】
１つまたは複数の例では、各ＥＲＴエントリが、少なくとも、ＥＲＴ＿ＩＤ（０：６）、Ｔｉｄ＿ｅｎ（０：１）、ページ・サイズ（０：１）、ＥＡ（０：５１）、およびＲＡ（８：５１）というＥＲＴフィールドを含む。ＥＲＴ＿ＩＤフィールドは、ＥＲＴエントリごとの一意のインデックスである。例えば、ＥＲＴ＿ＩＤは、ＥＲＴエントリを識別する連続的番号を含んでよい。ＥＲＴ＿ＩＤは、ＥＡＤ２９０のＥＲＴ＿ＩＤフィールド２８５、およびＬＳＵによって使用される他のデータ構造に格納される。ＴＩＤ＿ｅｎフィールドは、エントリが、ＭＴモードで使用されることに対して有効化されているかどうかを示し、１つまたは複数の例では、ＥＲＴエントリを使用している命令のスレッド識別子を示す。さらに、ページ・サイズは、ＥＲＴエントリが参照するメモリのページ・サイズを示す。ＲＡは、ＥＲＴエントリに関連付けられた実アドレスを含む。
【００８７】
ＲＡが命令の実行を完了するために使用される場合、ＬＳＵはＥＲＴ２５５のみを参照する。本明細書において説明されているように、ＥＲＴ２５５は、１．Ｉフェッチ、読み込み、または格納がＬ１キャッシュに失敗する、２．コア内の別のスレッドからの格納、３．別のコアからのスヌープ（ＸＩ）、ならびに４．ＴＬＢおよびＳＬＢの無効化という４つの機能に関して、ＬＳＵによって参照される。
【００８８】
Ｉフェッチ、読み込み、または格納がＬ１キャッシュに失敗する第１のケースでは、ＥＡおよびｔｈｒｅａｄ＿ｉｄが、ＥＲＴ２５５のインデックスを指すために使用され、有効なＥＲＴエントリが存在する場合、対応するＥＲＴエントリからのＲＡがＬ２キャッシュに送信される。ＥＲＴの失敗、すなわち、ＥＡおよびｔｈｒｅａｄ＿ｉｄの有効なＥＲＴエントリが存在しない場合、ＳＬＢ／ＴＬＢが使用される。
【００８９】
コア内の別のスレッドからの格納の第２のケースでは、ＳＲＱから排出された格納が、ＥＲＴ２５５をチェックする。異なるスレッドからのヒットが存在しない場合、同じＲＡを使用している別のスレッドからの読み込みが存在しない。同じＲＡを使用している異なるスレッドからのヒットが存在する場合、ＬＳＵがＬＲＱをチェックする。まれではあるが、別のスレッドによってＲＡが使用される場合、別のスレッドからのヒットが存在する。それに応じて、ＬＳＵが、共通のＲＡに関連するＥＡを検出するために、ＥＲＴテーブル４００を検索する。次にＥＡが、一致に関してＬＲＱを調べるために使用される（そのサイクル内の格納の発行を拒否する）。ＬＲＱがスレッドごとに分割されるため、ＬＳＵは関連するスレッドのＬＲＱのみを調べる。一致する読み込みがＬＲＱ内に存在する場合、ＬＳＵが、一致する読み込みのうちの最も古い読み込みをフラッシュする。
【００９０】
プロセッサの別のコアからのスヌープの第３のケースでは、ＬＳＵが第２のケースと同様に動作し、実行されている他のスレッドのいずれかからのヒットに関してチェックする。ＴＬＢ／ＳＬＢが無効化されるケースでは、ＥＲＴ２５５も無効化される。
【００９１】
ＬＲＱＦ２１８は、ＥＲＴテーブル４００と共に、ＬＨＬ、ＳＨＬ、およびＬＨＳなどのハザードを検出して処理するために使用される。例えば、ＳＨＬ検出に関して、各格納命令がＬＲＱＦ２１８に対してチェックされ、格納命令と同じＥＡの読み込み命令がＬＲＱＦ２１８内に存在する場合、ＩＦＵ内のその格納命令およびその格納命令からの他のエントリがフラッシュされるか、またはＬＲＱＦ２１８からの読み込み命令がフラッシュされる。さらに、ＤＣＢ命令の場合、ＳＨＬのケースに関して、命令がＬＲＱＦ２１８に対してチェックされ、ＤＣＢ後の読み込みおよびすべてのものがフラッシュされるか、または読み込みがフラッシュされる。システム１００が処理するデータ・セットごとに、対応するデータ制御ブロック（ＤＣＢ：data control block）およびデータ定義（ＤＤ：datadefinition）ステートメントまたはその同等の動的割り当てが構成される。
【００９２】
さらに、１つまたは複数の例では、データが、（例えば、新しいプロセスの呼び出しまたはコンテキスト切り替えに応答して）システム・メモリ内の物理ストレージ位置に移動されるとき、および物理ストレージ位置から移動されるときに、ＴＬＢ内のエントリが、新しいデータの存在を反映するように更新され、システム・メモリから削除された（例えば、不揮発性マス・ストレージにページアウトされた）データに関連付けられたＴＬＢエントリが無効化されなければならない。通常、ＴＬＢエントリの無効化は、ソフトウェアの責任であり、明示的なＴＬＢエントリ無効化命令（例えば、ＰＯＷＥＲ（ＴＭ）命令セット・アーキテクチャ（ＩＳＡ：instruction set architecture）におけるＴＬＢＩＥ）の実行によって達成される。ＬＲＱＦ２１８は、ＴＬＢＩＥ命令がＬＲＱＦ２１８内のエントリにマーク付けすることを容易にすることによって、ＴＬＢＩＥのサポートを提供し、ＬＲＱＦ２１８は、有効なエントリがマーク付けされているかどうかを示す。
【００９３】
さらに、ＬＨＬ検出（順次的読み込みの一貫性）に関して、各読み込み命令がＬＲＱＦ２１８に対してチェックされ、ＬＨＬの場合に、より新しい読み込み命令がフラッシュされるか、またはより古い読み込みの後のすべてのものがフラッシュされる。
【００９４】
さらに、ｌａｒｘヒットｌａｒｘのケースに関して、各ＬＡＲＸ命令がＬＲＱＦ２１８に対してチェックされ、そのような状況が検出された場合に、より新しいＬＡＲＸ命令がフラッシュされるか、またはより古いＬＡＲＸの後のすべてのものがフラッシュされる。
【００９５】
このようにして、本明細書に記載された技術的解決策は、ＥＡのみを使用し、すべての読み込みおよび格納の経路で、（変換用のＲＡおよびＣＡＭポートを格納するための）時間およびチップ面積に関してより費用のかかるＥＡからＲＡへの変換を使用しないで、ハザード検出を容易にする。さらに、これらの技術的解決策は、改善されたタイミングでＳＨＬを検出し、時間においてＤＶＡＬを抑制することを容易にする。
【００９６】
図６は、本発明の１つまたは複数の実施形態に従う、ＬＳＵによって命令を実行するためにメモリにアクセスするための例示的な方法のフローチャートを示している。この命令は、ＯｏＯプロセッサ１０６の読み込み、格納、または命令フェッチであってよい。５０５および５１０に示されているように、命令の受信時に、ＬＳＵが、命令のパラメータを使用して、ＥＡＤ２９０がその命令に対応するエントリを含んでいるかどうかをチェックする。１つまたは複数の例では、チェックに使用されるパラメータは、特に、スレッド識別子、ページ・サイズ、ＥＡを含む。
【００９７】
ＬＳＵで、ＥＡＤ２９０内のＥＡＤヒットが発生した（すなわち、命令のＥＡがＥＡＤテーブル３００内のエントリに一致する）場合、５２０に示されているように、ＬＳＵが、一致するＥＡＤエントリの内容を読み取り、対応するＥＲＴエントリを決定する。各ＥＡＤエントリは、ＥＲＴ＿ＩＤ（０：６）フィールド２８５を含んでいる。前述したように、ＥＲＴエントリが無効化された場合、関連付けられたＥＲＴ＿ＩＤが無効化され、ＥＡＤテーブル３００内の関連付けられたすべてのエントリも無効化される。したがって、ＥＲＴ＿ＩＤフィールド２８５を使用して、読み込み／格納命令のＥＲＴエントリを検出できるため、ＥＡＤヒットはＥＲＴヒットを意味する。したがって、ＥＡＤヒットの場合、対応するＥＡＤエントリの識別後に、ＬＳＵがＥＡＤエントリからＥＲＴ＿ＩＤを読み出し、５３０に示されているように、ＳＲＱ、ＬＭＱ、またはＬＲＱＦ、あるいはその組み合わせに送信する。ＳＲＱ、ＬＭＱ、またはＬＲＱＦ、あるいはその組み合わせは、識別されたＥＡＤエントリからのＥＡを使用する。ＲＡを使用する格納命令の場合、５４０および５４５に示されているように、ＥＲＴエントリからのＲＡが、Ｌ２にアクセスするために読み出される。したがって、格納命令以外のどの場所でもＲＡが使用されないため、本明細書における技術的解決策を実装するコアは、ＥＡ専用コアと呼ばれる。
【００９８】
ここで、命令がＥＡＤ２９０において失敗するケース、すなわち、命令のＥＡに一致するエントリがＥＡＤテーブル３００内に存在しないケースについて検討する。５５０に示されているように、ｔｈｒｅａｄ＿ｉｄおよびＥＡが、ＥＲＴ２５５からの各エントリに対して比較される。５５５および５３０に示されているように、ＥＲＴヒットが発生した場合、すなわち、ＥＲＴエントリがパラメータに一致する場合、ＬＳＵがＲＡ（８：５１）をＥＲＴエントリから読み出す。読み込み要求の場合、ＬＳＵが、アクセスするためにＲＡをＬ２キャッシュに送信する（５３０）。５４０〜５４５に示されているように、格納命令の場合、ＬＳＵがＲＡをＳＲＱに格納し、その後、格納がＬ２キャッシュに排出されるときに、ＲＡをＬ２キャッシュに送信する。
【００９９】
５５５および５６０に示されているように、ＥＲＴの失敗が発生した場合、ＬＳＵがＥＲＴ２５５の再読み込みを開始する。さらに、ＥＲＴエントリの置き換えが開始される。ＥＲＴエントリの置き換えはＬＲＵに基づき、ＬＳＵは、このプロセスの間に、ＯｏＯウィンドウ内のシノニムを確実に追跡する。
【０１００】
このようにして、読み込みに関して上記の方法を実装することによって、ＥＡに基づくＬ１ディレクトリ内にＥＡヒットが存在する場合、アドレス変換が実行されない。これによって、Ｌ１ディレクトリがＲＡに基づく通常のプロセッサを改良し、Ｌ１ディレクトリでの読み込みの失敗の場合に、Ｌ２ディレクトリおよびその先に送信されるＲＡを取得する変換のために、ＥＡをＥＡＲＴテーブルに送信することを引き起こす。
【０１０１】
さらに、格納の場合、本明細書に記載された方法では、ＬＳＵが、ＥＲＴテーブルを調べてＲＡを決定する必要があり、その後、このＲＡは、格納がＳＲＱから排出されるときにキャッシュ（Ｌ１、Ｌ２、メモリ）まで排出するために、ＳＲＱＲに格納される。ＳＲＱＲは、すべてのＲＡを格納のために保持する。ＲＡは、ネスト（すなわち、Ｌ２、メモリ、およびメモリ・サブシステムのその他のユニット）に排出するためにのみ格納される。ＲＡは、通常の解決策で使用されているように、ロード・ヒット・ストア、ストア・ヒット・ロード、ロード・ヒット・ロードのいずれのタイプのＯｏＯ実行のハザード検出にも、使用されることがない。格納のためのＲＡ計算は、格納の完了後にＬＳＵが格納に関する割り込みを処理できないため、格納が完了する前に発生する（格納は、アドレス変換に関連する割り込みを生成することがあり、この割り込みは、格納が完了する前に処理される）。ここで、格納が（ＳＲＱＲから）発行されるときにＲＡ計算が実行され、このようにして、ＬＳＵがアドレス変換を実行する必要がないようにする。このようにして、格納が発行され、ＯｏＯに実行されてから、順序通りに完了し、その後、格納がＳＲＱから順序通りに排出される。格納が排出されるまで、他のスレッドまたはコアは、その格納について知らない（現在のスレッドのみが知っている）。格納がＳＲＱから排出された後に、その格納がＬ１（ラインがＬ１内にすでに存在する場合）およびＬ２キャッシュ（キャッシングが有効化されている場合）に書き込まれ、その時点で格納が、システム１００内の他のすべてのスレッドおよびコアに知られる。
【０１０２】
ＥＡに基づくＬ１  Ｉ−キャッシュに失敗した命令フェッチの場合、ＥＲＴ２５５を使用してＥＡがＲＡに変換され、Ｉ−キャッシュ・ラインをフェッチするためにＲＡがネストに送信される。ここで、ＬＨＳ（ロード・ヒット・ストア）、ＳＨＬ（ストア・ヒット・ロード）、およびＬＨＬ（ロード・ヒット・ロード）が、ＥＡに基づくＬ１キャッシュ（ＥＡＤ２９０）内のディレクトリ・エントリに格納されたＥＡおよびＥＲＴインデックスに基づいて、すべて決定される。ＥＡＤテーブル３００内のすべてのエントリは、ＥＲＴテーブル４００において有効な変換を有しており、ＬＨＳ、ＳＨＬ、およびＬＨＬが決定された後に、その変換が使用され得る。ＥＲＴエントリが無効化された場合、対応するＬ１キャッシュ・エントリが無効化される。
【０１０３】
読み込み順序変更キューであるＬＲＱＦは、ディスパッチから完了までのすべての読み込み動作が追跡されることを保証する。読み込みが（キャッシュ・ミスまたは変換失敗のため、あるいは読み込みが依存する前の命令が拒否されたために）拒否された場合、発行キューから読み込みが取り出され、ＬＲＱＥに配置され、このＬＲＱＥから読み込みが再発行される。
【０１０４】
図６は、本発明の１つまたは複数の実施形態に従う、ＥＲＴを再度読み込むための方法のフローチャートを示している。ＥＲＴの再読み込みは、ＥＲＴの失敗に応答して、ＥＲＴの失敗に基づいてＥＲＴ内のエントリの作成または更新を引き起こす。ＥＲＴは、ＥＲＴ２５５に追加されるＲＡを受信し、６０５に示されているように、そのＲＡをＥＲＴ０およびＥＲＴ１内の各エントリと比較する。６１０および６１５に示されているように、そのＲＡがＥＲＴ２５５内に存在せず、新しいエントリを作成できる場合、そのＲＡを格納するために、ＥＲＴ２５５が新しいＥＲＴ＿ＩＤを含む新しいエントリを作成する。新しいエントリは、実行中のスレッドが第１のスレッドまたは第２のスレッドであることに基づいて、それぞれＥＲＴ０またはＥＲＴ１のいずれかに作成される。プロセッサがＳＴモードで動作している場合、ＥＲＴ０が更新される。ＥＲＴ２５５が新しいエントリのための空いているスロットを含んでいない場合、６１５に示されているように、最長時間未使用またはその他の手法に基づいて、既存のエントリが置き換えられる。
【０１０５】
受信されたＲＡ（再読み込み中のＲＡ）と同じＲＡを含むＥＲＴ２５５内の既存のエントリが検出された場合、６２０に示されているように、ＥＲＴ２５５が、既存のエントリのページ・サイズ（０：１）を受信されたＲＡのページ・サイズと比較する。既存のエントリのページ・サイズが再読み込み中のＲＡのページ・サイズより小さい場合、６２５に示されているように、そのＲＡの既存のエントリがＥＲＴ２５５から除去され、より大きいページ・サイズを有するＲＡのために、新しいＥＲＴ＿ＩＤを含む新しいエントリが追加される。既存のエントリが同じページ・サイズまたはより大きいページ・サイズを有しており、実装がＳＤＴを使用している場合、６２７に示されているように、再読み込み中のＲＡのためのエントリがＳＤＴ内に作成される。
【０１０６】
既存のエントリのページ・サイズが再読み込み中のＲＡと同じサイズである場合、６３０に示されているように、ＥＲＴ２５５は、既存のエントリが実行中のスレッドのローカルＥＲＴ上にあるかどうかをチェックする。この場合、ローカルＥＲＴとは、実行されているスレッドに関連付けられているＥＲＴ（例えば、第１のスレッドの場合はＥＲＴ０、第２のスレッドの場合はＥＲＴ１）のことを指す。６３２に示されているように、ＲＡのヒットが他のＥＲＴ（すなわち、ローカルＥＲＴでないＥＲＴ）内に存在する場合、ＥＲＴ２５５が、非ローカルＥＲＴ内のＥＲＴ＿ＩＤに一致するＥＲＴ＿ＩＤを含む新しいエントリをローカルＥＲＴ内に作成する。例えば、ＲＡのヒットが、スレッド０によって実行されている命令のＥＲＴ１内に存在する場合、ＥＲＴ１内のエントリに一致するＥＲＴ＿ＩＤを含むエントリがＥＲＴ０内に作成される。
【０１０７】
ＲＡのヒットがローカルＥＲＴインスタンス上に存在し、ＥＡも一致する場合、ＥＡとＲＡの両方が既存のエントリと一致したが、このスレッドに関してＥＲＴの再読み込みを引き起こすＥＲＴの失敗が存在したため、ＥＲＴは、そのことが、２つのスレッドが同じＥＡ−ＲＡ間のマッピング（同じページ・サイズを有する）を共有しているということを示していると見なす。したがって、６３４に示されているように、再読み込みスレッドに対応するビットに関する既存の一致するエントリ内のｔｉｄ＿ｅｎ（０）ビットまたはｔｉｄ＿ｅｎ（１）ビットがオンになって、このケースを示す。
【０１０８】
６３６に示されているように、ＲＡのヒットがローカルＥＲＴインスタンス上に存在し、ＥＡが既存のエントリに一致せず、既存のエントリが、再読み込み中のＲＡと同じスレッド用である場合、ＥＲＴは、２つの異なるＥＡが同じスレッドからの同じＲＡにマッピングされる、別名化のケースを識別する。プロセッサがＳＤＴに基づく実装を使用している場合、既存の一致するエントリのＥＲＴ＿ＩＤ、ＥＡオフセット（４０：５１）にマッピングされるシノニムのエントリが、ＳＤＴに導入される。
【０１０９】
６３８に示されているように、ＲＡのヒットがローカルＥＲＴインスタンス上に存在し、ＥＡが既存のエントリに一致せず、既存のエントリが、異なるスレッド用である場合、ＥＲＴは、２つのＥＡが異なるスレッドからの同じＲＡにマッピングされる、別名化のケースを識別する。プロセッサがＳＤＴに基づく実装を使用している場合、既存の一致するエントリのＥＲＴ＿ＩＤ、ＥＡオフセット（４０：５１）にマッピングされるシノニムのエントリが、ＳＤＴに導入される。
【０１１０】
上記の方法は、ＳＤＴに基づく実装において、２つのスレッドが同じＲＡを有しているが異なるＥＡを有している場合に、変換のうちの１つがＥＲＴエントリを使用し、他の変換がＳＤＴエントリを使用するということを、容易にする。したがって、ＥＲＴエントリは、ｔｉｄ＿ｅｎフィールドをＥＲＴエントリ内に含むことによって、同じＥＡおよび同じＲＡが異なるスレッドにわたって使用されるというケースを容易にする。例えば、ＥＲＴ０インスタンスではＴｉｄ＿ｅｎ（０：１）＝｛ｔｉｄ  ０  ｅｎ，  ｔｉｄ  １  ｅｎ｝、ＥＲＴ１インスタンスではＴｉｄ＿ｅｎ（０：１）＝｛ｔｉｄ  １  ｅｎ，  ｔｉｄ  １  ｅｎ｝というようになる。さらに、ＥＲＴエントリは、複数のエントリを各スレッド識別子と共にＥＲＴ０およびＥＲＴ１内に含むことによって、同じＥＡが異なるスレッドにわたって異なるＲＡに対応するというケースを容易にする。ＥＲＴエントリは、同じＲＡに対応する異なるＥＡを伴うケース（同じスレッドまたは異なるスレッドのケース）もサポートする。ここで、ＳＤＴを使用する実装に基づいて、２つのケースが説明される。
【０１１１】
ＥＲＴの再読み込み時に、同じＲＡに対応する異なるＥＡを含む新しい命令が検出されたときに、ＬＳＵは、ＥＲＴ２５５の代わりにＳＤＴにエントリを導入する。元の（前の）ＥＲＴエントリのＥＡを使用してＳＤＴのヒットが再開する。新しいシノニムのページ・サイズが、一致するＲＡを含む既存のＥＲＴエントリ内のページ・サイズより大きい場合、シノニムをＳＤＴに導入する代わりに、既存のＥＲＴエントリが（より大きいページ・サイズを有する）新しいシノニムに置き換えられる。古いＥＲＴエントリは、最終的にシノニムとしてＳＤＴに再導入される。
【０１１２】
さらに、ＥＲＴのケースを再び参照し、ＬＳＵがプロセッサ１０６の別のコアからスヌープを受信する場合について考える。スヌープは、システム内の異なるコアから来る可能性がある（スヌープは、別のコアまたはスレッドを示し、同じ実アドレスでデータを変更している）。ＬＳＵは、コア内の他のスレッドへの可能性のあるスヌープとして、コア内のスレッドからのからの格納もチェックする。すべての（他のコアからの）スヌープまたは（コア内の他のスレッドからの）格納は、ＲＡを伴う。そのような場合、ＬＳＵは、ＲＡを逆変換し、ＥＲＴ２５５に基づいて、対応するＥＡ、ＥＲＴ＿ＩＤ、およびページ・サイズを決定する。ＬＳＵは、この情報を、次の構造の各々に格納されたＥＲＴ＿ＩＤ、ＰＳ、ＥＡ（４０：５６）と比較して、スヌープのヒットを検出し、適切な動作を実行する。例えば、ＬＲＱＦエントリにおいてスヌープのヒットが検出された場合、ＬＳＵは、可能性のあるロード・ヒット・ロードのアウトオブオーダーのハザードを示す。ＥＡＤ２９０においてスヌープのヒットが検出され、スヌープが異なるコアからである場合、ＬＳＵがＬ１の無効化を開始する。格納が共有ラインに対する別のスレッドからである場合、ラインが新しい格納を自動的に取得し、更新される。
【０１１３】
ＬＳＵがＳＤＴを使用し、スヌープのヒットがＬＭＱに存在する場合、ＬＳＵは、Ｌ１  Ｄキャッシュに格納しないようにＬＭＱエントリも更新し、ＳＲＱエントリがＳＲＱ内のスヌープに使用されず、ＬＨＳのＥＡがＲＡのヒットに失敗する形式のチェックのみに使用され、新しいＳＤＴエントリがスヌープのヒットに対して作成される。
【０１１４】
したがって、前述したように、本明細書に記載された実行フローでの、ＥＡのみに基づくＬＳＵに伴う技術的課題は、スレッドでのＥＡのシノニムの技術的課題である。例えば、同じスレッドのＥＡのシノニムである（すなわち、１つのスレッドからの２つの異なるＥＡが同じＲＡにマッピングされる）。そのような技術的課題は、ＯｏＯウィンドウが、次のように少なくとも２つのＬ１のアクセスを含んでいる場合、ＬＨＳ、ＳＨＬ、ＬＨＬにわたることがある。
Ｔｉｄ＝ｗ、ＥＡ（０：５１）＝ｘ＝＞ＲＡ（８：５１）＝ｚ、および
Ｔｉｄ＝ｗ、ＥＡ（０：５１）＝ｙ＝＞ＲＡ（８：５１）＝ｚ
【０１１５】
本明細書に記載された技術的解決策は、ＬＳＵの別のサブユニットであるＳＤＴを使用することによって、技術的課題に対処する。１つまたは複数の例では、ＳＤＴは、異なるＥＡが同じＲＡを有しているケースを処理するために、１６個のエントリを含む。そのような異なるＥＡは、すべて同じＲＡに変換されるため、シノニムと呼ばれる。ＳＤＴは、ＬＳＵ内のそのようなシノニムのテーブルである。ＳＤＴは、ＥＲＴの失敗時に、ＡＧＥＮ（アドレス生成）でアクセスされる。１つまたは複数の例では、ａｇｅｎであるＬ／Ｓ動作のスレッドに対して有効なＳＤＴエントリが存在するなどの場合にのみ、制限付きでＳＤＴがアクセスされてよい。
【０１１６】
図８は、本発明の１つまたは複数の実施形態に従うシノニム検出テーブル（ＳＤＴ）８００の例示的な構造を示している。描かれた例は、１６個のエントリを含む場合を示しているが、他の例では、ＳＤＴ８００がこの例とは異なる数のエントリを含んでよいということに、注意するべきである。ＳＤＴ８００内のエントリは、少なくとも、発行アドレス｛発行Ｔｉｄ（０：１），  発行ＥＡ（０：５１）｝、ページ・サイズ（０：１）（例えば、４ｋ、６４ｋ、２ＭＢ、１６ＭＢ）、および再開アドレス｛ＥＡ（４０：５１），  ＥＲＴ  ＩＤ（０：６）｝のフィールドを含む。１つまたは複数の例では、各エントリが、ＳＤＴエントリが有効であるかどうかを示す「有効性」フィールド（図示されていない）を含んでもよい。開始がＬ１に失敗する命令の場合、ＬＳＵは、命令をＳＤＴ８００に対して比較する。開始された命令が、元のアドレスの比較でＳＤＴにヒットした場合、ＬＳＵが命令を拒否し、ＳＤＴエントリからの対応する置換アドレスを使用して命令を再開する。例えば、ＬＳＵは、置換アドレス（４０：５１）をＳＲＱ  ＬＨＳに使用し、実行パイプライン内のＥＲＴ  ＩＤを「強制的に一致させる」。
【０１１７】
本明細書において説明されているように、ＥＲＴの再読み込み中に、エントリがＳＤＴ８００に追加される。例えば、ＥＲＴの再読み込み中に、再読み込みＲＡが、有効なＥＲＴエントリに対して比較される。一致するＲＡを含むＥＲＴエントリがすでに存在し、追加のｔｉｄ＿ｅｎビットのみが元のＥＲＴエントリに設定されているＥＡのヒットのケースでない場合、既存のＥＲＴエントリからＥＡ（３２：５１）が読み取られ、エントリをＥＲＴ２５５に追加する代わりに、エントリがＳＤＴ８００に導入される。
【０１１８】
ＳＤＴ８００はエントリ数が制限されているため、エントリが置き換えられる。１つまたは複数の例では、最長時間未使用（ＬＲＵ：least recently used）手法または任意のその他の手法に基づいて、エントリが置き換えられる。１つまたは複数の例では、ＳＤＴエントリが置き換えられる場合、二次アドレスを使用するその後の開始が、ＳＤＴエントリの導入シーケンスを再トリガーする。さらに、ＣＡＭは、無効化されたＥＲＴエントリに一致するＥＲＴ  ＩＤを含むＳＤＴエントリを消去する。
【０１１９】
図９は、本発明の１つまたは複数の実施形態に従う、ＥＲＴおよびＳＤＴ  ＥＡの交換を実行するための方法のフローチャートを示している。１つまたは複数の例では、ＥＲＴエントリおよびＳＤＴエントリが同じページ・サイズを有している場合に、ＬＳＵが交換を実行する。この交換によって、同じスレッドまたは異なるスレッドの異なる命令で、異なるＥＡが同じＲＡに対応する場合に、プロセッサ１０６の効率を改善する。例えば、ＥＡｘ＝＞ＲＡｚ、およびＥＡｙ＝＞ＲＡｚとなるような２つの命令ｘおよびｙについて考える。最初に、ＥＡｘがＥＲＴに失敗した場合、すなわち、ＥＡｙの前に、本明細書において説明されているように、ＬＳＵが、ＲＡｚへのＥＡｘのマッピングを含むＥＲＴエントリを導入する。その後、ＥＡｙがＥＲＴに失敗した場合、ＬＳＵが、ＲＡｚを使用してＥＲＴを検索し、ＲＡにヒットし、元のアドレス＝ＥＡｙ、置換アドレス＝ＥＡｘを含むエントリをＳＤＴ８００に導入する。
【０１２０】
ここで、その後のほとんどのＲＡｚへのアクセスがＥＡｙを伴う場合、ＬＳＵは、ＥＡＤ自体を使用するよりも頻繁にＳＤＴを使用する必要がある。１つまたは複数の例では、そのような頻繁なＳＤＴへの参照を減らすことによってＬＳＵの効率を改善するための技術的解決策は、各ＳＤＴエントリ内のカウンタをインクリメントすることを含む。図８の８１０に示されているように、ＬＳＵは、ＳＤＴエントリからのＥＲＴ  ＩＤに一致するＥＲＴ  ＩＤを含む命令を開始する。ＳＤＴエントリのＥＲＴ  ＩＤが一致する場合、８２０に示されているように、ＬＳＵは、開始された命令のＥＡをＳＤＴエントリ内の元のＥＡとさらに比較する。８３０および８３５に示されているように、ＳＤＴエントリが、命令からのＥＡに一致する元のアドレス値を含んでいる場合、ＳＤＴエントリのカウンタがインクリメントされる。８４０に示されているように、開始された命令が、ＳＤＴエントリの元のアドレスと異なるＥＡを含んでいる場合、ＳＤＴエントリのカウンタがリセットされる。
【０１２１】
１つまたは複数の例では、カウンタが４ビットのフィールドであり、１５の最大値を意味する。他の例では、しきい値として使用されるフィールドが異なる長さであるか、または異なる最大値を有するか、あるいはその両方であるということが、理解されるべきである。例えば、８４５および８５０に示されているように、命令が開始された後に、カウンタ値がしきい値と比較される。カウンタがしきい値未満である場合、説明されたように、ＬＳＵが動作を続行する。カウンタがしきい値を超えたか、または場合によっては、しきい値に等しい場合、８６０に示されているように、ＬＳＵがＳＤＴエントリに対応するＥＲＴエントリを無効化する。例えば、ＳＤＴエントリからのＥＲＴ  ＩＤを含むＥＲＴエントリが無効化される。ＥＲＴエントリの無効化は、ＥＡディレクトリ、ＬＲＱＦ、ＬＭＱ、およびＳＲＱからの対応するエントリの無効化を引き起こす。
【０１２２】
さらに、ＬＳＵは、以下の方法で、終了するために元のＥＡを必要とする開始された命令における例外の技術的課題に対処する。例えば、開始された命令がＳＤＴにヒットし、元の開始アドレスの代わりにＳＤＴエントリからの置換アドレスを使用して再開したいが、終了するために元のＥＡを必要とする例外が選択された場合について考える。そのような条件は、ＤＡＷＲ／ＳＤＡＲなどの場合に発生することがある。
【０１２３】
本明細書に記載された技術的解決策を実装するＬＳＵは、元のアドレスをＬＲＱＥ内のキューに維持することによって、そのような技術的課題に対処する。ＬＲＱＥは、ＬＲＱＥエントリごとに、ＳＤＴヒット・フラグ（ビット）、ＳＤＴインデックス（０：３）も維持する。再開時に、置換アドレスを取得するために、１サイクル早くＳＤＴインデックスが読み取られる。ＬＲＱＥは、再開の前に、ＬＲＱＥエントリのアドレス（元のアドレス）とＳＤＴの（ＳＤＴから読み取られた）置換アドレスとの間で、さらに多重化する。終了するために元のアドレスが必要になる、上記のような例外ケースの場合、ＬＲＱＥは、ＤＡＷＲの部分一致などで設定されたエントリごとに、追加のＳＤＴヒット・オーバーライド・フラグ（ビット）を含む。ＬＲＱＥは、例外と共に終了するＳＤＴのヒットが存在したケースを再開し、元のアドレスを強制的に開始する。ＳＲＱの再開は、本明細書において説明されているＬＲＱＥの再開と同様であり、再開の前に例外と共に終了することが決定された場合、ＳＤＴヒット・オーバーライド・フラグが使用される。
【０１２４】
本明細書に記載された技術的解決策は、このようにして、ＥＡのみを使用することを容易にし、読み込み／格納経路においてＥＡＲＴ（通常はプロセッサによって使用されていた）が参照されず、さらに、ＳＨＬの検出および時間におけるＤＶＡＬの抑制がタイミング問題を引き起こさないように、技術的優位性を実現する。さらに、本明細書に記載された技術的解決策は、ＥＡのみを使用することに伴う技術的問題、例えば、２つの異なるＥＡが同じＲＡにマッピングされた場合に、ＬＨＳ、ＳＨＬ、ＬＨＬの検出が失敗することがあるなどの問題に対処する。本明細書に記載された技術的解決策は、シノニム検出テーブル（ＳＤＴ）のいずれかをＯｏＯウィンドウ内の命令に使用することによって、そのような技術的問題に対処する。これらの技術的解決策は、特に、チップ面積の削減（ＲＡを格納しないことによる）、電力消費の削減（ＥＡ−ＲＡを変換しないことによる）、および待ち時間の改善を含む、さまざまな技術的優位性を実現する。
【０１２５】
ここで、本発明の１つまたは複数の実施形態の一部または全部の態様を実装するためのコンピュータ・システム１０００のブロック図である図１０を参照する。本明細書に記載された処理は、ハードウェア、ソフトウェア（例えば、ファームウェア）、またはハードウェアとソフトウェアの組み合わせにおいて実装されてよい。実施形態例では、記載された方法は、少なくとも一部においてハードウェアに実装されてよく、モバイル・デバイス、パーソナル・コンピュータ、ワークステーション、マイクロコンピュータ、またはメインフレーム・コンピュータなどの、専用または汎用コンピュータ・システム１０００のマイクロプロセッサの一部であってよい。
【０１２６】
実施形態例では、図１０に示されているように、コンピュータ・システム１０００は、プロセッサ１００５、メモリ・コントローラ１０１５に結合されたメモリ１０１２、および１つまたは複数の入力デバイス１０４５、またはローカルＩ／Ｏコントローラ１０３５を介して通信によって結合された周辺機器などの出力デバイス１０４７、あるいはその組み合わせを含む。これらのデバイス１０４７および１０４５は、例えば、プリンタ、スキャナ、マイクロホンなどを含んでよい。従来のキーボード１０５０およびマウス１０５５は、Ｉ／Ｏコントローラ１０３５に結合されてよい。Ｉ／Ｏコントローラ１０３５は、例えば、１つまたは複数のバスあるいは従来技術において知られたその他の有線接続または無線接続であってよい。Ｉ／Ｏコントローラ１０３５は、簡単にするために省略されている、通信を可能にするためのコントローラ、バッファ（キャッシュ）、ドライバ、リピータ、およびレシーバなどの追加の要素を含んでよい。
【０１２７】
Ｉ／Ｏデバイス１０４７、１０４５は、例えばディスク・ストレージおよびテープ・ストレージ、ネットワーク・インターフェイス・カード（ＮＩＣ：network interface card）または変調器／復調器（他のファイル、デバイス、システム、またはネットワークにアクセスするため）、無線周波（ＲＦ：radio frequency）またはその他のトランシーバ、電話インターフェイス、ブリッジ、ルータなどの、入力および出力の両方と通信するデバイスをさらに含んでよい。
【０１２８】
プロセッサ１００５は、ハードウェア命令またはソフトウェア、具体的には、メモリ１０１２に格納されたソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ１００５は、カスタムメイドであるか、または市販されたプロセッサ、中央処理装置（ＣＰＵ：central processing unit）、コンピュータ・システム１０００に関連付けられた複数のプロセッサ間の補助プロセッサ、（マイクロチップまたはチップ・セットの形態での）半導体ベースのマイクロプロセッサ、マクロプロセッサ、または命令を実行するためのその他のデバイスであってよい。プロセッサ１００５は、実行可能命令のフェッチを高速化するための命令キャッシュ、データのフェッチおよび格納を高速化するためのデータ・キャッシュ、および実行可能命令とデータの両方の仮想アドレスから物理アドレスへの変換を高速化するために使用されるトランスレーション・ルックアサイド・バッファ（ＴＬＢ：translation look-aside buffer）などのキャッシュを含むことができるが、これらに限定されない。キャッシュは、さらに多くのキャッシュ・レベル（Ｌ１、Ｌ２など）の階層として構造化されてよい。
【０１２９】
メモリ１０１２は、揮発性メモリ素子（例えば、ＤＲＡＭ、ＳＲＡＭ、ＳＤＲＡＭなどのランダム・アクセス・メモリ（ＲＡＭ：random access memory））および不揮発性メモリ素子（例えば、ＲＯＭ、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read only memory）、電子的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ：electronically erasable programmable read only memory）、プログラマブル読み取り専用メモリ（ＰＲＯＭ：programmable read only memory）、テープ、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read only memory）、ディスク、フロッピー（Ｒ）・ディスク、カートリッジ、カセットなど）のうちの１つまたは組み合わせを含んでよい。さらに、メモリ１０１２は電子、磁気、光、またはその他の種類のストレージ媒体を組み込んでよい。メモリ１０１２が、さまざまなコンポーネントが互いに遠く離れた位置にあるが、プロセッサ１００５によってアクセスされてよい、分散アーキテクチャを含むことができるということに注意する。
【０１３０】
メモリ１０１２内の命令は、１つまたは複数の別々のプログラムを含んでよく、それらのプログラムの各々は、論理的機能を実装するための実行可能命令の順序付けられたリストを含む。図１０の例では、メモリ１０１２内の命令は、適切なオペレーティング・システム（ＯＳ：operating system）１０１１を含む。オペレーティング・システム１０１１は、基本的に他のコンピュータ・プログラムの実行を制御することができ、スケジューリング、入出力制御、ファイルおよびデータの管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
【０１３１】
例えば、プロセッサ１００５の命令またはその他の取り出し可能な情報を含む追加データが、ストレージ１０２７に格納されてよく、ストレージ１０２７はハード・ディスク・ドライブまたは半導体ドライブなどのストレージ・デバイスであってよい。メモリ１０１２またはストレージ１０２７に格納される命令は、プロセッサ１００５が本開示のディスパッチ・システムおよび方法の１つまたは複数の態様を実行できるようにする命令を含んでよい。
【０１３２】
コンピュータ・システム１０００は、ディスプレイ１０３０に結合されたディスプレイ・コントローラ１０２５をさらに含んでよい。実施形態例では、コンピュータ・システム１０００は、ネットワーク１０６５に結合するためのネットワーク・インターフェイス１０６０をさらに含んでよい。ネットワーク１０６５は、コンピュータ・システム１０００と、外部サーバ、クライアントなどとの間での、ブロードバンド接続を介した通信用のＩＰベースのネットワークであってよい。ネットワーク１０６５は、コンピュータ・システム１０００と外部システムの間で、データを送受信する。実施形態例では、ネットワーク１０６５は、サービス・プロバイダによって管理された管理ＩＰネットワークであってよい。ネットワーク１０６５は、例えば、ＷｉＦｉ、ＷｉｎＭａｘなどの無線プロトコルおよび無線技術を使用して、無線方式で実装されてよい。ネットワーク１０６５は、ローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット、またはその他の類似する種類のネットワーク環境などの、パケット交換ネットワークであってもよい。ネットワーク１０６５は、固定無線ネットワーク、無線ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、無線広域ネットワーク（ＷＡＮ：wide areanetwork）、パーソナル・エリア・ネットワーク（ＰＡＮ：personal area network）、仮想プライベート・ネットワーク（ＶＰＮ：virtual private network）、インターネット、またはその他の適切なネットワーク・システムであってよく、信号を送受信するための機器を含むことができる。
【０１３３】
実アドレスを実効アドレスに基づく読み込み／格納ユニット内のメモリ・サブシステムに送信するためのアドレス変換を提供するシステムおよび方法が、コンピュータ・プログラム製品において、または図１０に示されているようなコンピュータ・システム１０００において、全体的または部分的に具現化され得る。
【０１３４】
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲を逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係（例えば、上、下、隣接など）が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、各実体の結合は、直接的結合または間接的結合を指すことができ、各実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
【０１３５】
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、または装置に固有の、その他の要素を含むことができる。
【０１３６】
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも１つ」および「１つまたは複数」という用語は、１以上の任意の整数（すなわち、１、２、３、４など）を含んでいると理解されてよい。「複数」という用語は、２以上の任意の整数（すなわち、２、３、４、５など）を含んでいると理解されてよい。「接続」という用語は、間接的「接続」および直接的「接続」の両方を含んでよい。
【０１３７】
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±８％または５％、あるいは２％の範囲を含むことができる。
【０１３８】
簡潔さの目的で、本発明の態様の作成および使用に関連する従来手法は、本明細書に詳細に記載されることもあれば、記載されないこともある。具体的には、本明細書に記載されたさまざまな技術的特徴を実装するためのコンピューティング・システムおよび特定のコンピュータ・プログラムのさまざまな態様は、よく知られている。したがって、簡潔さのために、多くの従来の実装に関する詳細は、本明細書では、既知のシステムまたは工程あるいはその両方の詳細を提供することなく、簡潔にのみ述べられるか、または全体的に省略される。
【０１３９】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０１４０】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー（Ｒ）・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-onlymemory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasableprogrammable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【０１４１】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０１４２】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide areanetwork）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０１４３】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０１４４】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０１４５】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施するように、コンピュータ実装プロセスを生成するべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行させるものであってもよい。
【０１４６】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０１４７】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に制限されない。記載された実施形態の範囲および思想を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。
【図１】
2020536310.tif 000003
【図２】
2020536310.tif 000004
【図３】
2020536310.tif 000005
【図４】
2020536310.tif 000006
【図５】
2020536310.tif 000007
【図６】
2020536310.tif 000008
【図７】
2020536310.tif 000009
【図８】
2020536310.tif 000010
【図９】
2020536310.tif 000011
【図１０】
2020536310.tif 000012
【国際調査報告】
2020536310.tif 000013
2020536310.tif 000014