(57)【要約】      （修正有）【課題】複数のジョブに対する共有キャッシュメモリのセクタの分割比を最適化する情報処理装置、情報処理システム、情報処理装置の制御方法、及び、情報処理装置の制御プログラムを提供する。【解決手段】データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、共有キャッシュメモリのセクタの分割比を変更する制御ユニットと、を有し、制御ユニットは、第１のジョブ、第２のジョブの実行中に、第２のジョブのプログラムの指定に応じて、第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、共有キャッシュメモリの容量とに基づいて、セクタの分割比を算出し、算出したセクタの分割比に変更する。【選択図】図６
2015222477.tif 000002
【特許請求の範囲】
【請求項１】
データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、
前記共有キャッシュメモリのセクタの分割比を変更する制御ユニットと、を有し、
前記制御ユニットは、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応じて、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記共有キャッシュメモリの容量とに基づいて、前記セクタの分割比を算出し、前記算出したセクタの分割比に変更する情報処理装置。
【請求項２】
請求項１において、
前記制御ユニットは、前記実行中の第１、第２のジョブの前記データアクセス量の各データの前記サイズを、前記データの前記アクセス回数に応じた第１の再利用度、前記第１の再利用度より大きい第２の再利用度ごとに合計した前記第１、第２のデータアクセス量と、前記共有キャッシュメモリの、前記第１、第２の再利用度に対応する第１、第２のセクタの容量と、に基づいて前記セクタの分割比を算出する情報処理装置。
【請求項３】
請求項２において、
前記制御ユニットは、前記第１、第２のセクタのデータアクセス量と、前記第１、第２のセクタの容量とに基づいてキャッシュミスの発生回数を算出し、前記算出したキャッシュミスの発生回数に基づいて、前記セクタの分割比を算出する情報処理装置。
【請求項４】
請求項３において、
前記制御ユニットは、前記第１、第２のセクタのデータアクセス量と、前記第１、第２のセクタの容量とに基づいて、前記第１のセクタのキャッシュミスの発生指標を示す第１の指標値、及び、前記第２のセクタのキャッシュミスの発生指標を示す第２の指標値を算出し、前記第１の指標値と前記第２の指標値に異なる重みを適用して、前記キャッシュミス発生回数を算出する情報処理装置。
【請求項５】
請求項３または４において、
前記共有キャッシュメモリは、複数階層の共有キャッシュメモリであって、
前記制御ユニットは、第１の階層の共有キャッシュメモリの第１のキャッシュミスの発生回数と、第２の階層の共有キャッシュメモリの第２のキャッシュミスの発生回数とを算出し、前記第１のキャッシュミスの発生回数と第２のキャッシュミスの発生回数に異なる重みを適用して、処理遅延時間を示す値を算出する情報処理装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記制御ユニットは、処理遅延時間を示す値が最少となるセクタの分割比を算出する情報処理装置。
【請求項７】
前記１乃至６のいずれかにおいて、
前記最適化区間は、ループ処理に対応する情報処理装置。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記制御ユニットは、さらに、前記第２のジョブのプログラムの指定に応答して、前記変更する前のセクタの分割比に変更する情報処理装置。
【請求項９】
請求項１乃至８のいずれかにおいて、
前記共有キャッシュメモリは、１階層、または、複数階層の共有キャッシュメモリであって、
前記セクタの分割比は、それぞれの階層の共有キャッシュメモリのセクタの分割比である情報処理装置。
【請求項１０】
請求項１乃至９のいずれかにおいて、さらに、
第１、第２の演算ユニットを有し、
前記第１の演算ユニットは前記第１のジョブを実行し、
前記第２の演算ユニットは前記第２のジョブを実行する情報処理装置。
【請求項１１】
請求項１乃至１０のいずれかにおいて、
前記制御ユニットは、プログラムのコンパイル時に、前記最適化区間のデータアクセス量と、前記最適化区間を指定するコードとを追加して生成された前記プログラムを取得し、前記プログラムをジョブとして実行する情報処理装置。
【請求項１２】
データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、
前記共有キャッシュメモリのセクタの分割比を変更する第１の制御ユニットと、を有する第１の情報処理装置と、
前記共有セクタの分割比を算出する第２の制御ユニットを有する第２の情報処理装置と、を有し、
前記第１の情報処理装置の前記第１の制御ユニットは、第１のジョブ、第２のジョブの実行中に前記第２のジョブのプログラムの指定に応じて、前記第２の情報処理装置に通知し、
前記第２の情報処理装置の前記第２の制御ユニットは、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記共有キャッシュメモリの容量とに基づいて、前記セクタの分割比を算出して、前記第１の情報処理装置に通知し、
前記第１の情報処理装置の前記第２の制御ユニットは、前記セクタの分割比を、前記通知されたセクタの分割比に変更する情報処理システム。
【請求項１３】
第２の情報処理装置が、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応じて、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリの容量とに基づいて、前記共有キャッシュメモリのセクタの分割比を算出する算出工程と、
前記セクタの分割比を、前記算出したセクタの分割比に変更する変更工程と、
を有する情報処理装置の制御方法。
【請求項１４】
請求項１３において、
第１の情報処理装置が、前記第１、第２のジョブを実行し、前記第２のジョブのプログラムの指定に応じて、前記第２の情報処理装置に通知する通知工程を、さらに有し、
前記変更工程は、第１の情報処理装置が、第１の情報処理装置の前記セクタの分割比を、前記第２の情報処理装置から通知される、前記算出したセクタの分割比に変更する情報処理装置の制御方法。
【請求項１５】
第２の情報処理装置が、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応じて、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリの容量とに基づいて、前記共有キャッシュメモリのセクタの分割比を算出し、
前記セクタの分割比を、前記算出したセクタの分割比に変更する、
処理をコンピュータに実行させる情報処理装置の制御プログラム。
【請求項１６】
請求項１５において、
前記第１の情報処理装置が、前記第１、第２のジョブを実行し、前記第２のジョブのプログラムの指定に応じて、さらに、前記第２の情報処理装置に通知し、
前記第１の情報処理装置が、前記第１の情報処理装置の前記セクタの分割比を、前記第２の情報処理装置から通知される前記算出したセクタの分割比に変更する、
処理をコンピュータに実行させる情報処理装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理装置の制御方法、及び、情報処理装置の制御プログラムに関する。
【背景技術】
【０００２】
従来から、プログラムの実行処理の性能を向上するために、キャッシュメモリが利用される。キャッシュメモリは、ＣＰＵ（Central Processing Unit：ＣＰＵ）、または、ＣＰＵのコア内に設置される高速な記憶装置である。キャッシュメモリに再利用性が高いデータを保持することによって、プログラムの実行処理の性能を向上する。キャッシュメモリは、主記憶装置に較べて容量が小さい。したがって、キャッシュメモリのキャッシュヒット率を高めるために、再利用性の高いデータをキャッシュメモリに保持することが有効である。
【０００３】
再利用性の高いデータをキャッシュメモリに保持する方式として、セクタ機能を備えるキャッシュメモリがある。セクタ機能付きキャッシュメモリでは、プログラムが、データの再利用性に応じて、データを記憶するセクタを指定する。これにより、再利用性の高いデータがキャッシュメモリに保持される確率を高め、キャッシュヒット率が向上する。セクタの分割比は、最適になるように設定される。
【０００４】
キャッシュメモリの分割制御については、例えば、特許文献１〜５、及び、非特許文献１に記載される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１６３４５０号公報
【特許文献２】特開２０１０−２４４２０５号公報
【特許文献３】特開２０１１−２０３９９５号公報
【特許文献４】特開２００４−０３０５７号公報
【特許文献５】特表平１１−５０９３５６号公報
【非特許文献】
【０００６】
【非特許文献１】"SPARC64VIIIfx Extensions"（http://img.jp.fujitsu.com/downloads/jp/jhpc/sparc64viiifx-extensions.pdf,http://img.jp.fujitsu.com/downloads/jp/jhpc/sparc64viiifx-extensionsj.pdf）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
近年の情報処理装置は、複数のコアを有する。また、情報処理装置は、複数のコアが使用する共有キャッシュメモリを有する。複数のコアは、それぞれ別のプログラムを実行できる。共有キャッシュメモリがセクタ機能を備える場合、共有キャッシュメモリのセクタの分割比は、複数のプログラムの実行に対して設定されることが望ましい。
【０００８】
本発明は、複数のジョブに対する共有キャッシュメモリのセクタの分割比を最適化する情報処理装置、情報処理システム、情報処理装置の制御方法、及び、情報処理装置の制御プログラムを提供することにある。
【課題を解決するための手段】
【０００９】
第１の側面は、データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、前記共有キャッシュメモリのセクタの分割比を変更する制御ユニットと、を有し、前記制御ユニットは、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応答して、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記共有キャッシュメモリの容量とに基づいて、前記セクタの分割比を算出し、前記算出したセクタの分割比に変更する。
【発明の効果】
【００１０】
第１の側面によれば、複数のジョブに対する共有キャッシュメモリのセクタの分割比を最適化する。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態例における情報処理システムのハードウェア構成を説明する図である。
【図２】図１に示す計算ノードのＣＰＵのハードウェア構成を説明する図である。
【図３】図２に示すＬ２キャッシュのセクタキャッシュ機能を説明する図である。
【図４】図１、図２に示す計算ノードのハードウェア構成を説明する図である。
【図５】図１に示す制御ノードのハードウェア構成を説明する図である。
【図６】本実施の形態例の情報処理システムのソフトウェアブロック図を説明する図である。
【図７】本実施の形態例におけるセクタ分割比最適化処理の概要を説明する図である。
【図８】本実施の形態例における情報処理システムが最適化する、計算ノードのＬ２キャッシュの分割比の遷移を示す例図である。
【図９】本実施の形態例における変数別キャッシュ使用状況の解析処理を説明するフローチャート図である。
【図１０】オブジェクトファイルに付加される変数別キャッシュ使用状況情報の一例を示す図である。
【図１１】最適化開始コード及び最適化終了コードが挿入されたソースプログラムの一例を示す図である。
【図１２】本実施の形態例における実行フェーズの処理の流れを説明するフローチャート図である。
【図１３】図１２に示す資源割当最適化処理（Ｓ２６）を説明するフローチャート図である。
【図１４】図１３の工程Ｓ３２で更新される、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計を示す図である。
【図１５】図１２に示す資源割当最適化処理（Ｓ２７）を説明するフローチャート図である。
【図１６】セクタの分割比の算出処理（図１３のＳ３３）の処理を説明するフローチャート図である。
【図１７】関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎの処理の概要を説明するフローチャート図である。
【図１８】ＣＰＵコアに固有のＬ１キャッシュのキャッシュミス発生指標値の算出処理を説明するフローチャート図である。
【図１９】Ｌ１キャッシュのデータアクセス量の算出処理を説明する図である。
【図２０】共有キャッシュメモリのキャッシュミス発生指標値の算出処理を説明するフローチャート図である。
【図２１】図１２に示すキャッシュセクタ割当制御処理（Ｓ２２、Ｓ２５）を説明するフローチャート図である。
【図２２】セクタの分割比の変更例を説明する図である。
【図２３】第２の実施の形態例におけるジョブのＣＰＵへの割り当て処理を説明する図である。
【図２４】ＣＰＵコア割当制御モジュールの処理を説明するフローチャート図である。
【発明を実施するための形態】
【００１２】
以下、図面にしたがって本発明の実施の形態を説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１３】
［情報処理システム]
図１は、本実施の形態例における情報処理システムのハードウェア構成を説明する図である。図１の情報処理システムは、例えば、ハイ・パフォーマンス・コンピューティング（high-performance computing：ＨＰＣ）システムを示す。ＨＰＣシステムでは、複数のジョブのスケジュールを生成し、情報処理装置３００ａ〜３００ｃが、複数のジョブをスケジュールに基づいて実行する。
【００１４】
図１の情報処理システムは、複数の情報処理装置１００、３００ａ〜３００ｃ、５００、６００を有する。複数の情報処理装置うち、情報処理装置３００ａ〜３００ｃは計算処理専用の装置であり、ジョブ実行環境用のノード（以下、計算ノードと称する）である。情報処理装置１００は、ジョブの実行を制御する装置であり、ジョブ制御環境用のノード（以下、制御ノードと称する）である。情報処理装置５００は、ソースプログラをコンパイルして実行可能なプログラムを生成するコンパイル環境用のノード（以下、コンパイルノードと称する）である。情報処理装置６００は、ディスク装置ｄａ〜ｄｃ等のストレージデバイスと接続するファイルサーバである。
【００１５】
制御ノード１００は、ネットワーク５０を介して、複数の計算ノード３００ａ〜３００ｃ、コンパイルノード５００、及び、ファイルサーバ６００と接続する。制御ノード１００、計算ノード３００ａ〜３００ｃ、コンパイルノード５００、ファイルサーバ６００のそれぞれは、ＣＰＵ（Central Processing Unit：ＣＰＵ）１１、３１、５１、６１、ＲＡＭ（Random Access Memory：ＲＡＭ）等のメモリ１２、３２、５２、６２、ＮＩＣ（Network Interface Card：ＮＩＣ）１３、３３、５３、６３を有する。ＣＰＵ３１の構成については、図２にて後述する。
【００１６】
コンパイルノード５００は、ディスク装置ｄａ〜ｄｃからソースプログラムを読み出し、読み出したソースプログラムをコンパイルして、実行可能なプログラム（以下、実行プログラムと称する）を生成する。実行プログラムは、ジョブを示す。また、コンパイルノード５００は、生成した実行プログラムをディスク装置ｄａ〜ｄｃに記憶する。
【００１７】
制御ノード１００は、ジョブのスケジュールを生成するとともに、ジョブの実行状態やスケジュールの進捗状態を管理する。制御ノード１００は、時刻に応じて、ジョブを実行する１つまたは複数の計算ノード３００ａ〜３００ｃを割り当てることにより、スケジュールを生成する。このとき、制御ノード１００は、ジョブが必要とする計算ノード３００ａ〜３００ｃの数、ジョブの実行条件、計算ノード３００ａ〜３００ｃの性能等の情報に基づいて、ジョブに計算ノード３００ａ〜３００ｃを割り当てる。ジョブの実行条件とは、ジョブの並列度や通信に関する条件である。
【００１８】
また、制御ノード１００は、スケジュールに基づいたジョブの実行指示を、計算ノード３００ａ〜３００ｃに出力する。実行指示された計算ノード３００ａ〜３００ｃは、制御ノード１００からの指示に応答して、ディスク装置ｄａ〜ｄｃから読み出した実行プログラムや入力情報等にしたがって、ジョブを実行する。また、計算ノード３００ａ〜３００ｃは、ジョブの実行が終了すると、ジョブの実行結果を制御ノード１００に通知するとともに、ジョブの実行ログをディスク装置ｄａ〜ｄｃに記憶させる。制御ノード１００は、計算ノード３００ａ〜３００ｃから受信したジョブの実行結果に基づいて、ジョブの進捗状態を管理する。
【００１９】
［計算ノード］
図２は、図１に示す計算ノード３００ａ〜３００ｃのＣＰＵ３１のハードウェア構成を説明する図である。この例では、１つの計算ノード３００ａのＣＰＵ３１のハードウェア構成を示すが、他の計算ノード３００ｂ〜３００ｃのＣＰＵ３１のハードウェア構成も同様である。以下、計算ノード３００ｂ〜３００ｃを、計算ノード３００と称する。
【００２０】
図２に示す計算ノード３００ａは、本実施の形態例では、図１で説明したとおり、ＣＰＵ３１、メモリ（メインメモリ）３２、ＮＩＣ３３を有する。また、ＣＰＵ３１は、本実施の形態例では、２個のＣＰＵコアｃａ、ｃｂ、Ｌｅｖｅｌ１のキャッシュメモリ（以下、Ｌ１キャッシュと称する）ｍａ、ｍｂ、及び、Ｌｅｖｅｌ２のキャッシュメモリ（以下、Ｌ２キャッシュと称する）ｍ２を有する。Ｌ１キャッシュｍａ、ｍｂは、１つのＣＰＵ（Central Processing Unit：ＣＰＵ）コアｃａ、ｃｂに専用のキャッシュメモリである。また、本実施の形態例では、Ｌ２キャッシュｍ２は、複数（図２の例では、２つ）のＣＰＵコアｃａ、ｃｂが共有して使用する共有キャッシュメモリである。
【００２１】
なお、図２の例では、ＣＰＵ３１が２つＣＰＵコアｃａ、ｃｂを有するが、この例に限定されるものではない。ＣＰＵ３１は、３個以上のＣＰＵコア、例えば、１６個のＣＰＵコアを有していてもよい。また、図２の例では、Ｌ２キャッシュｍ２のみを例示しているが、ＣＰＵ３１は、さらに、Ｌ３キャッシュ、Ｌ４キャッシュ等の共有キャッシュメモリを搭載していてもよい。
【００２２】
ＣＰＵ３１は、メインメモリ３２に記憶されたデータの一部を、Ｌ１キャッシュｍａ、ｍｂ、及び、Ｌ２キャッシュｍ２に記憶させる。Ｌ１キャッシュｍａ、ｍｂ、及び、Ｌ２キャッシュｍ２は、キャッシュコントローラ（図示せず）を有する。キャッシュコントローラは、データにアクセスする場合に、アクセス対象のデータが、Ｌ１キャッシュｍａ、ｍｂに記憶されているか否かを判定する。アクセス対象のデータがＬ１キャッシュｍａ、ｍｂに記憶されている場合、キャッシュコントローラは、Ｌ１キャッシュｍａ、ｍｂからデータを読み出す。
【００２３】
アクセス対象のデータがＬ１キャッシュｍａ、ｍｂに記憶されていない場合、キャッシュコントローラは、アクセス対象のデータが、Ｌ２キャッシュｍ２に記憶されているか否かを判定する。アクセス対象のデータがＬ２キャッシュｍ２に記憶されている場合、キャッシュコントローラは、Ｌ２キャッシュｍ２からデータを読み出す。アクセス対象のデータがＬ２キャッシュｍ２にも記憶されていない場合、キャッシュコントローラは、アクセス対象のデータをメインメモリ３２から読み出す。また、キャッシュコントローラは、メインメモリ３２から読み出したデータを、Ｌ１キャッシュｍａ、ｍｂ、または、Ｌ２キャッシュｍ２に記憶する。
【００２４】
このように、キャッシュメモリｍａ、ｍｂ、ｍ２にアクセス対象のデータが記憶されている場合（キャッシュヒットという）、メインメモリ３２へのアクセスが不要となる。ＣＰＵ３１は、メインメモリ３２に比べて、より高速に、キャッシュメモリｍａ、ｍｂ、ｍ２にアクセスできる。したがって、アクセス対象のデータがＬ１キャッシュｍａ、ｍｂ、または、Ｌ２キャッシュｍ２に記憶されていることにより、プログラムの処理の性能が向上する。アクセス対象のデータのキャッシュメモリｍａ、ｍｂ、ｍ２におけるキャッシュヒット率を向上するために、例えば、セクタキャッシュ機能が用いられる。次に、セクタキャッシュ機能を図３で説明する。
【００２５】
図３は、図２に示すＬ２キャッシュｍ２のセクタキャッシュ機構を説明する図である。セクタキャッシュ機構とは、利用者がプログラムからキャッシュメモリを制御する機構である。キャッシュメモリは、記憶させるデータの再利用性に応じて、論理的に分割した複数のセクタを有する。利用者は、プログラムからデータを記憶させるセクタを指定することができる。これにより、再利用性の低いデータのアクセスの発生によって、再利用性の高いデータがキャッシュメモリから追い出されることが回避可能になる。
【００２６】
本実施の形態例におけるＬ２キャッシュｍ２は、セクタキャッシュ機構を備える。図３では、Ｌ２キャッシュｍ２をＬ２キャッシュｍ２ａとして記載している。本実施の形態例では、Ｌ２キャッシュｍ２ａは、セクタ０とセクタ１とを有する。セクタ０は再利用性が低いデータを記憶するセクタ、セクタ１は再利用性が高いデータを記憶するセクタを示す。Ｌ２キャッシュｍ２ａにデータを記憶させる場合、キャッシュコントローラは、データの再利用性（アクセス回数）に応じたセクタに、データを記憶する。これにより、アクセス対象のデータがＬ２キャッシュｍ２ａに記憶されている確率を高め、キャッシュヒット率を向上させることが可能になる。
【００２７】
キャッシュメモリのセクタ０とセクタ１とのセクタの分割比は、各セクタのｗａｙ数にしたがって定義する。ｗａｙ数は、セットアソシアティブ(Set Associative)方式におけるｗａｙ数を示す。本実施の形態例におけるＬ２キャッシュｍ２は、１０ｗａｙ数のキャッシュメモリである。図３の上部に示すＬ２キャッシュｍ２ａのセクタの分割比は、「セクタ０：セクタ１＝５：５」である。１つのｗａｙのサイズは、例えば、５１２Ｋバイトである。
【００２８】
なお、図２に示すＬ１キャッシュｍａ、ｍｂについても、セクタキャッシュ機構を備えていてもよいが、本実施の形態例ではＬ２キャッシュｍ２のみがセクタキャッシュ機構を備える場合を例示する。なお、セクタの分割数は、図３の例に限定されるものではない。Ｌ２キャッシュｍ２は、３つ以上のセクタを有していてもよい。
【００２９】
ＣＰＵ３１は、プログラムの実行中に、セクタの分割比を変更することができる。図３は、Ｌ２キャッシュｍ２のセクタの分割比が、Ｌ２キャッシュｍ２ａに示す「セクタ０：セクタ１＝５：５」から、Ｌ２キャッシュｍ２ｂに示す「セクタ０：セクタ１＝３：７」に変更する場合を示す。例えば、再利用性の高いデータ及びそのサイズが増大する場合、図３に示すように、再利用性の高いデータを記憶するセクタ（図３の例では、セクタ１）の領域（ｗａｙ数）を拡張することにより、再利用性の高いデータのキャッシュヒット率を向上させる。
【００３０】
本実施の形態例における情報処理システムは、計算ノード３００が有する複数のＣＰＵコアｃａ、ｃｂが複数のジョブを実行中に、複数のＣＰＵコアｃａ、ｃｂが共有してアクセスする共有キャッシュメモリ（Ｌ２キャッシュ）のセクタの分割比を最適化する。これにより、複数のジョブの実行時の性能が向上する。即ち、実行中の複数のジョブの実行速度が向上する。
【００３１】
図４は、本実施の形態例における計算ノード３００のハードウェア構成を説明する図である。計算ノード３００は、図１、図２で説明したとおり、ＣＰＵ３１、メモリ３２、ＮＩＣ３３を有する。また、計算ノード３００は、不揮発性メモリ４０２を有する。不揮発性メモリ４０２は、ＨＤＤ（Hard disk drive：ＨＤＤ）、不揮発性半導体メモリ等で構成される。各部は、バス３４を介して相互に接続する。
【００３２】
ＣＰＵ３１は、バス３４を介してメモリ３２や不揮発性メモリ４０２等と接続すると共に、ジョブの実行処理を行う。メモリ３２は、ＣＰＵ３１が処理を行うデータ等を記憶する。不揮発性メモリ４０２は、ＣＰＵ３１が実行するＯＳ（Operating System：ＯＳ）のプログラムを格納する領域（図示せず）や、計算ノード３００側のジョブスケジューラプログラムを格納する領域ｐｒ２、ジョブの実行プログラムを格納する領域ｊｐを備える。
【００３３】
ジョブスケジューラプログラム領域ｐｒ２に記憶されたジョブスケジューラプログラム（以下、ジョブスケジューラプログラムｐｒ２と称する）は、ＣＰＵ３１の実行によって、本実施の形態例における計算ノード３００側のジョブスケジュール処理を実現する。また、ジョブの実行プログラム領域ｊｐに記憶された実行プログラム（以下、実行プログラムｊｐと称する）は、ＣＰＵ３１の実行によって、ジョブの処理を実現する。ＮＩＣ３３は、ネットワーク５０を介して、制御ノード１００、ファイルサーバ６００等との間でデータの送受信を制御する。
【００３４】
次に、図１に示した制御ノード１００のハードウェア構成を説明する。
【００３５】
図５は、図１に示した、本実施の形態例における制御ノード１００のハードウェア構成を説明する図である。制御ノード１００は、図１で説明したとおり、ＣＰＵ１１、メモリ１２、ＮＩＣ１３を有する。制御ノード１００は、不揮発性メモリ２０２を有する。不揮発性メモリ２０２は、ＨＤＤ、不揮発性半導体メモリ等で構成される。各部は、バス１４を介して相互に接続する。
【００３６】
ＣＰＵ１１は、バス１４を介してメモリ１２等と接続すると共に、ジョブのスケジューリングを行うとともに、制御ノード１００全体の制御を行う。メモリ１２は、ＣＰＵ１１が処理を行うデータ等を記憶する。不揮発性メモリ２０２は、ＣＰＵ１１が実行するＯＳのプログラムを格納する領域（図示せず）や、本実施の形態例におけるセクタの分割比を算出する、制御ノード１００側のジョブスケジューラプログラムを格納する領域ｐｒ１を備える。
【００３７】
ジョブスケジューラプログラム領域に記憶されたジョブスケジューラプログラム（以下、ジョブスケジューラプログラムｐｒ１と称する）は、ＣＰＵ１１の実行によって、本実施の形態例における制御ノード１００側のジョブスケジュール処理を実現する。また、ＮＩＣ１３は、ネットワーク５０を介して、計算ノード３００、コンパイルノード５００、ファイルサーバ６００等とのデータの送受信を制御する。
【００３８】
また、図５は、制御ノード１００の構成を示すが、コンパイルノード５００も、図５と同様にして、ＣＰＵ５１、メモリ５２、ＮＩＣ５３、不揮発性メモリを有する。ただし、コンパイルノード５００は、不揮発性メモリに、コンパイルプログラムを記憶する。コンパイルプログラムは、ＣＰＵ５１の実行によって、本実施の形態例におけるコンパイル処理を実現する。
【００３９】
［情報処理システムのソフトウェアブロック図］
図６は、本実施の形態例の情報処理システムのソフトウェアブロック図を説明する図である。情報処理システムは、変数別キャッシュ使用状況の解析モジュール（以下、解析モジュールと称する）２１、資源割当最適化モジュール２２、キャッシュセクタ割当制御モジュール２３を有する。また、本実施の形態例において、情報処理システムの処理は、解析フェーズの処理と、実行フェーズの処理とを有する。解析モジュール２１の処理は、解析フェーズに該当する。また、資源割当最適化モジュール２２、及び、キャッシュセクタ割当制御モジュール２３の処理は、実行フェーズに該当する。各モジュールの処理の概要については、図７にしたがって後述する。
【００４０】
解析モジュール２１は、例えば、コンパイルノード５００（図１）のコンパイラや、計算ノード３００（図１）が備える性能シミュレータ（図示せず）等が含むモジュールである。また、資源割当最適化モジュール２２は、制御ノード１００（図１）のジョブスケジューラプログラムｐｒ１が含むモジュールである。キャッシュセクタ割当制御モジュール２３は、計算ノード３００（図１）のジョブスケジューラプログラムｐｒ２が含むモジュールである。
【００４１】
解析モジュール２１は、実行プログラムｊｐを解析して、変数別キャッシュ使用状況情報２４を抽出する。変数別キャッシュ使用状況情報２４は、実行プログラムｊｐ内でメモリアクセスが発生する各変数のデータアクセス量を示す。データアクセス量とは、例えば、変数のサイズ及びアクセス回数を有する。解析モジュール２１は、抽出した変数別キャッシュ使用状況情報２４を、実行プログラムｊｐ、または、実行プログラムｊｐに関係付けられる別のファイルに格納する。
【００４２】
また、解析モジュール２１は、実行プログラムｊｐ内のセクタ分割比の最適化の対象とする区間（以下、最適化区間と称する）の上端に最適化開始コードを、下端に最適化終了コードを埋め込む。最適化開始コード及び最適化終了コードは、資源割当最適化モジュール２２を呼び出す制御コードである。実行プログラムｊｐ内の最適化区間が、セクタの分割比を最適化する対象の区間である。
【００４３】
最適化区間は、例えば、プログラム内の処理時間への影響度が高い処理に対応する。性能への影響度が高い処理とは、例えば、実行プログラムｊｐ内のループ処理やライブラリ関数等のうち、データアクセス量が閾値を超える、ループ処理やライブラリ関数である。解析モジュール２１の詳細については、図９にしたがって後述する。
【００４４】
制御ノード１００の資源割当最適化モジュール２２は、キャッシュメモリのセクタの分割比を算出する。資源割当最適化モジュール２２は、例えば、計算ノード３００で実行中の複数のジョブの処理遅延時間が最少となる、セクタの分割比を算出する。処理遅延時間とは、計算ノード３００で発生すると見積もられる遅延時間を示す。資源割当最適化モジュール２２は、計算ノード３００による実行中ジョブの最適化開始コードの検知に応答して、実行中の複数のジョブに最適なセクタの分割比を算出する。資源割当最適化モジュール２２は、計算ノード３００で実行中の実行プログラムｊｐの変数別キャッシュ使用状況情報２４と、計算ノード３００が有するキャッシュメモリの容量とに基づいて、セクタの分割比を算出する。資源割当最適化モジュール２２の処理の詳細については、図１２にしたがって後述する。
【００４５】
計算ノード３００のキャッシュセクタ割当制御モジュール２３は、資源割当最適化モジュール２２が算出したセクタの分割比に基づいて、キャッシュメモリのセクタの分割比を変更する。キャッシュセクタ割当制御モジュール２３は、例えば、各セクタの最大ｗａｙ数を管理するセクタ構成レジスタの値を書き換えることによって、セクタの分割比を変更する。セクタ構成レジスタは、ＯＳのメモリ空間上で管理される情報である。キャッシュセクタ割当制御モジュール２３の処理の詳細については、図２１にしたがって後述する。
【００４６】
ここで、本実施の形態例の情報処理システムにおけるセクタの分割比の最適化処理の概要を説明する。
【００４７】
図７は、本実施の形態例におけるセクタ分割比の最適化処理の概要を説明する図である。図６で前述したとおり、情報処理システムの処理は、解析フェーズの処理と、実行フェーズの処理とを有する。解析フェーズでは、コンパイルノード５００の解析モジュール２１（図６）が、最適化区間を指定するコードと、変数別キャッシュ使用状況情報２４（以下、データアクセス量と称する）を有する実行プログラムｊｐを生成する。
【００４８】
一般的に、ジョブの実行時にセクタの分割比を変更する場合、例えば、実行プログラム内にセクタの分割比の指定を含む。そして、実行プログラムの実行時に、実行プログラムが有するセクタの分割比の指定を読み出し、キャッシュメモリのセクタの分割比が変更される。この方法は、単一のジョブに対するセクタの分割比制御に有効である。これに対して、本実施の形態例における計算ノード３００は、実行プログラムｊｐの実行中に、複数の実行ジョブ、及び、計算ノード３００のキャッシュメモリの構成に基づいて、最適なセクタの分割比を算出する。したがって、セクタの分割比を算出可能にするために、本実施の形態例における実行プログラムｊｐは、セクタの分割比を指定するコードではなく、最適化区間を指定するコードと、データアクセス量２４とを有する。
【００４９】
次に、実行フェーズでは、図６の資源割当最適化モジュール２２と、キャッシュセクタ割当制御モジュール２３とが連携して処理を行う。計算ノード３００は、実行プログラム（ジョブ）ｊｐ１、ｊｐ２の実行中に、最適化開始コードの検知に応答して、制御ノード１００の資源割当最適化モジュール２２（図６）に、セクタの分割比の算出指示を通知する（ａ１１）。通知に応答して、資源割当最適化モジュール２２は、計算ノード３００上で実行中の複数の実行プログラムｊｐ１、ｊｐ２のデータアクセス量と、計算ノード３００のＬ２キャッシュｍ２の各セクタの容量とに基づいて、計算ノード３００のセクタの分割比を算出する。つまり、資源割当最適化モジュール２２は、計算ノード３００で実行中の複数の実行プログラムｊｐ１、ｊｐ２の処理時の性能を向上させる、セクタの分割比を算出する。そして、資源割当最適化モジュール２２は、算出したセクタの分割比を、計算ノード３００に送信する（ａ１２）。
【００５０】
計算ノード３００のキャッシュセクタ割当制御モジュール２３（図６）は、受信したセクタの分割比に基づいて、セクタ構成レジスタを変更する。キャッシュセクタ割当制御モジュール２３は、オペレーションシステムのユーザ空間３１０上で動作するのに対し、セクタ構成レジスタは、オペレーションシステムのカーネル空間３１１上で動作する。また、ジョブを複数、実行する計算ノード３００では、セクタ構成レジスタの変更に、特権モードが必要となることがある。したがって、キャッシュセクタ割当制御モジュール２３は、例えば、セクタ構成レジスタドライバ２５にシステムコールを発行することによって、セクタ構成レジスタの値を変更する。
【００５１】
そして、計算ノード３００は、最適化開始コードから最適化終了コードまでのコード（最適化区間内のコード）を処理する。最適化区間内のコードは、処理時間が長い場合が多い。また、最適化区間の処理は、セクタの分割比を最適化することによる効果が高い処理に該当する。したがって、セクタの分割比の算出処理が生じものの、セクタの分割比の最適化による処理性能の向上により、ジョブの処理時間は短縮される。
【００５２】
そして、最適化終了コードを検出すると、計算ノード３００は、最適化区間の終了を制御ノード１００に通知する（ａ１１）。資源割当最適化モジュール２２は、最適化区間の終了の通知に応答して、最適化前のセクタの分割比を計算ノード３００に通知する（ａ１２）。キャッシュセクタ割当制御モジュール２３は、セクタの分割比の通知に応答して、システムコールを発行することによってセクタの分割比を変更する。続いて、計算ノード３００は、最適化区間以降のコードを処理する。
【００５３】
図８は、本実施の形態例における情報処理システムが最適化する、計算ノード３００のＬ２キャッシュｍ２の分割比の遷移を示す例図である。図８の例では、第１のＣＰＵコアｃａ（図２）がジョブ１（図７の実行プログラムｊｐ１に対応）を実行し、第２のＣＰＵコアｃｂ（図２）がジョブ２（図７の実行プログラムｊｐ２に対応）を実行する場合を示す。
【００５４】
また、図８の例では、第１のＣＰＵコアｃａがジョブ１の実行を開始した後に、第２のＣＰＵコアｃｂがジョブ２を実行する。ループ処理Ａ、ループ処理Ｂは、最適化区間の処理である。ループ処理Ａは、タイミングｔ１に開始し、タイミングｔ４に終了する。また、ループ処理Ｂは、タイミングｔ２に開始し、タイミングｔ３に終了する。したがって、タイミングｔ１、ｔ２に、Ｌ２キャッシュｍ２のセクタの分割比の最適化が発生する。
【００５５】
図８の例では、ジョブ１の開始時には、例えば、セクタの分割比がデフォルト値「セクタ０：セクタ１＝３：７」に設定される。そして、タイミングｔ１に、ジョブ１のループ処理Ａの開始に応答して、セクタの分割比の最適化処理が発生し、セクタの分割比が「セクタ０：セクタ１＝３：７」から「セクタ０：セクタ１＝２：８」に遷移する。この場合、再利用性の高いデータを記憶するセクタ１の領域が拡張されている。これにより、ジョブ１のループ処理Ａの処理時の性能が向上する。
【００５６】
そして、タイミングｔ２において、ジョブ２のループ処理Ｂの開始に応答して、セクタの分割比の最適化処理が発生し、セクタの分割比が「セクタ０：セクタ１＝２：８」から「セクタ０：セクタ１＝１：９」に遷移する。このとき、セクタ１の領域は、さらに拡張されている。これにより、ジョブ１のループ処理Ａ及びジョブ２のループ処理Ｂの処理時の性能が向上する。このように、本実施の形態例によると、共有キャッシュメモリのセクタの分割比が、実行中の複数のジョブに最適なセクタの分割比、即ち、最適化区間の処理遅延時間が最少となるセクタの分割比に設定される。
【００５７】
そして、ジョブ２のループ処理Ｂが終了すると（ｔ３）、ジョブ２の最適化区間が終了したことにより、セクタの分割比が「セクタ０：セクタ１＝１：９」から、ループ処理Ｂの開始前の「セクタ０：セクタ１＝２：８」に遷移する。これにより、セクタの分割比は、ジョブ１のループ処理Ａの処理時の性能を向上する値に再設定される。また、ジョブ１のループ処理Ａが終了すると（ｔ４）、ジョブ１の最適化区間が終了したことにより、セクタの分割比が「セクタ０：セクタ１＝２：８」から、元の「セクタ０：セクタ１＝３：７」に遷移する。
【００５８】
このように、本実施の形態例における情報処理システムでは、実行プログラムｊｐ内に、予め、変数別キャッシュ使用状況情報（データアクセス量）２４と、最適化区間を指示するコードとを追加する。これにより、情報処理システムは、ジョブの実行中に、対象の計算ノード３００が実行中の複数のジョブのデータアクセス量と、対象の計算ノード３００のキャッシュメモリのセクタの構成に応じて、複数のジョブに最適なセクタの分割比を算出できる。そして、対象の計算ノード３００は、最適なセクタの分割比に基づいて、複数のジョブの処理時の性能を向上させることができる。
【００５９】
各計算ノード３００において並列に実行され得る複数のジョブの組み合わせは、無数に存在する。各ジョブが、同一の計算ノード３００でいずれのジョブと並列して実行されるかはシステムの運用に依存して変動する。また、ジョブの実行前に、すべてのジョブの組み合わせを抽出し、各組み合わせに対して最適なセクタの分割比を算出しておくことは容易ではない。これに対し、本実施の形態例における情報処理システムは、ジョブの実行中に、複数のジョブのデータアクセス量に基づいて、複数のジョブに最適なセクタの分割比を算出する。したがって、情報処理システムは、実行中のジョブがいずれの組み合わせであっても、実行中の複数のジョブに最適な共有キャッシュメモリのセクタの分割比を算出し、セクタの分割比を最適化することができる。
【００６０】
さらに、ジョブを実行する計算ノード３００は、システムの運用に依存して変動する。したがって、各ジョブが、どのような構成のキャッシュメモリを備える計算ノード３００が実行されるかを、実行プログラムｊｐの作成時に検知することは困難である。キャッシュメモリの構成とは、例えば、キャッシュメモリの容量やセクタ数、各セクタのｗａｙ数等を示す。
【００６１】
また、計算ノード３００のＣＰＵ３１の世代が変化する場合、ＣＰＵ３１の基本的な機能は変更前の世代と同様であるものの、キャッシュメモリの構成に変更が生じることがある。さらに、大規模な情報処理システムでは、異なる世代のＣＰＵ３１を備える計算ノード３００が併存している場合がある。したがって、各ジョブが、どのような構成のキャッシュのメモリを備える計算ノード３００が実行されるかを、実行プログラムｊｐの作成時に検知することは困難である。したがって、実行プログラムｊｐの作成時に、予め、すべてのケースにおいて最適なセクタの分割比を検知しておくことが困難である。
【００６２】
これに対し、本実施の形態例における情報処理システムは、ジョブの実行時に、実行中の複数のジョブに最適なセクタの分割比を算出し、セクタの分割比を最適化する。したがって、情報処理システムは、実行中の複数のジョブに加え、ジョブを実行する計算ノード３００のキャッシュメモリの構成に合わせて、最適なセクタの分割比を算出することが可能になる。つまり、情報処理システムは、実行中のジョブがいずれの組み合わせであっても、いずれの構成のキャッシュメモリを備える計算ノード３００においても、ジョブの処理時の性能を向上させることができる。
【００６３】
続いて、図６、図７で示した各モジュールの処理の詳細を、フローチャート図に基づいて説明する。初めに、解析フェーズの解析モジュール２１の処理を説明する。
【００６４】
［解析フェーズ］
図９は、解析モジュール２１の処理の詳細を説明するフローチャート図である。コンパイルノード５００の解析モジュール２１は、コンパイラによるソースプログラムのコンパイル時に、変数ごとのデータアクセス量を解析する。そして、解析モジュール２１は、プログラム内のデータアクセス量を求める（Ｓ１１）。
【００６５】
解析モジュール２１は、ソースプログラムｓｐ内のすべての処理のデータアクセス量を算出してもよいし、ソースプログラムｓｐ内のループ処理のデータアクセス量を算出してもよい。なお、セクタの分割比を最適化することによる効果が生じやすいのは、例えば、ループ処理や、同一のデータを繰り返しアクセスするようなライブラリ関数等である。したがって、解析モジュール２１は、例えば、ループ処理や、同一のデータを繰り返しアクセスするような処理を対象として、データアクセス量を求めてもよい。
【００６６】
なお、計算ノード３００が、性能カウンタを有する性能シミュレータを備える場合、計算ノード３００が工程Ｓ１１の処理を実行してもよい。性能シミュレータは、例えば、実行プログラムｊｐを試験的に実行した際に取得される性能カウンタの値に基づいて、データアクセス量を収集する。
【００６７】
次に、解析モジュール２１は、データアクセス量の情報の出力先がオブジェクトファイル内のセクションであるか否かを判定する（Ｓ１２）。オブジェクトファイルは、ソースプログラムをコンパイルすることによって生成されるファイルである。データアクセス量の情報を、オブジェクトファイル内のセクションに出力するか否かは、例えば、予め指定される。
【００６８】
データアクセス量の出力先がオブジェクトファイル内のセクションである場合（Ｓ１２のＹＥＳ）、解析モジュール２１は、オブジェクトファイル内の出力先のセクションに、データアクセス量（図６の変数別キャッシュ使用状況情報）２４を書き込む（Ｓ１４）。一方、データアクセス量の出力先がオブジェクトファイルのセクションではない場合（Ｓ１２のＮＯ）、解析モジュール２１は、オブジェクトファイル外のセクションに、データアクセス量（図６の変数別キャッシュ使用状況情報）２４を書き込む（Ｓ１３）。
【００６９】
図１０は、変数別キャッシュ使用状況情報２４の一例を示す図である。表Ｈ１は、変数ごとに、最適化区間ＩＤ（identification：ＩＤ）、アドレス、回数、サイズの情報を有する。１つの実行プログラムｊｐは、１つまたは複数の最適化区間を有する。したがって、最適化区間ＩＤは、変数が属する最適化区間を識別する。アドレスは、変数が記憶されるメモリアドレスを示す。アドレスは、例えば、heap領域、stack領域、システムコールmmapにしたがって確保した領域のいずれかのアドレスを示す。また、回数は、メモリ空間へのアクセス回数を示し、サイズは変数のサイズ（バイト）を示す。
【００７０】
表Ｈ１の例では、１つの最適化区間（最適化区間ＩＤ＝１２３）のデータアクセス量を有する。表Ｈ１によると、１行目の変数は、ＩＤ「１２３」の最適化区間でアクセスされる変数の情報を示し、アクセス回数は「１０２４」回、サイズは「２０４８」バイト、アドレスは「0x00000811e7c53430」である。また、２行目の変数は、ＩＤ「１２３」の最適化区間でアクセスされる変数の情報を示し、アクセス回数は「２５６」回、サイズは「２０４８」バイト、アドレスは「0x00001611e7c53000」である。他の変数についても同様である。
【００７１】
図９に戻り、解析モジュール２１は、ソースプログラムｓｐ内の最適化区間の上端と下端に、最適化開始コード及び最適化終了コードを追加する（Ｓ１５）。例えば、利用者は、ソースプログラムｓｐ内の任意のコード群を、最適化区間に指定する。例えば、利用者は、試行錯誤し、チューニングしながら、最適化区間を決定する。これにより、ソースプログラムｓｐ内のうち、予め、セクタの分割比の最適化による効果が特に高いと検知される処理範囲を、任意に、最適化区間に指定できる。
【００７２】
図１１は、最適化開始コード及び最適化終了コードが挿入されたソースプログラムｓｐの一例を示す図である。図１１に示すソースプログラムｓｐは、最適化開始コードｃ１、最適化終了コードｃ２、及び、ループ処理を示すコード群ｃ３を有する。図１１の例において、コード群ｃ３は、最適化区間である。また、図１０の例において、最適化開始コードｃ１は、コードoptimize_request(loop_info);であって、最適化終了コードｃ２は、コードloop_exit_notice(loop_info);である。最適化開始コードｃ１及び最適化終了コードｃ２のパラメータloop_infoは、例えば、最適化区間内のデータアクセス量を示す。
【００７３】
なお、解析モジュール２１は、ソースプログラムｓｐ内のコードのうち、データアクセス量が閾値を超える、ループ処理やコード群（例えば、ライブラリ関数等）を最適化区間として検出してもよい。データアクセス量が閾値を超えるループ処理やコード群は、セクタの分割比を最適化することによる、プログラムの処理時間への影響度が高い。
【００７４】
図９に示す工程の後、コンパイルノード５００のコンパイラは、最適化開始コード及び最適化終了コードが埋め込まれたソースプログラムｓｐをコンパイルして、データアクセス量を有するオブジェクトファイルを生成する。また、コンパイルノード５００のリンカプログラム（図示せず）は、１つまたは複数のオブジェクトファイルをリンクすることによって、実行プログラムｊｐを生成する。
【００７５】
［実行フェーズ］
次に、実行フェーズの処理を説明する。実行フェーズでは、ジョブの実行中に、図６、図７に示した、資源割当最適化モジュール２２、及び、キャッシュセクタ割当制御モジュール２３が連携して処理を行う。初めに、実行フェーズの処理の流れをフローチャート図にしたがって説明する。
【００７６】
図１２は、実行フェーズの処理の流れを説明するフローチャート図である。計算ノード３００のキャッシュセクタ割当制御モジュール２３は、ジョブの実行中に、最適化開始コード（optimize_request(loop_info);、図１１）を検出すると（図７のａ１１）、制御ノード１００に処理を依頼する（Ｓ２１）。図８の例では、タイミングｔ１、ｔ２に該当する。制御ノード１００の資源割当最適化モジュール２２は、計算ノード３００からの依頼に応答して、資源割当最適化処理を行う（Ｓ２６）。工程Ｓ２６に対応する資源割当最適化処理の詳細は、図１３のフローチャート図にしたがって後述する。資源割当最適化モジュール２２は、資源割当最適化処理の結果、セクタの分割比を計算ノード３００に通知する。
【００７７】
そして、計算ノード３００のキャッシュセクタ割当制御モジュール２３は、通知されたセクタの分割比に基づいて、キャッシュセクタ割当制御処理を行う（Ｓ２２）。キャッシュセクタ割当制御処理の詳細は、図２１のフローチャート図にしたがって後述する。そして、計算ノード３００は、ループ処理（最適化区間の処理）を実行する（Ｓ２３）。
【００７８】
ループ処理の後、最適化終了コード（loop_exit_notice(loop_info);、図１１）を検出すると（図７のａ１２）、キャッシュセクタ割当制御モジュール２３は、制御ノード１００に最適化区間の終了を通知する（Ｓ２４）。図８の例では、タイミングｔ３、ｔ４に該当する。制御ノード１００の資源割当最適化モジュール２２は、計算ノード３００からの通知に応答して、資源割当最適化処理を行う（Ｓ２７）。工程Ｓ２７に対応する資源割当最適化処理の詳細は、図１５のフローチャート図で説明する。資源割当最適化モジュール２２は、資源割当最適化処理の結果、セクタの分割比を計算ノード３００に通知する。そして、同様にして、計算ノード３００のキャッシュセクタ割当制御モジュール２３は、通知されたセクタの分割比に基づいて、キャッシュセクタ割当制御処理を行う（Ｓ２５）。
【００７９】
［フローチャート：資源割当最適化処理］
図１３は、図１２に示す資源割当最適化処理（Ｓ２６）を説明するフローチャート図である。資源割当最適化モジュール２２は、計算ノード３００から資源割当最適化処理の依頼を受け付ける（Ｓ３１）。このとき、資源割当最適化モジュール２２は、実行中のジョブ（以下、依頼ジョブと称する）の変数別キャッシュ使用状況情報２４のうち、対象の最適化区間のデータアクセス量を、計算ノード３００から受信する。
【００８０】
次に、資源割当最適化モジュール２２は、受信した最適化区間のデータアクセス量を、計算ノード３００の共有キャッシュメモリを使用する実行中ジョブのデータアクセス量に追加する（Ｓ３２）。これにより、資源割当最適化モジュール２２は、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計を算出する。資源割当最適化モジュール２２は、計算ノード３００で実行中の他のジョブが最適化区間の処理中である場合に、当該最適化区間のデータアクセス量に、依頼ジョブの対象の最適化区間内のデータアクセス量を追加する。
【００８１】
図１４は、工程Ｓ３２で更新される、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計を示す図である。表Ｈ２は、図８のタイミングｔ２に更新される、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計の一例を示す。表Ｈ２における、最適化区間ＩＤ「２１２」の各行ｄ１はジョブ１のループ処理Ａに対応する。また、最適化区間ＩＤ「１２３」の各行ｄ２はジョブ２のループ処理Ｂに対応する。つまり、タイミングｔ２に、資源割当最適化モジュール２２は、表Ｈ２に示すように、実行中のループ処理Ａのデータアクセス量（ｄ１）に、新たに開始するループ処理Ｂのデータアクセス量（ｄ２）を追加する（Ｓ３２）。
【００８２】
なお、同一の計算ノード３００で実行中の別のジョブが、最適化区間の処理中ではない場合、資源割当最適化モジュール２２は、実行中の別のジョブのデータアクセス量を、当該ジョブの変数別キャッシュ使用状況情報２４の最適化区間外のデータアクセス量に基づいて算出してもよい。または、計算ノード３００のＣＰＵ３１が性能測定機構を内蔵する場合、資源割当最適化モジュール２２は、実行中の別のジョブのデータアクセス量を、性能測定機構が測定したデータアクセス量に基づいて算出してもよい。資源割当最適化モジュール２２は、算出した実行中の別のジョブのデータアクセス量に、依頼ジョブの対象の最適化区間内のデータアクセス量を追加する。
【００８３】
図１３のフローチャート図に戻り、資源割当最適化モジュール２２は、工程Ｓ３２で更新したデータアクセス量と、キャッシュメモリの容量とに基づいて、セクタの分割比を求める（Ｓ３３）。資源割当最適化モジュール２２は、例えば、キャッシュミスによる処理遅延時間を評価する関数の値が最少となる、セクタの分割比を算出する。処理の詳細は、図１６〜図２０にしたがって後述する。そして、資源割当最適化モジュール２２は、計算ノード３００に、セクタの分割比を通知し、セクタの分割比を反映するシステムコールの実行を指示する（Ｓ３４）。
【００８４】
図１５は、図１２に示す資源割当最適化処理（Ｓ２７）を説明するフローチャート図である。資源割当最適化モジュール２２は、計算ノード３００から、依頼ジョブのループ処理終了の通知を受け付ける（Ｓ４１）。次に、資源割当最適化モジュール２２は、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計から、依頼ジョブの最適化区間のデータアクセス量を削除する（Ｓ４２）。例えば、前述した図１４の表Ｈ２を例にとると、図８のタイミングｔ３では、資源割当最適化モジュール２２は、最適化区間ＩＤ「１２３」に対応する各行ｄ２に対応する情報を取り除く。
【００８５】
次に、資源割当最適化モジュール２２は、計算ノード３００に、最適化区間の前のセクタの分割比を通知するとともに、セクタの分割比を反映するシステムコールの実行を指示する（Ｓ４３）。なお、このとき、資源割当最適化モジュール２２は、図１３の工程Ｓ３３の処理と同様にして、工程Ｓ４２で更新した、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計に基づいて、セクタの分割比を算出し直してもよい。これにより、資源割当最適化モジュール２２は、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計が変化するタイミング毎に、最適なセクタの分割比を算出し直すことができる。
【００８６】
［セクタの分割比の算出（図１３のＳ３３）］
図１６は、セクタの分割比の算出処理（図１３のＳ３３）の処理の流れを説明するフローチャート図である。セクタの分割比の算出処理では、セクタの分割比の各パターンそれぞれについて、処理遅延時間を示す評価値を算出する。そして、複数のパターンのうち、最も処理遅延時間を示す評価値が小さいパターンが選択される。
【００８７】
初めに、資源割当最適化モジュール２２は、候補とするセクタの分割比のパターンリストＳを抽出する（Ｓ６１）。図２で説明したとおり、本実施の形態例におけるＬ２キャッシュｍ２は、１０ｗａｙ構造である。したがって、パターンリストＳは、例えば、「セクタ０：セクタ１＝１：９」、「セクタ０：セクタ１＝２：８」、「セクタ０：セクタ１＝３：７」、「セクタ０：セクタ１＝４：６」、「セクタ０：セクタ１＝５：５」、「セクタ０：セクタ１＝６：４」、「セクタ０：セクタ１＝７：３」、「セクタ０：セクタ１＝８：２」、「セクタ０：セクタ１＝９：１」を有する。ただし、この例に限定されるものではなく、上記のパターンのうち、一部のパターンであってもよい。
【００８８】
次に、資源割当最適化モジュール２２は、抽出したパターンリストＳの先頭の要素（パターン）を変数ｐにセットする（Ｓ６２）。先頭の要素は、例えば、セクタの分割比「セクタ０：セクタ１＝１：９」である。資源割当最適化モジュール２２は、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎ（ｐ）を実行し、処理遅延時間を示す評価値ｕを求める（Ｓ６３）。つまり、資源割当最適化モジュール２２は、セクタの分割比「セクタ０：セクタ１＝１：９」（値ｐ）を採用した場合における処理遅延時間を示す評価値（値ｕ）を算出する。関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎの処理については、図１８、図２０のフローチャート図にしたがって説明する。
【００８９】
次に、資源割当最適化モジュール２２は、抽出したパターンリストＳの２番目の要素を変数ｑにセットする（Ｓ６４）。２番目の要素は、例えば、セクタの分割比「セクタ０：セクタ１＝２：８」である。そして、資源割当最適化モジュール２２は、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎ（ｑ）を実行し、処理遅延時間を示す評価値ｖを求める（Ｓ６５）。つまり、資源割当最適化モジュール２２は、セクタの分割比「セクタ０：セクタ１＝２：８」（値ｑ）を採用した場合における処理遅延時間の評価値（値ｖ）を算出する。
【００９０】
そして、資源割当最適化モジュール２２は、先頭の要素「セクタ０：セクタ１＝１：９」（値ｐ）に基づいて求めた値ｕ（Ｓ６３）と、２番目の要素「セクタ０：セクタ１＝２：８」（値ｑ）に基づいて求めた値ｖ（Ｓ６５）とを比較する（Ｓ６６）。値ｖが値ｕより小さい場合（Ｓ６６のＹＥＳ）、２番目の要素ｑに基づく処理遅延時間を示す評価値（ｖ）が、先頭の要素ｐに基づく処理遅延時間を示す評価値（ｕ）よりも小さい場合を示す。この場合、資源割当最適化モジュール２２は、値ｕに値ｖを入力する（Ｓ６７）。また、資源割当最適化モジュール２２は、パターンの先頭要素ｐを、先頭の要素ｐから２番目の要素ｑに更新する（Ｓ６８）。つまり、資源割当最適化モジュール２２は、２番目の要素「セクタ０：セクタ１＝２：８」を、処理遅延時間を示す評価値が最も小さい要素ｐとする。
【００９１】
一方、値ｖが値ｕ以上である場合（Ｓ６６のＮＯ）、２番目の要素ｑに基づく処理遅延時間を示す評価値（ｖ）が、先頭の要素ｐに基づく処理遅延時間を示す評価値（ｕ）以上である場合を示す。この場合、資源割当最適化モジュール２２は、工程Ｓ６７、Ｓ６８の処理を行わない。つまり、資源割当最適化モジュール２２は、先頭の要素「セクタ０：セクタ１＝１：９」を、処理遅延時間を示す評価値が最も小さい要素ｐとして維持する。そして、資源割当最適化モジュール２２は、パターンリストＳ内の先頭の要素を除去する（Ｓ６９）。
【００９２】
そして、パターンリストＳが要素を有する間、資源割当最適化モジュール２２は、工程Ｓ６５〜Ｓ６９の処理を繰り返す。この結果、要素ｐは、パターンリストＳが有するセクタの分割比の候補のうち、処理遅延時間を示す評価値が最も小さい要素（セクタの分割比）を有する。資源割当最適化モジュール２２は、要素ｐのセクタの分割比を、最適なセクタの分割比として選択する。
【００９３】
［関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎ］
図１７は、図１６の工程Ｓ６３、Ｓ６５に示す、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎの処理の概要を説明するフローチャート図である。関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、要素（セクタの分割比）を入力として、計算ノード３００における、複数のジョブの処理遅延時間を示す評価値を算出する。
【００９４】
初めに、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、複数のジョブのデータアクセス量とキャッシュメモリの容量とに基づいて、セクタごとのキャッシュミス発生指標値を算出する（Ｓ７１）。工程Ｓ７１の処理の詳細については、図１８〜図２０にしたがって後述する。
【００９５】
次に、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、セクタごとのキャッシュミス発生指標値に基づいて、キャッシュミス発生回数を算出する（Ｓ７２）。関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、キャッシュミス発生指標値に係数を適用することによって、キャッシュミス発生回数を算出する。キャッシュミス発生指標値のキャッシュミスの発生回数への寄与率は、セクタごとに異なる。したがって、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、各セクタのキャッシュミス発生指標値に、セクタごとに異なる重みを有する係数を適用し、キャッシュミス発生回数を適切に算出する。処理の詳細については、後述する。
【００９６】
次に、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、キャッシュミス発生回数に基づいて、計算ノード３００における、処理遅延時間を示す評価値を算出する（Ｓ７３）。なお、計算ノード３００が複数の階層のキャッシュメモリを有する場合、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、各階層のキャッシュメモリごとに、キャッシュミス発生回数を算出する。そして、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、各階層のキャッシュミス発生回数に、階層ごとに異なる重みを有する係数を適用し、計算ノード３００における処理遅延時間を算出する。これにより、関数ｏｂｊｅｃｔｉｖｅ_ｆｕｎｃｔｉｏｎは、計算ノード１００の処理遅延時間を高精度に算出する。
【００９７】
次に、図１８〜図２０に基づいて、キャッシュミス発生指標値の算出処理を説明する。図１８、図２０のフローチャート図は、計算ノード３００が複数の階層のキャッシュメモリを有する場合における、階層ごとのキャッシュミス発生指標値を算出するフローチャートである。また、図１８、図２０は、各階層のキャッシュメモリのそれぞれが、複数のセクタを有する場合における、キャッシュミス発生指標値の算出処理を示す。ただし、前述したとおり、図２の例において、Ｌ１キャッシュｍａ、ｍｂはセクタキャッシュ機構を備えていない。したがって、Ｌ１キャッシュｍａ、ｍｂの処理（図１８）において、資源割当最適化モジュール２２は、例えば、Ｌ１キャッシュｍａ、ｍｂのセクタの分割比を、所定のデフォルト値（例えば、「セクタ０：セクタ１＝５：５」）であると仮定する。
【００９８】
図１８は、ＣＰＵコアに固有のＬ１キャッシュｍａ、ｍｂのキャッシュミス発生指標値の算出処理を説明するフローチャート図である。資源割当最適化モジュール２２は、まず、キャッシュレベルを示す変数Ｌに、値「１」をセットする（Ｓ８１）。本実施の形態例では、図２で説明したとおり、変数Ｌが値「１」の場合は、Ｌ１キャッシュｍａ、ｍｂを示し、変数Ｌが値「２」の場合は、Ｌ２キャッシュｍ２を示す。
【００９９】
次に、資源割当最適化モジュール２２は、再利用度別のデータアクセス量ａ（Ｌ,Ｒ,Ｃ）を算出する（Ｓ８２）。データアクセス量ａ（Ｌ,Ｒ,Ｃ）における、変数ＣはＣＰＵコアの識別情報を示す。本実施の形態例では、ＣＰＵ（図２）が２つのＣＰＵコアｃａ、ｃｂを有する。したがって、変数Ｃは値「１」及び値「２」を示す。また、変数Ｒは再利用度を示す。本実施の形態例では、変数のアクセス回数が２５５回以下の変数を再利用度「１」、変数のアクセス回数が２５５回を超える変数を再利用度「２」とする。したがって、変数Ｒは値「１」及び値「２」を示す。なお、再利用度「Ｒ＝１」はセクタ０に対応し、再利用度「Ｒ＝２」はセクタ１に対応する。変数Ｌは、キャッシュメモリのレベルである。
【０１００】
具体的に、資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂ（「Ｌ＝１」）、ＣＰＵコアｃａ（「Ｃ＝１」）、再使用度「Ｒ＝１」（セクタ０に対応）、「Ｒ＝２」（セクタ１に対応）ごとのデータアクセス量ａ（Ｌ,Ｒ,Ｃ）（＝ａ（１,１,１）、ａ（１,２,１））を算出する。また、資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂ（「Ｌ＝１」）、ＣＰＵコアｃｂ（「Ｃ＝２」）、再使用度「Ｒ＝１」（セクタ０に対応）、「Ｒ＝２」（セクタ１に対応）ごとのデータアクセス量ａ（Ｌ,Ｒ,Ｃ）（＝ａ（１,１,２）、ａ（１,２,２））を算出する。
【０１０１】
図１９は、Ｌ１キャッシュｍａ、ｍｂのデータアクセス量ａ（Ｌ,Ｒ,Ｃ）を説明する図である。資源割当最適化モジュール２２は、表Ｈ２に示す、共有キャッシュメモリを使用する実行中ジョブのデータアクセス量の合計（図１３のＳ３２、図１４の表Ｈ２）に基づいて、Ｌ１キャッシュｍａ、ｍｂのデータアクセス量を算出する。図１９の表Ｈ２は、図１４で説明した表Ｈ２と同一である。
【０１０２】
例えば、表Ｈ２の最適化区間ＩＤ「２１２」は、ＣＰＵコアｃａ（図２）（「ＣＰＵ＝１」）の処理を示し、最適化区間ＩＤ「１２３」は、ＣＰＵコアｃｂ（図２）（「ＣＰＵ＝２」）の処理を示す。ＣＰＵコアｃａは、Ｌ１キャッシュｍａに対応し、ＣＰＵコアｃｂは、Ｌ１キャッシュｍｂに対応する。また、前述したとおり、変数のアクセス回数が２５５回以下の変数を再利用度「Ｒ＝１」、変数のアクセス回数が２５５回を超える変数を再利用度「Ｒ＝２」とする。
【０１０３】
表Ｈ２の１行目の最適化区間ＩＤ「２１２」の変数のアクセス回数は「１０２４」回であって、再利用度「Ｒ＝２」に該当する。したがって、資源割当最適化モジュール２２は、１行目の変数のサイズ「１０２４」バイトを、対応するＬ１キャッシュｍａの再利用度「Ｒ＝２」のデータアクセス量ｄａ２（ａ（１,２,１））に累計加算する。同様にして、２行目の変数のアクセス回数が「２５６」回であることから、資源割当最適化モジュール２２は、サイズ「２０４８」バイトを、対応するＬ１キャッシュｍａの再利用度「Ｒ＝２」のデータアクセス量ｄａ２（ａ（１,２,１））に累計加算する。
【０１０４】
また、４行目の最適化区間ＩＤ「１２３」の変数のアクセス回数が「１０２４」回であることから、資源割当最適化モジュール２２は、サイズ「２０４８」バイトを、対応するＬ１キャッシュｍｂの再利用度「Ｒ＝２」のデータアクセス量ｄｂ２（ａ（１,２,２））に累計加算する。他の変数についても同様である。また、６行目の最適化区間ＩＤ「１２３」の変数のアクセス回数が「１」回であることから、資源割当最適化モジュール２２は、サイズ「１００」バイトを、対応するＬ１キャッシュｍｂの再利用度「Ｒ＝１」のデータアクセス量ｄｂ１（ａ（１,１,２））に累計加算する。
【０１０５】
このように、資源割当最適化モジュール２２は、ジョブにかかわらず、計算ノード３００全体の変数の再利用度に応じて、変数のサイズを累計する。これにより、資源割当最適化モジュール２２は、Ｌ１キャッシュｍａの再利用度「Ｒ＝１」のデータアクセス量ａ（１,１,１）、Ｌ１キャッシュｍａの再利用度「Ｒ＝２」のデータアクセス量ａ（１,２,１）、Ｌ１キャッシュｍｂの再利用度「Ｒ＝１」のデータアクセス量ａ（１,１,２）、Ｌ１キャッシュｍｂの再利用度「Ｒ＝２」のデータアクセス量ａ（１,２,２）を算出する。
【０１０６】
図１８に戻り、資源割当最適化モジュール２２は、次に、変数Ｌが変数Ｐ以下であるか否かを判定する（Ｓ８３）。変数Ｐは、ＣＰＵコアに固有のキャッシュメモリの最大のレベルを示す。本実施の形態例では、ＣＰＵコアに固有のキャッシュメモリは、Ｌ１キャッシュｍａ、ｍｂのみである。したがって、変数Ｐは値「１」を示す。初回、変数Ｌは値「１」を示すため、変数Ｌは変数Ｐ以下である（Ｓ８３のＹＥＳ）。つまり、資源割当最適化モジュール２２は、処理中のキャッシュメモリがＣＰＵコアに固有のキャッシュメモリである場合に、処理を継続する。
【０１０７】
次に、資源割当最適化モジュール２２は、次の階層レベル（Ｌ＝Ｌ＋１）のデータアクセス量ａ（Ｌ＋１,Ｒ,Ｃ）を算出する（Ｓ８４）。即ち、資源割当最適化モジュール２２は、Ｌ２キャッシュｍ２のデータアクセス量ａ（Ｌ,Ｒ,Ｃ）（＝（２,１,１）、ａ（２,２,１）、ａ（２,１,２）、ａ（２,２,２））を算出する。資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂの容量に収まらないデータアクセス量を、Ｌ２キャッシュｍ２のデータアクセス量として算出する。
【０１０８】
具体的に、資源割当最適化モジュール２２は、工程Ｓ８２で算出した、Ｌ１キャッシュｍａ、ｍｂのデータアクセス量ａ（１,１,１）、ａ（１,２,１）、ａ（１,１,２）、ａ（１,２,２）を、Ｌ１キャッシュｍａ、ｍｂのセクタごとの容量Ｖ（Ｌ,Ｃ）（＝Ｖ（１,１）、Ｖ（１,２））によって減算し、Ｌ２キャッシュｍ２のデータアクセス量を算出する。容量Ｖ（１,１）は、Ｌ１キャッシュｍａの容量を示し、容量Ｖ（１,２）は、Ｌ１キャッシュｍｂの容量を示す。
【０１０９】
前述したとおり、図２の例におけるＬ１キャッシュｍａ、ｍｂは、セクタキャッシュ機構を備えていない。この場合、資源割当最適化モジュール２２は、例えば、Ｌ１キャッシュｍａ、ｍｂのセクタの分割比が、例えば、「セクタ０：セクタ１＝５：５」であると仮定して、セクタごとの容量ｖ（Ｌ,Ｒ,Ｃ）（＝ｖ（１,１,１）、ｖ（１,２,１）、ｖ（１,１,２）、ｖ（１,２,２））を算出する。容量ｖ（１,１,１）は、Ｌ１キャッシュｍａのセクタ０（「Ｒ＝０」）の容量を示し、容量ｖ（１,２,１）は、Ｌ１キャッシュｍａのセクタ１（「Ｒ＝１」）の容量を示す。同様にして、容量ｖ（１,１,２）は、Ｌ１キャッシュｍｂのセクタ０（「Ｒ＝０」）の容量を示し、容量ｖ（１,２,２）は、Ｌ１キャッシュｍｂのセクタ１（「Ｒ＝１」）の容量を示す。
【０１１０】
そして、資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂそれぞれのセクタごとの容量ｖ（１,１,１）、ｖ（１,２,１）、ｖ（１,１,２）、ｖ（１,２,２）から、Ｌ１キャッシュｍａ、ｍｂそれぞれのセクタごとのデータアクセス量ａ（１,１,１）、ａ（１,２,１）、ａ（１,１,２）、ａ（１,２,２）を減算し、Ｌ２キャッシュｍ２のデータアクセス量を算出する。
【０１１１】
次に、資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂのセクタごとのキャッシュミス発生指標値Ｉ（Ｌ,Ｒ）＝（Ｉ（１,１）、Ｉ（１,２））を算出する（Ｓ８５）。具体的に、キャッシュミス発生指標値Ｉ（１,１）は、Ｌ１キャッシュ全体のセクタ０（「Ｒ＝１」）のキャッシュミス発生指標値を示し、キャッシュミス発生指標値Ｉ（１,２）は、Ｌ１キャッシュ全体のセクタ１（「Ｒ＝２」）のキャッシュミス発生指標値を示す。即ち、資源割当最適化モジュール２２は、セクタごとに、キャッシュミス発生指標値を算出する。
【０１１２】
資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂそれぞれについて、容量におけるデータアクセス量の割合に基づいて、キャッシュミス発生指標値を算出する。まず、資源割当最適化モジュール２２は、ＣＰＵコア「Ｃ＝１」、再利用度「Ｒ＝１」のデータアクセス量ａ（１,１,１）と、ＣＰＵコア「Ｃ＝２」、再利用度「Ｒ＝１」のデータアクセス量ａ（１,１,２）とを加算し、再利用度「Ｒ＝１」のデータアクセス量Ａ（Ｌ,Ｒ）（＝（１，１））を算出する。同様にして、資源割当最適化モジュール２２は、ＣＰＵコア「Ｃ＝１」、再利用度「Ｒ＝２」のデータアクセス量ａ（１,２,１）と、ＣＰＵコア「Ｃ＝２」、再利用度「Ｒ＝２」のデータアクセス量ａ（１,２,２）とを加算し、再利用度「Ｒ＝２」のデータアクセス量Ａ（Ｌ,Ｒ）（＝（１，２））を算出する。
【０１１３】
そして、資源割当最適化モジュール２２は、Ｌ１キャッシュ全体の再利用度「Ｒ＝１」のデータアクセス量Ａ（１,１）を、Ｌ１キャッシュ全体のセクタ０（「Ｒ＝１」）のの容量Ｖ（１,１）によって除算し、キャッシュミス発生指標値Ｉ（１,１）を算出する。同様にして、資源割当最適化モジュール２２は、Ｌ１キャッシュ全体の再利用度「Ｒ＝２」のデータアクセス量Ａ（１,２）を、Ｌ１キャッシュ全体のセクタ１（「Ｒ＝２」）のの容量Ｖ（１,２）によって除算し、キャッシュミス発生指標値Ｉ（１,２）を算出する。
【０１１４】
次に、資源割当最適化モジュール２２は、変数Ｌをインクリメントする（Ｓ８６）。そして、資源割当最適化モジュール２２は、変数Ｌが変数Ｐ以下であるか否かを判定する（Ｓ８３）。前述したとおり、本実施の形態例において、「Ｐ＝１」である。したがって、本実施の形態例によると、変数Ｌが変数Ｐを超えるため（Ｓ８３のＮＯ）、図１８のフローチャートの処理が終了する。一方、ＣＰＵ固有のキャッシュメモリが複数階層、存在する場合、資源割当最適化モジュール２２は、別の階層のキャッシュメモリについて、キャッシュミス発生指標値を算出する。
【０１１５】
図２０は、共有キャッシュメモリのキャッシュミス発生指標値の算出処理を説明するフローチャート図である。この例では、資源割当最適化モジュール２２は、図２０にしたがって、Ｌ２キャッシュｍ２のキャッシュミス発生指標値の算出処理を説明する。
【０１１６】
まず、資源割当最適化モジュール２２は、変数Ｐをインクリメントした値を変数Ｌに代入する（Ｓ９１）。この例では、資源割当最適化モジュール２２は、変数Ｌに値「２」を代入する。次に、資源割当最適化モジュール２２は、Ｌ２キャッシュｍ２のデータアクセス量を算出する（Ｓ９２）。具体的に、資源割当最適化モジュール２２は、図１８の工程Ｓ８４で算出した、ＣＰＵコア「Ｃ＝１」、再利用度「Ｒ＝１」のデータアクセス量ａ（２,１,１）と、ＣＰＵコア「Ｃ＝２」、再利用度「Ｒ＝１」のデータアクセス量ａ（２,１,２）とを加算し、再利用度「Ｒ＝１」のデータアクセス量Ａ（Ｌ,Ｒ）（＝（２，１））を算出する。同様にして、資源割当最適化モジュール２２は、ＣＰＵコア「Ｃ＝１」、再利用度「Ｒ＝２」のデータアクセス量ａ（２,２,１）と、ＣＰＵコア「Ｃ＝２」、再利用度「Ｒ＝２」のデータアクセス量ａ（２,２,２）とを加算し、再利用度「Ｒ＝２」のデータアクセス量Ａ（Ｌ,Ｒ）（＝（２，２））を算出する。
【０１１７】
次に、資源割当最適化モジュール２２は、変数Ｌが変数Ｍ以下であるか否かを判定する（Ｓ９３）。変数Ｍは、共有キャッシュメモリの最大レベルを示す。本実施の形態例では、共有キャッシュレベルの最大レベルは「２」である。したがって、変数Ｌは、変数Ｍ以下である（Ｓ９３のＹＥＳ）。次に、ＣＰＵが次レベル（Ｌ＋１）の共有キャッシュメモリを備える場合、資源割当最適化モジュール２２は、次レベルのキャッシュメモリに対するデータアクセス量Ａ（３,１）（３,２）を算出する（Ｓ９４）。具体的に、資源割当最適化モジュール２２は、Ｌ２キャッシュｍ２のデータアクセス量Ａ（Ｌ,Ｒ）（＝Ａ（２,１）（２,２））から、Ｌ２キャッシュｍ２の容量Ｖ（Ｌ,Ｒ）＝（Ｖ（２，１）、Ｖ（２，２））を減算することによって、Ｌ３キャッシュのデータアクセス量Ａ（３,１）（３,２）を算出する。
【０１１８】
次に、資源割当最適化モジュール２２は、Ｌ２キャッシュｍ２のセクタごとの、キャッシュミス発生指標値Ｉ（Ｌ,Ｒ）（＝Ｉ（２,１）、Ｉ（２,２））を算出する（Ｓ９５）。資源割当最適化モジュール２２は、工程Ｓ９２で算出した、Ｌ２キャッシュｍ２の再利用度（セクタ）ごとのデータアクセス量Ａ（Ｌ,Ｒ）（＝Ａ（２,１）、Ａ（２,２））を用いる。また、資源割当最適化モジュール２２は、セクタ０の容量Ｖ（２，１）、及び、セクタ１の容量Ｖ（２，２）を算出する。１つのｗａｙのサイズは、例えば、５１２バイトである。例えば、パターンとして入力されたセクタの分割比のパターンが「セクタ０：セクタ１＝２：８」である場合、再利用度「Ｒ＝１」（セクタ０）の容量Ｖ（２,１）は「１０２４＝５１２×２」バイト、再利用度「Ｒ＝２」（セクタ１）の容量Ｖ（２,２）は「４０９６＝５１２×８」バイトとなる。
【０１１９】
具体的に、資源割当最適化モジュール２２は、Ｌ２キャッシュの再利用度「Ｒ＝１」のデータアクセス量Ａ（２,１）を、Ｌ２キャッシュｍ２のセクタ０（「Ｒ＝１」）のの容量Ｖ（２,１）によって除算し、キャッシュミス発生指標値Ｉ（２,１）を算出する。同様にして、資源割当最適化モジュール２２は、Ｌ２キャッシュｍ２の再利用度「Ｒ＝２」のデータアクセス量Ａ（２,２）を、Ｌ２キャッシュｍ２のセクタ１（「Ｒ＝２」）のの容量Ｖ（２,２）によって除算し、キャッシュミス発生指標値Ｉ（２,２）を算出する。
【０１２０】
次に、資源割当最適化モジュール２２は、変数Ｌをインクリメントする（Ｓ９６）。そして、資源割当最適化モジュール２２は、変数Ｌが変数Ｍ以下であるか否かを判定する（Ｓ９３）。変数Ｌが変数Ｍ以下である場合（Ｓ９３のＹＥＳ）、即ち、ＣＰＵがＬ３キャッシュを備える場合、資源割当最適化モジュール２２は、Ｌ３キャッシュのキャッシュミス発生指標値を算出する（Ｓ９４〜Ｓ９６）。
【０１２１】
このように、図１８、図２０にしたがって、資源割当最適化モジュール２２は、セクタの分割比のパターンにおける、Ｌ１キャッシュｍａ、ｍｂ、Ｌ２キャッシュｍ２のキャッシュミス発生指標値を算出する。次に、資源割当最適化モジュール２２は、Ｌ１キャッシュｍａ、ｍｂ、Ｌ２キャッシュｍ２のキャッシュミス発生指標値を入力として、Ｌ１キャッシュｍａ、ｍｂ、Ｌ２キャッシュｍ２のキャッシュミス発生回数を算出する。
【０１２２】
具体的に、Ｌ１キャッシュｍａ、ｍｂのキャッシュミス発生回数Ｍ（１）を算出する式１は、例えば、次のとおりである。資源割当最適化モジュール２２は、キャッシュミス発生指標値、及び、データアクセス量の対数に基づいて、キャッシュミス発生回数を算出する。値Ｉ（Ｌ,Ｒ）（＝Ｉ（１,１）、Ｉ（１,２））は、Ｌ１キャッシュｍａ、ｍｂの、セクタ（再利用度）ごとの、キャッシュミス発生指標値である。値Ａ（Ｌ,Ｒ）（＝Ａ（１，１）、Ａ（１，２））は、Ｌ１キャッシュｍａ、ｍｂのセクタ（再利用度）ごとのデータアクセス量である。式１における係数ｅ（１）,ｅ（２）,ｅ（３）,ｅ（４）は、設計データに基づく重回帰分析に基づいて、予め、求められる。このように、セクタごとに、異なる係数が適用される。
Ｍ（１）＝ｅ（１）＊Ｉ（１，１）＋ｅ（２）＊Ｉ（１，２）＋ｅ（３）＊ｌｏｇ（Ａ（１，１））＋ｅ（４）＊ｌｏｇ（Ａ（１，２））…式１
Ｌ２キャッシュｍ２のキャッシュミス発生回数Ｍ（２）を算出する式２は、例えば、次のとおりである。値Ｉ（Ｌ,Ｒ）（＝Ｉ（２，１）（２，２））は、Ｌ２キャッシュｍ２の、セクタ（再利用度）ごとのキャッシュミス発生指標値である。値Ａ（Ｌ,Ｒ）（＝Ａ（２，１）、Ａ（２，２））は、Ｌ２キャッシュｍ２のセクタ（再利用度）ごとのデータアクセス量である。式２における係数ｆ（１）,ｆ（２）,ｆ（３）,ｆ（４）は、設計データに基づく重回帰分析に基づいて、予め、求められる。セクタごとに、異なる係数が適用される。
Ｍ（２）＝ｆ（１）＊Ｉ（２，１）＋ｆ（２）＊Ｉ（２，２）＋ｆ（３）＊ｌｏｇ（Ａ（２，１））＋ｆ（４）＊ｌｏｇ（Ａ（２，２））…式２
これにより、資源割当最適化モジュール２２は、各階層レベルのキャッシュミス発生回数Ｍ（１）、Ｍ（２）を算出する。Ｍ（１）は、Ｌ１キャッシュｍａ、ｍｂのキャッシュミス発生回数である。Ｍ（２）は、Ｌ２キャッシュｍ２のキャッシュミス発生回数である。次に、資源割当最適化モジュール２２は、算出した、各階層レベルのキャッシュミス発生回数Ｍ（１）、Ｍ（２）を入力として、処理遅延時間を示す評価値を算出する。処理遅延時間を示す評価値を算出する式３は、例えば、次のとおりである。式３における係数Ｐ（１）,Ｐ（２）は、各キャッシュレベルの１回あたりキャッシュミスペナルティを示す。係数Ｐ（１）,Ｐ（２）は、設計データに基づく重回帰分析に基づいて、予め、求められる。
Ｐ（１）＊Ｍ（１）＋Ｐ（２）＊Ｍ（２）…式３
式３では、階層レベルごとに、係数Ｐ（１）,Ｐ（２）が異なる。キャッシュミス発生回数の処理遅延時間に対する寄与率は、キャッシュレベルの階層にしたがって異なる。したがって、資源割当最適化モジュール２２は、階層ごとに重みが異なる係数Ｐ（１）,Ｐ（２）を、キャッシュミス発生回数に適用することによって処理遅延時間を高精度に算出する。これにより、各レベルのキャッシュメモリのキャッシュミス発生回数に基づいて、最適なＬ２キャッシュｍ２のセクタの分割比が算出可能になる。
【０１２３】
なお、式３では、キャッシュミス発生回数Ｍ（１）、Ｍ（２）が小さい場合に、処理遅延時間を示す評価値が短くなる。また、式３によると、キャッシュミス発生回数Ｍ（１）、Ｍ（２）の比が最適な比率である場合に、処理遅延時間を示す評価値が小さくなる。したがって、Ｌ１キャッシュがセクタキャッシュ機構を備える場合、Ｌ２キャッシュｍ２に加えて、Ｌ１キャッシュのセクタの分割比も最適化可能になる。
【０１２４】
前述したように、計算ノード３００が複数の階層のキャッシュメモリを有する場合、キャッシュミス発生回数の処理遅延時間に対する寄与率は、キャッシュレベルの階層レベルによって異なる。したがって、資源割当最適化モジュール２２は、階層レベルごとのキャッシュミス発生回数ではなく、計算ノード３００における処理遅延時間を、セクタの分割比に対応する性能の指標とする。これにより、資源割当最適化モジュール２２は、より適切なセクタの分割比を算出することができる。
【０１２５】
ただし、この例に限定されるものではない。資源割当最適化モジュール２２は、キャッシュミス発生回数を、セクタの分割比に対応する性能の指標としてもよい。または、資源割当最適化モジュール２２は、セクタごとのキャッシュミス発生指標値を、セクタの分割比に対応する性能の指標としてもよい。
【０１２６】
次に、実行フェーズのキャッシュセクタ割当制御モジュール２３（図６、図７）の処理の詳細を説明する。
【０１２７】
［キャッシュセクタ割当制御処理］
図２１は、図１２に示すキャッシュセクタ割当制御処理（Ｓ２２、Ｓ２５）を説明するフローチャート図である。キャッシュセクタ割当制御モジュール２３は、図１３〜図２０で説明した資源割当最適化モジュール２２によって算出されたセクタの分割比とともに、システムコールの発行指示を受け付ける。そして、キャッシュセクタ割当制御モジュール２３は、Ｌ２キャッシュｍ２のシステムコールを発行する（Ｓ５１）。システムコールのパラメータには、セクタごとの最大ｗａｙ数が指定される。
【０１２８】
システムコールの発行に応答して、セクタ構成レジスタドライバ２５は、セクタ構成レジスタの設定依頼を受け付ける（Ｓ５２）。そして、セクタ構成レジスタドライバ２５は、システムコールの引数を解析して、セクタ構成レジスタへの設定値を求める（Ｓ５３）。そして、セクタ構成レジスタドライバ２５は、設定値をセクタ構成レジスタに設定する（Ｓ５４）。これにより、Ｌ２キャッシュｍ２におけるセクタの分割比が変更される。
【０１２９】
図２２は、セクタの分割比の変更例を説明する図である。例えば、図８のタイミングｔ２にて、資源割当最適化モジュール２２は、セクタの分割比「セクタ０：セクタ１＝１：９」を算出する。したがって、キャッシュセクタ割当制御モジュール２３は、セクタ０のウェイ数を１、セクタ１のウェイ数を９に変更するシステムコールを発行する。これにより、ジョブ１、ジョブ２を実行中の計算ノード３００は、Ｌ２キャッシュｍ２のセクタの分割比を、ループ処理Ａ、ループ処理Ｂの処理性能を向上するセクタの分割比に設定することができる。したがって、計算ノード３００は、ループ処理Ａ、ループ処理Ｂの処理の性能を向上させ、ジョブ１、ジョブ２の処理をより高速に実行することができる。
【０１３０】
以上のように、本実施の形態例における情報処理装置（計算ノード３００）は、データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、共有キャッシュメモリのセクタの分割比を変更する制御ユニットと、を有する。そして、制御ユニットは、第１のジョブ、第２のジョブの実行中に、第２のジョブのプログラムの指定に応答して、第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、共有キャッシュメモリの容量とに基づいて、セクタの分割比を算出し、算出したセクタの分割比に変更する。
【０１３１】
これにより、情報処理装置は、ジョブの実行中に、実行中の複数のジョブのデータアクセス量と、搭載するキャッシュメモリのセクタの構成に応じて、複数のジョブに最適なセクタの分割比を算出できる。そして、情報処理装置は、最適なセクタの分割比に基づいて、複数のジョブの処理時の性能を向上させることができる。したがって、情報処理装置は、実行中のジョブがいずれの組み合わせであっても、実行中の複数のジョブに対して、セクタの分割比を最適化することができる。
【０１３２】
また、本実施の形態例における情報処理装置の制御ユニットは、実行中の第１、第２のジョブのデータアクセス量の各データのサイズを、データのアクセス回数に応じた第１の再利用度、第１の再利用度より大きい第２の再利用度ごとに合計した第１、第２のデータアクセス量と、共有キャッシュメモリの、第１、第２の再利用度に対応する第１、第２のセクタの容量と、に基づいてセクタの分割比を算出する。
【０１３３】
これにより、情報処理装置は、実行中の複数のジョブの再利用度別のデータアクセス量の合計を算出することができる。そして、情報処理装置は、再利用度別のデータアクセス量と、共有キャッシュメモリの再利用度に応じた各セクタの容量に基づいて、複数のジョブに最適なセクタの分割比を算出にすることができる。
【０１３４】
また、本実施の形態例における情報処理装置の制御ユニットは、第１、第２のセクタのデータアクセス量と、第１、第２のセクタの容量とに基づいてキャッシュミスの発生回数を算出し、算出したキャッシュミスの発生回数に基づいて、セクタの分割比を算出する。これにより、情報処理装置は、セクタごとのデータアクセス量と、各セクタの容量とに基づいて、キャッシュミスの発生回数を算出することによって、複数のジョブに最適なセクタの分割比を算出することができる。
【０１３５】
また、本実施の形態例における情報処理装置の制御ユニットは、第１、第２のセクタのデータアクセス量と、第１、第２のセクタの容量とに基づいて、第１のセクタのキャッシュミスの発生指標を示す第１の指標値、及び、第２のセクタのキャッシュミスの発生指標を示す第２の指標値を算出し、第１の指標値と第２の指標値に異なる重みを適用して、キャッシュミス発生回数を算出する。これにより、情報処理装置は、セクタごとのデータアクセス量と、各セクタの容量とに基づいて算出したセクタごとのキャッシュミスの発生指標値に基づいて、キャッシュミスの発生回数を算出することができる。また、情報処理装置は、セクタごとに算出したキャッシュミスの発生指標値に、セクタごとに異なる重みを適用することによって、共有キャッシュメモリにおけるキャッシュミスの発生回数を高精度に算出することができる。
【０１３６】
また、本実施の形態例における情報処理装置の共有キャッシュメモリは、複数階層の共有キャッシュメモリである。また、制御ユニットは、第１の階層の共有キャッシュメモリの第１のキャッシュミスの発生回数と、第２の階層の共有キャッシュメモリの第２のキャッシュミスの発生回数とを算出し、第１のキャッシュミスの発生回数と第２のキャッシュミスの発生回数に異なる重みを適用して、処理遅延時間を示す値を算出する。これにより、情報処理装置は、各階層のキャッシュメモリのキャッシュミス回数に、階層ごとに異なる重みを適用することによって、情報処理装置における処理遅延時間を高精度に算出することができる。
【０１３７】
また、本実施の形態例における情報処理装置の制御ユニットは、処理遅延時間を示す値が最少となるセクタの分割比を算出する。これにより、情報処理装置は、情報処理装置で実行される複数のジョブの合計の処理時間を短縮することができる。
【０１３８】
また、本実施の形態例における情報処理装置によると、最適化区間は、ループ処理に対応する。したがって、情報処理装置は、プログラム内の処理のうち、処理時間への影響度が高いループ処理を、セクタの分割比の最適化の対象処理とすることができる。
【０１３９】
また、本実施の形態例における情報処理装置の制御ユニットは、さらに、第２のジョブのプログラムの指定に応答して、変更の前のセクタの分割比に変更する。これにより、情報処理装置は、最適化区間が終了したときに、セクタの分割比をもとに戻すことができる。つまり、情報処理装置は、最適化区間のみを対象として、実行中の複数のジョブに対して最適に、セクタの分割比を変更することができる。
【０１４０】
また、本実施の形態例における情報処理装置によると、共有キャッシュメモリは、１階層、または、複数階層の共有キャッシュメモリであって、セクタの分割比は、それぞれの階層の共有キャッシュメモリのセクタの分割比である。これにより、情報処理装置は、情報処理装置が複数の階層の共有キャッシュメモリを備える場合についても、複数の階層の共有キャッシュメモリそれぞれのセクタの分割比を最適化することができる。
【０１４１】
また、本実施の形態例における情報処理装置の制御ユニットは、プログラムのコンパイル時に、最適化区間のデータアクセス量と、最適化区間を指定するコードとを追加して生成された前記プログラムを取得し、プログラムをジョブとして実行する。これにより、情報処理装置は、ジョブの実行中に、複数のジョブに最適なセクタの分割比を算出可能にする。
【０１４２】
［第２の実施の形態例］
第２の実施の形態例では、情報処理システムは、第１の実施の形態例における構成に加えて、ジョブへの計算ノード３００の割り当ての最適化処理を行う。情報処理システムは、ジョブに、計算ノード３００を割り当てる際に、複数の計算ノード３００のうち、最適な計算ノード３００をジョブに割り当てる。
【０１４３】
図２３は、第２の実施の形態例における、ジョブの計算ノード３００への割り当て処理の概要を説明する図である。図２３の例では、情報処理システムが２つの計算ノード３００−１、３００−２を有する場合を例示する。したがって、図２３の例では、情報処理システムは、２つの計算ノード３００−１、３００−２から、ジョブに割り当てる最適な計算ノード３００を選択する。また、計算ノード３００−１、３００−２が備えるＣＰＵ３１−１、３１−２は、それぞれ２つのＣＰＵコアｃａ−１、ｃｂ−１、ｃａ−２、ｃｂ−２を有する。図２３の例において、計算ノード３００−１のＣＰＵコアｃａ−１は、ジョブ１１を実行中である。また、計算ノード３００−２のＣＰＵコアｃａ−２は、ジョブ１２を実行中である。
【０１４４】
なお、この例では、説明を簡素化するために２つの計算ノード３００−１、３００−２のみを示しているが、情報処理システムは、一般的に、多数の計算ノード３００を有する。したがって、情報処理システムは、多数の計算ノード３００から、ジョブに割り当てる最適な計算ノード３００を選択する。
【０１４５】
制御ノード１００は、新たなジョブ１３を計算ノード３００に割り当てる場合に、ジョブを計算ノード３００−１のＣＰＵコアｃｂ−１、計算ノード３００−２のＣＰＵコアｃｂ−２に、それぞれに割り当てたと仮定した場合における、複数のジョブの処理遅延時間を示す評価値を算出する。そして、制御ノード１００は、計算ノード３００−１、３００−２間の処理遅延時間の分散が小さくなるように、ジョブを計算ノード３００に割り当てる。計算ノード３００−１、３００−２間の処理遅延時間の分散が小さいことは、計算ノード３００−１、３００−２間で、処理遅延時間が均等化されることを示す。一般に、情報処理システム全体処理時間は、複数の計算ノード３００−１、３００−２のうち、最も処理が遅い計算ノードの処理時間に対応する。したがって、計算ノード３００間の処理遅延時間を均等化することにより、複数ジョブを並列に実行する場合における、情報処理システム上の性能低下を抑えることが可能になる。
【０１４６】
このように、制御ノード１００は、情報処理システム内の計算ノード３００間での処理遅延時間の分散が小さくなる、計算ノード３００にジョブを割り当てる。なお、このとき、処理遅延時間は、第１の実施の形態例と同様にして、Ｌ２キャッシュｍ２のセクタの分割比を最適化した場合における処理遅延時間を示す。
【０１４７】
第２の実施の形態例における、計算ノード３００、制御ノード１００、コンパイルノード５００、ファイルサーバ６００のハードウェア構成は、第１の実施の形態例と同様である。第２の実施の形態例における制御ノード１００のジョブスケジューラプログラムｐｒ１は、資源割当最適化モジュール２２に加えて、ＣＰＵコア割当制御モジュール２６（図示せず）を有する。
【０１４８】
図２４は、ＣＰＵコア割当制御モジュール２６の処理を説明するフローチャート図である。制御ノード１００のＣＰＵコア割当制御モジュール２６は、新たに実行する対象のジョブ（以下、新規ジョブと称する）が生じた場合に、新規ジョブを割り当てる計算ノード３００を求める。初めに、ＣＰＵコア割当制御モジュール２６は、運用規約、及び、方針に関する条件にしたがって、情報処理システムが有する計算ノード３００から、新規ジョブに割り当てる計算ノード３００候補の集合を限定する（Ｓ１０１）。
【０１４９】
次に、ＣＰＵコア割当制御モジュール２６は、ＣＰＵ間の通信時間に関する条件にしたがって、新規ジョブに割り当てる計算ノード３００候補の集合を限定する（Ｓ１０２）。このとき、計算ノード３００候補が有するＣＰＵコアのうち、いずれかのＣＰＵコアは、新規ジョブに割り当て可能であるものとする。図２３の例によると、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−１、計算ノード３００−２を候補として限定する。
【０１５０】
次に、ＣＰＵコア割当制御モジュール２６は、新規ジョブのプロセス及びスレッドに基づいて、計算ノード３００候補のうち、目的関数の評価値が最適となる計算ノード３００を求める（Ｓ１０３）。目的関数は、情報処理システムが有する複数の計算ノード３００間の処理遅延時間の分散値を算出する関数である。具体的に、ＣＰＵコア割当制御モジュール２６は、新規ジョブに計算ノード３００−１のＣＰＵコアｃｂ−１、計算ノード３００−２のＣＰＵコアｃｂ−２を割り当てたケースごとの、計算ノード３００間の処理遅延時間の分散値を算出する。処理の詳細については、後述する。そして、ＣＰＵコア割当制御モジュール２６は、工程Ｓ１０３で求めた計算ノード３００を、新規ジョブに割り当てる（Ｓ１０４）。
【０１５１】
次に、図２４の工程Ｓ１０３の処理の詳細を説明する。ＣＰＵコア割当制御モジュール２６は、計算ノード３００候補ごとに、処理遅延時間の分散を算出する。この例では、計算ノード３００候補は、計算ノード３００−１、３００−２である。したがって、第１のパターンとして、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−１のＣＰＵコアｃｂ−１にジョブを割り当てた場合における、計算ノード３００−１、３００−２それぞれの処理遅延時間を示す値を算出する。そして、ＣＰＵコア割当制御モジュール２６は、算出した、計算ノード３００−１、３００−２間における処理遅延時間の分散を算出する。
【０１５２】
そして、第２のパターンとして、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−２のＣＰＵコアｃｂ−２にジョブを割り当てた場合における、計算ノード３００−１、３００−２それぞれの処理遅延時間を示す値を算出する。そして、ＣＰＵコア割当制御モジュール２６は、算出した、計算ノード３００−１、３００−２間における処理遅延時間の分散を算出する。
【０１５３】
そして、ＣＰＵコア割当制御モジュール２６は、第１のパターンと、第２のパターンとから、処理遅延時間の分散が小さくなるパターンを算出する。そして、ＣＰＵコア割当制御モジュール２６は、処理遅延時間の分散が小さくなるパターンの計算ノード３００−１、３００−２を、ジョブに割り当てる。
【０１５４】
より具体的に、１つのパターンにおける、処理遅延時間の分散の算出処理を説明する。この例では、計算ノード３００−１のＣＰＵコアｃｂ−１（第１のパターン）にジョブを割り当てた場合における、処理遅延時間を示す値の算出処理を説明する。ＣＰＵコア割当制御モジュール２６は、新規ジョブに、計算ノード３００−１を割り当てた場合における、キャッシュミス発生回数Ｍ（１）、Ｍ（２）を算出する。キャッシュ発生回数Ｍ（１）、Ｍ（２）の算出方法は、第１の実施の形態例と同様である。なお、このとき、キャッシュ発生回数Ｍ（１）、Ｍ（２）は、計算ノード３００−１のキャッシュメモリのセクタの分割比が最適化された状態における値である。計算ノード３００−１のキャッシュミス発生回数Ｍ（１）、Ｍ（２）を、キャッシュミス発生回数Ｍ（１，１）、Ｍ（１，２）とする。
【０１５５】
また、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−２における、キャッシュミス発生回数Ｍ（１）、Ｍ（２）を算出する。計算ノード３００−２のキャッシュミス発生回数Ｍ（１）、Ｍ（２）を、キャッシュミス発生回数Ｍ（２，１）、Ｍ（２，２）とする。
【０１５６】
そして、ＣＰＵコア割当制御モジュール２６は、第１の実施の形態例と同様にして、計算ノード３００−１、３００−２ごとに、キャッシュミス発生回数に基づいて、処理遅延時間Ｄ（ｉ）を算出する。変数ｉは、計算ノードを示す。処理遅延時間Ｄ（ｉ）を算出する計算式は、次の式４のとおりである。式４における、変数Ｐ（ノード番号，Ｌ）（＝Ｐ（ｉ，１）、Ｐ（ｉ，２））は、設計データ等に基づいて予め、指定される。つまり、式４によると、計算ノードごとに、異なる係数Ｐが与えられる。
Ｄ（ｉ）＝Ｐ（ｉ，１）＊Ｍ（ｉ，１）＋Ｐ（ｉ，２）＊Ｍ（ｉ，２）…式４
これにより、ＣＰＵコア割当制御モジュール２６は、第１のパターンにおける、計算ノード３００−１、３００−２それぞれの処理遅延時間Ｄ（１）、Ｄ（２）を算出する。そして、ＣＰＵコア割当制御モジュール２６は、処理遅延時間Ｄ（１）、Ｄ（２）の分散を算出する。ＣＰＵコア割当制御モジュール２６は、処理遅延時間Ｄ（ｉ）の平均値Ｄを入力として、次の式５にしたがって、計算ノード間の処理遅延時間の分散を算出する。式５における変数ｋは、計算ノード３００の数を示す。この例では、「ｋ＝２」である。
【０１５７】
ｋ
（１／ｋ）＊Σ（Ｄ（ｉ）−Ｄ）＾２  …式５
ｊ=1
これにより、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−１のＣＰＵコアｃｂ−１をジョブに割り当てた場合（第１のパターン）における処理遅延時間の分散を算出する。同様にして、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−２のＣＰＵコアｃｂ−２をジョブに割り当てた場合（パターン２）における処理遅延時間の分散を算出する。そして、ＣＰＵコア割当制御モジュール２６は、計算ノード３００−１（第２のパターン）、３００−２（パターン２）のうち、処理遅延時間の分散が小さい計算ノードを、新規ジョブに割り当てる。
【０１５８】
以上のように、本実施の形態例における情報処理システムによると、複数の計算ノード３００から、新規ジョブを割り当てる最適な計算ノード３００を選出することができる。このとき、情報処理システムは、複数の計算ノード３００の間で、処理遅延時間の分散が最少となる計算ノード３００を新規ジョブに割り当てる。したがって、情報処理システムは、新規ジョブを、最適な計算ノード３００に割り当てることによって、情報処理システム全体におけるジョブの実行時間を短くすることができる。
【０１５９】
［他の実施の形態例]
本実施の形態例では、計算ノード３００のＣＰＵ３１が、共有キャッシュメモリとして、Ｌ２キャッシュｍ２のみを有する場合を例示した。本実施の形態例における情報処理システムは、ＣＰＵ３１がＬ２キャッシュｍ２に加えて、さらに、Ｌ３キャッシュを有する場合にも、適用可能である。この場合、本実施の形態例における情報処理システムは、第１の実施の形態例に示す処理を適用することにより、Ｌ２キャッシュｍ２、及び、Ｌ３キャッシュにおける最適なセクタの分割比を算出可能になる。
【０１６０】
また、本実施の形態例における情報処理システムは、ＣＰＵ３１が、各ＣＰＵコアに固有のＬ１キャッシュ及びＬ２キャッシュと、各ＣＰＵコアが共通して使用するＬ３キャッシュを有する場合についても適用可能である。この場合、本実施の形態例における情報処理システムは、第１の実施の形態例に示す処理を適用することにより、Ｌ３キャッシュにおける最適なセクタの分割比を算出可能になる。
【０１６１】
また、本実施の形態例おけるＬ１キャッシュがセクタ機能を備えていない場合を例示した。ただし、Ｌ１キャッシュがセクタ機能を備えている場合、本実施の形態例における情報処理システムは、Ｌ１キャッシュのセクタの分割比の最適化にも有効である。
【０１６２】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１６３】
（付記１）
データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、
前記共有キャッシュメモリのセクタの分割比を変更する制御ユニットと、を有し、
前記制御ユニットは、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応じて、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記共有キャッシュメモリの容量とに基づいて、前記セクタの分割比を算出し、前記算出したセクタの分割比に変更する情報処理装置。
【０１６４】
（付記２）
付記１において、
前記制御ユニットは、前記実行中の第１、第２のジョブの前記データアクセス量の各データの前記サイズを、前記データの前記アクセス回数に応じた第１の再利用度、前記第１の再利用度より大きい第２の再利用度ごとに合計した前記第１、第２のデータアクセス量と、前記共有キャッシュメモリの、前記第１、第２の再利用度に対応する第１、第２のセクタの容量と、に基づいて前記セクタの分割比を算出する情報処理装置。
【０１６５】
（付記３）
付記２において、
前記制御ユニットは、前記第１、第２のセクタのデータアクセス量と、前記第１、第２のセクタの容量とに基づいてキャッシュミスの発生回数を算出し、前記算出したキャッシュミスの発生回数に基づいて、前記セクタの分割比を算出する情報処理装置。
【０１６６】
（付記４）
付記３において、
前記制御ユニットは、前記第１、第２のセクタのデータアクセス量と、前記第１、第２のセクタの容量とに基づいて、前記第１のセクタのキャッシュミスの発生指標を示す第１の指標値、及び、前記第２のセクタのキャッシュミスの発生指標を示す第２の指標値を算出し、前記第１の指標値と前記第２の指標値に異なる重みを適用して、前記キャッシュミス発生回数を算出する情報処理装置。
【０１６７】
（付記５）
付記３または４において、
前記共有キャッシュメモリは、複数階層の共有キャッシュメモリであって、
前記制御ユニットは、第１の階層の共有キャッシュメモリの第１のキャッシュミスの発生回数と、第２の階層の共有キャッシュメモリの第２のキャッシュミスの発生回数とを算出し、前記第１のキャッシュミスの発生回数と第２のキャッシュミスの発生回数に異なる重みを適用して、処理遅延時間を示す値を算出する情報処理装置。
【０１６８】
（付記６）
付記１乃至５のいずれかにおいて、
前記制御ユニットは、処理遅延時間を示す値が最少となるセクタの分割比を算出する情報処理装置。
【０１６９】
（付記７）
前記１乃至６のいずれかにおいて、
前記最適化区間は、ループ処理に対応する情報処理装置。
【０１７０】
（付記８）
付記１乃至７のいずれかにおいて、
前記制御ユニットは、さらに、前記第２のジョブのプログラムの指定に応答して、前記変更する前のセクタの分割比に変更する情報処理装置。
【０１７１】
（付記９）
付記１乃至８のいずれかにおいて、
前記共有キャッシュメモリは、１階層、または、複数階層の共有キャッシュメモリであって、
前記セクタの分割比は、それぞれの階層の共有キャッシュメモリのセクタの分割比である情報処理装置。
【０１７２】
（付記１０）
付記１乃至９のいずれかにおいて、さらに、
第１、第２の演算ユニットを有し、
前記第１の演算ユニットは前記第１のジョブを実行し、
前記第２の演算ユニットは前記第２のジョブを実行する情報処理装置。
【０１７３】
（付記１１）
付記１乃至１０のいずれかにおいて、
前記制御ユニットは、プログラムのコンパイル時に、前記最適化区間のデータアクセス量と、前記最適化区間を指定するコードとを追加して生成された前記プログラムを取得し、前記プログラムをジョブとして実行する情報処理装置。
【０１７４】
（付記１２）
データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリと、
前記共有キャッシュメモリのセクタの分割比を変更する第１の制御ユニットと、を有する第１の情報処理装置と、
前記共有セクタの分割比を算出する第２の制御ユニットを有する第２の情報処理装置と、を有し、
前記第１の情報処理装置の前記第１の制御ユニットは、第１のジョブ、第２のジョブの実行中に前記第２のジョブのプログラムの指定に応じて、前記第２の情報処理装置に通知し、
前記第２の情報処理装置の前記第２の制御ユニットは、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記共有キャッシュメモリの容量とに基づいて、前記セクタの分割比を算出して、前記第１の情報処理装置に通知し、
前記第１の情報処理装置の前記第２の制御ユニットは、前記セクタの分割比を、前記通知されたセクタの分割比に変更する情報処理システム。
【０１７５】
（付記１３）
付記１２において、
前記第２の情報処理装置の前記第２の制御ユニットは、前記実行中の第１、第２のジョブの前記データアクセス量の各データの前記サイズを、前記データの前記アクセス回数に応じた第１の再利用度、前記第１の再利用度より大きい第２の再利用度ごとに合計した前記第１、第２のデータアクセス量と、前記共有キャッシュメモリの、前記第１、第２の再利用度に対応する第１、第２のセクタの容量と、に基づいて前記セクタの分割比を算出する情報処理システム。
【０１７６】
（付記１４）
付記１３において、
前記第２の情報処理装置の前記第２の制御ユニットは、前記第１、第２のセクタのデータアクセス量と、前記第１、第２のセクタの容量とに基づいてキャッシュミスの発生回数を算出し、前記算出したキャッシュミスの発生回数に基づいて、前記セクタの分割比を算出する情報処理システム。
【０１７７】
（付記１５）
第２の情報処理装置が、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応じて、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリの容量とに基づいて、前記共有キャッシュメモリのセクタの分割比を算出する算出工程と、
前記セクタの分割比を、前記算出したセクタの分割比に変更する変更工程と、
を有する情報処理装置の制御方法。
【０１７８】
（付記１６）
付記１５において、
第１の情報処理装置が、前記第１、第２のジョブを実行し、前記第２のジョブのプログラムの指定に応じて、前記第２の情報処理装置に通知する通知工程を、さらに有し、
前記変更工程は、前記第１の情報処理装置が、前記第１の情報処理装置の前記セクタの分割比を、前記第２の情報処理装置から通知される、前記算出したセクタの分割比に変更する情報処理装置の制御方法。
【０１７９】
（付記１７）
付記１５または１６において、
前記算出工程は、前記実行中の第１、第２のジョブの前記データアクセス量の各データの前記サイズを、前記データの前記アクセス回数に応じた第１の再利用度、前記第１の再利用度より大きい第２の再利用度ごとに合計した前記第１、第２のデータアクセス量と、前記共有キャッシュメモリの、前記第１、第２の再利用度に対応する第１、第２のセクタの容量と、に基づいて前記セクタの分割比を算出する情報処理装置の制御方法。
【０１８０】
（付記１８）
第２の情報処理装置が、第１のジョブ、第２のジョブの実行中に、前記第２のジョブのプログラムの指定に応じて、前記第１、第２のジョブがアクセスするデータのサイズ及びアクセス回数を有するデータアクセス量と、前記データの再利用度に応じて分割されるセクタ機能を備える共有キャッシュメモリの容量とに基づいて、前記共有キャッシュメモリのセクタの分割比を算出し、
前記セクタの分割比を、前記算出したセクタの分割比に変更する、
処理をコンピュータに実行させる情報処理装置の制御プログラム。
【０１８１】
（付記１９）
付記１８において、
前記第１の情報処理装置が、前記第１、第２のジョブを実行し、前記第２のジョブのプログラムの指定に応じて、さらに、前記第２の情報処理装置に通知し、
前記第１の情報処理装置が、前記第１の情報処理装置の前記セクタの分割比を、前記第２の情報処理装置から通知される前記算出したセクタの分割比に変更する、
処理をコンピュータに実行させる情報処理装置の制御プログラム。
【０１８２】
（付記２０）
付記１８または１９において、
前記第２の情報処理装置は、前記実行中の第１、第２のジョブの前記データアクセス量の各データの前記サイズを、前記データの前記アクセス回数に応じた第１の再利用度、前記第１の再利用度より大きい第２の再利用度ごとに合計した前記第１、第２のデータアクセス量と、前記共有キャッシュメモリの、前記第１、第２の再利用度に対応する第１、第２のセクタの容量と、に基づいて前記セクタの分割比を算出する、
処理をコンピュータに実行させる情報処理装置の制御プログラム。
【符号の説明】
【０１８３】
１００：制御ノード、１１：ＣＰＵ、１２：メモリ、１３：ＮＩＣ、２１：変数別キャッシュ使用状況の解析モジュール、２２：資源割当最適化モジュール、２３：キャッシュセクタ割当制御モジュール、３００：計算ノード、３１：ＣＰＵ、３２：メモリ、３３：ＮＩＣ、５００：コンパイルノード、６００：ファイルサーバ
【図１】
2015222477.tif 000003
【図２】
2015222477.tif 000004
【図３】
2015222477.tif 000005
【図４】
2015222477.tif 000006
【図５】
2015222477.tif 000007
【図６】
2015222477.tif 000008
【図７】
2015222477.tif 000009
【図８】
2015222477.tif 000010
【図９】
2015222477.tif 000011
【図１０】
2015222477.tif 000012
【図１１】
2015222477.tif 000013
【図１２】
2015222477.tif 000014
【図１３】
2015222477.tif 000015
【図１４】
2015222477.tif 000016
【図１５】
2015222477.tif 000017
【図１６】
2015222477.tif 000018
【図１７】
2015222477.tif 000019
【図１８】
2015222477.tif 000020
【図１９】
2015222477.tif 000021
【図２０】
2015222477.tif 000022
【図２１】
2015222477.tif 000023
【図２２】
2015222477.tif 000024
【図２３】
2015222477.tif 000025
【図２４】
2015222477.tif 000026