(57)【要約】【課題】誤り訂正処理によるオーバーヘッドを低減可能なキャッシュメモリおよび誤り訂正回路を提供する。【解決手段】キャッシュメモリ１は、キャッシュライン単位でアクセス可能なキャッシュメモリ部と、キャッシュメモリ部にキャッシュライン単位で格納された各キャッシュラインデータを誤り訂正するための第１冗長符号と、各キャッシュラインデータのうち一部のデータを誤り訂正するための第２冗長符号とを格納する冗長符号記憶部と、を備える。【選択図】図１
2015179307.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュライン単位でアクセス可能なキャッシュメモリ部と、
前記キャッシュメモリ部にキャッシュライン単位で格納された各キャッシュラインデータを誤り訂正するための第１冗長符号と、各キャッシュラインデータのうち一部のデータを誤り訂正するための第２冗長符号とを格納する冗長符号記憶部と、を備えるキャッシュメモリ。
【請求項２】
前記第２冗長符号は、対応するキャッシュラインデータに含まれる、ワードデータの整数倍の長さのデータを誤り訂正するための冗長符号である請求項１に記載のキャッシュメモリ。
【請求項３】
前記冗長符号記憶部は、前記第２冗長符号のそれぞれに対応するデータを識別する識別情報を格納する請求項１または２に記載のキャッシュメモリ。
【請求項４】
前記キャッシュメモリ部は、
各キャッシュラインデータを格納するデータキャッシュ部と、
前記データキャッシュ部に格納される各キャッシュラインデータのアドレス情報を格納するタグ部と、を有し、
前記冗長符号記憶部は、前記タグ部の一部に設けられる請求項１乃至３のいずれかに記載のキャッシュメモリ。
【請求項５】
前記キャッシュメモリ部は、
各キャッシュラインデータを格納するデータキャッシュ部と、
前記データキャッシュ部に格納される各キャッシュラインデータのアドレス情報を格納するタグ部と、を有し、
前記冗長符号記憶部は、前記データキャッシュ部または前記タグ部の一部に設けられる請求項１乃至３のいずれかに記載のキャッシュメモリ。
【請求項６】
前記データキャッシュ部は、不揮発性メモリであり、
前記タグ部は、揮発性メモリである請求項４または５に記載のキャッシュメモリ。
【請求項７】
前記データキャッシュ部は、ＭＲＡＭ（Magnetoresistive RAM）であり、
前記タグ部は、ＳＲＡＭ（Static RAM）である請求項４乃至６のいずれかに記載のキャッシュメモリ。
【請求項８】
前記データキャッシュ部は、それぞれがキャッシュライン単位でアクセス可能な複数のウェイを有し、
前記冗長符号記憶部は、各ウェイで同じ数の前記第２冗長符号を格納する請求項４乃至７のいずれかに記載のキャッシュメモリ。
【請求項９】
前記データキャッシュ部は、それぞれがキャッシュライン単位でアクセス可能な複数のウェイを有し、
前記複数のウェイは、それぞれ異なる数の前記第２冗長符号を生成する２以上のウェイを含む請求項４乃至７のいずれかに記載のキャッシュメモリ。
【請求項１０】
前記冗長符号記憶部は、前記データキャッシュ部内のアクセス頻度の高いウェイほど、当該ウェイ内のより多くの前記第２冗長符号を格納する請求項９に記載のキャッシュメモリ。
【請求項１１】
前記冗長符号記憶部は、前記データキャッシュ部の各キャッシュラインの中で、先頭側アドレスに対応する少なくとも１つの前記第２冗長符号を格納する請求項４乃至９のいずれかに記載のキャッシュメモリ。
【請求項１２】
前記冗長符号記憶部は、前記データキャッシュ部に格納されたデータのうち、プロセッサによるアクセス回数の多いデータに対応する前記第２冗長符号を優先して格納する請求項９に記載のキャッシュメモリ。
【請求項１３】
前記キャッシュメモリ部および前記冗長符号記憶部へのアクセスを制御するキャッシュコントローラを備え、
前記キャッシュコントローラは、前記第１冗長符号および前記第２冗長符号を前記冗長符号記憶部に並行して格納する制御を行う請求項１乃至１２のいずれかに記載のキャッシュメモリ。
【請求項１４】
前記キャッシュメモリ部および前記冗長符号記憶部へのアクセスを制御するキャッシュコントローラを備え、
前記キャッシュコントローラは、前記第１冗長符号および前記第２冗長符号を前記冗長符号記憶部に逐次的に格納する制御を行う請求項１乃至１２のいずれかに記載のキャッシュメモリ。
【請求項１５】
前記キャッシュメモリ部および前記冗長符号記憶部へのアクセスを制御するキャッシュコントローラを備え、
前記キャッシュコントローラは、キャッシュラインデータを更新する際には、当該キャッシュラインデータのうち前記一部のデータに変更がある場合のみ、前記冗長符号記憶部内の前記第２冗長符号を更新する請求項１乃至１２のいずれかに記載のキャッシュメモリ。
【請求項１６】
キャッシュメモリ部にキャッシュライン単位で格納された各キャッシュラインデータに対応する第１冗長符号に基づいて、キャッシュライン単位での誤り訂正を行う第１誤り訂正部と、
各キャッシュラインデータのうち一部のデータに対応する第２冗長符号に基づいて、対応するデータの誤り訂正を行う第２誤り訂正部と、を備える誤り訂正回路。
【請求項１７】
前記第２誤り訂正部により誤り訂正されたデータを、前記第１誤り訂正部による誤り訂正処理が終了する前に、プロセッサコアに供給するデータ転送制御部を備える請求項１６に記載の誤り訂正回路。
【請求項１８】
プロセッサコアと、
１次キャッシュメモリと、
２次キャッシュメモリと、を備え、
前記２次キャッシュメモリは、
データキャッシュ部と、
前記データキャッシュ部に格納されたデータのアドレス情報を格納するタグ部と、
前記データキャッシュ部にキャッシュライン単位で格納された各キャッシュラインデータを誤り訂正するための第１冗長符号と、各キャッシュラインデータのうち一部のデータを誤り訂正するための第２冗長符号とを格納する冗長符号記憶部と、を有するプロセッサシステム。
【請求項１９】
前記第１冗長符号に基づいて、キャッシュライン単位での誤り訂正を行う第１誤り訂正部と、
各キャッシュラインデータのうち一部のデータに対応する第２冗長符号に基づいて、対応するデータの誤り訂正を行う第２誤り訂正部と、
前記第２誤り訂正部により誤り訂正されたデータを、前記第１誤り訂正部による誤り訂正処理が終了する前に、前記プロセッサコアに供給するデータ転送制御部と、を備える請求項１８に記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、キャッシュメモリ、誤り訂正回路およびプロセッサシステムに関する。
【背景技術】
【０００２】
メモリウォール問題と称されるように、メモリアクセスはプロセッサコアの性能と消費電力のボトルネックとなっている。このメモリウォール問題への対策として、キャッシュメモリは大容量化する傾向にあり、それに伴ってキャッシュメモリのリーク電流の増加が問題となっている。
【０００３】
大容量キャッシュメモリの候補として注目されているＭＲＡＭは、不揮発性であり、現状のキャッシュメモリで用いられているＳＲＡＭよりリーク電流が圧倒的に小さいという特徴がある。
【０００４】
しかしながら、ＭＲＡＭは、ＳＲＡＭに比べてビットエラーの発生頻度が高いという問題がある。このため、ＭＲＡＭにはＥＣＣ（Error Check and Correction）回路が必須となる。ＥＣＣ回路による誤り訂正処理は、メモリアクセスと逐次的に行う必要があり、メモリアクセスのレイテンシの増加を引き起こす。
【０００５】
ＥＣＣ回路では、キャッシュメモリのアクセス単位であるキャッシュラインごとに冗長符号を生成し、冗長符号を用いてキャッシュラインごとに誤り訂正を行う。このため、キャッシュラインのビット長が長くなるほど、誤り訂正に要する時間が長くなる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Energy-Efficient Cache Design Using Variable-Strength Error-Correcting Codes(ISCA, 2011)
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明が解決しようとする課題は、誤り訂正処理によるオーバーヘッドを低減可能なキャッシュメモリ、誤り訂正回路およびプロセッサシステムを提供することである。
【課題を解決するための手段】
【０００８】
本実施形態によれば、キャッシュライン単位でアクセス可能なキャッシュメモリ部と、前記キャッシュメモリ部にキャッシュライン単位で格納された各キャッシュラインデータを誤り訂正するための第１冗長符号と、各キャッシュラインデータのうち一部のデータを誤り訂正するための第２冗長符号とを格納する冗長符号記憶部と、を備えるキャッシュメモリが提供される。
【図面の簡単な説明】
【０００９】
【図１】一実施形態によるキャッシュメモリ１を内蔵したプロセッサシステム２の概略構成を示すブロック図。
【図２】本実施形態によるメモリの階層構造を示す図。
【図３】図１のキャッシュメモリ１の内部をより具体化したブロック図。
【図４】本実施形態によるＬ２キャッシュ７の構造を説明する図。
【図５】各ウェイごとに格納可能な第２冗長符号の数が同数でない例を示す図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施形態を説明する。以下の実施形態では、キャッシュメモリおよび誤り訂正回路の特徴的な構成および動作を中心に説明するが、キャッシュメモリおよび誤り訂正回路には以下の説明で記述しない構成および動作が存在しうる。ただし、これらの省略した構成および動作も本実施形態の範囲に含まれうるものである。
【００１１】
図１は一実施形態によるキャッシュメモリ１を内蔵したプロセッサシステム２の概略構成を示すブロック図である。図１のプロセッサシステム２は、キャッシュメモリ１と、プロセッサコア３と、ＭＭＵ４とを備えている。キャッシュメモリ１は、階層構造になっており、例えばＬ１キャッシュ（L1 Cache）６とＬ２キャッシュ（L2 Cache）７を有する。
【００１２】
ＭＭＵ４は、プロセッサコア３が発行した仮想アドレスを物理アドレスに変換する。変換された物理アドレスは、メインメモリ８およびキャッシュメモリ１へのアクセスに利用される。ＭＭＵ４は、メインメモリ８に格納に格納されているデータが変更されると、仮想アドレスと物理アドレスとの変換テーブルを更新する。
【００１３】
図１のキャッシュメモリ１は、メインメモリ８に記憶されたデータまたは記憶されるべきデータの少なくとも一部を記憶するものであり、Ｌ１キャッシュ６とＬ２以降の高次のキャッシュメモリ７とを含んでいる。
【００１４】
図２は本実施形態によるメモリの階層構造を示す図である。図示のように、最上位の階層にはＬ１キャッシュ６が位置し、次の階層にはＬ２キャッシュ７が位置し、最下位の階層にはメインメモリ８が位置する。プロセッサコア（ＣＰＵ）３が任意のアドレスを発行すると、まずＬ１キャッシュ６へのアクセスが行われ、Ｌ１キャッシュ６にヒットしない場合は、次にＬ２キャッシュ７へのアクセスが行われ、Ｌ２キャッシュ７にヒットしない場合は、メインメモリ８へのアクセスが行われる。上述したように、Ｌ３キャッシュ以降の高次のキャッシュメモリ１を設けてもよいが、本実施形態では、キャッシュメモリ１がＬ１キャッシュ６とＬ２キャッシュ７の２階層である例を説明する。
【００１５】
Ｌ１キャッシュ６は例えば数１０ｋバイトのメモリ容量を持ち、Ｌ２キャッシュ７は例えば数１００ｋバイト〜数Ｍバイトのメモリ容量を持ち、メインメモリ８は例えば数Ｇバイトのメモリ容量を持っている。プロセッサコア３は、Ｌ１キャッシュ６とＬ２キャッシュ７に対しては通常はキャッシュライン単位でアクセスし、メインメモリ８に対してはページ単位でアクセスする。キャッシュラインは例えば６４バイトであり、１ページは例えば４ｋバイトである。なお、キャッシュラインやページのバイト数は任意である。
【００１６】
階層化されたキャッシュメモリ１にデータを配置するポリシには、様々なバリエーションが考えられる。例えば、Inclusion方式では、Ｌ１キャッシュ６に格納されるデータは通常Ｌ２キャッシュ７にも格納され、Ｌ２キャッシュ７に格納されるデータは通常メインメモリ８にも格納される。
【００１７】
その他、Exclusion方式もある。この方式では、Ｌ１キャッシュ６とＬ２キャッシュ７には同じデータは配置されない。また、例えば、Inclusion方式とExclusion方式のハイブリッド方式がある。この方式では、例えばＬ１キャッシュ６とＬ２キャッシュ７で重複して保持されるデータもあるし、排他的に保持されるデータもある。
【００１８】
これらの方式は、２つのキャッシュ間のデータ配置ポリシであり、複数階層のキャッシュ構成では様々な組み合わせが考えられる。例えば、全ての階層でInclusion方式であってもよい。例えば、Ｌ１キャッシュ６とＬ２キャッシュ７はExclusive方式で、Ｌ２キャッシュ６とより下位階層のキャッシュとはInclusion方式であってもよい。
【００１９】
図３は図１のキャッシュメモリ１の内部をより具体化したプロセッサシステム２のブロック図である。プロセッサコア３は、例えばマルチコア構成になっており、複数のコア１１を有する。各コア１１にはＬ１キャッシュ６が接続されている。Ｌ１キャッシュ６は、高速性が要求されるため、例えばＳＲＡＭ（Static Random Access Memory）で構成されている。なお、プロセッサコア３は、シングルコア構成であってもよい。この場合、Ｌ１キャッシュ６は一つだけ設けられる。
【００２０】
図３では、キャッシュメモリ１、プロセッサコア３およびＭＭＵ４を合わせたものをキャッシュメモリシステム１０としている。キャッシュメモリシステム１０は、メインメモリコントローラ２０を介してメインメモリ８とデータの送受を行う。ＭＭＵ４は通常、各コア１１ごとに設けられる。また、ＭＭＵ４は省略することも可能である。
【００２１】
図１のＬ２キャッシュ７は、データキャッシュ部１２と、タグ部１３と、冗長符号記憶部１４と、キャッシュコントローラ１５と、誤り訂正コントローラ１６とを有する。
【００２２】
データキャッシュ部１２は、キャッシュライン単位でアクセス可能なキャッシュラインデータを格納する。タグ部１３は、各キャッシュラインデータのアドレス情報を格納する。
【００２３】
冗長符号記憶部１４は、データキャッシュ部１２に格納された各キャッシュラインデータを誤り訂正するための第１冗長符号を格納する第１記憶部１４ａと、各キャッシュラインデータのうち一部のデータを誤り訂正するための第２冗長符号を格納する第２記憶部１４ｂとを有する。第１冗長符号と第２冗長符号の種類がどのようなものであってもよい。誤り訂正のための冗長符号としては、例えば、ハミング符号やＢＣＨ符号やＲＳ符号がある。例えば、第１冗長符号と第２冗長符号としてＢＣＨ符号を用いてもよい。例えば、第1冗長符号としてハミング符号を用いて、第２冗長符号としてＢＣＨ符号を用いてもよい。
【００２４】
第２冗長符号が生成されるデータは、例えば、キャッシュライン中の重要なデータ、すなわちクリティカルデータである。プロセッサコア３は、キャッシュラインデータを単位としてＬ２キャッシュ７にアクセスするが、プロセッサコア３が必要とするデータはキャッシュラインデータ中の一部のデータであることが多い。そこで、本実施形態では、プロセッサコア３にとって重要なクリティカルデータについて、第２冗長符号を生成して冗長符号記憶部１４に記憶しておき、このデータをプロセッサコア３が読み出す際に、第１冗長符号によるキャッシュライン全体の誤り訂正を待たずに、このデータを第２冗長符号にて誤り訂正して迅速にプロセッサコア３に伝送できるようにしている。
【００２５】
ここで、クリティカルデータとは、演算器すなわちコア１１が演算で利用する何れかのデータ単位である。例えば、ワードデータがこれにあたる。ワードデータとは、例えば、３２ビット演算器では３２ビットであり、６４ビット演算器では６４ビットである。
【００２６】
第１冗長符号は、各キャッシュラインデータごとに設けられるため、冗長符号記憶部１４内の冗長符号保持エントリをそれぞれのキャッシュラインと１対１対応させることで、各第１冗長符号に対応するキャッシュラインデータを識別できる。第２冗長符号は各キャッシュラインデータのうちの一部のデータ(クリティカルデータ)に対応するため、第２冗長符号のそれぞれがどのデータに対応するかを容易に識別できないおそれがある。そこで、冗長符号記憶部１４には、第２冗長符号のそれぞれに対応するデータのワード識別情報を設けるのが望ましい。ワード識別情報の保持方式は、動的アプローチと静的アプローチに分類できる。
【００２７】
動的アプローチの識別情報の保持方式として、例えば、クリティカルデータを識別可能なアドレス情報を保持する方式が考えられる。例えば、キャッシュラインデータが６４バイトで、第２冗長符号に対応するデータ長が８バイトの場合を考える。キャッシュライン中に第２冗長符号に対応するデータとして８種類が考えられるため、少なくとも３ビットのアドレス情報が必要になる。つまり、ワード識別情報を保持するワード識別領域が必要である。
【００２８】
動的アプローチの識別情報の保持方式として、例えば、ライン中に保持されているデータがクリティカルデータであるかどうかの１ビットのフラグで保持する形式が考えられる。上記の例だと、キャッシュラインの情報を保持するのに８ビットが必要となる。例えば、ラインを構成するデータのアドレス順に、１番目のデータを１ビット目、２番目のデータを２ビット目・・・８番目のデータを８ビット目、というように対応付ける方法が考えられる。本方式でも、ワード識別情報を保持するワード識別領域が必要である。
【００２９】
また、静的アプローチの識別情報保持方式として、クリティカルデータとなるデータを決めておき、識別情報を保持するメモリ領域を設けない実施形態も可能である。例えば、クリティカルデータをラインの先頭データと決めておけば、識別情報を保持することなく、どのデータの第2冗長符号が冗長符号記憶部に保持されているかを特定可能である。つまり、本方式では、ワード識別情報を保持するワード識別領域を備えなくてもよい。
【００３０】
なお、Ｌ２キャッシュへのアクセス情報として、ラインを構成するワードまで特定可能な完全な物理アドレスが与えられる場合と、ラインを特定可能な状態に丸められたアドレスが与えられる場合がある。完全な物理アドレスが与えられる場合には動的アプローチを実装可能であるが、丸められたアドレスが用いられる場合には動的アプローチは実装できない。丸められたアドレスが与えられる場合には、例えば、静的アプローチをとればよい。ワード識別領域は、各キャッシュラインデータと論理的または物理的に対応関係にあればどのような形態でもよい。本実施形態では、簡単化のため、タグ部１３にワード識別領域が存在するものとする。
【００３１】
データキャッシュ部１２は、例えば不揮発性メモリを用いて構成される。データキャッシュ部１２として使用可能な不揮発性メモリは、例えば書き換え回数が事実上無制限なＭＲＡＭ（Magnetoresistive RAM）である。例えば、ＳＲＡＭやＤＲＡＭを用いてもよい。
【００３２】
タグ部１３は、例えば揮発性メモリを用いて構成される。タグ部１３として使用可能な揮発性メモリは、例えばＭＲＡＭよりも高速のＳＲＡＭ（Static RAM）である。例えば、ＭＲＡＭやＤＲＡＭを用いてもよい。
【００３３】
上述した冗長符号記憶部１４は、不揮発性メモリで構成してもよいし、揮発性メモリで構成してもよい。その選択基準には様々なものが考えられる。例えば、ＭＲＡＭとＳＲＡＭでは、一般にＳＲＡＭの方がアクセス速度が高速であるため、冗長符号記憶部１４のアクセス速度を高速化したい場合は冗長符号記憶部１４をＳＲＡＭで構成すればよい。例えば、ＭＲＡＭとＳＲＡＭでは、一般にＳＲＡＭの方がデータエラーの発生確率が少ないため、冗長符号記憶部１４の信頼性を高めたい場合は、冗長ビット記憶部１４をＳＲＡＭで構成すればよい。例えば、ＭＲＡＭとＳＲＡＭでは、ＭＲＡＭの方が大容量化が容易であるため、ＳＲＡＭのメモリ容量を増やしたくない場合は、冗長符号記憶部１４をＭＲＡＭで構成すればよい。例えば、ＭＲＡＭとＳＲＡＭでは、ＭＲＡＭの方がリーク電力が少ないため、リーク電力を増やしたくない場合は、冗長記号記憶部１４をＭＲＡＭで構成すればよい。
【００３４】
また、冗長符号記憶部１４の各エントリは、タグ部１３の各エントリと１対１の対応関係にある。冗長符号記憶部１４に保持されている冗長符号の信頼性を保証するため、冗長符号記憶部１４にはＳＲＡＭ等のエラー頻度の低いメモリを用いることが望ましい。例えば、タグ部１３にＳＲＡＭを用いる場合に、冗長符号記憶部１４をタグ部１３の内部に設けてもよい。ただし、冗長符号記憶部１４はデータキャッシュ部１２の一部に設けてもよい。あるいは、データキャッシュ部１２とタグ部１３とは別個に冗長符号記憶部１４を設けてもよい。
【００３５】
キャッシュコントローラ１５は、プロセッサコア３が発行したアドレスに対応するデータがデータキャッシュ部１２に格納されているか否かを判定する。すなわち、キャッシュコントローラ１５は、プロセッサコア３が発行したアドレスがタグ部１３に格納されているアドレス情報に一致するか否かのヒット／ミス判定を行って、Ｌ２キャッシュ７のデータ書き込みおよび読み出しと、メインメモリ８への書き戻しを制御する。
【００３６】
誤り訂正コントローラ（誤り訂正回路）１６は、図３に示すように、第１誤り訂正部１６ａと、第２誤り訂正部１６ｂと、データ転送制御部１６ｃとを有する。第１誤り訂正部１６ａは、データキャッシュ部１２にキャッシュライン単位で格納された各キャッシュラインデータに対応する第１冗長符号に基づいて、キャッシュライン単位での誤り訂正を行う。第２誤り訂正部１６ｂは、各キャッシュラインデータのうち一部のデータに対応する第２冗長符号に基づいて、対応するデータの誤り訂正を行う。データ転送制御部１６ｃは、第２誤り訂正部１６ｂにより誤り訂正されたデータを、第１誤り訂正部１６ａによる誤り訂正処理が終了する前に、プロセッサコア３に供給する。
【００３７】
より具体的には、誤り訂正コントローラ１６は、Ｌ２キャッシュ７に新たなキャッシュラインデータを格納する場合は、このキャッシュラインデータを誤り訂正するための第１冗長符号を生成して、冗長符号記憶部１４に格納する。また、誤り訂正コントローラ１６は、プロセッサコア３から読み出し要求のあったキャッシュラインデータをデータキャッシュ部１２から読み出した場合は、このデータに対応する第１冗長符号を冗長符号記憶部１４から読み出して誤り訂正処理を行い、誤り訂正処理後のキャッシュラインデータを読み出し要求者に伝送する。
【００３８】
さらに、誤り訂正コントローラ１６は、Ｌ２キャッシュ７に新たなキャッシュラインデータを格納する場合は、このキャッシュラインデータ中の特定のデータを誤り訂正するための第２冗長符号を生成して、冗長符号記憶部１４に格納することが可能である。特定のデータの指定は、キャッシュラインデータ中の予め定めたビット位置から始まる所定のビット長のデータを誤り訂正コントローラ１６が自動的に取得してもよいし、プログラム実行中のアクセス情報を基に動的に決定してもよい。また、誤り訂正コントローラ１６は、プロセッサコア３から読み出し要求のあったキャッシュラインデータ中に、第２冗長符号が生成されたデータが含まれている場合には、第２冗長符号を用いてデータの誤り訂正処理を行って、誤り訂正処理後のデータを読み出し要求者に伝送する。
【００３９】
なお、読み出し要求者とは、本例ではＬ１キャッシュ６である。Ｌ１キャッシュ６はＬ２キャッシュ７から送られてきたデータにプロセッサコア１１が読み出し要求を出したデータが含まれていれば、当該データをプロセッサコア１１に転送する。また、冗長符号の生成は、データを格納する場合に限らず、任意のタイミングで行ってもよい。例えば、一定時間毎に冗長符号の生成を行ってもよい。
【００４０】
このように、誤り訂正コントローラ１６は、プロセッサコア３から読み出し要求があった場合、第１冗長符号に対応するキャッシュラインデータの誤り訂正処理と、第２冗長符号に対応するデータの誤り訂正処理とを並行して行うか、あるいは逐次的に行う。
【００４１】
第２冗長符号に対応するデータは、キャッシュラインデータよりもビット長が短いため、両方の誤り訂正処理を並行して行った場合、第２冗長符号に対応するデータの誤り訂正処理は、第１冗長符号に対応するキャッシュラインデータの誤り訂正処理よりも短時間で終了する可能性が高い。誤り訂正コントローラ１６は、第２冗長符号に対応するデータの誤り訂正処理が終了した場合は、第１冗長符号に対応するキャッシュラインデータの誤り訂正処理がまだ終わっていなくても、誤り訂正済の第２冗長符号に対応するデータを先にプロセッサコア３に伝送する。これにより、プロセッサコア３は、重要なデータを迅速に取得でき、Ｌ２キャッシュ７に対するアクセス効率を向上できる。
【００４２】
第２冗長符号に対応するデータのビット長は、キャッシュラインデータのビット長よりも短ければよく、具体的なビット長は特に限定されない。ただし、プロセッサコア３は８バイトのワードデータを単位としてデータアクセスを行うため、第２冗長符号に対応するデータのバイト長は、８×ｎ（ｎは１以上の整数）バイトが望ましい。
【００４３】
図１の実施形態では、第１冗長符号と第２冗長符号を保持する対象はＬ２キャッシュ７となっているが、本実施形態はこれに限定されるものではない。例えば、Ｌ１キャッシュ６が対象であってもよいし、不図示のＬ３キャッシュ以降の高次キャッシュメモリが対象であってもよい。
【００４４】
本実施形態では、第１冗長符号と第２冗長符号により、誤り訂正処理を行う場合を例示しているが、本実施形態はこれに限定されるものではない。例えば、第１冗長符号と第２冗長符号により誤り検出のみを行ってもよい。あるいは、例えば、第１冗長符号により誤り訂正を行い、第２冗長符号により誤り検出のみを行ってもよい。このとき、例えば、第２冗長符号により誤りが検出された場合、データ転送制御部１６ｃはワードデータの転送を行わず、第１冗長符号により誤り訂正を行ったラインデータを転送すればよい。なお、誤り検出のみを行う場合は、図１の第１誤り訂正部１６ａや第２誤り訂正部１６ｂは誤り検出機能のみを保持するものであってもよい。
【００４５】
また、第１誤り訂正部１６ａおよび第２誤り訂正部１６ｂは、物理的には１つであってもよい。この場合、第１誤り訂正部１６ａによる誤り訂正と、第２誤り訂正部１６ｂによる誤り訂正を逐次的に行ってもよい。
【００４６】
（Ｌ２キャッシュ７の構造）
図４は本実施形態によるＬ２キャッシュ７の構造を説明する図である。図４のＬ２キャッシュ７内のデータキャッシュ部１２は、複数のウェイｗａｙ０〜ｗａｙ７に分けられており、各ウェイにはキャッシュライン単位でアクセスが行われる。なお、ウェイの数は８個に限定されない。また、データキャッシュ部１２を複数のウェイに分けることは必須ではない。
【００４７】
冗長符号記憶部１４内の第１記憶部１４ａは、ウェイごとに第１冗長符号を格納し、第２記憶部１４ｂは、ウェイごとに少なくとも１つの第２冗長符号を格納する。図４の例では、各ウェイに格納する第２冗長符号の数は同数であり、例えば各ウェイごとに２ワードデータに対応する２個の第２冗長符号が冗長符号記憶部１４に格納される。なお、冗長符号記憶部１４に格納する第２冗長符号の数は任意である。
【００４８】
各ウェイのキャッシュラインデータのうち、どの２ワードデータについて第２冗長符号を生成するかも任意である。例えば、各キャッシュラインデータの先頭側の２ワードデータというように静的に決定された情報に基づきついて第２冗長符号を生成してもよいし、プログラム実行中の情報に基づき動的に決定してもよい。このようなクリティカルデータの特定方法の詳細については、後述する。
【００４９】
図４の実施形態では、全てのウェイを同等に扱った構成となっている。しかしながら、ライン中の全てのデータをクリティカルワードとして扱わない場合、クリティカルワード以外のデータがコアにより参照される場合、第２冗長符号保持によるレイテンシ短縮効果が得られない。これを抑制するには、ラインを構成するデータのうち可能な限り多くをクリティカルデータとして第２冗長符号を保持する方法があるが、一方で、コストや消費電力の側面から、第２冗長符号を保持するメモリ資源は少ないほど望ましい。
【００５０】
そこで、図４の構成のように、全てのウェイに同等に第２冗長符号を保持するメモリ資源を配置する考え方に加え、重要なウェイに第２冗長符号を保持するためのメモリ資源を重点配置する考え方がある。
【００５１】
図５に重点配置の基準として、ラインの時間的局所性を利用する例を示す。このラインの時間的局所性とは、一般的には、番号の若いウェイの方がプロセッサコア３によるアクセス頻度が高い性質を指す。図５は各ウェイごとに格納可能な第２冗長符号の数が同数でない例を示す図である。図４の例では、ウェイ０と１にはそれぞれ４つの第２冗長符号が格納可能であり、ウェイ２〜５にはそれぞれ２つの第２冗長符号が格納可能であり、ウェイ６と７にはそれぞれ１つの第２冗長符号が格納可能である。なお、各ウェイに格納可能な冗長符号の数は、任意に変更して構わない。図５の場合、ウェイ１の第２冗長符号の数を最大とし、ウェイ７の第２冗長符号の数を最小とする。
【００５２】
上記の構成例では、ウェイ毎に異なる数の第２冗長符号を保持する形態を示した。つまり、時間局所性を考慮した第２冗長符号の保持形態となっている。しかしながら、異なる数の第２冗長符号を保持する基準はこれに限定されない。例えば、どのラインのデータがエラーを起こし易いかといったエラー頻度を基準としてもよい。
【００５３】
（クリティカルワード特定方法）
なお、本実施形態の構成全般に共通する事項として、クリティカルワードの特定方法がある。クリティカルワードの特定方法としては、例えば、以下の３つが考えられる。
【００５４】
１）キャッシュライン内の先頭側のアドレスほど、プロセッサコア３に参照されやすい性質を利用する。より具体的には、キャッシュライン内の先頭側のアドレスから所定数のワードデータについて、第２冗長符号を生成する。この方法であれば、動的な情報を取得することなくクリティカルワードを選択可能である。
【００５５】
２）ワードデータごとの時間局所性を利用する。すなわち、プロセッサコア３が直近にアクセスしたワードデータから順に第２冗長符号を生成する。これは、ライン単位で行ってもよいし、バンク等のキャッシュの一部で行ってもよいし、キャッシュ全体で行ってもよい。また、これを実現するハードウェアは、上記のいずれかの単位で、例えばLRU制御を行えばよい。
【００５６】
３）プロセッサコア３がより多くアクセスしたワードデータほど、参照されやすい性質を利用する。ワードデータごとにアクセス回数を計測し、アクセス回数の多いワードデータから順に第２冗長符号を生成する。
【００５７】
これら、１〜３の手法の組み合わせであってもよい。例えば、ライン毎に２つの第２冗長符号を保持可能な場合に、１つは上述した１）にてキャッシュライン中の先頭のワードに利用し、もう１つは上述した３）により特定されたワードに利用するといった手法が考えられる。このような場合には、１）により選択されたワードと３）により選択されたワードが同一のものになる可能性もある。同一のものになった場合は、そのまま重複した第２冗長符号を保持してもよいし、片方の第２冗長符号を新たなポリシで再選択してもよい。
【００５８】
（読出し手順）
次に、本発明を利用する構成全般に共通する事項として、Ｌ２キャッシュ７からのデータ読み出しについて説明する。説明の簡単化のため、キャッシュコントローラ１５が読み出し要求者からワードデータを一意に特定可能なアドレス情報を受け取っている場合を例として説明を行う。なお、キャッシュコントローラ１５が読み出し要求者からラインアドレスを一意に特定可能なアドレス情報を受け取る場合は、前述したように第２冗長符号を保持しているワードを特定可能な情報をキャッシュコントローラ１５が保持している。従って、キャッシュコントローラ１５がラインアドレスを受け取る場合は、以下の手順からタグ部１３のアクセスによる第２冗長符号保持ワードデータの識別を省略してもよい。
【００５９】
プロセッサコア３がＬ２キャッシュ７に対する読み出し要求を行う場合、タグ部１３のアクセスとデータキャッシュ部１２のアクセスとを並行して行う並行アクセス方式と、両アクセスを逐次的に行う逐次アクセス方式とがある。これらの２つの方式の選択肢に加えて、本実施形態は、第１および第２冗長符号へのアクセスをタグ部１３のアクセス時に行うかデータキャッシュ部１２のアクセス時に行うかの選択肢を有する。例えば、キャッシュコントローラ１５は以下のような手順によりデータの読み出しを行う。
【００６０】
１）タグ部１３、データキャッシュ部１２および冗長符号記憶部１４に並行してアクセスを行う。タグ部１３の参照によりキャッシュヒットであれば、第１冗長符号による誤り訂正と第２冗長符号による誤り訂正を並行して行い、誤り訂正が終了した順に読み出し要求者にデータを転送する。
【００６１】
２）タグ部１３と冗長符号記憶部１４にアクセスを行い、キャッシュヒット/ミス判定を行うと共に、第１冗長符号と第２冗長符号を読み出す。キャッシュヒットであれば、データキャッシュ部１２にアクセスを行い、第１冗長符号による誤り訂正と第２冗長符号による誤り訂正を並行して行い、誤り訂正が終了した順に読み出し要求者にデータを転送する。
【００６２】
３）タグ部１３にアクセスを行い、キャッシュヒット/ミス判定を行い、キャッシュヒットであれば、データキャッシュ部１２および冗長符号保持部１４にアクセスを行う。第１冗長符号による誤り訂正と第２冗長符号による誤り訂正を並行して行い、誤り訂正が終了した順に読み出し要求者にデータを転送する。
【００６３】
上記の読み出し手順では、第２冗長符号により誤り訂正を行ったワードデータを転送する場合でも、第１冗長符号による誤り訂正およびラインデータ転送を行う例を示したが、必ずしもこのような制御を行わなくてもよい。例えば、タグ部１３の参照により読み出し要求者が第２冗長符号を保持するワードデータを要求していることが分かれば、当該データの読み出しと第２冗長符号を用いた誤り訂正のみを行い、ラインデータ全体へのアクセスおよび第１冗長符号を用いた誤り訂正は行わなくてもよい。
【００６４】
（書込み手順）
次に、Ｌ２キャッシュ７へのデータ書き込みについて説明する。なお、読み出し手順同様に、キャッシュコントローラ１５が書き込み要求者からワードデータを一意に特定可能なアドレス情報を受け取っている場合を例として説明を行う。
【００６５】
キャッシュライン単位での第１冗長符号のみを保持し、第２冗長符号を保持していない場合、キャッシュミス時のデータ書き込み制御は、キャッシュラインデータの書き込みと同時に、新たな第１冗長符号を生成すればよい。一方、第１冗長符号と第２冗長符号を保持する場合のキャッシュミス時のデータ書き込み制御は、新たな第１冗長符号の生成と並行して、あるいは逐次的に第２冗長符号を生成する必要がある。
【００６６】
また、キャッシュヒットしたキャッシュラインでのデータ書き込みについては、キャッシュライン全体についてのデータ書き込みだけでなく、キャッシュラインの一部のワードデータのみのデータ書き込みを行う場合もありうる。この場合、新たに書き込みを行うワードデータに対応した第２冗長符号が冗長符号記憶部１４に格納されているか否かをチェックし、格納されている場合に限り、新たに書き込みを行うワードデータについて第２冗長符号を生成して、冗長符号記憶部１４の更新を行ってもよい。また、キャッシュライン全体への書き込みであっても、キャッシュライン中の書き換えられるワードのみを特定し、上記のような冗長符号の生成を行ってもよい。
【００６７】
なお、キャッシュコントローラ１５が書き込み要求者からラインデータを一意に特定可能なアドレスのみを受け取る場合は、キャッシュヒット時でもキャッシュミス時と同様の処理を行えばよい。
【００６８】
（リプレースメント手順）
次に、ＬＲＵ（Least Recently Used）リプレースメントの手順について説明する。キャッシュコントローラ１５は、最近アクセスしていないデータを、ＬＲＵ（Least Recently Used）ポジションとして管理している。ＬＲＵポジションに基づいて、異なるウェイ間でワードデータをコピーまたは移動する場合、図４の構成のように、各ウェイごとに、コピーまたは移動するワードデータの数が同じであれば、タグ情報を更新するだけで、ＬＲＵリプレースメントを行える。一般的には、各エントリに対応付けられるＬＲＵ順序記憶領域を書き換えるのみでよい。例えば、図４の構成であれば、それぞれのエントリに対応付けられているＷａｙ０やＷａｙ７といった情報を書き換えるのみでよい。
【００６９】
一方、図５の構成のように、各ウェイごとに、保持する第２冗長符号の数が異なる場合、一般的なキャッシュメモリ１の制御に加えて、ウェイ毎に異なる数を保持する第２冗長符号を管理するための手順が必要となる。この単純な方法として以下のようなものが考えられる。
【００７０】
１）保持する第２冗長符号の数が少ないウェイから、保持する第２冗長符号の数が多いウェイにデータを移動する場合、新たに第２冗長符号を格納可能な数分のワードデータをクリティカルワード選択基準に基づきキャッシュラインから選択して、選択されたワードの第２冗長符号を生成する。また、あらかじめ保持している第２冗長符号と、上記の手順で生成された第２冗長符号を移動先のウェイに対応する冗長符号記憶部１４に書き込む(例えば、図５のｗａｙ７からｗａｙ２にデータを移動する場合）。
【００７１】
２）保持する第２冗長符号の数が多いウェイから、保持する第２冗長符号の数が少ないウェイにデータを移動する場合、いままで保持していた複数のワードデータの第２冗長符号のうち、優先度の高いワードデータの第２冗長符号のみについて、対応する第２冗長符号を冗長符号記憶部１４にコピーまたは移動する(例えば、図５のｗａｙ２からｗａｙ７にデータを移動する場合）。
【００７２】
上記のような方式では、第２冗長符号のコピーが頻繁に発生するため、速度や電力のオーバヘッドとなる可能性がある。これを抑制するため、第２冗長符号を生成したワードデータの数の差分のみについて、第２冗長符号を更新してもよい。例えば、図５のようなウェイ毎に異なる冗長ビット１４ｂを保持する構成において、データＡが保持されているウェイ１には２ワードデータ分の第２冗長符号が、データＢが保持されているウェイ８には１ワードデータ分の第２冗長符号が、それぞれ割り当てられている場合に、ウェイ１とウェイ８でＬＲＵポジションを入れ替える場合は、以下の手順で行えばよい。
【００７３】
まず、一般のキャッシュメモリ１と同様にタグ情報を更新する。次に、データＡの１ワードデータ分の冗長符号領域を、データＢの１ワードデータ分の冗長符号領域として再割り当てする。次に、データＢに新たに割り当てられた１ワードデータ分の冗長符号領域に、クリティカルワードの特定ポリシに基づいてデータＢの１ワードデータ分の冗長符号を生成して格納する。
【００７４】
このように、本実施形態では、キャッシュラインデータ中の一部のデータについては、キャッシュラインデータ用の第１冗長符号とは別個に第２冗長符号を生成するため、この一部のデータの誤り訂正処理を迅速に行うことができる。よって、例えばキャッシュラインデータ中の重要なデータについて第２冗長符号を生成することで、このデータの誤り訂正結果を迅速にプロセッサコア３に提供でき、プロセッサコア３の処理速度を向上できる。
【００７５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７６】
１  キャッシュメモリ、２  プロセッサシステム、３  プロセッサコア、４  ＭＭＵ、６  Ｌ１キャッシュ、７  Ｌ２キャッシュ、８  メインメモリ、１１  コア、１２  データキャッシュ部、１３  タグ部、１４  冗長符号記憶部、１４ａ  第１記憶部、１４ｂ  第２記憶部、１５  キャッシュコントローラ、１６  誤り訂正コントローラ、１６ａ  第１誤り訂正部、１６ｂ  第２誤り訂正部、１６ｃ  データ転送制御部、１７  電源監視回路
【図１】
2015179307.tif 000003
【図３】
2015179307.tif 000004
【図４】
2015179307.tif 000005
【図５】
2015179307.tif 000006
【図２】
2015179307.tif 000007