(57)【特許請求の範囲】
【請求項１】
複数の実行命令流を同時に制御可能なアーキテクチャを採用するとともに、予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理装置であって、
キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するプリフェッチ対象選択手段と、
前記プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測するアドレス予測手段と、
前記プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定するプリフェッチ命令挿入位置決定手段と、
前記アドレス予測手段によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、前記プリフェッチ命令挿入位置決定手段によって決定された挿入位置に、挿入するプリフェッチ命令挿入手段と、
を具備し、
前記プリフェッチ対象選択手段は、命令アドレスごとにキャッシュミスが発生する回数を計測するカウンタを備え、該カウンタの値が一定値を超えた場合に、キャッシュミス情報を処理するハンドラを起動して、該ハンドラによってプリフェッチ処理の対象とすべき命令を選択するものであり、かつ、
前記プリフェッチ対象選択手段は、前記キャッシュミス情報を処理するハンドラを、主命令流とは独立した命令流として実行させる、
演算処理装置。
【請求項２】
前記プリフェッチ命令挿入位置決定手段は、過去に実行が完了した命令列について命令アドレス及び実行完了時刻を保持するテーブルを備え、該テーブルの情報に基づいてプリフェッチ命令の命令列中への挿入位置を決定する、請求項１に記載の演算処理装置。
【請求項３】
前記プリフェッチ対象選択手段、前記プリフェッチ命令挿入位置決定手段、前記アドレス予測手段及び前記プリフェッチ命令挿入手段をキャッシュメモリ内に備える、請求項１に記載の演算処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、キャッシュメモリを備えるとともにメモリアクセスレイテンシ(memory access latency)を隠蔽するためにプリフェッチ処理を行う演算処理装置に関し、より詳細には、実行時情報に基づいてプリフェッチ処理を行うことでその効果の改善を図った演算処理装置に関する。
【０００２】
【従来の技術】
現在の計算機システムにおいて、メモリアクセスレイテンシの増大は、システム全体の性能向上を妨げる大きな原因となっている。一般の計算機システムは、メモリアクセスの時間的・空間的な局所性に着目し、プロセッサ（レジスタ）とメインメモリとの間に高速にアクセスすることができるキャッシュメモリを装備しており、これによってメモリアクセス性能の向上を図っている。
【０００３】
しかし、メモリアクセスが発生した際、キャッシュメモリにデータが存在しない場合すなわちキャッシュミスが発生した場合には、メインメモリからデータを転送する必要がある。このとき、データ転送に多くの時間を要する（キャッシュミスペナルティ）。現在の演算処理装置においては、キャッシュメモリへのアクセスは１〜十数サイクル程度であるが、キャッシュミスペナルティは、数十サイクルに達する。したがって、プログラムの実行時間はキャッシュミスペナルティによって律速される部分が大きい。プロセッサの動作速度とメモリアクセス速度とのギャップは年々大きくなっており、上記の問題は、将来、より深刻なダメージを計算機システムに対して与えることになる。
【０００４】
この問題に対して、従来技術においては、データプリフェッチ（データ先読み、以下単にプリフェッチと呼ぶ）と呼ばれる方式が広く提案・利用されている。データプリフェッチとは、将来アクセスされるであろうと予想されるデータを、前もってメモリの上位階層（キャッシュメモリ）に転送しておくという処理である。適切にデータプリフェッチを行うことで、メインメモリへのアクセス遅延時間が隠蔽され、見かけ上キャッシュにデータが常に存在しているかのようにプログラムの実行が行われる。
【０００５】
現在まで数多くのプリフェッチ方式が提案されているが、大きく分けて以下の２つの方式に分けられる。
【０００６】
(1) ソフトウェアプリフェッチ。一般に、コンパイラなどが静的にプログラムの挙動解析を行い、プリフェッチ命令をプログラム中に挿入する。プログラムを実行したプロファイル情報を元に、コンパイラなどがプリフェッチ命令を挿入する場合もある。
【０００７】
(2) ハードウェアプリフェッチ。プロセッサの内部あるいは外部に、プリフェッチ専用のハードウェア機構を備える。一般に、動的に（プログラム実行中に）、この専用ハードウェアがキャッシュミスの発生を認識し、予め定められたアルゴリズムに基づいてプリフェッチ処理を行う。既存のハードウェアプリフェッチ方式は、キャッシュミスが数回発生したことを認識し、これをトリガとしてプリフェッチを開始する。
【０００８】
上記(1)の例として、特開平１１−２１２８０２号公報では、原始プログラムを中間テキストに変換し、変換した中間テキストに対して最適化を行い、データプリフェッチを行うアドレスを算出してプリフェッチ命令を挿入するというコンパイル技術が提案されている。
【０００９】
また、上記(2)については、例えば、あるキャッシュブロックがアクセスされた場合に、次のキャッシュブロックに対して近い将来アクセスされるであろうと予測し、そのアドレスに対してプリフェッチを行うというものや、その他にも、ある一定の値を加算して次回アクセスするアドレスを決定するストライド予測によるプリフェッチなど、数多くの方式が提案されている。また、実際に、商用で利用されているものとして、Pentium （登録商標）４においては、実際にアクセスされているアドレスから常に２５６バイト先のデータを先読みするといった機構が備わっている。
【００１０】
【発明が解決しようとする課題】
一般に、プリフェッチ処理を行う場合には、以下のような問題点に留意する必要がある。
【００１１】
(1) キャッシュ汚染が発生すること。プリフェッチを行うことで、キャッシュメモリに格納されていたデータが追い出されてしまう。プリフェッチ処理を行わなければ、追い出されずに本来キャッシュにヒットしたであろうデータが存在した場合には、プリフェッチによって性能低下を招くことがある。
【００１２】
(2) プリフェッチしたデータが、後続のアクセスによって使用前に追い出されること。プリフェッチしたデータに実際にアクセスするときよりも長時間前にプリフェッチ処理を行ってしまうと、実際のアクセスの前に、先行するメモリアクセスによってプリフェッチしたデータが追い出されてしまうことがある。
【００１３】
(3) 過剰なプリフェッチ処理によってバス帯域幅を浪費してしまうこと。必要以上にプリフェッチ処理を行うことで、メモリバス帯域幅を浪費してしまい、逆に性能低下を招く。
【００１４】
上記(1)及び(2)については、プリフェッチ挿入位置とプリフェッチされたデータを実際に使用する命令との距離（プリフェッチ距離）を適切に決定する必要がある。また、上記(3)については、キャッシュミスが発生するメモリアクセス全てについてプリフェッチを行うのではなく、プリフェッチを行えば効果的であると判断できる場合のみ、プリフェッチ命令を挿入しなければならない。
【００１５】
これに対して、従来のプリフェッチ方式では、実行時の状況によりプログラムの挙動が変化する場合や、あるいは、システム構成の変更（プロセッサあるいはメモリシステムの構成の変更）が行われる場合があるため、プリフェッチ距離を適切に設定することは困難である。
【００１６】
まず、ソフトウェアプリフェッチでは、上述のような環境の変更が発生した場合、原始プログラムを再コンパイルするなどの作業が必要になる。このようにシステム毎に実行ファイルを用意することは現実的でない。また、プログラムへの入力によって挙動が変わるようなプログラムの場合には対処できない。
【００１７】
一方、ハードウェアプリフェッチにおいても、単純にロードミスが発生した場合に即座にプリフェッチを行うという方法では、効果的なプリフェッチ距離を保つことができない。また、ハードウェアプリフェッチを行うかどうかの決定方法に関する複雑な処理については、その実装が困難である。実際、従来のハードウェアプリフェッチでは、キャッシュミスが数回発生した段階でプリフェッチを実行したり、アクセスされたブロックの次のブロックに対してプリフェッチし続けるなど一般に単純である。
【００１８】
本発明は、上述した問題点に鑑みてなされたものであり、その目的は、キャッシュメモリを備えた演算処理装置であって、実行時情報に基づいてプリフェッチ命令を命令ストリーム中に挿入することにより、従来のプリフェッチ方式に伴うキャッシュ汚染等の問題を最小限に抑制しつつ効率的にプリフェッチを実行し得るものを提供することにある。
【００１９】
【課題を解決するための手段】
上記目的を達成するために、本発明の第１の面によれば、予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理装置であって、キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するプリフェッチ対象選択手段と、前記プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測するアドレス予測手段と、前記プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定するプリフェッチ命令挿入位置決定手段と、前記アドレス予測手段によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、前記プリフェッチ命令挿入位置決定手段によって決定された挿入位置に、挿入するプリフェッチ命令挿入手段と、を具備する演算処理装置が提供される。
【００２０】
また、本発明の第２の面によれば、好ましくは、前記プリフェッチ対象選択手段は、命令アドレスごとにキャッシュミスが発生する回数を計測するカウンタを備え、該カウンタの値が一定値を超えた場合に、キャッシュミス情報を処理するハンドラを起動して、該ハンドラによってプリフェッチ処理の対象とすべき命令を選択する。
【００２１】
また、本発明の第３の面によれば、好ましくは、前記プリフェッチ命令挿入位置決定手段は、過去に実行が完了した命令列について命令アドレス及び実行完了時刻を保持するテーブルを備え、該テーブルの情報に基づいてプリフェッチ命令の命令列中への挿入位置を決定する。
【００２２】
また、本発明の第４の面によれば、前記プリフェッチ対象選択手段、前記プリフェッチ命令挿入位置決定手段、前記アドレス予測手段及び前記プリフェッチ命令挿入手段をキャッシュメモリ内に備えるようにしてもよい。
【００２３】
また、本発明の第５の面によれば、複数の実行命令流が制御可能な演算処理装置の場合、前記キャッシュミス情報を処理するハンドラが独立した命令流として主命令流とは独立に実行される。
【００２４】
【発明の実施の形態】
以下、添付図面を参照して本発明の実施形態について説明する。
【００２５】
図１は、本発明によりプリフェッチ命令の挿入処理を行う演算処理装置の動作の概要を説明するための図である。この図１は、本発明で関係のある部分のみについて示している。命令フェッチ部および命令デコーダ部をまとめ、命令の実行を制御する部分とし、この部分を制御部と呼ぶことにする。本発明の対象となる演算処理装置では、制御部から次に実行すべき命令を指示する命令アドレスが指定され、命令列が格納されているメモリ（またはキャッシュメモリ）から、命令が読み出され、制御部に入力される。その後、命令は、単一あるいは複数の演算部において実行される。メモリから読み出される命令の並びのことを、本発明では「命令ストリーム（命令流）」と呼ぶ。
【００２６】
図１の制御部は、指定された命令アドレスにプリフェッチ命令を挿入する。実行時、プログラムそれ自体はメインメモリに格納されており、これを直接修正することは行われない。指定された命令アドレスにプリフェッチ命令を挿入して実行する方法の一例においては、命令フェッチユニット（図１では、制御部内に含まれる）が、フェッチする命令アドレスと、挿入する命令アドレスとを比較し、それらが一致すれば、メインメモリから取得した命令ストリーム中にプリフェッチ命令を割り込ませ、その後、そのプリフェッチ命令を演算部が実行する。
【００２７】
本発明による演算処理装置では、キャッシュミスが発生する命令アドレス（ロード／ストア命令、メモリアクセスを伴う演算命令など）が検出される。検出された命令アドレスに対して、実際にデータプリフェッチを行うかどうかを決定するために、様々なアルゴリズムを適用することが考えられる。そして、プリフェッチを行う場合には、システムにおけるキャッシュミスペナルティを考慮して、これに応じたプリフェッチ命令挿入位置（命令アドレス）が指定される。さらに、プリフェッチ対象とするデータアドレスについては、現在までにすでに提案されている様々なデータアドレス予測方式が適用され得る。かくして、プログラムに対して再コンパイルを行ったりせず、また、実行時環境に依存せず、動的で効果的なプリフェッチを行うことができる。
【００２８】
図２は、本発明による演算処理装置の一構成例を示す図である。図２に示される実施形態では、メインメモリ１０に対して、命令キャッシュ１２及びデータキャッシュ１４が設けられている。命令フェッチユニット２０は、プログラムカウンタ（ＰＣ）２４の値（フェッチされるべき命令が格納されているアドレス）に基づいて命令キャッシュ１２から命令をフェッチしデコーダ３０に送出する。デコーダ３０にてデコードされた命令は、分岐命令処理ユニット３２、算術命令処理ユニット３４又はロード／ストア命令処理ユニット３６において処理される。
【００２９】
本実施形態における命令フェッチユニット２０の内部には、プリフェッチ命令の挿入アドレスを指定する複数のレジスタ（プリフェッチ命令挿入アドレスレジスタ）２２ａ〜２２ｄが装備されている。命令フェッチユニット２０は、命令フェッチ時にプログラムカウンタ（ＰＣ）２４の値とプリフェッチ命令挿入アドレスレジスタ２２ａ〜２２ｄの値とを、比較器（コンパレータ）２６ａ〜２６ｄにおいて並列に比較する。そして、もし一致していれば、デコーダ３０に命令を投入するための命令キュー２８の所定位置に、プリフェッチ命令が割り込み挿入される。
【００３０】
データキャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するに際しては、キャッシュミスが発生した命令アドレスを記録し、統計的に処理することで、プリフェッチ処理により充分な効果が得られる命令アドレスを選択することができるようにしておくことが望ましい。
【００３１】
本実施形態においては、キャッシュミスが発生する命令アドレスの統計データを効率的に取得するために、キャッシュミスの発生を計測するカウンタが装備される。すなわち、図２におけるレジスタファイル４０中のイベントカウンタ４２がそのカウンタである。イベントカウンタ４２が、指定された回数だけカウントすると、演算処理装置内部であらかじめ指定されたハンドラが実行される。このような機構を用意することで、キャッシュミスが発生するたびに検出機能が起動されるというオーバヘッドを避けつつ、ソフトウェアによる柔軟なキャッシュミス情報の処理を行うことができる。
【００３２】
起動されたハンドラは、図３に示されるような、命令アドレスごとにキャッシュミスが発生した回数を記憶するテーブルに基づいて、プリフェッチ処理を行うべきか否かを判定する。なお、このテーブルは、メインメモリ上に設けられている。
【００３３】
最適なプリフェッチ距離を判断するために、例えば、１命令あたりの実行サイクル数（Cycle Per Instruction，ＣＰＩ）を仮定し、対象となるシステム構成におけるキャッシュミスペナルティを考慮して、適切なプリフェッチ距離を算出することができる。
【００３４】
しかし、この場合、実行時において対象システム（対象プログラム）のＣＰＩを知ることは一般に難しく、また、それがプリフェッチ対象としている命令付近の実行状況を反映しているとは必ずしも言えない。
【００３５】
そこで、過去に実行が完了した命令の実行履歴を、ある固定された命令数だけ保持しておくテーブルを演算処理装置に備えることが好ましい。この場合、プリフェッチ命令を挿入する際、このテーブルを参照することで、ＣＰＩを仮定するよりも、精度良い挿入アドレスを知ることができる。これにより、プリフェッチによる悪影響を最小限に抑えることができる。
【００３６】
図２に示される実行履歴テーブル５０は、命令実行履歴を保持するテーブルであって、上述のハンドラが、プリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定する際に参照するものである。この実行履歴テーブル５０の構成例が図４に示される。この図に示されるように、テーブル内の各エントリは、命令アドレスと実行命令完了時の時刻（クロック単位）とで構成される。このテーブルは、複数のエントリからなり、最近実行完了した命令から数十命令程度以前の完了情報を保持することができるものである。
【００３７】
キャッシュミスイベント発生時に起動されるハンドラは、プリフェッチ命令を挿入する場合、実行履歴テーブル５０を参照して、挿入位置を決定し、プリフェッチ命令挿入アドレスレジスタ２２ａ〜２２ｄのいずれかにセットする。なお、このハンドラは、レジスタ２２ａ〜２２ｄに対して、一般レジスタと同様にアクセスすることができる。このように、かかるハンドラは、プリフェッチ命令を挿入する際、実行履歴テーブル５０にアクセスすることで、プリフェッチ命令を挿入する位置を精度良く決定することができる。なお、この場合、実行履歴テーブルにアクセスするための命令を追加するか、あるいは、このテーブルをメモリマップする等が必要となる。
【００３８】
データプリフェッチ対象となるメモリアドレス、すなわちプリフェッチ命令のオペランドの決定には、図２中のアドレス予測ユニット６０が使用される。上述のハンドラは、このユニットに対して、予めプリフェッチ処理が行われるべき命令（ロード命令）の命令アドレスを送信する。なお、アドレス予測ユニット６０は、すでに一般的に知られているアドレス予測技術を実装したものである。例えば、特開平4-206917号公報、M.H. Lipasti, et al. “Value Locality and Load Value Prediction” in ASPLOS-VII, 1996、等に開示された技術が利用可能である。
【００３９】
アドレス予測ユニット６０の内部には、アドレス予測テーブルが用意されている。このテーブルの各エントリは、ロード命令アドレス（インデックス）、前回及び前々回にロード対象とされたメモリアドレスが保持されている。このアドレス予測ユニット６０に対して、ロード命令アドレスを送信すると、このユニットは、(1) アドレス予測テーブル内に当該アドレスが存在するか、インデックスとの比較を行い、(2) もしあれば、前回及び前々回のメモリアドレスの差分（ストライド）から次回アクセスされるアドレスを予測する。
【００４０】
以下、実際に簡単なサンプルプログラムを用いてプリフェッチ命令を挿入するシーケンスを例示する。そのサンプルプログラムを図５に示す。このプログラムは、あるプログラム全体から、配列の指定範囲内についてループ演算処理を行う部分のみを切り出したものである。ここでは、特定のアーキテクチャの命令ではなく、擬似命令を用いて記述している。
【００４１】
プログラム中、符号７０で示されるロード命令（ｌｄ）がキャッシュミスを多数発生するロード命令である。なお、このロード命令は、レジスタｒ６に格納された値とレジスタｒ７に格納された値とを加算して得られる値でアドレッシングされるメモリの内容をレジスタｒ１へロードするものである。以下、そのシーケンスを示す。
【００４２】
（１）プログラム実行中、符号７０で示されるロード命令の実行時にキャッシュミスが発生する。このとき、イベントカウンタ４２（図２）がカウントアップされるが、そのカウンタが溢れた場合にはハンドラが起動される。
【００４３】
（２）起動されたハンドラは、前述した図３に示されるテーブルに基づいて、この命令アドレスでキャッシュミスが多数発生していてプリフェッチ処理を行うべき状況に至っているか否かを判定する。
【００４４】
（３）プリフェッチ処理を行う場合、ハンドラは、実行履歴テーブル５０（図４）を参照する。このサンプルプログラムの場合、実行履歴テーブル５０の内容は、図６に示されるようになっている。なお、図６は、実行履歴テーブル５０とともに、対応する命令ストリームをも示している。本システムにおいて、キャッシュミスペナルティが０ｘ６０（１６進表示）プロセッササイクルであった場合、このテーブルから２ループ前のロード命令の前後にプリフェッチ命令を挿入すれば良いことがわかる。
【００４５】
（４）ハンドラは、命令フェッチユニット２０内のプリフェッチ命令挿入アドレスを指定するためのレジスタ２２ａ〜２２ｄの一つにロード命令の命令アドレス（０ｘ０００１００３０）をセットし、同時に、アドレス予測ユニット６０に対してオペランド（メモリアドレス）の生成を指示する。また、何ループ先の予測アドレスを取得したいか（この例の場合、２）も指示する。
【００４６】
（５）アドレス予測ユニット６０は、当該命令アドレスがユニット内のアドレス予測テーブルに存在すれば、当該エントリの前回及び前々回のメモリアドレスの差分を求める。この例の場合、１ループ実行されるたびにａｄｄ命令でレジスタｒ７に３２が加算されていることからわかるように、メモリアドレスの差分は３２バイトとなる。
【００４７】
（６）アドレス予測ユニット６０は、３２（バイト）×２（ループ）先のデータをプリフェッチの対象メモリアドレスとして、命令フェッチユニット２０に送信する。
【００４８】
なお、上記（３）におけるキャッシュミスペナルティ（０ｘ６０サイクル）は、システム構成が変わった場合に変更されるものである。以後、命令フェッチユニット２０は、再度当該ロード命令前後の実行にさしかかった場合、そのアドレスに対するプリフェッチ命令を繰り返し挿入する。このとき、アドレス予測ユニット６０は、その都度プリフェッチ対象となるメモリアドレスの生成を行う。
【００４９】
上述した実施形態においては、演算処理装置における命令フェッチユニット２０（すなわち、図１における制御部）においてプリフェッチ命令の挿入が行われているが、プリフェッチ命令の挿入をキャッシュメモリで行うこともできる。多くの演算処理装置においては、命令ワードを格納するための専用キャッシュメモリ（命令キャッシュ）あるいは、データとともに命令ワードを格納する共有キャッシュメモリが装備されている。このキャッシュメモリ装置内部に、上述したプリフェッチ命令挿入装置を持たせ、制御部からの命令取得要求があったときにプリフェッチ命令を挿入したものを返すようにすることができる。
【００５０】
このようにキャッシュメモリにプリフェッチ挿入機能を持たせることにより、演算処理装置の内部（制御部、演算部）に何ら修正を加えることなく、機能を追加することが可能となる。
【００５１】
ところで、制御部が単一の命令ストリームの制御しか行えない場合（スーパスカラプロセッサ等）においては、ソフトウェアハンドラを実行するときに、一旦、現在実行中のプログラムの実行を中断し、その実行コンテキストを退避した後に当該ハンドラの実行を開始する。また、ハンドラの実行後は、退避した実行コンテキストを復帰させてプログラムの実行を再開する。ハンドラの起動に際しては、以上のようなオーバヘッドが生じる。
【００５２】
一方、ＳＭＴ（Simultaneous Multi-Threading）あるいはＣＭＰ（on Chip Multi Processor）のように、独立した複数の命令流を同時に制御することができるようなアーキテクチャの場合には、ハンドラを主命令流とは並列に実行することで、上述したハンドラの実行に伴うオーバヘッドを削減することができる。
【００５３】
また、上記ＳＭＴ等のアーキテクチャを採用する場合、複数の命令制御部が備えられる。しかし、プロセッサ動作中においては必ずしも全ての命令制御部が稼動しているわけではない。そこで、命令制御部がアイドリングしている場合に、上記ハンドラの実行を行うようにすることで、実行オーバヘッドを削減しつつ、演算処理装置（プロセッサ）の稼働率を向上させることができる。
【００５４】
図７は、ＳＭＴ（Simultaneous Multi-Threading）アーキテクチャを採用するシステムに本発明を適用した例について、その基本的な構成を示す図である。図中、ＤＣはデコーダ、ＡＬＵは算術論理ユニット、ＲＥＧはレジスタである。また、ＳＵはスケジューリングユニットである。また、ＦＰＡは浮動小数点加算器、ＦＰＭは浮動小数点乗算器、ＦＰＤは浮動小数点割算器、ＬＤ／ＳＴはロードストアユニットである。
【００５５】
命令フェッチユニット１２０は、図２に関して述べたと同様に、プリフェッチ命令挿入アドレスを格納するレジスタおよび比較器を備えている。また、各スレッドを制御するためのシーケンサ１２１ａ、１２１ｂ及び１２１ｃは、それぞれ独立したレジスタを備えている。なお、符号１２８ａ、１２８ｂ及び１２８ｃは、命令キューを示す。
【００５６】
かかる構成において、キャッシュミスイベントカウンタ（図示せず）がオーバフローした際に、そのイベントが割り込みとして通知される場合、その割り込みは、ある特定のシーケンサ（例えば、１２１ｃ）にのみ通知される。かくして、キャッシュミス情報を処理するためのハンドラは、ある特定のシーケンサにて実行されることとなる。
【００５７】
主命令流は、その他のシーケンサを用いて実行されるので、ハンドラの実行に際して主命令流の実行は妨げられない。また、この図の場合、シーケンサ毎にレジスタ等の実行コンテキスト（レジスタ）が保持されているので、ハンドラの起動・終了時に退避・復帰処理のオーバヘッドを伴うことがない。
【００５８】
以上、本発明を特にその好ましい実施の形態を参照して詳細に説明した。本発明の容易な理解のため、本発明の具体的な形態を以下に付記する。
【００５９】
（付記１）  予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理装置であって、
キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するプリフェッチ対象選択手段と、
前記プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測するアドレス予測手段と、
前記プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定するプリフェッチ命令挿入位置決定手段と、
前記アドレス予測手段によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、前記プリフェッチ命令挿入位置決定手段によって決定された挿入位置に、挿入するプリフェッチ命令挿入手段と、
を具備する演算処理装置。
【００６０】
（付記２）  前記プリフェッチ対象選択手段は、命令アドレスごとにキャッシュミスが発生する回数を計測するカウンタを備え、該カウンタの値が一定値を超えた場合に、キャッシュミス情報を処理するハンドラを起動して、該ハンドラによってプリフェッチ処理の対象とすべき命令を選択する、付記１に記載の演算処理装置。
【００６１】
（付記３）  前記プリフェッチ命令挿入位置決定手段は、過去に実行が完了した命令列について命令アドレス及び実行完了時刻を保持するテーブルを備え、該テーブルの情報に基づいてプリフェッチ命令の命令列中への挿入位置を決定する、付記１又は付記２に記載の演算処理装置。
【００６２】
（付記４）  前記プリフェッチ対象選択手段、前記プリフェッチ命令挿入位置決定手段、前記アドレス予測手段及び前記プリフェッチ命令挿入手段をキャッシュメモリ内に備える、付記１に記載の演算処理装置。
【００６３】
（付記５）  複数の実行命令流が制御可能であり、前記キャッシュミス情報を処理するハンドラが独立した命令流として主命令流とは独立に実行される、付記３に記載の演算処理装置。
【００６４】
（付記６）  予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理方法であって、
(a) キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するステップと、
(b) ステップ(a)によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測するステップと、
(c) ステップ(a)によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定するステップと、
(d) ステップ(b)によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、ステップ(c)によって決定された挿入位置に、挿入するステップと、
を具備する演算処理方法。
【００６５】
（付記７）  ステップ(a)は、命令アドレスごとにキャッシュミスが発生する回数を計測し、該回数が一定値を超えた場合に、キャッシュミス情報を処理するハンドラを起動して、該ハンドラによってプリフェッチ処理の対象とすべき命令を選択する、付記６に記載の演算処理方法。
【００６６】
（付記８）  ステップ(c)は、過去に実行が完了した命令列について命令アドレス及び実行完了時刻を保持するテーブルを備え、該テーブルの情報に基づいてプリフェッチ命令の命令列中への挿入位置を決定する、付記６又は付記７に記載の演算処理方法。
【００６７】
（付記９）  複数の実行命令流を制御可能であり、前記キャッシュミス情報を処理するハンドラを独立した命令流として主命令流とは独立に実行させるステップを更に具備する、付記８に記載の演算処理方法。
【００６８】
【発明の効果】
以上説明したように、本発明によれば、キャッシュメモリを備えた演算処理装置において、実行時情報に基づいてプリフェッチ命令を命令ストリーム中に挿入することにより、従来のプリフェッチ方式に伴うキャッシュ汚染等の問題を最小限に抑制しつつ効率的にプリフェッチを実行することが可能となる。
【図面の簡単な説明】
【図１】本発明によりプリフェッチ命令の挿入処理を行う演算処理装置の動作の概要を説明するための図である。
【図２】本発明による演算処理装置の一構成例を示す図である。
【図３】命令アドレスごとにキャッシュミスが発生した回数を記憶するテーブルの構成を示す図である。
【図４】実行履歴テーブルの構成を示す図である。
【図５】サンプルプログラムを示す図である。
【図６】サンプルプログラムを実行するときの実行履歴テーブルの内容を命令ストリームとともに示す図である。
【図７】ＳＭＴアーキテクチャを採用するシステムに本発明を適用した例について、その基本的な構成を示す図である。
【符号の説明】
１０…メインメモリ
１２…命令キャッシュ
１４…データキャッシュ
２０…命令フェッチユニット
２２ａ〜２２ｄ…プリフェッチ命令挿入アドレスレジスタ
２４…プログラムカウンタ（ＰＣ）
２６ａ〜２６ｄ…比較器（コンパレータ）
２８…命令キュー
３０…デコーダ
３２…分岐命令処理ユニット
３４…算術命令処理ユニット
３６…ロード／ストア命令処理ユニット
４０…レジスタファイル
４２…イベントカウンタ
５０…実行履歴テーブル
６０…アドレス予測ユニット
１２０…命令フェッチユニット
１２１ａ，１２１ｂ，１２１ｃ…シーケンサ
１２８ａ，１２８ｂ，１２８ｃ…命令キュー
【図１】
0004030314.tif 000002
【図２】
0004030314.tif 000003
【図３】
0004030314.tif 000004
【図４】
0004030314.tif 000005
【図５】
0004030314.tif 000006
【図６】
0004030314.tif 000007
【図７】
0004030314.tif 000008