(57)【要約】  セット・アソシエイティブ・キャッシュ・メモリは、Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて記憶要素を割り当てる割当ユニットとを備える。各メモリ・アクセスは、複数のパーセルのパーセルごとに１つのセットを選択し、パーセル指定子は、パーセルに含まれるＮ個のウェイのうちのウェイのサブセットを指定する。選択セットと関連付けられたパーセルのウェイのサブセットは互いに排他的であり、パーセル指定子は、複数の既定の置換スキームの中からパーセルと関連付けられた置換スキームを指定する。メモリ・アクセスごとに、割当ユニットは、メモリ・アクセスに応じてパーセル指定子を選択し、パーセルと関連付けられた置換スキームを使用して、パーセル内に含まれる選択セットのウェイのサブセット内に割り当てる。
2017507443.tif 000002
【特許請求の範囲】
【請求項１】
セット・アソシエイティブ・キャッシュ・メモリであって、
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、
前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと、
パーセル指定子であって、複数のパーセルのパーセルごとに、
前記パーセルに含まれる前記Ｎ個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また
複数の既定の置換スキームの中から前記パーセルと関連付けられた置換スキームを指定する前記パーセル指定子と
を備え、
前記メモリ・アクセスのメモリ・アクセスごとに、前記割当ユニットが、
前記メモリ・アクセスに応じて前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を選択し、また
前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てる、
セット・アソシエイティブ・キャッシュ・メモリ。
【請求項２】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記パーセル指定子がさらに、前記複数の既定のＭＡＴのうちの１つ又は複数を前記パーセルと関連付け、
前記割当ユニットが、前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を前記メモリ・アクセスの前記ＭＡＴに基づいて選択する、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項３】
前記メモリ・アクセスと関連付けられた前記ＭＡＴが、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイの前記サブセット内に割り当てるために前記割当ユニットで使用される前記置換スキームへの入力になる、請求項２に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項４】
前記Ｎ個のセットのセットごとに、関連付けられた置換ビットをさらに備え、
前記パーセル指定子がさらに、前記パーセルと関連付けられた前記置換ビットの一部分を指定し、
前記割当ユニットが、前記置換スキームと、前記パーセルと関連付けられた前記置換ビットの前記一部分とを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てる、
請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項５】
前記複数のパーセルが、前記アレイの前記Ｍ個のセットのすべてのセットに対しグローバルである、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項６】
前記Ｍ個のセットの各セットが、Ｌ個の互いに排他的なセット・グループのうちの１つと関連付けられ、
前記Ｌ個の互いに排他的なセット・グループのそれぞれが、対応する複数のパーセルを有する、
請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項７】
前記Ｍ個のセットの各セットが、対応する複数のパーセルを有する、
請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項８】
前記複数のパーセルのうちの少なくとも１つのパーセルと関連付けられた前記置換スキームが、前記複数のパーセルのうちの他のものと関連付けられた前記置換スキームとは異なる、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項９】
前記複数のパーセルの前記パーセル指定子が、前記キャッシュ・メモリの動作中に動的に更新可能である、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項１０】
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、セット・アソシエイティブ・キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットとを有する、前記キャッシュ・メモリを動作させる方法であって、
複数のパーセルのパーセルごとにパーセル指定子を格納するステップであって、前記パーセル指定子が、
前記パーセルに含まれる前記Ｎ個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また
複数の既定の置換スキームの中から、前記パーセルと関連付けられた置換スキームを指定する、ステップと、
前記メモリ・アクセスのメモリ・アクセスごとに、
前記メモリ・アクセスに応じて前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を選択するステップと、
前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てるステップと
を含む、方法。
【請求項１１】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記パーセル指定子がさらに、前記複数の既定のＭＡＴのうちの１つ又は複数を前記パーセルと関連付け、
前記パーセル指定子を選択する前記ステップが、前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を前記メモリ・アクセスの前記ＭＡＴに基づいて選択する、請求項１０に記載の方法。
【請求項１２】
前記メモリ・アクセスと関連付けられた前記ＭＡＴが、前記パーセルに含まれる前記選択セットのＮ個のウェイの前記サブセット内に割り当てるために前記割当ユニットで使用される前記置換スキームへの入力になる、請求項１３に記載の方法。
【請求項１３】
前記キャッシュ・メモリがさらに、関連付けられた置換ビットを前記Ｎ個のセットのセットごとに含み、前記パーセル指定子がさらに、前記パーセルと関連付けられた前記置換ビットの一部分を指定し、当該方法がさらに、
前記置換スキームと、前記パーセルと関連付けられた前記置換ビットの前記一部分とを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てるステップ
を含む、請求項１３に記載の方法。
【請求項１４】
前記複数のパーセルの前記パーセル指定子を前記キャッシュ・メモリの動作中に更新するステップ
をさらに含む、請求項１３に記載の方法。
【請求項１５】
プログラムが前記プロセッサ上で走っていることを判定するステップであって、前記パーセル指定子が前記プログラムのオフライン解析によって判定される、ステップと、
前記プログラムが前記プロセッサ上で走っていることを判定する前記ステップに応じて、前記複数のパーセルの前記パーセル指定子を更新する前記ステップと
をさらに含む、請求項１４に記載の方法。
【請求項１６】
セット・アソシエイティブ・キャッシュ・メモリであって、
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、
前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと
を備え、
前記割当ユニットが、前記選択セットの前記Ｎ個のウェイの第１のサブセット内に割り当てるときには第１の置換スキームを使用し、前記選択セットの前記Ｎ個のウェイの第２のサブセット内に割り当てるときには第２の置換スキームを使用し、
前記第１と第２の置換スキームが異なる、
セット・アソシエイティブ・キャッシュ・メモリ。
【請求項１７】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記メモリ・アクセスと関連付けられた前記ＭＡＴが、前記選択セットの前記Ｎ個のウェイの前記第１のサブセット内に割り当てるときに前記割当ユニットで使用される前記第１の置換スキームへの入力になる、請求項１６に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項１８】
前記複数の既定のＭＡＴが下記のリスト、すなわち、
前記プロセッサのハードウェア・プリフェッチャによって生成されたメモリ・アクセス、
浮動小数点命令によって生成されたメモリ・アクセス、
融合マイクロ命令によって生成されたメモリ・アクセス、
媒体命令によって生成されたメモリ・アクセス、
メモリ・アドレスを修正する命令によって生成されたメモリ・アクセス、
ソフトウェア・プリフェッチ命令によって生成されたメモリ・アクセス、
アーキテクチャ記述子をロードするメモリ・アクセス、
非時間データを指定する命令によって生成されたメモリ・アクセス、
位置合わせ検査を実行しない命令によって生成されたメモリ・アクセス、
監視プログラム特権レベル命令によって生成されたメモリ・アクセス、
ゼロ拡張命令によって生成されたメモリ・アクセス、
マスクされた移動命令によって生成されたメモリ・アクセス、
スタック・プッシュ命令によって生成されたメモリ・アクセス、及び
前記プロセッサのハードウェア・テーブルウォーク・エンジンによって生成されたメモリ・アクセス
からの少なくとも３つを含む、請求項１７に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項１９】
セット・アソシエイティブ・キャッシュ・メモリであって、
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイであって、前記Ｎ個のセットの各セットが関連付けられた置換ビットを含む前記アレイと、
前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと
を備え、
前記割当ユニットが、前記選択セットの前記Ｎ個のウェイの第１のサブセット内に割り当てるときには前記置換ビットの第１のサブセットを使用し、前記選択セットの前記Ｎ個のウェイの第２のサブセット内に割り当てるときには前記置換ビットの第２のサブセットを使用し、
前記置換ビットの前記第１と第２のサブセットが互いに排他的である、
セット・アソシエイティブ・キャッシュ・メモリ。
【請求項２０】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記割当ユニットが、前記置換ビットの前記第１のサブセットを使用して前記選択セットの前記Ｎ個のウェイの前記第１のサブセット内に割り当てるか、それとも前記置換ビットの前記第２のサブセットを使用して前記選択セットの前記Ｎ個のウェイの前記第２のサブセット内に割り当てるかを判定するために、前記メモリ・アクセスと関連付けられた前記ＭＡＴを使用する、請求項１９に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【発明の詳細な説明】
【発明の概要】
【課題を解決するための手段】
【０００１】
一態様では、本発明は、セット・アソシエイティブ・キャッシュ・メモリであって、Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと、パーセル指定子であって、複数のパーセルのパーセルごとに、前記パーセルに含まれる前記Ｎ個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また複数の既定の置換スキームの中から前記パーセルと関連付けられた置換スキームを指定する前記パーセル指定子とを備え、前記メモリ・アクセスのメモリ・アクセスごとに、前記割当ユニットが、前記メモリ・アクセスに応じて前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を選択し、また前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てる、セット・アソシエイティブ・キャッシュ・メモリを提供する。
【０００２】
別の実施形態では、本発明は、Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、セット・アソシエイティブ・キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットとを有する、前記キャッシュ・メモリを動作させる方法であって、複数のパーセルのパーセルごとにパーセル指定子を格納するステップであって、前記パーセル指定子が、前記パーセルに含まれる前記Ｎ個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また複数の既定の置換スキームの中から、前記パーセルと関連付けられた置換スキームを指定する、ステップと、前記メモリ・アクセスのメモリ・アクセスごとに、前記メモリ・アクセスに応じて前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を選択するステップと、前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てるステップとを含む、方法を提供する。
【０００３】
さらに別の態様では、本発明は、セット・アソシエイティブ・キャッシュ・メモリであって、Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットとを備え、前記割当ユニットが、前記選択セットの前記Ｎ個のウェイの第１のサブセット内に割り当てるときには第１の置換スキームを使用し、前記選択セットの前記Ｎ個のウェイの第２のサブセット内に割り当てるときには第２の置換スキームを使用し、前記第１と第２の置換スキームが異なる、セット・アソシエイティブ・キャッシュ・メモリを提供する。
【図面の簡単な説明】
【０００４】
【図１】セット・アソシエイティブ・キャッシュ・メモリを示すブロック図である。
【図２】図１のキャッシュ・メモリ１０２のそれぞれのウェイのサブセットに対するＭＡＴのマッピング１０８を示す表である。
【図３】図１のキャッシュ・メモリ１０２の一部分をより詳細に示すブロック図である。
【図４】図１のキャッシュ・メモリ１０２を含むプロセッサの動作を示す流れ図である。
【図５】図１のキャッシュ・メモリ１０２の動作を示す流れ図である。
【図６】一実施形態による図５のブロック５０４の動作を示す流れ図である。
【図７】図１のキャッシュ・メモリ１０２を含むプロセッサが含まれるシステムの動作を示す流れ図である。
【図８】図１のキャッシュ・メモリ１０２を含むプロセッサの要素を示すブロック図である。
【図９】図１のキャッシュ・メモリ１０２を含む図８のプロセッサの動作を示す流れ図である。
【図１０】セット・アソシエイティブ・キャッシュ・メモリ１００２を示すブロック図である。
【図１１】図１０のキャッシュ・メモリ１００２の一部分を示すブロック図である。
【図１２】図１０のキャッシュ・メモリ１００２を含むプロセッサの動作を示す流れ図である。
【図１３】図１０のキャッシュ・メモリ１００２の動作を示す流れ図である。
【図１４】代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ１４０２を示すブロック図である。
【図１５】代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ１５０２を示すブロック図である。
【図１６】図１５のキャッシュ・メモリ１５０２の動作を示す流れ図である。
【図１７】代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ１７０２を示すブロック図である。
【図１８】図１７のキャッシュ・メモリ１７０２の動作を示す流れ図である。
【図１９】セット・アソシエイティブ・キャッシュ・メモリ１９０２を示すブロック図である。
【図２０】一実施形態によるパーセル指定子２００１及びパーセル指定子トリプレット２０２１を示すブロック図である。
【図２１】図１９のキャッシュ・メモリ１９０２の一部分をより詳細に示すブロック図である。
【図２２Ａ】図１９のキャッシュ・メモリ１９０２を含むプロセッサの動作を示す流れ図である。
【図２２Ｂ】一実施形態による図１９のキャッシュ・メモリ１９０２の動作を示す流れ図である。
【図２２Ｃ】ヘテロジニアス置換ポリシーを使用する図１９のキャッシュ・メモリ１９０２の実施形態を示すブロック図である。
【図２２Ｄ】ヘテロジニアス置換ポリシーを使用する図１９のキャッシュ・メモリ１９０２の実施形態を示すブロック図である。
【図２２Ｅ】ヘテロジニアス置換ポリシーを使用する図１９のキャッシュ・メモリ１９０２の実施形態を示すブロック図である。
【図２３】完全アソシエイティブ・キャッシュ・メモリ２３０２を示すブロック図である。
【図２４】一実施形態による図２３のそれぞれの閾値２３０８に対するＭＡＴのマッピングを示す表である。
【図２５】図１のキャッシュ・メモリ１０２の一部分をより詳細に示すブロック図である。
【図２６】図２３のキャッシュ・メモリ２３０２を含むプロセッサの動作を示す流れ図である。
【図２７】図２３のキャッシュ・メモリ２３０２の動作を示す流れ図である。
【図２８】図２３の完全アソシエイティブ・キャッシュ・メモリ２３０２の動作を示す流れ図である。
【図２９】一実施形態による、ＭＡＴグループ２９０９に対するＭＡＴのマッピング２９０８、及び閾値２９１１に対するＭＡＴグループ２９０９のマッピングを示すブロック図である。
【図３０】図２３のキャッシュ・メモリ２３０２の動作を示す流れ図である。
【図３１】セット・アソシエイティブ・キャッシュ・メモリ３１０２を示すブロック図である。
【図３２】一実施形態による図３１のそれぞれの優先度３１０８に対するＭＡＴのマッピングを示す表である。
【図３３】キャッシュ・ラインのＭＡＴを考慮したキャッシュ・ライン置換ポリシーを示す流れ図である。
【図３４】プログラム及びプログラム・フェーズのマッピングの生成を示す流れ図である。
【図３５】メモリ・アクセス・グラフ、及びグラフからの抽出データの図である。
【図３６】プログラムのフェーズ解析を示す流れ図である。
【図３７】プロセッサの構成可能態様（たとえば、キャッシュ・メモリ、プリフェッチャ）のための好適な構成又はマッピングを判定する総当たり法を示す流れ図である。
【図３８】解析結果を示す円グラフ３８０１である。
【図３９】プロセッサ３９００を示すブロック図である。
【発明を実施するための形態】
【０００５】
ここで図１を参照すると、セット・アソシエイティブ・キャッシュ・メモリ１０２を図示するブロック図が示されている。キャッシュ・メモリ１０２は、記憶要素１１２のアレイ１０４を含む。アレイ１０４は、複数のウェイとして構成される。図１の例では、アレイ１０４には、０から１５で参照される１６個のウェイがある。アレイ１０４はまた、複数のセットとして構成される。キャッシュ・メモリ１０２は、メモリ・アクセス１２２を受け取る。メモリ・アクセス１２２は、メモリ・アドレス及びメモリ・アクセス・タイプ（ＭＡＴ）１０１を含む。キャッシュ・メモリ１０２は、図３９に関して下記で説明されるプロセッサ３９００などのプロセッサに含まれる。
【０００６】
メモリ・アクセス・タイプ（ＭＡＴ）とはメモリ・アクセスの特性であり、これはメモリ・アクセスを生成させた命令の特性、又はメモリ・アクセスを生成したプロセッサの機能ユニットのタイプ、又はメモリ・アクセスが生成されたときのプロセッサの動作モード、又はメモリ・アクセスによってアクセスされるデータ・タイプのいずれかから得られる。
【０００７】
命令によって指定される動作は、たとえば命令の特性である。たとえば、ロードユニット、記憶ユニット、整数演算ユニット、浮動小数点演算ユニット、媒体ユニット、テーブルウォーク・エンジン、命令フェッチユニット、及びハードウェア・プリフェッチャ（たとえば命令プリフェッチャ、ストリーム・プリフェッチャ、ボックス・プリフェッチャ、Ｌ１Ｄプリフェッチャ）は、プロセッサの機能ユニットの種類である。たとえば、監視プログラム・モード（又は特権的モード、又はｘ８６リング０）、システム管理モード（たとえばｘ８６  Ｓｙｓｔｅｍ  Ｍａｎａｇｅｍｅｎｔ  Ｍｏｄｅ（ＳＭＭ））、プロテクト・モード（たとえばｘ８６  Ｒｅａｌ  Ｍｏｄｅ、Ｖｉｒｔｕａｌ  ｘ８６モード、Ｐｒｏｔｅｃｔｅｄモード、Ｌｏｎｇモード）、及び仮想機械モード（たとえばｘ８６  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  ｅＸｔｅｎｓｉｏｎｓ（ＶＭＸ））は、プロセッサの動作モードである。たとえば、コード、記述子テーブル（たとえば、ｘ８６命令セット・アーキテクチャ・グローバル記述子テーブル（ＧＤＴ）及び割込み記述子テーブル（ＩＤＴ））、ページ・テーブル、システム管理モード（たとえばｘ８６  ＳＭＭ）状態保管空間、仮想機械モード（たとえばｘ８６  ＶＭＸ）状態保管空間、スタック、圧縮データ、定数、浮動小数点、暗号鍵、暗号ペイロード、及び連結リストは、アクセスされるデータ・タイプである。
【０００８】
命令フェッチユニットによって生成されるメモリ・アクセスは、コード・フェッチと呼ばれることがあり、ハードウェア命令プリフェッチャによって生成されるメモリ・アクセスは、コード・プリフェッチと呼ばれることがある。
【０００９】
【表１】
2017507443.tif 000003
【００１０】
一実施形態では、命令は、プロセッサの命令翻訳プログラムによって生成されたマイクロ命令を含み、この命令翻訳プログラムは、アーキテクチャの命令（たとえばｘ８６命令セット・アーキテクチャ命令）をマイクロ命令に翻訳する。
【００１１】
メモリ・アクセス１２２の一部分のメモリ・アドレス（インデックス）は、セットのうちの１つを選択する。セットのそれぞれは、割当ユニット１０６に供給されたヒット信号１２４の偽値によって表示されるようにメモリ・アクセス１２２がキャッシュ・メモリ１０２内で失敗するときに、選択セットのウェイのうちのどのウェイを置換するか、又はどのウェイ内に割り当てるかを判定するために割当ユニット１０６によって使用される、置換情報１１４、又は置換ポリシー・ビット１１４、又は置換ビット１１４を保持するための記憶装置を含む。割当ユニット１０６は、置換すべきウェイを置換ウェイ・インジケータ１１６で表示する。異なる実施形態では、置換ビット１１４は、数の異なるビットとすること、及び異なる情報を表示することができる。たとえば、一実施形態では、置換ビット１１４は１５ビットであり、これはセットの疑似最低使用頻度（ｐＬＲＵ）ウェイを表示する。別の実施形態では、置換ビット１１４は、セットのウェイのどれが最後に置換されたかを示す１ホット・ベクトルである１６ビットとなり、これはラウンドロビン置換ポリシー、又は置換スキームで使用することができる。別の実施形態では、置換ビット１１４は、セットの真ＬＲＵウェイを表示する。別の実施形態では、置換ビット１１４は、置換ビット１１４を更新するときに（マルチコア・プロセッサの）どのコアがキャッシュ・ラインを所有するかがさらに考慮に入れられる修正ｐＬＲＵ置換スキームで使用される。別の実施形態では、置換ビット１１４は、置換ビット１１４を更新するときにメモリ・アクセス１２２のＭＡＴ  １０１がさらに考慮に入れられる修正ｐＬＲＵ置換スキームで使用され、たとえばＭＡＴ  １０１が、たとえばオフライン解析によって、必要になる傾向が少ないことが知られているものである場合、置換スキームは置換ビット１１４を更新し、その結果、置換されたウェイが最高使用頻度位置ではなく中間のどこかに挿入されるようになる。
【００１２】
アレイ１０４の各記憶要素１１２は、データのキャッシュ・ライン、キャッシュ・ラインのタグ、及びキャッシュ・ラインの状態（たとえばＭＥＳＩ状態）を保持する。各セットは、セットのウェイごとに（たとえば１６番目のウェイに）記憶要素１１２を含む。一実施形態では、キャッシュ・ラインは６４バイトのデータであるが、他の実施形態も企図される。上述のように、各セットは置換ビット１１４を含む。一実施形態では、アレイ１０４は、データ、タグ、状態及び置換ビット１１４のキャッシュ・ラインを保持する単一のアレイである。別の実施形態では、アレイ１０４は２つのアレイであり、これは第１のアレイがデータのキャッシュ・ラインを保持し（データ・アレイ）、第２のアレイがタグ、状態及び置換ビット１１４を保持する（タグ・アレイ）。別の実施形態では、タグ・アレイではなく第３のアレイ（置換アレイ）が置換ビット１１４を保持する。
【００１３】
一実施形態では、割当ユニット１０６は、キャッシュ・メモリ１０２の１つ又は複数のタグ・パイプラインの一部である。タグ・パイプラインは、たとえば処理コアから（たとえば、処理コアのメモリ・サブシステム（たとえばロード／記憶キュー又は専用キャッシュ・メモリ）から）メモリ・アクセスを受け、アレイ１０４にアクセスしてメモリ・アクセスを実行し、たとえばアレイ１０４からデータを読み出す、又はアレイ１０４にデータを書き込む。好ましくは、タグ・パイプラインは、プロセッサのパイプライン・ステージに非常に似ているステージのパイプラインであり、そのそれぞれがメモリ・アクセスのサブ動作を実行し、たとえば、指定されたセット及びウェイを有するエントリを無効にする、アドレスの状態についてタグ・アレイに照会する、アドレスが存在しない場合に選択セットの置換ビットに基づいてどのウェイ内に割り当てるかを判定する、指定されたセット及びウェイの状態を更新する、アドレスが存在する場合にデータ・アレイからデータを読み出す要求を生成する、アドレスが存在する場合にデータ・アレイにデータを書き込む要求を生成する、などを行う。サブ動作が一緒になってメモリ・アクセスの完全動作を実現する。有利なことに、ステージのパイプラインを有することによって、割当ユニット１０６で一連のサブ動作を実行して、本明細書に記載されているような比較的複雑な置換スキームを必要な場合に実現することができる。好ましくは、パイプラインの後ステージの結果を逆に前ステージに転送する転送ネットワークが含まれる。
【００１４】
キャッシュ・メモリ１０２はまた、ウェイ・サブセットに対するＭＡＴのマッピング１０８を含み、このマッピングは、メモリ・アクセス１２２がキャッシュ・メモリ１０２内で失敗するときに選択セットのウェイのうちのどのウェイ内に割り当てるかを判定するのに使用するために、割当ユニット１０６に供給される。一般に、割当ユニット１０６は、キャッシュ・メモリ１０２の無効ウェイ内に割り当てようとするが、割り当ては有効ウェイを置換しなければならないことが多く、したがって置換とも呼ばれる。より具体的には、複数のＭＡＴの各ＭＡＴについてマッピング１０６は、ＭＡＴをアレイ１０４のウェイのサブセットと関連付ける。サブセットはＭＡＴごとに異なり得るが、いくつかのＭＡＴは同じサブセットと関連付けることができる。メモリ・アクセス１２２がキャッシュ・メモリ１０２内で失敗するときに、割り当てユニット１０６は、メモリ・アクセス１２２のＭＡＴ  １０１と関連付けられたウェイのサブセット内に割り当てる。これにより、有利なことにキャッシュ・メモリ１０２は従来のキャッシュ・メモリよりもより効率的になり、たとえば高いヒット率を有することになり得る。従来の方法に従って割り当てる従来のキャッシュ・メモリでは、たとえば、割り当てを促進するメモリ・アクセスのＭＡＴを考慮に入れずに最低使用頻度（ＬＲＵ）ウェイを割り当てる。具体的には、マッピング１０８は、より必要とされそうな他のキャッシュ・ラインよりも必要とされる可能性が小さいキャッシュ・ラインを置換する確率を高めるように適応させることができる。一実施形態では、有利なことにマッピング１０８は、キャッシュ・メモリ１０２の効率を高めるように適応させることが、特定の対象のプログラム又はプログラム・フェーズのオフライン解析を実行し、各ＭＡＴと関連付けられたキャッシュ・メモリ１０２のウェイのサブセット又は「バジェット」を判定することによって可能であり、その結果、ＭＡＴ  １０１を有するメモリ・アクセス１２２がキャッシュ・メモリ１０２内で失敗するときに、割当ユニット１０６は、ＭＡＴ  １０１と関連付けられたサブセット内にある選択セットのウェイにだけ割り当てる。マッピング１０８は、更新入力１２６によって更新することができる。
【００１５】
キャッシュ・メモリの多数の実施形態が、たとえば図１０、１１、１４、１５、１７、１９、２３及び２５に関して本明細書で説明される。上記の長い説明の繰返しを避けるために、これらのキャッシュ・メモリは図１のキャッシュ・メモリ１０２と多くの点で類似していること、及び図１のキャッシュ・メモリ１０２との相違点が他の実施形態に関して説明されることを理解されたい。同様に、他の実施形態のキャッシュ・メモリを含むプロセッサは、図１のキャッシュ・メモリ１０２を含む種類のプロセッサの記載と類似している。
【００１６】
好ましくは、キャッシュ・メモリ１０２を含むプロセッサは、各コアがキャッシュ・メモリ１０２を共有するマルチコア・プロセッサである。しかし、単一コア実施形態もまた企図される。加えて、キャッシュ・メモリ１０２は、プロセッサのキャッシュ階層の任意のレベルにあり得る。しかし、好ましくは、キャッシュ・メモリ１０２は、プロセッサのラスト・レベル・キャッシュ（ＬＬＣ）である。好ましくは、プロセッサは、命令デコーダに命令を供給する命令キャッシュを含み、命令デコーダは命令を復号し、復号された命令を命令ディスパッチャに供給し、命令ディスパッチャは実行のために、命令を実行ユニットにディスパッチする。好ましくは、プロセッサのマイクロアーキテクチャはスーパースカラ及びアウト・オブ・オーダ実行であるが、他の実施形態も企図され、その結果、命令ディスパッチャはまた、スーパースカラ・アウト・オブ・オーダ方式による複数の実行ユニットへの命令のディスパッチをスケジュールするための命令スケジューラも含むようになる。好ましくは、プロセッサはまた、プロセッサのアーキテクチャの状態を保持するアーキテクチャのレジスタ、並びに非アーキテクチャのレジスタを含む。好ましくは、プロセッサはまた、レジスタのリネームを実行するために使用されるレジスタ・エイリアス・テーブル（ＲＡＴ）と、プログラム・オーダ内の命令をリタイアさせるために使用されるリオーダ・バッファ（ＲＯＢ）とを含む。好ましくは、命令ディスパッチャは命令翻訳プログラムを含み、この翻訳プログラムはアーキテクチャの命令を、実行ユニットによって実行可能なプロセッサのマイクロ命令セット・アーキテクチャのマイクロ命令に翻訳する。プロセッサはまた、メモリ・サブシステムを含み、これはメモリ・オペランドを実行ユニットに提供し、実行ユニットからメモリ・オペランドを受け取る。メモリ・サブシステムは好ましくは、１つ又は複数のロードユニット、１つ又は複数の記憶ユニット、ロード・キュー、記憶キュー、メモリからのキャッシュ・ラインを要求するための充填キュー、プロセッサが通信するメモリ・バスのスヌーピングと関連付けられたスヌープ・キュー、及び他の関連する機能ユニットを含む。メモリ・サブシステムは、キャッシュ・メモリ１０２のメモリ・アクセス１２２を作成する。
【００１７】
次に図２を参照すると、一実施形態による図１のキャッシュ・メモリ１０２のそれぞれのウェイのサブセットに対するＭＡＴのマッピング１０８が示されている。図２の例示的なマッピング１０８は、表１に対応する３２個のＭＡＴを例示の目的で含む。図２の例のマッピング１０８は、下記に表２として転載されている。
【００１８】
【表２】
2017507443.tif 000004
【００１９】
図２から一例を取ると、ｓｔｏｒｅ＿ｎｔのＭＡＴ  １０１を有するメモリ・アクセス１２２がキャッシュ・メモリ１０２内で失敗するとき、割当ユニット１０６は、選択セットのうちのウェイ０、４、又は８にだけ、すなわちマッピング１０８がｓｔｏｒｅ＿ｎｔ  ＭＡＴと関連付けるサブセットのウェイにだけ割り当てる。別の例として、ｌｏａｄ＿ｄｅｓｃｒのＭＡＴ  １０１を有するメモリ・アクセス１２２がキャッシュ・メモリ１０２内で失敗するとき、割当ユニット１０６は、選択セットのうちのウェイ１５にだけ、すなわちマッピング１０８がｌｏａｄ＿ｄｅｓｃｒ  ＭＡＴと関連付けるサブセットのウェイにだけ割り当てる。
【００２０】
一例では、マッピング１０８は、１６ビット・ベクトルのアレイを含む。ベクトルの各ビットは、キャッシュ・メモリ１０２の１６個のウェイのそれぞれのウェイに対応し、好ましくは、ビットは、それぞれのウェイがサブセットに含まれる場合には１になり、それぞれのウェイがサブセットから除外される場合にはゼロになる。アレイは、ＭＡＴごとに１つの３２個のベクトルを含み、ＭＡＴ番号でインデックス付けされる。しかし、マッピング１０８が別の形で具現化される、図３及び図６に関して説明される代替実施形態などの他の実施形態も企図される。
【００２１】
図２（及び表２）は、特定のＭＡＴのセットと、それぞれのウェイのサブセットに対する特定のＭＡＴのマッピングとを示すが、この実施形態は、例示の目的で一例として提供されていること、並びにＭＡＴのセットが異なり、サブセットに対するＭＡＴのマッピングが異なる別の実施形態も企図されることを理解されたい。実際、一実施形態でマッピングは、プロセッサの動作時に動的に更新され（たとえば図１の更新入力１２６によって）、これは図７〜９に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づく。
【００２２】
次に図３を参照すると、図１のキャッシュ・メモリ１０２の一部分をより詳細に示すブロック図が示されている。図３の実施形態では、図１のマッピング１０８は、３２個のＭＡＴのそれぞれにベクトル３０４を含む。ｍｕｘ３０２が３２個のベクトル３０４を受け取り、そのうちの１つを、メモリ・アクセス１２２のＭＡＴインジケータ１０１の値に基づいて選択し、選択されたベクトル３０４が図１の割当ユニット１０６に供給される。割当ユニット１０６はまた、選択セット（すなわち、メモリ・アクセス１２２のメモリ・アドレスのインデックスによって選択されたキャッシュ・メモリ１０２のセット）の図１の置換ビット１１４を受け取る。選択されたベクトル３０４及び置換ビット１１４に基づいて、割当ユニット１０６は図１の置換ウェイ１１６を生成する。割当ユニット１０６はまた、置換ウェイ１１６の値に基づいて置換ビット１１４を更新する。たとえば、一実施形態では、置換ビット１１４は疑似ＬＲＵ（ｐＬＲＵ）ベクトルであり、これは選択セットのウェイのうちの疑似最低使用頻度ウェイを表示する。別の例では、置換ビット１１４は、真ＬＲＵベクトル又はラウンド・ロビン・ベクトルである。
【００２３】
一実施形態では、ベクトル３０４はビット・ベクトルであり、これはキャッシュ・メモリ１０２（たとえば１６個のウェイ）のウェイごとにそれぞれのビットを含む。真ビットは、それぞれのウェイが関連ＭＡＴのサブセットに含まれることを表示し、偽ビットは、それぞれのウェイがサブセットから除外されることを表示する。代替形態では、ベクトル３０４は置換ビット１１４についてブール演算する一対のマスクを含み、この置換ビットは、図６に関して下記で説明されるｐＬＲＵベクトルである。
【００２４】
代替実施形態では、キャッシュ・メモリ１０２は、より多くの数のＭＡＴ（たとえば３２個）をより少数のＭＡＴグループ（たとえば４つ）にマッピングする論理回路を含むことができる。たとえば、図３の実施形態では、ＭＡＴグループ化論理回路（図示せず）がＭＡＴ  １０１を受け取ると共に、（ＭＡＴ  １０１ではなく）ｍｕｘ  ３０２への選択入力として供給されるＭＡＴグループ番号を出力する。ＭＡＴグループ化論理回路は、３２個のＭＡＴのそれぞれを４つのＭＡＴグループのうちの１つにマッピングする。ＭＡＴグループ化論理回路は、マッピング１０８と共に更新可能である。マッピング１０８はベクトル３０４を（３２個ではなく）４つだけ含み、ｍｕｘ  ３０２は、４つのベクトル３０４のうちの１つを割当ユニットに供給するために選択する。この実施形態では、有利なことにハードウェアのコストを低減させることができる。ＭＡＴ細分性の低減におけるトレードオフにより、許容可能な効率が特に、メモリ・アクセス諸特性が様々なＭＡＴに関して一緒にクランプする傾向があるプログラムについて得られる。ＭＡＴグループ化論理回路は、本明細書に記載の様々な実施形態でハードウェアの必要量を低減させるために使用することができ、その低減は、図１０から図２２までの実施形態などの、グループを含む実施形態で倍増することができる。複数のＭＡＴをＭＡＴグループにマッピングする実施形態については、図２９から図３０に関して説明される。
【００２５】
次に図４を参照すると、図１のキャッシュ・メモリ１０２を含むプロセッサの動作を示す流れ図が示されている。流れはブロック４０２から始まる。
【００２６】
ブロック４０２で、プロセッサは、（たとえば表１の）複数のＭＡＴの各ＭＡＴをキャッシュ・メモリ１０２のウェイのサブセットと関連付けるマッピング（たとえば図２及び表２のマッピング）を受け取る。好ましくは、キャッシュ・メモリ１０２は、デフォルト・マッピング１０８で製造される。好ましくは、デフォルト・マッピング１０８は、多種多様のプログラムのために、又は少なくとも特定の対象と考えられるプログラムの集団のためにキャッシュ・メモリ１０２の効率的な動作を促進するように適応され、及び／又はキャッシュ・メモリ１０２を含むプロセッサ上で実行される可能性があるように適応される。流れはブロック４０４へ進む。
【００２７】
ブロック４０４で、プロセッサは、図１の更新入力１２６を介してブロック４０２で受け取られたマッピングを用いて、キャッシュ・メモリ１０２のマッピング１０８を更新する。好ましくは、マッピング１０８は、システム初期化時及び／又はオペレーティング・システムのブート時に、システム・ソフトウェア（たとえばＢＩＯＳ又はオペレーティング・システム）によって更新される。さらに好ましくは、マッピング１０８は、図７〜図９に関して下記で説明されるように、プログラムベースで、及び／又はプログラム・フェーズベースで更新される。流れはブロック４０４で終わる。
【００２８】
次に図５を参照すると、図１のキャッシュ・メモリ１０２の動作を示す流れ図が示されている。流れはブロック５０２から始まる。
【００２９】
ブロック５０２で、キャッシュ・メモリ１０２は、キャッシュ・メモリ１０２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスでアレイ１０４のセットを選択する。メモリ・アクセス１２２は、ＭＡＴ  １０１を指定する。流れはブロック５０４へ進む。
【００３０】
ブロック５０４で、キャッシュ・メモリ１０２は、選択セットのウェイ内に割り当てる。より具体的には、割当ユニット１０６は、マッピング１０８がメモリ・アクセス１２２のＭＡＴ  １０１と関連付ける、ウェイのサブセットのウェイのうちの１つの中に割り当てる。これについては、図６に関してより詳細に下記で説明される。流れはブロック５０４で終わる。
【００３１】
次に図６を参照すると、一実施形態による図５のブロック５０４の動作を示す流れ図が示されている。流れはブロック６０２から始まる。
【００３２】
ブロック６０２で、割当ユニット１０６は、現在の置換ビット１１４、及びメモリ・アクセス１２２のＭＡＴ  １０１に基づいて置換ウェイ１１６を判定し、置換ビット１１４の新値を生成する。一実施形態では、割当ユニット１０６は、上記の図３の実施形態に関して説明されたように、たとえばＭＡＴ  １０１によって選択されたベクトル３０４を使用して置換ウェイ１１６を判定し、置換ビット１１４の新値を生成する。一実施形態では、置換ビット１１４はｐＬＲＵベクトルであり、ベクトル３０４は、ｐＬＲＵベクトル１１４とブールＡＮＤされて第１の結果を生成する第１の部分（ＡＮＤ＿ＭＡＳＫ）と、第１の結果とブールＯＲされて第２の結果を生成する第２の部分（ＯＲ＿ＭＡＳＫ）とを含む。第２の結果を使用して置換ウェイ１１６を判定し、またｐＬＲＵベクトル１１４を更新するための新値を生成する。ＡＮＤ＿ＭＡＳＫ及びＯＲ＿ＭＡＳＫを使用することについては、ブロック６０６の説明の後で、より詳細に下記で説明される。流れはブロック６０４へ進む。
【００３３】
ブロック６０４で、キャッシュ・メモリ１０２は、ブロック６０２で割当ユニット１０６によって表示された置換ウェイ１１６内に割り当てる。流れはブロック６０６へ進む。
【００３４】
ブロック６０６で、キャッシュ・メモリ１０２は、置換ビット１１４をブロック６０２で生成された新値で更新する。流れはブロック６０６で終わる。
【００３５】
一実施形態では、１６ウェイ実施形態のｐＬＲＵスキームは、セット当たり１５個のｐＬＲＵ置換ビット１１４、置換ビット１１４からＬＲＵウェイを復号するための論理回路、新しい割り当てに対し置換ビット１１４を更新するための論理回路、並びにヒットしたメモリ・アクセス１２２に対し置換ビット１１４を更新するための論理回路を含む。割り当てはキャッシュ・ヒットとは意味論的に異なるが、割り当て更新論理回路は実質上ヒット論理回路であり、ＬＲＵウェイがヒット・ウェイとして送り込まれる。
【００３６】
置換ビット１１４は、本質的にバイナリツリーを記述する１５ビット・ベクトルであり、各ビットが内部ノードであり（ノードの４つのレベルを完全に指定する）、各リーフがウェイである。たとえば、ビットがＡ〜Ｏでラベル付けされる場合、ｐＬＲＵツリーは下記に示されるように定義することができる。
【００３７】
【数１】
2017507443.tif 000005
【００３８】
ｐＬＲＵベクトルからＬＲＵウェイを判定するための論理では、ノード・ビットＡ〜Ｏによって指定された方向にｐＬＲＵツリーをウォークする。ルート・ノードＡから始まるノード・ビットＡ〜Ｏの値は常に、ＬＲＵの「方向」を指し、ここで０は「左を指すこと」を意味し、１は「右を指すこと」を意味する。たとえば、
【００３９】
【数２】
2017507443.tif 000006
【００４０】
の場合、ＬＲＵウェイは０１（Ａ＝０、Ｂ＝０、Ｄ＝０、Ｈ＝１）になる。
【００４１】
この特別な場合では、ＬＲＵウェイは４つのビット、すなわちＡ、Ｂ、Ｄ及びＨによってのみ判定されることに留意されたい。他のノードもまだあり、これらは有用な情報を記憶しているが、０００００００１０００００００の場合にはＬＲＵ判定に寄与しない。
【００４２】
ｐＬＲＵアレイがヒット又は割り当ての故に更新される必要がある場合、ｐＬＲＵビットの次の状態が、現在の状態と指定ウェイの関数として計算される。更新は２ステップ処理である。第１に、最高使用頻度（ＭＲＵ）位置に進められているウェイを指し示すｐＬＲＵノード・ビットＡ〜Ｏのうちの４つのノード・ビット｛ａ、ｂ、ｃ、ｄ｝を判定する。第２に、ｐＬＲＵノード・ビットＡ〜Ｏ内の各ノード・ビットＸについて、Ｘが｛ａ、ｂ、ｃ、ｄ｝内にあれば、そのノード・ビットは問題のウェイから遠くへ向くように更新される。
【００４３】
たとえば、前の場合では、ウェイ０５でヒットするロードは、ノード｛Ａ＝＞１、Ｂ＝＞０、Ｅ＝＞１、Ｊ＝＞０｝を、４つのノード・ビットのそれぞれがウェイ０５の反対の方向に向くように更新する。
【００４４】
ブロック６０２に関して上述したベクトル３０４の第１の部分（ＡＮＤ＿ＭＡＳＫ）及び第２の部分（ＯＲ＿ＭＡＳＫ）の２つの部分を使用することについて、次により詳細に説明する。割り当てることが望まれるウェイのサブセットはウェイ｛０、５、６、７｝であると仮定する。まずウェイ・サブセットは、ここに示される樹形図に基づいてＡＮＤ＿ＭＡＳＫ及びＯＲ＿ＭＡＳＫに変換される。
【００４５】
【数３】
2017507443.tif 000007
【００４６】
ダッシュは、「ドントケア」であるビット位置を表す。その理由は、マスクがこれらのビット位置を不要にするからである。たとえば、ノード・ビットＣはここでドントケアであり、その理由は、ＡＮＤ＿ＭＡＳＫのノード・ビットＡが０であり、これはＬＲＵを判定する際に常に左分岐が辿られることを意味するからである。
【００４７】
ヒット又は割り当てに対してＬＲＵを更新することは、通常のｐＬＲＵの場合と同様に実行される。しかし、ｐＬＲＵがＬＲＵ挙動に関して不完全であるので、ウェイの互いに排他的な２つのサブセットのｐＬＲＵ更新は、置換ビット１１４を共有する性質により、互いに影響を及ぼす。しかしクロストークは、ほとんどの状況で許容可能であり得る。
【００４８】
次に図７を参照すると、図１のキャッシュ・メモリ１０２を含むプロセッサが含まれるシステムの動作を示す流れ図が示されている。流れはブロック７０２から始まる。
【００４９】
ブロック７０２で、デバイス・ドライバ（又はシステム・ソフトウェアの他の構成要素）は、プログラムが走っている（又は走ろうとしている、たとえばオペレーティング・システムの処理テーブルに表示された、走っているプログラムである）とともに、そのプログラムが、デバイス・ドライバによって知られているプログラムのリスト内にあるとの判定をし、このプログラムに対しては、たとえば図１のマッピング１０８を更新するために、マッピング又は構成が存在する。たとえば、プロセッサ上で走るプログラムのオフライン解析が、キャッシュ・メモリ１０２の効率を改善するマッピングを判定するために（プロセッサのソフトウェア・シミュレーション、又は実際のプロセッサ部によって）実行されている。マッピングによる１００％のヒット率は得られないが、マッピングはキャッシュ・メモリ１０２の効率を改善できることを理解されたい。さらに、一部のプログラムには、マッピングから利益を得るのに十分に有効なＭＡＴに対する傾向がないが、一部のプログラムの解析では、利用することができる、且つマッピングから利益を得ることができる傾向を示し得ることを理解されたい。流れはブロック７０４へ進む。
【００５０】
ブロック７０４で、プロセッサは命令（たとえばモデル専用レジスタ（ＭＳＲ）への書込み、たとえばｘ８６  ＷＲＭＳＲ命令）を実行し、この命令は、キャッシュ・メモリ１０２のマッピング１０８を、命令によって供給されるマッピングで更新するようにプロセッサに命令する。一実施形態では、マッピングはメモリ内にあり、マッピングの位置のメモリ・アドレスは命令によって供給される。好ましくは、命令はデバイス・ドライバ・コードの一部である。デバイス・ドライバはまた、プロセッサで使用できる情報を供給して、図８に関して下記で説明されるような異なるフェーズのそれぞれをプログラムが入力したことを検出することができ、またデバイス・ドライバは、フェーズのそれぞれに異なるマッピングを供給することができる。命令に応じて、プロセッサはマッピング１０８を更新し、もしあれば、フェーズ検出器（図８の８０４）に初期フェーズ識別子（図８の８０２）をロードする。流れはブロック７０４で終わる。
【００５１】
次に図８を参照すると、図１のキャッシュ・メモリ１０２を含むプロセッサの要素を示すブロック図が示されている。プロセッサはフェーズ検出器８０４を含み、これは走っているプログラムが新しいフェーズに入ったことを検出する。フェーズ検出器８０４は、この判定をフェーズ識別子８０２に基づいて行う。この識別子は、図７に関して上述したデバイス・ドライバなどから検出器に供給される。フェーズ識別子８０２は、プログラムの命令の命令ポインタ（又はプログラム・カウンタ）値を含むことができる。命令はサブルーチン・コール命令とすることもでき、その場合フェーズ識別子８０２はまた、コール命令のターゲット命令の命令ポインタ（又はプログラム・カウンタ）値を含むこともできる。さらに、フェーズ識別子８０２はまた、コール命令の１つ又は複数のパラメータ値（たとえばリターン・アドレス、レジスタ値及び／又はスタック値）を含むこともできる。フェーズ検出器の一例は、指紋ユニットと呼ばれているが、米国特許出願第１４／０５０，６８７号及び第１４／０５０，７５７号に詳細に記載されており、これらは両方が２０１３年１０月１０日に出願され、両方が２０１３年９月２０日出願の米国特許仮出願第６１／８８０，６２０号の優先権を主張し、それぞれが参照により、その全体で本願にすべての目的のために組み込まれる。プロセッサはまた、マッピング更新ユニット８０６を含み、これは新しいフェーズが検出されたこと、及び新しいフェーズの識別子を受け取ったことをフェーズ検出器８０４から通知される。マッピング更新ユニット８０６はまた、マッピング情報をたとえば、図７に関して上述したデバイス・ドライバから受け取る。マッピング更新ユニット８０６は、図９に関して下記で説明されるように、キャッシュ・メモリ１０２内のマッピング１０８を更新する。一実施形態では、マッピング更新ユニット８０６は、フェーズ検出器８０４によって呼び出されるプロセッサのマイクロコードを備える。代替実施形態では、マッピング更新ユニット８０６は状態機械を備え、この状態機械は、新しいフェーズが検出されたというフェーズ検出器８０４からのインジケータと、新しいフェーズの識別子とを受け取る。フェーズ解析については、下記で図３６に関してより詳細に説明する。
【００５２】
次に図９を参照すると、図１のキャッシュ・メモリ１０２を含む図８のプロセッサの動作を示す流れ図が示されている。流れはブロック９０２から始まる。
【００５３】
ブロック９０２で、図８のフェーズ検出器８０４は、走っているプログラムが新しいフェーズに入ったことを検出する。新しいフェーズを検出したことに応じてフェーズ検出器８０４は、図８のマッピング更新ユニット８０６に通知する。流れはブロック９０４へ進む。
【００５４】
ブロック９０４で、マッピング更新ユニット８０６は、フェーズ検出器８０４から受け取った（たとえば図７のブロック７０４でデバイス・ドライバから受け取った）新しいフェーズの識別子をマッピング情報８０８内で検索し、キャッシュ・メモリ１０２のマッピング１０８を、検索で見つかったマッピングで更新する。加えて、マッピング更新ユニット８０６はフェーズ検出器８０４を、必要に応じて新しいフェーズ識別子８０２で更新する。一実施形態では、次に探すべきフェーズが現在のフェーズによって決まり、したがって、フェーズ検出器８０４にロードされるべきフェーズ識別子８０２は、現在のフェーズによって異なり得る。流れはブロック９０６に進む。
【００５５】
ブロック９０６で、プロセッサは走っているプログラムを実行し、キャッシュ・メモリ１０２へのメモリ・アクセスを生成し、これに応じてキャッシュ・メモリ１０２は、ブロック９０４で実行された更新マッピング１０８に基づいて、図５及び図６に関して説明されたウェイのサブセット内に割り当てる。流れはブロック９０６で終わる。
【００５６】
本明細書で説明されるキャッシュ・メモリの実施形態は、特定の数のウェイ、セット、キャッシュ・ライン・サイズ、タグ・サイズ、状態プロトコルなどを有するが、数の異なるこれら構成物、又はキャッシュ・メモリの諸特性をキャッシュ・メモリが有する別の実施形態も企図されることを理解されたい。
【００５７】
次に図１０を参照すると、セット・アソシエイティブ・キャッシュ・メモリ１００２を示すブロック図が示されている。図１０のキャッシュ・メモリ１００２は、多くの点で図１のキャッシュ・メモリ１０２と類似しており、同様の番号が付けられた要素は類似している。しかし、図１０のキャッシュ・メモリ１００２は、図１のマッピング１０８とは異なるマッピング１００８を含む。図１０のキャッシュ・メモリ１００２に関して、各セットは、複数の互いに排他的なグループ１００１（本明細書ではＬグループと呼ばれる）のうちの１つに所属する。より具体的には、図１０のマッピング１００８は、複数のＭＡＴの各ＭＡＴについて、ＭＡＴをアレイ１０４の複数のウェイのサブセットと関連付けるが、さらにＬグループの各グループ１００１についてもそうする。したがって、たとえば図１０のマッピング１００８は実質上Ｌグループ１００１のそれぞれについて、図２のものと同様のマッピング１０８を含む。それゆえに、図２のマッピング１０８は実質上ＭＡＴ  １０１番号で一次元でインデックス付けされるのに対し、図１０のマッピング１００８は実質上ＭＡＴ  １０１番号とグループ１００１番号の両方によって二次元でインデックス付けされる。
【００５８】
図１０の一例では、セットの４つのグループがあり、これらはセット０から５１１までを含むグループ０  １００１−０、セット５１２から１０２３までを含むグループ１  １００１−１、セット１０２４から１５３５までを含むグループ２  １００１−２、セット１５３６から２０４７までを含むグループ３  １００１−３と表示される。したがって、マッピング１００８は４つのグループ１００１のそれぞれについて、各ＭＡＴをアレイ１０４の１６個のウェイのサブセットと関連付ける。つまり、図１０のマッピング１００８はＭＡＴをウェイのサブセットにマッピングするだけでなく、図１の実施形態のような全キャッシュ・メモリ１０２ベースよりむしろ、セット・グループ・ベースでもそのようにする。その結果、割当ユニット１０６は、マッピング１００８によって指定されたウェイのサブセット内に割り当てることになり、これにはメモリ・アクセス１２２のＭＡＴと、選択セットが所属するグループ１００１との両方が考慮に入れられる。
【００５９】
これはキャッシュ・メモリ１００２の特定のセット・グループ内の特定のＭＡＴと関連付けられたメモリ・アクセスをクランプさせる傾向があるプログラムでは、特に有利になり得る。たとえば、ＭＡＴがスタック動作と関連しているメモリ・アクセスが、キャッシュ・メモリ１００２の最初の数個のセットのまわりでクランプする傾向がある所与のプログラムを仮定する。この場合マッピング１００８は、より多数のウェイを、キャッシュ・メモリ１００２の最初の数個のセットを含むグループ内の、スタック動作と関連したＭＡＴと関連付けられたサブセット内に含み得る。こうした傾向はプログラム及びプログラム・スレッドのオフライン解析で観察することができ、また効率的なマッピングをこれらのプログラム及びプログラム・スレッドに対して判定し、キャッシュ・メモリ１００２に提供して、プログラムが走っているときにキャッシュ・メモリ１００２の効率を高めるようにマッピング１００８を更新することが、図７〜９に関して上述した方法と同様にしてできる。
【００６０】
例示的な実施形態が特定の数のグループ（たとえば図１０の４つ）について説明されるが、グループ１００１の数は大きくも（又は小さくも）できることを理解されたい。トレードオフは、グループの数が大きければ大きいほど、マッピング１００８のサイズが大きくなることである。一実施形態では、グループの細分性が非常に高く、キャッシュ・メモリ１００２の各セットにまで細かくなる。
【００６１】
次に図１１を参照すると、図１０のキャッシュ・メモリ１００２の一部分をより詳細に示すブロック図が示されている。図１０のキャッシュ・メモリ１００２の部分は、多くの点で図３のものと類似している。しかし、このキャッシュ・メモリはまた、メモリ・アクセス１２２をグループ１００１にマッピングするグループ選択論理回路１１０６を含む。より具体的には、グループ選択論理回路１１０６は、メモリ・アクセス１２２（すなわちより具体的にはメモリ・アドレスのインデックス）を受け取り、それに応じてセット・グループ番号１１０４を生成する。このセット・グループ番号は、メモリ・アクセス１２２のインデックスによって選択されたセットを含むグループ１００１の番号を指定する。セット・グループ番号１１０４は選択入力としてｍｕｘ  １１０２に供給され、ｍｕｘは、セット・グループ（たとえば図１１の例では４つ）すべてのベクトル３０４を受け取り（すなわち図３のものと同様に、ＭＡＴごとに１つ）、セット・グループ番号１１０４で指定されたグループ１００１と関連付けられたベクトル３０４を選択してｍｕｘ  ３０２に供給する。ｍｕｘ  ３０２は、３２個の選択ベクトル３０４のうちの１つのベクトル３０４を選択して割当ユニット１０６に供給する。割当ユニット１０６は、置換ウェイ１１６を選択ベクトル３０４及び選択セットの置換ビット１１４に基づいて、図３に関して上述した方法と同様にして生成する。割当ユニット１０６はまた、置換ビット１１４を置換ウェイ１１６の値に基づいて、図３に関して上述した方法と同様にして更新する。
【００６２】
次に図１２を参照すると、図１０のキャッシュ・メモリ１００２を含むプロセッサの動作を示す流れ図が示されている。流れはブロック１２０２から始まる。
【００６３】
ブロック１２０２で、プロセッサはキャッシュ・メモリ１００２のＬ個のセット・グループ１００１ごとに（たとえば表１の）複数のＭＡＴの各ＭＡＴをキャッシュ・メモリ１００２のウェイのサブセットと関連付けるマッピングを受け取る。ＭＡＴによっては、セットのすべてのウェイを含むようにサブセットを指定することが望ましい場合がある。流れ図はブロック１２０４へ進む。
【００６４】
ブロック１２０４で、プロセッサはキャッシュ・メモリ１００２のマッピング１００８を、図１０の更新入力１２６を介してブロック１２０２で受け取られたマッピングによって更新する。流れはブロック１２０４で終わる。
【００６５】
次に図１３を参照すると、図１０のキャッシュ・メモリ１００２の動作を示す流れ図が示されている。流れはブロック１３０２から始まる。
【００６６】
ブロック１３０２で、キャッシュ・メモリ１００２は、キャッシュ・メモリ１００２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスは、アレイ１０４のセットを選択する。メモリ・アクセス１２２はＭＡＴ  １０１を指定する。流れはブロック１３０４へ進む。
【００６７】
ブロック１３０４で、キャッシュ・メモリ１００２は選択セットのウェイ内に割り当てる。より具体的には、割当ユニット１０６は、選択セットが属するグループのマッピング１００８がメモリ・アクセス１２２のＭＡＴ  １０１と関連付けるウェイのサブセットのウェイのうちの１つの中に割り当てる。好ましくは、割当ユニット１０６は、選択セットのウェイのすべてについて置換ビット１１４及び置換ポリシーを使用することにより、ウェイのサブセットのウェイのうちの１つを選択して割り当てる。たとえば、置換ポリシーがＬＲＵである場合、割当ユニット１０６はサブセットのＬＲＵウェイを選択する。好ましくは、割当ユニット１０６は、置換ウェイを最高使用頻度にすること、及び他のウェイをエージングすることによって置換ビット１１４を更新する。別の例では、置換ポリシーがｐＬＲＵである場合、割当ユニット１０６は、サブセットのうち適切なｐＬＲＵウェイを選択する。一実施形態では、割当ユニット１０６は、図６のブロック６０２に関して説明された方法と同様の方法で置換ビット１１４を更新する。別の例では、置換ポリシーがラウンドロビンである場合、置換ユニット１０６はサブセットのウェイを選択し、このウェイは、サブセット内のウェイの数を法としたラウンドロビン・ポインタのウェイ番号であり、ラウンドロビン・ポインタを一度回転させる。別の例では、置換ポリシーがランダムである場合、割当ユニット１０６はサブセットのランダム・ウェイを選択する。流れはブロック１３０４で終わる。
【００６８】
次に図１４を参照すると、代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ１４０２を示すブロック図が示されている。図１４のキャッシュ・メモリ１４０２は、多くの点で図１０のキャッシュ・メモリ１００２と類似している。しかし、図１４のキャッシュ・メモリ１４０２のセットは、図１０のものとは異なるグループ化がされている。具体的には、図１０のグループ１００１は、隣り合わせで番号付けされたセットを含むのに対し、図１４のグループ１４０１は、モジュラスによるセット番号のモジュロ演算の同じ結果をグループ番号が有するグループを含む。ここでモジュラスはグループの数である。図１４の例では、４つのグループ１４０１がある。グループ０  １４０１−０は、４を法とするセット番号が０であるすべてのセット、すなわち０、４、８、１２など２０４４までを含み、グループ１  １４０１−１は、４を法とするセット番号が１であるすべてのセット、すなわち１、５、９、１３など２０４５までを含み、グループ２  １４０１−２は、４を法とするセット番号が２であるすべてのセット、すなわち２、６、１０、１４など２０４６までを含み、グループ３  １４０１−３は、４を法とするセット番号が３であるすべてのセット、すなわち３、７、１１、１５など２０４７までを含む。図１４の実施形態は論理回路を含み、この論理回路は図１１に関して上述したものと、グループ選択論理回路１１０６が説明されたばかりの（すなわちグループの数であるモジュラスを使用してセット番号にモジュロ演算を行うことによって）グループ番号を生成すること以外は類似している。図１４の実施形態は、モジュラスとの相関関係を示す方法で特定のＭＡＴに関してメモリ・アクセスをクランプさせる傾向がある一部のプログラムでは、特に有利になり得る。図１４の実施形態は、バンクの数がグループの数に対応し、各バンクのセットがグループのセットに対応するバンク・キャッシュ・メモリの実施形態で相乗効果がある。
【００６９】
好ましくは、グループ選択論理回路１１０６は更新可能であり、その結果この論理回路は、図１０のものなど連続するセット・グループ化に対して、又は図１４のものなどモジュラス・ベースのセット・グループ化に対して、又はセット番号のハッシュ、メモリ・アクセス１２２のメモリ・アドレスのタグ・ビットのハッシュ、もしくはこれらの組合せなどの別のグループ化スキームに対して、所望のマッピング１００８を選択するためのセット・グループ番号１１０４を生成できるようになる。さらに好ましくは、グループ選択論理回路１１０６は、異なる数のグループをサポートするために更新される。グループ選択論理回路１１０６の更新は、図１２に関して説明されたように、マッピング１００８が更新されたときに実行することができる。グループ選択論理回路１１０６のこの更新可能性により、多種多様なプログラム及びプログラム・フェーズに対してキャッシュ・メモリ１００２／１４０２の効率を改善する値で、マッピング１００８を更新する可能性を高めることができる。
【００７０】
次に図１５を参照すると、代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ１５０２を示すブロック図が示されている。図１５のキャッシュ・メモリ１５０２は、多くの点で図１０のキャッシュ・メモリ１００２と類似している。図１５のキャッシュ・メモリ１５０２は、セットの互いに排他的な複数のグループを指定するマッピング１５０８を含み、このグループは図１５の実施形態では、図１０の実施形態と類似の４つのグループ１５０１である（たとえば図１４のグループ化など、他のセット・グループ化も企図されるが）。しかし、図１５のマッピング１５０８はさらに、アレイ１０４の記憶要素１１２の複数のチャンク１５０３を指定する。一般的に言えば、アレイ１０４がＮ個のウェイ、及びＬ個の互いに排他的なグループ１５０１を有すると仮定すれば、チャンク１５０３はアレイ１０４の記憶要素１１２を包含し、これら記憶要素は、Ｌ個の互いに排他的なグループの１つと、アレイ１０４のＮ個のウェイのうちの１つ又は複数のウェイとの論理的交点になる。図１５の例では、１１個の異なるチャンク１５０３が示されている。たとえば、チャンク２  １５０３−２は、グループ０  １５０１−０とウェイ６から９までにある記憶要素１１２であり、チャンク８  １５０３−８は、グループ２  １５０１−２とウェイ１０から１５までにある記憶要素１１２であり、チャンク１１  １５０３−１１は、グループ３  １５０１−３とウェイ７から１２までにある記憶要素１１２である。図１５の実施形態では、すべての記憶要素１１２が、図１７の実施形態とは対照的にチャンク１５０３に含まれる。図１７の実施形態では、１つ又は複数のセット・グループに関して、より詳細に下記で説明されるように、グループのウェイの一部がチャンクの中にマッピングされない。図２０及び図２１に関して下記で説明されるものと類似しているマッピング構造体を使用して、図２２Ｄで観察できるように、チャンク１５０１を指定することができる。しかし、同じ置換スキームがセット全体にわたって使用され、すべての置換ビット１１４がセットのすべてのウェイに対し使用される場合、パーセル指定子２００１は、置換ビット・ポインタ２０１２を含む必要がない。
【００７１】
図１５の実施形態の別の特徴は、マッピング１５０８がＭＡＴをチャンク１５０３と関連付けることである。より具体的には、所与のグループ１５０１では、マッピング１５０８がグループ１５０１のチャンク１５０３のどれとも関連付けないＭＡＴがいくつかあり得る。
【００７２】
次に図１６を参照すると、図１５のキャッシュ・メモリ１５０２の動作を示す流れ図が示されている。流れはブロック１６０２から始まる。
【００７３】
ブロック１６０２で、キャッシュ・メモリ１００２は、キャッシュ・メモリ１５０２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスは、アレイ１０４のセットを選択する。メモリ・アクセス１２２はＭＡＴ  １０１を指定する。流れはブロック１６０４へ進む。
【００７４】
ブロック１６０４で、キャッシュ・メモリ１５０２は、マッピング１５０８がＭＡＴ  １０１を選択セットに交差したチャンク１５０３と関連付けるかどうかを判定する。流れは判定ブロック１６０６へ進む。
【００７５】
判定ブロック１６０６では、ブロック１６０４においてキャッシュ・メモリ１５０２が、マッピング１５０８がＭＡＴ  １０１を選択セットに交差したチャンク１５０３と関連付けると判定した場合、流れがブロック１６０８へ進み、それ以外の場合はブロック１６１２へ進む。
【００７６】
ブロック１６０８で、割当ユニット１０６は選択セットのウェイ内に割り当てる。より具体的には、割当ユニット１０６は、たとえば図１３のブロック１３０４に関して説明された選択セットに交差したチャンク１５０３のウェイ内に割り当てる。マッピング１５０８がＭＡＴ  １０１を、選択セットに交差した複数のチャンク１５０３と関連付ける場合、割当ユニット１０６は、交差チャンク１５０３のウェイの合併のウェイのいずれかの中に割り当てる。流れはブロック１６０８で終わる。
【００７７】
ブロック１６１２で、割当ユニット１０６は、選択セットのウェイのいずれかの中に割り当てる。たとえば、置換ビット１１４は、全セット（すなわちすべてのセットのウェイ）に対するｐＬＲＵ情報を保持するビットを含むことができ、割当ユニット１０６は、選択セットのｐＬＲＵウェイ内に割り当てることができ、或いは、割当ユニット１０６は、真ＬＲＵ、ラウンドロビン若しくはランダム方式、又は置換スキームへの入力としてのＭＡＴに基づく優先度付けを含むなどの本明細書に記載の置換スキームの他のものにおいて、選択セット内に割り当てることができる。流れはブロック１６１２で終わる。
【００７８】
下記の例示的なマッピングは、図１５及び図１６の実施形態の使用について説明するものである。下記の特徴を有するプログラムを考える。第１に、プログラムは非常にコール／リターンが重く、ｆｕｓｅｄ＿ｓｔｏｒｅ＿ｕｐｄａｔｅ、ｓｔｏｒｅ＿ｐｕｓｈ、ｓｔｏｒｅ＿ｕｐｄａｔｅ及びｓｔｏｒｅ＿ｕｐｄａｔｅ＿ｎａｃの各ＭＡＴ（一般的に言えば、スタック・アクセスと関連付けられたＭＡＴグループ）を有する多くのメモリ・アクセスを生成し、これらはキャッシュ・メモリ１９０２の上方の４番目にインデックス付けする傾向がある。第２に、ＭＡＴ  ｂｏｘｐｆ、ｆｕｓｅｄ＿ｓｔｏｒｅ＿ａｐｓ、ｌｏａｄ＿ａｐｓ、ｓｔｏｒｅ＿ａｐｓ及びｓｔｏｒｅ＿ｎｔ＿ａｐｓの各ＭＡＴ（一般に、媒体データと関連付けられたＭＡＴグループ）によって生成されたメモリ・アクセスは、メモリ・トラフィックを支配する傾向がある。第３に、プログラムは、テーブルウォークＭＡＴメモリ・アクセスに対する専用ウェイを有することから利益を得る傾向があり、またキャッシュ・メモリ１９０２の下方の４番目にインデックス付けする傾向がある。オフライン解析では、プログラムがマッピング１００８から利益を得ることを示すことができ、このマッピングは：キャッシュ・メモリ１９０２の最上部４番目を含む第１のセット・グループと交差し、媒体ＭＡＴグループをウェイ０から１３までに関連付けるチャンク０と、第１のセット・グループと交差し、スタックＭＡＴグループをウェイ０から１３までに関連付けるチャンク１と、キャッシュ・メモリ１９０２の最下部４番目を含む第２のセット・グループと交差し、媒体データＭＡＴグループをウェイ０から１４までに関連付けるチャンク２と、第２のセット・グループと交差し、スタック・アクセスＭＡＴグループをウェイ０から１３までに関連付けるチャンク３とを作成する。この場合、キャッシュ・メモリ１９０２のセットの中間半分は、チャンクとマッピングされないままにされる。その理由は、媒体データ及び関連するｂｏｘｐｆプリフェッチが支配する傾向がある（またキャッシュ・メモリ１９０２の全ウェイを必要とする傾向がある）からである。またテーブルウォーク又はスタック・メモリ・アクセスをセットの中間半分から絶縁する必要がない。
【００７９】
次に図１７を参照すると、代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ１７０２を示すブロック図が示されている。図１７のキャッシュ・メモリ１７０２は、多くの点で図１５のキャッシュ・メモリ１５０２と類似している。図１７のキャッシュ・メモリ１７０２はマッピング１７０８を含み、このマッピングは、グループ１７０１の一部ではマッピングがグループ１７０１のチャンク１７０３内の全ウェイを含むことができない、という点で図１５のマッピング１５０８とは異なる。つまり、グループ１７０１のチャンク１７０３のいずれにもマッピングされないウェイがいくつかあり得る。図１７の例では、グループ０  １７０１−０のウェイ０から１まで、グループ１  １７０１−１のウェイ０、及びグループ２  １７０１−２のウェイ０から２までが、マッピング１７０８によってチャンク１７０３にマッピングされない。
【００８０】
次に図１８を参照すると、図１７のキャッシュ・メモリ１７０２の動作を示す流れ図が示されている。図１８は図１６と類似しており、同様の番号が付けられたブロックは類似している。しかし流れは、判定ブロック１６０６の「ＮＯ」出口から、図１６のようにブロック１６１２にではなく、ブロック１８１２へ進む。
【００８１】
ブロック１８１２で、割当ユニット１０６は、たとえば図１３のブロック１３０４に関して説明された、選択セットのマッピングされていないいずれかのウェイ内に割り当てる。たとえば、選択セットがグループ２  １７０１−２に属する場合、割当ユニット１０６は、図１７の例ではマッピングされていないウェイ０から２までのうちの１つの中に割り当てる。流れはブロック１８１２で終わる。
【００８２】
チャンクの細分性が変わる様々な実施形態が企図される。たとえば、図１０、１４、１５及び１７の実施形態では、セットが互いに排他的な４つのグループにグループ分けされ、それによって、６４個までのチャンクが可能になる（４グループのセット×１６ウェイ）。しかし、より多い又は少ないチャンクを可能にするために、互いに排他的なグループの数が異なる他の実施形態も企図される。一実施形態では、各セットは、キャッシュ・メモリ内の各記憶要素（すなわちエントリ）をチャンクとすることができるように、それ自体互いに排他的なグループとすることができる。グループの数が大きければ大きいほど、より細分化されたキャッシュ・メモリを配分して、解析されるプログラムのニーズに対してキャッシュ・メモリを適応させることができるのに対し、グループの数が少なければ少ないほど、チャンク特性を記述するために必要な制御ビットが少なくなることに留意されたい。
【００８３】
次に図１９を参照すると、セット・アソシエイティブ・キャッシュ・メモリ１９０２を示すブロック図が示されている。図１９のキャッシュ・メモリ１９０２は、多くの点で図１のキャッシュ・メモリ１０２と類似しており、同様の番号が付けられた要素は類似している。しかし、図１９のキャッシュ・メモリ１９０２は、図１のマッピング１０８とは異なるマッピング１９０８を含む。加えて、置換ビット１９１４は図１の置換ビット１１４と異なる。図１９のマッピング１９０８及び置換ビット１９１４は、キャッシュ・メモリ１９０２がヘテロジニアス置換スキームを使用できるようにする。つまり、各セットはパーセルと呼ばれるウェイのサブセットを有し、各パーセルはそれ自体の置換スキームを有する。つまり、セットの各パーセルは、より詳細に下記で説明されるように、異なる数のウェイを含むことができ、セットの置換ビット１９１４の別の部分を使用することができ、またパーセル内でウェイを置換するための異なる置換スキームを使用することができる。たとえば、オフライン解析では、いくつかのプログラムがＭＡＴをパーセルにグループ分けし、次にこれらパーセルに対して別の置換スキームを使用することから利益を得られることを明らかにすることができる。
【００８４】
図１９には、例として、３つのパーセル１９０１がインデックス１５００の選択セット内に示されている。パーセル０  １９０１−０はセットのウェイ０から４までを含み、パーセル１  １９０１−１はセット５から１２までを含み、パーセル２  １９０１−２はセット１３から１５までを含む。置換ビット１９１４は、図２０に関してより詳細に説明されるように、パーセル１９０１のそれぞれで別々の部分を含む。一実施形態では、パーセル１９０１はキャッシュ・メモリ１９０２の全セットに対しグローバルである。すなわち、図２２Ｃに関して説明されるように、アレイ１０４のすべてのセットは同様にパーセル化される。この実施形態は、たとえば図１の実施形態と互換性がある。別の実施形態では、パーセル１９０１がセットのグループと関連付けられる。すなわち、図２２Ｄに関して説明されるように、すべてのセット・グループ２２９１が同様にパーセル化される。この実施形態は、たとえば図１０から図１８までの実施形態と互換性がある。別の実施形態では、パーセル１９０１が個々のセットと関連付けられる。すなわち、図２２Ｅに関して説明されるように、すべてのセットがそれ自体のパーセルを有する。
【００８５】
次に図２０を参照すると、一実施形態によるパーセル指定子２００１及びパーセル指定子トリプレット２０２１を示すブロック図が示されている。パーセル指定子２００１は、有効ビット２００２、ＭＡＴベクトル２００４、ウェイ・ベクトル２００６、置換スキーム２００８、及び置換ビット・ポインタ２０１２を含む。有効ビット２００２は、パーセル指定子２００１が有効であるかどうかを表示する。選択セットに対するパーセル１９０１の数は、より詳細に下記で説明されるように、パーセル指定子トリプレット２０２１中の真有効ビット２００２の数によって判定される。
【００８６】
ＭＡＴベクトル２００４は、複数のＭＡＴ（たとえば表１の３２個のＭＡＴ）の各ＭＡＴに対応するビットを有する。ＭＡＴベクトル２００４中のセット・ビットは、対応するＭＡＴがパーセル１９０１と関連付けられることを表示する。代替実施形態では、パーセル指定子２００１は、ＭＡＴベクトル２００４ではなくＭＡＴグループ・ベクトルを含む。ＭＡＴグループ・ベクトルは、各ＭＡＴグループ（たとえば４つのＭＡＴグループ）に対応するビットを有する。この実施形態では、マッピング１９０８は、たとえば図２９に関して説明されるような、ＭＡＴグループ・マッピングに対するＭＡＴを含む。割当ユニット１０６は、メモリ・アクセス１２２のＭＡＴ  １０１をＭＡＴグループ・マッピングに対するＭＡＴへの入力として使用し、パーセルのパーセル指定子２００１へのＭＡＴグループ出力を使用して割り当てる。ＭＡＴグループ・ベクトルは、要求するビットがＭＡＴベクトル２００４よりも少なくてよく、これはパーセル指定子２００１の数が比較的大きい場合に特に有利である。
【００８７】
ウェイ・ベクトル２００６は、アレイ１０４のＮ個のウェイ（たとえば１６個のウェイ）の各ウェイに対応するビットを有する。ウェイ・ベクトル２００６中のセット・ビットは、対応するウェイがパーセル１９０１に含まれていることを表示する。つまり、ウェイ・ベクトル２００６は、パーセル１９０１に含まれるウェイのサブセットを指定する。代替実施形態では、ウェイ・ベクトル２００６は第１及び第２の部分を含み、これらの部分は、パーセル１９０１と関連付けられた置換ビット１９１４の部分とブール演算されて新しい値（たとえばｐＬＲＵベクトル）を生成し、この値を用いて、図６の代替実施形態に関して上述した方法と同様に、置換ビット１９１４を更新する。この実施形態では、パーセル１９０１に含まれるウェイのサブセットは間接的に指定され、割当ユニット１０６は、含まれるウェイのサブセットをウェイ・ベクトル２００６から導出する。別の代替実施形態では、パーセル指定子２００１は、ウェイ・ベクトル２００６ではなくウェイ・ポインタを含む。ウェイ・ポインタは、パーセル１９０１内の第１のウェイを指し示す。この実施形態では、パーセルに含まれるウェイはすべて隣接している。ポインタはまた、ウェイの数を指定することもでき、或いは、第１のパーセル１９０１はそのウェイ・ポインタ中のウェイ０を指定しなければならず、割当ユニット１０６はウェイの数を隣接するウェイ・ポインタの差として計算する。
【００８８】
置換スキーム２００８は、関連付けられたパーセル１９０１を置換するため、又はその中に割り当てるために使用される置換ポリシーを指定する。一実施形態では、異なる置換スキーム（たとえば真ＬＲＵ、ｐＬＲＵ、ラウンドロビン、ランダム、ＭＡＴによる優先度、ＭＡＴ優先度を含む様々なハイブリッドなど）が番号付けされ、置換スキーム・フィールド２００８は、置換スキームの符号化値を保持する。
【００８９】
置換ビット・ポインタ２０１２は、関連付けられたパーセル１９０１用の置換ポリシー・ビットとして使用される置換ビット１９１４の部分を指定する。好ましくは、置換ビット・ポインタ２０１２は、関連付けられたパーセル１９０１用の置換ポリシー・ビットとして使用される置換ビット１９１４の部分の第１のビットを指し示す。パーセル１９０１に必要な置換ビット１９１４の数は、パーセル１９０１及びスキーム２００８の中のウェイの数によって決まる。一実施形態では、ポインタ２０１２用のビットが含まれないが、その代わりに、有効パーセル１９０１の数、パーセル１９０１のウェイの数、及びスキーム２００８から、すなわち所与のスキーム２００８に必要なビットの数及びその関連付けられたウェイの数から、割当ユニット１０６によって計算される。
【００９０】
単一のウェイを含むパーセル１９０１の場合では、置換ビット１９１４のどれもパーセル１９０１によって消費される必要がない。その理由は、パーセル１９０１の１つのウェイは常に置換されるからである。２つのウェイでありＬＲＵ置換スキーム２００８を有するパーセル１９０１の場合では、たとえば、置換ビット１９１４の単一のビットを使用して２つのウェイのＬＲＵウェイを表示することができる。或いは、ＭＡＴ優先度に基づく置換スキーム２００８を有する４つのウェイ・パーセル１９０１を仮定すると、たとえばＭＡＴベクトル２００４は、５つの異なるＭＡＴをパーセルと関連付け、これらのＭＡＴのうちの２つ（たとえばｌｏａｄ＿ｓｕｐｅｒｖｉｓｏｒ及びｓｔｏｒｅ＿ｓｕｐｅｒｖｉｓｏｒ）は、他の３つのＭＡＴよりも優先度が高い。この場合、４つの置換ビット１９１４があり（パーセルのウェイの数と等しい）、置換ビット１９１４が真であれば、高い優先度ｌｏａｄ＿ｓｕｐｅｒｖｉｓｏｒ又はｓｔｏｒｅ＿ｓｕｐｅｒｖｉｓｏｒのＭＡＴによるメモリ・アクセスに応答してウェイが割り当てられたことを表示し、それ以外の場合置換ビット１９１４は偽であり、割当ユニット１０６は、ウェイを偽の置換ビット１９１４と置換しようとし、ウェイを真の置換ビット１９１４と置換することを回避しようとする。説明されたばかりの置換スキーム２００８の拡張部は、パーセルごとに追加の置換ビット１９１４を有することになり、この置換ビットは、高い優先度のＭＡＴと関連付けられるウェイの中のＬＲＵウェイを表示する。したがって、たとえば、パーセル１９０１の４つすべてのウェイが高い優先度のＭＡＴと関連付けられる場合、割当ユニット１０６は、パーセル１９０１のＬＲＵに関連した置換ビット１９１４によって表示された４つのウェイのうちのＬＲＵウェイ内に割り当てる。ＭＡＴに関する優先度を組み込む他の置換スキームも企図される。別の置換スキーム２００８はラウンドロビンを含み、そこで置換ビット１９１４の部分が、パーセル１９０１の中に割り当てられた最後のウェイを指定する。
【００９１】
パーセル指定子トリプレット（ＰＳＴ）２０２１は３つのパーセル指定子２００１を含み、パーセル指定子１  ２００１−１、パーセル指定子２  ２００１−２、及びパーセル指定子３  ２００１−３と表示される。ＰＳＴ  ２０２１を有する図２０の実施形態では、セットごとのパーセル１９０１の数を３個に制限する。しかし、セットごとのパーセル１９０１（したがってパーセル指定子２００１）の最大数が３個とは異なるが、しかし少なくとも２個である他の実施形態も企図される。パーセル１９０１がキャッシュ・メモリ１９０２のすべてのセットに対しグローバルである実施形態では（たとえば図２２Ｃ）、キャッシュ・メモリ１９０２用の単一のＰＳＴ  ２０２１がある。パーセル１９０１がセットのグループと関連付けられる実施形態では（たとえば図２２Ｄ）、セット・グループ２２９１ごとにＰＳＴ  ２０２１がある。パーセル１９０１が個々のセットと関連付けられる実施形態では（たとえば図２２Ｅ）、セットごとにＰＳＴ  ２０２１がある。
【００９２】
次に図２１を参照すると、図１９のキャッシュ・メモリ１９０２の一部分をより詳細に示すブロック図が示されている。図２１は、パーセル１９０１がセットのグループと関連付けられる（たとえば図２２Ｄ）実施形態を示す。図２１の実施形態では、図１９のマッピング１９０８は、図２１にＬで表示される複数のグループのそれぞれにＰＳＴ  ２０２１を含む。ｍｕｘ  ３０２は、Ｌ個のＰＳＴ  ２０２１を受け取り、そのうちの１つを、割当ユニット１０６に供給するためにセット・グループ番号２１０４の値に基づいて選択する。セット・グループ番号は、メモリ・アクセス１２２に応答して、特にメモリ・アクセス１２２のインデックス部分に応答して、セット・グループ選択論理回路２１０６で生成される。メモリ・アクセス１２２のＭＡＴインジケータ１０１は、割当ユニット１０６に供給される。一実施形態では、割当ユニット１０６は、メモリ・アクセス１２２と関連付けられたパーセル１９０１をＭＡＴ  １０１及びＰＳＴ  ２０２１に基づいて選択する。しかし別の実施形態では、割当ユニット１０６は、メモリ・アクセス１２２と関連付けられたパーセル１９０１を、ＭＡＴ  １０１を使用せずに、メモリ・アクセス１２２のメモリ・アドレス及びＰＳＴ  ２０２１に基づいて選択する。つまり、キャッシュ・メモリにおけるヘテロジニアス置換ポリシーの使用は、ＭＡＴを受け取らないキャッシュ・メモリと共に使用することができる。割当ユニット１０６はまた、選択セットの図１９の置換ビット１９１４（すなわちメモリ・アクセス１２２のメモリ・アドレスのインデックスによって選択されたキャッシュ・メモリ１０２のセット）を受け取る。選択されたＰＳＴ  ２０２１と、パーセル指定子２００１によって指定された置換ビット１９１４の部分とに基づいて、またいくつかの実施形態ではＭＡＴ  １０１にも基づいて、割当ユニット１０６は図１９の置換ウェイ１１６を生成する。割当ユニット１０６はまた、パーセル指定子２００１によって指定された置換ビット１９１４の部分を置換ウェイ１１６の値に基づいて更新する。
【００９３】
次に図２２Ａを参照すると、図１９のキャッシュ・メモリ１９０２を含むプロセッサの動作を示す流れ図が示されている。流れはブロック２２０２から始まる。
【００９４】
ブロック２２０２で、プロセッサは、図２０のパーセル指定子トリプレット２０２１を含むマッピングを受け取る。流れはブロック２２０４へ進む。
【００９５】
ブロック２２０４で、プロセッサは、図１９の更新入力１２６を介してブロック２２０２で受け取られたマッピングにより、キャッシュ・メモリ１９０２のマッピング１９０８を更新する。流れはブロック２２０４で終わる。
【００９６】
次に図２２Ｂを参照すると、一実施形態による図１９のキャッシュ・メモリ１９０２の動作を示す流れ図が示されている。流れはブロック２２１２から始まる。
【００９７】
ブロック２２１２で、キャッシュ・メモリ１９０２は、キャッシュ・メモリ１９０２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスは、アレイ１０４のセットを選択する。メモリ・アクセス１２２はＭＡＴ  １０１を指定する。メモリ・アクセス１２２のメモリ・アドレスはまた、選択セットと関連付けられたセット・グループを判定するためにも使用され、たとえばセット・グループ選択論理回路２１０６は、メモリ・アクセス１２２のメモリ・アドレスに応じて図２１のセット・グループ番号２１０４を生成する。グローバル・パーセル実施形態では（たとえば図２２Ｃ）、単一のＰＳＴ  ２０２１しかないので、ＰＳＴ  ２０２１を選択する必要がない。セットごとのパーセルの実施形態では（たとえば図２２Ｅ）、セットの選択でまた、ＰＳＴ  ２０２１を選択する。その理由は、ＰＳＴが選択セットと関連付けられているからである。流れはブロック２２１４へ進む。
【００９８】
ブロック２２１４で、割当ユニット１０６は、メモリ・アクセス１２２がどのパーセル１９０１と関連付けられているかを判定し、その関連付けられているパーセル１９０１のパーセル指定子２００１を選択する。図２１の実施形態では、割当ユニット１０６は選択されたＰＳＴ  ２０２１を調べ、どのパーセル指定子２００１を選択すべきか判定する。割当ユニット１０６は、各パーセル指定子２００１のＭＡＴベクトル２００４を調べて、どれがＭＡＴ  １０１を指定しているかを判定する。割当ユニット１０６は、ＭＡＴ  １０１を指定しているパーセル指定子２００１を選択する。一実施形態では、ＭＡＴ  １０１がいずれのパーセル指定子２００１のＭＡＴベクトル２００４によっても指定されていない場合に、割当ユニット１０６は、選択セットのウェイのいずれかの中に割り当てる。
【００９９】
代替実施形態では、割当ユニット１０６は、メモリ・アクセス１２２のメモリ・アドレスからパーセル１９０１を判定することを、ＭＡＴ  １０１を参照せず、その代わりにメモリ・アドレスを、割当ユニット１０６に供給されるメモリ・アドレスのセット又は範囲と比較することによって行う。一実施形態では、プロセッサのスラッシング検出器（たとえばブルーム・フィルタ）が、最近の追い出しに適合するキャッシュ・ライン割当を監視する。スラッシングは、たとえばプログラムが、大きいデータ構造に対してランダム・メモリ・アクセスを引き起こしているために起り得る。プログラムがこの挙動を示している場合、たとえばプログラムが、リンクされたリストを現在の置換スキーム（たとえばｐＬＲＵ）のワーストケース・シナリオを作り出すようにしてメモリを通してトラバースする場合には、その挙動の時間的及び空間的局所性が乏しいことにより、キャッシュ・メモリ１９０２におけるヒット率が非常に低くなり得る。スラッシング検出器は、スラッシングが起きているメモリ・アドレスのセットを判定し、このメモリ・アドレスのセットを割当ユニット１０６に供給する。ＰＳＴ  ２０２１は更新されて、そのメモリ・アドレスのセットと関連付けられた別のパーセル１９０１を作り出し、その結果、割当ユニット１０６は、スラッシング検出器によって指定されたメモリ・アドレスのセットに入るメモリ・アクセス１２２によって影響を受けるセット内に割り当てるための、ランダム置換スキームを使用するようになる。ランダム置換ポリシーに変えることは、メモリ・アクセスに対するキャッシュ・ヒット率に役立つことも役立たないこともあるが、しかし、新しい置換ポリシーに加えて、メモリ・アクセスに対しパーセル１９０１を指定することが、プログラムの残っているデータを不良挙動ランダム・アクセスから絶縁することによって、プログラム性能全体を改善し得る。
【０１００】
別の実施形態では、たとえばバウンディング・ボックス・プリフェッチャなどのプロセッサのプリフェッチャ内のストリーミング・データ検出器は、キャッシュ・メモリ１９０２のウェイの小さいサブセットの中に隔離されるべき、及び／又は異なる置換スキームが有益であるはずの、メモリ・アドレスの範囲内のストリーミング・データ・メモリ・アクセス１２２を検出する。たとえばプログラムが、メモリ内の大きいデータ構造上で規則的に動作していると仮定する（たとえばプログラムは、オブジェクトの多次元アレイにわたって繰り返す入れ子ループから構成される）。この規則性は、アレイ及びキャッシュ・メモリ１９０２の相対的サイズ、及び／又は置換ポリシーによっては、メモリ階層に悪影響を及ぼし得る。データ構造中のオブジェクトが圧縮されている場合、且つキャッシュ・ラインが規則的な刻み幅でアクセスされる場合、キャッシュ・メモリ１９０２に対する効果は、データ構造の一部ではない潜在的に有用なデータをキックアウトしながら、実質的に使い捨てのデータでキャッシュ・メモリ１９０２を効果的に満たすことである。データは実際には使い捨てではないことがあるが、データ構造が、何度も同じセットにエイリアスするのに十分な大きさの場合（たとえばキャッシュ・メモリ１９０２のウェイの数である１６よりも大きい）、データは同様に使い捨てにできることに留意されたい。その理由は、Ｎ番目のキャッシュ・ラインは、キャッシュ・メモリ１９０２がそのキャッシュ・ラインをキックアウトするように強制されてＮ＋１６番目のキャッシュ・ラインのための空間を作る前には、再びアクセスされることがありそうにないからである。この場合、プリフェッチャはこれらのストリームを識別し、キャッシュ・メモリ１９０２のウェイの小さいサブセットを有するパーセル１９０１にメモリ・アクセス１２２が隔離されるべきことをキャッシュ・メモリ１９０２に知らせる。メモリ・アクセス１２２は、プリフェッチャから割当ユニット１０６に供給されるメモリ・アドレスの範囲内のプリフェッチャによって生成されるプリフェッチである。新しい割り当てを隔離することに加えて（又は場合により、その代わりに）プリフェッチャは、割り当てが誘導される先のウェイのために別の置換ポリシー（たとえばラウンドロビン／ＦＩＦＯ又はランダム）を使用するようにキャッシュ・メモリ１９０２を誘導する。それに応じてＰＳＴ  ２０２１は更新されて、適切な置換スキームを有する必要なパーセル１９０１が作り出される。
【０１０１】
流れは、ブロック２２１４からブロック２２１６へ進む。
【０１０２】
ブロック２２１６で、割当ユニット１０６はブロック２２１４で選択されたパーセル指定子２００１を使用して、パーセル１９０１と関連付けられたウェイのサブセット、置換スキーム及び置換ビット１９１４の部分を判定する。流れはブロック２２１８へ進む。
【０１０３】
ブロック２２１８で、割当ユニット１０６は関連付けられた置換スキーム及び置換ビット１９１４の部分を使用して、たとえば置換ウェイ１１６によって表示された、選択セットのパーセル１９０１と関連付けられたウェイのサブセット内に割り当てる。流れはブロック２２２２へ進む。
【０１０４】
ブロック２２２２で、割当ユニット１０６はブロック２２１８において割り当てがされたウェイに基づいて、パーセル１９０１と関連付けられた置換ビット１９１４の部分を更新する。流れはブロック２２２２で終わる。
【０１０５】
次に図２２Ｃを参照すると、ヘテロジニアス置換ポリシーを使用する図１９のキャッシュ・メモリ１９０２の実施形態を示すブロック図が示されている。図２２Ｃの実施形態では、パーセル１９０１はキャッシュ・メモリ１９０２のすべてのセットに対しグローバルである。すなわち、アレイ１０４のすべてのセットが同様に分割されている。図２２Ｃで、アレイ１０４のすべてのセットについて、ウェイ０から５までのサブセットが、下部から上部への斜線陰影付けで示されるようにパーセル０に含まれ、パーセル指定子０によって指定され、ウェイ６から９までのサブセットが、上部から下部への斜線陰影付けで示されるようにパーセル１に含まれ、パーセル指定子１によって指定され、またウェイ１０から１５までのサブセットが、網目状の陰影付けで示されるようにパーセル２に含まれ、パーセル指定子２によって指定される。
【０１０６】
次に図２２Ｄを参照すると、ヘテロジニアス置換ポリシーを使用する図１９のキャッシュ・メモリ１９０２の実施形態を示すブロック図が示されている。図２２Ｄの実施形態では、パーセル１９０１がセットのグループ２２９１と関連付けられる。すなわち、すべてのセット・グループ２２９１が同様に分割されている。図２２Ｄで、アレイ１０４のセット・グループ０  ２２９１−０（セット０から５１１まで）では、ウェイ０から５までのサブセットがパーセルＡに含まれ、パーセル指定子１によって指定され、ウェイ６から９までのサブセットがパーセルＢに含まれ、パーセル指定子２によって指定され、またウェイ１０から１５までのサブセットがパーセルＣに含まれ、パーセル指定子３によって指定される。アレイ１０４のセット・グループ１  ２２９１−１（セット５１２から１０２３まで）では、ウェイ０から３までのサブセットがパーセルＤに含まれ、パーセル指定子４によって指定され、ウェイ４から１１までのサブセットがパーセルＥに含まれ、パーセル指定子５によって指定され、またウェイ１２から１５までのサブセットがパーセルＦに含まれ、パーセル指定子６によって指定される。アレイ１０４のセット・グループ２  ２２９１−２（セット１０２４から１５３５まで）では、ウェイ０から９までのサブセットがパーセルＧに含まれ、パーセル指定子７によって指定され、またウェイ１０から１５までのサブセットがパーセルＨに含まれ、パーセル指定子８によって指定される。つまり、グループ２  ２２９１−２は２つだけのパーセル１９０１を含む。アレイ１０４のセット・グループ３  ２２９１−３（セット１５３６から２０４７まで）では、ウェイ０から１５までのすべてがパーセルＪに含まれ、パーセル指定子９によって指定される。つまり、グループ３  ２２９１−３は１つだけのパーセル１９０１を含む。
【０１０７】
次に図２２Ｅを参照すると、ヘテロジニアス置換ポリシーを使用する図１９のキャッシュ・メモリ１９０２の実施形態を示すブロック図が示されている。図２２Ｅの実施形態では、パーセル１９０１は個々のセットと関連付けられている。すなわち、すべてのセットがそれ自体のパーセルを有する。図２２Ｅで、セット０では、ウェイ０から５までのサブセットがパーセルＡに含まれ、パーセル指定子１によって指定され、ウェイ６から９までのサブセットがパーセルＢに含まれ、パーセル指定子２によって指定され、またウェイ１０から１５までのサブセットがパーセルＣに含まれ、パーセル指定子３によって指定される。アレイ１０４のセット１では、ウェイ０から３までのサブセットがパーセルＤに含まれ、パーセル指定子４によって指定され、ウェイ４から１１までのサブセットがパーセルＥに含まれ、パーセル指定子５によって指定され、またウェイ１２から１５までのサブセットがパーセルＦに含まれ、パーセル指定子６によって指定される。アレイ１０４のセット２では、ウェイ０から９までのサブセットがパーセルＧに含まれ、パーセル指定子７によって指定され、またウェイ１０から１５までのサブセットがパーセルＨに含まれ、パーセル指定子８によって指定される。アレイ１０４のセット２０４７では、ウェイ０から３までのサブセットがパーセルＪに含まれ、パーセル指定子９によって指定され、ウェイ４から７までのサブセットがパーセルＫに含まれ、パーセル指定子１０によって指定され、またウェイ８から１５までのサブセットがパーセルＬに含まれ、パーセル指定子１１によって指定される。図示のパーセル１９０１は代表的なものであり、簡潔にするためにアレイ１０４の全パーセル１９０１は示されていない。
【０１０８】
様々な傾向をプログラム及びプログラム・スレッドのオフライン解析によって観察することができ、また効果的なマッピングをこの傾向に対し判定し、キャッシュ・メモリ１９０２に供給して、図７〜９に関する上述の方法と同様に、プログラムが走っているときにキャッシュ・メモリ１９０２の効率を高めるようにマッピング１９０８を更新することができる。
【０１０９】
次に図２３を参照すると、完全アソシエイティブ・キャッシュ・メモリ２３０２を示すブロック図が示されている。完全アソシエイティブ・キャッシュ・メモリ２３０２は、それぞれがインデックスを有する記憶要素１１２のアレイ１０４を含む。このインデックスは、図２３の例では０から５１１までであるが、記憶要素１１２の数が異なる他の実施形態も企図される。好ましくは、完全アソシエイティブ・キャッシュ・メモリ２３０２は、容認可能なタイミングを実現するための比較的小さいキャッシュ・メモリである。完全アソシエイティブ・キャッシュ・メモリ２３０２は、関連付けられたＭＡＴ  １０１を有するメモリ・アクセス１２２を受け取る。完全アソシエイティブ・キャッシュ・メモリ２３０２は、アレイ１０４からヒット表示１２４を受け取る割当ユニット１０６を含む。記憶要素１１２、メモリ・アクセス１２２、及び割当ユニット１０６は、注記がある場合を除き上述のものと類似している。アレイ１０４の各記憶要素１１２は、対応するＭＡＴ  ２３１４を含み、これは記憶要素１１２の割り当てを促進するメモリ・アクセスのＭＡＴを指定する。
【０１１０】
完全アソシエイティブ・キャッシュ・メモリ２３０２はまた、割当ユニット１０６と通信する、各ＭＡＴに１つが関連付けられたカウンタ２３０６を含む。各カウンタ２３０６は、アレイ１０４の有効エントリ（記憶要素１１２）の数のカウントを維持する。このアレイのＭＡＴ  ２３１４は、カウンタ２３０６と関連付けられたＭＡＴである。
【０１１１】
完全アソシエイティブ・キャッシュ・メモリ２３０２はまた、割当ユニット１０６と通信する、各ＭＡＴに１つが関連付けられた閾値２３０８を含む。各閾値２３０８は、閾値２３０８と関連付けられたＭＡＴを有するメモリ・アクセス１２２に割り当てられることができる、アレイ１０４の有効エントリの最大数を指定する。閾値２３０８は、前述の更新入力１２６と同様の更新入力１２６によって動的に更新可能である。閾値２３０８の一例が、図２４に関して下記で説明される。
【０１１２】
好ましくは、完全アソシエイティブ・キャッシュ・メモリ２３０２はまた、割当ユニット１０６と通信する、各ＭＡＴに１つが関連付けられたポインタ２３０４を含む。一実施形態では、各ポインタ２３０４は、ＭＡＴと関連付けられているアレイ１０４の有効エントリのうちの一番最近に置換されたもののインデックスを指定する。ポインタ２３０４は、ＭＡＴのカウンタ２３０６がＭＡＴに対する閾値２３０８に達したときに、ＭＡＴを有する有効エントリに対してラウンドロビン方式で割り当てるために使用される。別の実施形態では、各ポインタ２３０４は、ＭＡＴと関連付けられているアレイ１０４の有効エントリのうちのＬＲＵ又はｐＬＲＵであるもののインデックスを指定する。ポインタ２３０４は、ＭＡＴのカウンタ２３０６がＭＡＴに対する閾値２３０８に達したときに、ＭＡＴを有する有効エントリに対してＬＲＵ又はｐＬＲＵ方式で割り当てるために使用される。一実施形態では、ＭＡＴの一部で１つの置換ポリシーのポインタ２３０４を使用することができ、それ以外のＭＡＴで別の置換ポリシーのポインタ２３０４を使用することができ、好ましくはどちらでも、オフライン解析で判定すると最も効率的である。ポインタ２３０４は、所望の置換ポリシーを表示する１つ又は複数のビットを含むことができる。
【０１１３】
割当ユニット１０６は、ＭＡＴ  １０１、カウンタ２３０６、閾値２３０８及びポインタ２３０４に基づく置換インデックス２３１６を、完全アソシエイティブ・キャッシュ・メモリ２３０２内で失敗するメモリ・アクセス１２２に応じて生成する。置換インデックス２３１６は、より詳細に下記で説明されるように、割り当てがされるべき、又は置換されるべき記憶要素１１２のインデックスを指定する。
【０１１４】
次に、図２４を参照すると、一実施形態による図２３のそれぞれの閾値２３０８に対するＭＡＴのマッピングが示されている。図２４の例示的なマッピングは、表１に対応する３２個のＭＡＴを説明の目的で含む。図２４の例のマッピングは、下記に表３として転載されている。
【０１１５】
【表３】
2017507443.tif 000008
【０１１６】
図２４（及び表３）は、特定のＭＡＴのセットと、それぞれの閾値に対する特定のＭＡＴのマッピングとを示すが、この実施形態は、一例として説明の目的で提供されていること、並びにＭＡＴのセットが異なると共に閾値に対するＭＡＴのマッピングが異なる別の実施形態も企図されることを理解されたい。実際、一実施形態でマッピングは、プロセッサの動作時に、図７〜９に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づいて動的に更新される（たとえば図１の更新入力１２６によって）。
【０１１７】
次に図２５を参照すると、図１のキャッシュ・メモリ１０２の一部分をより詳細に示すブロック図が示されている。図２５の実施形態では、３２個のＭＡＴそれぞれのポインタ２３０４と閾値２３０８の対がｍｕｘ  ３０２に供給され、このｍｕｘは対の１つを、メモリ・アクセス１２２のＭＡＴインジケータ１０１の値に基づいて選択する。選択されたポインタ２３０４と閾値２３０８の対は、図２３の割当ユニット１０６に供給される。
【０１１８】
加えて、３２個のＭＡＴそれぞれのカウンタ２３０６が第２のｍｕｘ  ２５０２に供給される。第２のｍｕｘは、ＭＡＴ  １０１の値に基づいてカウンタ２３０６の１つを選択する。選択されたポインタ２３０４、カウンタ２３０６及び閾値２３０８に基づいて、割当ユニット１０６は、図２３の置換インデックス２３１６を生成する。割当ユニット１０６はまた、たとえば、より詳細に下記で図２７及び図３０に関して説明されるように、図２３のＭＡＴ  ２３１４、カウンタ２３０６及びポインタ２３０４を、置換インデックス２３１６の値に基づいて更新する。
【０１１９】
図３に関する前述の方法と同様に、代替実施形態では、キャッシュ・メモリ１０２は、下記で図２９及び図３０に関して説明されるように、より多くの数のＭＡＴ（たとえば３２個）をより少数のＭＡＴグループ（たとえば２つ）にマッピングする論理回路を含むことができる。たとえば、図２５の実施形態では、ＭＡＴグループ化論理回路（図示せず）がＭＡＴ  １０１を受け取ると共に、（ＭＡＴ  １０１ではなく）ｍｕｘ  ３０２及びｍｕｘ  ２５０２への選択入力として供給されるＭＡＴグループ番号を出力する。こうすると有利なことに、カウンタ２３０６、閾値２３０８及びポインタ２３０４の数を低減することによってハードウェアのコストを低減することができ、また各ＭＡＴ  ２３１４の記憶要素のサイズを低減することができる。
【０１２０】
次に図２６を参照すると、図２３のキャッシュ・メモリ２３０２を含むプロセッサの動作を示す流れ図が示されている。流れはブロック２６０２から始まる。
【０１２１】
ブロック２６０２で、プロセッサは（たとえば表１の）複数のＭＡＴの各ＭＡＴを閾値に関連付けるマッピング（たとえば図２４及び表３のマッピング）を受け取る。好ましくは、キャッシュ・メモリ２３０２は、閾値２３０８がデフォルト・マッピングで製造される。好ましくは、閾値２３０８のデフォルト・マッピングは、多種多様のプログラムのために、又は少なくとも特定の対象と考えられるプログラムの集団のためにキャッシュ・メモリ２３０２の効率的な動作を促進するように適応され、及び／又はキャッシュ・メモリ２３０２を含むプロセッサ上で実行される可能性があるように適応される。流れはブロック２６０４へ進む。
【０１２２】
ブロック２６０４で、プロセッサは、図２３の更新入力１２６を介してブロック２６０２で受け取られたマッピングを用いて、キャッシュ・メモリ２３０２の閾値２３０８のマッピングを更新する。好ましくは、マッピング２３０８は、システム初期化時及び／又はオペレーティング・システムのブート時に、システム・ソフトウェア（たとえばＢＩＯＳ又はオペレーティング・システム）によって更新される。さらに好ましくは、マッピング２３０８は、図７〜図９に関して前述のように、プログラムベースで、及び／又はプログラム・フェーズベースで更新される。流れはブロック２６０４で終わる。
【０１２３】
次に図２７を参照すると、図２３のキャッシュ・メモリ２３０２の動作を示す流れ図が示されている。流れはブロック２７０２から始まる。
【０１２４】
ブロック２７０２で、キャッシュ・メモリ２３０２は、キャッシュ・メモリ２３０２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスでアレイ１０４のエントリ１１２を選択する。メモリ・アクセス１２２は、ＭＡＴ  １０１を指定する。流れはブロック２７０４へ進む。
【０１２５】
ブロック２７０４で、割当ユニット１０６は、メモリ・アクセス１２２のＭＡＴ  １０１と関連付けられたカウンタ２３０６が、ＭＡＴ  １０１と関連付けられた閾値２３０８に達したかどうかを判定する。流れは判定ブロック２７０６へ進む。
【０１２６】
判定ブロック２７０６で、メモリ・アクセス１２２のＭＡＴ  １０１と関連付けられたカウンタ２３０６が、ＭＡＴ  １０１と関連付けられた閾値２３０８に達している場合、流れはブロック２７０８へ進み、それ以外の場合、流れはブロック２７１２へ進む。
【０１２７】
ブロック２７０８で、割当ユニット１０６はアレイ１０４の有効エントリ１１２を置換する。このアレイのＭＡＴ  ２３１４は、メモリ・アクセス１２２のＭＡＴ  １０１と適合する。図２３に関して前述のように、置換されるべきエントリ１１２は、好ましくは、ＭＡＴ  １０１と関連付けられたポインタ２３０４を使用して、様々な置換ポリシーによって選択することができる。流れはブロック２７０８で終わる。
【０１２８】
ブロック２７１２で、割当ユニット１０６はアレイ１０４のいずれかのエントリ１１２内に割り当てる。使用される置換ポリシーは、本明細書で説明されるもののいずれかでよい。一実施形態では、完全アソシエイティブ・キャッシュ・メモリ２３０２はグローバル・ポインタ（図示せず）を維持し、これはアレイ１０４の有効エントリのうち、ＭＡＴに関係なく一番最近に置換されたもののインデックスを指し示す。好ましくは、割当ユニット１０６は次のエントリ１１２を、有効でないポインタ、又はメモリ・アクセス１２２のＭＡＴ  １０１を有さないポインタによって指し示されたものの後に見出す。流れはブロック２７１４へ進む。
【０１２９】
ブロック２７１４で、割当ユニット１０６はメモリ・アクセス１２２のＭＡＴ  １０１と関連付けられたカウンタ２３０６をインクリメントする。流れは判定ブロック２７１６へ進む。
【０１３０】
判定ブロック２７１６で、割当ユニット１０６は置換されたエントリ１１２が有効であったかどうかを判定する。そうであった場合、流れはブロック２７１８へ進み、それ以外の場合、流れは終わる。
【０１３１】
ブロック２７１８で、割当ユニット１０６は、置換エントリ１１２のＭＡＴ  ２３１４と関連付けられたカウンタ２３０６をデクリメントする。流れはブロック２７１８で終わる。
【０１３２】
次に図２８を参照すると、図２３の完全アソシエイティブ・キャッシュ・メモリ２３０２の動作を示す流れ図が示されている。流れはブロック２８０２から始まる。
【０１３３】
ブロック２８０２で、完全アソシエイティブ・キャッシュ・メモリ２３０２はエントリ１１２を、たとえば完全アソシエイティブ・キャッシュ・メモリ２３０２からのキャッシュ・ラインの追い出しに応じて、又はスヌープに応じて無効にする。流れはブロック２８０４へ進む。
【０１３４】
ブロック２８０４で、完全アソシエイティブ・キャッシュ・メモリ２３０２は、無効化エントリ１１２のＭＡＴ  ２３１４と関連付けられたカウンタ２３０６をデクリメントする。流れはブロック２８０４で終わる。
【０１３５】
次に図２９を参照すると、一実施形態による、ＭＡＴグループ２９０９に対するＭＡＴのマッピング２９０８、及び閾値２９１１に対するＭＡＴグループ２９０９のマッピングを示すブロック図が示されている。図２９の例では、４つのＭＡＴグループがあり、ＭＡＴグループ０、ＭＡＴグループ１、ＭＡＴグループ２及びＭＡＴグループ３で表示される。図２９の閾値２９１１は、３２個のＭＡＴに関してではなく４つのＭＡＴグループ２９０９に関してであるが、図２３の閾値２３０８と類似している。図２９のＭＡＴグループ２９０９への例示的なＭＡＴのマッピングは、説明の目的で、表１に対応する３２個のＭＡＴを含む。図２９の例のマッピングは、下記に表４として転載されている。
【０１３６】
【表４】
2017507443.tif 000009
【０１３７】
閾値２９１１に対するＭＡＴグループのマッピングでは、ＭＡＴグループ０を４００個のエントリ１１２の閾値２９１１にマッピングし、ＭＡＴグループ１を６０個のエントリ１１２の閾値２９１１にマッピングし、ＭＡＴグループ２を４０個のエントリ１１２の閾値２９１１にマッピングし、またＭＡＴグループ３を１２個のエントリ１１２の閾値２９１１にマッピングする。図２９（及び表４）は、それぞれのＭＡＴグループに対するＭＡＴの特定のセット及びＭＡＴの特定のマッピング、並びにそれぞれの閾値に対するＭＡＴグループを示しているが、この実施形態は一例として説明の目的で提示されていること、並びに別の実施形態が、異なるＭＡＴのセットで、またＭＡＴグループに対するＭＡＴ及び閾値に対するＭＡＴグループの異なるマッピングで企図されることを理解されたい。実際、一実施形態においてマッピングはプロセッサの動作時に、図７〜９に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づいて、（たとえば図１の更新入力１２６によって）動的に更新される。さらに、異なる数のＭＡＴグループ２９０９が使用されてもよい。
【０１３８】
図２５に関して上述のように、ＭＡＴグループ２９０９の使用に適応するために、追加の論理回路が完全アソシエイティブ・キャッシュ・メモリ２３０２に含まれ、これにより、場合によっては低い完全アソシエイティブ・キャッシュ・メモリ２３０２の構成可能性及び効率と引き換えに、必要なハードウェアの量を有利に少なくすることができる。たとえば、好ましくは、完全アソシエイティブ・キャッシュ・メモリ２３０２は、カウンタ２３０６、閾値２３０８及びポインタ２３０４に見合う数のＭＡＴグループ２９０９しか含まず、また各エントリのＭＡＴ  ２３１４はエントリ１１２のＭＡＴグループを保持する。
【０１３９】
次に図３０を参照すると、図２３のキャッシュ・メモリ２３０２の動作を示す流れ図が示されている。流れはブロック３００２から始まる。
【０１４０】
ブロック３００２で、キャッシュ・メモリ２３０２は、キャッシュ・メモリ２３０２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスはアレイ１０４のエントリ１１２を選択する。メモリ・アクセス１２２は、ＭＡＴ  １０１を指定する。割当ユニット１０６は、ＭＴＡ  １０１をＭＡＴグループ２９０９へマッピングする。流れはブロック３００４へ進む。
【０１４１】
ブロック３００４で、割当ユニット１０６は、ＭＡＴグループ２９０９と関連付けられたカウンタ２３０６が、ＭＡＴグループ２９０９と関連付けられた閾値２９１１に達したかどうかを判定する。流れは判定ブロック３００６へ進む。
【０１４２】
判定ブロック３００６で、ＭＡＴグループ２９０９と関連付けられたカウンタ２３０６が、ＭＡＴグループ２９０９と関連付けられた閾値２９１１に達している場合、流れはブロック３００８へ進み、それ以外の場合、流れはブロック３０１２へ進む。
【０１４３】
ブロック３００８で、割当ユニット１０６はアレイ１０４の有効エントリ１１２を置換する。このアレイのＭＡＴグループ２３１４は、メモリ・アクセス１２２のＭＡＴグループ２９０９と適合する。図２３に関して前述のように、置換されるべきエントリ１１２は、好ましくは、ＭＡＴグループ２９０９と関連付けられたポインタ２３０４を使用して、様々な置換ポリシーによって選択することができる。流れはブロック３００８で終わる。
【０１４４】
ブロック３０１２で、割当ユニット１０６は、図２７のブロック２７１２に関して上述の方法と同様に、アレイ１０４のいずれかのエントリ１１２内に割り当てる。流れはブロック３０１４へ進む。
【０１４５】
ブロック３０１４で、割当ユニット１０６はメモリ・アクセス１２２のＭＡＴグループ２９０９と関連付けられたカウンタ２３０６をインクリメントする。流れは判定ブロック３０１６へ進む。
【０１４６】
判定ブロック３０１６で、割当ユニット１０６は、置換されたエントリ１１２が有効であったかどうかを判定する。そうであった場合、流れはブロック３０１８へ進み、それ以外の場合、流れは終わる。
【０１４７】
ブロック３０１８で、割当ユニット１０６は、置換エントリ１１２のＭＡＴグループ２３１４と関連付けられたカウンタ２３０６をデクリメントする。流れはブロック３０１８で終わる。
【０１４８】
図２９及び図３０の実施形態を使用して、キャッシュの特定のレベルの効率を高めることができる。その理由はキャッシュを配分することが、２つのＭＡＴグループの第１のＭＡＴグループが完全アソシエイティブ・キャッシュ・メモリ２３０２のせいぜい閾値程度（たとえば８０％）を割り当てることが可能になるようにして配分されることができるからである。第１のＭＡＴグループはすべてのデータ関連ＭＡＴを含むことができ、第２のＭＡＴグループはすべてのコード関連ＭＡＴ（たとえばコード・フェッチ及びコード・プリフェッチ）を含むことができる。このことはコードを含むキャッシュ・ラインを完全アソシエイティブ・キャッシュ・メモリ２３０２内に留めることを、データ（たとえばストリーミング・データ）がプライベート命令キャッシュと競合することを防止することによって行うのに有用であり得る。
【０１４９】
次に図３１を参照すると、セット・アソシエイティブ・キャッシュ・メモリ３１０２を示すブロック図が示されている。図３１のキャッシュ・メモリ３１０２は、多くの点で図１のキャッシュ・メモリ１０２と類似しており、同様の番号が付けられた要素は類似している。しかし、図３１のキャッシュ・メモリ３１０２は、図１のマッピング１０８とは異なるマッピング３１０８を含む。図３１のマッピング３１０８は、図１から図２２Ｅと関連する実施形態の様々なマッピングのいずれかを含むことができるが、図３１のマッピング３１０８はまた、ＭＡＴ優先度に対する別々の複数のＭＡＴのマッピング３０１８を含み、その一例が図３２に示されている。加えて、有効キャッシュ・ラインそれぞれのＭＡＴ  ３１１４はアレイ１０４に格納される。つまり、記憶要素１１２がキャッシュ・ラインに割り当てられると、割り当てを促進したメモリ・アクセス１２２のＭＡＴ  １０１は、そのキャッシュ・ラインの記憶要素１１２に格納される。有利なことには、ＭＡＴ優先度マッピング３１０８に対するＭＡＴと共にＭＡＴ  ３１１４の記憶は、キャッシュ・メモリ３１０２が、選択セットのウェイを選択して割り当てるために、下記でより詳細に特に図３３に関して説明されるように、置換ポリシーにおけるアレイ１０４の選択セットの有効キャッシュ・ラインのＭＡＴ  ３１１４を含むことができるようにする。
【０１５０】
次に図３２を参照すると、一実施形態による図３１のそれぞれの優先度３１０８に対するＭＡＴのマッピングが示されている。図３２の例示的なマッピングは、説明の目的で、表１に対応する３２個のＭＴＡを含む。図３２の例のマッピングは、下記に表５として転載されている。
【０１５１】
【表５】
2017507443.tif 000010
【０１５２】
図３２（及び表５）は、特定のＭＡＴのセットと、それぞれのＭＡＴ優先度に対する特定のＭＡＴのマッピングとを示すが、この実施形態は一例として説明の目的で提供されていること、並びにＭＡＴのセットが異なると共にＭＡＴ優先度に対するＭＡＴのマッピングが異なる別の実施形態も企図されることを理解されたい。実際、一実施形態でマッピングはプロセッサの動作時に、図７〜９に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づいて、（たとえば図１の更新入力１２６によって）動的に更新される。
【０１５３】
次に図３３を参照すると、キャッシュ・ラインのＭＡＴを考慮したキャッシュ・ライン置換ポリシーを示す流れ図が示されている。流れはブロック３３０２から始まる。
【０１５４】
ブロック３３０２で、キャッシュ・メモリ３１０２は、キャッシュ・メモリ３１０２内で失敗するメモリ・アクセス１２２を受け取る。メモリ・アクセス１２２のインデックスでアレイ１０４のセットを選択する。メモリ・アクセス１２２は、ＭＡＴ  １０１を指定する。流れはブロック３３０４へ進む。
【０１５５】
ブロック３３０４で、割当ユニット１０６は、選択セット中のウェイのうち置換すべき最も資格のあるウェイ、及び置換すべき２番目に最も資格のあるウェイを選択セットの置換ポリシーによって判定する。たとえば置換ポリシーがＬＲＵ／ｐＬＲＵである場合、割当ユニット１０６は、置換ビット１１４による選択セットの最高ＬＲＵウェイ及び２番目の最高ＬＲＵウェイを判定する。別の例では、置換ポリシーがラウンドロビンである場合、割当ユニット１０６は、置換ビット１１４中のラウンドロビン・ポインタによって指し示されたウェイと、ラウンドロビン・オーダの方向の次のウェイとを判定する。別の例では、置換ポリシーがランダムである場合、割当ユニット１０６は２つのウェイをランダムに判定する。キャッシュ・メモリ３１０２が、たとえばウェイ又はセット・グループ又はチャンク又はパーセルによって、割当ユニット１０６が選択セットのウェイのサブセットだけを考慮するように配分される実施形態では、割当ユニット１０６はウェイのサブセット中の最も資格のあるウェイ、及び第２に最も資格のあるウェイのＭＡＴ優先度を調べることを理解されたい。流れはブロック３３０６へ進む。
【０１５６】
ブロック３３０６で、割当ユニット１０６は、ブロック３３０４で判定された最も資格のあるウェイのＭＡＴ  ３１１４、及び２番目に最も資格のあるウェイのＭＡＴ  ３１１４を調べ、次に２つのＭＡＴ  ３１１４の相対的ＭＡＴ優先度３２７７を比較する。流れは判定ブロック３３０８へ進む。
【０１５７】
判定ブロック３３０８で、最も資格のあるウェイのＭＡＴ優先度３３２７が２番目に最も資格のあるウェイのＭＡＴ優先度３３２７よりも高い場合、流れはブロック３３１２へ進み、それ以外の場合、流れはブロック３３１４へ進む。一実施形態では、割当ユニット１０６は、最も資格のあるウェイと２番目に最も資格のあるウェイとのＭＡＴ優先度３３２７間の差を計算し、最も資格のあるウェイのＭＡＴ優先度３３２７が２番目に最も資格のあるウェイよりも大きいことを単に検査するのではなく、その差が閾値よりも大きいかどうか判定する。選択セット（又はその関連サブセット）中に無効なウェイがある場合には、割当ユニット１０６は最も資格のあるウェイ、又は２番目に最も資格のあるウェイを置換するのではなく、無効なウェイを割り当てるということに留意されたい。
【０１５８】
ブロック３３１２で、割当ユニット１０６は最も資格のあるウェイではなく、２番目に最も資格のあるウェイを置換する。流れはブロック３３１６へ進む。
【０１５９】
ブロック３３１４で、割当ユニット１０６は最も資格のあるウェイを置換する。流れは３３１６へ進む。
【０１６０】
ブロック３３１６で、割当ユニット１０６は置換されたウェイ中のＭＡＴ  ３１１４をメモリ・アクセス１２２のＭＡＴ  １０１で更新する。このようにして、アレイ１０４のエントリのＭＡＴ  ３１１４は維持される。流れはブロック３３１８へ進む。
【０１６１】
ブロック３３１８で、割当ユニット１０６はメモリ・アクセス１２２のＭＡＴ  １０１を調べ、それが比較的低い（たとえば閾値よりも低い）優先度を有しているかどうかを判定する。たとえば図３２の実施形態では、割当ユニット１０６はメモリ・アクセス１２２のＭＡＴ  １０１が３よりも低いかどうかを判定することができる。流れは判定ブロック３３２２へ進む。
【０１６２】
判定ブロック３３２２で、メモリ・アクセス１２２のＭＡＴ  １０１が比較的低い優先度を有する場合、流れはブロック３３２６へ進み、それ以外の場合、流れはブロック３３２４へ進む。
【０１６３】
ブロック３３２４で、割当ユニット１０６は、置換ウェイを置換ビット１１４の最低資格位置で置換スキームによって挿入する。たとえばＬＲＵ／ｐＬＲＵスキームの場合、割当ユニット１０６は置換ウェイを最高使用頻度位置に挿入する。別の例で、ラウンドロビン・スキームの場合には、割当ユニット１０６は置換ウェイの少し先のラウンドロビン・ポインタを更新する。流れは３３２４で終わる。
【０１６４】
ブロック３３２６で、割当ユニット１０６は置換ウェイを、置換ビット１１４の中程度の資格のある位置で置換スキームによって、好ましくは、メモリ・アクセス１２２のＭＡＴ優先度３２７７がどれだけ低いかに基づいて挿入する。たとえばＬＲＵ／ｐＬＲＵスキームの場合、割当ユニット１０６は置換ウェイを中間位置に挿入する。好ましくは、ＭＡＴ優先度３２７７が低ければ低いほど、割当ユニット１０６は置換ウェイを中間位置により近く挿入するのに対し、ＭＡＴ優先度３２７７が高ければ高いほど、割当ユニット１０６は置換ウェイを中間位置からより遠く、また最高使用頻度位置により近く挿入する。一実施形態で、非常に低いＭＡＴ優先度３２７７（たとえば優先度が０で信頼性が非常に低いプリフェッチ）では、割当ユニット１０６は、置換ウェイをＬＲＵ位置又はＬＲＵに次ぐ位置に挿入する。別の例で、ラウンドロビン・スキームの場合には、割当ユニット１０６は、ラウンドロビン・ポインタを置換ウェイの先のより多くの位置で、ＭＡＴ優先度３３２７がどれだけ低いかに応じて更新する。一実施形態では、割当ユニット１０６はまた、最低資格位置に近い１つ又は複数の他のウェイのＭＡＴ  ３１１４と関連付けられた相対的ＭＡＴ優先度３３２７を、どこに置換ウェイを挿入すべきか決めるときに考慮に入れる。流れはブロック３３２６で終わる。
【０１６５】
最も資格のある２つのウェイが考察される実施形態について説明されたが、さらなる最も資格のあるウェイが考察される別の実施形態も企図され、たとえば３番目に最も資格のあるウェイのＭＡＴ優先度が、最も資格のある、及び２番目に最も資格のあるウェイよりも低い場合には、割当ユニット１０６は３番目に最も資格のあるウェイを置換する。
【０１６６】
本明細書に記載の、ウェイ、セット・グループ、チャンク、ＭＡＴグループ閾値、置換ポリシーが異なるパーセル等によってキャッシュ・メモリを配分するためのマッピングなど、様々な様式のキャッシュ・メモリの構成は、静的構成もしくは動的構成によるもの、又は両方によるものとすることができる。一般的に言えば、静的構成はプリシリコンである。つまり、設計者は直感を用いて、好ましくは、プロセッサ設計のソフトウェア・シミュレーションに支援されて、好適な構成、つまり一般的にはプロセッサの、具体的にはキャッシュ・メモリの性能を潜在的に改善する構成を判定する。プロセッサの性能を改善することは、プロセッサがプログラムを実行する速度を改善すること（たとえば、命令速度当たりのクロックを低減させる、又はクロック速度当たりの命令を増加させる）、及び／又は消費電力を低減させることである。プログラムはオペレーティング・システム、実行可能プログラム（たとえば、アプリケーション、ユーティリティ、ベンチマーク）、ダイナミック・リンク・ライブラリなどとすることができる。ソフトウェア・シミュレーションは、プロセッサの性能を改善することが望まれるプログラムの実行のオフライン解析を行うために、たとえば図３４から図３６に関して、特にキャッシュ・メモリ構成に関して下記で説明されるように使用することができる。好ましくは、設計者は、プログラムのセット全体にわたって好適になる傾向がある静的構成を判定する。次に設計者は、その好適な静的構成をシリコン中に製作される設計に含める。
【０１６７】
対照的に、動的構成を判定するための解析は、一般的に言えばポストシリコンで行われる。つまり、プロセッサが製作された後に、設計者は異なる種類のオフライン解析を行って、シリコン中に製作された静的（又はデフォルト）構成と異なる構成でプログラムを実行したときにプロセッサがどのように動作するかを判定する。ポストシリコン試験はより厳格な、おそらくより総当たり的な、構成マトリクスに対する自動化性能回帰が行われる技法を含むことができ、その場合、その回帰性能データが、たとえば図３７に関して下記で説明されるように解析される。設計者は、プログラムの集団についてのプリシリコン試験の結果をポストシリコン試験に対する初期シードとして使用して、たとえば最大値ではない極大値を回避することを試みることができる。
【０１６８】
試験がプリシリコンであるかそれともポストシリコンであるかにかかわらず、動的構成試験では、好適な構成がプログラムＭＡＴごとに、さらにはプログラム・フェーズＭＡＴごとにも判定される。次にシステム（たとえばデバイス・ドライバ）が、既知のプログラムがプロセッサ上で走っていることを検出すると（すなわち解析が行われ良好な構成が知られているプログラム）、システムは好適なプログラム固有の構成をプロセッサに提供し、プロセッサは、プロセッサが走っている間に、キャッシュ・メモリをプログラム固有の構成により動的な方式で更新する。好ましくは、プログラム固有の構成はプログラムの別々のフェーズに対する別々の構成を含み、たとえば図３６に関して説明されるように、プロセッサはフェーズ変化を検出し、フェーズ固有の構成に応じて構成を動的に更新する。
【０１６９】
プログラム・フェーズは、所与の特性のセットに関して、これらの特性中の一貫した挙動によって特徴づけられるコンピュータ・プログラムのサブセットである。たとえば、関連特性が分岐予測率及びキャッシュ・ヒット率であると仮定すると、プログラムのフェーズは、分岐予測率及びキャッシュ・ヒット率が一貫しているプログラムのランタイム挙動のサブセットになる。たとえばオフライン解析では、特定のデータ圧縮プログラムが２つのフェーズ、すなわち辞書構築フェーズ及び辞書検索フェーズを有すると判定することができる。辞書構成フェーズは、大きいストリングのセットと共通のサブストリングのセットを構築することと整合性のある、比較的低い分岐予測率、及び比較的高いキャッシュ・ヒット率を有するのに対し、辞書検索フェーズは、キャッシュのサイズよりも大きい辞書中のサブストリングを検索することと整合性のある、比較的高い分岐予測率、及び比較的低いキャッシュ・ヒット率を有する。
【０１７０】
一実施形態では、オフライン解析は「オラクル・キャッシュ」の概念を使用して行われる。その名前が暗示するように、オラクル・キャッシュは未来を知っている。キャッシュ・メモリ内の空間が限定されているので、オラクル・キャッシュはキャッシュ内にあるべき最も有用なデータを、どの時点でも知っている。このことは最高ヒット率を生み出すキャッシュのコンテンツのサイクルごと、又は命令ごとのスナップショットとして概念化することができる。
【０１７１】
まず、プログラム実行のためのオラクル・キャッシュ・スナップショットのシーケンスを生成し、スナップショット内のキャッシュ・ラインごとの割り当てを生成したメモリ・アクセスのＭＡＴのトラックを維持する。次に、スナップショットごとに円グラフを生成する。この円グラフは、複数のＭＡＴの各ＭＡＴ又は各グループについて、ＭＡＴのメモリ・アクセスに応じて割り当てられたキャッシュ・ラインによって占められたキャッシュの割合を示し、その一例が図３８に示されている。次に、プログラムの次の実行インスタンスに対して、プロセッサは円グラフのシーケンスからのＭＡＴ割合を使用して、キャッシュを（ウェイ、セット・グループ、チャンク、パーセル、閾値、ＭＡＴ優先度などの点から）継続して再配分する。
【０１７２】
クロック・サイクル又は命令の細分性によって再配分することが実際的でない場合、ずっと長い時間、たとえばプログラム又はプログラム・フェーズ全体にわたる傾向があるか円グラフシーケンスを調べる。ＭＡＴごとに（プログラム又はフェーズの）シーケンス中のすべての円グラフの平均を取り、配分の平均円グラフを作る。
【０１７３】
大まかに言って、オラクル・キャッシュの概念は、オラクル・キャッシュがメモリ・アクセスのすべてを前もって知っているので、それがメモリ・アクセスのすべてをあらかじめ実行できることである。その場合、プログラムが実行されると、オラクル・キャッシュは、任意の所与の時点にキャッシュ内にあるべきキャッシュ・ラインの最良のセットを予測する。たとえば図３５のグラフで、オラクル・キャッシュは、ＭＡＴ  １の短い継続時間のキャッシュ・ライン（実線で示された上から２番目の線）が、その最後のアクセスの後にキャッシュされないはずであると予測する。このような解析を使用して、キャッシュ配分及び置換ポリシーについての観察結果をＭＡＴごとに導出する。
【０１７４】
次に図３４を参照すると、プログラム及びプログラム・フェーズのマッピングの生成を示す流れ図が示されている。流れはブロック３４０２から始まる。
【０１７５】
ブロック３４０２で、設計者は、好ましくは、自動化された方式で、プログラムを走らせ、プログラムによって行われるキャッシュ・メモリ（たとえば１０２、１００２、１４０２、１５０２、１７０２、１９０２、２３０２、３１０２）へのメモリ・アクセス１２２を記録する。好ましくは、キャッシュ・ラインの割り当て、ヒット及び追い出しが記録される。メモリ・アクセス１２２のメモリ・アドレス、ＭＡＴ  １０１及び時間（たとえば相対クロック・サイクル）が記録される。流れはブロック３４０４へ進む。
【０１７６】
ブロック３４０４で、設計者は、好ましくは、自動化された方式で、ブロック３４０２で記録された情報を規則的な時間間隔で解析し、明確な傾向を認識して、たとえば図３６に関して下記で説明されるように、プログラムをフェーズに分ける。たとえばＭＡＴ  １０１によるワーキング・セット・サイズ、ＭＡＴ  １０１による平均キャッシュ・ライン寿命、ＭＡＴ  １０１による平均ヒット率における明確な傾向を認識することができる。流れはブロック３４０６へ進む。
【０１７７】
ブロック３４０６で、設計者は、好ましくは、自動化された方式で、異なるプログラム・フェーズに対するマッピング又は構成をブロック３４０４で行われた解析に基づいて作成する。たとえば、マッピング又は構成は、ウェイ（たとえば図２の１０８）によるキャッシュ・バジェット・マッピング、セット・グループ（たとえば図１０、１４又は１５の１００８）によるキャッシュ・バジェット・マッピング、チャンク（たとえば図１５の１５０８又は図１７の１７０８）によるキャッシュ・バジェット・マッピング、ヘテロジニアス置換ポリシー（たとえば図１９〜２２Ｅの１９０８）をサポートするキャッシュ・バジェット・マッピング、ＭＡＴベースのエントリ割り当て閾値（たとえば図２３から図２４の２３０８）、ＭＡＴグループに対するＭＡＴ及び閾値に対するＭＡＴグループのマッピング（たとえば図２９の２９０８）、及びＭＡＴ優先度マッピング（たとえば、図３１及び図３２の３１０８）とすることができる。一実施形態では、マッピング又は構成を判定するための解析には、図３５から図３８に関して下記で説明されるものと類似している解析が含まれ得る。一部のプログラムでは明確な傾向が示されないことがあり、そのため、そのプログラムは別個のフェーズに分解されやすいが、この場合、プログラム全体については単一のマッピング又は構成で十分であり得ることを理解されたい。流れはブロック３４０４で終わる。
【０１７８】
次に図３５を参照すると、メモリ・アクセス・グラフ、及びグラフからの抽出データが示されている。グラフはドットで表示されたメモリ・アクセスを示し、時間が水平軸上に示された独立変数になっており、メモリ・アドレスが垂直軸上に示された独立変数になっている。水平の線は、特定のメモリ・アドレスにおける個々のキャッシュ・ラインに対応する。線の左端がキャッシュ・ラインの割り当てを表し、線の右端がキャッシュ・メモリからのキャッシュ・ラインの追い出しを表す。各キャッシュ・ラインは関連付けられたＭＡＴを有し、図３５の例ではＭＡＴ  １、ＭＡＴ  ２、ＭＡＴ  ３及びＭＡＴ  ４と表示されている。図３５の例では６つのキャッシュ・ラインが表示されており、２つが関連付けられたＭＡＴ  １、２つが関連付けられたＭＡＴ  ２、１つが関連付けられたＭＡＴ  ３、１つが関連付けられたＭＡＴ  ４を有する。
【０１７９】
グラフの下の、別々の均一な８つの時間間隔それぞれに、合計ワーキング・セット・サイズ及びそれぞれのＭＡＴのワーキング・セット・サイズが示されている。これらの時間間隔は、たとえば図３６に関して下記で説明されるように、基本ブロック転送と相互に関連させることができ、またプログラム・フェーズと、プログラム・フェーズのそれぞれの構成又はマッピングとを判定するのに使用することができる。たとえば特定のプログラム又はフェーズの間中、その構成又はマッピングは、ワーキング・セット・サイズが比較的大きいＭＡＴに多くのウェイ、セット・グループ、チャンク、又はパーセルを配分し、ワーキング・セット・サイズが比較的小さいＭＡＴに配分するウェイを少なくすることができ、又は少なくとも、図３５にＭＡＴごとに示されているワーキング・セット・サイズを考慮に入れることができる。
【０１８０】
加えて、平均キャッシュ・ライン寿命など、キャッシュ・ラインが個々のＭＡＴごとにどのくらい長く有効になる傾向があるかについての観察を行うことができる。平均キャッシュ・ライン寿命は、フェーズ全体にわたるそれぞれのＭＡＴの全キャッシュ・ラインの寿命（割り当てから追い出しまで）の合計をＭＡＴのキャッシュ・ラインの数で割ったものとして計算される。この情報は、キャッシュ・メモリの置換ポリシーに影響を与えるように使用することができる。
【０１８１】
オラクル・キャッシュが、キャッシュ・メモリに含まれるセット及びウェイの意図された数に対応するためにキャッシュ・ラインの数を抑制する場合には、キャッシュ配分及び平均寿命観察の精度が向上し得る。ＭＡＴごとのキャッシュ・ライン・ヒットなどの他のインジケータもまた集めることができる。
【０１８２】
次に図３６を参照すると、プログラムのフェーズ解析を示す流れ図が示されている。フェーズ解析はオフライン解析の一形式であり、これを使用して、プロセッサのキャッシュ・メモリ又はプリフェッチャなどの、プロセッサの構成可能な態様の好適な構成又はマッピングを判定することができる。流れはブロック３６０２から始まる。
【０１８３】
ブロック３６０２で、プログラムを実行するときにプロセッサによって性能を改善することが望ましいプログラムが、解析され分析されて状態図が生成される。状態図のノードはプログラムの基本ブロックである。基本ブロックは、プログラム制御命令（たとえば分岐、ジャンプ、呼出し、復帰など）間の命令のシーケンスである。状態図中の各縁部は、縁部がつながるターゲット基本ブロック、及び状態変化情報であり、これは下記でさらに説明されるように、フェーズ識別子になることができる。フェーズ識別子は、制御転送命令の命令ポインタ（ＩＰ）又はプログラム・カウンタ（ＰＣ）、制御転送命令のターゲット・アドレス、及び／又は制御転送命令の呼出しスタックを含むことができる。呼出しスタックは、呼出しの復帰アドレス及びパラメータを含むことができる。プログラム・フェーズは、１つ又は複数の基本ブロックを備えるプログラムの部分である。流れはブロック３６０４へ進む。
【０１８４】
ブロック３６０４で、プログラムは機器に備え付けられて、キャッシュ・メモリ・マッピング、プリフェッチャＭＡＴスコア、及びキャッシュ構成モードなどのプロセッサの構成可能な態様に関連した特性が解析される。これらの特性の例には、キャッシュ・ヒット率、分岐予測精度、ワーキング・セット・サイズ、平均キャッシュ・ライン寿命、及びキャッシュ汚染（たとえばプリフェッチされたが決して使用されないキャッシュ・ラインの数）が含まれる。流れはブロック３６０６へ進む。
【０１８５】
ブロック３６０６で、プログラムは、たとえばキャッシュ・メモリ及び／又はプリフェッチャの所与の構成で実行され、プログラムのフェーズは、ブロック３６０４の解析された特性での定常状態挙動を観察することによって特定される。たとえば、キャッシュ・ヒット率が対象の解析特性であると仮定し、そのキャッシュ・ヒット率が９７％から４０％に変化すると仮定する。このキャッシュ・ヒット率変化は、キャッシュ・メモリ構成が、変化前のプログラムに対して好適であったが、変化後のプログラムに対しては好適でないことを表示する傾向がある。したがって、キャッシュ・ヒット率変化前の基本ブロックのシーケンスを１つのフェーズとして特定することができ、キャッシュ・ヒット率変化後の基本ブロックのシーケンスを第２のフェーズとして特定することができる。別の例では、異なるＭＡＴのワーキング・セット・サイズが対象の解析特性であると仮定すると、異なるＭＡＴ又はＭＡＴグループのワーキング・セット・サイズの著しく大きい変化により、フェーズ変化を特定するためのプログラム内の望ましい位置を知らせることができる。流れはブロック３６０８へ進む。
【０１８６】
ブロック３６０８で、フェーズが特定された後、好適な構成又はマッピング、又は構成値がフェーズごとに判定される。たとえば、図３４及び図３５に関して上記の方法、又は図３７に関して下記の方法など、様々なオフライン解析技法を使用することができる。流れはブロック３６１２へ進む。
【０１８７】
ブロック３６１２で、フェーズ識別子はフェーズ変化と相互に関連付けられる。解析特性の変化が生じた上述の基本ブロック遷移の状態変化情報又は潜在的なフェーズ識別子は、プログラムのブロック３６０８で判定された好適な構成値と共に記録され、したがって、情報は、解析されたプログラムがまさに実行されようとしていることがたとえばデバイス・ドライバによって検出されたときに、プロセッサに供給されることができる。流れはブロック３６１４へ進む。
【０１８８】
ブロック３６１４で、解析されたプログラムと関連付けられた情報を受け取った後でプロセッサは、図７から図９に関して上述したように、フェーズ検出器８０４に図８のフェーズ識別子８０２をロードする。流れはブロック３６１４で終わる。
【０１８９】
次に図３７を参照すると、プロセッサの構成可能態様（たとえばキャッシュ・メモリ、プリフェッチャ）のための好適な構成又はマッピングを判定する総当たり法を示す流れ図が示されている。説明される方法では、“座標降下（coordinate  descent）”最適化アルゴリズムの態様を使用する。流れはブロック３７０２から始まる。
【０１９０】
ブロック３７０２で、プロセッサの性能を改善することが望ましいことが特定されたプログラムのリスト内のプログラム又はプログラム・フェーズごとに、方法はブロック３７０４から３７１６までを、好適な構成が判定されるまで（たとえば最良の現在の構成（下記参照）が比較的長時間変化しなかった）、又はリソース（たとえば時間リソース及び／又は計算リソース）がなくなるまで繰り返す。流れはブロック３７０４へ進む。
【０１９１】
ブロック３７０４で、現在の最良の構成がデフォルト構成（たとえばキャッシュ・メモリ又はプリフェッチャのデフォルト・マッピング）に設定され、この構成は、一実施形態ではただ単にプロセッサを製造するための構成である。流れはブロック３７０６へ進む。
【０１９２】
ブロック３７０６で、構成パラメータごとに、ブロック３７０８から３７１２までが実行される。構成パラメータの一例は、たとえば機能をオン又はオフする単一の構成ビットである。構成パラメータの別の例は、構成フィールド、たとえばベクトル３０４、セット・グループ選択論理回路１１０６／２１０６、パーセル指定子２００１、閾値２３０８、ＭＡＴグループに対するＭＡＴ及び閾値に対するＭＡＴグループの各マッピング２９０８、ＭＡＴ優先度に対するＭＡＴのマッピング３１０８である。流れはブロック３７０８へ進む。
【０１９３】
ブロック３７０８で、ブロック３７０６の構成パラメータの値の妥当なセットの値ごとに、ブロック３７１２から３７１６までを実行する。構成パラメータの値の妥当なセットは、構成パラメータのサイズ、考えられるパラメータの重要度、及びその値によって繰り返すのに必要なリソースの量によって決まる。たとえば単一の構成ビットの場合では、両方の値が妥当なセット内にある。たとえば方法は１６個以下の値を有する任意のパラメータに対し可能な値すべてを試みることができる。しかし、比較的大きいフィールド、たとえば３２ビットのフィールドでは、２３２個の可能な値すべてを試みることは実行できない可能性がある。この場合設計者は、方法に対して妥当な値のセットを提供することができる。たとえば設計者は、類似した特性を備えるＭＡＴのグループを観察し、これらを上述のように一緒にグループ化して、可能性の数を限定することができる。設計者が値を提供せず、また可能性の数が大きい場合、方法は、妥当な数のパラメータのランダム値を用いて、ブロック３７１２から３７１６までを通して繰り返すことができる。流れはブロック３７１２へ進む。
【０１９４】
ブロック３７１２で、プログラム又はプログラム・フェーズは現在の最良の構成を用いて実行されるが、ブロック３７０８によるパラメータの次の値によって修正されて、性能が測定される。流れは判定ブロック３７１４へ進む。
【０１９５】
判定ブロック３７１４で、方法は、ブロック３７１２で測定された性能を現在の最良の性能と比較し、前者の方が良い場合には、流れはブロック３７１６へ進む。それ以外の場合は、流れはブロック３７１２へ戻って、すべての妥当な値が試みられるまで、現在のパラメータの次の値を試み、すべての妥当な値が試みられた場合には、流れはブロック３７０８へ戻って、すべての構成パラメータが試みられるまで、次の構成パラメータを繰り返し、すべての構成パラメータが試みられた場合には、方法は終了して、このプログラム又はプログラム・フェーズの現在の最良の構成を得る。
【０１９６】
ブロック３７１６で、方法は、現在の最良の構成を、ブロック３７１２で試みられた構成で更新する。流れはブロック３７１２へ戻って、すべての妥当な値が試みられるまで、現在のパラメータの次の値を試み、すべての妥当な値が試みられた場合には、流れはブロック３７０８へ戻って、すべての構成パラメータが試みられるまで、次の構成パラメータを繰り返し、すべての構成パラメータが試みられた場合には、方法は終了して、このプログラム又はプログラム・フェーズの現在の最良の構成を得る。
【０１９７】
図３７のものと同様の方法を使用して見出された好適な構成は、なぜ特定の構成で良好な結果が得られたのかについて、設計者に理解されていなくてよく、また理解される必要がないことに留意されたい。
【０１９８】
次に、図３８を参照すると、解析結果を示す円グラフ３８０１が示されている。図３４、図３６及び図３７に従って行われたものなど様々な解析の結果は、ＭＡＴごとの区分（すなわちＭＡＴごとの円の割合）がある円グラフとして概念化することができる。たとえば、キャッシュをウェイによって配分する場合、各ＭＡＴのウェイのサブセットは円のその割合に大まかに相当する。有利なことに、上述のようにＭＡＴはグループ化することができ、各ＭＡＴグループのウェイのサブセットはグループ内の、含まれるＭＡＴの円の割合の合計に大まかに相当する。図３８は一例を示す。セット・グループ、チャンク又はパーセルによってキャッシュを配分する場合では、円グラフがセット・グループごと、チャンクごと、又はパーセルごとに構築され、その後に同様の技法が適用される。円グラフ３８０１は、異なるＭＡＴグループごとの区分を含む。図３８の例では、プリフェッチ・グループが４２％、コード・グループが１９％、浮動小数点グループが２３％、ストリーミング・データ・グループが１１％、スタック及びテーブルウォーク・グループが５％である。
【０１９９】
次に図３９を参照すると、プロセッサ３９００を示すブロック図が示されている。プロセッサ３９００は命令キャッシュ３９２２を含み、命令キャッシュは命令を命令デコーダ３９２３に供給し、命令デコーダは命令を復号し、復号された命令を命令ディスパッチャ３９２４に供給し、命令ディスパッチャは、命令を実行するために実行ユニット３９２６にディスパッチする。好ましくは、プロセッサ３９００のマイクロアーキテクチャはスーパースカラ及びアウト・オブ・オーダ実行であるが、他の実施形態も企図され、その結果、命令ディスパッチャ３９２４はまた、スーパースカラ・アウト・オブ・オーダ方式による複数の実行ユニット３９２６への命令のディスパッチをスケジュールするための命令スケジューラも含むようになる。好ましくは、プロセッサ３９００はまた、プロセッサ３９００のアーキテクチャの状態を保持するアーキテクチャのレジスタ（図示せず）、並びに非アーキテクチャのレジスタ（図示せず）を含む。好ましくは、プロセッサ３９００はまた、レジスタのリネームを実行するために使用されるレジスタ・エイリアス・テーブル（ＲＡＴ）（図示せず）と、プログラム・オーダ内の命令をリタイアさせるために使用されるリオーダ・バッファ（ＲＯＢ）（図示せず）とを含む。好ましくは、命令ディスパッチャは命令翻訳プログラム（図示せず）を含み、この翻訳プログラムはアーキテクチャの命令を、実行ユニット３９２６によって実行可能なプロセッサ３９００のマイクロ命令セット・アーキテクチャのマイクロ命令に翻訳する。
【０２００】
プロセッサ３９００はまた、メモリ・サブシステム３９２８を含み、これはメモリ・オペランドを実行ユニット３９２６に提供し、実行ユニット３９２６からメモリ・オペランドを受け取る。メモリ・サブシステム３９２８は好ましくは、１つ又は複数のロードユニット、１つ又は複数の記憶ユニット、ロード・キュー、記憶キュー、メモリからのキャッシュ・ラインを要求するための充填キュー、プロセッサ３９００が通信するメモリ・バスのスヌーピングと関連付けられたスヌープ・キュー、テーブルウォーク・エンジン及び他の関連する機能ユニットを含む。
【０２０１】
プロセッサ３９００はまた、メモリ・サブシステム３９２８と通信するキャッシュ・メモリ１０２を含む。好ましくは、キャッシュ・メモリ１０２は、図１から図３８に関して説明されたキャッシュ・メモリと類似している。単一のキャッシュ・メモリ１０２が図示されているが、キャッシュ・メモリ１０２は、レベル−１（Ｌ１）命令キャッシュ、Ｌ１データ・キャッシュ、及びＬ１キャッシュを補足する一体化レベル−２（Ｌ２）キャッシュなどのキャッシュ・メモリの階層を含む、より大きいキャッシュ・メモリ・サブシステムのうちの１つとすることもできる。一実施形態では、キャッシュ・サブシステムはまた、レベル−３（Ｌ３）キャッシュを含む。プロセッサ３９００はまた、データをメモリからキャッシュ・メモリ１０２の中へプリフェッチする１つ又は複数のプリフェッチャを含むこともできる。一実施形態では、プロセッサ３９００はマルチコア・プロセッサであり、コアのそれぞれが上述の機能ユニットを有し、機能ユニット内ではキャッシュ・メモリ１０２がコアによって共有される。
【０２０２】
メモリ・サブシステム３９２８は、図１から図３８の実施形態で説明されたように、キャッシュ・メモリ１０２のメモリ・アクセス１２２を作成する。メモリ・アクセス１２２は、アクセスされるべきメモリ位置のメモリ・アドレスを含む。メモリ・アクセス１２２のそれぞれはまた、メモリ・アクセス・タイプ（ＭＡＴ）１０１を含み、その実施形態については上記で説明されている。
【０２０３】
本発明の様々な実施形態が本明細書で説明されたが、これらは限定ではなく例として提示されたことを理解されたい。関連コンピュータ技術分野の当業者には、これら実施形態に形状及び細部の様々な変更を本発明の範囲から逸脱することなく加えることができることが明らかであろう。たとえばソフトウェアにより、たとえば本明細書に記載の装置及び方法の機能、製造、モデリング、シミュレーション、記述及び／又は試験を可能にすることができる。これは一般的なプログラミング言語（たとえばＣ、Ｃ＋＋）、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬなどを含むハードウェア記述言語（ＨＤＬ）、又は他の利用可能なプログラムを使用することによって実現することができる。このようなソフトウェアは、磁気テープ、半導体、磁気ディスク、又は光ディスク（たとえばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、ネットワーク、ワイヤライン、無線又は他の通信媒体などの任意の既知のコンピュータ利用可能媒体に配置することができる。本明細書に記載の装置及び方法の実施形態は、プロセッサ・コアなどの半導体ＩＰコアに含めて（たとえばＨＤＬとして埋め込まれるか、又は指定される）、集積回路の製造の際にハードウェアに変換することができる。加えて、本明細書に記載の装置及び方法は、ハードウェアとソフトウェアを合わせたものとして具現化することができる。したがって、本発明は、本明細書に記載の例示的な実施形態のいずれによっても限定されるべきではなく、添付の特許請求の範囲及びその等価物によってのみ定義されるべきである。具体的には、本発明は汎用コンピュータに使用できるプロセッサ・デバイス内で実施することができる。最後に、当業者には、開示された概念及び特定の実施形態を、本発明の同一の諸目的を成し遂げるための他の構造を設計及び修正する基礎として、添付の特許請求の範囲に定義された本発明の範囲から逸脱することなく、容易に使用できることが理解できるはずである。
【図１】
2017507443.tif 000011
【図２】
2017507443.tif 000012
【図３】
2017507443.tif 000013
【図４】
2017507443.tif 000014
【図５】
2017507443.tif 000015
【図６】
2017507443.tif 000016
【図７】
2017507443.tif 000017
【図８】
2017507443.tif 000018
【図９】
2017507443.tif 000019
【図１０】
2017507443.tif 000020
【図１１】
2017507443.tif 000021
【図１２】
2017507443.tif 000022
【図１３】
2017507443.tif 000023
【図１４】
2017507443.tif 000024
【図１５】
2017507443.tif 000025
【図１６】
2017507443.tif 000026
【図１７】
2017507443.tif 000027
【図１８】
2017507443.tif 000028
【図１９】
2017507443.tif 000029
【図２０】
2017507443.tif 000030
【図２１】
2017507443.tif 000031
【図２２Ａ】
2017507443.tif 000032
【図２２Ｂ】
2017507443.tif 000033
【図２２Ｃ】
2017507443.tif 000034
【図２２Ｄ】
2017507443.tif 000035
【図２２Ｅ】
2017507443.tif 000036
【図２３】
2017507443.tif 000037
【図２４】
2017507443.tif 000038
【図２５】
2017507443.tif 000039
【図２６】
2017507443.tif 000040
【図２７】
2017507443.tif 000041
【図２８】
2017507443.tif 000042
【図２９】
2017507443.tif 000043
【図３０】
2017507443.tif 000044
【図３１】
2017507443.tif 000045
【図３２】
2017507443.tif 000046
【図３３】
2017507443.tif 000047
【図３４】
2017507443.tif 000048
【図３５】
2017507443.tif 000049
【図３６】
2017507443.tif 000050
【図３７】
2017507443.tif 000051
【図３８】
2017507443.tif 000052
【図３９】
2017507443.tif 000053
【手続補正書】
【提出日】平成28年6月29日(2016.6.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
セット・アソシエイティブ・キャッシュ・メモリであって、
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、
前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと、
パーセル指定子であって、複数のパーセルのパーセルごとに、
前記パーセルに含まれる前記Ｎ個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また
複数の既定の置換スキームの中から前記パーセルと関連付けられた置換スキームを指定する前記パーセル指定子と
を備え、
前記メモリ・アクセスのメモリ・アクセスごとに、前記割当ユニットが、
前記メモリ・アクセスに応じて前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を選択し、また
前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てる、
セット・アソシエイティブ・キャッシュ・メモリ。
【請求項２】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記パーセル指定子がさらに、前記複数の既定のＭＡＴのうちの１つ又は複数を前記パーセルと関連付け、
前記割当ユニットが、前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を前記メモリ・アクセスの前記ＭＡＴに基づいて選択する、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項３】
前記メモリ・アクセスと関連付けられた前記ＭＡＴが、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイの前記サブセット内に割り当てるために前記割当ユニットで使用される前記置換スキームへの入力になる、請求項２に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項４】
前記Ｎ個のセットのセットごとに、関連付けられた置換ビットをさらに備え、
前記パーセル指定子がさらに、前記パーセルと関連付けられた前記置換ビットの一部分を指定し、
前記割当ユニットが、前記置換スキームと、前記パーセルと関連付けられた前記置換ビットの前記一部分とを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てる、
請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項５】
前記複数のパーセルが、前記アレイの前記Ｍ個のセットのすべてのセットに対しグローバルである、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項６】
前記Ｍ個のセットの各セットが、Ｌ個の互いに排他的なセット・グループのうちの１つと関連付けられ、
前記Ｌ個の互いに排他的なセット・グループのそれぞれが、対応する複数のパーセルを有する、
請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項７】
前記Ｍ個のセットの各セットが、対応する複数のパーセルを有する、
請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項８】
前記複数のパーセルのうちの少なくとも１つのパーセルと関連付けられた前記置換スキームが、前記複数のパーセルのうちの他のものと関連付けられた前記置換スキームとは異なる、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項９】
前記複数のパーセルの前記パーセル指定子が、前記キャッシュ・メモリの動作中に動的に更新可能である、請求項１に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項１０】
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、セット・アソシエイティブ・キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットとを有する、前記キャッシュ・メモリを動作させる方法であって、
複数のパーセルのパーセルごとにパーセル指定子を格納するステップであって、前記パーセル指定子が、
前記パーセルに含まれる前記Ｎ個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また
複数の既定の置換スキームの中から、前記パーセルと関連付けられた置換スキームを指定する、ステップと、
前記メモリ・アクセスのメモリ・アクセスごとに、
前記メモリ・アクセスに応じて前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を選択するステップと、
前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てるステップと
を含む、方法。
【請求項１１】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記パーセル指定子がさらに、前記複数の既定のＭＡＴのうちの１つ又は複数を前記パーセルと関連付け、
前記パーセル指定子を選択する前記ステップが、前記複数のパーセルのうちの１つのパーセルの前記パーセル指定子を前記メモリ・アクセスの前記ＭＡＴに基づいて選択する、請求項１０に記載の方法。
【請求項１２】
前記メモリ・アクセスと関連付けられた前記ＭＡＴが、前記パーセルに含まれる前記選択セットのＮ個のウェイの前記サブセット内に割り当てるために前記割当ユニットで使用される前記置換スキームへの入力になる、請求項１１に記載の方法。
【請求項１３】
前記キャッシュ・メモリがさらに、関連付けられた置換ビットを前記Ｎ個のセットのセットごとに含み、前記パーセル指定子がさらに、前記パーセルと関連付けられた前記置換ビットの一部分を指定し、当該方法がさらに、
前記置換スキームと、前記パーセルと関連付けられた前記置換ビットの前記一部分とを使用して、前記パーセルに含まれる前記選択セットの前記Ｎ個のウェイのうちのウェイの前記サブセット内に割り当てるステップ
を含む、請求項１０に記載の方法。
【請求項１４】
前記複数のパーセルの前記パーセル指定子を前記キャッシュ・メモリの動作中に更新するステップ
をさらに含む、請求項１３に記載の方法。
【請求項１５】
プログラムが前記プロセッサ上で走っていることを判定するステップであって、前記パーセル指定子が前記プログラムのオフライン解析によって判定される、ステップと、
前記プログラムが前記プロセッサ上で走っていることを判定する前記ステップに応じて、前記複数のパーセルの前記パーセル指定子を更新する前記ステップと
をさらに含む、請求項１４に記載の方法。
【請求項１６】
セット・アソシエイティブ・キャッシュ・メモリであって、
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイと、
前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと
を備え、
前記割当ユニットが、前記選択セットの前記Ｎ個のウェイの第１のサブセット内に割り当てるときには第１の置換スキームを使用し、前記選択セットの前記Ｎ個のウェイの第２のサブセット内に割り当てるときには第２の置換スキームを使用し、
前記第１と第２の置換スキームが異なる、
セット・アソシエイティブ・キャッシュ・メモリ。
【請求項１７】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記メモリ・アクセスと関連付けられた前記ＭＡＴが、前記選択セットの前記Ｎ個のウェイの前記第１のサブセット内に割り当てるときに前記割当ユニットで使用される前記第１の置換スキームへの入力になる、請求項１６に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項１８】
前記複数の既定のＭＡＴが下記のリスト、すなわち、
前記プロセッサのハードウェア・プリフェッチャによって生成されたメモリ・アクセス、
浮動小数点命令によって生成されたメモリ・アクセス、
融合マイクロ命令によって生成されたメモリ・アクセス、
媒体命令によって生成されたメモリ・アクセス、
メモリ・アドレスを修正する命令によって生成されたメモリ・アクセス、
ソフトウェア・プリフェッチ命令によって生成されたメモリ・アクセス、
アーキテクチャ記述子をロードするメモリ・アクセス、
非時間データを指定する命令によって生成されたメモリ・アクセス、
位置合わせ検査を実行しない命令によって生成されたメモリ・アクセス、
監視プログラム特権レベル命令によって生成されたメモリ・アクセス、
ゼロ拡張命令によって生成されたメモリ・アクセス、
マスクされた移動命令によって生成されたメモリ・アクセス、
スタック・プッシュ命令によって生成されたメモリ・アクセス、及び
前記プロセッサのハードウェア・テーブルウォーク・エンジンによって生成されたメモリ・アクセス
からの少なくとも３つを含む、請求項１７に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【請求項１９】
セット・アソシエイティブ・キャッシュ・メモリであって、
Ｍ個のセット×Ｎ個のウェイとして構成された記憶要素のアレイであって、前記Ｎ個のセットの各セットが関連付けられた置換ビットを含む前記アレイと、
前記キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記Ｍ個のセットのうちの１つのセットを選択する前記割当ユニットと
を備え、
前記割当ユニットが、前記選択セットの前記Ｎ個のウェイの第１のサブセット内に割り当てるときには前記置換ビットの第１のサブセットを使用し、前記選択セットの前記Ｎ個のウェイの第２のサブセット内に割り当てるときには前記置換ビットの第２のサブセットを使用し、
前記置換ビットの前記第１と第２のサブセットが互いに排他的である、
セット・アソシエイティブ・キャッシュ・メモリ。
【請求項２０】
前記メモリ・アクセスのそれぞれが、複数の既定のメモリ・アクセス・タイプ（ＭＡＴ）の関連付けられたＭＡＴを有し、
前記割当ユニットが、前記置換ビットの前記第１のサブセットを使用して前記選択セットの前記Ｎ個のウェイの前記第１のサブセット内に割り当てるか、それとも前記置換ビットの前記第２のサブセットを使用して前記選択セットの前記Ｎ個のウェイの前記第２のサブセット内に割り当てるかを判定するために、前記メモリ・アクセスと関連付けられた前記ＭＡＴを使用する、請求項１９に記載のセット・アソシエイティブ・キャッシュ・メモリ。
【国際調査報告】
2017507443.tif 000054
2017507443.tif 000055