(57)【要約】      （修正有）【課題】キャッシュのムーブイン要求の発行性能を向上する演算処理装置を提供する。【解決手段】キャッシュ１０は、メモリアクセス要求発行部３によるメモリアクセス要求がキャッシュミスした場合にメモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部を有する。ムーブインバッファ制御部は、キャッシュミスしたとき、メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つムーブインバッファに登録中である同一インデックスのムーブイン要求の数がキャッシュメモリのウエイ数未満の場合は、ムーブイン要求を発行し、ムーブインバッファに登録中である同一インデックスのムーブイン要求の数がウエイ数に達している場合は、ムーブインバッファの獲得抑止を決定しムーブイン要求の発行を抑止する。【選択図】図６
2018055568.tif 000002
【特許請求の範囲】
【請求項１】
メモリアクセス要求を発行するメモリアクセス要求発行部と、
タグメモリとデータメモリを有するキャッシュメモリと、前記メモリアクセス要求がキャッシュミスした場合に前記メモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有し、
前記ムーブインバッファ制御部は、前記メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記キャッシュメモリのウエイ数未満の場合は、前記ムーブインバッファの獲得を決定し前記ムーブイン要求を発行し、（ｂ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記ウエイ数に達している場合は、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、演算処理装置。
【請求項２】
前記キャッシュは、さらに、
前記ムーブインバッファ制御部が前記ムーブインバッファを獲得する場合、前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求のウエイ以外のウエイから、前記同一インデックスのメモリアクセス要求に対して発行するムーブイン要求の応答データを登録する前記キャッシュメモリのリプレースウエイを選択し、前記選択したリプレースウエイを前記ムーブインバッファに登録するリプレースウエイ選択部を有する、請求項１に記載の演算処理装置。
【請求項３】
前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数をカウントするマッチカウンタを有し、
前記ムーブインバッファ制御部は、前記同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記マッチカウンタをインクリメントし、前記同一インデックスのメモリアクセス要求に対して発行したムーブイン要求に対するデータ応答後に前記獲得したムーブインバッファを開放する場合、前記マッチカウンタをデクリメントする、請求項１に記載の演算処理装置。
【請求項４】
前記マッチカウンタは、複数の異なる前記同一インデックスのムーブイン要求で共用される共用マッチカウンタを有し、
前記ムーブインバッファ制御部は、前記複数の異なる同一インデックスのうちいずれかの前記同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記共用マッチカウンタをインクリメントし、前記獲得したムーブインバッファを開放する場合、前記共用マッチカウンタをデクリメントする、請求項３に記載の演算処理装置。
【請求項５】
前記マッチカウンタは、単一の前記同一インデックスのムーブイン要求で専用される専用マッチカウンタを有し、
前記ムーブインバッファ制御部は、前記単一の同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記専用マッチカウンタをインクリメントし、前記獲得したムーブインバッファを開放する場合、前記専用マッチカウンタをデクリメントする、請求項３に記載の演算処理装置。
【請求項６】
前記ムーブインバッファ制御部は、前記単一の同一インデックス以外の前記同一インデックスのメモリアクセス要求に対して、前記専用マッチカウンタの値にかかわらず、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、請求項５に記載の演算処理装置。
【請求項７】
前記マッチカウンタは、複数の異なる前記同一インデックスのムーブイン要求でそれぞれ専用される複数の専用マッチカウンタを有し、
前記ムーブインバッファ制御部は、前記同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記同一インデックスに対応する専用マッチカウンタをインクリメントし、前記獲得したムーブインバッファを開放する場合、前記専用マッチカウンタをデクリメントする、請求項３に記載の演算処理装置。
【請求項８】
前記ムーブインバッファは、ムーブイン要求が発行中か否かを示す有効ビットと、発行中のムーブイン要求のインデックス、リプレースウエイ、データをそれぞれ記憶する複数のエントリを有し、さらに、前記各エントリは、登録中のムーブイン要求が前記同一インデックスのムーブイン要求を示す同一インデックスフラグを記憶し、
前記ムーブインバッファ制御部は、前記同一インデックスのメモリアクセス要求に対してムーブインバッファを獲得するときに、前記同一インデックスフラグを登録し、前記獲得したムーブインバッファを開放するとき前記同一インデックスフラグが記憶されている場合、前記マッチカウンタをデクリメントする、請求項３に記載の演算処理装置。
【請求項９】
前記リプレースウエイ選択部は、前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求のウエイ以外のウエイのうち、前記タグメモリ内の前記同一インデックスの無効のウエイを優先して、前記リプレースウエイに選択する、請求項２に記載の演算処理装置。
【請求項１０】
前記リプレースウエイ選択部は、前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求のウエイ以外のウエイが前記タグメモリの前記同一インデックスで有効な場合、アクセスの古さに基づいて前記リプレースウエイを選択する、請求項９に記載の演算処理装置。
【請求項１１】
演算処理装置と、
前記演算処理装置からアクセスされる主記憶装置とを有し、
前記演算処理装置は、
メモリアクセス要求を発行するメモリアクセス要求発行部と、
タグメモリとデータメモリを有するキャッシュメモリと、前記メモリアクセス要求がキャッシュミスした場合に前記メモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有し、
前記ムーブインバッファ制御部は、前記メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記キャッシュメモリのウエイ数未満の場合は、前記ムーブインバッファの獲得を決定し前記ムーブイン要求を発行し、（ｂ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記ウエイ数に達している場合は、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、情報処理装置。
【請求項１２】
メモリアクセス要求を発行するメモリアクセス要求発行部と、
タグメモリとデータメモリを有するキャッシュメモリと、前記メモリアクセス要求がキャッシュミスした場合に前記メモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有する演算処理装置の制御方法であって、
前記ムーブインバッファ制御部は、
前記メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記キャッシュメモリのウエイ数未満の場合は、前記ムーブインバッファの獲得を決定し前記ムーブイン要求を発行し、（ｂ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記ウエイ数に達している場合は、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、情報処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置（プロセッサ、CPU（Central Processing Unit））は、外部に設けられた主記憶装置（メインメモリ）へのアクセスに要する長いレイテンシを回避するために、内部にキャッシュメモリを有する。キャッシュメモリには、プロセッサがメモリアクセス命令を実行したときにメインメモリから読み出したデータが記憶される。そして、プロセッサが同じアドレスについて再度メモリアクセス命令を実行するとき、キャッシュメモリからデータを読み出すことで、メインメモリへのアクセス動作を回避する。
【０００３】
プロセッサの命令発行部がメモリアクセス命令を発行すると、メモリアクセス要求がキャッシュに投入される。そして、キャッシュがアクセスアドレスのデータがキャッシュメモリに保持されているか否かのキャッシュ判定を実行する。この判定がキャッシュヒットの場合、キャッシュはキャッシュメモリ内のデータを命令発行部にデータ応答（データ付の応答）する。一方、キャッシュミスの場合、キャッシュは、メインメモリにより近い下位レベルのキャッシュに、またはメモリ制御回路にムーブイン要求を発行する。
【０００４】
ムーブイン要求とは、あるレベルのキャッシュが、メインメモリにより近い下位レベルのキャッシュにまたはメモリ制御回路に、アクセスアドレスのデータを応答することを求める要求であり、一種のメモリアクセス要求である。ムーブイン要求はキャッシュミスが発生したキャッシュが発行する。
【０００５】
ムーブイン要求については、以下の特許文献に記載されている。
【０００６】
ムーブイン要求の発行からデータ応答まで長時間を要する場合があるため、例えばＬ１キャッシュとＬ２キャッシュとの間に（またはＬ２キャッシュとＬ３キャッシュとの間に）、ムーブイン要求中の情報を登録できるムーブインバッファを有する。そして、Ｌ１キャッシュがムーブイン要求を発行するとき、ムーブインバッファを獲得し、そこに、ムーブイン要求の情報である、キャッシュミスしたキャッシュメモリのインデックス情報（インデックスアドレス）と、データ応答後に応答データをキャッシュ登録するキャッシュのWAY情報とを登録する。
【０００７】
そして、Ｌ２キャッシュがＬ１キャッシュに登録中の古いデータの追い出し要求を発行し、Ｌ１キャッシュからＬ２キャッシュにデータを追い出した後に、Ｌ２キャシュからのデータ応答を受信し、Ｌ１キャッシュは対応するムーブインバッファのデータ領域に新しいデータを格納する。そして、Ｌ１キャッシュは、ムーブインバッファに登録していたインデックス情報とWAY情報に基づいて、その新しいデータをＬ１キャッシュメモリに登録するとともに、命令発行部（またはメインメモリからより遠い上位レベルのキャッシュ）にデータ応答する。データ応答されると、ムーブイン要求の情報を登録していたムーブインバッファは開放される。ムーブインバッファに複数のムーブイン要求情報を登録することで、先行するムーブイン要求に対するデータ応答を受信する前に、次のムーブイン要求を発行する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０８−３２８９６０号公報
【特許文献２】特開平０９−２１８８２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ここで、キャッシュは、同一のインデックス且つ同一のWAYの複数のムーブイン要求を同時期に発行することを抑止することが必要である。その理由は、例えば、後続のムーブイン要求に対するリプレースWAY内のデータの追い出し要求が、先行のムーブイン要求に対するデータ応答を追い越す可能性があるからである。追い越しが発生すると、同一のキャッシュブロック（同一のインデックス且つ同一のWAYのブロック）に対して、後続のムーブイン要求のデータ追い出し後に、先行ムーブイン要求の応答データのキャッシュ登録が行われる。このような動作は、L1キャッシュとL2キャッシュ間でキャッシュコヒーレンシを維持できず、キャッシュでのプロトコルエラーとなる。
【００１０】
一方で、キャッシュは、キャッシュミス発生時に、キャッシュミスしたメモリアクセス要求のキャッシュメモリのインデックスが、ムーブインバッファに登録されている実行中のムーブイン要求と同一のインデックスか否かを判定する。この判定が異なるインデックスの場合、メモリアクセス要求はムーブインバッファを獲得しムーブイン要求が発行される。逆に、判定が同一のインデックスの場合、ムーブインバッファの獲得は抑止され、ムーブイン要求の発行は抑止され、メモリアクセス要求はアボートされて入力ポートに差し戻される。
【００１１】
上記のムーブインバッファの獲得とムーブイン要求の発行の抑制制御によれば、キャッシュミスしたメモリアクセス要求が、ムーブインバッファに登録中のムーブイン要求のインデックスと同一の場合、そのムーブイン要求と異なるWAYであっても、ムーブインバッファの獲得とムーブイン要求の発行が抑制される。このため、先行する同一インデックスのムーブイン要求に対するデータ応答を受信するまで、後続の同一インデックスのムーブイン要求の発行が抑止され、同一のインデックス且つ異なるWAYへの複数のムーブイン要求を並行に発行することができない。その結果、ムーブイン要求の発行先の下位のキャッシュやメモリ制御回路のレイテンシを隠ぺいすることができず、プロセッサの性能低下を招く。
【００１２】
そこで，本開示の第1の側面の目的は，キャッシュのムーブイン要求の発行性能を向上した演算処理装置、情報処理装置及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１３】
第１の側面は，メモリアクセス要求を発行するメモリアクセス要求発行部と、タグメモリとデータメモリを有するキャッシュメモリと、メモリアクセス要求がキャッシュミスした場合にメモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有し、ムーブインバッファ制御部は、メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つムーブインバッファに登録中である同一インデックスのムーブイン要求の数がキャッシュメモリのウエイ数未満の場合は、ムーブインバッファの獲得を決定しムーブイン要求を発行し、（ｂ）メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つムーブインバッファに登録中である同一インデックスのムーブイン要求の数がウエイ数に達している場合は、ムーブインバッファの獲得抑止を決定しムーブイン要求の発行を抑止する、演算処理装置である。
【発明の効果】
【００１４】
第１の側面によれば，キャッシュのムーブイン要求の発行性能を向上することができる。
【図面の簡単な説明】
【００１５】
【図１】本実施の形態の演算処理装置（プロセッサ）の構成を示す図である。
【図２】L1キャッシュとL2キャッシュの構成を示す図である。
【図３】キャッシュメモリの構成例を示す図である。
【図４】図２のL1キャッシュのムーブインバッファ制御部MIB_CNの動作を示す図である。
【図５】ムーブインバッファ制御部の制御を示すタイミングチャート図である。
【図６】本実施の形態におけるL1キャッシュとL2キャッシュの構成を示す図である。
【図７】ムーブインバッファMIBの例を示す図である。
【図８】図６のL1キャッシュの動作を示すフローチャート図である。
【図９】図６のL1キャッシュの動作を示すシーケンス図である。
【図１０】ムーブインバッファ制御部内のインデックスマッチ判定回路と、リプレースWAY選択回路内の同一インデックスのムーブイン要求のリプレースWAY検出回路とを示す図である。
【図１１】リプレースWAY選択回路の真理値表を示す図である。
【図１２】本実施の形態におけるL1キャッシュのムーブインバッファ制御部の制御を示すタイミングチャート図である。
【図１３】図１２のサイクル毎の各命令のステージと動作を示す図である。
【図１４】第１のマッチカウンタ例の１個のマッチカウンタが異なるインデックスアドレスで共用される場合の、動作例を示す図表である。
【図１５】第２のマッチカウンタ例の１個のマッチカウンタが特定のインデックスアドレスに専用となる場合の動作例を示す図表である。
【図１６】第３のマッチカウンタ例の２個のマッチカウンタが最初に発生した２種類の同一インデックスアドレスそれぞれに専用となる場合の動作例を示す図表である。
【発明を実施するための形態】
【００１６】
図１は、本実施の形態の演算処理装置（プロセッサ）の構成を示す図である。プロセッサ１は、例えばCPUチップであり、DRAMなどの主記憶装置（メインメモリ）４０にアクセス可能である。プロセッサ１とメインメモリ４０によりコンピュータなどの情報処理装置が構成される。
【００１７】
プロセッサ１は、例えば複数のCPUコアCR_0, CR_1を有する。各CPUコアは、例えば演算器２、命令発行部３、第１レベルのキャッシュ（L1 CACHE）１０、第２レベルのキャッシュ（L2 CACHE）２０を有する。さらに、プロセッサ１は、複数のCPUコア内のL2キャッシュ２０で共用される第３レベルのキャッシュ（L3 CACHE）３０と、メインメモリへのアクセスを制御するメモリアクセスコントローラMACと、CPUチップの外部に設けられたハードディスク等との入出力を行う入出力回路IOとを有する。
【００１８】
本実施の形態におけるムーブインバッファを有するキャッシュは、例えばL1キャッシュ１０、L2キャッシュ２０、L3キャッシュ３０のいずれにも適用できる。但し、以下の実施の形態の説明ではL1キャッシュ１０に適用した例で説明する。
【００１９】
いずれかのCPUコアにて、命令発行部３がロード命令やストア命令などのメモリアクセス命令を発行すると、L1キャッシュ１０にメモリアクセス要求が投入される。以下の説明ではメモリアクセス命令がロード命令の例で説明する。L1キャッシュ１０は、メモリアクセス要求のアクセスアドレスに基づいてタグメモリを検索しキャッシュ判定しキャッシュヒットするとL1キャッシュ内のデータを命令発行部３に応答する。一方、キャッシュミスすると、L1キャッシュ１０は、L2キャッシュ２０にムーブイン要求を発行する。ムーブイン要求は、メモリアクセス要求のデータをL1キャッシュメモリに登録することを求める要求である。そして、L1キャッシュ１０は、L2キャッシュからデータ応答を受信すると、そのデータを命令発行部３に応答する。
【００２０】
L2キャッシュ２０が、L1キャッシュ１０が発行したムーブイン要求（一種のメモリアクセス要求）についてキャッシュミスすると、上記と同様にL3キャッシュ３０にムーブイン要求を発行する。同様に、L3キャッシュが、L2キャッシュからのムーブイン要求についてキャッシュミスすると、メモリアクセスコントローラMACにムーブイン要求と同等のアクセス要求を発行する。つまり、あるレベルのキャッシュが、受信したメモリアクセス要求についてキャッシュミスすると、よりメインメモリに近いレベルのキャッシュまたはメモリコントローラにムーブイン要求を発行する。
【００２１】
各キャッシュは、メインメモリ側のキャッシュまたはメモリアクセスコントローラとの間に、ムーブイン要求の情報を登録するムーブインバッファ（図示せず）を有する。キャッシュに複数のムーブインバッファを設けることで、キャッシュは複数のムーブイン要求の情報を登録することができ、短時間の間に複数のムーブイン要求を発行することができる。
【００２２】
図２は、L1キャッシュとL2キャッシュの構成を示す図である。L2キャッシュとL3キャッシュの構成も同様である。また、L3キャッシュとメモリアクセスコントローラMACの構成も、メモリアクセスコントローラMACにはキャッシュメモリがないことを除いて、同様である。
【００２３】
L1キャッシュ１０は、命令発行部３からのメモリアクセス要求M_RQや滞留したメモリアクセス要求RQ_STYなどを格納する複数のリクエストポート１１と、複数のリクエストポート内の要求を、所定の優先度に基づいて選択する要求選択回路RQ_SELとを有する。要求選択回路RQ_SELは選択したメモリアクセス要求をL1キャッシュ１０内のキャッシュパイプラインに投入する。
【００２４】
キャッシュパイプラインは、TLB（Translation Lookaside Buffer）、キャッシュメモリを構成するデータメモリDATA_RAM及びタグメモリTAG_RAMと、ムーブインバッファ制御部MIB_CNと、リプレースWAY選択回路RPL_SELなどで構成される。TLBはメモリアクセス要求M_RQの論理アドレスを物理アドレスに変換する。タグメモリTAG_RAMはキャッシュ登録されているデータの有効性とアドレス情報が登録され、メモリアクセス要求のキャッシュヒット判定で参照される。そして、タグメモリは、キャッシュヒットの場合にそのWAY情報HIT_WAYをLRUに出力し、キャッシュミスの場合にキャッシュミスMISSをムーブインバッファ制御部MIB_CNに出力する。
【００２５】
ムーブインバッファ制御部MIB_CNは、タグメモリでキャッシュミスしたメモリアクセス要求に対してムーブインバッファMIBを獲得し、ムーブイン要求MI_RQをL2キャッシュ２０に発行する。リプレースWAY選択回路RPL_SELは、LRUからのLRU情報LRU_INFに基づいて、ムーブイン要求に対する応答データをキャッシュメモリのどのウエイに登録するかを示すリプレースウエイRPL_WAYを選択する。
【００２６】
上記以外に、L1キャッシュ１０は、LRU回路LRUと、ムーブインバッファMIBを有する。LRU回路は、キャッシュヒットしたWAY情報HIT_WAYとムーブインバッファMIB内のムーブイン要求のWAY情報MI_WAYに基づいて、キャッシュメモリ（DATA_RAM, TAG_RAM）の各WAYへのアクセスの古さを判定し、LRU情報LRU_INFを出力する。ムーブインバッファMIBは、ムーブイン要求が発行される場合に獲得され、実行中のムーブイン要求の情報（有効ビット、インデックスアドレスIDX_ADD、リプレースWAY、データ）を記録され、ムーブイン要求に対するデータ応答を受信してデータをキャッシュ登録すると開放される。
【００２７】
図３は、キャッシュメモリの構成例を示す図である。図３のキャッシュメモリは４WAYセットアソシエティブの例である。キャッシュメモリを構成するタグメモリTAG_RAMとデータメモリDATA_RAMは、インデックス０〜ｎのキャッシュラインを有する。そして、メモリアクセス要求のアクセスアドレスA_ADDの下位の一部のアドレスADD_2がインデックスアドレスとして、図示しないデコーダに入力され、インデックスアドレスに対応する一つのインデックスが選択される。また、アクセスアドレスA_ADDの上位アドレスADD_1（論理アドレスをTLBにより変換した物理アドレスの上位アドレス）は、タグメモリTAG_RAMに記憶される。つまり、タグメモリTAG_RAMには、有効ビットValidと上位アドレスADD_1が記憶される。
【００２８】
そして、４つの比較器CMPが、インデックスアドレスADD_2で選択されたタグメモリのインデックスの４つのウエイWAY内のアドレスADD_1それぞれと、アクセスアドレスA_ADDの上位アドレスADD_1（論理アドレスをTLBにより変換した物理アドレスの上位アドレス）とを、それぞれの比較し、一致ならヒットWAY情報W0-W3を「１」（キャッシュヒットを示す）にする。キャッシュヒットの場合、一つの比較器がヒットWAY情報W0-W3を「１」にし、キャッシュミスの場合、４つの比較器CMP全てがヒットWAY情報W0-W3を「０」にする。
【００２９】
また、ウエイセレクタWAY_SELが、データメモリDATA_RAMからインデックスアドレスADD_2により選択された４つのWAYのデータDATAのうち、ヒットWAY情報W0-W3に基づいて、一致したウエイのデータを選択する。
【００３０】
このように、セットアソシエティブのキャッシュメモリは、インデックスアドレスADD_2で選択されるインデックス毎にキャッシュブロックにまとめ、そのブロック内のデータをまとめて記憶する。また、キャッシュメモリは、同じインデックスアドレスADD_2に対して、最大でWAY数分（図３ではWAY数＝４）のメモリブロックのデータDATAを登録する。なお、アクセスアドレスA_ADDの下位アドレスADD_3は、図示しないが、選択されたキャッシュブロックからアクセス先データを選択するために使用される。
【００３１】
上記の通り、キャッシュメモリのインデックスはインデックスアドレスADD_2により選択され、インデックスアドレスが同一なら選択されるインデックスも同一である。以下の説明では、メモリアクセス要求のインデックスアドレスADD_2を便宜的にインデックスと称し、ムーブインバッファに記憶されている要求中のムーブイン要求のインデックスアドレスIDX_ADDを便宜的にインデックスと称する場合がある。
【００３２】
図４は、図２のL1キャッシュのムーブインバッファ制御部MIB_CNの動作を示す図である。まず、命令発行部が発行したメモリアクセス要求が要求選択回路RQ_SELによりキャッシュパイプラインに投入されると、TLBでメモリアクセス要求の論理アドレスが物理アドレスに変換され、図３で説明したようにタグメモリTAG_RAMでキャッシュヒット判定が行われる。そこで、キャッシュミスが発生すると、ムーブインバッファ制御部MIB_CNはL1キャッシュミスMISSを受信する（S1）。このL1キャッシュミスMISSは、キャッシュミスしたメモリアクセス要求であり、アクセスアドレスを有する。
【００３３】
ムーブインバッファ制御部は、ムーブインバッファMIBに空きエントリがあるか否かを判定する（S2）。この判定は、ムーブインバッファMIBの全てのエントリの有効ビットをチェックすることで行われる。例えば、全ての有効ビットを入力とするANDゲートの出力が「１」であれば空きはなく、「０」であれば空きがあることを判定できる。空きがない場合は、ムーブインバッファを獲得できないので、キャッシュミスしたメモリアクセス要求に対してムーブイン要求を発行できない。そのため、ムーブインバッファ制御部は、キャッシュミスしたメモリアクセス要求をリクエストポート１１に差し戻し（図２中、要求滞留RQ_STY）（S3）、そのメモリアクセス要求は次の機会までキャッシュパイプラインへの投入が抑止される。
【００３４】
さらに、ムーブインバッファ制御部は、ムーブインバッファ内にメモリアクセス要求のインデックスアドレスADD_2に対するインデックスと同一のインデックスに対するインデックスアドレスIDX_ADDが登録済みか否かを判定する（S4）。この判定は、例えば、ムーブインバッファMIB内の全てのインデックスアドレスIDX_ADDそれぞれと、メモリアクセス要求のインデックスアドレスADD_2との一致（マッチ）をそれぞれ検出するインデックスマッチ回路により判定できる。図２のL1キャッシュは、ムーブインバッファ制御部は、ムーブインバッファMIB内に同一インデックス（即ち同一インデックスアドレス）のムーブイン要求が登録されていると、ムーブインバッファの獲得をせず、メモリアクセス要求をリクエストポート１１に差し戻す（S3）。
【００３５】
一方、ムーブインバッファに空きがあり（S2のYES）、且つムーブインバッファに同一インデックスのムーブイン要求が登録済みでない場合（S4のNO）、ムーブインバッファ制御部は、ムーブインバッファ獲得指示MIB_AQを出す（S5）。これにより、ムーブインバッファの空きエントリの有効ビットを有効状態「１」に設定してムーブインバッファを獲得する（S6）。この獲得の際に、メモリアクセス要求のインデックスアドレスADD_2をムーブインバッファのインデックスアドレスIDX_ADDの領域に登録する。
【００３６】
その後、図４には示されていないが、リプレースWAY選択回路RPL_SELが、キャッシュメモリ内のメモリアクセス要求のインデックスIDXにおける４つのWAYのうち最古にアクセスされたWAYを示すLRU情報LRU_INFに基づいて、ムーブイン要求に対する応答データをキャッシュ登録する先のリプレースWAYを選択する。通常、アクセスが最も古いWAYが選択される。リプレースWAY内のデータが、ムーブイン要求の応答データと置き換えられるからである。
【００３７】
図２，４のムーブインバッファ制御部は、キャッシュミスしたメモリアクセス要求と同一のインデックスがムーブインバッファ内に登録中でない場合にムーブインバッファを獲得しムーブイン要求を発行する。従って、リプレースWAY選択回路は、キャッシュメモリのそのインデックスのいずれかのWAYをリプレースWAYに選択することができる。したがって、前述の通りLRU情報に基づいてリプレースWAYが選択される。
【００３８】
やがて、L1キャッシュ１０は、L2キャッシュ２０からデータ応答を受信する（S8のYES）。この応答されたデータはムーブインバッファMIBの対応するエントリのデータ領域にストアされ、ムーブインバッファに登録されているインデックスアドレスとリプレースWAYに基づいてキャッシュメモリのリプレース対象のブロックに応答データが登録される（S9）。キャッシュメモリへの登録後、ムーブインバッファ制御部は、ムーブインバッファのエントリの有効ビットをインバリッドにしてそのエントリを開放する（S10）。
【００３９】
尚、図４には示していないが、キャッシュメモリのリプレースWAYに有効なデータが登録されている場合、L2キャッシュは、データ応答する前に、そのインデックスのリプレースWAYのデータをL2キャッシュメモリに追い出すオーダを発行する。追い出しが完了した後、L2キャッシュからの応答データがリプレースWAYにキャッシュ登録される。
【００４０】
ここで、キャッシュは、キャッシュメモリでの同一のインデックス且つ同一のWAYのキャッシュブロックをリプレースブロックとする複数のムーブイン要求を、同時期に発行することを、抑止することが必要である。その理由は、例えば、後続のムーブイン要求に対するリプレースWAY内のデータの追い出し要求が、先行のムーブイン要求に対するデータ応答を追い越す可能性があるからである。追い越しが発生すると、同一のキャッシュブロック（同一のインデックス且つ同一のWAYのブロック）に対して、後続のムーブイン要求のデータ追い出し後に、先行ムーブイン要求の応答データのキャッシュ登録が行われる。このような動作は、L1キャッシュとL2キャッシュ間でキャッシュコヒーレンシを維持できず、キャッシュでのプロトコルエラーとなる。また、後続のムーブイン要求の応答データがキャッシュ登録された後に、先行のムーブイン要求の応答データがキャッシュ登録されることも回避すべきである。
【００４１】
ところが、図２、図４のL1キャッシュは、キャッシュミス発生時に、キャッシュミスしたメモリアクセス要求のキャッシュメモリのインデックスが、ムーブインバッファに登録されている処理中のムーブイン要求と同一のインデックスか否かを判定する。この判定が異なるインデックスの場合（具体的には異なるインデックスアドレスの場合）、メモリアクセス要求はムーブインバッファを獲得しムーブイン要求が発行される。逆に、判定が同一のインデックスの場合、ムーブインバッファの獲得は抑止され、ムーブイン要求の発行は抑止され、メモリアクセス要求はアボートされてリクエストポート１１に差し戻される。
【００４２】
上記のムーブインバッファ制御部によれば、キャッシュミスしたメモリアクセス要求が、ムーブインバッファに登録中のムーブイン要求のインデックスと同一の場合、登録中のムーブイン要求と異なるWAYであっても、ムーブインバッファの獲得とムーブイン要求の発行が抑制される。このため、先行する同一インデックスのムーブイン要求に対するデータ応答を受信するまで、後続の同一インデックスのムーブイン要求の発行が抑止され、同一のインデックス且つ異なるWAYへの複数のムーブイン要求を並行に発行することができない。その結果、ムーブイン要求の発行先のキャッシュやメモリ制御回路のレイテンシを隠ぺいすることができず、プロセッサの性能低下を招く。
【００４３】
図５は、ムーブインバッファ制御部の制御を示すタイミングチャート図である。前提として命令１〜９は全て同一インデックス（同一インデックスアドレス）に対するメモリアクセス要求である。そして、各命令はL1キャッシュのパイプラインのP,T,M,S,B,R,R1ステージを経てキャッシュミスの発生（M）とムーブイン要求の発行（R）を伴う。
【００４４】
前述のとおり、命令１でキャッシュミスして０番目のムーブインバッファを獲得した後、後続の命令２〜７は登録中のムーブイン要求と同じインデックス（同じインデックスアドレス）に対する要求であるため、後続の命令２〜７に対するムーブインバッファの獲得が抑止され、ムーブイン要求が発行されない。０番目以外の１〜３番目のムーブインバッファが空いていて、且つ命令１のリプレースWAY以外のWAYがムーブインバッファに登録されてなくても、ムーブインバッファを獲得できずムーブイン要求も発行されない。結局、命令１のムーブイン要求が完了して０番目のムーブインバッファが開放された後に、命令８のインデックスがムーブインバッファ内の実行中のムーブイン要求と同一インデックス（同一インデックスアドレス）ではなくなり、ムーブインバッファを獲得しムーブイン要求を発行される。
【００４５】
上記の問題点は、プロセッサの動作周波数の上昇に伴いキャッシュパイプラインのステージ間の動作時間が短くなることにも起因する。例えば、同一インデックス且つ異なるWAYへのムーブイン要求を並列に発行するためには、後続のメモリアクセス要求に対して、全てのムーブインバッファから同一インデックスアドレスを有するエントリのWAY情報を抽出し、ムーブイン要求中でないWAYを判定した後に、ムーブインバッファを獲得することを、キャッシュパイプラインの１つのステージ（１クロックサイクル）で完了することが必要になる。しかし、動作周波数の上昇によりそのような複雑な処理を１ステージで完了することは困難である。
【００４６】
［本実施の形態］
［キャッシュの構成］
図６は、本実施の形態におけるL1キャッシュとL2キャッシュの構成を示す図である。L2キャッシュとL3キャッシュに適用した場合の構成も同様である。また、L3キャッシュとメモリアクセスコントローラMACに適用した場合の構成も、メモリアクセスコントローラMACにはキャッシュメモリがないことを除いて、同様である。
【００４７】
図６のL1キャッシュ１０で図２のL1キャッシュと異なる構成は、第１に、ムーブインバッファに登録中である同一インデックス（同一インデックスアドレス）のムーブイン要求の数をカウントするマッチカウンタMCH_CNTを設けていることである。そして、ムーブインバッファ制御部MIB_CNが、キャッシュミスしたメモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックス（以下同一インデックスと称する。）を有し、且つマッチカウンタの値がムーブインバッファに登録中の同一インデックスのムーブイン要求の数がキャッシュメモリのWAY数未満であることを示す場合は、ムーブインバッファの獲得を決定する。一方、メモリアクセス要求が登録中のいずれかのムーブイン要求と同一インデックスを有し、且つマッチカウンタの値がWAY数に達していることを示す場合は、ムーブインバッファの獲得抑止を決定する。
【００４８】
第２に、リプレースWAY選択回路RPL_SELは、ムーブインバッファに登録中である同一インデックスのムーブイン要求のWAY以外のWAYから、同一インデックスのメモリアクセス要求に対して発行するムーブイン要求のリプレースWAYを選択する。そのために、リプレースWAY選択回路には、ムーブインバッファに登録されているムーブイン要求のWAY情報MI_WAYが供給される。
【００４９】
また、リプレースWAY選択回路には、ムーブインバッファ制御部に設けられたインデックスマッチ判定回路の一致結果も供給される。この一致結果と、ムーブイン要求のWAY情報MI_WAYとから、ムーブインバッファに登録中である同一インデックスのムーブイン要求のWAYの情報を得る。
【００５０】
好ましくは、リプレースWAY選択回路は、タグメモリTAG_RAMの同一インデックスの各WAYの有効ビットも供給される。そして、タグメモリの同一インデックスの４つのWAYで有効ビットが無効のWAYが、ムーブインバッファに登録されているムーブイン要求のWAY以外のWAYに該当する場合、LRU情報に基づくことなく、それらのWAYから所定のWAYをリプレースWAYに選択する。後述するケース１の場合である。
【００５１】
さらに好ましくは、リプレースWAY選択回路は、LRU情報LRU_INFも供給され、ムーブインバッファに登録中である同一インデックスのムーブイン要求のWAY以外のWAYから、LRU情報に基づいてリプレースWAYを選択する。後述するケース２の場合である。
【００５２】
上記のマッチカウンタは、例えばムーブインバッファに登録中のムーブイン要求と同一のインデックスへのメモリアクセス要求のためにムーブインバッファを獲得する場合、１つインクリメントされる。また、マッチカウンタは、同一インデックスのムーブイン要求に対する応答データをキャッシュ登録した後にムーブインバッファを解放する場合、１つデクリメントされる。つまり、マッチカウンタは、ムーブインバッファに登録中の同一インデックスのムーブイン要求の数をカウントする。
【００５３】
本実施の形態におけるムーブインバッファ制御部は、キャッシュミスしたメモリアクセス要求のインデックスアドレスが、ムーブインバッファ登録中のインデックスアドレスと一致するか否かの判定を行う。一方、新たなムーブイン要求のリプレースWAYが、ムーブインバッファ登録中の同一インデックスのムーブイン要求のリプレースWAYと一致するかの判定は行わない。代わりに、ムーブインバッファ制御部は、マッチカウンタのカウント値がキャッシュメモリのWAY数に達しているか否か、つまり未満か否かの判定を行い、未満であれば同一インデックスのムーブイン要求を発行可能と判断し、ムーブインバッファを獲得する。達していればムーブインバッファの獲得を抑止する。
【００５４】
ムーブインバッファ制御部が、マッチカウンタの管理を上記のように行うことで、マッチカウンタのカウンタ値がWAY数未満を示すか否かに基づいて、少なくとも同一インデックスへのムーブイン要求を発行可能か否かを判定できる。しかも、マッチカウンタのカウンタ値による判定は短時間で完了する。但し、リプレースWAY選択回路が、どのWAYにムーブイン要求を発行できるかの判定を後で行う。つまり、リプレースWAY選択回路が、登録中である同一インデックスのムーブイン要求のWAY以外のWAYから新たなムーブイン要求のWAYを選択する。
【００５５】
したがって、本実施の形態では、高周波クロックによるキャッシュパイプライン構成でも、ムーブインバッファ制御部が、短い時間で同一インデックスのムーブイン要求を異なるリプレースWAYに対して発行することができる。
【００５６】
図６のL1キャッシュ１０では、図２と異なり、マッチカウンタのデクリメント処理のために、ムーブインバッファMIBにインデックスマッチフラグIDX_MCH_FLGを登録する。つまり、ムーブインバッファ制御部は、同一インデックスのムーブイン要求を発行するためにムーブインバッファ獲得するときにインデックスマッチフラグを「１」に設定する。同時にマッチカウンタを１つインクリメントする。そして、データ応答のムーブインバッファのインデックスマッチフラグが「１」の場合に、マッチカウンタを１つデクリメントする。通常、ムーブイン要求にはムーブインバッファのインデックス（番号）が付与されるので、そのインデックスのムーブインバッファのインデックスマッチフラグが参照され、「１」の場合にマッチカウンタが１つデクリメントされる。
【００５７】
図６のL1キャッシュの上記した図２と異なる構成以外は、同等である。したがって、図６のL1キャッシュの図２と同じ構成についての説明を省略する。ただし、図６中には、キャッシュパイプラインの各ステージＰ，Ｔ，Ｍ，Ｓ，Ｂ，Ｒ，Ｒ１，Ｒ２の位置が示される。このステージについては、後述する図６のL1キャッシュの動作説明で詳述する。
【００５８】
図７は、ムーブインバッファMIBの例を示す図である。ムーブインバッファは、ムーブインバッファ番号の各エントリに、有効ビットVALID、インデックスアドレスIDX_ADD、リプレースWAY番号WAY、データDATA、同一インデックスへのムーブイン要求か否かを示すインデックスマッチフラグIDX_MCH_FLGをそれぞれ記憶する。有効ビットVALIDは、例えば、有効で「１」無効で「０」、インデックスマッチフラグIDX_MCH_FLGは、例えば、同一インデックスによるムーブイン要求なら「１」同一インデックスによるムーブイン要求でないなら「０」である。また、インデックスアドレスIDX_ADDにはメモリアクセス要求のインデックスアドレスADD_2が記憶される。リプレースWAY番号WAYにはリプレースWAY選択回路が選択したWAY番号が記憶される。ムーブイン要求を発行する段階ではデータDATA以外の情報が記憶され、データ応答されると応答データがデータDATAに記憶される。
【００５９】
［キャッシュの動作］
次に、図６のL1キャッシュの動作について説明する。図２の動作と一部重複する説明もあるが、図２の動作と一部重複する部分も含めて説明する。
【００６０】
図８は、図６のL1キャッシュの動作を示すフローチャート図である。また、図９は、図６のL1キャッシュの動作を示すシーケンス図である。いずれの図にも、キャッシュパイプラインステージＰ，Ｔ，Ｍ，Ｓ，Ｂ，Ｒ，Ｒ１，Ｒ２が示される。
【００６１】
各キャッシュパイプラインステージは以下の通りである。
Ｐステージ：パイプラインに命令を投入するか否かを決定する。
Ｔステージ：TLBでアドレス変換（論理アドレスから物理アドレスへ変換）し、TAGメモリ、DATAメモリにアクセスする。
Ｍステージ：キャッシュヒット判定を行う。
Ｓステージ：キャッシュヒットの場合、４つのWAYのデータを読み出し、アドレスが一致したWAY番号のデータを選択して出力する。キャッシュミスの場合、ムーブインバッファに空きがあるかの判定と、インデックスアドレスが一致するかの判定とを行い、両方真ならマッチカウンタがWAY数に達しているか否かの判定とを行う。
Ｂステージ：キャッシュヒットの場合、データを命令発行部に応答する。キャッシュミスの場合、マッチカウンタがWAY数に達していないならムーブインバッファ確保指示、達していたらムーブインバッファの獲得を抑止しメモリアクセス要求の滞留指示をする。
Ｒステージ：キャッシュヒットの場合、メモリアクセス要求のアクセス結果を命令発行部へ通知し、メモリアクセス要求を終了する。キャッシュミスの場合、ムーブインバッファを確保し（有効ビットを「１」にし、インデックスアドレスを登録し、インデックスアドレスが一致していた場合インデックスマッチフラグを「１」にする）、ムーブイン要求を発行する。
Ｒ１ステージ：キャッシュミスの場合、マッチカウンタをインクリメントし、リプレースWAYを確定する。
Ｒ２ステージ：キャッシュミスの場合、リプレースWAYをムーブインバッファに登録する。
Ｒ３ステージ以降：キャッシュミスの場合、ムーブインバッファからリプレースWAYの読み出しが可能になり、L2キャッシュからデータ応答を受信するのを待つ。
【００６２】
次に、L1キャッシュの動作を図８、図９を参照して説明する。まず、命令発行部が発行したメモリアクセス要求が要求選択回路RQ_SELによりキャッシュパイプラインに投入されると（Pステージ）、TLBでメモリアクセス要求の論理アドレスが物理アドレスに変換される（Tステージ）。そして、タグメモリTAG_RAMでキャッシュヒット判定が行われる（S1,Mステージ）。そこで、キャッシュミスが発生すると、ムーブインバッファ制御部MIB_CNはL1キャッシュミスMISSを受信する。
【００６３】
ムーブインバッファ制御部は、ムーブインバッファMIBに空きエントリがあるか否かを判定する（S2,Sステージ）。この判定は、図４と同様に、ムーブインバッファMIBの全てのエントリの有効ビットをチェックすることで行われる。空きがない場合は、ムーブインバッファを獲得できないので、キャッシュミスしたメモリアクセス要求に対してムーブイン要求を発行できない。そのため、ムーブインバッファ制御部は、キャッシュミスしたメモリアクセス要求をリクエストポート１１に差し戻し（図６中、要求滞留RQ_STY）（S3）、そのメモリアクセス要求は次の機会までキャッシュパイプラインへの投入が抑止される。
【００６４】
さらに、ムーブインバッファ制御部は、ムーブインバッファ内にメモリアクセス要求のインデックスアドレスADD_2に対するインデックスと同一のインデックスに対するインデックスアドレスIDX_ADDが登録済みか否かを判定する（S4,Sステージ）。この判定は、例えば、ムーブインバッファMIB内の全てのインデックスアドレスIDX_ADDそれぞれと、メモリアクセス要求のインデックスアドレスADD_2との一致（マッチ）をそれぞれ検出するインデックスマッチ判定回路により行われる。
【００６５】
ムーブインバッファ制御部は、ムーブインバッファMIB内にキャッシュミスしたメモリアクセス要求と同一インデックス（即ち同一インデックスアドレス）のムーブイン要求が登録されていないと（S4のNO）、ムーブインバッファの獲得指示を出す（S5,Bステージ）。そして、ムーブイン要求の情報をムーブインバッファに書き込みムーブインバッファを獲得するとともに（S6,Rステージ）、ムーブイン要求を発行する（S7，Rステージ）。
【００６６】
一方、ムーブインバッファMIB内にメモリアクセス要求と同一インデックス（即ち同一インデックスアドレス）のムーブイン要求が登録されていると（S4のYES）、図６のL1キャッシュでは、さらに、ムーブインバッファ制御部が、マッチカウンタがキャッシュメモリのWAY数に達しているか（マッチカウンタがフルか）否かを判定する（S11，Sステージ）。このマッチカウンタによる判定が図２とは異なる。
【００６７】
マッチカウンタがWAY数に達している場合（S11のYES）、ムーブインバッファを獲得せず、メモリアクセス要求をリクエストポート１１に差し戻す（S3）。一方、マッチカウンタがWAY数に達していない場合（S11のNO）、ムーブインバッファ制御部はムーブインバッファ獲得指示MIB_AQを行う（S12,Bステージ）。
【００６８】
即ち、ステージSで、ムーブインバッファに空きがあり（S2のYES）、ムーブインバッファにメモリアクセス要求と同一インデックスのムーブイン要求が登録済みであり（S4のYES）、マッチカウンタがWAY数に達していない場合（S11のNO）、ムーブインバッファ制御部は、ムーブインバッファ獲得指示MIB_AQを出す（S12）。これにより、ムーブインバッファの空きエントリの有効ビットを有効状態「１」に設定してムーブインバッファを獲得する（S13,Rステージ）。この獲得の際に、メモリアクセス要求のインデックスアドレスADD_2をムーブインバッファのインデックスアドレスIDX_ADDの領域に登録し、更に、インデックスマッチフラグIDX_MCH_FLGを有効化「１」にする（S13,Rステージ）。
【００６９】
その後、ムーブインバッファ制御部は、マッチカウンタMCH_CNTを１つインクリメントする（S15,R1ステージ）。
【００７０】
そして、ステージR1までに、リプレースWAY選択回路RPL_SELが、ムーブインバッファ内のWAY情報MI_WAYと、ムーブインバッファ制御部からのムーブインバッファのどの番号が同一のインデックスアドレスIDX_ADDを有しているかの情報とから、同一のインデックスのムーブイン要求がどのWAYをリプレースWAYに登録中かを判定する。そして、同一インデックスのムーブイン要求のWAY以外のWAYから、新たに発行するムーブイン要求のリプレースWAYを選択し（S16,R1ステージ）、ムーブインバッファに登録する（S16,R2ステージ）。一例として、同一インデックスのムーブイン要求のWAY以外のWAYから、TAGメモリで無効のWAYを、またはLRU情報LRU_INFで最も古いWAYを、リプレースWAYに選択する。
【００７１】
やがて、L1キャッシュ１０は、L2キャッシュ２０からデータ応答を受信する（S8のYES）。この応答されたデータはムーブインバッファMIBの対応するエントリのデータ領域DATAにストアされる。さらに、ムーブインバッファに登録されているインデックスアドレスとリプレースWAYに基づいてキャッシュメモリのリプレース対象のブロックにデータ応答のデータが登録される（S9）。キャッシュメモリへの登録後、ムーブインバッファ制御部は、ムーブインバッファのエントリの有効ビットをインバリッド（無効）にしてそのエントリを開放する（S10）。
【００７２】
ムーブインバッファのエントリのインデックスマッチフラグIDX_MCH_FLGが「１」なら（S17のYES）、同一のインデックスのムーブイン要求に対するデータ応答であるので、ムーブインバッファ制御部は、マッチカウンタを１つデクリメントする（S18）。
【００７３】
尚、図９に示すとおり、キャッシュメモリのリプレースWAYに有効なデータが登録されている場合、L2キャッシュは、データ応答する前に、そのインデックスのリプレースWAYのデータをL2キャッシュメモリに追い出すオーダEJ_ODを発行する。キャッシュメモリからデータの追い出しが完了した後、L2キャッシュからの応答データがリプレースWAYにキャッシュ登録される。最後に、L1キャッシュ１０は、命令発行部３にデータ応答する。
【００７４】
図１０は、ムーブインバッファ制御部内のインデックスマッチ判定回路と、リプレースWAY選択回路内の同一インデックスのムーブイン要求のリプレースWAY検出回路とを示す図である。ムーブインバッファ制御部MIB_CN内のインデックスマッチ判定回路IDX_MCH_JDGは、n+1個のマッチ判定回路MCH0-nと、論理OR回路OR0とを有する。マッチ判定回路MCH0-nは、キャッシュミスしたメモリアクセス要求のインデックスアドレスADD_2と、ムーブインバッファMIB内のすべてのインデックスアドレスIDX_ADDそれぞれとの一致（マッチ）をそれぞれ判定する。論理OR回路OR0は、マッチ判定回路の出力（一致で「１」不一致で「０」）の論理ORであるインデックスマッチ（一致）出力IDX_MCHを出力する論理OR回路である。ムーブインバッファ制御部MIB_CNは、このインデックスマッチ判定回路IDX_MCH_JDGのインデックスマッチ出力IDX_MCHにより、キャッシュミスしたメモリアクセス要求のインデックスアドレスADD_2がムーブインバッファMIB内に登録中のいずれかのムーブイン要求のインデックスアドレスIDX_ADDと一致するか否かの判定（S4）を行う。
【００７５】
リプレースWAY選択回路RPL_SEL内の同一インデックスのムーブイン要求のリプレースWAY検出回路RPL_WAY_DTは、ムーブインバッファMIBのリプレースWAYをデコードするデコーダDECと、各マッチ判定回路MCH0-nの出力と各デコーダ出力それぞれの論理積を出力するAND回路AND0-nと、AND回路の出力の論理ORを出力する論理OR回路OR1とを有する。
【００７６】
デコーダDECは、４個のWAY数の場合、リプレースWAY番号が「10」の場合に３番目がリプレースWAYであることを示すコード[0100]に変換する。したがって、４ビットのコードの「１」の位置がリプレースWAYの位置であることが示される。また、AND回路AND0-nは、それぞれインデックスアドレスがマッチした（一致した）場合のリプレースWAY番号をデコード化したコード「１」か、インデックスアドレスがアンマッチした（不一致した）場合の「０」のいずれかを出力する。そして、各AND回路AND0-nは、インデックスアドレスが不一致なら４ビットが全てゼロのコード[0000]を出力し、インデックスアドレスが一致しコードが[0100]の場合、[0100]を出力する。さらに、論理OR回路OR1は、n+1個のAND回路の出力の論理ORを出力する。つまり、論理OR回路OR1が出力する４ビットコードは、登録中の同一インデックスのムーブイン要求の全てリプレースWAYの位置を示す。
【００７７】
図１１は、リプレースWAY選択回路の真理値表を示す図である。図１０で説明したとおり、リプレースWAY選択回路RPL_SEL内のリプレースWAY検出回路RPL_WAY_DTは、ムーブインバッファ制御部MIB_CNからキャッシュミスしたメモリアクセス要求のインデックスアドレスADD_2と同じインデックスアドレスIDX_ADDを有するムーブインバッファの番号を供給され、ムーブインバッファ内のWAY情報に基づいて、同一インデックスのムーブイン要求が獲得中のWAY情報を抽出する。また、L1キャッシュのTAGメモリから同一インデックスで無効な（invalid）WAY情報を供給され、さらに、LRU回路からLRU情報が供給される。同一インデックスで無効なWAY情報とは、L1キャッシュメモリに有効なデータが登録されていないWAY番号である。
【００７８】
そして、リプレースWAY選択回路は、第1に、L1キャッシュのTAGメモリの同一インデックスに無効なWAYがある場合、図中ケース１に示される真理値表に基づいてリプレースWAY（RPL_WAY）を選択する。ケース１には、４つのWAY（W0,W1,W2,W3）について、TAGメモリの同一のインデックスで無効であり、且つムーブインバッファを獲得していないという２つの条件を満たすWAYの組み合わせ（パターン１−１〜１−４）が示され、それぞれのパターンに対するリプレースWAY（RPL_WAY）が示される。
【００７９】
真理値表に示されるとおり、ケース１では、リプレースWAY選択回路は、TAGメモリの同一のインデックスで無効（invalid）のWAYであり、且つムーブインバッファ内の同一のインデックスのムーブイン要求がリプレースWAYに選択していないWAYを検出する。この２つの条件が満たされるWAYが存在する場合、リプレースWAY選択回路は、ケース１の真理値表に基づき、２つの条件を満たすWAYのいずれかをリプレースWAY（RPL_WAY）に選択する。TAGメモリで無効のWAYであるので、LRU情報に基づく選択は行っていない。
【００８０】
なお、図中のケース１の真理値表は、若い番号のWAYを優先して選択している。例えば、パターン１−１では、２つの条件を満たすWAYがW0の場合、他のWAY（W1,W2,W3）にかかわらずリプレースWAYにW0を選択する。パターン１−２では、W0が２つの条件を満たさず、W1が満たす場合、他のWAY(W2,W3)にかかわらずリプレースWAYにW1を選択する。そして、ケース１−３，１−４も同様である。但し、大きい番号のWAYを優先して選択してもよいし、ランダムに選択しても良い。
【００８１】
ケース１の場合、TAGメモリの無効なWAYには有効なデータが登録されていないので、L1キャッシュに対してそのデータをL2キャッシュに追い出すための追い出しオーダを実行する必要がない。したがって、TAGメモリで無効なWAYがムーブインバッファを獲得していない場合（２つの条件を満たす場合）は、無条件にそのWAYをリプレースWAYに選択する。
【００８２】
ケース１で２つの条件を満たすWAYをリプレースWAYに選択する別の理由は次のとおりである。同一のインデックスについてTAGメモリでは無効なWAYでも、ムーブインバッファでは発行中のムーブイン要求のWAYとして登録されている場合がある。例えば、TAGメモリでは無効なWAYが存在するが、先行するキャッシュミスしたメモリアクセス要求が同じWAYについてムーブインバッファを獲得済みの場合である。この場合、そのWAYをリプレースWAYには選択しない。
【００８３】
第２に、L1キャッシュのTAGメモリの同一インデックスに無効なWAYがない場合、リプレースWAY選択回路は、図中ケース２に示される真理値表に基づいて、リプレースWAYを選択する。ケース２では、L1キャッシュのTAGメモリの同一インデックスに無効なWAYがないので全てのWAYが有効データを登録している。したがって、リプレースWAYに対して追い出しオーダを実行する必要がある。そこで、ケース２では、リプレースWAY選択回路は、ムーブインバッファ内の同一のインデックスアドレスのWAY以外のWAY(ムーブインバッファを獲得していないWAY)の中から、LRU情報に基づき最もアクセスが古いWAYをリプレースWAYに選択する。
【００８４】
ケース２では、４つのWAYについてムーブインバッファを獲得中のWAYの１５種類の組み合わせ（パターン２−１〜２−１５）それぞれについて、参照すべきLRU真理値表[1]〜[11]（パターン２−１〜２−１１）、またはリプレースWAY（パターン２−１２〜２−１５）が示される。真理値表には、ムーブインバッファを獲得中のWAYは「１」で示される。したがって、ムーブインバッファを獲得していないWAYは「０」で示される。
【００８５】
パターン２−１〜２−１１は、ムーブインバッファを獲得していないWAYが複数個（３個または２個）あるケースである。この場合、リプレースWAY選択回路は、それぞれのLRU真理値表[1]〜[11]に示されるとおり、ムーブインバッファ未獲得WAYのうち最もアクセスが古いWAY（LRUのWAY）をリプレースWAY（RPL_WAY）に選択する。一方、パターン２−１２〜２−１５は、ムーブインバッファ未獲得WAYは1個しかないので、リプレースWAY選択回路は、LRU情報にかかわらず、ムーブインバッファ未獲得WAYをリプレースWAYに選択する。
【００８６】
上記のとおり、リプレースWAY選択回路によるリプレースWAYの選択のタイミングは、R1ステージであり、ムーブインバッファ制御部がムーブインバッファの獲得を判定するSステージよりも３ステージ後である。つまり、リプレースWAY選択回路は、Sステージから３ステージの間で、ムーブインバッファに登録中の同一インデックスへのムーブイン要求のWAY情報（MI_WAY）を抽出し、そのWAY以外のWAYから、最適なリプレースWAYを選択する。選択の条件は、ケース１のようにL1キャッシュで無効なWAYを優先して選択し、L1キャッシュに無効なWAYが存在しない場合は、ケース２のようにLRU情報で最もアクセスが古いWAYを選択する。
【００８７】
図１２は、本実施の形態におけるL1キャッシュのムーブインバッファ制御部の制御を示すタイミングチャート図である。図５に対応する図である。また、図１３は、図１２のサイクル毎の各命令のステージと動作を示す図である。図１２、図１３の前提として、全ての命令１−９のインデックスアドレスADD_2は全て同一であり、WAY数は４、L1キャッシュのTAGメモリには同一のインデックスにおいて無効のWAYは存在しておらず、ムーブインバッファは４個である。また、ムーブインバッファ制御部に設けられたマッチカウンタMCH_CNTは１個のみであり、１個のマッチカウンタは複数のインデックスにより共用されるか、または最初に発生した同一のインデックスに専用される。全ての命令のインデックスアドレスが同一であるので、１個のマッチカウンタが異なるインデックスで共用されるように構成しても、図１２の動作では1個のマッチカウンタは１つのインデックスに実質的には専用されることになる。
【００８８】
図１２には、毎サイクルL1キャッシュに投入される命令１−５と、直前の命令より４サイクル遅れて投入される命令６−９が示される。ここで命令発行部が発行する命令はロード命令であり、それに対応してメモリアクセス要求がL1キャッシュに投入される。また、図１２には、マッチカウンタのカウント値、マッチカウンタフルフラグ（マッチカウンタのカウント値が、ムーブインバッファ内の同一のインデックスのムーブイン要求の数がキャッシュのWAY数に達したことを示すか否かを示すフラグ）、マッチカウンタをデクリメントするカウントデクリメント信号、LRU情報、ムーブインバッファを獲得した命令とWAY番号が示される。
【００８９】
図１３には、サイクル３−３１での命令とそのステージと動作が示され、さらに各サイクルでのムーブインバッファに登録されたWAYの情報W0-W3（「１」で登録中）と、マッチカウンタMCの値（３でWAY数に達したことを示す）が示される。
【００９０】
最初に、命令１に対して、サイクル４でSステージに達し、マッチカウンタフル判定でフルでないため、ムーブインバッファ制御部により、ムーブイン要求の発行が可能であることが検知され、サイクル５のBステージでムーブインバッファの０番の獲得指示が出される。そして、サイクル７のR1ステージでリプレースWAYとしてWAY0が選択される。
【００９１】
次に、命令５に対して、サイクル８でSステージに達し、マッチカウンタフル判定でフルでないため、ムーブインバッファ制御部により、ムーブイン要求の発行が可能であることが検知され、サイクル９のBステージでムーブインバッファの１番の獲得指示が出される。そして、サイクル１１のR1ステージでリプレースWAY（RPL_WAY）としてWAY１が選択される。この命令５が、先行してムーブインバッファを獲得した命令１と同一のインデックスでムーブインバッファを獲得したことで、サイクル１１のR1ステージでマッチカウンタがインクリメントされる。その結果、マッチカウンタの値が「１」になる。
【００９２】
本実施の形態例では、マッチカウンタの値は、ムーブインバッファに登録中の同一のインデックスのムーブイン要求数よりも少ない値である。つまり、上記の命令１と命令５のムーブイン要求は同じインデックスのムーブイン要求であり、命令５がムーブインバッファを獲得した時点では、ムーブインバッファに登録中の同じインデックスのムーブイン要求数は「２」である。しかし、キャシュミスしたメモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求と同一のインデックスであることが検出されて初めて、マッチカウンタがインクリメントされる。そのため、２番目の命令５の時にマッチカウンタの値は「１」となり、ムーブインバッファに登録中の同じインデックスのムーブイン要求数「２」より１つ少なくなる。つまり、マッチカウンタの値がＮであれば、ムーブインバッファに登録中の同じインデックスのムーブイン要求数はＮ＋１である。そのため、マッチカウンタの値がＮ−１になると、同一インデックスのムーブイン要求の数が全WAY数に達したことを示す。
【００９３】
同様に、命令６は、サイクル１３のBステージでムーブインバッファ２番の獲得指示が出され、サイクル１５のR1ステージでリプレースWAY（RPL_WAY）としてWAY2が選択され、マッチカウンタがインクリメントされる。続く命令７も同様に、サイクル１７のBステージでムーブインバッファ３番の獲得指示が出され、サイクル１９のR1ステージでリプレースWAY（RPL_WAY）としてWAY3が選択され、マッチカウンタがインクリメントされる。ここで、マッチカウンタはWAY数＝４を示す「３」に達し、マッチカウンタフル状態になる。つまり、この例では、マッチカウンタの値がWAY数−１の「３」に達すると４つのWAY全てでムーブインバッファが獲得されたことを意味する。
【００９４】
次の命令８は、サイクル２０のSステージでマッチカウンタフルのため、ムーブインバッファの獲得が抑止され、サイクル２３で命令８は滞留される。図９では、サイクル１９で命令１のムーブインバッファが開放されているが、そのムーブインバッファのインデックスマッチフラグが「０」であるため、マッチカウンタがデクリメントされない。そのため、サイクル２０ではマッチカウンタの値は「３」のままでありマッチカウンタフル状態のままであるため、命令８はムーブインバッファの獲得が抑止される。
【００９５】
一方、サイクル２３で命令５のムーブインバッファが開放され、そのインデックスマッチフラグが「１」のためカウントデクリメント信号がHレベルになり、マッチカウンタがデクリメントされ、マッチカウンタフル状態は解消される。その結果、次の命令９は、サイクル２７のSステージでマッチカウンタフル状態でないため、次のサイクル２８のBステージでムーブインバッファを獲得する。これによりサイクル３０で再びマッチカウンタフル状態になる。
【００９６】
本実施の形態のマッチカウンタのインクリメントとデクリメントの制御を変更して、マッチカウンタの値がムーブインバッファに登録中の同一インデックスのムーブイン要求の数と一致し、その同一インデックスのムーブイン要求に対するムーブインバッファが開放されたときにマッチカウンタがデクリメントされるようにしてもよい。このようなマッチカウンタであれば、上記の命令１のムーブインバッファが開放されたときもマッチカウンタがデクリメントされ、命令８がムーブインバッファを獲得することができる。具体例としては、マッチカウンタが単一のインデックスに専用に使用される場合、その専用マッチカウンタを「０」から最初にインクリメントするときその同一インデックスを記憶するバッファを専用マッチカウンタに設ける。そして、あるムーブイン要求に対するムーブインバッファが開放されるとき、そのムーブイン要求のインデックスが専用マッチカウンタの同一インデックと一致すれば、専用マッチカウンタをデクリメントする。
【００９７】
上記の動作例において、命令１がムーブインバッファを獲得してムーブイン要求が発行されたが、命令１の後で毎サイクル投入される命令２，３，４はムーブインバッファを獲得できずムーブイン要求は発行されず滞留している。その理由は、命令１のメモリアクセス要求がRステージでムーブインバッファを獲得した後、R2ステージでリプレースWAYがムーブインバッファにセットされ、R３ステージ以降からムーブインバッファ内のリプレースWAYを読み出し可能になる。したがって、先行の命令がムーブインバッファを獲得したRステージからそのリプレースWAYを読み出し可能になるR3ステージまでの３サイクルの間は、後続の同一インデックスへの命令によるムーブインバッファ獲得を抑止する。命令２，３，４がこのケースに該当する。このムーブインバッファ確保の抑止は例えば先行の命令のSステージで行われる。
【００９８】
図５では、ムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同一のインデックスのメモリアクセス要求には、登録中の同一インデックスへのムーブイン要求のリプレースWAY以外のWAYがムーブインバッファに未登録であっても、ムーブインバッファの獲得を抑止していた。それに対して、図１２では、登録中の同一インデックスへのムーブイン要求のリプレースWAY以外のWAYがムーブインバッファに未登録であれば、ムーブインバッファの獲得を許可する。したがって、より多くのキャッシュミスしたメモリアクセス要求に対してムーブインバッファを獲得させムーブイン要求を発行することができる。
【００９９】
しかも、ムーブインバッファの獲得の要否を、ムーブインバッファに登録中の同一インデックスのムーブイン要求の数（マッチカウンタの値が示す数）がキャッシュメモリのWAY数に達しているかいないかで判定するので、短いクロックサイクルでもムーブインバッファ獲得の要否判定を行うことができる。マッチカウンタの値がWAY数に達したことを示すマッチカウンタフルフラグを記録しておけば、上記のムーブインバッファの獲得の要否をマッチカウンタフルフラグにより即座に判定できる。
【０１００】
［実施の形態におけるマッチカウンタの数と共用、専用の変形例］
次に、マッチカウンタの数と、マッチカウンタを異なるインデックスアドレスについて共用にするか専用にするかについて３つのマッチカウンタ例について説明する。前提として、図１４、図１５、図１６に示す動作例では、ムーブインバッファは前述の４個ではなく、例えば１６個である。
【０１０１】
［第１のマッチカウンタ例］
第１のマッチカウンタ例では、L1キャッシュが、マッチカウンタを１個のみ有し、異なるインデックスアドレスが１個のマッチカウンタを共用する。つまり、ムーブインバッファに登録中のムーブイン要求と同一インデックスアドレスADD_Aのメモリアクセス要求が、ムーブインバッファを獲得すると、１個のマッチカウンタがインクリメントされる。その後、同一インデックスアドレスADD_Aのメモリアクセス要求が発生すると、ムーブインバッファ制御部は、マッチカウンタのカウント値が最大のWAY数に対応する値に達していればムーブインバッファの獲得を抑止し、達していなければムーブインバッファの獲得を許可する。また、同一インデックスアドレスADD_Bのメモリアクセス要求が発生した場合も、マッチカウンタのカウント値でムーブインバッファの獲得を判定する。つまり、登録中の第１のムーブイン要求と同一のインデックスアドレスADD_Aのメモリアクセス要求だけでなく、登録中の第２のムーブイン要求のインデックスアドレスADD_Bのメモリアクセス要求も、共用のマッチカウンタの値でムーブインバッファの獲得要否を判定し、獲得すれば共用のマッチカウンタをインクリメントする。
【０１０２】
但し、一般に短時間で同じインデックスアドレスで繰り返しキャッシュミスが発生することはあるが、異なるインデックスアドレスそれぞれで繰り返しキャッシュミスが発生することはまれである。したがって、１個のマッチカウンタを異なるインデックスアドレスで共用するようにしても、図１２で示したように、短期間での全てのメモリアクセス要求が同一のインデックスアドレスに集中する状況下では、L1キャッシュの複数のWAYをすべて複数のムーブイン要求に割り当てることができる。そして、マッチカウンタを1個にすることで、それに必要な回路資源を少なくすることができる。
【０１０３】
図１４は、第１のマッチカウンタ例の１個のマッチカウンタが異なるインデックスアドレスで共用される場合の、動作例を示す図表である。初期状態がムーブインバッファが全て空であるとする。また、命令１〜９が順番に発行され、それらに対するメモリアクセス要求が全てキャッシュミスしたとする。図１４は、各命令のインデックスアドレス、マッチカウンタの値、ムーブイン要求の発行、滞留、そしてムーブインバッファを獲得したインデックスアドレスを各列に示す。
【０１０４】
命令１は、インデックスアドレスがＡであり、ムーブインバッファは空であるので、ムーブインバッファ制御部は、命令１のメモリアクセス要求に対してムーブインバッファを確保しムーブイン要求を発行する。マッチカウンタは、図１２と同様に「０」のままである。
【０１０５】
次に、命令２も、インデックスアドレスがＡであり、ムーブインバッファには命令１に対するムーブイン要求のインデックスアドレスＡが登録中である。そこで、ムーブインバッファ制御部は、マッチカウンタがフル状態（WAY数−１に達した状態）でないため、ムーブインバッファを獲得しムーブイン要求を発行する。さらに、マッチカウンタをインクリメントし、カウント値が「１」になる。
【０１０６】
次に、命令３，４は、インデックスアドレスがＢ，Ｃであるので、ムーブインバッファ制御部は、それぞれに対してムーブインバッファを獲得しムーブイン要求を発行する。
【０１０７】
そして、命令５は、インデックスアドレスがＢであり、既にムーブインバッファには同一のインデックスアドレスＢが登録中であるため、ムーブインバッファ制御部は、マッチカウンタの値を参照し、ムーブインバッファを獲得しムーブイン要求を発行する。そして、マッチカウンタをインクリメントし、カウント値が「２」になる。つまり、同一インデックスアドレスＡとＢはそれぞれ異なるが、マッチカウンタを共用している。
【０１０８】
次に、命令６は、インデックスアドレスがＡであり、既にムーブインバッファには同一のインデックスアドレスＡが登録中であるため、ムーブインバッファ制御部は、マッチカウンタの値を参照し、ムーブインバッファを獲得しムーブイン要求を発行する。そして、マッチカウンタをインクリメントし、値が「３」になる。この結果、マッチカウンタは、同一インデックスアドレスＡに対して２個のWAYをリプレースWAYとする命令２，６のムーブイン要求をカウントし、さらに、同一インデックスアドレスＢに対して１個のWAYをリプレースWAYとする命令５のムーブイン要求をカウントしたことになる。但し、本実施の形態例では、マッチカウンタは最初の命令１（Ａ）と命令３（Ｂ）のムーブイン要求をカウントしていない。
【０１０９】
その後、命令７，８，９がそれぞれインデックスアドレスＣ，Ａ，Ａについてムーブインバッファを獲得しようとする。しかし、いずれのインデックスアドレスもムーブインバッファ内に登録中であり、マッチカウンタの値が「３」と最大WAY数に達してフルになっているので、ムーブインバッファの獲得が抑止される。
【０１１０】
第１のマッチカウンタ例では、マッチカウンタを１個のみ設けて、キャッシュ内の回路資源を最小限に抑制する。但し、命令５のインデックスアドレスＢに対してムーブインバッファを獲得させマッチカウンタをインクリメントしたため、インデックスアドレスＡの４番目の命令８は、マッチカウンタのフル（最大値）によりムーブインバッファの獲得を抑止されている。但し、少なくともインデックスアドレスＡの３つの命令（命令１，２，６）には、ムーブインバッファを獲得させている。
【０１１１】
［第２のマッチカウンタ例］
第２のマッチカウンタ例では、L1キャッシュが、マッチカウンタを１個のみ有し、最初に発生した同一インデックスアドレスの専用にする。つまり、マッチカウンタを獲得できた登録中ムーブイン要求と同一インデックスアドレスのメモリアクセス要求は、マッチカウンタを利用して全WAYでムーブインバッファを獲得できる。しかし、マッチカウンタを獲得できなかった他の同一インデックスアドレスのメモリアクセス要求は、マッチカウンタを利用して全WAYでムーブインバッファを獲得できない。また、データ応答によりマッチカウンタのカウント値が０になると、マッチカウンタの専用状態が解除される。
【０１１２】
図１５は、第２のマッチカウンタ例の１個のマッチカウンタが特定のインデックスアドレスに専用となる場合の動作例を示す図表である。図１４と同様に、初期状態がムーブインバッファが全て空であるとする。また、命令１〜９が順番に発行され、それらに対するメモリアクセス要求が全てキャッシュミスしたとする。
【０１１３】
命令１〜９のインデックスアドレスは、図１４の第1のマッチカウンタ例と同じであり、さらに、インデックスアドレスがＢの命令１０〜１２が追加されている。
【０１１４】
命令１〜４までのムーブインバッファ獲得の動作は図１４と同じである。但し、命令２でインデックスアドレスＡがムーブインバッファに登録中のインデックスアドレスＡと同一であるので、1個のマッチカウンタがインデックスアドレスＡの専用マッチカウンタになる。
【０１１５】
その結果、インデックスアドレスＢの命令５では、マッチカウンタを利用したムーブインバッファの獲得ができず、ムーブインバッファの獲得は抑止され命令５のメモリアクセス要求は滞留する。ここが図１４と異なる。
【０１１６】
命令６，７は、インデックスアドレスがＡ，Ｃであり、命令６はインデックスアドレスＡに専用のマッチカウンタがフル状態でないため、ムーブインバッファを獲得する。命令７は、インデックスアドレスがＣであり、マッチカウンタを利用できず、ムーブインバッファ獲得が抑止され、命令７のメモリアクセス要求は滞留する。
【０１１７】
命令８は、インデックスアドレスがＡであり、専用マッチカウンタがフル状態でないため、ムーブインバッファを獲得する。ここも図１４と異なる。但し、命令９は、専用マッチカウンタがフル状態となり、獲得は抑止される。
【０１１８】
命令９の後、インデックスアドレスがＡの命令２，６，８の３つでデータ応答が発生したとする。それにより、マッチカウンタの値が「０」になりインデックスアドレスＡの専用でなくなる。また、命令９の後、インデックスアドレスＢの命令５もデータ応答が発生したとする。
【０１１９】
そして、命令１０，１１，１２はインデックスアドレスがＢである。この場合、命令１０でムーブインバッファを獲得しムーブインバッファにインデックスアドレスＢが登録される。そして、次の命令１１がムーブインバッファと同一インデックスアドレスのメモリアクセス要求であるので、マッチカウンタはインデックスＢの専用となる。そして、命令１１，１２はいずれもムーブインバッファを獲得する。
【０１２０】
［第３のマッチカウンタ例］
第３のマッチカウンタ例では、L1キャッシュが、マッチカウンタを２個有し、２個のマッチカウンタは、最初に発生した２種類の同一インデックスアドレスそれぞれに専用になる。つまり、最初に発生した同一インデックスアドレスＡのメモリアクセス要求により専用マッチカウンタが獲得され、次に発生した２つ目の同一インデックスアドレスＢも専用マッチカウンタを獲得できる。そして、マッチカウンタを獲得できた２種類の同一インデックスアドレスＡ，Ｂのメモリアクセス要求は、それぞれのマッチカウンタによりWAY数（＝４）のムーブインバッファの獲得ができる。しかし、マッチカウンタを獲得できなかった他の同一インデックスアドレスＣのメモリアクセス要求は、マッチカウンタによるWAY数までのWAYの利用ができず、同一インデックスアドレスＣのムーブイン要求を並行して発行できない。また、第２のマッチカウンタ例と同様に、データ応答によりカウント値が０になると、マッチカウンタの専用状態が解除される。
【０１２１】
図１６は、第３のマッチカウンタ例の２個のマッチカウンタが最初に発生した２種類の同一インデックスアドレスそれぞれに専用となる場合の動作例を示す図表である。前提は図１４と同じである。
【０１２２】
命令１〜９のインデックスアドレスは、図１４，１５と同じである。この例では、インデックスアドレスＡの命令２が最初の同一インデックスアドレスＡのメモリアクセス要求となり、マッチカウンタMCH_CNT_0がインデックスアドレスＡの専用になる。そのため、インデックスアドレスＡの命令６，８はいずれも専用のマッチカウンタMCH_CNT_0に基づいてムーブインバッファを獲得する。
【０１２３】
一方、インデックスアドレスＢの命令５が２番目の最初の同一インデックスアドレスＢのメモリアクセス要求となり、マッチカウンタMCH_CNT_1がインデックスアドレスＢの専用になる。そのため、命令９の後の図示しない命令でインデックスアドレスがＢの場合、命令３または５のムーブイン要求に対してデータ応答が発生してなくても、専用のマッチカウンタMCH_CNT_1に基づいてムーブインバッファを獲得できる。
【０１２４】
上記の３つのマッチカウンタ例は、プロセッサや実行するプログラムに応じて、最も効率的にムーブインバッファが獲得されムーブイン要求が発行される例を選択することが好ましい。
【０１２５】
以上の通り、本実施の形態によれば、ムーブインバッファに登録中のムーブイン要求と同一のインデックスに対するメモリアクセス要求が、登録中の同一インデックスのムーブイン要求の数がキャシュメモリのWAY数未満か否かをマッチカウンタの値で判定して、ムーブインバッファの獲得の要否を判定する。したがって、同一のインデックスへの複数のムーブイン要求を並列して発行することができる。
【０１２６】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１２７】
（付記１）
メモリアクセス要求を発行するメモリアクセス要求発行部と、
タグメモリとデータメモリを有するキャッシュメモリと、前記メモリアクセス要求がキャッシュミスした場合に前記メモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有し、
前記ムーブインバッファ制御部は、前記メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記キャッシュメモリのウエイ数未満の場合は、前記ムーブインバッファの獲得を決定し前記ムーブイン要求を発行し、（ｂ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記ウエイ数に達している場合は、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、演算処理装置。
【０１２８】
（付記２）
前記キャッシュは、さらに、
前記ムーブインバッファ制御部が前記ムーブインバッファを獲得する場合、前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求のウエイ以外のウエイから、前記同一インデックスのメモリアクセス要求に対して発行するムーブイン要求の応答データを登録する前記キャッシュメモリのリプレースウエイを選択し、前記選択したリプレースウエイを前記ムーブインバッファに登録するリプレースウエイ選択部を有する、付記１に記載の演算処理装置。
【０１２９】
（付記３）
前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数をカウントするマッチカウンタを有し、
前記ムーブインバッファ制御部は、前記同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記マッチカウンタをインクリメントし、前記同一インデックスのメモリアクセス要求に対して発行したムーブイン要求に対するデータ応答後に前記獲得したムーブインバッファを開放する場合、前記マッチカウンタをデクリメントする、付記１に記載の演算処理装置。
【０１３０】
（付記４）
前記マッチカウンタは、複数の異なる前記同一インデックスのムーブイン要求で共用される共用マッチカウンタを有し、
前記ムーブインバッファ制御部は、前記複数の異なる同一インデックスのうちいずれかの前記同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記共用マッチカウンタをインクリメントし、前記獲得したムーブインバッファを開放する場合、前記共用マッチカウンタをデクリメントする、付記３に記載の演算処理装置。
【０１３１】
(付記５)
前記マッチカウンタは、単一の前記同一インデックスのムーブイン要求で専用される専用マッチカウンタを有し、
前記ムーブインバッファ制御部は、前記単一の同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記専用マッチカウンタをインクリメントし、前記獲得したムーブインバッファを開放する場合、前記専用マッチカウンタをデクリメントする、付記３に記載の演算処理装置。
【０１３２】
（付記６）
前記ムーブインバッファ制御部は、前記単一の同一インデックス以外の前記同一インデックスのメモリアクセス要求に対して、前記専用マッチカウンタの値にかかわらず、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、付記５に記載の演算処理装置。
【０１３３】
（付記７）
前記マッチカウンタは、複数の異なる前記同一インデックスのムーブイン要求でそれぞれ専用される複数の専用マッチカウンタを有し、
前記ムーブインバッファ制御部は、前記同一インデックスのメモリアクセス要求に対し前記ムーブインバッファを獲得する場合、前記同一インデックスに対応する専用マッチカウンタをインクリメントし、前記獲得したムーブインバッファを開放する場合、前記専用マッチカウンタをデクリメントする、付記３に記載の演算処理装置。
【０１３４】
（付記８）
前記ムーブインバッファは、ムーブイン要求が発行中か否かを示す有効ビットと、発行中のムーブイン要求のインデックス、リプレースウエイ、データをそれぞれ記憶する複数のエントリを有し、さらに、前記各エントリは、登録中のムーブイン要求が前記同一インデックスのムーブイン要求を示す同一インデックスフラグを記憶し、
前記ムーブインバッファ制御部は、前記同一インデックスのメモリアクセス要求に対してムーブインバッファを獲得するときに、前記同一インデックスフラグを登録し、前記獲得したムーブインバッファを開放するとき前記同一インデックスフラグが記憶されている場合、前記マッチカウンタをデクリメントする、付記３に記載の演算処理装置。
【０１３５】
（付記９）
前記リプレースウエイ選択部は、前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求のウエイ以外のウエイのうち、前記タグメモリ内の前記同一インデックスの無効のウエイを優先して、前記リプレースウエイに選択する、付記２に記載の演算処理装置。
【０１３６】
(付記１０)
前記リプレースウエイ選択部は、前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求のウエイ以外のウエイが前記タグメモリの前記同一インデックスで有効な場合、アクセスの古さに基づいて前記リプレースウエイを選択する、付記９に記載の演算処理装置。
【０１３７】
（付記１１）
前記メモリアクセス要求発行部は、命令発行部であり、
前記キャッシュは、第1レベルキャッシュであり、
前記ムーブインバッファ制御部は、前記第１レベルキャッシュよりメインメモリに近い第２レベルキャッシュに前記ムーブイン要求を発行する、付記１に記載の演算処理装置。
【０１３８】
（付記１２）
前記メモリアクセス要求発行部は、第1のキャッシュであり、
前記キャッシュは、前記第1のキャッシュよりメインメモリに近い第２のキャッシュである、付記１に記載の演算処理装置。
【０１３９】
（付記１３）
前記ムーブインバッファ制御部は、前記第２のキャッシュより前記メインメモリに近い第３のキャッシュに前記ムーブイン要求を発行する、付記１２に記載の演算処理装置。
【０１４０】
（付記１４）
前記ムーブインバッファ制御部は、前記メインメモリへのアクセスを制御するメモリ制御部に前記ムーブイン要求を発行する、付記１２に記載の演算処理装置。
【０１４１】
（付記１５）
演算処理装置と、
前記演算処理装置からアクセスされる主記憶装置とを有し、
前記演算処理装置は、
メモリアクセス要求を発行するメモリアクセス要求発行部と、
タグメモリとデータメモリを有するキャッシュメモリと、前記メモリアクセス要求がキャッシュミスした場合に前記メモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有し、
前記ムーブインバッファ制御部は、前記メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記キャッシュメモリのウエイ数未満の場合は、前記ムーブインバッファの獲得を決定し前記ムーブイン要求を発行し、（ｂ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記ウエイ数に達している場合は、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、情報処理装置。
【０１４２】
（付記１６）
メモリアクセス要求を発行するメモリアクセス要求発行部と、
タグメモリとデータメモリを有するキャッシュメモリと、前記メモリアクセス要求がキャッシュミスした場合に前記メモリアクセス要求のデータを要求するムーブイン要求を発行するムーブインバッファ制御部とを有するキャッシュとを有する演算処理装置の制御方法であって、
前記ムーブインバッファ制御部は、
前記メモリアクセス要求がキャッシュ判定でキャッシュミスしたとき、（ａ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記キャッシュメモリのウエイ数未満の場合は、前記ムーブインバッファの獲得を決定し前記ムーブイン要求を発行し、（ｂ）前記メモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求のインデックスと同じインデックスである同一インデックスを有し、且つ前記ムーブインバッファに登録中である前記同一インデックスのムーブイン要求の数が前記ウエイ数に達している場合は、前記ムーブインバッファの獲得抑止を決定し前記ムーブイン要求の発行を抑止する、演算処理装置の制御方法。
【符号の説明】
【０１４３】
１０：Ｌ１キャッシュ
２０：Ｌ２キャッシュ
３：命令発行部
１１：リクエストポート
TLB：トランスレーション・ルックアサイド・バッファ
DATA_RAM, TAG_RAM：キャッシュメモリ
DATA RAM：データメモリ
TAG RAM：タグメモリ
LRU：LRU回路
MIB_CN：ムーブインバッファ制御部
MCH_CNT：マッチカウンタ
MIB：ムーブインバッファ
VALID:有効ビット
IDX_ADD：インデックスアドレス
DATA：データ
IDX_MCH_FLG：インデックスマッチフラグ
MI_RQ：ムーブイン要求
RPL_SEL：リプレースWAY選択回路
RPL_WAY：リプレースWAY
DATA_RSP：データ応答
EJ_OD：追い出しオーダ
WAY：ウエイ
【図１】
2018055568.tif 000003
【図２】
2018055568.tif 000004
【図３】
2018055568.tif 000005
【図４】
2018055568.tif 000006
【図５】
2018055568.tif 000007
【図６】
2018055568.tif 000008
【図７】
2018055568.tif 000009
【図８】
2018055568.tif 000010
【図９】
2018055568.tif 000011
【図１０】
2018055568.tif 000012
【図１１】
2018055568.tif 000013
【図１２】
2018055568.tif 000014
【図１３】
2018055568.tif 000015
【図１４】
2018055568.tif 000016
【図１５】
2018055568.tif 000017
【図１６】
2018055568.tif 000018
【手続補正書】
【提出日】平成29年8月30日(2017.8.30)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
本実施の形態例では、マッチカウンタの値は、ムーブインバッファに登録中の同一のインデックスのムーブイン要求数よりも少ない値である。つまり、上記の命令１と命令５のムーブイン要求は同じインデックスのムーブイン要求であり、命令５がムーブインバッファを獲得した時点では、ムーブインバッファに登録中の同じインデックスのムーブイン要求数は「２」である。しかし、キャシュミスしたメモリアクセス要求がムーブインバッファに登録中のいずれかのムーブイン要求と同一のインデックスであることが検出されて初めて、マッチカウンタがインクリメントされる。そのため、２番目の命令５の時にマッチカウンタの値は「１」となり、ムーブインバッファに登録中の同じインデックスのムーブイン要求数「２」より１つ少なくなる。つまり、マッチカウンタの値がＮであれば、ムーブインバッファに登録中の同じインデックスのムーブイン要求数はＮ＋１である。そのため、マッチカウンタの値がWAY−１になると、同一インデックスのムーブイン要求の数が全WAY数に達したことを示す。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００９４
【補正方法】変更
【補正の内容】
【００９４】
次の命令８は、サイクル２０のSステージでマッチカウンタフルのため、ムーブインバッファの獲得が抑止され、サイクル２３で命令８は滞留される。図１２では、サイクル１８で命令１のムーブインバッファが開放されているが、そのムーブインバッファのインデックスマッチフラグが「０」であるため、マッチカウンタがデクリメントされない。そのため、サイクル２０ではマッチカウンタの値は「３」のままでありマッチカウンタフル状態のままであるため、命令８はムーブインバッファの獲得が抑止される。