(57)【特許請求の範囲】
【請求項１】
データを格納するデータキャッシュ部と前記データキャッシュ部に格納された各データのアドレスを格納するタグ部とを有する階層化されたｋ次（ｋ＝１からｎまでのすべての整数、ｎは１以上の整数）のキャッシュメモリと、
プロセッサが発行する仮想アドレスから物理アドレスへのアドレス変換情報を含むページエントリ情報と、変換した物理アドレスのそれぞれに対応するデータが１階層以上の特定のキャッシュメモリに格納されているか否かを示すキャッシュ存在情報と、を格納するトランスレーション・ルックアサイド・バッファと、
を備えるキャッシュメモリシステム。
【請求項２】
前記トランスレーション・ルックアサイド・バッファは、前記特定のキャッシュメモリ内に格納しているデータを変更する際には、当該変更に合わせて前記キャッシュ存在情報を更新する請求項１に記載のキャッシュメモリシステム。
【請求項３】
前記トランスレーション・ルックアサイド・バッファは、前記特定のキャッシュメモリに新たなデータを書き込む場合と、前記特定のキャッシュメモリに格納されているデータを追い出す場合とに、前記キャッシュ存在情報を更新する請求項２に記載のキャッシュメモリ。
【請求項４】
前記トランスレーション・ルックアサイド・バッファに格納された前記ページエントリ情報および対応する前記キャッシュ存在情報と、前記トランスレーション・ルックアサイド・バッファに格納しきれなかった前記ページエントリ情報および対応する前記キャッシュ存在情報とを格納するページテーブルと、
前記トランスレーション・ルックアサイド・バッファの前記ページエントリ情報に存在しない物理アドレスにアクセスする場合には、前記ページテーブル内の前記キャッシュ存在情報を参照して、前記特定のキャッシュメモリへのアクセスを行うか否かを判断するメモリ管理ユニットと、を備える請求項１乃至３のいずれかに記載のキャッシュメモリシステム。
【請求項５】
前記メモリ管理ユニットは、前記トランスレーション・ルックアサイド・バッファに格納された前記ページエントリ情報のうち少なくとも一部のページエントリ情報を他のページエントリ情報に変更する場合には、変更前のページエントリ情報と対応する前記キャッシュ存在情報とを前記ページテーブルに書き戻す請求項４に記載のキャッシュメモリシステム。
【請求項６】
前記ｋ次のキャッシュメモリは、前記キャッシュ存在情報によって該当するデータが前記特定のキャッシュメモリに格納されていないと判断された場合は、前記特定のキャッシュメモリの前記タグ部にアクセスせずに、前記特定のキャッシュメモリより高次のキャッシュメモリまたはメインメモリにアクセスするメモリ管理ユニットを備える請求項１乃至３のいずれかに記載のキャッシュメモリシステム。
【請求項７】
前記メモリ管理ユニットは、前記プロセッサからのアクセス要求に応じて前記ページエントリ情報を参照する際に、対応する前記キャッシュ存在情報を取得する請求項４乃至６のいずれかに記載のキャッシュメモリシステム。
【請求項８】
前記メモリ管理ユニットは、前記キャッシュ存在情報に基づいて、前記特定のキャッシュメモリにアクセスするか否かで前記特定のキャッシュメモリに供給する電力を制御する請求項４乃至７のいずれかに記載のキャッシュメモリシステム。
【請求項９】
前記メモリ管理ユニットは、プロセッサが解放したプロセスで使用するデータが前記特定のキャッシュメモリに格納されているか否かを前記キャッシュ存在情報に基づいて判断し、当該データを無効化する請求項４乃至７のいずれかに記載のキャッシュメモリシステム。
【請求項１０】
前記特定のキャッシュメモリは、複数のバンクに分かれており、
前記キャッシュ存在情報は、前記特定のキャッシュメモリ中のどのバンクにデータが格納されているかを示すバンク識別情報を含んでおり、
前記メモリ管理ユニットは、前記特定のキャッシュメモリにアクセスする際には、前記キャッシュ存在情報中の前記バンク識別情報に対応するバンクにアクセスする請求項４乃至７のいずれかに記載のキャッシュメモリシステム。
【請求項１１】
前記キャッシュ存在情報は、前記特定のキャッシュメモリのキャッシュラインごとの情報を含む請求項１乃至１０のいずれかに記載のキャッシュメモリシステム。
【請求項１２】
前記キャッシュ存在情報は、前記トランスレーション・ルックアサイド・バッファのページエントリ毎に、1ページ内に含まれる前記特定のキャッシュメモリの全キャッシュラインの情報を要約化した1ビット以上のビット列を含む請求項１１に記載のキャッシュメモリシステム。
【請求項１３】
前記キャッシュ存在情報は、前記トランスレーション・ルックアサイド・バッファのページエントリごとに、１ページ内に含まれる前記特定のキャッシュメモリの全キャッシュラインのそれぞれについて、１ビットずつ設けられる請求項１０または１１に記載のキャッシュメモリシステム。
【請求項１４】
前記特定のキャッシュメモリは、最も高次のキャッシュメモリである請求項１乃至１３のいずれかに記載のキャッシュメモリシステム。
【請求項１５】
前記特定のキャッシュメモリは、ＭＲＡＭ（Magnetoresistive RAM）セルを用いて構成される請求項１乃至１４のいずれかに記載のキャッシュメモリシステム。
【請求項１６】
プロセッサと、
データを格納するデータキャッシュ部と前記データキャッシュ部に格納された各データのアドレスを格納するタグ部とを有する階層化されたｋ次（ｋ＝１からｎまでのすべての整数、ｎは１以上の整数）のキャッシュメモリと、
前記プロセッサが発行する仮想アドレスから物理アドレスへのアドレス変換情報を含むページエントリ情報と、変換した物理アドレスのそれぞれに対応するデータが１階層以上の特定のキャッシュメモリに格納されているか否かを示すキャッシュ存在情報と、を格納するトランスレーション・ルックアサイド・バッファと、を備えるプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、キャッシュメモリシステムおよびプロセッサシステムに関する。
【背景技術】
【０００２】
メモリウォール問題と称されるように、メモリアクセスはプロセッサコアの性能と消費電力のボトルネックとなっている。この課題を緩和するため、メモリ技術の進展を背景として、主記憶近傍に大容量のキャッシュメモリを搭載したプロセッサが普及しつつある。
【０００３】
大容量のキャッシュメモリでは、保持するデータ量の増加に伴って、キャッシュ保持データのメタ情報すなわちアドレス情報を記憶するタグメモリも大容量化する。これに伴い、タグメモリのレイテンシも増大する。場合によっては、大容量キャッシュメモリのタグメモリのレイテンシが上位階層のキャッシュメモリのレイテンシと同程度のものとなってしまう。このような場合、タグメモリのレイテンシがプロセッサ・システム全体の性能に与える影響が無視できなくなる。
【先行技術文献】
【特許文献】
【０００４】
【非特許文献１】SUPPORTING VERY LARGE DRAM  CACHES WITH COMPOUND-ACCESS  SCHEDULING AND MISSMAP(MICRO2012)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、アクセス効率を向上可能なキャッシュメモリシステムおよびプロセッサシステムを提供することにある。
【課題を解決するための手段】
【０００６】
本実施形態によれば、データを格納するデータキャッシュ部と前記データキャッシュ部に格納された各データのアドレスを格納するタグ部とを有する階層化されたｋ次（ｋ＝１からｎまでのすべての整数、ｎは１以上の整数）のキャッシュメモリと、
プロセッサが発行する仮想アドレスから物理アドレスへのアドレス変換情報を含むページエントリ情報と、変換した物理アドレスのそれぞれに対応するデータが１階層以上の特定のキャッシュメモリに格納されているか否かを示すキャッシュ存在情報と、を格納するトランスレーション・ルックアサイド・バッファと、を備えるキャッシュメモリシステムが提供される。
【図面の簡単な説明】
【０００７】
【図１】一実施形態によるプロセッサシステム１の概略構成を示すブロック図。
【図２】第１の実施形態における各キャッシュメモリ４〜６およびメインメモリ１０のアクセス優先度を示す図。
【図３】ＴＬＢ４の内部構造の一例を示す図。
【図４】本実施形態によるプロセッサシステム１の処理動作を示すフローチャート。
【図５】Ｌ４キャッシュ９にデータを格納する場合のキャッシュ存在情報２０の更新処理の一例を示すフローチャート。
【図６】Ｌ４キャッシュ９からデータを追い出す場合のキャッシュ存在情報２０の更新処理の一例を示すフローチャート。
【図７】キャッシュ存在情報２０を電源制御に利用するプロセッサシステム１の概略構成を示すブロック図。
【図８】ＮＵＣＡを行うプロセッサシステムの概略構成を示すブロック図。
【発明を実施するための形態】
【０００８】
以下、図面を参照しながら、本発明の実施形態を説明する。図１は一実施形態によるプロセッサシステム１の概略構成を示すブロック図である。図１のプロセッサシステム１は、プロセッサ（ＣＰＵ）２と、メモリ管理ユニット（ＭＭＵ：Memory Management Unit）３と、トランスレーション・ルックアサイド・バッファ（ＴＬＢ：Translation Lookaside Buffer）４と、ページテーブル５と、１次キャッシュメモリ（Ｌ１キャッシュ）６と、２次キャッシュメモリ（Ｌ２キャッシュ）７と、３次キャッシュメモリ（Ｌ３キャッシュ）８と、４次キャッシュメモリ（Ｌ４キャッシュ）９と、を備えている。
【０００９】
Ｌ１〜Ｌ４キャッシュ６〜９には、メインメモリ１０に格納されたデータ、またはメインメモリ１０に格納されるべきデータの少なくとも一部が格納される。これらキャッシュ６〜９は、キャッシュ内に保持するデータを特定可能なアドレス情報を保持するタグ部を有する。タグ部の実装形態には、専用のメモリ領域を保持するものや、データを保持するメモリ領域の一部に保持するものなど様々なものがあり、本実施形態ではそれら全てと組み合わせ可能である。
【００１０】
メインメモリ１０以外の、プロセッサ２、ＭＭＵ３、Ｌ１キャッシュ６、Ｌ２キャッシュ７、Ｌ３キャッシュ８およびＬ４キャッシュ９は、例えば一つのチップに集積される。例えば、プロセッサ２、ＭＭＵ３、Ｌ１キャッシュ６、Ｌ２キャッシュ７およびＬ３キャッシュ８が１つのチップに集積され、Ｌ４キャッシュ９は別のチップに集積され、それらがチップ同士の積層構造に基づき、金属配線によってチップ同士が直接接合されているシステムであってもよい。また、本実施形態では、ＭＭＵ３、Ｌ１〜Ｌ４キャッシュ６〜９をキャッシュシステムと呼ぶ。
【００１１】
Ｌ１〜Ｌ４キャッシュ６〜９は、メインメモリ１０よりも高速アクセスが可能な半導体メモリで構成されている。それぞれのキャッシュへのデータ配置ポリシには様々なバリエーションが考えられる。例えば、Inclusion方式がある。この場合、Ｌ２キャッシュ７には、Ｌ１キャッシュ６に格納されたデータのすべてが格納される。Ｌ３キャッシュ８には、Ｌ２キャッシュ７に格納されたデータのすべてが格納される。Ｌ４キャッシュ９には、Ｌ３キャッシュ８に格納されたデータのすべてが格納される。
【００１２】
その他、例えば、Exclusion方式がある。この方式では、例えばＬ１キャッシュ６とＬ２キャッシュ７に同じデータは配置されない。また、例えば、Inclusion方式とExclusion方式のハイブリッド方式がある。この方式では、例えばＬ１キャッシュ６とＬ２キャッシュ７で重複して保持されるデータもあるし、排他的に保持されるデータもある。
【００１３】
これらの方式は、２つのキャッシュ間のデータ配置ポリシであり、複数階層のキャッシュ構成では様々な組み合わせが考えられる。例えば、全ての階層でInclusion方式であってもよい。例えば、Ｌ１キャッシュ６とＬ２キャッシュ７はExclusive方式で、Ｌ２キャッシュ６とＬ３キャッシュ８はInclusion方式であってもよい。本実施形態に示される方式は、これら上記に記した様々なデータ配置ポリシと組み合わせることが可能である。
【００１４】
キャッシュの更新方式にも様々な方式が存在するが、本実施形態はそれら全てと組み合わせ可能である。例えば、キャッシュ書き込みヒット時の書き込み方式がライトスルーであってもよいし、ライトバックであってもよい。例えば、キャッシュ書き込みミス時の書き込み方式がライトアロケートであってもよいし、ノーライトアロケートであってもよい。
【００１５】
Ｌ２キャッシュ７のメモリ容量はＬ１キャッシュ６のメモリ容量以上である。Ｌ３キャッシュ８のメモリ容量はＬ２キャッシュ７のメモリ容量以上である。Ｌ４キャッシュ９のメモリ容量はＬ３キャッシュ８のメモリ容量以上である。このように、高次のキャッシュメモリほどメモリ容量が大きくなる。従って、高次のキャッシュメモリには集積度が高く、容量に比例する傾向にあるリーク電力が少ないメモリを用いることが望ましい。このようなメモリとして、例えば、ＭＲＡＭ（Magnetoresistive Random Access Memory）等の不揮発メモリが考えられる。
【００１６】
ページテーブル５は、OSが管理する仮想アドレス空間と物理アドレス空間のマッピングを格納するテーブルである。一般的に、仮想アドレスがインデックスとして用いられ、仮想アドレス毎に対応する物理アドレス等を格納する領域をもつ。ページテーブル５内の1つの仮想アドレスに対応する領域をページエントリとよぶ。これは、一般的にメインメモリ空間上に配置される。
【００１７】
ＴＬＢ４はページテーブル５内の一部のページエントリをキャッシングするメモリ領域である。一般的にハードウェアで実装され、ソフトウェアで実装されるページテーブルより高速にアクセス可能である。
【００１８】
ＭＭＵ３はＴＬＢ４とページテーブル５を管理し、プロセッサ２が発行した仮想アドレスを物理アドレスに変換するアドレス変換(仮想記憶管理)、メモリ保護機能、キャッシュ制御機能、バス調停機能、等の機能を提供する。Ｌ１キャッシュ６等の上位階層キャッシュは仮想アドレスでアクセスされることもあるが、一般的に、Ｌ２キャッシュ７以下の下位階層のメモリはＭＭＵ３によって変換された物理アドレスでアクセスされる。ＭＭＵ３は、主記憶１０へのデータ配置とデータ追い出しの際に、仮想アドレスと物理アドレスとの変換テーブルを更新する。なお、ＭＭＵ３は全てをハードウェアで実装したり、全てをソフトウェアで実装したり、それらのハイブリッドで実装する等、様々な実装形態が存在する。本実施形態に示される方式は、これら全ての実装形態と組み合わせ可能である。
【００１９】
図１では、ＭＭＵ３とは別個にＴＬＢ４を設けているが、通常はＭＭＵ３の内部にＴＬＢ４が設けられる。本実施形態では、便宜上、ＭＭＵ３とＴＬＢ４を別個に取り扱うが、ＴＬＢ４がＭＭＵ３に内蔵される場合も含むものとする。
【００２０】
メインメモリ１０は、Ｌ１〜Ｌ４キャッシュ６〜９のそれぞれよりもメモリ容量が大きいことから、プロセッサ２等が実装されるチップとは別個の１以上のチップで構成されることが多い。メインメモリ１０を構成するメモリセルは、例えばＤＲＡＭ（Dynamic RAM）セルやＭＲＡＭセルである。なお、ＴＳＶ（Through Silicon Via）等の技術を用いて、プロセッサ２等と一つのチップに混載してもよい。
【００２１】
図２は第１の実施形態における各キャッシュメモリ４〜６およびメインメモリ１０のアクセス優先度を示す図である。図示のように、プロセッサ２が発行した仮想アドレスに対応する物理アドレスは、まず最優先にＬ１キャッシュ６に送られる。この物理アドレスに対応するデータ（以下、対象データ）がＬ１キャッシュ６にある場合は、そのデータはプロセッサ２に送られる。Ｌ１キャッシュ６のメモリ容量は、例えば数１０ｋバイト程度である。
【００２２】
対象データがＬ１キャッシュ６にない場合は、対応する物理アドレスはＬ２キャッシュ７に送られる。Ｌ２キャッシュ７に対象データがある場合は、このデータはＬ１キャッシュ６に格納されるとともに、プロセッサ２にも送られる。Ｌ２キャッシュ７のメモリ容量は、例えば数１００ｋバイト〜数Ｍバイト程度である。
【００２３】
対象データがＬ２キャッシュ７にない場合は、対応する物理アドレスはＬ３キャッシュ８に送られる。Ｌ３キャッシュ８に対象データがある場合は、このデータはＬ２キャッシュ７およびＬ１キャッシュ６に格納されるとともに、プロセッサ２にも送られる。Ｌ３キャッシュ８のメモリ容量は、例えば数Ｍバイト〜数１０Ｍバイト程度である。
【００２４】
対象データがＬ３キャッシュ８にない場合は、対応する物理アドレスはＬ４キャッシュ９に送られる。Ｌ４キャッシュ９に対象データがある場合は、このデータはＬ１〜Ｌ３キャッシュ８に格納されるとともに、プロセッサ２にも送られる。Ｌ４キャッシュ９のメモリ容量は、例えば１００Ｍバイト以上である。
【００２５】
なお、このようなキャッシュメモリ６〜９のデータ転送方式は一例を示したものであり、本実施形態は他の様々なデータ転送方式と組み合わせ可能である。例えば、Ｌ４キャッシュ９にヒットした場合に、Ｌ２キャッシュ７やＬ３キャッシュ８へのデータ格納は行わずＬ１キャッシュ６にのみデータを格納するデータ転送方式とも組わせ可能である。
【００２６】
対象データがＬ４キャッシュ９にない場合は、対応する物理アドレスはメインメモリ１０に送られる。本実施形態では、メインメモリ１０には、Ｌ４キャッシュ９に格納されている全データが格納されているものとする。本実施形態は、上述したキャッシュ間データ配置ポリシに限定されるものではない。メインメモリ１０には、ＭＭＵ３で管理されるページ単位のデータが格納される。一般的に、ＭＭＵ３で管理されるページ単位のデータはメインメモリ１０と補助記憶装置に配置されるが、本実施形態では簡易化のため全てのデータがメインメモリ１０に配置されているものとする。本実施形態では、メインメモリ１０に対象データがある場合は、このデータはＬ１〜Ｌ４キャッシュ６〜９にも格納されるとともに、プロセッサ２にも送られる。メインメモリ１０のメモリ容量は、例えば数Ｇバイト程度である。
【００２７】
このように、Ｌ１〜Ｌ４キャッシュ６〜９は階層化されており、次数の大きい（下位階層の）キャッシュメモリほどメモリ容量は大きい。本実施形態では、次数の大きいキャッシュメモリには、次数の小さい（上位階層の）キャッシュメモリに格納されている全データが格納される。
【００２８】
図３はＴＬＢ４の内部構造の一例を示す図である。ＴＬＢ４は、ページ単位で各種情報を管理する。ここで、ページとは、例えば４ｋバイトのデータである。
【００２９】
図３は１ページ分のページエントリ情報１１の一例を示している。図３のページエントリ情報１１は、アドレス変換情報１２と、ダーティビット１３と、アクセスビット１４と、ページ・キャッシュ・ディセーブルビット１５と、ページ・ライトスルービット１６と、ユーザ・スーパーバイザビット１７と、リードライトビット１８と、プレゼントビット１９とを有し、これ以外に、キャッシュ存在情報２０を有する。
【００３０】
ページエントリ内の各種情報の配置順序は１例を示しており、本実施形態はこれに限定されるものではない。なお、既存のプロセッサに本実施形態を適用する場合(既存のページテーブルにキャッシュ存在情報の追加する場合)には、既存のページエントリの空き領域に格納する方法と、既存のページエントリを拡張(ビット幅を増やす)方法とが考えられる。
【００３１】
更に、キャッシュ存在情報を含むページエントリを配置する対象は、ＴＬＢ４のみである場合と、ページテーブル５のみである場合と、ＴＬＢ４とページテーブル５の両方に配置する場合とが考えられる。これら３つの選択肢は、上記の「既存ページエントリへのキャッシュ存在情報追加」と「既存のページエントリを拡張」という２つの方法と組み合わせ可能である。
【００３２】
キャッシュ存在情報をＴＬＢ４とページテーブル５の両方に配置する場合、ページテーブル５も同様の内部構造のページエントリ情報１１を有することが望ましい。ＴＬＢ４には、プロセッサ２が最近発行した仮想アドレスに関するアドレス変換情報が格納されるのに対して、ページテーブル５には、メインメモリ１０全体に関するアドレス変換情報が格納されるため、プロセッサ２が発行した仮想アドレスについてのページエントリ情報１１がＴＬＢ４内に存在しない場合でも、ページテーブル５を参照することで、該当するページエントリ情報１１内に格納されたキャッシュ存在情報２０を取得できる。また、ＴＬＢ４内の少なくとも一部のページエントリ情報１１を追い出す（フラッシュする）ときは、フラッシュすべきページエントリ情報１１と対応するキャッシュ存在情報２０とをページテーブル５に書き戻すのが望ましい。これにより、ＴＬＢ４に格納しきれなかったページエントリ情報１１と対応するキャッシュ存在情報２０をページテーブル５に格納できる。
【００３３】
本実施形態では、一例として、ＴＬＢ４とページテーブル５の両方にキャッシュ存在情報２０を保持する方式を示す。さらに、既存のページエントリにキャッシュ存在情報２０を追加する場合を想定する。また、既存のページエントリにはキャッシュ存在情報２０を追加する空き領域が十分に存在すると仮定する。
【００３４】
アドレス変換情報１２は、プロセッサ２が発行した仮想アドレスを物理アドレスに変換するための情報である。例えば、論理アドレスに対応する物理アドレスや、階層化されたページテーブル５へのポインタがこれにあたる。ダーティビット１３は、このページに書き込みを行ったときに１に設定される。アクセスビット１４は、このページにアクセスすると１に設定される。ページ・キャッシュ・ディセーブルビット１５は、このページへのキャッシングを禁止するときに１に設定される。ページ・ライトスルービット１６は、ライトスルーするときに０に設定され、ライトバックするときに１に設定される。なお、ライトスルーとは、キャッシュメモリとメインメモリ１０の両方にデータを書き込むことを指し、ライトバックとは、キャッシュメモリに先にデータを書き込み、その後にメインメモリ１０に書き戻すことを指す。ユーザ・スーパーバイザビット１７は、該当ページをユーザモードで使用するか、スーパーバイザモードで使用するかを設定するものである。リードライトビット１８は、読み出しのみを行うときに０に設定され、読み書きを行うときに１に設定される。プレゼントビット１９は、このページがメインメモリ１０に存在するときに１に設定される。
【００３５】
キャッシュ存在情報２０とは、プロセッサ２が発行した仮想アドレスに対応する物理アドレスのデータが１階層以上の特定のキャッシュメモリに格納されているか否かを示す情報である。１ページは例えば４ｋバイトで、１つのキャッシュラインは６４バイトであるため、１ページ分のキャッシュ存在情報２０は、４ｋ／６４バイト＝６４個のキャッシュラインのキャッシュ存在情報２０を含むことになる。
【００３６】
一つのキャッシュラインのキャッシュ存在情報２０は、例えば１ビットで表される。このビットは、プロセッサ２が発行した仮想アドレスに対応するデータが特定のキャッシュメモリに格納されている場合には例えば１に設定され、格納されていない場合には例えば０に設定される。
【００３７】
以下では、Ｌ４キャッシュ９に対応するキャッシュ存在情報２０を設ける例を説明するが、対象のキャッシュはどの階層のキャッシュでもよい。例えば、Ｌ２でもよいしＬ３キャッシュ８に対応するキャッシュ存在情報２０を設けてもよい。
【００３８】
ＭＭＵ３は、ＴＬＢ４を参照して、プロセッサ２が発行した仮想アドレスを物理アドレスに変換するとともに、キャッシュ存在情報２０を取得して、この仮想アドレスに対応するデータがＬ４キャッシュ９に格納されているか否かを判断する。そして、ＭＭＵ３により、Ｌ４キャッシュ９に格納されていないことがわかれば、Ｌ３キャッシュ８にミスしたときに、Ｌ４キャッシュ９にアクセスせずにメインメモリ１０にアクセスする。
【００３９】
図４は本実施形態によるプロセッサシステム１の処理動作を示すフローチャートである。このフローチャートは、プロセッサ２からデータの読み出し要求があった場合の処理手順を示している。
【００４０】
まず、プロセッサ２が仮想アドレスを発行すると（ステップＳ１）、ＭＭＵ３はＴＬＢ４を参照してこの仮想アドレスを物理アドレスに変換するとともに、Ｌ４キャッシュ９のキャッシュ存在情報２０を取得する（ステップＳ２）。まだ、Ｌ１キャッシュ６へのアクセスも行っていないのに、Ｌ４キャッシュ９のキャッシュ存在情報２０を取得するのは、Ｌ３キャッシュ８にミスしてからキャッシュ存在情報２０を取得すると、Ｌ４キャッシュ９にアクセスすべきか否かを判断するタイミングが遅れてしまうためである。また、仮想アドレスから物理アドレスへの変換と同時にキャッシュ存在情報へのアクセスを行うことにより、ＴＬＢ４やページテーブル５へのアクセス回数を削減するといった利点も存在する。なお、本実装形態の選択肢としては、キャッシュ存在情報２０を仮想アドレスから物理アドレスへの変換時には取得せず、Ｌ４キャッシュ９のアクセス前のいずれかのタイミングで取得する方法も存在する。例えば、Ｌ３キャッシュ８にミスした場合に、キャッシュ存在情報２０を取得してもよい。
【００４１】
次に、ステップＳ２で変換した物理アドレスを用いて、Ｌ１キャッシュ６にアクセスし、Ｌ１キャッシュ６のタグメモリを参照してヒット／ミス判定を行う（ステップＳ３）。
【００４２】
Ｌ１キャッシュ６にヒットした場合は、対応するデータをＬ１キャッシュ６から読み出してプロセッサ２に送る（ステップＳ４）。Ｌ１キャッシュ６にミスした場合は、ステップＳ２で変換した物理アドレスを用いて、Ｌ２キャッシュ７にアクセスし、Ｌ２キャッシュ７のタグメモリを参照してヒット／ミス判定を行う（ステップＳ５）。
【００４３】
Ｌ２キャッシュ７にヒットした場合は、この物理アドレスに対応するデータをＬ２キャッシュ７から読み出して、Ｌ１キャッシュ６に格納するとともに、プロセッサ２に送る（ステップＳ６）。Ｌ２キャッシュ７にミスした場合は、ステップＳ２で変換した物理アドレスを用いて、Ｌ３キャッシュ８にアクセスし、Ｌ３キャッシュ８のタグメモリを参照してヒット／ミス判定を行う（ステップＳ７）。
【００４４】
Ｌ３キャッシュ８にヒットした場合は、この物理アドレスに対応するデータをＬ３キャッシュ８から読み出して、Ｌ２キャッシュ７とＬ１キャッシュ６に格納するとともに、プロセッサ２に送る（ステップＳ８）。
【００４５】
Ｌ３キャッシュ８にミスした場合は、ステップＳ２で取得したキャッシュ存在情報２０を参照し、Ｌ４キャッシュ９にヒットしている可能性が高いか否かを判定する（ステップＳ９）。すなわち、ステップＳ９では、キャッシュ存在情報２０によって、Ｌ４キャッシュ９にアクセスするか否かを判定する。ステップＳ９でＬ４キャッシュ９にヒットしている可能性が高いことがわかると、Ｌ４キャッシュ９にアクセスする（ステップＳ１０）。この場合、通常のＬ４キャッシュ９へのアクセスと同様の処理が行われる。すなわち、Ｌ４キャッシュ９のタグメモリにアクセスして、ヒット／ミス判定を行い、ヒットすれば、Ｌ４キャッシュ９のデータキャッシュ部から対象データを読み出す。
【００４６】
一方、キャッシュ存在情報２０を参照した結果、Ｌ４キャッシュ９にミスしている可能性が高いことがわかると、Ｌ４キャッシュ９にはアクセスせずに、メインメモリ１０にアクセスする（ステップＳ１１）。これにより、Ｌ４キャッシュ９のタグメモリにアクセスしてヒット／ミス判定結果が出るまでのタイムラグを生じさせることなく、高速にメインメモリ１０にアクセスできる。
【００４７】
ＭＭＵ３は、Ｌ４キャッシュ９内の少なくとも一部のデータが更新された場合には、更新されたデータのキャッシュラインについてのキャッシュ存在情報２０も更新する。図３に示したキャッシュ存在情報２０を更新するタイミングは、Ｌ４キャッシュ９にデータを格納するタイミングと、Ｌ４キャッシュ９からデータを追い出すタイミングとである。
【００４８】
図５はＬ４キャッシュ９にデータを格納する場合のキャッシュ存在情報２０の更新処理の一例を示すフローチャートである。ＭＭＵ３は、キャッシュミスしたアドレス、または下位階層のキャッシュメモリまたはメインメモリ１０から送られてきたデータのアドレスがＴＬＢ４内のページエントリにあるか否かをチェックする（ステップＳ２１）。
【００４９】
ステップＳ２１がＹＥＳの場合、ＴＬＢ４内のキャッシュ存在情報２０中の対応するキャッシュライン用のビットを１にする（ステップＳ２２）。ステップＳ２１がＮＯの場合、ページテーブル５を参照し、ページテーブル５内のキャッシュ存在情報２０中の対応するキャッシュライン用のビットを１にする（ステップＳ２３）。
【００５０】
図６はＬ４キャッシュ９からデータを追い出す場合のキャッシュ存在情報２０の更新処理の一例を示すフローチャートである。ＭＭＵ３は、キャッシュミスしたアドレス、または下位階層のキャッシュメモリから送られてきたデータのアドレスがＴＬＢ４内のページエントリにあるか否かをチェックする（ステップＳ３１）。
【００５１】
ステップＳ３１がＹＥＳの場合、ＴＬＢ４内のキャッシュ存在情報２０中の対応するキャッシュラインのビットを０にする（ステップＳ３２）。ステップＳ３１がＮＯの場合、ページテーブル５を参照し、ページテーブル５内のキャッシュ存在情報２０中の対応するキャッシュラインのビットを０にする（ステップＳ３３）。
【００５２】
ここまで、キャッシュ存在情報の更新方法を説明したが、更新対象や更新ポリシには様々な変形例が存在する。例えば、ＴＬＢ４とページテーブル５にキャッシュ存在情報を保持する実施形態において、Ｌ４キャッシュ９の保持データが変更された場合にキャッシュ存在情報を更新するのはＴＬＢ４のみであってもよい（このような場合、例えば、ＴＬＢ４からデータが追い出される際にページテーブル５を更新してもよい）。例えば、ＴＬＢ４にキャッシュ存在情報を保持する実施形態において、Ｌ４キャッシュ９の保持データが変更された場合にＴＬＢ４内に該当データがなければ、キャッシュ存在情報を更新しなくてもよい。このような場合、Ｌ４キャッシュ９内に配置されているデータとキャッシュ存在情報の一貫性が失われ、キャッシュ存在情報を用いたＬ４キャッシュ９のアクセス判定においてFalse positiveやFalse negativeといった誤判定が発生する可能性がある。これらの対処法については後述する。
【００５３】
（キャッシュ存在情報２０の保持方法の変形例）
上述した実施形態では、簡略化のため、ＴＬＢ４が１階層のページエントリ・キャッシュとなっている方式を示した。しかしながら、ＴＬＢ４が複数階層の場合においても本実施形態は適用可能である。この場合において、最も単純なキャッシュ存在方法の保持方法は、全ての階層でこれを保持することである。一方で、一部の階層にのみキャッシュ存在情報２０を配置する方法も考えられる。例えば、最も下位階層のＴＬＢ４にのみキャッシュ存在情報２０を配置する方法がある。このような方法を用いることで、ＴＬＢ４へのアクセスを物理的に異なるメモリに分散し、ＴＬＢ４のアクセスの衝突による遅延を軽減することが出来る。この効果が得られる典型的な例としては、ＣＰＵ２からのメモリアクセスによるＴＬＢ４の参照と、Ｌ４キャッシュ９の配置データ変更に伴うキャッシュ存在情報２０の更新のためのＴＬＢ４の参照とが同タイミングに発生した場合に、前者の参照は上位階層のＴＬＢ４でその要求にこたえ、後者の参照は下位階層のＴＬＢ４でその要求にこたえることで、アクセス衝突を回避することが考えられる。
【００５４】
（キャッシュ存在情報２０の形式の変形例）
上述した実施形態では、キャッシュ存在情報２０としてキャッシュライン毎に１ビットのフラグを保持する形式を示した。しかし、キャッシュ存在情報２０はこのような形式に限定されるものではない。
【００５５】
例えば、より詳細化した情報を保持してもよい。例えば、ライン毎のアドレスをすべて保持してもよいし、ライン毎に設けられた記憶領域にラインが格納されているメモリ・バンクIDを記録してもよい。
【００５６】
また、キャッシュ存在情報２０は、ＴＬＢ４のページエントリごとに、１ページ内に含まれる特定のキャッシュメモリ（例えばＬ４キャッシュ９）の全キャッシュラインの情報を要約化した１ビット以上のビット列を含んでいてもよい。その例として、ハッシュ関数を用いて情報を要約する方法がある。ハッシュ関数には様々なものが考えられる。例えば、ページ内のラインのうち、Ｌ４キャッシュ９に存在するライン数を保持するようなものも考えられるし、Ｌ４キャッシュ９に存在するライン・アドレスのORをとるなどのハッシュ化が考えられる。
【００５７】
このように、ハッシュ関数を用いてキャッシュ存在情報２０として要約化された情報を用いる場合などには、その情報のみでＬ４キャッシュ９へのデータ保持と非保持の判断が厳密に行えないことに注意しなければならない。ハッシュ関数を用いて判断を行うときに、要約された情報を用いることにより発生する誤判断にはFalse positive とFalse negativeがある。False positiveが発生する場合は、不必要なＬ４キャッシュ９へのアクセスが行われ、無駄なタグアクセスによる性能低下は発生するものの、プログラムの実行結果には何ら影響を与えないため、問題は軽微である。同様に、False negativeが発生する場合でも、Ｌ４キャッシュ９がライトスルーであれば、Ｌ４キャッシュ９を有効活用できない状況が発生するものの、性能が低下するのみであるため、問題は軽微である。一方で、データ配置ポリシがライトバックである場合、最新のデータ（正しい値を保持するデータ）がＬ４キャッシュ９のみに存在する可能性があるため、False negativeによるＬ４キャッシュ９へのアクセスの回避により、最新でないデータ（誤った数値）を用いて計算を行ってしまう可能性がある。このような場合は、例えば、キャッシュ存在情報２０とページエントリのDirtyビットを参照し、Dirtyビットがセットされている場合はキャッシュ存在情報２０に関わらずＬ４キャッシュ９にアクセスするような追加の制御を行ってもよい。
【００５８】
（他ハードウェア・モジュールと協調したキャッシュ存在情報２０の保持方法の変形例）
本実施形態は、他のハードウェア・モジュールと協調することで、ページエントリに保持する情報を削減することもできる。ページエントリにＬ４キャッシュ９に存在するデータライン数のみを記録する場合を例とする。この場合、Ｌ４キャッシュ９に存在するデータライン数がゼロ以上である場合にＬ４キャッシュ９にアクセスする制御ポリシであるとすると、False positiveが高い確率で発生する。これを抑制する方法として、例えば、ページ単位で、ページ内に存在するラインを特定可能なビットベクタを別なハードウェア・モジュールとして持っておき、（ＴＬＢ４やページテーブル５の）ページエントリの参照によりＬ４キャッシュ９に存在するデータライン数がゼロ以上であれば上記のハードウェア・モジュールを参照するような制御が考えられる。これにより、ＴＬＢ４やページテーブル５におけるキャッシュ存在情報２０に必要なビット数を抑制しつつ、Ｌ４キャッシュ９のアクセス必要性を高精度に判定することが可能となる。
【００５９】
上述した実施形態では、４階層（Ｌ１〜Ｌ４キャッシュ６〜９）のキャッシュメモリを備える例を説明したが、キャッシュメモリの階層数は４階層には限定されない。また、キャッシュ存在情報２０を有するキャッシュメモリもＬ４キャッシュ９には限定されず、１階層以上の任意の階層のキャッシュメモリのそれぞれにキャッシュ存在情報２０を設けてもよい。この場合、各キャッシュ存在情報２０がどの階層のキャッシュメモリに対応するかを示す識別情報を図３のページエントリ情報１１内に設けてもよい。また、２階層以上のキャッシュメモリのキャッシュ存在情報２０を一つにまとめてもよい。
【００６０】
このように、本実施形態では、プロセッサ２が発行した仮想アドレスのデータが１階層以上の特定のキャッシュメモリに格納されているか否かを示すキャッシュ存在情報２０をＴＬＢ４とページテーブル５の少なくとも一方に設けるため、このキャッシュメモリのタグメモリにアクセスする前に、キャッシュ存在情報２０にてキャッシュメモリ内にデータがあるか否かを予測できる。よって、キャッシュメモリ内に対象データがないにもかかわらず、タグメモリにアクセスしてキャッシュミスの結果を待ってから、メインメモリ１０にアクセスするよりも高速に、メインメモリ１０にアクセスできる。また、タグメモリへの不必要なアクセスによる電力オーバヘッドも削減することが可能となる。すなわち、キャッシュメモリ内に対象データがないことがキャッシュ存在情報２０で予測できた場合は、このキャッシュメモリへのアクセスを行わないため、キャッシュミス時の性能・電力のオーバヘッドを削減できる。
【００６１】
本実施形態におけるキャッシュ存在情報２０は、Ｌ４キャッシュ９のように、大容量のキャッシュメモリに設けた場合により大きな効果が得られる。大容量のキャッシュメモリの場合、タグメモリにアクセスするのに時間がかかり、キャッシュミスしたことがわかってからメインメモリ１０にアクセスすると、メインメモリ１０にアクセスするのに余計に時間がかかってしまう。これに対して、キャッシュ存在情報２０を設ければ、キャッシュメモリのタグメモリにアクセスする前に、このキャッシュメモリ内に対象データがあるか否かを精度よく予測できるため、データがあると予測された場合のみタグメモリにアクセスでき、キャッシュミス時にメインメモリ１０により高速にアクセスでき、アクセス効率を向上できる。また、大容量のキャッシュメモリであれば、タグメモリも大容量となるため、そのアクセス電力も大きくなる。高精度なアクセスにより、このアクセス電力も削減可能である。
【００６２】
上述した各実施形態では、Ｌ４キャッシュ９のメモリセルがＭＲＡＭセルの例を説明したが、本実施形態のキャッシュメモリは、他の不揮発性メモリ（例えば、ＲｅＲＡＭ（Resistance RAM）メモリセル、ＰＲＡＭ（Phase Change RAM）、ＦＲＡＭ（Ferroelectric RAM、登録商標）、ＮＡＮＤフラッシュメモリセル）で構成されていてもよい。あるいは、ＳＲＡＭやＤＲＡＭ等の揮発メモリを用いてもよい。
【００６３】
上記の実施形態では、ＴＬＢ４とページテーブル５の少なくとも一方に設けられたキャッシュ存在情報２０により特定のメモリへのアクセス時のヒット/ミスを判定し、タグメモリへの不必要なアクセスを回避する制御を例示した。上記の実施形態以外に、キャッシュ存在情報２０は他の目的にも利用できる。
【００６４】
（キャッシュ存在情報を電源制御に利用する例）
ＴＬＢ４とページテーブル５の少なくとも一方に設けられるキャッシュ存在情報２０は、例えば、キャッシュメモリの電源管理に用いることができる。その例として、Ｌ４キャッシュ９へのアクセスが少ないときは、Ｌ４キャッシュ９の電源を遮断したり、電源電圧を低下させたる低消費電力モードに移行して、消費電力を削減する場合が考えられる。一般的には、低消費電力モードからデータへのアクセスが可能な状態(アクティブモード)に遷移するには、時間的および電力的なオーバーヘッドがある。つまり、電源遮断中からデータへのアクセスが可能な状態に遷移するためには、いくらかの時間が必要となり、同時に電力も消費する。Ｌ４キャッシュアクセス時に低消費電力モードだと、通常のキャッシュレイテンシに加え、電源遮断からアクティブモードへの復帰時間が必要となり、プロセッサ２の性能低下へと繋がる。逆に、積極的にアクティブモードを利用すると、Ｌ４キャッシュ９にデータが存在しないにも拘らず、不必要な電力を消費してしまう。
【００６５】
これを解決する１つの方法として、キャッシュ存在情報２０を利用し、1)Ｌ３キャッシュ８へのヒット/ミスの判定によりＬ４キャッシュ９へのアクセスを予測（特定）し、さらに2)Ｌ４キャッシュ９でのヒット/ミスを判定することが考えられる。1)のＬ３キャッシュ８へのヒット/ミスの判定が可能であれば、Ｌ４キャッシュ９へのアクセスに先行して低消費電力モードからアクティブモードへと状態を遷移させておくことができ、モード遷移に伴うオーバヘッドを隠蔽することが出来る。また、Ｌ４キャッシュ９でのヒット/ミスを判定できれば、Ｌ４キャッシュ９にヒットする場合のみアクティブモードへと遷移させるといったことが可能となり、不必要なモード遷移を抑制することが出来る。
【００６６】
図７はキャッシュ存在情報２０を電源制御に利用するプロセッサシステム１の概略構成を示すブロック図である。図７のプロセッサシステム１は、各階層のキャッシュメモリ６〜９に対応づけて、キャッシュコントローラ２１〜２４が設けられている。これらキャッシュコントローラ２１〜２４は、ＭＭＵ３からの指示に従って、対応するキャッシュメモリ６〜９のアクセス制御と電源制御を行う。例えば、ＭＭＵ３は、キャッシュ存在情報２０に基づいて、Ｌ３キャッシュミスによりＬ４キャッシュ９にアクセスするか否かを判断するとともに、Ｌ４キャッシュ９にアクセスするか否かでＬ４キャッシュ９に供給する電力を制御する。これにより、Ｌ４キャッシュ９にアクセスしない場合は、Ｌ４キャッシュ９を低消費電力モードで動作させることができ、消費電力の削減が図れる。また、Ｌ４キャッシュ９でのヒットが予想される場合は、実際にアクセスを開始する前にＬ４キャッシュ９をアクティブモードに遷移させることで、高速アクセスが可能となる。
【００６７】
（キャッシュ存在情報をデッドラインの制御に利用する例）
ＴＬＢ４とページテーブル５の少なくとも一方に配置されたキャッシュ存在情報２０は、例えば、デッドブラインの特定にも利用できる。デッドラインとは、今後利用される可能性のないキャッシュラインを指す。例えば、解放されたプロセスが利用していたデータがこれにあたる。利用される可能性のないキャッシュラインの保持はキャッシュメモリの利用効率の低下を引き起こす。
【００６８】
これを解決するため、例えば、解放されたプロセスのページをＴＬＢ４とページテーブル５の少なくとも一方で特定し、そのページエントリ内のキャッシュ存在情報２０から特定のキャッシュに該当ページ内のデータが含まれるようであれば、それらのデータを無効化する制御が考えられる。これにより、今後利用されないデータを保持し続けることで、今後利用する可能性の有るデータが追い出されるケースを防止でき、キャッシュメモリを効率的に活用することが可能となる。
【００６９】
キャッシュ存在情報２０をデッドブロックの制御に利用する場合のプロセッサシステム１は、例えば図７と同様のブロック図で実現可能である。プロセッサ２がプロセスを切り替えるときのメモリ管理の手法として、以下の二つがある。一つの手法は、プロセッサ２があるプロセスを解放すると、ＴＬＢ４を完全に書き換える（フラッシュする）ことである。この場合、ＭＭＵは、ＴＬＢ４に格納されていたデータをすべて無効化したことを、ＴＬＢに格納されているキャッシュ存在情報２０に基づき各キャッシュのキャッシュコントローラに通知する。これを受けて、各階層のキャッシュメモリ６〜９は、順々に、該当するデータを無効化する。もう一つの手法は、ＴＬＢ４やページテーブル５が各プロセスを識別可能な識別情報を記憶しており、ＭＭＵ３は、解放されたプロセスに対応する識別情報を取得して、各キャッシュ６のキャッシュコントローラ２１に通知する。これを受けて、各階層のキャッシュメモリ６〜９は、ＴＬＢに格納されているキャッシュ存在情報２０に基づきその識別情報に対応するデータを無効化する。
【００７０】
（キャッシュ存在情報をNUCAの効率的制御に利用する例）
ＴＬＢ４とページテーブル５の少なくとも一方に配置されたキャッシュ存在情報２０は、例えば、NUCA(Non-uniform cache access)の効率的なアクセスにも利用できる。NUCAとは、同一階層のキャッシュをいくつかの領域(バンク)に分割し、ある位置(例えばCPU)からそれぞれの領域に異なるレイテンシでアクセスするキャッシュシステムを指す。このシステムは、特に、大容量のキャッシュを効率的に利用する場合に用いられる。大容量なキャッシュは低速なレイテンシとなりがちだが、NUCAを利用することで、アクセスする対象から近い位置にデータがあれば高速なデータアクセスが可能となる。その利用形態の一例として、マルチコアプロセッサでは、コア毎にバンク(ローカルバンク)を保持し、さらにバンク毎にタグを保持する。あるコアからローカルバンクへとアクセスが発生し、データが存在しなかった場合、コヒーレンシ・アクセスでその他のバンクにデータが存在しないかをチェックする。仮に、その他のバンクにデータが存在したとしても、ローカルバンクへのアクセスとコヒーレンシに要するレイテンシと電力がオーバヘッドとなる。
【００７１】
このようなオーバヘッドを解消する一方式として、例えば、キャッシュ存在情報２０の中にキャッシュラインデータが保持されているバンクID情報を含めてもよい。このような方式を用いれば、ＴＬＢ４とページテーブル５の少なくとも一方へのアクセス時に、データが存在するバンクを特定可能であるため、データが存在しないバンクへのアクセスと、コヒーレンシのオーバヘッドを省略することが可能となる。これにより、キャッシュの性能向上と消費電力削減が実現できる。なお、バンクID情報は、上記の第一の実施形態と同様にハッシュ化された情報であってもよい。
【００７２】
図８はＮＵＣＡを行うプロセッサシステムの概略構成を示すブロック図である。図８の例では、Ｌ４キャッシュ９が４つのメモリバンクに分かれており、各メモリバンクごとに別個にキャッシュコントローラ２５〜２８を備えている。各キャッシュコントローラ２５〜２８は、各メモリバンク内に格納されているデータを、メモリバンクＩＤ情報とともに、ＭＭＵ３に通知する。ＭＭＵ３は、受け取った情報をＴＬＢ４とページテーブル５に登録する。これにより、ＭＭＵ３は、ＴＬＢ４またはページテーブル５を参照することで、プロセッサ２からアクセス要求のあったデータが、どのメモリバンクに格納されているかを迅速に把握でき、該当するメモリバンクに高速にアクセスすることができる。
【００７３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７４】
１  プロセッサシステム、２  プロセッサ、３  ＭＭＵ、４  ＴＬＢ、５  ページテーブル、６  Ｌ１キャッシュ、７  Ｌ２キャッシュ、８  Ｌ３キャッシュ、９  Ｌ４キャッシュ、１０  メインメモリ、１１  ページエントリ情報
【図１】
0006027562.tif 000002
【図２】
0006027562.tif 000003
【図３】
0006027562.tif 000004
【図４】
0006027562.tif 000005
【図５】
0006027562.tif 000006
【図６】
0006027562.tif 000007
【図７】
0006027562.tif 000008
【図８】
0006027562.tif 000009