(57)【特許請求の範囲】
【請求項１】
スカラプロセッサと、ベクトルプロセッサと、前記スカラプロセッサ専用の一次キャッシュと、前記スカラプロセッサと前記ベクトルプロセッサとで共用の二次キャッシュ又はメモリとを有する演算処理装置であって、
ベクトルストア命令のアドレスを計算し、前記計算したベクトルストア命令のアドレスと前記一次キャッシュのアドレスとを比較し、前記計算したベクトルストア命令のアドレスと前記一次キャッシュのアドレスとが一致したときには、前記一次キャッシュを無効にするスヌープ処理手段と、
前記スヌープ処理中に発行されたスカラロード命令のアドレスと、前記計算したベクトルストア命令のアドレスとを比較し、前記スカラロード命令のアドレスと前記計算したベクトルストア命令のアドレスとが一致したら、キャッシュミスが生じると判定するキャッシュミス検出手段と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記キャッシュミス検出手段は、前記キャッシュミスを検知したら、前記二次キャッシュ又は前記メモリにデータ転送要求を発行することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記ベクトルストア命令のアドレスは、ベースアドレスをＢ、ディスタンスをＤ、ベクトル長をＶＬとすると、Ｂ、Ｂ＋Ｄ、Ｂ＋２Ｄ、…、Ｂ＋Ｄ×（ＶＬ−１）として計算することを特徴とする請求項１又は２に記載の演算処理装置。
【請求項４】
スカラプロセッサと、ベクトルプロセッサと、前記スカラプロセッサ専用の一次キャッシュと、前記スカラプロセッサと前記ベクトルプロセッサとで共用の二次キャッシュ又はメモリとを有する演算処理方法であって、
ベクトルストア命令のアドレスを計算し、前記計算したベクトルストア命令のアドレスと前記一次キャッシュのアドレスとを比較し、前記計算したベクトルストア命令のアドレスと前記一次キャッシュのアドレスとが一致したときには、前記一次キャッシュを無効にするスヌープ処理を行う工程と、
前記スヌープ処理中にスカラロード命令があるかどうかを判定し、前記スヌープ処理中にスカラロード命令があれば、前記スカラロード命令のアドレスと前記計算したベクトルストア命令のアドレスとを比較し、前記スカラロード命令のアドレスと前記計算したベクトルストア命令のアドレスとが一致したら、キャッシュミスが生じると判定する工程と
を含むことを特徴とする演算処理方法。
【請求項５】
前記キャッシュミスを検知したら、前記二次キャッシュ又は前記メモリにデータ転送要求を発行することを特徴とする請求項４に記載の演算処理方法。
【請求項６】
前記ベクトルストア命令のアドレスは、ベースアドレスをＢ、ディスタンスをＤ、ベクトル長をＶＬとすると、Ｂ、Ｂ＋Ｄ、Ｂ＋２Ｄ、…、Ｂ＋Ｄ×（ＶＬ−１）として計算することを特徴とする請求項４又は５に記載の演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スカラプロセッサとベクトルプロセッサとを含む演算処理装置及びその演算処理方法に関するもので、特に、ベクトルストア命令（ＶＳＴ）実行時における、後続のＬ１−キャッシュに対するスカラロード命令（ＬＤＳ）のキャッシュミス検出を高速化するものに係わる。
【背景技術】
【０００２】
図７に示すように、スカラプロセッサ１０１とベクトルプロセッサ１０２とを含む演算処理装置では、スカラプロセッサ１０１専用のＬ１−キャッシュ（一次キャッシュ）１０３と、スカラプロセッサ１０１とベクトルプロセッサ１０２とで共用のＬ２−キャッシュ（二次キャッシュ）１０４とを備えている。そして、ベクトルストア命令（ＶＳＴ）が実行されると、ベクトルプロセッサ１０２内のベクトルレジスタ１２１の複数のデータは、一度に、Ｌ２−キャッシュ１０４又はメモリ１０５の指定されたアドレスに格納される。
【０００３】
このような演算処理装置においては、Ｌ１−キャッシュ１０３はスカラプロセッサ１０１専用であり、Ｌ１−キャッシュ１０３にはベクトルストア命令（ＶＳＴ）のデータは格納されないため、ベクトルストア命令（ＶＳＴ）が実行されたときに、Ｌ２−キャッシュ１０４又はメモリ１０５のデータは更新されるが、Ｌ１−キャッシュ１０３のデータは更新されないことになり、ベクトルストア命令の実行後に、Ｌ１−キャッシュ１０３のデータと、Ｌ２−キャッシュ１０４又はメモリ１０５のデータとの一貫性がなくなる可能性がある。このため、スカラプロセッサ１０１内では、Ｌ１−キャッシュ１０３に残っている更新前の古いデータが使用されてしまう可能性がある。
【０００４】
これを防ぐために、このような演算処理装置には、スヌープ処理回路１１１が設けられている。スヌープ処理回路１１１は、スカラプロセッサ１０１内でベクトルストア命令（ＶＳＴ）がデータを更新するアドレスを計算し、計算したベクトルストア命令（ＶＳＴ）のアドレスと同一アドレスのデータがＬ１−キャッシュ１０３に保持されていた場合には、そのデータを無効化することにより、Ｌ１−キャッシュ１０３のデータと、Ｌ２−キャッシュ１０４又はメモリ５とのデータとの一貫性を保つものである（例えば特許文献１、特許文献２）。
【０００５】
つまり、ベクトル長（ＶＬ）個のベクトルストア命令（ＶＳＴ）のアドレスは、ベースアドレスをＢ、ディスタンスをＤとしたとき、Ｂ、Ｂ＋Ｄ、Ｂ＋２Ｄ、…、Ｂ＋Ｄ×（ＶＬ−１）として計算することができる。そこで、スヌープ処理回路１１１は、このようにして計算されたベクトルストア命令（ＶＳＴ）のアドレスと、Ｌ−１キャッシュ１０３のアドレスとを比較し、計算されたベクトルストア命令（ＶＳＴ）のアドレスと、Ｌ−１キャッシュ１０３のアドレスとが一致したときには、Ｌ−１キャッシュは無効化する。これにより、Ｌ１−キャッシュ１０３のデータと、Ｌ２−キャッシュ１０４又はメモリ５とのデータとの一貫性を保つことができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開昭６１−１８４６８４号公報
【特許文献２】特開昭６３−６５５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、このような演算処理装置では、スヌープ処理中にＬ１−キャッシュ１０３に対するスカラロード命令（ＬＤＳ）の実行要求があった場合、スヌープ処理によってスカラロード命令（ＬＤＳ）がアクセスするアドレスのデータが無効化される可能性があるので、スカラロード命令（ＬＤＳ）の実行は先行するベクトルストア命令（ＶＳＴ）のスヌープ処理の完了を待つ必要がある。
【０００８】
ベクトルストア命令（ＶＳＴ）は１つの命令で多くのデータを扱うため、スヌープ処理の完了には時間がかかる。さらに、複数のベクトルストア命令（ＶＳＴ）に先行されたスカラロード命令（ＬＤＳ）は、全ての先行するベクトルストア命令（ＶＳＴ）のスヌープ処理の完了を待つので、その分、スカラロード命令（ＬＤＳ）の実行が遅れてしまう。その結果、スカラロード命令（ＬＤＳ）に依存する命令の実行が遅れたり、後続の命令がスカラプロセッサ１０１内に滞留し効率が低下したりする。
【０００９】
また、特許文献１及び特許文献２には、ベクトルストア命令（ＶＳＴ）をベクトル部に発行すると、ベクトルストアアドレス領域を計算してバッファに記憶し、スカラロード命令（ＬＤＳ）発行要求があった場合、スカラロード命令（ＬＤＳ）のアドレスがベクトルストア命令（ＶＳＴ）のアドレス領域内になければ、キャッシュにアクセスし、ベクトルストア命令（ＶＳＴ）のアドレス領域内にあれば、キャッシュミスと判定し主記憶にアクセスするものが記載されている。
【００１０】
このように、特許文献１及び特許文献２に示されるものでは、スカラロード命令（ＬＤＳ）発行要求時に、アドレスがベクトルストア命令（ＶＳＴ）のアドレス開始からアドレス終了までのアドレス領域を設定している。ところが、ベクトルストア命令（ＶＳＴ）のアドレス領域内にスカラロード命令（ＬＤＳ）があっても、キャッシュミスが起こらない場合も考えられる。例えば、ベクトルストア命令（ＶＳＴ）のアドレスがＢ、Ｂ＋Ｄ、Ｂ＋２Ｄ、…、Ｂ＋Ｄ×（ＶＬ−１）であるとき、アドレス（Ｂ＋１）は、ベクトルストア命令（ＶＳＴ）のアドレス領域内にはあるが、このアドレスにはベクトルストア命令（ＶＳＴ）のデータは格納されない。したがって、スカラロード命令（ＬＤＳ）のアドレスが（Ｂ＋１）であっても、キャッシュミスにはならない。特許文献１及び特許文献２に示されるものでは、ベクトルストア命令（ＶＳＴ）のアドレス開始からアドレス終了までのアドレス領域を設定しているので、本来、キャッシュヒットするアドレスにもかかわらず、キャッシュミスとして、主記憶にアクセスされる可能性がある。
【００１１】
上述の課題を鑑み、本発明は、スカラプロセッサとベクトルプロセッサとを含む演算処理装置で、ベクトルストア命令（ＶＳＴ）実行時における後続のＬ１−キャッシュに対するスカラロード命令（ＬＤＳ）のキャッシュミス検出を高速化できるようにした、演算処理装置及び演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述の課題を解決するために、本発明は、スカラプロセッサと、ベクトルプロセッサと、スカラプロセッサ専用の一次キャッシュと、スカラプロセッサとベクトルプロセッサとで共用の二次キャッシュ又はメモリとを有する演算処理装置であって、ベクトルストア命令のアドレスを計算し、計算したベクトルストア命令のアドレスと一次キャッシュのアドレスとを比較し、計算したベクトルストア命令のアドレスと一次キャッシュのアドレスとが一致したときには、一次キャッシュを無効にするスヌープ処理手段と、スヌープ処理中に発行されたスカラロード命令のアドレスと、計算したベクトルストア命令のアドレスとを比較し、スカラロード命令のアドレスと計算したベクトルストア命令のアドレスとが一致したら、キャッシュミスが生じると判定するキャッシュミス検出手段とを備えたことを特徴とする。
【００１３】
本発明は、スカラプロセッサと、ベクトルプロセッサと、スカラプロセッサ専用の一次キャッシュと、スカラプロセッサとベクトルプロセッサとで共用の二次キャッシュ又はメモリとを有する演算処理方法であって、ベクトルストア命令のアドレスを計算し、計算したベクトルストア命令のアドレスと一次キャッシュのアドレスとを比較し、計算したベクトルストア命令のアドレスと一次キャッシュのアドレスとが一致したときには、一次キャッシュを無効にするスヌープ処理を行う工程と、スヌープ処理中にスカラロード命令があるかどうかを判定し、スヌープ処理中にスカラロード命令があれば、スカラロード命令のアドレスと、計算したベクトルストア命令のアドレスとを比較し、スカラロード命令のアドレスと計算したベクトルストア命令のアドレスとが一致したら、キャッシュミスが生じると判定する工程とを含むことを特徴とする。
【発明の効果】
【００１４】
本発明によれば、スヌープ処理中に発行されたスカラロード命令のアドレスと、計算したベクトルストア命令のアドレスとを比較し、スカラロード命令のアドレスと計算したベクトルストア命令のアドレスとが一致したら、キャッシュミスが生じると判定して、Ｌ２−キャッシュ又はメモリにデータ転送要求を行っている。これにより、スカラロード命令がキャッシュミスする場合に、スヌープ処理の完了を待つことなく、より早いタイミングでデータ転送要求を発行できる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態の演算処理装置の説明に用いるブロック図である。
【図２】本発明の第１の実施形態の演算処理装置におけるスヌープ処理回路及びＬＤＳキャッシュミス検出回路の説明に用いるブロック図である。
【図３】本発明の第１の実施形態におけるスヌープ処理の動作を示すフローチャートである。
【図４】本発明の第１の実施形態におけるスカラロード命令の処理を示すフローチャートである。
【図５】本発明の第１の実施形態の動作説明に用いるタイムチャートである。
【図６】ＬＤＳキャッシュミス検出回路がない場合の動作説明に用いるタイムチャートである。
【図７】本発明に関連する演算処理装置の説明に用いるブロック図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について図面を参照しながら説明する。図１に示すように、本発明の第１の実施形態の演算処理装置は、スカラプロセッサ１と、ベクトル（又はＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ））プロセッサ２と、Ｌ１−キャッシュ３と、Ｌ２−キャッシュ４と、メモリ５とを含む。
【００１７】
Ｌ１−キャッシュ３は、スカラプロセッサ１専用の一次キャッシュである。Ｌ２−キャッシュ４は、スカラプロセッサ１とベクトルプロセッサ２とで共用の二次キャッシュである。ベクトルストア命令（ＶＳＴ）が実行されると、ベクトルプロセッサ２内のベクトルレジスタ２１の複数のデータは、一度に、Ｌ２−キャッシュ４、又は、メモリ５の指定されたアドレスに格納される。また、スカラロード命令（ＬＤＳ）のデータは、Ｌ１−キャッシュ３に格納される。
【００１８】
本発明の第１の実施形態では、スカラプロセッサ１は、スヌープ処理回路１１を有していると共に、ＬＤＳキャッシュミス検出回路６を備えている。
【００１９】
スヌープ処理回路１１は、ベクトルストア命令（ＶＳＴ）のアドレスを計算し、計算したベクトルストア命令（ＶＳＴ）のアドレスと、Ｌ−１キャッシュ３に蓄積されているデータのアドレスとを比較し、ベクトルストア命令（ＶＳＴ）のアドレスとＬ−１キャッシュ３のアドレスとが一致したときには、Ｌ−１キャッシュ３を無効化することで、データの一貫性を保つものである。
【００２０】
ＬＤＳキャッシュミス検出回路６は、スヌープ処理中にスカラロード命令が発行されたら、ベクトルストア命令（ＶＳＴ）のアドレス計算の結果と、そのスカラロード命令（ＬＤＳ）のアドレスとを比較し、アドレスが一致した場合には、そのスカラロード命令（ＬＤＳ）がキャッシュミスを発生させるとし、Ｌ２−キャッシュ４又はメモリ５にデータ転送要求を発行するものである。本発明の第１の実施形態では、このようなＬＤＳキャッシュミス検出回路６を設けることにより、スカラロード命令（ＬＤＳ）がキャッシュミスする場合に、より早いタイミングで、Ｌ２−キャッシュ４又はメモリ５にデータ転送要求を発行できる。
【００２１】
図２は、本発明の第１の実施形態におけるスヌープ処理回路１１及びＬＤＳキャッシュミス検出回路６の詳細を示すものである。図２に示すように、スヌープ処理回路１１は、ＶＳＴ用バッファ５１と、アドレス加算器５２と、アドレスアレイ５３とを有している。
【００２２】
ＶＳＴ用バッファ５１は、発行済みのベクトルストア命令（ＶＳＴ）のうちスヌープ処理が完了していないものを保持している。ＶＳＴ用バッファ５１はＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）で、先行するベクトルストア命令（ＶＳＴ）がより先頭側に格納される。この例では、ＶＳＴ用バッファ５１は、ベクトルストア命令（ＶＳＴ）を４命令分まで保持できるように４エントリとし、それぞれのベースアドレスＢと、ディスタンスＤと、ベクトル長ＶＬとを記憶している。
【００２３】
アドレス加算器５２は、ベクトルストア命令（ＶＳＴ）のアドレスを計算する。ベクトルストア命令（ＶＳＴ）のアドレスは、ベースアドレスをＢ、ディスタンスをＤ、ベクトル長をＶＬとすると、Ｂ、Ｂ＋Ｄ、Ｂ＋２Ｄ、…、Ｂ＋Ｄ×（ＶＬ−１）として計算できる。アドレス加算器５２は、ＶＳＴ用バッファ５１に記憶されているベースアドレスＢと、ディスタンスＤと、ベクトル長ＶＬとから、上述のようにして、ベクトルストア命令（ＶＳＴ）のアドレスを計算する。この例では、スヌープ処理を８並列とするために、アドレス加算器５２は８個の加算器からなる。
【００２４】
アドレスアレイ５３は、アドレス加算器５２のアドレス計算結果から、ベクトルストア命令（ＶＳＴ）のアドレスと、Ｌ１−キャッシュ３に蓄積されているデータのアドレスとを比較し、ベクトルストア命令（ＶＳＴ）のデータのアドレスと、Ｌ１−キャッシュ３に蓄積されているデータのアドレスとが一致している場合には、Ｌ１−キャッシュ３を無効化して、スヌープ処理を行う。この例では、スヌープ処理を８並列とするために、アドレスアレイ５３は８個のアレイからなる。
【００２５】
ＬＤＳキャッシュミス検出回路６は、未実行ＬＤＳ用バッファ６１と、アドレス比較器６２、６３、６４、６５を有している。未実行ＬＤＳ用バッファ６１は、スヌープ処理中に発行された未実行のスカラロード命令（ＬＤＳ）のアドレスを記憶する。この例では、未実行ＬＤＳ用バッファ６１は、未実行のスカラロード命令（ＬＤＳ）のアドレスを４命令分まで保持できるように、４エントリとしている。
【００２６】
アドレス比較器６２〜６５は、アドレス加算器５２で計算したベクトルストア命令（ＶＳＴ）のアドレスと、未実行ＬＤＳ用バッファ６１に保持している未実行のスカラロード命令（ＬＤＳ）のアドレスとを比較する。この例では、アドレス比較器６２、６３、６４、６５は、８つのベクトルストア命令（ＶＳＴ）のアドレスと４命令分のスカラロード命令（ＬＤＳ）のアドレスを比較するために、合計３２個用意されている。
【００２７】
図２において、ベクトルストア命令（ＶＳＴ）がスカラプロセッサ１からベクトルプロセッサ２に発行されると、ＶＳＴ用バッファ５１には、発行済みのベクトルストア命令（ＶＳＴ）のうち、スヌープ処理が完了していないベクトルストア命令（ＶＳＴ）のアドレスが格納される。
【００２８】
スヌープ処理中の他のベクトルストア命令（ＶＳＴ）が存在しない場合には、ＶＳＴ用バッファ５１に蓄積されているベクトルストア命令（ＶＳＴ）に対して順にスヌープ処理が行われる。スヌープ処理では、ＶＳＴ用バッファ５１のアドレスから、アドレス加算器５２により、ベクトルストア命令（ＶＳＴ）のアドレスが計算される。そして、アドレスアレイ５３で、Ｌ１−キャッシュ３にそのアドレスのデータが存在するかどうかがチェックされ、Ｌ１−キャッシュ３にそのアドレスのデータが存在する場合には、そのアドレスに対応するＬ１−キャッシュのエントリが無効化される。このようなスヌープ処理が完了すると、そのベクトルストア命令（ＶＳＴ）に関する情報は、ＶＳＴ用バッファ５１から消去される。
【００２９】
スヌープ処理中のベクトルストア命令（ＶＳＴ）が存在している間に、後続のスカラロード命令（ＬＤＳ）があると、ＬＤＳキャッシュミス検出回路６の未実行ＬＤＳ用バッファ６１に、スカラロード命令（ＬＤＳ）のアドレスが記憶される。そして、アドレス比較器６２、６３、６４、６５により、アドレス加算器５２により計算されたベクトルストア命令（ＶＳＴ）のアドレスと、未実行ＬＤＳ用バッファ６１内のスカラロード命令（ＬＤＳ）のアドレスとが比較される。
【００３０】
ここで、アドレス加算器５２により計算されたベクトルストア命令（ＶＳＴ）のアドレスと、未実行ＬＤＳ用バッファ６１内のスカラロード命令（ＬＤＳ）のアドレスとが一致していれば、そのアドレスのデータは、キャッシュミスを起こすと判定できる。そこで、アドレス比較器６２、６３、６４、６５によりアドレスの一致が検出された場合には、その時点で、そのスカラロード命令（ＬＤＳ）に対するデータ転送要求がＬ２−キャッシュ４（又はメモリ５）に発行される。
【００３１】
図３は、本発明の第１の実施形態におけるスヌープ処理の動作を示すフローチャートである。図３において、ベクトルストア命令（ＶＳＴ）がスカラプロセッサ１からベクトルプロセッサ２に発行されると（ステップＡ１）、ＶＳＴ用バッファ５１は、発行済みのベクトルストア命令（ＶＳＴ）のうち、スヌープ処理が完了していないベクトルストア命令（ＶＳＴ）のベースアドレスＢと、ディスタンスＤと、ベクトル長ＶＬを格納する（ステップＡ２）。
【００３２】
次に、スヌープ処理回路１１は、ＶＳＴ用バッファ５１の先頭に格納されるベクトルストア命令（ＶＳＴ）があるかどうか、つまりスヌープ処理中の他のベクトルストア命令（ＶＳＴ）があるかどうかを判定し（ステップＡ３）、スヌープ処理中の他のベクトルストア命令（ＶＳＴ）がない場合には、スヌープ処理を開始する（ステップＡ４）。スヌープ処理中の先行するベクトルストア命令（ＶＳＴ）がある、つまりスヌープ処理中の他のベクトルストア命令（ＶＳＴ）がある場合には、スヌープ処理回路１１は、その先行するベクトルストア命令（ＶＳＴ）のスヌープ処理が完了するまで、ＶＳＴ用バッファ５１内でベクトルストア命令（ＶＳＴ）を待機させる。
【００３３】
ステップＡ４でスヌープ処理が開始されると、スヌープ処理回路１１は、アドレス加算器５２で、ＶＳＴ用バッファ５１内のベースアドレスＢ、ディスタンスＤ、ベクトル長ＶＬを用い、ベクトルストア命令（ＶＳＴ）のアドレスＢ、Ｂ＋Ｄ、Ｂ＋２Ｄ、…、Ｂ＋Ｄ×（ＶＬ−１）の計算を１サイクルあたり８つずつ計算し、アドレス加算器５２で計算した８つのアドレスを用いて、同じく８つあるアドレスアレイ５３にそれぞれアクセスし、Ｌ１−キャッシュ３にそのアドレスのデータが存在するかチェックし、Ｌ１−キャッシュ３にそのアドレスのデータが存在する場合には、そのアドレスに対応するＬ１−キャッシュのエントリを無効化する。この処理がアドレスＢ＋Ｄ×（ＶＬ−１）まで繰り返されると、スヌープ処理は完了する。
【００３４】
スヌープ処理回路１１は、スヌープ処理が完了したかどうかを判定し（ステップＡ５）、スヌープ処理が完了すると、そのベクトルストア命令（ＶＳＴ）に関する情報をＶＳＴ用バッファ５１から消去する。このとき、ＶＳＴ用バッファ５１内に待機中のベクトルストア命令（ＶＳＴ）があれば、スヌープ処理回路１１は、そのベクトルストア命令（ＶＳＴ）に関する情報をＶＳＴ用バッファ５１の先頭側へ移動させ、ＶＳＴ用バッファ５１の先頭のベクトルストア命令（ＶＳＴ）のスヌープ処理を開始する（ステップＡ６）。
【００３５】
図４は、本発明の第１の実施形態におけるスカラロード命令（ＬＤＳ）の処理を示すフローチャートである。図４において、スカラロード命令（ＬＤＳ）の実行要求があると（ステップＢ１）、ＶＳＴ用バッファ５１内が空かどうかにより、スヌープ処理中のベクトルストア命令（ＶＳＴ）が存在するかどうかを判定する（ステップＢ２）。ＶＳＴ用バッファ５１が空で、スヌープ処理中のベクトルストア命令（ＶＳＴ）が存在しなければ、Ｌ１−キャッシュ４にアクセスし（ステップＢ３）、Ｌ１−キャッシュ４がヒットしたかどうかを判定し（ステップＢ４）、Ｌ１−キャッシュ４がヒットしたら、Ｌ１−キャッシュ４からデータを取得し（ステップＢ５）、Ｌ１−キャッシュ４がヒットしなければ、Ｌ２−キャッシュにデータ転送要求を行う（ステップＢ６）。
【００３６】
ステップＢ２で、ＶＳＴ用バッファ５１が空ではなく、ＶＳＴ用バッファ５１内にスヌープ処理中のベクトルストア命令（ＶＳＴ）が存在する場合には、ＬＤＳキャッシュミス検出回路６は、未実行ＬＤＳ用バッファ６１に、未実行のスカラロード命令（ＬＤＳ）のアドレスを記憶する（ステップＣ１）。そして、ＬＤＳキャッシュミス検出回路６は、アドレス加算器５２から出力されるベクトルストア命令（ＶＳＴ）のアドレス計算結果と、未実行ＬＤＳ用バッファ６１内の未実行のスカラロード命令（ＬＤＳ）のアドレスとを比較し、その結果が一致するかどうかを判定する（ステップＣ２）。ベクトルストア命令（ＶＳＴ）のアドレス計算結果と未実行ＬＤＳ用バッファ６１内の未実行のスカラロード命令（ＬＤＳ）のアドレスとが一致すれば、ＬＤＳキャッシュミス検出回路６は、その時点でそのスカラロード命令（ＬＤＳ）はキャッシュミスを起こすとして、Ｌ２−キャッシュ４にデータ転送要求を発行する（ステップＣ３）。ベクトルストア命令（ＶＳＴ）のアドレス計算結果と未実行ＬＤＳ用バッファ６１内の未実行のスカラロード命令（ＬＤＳ）のアドレスとが一致しなければ、ＬＤＳキャッシュミス検出回路６は、処理をステップＢ２に戻し、ＶＳＴ用バッファ５１内が空でなければ、次のサイクルでも同様に、未実行ＬＤＳ用バッファ６１内のアドレスとアドレス加算器５２から出力されるアドレスと比較する（ステップＣ２）。この処理を繰り返し、ＶＳＴ用バッファ５１内の全てのベクトルストア命令（ＶＳＴ）のスヌープ処理が完了するまでアドレスが一致しなければ、Ｌ１−キャッシュ３にアクセスをする（ステップＢ３）。
【００３７】
次に、本発明の第１の実施形態の効果について、タイムチャートを比較しながら説明する。上述のように、本発明の第１の実施形態では、ベクトルストア命令（ＶＳＴ）のスヌープ処理中に、後続の未実行のスカラロード命令（ＬＤＳ）があると、ＬＤＳキャッシュミス検出回路６により、アドレス加算器５２から出力されるベクトルストア命令（ＶＳＴ）のアドレス計算結果と、未実行ＬＤＳ用バッファ６１内の未実行のスカラロード命令（ＬＤＳ）のアドレスとを比較することで、キャッシュミスが起こるかどうかを判定し、キャッシュミスする場合に、より早いタイミングでデータ転送要求を発行できる。図５は、このような本発明の第１の実施形態の処理を示すタイムチャートである。
【００３８】
図５において、今、ベクトルストア命令（ＶＳＴ１）、ベクトルストア命令（ＶＳＴ２）、ベクトルストア命令（ＶＳＴ３）、スカラロード命令（ＬＤＳ１）、スカラロード命令（ＬＤＳ２）という順番の命令列があり、ベクトルストア命令がＬ２−キャッシュ４及びメモリ５に格納するデータの要素数ＶＬが２５６個であったとする。なお、スカラロード命令（ＬＤＳ１）のアドレスは、ベクトルストア命令（ＶＳＴ１）、ベクトルストア命令（ＶＳＴ２）、ベクトルストア命令（ＶＳＴ３）の何れのアドレスとも一致しないものとする。スカラロード命令（ＬＤＳ２）のアドレスは、ベクトルストア命令（ＶＳＴ２）のアドレスと一致するものとする。
【００３９】
ベクトルストア命令（ＶＳＴ１）がスカラプロセッサ１からベクトルプロセッサ２に発行されると、スヌープ処理回路１１には、ＶＳＴ用バッファ５１にベクトルストア命令（ＶＳＴ１）のベースアドレスＢ、ディスタンスＤ、ベクトル長ＶＬが格納される。これと共に、処理Ｄ０１で示すように、アドレス加算器５２により、ベクトルストア命令（ＶＳＴ１）のアドレスが計算され、スヌープ処理が開始される。このベクトルストア命令（ＶＳＴ１）に関するスヌープ処理は、２５６要素分を８並列で行うため、３２サイクル程度必要になる。
【００４０】
ベクトルストア命令（ＶＳＴ２）及びベクトルストア命令（ＶＳＴ３）が発行されると、ＶＳＴ用バッファ５１に、ベクトルストア命令（ＶＳＴ２）及びベクトルストア命令（ＶＳＴ３）のベースアドレスＢ、ディスタンスＤ、ベクトル長ＶＬが格納されるが、処理Ｄ０１の期間では、ベクトルストア命令（ＶＳＴ１）のスヌープ処理中であるため、ベクトルストア命令（ＶＳＴ２）及びベクトルストア命令（ＶＳＴ３）のスヌープ処理は、処理Ｄ０２及び処理Ｄ０３で示すように、ベクトルストア命令（ＶＳＴ１）のスヌープ処理が完了してから、開始される。ベクトルストア命令（ＶＳＴ２）及びベクトルストア命令（ＶＳＴ３）も、ベクトル長ＶＬが２５６であるので、それぞれ、３２サイクル程度必要であり、ベクトルストア命令（ＶＳＴ１）、ベクトルストア命令（ＶＳＴ２）、ベクトルストア命令（ＶＳＴ３）のスヌープ処理には合わせて９６サイクル程度必要になる。
【００４１】
ここで、ベクトルストア命令（ＶＳＴ１）のスヌープ処理を行っている間に、スカラロード命令（ＬＤＳ１）と、スカラロード命令（ＬＤＳ２）の実行要求があったとする。このとき、ＶＳＴ用バッファ５１内にはスヌープ処理中のベクトルストア命令が存在するので、スカラロード命令（ＬＤＳ１）とスカラロード命令（ＬＤＳ２）のアドレスが未実行ＬＤＳ用バッファ６１に格納される。そして、処理Ｄ０４で示すように、アドレス加算器５２で計算されたアドレスと、スカラロード命令（ＬＤＳ１）のアドレスとが比較され、また、処理Ｄ０５で示すように、アドレス加算器５２で計算されたアドレスと、スカラロード命令（ＬＤＳ２）のアドレスとが比較される。
【００４２】
ここで、処理Ｄ０１が行われている間では、アドレス加算器５２からはベクトルストア命令（ＶＳＴ１）のアドレスが出力され、処理Ｄ０２が行われている間では、アドレス加算器５２からはベクトルストア命令（ＶＳＴ２）のアドレスが出力され、処理Ｄ０３が行われている間では、アドレス加算器５２からはベクトルストア命令（ＶＳＴ３）のアドレスが出力される。
【００４３】
スカラロード命令（ＬＤＳ１）のアドレスは、ベクトルストア命令（ＶＳＴ１）、ベクトルストア命令（ＶＳＴ２）、ベクトルストア命令（ＶＳＴ３）の何れのアドレスとも一致しない。このため、処理Ｄ０１〜Ｄ０３でスヌープ処理が完了するまで、アドレス加算器５２の出力とスカラロード命令（ＬＤＳ１）のアドレスとが一致することはなく、スヌープ処理が完了すると、処理Ｄ０８で、Ｌ１−キャッシュ３がアクセスされ、この例ではキャッシュにヒットしているため、処理Ｄ０９で、Ｌ１−キャッシュ３からデータが取得される。
【００４４】
一方、スカラロード命令（ＬＤＳ２）のアドレスは、ベクトルストア命令（ＶＳＴ２）のアドレスと一致しているので、ベクトルストア命令（ＶＳＴ２）のスヌープ処理中の処理Ｄ０６で、アドレス加算器５２の出力とスカラロード命令（ＬＤＳ２）のアドレスとのアドレスの一致が検出される。処理Ｄ０６でアドレスの一致が検出されると、キャッシュミスを起こすとして、処理Ｄ０７で、データ転送要求がＬ２−キャッシュ４に発行される。
【００４５】
次に、本発明の第１の実施形態のＬＤＳキャッシュミス検出回路６がない場合について説明する。ＬＤＳキャッシュミス検出回路６がないときには、ベクトルストア命令（ＶＳＴ）のスヌープ処理中のスカラロード命令（ＬＤＳ）があった場合には、スヌープ処理を待ってスカラロード命令（ＬＤＳ）に対する処理を行う必要がある。つまり、ＬＤＳキャッシュミス検出回路６がない場合の処理のタイムチャートは、図６に示すようになる。
【００４６】
図６において、ベクトルストア命令（ＶＳＴ１）がスカラプロセッサ１からベクトルプロセッサ２に発行されると、処理Ｄ１１で示すように、ベクトルストア命令（ＶＳＴ１）のデータのアドレスが計算され、スヌープ処理が開始される。
【００４７】
ベクトルストア命令（ＶＳＴ１）のスヌープ処理が完了してから、処理Ｄ１２及び処理Ｄ１３で、ベクトルストア命令（ＶＳＴ２）及びベクトルストア命令（ＶＳＴ３）のスヌープ処理が行われる。
【００４８】
ここで、ベクトルストア命令（ＶＳＴ１）のスヌープ処理を行っている間に、スカラロード命令（ＬＤＳ１）と、スカラロード命令（ＬＤＳ２）の実行要求があったとする。このスカラロード命令（ＬＤＳ１）及びスカラロード命令（ＬＤＳ２）は、ベクトルストア命令（ＶＳＴ１〜ＶＳＴ３）のスヌープ処理が完了するまで、待機される。
【００４９】
処理Ｄ１１〜Ｄ１３で、ベクトルストア命令（ＶＳＴ１〜ＶＳＴ３）のスヌープ処理が完了すると、処理Ｄ１４で、Ｌ１−キャッシュ３がアクセスされ、スカラロード命令ＬＤＳ１に対する処理が行われる。スカラロード命令ＬＤＳ１は、Ｌ１−キャッシュ３にヒットしているので、処理Ｄ１５で、Ｌ１−キャッシュ３からデータが取得される。
【００５０】
次に、処理Ｄ１６で、Ｌ１−キャッシュ３がアクセスされ、スカラロード命令（ＬＤＳ２）に対する処理が行われる。スカラロード命令（ＬＤＳ２）は、キャッシュミスになるので、処理Ｄ１７で示すように、データ転送要求がＬ２−キャッシュ４に発行される。
【００５１】
図５と図６とを比較すると、ＬＤＳキャッシュミス検出回路６を設けない場合には、スカラロード命令（ＬＤＳ１）及びスカラロード命令（ＬＤＳ２）に対する処理（Ｄ１４〜Ｄ１７）は、スヌープ処理の完了を待つ必要がある。これに対して、本発明の第１の実施形態では、処理Ｄ０６及び処理Ｄ０７で示すように、スカラロード命令（ＬＤＳ２）がキャッシュミスする場合に、より早いタイミングでデータ転送要求を発行できる。
【００５２】
また、本発明の第１の実施形態では、ベクトルストア命令（ＶＳＴ）のアドレスの開始から終了までのアドレス領域内にスカラロード命令（ＬＤＳ）があるかどうかではなく、ベクトルストア命令（ＶＳＴ）のアドレスと、スカラロード命令（ＬＤＳ）のアドレスとを比較している。このため、キャッシュミスにならないにもかかわらず、キャッシュミスと判定されることがなくなり、Ｌ２−キャッシュ４やメモリ５への余分なアクセスの発生が防止できる。
【００５３】
本発明は、上述した実施形態に限定されるものではなく、この発明の要旨を逸脱しない範囲内で様々な変形や応用が可能である。
【符号の説明】
【００５４】
１：スカラプロセッサ
２：ベクトルプロセッサ
３：Ｌ１−キャッシュ
４：Ｌ２−キャッシュ
５：メモリ
６：キャッシュミス検出回路
８：スヌープ処理を
１１：スヌープ処理回路
２１：ベクトルレジスタ
５１：ＶＳＴ用バッファ
５２：アドレス加算器
５３：アドレスアレイ
６１：未実行ＬＤＳ用バッファ
６２〜６５：アドレス比較器
【図１】
0005446719.tif 000002
【図２】
0005446719.tif 000003
【図３】
0005446719.tif 000004
【図４】
0005446719.tif 000005
【図５】
0005446719.tif 000006
【図６】
0005446719.tif 000007
【図７】
0005446719.tif 000008