(57)【要約】【課題】読み出し遅延を抑止する。【解決手段】実施形態の命令制御装置は、受付手段と、記憶手段と、算出手段と、プリフェッチ手段と、実行手段と、取得手段と、特定手段と、更新手段と、を備える。受付手段は、プリフェッチ付きの読出命令を受け付ける。記憶手段は、読出命令を識別する識別情報と、距離情報と、を対応づけて記憶する。算出手段は、読出命令の読み出し先のアドレスと、記憶手段と、に基づいて、プリフェッチによる読み出し先のアドレスを算出する。プリフェッチ手段は、算出されたアドレスに対してプリフェッチを実行する。実行手段は、読出命令に従って、プリフェッチされたアドレスに対して読み出しを行う。取得手段は、読み出しの完了までの遅延時間を取得する。特定手段は、遅延時間に基づいて、次以降のプリフェッチで用いる距離情報を特定する。更新手段は、特定された距離情報を、識別情報と対応づけて記憶手段に記録させる更新を行う。【選択図】図１
2012014417.tif 000002
【特許請求の範囲】
【請求項１】
プリフェッチ付きの読出命令を受け付ける受付手段と、
プリフェッチ付きの読出命令を識別する識別情報と、当該読出命令による読み出し先のアドレスからプリフェッチ先のアドレスの算出に用いる距離情報と、を対応づけて記憶する記憶手段と、
前記受付手段が受け付けた前記読出命令の読み出し先のアドレスと、前記記憶手段に記憶された前記読出命令の前記識別情報及び前記距離情報と、に基づいて、前記受付手段が受け付けた前記読出命令に付いていたプリフェッチによる読み出し先のアドレスを算出する算出手段と、
この算出された前記アドレスに対して、プリフェッチを実行するプリフェッチ手段と、
読出命令に従って、前記プリフェッチ手段でプリフェッチされたアドレスに対して読み出しを実行する実行手段と、
前記実行手段による読み出しの完了までの遅延時間を取得する取得手段と、
前記取得手段が取得した前記遅延時間に基づいて、次以降のプリフェッチで用いる距離情報を特定する特定手段と、
前記特定手段により特定された前記距離情報を、プリフェッチ付きの前記読出命令を識別する識別情報と対応づけて、前記記憶手段に記憶させる更新を行う更新手段と、
を備えることを特徴とする命令制御装置。
【請求項２】
前記記憶手段は、前記実行手段による実行で前記読出命令の完了までの前記遅延時間を、さらに対応づけて記憶し、
前記特定手段は、さらに、前記記憶手段に記録された前記遅延時間と、前記記憶手段に前記遅延時間を記録した後に、前記取得手段が取得した前記遅延時間と、の差異に基づいて、前記距離情報を特定すること、
を特徴とした請求項１に記載の命令制御装置。
【請求項３】
前記記憶手段は、さらに、前記距離情報を特定するまでに前記読み取り命令を受け付ける回数を、対応づけて記憶し、
前記特定手段は、前記受付手段が前記読み取り命令を、前記記憶手段が記憶した前記回数を受け付けた場合に、前記距離情報を特定すること、
を特徴とする請求項１又は２に記載の命令制御装置。
【請求項４】
前記記憶手段は、さらに、前記読出命令の読み出し先のアドレスに対する前記距離情報の演算が加算か減算かを示した演算情報を記憶し、
前記特定手段は、さらに、前記記憶手段に記憶された前記演算情報に従った演算を、前記距離情報と、予め定められた値と、の間で行うこと、
を特徴とする請求項１乃至３のいずれか１つに記載の命令制御装置。
【請求項５】
命令制御装置で実行される命令制御方法であって、
命令制御装置は、プリフェッチ付きの読出命令を識別する識別情報と、当該読出命令による読み出し先のアドレスからプリフェッチ先のアドレスの算出に用いる距離情報と、を対応づけて記憶する記憶手段を備え、
受付手段が、プリフェッチ付きの読出命令を受け付ける受付ステップと、
算出手段が、前記受付ステップが受け付けた前記読出命令の読み出し先のアドレスと、前記記憶手段に記憶された前記読出命令の前記識別情報及び前記距離情報と、に基づいて、前記受付手段が受け付けた前記読出命令に付いていたプリフェッチによる読み出し先のアドレスを算出する算出ステップと、
プリフェッチ手段が、算出された前記アドレスに対して、プリフェッチを実行するプリフェッチ実行ステップと、
実行手段が、読出命令に従って、前記プリフェッチ手段でプリフェッチされたアドレスに対して読み出しを実行する実行ステップと、
取得手段が、前記実行ステップによる読み出しの完了までの遅延時間を取得する取得ステップと、
特定手段が、前記取得ステップが取得した前記遅延時間に基づいて、次以降のプリフェッチで用いる距離情報を特定する特定ステップと、
更新手段が、前記特定ステップにより特定された前記距離情報を、プリフェッチ付きの前記読出命令を識別する識別情報と対応づけて、前記記憶手段に記憶させる更新を行う更新ステップと、
を含むことを特徴とする命令制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、命令制御装置、及び命令制御方法に関する。
【背景技術】
【０００２】
従来から、コンピュータ産業では、世代が変わる毎に動作速度が高速化している。ＣＰＵ等の処理装置の動作速度が向上するに従って、記憶装置に対するアクセス速度も高速化する必要がある。
【０００３】
仮に、記憶装置に対するアクセス速度が、処理装置の動作速度と比べて遅い場合には、記憶待ちが生じ、当該記憶待ちの間、処理装置はアイドル状態になる。これにより処理装置の処理効率は、低減することになる。
【０００４】
このようなアイドル状態を抑止するために、プリフェッチという技術が提案されている。このプリフェッチとは、処理装置が利用するデータを予めキャッシュメモリに読み出しておくことで、データの読み出す際の遅延時間を短縮させる技術である。例えば、キャッシュミスが生じた場合に、当該キャッシュミスが再び生じないようにデータの先取りを最適化する技術が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−９１４３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術においては、読み出したデータを格納するキャッシュと処理装置との間でデータアクセス時に生じる遅延時間については考慮されておらず、プリフェッチ命令を実行するためのオーバーヘッドが増加してしまい逆に性能が悪化することもあった。
【０００７】
本発明は、上記に鑑みてなされたものであって、プリフェッチを行う際にデータを読み出す際の遅延を抑止する命令制御装置、及び命令制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態の命令制御装置は、受付手段と、記憶手段と、算出手段と、プリフェッチ手段と、実行手段と、取得手段と、特定手段と、更新手段と、を備える。受付手段は、プリフェッチ付きの読出命令を受け付ける。記憶手段は、プリフェッチ付きの読出命令を識別する識別情報と、当該読出命令による読み出し先のアドレスからプリフェッチ先のアドレスの算出に用いる距離情報と、を対応づけて記憶する。算出手段は、受付手段が受け付けた読出命令の読み出し先のアドレスと、記憶手段に記憶された読出命令の識別情報及び距離情報と、に基づいて、受付手段が受け付けた読出命令に付いていたプリフェッチによる読み出し先のアドレスを算出する。プリフェッチ手段は、この算出されたアドレスに対してプリフェッチを実行する。実行手段は、読出命令に従って、プリフェッチ手段でプリフェッチされたアドレスに対して読み出しを実行する。取得手段は、実行手段による読み出しの完了までの遅延時間を取得する。特定手段は、取得手段が取得した遅延時間に基づいて、次以降のプリフェッチで用いる距離情報を特定する。更新手段は、特定手段により特定された距離情報を、プリフェッチ付きの読出命令を識別する識別情報と対応づけて、記憶手段に記録させる更新を行う。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる情報処理装置における、ＣＰＵと周辺の構成を示すブロック図である。
【図２】図２は、ＣＰＵがプリフェッチを行う際に、データの格納先の違いに基づくＣＰＵコアからの距離の違いを示した図である。
【図３】図３は、ＣＰＵコアに隣接するキャッシュと、ＣＰＵコア内のブロック構成と、を示した図である。
【図４】図４は、プリフェッチ情報テーブルのテーブル構造を示した図である。
【図５】図５は、本実施の形態の情報処理装置の各ＣＰＵコアで行われる、プリフェッチ付き読出命令に対する処理を示した図である。
【図６】図６は、本実施の形態にかかるＣＰＵコアにおける、プリフェッチ付き読出命令に関する処理の手順を示すフローチャートである。
【図７】図７は、本実施の形態にかかる情報処理装置のＣＰＵコアにおける、プリフェッチ情報テーブルの更新処理の手順を示すフローチャートである。
【図８】図８は、変形例にかかる情報処理装置における、ＣＰＵと周辺の構成を示すブロック図である。
【発明を実施するための形態】
【００１０】
図１は、実施の形態にかかる情報処理装置１００における、ＣＰＵと周辺の構成を示すブロック図である。図１に示すように、情報処理装置１００は、ＣＰＵ１０１＿１〜１０１＿Ｎと、メインメモリ１０２と、これらを接続するバス１０３と、を含む構成とする。
【００１１】
メインメモリ１０２は、ＲＡＭ（Random  Access  Memory）であり、ＣＰＵ１０１＿１〜１０１＿Ｎが処理に必要なデータを記憶する。メインメモリ１０２に記憶されたデータの読み出しは、ＣＰＵ１０１＿１〜１０１＿Ｎ内の各キャッシュからの読み出しと比べて遅いため、ＣＰＵ１０１＿１〜１０１＿Ｎの処理効率を低減させないためには工夫は必要となる。
【００１２】
ＣＰＵ１０１＿１は、ＣＰＵコア１１１〜ＣＰＵコア１１４と、１次キャッシュ１２１〜１２４と、２次キャッシュ１３１〜１３４と、３次キャッシュ１４１と、を備える。なお、情報処理装置１００に格納された他のＣＰＵ（例えばＣＰＵ１０１＿Ｎ）は、ＣＰＵ１０１＿１と同様の構成を備えるものとして説明を省略する。
【００１３】
３次キャッシュ１４１は、ＣＰＵコア１１１〜１１４に共通して利用されるキャッシュである。３次キャッシュ１４１に記憶されたデータを読み出す速度は、データが格納された位置と、ＣＰＵコア１１１〜１１４のそれぞれと、の配置関係に応じて、異なる場合がある。
【００１４】
１次キャッシュ１２１〜１２４、及び２次キャッシュ１３１〜１３４は、ＣＰＵコア１１１〜１１４毎に割り当てられたキャッシュとする。ＣＰＵコア１１１〜１１４に近い順に、１次キャッシュ１２１〜１２４、２次キャッシュ１３１〜１３４が配置されている。
【００１５】
ＣＰＵコア１１１〜１１４は、ＣＰＵ１０１＿１内部に備えられたプロセッサである。ＣＰＵコア１１１〜１１４は、それぞれ異なる処理を行うことで、ＣＰＵ１０１＿１全体として並列処理を行うことができる。
【００１６】
つまり、各ＣＰＵ１０１＿１〜１０１＿Ｎ内のＣＰＵコアがデータを読み出す場合、通常、メインメモリ１０２や３次キャッシュ１４１、１４２等からシーケンシャルにデータが読み出される。そして、読み出されたデータは、各コアの１次キャッシュ１２１〜１２４、２次キャッシュ１３１〜１３４内に格納される。１次キャッシュ１２１〜１２４、１次キャッシュ１２１〜１２４は、３次キャッシュ１４１と比べて読み書きの速度が高速であるが、キャッシュの容量が少ない。このため、１次キャッシュ１２１〜１２４、２次キャッシュ１３１〜１３４に格納されたデータの利用効率を向上させるために、読出命令に従って、１次キャッシュ１２１〜１２４、２次キャッシュ１３１〜１３４から読み出す前の適切なタイミングで、プリフェッチされたデータが格納されるよう調整するのが好ましい。
【００１７】
まず、読み出すデータが、メインメモリ１０２や３次キャッシュ１４１、１４２のどこに格納されているのかに応じて、プリフェッチに要する時間が異なることについて説明する。図２は、ＣＰＵコア１１２がプリフェッチを行う際に、データの格納先の違いによる、ＣＰＵコア１１２からの距離の違いを示した図である。このような読み出し先までの距離の違いと、メインメモリ１０２及び３次キャッシュ１４１〜１４２の読み出し速度の違いと、から、読み出したデータが、データ１次キャッシュ１２２又は２次キャッシュ１３２に格納されるまでの時間が異なる。
【００１８】
例えば、３次キャッシュ１４１内部においても、データ２０１とデータ２０２とでは配置が異なるため、ＣＰＵコア１１２からの命令に応じて１次キャッシュ１２２又は２次キャッシュ１３２に格納されるまでの時間が異なる。さらに、異なるＣＰＵ１０１＿Ｎの３次キャッシュ１４２に格納されていたデータ２０４や、メインメモリ１０２に格納されたデータ２０３を読み出して、１次キャッシュ１２２又は２次キャッシュ１３２に格納されるまでの時間も、当然に、データ２０１とデータ２０２とは異なる。
【００１９】
このように、将来アクセスする予定のどのアドレスに対して、どのタイミングでプリフェッチを行えばよいのかは、状況によって異なる。このため、本実施の形態にかかる情報処理装置１００では、読み出し先のアドレスを調節することとした。
【００２０】
ところで、マルチコアプロセッサでは、３次キャッシュからデータを読み出す際に、格納されたデータの配置によって、アクセス遅延が均質でないケースが多い。例えば、８コアより数の多いマルチコアプロセッサでは、３次キャッシュは、コア数分に分割されて管理される傾向にある。このため、各コアに近いローカルな領域へのアクセス速度と、それ以外の領域へのアクセス速度と、では５倍以上の差がある場合もある。また、システムの構成によっては、ＣＰＵの外側に接続されているメインメモリへのアクセス速度も、均等でない場合もある。このため、プリフェッチを行う際に、どの程度先のアドレスに対してプリフェッチするのが最適かを、プログラマがプログラム作成時に決めるのは困難であった。当然ながら８コア以下のマルチコアであっても、プログラマがプログラム作成時に決めるのは困難である。そこで、本実施の形態にかかる情報処理装置１００では、これらの問題を解消すべく、データの読み出し先のアドレスを調節するための構成を備えることとした。このように、本実施の形態にかかる情報処理装置１００で説明する構成は、プロセッサ内部のコア数にかかわらず適応できる。
【００２１】
図３は、ＣＰＵコア１１１に隣接するキャッシュと、ＣＰＵコア１１１内のブロック構成と、を示した図である。図３に示すように、ＣＰＵコア１１１は、プリフェッチ情報テーブル３０１と、命令シーケンサ３０２と、算出部３０３と、プリフェッチ実行部３０４と、取得部３０５と、特定部３０６と、テーブル制御部３０７と、を備える。
【００２２】
図３では、ＣＰＵコア１１１の場合について説明するが、ＣＰＵコア１１２〜１１８についても同様の構成を備えるものとして説明を省略する。また、本実施の形態は、プリフェッチ情報テーブルをＣＰＵコア毎に備える例としたが、複数コアで共通するよう、３次キャッシュ等に備えることにしてもよい。
【００２３】
プリフェッチ情報テーブル３０１は、プリフェッチ付きの読出命令から、プリフェッチするアドレスを算出するための情報を記憶する。図４は、プリフェッチ情報テーブル３０１のテーブル構造を示した図である。図４に示すようにプリフェッチ情報テーブル３０１は、タグと、距離情報と、遅延情報と、回数と、向き情報と、を対応付けて記憶する。
【００２４】
タグは、プリフェッチ付きの読出命令を識別するエントリーキーとして用いられる情報とする。本実施の形態では、タグは、命令コードの所定の桁のアドレスとする。
【００２５】
距離情報は、読出命令の読み出し先のアドレスから、プリフェッチ先のアドレスの算出する際に用いる、先読みの距離情報とする。つまり、距離情報は、プリフェッチ付き読出命令を実行するときに同時に実行するプリフェッチのアドレスオフセットとして用いられる。
【００２６】
遅延情報は、プリフェッチしたアドレスへの読み出しが完了するまでの、遅延サイクルを統計した遅延時間とする。
【００２７】
回数は、次に距離情報を算出するまでに、プリフェッチ付きの読出命令を何回実行した後にプリフェッチ情報テーブル３０１を更新するのかを指定している。例えば、プリフェッチ付きの読出命令が実行される度に回数から‘１’減算され、回数が‘０’となった場合に、距離情報の算出、プリフェッチ情報テーブル３０１の更新が行われる。
【００２８】
向き情報は、読出命令の読み出し先のアドレスに対する、距離情報の演算の向き、換言すれば正か負かを示した情報とする。向き情報は、３ビットデータであり、距離の増減の履歴データを保持する。例えば向き情報は“110b”として示される。"1"が正の方向であり、"0"が負の方向とする。そして小さい桁ほど新しく追加された向き情報を示している。
【００２９】
そして、プリフェッチ情報テーブル３０１で保持される各情報は、読み出し結果に応じて更新される。
【００３０】
命令シーケンサ３０２は、ＣＰＵコア１１１で実行する様々な命令を受け付ける。この命令には、プリフェッチ付きの読出命令も含まれている。プリフェッチ付き読出命令とは、読出命令に基づくデータの読み出しと並列して、データのプリフェッチを行う命令とする。本実施の形態では、当該プリフェッチ付き読出命令において、プリフェッチを行う際の読み出し距離を調整する。
【００３１】
さらに、命令シーケンサ３０２は、受け付けた命令の実行を行う。例えば、命令シーケンサ３０２は、プリフェッチされたアドレスに対する、読出命令の実行も行う。換言すれば、命令シーケンサ３０２は、受付手段及び実行手段として機能する。
【００３２】
算出部３０３は、命令シーケンサ３０２が受け付けた読出命令の読み出し先のアドレスと、プリフェッチ情報テーブル３０１に記憶された読出命令のタグ、距離情報及び向き情報と、に基づいて、命令シーケンサ３０２が受け付けた読出命令に付いていたプリフェッチによる読み出し先のアドレスを算出する。
【００３３】
本実施の形態にかかる算出部３０３では、読出命令の読み出し先のアドレスに対して、距離情報を、向き情報に従って加算又は減算を行う。つまり、算出部３０３では、向き情報が正であれば加算を、向き情報が負であれば減算を行う。これにより、プリフェッチで読み出すアドレスが特定される。
【００３４】
プリフェッチ実行部３０４は、算出部３０３で算出された読み出し先のアドレスに対して、プリフェッチを実行する。これにより、読み出されるデータが、１次キャッシュ又は２次キャッシュに格納される。
【００３５】
その後（例えば、メインメモリ１０２からデータを１次キャッシュ又は２次キャッシュにロードする間の数百サイクル後）、命令シーケンサ３０２は、当該読み出し先に対する読出命令を受け付けた場合に、当該読出命令に従って、プリフェッチされたアドレスからデータの読み出しを実行する。これにより、１次キャッシュ又は２次キャッシュからデータが読み出されることになる。
【００３６】
取得部３０５は、命令シーケンサ３０２による読出命令の完了までの遅延情報（遅延サイクル）を取得する。これにより、プリフェッチされたアドレスのデータが、読出命令が行われる前に、１次キャッシュ又は２次キャッシュに格納されたか否か確認できる。
【００３７】
特定部３０６は、取得部３０５が取得した遅延情報に基づいて、次回以降のプリフェッチで用いる距離情報を特定する。本実施の形態にかかる特定部３０６は、プリフェッチ情報テーブル３０１に記録された遅延情報と、プリフェッチ情報テーブル３０１に遅延情報を更新した後に、取得部３０５が取得した遅延情報と、の差異に基づいて、距離情報を特定する。なお、差異を比較するために用いる遅延情報は、実行する読出命令と一致する、プリフェッチ情報テーブル３０１に記憶されたタグとの対応付けから特定できる。
【００３８】
なお、特定部３０６による距離情報の特定は、当該距離情報とプリフェッチ情報テーブル３０１で対応付けられた回数が“０”になった場合に行う。
【００３９】
テーブル制御部３０７は、更新部３１１を備え、プリフェッチ情報テーブル３０１に対する制御を行う。
【００４０】
更新部３１１は、プリフェッチ情報テーブル３０１に格納された各項目について更新する。例えば、本実施の形態にかかる更新部３１１は、特定部３０６により特定された距離情報を、プリフェッチ付きの読出命令を識別するタグと対応づけて、プリフェッチ情報テーブル３０１に記憶させる更新を行う。
【００４１】
本実施の形態では、データのアクセスが、アドレスの小さい方から大きい方へと順次アクセスしていくことが非常に多い場合について説明する。このような状況でメモリアクセスを高速に行うための手法について解説する。
【００４２】
図５は、本実施の形態の情報処理装置１００の各ＣＰＵコアで行われる、プリフェッチ付き読出命令に対する処理を示した図である。図５に示すように、命令シーケンサ３０２が命令実行シーケンス５０１の順に命令を受け付ける。受け付ける命令内に、プリフェッチ付き読出命令が含まれている場合に、算出部３０３が、当該読出命令の位置を示すプログラムカウンタＰＣをエントリーキーとして、プリフェッチ情報テーブル３０１を参照する。そして、算出部３０３が、プログラムカウンタＰＣのエントリーキーと、プリフェッチ情報テーブル３０１内のタグとが一致するか否か確認する。
【００４３】
そして、算出部３０３は、一致したタグと対応付けられている距離情報を、読出命令で用いられるアドレスに対して、向き情報に従った演算を行う。そして、プリフェッチ実行部３０４が、演算で求められたアドレスに対して、プリフェッチを実行する。
【００４４】
次に、本実施の形態にかかる情報処理装置１００のＣＰＵコア１１１における、プリフェッチ付き読出命令に関する処理について説明する。図６は、本実施の形態にかかるＣＰＵコア１１１における上述した処理の手順を示すフローチャートである。
【００４５】
命令シーケンサ３０２が、プリフェッチ付き読出命令を受け付け、当該プリフェッチ付き読出命令をデコードする（ステップＳ６０１）。
【００４６】
そして、命令シーケンサ３０２が、デコードした読出命令について、オペランドから、当該読出命令での読み出し先となるソースアドレスＡを算出する（ステップＳ６０２）。
【００４７】
その後、命令シーケンサ３０２が、算出されたソースアドレスＡに対して、読出命令を実行する（ステップＳ６０３）。
【００４８】
そして、算出部３０３が、実行された読出命令を示すプログラムカウンタＰＡをエントリーキーとして、プリフェッチ情報テーブル３０１を参照する（ステップＳ６０４）。その後、算出部３０３が、プリフェッチ情報テーブル３０１内に格納されている全てのタグが、プログラムカウンタＰＣと異なるか否かを判定する（ステップＳ６０５）。異なると判定された場合（ステップＳ６０５：Ｙｅｓ）、プリフェッチ情報テーブル３０１内のエントリ情報を初期化し、当該エントリ情報に対して、当該プログラムカウンタＰＡと一致するタグを設定する（ステップＳ６０６）。初期化では、エントリ情報として、例えば距離情報＝１２８、遅延情報＝０、回数＝８、向き情報＝００ｂを設定する。
【００４９】
一方、算出部３０３が、プリフェッチ情報テーブル３０１内に格納されているタグと、プログラムカウンタＰＣとが一致すると判定した場合（ステップＳ６０５：Ｎｏ）、一致するタグと対応付けられた距離情報Ｄを取得する（ステップＳ６０７）。
【００５０】
次に、算出部３０３が、ソースアドレスＡに対して、距離情報Ｄを加算し、プリフェッチにおける読出先のアドレスを生成する（ステップＳ６０８）。その後、プリフェッチ実行部３０４が、算出された読出先のアドレスに対して、プリフェッチを実行する（ステップＳ６０９）。
【００５１】
一方、ＣＰＵコア１１１は、読出命令が完了したか否か判定する（ステップＳ６１０）。完了していないと判定した場合（ステップＳ６１０：Ｎｏ）、完了するまで当該判定を繰り返す。
【００５２】
一方、ＣＰＵコア１１１が、読出命令が完了し、データが読み出せたことを確認した場合（ステップＳ６１０：Ｙｅｓ）、読み出したデータに基づく処理を行う。
【００５３】
そして、取得部３０５が、読出命令を実行してから読出処理が終了するまでの、読出命令実行サイクルＴを取得する（ステップＳ６１１）。読出命令実行サイクルＴは、読出命令の実行から、読出命令の完了までの時間を示し、今回の遅延を示す時間となる。
【００５４】
そして、取得部３０５は、プリフェッチ情報テーブル３０１から読み出した遅延情報は後の処理で必要となることもあるので、当該遅延情報を、過去の実行サイクルＰｒｅｖＴに格納する（ステップＳ６１２）。
【００５５】
その後、取得部３０５は、今回取得した読出命令実行サイクルＴと、読み出した遅延情報とを加算した後、２で割った値を新たな遅延情報として取得する（ステップＳ６１３）。その後、取得部３０５は、プリフェッチ情報テーブル３０１から読み出した回数を‘１’減算する（ステップＳ６１４）。その後、特定部３０６が、回数が‘０’より大きいか否かを判定する（ステップＳ６１５）。‘０’よりも大きいと判定した場合、更新部３１１は、ステップＳ６１３で取得した遅延情報、及びステップＳ６１４で取得した回数で、プリフェッチ情報テーブル３０１を更新する（ステップＳ６１７）。
【００５６】
一方、特定部３０６が、回数が‘０’以下であると判定した場合（ステップＳ６１５：Ｎｏ）、特定部３０６及び更新部３１１の処理により、プリフェッチ情報テーブル３０１を更新する（ステップＳ６１６）。
【００５７】
なお、図６のステップＳ６０４〜Ｓ６０９の処理は、ステップＳ６０３の読出命令と、ステップＳ６１０による読み出し命令の完了との間に実行することに制限するものではなく、どのタイミングで行っても良い。例えば、Ｓ６０３とステップＳ６１０との処理と並行して行っても良い。
【００５８】
次に、本実施の形態にかかる情報処理装置１００のＣＰＵコア１１１における、図６のステップＳ６１６で示したプリフェッチ情報テーブル３０１の更新処理について説明する。図７は、本実施の形態にかかる情報処理装置１００のＣＰＵコア１１１における上述した処理の手順を示すフローチャートである。
【００５９】
まず、特定部３０６が、図６の処理手順で算出した遅延情報が、オンキャッシュのデータアクセス以下か否かを判定する（ステップＳ７０１）。遅延情報がオンキャッシュのデータアクセス以下と判定した場合、換言すればオンキャッシュと同等かそれより読出が早い場合（ステップＳ７０１：Ｙｅｓ）、特定部３０６は、向き情報が“**1b”であるか否かを判定する（ステップＳ７０２）。向き情報が“**1b”と判定された場合（ステップＳ７０２：Ｙｅｓ）、特定部３０６は、距離情報を変更する必要がないため、ステップＳ７１２の処理に進む。
【００６０】
一方、特定部３０６が、向き情報が“**1b”ではないと判定した場合（ステップＳ７０２：Ｎｏ）、距離情報から、δを減算する（ステップＳ７０３）。当該減算処理で、読出命令に近いアドレスをプリフェッチするよう距離情報が調節されたことになる。当該減算は、今回はオンキャッシュのデータアクセスができたため、現在からより近い将来にアクセスするであろうアドレスに対するプリフェッチとしても、キャッシュミスしない可能性が高いと考えられたためである。
【００６１】
ところで、δは、情報処理装置１００のシステム設定で、距離情報を調節するために、予め定められた値（例えば１６）とする。なお、本実施の形態では、距離情報の調整として、固定値δを用いたが、当該固定値の増減ではなく、特定の比率（たとえば１０％）で増減させてもよい。
【００６２】
その後、特定部３０６は、向き情報を１つ一桁左にシフトさせた後、“111b”とＡＮＤをとる。これにより向き情報が“**0b”となる（ステップＳ７０４）。その後、特定部３０６は、ステップＳ７１２の処理に進む。
【００６３】
一方、ステップＳ７０１において、特定部３０６が、遅延情報が、オンキャッシュのデータアクセスより大きいと判定した場合（ステップＳ７０１：Ｎｏ）、過去の実行サイクルＰｒｅｖＴが、今回算出した遅延情報より大きいか否か判定する（ステップＳ７０５）。
【００６４】
特定部３０６が、過去の実行サイクルＰｒｅｖＴより、今回算出した遅延情報が大きいと判定した場合（ステップＳ７０５：Ｎｏ）、向きを逆方向に戻す必要があるので、最後の向きと逆の方向に距離を調整する。つまり、特定部３０６は、向き情報が“**1b”であるか否か判定する（ステップＳ７０６）。そして、特定部３０６は、向き情報が“**1b”であると判定した場合（ステップＳ７０６：Ｙｅｓ）、距離情報から、δを減算し（ステップＳ７０３）、向き情報を１つ一桁左にシフトさせた後、“111b”とＡＮＤをとる（ステップＳ７０４）。
【００６５】
また、ステップＳ７０６において、特定部３０６が、向き情報が“**1b”ではない、つまり“**0b”であると判定した場合（ステップＳ７０６：Ｎｏ）、距離情報に対して、δを加算し（ステップＳ７０７）、向き情報を１つ一桁左にシフトさせた後、“1”を加算した上で“111b”とＡＮＤをとる（ステップＳ７０８）。その後、特定部３０６は、ステップＳ７１２の処理に進む。これらの処理で、逆方向に距離が調整されたことになる。
【００６６】
一方、ステップＳ７０５において、特定部３０６が、過去の実行サイクルＰｒｅｖＴが、今回算出した遅延情報より大きいと判定した、つまり前回の遅延よりも今回の遅延の方が小さい場合（ステップＳ７０５：Ｙｅｓ）、向き情報が“001b”であるか否かを判定する（ステップＳ７０９）。向き情報が“001b”であると判定した場合（ステップＳ７０９：Ｙｅｓ）には、ステップＳ７１２の処理に進む。
【００６７】
その後、特定部３０６は、向き情報が“001b”ではないと判定した場合（ステップＳ７０９：Ｎｏ）、向き情報が“110b”であるか否かを判定する（ステップＳ７１０）。向き情報が“110b”であると判定した場合（ステップＳ７１０：Ｙｅｓ）には、ステップＳ７１２の処理に進む。
【００６８】
一方、特定部３０６は、向き情報が“110b”ではないと判定した場合（ステップＳ７１０：Ｎｏ）、向き情報が“**1b”であるか否かを判定する（ステップＳ７１１）。そして、向き情報が“**1b”であると判定した場合（ステップＳ７１１：Ｙｅｓ）、ステップＳ７０７の処理に進み、**1b”ではないと判定した場合（ステップＳ７１１：Ｎｏ）、ステップＳ７０３の処理に進む。
【００６９】
つまり、同一方向で継続して距離の調節を行っている場合には、同一方向の調節を継続させる。そうでない（例えば、向き情報が“110b”又は“001b”となった）場合は、最小値に到達したと判断し、次の変化に備えたアップデートのみを行う。なお、向き情報“001b”及び“110b”は、一回行き過ぎた後、戻したことを示し、最適な距離が設定されたことを示している。
【００７０】
その後、特定部３０６は、実行サイクルＴを遅延情報として設定する（ステップＳ７１２）。その後、予め定められた値Ｎ（例えば、“８”）を回数に設定する（ステップＳ７１３）。
【００７１】
そして、更新部３１１が上述した処理手順で設定された、距離情報、向き情報、遅延情報及び回数を用いて、プリフェッチ情報テーブル３０１の該当エントリ情報を記憶させる更新を行う（ステップＳ７１４）。
【００７２】
上述した処理手順により、本実施の形態にかかる情報処理装置１００の各ＣＰＵコアで、距離情報が適切な値になるよう調整が行われることになる。
【００７３】
つまり、本実施の形態にかかる情報処理装置１００では、上述した構成により、実行頻度の高い命令に対する更新が最も有効に働くので、全体の性能向上に寄与する部分のプリフェッチ距離のプログラム実行時の最適化を実現できる。
【００７４】
また、本実施の形態は、ＣＰＵ内に格納されるコアの数を制限するものではなく、４個より多くても良いし、４個より少ない数であっても良い。ＣＰＵ内のコアの数が多くなるほど、ＣＰＵコアに基づいて３次キャッシュの配置が決定される傾向にあるため、本実施の形態で示した処理及び構成がより有効となる。なお、ＣＰＵ内のコアが１つしかない場合であっても、上述した処理及び構成を適用することができる。
【００７５】
本実施の形態にかかる情報処理装置１００では、プログラム実行時に、プリフェッチ情報テーブルの先読み距離を自動調整することで、データをキャッシュから読み出すことによる処理速度を向上できる。さらに、キャッシュにデータを格納されるタイミングが適切なタイミングとなるため、キャッシュの効率的な利用が可能となる。
【００７６】
つまり、本実施の形態にかかる情報処理装置１００では、各ＣＰＵコアがプリフェッチを行うことによって、データの読み出し命令があった場合に逐次読み出しを行う場合に比べて処理応答速度を大幅に短縮できる。
【００７７】
つまり、本実施の形態にかかる情報処理装置１００では、プリフェッチ命令による命令効率の低下を防ぐとともに、どの程度未来にアクセスするデータをプリフェッチするのかをプログラム実行時に、データの所在やアクセス遅延に適応して、自動調整するため、プログラムの実行効率を大幅に向上させることができる。
【００７８】
上述した処理及び構成は、メモリアクセスのレイテンシが一様でないマイクロプロセッサにおいてダイナミックに変化するデータの配置やシステムの状況に応じて、データのプリフェッチを最適なタイミングに自動的に調整できる。これにより、メモリアクセスのレイテンシを大幅に短縮することが可能となる。
【００７９】
本実施の形態にかかる情報処理装置１００では、遅延情報の平均を取りながら距離情報等を更新する方式について説明した。しかしながら、このような方式に制限するものではなく、毎回、最新の遅延情報に基づいて距離情報等を更新してもよい。さらには、遅延情報をサイクルオーダーよりも荒い単位で取得して、プリフェッチ情報テーブルのビット幅を節約してもよい。さらには、向き情報の履歴も別の形式で示しても良い。
【００８０】
さらには、本実施の形態では、アドレスが増加方向のデータアクセスパターンの例について説明したが、減少方向へのアクセスパターンに対応する変形例も考えられる。つまり、プログラム実行しているときに、プリフェッチで利用される距離情報を最適化するよう自動的に調整できる技術であればよい。
【００８１】
また、本実施の形態で示した各構成は、ＣＰＵコア内のハードウェアで実現しても良いし、ＣＰＵコア内で実行されるソフトウェアで実現しても良い。
【００８２】
本実施の形態では、プリフェッチ付きロード命令の例について説明したが、プリフェッチ付きロード命令に制限するものではない。マイクロプロセッサによっては、ロード命令以外の命令をプリフェッチ命令として実装したものも存在する。このようなマイクロプロセッサについても、上述した実施の形態と同様の実装を行うことで、同様の機能を実現できる。
【００８３】
また、上述した各実施の形態に限定されるものではなく、以下に例示するような種々の変形が可能である。
【００８４】
（変形例）
上述した実施の形態では、複数のＣＰＵがメインメモリ１０２を共通して利用する例について説明した。しかしながら、このような例に制限するものではない。そこで、変形例では、ＣＰＵ毎に異なるメモリが備えている例について説明する。図８は、本変形例にかかる情報処理装置８００における、ＣＰＵ８０１〜８０４と周辺の構成を示すブロック図である。図８に示すように、ＣＰＵ８０１〜８０４は、それぞれ接続されているとともに、実施の形態と同様に、複数のＣＰＵコアを備えている。そして、ＣＰＵ８０１〜８０４には、それぞれメモリ８０１〜８０４が接続されている。このような接続状況においては、各ＣＰＵ８１１〜８１４内のＣＰＵコアは、どのメモリ８１１〜８１４からデータを読み出すのかに応じて、かかる時間が異なる。
【００８５】
このような構成であっても、実施の形態と同様の処理を行うことで、適切なプリフェッチが行えるよう調整することができる。
【００８６】
このような変形例の構成に限らず、メニイコアのＣＰＵが１つのみ備えた構成や、さらに多くのＣＰＵを備えた構成であっても適用できる。
【００８７】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【００８８】
１００、８００  情報処理装置
１０１＿１〜１０１＿Ｎ、８０１〜８０４  ＣＰＵ
１０２  メインメモリ
１０３  バス
１１１〜１１８  ＣＰＵコア
１２１〜１２４  １次キャッシュ
１３１〜１３４  ２次キャッシュ
１４１、１４２  ３次キャッシュ
３０１  プリフェッチ情報テーブル
３０２  命令シーケンサ
３０３  算出部
３０４  プリフェッチ実行部
３０５  取得部
３０６  特定部
３０７  テーブル制御部
３１１  更新部
８１１〜８１４  メモリ
【図１】
2012014417.tif 000003
【図２】
2012014417.tif 000004
【図３】
2012014417.tif 000005
【図４】
2012014417.tif 000006
【図５】
2012014417.tif 000007
【図６】
2012014417.tif 000008
【図７】
2012014417.tif 000009
【図８】
2012014417.tif 000010