JP2016091242A - キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム - Google Patents

キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム Download PDF

Info

Publication number
JP2016091242A
JP2016091242A JP2014223770A JP2014223770A JP2016091242A JP 2016091242 A JP2016091242 A JP 2016091242A JP 2014223770 A JP2014223770 A JP 2014223770A JP 2014223770 A JP2014223770 A JP 2014223770A JP 2016091242 A JP2016091242 A JP 2016091242A
Authority
JP
Japan
Prior art keywords
information
sector
cache memory
area
set index
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2014223770A
Other languages
English (en)
Inventor
正俊 藤井
Masatoshi Fujii
正俊 藤井
久 日野原
Hisashi Hinohara
久 日野原
康弘 弓場
Yasuhiro Yuba
康弘 弓場
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014223770A priority Critical patent/JP2016091242A/ja
Priority to US14/877,011 priority patent/US20160124861A1/en
Publication of JP2016091242A publication Critical patent/JP2016091242A/ja
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory

Abstract

【課題】キャッシュメモリを有効活用する。【解決手段】キャッシュメモリは、キャッシュメモリ領域、変換情報記憶部、及び変換回路を備える。キャッシュメモリ領域では、複数のセットが複数のセクタに分割されている。変換情報記憶部は、セクタ内の相対的なセットインデックスをキャッシュメモリ領域におけるセットインデックスに変換するための変換情報を、複数のセクタのそれぞれについて記憶する。変換回路は、アクセス対象であるセクタを識別するセクタ識別情報と変換情報記憶部に記憶されている変換情報を用いて、セクタ識別情報が示すセクタ内での相対的なセットインデックスを、プロセッサがアクセスするキャッシュメモリ領域内のセットを示すセットインデックスに変換する。【選択図】図2

Description

本発明は、キャッシュメモリの制御に関する。
キャッシュメモリを有効に活用する方法として、例えば、キャッシュメモリ領域を、各々が少なくとも1つのキャッシュウェイを含む複数の分割領域に分割してプロセッサに利用させる方法が知られている。すると、プロセッサは、キャッシュクリア、プリフェッチ、データ格納などの処理をする場合に、キャッシュメモリ領域内の分割された分割領域を指定して使用できる。これにより、キャッシュメモリ領域の各分割領域を、用途に応じて使いわけることが可能となる。
図1は、キャッシュメモリの利用方法の例を説明する図である。図1は、キャッシュメモリ内のキャッシュメモリ領域110の例を示す。キャッシュメモリ領域110の各ます目は、キャッシュラインを示す。キャッシュメモリ領域110は複数(例えば4096個)のセットを含み、各セットは複数(例えば5個)のキャッシュラインを含む。1つのセットに含まれる複数のキャッシュラインは、互いに異なるキャッシュウェイに属する。図1では、各セットが1行に描かれており、各キャッシュウェイが1列に描かれている。
各キャッシュラインには、1〜3の数字が割り当てられている。1〜3の数字は、キャッシュラインを管理するための管理識別番号である。キャッシュメモリの利用方法として、図1には、5個のキャッシュウェイのうち、キャッシュウェイ2個に1という管理識別番号、キャッシュウェイ1個に2という管理識別番号、キャッシュウェイ2個に3という管理識別番号を割り当てる方法が例示されている。例えば、セット#1のウェイ#0とウェイ#1に管理識別番号1、セット#1のウェイ#2とウェイ#3に管理識別番号3、セット#1のウェイ#4に管理識別番号2、のように割り当てられる。これにより、キャッシュメモリ領域110全体を、複数の管理識別番号で識別される複数の分割領域に分類して管理することができるようになる。なお、それら複数の分割領域の各々のサイズは、キャッシュウェイのサイズの倍数である。図1の例によれば、キャッシュメモリ領域の各分割領域を、用途に応じて使いわけることが可能である。
キャッシュメモリを管理する方法として、プログラムからキャッシュメモリを制御する方法が知られている(例えば、特許文献1を参照)。
特開2009−163450号公報
ある用途の処理においてキャッシュメモリが使用される際に、当該処理に用いられるデータの合計サイズは、1つのキャッシュウェイのサイズよりも小さいことがある。キャッシュウェイのサイズよりも小さいサイズのデータが処理される場合、キャッシュウェイのサイズ以上のサイズを有する領域を上記用途に割り当てることは無駄である。そのため、キャッシュメモリの利用効率をより高める余地がある。
1つの側面において、本発明は、冗長な割り当てが行なわれるキャッシュメモリ領域の減少を図ることを目的とする。
キャッシュメモリは、キャッシュメモリ領域、変換情報記憶部、及び変換回路を備える。キャッシュメモリ領域では、複数のセットが複数のセクタに分割されている。変換情報記憶部は、セクタ内の相対的なセットインデックスを前記キャッシュメモリ領域内のセットインデックスに変換するための変換情報を、前記複数のセクタのそれぞれについて記憶する。変換回路は、アクセス対象であるセクタを識別するセクタ識別情報と前記変換情報記憶部に記憶されている前記変換情報を用いて、前記識別情報が示すセクタ内での相対的なセットインデックスを、プロセッサがアクセスする前記キャッシュメモリ領域内のセットを示すセットインデックスに変換する。
冗長な割り当てが行なわれるキャッシュメモリ領域の減少を図ることが可能となる。
キャッシュメモリの利用方法の例を説明する図である。 本実施形態に係るキャッシュメモリの機能的構成例を説明する図である。 本実施形態に係るアドレス情報の例を説明する図である。 変換情報の例(その1)を説明する図である。 キャッシュメモリを構成する回路の例(その1)を示す図である。 キャッシュメモリ領域の利用方法の例を説明する図である。 変換情報の例(その2)を説明する図である。 キャッシュメモリを構成する回路の例(その2)を示す図である。 未割り当て領域を纏める方法の例を説明する図である。 未割り当て領域情報と未割り当て領域数情報の例を説明する図である。 セクタ取得処理の例を説明する図である。 セクタ解放処理の例を説明する図である。 未割り当て領域を纏める処理の例を説明する図である。 セクタ取得処理の例(その1)を説明するフローチャートである。 セクタ取得処理の例(その2)を説明するフローチャートである。 セクタ解放処理の例(その1)を説明するフローチャートである。 セクタ解放処理の例(その2)を説明するフローチャートである。 未割り当て領域を纏める処理の例を説明するフローチャートである。
以下、図面を参照しながら、実施形態を詳細に説明する。
図2は、本実施形態に係るキャッシュメモリの機能的構成例を説明する図である。キャッシュメモリ200は、キャッシュメモリ領域210、変換情報記憶部220、変換回路230を備える。
キャッシュメモリ領域210は、複数のセットを含み、各セットは、少なくとも1つのキャッシュラインを含む。1つのセットに複数のキャッシュラインが含まれる場合、各キャッシュラインは、異なるキャッシュウェイに属する。キャッシュメモリ領域210では、複数のセットが複数の領域に分割されて使用される。以下、キャッシュメモリ領域210の分割された各領域を「セクタ」と称する。すなわち、複数のセットは複数のセクタにグループ化される。キャッシュメモリ領域210内の各セクタは、少なくとも1つのセットを含めばよい。図2の例では、キャッシュメモリ領域210は、セクタ#1〜セクタ#Nを備える。セクタ#1は、S個のセットを含む。セクタ#2は、S個のセットを含む。又、セクタ#Nは、S個のセットを含む。S〜Sで示される各セクタのセット数は、例えば、2のべき乗個であることが好ましい。なぜなら、後述の図4〜8の説明から分かるように、各セクタのセット数が2のべき乗である場合、キャッシュメモリ領域210の全体を有効に利用することが可能であり、かつ、変換回路230を簡素に構成することが可能であるためである。
変換情報記憶部220は、複数のセクタのそれぞれに対応する変換情報を記憶する。変換情報は、セクタ内の相対的なセットインデックスを、キャッシュメモリ領域210内のセットインデックス(つまり、キャッシュメモリ領域210全体での絶対的なセットインデックス)に変換するための情報である。セクタ内の相対的なセットインデックスは、具体的には、アドレス情報310に含まれる。
アドレス情報310は、プロセッサ(より具体的には、プロセッサコア内の命令実行回路)から主記憶装置へのアクセス要求(例えば、ロード命令、ストア命令など)に含まれる。より具体的には、本実施形態のアドレス情報310は、セクタ識別情報(セクタID)311、タグ312、タグ313、相対セットインデックス314、ライン内アドレス315を含む。セクタIDのIDは、identificationの略である。タグ312、タグ313、相対セットインデックス314、およびライン内アドレス315の組み合わせは、主記憶装置のアドレスを示す。主記憶装置へのアクセスでは、セクタ識別情報311は使用されない。
セクタ識別情報311は、セクタを識別するために用いられる一意の情報である。セクタ識別情報311により、セクタ#1〜セクタ#Nのうちの、アクセス対象であるセクタが識別される。タグ312とタグ313は、プロセッサ(より具体的には命令実行回路)のアクセス対象であるセットからキャッシュラインが検索される際に用いられるタグである。相対セットインデックス314は、アクセス対象のセットを示すインデックスで、具体的には、セクタ識別情報311が示すセクタ内で何番目のセットがアクセス対象のセットなのかを示す。ライン内アドレス315は、アクセス対象であるデータの、キャッシュライン内でのアドレスである。ライン内アドレス315により、キャッシュライン内のデータが特定される。
変換情報記憶部220には、セクタ#1〜セクタ#Nに対応した変換情報が記憶されている。変換情報は、各セクタの先頭のセットインデックスを含んでいてもよい。
変換回路230は、セクタ識別情報311と変換情報を用いて、セクタ識別情報311が示すセクタ内での相対セットインデックス314を、プロセッサがアクセスするキャッシュメモリ領域210内のセットを示すセットインデックスに変換する。より具体的には、変換回路230は、アドレス情報310内のセクタ識別情報311と変換情報とから、プロセッサがアクセス対象とするセクタの先頭のセットを示す先頭セットインデックスを求める。変換回路230は、相対セットインデックス314と先頭セットインデックスとを組み合わせることで、相対セットインデックス314を、プロセッサがアクセスするキャッシュメモリ領域210内のセットを示すセットインデックスに変換する。この処理により、アクセス対象のキャッシュメモリ領域210内のセットを示すセットインデックスが特定される。
ところで、キャッシュメモリ200は、図2には不図示のタグ情報記憶部(タグアレイ)と比較回路とを更に備えていてもよい。後述の図5には、タグ情報記憶部の例としてタグテーブル250が示されており、比較回路の例としてコンパレータ251a〜251dが示されている。タグ情報記憶部と比較回路を設けることにより、ダイレクトマップ方式の(direct-mapped)キャッシュメモリだけでなく、セットアソシエイティブ方式の(set-associative)キャッシュメモリにおいても、複数のセクタへの分割が可能となる。
タグ情報記憶部は、キャッシュメモリ領域210に関する第1のタグ情報を記憶する。第1のタグ情報は、具体的には、個々のセット内でキャッシュラインを識別するタグを1つ以上含む。以下では説明の便宜上、主記憶装置のアドレスのうち、相対セットインデックス314とライン内アドレス315以外の部分(すなわち、タグ312とタグ313の組み合わせ)を、第2のタグ情報ともいう。比較回路は、第2のタグ情報を第1のタグ情報と比較する。比較結果にしたがって、適宜のキャッシュラインがアクセスされる。具体的には、変換回路230により得られたセットインデックスにより識別されるセットにおいて、第2のタグ情報と一致するタグで示されるキャッシュラインの中の、ライン内アドレス315で示されるデータが、アクセスされる。
第2のタグ情報は、具体的には、変換回路230から比較回路に入力されてもよい。具体的には、変換回路230は、アドレス情報310から相対セットインデックス314とライン内アドレス315を除いた部分である第2のタグ情報(つまり、タグ312とタグ313の組み合わせ)を抽出してもよい。そして、変換回路230は、抽出した第2のタグ情報を比較回路に出力してもよい。
ここで、アドレス情報310における、タグ312のサイズ、タグ313と相対セットインデックス314とを合わせた部分のサイズ、ライン内アドレス315のサイズは、予め定められている。相対セットインデックス314のサイズは、セクタごとに任意に決められてよい。すると、タグ313のサイズは、相対セットインデックス314のサイズによって可変である。
キャッシュメモリ領域210に含まれるセットの数は任意だが、キャッシュウェイの数に比べてセットの数が十分に多いものとする。したがって、図2のようにキャッシュメモリ領域210をセット単位で分割することで、例えば図1のように、キャッシュウェイ単位で分割する場合よりも小さい領域にキャッシュメモリ領域210を分割することが可能となる。すなわち、本実施形態によれば、より細かい粒度での分割が可能となる。これにより、キャッシュクリア、プリフェッチ、データ格納処理などにおいてキャッシュメモリ領域210を使用する際には、キャッシュウェイ単位よりも容量の小さいセット単位で、キャッシュメモリ領域210を使用することが可能となる。その結果、キャッシュメモリ領域210をより有効に活用することが可能となる。
図3は、本実施形態に係るアドレス情報の例を説明する図である。以降、プロセッサが主記憶装置にアクセスする際に用いられるアドレスのアドレス空間を、例えば、32ビットで表される空間であるものとする。また、キャッシュメモリ領域210では、セット数が4096(=212)個であり、キャッシュラインサイズが256(=2)バイトであるものとする。なお、アドレス情報は、2進数で表される。
すると、ライン内アドレス315のサイズは、キャッシュラインサイズである256(=2)バイトに基づいて、8ビットである。また、12ビットのセットインデックスを用いることにより、4096個のセットに含まれる1つのセットを特定することが可能である。本実施形態では、12ビットのセットインデックスの代わりに、タグ313と相対セットインデックス314が用いられる。なお、タグ313と相対セットインデックス314とを合わせた部分の長さは12ビットであり、この部分により示されるアドレス空間のサイズは4096である。32ビットのうち、残りの12ビットは、タグ312に用いられる。
タグ313と相対セットインデックス314とを合わせた部分が示すアドレス空間は、12ビットという固定のビット数で表されるものの、相対セットインデックス314を表すビットの数は、アクセス対象となるセクタに含まれるセットの数によって異なる。例えば、キャッシュメモリ領域210がいくつかのセクタに分割されており、アクセス対象のセクタが1024(=210)個のセットを含む場合、相対セットインデックス314は10ビットを使用する。そのため、タグ313は、残りの2ビットを使用する。
図4は、変換情報の例(その1)を説明する図である。変換情報は、セクタ内の相対的なセットインデックスを、キャッシュメモリ領域210内のセットインデックスに変換するための情報である。変換情報221に含まれるセクタ識別情報は、セクタを識別するために用いられる一意の情報である。変換情報221の例は、セクタ#1〜セクタ#4に対応するセクタ識別情報「00」〜「11」を含む。なお、図4の例において、「00」というセクタ識別情報で識別されるセクタ#1は、キャッシュメモリ領域210内の先頭のセットから512個目のセットまでを含むものとする。「01」というセクタ識別情報で識別されるセクタ#2は、セクタ#1に含まれるセットの次のセットから512個目のセットまでを含むものとする。「10」というセクタ識別情報で識別されるセクタ#3は、セクタ#2に含まれるセットの次のセットから1024個目のセットまでを含むものとする。「11」というセクタ識別情報で識別されるセクタ#4は、セクタ#3に含まれるセットの次のセットから2048個目のセットまでを含むものとする。変換情報221は、各セクタ識別情報に対応したサブマスク情報及びオフセット情報を含む。
サブマスク情報は、アドレス情報310に含まれるタグ313と相対セットインデックス314から、相対セットインデックス314を抽出するために用いられる。サブマスク情報は、12桁(12ビット)に含まれるタグ313と相対セットインデックス314の内の相対セットインデックス314を示す桁部分を有効化した、12ビットの情報である。セクタ#1とセクタ#2は、512セットを含むセクタであるため、セクタ#1とセクタ#2用の相対セットインデックス314は、9桁(9ビット)の情報で表される。つまり、タグ313と相対セットインデックス314を含む12桁の情報のうち、下9桁が、相対セットインデックス314に該当する。そのため、セクタ#1やセクタ#2に対応するサブマスク情報の12桁のうち下9桁には1が設定されている。また、セクタ#3に対応するサブマスク情報の12桁のうち下10桁には1が設定されており、セクタ#4に対応するサブマスク情報の12桁のうち下11桁には1が設定されている。タグ313と相対セットインデックス314の12桁の情報と、サブマスク情報との論理積を取ることで、相対セットインデックス314を抽出可能となる。
オフセット情報は、相対セットインデックス314からキャッシュメモリ領域210内のセットインデックスを求めるために用いられる。相対セットインデックス314は、各セクタの先頭のセットから何番目のセットがアクセス対象のセットなのかを示す。オフセット情報は、各セクタの先頭のセットのセットインデックスを示す12ビットの情報である。例えば、セクタ#2の先頭のセットは、セット#512であるため、オフセット情報は、2進数で(001000000000)である。抽出された相対セットインデックス314と、オフセット情報との論理和を取ることで、キャッシュメモリ領域210内のセットインデックスを求めることができる。
図5は、キャッシュメモリを構成する回路の例(その1)を示す図である。キャッシュメモリ200は、キャッシュメモリ領域210、マルチプレクサ241、マルチプレクサ242、変換情報記憶部220、変換回路230、タグテーブル250、コンパレータ251a〜251d、選択回路252を備える。図5のキャッシュメモリ200において、図2と同じ構成要素には、図2と同じ符号を付す。また、コンパレータ251a〜251dをまとめて「コンパレータ251」と称する。
キャッシュメモリ領域210や変換情報記憶部220は、例えば、SRAM(Static Random Access Memory)により実現されてもよい。SRAM等の揮発性メモリにより変換情報記憶部220が実現される場合、キャッシュメモリ200に電力が供給されると、変換情報を記憶する不図示の不揮発性メモリから、変換情報が読み出されて変換情報記憶部220に書き込まれる。タグテーブル250は、例えば、CAM(Content Addressable Memory)により実現されてもよい。
主記憶装置へのアクセスを伴う命令をプロセッサ(具体的には命令実行回路)が実行しようとする際、命令に含まれるアドレス情報310がキャッシュメモリ200に入力される。そして、アドレス情報310に含まれるセクタ識別情報311に応じて、変換情報記憶部220に記憶されている変換情報が読み出される。読み出される変換情報は、オフセット情報及びサブマスク情報である。マルチプレクサ241には、変換情報記憶部220に記憶されている各オフセット情報とセクタ識別情報311が入力される。マルチプレクサ241は、入力されたセクタ識別情報311に対応するオフセット情報を選択し、選択したオフセット情報を変換回路230に出力する。マルチプレクサ242には、変換情報記憶部220に記憶されている各サブマスク情報とセクタ識別情報311が入力される。マルチプレクサ242は、入力されたセクタ識別情報311に対応するサブマスク情報を選択し、選択したサブマスク情報を変換回路230に出力する。
変換回路230は、AND回路231、OR回路232、AND回路233、OR回路234、NOT回路235、ビットシフト回路236を備える。AND回路231とOR回路232は、アドレス情報310からアクセス対象のキャッシュメモリ領域210内のセットを示すセットインデックスを特定するために用いられる。
AND回路231は、マルチプレクサ242から出力されたサブマスク情報と、タグ313と相対セットインデックス314を含む12ビットのデータ316との論理積をとる。AND回路231は、論理積の結果として、12ビットのデータ316から抽出される相対セットインデックス314を、OR回路232に出力する。より正確には、AND回路231は、上位ビットが適宜「0」でパディングされて12ビットで表された相対セットインデックス314を、OR回路232に出力する。
OR回路232は、マルチプレクサ241から出力されたオフセット情報と、AND回路231で抽出された相対セットインデックス314との論理和をとる。OR回路232は、論理和の結果として、アクセス対象のキャッシュメモリ領域210内のセットを示すセットインデックスを出力する。このように、変換情報221が各セクタの先頭のセットインデックス(すなわち各セクタのオフセット情報)を含む場合、OR回路232のような簡単な回路によって相対セットインデックス314を絶対的なセットインデックスに変換することが可能となる。
NOT回路235は、マルチプレクサ242から出力されたサブマスク情報の各ビットを反転する。すなわち、NOT回路235は、「0」を「1」に変換し、「1」を「0」に変換する。NOT回路235は、サブマスク情報の「0」と「1」を反転させた情報を、AND回路233に出力する。サブマスク情報の「0」と「1」が反転された情報では、サブマスク情報の12ビットの内、タグ313に該当するビットの部分が「1」となっており、残りの部分が「0」となっている。
AND回路233は、NOT回路235から出力された情報と、タグ313と相対セットインデックス314を含む12ビットのデータ316との論理積をとる。AND回路233は、論理積の結果として、12ビットのデータ316から抽出されるタグ313をOR回路234に出力する。より正確には、AND回路233は、下位ビットが適宜「0」でパディングされて12ビットで表されたタグ313を、OR回路234に出力する。
ビットシフト回路236は、タグ312が入力されると、タグ312のビット数に、タグ313と相対セットインデックス314のビット数に該当する12ビットを加えるために、ビットシフトをする。ビットシフトの結果として、タグ312の後ろに、12ビットの「0」がつけられ、24ビットの結果情報が得られる。
OR回路234は、ビットシフト回路236から出力されたビットシフトの結果情報と、AND回路233で抽出されたタグ313との論理和をとる。より正確には、OR回路234は、ビットシフト回路236から出力された24ビットの結果情報と、下位ビットが適宜「0」でパディングされて12ビットで表されたタグ313の先頭に12ビットの「0」を連結した24ビットの情報との論理和をとる。OR回路234は、論理和の結果として、タグ312とタグ313とを連結したタグ317を出力する。より正確には、OR回路234は、下位ビットが適宜0でパディングされて24ビットで表されたタグ317を出力する。
タグテーブル250は、キャッシュメモリ領域210の各セットに対応するタグ情報を記憶する。1つのセットに対応するタグ情報は複数のタグを含み、各タグは24ビットで表される。上記のとおり、タグテーブル250は、例えばCAMにより実現されてもよい。よって、OR回路232からセットインデックスがタグテーブル250へと出力されるのに応じて、出力されたセットインデックスにより識別されるセットに対応するタグ情報が、タグテーブル250からコンパレータ251へと出力される。
したがって、コンパレータ251は、OR回路232で求められたセットインデックスで識別されるセットに対応するタグ情報をタグテーブル250から読み出すことができる。コンパレータ251は、1つのセットに対応してタグテーブル250に記憶されるタグの数と同じ数が設置される。すなわち、コンパレータ251の数は、キャッシュメモリ領域210の1つのセットに含まれるキャッシュラインの数に等しく、換言すれば、キャッシュウェイの数に等しい。1つのコンパレータ251は、タグ情報に含まれる複数のタグのうち、当該コンパレータ251に対応する1つのタグを読み出す。各コンパレータ251(すなわち、コンパレータ251a〜251dの各々)は、タグテーブル250から取得したタグと、OR回路234から出力されるタグ317とが一致するかを判定する。
選択回路252は、各コンパレータ251(コンパレータ251a〜コンパレータ251dの各々)から、判定結果を受け取る。選択回路252は、OR回路232から出力されるセットインデックスで識別されるセットの中から1つのキャッシュラインを選択するための選択信号を、受け取った判定結果に応じて出力する。換言すれば、選択回路252は、キャッシュウェイを指定するための選択信号を出力する。
図5の例では、コンパレータ251cに出力されるタグテーブル250内のタグとタグ317とが一致するものとする。これにより、キャッシュメモリ領域210内のアクセス対象のキャッシュラインが、左側から3番目のキャッシュラインである、と特定される。また、図5の例では、OR回路232から出力されるセットインデックスで識別されるアクセス対象のセットは、キャッシュメモリ領域210内の上から3番目のセットであるものとする。プロセッサ(具体的には命令実行回路)は、上から3番目のセット内で上記のように特定された左側から3番目のキャッシュラインの、ライン内アドレス315にアクセスする。なお、キャッシュミスが発生した場合に、キャッシュメモリ200は、Least Recently Used(LRU)などのアルゴリズムを用いて、アクセスの少ないキャッシュラインの入れ替え(リフィル)処理を行う。
図5のキャッシュメモリ200の回路を用いることで、キャッシュメモリ領域210をセット単位で分割して活用することが可能となる。キャッシュメモリ領域210に含まれるセットの数は任意だが、キャッシュウェイの数の数に比べてセットの数が十分に多いものとする。したがって、キャッシュメモリ領域210をセット単位で分割することで、キャッシュウェイ単位で分割する場合よりも小さい領域にキャッシュメモリ領域210を分割することが可能となる。すなわち、本実施形態によれば、より細かい粒度での分割が可能となる。これにより、キャッシュクリア、プリフェッチ、データ格納処理などにおいてキャッシュメモリ領域210を使用する際には、キャッシュウェイ単位よりも容量の小さいセット単位で、キャッシュメモリ領域210を使用することが可能となる。その結果、キャッシュメモリ領域210をより有効に活用することが可能となる。
<非連続のセットをセクタとして使用する方法>
図6は、キャッシュメモリ領域の利用方法の例を説明する図である。非連続のセットを、1つのセクタとして利用するキャッシュメモリ領域の利用方法を、以下で説明する。キャッシュメモリ領域400は、ブロック401a〜401dを含む。以下では、ブロック401a〜401dを区別せずに「ブロック401」と称することがある。ブロック401a〜401dは、連続して配置されるのではなく、非連続に配置されている。本実施形態に係るキャッシュメモリ領域400では、4つのブロック401(ブロック401a〜ブロック401d)が1つのセクタとして利用される。キャッシュメモリ領域が、複数のセクタを含む場合、各セクタは、共通の数(例えば4つ)のブロックに分割して利用される。なお、各セクタの分割数は、予め設定されているものとする。詳しくは後述するとおり、所定の分割数のブロックのうち2つ以上のブロックが連続して配置される場合もあり得る。各セクタは、2のべき乗個のセットを含み、その領域のセット数の倍数となるアドレス位置から必ず開始されているという条件を満たす(アラインメント条件とする)。アラインメント条件は、セクタに対してセットを効率的に割り当てるために課す制約条件である。512個のセットを含むセクタの各ブロック401(ブロック401a〜401dの各々)は、128個のセットを含む。
図7は、変換情報の例(その2)を説明する図である。変換情報410及び変換情報420は、セクタ内の相対的なセットインデックスを、キャッシュメモリ領域400内のセットインデックスに変換するための情報である。変換情報410の例は、セクタ#1〜セクタ#4に対応するセクタ識別情報「00」〜「11」を含む。
なお、図7の例において、「00」と「01」というセクタ識別情報でそれぞれ識別されるセクタ#1とセクタ#2の各々は、キャッシュメモリ領域400内の512個のセットを含むものとする。「10」というセクタ識別情報で識別されるセクタ#3は、キャッシュメモリ領域400内の1024個のセットを含むものとする。「11」というセクタ識別情報で識別されるセクタ#4は、キャッシュメモリ領域400内の2048個のセットを含むものとする。
変換情報410は、各セクタ識別情報に対応したサブマスク情報及びブロックマスク情報を含む。なお、図7のセクタ識別情報は、2ビットの情報で表されているものの、各セクタを識別可能な情報であれば、セクタ識別情報は、より長いビット長を有する別の情報でもよい。
サブマスク情報は、アドレス情報310に含まれるタグ313と相対セットインデックス314から、相対セットインデックス314を抽出するために用いられる。サブマスク情報は、12桁(12ビット)に含まれるタグ313と相対セットインデックス314の内の、相対セットインデックス314を示す桁部分を有効化した、12ビットの情報である。セクタ#1とセクタ#2は、512セットを含むセクタであるため、セクタ#1とセクタ#2の相対セットインデックス314は、9桁(9ビット)の情報で表される。つまり、タグ313と相対セットインデックス314の12桁の情報のうち、下9桁が、相対セットインデックス314に該当する。そのため、セクタ#1やセクタ#2に対応するサブマスク情報の12桁のうち下9桁には1が設定されている。また、セクタ#3に対応するサブマスク情報の12桁のうち下10桁には1が設定されており、セクタ#4に対応するサブマスク情報の12桁のうち下11桁には1が設定されている。タグ313と相対セットインデックス314の12桁の情報と、サブマスク情報との論理積を取ることで、相対セットインデックス314を抽出可能となる。
ブロックマスク情報は、セクタが何個のブロックに分割されているかを示した情報を含む12桁(12ビット)の情報である。ブロックマスク情報と、アドレス情報310に含まれる12ビットのデータ316(つまりタグ313と相対セットインデックス314を合わせた部分)との論理積を取ることで、アクセス対象であるブロック401を示すブロック識別情報を抽出可能となる。1つのセクタ内において、ブロック401a〜ブロック401dの各々は、ブロック識別情報により一意に識別される。512(=2)個のセットを含むセクタ#1では、タグ313が3(=12−9)ビットで、相対セットインデックス314が9ビットとなる。すると、論理積の演算において、ブロックマスク情報の上3桁がタグ313との演算に用いられ、ブロックマスク情報の下9桁が相対セットインデックス314との演算に用いられる。相対セットインデックス314との論理積の演算により得られる9ビットのうちの2ビットが、ブロック識別情報に該当する。
セクタが何個のブロックに分割されているかを示した情報を、以下では「分割数情報」ともいう。分割数情報は、分割数を表すビットパターンである。分割数は、全セクタ共通である。
より詳しくは、分割数は、予め決められており、2のべき乗である。分割数情報は、分割数に応じた長さのビットパターンで表される。例えば、分割数が2(=2)の場合、分割数情報は1ビットの「1」である。また、分割数が4(=2)の場合、分割数情報は2ビットの「11」である。すなわち、分割数が2の場合、分割数情報はD個の「1」が並んだビットパターンである(なお、Dは1以上の所定の整数である)。分割数が2の場合、2個のブロックに分割されるセクタがあってもよく、ブロックに分割されないセクタがあってもよい。なお、2個のブロックのうちの2つ以上がたまたま連続していてもよい。つまり、見かけ上、2個未満の個数のブロックに分割されているセクタがあってもよい。ブロックに分割されないセクタは、連続する2個のブロックに分割されている、とも見なせる。
図7の例では、セクタ#1〜セクタ#4の各々が4分割される。したがって、セクタ#1〜セクタ#4に関する分割数情報は、どれも「11」である。セクタ#1において、「11」という分割数情報は、相対セットインデックス314との計算に用いられるブロックマスク情報の下9桁のうちの先頭の2ビットに設定される。そのため、セクタ#1のブロックマスク情報には、「000110000000」が設定されている。このように、ブロックマスク情報は、分割数情報以外のビット部分には、「0」が設定される。セクタ#2において、「11」という分割数情報は、相対セットインデックス314との計算に用いられるブロックマスク情報の下9桁のうちの先頭の2ビットに設定される。そのため、セクタ#2のブロックマスク情報には、「000110000000」が設定されている。セクタ#3において、「11」という分割数情報は、相対セットインデックス314との計算に用いられるブロックマスク情報の下10桁のうちの先頭の2ビットに設定される。そのため、セクタ#3のブロックマスク情報には、「001100000000」が設定されている。セクタ#4において、「11」という分割数情報は、相対セットインデックス314との計算に用いられるブロックマスク情報の下11桁のうちの先頭の2ビットに設定される。そのため、セクタ#4のブロックマスク情報には、「011000000000」が設定されている。
以上のとおり、あるセクタのセット数が2であり、かつ、当該セクタが2個のブロックに分割される場合、当該セクタのブロックマスク情報は、(12−M)個の「0」と、D個の「1」と、(M−D)個の「0」が並んだ、12ビットの情報である。
変換情報420は、ブロック識別情報と、各ブロックの先頭のセットのセットインデックスを示すオフセット情報を含む。図8に示す変換情報記憶部220aは、セクタ毎の変換情報420を記憶する。そのため、変換情報記憶部220aは、変換情報410内のセクタ識別情報の「00」〜「11」の各々に対応づけて変換情報420(変換情報420a〜420d)を記憶している。以下では、変換情報420a〜420dを区別せずに「変換情報420」と称することがある。
変換情報420に含まれるブロック識別情報は、1つのセクタ内で各ブロック401を識別するための情報である。分割数が2の場合、ブロック識別情報はDビットで表される。一方、上記のとおりデータ316からブロック識別情報を抽出することが可能であり、抽出されたブロック識別情報に対応するオフセット情報が使われる。具体的には、ブロック識別情報は、変換情報410のブロックマスク情報と、アドレス情報310に含まれるタグ313と相対セットインデックス314との論理積の結果から、一部の情報を抽出することで求められる。論理積の結果から抽出される一部の情報は、ブロックマスク情報のうちの分割数情報を示すビット部分(2ビット)の論理積の結果である。より具体的には、論理積の結果から抽出される一部の情報は、ブロックマスク情報内の分割数情報を示すビット部分(2ビット)と、相対セットインデックス314の先頭2ビットの論理積の結果である。
抽出されたブロック識別情報に対応するブロックのオフセット情報が、変換情報420に基づいて選択され、変換回路230に提供される。変換回路230は、オフセット情報を用いて、相対セットインデックス314を、キャッシュメモリ領域400内のセットを示すセットインデックスに変換する。
図8は、キャッシュメモリを構成する回路の例(その2)を示す図である。図8のキャッシュメモリ200aにおいて、図5と同じ構成要素には、図5と同じ符号を付す。図8のキャッシュメモリ200aは、図4の変換情報221を記憶する図5の変換情報記憶部220の代わりに、図7の変換情報410及び変換情報420を記憶する変換情報記憶部220aを備える。また、図8のキャッシュメモリ200aは、図5のマルチプレクサ241の代わりにマルチプレクサ246を備える。キャッシュメモリ200aは更に、マルチプレクサ243、AND回路244、及び抽出部245を備える。
なお、図7のキャッシュメモリ領域400は、その使用方法において(つまり、セクタが複数のブロックに分割されるか否かという点において)、図2及び図5のキャッシュメモリ領域210と異なる。しかし、図7のキャッシュメモリ領域400は、物理的には、図2及び図5のキャッシュメモリ領域210と同じであってよい。例えば、図5のキャッシュメモリ領域210と同様に、図7のキャッシュメモリ領域400も、SRAMにより実現されてもよく、4096個のセットを含んでいてもよい。そのため、図8では、「400」ではなく「210」という参照符号がキャッシュメモリ領域に付与されている。
主記憶装置へのアクセスを伴う命令をプロセッサ(具体的には命令実行回路)が実行しようとする際、命令に含まれるアドレス情報310がキャッシュメモリ200aに入力される。そして、アドレス情報310に含まれるセクタ識別情報311に応じて、変換情報記憶部220aに記憶されている変換情報410と変換情報420が読み出される。読み出される変換情報は、ブロックマスク情報、サブマスク情報、及びオフセット情報である。
マルチプレクサ243には、変換情報記憶部220aに記憶されている各ブロックマスク情報と、セクタ識別情報311が入力される。マルチプレクサ243は、入力されたセクタ識別情報311に対応するブロックマスク情報を選択し、選択したブロックマスク情報をAND回路244に出力する。
AND回路244は、マルチプレクサ243から出力されたブロックマスク情報と、タグ313と相対セットインデックス314を含む12ビットのデータ316との論理積をとる。AND回路244は、論理積の結果を抽出部245に出力する。
抽出部245は、AND回路244の論理積の結果から、ブロック識別情報を抽出する。例えば、図7の例では、分割数が4なのでブロック識別情報は2ビットで表される。したがって、抽出部245は、AND回路244から出力された12ビットの中から、ブロック識別情報を示す2ビットを抽出する。なお、12ビット中におけるブロック識別情報の先頭のビット位置を検出するために、抽出部245には、マルチプレクサ242により選択されたサブマスク情報が入力される。
実施形態によっては、AND回路244が抽出部245の中に含まれていてもよい。図8のようにAND回路244が抽出部245の外部にある場合、ブロック識別情報のビット長を検出するために、抽出部245には、マルチプレクサ243により選択されたブロックマスク情報がさらに入力されてもよい。ただし、分割数が固定されている場合、ブロック識別情報のビット長も固定されているので、抽出部245へのブロックマスク情報の入力が省略されてもよい。
いずれにせよ、抽出部245は、抽出したブロック識別情報をマルチプレクサ246に出力する。
マルチプレクサ246には、変換情報記憶部220aに記憶されているオフセット情報と、抽出部245から出力されたブロック識別情報と、セクタ識別情報311が入力される。マルチプレクサ246は、入力されたセクタ識別情報311とブロック識別情報の組み合わせに対応するオフセット情報を選択し、選択したオフセット情報を変換回路230に出力する。例えば、セクタ識別情報311が「01」でブロック識別情報が「10」の場合、マルチプレクサ246は、変換情報420bに含まれるオフセット情報のうち、「10」というブロック識別情報に対応するオフセット情報を出力する。
マルチプレクサ246は、物理的には複数のマルチプレクサにより実現されてもよい。例えば、セクタ識別情報311を選択信号として用いるマルチプレクサが、分割数2と同数あってもよい。この場合、これら2個のマルチプレクサの各々には、N個の異なるセクタにおいて同じブロック識別情報で識別されるN個のブロックに対応するN個のオフセット情報が入力される。また、これら2個のマルチプレクサの出力のうちの1つをブロック識別情報に応じて選択するもう一つのマルチプレクサを更に設けることにより、図8のマルチプレクサ246が実現される。
図8のキャッシュメモリ200においても、変換回路230には、図5と同様の情報(すなわち、マルチプレクサ246からの出力、マルチプレクサ242からの出力、タグ312、及びデータ316)が入力される。そのため、非連続のセットをセクタとして使用するキャッシュメモリにおいても、キャッシュメモリ領域をセット単位で分割して活用することが可能となる。
本実施形態によれば、非連続に配置された複数のブロックを1つのセクタとして利用することができる。そのため、1つのセクタ用に使いたい所望の数のセットがたとえ連続していなくても、所望の数のセットを含むセクタが利用可能となる。換言すれば、非連続のブロックを利用することで、より効率的にキャッシュメモリ領域を使うことが可能となる。また、各ブロックの先頭のセットインデックス(すなわち各ブロックのオフセット情報)を含む変換情報420を使うことで、OR回路232のような簡単な回路によって相対セットインデックス314を絶対的なセットインデックスに変換することが可能となる。
キャッシュメモリ領域のセット数は、キャッシュウェイの数よりも多い。そのため、複数のセットをセット単位で複数のセクタに分割する場合(例えば図2〜8を参照)の方が、複数のセットをキャッシュウェイ単位で複数の分割領域に分割する場合(例えば図1を参照)よりも、分割可能な数が多くなる。上記の各実施形態は、1次キャッシュ(L1キャッシュ)、2次キャッシュ(L2キャッシュ)のどちらにも適用可能である。しかし、セット数が多い2次キャッシュに上記の各実施形態を適用するほうが、より顕著な効果が得られる。
各セットのサイズは、キャッシュウェイの数のキャッシュラインの領域サイズの合計に等しい。一方、各キャッシュウェイのサイズは、セット総数のキャッシュラインの領域サイズの合計に等しい。セット総数は、キャッシュウェイの数よりも多いため、各セットの領域サイズは、各キャッシュウェイのサイズよりも小さい。そのため、キャッシュメモリ領域をセット単位で分割することで、キャッシュウェイ単位で分割するよりも、より小さい単位で領域を利用可能となる。すなわち、上記の各実施形態によれば、個々のセクタのサイズをより細かい粒度で設定することが可能となる。
例えば図1のようにキャッシュメモリ領域をキャッシュウェイ単位で複数の分割領域に分割した場合、各セットでは、全てのキャッシュウェイを利用できるとは限らない。更に、より多くの分割領域にキャッシュメモリ領域を分割すると、1つの分割領域あたりのキャッシュウェイの数は少なくなる。そのため、同じセットに複数のキャッシュヒットがあると、スラッシングが多発することが考えられる。一方、上記の各実施形態における各セットでは、キャッシュメモリ領域に含まれる全キャッシュウェイを利用可能である。そのため、上記の各実施形態のように、キャッシュメモリ領域をセット単位で分割することで、スラッシングの多発を抑止できる。上記の各実施形態における各セットは、キャッシュメモリ領域に含まれる全キャッシュウェイを利用可能であるため、アクセスが集中しやすいデータの専用領域として利用することにも向いている。
キャッシュウェイ単位で複数の分割領域に分割されているキャッシュメモリ領域で、新しく分割領域を確保する場合には、全セットで、既存のデータが上書されることで新たな分割領域が確保される。そのため、各分割領域のデータは、他分割領域に係る処理に干渉される恐れがある。一方、上記の実施形態によれば、セクタ同士は、セット単位で明確に区切られている。そのため、新しいセクタを確保する処理に伴って、他のセクタ用に使われているセットで既存のデータを上書きする処理(例えばLRUといったアルゴリズムによって一番古いデータを上書きする処理)が行われることはない。そのため、上記の実施形態によるセクタは、アクセスが集中しやすいデータの専用領域として利用することに向いている。
キャッシュメモリ領域の用途によっては、キャッシュデータを退避したい場合もある。キャッシュメモリ領域をキャッシュウェイ単位で複数の分割領域に分割していると、退避させたいデータは、キャッシュメモリ領域内の全セットに分散されて記憶されている可能性がある。そのため、ある分割領域のデータを退避させたい場合、全キャッシュメモリ領域を全探索する処理が行われる。更に、探索が行われている最中にもキャッシュラインが更新される可能性もある。一方、上記の各実施形態では、セクタ又はブロック内の連続したセットにデータが格納されている。そのため、退避させたいキャッシュデータの格納位置(すなわち、退避させたいキャッシュデータが格納されているセットの範囲)は、変換情報から容易に特定される。また、特定された範囲のセットに対するアクセスのみを禁止すれば、退避させたいキャッシュデータが退避処理中に更新されることを防げる。よって、比較的簡易にキャッシュデータの退避が可能である。
例えば図1のように、キャッシュメモリ領域がキャッシュウェイ単位で複数の分割領域に分割される比較例においては、キャッシュメモリは、管理回路と管理用のSRAMを備える。管理回路は、キャッシュメモリ領域をキャッシュウェイ単位で分割し、各キャッシュウェイを管理するための回路である。管理用のSRAMは、各セットの所属するキャッシュウェイの識別情報などを記憶する。なお、キャッシュウェイの数が多くなるほど、SRAM及び管理回路の規模は大きくなる。これに対し、上記の各実施形態によれば、少数のAND回路やOR回路、少量の変換情報を記憶するための記憶部などを備えることで、キャッシュメモリ領域を複数のセクタに分割することが可能となる。また、上記の各実施形態によれば、分割数が増えたとしても、回路の規模がそれほど大きくはならない。
<キャッシュメモリ制御プログラム>
プロセッサで様々なプログラムが実行されると、各プログラムが使用するデータには、キャッシュメモリ領域の一部の領域が割り当てられる。プログラムが使用するデータに割り当てられる領域のサイズは、小さい領域から大きい領域まで様々なサイズである可能性がある。小さい領域から大きい領域まで様々なサイズ領域の割り当てに対応するためには、データが格納されておらず、かつ、連続するセットの数が多い領域があることが望ましい。以下において、データが格納されていない、連続する複数のセットを含む領域を、「未割り当て領域」と称する。
図9は、未割り当て領域を纏める方法の例を説明する図である。図9のキャッシュメモリ領域500は、未割り当て領域501、使用済み領域502、使用済み領域503、未割り当て領域504を含む。未割り当て領域501、使用済み領域502、使用済み領域503、未割り当て領域504は、同じサイズ(セット数)のブロックである。未割り当て領域501と未割り当て領域504は、データが格納されていないセットのみを含む領域である。使用済み領域502と使用済み領域503は、データが格納されているセットを含む領域である。未割り当て領域501、使用済み領域502、使用済み領域503、未割り当て領域504の各々は、X個のセットを含む領域であるものとする。なお、未割り当て領域501と使用済み領域502とは、連続して配置されている。また、未割当て領域501は、2Xの倍数のアドレスから開始され、未割当て領域502の末端は2Xの倍数のアドレスであるものとする。使用済み領域503と未割り当て領域504とは、連続して配置されている。また、未割当て領域503は2Xの倍数のアドレスから開始され、未割当て領域504の末端は2Xの倍数のアドレスであるものとする。各々がX個のセットを含む2つ以上の未割り当て領域と2つ以上の使用済み領域が、キャッシュメモリ領域500にない場合は、未割り当て領域を纏める処理は行われない。
未割り当て領域を纏める処理は、Operating System(OS)上で動作する制御部によって制御される。制御部は、プロセッサ(具体的には命令実行回路)がプログラムを実行することにより実現される。制御部を実現するプログラムモジュールは、OSの一部である。
制御部は、始めに、使用済み領域503のデータを未割り当て領域501にコピーする。制御部は、使用済み領域503のデータのコピーが完了すると、変換情報420内の、使用済み領域503に対応するオフセット情報を変更する。変更後のオフセット情報は、未割り当て領域501の先頭のセットのセットインデックスに等しい。これにより、2X個のセットを含む使用済み領域505と、2X個のセットを含む未割り当て領域506ができる。この入れ替え処理は、隣の領域がX以上の場合、そこで分断して移動できない。しかし、2のべき乗でアラインメント条件を満たすように領域分割した場合、2Xの境界で必ず分断し、入れ替え可能となる。
ある観点によれば、図9の処理は、使用済み領域503を未割り当て領域501の位置に移動させる処理である。別の観点によれば、図9の処理は、未割り当て領域501を使用済み領域503の位置に移動させることで、2X個の連続するセットを含む未割り当て領域506を得る処理である。
制御部による未割り当て領域を纏める処理は、プロセッサがメモリアクセス命令を実行する間をぬって実行される。コピー中に処理対象の領域のデータが入れ替わった場合には、更新された情報を主記憶装置内に記憶しておき、更新された部分のみをコピー先の領域に後から転送する処理を、制御部が実行すればよい。
図10は、未割り当て領域情報と未割り当て領域数情報の例を説明する図である。未割り当て領域情報601と未割り当て領域数情報602は、制御部が使用する情報であり、主記憶装置に記憶される。未割り当て領域情報601は、キャッシュメモリ領域内での未割り当て領域の情報をリスト化したものである。未割り当て領域情報601は、各未割り当て領域のサイズ(セット数)及びオフセット情報を含む。未割り当て領域情報601内のオフセット情報は、各未割り当て領域の先頭のセットを示すセットインデックスを示す12ビットの情報である。なお、未割り当て領域情報601内のエントリ(すなわちサイズとオフセット情報のペア)は、オフセットを示すセットインデックスの昇順にソートされている。未割り当て領域情報601は、例えば、「000110000000」というセットインデックスが示すセットから始まる128個のセットが、未割り当て領域であることを示している。
未割り当て領域数情報602は、未割り当て領域のサイズ(セット数)ごとに、当該サイズの各未割り当て領域に対応して未割り当て領域情報601において割り当てられたポインタの情報を含む。未割り当て領域情報601には、128個のセットを含む未割り当て領域についてのエントリが2つと、256個のセットを含む未割り当て領域についてのエントリが1つ含まれている。そのため、未割り当て領域数情報602において128個のセットの未割り当て領域に対応するポインタには、未割り当て領域情報601の上から1番目と2番目のエントリを示す情報が含まれる。これにより、128個のセットの未割り当て領域がキャッシュメモリ領域内に2つ存在し、かつ、キャッシュメモリ領域内の未割り当て領域のうち1番目と2番目の未割り当て領域が、128個のセットの未割り当て領域であることがわかる。ポインタは、2進数など別の形式の情報であってもよく、キャッシュメモリ領域内の各未割り当て領域に識別情報が割り当てられてもよい。なお、256個のセットを含む未割り当て領域のように、128個のセットのブロックに分割可能な未割り当て領域が多いほうが好ましい。
128個のセットを含む未割り当て領域が非連続に4つあるキャッシュメモリ領域では、128個のセットを含むブロックを4つ確保可能である。しかし、128個のセットを含む未割り当て領域だけが非連続に4つあるキャッシュメモリ領域では、256個のセットを含むブロックは1つも確保できない。一方、128個のセットを含む未割り当て領域が2つと、256個のセットを含む未割り当て領域が1つあるキャッシュメモリ領域では、128個のセットを含むブロックを4つ確保可能である。更に、128個のセットを含む未割り当て領域が2つと、256個のセットを含む未割り当て領域が1つあるキャッシュメモリ領域では、256個のセットを含むブロックを1つ確保することも可能である。
以上のように、各々が128個のセットを含む2個の非連続な未割り当て領域よりは、256個のセットを含む1個の未割り当て領域が存在する方が好ましい。そこで、制御部は、「図9のように領域を移動する」という仮定の下で得られる各未割り当て領域のセット数を算出する。この仮定は、より詳しくは、「キャッシュメモリ領域のうち、使用されていない領域のうちの1つ(例えば未割り当て領域501)を、他の使用されていない領域のうちの1つに隣接した位置(例えば使用済み領域503の位置)に移動する」という仮定である。説明の便宜上、この仮定の下で得られる未割り当て領域を「連続空き領域」ともいう。例えば、図9の例では、2X個の連続するセットを含む未割り当て領域506が、この仮定の下で得られる連続空き領域である。連続空き領域は、1つ以上得られる可能性がある。制御部は、この仮定の下で得られる各連続空き領域に含まれるセット数(例えば、図9の例では2X)を算出する。
さらに、制御部は、少なくとも異なる数のセットを含む各セクタについて、「確保可能数」を求める。あるセクタについての確保可能数は、連続空き領域(すなわち未割り当て領域)について上記のように算出されたセット数を、当該セクタに含まれるセットの数の所定値(具体的には分割数)による商で割った値である。
例えば、2個のセットが含まれるセクタが将来作成される可能性があり、かつ、分割数が2であり、かつ、ある連続空き領域のセット数がYだとする。この場合、当該セクタの各ブロックは、(2/2)個のセットを含むことになる。そのため、Y個のセットを含む連続空き領域があれば、当該セクタ用にY/(2/2)個のブロックを確保することが可能である。したがって、Y個のセットを含む連続空き領域と2個のセットを含むセクタとの組み合わせについて算出される確保可能数は、Y/(2/2)である。
制御部は、以上のようにして確保可能数を算出する。そして、制御部は、各連続空き領域についての確保可能数の合計に基づいて、使用されていない領域(すなわち未割り当て領域)のうちの1つを、他の使用されていない領域のうちの1つに隣接する位置に移動させる。より具体的には、制御部は、確保可能数の合計が最大となるように、未割り当て領域を纏める処理を行うことが好ましい。すなわち、上記仮定の下で連続空き領域が1つだけ作成され得る場合、当該連続空き領域が得られるように、制御部は未割り当て領域を移動させる。また、上記仮定の下で2つ以上の異なるサイズの連続空き領域が作成され得る場合、制御部は、連続空き領域のサイズごとに、確保可能数の合計値(すなわち、複数の異なるサイズのセクタについてそれぞれ算出した複数の確保可能数の合計値)を算出する。そして、制御部は、合計値が最大の連続空き領域を選び、選んだ連続空き領域が得られるように、未割り当て領域を移動させる。
図11は、セクタ取得処理の例を説明する図である。セクタ取得処理は、サーバ等のコンピュータ上で動作するソフトウェアから呼び出されるシステムコールや、OS内に含まれるプログラムモジュールのうち制御部とは異なるモジュールからの指示を契機に、制御部で実行される。セクタ取得処理の契機となるシステムコールや指示のことを、以下では「セクタ取得命令」ともいう。セクタ取得命令には、例えば、1000キロバイト(kB)のデータ領域をセクタ#3に設定するためのサイズ情報が含まれる。
制御部は、まず、セクタ取得命令に含まれるサイズ情報を、セット数に変換する。例えば、キャッシュメモリ領域が、10個のキャッシュウェイを含み、1つのキャッシュラインが256バイトである場合、1つのセットのサイズは2560バイトである。そのため、1000キロバイト(kB)のデータ領域を確保するためには、制御部は、391セットの未割り当て領域がキャッシュメモリ領域内にあるかを判定する。
ここで、制御部は、未割り当て領域情報601を参照し、確保したいデータ領域のセット数「n」を分割数「α」で割ったn/α個以上のセットを備える領域を、α個、選択する。例えば、確保したいデータ領域のセット数が391個であり(n=391)、分割数が4である(α=4)場合、nをαで割ると、約98セットとなる。制御部は、98セット以上を含む未割り当て領域を、4つ、キャッシュメモリ領域から選択する。より具体的な例として、制御部は、割り当て領域情報601を参照し、128セットの未割り当て領域2つと、256セットの未割り当て領域を1つ選択する。なお、256セットの未割り当て領域は、2つの128セットの未割り当て領域として使用可能である。なお、分割数「α」は、セクタが何個のブロックに分割されているかを示す値であり、前述の分割数2のことである。分割数「α」は、予め設定されている。
制御部は、選択した未割り当て領域に関するエントリを、未割り当て領域情報601から削除する。次に、制御部は、図7の変換情報410及び変換情報420を以下のとおり更新する。なお、図11の変換情報410aは、制御部がセクタ取得処理を実行することで得られる情報であり、図7の変換情報410とは内容が一部異なる。また、図11の変換情報420eは、制御部がセクタ取得処理を実行することで得られる情報であり、図7でセクタ#3に対応する変換情報430cとは内容が一部異なる。また、図11の未割り当て領域情報601は、図10の未割り当て領域情報601とは内容が一部異なる。
制御部は、セクタ取得命令で指定されているセクタ#3を示すセクタ識別情報として「10」を含むエントリを、変換情報410aに追加する。また、上記の例において、セクタ取得命令は、391個のセットを取得するための命令である。2<391<2なので、391個のセットを含む領域内での相対セットインデックス314は、9桁で表すことができる。よって、制御部は、変換情報410aに示すように、セクタ#3のサブマスク情報(12桁の情報)として、「000111111111」を設定する。サブマスク情報(12桁の情報)のうち、下9桁が、相対セットインデックス314に該当する。そのため、セクタ#3に対応するサブマスク情報の12桁のうち下9桁には1が設定されている。制御部は、変換情報410aに示すように、セクタ#3のブロックマスク情報として、「000110000000」を設定する。なぜなら、分割数「α」が4であるためである。4という分割数に対応する「11」が、相対セットインデックス314との計算に用いられるブロックマスク情報の下9桁の先頭の2ビットに設定される。
制御部は、さらに、セクタ#3に対応した変換情報420eを、変換情報記憶部220aに記憶させる。変換情報420eは、未割り当て領域情報601に基づいて設定される。変換情報420eでは、未割り当て領域情報601に記録されている128セットの未割り当て領域2つに対応する情報として、ブロック識別情報「00」と「01」が割り当てられる。128セットの未割り当て領域2つのそれぞれのオフセット情報は、未割り当て領域情報601におけるオフセット情報と同じものが設定される。256セットの未割り当て領域は、連続する2つの128セットの未割り当て領域として使用される。そのため、256セットの未割り当て領域に対応して、変換情報420eでは、ブロック識別情報「10」と「11」が割り当てられる。ブロック識別情報「10」に対応するオフセット情報としては、未割り当て領域情報601内の、256セットの未割り当て領域のオフセット情報が設定される。また、ブロック識別情報「11」に対応して、未割り当て領域情報601に記録されている256セットの未割り当て領域を2分割した際の2つ目のブロックの先頭のセットを示すセットインデックスが、オフセット情報として設定される。
図12は、セクタ解放処理の例を説明する図である。セクタ解放処理は、サーバ等のコンピュータ上で動作するソフトウェアから呼び出されるシステムコールや、OS内に含まれるプログラムモジュールのうち制御部とは異なるモジュールからの指示を契機に、制御部で実行される。セクタ解放処理の契機となるシステムコールや指示のことを、以下では「セクタ解放命令」ともいう。セクタ解放命令には、解放対象となるセクタに関する情報が含まれる。
図12の未割り当て領域情報601aは、制御部のセクタ解放処理によって、図11の未割り当て領域情報601が更新された後の情報を示す。つまり、未割り当て領域情報601aは、制御部が図11を参照して説明した方法により取得したセクタを解放する場合の、更新後の情報の例である。制御部が解放するセクタ#3は4つのブロックを含み、4つのブロックの各々は128セットを含む。4つのブロックに関する情報は、セクタ#3に対応した図11の変換情報420eに含まれている。制御部は、セクタ#3に対応した変換情報420eに基づいて、解放するブロックの情報を、未割り当て領域情報601aに示すように追加する。未割り当て領域情報601aに書き込まれるブロックの情報は、128セットのブロック4つのオフセット情報である。すなわち、4つのブロックの解放に応じて、制御部は、未割り当て領域情報601aに示すように4つのエントリを追加する。
図12の未割り当て領域数情報602aは、制御部がセクタ解放処理を実行することによって得られる情報である。制御部は、未割り当て領域数情報602aのうち、解放された各ブロックに対応して未割り当て領域情報601において割り当てられたポインタの情報を更新する。具体的には、セクタ#3が解放される場合、128セットのブロックが4つ解放される。そのため、制御部は、未割り当て領域情報601aに記録された4つのブロックに対応する4つのポインタの情報を、図12に示すように未割り当て領域数情報602aに書き込む。
図12の変換情報410bは、制御部のセクタ解放処理によって、図11の変換情報410aが更新された後の情報を示す。制御部は、セクタ解放処理において、変換情報410b内のセクタ#3に対応するサブマスク情報に、無効を示す値を設定する。例えば、制御部は、変換情報410bに示すように、セクタ#3に対応するサブマスク情報に、無効を示す値「000000000000」を設定する。
図13は、未割り当て領域を纏める処理の例を説明する図である。未割り当て領域を纏める処理(図9及び後述の図18も参照)は、セクタ解放処理の最後に、制御部により実行される。図13の未割り当て領域情報701aは、未割り当て領域を纏める処理が実行される前のキャッシュメモリ領域の状態を示す情報である。
制御部は、未割り当て領域情報701a内を小さいサイズの未割り当て領域から順にチェックしていき、同一サイズの未割り当て領域が2つ以上ある場合、同一サイズの未割り当て領域2つを選択し、纏める処理を行う。未割り当て領域情報701aは、128個のセットを含む未割り当て領域に関するエントリを4つ含む。そのため、制御部は、未割り当て領域情報701aを参照して、128個のセットを含む未割り当て領域を2つ選択し、纏める処理を行う。その結果、未割り当て領域情報701bに示すように、256個のセットを含む未割り当て領域が生成される。制御部は、未割り当て領域情報701a内を小さいサイズの未割り当て領域からチェックしていき、同じサイズの未割り当て領域が2つ以上見つからなくなるまで、纏める処理を繰り返す。
実施形態によっては、上記のチェック順とは異なる順序で、制御部が未割り当て領域をチェックしてもよい。また、制御部は、纏める対象の2つの未割り当て領域を、サイズに基づく順序にしたがって決める代わりに、上記のように確保可能数の合計に基づいて決めてもよい。
図14は、セクタ取得処理の例(その1)を説明するフローチャートである。図11に関して説明したとおり、セクタ取得処理は、セクタ取得命令を契機に、制御部で実行される。図14に示すセクタ取得処理のフローチャートは、各セクタがブロックに分割されていないキャッシュメモリ領域を搭載するキャッシュメモリ(例えば図5を参照)に用いられる。
制御部は、セクタ取得命令に含まれるサイズ情報を参照し、取得したいデータ領域のサイズを、バイト単位のサイズからセット数に変換する(ステップS101)。制御部は、未割り当て領域情報601を参照し、変換により得られたセット数以上の数のセットを含む未割り当て領域があるか判定する(ステップS102)。
変換により得られたセット数以上の数のセットを含む未割り当て領域の情報が未割り当て領域情報601内にない場合(ステップS102でNO)、制御部は、セクタ取得処理を終了する。
変換により得られたセット数以上の数のセットを含む未割り当て領域の情報が未割り当て領域情報601内にある場合(ステップS102でYES)、制御部は、変換により得られたセット数以上の数のセットを含む未割り当て領域を選択する(ステップS103)。そして、制御部は、未割り当て領域情報601から、選択した未割り当て領域の情報を削除する(ステップS104)。
さらに、制御部は、変換情報記憶部220内の変換情報221に、セクタ取得命令で指定されるセクタに関する情報(具体的には、セクタ識別情報とサブマスク情報とオフセット情報)を追加する(ステップS105)。ステップS105で変換情報221に追加されるエントリに設定されるセクタ識別情報は、セクタ取得命令内に指定されているセクタ識別情報である。また、追加されるエントリに設定されるサブマスク情報は、ステップS103で選択した未割り当て領域のサイズに応じた範囲のビットが「1」に設定された、12ビットの情報である。そして、追加されるエントリに設定されるオフセット情報は、ステップS104で未割り当て情報601から削除したエントリにおけるオフセット情報と等しい。制御部は、ステップS105の処理が終了すると、セクタ取得処理を終了する。
図15は、セクタ取得処理の例(その2)を説明するフローチャートである。図11に関して説明したとおり、セクタ取得処理は、セクタ取得命令を契機に、制御部で実行される。図15に示すセクタ取得処理のフローチャートは、各セクタがブロックに分割されて利用可能なキャッシュメモリ領域を搭載するキャッシュメモリ(例えば図8を参照)に用いられる。
制御部は、セクタ取得命令に含まれるサイズ情報を参照し、取得したいデータ領域のサイズを、バイト単位のサイズからセット数に変換する(ステップS201)。変換により得られたセット数は、図11に関して説明した「n」である。次に、制御部は、変換結果であるセット数「n」を分割数「α」で割り、ブロックあたりのセット数(n/α)を算出する(ステップS202)。
制御部は、未割り当て領域情報601を参照し、算出された数(n/α)のセットを少なくとも含む未割り当て領域がα個あるかを判定する(ステップS203)。なお、図11に関して説明したとおり、制御部は、(nk/α)個のセットを含む1つの未割り当て領域を、(n/α)個のセットを含むk個の未割り当て領域と見なしてよい(kは2以上の自然数)。
未割り当て領域情報601を参照した結果、算出された数(n/α)のセットを少なくとも含む未割り当て領域がα個ないと判明した場合(ステップS203でNO)、制御部は、セクタ取得処理を終了する。
未割り当て領域情報601を参照した結果、算出された数(n/α)のセットを少なくとも含む未割り当て領域がα個あると判明した場合(ステップS203でYES)、制御部は、α個の未割り当て領域を選択する(ステップS204)。選択は未割り当て領域情報601に基づく。そして、制御部は、未割り当て領域情報601から、選択したα個の未割り当て領域それぞれの情報を削除する(ステップS205)。
さらに、制御部は、変換情報記憶部220a内の変換情報410に、セクタ取得命令で指定されるセクタに関する情報(具体的には、セクタ識別情報とサブマスク情報とブロックマスク情報)を追加する(ステップS206)。ステップS206で変換情報410に追加されるエントリに設定されるセクタ識別情報は、セクタ取得命令内に指定されているセクタ識別情報である。また、追加されるエントリに設定されるサブマスク情報は、ステップS201で算出されたセット数「n」に応じた範囲のビットが「1」に設定された、12ビットの情報である。そして、追加されるエントリに設定されるブロックマスク情報は、セット数「n」と分割数「α」に応じた範囲のビットが「1」に設定された、12ビットの情報である。
さらに、制御部は、変換情報記憶部220aに、セクタ取得命令で指定されるセクタに対応した変換情報420を記憶させる(ステップS207)。具体的には、セクタ取得命令で指定されるセクタに対応するα個のエントリが追加される。制御部は、各エントリにブロック識別情報を割り当てる。追加される各エントリのオフセット情報は、ステップS205で未割り当て情報601から削除された各エントリにおけるオフセット情報と等しい。制御部は、ステップS207の処理が終了すると、セクタ取得処理を終了する。
図16は、セクタ解放処理の例(その1)を説明するフローチャートである。図12に関して説明したとおり、セクタ解放処理は、セクタ解放命令を契機に、制御部で実行される。図16に示すセクタ解放処理のフローチャートは、各セクタがブロックに分割されていないキャッシュメモリ領域を搭載するキャッシュメモリ(例えば図5を参照)に用いられる。
制御部は、セクタ解放命令に含まれるセクタ識別情報により指定されるセクタに対応した変換情報221に基づいて、未割り当て領域情報601を更新する(ステップS301)。つまり、制御部は、解放対象のセクタのセット数と、解放対象のセクタに対応して変換情報221に記録されているオフセット情報とを含むエントリを、未割り当て領域情報601に追加する。
また、制御部は、未割り当て領域数情報602に、解放するセクタに関する情報を追加する(ステップS302)。つまり、制御部は、ステップS301で追加したエントリを指すポインタの情報を未割り当て領域数情報602に追加する。
そして、制御部は、変換情報221内で解放対象のセクタに対応づけられているサブマスク情報に、無効を示す値「000000000000」を書き込む(ステップS303)。制御部は、セクタ解放処理を終了する。
図17は、セクタ解放処理の例(その2)を説明するフローチャートである。図12に関して説明したとおり、セクタ解放処理は、セクタ解放命令を契機に、制御部で実行される。図17に示すセクタ解放処理のフローチャートは、各セクタがブロックに分割されて利用可能なキャッシュメモリ領域を搭載するキャッシュメモリ(例えば図8を参照)に用いられる。
制御部は、セクタ解放命令に含まれるセクタ識別情報により指定されるセクタに対応した変換情報410と変換情報420に基づいて、未割り当て領域情報601を更新する(ステップS401)。つまり、制御部は、解放対象のセクタに対応する変換情報420から、解放対象のセクタに属する各ブロックに対応するオフセット情報を読み取り、読み取ったオフセット情報を含む新たなエントリを、未割り当て領域情報601に追加する。追加される各エントリに設定されるサイズの値は、解放する各ブロックに含まれるセットの数である。よって、追加される各エントリに設定されるサイズの値は、変換情報410のサブマスク情報(すなわち解放されるセクタのセット数を示す情報)と、ブロックマスク情報(すなわち分割数を示す情報)とに基づいて決められる。
また、制御部は、未割り当て領域数情報602に、解放する各ブロックに対応して未割り当て領域情報601において割り当てられた各ポインタの情報を書き込む(ステップS402)。つまり、制御部は、ステップS401で追加した各エントリを指す各ポインタの情報を未割り当て領域数情報602に追加する。
そして、制御部は、変換情報410内で解放対象のセクタに対応づけられているサブマスク情報に、無効を示す値「000000000000」を書き込む(ステップS403)。
さらに、制御部は、未割り当て領域を纏める処理(図9、図13、及び図18を参照)を、プロセッサの他の動作を妨げないように、適宜のタイミングで処理を開始させる(ステップS404)。ステップS404では、プロセッサの他の動作の終了をまつわけではない。その後、制御部は、セクタ解放処理を終了する。
図18は、未割り当て領域を纏める処理の例を説明するフローチャートである。図18のフローチャートは、図17のフローチャートのステップS404の処理を具体的に示す。
制御部は、未割り当て領域情報601を参照し、「同一サイズの未割り当て領域が2つ以上あり、かつ、それらの未割り当て領域のうちの1つに隣接して、同一サイズの使用済み領域がある」という条件が成り立つかを判定する(ステップS501)
上記条件が成り立たない場合(ステップS501でNO)、制御部は、処理を終了する。
同一サイズの未割り当て領域が2つ以上あり、かつ、それらの未割り当て領域のうちの1つに隣接して、同一サイズの使用済み領域がある場合(ステップS501でYES)、制御部は、同一サイズの未割り当て領域を2つ選択し、纏める処理を行う(ステップS502)。図9に関して説明したとおり、ステップS502は、選択した一方の未割り当て領域に隣接する使用済み領域のデータを、選択した他方の未割り当て領域にコピーする処理を含む。
さらに、制御部は、選択した一方の未割り当て領域に隣接する使用済み領域に対応して変換情報420に含まれているオフセット情報を更新する(ステップS503)。更新後の値は、制御部が選択した他方の未割り当て領域に対応して未割り当て領域情報601に含まれているオフセット情報に等しい。
また、制御部は、未割り当て領域情報601及び未割り当て領域数情報602を、纏める処理後のブロックの状態を反映するように、更新する(ステップS504)。ステップS504の処理を詳しく説明すると、以下のとおりである。
図18の未割り当て領域を纏める処理の結果、図9のように、2X個のセットを含む使用済み領域505と2X個のセットを含む未割り当て領域506ができる。ステップS504において、制御部は、ステップS502で選択した2つの未割り当て領域(つまり未割り当て領域501と504)に対応する2つのエントリを、未割り当て領域情報601から削除する。制御部は、ステップS504においてさらに、未割り当て領域506の先頭のセットを示すセットインデックスであるオフセット情報と、2X個を示すサイズ情報とを含む新たなエントリを、未割り当て領域情報601に追加する。図13に例示した未割り当て領域情報701aから未割り当て領域情報701bへの変化は、以上のようなステップS504における2つのエントリの削除と1つのエントリの追加の結果である。
また、ステップS504で、制御部は、未割り当て領域数情報602において、X個というセット数に対応するエントリと、2X個というセット数に対応するエントリを、更新する。具体的には、制御部は、未割り当て領域情報601から削除した2つのエントリに対応するポインタ(つまり未割り当て領域501と504に対応する2つのポインタ)を、未割り当て領域数情報602においてX個というセット数に対応するエントリから削除する。また、制御部は、未割り当て領域情報601に追加したエントリに対応するポインタ(つまり未割り当て領域506に対応するポインタ)を、未割り当て領域数情報602において2X個というセット数に対応するエントリに書き込む。ステップS504が終了すると、制御部は、図18の処理をステップS501から繰り返す。
以上、種々の実施形態について説明したが、上記実施形態は適宜変形されてよい。例えば、サブマスク情報は、相対セットインデックス314の範囲を示す情報であれば、どのような形式の情報であってもよい。また、図5や図8に例示した回路は、例示的回路である。相対セットインデックス314を絶対的なセットインデックスに変換するために、図5や図8に例示した回路とは異なる回路が使われてもよい。いくつかフローチャートを例示したが、矛盾が生じない限り、ステップの実行順序が入れ替えられてもよい。
いずれにせよ、キャッシュメモリ領域210をセット単位で分割することで、キャッシュウェイ単位で分割する場合よりも小さい領域にキャッシュメモリ領域210を分割することが可能となる。すなわち、上記の各実施形態によれば、より細かい粒度での分割が可能となる。これにより、キャッシュクリア、プリフェッチ、データ格納処理などにおいてキャッシュメモリ領域210を使用する際には、キャッシュウェイ単位よりも容量の小さいセット単位で、キャッシュメモリ領域210を使用することが可能となる。その結果、キャッシュメモリ領域210をより有効に活用することが可能となる。
200、200a キャッシュメモリ
110、210、400、500 キャッシュメモリ領域
220 変換情報記憶部
221、410、420、410a、410b、420a〜420e 変換情報
230 変換回路
241、242、243、246 マルチプレクサ
231、233、244 AND回路
232、234 OR回路
235 NOT回路
236 ビットシフト回路
245 抽出部
250 タグテーブル
251、251a〜251d コンパレータ
252 選択回路
310 アドレス情報
311 セクタ識別情報
312、313、317 タグ
314 相対セットインデックス
315 ライン内アドレス
316 データ
401a〜401d ブロック
501、504、506 未割り当て領域
502、503、505 使用済み領域
601、701a、701b 未割り当て領域情報
602 未割り当て領域数情報

Claims (11)

  1. 複数のセットが複数のセクタに分割されているキャッシュメモリ領域と、
    セクタ内の相対的なセットインデックスを前記キャッシュメモリ領域におけるセットインデックスに変換するための変換情報を、前記複数のセクタのそれぞれについて記憶する変換情報記憶部と、
    アクセス対象であるセクタを識別するセクタ識別情報と前記変換情報記憶部に記憶されている前記変換情報とを用いて、前記セクタ識別情報が示すセクタにおける相対的なセットインデックスを、前記キャッシュメモリ領域におけるプロセッサがアクセスするセットを示すセットインデックスに変換する変換回路と、
    を備えるキャッシュメモリ。
  2. 前記キャッシュメモリ領域に関する第1のタグ情報を記憶するタグ情報記憶部と、
    主記憶装置のアドレスのうち、キャッシュライン内のデータを特定するアドレスと前記セクタ内での相対的なセットインデックス以外の部分である第2のタグ情報と、前記第1のタグ情報とを比較する比較回路とを、
    更に備えることを特徴とする請求項1に記載のキャッシュメモリ。
  3. 前記変換情報は、各セクタの先頭のセットインデックスを含む
    ことを特徴とする請求項1又は2に記載のキャッシュメモリ。
  4. 前記複数のセクタのうち少なくとも1つは所定の数のブロックに分割されており、
    前記変換情報は、前記所定の数のブロックそれぞれの先頭のセットインデックスを含む
    ことを特徴とする請求項1〜3の何れかに記載のキャッシュメモリ。
  5. 各セクタに含まれるセットの数は、2のべき乗個である
    ことを特徴とする請求項1〜4の何れかに記載のキャッシュメモリ。
  6. 複数のセットが複数のセクタに分割されているキャッシュメモリ領域における前記複数のセクタのうちの1つを識別するセクタ識別情報を含むアドレス情報を含んでおり主記憶装置へのアクセスを要求する命令を、プロセッサが実行しようとする際、変換回路が、前記セクタ識別情報により識別されるセクタにおける相対的なセットインデックスを前記キャッシュメモリ領域におけるセットインデックスに変換するための変換情報を、変換情報記憶部から読み出し、
    前記変換回路が、前記セクタ識別情報により識別される前記セクタにおける前記相対的なセットインデックスを、前記アドレス情報の中から抽出し、
    前記変換回路が、抽出した前記相対的なセットインデックスを、前記変換情報を用いて、前記キャッシュメモリ領域におけるセットインデックスに変換し、
    前記プロセッサが、変換された前記セットインデックスが示すセットにアクセスする
    ことを特徴とするアクセス方法。
  7. 比較回路が、前記キャッシュメモリ領域に関する第1のタグ情報をタグ情報記憶部から読み出し、
    前記比較回路が、前記アドレス情報のうち、キャッシュライン内のデータを特定するアドレスとセクタ内での相対的なセットインデックス以外の部分である第2のタグ情報と、前記第1のタグとを比較することで、アクセス対象のキャッシュラインを特定する
    ことを特徴とする請求項6に記載のアクセス方法。
  8. 前記変換情報が、各セクタの先頭のセットインデックスを含む
    ことを特徴とする請求項6又は7に記載のアクセス方法。
  9. 前記複数のセクタのうち少なくとも1つは所定の数のブロックに分割されており、
    前記変換情報は、前記所定の数のブロックそれぞれの先頭のセットインデックスを含む
    ことを特徴とする請求項6〜8の何れかに記載のアクセス方法。
  10. 各セクタに含まれるセットの数は、2のべき乗個である
    ことを特徴とする請求項6〜9の何れかに記載のアクセス方法。
  11. 複数のセットを複数のセクタに分割可能なキャッシュメモリ領域のうち、使用されていない領域のうちの1つを、他の使用されていない領域のうちの1つに隣接した位置に移動するという仮定の下で得られる、1以上の連続空き領域の各々に含まれるセット数を算出し、
    少なくとも異なる数のセットを含む各セクタについて、前記算出したセット数を、当該セクタに含まれるセットの数の所定値による商で割った値である確保可能数を求め、
    各連続空き領域についての前記確保可能数の合計に基づいて、使用されていない領域のうちの1つを、他の使用されていない領域のうちの1つに隣接する位置に移動させる
    処理をプロセッサに実行させる制御プログラム。
JP2014223770A 2014-10-31 2014-10-31 キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム Withdrawn JP2016091242A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014223770A JP2016091242A (ja) 2014-10-31 2014-10-31 キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム
US14/877,011 US20160124861A1 (en) 2014-10-31 2015-10-07 Cache memory and method for accessing cache memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014223770A JP2016091242A (ja) 2014-10-31 2014-10-31 キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム

Publications (1)

Publication Number Publication Date
JP2016091242A true JP2016091242A (ja) 2016-05-23

Family

ID=55852803

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014223770A Withdrawn JP2016091242A (ja) 2014-10-31 2014-10-31 キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム

Country Status (2)

Country Link
US (1) US20160124861A1 (ja)
JP (1) JP2016091242A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017503299A (ja) * 2014-12-14 2017-01-26 ヴィア アライアンス セミコンダクター カンパニー リミテッド モードに応じてセットの1つ又は複数を選択的に選択するように動的に構成可能であるマルチモード・セット・アソシエイティブ・キャッシュ・メモリ
US11003591B2 (en) 2018-09-20 2021-05-11 Fujitsu Limited Arithmetic processor, information processing device and control method of arithmetic processor

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN107992322B (zh) * 2017-12-04 2021-06-04 上海无线电设备研究所 一种雷达信号处理机dsp代码自更新方法
CN110196818B (zh) * 2018-02-27 2021-07-16 华为技术有限公司 缓存数据的方法、缓存设备和存储系统
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
CN113383310A (zh) 2019-03-15 2021-09-10 英特尔公司 矩阵加速器架构内的脉动分解
US20230124538A1 (en) * 2021-10-19 2023-04-20 Electronics And Telecommunications Research Institute Apparatus and method for managing cache memory

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589627B2 (en) * 2010-08-27 2013-11-19 Advanced Micro Devices, Inc. Partially sectored cache
US20140189243A1 (en) * 2012-12-28 2014-07-03 Blas Cuesta Sectored cache with hybrid line granularity
US9361228B2 (en) * 2014-08-05 2016-06-07 Qualcomm Incorporated Cache line compaction of compressed data segments
US10013352B2 (en) * 2014-09-26 2018-07-03 Intel Corporation Partner-aware virtual microsectoring for sectored cache architectures

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017503299A (ja) * 2014-12-14 2017-01-26 ヴィア アライアンス セミコンダクター カンパニー リミテッド モードに応じてセットの1つ又は複数を選択的に選択するように動的に構成可能であるマルチモード・セット・アソシエイティブ・キャッシュ・メモリ
US11003591B2 (en) 2018-09-20 2021-05-11 Fujitsu Limited Arithmetic processor, information processing device and control method of arithmetic processor

Also Published As

Publication number Publication date
US20160124861A1 (en) 2016-05-05

Similar Documents

Publication Publication Date Title
JP2016091242A (ja) キャッシュメモリ、キャッシュメモリへのアクセス方法及び制御プログラム
CN110678836B (zh) 用于键值存储的持久性存储器
KR100755700B1 (ko) 비휘발성 메모리가 캐쉬로 사용되는 저장 장치 및 그 관리방법
US9053013B2 (en) Data storage device and operating method thereof
JP2020046963A (ja) メモリシステムおよび制御方法
KR101663667B1 (ko) 플래시 메모리의 주소 매핑에 의한 데이터 관리 방법 및 장치
JP6678230B2 (ja) ストレージ装置
US9298615B2 (en) Methods and apparatus for soft-partitioning of a data cache for stack data
JP2012068863A (ja) 半導体記憶制御装置
JP2012033002A (ja) メモリ管理装置およびメモリ管理方法
KR101297442B1 (ko) 공간 지역성을 고려한 요구 기반 플래시 메모리 변환 계층을 포함하는 낸드 플래시 메모리 시스템
US8862838B1 (en) Low overhead memory space management
US9727247B2 (en) Storage device and method, and storage medium
KR101017067B1 (ko) 낸드 플래시 메모리를 위한 지역성 기반의 가비지 컬렉션기법
KR100833142B1 (ko) 어드레스 변환 장치
KR20170082121A (ko) 캐시 메모리
CN107870922B (zh) 一种用于数据去重的方法、设备和系统
US20170024147A1 (en) Storage control device and hierarchized storage control method
US10642749B2 (en) Electronic device and method for managing memory thereof
US20170199687A1 (en) Memory system and control method
JP6194875B2 (ja) キャッシュ装置、キャッシュシステム、キャッシュ方法、及びキャッシュプログラム
CN115712500A (zh) 内存释放、内存恢复方法、装置、计算机设备及存储介质
CN115756838A (zh) 内存释放、内存恢复方法、装置、计算机设备及存储介质
KR101153688B1 (ko) 데이터 페이지들에 대해 무효화 기회를 부여하는 방법 및 이를 위한 낸드 플래시 메모리 시스템
KR20150139383A (ko) 반도체 장치

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170704

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20171004