(57)【特許請求の範囲】
【請求項１】
主記憶装置に接続する演算処理装置において、
データを保持するキャッシュメモリと、
前記主記憶装置に対するメモリアクセスを実行する演算部と、
前記主記憶装置から前記キャッシュメモリにデータを保持させるプリフェッチを実行する制御部と、
ループ文に含まれる展開対象命令が展開された複数の展開後命令がそれぞれ実行される場合、前記制御部がプリフェッチを実行するかを判定する際に参照され、各展開後命令に応じて一定のアドレス間隔で実行される各メモリアクセスにそれぞれ対応する予測情報を、複数の領域にそれぞれ記憶する予測情報記憶部と、
前記展開対象命令が前記複数の展開後命令に展開された場合、展開された展開後命令の数に対応する展開数情報を格納する展開数格納部と、
前記複数の展開後命令がそれぞれ実行される場合、前記展開数情報に基づいて、前記予測情報記憶部の複数の領域にそれぞれ記憶された複数の予測情報を一つに集約した集約予測情報を、前記複数の領域のいずれかに格納する集約部と、
を有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記予測情報記憶部の複数の領域は、前記予測情報を更新する際に使用されるストライド値をさらに格納し、
前記集約部は、前記集約予測情報を更新する際に使用するストライド値を、前記複数の展開後命令のうちのいずれかに応じて繰り返し実行されたメモリアクセスのアドレス間隔と、前記展開数情報とに基づいて算出し、算出したストライド値を、前記複数の領域のうち、前記集約予測情報が格納される領域に格納する算出部を有することを特徴とする演算処理装置。
【請求項３】
請求項２に記載の演算処理装置において、
前記演算部は、メモリアクセスを実行する際に、メモリアクセスを実行するメモリアクセス命令の格納先を示すプログラムカウンタ値および前記メモリアクセス命令でアクセスされるデータの格納先を示すアクセスアドレスを前記集約部に出力し、
前記複数の領域のそれぞれに格納される前記予測情報は、前記アクセスアドレスと比較される参照アドレスを含み、
前記複数の領域のそれぞれは、前記プログラムカウンタ値と比較される参照プログラムカウンタ値と、メモリアクセスのいずれかに対応して割り当てられている登録状態かを示すエントリ情報をさらに格納し、
前記集約部は、前記複数の領域から、前記アクセスアドレスに一致する前記参照アドレスが格納された第１の領域と、前記プログラムカウンタ値に一致する前記参照プログラムカウンタ値が格納され、前記第１の領域と異なる第２の領域とを検出した場合、前記第２の領域に格納された前記エントリ情報を、前記登録状態でないことを示す未登録状態に設定する管理部を有する
ことを特徴とする演算処理装置。
【請求項４】
データを保持するキャッシュメモリと、主記憶装置から前記キャッシュメモリにデータを保持させるプリフェッチを実行する制御部と、ループ文に含まれる展開対象命令が展開された複数の展開後命令がそれぞれ実行される場合、前記制御部がプリフェッチを実行するかを判定する際に参照され、各展開後命令に応じて一定のアドレス間隔で実行される各メモリアクセスにそれぞれ対応する予測情報を、複数の領域にそれぞれ記憶する予測情報記憶部と、前記展開対象命令が前記複数の展開後命令に展開された場合、展開された展開後命令の数に対応する展開数情報を格納する展開数格納部とを有し、前記主記憶装置に接続する演算処理装置の制御方法において、
前記演算処理装置が有する演算部が、前記主記憶装置に対するメモリアクセスを実行し、
前記演算処理装置が有する集約部が、前記複数の展開後命令がそれぞれ実行される場合、前記展開数情報に基づいて、前記予測情報記憶部の複数の領域にそれぞれ記憶された複数の予測情報を一つに集約した集約予測情報を、前記複数の領域のいずれかに格納する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等の演算処理装置は、演算を実行する演算部と、演算部と主記憶装置との間に配置されたキャッシュメモリとを有する。演算部は、主記憶装置またはキャッシュメモリに記憶されたデータを参照して、演算を実行する。キャッシュメモリは、主記憶装置のデータの一部を記憶する。
【０００３】
演算処理装置は、演算処理装置と同一の半導体装置の内部にあり、同一のクロックで動作するキャッシュメモリに記憶されたデータを参照することにより、主記憶装置に記憶されたデータを参照する場合に比べて、データを参照するときの待ち時間を短縮できる。なお、配列等の大規模なデータを使用する数値計算処理において、データの局所性（例えば、一度参照されたデータが再度参照される可能性）が低い場合、キャッシュメモリのヒット率は低下する。キャッシュミスが発生した場合、演算処理装置がデータを参照するときの待ち時間は、キャッシュヒットした場合に比べて、主記憶装置からキャッシュメモリにデータが転送されるまでの時間分増加する。
【０００４】
キャッシュメモリのヒット率の低下を抑制する手法として、主記憶装置に記憶されたデータをキャッシュメモリに予めフェッチすることにより、必要なデータを事前に登録しておくプリフェッチが用いられる（例えば、特許文献１−２参照）。プリフェッチの実現方法として、ハードウェアによるハードウェアプリフェッチと、ソフトウェアによるソフトウェアプリフェッチとが知られている。
【０００５】
ハードウェアプリフェッチでは、所定のアドレス間隔（以下、ストライド値とも称する）で実行されるメモリアクセスのストライド値を記憶するストライド予測テーブルを用いてプリフェッチを実行する方法が提案されている（例えば、特許文献３参照）。この種のハードウェアプリフェッチでは、ループ文で定義されたループ内の命令が展開された場合、展開された命令の数（以下、展開数とも称する）のストライド予測テーブルが使用される。
【０００６】
ループ文で定義されたループ内の命令の展開は、ループ内の命令を展開せずに実行するときに比べてプログラムの実行速度を高速にするために、プログラムのコンパイル時等に実行される。なお、ソフトウェアプリフェッチでは、プリフェッチ命令を挿入する位置をループの展開数に応じて決定する方法が提案されている（例えば、特許文献４参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−１６６９８９号公報
【特許文献２】特表２００６−５２４３７５号公報
【特許文献３】特表２００６−５１６１６８号公報
【特許文献４】特開平７−３０６７９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ループ文で定義されたループ内の命令が展開され、展開数分のストライド予測テーブルが使用される場合、ループ内の展開された命令に対応するメモリアクセス以外のメモリアクセスが使用できるストライド予測テーブルの数が減少する。このため、ハードウェアプリフェッチが適用されないメモリアクセスが増加し、演算処理装置の性能が低下する。
【０００９】
１つの側面では、本件開示の演算処理装置および演算処理装置の制御方法は、演算処理装置の性能を向上することを目的とする。
【課題を解決するための手段】
【００１０】
一観点によれば、主記憶装置に接続する演算処理装置は、データを保持するキャッシュメモリと、主記憶装置に対するメモリアクセスを実行する演算部と、主記憶装置からキャッシュメモリにデータを保持させるプリフェッチを実行する制御部と、ループ文に含まれる展開対象命令が展開された複数の展開後命令がそれぞれ実行される場合、制御部がプリフェッチを実行するかを判定する際に参照され、各展開後命令に応じて一定のアドレス間隔で実行される各メモリアクセスにそれぞれ対応する予測情報を、複数の領域にそれぞれ記憶する予測情報記憶部と、展開対象命令が複数の展開後命令に展開された場合、展開された展開後命令の数に対応する展開数情報を格納する展開数格納部と、複数の展開後命令がそれぞれ実行される場合、展開数情報に基づいて、予測情報記憶部の複数の領域にそれぞれ記憶された複数の予測情報を一つに集約した集約予測情報を、複数の領域のいずれかに格納する集約部とを有する。
【００１１】
別の観点によれば、データを保持するキャッシュメモリと、主記憶装置からキャッシュメモリにデータを保持させるプリフェッチを実行する制御部と、ループ文に含まれる展開対象命令が展開された複数の展開後命令がそれぞれ実行される場合、制御部がプリフェッチを実行するかを判定する際に参照され、各展開後命令に応じて一定のアドレス間隔で実行される各メモリアクセスにそれぞれ対応する予測情報を、複数の領域にそれぞれ記憶する予測情報記憶部と、展開対象命令が複数の展開後命令に展開された場合、展開された展開後命令の数に対応する展開数情報を格納する展開数格納部とを有し、主記憶装置に接続する演算処理装置の制御方法では、演算処理装置が有する演算部が、主記憶装置に対するメモリアクセスを実行し、演算処理装置が有する集約部が、複数の展開後命令がそれぞれ実行される場合、展開数情報に基づいて、予測情報記憶部の複数の領域にそれぞれ記憶された複数の予測情報を一つに集約した集約予測情報を、複数の領域のいずれかに格納する。
【発明の効果】
【００１２】
本件開示の演算処理装置および演算処理装置の制御方法は、演算処理装置の性能を向上できる。
【図面の簡単な説明】
【００１３】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図３】図２に示した集約部とストライド予測テーブルの一例を示す図である。
【図４】図３に示した管理部の一例を示す図である。
【図５】図２に示した演算処理装置の動作の一例を示す図である。
【発明を実施するための形態】
【００１４】
以下、実施形態について、図面を用いて説明する。図に示す破線の矢印は、データ等の信号の流れを示す。
【００１５】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。この実施形態の演算処理装置１００は、例えば、主記憶装置２００に記憶されたデータをキャッシュメモリ２０に転送するプリフェッチを実行するＣＰＵ（Central Processing Unit）等のプロセッサである。主記憶装置２００には、演算処理装置１００により実行される機械語プログラム、演算処理装置１００による演算で使用されるデータ、演算結果等が記憶される。機械語プログラムは、コンパイラ装置がソースプログラムをコンパイルすることにより生成される。
【００１６】
プリフェッチの実現方法として、ハードウェアによるハードウェアプリフェッチが用いられる。ハードウェアプリフェッチは、演算処理装置１００に内蔵されたハードウェアプリフェッチ制御部等のハードウェアで実行される。例えば、演算処理装置１００の制御部６０は、主記憶装置２００からキャッシュメモリ２０にデータを保持させるプリフェッチを実行する。なお、プリフェッチの実現方法として、ソフトウェアによるソフトウェアプリフェッチと、ハードウェアプリフェッチとの両方が用いられてもよい。
【００１７】
演算処理装置１００は、演算部１０、キャッシュメモリ２０、集約部３０、展開数格納部４０、予測情報記憶部５０および制御部６０を有する。演算部１０は、主記憶装置２００およびキャッシュメモリ２０等に記憶されたデータを参照して演算を実行する。このため、演算部１０は、主記憶装置２００との間でデータＤ１０を転送するメモリアクセスを実行する。
【００１８】
例えば、演算部１０は、実行対象のメモリアクセスを実行するメモリアクセス命令（ロード命令、ストア命令等）が格納されたアドレスを示すプログラムカウンタ値ＰＣｉｎｓを、キャッシュメモリ２０および集約部３０に出力する。以下、プログラムカウンタ値は、ＰＣ（program counter）値とも称される。また、演算部１０は、メモリアクセス命令でアクセスされるデータの格納先を示すアクセスアドレスＡＤＲｉｎｓを、キャッシュメモリ２０および集約部３０に出力する。
【００１９】
キャッシュメモリ２０は、命令を記憶する命令キャッシュおよびデータを記憶するデータキャッシュを有する。なお、命令キャッシュは、データキャッシュを含むキャッシュメモリ２０とは別に設けられてもよい。キャッシュメモリ２０は、演算部１０と主記憶装置２００との間に配置され、演算部１０により参照された主記憶装置２００のデータを記憶する。また、キャッシュメモリ２０は、プリフェッチにより主記憶装置２００から転送されたデータを記憶する。
【００２０】
キャッシュメモリ２０と演算部１０間でのデータのアクセスは、主記憶装置２００と演算部１０間でのデータのアクセスに比べて、高速に実行される。したがって、演算部１０は、キャッシュメモリ２０に記憶されたデータを参照することにより、主記憶装置２００に記憶されたデータを参照するときに比べて、データを参照するときの待ち時間を短縮できる。
【００２１】
予測情報記憶部５０は、例えば、演算処理装置１００に内蔵されたメモリに割り当てられる。予測情報記憶部５０の複数の領域５２（５２ａ、５２ｂ、・・・）のそれぞれは、プリフェッチを実行するか判定する際に参照される予測情報を格納し、一定のアドレス間隔で実行されるメモリアクセスに対応して確保される。例えば、ｉバイト（ｉは正の整数）のアドレス間隔で実行されるメモリアクセスが発生した場合、ｉバイトのアドレス間隔で実行されるメモリアクセスに対して予測情報記憶部５０の複数の領域５２の１つが割り当てられる。すなわち、予測情報記憶部５０は、一定のアドレス間隔で実行される各メモリアクセスにそれぞれ対応する予測情報を、複数の領域５２にそれぞれ記憶する。
【００２２】
そして、演算処理装置１００に内蔵されたハードウェアプリフェッチ制御部等が、プリフェッチを実行するか判定する際に、予測情報記憶部５０に格納された予測情報を参照する。例えば、メモリアクセス命令でアクセスされるアクセスアドレスＡＤＲｉｎｓと、予測情報記憶部５０に格納された予測情報（プリフェッチが実行されるタイミングに対応するアドレス等）とに基づいて、プリフェッチを実行するか判定される。
【００２３】
展開数格納部４０は、ループ文で定義されたループ内の命令が複数の命令に展開された場合、展開された命令の数に対応する展開数ＵＮＲＬを格納する。例えば、コンパイラ装置がソースプログラムをコンパイルして機械語プログラムを生成するときにループ文で定義されたループ内の命令を展開した場合、展開数ＵＮＲＬを展開数格納部４０に格納する命令を含む機械語プログラムが生成される。そして、コンパイラ装置により生成された機械語プログラムが演算処理装置１００で実行されることにより、展開数ＵＮＲＬが展開数格納部４０に格納される。以下、“ループ文で定義されたループ内の命令が複数の命令に展開される”ことは、単に“ループが展開される”とも称される。
【００２４】
集約部３０は、アクセスアドレスＡＤＲｉｎｓおよびプログラムカウンタ値ＰＣｉｎｓを演算部１０から受け、展開数ＵＮＲＬを展開数格納部４０から受ける。そして、集約部３０は、アクセスアドレスＡＤＲｉｎｓ、プログラムカウンタ値ＰＣｉｎｓおよび展開数ＵＮＲＬに基づいて、予測情報記憶部５０の状態を管理する。
【００２５】
また、集約部３０は、ループが展開され、展開された複数の命令が実行された場合、展開された複数の命令に応じてそれぞれ実行されるメモリアクセスにそれぞれ対応する予測情報を、展開数ＵＮＲＬ等に基づいて、共通の予測情報に集約する。以下、共通の予測情報は、集約予測情報とも称される。
【００２６】
集約部３０は、展開数ＵＮＲＬ等に基づいて集約した集約予測情報を、予測情報記憶部５０の複数の領域５２のいずれかに格納する。例えば、集約部３０は、展開数格納部４０から展開数ＵＮＲＬを受けた後に実行されるメモリアクセスを、展開数ＵＮＲＬで展開されたループ内の複数の命令に応じてそれぞれ実行されるメモリアクセスと判定する。
【００２７】
そして、集約部３０は、ループ内の展開された複数（展開数ＵＮＲＬ）の命令に応じてそれぞれ実行されるメモリアクセスを一連のメモリアクセスとしたときのアドレス間隔を、展開数ＵＮＲＬおよびアクセスアドレスＡＤＲｉｎｓ等に基づいて算出する。そして、集約部３０は、算出したアドレス間隔を、予測情報記憶部５０の複数の領域５２のうち、集約予測情報が格納される領域５２に格納する。
【００２８】
予測情報記憶部５０の各領域５２に格納されたアドレス間隔は、予測情報記憶部５０の各領域５２に格納された予測情報を更新する際に使用される。例えば、集約部３０は、予測情報記憶部５０の領域５２に格納されたアドレス間隔（展開数ＵＮＲＬ等に基づいて算出したアドレス間隔）に基づいて、予測情報記憶部５０の領域５２に格納された予測情報を更新する。
【００２９】
予測情報記憶部５０の領域５２に格納された予測情報は、ループ内の展開された複数の命令にそれぞれ対応するメモリアクセスを一連のメモリアクセスとしたときのアドレス間隔に基づいて更新されるため、展開された複数の命令に対応するメモリアクセスで共有される。すなわち、ループ内の展開された複数の命令に応じてそれぞれ実行されるメモリアクセスにそれぞれ対応する予測情報が、集約予測情報に集約される。
【００３０】
ここで、例えば、配列Ａ［ｉ］にアクセスする命令を含むループ（ｉ＝０、１、２、３、４、５）が、配列Ａ［ｉ］、配列Ａ［ｉ＋１］、配列Ａ［ｉ＋２］にアクセスする３つの命令を含むループ（ｉ＝０、３）に展開された場合について説明する。集約部３０が省かれた演算処理装置は、配列Ａ［ｉ］と配列Ａ［ｉ＋１］と配列Ａ［ｉ＋２］とをそれぞれ異なる配列データ（ストリーム）と判定する。
【００３１】
このため、集約部３０が省かれた演算処理装置で、配列Ａ［ｉ］、配列Ａ［ｉ＋１］、配列Ａ［ｉ＋２］に対応するプリフェッチを実行するためには、配列Ａ［ｉ］、配列Ａ［ｉ＋１］、配列Ａ［ｉ＋２］にそれぞれ対応する３つの予測情報が必要である。この場合、集約部３０が省かれた演算処理装置では、予測情報記憶部５０は、少なくとも３つの領域５２を有する。
【００３２】
このように、集約部３０が省かれた演算処理装置は、ループの展開数（上述の例では、３）と同じ数の領域５２を予測情報記憶部５０に割り当てる。このため、例えば、演算処理装置が有する予測情報記憶部５０の領域５２の数が１つで、ループの展開数が３の場合、展開された３つの命令のうち、２つの命令に対応するメモリアクセスでは、ハードウェアプリフェッチが適用されない。
【００３３】
これに対し、集約部３０は、配列Ａ［ｉ］と配列Ａ［ｉ＋１］と配列Ａ［ｉ＋２］とにそれぞれ対応する３つの予測情報を、１つの集約予測情報に集約する。例えば、集約部３０は、配列Ａ［ｉ］に対するアクセスと配列Ａ［ｉ＋１］に対するアクセスと配列Ａ［ｉ＋２］に対するアクセスとを含めた一連のメモリアクセスのアドレス間隔を算出する。そして、集約部３０は、算出したアドレス間隔を予測情報記憶部５０の領域５２（例えば、領域５２ａ）に格納する。また、集約部３０は、予測情報記憶部５０の領域５２に格納されたアドレス間隔に基づいて、予測情報記憶部５０の領域５２に格納された予測情報を更新する。
【００３４】
すなわち、予測情報記憶部５０の領域５２に格納された予測情報は、配列Ａ［ｉ］、配列Ａ［ｉ＋１］、配列Ａ［ｉ＋２］にそれぞれ対応するメモリアクセスを一連のメモリアクセスとしたときのアドレス間隔に基づいて更新される。このため、予測情報記憶部５０の領域５２に格納された予測情報は、配列Ａ［ｉ］、配列Ａ［ｉ＋１］、配列Ａ［ｉ＋２］にそれぞれ対応するメモリアクセスで共有される。
【００３５】
例えば、演算処理装置１００が有する予測情報記憶部５０の領域５２の数が１つで、ループの展開数が３の場合でも、展開された３つの命令で１つの集約予測情報が使用される。このため、演算処理装置１００は、３つの命令に対応するメモリアクセスに対して、ハードウェアプリフェッチを適用できる。この結果、演算処理装置１００の性能を向上させることができる。
【００３６】
なお、演算処理装置１００の構成は、この例に限定されない。例えば、演算処理装置１００は、２つ以上の予測情報記憶部５０を有してもよい。また、例えば、予測情報記憶部５０の領域５２の数は、１つでもよいし、２つ以上でもよい。
【００３７】
例えば、演算処理装置１００が有する予測情報記憶部５０の領域５２の数が３つで、ループの展開数が３の場合、展開された３つの命令に予測情報記憶部５０の１つの領域５２が割り当てられる。このため、予測情報記憶部５０の残りの２つの領域５２は、他のメモリアクセスで使用可能である。すなわち、展開されたループ以外のメモリアクセスに予測情報記憶部５０の２つの領域５２を割り当てることができる。このため、展開されたループ以外のメモリアクセスでハードウェアプリフェッチを実行させることができ、演算処理装置１００の性能を向上させることができる。
【００３８】
以上、図１に示した実施形態では、集約部３０は、ループ内の展開された複数の命令でそれぞれ実行されるメモリアクセスに対応する複数（展開数分）の予測情報を、集約予測情報に集約する。これにより、演算処理装置１００は、ループ内の展開された複数の命令に対応して割り当てる予測情報記憶部５０の領域５２の数を、集約部３０が省かれた演算処理装置に比べて、少なくできる。この結果、予測情報記憶部５０を有効に使用することができ、演算処理装置１００の性能を向上させることができる。
【００３９】
図２は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。なお、図２では、図を見やすくするために、ハードウェアプリフェッチ制御部ＨＷＰＦ内の信号線のうち、集約部ＣＯＤに関連する信号線以外の信号線の記載を省略している。
【００４０】
演算処理装置ＯＰＤは、主記憶装置ＭＭＥＭに記憶されたデータをキャッシュメモリＣＭＥＭに転送するプリフェッチを実行するＣＰＵ等のプロセッサである。なお、主記憶装置ＭＭＥＭは、図１に示した主記憶装置２００と同一または同様である。
【００４１】
演算処理装置ＯＰＤは、演算部ＯＰＵ、キャッシュメモリＣＭＥＭ、ハードウェアプリフェッチ制御部ＨＷＰＦ、レジスタＲＥＧおよびメモリＭＥＭを有する。また、ハードウェアプリフェッチ制御部ＨＷＰＦは、集約部ＣＯＤを有する。メモリＭＥＭには、複数のストライド予測テーブルＳＰＴ（ＳＰＴ１、ＳＰＴ２、・・・ＳＰＴｎ）が割り当てられる。
【００４２】
演算部ＯＰＵおよびキャッシュメモリＣＭＥＭは、図１に示した演算部１０およびキャッシュメモリ２０と同一または同様である。例えば、演算部ＯＰＵは、メモリアクセスを実行する際に、プログラムカウンタ値ＰＣｉｎｓおよびアクセスアドレスＡＤＲｉｎｓをキャッシュメモリＣＭＥＭおよびハードウェアプリフェッチ制御部ＨＷＰＦに出力する。プログラムカウンタ値ＰＣｉｎｓは、メモリアクセス命令（ロード命令、ストア命令等）の格納先（アドレス）を示す情報であり、アクセスアドレスＡＤＲｉｎｓは、メモリアクセス命令でアクセスされるデータの格納先（アドレス）を示す情報である。
【００４３】
これにより、ハードウェアプリフェッチ制御部ＨＷＰＦ内に設けられた集約部ＣＯＤは、プログラムカウンタ値ＰＣｉｎｓおよびアクセスアドレスＡＤＲｉｎｓを演算部ＯＰＵから受ける。
【００４４】
また、キャッシュメモリＣＭＥＭは、キャッシュミスが発生した場合、キャッシュミスが発生したことを示す情報ＣＩＮＦをハードウェアプリフェッチ制御部ＨＷＰＦに出力する。
【００４５】
レジスタＲＥＧは、展開数を格納する展開数格納部の一例である。メモリＭＥＭは、複数の予測情報を複数の領域にそれぞれ記憶する予測情報記憶部の一例である。すなわち、ストライド予測テーブルＳＰＴは、予測情報を格納する予測情報記憶部の領域の一例である。レジスタＲＥＧ、メモリＭＥＭおよびストライド予測テーブルＳＰＴは、図１に示した展開数格納部４０、予測情報記憶部５０および予測情報記憶部５０の領域５２と同一または同様である。
【００４６】
ハードウェアプリフェッチ制御部ＨＷＰＦは、ストライド予測テーブルＳＰＴに基づいて、プリフェッチを実行する。例えば、ハードウェアプリフェッチ制御部ＨＷＰＦは、アクセスアドレスＡＤＲｉｎｓ等を演算部ＯＰＵから受ける度に、ストライド予測テーブルＳＰＴに登録された予測情報に基づいて、プリフェッチを実行するか判定する。そして、ハードウェアプリフェッチ制御部ＨＷＰＦは、プリフェッチを実行すると判定した場合、プリフェッチでアクセスするアドレス等を含む制御信号ＰＣＮＴをキャッシュメモリＣＭＥＭに出力し、プリフェッチを実行する。
【００４７】
集約部ＣＯＤは、図１に示した集約部３０と同一または同様である。例えば、集約部ＣＯＤは、プログラムカウンタ値ＰＣｉｎｓおよびアクセスアドレスＡＤＲｉｎｓを演算部ＯＰＵから受け、情報ＣＩＮＦをキャッシュメモリＣＭＥＭから受け、展開数ＵＮＲＬをレジスタＲＥＧから受ける。そして、集約部ＣＯＤは、プログラムカウンタ値ＰＣｉｎｓ、アクセスアドレスＡＤＲｉｎｓ、情報ＣＩＮＦおよび展開数ＵＮＲＬに基づいて、ストライド予測テーブルＳＰＴの状態を管理する。
【００４８】
例えば、集約部ＣＯＤは、ループ内の展開された命令で実行されるメモリアクセスに対応して割り当てられた複数（展開数分）のストライド予測テーブルＳＰＴの予測情報を、共通のストライド予測テーブルＳＰＴの予測情報に集約する。例えば、集約部ＣＯＤは、ループ内の展開された複数の命令に応じてそれぞれ実行されるメモリアクセスにそれぞれ対応する予測情報を、共通の予測情報に集約し、集約した予測情報（共通の予測情報）を共通のストライド予測テーブルＳＰＴに登録する。
【００４９】
なお、演算処理装置ＯＰＤの構成は、この例に限定されない。例えば、集約部ＣＯＤは、ハードウェアプリフェッチ制御部ＨＷＰＦの外部に設けられてもよい。また、ストライド予測テーブルＳＰＴは、１つでもよい。
【００５０】
図３は、図２に示した集約部ＣＯＤとストライド予測テーブルＳＰＴの一例を示す。なお、図３では、図を見やすくするために、集約部ＣＯＤ内の信号線のうち、算出部ＣＡＬに関連する信号線以外の信号線の記載を省略している。先ず、ストライド予測テーブルＳＰＴ１について説明する。なお、ストライド予測テーブルＳＰＴ１以外のストライド予測テーブルＳＰＴの構成は、ストライド予測テーブルＳＰＴ１と同一または同様である。このため、図３では、ストライド予測テーブルＳＰＴ１以外のストライド予測テーブルＳＰＴの記載を省略している。
【００５１】
ストライド予測テーブルＳＰＴ１は、参照アドレスＡＤＲｒｅｆ、ストライド値ＳＴＲＤ、参照プログラムカウンタ値ＰＣｒｅｆ、フラグＳＴＶＡＬ、ＥＮＶＡＬ等を記憶する領域を有する。参照アドレスＡＤＲｒｅｆは、予測情報に含まれる。すなわち、ストライド予測テーブルＳＰＴ１には、参照アドレスＡＤＲｒｅｆを含む予測情報が格納される。なお、予測情報は、参照アドレスＡＤＲｒｅｆのみを含んでもよいし、参照アドレスＡＤＲｒｅｆと参照アドレスＡＤＲｒｅｆ以外の情報（例えば、参照プログラムカウンタ値ＰＣｒｅｆ）とを含んでもよい。
【００５２】
参照アドレスＡＤＲｒｅｆは、アクセスアドレスＡＤＲｉｎｓと比較されるアドレスである。例えば、参照アドレスＡＤＲｒｅｆと同じアドレスにアクセスするメモリアクセスが実行されたことを契機として、プリフェッチが実行される。
【００５３】
ストライド値ＳＴＲＤは、参照アドレスＡＤＲｒｅｆを更新する際に使用される値である。例えば、参照アドレスＡＤＲｒｅｆは、参照アドレスＡＤＲｒｅｆと同じアドレスにアクセスするメモリアクセスが実行される度に、ストライド値ＳＴＲＤをアクセスアドレスＡＤＲｉｎｓに加算した値に更新される。参照プログラムカウンタ値ＰＣｒｅｆは、プログラムカウンタ値ＰＣｉｎｓと比較される値である。
【００５４】
フラグＳＴＶＡＬは、ストライド値ＳＴＲＤが有効かを示すフラグである。例えば、フラグＳＴＶＡＬが論理値“１”に設定されている場合、ストライド予測テーブルＳＰＴ１のストライド値ＳＴＲＤは有効である。すなわち、フラグＳＴＶＡＬが論理値“０”に設定されている場合、ストライド予測テーブルＳＰＴ１のストライド値ＳＴＲＤは無効である。
【００５５】
フラグＥＮＶＡＬは、ストライド予測テーブルＳＰＴ１がメモリアクセスのいずれかに対応して割り当てられている登録状態かを示すエントリ情報の一例である。例えば、ストライド予測テーブルＳＰＴ１がメモリアクセスのいずれかに対応して割り当てられている登録状態である場合、フラグＥＮＶＡＬは、論理値“１”に設定される。また、ストライド予測テーブルＳＰＴ１が登録状態でない場合（例えば、ストライド予測テーブルＳＰＴ１がメモリアクセスのいずれにも対応していない場合）、フラグＥＮＶＡＬは、登録状態でないことを示す未登録状態（例えば、論理値“０”）に設定される。
【００５６】
集約部ＣＯＤは、算出部ＣＡＬおよび管理部ＣＯＮＴを有する。算出部ＣＡＬは、プログラムカウンタ値ＰＣｉｎｓ、アクセスアドレスＡＤＲｉｎｓ、参照アドレスＡＤＲｒｅｆおよび展開数ＵＮＲＬに基づいて、ストライド値ＳＴＲＤを算出する。ストライド値ＳＴＲＤを算出する契機等は、図５で説明する。算出部ＣＡＬは、例えば、差分算出部ＣＡＬＤＦおよびストライド算出部ＣＡＬＳＴを有する。
【００５７】
差分算出部ＣＡＬＤＦは、例えば、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴから参照アドレスＡＤＲｒｅｆを受ける。また、差分算出部ＣＡＬＤＦは、演算部ＯＰＵからアクセスアドレスＡＤＲｉｎｓを受ける。
【００５８】
例えば、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとが一致する場合、差分算出部ＣＡＬＤＦは、ストライド予測テーブルＳＰＴ１から参照アドレスＡＤＲｒｅｆを読み出す。そして、差分算出部ＣＡＬＤＦは、アクセスアドレスＡＤＲｉｎｓから参照アドレスＡＤＲｒｅｆを減算してアドレス差分ＡＤＲｄｉｆを算出する。
【００５９】
なお、アドレス差分ＡＤＲｄｉｆを算出する際に使用される参照アドレスＡＤＲｒｅｆは、図５で説明するように、新規に登録された参照アドレスＡＤＲｒｅｆ（ストライド値ＳＴＲＤに基づいて更新される前の参照アドレスＡＤＲｒｅｆ）である。
【００６０】
ストライド算出部ＣＡＬＳＴは、差分算出部ＣＡＬＤＦからアドレス差分ＡＤＲｄｉｆを受け、レジスタＲＥＧから展開数ＵＮＲＬを受ける。そして、ストライド算出部ＣＡＬＳＴは、アドレス差分ＡＤＲｄｉｆを展開数ＵＮＲＬで除算してストライド値ＳＴＲＤを算出する。算出されたストライド値ＳＴＲＤは、例えば、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴに登録される。
【００６１】
例えば、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとが一致する場合、ストライド算出部ＣＡＬＳＴは、算出したストライド値ＳＴＲＤをストライド予測テーブルＳＰＴ１に登録する。なお、ストライド算出部ＣＡＬＳＴは、有効な展開数ＵＮＲＬがレジスタＲＥＧに格納されていない場合、アドレス差分ＡＤＲｄｉｆをストライド値ＳＴＲＤとして、ストライド予測テーブルＳＰＴ１に登録してもよい。
【００６２】
このように、算出部ＣＡＬは、ループ内の展開された複数（展開数ＵＮＲＬ）の命令に応じてそれぞれ実行されるメモリアクセスを一連のメモリアクセスとしたときのアドレス間隔（ストライド値ＳＴＲＤ）を算出できる。これにより、ループ内の展開された複数（展開数ＵＮＲＬ）の命令に応じてそれぞれ実行されるメモリアクセスに共通のストライド予測テーブルＳＰＴを割り当てることができる。すなわち、ループ内の展開された複数（展開数ＵＮＲＬ）の命令に対応して割り当てられた複数（展開数ＵＮＲＬ分）のストライド予測テーブルＳＰＴの予測情報を、共通のストライド予測テーブルＳＰＴの予測情報に集約することができる。この結果、ストライド予測テーブルＳＰＴを有効に使用することができる。
【００６３】
管理部ＣＯＮＴは、プログラムカウンタ値ＰＣｉｎｓ、アクセスアドレスＡＤＲｉｎｓ、参照プログラムカウンタ値ＰＣｒｅｆおよび参照アドレスＡＤＲｒｅｆに基づいて、フラグＥＮＶＡＬを未登録状態にリセットする。例えば、管理部ＣＯＮＴは、ループ内の展開された複数の命令に対応して割り当てられた複数のストライド予測テーブルＳＰＴのうち、共通のストライド予測テーブルＳＰＴ以外のストライド予測テーブルＳＰＴのフラグＥＮＶＡＬを未登録状態にリセットする。管理部ＣＯＮＴの構成は、図４で説明する。なお、集約部ＣＯＤの構成は、この例に限定されない。
【００６４】
図４は、図３に示した管理部ＣＯＮＴの一例を示す。管理部ＣＯＮＴは、複数の比較部ＡＣＭＰと、複数の比較部ＰＣＭＰと、複数のインバータＩＮＶと、複数の論理積回路ＡＮＤａと、複数の論理積回路ＡＮＤｂと、論理和回路ＯＲとを有する。比較部ＡＣＭＰ、ＰＣＭＰ、インバータＩＮＶ、論理積回路ＡＮＤａ、ＡＮＤｂの符号の末尾の数字および“ｎ”は、ストライド予測テーブルＳＰＴの符号の末尾の数字および“ｎ”に対応する。
【００６５】
比較部ＡＣＭＰ１、ＡＣＭＰ２、ＡＣＭＰ３、・・・、ＡＣＭＰｎは、アクセスアドレスＡＤＲｉｎｓとストライド予測テーブルＳＰＴ１、ＳＰＴ２、ＳＰＴ３、・・・、ＳＰＴｎの参照アドレスＡＤＲｒｅｆとをそれぞれ比較する。そして、比較部ＡＣＭＰ１、ＡＣＭＰ２、ＡＣＭＰ３、・・・、ＡＣＭＰｎは、比較結果を論理積回路ＡＮＤａ１、ＡＮＤａ２、ＡＮＤａ３、・・・、ＡＮＤａｎにそれぞれ出力する。
【００６６】
例えば、比較部ＡＣＭＰ１は、アクセスアドレスＡＤＲｉｎｓとストライド予測テーブルＳＰＴ１の参照アドレスＡＤＲｒｅｆとを受け、アクセスアドレスＡＤＲｉｎｓとストライド予測テーブルＳＰＴ１の参照アドレスＡＤＲｒｅｆとを比較する。そして、比較部ＡＣＭＰ１は、例えば、アクセスアドレスＡＤＲｉｎｓとストライド予測テーブルＳＰＴ１の参照アドレスＡＤＲｒｅｆとが一致した場合、論理値“１”の信号を論理積回路ＡＮＤａ１に出力する。また、比較部ＡＣＭＰ１は、参照アドレスＡＤＲｒｅｆとストライド予測テーブルＳＰＴ１のアクセスアドレスＡＤＲｉｎｓとが不一致の場合、論理値“０”の信号を論理積回路ＡＮＤａ１に出力する。
【００６７】
比較部ＰＣＭＰ１、ＰＣＭＰ２、ＰＣＭＰ３、・・・、ＰＣＭＰｎは、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１、ＳＰＴ２、ＳＰＴ３、・・・、ＳＰＴｎの参照プログラムカウンタ値ＰＣｒｅｆとをそれぞれ比較する。そして、比較部ＰＣＭＰ１、ＰＣＭＰ２、ＰＣＭＰ３、・・・、ＰＣＭＰｎは、比較結果を論理積回路ＡＮＤｂ１、ＡＮＤｂ２、ＡＮＤｂ３、・・・、ＡＮＤｂｎにそれぞれ出力する。さらに、比較部ＰＣＭＰ１、ＰＣＭＰ２、ＰＣＭＰ３、・・・、ＰＣＭＰｎは、比較結果をインバータＩＮＶ１、ＩＮＶ２、ＩＮＶ３、・・・、ＩＮＶｎにそれぞれ出力する。
【００６８】
例えば、比較部ＰＣＭＰ１は、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとを受ける。そして、比較部ＰＣＭＰ１は、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとを比較し、比較結果を論理積回路ＡＮＤｂ１およびインバータＩＮＶ１に出力する。
【００６９】
例えば、比較部ＰＣＭＰ１は、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとが一致した場合、論理値“１”の信号を論理積回路ＡＮＤｂ１およびインバータＩＮＶ１に出力する。また、比較部ＰＣＭＰ１は、プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとが不一致の場合、論理値“０”の信号を論理積回路ＡＮＤｂ１およびインバータＩＮＶ１に出力する。
【００７０】
インバータＩＮＶ１、ＩＮＶ２、ＩＮＶ３、・・・、ＩＮＶｎは、比較部ＰＣＭＰ１、ＰＣＭＰ２、ＰＣＭＰ３、・・・、ＰＣＭＰｎの出力信号を反転した信号を、論理積回路ＡＮＤａ１、ＡＮＤａ２、ＡＮＤａ３、・・・、ＡＮＤａｎにそれぞれ出力する。例えば、インバータＩＮＶ１は、比較部ＰＣＭＰ１の出力信号（プログラムカウンタ値ＰＣｉｎｓとストライド予測テーブルＳＰＴ１の参照プログラムカウンタ値ＰＣｒｅｆとの比較結果）を反転した信号を、論理積回路ＡＮＤａ１に出力する。
【００７１】
論理積回路ＡＮＤａ１、ＡＮＤａ２、ＡＮＤａ３、・・・、ＡＮＤａｎは、比較部ＡＣＭＰ１、ＡＣＭＰ２、ＡＣＭＰ３、・・・、ＡＣＭＰｎの出力信号と、インバータＩＮＶ１、ＩＮＶ２、ＩＮＶ３、・・・、ＩＮＶｎの出力信号との論理積をそれぞれ求める。そして、論理積回路ＡＮＤａ１、ＡＮＤａ２、ＡＮＤａ３、・・・、ＡＮＤａｎは、論理積結果を論理和回路ＯＲに出力する。例えば、論理積回路ＡＮＤａ１は、比較部ＡＣＭＰ１の出力信号とインバータＩＮＶ１の出力信号との論理積結果を論理和回路ＯＲに出力する。
【００７２】
論理和回路ＯＲは、論理積回路ＡＮＤａ１、ＡＮＤａ２、ＡＮＤａ３、・・・、ＡＮＤａｎの出力信号の論理和結果を、論理積回路ＡＮＤｂ１、ＡＮＤｂ２、ＡＮＤｂ３、・・・、ＡＮＤｂｎに出力する。すなわち、論理和回路ＯＲは、論理積回路ＡＮＤａ１、ＡＮＤａ２、ＡＮＤａ３、・・・、ＡＮＤａｎの出力信号のいずれかが論理値“１”の場合、論理値“１”の信号を論理積回路ＡＮＤｂ１、ＡＮＤｂ２、ＡＮＤｂ３、・・・、ＡＮＤｂｎに出力する。
【００７３】
論理積回路ＡＮＤｂ１、ＡＮＤｂ２、ＡＮＤｂ３、・・・、ＡＮＤｂｎは、論理和回路ＯＲの出力信号と比較部ＰＣＭＰ１、ＰＣＭＰ２、ＰＣＭＰ３、・・・、ＰＣＭＰｎの出力信号との論理積をそれぞれ求める。そして、論理積回路ＡＮＤｂ１、ＡＮＤｂ２、ＡＮＤｂ３、・・・、ＡＮＤｂｎは、論理積結果（リセット信号ＲＳＴ１、ＲＳＴ２、ＲＳＴ３、・・・、ＲＳＴｎ）を、ストライド予測テーブルＳＰＴ１、ＳＰＴ２、ＳＰＴ３、・・・、ＳＰＴｎにそれぞれ出力する。
【００７４】
例えば、論理積回路ＡＮＤｂ１は、論理和回路ＯＲの出力信号と比較部ＰＣＭＰ１の出力信号との論理積結果を、リセット信号ＲＳＴ１としてストライド予測テーブルＳＰＴ１に出力する。なお、リセット信号ＲＳＴ１、ＲＳＴ２、ＲＳＴ３、・・・、ＲＳＴｎは、ストライド予測テーブルＳＰＴ１、ＳＰＴ２、ＳＰＴ３、・・・、ＳＰＴｎのフラグＥＮＶＡＬを未登録状態にリセットするための信号である。例えば、論理値“１”のリセット信号ＲＳＴを受けたストライド予測テーブルＳＰＴでは、フラグＥＮＶＡＬが未登録状態にリセットされる。なお、論理値“０”のリセット信号ＲＳＴを受けたストライド予測テーブルＳＰＴでは、フラグＥＮＶＡＬは、リセット信号ＲＳＴを受けたときのフラグＥＮＶＡＬの状態に維持される。
【００７５】
このように、比較部ＡＣＭＰは、複数のストライド予測テーブルＳＰＴから、アクセスアドレスＡＤＲｉｎｓに一致する参照アドレスＡＤＲｒｅｆが登録された第１のストライド予測テーブルＳＰＴを検出する。以下、アクセスアドレスＡＤＲｉｎｓに一致する参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴ（第１のストライド予測テーブルＳＰＴ）は、アドレスが一致したストライド予測テーブルＳＰＴとも称される。
【００７６】
また、比較部ＰＣＭＰは、複数のストライド予測テーブルＳＰＴから、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録された第２のストライド予測テーブルＳＰＴを検出する。以下、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴ（第２のストライド予測テーブルＳＰＴ）は、ＰＣ値が一致したストライド予測テーブルＳＰＴとも称される。
【００７７】
インバータＩＮＶ、論理積回路ＡＮＤａおよび論理和回路ＯＲは、比較部ＡＣＭＰで検出された第１のストライド予測テーブルＳＰＴと比較部ＰＣＭＰで検出された第２のストライド予測テーブルＳＰＴとが互いに異なるかを検出する。論理積回路ＡＮＤｂは、第１のストライド予測テーブルＳＰＴと、第１のストライド予測テーブルＳＰＴと異なる第２のストライド予測テーブルＳＰＴとが検出された場合、第２のストライド予測テーブルＳＰＴのフラグＥＮＶＡＬを未登録状態に設定する。この場合、管理部ＣＯＮＴは、第１のストライド予測テーブルＳＰＴを共通のストライド予測テーブルＳＰＴとして管理する。
【００７８】
これにより、ループ内の展開された複数の命令に対応して割り当てられた複数のストライド予測テーブルＳＰＴのうち、共通のストライド予測テーブルＳＰＴ以外のストライド予測テーブルＳＰＴのフラグＥＮＶＡＬを未登録状態にリセットすることができる。この結果、ストライド予測テーブルＳＰＴを有効に使用することができる。なお、管理部ＣＯＮＴの構成は、この例に限定されない。
【００７９】
図５は、図２に示した演算処理装置ＯＰＤの動作の一例を示す。なお、図５に示した動作は、演算処理装置ＯＰＤ内に設けられた集約部ＣＯＤの動作の一例である。例えば、図５に示した動作は、メモリアクセスが実行される度に集約部ＣＯＤにより実行される。また、ループが展開された場合、例えば、ステップＳ１００が実行される前に、展開数ＵＮＲＬがレジスタＲＥＧに登録される。
【００８０】
例えば、コンパイラ装置がソースプログラムをコンパイルして機械語プログラムを生成するときにループ文で定義されたループ内の命令を展開した場合、展開数ＵＮＲＬをレジスタＲＥＧに格納する命令を含む機械語プログラムが生成される。そして、コンパイラ装置により生成された機械語プログラムが演算処理装置ＯＰＤで実行されることにより、展開数ＵＮＲＬがレジスタＲＥＧに格納される。
【００８１】
なお、図５では、論理値“１”のフラグＥＮＶＡＬは、登録状態を示し、論理値“０”のフラグＥＮＶＡＬは、未登録状態を示す。また、論理値“１”のフラグＳＴＶＡＬは、ストライド値ＳＴＲＤが有効であること示し、論理値“０”のフラグＳＴＶＡＬは、ストライド値ＳＴＲＤが無効であることを示す。以下、フラグＥＮＶＡＬが論理値“１”に設定されたストライド予測テーブルＳＰＴは、登録状態のストライド予測テーブルＳＰＴとも称される。また、フラグＥＮＶＡＬが論理値“０”に設定されたストライド予測テーブルＳＰＴは、未登録状態のストライド予測テーブルＳＰＴとも称される。
【００８２】
ステップＳ１００では、集約部ＣＯＤは、登録状態のストライド予測テーブルＳＰＴの中に、アドレスが一致したストライド予測テーブルＳＰＴが存在するか判定する。例えば、集約部ＣＯＤの管理部ＣＯＮＴは、登録状態のストライド予測テーブルＳＰＴの中に、アクセスアドレスＡＤＲｉｎｓに一致する参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴが存在するか判定する。
【００８３】
アクセスアドレスＡＤＲｉｎｓに一致する参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴが存在する場合（ステップＳ１００のＹｅｓ）、集約部ＣＯＤの動作は、ステップＳ３００に移る。すなわち、集約部ＣＯＤは、メモリアクセス命令でアクセスされるアドレスが登録状態に設定されているストライド予測テーブルＳＰＴのいずれかに登録された場合、ステップＳ３００を実行する。
【００８４】
一方、アクセスアドレスＡＤＲｉｎｓに一致する参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴが存在しない場合（ステップＳ１００のＮｏ）、集約部ＣＯＤの動作は、ステップＳ１１０に移る。すなわち、集約部ＣＯＤは、メモリアクセス命令でアクセスされるアドレスが登録状態のストライド予測テーブルＳＰＴのいずれにも登録されていない場合、ステップＳ１１０を実行する。
【００８５】
ステップＳ１１０では、集約部ＣＯＤは、登録状態のストライド予測テーブルＳＰＴの中に、ＰＣ値が一致したストライド予測テーブルＳＰＴが存在するか判定する。すなわち、集約部ＣＯＤは、登録状態のストライド予測テーブルＳＰＴの中に、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴが存在するか判定する。
【００８６】
プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴが存在する場合（ステップＳ１１０のＹｅｓ）、集約部ＣＯＤの動作は、ステップＳ２００に移る。すなわち、アクセスアドレスＡＤＲｉｎｓがストライド予測テーブルＳＰＴに登録されていないメモリアクセス命令のプログラムカウンタ値ＰＣｉｎｓが、登録状態のストライド予測テーブルＳＰＴのいずれかに登録された場合、ステップＳ２００が実行される。
【００８７】
一方、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴが存在しない場合（ステップＳ１１０のＮｏ）、集約部ＣＯＤの動作は、ステップＳ１２０に移る。すなわち、アクセスアドレスＡＤＲｉｎｓがストライド予測テーブルＳＰＴに登録されていないメモリアクセス命令のプログラムカウンタ値ＰＣｉｎｓが、登録状態のストライド予測テーブルＳＰＴのいずれにも登録されていない場合、ステップＳ１２０が実行される。
【００８８】
ステップＳ１２０では、集約部ＣＯＤは、メモリアクセス命令で実行されたメモリアクセスがキャッシュミスしたか判定する。キャッシュミスが発生していない場合（ステップＳ１２０のＮｏ）、集約部ＣＯＤの動作は、終了する。一方、キャッシュミスが発生した場合（ステップＳ１２０のＹｅｓ）、集約部ＣＯＤの動作は、ステップＳ１３０に移る。
【００８９】
ステップＳ１３０では、集約部ＣＯＤは、アクセスアドレスＡＤＲｉｎｓを任意のストライド予測テーブルＳＰＴに新規登録する。例えば、集約部ＣＯＤは、アクセスアドレスＡＤＲｉｎｓを未登録状態のストライド予測テーブルＳＰＴに新規登録する。アクセスアドレスＡＤＲｉｎｓが新規登録されたストライド予測テーブルＳＰＴでは、参照アドレスＡＤＲｒｅｆはアクセスアドレスＡＤＲｉｎｓに設定され、参照プログラムカウンタ値ＰＣｒｅｆはプログラムカウンタ値ＰＣｉｎｓに設定される。そして、フラグＳＴＶＡＬは、ストライド値ＳＴＲＤが無効であること示す論理値“０”に設定され、フラグＥＮＶＡＬは、登録状態を示す論理値“１”に設定される。
【００９０】
ステップＳ２００では、集約部ＣＯＤは、ＰＣ値が一致したストライド予測テーブルＳＰＴ（ステップＳ１１０で検出したストライド予測テーブルＳＰＴ）のフラグＳＴＶＡＬが論理値“１”であるか判定する。すなわち、集約部ＣＯＤは、ＰＣ値が一致したストライド予測テーブルＳＰＴのストライド値ＳＴＲＤが有効であるか判定する。フラグＳＴＶＡＬが論理値“１”である場合（ステップＳ２００のＹｅｓ）、集約部ＣＯＤの動作は、ステップＳ２３０に移る。すなわち、ＰＣ値が一致したストライド予測テーブルＳＰＴに有効なストライド値ＳＴＲＤが登録された場合、集約部ＣＯＤの動作は、ステップＳ２３０に移る。
【００９１】
一方、フラグＳＴＶＡＬが論理値“０”である場合（ステップＳ２００のＮｏ）、集約部ＣＯＤの動作は、ステップＳ２１０に移る。すなわち、ＰＣ値が一致したストライド予測テーブルＳＰＴのストライド値ＳＴＲＤが無効である場合、集約部ＣＯＤの動作は、ステップＳ２１０に移る。
【００９２】
ステップＳ２１０では、集約部ＣＯＤの算出部ＣＡＬは、ＰＣ値が一致したストライド予測テーブルＳＰＴのストライド値ＳＴＲＤを算出する。そして、算出部ＣＡＬは、算出したストライド値ＳＴＲＤを、ＰＣ値が一致したストライド予測テーブルＳＰＴに登録する。
【００９３】
例えば、算出部ＣＡＬの差分算出部ＣＡＬＤＦは、演算部ＯＰＵからアクセスアドレスＡＤＲｉｎｓを受け、ＰＣ値が一致したストライド予測テーブルＳＰＴから参照アドレスＡＤＲｒｅｆを読み出す。そして、差分算出部ＣＡＬＤＦは、アクセスアドレスＡＤＲｉｎｓから参照アドレスＡＤＲｒｅｆを減算してアドレス差分ＡＤＲｄｉｆを算出する。
【００９４】
算出部ＣＡＬのストライド算出部ＣＡＬＳＴは、差分算出部ＣＡＬＤＦからアドレス差分ＡＤＲｄｉｆを受け、レジスタＲＥＧから展開数ＵＮＲＬを読み出す。そして、ストライド算出部ＣＡＬＳＴは、アドレス差分ＡＤＲｄｉｆを展開数ＵＮＲＬで除算してストライド値ＳＴＲＤを算出し、算出したストライド値ＳＴＲＤをＰＣ値が一致したストライド予測テーブルＳＰＴに登録する。
【００９５】
これにより、ＰＣ値が一致したストライド予測テーブルＳＰＴに、有効なストライド値ＳＴＲＤが登録される。また、集約部ＣＯＤは、ＰＣ値が一致したストライド予測テーブルＳＰＴのフラグＳＴＶＡＬを、ストライド値ＳＴＲＤが有効であること示す論理値“１”に設定する。なお、ストライド算出部ＣＡＬＳＴは、有効な展開数ＵＮＲＬがレジスタＲＥＧに格納されていない場合、アドレス差分ＡＤＲｄｉｆをストライド値ＳＴＲＤとして、ＰＣ値が一致したストライド予測テーブルＳＰＴに登録してもよい。
【００９６】
ステップＳ２２０では、集約部ＣＯＤは、ＰＣ値が一致したストライド予測テーブルＳＰＴの参照アドレスＡＤＲｒｅｆを更新する。例えば、集約部ＣＯＤは、ＰＣ値が一致したストライド予測テーブルＳＰＴの参照アドレスＡＤＲｒｅｆを、アクセスアドレスＡＤＲｉｎｓにストライド値ＳＴＲＤを加算した値に更新する。
【００９７】
このように、例えば、プログラムカウンタ値ＰＣｉｎｓが互いに同じメモリアクセス命令において、１回目のメモリアクセスでステップＳ１３０が実行され、２回目のメモリアクセスでステップＳ２１０、Ｓ２２０が実行される。
【００９８】
ステップＳ２３０では、集約部ＣＯＤは、ＰＣ値が一致したストライド予測テーブルＳＰＴに、参照アドレスＡＤＲｒｅｆを新規登録する。これにより、ＰＣ値が一致したストライド予測テーブルＳＰＴでは、参照アドレスＡＤＲｒｅｆはアクセスアドレスＡＤＲｉｎｓに設定され、フラグＳＴＶＡＬは、ストライド値ＳＴＲＤが無効であること示す論理値“０”に設定される。なお、参照プログラムカウンタ値ＰＣｒｅｆは、プログラムカウンタ値ＰＣｉｎｓに維持され、フラグＥＮＶＡＬは、登録状態を示す論理値“１”に維持される。
【００９９】
ステップＳ３００では、集約部ＣＯＤの管理部ＣＯＮＴは、アドレスが一致したストライド予測テーブルＳＰＴ以外のストライド予測テーブルＳＰＴの中に、ＰＣ値が一致したストライド予測テーブルＳＰＴが存在するか判定する。これにより、アクセスアドレスＡＤＲｉｎｓに一致しない参照アドレスＡＤＲｒｅｆが登録され、かつ、プログラムカウンタ値ＰＣｉｎｓに一致する参照プログラムカウンタ値ＰＣｒｅｆが登録されたストライド予測テーブルＳＰＴが検出される。
【０１００】
ＰＣ値が一致したストライド予測テーブルＳＰＴのうち、アクセスアドレスＡＤＲｉｎｓに一致しない参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴは、解放可能なストライド予測テーブルＳＰＴに対応する。以下、ＰＣ値が一致したストライド予測テーブルＳＰＴのうち、アクセスアドレスＡＤＲｉｎｓに一致しない参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴは、解放可能なストライド予測テーブルＳＰＴとも称される。
【０１０１】
アドレスが一致したストライド予測テーブルＳＰＴ以外のストライド予測テーブルＳＰＴの中に、ＰＣ値が一致したストライド予測テーブルＳＰＴが存在する場合（ステップＳ３００のＹｅｓ）、集約部ＣＯＤの動作は、ステップＳ３１０に移る。すなわち、解放可能なストライド予測テーブルＳＰＴが検出された場合、集約部ＣＯＤの動作は、ステップＳ３１０に移る。
【０１０２】
一方、アドレスが一致したストライド予測テーブルＳＰＴ以外のストライド予測テーブルＳＰＴの中に、ＰＣ値が一致したストライド予測テーブルＳＰＴが存在しない場合（ステップＳ３００のＮｏ）、集約部ＣＯＤの動作は、ステップＳ３２０に移る。すなわち、解放可能なストライド予測テーブルＳＰＴが検出されなかった場合、集約部ＣＯＤの動作は、ステップＳ３２０に移る。
【０１０３】
ステップＳ３１０では、管理部ＣＯＮＴは、解放可能なストライド予測テーブルＳＰＴのフラグＥＮＶＡＬを、未登録状態を示す論理値“０”に設定する。これにより、ＰＣ値が一致したストライド予測テーブルＳＰＴのうち、アクセスアドレスＡＤＲｉｎｓに一致しない参照アドレスＡＤＲｒｅｆが登録されたストライド予測テーブルＳＰＴは、任意のメモリアクセスに割り当て可能な状態に設定される。
【０１０４】
管理部ＣＯＮＴは、解放可能なストライド予測テーブルＳＰＴを、ステップＳ１００、Ｓ３００の一連の判定で検出する度に、ステップＳ３１０を実行する。これにより、ループ内の展開された複数の命令で実行されるメモリアクセスに対応して割り当てられた複数（展開数ＵＮＲＬ分）のストライド予測テーブルＳＰＴの予測情報を共通のストライド予測テーブルＳＰＴの予測情報に集約することができる。
【０１０５】
ステップＳ３２０では、集約部ＣＯＤは、アドレスが一致したストライド予測テーブルＳＰＴ（ステップＳ１００で検出したストライド予測テーブルＳＰＴ）の参照アドレスＡＤＲｒｅｆを更新する。例えば、集約部ＣＯＤは、アドレスが一致したストライド予測テーブルＳＰＴの参照アドレスＡＤＲｒｅｆを、アクセスアドレスＡＤＲｉｎｓにストライド値ＳＴＲＤを加算した値に更新する。なお、集約部ＣＯＤは、アドレスが一致したストライド予測テーブルＳＰＴの参照アドレスＡＤＲｒｅｆを、現時点の参照アドレスＡＤＲｒｅｆにストライド値ＳＴＲＤを加算して更新してもよい。
【０１０６】
また、ステップＳ３２０では、ハードウェアプリフェッチ制御部ＨＷＰＦは、更新前の参照アドレスＡＤＲｒｅｆにプリフェッチ距離（＝ストライド値ＳＴＲＤのｍ倍、ｍは正の整数）を加算したアドレスに対して、プリフェッチを実行する。なお、ステップＳ１３０、Ｓ２２０、Ｓ２３０では、プリフェッチは、実行されない。また、演算処理装置ＯＰＤの動作は、この例に限定されない。
【０１０７】
以上、図２から図５に示した実施形態においても、図１に示した実施形態と同様の効果を得ることができる。例えば、集約部ＣＯＤは、ループ内において展開された複数の命令で実行されるメモリアクセスに対応して割り当てられた複数（展開数ＵＮＲＬ分）のストライド予測テーブルＳＰＴの予測情報を、共通のストライド予測テーブルＳＰＴの予測情報に集約する。これにより、演算処理装置ＯＰＤは、ループ内の展開された複数の命令に対応して割り当てるストライド予測テーブルＳＰＴの数を、集約部３０が省かれた演算処理装置に比べて、少なくできる。この結果、ストライド予測テーブルＳＰＴを有効に使用することができ、演算処理装置ＯＰＤの性能を向上させることができる。
【０１０８】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１０９】
１０‥演算部；２０‥キャッシュメモリ；３０‥集約部；４０‥展開数格納部；５０‥予測情報記憶部；６０‥制御部；１００‥演算処理装置；２００‥主記憶装置；ＡＣＭＰ、ＰＣＭＰ‥比較部；ＡＮＤａ、ＡＮＤｂ‥論理積回路；ＣＡＬ‥算出部；ＣＡＬＤＦ‥差分算出部；ＣＡＬＳＴ‥ストライド算出部；ＣＯＤ‥集約部；ＣＭＥＭ‥キャッシュメモリ；ＣＯＮＴ‥管理部；ＯＰＵ‥演算部；ＩＮＶ‥インバータ；ＭＥＭ‥メモリ；ＭＭＥＭ‥主記憶装置；ＯＲ‥論理和回路；ＲＥＧ‥レジスタ；ＳＰＴ‥ストライド予測テーブル；ＯＰＤ‥演算処理装置
【図１】
0006341045.tif 000002
【図２】
0006341045.tif 000003
【図３】
0006341045.tif 000004
【図４】
0006341045.tif 000005
【図５】
0006341045.tif 000006