(57)【要約】【課題】マルチコアシステムでのスヌープの発生頻度を軽減して性能を向上させる。【解決手段】キャッシュメモリを備える複数のＣＰＵが１つのメインメモリを共有するマルチコアシステムにて、メインメモリに書き込むデータと書き込み先のアドレスを保持する複数段のバッファを有するライトバッファをキャッシュメモリとメインメモリとの間に設け、キャッシュメモリからライトバッファへの書き込み時に、書き込み先のアドレスとバッファに格納されているアドレスとを比較し、一致したアドレスを持つバッファがある場合には、そのバッファにデータを上書きするとともに、そのバッファを最後段に論理的に移動する。【選択図】図２
2014182488.tif 000002
【特許請求の範囲】
【請求項１】
バスを介して１つの外部メモリにアクセスする複数の演算処理部を有し、
前記演算処理部は、
キャッシュメモリと、
前記キャッシュメモリに保持されたデータを用いて演算処理を行う処理部と、
前記キャッシュメモリと前記外部メモリとの間に設けられ、前記外部メモリに書き込むデータと書き込み先のアドレスとの組を保持する複数段のバッファを有するライトバッファと、
前記キャッシュメモリから前記ライトバッファへの書き込み時に、書き込み先のアドレスと前記バッファに格納されているアドレスとを比較し、一致したアドレスを持つバッファがある場合には、一致したアドレスを持つ前記バッファにデータを上書きするとともに、当該バッファを前記外部メモリに書き込むデータ及び書き込み先のアドレスが保持されている前記バッファのうちの最後段に移動する制御部とを有することを特徴とする演算処理装置。
【請求項２】
前記バッファに保持しているデータの読み出し要求が他の演算処理部からあった場合には、前記キャッシュメモリに対してアクセスを行わずに、当該バッファのデータを供給するとともに他の演算処理部からの読み出しが行われたことを示す情報を当該バッファに保持し、
当該バッファのデータを前記外部メモリに書き込んだ後に前記キャッシュメモリに対してアクセスを行って情報を更新することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記制御部は、前記バッファに保持しているデータの読み出し要求が他の演算処理部からあった場合には、当該バッファを前記外部メモリに書き込むデータ及び書き込み先のアドレスが保持されている前記バッファのうちの最後段に移動することを特徴とする請求項２記載の演算処理装置。
【請求項４】
キャッシュメモリと、前記キャッシュメモリに保持されたデータを用いて演算処理を行う処理部と、前記キャッシュメモリと前記外部メモリとの間に設けられ、前記外部メモリに書き込むデータと書き込み先のアドレスとの組を保持する複数段のバッファを有するライトバッファとをそれぞれ有する複数の演算処理部がバスを介して１つの外部メモリにアクセスする演算処理装置の制御方法であって、
前記演算処理部の制御部が、前記キャッシュメモリから前記ライトバッファへの書き込み時に、書き込み先のアドレスと前記バッファに格納されているアドレスとを比較し、
一致したアドレスを持つバッファがある場合には、前記演算処理部の制御部が、一致したアドレスを持つ前記バッファにデータを上書きするとともに、当該バッファを前記外部メモリに書き込むデータ及び書き込み先のアドレスが保持されている前記バッファのうちの最後段に移動することを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
複数のＣＰＵ（Central Processing Unit）を用いて処理を行うマルチコアシステムでは、各ＣＰＵがキャッシュメモリを備え、大容量・低速の外部メモリ（メインメモリ等）をすべてのＣＰＵで共有する構成が採られている。各ＣＰＵにおいて、キャッシュメモリから外部メモリへのデータの書き込み時間を吸収するために、キャッシュメモリと外部メモリとの間にライトバッファを備えることも知られている。
【０００３】
また、マルチコアシステムでは、ＣＰＵ間のデータの共有が不可欠である。そのため、ＣＰＵ間でキャッシュデータの一貫性（キャッシュコヒーレンシ）を保つことが必須であり、各キャッシュメモリはスヌープといった機能を備えている。スヌープが発生すると、それを受けたＣＰＵでは、ＣＰＵコアからキャッシュメモリへのアクセス要求にウェイトをかけるため、性能低下を招く。
【０００４】
各ＣＰＵのキャッシュシステムが、共通バスを流れるアクセス要求に含まれるアドレスをテーブルに格納するとともに、受け取ったアクセス要求のアドレスがテーブルに格納されている場合には、そのアクセス要求に応じたキャッシュメモリへのアクセスを抑止する技術が提案されている（例えば、特許文献１参照）。また、外部メモリにおける各領域について、データが各ＣＰＵにキャッシングされているか否かを示す情報を各ＣＰＵが備えるテーブルに記憶し、スヌープ要求の送付先をテーブルに記憶された情報を基に制限してトラフィックを削減する技術が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２９３０６０号公報
【特許文献２】特開平９−３１１８２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
スヌープ機能を備えるキャッシュメモリでは、ＣＰＵコアからキャッシュメモリへのアクセスと、スヌープによるキャッシュメモリへのアクセスとは排他的に行われる。したがって、スヌープが多く発生すると、ＣＰＵコアからキャッシュメモリへのアクセスが待たされることが多くなり、性能が低下してしまう。
１つの側面では、本発明は、スヌープの発生頻度を軽減して性能を向上させることを目的とする。
【課題を解決するための手段】
【０００７】
演算処理装置の一態様は、バスを介して外部メモリにアクセスする複数の演算処理部を有し、演算処理部は、キャッシュメモリ、処理部、ライトバッファ、及び制御部を有する。ライトバッファは、キャッシュメモリと外部メモリとの間に設けられ、外部メモリに書き込むデータと書き込み先のアドレスとの組を保持する複数段のバッファを有する。また、制御部は、キャッシュメモリからライトバッファへの書き込み時に、書き込み先のアドレスとバッファに格納されているアドレスとを比較し、一致したアドレスを持つバッファがある場合には、そのバッファにデータを上書きするとともに、そのバッファを最後段に論理的に移動する。
【発明の効果】
【０００８】
開示の演算処理装置は、ライトバッファ内でのデータ操作によりキャッシュデータの一貫性を保つことでキャッシュメモリに対するスヌープの発生頻度を軽減することができ性能を向上させることが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態におけるマルチコアシステムの構成例を示す図である。
【図２】本実施形態におけるライトバッファ及びライトバッファコントローラの構成例を示す図である。
【図３】本実施形態におけるＬＲＵステータスの例を示す図である。
【図４】本実施形態におけるライトバッファへの書き込み処理の例を示すフローチャートである。
【図５】本実施形態におけるスヌープ要求に係る処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態を図面に基づいて説明する。
【００１１】
図１は、本発明の一実施形態における演算処理装置としてのマルチコアシステムの構成例を示す図である。本実施形態におけるマルチコアシステムは、複数のＣＰＵ１０−１、１０−２、１０−３、…、及びメモリコントローラ２０を有する。ＣＰＵ１０−１、１０−２、１０−３、…の各々とメモリコントローラ２０とがバスＢＵＳにそれぞれ接続されている。また、メモリコントローラ２０が、外部メモリであるメインメモリ３０に接続されている。メインメモリ３０はすべてのＣＰＵ１０−１、１０−２、１０−３、…、によって共有され、各ＣＰＵ１０−１、１０−２、１０−３、…によるメインメモリ３０へのアクセスは、バスＢＵＳ及びメモリコントローラ２０を介して行われる。
【００１２】
ＣＰＵ１０−１、１０−２、１０−３、…の各々は、ＣＰＵコア１１、キャッシュメモリ１２、キャッシュコントローラ１３、ライトバッファ１４、及びライトバッファコントローラ１５を有する。なお、図１において、ＣＰＵ１０−１、１０−２、１０−３、…の内部構成は、データの書き込みに係る構成を主として図示している。ＣＰＵコア１１は、命令をメインメモリ３０等から順次読み出して、読み出した命令に応じた演算処理を実行する。
【００１３】
キャッシュメモリ１２は、ＣＰＵコア１１での演算処理に用いるデータを保持する。キャッシュメモリ１２は、キャッシュデータのアドレス情報やキャッシュデータの状態等を示すステータス情報が格納されるキャッシュタグメモリ１６と、キャッシュデータが格納されるキャッシュデータメモリ１７とを含む。キャッシュタグメモリ１６は、キャッシュデータのアドレス情報を格納する領域ＡＤ１とステータス情報を格納する領域ＳＴ１を有する。また、キャッシュデータメモリ１７は、キャッシュデータを格納する領域ＤＴ１を有する。キャッシュコントローラ１３は、キャッシュメモリ１２に係る制御を行う。キャッシュコントローラ１３は、例えばキャッシュメモリ１２に対する情報やデータの書き込み及び読み出しを行ったり、要求されたデータがキャッシュメモリ１２に記憶されているか否かの判定を行ったりする。
【００１４】
ライトバッファ１４は、ＣＰＵ１０−１、１０−２、１０−３、…からメインメモリ３０に書き込むデータ及び書き込み先のアドレスを保持するバッファである。ライトバッファ１４は、各段が１つのエントリにそれぞれ相当する複数段のバッファを有する。ライトバッファ１４が有する各段のバッファは、書き込み先のアドレスを格納する領域ＡＤ２と、保持するデータに係るステータス情報を格納する領域ＳＴ２と、書き込みデータを格納する領域ＤＴ２とを有する。ライトバッファコントローラ１５は、ライトバッファ１４に係る制御を行う。
【００１５】
図２は、図１に示したライトバッファ１４及びライトバッファコントローラ１５の構成例を示す図である。なお、図２においては、ライトバッファ１４が、バッファＡ１４Ａ、バッファＢ１４Ｂ、及びバッファＣ１４Ｃの３段のバッファである例を示しているが、本発明はこれに限定されるものではなく、ライトバッファ１４におけるバッファの段数は任意の複数である。
【００１６】
バッファ１４Ａ、１４Ｂ、１４Ｃの各々は、領域ＡＤＤ、エンプティビット（Empty bit）Ｅ、スヌープビット（Snoop bit）Ｓ、及び領域ＤＡＴを有する。領域ＡＤＤは、メインメモリ３０に書き込むデータに係る書き込み先のアドレスを格納する領域であり、領域ＤＡＴは、メインメモリ３０に書き込むデータを格納する領域である。
【００１７】
また、エンプティビットＥは、そのバッファに書き込みデータが格納されていない空き状態であるか否か、言い換えればデータを書き込み可能であるか否かを示すビットである。本実施形態では、エンプティビットＥの値は、空き状態である（書き込み可能）ときに“１”であり、空き状態でない（書き込み不可能）ときに“０”であるものとする。
【００１８】
また、スヌープビットＳは、そのバッファに書き込まれているデータが他のＣＰＵからコヒーレントリードされたか否かを示すビットである。本実施形態では、スヌープビットＳの値は、そのバッファにデータが書き込まれるときに“０”とされ、他のＣＰＵから受けた、スヌープ要求としてのコヒーレントリード要求のアドレスと領域ＡＤＤに格納されているアドレスとが一致したときに“１”とされるものとする。
【００１９】
ライトバッファコントローラ１５は、バッファ制御部１０１、アドレス選択部１０２、ＬＲＵ（Least Recently Used）ステータスコントローラ１０３、ライトコントローラ１０４、及びリード選択部１０５を有する。バッファ制御部１０１は、ライトバッファコントローラ１５が有するアドレス選択部１０２、ＬＲＵステータスコントローラ１０３、ライトコントローラ１０４、及びリード選択部１０５を制御する。
【００２０】
アドレス選択部１０２は、バッファ制御部１０１の出力に応じてセレクタ１０６を制御する。アドレス選択部１０２は、自ＣＰＵからメインメモリ３０への書き込み要求ではアドレスＡｄｄｒを選択し、他ＣＰＵからのスヌープ要求ではアドレス（スヌープアドレス）ＳＡｄｄｒを選択して出力するようセレクタ１０６を制御する。アドレスＡｄｄｒは、自ＣＰＵからメインメモリ３０への書き込み要求においてキャッシュコントローラ１３を介して入力されるアドレスである。また、アドレス（スヌープアドレス）ＳＡｄｄｒは、他ＣＰＵからのスヌープ要求においてバスＢＵＳを介して入力されるアドレスである。
【００２１】
ＬＲＵステータスコントローラ１０３は、バッファＡ１４Ａ、バッファＢ１４Ｂ、バッファＣ１４Ｃに係るＬＲＵのステータスを制御する。ＬＲＵステータスコントローラ１０３は、例えば図３に示すように３ビットの情報を用いて、バッファＡ１４Ａ、バッファＢ１４Ｂ、バッファＣ１４Ｃに係るＬＲＵのステータス（更新状況）を管理し制御する。図３においては、３ｒｄバッファが１番最後に更新されたバッファ（最新のバッファ）、２ｎｄバッファが２番目に更新されたバッファ、１ｓｔバッファが１番最初に更新されたバッファを示す。なお、以下の説明においても、３ｒｄバッファ、２ｎｄバッファ、１ｓｔバッファが示す意味は同じであるものとする。
【００２２】
例えば、ＬＲＵステータスが“０００”である場合には、バッファＣ１４Ｃが１番最初に更新されたバッファ、バッファＢ１４Ｂが２番目に更新されたバッファ、バッファＡ１４Ａが１番最後に更新されたバッファ（最新のバッファ）となる。また、例えば、ＬＲＵステータスが“１０１”である場合には、バッファＡ１４Ａが１番最初に更新されたバッファ、バッファＢ１４Ｂが２番目に更新されたバッファ、バッファＣ１４Ｃが１番最後に更新されたバッファ（最新のバッファ）となる。
【００２３】
ライトコントローラ１０４は、バッファ制御部１０１の出力及びＬＲＵステータスコントローラ１０３の出力に応じて、バッファＡ１４Ａ、バッファＢ１４Ｂ、バッファＣ１４Ｃに対する書き込みを制御する。また、リード選択部１０５は、バッファ制御部１０１の出力及びＬＲＵステータスコントローラ１０３の出力に応じてバッファセレクタ１０８を制御し、バッファＡ１４Ａ、バッファＢ１４Ｂ、バッファＣ１４Ｃに書き込まれているアドレスやデータをバスＢＵＳに対して出力する。比較部１０７Ａ、１０７Ｂ、１０７Ｃは、対応するバッファのエンプティビットＥの値が“０”の場合に、領域ＡＤＤに格納されているアドレスとセレクタ１０６から出力されるアドレスとが一致するか否かを判定して判定結果をＬＲＵステータスコントローラ１０３に出力する。
【００２４】
次に、動作について説明する。
まず、本実施形態におけるライトバッファ１４への書き込み処理について説明する。図４は、本実施形態におけるライトバッファ１４への書き込み処理の例を示すフローチャートである。キャッシュメモリからライトバッファへのデータの書き込み時には、書き込み要求制御信号、アドレスＡｄｄｒ、及びデータＤａｔａがキャッシュコントローラ１３を介して入力される。ライトバッファコントローラ１５のバッファ制御部１０１は、書き込み要求制御信号を受けると、キャッシュメモリからライトバッファへの書き込み要求であることを各機能部１０２、１０３、１０４に通知する。
【００２５】
これにより、アドレス選択部１０２は、キャッシュコントローラ１３を介して入力されるアドレスＡｄｄｒを選択して出力するようセレクタ１０６を制御する。そして、エンプティビットＥの値が“１”でない（空き状態でない）バッファに記憶されているアドレスと、書き込み要求のアドレスＡｄｄｒとが、比較器１０７Ａ、１０７Ｂ、１０７Ｃによって比較され、その結果がＬＲＵステータスコントローラ１０３に出力される（Ｓ１０１）。
【００２６】
次に、ＬＲＵステータスコントローラ１０３は、比較器１０７Ａ、１０７Ｂ、１０７Ｃの出力に基づき、バッファＡ１４Ａ、バッファＢ１４Ｂ、バッファＣ１４Ｃにおいて、アドレスが一致したバッファがあるか否かを判定する（Ｓ１０２）。判定の結果、アドレスが一致したバッファがある場合には（Ｓ１０２のＹＥＳ）、ＬＲＵステータスコントローラ１０３は、そのバッファにデータを書き込むようライトコントローラ１０４に指示する。そして、ライトコントローラ１０４は、一致したアドレスを持つバッファにデータＤａｔａを書き込む（上書きする）（Ｓ１０３）。
【００２７】
また、ＬＲＵステータスコントローラ１０３は、一致したアドレスを持ちデータＤａｔａが書き込まれたバッファが、最終段のバッファ（最新のバッファ）となるようにＬＲＵステータスを更新する（Ｓ１０４）。つまり、ＬＲＵステータスコントローラ１０３は、一致したアドレスを持ちデータＤａｔａが書き込まれたバッファを最終段へ論理的に移動させるように、下記＜ａ１＞〜＜ａ６＞のようにＬＲＵステータスの情報を変更する。
【００２８】
＜ａ１＞一致したアドレスを持つバッファが３ｒｄバッファであった場合には、ＬＲＵステータスの情報を変更しない。
＜ａ２＞一致したアドレスを持つバッファが２ｒｄバッファであり、かつ３ｒｄバッファのエンプティビットＥの値が“１”であった場合には、ＬＲＵステータスの情報を変更しない。
＜ａ３＞一致したアドレスを持つバッファが２ｒｄバッファであり、かつ３ｒｄバッファのエンプティビットＥの値が“０”であった場合には、２ｒｄバッファと３ｒｄバッファを入れ替えるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“０１０”（ＣＡＢ）に変更し、“００１”（ＢＣＡ）であれば“１００”（ＢＡＣ）に変更する。
＜ａ４＞一致したアドレスを持つバッファが１ｓｔバッファであり、かつ２ｎｄバッファ及び３ｒｄバッファのエンプティビットＥの値がともに“１”であった場合には、ＬＲＵステータスの情報を変更しない。
＜ａ５＞一致したアドレスを持つバッファが１ｓｔバッファであり、かつ２ｒｄバッファのエンプティビットＥの値が“０”で３ｒｄバッファのエンプティビットＥの値が“１”であった場合には、１ｓｔバッファと２ｎｄバッファを入れ替えるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“００１”（ＢＣＡ）に変更し、“０１０”（ＣＡＢ）であれば“０１１”（ＡＣＢ）に変更する。
＜ａ６＞一致したアドレスを持つバッファが１ｓｔバッファであり、かつ２ｎｄバッファ及び３ｒｄバッファのエンプティビットＥの値がともに“０”であった場合には、１ｓｔバッファを３ｒｄバッファに、２ｎｄバッファを１ｓｔバッファに、３ｒｄバッファを２ｎｄバッファにする、すなわち回転させるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“１００”（ＢＡＣ）に変更し、“００１”（ＢＣＡ）であれば“０１０”（ＣＡＢ）に変更する。
前述のようにＬＲＵステータスの情報を更新した後、ステップＳ１０７に進む。
【００２９】
このようにして、ＬＲＵステータスコントローラ１０３は、キャッシュメモリ１２からのデータが書き込まれたバッファを最終段へ論理的に移動する。ここで、ＣＰＵが処理を実行する際にアクセスするデータのアドレスは局所性を有することが多い。したがって、キャッシュメモリ１２からのデータが書き込まれたバッファを最終段へ論理的に移動することで、再びアクセスする可能性が高いアドレスのデータについてメインメモリ３０への書き込みが実行されるまでの時間を延ばすことできる。これにより、ＣＰＵでのキャッシュミスの発生を低減することが可能になり、スヌープ要求としてのコヒーレントリード要求の発生頻度を軽減し性能の向上を図ることが可能になる。
【００３０】
また、ステップＳ１０２での判定の結果、アドレスが一致するバッファがない場合には（Ｓ１０２のＮＯ）、ＬＲＵステータスコントローラ１０３は、エンプティビットＥの値が“１”である（空き状態である）バッファがあるか否かを判定する（Ｓ１０５）。判定の結果、エンプティビットＥの値が“１”であるバッファがない、すなわちすべてのバッファのエンプティビットＥの値が“０”である場合には（Ｓ１０５のＮＯ）、バッファへの書き込みが待たされる。
【００３１】
一方、エンプティビットＥの値が“１”であるバッファがある場合には（Ｓ１０５のＹＥＳ）、ＬＲＵステータスコントローラ１０３は、ＬＲＵステータスに従ってバッファにアドレス及びデータを書き込むようライトコントローラ１０４に指示する。ライトコントローラ１０４は、指示されたバッファ、すなわちエンプティビットＥの値が“１”であるバッファのうち、更新からの時間が最も経過しているバッファにアドレスＡｄｄｒ及びデータＤａｔａを書き込み、そのエンプティビットＥ及びスヌープビットＳの値を“０”にする（Ｓ１０６）。そして、ステップＳ１０７に進む。
【００３２】
ステップＳ１０７にて、バッファ制御部１０１は、書き込み要求されたデータとともにキャッシュメモリ１２に格納されているステータス情報を参照し、このデータが他のＣＰＵと共有されているか否かを判断する。その結果、他のＣＰＵとデータが共有されている場合には（Ｓ１０７のＹＥＳ）、バッファ制御部１０１は、他のＣＰＵに対してキャッシュデータの無効化を要求するインバリデイト要求を発行する（Ｓ１０８）。以上のようにして、ライトバッファ１４への書き込み処理を終了する。
【００３３】
次に、ライトバッファ１４からメインメモリ３０への書き込み処理について説明する。ライトバッファ１４からメインメモリ３０への書き込み処理では、まずメインメモリ３０への書き込みが可能であることを確認した後、バッファ制御部１０１は、バスＢＵＳを介してメモリコントローラ２０に書き込み要求を発行する。また、バッファ制御部１０１の出力及びＬＲＵステータスコントローラ１０３の出力に基づいて、リード選択部１０５及びバッファセレクタ１０８により、１ｓｔバッファに格納されているアドレス及びデータが読み出されメモリコントローラ２０に転送される。メモリコントローラ２０は、そのアドレス及びデータを受けてメインメモリ３０の該当するアドレスの領域にデータを書き込み、書き込みが完了すると書き込み完了通知を発行する。
【００３４】
そして、ライトコントローラ１０４は、１ｓｔバッファのエンプティビットの値を“１”にする。このとき、１ｓｔバッファのスヌープビットの値が“１”であった場合には、キャッシュコントローラ１３にデータの書き込み完了を示す情報を出力する。この情報を受けたキャッシュコントローラ１３は、他のＣＰＵとデータを共有していることを示すようにキャッシュメモリ１２のステータス情報を変更する。このように本実施形態では、他のＣＰＵからの要求によりコヒーレントリードされたデータに関し、要求を受けたときにキャッシュメモリ１２に対してアクセスを行うのではなく、メインメモリ３０への書き込みが完了したときにキャッシュメモリ１２に対してアクセスを行う。これにより、ＣＰＵコア１１からキャッシュメモリ１２へのアクセスが阻害されることを緩和し性能の向上を図ることができる。
【００３５】
また、ＬＲＵステータスコントローラ１０３は、１ｓｔバッファを３ｒｄバッファに、２ｎｄバッファを１ｓｔバッファに、３ｒｄバッファを２ｎｄバッファにする、すなわち回転させるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“１００”（ＢＡＣ）に変更し、“００１”（ＢＣＡ）であれば“０１０”（ＣＡＢ）に変更する。なお、１ｓｔバッファのエンプティビットの値が“１”である場合には、前述したメインメモリ３０への書き込み処理は行われない。
【００３６】
次に、スヌープ要求を受けたときの処理について説明する。図５は、本実施形態におけるスヌープ要求に係る処理の例を示すフローチャートである。ＣＰＵは、アクセス要求されたデータが自ＣＰＵのキャッシュメモリに存在せずにキャッシュミスが生じると、他のＣＰＵのキャッシュメモリに対するスヌープ要求としてのコヒーレントリード要求を発行する。このスヌープ要求（コヒーレントリード要求）を受けたＣＰＵでは、エンプティビットＥの値が“１”でない（空き状態でない）バッファに記憶されているアドレスと、スヌープ要求のアドレスとが、比較器１０７Ａ、１０７Ｂ、１０７Ｃによって比較され、その結果がＬＲＵステータスコントローラ１０３に出力される（Ｓ２０１）。
【００３７】
次に、ＬＲＵステータスコントローラ１０３は、比較器１０７Ａ、１０７Ｂ、１０７Ｃの出力に基づき、アドレスが一致したバッファがあるか否かを判定する（Ｓ２０２）。判定の結果、アドレスが一致したバッファがあればステップＳ２０３に進み、なければその旨を応答として返し処理を終了し、キャッシュメモリへコヒーレントリードを実行する（Ｓ２０５）。ステップＳ２０３にて、ＣＰＵは、バッファ制御部１０１の出力及びＬＲＵステータスコントローラ１０３の出力に基づいて、リード選択部１０５及びバッファセレクタ１０８により、一致したアドレスを持つバッファのデータを要求元のＣＰＵに送信する。そして、ライトコントローラ１０４は、一致したアドレスを持つバッファのスヌープビットＳの値を“１”にする。
【００３８】
また、ＬＲＵステータスコントローラ１０３は、一致したアドレスを持つバッファが、最終段のバッファ（最新のバッファ）となるようにＬＲＵステータスを更新する（Ｓ２０４）。つまり、ＬＲＵステータスコントローラ１０３は、一致したアドレスを持つバッファを最終段へ論理的に移動させるように、下記＜ｂ１＞〜＜ｂ６＞のようにＬＲＵステータスの情報を変更する。
【００３９】
＜ｂ１＞一致したアドレスを持つバッファが３ｒｄバッファであった場合には、ＬＲＵステータスの情報を変更しない。
＜ｂ２＞一致したアドレスを持つバッファが２ｒｄバッファであり、かつ３ｒｄバッファのエンプティビットＥの値が“１”であった場合には、ＬＲＵステータスの情報を変更しない。
＜ｂ３＞一致したアドレスを持つバッファが２ｒｄバッファであり、かつ３ｒｄバッファのエンプティビットＥの値が“０”であった場合には、２ｒｄバッファと３ｒｄバッファを入れ替えるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“０１０”（ＣＡＢ）に変更し、“００１”（ＢＣＡ）であれば“１００”（ＢＡＣ）に変更する。
＜ｂ４＞一致したアドレスを持つバッファが１ｓｔバッファであり、かつ２ｎｄバッファ及び３ｒｄバッファのエンプティビットＥの値がともに“１”であった場合には、ＬＲＵステータスの情報を変更しない。
＜ｂ５＞一致したアドレスを持つバッファが１ｓｔバッファであり、かつ２ｒｄバッファのエンプティビットＥの値が“０”で３ｒｄバッファのエンプティビットＥの値が“１”であった場合には、１ｓｔバッファと２ｎｄバッファを入れ替えるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“００１”（ＢＣＡ）に変更し、“０１０”（ＣＡＢ）であれば“０１１”（ＡＣＢ）に変更する。
＜ｂ６＞一致したアドレスを持つバッファが１ｓｔバッファであり、かつ２ｎｄバッファ及び３ｒｄバッファのエンプティビットＥの値がともに“０”であった場合には、１ｓｔバッファを３ｒｄバッファに、２ｎｄバッファを１ｓｔバッファに、３ｒｄバッファを２ｎｄバッファにする、すなわち回転させるようにＬＲＵステータスの情報を変更する。例えば、変更前のＬＲＵステータスが“０００”（ＣＢＡ）であれば“１００”（ＢＡＣ）に変更し、“００１”（ＢＣＡ）であれば“０１０”（ＣＡＢ）に変更する。
前述のようにＬＲＵステータスの情報を更新した後、処理を終了する。なお、キャッシュミスが生じたことによりＣＰＵが他のＣＰＵのキャッシュメモリに対するスヌープ要求としてのコヒーレントリード要求を発行しても、すべての他のＣＰＵにも所望のデータが存在しない場合には、メインメモリ３０へのアクセスを行いデータを読み出す。
【００４０】
本実施形態によれば、ライトバッファ１４内でのデータ操作によりキャッシュデータの一貫性（キャッシュコヒーレンシ）を保つため、キャッシュメモリへのスヌープ動作を減らし、またメインメモリへの書き込み動作も減らすことができ、装置の性能向上に寄与する。なお、本実施形態では、ライトバッファ１４が有する各段のバッファの更新状況をＬＲＵアルゴリズムを用いて管理し制御するようにしているが、これに限定されるものではなく、他のアルゴリズム等を用いてバッファの更新状況を管理し制御するようにしても良い。
【００４１】
また、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００４２】
１０  ＣＰＵ
１１  ＣＰＵコア
１２  キャッシュメモリ
１３  キャッシュコントローラ
１４  ライトバッファ
１５  ライトバッファコントローラ
１６  キャッシュタグメモリ
１７  キャッシュデータメモリ
２０  メモリコントローラ
３０  メインメモリ
１０１  バッファ制御部
１０２  アドレス選択部
１０３  ＬＲＵステータスコントローラ
１０４  ライトコントローラ
１０５  リード選択部
１０６  セレクタ
１０７  比較器
１０８  バッファセレクタ
ＢＵＳ  バス
【図１】
2014182488.tif 000003
【図２】
2014182488.tif 000004
【図３】
2014182488.tif 000005
【図４】
2014182488.tif 000006
【図５】
2014182488.tif 000007