(57)【特許請求の範囲】
【請求項１】
メモリアクセス命令を実行する命令実行部と、
前記メモリアクセス命令に係るデータを記憶する記憶部と前記命令実行部との間に配されたキャッシュメモリ部と、
前記キャッシュメモリ部に対して発行するプリフェッチに係る制御情報を保持する制御情報保持部と、
過去に実行された前記メモリアクセス命令に基づくアドレス情報を保持するアドレス情報保持部と、
前記アドレス情報保持部に保持されたアドレス情報と実行する前記メモリアクセス命令でのアクセスアドレスとを比較し、比較結果に基づいて前記メモリアクセス命令に付加された指示情報で指定される前記制御情報保持部の制御情報に応じた前記キャッシュメモリ部に対するハードウェアプリフェッチ要求を生成し発行する制御部とを有する演算処理装置。
【請求項２】
前記制御情報保持部に保持される前記制御情報をソフトウェア指示により書き換え可能である請求項１記載の演算処理装置。
【請求項３】
前記制御情報保持部に保持する制御情報は、前記メモリアクセス命令でのアクセスアドレスにおける差分の期待値を含み、
前記メモリアクセス命令を実行した場合、前記メモリアクセス命令のアクセスアドレスと前記差分の期待値とから計算されるアドレス情報を前記アドレス情報保持部に保持させる制御部を有する請求項１又は２記載の演算処理装置。
【請求項４】
前記制御情報保持部に保持する制御情報は、前記メモリアクセス命令でのアクセスアドレスに対するハードウェアプリフェッチ要求のアクセス先のアドレスを指示するプリフェッチ距離に係る情報を含む請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
前記キャッシュメモリ部に対して発行するプリフェッチに係る制御情報を保持する前記制御情報保持部を複数有する請求項１〜４の何れか１項に記載の演算処理装置。
【請求項６】
前記制御情報保持部の制御情報に応じた前記キャッシュメモリ部に対するハードウェアプリフェッチ要求を生成するか、ハードウェア設定に応じた前記キャッシュメモリ部に対するハードウェアプリフェッチ要求を生成するかを前記メモリアクセス命令に付加された指示情報によって切り替え可能である請求項１〜５の何れか１項に記載の演算処理装置。
【請求項７】
前記制御情報保持部の制御情報に応じた前記キャッシュメモリ部に対するハードウェアプリフェッチ要求を生成する場合、キャッシュミスの発生を契機に前記アドレス情報保持部にアドレス情報を登録してアクセスパターン検出を行うとともにハードウェアプリフェッチ要求を生成する第１のモードと、前記アドレス情報保持部にアドレス情報を登録せずにメモリアクセス命令と同時にハードウェアプリフェッチ要求を生成する第２のモードとを、前記メモリアクセス命令に付加された指示情報によって切り替え可能である請求項１〜６の何れか１項に記載の演算処理装置。
【請求項８】
前記演算処理装置はさらに、設定情報を保持する設定情報保持部を有し、
前記制御情報保持部の制御情報に応じた前記アドレス情報保持部の最大エントリ数と、前記設定情報保持部が設定する設定情報に応じた前記アドレス情報保持部の最大エントリ数とを、前記設定情報保持部に保持された設定情報に応じて切り替え可能である請求項１〜７の何れか１項に記載の演算処理装置。
【請求項９】
前記ハードウェアプリフェッチ要求を生成するか否かを前記メモリアクセス命令に付加された指示情報によって制御する請求項１〜８の何れか１項に記載の演算処理装置。
【請求項１０】
メモリアクセス命令を実行する命令実行部と、
前記メモリアクセス命令に係るデータを記憶する記憶部と前記命令実行部との間に配されたキャッシュメモリ部と、
前記キャッシュメモリ部に対して発行するプリフェッチに係る制御情報を保持する制御情報保持部と、
前記メモリアクセス命令に付加された指示情報で指定される前記制御情報保持部の制御情報に応じた前記キャッシュメモリ部に対するハードウェアプリフェッチ要求を生成し発行する制御部とを有する演算処理装置。
【請求項１１】
メモリアクセス命令を実行する命令実行部と、前記メモリアクセス命令に係るデータを記憶する記憶部と前記命令実行部との間に配されたキャッシュメモリ部と、前記キャッシュメモリ部に対して発行するプリフェッチに係る制御情報を保持する制御情報保持部と、過去に実行された前記メモリアクセス命令に基づくアドレス情報を保持するアドレス情報保持部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する制御部が、前記アドレス情報保持部に保持されたアドレス情報と実行する前記メモリアクセス命令でのアクセスアドレスとを比較し、
前記制御部が、比較結果に基づいて前記メモリアクセス命令に付加された指示情報で指定される前記制御情報保持部の制御情報に応じた前記キャッシュメモリ部に対するハードウェアプリフェッチ要求を生成し発行する演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
コンピュータはＣＰＵ（Central Processing Unit）コアと主記憶装置との間に複数階層のキャッシュメモリを有し、主記憶装置や複数階層のキャッシュメモリのうち、より主記憶装置側に近い下位階層キャッシュメモリへのアクセスレイテンシ隠蔽やスループット不足の改善を図っている。ＣＰＵにおけるコアの高速化やメニーコア化が進んでおり、キャッシュメモリのヒット率向上やキャッシュミスレイテンシの隠蔽が必要とされている。
【０００３】
このような問題に対する１つの解決手段として、近い将来必要と予測されるデータを予めキャッシュメモリに読み込んでおくことでキャッシュミスの発生を減らすプリフェッチが用いられている。プリフェッチの実現方法としては、ソフトウェアによる手法（ソフトウェアプリフェッチ）とハードウェアによる手法（ハードウェアプリフェッチ）とがある。
【０００４】
ソフトウェアプリフェッチでは、コンパイラやプログラマが予め命令列の中にプリフェッチ命令を明示的に挿入してプリフェッチを行う。従来のソフトウェアプリフェッチでは、予め命令列の中にプリフェッチ命令を明示的に挿入しておくため柔軟な制御が可能であるが、キャッシュヒット及びキャッシュミスの発生状況やアドレス計算結果などの動的な振る舞いに応じて必要なプリフェッチ命令を挿入するのが困難である。
【０００５】
また、ソフトウェアプリフェッチでは、アドレス計算のための命令やプリフェッチ命令が命令発行や命令実行に係るハードウェア資源を消費するため、性能オーバーヘッドが発生することもある。また、ソフトウェアプリフェッチでは、プリフェッチを行うキャッシュライン単位に必要最低限の１つのプリフェッチ命令のみを挿入するのが困難であるために冗長なプリフェッチ命令が挿入されるという問題点がある。
【０００６】
一方、ハードウェアプリフェッチでは、過去のメモリアクセスアドレスやキャッシュミスアドレスのパターンをハードウェアで記憶しておき、過去のアクセスパターンから規則性を抽出し、次のアクセスアドレスを予測してプリフェッチを行う。例えば、キャッシュライン単位での連続アクセスや一定間隔での定型ストライドアクセスの場合に、そのアクセスパターンに応じたハードウェアプリフェッチを行う方式がある。
【０００７】
ハードウェアプリフェッチでは、検出するアクセスパターンが複雑になるほどアルゴリズムが複雑で実現性に対する難易度が高くなったり、ハードウェアコストとしての回路物量や電力が増加してしまう。また、ハードウェアプリフェッチは、ハードウェア回路として実装されたアルゴリズムに従って動作するため、プリフェッチを発行するタイミングやどれだけ先のアドレスに対するプリフェッチを行うかのプリフェッチ距離が固定的となる。
【０００８】
定型スライドアクセスのハードウェアプリフェッチを実現する例として、同じプログラムカウンタ（ＰＣ）値のメモリアクセス命令間でのパターン検出に限定することで、アクセスパターン抽出の難易度を低減する手法が提案されている。しかし、ＰＣ値をハードウェアプリフェッチ制御部が使用できるようにするために、ＰＣ値をハードウェアプリフェッチ制御部まで伝搬させるハードウェアコストが発生する。また、ＰＣ値毎にアクセスパターンを検出しようとすると、保持すべきテーブルのエントリ数が大きくなってしまう。特に、ソフトウェア最適化の一環でループ処理を展開するループアンローリングをした場合、系列数やストライド幅が大きくなる傾向になり、効果的にハードウェアプリフェッチを生成できなくなることも考えられる。
【０００９】
また、キャッシュメモリのブロックサイズ、ブロック数、ブロック間のストライド幅を命令コードで指示した１つのソフトウェアプリフェッチ命令によってハードウェアプリフェッチ回路を起動して複数回のプリフェッチを行う技術が提案されている（例えば、特許文献１、２参照）。この技術では、ソフトウェアプリフェッチ命令が、命令発行や命令実行に係るハードウェア資源を消費する影響は低減できるが、命令コードでストライド幅等を指示しているため、却って命令コードを消費してしまう結果となる。
【００１０】
ハードウェアプリフェッチに関し、プリフェッチアドレスキューへの登録やハードウェアプリフェッチの発行を抑止するヒント情報をメモリアクセス命令に付加することで、不要なハードウェアプリフェッチの生成を防ぐ技術が提案されている（例えば、特許文献３、４参照）。また、アプリケーション毎の実行時の挙動に基づいてプリフェッチの禁止又は許可をオペレーティングシステムから設定できるようにする技術が提案されている（例えば、特許文献５参照）。プリフェッチヒント命令等でハードウェアプリフェッチが検出すべきアクセスパターン等を指示してハードウェアプリフェッチの動作を制御する技術が提案されている（例えば、特許文献６参照）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】米国特許第６５７８１３０号明細書
【特許文献２】米国特許第６９１５４１５号明細書
【特許文献３】米国特許第８１６６２５０号明細書
【特許文献４】欧州特許出願公開第２２０４７４１号明細書
【特許文献５】米国特許第７３１８１２５号明細書
【特許文献６】米国特許第７５３３２４２号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１２】
従来のハードウェアプリフェッチでは、プリフェッチを発行するタイミングやプリフェッチ距離はハードウェア設定された固定のものであった。一つの側面では、本発明は、ハードウェアプリフェッチの動作を柔軟に制御できるようにすることを目的とする。
【課題を解決するための手段】
【００１３】
演算処理装置の一態様は、メモリアクセス命令を実行する命令実行部と、メモリアクセス命令に係るデータを記憶する記憶部と命令実行部との間に配されたキャッシュメモリ部と、キャッシュメモリ部に対して発行するプリフェッチに係る制御情報を保持する制御情報保持部と、過去に実行されたメモリアクセス命令に基づくアドレス情報を保持するアドレス情報保持部と、ハードウェアプリフェッチ要求を生成し発行する制御部とを有する。制御部は、アドレス情報保持部に保持されたアドレス情報と実行するメモリアクセス命令でのアクセスアドレスとを比較し、比較結果に基づいてメモリアクセス命令に付加された指示情報で指定される制御情報保持部の制御情報に応じたキャッシュメモリ部に対するハードウェアプリフェッチ要求を生成し発行する。
【発明の効果】
【００１４】
発明の一態様においては、ハードウェアプリフェッチの動作を柔軟に制御することが可能となる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施形態における演算処理装置の構成例を示す図である。
【図２】第１の実施形態におけるプリフェッチ設定レジスタの構成例を示す図である。
【図３】第１の実施形態におけるプリフェッチ指示情報の付加例を説明するための図である。
【図４】第１の実施形態におけるプリフェッチ指示情報の付加例を説明するための図である。
【図５】第１の実施形態におけるプリフェッチモード情報の一例を示す図である。
【図６】第１の実施形態におけるプリフェッチアドレスキュー動作設定レジスタの構成例を示す図である。
【図７】第１の実施形態におけるハードウェアプリフェッチ制御部の処理動作例を示すフローチャートである。
【図８】第１の実施形態におけるハードウェアプリフェッチ制御部の処理動作例を示すフローチャートである。
【図９】第２の実施形態における演算処理装置の構成例を示す図である。
【図１０】本実施形態におけるプリフェッチ指示情報付メモリアクセス命令の生成処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態を図面に基づいて説明する。
【００１７】
（第１の実施形態）
本発明の第１の実施形態について説明する。
図１は、第１の実施形態における演算処理装置の構成例を示すブロック図である。第１の実施形態における演算処理装置（プロセッサ）は、命令発行部・命令実行部１０、一次キャッシュ部２０、二次キャッシュ部３０、プリフェッチ設定レジスタ４０、及びハードウェアプリフェッチ制御部５０Ａを有する。
【００１８】
命令発行部・命令実行部１０は、供給される命令をデコードし、デコード結果に応じて処理を実行する。例えば、命令発行部・命令実行部１０は、命令のデコード結果に応じて主記憶装置６０が保持するデータに対するアクセスを行うとき、一次キャッシュ部１０に対してメモリアクセス命令を発行する。
【００１９】
ここで、本実施形態におけるメモリアクセス命令には、プリフェッチモード情報とプリフェッチ設定レジスタ番号とがプリフェッチ指示情報として付加されている。プリフェッチモード情報は、ハードウェアプリフェッチに係る動作モードを指定する情報であり、プリフェッチ設定レジスタ番号は、参照するプリフェッチ設定レジスタを指定する情報である。命令発行部・命令実行部１０から発行されたプリフェッチ指示情報付きのメモリアクセス命令は、プリフェッチ設定レジスタ４０及びハードウェアプリフェッチ制御部５０Ａにも入力される。
【００２０】
一次キャッシュ部２０は、命令発行部・命令実行部１０からの要求に対して高速に応答可能であり、アクセス速度の速い一次キャッシュメモリを有する。一次キャッシュ部２０は、命令発行部・命令実行部１０からのメモリアクセス命令に対して、アクセスアドレスのデータが一次キャッシュメモリに存在する場合、そのデータをメモリアクセスデータとして命令発行部・命令実行部１０に供給する。一方、一次キャッシュ部２０は、アクセスアドレスのデータが一次キャッシュメモリに存在しない場合、そのデータを要求する一次キャッシュ登録要求を二次キャッシュ部３０に発行する。
【００２１】
二次キャッシュ部３０は、一次キャッシュメモリより容量が大きく、かつ主記憶装置６０よりアクセス速度の速い二次キャッシュメモリを有する。二次キャッシュ部３０は、一次キャッシュ部２０から要求されたアクセスアドレスのデータが二次キャッシュメモリに存在する場合、そのデータを一次キャッシュ登録データとして一次キャッシュ部２０に供給する。一次キャッシュ登録データとして一次キャッシュ部２０に供給されたデータは、一次キャッシュ部２０にて保持されるとともに命令発行部・命令実行部１０に供給される。また、二次キャッシュ部２０は、要求されたアクセスアドレスのデータが二次キャッシュメモリに存在しない場合、そのデータを要求する二次キャッシュ登録要求を主記憶装置６０に発行する。
【００２２】
主記憶装置６０は、二次キャッシュ部３０からの二次キャッシュ登録要求を受けると、要求されたアクセスアドレスのデータを二次キャッシュ登録データとして二次キャッシュ部３０に供給する。二次キャッシュ登録データとして二次キャッシュ部３０に供給されたデータは、二次キャッシュ部３０及び一次キャッシュ部２０のそれぞれにて保持されるとともに命令発行部・命令実行部１０に供給される。
【００２３】
プリフェッチ設定レジスタ４０は、ハードウェアプリフェッチ制御部５０Ａの動作を指示するレジスタである。本実施形態では、プリフェッチ設定レジスタ４０によって、どのようなハードウェアプリフェッチを行うかを設定することができる。メモリアクセス命令に付加されたプリフェッチ指示情報のプリフェッチ設定レジスタ番号により示されるプリフェッチ設定レジスタ４０に設定された情報が、ハードウェアプリフェッチ制御部５０Ａに供給される。プリフェッチ設定レジスタ４０は、図２に示すようなフィールドを有し、設定レジスタ書き込み命令を用いてソフトウェアによって設定情報が更新可能となっている。
【００２４】
図２は、プリフェッチ設定レジスタ４０の構成例を示す図である。バリッドビット（Ｖ）２０１は、このプリフェッチ設定レジスタに設定された情報が有効であるか否かを示す。本実施形態では、バリッドビット（Ｖ）２０１の値が“１”である場合に有効であるとし、バリッドビット（Ｖ）２０１の値が“０”である場合に無効であるとする。プリフェッチ設定レジスタ４０のバリッドビット（Ｖ）２０１の値が“０”である場合、本実施形態ではハードウェアプリフェッチ動作は行われない。
【００２５】
優先度指示ビット（Ｌ１Ｓ）２０２は、一次キャッシュプリフェッチの優先度が高いことを示すものであり、一次キャッシュプリフェッチの重要度が高く、優先的に処理するなどの制御重み付けに使用される。また、優先度指示ビット（Ｌ２Ｓ）２０３は、二次キャッシュプリフェッチの優先度が高いことを示すものであり、二次キャッシュプリフェッチの重要度が高く、優先的に処理するなどの制御重み付けに使用される。
【００２６】
フィールド２０４は、先行のメモリアクセス命令と後続のメモリアクセス命令との間のアクセスアドレスの差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）が格納される。差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）は、先行のメモリアクセス命令のアクセスアドレスに対してどの程度離れたアドレスに後続のメモリアクセス命令がきたらハードウェアプリフェッチ要求を生成するかを指示するためのものである。
【００２７】
フィールド２０５は、ハードウェアプリフェッチ要求を生成する際、メモリアクセス命令のアクセスアドレスからどの程度離れたアドレスに対して二次キャッシュプリフェッチ要求を生成するかを指示する二次キャッシュプリフェッチ距離（Ｌ２ＰＦ＿ＤＩＳＴ）が格納される。また、フィールド２０６は、ハードウェアプリフェッチ要求を生成する際、メモリアクセス命令のアクセスアドレスからどの程度離れたアドレスに対して一次キャッシュプリフェッチ要求を生成するかを指示する一次キャッシュプリフェッチ距離（Ｌ１ＰＦ＿ＤＩＳＴ）が格納される。
【００２８】
本実施形態に示す例では、設定される差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）、プリフェッチ距離（Ｌ２ＰＦ＿ＤＩＳＴ）、プリフェッチ距離（Ｌ１ＰＦ＿ＤＩＳＴ）のそれぞれにおける最上位ビット（本例では第２１ビット）をサインビットとする。したがって、図２に示す例では、差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）、プリフェッチ距離（Ｌ２ＰＦ＿ＤＩＳＴ）、プリフェッチ距離（Ｌ１ＰＦ＿ＤＩＳＴ）のそれぞれは、±２ＭＢの範囲で設定可能であり、アドレス昇順方向及びアドレス降順方向のどちらに対してもハードウェアプリフェッチの制御が可能となる。なお、プリフェッチ距離（Ｌ２ＰＦ＿ＤＩＳＴ）が０の場合には二次キャッシュプリフェッチ要求は生成されず、プリフェッチ距離（Ｌ１ＰＦ＿ＤＩＳＴ）が０の場合には一次キャッシュプリフェッチ要求は生成されない。
【００２９】
ここで、メモリアクセス命令にプリフェッチ指示情報を付加する方法の例としては、例えば図３や図４に示す方法がある。図３は、メモリアクセス命令の命令コードの一部を使ってプリフェッチ指示情報を付加する例を示している。命令種別、ベースアドレスが格納されたベースレジスタ番号、及びベースアドレスに対するオフセットを示すアドレス即値をそれぞれ指定する領域３０１、３０２、３０３に加えて領域３０４、３０５を設けて、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）及びプリフェッチ設定レジスタ番号をそれぞれ指定する。
【００３０】
図４は、アクセスアドレスの未使用ビットを使ってプリフェッチ指示情報を付加する例を示している。演算処理装置によっては、メモリアクセス命令におけるアクセスアドレスとして使用可能なアドレス範囲の内の一部しか使用しないことがあり、このような未使用のアドレス範囲が存在する場合には未使用ビットを使ってプリフェッチ指示情報を付加することが可能である。例えば、図４（Ａ）に示すようにメモリアクセス命令では下位側の領域４０３だけを使用する場合、上位側に領域４０１、４０２を設けてプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）及びプリフェッチ設定レジスタ番号をそれぞれ指定する。
【００３１】
例えば、図４（Ｂ）に示すようなプログラムを実行することで、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）及びプリフェッチ設定レジスタ番号を設定することができる。なお、図４（Ｂ）には、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が２ビットで値“１０”を設定し、プリフェッチ設定レジスタ番号が４ビットで値“００００”を設定する例を示している。
【００３２】
まず、配列ａのアクセスアドレスを取得する。そして、値“0x03ffffff”と論理積をとることによりプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）及びプリフェッチ設定レジスタ番号を指示する上位６ビットの値を０にクリアした後、値“0x80000000”と論理和をとることによりプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）及びプリフェッチ設定レジスタ番号を指示する。その後、メモリアクセス命令の実行において、プリフェッチ指示情報（プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）及びプリフェッチ設定レジスタ番号）を埋め込んだアドレスをロードする。
【００３３】
図５に、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）で指定するハードウェアプリフェッチに係る動作モードの例を示す。一例として本実施形態においては、ＰＦ＿ＭＯＤＥ＝００の場合が通常の連続アクセスのハードウェアプリフェッチの動作モードを示し、ＰＦ＿ＭＯＤＥ＝０１の場合がハードウェアプリフェッチの動作の抑止を示している。なお、通常の連続アクセスのハードウェアプリフェッチの動作モードでは、プリフェッチ設定レジスタを用いずに、ハードウェア設定に従ってハードウェアプリフェッチ要求が生成される。
【００３４】
また、ＰＦ＿ＭＯＤＥ＝１０の場合がプリフェッチアドレスキューへの登録を含んだプリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦＱ登録モード）を示し、ＰＦ＿ＭＯＤＥ＝１１の場合がプリフェッチアドレスキューへの登録を行わないプリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦＱ非登録モード）を示している。ＰＦ＿ＭＯＤＥ＝１０のＰＦＱ登録モードでは、キャッシュミスを契機にプリフェッチアドレスキュー登録した後、後続メモリアクセス命令でハードウェアプリフェッチ要求を生成するため、キャッシュヒットが続くケースにはハードウェアプリフェッチ要求が生成されないというメリットがある反面、プリフェッチアドレスキューの資源数を超えて動作することができない。それに対して、ＰＦ＿ＭＯＤＥ＝１１のＰＦＱ非登録モードでは、メモリアクセス命令の実行と同時にハードウェアプリフェッチ要求を生成するため、キャッシュヒットであってもハードウェアプリフェッチ要求が生成されてしまうが、プリフェッチアドレスキューの資源数に関係なくプリフェッチ要求を生成することができる。
【００３５】
図１に戻り、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチアドレスキュー５１、パターン監視部５２、一次キャッシュプリフェッチ要求生成部５３Ａ、二次キャッシュプリフェッチ要求生成部５４Ａ、プリフェッチアドレスキュー更新アドレス生成部５５、プリフェッチアドレスキュー制御部５６、及びプリフェッチアドレスキュー動作設定レジスタ５７を有する。ハードウェアプリフェッチ制御部５０Ａは、プリフェッチ指示情報が付加されたメモリアクセス命令及びプリフェッチ設定レジスタ４０の指示等に基づいて、ハードウェアプリフェッチ要求の生成及び発行を制御する。
【００３６】
プリフェッチアドレスキュー５１は、過去に実行されたメモリアクセス命令のアクセスアドレスに基づくアドレス情報（アドレスパターン）を保持する。図１に示す例では、プリフェッチアドレスキュー５１は、エントリ＜０＞〜エントリ＜Ｎ＞の（Ｎ＋１）のエントリを有し、各エントリにアドレス情報を保持する。なお、プリフェッチアドレスキュー５１のエントリに空きがない場合、ＬＲＵ（Least Recently Used）制御等に従って選択された１つのエントリにアドレス情報が上書きされる。
【００３７】
通常の連続アクセスのハードウェアプリフェッチの動作モード（ＰＦ＿ＭＯＤＥ＝００）では、アクセスアドレスに対してハードウェア設定されたアドレス（例えばキャッシュラインサイズ）だけ離れたアドレスがアドレス情報としてプリフェッチアドレスキュー５１に保持される。また、プリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦ＿ＭＯＤＥ＝１０）では、アクセスアドレスに対して差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）だけ離れたアドレスがアドレス情報としてプリフェッチアドレスキュー５１に保持される。
【００３８】
パターン監視部５２は、命令発行部・命令実行部１０からのメモリアクセス命令のアクセスアドレスと、プリフェッチアドレスキュー５１の各エントリに保持されたアドレス情報（アドレスパターン）との比較処理を行う。また、パターン監視部５２は、比較処理の結果を、一次キャッシュプリフェッチ要求生成部５３Ａ、二次キャッシュプリフェッチ要求生成部５４Ａ、プリフェッチアドレスキュー更新アドレス生成部５５、及びプリフェッチアドレスキュー制御部５６に出力する。
【００３９】
一次キャッシュプリフェッチ要求生成部５３Ａは、パターン監視部５２から出力された比較処理の結果等に応じて、一次キャッシュプリフェッチ要求を生成し一次キャッシュ部２０に発行する。二次キャッシュプリフェッチ要求生成部５４Ａは、パターン監視部５２から出力された比較処理の結果等に応じて、二次キャッシュプリフェッチ要求を生成し二次キャッシュ部３０に発行する。プリフェッチアドレスキュー更新アドレス生成部５５は、パターン監視部５２から出力された比較処理の結果等に応じて、メモリアクセス命令のアクセスアドレスに基づくアドレス情報を生成しプリフェッチアドレスキュー制御部５６に出力する。
【００４０】
プリフェッチアドレスキュー制御部５６は、パターン監視部５２から出力された比較処理の結果及び一次キャッシュ部２０からのキャッシュミス情報に応じて、プリフェッチアドレスキュー更新アドレス生成部５５で生成されたアドレス情報（アドレスパターン）をプリフェッチアドレスキュー５１に保持させる。プリフェッチアドレスキュー制御部５６は、プリフェッチアドレスキュー動作設定レジスタ５７を参照するとともにＬＲＵ制御等に従ってプリフェッチアドレスキュー５１のエントリを選択しアドレス情報（アドレスパターン）を保持させる。
【００４１】
プリフェッチアドレスキュー動作設定レジスタ５７は、アドレス情報の登録を行う複数の動作モードでプリフェッチアドレスキュー５１を共有する場合、各動作モードで最大何エントリまでプリフェッチアドレスキュー５１を使用できるかを設定するレジスタである。プリフェッチアドレスキュー動作設定レジスタ５７は、図６に示すようなフィールドを有し、ソフトウェアによって情報を設定可能となっている。
【００４２】
図６は、プリフェッチアドレスキュー動作設定レジスタ５７の構成例を示す図である。図６に示す例では、フィールド６０１に通常の連続アクセスのハードウェアプリフェッチの動作モード（ＰＦ＿ＭＯＤＥ＝００）で使用可能なエントリの最大数（ＭＯＤＥ００＿ＰＦＱ＿ＭＡＸ）を設定し、フィールド６０２にプリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦＱ登録モード）（ＰＦ＿ＭＯＤＥ＝１０）で使用可能なエントリの最大数（ＭＯＤＥ１０＿ＰＦＱ＿ＭＡＸ）を設定する。図６に示した例では、それぞれのフィールド６０１、６０２は５ビットであり、使用可能なエントリの最大数を０〜３１の範囲で指示可能である。
【００４３】
例えば、プリフェッチアドレスキュー５１が１６個のエントリを有し、フィールド６０１、６０２に設定された値がそれぞれ８である場合、８個のエントリずつ分割して使用することとなる。また、例えば、プリフェッチアドレスキュー５１が１６個のエントリを有し、フィールド６０１、６０２に設定された値がそれぞれ１６である場合、どちらの動作モードでも１６個のエントリを使用して良いこととなり、２つの動作モードで完全に共有した状態で動作する。
【００４４】
次に、本実施形態におけるハードウェアプリフェッチ制御部５０Ａの動作について説明する。図７及び図８は、ハードウェアプリフェッチ制御部５０Ａの処理動作例を示すフローチャートである。以下では、命令発行部・命令実行部１０からアクセスアドレスＡに対するメモリアクセス命令が発行された場合を例に説明する。
【００４５】
ハードウェアプリフェッチ制御部５０Ａは、ステップＳ７０１にて、命令発行部・命令実行部１０から発行されたアクセスアドレスＡに対するメモリアクセス命令が入力されると、ステップＳ７０２にて、付加されているプリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“１０”又は“１１”であるか否かを判定する。すなわち、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチモード情報により示される動作モードが、プリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モードであるか否かを判定する。
【００４６】
プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“１０”又は“１１”である、すなわちプリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モードであると判定した場合（ステップＳ７０２のＹＥＳ）、ステップＳ７０３へ進む。ステップＳ７０３にて、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチ指示情報のプリフェッチ設定レジスタ番号で指定されたプリフェッチ設定レジスタ４０が有効であるか否かを判定する。
【００４７】
指定されたプリフェッチ設定レジスタ４０が有効であると判定した場合（ステップＳ７０３のＹＥＳ）、ステップＳ７０４にて、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“１０”であるか否かを判定する。すなわち、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチモード情報により示される動作モードが、プリフェッチアドレスキューへの登録処理を含んだプリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦＱ登録モード）であるか否かを判定する。
【００４８】
プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“１０”である、すなわちプリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦＱ登録モード）であると判定した場合（ステップＳ７０４のＹＥＳ）、ステップＳ７０５へ進む。ステップＳ７０５にて、ハードウェアプリフェッチ制御部５０Ａは、パターン監視部５２によりアクセスアドレスＡと一致するアドレス情報を保持したエントリがプリフェッチアドレスキュー５１に存在するか否かを判定する。
【００４９】
アクセスアドレスＡと一致するアドレス情報を保持したエントリがプリフェッチアドレスキュー５１に存在すると判定した場合（ステップＳ７０５のＹＥＳ）、ステップＳ７０６へ進む。ステップＳ７０６にて、ハードウェアプリフェッチ制御部５０Ａは、そのエントリが保持するアドレス情報を上書きして更新する。このとき、ハードウェアプリフェッチ制御部５０Ａは、指定されたプリフェッチ設定レジスタ４０に設定されている差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）を用いてアドレス（Ａ＋ＰＦＱ＿ＯＦＦＳＥＴ）をプリフェッチアドレスキュー更新アドレス生成部５５で計算し、新たなアドレス情報として保持させる。
【００５０】
また、ステップＳ７０６にて、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチ設定レジスタ４０の指示に基づくハードウェアプリフェッチ要求を、一次キャッシュプリフェッチ要求生成部５３Ａ及び二次キャッシュプリフェッチ要求生成部５４Ａにより生成発行させる。一次キャッシュプリフェッチ要求生成部５３Ａでは、設定されているプリフェッチ距離（Ｌ１ＰＦ＿ＤＩＳＴ）だけアクセスアドレスＡから離れたアドレス（Ａ＋Ｌ１ＰＦ＿ＤＩＳＴ）に対する一次キャッシュプリフェッチ要求を生成させる。また、二次キャッシュプリフェッチ要求生成部５４Ａでは、設定されているプリフェッチ距離（Ｌ２ＰＦ＿ＤＩＳＴ）だけアクセスアドレスＡから離れたアドレス（Ａ＋Ｌ２ＰＦ＿ＤＩＳＴ）に対する二次キャッシュプリフェッチ要求を生成させる。その後、処理を終了する。
【００５１】
ステップＳ７０５において、アクセスアドレスＡと一致するアドレス情報を保持したエントリがプリフェッチアドレスキュー５１に存在しないと判定した場合（ステップＳ７０５のＮＯ）、ステップＳ７０７へ進む。ステップＳ７０７にて、ハードウェアプリフェッチ制御部５０Ａは、アクセスアドレスＡのメモリアクセス命令がキャッシュミスであるか否かを判定する。
【００５２】
アクセスアドレスＡのメモリアクセス命令がキャッシュミスであると判定した場合（ステップＳ７０７のＹＥＳ）、ステップＳ７０８へ進む。ステップＳ７０８にて、ハードウェアプリフェッチ制御部５０Ａは、指定されたプリフェッチ設定レジスタ４０に設定されている差分期待値（ＰＦＱ＿ＯＦＦＳＥＴ）を用いてアドレス（Ａ＋ＰＦＱ＿ＯＦＦＳＥＴ）をプリフェッチアドレスキュー更新アドレス生成部５５で計算し、プリフェッチアドレスキュー５１のエントリに新規登録する。ステップＳ７０８へ進んだ場合、プリフェッチアドレスキュー５１へのアドレス情報の新規登録だけを行い、ハードウェアプリフェッチ要求の生成は行わずに、処理を終了する。
【００５３】
ステップＳ７０７において、アクセスアドレスＡのメモリアクセス命令がキャッシュミスでない、すなわちキャッシュヒットであると判定した場合（ステップＳ７０７のＮＯ）、ステップＳ７０９へ進み、プリフェッチアドレスキュー５１へのアドレス情報の登録及びハードウェアプリフェッチ要求の生成をともに行わずに、処理を終了する。
【００５４】
ステップＳ７０４において、プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“１０”でない、すなわちプリフェッチモード情報が“１１”であると判定した場合（ステップＳ７０４のＮＯ）、ステップＳ７１０へ進む。つまり、ステップＳ７０４において、プリフェッチモード情報により示される動作モードが、プリフェッチ設定レジスタの指示に基づくハードウェアプリフェッチの動作モード（ＰＦＱ非登録モード）であると判定した場合、ステップＳ７１０へ進む。
【００５５】
ステップＳ７１０にて、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチアドレスキュー５１へのアドレス情報の登録を行わずに、プリフェッチ設定レジスタ４０の指示に基づくハードウェアプリフェッチ要求を、一次キャッシュプリフェッチ要求生成部５３Ａ及び二次キャッシュプリフェッチ要求生成部５４Ａにより生成発行させる。一次キャッシュプリフェッチ要求生成部５３Ａでは、設定されているプリフェッチ距離（Ｌ１ＰＦ＿ＤＩＳＴ）だけアクセスアドレスＡから離れたアドレス（Ａ＋Ｌ１ＰＦ＿ＤＩＳＴ）に対する一次キャッシュプリフェッチ要求を生成させる。また、二次キャッシュプリフェッチ要求生成部５４Ａでは、設定されているプリフェッチ距離（Ｌ２ＰＦ＿ＤＩＳＴ）だけアクセスアドレスＡから離れたアドレス（Ａ＋Ｌ２ＰＦ＿ＤＩＳＴ）に対する二次キャッシュプリフェッチ要求を生成させる。その後、処理を終了する。
【００５６】
ステップＳ７０３において、プリフェッチ指示情報のプリフェッチ設定レジスタ番号で指定されたプリフェッチ設定レジスタ４０が有効ではないと判定した場合（ステップＳ７０３のＮＯ）、ステップＳ７１１へ進み、プリフェッチアドレスキュー５１へのアドレス情報の登録及びハードウェアプリフェッチ要求の生成をともに行わずに、処理を終了する。
【００５７】
ステップＳ７０２において、プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“１０”でも“１１”でもないと判定した場合（ステップＳ７０２のＮＯ）、ステップＳ７１２へ進む。ステップＳ７７１２にて、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“０１”であるか否かを判定する。すなわち、ハードウェアプリフェッチ制御部５０Ａは、プリフェッチモード情報により示される動作モードが、ハードウェアプリフェッチ抑止であるか否かを判定する。
【００５８】
プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“０１”である、すなわちハードウェアプリフェッチ抑止であると判定した場合（ステップＳ７１２のＹＥＳ）、ステップＳ７１１へ進み、プリフェッチアドレスキュー５１へのアドレス情報の登録及びハードウェアプリフェッチ要求の生成をともに行わずに、処理を終了する。
【００５９】
一方、プリフェッチ指示情報のプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）が“０１”でない、すなわちプリフェッチモード情報が“００”であると判定した場合（ステップＳ７１２のＮＯ）、ステップＳ７１３へ進む。つまり、ステップＳ７１２において、プリフェッチモード情報により示される動作モードが、通常の連続アクセスのハードウェアプリフェッチの動作モードであると判定した場合、ステップＳ７１３へ進む。
【００６０】
ステップＳ７１３にて、ハードウェアプリフェッチ制御部５０Ａは、通常の連続アクセスのハードウェアプリフェッチの動作を開始し、図８に示すステップＳ８０１へ進む。ステップＳ８０１にて、ハードウェアプリフェッチ制御部５０Ａは、パターン監視部５２によりアクセスアドレスＡのキャッシュラインとキャッシュラインが一致するアドレス情報を保持したエントリがプリフェッチアドレスキュー５１に存在するか否かを判定する。
【００６１】
アクセスアドレスＡのキャッシュラインとキャッシュラインが一致するアドレス情報を保持したエントリがプリフェッチアドレスキュー５１に存在すると判定した場合（ステップＳ８０１のＹＥＳ）、ステップＳ８０２へ進む。ステップＳ８０２にて、ハードウェアプリフェッチ制御部５０Ａは、そのエントリが保持するアドレス情報を上書きして更新する。このとき、ハードウェアプリフェッチ制御部５０Ａは、（Ａ＋キャッシュラインサイズ）のアドレスをプリフェッチアドレスキュー更新アドレス生成部５５で計算し、新たなアドレス情報として保持させる。
【００６２】
また、ステップＳ８０２にて、ハードウェアプリフェッチ制御部５０Ａは、ハードウェア回路によって設定されるプリフェッチ距離に基づくハードウェアプリフェッチ要求を、一次キャッシュプリフェッチ要求生成部５３Ａ及び二次キャッシュプリフェッチ要求生成部５４Ａにより生成発行させる。一次キャッシュプリフェッチ要求生成部５３Ａでは、設定されるプリフェッチ距離だけアクセスアドレスＡから離れたアドレスに対する一次キャッシュプリフェッチ要求を生成させる。また、二次キャッシュプリフェッチ要求生成部５４Ａでは、設定されているプリフェッチ距離だけアクセスアドレスＡから離れたアドレスに対する二次キャッシュプリフェッチ要求を生成させる。その後、処理を終了する。
【００６３】
ステップＳ８０１において、アクセスアドレスＡのキャッシュラインとキャッシュラインが一致するアドレス情報を保持したエントリがプリフェッチアドレスキュー５１に存在しないと判定した場合（ステップＳ８０１のＮＯ）、ステップＳ８０３へ進む。ステップＳ８０３にて、ハードウェアプリフェッチ制御部５０Ａは、アクセスアドレスＡのメモリアクセス命令がキャッシュミスであるか否かを判定する。
【００６４】
アクセスアドレスＡのメモリアクセス命令がキャッシュミスであると判定した場合（ステップＳ８０３のＹＥＳ）、ステップＳ８０４へ進む。ステップＳ８０４にて、ハードウェアプリフェッチ制御部５０Ａは、（Ａ＋キャッシュラインサイズ）のアドレスをプリフェッチアドレスキュー更新アドレス生成部５５で計算し、プリフェッチアドレスキュー５１のエントリに新規登録する。ステップＳ８０４へ進んだ場合、プリフェッチアドレスキュー５１へのアドレス情報の新規登録だけを行い、ハードウェアプリフェッチ要求の生成は行わずに、処理を終了する。
【００６５】
ステップＳ８０３において、アクセスアドレスＡのメモリアクセス命令がキャッシュミスでない、すなわちキャッシュヒットであると判定した場合（ステップＳ８０３のＮＯ）、ステップＳ８０５へ進み、プリフェッチアドレスキュー５１へのアドレス情報の登録及びハードウェアプリフェッチ要求の生成をともに行わずに、処理を終了する。
【００６６】
第１の実施形態によれば、ハードウェアプリフェッチの動作を制御する複数のプリフェッチ設定レジスタを設け、メモリアクセス命令に付加するプリフェッチ指示情報によりプリフェッチ設定レジスタ番号を指示することで、ハードウェアプリフェッチ動作をソフトウェアから制御することができる。また、メモリアクセス命令毎に異なるプリフェッチ設定レジスタを指示すれば、データの特性に応じた最適なハードウェアプリフェッチ要求を生成させることができる。
【００６７】
また、本実施形態では、先行のメモリアクセス命令と後続のメモリアクセス命令との間のアクセスアドレスの差分の期待値を、プリフェッチ設定レジスタに設定することができ、連続アクセスだけでなく、任意のストライドアクセスに対してもハードウェアプリフェッチ要求を生成し発行することが可能となる。また、従来のハードウェアでアドレス差分を監視してアクセスパターン抽出するのに比べて、後続のアクセスアドレスの期待値が一意に設定されるため、アクセスパターンの検出回路が複雑にならず、回路や電力の効率が良いハードウェアの実装が可能である。
【００６８】
また、本実施形態では、後続のメモリアクセス命令でのメモリアドレスに対して、どれだけ先のプリフェッチ距離のアドレスに対してハードウェアプリフェッチ要求を生成し発行するかを、プリフェッチ設定レジスタに設定することができる。そのため、従来のハードウェアプリフェッチでは固定的なプリフェッチ距離でプリフェッチ要求を生成していたのに対して、ソフトウェアから柔軟なプリフェッチ距離の調整が可能となる。例えば、アクセスパターンは同じでも、プリフェッチ距離の異なるハードウェアプリフェッチ要求を生成したい場合には、メモリアクセス命令で指示するプリフェッチ設定レジスタを使い分けることで実現することができる。
【００６９】
このように、本実施形態では、メモリアクセス命令に付加する、ソフトウェアから指示可能な複数のプリフェッチ設定レジスタと複数のハードウェアプリフェッチの動作モードを、メモリアクセス命令毎に使い分けることで、ハードウェアプリフェッチのアクセスパターン・プリフェッチ距離・プリエッチアドレスキューの使い方を、ソフトウェアから柔軟に制御しながらハードウェアプリフェッチ要求を生成することが可能である。ハードウェアとソフトウェアが協調動作することで性能改善効率も良く、またハードウェアの回路物量や消費電力も削減することができる。また、メモリアクセス命令に付随してソフトウェア指示することで、ソフトウェアプリフェッチ命令を挿入する際の問題点であった命令数の増加や、冗長なプリフェッチ挿入といった問題を起こすことなく、メモリアクセス命令の実行とともにハードウェアプリフェッチ制御部によりアドレス計算やプリフェッチ要求の生成発行を行うことができる。プリフェッチ設定レジスタ番号を指示することで、命令コードに必要となるフィールドのビット数も少なくてすみ、またプリフェッチ設定レジスタの定義しだいでアドレス差分期待値やプリフェッチ距離の範囲を広げることも可能である。
【００７０】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。
図９は、第２の実施形態における演算処理装置の構成例を示すブロック図である。この図９において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第２の実施形態における演算処理装置（プロセッサ）は、図９に示すように命令発行部・命令実行部１０、一次キャッシュ部２０、二次キャッシュ部３０、プリフェッチ設定レジスタ４０、及びハードウェアプリフェッチ制御部５０Ｂを有する。
【００７１】
第２の実施形態における演算処理装置は、ハードウェアプリフェッチ制御部５０Ｂが、第１の実施形態における演算処理装置が有するハードウェアプリフェッチ制御部５０Ａと異なる。ハードウェアプリフェッチ制御部５０Ｂは、一次キャッシュプリフェッチ要求生成部５３Ｂ及び二次キャッシュプリフェッチ要求生成部５４Ｂを有する。
【００７２】
第２の実施形態において、一次キャッシュプリフェッチ要求生成部５３Ｂは、プリフェッチ設定レジスタ４０の指示に基づいて、一次キャッシュプリフェッチ要求を生成し一次キャッシュ部２０に発行する。また、二次キャッシュプリフェッチ要求生成部５４Ｂは、プリフェッチ設定レジスタ４０の指示に基づいて、二次キャッシュプリフェッチ要求を生成し二次キャッシュ部３０に発行する。本実施形態においては、プリフェッチアドレスキューを有さず、メモリアクセス命令と同時にハードウェアプリフェッチ要求の発行を可能にしている。
【００７３】
このような構成によれば、過去に実行したメモリアクセス命令のアドレス情報を保持するプリフェッチアドレスキューを備えなくても、メモリアクセス命令と同時に、プリフェッチ設定レジスタの設定に応じて、アドレス計算を行ってハードウェアプリフェッチ要求を生成することも可能である。そのため、プリフェッチアドレスキューそのものを実装しないことで、ハードウェア物量を削減した演算処理装置を実装することも可能である。
【００７４】
図１０は、本発明の一実施形態におけるプリフェッチ指示情報付きのメモリアクセス命令の生成処理の例を示すフローチャートである。図１０には、ソフトウェアプリフェッチ生成のための命令数増加を考慮して、ハードウェアプリフェッチの生成を指示するメモリアクセス命令をソフトウェアが生成する際のフローチャートの例を示している。
【００７５】
ソフトウェア・プログラムとして、典型的なメモリアクセス命令のアクセスパターンの例としては、インダイレクトアクセス、ストライドアクセス、及び連続アクセスがある。キャッシュライン単位で動作するプリフェッチの観点では、ストライド幅がキャッシュラインサイズより小さいストライドアクセスまでが、従来の連続アクセスハードウェアプリフェッチでもサポート可能な範囲である。
【００７６】
インダイレクトアクセスは、アクセスアドレスが別変数を参照して決定されるため、連続アクセスであるケースもあるが、ランダムアクセスであるケースもある。インダイレクトアクセスだが、連続アクセス又は連続アクセスの可能性が高い場合には、従来の連続アクセスのハードウェアプリフェッチで、動的なアクセスパターン検出をした上でハードウェアプリフェッチ生成することは可能である。一方、ソフトウェアプリフェッチ命令を生成しようとすると、インダイレクトアクセスにおいてはプリフェッチによりアクセスするアドレス（アクセスアドレス＋プリフェッチ距離）の計算が必要となり、命令数も増加するし、不要なソフトウェアプリフェッチ命令が挿入される可能性も高く、ソフトウェアプリフェッチ命令のコストが大きい。
【００７７】
そこで、図１０に示す処理例では、インダイレクトアクセス（連続アクセスと推定されるケース）、ストライドアクセス、連続アクセスの順にプリフェッチアドレスキューを割り当てるようにしている。
【００７８】
まず、ステップＳ１００１にて、インダイレクトアクセスではあるが連続アクセスパターンだと推定されて連続アクセスのプリフェッチしたいケースは、プリフェッチアドレスキューが有するエントリ数の範囲でプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）として００又は１０を指示してメモリアクセス命令生成する。全体として見れば結果的に連続アクセスの性質はあるが、連続アクセスを起こしているメモリアクセス命令が特定できない場合などはプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）を００で指示して、従来の連続アクセスのハードウェアプリフェッチでの連続アクセスパターン検出からハードウェアプリフェッチで行う。どのメモリアクセス命令に連続性があるか特定できる場合には、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）を１０で指示してプリフェッチ設定レジスタを使っても良い。
【００７９】
次に、ステップＳ１００２にて、ストライドアクセスに対するプリフェッチの判定を行う。プリフェッチしたいストライドアクセスが存在する場合、ステップＳ１００３にて、プリフェッチアドレスキューのエントリ数の範囲で、ハードウェアプリフェッチを出したいストライドアクセスに対してプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）を１０（ＰＦＱ登録モード）でメモリアクセス命令を生成する。ストライド幅などの情報はプリフェッチ設定レジスタに設定する。プリフェッチアドレスキューのエントリ数を超えてストライドアクセスにおいてハードウェアプリフェッチを出したい場合は、プリフェッチ設定レジスタを設定した上で、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）を１１（ＰＦＱ非登録モード）でメモリアクセス命令を生成する。
【００８０】
最後に、連続アクセスに対して方針を決定する。ステップＳ１００４にて、プリフェッチ要求を出したい連続アクセスがプリフェッチアドレスキューのエントリ数の範囲か否かを判定する。その結果、プリフェッチアドレスキューのエントリ数の範囲であれば、ステップＳ１００６にて、プリフェッチモード情報（ＰＦ＿ＭＯＤＥ）として００又は１０を指示したメモリアクセス命令を生成する。また、連続アクセスのストリーム数がプリフェッチアドレスキューのエントリ数の範囲を超えている場合は、ステップＳ１００５にて、着目している連続アクセスをハードウェアプリフェッチするか否かを個別に判定する。そして、ステップＳ１００６にてプリフェッチアドレスキューを優先的に割り当ててプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）として００又は１０を指示するか、ステップＳ１００７にてプリフェッチアドレスキューを使用せずにプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）として１１を指示するか、ステップＳ１００８にてプリフェッチモード情報（ＰＦ＿ＭＯＤＥ）として０１を指示してハードウェアプリフェッチ抑止にし、必要に応じてソフトウェアプリフェッチ命令を挿入するかの、いずれかを選択する。
【００８１】
ソフトウェアプリフェッチ命令を挿入するためには、プリフェッチ対象のアドレスを生成する必要があり、プリフェッチアドレスの生成では、インダイレクトアクセスが最も命令数やレジスタを必要とするために性能影響が大きい。次いで、ストライドアクセス、最後に連続アクセスの順に、ソフトウェアプリフェッチ命令のコストがかかる。図１０に示すような生成処理を行うことで、インダイレクトアクセス、ストライドアクセス、連続アクセスの順に優先付けて、プリフェッチアドレスキューに登録するモードでプリフェッチ指示情報付きのメモリアクセス命令を生成することが可能となる。
【００８２】
なお、前述した実施形態では、命令発行部・命令実行部１０と主記憶装置６０との間に、一次キャッシュ部２０及び二次キャッシュ部３０の二階層のキャッシュメモリを有する構成を例に説明したが、これに限定されるものではない。命令発行部・命令実行部１０と主記憶装置６０との間に任意の階層数のキャッシュメモリを有する構成に、本発明は適用可能である。
【００８３】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８４】
１０  命令発行部・命令実行部
２０  一次キャッシュ部
３０  二次キャッシュ部
４０  プリフェッチ設定レジスタ
５０Ａ、５０Ｂ  ハードウェアプリフェッチ制御部
５１  プリフェッチアドレスキュー
５２  パターン監視部
５３Ａ、５３Ｂ  一次キャッシュプリフェッチ要求生成部
５４Ａ、５４Ｂ  二次キャッシュプリフェッチ要求生成部
５５  プリフェッチアドレスキュー更新アドレス生成部
５６  プリフェッチアドレスキュー制御部
５７  プリフェッチアドレスキュー動作設定レジスタ
６０  主記憶装置
【図１】
0006458682.tif 000002
【図２】
0006458682.tif 000003
【図３】
0006458682.tif 000004
【図４】
0006458682.tif 000005
【図５】
0006458682.tif 000006
【図６】
0006458682.tif 000007
【図７】
0006458682.tif 000008
【図８】
0006458682.tif 000009
【図９】
0006458682.tif 000010
【図１０】
0006458682.tif 000011