(57)【要約】【課題】演算装置がキャッシュメモリに一時データを書き込むときに生じる無駄なメモリアクセスを回避可能なキャッシュメモリシステムを提供する。【解決手段】キャッシュメモリシステムは、複数のワードからなる複数のブロックを有するデータアレイ、複数のブロックのうち少なくとも１つのワードにデータが格納されたブロックに対応づけられた記憶装置のアドレス群を格納する格納手段、演算装置からの書込み時に演算装置からのアドレスが格納手段内にないと複数のブロックのいずれかを書込み用ブロックとして割り当てそのブロック内のいずれかのワードに演算装置からのデータを書き込む書込み手段、書込み用ブロック内のワードのうち書込み手段でデータが書き込まれたワードを示すワード情報を記憶するワード状態記憶手段、および、演算装置からの読み出し時にワード情報に示されたワードからデータを読み出した場合にワード情報を消去する読出し手段を含む。【選択図】図１Ａ
2009157608.tif 000002
【特許請求の範囲】
【請求項１】
演算装置および記憶装置と接続されるキャッシュメモリシステムであって、
複数のワードからなる複数のブロックを有するデータアレイと、
前記複数のブロックのうち、少なくとも１つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記記憶装置のアドレス群を格納する格納手段と、
前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードに当該演算装置からのデータを書き込む書込み手段と、
前記書込み用ブロック内のワードのうち、前記書込み手段にて前記データが書き込まれたワードを示すワード情報を記憶するワード状態記憶手段と、
前記演算装置からの読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去する読出し手段と、を含むキャッシュメモリシステム。
【請求項２】
請求項１に記載のキャッシュメモリシステムにおいて、
前記読出し手段は、前記演算装置からの第１読出し命令に応じた読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去し、前記演算装置からの第２読出し命令に応じた読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去しない、キャッシュメモリシステム。
【請求項３】
請求項１または２に記載のキャッシュメモリシステムにおいて、
前記書込み手段は、前記演算装置が複数のプロセッサコアを有する場合には、前記複数のプロセッサコアのいずれかからの書込み時に、当該プロセッサコアからのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードに当該プロセッサコアからのデータを書き込み、
前記ワード情報は、さらに、当該ワード情報に示されたワードに書き込まれたデータを提供したプロセッサコアを示す、キャッシュメモリシステム。
【請求項４】
請求項３に記載のキャッシュメモリシステムにおいて、
前記ワード情報は、さらに、前記複数のプロセッサコアのうち、当該ワード情報に示されたワードに書き込まれたデータの送信先となるプロセッサコアを示す、キャッシュメモリシステム。
【請求項５】
請求項４に記載のキャッシュメモリシステムにおいて、
前記読出し手段は、前記送信先となるプロセッサコアの全てが前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去する、キャッシュメモリシステム。
【請求項６】
複数のワードからなる複数のブロックを有するデータアレイを含み、演算装置および主記憶装置と接続されるキャッシュメモリシステムが行うキャッシュメモリ制御方法であって、
前記複数のブロックのうち、少なくとも１つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記記憶装置のアドレス群を格納手段に格納する格納ステップと、
前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードに当該演算装置からのデータを書き込む書込みステップと、
前記書込み用ブロック内のワードのうち、前記書込みステップで前記データが書き込まれたワードを示すワード情報をワード状態記憶手段に記憶する記憶ステップと、
前記演算装置からの読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去する読出しステップと、を含むキャッシュメモリ制御方法。
【請求項７】
請求項６に記載のキャッシュメモリ制御方法において、
前記読出しステップでは、前記演算装置からの第１読出し命令に応じた読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去し、前記演算装置からの第２読出し命令に応じた読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去しない、キャッシュメモリ制御方法。
【請求項８】
請求項６または７に記載のキャッシュメモリ制御方法において、
前記書込みステップでは、前記演算装置が複数のプロセッサコアを有する場合には、前記複数のプロセッサコアのいずれかからの書込み時に、当該プロセッサコアからのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードに当該プロセッサコアからのデータを書き込み、
前記ワード情報は、さらに、当該ワード情報に示されたワードに書き込まれたデータを提供したプロセッサコアを示す、キャッシュメモリ制御方法。
【請求項９】
請求項８に記載のキャッシュメモリ制御方法において、
前記ワード情報は、さらに、前記複数のプロセッサコアのうち、当該ワード情報に示されたワードに書き込まれたデータの送信先となるプロセッサコアを示す、キャッシュメモリ制御方法。
【請求項１０】
請求項９に記載のキャッシュメモリ制御方法において、
前記読出しステップでは、前記送信先となるプロセッサコアの全てが前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去する、キャッシュメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ（Central Processing Unit）またはプロセッサコア（以下、単に「コア」と称する。）と、主メモリと、の間に接続されるキャッシュメモリシステムおよびキャッシュメモリ制御方法に関する。
【０００２】
本発明は、特には、ＣＰＵまたはコアからのデータを一時的に格納する場合、例えば、レジスタスピル時またはコア間通信時に、主メモリとのアクセスの発生を抑止できるキャッシュメモリシステムおよびキャッシュメモリ制御方法に関する。
【背景技術】
【０００３】
キャッシュメモリを用いたデータ処理が知られている。キャッシュメモリは、ＣＰＵ等の演算装置と主メモリとの間に設けられ、主メモリ内の一部のデータを格納し、演算装置とデータをやり取りする。
【０００４】
特許文献１および特許文献２には、データ書込み時にキャッシュミスが発生した場合に、主メモリにアクセスして、主メモリからブロック単位でデータを読み出すキャッシュメモリ装置、さらに言えば、ライトバック型のキャッシュメモリ装置が記載されている。
【０００５】
特許文献３には、複数のプロセッサから構成されるマルチプロセッサシステムにおいて、各プロセッサに接続されるライトバック型のキャッシュメモリが記載されている。このキャッシュメモリは、キャッシュライン（ブロック）を更新したプロセッサを特定するためのフラグを有する。
【０００６】
なお、特許文献３に記載のキャッシュメモリも、データ書込み時にキャッシュミスが発生した場合に、主メモリにアクセスして、主メモリからブロック単位でデータを読み出す。
【０００７】
特許文献４には、キャッシュメモリのブロックが更新されたか否かを示すための更新フラグを用いた、ライトバック型のバッファ管理方式が記載されている。
【０００８】
なお、特許文献４に記載のバッファ管理方式でも、データ書込み時にキャッシュミスが発生した場合に、二次記憶装置にアクセスして、二次記憶装置からブロック単位でデータを読み出す。
【０００９】
一方、データ格納用のレジスタを有し、かつ、キャッシュメモリと接続可能なＣＰＵでは、プログラムによっては、レジスタ数が足りなくなることがある。
【００１０】
その場合、ＣＰＵは、レジスタスピルを実行する。レジスタスピルは、ＣＰＵがレジスタに格納している値を一旦メモリに退避する処理である。そして、レジスタが空いたときに、ＣＰＵは、退避したデータをメモリからレジスタに復帰させる。
【００１１】
特許文献５には、スピル専用のレジスタを利用して、レジスタスピル時のメモリアクセスを不要にして高速化を図るコンパイル方法が記載されている。
【００１２】
また、ＬＳＩの集積度の進歩により、ＣＰＵ内に複数のコアを持つマルチコア型のＣＰＵが多くなってきている。このＣＰＵでは、コア間の通信は、共有キャッシュメモリを用いて行われるようになっている。
【特許文献１】特開２０００−２６７９３５号公報
【特許文献２】特開平４−４８３５８号公報
【特許文献３】特開２００３−３００４９号公報
【特許文献４】特開昭６２−２６９２４８号公報
【特許文献５】特許第３２９６０２７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
特許文献５に記載のコンパイル方法では、専用のレジスタの分、ハードウェア量が増えるという問題がある。また、専用レジスタの個数には制限があるので、一時的に格納したいデータが大量となる場合には、主メモリに対するアクセス（以下「メモリアクセス」と称する。）が発生してしまう。
【００１４】
この問題を解決するシステムとして、レジスタスピルを行うＣＰＵが、データの一時退避場所として、特許文献１〜４に記載されたようなライトバック型のキャッシュメモリを用いるシステムが考えられる。
【００１５】
しかしながら、この場合、以下のような問題が発生する。
【００１６】
ライトバック型のキャッシュメモリシステムは、レジスタスピルに伴うＣＰＵからのデータ書き込み処理時にキャッシュミスを生じると、主メモリにアクセスして、主メモリからブロック単位でデータを読み出す。このため、メモリアクセスが発生して、退避の処理に時間がかかる。
【００１７】
また、キャッシュメモリ上のデータがＣＰＵのレジスタに復帰された後でも、キャッシュメモリのブロック内のデータは、レジスタスピルによって書き換えられた状態になっている。このため、このブロックが置き換えられる場合には、このブロック内のデータは、主メモリにライトバックされる。
【００１８】
つまり、キャッシュメモリが、レジスタスピルの退避領域として一時的に使用された場合にも、不必要なメモリアクセスが発生する。
【００１９】
図２８Ａ〜２８Ｄは、ライトバック型キャッシュメモリでのレジスタスピルの処理で発生する課題を説明するための説明図である。なお、図２８Ａ〜２８Ｄにおいて、演算システムは、ＣＰＵ２８０１と、キャッシュメモリ２８０２と、主メモリ（以下、単に「メモリ」と称する。）２８０３と、を含む。ＣＰＵ２８０１は、レジスタ２８０４を含む。
【００２０】
図２８Ａは、初期状態を示した図である。
【００２１】
図２８Ｂは、レジスタスピルが発生してＣＰＵ２８０１のレジスタ２８０４からデータ２８０５を退避するために、ストア命令（store）が実行された時のキャッシュメモリの処理を説明するための図である。
【００２２】
図２８Ｂにおいて、ＣＰＵ２８０１が、レジスタ２８０４内のデータ２８０５をキャッシュメモリ２８０２に書き込もうとすると、キャッシュメモリ２８０２では、書き込みミス（キャッシュミス）が発生する。
【００２３】
このため、キャッシュメモリ２８０２は、メモリ２８０３から、ストア命令にて指定されたワードに対応するブロック２８０６のデータを読み出す。その後、キャッシュメモリ２８０２は、そのブロックのデータを、ブロック２８０７のデータとして、キャッシュメモリ２８０２に書き込む。
【００２４】
続いて、ストア命令にて指定されたワードのデータ２８０５が、キャッシュメモリ２８０２上のブロック２８０７の４ワード目に書き込まれる。
【００２５】
図２８Ｃは、退避データのレジスタ復帰の処理を説明するための図である。図２８Ｃにおいて、退避データ２８０５のレジスタ２８０４への復帰のために、キャッシュメモリ２８０２のデータ２８０５が、ＣＰＵ２８０１のレジスタ２８０４に読み出される。
【００２６】
図２８Ｄは、ライトバックを説明するための図である。図２８Ｄにおいて、キャッシュメモリ２８０２上のブロック２８０７が置き換えられる場合には、ブロック２８０７のデータが、メモリ２８０３のブロック２８０６にライトバックされる。
【００２７】
なお、不必要なメモリアクセスが発生する問題は、マルチコアを有するＣＰＵのコア間でデータを通信する場合も同じように発生する。
【００２８】
つまり、あるコアが、他のコアに提供するデータを、ストア命令を用いてキャッシュメモリに提供する。このとき、キャッシュメモリにてキャッシュミスが発生すると、キャッシュメモリは、メモリからストア命令に該当するブロックのデータを読み出すために、メモリアクセスを行う。
【００２９】
また、他のコアがキャッシュメモリからそのデータを読み出した後も、そのキャッシュブロックは書き換えられた状態になっている。このため、このブロックが置き換えられる場合には、このブロック内のデータが、メモリにライトバックされる。よって、不必要なメモリアクセスが発生する。
【００３０】
このように、ＣＰＵやコアが、高速なキャッシュメモリだけを使って、データを一時的に格納する場合でも、キャッシュメモリとメモリとの一貫性を保つため、不必要なメモリアクセスが発生する。
【００３１】
なお、ＣＰＵからのデータを一時的にキャッシュメモリに格納する際、このデータの書込み時のキャッシュミスに伴いメモリから読み出されたブロックのデータは、一時的に格納されるデータとは無関係であり、不必要なものである。
【００３２】
また、ＣＰＵが、一時的に格納されたデータをキャッシュメモリから読み出した後に、そのブロックがキャッシュメモリから追い出される場合に発生するライトバックも、メモリに書き込まなくてもよいデータである。
【００３３】
本発明の目的は、上述した課題を解決可能なキャッシュメモリシステムおよびキャッシュメモリ制御方法を提供することである。
【課題を解決するための手段】
【００３４】
本発明のキャッシュメモリシステムは、演算装置および記憶装置と接続されるキャッシュメモリシステムであって、複数のワードからなる複数のブロックを有するデータアレイと、前記複数のブロックのうち、少なくとも１つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記記憶装置のアドレス群を格納する格納手段と、前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードに当該演算装置からのデータを書き込む書込み手段と、前記書込み用ブロック内のワードのうち、前記書込み手段にて前記データが書き込まれたワードを示すワード情報を記憶するワード状態記憶手段と、前記演算装置からの読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去する読出し手段と、を含む。
【００３５】
本発明のキャッシュメモリ制御方法は、複数のワードからなる複数のブロックを有するデータアレイを含み、演算装置および主記憶装置と接続されるキャッシュメモリシステムが行うキャッシュメモリ制御方法であって、前記複数のブロックのうち、少なくとも１つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記記憶装置のアドレス群を格納手段に格納する格納ステップと、前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードに当該演算装置からのデータを書き込む書込みステップと、前記書込み用ブロック内のワードのうち、前記書込みステップで前記データが書き込まれたワードを示すワード情報をワード状態記憶手段に記憶する記憶ステップと、前記演算装置からの読み出し時に、前記ワード情報に示されたワードから前記データを読み出した場合、前記ワード情報を消去する読出しステップと、を含む。
【発明の効果】
【００３６】
本発明によれば、ＣＰＵまたはコア等の演算装置が、キャッシュメモリに一時データを書き込むときに生じる無駄なメモリアクセスを回避することが可能になる。
【発明を実施するための最良の形態】
【００３７】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【００３８】
図１Ａは、本発明の第１の実施の形態のキャッシュメモリシステムを示したブロック図である。
【００３９】
図１Ａにおいて、キャッシュメモリシステム１は、ＣＰＵ２およびメモリ３と接続される。ＣＰＵ２は、一般的に演算装置と呼ぶことができる。メモリ３は、一般的に記憶装置と呼ぶことができる。
【００４０】
キャッシュメモリシステム１は、アドレスレジスタ１０１、アドレスアレイ１０２、データアレイ１０３、比較器１０４、および、キャッシュ制御ユニット１０５を含む。比較部１０４とキャッシュ制御ユニット１０５は、制御部１１５に含まれる。
【００４１】
アドレスレジスタ１０１は、ＣＰＵ２が要求したアドレスを格納する。アドレスレジスタ１０１に格納されるアドレスは、上位ｍビット１１１、中位ｎビット１０９、および、下位ｋビット１１４によって表される。
【００４２】
上位ｍビット１１１のデータは、比較器１０４に提供され、中位ｎビット１０９のデータは、アドレスアレイ１０２とデータアレイ１０３に提供される。
【００４３】
アドレスアレイ１０２は、２のｎ乗個のエントリ（以下「アドレスエントリ」と称する。）を持つメモリである。なお、データアレイ１０３も、２のｎ乗個のエントリ（以下「データエントリ」と称する。）を持つメモリである。データアレイ１０３は、複数のワードからなる複数のブロック（データエントリ）を有する。
【００４４】
各アドレスエントリは、中位ｎビット１０９のデータに基づいて、各データエントリと１対１で対応している。
【００４５】
各アドレスエントリは、中位ｎビット１０９のデータが表すことが可能な値に対応するオフセットを有する。このため、各アドレスエントリは、中位ｎビット１０９に対応する。なお、オフセットは、一般的にインデックスとも呼ばれる。
【００４６】
アドレスアレイ１０２は、データアレイ１０３のデータエントリにブロック単位で格納されているデータ（ブロックデータ）の索引として使用される。
【００４７】
アドレスアレイ１０２の１つのアドレスエントリは、中位ｎビット１０９に対応するオフセットごとに、アドレスの上位ｍビット１０６と、そのブロックの状態他を表すビット列（以下「状態他ビット列」とも称する。）１０７と、を含む。アドレスの上位ｍビット１０６は、ブロックデータのアドレス（ブロックアドレス）の一部である。
【００４８】
アドレスアレイ１０２のうち、中位ｎビット１０９に対応するオフセットごとに、上位ｍビット１０６を格納する部分は、格納手段の一例である。
【００４９】
格納手段は、少なくとも１つのワードにデータが格納されたデータエントリに対応する、メモリ３のアドレス群（上位ｍビットのデータと中位ｎビットのデータ）を格納する。
【００５０】
このアドレス群は、上位ｍビットと中位ｎビットのデータが規定され、かつ、下位ｋビットのデータが任意の値となる複数のアドレスを意味する。
【００５１】
アドレスアレイ１０２のうち、状態他ビット列１０７を格納する部分は、ワード状態記憶部１０７ａと、ブロック状態記憶部１０７ｂと、を含む（図２参照）。
【００５２】
ワード状態記憶部１０７ａは、一般的にワード状態記憶手段と呼ぶことができる。
【００５３】
ワード状態記憶部１０７ａは、ＣＰＵ２からのデータが書き込まれたワードを特定するためのワード状態情報（W(1)〜W（8））を、そのワードに対応づけられたアドレスと関連づけて記憶する。
【００５４】
なお、W(1)〜W（8）において、その値が１になっているものは、キャッシュ制御ユニット１０５にてデータが書き込まれたワードを示すワード情報となる。
【００５５】
ブロック状態記憶部１０７ｂは、一般的にブロック状態記憶手段と呼ぶことができる。
【００５６】
ブロック状態記憶部１０７ｂは、データアレイ１０３のブロックに対応するアドレス群ごとに、そのブロック内のＣＰＵ２から書き込まれていないワードにメモリ３から読み出されたデータが記憶されているか否かを示すブロック状態情報（ＢＶ）を記憶する。
【００５７】
なお、状態他ビット列１０７の詳細については後述する。
【００５８】
アドレスアレイ１０２は、中位ｎビット１０９のデータをオフセット１１０として受け付けると、オフセット１１０に対応するアドレスエントリから、上位ｍビット１０６のデータと、状態他ビット列１０７のデータと、を出力する。
【００５９】
上位ｍビット１０６のデータは、比較器１０４に提供され、状態他ビット列１０７のデータは、キャッシュ制御ユニット１０５に提供される。
【００６０】
データアレイ１０３の１つのデータエントリは、２のｋ乗バイトのブロックデータ（以下、単に「ブロック」とも称する。）１０８を格納する。
【００６１】
各データエントリは、各アドレスエントリと１対１で対応しているため、各データエントリ内のブロックも、各アドレスエントリと１対１で対応する。
【００６２】
比較器１０４は、アドレスアレイ１０２からの上位ｍビット１０６のデータと、アドレスレジスタ１０１からの上位ｍビット１１１のデータと、を比較する。
【００６３】
上位ｍビット１０６のデータと上位ｍビット１１１のデータが一致した場合は、アドレスレジスタ１０１内のアドレスにて指定されたデータを含むブロックが、キャッシュメモリ（具体的には、アドレスアレイ１０２とデータアレイ１０３）上にあることになる。
【００６４】
キャッシュ制御ユニット１０５は、比較器１０４からの比較結果１１２、ＣＰＵ２からの命令１１３、および、アドレスアレイ１０２からの状態他ビット列１０７に基づいて、キャッシュメモリ（具体的には、アドレスアレイ１０２とデータアレイ１０３）を制御する。
【００６５】
命令１１３は、ロード命令（load、ロード要求等）、ストア命令（store、ストア要求等）、および、ロードアンドインバリデート命令（load&inv、ロードアンドインバリデート要求等）の総称である。
【００６６】
制御部１１５は、一般的に制御手段と呼ぶことができる。
【００６７】
制御部１１５は、キャッシュメモリシステム１の動作を制御する。
【００６８】
図１Ｂは、制御部１１５が有する機能を機能部として示したブロック図である。
【００６９】
図１Ｂにおいて、制御部１１５は、書込み部１１５ａと、読出し部１１５ｂと、判断部１１５ｃと、データ転送部１１５ｄとを含む。
【００７０】
書込み部１１５ａは、一般的に書込み手段と呼ぶことができる。
【００７１】
書込み部１１５ａは、ＣＰＵ２からストア命令を受け付ける。
【００７２】
書込み部１１５ａは、ストア命令に示されたアドレスが、アドレスアレイ１０２（具体的には、中位ｎビット１０９に対応するオフセットごとに上位ｍビット１０６を格納する部分）内にない場合、データアレイ１０３内の複数のブロックのいずれかを書込み用ブロックとして割り当てる。
【００７３】
書込み部１１５ａは、ストア命令に示されたアドレスに対応するブロックのデータをメモリ３から読み込まずに、その書込み用ブロック内のいずれかのワードを、ストア命令に示されたアドレスに対応づけ、そのワードにストア命令に示されたデータを書き込む。
【００７４】
読出し部１１５ｂは、一般的に読出し手段と呼ぶことができる。
【００７５】
読出し部１１５ｂは、ＣＰＵ２からロード命令を受け付ける。ロード命令は、一般的に第２読出し命令と呼ぶことができる。
【００７６】
読出し部１１５ｂは、ロード命令に示されたアドレスに対応するワード状態情報（W(i)＝１）をワード状態記憶部１０７ａが記憶している場合、または、ロード命令に示されたアドレスに対応するブロック状態情報（ＢＶ＝１）をブロック状態記憶部１０７ｂが記憶している場合、そのアドレスから特定される、データアレイ１０３内のワードからデータを読み出す。
【００７７】
また、読出し部１１５ｂは、ロード命令に応じた読み出し時にキャッシュミスが生じたとき、ロード命令に示されたアドレスに対応するブロック内のデータをメモリ３から読み出す。
【００７８】
読出し部１１５ｂは、続いて、ワード状態記憶部１０７ａを参照して、データアレイ１０３のそのブロック内でデータが書き込まれていない１つまたは複数のワードを特定する。
【００７９】
読出し部１１５ｂは、その特定された１つまたは複数のワードにだけ、メモリ３から読み出したブロックのデータを書き込む。
【００８０】
読出し部１１５ｂは、続いて、ブロック状態記憶部１０７ｂに、そのブロック内のＣＰＵ２から書き込まれていない１つまたは複数のワードに、メモリ３から読み出されたデータが記憶されていることを示すブロック状態情報（ＢＶ＝１）を記憶する。
【００８１】
また、読出し部１１５ｂは、ＣＰＵ２から、ロードアンドインバリデート命令を受け付ける。ロードアンドインバリデート命令は、一般的に第１読出し命令と呼ぶことができる。
【００８２】
読出し部１１５ｂは、ロードアンドインバリデート命令を受け付けた場合、ロード命令を受け付けたときに行う処理を行い、その後、データが読み出されたワードに対応するワード状態情報W(i)を０にする。なお、W(i)＝１がワード情報であるので、W(i)を０にすることは、ワード情報を消去することを意味する。
【００８３】
判断部１１５ｃは、一般的に判断手段と呼ぶことができる。
【００８４】
判断部１１５ｃは、ロード命令を受け付けた場合、および、ロードアンドインバリデート命令を受け付けた場合、ワード状態記憶部１０７ａおよびブロック状態記憶部１０７ｂを参照して、キャッシュヒットまたはキャッシュミスが生じたかを判断する。
【００８５】
データ転送部１１５ｄは、一般的にデータ転送手段と呼ぶことができる。
【００８６】
データ転送部１１５ｄは、データアレイ１０３内のブロック内の指定された１つまたは複数のワードのデータだけを、メモリ３内の対応するブロックに書き込む。
【００８７】
例えば、データ転送部１１５ｄは、ワード状態記憶部１０７ａを参照して、書込み用ブロック内でデータが書き込まれた１つまたは複数のワードを特定し、その特定された１つまたは複数のワード内のデータを、メモリ３内の対応するブロックにライトバックする。
【００８８】
本実施の形態では、データ転送部１１５ｄは、データアレイ１０３内のブロックと対応するメモリ３のアドレスが切り替えられる時、ワード状態記憶部１０７ａとブロック状態記憶部１０７ｂを参照して、そのブロック内のすべてのワードにＣＰＵ２からデータが書き込まれたか、一度メモリ３からブロックが読み出された場合には、そのブロック全体をメモリ３内の対応するブロックにライトバックする。そうでない場合には、そのブロック内でデータが書き込まれた１つまたは複数のワードを特定し、その特定された１つまたは複数のワード内のデータだけを、メモリ３内の対応するブロックにライトバックする。
【００８９】
なお、以下の説明では、アドレスレジスタ１０１に格納されるアドレスは、６４ビットとし、ｋ＝６、すなわちブロックのサイズを６４バイトとし、ｎ＝１０、すなわちアドレスアレイ１０２のアドレスエントリ数、および、データアレイ１０３のデータエントリ数を１０２４とし、ｍ＝４８とする。また、６４バイトのブロックは、８個のワードからなる。なお、１ワードは８バイトである。
【００９０】
本実施の形態では、ダイレクトマップ方式のキャッシュメモリを示しているが、セットアソシアティブ方式のキャッシュメモリでも本実施の形態のキャッシュメモリを適用することができる。その場合は、ウェイ数分、アドレスアレイ１０２、データアレイ１０３、および、比較器１０４が必要である。
【００９１】
次に、図１Ａおよび１Ｂに示したキャッシュメモリシステム１の動作を説明する。
【００９２】
キャッシュメモリシステム１へのアクセスがあった場合に、アドレスレジスタ１０１は、そのアドレスを格納する。なお、このアドレスは、論理アドレスでも物理アドレスでもよい。
【００９３】
本実施の形態では、このアドレスを、何らかのアドレス変換の手段により仮想アドレスから変換された物理アドレスとして説明を行う。
【００９４】
ブロックのサイズは６４バイトなので、アドレスレジスタ１０１の下位６（ｋ）ビット１１４のデータは、データアレイ１０３のブロック内のワードのアドレスとなる。
【００９５】
中位１０（ｎ）ビット１０９のデータが、アドレスアレイ１０２のオフセット１１０として使用されて、アドレスアレイ１０２のアドレスエントリ内のデータ（上位４８（ｍ）ビット１０６のデータと状態他ビット列１０７のデータ）が読み出される。
【００９６】
比較器１０４は、読み出された上位４８（ｍ）ビット１０６のデータと、アドレスレジスタ１０１内の上位４８（ｍ）ビット１１１のデータと、を比較して、アドレスレジスタ１０１内のアドレスにて指定されたデータを含むブロックが、すでにキャッシュメモリにあるかどうかを判断する。
【００９７】
キャッシュ制御ユニット１０５は、比較器１０４の比較結果１１２と、命令１１３と、状態他ビット列１０７とを受け付ける。
【００９８】
キャッシュ制御ユニット１０５は、比較結果１１２、命令１１３、および、ビット列１０７に基づいて、キャッシュメモリの動作を決定する。
【００９９】
キャッシュ制御ユニット１０５の動作の詳細ついては、後述する。
【０１００】
図２は、アドレスアレイ１０２に格納される状態他ビット列１０７の一例を示した説明図である。
【０１０１】
状態他ビット列１０７は、９ビットで構成される。具体的には、状態他ビット列１０７は、１ビットのＢＶ２０２と、８ビットのW(i)（i＝1〜8）２０３とからなる。W(i)（i＝1〜8）２０３は、１ビットのW(1)〜W(8)からなる。
【０１０２】
W(1)〜W(8)２０３は、データアレイ１０３のブロックデータの各ワードのアドレス、すなわち各ワードに対応する。ブロックデータは、８ワードからなるので、W(1)は、ブロックデータ２０４の１ワード目に対応し、W(2)は２ワード目、W(3)は３ワード目、W(4)は４ワード目、W(5)は５ワード目、W(6)は６ワード目、W(7)は７ワード目、W(8)は８ワード目に対応する。
【０１０３】
W(i)２０３の値が１のときは、i番目のワードにデータが書き込まれたことを示す。つまり、W(i)２０３が１のときは、ブロックデータ２０４のi番目のワードには、ＣＰＵ２から書き込まれた有効なデータが格納されていることになる。
【０１０４】
W(i)２０３の値が０のときは、i番目のワードにＣＰＵ２からデータが書き込まれていないことを示す。
【０１０５】
ＢＶ２０２は、ＢＶ２０２を含むアドレスエントリに対応する、データアレイ１０３内のブロック全体が有効かどうかを示す。
【０１０６】
具体的には、ＢＶ２０２の値が１のときは、ＣＰＵ２から書き込まれていないワード（Ｗ(i)２０３が０）にメモリ３から読み出されたデータが格納されていることを示しており、対応するブロック全体が有効であることを意味する。すなわち、ＢＶ２０２の値が１のときは、i番目のワードの状態を示すW(i)２０３の値が０、つまり、W(i)２０３がi番目のワードにＣＰＵ２からデータが書き込まれていないことを示す場合であったとしても、i番目のワードにメモリ３から読み出されたデータが書き込まれたことによりi番目のワードに有効なデータが格納されていることを示す。
【０１０７】
また、ＢＶ２０２の値が０の場合には、i番目のワードの状態を示すW(i)２０３の値が１であるワードのデータだけが有効で、W(i)２０３の値が０であるワードのデータは無効であることを示す。
【０１０８】
また、ロードアンドインバリデート命令にてデータが読み出されたワードに対応するW(i)２０３の値は０にされる。
【０１０９】
図３は、図２に示したＢＶ２０２とW(i)２０３の値によるi番目のワードの有効／無効を示す説明図である。
【０１１０】
次に、図１Ａ、図１Ｂおよび図２を参照しながら、第１の実施の形態の動作について詳細に説明する。
【０１１１】
図４は、キャッシュ制御ユニット１０５の動作を説明するためのフローチャートである。
【０１１２】
アドレスレジスタ１０１が、キャッシュメモリにアクセスされたアドレスを格納すると、その後、そのアドレスの中位１０（ｎ）ビット１０９のデータが、アドレスアレイ１０２およびデータアレイ１０３のオフセット１１０として使用されて、アドレスアレイ１０２のアドレスエントリ内の上位４８（ｍ）ビット１０６のデータと状態他ビット列１０７のデータが読み出され、データアレイ１０３のデータエントリがアクセスされる。
【０１１３】
比較器１０４は、読み出された上位４８（ｍ）ビット１０６のデータと、アドレスレジスタ１０１内の上位４８（ｍ）ビット１１１のデータと、を比較して、アドレスレジスタ１０１内のアドレスにて指定されたデータを含むブロックが、すでにキャッシュメモリにあるかどうかを判断する。
【０１１４】
キャッシュ制御ユニット１０５は、比較器１０４の比較結果１１２と、状態他ビット列１０７のデータと、命令１１３と、を受け付ける。
【０１１５】
なお、命令１１３は、ＣＰＵ２から提供される。また、キャッシュ制御ユニット１０５は、下位６（ｋ）ビットのデータも受け付ける。また、キャッシュ制御ユニット１０５は、アクセスが書き込みの場合、ＣＰＵ２から、ストア命令に示された書き込み用データも受け付ける。
【０１１６】
キャッシュ制御ユニット１０５は、命令１１３が、ストア命令か、ロード命令か、ロードアンドインバリデート命令かを判断する（ステップ４０１）。
【０１１７】
まず、命令１１３がストア命令の場合（ステップ４０２）、キャッシュ制御ユニット１０５は、ステップ４０３を実行する。
【０１１８】
ステップ４０３では、キャッシュ制御ユニット１０５は、比較器１０４の比較結果１１２に基づいて、アクセスされたブロックを格納しているエントリが、すでにキャッシュメモリ（アドレスアレイ１０２とデータアレイ１０３）にあるかどうかを判断する。
【０１１９】
比較結果１１２が一致を示す場合、キャッシュ制御ユニット１０５は、アクセスされたブロックはキャッシュメモリにあると判断する（ステップ４０４）。
【０１２０】
一方、比較結果１１２が一致を示さない場合は、キャッシュ制御ユニット１０５は、アクセスされたブロックがキャッシュメモリにないと判断する（ステップ４０５）。
【０１２１】
アクセスされたブロックがキャッシュメモリにあった場合は（ステップ４０４）、キャッシュ制御ユニット１０５は、下位６（ｋ）ビットのデータに基づいて、そのブロックのデータ１０８内のワードを特定し、そのワードに対して、書き込み用データを書き込み（ステップ４０６）、データが書き込まれたワードに対応するW(i) ２０３の値を１にする（ステップ４０７）。
【０１２２】
アクセスされたブロックがキャッシュメモリにない場合は（ステップ４０５）、キャッシュ制御ユニット１０５は、新しいブロックを、書込み用ブロックとして割り当てる処理を行う（ステップ４０８）。
【０１２３】
新しいブロックを割り当てる処理（ステップ４０８）については、後に、図５を使って詳しく述べる。
【０１２４】
ステップ４０８の後、キャッシュ制御ユニット１０５は、新しく割り当てたデータアレイ１０３のブロックに対応するアドレスアレイ１０２のエントリの上位４８（ｍ）ビット１０６に、アドレスレジスタ１０１の上位４８（ｍ）ビット１１１のデータを書き込み、同じく対応するアドレスアレイ１０２のエントリの状態他のビット列１０７をゼロクリア（BV＝0、W(1〜8)＝0）して初期化する（ステップ４０９）。
【０１２５】
ステップ４０９の後、キャッシュ制御ユニット１０５は、下位６（ｋ）ビットのデータに基づいて、新しく割り当てたデータアレイ１０３のブロック内のワードを特定し、そのワードに対して、書き込み用データを書き込み（ステップ４０６）、データが書き込まれたワードに対応するW(i) ２０３の値を１にする（ステップ４０７）。
【０１２６】
一方、命令１１３が、ロード命令、または、ロードアンドインバリデート命令の場合（ステップ４１０）、キャッシュ制御ユニット１０５は、ステップ４１１を実行する。
【０１２７】
ステップ４１１では、キャッシュ制御ユニット１０５は、比較器１０４の比較結果１１２に基づいて、アクセスされたブロックを格納しているエントリが、すでにキャッシュメモリにあるかどうかを判断する。
【０１２８】
比較結果１１２が一致を示す場合、キャッシュ制御ユニット１０５は、アクセスされたブロックはキャッシュメモリにあると判断する（ステップ４１２）。
【０１２９】
一方、比較結果１１２が一致を示さない場合は、キャッシュ制御ユニット１０５は、アクセスされたブロックがキャッシュメモリにないと判断する（ステップ４１３）。
【０１３０】
アクセスされたブロックがキャッシュメモリにあり（ステップ４１２）、かつ、アクセスされたワードに対応するW(i)の値が１またはアクセスされたブロックのＢＶ２０２が１の場合（ステップ４２０）、キャッシュ制御ユニット１０５は、データアレイ１０３のアクセスされたブロックデータ１０８内の下位６（ｋ）ビットで特定されるワードからデータを読み出す（ステップ４１４）。
【０１３１】
その後、キャッシュ制御ユニット１０５は、命令１１３がロードアンドインバリデート命令で、かつ、アクセスされたワードに対応するW(i)が１の場合（ステップ４２１）には、そのW(i)を０にし、ＢＶも０にする（ステップ４２２）。
【０１３２】
一方、命令１１３がロードアンドインバリデート命令でなく、または、アクセスされたワードに対応するW(i)が１でない場合（ステップ４２３）には、キャッシュ制御ユニット１０５は、何もしない。
【０１３３】
一方、アクセスされたブロックがキャッシュメモリにあり（ステップ４１２）、かつ、アクセスされたワードに対応するW(i)の値が０でかつアクセスされたブロックのＢＶ２０２が０の場合（ステップ４１５）、キャッシュ制御ユニット１０５は、メモリ３から、そのブロックのデータを読み出し、データアレイ１０３のそのエントリのブロックデータ１０８中のW(i)＝0のワードだけに、読み出したデータを書き込む（ステップ４１６）。
【０１３４】
続いて、キャッシュ制御ユニット１０５は、そのブロックに対応するアドレスアレイ１０２のエントリ内のＢＶ２０２を１にする（ステップ４１７）。
【０１３５】
続いて、キャッシュ制御ユニット１０５は、データアレイ１０３から、アクセスされたたワードを読み出す（ステップ４１４）。その後、キャッシュ制御ユニット１０５は、アクセスされたワードに対応するW(i)は０なので（ステップ４２３）、何もしない。
【０１３６】
アクセスされたブロックがキャッシュにない場合（ステップ４１３）、キャッシュ制御ユニット１０５は、新しいブロックを割り当てる処理を行う（ステップ４１８）。
【０１３７】
新しいブロックを割り当てる処理（ステップ４１８）については、後に図５を使って詳しく述べる。
【０１３８】
続いて、キャッシュ制御ユニット１０５は、新しく割り当てたブロックに対応するアドレスアレイ１０２のエントリの上位４８（ｍ）ビット１０６に、アドレスレジスタ１０１の上位４８（ｍ）ビット１１１のデータを書き込み、同じく対応するアドレスアレイ１０２のエントリの状態他のビット列１０７をゼロクリア（BV＝0、W(1〜8)＝0）して、初期化する（ステップ４１９）。
【０１３９】
続いて、キャッシュ制御ユニット１０５は、メモリ３から、そのブロックのデータを読み出し、そのブロックに対応するデータアレイ１０３のエントリのブロックデータ１０８中のW(i)＝0のワードだけに、読み出したデータを書き込む（ステップ４１６）。
【０１４０】
この場合、ステップ４１９で状態他のビット列１０７をゼロクリアしているので、ブロックデータ１０８全体が書かれる。
【０１４１】
続いて、キャッシュ制御ユニット１０５は、アドレスアレイ１０２の対応するエントリ内のＢＶ２０２を１にする（ステップ４１７）。
【０１４２】
続いて、キャッシュ制御ユニット１０５は、データアレイ１０３から、アクセスされたワードを読み出す（ステップ４１４）。
【０１４３】
その後、キャッシュ制御ユニット１０５は、アクセスされたワードに対応するW(i)は０なので（ステップ４２３）、何もしない。
【０１４４】
次に、図５を参照して、図４に示したステップ４０８および４１８について説明する。
【０１４５】
まず、キャッシュ制御ユニット１０５は、新しいエントリを割り当てるために、置き換えられるエントリ（ブロック）を選択する（ステップ５０１）。
【０１４６】
本実施形態では、ダイレクトマップ方式のキャッシュメモリが用いられている。このため、新しいブロックを割り当てるためにデータが置き換えられるエントリは、アクセスされたアドレスから一意に決まる。
【０１４７】
もしも、セットアソシアティブ方式のキャッシュメモリが用いられた場合には、アドレスから決定される置き換え対象になるエントリは複数あり、その中のどれを置き換えるかはアクセス履歴等により決定することが可能である。
【０１４８】
次に、キャッシュ制御ユニット１０５は、選択された、データが置き換えられるエントリのブロックに、ＣＰＵ２からデータが書き込まれているかどうか判断する。
【０１４９】
もし、選択されたエントリのすべてのワードのW(i)２０３が０ならば（ステップ５０２）、そのブロックには、ＣＰＵ２からデータが書き込まれていなかったことになる。この場合、キャッシュ制御ユニット１０５は、ライトバックすることなく、そのまま、そのエントリを使うことができる。
【０１５０】
もし、選択されたエントリのすべてのワードのW(i)２０３が１、または、ＢＶ２０２＝１の場合には（ステップ５０３）、そのブロック全体が書き換えられた、または、ブロック全体が有効であることになる。
【０１５１】
この場合、キャッシュ制御ユニット１０５は、そのブロックのデータをメモリ３にライトバックする（ステップ５０４）。
【０１５２】
もし、選択されたエントリの一部のワードのW(i)２０３が１で、かつ、ＢＶ２０２＝０の場合には（ステップ５０５）、Ｗ(i)２０３が１のワードだけが書き換えられたことになる。
【０１５３】
この場合、キャッシュ制御ユニット１０５は、W(i)２０３が１のワードのデータだけを、メモリ３にライトバックする（ステップ５０６）。なお、W(i)２０３が０のワードのデータは、メモリ３に書き込まない。
【０１５４】
なお、比較器１０４とキャッシュ制御ユニット１０５が行うデータの書込みに関する動作は、書込み部１１５ａによって行われる。
【０１５５】
また、比較器１０４とキャッシュ制御ユニット１０５が行うデータの読出しに関する動作は、読出し部１１５ｂによって行われる。
【０１５６】
また、比較器１０４とキャッシュ制御ユニット１０５が行うキャッシュヒットかキャッシュミスかの判断に関する動作は、判断部１１５ｃによって行われる。
【０１５７】
また、比較器１０４とキャッシュ制御ユニット１０５が行うデータアレイ１０３とメモリ３との間のデータ転送に関する動作はデータ転送部１１５ｄによって行われる。
【０１５８】
図６は、キャッシュメモリシステム１（具体的には、キャッシュ制御ユニット１０５）がメモリ３に送るコマンドと、そのコマンドに対するメモリ３からキャッシュメモリシステム１（具体的には、キャッシュ制御ユニット１０５）へのリプライを説明するための説明図である。
【０１５９】
図６（Ａ）と図６（Ｂ）は、ブロック全体をメモリ３から読み出すコマンドとそのリプライの一例を示した説明図である。
【０１６０】
本実施形態では、アドレスは６４ビットで、ブロックの大きさは６４バイトなので、メモリ３は、そのコマンドのブロックアドレス６０１（５８ビット）で指定されるブロックを読み出して、図６（Ｂ）で示すデータリプライの形式で、ブロックデータ６０２（６４バイト）を、キャッシュ制御ユニット１０５に送る。
【０１６１】
図６（Ｃ）は、キャッシュメモリシステム１（具体的には、キャッシュ制御ユニット１０５）が、ブロック全体をメモリ３に書き込むコマンドの一例を示した説明図である。
【０１６２】
このコマンドは、ブロックアドレス６０３（５８ビット）と、ブロックデータ６０４（６４バイト）から構成される。
【０１６３】
図６（Ｄ）は、ブロックデータ６０４内のワードうち、W(i)２０３が１のワードのデータだけを、キャッシュメモリシステム１からメモリ３に書き込むためのコマンドの一例である。
【０１６４】
このコマンドは、ブロックアドレス６０５（５８ビット）と、W(1〜8)６０６（８ビット）と、W(i)２０３が１のワード（８バイト〜５４バイト）のデータからなる部分ブロックデータ６０７と、を含む。
【０１６５】
このコマンドは、W(i)２０３が１であるワードの個数に応じて長さが変わる。
【０１６６】
次に、図７〜図１６を使ってキャッシュ上のあるブロックを例にして、本実施形態での状態他のビット列とメモリアクセスなどの動作について説明する。
【０１６７】
図７は、ＣＰＵ２がストア命令を実行したときにキャッシュミスした場合の動作を説明するための説明図である。
【０１６８】
１ワードの書き込みにキャッシュミスが生ずると、そのワードを含むブロックが新しくキャッシュメモリシステム１に割り付けられ（BV＝0、W＝00000000）、書き込みデータ７０３が、書き込み時のアドレスに応じて、データアレイ１０３のブロックデータ７０４の４ワード目に書き込まれ、状態他ビット列７０５のうち、書き込まれたワードに対応するW(4)が１に設定される(BV＝0、W＝00010000)。
【０１６９】
新たなブロックの割り付けに伴うブロックの置き換えにより、メモリアクセスが発生するかもしれないが、書き込み自体に伴うメモリ３へのアクセスは発生しない。
【０１７０】
図８は、図７と同じブロックの２ワード目に、ＣＰＵ２がストア命令を実行して、キャッシュヒットした場合の動作を説明するための説明図である。
【０１７１】
１ワードの書き込みがキャッシュヒットして、データ８０２が、データアレイ１０２のブロックデータ８０３の２ワード目に書き込まれ、状態他ビット列８０４のW(2)が１となる(BV＝0、W＝01010000)。書き込みによるメモリ３へのアクセスは発生しない。
【０１７２】
図９は、ＣＰＵ２が、図８と同じブロックの４ワード目に対してロード命令を実行し、キャッシュヒットした場合の動作を説明するための説明図である。
【０１７３】
１ワードの読み出しがキャッシュヒットして、データアレイ１０２のブロックデータ９０３の４ワード目からデータが読み出され、読み出しデータ９０２としてＣＰＵ２に返される。
【０１７４】
この場合、状態他ビット列９０４は更新されない（BV＝0、W＝01010000）。
【０１７５】
ただし、キャッシュメモリがセットアソシアティブ方式の場合は、置き換えのためのアクセス履歴の部分が更新される可能性がある。また、読み出しに伴うメモリ３へのアクセスは発生しない。
【０１７６】
図１０は、ＣＰＵ２が図９と同じブロックの６ワード目に対してロード命令を実行し、キャッシュミスした場合の動作を示している。
【０１７７】
状態他ビット列１００２が、W(6)＝０でかつＢＶ＝０なので、１ワードの読み出しがキャッシュミスして、キャッシュ制御ユニット１０５は、図６（Ａ）に示したコマンドを使って、メモリ３から、図９に示したブロックと同じブロックを読み出す。
【０１７８】
そして、メモリ３から読み出されたブロックのデータ１００４が、図６（Ｂ）のデータリプライの形式でキャッシュメモリシステム１（キャッシュ制御ユニット１０５）に返されると、読み出したブロックのデータ１００４のうち、W(i)＝０のワードのデータだけ（１番目、３番目、５〜８番目のワードのデータ）が、ブロック１００６に書き込まれ、状態他ビット列１００７のＢＶ２０２が１となる（BV＝1、W＝01010000）。
【０１７９】
そして、６番目のワードのデータが、読み出しデータ１００８として、ＣＰＵ２に返される。
【０１８０】
図１１は、ＣＰＵ２が、図１０と同じブロックの１ワード目に対しロード命令を実行し、キャッシュヒットした場合の動作を示している。
【０１８１】
状態他ビット列１１０２のＢＶ２０２が１なので、１ワードの読み出しがキャッシュヒットして、ブロックデータ１１０３の１ワード目が読み出しデータ１１０４としてＣＰＵ２に返される。
【０１８２】
この場合、状態他ビット列１１０２は更新されない（BV＝1、W＝01010000）。
【０１８３】
ただし、キャッシュメモリがセットアソシアティブ方式の場合は、置き換えのためのアクセス履歴の部分が更新される可能性がある。また、読み出しによるメモリアクセスは発生しない。
【０１８４】
図１２は、図１１と同じブロックのエントリが置き換えの対象になった場合の動作を示している。
【０１８５】
２ワード目と４ワード目がＣＰＵ２から書きこまれていて、状態他ビット列１２０２のW(2)とW(4)が１になっているが(W＝01010000)、ＢＶ２０２が１なので、図６（Ｃ）に示したコマンドを使って、ブロックデータ１２０３全体がメモリ３に書き込まれる。そして、状態他ビット列１２０２が初期化される(BV＝0、W＝00000000)。
【０１８６】
図１３は、ＣＰＵ２がロード命令を実行してキャッシュミスした場合の動作を示している。
【０１８７】
読み出されたワードのブロックはキャッシュメモリ１上になく、新しいブロックが割り当てられ、状態他ビット列１３０３が初期化される(BV＝0、W＝00000000)。
【０１８８】
続いて、ロードされたワードのブロックが、図６（Ａ）に示したコマンドを使って、メモリ３から読み出される。
【０１８９】
メモリ３から読み出されたブロック１３０５は、図６（Ｂ）のデータリプライの形式で、キャッシュメモリ１に返され、ブロックデータ１３０６に書き込まれる。
【０１９０】
続いて、状態他のビット列１３０７のＢＶが１になる(BV＝1、W＝00000000) 。そして、読み出しデータ１３０８がＣＰＵ２に返される。
【０１９１】
図１４は、図１３と同じブロックのエントリが置き換えの対象になった場合の動作を示している。
【０１９２】
このブロックの状態他のビット列１４０１のW(i)がすべて０なので(W=00000000)、ＢＶを０にするだけである(BV＝0、W＝00000000)。エントリの置き換えによるメモリアクセスは発生しない。
【０１９３】
図１５は、あるブロックのエントリが置き換えの対象になった場合の動作を示している。
【０１９４】
２ワード目と４ワード目がＣＰＵ２から書き込まれていて、状態他ビット列１５０２のW(2)と W(4)が１になっていて (W=01010000)、ＢＶ２０２が０なので、２ワード目と４ワード目のデータ１５０３および１５０４だけが、図６（Ｄ）に示したコマンドを使って、メモリ３に書き込まれる。
【０１９５】
続いて、状態他のビット列１５０１が初期化される(BV＝0、W＝00000000) 。
【０１９６】
図１６は、ＣＰＵ２が、あるブロックの２ワード目に対してロードアンドインバリデート命令を実行した場合の動作を示している。
【０１９７】
このブロックは、２ワード目と４ワード目がＣＰＵ２から書き込まれていて、状態他ビット列１６０２のW(2)とW(4)が１になっていて、BV２０２が１になっている（BV＝１、W=01010000）。
【０１９８】
２ワード目のデータ１６０３がキャッシュから読み出され、ＣＰＵ２に、読み出しデータ１６０４として返される。
【０１９９】
続いて、読み出された２ワード目のW(2)が１なので、W(2)が０に、BVが０にされる(BV＝0、W＝00010000)。
【０２００】
図１７Ａ〜１７Ｆは、第１の実施の形態において、レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【０２０１】
図１７Ａは、初期状態を示した説明図である。
【０２０２】
図１７Ｂは、レジスタスピルが発生し、ＣＰＵ２のレジスタ２１からデータを退避するために、ストア命令が実行されたときの動作を示した説明図である。
【０２０３】
図１７Ｂにおいて、キャッシュメモリ１にて、書き込み時にキャッシュミスが発生し、ストア命令で示されたワードに対応するブロック１７０１が、キャッシュメモリ１に割り当てられ、ストア命令にて示されたワードのデータが、ブロック１７０１の４ワード目に書き込まれる。続いて、W(4)が１に変更される（W=00010000）。
【０２０４】
図１７Ｃは、ロードアンドインバリデート命令が実行された際の動作を示した説明図である。
【０２０５】
図１７Ｃにおいて、レジスタの復帰のために、キャッシュメモリ１上のデータ１７０２が、ＣＰＵ２のレジスタ２１にロードアンドインバリデート命令で読み出される。その後、W(4)が０に変更される（W=00000000）。
【０２０６】
図１７Ｄは、キャッシュメモリ１上のブロック１７０１が置き換えられたときの動作を示した説明図である。ブロック１７０１ではW＝00000000なので、メモリ３へのブロック１７０１のデータのライトバックは発生しない。
【０２０７】
このように第１の実施の形態では、図２８で説明した不必要なメモリアクセスが発生しない。
【０２０８】
ここでは、ブロック１７０１が置き換えられる前に、ＣＰＵ２が、ロードアンドインバリデート命令を用いて、書き込んだデータ１７０２を読み出している。
【０２０９】
もしも、ＣＰＵ２がデータ１７０２をロードアンドインバリデート命令を用いて読み出す前に、ブロック１７０１が置き換えられた場合は、図１７Ｅに示すように、メモリ３へのライトバックが発生する。その後、ＣＰＵ２がロードアンドインバリデート命令を用いてデータ１７０２を読み出したときに、メモリ３からブロック１７０３のデータが読み出される（図１７Ｆ参照）。
【０２１０】
このように、もし、ＣＰＵ２内のレジスタ２１の値を退避したブロックが追い出されても、メモリアクセスは発生するが、レジスタ２１には正しい値が復帰される。
【０２１１】
本実施形態によれば、制御部１１５（書込み部１１５ａ）は、ＣＰＵ２からの書込み時に、ＣＰＵ２からのアドレスが、アドレスアレイ１０２（中位ｎビット１０９に対応するオフセットごとに上位ｍビット１０６を格納する部分）内にない場合、データアレイ１０３内の複数のブロックのいずれかを書込み用ブロックとして割り当てる。そして、制御部１１５（書込み部１１５ａ）は、その書込み用ブロック内のいずれかのワードを、ＣＰＵ２からのアドレスに対応づけ、そのワードにＣＰＵ２からのデータを書き込む。
【０２１２】
ワード状態記憶部１０７ａは、ＣＰＵ２からのデータが書き込まれたワードを示すワード情報（W(i)＝１）を記憶する。
【０２１３】
制御部１１５（読出し部１１５ｂ）は、ＣＰＵ２からの読み出し時に、ワード情報（W(i)＝１）に示されたワードからデータを読み出した場合、そのワード情報を消去（W(i)の値を１から０に）する。
【０２１４】
このため、ＣＰＵ等の演算装置が、レジスタスピル等によって、キャッシュメモリに一時データを書き込むときに生じる無駄なメモリアクセスを回避することが可能になる。
【０２１５】
具体的には、書き込みミス時にメモリからブロックのデータを読み出すことを回避できる。また、ＣＰＵからのデータが書き込まれたワードを有するブロックが置き換えられるときに、そのワードのデータをメモリへライトバックすることが回避可能になる。
【０２１６】
また、ＣＰＵのレジスタ内の一時データをキャッシュメモリ上に格納する場合、ＣＰＵに特殊なレジスタ等を設ける場合に比べて、一時データの容量に関する制限を緩和することが可能になる。
【０２１７】
また、ＣＰＵのレジスタ内の一時データをキャッシュメモリ上に格納する場合、格納された一時データはコンテクストにはならず、プロセス切り替え時に退避する必要がなくなる。
【０２１８】
なお、本実施形態のキャッシュメモリシステム１において、アドレスレジスタ１０１、ブロック状態記憶部１０７ｂ、判断部１１５ｃ、および、データ転送部１１５ｄが省略されても、上記と同様の作用効果を生じる。
【０２１９】
本実施形態では、制御部１１５（読出し部１１５ｂ）は、ロードアンドインバリデート命令（第１読出し命令）に応じた読み出し時に、ワード情報に示されたワードからデータを読み出した場合、そのワード情報を消去する。また、制御部１１５（読出し部１１５ｂ）は、ロード命令（第２読出し命令）に応じた読み出し時に、ワード情報に示されたワードからデータを読み出した場合、そのワード情報を消去しない（維持する）。
【０２２０】
この場合、ＣＰＵ等の演算装置は、読み出し時に、必要に応じて、ワード情報を消去したり、維持したりできる。
【０２２１】
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【０２２２】
図１８は、本発明の第２の実施の形態のキャッシュメモリシステムが適用される計算システムを示したブロック図である。
【０２２３】
図１８に示したように、本実施形態のキャッシュメモリシステム（共有キャッシュ）１Ａは、複数のコア（処理部）２Ａ０〜２Ａ（Ｎ−１）を有するＣＰＵ２Ａと、メモリ３と、に接続されている。複数のコア２Ａ０〜２Ａ（Ｎ−１）は、キャッシュメモリシステム１Ａを共有キャッシュメモリとして用いる。
【０２２４】
本実施形態では、各コア２Ａ０〜２Ａ（Ｎ−１）には、予め固有のコア番号が設定されている。具体的には、コア２Ａ０にはコア番号「０」が設定され、コア２Ａ１にはコア番号「１」が設定され、コア２Ａ（Ｎ−１）にはコア番号「Ｎ−１」が設定されている。
【０２２５】
図１９Ａは、キャッシュメモリシステム１Ａを示したブロック図である。
【０２２６】
図１９Ａに示したキャッシュメモリシステム１Ａと図１Ａに示したキャッシュメモリシステム１との違いは、キャッシュ制御ユニットへの入力に、コア番号１９０５が追加されていることと、状態他ビット列の構成とその制御である。
【０２２７】
図１９Ｂは、制御部１９１６が有する機能を機能部として示したブロック図である。
【０２２８】
図１９Ｂにおいて、制御部１９１６は、書込み部１９１６ａと、読出し部１９１６ｂと、判断部１９１６ｃと、データ転送部１９１６ｄとを含む。
【０２２９】
図２０は、状態他ビット列１９０７の一例を示した説明図である。なお、図２０は、コア数を４個とした場合の状態他のビット列１９０７の構成を示している。
【０２３０】
以下、第２の実施の形態では、４コアが１つの共有キャッシュメモリに接続された場合（図１８でＮ＝４）を説明するが、本実施形態は、コア数が４以外の場合でも同じように実施できる。
【０２３１】
状態他ビット列１９０７は、３３ビットで構成される。具体的には、状態他ビット列１９０７は、１ビットのＢＶ２００２と、３２ビットのW(1)〜Ｗ(8)２００３からなる。
【０２３２】
ＢＶ２００２は、ブロック全体が有効かどうかを示す。
【０２３３】
W(1)〜Ｗ(8)２００３は、各４ビットのビット列であり、データアレイ１９０３のブロックデータの各ワードのアドレス、すなわち各ワードに対応する。ブロックデータは、８ワードからなるので、W(1)は、ブロックデータ１９０８の１ワード目に対応し、W(2)は２ワード目、W(3)は３ワード目、W(4)は４ワード目、W(5)は５ワード目、W(6)は６ワード目、W(7)は７ワード目、W(8)は８ワード目に対応する。
【０２３４】
W(i)２００３の４ビットは、それぞれ４個のコアに対応しており、コア２Ａ０用のビット２００５、コア２Ａ１用のビット２００６、コア２Ａ２用のビット２００７、コア２Ａ３用のビット２００８から構成されている。
【０２３５】
W(i)≠0000のときは、i番目のワードにいずれかのコアからデータが書き込まれたことを示しており、ブロックデータ２００４のi番目のワードには有効なデータが格納されていることになる。一方、W(i)２００３が0000のときは、i番目のワードにはいずれのコアからもデータが書き込まれていないことを示す。
【０２３６】
ＢＶ２００２が１のときは、ブロック全体が有効であることを示す。すなわち、i番目のワードのW(i)２００３が0000、つまり、書き込まれていない場合であったとしても、i番目のワードにメモリ３から読み出されたデータが格納されて、i番目のワードに有効なデータが格納されていることを示す。
【０２３７】
ＢＶ２００２が０の場合には、i番目のワードのW(i)２００３が0000以外のところだけが有効で、W(i)２００３が0000のワードは無効であることを示す。
【０２３８】
図２１は、図２０に示したＢＶ２００２とW(i)２００３の値によるi番目のワードの有効／無効を示す説明図である。
【０２３９】
次に、図１９および図２０を参照しながら、第２の実施の形態の動作について詳細に説明する。
【０２４０】
図２２は、キャッシュ制御ユニット１９０５の動作を説明するためのフローチャートである。
【０２４１】
アドレスレジスタ１９０１が、キャッシュメモリにアクセスされたアドレスを格納すると、その後、そのアドレスの中位１０（ｎ）ビット１９０９のデータが、アドレスアレイ１９０２およびデータアレイ１９０３のオフセット１９１０として使用されて、アドレスアレイ１９０２のアドレスエントリ内の上位４８（ｍ）ビット１９０６のデータと状態他ビット列１９０７のデータが読み出され、データアレイ１９０３のデータエントリがアクセスされる。
【０２４２】
比較器１９０４は、読み出された上位４８（ｍ）ビット１９０６のデータと、アドレスレジスタ１９０１内の上位４８（ｍ）ビット１９１１のデータと、を比較して、アドレスレジスタ１９０１内のアドレスにて指定されたデータを含むブロックが、すでにキャッシュメモリにあるかどうかを判断する。
【０２４３】
キャッシュ制御ユニット１９０５は、比較器１９０４の比較結果１９１２と、状態他ビット列１９０７のデータと、命令１９１３と、コア番号１９１５と、を受け付ける。
【０２４４】
なお、命令１９１３およびコア番号１９１５は、ＣＰＵ２Ａ内のコア２Ａ０〜２Ａ３のうち、キャッシュメモリシステム１Ａにアクセス（書込み、または、読出し）するコアから提供される。また、キャッシュ制御ユニット１９０５は、下位６（ｋ）ビットのデータも受け付ける。また、キャッシュ制御ユニット１９０５は、アクセスが書き込みの場合、書込みを行うコアから、ストア命令に示された書き込み用データも受け付ける。
【０２４５】
キャッシュ制御ユニット１９０５は、命令１９１３が、ストア命令か、ロード命令か、ロードアンドインバリデート命令かを判断する（ステップ２２０１）。
【０２４６】
まず、命令１９１３がストア命令の場合（ステップ２２０２）、キャッシュ制御ユニット１９０５は、ステップ２２０３を実行する。
【０２４７】
ステップ２２０３では、キャッシュ制御ユニット１９０５は、比較器１９０４の比較結果１９１２に基づいて、アクセスされたブロックを格納したエントリが、すでにキャッシュメモリ（アドレスアレイ１９０２とデータアレイ１９０３）にあるかどうかを判断する。
【０２４８】
比較結果１９１２が一致を示す場合、キャッシュ制御ユニット１９０５は、アクセスされたブロックはキャッシュメモリにあると判断する（ステップ２２０４）。
【０２４９】
一方、比較結果１９１２が一致を示さない場合は、キャッシュ制御ユニット１９０５は、アクセスされたブロックがキャッシュメモリにないと判断する（ステップ２２０５）。
【０２５０】
アクセスされたブロックがキャッシュメモリにあった場合は（ステップ２２０４）、キャッシュ制御ユニット１９０５は、下位６（ｋ）ビットのデータに基づいて、そのブロックのデータ１９０８内のワードを特定し、そのワードに対して、書き込み用データを書き込み（ステップ２２０６）、データが書き込まれたワードに対応するW(i)２００３の値を更新する（ステップ２２０７）。
【０２５１】
なお、書き込んだワードのW(i)２００３の更新（ステップ２２０７）については、後で、図２４を使って詳しく説明する。
【０２５２】
アクセスされたブロックがキャッシュメモリにない場合は（ステップ２２０５）、キャッシュ制御ユニット１９０５は、新しいブロックを、書込み用ブロックとして割り当てる処理を行う（ステップ２２０８）。
【０２５３】
新しいブロックを割り当てる処理（ステップ２２０８）については、後に図２３を使って詳しく述べる。
【０２５４】
ステップ２２０８の後、キャッシュ制御ユニット１９０５は、新しく割り当てたブロックに対応するアドレスアレイ１９０２のエントリの上位４８（ｍ）ビット１９０６に、アドレスレジスタ１９０１の上位４８（ｍ）ビット１９１１のデータを書き込み、同じく対応するアドレスアレイ１９０２のエントリの状態他のビット列１９０７をゼロクリア（BV＝0、W(1〜8)＝0000）して、初期化する（ステップ２２０９）。
【０２５５】
ステップ２２０９の後、キャッシュ制御ユニット１９０５は、下位６（ｋ）ビットのデータに基づき、新しく割り当てたブロック内のワードを特定し、そのワードに対して、書き込みデータを書き込み（ステップ２２０６）、データが書き込まれたワードに対応するW(i)２００３の値を更新する（ステップ２２０７）。
【０２５６】
書き込んだワードのW(i)２００３の更新（ステップ２２０７）については、後で、図２４を使って詳しく説明する。
【０２５７】
次に、命令１９１３がロード命令、または、ロードアンドインバリデート命令の場合（ステップ２２１０）、キャッシュ制御ユニット１９０５は、ステップ２２１１を実行する。
【０２５８】
ステップ２２１１では、キャッシュ制御ユニット１９０５は、比較器１９０４の比較結果１９１２に基づいて、アクセスされたブロックを格納しているエントリが、すでにキャッシュメモリにあるかどうかを判断する。
【０２５９】
比較結果１９１２が一致を示す場合、キャッシュ制御ユニット１９０５は、アクセスされたブロックはキャッシュメモリにあると判断する（ステップ２２１２）。
【０２６０】
一方、比較結果１９１２が一致を示さない場合、キャッシュ制御ユニット１９０５は、アクセスされたブロックがキャッシュメモリにないと判断する（ステップ２２１３）。
【０２６１】
アクセスされたブロックがキャッシュメモリにあり（ステップ２２１２）、かつ、アクセスされたワードに対応するW(i)の値が0000以外またはアクセスされたブロックのＢＶ２００２が１の場合（ステップ２２２０）、キャッシュ制御ユニット１９０５は、データアレイ１９０３のアクセスされたブロックデータ１９０８内の下位６（ｋ）ビットで特定されるワードからデータを読み出す（ステップ２２１４）。
【０２６２】
その後、キャッシュ制御ユニット１９０５は、命令１９１３がロードアンドインバリデート命令で、かつ、読み出したワードに対応したW(i)２００３が００００以外の場合（ステップ２２２１）には、読み出したワードに対応したW(i)２００３を更新し（ステップ２２２２）、BV＝０とする（ステップ２２２４）。
【０２６３】
読み出したワードのW(i)２００３の更新（ステップ２２２２）については、後で、図２５を使って詳しく説明する。
【０２６４】
命令１９１３がロードアンドインバリデート命令でない、または、読み出したワードに対応したW(i)２００３が００００の場合（ステップ２２２３）は、キャッシュ制御ユニット１９０５は、何もしない。
【０２６５】
一方、アクセスされたブロックがキャッシュメモリにあり（ステップ２２１２）、かつ、アクセスされたワードに対応するW(i)の値が0000でかつアクセスされたブロックのＢＶ２００２が０の場合（ステップ２２１５）、キャッシュ制御ユニット１９０５は、メモリ３から、そのブロックのデータを読み出し、データアレイ１９０３のそのエントリのブロックデータ１９０８中のW(i)＝0000のワードだけに、読み出したデータを書き込む（ステップ２２１６）。
【０２６６】
続いて、キャッシュ制御ユニット１９０５は、そのブロックに対応するアドレスアレイ１９０２のエントリ内のＢＶ２００２を１にする（ステップ２２１７）。
【０２６７】
続いて、キャッシュ制御ユニット１９０５は、データアレイ１９０３から、アクセスされたワードを読み出す（ステップ２２１４）。
【０２６８】
その後、キャッシュ制御ユニット１９０５は、命令１９１３がロードアンドインバリデート命令で、かつ、読み出したワードに対応したW(i)２００３が００００以外の場合には（ステップ２２２１）、読み出したワードに対応するW(i)２００３を更新し（ステップ２２２２）、BVを０にする（ステップ２２２４）。
【０２６９】
読み出したワードのW(i)２００３の更新（ステップ２２２２）については、後で、図２５を使って詳しく説明する。
【０２７０】
命令１９１３がロードアンドインバリデート命令でない、または、読み出したワードに対応したW(i)２００３が００００の場合は（ステップ２２２３）、キャッシュ制御ユニット１９０５は、何もしない。
【０２７１】
この場合、ステップ２２１５でアクセスされたワードに対応するW（i）が００００なので、ステップ２２２３が選択され、キャッシュ制御ユニット１９０５は、何もしない。
【０２７２】
一方、アクセスされたブロックがキャッシュメモリにない場合（ステップ２２１３）、キャッシュ制御ユニット１９０５は、新しいブロックを割り当てる処理を行う（ステップ２２１８）。
【０２７３】
新しいブロックを割り当てる処理（ステップ２２１８）については、後に図２３を使って詳しく述べる。
【０２７４】
続いて、キャッシュ制御ユニット１９０５は、新しく割り当てたブロックに対応するアドレスアレイ１９０２のエントリの上位４８（ｍ）ビット１９０６にアドレスレジスタ１９０１の上位４８（ｍ）ビット１９１１のデータを書き込み、同じくアドレスアレイ１９０２のエントリの状態他のビット列１９０７をゼロクリア（BV＝0、W(1〜8)＝0000）して、初期化する（ステップ２２１９）。
【０２７５】
続いて、キャッシュ制御ユニット１９０５は、メモリ３から、そのブロックのデータを読み出し、そのブロックに対応するデータアレイ１９０３のエントリのブロックデータ１９０８中のW(i)＝0000のワードだけに、読み出したデータを書き込む（ステップ２２１６）。
【０２７６】
この場合、ステップ２２１９で状態他のビット列１９０７をゼロクリアしているので、ブロックデータ１９０８全体が書かれる。
【０２７７】
続いて、キャッシュ制御ユニット１９０５は、アドレスアレイ１９０２の対応するエントリ内のＢＶ２００２を１にする（ステップ２２１７）。
【０２７８】
続いて、キャッシュ制御ユニット１９０５は、データアレイ１９０３から、アクセスされたワードを読み出す（ステップ２２１４）。
【０２７９】
その後、キャッシュ制御ユニット１９０５は、命令１９１３がロードアンドインバリデート命令で、かつ、読み出したワードに対応したW(i)２００３が００００以外の場合（ステップ２２２１）には、読み出したワードに対応するW(i)２００３を更新し（ステップ２２２２）、BV＝０とする（ステップ２２２４）。
【０２８０】
読み出したワードのW(i)２００３の更新（ステップ２２２２）については、後で、図２５を使って詳しく説明する。
【０２８１】
命令１９１３がロードアンドインバリデート命令でない、または、読み出したワードに対応したW(i)２００３が００００の場合（ステップ２２２３）は、キャッシュ制御ユニット１９０５は、何もしない。
【０２８２】
この場合、ステップ２２１９ですべてのW(i)を００００にしているので、ステップ２２２３が選択され、キャッシュ制御ユニット１９０５は、何もしない。
【０２８３】
次に、図２３を使って、図２２に示したステップ２２０８および２２１８について説明する。
【０２８４】
まず、キャッシュ制御ユニット１９０５は、新しいエントリを割り当てるために、置き換えられるエントリ（ブロック）を選択する（ステップ２３０１）。
【０２８５】
本実施形態では、ダイレクトマップ方式のキャッシュメモリが用いられている。このため、新しいブロックを割り当てるためにデータが置き換えられるエントリは、アクセスされたアドレスから一意に決まる。
【０２８６】
もしも、セットアソシアティブ方式のキャッシュメモリが用いられた場合には、アドレスから決定される置き換え対象になるエントリは複数あり、その中のどれを置き換えるかはアクセス履歴等により決定することが可能である。
【０２８７】
次に、キャッシュ制御ユニット１９０５は、選択された、データが置き換えられるエントリのブロックに、いずれかのコアからデータが書き込まれているかどうかを判断する。
【０２８８】
もし、選択されたエントリのすべてのワードのW(i)２００３が0000ならば（ステップ２３０２）、そのブロックには、どのコアからもデータが書き込まれていなかったことになる。この場合、キャッシュ制御ユニット１９０５は、ライトバックすることなく、そのまま、そのエントリを使うことができる。
【０２８９】
もし、選択されたエントリのすべてのワードのW(i)２００３が0000以外、または、ＢＶ２００２＝１の場合には（ステップ２３０３）、そのブロック全体が書き換えられた、または、ブロック全体が有効であることになる。
【０２９０】
この場合、キャッシュ制御ユニット１９０５は、そのブロックのデータをメモリ３にライトバックする（ステップ２３０４）。
【０２９１】
もし、選択されたエントリの一部のワードのW(i)２００３が0000以外で、かつ、ＢＶ２００２＝０の場合には（ステップ２３０５）、W(i)２００３が0000以外であるワードだけが書き変えられたことになる。
【０２９２】
この場合、キャッシュ制御ユニット１９０５は、W(i)２００３が0000以外のワードのデータだけを、メモリ３にライトバックする（ステップ２３０６）。なお、W(i)２００３が0のワードのデータは、メモリ３に書き込まない。
【０２９３】
なお、比較器１９０４とキャッシュ制御ユニット１９０５が行うデータの書込みに関する動作は、書込み部１９１６ａによって行われる。
【０２９４】
比較器１９０４とキャッシュ制御ユニット１９０５が行うデータの読出しに関する動作は、読出し部１９１６ｂによって行われる。
【０２９５】
比較器１９０４とキャッシュ制御ユニット１９０５が行うキャッシュヒットかキャッシュミスかの判断に関する動作は、判断部１９１６ｃによって行われる。
【０２９６】
比較器１９０４とキャッシュ制御ユニット１９０５が行うデータアレイ１９０３とメモリ３との間のデータ転送に関する動作はデータ転送部１９１６ｄによって行われる。
【０２９７】
次に、図２４を使って、図２２に示したステップ２２０７について説明する。
【０２９８】
まず、キャッシュ制御ユニット１９０５は、書き込みを行ったコアをコア番号１９１５に基づいて特定する（ステップ２４０９〜２４１１）。なお、コア番号１９１５は、コアがストア命令を出力する際、そのコアから提供される。
【０２９９】
続いて、キャッシュ制御ユニット１９０５は、書き込みを行ったコア用のW(i)２００３のビット値を０に、それ以外のコア用のビットの値を１に設定する（ステップ２４０２、２４０４、２４０６、２４０８）。
【０３００】
以下、図２４のフローチャートをたどって説明する。
【０３０１】
キャッシュ制御ユニット１９０５は、コア番号が０の場合（ステップ２４０１）、W(i)を0111に設定する（ステップ２４０２）。
【０３０２】
キャッシュ制御ユニット１９０５は、コア番号が１の場合（ステップ２４０３）、W(i)を1011に設定する（ステップ２４０４）。
【０３０３】
キャッシュ制御ユニット１９０５は、コア番号が２の場合（ステップ２４０５）、W(i)を1101に設定する（ステップ２４０６）。
【０３０４】
キャッシュ制御ユニット１９０５は、コア番号が３の場合（ステップ２４０７）、W(i)を1110に設定する（ステップ２４０８）。
【０３０５】
W(i)２００３では、４ビットのうちの０の位置が、書き込みを行ったコアを示すことになる。
【０３０６】
次に、図２５を使って、図２２に示したステップ２２２２について説明する。
【０３０７】
図２５でW(i)のビットで使われている、“*”はdon't careを示す。また、“$”は前の値と同じ値を示す。
【０３０８】
まず、キャッシュ制御ユニット１９０５は、ロードアンドインバリデート命令を実行したコアをコア番号１９１５に基づいて特定する（ステップ２５０１〜２５０３）。なお、コア番号は、コアがロードアンドインバリデート命令を出力する際、そのコアから提供される。
【０３０９】
その後、キャッシュ制御ユニット１９０５は、読み出されたワードに対応するW(i)２００３のうち、ロードアンドインバリデート命令を実行したコアに対応するビットが０か１かを調べる（ステップ２５０４〜２５０７）。
【０３１０】
調べた結果が０の場合は（ステップ２５０８〜２５１１)、そのワードを書き込んだコアと同じコアがロードアンドインバリデート命令を実行したことを示し、キャッシュ制御ユニット１９０５は、読み出されたワードに対応するW(i)２００３を0000にする（ステップ２５１２〜２５１５）。
【０３１１】
調べた結果が１の場合は（ステップ２５１６〜２５１９）、そのワードはロードアンドインバリデート命令を実行したコアとは別のコアから書き込まれたことを示し、キャッシュ制御ユニット１９０５は、読み出されたワードに対応するW(i)２００３のうち、ロードアンドインバリデート命令を実行したコアに対応するビットを０にする（ステップ２５２０〜２５２３）。
【０３１２】
以下、図２５のフローチャートをたどって説明する。
【０３１３】
キャッシュ制御ユニット１９０５は、コア番号が０の場合（ステップ２５２４）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号０に対応するビットが０なら（ステップ２５０８）、そのW(i)２００３を0000にする（ステップ２５１２）。
【０３１４】
キャッシュ制御ユニット１９０５は、コア番号が０の場合（ステップ２５２４）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号０に対応するビットが１なら（ステップ２５１６）、そのW(i) ２００３のビットのうち、コア番号０に対応するビットだけを０にする（ステップ２５２０）。
【０３１５】
キャッシュ制御ユニット１９０５は、コア番号が１の場合（ステップ２５２５）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号１に対応するビットが０なら（ステップ２５０９）、そのW(i)２００３を0000にする（ステップ２５１３）。
【０３１６】
キャッシュ制御ユニット１９０５は、コア番号が１の場合（ステップ２５２５）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号１に対応するビットが１なら（ステップ２５１７）、そのW(i)２００３のビットのうち、コア番号１に対応するビットだけを０にする（ステップ２５２１）。
【０３１７】
キャッシュ制御ユニット１９０５は、コア番号が２の場合（ステップ２５２６）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号２に対応するビットが０なら（ステップ２５１０）、そのW(i)２００３を0000にする（ステップ２５１４）。
【０３１８】
キャッシュ制御ユニット１９０５は、コア番号が２の場合（ステップ２５２６）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号２に対応するビットが１なら（ステップ２５１８）、そのW(i)２００３のビットのうち、コア番号２に対応するビットだけを０にする（ステップ２５２２）。
【０３１９】
キャッシュ制御ユニット１９０５は、コア番号が３の場合（ステップ２５２７）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号３に対応するビットが０なら（ステップ２５１１）、そのW(i)２００３を0000にする（ステップ２５１５）。
【０３２０】
キャッシュ制御ユニット１９０５は、コア番号が３の場合（ステップ２５２７）、読み出されたワードに対応するW(i)２００３のビットのうち、コア番号３に対応するビットが１なら（ステップ２５１９）、そのW(i)２００３のビットのうち、コア番号３に対応するビットだけを０にする（ステップ２５２３）。
【０３２１】
レジスタスピルのように、あるコア内のレジスタから、一時的なデータが、キャッシュメモリシステム１Ａに退避され、その後、同じコアから一時的なデータが読み出されてレジスタに復帰される場合には、ロードアンドインバリデート命令の実行により、W(i)は0000になる。
【０３２２】
一方、コア間通信のように、あるコアがデータをキャッシュメモリシステム１Ａに書き込み、その他のコアが、そのデータをキャッシュメモリシステム１Ａから読み出す場合には、ロードアンドインバリデート命令の実行により、W(i)の各コア用のビットの１が０に書き換えられる。データを書き込んだコア以外のすべてのコアからロードアンドインバリデート命令が実行されると、W(i)は0000になる。
【０３２３】
図２６Ａ〜２６Ｄは、第２の実施の形態において、４コア２Ａ０〜２Ａ３を有するＣＰＵ２Ａが、レジスタスピルによるキャッシュメモリ１Ａへの書き込みと、回復時のキャッシュメモリ１Ａからの読み出しを行う場合の動作を説明するための説明図である。図２６Ａ〜２６Ｄにおいて、図１８に示したものと同一のものには同一符号を付してある。
【０３２４】
図２６Ａは、初期状態を示した説明図である。コア２Ａ２は、レジスタ２Ａ２ａを有する。
【０３２５】
図２６Ｂは、コア２Ａ２でレジスタスピルが発生し、レジスタ２Ａ２ａからデータを退避するため、ストア命令が実行されたときの動作を示した説明図である。
【０３２６】
このとき、共有キャッシュメモリ１Ａで、書き込み時にキャッシュミスが発生し、ストア命令にて示されたワードに対応するブロック１Ａａが共有キャッシュメモリ１Ａに割り当てられる。書き込まれたワードのデータが、ブロック１Ａａの４ワード目に書き込まれる。続いて、ブロック１ＡａのW(4)が1101に設定される。
【０３２７】
図２６Ｃは、レジスタ復帰の動作を示した説明図である。
【０３２８】
レジスタの復帰のために、共有キャッシュメモリ１Ａ上のデータ２６０１が、コア２Ａ２のレジスタ２Ａ２ａに、ロードアンドインバリデート命令にしたがって読み出される。その後、ブロック１ＡａのW(4)が0000に変更される。
【０３２９】
図２６Ｄは、共有キャッシュメモリ１Ａ上のブロック１Ａａが置き換えられたときの動作を示した説明図である。
【０３３０】
ブロック１ＡａではW＝00000000なので、メモリ３へのブロック１Ａａのデータのライトバックは発生しない。
【０３３１】
このように第２の実施の形態でも、図２８で説明した不必要なメモリアクセスが発生しない。
【０３３２】
図２７Ａ〜２７Ｆは、第２の実施の形態でのキャッシュメモリを使ったコア間の通信の例を説明するための説明図である。図２７Ａ〜２７Ｆにおいて、図２６Ａ〜２６Ｄに示した同一のものには同一符号を付してある。
【０３３３】
図２７Ａは、初期状態を示した説明図である。
【０３３４】
図２７Ｂは、コア２Ａ０が、他のコアに提供するデータ２７０１を、共有キャッシュメモリ１Ａにストア（書込み）する動作を示した説明図である。
【０３３５】
コア２Ａ０がストア命令を実行した際に、共有キャッシュメモリ１Ａで、書き込み時にキャッシュミスが発生し、ストア命令にて示されたワードに対応するブロック１Ａｂが共有キャッシュメモリ１Ａに割り当てられる。書き込まれたワードのデータ２７０１が、ブロック１Ａｂの２ワード目に書き込まれる。続いて、ブロック１ＡｂのW(2)が0111に設定される。
【０３３６】
図２７Ｃは、コア２Ａ２が、ロードアンドインバリデート命令を用いて、データ２７０１を読み出す動作を示した説明図である。
【０３３７】
コア２Ａ２は、ロードアンドインバリデート命令を出して、共有キャッシュメモリ１Ａ上のブロック１Ａｂのデータ２７０１を読み出す。続いて、ブロック１ＡｂのW(2)が0101になる。
【０３３８】
図２７Ｄは、続いて、コア２Ａ３が、ロードアンドインバリデート命令を用いて、データ２７０１を読み出す動作を示した説明図である。
【０３３９】
コア２Ａ３は、ロードアンドインバリデート命令を出して、共有キャッシュメモリ１Ａ上のブロック１Ａｂのデータ２７０１を読み出す。続いて、ブロック１ＡｂのW(2)が0100になる。
【０３４０】
図２７Ｅは、続いて、コア２Ａ１が、ロードアンドインバリデート命令を用いて、データ２７０１を読み出す動作を示した説明図である。
【０３４１】
コア２Ａ１は、ロードアンドインバリデート命令を出して、共有キャッシュメモリ１Ａ上のブロック１Ａｂのデータ２７０１を読み出す。続いて、ブロック１ＡｂのW(2)が0000になる。
【０３４２】
図２７Ｆは、共有キャッシュメモリ１Ａ上のブロック１Ａｂが置き換えられたときの動作を示した説明図である。
【０３４３】
ブロック１Ａｂでは、W(2)が0000なので、メモリ３へのブロック１Ａｂのデータのライトバックは発生しない。
【０３４４】
本実施形態によれば、第１の実施形態と同様の効果を奏する。
【０３４５】
また、本実施形態では、制御部１９１６（書込み部１９１６ａ）は、ＣＰＵ２Ａが複数のコアを有する場合には、複数のコアのいずれかからの書込み時に、そのプロセッサコアからのアドレスが、アドレスアレイ１９０２（中位ｎビット１９０９に対応するオフセットごとに上位ｍビット１９０６を格納する部分）内にない場合、データアレイ１９０３内の複数のブロックのいずれかを書込み用ブロックとして割り当てる。そして、制御部１９１６（書込み部１９１６ａ）は、その書込み用ブロック内のいずれかのワードに、そのコアからのデータを書き込む。
【０３４６】
ワード情報W(i)は、さらに、そのワード情報に示されたワードに書き込まれたデータを提供したコアを示す。
【０３４７】
この場合、ワード情報を用いて、データを提供したコアを確認することが可能になる。
【０３４８】
また、本実施形態では、ワード情報は、さらに、複数のコアのうち、そのワード情報に示されたワードに書き込まれたデータの送信先となるコアを示す。
【０３４９】
この場合、ワード情報を用いて、データの送信先を示すことが可能になる。
【０３５０】
また、本実施形態では、制御部１９１６（読出し部１９１６ｂ）は、送信先となるコアの全てが、ワード情報に示されたワードからデータを読み出した場合、そのワード情報を消去する。
【０３５１】
この場合、データ送信の終了に伴い不要になったワード情報を削除することが可能になる。
【０３５２】
以上説明した各実施形態において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
（産業上の利用可能性）
本実施形態によれば、単一コアの計算機のキャッシュメモリのほか、マルチコア型のＣＰＵのキャッシュメモリといった用途に適用できる。
【図面の簡単な説明】
【０３５３】
【図１Ａ】本発明の第１の実施の形態のキャッシュメモリの構成を示す図である。
【図１Ｂ】制御部１１５の機能ブロックを示したブロック図である。
【図２】キャッシュメモリの状態他のビット列を示す図である。
【図３】キャッシュメモリの状態他のビット列とブロックデータの有効／無効との関係を示す図である。
【図４】キャッシュメモリの動作を表すフローチャートである。
【図５】キャッシュメモリの新しいブロックを割り当てる場合の動作を表すフローチャートである。
【図６】キャッシュメモリのキャッシュからメモリに送るコマンドと、それに対するメモリからキャッシュへのリプライと、その機能について説明している図である。
【図７】キャッシュメモリのストア命令時のキャッシュミスの動作を説明している図である。
【図８】キャッシュメモリのストア命令時のキャッシュヒットの動作を説明している図である。
【図９】キャッシュメモリのロード命令時のキャッシュヒットの動作を説明している図である。
【図１０】キャッシュメモリのロード命令時のキャッシュミスの動作を説明している図である。
【図１１】キャッシュメモリのロード命令時のキャッシュミスの動作を説明している図である。
【図１２】キャッシュメモリのエントリの置き換え時の動作を説明している図である。
【図１３】キャッシュメモリのロード命令時時のキャッシュミスの動作を説明している図である。
【図１４】キャッシュメモリのエントリの置き換え時の動作を説明している図である。
【図１５】キャッシュメモリのエントリの置き換え時の動作を説明している図である。
【図１６】キャッシュメモリのロードアンドインバリデート命令時の動作を説明している図である。
【図１７Ａ】レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【図１７Ｂ】レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【図１７Ｃ】レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【図１７Ｄ】レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【図１７Ｅ】レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【図１７Ｆ】レジスタスピルに応じたキャッシュメモリへの書き込みと、回復時のキャッシュメモリからの読み出しの動作を説明するための説明図である。
【図１８】本発明の第２の実施の形態のキャッシュメモリシステムが適用される計算システムを示したブロック図である。
【図１９Ａ】キャッシュメモリシステム１Ａを示したブロック図である。
【図１９Ｂ】制御部１９１６が有する機能を機能部として示したブロック図である。
【図２０】状態他ビット列１９０７の一例を示した説明図である。
【図２１】図２０に示したＢＶ２００２とW(i)２００３の値によるi番目のワードの有効／無効を示す説明図である。
【図２２】キャッシュ制御ユニット１９０５の動作を説明するためのフローチャートである。
【図２３】図２２に示したステップ２２０８および２２１８を説明するためのフローチャートである。
【図２４】図２２に示したステップ２２０７を説明するためのフローチャートである。
【図２５】図２２に示したステップ２２２２を説明するためのフローチャートである。
【図２６Ａ】本発明の第２の実施の形態でのレジスタスピルの処理を説明している図である。
【図２６Ｂ】本発明の第２の実施の形態でのレジスタスピルの処理を説明している図である。
【図２６Ｃ】本発明の第２の実施の形態でのレジスタスピルの処理を説明している図である。
【図２６Ｄ】本発明の第２の実施の形態でのレジスタスピルの処理を説明している図である。
【図２７Ａ】本発明の第２の実施の形態でのコア間通信の処理を説明している図である。
【図２７Ｂ】本発明の第２の実施の形態でのコア間通信の処理を説明している図である。
【図２７Ｃ】本発明の第２の実施の形態でのコア間通信の処理を説明している図である。
【図２７Ｄ】本発明の第２の実施の形態でのコア間通信の処理を説明している図である。
【図２７Ｅ】本発明の第２の実施の形態でのコア間通信の処理を説明している図である。
【図２７Ｆ】本発明の第２の実施の形態でのコア間通信の処理を説明している図である。
【図２８Ａ】ライトバック型キャッシュメモリでのレジスタスピルの処理で発生する課題を説明するための説明図である。
【図２８Ｂ】ライトバック型キャッシュメモリでのレジスタスピルの処理で発生する課題を説明するための説明図である。
【図２８Ｃ】ライトバック型キャッシュメモリでのレジスタスピルの処理で発生する課題を説明するための説明図である。
【図２８Ｄ】ライトバック型キャッシュメモリでのレジスタスピルの処理で発生する課題を説明するための説明図である。
【符号の説明】
【０３５４】
１、１Ａ    キャッシュメモリシステム
２、２Ａ    ＣＰＵ
３          メモリ
１０１、１９０１  アドレスレジスタ
１０２、１９０２  アドレスアレイ
１０３、１９０３  データアレイ
１０４、１９０４  比較器
１０５、１９０５  キャッシュ制御ユニット
１１５、１９１６  制御部
１１５ａ、１９１６ａ  書込み部
１１５ｂ、１９１６ｂ  読出し部
１１５ｃ、１９１６ｃ  判断部
１１５ｄ、１９１６ｄ  データ転送部
１０７ａ、１９０７ａ  ワード状態記憶部
１０７ｂ、１９０７ｂ  ブロック状態記憶部
【図１Ａ】
2009157608.tif 000003
【図１Ｂ】
2009157608.tif 000004
【図２】
2009157608.tif 000005
【図３】
2009157608.tif 000006
【図４】
2009157608.tif 000007
【図５】
2009157608.tif 000008
【図６】
2009157608.tif 000009
【図７】
2009157608.tif 000010
【図８】
2009157608.tif 000011
【図９】
2009157608.tif 000012
【図１０】
2009157608.tif 000013
【図１１】
2009157608.tif 000014
【図１２】
2009157608.tif 000015
【図１３】
2009157608.tif 000016
【図１４】
2009157608.tif 000017
【図１５】
2009157608.tif 000018
【図１６】
2009157608.tif 000019
【図１７Ａ】
2009157608.tif 000020
【図１７Ｂ】
2009157608.tif 000021
【図１７Ｃ】
2009157608.tif 000022
【図１７Ｄ】
2009157608.tif 000023
【図１７Ｅ】
2009157608.tif 000024
【図１７Ｆ】
2009157608.tif 000025
【図１８】
2009157608.tif 000026
【図１９Ａ】
2009157608.tif 000027
【図１９Ｂ】
2009157608.tif 000028
【図２０】
2009157608.tif 000029
【図２１】
2009157608.tif 000030
【図２２】
2009157608.tif 000031
【図２３】
2009157608.tif 000032
【図２４】
2009157608.tif 000033
【図２５】
2009157608.tif 000034
【図２６Ａ】
2009157608.tif 000035
【図２６Ｂ】
2009157608.tif 000036
【図２６Ｃ】
2009157608.tif 000037
【図２６Ｄ】
2009157608.tif 000038
【図２７Ａ】
2009157608.tif 000039
【図２７Ｂ】
2009157608.tif 000040
【図２７Ｃ】
2009157608.tif 000041
【図２７Ｄ】
2009157608.tif 000042
【図２７Ｅ】
2009157608.tif 000043
【図２７Ｆ】
2009157608.tif 000044
【図２８Ａ】
2009157608.tif 000045
【図２８Ｂ】
2009157608.tif 000046
【図２８Ｃ】
2009157608.tif 000047
【図２８Ｄ】
2009157608.tif 000048