(57)【要約】【課題】キャッシュメモリの容量を超えるような規模の大きな周期処理において、毎周期アクセスされる確率が高いデータがキャッシュヒットとなるよう、適切なタイミングでプリフェッチを行う。【解決手段】キャッシュ制御解析部１１５は、周期処理の周期１〜周期Ｎのうち、Ｎ÷５以上の周期にて１０マイクロ秒以下のタイミングの差で同じアドレスについて発生したキャッシュミスを対象に、キャッシュミスが発生したタイミングの統計量とアドレスとを示すアクセス統計情報１１６を生成する。タイミング補正部１１７は、アクセス統計情報１１６で示されるタイミングの統計量とプリフェッチ処理のための時間とキャッシュミスが発生した場合にＲＡＭ１１１にアクセスするための時間とから、プリフェッチ処理を実行するタイミングを設定する。【選択図】図１
2010217992.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリからキャッシュメモリへデータを予め読み出すプリフェッチ処理のための時間であるキャッシュ制御処理遅延時間と、キャッシュミスが発生した場合にメインメモリにアクセスするための時間であるメモリアクセス遅延時間とを示す遅延時間情報と、一定周期ごとに実行される周期処理の複数周期にて発生したキャッシュミスごとに、キャッシュミスが発生したタイミングとアドレスとを示すアクセストレース情報とを予め記憶する記憶装置と、データ処理を行う処理装置とを具備し、
前記記憶装置に記憶されたアクセストレース情報から、前記複数周期のうち、所定数以上の周期にて所定範囲内のタイミングの差で同じアドレスについて発生したキャッシュミスをキャッシュミス集合として処理装置により抽出し、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量を前記処理装置により計算し、計算したタイミングの統計量と当該キャッシュミスが発生したアドレスとを示すアクセス統計情報を前記処理装置により生成するキャッシュ制御解析部と、
前記キャッシュ制御解析部により抽出されたキャッシュミス集合ごとに、前記キャッシュ制御解析部により生成されたアクセス統計情報で示されるタイミングの統計量と前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間及びメモリアクセス遅延時間とから、プリフェッチ処理を実行するタイミングを前記処理装置により設定し、設定したタイミングと当該アクセス統計情報で示されるアドレスとを示すキャッシュ制御シナリオを前記処理装置により生成するキャッシュ制御シナリオ生成部とを備えることを特徴とするキャッシュ制御装置。
【請求項２】
前記キャッシュ制御シナリオ生成部は、前記キャッシュ制御解析部により生成されたアクセス統計情報で、ｉ（ｉはｉ＞１となる整数）番目にプリフェッチ処理を実行するアドレスとともに示されるタイミングの統計量と、前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間と、前記記憶装置に記憶された遅延時間情報で示されるメモリアクセス遅延時間をｉ−１倍した時間とから、ｉ番目にプリフェッチ処理を実行するタイミングを設定することを特徴とする請求項１に記載のキャッシュ制御装置。
【請求項３】
前記キャッシュ制御シナリオ生成部は、ｉ番目にプリフェッチ処理を実行するタイミングとｉ−１番目にプリフェッチ処理を実行するタイミングとの差が前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間以上になるようにタイミングを設定することを特徴とする請求項２に記載のキャッシュ制御装置。
【請求項４】
前記キャッシュ制御解析部は、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量として、当該キャッシュミスが発生したタイミングの平均及び標準偏差を計算し、前記アクセス統計情報として、計算したタイミングの平均及び標準偏差と当該キャッシュミスが発生したアドレスとを示すアクセス統計情報を生成し、
前記キャッシュ制御シナリオ生成部は、前記キャッシュ制御解析部により抽出されたキャッシュミス集合ごとに、前記キャッシュ制御解析部により生成されたアクセス統計情報でアドレスＡ［ｉ］とともに示されるタイミングの平均Ｍ［ｉ］及び標準偏差Ｖ［ｉ］と、所定の補正値Ｃと、前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間Ｄ及びメモリアクセス遅延時間Ｅとから、ｉ番目にプリフェッチ処理を実行するタイミングＰ［ｉ］を、Ｐ［ｉ］＝Ｍ［ｉ］−（Ｖ［ｉ］×Ｃ）−（（ｉ−１）×Ｅ）−Ｄに設定することを特徴とする請求項２又は３に記載のキャッシュ制御装置。
【請求項５】
前記周期処理は、前記複数周期の各々にて一定タイミングで発生する同期イベントを少なくとも１つ含み、
前記キャッシュ制御シナリオ生成部は、さらに、同期イベントが発生するタイミングとプリフェッチ処理を実行するタイミングとの前後関係を示す同期情報を前記処理装置により生成し、
前記キャッシュ制御装置は、さらに、
前記キャッシュ制御シナリオ生成部により生成されたキャッシュ制御シナリオで示されるタイミングで、当該キャッシュ制御シナリオで示されるアドレスに対してプリフェッチ処理を前記処理装置により実行するとともに、同期イベントが発生した場合、当該同期イベントが発生したタイミングと前記キャッシュ制御シナリオ生成部により生成された同期情報とに基づいて、次以降にプリフェッチ処理を実行するタイミングを前記処理装置により調整するキャッシュ制御部を備えることを特徴とする請求項１から４までのいずれかに記載のキャッシュ制御装置。
【請求項６】
前記キャッシュ制御装置は、さらに、
同期イベントが発生した場合、一定アドレスへデータを書き込む同期部を備え、
前記キャッシュ制御シナリオ生成部は、設定したタイミングと前記キャッシュ制御解析部により生成されたアクセス統計情報で示されるアドレスとを前記キャッシュ制御シナリオに記録する形式と同じ形式で、同期イベントが発生するタイミングと当該タイミングで前記同期部により書き込まれるデータとを前記キャッシュ制御シナリオに記録することにより、前記同期情報を前記キャッシュ制御シナリオの一部として生成することを特徴とする請求項５に記載のキャッシュ制御装置。
【請求項７】
前記周期処理は、複数種類存在し、
前記キャッシュ制御シナリオ生成部は、周期処理の種類に応じて、個別のキャッシュ制御シナリオを生成し、
前記キャッシュ制御装置は、さらに、
周期処理の種類に応じて、前記キャッシュ制御シナリオ生成部により生成されたキャッシュ制御シナリオを選択するシナリオ選択部を備え、
前記キャッシュ制御部は、前記シナリオ選択部により選択されたキャッシュ制御シナリオで示されるタイミングで、当該キャッシュ制御シナリオで示されるアドレスを対象にプリフェッチ処理を実行することを特徴とする請求項１から６までのいずれかに記載のキャッシュ制御装置。
【請求項８】
記憶装置が、メインメモリからキャッシュメモリへデータを予め読み出すプリフェッチ処理のための時間であるキャッシュ制御処理遅延時間と、キャッシュミスが発生した場合にメインメモリにアクセスするための時間であるメモリアクセス遅延時間とを示す遅延時間情報と、一定周期ごとに実行される周期処理の複数周期にて発生したキャッシュミスごとに、キャッシュミスが発生したタイミングとアドレスとを示すアクセストレース情報とを予め記憶し、
処理装置が、前記記憶装置に記憶されたアクセストレース情報から、前記複数周期のうち、所定数以上の周期にて所定範囲内のタイミングの差で同じアドレスについて発生したキャッシュミスをキャッシュミス集合として抽出し、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量を計算し、計算したタイミングの統計量と当該キャッシュミスが発生したアドレスとを示すアクセス統計情報を生成し、
前記処理装置が、前記抽出されたキャッシュミス集合ごとに、前記生成されたアクセス統計情報で示されるタイミングの統計量と前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間及びメモリアクセス遅延時間とから、プリフェッチ処理を実行するタイミングを設定し、設定したタイミングと当該アクセス統計情報で示されるアドレスとを示すキャッシュ制御シナリオを生成することを特徴とするキャッシュ制御方法。
【請求項９】
メインメモリからキャッシュメモリへデータを予め読み出すプリフェッチ処理のための時間であるキャッシュ制御処理遅延時間と、キャッシュミスが発生した場合にメインメモリにアクセスするための時間であるメモリアクセス遅延時間とを示す遅延時間情報と、一定周期ごとに実行される周期処理の複数周期にて発生したキャッシュミスごとに、キャッシュミスが発生したタイミングとアドレスとを示すアクセストレース情報とを予め記憶する記憶装置と、データ処理を行う処理装置とを具備するコンピュータにより実行されるキャッシュ制御プログラムであって、
前記記憶装置に記憶されたアクセストレース情報から、前記複数周期のうち、所定数以上の周期にて所定範囲内のタイミングの差で同じアドレスについて発生したキャッシュミスをキャッシュミス集合として処理装置により抽出し、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量を前記処理装置により計算し、計算したタイミングの統計量と当該キャッシュミスが発生したアドレスとを示すアクセス統計情報を前記処理装置により生成するキャッシュ制御解析処理と、
前記キャッシュ制御解析処理により抽出されたキャッシュミス集合ごとに、前記キャッシュ制御解析処理により生成されたアクセス統計情報で示されるタイミングの統計量と前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間及びメモリアクセス遅延時間とから、プリフェッチ処理を実行するタイミングを前記処理装置により設定し、設定したタイミングと当該アクセス統計情報で示されるアドレスとを示すキャッシュ制御シナリオを前記処理装置により生成するキャッシュ制御シナリオ生成処理とをコンピュータに実行させることを特徴とするキャッシュ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュ制御装置及びキャッシュ制御方法及びキャッシュ制御プログラムに関するものである。
【背景技術】
【０００２】
例えば工業用コントローラ製品のような組み込み機器では、センサ等の入力や制御用出力に対し一定時間内に応答する、リアルタイム性が求められる。そのような組み込み機器のソフトウェアは、一般的に、一定の時間間隔で決められた処理を繰り返し実行する、周期処理で構成される。このような組み込み機器では、一定時間にできるだけ多くの処理や計算を実行することが高性能・高機能につながるが、その処理性能に大きく影響する要因の１つとして、メモリキャッシュがある。
【０００３】
キャッシュ容量が十分であれば、毎周期アクセスするようなデータは常にキャッシュ上に存在していることになり、周期処理はメモリアクセスに対して待たされることなく、効率よく実行することができる。しかしながら、組み込み機器の高機能化のためにソフトウェア規模が肥大化した影響で、周期処理で扱うデータがキャッシュに収まり切らなくなったために、毎周期決まった位置でキャッシュミスが発生してしまい、実行速度低下を引き起こしてしまうケースが発生する。
【０００４】
特許文献１では、上記のケースに対応するために、プログラムの区間ごとの平均クロック数と、キャッシュミスを起こした位置と経過時間を監視することによって周期を割り出し、さらにキャッシュミスを引き起こした経過時間とシステム固有のメモリアクセス遅延時間を基に、その周期内のプリフェッチ位置を求め、そのタイミングでプリフェッチを行うことで、周期処理で毎回発生するキャッシュミスを抑止する方法が開示されている。
【０００５】
また、特許文献２では、決まったパターンのデータアクセスがある場合に、アクセス履歴を記録しておき、次のアクセス時にその履歴を指定することで先読みを行う方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２２６０２５号公報
【特許文献２】特開２００５−１５７７１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１の方法では、プリフェッチ位置を決める際に、キャッシュミスを引き起こした経過時間に対し、メモリアクセス遅延時間分だけ早いタイミングでプリフェッチ指示を与えている。しかし、この方法では、周期内の複数個のキャッシュミスに対処しようとした場合に、プリフェッチにより周期の先頭のキャッシュミスが解消されたことにより、以降に発生するはずのキャッシュミスの位置がメモリアクセス遅延分だけ早まるために、プリフェッチのタイミングが実動作に対して遅れてしまう可能性があり、適切なタイミングでプリフェッチを行うことができないという課題があった。
【０００８】
また、特許文献２の方法は、アクセスする順序を前もって知らせることで先読みを可能にするものであり、そのタイミングについては考慮されないため、周期処理に対して適用することができないという課題があった。メモリキャッシュの場合、データを前もって用意すればいいだけはでなく、その用意するタイミングが重要であり、早すぎれば他の処理の実行を妨げてしまうおそれもある。
【０００９】
本発明は、例えば、キャッシュメモリの容量を超えるような規模の大きな周期処理において、毎周期アクセスされる確率が高いデータがキャッシュヒットとなるよう、適切なタイミングでプリフェッチを行うことを目的とする。
【課題を解決するための手段】
【００１０】
本発明の一の態様に係るキャッシュ制御装置は、
メインメモリからキャッシュメモリへデータを予め読み出すプリフェッチ処理のための時間であるキャッシュ制御処理遅延時間と、キャッシュミスが発生した場合にメインメモリにアクセスするための時間であるメモリアクセス遅延時間とを示す遅延時間情報と、一定周期ごとに実行される周期処理の複数周期にて発生したキャッシュミスごとに、キャッシュミスが発生したタイミングとアドレスとを示すアクセストレース情報とを予め記憶する記憶装置と、データ処理を行う処理装置とを具備し、
前記記憶装置に記憶されたアクセストレース情報から、前記複数周期のうち、所定数以上の周期にて所定範囲内のタイミングの差で同じアドレスについて発生したキャッシュミスをキャッシュミス集合として処理装置により抽出し、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量を前記処理装置により計算し、計算したタイミングの統計量と当該キャッシュミスが発生したアドレスとを示すアクセス統計情報を前記処理装置により生成するキャッシュ制御解析部と、
前記キャッシュ制御解析部により抽出されたキャッシュミス集合ごとに、前記キャッシュ制御解析部により生成されたアクセス統計情報で示されるタイミングの統計量と前記記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間及びメモリアクセス遅延時間とから、プリフェッチ処理を実行するタイミングを前記処理装置により設定し、設定したタイミングと当該アクセス統計情報で示されるアドレスとを示すキャッシュ制御シナリオを前記処理装置により生成するキャッシュ制御シナリオ生成部とを備えることを特徴とする。
【発明の効果】
【００１１】
本発明の一の態様によれば、キャッシュ制御装置において、キャッシュ制御解析部が、周期処理の複数周期のうち、所定数以上の周期にて所定範囲内のタイミングの差で同じアドレスについて発生したキャッシュミスをキャッシュミス集合として抽出し、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量とアドレスとを示すアクセス統計情報を生成し、キャッシュ制御シナリオ生成部が、キャッシュミス集合ごとに、アクセス統計情報で示されるタイミングの統計量と、プリフェッチ処理のための時間であるキャッシュ制御処理遅延時間と、キャッシュミスが発生した場合にメインメモリにアクセスするための時間であるメモリアクセス遅延時間とから、プリフェッチ処理を実行するタイミングを設定し、設定したタイミングとアクセス統計情報で示されるアドレスとを示すキャッシュ制御シナリオを生成するため、キャッシュメモリの容量を超えるような規模の大きな周期処理において、毎周期アクセスされる確率が高いデータがキャッシュヒットとなるよう、キャッシュ制御シナリオに従って適切なタイミングでプリフェッチを行うことが可能となる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係るキャッシュ制御装置の構成を示すブロック図である。
【図２】実施の形態１に係るキャッシュ制御装置のハードウェア構成の一例を示す図である。
【図３】実施の形態１に係るアクセストレース情報の一例を示すテーブルである。
【図４】実施の形態１に係るキャッシュ制御解析部がプリフェッチの対象とするキャッシュミスを抽出する方法を示す図である。
【図５】実施の形態１に係るアクセス統計情報の一例を示すテーブルである。
【図６】実施の形態１に係るキャッシュ制御シナリオの一例を示すテーブルである。
【図７】実施の形態１に係るキャッシュ制御部の動作を示すフローチャートである。
【図８】実施の形態２に係る同期イベントを定義する情報の一例を示すテーブルである。
【図９】実施の形態２に係るアクセス統計情報の一例を示すテーブルである。
【図１０】実施の形態２に係るキャッシュ制御シナリオの一例を示すテーブルである。
【図１１】実施の形態２に係るキャッシュ制御部の動作を示すフローチャートである。
【図１２】実施の形態２に係るキャッシュ制御部の動作を示すフローチャートである。
【図１３】実施の形態２に係るキャッシュ制御部の動作を示すフローチャートである。
【図１４】実施の形態３に係るキャッシュ制御装置の構成を示すブロック図である。
【図１５】実施の形態３に係るキャッシュ制御部の動作を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について、図を用いて説明する。
【００１４】
実施の形態１．
図１は、本実施の形態に係るキャッシュ制御装置１００の構成を示すブロック図である。
【００１５】
図１において、キャッシュ制御装置１００は、メインコア１０１とサブコア１０２とを含むマルチコアプロセッサを具備している。以下では、マルチコアプロセッサを用いて、周期処理（一定周期ごとに実行される処理）を実行するプロセッサコア（メインコア１０１）とは別のコア（サブコア１０２）において、本実施の形態に係るキャッシュ制御を行う方法を示す。なお、シングルコアプロセッサを用いて、本実施の形態に係るキャッシュ制御を行ってもよい。
【００１６】
キャッシュ制御装置１００は、メインコア１０１側には、通常の周期処理を行う周期タスク１０３と、周期タスク１０３の実行を管理するＯＳ１０４（オペレーティングシステム）を備える。キャッシュ制御装置１００は、さらにＯＳ１０４には、タスク、割り込みハンドラ、システムコール等の実行コンテキストを切り替える処理を担うディスパッチャ１０５を監視（フック）し、周期タスク１０３の実行状況を、共有メモリを用いてサブコア１０２側に通知する同期部１０６を備える。なお、通知の方法としては、共有メモリのほかに、割り込み信号や、通信用レジスタ、その他コア間共有資源を用いる方法が考えられるが、これらに限定されない。
【００１７】
キャッシュ制御装置１００は、サブコア１０２側には、プリフェッチ（メインメモリからキャッシュメモリへデータを予め読み出す処理）を行うアドレスとタイミングが記載されたキャッシュ制御シナリオ１０７と、同期部１０６から通知された周期処理の開始時点からの経過時間を計測するクロックカウンタ１０８と、これらを参照して指定されたタイミングでプリフェッチを行うキャッシュ制御部１０９を備える。
【００１８】
本実施の形態では、キャッシュ制御装置１００は、キャッシュ制御シナリオ１０７を生成するために、共有キャッシュ１１０（キャッシュメモリの一例）とＲＡＭ１１１（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）（メインメモリの一例）の間のデータ転送を管理するメモリコントローラ１１２の挙動を監視することで、キャッシュミスを引き起こすアドレスと時刻情報の収集を行うメモリアクセス監視部１１３を備える。なお、収集の方法としては、メモリコントローラ１１２の挙動を監視するほか、メモリバスのトレースや、シミュレータによるキャッシュ挙動シミュレーション結果の分析等、様々な方法を用いることが可能である。周期タスク１０３の実行中に収集された情報は、メモリアクセス監視部１１３によりアクセストレース情報１１４としてＨＤＤ（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）に保存される。キャッシュ制御装置１００は、アクセストレース情報１１４をキャッシュ制御解析部１１５によって解析することにより、各周期に共通するキャッシュミス発生タイミングを抽出し、アクセス統計情報１１６を生成する。アクセス統計情報１１６は、キャッシュ制御解析部１１５によりＨＤＤに保存される。その後、タイミング補正部１１７（キャッシュ制御シナリオ生成部の一例）によってプリフェッチを行う適切なタイミングを算出した結果が、キャッシュ制御シナリオ１０７としてＨＤＤに保存される。
【００１９】
前述したマルチコアプロセッサは、データ処理を行う処理装置の一例である。また、前述したＨＤＤやＲＡＭ１１１は、データ（情報）を記憶する記憶装置の一例である。キャッシュ制御装置１００は、処理装置、記憶装置のほか、入力装置、出力装置等を具備していてもよい。これらのハードウェアはキャッシュ制御装置１００の各部によって利用される。例えば、処理装置は、キャッシュ制御装置１００の各部でデータの演算、加工、読み取り、書き込み等を行うために利用される。記憶装置は、そのデータを記憶するために利用される。また、入力装置は、そのデータを入力するために、出力装置は、そのデータを出力するために利用される。
【００２０】
図２は、キャッシュ制御装置１００のハードウェア構成の一例を示す図である。
【００２１】
図２において、キャッシュ制御装置１００は、マイクロコンピュータやパーソナルコンピュータ等のコンピュータであり、ＬＣＤ１２１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード１２２（Ｋ／Ｂ）、マウス１２３、ＦＤＤ１２４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ１２５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ１２６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ１２１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス１２３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００２２】
キャッシュ制御装置１００は、プログラムを実行するＣＰＵ１３１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を備えている。ＣＰＵ１３１は、処理装置の一例である。本実施の形態では、ＣＰＵ１３１はマルチコアプロセッサである。ＣＰＵ１３１は、バス１３２を介してＲＯＭ１３３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ１１１、通信ボード１３５、ＬＣＤ１２１、キーボード１２２、マウス１２３、ＦＤＤ１２４、ＣＤＤ１２５、プリンタ１２６、ＨＤＤ１４０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ１４０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ又はその他の記憶媒体が用いられてもよい。
【００２３】
ＲＡＭ１１１は、揮発性メモリの一例である。ＲＯＭ１３３、ＦＤＤ１２４、ＣＤＤ１２５、ＨＤＤ１４０は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード１３５、キーボード１２２、マウス１２３、ＦＤＤ１２４、ＣＤＤ１２５は、入力装置の一例である。また、通信ボード１３５、ＬＣＤ１２１、プリンタ１２６は、出力装置の一例である。
【００２４】
通信ボード１３５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード１３５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００２５】
ＨＤＤ１４０には、ＯＳ１０４、プログラム群１４３、ファイル群１４４が記憶されている。プログラム群１４３のプログラムは、ＣＰＵ１３１、ＯＳ１０４により実行される。プログラム群１４３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ１３１により読み出され実行される。ファイル群１４４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＲＡＭ１１１やＨＤＤ１４０等の記憶媒体に記憶される。ＲＡＭ１１１やＨＤＤ１４０等の記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ１３１によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ１３１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ１３１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００２６】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、ＲＡＭ１１１等のメモリ、ＦＤＤ１２４のフレキシブルディスク（ＦＤ）、ＣＤＤ１２５のコンパクトディスク（ＣＤ）、ＨＤＤ１４０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス１３２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００２７】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ１３３に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ１３１により読み出され、ＣＰＵ１３１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００２８】
次に動作について説明する。
【００２９】
本実施の形態は、キャッシュ制御シナリオ１０７を生成するフェーズと、キャッシュ制御シナリオ１０７を実行するフェーズにより実現される。
【００３０】
まず、キャッシュ制御シナリオ１０７を生成するフェーズについて説明する。
【００３１】
このフェーズでは、サブコア１０２は停止させ、メインコア１０１側のみ通常の周期処理を実行する。このとき、キャッシュミスが発生すれば、必要なデータをＲＡＭ１１１から共有キャッシュ１１０にロードするよう、メモリコントローラ１１２に指示されるが、メモリアクセス監視部１１３は、これをトレースして指示を読み取り、周期処理の周期の開始時点を０とした時刻（タイミング）と、キャッシュミスを引き起こすきっかけとなった対象アドレスの組を、アクセストレース情報１１４として記憶装置に記憶する。
【００３２】
図３は、アクセストレース情報１１４の一例を示すテーブルである。
【００３３】
アクセストレース情報１１４は、周期処理の複数周期にて発生したキャッシュミスごとに、キャッシュミスが発生したタイミング（周期開始時点からの経過時間）とアドレスとを示す情報である。図３の例では、キャッシュミスが発生したタイミングは「時刻（ミリ秒）」カラム（列）に、キャッシュミスが発生したアドレスは「ミス発生箇所」カラムに記録されている。図３のアクセストレース情報１１４では、例えば、ある周期にて２０３８０ナノ秒のタイミングで、０ｘ００８０００１０のアドレスに対するキャッシュミスが発生したことが記録されている。また、ある周期にて８５６２２２ナノ秒、１０１９９８３ナノ秒、３０１９９８３ナノ秒の少なくとも３つのタイミングで、０ｘ００８００１００のアドレスに対するキャッシュミスが発生したことが記録されている。
【００３４】
図４は、キャッシュ制御解析部１１５において、プリフェッチの対象とするキャッシュミスを抽出する方法を示す図である。
【００３５】
まず、キャッシュ制御解析部１１５は、周期処理の周期時間を基に、アクセストレース情報１１４の内容を周期単位に分割する。図４において、横軸は、周期１〜周期Ｎ（ＮはＮ＞１となる整数）の各周期開始時点からの経過時間（タイミング）を示しており、下方向の矢印はその時間にキャッシュミスが発生したアドレスを示している。キャッシュ制御解析部１１５は、ある時間範囲（例えば、１０マイクロ秒の範囲）を集計区間と定義し、集計区間の開始時点をＳ（ＮはＳ＞０となる実数）マイクロ秒ずつ（例えば、１マイクロ秒ずつ）ずらしながら、集計区間に含まれるキャッシュミスアドレスをカウントする。このとき、閾値（例えば、Ｎ÷５回）以上の周期にてアドレスが出現する区間が１回以上続いた場合、キャッシュ制御解析部１１５は、そのアドレスをプリフェッチ対象に決める。また、キャッシュ制御解析部１１５は、対象アドレスについて、閾値以上の周期にて連続して出現する集計区間内における出現回数、平均経過時間、及び、経過時間の標準偏差を計算し、アクセス統計情報１１６として記録する。なお、集計区間や閾値の値は、チューニングによって適宜調整される。
【００３６】
例えば、Ｎ＝１０とし、あるアドレスＡ１に関して、周期１の１１マイクロ秒、周期２の１２マイクロ秒、周期３の１３マイクロ秒のタイミングでキャッシュミスが発生しており、それ以外のタイミングでは、いずれの周期においてもキャッシュミスが発生していなかったとする。集計区間の長さが１０マイクロ秒、Ｓ＝１とした場合、アドレスＡ１の出現回数（キャッシュミスが発生した周期の数）は、０マイクロ秒を始点とする集計区間Ｒ０では０回、１マイクロ秒を始点とする集計区間Ｒ１では１回、２マイクロ秒を始点とする集計区間Ｒ２では２回、３マイクロ秒を始点とする集計区間Ｒ３では３回である。アドレスＡ１の出現回数は、その次の４マイクロ秒を始点とする集計区間Ｒ４から１１マイクロ秒を始点とする集計区間Ｒ１１までは３回のままであるが、１２マイクロ秒を始点とする集計区間Ｒ１２では２回、１３マイクロ秒を始点とする集計区間Ｒ１３では１回、１４マイクロ秒を始点とする集計区間Ｒ１４では０回となる。閾値をＮ÷５回とすると、閾値以上の周期にてアドレスＡ１が出現している集計区間はＲ２〜Ｒ１２である。そこで、キャッシュ制御解析部１１５は、例えば、集計区間Ｒ２〜Ｒ１２のうち、アドレスＡ１の出現回数が最大となる集計区間Ｒ３について、タイミングの平均等を計算する。この例では、タイミングの平均は、（１１マイクロ秒＋１２マイクロ秒＋１３マイクロ秒）÷３＝１２マイクロ秒となる。
【００３７】
図５は、アクセス統計情報１１６の一例を示すテーブルである。
【００３８】
アクセス統計情報１１６は、キャッシュミス集合ごとに、キャッシュミスが発生したタイミングの平均及び標準偏差とアドレスとを示す情報である。図３の例では、キャッシュミスが発生したタイミングの平均は「平均経過時間」カラムに、キャッシュミスが発生したタイミングの標準偏差は「標準偏差」カラムに、キャッシュミスが発生したアドレスは「ミス発生箇所」カラムに記録されている。また、当該アドレスの出現回数が「回数」カラムに記録されている。さらに、アクセス統計情報１１６は、「平均経過時間」カラムの値の昇順にソートされており、レコード（行）ごとに「番号」がふられている。図５のアクセス統計情報１１６では、例えば、あるキャッシュミス集合において、キャッシュミスが発生したアドレスが０ｘ００８０００１０であり、そのアドレスが同じ集計区間内で８９２回出現し、そのアドレスの当該集計区間における出現タイミングの平均及び標準偏差がそれぞれ２００３２ナノ秒及び２７０であることが記録されている。
【００３９】
上記のように、キャッシュ制御解析部１１５は、記憶装置に記憶されたアクセストレース情報１１４から、周期処理の複数周期（周期１〜周期Ｎ）のうち、所定数（例えば、Ｎ÷５）以上の周期にて所定範囲（例えば、１０マイクロ秒の集計区間）内のタイミングの差で同じアドレスについて発生したキャッシュミスをキャッシュミス集合として処理装置により抽出する。キャッシュ制御解析部１１５は、抽出したキャッシュミス集合ごとに、キャッシュミスが発生したタイミングの統計量を処理装置により計算する。キャッシュ制御解析部１１５は、キャッシュミス集合ごとに、計算したタイミングの平均及び標準偏差（統計量の一例）と当該キャッシュミスが発生したアドレスとを示すアクセス統計情報１１６を処理装置により生成して記憶装置に記憶する。
【００４０】
タイミング補正部１１７では、アクセス統計情報１１６を基に、プリフェッチを行う適切なタイミングを決定する。タイミング補正部１１７は、パラメータとして、メモリアクセス遅延時間と、キャッシュ制御処理遅延時間をもつ。なお、記憶装置には、メモリアクセス遅延時間とキャッシュ制御処理遅延時間とを示す遅延時間情報が予め記憶されているものとする。メモリアクセス遅延時間は、キャッシュミスが発生した際に、メモリコントローラ１１２によって必要なデータがＲＡＭ１１１から共有キャッシュ１１０にロードされるまでに要する時間（キャッシュミスが発生した場合にＲＡＭ１１１にアクセスするための時間）であり、ＲＡＭ１１１やターゲットの仕様によって決まるものである。また、キャッシュ制御処理遅延時間は、サブコア１０２側で１回のプリフェッチ処理に関わる一連の処理に要する最大時間（プリフェッチ処理のための時間）である。ここで、アクセス統計情報１１６を用いると、［ｉ］（ｉはｉ＞１となる整数）回目のキャッシュミスに対するプリフェッチ時間は、『平均経過時間−（標準偏差×範囲補正値）−（（ｉ−１）×メモリアクセス遅延時間）−キャッシュ制御処理遅延時間』で求められる。ここで、『（ｉ−１）×メモリアクセス遅延時間』を減算しているのは、キャッシュ制御シナリオ１０７を実行すると、［１］回目〜［ｉ−１］回目のプリフェッチにより［ｉ−１］回のキャッシュミスが発生しなくなるからである。なお、範囲補正値は、タイミングのずれが正規分布のとき許容するばらつき範囲を指示するもので、チューニングによって適宜調整される。
【００４１】
もし、［ｉ］回目のプリフェッチ時間が、『［ｉ−１］回目のプリフェッチ時間＋キャッシュ制御処理遅延時間』よりも早くなってしまう場合、タイミング補正部１１７は、『キャッシュ制御処理遅延時間−（［ｉ］回目のプリフェッチ時間−［ｉ−１］回目のプリフェッチ時間）』だけ［ｉ−１］回目のプリフェッチ時間を早める。メモリアクセス遅延時間を１５０ナノ秒、キャッシュ制御処理遅延時間を３００ナノ秒、範囲補正値を２とした場合、図５の例では、２回目のプリフェッチ時間が、７６５５４ナノ秒−（３９１×２）−（１×１５０ナノ秒）−３００ナノ秒＝７５３２２ナノ秒、３回目のプリフェッチ時間が、７６８１８ナノ秒−（３５０×２）−（１×１５０ナノ秒）−３００ナノ秒＝７５５１８ナノ秒と求められ、その差が１９６ナノ秒でキャッシュ制御処理遅延時間を下回るため、２回目のプリフェッチ時間は１０４ナノ秒前倒しにした７５２１８ナノ秒に補正する。
【００４２】
タイミング補正部１１７は、最終的に求められたプリフェッチ時間を、周期処理開始からの経過時間を測定するために用いるクロックカウンタ１０８の単位に変換し、キャッシュ制御シナリオ１０７を生成する。
【００４３】
図６は、クロックカウンタ１０８の周波数を１００ＭＨｚとした場合のキャッシュ制御シナリオ１０７の一例を示すテーブルである。
【００４４】
キャッシュ制御シナリオ１０７は、キャッシュミス集合ごとに、プリフェッチ処理を実行するタイミングとアドレスとを示す情報である。図６の例では、プリフェッチ処理を実行するタイミングは「プリフェッチタイミング」カラムに、プリフェッチ処理を実行するアドレスは「プリフェッチ箇所」カラムに記録されている。「番号」はプリフェッチ処理が行われる順番を表している。図６のキャッシュ制御シナリオ１０７では、例えば、クロックカウンタ１０８が７５２１８０（７５２１８ナノ秒に相当）をカウントしたタイミングで、０ｘ００８００ＥＣ０のアドレスを対象にプリフェッチ処理を実行することが示されている。
【００４５】
上記のように、タイミング補正部１１７は、キャッシュ制御解析部１１５により抽出されたキャッシュミス集合ごとに、キャッシュ制御解析部１１５により生成されたアクセス統計情報１１６で示されるタイミングの平均及び標準偏差と記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間及びメモリアクセス遅延時間とから、プリフェッチ処理を実行するタイミングを処理装置により設定する。このとき、タイミング補正部１１７は、キャッシュ制御解析部１１５により生成されたアクセス統計情報１１６で、ｉ番目にプリフェッチ処理を実行するアドレスとともに示されるタイミングの平均及び標準偏差と、記憶装置に記憶された遅延時間情報で示されるキャッシュ制御処理遅延時間と、記憶装置に記憶された遅延時間情報で示されるメモリアクセス遅延時間をｉ−１倍した時間とから、ｉ番目にプリフェッチ処理を実行するタイミングを設定する。また、タイミング補正部１１７は、ｉ番目にプリフェッチ処理を実行するタイミングとｉ−１番目にプリフェッチ処理を実行するタイミングとの差がキャッシュ制御処理遅延時間以上になるようにタイミングを設定する（補正する）。そして、タイミング補正部１１７は、設定したタイミングとキャッシュ制御解析部１１５により生成されたアクセス統計情報１１６で示されるアドレスとを示すキャッシュ制御シナリオ１０７を処理装置により生成する。
【００４６】
具体的には、タイミング補正部１１７は、キャッシュ制御解析部１１５により抽出されたキャッシュミス集合ごとに、キャッシュ制御解析部１１５により生成されたアクセス統計情報１１６でアドレスＡ［ｉ］とともに示されるタイミングの平均Ｍ［ｉ］及び標準偏差Ｖ［ｉ］と、所定の補正値Ｃと、キャッシュ制御処理遅延時間Ｄと、メモリアクセス遅延時間Ｅとから、ｉ番目にプリフェッチ処理を実行するタイミングＰ［ｉ］を、Ｐ［ｉ］＝Ｍ［ｉ］−（Ｖ［ｉ］×Ｃ）−（（ｉ−１）×Ｅ）−Ｄに設定する。このとき、タイミング補正部１１７は、タイミングＰ［ｉ］とｉ−１番目にプリフェッチ処理を実行するタイミングＰ［ｉ−１］との差がキャッシュ制御処理遅延時間Ｄ以上でない場合、タイミングＰ［ｉ−１］をキャッシュ制御処理遅延時間Ｄ−（タイミングＰ［ｉ］−タイミングＰ［ｉ−１］）早いタイミングに処理装置により補正する。
【００４７】
なお、タイミング補正部１１７は、アクセス統計情報１１６で示されるタイミングの平均のみに基づいて、プリフェッチ処理を実行するタイミングを設定してもよい。この場合、具体的には、タイミング補正部１１７は、タイミングＰ［ｉ］を、Ｐ［ｉ］＝Ｍ［ｉ］−（（ｉ−１）×Ｅ）−Ｄに設定する。また、タイミング補正部１１７は、アクセス統計情報１１６で示されるタイミングの他の統計量（例えば、最小値、中間値、最大値）に基づいて、プリフェッチ処理を実行するタイミングを設定してもよい。
【００４８】
次に、キャッシュ制御シナリオ１０７を実行するフェーズについて説明する。
【００４９】
図７は、キャッシュ制御部１０９の動作を示すフローチャートである。
【００５０】
キャッシュ制御部１０９は、サブコア１０２で実行が開始されると、メインコア１０１側の同期部１０６からの周期タスク１０３の実行開始通知がコア間共有メモリに書き込まれるまでポーリングすることによって待機する（ステップＳ１０１）。キャッシュ制御部１０９は、実行開始通知を検出すると、クロックカウンタ１０８に対しカウンタ値をリセットし、再度０からカウントアップするようにする（ステップＳ１０２）。次に、キャッシュ制御部１０９は、キャッシュ制御シナリオ１０７の先頭から１エントリ分を読み出し、プリフェッチタイミングの値を内部レジスタに保持しておく（ステップＳ１０３）。その後、キャッシュ制御部１０９は、クロックカウンタ１０８からカウンタ値を読み出し（ステップＳ１０４）、保持されたプリフェッチタイミングの値と比較を行う（ステップＳ１０５）。キャッシュ制御部１０９は、プリフェッチタイミングの値よりもカウンタ値が小さい間は、同期部１０６から非同期処理の開始通知がないか共有メモリを調べ（ステップＳ１０６）、なければ再度カウンタ値を読み出した後比較する処理（ステップＳ１０４及びＳ１０５）を繰り返す。もし、非同期処理の開始通知があれば、キャッシュ制御部１０９は、カウンタを一時停止した後（ステップＳ１０７）、非同期処理の終了を待ち（ステップＳ１０８）、通知を受けた後に停止していたカウンタを再開し（ステップＳ１０９）、カウンタ読み出し処理（ステップＳ１０４）まで戻る。
【００５１】
キャッシュ制御部１０９は、クロックカウンタ１０８から読み出したカウンタ値がプリフェッチタイミングを超えた場合、プリフェッチ処理として、プリフェッチ箇所で指定されたアドレスのデータを読み出す（ステップＳ１１０）。その結果、共有キャッシュ１１０上にそのデータが存在していなければ、メモリコントローラ１１２によってＲＡＭ１１１から共有キャッシュ１１０にデータがロードされることになる。キャッシュ制御部１０９は、プリフェッチ処理を行った後は、先ほど処理したエントリがキャッシュ制御シナリオ１０７の最後のエントリかどうかを判定し（ステップＳ１１１）、最後でなければ次のエントリを読み出すところから処理（ステップＳ１０３以降）を繰り返す。キャッシュ制御部１０９は、全てのエントリを処理したのであれば、周期タスク１０３の実行開始通知待ち（ステップＳ１０１）の前まで戻り、次の周期開始に備える。なお、タイミング補正部１１７がパラメータとして使用するキャッシュ制御処理遅延時間は、プリフェッチタイミングとカウンタ値の比較が成立してからプリフェッチを行った後、次のエントリを読み出して再度カウンタ値を比較するループに戻るまでの一連の処理にかかる時間として求められる。
【００５２】
上記のように、キャッシュ制御部１０９は、タイミング補正部１１７により生成されたキャッシュ制御シナリオ１０７で示されるタイミングで、当該キャッシュ制御シナリオ１０７で示されるアドレスに対してプリフェッチ処理を処理装置により実行する。
【００５３】
以下、本実施の形態が奏する効果について説明する。
【００５４】
メモリキャッシュのプリフェッチは、タイミングが遅れれば意味がなく、また早すぎれば正常なキャッシュの挙動を乱すおそれがあるため、これらの特性を考慮することが重要である。本実施の形態によれば、タイミング補正部１１７において、統計的に求められたタイミングに対し、性能向上を考慮したタイミング補正が行われることにより、メインコア１０１側の周期処理に遅れることなく適切なタイミングでプリフェッチが行われるため、メインコア１０１側では共有キャッシュ１１０に対するキャッシュミスの発生が抑えられることになり、周期処理の実行性能を向上させることができる。
【００５５】
以上説明したように、本実施の形態では、キャッシュ制御装置１００は、周期処理において、周期開始時点からの経過時間とともに、キャッシュミスを引き起こしたアドレスを記録したアクセストレース情報１１４を収集する。そして、キャッシュ制御装置１００は、アクセストレース情報１１４から、毎周期に共通な又は頻度が高いキャッシュミスアドレスを抽出したアクセス統計情報１１６を生成し、これを解消するために適切なプリフェッチタイミングを決定し、キャッシュ制御シナリオ１０７を生成する。このとき、キャッシュ制御装置１００は、プリフェッチによりキャッシュミスからキャッシュヒットに変わることによる性能向上に対する補正を、以降のプリフェッチタイミングに対し順次適用することにより、プリフェッチタイミングの精度を高める。
【００５６】
また、本実施の形態では、キャッシュ制御装置１００は、周期処理の実行と並行して、周期処理に対応するキャッシュ制御シナリオ１０７を用いて、周期開始時点を起点とした所定のタイミングで指定されたアドレスをプリフェッチすることにより、周期処理からアクセスされるデータを前もってキャッシュ上にロードする、キャッシュ制御部１０９を備える。キャッシュ制御部１０９は、周期処理を実行するタスク又はＯＳ１０４に組み込まれた同期部１０６から、周期処理の開始を通知されることによりキャッシュ制御シナリオ１０７の実行を開始することで、毎周期適切なタイミングでプリフェッチを行う。
【００５７】
また、本実施の形態では、キャッシュ制御装置１００は、マルチコアプロセッサを使い、メインコア１０１で周期処理を実行し、サブコア１０２にてキャッシュ制御部１０９を実行して所定のタイミングで指定されたアドレスにアクセスすることにより、メインコア１０１の周期処理からアクセスされるデータを前もってコア間の共有キャッシュ１１０上にロードする。
【００５８】
さらに、本実施の形態では、周期処理の実行権を奪う優先度の高い非同期処理が実行された場合、同期部１０６によって非同期処理の開始と終了を通知する。通知を受けたキャッシュ制御部１０９は、非同期処理が実行されている間、キャッシュ制御シナリオ１０７の実行を一時停止することを特徴とする。
【００５９】
以上のように、本実施の形態によれば、キャッシュのカバーする範囲を超えるような規模の大きな周期処理において、毎周期アクセスされるデータが常にキャッシュヒットとなるよう、適切なタイミングでプリフェッチを行うことが可能となる。本実施の形態では、メモリアクセスの挙動を監視して蓄積したアクセストレース情報１１４から、周期処理の各周期に共通するキャッシュミス発生箇所を解析したアクセス統計情報１１６を作り、これを基にプリフェッチタイミングを決定する際に、プリフェッチの結果キャッシュミスがキャッシュヒットに変わることによる性能向上に対するタイミングの補正を、以降のプリフェッチタイミングに対して順次適用することにより、周期中における適切なタイミングを記したキャッシュ制御シナリオ１０７を生成し、それを基にプリフェッチを行うことで、キャッシュミスを抑止し実行性能を向上させることができる。
【００６０】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を説明する。
【００６１】
本実施の形態に係るキャッシュ制御装置１００の構成は、図１に示した実施の形態１のものと同様である。
【００６２】
図８は、同期イベントを定義する情報の一例を示すテーブルである。
【００６３】
この情報は、周期動作の進行状況に関連して毎回一定のタイミングで必ず発生するイベント（周期処理の周期１〜周期Ｎの各々にて一定タイミングで発生する少なくとも１つの同期イベント）を任意で定義したものであり、同期部１０６に登録されている。同期イベントしては、例えば、特定のタスク間の遷移、セマフォ操作やｉｏｃｔｌ等の特定のシステムコール、あるいは、タスクのある通過点に任意で挿入したチェックポイントトレースＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ・Ｐｒｏｇｒａｍ・Ｉｎｔｅｒｆａｃｅ）を用いることができる。図８の例では、これらの同期イベントを識別するイベントＩＤとともに同期イベントを発生順に並べて定義している。
【００６４】
同期部１０６において、ディスパッチャ１０５の情報から同期イベントを検出した際の動作は、キャッシュ制御シナリオ１０７を生成するフェーズか、キャッシュ制御シナリオ１０７を実行するフェーズかに応じて異なる。
【００６５】
まず、キャッシュ制御シナリオ１０７を生成するフェーズでは、同期部１０６は、同期イベントを検出した場合、キャッシュを無効にした特定のメモリ領域（ＲＡＭ１１１のアドレスのうち、キャッシュの対象外とするように予め定められた同期アドレス）に、その同期イベントのイベントＩＤを書き込む。メモリアクセス監視部１１３では、周期処理の開始時点を０とした時刻と、キャッシュミスを引き起こすきっかけとなった対象アドレス、及び、同期イベントのイベントＩＤが書き込まれた同期アドレスのいずれかのアドレスと、さらに、同期アドレスであれば、そのアドレスに書き込まれたデータ（イベントＩＤ）との組を、アクセストレース情報１１４として記録しておく。
【００６６】
図９は、アクセストレース情報１１４の一例を示すテーブルである。
【００６７】
図９の例では、イベントＩＤを書き込むアドレス（同期アドレス）を０ｘＦＦ００００００としている。図９の例では、図３の例と同様に、キャッシュミス及び同期イベントが発生したタイミングは「時刻（ミリ秒）」カラムに、キャッシュミスが発生したアドレス及び同期アドレスは「ミス発生箇所」カラムに記録されている。さらに、同期イベントが発生した際に同期アドレスに書き込まれたイベントＩＤが「書き込みデータ」カラムに記録されている。図９のアクセストレース情報１１４では、図３に示した実施の形態１のものと同様に、例えば、ある周期にて２０３８０ナノ秒のタイミングで、０ｘ００８０００１０のアドレスに対するキャッシュミスが発生したことが記録されている。また、ある周期にて８０２４７ナノ秒のタイミングで、０ｘＦＦ００００００のアドレスに０ｘ０００００００１のイベントＩＤが書き込まれたことが記録されている。即ち、ある周期にて８０２４７ナノ秒のタイミングで、図８に示した、セマフォ１の獲得を行う同期イベントが発生したことが記録されている。また、ある周期にて１２９５２６ナノ秒のタイミングで、０ｘＦＦ００００００のアドレスに０ｘ０００００００２のイベントＩＤが書き込まれたことが記録されている。即ち、ある周期にて１２９５２６ナノ秒のタイミングで、図８に示した、デバイス３を制御するｉｏｃｔｌを呼び出す同期イベントが発生したことが記録されている。
【００６８】
タイミング補正部１１７は、実施の形態１と同様に、設定したタイミングとキャッシュ制御解析部１１５により生成されたアクセス統計情報１１６で示されるアドレスとを示すキャッシュ制御シナリオ１０７を処理装置により生成するとともに、同期イベントが発生する前に実行すべきプリフェッチ処理を示す同期情報を処理装置により生成する。このとき、タイミング補正部１１７は、プリフェッチ処理を実行するタイミングとアドレスとをキャッシュ制御シナリオ１０７に記録する形式と同じ形式で、同期イベントが発生するタイミングと当該タイミングで同期部１０６により同期アドレスに書き込まれるデータとをキャッシュ制御シナリオ１０７に記録する。これにより、タイミング補正部１１７は、同期情報をキャッシュ制御シナリオ１０７の一部として生成する。
【００６９】
図１０は、キャッシュ制御シナリオ１０７の一例を示すテーブルである。
【００７０】
図１０の例では、プリフェッチ処理を実行するタイミング及び同期イベントが発生するタイミングは「プリフェッチタイミング／同期タイミング」カラムに、プリフェッチ処理を実行するアドレス及び同期イベントのイベントＩＤは「プリフェッチ箇所／チェックポイント」カラムに記録されている。「番号」はプリフェッチ処理が行われる順番及び同期イベントが発生する順番を表している。図１０のキャッシュ制御シナリオ１０７では、実施の形態１と同様に、例えば、クロックカウンタ１０８が７５５１８０（７５５１８ナノ秒に相当）をカウントしたタイミングで、０ｘ００８００ＥＥ０のアドレスを対象にプリフェッチ処理を実行することが示されている。また、例えば、クロックカウンタ１０８が８００９７０（８００９７０ナノ秒に相当）をカウントしたタイミングで、０ｘＦＦ００００００のアドレスに０ｘ０００００００１のイベントＩＤが書き込まれることが示されている。即ち、クロックカウンタ１０８が８００９７０（８００９７０ナノ秒に相当）をカウントしたタイミングで、０ｘ０００００００１のイベントＩＤに該当する同期イベントが発生することが示されている。本実施の形態では、このように同期イベントが発生するタイミングをチェックポイントとして用いる。図１０の例では、４番目や１０番目のエントリがチェックポイントである。なお、本実施の形態では、キャッシュ制御シナリオ１０７にプリフェッチとチェックポイントの２種類のエントリが含まれることになるため、これを識別する「種別」カラムも設けている。
【００７１】
チェックポイントの同期タイミングは、キャッシュ制御解析部１１５と同様の統計処理によって算出される、平均経過時間を用いる。ただし、チェックポイントを示す同期イベントは、毎周期に決まった順番で発生する必要があるため、回数の閾値は統計対象とする周期数と同じＮとならなければならない。また、アクセストレース情報１１４には、同期イベントを取得したことによるメモリアクセスのオーバヘッドが含まれるため、［ｉ］回目のキャッシュミスに対するプリフェッチ時間は、『平均経過時間−（標準偏差×範囲補正値）−（（ｉ−１＋同期イベント出現回数）×メモリアクセス遅延時間）−キャッシュ制御処理遅延時間』となる。『同期イベント出現回数』×『メモリアクセス遅延時間』を減算しているのは、キャッシュ制御シナリオ１０７を実行する際には同期部１０６が同期アドレスにイベントＩＤを書き込まなくなるため、［ｉ−１］回目のプリフェッチまでのチェックポイント数分のメモリアクセスが発生しなくなるからである。
【００７２】
一方、キャッシュ制御シナリオ１０７を実行するフェーズでは、同期部１０６は、同期イベントを検出した場合、同期部１０６の内部で管理され同期イベントの発生に対応してカウントアップされる実行フェーズ番号を、コア間共有メモリ等を通じてサブコア１０２に通知する。
【００７３】
図１１は、キャッシュ制御部１０９の動作を示すフローチャートである。
【００７４】
図１１のフローチャートを図６のフローチャートと比較すると、本実施の形態では、チェックポイントによる同期処理が追加されたことにより、フェーズ同期１（ステップＳ２０１）とフェーズ同期２（ステップＳ２０２）の処理が追加されている。
【００７５】
図１２は、フェーズ同期１の詳細を示すフローチャートである。
【００７６】
キャッシュ制御部１０９は、最初に、キャッシュ制御シナリオ１０７から読み出したエントリの種別を調べ、チェックポイントか、それともプリフェッチタイミングかを識別し（ステップＳ２１１）、チェックポイントであれば、キャッシュ制御部１０９の内部で管理しているシナリオフェーズ番号を１つ増加させる（ステップＳ２１２）。次に、キャッシュ制御部１０９は、コア間共有メモリを参照してメインコア１０１の同期部１０６から通知された実行フェーズ番号を取得し（ステップＳ２１３）、シナリオフェーズ番号と比較する（ステップＳ２１４）。このとき、シナリオフェーズ番号が実行フェーズ番号よりも大きければ、シナリオの実行が先行しているので、キャッシュ制御部１０９は、番号が一致するまでコア間共有メモリをポーリングする（ステップＳ２１３及びＳ２１４）。実行フェーズ番号がシナリオフェーズ番号以上であれば、キャッシュ制御部１０９は、チェックポイントのエントリに設定された同期タイミングの値をクロックカウンタ１０８にセットする（ステップＳ２１５）。これより、キャッシュ制御シナリオ１０７のチェックポイントの同期タイミングと、１つ手前のプリフェッチタイミングの間に、メインコア１０１の周期処理がチェックポイントに到達すれば、メインコア１０１の実動作とサブコア１０２のシナリオのタイミングが一致することになる。このように、キャッシュ制御部１０９は、もし、実動作が先行しているのであれば、その遅延時間をできる限り埋めるように働く。
【００７７】
図１３は、フェーズ同期２の詳細を示すフローチャートである。
【００７８】
キャッシュ制御部１０９は、最初にコア間共有メモリを参照してメインコア１０１の同期部１０６から通知された実行フェーズ番号を取得し（ステップＳ２２１）、内部で管理しているシナリオフェーズ番号との比較を行う（ステップＳ２２２）。シナリオフェーズ番号が実行フェーズ番号よりも小さい場合は、実動作がシナリオの実行よりも先行しているので、キャッシュ制御シナリオ１０７のエントリをチェックポイントの次のエントリまで強制的に進める（ステップＳ２２３）。また、キャッシュ制御部１０９は、チェックポイントのエントリに設定された同期タイミングの値をクロックカウンタ１０８にセットする（ステップＳ２２４）。シナリオフェーズ番号が実行フェーズ番号以上であれば、ここでは何もせずに抜ける。なお、もしシナリオ実行が先行しているのであれば、次のフェーズ同期１（ステップＳ２０１）の処理においてタイミングが補正されるため、ここでは考慮しなくてよい。
【００７９】
上記のように、キャッシュ制御部１０９は、同期イベントが発生した場合、当該同期イベントが発生したタイミングとタイミング補正部１１７により生成された同期情報とに基づいて、次以降にプリフェッチ処理を実行するタイミングを処理装置により調整する。
【００８０】
以下、本実施の形態が奏する効果について説明する。
【００８１】
本実施の形態によれば、キャッシュヒット率の微妙な変動によるタイミングのずれが蓄積されることにより、周期処理が進行するほど実動作とシナリオ実行との間にずれが生じてしまう課題に対し、同期部１０６から通知されるチェックポイントのタイミングに合わせてシナリオの実行位置及びタイミングをきめ細かく補正することにより、ずれの発生を抑止し、周期処理の周期後半までプリフェッチタイミングの精度を高く維持することが可能となる。
【００８２】
以上説明したように、本実施の形態では、キャッシュ制御装置１００は、同期部１０６をＯＳ１０４内に設け、タスク、割り込みハンドラ、システムコール等の実行コンテキストを管理しているディスパッチャ１０５の情報を参照し、特定の実行コンテキストが切り替わる時点をチェックポイントとしてキャッシュ制御部１０９に通知する。キャッシュ制御シナリオ１０７は、さらにチェックポイントに関する情報を含み、これと照らし合わせることにより、周期処理の実際の進行状況に合わせて、キャッシュ制御シナリオ１０７の実行位置又はタイミングを補正することにより、実動作とシナリオとのずれを抑止し、プリフェッチタイミングの精度を高く維持する。
【００８３】
以上のように、本実施の形態によれば、周期開始時点、実行コンテキスト切り替え時点等のチェックポイント、非同期処理の入口や出口等で同期をとることにより、実際の挙動とキャッシュ制御シナリオ１０７のタイミングがずれたまま処理が進行してしまうことを防止することができる。
【００８４】
実施の形態３．
本実施の形態について、主に実施の形態１との差異を説明する。
【００８５】
図１４は、本実施の形態に係るキャッシュ制御装置１００の構成を示すブロック図である。
【００８６】
図１４において、キャッシュ制御装置１００は、実施の形態１と同様の構成要素のほか、シナリオ選択部１１８、実行モード参照部１１９をサブコア１０２に備える。
【００８７】
本実施の形態では、周期処理は、複数種類存在するものとする。周期処理の種類は、実行モード１２０として表される。なお、実行モード１２０は、周期タスク１０３から実行時に参照される変数であり、具体的な処理、制御、演算の内容の決定に関わる変数である。また、実行モード１２０は、メモリ共有等の方法によってサブコア１０２側から参照可能な位置に配置されるものとする。
【００８８】
タイミング補正部１１７は、実行モード１２０に応じて、個別のキャッシュ制御シナリオ１０７を生成する。
【００８９】
シナリオ選択部１１８は、実行モード１２０に応じて、タイミング補正部１１７により生成されたキャッシュ制御シナリオ１０７を選択する（複数のキャッシュ制御シナリオ１０７を切り替える）。具体的には、シナリオ選択部１１８は、キャッシュ制御部１０９からの要求に従い、実行モード参照部１１９を介して、メインコア１０１側で管理されたデータである実行モード１２０を取得し、その実行モード１２０に対応するキャッシュ制御シナリオ１０７を選び出す。
【００９０】
キャッシュ制御部１０９は、シナリオ選択部１１８により選択されたキャッシュ制御シナリオ１０７で示されるタイミングで、当該キャッシュ制御シナリオ１０７で示されるアドレスを対象にプリフェッチ処理を実行する。つまり、キャッシュ制御部１０９は、シナリオ選択部１１８が選び出したキャッシュ制御シナリオ１０７に従い、実施の形態１と同様のキャッシュ制御処理を実行する。
【００９１】
本実施の形態では、キャッシュ制御シナリオ１０７を生成するフェーズにおいて、キャッシュ制御装置１００は、実行モード１２０ごとに複数回、アクセストレース情報１１４の取得からキャッシュ制御シナリオ１０７の生成までを行い、実行モード１２０ごとのキャッシュ制御シナリオ１０７を生成する。また、キャッシュ制御装置１００は、実行モード１２０とキャッシュ制御シナリオ１０７の対応表を、シナリオ選択部１１８の内部データ構造として記憶装置に保持する。
【００９２】
図１５は、キャッシュ制御部１０９の動作を示すフローチャートである。
【００９３】
キャッシュ制御部１０９からシナリオ選択部１１８に対する処理要求（ステップＳ３０１）は、図１５の通りカウンタリセット（ステップＳ１０２）の後で行われる。そのため、シナリオ選択部１１８や、その先で呼ばれる実行モード参照部１１９の実行に多少時間がかかってしまったとしても、キャッシュ制御シナリオ１０７に記載されたプリフェッチタイミングには影響しない。
【００９４】
キャッシュ制御シナリオ１０７を実行するフェーズにおいて、キャッシュ制御部１０９からシナリオ選択部１１８が呼ばれると、シナリオ選択部１１８は、実行モード参照部１１９に対し、現在メインコア１０１側で実行されている周期処理の実行モード１２０を問い合わせる。実行モード参照部１１９は、共有メモリを介してメインコア１０１側の変数として保持される実行モード１２０を取得してシナリオ選択部１１８に渡す。このとき、周期処理の処理内容が、複数の変数の組み合わせによって決まる場合は、実際に取り得る各々の組み合わせによって、それぞれ別の実行モード１２０として認識し、また、それに応じたキャッシュ制御シナリオ１０７を予め用意しておく。実行モード１２０を取得したシナリオ選択部１１８では、実行モード１２０に対応するシナリオの先頭のエントリを示すポインタを、キャッシュ制御部１０９に渡す。
【００９５】
以下、本実施の形態が奏する効果について説明する。
【００９６】
本実施の形態によれば、キャッシュ制御シナリオ１０７を用いたキャッシュ制御方法の適用範囲を広げることができるため、より多くの周期処理において処理性能の向上が期待できる。
【００９７】
以上説明したように、本実施の形態では、キャッシュ制御装置１００は、実行モード１２０に応じて周期処理の内容が変わる場合、キャッシュ制御シナリオ１０７を実行モード１２０に対応して複数用意しておき、実行モード参照部１１９により実行モード１２０を適宜参照し、その結果に応じてシナリオ選択部１１８によりキャッシュ制御シナリオ１０７を切り替える。
【００９８】
以上のように、本実施の形態によれば、複数の実行モード１２０に対応して周期処理の内容が異なる場合には、実行モード１２０ごとにキャッシュ制御シナリオ１０７を各々用意しておき、実行モード１２０が変化した時にキャッシュ制御シナリオ１０７も併せて切り替えることで、キャッシュ制御シナリオ１０７を用いたキャッシュ制御方法を多様な周期処理に適用可能にしている。
【００９９】
以上、本発明の実施の形態について説明したが、これらのうち、２つ以上の実施の形態を組み合わせて実施しても構わない。あるいは、これらのうち、１つの実施の形態を部分的に実施しても構わない。あるいは、これらのうち、２つ以上の実施の形態を部分的に組み合わせて実施しても構わない。
【符号の説明】
【０１００】
１００  キャッシュ制御装置、１０１  メインコア、１０２  サブコア、１０３  周期タスク、１０４  ＯＳ、１０５  ディスパッチャ、１０６  同期部、１０７  キャッシュ制御シナリオ、１０８  クロックカウンタ、１０９  キャッシュ制御部、１１０  共有キャッシュ、１１１  ＲＡＭ、１１２  メモリコントローラ、１１３  メモリアクセス監視部、１１４  アクセストレース情報、１１５  キャッシュ制御解析部、１１６  アクセス統計情報、１１７  タイミング補正部、１１８  シナリオ選択部、１１９  実行モード参照部、１２０  実行モード、１２１  ＬＣＤ、１２２  キーボード、１２３  マウス、１２４  ＦＤＤ、１２５  ＣＤＤ、１２６  プリンタ、１３１  ＣＰＵ、１３２  バス、１３３  ＲＯＭ、１３５  通信ボード、１４０  ＨＤＤ、１４３  プログラム群、１４４  ファイル群。
【図１】
2010217992.tif 000003
【図２】
2010217992.tif 000004
【図３】
2010217992.tif 000005
【図４】
2010217992.tif 000006
【図５】
2010217992.tif 000007
【図６】
2010217992.tif 000008
【図７】
2010217992.tif 000009
【図８】
2010217992.tif 000010
【図９】
2010217992.tif 000011
【図１０】
2010217992.tif 000012
【図１１】
2010217992.tif 000013
【図１２】
2010217992.tif 000014
【図１３】
2010217992.tif 000015
【図１４】
2010217992.tif 000016
【図１５】
2010217992.tif 000017