(57)【特許請求の範囲】
【請求項１】
ダイレクトマップ方式のキャッシュメモリを有する情報処理装置のキャッシュ制御方法であって、
ソフトウェアによって規定され、ベクトルロード命令アクセス範囲を規定する値と、ベクトル長の値とディスタンス値との積とを比較し、
この比較結果を基礎として、ベクトルロード命令のデータをキャッシュへ登録するかまたは非登録とするかの第１の判定を行い、
キャッシュの各ラインに対応してＲＵカウンタを設けてＲＵカウンタの値を計測し、
このＲＵカウンタの値とＲＵカウンタ制限値レジスタの値とを比較し、
この比較結果から、キャッシュへ登録するかまたは非登録とするかの第２の判定を行い、
この第２の判定の判定結果と前記第１の判定の判定結果とに従ってキャッシュへの登録または非登録の制御を選択的に実行するキャッシュ制御方法において、
前記ＲＵカウンタに対応するキャッシュラインでヒットしたら当該ＲＵカウンタを０クリアし、
前記ＲＵカウンタに対応するキャッシュライン以外の別のラインでヒットしたら当該ＲＵカウンタの値を１増加し、
キャッシュのどのラインでもヒットしなかったらＲＵカウンタの値を変えないようにし、
キャッシュミスヒットに伴いあるキャッシュラインのリプレースを行うか否かを判断する際に、当該キャッシュラインに対応するＲＵカウンタの値が前記ＲＵカウンタ制限値レジスタの値を超えない場合は、当該キャッシュラインをリプレース対象から外す
ことを特徴とするキャッシュ制御方法。
【請求項２】
ダイレクトマップ方式のキャッシュメモリを有する情報処理装置のキャッシュ制御回路であって、
ソフトウェアによってセットされ、ベクトルロード命令アクセス範囲を規定する値を保持する第１のレジスタと、
ベクトル長を保持する第２のレジスタと、
ディスタンスを保持する第３のレジスタと、
前記第１のレジスタの値と、第２のレジスタのベクトル長と第３のレジスタのディスタンスとの積の値とを比較し、この比較結果に基づいてベクトルロード命令のデータをキャッシュに対して登録するかまたは非登録とするかの判定を行う第１の判定回路と、
ＲＵカウンタ制限値を格納する第５のレジスタと、
キャッシュの各ラインに対応してＲＵカウンタの値を保持する第６のレジスタ群と、
そのＲＵカウンタの値を更新する制御回路と、
アクセスしたキャッシュラインに対応する第６のレジスタの値と第５のレジスタの値とを比較した結果から、キャッシュへの登録または非登録の判定を行う第２の判定回路と、
前記第１の判定回路の判定結果及び第２の判定回路の判定結果を保持する第４のレジスタと、
該第４のレジスタの判定結果に従って、キャッシュへの登録または非登録の制御を選択的に実行するミスリプライ制御回路とを有するキャッシュ制御回路において、
前記ＲＵカウンタの値を更新する制御回路は、前記ＲＵカウンタに対応するキャッシュラインでヒットしたら当該ＲＵカウンタを０クリアするものであり、前記ＲＵカウンタに対応するキャッシュライン以外の別のラインでヒットしたら当該ＲＵカウンタの値を１増加するものであり、キャッシュのどのラインでもヒットしなかったらＲＵカウンタの値を変えないものであり、
前記第２の判定回路は、キャッシュミスヒットに伴いあるキャッシュラインのリプレースを行うか否かを判断する際に、当該キャッシュラインに対応するＲＵカウンタの値が前記第５のレジスタに格納されているＲＵカウンタ制限値を超えない場合は、当該キャッシュラインをリプレース対象から外す判定を行うものである、
ことを特徴とするキャッシュ制御回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、各種情報処理システムにおいて使用されるキャッシュメモリを制御するためのキャッシュ制御方法及びキャッシュ制御回路に関する。
【０００２】
【従来の技術】
各種情報処理システムにおけるメモリアクセスのボトルネック解消のために、キャッシュと呼ばれる小容量で高速のバッファメモリを利用する技術は、古くからほとんどのシステムで使用されている。キャッシュメモリを使用する効果は、以下の２つである。その第１は、主メモリ等に比べて小容積に構成し得ることから、プロセッサの近く、例えば、同一ＬＳＩ内部に配置できることになり、オペランドデータのレイテンシー（Ｌａｔｅｎｃｙ）の大幅短縮が実現できることである。
【０００３】
第２の効果は、特に、ストアイン型キャッシュのようにメモリへの書き込みを常時には行わない場合、メモリアクセスに必要なスループットを抑えることができる。したがって、メモリ構造を簡素化でき、コスト面で有利であることと、逆にいえば、メモリアクセス頻度を抑えることで、メモリインターフェースのリクエスト競合を回避できるため、性能向上が実現できることである。
【０００４】
このキャッシュメモリ方式が有効であるためには、以下に示す実際のプログラムにおけるメモリアクセスの振る舞いが、通常は一定の性質を持つものであるとの前提が必要である。それは、参照の局所性（以下、ローカリティともいう）というメモリアクセスの性質によるものである。すなわち、空間的ローカリティ（参照されるアドレスはある部分に固まっていること）と、時間的ローカリティ（参照されるアドレスは、ある時間内に集中していること）である。
【０００５】
ここでキャッシュミス時の動作について簡単に説明する。ただし、キャッシュメモリの動作については、多くの文献があり、例えば“並列コンピュータ”  天野英晴著（昭晃堂）に詳しく説明されているので、本発明に直接関係しない動きに関しては説明を割愛する。
【０００６】
まず、既にキャッシュに登録されている同一キャッシュラインアドレスのラインは追い出される。ストアスルー型キャッシュの場合は、メモリとの一貫性が常時保たれているため、新しいラインをキャッシュに上書きするだけで済む。しかし、ストアイン型キャッシュの場合には、メモリとの一貫性が保たれていないので、追い出されるキャッシュラインをメモリに書き込む必要がある。
【０００７】
また、新しいラインのリフィルにラインデータ分のブロックロードリクエストが発生する。メモリに対して、無駄なデータを持ってくる処理が入るが、その一方で暗示的なプリフェッチとなるという長所もあるため、その得失は一概には断じられない。
【０００８】
この動作に関しては図５において説明しており、“Ａ”、“Ｂ”、“Ｗ”は、ロード（以下、ＬＤともいう）命令が、各々メモリアクセスリクエストを発行するステージ、キャッシュアクセスを終わるステージ、レジスタへの書き込みステージに存在することを意味する。
【０００９】
まず、ＬＤ−１はキャッシュヒット（ｈｉｔ）時のタイミングであり、この場合、わずか３サイクルで終了する。ＬＤ−２は、キャッシュミス（ｍｉｓｓ）した場合の動作であり、メモリに対してリフィルデータを要求し、ターゲットとなるデータが最初に帰ってくる場合が、一般的であり、その時点で、ＬＤ−２はＷステージに移行することができる。しかし、リフィルのために、１ライン分のデータをキャッシュに書き込むための時間が必要であり、その間は、後続のキャッシュアクセス命令の発行が不可となる。ＬＤ−３は、キャッシュにデータを登録しないキャッシュバイパスロードのタイミングであり、ＬＤ−２との違いは、ミスした場合に、ミスリプライデータをキャッシュに登録しない点にある。
【００１０】
参照の局所性がないメモリアクセスの場合、リフィルデータのキャッシュ書き込み時における後続キャッシュアクセス命令の発行が抑止されることがない点から、このケースだけを見ればＬＤ−３が性能上優れていると言える。
【００１１】
以上のようなキャッシュ制御は、前提としている参照の局所性が崩れると、以下のような問題点が発生する。問題点１）１回しかＬＤしないラインをキャッシュに入れることは、キャッシュにデータを登録しない場合に比べて、キャッシュラインデータのストアとロードが余計に必要となる。問題点２）まだ有用なキャッシュラインにもかかわらずリプレースしてしまう。
【００１２】
このような参照の局所性がないといわれているものには、科学技術計算プログラムがある。しかし、近年、マイクロプロセッサにおけるキャッシュ容量は、ＬＳＩ技術の絶え間ない進歩によって、ＫＢ単位からＭＢ単位に増強されている。また、キャッシュを考慮したプログラムの最適化技術も、このようなキャッシュ容量のトレンドに追従し、ストアイン型キャッシュのマイクロプロセッサにおいても、科学技術計算プログラムの性能が向上してきた。しかし、コンパイラの最適化技術はいくら進んでも、実行前のプログラムからメモリアクセスの振る舞いを認識して、高いキャッシュヒット率を実現するには限界がある。
【００１３】
ところで、科学技術計算プログラムを効率よく実行する装置として、ベクトル型計算機がある。ベクトル型計算機では、ベクトルレジスタという複数ワードデータを格納するレジスタに対する処理を、ベクトル命令という命令１つで規定できる。例えば、ベクトルロード（以下、ＶＬＤともいう）命令は、ベクトル長レジスタ（以下、ＶＬともいう）の値分のロードを実行し、その読み出しデータをベクトルレジスタという複数ワードを集めたレジスタに格納する。逆に、ベクトルストア（以下、ＶＳＴともいう）はベクトルレジスタにある複数のワードデータを、メモリに格納する。
【００１４】
このベクトル型計算機において、例えば〔ディスタンス（distance）〕＊〔ＶＬ〕の大きなＶＬＤ命令が発行され、それが悉くキャッシュミスする場合、ＶＬＤ１命令で数多くのキャッシュラインがリプレースされてしまう。その中で、使ったばかりのラインが存在していた場合、時間的局所性を期待してキャッシュに登録されているデータがキャンセルされ、再々度キャッシュラインデータがリフィルされてしまうという、性能上悲劇的状況に至る。
【００１５】
【発明が解決しようとする課題】
本発明は、上述のような従来技術の問題点を解消し、参照の局所性が厳密な意味で保証されないプログラムであっても、キャッシュメモリによる性能向上効果を得ることができるキャッシュ制御回路を提供することである。
【００１６】
【課題を解決する為の手段】
本発明の課題は、キャッシュメモリを有する情報処理装置のキャッシュ制御方法において、ベクトルロード命令アクセス範囲を規定する値と、ベクトル長の値とディスタンス値との積とを比較し、この比較結果を基礎として、ベクトルロード命令のデータをキャッシュへ登録するかまたは非登録とするかの第１の判定を行い、この第１の判定結果に従ってキャッシュへの登録または非登録の制御を選択的に実行するキャッシュ制御方法によって解決される。
さらに、本発明の課題は、上記キャッシュ制御方法において、前記ベクトルロード命令アクセス範囲を規定する値は、ソフトウェアによって規定されるキャッシュ制御方法によって解決される。
さらに、本発明の課題は、上記キャッシュ制御方法において、キャッシュの各エントリに対応してキャッシュアクセス回数を計測し、このキャッシュアクセス回数とキャッシュアクセスの制限使用回数とを比較し、この比較結果から、キャッシュへ登録するかまたは非登録とするかの第２の判定を行い、この第２の判定結果と前記第１の判定結果に従ってキャッシュへの登録または非登録の制御を選択的に実行するキャッシュ制御方法によって解決される。
【００１７】
さらに、本発明の課題は、キャッシュメモリを有する情報処理装置のキャッシュ制御回路において、ベクトルロード命令アクセス範囲を規定する値を保持する第１のレジスタと、ベクトル長を保持する第２のレジスタと、ディスタンスを保持する第３のレジスタと、前記第１のレジスタの値と、第２レジスタのベクトル長と第３のレジスタのディスタンスとの積の値とを比較し、この比較結果に基づいてベクトルロード命令のデータをキャッシュへの登録または非登録の判定を行う第１の判定回路と、前記第１の判定回路の判定結果を保持する第４のレジスタと、該第４のレジスタの判定結果に従ってキャッシュへの登録または非登録の制御を選択的に行うミスリプライ制御回路とを具備するキャッシュ制御回路によって解決される。
また、本発明の課題は、上記キャッシュメモリを有する情報処理装置のキャッシュ制御回路において、前記第１のレジスタの値は、ソフトウェアによってセットされるキャッシュ制御回路。
【００１８】
また、本発明の課題は、キャッシュメモリを有する情報処理装置のキャッシュ制御回路において、キャッシュアクセスの制限使用回数を格納する第５のレジスタと、キャッシュの各エントリに対応してキャッシュアクセス回数の計測結果を保持する第６のレジスタ群と、キャッシュアクセス回数の計測結果の値を更新する制御回路と、アクセスしたキャッシュエントリに対応する第６のレジスタ値と第５のレジスタ値とを比較した結果から、キャッシュへの登録または非登録の判定を行う第２の判定回路とを有し、前記第４のレジスタは前記第１の判定回路及び前記第２の判定回路の結果を保持し、前記ミスリプライ制御回路は前記第４のレジスタの判定結果にしたがって、キャッシュへの登録または非登録の制御を選択的に実行するキャッシュ制御回路によって有利に解決される。
【００１９】
本発明にかかるキャッシュ制御方法及び制御回路によれば、ロードリクエストの性質、あるいは、ヒットしたラインの履歴によって、キャッシュメモリに登録させるロードにするか否かをハードウェア（以下、ＨＷともいう）が動的に判断する。
【００２０】
また、ＶＬＤ範囲レジスタとＲＵカウンタ制限値レジスタの更新によって、判断方法をソフトウェア（以下、ＳＷともいう）が明示的に指定することができる。それによって、発明の背景で説明したような問題点を解決し、参照のローカリティが厳密な意味で保証されないプログラムであっても、キャッシュメモリによる性能向上効果を得ることができる。
【００２１】
【発明の実施の形態】
以下、添付図を参照しつつ本発明にかかるキャッシュ制御装置の実施の形態を説明する。このキャッシュ制御装置は、図１に示されているような基本構成に適用される。スカラプロセッサユニット（以下、ＳＰＵともいう）−１は、全命令の解読／実行指示、及びスカラ命令の実行を行う。１次キャッシュユニット−２は、スカラメモリアクセス系命令で使用するデータのみを格納するものである。ベクトルプロセッサユニット（以下、ＶＰＵともいう）−３は、ＳＰＵ−１の指示にしたがってベクトル命令の実行を行う。
【００２２】
２次キャッシュユニット−４は、スカラ系／ベクトル系の両方で使われるデータを格納するものである。アドレス変換バッファ(以下、ＡＴＢという）−５は、論理アドレスを物理アドレスに変換するバッファである。また、メモリユニット−６は、メモリとメモリアクセス制御部とを含んでいる。ＩＯＰ−７は入出力処理を行う。
【００２３】
スカラＬＤの場合、ＳＰＵ−１から信号線１０２でＬＤリクエストを発行し、１次キャッシュユニット−２内でミスすると、ラインデータのブロックリクエストとして信号線２０４を介して２次キャッシュユニット−４にデータを探しにゆく。そこでもミスした場合は、信号線４０５を介してＡＴＢ５にメモリリクエストを送り、物理アドレスに変換して信号線５０６を介してメモリユニット−６に送出される。メモリユニット−６から読み出されたデータは、信号線６０４を介して２次キャッシュユニット−４に戻ってきてラインデータが格納され、信号線４０２を介して１次キャッシュユニット−２に戻って、そのラインデータが登録される。その時、最初のＬＤ命令のターゲットデータは、信号線２０１を介してＳＰＵ−１に送られる。
【００２４】
次に、ＶＬＤ命令の動きについて説明する前に、ＶＬＤ命令の仕様について、図６に基づいて説明する。ＶＰＵ−３内にはベクトルレジスタとも呼ばれる複数の要素データを格納できるレジスタファイルが存在する。ＶＬＤ命令は、Ｖｘで指定されたベクトルレジスタに、ＳＰＵ−１から送られてくるＲｙ（ディスタンス）とＲｚ（開始アドレス）で規定されたＶＬというレジスタで指定される個数のメモリロードを一括して行う命令である。
【００２５】
ここで本発明許の実施例を説明するため、図１のような基本構成を用いる。ＶＬというレジスタは、ＬＶＬという命令によって、ソフトウェアで書き換えられるレジスタで、ＶＰＵ−３内に存在する。ＶＬＤ命令の動きを図１のブロック図にしたがって説明する。ＶＬＤ命令はＳＰＵ−１で命令デコードされ、その結果、信号線１０３を介して実行指示がＶＰＵ−３に送られる。ＶＰＵ−３では、ＶＬＤ命令が処理されるが、その際、開始アドレス、ディスタンス、ＶＬ（ベクトル長）が信号線３０４を介して２次キャッシュユニット−４に送られる。
【００２６】
２次キャッシュユニット−４では、ミスした場合、該当するラインに対するブロックリクエストになり、スカラＬＤと同様にＡＴＢ−５を通過し、メモリユニット−６から信号線６０４を介してリプライデータを２次キャッシュユニット−４に送る。２次キャッシュユニット−４が受け取ったリプライデータは、対応するキャッシュラインに格納されると同時に信号線４０３を介してターゲットデータのみがＶＰＵ−３に送られ、ベクトルレジスタに格納される。このような処理がＶＬで指定された数だけ実行される。しかし、２次キャッシュがヒットした場合は、２次キャッシュの読み出しデータだけが信号線４０３を介してＶＰＵ−３に送られる。
【００２７】
ここで、このＶＬＤ命令を、本発明によるＶＬＤ範囲レジスタ、または、ＲＵカウンタ制限値レジスタを用いたキャッシャブル判定回路によって、キャッシュミスした場合に必ずしもキャッシュに取り込まないようにする。この場合、２次キャッシュのラインサイズのブロックロードリクエストが発行されることはなく、信号線４０５にＶＬＤの要素毎のリクエストが発行され、信号線６０４を介して送られてくるリプライデ−タを素通りさせて、信号線４０３を介して、ＶＰＵ−３へ送る。
【００２８】
まず、ＶＬＤ範囲レジスタによる、本発明における動作について説明する。従来のベクトルメモリアクセスは、全てキャッシュされないものであったが、前述のようにＬＳＩ技術の進歩によるキャッシュ容量の大幅増加と、コンパイラによる最適化技術の進歩によって、科学技術計算でもある程度のキャッシュを使って意味のあるような参照局所性が実現できる。しかし、その中でもどうしても局所性を維持するような最適化ができない部分も時には存在する。その様子を図７に示す。
【００２９】
その局所性のない部分では、広範囲にわたるＶＬＤ命令でベクトルオペランドデータをフェッチして、それを演算し、ＶＳＴ命令でメモリに書き戻すといった処理が行われ、１回ＶＬＤ命令で読んだオペランドは２回以上読み出されることはほとんどない。このような場合、ＶＬＤのメモリデータをキャッシュに取り込むことは、無意味である。
【００３０】
また、図８では、ＶＬＤ命令のディスタンスが１２８ＢでＶＬが２５６のケースで、キャッシュ（ラインサイズ１２８Ｂ）に登録したケースについて説明している。ＶＬＤ命令の要素データは、ラインデータのある１部にのみ存在するため、ＶＬＤ命令１つのために、メモリＬＤデータは８Ｂ×２５６（＝２ＫＢ）しか必要でないにもかかわらず、１２８Ｂ×２５６（＝３２ＫＢ）ものブロックＬＤが発生し、無駄なＬＤリクエストが３０ＫＢ分も行われることになる。さらに、３２ＫＢ分のキャッシュは、このＶＬＤ命令によって、図７で示しているような参照局所性が維持されている部分で必要とされているキャッシュデータが書きつぶされてしまうという悲劇的状況が生まれる。
【００３１】
このような状況を回避するための別の手段として、キャッシュメモリにデータを登録しないことを最初から命令で明示的に指定するという方法もある。この方法の利点は、アドレス・ディスタンスといった値の着目だけでは不十分な参照の局所性についても考慮できることで、より効果的なキャッシュ制御が可能となる点である。このキャッシュに登録しないＶＬＤ命令が実行された場合には、無条件でキャッシュ登録を行わない。ただし、ロードすべきデータがキャッシュメモリに存在していた場合は、当然、キャッシュメモリを読み出す。
【００３２】
しかし、キャッシュメモリにデータを登録するか否かをＳＷ（ソフトウェア:コンパイラ）で判断することは極めて困難であり、ある程度のＨＷによるサポートが必要である。そのため、本発明では、ＶＬＤ範囲レジスタで、ＶＬＤのアクセスする領域の広さを局所性の有無と判断する回路の実装によって、図８に示したような非効率的なキャッシュ動作を回避することができる。
【００３３】
次に、ＲＵカウンタ制限値レジスタによる時間的局所性に着目したキャッシュ登録制御について説明する。時間的局所性とは、１度アクセスされたデータは、再びアクセスされやすい傾向があるということである。このようなラインは、他のメモリアクセス時のキャッシュミスによって、キャッシュから追い出されないようにしなければならない。このキャッシュにおける追い出しアルゴリズムに関しては、従来技術にあるように、ＬＲＵアルゴリズムがある。
【００３４】
ところが、それは複数のＷａｙで構成されるキャッシュにおいて有用なものであり、ダイレクトマップ構成であると、同一ラインのアクセスに関しては、無条件に追い出されてしまう。さらに、キャッシュ容量の巨大化の方向では、ＨＷコストの面からダイレクトマップ方式のキャッシュが一般的である。
【００３５】
また、キャッシュ登録データは少なくとも、キャッシュに存在している限り２回以上そのラインにアクセスしないと、そのまま１ライン分のブロックＬＤのコストだけ、逆効果となる。そこで、最近特にアクセスが頻発に行われているラインであることを判断するために、ＲＵカウンタという情報を各ラインに設ける。ＲＵカウンタの動作論理は下記のようである。
0003770091.tif 000002
このようにして、使用されないキャッシュラインに関しては、ＲＵカウンタの値が上がってゆき、使用される可能性が低いラインであると認識される。このＲＵカウンタ値がＲＵカウンタ制限値レジスタを超えない場合は、リプレース対象から外すことによって、使用される可能性の高いラインがキャッシュに残ることになる。
【００３６】
これらの動作を実現する本特許の特徴となる２次キャッシュの構成について、図２に基づいて説明する。ＶＬＤ範囲ＲＥＧ−１（値と有効ビットで構成され、有効ビットが点灯していない時、比較結果はｎｏｎ−ａｃｔｉｖｅである）は、乗算器−４によって計算された〔ＶＬレジスタ−２の出力〕＊〔ディスタンスレジスタ−３の出力〕と比較され、比較器−５の比較結果信号によって、ミス時にキャッシュに登録するか否かを決定する。命令コードレジスタ（ＯＰＣ）−１７の値から命令デコーダ−７によって、ＶＬＤ信号（信号線７０６）及びキャッシュ非登録ＶＬＤ信号（信号線７１０）を生成する。
【００３７】
ＡＮＤゲート−６は、ＶＬＤが範囲を超えるものであったことを示す信号を生成する。ＡＮＤゲート−９は、ＲＵカウンタ制限値ＲＥＧ−１２（値と有効ビットとで構成され、有効ビットが点灯していない時は、比較結果はＮｏｎ−ａｃｔｉｖｅである）とＲＵカウンタ−３０の値を比較する比較器−８の比較結果信号より、時間的局所性の解析結果の信号が生成される。ＯＲゲート−１０は、Ｎｏｎ−Ｃａｃｈａｂｌｅ（キャッシュ非登録）の判断結果信号を出力し、その結果信号をキャッシュ非登録指示フラグ−１１が受ける。
【００３８】
有効フラグ−１３は、Ａステージに１次キャッシュからのブロックロード、あるいは、ＶＰＵからのベクトルメモリアクセス命令のリクエストが有効であることを示し、２Ｗａｙセレクタ−１９は命令コードレジスタ（ＯＰＣ）−１７ヘ格納する値を選択する。
【００３９】
ＯＰＣ−１７及びアドレスレジスタ（ＡＤＲ）−１４には、Ａステージに存在する命令のコードとアドレスが格納される。ＯＲゲート−１５は、１次キャッシュからのブロックロード、あるいは、ＶＰＵからのベクトルメモリアクセス命令のリクエストが有効の出力を生成する。
【００４０】
ＷＥフラグ−１６の点灯するケースは、ストア命令がｗｒｉｔｅヒット時と、キャッシュミスリプライのデータを書き込む時である。その２つのタイミングをＯＲゲート−２０で生成している。前者はキャッシュヒット判定部−３３から、後者はＭｉｓｓＲＥＱ制御部−３６からそれぞれ送られる。また、その時のアドレスは、１次キャッシュ、ＶＰＵ、Ｂステ−ジのアドレスレジスタ−２６、ＭｉｓｓＲＥＱ制御部−３６から送られる、各々、１次キャッシュブロックロードアドレス、ベクトルメモリアクセス命令のアドレス、ストアｗｒｉｔｅヒット時のアドレス、キャッシュミスリプライのアドレスを、４Ｗａｙセレクタ−１８で選択するものである。
【００４１】
ＷＤＲ（Ｗｒｉｔｅ  Ｄａｔａ  Ｒｅｇｉｓｔｅｒ）−２０は、ＤＡ（Ｄａｔａ  Ａｒｒａｙ）−３２に対する書き込みデータレジスタである。２Ｗａｙセレクタ−２１は、ストアｗｒｉｔｅヒット時のストアデータ、キャッシュミスリプライデータを選択する。２Ｗａｙセレクタ−２３は、１次キャッシュ／ＶＰＵからのストアリクエストのデータを選択し、ストアデータレジスタ−２２に格納する。ストアがｗｒｉｔｅヒットした場合、ストアデータレジスタ−２４で１サイクル持ち回った後、ＷＤＲ−２０に格納し、そしてＤＡ−３２に書き込む。有効フラグ−２５、アドレスレジスタ−２６、ストアデータレジスタ−２４、キャッシュミスフラグ−２７は、いずれもＢステージの情報である。
【００４２】
キャッシュ有効ビット−２９は、キャッシュのラインが有効であることを示す。アドレスアレイ（ＡＡ）−３１は、対応するラインが如何なるアドレスのデータであるかを示す。データアレイ−３２は、キャッシュデータを格納する。アドレス比較器−２８は、ＡＡ−３１の出力を読んで、アドレスレジスタ−１４の値と比較し、キャッシュミスを判定し、その結果をキャッシュミスフラグ−２７に格納する。
【００４３】
キャッシュヒット判定部−３３は、Ｂステージの制御情報を使用して、ＲＵカウンタ−３０を更新するための制御信号を生成する。ＤＡ−３２から読んだキャッシュデータと、メモリからのキャッシュミスリプライデータとを２Ｗａｙセレクタ−３４が選択し、ＲＤＲ（Ｒｅａｄ  Ｄａｔａ  Ｒｅｇｉｓｔｅｒ）−３５に格納する。
【００４４】
次に、図３に基づいて、本実施例が前提としている２次キャッシュ構成について説明する。本実施例では、ラインサイズ１２８Ｂ×２５６エントリ（容量３２ＫＢ）のダイレクトマップ方式を前提として説明する。このキャッシュの場合、ＡＡ（アドレスアレイ）及びＤＡ（データアレイ）から構成され、ＡＡに格納されるＩＮＤＥＸアドレスに対応するタグアドレスとリクエストのアドレスが比較され、キャッシュヒットの判定が行われる。メモリアクセスリクエストのアドレスは全体で４０ｂｉｔであり、そのうち上位２５ビットはＴＡＧアドレス、下位７ビットはラインアドレス、中間の８ビットはＩＮＤＥＸアドレスというように構成される。
【００４５】
次に、図２中のＲＵカウンタ−３０の周辺回路について、図４に基づいて説明する。ＲＵカウンタ−３０は、キャッシュのエントリに存在し、ＡＤＲ−１４の値に応じてデコーダ１４３とセレクタ３０１で選択され、その出力がＣａｃｈａｂｌｅ決定回路に送られる。
【００４６】
キャッシュヒット判定部３３は、ＩＮＤＥＸアドレスのデコーダ３３１、命令デコーダ３３２を使って、ＲＵカウンタ−３０に対して、キャッシュヒット時の状況を報告する信号を出力する。デコーダ３３１は、ＩＮＤＥＸアドレスの２５６ビットのデコード信号を生成する。命令デコーダ３３２は、信号線３３２１にキャッシュ入りロード命令デコード信号を、そして信号線３３２２にキャッシュ入りストア命令デコード信号をそれぞれ生成する。信号線３３３０の信号は、Ｂステージに存在する有効なメモリロード命令がヒットしたことを示す。信号線３３３１の信号は、あるキャッシュエントリで、Ｂステージに存在する有効なメモリロード命令がヒットしたことを示す。また、ストア命令でのｗｒｉｔｅヒット検出信号を信号線３３３２に生成し、Ｂステージの次のタイミングでＷＥフラグを点灯させ、キャッシュにストアデータを書き込む。
【００４７】
次に、図９に基づいてＶＬ＝２の時のＶＬＤ命令がキャッシュヒットした場合の動作について説明する。２次キャッシュをアクセスする命令は、Ａステージで命令コード、アドレスが、各々、ＯＰＣ−１７、ＡＤＲ−１４に設定される。Ｂステージで、１ｓｔ／２ｎｄリクエストが両方ヒットした場合、次のタイミングは両方ともＷステージに移行し、読み出しデータがＲＤＲ−３５を介してＶＰＵに送られる。
【００４８】
次に、図１０に基づいてＶＬ＝２の時のＶＳＴ命令がキャッシュヒットした場合の動作について説明する。Ａステージで命令コード、アドレス、ストアデータが、各々、ＯＰＣ−１７、ＡＤＲ−１４、ストアデータ−２２に設定される。Ｂステージで、１ｓｔ／２ｎｄリクエストが両方ヒットした場合、次のタイミングは両方ともストアデータが、ストアデータ−２２に格納され、ＷＥ−１６が点灯して、ＤＡ−３２に書き込まれる。
【００４９】
次に、図１１に基づいてＶＬ＝２の時のＶＬＤ命令がキャッシュミスした場合の動作について説明する。Ａステージで命令コード、アドレスが、各々、ＯＰＣ−１７、ＡＤＲ−１４に格納され、Ｂステージでミスが判定される。それと同時にＶＬ−２、ｄｉｓｔａｎｃｅ−３の値とＡＤＲ−２６、さらに、ＶＬＤ範囲ＲＥＧ−１との比較によって、Ｃａｃｈａｂｌｅであることを判定する。ここでのＣａｃｈａｂｌｅ判定条件は、〔ＶＬＤ範囲ＲＥＧ−１〕＞〔ＶＬ〕＊〔ｄｉｓｔａｎｃｅ〕である。キャッシュミス時のメモリリクエストは、１ライン分データのｂｌｏｃｋロ−ドとしてＡＴＢへ送られ、その後ミスリプライ有効信号としてターゲットになるワードデータから順に帰ってくる。そして、タイミング▲８▼及び▲９▼でＷＥ−１６を点灯させ、キャッシュに登録するとともにＲＤＲ−３５を介してＶＰＵにリプライデータを送出する。さらに、残りのキャッシュラインデータをキャッシュへ書き込むために、タイミング（１０）以後でも、ＷＥ−１６が点灯する。この場合、従来技術でも説明したように、後続命令の発行を止める必要がある。
【００５０】
次に、図１２に基づいてＶＬ＝２の時のＶＳＴ命令がキャッシュミスした場合の動作について説明する。Ａステージで、命令コード、アドレス、ストアデータが、各々ＯＰＣ−１７、ＡＤＲ−１４、ストアデータ−２２に設定される。Ｂステージで、１ｓｔ／２ｎｄリクエストが両方ミスした場合、次のタイミングで両方ともＡＴＢへのリクエストとして送出される。
【００５１】
次に、図１３に基づいてＶＬ＝２の時のＶＬＤ命令がキャッシュミスし、且つＮｏｎ‐ｃａｃｈａｂｌｅとなった場合の動作について説明する。Ａステージで命令コード、アドレスが、各々ＯＰＣ−１７、ＡＤＲ−１４に格納され、Ｂステージでミスが判定される。それと同時にＶＬ−２、ｄｉｓｔａｎｃｅ−３の値とＡＤＲ−２６、さらに、ＶＬＤ範囲ＲＥＧ−１との比較によって、Ｎｏｎ‐ｃａｃｈａｂｌｅであることを判定する。ここでのＣａｃｈａｂｌｅ判定条件は、〔ＶＬＤ範囲ＲＥＧ−１〕＜＝〔ＶＬ〕＊〔ｄｉｓｔａｎｃｅ〕である。キャッシュミス時のメモリリクエストは、要求するワードデータのみのリクエストとしてＡＴＢへ送られ、その後ミスリプライ有効信号として帰ってくる。しかし、Ｎｏｎ‐ｃａｃｈａｂｌｅであるため、ＷＥ−１６は点灯せず、リプライデータを単にＶＰＵへ返すだけである。したがって、その後のリフィル動作が発生しないので、その分後続命令の待ちが発生しない点で図１１の動作と異なる。
【００５２】
次に、図１４に基づいて、本特許におけるキャッシュ登録判定にかかわるＶＬＤ範囲ＲＥＧ−１、ＲＵカウンタ制限値ＲＥＧ−１３への命令による書き込み動作について説明する。上記２つのレジスタは、ＬＣＲＧ命令によってセットされる。その命令のＹフィールドで指定されたレジスタ内容にしたがって各々のレジスタに値を格納する。本発明における機能を有効にしたい場合は、各々のＶビットに“１”を立てる必要がある。一方、ＬＣＲＧ命令の動きとしては、Ａステージに到着する１サイクル前にＶＰＵからの指示によって、ＶＬＤ範囲ＲＥＧ（Ｖ、ｄａｔａ）−１、ＲＵカウンタ制限値ＲＥＧ（Ｖ、ｄａｔａ）−１３に設定される。
【００５３】
図１５は、図９〜図１３におけるＶＬＤ命令及びＶＳＴ命令が発生した場合の動作についてフローチャートとしてまとめたものである。図左側に示すフローのように、ＶＬＤ命令リクエストが発生すると、キャッシュヒットか否かが判定され、ヒットした場合は、キャッシュを読んでＶＰＵに返す（図９に対応するフロー）。
【００５４】
ヒットしない場合には、次いで、Ｃａｃｈａｂｌｅか否かが判定される。Ｃａｃｈａｂｌｅである場合には、ＡＴＢへ１ライン分のブロックＬＤリクエストを発行し、リプライターゲットデータをＶＰＵに返して、キャッシュにブロックデータを書き込む（図１１に対応するフロー）。
【００５５】
他方、Ｃａｃｈａｂｌｅでない場合は、ＡＴＢへ必要なワードのみのリクエストを発行し、そしてリプライターゲットデータをＶＰＵへ返す（図１３に対応するフロー）。
【００５６】
図１５右側のようにＶＳＴ命令リクエストが発生すると、キャッシュヒットか否かが判定される。ヒットした場合には、Ｃａｃｈｅにデータの書き込みを行う(図１０に対応するフロー）。他方、ヒットしない場合には、ＡＴＢへメモリ書き込みのリクエストを発行する(図１２に対応するフロー）。
【００５７】
【効果】
本発明にかかるキャッシュ制御方法並びに制御回路によれば、ロードリクエストの性質、あるいは、ヒットしたラインの履歴によって、キャッシュに登録させるロードにするか否かをＨＷが動的に判断することになる。
【００５８】
また、ＶＬＤ範囲レジスタとＲＵカウンタ制限値レジスタの更新によって、判断方法をＳＷが明示的に指定することができる。それによって、発明の背景で説明したような問題点を解決し、参照のローカリティが厳密な意味で保証されないプログラムであっても、キャッシュによる性能向上効果を得ることができる。
【図面の簡単な説明】
【図１】本発明の実施例におけるキャッシュ制御回路の全体構成図である。
【図２】本発明の実施例における２次キャッシュ周辺回路の構成図である。
【図３】本発明の実施例における２次キャッシュ構成図である。
【図４】ＲＵカウンタ制御回路周辺構成図である。
【図５】キャッシュリフィル時の性能低下について説明した図である。
【図６】本発明の実施例におけるＶＬＤ命令仕様を示す図である。
【図７】科学技術計算におけるメモリアクセスの局所性について説明した図である。
【図８】局所性のないプログラムにおいてキャッシュが意味をなさない例を説明した図である。
【図９】ＶＬ＝２の時のＶＬＤ命令がキャッシュヒットした時の動作について説明した図である。
【図１０】ＶＬ＝２の時のＶＳＴ命令がキャッシュヒットした時の動作について説明した図である。
【図１１】ＶＬ＝２の時のＶＬＤ命令がキャッシュミスした時の動作について説明した図である。
【図１２】ＶＬ＝２の時のＶＳＴ命令がキャッシュミスした時の動作について説明した図である。
【図１３】ＶＬ＝２の時のＶＬＤ命令がキャッシュミスし、且つ、Ｎｏｎｃａｃｈａｂｌｅとなった時の動作について説明した図である。
【図１４】キャッシュ登録判定にかかわるレジスタへの命令による書き込み動作について説明した図である。
【図１５】図９ないし図１３に対応するＶＬＤ命令及びＶＳＴ命令の動作に関するフロー図である。
【符号の説明】
ＳＰＵ    スカラプロセッサユニット
ＶＰＵ    ベクトルプロセッサユニット
ＡＴＢ    アドレス変換バッファ
ＩＯＰ    入出力処理部
ＶＬＤ    ベクトルロード
ＶＬ      ベクトル長
ＡＡ      アドレスアレイ
ＤＡ      データアレイ
ＷＤＲ    書き込みデータレジスタ
ＲＤＲ    読み出しデータレジスタ
ＯＰＣ    命令コードレジスタ
【図１】
0003770091.tif 000003
【図２】
0003770091.tif 000004
【図３】
0003770091.tif 000005
【図４】
0003770091.tif 000006
【図５】
0003770091.tif 000007
【図６】
0003770091.tif 000008
【図７】
0003770091.tif 000009
【図８】
0003770091.tif 000010
【図９】
0003770091.tif 000011
【図１０】
0003770091.tif 000012
【図１１】
0003770091.tif 000013
【図１２】
0003770091.tif 000014
【図１３】
0003770091.tif 000015
【図１４】
0003770091.tif 000016
【図１５】
0003770091.tif 000017