(57)【要約】【課題】  キャッシュミスした先行アクセスについてのリフィル実行中に、先行アクセスと同一のアドレスについて後続アクセスがなされた場合、当該後続アクセスについて、リフィルが完了後、再度アクセスするという処理がなされていた。これにより、後続アクセスに対するリプライが遅延するという問題があった。【解決手段】  上記課題を解決するため、本発明の情報処理装置は、先行ロード命令に対するリプライデータを、当該先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令に対しても返還するリプライ部を有することを特徴とする。【選択図】  図１
2007226641.tif 000002
【特許請求の範囲】
【請求項１】
先行ロード命令に対するリプライデータを、当該先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令に対しても返還するリプライ部を有することを特徴とする情報処理装置。
【請求項２】
メインメモリが保持するデータを記憶するキャッシュエントリと、
前記キャッシュエントリがリフィル実行中か否かを判定するキャッシュ制御部と、
先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令がアクセスした前記キャッシュエントリが、前記キャッシュ制御部によりリフィル実行中と判定された場合、前記先行ロード命令に対するリプライデータを前記後続ロード命令に対しても返還するリプライ部とを有することを特徴とする情報処理装置。
【請求項３】
前記キャッシュエントリは、当該キャッシュエントリがリフィルを実行中であることを示すリフィルフラグを有し、
前記キャッシュ制御部は、当該リフィルフラグに基づいて前記キャッシュエントリがリフィル実行中であることを判定することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記キャッシュ制御部は、前記先行ロード命令がキャッシュミスし、前記キャッシュエントリのリフィルを実行したときに、前記リフィルフラグをオンにすることを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記キャッシュエントリは、前記メインメモリが保持するデータの一部を格納するデータ格納部を有し、
前記キャッシュ制御部は、前記キャッシュエントリがリフィル実行中の場合、当該キャッシュエントリにアクセスした前記後続ロード命令を識別するためのリプライ識別情報を前記データ格納部に書き込むことを特徴とする請求項２乃至４いずれか１項記載の情報処理装置。
【請求項６】
前記リプライ部は、前記先行ロード命令に対するリプライデータを多重化し、前記後続ロード命令に対して多重化したリプライデータを返還するリプライ多重化部を有することを特徴とする請求項１乃至５いずれか１項記載の情報処理装置。
【請求項７】
前記キャッシュエントリは、リフィル実行中の当該キャッシュエントリにアクセスした前記後続ロード命令の数をカウントするリフィルカウンタを更に有し、
前記リプライ多重化部は、前記リフィルカウンタが保持する数だけ、前記先行ロード命令に対するリプライデータを多重化することを特徴とする請求項６記載の情報処理装置。
【請求項８】
前記リプライ多重化部は、前記先行ロード命令に対するリプライデータを受信したときに、前記データ格納部に書込まれたリプライ識別情報を取得し、多重化したリプライデータに当該リプライ識別情報を付加することを特徴とする請求項６又は７いずれか１項記載の情報処理装置。
【請求項９】
ロード命令がアクセスするキャッシュエントリについて、当該キャッシュエントリがリフィル実行中であることを判定するリフィル判定ステップと、
先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令がアクセスした前記キャッシュエントリが、リフィル実行中と判定された場合、前記先行ロード命令に対するリプライデータを前記後続ロード命令に対しても返還するリプライステップとを有することを特徴とするキャッシュ制御方法。
【請求項１０】
前記リフィル判定ステップは、
前記キャッシュエントリが有するキャッシュエントリがリフィル実行中であることを示すリフィルフラグに基づいて、リフィル実行中であることを判定するステップであることを特徴とする請求項９記載のキャッシュ制御方法。
【請求項１１】
前記リフィル判定ステップは、
前記キャッシュエントリがリフィル実行中と判定された場合、メインメモリが保持するデータを記憶する前記キャッシュエントリのデータ格納部に、当該キャッシュエントリにアクセスした前記後続ロード命令を識別するためのリプライ識別情報を書込むステップを含むことを特徴とする請求項９又は１０いずれか１項記載のキャッシュ制御方法。
【請求項１２】
前記リプライステップは、
前記先行ロード命令に対するリプライデータを多重化し、前記ロード命令に対して多重化したリプライを返すステップであることを特徴とする請求項９乃至１１いずれか１項記載のキャッシュ制御方法。
【請求項１３】
前記リプライステップは、
リフィル実行中のキャッシュエントリにアクセスしたロード命令の数をカウントするリフィルカウンタが保持する数だけ、前記先行ロード命令に対するリプライデータを多重化するステップを含むことを特徴とする請求項１２記載のキャッシュ制御方法。
【請求項１４】
前記リプライステップは、
前記先行ロード命令に対するリプライデータを受信したときに、前記データ格納部に書込まれたリプライ識別情報を取得し、多重化したリプライデータに当該リプライ識別情報を付加するステップを含むことを特徴とする請求項１２又は１３いずれか１項記載のキャッシュ制御方法。
【請求項１５】
コンピュータに、
ロード命令がアクセスするキャッシュエントリについて、当該キャッシュエントリがリフィル実行中であることを判定するリフィル判定処理と、
先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令がアクセスした前記キャッシュエントリが、リフィル実行中と判定された場合、前記先行ロード命令に対するリプライデータを前記後続ロード命令に対しても返還するリプライ処理とを実行させることを特徴とするプログラム。
【請求項１６】
前記リフィル判定処理は、
前記キャッシュエントリが有するキャッシュエントリがリフィル実行中であることを示すリフィルフラグに基づいて、リフィル実行中であることを判定する処理であることを特徴とする請求項１５記載のプログラム。
【請求項１７】
前記リフィル判定処理は、
前記キャッシュエントリがリフィル実行中と判定された場合、メインメモリが保持するデータを記憶する前記キャッシュエントリのデータ格納部に、当該キャッシュエントリにアクセスした前記後続ロード命令を識別するためのリプライ識別情報を書込む処理を含むことを特徴とする請求項１５又は１６いずれか１項記載のプログラム。
【請求項１８】
前記リプライ処理は、
前記先行ロード命令に対するリプライデータを多重化し、前記ロード命令に対して多重化したリプライを返す処理であることを特徴とする請求項１５乃至１７いずれか１項記載のプログラム。
【請求項１９】
前記リプライ処理は、
リフィル実行中のキャッシュエントリにアクセスした前記先行ロード命令に後続するロード命令の数をカウントするリフィルカウンタが保持する数だけ、前記先行ロード命令に対するリプライデータを多重化する処理を含むことを特徴とする請求項１８記載のプログラム。
【請求項２０】
前記リプライ処理は、
前記先行ロード命令に対するリプライデータを受信したときに、前記データ格納部に書込まれたリプライ識別情報を取得し、多重化したリプライデータに当該リプライ識別情報を付加する処理を含むことを特徴とする請求項１８又は１９いずれか１項記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュを有する情報処理装置に関し、キャッシュミスによるキャッシュのリフィル実行中のキャッシュステータス過渡状態に発行された後続のロード命令のレイテンシを低減する情報処理装置に関する。
【背景技術】
【０００２】
従来、キャッシュメモリを有する情報処理装置において、先行するキャッシュアクセスがミスヒットしてリフィルを実行している際における、後続のキャッシュアクセスに遅延が生じるという問題があった。
【０００３】
特許文献１には、アドレスが連続する２つ以上のキャッシュアクセスにおいて、後続アクセスのレイテンシを低減する技術が開示されている。当該技術においては、先行アクセスがキャッシュミスしてキャッシュのリフィルを実行する際に、リフィルデータの転送順序を切替制御することで、後続アクセスのレイテンシを低減している。
【０００４】
【特許文献１】特開平１１−２４９９５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記特許文献１のような従来の技術によると、キャッシュミスした先行アクセスについてのリフィルを実行中に、先行アクセスと同一のアドレスについて後続アクセスがなされた場合のレイテンシを低減できないという問題がある。
【０００６】
従来、先行アクセスに対するリフィル実行中のキャッシュエントリに、先行アクセスと同一アドレスに対する後続アクセスがあった場合、先行アクセスのリフィルが完了後に再度後続のアクセスをさせるという処理を実行していた。
【０００７】
このため、後続アクセスに対するリプライが遅延してしまうことが問題となっていた。
【課題を解決するための手段】
【０００８】
本発明の情報処理装置は、先行ロード命令に対するリプライデータを、当該先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令に対しても返還するリプライ部を有することを特徴とする。
【発明の効果】
【０００９】
本発明は、先行ロード命令と同一アドレスのリプライデータを要求する後続ロード命令に対して、当該先行ロード命令に対するメインメモリからのリプライデータを、後続ロード命令に対しても返還するという構成を採用する。
【００１０】
このような構成を採用するため、後続ロード命令を再発行する必要がなくなるので、後続ロード命令のレイテンシを低減することができるという効果が得られる。
【発明を実施するための最良の形態】
【００１１】
本願発明を実施するための最良の実施形態について説明する。
【００１２】
（第１の実施形態）
図１を参照すると、第１の実施形態における情報処理装置１は、キャッシュ制御部１０、キャッシュ部２０、リプライ部３０、メインメモリ４０及び命令受信部５０を含む。
【００１３】
キャッシュ部２０は、メインメモリ４０に格納されているデータの一部を格納している小容量のメモリである。CPU等からアクセスする場合、キャッシュ部２０の方が、メインメモリ４０よりも高速でアクセスすることができる。キャッシュ部２０は、データを記憶する複数のエントリを有している。
【００１４】
キャッシュ制御部１０は、ロード命令がキャッシュヒットしたか否か、若しくはロード命令がリフィル実行中のキャッシュエントリにアクセスしたか否かを判定する。
【００１５】
リプライ部３０は、キャッシュにアクセスしたロード命令について、当該命令発行元（ＣＰＵ等）へのリプライデータの返還を制御する。
【００１６】
命令受信部５０は、ＣＰＵ等から発行された命令を受信する。
【００１７】
図２を参照し、キャッシュ制御部１０、キャッシュ部２０及びリプライ部３０の詳細な構成を説明する。
【００１８】
キャッシュ制御部１０は、ヒット判定部１００、ヒット制御部１０１、ミス判定部１０２、ミス制御部１０３、リフィル判定部１０４、リフィル制御部１０５を含む。
【００１９】
キャッシュ部２０は、複数のエントリ２１を含む。各エントリ２１は、エントリ毎の固有のエントリ番号により管理される。各エントリ２１は、有効フラグ２００、リフィルフラグ２０１、リフィルカウンタ２０２、アドレス格納部２０３及びデータ格納部２０４を含む。有効フラグ２００は、エントリ２１が有効なデータを格納していることを示すフラグである。当該フラグがＯＮである場合には、エントリ２１が有効なデータを格納していることを示し、ＯＦＦの場合はエントリ２１が有効なデータを格納していないことを示す。リフィルフラグ２０１は、エントリ２１がリフィルを実行中であることを示すフラグである。当該フラグがＯＮである場合には、当該エントリ２１がリフィルを実行中であることを示し、ＯＦＦである場合は当該エントリ２１はリフィルを実行中ではないことを示す。リフィルカウンタ２０２は、エントリ２１がリフィルを実行中に、当該エントリ２１にアクセスしたロード命令の数をカウントする。リフィルカウンタ２０２が保持する値は、０（ゼロ）若しくは０（ゼロ）より大きい正の整数となる。データ格納部２０４は、メインメモリ４０に格納されているデータのコピーを格納する。アドレス格納部２０３は、データ格納部２０４に格納されているデータの、メインメモリ上でのアドレスを格納する。
【００２０】
リプライ部３０は、リプライ格納部３００、リプライ制御部３０１及びリプライ多重化部３０２を含む。
【００２１】
命令受信部５０は、ロード命令を受信すると、当該命令が要求するデータのアドレスを抽出し、信号線１００１を介して、ヒット判定部１００、ミス判定部１０２及びリフィル判定部１０４に当該アドレスを送信する。また、命令受信部５０は、信号線１００１を介して、ヒット判定部１００、ミス判定部１０２及びリフィル判定部１０４にリプライ識別情報３０１４を送信する。
【００２２】
ここで、リプライ識別情報３０１４について説明する。リプライ部３０は、ロード命令に対してメインメモリ４０やエントリ２１からのリプライデータを命令発行元に返還する必要がある。複数のロード命令が発行されている場合、リプライ部３０はそれぞれのロード命令について、対応するリプライデータを返還する必要がある。そのため、それぞれのロード命令とメインメモリ４０やエントリ２１からのリプライデータを対応付ける情報が必要となり、この情報がリプライ識別情報３０１４である。リプライ部３０は、このリプライ識別情報３０１４に基づいて、ロード命令の発行元に対して対応するリプライデータを返還する。
ヒット判定部１００、ミス判定部１０２及びリフィル判定部１０４は、それぞれ信号線１００１を介して、ロード命令が要求するデータのアドレスを、命令受信部５０から受け取る。その上で、ヒット判定部１００、ミス判定部１０２及びリフィル判定部１０４は、複数のエントリ２１のうち、アドレス格納部２０３にロード命令が要求するデータのアドレスと同一のアドレスを格納しているエントリ２１の有無を判断する。
【００２３】
同一のアドレスを格納しているエントリ２１が無い場合、ミス判定部１０２はキャッシュミスと判断し、ミス制御部１０３に通知する。このとき、ミス判定部１０２は、命令受信部５０から送信されたリプライ識別情報３０１４をミス制御部１０３に対して送信する。キャッシュミスの場合、ヒット判定部１００及びリフィル判定部１０４は、動作を終了する。
【００２４】
同一のアドレスを格納しているエントリ２１が有る場合であって、有効フラグ２００がＯＮであり、かつ、リフィルフラグ２０１がＯＦＦの場合、ヒット判定部１００はキャッシュヒットと判断し、ヒット制御部１０１に通知する。このとき、ヒット判定部１００は、命令受信部５０から送信されたリプライ識別情報３０１４を、ヒット制御部１０１に送信する。キャッシュヒットの場合、ミス判定部１０２とリフィル判定部１０４は動作を終了する。
【００２５】
同一のアドレスを格納しているエントリ２１が有る場合であって、リフィルフラグ２０１がＯＮの場合、リフィル判定部１０４は、当該エントリ２１はリフィル実行中であると判断し（リフィルマッチ）、リフィル制御部１０５に通知する。このとき、リフィル判定部１０４は、命令受信部５０から送信されたリプライ識別情報３０１４を、リフィル制御部１０５に送信する。リフィルマッチと判断された場合、ヒット判定部１００及びミス判定部１０２は、動作を終了する。
【００２６】
ミス判定部１０２がキャッシュミスと判断した場合、ミス制御部１０３は、複数のエントリ２１のうち、リフィルを実行すべきエントリ２１を決める。エントリ２１を決定後、ミス制御部１０３は、信号線１００４を介してリフィルを実行すべきと決定されたエントリ２１の有効フラグ２００をＯＦＦにし、リフィルフラグ２０１をＯＮにする。その後、ミス制御部１０３は、信号線１００４を介して当該エントリ２１のアドレス格納部２０３に、キャッシュミスしたロード命令が要求するデータのアドレスを書込む。ミス制御部１０３は、信号線１００３を介してメインメモリ４０に対してロード命令が要求するデータのリプライ要求をする。このとき、ミス制御部１０３は、リプライ識別情報３０１４をリプライ要求と共にメインメモリ４０に送信する。メインメモリ４０は、当該要求に対するデータを、信号線１００６を介してリプライ多重化部３０２に送信する。このとき、メインメモリ４０からのリプライデータには、ミス制御部１０３から送信されたリプライ識別情報３０１４が付加されている。また、ミス制御部１０３は、リフィルを実行すべきエントリ２１を決定したら、当該エントリ２１のエントリ番号を、メインメモリ４０に対してリプライ要求と共に送信する。メインメモリ４０は、リプライデータに当該エントリ番号が付加して、信号線１００６からリプライデータをリプライ多重化部３０２に対して送信する。
【００２７】
ここで、ミス制御部１０３がリフィルを実行すべきエントリ２１を決定する場合、一般的なキャッシュのリプレースメントアルゴリズムによりエントリ２１を決定すればよい。例えば、有効フラグ２００がＯＦＦであり、有効なデータを格納しておらず、かつ、リフィルフラグ２０１もＯＦＦであり、リフィルを実行中でないエントリ２１をリフィル対象とすればよい。また、エントリ２１がアクセスされる頻度に基づいて優先度を付加し、優先度の低いエントリ２１からリフィルを実行してもよい。
【００２８】
ミス制御部１０３は、信号線１００５を介して、リプライ識別情報３０１４をリプライ制御部３０１に送信する。
【００２９】
ヒット判定部１００がキャッシュヒットと判断した場合、ヒット制御部１０１は、信号線１００７を介して、リプライ識別情報３０１４をリプライ制御部３０１に送信する。また、ヒット制御部１０１は、信号線１００８を介してキャッシュヒットしたエントリ２１にアクセスする。ヒット制御部１０１は、当該エントリ２１のデータ格納部２０４から、格納されているデータを、リプライ部３０のリプライ格納部３００に対して信号線１００９を介して送信する。このとき、ヒット制御部１０１は、データ格納部２０４に格納されているデータに、リプライ識別情報３０１４を付加して、リプライ格納部３００に送信する。
【００３０】
リフィル判定部１０４がリフィルマッチと判断した場合、リフィル制御部１０５は、信号線１０１０を介してリフィル実行中のエントリ２１にアクセスし、リフィルカウンタ２０２が保持する値を１だけインクリメントし、有効フラグ２００をＯＦＦにする。また、リフィル制御部１０５は、信号線１０１０を介してデータ格納部２０４にリプライ識別情報３０１４を書込む。リフィル実行中のエントリ２１なので、データ格納部２０４に新たなデータを書込んでも問題はない。このリフィル実行中のエントリ２１に、複数のロード命令がアクセスした場合、リフィル制御部１０５は、それぞれのロード命令のリプライ識別情報３０１４を書込む。つまり、リフィル実行中のエントリ２１に複数のロード命令がアクセスした場合は、データ格納部２０４に複数のリプライ識別情報３０１４が書込まれることになる。なお、データ格納部２０４の記憶容量は無限ではないので、新たなリプライ識別情報３０１４が書込めない場合も想定される。この場合、リプライ制御部１０５は、データ格納部２０４からリプライ識別情報３０１４が読み出されるまで、命令受信部５０に対して、一時命令の受信を待機させる。更に、リフィル制御部１０５は、信号線１０１２を介して、リプライ識別情報３０１４をリプライ制御部３０１に送信する。なお、リフィル判定部１０４によりリフィルマッチと判断されても、リフィル制御部１０５はメインメモリ４０に対してリプライデータの要求はしない。
【００３１】
リプライ多重化部３０２は、信号線１００６を介してメインメモリ４０からリプライデータを受け取ると、当該リプライデータに付加されたエントリ番号を参照する。リプライ多重化部３０２は、当該エントリ番号に該当するエントリ２１のリフィルカウンタ２０２が保持している値を、信号線１０１５を介して参照する。リプライ多重化部３０２は、この値を一時保持しておく。
【００３２】
リフィルカウンタ２０２の値が０（ゼロ）ではない場合には、リプライ多重化部３０２は、信号線１０１５を介して、メインメモリ４０からのリプライデータに付加されているエントリ番号のエントリ２１におけるデータ格納部２０４にアクセスする。その後、リプライ多重化部３０２は、信号線１０１５を介して、データ格納部２０４に書き込まれたリプライ識別情報３０１４を取得する。データ格納部２０４に複数のリプライ識別情報３０１４が格納されている場合、リプライ多重化部３０２は、それら複数のリプライ識別情報３０１４を取得する。
【００３３】
リプライ識別情報３０１４を取得後、リプライ多重化部３０２は、信号線１００６を介してメインメモリ４０から取得したリプライデータを、データ格納部２０４へ書き込む。書き込む際には、データ格納部２０４に書き込まれているリプライ識別情報３０１４は、全て、リプライデータにより上書きされる。データ格納部２０４をリプライデータにより上書きしている間、命令受信部５０は、当該エントリ２１への後続ロード命令のアクセスを待機させる。リプライ多重化部３０２は、有効フラグ２００をＯＮにし、リフィルフラグ２０１をＯＦＦにして、リフィルカウンタ２０２の値を０（ゼロ）にリセットする。これにより、エントリ２１のリフィル動作が完了する。
【００３４】
リプライ多重化部３０２は、更に、リプライデータの多重化を実行する。信号線１００６から受け取ったメインメモリ４０からのリプライデータを、リフィルカウンタ２０２が保持する値分だけ多重化する。その際に、リプライ多重化部３０２は、多重化したそれぞれのデータについて、多重化したデータに含まれるリプライ識別情報３０１４を、データ格納部２０４から取得したリプライ識別情報３０１４により上書きする。このように、多重化したリプライデータに含まれるリプライ識別情報３０１４を上書きすることにより、リフィル実行中のエントリ２１にアクセスしたロード命令に対して適切にリプライを返すことが可能となる。このように、メインメモリ４０からのリプライデータを多重化する構成を採用することにより、先行のロード命令に対するメインメモリ４０からのリプライを受けた時に、後続の同一アドレスのロード命令即ちリフィルマッチしたロード命令に対して多重化したリプライデータを返還することが可能となる。よって、後続のロード命令においてメインメモリ４０に対してリプライデータを要求する必要がなくなり、メモリインターフェースの占有率を低減することができる。また、後続のロード命令のレイテンシを短縮することも可能となる。
【００３５】
リプライ多重化部３０２は、メインメモリ４０から受け取ったリプライデータ及び多重化したデータを、信号線１０１３を介してリプライ格納部３００に送信する。なお、リプライ多重化部３０２は、メインメモリ４０から受け取ったリプライデータ及び多重化したデータを送信する際、かかるデータに付加されているエントリ番号を取り除く。
リフィルカウンタ２０２が保持する値が０（ゼロ）である場合、リプライ多重化部３０２は、信号線１０１５を介して、メインメモリ４０からのリプライデータに付加されているエントリ番号のエントリ２１にアクセスし、メインメモリ４０から取得したリプライデータを、データ格納部２０４へ書き込む。データ格納部２０４へリプライデータを書き込み中は、命令受信部５０は、当該エントリ２１への後続ロード命令のアクセスを待機させる。また、リプライ多重化部３０２は、有効フラグ２００をＯＮにし、リフィルフラグ２０１をＯＦＦにする。その後、リプライ多重化部３０２は、信号線１００６を介してメインメモリ４０から受け取ったリプライデータを、リプライ格納部３００へ送信する。なお、リプライ多重化部３０２は、メインメモリ４０から受け取ったリプライデータを送信する際、かかるデータに付加されているエントリ番号を取り除く。
【００３６】
図３を参照すると、リプライ格納部３００は、ヒットリプライ格納部３００１、多重化リプライ格納部３００２及びメモリリプライ格納部３００３を有する。
ヒットリプライ格納部３００１は、信号線１００９を介して受信した、キャッシュヒットの場合のリプライデータを格納する。
【００３７】
多重化リプライ格納部３００２は、信号線１０１３を介してリプライ多重化部３０２から受信した、多重化されたリプライデータを格納する。
【００３８】
メモリリプライ格納部３００３は、信号線１０１３を介してリプライ多重化部３０２から受信した、メインメモリ４０からのリプライデータを格納する。
【００３９】
ヒットリプライ格納部３００１、多重化リプライ格納部３００２及びメモリリプライ格納部３００３は、それぞれ複数のエントリを有しており、複数のリプライデータを格納することが可能である。なお、ヒットリプライ格納部３００１、多重化リプライ格納部３００２及びメモリリプライ格納部３００３は、ロード命令発行元に対して、データを格納した順番に依存せず任意の順番で格納したデータを返還することが可能である。
【００４０】
図４を参照すると、リプライ制御部３０１は、リプライ情報管理部３０１０、リプライ発行部３０１１及びリプライ種別判断部３０１２を有する。
【００４１】
リプライ種別判断部３０１２は、信号線１００５、１００７、１０１２それぞれの信号線を介して、リプライ識別情報３０１４を受け取る。
【００４２】
リプライ種別判断部３０１２は、信号線１００５、１００７、１０１２のうち、いずれの信号線からリプライ識別情報３０１４を受信したかにより、リプライ種別３０１３を判断する。ロード命令がキャッシュヒットし、信号線１００７を介してリプライ識別情報３０１４を受信した場合、リプライ種別判断部３０１２は、リプライ種別３０１３はキャッシュヒットによるヒットリプライと判断し、リプライ情報管理部３０１０にリプライ識別情報３０１４と共に格納する。ロード命令がキャッシュミスし、信号線１００５を介してリプライ識別情報３０１４を受信した場合、リプライ種別判断部３０１２は、リプライ種別３０１３はキャッシュミスによるメインメモリ４０からのメモリリプライと判断し、リプライ情報管理部３０１０にリプライ識別情報３０１４と共に格納する。ロード命令がリフィルマッチし、信号線１０１２を介してリプライ識別情報３０１４を受信した場合、リプライ種別判断部３０１２は、リプライ種別３０１３はリフィルマッチによる多重化されたリフィルマッチリプライと判断し、リプライ情報管理部３０１０にリプライ識別情報３０１４と共に格納する。なお、リプライ情報管理部３０１０は、リプライ種別３０１３とリプライ識別情報３０１４を格納するエントリを複数有している。
【００４３】
リプライ発行部３０１１は、リプライ格納部３００に対して、格納しているリプライデータを命令発行元へ発行するように指示する。リプライ発行部３０１１は、リプライ情報管理部３０１０に格納されているリプライ種別３０１３を参照する。リプライ発行部３０１１は、リプライ種別３０１３に基づいてヒットリプライ格納部３００１、多重化リプライ格納部３００２、メモリリプライ格納部３００３のいずれかにアクセスする。リプライ発行部３０１１は、リプライ種別３０１３がヒットリプライならばヒットリプライ格納部３００１に、メモリリプライならばメモリリプライ格納部３００３に、リフィルマッチリプライならば多重化リプライ格納部３００２にアクセスする。
【００４４】
リプライ発行部３０１１は、上記の手順でいずれかの格納部にアクセスする。リプライ発行部３０１１は、参照したリプライ種別３０１３と共にリプライ情報管理部３０１０のエントリに格納されたリプライ識別情報３０１４を含むリプライデータが、いずれかの格納部に存在するか否かを確認する。リプライデータが存在する場合、リプライ発行部３０１１は、ヒットリプライ格納部３００１、多重化リプライ格納部３００２又はメモリリプライ格納部３００３のいずれかから、当該リプライデータを命令発行元へ返還する。このとき、リプライ識別情報３０１４をリプライデータから削除して命令発行元へ返還する。リプライデータの発行指示を出した後、リプライ発行部３０は、リプライ情報管理部３０１０からリプライ種別３０１３とリプライ識別情報３０１４を削除する。
【００４５】
リプライ制御部３０１を上記のような構成とすることで、ヒットリプライ、メモリリプライ若しくは多重化されたリプライの発行を選択制御することが可能となる。このような構成とすることで、例えばリフィルマッチしたロード命令に対するリプライデータを多重化している際に、他のエントリ２１に対するロード命令がキャッシュヒットした場合に、リプライ制御部３０１による制御により、ヒットリプライの発行を待機させ、多重化したリプライデータを先に発行することが可能となる。このような制御により、リフィルマッチしたロード命令のレイテンシをより効果的に低減できるという効果が得られる。
【００４６】
なお、リフィル判定部１０４によりリフィルマッチと判定された後、リフィル制御部１０５によりエントリ２１のリフィルカウンタ２０２のインクリメントが実行される前に、メインメモリ４０からのリプライデータがリプライ多重化部３０２に送信される場合が考えられる。この場合、リフィルカウンタ２０２の値が正しく反映されていないので、リプライ多重化部３０２は、リフィルマッチしたロード命令に対してリプライデータを多重化できない。
【００４７】
これを防止するため、本実施形態では、以下のように構成する。
【００４８】
リフィル判定部１０４は、リフィルマッチと判定後、信号線１０１１を介してリプライ多重化部３０２に対してリフィルマッチが発生したことを通知する。また、リプライ制御部１０５は、信号線１０１０を介してリフィルカウンタ２０２をインクリメントすると共に、信号線１０１６を介してリプライ多重化部３０２に対して、リフィルカウンタ２０２をインクリメントしたことを通知する。リプライ多重化部３０２は、信号線１０１１により通知を受けた後、信号線１０１６により通知を受けるまでは、メインメモリ４０から受信したリプライデータを多重化せず待機する。
【００４９】
このような構成を採用することで、リフィルマッチしたロード命令と、メインメモリ４０からのリプライデータの多重化のすれ違いを効果的に防止でき、リフィルマッチしたロード命令に対して適切に多重化したリプライデータを返信することが可能になるという効果が得られる。
【００５０】
次に、図５のフローチャートを参照して、本実施形態の動作について説明する。
【００５１】
命令受信部５０が、ロード命令を受信する（Ｓ１）。
【００５２】
命令を受信すると、キャッシュ制御部１０はキャッシュヒット、キャッシュミス、リフィルマッチのいずれに該当するかを判定する（Ｓ２）。
【００５３】
まず、キャッシュ制御部１０によりキャッシュミスと判断された場合の動作について説明する。
【００５４】
キャッシュミスの場合、ミス制御部１０３は、リフィルを実行するエントリ２１を決定し、当該エントリ２１の有効フラグ２００をＯＦＦにする（Ｓ５）。
また、ミス制御部１０３は、当該エントリ２１のリフィルフラグ２０１をＯＮにする（Ｓ６）。
【００５５】
ミス制御部１０３は、リフィルを実行するエントリ２１のアドレス格納部２０３に、キャッシュミスしたロード命令が要求するデータのアドレスを書込む（Ｓ７）。
【００５６】
ミス制御部１０３は、メインメモリ４０に対してロード命令が要求するデータのリプライ要求をする（Ｓ８）。
【００５７】
メインメモリ４０は、リプライ多重化部３０２に対して、ミス制御部１０３からの要求に対するリプライデータを返信する（Ｓ９）。
【００５８】
リプライ多重化部３０２は、メインメモリ４０からリプライデータを受け取ると、リプライデータに付加されたエントリ番号を参照して、該当するエントリ２１にアクセスする。その後、リプライ多重化部３０２は、当該エントリ２１のリフィルカウンタ２０２が保持する値を参照し、値が０（ゼロ）か否かを判断する（Ｓ１０）。
【００５９】
リフィルカウンタ２０２が保持する値が０（ゼロ）でない場合、リプライ多重化部３０２は、メインメモリ４０から受信したリプライデータに付加されたエントリ番号のエントリ２１におけるデータ格納部２０４からリプライ識別情報３０１４を取得する（Ｓ１１）。
【００６０】
リプライ識別情報３０１４を取得後、リプライ多重化部３０２は、データ格納部２０４に対して、メインメモリ４０から受信したリプライデータを書込む（Ｓ１２）。
【００６１】
リプライ多重化部３０２は、メインメモリ４０から受信したリプライデータに付加されたエントリ番号に該当するエントリ２１にアクセスする。その後、リプライ多重化部３０２は、当該エントリ２１の有効フラグ２００をＯＮにし（Ｓ１３）、リフィルフラグ２０１をＯＦＦにし（Ｓ１４）、リフィルカウンタ２０２をリセットする（Ｓ１５）。
【００６２】
リプライ多重化部３０２は、リフィルカウンタ２０２が保持していた値分だけ、メインメモリ４０からのリプライデータを多重化する（Ｓ１６）。多重化する際に、リプライ多重化部３０２は、リプライデータにデータ格納部２０４から取得したリプライ識別情報３０１４を付加する。
【００６３】
リプライ多重化部３０２は、メインメモリ４０から受信したリプライデータ及び多重化したリプライデータを、リプライ格納部３００に送信する。その後、リプライ制御部３０１が、リプライ格納部３００に格納された各リプライデータを、命令発行元に対してリプライする（Ｓ１７）。
【００６４】
リフィルカウンタ２０２が保持する値が０（ゼロ）の場合、リプライ多重化部３０２は、メインメモリ４０から受信したリプライデータに付加されたエントリ番号のエントリ２１におけるデータ格納部２０４にメインメモリ４０から受信したリプライデータを書込む（Ｓ１８）。
【００６５】
リプライ多重化部３０２は、メインメモリ４０から受信したリプライデータに付加されたエントリ番号に該当するエントリ２１にアクセスする。その後、リプライ多重化部３０２は、当該エントリ２１の有効フラグ２００をＯＮにし（Ｓ１９）、リフィルフラグ２０１をＯＦＦにする（Ｓ２０）。
【００６６】
リプライ多重化部３０２は、メインメモリ４０から受信したリプライデータを、リプライ格納部３００に送信する。その後、リプライ制御部３０１が、リプライ格納部３００に格納されたリプライデータを、命令発行元に対して返還する（Ｓ２１）。
【００６７】
次に、ステップＳ２において、キャッシュヒットと判定された場合の動作について説明する。
【００６８】
キャッシュヒットと判定された場合、ヒット制御部１０１は、キャッシュヒットしたエントリ２１にアクセスする。ヒット制御部１０１は、当該エントリ２１のデータ格納部２０４に格納されているデータを、リプライ格納部３００に送信する（Ｓ３）。
【００６９】
リプライ制御部３０１が、リプライ格納部３００に格納されたキャッシュヒットによるヒットリプライを、命令発行元に対して返還する（Ｓ４）。
【００７０】
次に、ステップＳ２において、リフィルマッチと判断された場合の動作について説明する。
【００７１】
リフィル制御部１０５は、リフィル実行中のエントリ２１にアクセスし、リフィルカウンタ２０２が保持する値を１だけインクリメントする(Ｓ２２）。
リフィル制御部１０５は、リフィル実行中のエントリ２１にアクセスし、有効フラグ２００をＯＦＦにする（Ｓ２３）。
【００７２】
リフィル制御部１０５は、リフィル実行中のエントリ２１にアクセスし、データ格納部２０４にリプライ識別情報３０１４を書き込む（Ｓ２４）。
【００７３】
リフィル実行中のエントリ２１にアクセスしたロード命令（リフィルマッチしたロード命令）は、メインメモリ４０に対してリプライデータを要求せずに、リプライ多重化部３０２により多重化されたデータが返信されるのを待つ。
【００７４】
なお、上述の動作において、ロード命令がステップＳ２でキャッシュミスと判定され、キャッシュミス時の動作を実行中に、当該ロード命令の後続ロード命令がステップＳ２でリフィルマッチと判定される場合や、キャッシュヒットと判定される場合等を想定している。即ち、図５のフローチャートは、複数のロード命令が処理を、１つのフローチャートにより表しているものである。
【００７５】
（第１の実施形態による効果）
このように本発明は、先行のロード命令のリプライデータを受信したときに、当該先行ロード命令と同一アドレスに対する後続のロード命令に対して、先行ロード命令に対するリプライデータを多重化して返還する構成となっている。このような構成を採用することにより、後続のロード命令のレイテンシを短縮することができるという効果が得られる。また、後続ロード命令において、メインメモリ４０に対してリプライデータの要求を出さないので、メモリインターフェースの占有率を低減できるという効果も得られる。
【００７６】
（第２の実施形態）
次に図６を参照して、本発明の第２の実施形態について説明する。
【００７７】
なお、特に図示していない構成については、第１の実施形態と同様である。
【００７８】
図６を参照すると、本発明の第２の実施形態におけるキャッシュ部２０が有する複数のエントリ２１のデータ格納部２０４は、リフィルカウンタ領域２０４１とリプライ識別情報領域２０４２とを有する。
【００７９】
リフィルカウンタ領域２０４１は、エントリ２１がリフィルを実行中に、当該エントリ２１にアクセスしたロード命令の数を保持する。
【００８０】
リプライ識別情報領域２０４２は、リフィル判定部１０４がリフィルマッチと判断した場合、リフィル制御部１０５により信号線１０１０を介して書込まれたリプライ識別情報３０１４を格納する。
【００８１】
第２の実施形態においては、図５のステップＳ１０でリプライ多重化部３０２は、リフィルカウンタ領域２０４１にアクセスして、リフィルカウンタ領域２０４１の値が０（ゼロ）か否かを判定する。その後、リプライ多重化部３０２は、リフィルカウンタ領域２０４１の値が０（ゼロ）でない場合、当該値の分だけ、メインメモリ４０から受信したリプライデータを多重化する。
【００８２】
（第２の実施形態による効果）
本実施形態の構成を採用することにより、第１の実施形態におけるリフィルカウンタ２０２を、エントリ２１に設ける必要がなくなり、かつ、リプライ多重化部３０２によるリプライデータの多重化が可能となる。よって、キャッシュ部２０のＨＷ量を削減しつつ、後続のロード命令レイテンシを低減することができるという効果が得られる。
【図面の簡単な説明】
【００８３】
【図１】本発明の実施形態における情報処理装置を示すブロック図である。
【図２】本発明の実施形態における情報処理装置の構成を、より詳細に示したブロック図である。
【図３】リプライ格納部の構成を示すブロック図である。
【図４】リプライ制御部の構成を示すブロック図である。
【図５】本発明の動作を示すフローチャートである。
【図６】本発明の第二の実施形態におけるエントリの構成を示す図である。
【符号の説明】
【００８４】
１  情報処理装置
１０  キャッシュ制御部
２０  キャッシュ部
２１  エントリ
３０  リプライ部
４０  メインメモリ
５０  命令受信部
１００  ヒット判定部
１０１  ヒット制御部
１０２  ミス判定部
１０３  ミス制御部
１０４  リフィル判定部
１０５  リフィル制御部
２００  有効フラグ
２０１  リフィルフラグ
２０２  リフィルカウンタ
２０３  アドレス格納部
２０４  データ格納部
２０４１  リフィルカウンタ領域
２０４２  リプライ識別情報領域
３００  リプライ格納部
３０１  リプライ制御部
３０２  リプライ多重化部
３００１  ヒットリプライ格納部
３００２  多重化リプライ格納部
３００３  メモリリプライ格納部
３０１０  リプライ情報管理部
３０１１  リプライ発行部
３０１２  リプライ種別判断部
３０１３  リプライ種別
３０１４  リプライ識別情報
【図１】
2007226641.tif 000003
【図２】
2007226641.tif 000004
【図３】
2007226641.tif 000005
【図４】
2007226641.tif 000006
【図５】
2007226641.tif 000007
【図６】
2007226641.tif 000008