(57)【要約】【課題】メモリアクセスがプロセッサの演算性能に与える影響の度合いを精度良く評価する。【解決手段】時間情報取得ステップにおいて、時間情報取得部が、命令発行器による命令に従ったメモリアクセスユニットによる対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する。演算量取得ステップにおいて、演算量取得部が、上記メモリアクセスユニットが対象メモリへアクセスを開始した時から終了した時までに、上記命令発行器による命令に従って演算部が実行した演算量を算出する。そして、評価ステップにおいて、評価部が、このメモリアクセス時間とこの演算量とに基づいて、このアクセス開始から終了までの間における上記演算部による演算性能を評価する。【選択図】図１
2015035028.tif 000002
【特許請求の範囲】
【請求項１】
時間情報取得部が、命令発行器による命令に従ったメモリアクセスユニットによる対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する時間情報取得ステップと、
演算量取得部が、前記メモリアクセスユニットが前記対象メモリへアクセスを開始した時から終了した時までに、前記命令発行器による命令に基づく演算量を算出する演算量取得ステップと、
評価部が、前記メモリアクセス時間と前記演算量とに基づいて、前記アクセス開始から終了までの間における前記演算部による演算性能を評価する評価ステップと、
を有する情報処理方法。
【請求項２】
前記対象メモリは、階層状に接続された複数のメモリのうちの一つのメモリである
請求項１に記載の情報処理方法。
【請求項３】
前記対象メモリは、階層状に接続された複数のメモリそれぞれであり、
前記時間情報取得ステップにおいて、前記時間情報取得部が、前記メモリ毎に前記メモリアクセス時間を取得し、
前記演算量取得ステップにおいて、前記演算量取得部が、前記メモリ毎に前記演算量を算出し、
前記評価ステップは、前記評価部が、前記メモリ毎に、前記メモリアクセス時間と前記演算量とに基づいて、そのメモリへのアクセス開始から終了までの間における前記演算部による演算性能を評価する
請求項１に記載の情報処理方法。
【請求項４】
前記演算量は、発行、コミットまたは実行された命令数であり、
前記時間情報取得ステップにおいて、前記時間情報取得部が、メモリアクセス開始時の時刻とメモリアクセス終了時の時刻を比較することで、前記メモリアクセス時間を算出し、
前記演算量取得ステップにおいて、前記演算量取得部が、メモリアクセス開始時の命令数とメモリアクセス終了時の前記命令数を比較することで、前記アクセス開始から終了までの間の前記命令数を算出する
請求項１から３のいずれか一項に記載の情報処理方法。
【請求項５】
第１記憶処理部が、プログラムの任意の時点からの時間を計数可能な時間カウンタが計数したメモリアクセス開始時の前記時間カウンタの値を開始時間情報として記憶部に記憶させるステップと、
第２記憶処理部が、プログラムの任意の時点からの前記命令数を計数可能な命令数カウンタが計数したメモリアクセス開始時の前記命令数カウンタの値を開始命令数情報として記憶部に記憶させるステップと、
を更に有し、
前記時間情報取得ステップにおいて、
前記記憶部に記憶された開始時間情報を取得し、メモリアクセス終了時の前記時間カウンタの値を取得し、前記取得した開始時間情報と前記取得した時間カウンタの値との差を、前記対象メモリのメモリアクセス時間として取得し、
前記演算量取得ステップにおいて、
前記記憶部に記憶された開始命令数情報を取得し、メモリアクセス終了時の前記命令数カウンタの値を取得し、前記取得した開始命令数情報と前記取得した命令数カウンタの値との差を、前記対象メモリの前記アクセス開始から終了までの間の前記命令数として取得する
請求項４に記載の情報処理方法。
【請求項６】
前記評価ステップにおいて、前記評価部は前記命令発行器と前記メモリアクセスユニットと前記演算部とを備える複数のコアそれぞれ毎に、前記演算性能を評価し、
割当部が、前記演算性能の比較に少なくとも基づいて、いずれかのコアに処理を割り当てる割当ステップを更に有する
請求項１から５のいずれか一項に記載の情報処理方法。
【請求項７】
前記評価ステップは、前記評価部は、階層状に接続された複数のメモリそれぞれ毎に前記演算性能を評価し、
前記割当ステップにおいて、割当部が、前記評価部が評価して得たメモリ毎の演算性能を比較し、比較した結果に基づいて、いずれかのコアに処理を割り当てる
請求項６に記載の情報処理方法。
【請求項８】
前記割当ステップにおいて、
割当部は、前記演算部による演算性能に加えて前記メモリアクセス時間に基づいて、いずれかのコアに処理を割り当てる
請求項６に記載の情報処理方法。
【請求項９】
前記時間情報取得ステップにおいて、前記時間情報取得部が、階層状に接続された複数のメモリそれぞれ毎に前記メモリアクセス時間を取得し、
前記評価ステップは、前記評価部は、前記複数のメモリそれぞれ毎に前記演算性能を評価し、
前記割当ステップにおいて、前記割当部は、前記時間情報取得部が取得したメモリアクセス時間と前記評価部が評価して得た演算性能から得られる性能低下度との積を前記メモリ間で比較し、この比較結果に基づいて、いずれかのコアに処理を割り当てる
請求項８に記載の情報処理方法。
【請求項１０】
第１のコアまたは第２のコアへの演算割り当てを行うことにより、演算毎に前記第１のコアがアクセス可能な第１のメモリと前記第２のコアがアクセス可能で前記第１のメモリよりも小容量かつレイテンシが低速な第２のメモリを選択可能であり、
前記評価ステップにおいて、前記評価部は、前記第１のコアでの処理実行中に、前記第１のメモリに含まれる複数のメモリそれぞれ毎に演算性能を評価し、
前記割当ステップにおいて、前記割当部は、評価した演算性能を利用して前記第１のメモリのレイテンシによる第１の性能低下度を特定し、
前記第１のメモリのＬＲＵアクセス情報から、前記第２のメモリでのデータ非保持による第２の性能低下度を特定し、
前記第１の性能低下度と前記第２の性能低下度とを比較し、この比較結果に基づいて、いずれかのコアに処理を割り当てる
請求項８に記載の情報処理方法。
【請求項１１】
命令発行器による命令に従ったメモリアクセスユニットによる対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する時間情報取得部と、
前記メモリアクセスユニットが前記対象メモリへアクセスを開始した時から終了した時までに、前記命令発行器による命令に基づく演算量を算出する演算量取得部と、
を備える情報処理装置に、
前記情報処理装置から取得する前記メモリアクセス時間と前記演算量とに基づいて、前記アクセス開始から終了までの間における前記演算部による演算性能を評価する評価ステップ
を実行させるためのプログラム。
【請求項１２】
命令発行器による命令に従ったメモリアクセスユニットによる対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する時間情報取得部と、
前記メモリアクセスユニットが前記対象メモリへアクセスを開始した時から終了した時までに、前記命令発行器による命令に基づく演算量を算出する演算量取得部と、
前記メモリアクセス時間と前記演算量とに基づいて、前記アクセス開始から終了までの間における前記演算部による演算性能を評価する評価部と、
を備える情報処理装置。
【請求項１３】
コンピュータに、
命令発行器による命令に従ったメモリアクセスユニットによる対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する時間情報取得ステップと、
前記メモリアクセスユニットが前記対象メモリへアクセスを開始した時から終了した時までに、前記命令発行器による命令に基づく演算量を算出する演算量取得ステップと、
前記メモリアクセス時間と前記演算量とに基づいて、前記アクセス開始から終了までの間における前記演算部による演算性能を評価する評価ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理方法、情報処理装置及びプログラムに関する。
【背景技術】
【０００２】
メモリウォール問題と称されるように、メモリアクセスはプロセッサの性能へと大きな影響を与える。また、Ｏｕｔ−ｏｆ−ＯｒｄｅｒやＳＭＴ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ：同時マルチスレディング）といったメモリアクセスレイテンシ隠蔽技術が一般的となり、メモリアクセスのプロセッサの演算性能への影響は実行中のプログラムの性質やハードウェア資源の大小により動的に変化する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】ＷＯ２００４／０４４７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プロセッサの性能解析を行う際に、メモリアクセスのプロセッサの演算性能への影響を特定することは非常に重要である。しかしながら、メモリアクセスがプロセッサの演算性能に与える影響の度合いを評価する際の精度が低いという問題がある。
【０００５】
そこで本発明の一態様は、上記問題に鑑みてなされたものであり、メモリアクセスがプロセッサの演算性能に与える影響の度合いを精度良く評価することを可能とする情報処理方法、情報処理装置及びプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００６】
本発明の実施形態に係るに情報処理方法によれば、時間情報取得ステップにおいて、時間情報取得部が、命令発行器による命令に従ったメモリアクセスユニットによる対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する。演算量取得ステップにおいて、演算量取得部が、上記メモリアクセスユニットが対象メモリへアクセスを開始した時から終了した時までに、上記命令発行器による命令に従って演算部が実行した演算量を算出する。そして、評価ステップにおいて、評価部が、このメモリアクセス時間とこの演算量とに基づいて、このアクセス開始から終了までの間における上記演算部による演算性能を評価する。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態におけるプロセッサ１を示す概略ブロック図である。
【図２】第１の実施形態におけるグローバルカウンタ４２を示す概略ブロック図である。
【図３】第１の実施形態におけるメモリアクセス情報テーブル記憶部４３が記憶するメモリアクセス情報テーブルＴ１の一例である。
【図４】第１の実施形態におけるメモリ階層別情報テーブル記憶部４４が記憶するメモリ階層別情報テーブルＴ２の一例である。
【図５】第１の実施形態における制御部４１を示す概略ブロック図である。
【図６】第１の実施形態において、メモリアクセス開始時のモニタリングユニット４の処理の流れの一例を示すフローチャートである。
【図７】第１の実施形態において、メモリアクセス終了時のモニタリングユニット４の処理の流れの一例を示すフローチャートである。
【図８】第２の実施形態におけるプロセッサ１ｂを示す概略ブロック図である。
【図９】第２の実施形態におけるコア情報テーブルＴ３の一例である。
【図１０】第２の実施形態におけるメモリ７を示す概略ブロック図である。
【図１１】ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの第１の例である。
【図１２】ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの第２の例である。
【図１３】図１２のメモリ階層別テーブルの場合におけるメモリ階層毎のＩＰＣを示す表である。
【図１４】ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの第３の例である。
【図１５】図１４のメモリ階層別テーブルの場合におけるメモリ階層毎のＩＰＣを示す表である。
【図１６】第２の実施形態におけるプロセッサ１ｂの処理の第１の処理例を示すフローチャートである。
【図１７】第２の実施形態におけるプロセッサ１ｂの処理の第２の処理例を示すフローチャートである。
【図１８】第２の実施形態におけるキャッシュメモリのイメージ図の一例である。
【図１９】第２の実施形態におけるプロセッサ１ｂの処理の第３の処理例を示すフローチャートである。
【発明を実施するための形態】
【０００８】
以下、本発明の実施形態について、図面を参照して詳細に説明する。
（第１の実施形態）
図１は、第１の実施形態におけるプロセッサ１を示す概略ブロック図である。実線のブロックが物理的または論理的な機能または記憶領域を有するブロックを表しており、破線のブロックは機能ブロック間で受け渡される情報を表しており、矢印は情報の伝達経路を表している。これら記憶領域は、情報を記憶可能であればどのような手段を用いて実現してもよい。例えば、レジスタといったハードウェアを利用してもよいし、Ｃ言語などのソフトウェアの変数を利用してもよい。
【０００９】
機能ブロックについても、所望の機能が実現可能であればどのような手段を用いて実現してもよい。例えば、加算器・減算器のようなハードウェアを利用してもよいし、Ｃ言語などのソフトウェアの加減算機能を利用してもよい。情報の伝達経路も、正しく情報をやり取りできる手段であればどのようなものであってもよい。例えば、配線による信号の伝達といったハードウェアを利用してもよいし、Ｃ言語といったソフトウェアの変数の代入を利用してもよい。
【００１０】
プロセッサ１は、メモリデバイス３及びモニタリングユニット４に接続されたＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア２と、ＣＰＵコア２に接続されたメモリデバイス３と、ＣＰＵコア２に接続されたモニタリングユニット（情報処理装置）４とを備える。
【００１１】
ＣＰＵコア２は、命令単位でプログラムを実行する。ここで、ＣＰＵコア２は、演算部２２とメモリアクセスユニット２４に接続された命令発行器２１、命令発行器２１とメモリアクセスユニット２４に接続された演算部２２、及び命令発行器２１と演算部２２に接続されたメモリアクセスユニット２４を備える。ここで、演算部２２は、命令発行器２１とメモリアクセスユニット２４に接続された第１演算器２２１、及び命令発行器２１とメモリアクセスユニット２４に接続された第２演算器２２２を備える。
【００１２】
命令発行器２１は、第１演算器２２１、第２演算器２２２及びメモリアクセスユニット２４等に命令を発行する。
第１演算器２２１及び第２演算器２２２は、命令発行器２１が発行した命令に従って計算を行う。
メモリアクセスユニット２４は、メモリデバイス３に対するアクセス要求をメモリデバイス３へ発行する。
【００１３】
なお、本実施形態では、ＣＰＵコア２の構成要素として２つの演算器と１つのメモリアクセスユニットを例示したが、このような構成に限定されるものではない。ＣＰＵコアは、演算機能を保持する機能ブロックであればよく、演算器を１つ以上保持すればよい。また、例えば、演算器は１つであっても３つ以上であってもよいし、ＣＰＵコア２は、メモリアクセスユニットや命令発行器を複数備えていてもよい。
【００１４】
メモリデバイス３には、データやプログラムコードが記憶されている。メモリデバイス３は、一例として、メモリアクセスユニット２４と接続されたＬ１キャッシュ３１、Ｌ１キャッシュ３１及び主記憶３３と接続されたＬ２キャッシュ３２、Ｌ２キャッシュ３２と接続された主記憶３３という三つのレベルの階層構造で構成されている。メモリの階層構造とは、共有メモリ領域のデータを記憶可能であってＣＰＵコア２からのアクセス速度が異なるメモリ群を指す。本実施形態では、ＣＰＵコア２からのアクセス速度は、Ｌ１キャッシュが最も速く、主記憶が最も遅い。
【００１５】
なお、本実施形態では３階層のメモリ階層を例示したが、このような構成に限定されるものではない。例えば、Ｌ１キャッシュ、Ｌ２キャッシュ、Ｌ３キャッシュ、主記憶という四つのレベルの階層構造であってもよいし、Ｌ１キャッシュ、主記憶といった二つのレベルの階層構造であってもよい。また、五つレベル以上の階層構造であってもよい。また、図１には図示されていないが、主記憶は補助記憶装置等と接続されていてもよい。
【００１６】
モニタリングユニット４は、ＣＰＵコア２及びメモリデバイス３を監視し、メモリアクセス開始から終了までの間における演算部２２の演算性能を評価する。演算性能とは、例えば、時間（例えば、実行サイクルまたは実時間）あたりの発行、コミットまたは実行された命令数すなわち単位時間あたりの発行、コミットまたは実行された命令数、または単位時間あたりの演算器の使用率といった性能指標をさす。
【００１７】
図１に示すように、モニタリングユニット４は、制御部４１、制御部４１と接続されたグローバルカウンタ４２、制御部４１と接続されたメモリアクセス情報テーブル４３、及び制御部４１と接続されたメモリ階層別情報テーブル記憶部４４を備える。
【００１８】
グローバルカウンタ４２は、実行中のＣＰＵコア２の状態を保持する記憶領域である。図２は、第１の実施形態におけるグローバルカウンタ４２を示す概略ブロック図である。図２に示すように、グローバルカウンタ４２は、時間カウンタ４２１と命令数カウンタ４２２を備える。
【００１９】
時間カウンタ４２１は、任意の時点からの時間を計測する。ここで、時間とは、時間情報を定量的に表せるものであればどのようなものでもよく、クロックサイクル数のようなプロセッサの実装に依存した時間であってもよいし、時刻のようなプロセッサの実装に依存しない時間であってもよい。
【００２０】
時間カウンタ４２１の更新のタイミングは、任意のタイミングでよい。１サイクル毎であってもよいし、１０サイクル毎であってもよいし、１０００サイクル毎であってもよい。
【００２１】
命令数カウンタ４２２は、任意の時点からの命令数を計測する。命令数は、実行された命令数（以下、実行命令数という）が直接的または近似的に計測可能な情報であればどのようなものでもよい。例えば、命令のコミット数をこの命令数として計測してもよいし、第１演算器２２１及び第２演算器２２２で演算を終えた命令数をこの命令数として計測してもよいし、命令の発行数をこの命令数として計測してもよい。
【００２２】
命令数カウンタ４２２の更新のタイミングは、任意のタイミングでよい。例えば、一定のサイクル数毎であってもよいし、一定の命令数毎であってもよい。
【００２３】
メモリアクセス情報テーブル記憶部４３は、実行中のメモリアクセスの情報を記録する。
図３は、第１の実施形態におけるメモリアクセス情報テーブル記憶部４３が記憶するメモリアクセス情報テーブルＴ１の一例である。図３のメモリアクセス情報テーブルＴ１に示すように、メモリアクセス情報テーブル記憶部４３には、メモリアクセス毎に、そのメモリアクセスを識別するメモリアクセスＩＤと、開始時間情報と開始命令数情報が関連付けられて記憶されている。ここで開始時間情報は、メモリアクセスを開始した時刻を表す情報(例えば、時間カウンタ４２１の値)である。また開始命令数情報は、メモリアクセスを開始した時点での命令数(例えば、命令数カウンタ４２２の値)である。
【００２４】
なお、メモリアクセスＩＤには様々なものが利用可能である。例えば、メモリアクセス情報テーブル記憶部４３は、アクセス先のメモリアドレスをメモリアクセスＩＤに用いてもよいし、メモリアクセス発行時に一意に発行されるＩＤをメモリアクセスＩＤとして用いてもよい。
【００２５】
メモリ階層別情報テーブル記憶部４４は、メモリ毎に、対象階層へのメモリアクセスに関する情報を記録する。図４は、第１の実施形態におけるメモリ階層別情報テーブル記憶部４４が記憶するメモリ階層別情報テーブルＴ２の一例である。図４の「Ｎｏｎ−ｍｅｍ時間情報」は、メモリアクセス以外の時間である。図４のメモリ階層別情報テーブルＴ２に示すように、メモリ階層別情報テーブル記憶部４４には、メモリ毎に時間情報と命令数情報が関連付けられて記憶されている。ここで時間情報は、メモリアクセスに要した時間の積算値である。命令数情報は、メモリアクセス中に実行された命令数の積算値である。
【００２６】
制御部４１は、グローバルカウンタ４２、メモリアクセス情報テーブル記憶部４３及びメモリ階層別情報テーブル記憶部４４を制御する。また制御部４１は、加減算を行う演算機能を保持する。
【００２７】
図５は、第１の実施形態における制御部４１を示す概略ブロック図である。制御部４１は、評価部４１３に接続された時間情報取得部４１１、評価部４１３に接続された演算量取得部４１２、時間情報取得部４１１と演算量取得部４１２とに接続された評価部４１３、メモリアクセス情報テーブル記憶部４３と接続された第１記憶処理部４１４、及びメモリアクセス情報テーブル記憶部４３と接続された第２記憶処理部４１５を備える。
【００２８】
第１記憶処理部４１４は、プログラムの任意の時点からの時間を計数する時間カウンタが計数するメモリアクセス開始時の時間カウンタの値を開始時間情報としてメモリアクセス情報テーブル記憶部４３に記憶させる。
【００２９】
第１記憶処理部４１５は、プログラムの任意の時点からの命令数を計数する命令数カウンタ４２２が計数するメモリアクセス開始時の命令数カウンタ４２２の値を開始命令数情報としてメモリアクセス情報テーブル記憶部４３に記憶させる。
【００３０】
時間情報取得部４１１は、命令発行器２１による命令に従ったメモリアクセスユニット２４による対象メモリへのアクセスの開始とこのアクセスの終了とを検知し、この検知に基づいてこのアクセスの開始から終了までの時間をメモリアクセス時間として取得する。より詳細には、時間情報取得部４１１は、対象メモリについて上記メモリアクセス時間を取得する。時間情報取得部４１１は、上記の処理を全てのメモリについて行うことで、全てのメモリについて上記メモリアクセス時間を取得する。すなわち、時間情報取得部４１１は、メモリ毎に上記メモリアクセス時間を取得する。
【００３１】
具体的には、例えば、時間情報取得部４１１は、メモリアクセス開始時の時刻とメモリアクセス終了時の時刻を比較することで、メモリアクセス時間を算出する。より詳細には、時間情報取得部４１１は、例えば、メモリアクセス情報テーブル記憶部４３に記憶された開始時間情報を取得し、メモリアクセス終了時の時間カウンタの値を取得し、取得した開始時間情報と取得した時間カウンタの値の差を、メモリアクセスの際に対象データを取得したメモリについてのメモリアクセス時間として取得する。
時間情報取得部４１１は、取得したメモリアクセス時間を示すメモリアクセス時間情報を評価部４１３へ出力する。
【００３２】
演算量取得部４１２は、メモリアクセスユニット２４が対象メモリへアクセスを開始した時から終了した時までに、命令発行器２１による命令に基づく演算量を算出する。演算量取得部４１２は、上記の処理を全てのメモリについて行うことで、全てのメモリについて、上記演算量を算出する。すなわち、演算量取得部４１２は、メモリ毎に上記演算量を算出する。
【００３３】
ここで、演算量は、例えば、発行、コミットまたは実行された命令数である。その前提で、例えば、演算量取得部４１２は、メモリアクセス開始時の命令数とメモリアクセス終了時の命令数を比較することで、上記アクセス開始から終了までの間の命令数を算出する。
【００３４】
より詳細には、演算量取得部４１２は、例えば、メモリアクセス情報テーブル記憶部４３に記憶された開始命令数情報を取得し、メモリアクセス終了時の命令数カウンタ４２２の値を取得し、取得した開始命令数情報と取得した命令数カウンタ４２２の値との差を、前記メモリアクセスの際に対象データを取得したメモリについての上記アクセス開始から終了までの間の命令数として取得する。
演算量取得部４１２は、取得した演算量（ここでは、一例として命令数）を示す演算量情報を評価部４１３へ出力する。
【００３５】
評価部４１３は、時間情報取得部４１１が取得したメモリアクセス時間と演算量取得部４１２が取得した演算量とに基づいて、上記アクセス開始から終了までの間における演算部２２による演算性能を評価する。より詳細には、評価部４１３は、対象メモリのメモリアクセス時間と、対象メモリの演算量とに基づいて、対象メモリへのアクセス開始から終了までの間における演算部２２による演算性能を評価する。評価部４１３は、上記の処理を全てのメモリについて行うことで、全てのメモリについて演算部２２による演算性能を評価する。すなわち、評価部４１３は、階層状に接続されたメモリ毎に、そのメモリのメモリアクセス情報とそのメモリの演算量情報とに基づいて、そのメモリについてアクセス開始から終了までの間における演算部２２による演算性能を評価する。
【００３６】
以下、あるメモリアクセスを例にし、モニタリングユニット４の動作例を説明する。モニタリングユニット４の動作は、メモリアクセス開始時と、メモリアクセス終了時に行う必要があるため、それぞれについて以下で説明する。
【００３７】
＜モニタリングユニット４のメモリアクセス開始時の処理＞
図６は、第１の実施形態において、メモリアクセス開始時のモニタリングユニット４の処理の流れの一例を示すフローチャートである。
【００３８】
（ステップＳ１０１）メモリアクセス命令がメモリアクセスユニット２４に発行されると、制御部４１はそのメモリアクセス命令の発行を検知する。制御部４１がメモリアクセス開始を検知可能であれば、その実現方法はいかなるものであってもよい。例えば、図１に示すように、メモリアクセスを行うメモリアクセスユニット２４がメモリアクセスの開始を制御部４１に伝達してもよいし、制御部４１がメモリアクセスユニット２４を定期的に監視することによってメモリアクセスの開始を検知してもよい。
【００３９】
（ステップＳ１０２）次に、制御部４１は、メモリアクセス命令発行時のＣＰＵコア２の状態をチェックする。具体的には、例えば、制御部４１は、グローバルカウンタ４２が備える時間カウンタ４２１の値と命令数カウンタ４２２の値を参照し、これら２つの値を現在値情報として取得する。
【００４０】
（ステップＳ１０３）次に、制御部４１は、メモリアクセスを特定可能なメモリアクセスＩＤとともに現在値情報を、メモリアクセス情報テーブル記憶部４４のメモリアクセス情報テーブルに記録する。具体的には、制御部４１は、メモリアクセス情報テーブルの開始時間情報には時間カウンタ４２１の値を、メモリアクセス情報テーブルの開始命令数情報には命令数カウンタ４２２の値を記録する。
【００４１】
以上に処理により、メモリアクセス開始時の時間とその時までに実行された命令数とがメモリアクセス情報テーブル記憶部４４に記録される。
【００４２】
＜モニタリングユニット４のメモリアクセス終了時の処理＞
図７は、第１の実施形態において、メモリアクセス終了時のモニタリングユニット４の処理の流れの一例を示すフローチャートである。
（ステップＳ２０１）まず、制御部４１は、メモリアクセス終了の情報を含むメモリアクセス情報をメモリアクセスユニット２４から受け取る。メモリアクセス情報には、メモリアクセスＩＤと、終了したメモリアクセスがデータを取得したメモリを示すメモリ識別情報とが含まれる。
【００４３】
メモリ識別情報は、メモリデバイス３を構成するメモリを一意に特定できる情報であればどのようなものでもよい。例えば、「Ｌ１キャッシュ」、「主記憶」といったテキストデータであってもよいし、メモリに割り当てられた識別子を付与しておいてもよい。メモリ識別情報は、例えばアクセス対象のデータと一緒にメモリアクセスユニット２４に送付されてもよいし、データが存在した階層のメモリから直接、制御部４１へと伝達されてもよい。
【００４４】
なお、メモリアクセスユニット２４は、メモリアクセスに要した時間からデータを取得したメモリを予測してもよい。具体的には、例えば、メモリアクセスユニット２４は、メモリアクセスに要した時間が第１の閾値以下（例えば、５以下）のサイクル数の場合、データを取得したメモリをＬ１キャッシュと予測してもよい。また、例えば、メモリアクセスユニット２４は、メモリアクセスに要した時間が所定の範囲（１０以上５０未満）のサイクル数の場合、データを取得したメモリをＬ２キャッシュと予測してもよい。また、例えば、メモリアクセスユニット２４は、メモリアクセスに要した時間が第２の閾値以上（例えば、８０以上）のサイクル数の場合、データを取得したメモリを主記憶と予測してもよい。
【００４５】
図１ではメモリアクセスユニット２４が制御部４１にメモリ識別情報を送付するように記載されているが、制御部４１がメモリアクセスの終了を検知できればどのような実現形態を用いてもよい。例えば、制御部４１がメモリアクセスユニット２４を定期的にチェックしてもよい。
【００４６】
制御部４１は、メモリアクセス終了の情報を取得すると、ステップＳ２０２〜ステップＳ２０４にあるように、それぞれの情報を取得するために、グローバルカウンタ４２、メモリアクセス情報テーブル記憶部４３及びメモリ階層別情報テーブル記憶部４４に対して、リクエストを送付する。
【００４７】
（ステップＳ２０２）制御部４１は、グローバルカウンタ４２からは現在値情報を取得する。既述したように、現在値情報は、時間カウンタ４２１の値と命令数カウンタ４２２の値である。
【００４８】
（ステップＳ２０３）制御部４１は、ステップＳ２０２及びＳ２０４と並行して、メモリアクセス情報テーブル記憶部４３から、開始時間情報と開始命令数情報を取得する。
【００４９】
（ステップＳ２０４）制御部４１は、ステップＳ２０２及びＳ２０３と並行して、メモリ階層別情報テーブル記憶部４４から、ステップＳ２０１で取得したメモリ識別情報が示すメモリ、すなわちデータを取得したメモリについて、時間情報と命令数情報を取得する。
【００５０】
なお、図７ではステップＳ２０２〜Ｓ２０４の処理を同時に行うように図示されているが、これは同時処理が可能であることを示しているだけであり、必ずしも同時処理に限定されるものではない。例えば、ステップＳ２０２〜Ｓ２０４の処理を逐次的に行ってもよい。
【００５１】
（ステップＳ２０５）ステップＳ２０３及びステップＳ２０４の処理が完了すると、制御部４１の時間情報取得部４１１は、対象メモリへのアクセス開始から終了までの時間(以下、メモリアクセス時間)を算出する。具体的には、例えば、制御部４１の時間情報取得部４１１は、グローバルカウンタ４２の時間カウンタ４２１の値から、開始時間情報の値を減算し、減算して得られた値をメモリアクセス時間とする。
【００５２】
また、制御部４１の演算量取得部４１２は、メモリアクセス中に実行された命令数(以下、メモリアクセス中命令数という)を算出する。また、例えば、制御部４１の演算量取得部４１２は、グローバルカウンタ４２の命令数カウンタ４２２の値から開始命令数情報の値を減算し、減算して得られた値をメモリアクセス中命令数とする。
【００５３】
続いて、制御部４１は、以下のようにして、対象メモリのメモリアクセス時間およびメモリアクセス中命令数に基づいて、メモリ階層別情報テーブルＴ２を更新する。
【００５４】
（ステップＳ２０７）ステップＳ２０５及びステップＳ２０６の処理が完了すると、制御部４１は、例えば、ステップＳ２０４で読み出した時間情報の値に、ステップＳ２０５で算出したメモリアクセス時間を加算し、加算して得られた値を更新値情報の一つである時間更新値とする。同様に、例えば、制御部４１は、命令数情報の値に、ステップＳ２０５で算出したメモリアクセス中命令数を加算し、加算して得られた値を更新値情報の一つである命令数更新値とする。
【００５５】
（ステップＳ２０８）次に、制御部４１は、メモリ階層別情報テーブル記憶部４４に記憶されたメモリ階層別情報テーブルＴ２において、ステップＳ２０１で取得したメモリ識別情報が示すメモリに対応する時間情報を時間更新値で上書きする。また、制御部４１は、メモリ階層別情報テーブル記憶部４４に記憶されたメモリ階層別情報テーブルＴ２において、ステップＳ２０１で取得したメモリ識別情報が示すメモリに対応する命令数情報を命令数更新値で上書きする。
【００５６】
以上の処理により、対象メモリアクセスについて、メモリアクセス時間とメモリアクセス中命令数が取得される。また、メモリアクセスの積算時間とメモリアクセス中の命令数の積算値がメモリ毎にメモリ階層別情報テーブルＴ２に記憶される。
【００５７】
以上、第１の実施形態において、時間情報取得部４１１は、メモリアクセス毎のメモリアクセスに要した時間を示すメモリアクセス時間情報を取得する。そして、演算量取得部４１２が、メモリアクセス毎のメモリアクセス中の演算量を示す演算量情報を取得する。そして、評価部４１３が、上記メモリアクセス情報と上記演算量情報とに基づいて、対象メモリへのアクセス開始から終了までの間における演算部２２による演算性能を評価する。
【００５８】
制御部４１は、算出したメモリアクセス時間とメモリアクセス中命令数とに基づいて、対象メモリへのアクセス開始から終了までの間における演算部２２による演算性能の一例として、プロセッサ１の実行効率を評価する。具体的には、例えば、制御部４１は、このプロセッサ１の実行効率の一例として、メモリアクセス中の命令実行スループットを算出する。例えば、命令実行スループットをＩＰＣ（Ｉｎｓｔｒｕｃｔｉｏｎｓ  Ｐｅｒ  Ｃｙｃｌｅ：単位サイクル当たりの命令数）で表現する場合、制御部４１は、例えば、算出したメモリアクセス中命令数をメモリアクセス時間で除算し、除算した値をＩＰＣとする。これにより、対象のメモリアクセスについて、ＩＰＣが算出される。 このような、メモリアクセス時間とメモリアクセス中命令数に基づく演算性能の算出は任意のタイミングで行ってもよい。例えば、ステップＳ２０５の後に行ってもよいし、Ｓステップ２０８の後に行ってもよい。
【００５９】
このように、対象メモリへのアクセス開始から終了までの間における演算部２２による演算性能を評価できるので、メモリアクセスがプロセッサの演算性能に与える影響の程度を精度良く評価することができる。
【００６０】
なお、本実施形態では、メモリ毎に時間と命令数を個別の記憶領域に保持する方式を示したが、保持する情報はメモリ毎の演算性能であってもよい。例えば、制御部４１は、メモリ階層別情報テーブルＴ２にメモリアクセス中命令数を個別に記録せず、２つの値を除算して得られるＩＰＣを記録してもよい。
【００６１】
図１に示したプロセッサ１では、ＣＰＵコア２、メモリデバイス３及びモニタリングユニット４を個別の機能ユニットとして例示した。しかし、これに限定されるものではなく、それぞれの機能ブロックを分割または結合してもよい。例えば、メモリアクセス情報テーブル記憶部４３がメモリアクセスユニット２４と結合されて実装されてもよいし、制御部４１による制御機能が制御対象のカウンタまたはテーブルに分散されていてもよい。
【００６２】
また、モニタリングユニット４の機能は、一般的なプロセッサに備えられている機能を利用し実装することも可能である。例えば、モニタリングユニット４の時間カウンタ４２１は、一般的なプロセッサが備えているサイクル数計測カウンタを利用してもよいし、制御部４１の演算は、ＣＰＵコア２の第１演算器２２１または第２演算器２２２を利用してもよい。メモリアクセスユニット２４は、メモリアクセス毎にタグ付けされて管理するため、この管理の際の識別情報に、メモリアクセス情報テーブル記憶部４３のメモリアクセスＩＤを流用してもよい。
【００６３】
また、モニタリングユニット４の機能には様々な実装形態をとりうる。全てハードウェアで実装してもよいし、全てソフトウェアで実装してもよいし、ハードウェアとソフトウェアの両方を用いて実装してもよい。ハードウェアとソフトウェアの両方を用いる実装として、例えば、図１のグローバルカウンタ４２、メモリ階層別情報テーブル記憶部４４、メモリアクセス情報テーブル記憶部４３の情報記憶機能および情報更新機能をハードウェアで実装し、それらを読み取り演算性能を算出する制御部４１の機能をソフトウェアで実装するといった形態が考えられる。
【００６４】
（第２の実施形態）
続いて、第２の実施形態について説明する。第２の実施形態は、第１の実施形態のモニタリングユニット４の利用例である。モニタリングユニットの計測情報から算出できるメモリアクセス中演算性能を利用すれば、特定のメモリがどの程度プロセッサの性能に影響を与えているか判明する。そこで、本実施形態におけるプロセッサは、レイテンシが異なる複数のメモリを使い分ける場合の制御情報としてメモリアクセス中演算性能を利用する。
【００６５】
図８は、第２の実施形態におけるプロセッサ１ｂを示す概略ブロック図である。プロセッサ１ｂは、情報処理装置５、情報処理装置５及びメモリ７に接続された第１ＣＰＵコア１００、情報処理装置５及びメモリ７に接続された第２ＣＰＵコア２００、及びメモリ７を備える。
【００６６】
情報処理装置５は、第１ＣＰＵコア１００と第２ＣＰＵコア２００への処理の割り当てを制御する。ここで、情報処理装置５は、インタフェース部５２に接続された処理管理部５１、処理管理部５１と第１ＣＰＵコア１００と第２ＣＰＵコア２００に接続されたインタフェース部５２、インタフェース部５２と第１ＣＰＵコア１００に接続されたモニタリングユニット５３、及びインタフェース部５２と第２ＣＰＵコア２００に接続されたモニタリングユニット５４を備える。
【００６７】
処理管理部５１は、処理に関する情報の管理や、第１ＣＰＵコア１００及び第２ＣＰＵコア２００に対する処理の割り当てを行う。「処理」とは、２つ以上の命令からなる命令列を指し、例えば、プロセスやスレッドや基本ブロックなどである。処理管理部２０は、スケジューラ５１３に接続されたコア情報テーブル記憶部５１２及びコア情報テーブル記憶部５１２及びインタフェース部５２に接続されたスケジューラ（割当部）５１３を備える。
【００６８】
処理管理部５１は主にソフトウェアで実装されるが、一部もしくはすべてがハードウェアで実装されてもよい。処理管理部５１がソフトウェアで実装される場合、そのプログラムが図１の第１のコア１００もしくは第２のコア２００で実行されてもよいし、第１のコア１００と第２のコア２００以外の演算装置で実行されてもよい。
【００６９】
コア情報テーブル記憶部５１２は、コア毎の情報を記録するテーブルである。
【００７０】
スケジューラ５１３は、コア情報テーブル記憶部５１２の情報をもとに、インタフェース部５２を介して、第１ＣＰＵコア１００及び第２ＣＰＵコア２００のいずれかに処理を割り当てる。その際、スケジューラ５１３は、例えば、演算部２２による演算性能に加えてメモリアクセス時間に基づいて、いずれかのコアに処理を割り当てる。
【００７１】
具体的には、例えば、スケジューラ５１３は、時間情報取得部４１１が取得した各メモリアクセス時間の比較結果と、評価部４１３が評価して得た各演算性能の比較結果とに基づいて、いずれかのコアに処理を割り当ててもよい。また、例えば、スケジューラ５１３は、時間情報取得部４１１が取得した対象メモリへのメモリアクセス時間と全メモリへのメモリアクセス時間との比較結果と、評価部４１３が評価して得た各演算性能の比較結果とに基づいて、いずれかのコアに処理を割り当ててもよい。
【００７２】
なお、スケジューラ５１３は、演算部２２の演算性能に少なくとも基づいて、プログラムを処理するコアを割り当ててもよい。より詳細には、スケジューラ５１３は、モニタリングユニット５３の評価部が評価して得たメモリ毎の実行効率（例えば、ＩＰＣ）を比較し、比較した結果に基づいて、いずれかのコアに処理を割り当ててもよい。
【００７３】
また、スケジューラ５１３は、インタフェース部５２を介して、第１ＣＰＵコア１００及び第２ＣＰＵコア２００からの情報を受け取り、コア情報テーブル記憶部５１２の内容を更新する。
【００７４】
インタフェース部５２は、モニタリングユニット５３、モニタリングユニット５４、第１ＣＰＵコア１００及び第２ＣＰＵコア２００との情報交換を行う入出力機能を有する。
【００７５】
モニタリングユニット５３は、第１の実施形態におけるモニタリングユニット４と同様の機能を有し、第１ＣＰＵコア１００及びメモリ７を監視し、第１ＣＰＵコア１００の実行効率に対するメモリアクセスの影響の程度を評価する。
【００７６】
モニタリングユニット５４は、第１の実施形態におけるモニタリングユニット４と同様の機能を有し、第２ＣＰＵコア２００及びメモリ７を監視し、第２ＣＰＵコア２００の実行効率に対するメモリアクセスの影響の程度を評価する。
【００７７】
図９は、第２の実施形態におけるコア情報テーブルＴ３の一例である。同図のテーブルＴ３において、コアを識別するコアＩＤと、ローカルメモリ記録方式とが関連付けられている。本実施形態では、一例として、第１ＣＰＵコア１００のコアＩＤが１であり、第２ＣＰＵコア２００のコアＩＤが２である。ローカルメモリ記録方式に、コアローカルなメモリの種類が記録される。
【００７８】
第１ＣＰＵコア１００には、ローカルメモリにＭＲＡＭが用いられているため、ＭＲＡＭであることを識別可能な情報（本例では文字列「ＭＲＡＭ」）が記録される。第２ＣＰＵコア２００にはローカルメモリにＳＲＡＭが用いられているため、ＳＲＡＭであることを識別可能な情報（本例では文字列「ＳＲＡＭ」）が記録される。
【００７９】
本実施形態では、コアローカルなメモリの種類を文字列で表現してこれを記録することとしたが、スケジューラ２３がコアの特徴を識別可能な情報であれば、文字列に限らない。例えば、ＭＲＡＭが値「１」に対応し、ＳＲＡＭに値「２」が対応することを仕様として予め決めておいてもよい。その場合、コア情報テーブル記憶部５１２が保持するコア情報テーブルＴ３において、コアＩＤ１のローカルメモリ記録方式として「１」が、コアＩＤ２のローカルメモリ記録方式として「２」が記録されてもよい。
【００８０】
図９の例では、コア情報テーブル記憶部５１２が保持するコア情報テーブルＴ３にローカルメモリ記録方式のみを情報として記録されることを想定したが、それ以外の情報が記録されてもよい。例えば、動作周波数などのコアの演算能力が記録されてもよい。
【００８１】
図１０は、第２の実施形態におけるメモリ７を示す概略ブロック図である。メモリ７は、第１ＣＰＵコア１００と接続されたＬ１命令キャッシュ１０１、第１ＣＰＵコア１００と接続されたＬ１データキャッシュ１０２、Ｌ１命令キャッシュ１０１及びＬ１データキャッシュ１０２と接続されたＬ２キャッシュ１０３を備える。
【００８２】
メモリ７は、第２ＣＰＵコア２００と接続されたＬ１命令キャッシュ２０１、第２ＣＰＵコア２００と接続されたＬ１データキャッシュ２０２、Ｌ１命令キャッシュ２０１及びＬ１データキャッシュ２０２と接続されたＬ２キャッシュ２０３を更に備える。メモリ７は、Ｌ２キャッシュ１０３及びＬ２キャッシュ２０３と接続されたバス３００及びバス３００と接続された主記憶４００を備える。
【００８３】
全てのＬ１キャッシュ（Ｌ１命令キャッシュ１０１及び２０１、Ｌ１データキャッシュ１０２及び２０２）は、一例として、ＳＲＡＭで構成され、主記憶はＭＲＡＭで構成されている。一方、Ｌ２キャッシュについては、第１ＣＰＵコア１００がアクセス可能なＬ２キャッシュ１０３はＭＲＡＭであるのに対し、第２ＣＰＵコア２００がアクセス可能なＬ２キャッシュ２０３はＳＲＡＭである。
【００８４】
以下では、アクセス可能なＬ２キャッシュがＭＲＡＭの第１ＣＰＵコア１００をＭＲＡＭコアともいう。アクセス可能なＬ２キャッシュがＳＲＡＭの第２ＣＰＵコア２００をＳＲＡＭコアともいう。
【００８５】
なお、本実施形態では、一例として、ＭＲＡＭで構成されたＬ２キャッシュ１０３はＳＲＡＭで構成されたＬ２キャッシュ２０３より大容量であるのものレイテンシが大きい（低速）。逆な観点からみれば、ＳＲＡＭで構成されたＬ２キャッシュ２０３は、ＭＲＡＭで構成されたＬ２キャッシュ１０３より小容量であるもののレイテンシが小さい（高速）である。
【００８６】
第１ＣＰＵコア１００と第２ＣＰＵコア２００を使い分けるポリシーには様々なものが考えられる。単純な方法としては、ＭＲＡＭコアとＳＲＡＭコアの両方でプログラムを実行し、性能が高いコアを利用する制御が考えられる。しかしながら、この方法では最適なＣＰＵコアの選択に両方のＣＰＵコアでの事前実行が必要となる。当然、片方のＣＰＵコアのみの実行で最適なＣＰＵコアが選択できることが望ましい。
【００８７】
本実施形態では、片方のＣＰＵコアのみの実行で最適なＣＰＵコアを選択するポリシーの一例として、スケジューラ５１３は、例えば、ＭＲＡＭコアで処理を実行する際の短所がプロセッサ全体として問題となっていなければＭＲＡＭコアが最適であると判断する。具体的には例えば、スケジューラ５１３は、まずＭＲＡＭコアに最初に処理を割り当てる。そして、ＭＲＡＭから構成されるＬ２キャッシュの短所であるレイテンシがプロセッサ性能へと影響を与えていなければ、スケジューラ５１３は、ＭＲＡＭコアでそのまま処理を実行させる。このような制御を行う場合に、スケジューラ５１３は、例えば、モニタリングユニット５３及び５４が測定したメモリ毎のアクセス中ＩＰＣを用いる。
【００８８】
（第２の実施形態の第１の処理例）
以下、第２の実施形態の第１の処理例について説明する。ＭＲＡＭコアにおいて、ＭＲＡＭから構成されるＬ２キャッシュのレイテンシが問題とならないのは、第１の条件である「Ｌ２キャッシュへのアクセス時間がプログラムの実行時間と比較し十分に小さい」場合、または第２の条件である「Ｌ２キャッシュへのアクセス時間がプログラムの実行時間と比較しそれなりに大きいものの、メモリアクセスレイテンシ隠蔽技術の効果により、Ｌ２キャッシュのレイテンシの影響でそれほど性能が低下していない」場合の２つである。
【００８９】
スケジューラ５１３は、これらの条件を、モニタリングユニット５３及び５４の情報から判断可能である。スケジューラ５１３は、一例として、第１の条件を、メモリ階層別情報テーブルＴ２のＬ２キャッシュ時間情報がプログラムの全実行時間に占める割合から判断する。スケジューラ５１３は、第２の条件を、一例として、メモリ階層別情報テーブルＴ２から算出されるメモリ毎のアクセス中ＩＰＣから判断する。以下、それぞれの判断処理について例示する。
【００９０】
まず、第１の条件である「Ｌ２キャッシュへのアクセス時間がプログラムの実行時間と比較し十分に小さい」場合の例として、ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの一例を図１１に示す。図１１は、ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの一例である。同図のメモリ階層別テーブルにおいて、時間と命令数が関連付けられている。Ｎｏｎ−ｍｅｍは、メモリアクセスが無いときを表す。Ｌ１キャッシュは、Ｌ１キャッシュにアクセスしたときを表す。Ｌ２キャッシュは、Ｌ２キャッシュにアクセスしたときを表す。主記憶は、主記憶にアクセスしたときを表す。
【００９１】
図１１のテーブルを参照すると分かるように、Ｌ２キャッシュ以外（Ｎｏｎ−ｍｅｍ、Ｌ１キャッシュ、主記憶）の時間合計は２２００サイクルであるが、Ｌ２キャッシュへのアクセス時間は２０サイクルとなっており、この時間合計に占めるＬ２キャッシュへのアクセス時間の割合が非常に小さい。従って、Ｌ２キャッシュアクセス中のＩＰＣをチェックするまでもなくＭＲＡＭ  Ｌ２キャッシュのレイテンシが問題とならないことが分かり、対象プログラムのＭＲＡＭコアでの実行が最適であると判断できる。
【００９２】
次に、第２の条件である「Ｌ２キャッシュへのアクセス時間がプログラムの実行時間と比較しそれなりに大きいものの、メモリアクセスレイテンシ隠蔽技術の効果により、Ｌ２キャッシュのレイテンシによりそれほど性能が低下していない」かどうかをチェックする例を示す。なお、一般的にメモリアクセスレイテンシが長い階層ほどＣＰＵ性能を低下させやすい。このため、メモリ毎のアクセス中ＩＰＣは、一般的に、メモリアクセスが無いときのＩＰＣが最も高く、主記憶に近いメモリほどメモリアクセス中のＩＰＣが低下する傾向にある。逆に言うと、モニタリングユニット５３及び５４で計測したＬ２キャッシュアクセス中のＩＰＣが、メモリアクセスが無いときのＩＰＣや、Ｌ１キャッシュアクセス中のＩＰＣと変わらなければ、スケジューラ５１３は、Ｌ２キャッシュレイテンシ要因での性能低下が無いと判断可能である。
【００９３】
あるプログラムをＭＲＡＭコアで実行した時のメモリ階層別テーブルが、例えば図１２のようになった場合を考える。図１２は、ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの第２の例である。図１１と同様に、同図のメモリ階層別テーブルにおいて、時間と命令数が関連付けられている。Ｎｏｎ−ｍｅｍは、メモリアクセスが無いときを表す。Ｌ１キャッシュは、Ｌ１キャッシュにアクセスしたときを表す。Ｌ２キャッシュは、Ｌ２キャッシュにアクセスしたときを表す。主記憶は、主記憶にアクセスしたときを表す。
【００９４】
この場合のメモリ階層毎のＩＰＣを計算すると図１３の表のようになる。図１３は、図１２のメモリ階層別テーブルの場合におけるメモリ毎のＩＰＣを示す表である。図１３の表の項目は、Ｎｏｎ−ｍｅｍはメモリアクセスが無いときのＩＰＣを表しており、その他のメモリの名前はそれぞれのメモリにアクセス中のＩＰＣを表している。この例だと、Ｌ２キャッシュアクセス中のＩＰＣは４であり、メモリアクセスが無いときのＩＰＣおよびＬ１キャッシュアクセス中のＩＰＣも４であるため、Ｌ２キャッシュのレイテンシによるプロセッサ１ｂの性能低下が無いことが分かる。つまり、この場合はＭＲＡＭ  Ｌ２キャッシュのレイテンシがプロセッサ１ｂ全体の性能において問題とならないことが分かり、ＭＲＡＭコアでの実行が最適であると判断できる。
【００９５】
一方で、ＭＲＡＭコアでプログラムを実行した結果、ＳＲＡＭコアへのプログラムの再割り当てが必要なメモリ階層別テーブルの例を図１４に示す。図１４は、ＭＲＡＭコアであるプログラムを実行した後のメモリ階層別テーブルの第３の例である。図１１と同様に、同図のメモリ階層別テーブルにおいて、時間と命令数が関連付けられている。Ｎｏｎ−ｍｅｍは、メモリアクセスが無いときを表す。Ｌ１キャッシュは、Ｌ１キャッシュにアクセスしたときを表す。Ｌ２キャッシュは、Ｌ２キャッシュにアクセスしたときを表す。主記憶は、主記憶にアクセスしたときを表す。
【００９６】
この場合のメモリ毎のＩＰＣを計算すると図１５の表のようになる。図１５は、図１４のメモリ階層別テーブルの場合におけるメモリ毎のＩＰＣを示す表である。図１５に示すように、メモリアクセスが無いときのＩＰＣ及びＬ１キャッシュアクセス中のＩＰＣは４であるが、Ｌ２キャッシュアクセス中のＩＰＣは０．３であり、Ｌ２キャッシュのレイテンシによりプロセッサ１ｂの性能が低下していることが分かる。この場合、スケジューラ５１３は、最適化のため、ＭＲＡＭコアからＳＲＡＭコアへと処理の再割り当てを行う。
【００９７】
図１６は、第２の実施形態におけるプロセッサ１ｂの処理の第１の例を示すフローチャートである。ここでは、最初に、処理が第１ＣＰＵコアに割り当てられていることを前提とする。プロセッサ１ｂは、所定の時刻が経過した場合に、以下の処理を実行する。ここで、所定の時刻は、例えば、サイクル数、実時間、またはプログラムの命令数である。例えば、プロセッサ１ｂは、１０００命令実行したら、以下の処理を実行してもよい。
【００９８】
（ステップＳ３０１）まず、モニタリングユニット５３の制御部４１は、メモリ階層別情報テーブル記憶部４４に記憶されているメモリ階層別情報テーブルＴ２を参照して、メモリ毎のアクセス時間を取得する。
【００９９】
（ステップＳ３０２）次に、モニタリングユニット５３の制御部４１は、メモリ階層別情報テーブル記憶部４４に記憶されているメモリ階層別情報テーブルＴ２を参照して、メモリ毎の命令数を取得する。
【０１００】
（ステップＳ３０３）次に、モニタリングユニット５３の制御部４１は、メモリ階層毎に、該当する命令数を該当するアクセス時間で除算することで、メモリ階層毎にＩＰＣを取得する。
【０１０１】
（ステップＳ３０４）次に、スケジューラ５１３は、メモリ階層別情報テーブル記憶部４４に記憶されているメモリ階層別情報テーブルＴ２内の全てのメモリのアクセス時間の総和を全実行時間として算出する。本例では、全実行時間をメモリ階層別情報テーブルＴ２の情報を利用し算出するが、全実行時間の算出方法はこれに限定されない。例えば、全実行時間をカウントするテーブルを別に保持してもよい。
【０１０２】
（ステップＳ３０５）次に、スケジューラ５１３は、例えば、Ｌ２キャッシュ１０３へのアクセス時間がプログラムの全実行時間に所定の割合（例えば、５％）を乗じた時間よりも短いか否か判定する。Ｌ２キャッシュ１０３へのアクセス時間がプログラムの全実行時間に所定の割合を乗じた時間よりも短い場合（ＹＥＳ）、スケジューラ５１３はステップＳ３０６へ進む。Ｌ２キャッシュ１０３へのアクセス時間がプログラムの全実行時間に所定の割合（例えば、５％）を乗じた時間より短くない場合（ＮＯ）、ステップＳ３０７に進む。
【０１０３】
（ステップＳ３０６）ステップＳ３０５で、Ｌ２キャッシュ１０３へのアクセス時間がプログラムの全実行時間に所定の割合を乗じた時間よりも短いと判定された場合、スケジューラ５１３は第１ＣＰＵコア（ＭＲＡＭコア）１００にそのまま処理を実行させ、その処理を終了する。
【０１０４】
（ステップＳ３０７）一方、ステップＳ３０５で、Ｌ２キャッシュ１０３へのアクセス時間がプログラムの全実行時間に所定の割合を乗じた時間よりも短くないと判定された場合、スケジューラ５１３は、Ｌ２キャッシュアクセス１０３中のＩＰＣがＬ１データキャッシュ１０２アクセス中のＩＰＣに所定の割合（例えば、１０％）を乗じた値よりも小さいか否か判定する。
【０１０５】
Ｌ２キャッシュ１０３アクセス中のＩＰＣがＬ１データキャッシュ１０２アクセス中のＩＰＣの所定の割合よりも小さい場合（ＹＥＳ）、スケジューラ５１３はステップＳ３０８へ進む。Ｌ２キャッシュ１０３アクセス中のＩＰＣがＬ１データキャッシュ１０２アクセス中のＩＰＣに所定の割合を乗じた値よりも小さくない場合（ＮＯ）、スケジューラ５１３はステップＳ３０９へ進む。
【０１０６】
（ステップＳ３０８）ステップＳ３０７で、Ｌ２キャッシュ１０３アクセス中のＩＰＣがＬ１データキャッシュ１０２アクセス中のＩＰＣに所定の割合を乗じた値よりも小さいと判定された場合、スケジューラ５１３は第１ＣＰＵコア（ＭＲＡＭコア）１００から第２ＣＰＵコア（ＳＲＡＭコア）２００へと処理の再割り当てを行い、その処理を終了する。
【０１０７】
（ステップＳ３０９）ステップＳ３０７で、Ｌ２キャッシュ１０３アクセス中のＩＰＣがＬ１データキャッシュ１０２アクセス中のＩＰＣに所定の割合を乗じた値よりも小さくないと判定された場合、スケジューラ５１３は第１ＣＰＵコア（ＭＲＡＭコア）１００にそのまま処理を実行させ、その処理を終了する。
【０１０８】
なお、本例では、スケジューラ５１３は、最初に第１の条件をチェックし、第２の条件をチェックした。しかしながら、この順番に限定されるものではなく、スケジューラ５１３は、逆の順番でチェックを行ってもよい。
【０１０９】
以上、第２の実施形態の第１の処理例において、スケジューラ５１３は、ＭＲＡＭからなる対象メモリへのアクセス時間と全実行時間との比較、及び対象メモリにアクセス中のＩＰＣと他のメモリにアクセス中のＩＰＣとの比較に基づいて、いずれかのコアに処理を割り当てる。
【０１１０】
これにより、対象メモリへのアクセス時間がプログラムの全実行時間よりも十分に小さい場合、ＭＲＡＭコアに処理が割り当てられる。その場合、ＭＲＡＭコアが実行してＭＲＡＭからなる対象メモリへアクセスしたとしても、アクセス時間がプログラムの全実行時間より十分に小さいので、処理性能の低下を抑えることができる。
【０１１１】
また、対象メモリにアクセス中のＩＰＣが、他のメモリにアクセス中のＩＰＣより小さい場合、対象メモリへのアクセスによって処理の実行効率が低下しているので、ＭＲＡＭコアからＳＲＡＭコアへ処理の割り当てを変更することで、性能の低下を抑えることができる。一方、対象メモリにアクセス中のＩＰＣが、他のメモリにアクセス中のＩＰＣと比べてあまり低下していない場合、対象メモリへのアクセスによって処理の実行効率があまり低下していないので、ＭＲＡＭコアが処理をそのまま実行しても、大きな性能の低下にはならない。
【０１１２】
よって、第２の実施形態の第１の処理例において、スケジューラ５１３は、メモリアクセスによる処理性能の低下を抑えることができるＣＰＵコアに処理を割り当てることができるので、プロセッサの演算性能を向上させることができる。
【０１１３】
（第２の実施形態の第２の処理例）
続いて、第２の実施形態の第２の処理例について説明する。第１の処理例では、スケジューラ５１３は、Ｌ２キャッシュ１０３へのアクセス時間と全実行時間との比較結果、及びＬ２キャッシュ１０３アクセス中のＩＰＣとＬ１データキャッシュ１０２アクセス中のＩＰＣとの比較結果に基づいて、いずれかのコアに処理を割り当てた。
【０１１４】
それに対し、第２の処理例では、スケジューラ５１３は、主記憶４００へのアクセス時間、Ｌ２キャッシュ１０３へのアクセス時間、主記憶４００アクセス中のＩＰＣ、及びＬ２キャッシュ１０３アクセス中のＩＰＣを参照して、いずれかのコアに処理を割り当てる。
【０１１５】
これにより、Ｌ２キャッシュ１０３へのアクセス時間が処理効率低下の原因になっている場合、ＭＲＡＭコアからＳＲＡＭコアへ処理の割り当てを変更することができる。その結果、アクセスするＬ２キャッシュがＭＲＡＭからＳＲＡＭへと変わり、Ｌ２キャッシュへのアクセス速度が向上するので、処理効率の向上が期待できる。また、主記憶４００へのアクセス時間が処理効率低下の原因になっている場合、ＳＲＡＭコアからＭＲＡＭコアへ処理の割り当てを変更することができる。その結果、アクセスするＬ２キャッシュがＳＲＡＭからＭＲＡＭへと変わり、Ｌ２キャッシュの容量が大きくなって、主記憶へのアクセス頻度が低下するので、処理効率の向上が期待できる。
【０１１６】
以下、具体的にスケジューラ５１３の処理を説明する。例えば、ＳＲＡＭコアで実行中に、スケジューラ５１３は、例えば、主記憶４００のＩＰＣ低下度とＬ２キャッシュ２０３のＩＰＣ低下度を算出する。具体的には、例えば、スケジューラ５１３は、主記憶４００より上位の階層のキャッシュにアクセス中のＩＰＣで主記憶４００アクセス中のＩＰＣを除算し、１からその除算後の値を減算した数値を主記憶４００のＩＰＣ低下度として算出する。ここで、主記憶４００より上位の階層のキャッシュにアクセス中のＩＰＣは、例えば、Ｌ２キャッシュ２０３にアクセス中のＩＰＣ、Ｌ１キャッシュにアクセス中のＩＰＣまたはメモリアクセスしない場合のＩＰＣ・若しくは処理全体のＩＰＣである。また、例えば、スケジューラ５１３は、Ｌ２キャッシュ２０３より上位の階層のキャッシュにアクセス中のＩＰＣ（例えば、Ｌ１キャッシュにアクセス中のＩＰＣまたはメモリアクセスしない場合のＩＰＣ・若しくは処理全体のＩＰＣ）でＬ２キャッシュにアクセス中のＩＰＣを除算し、１からその除算後の値を減算した数値をＬ２キャッシュ２０３のＩＰＣ低下度として算出する。
【０１１７】
例えば、ＳＲＡＭコアで実行中に、主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積が、Ｌ２キャッシュ２０３へのアクセス時間とＬ２キャッシュ２０３のＩＰＣ低下度との積より大きい場合、Ｌ２キャッシュ２０３より主記憶４００へのアクセスで待たされているので、スケジューラ５１３は、ＳＲＡＭコアからＭＲＡＭコアへ処理の割り当てを変更する。ここで、主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積は、主記憶４００で待たされている時間に相当する係数である。Ｌ２キャッシュ２０３へのアクセス時間とＬ２キャッシュ２０３のＩＰＣ低下度との積は、Ｌ２キャッシュ２０３で待たされている時間に相当する係数である。
これにより、上述したようにＭＲＡＭのＬ２キャッシュ１０３はＳＲＡＭのＬ２キャッシュ２０３より容量が大きいので、ＭＲＡＭコアは、ＳＲＡＭコアよりも主記憶４００へのアクセス時間を少なくすることができ、主記憶４００へのアクセスで待たされている時間を短くすることができる。その結果、スケジューラ５１３は、処理の実行効率を向上させることが期待できる。
【０１１８】
また、例えば、スケジューラ５１３は、現在処理を実行しているコアがアクセス可能な対象Ｌ２キャッシュへのアクセス時間の全実行時間に対する割合、及び全実行時間に対する主記憶４００アクセス時間の割合が、両方とも閾値より大きいか否か判定する。両方とも閾値より大きい場合、スケジューラ５１３は、対象Ｌ２キャッシュへのアクセス時間と対象Ｌ２キャッシュのＩＰＣ低下度との積と、主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積とを比較する。対象Ｌ２キャッシュへのアクセス時間と対象Ｌ２キャッシュのＩＰＣ低下度との積の方が小さい場合、対象Ｌ２キャッシュより主記憶４００で待たされていることになる。一方、主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積の方が小さい場合、主記憶４００より対象Ｌ２キャッシュで待たされていることになる。
【０１１９】
ここで、一例として、最初にＭＲＡＭコアに処理が割り当てられている場合を前提とする。例えば、対象Ｌ２キャッシュがＭＲＡＭで構成されたＬ２キャッシュ１０３の場合を想定する。主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積よりＬ２キャッシュ１０３へのアクセス時間とＬ２キャッシュ１０３のＩＰＣ低下度との積の方が大きい場合、主記憶４００よりＬ２キャッシュ１０３へのアクセスで待たされている場合、スケジューラ５１３は、ＭＲＡＭコアからＳＲＡＭコアへ処理の割り当てを変更する。これにより、ＳＲＡＭコアに処理が割り当てられることで、ＳＲＡＭコアがアクセスするＬ２キャッシュ２０３がＬ２キャッシュ１０３より高速であるので、Ｌ２キャッシュへのアクセスで待たされている時間が短縮される。その結果、スケジューラ５１３は、処理の実行効率を向上させることが期待できる。
【０１２０】
一方、一例として、最初にＳＲＡＭコアに処理が割り当てられている場合を前提とする。例えば、対象Ｌ２キャッシュがＳＲＡＭで構成されたＬ２キャッシュ２０３の場合を想定する。Ｌ２キャッシュ２０３へのアクセス時間とＬ２キャッシュ２０３のＩＰＣ低下度との積より主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積の方が大きい場合、Ｌ２キャッシュ２０３より主記憶４００へのアクセスで待たされている場合、スケジューラ５１３は、ＳＲＡＭコアからＭＲＡＭコアへ処理の割り当てを変更する。これにより、ＭＲＡＭコアに処理が割り当てられることで、ＭＲＡＭコアがアクセスするＬ２キャッシュ１０３の容量がＬ２キャッシュ２０３の容量より大きいので、主記憶４００へアクセスする回数が少なくなるので、主記憶４００へのアクセスで待たされている時間を短くすることができる。そのため、主記憶４００アクセス中のＩＰＣの値が改善される。その結果、スケジューラ５１３は、処理の実行効率向上が期待できる。
【０１２１】
図１７は、第２の実施形態におけるプロセッサ１ｂの処理の第２の処理例を示すフローチャートである。プロセッサ１ｂは、所定の時刻が経過した場合に、以下の処理を実行する。ここで、所定の時刻は、例えば、サイクル数、実時間、またはプログラムの命令数である。例えば、プロセッサ１ｂは、１０００命令実行したら、以下の処理を実行してもよい。
【０１２２】
ステップＳ４０１〜Ｓ４０３の処理は、図１６のステップＳ３０１〜Ｓ３０３と同一であるので、その説明を省略する。
【０１２３】
（ステップＳ４０６）次に、スケジューラ５１３は、第１ＣＰＵコアで処理実行中の場合は全実行時間に対する対象Ｌ２キャッシュへのアクセス時間が閾値より大きいかをチェックする。また、スケジューラ５１３は、第２ＣＰＵコアで処理実行中の場合は、全実行時間に対する主記憶４００へのアクセス時間が閾値より大きいか否か判定する。第１ＣＰＵコアで処理実行中で、全実行時間に対する対象Ｌ２キャッシュへのアクセス時間が閾値より大きい場合、もしくは、第２ＣＰＵコアで処理実行中で、全実行時間に対する主記憶４００へのアクセス時間が閾値より大きい場合に、スケジューラ５１３は、ステップＳ４０８に進む。これらの条件に当てはまらない場合、ステップＳ４０７に進む。
【０１２４】
（ステップＳ４０７）実行中の処理がステップＳ４０６の条件に当てはまらない場合、スケジューラ５１３は、現在処理を実行しているコアにそのまま処理を実行させる。
【０１２５】
（ステップＳ４０８）スケジューラ５１３は、主記憶４００へのアクセス時間と主記憶４００のＩＰＣ低下度との積（以下、主記憶積という）が対象Ｌ２キャッシュへのアクセス時間と対象Ｌ２キャッシュのＩＰＣ低下度との積（以下、対象Ｌ２積という）より大きいか否か判定する。主記憶積がＬ２積より大きい場合（ＹＥＳ）、スケジューラ５１３は、ステップＳ４０９に進む。一方、主記憶積が対象Ｌ２積以下の場合（ＮＯ）、スケジューラ５１３は、ステップＳ４１２に進む。
【０１２６】
（ステップＳ４０９）ステップＳ４０８で主記憶積が対象Ｌ２積より大きいと判定された場合、対象Ｌ２キャッシュより主記憶４００へのアクセスで待たされている。その場合、スケジューラ５１３は、第２ＣＰＵコア２００で実行中か否か判定する。第２ＣＰＵコア２００で実行中の場合（ＹＥＳ）、スケジューラ５１３はステップＳ４１０へ進む。第２ＣＰＵコア２００で実行中でない場合（ＮＯ）、スケジューラ５１３はステップＳ４１１へ進む。
【０１２７】
（ステップＳ４１０）ステップＳ４０９で第２ＣＰＵコア２００で実行中と判定された場合、スケジューラ５１３は、処理の割り当てを第２ＣＰＵコア２００から第１ＣＰＵコア１００へ切り替える。これにより、第１ＣＰＵコア（ＭＲＡＭコア）１００がアクセスするＬ２キャッシュ１０３の容量がＬ２キャッシュ２０３の容量より大きいので、主記憶４００へアクセスする回数が少なくなるので、主記憶４００へのアクセスで待たされている時間を短くすることができる。そのため、主記憶４００アクセス中のＩＰＣの値が改善される。その結果、スケジューラ５１３は、処理の実行効率を向上させることが期待できる。
【０１２８】
（ステップＳ４１１）ステップＳ４０９で第２ＣＰＵコア２００で実行中でないと判定された場合、スケジューラ５１３は、第１ＣＰＵコア１００に処理をそのまま実行させる。
【０１２９】
（ステップＳ４１２）ステップＳ４０８で主記憶積が対象Ｌ２積以下であると判定された場合、主記憶４００より対象Ｌ２キャッシュへのアクセスで待たされている。その場合、スケジューラ５１３は、第１ＣＰＵコア１００で実行中か否か判定する。第１ＣＰＵコア１００で実行中の場合（ＹＥＳ）、スケジューラ５１３はステップＳ４１３へ進む。一方、第１ＣＰＵコア１００で実行中でない場合（ＮＯ、スケジューラ５１３はステップＳ４１４へ進む。
【０１３０】
（ステップＳ４１３）ステップＳ４１２で第１ＣＰＵコア１００で実行中と判定された場合、スケジューラ５１３は、第１ＣＰＵコア１００から第２ＣＰＵコア２００へ処理の割り当てを変更する。これにより、第２ＣＰＵコア（ＳＲＡＭコア）２００がアクセスするＬ２キャッシュ２０３がＬ２キャッシュ１０３より高速であるので、Ｌ２キャッシュへのアクセスで待たされている時間が短縮される。その結果、スケジューラ５１３は、処理の実行効率を向上させることが期待できる。
【０１３１】
（ステップＳ４１４）ステップＳ４１２で第１ＣＰＵコア１００で実行中でないと判定された場合、スケジューラ５１３は、第２ＣＰＵコア２００に処理をそのまま実行させる。
【０１３２】
以上、第２の実施形態の第２の処理例において、スケジューラ５１３は、主記憶４００へのアクセス時間とＬ２キャッシュ１０３へのアクセス時間との比較結果と、主記憶４００へのアクセス時間と閾値との比較及びＬ２キャッシュ１０３へのアクセス時間と閾値との比較とのうち少なくとも一方と、主記憶４００アクセス中のＩＰＣとＬ２キャッシュ１０３アクセス中のＩＰＣとの比較結果とに基づいて、どのコアに処理を割り当てるか決定する。
【０１３３】
これにより、Ｌ２キャッシュ１０３へのアクセス時間が処理効率低下の主要因になっている場合、ＭＲＡＭコアからＳＲＡＭコアへ処理の割り当てを変更することができる。その結果、アクセスするＬ２キャッシュがＭＲＡＭからＳＲＡＭへと変わり、Ｌ２キャッシュへのアクセス速度が向上するので、処理効率向上が期待できる。また、主記憶４００へのアクセス時間が処理効率低下の主要因になっている場合、ＳＲＡＭコアからＭＲＡＭコアへ処理の割り当てを変更することができる。その結果、アクセスするＬ２キャッシュがＳＲＡＭからＭＲＡＭへと変わり、Ｌ２キャッシュの容量が大きくなって、主記憶へのアクセス頻度が低下するので、処理効率向上が期待できる。
【０１３４】
（第２の実施形態における第３の処理例）
続いて、第２の実施形態における第３の処理例について説明する。第３の処理例では、スケジューラ５１３は、ＭＲＡＭコアでの実行情報と、ＭＲＡＭコアでの実行情報から予測されるＳＲＡＭコアでの実行情報とを比較することで、処理を割り当てるコアを決定する。
【０１３５】
より詳細には、スケジューラ５１３は、各コアが互いに異なるメモリ系統で対応する階層のメモリにアクセスする際のレイテンシによるオーバーヘッドそれぞれと、ＭＲＡＭコアからＳＲＡＭコアへの処理の移動に伴う予測キャッシュミス増加回数と、処理の割り当ての変更に必要な時間であるマイグレーションオーバーヘッドとに基づいて、いずれかのコアに処理を割り当てる。ここで、複数のコアそれぞれは、階層状に接続された複数のメモリを含む複数のメモリ系統のうち互いに異なるメモリ系統に含まれるメモリにアクセス可能である。また、各コアが互いに異なるメモリ系統で対応する階層のメモリは、一例として、Ｌ２キャッシュ１０３とＬ２キャッシュ２０３である。
【０１３６】
以下、スケジューラ５１３の処理の具体例について説明する。ここで、一例として、最初にＭＲＡＭコアに処理が割り当てられていることを前提とする。その前提の下で、スケジューラ５１３は、例えば、ＭＲＡＭコアが実行を開始した時から所定の時間経過後に、「ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッド」から「ＳＲＡＭコアでのＬ２キャッシュミスによるオーバーヘッド」を差分して、差分値を得る。そして、スケジューラ５１３は、例えば、差分値がマイグレーションオーバーヘッド未満であれば、そのままＭＲＡＭコアで実行し、差分値がマイグレーションオーバーヘッド以上であれば、ＳＲＡＭコアへと処理の再割り当てを行う。これにより、スケジューラ５１３は、マイグレーションオーバーヘッドを考慮して処理の割り当てを切り替えるか決定するので、処理割り当て変更による処理効率向上の効果を、処理割り当て変更によるオーバーヘッドが上回る状態の発生頻度を抑制することが出来る。
【０１３７】
なお、マイグレーションオーバーヘッドは、プログラム実行コア移動の頻度を調節する閾値である。マイグレーションオーバーヘッドは、処理実実行前にあらかじめ与えられた定数であってもよいし、実行履歴等から算出される値であってもよい。マイグレーションオーバーヘッドは、プログラム実行コア移動に要するオーバーヘッドをスケジューラ５１３によって算出された値であってもよい。本実施形態では、一例として、マイグレーションオーバーヘッドは、プログラムの全実行時間の５％として、プログラム実行前に予め与えられている。
【０１３８】
スケジューラ５１３は、例えば、ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッドＯＨ＿Ｌ２Ｍを、次の式（１）で算出する。
【０１３９】
ＯＨ＿Ｌ２Ｍ  ＝  ＭＲＡＭ総アクセスレイテンシ×ＩＰＣ低下度  …（１）
【０１４０】
ＭＲＡＭ総アクセスレイテンシは、処理開始時から所定の時間経過時のＬ２キャッシュ１０３のアクセスレイテンシの積算値である。スケジューラ５１３が、例えば、総アクセスレイテンシとして、例えば、図１４のモニタリングユニット５３のＬ２キャッシュへのアクセス時間の値を用いると、総アクセスレイテンシは１０００である。このように、スケジューラ５１３は、例えば、メモリ階層別テーブルＴ２のＬ２キャッシュへのアクセス時間の値を、ＭＲＡＭ総アクセスレイテンシとしてもよい。
ＩＰＣ低下度は例えばモニタリングユニット５３を利用し算出できる。スケジューラ５１３は、例えば、モニタリングユニット５３の情報を基に、Ｌ２キャッシュアクセス中のＩＰＣと、Ｌ２キャッシュより上位階層キャッシュの情報を含むＩＰＣ（例えば、Ｌ１キャッシュのＩＰＣ、またはメモリアクセスしない場合のＩＰＣ、または処理全体のＩＰＣ）を比較することでＩＰＣ低下度を算出する。具体的には、例えば、スケジューラ５１３は、Ｌ１キャッシュのＩＰＣでＬ２キャッシュアクセス中のＩＰＣを除算し、１からその除算後の値を減算した値をＬ２キャッシュについてのＩＰＣ低下度として算出する。
【０１４１】
なお、総アクセスレイテンシの取得方法は、これに限定されない。例えば、静的にＭＲＡＭ  Ｌ２キャッシュへのアクセスレイテンシが与えられており、スケジューラ５１３は、プログラム実行中に取得されるＬ２キャッシュアクセス回数とＭＲＡＭ  Ｌ２キャッシュへのアクセスレイテンシとを乗算することで総アクセスレイテンシを算出してもよい。
【０１４２】
図１１から算出された図１２にあるように、Ｌ２キャッシュアクセス中のＩＰＣは０．３である。Ｌ２キャッシュより上位の階層のＩＰＣはＬ１キャッシュの値を用いてもＮｏｎ−ｍｅｍの値を用いてもよいが、本実施形態では、スケジューラ５１３は、一例としてＮｏｎ−ｍｅｍの値である４を用いる。スケジューラ５１３は、例えば、これらの値から、ＩＰＣ低下度として０．９２５（＝１−（０．３÷４））を算出する。そして、スケジューラ５１３は、例えば、ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッドＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッドとして、９２５（＝１０００×０．９２５）を算出する。
【０１４３】
スケジューラ５１３は、例えば、ＳＲＡＭコアでのＬ２キャッシュミスによるオーバヘッドＯＨ＿Ｌ２Ｓを、次の式（２）で算出する。なお、ＭＲＡＭコアでプログラム実行中にＳＲＡＭコアの実行情報を取得するには、ＭＲＡＭコア実行情報を基にしたＳＲＡＭコア実行情報の予測が必要となる。
【０１４４】
ＯＨ＿Ｌ２Ｓ  ＝  主記憶アクセスレイテンシ×ＳＲＡＭコアによるＬ２キャッシュミスの増加回数予測値  …（２）
【０１４５】
主記憶アクセスレイテンシは、主記憶への１回のアクセスに要するレイテンシである。スケジューラ５１３は、第１ＣＰＵコア（ＭＲＡＭコア）１００に接続されたモニタリングユニット５３のメモリ階層別テーブルＴ２に格納された主記憶４００へのアクセス時間を主記憶アクセス回数で除算し主記憶アクセスレイテンシとしてもよい。ここで、メモリ階層別テーブルＴ２に記録されている主記憶４００へのアクセス時間は１回以上の主記憶４００へのメモリアクセス時間を積算された積算値である。また、静的に主記憶４００へのアクセスレイテンシが与えられてもよい。本実施形態では、一例として、スケジューラ５１３は、主記憶レイテンシとして２００を用いる。
【０１４６】
スケジューラ５１３は、ＳＲＡＭコアによるＬ２キャッシュミスの増加回数予測値を、ＭＲＡＭコアにおけるキャッシュのＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ  ）アクセス情報を利用することで予想することが可能である。まず、以下で、一般的なキャッシュについて説明すると共にＬＲＵの基本動作を示す。
【０１４７】
図１８は、第２の実施形態におけるキャッシュメモリのイメージ図の一例である。キャッシュメモリは、図１８に示すように、メモリアドレスのハッシュ値毎にセットを保持する。ウェイは、同一セットのデータを保持可能な上限数である。図１８の領域Ｒ１８１は、セットのインデックス情報(タグメモリアレイ)をイメージとして表したもので、領域Ｒ１８２は、ウェイのインデックス情報(タグメモリアレイ)をイメージとして表したものである。また、領域Ｒ１８３は、データを格納するキャッシュメモリ(データメモリアレイ)そのものを表したものである。
【０１４８】
メモリアドレスとセットの対応関係を決定するハッシュ関数は、様々な方式が存在する。本実施形態では、一例として、セット数が１０であるため、アドレスの上位３ビットの値でセットが決定される。例えば、３２ビットアドレス「０１０００００１０１０１０１０１０１０１０１０１０１０１０１０１」のデータは上位ビットが「０１０」であるため、セット３に格納される。
【０１４９】
同一セットのデータのうちどのデータを残しておくかを決定する一般的な方式が前述のＬＲＵである。ＬＲＵではウェイ１からウェイ８の順に直近にアクセスされたデータが配置される。例えば、ウェイ１に配置されているデータはウェイ２に配置されているデータより直近に参照されている。このようなデータ配置は、アクセスしたデータをウェイ１に配置し、それ以外のデータを１ウェイずらすことで実現する。また、新たなデータがキャッシュに配置される場合には、ウェイ８のデータをキャッシュから下位階層に移動する。
【０１５０】
図１８のような一般的なキャッシュでは、セット数が同一であるキャッシュは、同一ウェイ番号のキャッシュアクセスの振る舞いも同一のものとなる。同一セット数の、ＳＲＡＭ  １ＭＢ  ４ｗａｙのキャッシュ、および、ＭＲＡＭ  ４ＭＢ  １６ｗａｙのキャッシュを例とした場合、ＳＲＡＭ  ４ｗａｙまでのアクセス履歴と、ＭＲＡＭ  ４ｗａｙまでのアクセス履歴は同一のものとなる。逆に言うと、ＭＲＡＭ  ４ＭＢのｗａｙ５〜ｗａｙ１６へのアクセスは、ＭＲＡＭ  ４ＭＢではキャッシュヒットとなるものの、ＳＲＡＭ  １ＭＢではミスとなるアクセスである。
【０１５１】
したがって、スケジューラ５１３は、例えば、ＭＲＡＭコアでの実行中に、ＳＲＡＭコアのキャッシュに存在しないウェイへのアクセスをカウントすることにより、ＳＲＡＭコアでのキャッシュミス増加回数を取得する。その際、スケジューラ５１３は、このウェイ毎のアクセスカウントを、ウェイ毎に用意されたアクセスカウンターを用いて取得してもよいし、複数のウェイ毎に用意されたアクセスカウンターを用いて取得してもよい。
【０１５２】
本実施形態では、一例として、取得されたＳＲＡＭコアでのアクセス増加回数予測値が３である。この場合、ＳＲＡＭコアによるＬ２キャッシュミスによるオーバーヘッドは６００（＝２００×３）である。
【０１５３】
スケジューラ５１３は、例えば、上記のように算出された、ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッドからＳＲＡＭコアによるＬ２キャッシュミスによるオーバーヘッドを減算する。本例では、減算して得られる減算値は、３２５（＝９２５−６００）である。
【０１５４】
ここで、一例として、マイグレーションオーバーヘッドが、プログラムの開始から終了までにかかる時間（以下、プログラムの全実行時間という）の５％であることを前提とする。その前提で、例えば、プログラムの全実行時間が１００００サイクルであった場合、算出された減算値３２５はマイグレーションオーバーヘッド５００（＝１００００×５／１００）未満のため、スケジューラ５１３は、ＭＲＡＭコアにそのまま処理を行わせる。
【０１５５】
一方、例えば、プログラムの全実行時間が５０００サイクルであった場合、算出された減算値３２５はマイグレーションオーバーヘッド２５０（＝５０００×５／１００）以上のため、スケジューラ５１３は、処理の割り当てをＭＲＡＭコアからＳＲＡＭコアへ切り替える。
【０１５６】
図１９は、第２の実施形態におけるプロセッサ１ｂの処理の第３の処理例を示すフローチャートである。
【０１５７】
ステップＳ５０１〜Ｓ５０３の処理は、図１６のステップＳ３０１〜Ｓ３０３と同一であるので、その説明を省略する。
【０１５８】
（ステップＳ５０４）次に、スケジューラ５１３は、ＩＰＣ低下度を算出する。
【０１５９】
（ステップＳ５０５）次に、スケジューラ５１３は、ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッドを算出する。
【０１６０】
（ステップＳ５０６）次に、スケジューラ５１３は、ＳＲＡＭコアによるＬ２キャッシュミスの増加回数予測値を算出する。
【０１６１】
（ステップＳ５０７）次に、スケジューラ５１３は、ＳＲＡＭコアによるＬ２キャッシュミスによるオーバーヘッドを算出する。
【０１６２】
（ステップＳ５０８）次に、スケジューラ５１３は、ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッドからＳＲＡＭコアによるＬ２キャッシュミスによるオーバーヘッドを減算し、減算した得た減算値を取得する。
【０１６３】
（ステップＳ５０９）次に、スケジューラ５１３は、マイグレーションオーバヘッドを算出する。本例では、静的に設定されたマイグレーションオーバヘッドを用いるため、スケジューラ５１３は、マイグレーションオーバヘッドを格納している記憶領域から読み出しを行う。
【０１６４】
（ステップＳ５１０）次に、スケジューラ５１３は減算値がマイグレーションオーバーヘッド以上か否か判定する。減算値がマイグレーションオーバーヘッド以上である場合（ＹＥＳ）、スケジューラ５１３はステップＳ５１１に進む。減算値がマイグレーションオーバーヘッド以上でない場合（ＮＯ）、スケジューラ５１３はステップＳ５１２に進む。
【０１６５】
（ステップＳ５１１）ステップＳ５１０で減算値がマイグレーションオーバーヘッド以上であると判定された場合、スケジューラ５１３は、第１ＣＰＵコア（ＭＲＡＭコア）１００から第２ＣＰＵコア（ＳＲＡＭコア）２００へ処理の割り当てを変更する。
【０１６６】
（ステップＳ５１２）次に、ステップＳ５１０で減算値がマイグレーションオーバーヘッド以上でないと判定された場合、スケジューラ５１３は、第１ＣＰＵコア１００に処理をそのまま実行させる。
【０１６７】
以上、第２の実施形態における第３の処理において、スケジューラ５１３は、例えば、ＭＲＡＭコアが実行を開始した時から所定の時間経過後に、「ＭＲＡＭコアのＬ２キャッシュレイテンシによるオーバーヘッド」から「ＳＲＡＭコアでのＬ２キャッシュミスによるオーバーヘッド」を差分して、差分値を得る。そして、スケジューラ５１３は、例えば、この差分値がマイグレーションオーバーヘッド未満であれば、そのままＭＲＡＭコアで実行し、この差分値がマイグレーションオーバーヘッド以上であれば、ＭＲＡＭコアからＳＲＡＭコアへ処理の割り当てを変更する。これにより、スケジューラ５１３は、マイグレーションオーバーヘッドを考慮して処理の割り当てを切り替えるか決定するので、処理割り当て変更による処理効率向上の効果が、処理割り当て変更によるオーバーヘッドを上回る発生頻度の向上を期待出来る。
【０１６８】
なお、上述した第３の処理は一例であって、これに限ったものではない。スケジューラ５１３は、上記の差分値とマイグレーションオーバーヘッドを比較して、この比較結果に基づいて、いずれかのコアに処理を割り当てたが、これに限らず、スケジューラ５１３は、第１の性能低下度と第２の性能低下度との比較結果から、いずれかのコアに処理を割り当ててもよい。
【０１６９】
以上、第２の実施形態における第３の処理をまとめると以下のようになる。第１ＣＰＵコア１００または第２ＣＰＵコア２００への演算割り当てを行うことにより、処理毎に第１ＣＰＵコア１００がアクセス可能な第１のメモリと第２ＣＰＵコア２００がアクセス可能で第１のメモリよりも小容量かつレイテンシが低速な第２のメモリを選択可能である。
そして、評価部４１３は、第１のコアでの処理実行中に、上記第１のメモリに含まれる複数のメモリそれぞれ毎に演算性能を評価する。
そして、スケジューラ５１３は、評価した演算性能を利用して 上記第１のメモリのレイテンシによる第１の性能低下度を特定し、上記第１のメモリのＬＲＵアクセス情報から、第２のメモリでのデータ非保持による第２の性能低下度を特定し、この第１の性能低下度とこの第２の性能低下度とを比較し、この比較結果に基づいて、いずれかのコアに処理を割り当てる。
【０１７０】
なお、評価部４１３が評価した演算性能は、様々な用途に用いることができる。例えば、第２の実施形態のように、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が評価部から得られる演算性能（例えば、ＩＰＣ低下度）を参照し、適切な処理のコア割り当ての判断情報として利用してもよい。また、プログラマーが、評価部から得られる演算性能（例えば、ＩＰＣ低下度）を参照して、対象処理(ソフトウェア)のデータ構造またはアルゴリズム改良して、最適化を行ってもよい。
【０１７１】
また、モニタリングユニットの実装形態には様々なものが考えられるが、その1つとしてプロセッサの実行効率を計測するパフォーマンスカウンタ(パフォーマンスモニタ)機能が考えられる。パフォーマンスカウンタの機能として、例えば、上述した各実施形態における時間情報取得部４１１、演算量取得部４１２及び評価部４１３を全て備えてもよいし、時間情報取得部４１１、演算量取得部４１２のみを備えてもよい。つまり、パフォーマンスカウンタの値として、評価部４１３の出力結果を利用する形態でもよいし、パフォーマンスカウンタの値として時間情報取得部と演算量取得部の出力結果を利用する形態でも良い。
【０１７２】
なお、複数の装置を備えるシステムが、各実施形態のモニタリングユニットまたは情報処理装置の各処理を、それらの複数の装置で分散して処理してもよい。
また、各実施形態のモニタリングユニットまたは情報処理装置の各処理を実行するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、当該記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより、モニタリングユニットまたは情報処理装置に係る上述した種々の処理を行ってもよい。
【０１７３】
なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものであってもよい。また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
【０１７４】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））のように、一定時間プログラムを保持しているものも含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【０１７５】
以上、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１７６】
１  プロセッサ
２  ＣＰＵコア
２１  命令発行器
２２  演算部
２２１  第１演算器
２２２  第２演算器
２４  メモリアクセスユニット
３  メモリ
３１  Ｌ１キャッシュ
３２  Ｌ２キャッシュ
３３  主記憶
４  モニタリングユニット（情報処理装置）
４１  制御部
４１１  時間情報取得部
４１２  演算量取得部
４１３  評価部
４１４  第１記憶処理部
４１５  第２記憶処理部
４２  グローバルカウンタ
４２１  時間カウンタ
４２２  命令数カウンタ
４３  メモリアクセス情報テーブル記憶部
４４  メモリ階層別情報テーブル記憶部
５  情報処理装置
５１  処理管理部
５１２  コア情報テーブル記憶部
５１３  スケジューラ（割当部）
５２  インタフェース部
５３  モニタリングユニット
５４  モニタリングユニット
７  メモリ
１００  第１ＣＰＵコア
１０１  Ｌ１命令キャッシュ
１０２  Ｌ１データキャッシュ
１０３ Ｌ２キャッシュ
２００  第２ＣＰＵコア
２０１  Ｌ１命令キャッシュ
２０２  Ｌ１データキャッシュ
２０３  Ｌ２キャッシュ
３００  バス
４００  主記憶
【図１】
2015035028.tif 000003
【図２】
2015035028.tif 000004
【図３】
2015035028.tif 000005
【図４】
2015035028.tif 000006
【図５】
2015035028.tif 000007
【図６】
2015035028.tif 000008
【図７】
2015035028.tif 000009
【図８】
2015035028.tif 000010
【図９】
2015035028.tif 000011
【図１０】
2015035028.tif 000012
【図１１】
2015035028.tif 000013
【図１２】
2015035028.tif 000014
【図１３】
2015035028.tif 000015
【図１４】
2015035028.tif 000016
【図１５】
2015035028.tif 000017
【図１６】
2015035028.tif 000018
【図１７】
2015035028.tif 000019
【図１８】
2015035028.tif 000020
【図１９】
2015035028.tif 000021