(57)【要約】  キャッシュは２＾Ｊバイトのキャッシュ・ラインを記憶し、２＾Ｎ個のセットの配列を有し、各々の配列は、各々がタグの各Ｘビット及び２＾Ｗ個のウェイを保持する。入力は、タグＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］とインデックスＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有するＱビット・アドレスＭＡ［（Ｑ−１）：０］を受け取る。Ｑは、少なくとも（Ｎ＋Ｊ＋Ｘ−１）である。セット選択ロジックは、インデックス及びタグのＬＳＢを使用して１つのセットを選択し、比較ロジックは、タグのＬＳＢ以外のすべてのビットを選択されたセット内の各タグのＬＳＢ以外のすべてのビットと比較し、マッチがあればヒットを表示し、割り当てロジックは、マッチがないことを比較ロジックが表示したときに、第１のモードで動作しているときには選択されたセットの２＾Ｗ個のウェイのうちのいずれかの中に割り当て、第２のモードで動作しているときには選択されたセットの２＾Ｗ個のウェイのサブセット内に割り当てる。サブセットは、タグ部分のビットに基づき制限される。
2017507442.tif 000002
【特許請求の範囲】
【請求項１】
Ｊが３よりも大きい整数である２＾Ｊバイトのキャッシュ・ラインを記憶するためのキャッシュ・メモリであって、
２＾Ｎ個のセットの配列であって、セットの各々が、各々がＸビットであるタグを保持し、Ｎ及びＸが両方とも５よりも大きい整数であり、前記配列が２＾Ｗ個のウェイを有する、前記２＾Ｎ個のセットの配列と、
Ｑビット・メモリ・アドレスＭＡ［（Ｑ−１）：０］を受け取る入力であって、前記アドレスが、
タグ部分ＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］と、
インデックス部分ＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有し、
Ｑが少なくとも（Ｎ＋Ｊ＋Ｘ−１）の整数である、前記入力と、
前記インデックス部分と前記タグ部分の最下位ビットとを使用して前記配列の１つのセットを選択するセット選択ロジックと、
前記タグ部分の前記最下位ビット以外のすべてのビットを前記選択された１つのセット内の各タグの前記最下位ビット以外のすべてのビットと比較して、マッチがあればヒットを表示する比較ロジックと、
割り当てロジックであって、マッチがないことを前記比較ロジックが表示したときに、
第１のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのうちのいずれか１つの中に割り当て、
第２のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのサブセットのうちの１つの中に割り当て、前記２＾Ｗ個のウェイの前記サブセットが前記タグ部分の１つ又は複数のビットに基づき制限される、前記割り当てロジックとを備える、キャッシュ・メモリ。
【請求項２】
前記サブセットは、前記２＾Ｗ個のウェイのうちの単一のウェイに制限され、前記単一のウェイは、ＭＡ［（Ｑ−Ｘ＋Ｗ）：（Ｑ−Ｘ＋１）］によって指定される、請求項１に記載のキャッシュ・メモリ。
【請求項３】
前記サブセットは、前記タグ部分の１つ又は複数のビットの関数であるビットが０のときに前記２＾Ｗ個のウェイのうちの偶数番号のウェイに制限され、前記ビットが１のときに前記２＾Ｗ個のウェイのうちの奇数番号のウェイに制限される、請求項１に記載のキャッシュ・メモリ。
【請求項４】
前記サブセットは、ＭＡ［（Ｑ−Ｘ＋１）］が０のときに前記２＾Ｗ個のウェイのうちの偶数番号のウェイに制限され、ＭＡ［（Ｑ−Ｘ＋１）］が１のときに前記２＾Ｗ個のウェイのうちの奇数番号のウェイに制限される、請求項３に記載のキャッシュ・メモリ。
【請求項５】
前記サブセットは、前記２＾Ｗ個のウェイのうちの２＾Ｚ個のウェイに制限され、前記２＾Ｚ個のウェイは、ＭＡ［（Ｑ−Ｘ＋（Ｗ−Ｚ））：（Ｑ−Ｘ＋１）］に基づき、Ｚは０よりも大きく、Ｗよりも小さい整数である、請求項１に記載のキャッシュ・メモリ。
【請求項６】
前記サブセットは、前記２＾Ｗ個のウェイのうちの２＾Ｚ個のウェイに制限され、前記２＾Ｚ個のウェイは、ＭＡ［（Ｑ−Ｘ＋（Ｗ−Ｚ））：（Ｑ−Ｘ＋１）］に基づき、Ｚは、０よりも大きい整数である、請求項５に記載のキャッシュ・メモリ。
【請求項７】
第３のモードで動作するときに、
前記セット選択ロジックは、前記インデックス部分を使用して前記配列の２つのセットを選択し、
前記比較ロジックは、前記タグ部分を前記選択された２つのセット内の各タグと比較して、マッチがあればヒットを表示し、
そうでなければ、前記割り当てロジックが、前記２つの選択されたセットのうちの１つのセット内に割り当てる、請求項１に記載のキャッシュ・メモリ。
【請求項８】
Ｊは６であり、Ｎは１１であり、Ｘは２０であり、Ｗは４であり、Ｑは３６である、請求項１に記載のキャッシュ・メモリ。
【請求項９】
当該キャッシュ・メモリは、当該キャッシュ・メモリを備えるプロセッサ上で新しいプロセスが稼働していることを検出したことに応答して、前記第１のモードから前記第２のモードに遷移させられる、請求項１に記載のキャッシュ・メモリ。
【請求項１０】
前記プロセッサが前記新しいプロセスを実行しているときに、当該キャッシュ・メモリが前記第１のモードより前記第２のモードにおいて効果的に実行するという判定が、オフライン解析によって行われる、請求項９に記載のキャッシュ・メモリ。
【請求項１１】
当該キャッシュ・メモリは、前記第１のモードに入っている間に当該キャッシュ・メモリに閾値より高いミス率が生じていることを検出したことに応答して、前記第１のモードから前記第２のモードに遷移させられる、請求項１に記載のキャッシュ・メモリ。
【請求項１２】
Ｊが３よりも大きい整数である２＾Ｊバイトのキャッシュ・ラインを記憶するためのキャッシュ・メモリを動作させるための方法であって、前記キャッシュ・メモリが、２＾Ｎ個のセットの配列であって、セットの各々が、各々がＸビットであるタグを保持し、Ｎ及びＸが両方とも５よりも大きい整数であり、前記配列が２＾Ｗ個のウェイを有する、前記２＾Ｎ個のセットの配列を有し、当該方法は、
Ｑビット・メモリ・アドレスＭＡ［（Ｑ−１）：０］を受け取るステップであって、前記アドレスが、
タグ部分ＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］と、
インデックス部分ＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有し、
Ｑが少なくとも（Ｎ＋Ｊ＋Ｘ−１）の整数である、ステップと、
前記インデックス部分と前記タグ部分の最下位ビットとを使用して前記配列の１つのセットを選択し、
前記タグ部分の前記最下位ビット以外のすべてのビットを前記選択された１つのセット内の各タグの前記最下位ビット以外のすべてのビットと比較して、マッチがあればヒットを表示するステップと、
比較する前記ステップが、マッチがないことを表示したときに、
第１のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのうちのいずれか１つの中に割り当て、
第２のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのサブセットのうちの１つの中に割り当てるステップであって、前記２＾Ｗ個のウェイの前記サブセットが前記タグ部分の１つ又は複数のビットに基づき制限される、ステップとを含む、方法。
【請求項１３】
前記サブセットは、前記２＾Ｗ個のウェイのうちの単一のウェイに制限され、前記単一のウェイは、ＭＡ［（Ｑ−Ｘ＋Ｗ）：（Ｑ−Ｘ＋１）］によって指定される、請求項１２に記載の方法。
【請求項１４】
前記サブセットは、前記タグ部分の１つ又は複数のビットの関数であるビットが０のときに前記２＾Ｗ個のウェイのうちの偶数番号のウェイに制限され、前記ビットが１のときに前記２＾Ｗ個のウェイのうちの奇数番号のウェイに制限される、請求項１２に記載の方法。
【請求項１５】
前記サブセットは、前記２＾Ｗ個のウェイのうちの２＾Ｚ個のウェイに制限され、前記２＾Ｚ個のウェイは、ＭＡ［（Ｑ−Ｘ＋（Ｗ−Ｚ））：（Ｑ−Ｘ＋１）］に基づき、Ｚは０よりも大きく、Ｗよりも小さい整数である、請求項１２に記載の方法。
【請求項１６】
第３のモードで動作するときに、
前記インデックス部分を使用して前記配列の２つのセットを選択するステップと、
前記タグ部分を前記選択された２つのセット内の各タグと比較して、マッチがあればヒットを表示するステップと、
そうでなければ、前記２つの選択されたセットのうちの１つのセット内に割り当てるステップとを含む、請求項１２に記載の方法。
【請求項１７】
前記キャッシュ・メモリを備えるプロセッサ上で新しいプロセスが稼働していることを検出したことに応答して、前記第１のモードから前記第２のモードに前記キャッシュ・メモリを遷移させるステップをさらに含む、請求項１２に記載の方法。
【請求項１８】
前記プロセッサが前記新しいプロセスを実行しているときに、前記キャッシュ・メモリが前記第１のモードより前記第２のモードにおいて効果的に実行するという判定が、オフライン解析によって行われる、請求項１７に記載の方法。
【請求項１９】
前記第１のモードに入っている間に前記キャッシュ・メモリに閾値より高いミス率が生じていることを検出したことに応答して、前記キャッシュ・メモリを前記第１のモードから前記第２のモードに遷移させるステップをさらに含む、請求項１２に記載の方法。
【請求項２０】
プロセッサであって、
Ｊが３よりも大きい整数である２＾Ｊバイトのキャッシュ・ラインを記憶するキャッシュ・メモリであって、
２＾Ｎ個のセットの配列であって、セットの各々が、各々がＸビットであるタグを保持し、Ｎ及びＸが両方とも５よりも大きい整数であり、前記配列が２＾Ｗ個のウェイを有する、前記２＾Ｎ個のセットの配列と、
Ｑビット・メモリ・アドレスＭＡ［（Ｑ−１）：０］を受け取る入力であって、前記アドレスが、
タグ部分ＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］と、
インデックス部分ＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有し、
Ｑが少なくとも（Ｎ＋Ｊ＋Ｘ−１）の整数である、前記入力と、
前記インデックス部分と前記タグ部分の最下位ビットとを使用して前記配列の１つのセットを選択するセット選択ロジックと、
前記タグ部分の前記最下位ビット以外のすべてのビットを前記選択された１つのセット内の各タグの前記最下位ビット以外のすべてのビットと比較して、マッチがあればヒットを表示する比較ロジックと、
割り当てロジックであって、マッチがないことを前記比較ロジックが表示したときに、
第１のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのうちのいずれか１つの中に割り当て、
第２のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのサブセットのうちの１つの中に割り当て、前記２＾Ｗ個のウェイの前記サブセットが前記タグ部分の１つ又は複数のビットに基づき制限される、前記割り当てロジックとを備える前記キャッシュ・メモリを具備する、プロセッサ。
【発明の詳細な説明】
【発明の概要】
【課題を解決するための手段】
【０００１】
一態様において、本発明は、Ｊが３よりも大きい整数である２＾Ｊバイトのキャッシュ・ラインを記憶するためのキャッシュ・メモリであって、２＾Ｎ個のセットの配列であって、セットの各々が、各々がＸビットであるタグを保持し、Ｎ及びＸが両方とも５よりも大きい整数であり、前記配列が２＾Ｗ個のウェイを有する、前記２＾Ｎ個のセットの配列と、Ｑビット・メモリ・アドレスＭＡ［（Ｑ−１）：０］を受け取る入力であって、前記アドレスが、タグ部分ＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］と、インデックス部分ＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有し、Ｑが少なくとも（Ｎ＋Ｊ＋Ｘ−１）の整数である、前記入力と、前記インデックス部分と前記タグ部分の最下位ビットとを使用して前記配列の１つのセットを選択するセット選択ロジックと、前記タグ部分の前記最下位ビット以外のすべてのビットを前記選択された１つのセット内の各タグの前記最下位ビット以外のすべてのビットと比較して、マッチがあればヒットを表示する比較ロジックと、割り当てロジックであって、マッチがないことを前記比較ロジックが表示したときに、第１のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのうちのいずれか１つの中に割り当て、第２のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのサブセットのうちの１つの中に割り当て、前記２＾Ｗ個のウェイの前記サブセットが前記タグ部分の１つ又は複数のビットに基づき制限される、前記割り当てロジックとを備える、キャッシュ・メモリを提供する。
【０００２】
別の態様では、本発明は、Ｊが３よりも大きい整数である２＾Ｊバイトのキャッシュ・ラインを記憶するためのキャッシュ・メモリを動作させるための方法であって、前記キャッシュ・メモリが、２＾Ｎ個のセットの配列であって、セットの各々が、各々がＸビットであるタグを保持し、Ｎ及びＸが両方とも５よりも大きい整数であり、前記配列が２＾Ｗ個のウェイを有する、前記２＾Ｎ個のセットの配列を有し、当該方法は、Ｑビット・メモリ・アドレスＭＡ［（Ｑ−１）：０］を受け取るステップであって、前記アドレスが、タグ部分ＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］と、インデックス部分ＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有し、Ｑが少なくとも（Ｎ＋Ｊ＋Ｘ−１）の整数である、ステップと、前記インデックス部分と前記タグ部分の最下位ビットとを使用して前記配列の１つのセットを選択し、前記タグ部分の前記最下位ビット以外のすべてのビットを前記選択された１つのセット内の各タグの前記最下位ビット以外のすべてのビットと比較して、マッチがあればヒットを表示するステップと、比較する前記ステップが、マッチがないことを表示したときに、第１のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのうちのいずれか１つの中に割り当て、第２のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのサブセットのうちの１つの中に割り当てるステップであって、前記２＾Ｗ個のウェイの前記サブセットが前記タグ部分の１つ又は複数のビットに基づき制限される、ステップとを含む、方法を提供する。
【０００３】
さらに別の態様では、本発明は、プロセッサであって、Ｊが３よりも大きい整数である２＾Ｊバイトのキャッシュ・ラインを記憶するキャッシュ・メモリであって、２＾Ｎ個のセットの配列であって、セットの各々が、各々がＸビットであるタグを保持し、Ｎ及びＸが両方とも５よりも大きい整数であり、前記配列が２＾Ｗ個のウェイを有する、前記２＾Ｎ個のセットの配列と、Ｑビット・メモリ・アドレスＭＡ［（Ｑ−１）：０］を受け取る入力であって、前記アドレスが、タグ部分ＭＡ［（Ｑ−１）：（Ｑ−Ｘ）］と、インデックス部分ＭＡ［（Ｑ−Ｘ−１）：Ｊ］とを有し、Ｑが少なくとも（Ｎ＋Ｊ＋Ｘ−１）の整数である、前記入力と、前記インデックス部分と前記タグ部分の最下位ビットとを使用して前記配列の１つのセットを選択するセット選択ロジックと、前記タグ部分の前記最下位ビット以外のすべてのビットを前記選択された１つのセット内の各タグの前記最下位ビット以外のすべてのビットと比較して、マッチがあればヒットを表示する比較ロジックと、割り当てロジックであって、マッチがないことを前記比較ロジックが表示したときに、第１のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのうちのいずれか１つの中に割り当て、第２のモードで動作しているときには前記選択された１つのセットの前記２＾Ｗ個のウェイのサブセットのうちの１つの中に割り当て、前記２＾Ｗ個のウェイの前記サブセットが前記タグ部分の１つ又は複数のビットに基づき制限される、前記割り当てロジックとを備える前記キャッシュ・メモリを具備する、プロセッサを提供する。
【図面の簡単な説明】
【０００４】
【図１】キャッシュ・メモリを示すブロック図である。
【図２】通常モードで動作するように構成されているときの図１のキャッシュ・メモリを示すブロック図である。
【図３】通常モードで動作するように構成されているときの図１のキャッシュ・メモリの動作を示す流れ図である。
【図４】ファット・モード（ｆａｔ  ｍｏｄｅ）で動作するように構成されているときの図１のキャッシュ・メモリを示すブロック図である。
【図５】ファット・モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図である。
【図６】ファット・モードから遷移するように命令されたときの図１のキャッシュ・メモリ１０２の動作を示す流れ図である。
【図７】直接マッピングされたキャッシュとしてスキニー・モード（ｓｋｉｎｎｙ  ｍｏｄｅ）で動作するように構成されているときの図１のキャッシュ・メモリ１０２を示すブロック図である。
【図８】スキニーＤＭモードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図である。
【図９】８ウェイ・セット・アソシエイティブ・キャッシュとしてスキニー・モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２を示すブロック図である。
【図１０】スキニー８ＷＡＹモードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図である。
【図１１】図１のキャッシュ・メモリ１０２の一実施形態をより詳しく示しているブロック図である。
【図１２Ａ】図１２と総称される、図１１のキャッシュ・メモリ１０２のバンク・イネーブル・ロジックを示しているブロック図である。
【図１２Ｂ】図１２と総称される、図１１のキャッシュ・メモリ１０２のバンク・イネーブル・ロジックを示しているブロック図である。
【図１３】図１１のキャッシュ・メモリ１０２のヒット生成ロジックを示しているブロック図である。
【図１４Ａ】図１のキャッシュ・メモリ１０２を備えるプロセッサを含むシステムの動作を示す流れ図である。
【図１４Ｂ】図１のキャッシュ・メモリ１０２を含むプロセッサの要素を示しているブロック図である。
【図１４Ｃ】図１のキャッシュ・メモリ１０２を含む図１４Ｂのプロセッサの動作を示している流れ図である。
【図１５】図１のキャッシュ・メモリ１０２を備えるプロセッサを含むシステムの動作を示す流れ図である。
【図１６】キャッシュ・メモリを示すブロック図である。
【図１７】図１６のタグ及び割り当てモードに基づきキャッシュ・メモリ１０２がその中に割り当てるウェイのサブセットを選択するロジックを示すブロック図である。
【図１８】図１６のキャッシュ・メモリの動作を示している流れ図である。
【図１９】図１６のキャッシュ・メモリを備えるプロセッサを含むシステムの動作を示す流れ図である。
【図２０】プログラム及びプログラム・フェーズに対するキャッシュ・メモリ・モード構成の生成を示す流れ図である。
【図２１】メモリ・アクセス・グラフ及びグラフから抽出されたデータの図である。
【図２２】プログラムのフェーズ解析を示す流れ図である。
【図２３】プロセッサの構成可能な態様に対する良好な構成を判定する力ずくの方法を示す流れ図である。
【図２４】プロセッサを示すブロック図である。
【発明を実施するための形態】
【０００５】
広範な特性を有するデータ・セットを処理し、大いに異なる様式でデータにアクセスするプログラムを実行するために現代的なプロセッサが必要である。データ・セットの特性及びアクセス・パターンは、プロセッサのキャッシュ・メモリの有効性に影響を及ぼす。この有効性は、もっぱら、ヒット率に関して測定される。
【０００６】
そのサイズに加えて、キャッシュ・メモリの連想度がその有効性に大きな影響を及ぼし得る。キャッシュ・メモリの連想度は、キャッシュ・ラインがそのメモリ・アドレスに基づき置かれ得るキャッシュの可能な配置、又はエントリを指す。キャッシュ・ラインが置かれる、又は割り当てられ得る、可能な配置の数が多ければ多いほど、キャッシュの連想度は大きくなる。一部のプログラムには、連想度が大きいキャッシュ・メモリが有効であり、一部のプログラムには、連想度が小さいキャッシュ・メモリが有効である。
【０００７】
キャッシュ・メモリがプロセッサの動作時にその連想度を変えて、その通常モードの連想度よりも大きく、及び／又はその通常の連想度よりも小さくするように動的に構成され得る実施形態が説明される。
【０００８】
次に図１を参照すると、キャッシュ・メモリ１０２を示すブロック図が図示されている。キャッシュ・メモリ１０２は、一方の入力上でメモリ・アドレス（ＭＡ）１０４を、別の入力上でモード１０８を受け取る。モード１０８は、キャッシュ・メモリ１０２が「通常」モード、「ファット」モード、又は「スキニー」モードで動作するように構成されるかどうかを指定する。これらのモードの各々について、下記でより詳しく説明される。
【０００９】
メモリ・アドレス１０４は、３つの部分に分解され、各々複数のビット、タグ部分１１２、インデックス部分１１４、及びオフセット部分１１６を有する。オフセット１１６は、選択されたキャッシュ・ライン内にバイト・オフセットを指定する。タグ１１２及びインデックス１１４の利用法が、下記でより詳しく説明される。わかりやすくするため、図１には、サイズが３６ビットである例示的なメモリ・アドレス１０４が示されており、これらの３６ビットは、タグ１１２＝ＭＡ［３５：１６］、インデックス１１４＝ＭＡ［１５：６］、及びオフセット１１６＝ＭＡ［５：０］として分解される。しかしながら、キャッシュ・メモリ１０２の連想度の動的変動性、すなわち、通常モード、ファット・モード、及びスキニー・モードの間の遷移は、異なる数のビットを有し、そのタグ１１２、インデックス１１４、及びオフセット１１６部分における異なる数のビットに分解される、メモリ・アドレス１０４を受け取るキャッシュ・メモリ上で実行され得る、ということが理解されるべきである。オフセット１１６におけるビットの数は、キャッシュ・ラインのサイズ（たとえば、６４バイト）を指定し、インデックス１１４は、下記で説明されているように、モード１０８に応じて、キャッシュ・メモリ１０２の１つ又は２つのセットを選択する。
【００１０】
キャッシュ・メモリ１０２は、複数のウェイによる複数のセットとして設計される。わかりやすくするため、２０４８個のセット及び１６個のウェイを有する例示的なキャッシュ・メモリ１０２が図１に示されている。しかしながら、本明細書で説明されている動的な連想度の変動性は、異なる数のセット及び異なる数のウェイを有するキャッシュ・メモリ上で実行され得る、ということが理解されるべきである。各セット／ウェイの組合せは、キャッシュ・ラインを記憶するキャッシュ・メモリ１０２内のエントリを識別する。各エントリは、キャッシュ・ラインのデータを記憶するための記憶域、さらにはキャッシュ・ラインのステータス（たとえば、ＭＥＳＩ状態）及びキャッシュ・ラインのタグ１０６を記憶するための記憶域を含む。タグ１０６は、キャッシュ・ラインが常駐するセット番号との組合せで、キャッシュ・ラインのメモリ・アドレスを指定する。図１の実施形態では、タグ１０６は、メモリ・アドレス１０４のタグ１１２部分のサイズに対応する２０ビットである。好ましくは、キャッシュ・メモリ１０２は、キャッシュ・ライン・データ、タグ１０６、及び置換情報を記憶するための別個の記憶配列を備える。
【００１１】
下記でより詳しく説明されているように、ファット・モードにおけるルックアップで、インデックス１１４は、キャッシュ・メモリ１０２の２つの異なるセットを選択するために使用され、メモリ・アドレス１０４の完全なタグ１１２は、ヒットを検出するために２つの選択されたセットの各ウェイの完全なタグ１０６と比較されるが、通常モード及びスキニー・モードでは、インデックス１１４及び、タグ１１２の最下位ビット（ＬＳＢ）は、キャッシュ・メモリ１０２の１つのセットを選択するために使用され、メモリ・アドレス１０４のタグ１１２のＬＳＢ以外のすべてのビットは、ヒットを検出するために、選択された１つのセットの各ウェイのタグ１０６のＬＳＢ以外のすべてのビットと比較される。これは、ファット・モードで動作するように構成されているときに、キャッシュ・メモリ１０２の実効連想度を倍にし、ウェイの数を半分にする。逆に、スキニー・モードで動作しているときには、キャッシュ・メモリ１０２は、タグ１１２の下位ビットのうちの１つ又は複数に基づき、キャッシュ・ラインが割り当てられ得るウェイを全ウェイのサブセットに（たとえば、１６から８、４、２、又は１に）制限し、これにより、実効連想度をウェイのサブセットを制限するために使用されるタグ１１２のビット数である２だけ減らす。ファット・モードから遷移して出るために、本明細書で説明されているように、ライトバック及び無効化動作がいくつかのキャッシュ・ライン上で実行されなければならない。しかしながら、いくつかの符号ストリームに対してファット・モードで動作するメリットは、ライトバック及び無効化動作に関連付けられているペナルティに値し得る。スキニー・モードへの、又はスキニー・モードからの遷移は、ライトバック及び無効化動作を必要としない。
【００１２】
次に図２を参照すると、通常モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２を示すブロック図が図示されている。より具体的には、モード入力１０８は、通常モードを表示する値を指定する。図３に関して下記でより詳しく説明されているように、通常モードでは、キャッシュ・メモリ１０２は、単一のセットを選択し、インデックス１１４によって選択されたセット内の各ウェイのエントリ・タグ１０６のＬＳＢ以外のすべてのビットをメモリ・アドレス１０４タグ１１２のＬＳＢ以外のすべてのビットと比較し、ミスがあったときに、選択されたセットのウェイのうちのいずれか１つの中に割り当てる。図２の例では、通常モードにおいて、キャッシュ・メモリ１０２は、２０４８セット×１６ウェイ・セット・アソシエイティブ・キャッシュとして動作する。
【００１３】
次に図３を参照すると、通常モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図が図示されている。流れは、ブロック３０２から始まる。
【００１４】
ブロック３０２において、モード１０８入力が通常モードを表示している間に、キャッシュ・メモリ１０２は、処理コアからロード要求を受け取る。ロード要求は、メモリ・アドレス１０４を含む。流れは、ブロック３０４に進む。
【００１５】
ブロック３０４において、キャッシュ・メモリ１０２は、インデックス１１４と連結されたタグ１１２のＬＳＢを使用して、図３においてセットＪと称される単一のセットを選択するが、これは図１の例では、結果としてＭＡ［１６：６］となる。流れは、ブロック３０６に進む。
【００１６】
ブロック３０６において、キャッシュ・メモリ１０２は、選択されたセットＪのすべての１６個のウェイにおける各エントリについて、ＬＳＢを除くメモリ・アドレス１０４タグ１１２のすべてのビットを、ＬＳＢを除くエントリ・タグ１０６のすべてのビットと比較する。この比較では、エントリが有効かどうかもチェックする。流れは、判定ブロック３０８に進む。
【００１７】
判定ブロック３０８において、キャッシュ・メモリ１０２は、ブロック３０６において実行された比較の結果有効マッチが得られたかどうかを判定する。そうであれば、流れはブロック３１２に進み、そうでなければ、流れはブロック３１４に進む。
【００１８】
ブロック３１２において、キャッシュ・メモリ１０２は、ヒットを表示する。流れは、ブロック３１２で終了する。
【００１９】
ブロック３１４において、キャッシュ・メモリ１０２は、選択されたセットＪにおけるエントリを割り当てる。好ましくは、キャッシュ・メモリ１０２は、最低使用頻度（ＬＲＵ）又は疑似ＬＲＵであったセットＪにおけるウェイからのエントリを割り当てるが、ランダム又はラウンドロビンなどの他の置換アルゴリズムも採用され得る。流れは、ブロック３１４で終了する。
【００２０】
次に図４を参照すると、ファット・モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２を示すブロック図が図示されている。より具体的には、モード入力１０８は、ファット・モードを表示する値を指定する。図５に関して下記でより詳しく説明されているように、ファット・モードでは、キャッシュ・メモリ１０２は、２つのセットを選択し、インデックス１１４によって選択されたセット内の各ウェイのエントリ・タグ１０６をメモリ・アドレス１０４タグ１１２と比較し、ミスがあったときに、２つの選択されたセットのうちのいずれか１つのセットのウェイのうちのいずれか１つのウェイの中に割り当てる。これは、事実上、キャッシュ・メモリ１０２のウェイの数を倍にし、セットの数を半分にする。図４の例では、ファット・モードにおいて、キャッシュ・メモリ１０２は、１０２４セット×３２ウェイ・セット・アソシエイティブ・キャッシュとして動作する。
【００２１】
次に図５を参照すると、ファット・モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図が図示されている。流れは、ブロック５０２から始まる。
【００２２】
ブロック５０２において、モード１０８入力がファット・モードを表示している間に、キャッシュ・メモリ１０２は、処理コアからロード要求を受け取る。ロード要求は、メモリ・アドレス１０４を含む。流れは、ブロック５０４に進む。
【００２３】
ブロック５０４において、キャッシュ・メモリ１０２は、図５においてセットＪ及びセットＫと称される２つのセットを選択する。セットＪは、タグ１１２と連結された２進値０を使用して選択され、図１の例では、この結果、２進値０はＭＡ［１５：６］と連結される。セットＫは、タグ１１２と連結された２進値１を使用して選択され、図１の例では、この結果、２進値１はＭＡ［１５：６］と連結される。流れは、ブロック５０６に進む。
【００２４】
ブロック５０６において、キャッシュ・メモリ１０２は、選択されたセットＪ及びＫのすべての３２ウェイにおける各エントリについて、メモリ・アドレス１０４タグ１１２をエントリ・タグ１０６と比較する。この比較では、エントリが有効かどうかもチェックする。流れは、判定ブロック５０８に進む。
【００２５】
判定ブロック５０８において、キャッシュ・メモリ１０２は、ブロック５０６において実行された比較の結果有効マッチが得られたかどうかを判定する。そうであれば、流れはブロック５１２に進み、そうでなければ、流れはブロック５１４に進む。
【００２６】
ブロック５１２において、キャッシュ・メモリ１０２は、ヒットを表示する。流れは、ブロック５１２で終了する。
【００２７】
ブロック５１４において、キャッシュ・メモリ１０２は、セットＪ及びセットＫのうちの１つを置換セットとなるように選択する。一実施形態において、キャッシュ・メモリ１０２は、単一のビットに対するメモリ・アドレス１０４の選択されたビットのハッシュに基づき、置換セットを、ハッシュが２進値０を生じる場合にセットＪが選択され、ハッシュが２進値１を生じる場合にセットＫが選択されるように選択するが、これは一般的に疑似ランダム方式で置換セットを選択する働きをする。別の実施形態では、キャッシュ・メモリ１０２は、たとえば、セットのＬＲＵウェイを選択するために記憶されている情報に加えて各セットについて記憶されている置換情報の余分な１つ又は複数のビットを使用して置換セットを選択する。たとえば、１つの余分なビットは、セットＪ又はＫがＬＲＵであったかどうかを表示し得る。流れは、ブロック５１６に進む。
【００２８】
ブロック５１６において、キャッシュ・メモリ１０２は、置換セットにおけるエントリを割り当てる。好ましくは、キャッシュ・メモリ１０２は、最低使用頻度（ＬＲＵ）又は疑似ＬＲＵ置換スキームに従って置換セットにおけるエントリを割り当てるが、ランダム又はラウンドロビンなどの他の置換アルゴリズムも採用され得る。流れは、ブロック５１６で終了する。
【００２９】
次に図６を参照すると、ファット・モードから遷移するよう命令されたときの図１のキャッシュ・メモリ１０２の動作を示す流れ図が図示されている。流れは、ブロック６０２から始まる。
【００３０】
ブロック６０２において、キャッシュ・メモリ１０２は、ファット・モードから遷移するように命令される、すなわち、モード１０８はファット・モードから通常モード又はスキニー・モードのいずれかに遷移する。流れは、ブロック６０４に進む。
【００３１】
ブロック６０４において、キャッシュ・メモリ１０２は、キャッシュ・メモリ１０２の各セットを（すなわち、各セット番号について）初めから終わりまで検索し、セット内の各エントリについて、タグ１０６のＬＳＢをセット番号のＭＳＢと比較する。ミスマッチがある場合、キャッシュ・メモリ１０２は、エントリを無効化する。しかし、エントリを無効化する前に、ステータスが、キャッシュ・ラインがダーティである、すなわち修正されていることを表示する場合、キャッシュ・メモリ１０２は、キャッシュ・ラインのデータをメモリに書き戻す。この動作は、キャッシュ・メモリ１０２のコヒーレンスを維持する働きをする。流れは、ブロック６０４で終了する。
【００３２】
ファット・モードを稼働させる潜在的不利点は、２セット分のタグが比較されなければならないのでこれが非ファット・モードよりも電力を大きく消費する可能性がある、ということである。しかし、いくつかのシステムでは、追加のキャッシュ有効性に対する電力消費量のトレードオフが、一部のユーザに対して望ましい場合がある。それに加えて、マルチコア・プロセッサでは、すべてに満たない数のコアが稼働している場合、追加のタグ配列アクセス（たとえば、図１１の実施形態では、追加のバンクアクセス）は、キャッシュ・メモリ１０２がキャッシュ・メモリ１０２にアクセスしているすべてのコアの要求条件を満たすように設計され得るので、耐久性があり得る。
【００３３】
次に図７を参照すると、直接マッピングされたキャッシュとしてスキニー・モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２を示すブロック図が図示されている。より具体的には、モード入力１０８は、スキニーＤＭと称される、スキニー直接マッピング・モードを表示する値を指定する。スキニー・モードでは、キャッシュ・メモリ１０２は、単一のセットを選択し、通常モードと同様に、インデックス１１４によって選択されたセットにおける各ウェイのエントリ・タグ１０６のＬＳＢ以外のすべてのビットをメモリ・アドレス１０４タグ１１２のＬＳＢ以外のすべてのビットと比較するが、スキニーＤＭモードでは、ミスがあると、キャッシュ・メモリ１０２は、選択されたセットの１つのウェイの中にのみ割り当てる。この１つのウェイは、メモリ・アドレス１０４の所定のビットによって指定される。好ましくは、所定のビットは、タグ１１２の次に最も最下位となるｌｏｇ２Ｎ個のビットであり、ここで、Ｎは、キャッシュ・メモリ１０２のウェイの数である。別の言い方をすると、所定のビットは、タグ１１２の、ＬＳＢを除いて最下位の、ｌｏｇ２Ｎ個のビットであり、図１の実施形態ではＭＡ［２０：１７］に対応し、図８に関して下記でより詳しく説明されているとおりである。図７の例では、スキニーＤＭモードにおいて、キャッシュ・メモリ１０２は、３２７６８セット直接マッピング・キャッシュとして動作する。
【００３４】
次に図８を参照すると、スキニーＤＭモードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図が図示されている。流れは、ブロック８０２から始まる。
【００３５】
ブロック８０２において、モード１０８入力がスキニーＤＭモードを表示している間に、キャッシュ・メモリ１０２は、処理コアからロード要求を受け取る。ロード要求は、メモリ・アドレス１０４を含む。流れは、ブロック８０４に進む。
【００３６】
ブロック８０４において、キャッシュ・メモリ１０２は、インデックス１１４と連結されたタグ１１２のＬＳＢを使用して、図８においてセットＪと称される単一のセットを選択するが、これは図１の例では、結果としてＭＡ［１６：６］となる。流れは、ブロック８０６に進む。
【００３７】
ブロック８０６において、キャッシュ・メモリ１０２は、選択されたセットＪのすべての１６個のウェイにおける各エントリについて、ＬＳＢを除くメモリ・アドレス１０４タグ１１２のすべてのビットを、ＬＳＢを除くエントリ・タグ１０６のすべてのビットと比較する。この比較では、エントリが有効かどうかもチェックする。流れは、判定ブロック８０８に進む。
【００３８】
判定ブロック８０８において、キャッシュ・メモリ１０２は、ブロック８０６において実行された比較の結果有効マッチが得られたかどうかを判定する。そうであれば、流れはブロック８１２に進み、そうでなければ、流れはブロック８１４に進む。
【００３９】
ブロック８１２において、キャッシュ・メモリ１０２は、ヒットを表示する。流れは、ブロック８１２で終了する。
【００４０】
ブロック８１４において、キャッシュ・メモリ１０２は、選択されたセットＪのＭＡ［２０：１７］によって指定されたウェイにおけるエントリを割り当てる。このようにして、キャッシュ・メモリ１０２は、スキニーＤＭモードで構成されるときに直接マッピング・キャッシュとして動作する。流れは、ブロック８１４で終了する。
【００４１】
上記で述べたように、有利には、スキニー・モードへの、又はスキニー・モードからの遷移は、ライトバック及び無効化動作を必要としない。しかしながら、遷移の後の短い時間に置換ビット値（たとえば、ＬＲＵ又は疑似ＬＲＵビット）に関するわずかなペナルティがあり得ることに留意されたい。たとえば、スキニー・モードから通常モードに遷移するときに、置換ビットは、たとえば、予想される通常モードのＬＲＵ値を有し得ない。
【００４２】
次に図９を参照すると、８ウェイ・セット・アソシエイティブ・キャッシュとしてスキニー・モードで動作するように構成されているときの図１のキャッシュ・メモリ１０２を示すブロック図が図示されている。より具体的には、モード入力１０８は、スキニー８ＷＡＹと称される、スキニー８ウェイ・モードを表示する値を指定する。スキニー８ＷＡＹモードでは、キャッシュ・メモリ１０２は、単一のセットを選択し、通常モードと同様に、インデックス１１４によって選択されたセットにおける各ウェイのエントリ・タグ１０６のＬＳＢ以外のすべてのビットをメモリ・アドレス１０４タグ１１２のＬＳＢ以外のすべてのビットと比較するが、スキニー８ＷＡＹモードでは、ミスがあると、キャッシュ・メモリ１０２は、選択されたセットのうちの１６個のウェイのサブセットのうちのいずれか１つの中に割り当てる。サブセットはメモリ・アドレス１０４の所定のビットによって、選択されたセットの８個の奇数番号のウェイか、又は選択されたセットの８個の偶数番号のウェイのいずれかとなるように指定される。一実施形態において、所定のビットは、タグ１１２の次に最も最下位となるビットである。別の言い方をすると、所定のビットは、タグ１１２の、ＬＳＢを除いて最下位のビットであり、図１の実施形態ではＭＡ［１７］に対応し、図１０に関して下記でより詳しく説明されているとおりである。他の実施形態では、所定のビットは、他の方法を使用して生成される。たとえば、所定のビットは、タグ１１２の複数のビットのブール排他的ＯＲ（ＸＯＲ）として生成され得る（好ましくは、セットを選択するために使用されるタグ１１２のビット、たとえば、ＭＡ［１６］を除外する）。これは、下記で説明されているように、キャッシュ・ラインが同じセット内に異常に（pathologically）エイリアスを生じている（aliasing）場合に特に有利である。ＸＯＲ以外の機能も、タグ１１２の複数のビットを単一のビットに凝縮するために使用され得る。図９の例では、スキニー８ＷＡＹモードにおいて、キャッシュ・メモリ１０２は、４０９６セット×８ウェイ・セット・アソシエイティブ・キャッシュとして動作する。
【００４３】
次に図１０を参照すると、スキニー８ＷＡＹモードで動作するように構成されているときの図１のキャッシュ・メモリ１０２の動作を示す流れ図が図示されている。流れは、ブロック１００２から始まる。
【００４４】
ブロック１００２において、モード１０８入力がスキニー８ＷＡＹモードを表示している間に、キャッシュ・メモリ１０２は、処理コアからロード要求を受け取る。ロード要求は、メモリ・アドレス１０４を含む。流れは、ブロック１００４に進む。
【００４５】
ブロック１００４において、キャッシュ・メモリ１０２は、インデックス１１４と連結されたタグ１１２のＬＳＢを使用して、図１０においてセットＪと称される単一のセットを選択するが、これは図１の例では、結果としてＭＡ［１６：６］となる。流れは、ブロック１００６に進む。
【００４６】
ブロック１００６において、キャッシュ・メモリ１０２は、選択されたセットＪのすべての１６個のウェイにおける各エントリについて、ＬＳＢを除くメモリ・アドレス１０４タグ１１２のすべてのビットを、ＬＳＢを除くエントリ・タグ１０６のすべてのビットと比較する。この比較では、エントリが有効かどうかもチェックする。流れは、判定ブロック１００８に進む。
【００４７】
判定ブロック１００８において、キャッシュ・メモリ１０２は、ブロック１００６において実行された比較の結果有効マッチが得られたかどうかを判定する。そうであれば、流れはブロック１０１２に進み、そうでなければ、流れは判定ブロック１０１３に進む。
【００４８】
ブロック１０１２において、キャッシュ・メモリ１０２は、ヒットを表示する。流れは、ブロック１０１２で終了する。
【００４９】
判定ブロック１０１３において、キャッシュ・メモリ１０２は、ビットＭＡ［１７］を調べる。ビットＭＡ［１７］が２進値１である場合、流れはブロック１０１６に進み、そうでなく、ビットＭＡ［１７］が２進値０である場合、流れはブロック１０１４に進む。図９に関して上記で説明されているように、判定ブロック１０１３で調べられたビットが、ＭＡ［１７］と異なる、タグ１１２のビット（すなわち、タグ１１２のＬＳＢの次のビット）であるか、又はタグ１１２の複数のビットの関数として生成される、他の実施形態が企図される。
【００５０】
ブロック１０１４において、キャッシュ・メモリ１０２は、選択されたセット内の偶数番号のウェイのいずれかにおけるエントリを割り当てる。好ましくは、キャッシュ・メモリ１０２は、最低使用頻度（ＬＲＵ）又は疑似ＬＲＵ置換スキームに従って、選択された偶数番号のウェイにおけるエントリを割り当てるが、ランダム又はラウンドロビンなどの他の置換アルゴリズムも採用され得る。流れは、ブロック１０１４で終了する。
【００５１】
ブロック１０１６において、キャッシュ・メモリ１０２は、選択されたセット内の奇数番号のウェイのいずれかにおけるエントリを割り当てる。好ましくは、キャッシュ・メモリ１０２は、最低使用頻度（ＬＲＵ）又は疑似ＬＲＵ置換スキームに従って、選択された奇数番号のウェイにおけるエントリを割り当てるが、ランダム又はラウンドロビンなどの他の置換アルゴリズムも採用され得る。流れは、ブロック１０１６で終了する。
【００５２】
２つのスキニー・モード、すなわち、スキニー直接マッピング・モード及びスキニー８ウェイ・モードの実施形態が説明されているけれども、これらは、スキニー・モードを示すために説明されており、これらの実施形態に限定されない、ということが理解されるべきである。図１の例示的な実施形態に関して、たとえば、ＭＡ［１８：１７］がそれぞれ置換用の４つのウェイの４つのサブセットを選択するために使用されるスキニー４ウェイ・モードも構成され、ＭＡ［１９：１７］がそれぞれ置換用の２つのウェイの８個のサブセットを選択するために使用されるスキニー２ウェイ・モードが構成され得る。他の実施形態では、上記で述べられているように、タグ１１２の他のビットは、置換用のウェイのサブセットを選択するために使用され、これらのビットは、置換用のウェイのサブセットを選択するために使用されるビットを生成する機能（たとえば、ＸＯＲ）への入力となり得る。
【００５３】
スキニー・モードは、ＬＲＵ又は疑似ＬＲＵ置換ポリシーの非常に良くない使用を行ういくつかの異常な（pathological）プログラムに対して有益な場合がある。たとえば、プログラムが、メモリ内を探索（marching  through  memory）していて、ロードが要求されるときに頻繁にキャッシュ・メモリ１０２内でミスをし、プログラムが必要としているまさに次のラインを追い出す（kick  out）ような異常なエイリアシング効果（aliasing  effect）を有すると仮定する。しかしながら、キャッシュ・メモリ１０２の実効連想度がスキニー・モードへの遷移によって低減されるときに、問題は回避される。
【００５４】
たとえば、プログラムが、キャッシュ・メモリ１０２のセット内で下側半分が上側半分内にエイリアスするメモリ内の非常に大きなデータ構造をアクセスしている可能性がある。しかしながら、下側半分及び上側半分は、ＬＲＵ置換を無効にする異なる使用パターンを有する。スキニー・モード−８ＷＡＹを介して、キャッシュ・メモリ１０２の実効連想度を低減することによって、キャッシュ・メモリ１０２内でデータ構造の半分は他の半分から効果的に絶縁される。この種類の異常な事例は、プログラムのオフライン解析を使用して判定されることができ、これは図１４Ａ〜１４Ｃに関して下記で説明されているような、キャッシュ・メモリ１０２を再構成するために使用され得る。
【００５５】
別の例について、プログラムは、そのアドレスがタグ１１２の高位のビットにおける違いを除き同一であるので、キャッシュ・メモリ１０２の同じセット内にエイリアスする２つのデータ・セットにアクセスしていると仮定する。この場合、データ・セットのうちの一方の置換ポリシーを他方から絶縁することが有利であり得る。これは、２つのデータ・セットの間で異なるタグ１１２の高位のビットに対応するタグ１１２のビットを使用して、置換のために選択されるウェイのサブセットを制限するために使用されるビットを生成することによって達成され得る。これは、たとえば、高められたキャッシュ・メモリ１０２の有効性が達成されるまで異なるタグ１１２アドレス・ビット選択を繰り返すことによって図１５に関して、又はプログラムのオフライン解析を介して図１４Ａ〜１４Ｃに関して、下記で説明されている方法を使用して、達成され得る。
【００５６】
次に図１１を参照すると、図１のキャッシュ・メモリ１０２の一実施形態をより詳しく示しているブロック図が図示されている。特に、図１１の実施形態は、デュアルポート・バンク・キャッシュ・メモリ１０２である。キャッシュ・メモリ１０２は、バンク０  １１０６−０、バンク１  １１０６−１、バンク２  １１０６−２、及びバンク３  １１０６−３と表される、４つのバンク１１０６を含む。各バンク１１０６は、キャッシュ・メモリ１０２のセットの１／４、すなわち、５１２個のセットを記憶する容量を有する。図１１の実施形態において、バンク０  １１０６−０は、値が４を法として０である（値  mod  4=0）セットを保持し、バンク１  １１０６−１は、値が４を法として１であるセットを保持し、バンク２  １１０６−２は、値が４を法として２であるセットを保持し、バンク３  １１０６−３は、値が４を法として３であるセットを保持し、図のとおりである。
【００５７】
キャッシュ・メモリ１０２は、ポートＡ１１０４Ａ及びポートＢ１１０４Ｂと表される２つのポート１１０４も含む。各ポート１１０４は、各バンク１１０６に結合される。各ポート１１０４は、モード１０８を入力として受け取る。
【００５８】
キャッシュ・メモリ１０２は、タグ・パイプラインＡ１１０２Ａ及びタグ・パイプラインＢ１１０２Ｂと表される２つのタグ・パイプライン１１０２も含む。タグ・パイプラインＡ１１０２Ａは、ポートＡ１１０４Ａを通じてバンク１１０６にアクセスし、タグ・パイプラインＢ１１０２Ｂは、ポートＢ１１０４Ｂを通じてバンク１１０６にアクセスする。各タグ・パイプライン１１０２は、モード１０８を入力として受け取る。様々なモードにおけるセット選択に対するバンク１１０６の選択、又は有効化は、図１２に関して下記でより詳しく説明されており、様々なモードにおけるキャッシュ・メモリ１０２によるヒットの生成は、図１３に関して下記でより詳しく説明されている。好ましくは、タグ・パイプライン１１０２は、本明細書の様々な実施形態において説明されているようなセット（又はファット・モードの場合には２つのセット）の選択を実行する選択ロジック（図示せず）と、メモリ・アドレスの指定されたビットを本明細書の様々な実施形態において説明されていような配列に記憶されているタグの指定されたビットと比較する比較ロジック（図示せず）と、本明細書の様々な実施形態において説明されているような配列内に割り当てる割り当てロジック（図示せず）とを含む。それに加えて、好ましくは、タグ・パイプライン１１０２は、図１６〜１９の実施形態の割り当てモード入力によって指定されたタグ・ビットに対して機能を実行するロジックを含む。好ましくは、タグ・パイプライン１１０２は、複数のステージを備え、それらのステージの各々が異なる動作を実行して、本明細書で説明されている様々な実施形態のセット選択、タグ比較、ウェイ割り当て、及びウェイ・サブセット判定を遂行する。
【００５９】
ポートＡ１１０４Ａ及びポートＢ１１０４Ｂは、両方とも、それらが両方とも同じバンク１１０６を選択していない限り、同時にアクティブであり得る。これは、事実上、４つの単一ポート・バンク１１０６からデュアルポート・キャッシュ・メモリ１０２を構成する。好ましくは、キャッシュ・メモリ１０２のアービトレーション・ロジックが、特にキャッシュ・メモリ１０２がファット・モードに入っているときに、コンフリクトしていないバンク１１０６にアクセスする２つのタグ・パイプライン１１０２からアービトレーション要求を選択することを試みる。
【００６０】
次に、図１２Ａ及び１２Ｂを参照すると、これらは図１２と総称され、図１１のキャッシュ・メモリ１０２のバンク・イネーブル・ロジック１２００を示しているブロック図が図示されている。図１２Ａを参照すると、バンク・イネーブル・ロジック１２００は、タグ・パイプラインＡ１１０２Ａからファット・モード・インジケータ１２０９及びメモリ・アドレスＭＡ１０４−Ａを受け取るバンク・イネーブル・ロジック１２００Ａを含み、応答としてポートＡ１１０４Ａに対するバンク・イネーブル（ＥＮｘＡ、ただし、ｘはバンク番号である）１２１２−ｘＡを生成する。ファット・モード・インジケータ１２０９は、キャッシュ・メモリ１２０がファット・モードで動作している場合に真であり、そうでなければ偽であり、モード・インジケータ１０８を受け取るロジック（図示せず）によって生成される。バンク・イネーブル・ロジック１２００は、また、タグ・パイプラインＢ１１０２Ｂからファット・モード・インジケータ１２０９及びメモリ・アドレスＭＡ１０４−Ｂを受け取るバンク・イネーブル・ロジック１２００Ｂを含み、応答としてポートＢ１１０４Ｂに対するバンク・イネーブル（ＥＮｘＢ、ただし、ｘはバンク番号である）１２１２−ｘＢを生成する。ポートＡバンク・イネーブル・ロジック１２００Ａは、詳細に説明されており、またポートＢバンク・イネーブル・ロジック１２００Ｂは、上記で説明されているように、その入力及び出力を除き、同じである。
【００６１】
バンク・イネーブル・ロジック１２００Ａは、ＭＡ［７］１０４−Ａを受け取る第１のインバータ１２０４−０と、ＭＡ［６］１０４−Ａを受け取る第２のインバータ１２０８−０と、第１のインバータ１２０４−０の出力及びファット・モード・インジケータ１２０９を受け取る第１のＯＲゲート１２０２−０と、第１のＯＲゲート１２０２−０の出力及び第２のインバータ１２０８−０の出力を受け取り、ポートＡ１１０４Ａに対するバンク０  １１０６−０イネーブルである、ＥＮ０Ａ  １２１２−０Ａを生成する第１のＡＮＤゲート１２０６−０を含む。
【００６２】
バンク・イネーブル・ロジック１２００Ａは、ＭＡ［７］１０４−Ａを受け取る第３のインバータ１２０４−１と、第３のインバータ１２０４−１の出力及びファット・モード・インジケータ１２０９を受け取る第２のＯＲゲート１２０２−１と、第２のＯＲゲート１２０２−１の出力及びＭＡ［６］１０４−Ａを受け取り、ポートＡ１１０４Ａに対するバンク１  １１０６−１イネーブルである、ＥＮ１Ａ  １２１２−１Ａを生成する第２のＡＮＤゲート１２０６−１も含む。
【００６３】
バンク・イネーブル・ロジック１２００Ａは、ＭＡ［６］１０４−Ａを受け取る第４のインバータ１２０８−２と、ＭＡ［７］１０４−Ａ及びファット・モード・インジケータ１２０９を受け取る第３のＯＲゲート１２０２−２と、第３のＯＲゲート１２０２−２の出力及び第４のインバータ１２０８−２の出力を受け取り、ポートＡ１１０４Ａに対するバンク２  １１０６−２イネーブルである、ＥＮ２Ａ  １２１２−２Ａを生成する第３のＡＮＤゲート１２０６−２も含む。
【００６４】
バンク・イネーブル・ロジック１２００Ａは、ＭＡ［７］１０４−Ａ及びファット・モード・インジケータ１２０９を受け取る第４のＯＲゲート１２０２−３と、第４のＯＲゲート１２０２−３の出力及びＭＡ［６］１０４−Ａを受け取り、ポートＡ１１０４Ａに対するバンク３  １１０６−３イネーブルである、ＥＮ３Ａ  １２１２−３Ａを生成する第４のＡＮＤゲート１２０６−３も含む。
【００６５】
図１２Ｂを参照すると、バンク・イネーブル・ロジック１２００は、ポートＡバンク・イネーブル・ロジック１２００ＡからＥＮ０Ａ  １２１２−０Ａを、ポートＢバンク・イネーブル・ロジック１２００ＢからＥＮ０Ｂ  １２１２−０Ｂを受け取り、バンク０  １１０６−０にバンク・イネーブルとして提供される、ＥＮ０  １２１６−０を生成する第１のＯＲゲート１２１４−０を含む。バンク・イネーブル・ロジック１２００は、ポートＡバンク・イネーブル・ロジック１２００ＡからＥＮ１Ａ  １２１２−１Ａを、ポートＢバンク・イネーブル・ロジック１２００ＢからＥＮ１Ｂ  １２１２−１Ｂを受け取り、バンク１  １１０６−１にバンク・イネーブルとして提供される、ＥＮ１  １２１６−１を生成する第２のＯＲゲート１２１４−１も含む。バンク・イネーブル・ロジック１２００は、ポートＡバンク・イネーブル・ロジック１２００ＡからＥＮ２Ａ  １２１２−２Ａを、ポートＢバンク・イネーブル・ロジック１２００ＢからＥＮ２Ｂ  １２１２−２Ｂを受け取り、バンク２  １１０６−２にバンク・イネーブルとして提供される、ＥＮ２  １２１６−２を生成する第３のＯＲゲート１２１４−２も含む。バンク・イネーブル・ロジック１２００は、ポートＡバンク・イネーブル・ロジック１２００ＡからＥＮ３Ａ  １２１２−３Ａを、ポートＢバンク・イネーブル・ロジック１２００ＢからＥＮ３Ｂ  １２１２−３Ｂを受け取り、バンク３  １１０６−３にバンク・イネーブルとして提供される、ＥＮ３  １２１６−３を生成する第４のＯＲゲート１２１４−３も含む。
【００６６】
次に図１３を参照すると、図１１のキャッシュ・メモリ１０２のヒット生成ロジック１３００を示しているブロック図が図示されている。図１のキャッシュ・メモリ１０２のエントリのタグ１０６を保持する記憶素子が図示されている。図１３の実施形態において、記憶素子は、２０ビットのタグ１０６を保持する。エントリの有効インジケータ１３０２を保持する別の記憶素子が図示されている。タグ１０６記憶素子は、ＭＡ［３５：１６］１０４を受け取り、割り当て信号１３０１が真であるときに、ＭＡ［３５：１６］１０４値がタグ１０６に書き込まれ、有効インジケータ１３０２が更新され、エントリが有効であることを表示する。逆に、割り当て解除信号１３０３が真であるときに、有効インジケータ１３０２が更新され、エントリが無効であることを表示する。図１３に示されているように、割り当て信号１３０１及び割り当て解除信号１３０３は、図１３においてセットＪ及びウェイ０として表示されている、特定のセット及びウェイに特有である。しかしながら、キャッシュ・メモリ１０２の各セット及びウェイに対して割り当て信号１３０１及び割り当て解除信号１３０３が存在する、ということが理解されるべきである。
【００６７】
ヒット生成ロジック１３００は、タグ１０６及びＭＡ［３５：１６］１０４を受け取る比較器１３０４を含む。比較器１３０４も、図１２のファット・モード・インジケータ１２０９を受け取る。ファット・モード・インジケータ１２０９が真であるときに、比較器１３０４は、たとえば図５のブロック５０６におけるように、タグ１０６の２０個すべてのビットをＭＡ［３５：１６］と比較して、マッチが生じているかどうかを表示する出力を生成する。しかしながら、ファット・モード・インジケータ１２０９が偽であるときに、比較器１３０４は、たとえばそれぞれ図３、８、及び１０のブロック３０６、８０６、及び１００６におけるように、タグ１０６の上位１９ビットのみをＭＡ［３５：１７］と比較して出力を生成する。ＡＮＤゲート１３０６は、比較器１３０４の出力及び有効ビット１３０２を受け取り、セットＪウェイ０に対してヒットが生じたかどうかを表示するセットＪウェイ０ヒット信号１３０８−Ｊ０を生成する。図１３に示されているように、セットＪウェイ０ヒット信号１３０８−Ｊ０は、特定のセット及びウェイに特有であるが、キャッシュ・メモリ１０２の各セット及びウェイに対してセット・ウェイ・ヒット信号１３０８が存在する、ということが理解されるべきである。
【００６８】
ヒット生成ロジック１３００は、セットＪの各ウェイに対するセットＪウェイｘヒット信号１３０８−Ｊｘを受け取る第１のＯＲゲート１３１２−Ｊも含み、ｘは、図１３において０から１５で表されている、ウェイ番号、すなわち、１６個の異なるウェイに対する番号である。ＯＲゲート１３１２−Ｊは、セットＪヒット信号１３１４−Ｊを生成する。
【００６９】
ヒット生成ロジック１３００は、セットＫの１６個のウェイの各々に対するセットＫウェイｘヒット信号１３０８−Ｋｘを受け取る第２のＯＲゲート１３１２−Ｋも含む。セットＫは、図５のブロック５０４により、ファット・モードのときに選択される第２のセット、たとえば、１：ＭＡ［１５：６］によって選択されたセットである。ＯＲゲート１３１２−Ｋは、セットＫヒット信号１３１４−Ｋを生成する。
【００７０】
ヒット生成ロジック１３００は、セットＪヒット信号１３１４−Ｊ及びセットＫヒット信号１３１４−Ｋを受け取り、ファット・モード・ヒット信号１３１８を生成するＯＲゲート１３１６も含む。ヒット生成ロジック１３００は、たとえばそれぞれ図３、５、８、及び１０のブロック３１２、５１２、８１２、及び１０１２におけるように、セットＪヒット信号１３１４−Ｊ及びファット・モード・ヒット信号１３１８を受け取り、ファット・モード信号１２０９が偽である場合に前者を選択し、そうでなければ後者を選択し、キャッシュ・メモリ１０２内でヒットが生じたかどうかを表示するヒット信号１３２４をその出力に供給するマルチプレクサ１３２２も含む。
【００７１】
次に図１４Ａを参照すると、図１のキャッシュ・メモリ１０２を備えるプロセッサを含むシステムの動作を示す流れ図が図示されている。流れは、ブロック１４０２から始まる。
【００７２】
ブロック１４０２において、システムは、新しいプロセス、又はプログラムが実行中であることを検出する。一実施形態において、プロセッサ１００上で稼働するシステム・ソフトウェアは新しいプロセスを検出し、たとえば、デバイス・ドライバがオペレーティング・システムのプロセス・テーブルを監視する。システム・ソフトウェアは、図１４Ｂに関して下記で説明されているように、プログラムが異なるフェーズの各々に入っていることを検出するためにプロセッサによって使用され得る情報を、プロセッサに提供することができ、システム・ソフトウェアは、これらのフェーズの各々に対して異なるモードを指定し得る。この命令に応答して、プロセッサは、モード１０８を更新し、提供されている場合に、フェーズ検出器（図１４Ｂの１４１４）に初期フェーズ識別子（図１４Ｂの１４１２）をロードする。一実施形態において、プロセッサそれ自体が、新しいプロセスを検出し、たとえば、プロセッサは、プロセス・コンテキスト識別子（ＰＣＩＤ）の変化、たとえば、新しい値がｘ８６命令セット・アーキテクチャＣＲ３レジスタのＰＣＩＤ部分にロードされていることを検出する。一実施形態において、プロセッサは、プログラムの変化ではなく、現在稼働中のプログラムの新しいフェーズへの遷移を検出する。流れは、ブロック１４０４に進む。
【００７３】
ブロック１４０４において、キャッシュ・メモリ１０２は、たとえば、モード・インジケータ１０８を介して、ブロック１４０２において検出されたプロセスのオフライン解析に基づきプログラム又はフェーズに対する最良実行モードであるとすでに判定されている新しいモードに遷移させられる。一実施形態において、プロセッサのマイクロコードは、キャッシュ・メモリ１０２のモード１０８を変更する。キャッシュ・メモリ１０２が、ファット・モードから遷移している場合、すべてのメモリ操作は停止され、図６に関して説明されている操作が実行され、次いで、メモリ操作が再開される。一実施形態において、システム・ソフトウェアは、ブロック１４０２において新しいプロセスが稼働していることを検出したときに新しいモードを提供する。一実施形態において、プロセッサ１００は、ＰＣＩＤの変化又はプログラム・フェーズの遷移を検出したことに応答して、メモリ（たとえば、プロセッサ１００のローカル・プライベート・メモリ、又はシステム・メモリ）から新しいモードをフェッチし、好ましくは、プロセッサ１００は、ＰＣＩＤ又はフェーズ識別子を使用してリストから新しいモードを識別する。モード情報は、オフライン解析によっても判定されるプログラムの異なるフェーズに対する異なるモードを含み得る。流れは、ブロック１４０４で終了する。
【００７４】
次に図１４Ｂを参照すると、図１のキャッシュ・メモリ１０２を含むプロセッサの要素を示しているブロック図が図示されている。プロセッサは、稼働中プログラムが新しいフェーズに入っていることを検出するフェーズ検出器１４１４を含む。フェーズ検出器１４１４は、図１４Ａに関して上記で説明されているようなデバイス・ドライバなどによって、それに提供されるフェーズ識別子１４１２に基づき判定を行う。フェーズ識別子１４１２は、プログラムの命令の命令ポインタ（又はプログラム・カウンタ）値を含み得る。命令は、サブルーチン呼び出し命令であってよく、その場合、フェーズ識別子１４１２は、呼び出し命令のターゲット命令の命令ポインタ（又はプログラム・カウンタ）値も含み得る。さらに、フェーズ識別子１４１２は、呼び出し命令の１つ又は複数のパラメータ値、たとえば、戻りアドレス、レジスタ値、及び／又はスタック値も含み得る。フィンガープリント・ユニットとここでは称されている、フェーズ検出器の一例は、米国特許出願第１４／０５０，６８７号及び第１４／０５０，７５７号においてより詳細に説明されており、これらは両方とも２０１３年１０月１０日に出願され、これらは両方とも２０１３年９月２０日に出願した米国仮出願第６１／８８０，６２０号への優先権を主張しており、すべての目的のために、各々の全体が参照により本明細書に組み込まれている。プロセッサは、新しいフェーズが検出されていることをフェーズ検出器１４１４によって通知され、新しいフェーズの識別子を受け取るモード更新ユニット１４１６も含む。また、モード更新ユニット１４１６は、モード情報を、たとえば、図１４Ａに関して上記で説明されているようなデバイス・ドライバから受け取る。モード更新ユニット１４１６は、図１４Ｃに関して下記で説明されているように、キャッシュ・メモリ１０２内のモード１０８を更新する。一実施形態において、モード更新ユニット１４１６は、フェーズ検出器１４１４によって呼び出されるプロセッサのマイクロコードを備える。代替的一実施形態では、モード更新ユニット１４１６は、新しいフェーズが検出されていることを示すフェーズ検出器１４１４からのインジケータ、及び新しいフェーズの識別子を受け取る状態機械を備える。フェーズ解析は、下記の図２２に関してより詳しく説明される。
【００７５】
次に図１４Ｃを参照すると、図１のキャッシュ・メモリ１０２を含む図１４Ｂのプロセッサの動作を示している流れ図が図示されている。流れは、ブロック１４２２から始まる。
【００７６】
ブロック１４２２において、図１４Ｂのフェーズ検出器１４１４は、稼働中プログラムが新しいフェーズに入っていることを検出する。新しいフェーズを検出したことに応答して、フェーズ検出器１４１４は、図１４Ｂのモード更新ユニット１４１６に通知する。流れは、ブロック１４２４に進む。
【００７７】
ブロック１４２４において、モード更新ユニット１４１６は、モード情報１４１８（たとえば、図１４Ａのブロック１４０４においてデバイス・ドライバから受け取った）の中のフェーズ検出器１４１４から受け取った新しいフェーズの識別子を探索し、探索で見つかったモードでキャッシュ・メモリ１０２のモード１０８を更新する。それに加えて、モード更新ユニット１４１６は、必要に応じて、新しいフェーズ識別子１４１２でフェーズ検出器１４１４を更新する。一実施形態において、次に探索されるフェーズは、現在のフェーズに依存しており、したがって、フェーズ検出器１４１４にロードされるべきフェーズ識別子１４１２は、現在のフェーズに応じて異なり得る。流れは、ブロック１４２６に進む。
【００７８】
ブロック１４２６において、プロセッサは稼働中のプログラムを実行して、キャッシュ・メモリ１０２へのメモリ・アクセスを生成し、これに応答して、キャッシュ・メモリ１０２はブロック１４２４において実行されるような更新されたモード１０８に従って動作する。流れは、ブロック１４２６で終了する。
【００７９】
次に図１５を参照すると、図１のキャッシュ・メモリ１０２を備えるプロセッサを含むシステムの動作を示す流れ図が図示されている。流れは、ブロック１５０２から始まる。
【００８０】
ブロック１５０２において、プロセッサは、キャッシュ・メモリ１０２が現在のモードにおいて無効な実行をしていることを検出する。たとえば、実行カウンタは、キャッシュ・メモリ１０２に、閾値を超えるミス率が生じていることを表示し得る。流れは、ブロック１５０４に進む。
【００８１】
ブロック１５０４において、キャッシュ・メモリ１０２は、現在のモードと異なる新しいモードに遷移させられる。一実施形態において、プロセッサのマイクロコードは、キャッシュ・メモリ１０２のモード１０８を変更する。キャッシュ・メモリ１０２が、ファット・モードから遷移している場合、すべてのメモリ操作は停止され、図６に関して説明されている操作が実行され、次いで、メモリ操作が再開される。好ましくは、プロセッサ（たとえば、マイクロコード）は、モードに関係なく高いミス率になりやすいプログラム及び／又はデータ・セットの場合などにおいて、モード間のスラッシングを回避するために、このようにして行われるキャッシュ・メモリ１０２モードへの自動的変更を追跡する。一実施形態において、これらのモード（通常、ファット、異なる可能なスキニー・モードのうちのスキニー）のすべてが、必要に応じて試みられる。他の実施形態では、これらのモードのサブセットが試みられる。たとえば、通常モードとスキニー・モードのうちのいずれかとの間、又は一方のスキニー・モードと他方のスキニー・モードとの間の遷移に関連付けられているライトバック無効化ペナルティはないので、このサブセットは、これらのモードに制限され、ファット・モードを除外し得る。異なるスキニー・モードは、キャッシュ・ラインが割り当てられ得るウェイのサブセットがどのように制限されるかということに関して異なるスキニー・モードを含むだけでなく、たとえば図９などに関して上記で説明されているような、サブセットの制限の基準となるように選択されたタグの１つ又は複数のビット、たとえば、すべてがスキニー８ＷＡＹモードにおけるＭＡ［１７］、ＸＯＲ（ＭＡ［２６］、ＭＡ［２３］、又はＭＡ［２２］を変化させる異なるスキニー・モードをも含む、と理解されるべきである。流れは、ブロック１５０４で終了する。
【００８２】
次に図１６を参照すると、キャッシュ・メモリ１６０２を示すブロック図が図示されている。キャッシュ・メモリ１６０２は、図１のキャッシュ・メモリ１０２に関して多くの点で類似している。図１６のキャッシュ・メモリ１６０２は、有利には、割り当てモード入力１６０８によって指定された異なる割り当てモードに、動作時に動的に構成され得る。割り当てモード１６０８は、下記でより詳しく説明されているように、キャッシュ・メモリ１６０２がその中に割り当てることになるメモリ・アドレス１０４のインデックスによって選択されたセットのウェイのサブセットを判定するメモリ・アドレス１０４のタグの１つ又は複数のビットの異なる機能を選択する。
【００８３】
図１の実施形態と同様に、図１６の実施形態において、メモリ・アドレス１０４は、３つの部分、つまり、タグ部分１６１２、インデックス部分１６１４、及びオフセット部分１６１６に分解されるが、その際に、わずかに異なるビットを使用する。わかりやすくするため、図１６には、サイズが３６ビットである例示的なメモリ・アドレス１０４が示されており、これらの３６ビットは、タグ１６１２＝ＭＡ［３５：１７］、インデックス１６１４＝ＭＡ［１６：６］、及びオフセット１６１６＝ＭＡ［５：０］として分解される。しかしながら、アドレス・タグのビットに基づく動的ウェイ選択の実施形態は、異なる数のビットを有し、そのタグ１６１２、インデックス１６１４、及びオフセット１６１６部分において異なる数のビットに分解される、メモリ・アドレス１０４を受け取るキャッシュ・メモリ上で実行され得る、ということが理解されるべきである。図１及び１６の図示されている例の間の別の相違点は、図１６のキャッシュ・メモリ１６０２のエントリに記憶されているタグ１６０６が１９ビットである点である。
【００８４】
次に図１７を参照すると、図１６のタグ１６１２及び割り当てモード１６０８に基づきキャッシュ・メモリ１０２がその中に割り当てるウェイのサブセットを選択するロジック１７０２を示すブロック図が図示されている。ロジック１７０２は、タグ１６１２のビット（たとえば、１９）を受け取るマルチプレクサ１７３６を含み、割り当てモード１６０８に基づきＮを１又はそれ以上として図１７においてＮビット１７３８と表されているタグ１６１２ビットのうちの１つ又は複数を選択する。ロジック１７０２は、割り当てモード１６０８に基づき複数の機能のうちの１つの機能を選択し、次いで、マルチプレクサ１７３６によって出力されるＮビット１７３８に対して選択された機能を実行し、キャッシュ・メモリ１０２の割り当てロジックがその中に割り当てるウェイのサブセット１７３４を表示するベクトルを生成する組合せロジック１７３２も含み、これは図１８に関して下記で説明されているとおりである。
【００８５】
選択されたタグ１６１２ビット及び選択されたＮビット１７３８に対して実行される機能の例は下記のとおりである。一例において、サブセットはメモリ・アドレス１０４の所定のビットによって、選択されたセットの８個の奇数番号のウェイか、又は選択されたセットの８個の偶数番号のウェイのいずれかとなるように指定される。一例では、所定のビットは、タグ１６１２の最下位ビットである。他の例では、所定のビットは、他の方法を使用して生成される。たとえば、所定のビットは、タグ１６１２の複数のビットのブール排他的ＯＲ（ＸＯＲ）として生成され得る。これは、上記で説明されているように、キャッシュ・ラインが同じセット内に異常にエイリアスを生じている場合に特に有利であり得る。ブール和、ブール積、ブール否定、又はそれらの様々な並べ替えなど、ＸＯＲ以外の機能も、タグ１１２の複数のビットを単一のビットに凝縮するために使用され得る。第２の例では、タグ１６１２の２つ又はそれ以上のビットが、割り当てモード１６０８によって指定されたビットの数だけ回転され、その結果、その中にキャッシュ・ラインが割り当てられ得るウェイを全ウェイのサブセットに、たとえば、Ｎビット１７３８がそれぞれ２、３、又は４の場合に、１６から４に、１６から２に、又は１６から１に制限する。それに加えて、Ｎビット１７３８が２、３、又は４の場合に、Ｎビット１７３８のそれぞれは、タグ１６１２の同じ若しくは異なるビットのブール関数によって別々に生成され得る。特定の実施形態が説明されているけれども、マルチプレクサ１７３６によって選択されるタグ１６１２の数及び特定のビットについて他の実施形態も企図され、またウェイのサブセット１７３４を選択するために、選択されたＮビット１７３８に対して実行される特定の機能１７３２について他の実施形態も企図される、ということが理解されるべきである。
【００８６】
次に図１８を参照すると、図１６のキャッシュ・メモリ１６０２の動作を示す流れ図が図示されている。流れは、ブロック１８０２から始まる。
【００８７】
ブロック１８０２において、割り当てモード１６０８が現在の割り当てモードを表示している間に、キャッシュ・メモリ１６０２は、処理コアからロード要求を受け取る。ロード要求は、図１６のメモリ・アドレス１０４を含む。流れは、ブロック１８０４に進む。
【００８８】
ブロック１８０４において、キャッシュ・メモリ１６０２は、インデックス１６１４を使用して、図１８においてセットＪと称されている、単一のセットを選択する。流れは、ブロック１８０６に進む。
【００８９】
ブロック１８０６において、キャッシュ・メモリ１６０２は、選択されたセットＪのすべての１６個のウェイにおける各エントリについて、メモリ・アドレス１０４タグ１６１２をエントリ・タグ１６０６と比較する。この比較では、エントリが有効かどうかもチェックする。流れは、判定ブロック１８０８に進む。
【００９０】
判定ブロック１８０８において、キャッシュ・メモリ１６０２は、ブロック１８０６において実行された比較の結果有効マッチが得られたかどうかを判定する。そうであれば、流れはブロック１８１２に進み、そうでなければ、流れはブロック１８１４に進む。
【００９１】
ブロック１８１２において、キャッシュ・メモリ１６０２は、ヒットを表示する。流れは、ブロック１８１２で終了する。
【００９２】
ブロック１８１４において、図１７のロジック１７０２は、割り当てモード１６０８によって指定された機能１７３２及び割り当てモード１６０８によって指定されたタグ１６１２の１つ又は複数のビットに基づきブロック１８０４において選択されたセットのウェイのサブセット１７３４を判定する。流れは、ブロック１８１６に進む。
【００９３】
ブロック１８１６において、キャッシュ・メモリ１６０２は、ブロック１８１４において判定されたウェイのサブセット内にある選択されたセットＪにおけるいずれか１つのウェイの中に割り当てる。好ましくは、キャッシュ・メモリ１６０２は、最低使用頻度（ＬＲＵ）又は疑似ＬＲＵであったサブセット内のウェイの中に割り当てるが、ランダム又はラウンドロビンなどの他の置換アルゴリズムも採用され得る。流れは、ブロック１８１６で終了する。
【００９４】
次に図１９を参照すると、図１６のキャッシュ・メモリ１６０２を備えるプロセッサを含むシステムの動作を示す流れ図が図示されている。流れは、ブロック１９０２から始まる。
【００９５】
ブロック１９０２において、プロセッサは、現在の割り当てモード１６０８で動作している間にキャッシュ・メモリ１０２の有効性（たとえば、１番最近の所定の期間にわたるキャッシュ・メモリ１０２のヒット率）を監視する。流れは、判定ブロック１９０４に進む。
【００９６】
判定ブロック１９０４において、プロセッサは、キャッシュ・メモリ１０２の有効性が閾値より低いかどうかを判定する。そうであれば、流れはブロック１９０６に進み、そうでなければ、流れは終了する。好ましくは、閾値は、たとえば、システム・ソフトウェアによってプログラム可能である。
【００９７】
ブロック１９０６において、プロセッサは、キャッシュ・メモリ１０２の割り当てモード１６０８を現在の割り当てモードと異なる新しい割り当てモードに更新する。一実施形態において、プロセッサのマイクロコードは、キャッシュ・メモリ１０２の割り当てモード１６０８を更新する。好ましくは、プロセッサ（たとえば、マイクロコード）は、モードに関係なく高いミス率になりやすいプログラム及び／又はデータ・セットの場合などにおいて、割り当てモード間のスラッシングを回避するために、このようにして行われる割り当てモード１６０８への更新を追跡する。一実施形態において、割り当てモードはすべて、必要に応じて試みられる。他の実施形態では、割り当てモードのサブセットが試みられる。有利には、異なる割り当てモード１６０８の間の遷移に関連付けられているライトバック無効化ペナルティはない。流れは、ブロック１９０６からブロック１９０２に戻る。
【００９８】
キャッシュ・メモリのファット・モード、スキニー・モード、タグ置換ビットの機能による割り当てなどの、本明細書で説明されている様々な様式によるキャッシュ・メモリ・モードの構成は、静的構成、動的構成、又はその両方のいずれかによるものとしてよい。一般的に言えば、静的構成はプレシリコン（pre-silicon）である。すなわち、設計者は、好ましくはプロセッサ設計のソフトウェア・シミュレーションの助けを借りた上で、直観を用いて、良好な構成、すなわち、一般的にプロセッサ、及び特にキャッシュ・メモリの性能を潜在的に改善する構成を判定する。プロセッサの性能を改善することは、プロセッサがプログラムを実行する速度を改善する（たとえば、命令率当たりのクロック数を減らすか、又はクロック速度当たりの命令数を増やす）ことであり、及び／又は電力消費量を低減する。プログラムは、オペレーティング・システム、実行可能プログラム（たとえば、アプリケーション、ユーティリティ、ベンチマーク）、ダイナミック・リンク・ライブラリ、及び同様のものであってよい。ソフトウェア・シミュレーションは、図２０から２２に関して、たとえば、特にキャッシュ・メモリ・モード構成に関して、下記で説明されているように、プロセッサの性能を改善することが望ましいプログラムの実行のオフライン解析を実行するために採用され得る。好ましくは、設計者は、全体としてプログラムのセットにわたって良好である傾向を有する静的構成を判定する。次いで、設計者は、シリコンに製造される設計に良好な静的構成を取り込む。
【００９９】
対照的に、動的構成を判定する解析は、一般的に言えば、ポストシリコン（post-silicon）で実行される。すなわち、プロセッサが製造された後に、設計者は、異なる種類のオフライン解析を実行して、シリコンに製造された静的構成又はデフォルトの構成と異なる構成でプログラムを実行したときにプロセッサがどのように機能するかを判定する。ポストシリコン試験（post-silicon  testing）は、たとえば、図２３に関して下記で説明されているように、構成マトリックス（configuration  matrix）に対する自動化された性能回帰が実行され、次いで回帰性能データが解析される、より厳密な、たぶんより力ずくの技術を伴い得る。設計者は、たとえば、最大値ではない極大値を回避することを試みるために、ポストシリコン試験への初期シードとして、プログラムの事前設定（population）のためのプレシリコン試験の結果を採用することができる。
【０１００】
試験がプレシリコンであるか、ポストシリコンであるかに関係なく、動的構成試験により、プログラムごとに、さらにはプログラム・フェーズごとであっても、良好な構成が判定される。次いで、システム、たとえば、デバイス・ドライバが、知られているプログラムがプロセッサ上で稼働していることを検出したときに（たとえば、解析が実行されていて、良好な構成が知られているプログラム）、システムは、良好なプログラム特有の構成をプロセッサに提供し、プロセッサは、プロセッサが稼働している間に動的な方式でプログラム特有の構成によってキャッシュ・メモリのモードを更新する。好ましくは、プログラム特有の構成は、プログラムの異なるフェーズに対する異なる構成を含み、プロセッサは、たとえば、図２２に関して説明されているように、フェーズ変化を検出し、フェーズ特有の構成に応答して、構成を動的に更新する。
【０１０１】
プログラム・フェーズは、与えられた特性のセットに関して、それらの特性の間の一致する挙動によって特徴付けられるコンピュータ・プログラムのサブセットである。たとえば、関連する特性が、分岐予測率及びキャッシュ・ヒット率であると仮定すると、プログラムのフェーズは、分岐予測率及びキャッシュ・ヒット率が一貫しているプログラムのランタイム挙動のサブセットである。たとえば、オフライン解析では、特定のデータ圧縮プログラムが２つのフェーズ、辞書構築フェーズと辞書探索フェーズを有すると判定することができる。辞書構築フェーズは、比較的低い分岐予測率及び比較的高いキャッシュ・ヒット率を有し、これはより大きい文字列のセットに共通の部分文字列のセットを作成することと一致するが、辞書探索フェーズは、比較的高い分岐予測率及び比較的低いキャッシュ・ヒット率を有し、これはキャッシュのサイズよりも大きい辞書内の部分文字列を探索することと一致する。
【０１０２】
一実施形態において、オフライン解析は、その名が意味するように、未来を知る「オラクル・キャッシュ」という概念を使用して実行される。限られた量の空間がキャッシュ・メモリ内に与えられたとすると、オラクル・キャッシュは、任意の時点においてキャッシュ内にあるべき最も有用なデータを知る。これは、最高のヒット率を生み出すキャッシュの内容のサイクルごとの又は命令ごとのスナップショットとして概念化され得る。
【０１０３】
第一に、プログラム実行に対するオラクル・キャッシュ・スナップショットのシーケンスを生成し、スナップショット内の各キャッシュ・ラインの割り当てを生成したメモリ・アクセスを追跡する。次いで、プログラムのその後の実行インスタンスにおいて、プロセッサは、スナップショットからの情報を使用してキャッシュ・モードを継続的に更新する。
【０１０４】
クロック・サイクル又は命令の粒度でキャッシュ・モードを更新するのが実用的でない場合、たとえば、プログラム若しくはフェーズのシーケンスから平均を取ることによって、かなり長い持続時間にわたる、たとえば、プログラム又はプログラム・フェーズ全体にわたる傾向を調べる。
【０１０５】
大まかに言って、オラクル・キャッシュの考え方は、メモリ・アクセスのすべてを予め知っているので、メモリ・アクセスのすべてを事前実行することができるという点にある。次いで、プログラムが実行すると、オラクル・キャッシュは、所定の時点においてキャッシュ内にあるキャッシュ・ラインの最良のセットを予測する。たとえば、図２１のグラフでは、オラクル・キャッシュは、短い持続時間のキャッシュ・ライン（実線で示されている一番上から２番目のライン）が、その最後のアクセス以降にキャッシュされるべきでないことを予測する。そのような解析を使用することで、キャッシュ・モードに関する観察結果を導く。
【０１０６】
次に図２０を参照すると、プログラム及びプログラム・フェーズに対するキャッシュ・メモリ・モード構成の生成を示す流れ図が図示されている。流れは、ブロック３４０２から始まる。
【０１０７】
ブロック３４０２において、設計者は、好ましくは自動化方式で、プログラムを実行し、プログラムによって行われるキャッシュ・メモリ、たとえば、１０２、１６０２へのメモリ・アクセスを記録する。好ましくは、キャッシュ・ラインの割り当て、ヒット、及び追い出しが記録される。メモリ・アクセスのメモリ・アドレス及び時間（たとえば、相対的クロック・サイクル）が記録される。流れは、ブロック３４０４に進む。
【０１０８】
ブロック３４０４において、設計者は、好ましくは自動化方式で、規則正しい時間間隔でブロック３４０２において記録された情報を解析し、たとえば図２２に関して下記で説明されているように、プログラムをいくつかのフェーズに分離する明確な傾向を認識する。たとえば、作業セット・サイズ、平均キャッシュ・ライン寿命、平均ヒット率における明確な傾向が認識され得る。流れは、ブロック３４０６に進む。
【０１０９】
ブロック３４０６において、設計者は、好ましくは自動化方式で、ブロック３４０４で実行された解析に基づき異なるプログラム・フェーズに対する構成を作成する。たとえば、構成は、キャッシュ・メモリ・モードであってよい。一実施形態において、構成を判定するための解析は、図２１から２３に関して下記で説明されているのと類似する解析を含み得る。いくつかのプログラムは明確な傾向を示さない可能性があり、そのためにそれらが区別できるいくつかのフェーズに分解されることに影響を受けやすく、その場合、プログラム全体に対して単一の構成で十分であり得る、ということが理解されるべきである。流れは、ブロック３４０６で終了する。
【０１１０】
次に図２１を参照すると、メモリ・アクセス・グラフ及びグラフから抽出されたデータが図示されている。グラフは、ドットで表示される、メモリ・アクセスをプロットしたものであり、そこでは時間は水平軸上に示されている独立変数であり、メモリ・アドレスは、垂直軸上に示されている従属変数である。水平線は、指定されたメモリ・アドレスにおける個別のキャッシュ・ラインに対応する。直線の左縁は、キャッシュ・ラインの割り当てを表し、直線の右縁は、キャッシュ・メモリからのキャッシュ・ラインの追い出しを表す。
【０１１１】
グラフの下に、８つの異なる規則正しい時間間隔の各々における、全作業セット・サイズが示されている。時間間隔は、たとえば、図２２に関して下記で説明されているように、基本的なブロック転送に相関し、プログラム・フェーズの各々に対するプログラムのフェーズ及び構成を判定するために使用され得る。
【０１１２】
それに加えて、平均キャッシュ・ライン寿命など、どれだけ長くキャッシュ・ラインが有用である傾向を有するかに関する観察が行われ得る。平均キャッシュ・ライン寿命は、フェーズにわたるすべてのキャッシュ・ラインの寿命（割り当てから追い出しまで）の総和をキャッシュ・ラインの数で割ったものとして計算される。この情報は、キャッシュ・メモリの動作モードに影響を与えるために使用され得る。
【０１１３】
オラクル・キャッシュが、キャッシュされたラインの数をキャッシュ・メモリ内に含まれるセット及びウェイの意図された数に対応するように制約する場合、キャッシュ・モード及び平均寿命の観察の精度は高まり得る。キャッシュ・ライン・ヒットなど他のインジケータも、収集され得る。
【０１１４】
次に図２２を参照すると、プログラムのフェーズ解析を示す流れ図が図示されている。フェーズ解析は、キャッシュ・メモリ又はプリフェッチャなどの、プロセッサの構成可能な態様の良好な構成を判定するために使用され得るオフライン解析の一形態である。流れは、ブロック３６０２から始まる。
【０１１５】
ブロック３６０２において、プログラムを実行するときにプロセッサによる性能を改善することが望ましいプログラムが解析され、分解されて状態図を生成する。状態図のノードは、プログラムの基本ブロックである。基本ブロックは、プログラム制御命令（たとえば、分岐、ジャンプ、呼び出し、戻りなど）の間の命令のシーケンスである。状態図の各エッジは、エッジが至るターゲットの基本ブロック及び状態変化情報であり、これは、下記でさらに説明されているように、フェーズ識別子となり得る。フェーズ識別子は、制御転送命令の命令ポインタ（ＩＰ）又はプログラム・カウンタ（ＰＣ）、制御転送命令のターゲット・アドレス、及び／又は制御転送命令の呼び出しスタックを含み得る。呼び出しスタックは、呼び出しの戻りアドレス及びパラメータを含み得る。プログラム・フェーズは、１つ又は複数の基本ブロックを備えるプログラムの部分である。流れは、ブロック３６０４に進む。
【０１１６】
ブロック３６０４において、プログラムは機器に備え付けられて、キャッシュ・メモリ構成モードなどのプロセッサの構成可能な態様に関係する特性が解析される。特性の例は、キャッシュ・ヒット率、分岐予測精度、作業セット・サイズ、平均キャッシュ・ライン寿命、及びキャッシュ汚染度（たとえば、プリフェッチされたが、決して使用されていないキャッシュ・ラインの数）を含む。流れは、ブロック３６０６に進む。
【０１１７】
ブロック３６０６において、プログラムは、たとえばキャッシュ・メモリ及び／又はプリフェッチャの与えられた構成で実行され、プログラムのフェーズは、ブロック３６０４の解析された特性において定常状態の挙動を観察することによって識別される。たとえば、キャッシュ・ヒット率が、注目する解析された特性であると仮定し、またキャッシュ・ヒット率が９７％から４０％に変化すると仮定する。キャッシュ・ヒット率の変化は、キャッシュ・メモリ構成が変化の前にプログラムに対して良好であったが、変化後にはプログラムに対して良好でなかったことを表示する傾向を有する。したがって、キャッシュ・ヒット率の変化の前の基本ブロックのシーケンスは、１つのフェーズとして識別され、キャッシュ・ヒット率の変化の後の基本ブロックのシーケンスは、第２のフェーズとして識別され得る。別の例について、作業セット・サイズが、注目する解析された特性であると仮定すると、作業セット・サイズにおける著しく大きいシフトは、フェーズ変化を識別するためのプログラム内の望ましい配置を示すことができる。流れは、ブロック３６０８に進む。
【０１１８】
ブロック３６０８において、フェーズが識別された後、良好な構成又は構成値が、各フェーズについて判定される。たとえば、図２０及び２１に関して上記で、又は図２３に関して下記で、説明されている方法などの、様々なオフライン解析技術が使用され得る。流れは、ブロック３６１２に進む。
【０１１９】
ブロック３６１２において、フェーズ識別子は、フェーズ変化に相関する。解析された特性における変化が生じた、上記で説明されている基本ブロック遷移の状態変化情報、又は潜在的フェーズ識別子は、プログラムに対してブロック３６０８において判定された良好な構成値とともに記録され、したがって、情報は、たとえば、デバイス・ドライバによって、解析されたプログラムが稼働しようとしていることが検出されたときにプロセッサに提供され得る。流れは、ブロック３６１４に進む。
【０１２０】
ブロック３６１４において、解析されたプログラムに関連付けられている情報を受け取った後、プロセッサは、図１４Ａから１４Ｃに関して上記で説明されているように、フェーズ検出器１４１４に図１４Ｂのフェーズ識別子１４１２をロードする。流れは、ブロック３６１４で終了する。
【０１２１】
次に図２３を参照すると、プロセッサの構成可能な態様、たとえば、キャッシュ・メモリ、プリフェッチャに対する良好な構成を判定する力ずくの方法を示す流れ図が図示されている。説明されている方法は、“座標降下（coordinate  descent）”最適化アルゴリズムの態様を採用する。流れは、ブロック３７０２から始まる。
【０１２２】
ブロック３７０２において、各プログラム、又はプログラム・フェーズについて、プロセッサの性能を改善することが望ましいと識別されたプログラムのリストにおいて、この方法は、良好な構成が判定されるか（たとえば、最良の現在の構成−下記参照−が比較的長い時間にわたって変化していない）、又はリソースが尽きてしまう（たとえば、時間及び／又は計算リソース）までブロック３７０４から３７１６までを繰り返す。流れは、ブロック３７０４に進む。
【０１２３】
ブロック３７０４において、現在の最良の構成は、デフォルトの構成、たとえば、キャッシュ・メモリのデフォルト・モードに設定され、これは、一実施形態において、単純に、プロセッサが製造される際の構成である。流れは、ブロック３７０６に進む。
【０１２４】
ブロック３７０６において、各構成パラメータについて、ブロック３７０８から３７１２が実行される。構成パラメータの一例は、単一の構成ビット、たとえば、機能をオン又はオフにするビットである。構成パラメータの別の例は、構成フィールド、たとえば、モード１０８である。流れは、ブロック３７０８に進む。
【０１２５】
ブロック３７０８において、ブロック３７０６の構成パラメータの値の妥当なセットの各値について、ブロック３７１２から３７１６を実行する。構成パラメータの値の妥当なセットは、構成パラメータのサイズ、みなされたパラメータの重要度、及び値を繰り返すために必要なリソースの量に依存する。たとえば、単一の構成ビットの場合、両方の値は妥当なセット内にある。たとえば、この方法は、１６個又はそれ以下の値を有するあらゆるパラメータについて可能なすべての値を試し得る。しかしながら、比較的大きいフィールド、たとえば、３２ビット・フィールドについては、２＾３２個すべての可能な値を試すことが不可能であり得る。この場合、設計者は、値の妥当なセットを方法に与えることができる。設計者が、値を供給せず、可能性の数が大きい場合、この方法は、パラメータの妥当な数のランダム値でブロック３７１２から３７１６を繰り返すことができる。流れは、ブロック３７１２に進む。
【０１２６】
ブロック３７１２において、プログラム、又はプログラム・フェーズは、現在の最良の構成で実行されるが、ブロック３７０８ごとにパラメータの次の値で修正され、性能が測定される。流れは、判定ブロック３７１４に進む。
【０１２７】
判定ブロック３７１４において、この方法はブロック３７１２において測定された性能を現在の最良の性能と比較し、前者が良好であれば、流れはブロック３７１６に進み、そうでなければ、流れはブロック３７１２に戻り、妥当なすべての値が試みられるまで現在のパラメータの次の値を試し、その場合、流れはブロック３７０８に戻り、すべての構成パラメータが試されるまで次の構成パラメータを繰り返し、その場合、この方法は終了し、プログラム、又はプログラム・フェーズに対する現在の最良の構成をもたらす。
【０１２８】
ブロック３７１６において、この方法は、現在の最良の構成をブロック３７１２において試された構成で更新する。流れはブロック３７１２に戻り、妥当なすべての値が試みられるまで現在のパラメータの次の値を試し、その場合、流れはブロック３７０８に戻り、すべての構成パラメータが試されるまで次の構成パラメータを繰り返し、その場合、この方法は終了し、プログラム、又はプログラム・フェーズに対する現在の最良の構成をもたらす。
【０１２９】
図２３の方法と類似する方法を使用して見つけた良好な構成は、どのような理由で特定の構成が良好な結果をもたらしたかについて設計者によって理解され得ず、また理解される必要がないことに留意されたい。
【０１３０】
次に図２４を参照すると、プロセッサ３９００を示すブロック図が図示されている。プロセッサ３９００は、命令キャッシュ３９２２を含み、命令キャッシュ３９２２は命令デコーダ３９２３に命令を送り、命令デコーダ３９２３は、命令を復号し、復号された命令を命令ディスパッチャ３９２４に送り、命令ディスパッチャ３９２４は、実行のため実行ユニット３９２６に命令をディスパッチする。好ましくは、プロセッサ３９００のマイクロアーキテクチャは、スーパースカラー及びアウト・オブ・オーダー実行であるが、他の実施形態も企図され、命令ディスパッチャ３９２４は、スーパースカラー・アウト・オブ・オーダー方式で複数の実行ユニット３９２６への命令のディスパッチをスケジュールするための命令スケジューラも含む。好ましくは、プロセッサ３９００は、プロセッサ３９００のアーキテクチャ状態を保持するアーキテクチャ・レジスタ（図示せず）、さらには非アーキテクチャ・レジスタ（図示せず）も含む。好ましくは、プロセッサ３９００は、レジスタ・リネーミングを実行するために使用されるレジスタ・エイリアス・テーブル（ＲＡＴ）（図示せず）及びプログラム順序で命令をリタイアさせるために使用されるリオーダー・バッファ（ＲＯＢ）（図示せず）も含む。好ましくは、命令ディスパッチャは、アーキテクチャ命令を実行ユニット３９２６によって実行可能なプロセッサ３９００のマイクロ命令セット・アーキテクチャのマイクロ命令に翻訳する命令翻訳器（図示せず）を含む。
【０１３１】
プロセッサ３９００は、メモリ・オペランドを実行ユニット３９２６に送り、実行ユニット３９２６からメモリ・オペランドを受け取るメモリ・サブシステム３９２８も含む。メモリ・サブシステム３９２８は、好ましくは、１つ又は複数のロード・ユニットと、１つ又は複数のストア・ユニットと、ロード・キューと、ストア・キューと、メモリからのキャッシュ・ラインを要求するためのフィル・キューと、プロセッサ３９００が通信しているメモリ・バスのスヌーピングに関係するスヌープ・キューと、テーブルウォーク・エンジンと、他の関係する機能ユニットとを含む。
【０１３２】
プロセッサ３９００は、メモリ・サブシステム３９２８と通信するキャッシュ・メモリ１０２も含む。好ましくは、キャッシュ・メモリ１０２は、図１（及び図１６の１６０２）に関して説明されているキャッシュ・メモリに類似している。単一のキャッシュ・メモリ１０２が図示されているけれども、キャッシュ・メモリ１０２は、レベル１（Ｌ１）命令キャッシュ、Ｌ１データ・キャッシュ、及びＬ１キャッシュをバックするユニファイド・レベル２（Ｌ２）キャッシュなどの、キャッシュ・メモリの階層を含むより大きいキャッシュ・メモリ・サブシステムのうちの１つであってよい。一実施形態において、キャッシュ・サブシステムは、レベル３（Ｌ３）キャッシュも含む。プロセッサ３９００は、メモリからデータをキャッシュ・メモリ１０２内にプリフェッチする１つ又は複数のプリフェッチャも含み得る。一実施形態において、プロセッサ３９００は、マルチコア・プロセッサであり、コアの各々は上記で説明されている機能ユニットを有し、その中でキャッシュ・メモリ１０２はコアによって共有される。
【０１３３】
メモリ・サブシステム３９２８は、図１から２３の実施形態において説明されているようなキャッシュ・メモリ１０２のメモリ・アクセスを行う。メモリ・アクセスは、アクセスされるべきメモリ配置のメモリ・アドレス１０４を含む。
【０１３４】
実施形態は、キャッシュ・メモリの多数のポート及びバンクの特定の構成を用いて説明されているけれども、異なる数のポートがキャッシュ・メモリに含まれる、また異なる数のバンクが含まれる、さらには非バンク構成の、他の実施形態も企図される、ということが理解されるべきである。本開示では、請求項も含めて、２＾Ｎという表記は、２の指数Ｎ乗であることを意味する。
【０１３５】
本明細書では本発明の様々な実施形態が説明されているけれども、それらは、例として提示されており、限定することを意図していない、ということが理解されるべきである。関連するコンピュータ分野の当業者にとっては、本発明の範囲から逸脱することなく形態及び詳細の様々な変更が行われ得ることは明白であろう。たとえば、ソフトウェアは、たとえば、本明細書で説明されている装置及び方法の機能、加工、モデリング、シミュレーション、記述及び／又は試験を有効にすることができる。これは、一般的なプログラミング言語（たとえば、Ｃ、Ｃ＋＋）、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬなどを含むハードウェア記述言語（ＨＤＬ）、又は他の利用可能なプログラムを使用することで遂行され得る。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク又は光ディスク（たとえば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、ネットワーク、有線、ワイヤレス、又は他の通信媒体などの、知られているコンピュータ使用可能媒体内に配設され得る。本明細書で説明されている装置及び方法の実施形態は、プロセッサ・コアなどの半導体知的財産コアに含まれ（たとえば、ＨＤＬで具現化されるか、又は指定される）、集積回路の生産においてハードウェアに変換され得る。それに加えて、本明細書で説明されている装置及び方法は、ハードウェアとソフトウェアとの組合せとして具現化され得る。したがって、本発明は、本明細書で説明されている例示的な実施形態により限定されるのではなく、添付の請求項及びその等価物によってのみ定義されるべきである。特に、本発明は、汎用コンピュータにおいて使用され得るプロセッサ・デバイス内に実装され得る。最後に、当業者であれば、添付の請求項によって定義される本発明の範囲から逸脱することなく、本発明の同じ目的を実行するために、他の構造を設計又は修正する基礎として開示されている概念及び特定の実施形態を容易に使用することができる、ということを理解するであろう。
【図１】
2017507442.tif 000003
【図２】
2017507442.tif 000004
【図３】
2017507442.tif 000005
【図４】
2017507442.tif 000006
【図５】
2017507442.tif 000007
【図６】
2017507442.tif 000008
【図７】
2017507442.tif 000009
【図８】
2017507442.tif 000010
【図９】
2017507442.tif 000011
【図１０】
2017507442.tif 000012
【図１１】
2017507442.tif 000013
【図１２Ａ】
2017507442.tif 000014
【図１２Ｂ】
2017507442.tif 000015
【図１３】
2017507442.tif 000016
【図１４Ａ】
2017507442.tif 000017
【図１４Ｂ】
2017507442.tif 000018
【図１４Ｃ】
2017507442.tif 000019
【図１５】
2017507442.tif 000020
【図１６】
2017507442.tif 000021
【図１７】
2017507442.tif 000022
【図１８】
2017507442.tif 000023
【図１９】
2017507442.tif 000024
【図２０】
2017507442.tif 000025
【図２１】
2017507442.tif 000026
【図２２】
2017507442.tif 000027
【図２３】
2017507442.tif 000028
【図２４】
2017507442.tif 000029
【国際調査報告】
2017507442.tif 000030
2017507442.tif 000031