(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024011696
(43)【公開日】2024-01-25
(54)【発明の名称】演算処理装置及び演算処理方法
(51)【国際特許分類】
G06F 12/0862 20160101AFI20240118BHJP
G06F 12/0897 20160101ALI20240118BHJP
【FI】
G06F12/0862 105
G06F12/0897 100
G06F12/0897 110
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022113918
(22)【出願日】2022-07-15
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】中原 汐
(72)【発明者】
【氏名】吉川 隆英
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205JJ13
5B205MM03
5B205NN42
5B205NN92
5B205QQ02
5B205QQ11
5B205TT02
5B205UU31
5B205VV03
5B205VV04
(57)【要約】
【課題】データ転送を効率化する演算処理装置及び演算処理方法を提供する。
【解決手段】記憶部134は、データを格納する。制御部131は、演算部又は上位キャッシュからデータアクセス要求を受けて、データアクセス要求の対象データが記憶部134に存在する場合に対象データにアクセスし、対象データが記憶部134に存在しない場合に対象データを下位キャッシュ又はメインメモリから取得して記憶部134に格納する。キャッシュミス情報更新部132は、対象データが記憶部134に存在しないことを示すキャッシュミスの発生回数を算出する。投機的プリフェッチ部133は、発生回数を基に投機的データをメインメモリ又は下位キャッシュから取得して、取得した投機的データを記憶部134に格納する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
演算部及び1つ又は階層化された複数のキャッシュを有する演算処理装置であって、
前記キャッシュの少なくとも1つは、
データを格納する記憶部と、
前記演算部又は上位キャッシュからデータアクセス要求を受けて、前記データアクセス要求の対象データが前記記憶部に存在する場合に前記対象データにアクセスし、前記対象データが前記記憶部に存在しない場合に前記対象データを下位キャッシュ又はメインメモリから取得して前記記憶部に格納する制御部と、
前記対象データが前記記憶部に存在しないことを示すキャッシュミスの発生回数を算出する情報管理部と、
前記発生回数を基に投機的データを前記メインメモリ又は前記下位キャッシュから取得して、取得した前記投機的データを前記記憶部に格納する投機的プリフェッチ部とを備えた
ことを特徴とする演算処理装置。
【請求項2】
前記情報管理部は、前記発生回数をアドレス範囲毎に算出し、
前記投機的プリフェッチ部は、前記発生回数を基に、前記アドレス範囲のいずれかを選択して、選択した前記アドレス範囲に含まれる前記投機的データを取得する
ことを特徴とする請求項1に記載の演算処理装置。
【請求項3】
前記記憶部は、メイン領域と予備領域とを有し、
前記投機的プリフェッチ部は、前記投機的データを前記予備領域に格納する
ことを特徴とする請求項1に記載の演算処理装置。
【請求項4】
前記予備領域に格納された複数のデータのデータ毎のアクセス頻度を算出し、前記アクセス頻度を基にデータを選択して前記メイン領域に格納するデータモニタ部をさらに備えたことを特徴とする請求項3に記載の演算処理装置。
【請求項5】
前記制御部は、前記対象データが前記記憶部に存在しない場合に前記対象データを前記下位キャッシュ又は前記メインメモリから取得し、前記対象データを格納する空き領域が前記メイン領域に存在しない場合、前記メイン領域から前記予備領域に特定のデータを移動して、前記対象データを前記メイン領域に格納することを特徴とする請求項3に記載の演算処理装置。
【請求項6】
前記投機的プリフェッチ部は、自己が搭載されたキャッシュと前記メインメモリ又は前記下位キャッシュとの間のバスの処理能力に余裕があるか否かを判定し、処理能力に余裕がある場合に、前記投機的データを前記メインメモリ又は前記下位キャッシュから取得して、取得した前記投機的データを前記記憶部に格納することを特徴とする請求項1に記載の演算処理装置。
【請求項7】
前記投機的プリフェッチ部は、前記バスの処理量を表す指標の値を算出して、算出した値と閾値との比較を基に、前記処理能力に余裕があるか否かを判定することを特徴とする請求項6に記載の演算処理装置。
【請求項8】
演算部、メインメモリ及び1つ又は階層化された複数のキャッシュを用いる演算処理方法であって、
前記キャッシュの少なくとも1つに、
前記演算部又は上位キャッシュからデータアクセス要求を受けさせ、
前記データアクセス要求の対象データが当該キャッシュの記憶領域に存在する場合に前記対象データにアクセスさせ、
前記対象データが前記記憶領域に存在しない場合に前記対象データを下位キャッシュ又は前記メインメモリから取得させて前記記憶領域に格納させ、
前記対象データが前記記憶領域に存在しないことを示すキャッシュミスの発生回数を算出させ、
前記発生回数を基に投機的データを前記メインメモリ又は前記下位キャッシュから取得させ、取得した前記投機的データを前記記憶領域に格納させる
ことを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置及び演算処理方法に関する。
【背景技術】
【0002】
近年、プロセッサの動作周波数が飛躍的に向上している。これに対し、メインメモリとして一般的に使用されるDRAM(Dynamic Random Access Memory)の動作速度の向上は低調であり、プロセッサの性能を十分に活かすためにデータ転送を効率化するアーキテクチャの技術研究が盛んである。情報処理装置では、一般に、メインメモリよりもデータアクセスが高速なキャッシュメモリをCPU(Central Processing Unit)に配置する。そして、このキャッシュメモリ上に、最近参照したデータを置くことによって、メインメモリ参照によるレイテンシの低減が図られる。
【0003】
ただし、レイテンシの低減のためのキャッシュメモリの配置が効果的に働くためには、キャッシュメモリ上に参照するデータが格納されていることが条件となる。キャッシュメモリ上に参照するデータが無ければ、メインメモリへのアクセスが発生してしまうため、キャッシュメモリを配置した場合であっても、データ転送速度が演算速度のボトルネックとなる。そこで、プリフェッチなどでデータを効率的にキャッシュメモリに格納することで、データ転送速度の向上が図られている。
【0004】
なお、キャッシュ管理の技術として、キャッシュが連携置換ポリシによって管理されるダイレクトマップ部分とマルチウェイ部分とを含み、マルチウェイ部分をダイレクトマップ部分のためのビクティムキャッシュとして機能させる技術が提案されている。ビクティムキャッシュとは、キャッシュから追い出されたデータを書き込むためのキャッシュである。また、キャッシュから追い出されたエントリをメインメモリに書き戻す前に一時的にライトバッファに保存し、要求されたデータがライトバッファにあれば、そのデータをキャッシュに戻す技術が提案されている。また、条件分岐予測でどの分岐を取るかを予測し、予測に基づいてメモリを検索して予測が正しければ次の命令はすでにフェッチされているが、予測が間違っている場合は、条件分岐が実際に解決されるまで、投機的にフェッチしておく技術が提案されている。また、メモリ内のWork領域に転送されたデータをキャッシュ内の特定キャッシュ領域へ格納してデータ処理を行い、その後に特定のキャッシュからデータを追い出す動作を繰り返して、局所性の高いデータをキャッシュメモリに残す技術が提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特表2018-512650号公報
【特許文献2】特開平08-314802号公報
【特許文献3】米国特許出願公開第2018/0322059号明細書
【特許文献4】特開2011-86131号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、疎行列演算などの不規則アクセスが多い演算では、将来のデータアクセス予測が難しい。例えば、疎行列ベクトル積演算(SpMV:Sparse Matrix-Vector multiplication)におけるベクトルデータなどは、どのデータが将来利用されるかを予測することは非常に困難である。将来のデータアクセス予測に失敗すると、プリフェッチによってデータを効率的にキャッシュメモリに格納することが難しく、データ転送を効率化することは困難となる。また、上述したいずれの技術であっても、不規則アクセスが多い演算において効率的なプリフェッチを実現することは難しく、データ転送を効率化することは困難である。
【0007】
開示の技術は、上記に鑑みてなされたものであって、データ転送を効率化する演算処理装置及び演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
本願の開示する演算処理装置及び演算処理方法の一つの態様において、演算処理装置は、演算部、メインメモリ及び1つ又は階層化された複数のキャッシュを有する。前記キャッシュの少なくとも1つは、以下の各部を備える。記憶部は、データを格納する。制御部は、前記演算部又は上位キャッシュからデータアクセス要求を受けて、前記データアクセス要求の対象データが前記記憶部に存在する場合に前記対象データにアクセスする。また前記制御部は、前記対象データが前記記憶部に存在しない場合に前記対象データを下位キャッシュ又は前記メインメモリから取得して前記記憶部に格納する。情報管理部は、前記対象データが前記記憶部に存在しないことを示すキャッシュミスの発生回数を算出する。投機的プリフェッチ部は、前記発生回数を基に投機的データを前記メインメモリ又は前記下位キャッシュから取得して、取得した前記投機的データを前記記憶部に格納する。
【発明の効果】
【0009】
1つの側面では、本発明は、データ転送を効率化することができる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、情報処理装置の全体構成を示す概略図である。
【
図2】
図2は、実施例1に係るL1及びL2キャッシュのブロック図である。
【
図3】
図3は、メモリアドレスの一例を示す図である。
【
図4】
図4は、キャッシュミス情報の一例の図である。
【
図5】
図5は、実施例1に係る制御部によるデータキャッシュ処理のフローチャートである。
【
図6】
図6は、キャッシュミス情報更新部によるキャッシュミス情報の更新処理のフローチャートである。
【
図7】
図7は、投機的プリフェッチ部による投機的プリフェッチ処理のフローチャートである。
【
図8】
図8は、実施例2に係るL2キャッシュのブロック図である。
【
図9】
図9は、実施例2に係るキャッシュ情報の構成を示す図である。
【
図10】
図10は、実施例2に係る制御部によるデータキャッシュ処理のフローチャートである。
【
図11】
図11は、データモニタ部によるデータ格納処理のフローチャートである。
【
図12】
図12は、MRAMをビクティムキャッシュとして用いる場合のデータキャッシュ処理のフローチャートである。
【0011】
以下に、本願の開示する演算処理装置及び演算処理方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理方法が限定されるものではない。
【実施例0012】
図1は、情報処理装置の全体構成を示す概略図である。
図1に示すように、情報処理装置1は、演算部11、L1キャッシュ12、L2キャッシュ13、L3キャッシュ14、メインメモリ15、補助記憶装置16、表示装置17及び入力装置18を有する。演算部11は、L1キャッシュ12、L2キャッシュ13、L3キャッシュ14、メインメモリ15、補助記憶装置16、表示装置17及び入力装置18のそれぞれとバスで接続される。演算部11、L1キャッシュ12、L2キャッシュ13及びL3キャッシュ14は、例えば、演算処理装置であるCPU10に搭載される。
【0013】
演算部11は、例えば、CPU(Central Processing Unit)コアである。演算部11は、補助記憶装置16に格納された各種プログラムなどを読み出してメインメモリ15に展開して、L1キャッシュ12、L2キャッシュ13、L3キャッシュ14及びメインメモリ15に格納されたデータを用いて演算を実行する。
【0014】
L1キャッシュ12は、動作速度が速く且つL2キャッシュ12及びL3キャッシュ14と比べて容量の小さいキャッシュメモリであり、演算部11によるデータアクセス時に最初に読み込まれるキャッシュメモリである。L1キャッシュ12は、例えば、SRAM(Static Random Access Memory)である。
【0015】
L2キャッシュ13は、動作速度が速く且つ一般的にL1キャッシュ12よりも容量の大きいキャッシュメモリであり、演算部11によるデータアクセス時に、L1キャッシュ12でキャッシュミスが発生した場合に次に読み込まれるキャッシュメモリである。L2キャッシュ13も、例えば、SRAMである。
【0016】
L3キャッシュ14は、動作速度が速く且つ一般的にL2キャッシュ13よりも容量の大きいキャッシュメモリであり、演算部11によるデータアクセス時に、L2キャッシュ13でキャッシュミスが発生した場合に次に読み込まれるキャッシュメモリである。L3キャッシュ14も、例えば、SRAMである。
【0017】
ここで、本実施例では、情報処理装置1が、L1キャッシュ12、L2キャッシュ13及びL3キャッシュ14という3つのキャッシュメモリを有する場合で説明するが、キャッシュメモリの階層の数はこれに限らない、例えば、情報処理装置1は、L2キャッシュ13やL3キャッシュ14を有さなくても良いし、4つ以上の階層を有してもよい。
【0018】
メインメモリ15は、L1キャッシュ12、L2キャッシュ13及びL3キャッシュ14に比べて動作速度が遅く且つ大容量の主記憶装置である。メインメモリ15は、演算部11が演算に用いるデータが格納される。メインメモリ15は、L1キャッシュ12、L2キャッシュ13及びL3キャッシュ14のいずれにもアクセス対象のデータが存在しない場合に演算部11からのアクセスを受ける。メインメモリ15は、例えば、DRAM(Dynamic Random Access Memory)である。
【0019】
補助記憶装置16は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などである。補助記憶装置16には、OS(Operating System)や演算を行なうための各種プログラムが格納される。
【0020】
表示装置17は、例えば、モニタやディスプレイなどである。表示装置17は、演算部11による演算結果の利用者への提示などを行なう。入力装置18は、例えば、キーボードやマウスなどである。利用者は、表示装置17に表示された画面を参照しつつ、入力装置18を用いて情報処理装置1へのデータや命令の入力を行なう。表示装置17及び入力装置18は、1つのハードウェアとして構成されてもよい。
【0021】
図2は、実施例1に係るL1~L2キャッシュのブロック図である。
図2では、L1キャッシュ12、L2キャッシュ13及びL3キャッシュ14の階層構造を分かり易くするため、それぞれが多段で接続されるように示した。実際の接続は、
図1に示したように演算部11から延びるバスにそれぞれが接続してもよい。
【0022】
L1キャッシュ12は、制御部121及び記憶部122を有する。記憶部122は、キャッシュされたデータ群であるキャッシュ情報123を有する。
【0023】
制御部121は、演算部11からのデータ要求を受信する。そして、制御部121は、データ要求で指定されたデータが記憶部122に存在するか否かを判定する。記憶部122が保持するキャッシュ情報123に指定されたデータが存在する場合、制御部121は、キャッシュ情報123の中から指定されたデータを取り出して演算部11へ送信して応答を行なう。
【0024】
これに対して、記憶部122が保持するキャッシュ情報123に指定されたデータが存在しない場合、制御部121は、キャッシュミスと判定して、データ要求をL2キャッシュ13へ出力する。その後、L2キャッシュ13から要求したデータを受信すると、制御部121は、記憶部122が保持するキャッシュ情報123として受信したデータを格納する。また、キャッシュの方式によっては、L1キャッシュ12が、L2キャッシュ13から受信したデータを演算部11へ出力してもよい。
【0025】
次に、L2キャッシュ13について説明する。本実施例では、L2キャッシュ13は、キャッシュのマッピング方式としてセットアソシアティブ方式を用いて動作する。
図3は、メモリアドレスの一例を示す図である。本実施例では、メモリアドレス101は、例えば、
図3に示すように、タグ、セット、ブロックオフセット及びバイトオフセットを有する。タグとセットとを合わせてブロックアドレスと呼ぶ。ブロックアドレスは、メインメモリ15におけるどのブロックかを示す情報である。また、セットは、キャッシュにおけるどのセットに格納するかを示すインデックスである。また、ブロックオフセットは、ブロック内のどの部分に要求するデータがあるかを示す情報である。また、バイトオフセットは、1回の読み書きの単位であるワードの中のどの部分に要求するデータがあるかを示す情報である。以下では、あるデータが格納された位置を示すメモリアドレスを、そのデータのメモリアドレスと呼ぶ。
【0026】
ここで、L2キャッシュ13のセット数の一例について説明する。L2キャッシュ13の記憶部134におけるキャッシュ情報135を格納する領域の容量は、セット数とウェイ数とブロックサイズとの総積により算出される。例えば、L2キャッシュ13には、16ウェイ、2048セット且つブロックサイズが256Byteのものがある。他にも、L2キャッシュ13には、16ウェイ、1024セット且つブロックサイズが64Byteのものがある。
【0027】
図2に戻って説明を続ける。本実施例に係るL2キャッシュ13は、処理能力に余裕がある場合に、不規則アクセスの多いデータに対して投機的なプリフェッチを行なう。すなわち、L2キャッシュ13は、不規則アクセスが多いと判定したデータを、データアクセスを受けない段階で事前にキャッシュ情報135として記憶部134に格納する。ここで、本実施例では、L2キャッシュ13が不規則アクセスに基づく投機的プリフェッチを行う場合で説明したが、これに限らず、L1キャッシュ12やL3キャッシュ14といった他のキャッシュメモリが行ってもよい。ただし、L1キャッシュ12は、容量の小ささや演算部11からのアクセス頻度を考えた場合、実施例に係る不規則アクセスに基づく投機的プリフェッチにはあまり適さない。
【0028】
以下に、L2キャッシュ13の詳細について説明する。L2キャッシュ13は、
図2に示すように、制御部131、キャッシュミス情報更新部132、投機的プリフェッチ部133及び記憶部134を有する。
【0029】
制御部131は、L1キャッシュ12からのデータ要求を受信する。そして、制御部121は、データ要求で指定されたデータが記憶部134に存在するか否かを判定する。記憶部134が保持するキャッシュ情報135に指定されたデータが存在する場合、制御部131は、キャッシュ情報135の中から指定されたデータを取り出してL1キャッシュ12及び演算部11へ送信して応答を行なう。
【0030】
これに対して、記憶部134が保持するキャッシュ情報135に指定されたデータが存在しない場合、制御部131は、キャッシュミスと判定して、データ要求をL3キャッシュ14へ出力する。また、制御部131は、指定されたデータのキャッシュミスをキャッシュミス情報更新部132に通知する。その後、L3キャッシュ14から要求したデータを受信すると、制御部131は、記憶部134が保持するキャッシュ情報135として受信したデータを格納する。また、キャッシュの方式によっては、L1キャッシュ12が、L3キャッシュ14から受信したデータをL1キャッシュ12へ出力してもよい。
【0031】
キャッシュミス情報136は、メモリアドレスに含まれるタグ毎に、キャッシュミスの発生頻度を管理するためのテーブルである。
図4は、キャッシュミス情報の一例の図である。キャッシュミス情報136は、タグ及び各タグに対応するカウンタの値が登録される。タグは、
図3に示すメモリアドレス101の上位部分にあたる。また、カウンタは、タグに対応するアドレス範囲で発生したキャッシュミスの数を表す。
【0032】
キャッシュミス情報更新部132は、キャッシュ情報135の変更に応じて、キャッシュミス情報136を更新する。より詳しくは、キャッシュミス情報更新部132は、キャッシュミス発生時に、指定されたデータのキャッシュミスの通知を制御部131から受ける。次に、キャッシュミス情報更新部132は、記憶部134に格納されたキャッシュミス情報136を参照する。そして、キャッシュミス情報更新部132は、キャッシュミス情報136に指定されたデータに対応するエントリが存在するか否かを判定する。すなわち、キャッシュミス情報更新部132は、指定されたデータのメモリアドレスに含まれるタグを有するエントリがキャッシュミス情報136に存在するか否かを判定する。
【0033】
対応するエントリが存在しない場合、キャッシュミス情報更新部132は、指定されたデータのメモリアドレスに含まれるタグ有するエントリをキャッシュミス情報136に追加する。さらに、キャッシュミス情報更新部132は、カウンタをカウンタの初期値に設定する。これに対して、対応するエントリが存在する場合、キャッシュミス情報更新部132は、キャッシュミス情報136の指定されたデータのメモリアドレスに含まれるタグに対応するカウンタをインクリメントする。すなわち、キャッシュミス情報更新部132は、タグ毎にキャッシュミスの発生数を累積していく。キャッシュミス情報136を更新した場合、キャッシュミス情報更新部132は、キャッシュミス情報136の更新を投機的プリフェッチ部133へ通知する。
【0034】
ここで、L2キャッシュ13は、ストライドプリフェッチなどのハードウェアプリフェッチを実行してもよい。ただし、キャッシュミス情報更新部132は、ハードウェアプリフェッチをキャッシュミスと同様には扱わず、ハードウェアプリフェッチが発生した場合でもキャッシュミス情報136のカウントをインクリメントしない。
【0035】
また、キャッシュミス情報更新部132は、所定の条件が満たされた場合に、キャッシュミス情報136のエントリをクリアしてもよい。例えば、特定の処理における一群の演算が終了した場合に、キャッシュミス情報更新部132は、キャッシュミス情報136のエントリをクリアしてもよい。このキャッシュミス情報更新部132が、「情報管理部」の一例にあたる。
【0036】
投機的プリフェッチ部133は、L2キャッシュ13とL3キャッシュ14との間のバスに余裕が存在するときに、不規則アクセスが多いアドレス範囲からキャッシュしていないデータをプリフェッチする。すなわち、投機的プリフェッチ部133は、キャッシュしていないデータを下位メモリであるL3キャッシュ14又はメインメモリ15から取得してキャッシュ情報135として記憶部134に格納する。
【0037】
ここで、ハードウェアプリフェッチなどの通常のプリフェッチでは、データのアクセスの規則性を推測してプリフェッチが行われる。すなわち、あるアドレス範囲において推測できる程度の規則性にしたがってデータアクセスが行われていれば、そのアドレス範囲においてキャッシュミスの発生は通常のプリフェッチにより抑えられると考える。このことから、キャッシュミスが頻発している場合、推測できる程度の規則性から外れたデータアクセスが行われていると想定される。すなわち、キャッシュミスの発生数が多いアドレス範囲は、不規則アクセスが多いアドレス範囲と考えることができる。そこで、投機的プリフェッチ部133は、キャッシュミス情報136においてカウンタの値が大きいアドレス範囲に不規則アクセスの対象となるデータがあると判定し、そのデータをL2キャッシュ13の記憶部134に格納する。
【0038】
ただし、キャッシュミス情報136においてカウンタ値が全体的に小さい場合、いずれのアドレス範囲においても不規則アクセスが発生していないといえる。そこで、投機的プリフェッチ部133は、不規則アクセスの発生を判定するための判定閾値を予め有する。判定閾値は、大きければ不規則アクセスの検出の見逃しが多くなり、小さければ不規則アクセスの誤検出が多くなる。そこで、判定閾値は、情報処理装置1の運用状態に応じて決定されることが好ましい。
【0039】
このように、特定のアドレス範囲に不規則アクセスの対象となるデータが推測し、そのアドレス範囲の中から今後アクセス対象になるかが不確実なデータを選択してプリフェッチすることから、以下では、投機的プリフェッチ部133が行なうプリフェッチを投機的プリフェッチと呼ぶ。投機的プリフェッチ部133が投機的プリフェッチの対象とするデータが、「投機的データ」の一例にあたる。以下に、投機的プリフェッチ部133の動作の詳細について説明する。
【0040】
投機的プリフェッチ部133は、キャッシュミス情報136の更新通知をキャッシュミス情報更新部132から受信する。次に、投機的プリフェッチ部133は、データを格納する空き領域が記憶部134に存在するか否かを判定する。データを格納する空き領域があれば、投機的プリフェッチ部133は空いているウェイが存在するセットを1つ選択する。
【0041】
次に、投機的プリフェッチ部133は、キャッシュミス情報136を参照する。そして、投機的プリフェッチ部133は、キャッシュミス情報136に格納されたエントリの中からカウンタ値が大きいものから順にエントリを選択する。
【0042】
次に、投機的プリフェッチ部133は、選択したエントリのカウンタ値が判定閾値より大きいか否かを判定する。判定閾値よりもカウンタ値が大きい場合、投機的プリフェッチ部133は、選択したセットと選択したエントリとのタグに対応するデータが、記憶部134に存在するか否かを判定する。選択したセットとタグに対応するデータが記憶部134に既に存在する場合、投機的プリフェッチ部133は、次にカウンタ値の大きいエントリをキャッシュミス情報136から選択して、同様の処理を繰り返す。
【0043】
これに対して、選択したセットとタグに対応するデータが記憶部134に存在しなければ、投機的プリフェッチ部133は、L2キャッシュ13とL3キャッシュ14との間のバスの処理能力に余裕ができるまで待機する。具体的には、投機的プリフェッチ部133は、L2キャッシュ13とL3キャッシュ14との間のバスの処理量が予め設定した処理量閾値よりも小さい場合に、処理能力に余裕があると判定する。投機的プリフェッチ部133は、例えば、バスの処理量としてバスのビジー率(使用率)、ロードストア比率、L2キャッシュ13のキャッシュミス率又はデータ取得に係るレイテンシなどを用いることができる。
【0044】
例えば、ロードストア比率を用いる場合、投機的プリフェッチ部133は、実行命令に対するロード命令数及びストア命令数の比率をL1キャッシュ12から取得する。ロード命令及びストア命令の場合データがバスで運ばれるため、その比率が大きい場合に、投機的プリフェッチ部133は、バスの処理量が大きいと判定できる。また、L2キャッシュ13のキャッシュミスが多い場合、L2キャッシュ13がL3キャッシュ14から取得するデータ量が増加する。そこで、L2キャッシュ13のキャッシュミスが多い場合に、投機的プリフェッチ部133は、バスの処理量が大きいと判定できる。また、データ取得に係るレイテンシは、演算部11によるL1キャッシュ12からのデータ取得にかかる時間である。データ取得に係るレイテンシはL3キャッシュ14やメインメモリ15へのアクセスが増えると増加するため、この値が大きい場合に、投機的プリフェッチ部133は、バスの処理量が大きいと判定できる。
【0045】
L2キャッシュ13とL3キャッシュ14との間のバスの処理能力に余裕ができた後、投機的プリフェッチ部133は、選択したセットとタグに対応するデータが待機中に記憶部134に格納されていないかを確認する。待機中にデータの格納が行われていなければ、投機的プリフェッチ部133は、対応するデータをL3キャッシュ14から取得してL2キャッシュ13の記憶部134に格納する。これにより、投機的プリフェッチ部133は、投機的プリフェッチ処理を実行する。
【0046】
図5は、実施例1に係る制御部によるデータキャッシュ処理のフローチャートである。次に、
図5を参照して、制御部131によるデータキャッシュ処理の流れを説明する。ここでは、演算部11によるデータAへのアクセスが発生した場合で説明する。
【0047】
制御部131は、データAの送信要求をL1キャッシュ12から受ける(ステップS101)。
【0048】
次に、制御部131は、データAが記憶部134に格納されたキャッシュ情報135に存在するか否かを判定する(ステップS102)。
【0049】
データAが記憶部134に格納されたキャッシュ情報135に存在しない場合(ステップS102:否定)、制御部131は、データAのキャッシュミスをキャッシュミス情報更新部132に通知する(ステップS103)。
【0050】
次に、制御部131は、データAの送信をL3キャッシュ14に要求する(ステップS104)。ステップS104は、ステップS103と同時、もしくは、ステップS103の前に行ってもよい。
【0051】
その後、制御部131は、データAをL3キャッシュ14から取得する。そして、制御部131は、データAをSRAMである記憶部134にキャッシュ情報135として格納する(ステップS105)。
【0052】
これに対して、データAが記憶部134に格納されたキャッシュ情報135に存在する場合(ステップS102:肯定)、制御部131は、記憶部134が保持するキャッシュ情報135の中からデータAを取得する。そして、制御部131は、データAをL1キャッシュ12及び演算部11へ送信する(ステップS106)。
【0053】
図6は、キャッシュミス情報更新部によるキャッシュミス情報の更新処理のフローチャートである。次に、
図6を参照して、キャッシュミス情報更新部132によるキャッシュミス情報の更新処理の流れを説明する。
【0054】
キャッシュミス情報更新部132は、キャッシュミスの通知を制御部131から受信する(ステップS201)。
【0055】
次に、キャッシュミス情報更新部132は、キャッシュミスされたデータに対応するエントリ、すなわち通知で指定されたデータのメモリアドレスに含まれるタグに対応するエントリがキャッシュミス情報136に存在するか否かを判定する(ステップS202)。
【0056】
キャッシュミスされたデータに対応するエントリが存在する場合(ステップS202:肯定)、キャッシュミス情報更新部132は、キャッシュミスされたデータに対応するエントリのカウンタ値をインクリメントする(ステップS203)。
【0057】
これに対して、キャッシュミスされたデータに対応するエントリが存在しない場合(ステップS202:否定)、キャッシュミス情報更新部132は、キャッシュミスされたデータに対応するエントリをキャッシュミス情報136に追加する(ステップS204)。この際、キャッシュミス情報更新部132は、追加したエントリのカウンタ値を初期値に設定する。
【0058】
図7は、投機的プリフェッチ部による投機的プリフェッチ処理のフローチャートである。次に、
図7を参照して、投機的プリフェッチ部133による投機的プリフェッチ処理の流れを説明する。
【0059】
投機的プリフェッチ部133は、キャッシュミス情報136の更新通知をキャッシュミス情報更新部132から受信する(ステップS301)。
【0060】
次に、投機的プリフェッチ部133は、データを格納する空き領域が記憶部134に存在するか否かを判定する(ステップS302)。データを格納する空き領域が存在しない場合(ステップS302:否定)、投機的プリフェッチ部133は、投機的プリフェッチ処理を終了する。
【0061】
これに対して、データを格納する空き領域が存在する場合(ステップS302:肯定)、投機的プリフェッチ部133は空いているウェイが存在するセットを選択する(ステップS303)。
【0062】
次に、投機的プリフェッチ部133は、キャッシュミス情報136を参照する。そして、投機的プリフェッチ部133は、キャッシュミス情報136に登録されたエントリの中の未選択のエントリのうちカウンタ値が最大のエントリを選択する(ステップS304)。
【0063】
次に、投機的プリフェッチ部133は、選択したエントリのカウンタ値が判定閾値より大きいか否かを判定する(ステップS305)。選択したエントリのカウンタ値が判定閾値以下の場合(ステップS305:否定)、投機的プリフェッチ部133は、投機的プリフェッチ処理を終了する。
【0064】
これに対して、選択したエントリのカウンタ値が判定閾値よりも大きい場合(ステップS305:肯定)、投機的プリフェッチ部133は、選択したセットとタグに対応するデータが記憶部134に存在するか否かを判定する(ステップS306)。選択したセットとタグに対応するデータが記憶部134に既に存在する場合(ステップS306:肯定)、投機的プリフェッチ部133は、ステップS304へ戻る。
【0065】
これに対して、選択したセットとタグに対応するデータが記憶部134に既に存在しない場合(ステップS306:否定)、投機的プリフェッチ部133は、L2キャッシュ13とL3キャッシュ14との間のバスの処理能力に余裕ができるまで待機する(ステップS307)。
【0066】
その後、投機的プリフェッチ部133は、選択したセットとタグに対応するデータが記憶部134に格納されていないかを再度確認する(ステップS308)。選択したセットとタグに対応するデータが記憶部134に格納されていた場合(ステップS308:肯定)、投機的プリフェッチ部133は、ステップS304へ戻る。
【0067】
これに対して、選択したセットとタグに対応するデータが記憶部134に格納されていない場合(ステップS308:否定)、投機的プリフェッチ部133は、対応するデータをL3キャッシュ14から取得する。そして、投機的プリフェッチ部133は、記憶部134にキャッシュ情報135として格納する(ステップS309)。
【0068】
以上に説明したように、本実施例に係る情報処理装置のキャッシュは、キャッシュミスの頻度が高いアドレス範囲のデータを投機的にプリフェッチしておく。これにより、不規則なデータアクセスが行われる場合に、データがプリフェッチされている可能性を向上させることができる。したがって、限られたメモリバンド幅を無駄なく使用することが可能となり、データ転送を効率化することができる。
MRAM138は、補助キャッシュ情報139及びキャッシュミス情報136を格納する。補助キャッシュ情報139は、投機的プリフェッチ部133が行う投機的プリフェッチにより記憶部134に格納されたデータ群である。
さらに、制御部131は、キャッシュヒットしたデータの格納場所がMRAM138か否かを判定する。取得したデータの格納場所がMRAM138でない場合、制御部131は、キャッシュヒットしたデータをSRAM137に格納したままの状態としてデータキャッシュ処理を終了する。これに対して、キャッシュヒットしたデータの格納場所がMRAM138の場合、制御部131は、キャッシュヒットしたデータへのアクセスをデータモニタ部140に通知する。
投機的プリフェッチ部133は、キャッシュミスの通知をキャッシュミス情報更新部132から受ける。そして、投機的プリフェッチ部133は、キャッシュミス情報136におけるカウンタ値を用いて不規則アクセスのデータが格納されたアドレス範囲を特定する。その後、投機的プリフェッチ部133は、特定したアドレス範囲のデータをL3キャッシュ14から取得する。
ここで、投機的プリフェッチの対象のデータは、ハードウェアプリフェッチなど他のプリフェッチされたデータを含む記憶部134に格納された他のデータよりもアクセスされる可能性が低い。そこで、投機的プリフェッチの対象のデータは、比較的動作速度が遅いメモリに格納してもデータ転送速度への影響は小さい。また、投機的プリフェッチの対象のデータは、より多く保持することでアクセスされる可能性を向上させることができ、投機的プリフェッチの効果を大きくすることができる。ただし、投機的プリフェッチにより得られたデータに対するアクセス頻度が高い場合には、そのデータは動作速度がなるべく速いメモリに格納されることが好ましい。
そこで、投機的プリフェッチ部133は、取得したデータを記憶部134のMRAM138が保持する補助キャッシュ情報139として格納する。すなわち、投機的プリフェッチ部133は、投機的プリフェッチの対象のデータをMRAM138に格納して投機的プリフェッチを行なう。
データモニタ部140は、MRAM138に格納されたデータのアクセス頻度に応じてデータをSRAM137に移動する。以下にデータモニタ部140の詳細について説明する。
データモニタ部140は、MRAM138からSRAM137への移動の判定のための移動閾値を有する。データモニタ部140は、キャッシュヒットしたデータへのアクセスの通知を制御部131から受ける。そして、データモニタ部140は、補助キャッシュ情報139におけるキャッシュヒットしたデータの参照カウンタをインクリメントする。ここで、データモニタ部140は、書込速度が特に遅い場合は、書き込みによるデータアクセスの場合のインクリメント量が読み出しによるデータアクセスの場合のインクリメント量より大きくするようにインクリメント量を変えてもよい。
次に、データモニタ部140は、キャッシュヒットしたデータの参照カウンタが移動閾値を超えたか否かを判定する。キャッシュヒットしたデータの参照カウンタが移動閾値を超えた場合、データモニタ部140は、キャッシュヒットしたデータを格納するための空き領域がSRAM137に存在するか否かを判定する。
キャッシュヒットしたデータを格納するための空き領域がSRAM137に存在する場合、データモニタ部140は、キャッシュヒットしたデータをMRAM138からSRAM137へ移動する。
これに対して、キャッシュヒットしたデータを格納するための空き領域がSRAM137に存在しなければ、データモニタ部140は、SRAM137に格納されたデータの中からキャッシュヒットしたデータを格納するための空き領域を確保するためのリプレイスデータを選択する。データモニタ部140は、例えば、疑似LRU(Least Recently Used)などの一般的に用いられる手法でリプレイスデータの選択を行なう。そして、データモニタ部140は、キャッシュヒットしたデータをMRAM138からSRAM137に移動する。また、データモニタ部140は、選択したリプレイスデータをSRAM137からMRAM138に移動する。
次に、制御部131は、データAが記憶部134に格納されたキャッシュ情報135又は補助キャッシュ情報139のいずれかに存在するか否かを判定する(ステップS402)。
データAが記憶部134に格納されたキャッシュ情報135及び補助キャッシュ情報139のいずれにも存在しない場合(ステップS402:否定)、制御部131は、データAのキャッシュミスをキャッシュミス情報更新部132に通知する(ステップS403)。
その後、制御部131は、データAをL3キャッシュ14から取得する。そして、制御部131は、データAをSRAM137にキャッシュ情報135として格納する(ステップS405)。
これに対して、データAが記憶部134に格納されたキャッシュ情報135又は補助キャッシュ情報139のいずれかに存在する場合(ステップS402:肯定)、制御部131は、記憶部134が保持するキャッシュ情報135又はキャッシュ補助情報139の中からデータAを取得する。そして、制御部131は、データAをL1キャッシュ12及び演算部11へ送信する(ステップS406)。
その後、制御部131は、データAの格納場所がMRAM138か否かを判定する(ステップS407)。データAの格納場所がMRAM138でない場合(ステップS407:否定)、制御部131は、データAをそのままの状態としてデータキャッシュ処理を終了する。
これに対して、データAの格納場所がMRAM138の場合(ステップS407:肯定)、制御部131は、データAへのアクセスをデータモニタ部140に通知する(ステップS408)。その後、制御部131は、データキャッシュ処理を終了する。
次に、データモニタ部140は、データAの参照カウンタが移動閾値より大きいか否かを判定する(ステップS503)。データAの参照カウンタが移動閾値以下の場合(ステップS503:否定)、データモニタ部140は、データの格納処理を終了する。
これに対して、データAの参照カウンタが移動閾値より大きい場合(ステップS503:肯定)、データモニタ部140は、データAを格納するための空き領域がSRAM137に存在するか否かを判定する(ステップS504)。
データAを格納するための空き領域がSRAM137に存在する場合(ステップS504:肯定)、データモニタ部140は、データAをMRAM138からSRAM137へ移動してSRAM137に格納する(ステップS505)。その後、データモニタ部140は、データの格納処理を終了する。
これに対して、データAを格納するための空き領域がSRAM137に存在しない場合(ステップS504:否定)、データモニタ部140は、SRAM137に格納されたデータの中からリプレイスデータを選択する(ステップS506)。ここでは、データモニタ部140が、リプレイスデータとしてデータBを選択した場合で説明する。
次に、データモニタ部140は、データAをMRAM138からSRAM137に移動してSRAM137に格納する。また、データモニタ部140は、データBをSRAM137からMRAM138に移動してMRAM138に格納する(ステップS507)。その後、データモニタ部140は、データの格納処理を終了する。
以上に説明したように、本実施例に係るL2キャッシュは、SRAMとSRAMよりも記憶密度の高いメモリとの混載メモリであり、投機的プリフェッチの対象のデータをSRAMよりも記憶密度の高いメモリに格納する。また、本実施例に係るL2キャッシュは、MRAMに格納したデータのアクセス頻度が高い場合には、そのデータをSRAMに移動する。このように、L2キャッシュに格納されたデータのうちアクセスの可能性が低い投機的プリフェッチによるデータを記憶密度の高いMRAMに格納することで、データの転送速度の低下を抑えつつ、投機的プリフェッチによるデータをより多く保持することができる。これにより、投機的プリフェッチによるキャッシュヒット率を向上させることができ、投機的プリフェッチの効果を大きくすることができる。
制御部131は、データAの取得要求をL1キャッシュ12から受けて、データAが記憶部134のキャッシュ情報135及び補助キャッシュ情報139のいずれかとして格納されているか否かを判定する。この場合、データAは記憶部134に格納されておらず、制御部131はデータAを検出できないため、データAのキャッシュミスが発生する(ステップS601)。
次に、制御部131は、SRAM137にデータAを格納する空き領域が存在するか否かを判定する(ステップS603)。データAを格納する空き領域が存在する場合(ステップS603:肯定)、制御部131は、ステップS608へ進む。
これに対して、データAを格納する空き領域が存在しない場合(ステップS603:否定)、制御部131は、データAを格納する空き領域を確保するために、SRAM137のキャッシュ情報135の中から削除するデータBを選択する(ステップS604)。
次に、制御部131は、MRAM138にデータBを格納する空き領域が存在するか否かを判定する(ステップS605)。データBを格納する空き領域が存在する場合(ステップS605:肯定)、制御部131は、ステップS607へ進む。
これに対して、データBを格納する空き領域が存在しない場合(ステップS605:否定)、制御部131は、データBを格納する空き領域を確保するために、MRAM138の補助キャッシュ情報139から削除するデータを選択する。そして、制御部131は、選択したデータをMRAM138の補助キャッシュ情報139から削除する(ステップS606)。その後、制御部131は、ステップS607へ進む。
以上に説明したように、L2キャッシュ内のMRAMは、L2キャッシュ内でのビクティムキャッシュとして使用することも可能である。これにより、L2キャッシュ内のMRAMをより効率的に使用することが可能となる。