プロセッサ及びプリフェッチ制御方法
【課題】本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを転送する。
【解決手段】本プロセッサは、実行ユニットとキャッシュとキャッシュブロックを主記憶からキャッシュに転送する主記憶制御部とキャッシュブロックの転送指示を主記憶制御部に出力するマルチブロックプリフェッチ制御部とを有する。そして、実行ユニットは、プログラム内の所定の処理の前に挿入された第1prefetch開始命令を実行し、プリフェッチ対象領域情報を含む第2prefetch開始命令をマルチブロックプリフェッチ制御部に出力する。また、マルチブロックプリフェッチ制御部は、第2prefetch開始命令を受信した場合、当該命令に含まれるプリフェッチ対象領域情報とキャッシュブロックの大きさとに基づき、転送すべき複数のキャッシュブロックを特定し、複数のキャッシュブロックを所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を出力する。
【解決手段】本プロセッサは、実行ユニットとキャッシュとキャッシュブロックを主記憶からキャッシュに転送する主記憶制御部とキャッシュブロックの転送指示を主記憶制御部に出力するマルチブロックプリフェッチ制御部とを有する。そして、実行ユニットは、プログラム内の所定の処理の前に挿入された第1prefetch開始命令を実行し、プリフェッチ対象領域情報を含む第2prefetch開始命令をマルチブロックプリフェッチ制御部に出力する。また、マルチブロックプリフェッチ制御部は、第2prefetch開始命令を受信した場合、当該命令に含まれるプリフェッチ対象領域情報とキャッシュブロックの大きさとに基づき、転送すべき複数のキャッシュブロックを特定し、複数のキャッシュブロックを所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサにおけるプリフェッチ制御技術に関する。
【背景技術】
【0002】
近年、プロセッサ(例えばCPU:Central Processing Unit)の処理速度が向上しつつある。一方で、主記憶装置(メインメモリとも呼ぶ)の性能がプロセッサに追いついておらず、例えば、処理に必要なデータがプロセッサ内部のキャッシュメモリに存在しない場合には、プロセッサは、そのデータが主記憶装置から転送されるのを待たなくてはならない。従って、プロセッサの処理速度が向上しても、システム全体としては処理速度がそれほど向上しないという問題がある。
【0003】
この問題を解決するための技術として、主記憶装置からキャッシュメモリにデータを事前に読み出しておく、プリフェッチと呼ばれる技術が存在する。プリフェッチには、プロセッサが、必要になると思われるデータを自動的に予測し、主記憶装置から読み出すハードウェアプリフェッチと、プログラム内に挿入されたプリフェッチ命令に従って、指定されたデータを主記憶装置から読み出すソフトウェアプリフェッチとがある。
【0004】
例えば、図1に示すようなプログラムに対し、従来技術によりプリフェッチを実装する場合の例を説明する。
【0005】
図1において、行101は、double型の二次元配列Aを定義しており、二次元配列Aの1次元目の配列の要素数はIMAX、2次元目の配列の要素数はLENとなっている。なお、二次元配列Aの各要素は、A[i][k]で表される(i及びkは、配列のインデックスを表す変数であり、0≦i<IMAX、0≦k<LENである)。また、図1において、ループ102は、iを0からIMAX−1まで変化させるループとなっている。さらに、ループ103は、ループ102内のループであり、kを0からJMAX−1まで変化させるループとなっている。そして、ループ103内には、主要処理104が含まれる。なお、主要処理104は、二次元配列Aを参照する処理となっている。
【0006】
図2に、図1に示したプログラムを実行した際の処理を時系列に並べた例を示す。図2では、i=0の場合に、主要処理104でA[0][0]からA[0][LEN−1]までのデータ(図2では、これらのデータをまとめてA[0][*]と示す)を参照することを表す。また、i=1の場合に、主要処理104でA[1][0]からA[1][LEN−1]までのデータ(図2では、これらのデータをまとめてA[1][*]と示す)を参照し、i=2の場合に、主要処理104でA[2][0]からA[2][LEN−1]までのデータ(図2では、これらのデータをまとめてA[2][*]と示す)を参照することを表す。例えば、プリフェッチがなされていないと、i=0の処理からi=1の処理に移行する際に、i=1の処理で参照するA[1][*](すなわち、A[1][0]〜A[1][LEN−1])のデータを主記憶装置からキャッシュメモリに転送しなければならず、プロセッサが待たされることになる。一方で、i=0の処理の際に、i=1の処理で参照するであろうA[1][*](すなわち、A[1][0]〜A[1][LEN−1])のデータをプリフェッチしておけば、プロセッサが待たされることなく、次の処理に移行できる。すなわち、iの処理の際に、A[i+1][*](すなわち、A[i+1][0]〜A[i+1][LEN−1])のデータをプリフェッチすればよい。
【0007】
上記ようなプリフェッチをソフトウェアプリフェッチで実装する場合の例を図3に示す。図3の例では、図1に示したプログラムのループ103内にプリフェッチ命令301が挿入されている。プリフェッチ命令301は、引数で指定されたアドレスを含むキャッシュブロックをプリフェッチさせる命令である。なお、キャッシュブロックとは、予め所定のサイズに区画された領域であり、キャッシュブロック単位で主記憶からキャッシュメモリに転送される。このように、プログラム内にプリフェッチ命令301を挿入することで、プリフェッチさせることが可能となる。
【0008】
しかし、図3のように、ループ103内にプリフェッチ命令301を挿入すると、プリフェッチ命令301がループ103のループ回数だけ(すなわち、JMAX回)実行されることになる。プリフェッチ命令もプロセッサの実行ユニットを使用するため、プリフェッチ命令の実行回数が多くなると、本来の処理命令の実行を妨げてしまう。また、キャッシュメモリは小容量のため、プリフェッチするデータ量が多すぎると、本来の処理命令で使用するはずのデータがキャッシュメモリから追い出されてしまう可能性もある。例えば、条件によってプリフェッチ命令103を実行させるか否かを判断させることは可能であるが、ループ103内に条件分岐命令を挿入しなければならず、かえって本来の処理命令の実行の妨げとなる。
【0009】
また、1回のプリフェッチ命令301の実行につき、1キャッシュブロックを転送するため、逆に、ループ103のループ回数があまりにも少ないと(例えば、ループ回数が、転送すべきキャッシュブロックの数より小さい場合)、転送すべきキャッシュブロックを全て転送することができず、結果として、プロセッサが待たされることになる。
【0010】
一方、ハードウェアプリフェッチは、上で述べたように、プロセッサが、必要になると思われるデータを予測し、そのデータを読み出すものであり、一定の範囲のデータをまとめて読み出すようにはなっていない。
【0011】
また、プリフェッチに関する技術として、例えば、特開平08−314802号公報記載の技術がある。具体的には、複数のライン(上記のキャッシュブロックに相当)のデータをキャッシュメモリに転送させる際、各ラインのデータがキャッシュメモリ内にあるか判断し、既にキャッシュメモリにデータが存在する場合には、不要なプリフェッチ要求を出さないようにするものである。しかし、キャッシュメモリにデータが存在しない場合には、複数のプリフェッチ要求を連続して出すことになるため、上記のような問題が生じる場合がある。
【0012】
さらに、例えば、特開平06−324942号公報には、システム全体の高速化を図る並列計算機システムが開示されている。具体的には、共有バスに共有メモリと複数のCPUとを結合させた並列計算機システムにおいて、共有バスと共有メモリの間に共有メモリ上のデータの一部を格納して高速化を図るキャッシュメモリを備え、各CPUから共有メモリに対してアクセスが予想されるデータを予めキャッシュメモリに格納しておくことを特徴とする並列計算機システムが開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【0013】
また、例えば、特開平07−129464号公報には、主記憶装置とキャッシュメモリ間における情報の転送を制御する情報処理装置が開示されている。具体的には、実行すべき命令及び処理すべきデータに関する情報を格納する主記憶手段と、主記憶手段に格納された命令に従って、主記憶手段に格納されたデータを処理する命令処理手段と、主記憶手段に格納された情報の一部を格納するキャッシュメモリと、アプリケーションプログラムに応じたキャッシュメモリ制御情報を格納する制御情報記憶手段と、制御情報記憶手段に格納されたキャッシュメモリ制御情報に従って主記憶手段とキャッシュメモリ間における情報の転送を制御するメモリ制御手段とを備えている情報処理装置が開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【0014】
さらに、例えば、特開2004−348175号公報には、データのプリフェッチ命令に、そのデータの利用時刻に関する情報を付加し、前記利用時刻に関する情報をもとに前記プリフェッチ命令の発行タイミングをスケジュールすることを特徴とするプリフェッチ命令制御方法が開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【0015】
また、例えば、特開2003−223359号公報には、予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理装置が開示されている。具体的には、キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するプリフェッチ対象選択手段と、プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測するアドレス予測手段と、プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定するプリフェッチ命令挿入位置決定手段と、アドレス予測手段によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、プリフェッチ命令挿入位置決定手段によって決定された挿入位置に、挿入するプリフェッチ命令挿入手段とを具備する演算処理装置が開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【特許文献1】特開平08−314802号公報
【特許文献2】特開平06−324942号公報
【特許文献3】特開平07−129464号公報
【特許文献4】特開2004−348175号公報
【特許文献5】特開2003−223359号公報
【発明の開示】
【発明が解決しようとする課題】
【0016】
上で述べたように、従来技術によれば、プリフェッチすべきデータが複数のキャッシュブロックに渡る場合でもプリフェッチすることが可能である。しかし、本来の処理命令の実行を妨げてしまい、システム全体の処理速度をかえって低下させる可能性がある。
【0017】
従って、本発明の目的は、本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを主記憶装置からキャッシュメモリに転送するための技術を提供することである。
【課題を解決するための手段】
【0018】
本発明に係るプロセッサは、プログラムを実行する実行ユニットと、キャッシュメモリと、所定の大きさのキャッシュブロックを主記憶からキャッシュメモリに転送する主記憶制御部と、キャッシュブロックの転送指示を主記憶制御部に出力するマルチブロックプリフェッチ制御部とを有する。そして、実行ユニットは、プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令を実行し、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令をマルチブロックプリフェッチ制御部に出力する。また、マルチブロックプリフェッチ制御部は、実行ユニットから第2プリフェッチ開始命令を受信した場合に、第2プリフェッチ開始命令に含まれるプリフェッチ対象領域の情報とキャッシュブロックの所定の大きさとに基づいて、転送すべき複数のキャッシュブロックを特定し、複数のキャッシュブロックを主記憶からキャッシュメモリに所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を出力する。
【0019】
例えば所定の間隔で転送指示を主記憶制御部に出力するようにすれば、本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを主記憶装置からキャッシュメモリに転送させることができる。また、従来、開発者は、プリフェッチ命令の数や挿入場所(例えば、何ステップ前に挿入するか等)を試行錯誤して探していたが、所定の処理(例えば、ループ処理)の前に第1プリフェッチ開始命令を挿入すれば良いので、従来の煩雑な作業が不要になる。
【0020】
また、マルチブロックプリフェッチ制御部は、主記憶制御部における主記憶アクセス用リソースの使用状況を監視し、主記憶アクセス用リソースが空いている場合に、転送指示を出力するようにしてもよい。
【0021】
さらに、実行ユニットは、プログラム内の所定の処理の後に挿入された第1プリフェッチ終了命令を実行し、第2プリフェッチ終了命令をマルチブロックプリフェッチ制御部に出力するようにしてもよい。また、マルチブロックプリフェッチ制御部は、実行ユニットから第2プリフェッチ終了命令を受信した場合に、第2プリフェッチ開始命令を受信してから第2プリフェッチ終了命令を受信するまでの時間と当該時間に対応する第1プリフェッチ開始命令を特定するための所定の情報とを実行履歴テーブルに格納するようにしてもよい。そして、マルチブロックプリフェッチ制御部は、実行履歴テーブルに格納された情報を基に所定の処理の実行時間を推定するようにしてもよい。例えば、前回の実行時間や過去数回の実行時間の平均時間を今回の実行時間とみなすことで、今回の実行時間を適切に推定することができる。
【0022】
また、マルチブロックプリフェッチ制御部は、推定された、所定の処理の実行時間を基に複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に転送指示の出力時間を特定するようにしてもよい。そして、マルチブロックプリフェッチ制御部は、出力時間に達した場合又は主記憶制御部における主記憶アクセス用のリソースが空いている場合に、転送指示を出力するようにしてもよい。このようにすれば、本来の処理命令の実行に対する影響を、より抑えることができる。
【0023】
また、所定の処理が、第1プリフェッチ開始命令と第1プリフェッチ終了命令との間の処理を所定回数繰り返すループ処理である場合もある。
【発明の効果】
【0024】
本発明によれば、本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを主記憶装置からキャッシュメモリに転送することができる。
【発明を実施するための最良の形態】
【0025】
図4に本発明の一実施の形態に係るプロセッサ1の機能ブロック図を示す。本実施の形態に係るプロセッサ1は、キャッシュメモリ13と、データやプログラム等をキャッシュメモリ13から読み出し、命令を実行する実行ユニット11と、実行ユニット11からの指示に従って、複数のキャッシュブロックをキャッシュメモリ13に転送するようにスケジューリングするマルチブロックプリフェッチ制御部15と、実行ユニット11の参照すべきデータがキャッシュメモリ13に存在しない場合、又はマルチブロックプリフェッチ制御部15からの転送指示を受信した場合に、主記憶3からキャッシュメモリ13にデータを転送する主記憶制御部17とを有する。なお、プロセッサ1と主記憶3とは、バスで接続されている。
【0026】
さらに、マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151と実行履歴テーブル152とを含み、これらを用いて処理を行う。なお、プリフェッチ予定表151と実行履歴テーブル152については後で説明する。
【0027】
図5に、図1に示したプログラムに対し、本発明を適用してプリフェッチを実装する場合のプログラムの一例を示す。図5の例では、従来のプリフェッチ命令301(図3)の代わりに、プリフェッチ開始命令(mb.prefetch.start命令)501がループ103の直前に挿入され、プリフェッチ終了命令(mb.prefetch.end命令)502がループ103の直後に挿入されている。プリフェッチ開始命令501では、プリフェッチ対象領域を指定するようになっている。なお、本実施の形態では、先頭アドレス及び末尾アドレスによって、プリフェッチ対象領域を指定するようになっている。図5の例では、A[i+1][0]のアドレスを先頭アドレス、A[i+2][0]のアドレスを末尾アドレスとして指定するようになっている。従って、例えば、i=1の場合は、A[2][0]のアドレスを先頭アドレス、A[3][0]のアドレスを末尾アドレスとしてプリフェッチ開始命令501が実行される。
【0028】
図6乃至図11を用いて、プロセッサ1がプリフェッチ開始命令501を実行した際の処理を説明する。まず、プロセッサ1の実行ユニット11は、プリフェッチ開始命令501を実行し、プリフェッチ開始命令501で指定された先頭アドレスと末尾アドレスとを含むマルチブロックプリフェッチ開始命令をマルチブロックプリフェッチ制御部15に出力する。また、実行ユニット11は、プリフェッチ開始命令501の命令アドレスをマルチブロックプリフェッチ制御部15に出力するようにする。マルチブロックプリフェッチ制御部15は、先頭アドレスと末尾アドレスとを含むマルチブロックプリフェッチ開始命令を実行ユニット11から受信し(図6:ステップS1)、内部に一旦格納する。このとき、プリフェッチ開始命令501の命令アドレス及びマルチブロックプリフェッチ開始命令の受信時刻も合わせて格納する。そして、マルチブロックプリフェッチ制御部15は、先頭アドレスと末尾アドレスとをキャッシュブロックの境界にアライメントする(ステップS3)。この処理については、図7を用いて説明する。
【0029】
図7は、キャッシュブロックのサイズが64B(バイト)の際に、先頭アドレスとして0xa0000060、末尾アドレスとして0xa0000160が指定された場合の例を示す。上でも述べたが、主記憶3からキャッシュメモリ13へのデータの転送は、キャッシュブロック単位で行われるため、先頭アドレス(0xa0000060)及び末尾アドレス(0xa0000160)をキャッシュブロックの境界と合わせる必要がある。キャッシュブロックのサイズが64Bの場合であれば、例えば、以下の(1)及び(2)式によって、調整後の先頭アドレス及び末尾アドレスを算出することができる。なお、演算子「&」は、ビットごとの論理積を求める演算子である。
(調整後先頭アドレス)= 0xffffffc0 &(先頭アドレス) (1)
(調整後末尾アドレス)= 0xffffffc0 &(末尾アドレス+0x0000003f) (2)
図7の例では、(1)式により、調整後先頭アドレス(0xa0000040)が算出され、(2)式により、調整後末尾アドレス(0xa0000180)が算出される。
【0030】
図6の説明に戻って、マルチブロックプリフェッチ制御部15は、調整後先頭アドレスと調整後末尾アドレスとに基づきプリフェッチ対象ブロック数を算出する(ステップS5)。図7の例であれば、プリフェッチ対象ブロック数は5となる。そして、マルチブロックプリフェッチ制御部15は、プリフェッチ開始命令501の命令アドレスをキーとして実行履歴テーブル152を検索し、経過時間を取得する(ステップS7)。
【0031】
図8に、実行履歴テーブル152に格納されるデータの一例を示す。図8の例では、命令アドレスと経過時間とが格納されるようになっている。命令アドレスには、プリフェッチ開始命令501の命令アドレスが格納される。また、経過時間には、マルチブロックプリフェッチ開始命令を受信してから、後で述べるマルチブロックプリフェッチ終了命令を受信するまでの時間が格納される。従って、同一の命令アドレスのプリフェッチ開始命令501が過去に実行されている場合には、その際の実行時間を取得することができる。本実施の形態では、プリフェッチをいつまでに完了すべきかを同一処理の過去の実行時間から推定し、推定された時間内に、プリフェッチ対象ブロック数分のキャッシュブロックを転送するようにスケジューリングする。なお、同一の命令アドレスのプリフェッチ開始命令501が過去に実行されていない場合には(すなわち、実行履歴テーブル152に該当する経過時間が格納されていない場合には)、デフォルトの時間を使用する。
【0032】
マルチブロックプリフェッチ制御部15は、取得した経過時間とプリフェッチ対象ブロック数とに基づいてプリフェッチ間隔を算出する(ステップS9)。例えば、経過時間が500、プリフェッチ対象ブロック数が5の場合には、プリフェッチ間隔は100となる。そして、マルチブロックプリフェッチ制御部15は、調整後先頭アドレスとプリフェッチ間隔とプリフェッチ対象ブロック数とを基にプリフェッチ予定表151を生成する(ステップS11)。例えば、図9に示すようなプリフェッチ予定表が生成される。
【0033】
図9の例では、プリフェッチアドレスとカウンタとプリフェッチ間隔と残ブロック数とが格納されるようになっている。プリフェッチアドレスには、初期値として調整後先頭アドレスが設定される。残ブロック数には、初期値としてプリフェッチ対象ブロック数が設定される。また、本実施の形態では、カウンタには、初期値として0を設定する。
【0034】
そして、処理は端子Aを介して図10の処理に移行する。マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151の残ブロック数が0より大きいか判断する(図10:ステップS13)。もし、残ブロック数が0の場合(ステップS13:Noルート)、処理を終了する。
【0035】
一方、残ブロック数が0より大きい場合(ステップS13:Yesルート)、マルチブロックプリフェッチ制御部15は、カウンタが0になったか判断する(ステップS15)。なお、図示していないが、カウンタは、マルチブロックプリフェッチ制御部15のタイマ等によって定期的にデクリメントされるものとする。カウンタがまだ0になっていない場合(ステップS15:Noルート)、マルチブロックプリフェッチ制御部15は、主記憶制御部17における、主記憶にアクセスするためのリソースが空いているか判断する(ステップS17)。もし、主記憶にアクセスするためのリソースが空いていない場合(ステップS17:Noルート)、ステップS13の処理に戻る。
【0036】
一方、カウンタが0の場合(ステップS15:Yesルート)、又は主記憶にアクセスするためのリソースが空いている場合(ステップS17:Yesルート)、マルチブロックプリフェッチ制御部15は、プリフェッチアドレスを含むプリフェッチ指示を主記憶制御部17に出力する(ステップS19)。
【0037】
そして、マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151を更新する(ステップS21)。例えば、図9に示したプリフェッチ予定表は、図11に示すようなプリフェッチ予定表に更新される。図11において、プリフェッチアドレスは、更新前のプリフェッチアドレス(0xa0000040)にキャッシュブロックのサイズ(64B)分だけ加算され、次のキャッシュブロックを示すアドレス(0xa0000080)となっている。また、カウンタはプリフェッチ間隔の値でリセットされ、残ブロック数は1デクリメントされている。
【0038】
以上のような処理を実施することにより、本来の処理命令に対する影響を抑えるように、複数のキャッシュブロックの転送をスケジューリングすることができる。
【0039】
次に、図12を用いて、プロセッサ1がプリフェッチ終了命令502を実行した際の処理を説明する。まず、プロセッサ1の実行ユニット11は、プリフェッチ終了命令502を実行し、マルチブロックプリフェッチ終了命令をマルチブロックプリフェッチ制御部15に出力する。マルチブロックプリフェッチ制御部15は、マルチブロックプリフェッチ終了命令を実行ユニット11から受信し(図12:ステップS23)、内部に一旦格納する。このとき、マルチブロックプリフェッチ終了命令の受信時刻も合わせて格納する。そして、マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151を削除する(ステップS25)。なお、未転送のキャッシュブロックがある場合(すなわち、残ブロック数が1以上の場合)、プリフェッチをその時点で中止する。
【0040】
そして、マルチブロックプリフェッチ制御部15は、実行履歴を実行履歴テーブル152に格納する(ステップS27)。具体的には、マルチブロックプリフェッチ制御部15は、マルチブロックプリフェッチ開始命令の受信時刻とマルチブロックプリフェッチ終了命令の受信時刻との差を経過時間として実行履歴テーブル152に格納する。同時に、命令アドレスとしてプリフェッチ開始命令501の命令アドレスを格納する。
【0041】
以上のような処理を実施することにより、複数のキャッシュブロックの転送をスケジューリングする際に必要となる実行時間を適切に推定することができるようになる。
【0042】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、図4に示したプロセッサ1の機能ブロック図は一例であって、上で述べた機能を実現できれば図4の機能ブロック構成に限定されるわけではない。さらに、処理フローにおいても、処理結果が変らなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【0043】
また、プリフェッチ開始命令501では、先頭アドレスと末尾アドレスとを指定するようになっているが、先頭アドレスとプリフェッチ対象領域のサイズとを指定するようにしてもよい。この場合、ステップS3の処理の前に、先頭アドレスとプリフェッチ対象領域のサイズから末尾アドレスを算出すればよい。
【0044】
また、例えば、プリフェッチ開始命令501の前に条件分岐命令を挿入し、条件によってプリフェッチ開始命令501を実行させるようなプログラムにしてもよい。例えば、プリフェッチ対象領域が大きすぎると、本来の処理命令で使用するはずのデータを追い出してしまい、処理速度をかえって低下させる可能性があるため、プリフェッチ対象領域が所定の大きさを超えるような場合にはプリフェッチ開始命令501を実行させないような条件分岐命令を挿入すればよい。なお、従来のプリフェッチ命令301(図3)はループ103内に挿入されるため、条件分岐命令もループ103内に挿入しなければならなかったが、本発明においては、プリフェッチ開始命令501がループ103外に挿入されるため、条件分岐命令もループ103外に挿入できる。すなわち、条件分岐命令を挿入したとしても、本来の処理命令の実行に対する影響は、従来に比べて少ない。
【0045】
また、上で説明したテーブルの構成は一例であって、必ずしも上記のような構成でなければならないわけではない。例えば、実行履歴テーブル152において、前回の実行時間を取得できる構成であれば、命令アドレス以外の情報と対応付けて経過時間を格納することも可能である。また、実行ユニット11が、プリフェッチ開始命令501を実行してからプリフェッチ終了命令502を実行するまでの時間を実行履歴テーブル152に格納するように構成することも可能である。
【0046】
(付記1)
プログラムを実行する実行ユニットと、
キャッシュメモリと、
所定の大きさのキャッシュブロックを主記憶から前記キャッシュメモリに転送する主記憶制御部と、
前記キャッシュブロックの転送指示を前記主記憶制御部に出力するマルチブロックプリフェッチ制御部と、
を有し、
前記実行ユニットは、
前記プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令を実行し、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報と前記キャッシュブロックの前記所定の大きさとに基づいて、転送すべき複数のキャッシュブロックを特定し、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、前記転送指示を出力する
プロセッサ。
【0047】
(付記2)
前記マルチブロックプリフェッチ制御部は、
前記主記憶制御部における主記憶アクセス用リソースの使用状況を監視し、前記主記憶アクセス用リソースが空いている場合に、前記転送指示を出力する
付記1記載のプロセッサ。
【0048】
(付記3)
前記実行ユニットは、
前記プログラム内の所定の処理の後に挿入された第1プリフェッチ終了命令を実行し、第2プリフェッチ終了命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ終了命令を受信した場合に、前記第2プリフェッチ開始命令を受信してから前記第2プリフェッチ終了命令を受信するまでの時間と当該時間に対応する前記第1プリフェッチ開始命令を特定するための所定の情報とを実行履歴テーブルに格納する
付記1記載のプロセッサ。
【0049】
(付記4)
前記マルチブロックプリフェッチ制御部は、
前記実行履歴テーブルに格納された情報を基に前記所定の処理の実行時間を推定する
付記3記載のプロセッサ。
【0050】
(付記5)
前記マルチブロックプリフェッチ制御部は、
推定された、前記所定の処理の実行時間を基に前記複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に前記転送指示の出力時間を特定する
付記4記載のプロセッサ。
【0051】
(付記6)
前記マルチブロックプリフェッチ制御部は、
前記複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に前記転送指示の出力時間を特定する
付記1記載のプロセッサ。
【0052】
(付記7)
前記マルチブロックプリフェッチ制御部は、
前記出力時間に達した場合又は前記主記憶制御部における主記憶アクセス用のリソースが空いている場合に、前記転送指示を出力する
付記5又は6記載のプロセッサ。
【0053】
(付記8)
前記マルチブロックプリフェッチ制御部は、
前記転送指示を出力した後、前記複数のキャッシュブロックのうち未転送のキャッシュブロックがある場合には、前記転送間隔を基に次に出力すべき前記転送指示の出力時間を特定する
付記7記載のプロセッサ。
【0054】
(付記9)
前記プリフェッチ対象領域の情報が、当該プリフェッチ対象領域の先頭アドレスと当該プリフェッチ対象領域の終了アドレス又はサイズとを含む
付記1記載のプロセッサ。
【0055】
(付記10)
前記所定の処理が、前記第1プリフェッチ開始命令と前記第1プリフェッチ終了命令との間の処理を所定回数繰り返すループ処理である
付記3記載のプロセッサ。
【0056】
(付記11)
プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令の実行時に実行ユニットから出力され、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報とキャッシュブロックのサイズとに基づいて、主記憶からキャッシュメモリに転送すべき複数のキャッシュブロックを特定するステップと、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を主記憶制御部に出力するステップと、
を含む、プリフェッチ制御方法。
【図面の簡単な説明】
【0057】
【図1】プリフェッチを必要とするプログラムの一例を示す図である。
【図2】図1に示したプログラムの処理とプリフェッチとの関係を時系列で表した図である。
【図3】従来技術によりプリフェッチを実装する場合のプログラムの一例を示す図である。
【図4】本発明の実施の形態におけるプロセッサの機能ブロック図を示す図である。
【図5】本発明を適用してプリフェッチを実装する場合のプログラムの一例を示す図である。
【図6】プリフェッチ開始命令を実行した際の処理フロー(第1の部分)を示す図である。
【図7】アドレスのアライメントを説明するための図である。
【図8】実行履歴テーブルに格納されるデータの一例を示す図である。
【図9】プリフェッチ予定表に格納されるデータの一例を示す図である。
【図10】プリフェッチ開始命令を実行した際の処理フロー(第2の部分)を示す図である。
【図11】更新後のプリフェッチ予定表に格納されるデータの一例を示す図である。
【図12】プリフェッチ終了命令を実行した際の処理フローを示す図である。
【符号の説明】
【0058】
1 プロセッサ 3 主記憶
11 実行ユニット 13 キャッシュメモリ
15 マルチブロックプリフェッチ制御部 17 主記憶制御部
151 プリフェッチ予定表 152 実行履歴テーブル
【技術分野】
【0001】
本発明は、プロセッサにおけるプリフェッチ制御技術に関する。
【背景技術】
【0002】
近年、プロセッサ(例えばCPU:Central Processing Unit)の処理速度が向上しつつある。一方で、主記憶装置(メインメモリとも呼ぶ)の性能がプロセッサに追いついておらず、例えば、処理に必要なデータがプロセッサ内部のキャッシュメモリに存在しない場合には、プロセッサは、そのデータが主記憶装置から転送されるのを待たなくてはならない。従って、プロセッサの処理速度が向上しても、システム全体としては処理速度がそれほど向上しないという問題がある。
【0003】
この問題を解決するための技術として、主記憶装置からキャッシュメモリにデータを事前に読み出しておく、プリフェッチと呼ばれる技術が存在する。プリフェッチには、プロセッサが、必要になると思われるデータを自動的に予測し、主記憶装置から読み出すハードウェアプリフェッチと、プログラム内に挿入されたプリフェッチ命令に従って、指定されたデータを主記憶装置から読み出すソフトウェアプリフェッチとがある。
【0004】
例えば、図1に示すようなプログラムに対し、従来技術によりプリフェッチを実装する場合の例を説明する。
【0005】
図1において、行101は、double型の二次元配列Aを定義しており、二次元配列Aの1次元目の配列の要素数はIMAX、2次元目の配列の要素数はLENとなっている。なお、二次元配列Aの各要素は、A[i][k]で表される(i及びkは、配列のインデックスを表す変数であり、0≦i<IMAX、0≦k<LENである)。また、図1において、ループ102は、iを0からIMAX−1まで変化させるループとなっている。さらに、ループ103は、ループ102内のループであり、kを0からJMAX−1まで変化させるループとなっている。そして、ループ103内には、主要処理104が含まれる。なお、主要処理104は、二次元配列Aを参照する処理となっている。
【0006】
図2に、図1に示したプログラムを実行した際の処理を時系列に並べた例を示す。図2では、i=0の場合に、主要処理104でA[0][0]からA[0][LEN−1]までのデータ(図2では、これらのデータをまとめてA[0][*]と示す)を参照することを表す。また、i=1の場合に、主要処理104でA[1][0]からA[1][LEN−1]までのデータ(図2では、これらのデータをまとめてA[1][*]と示す)を参照し、i=2の場合に、主要処理104でA[2][0]からA[2][LEN−1]までのデータ(図2では、これらのデータをまとめてA[2][*]と示す)を参照することを表す。例えば、プリフェッチがなされていないと、i=0の処理からi=1の処理に移行する際に、i=1の処理で参照するA[1][*](すなわち、A[1][0]〜A[1][LEN−1])のデータを主記憶装置からキャッシュメモリに転送しなければならず、プロセッサが待たされることになる。一方で、i=0の処理の際に、i=1の処理で参照するであろうA[1][*](すなわち、A[1][0]〜A[1][LEN−1])のデータをプリフェッチしておけば、プロセッサが待たされることなく、次の処理に移行できる。すなわち、iの処理の際に、A[i+1][*](すなわち、A[i+1][0]〜A[i+1][LEN−1])のデータをプリフェッチすればよい。
【0007】
上記ようなプリフェッチをソフトウェアプリフェッチで実装する場合の例を図3に示す。図3の例では、図1に示したプログラムのループ103内にプリフェッチ命令301が挿入されている。プリフェッチ命令301は、引数で指定されたアドレスを含むキャッシュブロックをプリフェッチさせる命令である。なお、キャッシュブロックとは、予め所定のサイズに区画された領域であり、キャッシュブロック単位で主記憶からキャッシュメモリに転送される。このように、プログラム内にプリフェッチ命令301を挿入することで、プリフェッチさせることが可能となる。
【0008】
しかし、図3のように、ループ103内にプリフェッチ命令301を挿入すると、プリフェッチ命令301がループ103のループ回数だけ(すなわち、JMAX回)実行されることになる。プリフェッチ命令もプロセッサの実行ユニットを使用するため、プリフェッチ命令の実行回数が多くなると、本来の処理命令の実行を妨げてしまう。また、キャッシュメモリは小容量のため、プリフェッチするデータ量が多すぎると、本来の処理命令で使用するはずのデータがキャッシュメモリから追い出されてしまう可能性もある。例えば、条件によってプリフェッチ命令103を実行させるか否かを判断させることは可能であるが、ループ103内に条件分岐命令を挿入しなければならず、かえって本来の処理命令の実行の妨げとなる。
【0009】
また、1回のプリフェッチ命令301の実行につき、1キャッシュブロックを転送するため、逆に、ループ103のループ回数があまりにも少ないと(例えば、ループ回数が、転送すべきキャッシュブロックの数より小さい場合)、転送すべきキャッシュブロックを全て転送することができず、結果として、プロセッサが待たされることになる。
【0010】
一方、ハードウェアプリフェッチは、上で述べたように、プロセッサが、必要になると思われるデータを予測し、そのデータを読み出すものであり、一定の範囲のデータをまとめて読み出すようにはなっていない。
【0011】
また、プリフェッチに関する技術として、例えば、特開平08−314802号公報記載の技術がある。具体的には、複数のライン(上記のキャッシュブロックに相当)のデータをキャッシュメモリに転送させる際、各ラインのデータがキャッシュメモリ内にあるか判断し、既にキャッシュメモリにデータが存在する場合には、不要なプリフェッチ要求を出さないようにするものである。しかし、キャッシュメモリにデータが存在しない場合には、複数のプリフェッチ要求を連続して出すことになるため、上記のような問題が生じる場合がある。
【0012】
さらに、例えば、特開平06−324942号公報には、システム全体の高速化を図る並列計算機システムが開示されている。具体的には、共有バスに共有メモリと複数のCPUとを結合させた並列計算機システムにおいて、共有バスと共有メモリの間に共有メモリ上のデータの一部を格納して高速化を図るキャッシュメモリを備え、各CPUから共有メモリに対してアクセスが予想されるデータを予めキャッシュメモリに格納しておくことを特徴とする並列計算機システムが開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【0013】
また、例えば、特開平07−129464号公報には、主記憶装置とキャッシュメモリ間における情報の転送を制御する情報処理装置が開示されている。具体的には、実行すべき命令及び処理すべきデータに関する情報を格納する主記憶手段と、主記憶手段に格納された命令に従って、主記憶手段に格納されたデータを処理する命令処理手段と、主記憶手段に格納された情報の一部を格納するキャッシュメモリと、アプリケーションプログラムに応じたキャッシュメモリ制御情報を格納する制御情報記憶手段と、制御情報記憶手段に格納されたキャッシュメモリ制御情報に従って主記憶手段とキャッシュメモリ間における情報の転送を制御するメモリ制御手段とを備えている情報処理装置が開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【0014】
さらに、例えば、特開2004−348175号公報には、データのプリフェッチ命令に、そのデータの利用時刻に関する情報を付加し、前記利用時刻に関する情報をもとに前記プリフェッチ命令の発行タイミングをスケジュールすることを特徴とするプリフェッチ命令制御方法が開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【0015】
また、例えば、特開2003−223359号公報には、予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理装置が開示されている。具体的には、キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択するプリフェッチ対象選択手段と、プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測するアドレス予測手段と、プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定するプリフェッチ命令挿入位置決定手段と、アドレス予測手段によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、プリフェッチ命令挿入位置決定手段によって決定された挿入位置に、挿入するプリフェッチ命令挿入手段とを具備する演算処理装置が開示されている。しかし、複数のキャッシュブロックを転送するような場合については考慮されていない。
【特許文献1】特開平08−314802号公報
【特許文献2】特開平06−324942号公報
【特許文献3】特開平07−129464号公報
【特許文献4】特開2004−348175号公報
【特許文献5】特開2003−223359号公報
【発明の開示】
【発明が解決しようとする課題】
【0016】
上で述べたように、従来技術によれば、プリフェッチすべきデータが複数のキャッシュブロックに渡る場合でもプリフェッチすることが可能である。しかし、本来の処理命令の実行を妨げてしまい、システム全体の処理速度をかえって低下させる可能性がある。
【0017】
従って、本発明の目的は、本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを主記憶装置からキャッシュメモリに転送するための技術を提供することである。
【課題を解決するための手段】
【0018】
本発明に係るプロセッサは、プログラムを実行する実行ユニットと、キャッシュメモリと、所定の大きさのキャッシュブロックを主記憶からキャッシュメモリに転送する主記憶制御部と、キャッシュブロックの転送指示を主記憶制御部に出力するマルチブロックプリフェッチ制御部とを有する。そして、実行ユニットは、プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令を実行し、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令をマルチブロックプリフェッチ制御部に出力する。また、マルチブロックプリフェッチ制御部は、実行ユニットから第2プリフェッチ開始命令を受信した場合に、第2プリフェッチ開始命令に含まれるプリフェッチ対象領域の情報とキャッシュブロックの所定の大きさとに基づいて、転送すべき複数のキャッシュブロックを特定し、複数のキャッシュブロックを主記憶からキャッシュメモリに所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を出力する。
【0019】
例えば所定の間隔で転送指示を主記憶制御部に出力するようにすれば、本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを主記憶装置からキャッシュメモリに転送させることができる。また、従来、開発者は、プリフェッチ命令の数や挿入場所(例えば、何ステップ前に挿入するか等)を試行錯誤して探していたが、所定の処理(例えば、ループ処理)の前に第1プリフェッチ開始命令を挿入すれば良いので、従来の煩雑な作業が不要になる。
【0020】
また、マルチブロックプリフェッチ制御部は、主記憶制御部における主記憶アクセス用リソースの使用状況を監視し、主記憶アクセス用リソースが空いている場合に、転送指示を出力するようにしてもよい。
【0021】
さらに、実行ユニットは、プログラム内の所定の処理の後に挿入された第1プリフェッチ終了命令を実行し、第2プリフェッチ終了命令をマルチブロックプリフェッチ制御部に出力するようにしてもよい。また、マルチブロックプリフェッチ制御部は、実行ユニットから第2プリフェッチ終了命令を受信した場合に、第2プリフェッチ開始命令を受信してから第2プリフェッチ終了命令を受信するまでの時間と当該時間に対応する第1プリフェッチ開始命令を特定するための所定の情報とを実行履歴テーブルに格納するようにしてもよい。そして、マルチブロックプリフェッチ制御部は、実行履歴テーブルに格納された情報を基に所定の処理の実行時間を推定するようにしてもよい。例えば、前回の実行時間や過去数回の実行時間の平均時間を今回の実行時間とみなすことで、今回の実行時間を適切に推定することができる。
【0022】
また、マルチブロックプリフェッチ制御部は、推定された、所定の処理の実行時間を基に複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に転送指示の出力時間を特定するようにしてもよい。そして、マルチブロックプリフェッチ制御部は、出力時間に達した場合又は主記憶制御部における主記憶アクセス用のリソースが空いている場合に、転送指示を出力するようにしてもよい。このようにすれば、本来の処理命令の実行に対する影響を、より抑えることができる。
【0023】
また、所定の処理が、第1プリフェッチ開始命令と第1プリフェッチ終了命令との間の処理を所定回数繰り返すループ処理である場合もある。
【発明の効果】
【0024】
本発明によれば、本来の処理命令の実行に対する影響を抑えつつ、複数のキャッシュブロックを主記憶装置からキャッシュメモリに転送することができる。
【発明を実施するための最良の形態】
【0025】
図4に本発明の一実施の形態に係るプロセッサ1の機能ブロック図を示す。本実施の形態に係るプロセッサ1は、キャッシュメモリ13と、データやプログラム等をキャッシュメモリ13から読み出し、命令を実行する実行ユニット11と、実行ユニット11からの指示に従って、複数のキャッシュブロックをキャッシュメモリ13に転送するようにスケジューリングするマルチブロックプリフェッチ制御部15と、実行ユニット11の参照すべきデータがキャッシュメモリ13に存在しない場合、又はマルチブロックプリフェッチ制御部15からの転送指示を受信した場合に、主記憶3からキャッシュメモリ13にデータを転送する主記憶制御部17とを有する。なお、プロセッサ1と主記憶3とは、バスで接続されている。
【0026】
さらに、マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151と実行履歴テーブル152とを含み、これらを用いて処理を行う。なお、プリフェッチ予定表151と実行履歴テーブル152については後で説明する。
【0027】
図5に、図1に示したプログラムに対し、本発明を適用してプリフェッチを実装する場合のプログラムの一例を示す。図5の例では、従来のプリフェッチ命令301(図3)の代わりに、プリフェッチ開始命令(mb.prefetch.start命令)501がループ103の直前に挿入され、プリフェッチ終了命令(mb.prefetch.end命令)502がループ103の直後に挿入されている。プリフェッチ開始命令501では、プリフェッチ対象領域を指定するようになっている。なお、本実施の形態では、先頭アドレス及び末尾アドレスによって、プリフェッチ対象領域を指定するようになっている。図5の例では、A[i+1][0]のアドレスを先頭アドレス、A[i+2][0]のアドレスを末尾アドレスとして指定するようになっている。従って、例えば、i=1の場合は、A[2][0]のアドレスを先頭アドレス、A[3][0]のアドレスを末尾アドレスとしてプリフェッチ開始命令501が実行される。
【0028】
図6乃至図11を用いて、プロセッサ1がプリフェッチ開始命令501を実行した際の処理を説明する。まず、プロセッサ1の実行ユニット11は、プリフェッチ開始命令501を実行し、プリフェッチ開始命令501で指定された先頭アドレスと末尾アドレスとを含むマルチブロックプリフェッチ開始命令をマルチブロックプリフェッチ制御部15に出力する。また、実行ユニット11は、プリフェッチ開始命令501の命令アドレスをマルチブロックプリフェッチ制御部15に出力するようにする。マルチブロックプリフェッチ制御部15は、先頭アドレスと末尾アドレスとを含むマルチブロックプリフェッチ開始命令を実行ユニット11から受信し(図6:ステップS1)、内部に一旦格納する。このとき、プリフェッチ開始命令501の命令アドレス及びマルチブロックプリフェッチ開始命令の受信時刻も合わせて格納する。そして、マルチブロックプリフェッチ制御部15は、先頭アドレスと末尾アドレスとをキャッシュブロックの境界にアライメントする(ステップS3)。この処理については、図7を用いて説明する。
【0029】
図7は、キャッシュブロックのサイズが64B(バイト)の際に、先頭アドレスとして0xa0000060、末尾アドレスとして0xa0000160が指定された場合の例を示す。上でも述べたが、主記憶3からキャッシュメモリ13へのデータの転送は、キャッシュブロック単位で行われるため、先頭アドレス(0xa0000060)及び末尾アドレス(0xa0000160)をキャッシュブロックの境界と合わせる必要がある。キャッシュブロックのサイズが64Bの場合であれば、例えば、以下の(1)及び(2)式によって、調整後の先頭アドレス及び末尾アドレスを算出することができる。なお、演算子「&」は、ビットごとの論理積を求める演算子である。
(調整後先頭アドレス)= 0xffffffc0 &(先頭アドレス) (1)
(調整後末尾アドレス)= 0xffffffc0 &(末尾アドレス+0x0000003f) (2)
図7の例では、(1)式により、調整後先頭アドレス(0xa0000040)が算出され、(2)式により、調整後末尾アドレス(0xa0000180)が算出される。
【0030】
図6の説明に戻って、マルチブロックプリフェッチ制御部15は、調整後先頭アドレスと調整後末尾アドレスとに基づきプリフェッチ対象ブロック数を算出する(ステップS5)。図7の例であれば、プリフェッチ対象ブロック数は5となる。そして、マルチブロックプリフェッチ制御部15は、プリフェッチ開始命令501の命令アドレスをキーとして実行履歴テーブル152を検索し、経過時間を取得する(ステップS7)。
【0031】
図8に、実行履歴テーブル152に格納されるデータの一例を示す。図8の例では、命令アドレスと経過時間とが格納されるようになっている。命令アドレスには、プリフェッチ開始命令501の命令アドレスが格納される。また、経過時間には、マルチブロックプリフェッチ開始命令を受信してから、後で述べるマルチブロックプリフェッチ終了命令を受信するまでの時間が格納される。従って、同一の命令アドレスのプリフェッチ開始命令501が過去に実行されている場合には、その際の実行時間を取得することができる。本実施の形態では、プリフェッチをいつまでに完了すべきかを同一処理の過去の実行時間から推定し、推定された時間内に、プリフェッチ対象ブロック数分のキャッシュブロックを転送するようにスケジューリングする。なお、同一の命令アドレスのプリフェッチ開始命令501が過去に実行されていない場合には(すなわち、実行履歴テーブル152に該当する経過時間が格納されていない場合には)、デフォルトの時間を使用する。
【0032】
マルチブロックプリフェッチ制御部15は、取得した経過時間とプリフェッチ対象ブロック数とに基づいてプリフェッチ間隔を算出する(ステップS9)。例えば、経過時間が500、プリフェッチ対象ブロック数が5の場合には、プリフェッチ間隔は100となる。そして、マルチブロックプリフェッチ制御部15は、調整後先頭アドレスとプリフェッチ間隔とプリフェッチ対象ブロック数とを基にプリフェッチ予定表151を生成する(ステップS11)。例えば、図9に示すようなプリフェッチ予定表が生成される。
【0033】
図9の例では、プリフェッチアドレスとカウンタとプリフェッチ間隔と残ブロック数とが格納されるようになっている。プリフェッチアドレスには、初期値として調整後先頭アドレスが設定される。残ブロック数には、初期値としてプリフェッチ対象ブロック数が設定される。また、本実施の形態では、カウンタには、初期値として0を設定する。
【0034】
そして、処理は端子Aを介して図10の処理に移行する。マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151の残ブロック数が0より大きいか判断する(図10:ステップS13)。もし、残ブロック数が0の場合(ステップS13:Noルート)、処理を終了する。
【0035】
一方、残ブロック数が0より大きい場合(ステップS13:Yesルート)、マルチブロックプリフェッチ制御部15は、カウンタが0になったか判断する(ステップS15)。なお、図示していないが、カウンタは、マルチブロックプリフェッチ制御部15のタイマ等によって定期的にデクリメントされるものとする。カウンタがまだ0になっていない場合(ステップS15:Noルート)、マルチブロックプリフェッチ制御部15は、主記憶制御部17における、主記憶にアクセスするためのリソースが空いているか判断する(ステップS17)。もし、主記憶にアクセスするためのリソースが空いていない場合(ステップS17:Noルート)、ステップS13の処理に戻る。
【0036】
一方、カウンタが0の場合(ステップS15:Yesルート)、又は主記憶にアクセスするためのリソースが空いている場合(ステップS17:Yesルート)、マルチブロックプリフェッチ制御部15は、プリフェッチアドレスを含むプリフェッチ指示を主記憶制御部17に出力する(ステップS19)。
【0037】
そして、マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151を更新する(ステップS21)。例えば、図9に示したプリフェッチ予定表は、図11に示すようなプリフェッチ予定表に更新される。図11において、プリフェッチアドレスは、更新前のプリフェッチアドレス(0xa0000040)にキャッシュブロックのサイズ(64B)分だけ加算され、次のキャッシュブロックを示すアドレス(0xa0000080)となっている。また、カウンタはプリフェッチ間隔の値でリセットされ、残ブロック数は1デクリメントされている。
【0038】
以上のような処理を実施することにより、本来の処理命令に対する影響を抑えるように、複数のキャッシュブロックの転送をスケジューリングすることができる。
【0039】
次に、図12を用いて、プロセッサ1がプリフェッチ終了命令502を実行した際の処理を説明する。まず、プロセッサ1の実行ユニット11は、プリフェッチ終了命令502を実行し、マルチブロックプリフェッチ終了命令をマルチブロックプリフェッチ制御部15に出力する。マルチブロックプリフェッチ制御部15は、マルチブロックプリフェッチ終了命令を実行ユニット11から受信し(図12:ステップS23)、内部に一旦格納する。このとき、マルチブロックプリフェッチ終了命令の受信時刻も合わせて格納する。そして、マルチブロックプリフェッチ制御部15は、プリフェッチ予定表151を削除する(ステップS25)。なお、未転送のキャッシュブロックがある場合(すなわち、残ブロック数が1以上の場合)、プリフェッチをその時点で中止する。
【0040】
そして、マルチブロックプリフェッチ制御部15は、実行履歴を実行履歴テーブル152に格納する(ステップS27)。具体的には、マルチブロックプリフェッチ制御部15は、マルチブロックプリフェッチ開始命令の受信時刻とマルチブロックプリフェッチ終了命令の受信時刻との差を経過時間として実行履歴テーブル152に格納する。同時に、命令アドレスとしてプリフェッチ開始命令501の命令アドレスを格納する。
【0041】
以上のような処理を実施することにより、複数のキャッシュブロックの転送をスケジューリングする際に必要となる実行時間を適切に推定することができるようになる。
【0042】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、図4に示したプロセッサ1の機能ブロック図は一例であって、上で述べた機能を実現できれば図4の機能ブロック構成に限定されるわけではない。さらに、処理フローにおいても、処理結果が変らなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【0043】
また、プリフェッチ開始命令501では、先頭アドレスと末尾アドレスとを指定するようになっているが、先頭アドレスとプリフェッチ対象領域のサイズとを指定するようにしてもよい。この場合、ステップS3の処理の前に、先頭アドレスとプリフェッチ対象領域のサイズから末尾アドレスを算出すればよい。
【0044】
また、例えば、プリフェッチ開始命令501の前に条件分岐命令を挿入し、条件によってプリフェッチ開始命令501を実行させるようなプログラムにしてもよい。例えば、プリフェッチ対象領域が大きすぎると、本来の処理命令で使用するはずのデータを追い出してしまい、処理速度をかえって低下させる可能性があるため、プリフェッチ対象領域が所定の大きさを超えるような場合にはプリフェッチ開始命令501を実行させないような条件分岐命令を挿入すればよい。なお、従来のプリフェッチ命令301(図3)はループ103内に挿入されるため、条件分岐命令もループ103内に挿入しなければならなかったが、本発明においては、プリフェッチ開始命令501がループ103外に挿入されるため、条件分岐命令もループ103外に挿入できる。すなわち、条件分岐命令を挿入したとしても、本来の処理命令の実行に対する影響は、従来に比べて少ない。
【0045】
また、上で説明したテーブルの構成は一例であって、必ずしも上記のような構成でなければならないわけではない。例えば、実行履歴テーブル152において、前回の実行時間を取得できる構成であれば、命令アドレス以外の情報と対応付けて経過時間を格納することも可能である。また、実行ユニット11が、プリフェッチ開始命令501を実行してからプリフェッチ終了命令502を実行するまでの時間を実行履歴テーブル152に格納するように構成することも可能である。
【0046】
(付記1)
プログラムを実行する実行ユニットと、
キャッシュメモリと、
所定の大きさのキャッシュブロックを主記憶から前記キャッシュメモリに転送する主記憶制御部と、
前記キャッシュブロックの転送指示を前記主記憶制御部に出力するマルチブロックプリフェッチ制御部と、
を有し、
前記実行ユニットは、
前記プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令を実行し、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報と前記キャッシュブロックの前記所定の大きさとに基づいて、転送すべき複数のキャッシュブロックを特定し、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、前記転送指示を出力する
プロセッサ。
【0047】
(付記2)
前記マルチブロックプリフェッチ制御部は、
前記主記憶制御部における主記憶アクセス用リソースの使用状況を監視し、前記主記憶アクセス用リソースが空いている場合に、前記転送指示を出力する
付記1記載のプロセッサ。
【0048】
(付記3)
前記実行ユニットは、
前記プログラム内の所定の処理の後に挿入された第1プリフェッチ終了命令を実行し、第2プリフェッチ終了命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ終了命令を受信した場合に、前記第2プリフェッチ開始命令を受信してから前記第2プリフェッチ終了命令を受信するまでの時間と当該時間に対応する前記第1プリフェッチ開始命令を特定するための所定の情報とを実行履歴テーブルに格納する
付記1記載のプロセッサ。
【0049】
(付記4)
前記マルチブロックプリフェッチ制御部は、
前記実行履歴テーブルに格納された情報を基に前記所定の処理の実行時間を推定する
付記3記載のプロセッサ。
【0050】
(付記5)
前記マルチブロックプリフェッチ制御部は、
推定された、前記所定の処理の実行時間を基に前記複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に前記転送指示の出力時間を特定する
付記4記載のプロセッサ。
【0051】
(付記6)
前記マルチブロックプリフェッチ制御部は、
前記複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に前記転送指示の出力時間を特定する
付記1記載のプロセッサ。
【0052】
(付記7)
前記マルチブロックプリフェッチ制御部は、
前記出力時間に達した場合又は前記主記憶制御部における主記憶アクセス用のリソースが空いている場合に、前記転送指示を出力する
付記5又は6記載のプロセッサ。
【0053】
(付記8)
前記マルチブロックプリフェッチ制御部は、
前記転送指示を出力した後、前記複数のキャッシュブロックのうち未転送のキャッシュブロックがある場合には、前記転送間隔を基に次に出力すべき前記転送指示の出力時間を特定する
付記7記載のプロセッサ。
【0054】
(付記9)
前記プリフェッチ対象領域の情報が、当該プリフェッチ対象領域の先頭アドレスと当該プリフェッチ対象領域の終了アドレス又はサイズとを含む
付記1記載のプロセッサ。
【0055】
(付記10)
前記所定の処理が、前記第1プリフェッチ開始命令と前記第1プリフェッチ終了命令との間の処理を所定回数繰り返すループ処理である
付記3記載のプロセッサ。
【0056】
(付記11)
プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令の実行時に実行ユニットから出力され、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報とキャッシュブロックのサイズとに基づいて、主記憶からキャッシュメモリに転送すべき複数のキャッシュブロックを特定するステップと、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を主記憶制御部に出力するステップと、
を含む、プリフェッチ制御方法。
【図面の簡単な説明】
【0057】
【図1】プリフェッチを必要とするプログラムの一例を示す図である。
【図2】図1に示したプログラムの処理とプリフェッチとの関係を時系列で表した図である。
【図3】従来技術によりプリフェッチを実装する場合のプログラムの一例を示す図である。
【図4】本発明の実施の形態におけるプロセッサの機能ブロック図を示す図である。
【図5】本発明を適用してプリフェッチを実装する場合のプログラムの一例を示す図である。
【図6】プリフェッチ開始命令を実行した際の処理フロー(第1の部分)を示す図である。
【図7】アドレスのアライメントを説明するための図である。
【図8】実行履歴テーブルに格納されるデータの一例を示す図である。
【図9】プリフェッチ予定表に格納されるデータの一例を示す図である。
【図10】プリフェッチ開始命令を実行した際の処理フロー(第2の部分)を示す図である。
【図11】更新後のプリフェッチ予定表に格納されるデータの一例を示す図である。
【図12】プリフェッチ終了命令を実行した際の処理フローを示す図である。
【符号の説明】
【0058】
1 プロセッサ 3 主記憶
11 実行ユニット 13 キャッシュメモリ
15 マルチブロックプリフェッチ制御部 17 主記憶制御部
151 プリフェッチ予定表 152 実行履歴テーブル
【特許請求の範囲】
【請求項1】
プログラムを実行する実行ユニットと、
キャッシュメモリと、
所定の大きさのキャッシュブロックを主記憶から前記キャッシュメモリに転送する主記憶制御部と、
前記キャッシュブロックの転送指示を前記主記憶制御部に出力するマルチブロックプリフェッチ制御部と、
を有し、
前記実行ユニットは、
前記プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令を実行し、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報と前記キャッシュブロックの前記所定の大きさとに基づいて、転送すべき複数のキャッシュブロックを特定し、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、前記転送指示を出力する
プロセッサ。
【請求項2】
前記実行ユニットは、
前記プログラム内の所定の処理の後に挿入された第1プリフェッチ終了命令を実行し、第2プリフェッチ終了命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ終了命令を受信した場合に、前記第2プリフェッチ開始命令を受信してから前記第2プリフェッチ終了命令を受信するまでの時間と当該時間に対応する前記第1プリフェッチ開始命令を特定するための所定の情報とを実行履歴テーブルに格納する
請求項1記載のプロセッサ。
【請求項3】
前記マルチブロックプリフェッチ制御部は、
前記実行履歴テーブルに格納された情報を基に前記所定の処理の実行時間を推定する
請求項2記載のプロセッサ。
【請求項4】
前記マルチブロックプリフェッチ制御部は、
前記複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に前記転送指示の出力時間を特定する
請求項1記載のプロセッサ。
【請求項5】
前記マルチブロックプリフェッチ制御部は、
前記出力時間に達した場合又は前記主記憶制御部における主記憶アクセス用のリソースが空いている場合に、前記転送指示を出力する
請求項4記載のプロセッサ。
【請求項6】
プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令の実行時に実行ユニットから出力され、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報とキャッシュブロックのサイズとに基づいて、主記憶からキャッシュメモリに転送すべき複数のキャッシュブロックを特定するステップと、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を主記憶制御部に出力するステップと、
を含む、プリフェッチ制御方法。
【請求項1】
プログラムを実行する実行ユニットと、
キャッシュメモリと、
所定の大きさのキャッシュブロックを主記憶から前記キャッシュメモリに転送する主記憶制御部と、
前記キャッシュブロックの転送指示を前記主記憶制御部に出力するマルチブロックプリフェッチ制御部と、
を有し、
前記実行ユニットは、
前記プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令を実行し、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報と前記キャッシュブロックの前記所定の大きさとに基づいて、転送すべき複数のキャッシュブロックを特定し、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、前記転送指示を出力する
プロセッサ。
【請求項2】
前記実行ユニットは、
前記プログラム内の所定の処理の後に挿入された第1プリフェッチ終了命令を実行し、第2プリフェッチ終了命令を前記マルチブロックプリフェッチ制御部に出力し、
前記マルチブロックプリフェッチ制御部は、
前記実行ユニットから前記第2プリフェッチ終了命令を受信した場合に、前記第2プリフェッチ開始命令を受信してから前記第2プリフェッチ終了命令を受信するまでの時間と当該時間に対応する前記第1プリフェッチ開始命令を特定するための所定の情報とを実行履歴テーブルに格納する
請求項1記載のプロセッサ。
【請求項3】
前記マルチブロックプリフェッチ制御部は、
前記実行履歴テーブルに格納された情報を基に前記所定の処理の実行時間を推定する
請求項2記載のプロセッサ。
【請求項4】
前記マルチブロックプリフェッチ制御部は、
前記複数のキャッシュブロックの転送間隔を算出し、当該転送間隔を基に前記転送指示の出力時間を特定する
請求項1記載のプロセッサ。
【請求項5】
前記マルチブロックプリフェッチ制御部は、
前記出力時間に達した場合又は前記主記憶制御部における主記憶アクセス用のリソースが空いている場合に、前記転送指示を出力する
請求項4記載のプロセッサ。
【請求項6】
プログラム内の所定の処理の前に挿入された第1プリフェッチ開始命令の実行時に実行ユニットから出力され、当該第1プリフェッチ開始命令に係るプリフェッチ対象領域の情報を含む第2プリフェッチ開始命令を受信した場合に、前記第2プリフェッチ開始命令に含まれる前記プリフェッチ対象領域の情報とキャッシュブロックのサイズとに基づいて、主記憶からキャッシュメモリに転送すべき複数のキャッシュブロックを特定するステップと、
前記複数のキャッシュブロックを前記主記憶から前記キャッシュメモリに前記所定の処理の実行時間内で転送するようにスケジューリングし、転送指示を主記憶制御部に出力するステップと、
を含む、プリフェッチ制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2008−269450(P2008−269450A)
【公開日】平成20年11月6日(2008.11.6)
【国際特許分類】
【出願番号】特願2007−113792(P2007−113792)
【出願日】平成19年4月24日(2007.4.24)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成20年11月6日(2008.11.6)
【国際特許分類】
【出願日】平成19年4月24日(2007.4.24)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]