(57)【要約】【課題】ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることを目的とする。【解決手段】ループ展開によって生成された繰返し命令列を実行した際にも、同一命令データがキャッシュデータ保持部２２に存在する場合は、再利用情報保持部２４にその命令データに対応するポインタを格納して、キャッシュデータ保持部２２のエントリを消費しないため、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。【選択図】　　図１
2004038601.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置の命令データのうち過去に使用した命令データを記憶して効率的に命令フェッチするキャッシュシステムを設けたキャッシュメモリ装置であって、中央処理装置の要求するアドレスに対応した命令データを主記憶装置から読み出してそのアドレスと命令データとを記憶するキャッシュデータ保持部と、
前記中央処理装置の要求するアドレスに対応した前記キャッシュデータ保持部の命令データを指示するポインタと前記アドレスを記憶する再利用情報保持部と、
前記主記憶装置から読み出した命令データと同一の命令データが前記キャッシュデータ保持部に存在しているか否かを判断する再利用判定部と、
前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部または前記再利用情報保持部に記憶されている場合には対応する命令データを前記中央処理装置に供給するキャッシュ制御部と
を有し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部に存在する場合は前記キャッシュデータ保持部に記憶された前記中央処理装置の要求するアドレスに対応する命令データを前記中央処理装置に出力し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部に存在せず前記再利用情報保持部に存在する場合は前記キャッシュデータ保持部に記憶された前記中央処理装置の要求するアドレスに対応するポインタによって指示された命令データを前記中央処理装置に出力し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部にも前記再利用情報保持部にも存在しない場合は前記主記憶装置から前記中央処理装置の要求するアドレスに対応する命令データを読み出して前記中央処理装置に出力すると共に前記主記憶装置から読み出した命令データと同一の命令データが前記キャッシュデータ保持部に存在しないと判断した場合は前記キャッシュデータ保持部に前記主記憶装置から読み出した命令データおよび対応するアドレスを記憶し前記中央処理装置の要求するアドレスと異なるアドレスであっても前記主記憶装置から読み出した命令データと同一の命令データが前記キャッシュデータ保持部に存在すると判断した場合は前記主記憶装置から読み出したデータを前記キャッシュデータ保持部には記憶せずに前記アドレスと前記同一の命令データを指示するポインタを前記再利用情報保持部に記憶することを特徴とするキャッシュメモリ装置。
【請求項２】
前記キャッシュデータ保持部は前記主記憶装置に格納された命令データを所定のサイズのキャッシュライン単位で記憶し、
前記再利用情報保持部へ記憶するポインタとして前記キャッシュラインを指示するポインタを記憶し、
前記再利用判定部での命令データの比較を前記キャッシュライン単位で行うことを特徴とする請求項１記載のキャッシュメモリ装置。
【請求項３】
直前のキャッシュミスの際に前記主記憶装置から読み出した前記中央処理装置の要求するアドレスに対応した命令データを記憶するリードデータ保持部
を有し、
前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部にも前記再利用情報保持部にも存在しない場合は、前記主記憶装置から前記中央処理装置の要求するアドレスに対応する命令データを読み出して前記主記憶装置に出力すると共に、前記主記憶装置から読み出した命令データと前記リードデータ保持部の命令データを比較し、一致しない場合は前記キャッシュデータ保持部に前記主記憶装置から読み出した命令データとそのアドレスを記憶し、一致した場合は前記中央処理装置の要求するアドレスと異なるアドレスであっても前記主記憶装置から読み出したデータを前記キャッシュデータ保持部には記憶せずに前記アドレスと前記同一の命令データを指示するポインタを前記再利用情報保持部に記憶することを特徴とする請求項１または請求項２記載のキャッシュメモリ装置。
【請求項４】
直前のキャッシュヒットの際に前記キャッシュデータ保持部から出力した前記中央処理装置の要求するアドレスに対応した命令データを記憶するフェッチライン保持部
を有し、
前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部にも前記再利用情報保持部にも存在しない場合は、前記主記憶装置から前記中央処理装置の要求するアドレスに対応する命令データを読み出して前記主記憶装置に出力すると共に、前記主記憶装置から読み出した命令データと前記フェッチライン保持部の命令データを比較し、一致しない場合は前記キャッシュデータ保持部に前記主記憶装置から読み出した命令データとそのアドレスを記憶し、一致した場合は前記中央処理装置の要求するアドレスと異なるアドレスであっても前記主記憶装置から読み出したデータを前記キャッシュデータ保持部には記憶せずに前記アドレスと前記同一の命令データを指示するポインタを前記再利用情報保持部に記憶することを特徴とする請求項１または請求項２記載のキャッシュメモリ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムにおいて、メモリアクセス性能を向上させるキャッシュメモリ装置に関し、特にループ展開等による繰返し命令を処理する場合に容量を有効に用いるキャッシュメモリ装置に関する。
【０００２】
【従来の技術】
近年半導体技術の向上によってプロセッサの性能は著しく向上している。
しかしながら、中央処理装置の性能向上に対して、中央処理装置が実行する命令を記憶するメモリの性能向上は比較的緩やかであるため、中央処理装置の命令待ちが発生し、プロセッサの性能がメモリによって律速されるという問題が発生している。
【０００３】
これに対処するため、高性能なプロセッサでは主記憶装置と中央処理装置の間にキャッシュシステムを設け、中央処理装置がアクセスした命令をキャッシュメモリ装置が保持することによって、２度目以降のアクセスを高速化し、主記憶装置の実質的なアクセス速度を高速化している。
【０００４】
以下、図２１，図２２，図２３，図２４，図２５を用いて従来のキャッシュメモリ装置について説明する。
図２１は従来のキャッシュメモリ装置の構成を示すブロック図であり、図２２は従来のキャッシュメモリ装置の動作フローを示すフローチャートである。図２３は展開前のＣ言語によるプログラムを表す図，図２４は展開後のプログラムを表す図，図２５は従来の技術において展開したプログラムがキャッシュデータ保持部に格納された様子を例示する図である。
【０００５】
図２１において、プロセッサの構成要素であり命令を実行する中央処理装置１と、中央処理装置１が実行する命令を格納する主記憶装置３も同時に示している。
【０００６】
中央処理装置１は、キャッシュメモリ装置７を介して主記憶装置３から読み出された命令を順次実行するように構成されている。
キャッシュメモリ装置７は、キャッシュメモリ装置全体の制御を行うキャッシュ制御部７１と、キャッシュ制御部７１の制御に従って主記憶装置３上の命令データを１６バイト単位で最大４エントリ記憶するキャッシュデータ保持部７２から構成されている。
【０００７】
図２２において、この制御フローは、中央処理装置１によるフェッチ要求信号Ｓ１１が出力された際に開始される。
次に、キャッシュデータ保持部７２を制御し、フェッチアドレスＡ１１に対応する命令データがキャッシュデータ保持部７２に存在するか否かを判定する（Ｓ４１５）。
【０００８】
次に、命令データが存在する場合、キャッシュデータ保持部７２を制御し、キャッシュデータ保持部７２が保持するフェッチアドレスＡ１１に対応する命令データを中央処理装置１に出力する（Ｓ４１６）。
【０００９】
命令データが存在しない場合は、アクセス要求信号Ｓ７１および、アクセスアドレスＡ７１を制御し、主記憶装置３から、１６バイト単位で命令データを読み出す（Ｓ４１７）。
【００１０】
次に、キャッシュデータ保持部７２を制御し、フェッチアドレスＡ１１と、リードデータＤ３１をキャッシュデータ保持部７２に登録してＳ４１６に進める（Ｓ４１８）。
【００１１】
上記のように、中央処理装置のフェッチ要求に対して、キャッシュデータ保持部７２が読み出された命令データを記憶することにより、同一アドレスに対する次からのフェッチ要求に対しては、キャッシュデータ保持部７２が直接データを提供することが可能になり、主記憶装置へのアクセスが不要になるため、中央処理装置に対する主記憶装置の見かけ上のアクセス速度を向上することが可能になる。
【００１２】
しかしながら、従来の構成のキャッシュメモリ装置では、ループ展開等によって生成される繰返し命令の実行時に効率が低下するという課題があった。以下にこの状態を説明する。
【００１３】
ループ展開はプログラムのループ内で実行される命令列を複数回並べることによって、ループ終了の条件判定を行う命令や、ループ繰返しのための分岐命令の実行回数を減らす手法である。
【００１４】
例えば、図２３のＣ言語のプログラムに対して、ループ展開を実施した場合、図２４のような繰り返し命令を含む命令データが生成される。
この命令データを従来の構成のキャッシュメモリ装置を備えるプロセッサで実行した場合、中央処理装置１が命令データ８３１、命令データ８３２、命令データ８３３、命令データ８３４を実行していくのに従って、キャッシュデータ保持部７２の各エントリに命令データ８３１、命令データ８３２、命令データ８３３、命令データ８３４の各命令データが記憶されていく。
【００１５】
その後、中央処理装置１が後続する命令データ８３５を実行する場合、キャッシュデータ保持部には空きのエントリがないため、すでに命令データが格納されているエントリを置き換えて新たな命令データを記憶する必要がある。
【００１６】
この結果、中央処理装置が図２３の命令データを実行した後には、キャッシュデータ保持部に格納されているデータは図２５のようになり、中央処理装置が再度命令データ８３１を実行しようとした場合、命令データ８３１はすでにキャッシュデータ保持部に存在しないため、再度主記憶装置から読み出してくる必要がある。
【００１７】
このように、従来のキャッシュメモリ装置を搭載したプロセッサでは、ループ展開などによって生成された繰返しの命令列を実行した場合、キャッシュメモリの容量が不足するようになり、キャッシュメモリ装置が効率的に動作しないという問題点があった。
【００１８】
【発明が解決しようとする課題】
この問題点を解決する手法の一つとして、キャッシュデータ保持部のエントリ数を増加させるという方法があるが、この場合、キャッシュデータを記憶するメモリの量が増大し、キャッシュメモリ装置のハードウェア量が増大するという別の問題点が発生するようになる。
【００１９】
上記課題に鑑み本発明のキャッシュメモリ装置は、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることを目的とする。
【００２０】
【課題を解決するための手段】
上記目的を達成するために本発明の請求項１記載のキャッシュメモリ装置は、主記憶装置の命令データのうち過去に使用した命令データを記憶して効率的に命令フェッチするキャッシュシステムを設けたキャッシュメモリ装置であって、中央処理装置の要求するアドレスに対応した命令データを主記憶装置から読み出してそのアドレスと命令データとを記憶するキャッシュデータ保持部と、前記中央処理装置の要求するアドレスに対応した前記キャッシュデータ保持部の命令データを指示するポインタと前記アドレスを記憶する再利用情報保持部と、前記主記憶装置から読み出した命令データと同一の命令データが前記キャッシュデータ保持部に存在しているか否かを判断する再利用判定部と、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部または前記再利用情報保持部に記憶されている場合には対応する命令データを前記中央処理装置に供給するキャッシュ制御部とを有し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部に存在する場合は前記キャッシュデータ保持部に記憶された前記中央処理装置の要求するアドレスに対応する命令データを前記中央処理装置に出力し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部に存在せず前記再利用情報保持部に存在する場合は前記キャッシュデータ保持部に記憶された前記中央処理装置の要求するアドレスに対応するポインタによって指示された命令データを前記中央処理装置に出力し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部にも前記再利用情報保持部にも存在しない場合は前記主記憶装置から前記中央処理装置の要求するアドレスに対応する命令データを読み出して前記中央処理装置に出力すると共に前記主記憶装置から読み出した命令データと同一の命令データが前記キャッシュデータ保持部に存在しないと判断した場合は前記キャッシュデータ保持部に前記主記憶装置から読み出した命令データおよび対応するアドレスを記憶し前記中央処理装置の要求するアドレスと異なるアドレスであっても前記主記憶装置から読み出した命令データと同一の命令データが前記キャッシュデータ保持部に存在すると判断した場合は前記主記憶装置から読み出したデータを前記キャッシュデータ保持部には記憶せずに前記アドレスと前記同一の命令データを指示するポインタを前記再利用情報保持部に記憶することを特徴とする。
【００２１】
請求項２記載のキャッシュメモリ装置は、請求項１記載のキャッシュメモリ装置において、前記キャッシュデータ保持部は前記主記憶装置に格納された命令データを所定のサイズのキャッシュライン単位で記憶し、前記再利用情報保持部へ記憶するポインタとして前記キャッシュラインを指示するポインタを記憶し、前記再利用判定部での命令データの比較を前記キャッシュライン単位で行うことを特徴とする。
【００２２】
請求項３記載のキャッシュメモリ装置は、請求項１または請求項２記載のキャッシュメモリ装置において、直前のキャッシュミスの際に前記主記憶装置から読み出した前記中央処理装置の要求するアドレスに対応した命令データを記憶するリードデータ保持部を有し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部にも前記再利用情報保持部にも存在しない場合は、前記主記憶装置から前記中央処理装置の要求するアドレスに対応する命令データを読み出して前記主記憶装置に出力すると共に、前記主記憶装置から読み出した命令データと前記リードデータ保持部の命令データを比較し、一致しない場合は前記キャッシュデータ保持部に前記主記憶装置から読み出した命令データとそのアドレスを記憶し、一致した場合は前記中央処理装置の要求するアドレスと異なるアドレスであっても前記主記憶装置から読み出したデータを前記キャッシュデータ保持部には記憶せずに前記アドレスと前記同一の命令データを指示するポインタを前記再利用情報保持部に記憶することを特徴とする。
【００２３】
請求項４記載のキャッシュメモリ装置は、請求項１または請求項２記載のキャッシュメモリ装置において、直前のキャッシュヒットの際に前記キャッシュデータ保持部から出力した前記中央処理装置の要求するアドレスに対応した命令データを記憶するフェッチライン保持部を有し、前記中央処理装置の要求するアドレスが前記キャッシュデータ保持部にも前記再利用情報保持部にも存在しない場合は、前記主記憶装置から前記中央処理装置の要求するアドレスに対応する命令データを読み出して前記主記憶装置に出力すると共に、前記主記憶装置から読み出した命令データと前記フェッチライン保持部の命令データを比較し、一致しない場合は前記キャッシュデータ保持部に前記主記憶装置から読み出した命令データとそのアドレスを記憶し、一致した場合は前記中央処理装置の要求するアドレスと異なるアドレスであっても前記主記憶装置から読み出したデータを前記キャッシュデータ保持部には記憶せずに前記アドレスと前記同一の命令データを指示するポインタを前記再利用情報保持部に記憶することを特徴とする。
【００２４】
以上の構成により、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
【００２５】
【発明の実施の形態】
本発明の実施の形態について図面を用いて詳細に説明する。
（実施の形態１）
以下、本発明の実施の形態１について図１，図２，図３，図４，図５，図６を用いて説明する。
【００２６】
図１は本発明の実施の形態１におけるキャッシュメモリ装置の構成を示すブロック図であり、図２は本発明の実施の形態１におけるキャッシュメモリ装置の動作フローを示すフローチャートである。図３は実施の形態１における展開前のＣ言語によるプログラムを表す図，図４は実施の形態１における展開後のプログラムを表す図である。図５，図６，図７，図８は実施の形態１において展開したプログラムがキャッシュデータ保持部および再利用情報保持部に格納された様子を例示する図であり、プログラムを徐々に展開していく様子を示している。
【００２７】
図１において、プロセッサの構成要素であり命令を実行する中央処理装置１と、中央処理装置１が実行する命令を格納する主記憶装置３も同時に示している。中央処理装置１は、キャッシュメモリ装置２を介して主記憶装置３から読み出された命令を順次実行するように構成されている。
【００２８】
キャッシュメモリ装置２は、キャッシュメモリ装置全体の制御を行うキャッシュ制御部２１と、キャッシュ制御部２１の制御に従って中央処理装置１の要求するアドレスに対応する主記憶装置３上の命令データを１６バイト単位で最大４エントリ記憶するキャッシュデータ保持部２２と、主記憶装置３から読み込まれたリードデータＤ３１と同一の命令データがキャッシュデータ保持部２２に存在するか否かを判定する再利用判定部２３と、キャッシュ制御部２１の制御に従って中央処理装置１の要求するアドレスに対応するポインタを最大４エントリ記憶する再利用情報保持部２４から構成されている。
【００２９】
図２において、この制御フローは、まず、中央処理装置１によるフェッチ要求信号Ｓ１１が出力された際に開始される。
次に、中央処理装置１の要求するフェッチアドレスＡ１１と一致するアドレスがキャッシュデータ保持部２２に存在するか否かを判定して、要求する命令データが存在するか否かを判定する（Ｓ４１１）。
【００３０】
要求する命令データが存在しない場合、再利用情報保持部２４を制御し、フェッチアドレスＡ１１に対応するポインタが再利用情報保持部２４に存在するか否かを判定する（４０２）。
【００３１】
ポインタが存在しない場合、アクセス要求信号Ｓ２１および、アクセスアドレスＡ２１を制御信号とし、主記憶装置３から１６バイト単位で命令データを読み出し（４０３）、ポインタが存在する場合、再利用情報保持部２４が保持するフェッチアドレスＡ１１に対応するポインタによって指示されるキャッシュデータ保持部２２に登録された命令データを中央処理装置１に出力する（Ｓ４０８）。
【００３２】
次に、主記憶装置３から読み出されたリードデータＤ３１と同一の命令データがキャッシュデータ保持部２２に存在するか否かを再利用判定部２３にて判定する（Ｓ４０４）。
【００３３】
同一の命令データがキャッシュデータ保持部２２に存在する場合、リードデータＤ３１と同一の命令データを保持するキャッシュラインのポインタとフェッチアドレスＡ１１を再利用情報保持部２４に登録する（Ｓ４０５）。
【００３４】
Ｓ４０４において、リードデータＤ３１と同一の命令データがキャッシュデータ保持部２２に存在しない場合、フェッチアドレスＡ１１と、リードデータＤ３１をキャッシュデータ保持部２２に登録し（Ｓ４０６）、その命令データを中央処理装置１に出力する（Ｓ４０７）。
【００３５】
また、Ｓ４０１にてキャッシュデータ保持部２２にフェッチアドレスＡ１１に対応する命令データが保持されている場合、キャッシュデータ保持部２２が記憶するフェッチアドレスＡ１１に対応する命令データを中央処理装置１に出力する（Ｓ４０７）。
【００３６】
Ｓ４０２にて再利用情報保持部２４にフェッチアドレスＡ１１に対応するポインタが保持されている場合、再利用情報保持部２４が保持するフェッチアドレスＡ１１に対応するポインタによって指示されるキャッシュデータ保持部２２登録された命令データを中央処理装置１に出力する（Ｓ４０８）。
【００３７】
上記のように構成されたキャッシュメモリ装置２について、図３に示したＣ言語プログラムを実行した場合の動作を説明する。
図４に示したアセンブラプログラムは、図３に示したＣ言語プログラムにループ展開を伴うコンパイルを実施した結果の一例である。なお、この例ではプロセッサの命令は４バイトの固定長としている。
【００３８】
以下に、図１のキャッシュメモリ装置における図４のアセンブラプログラムを実行した場合の動作について説明する。
なお、初期状態ではキャッシュデータ保持部２２はいかなる命令データも保持せず、再利用情報保持部２４はいかなるポインタも保持していないとする。
【００３９】
まず、中央処理装置１は、フェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００００番地の命令データの供給をキャッシュメモリ装置２に要求する。
【００４０】
この要求を受け、キャッシュ制御部２１は、キャッシュデータ保持部２２に０ｘ００００番地の命令データが存在するか否かを判定する（図２のＳ４０１）。その結果、キャッシュデータ保持部２２は初期状態では０ｘ００００番地に対応する命令データを保持していないため、キャッシュ制御部２１は再利用情報保持部２４に０ｘ００００番地に対応するポインタが登録されているか否かを判定する（図２のＳ４０２）。
【００４１】
その結果、再利用情報保持部２４は初期状態では０ｘ００００番地に対応するポインタを保持していないため、キャッシュ制御部２１はアクセス要求信号Ｓ２１および、アクセスアドレスＡ２１を制御信号とし、主記憶装置３から０ｘ００００番地を先頭とする１６バイトの命令データ８１１を読み出す（図２のＳ４０３）。
【００４２】
次に、キャッシュ制御部２１は、主記憶装置３から読み出された１６バイトの命令データ８１１と同一の命令データがキャッシュデータ保持部２２に存在するか否かを判定する（図２のＳ４０４）。
【００４３】
その結果、キャッシュデータ保持部２２は初期状態では、上記の命令データを保持していないため、キャッシュ制御部２１は、フェッチアドレス０ｘ００００と主記憶装置３から読み出されたアドレス０ｘ００００から始まる命令データ８１１をキャッシュデータ保持部２２に登録する（図２のＳ４０６）。
【００４４】
次に、キャッシュ制御部２１は、キャッシュデータ保持部２２が記憶する０ｘ００００番地の命令データを中央処理装置１に出力させる（図２のＳ４０７）。以上の動作によって、中央処理装置１は要求した０ｘ００００番地の命令データを得て、命令の実行を開始する。
【００４５】
また、上記の動作によって、キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図５のように、キャッシュデータ保持部２２には０ｘ００００に対応する命令データ８１１を記憶し、再利用情報保持部２４には何も記憶されていない状態になる。
【００４６】
次に、中央処理装置１は後続する命令を実行するためにフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ０００４番地の命令データの供給をキャッシュメモリ装置２に要求する。
【００４７】
この要求を受け、キャッシュ制御部２１は、キャッシュデータ保持部２２に０ｘ０００４番地の命令データが存在するか否かを判定する（図２のＳ４０１）。その結果、キャッシュデータ保持部２２は０ｘ０００４番地に対応する命令データを保持しているため、キャッシュデータ保持部２２が記憶する０ｘ０００４番地の命令データを中央処理装置１に出力させる（図２のＳ４０７）。
【００４８】
以上の動作によって、中央処理装置１は要求した０ｘ０００４番地の命令データを得て命令の実行を開始することができる。
以降、０ｘ０００８番地、０ｘ０００Ｃの番地の命令データについてもキャッシュデータ保持部２２が該当するアドレスに対応する命令データを保持しているため、図２のフローチャートのＳ４０７の動作によってキャッシュデータ保持部２２が記憶する命令データが中央処理装置１に出力される。
【００４９】
次に、０ｘ００１０番地、０ｘ００１４番地、０ｘ００１８番地、０ｘ００１Ｃ番地の命令データについては、先述の０ｘ００００番地、０ｘ０００４番地、０ｘ０００８番地、０ｘ０００Ｃ番地と同様の制御によって、０ｘ００１０番地から始まる１６バイトの命令データ８１２がキャッシュデータ保持部に格納された後に、キャッシュメモリ装置２が中央処理装置１に命令データを出力し、その結果、キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図６のように命令データ８１２の命令データが加えられる。
【００５０】
次に、中央処理装置１は後続する命令を実行するためフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００２０番地の命令データをキャッシュメモリ装置２に要求する。
【００５１】
キャッシュデータ保持部２２および再利用情報保持部２４は該当するアドレスを保持していないため、キャッシュ制御部２１はアクセス要求信号Ｓ２１および、アクセスアドレスＡ２１を制御信号とし、主記憶装置３から０ｘ００２０番地を先頭とする１６バイトの命令データ８１３を読み出す（図２のＳ４０３）。
【００５２】
次に、キャッシュ制御部２１は、主記憶装置３から読み出された１６バイトの命令データ８１３と同一の命令データがキャッシュデータ保持部２２に存在するか否かを判定する（図２のＳ４０４）。
【００５３】
その結果、キャッシュデータ保持部２２は上記命令データと同一の命令データを保持しているため（図６のキャッシュデータ保持部のエントリ”１”）、キャッシュ制御部２１は再利用情報保持部２４にフェッチアドレス０ｘ００２０と上記命令データを保持しているキャッシュデータ保持部２２のエントリ”１”を登録する（図２のＳ４０５）。
【００５４】
次に、キャッシュ制御部２１は、再利用情報保持部２４が記憶するフェッチアドレス０ｘ００２０に対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データとして０ｘ００１０番地に対応する命令データを中央処理装置１に出力する（図２のＳ４０８）。
【００５５】
以上の動作によって中央処理装置１は要求した０ｘ００２０番地の命令データを得て命令の実行を開始することができる。
また、上記の動作によって、キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図７のように変化する。
【００５６】
次に、中央処理装置１は後続する命令を実行するためフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００２４番地の命令データをキャッシュメモリ装置２に要求する。
【００５７】
この要求を受け、キャッシュ制御部２１は、キャッシュデータ保持部２２に０ｘ００２４番地の命令データが存在するか否かを判定する（図２のＳ４０１）。その結果、キャッシュデータ保持部２２は０ｘ００２４番地に対応する命令データを保持していないため、キャッシュ制御部２１は、再利用情報保持部２４に０ｘ００２４番地の命令データに対応するポインタが登録されているか否かを判定する（図２のＳ４０２）。
【００５８】
その結果、再利用情報保持部２４は０ｘ００２４番地の命令データに対応するポインタを保持しているため、キャッシュ制御部２１は、再利用情報保持部２４が記憶するフェッチアドレス０ｘ００２４に対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データとして実際には０ｘ００１４番地に対応する命令データを中央処理装置１に出力する（図２のＳ４０８）。
【００５９】
以上の動作によって、中央処理装置１は要求した０ｘ００２４番地の命令データを得て命令の実行を開始することができる。
以降、０ｘ００２８番地、０ｘ００２Ｃの番地の命令データについても再利用情報保持部２４が該当するポインタに対応する命令データを保持しているため、図２のフローチャートのＳ４０８の動作によって再利用情報保持部２４が保持する該当アドレスに対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データを中央処理装置１に出力する。
【００６０】
次に、０ｘ００３０番地から０ｘ００５Ｃ番地までの命令データについても、先述の０ｘ００２０番地から０ｘ００２Ｃ番地までと同様の制御によって、キャッシュメモリ装置が中央処理装置１に命令データを出力し、その結果キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図８のように変化する。
【００６１】
以上のように、本実施の形態１によるキャッシュメモリ装置では、ループ展開によって生成された繰返し命令列を実行した際にも、同一命令データがキャッシュデータ保持部に存在する場合は、再利用情報保持部にその命令データに対応するポインタを格納して、キャッシュデータ保持部のエントリを消費しないため、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
（実施の形態２）
次に、本発明の実施の形態２におけるキャッシュメモリ装置について、図３，図４，図９，図１０，図１１，図１２，図１３，図１４を用いて説明する。
【００６２】
図９は本発明の実施の形態２におけるキャッシュメモリ装置の構成を示すブロック図であり、図１０は本発明の実施の形態２におけるキャッシュメモリ装置の動作フローを示すフローチャートである。図１１，図１２，図１３，図１４は実施の形態２において展開したプログラムがキャッシュデータ保持部および再利用情報保持部に格納された様子を例示する図であり、プログラムを徐々に展開していく様子を示している。
【００６３】
なお、図９には、プロセッサの構成要素であり命令を実行する中央処理装置１と、中央処理装置１が実行する命令を格納する主記憶装置３も同時に示している。
【００６４】
中央処理装置１は、キャッシュメモリ装置５を介して主記憶装置３から読み出された命令を順次実行するように構成されている。
キャッシュメモリ装置５は、キャッシュメモリ装置全体の制御を行うキャッシュ制御部５１と、キャッシュ制御部５１の制御に従って中央処理装置１の要求するアドレスに対応する主記憶装置３上の命令データを１６バイト単位で最大４エントリ記憶するキャッシュデータ保持部２２と、キャッシュ制御部５１の制御に従って直前にキャッシュミスした時に読み出したリードデータＤ３１を記憶するリードデータ保持部５３１と、主記憶装置から読み込まれたリードデータＤ３１と、リードデータ保持部５３１に格納された命令データが同一か否かを判定する再利用判定部５３２と、キャッシュ制御部５１の制御に従って中央処理装置１の要求するアドレスに対応する再利用情報を最大４エントリ記憶する再利用情報保持部２４から構成されている。
【００６５】
次に、図１０を用いてキャッシュメモリ装置の動作について説明する。
図１０において、まず、中央処理装置１によるフェッチ要求信号Ｓ１１が出力される。
【００６６】
Ｓ４０１、Ｓ４０２、Ｓ４０３、Ｓ４０６、Ｓ４０７、Ｓ４０８については、実施の形態１における図２のフローチャートで示した動作と同一であるので説明を省略する。
【００６７】
フェッチアドレスＡ１１に対応する命令データを主記憶装置３から読み出した後、キャッシュ制御部５１は、主記憶装置３より読み出されたリードデータＤ３１と、リードデータ保持部５３１に格納された直前にキャッシュミスした時の命令データが同一であるか否かを判定する（Ｓ４０９）。
【００６８】
同一である場合、キャッシュ制御部５１は、フェッチアドレスＡ１１と、リードデータ保持部５３１が保持するポインタを再利用情報保持部２４に格納する（Ｓ４１０）。
【００６９】
同一でない場合、フェッチアドレスＡ１１とリードデータＤ３１をキャッシュデータ保持部２２に登録し（Ｓ４０６）、キャッシュ制御部５１は、主記憶装置より読み出されたリードデータＤ３１と、それが格納されたキャッシュデータ保持部２２のエントリをリードデータ保持部５３１に格納する（Ｓ４１１）。
【００７０】
上記のように構成されたキャッシュメモリ装置５について、図３に示したＣ言語プログラムを実行した場合の動作を説明する。
以下に、図９のキャッシュメモリ装置５における図４のアセンブラプログラムを実行した場合の動作について説明する。
【００７１】
なお、初期状態ではキャッシュデータ保持部２２はいかなる命令データも保持せず、再利用情報保持部２４はいかなるポインタも保持せず、リードデータ保持部５３１はいかなる命令データも保持していないとする。
【００７２】
まず、中央処理装置１は、フェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００００番地の命令データをキャッシュメモリ装置５に要求する。
【００７３】
この要求を受け、キャッシュ制御部５１は、キャッシュデータ保持部２２に０ｘ００００番地の命令データが存在するか否かを判定する（図１０のＳ４０１）。
【００７４】
その結果、キャッシュデータ保持部２２は初期状態では０ｘ００００番地に対応する命令データを保持していないため、キャッシュ制御部５１は再利用情報保持部２４に０ｘ００００番地に対応するポインタが登録されているか否かを判定する（図１０のＳ４０２）。
【００７５】
その結果、再利用情報保持部２４は初期状態では０ｘ００００番地に対応するポインタを保持していないため、キャッシュ制御部５１はアクセス要求信号Ｓ５１および、アクセスアドレスＡ５１を制御信号とし、主記憶装置３から０ｘ００００番地を先頭とする１６バイトの命令データ８１１を読み出す（図１０のＳ４０３）。
【００７６】
次に、キャッシュ制御部５１は、主記憶装置から読み出された命令データ８１１と、リードデータ保持部５３１が保持する命令データが一致するか否かを判定する（図１０のＳ４０９）。
【００７７】
その結果、リードデータ保持部５３１は初期状態ではいかなる命令データも保持せず、命令データは一致しないため、キャッシュ制御部５１はフェッチアドレス０ｘ００００と主記憶装置３から読み出された命令データ８１１をキャッシュデータ保持部２２に登録する（図１０のＳ４０６）。
【００７８】
次に、キャッシュ制御部５１は、主記憶装置３から読み出された命令データ８１１と、リードデータＤ３１を格納したキャッシュデータ保持部のエントリ（ここでは”０”とする）をリードデータ保持部５３１に登録する（図１０のＳ４１１）。
【００７９】
次に、キャッシュ制御部５１は、キャッシュデータ保持部２２を制御し、キャッシュデータ保持部２２が記憶する０ｘ００００番地の命令データを中央処理装置１に出力させる（図１０のＳ４０７）。
【００８０】
以上の動作によって、中央処理装置１は要求した０ｘ００００番地の命令を得て、命令の実行を開始する。
また、上記の動作によって、キャッシュデータ保持部２２および再利用情報保持部２４および、リードデータ保持部５３１がそれぞれ記憶する情報は図１１のように、キャッシュデータ保持部２２，リードデータ保持部５３１には０ｘ００００に対応する命令データ８１１を記憶し、再利用情報保持部２４には何も記憶されていない状態になる。
【００８１】
次に、中央処理装置１は後続する命令を実行するためにフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ０００４番地の命令データをキャッシュメモリ装置５に要求する。
【００８２】
この要求を受け、キャッシュ制御部５１は、キャッシュデータ保持部２２に０ｘ０００４番地の命令データが存在するか否かを判定する（図１０のＳ４０１）。
【００８３】
その結果、キャッシュデータ保持部２２は０ｘ０００４番地に対応する命令データを保持しているため、キャッシュ制御部５１はキャッシュデータ保持部２２が記憶する０ｘ０００４番地の命令データを中央処理装置１に出力させる（図１０のＳ４０７）。
【００８４】
以上の動作によって、中央処理装置１は要求した０ｘ０００４番地の命令データを得て命令の実行を開始することができる。
以降、０ｘ０００８番地、０ｘ０００Ｃの番地の命令データについてもキャッシュデータ保持部２２が該当するアドレスに対応する命令データを保持しているため、図１０のフローチャートのＳ４０７の動作によってキャッシュデータ保持部２２が記憶する命令データを中央処理装置１に出力する。
【００８５】
次に、中央処理装置１は後続する命令を実行するためにフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００１０番地の命令データをキャッシュメモリ装置５に要求する。
【００８６】
この要求を受け、キャッシュ制御部５１は、キャッシュデータ保持部２２に０ｘ００１０番地の命令データが存在するか否かを判定する（図１０のＳ４０１）。
【００８７】
その結果、キャッシュデータ保持部２２は０ｘ００１０番地に対応する命令データを保持していないため、キャッシュ制御部５１は再利用情報保持部２４に０ｘ００１０番地に対応するポインタが登録されているか否かを判定する（図１０のＳ４０２）。
【００８８】
その結果、再利用情報保持部２４は０ｘ００１０番地に対応するポインタを保持していないため、キャッシュ制御部５１はアクセス要求信号Ｓ５１および、アクセスアドレスＡ５１を制御信号とし、主記憶装置３から０ｘ００１０番地を先頭とする１６バイトの命令データ８１２を読み出す（図１０のＳ４０３）。
【００８９】
次に、キャッシュ制御部５１は、主記憶装置から読み出された命令データ８１２と、リードデータ保持部５３１が保持する命令データが一致するか否かを判定する（図１０のＳ４０９）。
【００９０】
その結果、リードデータ保持部５３１が保持する命令データ８１１と、主記憶装置３から読み出された命令データ８１２は一致しないため、フェッチアドレス０ｘ００１０と主記憶装置３から読み出された命令データ８１２をキャッシュデータ保持部２２に登録する（図１０のＳ４０６）。
【００９１】
次に、キャッシュ制御部５１は、主記憶装置３から読み出された命令データ８１２と、それが格納されているキャッシュデータ保持部２２のエントリ（ここでは”１”とする）をリードデータ保持部５３１に登録する（図１０のＳ４１１）。
【００９２】
次に、キャッシュ制御部５１は、キャッシュデータ保持部２２が記憶する０ｘ００１０番地の命令データを中央処理装置１に出力する（図１０のＳ４０７）。以上の動作によって、中央処理装置１は要求した０ｘ００１０番地の命令データを得て、命令の実行を開始する。
【００９３】
次に、０ｘ００１４番地、０ｘ００１８番地、０ｘ００１Ｃ番地の命令データについては、先述の０ｘ０００４番地、０ｘ０００８番地、０ｘ０００Ｃ番地と同様の制御によって、キャッシュメモリ装置５が中央処理装置１に命令データを出力し、その結果、キャッシュデータ保持部２２および再利用情報保持部２４およびリードデータ保持部５３１がそれぞれ記憶する情報は図１２のように変化する。
【００９４】
次に、中央処理装置１は後続する命令を実行するためフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００２０番地の命令データをキャッシュメモリ装置５に要求する。
【００９５】
キャッシュデータ保持部２２および再利用情報保持部２４は該当するアドレスを保持していないため、キャッシュ制御部５１はアクセス要求信号Ｓ５１および、アクセスアドレスＡ５１を制御信号とし、主記憶装置３から０ｘ００２０番地を先頭とする１６バイトの命令データ８１３を読み出す（図１０のＳ４０３）。
【００９６】
次に、キャッシュ制御部５１は、主記憶装置から読み出された命令データ８１３と、リードデータ保持部５３１が保持する命令データが一致するか否かを判定する（図１０のＳ４０９）。
【００９７】
その結果、リードデータ保持部５３１が記憶する命令データ８１２と、主記憶装置３から読み出された命令データ８１３は一致するため、キャッシュ制御部５１は再利用情報保持部２４にフェッチアドレス０ｘ００２０とリードデータ保持部が記憶しているエントリ番号”１”を登録する（図１０のＳ４１０）。
【００９８】
次に、キャッシュ制御部５１は、再利用情報保持部２４が記憶するフェッチアドレス０ｘ００２０に対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データとして実際には０ｘ００１０番地に対応する命令データを中央処理装置１に出力する（図１０のＳ４０８）。
【００９９】
以上の動作によって中央処理装置１は要求した０ｘ００２０番地の命令データを得て命令の実行を開始することができる。
また、上記の動作によって、キャッシュデータ保持部２２および再利用情報保持部２４およびリードデータ保持部５３１がそれぞれ記憶する情報は図１３のように変化する。
【０１００】
次に、中央処理装置１は後続する命令を実行するためフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００２４番地の命令データをキャッシュメモリ装置５に要求する。
【０１０１】
この要求を受け、キャッシュ制御部５１は、キャッシュデータ保持部２２に０ｘ００２４番地の命令データが存在するか否かを判定する（図１０のＳ４０１）。
【０１０２】
その結果、キャッシュデータ保持部２２は０ｘ００２４番地に対応する命令データを保持していないため、キャッシュ制御部５１は再利用情報保持部２４に０ｘ００２４番地の命令データに対応するポインタが登録されているか否かを判定する（図１０のＳ４０２）。
【０１０３】
その結果、再利用情報保持部２４は０ｘ００２４番地の命令データに対応するポインタを保持しているため、キャッシュ制御部５１は、再利用情報保持部２４が記憶するフェッチアドレス０ｘ００２４に対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データ（実際には０ｘ００１４番地に対応する命令データ）を中央処理装置１に出力する（図１０のＳ４０８）。
【０１０４】
以上の動作によって、中央処理装置１は要求した０ｘ００２４番地の命令データを得て命令の実行を開始することができる。
以降、０ｘ００２８番地、０ｘ００２Ｃ番地の命令データについても再利用情報保持部２４が該当するアドレスに対応する命令データを保持しているため、図１０のフローチャートのＳ４０８の動作によって再利用情報保持部２４が保持する該当アドレスに対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データが中央処理装置１に出力される。
【０１０５】
次に、０ｘ００３０番地から０ｘ００５Ｃ番地までの命令データについても、先述の０ｘ００２０番地から０ｘ００２Ｃ番地までと同様の制御によって、キャッシュメモリ装置が中央処理装置１に命令データを出力し、その結果キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図１４のように変化する。
【０１０６】
以上のように、本実施の形態２によるキャッシュメモリ装置では、ループ展開によって生成された繰返し命令列を実行した際にも、同一命令データがキャッシュデータ保持部に存在する場合は、再利用情報保持部にその命令データに対応するポインタを格納し、さらに、主記憶装置から読み出した命令データと、直前のキャッシュミス時にリードした命令データとを比較する再利用判定部を備えることにより、主記憶装置から読み出された命令データの比較の対象を直前に主記憶装置から読み出された命令データに限定することができ、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
（実施の形態３）
次に、本発明の実施の形態３におけるキャッシュメモリ装置について、図３，図４，図１５，図１６，図１７，図１８，図１９，図２０を用いて説明する。
【０１０７】
図１５は本発明の実施の形態３におけるキャッシュメモリ装置の構成を示すブロック図であり、図１６は本発明の実施の形態３におけるキャッシュメモリ装置の動作フローを示すフローチャートである。図１７，図１８，図１９，図２０は実施の形態３において展開したプログラムがフェッチライン保持部および再利用情報保持部に格納された様子を例示する図であり、プログラムを徐々に展開していく様子を示している。
【０１０８】
なお、図１５には、プロセッサの構成要素であり命令を実行する中央処理装置１と、中央処理装置１が実行する命令を格納する主記憶装置３も同時に示している。
【０１０９】
中央処理装置１は、キャッシュメモリ装置６を介して主記憶装置３から読み出された命令を順次実行するように構成されている。
キャッシュメモリ装置６は、キャッシュメモリ装置全体の制御を行うキャッシュ制御部６１と、キャッシュ制御部６１の制御に従って中央処理装置１の要求するアドレスに対応する主記憶装置３上の命令データを１６バイト単位で最大４エントリ記憶するキャッシュデータ保持部２２と、キャッシュ制御部６１の制御に従ってキャッシュデータ保持部の保持する直前にキャッシュヒットしたキャッシュラインの命令データを記憶するフェッチライン保持部６３１と、主記憶装置から読み込まれたリードデータＤ３１と、フェッチライン保持部６３１に格納された命令データが同一か否かを判定する再利用判定部６３２と、キャッシュ制御部５１の制御に従ってフェッチアドレスＡ１１およびフェッチアドレスＡ１１に対応するポインタを最大４エントリ記憶する再利用情報保持部２４から構成されている。
【０１１０】
図１６において、この制御フローは、中央処理装置１によるフェッチ要求信号Ｓ１１が出力された際に開始される。
Ｓ４０１、Ｓ４０２、Ｓ４０３、Ｓ４０６、Ｓ４０７、Ｓ４０８については、実施の形態２における図９のフローチャートで示した動作と同一であるので説明を省略する。
【０１１１】
Ｓ４０３においてフェッチアドレスに対応する命令データを読み出した後、キャッシュ制御部６１は、主記憶装置３より読み出されたリードデータＤ３１と、フェッチライン保持部６３１に格納された命令データが同一であるか否かを判定する（Ｓ４１２）。
【０１１２】
一致した場合、キャッシュ制御部６１は、再利用情報保持部２４を制御し、フェッチアドレスＡ１１と、フェッチライン保持部６３１が保持するポインタを再利用情報保持部２４に格納する（Ｓ４１３）。
【０１１３】
Ｓ４０７で命令データを中央処理装置１に出力してから、キャッシュ制御部６１は、キャッシュデータ保持部２２が中央処理装置１に対して出力した命令データを含むキャッシュラインへのポインタおよびキャッシュラインに格納されている命令データをフェッチライン保持部６３１に格納させる（Ｓ４１４）。
【０１１４】
上記のように構成されたキャッシュメモリ装置６について、図３に示したＣ言語プログラムを実行した場合の動作を説明する。
図４に示したアセンブラプログラムは、図３に示したＣ言語プログラムにループ展開を伴うコンパイルを実施した結果の一例である。なお、この例ではプロセッサの命令は４バイトの固定長としている。
【０１１５】
以下に、図１５のキャッシュメモリ装置６に対して図４のアセンブラプログラムを実行した場合の動作について説明する。
なお、初期状態では、キャッシュデータ保持部２２はいかなる命令データも保持せず、再利用情報保持部２４はいかなるポインタも保持せず、フェッチライン保持部６３１はいかなる命令データも保持していないとする。
【０１１６】
中央処理装置１は、フェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御して０ｘ００００番地の命令の供給をキャッシュメモリ装置６に要求する。
この要求を受け、キャッシュ制御部６１は、キャッシュデータ保持部２２を制御し、キャッシュデータ保持部２２に０ｘ００００番地の命令が存在するか否かを判定する（図１６のＳ４０１）。
【０１１７】
その結果、キャッシュデータ保持部２２は初期状態では０ｘ００００番地に対応する命令データを保持していないため、キャッシュ制御部６１は、再利用情報保持部２４に０ｘ００００番地のアドレスに対応するポインタが登録されているか否かを判定する（図１６のＳ４０２）。
【０１１８】
その結果、再利用情報保持部２４は初期状態では０ｘ００００番地に対応するポインタを保持していないため、キャッシュ制御部６１はアクセス要求信号Ｓ２１および、アクセスアドレスＡ２１を制御信号とし、主記憶装置３から０ｘ００００番地を先頭とする１６バイトの命令データ８１１を読み出す（図１６のＳ４０３の動作）。
【０１１９】
次に、キャッシュ制御部６１は、主記憶装置から読み出された命令データ８１１と、リードデータ保持部６３１が保持する命令データが一致するか否かを判定する（図１６のＳ４１２動作）。
【０１２０】
その結果、リードデータ保持部６３１は初期状態ではいかなる命令データも保持せず、命令データは一致しないため、キャッシュ制御部６１は、フェッチアドレス０ｘ００００と主記憶装置３から読み出された命令データ８１１をキャッシュデータ保持部２２に登録する（図１６のＳ４０６の動作）。
【０１２１】
次に、キャッシュ制御部６１は、キャッシュデータ保持部２２が記憶する０ｘ００００番地の命令データを中央処理装置１に出力する（図１６のＳ４０７の動作）。
【０１２２】
次に、キャッシュ制御部６１は、キャッシュデータ保持部が中央処理装置１に対して出力した０ｘ００００番地の命令データを含むキャッシュラインへのポインタ”０”と、キャッシュラインに含まれる命令データをフェッチライン保持部６３１に記憶する。
【０１２３】
以上の動作によって、中央処理装置１は要求した０ｘ００００番地の命令データを得て、命令の実行を開始する。
また、上記の動作によって、キャッシュデータ保持部２２および再利用情報保持部２４および、フェッチライン保持部６３１がそれぞれ記憶する情報は図１７のようになる。
【０１２４】
次に、中央処理装置１は後続する命令を実行するためにフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ０００４番地の命令データの供給をキャッシュメモリ装置５に要求する。
【０１２５】
この要求を受け、キャッシュ制御部５１は、キャッシュデータ保持部２２に０ｘ０００４番地の命令データが存在するか否かを判定する（図１６のＳ４０１の動作）。
【０１２６】
その結果、キャッシュデータ保持部２２は０ｘ０００４番地に対応する命令データを保持しているため、キャッシュ制御部５１は、キャッシュデータ保持部２２が記憶する０ｘ０００４番地の命令データを中央処理装置１に出力する（図１６のＳ４０７の動作）。
【０１２７】
次に、キャッシュ制御部６１は、キャッシュデータ保持部が中央処理装置１に対して出力した０ｘ０００４番地の命令データを含むキャッシュラインへのポインタ”０”と、キャッシュラインに含まれる命令データをフェッチライン保持部６３１に記憶させる。
【０１２８】
以上の動作によって、中央処理装置１は要求した０ｘ０００４番地の命令データを得て命令の実行を開始することができる。
以降、０ｘ０００８番地、０ｘ０００Ｃの番地の命令データについてもキャッシュデータ保持部２２が該当するアドレスに対応する命令データを保持しているため、図１６のフローチャートの４０７の動作によってキャッシュデータ保持部２２が記憶する命令データが中央処理装置１に出力される。
【０１２９】
次に、中央処理装置１は後続する命令を実行するためにフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００１０番地の命令データをキャッシュメモリ装置６に要求する。
【０１３０】
この要求を受け、キャッシュ制御部６１は、キャッシュデータ保持部２２に０ｘ００１０番地の命令データが存在するか否かを判定する（図１６のＳ４０１の動作）。
【０１３１】
その結果、キャッシュデータ保持部２２は０ｘ００１０番地に対応する命令データを保持していないため、キャッシュ制御部６１は、再利用情報保持部２４に０ｘ００１０番地に対するポインタが登録されているか否かを判定する（図１６のＳ４０２の動作）。
【０１３２】
その結果、再利用情報保持部２４は０ｘ００１０番地に対応するアドレスを保持していないため、キャッシュ制御部６１はアクセス要求信号Ｓ６１および、アクセスアドレスＡ６１を制御信号とし、主記憶装置３から０ｘ００１０番地を先頭とする１６バイトの命令データ８１２を読み出す（図１６のＳ４０３の動作）。
【０１３３】
次に、キャッシュ制御部６１は、再利用判定部６３２を制御し、主記憶装置３から読み出された命令データ８１２と、フェッチライン保持部６３１が保持する命令データが一致するか否かを判定する（図１６のＳ４１２の動作）。
【０１３４】
その結果、フェッチライン保持部６３１が保持する命令データ８１１と、主記憶装置３から読み出された命令データ８１２は一致しないため、フェッチアドレス０ｘ００１０と主記憶装置３から読み出された命令データ８１２をキャッシュデータ保持部２２に登録する（図１６のＳ４０６の動作）。
【０１３５】
次に、キャッシュ制御部６１は、キャッシュデータ保持部２２が記憶する０ｘ００１０番地の命令データを中央処理装置１に出力する（図１６のＳ４０７の動作）。
【０１３６】
次に、キャッシュ制御部６１は、キャッシュデータ保持部２２が中央処理装置１に対して出力した０ｘ００１０番地の命令データを含むキャッシュラインへのポインタ”１”と、キャッシュラインに含まれる命令データをフェッチライン保持部６３１に記憶する。
【０１３７】
以上の動作によって、中央処理装置１は要求した０ｘ００１０番地の命令データを得て、命令の実行を開始する。
次に、０ｘ００１４番地、０ｘ００１８番地、０ｘ００１Ｃ番地の命令データについては、先述の０ｘ０００４番地、０ｘ０００８番地、０ｘ０００Ｃ番地と同様の制御によって、キャッシュメモリ装置６が中央処理装置１に命令データを出力し、その結果、キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図１８のように変化する。
【０１３８】
次に、中央処理装置１は後続する命令を実行するためフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００２０番地の命令データの供給をキャッシュメモリ装置６に要求する。
【０１３９】
キャッシュデータ保持部２２および再利用情報保持部２４は該当するアドレスを保持していないため、キャッシュ制御部６１はアクセス要求信号Ｓ６１および、アクセスアドレスＡ６１を制御信号とし、主記憶装置３から０ｘ００２０番地を先頭とする１６バイトの命令データ８１３を読み出す（図１６のＳ４０３の動作）。
【０１４０】
次に、キャッシュ制御部６１は、主記憶装置３から読み出された命令データ８１３と、フェッチライン保持部６３１が保持する命令データ８１２が一致するか否かを判定する（図１６のＳ４１２の動作）。
【０１４１】
その結果、フェッチライン保持部６３１が記憶する命令データ８１２と、主記憶装置３から読み出された命令データ８１３は一致するため、キャッシュ制御部６１は再利用情報保持部２４にフェッチアドレス０ｘ００２０とリードデータ保持部が記憶しているポインタ”１”を登録する（図１６のＳ４１３の動作）。
【０１４２】
次に、キャッシュ制御部６１は、再利用情報保持部２４が記憶するフェッチアドレス０ｘ００２０に対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データとして実際には０ｘ００１０番地に対応する命令データを中央処理装置１に出力する（図１６のＳ４０８の動作）。
【０１４３】
次に、キャッシュ制御部６１は、キャッシュデータ保持部２２および、フェッチライン保持部６３１を制御し、キャッシュデータ保持部が中央処理装置１に対して出力した０ｘ００１０番地の命令を含むキャッシュラインへのポインタ”１”と、キャッシュラインに含まれる命令データをフェッチライン保持部６３１に記憶する。
【０１４４】
以上の動作によって中央処理装置１は要求した０ｘ００２０番地の命令データを得て命令の実行を開始することができる。
また、上記の動作によって、キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図１９のように変化する。
【０１４５】
次に、中央処理装置１は後続する命令を実行するためフェッチ要求信号Ｓ１１、フェッチアドレスＡ１１を制御信号として０ｘ００２４番地の命令データの供給をキャッシュメモリ装置６に要求する。
【０１４６】
この要求を受け、キャッシュ制御部６１は、キャッシュデータ保持部２２を制御し、キャッシュデータ保持部２２に０ｘ００２４番地の命令データが存在するか否かを判定する（図１６のＳ４０１の動作）。
【０１４７】
その結果、キャッシュデータ保持部２２は０ｘ００２４番地に対応する命令データを保持していないため、キャッシュ制御部６１は、再利用情報保持部２４に０ｘ００２４番地のアドレスに対応するポインタが登録されているか否かを判定する（図１６のＳ４０２の動作）。
【０１４８】
その結果、再利用情報保持部２４は０ｘ００２４番地のアドレスに対応するポインタを保持しているため、キャッシュ制御部６１は、再利用情報保持部２４が記憶するフェッチアドレス０ｘ００２４に対応するポインタ”１”についてキャッシュデータ保持部２２が記憶する命令データとして実際には０ｘ００１４番地に対応する命令データを中央処理装置１に出力する（図１６のＳ４０８の動作）。
【０１４９】
次に、キャッシュ制御部６１は、キャッシュデータ保持部が中央処理装置１に対して出力した０ｘ００１０番地の命令データを含むキャッシュラインへのポインタ”１”と、キャッシュラインに含まれる命令データをフェッチライン保持部６３１に記憶する（図１６のＳ４１４の動作）。
【０１５０】
以上の動作によって、中央処理装置１は要求した０ｘ００２４番地の命令データを得て命令の実行を開始することができる。
以降、０ｘ００２８番地、０ｘ００２Ｃの番地の命令データについても再利用情報保持部２４が該当するアドレスに対応するポインタを保持しているため、図１６のフローチャートのＳ４０８の動作によって再利用情報保持部２４が保持する該当アドレスに対応するエントリ”１”についてキャッシュデータ保持部２２が記憶する命令データが中央処理装置１に出力される。
【０１５１】
次に、０ｘ００３０番地から０ｘ００５Ｃ番地までの命令データについても、先述の０ｘ００２０番地から０ｘ００２Ｃ番地までと同様の制御によって、キャッシュメモリ装置が中央処理装置１に命令データを出力し、その結果キャッシュデータ保持部２２および再利用情報保持部２４がそれぞれ記憶する情報は図２０のように変化する。
【０１５２】
以上のように、本実施の形態３によるキャッシュメモリ装置では、ループ展開によって生成された繰返し命令列を実行した際にも、同一命令データがキャッシュデータ保持部に存在する場合は、再利用情報保持部にその命令データに対応するポインタを格納し、命令データの比較の対象を直前にキャッシュヒットしたキャッシュラインの命令データに限定することにより、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
【０１５３】
【発明の効果】
以上のように、本発明によるキャッシュメモリ装置では、ループ展開によって生成された繰返し命令列を実行した際にも、同一命令データがキャッシュデータ保持部に存在する場合は、再利用情報保持部にその命令データに対応するポインタを格納して、キャッシュデータ保持部のエントリを消費しないため、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
【０１５４】
また、主記憶装置から読み出した命令データと、直前のキャッシュミス時にリードした命令データとを比較する再利用判定部を備えることにより、主記憶装置から読み出された命令データの比較の対象を直前に主記憶装置から読み出された命令データに限定することができ、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
【０１５５】
さらに、命令データの比較の対象を直前にキャッシュヒットしたキャッシュラインの命令データに限定することにより、ループ展開によって生成される繰返し命令等が存在する場合においても、ハードウェア量を増加することなく、キャッシュメモリの容量消費を抑制し、キャッシュメモリの効率的な使用を可能とすることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態１におけるキャッシュメモリ装置の構成を示すブロック図
【図２】本発明の実施の形態１におけるキャッシュメモリ装置の動作フローを示すフローチャート
【図３】実施の形態１における展開前のＣ言語によるプログラムを表す図
【図４】実施の形態１における展開後のプログラムを表す図
【図５】実施の形態１において展開したプログラムがキャッシュデータ保持部および再利用情報保持部に格納された様子を例示する図
【図６】実施の形態１において展開したプログラムがキャッシュデータ保持部および再利用情報保持部に格納された様子を例示する図
【図７】実施の形態１において展開したプログラムがキャッシュデータ保持部および再利用情報保持部に格納された様子を例示する図
【図８】実施の形態１において展開したプログラムがキャッシュデータ保持部および再利用情報保持部に格納された様子を例示する図
【図９】本発明の実施の形態２におけるキャッシュメモリ装置の構成を示すブロック図
【図１０】本発明の実施の形態２におけるキャッシュメモリ装置の動作フローを示すフローチャート
【図１１】実施の形態２において展開したプログラムがキャッシュデータ保持部および再利用情報保持部およびリードデータ保持部に格納された様子を例示する図
【図１２】実施の形態２において展開したプログラムがキャッシュデータ保持部および再利用情報保持部およびリードデータ保持部に格納された様子を例示する図
【図１３】実施の形態２において展開したプログラムがキャッシュデータ保持部および再利用情報保持部およびリードデータ保持部に格納された様子を例示する図
【図１４】実施の形態２において展開したプログラムがキャッシュデータ保持部および再利用情報保持部およびリードデータ保持部に格納された様子を例示する図
【図１５】本発明の実施の形態３におけるキャッシュメモリ装置の構成を示すブロック図
【図１６】本発明の実施の形態３におけるキャッシュメモリ装置の動作フローを示すフローチャート
【図１７】実施の形態３において展開したプログラムがフェッチライン保持部および再利用情報保持部に格納された様子を例示する図
【図１８】実施の形態３において展開したプログラムがフェッチライン保持部および再利用情報保持部に格納された様子を例示する図
【図１９】実施の形態３において展開したプログラムがフェッチライン保持部および再利用情報保持部に格納された様子を例示する図
【図２０】実施の形態３において展開したプログラムがフェッチライン保持部および再利用情報保持部に格納された様子を例示する図
【図２１】従来のキャッシュメモリ装置の構成を示すブロック図
【図２２】従来のキャッシュメモリ装置の動作フローを示すフローチャート
【図２３】展開前のＣ言語によるプログラムを表す図
【図２４】展開後のプログラムを表す図
【図２５】従来の技術において展開したプログラムがキャッシュデータ保持部に格納された様子を例示する図
【符号の説明】
１　　中央処理装置
Ｓ１１　　フェッチ要求信号
Ａ１１　　フェッチアドレス
２　　キャッシュメモリ装置
２１　　キャッシュ制御部
２２　　キャッシュデータ保持部
２３　　再利用判定部
２４　　再利用情報保持部
Ｓ２１　　アクセス要求信号
Ａ２１　　アクセスアドレス
３　　主記憶装置
Ｄ３１　　リードデータ
５　　キャッシュメモリ装置
５１　　キャッシュ制御部
５３１　　リードデータ保持部
５３２　　再利用判定部
Ｓ５１　　アクセス要求信号
Ａ５１　　アクセスアドレス
６　　キャッシュメモリ装置
６１　　キャッシュ制御部
６３１　　フェッチライン保持部
６３２　　再利用判定部
Ｓ６１　　アクセス要求信号
Ａ６１　　アクセスアドレス
７　　キャッシュメモリ装置
７１　　キャッシュ制御部
７２　　キャッシュデータ保持部
Ｓ７１　　アクセス要求信号
Ａ７１　　アクセスアドレス
８１１　　命令データ
８１２　　命令データ
８１３　　命令データ
８１４　　命令データ
８１５　　命令データ
８１６　　命令データ
８３１　　命令データ
８３２　　命令データ
８３３　　命令データ
８３４　　命令データ
８３５　　命令データ
【図１】
2004038601.tif 000003
【図２】
2004038601.tif 000004
【図３】
2004038601.tif 000005
【図４】
2004038601.tif 000006
【図５】
2004038601.tif 000007
【図６】
2004038601.tif 000008
【図７】
2004038601.tif 000009
【図８】
2004038601.tif 000010
【図９】
2004038601.tif 000011
【図１０】
2004038601.tif 000012
【図１１】
2004038601.tif 000013
【図１２】
2004038601.tif 000014
【図１３】
2004038601.tif 000015
【図１４】
2004038601.tif 000016
【図１５】
2004038601.tif 000017
【図１６】
2004038601.tif 000018
【図１７】
2004038601.tif 000019
【図１８】
2004038601.tif 000020
【図１９】
2004038601.tif 000021
【図２０】
2004038601.tif 000022
【図２１】
2004038601.tif 000023
【図２２】
2004038601.tif 000024
【図２３】
2004038601.tif 000025
【図２４】
2004038601.tif 000026
【図２５】
2004038601.tif 000027