IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 富士通株式会社の特許一覧

<>
  • 特開-キャッシュメモリ 図1
  • 特開-キャッシュメモリ 図2
  • 特開-キャッシュメモリ 図3
  • 特開-キャッシュメモリ 図4
  • 特開-キャッシュメモリ 図5
  • 特開-キャッシュメモリ 図6
  • 特開-キャッシュメモリ 図7
  • 特開-キャッシュメモリ 図8
  • 特開-キャッシュメモリ 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024066576
(43)【公開日】2024-05-16
(54)【発明の名称】キャッシュメモリ
(51)【国際特許分類】
   G06F 12/0895 20160101AFI20240509BHJP
   G06F 12/0864 20160101ALI20240509BHJP
【FI】
G06F12/0895 108
G06F12/0864
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022176006
(22)【出願日】2022-11-02
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100107515
【弁理士】
【氏名又は名称】廣田 浩一
(72)【発明者】
【氏名】中原 汐
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205PP23
5B205SS12
5B205TT02
5B205VV04
(57)【要約】
【課題】メモリアクセスアドレスの偏りによるキャッシュヒット率の低下を抑制する。
【解決手段】キャッシュメモリは、メモリアクセスアドレス中のセットアドレスにより識別される複数のエントリを含むキャッシュブロックと、メモリアクセス要求のキャッシュヒットまたはキャッシュミスを判定するキャッシュ制御部と、キャッシュミスの発生回数をエントリ毎に保持するミス回数保持部と、エントリ毎のキャッシュミスの発生回数のいずれかが閾値を超えた場合、セットアドレスのメモリアクセスアドレス内でのビット位置の割り当てを変更するセットビット位置変更部と、を有する。これにより、特定のエントリへの参照が集中する場合に、参照するエントリを分散して、キャッシュヒット率の低下を抑制することができる。この結果、キャッシュメモリを搭載するプロセッサまたはシステムの処理性能を向上することができる。
【選択図】図1
【特許請求の範囲】
【請求項1】
メモリアクセス要求に含まれるメモリアクセスアドレス中のセットアドレスにより識別される複数のエントリを含み、前記複数のエントリの各々がメモリアクセスアドレス中のタグアドレスを保持する複数のウェイを含むキャッシュブロックと、
メモリアクセスアドレスに含まれるセットアドレスとタグアドレスとに基づいて、メモリアクセス要求のキャッシュヒットまたはキャッシュミスを判定するキャッシュ制御部と、
キャッシュミスの発生回数を前記複数のエントリ毎に保持するミス回数保持部と、
前記ミス回数保持部に保持された前記複数のエントリ毎のキャッシュミスの発生回数のいずれかが閾値を超えた場合、セットアドレスのメモリアクセスアドレス内でのビット位置の割り当てを変更するセットビット位置変更部と、
を有するキャッシュメモリ。
【請求項2】
前記セットビット位置変更部は、セットアドレスのビット位置の割り当てを変更した場合、前記キャッシュブロックの全てのエントリを無効化する
請求項1に記載のキャッシュメモリ。
【請求項3】
前記セットビット位置変更部は、セットアドレスのビット位置の割り当てを変更した場合、キャッシュミスの発生回数が閾値を超えたエントリを除くエントリを無効化し、キャッシュミスの発生回数が閾値を超えたエントリに保持されたデータを、ビット位置の割り当てを変更したセットアドレスに対応するエントリに、新たなタグアドレスとともに格納する
請求項1に記載のキャッシュメモリ。
【請求項4】
前記セットビット位置変更部は、前記セットアドレスのビット位置の割り当てを変更した場合、ビット位置の割り当ての変更の前後で保持するエントリが変わらないデータを除くデータを無効化し、無効化しないデータを保持するエントリのタグアドレスをビット位置の割り当ての変更後のタグアドレスに変更する
請求項1に記載のキャッシュメモリ。
【請求項5】
前記メモリアクセスアドレス中の前記セットアドレスのビット位置を保持するセットビット位置保持部を有し、
前記キャッシュ制御部は、前記セットビット位置保持部に保持された前記ビット位置に基づいて前記メモリアクセスアドレスからセットアドレスとタグアドレスとを抽出し、
前記セットビット位置変更部は、変更したビット位置を前記セットビット位置保持部に格納する
請求項1ないし請求項4のいずれか1項に記載のキャッシュメモリ。
【請求項6】
前記キャッシュ制御部がキャッシュミスを判定する毎に、キャッシュミスしたセットに対応して前記ミス回数保持部に保持されたキャッシュミスの発生回数を更新するミス回数更新部を有する
請求項1ないし請求項4のいずれか1項に記載のキャッシュメモリ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、キャッシュメモリに関する。
【背景技術】
【0002】
CPU(Central Processing Unit)等のプロセッサに搭載されるキャッシュメモリ、または、プロセッサとメインメモリとの間に配置されるキャッシュメモリは、メインメモリに記憶されたデータの一部を保持する。そして、キャッシュメモリは、プロセッサから発行されたメモリアクセス要求の対象データを保持している場合(キャッシュヒット)、メインメモリにアクセス要求を発行することなく、キャッシュメモリに保持しているデータをプロセッサに出力する。これにより、データのアクセス効率が向上し、プロセッサの処理性能が向上する。
【0003】
例えば、キャッシュメモリは、データを保持するデータ領域と、アクセス対象のデータがデータ領域に保持されているか否かを判定する情報を保持するタグ領域とを有する複数のエントリを有する。複数のエントリは、メモリアクセス要求に含まれるメモリアクセスアドレスの一部のビットであるセットアドレスを使用して識別される。メモリアクセスアドレスの残りのビットは、タグアドレスとしてタグ領域に格納される。そして、メモリアクセスアドレスに含まれるセットアドレスに対応するエントリに保持されたタグアドレスが、メモリアクセスアドレスのタグアドレスと一致する場合、キャッシュヒットが判定される(セットアソシアティブ方式)。
【0004】
この種のキャッシュメモリは、例えば、メモリアクセス要求に含まれるメモリアクセスアドレスから複数通りのセットアドレスとタグアドレスとをそれぞれ生成する複数のマッピングコントローラを有する。キャッシュメモリは、マッピングコントローラのいずれかから出力されるセットアドレスおよびタグアドレスを使用してキャッシュヒットを判定し、ヒット率が低い場合、使用するマッピングコントローラを切り替える(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平8-263376号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
セットアソシアティブ方式のキャッシュメモリにおいて、メモリアクセスアドレスの値が2のべき乗となるストライドアクセスが実施されると、特定のエントリの参照頻度が他のエントリの参照頻度に比べて高くなる場合がある。参照頻度の高いエントリにおいて、データがキャッシュヒットによって再利用される前に追い出されると、キャッシュミスの頻度が高くなる。
【0007】
例えば、ストライドアクセスによるキャッシュミスは、局所的なメモリアクセスアドレスにより発生する。このため、キャッシュメモリ全体のキャッシュヒット率をモニタすることでは、ストライドアクセスによるキャッシュミスの頻度の増加を判定することが困難であり、キャッシュミスの頻度を下げることは困難である。
【0008】
1つの側面では、本発明は、メモリアクセスアドレスの偏りによるキャッシュヒット率の低下を抑制することを目的とする。
【課題を解決するための手段】
【0009】
一つの観点によれば、キャッシュメモリは、メモリアクセス要求に含まれるメモリアクセスアドレス中のセットアドレスにより識別される複数のエントリを含み、前記複数のエントリの各々にメモリアクセスアドレス中のタグアドレスが保持されるキャッシュブロックと、メモリアクセスアドレスに含まれるセットアドレスとタグアドレスとに基づいて、メモリアクセス要求のキャッシュヒットまたはキャッシュミスを判定するキャッシュ制御部と、キャッシュミスの発生回数を前記複数のエントリ毎に保持するミス回数保持部と、前記ミス回数保持部に保持された前記複数のエントリ毎のキャッシュミスの発生回数のいずれかが閾値を超えた場合、セットアドレスのメモリアクセスアドレス内でのビット位置の割り当てを変更するセットビット位置変更部と、を有する。
【発明の効果】
【0010】
メモリアクセスアドレスの偏りによるキャッシュヒット率の低下を抑制することができる。
【図面の簡単な説明】
【0011】
図1】一実施形態におけるキャッシュメモリの一例を示すブロック図である。
図2図1のキャッシュブロックの一例を示す説明図である。
図3】別の実施形態におけるキャッシュメモリの一例を示すブロック図である。
図4図3のキャッシュメモリの動作の一例を示す説明図である。
図5図3のキャッシュ制御部の動作の一例を示すフロー図である。
図6図3のミス回数更新部の動作の一例を示すフロー図である。
図7図3のセットビット位置決定部の動作の一例を示すフロー図である。
図8図3のキャッシュ情報変更部の動作の一例を示すフロー図である。
図9】別の実施形態におけるキャッシュメモリの動作の一例を示す説明図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して実施形態が説明される。以下では、信号が伝達される信号線には、信号名と同じ符号が使用される。
【0013】
図1は、一実施形態におけるキャッシュメモリの一例を示す。図1に示すキャッシュメモリ10は、CPU等のプロセッサに搭載され、あるいは、プロセッサとメインメモリとの間に配置される。
【0014】
キャッシュメモリ10がプロセッサに搭載される1次キャッシュの場合、キャッシュメモリ10は、プロセッサ内の演算コアからメモリアクセス要求を受信する。キャッシュメモリ10がプロセッサに搭載される2次キャッシュの場合、キャッシュメモリ10は、1次キャッシュからメモリアクセス要求を受信する。キャッシュメモリ10がプロセッサに接続される3次キャッシュの場合、キャッシュメモリ10は、2次キャッシュからメモリアクセス要求を受信する。
【0015】
キャッシュメモリ10は、キャッシュブロック20およびキャッシュメモリ制御回路30を有する。キャッシュメモリ制御回路30は、キャッシュ制御部31、ミス回数保持部32およびセットビット位置変更部33を有する。
【0016】
キャッシュブロック20は、セットアドレスSETにより識別される複数のエントリENTを有する。各エントリENTは、データを保持するデータ領域DTと、データ領域DTに保持されるデータの読み書きの制御に使用される情報を保持するタグ領域TAGとを有する。以下では、タグ領域TAGに保持されるタグアドレスは、タグアドレスTAGとも称され、データ領域DTに保持されるデータは、データDTとも称される。
【0017】
図1では、説明の簡単化のため、キャッシュブロック20が2ビットのセットアドレスSETで識別される4つのエントリENTを有する例が示される。しかしながら、キャッシュブロック20のエントリENTの数は、64個(6ビットのセットアドレスSET)または2048個(11ビットのセットアドレスSET)等でもよい。なお、キャッシュメモリ10は、複数のウェイを有するセットアソシアティブ方式を採用している。キャッシュブロック20の例は、図2に示される。
【0018】
キャッシュ制御部31は、上位のキャッシュメモリまたは演算コアからメモリアクセス要求を受信した場合、タグ領域TAGを参照し、メモリアクセス要求の対象データがデータ領域DTに保持されているか否かを判定する。この際、キャッシュ制御部31は、セットビット位置SETBに基づいてメモリアクセス要求に含まれるメモリアクセスアドレスからセットアドレスSETとタグアドレスTAGとを抽出する。セットアドレスSETは、メモリアクセスアドレスにおいて、キャッシュ制御部31が保持するセットビット位置SETBで示されるビット位置のアドレスである。
【0019】
そして、キャッシュ制御部31は、セットアドレスSETに対応するエントリENTに保持されたタグアドレスTAGを参照する。キャッシュ制御部31は、対象データがデータ領域DTに保持されている場合、キャッシュヒットを判定し、対象データをデータ領域から読み出してメモリアクセス要求の発行元に出力する。
【0020】
キャッシュ制御部31は、対象データがデータ領域DTに保持されていない場合、キャッシュミスを判定し、下位のキャッシュメモリまたはメインメモリにメモリアクセス要求を出力する。キャッシュ制御部31は、下位のキャッシュメモリまたはメインメモリから対象データを受信した場合、対象データをメモリアクセス要求の発行元に出力する。
【0021】
また、キャッシュ制御部31は、受信した対象データをデータ領域DTに格納し、タグ領域TAGを更新する。キャッシュ制御部31は、受信した対象データを格納するデータ領域DTに空きがない場合、データ領域DTに保持されているデータを追い出し、対象データを格納するデータ領域DTを確保する。
【0022】
キャッシュ制御部31は、キャッシュミスを判定した場合、キャッシュミスしたメモリアクセスアドレスに含まれるセットアドレスSETを含む増加指示INCをミス回数保持部32に出力する。また、キャッシュ制御部31は、セットビット位置変更部33から新たなセットビット位置NSETBを受信した場合、受信したセットビット位置NSETBをセットビット位置SETBとして保持する。キャッシュ制御部31においてセットビット位置SETBを保持する領域は、セットビット位置保持部の一例である。なお、セットビット位置SETBは、キャッシュメモリ制御回路30内であってキャッシュ制御部31の外部に設けられてもよい。
【0023】
ミス回数保持部32は、セットアドレスSET毎にキャッシュミスの発生回数であるキャッシュミス回数CMNを保持する保持領域を有する。すなわち、ミス回数保持部32は、キャッシュブロック20の複数のエントリENTの各々に対応してキャッシュミス回数CMNの保持領域を有する。ミス回数保持部32は、複数の保持領域に保持しているキャッシュミス回数CMN(CMN00、CMN01、CMN10、CMN11)をセットビット位置変更部33に出力する。キャッシュミス回数CMNの末尾の2桁の数値は、保持領域(すなわち、セットアドレスSET)を示す。
【0024】
ミス回数保持部32は、キャッシュ制御部31から増加指示INCを受信した場合、増加指示INCに含まれるセットアドレスSETに対応する保持領域に保持されたキャッシュミス回数CMNをインクリメントする。ミス回数保持部32は、セットビット位置変更部33から初期化指示CLRを受信した場合、全ての保持領域に保持しているキャッシュミス回数CMNを"0"に初期化する。なお、ミス回数保持部32には、キャッシュミス回数CMNの代わりに、キャッシュミス率が保持されてもよい。
【0025】
セットビット位置変更部33は、ミス回数保持部32から出力されるセットアドレスSET毎のキャッシュミス回数CMNを監視する。セットビット位置変更部33は、キャッシュミス回数CMNのいずれかが閾値を超えた場合、ミス回数保持部32に初期化指示CLRを出力し、キャッシュブロック20に無効化指示INVLDを出力する。キャッシュブロック20の全てのエントリENTは、無効化指示INVLDに基づいて無効化される。
【0026】
また、セットビット位置変更部33は、キャッシュミス回数CMNのいずれかが閾値を超えた場合、メモリアクセスアドレスにおいて新たにセットアドレスSETに割り当てるビット位置を決定する。例えば、セットビット位置変更部33は、現在のセットビット位置SETBに対してビット位置が少なくとも1ビット異なる新たなセットビット位置NSETBを決定する。セットビット位置変更部33は、決定した新たなセットビット位置NSETBをキャッシュ制御部31に出力する。特に限定されないが、閾値は、ウェイWの数またはウェイWの数の2倍程度が好ましい。
【0027】
図2は、図1のキャッシュブロック20の一例を示す。キャッシュブロック20は、エントリENT毎に複数のウェイW(W1-W4)を有する。なお、ウェイWの数は、4個に限定されず、8個または16個等でもよい。各ウェイWは、バリッドフラグVLD、タグアドレスTAGおよびデータDTを保持する領域を有する。
【0028】
バリッドフラグVLDは、エントリENTが有効である場合にセットされ、エントリENTが無効である場合にリセットされる。また、各エントリENTは、最近使用されたウェイWを示す使用情報USDを保持する領域を有する。使用情報USD、バリッドフラグVLDおよびタグアドレスTAGは、図1のタグ領域TAGに保持され、データDTは、図1のデータ領域DTに保持される。
【0029】
メモリアクセス要求に含まれるメモリアクセスアドレスは、タグアドレスTAG、セットアドレスSETおよびワードアドレスWDを含む。ワードアドレスWDは、メインメモリまたは下位のキャッシュメモリに対するデータDTの入出力単位であるキャッシュライン中のバイトデータを識別するアドレスである。ワードアドレスWDは、キャッシュラインサイズが64バイトの場合、6ビットであり、キャッシュラインサイズが128バイトの場合、7ビットである。ワードアドレスWDは、メモリアクセスアドレスの最下位ビット側に割り当てられる。
【0030】
タグアドレスTAGは、メモリアクセスアドレスのうち、ワードアドレスWDとセットアドレスSETとを除いたビットで識別される。例えば、初期状態において、メモリアクセスアドレスの最上位ビット側にタグアドレスTAGが割り当てられ、メモリアクセスアドレスの中位ビットにセットアドレスSETが割り当てられるとする。
【0031】
この状態で、キャッシュブロック20のエントリENTのいずれかのキャッシュミス回数が閾値を超えた場合、図1のセットビット位置変更部33により、セットアドレスSETの割り当てを変更する処理が実施される。セットアドレスSETの割り当ての変更例1では、セットアドレスSETが、元のセットアドレスSETに対して1ビットまたは数ビット上位側にシフトされ、シフトにより空いたビットにタグアドレスTAGが割り当てられる。変更例1では、変更後のセットアドレスSETの一部のビットは、変更前のセットアドレスSETのビットと重複している。
【0032】
セットアドレスSETの割り当ての変更例2では、セットアドレスSETが最上位ビット側に割り当てられ、タグアドレスTAGがセットアドレスSETとワードアドレスWDとの間に割り当てられる。変更後のセットアドレスSETのビットは、変更前のセットアドレスSETのビットと重複しない。セットアドレスSETの割り当ての変更例3では、セットアドレスSETがタグアドレスTAGの間に複数に分割して割り当てられる。変更例3では、変更後のセットアドレスSETのビットの一部は、変更前のセットアドレスSETのビットと重複してもよい。なお、セットアドレスSETの割り当ては、変更例1から変更例3に限定されない。
【0033】
この実施形態では、キャッシュミス回数が閾値を超えた場合にセットアドレスSETの割り当てを変更することで、ストライドアクセス等により特定のエントリENTへの参照が集中する場合に、参照するエントリENTを分散させることができる。これにより、キャッシュヒット率の低下を抑制することができ、メモリアクセス効率を向上することができる。
【0034】
この結果、キャッシュメモリ10を搭載するプロセッサまたはサーバ等のシステムの処理性能を向上することができ、科学技術計算、ディープラーニングまたは各種シミュレーション等に掛かる時間を短縮することができる。
【0035】
キャッシュミス回数が閾値を超えた場合にキャッシュブロック20の全てのエントリENTを無効化することで、セットアドレスSETの変更に伴うデータDTの移動処理とタグアドレスTAGの変更処理とを省略することができる。この結果、セットビット位置変更部33によるキャッシュブロック20の制御を簡易にすることができ、キャッシュメモリ制御回路30の回路規模の増大を抑制することができる。
【0036】
キャッシュ制御部31が参照可能な位置にセットビット位置SETBとして保持する領域を設けることで、セットアドレスSETのビット位置が変更された場合にも、キャッシュ制御部31は、正しいエントリENTを参照することができる。この結果、キャッシュ制御部31は、メモリアクセスアドレスに基づいて、誤動作することなくキャッシュヒットまたはキャッシュミスを判定することができる。
【0037】
なお、キャッシュブロック20の各エントリENTに複数のウェイWを設けることで、ストライドアクセス等により特定のエントリENTへの参照が集中することを閾値に基づいて検出し、参照するエントリENTを分散させることができる。すなわち、この実施形態は、複数のウェイWを有するセットアソシアティブ方式のキャッシュメモリに適用することで上記の効果を得ることができる。
【0038】
図3は、別の実施形態におけるキャッシュメモリの一例を示す。図1および図2に示した実施形態と同様の要素については、詳細な説明は省略する。図3に示すキャッシュメモリ100は、CPU等のプロセッサに搭載され、あるいは、プロセッサとメインメモリとの間に配置される。キャッシュメモリ100は、図1のキャッシュメモリ10と同様に、上位のキャッシュメモリまたは演算コアからメモリアクセス要求を受信、キャッシュミスした場合、下位のキャッシュメモリまたはメインメモリにメモリアクセス要求を出力する。
【0039】
キャッシュメモリ100は、キャッシュブロック110およびキャッシュメモリ制御回路120を有する。キャッシュメモリ制御回路120は、キャッシュ制御部121、セットビット位置保持部122、キャッシュ情報変更部123、ミス回数更新部124、ミス回数保持部125およびセットビット位置決定部126を有する。キャッシュ情報変更部123およびセットビット位置決定部126は、セットビット位置変更部の一例である。
【0040】
キャッシュブロック110は、図2のキャッシュブロック20と同様に、セットアドレスSETにより識別される複数のエントリENTを有し、各エントリENTは、複数のウェイW(例えば、ウェイW1-W4)を有する。キャッシュメモリ100は、複数のウェイWを有するセットアソシアティブ方式を採用している。
【0041】
キャッシュ制御部121によるキャッシュヒットまたはキャッシュミスの判定動作は、図1のキャッシュ制御部31によるキャッシュヒットまたはキャッシュミスの判定動作と同様である。但し、キャッシュ制御部121は、外部に保持されたセットビット位置SETBを参照する点、および、キャッシュミスを判定した場合、セットアドレスSETのみをミス回数更新部124に出力する点が図1のキャッシュ制御部31と相違する。
【0042】
セットビット位置保持部122は、キャッシュ情報変更部123から受信する新たなセットビット位置NSETBをセットビット位置SETBとして保持する。セットビット位置保持部122は、保持しているセットビット位置SETBをキャッシュ制御部121およびセットビット位置決定部126に出力する。
【0043】
キャッシュ情報変更部123は、セットビット位置決定部126から受信する新たなセットビット位置NSETBをセットビット位置保持部122に転送する。また、キャッシュ情報変更部123は、新たなセットビット位置NSETBを受信した場合、ミス回数保持部125を参照し、キャッシュミス回数CMNが最も多いセットアドレスSET1を取得する。そして、キャッシュ情報変更部123は、受信した新たなセットビット位置NSETBに基づいて、キャッシュブロック110のエントリENTに割り当てるセットアドレスSETを変更する変更処理を実施する。変更処理については、図8で説明される。また、キャッシュ情報変更部123は、ミス回数更新部124にリセット指示RSTを出力する。
【0044】
ミス回数更新部124は、キャッシュ制御部121からセットアドレスSETを受信した場合、受信したセットアドレスSETを含む増加指示INCをミス回数保持部125に出力する。ミス回数更新部124は、ミス回数保持部125に保持されたセットアドレスSETにそれぞれ対応するキャッシュミス回数CMNのいずれかが閾値を超えた場合、セットビット位置決定部126に超過情報OVRを出力する。ミス回数更新部124は、キャッシュ情報変更部123からリセット指示RSTを受信した場合、ミス回数保持部125に保持された全てのキャッシュミス回数CMNを"0"に初期化する初期化指示CLRをミス回数保持部125に出力する。
【0045】
ミス回数保持部125は、セットアドレスSET1をキャッシュ情報変更部123に出力する機能を有することを除き、図1のミス回数保持部32と同様の機能を有する。すなわち、ミス回数保持部125は、増加指示INCに基づいて、対応するキャッシュミス回数CMNをインクリメントし、初期化指示CLRに基づいて、全てのキャッシュミス回数CMNを"0"に初期化する。なお、ミス回数保持部125には、キャッシュミス回数CMNの代わりに、キャッシュミス率が保持されてもよい。
【0046】
セットビット位置決定部126は、ミス回数更新部124から超過情報OVRを受信した場合、メモリアクセスアドレスにおいて新たなセットアドレスSETに割り当てるビット位置を決定する。例えば、セットビット位置決定部126は、セットビット位置保持部122に保持されている現在のセットビット位置SETBに対してビット位置が少なくとも1ビット異なる新たなセットビット位置NSETBを決定する。セットビット位置決定部126は、決定した新たなセットビット位置NSETBをキャッシュ情報変更部123に出力する。
【0047】
図4は、図3のキャッシュメモリ100の動作の一例を示す。図4では、説明の簡単化のため、メモリアクセスアドレスは、4ビットのタグアドレスTAGと2ビットのセットアドレスSETとを含む6ビットであり、ワードアドレスWDを含まないとする。また、ストライドアクセスによりアクセスの頻度が高いセットアドレスSET="01"のエントリENT以外のエントリENTのタグアドレスTAGおよびデータDTの記載は省略されている。
【0048】
図4の初期状態では、タグアドレスTAGは、メモリアクセスアドレスの上位4ビットに割り当てられ、セットアドレスSETは、メモリアクセスアドレスの下位2ビットに割り当てられる。この場合、図3のセットビット位置SETBは、例えば、2進数で"000011"で示される。
【0049】
初期状態において、ミス回数更新部124は、セットアドレスSET="01"のエントリENTでキャッシュミス回数CMNが閾値を超えたことを判定し、セットビット位置決定部126は、新たなセットビット位置NSETBを決定する。例えば、セットビット位置決定部126は、図2の変更例2に示すように、タグアドレスTAGとセットアドレスSETとの割り当てを入れ替える。割り当ての変更後の新たなセットビット位置NSETBは、2進数で"110000"で示される。
【0050】
キャッシュ情報変更部123は、ミス回数保持部125を参照してキャッシュミス回数CMNが最も多いセットアドレスSET1を取得し、キャッシュブロック110のセットアドレスSET1以外のエントリENTに保持されたキャッシュ情報を無効化する。そして、キャッシュ情報変更部123は、セットアドレスSET1のエントリENTに保持されたデータを、新たなセットビット位置NSETBに対応するエントリENTのウェイWのいずれかに格納する。また、キャッシュ情報変更部123は、データを格納したウェイWに新たなタグアドレスTAGを格納する。
【0051】
これにより、ストライドアクセスにより局所的なエントリENTの参照頻度が増加し、キャッシュミス回数CMNが閾値を超えた場合に、その後のストライドアクセスにより参照されるエントリENTを分散させることができる。この結果、特定のエントリENTでキャッシュミスが発生することを抑制することができ、キャッシュヒット率が低下することを抑制することができる。
【0052】
図5は、図3のキャッシュ制御部121の動作の一例を示す。図5に示すフローは、キャッシュ制御部121が上位のキャッシュメモリまたは演算コアからメモリアクセス要求を受信したことに基づいて開始される。なお、図5から図8は、キャッシュメモリ100の制御方法の一例を示す。
【0053】
まず、ステップS11において、キャッシュ制御部121は、メモリアクセスアドレスに含まれるセットアドレスSETに対応するキャッシュブロック110のエントリENTに保持されたタグアドレスTAGを参照する。キャッシュ制御部121は、参照したタグアドレスTAGがメモリアクセスアドレスに含まれるタグアドレスTAGと一致する場合、キャッシュヒットを判定し、ステップS15を実施する。キャッシュ制御部121は、参照したタグアドレスTAGがメモリアクセスアドレスに含まれるタグアドレスTAGと一致しない場合、キャッシュミスを判定し、ステップS12を実施する。
【0054】
ステップS12において、キャッシュ制御部121は、キャッシュミスしたメモリアクセスアドレスに含まれるセットアドレスSETをミス回数更新部124に出力する。次に、ステップS13において、キャッシュ制御部121は、下位のキャッシュメモリまたはメインメモリにメモリアクセス要求を出力する。
【0055】
次に、ステップS14において、キャッシュ制御部121は、下位のキャッシュメモリまたはメインメモリから対象データを受信した場合、対象データをメモリアクセス要求の発行元に出力する。また、キャッシュ制御部121は、受信した対象データをキャッシュブロック110に格納し、キャッシュブロック110を更新する。ステップS14の後、キャッシュ制御部121は、ステップS15を実施する。なお、ステップS12の動作は、ステップS13、S14の動作の後に実施されてもよい。
【0056】
ステップS15において、キャッシュ制御部121は、キャッシュブロック110から対象データを読み出し、読み出した対象データをメモリアクセス要求の発行元に出力し、図5に示す動作を終了する。
【0057】
図6は、図3のミス回数更新部124の動作の一例を示す。図6に示す動作は、ミス回数更新部124がキャッシュ制御部121からセットアドレスSETを受信した場合、または、キャッシュ情報変更部123からリセット指示RSTを受信した場合に開始される。
【0058】
まず、ステップS21において、ミス回数更新部124は、セットアドレスSETを受信した場合、ステップS22を実施し、セットアドレスSETを受信していない場合、ステップS25を実施する。
【0059】
ステップS22において、ミス回数更新部124は、受信したセットアドレスSETに対応するミス回数保持部125の保持領域のキャッシュミス回数CMNをインクリメントさせる増加指示INCをミス回数保持部125に出力する。
【0060】
次に、ステップS23において、ミス回数更新部124は、ミス回数保持部125の保持領域のいずれかでキャッシュミス回数が閾値を超えたか否かを判定する。ミス回数更新部124は、キャッシュミス回数が閾値を超えた保持領域がある場合、ステップS24を実施する。ミス回数更新部124は、キャッシュミス回数が閾値を超えた保持領域がない場合、図6に示す動作を終了する。
【0061】
ステップS24において、ミス回数更新部124は、キャッシュミス回数CMNのいずれかが閾値を超えたことを示す超過情報OVRをセットビット位置決定部126に出力し、図6に示す動作を終了する。
【0062】
ステップS25において、ミス回数更新部124は、ミス回数保持部125に保持された全てのキャッシュミス回数CMNを"0"に初期化する初期化指示CLRをミス回数保持部125に出力し、図6に示す動作を終了する。
【0063】
図7は、図3のセットビット位置決定部126の動作の一例を示す。図7に示す動作は、ミス回数更新部124から超過情報OVRを受信した場合に開始される。
【0064】
まず、ステップS31において、セットビット位置決定部126は、セットアドレスSETの現在のセットビット位置SETBをセットビット位置保持部122から取得する。次に、ステップS32において、セットビット位置決定部126は、図2に例示されているように、現在のセットビット位置SETBに対してビット位置が少なくとも1ビット異なる新たなセットビット位置NSETBを決定する。
【0065】
次に、ステップS33において、セットビット位置決定部126は、ステップS32で決定した新たなセットビット位置NSETBをキャッシュ情報変更部123に出力し、図7に示す動作を終了する。
【0066】
図8は、図3のキャッシュ情報変更部123の動作の一例を示す。図8に示す動作は、セットビット位置決定部126から新たなセットビット位置NSETBを受信した場合に開始される。
【0067】
まず、ステップS41において、キャッシュ情報変更部123は、ミス回数保持部125を参照し、キャッシュミス回数CMNが最も多いセットアドレスSET1を取得する。次に、ステップS42において、キャッシュ情報変更部123は、取得したセットアドレスSET1以外のセットアドレスSETで示されるキャッシュブロック110のエントリENTに保持されたキャッシュ情報を削除する。例えば、キャッシュ情報変更部123は、キャッシュ情報を削除するウェイWのバリッドフラグVLDをリセットすることで、キャッシュ情報を削除する。
【0068】
次に、キャッシュ情報変更部123は、ステップS43からステップS46において、セットアドレスSET1に対応するキャッシュ情報を削除していないエントリENTのウェイW(W1-W4)を順に選択し、キャッシュ情報を更新する処理を実施する。
【0069】
まず、ステップS43において、キャッシュ情報変更部123は、選択したウェイWに保持されているタグアドレスTAGとデータDTとを取得して保持する。なお、ステップS43において、キャッシュ情報変更部123は、セットアドレスSET1に対応するエントリENTの全てのウェイW1-W4に保持されているタグアドレスTAGとデータDTとを取得して保持してもよい。この場合、ステップS44からステップS46を繰り返し実施することで、キャッシュ情報が更新される。
【0070】
次に、ステップS44において、キャッシュ情報変更部123は、セットアドレスSET1と選択したウェイWに保持されたタグアドレスTAGとから新たなセットアドレスNSETと新たなタグアドレスNTAGとを算出する。次に、ステップS45において、キャッシュ情報変更部123は、新たなセットアドレスNSETに対応するエントリENTに、新たなタグアドレスNTAGと、ステップS43で取得したデータDTとを格納する。次に、ステップS46において、キャッシュ情報変更部123は、選択したウェイWに保持されているキャッシュ情報を削除する。
【0071】
次に、ステップS47において、キャッシュ情報変更部123は、ミス回数更新部124にリセット指示RSTを出力し、図8に示す動作を終了する。
【0072】
なお、キャッシュ情報変更部123は、キャッシュブロック110に保持されている全てキャッシュ情報を削除してもよい。この場合、キャッシュ情報変更部123は、図8のステップS47のみを実施する。
【0073】
以上、この実施形態においても、図1および図2に示す実施形態と同様の効果を得ることができる。例えば、キャッシュミス回数CMNが閾値を超えた場合にセットアドレスSETの割り当てを変更することで、ストライドアクセス等により特定のエントリENTへの参照が集中する場合に、参照するエントリENTを分散させることができる。これにより、キャッシュヒット率の低下を抑制することができ、メモリアクセス効率を向上することができる。この結果、キャッシュメモリ100を搭載するプロセッサまたはシステムの処理性能を向上することができる。
【0074】
さらに、この実施形態では、キャッシュミス回数CMNが閾値を超えたエントリENTに保持されているデータDTを、新たなセットアドレスNSETに基づいてエントリENTのいずれかに格納する。これにより、キャッシュミス回数が閾値を超える前にエントリENTに保持されていたデータを再利用することができる。この結果、キャッシュヒット率の低下をさらに抑制することができ、メモリアクセス効率をさらに向上することができる。
【0075】
ミス回数保持部125に保持されたキャッシュミス回数CMNのインクリメントの制御をキャッシュ制御部121でなくミス回数更新部124に実施させる。また、セットビット位置SETBを保持するセットビット位置保持部122をキャッシュ制御部121の外部に配置する。これにより、既存のキャッシュ制御部に大幅な変更を加えることなく、キャッシュ制御部121を設計することができ、キャッシュメモリ100の設計期間を短縮することができる。
【0076】
図9は、別の実施形態におけるキャッシュメモリの動作の一例を示す。図4と同様の動作については、詳細な説明は省略する。図9の動作を実施するキャッシュメモリは、キャッシュ情報変更部123による変更処理が図4と相違し、ミス回数保持部125がセットアドレスSET1を出力しないことを除き、図3のキャッシュメモリ100と同様の構成および機能を有する。
【0077】
図4と同様に、メモリアクセスアドレスは、4ビットのタグアドレスTAGと2ビットのセットアドレスSETとを含む6ビットであり、ワードアドレスWDを含まないものとする。タグアドレスTAGおよびセットアドレスSETの初期状態および変更後の状態の割り当ては、それぞれ図4と同じである。初期状態において、ウェイW2-W4に保持されるタグアドレスTAGおよびデータDTの記載は省略されている。
【0078】
初期状態において、ミス回数更新部124は、エントリENTのいずれかでキャッシュミス回数CMNが閾値を超えたことを判定し、セットビット位置決定部126は、新たなセットビット位置NSETBを決定する。
【0079】
キャッシュ情報変更部123は、新たなセットビット位置NSETBの受信に基づいて、セットビット位置SETBの割り当ての変更の前後で保持するエントリENTが変わらないデータDTを除くデータDTを無効化する。図9に示す例では、データD1は、エントリENTがSET="00"からSET="01"に変わるため、無効化される。データD2は、エントリENTがSET="01"からSET="00"に変わるため、無効化される。
【0080】
一方、データD3、D4は、セットビット位置SETBの割り当ての変更の前後で保持されるエントリENTが変わらない。このため、キャッシュ情報変更部123は、データD3を保持するウェイW1のタグアドレスTAGを新たなタグアドレスTAGに変更し、データD4を保持するウェイW1のタグアドレスTAGを新たなタグアドレスTAGに変更する。そして、キャッシュ情報変更部123は、セットビット位置SETBの割り当ての変更に伴うキャッシュブロック110の変更処理を終了する。
【0081】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。例えば、キャッシュミス回数CMNが閾値を超えた場合にセットアドレスSETの割り当てを変更することで、キャッシュヒット率の低下を抑制することができ、メモリアクセス効率を向上することができる。
【0082】
さらに、この実施形態では、セットビット位置SETBの割り当ての変更の前後で保持するエントリENTが変わらないデータDTを削除せずにタグアドレスTAGを更新する。これにより、データDTを移動することなくキャッシュブロック110の変更処理を実施することができる。
【0083】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【0084】
10 キャッシュメモリ
20 キャッシュブロック
30 キャッシュメモリ制御回路
31 キャッシュ制御部
32 ミス回数保持部
33 セットビット位置変更部
100 キャッシュメモリ
110 キャッシュブロック
120 キャッシュメモリ制御回路
121 キャッシュ制御部
122 セットビット位置保持部
123 キャッシュ情報変更部
124 ミス回数更新部
125 ミス回数保持部
126 セットビット位置決定部
CLR 初期化指示
CMN キャッシュミス回数
DT データ、データ領域
ENT エントリ
INC 増加指示
INVLD 無効化指示
NSETB セットビット位置
OVR 超過情報
RST リセット指示
SET、SET1 セットアドレス
SETB ビット情報
TAG タグアドレス、タグ領域
USD 使用情報
VLD バリッドフラグ
W(W1-W4) ウェイ
図1
図2
図3
図4
図5
図6
図7
図8
図9