(57)【特許請求の範囲】
【請求項１】
通信可能な演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された前記命令列の前記実行位置に相当する位置以降を実行すると共に、実行した前記命令列のアクセス履歴を記録するシミュレーション手段と、
前記記録されたアクセス履歴に基づいて、前記演算装置におけるキャッシュメモリの制御規則を決定する決定手段と
を備えたキャッシュ制御装置。
【請求項２】
前記シミュレーション手段は、前記実行した前記命令列のうち前記メモリにアクセスを行う命令列がアクセスしたアドレスを前記アクセス履歴として記録する
請求項１記載のキャッシュ制御装置。
【請求項３】
前記シミュレーション手段は、自装置の前記メモリに展開された前記命令列のうち、前記予め取得されたアドレス情報に基づいて、ループで使用される変数を格納するアドレスに関わる命令列のみを実行する
請求項１または請求項２記載のキャッシュ制御装置。
【請求項４】
前記アドレス情報として、前記命令列のコンパイルの際に、ループに関する前記命令列の位置情報および変数が予め取得される
請求項１乃至請求項３のいずれか１項記載のキャッシュ制御装置。
【請求項５】
前記コンテキスト情報は、前記演算装置から前記プロセッサが停止する通知に応じて取得される
請求項１乃至請求項４のいずれか１項記載のキャッシュ制御装置。
【請求項６】
前記決定手段は、前記アクセス履歴に記録されたアドレスが、連続的または一定間隔で固定的にアクセスされるアドレスであるか、シーケンシャルにアクセスされるアドレスかに基づいて、前記実行された命令列に対する前記制御規則を決定する
請求項１乃至請求項５のいずれか１項記載のキャッシュ制御装置。
【請求項７】
プロセッサを備えた演算装置と、
前記演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された前記命令列の前記実行位置に相当する位置以降を実行すると共に、実行した前記命令列のアクセス履歴を記録するシミュレーション手段と、前記記録されたアクセス履歴に基づいて、前記演算装置におけるキャッシュメモリの制御規則を決定する決定手段とを備えたキャッシュ制御装置とを備え、
前記演算装置は、前記命令列の実行中に前記キャッシュ制御装置から前記制御規則を取得すると共に、当該取得した前記制御規則にしたがって前記命令列を実行する
キャッシュ制御システム。
【請求項８】
通信可能な演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された前記命令列の前記実行位置に相当する位置以降を実行すると共に、実行した前記命令列のアクセス履歴を記録し、
前記記録されたアクセス履歴に基づいて、前記演算装置におけるメモリの制御規則を決定する
キャッシュ制御方法。
【請求項９】
通信可能な演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された前記命令列の前記実行位置に相当する位置以降を実行すると共に、実行した前記命令列のアクセス履歴を記録する処理と、
前記記録されたアクセス履歴に基づいて、前記演算装置におけるメモリの制御規則を決定する処理と
を、コンピュータに実行させるキャッシュ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサからアクセスされたデータがキャッシュメモリにない場合に、メインメモリのデータとの置き換えを行う際の制御技術に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、通常、プロセッサからキャッシュメモリへのアクセス要求に対して、要求されたデータがキャッシュメモリに存在しない場合、メインメモリからデータが読み出されると共に、そのデータがキャッシュメモリのあるブロックに格納される。このとき、キャッシュメモリ中のいずれかのブロックを選択し、そのブロックのデータとメインメモリのデータを置き換える（以降、「キャッシュ制御」とも称する）必要がある。このデータを置き換える際の規則を、以降、「キャッシュポリシー」、「キャッシュ制御方式」または「制御規則」とも称する。
【０００３】
上記のようなデータの置き換えを行う一般的なキャッシュポリシーとして、例えば、最近最も使われていないデータを最初に捨てるＬｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ（ＬＲＵ）や、使われる頻度が最も少ないデータを最初に捨てるＬｅａｓｔ  Ｆｒｅｑｕｅｎｔｌｙ  Ｕｓｅｄ（ＬＦＵ）などがある。
【０００４】
しかしながら、上記のようなキャッシュポリシーでは、例えばループを含むプログラムにおいて、ループで使用される中間結果やインデックスが、長時間に亘ってアクセスされるものであっても、他のデータアクセスに比べてアクセス頻度が低い場合、キャッシュから捨てられてしまうことがある。このような場合、データをメインメモリからキャッシュに読み出すという動作が度々生じるので、プログラムの実行効率が悪化する。
【０００５】
このような問題に対し、例えばセクタキャッシュでは、ユーザがプログラムに関する知識を有することを前提に、プログラム中に挿入する指示行などによりキャッシュポリシーを事前に指定することができる。
【０００６】
また、一般的に考えられる方法として、メモリアクセスに関するトレースを行う試験実行を行い、その結果に基づいてキャッシュポリシーを動的に変更する方法が考えられる。
【０００７】
また、例えば、特許文献１には、命令毎にキャッシュポリシーを選択できる技術が開示されている。
【０００８】
また、特許文献２には、実行するプログラムに対して、適応的に置換規則を切り換えることにより、単一の置換規則を採用した場合よりも平均的にプログラムの実行速度を高める技術が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開昭６３−００８８５１号公報
【特許文献２】特開２００３−２８０９８７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述したように、プログラムの実行効率が悪化することを防ぐために、キャッシュポリシーを事前に指定することが考えられるが、この場合は、ユーザがプログラムに関する知識を有している必要がある。
【００１１】
また、プログラムの実行効率の悪化を防ぐ他の方法として、メモリアクセスに関するトレースを行うことが考えられるが、この方法では、事前のプログラム実行が必要となる。特許文献１に記載の技術についても、事前のキャッシュ制御方式の指定が必要である。
【００１２】
また、特許文献２に記載の技術では、アクセス要求あったときにキャッシュ制御方式の変更に関する処理を行うので、プログラムの実行効率が低下することが考えられる。
【００１３】
本願発明は、上記課題を鑑みてなされたものであり、プログラムに関する知識や事前準備を要することなく、またプログラムの実行効率を低下させることなく、キャッシュ制御を行うことが可能なキャッシュ制御装置等を提供することを主要な目的とする。
【課題を解決するための手段】
【００１４】
本発明の第１のキャッシュ制御装置は、通信可能な演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された前記命令列の前記実行位置に相当する位置以降を実行すると共に、実行した前記命令列のアクセス履歴を記録するシミュレーション手段と、前記記録されたアクセス履歴に基づいて、前記演算装置におけるキャッシュメモリの制御規則を決定する決定手段とを備える。
【００１５】
本発明の第１のキャッシュ制御方法は、通信可能な演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された前記命令列の前記実行位置に相当する位置以降を実行すると共に、実行した前記命令列のアクセス履歴を記録し、前記記録されたアクセス履歴に基づいて、前記演算装置におけるメモリの制御規則を決定する。
【００１６】
なお同目的は、上記の各構成を有するキャッシュ制御方法を、コンピュータによって実現するコンピュータ・プログラム、およびそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
【発明の効果】
【００１７】
本願発明によれば、プログラムに関する知識や事前準備を要することなく、またプログラムの実行効率を低下させることなく、キャッシュ制御を行うことができるという効果が得られる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第１の実施形態に係るキャッシュ制御システムの構成を示すブロック図である。
【図２】本発明の第１の実施形態に係るキャッシュ制御システムの処理を示すフローチャートである。
【図３】本発明の第１の実施形態に係るキャッシュ制御装置のループ情報の一例を示す図である。
【図４】本発明の第１の実施形態に係るキャッシュ制御装置のシミュレーション部の処理を示すフローチャートである。
【図５】本発明の第１の実施形態に係るキャッシュ制御装置のシミュレーション部により記録された、アクセスされたメモリのアドレスの履歴を時系列に示す図である。
【図６】本発明の第２の実施形態に係るキャッシュ制御装置の構成を示すブロック図である。
【図７】各実施形態に係るキャッシュ制御装置のハードウエア構成を例示する図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施形態について図面を参照して詳細に説明する。
【００２０】
第１の実施形態
図１は、本発明の第１の実施形態に係るキャッシュ制御システム１０の構成を示すブロック図である。科学技術計算など、大規模な演算を高速に行う必要があるＨＰＣ（Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）分野では、ホストマシンに格納されているプログラムを、演算に特化したアクセラレータで実行するシステムがある。本実施形態では、このようなシステムにおけるキャッシュ制御について説明する。
【００２１】
図１に示すように、第１の実施形態に係るキャッシュ制御システム１０は、ホストマシン１００と、そのホストマシン１００と通信可能に接続されたアクセラレータ２００とを備える。
【００２２】
ホストマシン１００は、通常のスカラ型スーパーコンピュータであり、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）などのインタフェースを備える。
【００２３】
アクセラレータ２００は、ベクトルプロセッサなどＨＰＣ向けの高速演算が行えるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備え、ＰＣＩｅなどのインタフェースで通常のサーバに接続できる。
【００２４】
ホストマシン１００は、プログラム実行管理部１１０、シミュレーション部１２０、キャッシュポリシー管理部１３０、実行形式記憶部１４０、メモリ１５０およびインタフェース１６０を備える。
【００２５】
プログラム実行管理部１１０は、アクセラレータ２００の資源やプロセスの動作を監視および管理する機能を持つ。プログラム実行管理部１１０はまた、プログラムを実行する際、実行形式記憶部１４０から実行形式ファイルをメモリ１５０に読み出してアクセラレータ２００のメモリ２２０に転送すると共に、アクセラレータ２００上にプロセスを生成する機能を持つ。この際、プログラム実行管理部１１０は、ホストマシン１００のメモリ１５０に読み出したイメージのアドレスと、アクセラレータ２００のメモリ２２０に展開されたイメージのアドレスを管理し、アクセラレータ２００に生成されたプロセスの実行位置のアドレスとホストマシン１００のメモリ１５０におけるアドレスとを変換する機能を持つ。
【００２６】
また、プログラム実行管理部１１０は、アクセラレータ２００のＣＰＵが停止する際に生成される割り込みを受信すると共に、キャッシュポリシー管理部１３０に通知する機能を持つ。
【００２７】
シミュレーション部１２０は、ホストマシン１００のメモリ１５０に展開されたプログラムの実行形式ファイルのイメージを解析する。そして、シミュレーション部１２０は、実行形式記憶部１４０のループ情報１４１（詳細は後述する）に基づいてシミュレーションを行う区間を決定するとともに、アクセラレータ２００で動作する命令列の動作を再現する機能を持つ。この際、シミュレーション部１２０は、メモリアクセスを行う命令についてそのアドレス（メモリのアクセス履歴）を時系列に記録する。また、シミュレーション部１２０は、演算命令に関しては、ベクトル演算など通常の演算命令については実行せず、ループのインデックスや配列の添え字を格納する変数として指定されたアドレスに関わる演算命令のみを実行する。
【００２８】
キャッシュポリシー管理部１３０は、シミュレーション部１２０により取得された、アクセスされたメモリのアドレスの記録を解析し、ループ実行におけるキャッシュポリシー（制御規則）を決定する機能を持つ。メモリのアクセス履歴からキャッシュポリシーを決定する例として、ここでは、連続的、あるいは一定間隔で固定的にアクセスされるアドレス領域についてはデータを保持したままにし、シーケンシャルにアクセスされるアドレス領域についてはＬＲＵ（あるいはＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ，  Ｆｉｒｓｔ  Ｏｕｔ））といった判断方法を採るものとする。
【００２９】
実行形式記憶部１４０は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの記憶媒体であり、プログラムの実行形式ファイルを格納する。実行形式ファイルは、アクセラレータ２００で実行可能なバイナリファイルであり、コンパイル時に、コンパイラによりループの入口および出口に相当する位置に、キャッシュ制御用のフック関数が挿入されているものとする。また、実行形式記憶部１４０は、ループの入口に相当する位置（オフセットなど）と、最外ループのループ長、ループ内で使われているインデックスのシンボル、アドレスに関する情報（オフセットなど）を含むループ情報１４１を格納する。
【００３０】
アクセラレータ２００は、キャッシュポリシー制御部２１０、メモリ２２０およびインタフェース２３０を備える。メモリ２２０には、ユーザプロセス２２１が格納され、アクセラレータ２００のＣＰＵによりユーザプロセス２２１が実行される。ユーザプロセス２２１は、プログラム実行管理部１１０によりアクセラレータ２００に生成された、ユーザプログラムのプロセスである。
【００３１】
キャッシュポリシー制御部２１０は、指定されたループのキャッシュポリシーを、ホストマシン１００のキャッシュポリシー管理部１３０に問い合わせ、その結果得られたキャッシュポリシーを、ループ実行時のキャッシュ制御に適用する機能を持つ。本実施形態では、特定のアドレス領域についてデータを保持したままにするか、ＬＲＵ（あるいはＦＩＦＯ）とするかを選択できるものとする。
【００３２】
図２は、キャッシュ制御システム１０の処理を示すフローチャートである。図２を参照して、キャッシュ制御システム１０の動作について説明する。
【００３３】
まず、ホストマシン１００におけるプログラムのコンパイル時の動作について説明する。プログラムのコンパイル時、ホストマシン１００が備えるコンパイラは、プログラムに含まれるループの入口および出口に相当する位置に、キャッシュポリシー制御部２１０を起動するフック関数を挿入する。
【００３４】
またこの際、コンパイラは、ループ入口位置のアドレス情報と、最外ループのループ長、ループ内で使われている全てのインデックスのアドレスに関する情報を取得し、ループ情報１４１として実行形式記憶部１４０に格納する。
【００３５】
図３は、ループ情報１４１の一例を示す図である。図３に示すように、ループ情報１４１は、例えば、入口アドレス情報、ループ長、インデックスアドレス情報を含む。インデックスアドレス情報は、例えば、最外ループのものから順に記録する。なお、ループ情報１４１として格納するループは全てのループを対象としてもよい。あるいは、高速化のため、コンパイラによる自動ベクトル化対象として選ばれる、ループ内に関数呼び出しや分岐が無く、ベクトル実行のコストを相殺するのに十分なループ長を持つループがコンパイラにより選択されてもよい。
【００３６】
以降、図２を参照して、プログラムの実行開始以降のキャッシュ制御システム１０の動作について説明する。
【００３７】
プログラムの実行開始時、ホストマシン１００のプログラム実行管理部１１０は、実行形式記憶部１４０から実行形式ファイルをメモリ１５０に読み出し、インタフェース１６０を介してアクセラレータ２００に転送する。アクセラレータ２００では、インタフェース２３０を介して実行形式ファイルがメモリ２２０に格納される。これにより、プログラム実行管理部１１０は、アクセラレータ２００のメモリ２２０上にユーザプロセス２２１を生成する（Ｓ３０１）。この際、プログラム実行管理部１１０は、ホストマシン１００のメモリ１５０上のアドレス空間とアクセラレータ２００のメモリ２２０上のアドレス空間とのマッピングを保持する（Ｓ３０２）。これにより、プログラム実行管理部１１０は、アクセラレータ２００のメモリ２２０上のアドレスとホストマシン１００のメモリ１５０上のアドレス空間とを変換できる。
【００３８】
続いて、プログラム実行管理部１１０は、システムコールの実行やコンテクストスイッチなどにより、アクセラレータ２００のＣＰＵが停止したことを検知したとする（Ｓ３０３においてＹｅｓ）。このとき、プログラム実行管理部１１０は、キャッシュポリシー管理部１３０に、その旨を通知する。
【００３９】
キャッシュポリシー管理部１３０は、プログラム実行管理部１１０を介してアクセラレータ２００のレジスタ値の取得を要求する（Ｓ３０４）。キャッシュポリシー管理部１３０は、レジスタ値を取得すると、それをシミュレーション部１２０に通知すると共に、シミュレーションの実行を指示する（Ｓ３０５）。
【００４０】
図４は、シミュレーション部１２０の処理を示すフローチャートである。図４を参照して、シミュレーション部１２０の動作について説明する。
【００４１】
シミュレーション部１２０は、シミュレーションの実行指示を受けると（Ｓ４０１においてＹｅｓ）、キャッシュポリシー管理部１３０から取得したレジスタ値からプログラム（ユーザプロセス２１）の実行位置を取得する（Ｓ４０２）。また、シミュレーション部１２０は、実行形式記憶部１４０からループ情報１４１を読み出すと共に、ループ情報１４１に含まれている各ループの入口位置のアドレスを算出する（Ｓ４０３）。
【００４２】
シミュレーション部１２０は、上記取得されたアクセラレータ２００における実行位置に相当する、メモリ１５０に展開された実行形式ファイルのイメージにおける実行位置を算出し、その位置から、次の分岐またはジャンプ命令までの間にループの入口があるか否かを判断する（Ｓ４０４）。ループの入口が無い場合は、処理を終了する。
【００４３】
ループの入口がある場合、シミュレーション部１２０は、シミュレーションの実行を決定する。まず、シミュレーション部１２０は、読み出したループ情報１４１から、各インデックスのアドレスを算出する（Ｓ４０５）。
【００４４】
そして、シミュレーション部１２０は、メモリ１５０における上記実行位置からループの入口までの命令のうち、上記インデックスのアドレスに対して更新を行う命令のみを実行する。これにより、各インデックスの初期値の推定値を得る（Ｓ４０６）。
【００４５】
ループの入口以降については、シミュレーション部１２０は、インデックスのアドレスに対する演算命令を実行し、配列のベクトル演算等については実行しない（Ｓ４０７）。
【００４６】
ループの繰り返し数については、シミュレーション部１２０は、ループ情報１４１からループ長を取得し、これより十分少ない値を選ぶ。具体的には、ループ長からの割合、あるいは、設定可能な定数を上限として選択しても良い。
【００４７】
シミュレーション部１２０は、ループ情報１４１に最初に記録されたインデックスの値、すなわち最外ループの繰り返し数が、上記の値になるまでループを繰り返す。この繰り返しの間、シミュレーション部１２０は、メモリアクセスがあるロード・ストア命令について、アクセスするアドレス全てを時系列に記録する（Ｓ４０８）。
【００４８】
図５は、シミュレーション部１２０により記録された、アクセスされたメモリのアドレスの履歴（メモリアクセス履歴）を時系列に示す図である。図５では、横軸を時間、縦軸をアドレスとし、アクセスされるアドレスを時系列で示している。図５において、符号３０で示すのは、連続的にアクセスされたアドレスであり、例えば中間結果を保存する変数が格納されたアドレスが考えられる。また、符号４０、４１、４２で示すのは、一定間隔で固定的にアクセスされたアドレスであり、例えば、インデックスを保存するアドレスが考えられる。また、符号４５で示すのは、シーケンシャルにアクセスされたアドレスであり、例えば配列のアドレス領域などが考えられる。
【００４９】
上記繰り返し数分のループの繰り返しが終了すると（Ｓ４０９でＹｅｓ）、シミュレーション部１２０は、ループ情報１４１に格納される次のループに関して、同様にメモリアクセス履歴の記録を行う。シミュレーション部１２０は、ループ情報１４１に格納される全ループに関してメモリアクセス履歴の記録が終了すると（Ｓ４１０でＹｅｓ）、各ループに関するメモリアクセス履歴をキャッシュポリシー管理部１３０に通知する（Ｓ４１１）。
【００５０】
続いて、図２のＳ３０６に示すように、キャッシュポリシー管理部１３０は、シミュレーション部１２０から受け取った各ループのメモリアクセス履歴に基づいて、キャッシュの各アドレス領域へのアクセスに対するキャッシュポリシーを、ループごとに決定する（Ｓ３０７）。
【００５１】
ここでは、キャッシュポリシー管理部１３０は、そのループに関して、連続的あるいは一定間隔で固定的にアクセスされる変数が格納されるアドレス領域については保持したままにし、シーケンシャルにアクセスされる配列のアドレス領域についてはＬＲＵ（あるいはＦＩＦＯ）を選択するというキャッシュポリシーを決定してもよい。キャッシュポリシー管理部１３０は、決定したキャッシュポリシーと、そのキャッシュポリシーを適用するループの入口位置のアドレスとを対応付けて格納する。
【００５２】
ここで、アクセラレータ２００におけるユーザプロセス２２１実行中に、キャッシュポリシー制御部２１０がループの入口に設定されたフック関数により起動されたとする。キャッシュポリシー制御部２１０は、現在適用されているキャッシュポリシーを退避すると共に、インタフェース２３０、１６０を介してキャッシュポリシー管理部１３０に対してループの入口位置のアドレスをキーに、キャッシュポリシーを問い合わせる。
【００５３】
キャッシュポリシー管理部１３０は、上記問い合わせを受けると（Ｓ３０８においてＹｅｓ）、インタフェース１６０を介して、アクセラレータ２００に、受け取ったキーに対応するキャッシュポリシーを読み出すと共に通知する（Ｓ３０９）。キャッシュポリシー制御部２１０は、インタフェース２３０を介してキャッシュポリシーを受け取り、そのキャッシュポリシーが上記のループの実行に適用されるように制御する。以降、アクセラレータ２００では、そのループが、取得したキャッシュポリシーにしたがって実行される。
【００５４】
上記ループの実行後、そのループの出口に設定されたフック関数により、キャッシュポリシー制御部２１０が起動されたとする。キャッシュポリシー制御部２１０は、上記適用していたキャッシュポリシーを、退避していたデフォルトのキャッシュポリシー（ＬＲＵなど）に戻す。これにより、ループごとに、その実行に適したキャッシュポリシーを適用することができる。
【００５５】
以上のように、本第１の実施形態によれば、ホストマシン１００は、アクセラレータ２００に転送してアクセラレータ２００にて実行するプログラムのコンパイル時に、そのプログラムに含まれるループ情報を抽出して保持しておく。アクセラレータ２００のＣＰＵが停止する際に、ホストマシン１００のキャッシュポリシー管理部１３０は、アクセラレータ２００のコンテキスト情報を取得する。そして、シミュレーション部１２０は、コンテキスト情報から実行位置を解析して、アクセラレータ２００で動作する命令列の動作を実行（再現）すると共に、メモリアクセスを行う命令についてアクセスするアドレスの履歴を記録する。キャッシュポリシー管理部１３０は、記録されたアドレスの履歴に基づいて、上記命令列の実行にあたり最適なキャッシュポリシーを決定する。
【００５６】
上記構成を採用することにより、本第１の実施形態によれば、アクセラレータ２００におけるプログラムの実行に先行するループ区間を、ホストマシン１００で実行することにより、アクセラレータ２００の資源利用に影響することなくアクセラレータ２００においてアクセスするメモリのアドレスを先行して取得できる。そして、そのアドレスの履歴に基づいて、アクセラレータ２００での実行に先行して、動的にキャッシュポリシーを決定できる。したがって、本第１の実施形態によれば、アクセラレータ２００において高速演算を行うようなプログラムの実行において、そのプログラムに適したキャッシュポリシーを動的に適用できるので、プログラムに関する知見や、事前準備を要することなく、かつプログラムの実行効率を低下させることなく、キャッシュミスを低減できるという効果が得られる。
【００５７】
なお、上記のように取得したメモリアクセス履歴を、メモリプリフェッチに関する参考情報として適用することもできる。すなわち、ループを実行する際、上記シミュレーション部１２０によるシミュレーションにより得られたメモリアクセス履歴から、アクセスされるメモリ領域をホストマシン１００からアクセラレータ２００のメモリ２２０に、先行して転送する。これにより、アクセラレータ２００においてデータ転送にかかるレイテンシを見かけ上低減できる。
【００５８】
第２の実施形態
図６は、第２の実施形態に係るキャッシュ制御装置５００の構成を示すブロック図である。上述の第１の実施形態に係るホストマシン１００は、キャッシュ制御装置５００を基本としている。
【００５９】
キャッシュ制御装置５００は、シミュレーション部５１０および決定部５２０を備える。
【００６０】
シミュレーション部５１０は、通信可能な演算装置から取得した該演算装置のプロセッサのコンテキスト情報から命令列の実行位置を取得し、予め取得されたアドレス情報に基づいて、自装置のメモリに展開された命令列の実行位置に相当する位置以降を実行すると共に、実行した命令列のアクセス履歴を記録する。
【００６１】
決定部５２０は、記録されたアクセス履歴に基づいて、演算装置におけるキャッシュメモリの制御規則を決定する。
【００６２】
上記演算装置は、上記第１の実施形態に係るアクセラレータを含む。
【００６３】
上記構成を採用することにより、本第２の実施形態によれば、プログラムに関する知識や事前準備を要することなく、またプログラムの実行効率を低下させることなく、キャッシュ制御を行うことができるという効果が得られる。
【００６４】
なお、図１に示したホストマシン１００およびアクセラレータ２００の各部は、図７に例示するハードウエア資源において実現される。すなわち、図７に示す構成は、ＣＰＵ５０、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）５２、外部接続インタフェース５３および記憶装置５４を備え、それらはバス５５により接続されている。
【００６５】
図１に示したホストマシン１００における各ブロックに示す機能、すなわち、少なくともプログラム実行管理部１１０、シミュレーション部１２０、キャッシュポリシー管理部１３０、およびアクセラレータ２００における各ブロックに示す機能、すなわち、少なくともキャッシュポリシー制御部２１０は、図７に示すＣＰＵ５０がＲＯＭ５２または記憶装置５４に記憶された各種ソフトウエア・プログラム（コンピュータ・プログラム）を、ＲＡＭ５１に読み出して実行することにより、実現されてもよい。あるいは、図１に示した上記機能は、一部または全部を、ハードウエアとして実現してもよい。
【００６６】
また、各実施形態を例に説明した本発明は、ホストマシン１００またはアクセラレータ２００に対して、上記説明した機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、ＣＰＵ５０がＲＡＭ５１に読み出して実行することによって達成される。
【００６７】
係る供給されたコンピュータ・プログラムは、読み書き可能なメモリ（一時記憶媒体）またはハードディスク装置等のコンピュータ読み取り可能な記憶デバイスに格納すればよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムを表すコード或いは係るコンピュータ・プログラムを格納した記憶媒体によって構成されると捉えることができる。
【００６８】
以上、上述した実施形態を模範的な例として本発明を説明した。しかしながら、本発明は、上述した実施形態には限定されない。即ち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【符号の説明】
【００６９】
１０  キャッシュ制御システム
１００  ホストマシン
１１０  プログラム実行管理部
１２０  シミュレーション部
１３０  キャッシュポリシー管理部
１４０  実行形式記憶部
１４１  ループ情報
１５０、２２０  メモリ
１６０、２３０  インタフェース
２００  アクセラレータ
２１０  キャッシュポリシー制御部
２２１  ユーザプロセス
５０  ＣＰＵ
５１  ＲＡＭ
５２  ＲＯＭ
５３  外部接続インタフェース
５４  記憶装置
５５  バス
【図１】
0006488962.tif 000002
【図２】
0006488962.tif 000003
【図３】
0006488962.tif 000004
【図４】
0006488962.tif 000005
【図５】
0006488962.tif 000006
【図６】
0006488962.tif 000007
【図７】
0006488962.tif 000008