JP2009151457A - キャッシュメモリシステムおよびキャッシュメモリ制御方法 - Google Patents
キャッシュメモリシステムおよびキャッシュメモリ制御方法 Download PDFInfo
- Publication number
- JP2009151457A JP2009151457A JP2007327477A JP2007327477A JP2009151457A JP 2009151457 A JP2009151457 A JP 2009151457A JP 2007327477 A JP2007327477 A JP 2007327477A JP 2007327477 A JP2007327477 A JP 2007327477A JP 2009151457 A JP2009151457 A JP 2009151457A
- Authority
- JP
- Japan
- Prior art keywords
- block
- data
- word
- address
- cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】並列計算機での無駄なメモリアクセスを回避可能なキャッシュメモリシステムを提供する。
【解決手段】並列演算する複数の演算装置に個別に接続されるキャッシュメモリシステムは、複数のブロックを有するデータアレイ、少なくとも1つのワードにデータが格納されたブロックに対応する共有メモリのアドレス群を格納する格納手段、書込み時に演算装置からのアドレスが格納手段にないとブロックのいずれかを書込み用としその内のいずれかのワードをそのアドレスに対応づけそのワードに演算装置からのデータを書き込む書込み手段、演算装置からのデータが書き込まれたワードを特定するワード状態情報をそのワードに対応するアドレスと関連づけて記憶するワード状態記憶手段、ワード状態記憶手段を参照して書込み用ブロック内でデータが書き込まれたワード内のデータを共有メモリ内の対応するブロックにライトバックするデータ転送手段を含む。
【選択図】図1A
【解決手段】並列演算する複数の演算装置に個別に接続されるキャッシュメモリシステムは、複数のブロックを有するデータアレイ、少なくとも1つのワードにデータが格納されたブロックに対応する共有メモリのアドレス群を格納する格納手段、書込み時に演算装置からのアドレスが格納手段にないとブロックのいずれかを書込み用としその内のいずれかのワードをそのアドレスに対応づけそのワードに演算装置からのデータを書き込む書込み手段、演算装置からのデータが書き込まれたワードを特定するワード状態情報をそのワードに対応するアドレスと関連づけて記憶するワード状態記憶手段、ワード状態記憶手段を参照して書込み用ブロック内でデータが書き込まれたワード内のデータを共有メモリ内の対応するブロックにライトバックするデータ転送手段を含む。
【選択図】図1A
Description
本発明は、複数のCPU(Central Processing Unit)からアクセス可能な共有メモリを有する並列計算機システムにおけるキャッシュメモリシステムおよびキャッシュメモリ制御方法に関し、特に、複数のCPUで並列処理を行う場合にフォールスシェアリング(false sharing)による無駄なメモリアクセスを回避できるキャッシュメモリシステムおよびキャッシュメモリ制御方法に関する。
キャッシュメモリを用いたデータ処理技術が知られている。
特許文献1には、単一プロセッサシステムにおいて、キャッシュメモリ内のデータをブロック単位で主記憶部にライトバックするキャッシュ装置が記載されている。
特許文献2には、1つの共有メモリに複数のプロセッサが接続された並列計算機で使用されるキャッシュメモリ装置が記載されている。
図17は、特許文献2に記載された並列計算機を示したブロック図である。
図17において、並列計算機では、1つの共有メモリ1701に複数のCPU1702が接続されている。各CPU1702は、キャッシュメモリ1703を有する。各CPU1702は、キャッシュメモリ1703を用いて、共有メモリ1701内のデータをキャッシュすることができる。
このような構成の並列計算機では、1つのプログラムを複数のCPUが並列に処理することで、高い性能が達成される。
例えば、非特許文献1の図14には、3重のDOループの最も外側のDOループを複数のCPUで並列に処理する方法が開示されている。
非特許文献1には、内側の2つのDOループの部分をベクトル化することにより高速化を図ることが記載されている。なお、内側の2つのDOループの部分を、スカラプロセッサのSIMD(Single Instruction Multiple Data:単一命令多重データ)命令により高速化することも可能である。
非特許文献1に記載の例では、3次元配列BとCの積を3次元配列Aに格納する処理を示している。なお、最も外側のKによるDOループを複数のCPUが並列処理した場合、配列A(I,J,K)のそれぞれの要素には、配列の3つ目の添え字Kによって決まる1つのCPUからのみ、値が書き込まれる。
一方、非特許文献2の図7.10には、多次元の配列が1次元のメモリに格納される場合の各要素の配置について記載されている。
メモリでの配列の要素の配置は、プログラミング言語により異なる。FORTRAN(フォートラン)の場合には、同じ列の要素がメモリ上で連続する列優先配置が採用されている。FORTRAN以外の場合には、同じ行の要素がメモリ上で連続する行優先配置が採用されている。
ここで、図18に示すFORTRANのプログラムの外側のループを、8個のCPUが並列処理する場合を考える。
図17に記載の並列計算機では、各CPU1702が、キャッシュメモリ1703を用いて、共有メモリ1701内の内容をキャッシュする。このため、データアクセスが高速化し、高性能が達成される。
キャッシュメモリのブロックサイズを64バイトとすると、配列Aが64バイト境界から始まった場合のキャッシュメモリでの要素の配置は、図19に示すようになる。
FORTRANは列優先配置なので、配列Aの同じ列が連続する。よって、A(0,k)〜A(7,k)(k=0〜7)が、同じキャッシュブロック上のワードに配置される。
各CPUは、A(i,0)〜A(i,7)(i=0〜7)を個別に更新する。このため、1つのキャッシュブロックに、8個のCPUから1ワードずつデータが書き込まれることになる。
1つのキャッシュブロックに対して複数のCPUがそれぞれ異なるワードへデータの書き込みを行う場合には、非特許文献3に記載されたように、無効化型一貫性制御を行うキャッシュメモリでは、フォールスシェアリング(false sharing)と呼ばれる問題が起こり、メモリアクセス性能が低下することが知られている。
特許文献2には、フォールスシェアリング(false sharing)によるキャッシュヒット率の低下を回避する方法が開示されている。
この方法では、キャッシュブロックをサブブロックに分割して、サブブロックごとに有効ビットをつけておく。他のCPUが、あるサブブロックへデータの書き込みを行った場合には、データが書き込まれたサブブロックの無効化要求が出され、データが書き込まれたサブブロックだけが無効化され、ブロックのほかのサブブロックは有効としてキャッシュメモリに保持される。これにより、フォールスシェアリング(false sharing)によるキャッシュヒット率の低下が回避される。
「NEC技報」、第45巻 第2号、日本電気文化センター、1992年2月28日、pp.64 デイビッド・パターソン、ジョン・へネシー著「コンピュータ・アーキテクチャ―設計・実現・評価の定量的アプローチ―」日経BP出版センター、1992年12月25日、pp.364-365 John L. Hennessey、David A. Patterson「コンピュータ アーキテクチャ:ア クオンティテイティブ アプローチ」(Computer Architecture : A Quantitative Approach)、Morgan Kaufmann Publishers, Inc.、1996年、pp.669-670 特開平9−251424号公報
特開2000−267935号公報
「NEC技報」、第45巻 第2号、日本電気文化センター、1992年2月28日、pp.64 デイビッド・パターソン、ジョン・へネシー著「コンピュータ・アーキテクチャ―設計・実現・評価の定量的アプローチ―」日経BP出版センター、1992年12月25日、pp.364-365 John L. Hennessey、David A. Patterson「コンピュータ アーキテクチャ:ア クオンティテイティブ アプローチ」(Computer Architecture : A Quantitative Approach)、Morgan Kaufmann Publishers, Inc.、1996年、pp.669-670
特許文献2に記載の方法では、図18に示した例のように、8個のCPUがそれぞれキャッシュブロックの異なるサブブロックに書き込むような並列処理の場合には、次のような問題が発生する。
特許文献2に記載の方法は、ライトバック型のキャッシュメモリで行われるので、他のCPUが、あるブロックに書き込みを行う場合には、いったん、そのブロックがキャッシュメモリに読み込まれる。
したがって、特許文献2に記載の方法では、8個のCPUがそれぞれキャッシュブロックの異なるサブブロックに書き込むような並列処理の場合には、複雑なライトバック処理と、共有メモリからのブロック読み出しとを、各ブロックに対して、最初に書き込んだCPU以外の書き込み時に、7回行うことになる。
また、図18の配列Aのように、ループによりブロック全体が書き換わり、その結果をループ内ですぐに参照しない場合には、配列Aへの書き込みごとに一貫性を保つための無効化処理を行う必要はなく、一貫性制御はオーバヘッドとなる。
なお、図18に示した例のような場合は、ループが終わったときに、各CPUがキャッシュ上への書き込みをメモリにライトバックすればよい。
ここで、無効化型一貫性制御のライトバック型キャッシュメモリの問題点について説明する。
この問題点は、1つのキャッシュブロックに複数のCPUから書き込みが行われる場合に、新たな書き込みが行われるごとに、書き込んだCPU以外のCPUのキャッシュメモリの無効化と、ライトバック処理と、ブロックの読み出しとが行われることである。
特に、図18に示すような外側ループを複数のCPUで並列処理する場合には、一貫性制御によるライトバックとブロックの読み出しによるメモリアクセスが大きなオーバヘッドとなる。
図20A〜図20Hは、CPU2000〜2007が、同一ブロック2008内の各ワードA0〜A7に、順番に、データの書き込みを行うときの処理を示した説明図である。
ブロック2008は、共有メモリ2009に登録されている。CPU2000〜2007は、キャッシュメモリ2010〜2017を有する。各ワードA0〜A7には、データA(0,2)〜A(7,2)が書き込まれている。
図20Aは、ループに入る前の状態を示した説明図である。
まず、CPU2000は、ブロック2008内のワードA0(A(0,2))に、処理結果A(0,2)’を書き込むため、ブロック2008のデータA(0,2)〜A(7,2)を、共有メモリ2009から読み出してキャッシュメモリ2010に書き込む。続いて、CPU2000は、キャッシュメモリ2010上のブロック2008のワードA0に、処理結果A(0,2)’を書き込む(図20B参照)。
次に、CPU2001は、ブロック2008内のワードA1(A(1,2))に、処理結果A(1,2)’を書き込むため、無効化要求を出して、CPU2000のキャッシュメモリ2010からブロック2008のデータを共有メモリ2009にライトバックさせる(図20C参照)。
続いて、CPU2001は、共有メモリ2009からブロック2008のデータを読み出してキャッシュメモリ2011に書き込む。続いて、CPU2001は、キャッシュメモリ2011上のブロック2008のワードA1に、処理結果A(1,2)’を書き込む(図20D参照)。
次に、CPU2002は、ブロック2008内のワードA2(A(2,2))に、処理結果A(2,2)’を書き込むため、無効化要求を出して、CPU2001のキャッシュメモリ2011からブロック2008のデータを共有メモリ2009にライトバックさせる(図20E参照)。
続いて、CPU2002は、共有メモリ2009からブロック2008のデータを読み出してキャッシュメモリ2012に書き込む。続いて、CPU2002は、キャッシュメモリ2012上のブロック2008のワードA2に、処理結果A(2,2)’を書き込む(図20F参照)。
以下同様の処理を、CPU2003〜CPU2006が行い、最後に、CPU2007は、ブロック2008内のワードA7(A(7,2))に、処理結果A(7,2)’を書き込むため、無効化要求を出して、CPU2006のキャッシュメモリ2016からブロック2008のデータを共有メモリ2009にライトバックさせる(図20G参照)。
続いて、CPU2007は、共有メモリ2009からブロック2008のデータを読み出してキャッシュメモリ2017に書き込む。続いて、CPU2007は、キャッシュメモリ2017上のブロック2008のワードA7に、処理結果A(7,2)’を書き込む(図20H参照)。
このように、書き込みを行うごとに、書き込まれたブロックのライトバックとそのブロックのメモリからの読み出しが起こる。
このようなメモリアクセスは、更新された最新の値を参照できるよう一貫性制御のために行われるが、図18に示すようなループでは、ループ実行中は、更新された新しい値を参照することはない。
したがって、図18に示すようなループを並列処理する場合には、メモリアクセスを頻発させる一貫性制御は、性能低下を招くオーバヘッドとなる。
本発明の目的は、上述した課題を解決可能なキャッシュメモリシステムおよびキャッシュメモリ制御方法を提供することである。
本発明のキャッシュメモリシステムは、共有メモリにアクセスして並列演算を行う複数の演算装置のそれぞれに対して、個別に接続されるキャッシュメモリシステムであって、複数のワードからなる複数のブロックを有するデータアレイと、前記複数のブロックのうち、少なくとも1つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記共有メモリのアドレス群を格納する格納手段と、前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードを当該アドレスに対応づけ、当該ワードに当該演算装置からのデータを書き込む書込み手段と、前記演算装置からのデータが書き込まれたワードを特定するためのワード状態情報を、当該ワードに対応づけられたアドレスと関連づけて記憶するワード状態記憶手段と、キャッシュメモリ上の前記書き込み用ブロックが異なるブロックに置き換えられる時、前記ワード状態記憶手段を参照して、前記書込み用ブロック内で前記データが書き込まれた1つまたは複数のワードを特定し、当該特定された1つまたは複数のワード内のデータを、前記共有メモリ内の対応するブロックにライトバックするデータ転送手段と、を含む。
本発明のキャッシュメモリ制御方法は、共有メモリにアクセスして並列演算を行う複数の演算装置のそれぞれに対して個別に接続され、かつ、複数のワードからなる複数のブロックを有するデータアレイを含むキャッシュメモリシステムが行うキャッシュメモリ制御方法であって、前記複数のブロックのうち、少なくとも1つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記共有メモリのアドレス群を格納手段に格納する格納ステップと、前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードを当該アドレスに対応づけ、当該ワードに当該演算装置からのデータを書き込む書込みステップと、前記演算装置からのデータが書き込まれたワードを特定するためのワード状態情報を、当該ワードに対応づけられたアドレスと関連づけてワード状態記憶手段に記憶するワード状態記憶ステップと、キャッシュメモリ上の前記書き込み用ブロックが異なるブロックに置き換えられる時、前記ワード状態記憶手段を参照して、前記書込み用ブロック内で前記データが書き込まれた1つまたは複数のワードを特定し、当該特定された1つまたは複数のワード内のデータを、前記共有メモリ内の対応するブロックにライトバックするデータ転送ステップと、を含む。
本発明によれば、並列計算機においてフォールスシェアリングに起因する無駄なメモリアクセスを回避することが可能になる。
以下、本発明の実施形態について図面を参照して詳細に説明する。
図1Aは、本発明の第1の実施の形態のキャッシュメモリシステムを示したブロック図である。
図1Aにおいて、キャッシュメモリシステム1、4および6は、共有メモリ(以下、単に「メモリ」と称する。)3にアクセスして並列演算を行う複数のCPU2、5および7のそれぞれに対して、個別に接続される。なお、図1Aでは、キャッシュメモリシステムとCPUの数を3としたが、これらの数は3に限らず複数であればよい。
具体的には、キャッシュメモリシステム1は、CPU2およびメモリ3と接続される。キャッシュメモリシステム4は、CPU5およびメモリ3と接続される。キャッシュメモリシステム6は、CPU7およびメモリ3と接続される。なお、CPUは、一般的に演算装置と呼ぶことができる。
キャッシュメモリシステム1、4および6は、同一構成である。このため、以下では、キャッシュメモリシステム1、4および6のうち、キャッシュメモリシステム1についてのみ説明を行う。
キャッシュメモリシステム1は、アドレスレジスタ101、アドレスアレイ102、データアレイ103、比較器104、および、キャッシュ制御ユニット105を含む。比較部104とキャッシュ制御ユニット105は、制御部115に含まれる。
アドレスレジスタ101は、CPU2が要求したアドレスを格納する。アドレスレジスタ101に格納されるアドレスは、上位mビット111、中位nビット109、および、下位kビット114によって表される。
上位mビット111のデータは、比較器104に提供され、中位nビット109のデータは、アドレスアレイ102とデータアレイ103に提供される。
アドレスアレイ102は、2のn乗個のエントリ(以下「アドレスエントリ」と称する。)を持つメモリである。なお、データアレイ103も、2のn乗個のエントリ(以下「データエントリ」と称する。)を持つメモリである。データアレイ103は、複数のワードからなる複数のブロック(データエントリ)を有する。
各アドレスエントリは、中位nビット109のデータに基づいて、各データエントリと1対1で対応している。
各アドレスエントリは、中位nビット109のデータが表すことが可能な値に対応するオフセットを有する。このため、各アドレスエントリは、中位nビット109に対応する。なお、オフセットは、一般的にインデックスとも呼ばれる。
アドレスアレイ102は、データアレイ103のデータエントリにブロック単位で格納されているデータ(ブロックデータ)の索引として使用される。
アドレスアレイ102の1つのアドレスエントリは、中位nビット109に対応するオフセットごとに、アドレスの上位mビット106と、そのブロックの状態他を表すビット列(以下「状態他ビット列」とも称する。)107と、を含む。アドレスの上位mビット106は、ブロックデータのアドレス(ブロックアドレス)の一部である。
アドレスアレイ102のうち、中位nビット109に対応するオフセットごとに、上位mビット106を格納する部分は、格納手段の一例である。
格納手段は、少なくとも1つのワードにデータが格納されたデータエントリに対応する、メモリ3のアドレス群(上位mビットのデータと中位nビットのデータ)を格納する。
このアドレス群は、上位mビットと中位nビットのデータが規定され、かつ、下位kビットのデータが任意の値となる複数のアドレスを意味する。
アドレスアレイ102のうち、状態他ビット列107を格納する部分は、ワード状態記憶部107aと、ブロック状態記憶部107bと、を含む(図2参照)。
ワード状態記憶部107aは、一般的にワード状態記憶手段と呼ぶことができる。
ワード状態記憶部107aは、CPU2からのデータが書き込まれたワードを特定するためのワード状態情報(W(1)〜W(8))を、そのワードに対応づけられたアドレスと関連づけて記憶する。
ブロック状態記憶部107bは、一般的にブロック状態記憶手段と呼ぶことができる。
ブロック状態記憶部107bは、データアレイ103のブロックに対応するアドレス群ごとに、そのブロック内のCPU2から書き込まれていないワードにメモリ3から読み出されたデータが記憶されているか否かを示すブロック状態情報(BV)を記憶する。
なお、状態他ビット列107の詳細については後述する。
アドレスアレイ102は、中位nビット109のデータをオフセット110として受け付けると、オフセット110に対応するアドレスエントリから、上位mビット106のデータと、状態他ビット列107のデータと、を出力する。
上位mビット106のデータは、比較器104に提供され、状態他ビット列107のデータは、キャッシュ制御ユニット105に提供される。
データアレイ103の1つのデータエントリは、2のk乗バイトのブロックデータ(以下、単に「ブロック」とも称する。)108を格納する。
各データエントリは、各アドレスエントリと1対1で対応しているため、各データエントリ内のブロックも、各アドレスエントリと1対1で対応する。
比較器104は、アドレスアレイ102からの上位mビット106のデータと、アドレスレジスタ101からの上位mビット111のデータと、を比較する。
上位mビット106のデータと上位mビット111のデータが一致した場合は、アドレスレジスタ101内のアドレスにて指定されたデータを含むブロックが、キャッシュメモリ(具体的には、アドレスアレイ102とデータアレイ103)上にあることになる。
キャッシュ制御ユニット105は、比較器104からの比較結果112、アクセスが読み出しか書き込みかを示す情報113、および、アドレスアレイ102からの状態他ビット列107に基づいて、キャッシュメモリ(具体的には、アドレスアレイ102とデータアレイ103)を制御する。
制御部115は、一般的に制御手段と呼ぶことができる。
制御部115は、キャッシュメモリシステム1の動作を制御する。
図1Bは、制御部115が有する機能を機能部として示したブロック図である。
図1Bにおいて、制御部115は、書込み部115aと、読出し部115bと、判断部115cと、データ転送部115dとを含む。
書込み部115aは、一般的に書込み手段と呼ぶことができる。
書込み部115aは、CPU2からの書込み時に、CPU2からのアドレスが、アドレスアレイ102(具体的には、中位nビット109に対応するオフセットごとに上位mビット106を格納する部分)内にない場合、データアレイ103内の複数のブロックのいずれかを書込み用ブロックとして割り当てる。
書込み部115aは、CPU2からのアドレスに対応するブロックのデータをメモリ3から読み込まずに、その書込み用ブロック内のいずれかのワードを、CPU2からのアドレスに対応づけ、そのワードにCPU2からのデータを書き込む。
読出し部115bは、一般的に読出し手段と呼ぶことができる。
読出し部115bは、CPU2からの読み出し時に、CPU2からのアドレスに対応するワード状態情報(W(i)=1)をワード状態記憶部107aが記憶している場合、または、CPU2からのアドレスに対応するブロック状態情報(BV=1)をブロック状態記憶部107bが記憶している場合、そのアドレスから特定される、データアレイ103内のワードからデータを読み出す。
また、読出し部115bは、CPU2からの読み出し時にキャッシュミスが生じた時、CPU2からのアドレスに対応するブロック内のデータをメモリ3から読み出す。
読出し部115bは、続いて、ワード状態記憶部107aを参照して、データアレイ103のそのブロック内でCPU2からデータが書き込まれていない1つまたは複数のワードを特定する。
読出し部115bは、その特定された1つまたは複数のワードにだけ、メモリ3から読み出したブロックのデータを書き込む。
読出し部115bは、続いて、ブロック状態記憶部107bに、そのブロック内のCPU2から書き込まれていない1つまたは複数のワードに、メモリ3から読み出されたデータが記憶されていることを示すブロック状態情報(BV=1)を記憶する。
判断部115cは、一般的に判断手段と呼ぶことができる。
判断部115cは、CPU2からの読み出し時にCPU2からアドレスを受け付けた場合に、ワード状態記憶部107aおよびブロック状態記憶部107bを参照して、そのアドレスについてキャッシュヒットまたはキャッシュミスが生じたかを判断する。
データ転送部115dは、一般的にデータ転送手段と呼ぶことができる。
データ転送部115dは、データアレイ103内のブロック内の指定された1つまたは複数のワードのデータだけを、メモリ3内の対応するブロックに書き込む。
例えば、データ転送部115dは、データアレイ103内のブロックと対応するメモリ3のアドレスが切り替えられる時、ワード状態記憶部107aを参照して、そのブロック内のすべてのワードにCPU2からデータが書き込まれた場合には、そのブロック全体をメモリ3内の対応するブロックにライトバックする。そうでない場合には、そのブロック内でデータが書き込まれた1つまたは複数のワードを特定し、その特定された1つまたは複数のワード内のデータだけを、メモリ3内の対応するブロックにライトバックする。
なお、以下の説明では、アドレスレジスタ101に格納されるアドレスは、64ビットとし、k=6、すなわちブロックのサイズを64バイトとし、n=10、すなわちアドレスアレイ102のアドレスエントリ数、および、データアレイ103のデータエントリ数を1024とし、m=48とする。また、64バイトのブロックは、8個のワードからなる。なお、1ワードは8バイトである。
本実施の形態では、ダイレクトマップ方式のキャッシュメモリを示しているが、セットアソシアティブ方式のキャッシュメモリでも本実施の形態のキャッシュメモリを適用することができる。その場合は、ウェイ数分、アドレスアレイ102、データアレイ103、および、比較器104が必要である。
次に、図1Aおよび1Bに示したキャッシュメモリシステム1の動作を説明する。
キャッシュメモリシステム1へのアクセスがあった場合に、アドレスレジスタ101は、そのアドレスを格納する。なお、このアドレスは、論理アドレスでも物理アドレスでもよい。
本実施の形態では、このアドレスを、何らかのアドレス変換の手段により仮想アドレスから変換された物理アドレスとして説明を行う。
ブロックのサイズは64バイトなので、アドレスレジスタ101の下位6(k)ビット114のデータは、データアレイ103のブロック内のワードのアドレスとなる。
中位10(n)ビット109のデータが、アドレスアレイ102のオフセット110として使用されて、アドレスアレイ102のアドレスエントリ内のデータ(上位48(m)ビット106のデータと状態他ビット列107のデータ)が読み出される。
比較器104は、読み出された上位48(m)ビット106のデータと、アドレスレジスタ101内の上位48(m)ビット111のデータと、を比較して、アドレスレジスタ101内のアドレスにて指定されたデータを含むブロックが、すでにキャッシュメモリにあるかどうかを判断する。
キャッシュ制御ユニット105は、比較器104の比較結果112と、情報113と、状態他ビット列107とを受け付ける。
キャッシュ制御ユニット105は、比較結果112、情報113、および、ビット列107に基づいて、キャッシュメモリの動作を決定する。
キャッシュ制御ユニット105の動作の詳細ついては、後述する。
図2は、アドレスアレイ102に格納される状態他ビット列107の一例を示した説明図である。
状態他ビット列107は、9ビットで構成される。具体的には、状態他ビット列107は、1ビットのBV202と、8ビットのW(i)(i=1〜8)203とからなる。W(i)(i=1〜8)203は、1ビットのW(1)〜W(8)からなる。
W(1)〜W(8)203は、データアレイ103のブロックデータの各ワードのアドレス、すなわち各ワードに対応する。ブロックデータは、8ワードからなるので、W(1)は、ブロックデータ204の1ワード目に対応し、W(2)は2ワード目、W(3)は3ワード目、W(4)は4ワード目、W(5)は5ワード目、W(6)は6ワード目、W(7)は7ワード目、W(8)は8ワード目に対応する。
W(i)203の値が1のときは、i番目のワードにCPU2からデータが書き込まれたことを示す。つまり、W(i)203が1のときは、ブロックデータ204のi番目のワードには、CPU2から書き込まれた有効なデータが格納されていることになる。
W(i)203の値が0のときは、i番目のワードにCPU2からデータが書き込まれていないことを示す。
BV202は、BV202を含むアドレスエントリに対応する、データアレイ103内のブロック全体が有効かどうかを示す。
具体的には、BV202の値が1のときは、CPU2から書き込まれていないワード(W(i) 203が0)にメモリ3から読み出されたデータが格納されていることを示しており、対応するブロック全体が有効であることを意味する。すなわち、BV202の値が1のときは、i番目のワードの状態を示すW(i)203の値が0、つまり、W(i)203がi番目のワードにCPU2からデータが書き込まれていないことを示す場合であったとしても、i番目のワードにメモリ3から読み出されたデータが書き込まれたことによりi番目のワードに有効なデータが格納されていることを示す。
また、BV202の値が0の場合には、i番目のワードの状態を示すW(i)203の値が1であるワードのデータだけが有効で、W(i)203の値が0であるワードのデータは無効であることを示す。
図3は、図2に示したBV202とW(i)203の値によるi番目のワードの有効/無効を示す説明図である。
次に、図1A、図1Bおよび図2を参照しながら、第1の実施の形態の動作について詳細に説明する。
図4は、キャッシュ制御ユニット105の動作を説明するためのフローチャートである。
アドレスレジスタ101が、キャッシュメモリにアクセスされたアドレスを格納すると、その後、そのアドレスの中位10(n)ビット109のデータが、アドレスアレイ102およびデータアレイ103のオフセット110として使用されて、アドレスアレイ102のアドレスエントリ内の上位48(m)ビット106のデータと状態他ビット列107のデータが読み出され、データアレイ103のデータエントリがアクセスされる。
比較器104は、読み出された上位48(m)ビット106のデータと、アドレスレジスタ101内の上位48(m)ビット111のデータと、を比較して、アドレスレジスタ101内のアドレスにて指定されたデータを含むブロックが、すでにキャッシュメモリにあるかどうかを判断する。
キャッシュ制御ユニット105は、比較器104の比較結果112と、状態他ビット列107のデータと、アクセスが読み出しか書き込みかを示す情報113と、を受け付ける。
なお、情報113は、CPU2から提供される。また、キャッシュ制御ユニット105は、下位6(k)ビットのデータも受け付ける。また、キャッシュ制御ユニット105は、アクセスが書き込みの場合、CPU2から書き込み用データも受け付ける。
キャッシュ制御ユニット105は、情報113に基づいて、アクセスが書き込みなのか読み出しなのかを判断する(ステップ401)。
まず、アクセスが書き込みの場合(ステップ402)、キャッシュ制御ユニット105は、ステップ403を実行する。
ステップ403では、キャッシュ制御ユニット105は、比較器104の比較結果112に基づいて、アクセスされたブロックを格納しているエントリが、すでにキャッシュ(アドレスアレイ102とデータアレイ103)にあるかどうかを判断する。
比較結果112が一致を示す場合、キャッシュ制御ユニット105は、アクセスされたブロックはキャッシュにあると判断する(ステップ404)。
一方、比較結果112が一致を示さない場合は、キャッシュ制御ユニット105は、アクセスされたブロックがキャッシュにないと判断する(ステップ405)。
アクセスされたブロックがキャッシュにあった場合は(ステップ404)、キャッシュ制御ユニット105は、下位6(k)ビットのデータに基づいて、そのブロックのデータ108内のワードを特定し、そのワードに対して、書き込み用データを書き込み(ステップ406)、データが書き込まれたワードに対応するW(i) 203の値を1にする(ステップ407)。
アクセスされたブロックがキャッシュにない場合は(ステップ405)、キャッシュ制御ユニット105は、新しいブロックを割り当てる処理を行う(ステップ408)。
新しいブロックを割り当てる処理(ステップ408)については、後に、図5を使って詳しく述べる。
ステップ408の後、キャッシュ制御ユニット105は、新しく割り当てたデータアレイ103のブロックに対応するアドレスアレイ102のエントリの上位48(m)ビット106に、アドレスレジスタ101の上位48(m)ビット111のデータを書き込み、同じく対応するアドレスアレイ102のエントリの状態他のビット列107をゼロクリア(BV=0、W(1〜8)=0)して初期化する(ステップ409)。
ステップ409の後、キャッシュ制御ユニット105は、下位6(k)ビットのデータに基づいて、新しく割り当てたデータアレイ103のブロック内のワードを特定し、そのワードに対して、書き込み用データを書き込み(ステップ406)、データが書き込まれたワードに対応するW(i) 203の値を1にする(ステップ407)。
一方、アクセスが読み出しの場合(ステップ410)、キャッシュ制御ユニット105は、ステップ411を実行する。
ステップ411では、キャッシュ制御ユニット105は、比較器104の比較結果112に基づいて、アクセスされたブロックを格納しているエントリが、すでにキャッシュにあるかどうかを判断する。
比較結果112が一致を示す場合、キャッシュ制御ユニット105は、アクセスされたブロックはキャッシュにあると判断する(ステップ412)。
一方、比較結果112が一致を示さない場合は、キャッシュ制御ユニット105は、アクセスされたブロックがキャッシュにないと判断する(ステップ413)。
アクセスされたブロックがキャッシュにあり(ステップ412)、かつ、アクセスされたワードに対応するW(i)の値が1またはアクセスされたブロックのBVが1の場合(ステップ420)、キャッシュ制御ユニット105は、データアレイ103のアクセスされたブロックデータ108内のワードからデータを読み出す(ステップ414)。
一方、アクセスされたブロックがキャッシュにあり(ステップ412)、かつ、アクセスされたワードに対応するW(i)の値が0でかつアクセスされたブロックのBVが0の場合(ステップ415)、キャッシュ制御ユニット105は、メモリ3から、そのブロックのデータを読み出し、データアレイ103のそのエントリのブロックデータ108中のW(i)=0のワードだけに、読み出したデータを書き込む(ステップ416)。
続いて、キャッシュ制御ユニット105は、そのブロックに対応するアドレスアレイ102のエントリ内のBV202を1にする(ステップ417)。
続いて、キャッシュ制御ユニット105は、データアレイ103から、アクセスされたワードからデータを読み出す(ステップ414)。
アクセスされたブロックがキャッシュにない場合(ステップ413)、キャッシュ制御ユニット105は、新しいブロックを割り当てる処理を行う(ステップ418)。
新しいブロックを割り当てる処理(ステップ418)については、後に図5を使って詳しく述べる。
続いて、キャッシュ制御ユニット105は、新しく割り当てたブロックに対応するアドレスアレイ102のエントリの上位48(m)ビット106に、アドレスレジスタ101の上位48(m)ビット111のデータを書き込み、同じく対応するアドレスアレイ102のエントリの状態他のビット列107をゼロクリア(BV=0、W(1〜8)=0)して、初期化する(ステップ419)。
続いて、キャッシュ制御ユニット105は、メモリ3から、そのブロックのデータを読み出し、そのブロックに対応するデータアレイ103のエントリのブロックデータ108中のW(i)=0のワードだけに、読み出したデータを書き込む(ステップ416)。この場合、ステップ419で状態他のビット列107をゼロクリアしているので、ブロックデータ108全体が書かれる。
続いて、キャッシュ制御ユニット105は、アドレスアレイ102の対応するエントリ内のBV202を1にする(ステップ417)。
続いて、キャッシュ制御ユニット105は、データアレイ103から、アクセスされたワードを読み出す(ステップ414)。
次に、図5を参照して、図4に示したステップ408および418について説明する。
まず、キャッシュ制御ユニット105は、新しいエントリを割り当てるために、データが置き換えられるエントリを選択する(ステップ501)。
本実施形態では、ダイレクトマップ方式のキャッシュメモリが用いられている。このため、新しいブロックを割り当てるためにデータが置き換えられるエントリは、アクセスされたアドレスから一意に決まる。
もしも、セットアソシアティブ方式のキャッシュメモリが用いられた場合には、アドレスから決定される置き換え対象になるエントリは複数あり、その中のどれを置き換えるかはアクセス履歴等により決定することが可能である。
次に、キャッシュ制御ユニット105は、データが置き換えられるエントリのブロックに、CPU2からデータが書き込まれているかどうか判断する。
もし、選択されたエントリのすべてのワードのW(i)203が0ならば(ステップ502)、そのブロックには、CPU2からデータが書き込まれていなかったことになる。この場合、キャッシュ制御ユニット105は、ライトバックすることなく、そのまま、そのエントリを使うことができる。
もし、選択されたエントリのすべてのワードのW(i)203が1の場合(ステップ503)には、そのブロック全体が書き換えられたことになる。この場合、キャッシュ制御ユニット105は、そのブロック全体のデータをメモリ3にライトバックする(ステップ504)。
もし、選択されたエントリの一部のワードのW(i)203が1の場合(ステップ505)には、W(i)203が1のワードだけが書き換えられたことになる。この場合、キャッシュ制御ユニット105は、W(i)203が1のワードのデータだけを、メモリ3にライトバックする(ステップ506)。なお、W(i)203が0のワードのデータは、メモリ3に書き込まない。
なお、比較器104とキャッシュ制御ユニット105が行うデータの書込みに関する動作は、書込み部115aによって行われる。
また、比較器104とキャッシュ制御ユニット105が行うデータの読出しに関する動作は、読出し部115bによって行われる。
また、比較器104とキャッシュ制御ユニット105が行うキャッシュヒットかキャッシュミスかの判断に関する動作は、判断部115cによって行われる。
また、比較器104とキャッシュ制御ユニット105が行うデータアレイ103とメモリ3との間のデータ転送に関する動作はデータ転送部115dによって行われる。
図6は、キャッシュメモリシステム1(具体的には、キャッシュ制御ユニット105)がメモリ3に送るコマンドと、そのコマンドに対するメモリ3からキャッシュメモリシステム1(具体的には、キャッシュ制御ユニット105)へのリプライを説明するための説明図である。
図6(A)と図6(B)は、ブロック全体を読み出すコマンドとそのリプライの一例を示した説明図である。
本実施形態では、アドレスは64ビットで、ブロックの大きさは64バイトなので、メモリ3は、そのコマンドのブロックアドレス601(58ビット)で指定されるブロックを読み出して、図6(B)で示すデータリプライの形式で、ブロックデータ602(64バイト)を、キャッシュ制御ユニット105に送る。
図6(C)は、キャッシュメモリシステム1(具体的には、キャッシュ制御ユニット105)が、ブロック全体をメモリ3に書き込むコマンドの一例を示した説明図である。
このコマンドは、ブロックアドレス603(58ビット)と、ブロックデータ604(64バイト)から構成される。
図6(D)は、ブロックデータ604内のワードうち、W(i)203が1のワードのデータだけを、キャッシュメモリシステム1からメモリ3に書き込むためのコマンドの一例である。
このコマンドは、ブロックアドレス605(58ビット)と、W(1〜8)606(8ビット)と、W(i)203が1のワード(8バイト〜54バイト)のデータからなる部分ブロックデータ607と、を含む。
このコマンドは、W(i)203が1であるワードの個数に応じて長さが変わる。
次に、図7〜図15を使ってキャッシュ上のあるブロックを例にして、本実施形態での状態他のビット列とメモリアクセスなどの動作について説明する。
図7は、CPU2から1ワードの書き込みがあったときにキャッシュミスした場合の動作を説明するための説明図である。
1ワードの書き込みにキャッシュミスが生じると、そのワードを含むブロックが新たにキャッシュメモリシステム1に割り付けられ(BV=0、W=00000000)、書き込みデータ703が、書き込み時のアドレスに応じて、データアレイ103のブロックデータ704の4ワード目に書き込まれ、状態他ビット列705のうち、書き込まれたワードに対応するW(4)が1に設定される(BV=0、W=00010000)。
新たなブロックの割り付けに伴うブロックの置き換えにより、メモリアクセスが発生するかもしれないが、書き込み自体に伴ってメモリ3へのアクセスは発生しない。
図8は、図7と同じブロックの2ワード目にCPU2から1ワードの書き込みがあり、キャッシュヒットした場合の動作を説明するための説明図である。
1ワードの書き込みがキャッシュヒットして、データ802が、データアレイ102のブロックデータ803の2ワード目に書き込まれ、状態他ビット列804のW(2)が1となる(BV=0、W=01010000)。この場合も。書き込みによるメモリ3へのアクセスは発生しない。
図9は、CPU2が、図8と同じブロックの4ワード目を読み出し、キャッシュヒットした場合の動作を説明するための説明図である。
1ワードの読み出しがキャッシュヒットして、データアレイ102のブロックデータ903の4ワード目からデータが読み出され、読み出しデータ902としてCPU2に返される。
この場合、状態他ビット列904は更新されない(BV=0、W=01010000)。
ただし、キャッシュメモリがセットアソシアティブ方式の場合は、置き換えのためのアクセス履歴の部分が更新される可能性がある。また、読み出しに伴うメモリ3へのアクセスは発生しない。
図10は、CPU2が図9に示したブロックと同じブロックの6ワード目を読み出し、キャッシュミスした場合の動作を示している。
状態他ビット列1002が、W(6)=0でかつBV=0なので、1ワードの読み出しがキャッシュミスして、キャッシュ制御ユニット105は、図6(A)に示したコマンドを使って、メモリ3から、図9に示したブロックと同じブロックを読み出す。
そして、メモリ3から読み出されたブロックのデータ1004が、図6(B)のデータリプライの形式でキャッシュメモリシステム1(キャッシュ制御ユニット105)に返されると、読み出したブロックのデータ1004のうち、W(i)=0のワードのデータだけ(1番目、3番目、5〜8番目のワードのデータ)が、ブロック1006に書き込まれ、状態他ビット列1007のBV202が1となる(BV=1、W=01010000)。
そして、6番目のワードのデータが、読み出しデータ1008として、CPU2に返される。
図11は、CPU2が、図10に示したブロックと同じブロックの1ワード目を読み出し、キャッシュヒットした場合の動作を示している。
状態他ビット列1102のBV202が1なので、1ワードの読み出しがキャッシュヒットして、ブロックデータ1103の1ワード目が読み出しデータ1104としてCPU2に返される。
この場合、状態他ビット列1102は更新されない(BV=1、W=01010000)。
ただし、キャッシュメモリがセットアソシアティブ方式の場合は、置き換えのためのアクセス履歴の部分が更新される可能性がある。また、読み出しによるメモリアクセスは発生しない。
図12は、図11に示したブロックと同じブロックのエントリが置き換えの対象になった場合の動作を示している。
2ワード目と4ワード目がCPU2から書き込まれていて、状態他ビット列1202のW(2)とW(4)が1になっている(W=01010000)ので、図6(D)に示したコマンドを使って、2ワード目と4ワード目のデータ1203、1204だけがメモリ3に書き込まれる。そして、状態他ビット列1202が初期化される(BV=0、W=00000000)。
図13は、CPU2が、あるワードを読み出してキャッシュミスした場合の動作を示している。
読み出されたワードのブロックはキャッシュメモリ1上になく、新しいブロックが割り当てられ、状態他ビット列1303が初期化される(BV=0、W=00000000)。
続いて、読み出されたワードのブロックが、図6(A)に示したコマンドを使って、メモリ3から読み出される。
メモリ3から読み出されたブロック1305は、図6(B)のデータリプライの形式で、キャッシュメモリ1に返され、ブロックデータ1306に書き込まれる。
続いて、状態他のビット列1307のBVが1になる(BV=1、W=00000000) 。そして、読み出しデータ1308がCPU2に返される。
図14は、図13に示したブロックと同じブロックのエントリが置き換えの対象になった場合の動作を示している。
このブロックの状態他のビット列1401のW(i)がすべて0なので(W=00000000)、BVを0にするだけである(BV=0、W=00000000)。エントリの置き換えによるメモリアクセスは発生しない。
図15は、あるブロックのエントリが置き換えの対象になった場合の動作を示している。
このブロックは状態他ビット列1501のW(i)がすべて1なので(W=11111111)、ブロックデータ1502全体が図6(C)のコマンドを使ってメモリ3に書き込まれる。
続いて、状態他のビット列1501が初期化される(BV=0、W=00000000) 。
次に、図1に示したような並列計算機で、図18に示すループの並列処理を行った場合の動作と効果について、図16A〜図16Fを用いて説明する。なお、図16A〜図16Fにおいて、CPU1600〜1607は、メモリ3にアクセスして並列演算を行う。また、キャッシュメモリシステム1610〜1617は、図1Aに示したキャッシュメモリシステム1と同一構成とする。
ここでは、CPU1600〜1607がワードA0〜A7に対して順番にデータを書き込むときの処理を説明する。
図16Aは、ループに入る前の状態である。
まず、CPU1600が、ワードA0にデータを書き込もうとして、キャッシュミスが起こると、CPU1600は、キャッシュメモリシステム1610上に、ワードA0〜A7のブロックを割り当てて、ワードA0に、データA(0,2)’を書き込む(BV=0、W=10000000)(図16B参照)。
次に、CPU1601が、ワードA1にデータを書き込もうとして、キャッシュミスが起こると、CPU1601は、キャッシュメモリシステム1611上に、ワードA0〜A7のブロックを割り当てて、ワードA1に、データA(1,2)’を書き込む((BV=0、W=01000000)(図16C参照)。
次に、CPU1602が、ワードA2にデータを書き込もうとして、キャッシュミスが起こると、CPU1602は、キャッシュメモリシステム1612上に、ワードA0〜A7のブロックを割り当てて、ワードA2に、データA(2,2)’を書き込む(BV=0、W=00100000)(図16D参照)。
以下同様の処理を、CPU1603〜CPU1606が行い、続いて、CPU1607が、ワードA7にデータを書き込もうとして、キャッシュミスが起こると、CPU1607は、キャッシュメモリシステム1617上に、ワードA0〜A7のブロックを割り当てて、ワードA7に、データA(7,2)’を書き込む(BV=0、W=00000001)(図16E参照)。
最後に、各CPU1600〜1607が、キャッシュメモリ上の更新をメモリ3に反映するために、更新データをメモリ3にライトバックする(図16F参照)。
各CPUからは、書き込んだワードのデータだけがメモリ3に書き込まれるので、ライトバックは、同時に行われなくてもよい。
すべてのCPUからのライトバックが完了した時点で、最新のデータがメモリ3上に格納される。
このように、本実施の形態のキャッシュメモリを用いた場合には、最後のキャッシュからメモリへのライトバックのときにだけ、メモリアクセスが発生する。つまり、書き込み時に、メモリアクセスは発生しない。
一方、図20で説明した方法では、共有メモリからのブロックの読み出しが8回、共有メモリへのブロックの書き込みが7回発生する。
本実施の形態によれば、制御部115(書込み部115a)は、CPU2からの書込み時に、CPU2からのアドレスがアドレスアレイ102(中位nビット109に対応するオフセットごとに上位mビット106を格納する部分)内にない場合、データアレイ103内の複数のブロックのいずれかを書込み用ブロックとして割り当てる。そして、制御部115(書込み部115a)は、その書込み用ブロック内のいずれかのワードを、CPU2からのアドレスに対応づけ、そのワードにCPU2からのデータを書き込む。
ワード状態記憶部107aは、CPU2からのデータが書き込まれたワードを特定するためのワード状態情報を、そのワードに対応づけられたアドレスと関連づけて記憶する。
メモリ上の前記書き込み用ブロックが異なるブロックに置き換えられる時、制御部115(データ転送部115d)は、ワード状態記憶部107aを参照して、そのブロック内でデータが書き込まれた1つまたは複数のワードを特定し、その特定された1つまたは複数のワード内のデータだけを、メモリ3内の対応するブロックにライトバックする。
このため、キャッシュメモリへのデータ書き込み時にキャッシュミスが発生した場合に、メモリ3からデータを読み出すことなく、ワード単位でデータをキャッシュメモリに格納することが可能となる。また、ライトバックする時は、CPU2から書き込まれたデータのみを、メモリ3に書き込むことが可能となる。
よって、図18に示すようなループを複数のCPUで並列処理する場合、1つのブロックが複数のCPUにより書き込まれた場合でも、CPUからの書き込みごとに、ブロックのデータを読み出すためのメモリ読み出しを行わなくてもよくなる。
また、CPUの書き込みごとに、他のCPUのキャッシュを無効化してメモリ3にライトバックさせなくてもよくなる。
また、ループ実行終了時に各CPUが明示的にキャッシュメモリ上のブロックをライトバックする場合に、それぞれ独立に行うことができる。それぞれ別のタイミングでライトバックしても、すべてのライトバックが完了した時点で、メモリ3には最新のデータが格納される。
したがって、DOループ実行中の無駄なキャッシュの一貫性制御によるメモリアクセスを行わないキャッシュメモリシステムを提供することが可能になる。
なお、本実施形態のキャッシュメモリシステム1において、アドレスレジスタ101、ブロック状態記憶部107b、読出し部115b、および、判断部115cが省略されても、上記と同様の作用効果を生じる。
また、本実施形態では、読出し部115bは、CPU2からの読み出し時に、CPU2からのアドレスに対応するワード状態情報をワード状態記憶部107aが記憶している場合、そのワード状態情報にて特定されるワードからデータを読み出す。
この場合、メモリ3と通信することなく、その書き換えられたデータをCPU2に提供することが可能となる。
また、本実施形態では、ブロック状態記憶部107bは、データアレイ103のブロックに対応するアドレス群ごとに、そのブロック内のCPU2から書き込まれていないワードに、メモリ3から読み出されたデータが記憶されているか否かを示すブロック状態情報(BV)を記憶する。
そして、制御部115(判断部115c)は、CPU2からの読み出し時にCPU2からアドレスを受け付けた場合に、ワード状態記憶部107aおよびブロック状態記憶部107bを参照して、そのアドレスについてキャッシュヒットまたはキャッシュミスが生じたかを判断する。
この場合、ワード単位で、キャッシュヒットか否かを判断することが可能となる。
また、本実施形態では、制御部115(読出し部115b)は、CPU2からの読み出し時にキャッシュミスが生じた時、CPU2からのアドレスに対応するブロック内のデータをメモリ3から読み出す。
さらに、制御部115(読出し部115b)は、ワード状態記憶部107aを参照して、データアレイ103のそのブロック内でデータが書き込まれていない1つまたは複数のワードを特定する。
さらに、制御部115(読出し部115b)は、その特定された1つまたは複数のワードにだけ、メモリ3から読み出したブロックのデータを書き込む。
さらに、制御部115(読出し部115b)は、ブロック状態記憶部107bに、そのブロック内のCPU2からデータが書き込まれていない1つまたは複数のワードに、メモリ3から読み出されたデータが記憶されていることを示すブロック状態情報を記憶する。
この場合、データアレイ103に格納する必要があるデータだけをデータアレイ103に書き込むことが可能になり、その書き込みが行われたことをブロック状態記憶部107bに記憶することが可能になる。
なお、本実施形態は、並列計算機のキャッシュメモリといった用途に適用できる。
以上説明した実施形態において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
1、4、6 キャッシュメモリ
2、5、7 CPU
3 共有メモリ
101 アドレスレジスタ
102 アドレスアレイ
103 データアレイ
104 比較器
105 キャッシュ制御ユニット
115 制御部
115a 書込み部
115b 読出し部
115c 判断部
115d データ転送部
107a ワード状態記憶部
107b ブロック状態記憶部
2、5、7 CPU
3 共有メモリ
101 アドレスレジスタ
102 アドレスアレイ
103 データアレイ
104 比較器
105 キャッシュ制御ユニット
115 制御部
115a 書込み部
115b 読出し部
115c 判断部
115d データ転送部
107a ワード状態記憶部
107b ブロック状態記憶部
Claims (8)
- 共有メモリにアクセスして並列演算を行う複数の演算装置のそれぞれに対して、個別に接続されるキャッシュメモリシステムであって、
複数のワードからなる複数のブロックを有するデータアレイと、
前記複数のブロックのうち、少なくとも1つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記共有メモリのアドレス群を格納する格納手段と、
前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードを当該アドレスに対応づけ、当該ワードに当該演算装置からのデータを書き込む書込み手段と、
前記演算装置からのデータが書き込まれたワードを特定するためのワード状態情報を、当該ワードに対応づけられたアドレスと関連づけて記憶するワード状態記憶手段と、
キャッシュメモリ上の前記書き込み用ブロックが異なるブロックに置き換えられる時、前記ワード状態記憶手段を参照して、前記書込み用ブロック内で前記データが書き込まれた1つまたは複数のワードを特定し、当該特定された1つまたは複数のワード内のデータを、前記共有メモリ内の対応するブロックにライトバックするデータ転送手段と、を含むキャッシュメモリシステム。 - 請求項1に記載のキャッシュメモリシステムにおいて、
前記演算装置からの読み出し時に、当該演算装置からのアドレスに対応する前記ワード状態情報を前記ワード状態記憶手段が記憶している場合、当該ワード状態情報にて特定されるワードからデータを読み出す読出し手段をさらに含む、キャッシュメモリシステム。 - 請求項1または2に記載のキャッシュメモリシステムにおいて、
前記ブロックに対応するアドレス群ごとに、当該ブロック内の前記演算装置からのデータが書き込まれていないワードに前記共有メモリから読み出されたデータが記憶されているか否かを示すブロック状態情報を記憶するブロック状態記憶手段と、
前記演算装置からの読み出し時に当該演算装置からアドレスを受け付けた場合に、前記ワード状態記憶手段および前記ブロック状態記憶手段を参照して、当該アドレスについてキャッシュヒットまたはキャッシュミスが生じたかを判断する判断手段と、をさらに含むキャッシュメモリシステム。 - 請求項3に記載のキャッシュメモリシステムにおいて、
前記読出し手段は、前記演算装置からの読み出し時にキャッシュミスが生じた時、当該演算装置からのアドレスに対応するブロック内のデータを、前記共有メモリから読み出し、前記ワード状態記憶手段を参照して、前記データアレイの当該ブロック内でデータが書き込まれていない1つまたは複数のワードを特定し、当該特定された1つまたは複数のワードにだけ、前記共有メモリから読み出したブロックのデータを書き込み、前記ブロック状態記憶手段に、当該ブロック内の前記演算装置からデータが書き込まれていない1つまたは複数のワードに前記共有メモリから読み出されたデータが記憶されていることを示す前記ブロック状態情報を記憶する、キャッシュメモリシステム。 - 共有メモリにアクセスして並列演算を行う複数の演算装置のそれぞれに対して個別に接続され、かつ、複数のワードからなる複数のブロックを有するデータアレイを含むキャッシュメモリシステムが行うキャッシュメモリ制御方法であって、
前記複数のブロックのうち、少なくとも1つの前記ワードにデータが格納されたブロックについて、当該ブロックに対応づけられた前記共有メモリのアドレス群を格納手段に格納する格納ステップと、
前記演算装置からの書込み時に、当該演算装置からのアドレスが前記格納手段内にない場合、前記複数のブロックのいずれかを書込み用ブロックとして割り当て、当該書込み用ブロック内のいずれかのワードを当該アドレスに対応づけ、当該ワードに当該演算装置からのデータを書き込む書込みステップと、
前記演算装置からのデータが書き込まれたワードを特定するためのワード状態情報を、当該ワードに対応づけられたアドレスと関連づけてワード状態記憶手段に記憶するワード状態記憶ステップと、
キャッシュメモリ上の前記書き込み用ブロックが異なるブロックに置き換えられる時、前記ワード状態記憶手段を参照して、前記書込み用ブロック内で前記データが書き込まれた1つまたは複数のワードを特定し、当該特定された1つまたは複数のワード内のデータを、前記共有メモリ内の対応するブロックにライトバックするデータ転送ステップと、を含むキャッシュメモリ制御方法。 - 請求項5に記載のキャッシュメモリ制御方法において、
前記演算装置からの読み出し時に、当該演算装置からのアドレスに対応する前記ワード状態情報を前記ワード状態記憶手段が記憶している場合、当該ワード状態情報にて特定されるワードからデータを読み出す読出しステップをさらに含むキャッシュメモリ制御方法。 - 請求項5または6に記載のキャッシュメモリ制御方法において、
前記ブロックに対応するアドレス群ごとに、当該ブロック内の前記演算装置からのデータが書き込まれていないワードに前記共有メモリから読み出されたデータが記憶されているか否かを示すブロック状態情報をブロック状態記憶手段に記憶するブロック状態記憶ステップと、
前記演算装置からの読み出し時に当該演算装置からアドレスを受け付けた場合に、前記ワード状態記憶手段および前記ブロック状態記憶手段を参照して、当該アドレスについてキャッシュヒットまたはキャッシュミスが生じたかを判断する判断ステップと、をさらに含むキャッシュメモリ制御方法。 - 請求項7に記載のキャッシュメモリ制御方法において、
前記読出しステップでは、前記演算装置からの読み出し時にキャッシュミスが生じた時、当該演算装置からのアドレスに対応するブロック内のデータを、前記共有メモリから読み出し、前記ワード状態記憶手段を参照して、前記データアレイの当該ブロック内でデータが書き込まれていない1つまたは複数のワードを特定し、当該特定された1つまたは複数のワードにだけ、前記共有メモリから読み出したブロックのデータを書き込み、前記ブロック状態記憶手段に、当該ブロック内の前記演算装置からデータが書き込まれていない1つまたは複数のワードに前記共有メモリから読み出されたデータが記憶されていることを示す前記ブロック状態情報を記憶する、キャッシュメモリ制御方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007327477A JP2009151457A (ja) | 2007-12-19 | 2007-12-19 | キャッシュメモリシステムおよびキャッシュメモリ制御方法 |
EP08170913A EP2073126A1 (en) | 2007-12-19 | 2008-12-08 | Cache memory system and cache memory control method |
US12/336,094 US20090164732A1 (en) | 2007-12-19 | 2008-12-16 | Cache memory system and cache memory control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007327477A JP2009151457A (ja) | 2007-12-19 | 2007-12-19 | キャッシュメモリシステムおよびキャッシュメモリ制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009151457A true JP2009151457A (ja) | 2009-07-09 |
Family
ID=40466896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007327477A Pending JP2009151457A (ja) | 2007-12-19 | 2007-12-19 | キャッシュメモリシステムおよびキャッシュメモリ制御方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090164732A1 (ja) |
EP (1) | EP2073126A1 (ja) |
JP (1) | JP2009151457A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227679A (zh) * | 2016-07-25 | 2016-12-14 | 北京邮电大学 | 一种数据缓存替换方法及装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5906881B2 (ja) * | 2012-03-27 | 2016-04-20 | 富士通株式会社 | 情報処理装置及び情報処理装置の制御方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5029070A (en) * | 1988-08-25 | 1991-07-02 | Edge Computer Corporation | Coherent cache structures and methods |
US5155824A (en) * | 1989-05-15 | 1992-10-13 | Motorola, Inc. | System for transferring selected data words between main memory and cache with multiple data words and multiple dirty bits for each address |
US5265232A (en) * | 1991-04-03 | 1993-11-23 | International Business Machines Corporation | Coherence control by data invalidation in selected processor caches without broadcasting to processor caches not having the data |
JP3707854B2 (ja) * | 1996-03-01 | 2005-10-19 | 株式会社東芝 | キャッシュ機能を有するコンピュータ及びキャッシュメモリ制御方法 |
JPH09251424A (ja) | 1996-03-15 | 1997-09-22 | Nec Corp | キャッシュ装置 |
US6289419B1 (en) * | 1998-03-06 | 2001-09-11 | Sharp Kabushiki Kaisha | Consistency control device merging updated memory blocks |
JP2000267935A (ja) | 1999-03-18 | 2000-09-29 | Fujitsu Ltd | キヤッシュメモリ装置 |
US7437510B2 (en) * | 2005-09-30 | 2008-10-14 | Intel Corporation | Instruction-assisted cache management for efficient use of cache and memory |
JP4684174B2 (ja) | 2006-06-09 | 2011-05-18 | ジヤトコ株式会社 | 自動変速機の制御装置 |
US7937535B2 (en) * | 2007-02-22 | 2011-05-03 | Arm Limited | Managing cache coherency in a data processing apparatus |
-
2007
- 2007-12-19 JP JP2007327477A patent/JP2009151457A/ja active Pending
-
2008
- 2008-12-08 EP EP08170913A patent/EP2073126A1/en not_active Ceased
- 2008-12-16 US US12/336,094 patent/US20090164732A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106227679A (zh) * | 2016-07-25 | 2016-12-14 | 北京邮电大学 | 一种数据缓存替换方法及装置 |
CN106227679B (zh) * | 2016-07-25 | 2018-12-28 | 北京邮电大学 | 一种数据缓存替换方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20090164732A1 (en) | 2009-06-25 |
EP2073126A1 (en) | 2009-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI526829B (zh) | 電腦系統、用於存取儲存裝置之方法及電腦可讀儲存媒體 | |
TWI522802B (zh) | 確保微處理器之快取記憶體層級之資料一致性的裝置與方法 | |
US5787478A (en) | Method and system for implementing a cache coherency mechanism for utilization within a non-inclusive cache memory hierarchy | |
US5765199A (en) | Data processor with alocate bit and method of operation | |
US6950909B2 (en) | System and method for reducing contention in a multi-sectored cache | |
US8151058B2 (en) | Vector computer system with cache memory and operation method thereof | |
US7721047B2 (en) | System, method and computer program product for application-level cache-mapping awareness and reallocation requests | |
US8589627B2 (en) | Partially sectored cache | |
JP2010097557A (ja) | セットアソシアティブ方式のキャッシュ装置及びキャッシュ方法 | |
US5675765A (en) | Cache memory system with independently accessible subdivided cache tag arrays | |
US7219197B2 (en) | Cache memory, processor and cache control method | |
EP3411798B1 (en) | Cache and method | |
US10013352B2 (en) | Partner-aware virtual microsectoring for sectored cache architectures | |
US20220066940A1 (en) | Limited propagation of unnecessary memory updates | |
JP2009151457A (ja) | キャッシュメモリシステムおよびキャッシュメモリ制御方法 | |
JP6732032B2 (ja) | 情報処理装置 | |
EP3724774B1 (en) | Rinsing cache lines from a common memory page to memory | |
US6996675B2 (en) | Retrieval of all tag entries of cache locations for memory address and determining ECC based on same | |
US7143239B2 (en) | Cache structure and methodology | |
US11934311B2 (en) | Hybrid allocation of data lines in a streaming cache memory | |
JP7311959B2 (ja) | 複数のデータ・タイプのためのデータ・ストレージ | |
WO2010098152A1 (ja) | キャッシュメモリシステムおよびキャッシュメモリ制御方法 | |
JP2009157608A (ja) | キャッシュメモリシステムおよびキャッシュメモリ制御方法 | |
JP6260456B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
CN116804975A (zh) | 具有每扇区高速缓存驻留控件的高速缓存存储器 |