(58)【調査した分野】(Int.Cl.,DB名)
前記メモリ・アクセスと関連付けられた前記MATが、前記パーセルに含まれる前記選択セットの前記N個のウェイの前記サブセット内に割り当てるために前記割当ユニットで使用される前記置換スキームへの入力になる、請求項2に記載のセット・アソシエイティブ・キャッシュ・メモリ。
前記複数のパーセルのうちの少なくとも1つのパーセルと関連付けられた前記置換スキームが、前記複数のパーセルのうちの他のものと関連付けられた前記置換スキームとは異なる、請求項1に記載のセット・アソシエイティブ・キャッシュ・メモリ。
前記複数のパーセルの前記パーセル指定子が、前記キャッシュ・メモリの動作中に動的に更新可能である、請求項1に記載のセット・アソシエイティブ・キャッシュ・メモリ。
M個のセット×N個のウェイとして構成された記憶要素のアレイと、セット・アソシエイティブ・キャッシュ・メモリ内で失敗するメモリ・アクセスに応じて前記アレイの前記記憶要素を割り当てる割当ユニットであって、前記メモリ・アクセスのそれぞれが前記M個のセットのうちの1つのセットを選択する前記割当ユニットとを有する、前記キャッシュ・メモリを動作させる方法であって、
複数のパーセルのパーセルごとにパーセル指定子を格納するステップであって、前記パーセル指定子が、
前記パーセルに含まれる前記N個のウェイのうちのウェイのサブセットを指定し、選択セットと関連付けられたパーセルのウェイの前記サブセットが互いに排他的であり、また
複数の既定の置換スキームの中から、前記パーセルと関連付けられた置換スキームを指定する、ステップと、
前記メモリ・アクセスのメモリ・アクセスごとに、
前記メモリ・アクセスに応じて前記複数のパーセルのうちの1つのパーセルの前記パーセル指定子を選択するステップと、
前記パーセルと関連付けられた前記置換スキームを使用して、前記パーセルに含まれる前記選択セットの前記N個のウェイのうちのウェイの前記サブセット内に割り当てるステップと
を含む、方法。
前記メモリ・アクセスと関連付けられた前記MATが、前記パーセルに含まれる前記選択セットのN個のウェイの前記サブセット内に割り当てるために前記割当ユニットで使用される前記置換スキームへの入力になる、請求項11に記載の方法。
【発明を実施するための形態】
【0005】
ここで
図1を参照すると、セット・アソシエイティブ・キャッシュ・メモリ102を図示するブロック図が示されている。キャッシュ・メモリ102は、記憶要素112のアレイ104を含む。アレイ104は、複数のウェイとして構成される。
図1の例では、アレイ104には、0から15で参照される16個のウェイがある。アレイ104はまた、複数のセットとして構成される。キャッシュ・メモリ102は、メモリ・アクセス122を受け取る。メモリ・アクセス122は、メモリ・アドレス及びメモリ・アクセス・タイプ(MAT)101を含む。キャッシュ・メモリ102は、
図39に関して下記で説明されるプロセッサ3900などのプロセッサに含まれる。
【0006】
メモリ・アクセス・タイプ(MAT)とはメモリ・アクセスの特性であり、これはメモリ・アクセスを生成させた命令の特性、又はメモリ・アクセスを生成したプロセッサの機能ユニットのタイプ、又はメモリ・アクセスが生成されたときのプロセッサの動作モード、又はメモリ・アクセスによってアクセスされるデータ・タイプのいずれかから得られる。
【0007】
命令によって指定される動作は、たとえば命令の特性である。たとえば、ロードユニット、記憶ユニット、整数演算ユニット、浮動小数点演算ユニット、媒体ユニット、テーブルウォーク・エンジン、命令フェッチユニット、及びハードウェア・プリフェッチャ(たとえば命令プリフェッチャ、ストリーム・プリフェッチャ、ボックス・プリフェッチャ、L1Dプリフェッチャ)は、プロセッサの機能ユニットの種類である。たとえば、監視プログラム・モード(又は特権的モード、又はx86リング0)、システム管理モード(たとえばx86 System Management Mode(SMM))、プロテクト・モード(たとえばx86 Real Mode、Virtual x86モード、Protectedモード、Longモード)、及び仮想機械モード(たとえばx86 Virtual Machine eXtensions(VMX))は、プロセッサの動作モードである。たとえば、コード、記述子テーブル(たとえば、x86命令セット・アーキテクチャ・グローバル記述子テーブル(GDT)及び割込み記述子テーブル(IDT))、ページ・テーブル、システム管理モード(たとえばx86 SMM)状態保管空間、仮想機械モード(たとえばx86 VMX)状態保管空間、スタック、圧縮データ、定数、浮動小数点、暗号鍵、暗号ペイロード、及び連結リストは、アクセスされるデータ・タイプである。
【0008】
命令フェッチユニットによって生成されるメモリ・アクセスは、コード・フェッチと呼ばれることがあり、ハードウェア命令プリフェッチャによって生成されるメモリ・アクセスは、コード・プリフェッチと呼ばれることがある。
【0010】
一実施形態では、命令は、プロセッサの命令翻訳プログラムによって生成されたマイクロ命令を含み、この命令翻訳プログラムは、アーキテクチャの命令(たとえばx86命令セット・アーキテクチャ命令)をマイクロ命令に翻訳する。
【0011】
メモリ・アクセス122の一部分のメモリ・アドレス(インデックス)は、セットのうちの1つを選択する。セットのそれぞれは、割当ユニット106に供給されたヒット信号124の偽値によって表示されるようにメモリ・アクセス122がキャッシュ・メモリ102内で失敗するときに、選択セットのウェイのうちのどのウェイを置換するか、又はどのウェイ内に割り当てるかを判定するために割当ユニット106によって使用される、置換情報114、又は置換ポリシー・ビット114、又は置換ビット114を保持するための記憶装置を含む。割当ユニット106は、置換すべきウェイを置換ウェイ・インジケータ116で表示する。異なる実施形態では、置換ビット114は、数の異なるビットとすること、及び異なる情報を表示することができる。たとえば、一実施形態では、置換ビット114は15ビットであり、これはセットの疑似最低使用頻度(pLRU)ウェイを表示する。別の実施形態では、置換ビット114は、セットのウェイのどれが最後に置換されたかを示す1ホット・ベクトルである16ビットとなり、これはラウンドロビン置換ポリシー、又は置換スキームで使用することができる。別の実施形態では、置換ビット114は、セットの真LRUウェイを表示する。別の実施形態では、置換ビット114は、置換ビット114を更新するときに(マルチコア・プロセッサの)どのコアがキャッシュ・ラインを所有するかがさらに考慮に入れられる修正pLRU置換スキームで使用される。別の実施形態では、置換ビット114は、置換ビット114を更新するときにメモリ・アクセス122のMAT 101がさらに考慮に入れられる修正pLRU置換スキームで使用され、たとえばMAT 101が、たとえばオフライン解析によって、必要になる傾向が少ないことが知られているものである場合、置換スキームは置換ビット114を更新し、その結果、置換されたウェイが最高使用頻度位置ではなく中間のどこかに挿入されるようになる。
【0012】
アレイ104の各記憶要素112は、データのキャッシュ・ライン、キャッシュ・ラインのタグ、及びキャッシュ・ラインの状態(たとえばMESI状態)を保持する。各セットは、セットのウェイごとに(たとえば16番目のウェイに)記憶要素112を含む。一実施形態では、キャッシュ・ラインは64バイトのデータであるが、他の実施形態も企図される。上述のように、各セットは置換ビット114を含む。一実施形態では、アレイ104は、データ、タグ、状態及び置換ビット114のキャッシュ・ラインを保持する単一のアレイである。別の実施形態では、アレイ104は2つのアレイであり、これは第1のアレイがデータのキャッシュ・ラインを保持し(データ・アレイ)、第2のアレイがタグ、状態及び置換ビット114を保持する(タグ・アレイ)。別の実施形態では、タグ・アレイではなく第3のアレイ(置換アレイ)が置換ビット114を保持する。
【0013】
一実施形態では、割当ユニット106は、キャッシュ・メモリ102の1つ又は複数のタグ・パイプラインの一部である。タグ・パイプラインは、たとえば処理コアから(たとえば、処理コアのメモリ・サブシステム(たとえばロード/記憶キュー又は専用キャッシュ・メモリ)から)メモリ・アクセスを受け、アレイ104にアクセスしてメモリ・アクセスを実行し、たとえばアレイ104からデータを読み出す、又はアレイ104にデータを書き込む。好ましくは、タグ・パイプラインは、プロセッサのパイプライン・ステージに非常に似ているステージのパイプラインであり、そのそれぞれがメモリ・アクセスのサブ動作を実行し、たとえば、指定されたセット及びウェイを有するエントリを無効にする、アドレスの状態についてタグ・アレイに照会する、アドレスが存在しない場合に選択セットの置換ビットに基づいてどのウェイ内に割り当てるかを判定する、指定されたセット及びウェイの状態を更新する、アドレスが存在する場合にデータ・アレイからデータを読み出す要求を生成する、アドレスが存在する場合にデータ・アレイにデータを書き込む要求を生成する、などを行う。サブ動作が一緒になってメモリ・アクセスの完全動作を実現する。有利なことに、ステージのパイプラインを有することによって、割当ユニット106で一連のサブ動作を実行して、本明細書に記載されているような比較的複雑な置換スキームを必要な場合に実現することができる。好ましくは、パイプラインの後ステージの結果を逆に前ステージに転送する転送ネットワークが含まれる。
【0014】
キャッシュ・メモリ102はまた、ウェイ・サブセットに対するMATのマッピング108を含み、このマッピングは、メモリ・アクセス122がキャッシュ・メモリ102内で失敗するときに選択セットのウェイのうちのどのウェイ内に割り当てるかを判定するのに使用するために、割当ユニット106に供給される。一般に、割当ユニット106は、キャッシュ・メモリ102の無効ウェイ内に割り当てようとするが、割り当ては有効ウェイを置換しなければならないことが多く、したがって置換とも呼ばれる。より具体的には、複数のMATの各MATについてマッピング106は、MATをアレイ104のウェイのサブセットと関連付ける。サブセットはMATごとに異なり得るが、いくつかのMATは同じサブセットと関連付けることができる。メモリ・アクセス122がキャッシュ・メモリ102内で失敗するときに、割り当てユニット106は、メモリ・アクセス122のMAT 101と関連付けられたウェイのサブセット内に割り当てる。これにより、有利なことにキャッシュ・メモリ102は従来のキャッシュ・メモリよりもより効率的になり、たとえば高いヒット率を有することになり得る。従来の方法に従って割り当てる従来のキャッシュ・メモリでは、たとえば、割り当てを促進するメモリ・アクセスのMATを考慮に入れずに最低使用頻度(LRU)ウェイを割り当てる。具体的には、マッピング108は、より必要とされそうな他のキャッシュ・ラインよりも必要とされる可能性が小さいキャッシュ・ラインを置換する確率を高めるように適応させることができる。一実施形態では、有利なことにマッピング108は、キャッシュ・メモリ102の効率を高めるように適応させることが、特定の対象のプログラム又はプログラム・フェーズのオフライン解析を実行し、各MATと関連付けられたキャッシュ・メモリ102のウェイのサブセット又は「バジェット」を判定することによって可能であり、その結果、MAT 101を有するメモリ・アクセス122がキャッシュ・メモリ102内で失敗するときに、割当ユニット106は、MAT 101と関連付けられたサブセット内にある選択セットのウェイにだけ割り当てる。マッピング108は、更新入力126によって更新することができる。
【0015】
キャッシュ・メモリの多数の実施形態が、たとえば
図10、11、14、15、17、19、23及び25に関して本明細書で説明される。上記の長い説明の繰返しを避けるために、これらのキャッシュ・メモリは
図1のキャッシュ・メモリ102と多くの点で類似していること、及び
図1のキャッシュ・メモリ102との相違点が他の実施形態に関して説明されることを理解されたい。同様に、他の実施形態のキャッシュ・メモリを含むプロセッサは、
図1のキャッシュ・メモリ102を含む種類のプロセッサの記載と類似している。
【0016】
好ましくは、キャッシュ・メモリ102を含むプロセッサは、各コアがキャッシュ・メモリ102を共有するマルチコア・プロセッサである。しかし、単一コア実施形態もまた企図される。加えて、キャッシュ・メモリ102は、プロセッサのキャッシュ階層の任意のレベルにあり得る。しかし、好ましくは、キャッシュ・メモリ102は、プロセッサのラスト・レベル・キャッシュ(LLC)である。好ましくは、プロセッサは、命令デコーダに命令を供給する命令キャッシュを含み、命令デコーダは命令を復号し、復号された命令を命令ディスパッチャに供給し、命令ディスパッチャは実行のために、命令を実行ユニットにディスパッチする。好ましくは、プロセッサのマイクロアーキテクチャはスーパースカラ及びアウト・オブ・オーダ実行であるが、他の実施形態も企図され、その結果、命令ディスパッチャはまた、スーパースカラ・アウト・オブ・オーダ方式による複数の実行ユニットへの命令のディスパッチをスケジュールするための命令スケジューラも含むようになる。好ましくは、プロセッサはまた、プロセッサのアーキテクチャの状態を保持するアーキテクチャのレジスタ、並びに非アーキテクチャのレジスタを含む。好ましくは、プロセッサはまた、レジスタのリネームを実行するために使用されるレジスタ・エイリアス・テーブル(RAT)と、プログラム・オーダ内の命令をリタイアさせるために使用されるリオーダ・バッファ(ROB)とを含む。好ましくは、命令ディスパッチャは命令翻訳プログラムを含み、この翻訳プログラムはアーキテクチャの命令を、実行ユニットによって実行可能なプロセッサのマイクロ命令セット・アーキテクチャのマイクロ命令に翻訳する。プロセッサはまた、メモリ・サブシステムを含み、これはメモリ・オペランドを実行ユニットに提供し、実行ユニットからメモリ・オペランドを受け取る。メモリ・サブシステムは好ましくは、1つ又は複数のロードユニット、1つ又は複数の記憶ユニット、ロード・キュー、記憶キュー、メモリからのキャッシュ・ラインを要求するための充填キュー、プロセッサが通信するメモリ・バスのスヌーピングと関連付けられたスヌープ・キュー、及び他の関連する機能ユニットを含む。メモリ・サブシステムは、キャッシュ・メモリ102のメモリ・アクセス122を作成する。
【0017】
次に
図2を参照すると、一実施形態による
図1のキャッシュ・メモリ102のそれぞれのウェイのサブセットに対するMATのマッピング108が示されている。
図2の例示的なマッピング108は、表1に対応する32個のMATを例示の目的で含む。
図2の例のマッピング108は、下記に表2として転載されている。
【0019】
図2から一例を取ると、store_ntのMAT 101を有するメモリ・アクセス122がキャッシュ・メモリ102内で失敗するとき、割当ユニット106は、選択セットのうちのウェイ0、4、又は8にだけ、すなわちマッピング108がstore_nt MATと関連付けるサブセットのウェイにだけ割り当てる。別の例として、load_descrのMAT 101を有するメモリ・アクセス122がキャッシュ・メモリ102内で失敗するとき、割当ユニット106は、選択セットのうちのウェイ15にだけ、すなわちマッピング108がload_descr MATと関連付けるサブセットのウェイにだけ割り当てる。
【0020】
一例では、マッピング108は、16ビット・ベクトルのアレイを含む。ベクトルの各ビットは、キャッシュ・メモリ102の16個のウェイのそれぞれのウェイに対応し、好ましくは、ビットは、それぞれのウェイがサブセットに含まれる場合には1になり、それぞれのウェイがサブセットから除外される場合にはゼロになる。アレイは、MATごとに1つの32個のベクトルを含み、MAT番号でインデックス付けされる。しかし、マッピング108が別の形で具現化される、
図3及び
図6に関して説明される代替実施形態などの他の実施形態も企図される。
【0021】
図2(及び表2)は、特定のMATのセットと、それぞれのウェイのサブセットに対する特定のMATのマッピングとを示すが、この実施形態は、例示の目的で一例として提供されていること、並びにMATのセットが異なり、サブセットに対するMATのマッピングが異なる別の実施形態も企図されることを理解されたい。実際、一実施形態でマッピングは、プロセッサの動作時に動的に更新され(たとえば
図1の更新入力126によって)、これは
図7〜9に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づく。
【0022】
次に
図3を参照すると、
図1のキャッシュ・メモリ102の一部分をより詳細に示すブロック図が示されている。
図3の実施形態では、
図1のマッピング108は、32個のMATのそれぞれにベクトル304を含む。mux302が32個のベクトル304を受け取り、そのうちの1つを、メモリ・アクセス122のMATインジケータ101の値に基づいて選択し、選択されたベクトル304が
図1の割当ユニット106に供給される。割当ユニット106はまた、選択セット(すなわち、メモリ・アクセス122のメモリ・アドレスのインデックスによって選択されたキャッシュ・メモリ102のセット)の
図1の置換ビット114を受け取る。選択されたベクトル304及び置換ビット114に基づいて、割当ユニット106は
図1の置換ウェイ116を生成する。割当ユニット106はまた、置換ウェイ116の値に基づいて置換ビット114を更新する。たとえば、一実施形態では、置換ビット114は疑似LRU(pLRU)ベクトルであり、これは選択セットのウェイのうちの疑似最低使用頻度ウェイを表示する。別の例では、置換ビット114は、真LRUベクトル又はラウンド・ロビン・ベクトルである。
【0023】
一実施形態では、ベクトル304はビット・ベクトルであり、これはキャッシュ・メモリ102(たとえば16個のウェイ)のウェイごとにそれぞれのビットを含む。真ビットは、それぞれのウェイが関連MATのサブセットに含まれることを表示し、偽ビットは、それぞれのウェイがサブセットから除外されることを表示する。代替形態では、ベクトル304は置換ビット114についてブール演算する一対のマスクを含み、この置換ビットは、
図6に関して下記で説明されるpLRUベクトルである。
【0024】
代替実施形態では、キャッシュ・メモリ102は、より多くの数のMAT(たとえば32個)をより少数のMATグループ(たとえば4つ)にマッピングする論理回路を含むことができる。たとえば、
図3の実施形態では、MATグループ化論理回路(図示せず)がMAT 101を受け取ると共に、(MAT 101ではなく)mux 302への選択入力として供給されるMATグループ番号を出力する。MATグループ化論理回路は、32個のMATのそれぞれを4つのMATグループのうちの1つにマッピングする。MATグループ化論理回路は、マッピング108と共に更新可能である。マッピング108はベクトル304を(32個ではなく)4つだけ含み、mux 302は、4つのベクトル304のうちの1つを割当ユニットに供給するために選択する。この実施形態では、有利なことにハードウェアのコストを低減させることができる。MAT細分性の低減におけるトレードオフにより、許容可能な効率が特に、メモリ・アクセス諸特性が様々なMATに関して一緒にクランプする傾向があるプログラムについて得られる。MATグループ化論理回路は、本明細書に記載の様々な実施形態でハードウェアの必要量を低減させるために使用することができ、その低減は、
図10から
図22までの実施形態などの、グループを含む実施形態で倍増することができる。複数のMATをMATグループにマッピングする実施形態については、
図29から
図30に関して説明される。
【0025】
次に
図4を参照すると、
図1のキャッシュ・メモリ102を含むプロセッサの動作を示す流れ図が示されている。流れはブロック402から始まる。
【0026】
ブロック402で、プロセッサは、(たとえば表1の)複数のMATの各MATをキャッシュ・メモリ102のウェイのサブセットと関連付けるマッピング(たとえば
図2及び表2のマッピング)を受け取る。好ましくは、キャッシュ・メモリ102は、デフォルト・マッピング108で製造される。好ましくは、デフォルト・マッピング108は、多種多様のプログラムのために、又は少なくとも特定の対象と考えられるプログラムの集団のためにキャッシュ・メモリ102の効率的な動作を促進するように適応され、及び/又はキャッシュ・メモリ102を含むプロセッサ上で実行される可能性があるように適応される。流れはブロック404へ進む。
【0027】
ブロック404で、プロセッサは、
図1の更新入力126を介してブロック402で受け取られたマッピングを用いて、キャッシュ・メモリ102のマッピング108を更新する。好ましくは、マッピング108は、システム初期化時及び/又はオペレーティング・システムのブート時に、システム・ソフトウェア(たとえばBIOS又はオペレーティング・システム)によって更新される。さらに好ましくは、マッピング108は、
図7〜
図9に関して下記で説明されるように、プログラムベースで、及び/又はプログラム・フェーズベースで更新される。流れはブロック404で終わる。
【0028】
次に
図5を参照すると、
図1のキャッシュ・メモリ102の動作を示す流れ図が示されている。流れはブロック502から始まる。
【0029】
ブロック502で、キャッシュ・メモリ102は、キャッシュ・メモリ102内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスでアレイ104のセットを選択する。メモリ・アクセス122は、MAT 101を指定する。流れはブロック504へ進む。
【0030】
ブロック504で、キャッシュ・メモリ102は、選択セットのウェイ内に割り当てる。より具体的には、割当ユニット106は、マッピング108がメモリ・アクセス122のMAT 101と関連付ける、ウェイのサブセットのウェイのうちの1つの中に割り当てる。これについては、
図6に関してより詳細に下記で説明される。流れはブロック504で終わる。
【0031】
次に
図6を参照すると、一実施形態による
図5のブロック504の動作を示す流れ図が示されている。流れはブロック602から始まる。
【0032】
ブロック602で、割当ユニット106は、現在の置換ビット114、及びメモリ・アクセス122のMAT 101に基づいて置換ウェイ116を判定し、置換ビット114の新値を生成する。一実施形態では、割当ユニット106は、上記の
図3の実施形態に関して説明されたように、たとえばMAT 101によって選択されたベクトル304を使用して置換ウェイ116を判定し、置換ビット114の新値を生成する。一実施形態では、置換ビット114はpLRUベクトルであり、ベクトル304は、pLRUベクトル114とブールANDされて第1の結果を生成する第1の部分(AND_MASK)と、第1の結果とブールORされて第2の結果を生成する第2の部分(OR_MASK)とを含む。第2の結果を使用して置換ウェイ116を判定し、またpLRUベクトル114を更新するための新値を生成する。AND_MASK及びOR_MASKを使用することについては、ブロック606の説明の後で、より詳細に下記で説明される。流れはブロック604へ進む。
【0033】
ブロック604で、キャッシュ・メモリ102は、ブロック602で割当ユニット106によって表示された置換ウェイ116内に割り当てる。流れはブロック606へ進む。
【0034】
ブロック606で、キャッシュ・メモリ102は、置換ビット114をブロック602で生成された新値で更新する。流れはブロック606で終わる。
【0035】
一実施形態では、16ウェイ実施形態のpLRUスキームは、セット当たり15個のpLRU置換ビット114、置換ビット114からLRUウェイを復号するための論理回路、新しい割り当てに対し置換ビット114を更新するための論理回路、並びにヒットしたメモリ・アクセス122に対し置換ビット114を更新するための論理回路を含む。割り当てはキャッシュ・ヒットとは意味論的に異なるが、割り当て更新論理回路は実質上ヒット論理回路であり、LRUウェイがヒット・ウェイとして送り込まれる。
【0036】
置換ビット114は、本質的にバイナリツリーを記述する15ビット・ベクトルであり、各ビットが内部ノードであり(ノードの4つのレベルを完全に指定する)、各リーフがウェイである。たとえば、ビットがA〜Oでラベル付けされる場合、pLRUツリーは下記に示されるように定義することができる。
【0038】
pLRUベクトルからLRUウェイを判定するための論理では、ノード・ビットA〜Oによって指定された方向にpLRUツリーをウォークする。ルート・ノードAから始まるノード・ビットA〜Oの値は常に、LRUの「方向」を指し、ここで0は「左を指すこと」を意味し、1は「右を指すこと」を意味する。たとえば、
【0040】
の場合、LRUウェイは01(A=0、B=0、D=0、H=1)になる。
【0041】
この特別な場合では、LRUウェイは4つのビット、すなわちA、B、D及びHによってのみ判定されることに留意されたい。他のノードもまだあり、これらは有用な情報を記憶しているが、000000010000000の場合にはLRU判定に寄与しない。
【0042】
pLRUアレイがヒット又は割り当ての故に更新される必要がある場合、pLRUビットの次の状態が、現在の状態と指定ウェイの関数として計算される。更新は2ステップ処理である。第1に、最高使用頻度(MRU)位置に進められているウェイを指し示すpLRUノード・ビットA〜Oのうちの4つのノード・ビット{a、b、c、d}を判定する。第2に、pLRUノード・ビットA〜O内の各ノード・ビットXについて、Xが{a、b、c、d}内にあれば、そのノード・ビットは問題のウェイから遠くへ向くように更新される。
【0043】
たとえば、前の場合では、ウェイ05でヒットするロードは、ノード{A=>1、B=>0、E=>1、J=>0}を、4つのノード・ビットのそれぞれがウェイ05の反対の方向に向くように更新する。
【0044】
ブロック602に関して上述したベクトル304の第1の部分(AND_MASK)及び第2の部分(OR_MASK)の2つの部分を使用することについて、次により詳細に説明する。割り当てることが望まれるウェイのサブセットはウェイ{0、5、6、7}であると仮定する。まずウェイ・サブセットは、ここに示される樹形図に基づいてAND_MASK及びOR_MASKに変換される。
【0046】
ダッシュは、「ドントケア」であるビット位置を表す。その理由は、マスクがこれらのビット位置を不要にするからである。たとえば、ノード・ビットCはここでドントケアであり、その理由は、AND_MASKのノード・ビットAが0であり、これはLRUを判定する際に常に左分岐が辿られることを意味するからである。
【0047】
ヒット又は割り当てに対してLRUを更新することは、通常のpLRUの場合と同様に実行される。しかし、pLRUがLRU挙動に関して不完全であるので、ウェイの互いに排他的な2つのサブセットのpLRU更新は、置換ビット114を共有する性質により、互いに影響を及ぼす。しかしクロストークは、ほとんどの状況で許容可能であり得る。
【0048】
次に
図7を参照すると、
図1のキャッシュ・メモリ102を含むプロセッサが含まれるシステムの動作を示す流れ図が示されている。流れはブロック702から始まる。
【0049】
ブロック702で、デバイス・ドライバ(又はシステム・ソフトウェアの他の構成要素)は、プログラムが走っている(又は走ろうとしている、たとえばオペレーティング・システムの処理テーブルに表示された、走っているプログラムである)とともに、そのプログラムが、デバイス・ドライバによって知られているプログラムのリスト内にあるとの判定をし、このプログラムに対しては、たとえば
図1のマッピング108を更新するために、マッピング又は構成が存在する。たとえば、プロセッサ上で走るプログラムのオフライン解析が、キャッシュ・メモリ102の効率を改善するマッピングを判定するために(プロセッサのソフトウェア・シミュレーション、又は実際のプロセッサ部によって)実行されている。マッピングによる100%のヒット率は得られないが、マッピングはキャッシュ・メモリ102の効率を改善できることを理解されたい。さらに、一部のプログラムには、マッピングから利益を得るのに十分に有効なMATに対する傾向がないが、一部のプログラムの解析では、利用することができる、且つマッピングから利益を得ることができる傾向を示し得ることを理解されたい。流れはブロック704へ進む。
【0050】
ブロック704で、プロセッサは命令(たとえばモデル専用レジスタ(MSR)への書込み、たとえばx86 WRMSR命令)を実行し、この命令は、キャッシュ・メモリ102のマッピング108を、命令によって供給されるマッピングで更新するようにプロセッサに命令する。一実施形態では、マッピングはメモリ内にあり、マッピングの位置のメモリ・アドレスは命令によって供給される。好ましくは、命令はデバイス・ドライバ・コードの一部である。デバイス・ドライバはまた、プロセッサで使用できる情報を供給して、
図8に関して下記で説明されるような異なるフェーズのそれぞれをプログラムが入力したことを検出することができ、またデバイス・ドライバは、フェーズのそれぞれに異なるマッピングを供給することができる。命令に応じて、プロセッサはマッピング108を更新し、もしあれば、フェーズ検出器(
図8の804)に初期フェーズ識別子(
図8の802)をロードする。流れはブロック704で終わる。
【0051】
次に
図8を参照すると、
図1のキャッシュ・メモリ102を含むプロセッサの要素を示すブロック図が示されている。プロセッサはフェーズ検出器804を含み、これは走っているプログラムが新しいフェーズに入ったことを検出する。フェーズ検出器804は、この判定をフェーズ識別子802に基づいて行う。この識別子は、
図7に関して上述したデバイス・ドライバなどから検出器に供給される。フェーズ識別子802は、プログラムの命令の命令ポインタ(又はプログラム・カウンタ)値を含むことができる。命令はサブルーチン・コール命令とすることもでき、その場合フェーズ識別子802はまた、コール命令のターゲット命令の命令ポインタ(又はプログラム・カウンタ)値を含むこともできる。さらに、フェーズ識別子802はまた、コール命令の1つ又は複数のパラメータ値(たとえばリターン・アドレス、レジスタ値及び/又はスタック値)を含むこともできる。フェーズ検出器の一例は、指紋ユニットと呼ばれているが、米国特許出願第14/050,687号及び第14/050,757号に詳細に記載されており、これらは両方が2013年10月10日に出願され、両方が2013年9月20日出願の米国特許仮出願第61/880,620号の優先権を主張し、それぞれが参照により、その全体で本願にすべての目的のために組み込まれる。プロセッサはまた、マッピング更新ユニット806を含み、これは新しいフェーズが検出されたこと、及び新しいフェーズの識別子を受け取ったことをフェーズ検出器804から通知される。マッピング更新ユニット806はまた、マッピング情報をたとえば、
図7に関して上述したデバイス・ドライバから受け取る。マッピング更新ユニット806は、
図9に関して下記で説明されるように、キャッシュ・メモリ102内のマッピング108を更新する。一実施形態では、マッピング更新ユニット806は、フェーズ検出器804によって呼び出されるプロセッサのマイクロコードを備える。代替実施形態では、マッピング更新ユニット806は状態機械を備え、この状態機械は、新しいフェーズが検出されたというフェーズ検出器804からのインジケータと、新しいフェーズの識別子とを受け取る。フェーズ解析については、下記で
図36に関してより詳細に説明する。
【0052】
次に
図9を参照すると、
図1のキャッシュ・メモリ102を含む
図8のプロセッサの動作を示す流れ図が示されている。流れはブロック902から始まる。
【0053】
ブロック902で、
図8のフェーズ検出器804は、走っているプログラムが新しいフェーズに入ったことを検出する。新しいフェーズを検出したことに応じてフェーズ検出器804は、
図8のマッピング更新ユニット806に通知する。流れはブロック904へ進む。
【0054】
ブロック904で、マッピング更新ユニット806は、フェーズ検出器804から受け取った(たとえば
図7のブロック704でデバイス・ドライバから受け取った)新しいフェーズの識別子をマッピング情報808内で検索し、キャッシュ・メモリ102のマッピング108を、検索で見つかったマッピングで更新する。加えて、マッピング更新ユニット806はフェーズ検出器804を、必要に応じて新しいフェーズ識別子802で更新する。一実施形態では、次に探すべきフェーズが現在のフェーズによって決まり、したがって、フェーズ検出器804にロードされるべきフェーズ識別子802は、現在のフェーズによって異なり得る。流れはブロック906に進む。
【0055】
ブロック906で、プロセッサは走っているプログラムを実行し、キャッシュ・メモリ102へのメモリ・アクセスを生成し、これに応じてキャッシュ・メモリ102は、ブロック904で実行された更新マッピング108に基づいて、
図5及び
図6に関して説明されたウェイのサブセット内に割り当てる。流れはブロック906で終わる。
【0056】
本明細書で説明されるキャッシュ・メモリの実施形態は、特定の数のウェイ、セット、キャッシュ・ライン・サイズ、タグ・サイズ、状態プロトコルなどを有するが、数の異なるこれら構成物、又はキャッシュ・メモリの諸特性をキャッシュ・メモリが有する別の実施形態も企図されることを理解されたい。
【0057】
次に
図10を参照すると、セット・アソシエイティブ・キャッシュ・メモリ1002を示すブロック図が示されている。
図10のキャッシュ・メモリ1002は、多くの点で
図1のキャッシュ・メモリ102と類似しており、同様の番号が付けられた要素は類似している。しかし、
図10のキャッシュ・メモリ1002は、
図1のマッピング108とは異なるマッピング1008を含む。
図10のキャッシュ・メモリ1002に関して、各セットは、複数の互いに排他的なグループ1001(本明細書ではLグループと呼ばれる)のうちの1つに所属する。より具体的には、
図10のマッピング1008は、複数のMATの各MATについて、MATをアレイ104の複数のウェイのサブセットと関連付けるが、さらにLグループの各グループ1001についてもそうする。したがって、たとえば
図10のマッピング1008は実質上Lグループ1001のそれぞれについて、
図2のものと同様のマッピング108を含む。それゆえに、
図2のマッピング108は実質上MAT 101番号で一次元でインデックス付けされるのに対し、
図10のマッピング1008は実質上MAT 101番号とグループ1001番号の両方によって二次元でインデックス付けされる。
【0058】
図10の一例では、セットの4つのグループがあり、これらはセット0から511までを含むグループ0 1001−0、セット512から1023までを含むグループ1 1001−1、セット1024から1535までを含むグループ2 1001−2、セット1536から2047までを含むグループ3 1001−3と表示される。したがって、マッピング1008は4つのグループ1001のそれぞれについて、各MATをアレイ104の16個のウェイのサブセットと関連付ける。つまり、
図10のマッピング1008はMATをウェイのサブセットにマッピングするだけでなく、
図1の実施形態のような全キャッシュ・メモリ102ベースよりむしろ、セット・グループ・ベースでもそのようにする。その結果、割当ユニット106は、マッピング1008によって指定されたウェイのサブセット内に割り当てることになり、これにはメモリ・アクセス122のMATと、選択セットが所属するグループ1001との両方が考慮に入れられる。
【0059】
これはキャッシュ・メモリ1002の特定のセット・グループ内の特定のMATと関連付けられたメモリ・アクセスをクランプさせる傾向があるプログラムでは、特に有利になり得る。たとえば、MATがスタック動作と関連しているメモリ・アクセスが、キャッシュ・メモリ1002の最初の数個のセットのまわりでクランプする傾向がある所与のプログラムを仮定する。この場合マッピング1008は、より多数のウェイを、キャッシュ・メモリ1002の最初の数個のセットを含むグループ内の、スタック動作と関連したMATと関連付けられたサブセット内に含み得る。こうした傾向はプログラム及びプログラム・スレッドのオフライン解析で観察することができ、また効率的なマッピングをこれらのプログラム及びプログラム・スレッドに対して判定し、キャッシュ・メモリ1002に提供して、プログラムが走っているときにキャッシュ・メモリ1002の効率を高めるようにマッピング1008を更新することが、
図7〜9に関して上述した方法と同様にしてできる。
【0060】
例示的な実施形態が特定の数のグループ(たとえば
図10の4つ)について説明されるが、グループ1001の数は大きくも(又は小さくも)できることを理解されたい。トレードオフは、グループの数が大きければ大きいほど、マッピング1008のサイズが大きくなることである。一実施形態では、グループの細分性が非常に高く、キャッシュ・メモリ1002の各セットにまで細かくなる。
【0061】
次に
図11を参照すると、
図10のキャッシュ・メモリ1002の一部分をより詳細に示すブロック図が示されている。
図10のキャッシュ・メモリ1002の部分は、多くの点で
図3のものと類似している。しかし、このキャッシュ・メモリはまた、メモリ・アクセス122をグループ1001にマッピングするグループ選択論理回路1106を含む。より具体的には、グループ選択論理回路1106は、メモリ・アクセス122(すなわちより具体的にはメモリ・アドレスのインデックス)を受け取り、それに応じてセット・グループ番号1104を生成する。このセット・グループ番号は、メモリ・アクセス122のインデックスによって選択されたセットを含むグループ1001の番号を指定する。セット・グループ番号1104は選択入力としてmux 1102に供給され、muxは、セット・グループ(たとえば
図11の例では4つ)すべてのベクトル304を受け取り(すなわち
図3のものと同様に、MATごとに1つ)、セット・グループ番号1104で指定されたグループ1001と関連付けられたベクトル304を選択してmux 302に供給する。mux 302は、32個の選択ベクトル304のうちの1つのベクトル304を選択して割当ユニット106に供給する。割当ユニット106は、置換ウェイ116を選択ベクトル304及び選択セットの置換ビット114に基づいて、
図3に関して上述した方法と同様にして生成する。割当ユニット106はまた、置換ビット114を置換ウェイ116の値に基づいて、
図3に関して上述した方法と同様にして更新する。
【0062】
次に
図12を参照すると、
図10のキャッシュ・メモリ1002を含むプロセッサの動作を示す流れ図が示されている。流れはブロック1202から始まる。
【0063】
ブロック1202で、プロセッサはキャッシュ・メモリ1002のL個のセット・グループ1001ごとに(たとえば表1の)複数のMATの各MATをキャッシュ・メモリ1002のウェイのサブセットと関連付けるマッピングを受け取る。MATによっては、セットのすべてのウェイを含むようにサブセットを指定することが望ましい場合がある。流れ図はブロック1204へ進む。
【0064】
ブロック1204で、プロセッサはキャッシュ・メモリ1002のマッピング1008を、
図10の更新入力126を介してブロック1202で受け取られたマッピングによって更新する。流れはブロック1204で終わる。
【0065】
次に
図13を参照すると、
図10のキャッシュ・メモリ1002の動作を示す流れ図が示されている。流れはブロック1302から始まる。
【0066】
ブロック1302で、キャッシュ・メモリ1002は、キャッシュ・メモリ1002内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスは、アレイ104のセットを選択する。メモリ・アクセス122はMAT 101を指定する。流れはブロック1304へ進む。
【0067】
ブロック1304で、キャッシュ・メモリ1002は選択セットのウェイ内に割り当てる。より具体的には、割当ユニット106は、選択セットが属するグループのマッピング1008がメモリ・アクセス122のMAT 101と関連付けるウェイのサブセットのウェイのうちの1つの中に割り当てる。好ましくは、割当ユニット106は、選択セットのウェイのすべてについて置換ビット114及び置換ポリシーを使用することにより、ウェイのサブセットのウェイのうちの1つを選択して割り当てる。たとえば、置換ポリシーがLRUである場合、割当ユニット106はサブセットのLRUウェイを選択する。好ましくは、割当ユニット106は、置換ウェイを最高使用頻度にすること、及び他のウェイをエージングすることによって置換ビット114を更新する。別の例では、置換ポリシーがpLRUである場合、割当ユニット106は、サブセットのうち適切なpLRUウェイを選択する。一実施形態では、割当ユニット106は、
図6のブロック602に関して説明された方法と同様の方法で置換ビット114を更新する。別の例では、置換ポリシーがラウンドロビンである場合、置換ユニット106はサブセットのウェイを選択し、このウェイは、サブセット内のウェイの数を法としたラウンドロビン・ポインタのウェイ番号であり、ラウンドロビン・ポインタを一度回転させる。別の例では、置換ポリシーがランダムである場合、割当ユニット106はサブセットのランダム・ウェイを選択する。流れはブロック1304で終わる。
【0068】
次に
図14を参照すると、代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ1402を示すブロック図が示されている。
図14のキャッシュ・メモリ1402は、多くの点で
図10のキャッシュ・メモリ1002と類似している。しかし、
図14のキャッシュ・メモリ1402のセットは、
図10のものとは異なるグループ化がされている。具体的には、
図10のグループ1001は、隣り合わせで番号付けされたセットを含むのに対し、
図14のグループ1401は、モジュラスによるセット番号のモジュロ演算の同じ結果をグループ番号が有するグループを含む。ここでモジュラスはグループの数である。
図14の例では、4つのグループ1401がある。グループ0 1401−0は、4を法とするセット番号が0であるすべてのセット、すなわち0、4、8、12など2044までを含み、グループ1 1401−1は、4を法とするセット番号が1であるすべてのセット、すなわち1、5、9、13など2045までを含み、グループ2 1401−2は、4を法とするセット番号が2であるすべてのセット、すなわち2、6、10、14など2046までを含み、グループ3 1401−3は、4を法とするセット番号が3であるすべてのセット、すなわち3、7、11、15など2047までを含む。
図14の実施形態は論理回路を含み、この論理回路は
図11に関して上述したものと、グループ選択論理回路1106が説明されたばかりの(すなわちグループの数であるモジュラスを使用してセット番号にモジュロ演算を行うことによって)グループ番号を生成すること以外は類似している。
図14の実施形態は、モジュラスとの相関関係を示す方法で特定のMATに関してメモリ・アクセスをクランプさせる傾向がある一部のプログラムでは、特に有利になり得る。
図14の実施形態は、バンクの数がグループの数に対応し、各バンクのセットがグループのセットに対応するバンク・キャッシュ・メモリの実施形態で相乗効果がある。
【0069】
好ましくは、グループ選択論理回路1106は更新可能であり、その結果この論理回路は、
図10のものなど連続するセット・グループ化に対して、又は
図14のものなどモジュラス・ベースのセット・グループ化に対して、又はセット番号のハッシュ、メモリ・アクセス122のメモリ・アドレスのタグ・ビットのハッシュ、もしくはこれらの組合せなどの別のグループ化スキームに対して、所望のマッピング1008を選択するためのセット・グループ番号1104を生成できるようになる。さらに好ましくは、グループ選択論理回路1106は、異なる数のグループをサポートするために更新される。グループ選択論理回路1106の更新は、
図12に関して説明されたように、マッピング1008が更新されたときに実行することができる。グループ選択論理回路1106のこの更新可能性により、多種多様なプログラム及びプログラム・フェーズに対してキャッシュ・メモリ1002/1402の効率を改善する値で、マッピング1008を更新する可能性を高めることができる。
【0070】
次に
図15を参照すると、代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ1502を示すブロック図が示されている。
図15のキャッシュ・メモリ1502は、多くの点で
図10のキャッシュ・メモリ1002と類似している。
図15のキャッシュ・メモリ1502は、セットの互いに排他的な複数のグループを指定するマッピング1508を含み、このグループは
図15の実施形態では、
図10の実施形態と類似の4つのグループ1501である(たとえば
図14のグループ化など、他のセット・グループ化も企図されるが)。しかし、
図15のマッピング1508はさらに、アレイ104の記憶要素112の複数のチャンク1503を指定する。一般的に言えば、アレイ104がN個のウェイ、及びL個の互いに排他的なグループ1501を有すると仮定すれば、チャンク1503はアレイ104の記憶要素112を包含し、これら記憶要素は、L個の互いに排他的なグループの1つと、アレイ104のN個のウェイのうちの1つ又は複数のウェイとの論理的交点になる。
図15の例では、11個の異なるチャンク1503が示されている。たとえば、チャンク2 1503−2は、グループ0 1501−0とウェイ6から9までにある記憶要素112であり、チャンク8 1503−8は、グループ2 1501−2とウェイ10から15までにある記憶要素112であり、チャンク11 1503−11は、グループ3 1501−3とウェイ7から12までにある記憶要素112である。
図15の実施形態では、すべての記憶要素112が、
図17の実施形態とは対照的にチャンク1503に含まれる。
図17の実施形態では、1つ又は複数のセット・グループに関して、より詳細に下記で説明されるように、グループのウェイの一部がチャンクの中にマッピングされない。
図20及び
図21に関して下記で説明されるものと類似しているマッピング構造体を使用して、
図22Dで観察できるように、チャンク1501を指定することができる。しかし、同じ置換スキームがセット全体にわたって使用され、すべての置換ビット114がセットのすべてのウェイに対し使用される場合、パーセル指定子2001は、置換ビット・ポインタ2012を含む必要がない。
【0071】
図15の実施形態の別の特徴は、マッピング1508がMATをチャンク1503と関連付けることである。より具体的には、所与のグループ1501では、マッピング1508がグループ1501のチャンク1503のどれとも関連付けないMATがいくつかあり得る。
【0072】
次に
図16を参照すると、
図15のキャッシュ・メモリ1502の動作を示す流れ図が示されている。流れはブロック1602から始まる。
【0073】
ブロック1602で、キャッシュ・メモリ1002は、キャッシュ・メモリ1502内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスは、アレイ104のセットを選択する。メモリ・アクセス122はMAT 101を指定する。流れはブロック1604へ進む。
【0074】
ブロック1604で、キャッシュ・メモリ1502は、マッピング1508がMAT 101を選択セットに交差したチャンク1503と関連付けるかどうかを判定する。流れは判定ブロック1606へ進む。
【0075】
判定ブロック1606では、ブロック1604においてキャッシュ・メモリ1502が、マッピング1508がMAT 101を選択セットに交差したチャンク1503と関連付けると判定した場合、流れがブロック1608へ進み、それ以外の場合はブロック1612へ進む。
【0076】
ブロック1608で、割当ユニット106は選択セットのウェイ内に割り当てる。より具体的には、割当ユニット106は、たとえば
図13のブロック1304に関して説明された選択セットに交差したチャンク1503のウェイ内に割り当てる。マッピング1508がMAT 101を、選択セットに交差した複数のチャンク1503と関連付ける場合、割当ユニット106は、交差チャンク1503のウェイの合併のウェイのいずれかの中に割り当てる。流れはブロック1608で終わる。
【0077】
ブロック1612で、割当ユニット106は、選択セットのウェイのいずれかの中に割り当てる。たとえば、置換ビット114は、全セット(すなわちすべてのセットのウェイ)に対するpLRU情報を保持するビットを含むことができ、割当ユニット106は、選択セットのpLRUウェイ内に割り当てることができ、或いは、割当ユニット106は、真LRU、ラウンドロビン若しくはランダム方式、又は置換スキームへの入力としてのMATに基づく優先度付けを含むなどの本明細書に記載の置換スキームの他のものにおいて、選択セット内に割り当てることができる。流れはブロック1612で終わる。
【0078】
下記の例示的なマッピングは、
図15及び
図16の実施形態の使用について説明するものである。下記の特徴を有するプログラムを考える。第1に、プログラムは非常にコール/リターンが重く、fused_store_update、store_push、store_update及びstore_update_nacの各MAT(一般的に言えば、スタック・アクセスと関連付けられたMATグループ)を有する多くのメモリ・アクセスを生成し、これらはキャッシュ・メモリ1902の上方の4番目にインデックス付けする傾向がある。第2に、MAT boxpf、fused_store_aps、load_aps、store_aps及びstore_nt_apsの各MAT(一般に、媒体データと関連付けられたMATグループ)によって生成されたメモリ・アクセスは、メモリ・トラフィックを支配する傾向がある。第3に、プログラムは、テーブルウォークMATメモリ・アクセスに対する専用ウェイを有することから利益を得る傾向があり、またキャッシュ・メモリ1902の下方の4番目にインデックス付けする傾向がある。オフライン解析では、プログラムがマッピング1008から利益を得ることを示すことができ、このマッピングは:キャッシュ・メモリ1902の最上部4番目を含む第1のセット・グループと交差し、媒体MATグループをウェイ0から13までに関連付けるチャンク0と、第1のセット・グループと交差し、スタックMATグループをウェイ0から13までに関連付けるチャンク1と、キャッシュ・メモリ1902の最下部4番目を含む第2のセット・グループと交差し、媒体データMATグループをウェイ0から14までに関連付けるチャンク2と、第2のセット・グループと交差し、スタック・アクセスMATグループをウェイ0から13までに関連付けるチャンク3とを作成する。この場合、キャッシュ・メモリ1902のセットの中間半分は、チャンクとマッピングされないままにされる。その理由は、媒体データ及び関連するboxpfプリフェッチが支配する傾向がある(またキャッシュ・メモリ1902の全ウェイを必要とする傾向がある)からである。またテーブルウォーク又はスタック・メモリ・アクセスをセットの中間半分から絶縁する必要がない。
【0079】
次に
図17を参照すると、代替実施形態によるセット・アソシエイティブ・キャッシュ・メモリ1702を示すブロック図が示されている。
図17のキャッシュ・メモリ1702は、多くの点で
図15のキャッシュ・メモリ1502と類似している。
図17のキャッシュ・メモリ1702はマッピング1708を含み、このマッピングは、グループ1701の一部ではマッピングがグループ1701のチャンク1703内の全ウェイを含むことができない、という点で
図15のマッピング1508とは異なる。つまり、グループ1701のチャンク1703のいずれにもマッピングされないウェイがいくつかあり得る。
図17の例では、グループ0 1701−0のウェイ0から1まで、グループ1 1701−1のウェイ0、及びグループ2 1701−2のウェイ0から2までが、マッピング1708によってチャンク1703にマッピングされない。
【0080】
次に
図18を参照すると、
図17のキャッシュ・メモリ1702の動作を示す流れ図が示されている。
図18は
図16と類似しており、同様の番号が付けられたブロックは類似している。しかし流れは、判定ブロック1606の「NO」出口から、
図16のようにブロック1612にではなく、ブロック1812へ進む。
【0081】
ブロック1812で、割当ユニット106は、たとえば
図13のブロック1304に関して説明された、選択セットのマッピングされていないいずれかのウェイ内に割り当てる。たとえば、選択セットがグループ2 1701−2に属する場合、割当ユニット106は、
図17の例ではマッピングされていないウェイ0から2までのうちの1つの中に割り当てる。流れはブロック1812で終わる。
【0082】
チャンクの細分性が変わる様々な実施形態が企図される。たとえば、
図10、14、15及び17の実施形態では、セットが互いに排他的な4つのグループにグループ分けされ、それによって、64個までのチャンクが可能になる(4グループのセット×16ウェイ)。しかし、より多い又は少ないチャンクを可能にするために、互いに排他的なグループの数が異なる他の実施形態も企図される。一実施形態では、各セットは、キャッシュ・メモリ内の各記憶要素(すなわちエントリ)をチャンクとすることができるように、それ自体互いに排他的なグループとすることができる。グループの数が大きければ大きいほど、より細分化されたキャッシュ・メモリを配分して、解析されるプログラムのニーズに対してキャッシュ・メモリを適応させることができるのに対し、グループの数が少なければ少ないほど、チャンク特性を記述するために必要な制御ビットが少なくなることに留意されたい。
【0083】
次に
図19を参照すると、セット・アソシエイティブ・キャッシュ・メモリ1902を示すブロック図が示されている。
図19のキャッシュ・メモリ1902は、多くの点で
図1のキャッシュ・メモリ102と類似しており、同様の番号が付けられた要素は類似している。しかし、
図19のキャッシュ・メモリ1902は、
図1のマッピング108とは異なるマッピング1908を含む。加えて、置換ビット1914は
図1の置換ビット114と異なる。
図19のマッピング1908及び置換ビット1914は、キャッシュ・メモリ1902がヘテロジニアス置換スキームを使用できるようにする。つまり、各セットはパーセルと呼ばれるウェイのサブセットを有し、各パーセルはそれ自体の置換スキームを有する。つまり、セットの各パーセルは、より詳細に下記で説明されるように、異なる数のウェイを含むことができ、セットの置換ビット1914の別の部分を使用することができ、またパーセル内でウェイを置換するための異なる置換スキームを使用することができる。たとえば、オフライン解析では、いくつかのプログラムがMATをパーセルにグループ分けし、次にこれらパーセルに対して別の置換スキームを使用することから利益を得られることを明らかにすることができる。
【0084】
図19には、例として、3つのパーセル1901がインデックス1500の選択セット内に示されている。パーセル0 1901−0はセットのウェイ0から4までを含み、パーセル1 1901−1はセット5から12までを含み、パーセル2 1901−2はセット13から15までを含む。置換ビット1914は、
図20に関してより詳細に説明されるように、パーセル1901のそれぞれで別々の部分を含む。一実施形態では、パーセル1901はキャッシュ・メモリ1902の全セットに対しグローバルである。すなわち、
図22Cに関して説明されるように、アレイ104のすべてのセットは同様にパーセル化される。この実施形態は、たとえば
図1の実施形態と互換性がある。別の実施形態では、パーセル1901がセットのグループと関連付けられる。すなわち、
図22Dに関して説明されるように、すべてのセット・グループ2291が同様にパーセル化される。この実施形態は、たとえば
図10から
図18までの実施形態と互換性がある。別の実施形態では、パーセル1901が個々のセットと関連付けられる。すなわち、
図22Eに関して説明されるように、すべてのセットがそれ自体のパーセルを有する。
【0085】
次に
図20を参照すると、一実施形態によるパーセル指定子2001及びパーセル指定子トリプレット2021を示すブロック図が示されている。パーセル指定子2001は、有効ビット2002、MATベクトル2004、ウェイ・ベクトル2006、置換スキーム2008、及び置換ビット・ポインタ2012を含む。有効ビット2002は、パーセル指定子2001が有効であるかどうかを表示する。選択セットに対するパーセル1901の数は、より詳細に下記で説明されるように、パーセル指定子トリプレット2021中の真有効ビット2002の数によって判定される。
【0086】
MATベクトル2004は、複数のMAT(たとえば表1の32個のMAT)の各MATに対応するビットを有する。MATベクトル2004中のセット・ビットは、対応するMATがパーセル1901と関連付けられることを表示する。代替実施形態では、パーセル指定子2001は、MATベクトル2004ではなくMATグループ・ベクトルを含む。MATグループ・ベクトルは、各MATグループ(たとえば4つのMATグループ)に対応するビットを有する。この実施形態では、マッピング1908は、たとえば
図29に関して説明されるような、MATグループ・マッピングに対するMATを含む。割当ユニット106は、メモリ・アクセス122のMAT 101をMATグループ・マッピングに対するMATへの入力として使用し、パーセルのパーセル指定子2001へのMATグループ出力を使用して割り当てる。MATグループ・ベクトルは、要求するビットがMATベクトル2004よりも少なくてよく、これはパーセル指定子2001の数が比較的大きい場合に特に有利である。
【0087】
ウェイ・ベクトル2006は、アレイ104のN個のウェイ(たとえば16個のウェイ)の各ウェイに対応するビットを有する。ウェイ・ベクトル2006中のセット・ビットは、対応するウェイがパーセル1901に含まれていることを表示する。つまり、ウェイ・ベクトル2006は、パーセル1901に含まれるウェイのサブセットを指定する。代替実施形態では、ウェイ・ベクトル2006は第1及び第2の部分を含み、これらの部分は、パーセル1901と関連付けられた置換ビット1914の部分とブール演算されて新しい値(たとえばpLRUベクトル)を生成し、この値を用いて、
図6の代替実施形態に関して上述した方法と同様に、置換ビット1914を更新する。この実施形態では、パーセル1901に含まれるウェイのサブセットは間接的に指定され、割当ユニット106は、含まれるウェイのサブセットをウェイ・ベクトル2006から導出する。別の代替実施形態では、パーセル指定子2001は、ウェイ・ベクトル2006ではなくウェイ・ポインタを含む。ウェイ・ポインタは、パーセル1901内の第1のウェイを指し示す。この実施形態では、パーセルに含まれるウェイはすべて隣接している。ポインタはまた、ウェイの数を指定することもでき、或いは、第1のパーセル1901はそのウェイ・ポインタ中のウェイ0を指定しなければならず、割当ユニット106はウェイの数を隣接するウェイ・ポインタの差として計算する。
【0088】
置換スキーム2008は、関連付けられたパーセル1901を置換するため、又はその中に割り当てるために使用される置換ポリシーを指定する。一実施形態では、異なる置換スキーム(たとえば真LRU、pLRU、ラウンドロビン、ランダム、MATによる優先度、MAT優先度を含む様々なハイブリッドなど)が番号付けされ、置換スキーム・フィールド2008は、置換スキームの符号化値を保持する。
【0089】
置換ビット・ポインタ2012は、関連付けられたパーセル1901用の置換ポリシー・ビットとして使用される置換ビット1914の部分を指定する。好ましくは、置換ビット・ポインタ2012は、関連付けられたパーセル1901用の置換ポリシー・ビットとして使用される置換ビット1914の部分の第1のビットを指し示す。パーセル1901に必要な置換ビット1914の数は、パーセル1901及びスキーム2008の中のウェイの数によって決まる。一実施形態では、ポインタ2012用のビットが含まれないが、その代わりに、有効パーセル1901の数、パーセル1901のウェイの数、及びスキーム2008から、すなわち所与のスキーム2008に必要なビットの数及びその関連付けられたウェイの数から、割当ユニット106によって計算される。
【0090】
単一のウェイを含むパーセル1901の場合では、置換ビット1914のどれもパーセル1901によって消費される必要がない。その理由は、パーセル1901の1つのウェイは常に置換されるからである。2つのウェイでありLRU置換スキーム2008を有するパーセル1901の場合では、たとえば、置換ビット1914の単一のビットを使用して2つのウェイのLRUウェイを表示することができる。或いは、MAT優先度に基づく置換スキーム2008を有する4つのウェイ・パーセル1901を仮定すると、たとえばMATベクトル2004は、5つの異なるMATをパーセルと関連付け、これらのMATのうちの2つ(たとえばload_supervisor及びstore_supervisor)は、他の3つのMATよりも優先度が高い。この場合、4つの置換ビット1914があり(パーセルのウェイの数と等しい)、置換ビット1914が真であれば、高い優先度load_supervisor又はstore_supervisorのMATによるメモリ・アクセスに応答してウェイが割り当てられたことを表示し、それ以外の場合置換ビット1914は偽であり、割当ユニット106は、ウェイを偽の置換ビット1914と置換しようとし、ウェイを真の置換ビット1914と置換することを回避しようとする。説明されたばかりの置換スキーム2008の拡張部は、パーセルごとに追加の置換ビット1914を有することになり、この置換ビットは、高い優先度のMATと関連付けられるウェイの中のLRUウェイを表示する。したがって、たとえば、パーセル1901の4つすべてのウェイが高い優先度のMATと関連付けられる場合、割当ユニット106は、パーセル1901のLRUに関連した置換ビット1914によって表示された4つのウェイのうちのLRUウェイ内に割り当てる。MATに関する優先度を組み込む他の置換スキームも企図される。別の置換スキーム2008はラウンドロビンを含み、そこで置換ビット1914の部分が、パーセル1901の中に割り当てられた最後のウェイを指定する。
【0091】
パーセル指定子トリプレット(PST)2021は3つのパーセル指定子2001を含み、パーセル指定子1 2001−1、パーセル指定子2 2001−2、及びパーセル指定子3 2001−3と表示される。PST 2021を有する
図20の実施形態では、セットごとのパーセル1901の数を3個に制限する。しかし、セットごとのパーセル1901(したがってパーセル指定子2001)の最大数が3個とは異なるが、しかし少なくとも2個である他の実施形態も企図される。パーセル1901がキャッシュ・メモリ1902のすべてのセットに対しグローバルである実施形態では(たとえば
図22C)、キャッシュ・メモリ1902用の単一のPST 2021がある。パーセル1901がセットのグループと関連付けられる実施形態では(たとえば
図22D)、セット・グループ2291ごとにPST 2021がある。パーセル1901が個々のセットと関連付けられる実施形態では(たとえば
図22E)、セットごとにPST 2021がある。
【0092】
次に
図21を参照すると、
図19のキャッシュ・メモリ1902の一部分をより詳細に示すブロック図が示されている。
図21は、パーセル1901がセットのグループと関連付けられる(たとえば
図22D)実施形態を示す。
図21の実施形態では、
図19のマッピング1908は、
図21にLで表示される複数のグループのそれぞれにPST 2021を含む。mux 302は、L個のPST 2021を受け取り、そのうちの1つを、割当ユニット106に供給するためにセット・グループ番号2104の値に基づいて選択する。セット・グループ番号は、メモリ・アクセス122に応答して、特にメモリ・アクセス122のインデックス部分に応答して、セット・グループ選択論理回路2106で生成される。メモリ・アクセス122のMATインジケータ101は、割当ユニット106に供給される。一実施形態では、割当ユニット106は、メモリ・アクセス122と関連付けられたパーセル1901をMAT 101及びPST 2021に基づいて選択する。しかし別の実施形態では、割当ユニット106は、メモリ・アクセス122と関連付けられたパーセル1901を、MAT 101を使用せずに、メモリ・アクセス122のメモリ・アドレス及びPST 2021に基づいて選択する。つまり、キャッシュ・メモリにおけるヘテロジニアス置換ポリシーの使用は、MATを受け取らないキャッシュ・メモリと共に使用することができる。割当ユニット106はまた、選択セットの
図19の置換ビット1914(すなわちメモリ・アクセス122のメモリ・アドレスのインデックスによって選択されたキャッシュ・メモリ102のセット)を受け取る。選択されたPST 2021と、パーセル指定子2001によって指定された置換ビット1914の部分とに基づいて、またいくつかの実施形態ではMAT 101にも基づいて、割当ユニット106は
図19の置換ウェイ116を生成する。割当ユニット106はまた、パーセル指定子2001によって指定された置換ビット1914の部分を置換ウェイ116の値に基づいて更新する。
【0093】
次に
図22Aを参照すると、
図19のキャッシュ・メモリ1902を含むプロセッサの動作を示す流れ図が示されている。流れはブロック2202から始まる。
【0094】
ブロック2202で、プロセッサは、
図20のパーセル指定子トリプレット2021を含むマッピングを受け取る。流れはブロック2204へ進む。
【0095】
ブロック2204で、プロセッサは、
図19の更新入力126を介してブロック2202で受け取られたマッピングにより、キャッシュ・メモリ1902のマッピング1908を更新する。流れはブロック2204で終わる。
【0096】
次に
図22Bを参照すると、一実施形態による
図19のキャッシュ・メモリ1902の動作を示す流れ図が示されている。流れはブロック2212から始まる。
【0097】
ブロック2212で、キャッシュ・メモリ1902は、キャッシュ・メモリ1902内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスは、アレイ104のセットを選択する。メモリ・アクセス122はMAT 101を指定する。メモリ・アクセス122のメモリ・アドレスはまた、選択セットと関連付けられたセット・グループを判定するためにも使用され、たとえばセット・グループ選択論理回路2106は、メモリ・アクセス122のメモリ・アドレスに応じて
図21のセット・グループ番号2104を生成する。グローバル・パーセル実施形態では(たとえば
図22C)、単一のPST 2021しかないので、PST 2021を選択する必要がない。セットごとのパーセルの実施形態では(たとえば
図22E)、セットの選択でまた、PST 2021を選択する。その理由は、PSTが選択セットと関連付けられているからである。流れはブロック2214へ進む。
【0098】
ブロック2214で、割当ユニット106は、メモリ・アクセス122がどのパーセル1901と関連付けられているかを判定し、その関連付けられているパーセル1901のパーセル指定子2001を選択する。
図21の実施形態では、割当ユニット106は選択されたPST 2021を調べ、どのパーセル指定子2001を選択すべきか判定する。割当ユニット106は、各パーセル指定子2001のMATベクトル2004を調べて、どれがMAT 101を指定しているかを判定する。割当ユニット106は、MAT 101を指定しているパーセル指定子2001を選択する。一実施形態では、MAT 101がいずれのパーセル指定子2001のMATベクトル2004によっても指定されていない場合に、割当ユニット106は、選択セットのウェイのいずれかの中に割り当てる。
【0099】
代替実施形態では、割当ユニット106は、メモリ・アクセス122のメモリ・アドレスからパーセル1901を判定することを、MAT 101を参照せず、その代わりにメモリ・アドレスを、割当ユニット106に供給されるメモリ・アドレスのセット又は範囲と比較することによって行う。一実施形態では、プロセッサのスラッシング検出器(たとえばブルーム・フィルタ)が、最近の追い出しに適合するキャッシュ・ライン割当を監視する。スラッシングは、たとえばプログラムが、大きいデータ構造に対してランダム・メモリ・アクセスを引き起こしているために起り得る。プログラムがこの挙動を示している場合、たとえばプログラムが、リンクされたリストを現在の置換スキーム(たとえばpLRU)のワーストケース・シナリオを作り出すようにしてメモリを通してトラバースする場合には、その挙動の時間的及び空間的局所性が乏しいことにより、キャッシュ・メモリ1902におけるヒット率が非常に低くなり得る。スラッシング検出器は、スラッシングが起きているメモリ・アドレスのセットを判定し、このメモリ・アドレスのセットを割当ユニット106に供給する。PST 2021は更新されて、そのメモリ・アドレスのセットと関連付けられた別のパーセル1901を作り出し、その結果、割当ユニット106は、スラッシング検出器によって指定されたメモリ・アドレスのセットに入るメモリ・アクセス122によって影響を受けるセット内に割り当てるための、ランダム置換スキームを使用するようになる。ランダム置換ポリシーに変えることは、メモリ・アクセスに対するキャッシュ・ヒット率に役立つことも役立たないこともあるが、しかし、新しい置換ポリシーに加えて、メモリ・アクセスに対しパーセル1901を指定することが、プログラムの残っているデータを不良挙動ランダム・アクセスから絶縁することによって、プログラム性能全体を改善し得る。
【0100】
別の実施形態では、たとえばバウンディング・ボックス・プリフェッチャなどのプロセッサのプリフェッチャ内のストリーミング・データ検出器は、キャッシュ・メモリ1902のウェイの小さいサブセットの中に隔離されるべき、及び/又は異なる置換スキームが有益であるはずの、メモリ・アドレスの範囲内のストリーミング・データ・メモリ・アクセス122を検出する。たとえばプログラムが、メモリ内の大きいデータ構造上で規則的に動作していると仮定する(たとえばプログラムは、オブジェクトの多次元アレイにわたって繰り返す入れ子ループから構成される)。この規則性は、アレイ及びキャッシュ・メモリ1902の相対的サイズ、及び/又は置換ポリシーによっては、メモリ階層に悪影響を及ぼし得る。データ構造中のオブジェクトが圧縮されている場合、且つキャッシュ・ラインが規則的な刻み幅でアクセスされる場合、キャッシュ・メモリ1902に対する効果は、データ構造の一部ではない潜在的に有用なデータをキックアウトしながら、実質的に使い捨てのデータでキャッシュ・メモリ1902を効果的に満たすことである。データは実際には使い捨てではないことがあるが、データ構造が、何度も同じセットにエイリアスするのに十分な大きさの場合(たとえばキャッシュ・メモリ1902のウェイの数である16よりも大きい)、データは同様に使い捨てにできることに留意されたい。その理由は、N番目のキャッシュ・ラインは、キャッシュ・メモリ1902がそのキャッシュ・ラインをキックアウトするように強制されてN+16番目のキャッシュ・ラインのための空間を作る前には、再びアクセスされることがありそうにないからである。この場合、プリフェッチャはこれらのストリームを識別し、キャッシュ・メモリ1902のウェイの小さいサブセットを有するパーセル1901にメモリ・アクセス122が隔離されるべきことをキャッシュ・メモリ1902に知らせる。メモリ・アクセス122は、プリフェッチャから割当ユニット106に供給されるメモリ・アドレスの範囲内のプリフェッチャによって生成されるプリフェッチである。新しい割り当てを隔離することに加えて(又は場合により、その代わりに)プリフェッチャは、割り当てが誘導される先のウェイのために別の置換ポリシー(たとえばラウンドロビン/FIFO又はランダム)を使用するようにキャッシュ・メモリ1902を誘導する。それに応じてPST 2021は更新されて、適切な置換スキームを有する必要なパーセル1901が作り出される。
【0101】
流れは、ブロック2214からブロック2216へ進む。
【0102】
ブロック2216で、割当ユニット106はブロック2214で選択されたパーセル指定子2001を使用して、パーセル1901と関連付けられたウェイのサブセット、置換スキーム及び置換ビット1914の部分を判定する。流れはブロック2218へ進む。
【0103】
ブロック2218で、割当ユニット106は関連付けられた置換スキーム及び置換ビット1914の部分を使用して、たとえば置換ウェイ116によって表示された、選択セットのパーセル1901と関連付けられたウェイのサブセット内に割り当てる。流れはブロック2222へ進む。
【0104】
ブロック2222で、割当ユニット106はブロック2218において割り当てがされたウェイに基づいて、パーセル1901と関連付けられた置換ビット1914の部分を更新する。流れはブロック2222で終わる。
【0105】
次に
図22Cを参照すると、ヘテロジニアス置換ポリシーを使用する
図19のキャッシュ・メモリ1902の実施形態を示すブロック図が示されている。
図22Cの実施形態では、パーセル1901はキャッシュ・メモリ1902のすべてのセットに対しグローバルである。すなわち、アレイ104のすべてのセットが同様に分割されている。
図22Cで、アレイ104のすべてのセットについて、ウェイ0から5までのサブセットが、下部から上部への斜線陰影付けで示されるようにパーセル0に含まれ、パーセル指定子0によって指定され、ウェイ6から9までのサブセットが、上部から下部への斜線陰影付けで示されるようにパーセル1に含まれ、パーセル指定子1によって指定され、またウェイ10から15までのサブセットが、網目状の陰影付けで示されるようにパーセル2に含まれ、パーセル指定子2によって指定される。
【0106】
次に
図22Dを参照すると、ヘテロジニアス置換ポリシーを使用する
図19のキャッシュ・メモリ1902の実施形態を示すブロック図が示されている。
図22Dの実施形態では、パーセル1901がセットのグループ2291と関連付けられる。すなわち、すべてのセット・グループ2291が同様に分割されている。
図22Dで、アレイ104のセット・グループ0 2291−0(セット0から511まで)では、ウェイ0から5までのサブセットがパーセルAに含まれ、パーセル指定子1によって指定され、ウェイ6から9までのサブセットがパーセルBに含まれ、パーセル指定子2によって指定され、またウェイ10から15までのサブセットがパーセルCに含まれ、パーセル指定子3によって指定される。アレイ104のセット・グループ1 2291−1(セット512から1023まで)では、ウェイ0から3までのサブセットがパーセルDに含まれ、パーセル指定子4によって指定され、ウェイ4から11までのサブセットがパーセルEに含まれ、パーセル指定子5によって指定され、またウェイ12から15までのサブセットがパーセルFに含まれ、パーセル指定子6によって指定される。アレイ104のセット・グループ2 2291−2(セット1024から1535まで)では、ウェイ0から9までのサブセットがパーセルGに含まれ、パーセル指定子7によって指定され、またウェイ10から15までのサブセットがパーセルHに含まれ、パーセル指定子8によって指定される。つまり、グループ2 2291−2は2つだけのパーセル1901を含む。アレイ104のセット・グループ3 2291−3(セット1536から2047まで)では、ウェイ0から15までのすべてがパーセルJに含まれ、パーセル指定子9によって指定される。つまり、グループ3 2291−3は1つだけのパーセル1901を含む。
【0107】
次に
図22Eを参照すると、ヘテロジニアス置換ポリシーを使用する
図19のキャッシュ・メモリ1902の実施形態を示すブロック図が示されている。
図22Eの実施形態では、パーセル1901は個々のセットと関連付けられている。すなわち、すべてのセットがそれ自体のパーセルを有する。
図22Eで、セット0では、ウェイ0から5までのサブセットがパーセルAに含まれ、パーセル指定子1によって指定され、ウェイ6から9までのサブセットがパーセルBに含まれ、パーセル指定子2によって指定され、またウェイ10から15までのサブセットがパーセルCに含まれ、パーセル指定子3によって指定される。アレイ104のセット1では、ウェイ0から3までのサブセットがパーセルDに含まれ、パーセル指定子4によって指定され、ウェイ4から11までのサブセットがパーセルEに含まれ、パーセル指定子5によって指定され、またウェイ12から15までのサブセットがパーセルFに含まれ、パーセル指定子6によって指定される。アレイ104のセット2では、ウェイ0から9までのサブセットがパーセルGに含まれ、パーセル指定子7によって指定され、またウェイ10から15までのサブセットがパーセルHに含まれ、パーセル指定子8によって指定される。アレイ104のセット2047では、ウェイ0から3までのサブセットがパーセルJに含まれ、パーセル指定子9によって指定され、ウェイ4から7までのサブセットがパーセルKに含まれ、パーセル指定子10によって指定され、またウェイ8から15までのサブセットがパーセルLに含まれ、パーセル指定子11によって指定される。図示のパーセル1901は代表的なものであり、簡潔にするためにアレイ104の全パーセル1901は示されていない。
【0108】
様々な傾向をプログラム及びプログラム・スレッドのオフライン解析によって観察することができ、また効果的なマッピングをこの傾向に対し判定し、キャッシュ・メモリ1902に供給して、
図7〜9に関する上述の方法と同様に、プログラムが走っているときにキャッシュ・メモリ1902の効率を高めるようにマッピング1908を更新することができる。
【0109】
次に
図23を参照すると、完全アソシエイティブ・キャッシュ・メモリ2302を示すブロック図が示されている。完全アソシエイティブ・キャッシュ・メモリ2302は、それぞれがインデックスを有する記憶要素112のアレイ104を含む。このインデックスは、
図23の例では0から511までであるが、記憶要素112の数が異なる他の実施形態も企図される。好ましくは、完全アソシエイティブ・キャッシュ・メモリ2302は、容認可能なタイミングを実現するための比較的小さいキャッシュ・メモリである。完全アソシエイティブ・キャッシュ・メモリ2302は、関連付けられたMAT 101を有するメモリ・アクセス122を受け取る。完全アソシエイティブ・キャッシュ・メモリ2302は、アレイ104からヒット表示124を受け取る割当ユニット106を含む。記憶要素112、メモリ・アクセス122、及び割当ユニット106は、注記がある場合を除き上述のものと類似している。アレイ104の各記憶要素112は、対応するMAT 2314を含み、これは記憶要素112の割り当てを促進するメモリ・アクセスのMATを指定する。
【0110】
完全アソシエイティブ・キャッシュ・メモリ2302はまた、割当ユニット106と通信する、各MATに1つが関連付けられたカウンタ2306を含む。各カウンタ2306は、アレイ104の有効エントリ(記憶要素112)の数のカウントを維持する。このアレイのMAT 2314は、カウンタ2306と関連付けられたMATである。
【0111】
完全アソシエイティブ・キャッシュ・メモリ2302はまた、割当ユニット106と通信する、各MATに1つが関連付けられた閾値2308を含む。各閾値2308は、閾値2308と関連付けられたMATを有するメモリ・アクセス122に割り当てられることができる、アレイ104の有効エントリの最大数を指定する。閾値2308は、前述の更新入力126と同様の更新入力126によって動的に更新可能である。閾値2308の一例が、
図24に関して下記で説明される。
【0112】
好ましくは、完全アソシエイティブ・キャッシュ・メモリ2302はまた、割当ユニット106と通信する、各MATに1つが関連付けられたポインタ2304を含む。一実施形態では、各ポインタ2304は、MATと関連付けられているアレイ104の有効エントリのうちの一番最近に置換されたもののインデックスを指定する。ポインタ2304は、MATのカウンタ2306がMATに対する閾値2308に達したときに、MATを有する有効エントリに対してラウンドロビン方式で割り当てるために使用される。別の実施形態では、各ポインタ2304は、MATと関連付けられているアレイ104の有効エントリのうちのLRU又はpLRUであるもののインデックスを指定する。ポインタ2304は、MATのカウンタ2306がMATに対する閾値2308に達したときに、MATを有する有効エントリに対してLRU又はpLRU方式で割り当てるために使用される。一実施形態では、MATの一部で1つの置換ポリシーのポインタ2304を使用することができ、それ以外のMATで別の置換ポリシーのポインタ2304を使用することができ、好ましくはどちらでも、オフライン解析で判定すると最も効率的である。ポインタ2304は、所望の置換ポリシーを表示する1つ又は複数のビットを含むことができる。
【0113】
割当ユニット106は、MAT 101、カウンタ2306、閾値2308及びポインタ2304に基づく置換インデックス2316を、完全アソシエイティブ・キャッシュ・メモリ2302内で失敗するメモリ・アクセス122に応じて生成する。置換インデックス2316は、より詳細に下記で説明されるように、割り当てがされるべき、又は置換されるべき記憶要素112のインデックスを指定する。
【0114】
次に、
図24を参照すると、一実施形態による
図23のそれぞれの閾値2308に対するMATのマッピングが示されている。
図24の例示的なマッピングは、表1に対応する32個のMATを説明の目的で含む。
図24の例のマッピングは、下記に表3として転載されている。
【0116】
図24(及び表3)は、特定のMATのセットと、それぞれの閾値に対する特定のMATのマッピングとを示すが、この実施形態は、一例として説明の目的で提供されていること、並びにMATのセットが異なると共に閾値に対するMATのマッピングが異なる別の実施形態も企図されることを理解されたい。実際、一実施形態でマッピングは、プロセッサの動作時に、
図7〜9に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づいて動的に更新される(たとえば
図1の更新入力126によって)。
【0117】
次に
図25を参照すると、
図1のキャッシュ・メモリ102の一部分をより詳細に示すブロック図が示されている。
図25の実施形態では、32個のMATそれぞれのポインタ2304と閾値2308の対がmux 302に供給され、このmuxは対の1つを、メモリ・アクセス122のMATインジケータ101の値に基づいて選択する。選択されたポインタ2304と閾値2308の対は、
図23の割当ユニット106に供給される。
【0118】
加えて、32個のMATそれぞれのカウンタ2306が第2のmux 2502に供給される。第2のmuxは、MAT 101の値に基づいてカウンタ2306の1つを選択する。選択されたポインタ2304、カウンタ2306及び閾値2308に基づいて、割当ユニット106は、
図23の置換インデックス2316を生成する。割当ユニット106はまた、たとえば、より詳細に下記で
図27及び
図30に関して説明されるように、
図23のMAT 2314、カウンタ2306及びポインタ2304を、置換インデックス2316の値に基づいて更新する。
【0119】
図3に関する前述の方法と同様に、代替実施形態では、キャッシュ・メモリ102は、下記で
図29及び
図30に関して説明されるように、より多くの数のMAT(たとえば32個)をより少数のMATグループ(たとえば2つ)にマッピングする論理回路を含むことができる。たとえば、
図25の実施形態では、MATグループ化論理回路(図示せず)がMAT 101を受け取ると共に、(MAT 101ではなく)mux 302及びmux 2502への選択入力として供給されるMATグループ番号を出力する。こうすると有利なことに、カウンタ2306、閾値2308及びポインタ2304の数を低減することによってハードウェアのコストを低減することができ、また各MAT 2314の記憶要素のサイズを低減することができる。
【0120】
次に
図26を参照すると、
図23のキャッシュ・メモリ2302を含むプロセッサの動作を示す流れ図が示されている。流れはブロック2602から始まる。
【0121】
ブロック2602で、プロセッサは(たとえば表1の)複数のMATの各MATを閾値に関連付けるマッピング(たとえば
図24及び表3のマッピング)を受け取る。好ましくは、キャッシュ・メモリ2302は、閾値2308がデフォルト・マッピングで製造される。好ましくは、閾値2308のデフォルト・マッピングは、多種多様のプログラムのために、又は少なくとも特定の対象と考えられるプログラムの集団のためにキャッシュ・メモリ2302の効率的な動作を促進するように適応され、及び/又はキャッシュ・メモリ2302を含むプロセッサ上で実行される可能性があるように適応される。流れはブロック2604へ進む。
【0122】
ブロック2604で、プロセッサは、
図23の更新入力126を介してブロック2602で受け取られたマッピングを用いて、キャッシュ・メモリ2302の閾値2308のマッピングを更新する。好ましくは、マッピング2308は、システム初期化時及び/又はオペレーティング・システムのブート時に、システム・ソフトウェア(たとえばBIOS又はオペレーティング・システム)によって更新される。さらに好ましくは、マッピング2308は、
図7〜
図9に関して前述のように、プログラムベースで、及び/又はプログラム・フェーズベースで更新される。流れはブロック2604で終わる。
【0123】
次に
図27を参照すると、
図23のキャッシュ・メモリ2302の動作を示す流れ図が示されている。流れはブロック2702から始まる。
【0124】
ブロック2702で、キャッシュ・メモリ2302は、キャッシュ・メモリ2302内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスでアレイ104のエントリ112を選択する。メモリ・アクセス122は、MAT 101を指定する。流れはブロック2704へ進む。
【0125】
ブロック2704で、割当ユニット106は、メモリ・アクセス122のMAT 101と関連付けられたカウンタ2306が、MAT 101と関連付けられた閾値2308に達したかどうかを判定する。流れは判定ブロック2706へ進む。
【0126】
判定ブロック2706で、メモリ・アクセス122のMAT 101と関連付けられたカウンタ2306が、MAT 101と関連付けられた閾値2308に達している場合、流れはブロック2708へ進み、それ以外の場合、流れはブロック2712へ進む。
【0127】
ブロック2708で、割当ユニット106はアレイ104の有効エントリ112を置換する。このアレイのMAT 2314は、メモリ・アクセス122のMAT 101と適合する。
図23に関して前述のように、置換されるべきエントリ112は、好ましくは、MAT 101と関連付けられたポインタ2304を使用して、様々な置換ポリシーによって選択することができる。流れはブロック2708で終わる。
【0128】
ブロック2712で、割当ユニット106はアレイ104のいずれかのエントリ112内に割り当てる。使用される置換ポリシーは、本明細書で説明されるもののいずれかでよい。一実施形態では、完全アソシエイティブ・キャッシュ・メモリ2302はグローバル・ポインタ(図示せず)を維持し、これはアレイ104の有効エントリのうち、MATに関係なく一番最近に置換されたもののインデックスを指し示す。好ましくは、割当ユニット106は次のエントリ112を、有効でないポインタ、又はメモリ・アクセス122のMAT 101を有さないポインタによって指し示されたものの後に見出す。流れはブロック2714へ進む。
【0129】
ブロック2714で、割当ユニット106はメモリ・アクセス122のMAT 101と関連付けられたカウンタ2306をインクリメントする。流れは判定ブロック2716へ進む。
【0130】
判定ブロック2716で、割当ユニット106は置換されたエントリ112が有効であったかどうかを判定する。そうであった場合、流れはブロック2718へ進み、それ以外の場合、流れは終わる。
【0131】
ブロック2718で、割当ユニット106は、置換エントリ112のMAT 2314と関連付けられたカウンタ2306をデクリメントする。流れはブロック2718で終わる。
【0132】
次に
図28を参照すると、
図23の完全アソシエイティブ・キャッシュ・メモリ2302の動作を示す流れ図が示されている。流れはブロック2802から始まる。
【0133】
ブロック2802で、完全アソシエイティブ・キャッシュ・メモリ2302はエントリ112を、たとえば完全アソシエイティブ・キャッシュ・メモリ2302からのキャッシュ・ラインの追い出しに応じて、又はスヌープに応じて無効にする。流れはブロック2804へ進む。
【0134】
ブロック2804で、完全アソシエイティブ・キャッシュ・メモリ2302は、無効化エントリ112のMAT 2314と関連付けられたカウンタ2306をデクリメントする。流れはブロック2804で終わる。
【0135】
次に
図29を参照すると、一実施形態による、MATグループ2909に対するMATのマッピング2908、及び閾値2911に対するMATグループ2909のマッピングを示すブロック図が示されている。
図29の例では、4つのMATグループがあり、MATグループ0、MATグループ1、MATグループ2及びMATグループ3で表示される。
図29の閾値2911は、32個のMATに関してではなく4つのMATグループ2909に関してであるが、
図23の閾値2308と類似している。
図29のMATグループ2909への例示的なMATのマッピングは、説明の目的で、表1に対応する32個のMATを含む。
図29の例のマッピングは、下記に表4として転載されている。
【0137】
閾値2911に対するMATグループのマッピングでは、MATグループ0を400個のエントリ112の閾値2911にマッピングし、MATグループ1を60個のエントリ112の閾値2911にマッピングし、MATグループ2を40個のエントリ112の閾値2911にマッピングし、またMATグループ3を12個のエントリ112の閾値2911にマッピングする。
図29(及び表4)は、それぞれのMATグループに対するMATの特定のセット及びMATの特定のマッピング、並びにそれぞれの閾値に対するMATグループを示しているが、この実施形態は一例として説明の目的で提示されていること、並びに別の実施形態が、異なるMATのセットで、またMATグループに対するMAT及び閾値に対するMATグループの異なるマッピングで企図されることを理解されたい。実際、一実施形態においてマッピングはプロセッサの動作時に、
図7〜9に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づいて、(たとえば
図1の更新入力126によって)動的に更新される。さらに、異なる数のMATグループ2909が使用されてもよい。
【0138】
図25に関して上述のように、MATグループ2909の使用に適応するために、追加の論理回路が完全アソシエイティブ・キャッシュ・メモリ2302に含まれ、これにより、場合によっては低い完全アソシエイティブ・キャッシュ・メモリ2302の構成可能性及び効率と引き換えに、必要なハードウェアの量を有利に少なくすることができる。たとえば、好ましくは、完全アソシエイティブ・キャッシュ・メモリ2302は、カウンタ2306、閾値2308及びポインタ2304に見合う数のMATグループ2909しか含まず、また各エントリのMAT 2314はエントリ112のMATグループを保持する。
【0139】
次に
図30を参照すると、
図23のキャッシュ・メモリ2302の動作を示す流れ図が示されている。流れはブロック3002から始まる。
【0140】
ブロック3002で、キャッシュ・メモリ2302は、キャッシュ・メモリ2302内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスはアレイ104のエントリ112を選択する。メモリ・アクセス122は、MAT 101を指定する。割当ユニット106は、MTA 101をMATグループ2909へマッピングする。流れはブロック3004へ進む。
【0141】
ブロック3004で、割当ユニット106は、MATグループ2909と関連付けられたカウンタ2306が、MATグループ2909と関連付けられた閾値2911に達したかどうかを判定する。流れは判定ブロック3006へ進む。
【0142】
判定ブロック3006で、MATグループ2909と関連付けられたカウンタ2306が、MATグループ2909と関連付けられた閾値2911に達している場合、流れはブロック3008へ進み、それ以外の場合、流れはブロック3012へ進む。
【0143】
ブロック3008で、割当ユニット106はアレイ104の有効エントリ112を置換する。このアレイのMATグループ2314は、メモリ・アクセス122のMATグループ2909と適合する。
図23に関して前述のように、置換されるべきエントリ112は、好ましくは、MATグループ2909と関連付けられたポインタ2304を使用して、様々な置換ポリシーによって選択することができる。流れはブロック3008で終わる。
【0144】
ブロック3012で、割当ユニット106は、
図27のブロック2712に関して上述の方法と同様に、アレイ104のいずれかのエントリ112内に割り当てる。流れはブロック3014へ進む。
【0145】
ブロック3014で、割当ユニット106はメモリ・アクセス122のMATグループ2909と関連付けられたカウンタ2306をインクリメントする。流れは判定ブロック3016へ進む。
【0146】
判定ブロック3016で、割当ユニット106は、置換されたエントリ112が有効であったかどうかを判定する。そうであった場合、流れはブロック3018へ進み、それ以外の場合、流れは終わる。
【0147】
ブロック3018で、割当ユニット106は、置換エントリ112のMATグループ2314と関連付けられたカウンタ2306をデクリメントする。流れはブロック3018で終わる。
【0148】
図29及び
図30の実施形態を使用して、キャッシュの特定のレベルの効率を高めることができる。その理由はキャッシュを配分することが、2つのMATグループの第1のMATグループが完全アソシエイティブ・キャッシュ・メモリ2302のせいぜい閾値程度(たとえば80%)を割り当てることが可能になるようにして配分されることができるからである。第1のMATグループはすべてのデータ関連MATを含むことができ、第2のMATグループはすべてのコード関連MAT(たとえばコード・フェッチ及びコード・プリフェッチ)を含むことができる。このことはコードを含むキャッシュ・ラインを完全アソシエイティブ・キャッシュ・メモリ2302内に留めることを、データ(たとえばストリーミング・データ)がプライベート命令キャッシュと競合することを防止することによって行うのに有用であり得る。
【0149】
次に
図31を参照すると、セット・アソシエイティブ・キャッシュ・メモリ3102を示すブロック図が示されている。
図31のキャッシュ・メモリ3102は、多くの点で
図1のキャッシュ・メモリ102と類似しており、同様の番号が付けられた要素は類似している。しかし、
図31のキャッシュ・メモリ3102は、
図1のマッピング108とは異なるマッピング3108を含む。
図31のマッピング3108は、
図1から
図22Eと関連する実施形態の様々なマッピングのいずれかを含むことができるが、
図31のマッピング3108はまた、MAT優先度に対する別々の複数のMATのマッピング3018を含み、その一例が
図32に示されている。加えて、有効キャッシュ・ラインそれぞれのMAT 3114はアレイ104に格納される。つまり、記憶要素112がキャッシュ・ラインに割り当てられると、割り当てを促進したメモリ・アクセス122のMAT 101は、そのキャッシュ・ラインの記憶要素112に格納される。有利なことには、MAT優先度マッピング3108に対するMATと共にMAT 3114の記憶は、キャッシュ・メモリ3102が、選択セットのウェイを選択して割り当てるために、下記でより詳細に特に
図33に関して説明されるように、置換ポリシーにおけるアレイ104の選択セットの有効キャッシュ・ラインのMAT 3114を含むことができるようにする。
【0150】
次に
図32を参照すると、一実施形態による
図31のそれぞれの優先度3108に対するMATのマッピングが示されている。
図32の例示的なマッピングは、説明の目的で、表1に対応する32個のMTAを含む。
図32の例のマッピングは、下記に表5として転載されている。
【0152】
図32(及び表5)は、特定のMATのセットと、それぞれのMAT優先度に対する特定のMATのマッピングとを示すが、この実施形態は一例として説明の目的で提供されていること、並びにMATのセットが異なると共にMAT優先度に対するMATのマッピングが異なる別の実施形態も企図されることを理解されたい。実際、一実施形態でマッピングはプロセッサの動作時に、
図7〜9に関して下記で説明されるように、どのプログラム又はプログラム・フェーズが現在実行されているかに基づいて、(たとえば
図1の更新入力126によって)動的に更新される。
【0153】
次に
図33を参照すると、キャッシュ・ラインのMATを考慮したキャッシュ・ライン置換ポリシーを示す流れ図が示されている。流れはブロック3302から始まる。
【0154】
ブロック3302で、キャッシュ・メモリ3102は、キャッシュ・メモリ3102内で失敗するメモリ・アクセス122を受け取る。メモリ・アクセス122のインデックスでアレイ104のセットを選択する。メモリ・アクセス122は、MAT 101を指定する。流れはブロック3304へ進む。
【0155】
ブロック3304で、割当ユニット106は、選択セット中のウェイのうち置換すべき最も資格のあるウェイ、及び置換すべき2番目に最も資格のあるウェイを選択セットの置換ポリシーによって判定する。たとえば置換ポリシーがLRU/pLRUである場合、割当ユニット106は、置換ビット114による選択セットの最高LRUウェイ及び2番目の最高LRUウェイを判定する。別の例では、置換ポリシーがラウンドロビンである場合、割当ユニット106は、置換ビット114中のラウンドロビン・ポインタによって指し示されたウェイと、ラウンドロビン・オーダの方向の次のウェイとを判定する。別の例では、置換ポリシーがランダムである場合、割当ユニット106は2つのウェイをランダムに判定する。キャッシュ・メモリ3102が、たとえばウェイ又はセット・グループ又はチャンク又はパーセルによって、割当ユニット106が選択セットのウェイのサブセットだけを考慮するように配分される実施形態では、割当ユニット106はウェイのサブセット中の最も資格のあるウェイ、及び第2に最も資格のあるウェイのMAT優先度を調べることを理解されたい。流れはブロック3306へ進む。
【0156】
ブロック3306で、割当ユニット106は、ブロック3304で判定された最も資格のあるウェイのMAT 3114、及び2番目に最も資格のあるウェイのMAT 3114を調べ、次に2つのMAT 3114の相対的MAT優先度3277を比較する。流れは判定ブロック3308へ進む。
【0157】
判定ブロック3308で、最も資格のあるウェイのMAT優先度3327が2番目に最も資格のあるウェイのMAT優先度3327よりも高い場合、流れはブロック3312へ進み、それ以外の場合、流れはブロック3314へ進む。一実施形態では、割当ユニット106は、最も資格のあるウェイと2番目に最も資格のあるウェイとのMAT優先度3327間の差を計算し、最も資格のあるウェイのMAT優先度3327が2番目に最も資格のあるウェイよりも大きいことを単に検査するのではなく、その差が閾値よりも大きいかどうか判定する。選択セット(又はその関連サブセット)中に無効なウェイがある場合には、割当ユニット106は最も資格のあるウェイ、又は2番目に最も資格のあるウェイを置換するのではなく、無効なウェイを割り当てるということに留意されたい。
【0158】
ブロック3312で、割当ユニット106は最も資格のあるウェイではなく、2番目に最も資格のあるウェイを置換する。流れはブロック3316へ進む。
【0159】
ブロック3314で、割当ユニット106は最も資格のあるウェイを置換する。流れは3316へ進む。
【0160】
ブロック3316で、割当ユニット106は置換されたウェイ中のMAT 3114をメモリ・アクセス122のMAT 101で更新する。このようにして、アレイ104のエントリのMAT 3114は維持される。流れはブロック3318へ進む。
【0161】
ブロック3318で、割当ユニット106はメモリ・アクセス122のMAT 101を調べ、それが比較的低い(たとえば閾値よりも低い)優先度を有しているかどうかを判定する。たとえば
図32の実施形態では、割当ユニット106はメモリ・アクセス122のMAT 101が3よりも低いかどうかを判定することができる。流れは判定ブロック3322へ進む。
【0162】
判定ブロック3322で、メモリ・アクセス122のMAT 101が比較的低い優先度を有する場合、流れはブロック3326へ進み、それ以外の場合、流れはブロック3324へ進む。
【0163】
ブロック3324で、割当ユニット106は、置換ウェイを置換ビット114の最低資格位置で置換スキームによって挿入する。たとえばLRU/pLRUスキームの場合、割当ユニット106は置換ウェイを最高使用頻度位置に挿入する。別の例で、ラウンドロビン・スキームの場合には、割当ユニット106は置換ウェイの少し先のラウンドロビン・ポインタを更新する。流れは3324で終わる。
【0164】
ブロック3326で、割当ユニット106は置換ウェイを、置換ビット114の中程度の資格のある位置で置換スキームによって、好ましくは、メモリ・アクセス122のMAT優先度3277がどれだけ低いかに基づいて挿入する。たとえばLRU/pLRUスキームの場合、割当ユニット106は置換ウェイを中間位置に挿入する。好ましくは、MAT優先度3277が低ければ低いほど、割当ユニット106は置換ウェイを中間位置により近く挿入するのに対し、MAT優先度3277が高ければ高いほど、割当ユニット106は置換ウェイを中間位置からより遠く、また最高使用頻度位置により近く挿入する。一実施形態で、非常に低いMAT優先度3277(たとえば優先度が0で信頼性が非常に低いプリフェッチ)では、割当ユニット106は、置換ウェイをLRU位置又はLRUに次ぐ位置に挿入する。別の例で、ラウンドロビン・スキームの場合には、割当ユニット106は、ラウンドロビン・ポインタを置換ウェイの先のより多くの位置で、MAT優先度3327がどれだけ低いかに応じて更新する。一実施形態では、割当ユニット106はまた、最低資格位置に近い1つ又は複数の他のウェイのMAT 3114と関連付けられた相対的MAT優先度3327を、どこに置換ウェイを挿入すべきか決めるときに考慮に入れる。流れはブロック3326で終わる。
【0165】
最も資格のある2つのウェイが考察される実施形態について説明されたが、さらなる最も資格のあるウェイが考察される別の実施形態も企図され、たとえば3番目に最も資格のあるウェイのMAT優先度が、最も資格のある、及び2番目に最も資格のあるウェイよりも低い場合には、割当ユニット106は3番目に最も資格のあるウェイを置換する。
【0166】
本明細書に記載の、ウェイ、セット・グループ、チャンク、MATグループ閾値、置換ポリシーが異なるパーセル等によってキャッシュ・メモリを配分するためのマッピングなど、様々な様式のキャッシュ・メモリの構成は、静的構成もしくは動的構成によるもの、又は両方によるものとすることができる。一般的に言えば、静的構成はプリシリコンである。つまり、設計者は直感を用いて、好ましくは、プロセッサ設計のソフトウェア・シミュレーションに支援されて、好適な構成、つまり一般的にはプロセッサの、具体的にはキャッシュ・メモリの性能を潜在的に改善する構成を判定する。プロセッサの性能を改善することは、プロセッサがプログラムを実行する速度を改善すること(たとえば、命令速度当たりのクロックを低減させる、又はクロック速度当たりの命令を増加させる)、及び/又は消費電力を低減させることである。プログラムはオペレーティング・システム、実行可能プログラム(たとえば、アプリケーション、ユーティリティ、ベンチマーク)、ダイナミック・リンク・ライブラリなどとすることができる。ソフトウェア・シミュレーションは、プロセッサの性能を改善することが望まれるプログラムの実行のオフライン解析を行うために、たとえば
図34から
図36に関して、特にキャッシュ・メモリ構成に関して下記で説明されるように使用することができる。好ましくは、設計者は、プログラムのセット全体にわたって好適になる傾向がある静的構成を判定する。次に設計者は、その好適な静的構成をシリコン中に製作される設計に含める。
【0167】
対照的に、動的構成を判定するための解析は、一般的に言えばポストシリコンで行われる。つまり、プロセッサが製作された後に、設計者は異なる種類のオフライン解析を行って、シリコン中に製作された静的(又はデフォルト)構成と異なる構成でプログラムを実行したときにプロセッサがどのように動作するかを判定する。ポストシリコン試験はより厳格な、おそらくより総当たり的な、構成マトリクスに対する自動化性能回帰が行われる技法を含むことができ、その場合、その回帰性能データが、たとえば
図37に関して下記で説明されるように解析される。設計者は、プログラムの集団についてのプリシリコン試験の結果をポストシリコン試験に対する初期シードとして使用して、たとえば最大値ではない極大値を回避することを試みることができる。
【0168】
試験がプリシリコンであるかそれともポストシリコンであるかにかかわらず、動的構成試験では、好適な構成がプログラムMATごとに、さらにはプログラム・フェーズMATごとにも判定される。次にシステム(たとえばデバイス・ドライバ)が、既知のプログラムがプロセッサ上で走っていることを検出すると(すなわち解析が行われ良好な構成が知られているプログラム)、システムは好適なプログラム固有の構成をプロセッサに提供し、プロセッサは、プロセッサが走っている間に、キャッシュ・メモリをプログラム固有の構成により動的な方式で更新する。好ましくは、プログラム固有の構成はプログラムの別々のフェーズに対する別々の構成を含み、たとえば
図36に関して説明されるように、プロセッサはフェーズ変化を検出し、フェーズ固有の構成に応じて構成を動的に更新する。
【0169】
プログラム・フェーズは、所与の特性のセットに関して、これらの特性中の一貫した挙動によって特徴づけられるコンピュータ・プログラムのサブセットである。たとえば、関連特性が分岐予測率及びキャッシュ・ヒット率であると仮定すると、プログラムのフェーズは、分岐予測率及びキャッシュ・ヒット率が一貫しているプログラムのランタイム挙動のサブセットになる。たとえばオフライン解析では、特定のデータ圧縮プログラムが2つのフェーズ、すなわち辞書構築フェーズ及び辞書検索フェーズを有すると判定することができる。辞書構成フェーズは、大きいストリングのセットと共通のサブストリングのセットを構築することと整合性のある、比較的低い分岐予測率、及び比較的高いキャッシュ・ヒット率を有するのに対し、辞書検索フェーズは、キャッシュのサイズよりも大きい辞書中のサブストリングを検索することと整合性のある、比較的高い分岐予測率、及び比較的低いキャッシュ・ヒット率を有する。
【0170】
一実施形態では、オフライン解析は「オラクル・キャッシュ」の概念を使用して行われる。その名前が暗示するように、オラクル・キャッシュは未来を知っている。キャッシュ・メモリ内の空間が限定されているので、オラクル・キャッシュはキャッシュ内にあるべき最も有用なデータを、どの時点でも知っている。このことは最高ヒット率を生み出すキャッシュのコンテンツのサイクルごと、又は命令ごとのスナップショットとして概念化することができる。
【0171】
まず、プログラム実行のためのオラクル・キャッシュ・スナップショットのシーケンスを生成し、スナップショット内のキャッシュ・ラインごとの割り当てを生成したメモリ・アクセスのMATのトラックを維持する。次に、スナップショットごとに円グラフを生成する。この円グラフは、複数のMATの各MAT又は各グループについて、MATのメモリ・アクセスに応じて割り当てられたキャッシュ・ラインによって占められたキャッシュの割合を示し、その一例が
図38に示されている。次に、プログラムの次の実行インスタンスに対して、プロセッサは円グラフのシーケンスからのMAT割合を使用して、キャッシュを(ウェイ、セット・グループ、チャンク、パーセル、閾値、MAT優先度などの点から)継続して再配分する。
【0172】
クロック・サイクル又は命令の細分性によって再配分することが実際的でない場合、ずっと長い時間、たとえばプログラム又はプログラム・フェーズ全体にわたる傾向があるか円グラフシーケンスを調べる。MATごとに(プログラム又はフェーズの)シーケンス中のすべての円グラフの平均を取り、配分の平均円グラフを作る。
【0173】
大まかに言って、オラクル・キャッシュの概念は、オラクル・キャッシュがメモリ・アクセスのすべてを前もって知っているので、それがメモリ・アクセスのすべてをあらかじめ実行できることである。その場合、プログラムが実行されると、オラクル・キャッシュは、任意の所与の時点にキャッシュ内にあるべきキャッシュ・ラインの最良のセットを予測する。たとえば
図35のグラフで、オラクル・キャッシュは、MAT 1の短い継続時間のキャッシュ・ライン(実線で示された上から2番目の線)が、その最後のアクセスの後にキャッシュされないはずであると予測する。このような解析を使用して、キャッシュ配分及び置換ポリシーについての観察結果をMATごとに導出する。
【0174】
次に
図34を参照すると、プログラム及びプログラム・フェーズのマッピングの生成を示す流れ図が示されている。流れはブロック3402から始まる。
【0175】
ブロック3402で、設計者は、好ましくは、自動化された方式で、プログラムを走らせ、プログラムによって行われるキャッシュ・メモリ(たとえば102、1002、1402、1502、1702、1902、2302、3102)へのメモリ・アクセス122を記録する。好ましくは、キャッシュ・ラインの割り当て、ヒット及び追い出しが記録される。メモリ・アクセス122のメモリ・アドレス、MAT 101及び時間(たとえば相対クロック・サイクル)が記録される。流れはブロック3404へ進む。
【0176】
ブロック3404で、設計者は、好ましくは、自動化された方式で、ブロック3402で記録された情報を規則的な時間間隔で解析し、明確な傾向を認識して、たとえば
図36に関して下記で説明されるように、プログラムをフェーズに分ける。たとえばMAT 101によるワーキング・セット・サイズ、MAT 101による平均キャッシュ・ライン寿命、MAT 101による平均ヒット率における明確な傾向を認識することができる。流れはブロック3406へ進む。
【0177】
ブロック3406で、設計者は、好ましくは、自動化された方式で、異なるプログラム・フェーズに対するマッピング又は構成をブロック3404で行われた解析に基づいて作成する。たとえば、マッピング又は構成は、ウェイ(たとえば
図2の108)によるキャッシュ・バジェット・マッピング、セット・グループ(たとえば
図10、14又は15の1008)によるキャッシュ・バジェット・マッピング、チャンク(たとえば
図15の1508又は
図17の1708)によるキャッシュ・バジェット・マッピング、ヘテロジニアス置換ポリシー(たとえば
図19〜22Eの1908)をサポートするキャッシュ・バジェット・マッピング、MATベースのエントリ割り当て閾値(たとえば
図23から
図24の2308)、MATグループに対するMAT及び閾値に対するMATグループのマッピング(たとえば
図29の2908)、及びMAT優先度マッピング(たとえば、
図31及び
図32の3108)とすることができる。一実施形態では、マッピング又は構成を判定するための解析には、
図35から
図38に関して下記で説明されるものと類似している解析が含まれ得る。一部のプログラムでは明確な傾向が示されないことがあり、そのため、そのプログラムは別個のフェーズに分解されやすいが、この場合、プログラム全体については単一のマッピング又は構成で十分であり得ることを理解されたい。流れはブロック3404で終わる。
【0178】
次に
図35を参照すると、メモリ・アクセス・グラフ、及びグラフからの抽出データが示されている。グラフはドットで表示されたメモリ・アクセスを示し、時間が水平軸上に示された独立変数になっており、メモリ・アドレスが垂直軸上に示された独立変数になっている。水平の線は、特定のメモリ・アドレスにおける個々のキャッシュ・ラインに対応する。線の左端がキャッシュ・ラインの割り当てを表し、線の右端がキャッシュ・メモリからのキャッシュ・ラインの追い出しを表す。各キャッシュ・ラインは関連付けられたMATを有し、
図35の例ではMAT 1、MAT 2、MAT 3及びMAT 4と表示されている。
図35の例では6つのキャッシュ・ラインが表示されており、2つが関連付けられたMAT 1、2つが関連付けられたMAT 2、1つが関連付けられたMAT 3、1つが関連付けられたMAT 4を有する。
【0179】
グラフの下の、別々の均一な8つの時間間隔それぞれに、合計ワーキング・セット・サイズ及びそれぞれのMATのワーキング・セット・サイズが示されている。これらの時間間隔は、たとえば
図36に関して下記で説明されるように、基本ブロック転送と相互に関連させることができ、またプログラム・フェーズと、プログラム・フェーズのそれぞれの構成又はマッピングとを判定するのに使用することができる。たとえば特定のプログラム又はフェーズの間中、その構成又はマッピングは、ワーキング・セット・サイズが比較的大きいMATに多くのウェイ、セット・グループ、チャンク、又はパーセルを配分し、ワーキング・セット・サイズが比較的小さいMATに配分するウェイを少なくすることができ、又は少なくとも、
図35にMATごとに示されているワーキング・セット・サイズを考慮に入れることができる。
【0180】
加えて、平均キャッシュ・ライン寿命など、キャッシュ・ラインが個々のMATごとにどのくらい長く有効になる傾向があるかについての観察を行うことができる。平均キャッシュ・ライン寿命は、フェーズ全体にわたるそれぞれのMATの全キャッシュ・ラインの寿命(割り当てから追い出しまで)の合計をMATのキャッシュ・ラインの数で割ったものとして計算される。この情報は、キャッシュ・メモリの置換ポリシーに影響を与えるように使用することができる。
【0181】
オラクル・キャッシュが、キャッシュ・メモリに含まれるセット及びウェイの意図された数に対応するためにキャッシュ・ラインの数を抑制する場合には、キャッシュ配分及び平均寿命観察の精度が向上し得る。MATごとのキャッシュ・ライン・ヒットなどの他のインジケータもまた集めることができる。
【0182】
次に
図36を参照すると、プログラムのフェーズ解析を示す流れ図が示されている。フェーズ解析はオフライン解析の一形式であり、これを使用して、プロセッサのキャッシュ・メモリ又はプリフェッチャなどの、プロセッサの構成可能な態様の好適な構成又はマッピングを判定することができる。流れはブロック3602から始まる。
【0183】
ブロック3602で、プログラムを実行するときにプロセッサによって性能を改善することが望ましいプログラムが、解析され分析されて状態図が生成される。状態図のノードはプログラムの基本ブロックである。基本ブロックは、プログラム制御命令(たとえば分岐、ジャンプ、呼出し、復帰など)間の命令のシーケンスである。状態図中の各縁部は、縁部がつながるターゲット基本ブロック、及び状態変化情報であり、これは下記でさらに説明されるように、フェーズ識別子になることができる。フェーズ識別子は、制御転送命令の命令ポインタ(IP)又はプログラム・カウンタ(PC)、制御転送命令のターゲット・アドレス、及び/又は制御転送命令の呼出しスタックを含むことができる。呼出しスタックは、呼出しの復帰アドレス及びパラメータを含むことができる。プログラム・フェーズは、1つ又は複数の基本ブロックを備えるプログラムの部分である。流れはブロック3604へ進む。
【0184】
ブロック3604で、プログラムは機器に備え付けられて、キャッシュ・メモリ・マッピング、プリフェッチャMATスコア、及びキャッシュ構成モードなどのプロセッサの構成可能な態様に関連した特性が解析される。これらの特性の例には、キャッシュ・ヒット率、分岐予測精度、ワーキング・セット・サイズ、平均キャッシュ・ライン寿命、及びキャッシュ汚染(たとえばプリフェッチされたが決して使用されないキャッシュ・ラインの数)が含まれる。流れはブロック3606へ進む。
【0185】
ブロック3606で、プログラムは、たとえばキャッシュ・メモリ及び/又はプリフェッチャの所与の構成で実行され、プログラムのフェーズは、ブロック3604の解析された特性での定常状態挙動を観察することによって特定される。たとえば、キャッシュ・ヒット率が対象の解析特性であると仮定し、そのキャッシュ・ヒット率が97%から40%に変化すると仮定する。このキャッシュ・ヒット率変化は、キャッシュ・メモリ構成が、変化前のプログラムに対して好適であったが、変化後のプログラムに対しては好適でないことを表示する傾向がある。したがって、キャッシュ・ヒット率変化前の基本ブロックのシーケンスを1つのフェーズとして特定することができ、キャッシュ・ヒット率変化後の基本ブロックのシーケンスを第2のフェーズとして特定することができる。別の例では、異なるMATのワーキング・セット・サイズが対象の解析特性であると仮定すると、異なるMAT又はMATグループのワーキング・セット・サイズの著しく大きい変化により、フェーズ変化を特定するためのプログラム内の望ましい位置を知らせることができる。流れはブロック3608へ進む。
【0186】
ブロック3608で、フェーズが特定された後、好適な構成又はマッピング、又は構成値がフェーズごとに判定される。たとえば、
図34及び
図35に関して上記の方法、又は
図37に関して下記の方法など、様々なオフライン解析技法を使用することができる。流れはブロック3612へ進む。
【0187】
ブロック3612で、フェーズ識別子はフェーズ変化と相互に関連付けられる。解析特性の変化が生じた上述の基本ブロック遷移の状態変化情報又は潜在的なフェーズ識別子は、プログラムのブロック3608で判定された好適な構成値と共に記録され、したがって、情報は、解析されたプログラムがまさに実行されようとしていることがたとえばデバイス・ドライバによって検出されたときに、プロセッサに供給されることができる。流れはブロック3614へ進む。
【0188】
ブロック3614で、解析されたプログラムと関連付けられた情報を受け取った後でプロセッサは、
図7から
図9に関して上述したように、フェーズ検出器804に
図8のフェーズ識別子802をロードする。流れはブロック3614で終わる。
【0189】
次に
図37を参照すると、プロセッサの構成可能態様(たとえばキャッシュ・メモリ、プリフェッチャ)のための好適な構成又はマッピングを判定する総当たり法を示す流れ図が示されている。説明される方法では、“座標降下(coordinate descent)”最適化アルゴリズムの態様を使用する。流れはブロック3702から始まる。
【0190】
ブロック3702で、プロセッサの性能を改善することが望ましいことが特定されたプログラムのリスト内のプログラム又はプログラム・フェーズごとに、方法はブロック3704から3716までを、好適な構成が判定されるまで(たとえば最良の現在の構成(下記参照)が比較的長時間変化しなかった)、又はリソース(たとえば時間リソース及び/又は計算リソース)がなくなるまで繰り返す。流れはブロック3704へ進む。
【0191】
ブロック3704で、現在の最良の構成がデフォルト構成(たとえばキャッシュ・メモリ又はプリフェッチャのデフォルト・マッピング)に設定され、この構成は、一実施形態ではただ単にプロセッサを製造するための構成である。流れはブロック3706へ進む。
【0192】
ブロック3706で、構成パラメータごとに、ブロック3708から3712までが実行される。構成パラメータの一例は、たとえば機能をオン又はオフする単一の構成ビットである。構成パラメータの別の例は、構成フィールド、たとえばベクトル304、セット・グループ選択論理回路1106/2106、パーセル指定子2001、閾値2308、MATグループに対するMAT及び閾値に対するMATグループの各マッピング2908、MAT優先度に対するMATのマッピング3108である。流れはブロック3708へ進む。
【0193】
ブロック3708で、ブロック3706の構成パラメータの値の妥当なセットの値ごとに、ブロック3712から3716までを実行する。構成パラメータの値の妥当なセットは、構成パラメータのサイズ、考えられるパラメータの重要度、及びその値によって繰り返すのに必要なリソースの量によって決まる。たとえば単一の構成ビットの場合では、両方の値が妥当なセット内にある。たとえば方法は16個以下の値を有する任意のパラメータに対し可能な値すべてを試みることができる。しかし、比較的大きいフィールド、たとえば32ビットのフィールドでは、2
32個の可能な値すべてを試みることは実行できない可能性がある。この場合設計者は、方法に対して妥当な値のセットを提供することができる。たとえば設計者は、類似した特性を備えるMATのグループを観察し、これらを上述のように一緒にグループ化して、可能性の数を限定することができる。設計者が値を提供せず、また可能性の数が大きい場合、方法は、妥当な数のパラメータのランダム値を用いて、ブロック3712から3716までを通して繰り返すことができる。流れはブロック3712へ進む。
【0194】
ブロック3712で、プログラム又はプログラム・フェーズは現在の最良の構成を用いて実行されるが、ブロック3708によるパラメータの次の値によって修正されて、性能が測定される。流れは判定ブロック3714へ進む。
【0195】
判定ブロック3714で、方法は、ブロック3712で測定された性能を現在の最良の性能と比較し、前者の方が良い場合には、流れはブロック3716へ進む。それ以外の場合は、流れはブロック3712へ戻って、すべての妥当な値が試みられるまで、現在のパラメータの次の値を試み、すべての妥当な値が試みられた場合には、流れはブロック3708へ戻って、すべての構成パラメータが試みられるまで、次の構成パラメータを繰り返し、すべての構成パラメータが試みられた場合には、方法は終了して、このプログラム又はプログラム・フェーズの現在の最良の構成を得る。
【0196】
ブロック3716で、方法は、現在の最良の構成を、ブロック3712で試みられた構成で更新する。流れはブロック3712へ戻って、すべての妥当な値が試みられるまで、現在のパラメータの次の値を試み、すべての妥当な値が試みられた場合には、流れはブロック3708へ戻って、すべての構成パラメータが試みられるまで、次の構成パラメータを繰り返し、すべての構成パラメータが試みられた場合には、方法は終了して、このプログラム又はプログラム・フェーズの現在の最良の構成を得る。
【0197】
図37のものと同様の方法を使用して見出された好適な構成は、なぜ特定の構成で良好な結果が得られたのかについて、設計者に理解されていなくてよく、また理解される必要がないことに留意されたい。
【0198】
次に、
図38を参照すると、解析結果を示す円グラフ3801が示されている。
図34、
図36及び
図37に従って行われたものなど様々な解析の結果は、MATごとの区分(すなわちMATごとの円の割合)がある円グラフとして概念化することができる。たとえば、キャッシュをウェイによって配分する場合、各MATのウェイのサブセットは円のその割合に大まかに相当する。有利なことに、上述のようにMATはグループ化することができ、各MATグループのウェイのサブセットはグループ内の、含まれるMATの円の割合の合計に大まかに相当する。
図38は一例を示す。セット・グループ、チャンク又はパーセルによってキャッシュを配分する場合では、円グラフがセット・グループごと、チャンクごと、又はパーセルごとに構築され、その後に同様の技法が適用される。円グラフ3801は、異なるMATグループごとの区分を含む。
図38の例では、プリフェッチ・グループが42%、コード・グループが19%、浮動小数点グループが23%、ストリーミング・データ・グループが11%、スタック及びテーブルウォーク・グループが5%である。
【0199】
次に
図39を参照すると、プロセッサ3900を示すブロック図が示されている。プロセッサ3900は命令キャッシュ3922を含み、命令キャッシュは命令を命令デコーダ3923に供給し、命令デコーダは命令を復号し、復号された命令を命令ディスパッチャ3924に供給し、命令ディスパッチャは、命令を実行するために実行ユニット3926にディスパッチする。好ましくは、プロセッサ3900のマイクロアーキテクチャはスーパースカラ及びアウト・オブ・オーダ実行であるが、他の実施形態も企図され、その結果、命令ディスパッチャ3924はまた、スーパースカラ・アウト・オブ・オーダ方式による複数の実行ユニット3926への命令のディスパッチをスケジュールするための命令スケジューラも含むようになる。好ましくは、プロセッサ3900はまた、プロセッサ3900のアーキテクチャの状態を保持するアーキテクチャのレジスタ(図示せず)、並びに非アーキテクチャのレジスタ(図示せず)を含む。好ましくは、プロセッサ3900はまた、レジスタのリネームを実行するために使用されるレジスタ・エイリアス・テーブル(RAT)(図示せず)と、プログラム・オーダ内の命令をリタイアさせるために使用されるリオーダ・バッファ(ROB)(図示せず)とを含む。好ましくは、命令ディスパッチャは命令翻訳プログラム(図示せず)を含み、この翻訳プログラムはアーキテクチャの命令を、実行ユニット3926によって実行可能なプロセッサ3900のマイクロ命令セット・アーキテクチャのマイクロ命令に翻訳する。
【0200】
プロセッサ3900はまた、メモリ・サブシステム3928を含み、これはメモリ・オペランドを実行ユニット3926に提供し、実行ユニット3926からメモリ・オペランドを受け取る。メモリ・サブシステム3928は好ましくは、1つ又は複数のロードユニット、1つ又は複数の記憶ユニット、ロード・キュー、記憶キュー、メモリからのキャッシュ・ラインを要求するための充填キュー、プロセッサ3900が通信するメモリ・バスのスヌーピングと関連付けられたスヌープ・キュー、テーブルウォーク・エンジン及び他の関連する機能ユニットを含む。
【0201】
プロセッサ3900はまた、メモリ・サブシステム3928と通信するキャッシュ・メモリ102を含む。好ましくは、キャッシュ・メモリ102は、
図1から
図38に関して説明されたキャッシュ・メモリと類似している。単一のキャッシュ・メモリ102が図示されているが、キャッシュ・メモリ102は、レベル−1(L1)命令キャッシュ、L1データ・キャッシュ、及びL1キャッシュを補足する一体化レベル−2(L2)キャッシュなどのキャッシュ・メモリの階層を含む、より大きいキャッシュ・メモリ・サブシステムのうちの1つとすることもできる。一実施形態では、キャッシュ・サブシステムはまた、レベル−3(L3)キャッシュを含む。プロセッサ3900はまた、データをメモリからキャッシュ・メモリ102の中へプリフェッチする1つ又は複数のプリフェッチャを含むこともできる。一実施形態では、プロセッサ3900はマルチコア・プロセッサであり、コアのそれぞれが上述の機能ユニットを有し、機能ユニット内ではキャッシュ・メモリ102がコアによって共有される。
【0202】
メモリ・サブシステム3928は、
図1から
図38の実施形態で説明されたように、キャッシュ・メモリ102のメモリ・アクセス122を作成する。メモリ・アクセス122は、アクセスされるべきメモリ位置のメモリ・アドレスを含む。メモリ・アクセス122のそれぞれはまた、メモリ・アクセス・タイプ(MAT)101を含み、その実施形態については上記で説明されている。
【0203】
本発明の様々な実施形態が本明細書で説明されたが、これらは限定ではなく例として提示されたことを理解されたい。関連コンピュータ技術分野の当業者には、これら実施形態に形状及び細部の様々な変更を本発明の範囲から逸脱することなく加えることができることが明らかであろう。たとえばソフトウェアにより、たとえば本明細書に記載の装置及び方法の機能、製造、モデリング、シミュレーション、記述及び/又は試験を可能にすることができる。これは一般的なプログラミング言語(たとえばC、C++)、Verilog HDL、VHDLなどを含むハードウェア記述言語(HDL)、又は他の利用可能なプログラムを使用することによって実現することができる。このようなソフトウェアは、磁気テープ、半導体、磁気ディスク、又は光ディスク(たとえばCD−ROM、DVD−ROMなど)、ネットワーク、ワイヤライン、無線又は他の通信媒体などの任意の既知のコンピュータ利用可能媒体に配置することができる。本明細書に記載の装置及び方法の実施形態は、プロセッサ・コアなどの半導体IPコアに含めて(たとえばHDLとして埋め込まれるか、又は指定される)、集積回路の製造の際にハードウェアに変換することができる。加えて、本明細書に記載の装置及び方法は、ハードウェアとソフトウェアを合わせたものとして具現化することができる。したがって、本発明は、本明細書に記載の例示的な実施形態のいずれによっても限定されるべきではなく、添付の特許請求の範囲及びその等価物によってのみ定義されるべきである。具体的には、本発明は汎用コンピュータに使用できるプロセッサ・デバイス内で実施することができる。最後に、当業者には、開示された概念及び特定の実施形態を、本発明の同一の諸目的を成し遂げるための他の構造を設計及び修正する基礎として、添付の特許請求の範囲に定義された本発明の範囲から逸脱することなく、容易に使用できることが理解できるはずである。