(57)【特許請求の範囲】
【請求項１】
複数の命令と複数のオペランドデータとを記憶する主記憶装置と、
前記各命令を実行する命令処理手段と、
前記オペランドデータを複数保持するオペランドキャッシュと、
前記各命令のうち前記命令処理手段によって最近実行された命令を幾つか登録し、登録された命令とともに該登録された命令の前記主記憶装置上のアドレスと、該登録された命令が前記主記憶装置上のオペランドデータを前記命令処理手段にロードするロード命令であったときに、前記登録された命令が前回実行されたときのオペランドデータの前記主記憶装置上のアドレスと、前記登録された命令が次回実行されたときにアクセスされると予測されるオペランドデータの前記主記憶装置上の予測アドレスと、該予測アドレスが予測された際の先読み方式と、前記登録された命令の先読み状態とを前記登録された命令毎にそれぞれ格納することが可能な命令キャッシュと、
前記命令処理手段によって実行された命令がロード命令であって実行される度にロードするオペランドデータのアドレスが変化する命令であるときには、前記命令処理手段によって該命令が実行される度に、前記命令が次回実行されたときにアクセスするオペランドデータの前記主記憶装置上のアドレスの予測を行い、実際にアクセスされるオペランドデータのアドレスと前記命令キャッシュに格納されている予測アドレスとが一致する先読み方式を決定し、先読み方式を前記命令キャッシュに設定し、前記命令処理手段によって該命令が実行される度に前記命令キャッシュに格納された先読み方式で前記予測アドレスを生成し、前記予測アドレスのオペランドデータの先読みを実行するキャッシュ制御手段とを備える情報処理装置。
【請求項２】
前記予測アドレスとともに、前記予測アドレスにアクセスするロード命令の前記主記憶装置上のアドレスと、前記予測アドレスのオペランドデータと、格納するオペランドデータが有効であるか否かを示すデータ有効フラグとを格納する先読みオペランドバッファをさらに備え、
前記命令処理手段によって実行される命令によってロードされるオペランドデータの主記憶装置上のアドレスが該命令以外の命令の前記予測アドレスとなっている場合には、前記キャッシュ制御手段は該命令におけるオペランドデータのアドレスの先読みを実行せず、該オペランドデータを前記オペランドキャッシュに格納する請求項１記載の情報処理装置。
【請求項３】
前記命令処理手段によってロード命令が実行される度に、前記命令処理手段からアクセス要求があったオペランドデータの主記憶装置上のアドレスと前記命令キャッシュに格納されている前回ロード命令が実行されたときのオペランドデータの前記主記憶装置上のアドレスとの差分を前記命令処理手段からアクセス要求があったアドレスに加算したアドレスを前記予測アドレスとする固定間隔アドレス予測方式と、
前記命令処理手段によってロード命令が実行される度に、前回前記命令処理手段からアクセス要求があったオペランドデータのアドレスを旧ロードアドレスとし、今回前記命令処理手段からアクセス要求があったオペランドデータのアドレスを新ロードアドレスとして前記旧ロードアドレスと前記新ロードアドレスとの組み合わせをアクセス履歴テーブルに格納し、今回前記命令処理手段からアクセス要求があったオペランドデータのアドレスが、前記アクセス履歴テーブルに格納される前記旧ロードアドレスと一致した場合には、前記旧ロードアドレスに対応する新ロードアドレスを前記予測アドレスとするアドレス組予測方式とが前記先読み方式として用いられる請求項１または２記載の情報処理装置。
【請求項４】
前記キャッシュ制御手段は、前記先読み方式を決定する際に、前記先読み方式として前記固定間隔アドレス予測方式か前記アドレス組予測方式かのいずれか１つの方式を選択し、今回のオペランドデータのアドレスと前記命令キャッシュに格納されている予測アドレスとが一致するまで前記命令キャッシュに格納される先読み方式を切り換える請求項３記載の情報処理装置。
【請求項５】
前記キャッシュ制御手段は、前記先読み方式を決定する際に、前記先読み方式として前記固定間隔アドレス予測方式と前記アドレス組予測方式とを両方用いてそれぞれ前記予測アドレスを生成し、今回のオペランドデータのアドレスと前記予測アドレスとが一致した先読み方式を前記命令キャッシュに格納する請求項３記載の情報処理装置。
【請求項６】
前記命令キャッシュから前記予測アドレス格納領域を削除し、前記ロード命令が前回実行されたときのオペランドデータの前記主記憶装置上のアドレスから前回予測した予測アドレスを生成し、実際にアクセスされるオペランドデータのアドレスとを比較することにより先読みが成功あるいは失敗したかを判断することにより先読み方式を決定する請求項１から５のいずれか１項記載の情報処理装置。
【請求項７】
前記命令キャッシュから前記先読み状態を削除し、先読み状態によらず、オペランドキャッシュへのミス、かつ、先読みの成功時にのみ先読みを実行する請求項１から６のいずれか１項記載の情報処理装置。
【請求項８】
前記命令キャッシュにおいて、１回あるいは複数回の先読み失敗により前記先読み方式を切替える請求項４記載の情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、キャッシュを備える情報処理装置に関し、特に、命令キャッシュおよびオペランドキャッシュを備え、データの先読みを行う情報処理装置に関する。
【０００２】
【従来の技術】
情報処理装置では、主記憶装置よりも高速にデータを命令処理装置であるＣＰＵに読み込むことができる小容量だが高速なメモリ装置を内蔵し、主記憶装置から読みだしたデータを一時的に保持し、頻繁にアクセスするデータを高速に読みだすことにより、平均のメモリ読み出し時間を短縮する方法がとられることが多い。また、キャッシュは、命令処理装置が一度に要求するデータサイズより大きい、ラインサイズと呼ばれる読みだし、書き込み単位で登録、検索、置き換え、削除を行い、ラインサイズ内であれば、主記憶装置からの連続した複数のアドレスへのロード要求に対して、先頭のロード要求で読み込んだデータにより、後続のロード要求がキャッシュに登録済みである、すなわちヒットすることによるメモリアクセス高速化の効果もある。
【０００３】
さらに、キャッシュは、最近実行されたプログラムの命令を幾つか保持する命令キャッシュと、主記憶装置に格納されているオペランドデータを幾つか保持するオペランドキャッシュとに分離されている場合がある。前記キャッシュへのアクセス挙動は、大別すると、（１）局所的なアドレスへのアクセス、（２）非局所的な連続アドレス空間へのアクセス、（３）非局所的な一定間隔のアドレスへのアクセス、（４）リスト型のデータ構造へのアクセスなどであって前回アクセスしたアドレスの内容にしたがって次にアクセスされるアドレスが変化する非連続なアクセス、の４種類に大別される。
【０００４】
一般に、ＣＰＵがプログラムを実行するために命令を読み出す際の主記憶装置へのアクセスは、（１）の局所的なアクセスであるのに対し、オペランドデータへのアクセスは（２）、（３）、（４）のような非局所的なアクセスであることが多い。（１）の種類のアクセスでは、キャッシュのヒット率は高いが、（２）、（３）、（４）の種類のアクセスでは、キャッシュのヒット率は極めて低くなる。さらに、（２）、（３）、（４）の種類のアクセスでは、キャッシュへ読み込まれるオペランドデータの容量が実際のキャッシュ容量より大きいため、アクセスされたオペランドデータをキャッシュに全て登録すると、アクセス頻度の高い局所的なオペランドデータがキャッシュから掃き出されてしまうこともあり、さらにキャッシュのヒット率が低下する可能性がある。したがって、オペランドキャッシュは、命令キャッシュに比べヒット率が低く、かつ、キャッシュの容量を拡大したとしても前記効果の拡大は小さい。
【０００５】
前述の非局所的なアクセスにおける頻繁にアクセスされず、オペランドキャッシュにヒットする可能性の低いデータのロード時間を短縮するために、オペランドデータの先読みを行う情報処理装置がある。
【０００６】
ＣＰＵからロード要求が発生する前に、次回ロードするアドレスを予測し、事前に主記憶装置から前記アドレスのデータを読み出し、前記データを高速な記憶装置に保持することにより、前記予測が正しければ高速な記憶装置からデータを読み込むことが可能となり、オペランドデータのロードに要する時間を短縮できる。
【０００７】
特開平０７−２１９８３８号公報では、メモリアクセス履歴に先行ロード命令と後続ロード命令のロードアドレスの組をアクセス履歴テーブルに登録し、先行ロード命令のアドレスと一致するロードアドレスの命令が実行された場合にアクセス履歴テーブルの後続アクセス命令のアドレスに対し、該アドレスのオペランドデータの先読みを行うデータ先読み制御装置が開示されている。
【０００８】
前記従来技術におけるデータ先読み制御装置では、連続的なメモリ空間にアクセスする場合に、ほぼ全てのロード要求に対してアクセス履歴テーブルの１エントリを使用し、必要な先読み成功率を得るためにはアクセス履歴テーブルを記憶するための大容量アクセス履歴テーブルを必要とする。
【０００９】
また、一般的に、同一のオペランドデータにアクセスする複数の命令であっても、異なる命令であった場合、すなわちそれぞれの命令が記憶されている主記憶上のアドレス、すなわち命令アドレスが異なる場合には、前記複数の命令のアクセス挙動が異なる場合が多い。よって、前記従来装置におけるデータ先読み制御装置では、対象アドレスに対する連続するロードが、同一命令から発行された場合には、後続ロードアドレスは先読み予測が成功する可能性が高いが、前記連続する２つのロードが異なる命令から発行された場合には、ロードアドレス予測が失敗する可能性が高く、先読み成功率が低下する。したがって、前記従来技術におけるデータ先読み制御装置では、成功率が低い先読みによって、必要のないオペランドデータをキャッシュにロードしてしまい、かえってオペランドキャッシュのヒット率が低下する場合がある。
【００１０】
【発明が解決しようとする課題】
以上述べたように、従来の情報処理装置では、以下に示す４つの問題点があった。
（１）  非局所的なアクセスによるオペランドキャッシュのヒット率の低下を補うため、先行ロード命令と後続アクセス命令のロードアドレスの組の履歴を記憶するアクセス履歴表を用いて、次回アクセスされるロードアドレスを予測してオペランドデータの先読みを行っていたが、ほぼ全てのロードに対してアクセス履歴テーブルの１エントリを使用するため、必要な先読み成功率を得るためにアクセス履歴テーブルの容量が膨大なものとなる。
（２）  対象アドレスに対する先行ロード命令が、命令アドレスが同じである同一命令から発行されたものである場合、動作は単純な場合が多く、ある程度の先読み成功率を確保することができるが、先行ロード命令が命令アドレスの異なる命令から発行されたものである場合には、ロードアドレスの変化の挙動が複雑となるため、先読み成功率が低下する。
（３）  先読みロードアドレス予測の失敗による使用しないデータが、小容量のオペランドキャッシュに登録されるため、使用頻度の高いデータの掃き出しが起こり、キャッシュヒット率の低下が発生する。
（４）  間違った先読みロードアドレス予測による使用されないデータを先読みするためのロード要求が、後続の実際に使用されるデータに対するロード要求を待たせることにより、ロード要求のアクセスタイム増加が発生し、かつ、限られたメモリアクセス帯域を浪費することによるメモリアクセス性能低下が発生する。
【００１１】
本発明では、膨大な記憶容量を必要とせず、先読み成功率を高く保ち、また、不正確な先読みロードアドレス失敗によるキャッシュ容量およびメモリアクセス帯域の浪費を抑えることができる情報処理装置を提供することを目的とする。
【００１２】
【課題を解決するための手段】
上記課題を解決するために、本発明の情報処理装置は、複数の命令と複数のオペランドデータとを記憶する主記憶装置と、
前記各命令を実行する命令処理手段と、
前記オペランドデータを複数保持するオペランドキャッシュと、
前記各命令のうち前記命令処理手段によって最近実行された命令を幾つか登録し、登録された命令とともに該登録された命令の前記主記憶装置上のアドレスと、該登録された命令が前記主記憶装置上のオペランドデータを前記命令処理手段にロードするロード命令であったときに、前記登録された命令が前回実行されたときのオペランドデータの前記主記憶装置上のアドレスと、前記登録された命令が次回実行されたときにアクセスされると予測されるオペランドデータの前記主記憶装置上の予測アドレスと、該予測アドレスが予測された際の先読みアドレス予測方式と、前記登録された命令の先読み状態とを前記登録された命令毎にそれぞれ格納することが可能な命令キャッシュと、
前記命令処理手段によって実行された命令がロード命令であって実行される度にロードするオペランドデータのアドレスが変化する命令であるときには、前記命令処理手段によって該命令が実行される度に、前記命令が次回実行されたときにアクセスされるオペランドデータの前記主記憶装置上のアドレスの予測を行い、実際にアクセスされるオペランドデータのアドレスと前記命令キャッシュに格納されている予測アドレスとが一致する先読み方式を決定し、先読み方式を前記命令キャッシュに設定し、前記命令処理手段によって該命令が実行される度に前記命令キャッシュに格納された先読み方式で前記予測アドレスを生成し、前記予測アドレスのオペランドデータの先読みを実行するキャッシュ制御手段とを備える。
【００１３】
また、本発明における他の情報処理装置では、前記予測アドレスとともに、前記予測アドレスにアクセスするロード命令の前記主記憶装置上のアドレスと、前記予測アドレスのオペランドデータと、格納するオペランドデータが有効であるか否かを示すデータ有効フラグとを格納する先読みオペランドバッファをさらに備え、
前記命令処理手段によって実行される命令によってロードされるオペランドデータの主記憶装置上のアドレスが該命令以外の命令の前記予測アドレスとなっている場合には、前記キャッシュ制御手段は該命令におけるオペランドデータのアドレスの先読みを実行せず、該オペランドデータを前記オペランドキャッシュに格納する。
【００１４】
また、本発明における他の情報処理装置では、前記命令処理手段によってロード命令が実行される度に、前記命令処理手段からアクセス要求があったオペランドデータの主記憶装置上のアドレスと前記命令キャッシュに格納されている前回ロード命令が実行されたときのオペランドデータの前記主記憶装置上のアドレスとの差分を前記命令処理手段からアクセス要求があったアドレスに加算したアドレスを前記予測アドレスとする固定間隔アドレス予測方式と、前記命令処理手段によってロード命令が実行される度に、前回前記命令処理手段からアクセス要求があったオペランドデータのアドレスを旧ロードアドレスとし、今回前記命令処理手段からアクセス要求があったオペランドデータのアドレスを新ロードアドレスとして前記旧ロードアドレスと前記新ロードアドレスとの組み合わせをアクセス履歴テーブルに格納し、今回前記命令処理手段からアクセス要求があったオペランドデータのアドレスが、前記アクセス履歴テーブルに格納される前記旧ロードアドレスと一致した場合には、前記旧ロードアドレスに対応する新ロードアドレスを前記予測アドレスとするアドレス組予測方式とが前記先読み方式として用いられる。
【００１５】
また、本発明における他の情報処理装置では、前記キャッシュ制御手段は、前記先読み方式を決定する際に、前記先読み方式として前記固定間隔アドレス予測方式か前記アドレス組予測方式かのいずれか１つの方式を選択し、今回のオペランドデータのアドレスと前記命令キャッシュに格納されている予測アドレスとが一致するまで前記命令キャッシュに格納される先読み方式を切り換える。
【００１６】
また、本発明における他の情報処理装置では、前記キャッシュ制御手段は、前記先読み方式を決定する際に、前記先読み方式として前記固定間隔アドレス予測方式と前記アドレス組予測方式とを両方用いてそれぞれ前記予測アドレスを算出し、今回のオペランドデータのアドレスと前記予測アドレスとが一致した先読み方式を前記命令キャッシュに格納する。
【００１７】
また、本発明における他の情報処理装置では、前記命令キャッシュから前記予測アドレス格納領域を削除し、前記ロード命令が前回実行されたときのオペランドデータの前記主記憶装置上のアドレスから前回予測した予測アドレスを生成し、実際にアクセスされるオペランドデータのアドレスとを比較し、先読みの成功あるいは失敗を判断し、先読み方式を決定する。
【００１９】
また、本発明における他の情報処理装置では、前記命令キャッシュから前記先読み状態を削除し、先読み状態によらず、オペランドキャッシュへのミス、かつ、先読みの成功時にのみ次のロードアドレスに対する先読みによるデータ読み出しを実行する。
【００２０】
また、本発明における他の情報処理装置では、前記命令キャッシュにおいて、一旦先読みアドレス予測が成功し、先読み成功状態である場合、１回あるいは複数の定められた回数未満の先読みアドレス予測失敗では先読みを抑止せずに先読みを継続し、規定回数以上の先読みアドレス予測失敗により前記先読み方式を切替える。
【００２１】
本発明の情報処理装置では、命令キャッシュに先読み機構を組み込むことにより、先読み予測の成功率を向上させる。図１３に示すＣ言語記述の命令系列を用いて先読み成功率向上方式を説明する。
【００２２】
図１３のＣ言語記述における繰り返しループの部分（１）の仮想マシン命令への展開後の命令コードを図１４に示す。図１４において、命令処理装置が発行するロード命令とロードアドレス、キャッシュ制御装置に対するロード要求毎のアドレス間隔、命令毎に見た場合のロードアドレスの間隔を図１５に示す。
【００２３】
図１５のｌｏａｄ実行順のオペランドアドレス間隔は＋１００、−１９、＋１００、−１９となっており、ロードアドレスの変化は非連続であり、固定間隔アクセス予測に成功しない。一方、同一命令からのロードアドレスを見ると、ｌｏａｄ  Ｍｅｍｏｒｙ［ａ＋ｒ（ｃｎｔ）］命令、ｌｏａｄ  Ｍｅｍｏｒｙ［ｂ＋ｒ（ｃｎｔ）］のいずれの命令においても＋１だけ増加する固定間隔アドレスアクセスであり、先読みアドレス予測に成功する。従って、命令毎にアドレス予測を行うことにより、ロードアドレス予測の成功率は向上する。
【００２４】
また、前記の例においては、７個の命令が２０００個のアドレスをアクセスしており、命令数はアクセスアドレスの７／２０００＝０．３５％に過ぎないため、アクセスアドレス毎に先読み予測をせず、命令毎に先読み予測をすることにより、予測アドレス保持バッファのサイズを大幅に削減することができており、本発明の情報処理装置はハードウェア量を大きく削減することが可能である。
【００２５】
さらに、本発明の情報処理装置では、命令処理手段によって実行された命令がロード命令であって、実行される度にロードするオペランドデータのアドレスが変化する命令を実行する場合のみオペランドデータの先読みを実行し、その他のロード命令では先読みを実行せず、先読み用の小容量な記憶領域であっても高い先読み成功率を得られる。
【００２６】
また、本発明の情報処理装置では、命令キャッシュに各命令毎の先読み方式と先読み状態とを格納し、先読みを行うか否かあるいはどのような先読み方式を用いるかということを各命令毎に設定することによって、本発明の情報処理装置においては、それぞれの命令のアクセス挙動に応じたオペランドデータの先読みの実行を可能とし、先読みの成功率を高く保つことができる。
【００２７】
さらに、本発明の情報処理装置では、前回のロード命令により予測した先読みアドレスが次回の前記命令の実行時のロードアドレスと一致していない状態である先読み試験中においては、先読みによるメモリへのロード要求を抑止することにより、無駄なメモリアクセスを発生させず、成功の可能性の低い先読みによるメモリ帯域の浪費を防ぐことができる。
【００２８】
前記に加えて、本発明の情報処理装置では、先読みが成功し、先読みバッファにデータが存在する時に、他命令による先読みバッファ内のデータへのアクセスを検出し、先読みデータが他の命令から参照された場合は、該当データをオペランド・キャッシュに登録するが、先読みされたデータが他命令から参照されない場合、すなわち読み捨てられる非局所データである場合は、データをオペランドキャッシュに登録しないことにより、小容量のオペランドキャッシュを効率的に使用することができる。
【００２９】
【発明の実施の形態】
次に、本発明の一実施形態の情報処理装置について図面を参照して詳細に説明する。なお、全図において同一の符号がつけられている構成要素は、すべて同一のものを示す。
【００３０】
図１は、本実施形態の情報処理装置の構成を示すブロック図である。本実施形態の情報処理装置は、命令処理装置１００と、命令キャッシュ２００と、キャッシュ制御装置３００と、オペランドキャッシュ４００と、主記憶装置５００と、先読みオペランドバッファ６００とから構成されている。命令キャッシュ２００は、命令アドレス格納領域２０１と、命令格納領域２０２と、ロードアドレス格納領域２０３と、予測アドレス格納領域２０４と、先読み状態格納領域２０５と、先読み方式格納領域２０６とを１組とする記憶テーブル２１０を複数有している。また、先読みオペランドバッファ６００は、先読みアドレス格納領域６０１と、命令アドレス格納領域６０２と、データ有効フラグ格納領域６０３と、データ格納領域６０４とを１組とする複数の記憶テーブル６１０から構成される。
【００３１】
主記憶装置５００には、命令処理装置１００によって実行される複数の命令と、該命令からアクセスされる複数のオペランドデータとが記憶されている。前記命令には、オペランドデータを命令処理装置１００に読み込むロード命令と、オペランドデータを主記憶装置５００に書き込むストア命令とのメモリアクセス命令と、主記憶装置５００に読み込みも書き込みも発行しない非メモリアクセス命令とに大別される。
【００３２】
命令処理装置１００は、前記命令をキャッシュ制御装置３００を介して読み込み、解析し、実行する。解析した命令がメモリアクセス命令であるときには、命令処理装置１００は、キャッシュ制御装置３００に対してメモリアクセス要求を発する。命令キャッシュ２００では、各記憶テーブル２１０の命令格納領域２０２と、命令アドレス格納領域２０１とに、命令処理装置１００によって最近実行された命令と該命令の命令アドレスとがそれぞれ格納されている。キャッシュ制御装置３００は、命令処理装置１００から命令読み込み要求を受信した際に、命令キャッシュ２００の各記憶テーブル２１０における命令アドレス格納領域２０１に格納されている命令アドレスを参照し、命令読み込み要求の命令アドレスと一致するものがあるかを確認し、一致する記憶テーブル２１０があれば、前記一致した記憶テーブル２１０内の命令格納領域２０２から命令を読み込む。
【００３３】
前記命令読み込み要求の命令アドレスと一致する命令アドレスが命令キャッシュ２００に登録されていない場合、キャッシュ制御装置３００は主記憶装置５００に読み込み要求を送り、主記憶装置５００から返って来た読みだしデータ、すなわち命令と、前記命令読み込み要求の命令アドレスを命令キャッシュ２００に登録するとともに、命令処理装置１００に前記読みだしデータを返す。
【００３４】
命令処理装置１００は、命令読み込み要求に対して返された前記読みだしデータ、すなわち命令を処理し、前記命令がロード命令である場合には、前記命令の命令アドレスとロードアドレスを含むロード要求をキャッシュ制御装置３００を介して命令キャッシュ２００に送る。
【００３５】
命令キャッシュ２００は命令処理装置１００から受け付けた前記ロード要求の命令アドレスにより命令キャッシュ２００を索引し、命令アドレス格納領域２０１に前記命令アドレスと一致した命令アドレスが保持されている組のロードアドレス格納領域２０３に前記ロード要求のロードアドレスを登録する。前記ロードアドレスを登録する際、予測したロードアドレスを保持する予測アドレス格納領域２０４、先読み抑止、先読み試験中、先読み確定の３状態のいずれかを示す先読み状態格納領域２０５、固定間隔アドレス予測方式、あるいはアドレス組予測方式のいずれかを示す先読み方式格納領域２０６も同時に設定する。
【００３６】
記憶テーブル２１０内の各格納領域の設定方法およびオペランドキャッシュ４００への登録の有無、先読みオペランドバッファ６００への先読み予測アドレスの登録の有無、先読み予測アドレスに対する読みだし動作実行の有無、アクセス履歴テーブル７００への登録の有無等の、本実施形態の情報処理装置の基本動作について、図２、図３を用いて以下に説明する。
【００３７】
図２中の条件名Ｃ１ａ〜Ｃ４は、各動作を決定するための条件に付けられた記号である。「Ｏ−Ｃａｃｈｅ」は、前記ロード要求によるオペランドキャッシュ４００の索引結果がヒット（Ｈｉｔ）であるかミス（Ｍｉｓｓ）であるかを示しており、「Ｐ−Ｂｕｆｆｅｒ」は、前記ロード要求による先読みオペランドバッファ６００の索引結果がヒット（Ｈｉｔ）であるかミス（Ｍｉｓｓ）であるかを示しており、「旧状態」は命令キャッシュ２００内の現在実行中のロード命令を保持する記憶テーブル２１０の先読み状態格納領域２０５に格納されている命令実行前の先読み状態を示しており、「旧方式」は前記記憶テーブル２１０の先読み方式格納領域２０６に格納されている、命令実行前の先読み方式を示している。
【００３８】
また、「新状態」は、前記記憶テーブル２１０の先読み状態格納領域２０５の命令実行後の状態を示しており、「新方式」は、前記先読み方式格納領域２０６を変更するか否かを示しており、「予測アドレス」は、前記記憶テーブル２１０の先読み予測アドレス格納領域２０４の値を命令実行により更新するか否かを示しており、「ＯＣ登録」は、ロード要求により読み出したデータをオペランドキャッシュ４００へ登録するか否かを示している。ただし、この「ＯＣ登録」は、オペランドキャッシュ４００にヒットしていた場合には済みと記載される。
【００３９】
「Ｐ登録」は、前記ロード命令により予測したロードアドレスを先読みオペランドバッファ６００の先読み予測アドレス格納領域６０１に登録するか否かを示しており、「Ｐ実行」は、先読み予測アドレスに対する先読み要求をオペランドキャッシュ４００あるいは主記憶装置５００に対して発行するか否かを示しており、「履歴登録」は、アクセス履歴テーブル７００にアドレス組を登録するか否かを示している。
【００４０】
本実施形態の情報処理装置では、キャッシュ制御装置３００が、命令処理装置１００からのロード要求のロードアドレスを命令キャッシュ２００のロードアドレス格納領域２０３に登録する時、条件Ｃ１ａ〜Ｃ１ｇにおいて、該ロードアドレスがオペランド・キャッシュ４００にヒットした場合、すなわち「Ｏ−Ｃａｃｈｅ」が「Ｈｉｔ」している場合は、「新状態」を「抑止」に設定、すなわち「先読み抑止」を先読み状態格納領域２０５に設定する。ロードがオペランドキャッシュにヒットすることはデータの局所性を示し、局所的データは先読み対象外とするために、Ｏ−Ｃａｃｈｅヒット時は先読み抑止状態とする。
【００４１】
また、条件Ｃ２ａ〜Ｃ２ｃにおいて、「Ｏ−Ｃａｃｈｅ」が「Ｍｉｓｓ」で、「Ｐ−Ｂｕｆｆｅｒ」が「Ｍｉｓｓ」、すなわち、キャッシュ制御装置３００が今回のロードアドレスにより、先読みオペランドバッファ６００を索引し、該ロードアドレスと先読みアドレス格納領域６０１内の予測アドレスが一致した記憶テーブル６１０が存在しない場合を「先読みミス」とする。「先読みミス」の場合には、「新状態」を「試験中」に設定、すなわち先読み状態格納領域２０５に「先読み試験中」を設定する。さらに、「新方式」を「変更」、すなわち先読み方式を変更し、変更した先読み方式を先読み方式格納領域２０６に登録し、変更後の先読み方式に従って先読みアドレスを算出し、該先読みアドレスを先読み予測アドレス格納領域２０４に登録するとともに、先読みオペランドバッファ６００に先読み予測アドレスを登録する。条件Ｃ２ａ〜Ｃ２ｃは、「先読み失敗」であり、先読み予測アドレスのデータ読みだしは実行せず、先読みデータ有効フラグ格納領域６０３にデータ無効（オフ）を設定する。さらに、キャッシュ制御装置３００は主記憶装置５００に今回のロードアドレスに対する読みだし要求を発行し、読みだしたデータをオペランドキャッシュ４００に登録するとともに命令処理装置１００に供給する。
【００４２】
キャッシュ制御装置３００が今回のロードアドレスにより、先読みオペランドバッファ６００を索引し、前記ロードアドレスと先読みアドレス格納領域６０１内の予測アドレスが一致した記憶テーブル６１０が存在したことを「先読みヒット」とし、「先読み自命令ヒット」を「先読みヒット」した記憶テーブル６１０の命令アドレス格納領域６０２と前記ロード命令の命令アドレスとが一致した場合とする。
【００４３】
「先読み自命令ヒット」の場合（条件Ｃ３ａ〜Ｃ３ｆ）、本実施形態の情報処理装置では、以下に示す（１）今回のロード命令による動作と、（２）先読みアドレス予測による動作の２種類の動作が行われる。
【００４４】
（１）今回のロード命令による動作：先読みオペランドバッファ６００の記憶テーブル６１０の先読みアドレス格納領域６０１を今回のロードアドレスで索引し、今回のロードアドレスと一致したアドレスが存在し、かつ、一致した記憶テーブル６１０内のデータ有効フラグ格納領域６０３の値が有効（オン）であった場合、キャッシュ制御装置３００は、前記一致した記憶テーブル６１０内のデータ格納領域６０４のデータを読みだして命令処理装置１００に返す。
【００４５】
前記の索引により一致した記憶テーブル６１０が存在しなかった場合、あるいは一致したがデータ有効フラグが無効（オフ）であることを示していた場合、キャッシュ制御装置３００は、主記憶装置５００に読みだし要求を発行し、返ってきたデータを中央処理装置１００に供給する。
【００４６】
前記一致した記憶テーブル６１０の内容は、データ有効フラグがオンあるいはオフにかかわらず、記憶テーブル６１０内の図示しない記憶テーブル有効フラグをオフとすることにより無効となり、後続の先読みのために再利用される。前記読みだされたデータは先読みが成功しているため、オペランドキャッシュ４００には登録されない。図示しない記憶テーブル有効フラグはオペランドキャッシュ４００に予測アドレスを登録する時には必ずオンに設定される。内容が登録されていない記憶テーブル６１０の記憶テーブル有効フラグはオフであり、先読みオペランドキャッシュ６００の索引対象とはならない。
【００４７】
（２）先読みアドレス予測による動作：先読み状態格納領域２０５に「先読み確定」を設定し、先読み方式格納領域２０６に格納される先読み方式に従って予測した先読みアドレスを先読み予測アドレス格納領域２０４に設定し、前記予測した先読みアドレスを先読み予測アドレス格納領域６０１に登録し、前記予測された先読みアドレスによりオペランドキャッシュ４００を索引する。前記索引結果がオペランドキャッシュ４００にヒットしていた場合は、データ有効フラグ格納領域６０３をオフに設定し、主記憶装置５００に先読み要求は発行しない。前記索引結果がミスであった場合、前記先読み要求を主記憶装置５００に発行し、読みだされたデータをデータ格納領域６０４に登録すると共に、データ有効フラグ格納領域６０３をオンにする。
【００４８】
また、オペランドキャッシュ４００、先読みバッファ６００ともにミスした場合、（条件Ｃ２ｂ）、図３のアクセス履歴テーブル７００の実行中ロードアドレスに前回のロードアドレスを、予測ロードアドレスに今回のロードアドレスを登録する。前記アクセス履歴テーブル７００に登録可能なアドレス組の数は有限であるため、アクセス履歴テーブル７００にアドレス組を登録可能な空きが無いときには、以前登録された古いアドレス組を削除して登録を行う。アクセス履歴テーブル７００をダイレクトマップのキャッシュ構造で実装した場合には、同一セットアドレスに対するアドレス組との置き換えが行なわれ、セットアソシアティブ方式で実装した場合にはＬＲＵ（ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムで置き換え対象セットが決定され、リングバッファで実装した場合には最古に登録されたアドレス組との置き換えが行われる。
【００４９】
「先読みヒット」、かつヒットした記憶テーブル６１０の命令アドレス格納領域６０２内の命令アドレスと前記ロード命令の命令アドレスとが不一致の場合（条件Ｃ４）、前記ロードアドレスは複数の命令から参照される頻繁にアクセスされる領域であるとし、キャッシュ制御装置３００は、図２に示すように、「新状態」を「抑止」に設定、すなわち「先読み抑止」を先読み状態格納領域２０５に設定し、主記憶装置５００にロード要求を発行し、読みだされたデータをオペランドキャッシュ４００に登録するとともに、命令処理装置１００に読みだしたデータを返す。
【００５０】
以上述べたように、本実施形態の情報処理装置では、オペランドアドレスが変化しないロード命令がアクセスするオペランドデータ、あるいは、複数の命令からアクセスされるオペランドデータは、局所的な頻繁にアクセスされるオペランドデータであると見なされ、前記オペランドデータはオペランドキャッシュ４００に登録される。しかし、実行される毎にロードアドレスが変更される命令である場合には、前記ロード命令が次回実行するロードアドレスをキャッシュ制御装置３００が予測し、前記予測が成功した場合に、次に使用されるロードアドレスを予測し、先読みを実行する。
【００５１】
先読みされたオペランドデータの予測アドレスは、前記命令が格納されている記憶テーブル２１０の予測アドレス２０４に格納されるとともに、前記予測アドレスと、前記ロードアドレスと、前記ロード命令の命令アドレスと、前記オペランドデータとが、それぞれ先読みオペランドバッファ６００の先読みアドレス格納領域６０１と、命令アドレス格納領域６０２と、データ格納領域６０４とに格納される。
【００５２】
キャッシュ制御装置３００では、「固定間隔アドレス予測方式」と前述の「アドレス組予測方式」という２つの方式を用いてロードアドレスを予測してオペランドデータの先読みが行う。「固定間隔アドレス予測方式」とは、以下の式（１）に示すように、前回のロード命令が実行されたときの旧ロードアドレスと今回のロード命令が実行されたときの新ロードアドレスとの差分を新ロードアドレスに加算したアドレスを予測アドレスとする方式である。
【００５３】
0003594081.tif 000002
図４に示すように、キャッシュ制御装置３００は、命令処理装置１００からロード要求が発せられたときに、命令キャッシュ２００のロードアドレス格納領域２０３から読み出されたロードアドレスを旧ロードアドレスとし、命令処理装置１００から要求された処理要求ロードアドレスを新ロードアドレスとして上述の式（１）を計算し予測アドレスを算出する。前述の「固定間隔アドレス予測方式」は、ソフトウエアにおける配列あるいは構造体等の配列要素を連続アクセスするときに有効な先読み方式である。
【００５４】
また、「アドレス組予測方式」とは、図３に示すように、命令キャッシュ２００のロードアドレス格納領域２０３から読み出されたロードアドレスを旧ロードアドレスとし、命令処理装置１００から要求された処理要求アドレスを新ロードアドレスとして、命令処理装置１００からロード要求が発せられる毎に旧ロードアドレスと新ロードアドレスとの組み合せをアクセス履歴テーブルに格納し、今回命令処理装置１００からアクセス要求があったオペランドデータのアドレスが、前記アクセス履歴テーブルに格納される旧ロードアドレスと一致した場合には、旧ロードアドレスに対応する新ロードアドレスを予測アドレスとする方式である。前記「アドレス組予測方式」は、配列をポインタで接続したデータ構造、あるいはリスト型のデータ構造である不定間隔のアドレスに決まった順序でアクセスする場合に有効な先読み方式である。
【００５５】
キャッシュ制御装置３００は、最初に「固定間隔アドレス予測方式」によりロードアドレス予測を行い、該アドレス予測成功の間は、「固定間隔アドレス予測方式」によりロードアドレスの先読みを行う。前記予測失敗時には、先読み方式を「アドレス組予測方式」に変更してロードアドレスの予測を行う。つまり、本実施形態の情報処理装置では、キャッシュ制御装置３００は、アドレス予測に失敗する毎に先読み方式を切り換えることができる。
【００５６】
また、本実施形態の情報処理装置では、命令キャッシュ２００内の命令毎に前述の「先読み抑止」、「先読み試験中」、「先読み確定」の３つの状態のいづれかを保持する。「先読み抑止」状態とは、前記命令に対するオペランドデータの先読みを行わない状態である。「先読み試験中」状態とはキャッシュ制御装置３００の先読みに失敗している状態である。「先読み確定」状態とはキャッシュ制御装置３００による先読みが成功している状態である。「先読み確定」状態の場合、キャッシュ制御装置３００は、前記先読み方式格納領域２０６の設定内容に従いロードアドレスの先読みアドレス予測を行い、先読みを実行する。
【００５７】
図５を用いて、命令処理装置１００により実行される命令の先読み状態の状態遷移を示す。オペランドキャッシュ４００のヒットが継続されている場合には、命令の先読み状態は、遷移Ｔ１を繰り返し、先読みを実行しない「先読み抑止」状態のままである。「先読み抑止」状態でオペランドキャッシュ４００のミスが発生した場合には、命令の先読み状態は、遷移Ｔ２により「先読み試験中」に移行する。「先読み試験中」において、先読みオペランドバッファ６００にミスした場合には、命令の先読み状態は、遷移Ｔ６を繰り返す。
【００５８】
「先読み試験中」において、ロードアドレスが、先読みオペランドバッファ６００の先読みアドレス格納領域６０１に格納されている予測アドレスに一致した場合、すなわち先読みオペランドバッファ６００にヒットし、かつ、ロード命令の命令アドレスと先読みオペランドバッファ６００の命令アドレス格納領域６０２内の命令アドレスとが一致した場合には、先読みが成功したとし、命令の先読み状態は遷移Ｔ３により「先読み確定」に移行する。「先読み確定」において、先読み成功が継続された場合の先読み状態は遷移Ｔ４を繰り返す。
【００５９】
「先読み確定」において、先読みに失敗した場合には、命令の先読み状態は遷移Ｔ５により「先読み試験中」に移行する。「先読み確定」において、実行中のロード命令の命令アドレスと、先読みオペランドバッファ６００の命令アドレス格納領域６０２内の命令アドレスとが一致しなかった場合には、命令の先読み状態は遷移Ｔ８により「先読み抑止」に移行する。
【００６０】
「先読み試験中」および「先読み確定」において、（１）ロード命令のロードアドレスがオペランドキャッシュ４００にヒットした場合、（２）異る命令アドレスのロードあるいはストア命令からのオペランドアドレスが先読み試験中あるいは先読み確定状態の命令が登録した先読みオペランドバッファ６００にヒットした場合、（３）同一のロード命令からの２回の連続するロード命令実行のオペランドアドレスが一致した場合、の３種類のいずれかの条件により、命令の先読み状態はそれぞれ遷移Ｔ７、Ｔ８によって「先読み抑止」に移行する。
【００６１】
次に、図６、図７を用いて本実施形態の情報処理装置の動作について説明する。図６，図７は本実施形態の情報処理装置におけるキャッシュ制御装置３００の動作を示すフローチャートである。
【００６２】
キャッシュ制御装置３００が命令処理装置１００から命令読み出し要求を受け付けると（ステップＳ１００）、命令キャッシュ２００の各記憶テーブル２１０の命令アドレス格納領域２０１に格納された命令アドレスの中に、前記命令読み出し要求で指定された命令アドレスと一致するものがあるかどうか、すなわち、命令キャッシュ２００にヒットしているか否かチェックする（ステップＳ１１０）。
【００６３】
命令キャッシュ２００にヒットしない場合、キャッシュ制御装置３００は、主記憶装置５００から前記命令を読み出し、前記命令を命令処理装置１００に供給するとともに、前記命令と命令アドレスとを、命令キャッシュ２００の命令格納領域２０２と命令アドレス格納領域２０１とに格納する（ステップＳ２００）。
【００６４】
命令キャッシュに前記命令を登録するための空きエントリがない場合、命令キャッシュ２００はＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）等のアルゴリズムによりエントリを置き換える。新規命令を命令記憶テーブル２１０に登録する時は、先読み方式として固定間隔アドレス予測方式を選択し、また、先読み状態として先読み試験中を設定する。
【００６５】
命令処理装置１００は、キャッシュ制御装置３００から供給された命令を解析し、キャッシュ制御装置３００は、命令処理装置１００によって解析された命令が、ロード命令であるか否かチェックする（ステップＳ２１０）。命令がロード命令以外の場合は（ステップＳ２１０のＮｏ側分岐）、ストア命令時はオペランドキャッシュ６００、あるいは主記憶装置５００にストア要求を送り、非メモリアクセス命令の場合は命令に従い動作を行う。
【００６６】
前記命令がロード命令である場合、キャッシュ制御装置３００は、前記命令のロード先のアドレスであるロードアドレスを、前記命令を格納する記憶テーブル２１０のロードアドレス格納領域２０３に格納し（ステップＳ２２０：ロードアドレス登録）、前記ロードアドレスがオペランドキャッシュ４００にヒットしているか否かをチェックする（ステップＳ２３０）。前記ロードアドレスが、オペランドキャッシュ４００にヒットしている場合には、前記命令を格納する記憶テーブル２１０の先読み状態格納領域２０５に「先読み抑止」を設定し（ステップＳ２４０）、ヒットしたオペランドデータを命令処理装置１００に返し、処理を終了する。
【００６７】
ステップＳ２３０において、前記ロードアドレスがオペランドキャッシュ４００にミスした場合には、キャッシュ制御装置３００が主記憶装置５００から前記ロードアドレスのデータを読み込んでオペランドキャッシュ４００に格納するとともに、命令処理装置１００にオペランド・データを供給し、前記命令を格納する記憶テーブル２１０の先読み状態格納領域２０５に「先読み試験中」を設定し、先読み方式格納領域２０６に「固定間隔アドレス予測方式」を設定する（ステップＳ２５０）。
【００６８】
ステップＳ２６０において、先読みオペランドバッファ６００の記憶テーブル６１０の先読みアドレス格納領域６０１と命令キャッシュ２００内の先読みアドレス格納領域２０４に前記ロードアドレスにオペランドキャッシュ４００の読み込み単位であるラインサイズを加算したアドレスを予測アドレスとして格納し、前記予測アドレスを格納する記憶テーブル６１０の命令アドレス格納領域６０２に前記命令の命令アドレスを格納し、データ有効フラグ格納領域６０３のデータ有効フラグをオフとする。ステップＳ２６０において先読み試験中に設定したことから、主記憶装置５００には先読み予測アドレスに対するロード要求、すなわち先読み要求を発行せずに処理を終了する。
【００６９】
ステップＳ２６０において、先読みオペランドバッファ６００の記憶テーブル６１０に未登録領域が存在しない場合、ＬＲＵ（Ｌｅａｓｔ  ＲｅｃｅｎｔｌｙＵｓｅｄ）アルゴリズムあるいはリングバッファ方式等により、既登録の記憶テーブル６１０と置き換える。
【００７０】
ステップＳ１１０において、命令キャッシュ２００がヒットしている場合には、キャッシュ制御装置３００は、命令キャッシュ２００の命令格納領域２０２に格納されている命令を命令処理装置１００に供給する（ステップＳ１２０）。前記命令が非メモリアクセス命令である場合、キャッシュ制御装置３００は、処理を終了し、次の命令読み出し要求を待つ（ステップＳ１３０）。
【００７１】
キャッシュ制御装置３００は、命令処理装置１００によって解析された命令が、ロード命令であるか否かをチェックする（ステップＳ１４０）。前記命令がロード命令でない場合には、すでにステップＳ１３０でメモリアクセス命令であることが確定しているために前記命令はストアであり、キャッシュ制御装置３００は、前記ストア命令のオペランドデータがオペランドキャッシュ４００にヒットしているか否かをチェックする（ステップＳ５００）。ステップＳ５００において、ストア命令のオペランドがオペランドキャッシュ４００にヒットしている場合、キャッシュ制御装置３００がオペランドキャッシュ４００に対してストア要求を行う（ステップＳ５１０）。
【００７２】
ステップＳ５００において、ストア命令のオペランドがオペランドキャッシュ４００にミスした場合、キャッシュ制御装置３００は、主記憶装置５００に対してストア要求を行う（ステップＳ５２０）。また、キャッシュ制御装置３００は、前記ストア要求のアドレスが、先読みオペランドバッファ６００の各記憶テーブル６１０の中の先読みアドレス格納領域６０１に格納されている予測アドレスと一致しているテーブルが存在するか、すなわちヒットしているか否かをチェックする（ステップＳ５３０）。
【００７３】
前記ストア要求のアドレスが、先読みオペランドバッファ６００にヒットしている場合、キャッシュ制御装置３００は、ヒットした先読みアドレス格納領域６０１に対応した命令アドレス６０２に格納されている命令アドレスを読み出し、前記命令アドレスが命令キャッシュ２００にヒットしているか否かをチェックする（ステップＳ５４０）。
【００７４】
前記命令アドレスが命令キャッシュ２００にヒットしている場合には、ロードとストアの複数の命令に使用されるアドレスであり、オペランドキャッシュ４００の登録対象であり、ヒットした記憶テーブル２１０の先読み状態格納領域２０５に「先読み抑止」を設定する（ステップＳ５５０）。
【００７５】
ステップＳ１４０において、前記命令がロード命令であった場合には、キャッシュ制御装置３００は、ロードアドレスがオペランドキャッシュ４００にヒットしているか否かをチェックする（ステップＳ１５０）。前記命令のロードアドレスがオペランドキャッシュ４００にヒットしている場合には、キャッシュ制御装置３００はオペランドキャッシュ４００からデータを読み出し、前記データを命令処理装置１００へ供給する（ステップＳ１６０）。さらに、今回のアクセスは、局所的なアクセスであると見なし、前記命令が格納されている命令格納領域２０２に対応する先読み状態格納領域２０５に「先読み抑止」を設定し（ステップＳ１７０）、処理を終了する。
【００７６】
ここで、命令処理装置１００からのロード要求のロードアドレスと、先読みオペランドバッファ６００の記憶テーブル６１０の先読みアドレス格納領域６０１に格納されている先読みアドレスとが一致することを「先読みヒット」とする。また、「先読みヒット」、かつ、ヒットした記憶テーブル６１０内の命令アドレス格納領域６０２に格納されている命令アドレスがロード命令の命令アドレスと一致することを、「先読み自命令ヒット」とする。
【００７７】
ステップＳ１５０において、前記ロードアドレスがオペランドキャッシュ４００にミスした場合には、先読みオペランドバッファ６００にヒットか否かをチェックする（ステップＳ３００）。
【００７８】
キャッシュ制御装置３００は、先読みオペランドバッファ６００にヒットした記憶テーブル６１０のデータ有効フラグをチェックし（ステップＳ３１０）、前記データ有効フラグがデータ無効（オフ）を示している場合、キャッシュ制御装置３００は主記憶装置５００からデータを読み出して命令処理装置１００に供給し（ステップＳ３２０）、前記データ有効フラグがデータ有効（オン）を示している場合、キャッシュ制御装置３００はヒットした記憶テーブル６１０のデータ格納領域６０４からデータを読み出して命令処理装置１００に供給する（ステップＳ３３０）。
【００７９】
ステップＳ３２０およびステップＳ３３０では主記憶装置５００あるいは先読みオペランドバッファ６００から読みだしたデータはオペランドキャッシュ４００に登録しない。
【００８０】
ステップＳ３４０において、キャッシュ制御装置３００は、「先読み自命令ヒット」であるか否かをチェックする（ステップＳ３４０）。前記ロードアドレスが、「先読み自命令ヒット」の場合には、キャッシュ制御装置３００は、先読みが成功したとして、前記命令を格納する記憶テーブル２１０の先読み状態格納領域２０５に「先読み確定」を設定し（ステップＳ３５０）、先読み予測アドレスを求め、該先読み予測アドレスを、前記命令を格納する記憶テーブル２１０の予測アドレス格納領域２０４と、ヒットした記憶テーブル６１０の先読みアドレス格納領域６０１に格納し、前記予測アドレスの主記憶装置５００上のオペランドデータをデータ格納領域６０４に読み込み、先読みによるオペランドデータが読み込まれた記憶テーブル６１０のデータ有効フラグ格納領域６０４のデータ有効フラグをオンにする（ステップＳ３７０）。
【００８１】
ステップＳ３４０において、「先読み自命令ヒット」でなかった場合、キャッシュ制御装置３００は、前記ロードアドレスが複数の命令から参照されているアクセス頻度の高いアドレスであると見なし、前記命令を記憶する記憶テーブル２１０の先読み状態格納領域２０５に「先読み抑止」を設定する（ステップＳ３６０）。
【００８２】
ステップＳ３００において、前記ロードアドレスが先読みオペランドバッファ６００にミスした場合には、キャッシュ制御装置３００は、前記先読み方式格納領域２０６に格納されている先読み方式を変更し（ステップＳ４１０）、前記先読み方式格納領域２０６に格納された変更された先読み方式に従って予測アドレスを生成し、該予測アドレスを命令キャッシュ２００の予測アドレス格納領域２０４および、先読みオペランドバッファ６００の先読みアドレス格納領域６０１に格納する（ステップＳ４２０）。
【００８３】
ステップＳ４３０において、キャッシュ制御装置３００は主記憶装置５００からデータを読み出し、命令処理装置１００に供給し、読みだしたデータをオペランドキャッシュ４００に登録する。
【００８４】
（発明の他の実施の形態）
以下に、本発明のその他の実施形態について説明する。以下の（Ａ）−（Ｆ）はそれぞれ実施例を意味する記号である。
（Ａ）複数の先読み方式を切り替えて予測するのではなく、同時に複数の先読み方式により次回のロードアドレスを予測する方式の実施例を以下に示す。
【００８５】
前記先読みオペランドバッファ６００の記憶テーブル６１０に先読み方式格納領域を追加し、記憶テーブル６１０への登録時に、先読みアドレスを生成した先読み方式を設定する。キャッシュ制御装置３００が命令処理装置１００からのロード要求を受け取った時の動作を以下に説明する。
【００８６】
前記の実施の形態との相違点を以下の（相違点１）、（相違点２）に示す。
【００８７】
（相違点１）前記ロード要求のロードアドレスがオペランドキャッシュ４００にミスし、先読みオペランドバッファ６００にヒットした場合、ヒットした記憶テーブル６１０内の先読み方式格納領域２０６内の先読み方式を命令キャッシュ記憶テーブル２１０内の先読み方式格納領域に設定し、データ有効フラグ格納領域６０３の内容がオンの場合はデータ格納領域６０４から、データ有効フラグ格納領域６０４の内容がオフの場合は主記憶装置５００から、ロード要求されたデータを読み出し、命令処理装置１００へ供給する。前記ロード要求されたデータは先読みヒットであるため、オペランドキャッシュ４００には登録せず、前記先読み方式により先読みアドレス予測を行い、先読みを実行し読み出したデータを予測アドレスと共に先読みオペランドバッファ６００に登録する。
【００８８】
（相違点２）前記ロード要求のロードアドレスがオペランドキャッシュ４００にミスし、かつ先読みオペランドバッファ６００にミスした場合、複数の先読み方式で予測された次回のロードアドレスそれぞれに対して、オペランドバッファ６００に登録すると同時に、各記憶テーブル６１０の先読み方式格納領域にそれぞれの先読み方式を設定する。今回のロードに対する先読みはミスであったため、前記先読み予測アドレスに対する先読みは行わず、データ有効フラグ格納領域６０４をオフに設定する。
【００８９】
上記２つの相違点以外に関しては、最初の実施例の動作を行う。本実施例により、先読み予測が成功するまでの期間を短縮することができる。
（Ｂ）以下に、命令キャッシュ２００内の予測アドレス格納領域２０４により先読み予測の成功あるいは失敗を判断する実施の形態を示す。
【００９０】
命令キャッシュ２００の予測アドレス格納領域２０４に格納されたロードアドレスと、命令処理装置１００から要求されたロードアドレスとを比較することにより、
前記比較結果が一致した場合を先読み成功、不一致の場合を先読み失敗とする。ただし、前記比較結果が一致したが、先読みオペランドバッファ６００に該当する予測アドレスに対する記憶テーブル６１０が存在しない場合、すなわち前回の命令実行の後、今回の命令実行の前に、他命令の実行により記憶テーブル６１０が置き換えられた場合は、先読みデータ有効フラグ６０３がオフであったとして動作する。また、命令キャッシュ２００の予測アドレス格納領域２０４内のとロードアドレスと、今回のロード要求のロードアドレスにより先読みの成功あるいは失敗を判断することにより、前記発明の先読み自命令ヒットあるいは他命令ヒットという場合の区別がなく、全ての先読みヒットは前記自命令ヒットとして動作を行う。
【００９１】
上記の動作により、先読みアドレス予測の成功あるいは失敗を判断する以外は最初の実施例の動作を行う。本実施例により、先読みアドレス予測が成功した時のみ先読みオペランドバッファ６００を索引し、先読みアドレス予測が失敗した場合には、先読みオペランドバッファ６００の索引が不要となり、先読みオペランドバッファ６００の負荷を低減することができる。
（Ｃ）本発明の他の情報処理装置では、前記命令キャッシュから前記先読み状態を削除し、先読み状態によらず、オペランドキャッシュへのミス、かつ、先読みの成功時にのみ先読みを実行する装置の実施例を以下に示す。
【００９２】
本構成においては、先読み状態が存在しないため、キャッシュ制御装置３００の動作は命令処理装置１００からのロード要求に対するオペランドキャッシュ４００へのヒット・ミス、および先読みアドレス予測の成功・失敗により決定される。以下の（条件Ｋ１）〜（条件Ｋ４）は各動作条件を示す記号である。
【００９３】
（条件Ｋ１）  オペランドキャッシュ４００ヒット時は、先読み動作は行われずオペランドキャッシュ４００に対してロード要求が行われ、読み出されたデータが命令処理装置１００に供給される。
【００９４】
（条件Ｋ２）  オペランドキャッシュ４００ミス時かつ先読みアドレス予測失敗の場合は、先読み方式格納領域２０６の内容を変更し、先読み方式を変更し、変更された先読み方式により先読み予測アドレスを生成し、予測アドレス格納領域２０４に設定する。本条件においては先読みは実行されず、データ有効フラグ格納領域６０３をオフに設定する。本条件においては、前記ロード要求により読み出したデータをオペランドキャッシュ４００に登録する。さらに、アクセス履歴テーブル７００に、更新前のロードアドレス２０３と前記ロード要求のロードアドレスをそれぞれ実行中ロードアドレス、予測ロードアドレスとしてを登録する。
【００９５】
（条件Ｋ３）  オペランドキャッシュ４００ミス時かつ先読みアドレス予測成功、かつデータ有効フラグ格納領域６０３がオフの場合は、主記憶装置５００からロード要求されたデータを読み出し命令処理装置１００に供給する。さらに、先読み方式格納領域２０６の先読み方式により先読みアドレスを予測し、オペランドキャッシュ４００に先読み要求を発行する。前記先読み要求がオペランドキャッシュ４００にヒットした場合は、先読みを行わずに先読み処理を終了する。前記先読み要求がオペランドキャッシュ４００にミスした場合は主記憶装置５００に対してロード要求を送信し、読み出しデータをデータ格納領域６０４にデータを格納し、データ有効フラグ６０３をオンとし、先読みした予測アドレスを予測アドレス格納領域２０４に設定する。本条件においては、前記ロード要求により読み出したデータは、オペランドキャッシュ４００に登録される。
【００９６】
（条件Ｋ４）  オペランドキャッシュ４００ミス時かつ先読みアドレス予測成功、かつデータ有効フラグ格納領域６０３がオンの場合は、データ格納領域６０４からロード要求されたデータを読み出し命令処理装置１００に供給する。さらに、先読み方式格納領域２０６の先読み方式により先読みアドレスを予測し、オペランドキャッシュ４００に先読み要求を発行する。前記先読み要求がオペランドキャッシュ４００にヒットした場合は、先読みを行わずに先読み処理を終了する。前記先読み要求がオペランドキャッシュ４００にミスした場合は主記憶装置５００に対してロード要求を送信し、読み出しデータをデータ格納領域６０４にデータを格納し、データ有効フラグ６０３をオンとし、先読みした予測アドレスを予測アドレス格納領域２０４に設定する。本条件においては、前記ロード要求により読み出したデータは、オペランドキャッシュ４００に登録されない。
【００９７】
前記条件Ｋ１〜Ｋ４で指定された動作により先読みの実行の有無あるいはオペランドキャッシュ４００への登録の有無を判断する。
【００９８】
本実施例により、先読み状態による動作の相違のための複雑な制御を削除し、かつ、記憶テーブル２１０の情報量を削減することができる。
（Ｄ）次に、命令キャッシュ２００内の予測アドレス格納領域２０４により先読みアドレス予測の成功あるいは失敗を判断し、先読みオペランドキャッシュ６００を省略した構成による実施例を以下に示す。
【００９９】
本構成においては、先読みオペランドバッファ６００が存在しないため、先読みしたデータはオペランドキャッシュ４００に登録される。したがって、オペランドキャッシュ４００には命令処理装置１００からのロード要求により読み出したデータおよび先読みにより読み出したデータの両方が登録される。本実施例の情報処理装置の場合には、ロード要求はオペランドキャッシュ４００あるいは主記憶装置５００に転送され、ロード要求が発生する度に先読みアドレス予測の成功・失敗を判断し、先読みアドレス予測が成功した場合には次の先読み要求を主記憶装置５００あるいはオペランドキャッシュ４００に転送する。主記憶装置５００から先読みデータが読み出された場合には、オペランドキャッシュ４００に先読みデータを登録する。先読み状態遷移、先読みアドレス予測方式に関しては最初の実施例の動作を行う。
【０１００】
本実施例により、先読みオペランドバッファ６００を削除することができ、ハードウェア量を削減することができる。（Ｅ）前記（Ｄ）において、命令キャッシュ２００の記憶テーブル２１０にデータ有効フラグ６０３、データ格納領域６０４を追加した実施例を図８を使用して説明する。
【０１０１】
図８においては、前記命令キャッシュ２００に前記の実施例では先読みオペランドバッファ６００内に実装されていたデータ有効フラグ格納領域６０３とデータ格納領域６０４を実装する。前記（Ｄ）同様に先読みオペランドバッファ６００が存在せず、先読みアドレス予測の成功あるいは失敗の判断は命令キャッシュ内の予測アドレス格納領域２０４を用いて行われる。ただし、先読みされたデータはデータ格納領域６０４に格納され、オペランドキャッシュ４００に登録されないことが異なる。本方式によりオペランドキャッシュ４００に先読みに成功する非局所的なデータをオペランドキャッシュ４００に登録せず、オペランドキャッシュ４００を有効に使用することができる。
【０１０２】
本実施例においては、先読みデータを命令毎に持つことにより、先読みによる使用頻度の低い可能性の高いデータをオペランドキャッシュに登録しないことにより、小容量のオペランドキャッシュを有効に活用することができる。
（Ｆ）  前記（Ｄ）において、命令キャッシュ２００内の記憶テーブル２１０から予測アドレス格納領域２０４を削除することにより、命令キャッシュ記憶テーブル２１０の１組あたりの情報量を削減する実施例を示す。
【０１０３】
前回のロードアドレスと先読み方式とから前回のロード実行時の先読み予測アドレスを生成することにより、予測アドレス格納領域２０４を削除することが可能になる。本実施例においては、今回のロード要求のロードアドレスと、前回のロードアドレス２０３と、先読み方式２０６から予測された予測アドレスとを比較することにより、先読みアドレス予測の成功と失敗を判断する。前記ロードアドレスと予測アドレスが一致した場合を予測成功とし、不一致の場合を予測失敗とする。本実施例の方式により、記憶テーブル２１０の情報量を削減できる。
【０１０４】
（発明の他の課題）
前述の先読み状態格納領域２０５が存在する場合の技術においては、先読みが１度失敗することにより、先読み状態を先読み試験中に変更し、先読み方式を変更する。
【０１０５】
図９にＣ言語で記載されているネストしたループの内部でメモリアクセスが行われるプログラムにおいて、最も内側のループが終了したが外側のループが終了しない場合、メモリアクセスの基準アドレスが変更され、再度最も内側のループが実行され、ループの再入前後において実行されたメモリアクセスの間隔が不連続となるために、再入直後のロード命令の先読みが失敗する。前記最も内側のループへの再入後の２回目の繰り返し以降では、最も内のループのロード命令は、以前先読みが成功していた時の先読み方式を使用すれば成功する可能性が高い。
【０１０６】
図９に示されたネストしたループ構造のプログラムを前述の情報処理装置が処理した場合、最も内側のループへの再入直後の先読み失敗により先読み方式が変更されているために、先読み方式が元に戻るまで先読みが失敗し、先読みが再び成功するまでに無駄な先読みアドレス予測の試行が発生する。
【０１０７】
図９に示すＣ言語によって記述されているプログラムを用いて一例を示す。図９のＣ言語記述における繰り返しループの部分の仮想マシン命令への展開後の命令列を図１０に示す。図１０は２重の繰り返しループを実行する命令列であり、内側のループが終了し、次に内側のループを実行する際の行Ｌ８のロード命令
ｌｏａｄ  ｒ（ａ）  ＝  Ｍｅｍｏｒｙ［ａ＋ｘ＊２０００＋ｙ］のメモリアクセス履歴を図１１に示す。
【０１０８】
図１１中の「連番」がロード実行の順番を、「アドレス」がロード命令のオペランドデータの主記憶装置５００上のアドレスであるロードアドレスを、「間隔」が連続する２回の前記アドレスの差分を、「備考」が同一行のロードに対する注釈を示す。連番１から連番１０００までと、連番１００２から連番１００３までの前記間隔が＋１であるが、連番１００１における間隔は＋１００１であり、他の連番のアドレスの間隔とは異ることが問題となる。
【０１０９】
前記情報処理装置では、連番１００１のロード命令実行時には先読み予測が失敗するが、連番１００２では再び間隔が＋１になっており、連番１から１０００までの先読み方式で先読みを実行すれば先読みは成功する。しかし、１度の先読み失敗により先読み方式を変更すると、ネストしたループ構造の命令列に対し、最内部のループを抜け出す度に、先読み方式の不要な切り替えが発生する。
【０１１０】
（発明の他の課題を解決するための手段）
本問題を解決するため、前記の情報処理装置における先読み状態である「先読み抑止状態」と、「先読み試験中状態」と、「先読み確定状態」との他に、新たに「弱い先読み確定状態」を設け、「先読み確定状態」において先読みに失敗した場合には、「弱い先読み確定状態」に遷移し、「弱い先読み確定状態」に遷移する時には、先読み方式を変更せず、かつ、先読みによるオペランドデータの読み込みを実行し、「弱い確定状態」においてあらかじめ決められた回数の先読み失敗が発生した場合に、先読み方式を変更し、先読み試験状態に遷移することにより、前記ネストしたループにおいて内部ループを抜け出した後の一度の先読み失敗によっては先読み方式を変更せず、あらかじめ定められた規定の回数の先読み失敗により先読み方式を切り替える方式を用いて前記の発明の他の課題を解決する。
【０１１１】
（発明の他の課題を解決するための実施の形態）
前記課題を解決するための実施例を図１２を用いて説明する。
【０１１２】
図１２中の表の各列の意味は「Ｐ−ＭＡＴＣＨ」を除いて図２と同じである。「Ｐ−ＭＡＴＣＨ」は、命令処理装置１００からのロード要求のロードアドレスと、命令キャッシュ２００内のロード要求を発行したロード命令の登録されている記憶テーブル２１０内の予測アドレス格納領域２０４とが一致した場合を先読みヒットとして「Ｈｉｔ」で示し、不一致の場合を先読みミスとし「Ｍｉｓｓ」で表す。また、「−−−」は任意の状態を示し、先読みヒットあるいはミスとは無関係であることを示す。
（１）先読み状態が抑止中の動作
条件Ｄ１Ａ〜Ｄ１Ｄにおける、「旧状態」が「抑止」、すなわち先読み状態が抑止中の動作について説明する。キャッシュ制御装置３００が命令処理装置１００からのロード要求のロードアドレスを命令キャッシュ２００のロードアドレス格納領域２０３に登録し、オペランドキャッシュ４００を索引するときに、条件Ｄ１Ａにおける、オペランドキャッシュ４００にヒットした場合、前記状態は抑止状態のまま未変更とし、先読みを実行しない。
【０１１３】
条件Ｄ１Ｂ、Ｄ１Ｃにおける、オペランドキャッシュ４００にミスし、「先読みヒット」した場合には、キャッシュ制御装置３００は、前記ロードアドレスにより先読みオペランドバッファ６００を索引し、前記ロードアドレスと先読みアドレス格納領域６０１の比較結果が一致する記憶テーブル６１０が存在し、かつデータ有効フラグ格納領域６０３がオンであった場合には、データ格納領域６０４のデータを命令処理装置１００に供給し、前記比較結果が不一致または前記データ有効フラグ格納領域６０３がオフであった場合には、前記ロード要求を主記憶装置５００に転送し、読みだしたデータを命令処理装置１００に供給し、オペランドキャッシュ４００には登録せず、先読み状態格納領域２０５に「先読み確定」を設定し、先読み方式格納領域２０６に格納されている先読み方式に従い、条件Ｄ１Ｂの場合は「固定間隔アドレス予測方式」、条件Ｄ１Ｃの場合は「アドレス組予測方式」により、先読み予測アドレスを生成し、該予測アドレスを先読みアドレス格納領域２０４に登録するとともに、先読み要求をオペランドキャッシュ４００に送り、前記先読み要求がオペランドキャッシュ４００にヒットした場合には、データ有効フラグ６０３をオフにし、オペランドキャッシュ４００にミスした場合には、主記憶装置５００に先読み要求を送り、読みだされたデータをデータ格納領域６０４に登録し、データ有効フラグ格納領域６０３をオンにする。
【０１１４】
条件Ｄ１Ｄにおける、先読み状態が抑止状態で、かつ、オペランドキャッシュ４００にミスし、先読みミスした場合、キャッシュ制御装置３００は、前記ロード要求を主記憶装置１００に転送し、読みだしたデータを命令処理装置１００に供給し、オペランドキャッシュ４００に登録し、先読み状態を「先読み試験中」に変更するとともに、先読み方式を変更し、変更された先読み方式に従い生成した予測アドレスを予測アドレス格納領域２０４に登録する。
（２）先読み状態が試験中の動作
条件Ｄ２Ａ〜Ｄ２Ｆにおける、「旧状態」が「試験中」、すなわち先読み状態が試験中の動作について説明する。条件Ｄ２Ａ、Ｄ２Ｂにおける、オペランドキャッシュ４００にヒットし、かつ、先読みヒットした場合、キャッシュ制御装置３００は前記ロード要求をオペランドキャッシュ４００に転送し、読みだしたデータを命令処理装置１００に供給し、先読み状態格納領域２０５に「弱い先読み確定」を設定し、先読み方式格納領域２０６に従い先読み予測アドレスを生成し、該予測アドレスを予測アドレス格納領域２０４に登録するとともに、先読み要求をオペランドキャッシュ４００に送り、前記先読み要求がオペランドキャッシュ４００にヒットした場合には、データ有効フラグ６０３をオフにし、前記先読み要求がオペランドキャッシュ４００にミスした場合には、主記憶装置５００に先読み要求を送り、読みだ出したデータをデータ格納領域６０４に登録し、データ有効フラグ格納領域６０３をオンにする。
【０１１５】
条件Ｄ２Ｃにおける、「旧状態」が「試験中」状態かつ、オペランドキャッシュ４００にヒットし、かつ、先読みミスした場合、キャッシュ制御装置３００は前記ロード要求をオペランドキャッシュ４００に転送し、読みだしたデータを命令処理装置１００に供給し、先読み状態格納領域２０５に「先読み抑止」を設定し、先読み方式格納領域２０６に格納されている方式に従い先読み予測アドレスを生成し、該予測アドレスを予測アドレス格納領域２０４に登録する。
【０１１６】
条件Ｄ２Ｄ、Ｄ２Ｅにおける、オペランドキャッシュ４００にミスし、かつ、先読みヒットした場合、キャッシュ制御装置３００は先読みオペランドバッファ６００を前記ロード要求のロードアドレスによりオペランドバッファ６００を索引し、前記ロードアドレスと先読み予測アドレス格納領域６０１とを比較し、前記比較結果が一致であり、かつ、データ有効フラグ格納領域６０３がオンであった場合には、データ格納領域６０４のデータを命令処理装置１００に供給し、前記比較結果が不一致または前記データ有効フラグ格納領域６０３がオフであった場合には、前記ロード要求を主記憶装置５００に転送し、読みだしたデータを命令処理装置１００に供給するが、オペランドキャッシュ４００に登録せず、先読み状態格納領域２０５に「先読み確定」を設定し、先読み方式格納領域２０６に従い先読み予測アドレスを生成し、該予測アドレスを予測アドレス格納領域２０４に登録すると共に、先読み要求をオペランドキャッシュ４００に送り、オペランドキャッシュ４００にヒットした場合には、データ有効フラグ６０３をオフにし、オペランドキャッシュ４００ミスの場合には、主記憶装置５００に先読み要求を送り、読みだされたデータをデータ格納領域６０４に登録し、データ有効フラグ格納領域６０３をオンにする。
【０１１７】
条件Ｄ２Ｆにおける、「旧状態」が「試験中」であり、かつ、オペランドキャッシュ４００にミスし、かつ、先読みミスした場合、キャッシュ制御装置３００は前記ロード要求を主記憶装置１００に転送し、読みだしたデータを命令処理装置１００に供給し、オペランドキャッシュ４００に登録し、先読み状態を先読み試験中に変更するとともに、先読み方式を変更し、変更された先読み方式に従い予測された予測アドレスを予測アドレス格納領域２０４に登録する。また、条件Ｄ２Ｆでは、アドレス履歴テーブル７００に、ロードドレス格納領域２０３の値および今回のロード要求のロードアドレスをそれぞれ、実行中ロードアドレスおよび予測ロードアドレスに登録する。
（３）先読み状態が先読み確定であるときの動作
条件Ｄ３Ａ〜Ｄ３Ｆにおける、「旧状態」が「先読み確定」であるときの動作について説明する。
【０１１８】
条件Ｄ３Ａ、Ｄ３Ｂにおける、「旧状態」が「先読み確定」かつ、オペランドキャッシュ４００にヒットし、かつ、先読みヒットした場合、キャッシュ制御装置３００は、それぞれ前記条件Ｃ２Ａ、Ｃ２Ｂと同じ動作を行う。
【０１１９】
条件Ｄ３Ｃにおける、「旧状態」が「先読み確定」かつ、オペランドキャッシュ４００にヒットし、かつ、先読みミスした場合、キャッシュ制御装置３００は前記ロード要求をオペランドキャッシュ４００に転送し、読みだしたデータを命令処理装置１００に供給し、先読み状態格納領域２０５に弱い先読み確定を設定し、先読み方式格納領域２０６に従い先読み予測アドレスを生成し、該予測アドレスを予測アドレス格納領域２０４に登録するとともに、先読み要求をオペランドキャッシュ４００に送り、オペランドキャッシュ４００にヒットした場合には、データ有効フラグ６０３をオフにし、オペランドキャッシュ４００ミスの場合には、主記憶装置５００に前記先読み要求を送り、読みだされたデータをデータ格納領域６０４に登録し、データ有効フラグ格納領域６０３をオンにするが、アドレス履歴テーブル７００に登録しない。
【０１２０】
条件Ｄ３Ｄ、Ｄ３Ｅにおける、「旧状態」が「先読み確定」であり、かつ、オペランドキャッシュ４００にミスし、かつ、先読みヒットした場合、キャッシュ制御装置３００はそれぞれ前記条件Ｄ２Ｄ、Ｄ２Ｅと同じ動作を行う。
【０１２１】
条件Ｄ３Ｆにおける、「旧状態」が「先読み確定」であり、かつ、オペランドキャッシュ４００にミスし、かつ、先読みミスした場合、キャッシュ制御装置３００は、前記ロード要求を主記憶装置５００に転送し、読みだしたデータを命令処理装置１００に供給する。さらに、先読み状態格納領域２０５に「弱い先読み確定」を設定し、先読み方式格納領域２０６に従い先読み予測アドレスを算出し、該予測アドレスを予測アドレス格納領域２０４に登録すると共に、先読み要求をオペランドキャッシュ４００に送り、オペランドキャッシュ４００にヒットした場合には、データ有効フラグ６０３をオフにし、オペランドキャッシュ４００ミスの場合には、主記憶装置５００に前記先読み要求を送り、読みだされたデータをデータ格納領域６０４に登録し、データ有効フラグ格納領域６０３をオンにするが、アドレス履歴テーブル７００には登録しない。
（４）「先読み状態が弱い確定の動作」
条件Ｄ４Ａ〜Ｄ４Ｆにおける、「旧状態」が「弱い先読み確定」、すなわち先読み状態が試験中の動作について説明する。
【０１２２】
条件Ｄ４Ａ，Ｄ４Ｂにおける、「旧状態」が「弱い先読み確定」であり、かつ、オペランドキャッシュ４００にヒットし、かつ、先読みヒットした場合、キャッシュ制御装置３００は、それぞれ前記条件Ｄ２Ａ、Ｄ２Ｂと同じ動作を行う。
【０１２３】
条件Ｄ４Ｃにおける、「旧状態」が「弱い先読み確定」であり、かつ、オペランドキャッシュ４００にヒットし、かつ、先読みミスした場合、キャッシュ制御装置３００は前記条件Ｄ２Ｃのときと同じ動作を行う。ただし、複数の弱い先読み確定状態、例えば、弱い先読み確定状態１、弱い先読み確定状態２，．．．弱い先読み確定状態Ｎを設けて、あらかじめ決められた回数の連続した先読み失敗によって、先読み試験中状態に遷移することにすることにより、先読み試験中状態に遷移して先読み方式を変更することにより、先読み方式変更を遅くすることも可能である。
【０１２４】
条件Ｄ４Ｄ、Ｄ４Ｅにおける、「旧状態」が「弱い先読み確定」であり、かつ、オペランドキャッシュ４００にミスし、かつ、先読みヒットした場合、キャッシュ制御装置３００はそれぞれ前記条件Ｄ２Ｄ、Ｄ２Ｅのときと同じ動作を行う。
【０１２５】
条件Ｄ４Ｆにおける、「旧状態」が「弱い先読み確定」かつ、オペランドキャッシュ４００にミスし、かつ、先読みミスした場合、キャッシュ制御装置３００は前記条件Ｄ２Ｆのときと同じ動作を行う。
【０１２６】
【発明の効果】
以上述べたように、本発明の情報処理装置では、以下に示す効果を有する。
（１）  命令処理装置が実行するロード命令のロードアドレスが実行毎に常に同一アドレスである固定アドレスアクセス・ロード命令の場合には、データは一度オペランドキャッシュに登録するだけで後続の同一ロード命令実行時にはキャッシュにヒットする可能性が高いため、先読みによる効果はない。
【０１２７】
一方、ロードアドレスが実行毎に変化するロード命令の場合には、前回アクセスしたデータが再度使用される可能性が低いため、オペランドキャッシュにヒットする可能性は低く、事前にオペランドデータを読み込む先読みにより、ロードの読み込み時間を短縮する先読み効果が得られる。
【０１２８】
本キャッシュ制御装置では、オペランドキャッシュにヒットしたロード命令に対しては先読みを行わず、前記固定アドレスアクセス・ロード命令に対する効果を得られない先読みを行わないことにより、無駄な先読みを抑止する効果がある。
（２）  実行毎にロードアドレスが変化するロード命令である可変アドレス・ロード命令の場合、次回に前記ロード命令が実行されるロードアドレスがオペランドキャッシュに登録されていない可能性が高く、先読みが有効である。
【０１２９】
本キャッシュ制御装置では、オペランドキャッシュにミスした時に先読みアドレス予測を開始し、かつ先読みアドレス予測が成功したことが確認されるまで、オペランドデータの先読みを行わずに先読みアドレス予測のみを行うことにより、成功しない可能性の高い先読みを行わずに先読み成功率を向上させると共に、先読み実行頻度を下げる効果がある。
（３）  前記可変アドレス・ロード命令のアドレス変化には種々の傾向があり、単一のロードアドレス予測方式では高い先読み成功率を得られない。本方式では、複数の先読み方式である「固定間隔アドレス予測方式」あるいは「アドレス組予測方式」をそれぞれの予測が失敗した場合に切り替えることにより、前記可変アドレス・ロード命令のアドレス変化傾向に合った方式を動的に判断でき、先読み成功率向上効果がある。
（４）  連続する２回のロード要求のロードアドレス組であるアクセス履歴テーブルにより先読みアドレスを生成する「アドレス組予測方式」を用いた場合、前記アクセス履歴テーブルのアドレス組の数が容易に増加するという問題がある。本発明では固定間隔アドレス予測方式で先読みミスした場合にアドレス組予測方式を使用することで、非局所的な連続空間へのアクセスや、非局所的な一定間隔のアクセスを行う命令に対しては「固定間隔アドレス予測方式」によりアドレス予測を行い、前記固定間隔アドレス予測方式では先読みの成功しない不連続なアクセスを行う命令についてのみ「アドレス組予測方式」によってアクセス履歴テーブルを使用する。本方式により、先読みに必要なアクセス履歴テーブルの容量を小さく抑える効果がある。
（５）  複数の先読み方式を備え、先読み方式を切り替えて用いた先読み制御装置において、先読み方式の決定までの期間の先読みミスにより先読み成功率が低下する。本発明によるキャッシュ制御装置では、複数の先読みアドレス予測を同時に実行し、先読みの成功した方式により、後続の先読みを行うことにより、先読み方式の確定までの期間を短縮し、先読み成功率を向上させる効果がある。
（６）  規則的な順序によるアドレス空間のアクセスを行う場合は先読みが成功する可能性が高いが、先読みにより読み出したデータは１度使用されるだけで、再度使用されることの無い非局所的なデータである可能性が高い。従って、先読みアドレス予測が成功した場合に読み込みデータをオペランドキャッシュに登録すると、オペランドキャッシュに１度しか使用されないデータが登録されるために、小容量のオペランドキャッシュから、局所的に頻繁に利用されるデータが追い出され、オペランド・キャッシュのミスが増加する要因となりえる。
【０１３０】
キャッシュに１度しか使用しないデータが登録される、あるいは先読み失敗による一度限りあるいは一度も使用されないデータをキャッシュに登録することをキャッシュ汚染と呼ぶと、先読み機能を持つキャッシュ制御装置の設計においては、キャッシュ汚染を避けることが重要となる。
【０１３１】
本発明においては、先読みにより読み込んだデータをオペランドキャッシュに登録しないことにより、前記キャッシュ汚染を防ぎ、オペランドキャッシュを有効に使用することが可能となり、結果としてオペランドキャッシュのヒット率を向上させる効果を得られる。
（７）  ロード命令のロードアドレスの変化する傾向は命令毎に異なり、単に命令処理装置から発行されたロード命令のロードアドレスを観察するだけでは正確な先読み予測が困難である。本発明では、命令キャッシュに各命令毎の先読み方式および先読み状態を格納し、先読みを行うか否か、あるいはどのような先読み方式を用いるかという情報を各命令毎に設定し、アクセス挙動が異なる命令が同一のオペランドデータのアドレスにアクセスした場合にも、それぞれの命令のアクセス挙動に応じたオペランドデータの先読みを実行可能にし、オペランドデータの先読み成功率向上効果がある。
（８）  先読み予測の成功あるいは失敗をロード命令の実行毎に判断することと、先読み失敗してから次に先読みによるアドレス予測が成功するまで、先読みによる主記憶あるいはオペランドキャッシュへのアクセスを行わないことにより、先読み失敗による無駄なメモリアクセスが発生せず、限られたメモリアクセス帯域を有効に使用することで、装置全体のメモリアクセス性能が向上するという効果が得られる。
（９）  ソフトウェアの多重ループにおいては、最も内側のループが完了し、再度最も内側のループに実行が移る時にロードアドレスの連続性が崩れ、前記ループへの再入後２回目以降の繰り返しにおいては、再び以前と同様な連続的なアクセスが再開されることがある。本方式においては、先読みが成功している状態では、１度の先読み失敗による先読み方式を切り替えず、２度連続あるいは決められた回数の先読みが失敗して後に先読み方式を切り替えることにより、多重ループの最内側ループ完了後の最内周ループへの再入時に先読み方式が切り替わらず、無駄な先読み方式の切り替えを抑え、先読み成功率を向上させる。
（１０）  ソフトウェアにおいては、コードサイズがデータサイズより小さいことが多いことと、本発明では命令毎に先読み予測を行うこととから、読みだすアドレス毎に先読み予測を行う方式よりも少ないハードウェア量にて、より高い先読み成功率を得られる効果がある。
（１１）  本発明では命令キャッシュ内の前回の予測アドレスと、ロード要求のロードアドレスを比較することにより先読み成功あるいは失敗の判断をし、先読みアドレス予測に失敗した場合は先読みオペランドバッファを索引する動作を回避し、不要な先読みオペランドバッファのアクセスを削減する。先読みオペランドバッファの使用頻度の低下の効果により、先読みオペランドバッファの索引と登録が同時に発生することによる先読みオペランドバッファアクセス競合による待ち合わせの発生頻度が低下し、メモリアクセス性能向上が得られる。
（１２）  先読みオペランドバッファ内に先読みアドレス予測により生成された予測アドレスと、先読みアドレス予測の元となった命令の命令アドレスとを保持し、前記命令アドレスと異なる命令アドレスを持つ命令が前記オペランドバッファ内の予測アドレスと一致するロードアドレスに対してロード要求を発行した場合、前記ロードアドレスが複数の命令により使用されていることをキャッシュ制御装置が検出し、前記ロードアドレスの読み出したデータをオペランドキャッシュに登録し、複数の命令により使用される頻繁に使用される局所的なデータをキャッシュに登録することで、局所的なデータと非局所的なデータを区別し、オペランドキャッシュのヒット率を低下させることなく先読みを行う効果を有する。
【図面の簡単な説明】
【図１】本発明の一実施形態の情報処理装置の構成を示すブロック図である。
【図２】本発明の一実施形態の情報処理装置の基本動作を示す表である。
【図３】本発明の一実施形態の情報処理装置における先読み方式である固定間隔アドレス予測方式を示すブロック図である。
【図４】本発明の一実施形態の情報処理装置における先読み方式であるアドレス組予測方式を示すブロック図である。
【図５】本発明の一実施形態の情報処理装置における先読み方式の状態遷移図である。
【図６】本発明の一実施形態の情報処理装置の動作を示すフローチャートである。
【図７】本発明の一実施形態の情報処理装置の動作を示すフローチャートである。
【図８】本発明の一実施形態の情報処理装置における命令キャッシュの変形例である。
【図９】Ｃ言語で記述されたプログラムの一例を示す図である。
【図１０】図９のＣ言語記述における繰り返しループの部分の仮想マシン命令への展開後の命令コードを示す図である。
【図１１】図１０の行Ｌ８のロード命令のメモリアクセス履歴を示す図である。
【図１２】「弱い先読み確定状態」を設けた場合の本発明の一実施形態のキャッシュ制御装置の動作を示す図である。
【図１３】Ｃ言語で記述されたプログラムの一例を示す図である。
【図１４】図１３のＣ言語記述における繰り返しループの部分の仮想マシン命令への展開後の命令コードを示す図である。
【図１５】図１４の行Ｌ８のロード命令のメモリアクセス履歴を示す図である。
【符号の説明】
１００    命令処理装置
２００    命令キャッシュ
２０１    命令アドレス格納領域
２０２    命令格納領域
２０３    ロードアドレス格納領域
２０４    予測アドレス格納領域
２０５    先読み状態格納領域
２０６    先読み方式格納領域
２１０    記憶テーブル
３００    キャッシュ制御装置
４００    オペランドキャッシュ
５００    主記憶装置
６００    先読みオペランドバッファ
６０１    先読みアドレス格納領域
６０２    命令アドレス格納領域
６０３    データ有効フラグ格納領域
６０４    データ格納領域
６１０    記憶テーブル
Ｓ１００〜Ｓ５５０    ステップ
【図１】
0003594081.tif 000003
【図２】
0003594081.tif 000004
【図３】
0003594081.tif 000005
【図４】
0003594081.tif 000006
【図５】
0003594081.tif 000007
【図６】
0003594081.tif 000008
【図７】
0003594081.tif 000009
【図８】
0003594081.tif 000010
【図９】
0003594081.tif 000011
【図１０】
0003594081.tif 000012
【図１１】
0003594081.tif 000013
【図１２】
0003594081.tif 000014
【図１３】
0003594081.tif 000015
【図１４】
0003594081.tif 000016
【図１５】
0003594081.tif 000017