(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024014123
(43)【公開日】2024-02-01
(54)【発明の名称】演算処理装置及び演算処理方法
(51)【国際特許分類】
G06F 12/0862 20160101AFI20240125BHJP
【FI】
G06F12/0862
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022116734
(22)【出願日】2022-07-21
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】小田嶋 哲哉
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205JJ13
5B205MM05
5B205NN92
5B205UU32
5B205UX05
5B205VV03
5B205VV04
(57)【要約】
【課題】演算の処理性能を向上させる演算処理装置及び演算処理方法を提供する。
【解決手段】複数のプリフェッチャは、キャッシュ毎に配置され且つデータアクセス予測アルゴリズムがそれぞれ異なる。精度監視部102は、キャッシュ毎にプリフェッチャそれぞれによるプリフェッチのミス率を監視し、ミス率を基にプリフェッチを行わせるプリフェッチャを決定する。帯域監視部103は、各キャッシュ間又はキャッシュとメインメモリと間の読み込み方向の各バスのいずれかもしくは全ての使用率を監視し、使用率が低い低使用率バスのコア側のキャッシュに対応するプリフェッチャに確度の高いプリフェッチ及び確度の低いプリフェッチを発行させ、使用率が高い高使用率バスのコア側のキャッシュに対応するプリフェッチャに確度の低いプリフェッチの発行を停止させて確度の高いプリフェッチを発行させる。
【選択図】
図2
【特許請求の範囲】
【請求項1】
コアとメインメモリとの間に階層化されて配置された複数のキャッシュと、
前記キャッシュ毎に、複数配置され且つデータアクセス予測アルゴリズムがそれぞれ異なるプリフェッチャと、
前記キャッシュ毎に、前記プリフェッチャそれぞれによるプリフェッチのミス率を監視し、前記ミス率を基にプリフェッチを行わせるプリフェッチャを決定する精度監視部と、
各前記キャッシュ間又は前記キャッシュと前記メインメモリと間の読み込み方向の各バスのいずれかもしくは全ての使用率を監視し、前記使用率が低い低使用率バスの前記コア側の前記キャッシュに対応する前記プリフェッチャに確度の高いプリフェッチ及び確度の低いプリフェッチを発行させ、前記使用率が高い高使用率バスの前記コア側の前記キャッシュに対応する前記プリフェッチャに前記確度の低いプリフェッチの発行を停止させて前記確度の高いプリフェッチを発行させる帯域監視部と
を備えたことを特徴とする演算処理装置。
【請求項2】
前記精度監視部は、前記キャッシュ毎の各前記プリフェッチャの過去の所定期間のプリフェッチ結果を保持し、前記所定期間にアクセス対象となったデータの情報及び前記プリフェッチ結果を基に各前記プリフェッチャの前記ミス率を算出することを特徴とする請求項1に記載の演算処理装置。
【請求項3】
前記精度監視部は、前記ミス率が最も低い低ミス率プリフェッチャにプリフェッチを行わせると決定し、
前記帯域監視部は、前記使用率が低い低使用率バスの前記コア側の前記キャッシュに対応する前記低ミス率プリフェッチャに前記確度の高いプリフェッチ及び前記確度の低いプリフェッチを発行させ、前記使用率が高い高使用率バスの前記コア側の前記キャッシュに対応する前記低ミス率プリフェッチャに前記確度の低いプリフェッチの発行を停止して前記確度の高いプリフェッチを発行させる
ことを特徴とする請求項1に記載の演算処理装置。
【請求項4】
前記コアは、複数存在し且つそれぞれが複数のスレッドを動作させ、
前記ミス率を基に移動させるスレッド及び移動先のコアを決定して、前記移動させるスレッドを前記移動先のコアに移動させる統合監視部をさらに備えた
ことを特徴とする請求項1に記載の演算処理装置。
【請求項5】
前記統合監視部は、前記ミス率及び前記使用率を基に前記移動させるスレッド及び前記移動先のコアを決定することを特徴とする請求項4に記載の演算処理装置。
【請求項6】
前記コアから実行したプログラムに対するプログラムカウンタを取得して、前記精度監視部により監視される前記ミス率及び前記帯域監視部により監視される前記使用率と前記プログラムカウンタとを比較して、前記プログラムと前記ミス率及び前記使用率との関係情報を生成し、生成した前記関係情報を出力する情報管理部をさらに備えたことを特徴とする請求項1に記載の演算処理装置。
【請求項7】
コアとメインメモリとの間に階層化されて配置された複数のキャッシュ、及び、前記キャッシュ毎に、複数配置され且つデータアクセス予測アルゴリズムがそれぞれ異なるプリフェッチャを有する演算処理装置に、
前記キャッシュ毎に、前記プリフェッチャそれぞれによるプリフェッチのミス率を監視させ、
前記ミス率を基にプリフェッチを行わせるプリフェッチャを決定させ、
各前記キャッシュ間又は前記キャッシュと前記メインメモリと間の読み込み方向の各バスのいずれかもしくは全ての使用率を監視させ、
前記使用率が低い低使用率バスの前記コア側の前記キャッシュに対応する前記プリフェッチャに確度の高いプリフェッチ及び確度の低いプリフェッチを発行させ、
前記使用率が高い高使用率バスの前記コア側の前記キャッシュに対応する前記プリフェッチャに前記確度の低いプリフェッチの発行を停止させて前記確度の高いプリフェッチを発行させる
ことを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置及び演算処理方法に関する。
【背景技術】
【0002】
近年、プロセッサの動作周波数が飛躍的に向上している。これに対し、メインメモリとして一般的に使用されるDRAM(Dynamic Random Access Memory)の動作速度の向上は低調である。そこで、プロセッサの性能を十分に活かすためにデータ転送を効率化するアーキテクチャの研究が盛んである。情報処理装置では、一般にメインメモリよりもデータアクセスが高速なキャッシュメモリをCPU(Central Processing Unit)に配置する。そして、このキャッシュメモリ上に、最近参照したデータを置くことによって、メインメモリ参照によるレイテンシの低減が図られる。
【0003】
さらに、キャッシュ管理の技術として、プログラムのメモリアクセスの規則性から、実行中の演算において将来用いられるデータを予めメインメモリからキャッシュにコピーするハードウェアプリフェッチと呼ばれる機能が存在する。プリフェッチを行なう主体はプリフェッチャ(Prefetcher)と呼ばれる。プリフェッチャが最適なプリフェッチを発行することで、コアがデータを利用するタイミングにメモリまで読み込みに行くコストを削減することができる。従来、1つのキャッシュに対して、1種類のプリフェッチャが配置される。
【0004】
一般的に、プリフェッチを発行する距離は可変である。プリフェッチを発行する距離とは、次のプリフェッチの対象とするデータまでのアドレス間隔であり、例えば、隣のラインのデータを対象とする場合や、280byte先のデータを対象とする場合など様々である。
【0005】
これに対して、プリフェッチにおけるデータアクセスパターンの推定のアルゴリズムは固定である。プリフェッチのアルゴリズムには、例えば、StreamプリフェッチングやStrideプリフェッチングといった様々なアルゴリズムが存在する。Streamプリフェッチングは、連続したアドレス領域へのアクセスに着目して、連続したアドレスのうち所定の距離進んだアドレスの値をプリフェッチするアルゴリズムである。また、Strideプリフェッチングは、周期的なアドレス間隔でのアクセスに着目して、アクセスしたアドレスに所定のストライドを加算してプリフェッチするアルゴリズムである。例えば、プリフェッチのデータアクセスパターンの推定のアルゴリズムとしてStrideプリフェッチングが与えられたプリフェッチャは、演算の種類に関わらずStrideプリフェッチングを用いてプリフェッチを行なう。
【0006】
なお、プリフェッチに関する技術として、1つ又は複数のプリフェッチングストラテジにしたがって、データの行をメモリからキャッシュにプリフェッチする技術が提案されている。また、2つ以上のロード命令が同一のキャッシュページからのデータを要求しそうであることを示すプリフェッチヒントに基づいて、プリフェッチを行なう技術が提案されている。また、アクセスパターンを基に複数の選択可能なプリフェッチ戦略の中から一つを選択して、選択したプリフェッチ戦略にしたがってプリフェッチを実行する技術が提案されている。他にも、バス帯域幅に基づいてメモリからキャッシュへのデータのプリフェッチの速度を制御する技術が提案されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特表2010-532904号公報
【特許文献2】特開2008-159057号公報
【特許文献3】米国特許出願公開第2015/0121038号明細書
【特許文献4】米国特許出願公開第2019/0079871号明細書
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、プログラムによっては、様々な特性を有する演算をそれぞれ実行する場合が考えられる。特性の異なる演算では、それぞれの特性に応じた動作方針のプリフェッチを用いることで、プリフェッチの精度を向上させることができる。これに対して、従来はプリフェッチの動作方針は固定であるため、様々な特性を有する演算を実行するプログラムでは、プリフェッチの精度が十分得られず、プログラム実行の性能低下を招くおそれがある。また、プリフェッチを積極的に発行することで、データがキャッシュに存在する確率を向上させることができるが、多数のプリフェッチを発行した場合、キャッシュ間またはメインメモリとキャッシュとの間のデータバスの帯域を圧迫し、より優先度の高いデータ転送を阻害してしまう。これもプログラム実行の性能低下を招く要因となる。したがって、演算の処理性能を向上させることは困難である。
【0009】
また、1つ又は複数のプリフェッチングストラテジにしたがってプリフェッチを実行する技術では、使用するプリフェッチングストラテジは固定であり、演算の特性に合った動作方針でプリフェッチを行なうことは困難である。また、プリフェッチヒントに基づいてプリフェッチを行なう技術では、適当なタイミングでプリフェッチを発行することは可能となるが、使用するプリフェッチングストラテジは固定であり、演算の特性に合った動作方針でプリフェッチを行なうことは困難である。また、アクセスパターンを基に複数の選択可能なプリフェッチ戦略の中から一つを選択する技術では、プリフェッチの発行数を適切に調整することは困難である。また、バス帯域幅に基づいてプリフェッチの速度を制御する技術では、算の特性に合った動作方針でプリフェッチを行なうことは困難である。したがって、いずれの技術を用いても、演算の処理性能を向上させることは困難である。
【0010】
開示の技術は、上記に鑑みてなされたものであって、演算の処理性能を向上させる演算処理装置及び演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
本願の開示する演算処理装置及び演算処理方法の一つの態様において、複数のキャッシュが、コアとメインメモリとの間に階層化されて配置される。複数のプリフェッチャは、前記キャッシュ毎に配置され且つデータアクセス予測アルゴリズムがそれぞれ異なる。精度監視部は、前記キャッシュ毎に前記プリフェッチャそれぞれによるプリフェッチのミス率を監視し、前記ミス率を基にプリフェッチを行わせるプリフェッチャを決定する。帯域監視部は、各前記キャッシュ間又は前記キャッシュと前記メインメモリと間の読み込み方向の各バスのいずれかもしくは全ての使用率を監視する。そして、帯域監視部は、前記使用率が低い低使用率バスの前記コア側の前記キャッシュに対応する前記プリフェッチャに確度の高いプリフェッチ及び確度の低いプリフェッチを発行させる。また、帯域監視部は、前記使用率が高い高使用率バスの前記コア側の前記キャッシュに対応する前記プリフェッチャに前記確度の低いプリフェッチの発行を停止させて前記確度の高いプリフェッチを発行させる。
【発明の効果】
【0012】
1つの側面では、本発明は、演算の処理性能を向上させることができる。
【図面の簡単な説明】
【0013】
【
図1】
図1は、情報処理装置の全体構成を示す概略図である。
【
図2】
図2は、実施例1に係るCPUにおけるL1キャッシュ及びL2キャッシュに対する制御機構の詳細を示す図である。
【
図3】
図3は、精度監視部によるプリフェッチャ毎のミス率の算出結果の一例を示す図である。
【
図4】
図4は、プリフェッチャ選択の動作の一例を示す図である。
【
図5】
図5は、実施例1に係るCPUにおけるプリフェッチを用いた演算処理のフローチャートである。
【
図6】
図6は、実施例2に係るCPUにおけるL1キャッシュ及びL2キャッシュに対する制御機構の詳細を示す図である。
【
図7】
図7は、精度監視部及び帯域監視部で得られるデータの一例を示す図である。
【
図8】
図8は、実施例3に係るCPUにおけるL1キャッシュ及びL2キャッシュに対する制御機構の詳細を示す図である。
【発明を実施するための形態】
【0014】
以下に、本願の開示する演算処理装置及び演算処理方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理方法が限定されるものではない。
【実施例0015】
図1は、情報処理装置の全体構成を示す概略図である。
図1に示すように、情報処理装置1は、コア11、L1キャッシュ12、L2キャッシュ13、LLC(Low Level Cache)14、メインメモリ15、補助記憶装置16、表示装置17及び入力装置18を有する。コア11は、L1キャッシュ12、L2キャッシュ13、LLC14、メインメモリ15、補助記憶装置16、表示装置17及び入力装置18のそれぞれとバスで接続される。コア11、L1キャッシュ12、L2キャッシュ13及びLLC14は、例えば、演算処理装置であるCPU10に搭載される。
【0016】
コア11は、補助記憶装置16に格納された各種プログラムなどを読み出してメインメモリ15に展開して、L1キャッシュ12、L2キャッシュ13、LLC14及びメインメモリ15に格納されたデータを用いて演算を実行する。
【0017】
L1キャッシュ12は、動作速度が速く且つL2キャッシュ13及びLLC14と比べて容量の小さいキャッシュメモリであり、コア11によるデータアクセス時に最初に読み込まれるキャッシュメモリである。L1キャッシュ12は、例えば、SRAM(Static Random Access Memory)である。
【0018】
L2キャッシュ13は、動作速度が速く且つ一般的にL1キャッシュ12よりも容量の大きいキャッシュメモリであり、コア11によるデータアクセス時に、L1キャッシュ12でキャッシュミスが発生した場合に次に読み込まれるキャッシュメモリである。L2キャッシュ13も、例えば、SRAMである。
【0019】
LLC14は、動作速度が速く且つ一般的にL2キャッシュ13よりも容量の大きいキャッシュメモリであり、コア11によるデータアクセス時に、L2キャッシュ13でキャッシュミスが発生した場合に次に読み込まれるキャッシュメモリである。LLC14は、L3キャッシュと呼ばれる場合もある。LLC14も、例えば、SRAMである。
【0020】
ここで、本実施例では、情報処理装置1が、L1キャッシュ12、L2キャッシュ13及びLLC14という3つのキャッシュメモリを有する場合で説明するが、キャッシュメモリの階層の数はこれに限らない、例えば、情報処理装置1は、L2キャッシュ13やLLC14を有さなくても良いし、4つ以上の階層を有してもよい。
【0021】
メインメモリ15は、L1キャッシュ12、L2キャッシュ13及びLLC14に比べて動作速度が遅く且つ大容量の主記憶装置である。メインメモリ15は、コア11が演算に用いるデータが格納される。メインメモリ15は、L1キャッシュ12、L2キャッシュ13及びLLC14のいずれにもアクセス対象のデータが存在しない場合にコア11からのアクセスを受ける。メインメモリ15は、例えば、DRAM(Dynamic Random Access Memory)である。
【0022】
補助記憶装置16は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などである。補助記憶装置16には、OS(Operating System)や演算を行なうためのプ各種ログラムが格納される。
【0023】
表示装置17は、例えば、モニタやディスプレイなどである。表示装置17は、コア11による演算結果を表示することで利用者へ情報の提示を行なう。入力装置18は、例えば、キーボードやマウスなどである。利用者は、表示装置17に表示された画面を参照しつつ、入力装置18を用いて情報処理装置1へのデータや命令の入力を行なう。表示装置17及び入力装置18は、1つのハードウェアとして構成されてもよい。
【0024】
図2は、実施例1に係るCPUにおけるL1キャッシュ及びL2キャッシュに対する制御機構の詳細を示す図である。
図2では、L1キャッシュ12、L2キャッシュ13及びLLC14の階層構造を分かり易くするため、それぞれが多段で接続されるように示した。実際の接続は、
図1に示したようにコア11から延びるバスにそれぞれが接続される。
【0025】
図2に示すように、CPU10は、L1キャッシュ12及びL2キャッシュ13毎に、それぞれのプリフェッチ用の制御機構として、セレクタ101、精度監視部102及びプリフェッチャ111~113を有する。加えて、CPU10は、L1キャッシュ12及びL2キャッシュ13に対するプリフェッチ用の制御をまとめて行う帯域監視部103を有する。ここで、本実施例では、一例として、L1キャッシュ12及びL2キャッシュ13に対してプリフェッチ用の制御機構を配置したが、LLC14などの他のキャッシュについても同様の制御機構を配置してもよい。
【0026】
プリフェッチャ111~113は、それぞれ異なるデータアクセス予測アルゴリズムによりプリフェッチを行なうハードウェアプリフェッチャである。プリフェッチャ111~113のそれぞれを区別しない場合、プリフェッチャ110と呼ぶ。プリフェッチャ110は、プリフェッチしたデータを格納するプリフェッチバッファを有する。ここで、
図2では、3つのプリフェッチャ110を記載したが、異なるデータアクセス予測アルゴリズムを有するプリフェッチャ110の数は2つ以上であればいくつであってもよい。
【0027】
プリフェッチにおけるデータアクセスパターンの推定を行うためのデータアクセス予測アルゴリズムには、例えば、Streamプリフェッチング、Strideプリフェッチング及びTemporalプリフェッチングなどが存在する。例えば、プリフェッチャ111はStreamプリフェッチングを用いてプリフェッチを行ない、プリフェッチャ112はStrideプリフェッチングを用いてプリフェッチを行ない、プリフェッチャ113はTemporalプリフェッチングを用いてプリフェッチを行なう。以下に代表的なデータアクセス予測アルゴリズムについて説明する。
【0028】
Streamプリフェッチングを用いた場合の、プリフェッチャ110の動作について説明する。プリフェッチャ110は、あるアドレスブロックAでキャッシュミスが検出された場合、アドレスブロックAに続くアドレスブロックA+1をプリフェッチし、自己が有するプリフェッチバッファにデータを保存する。ここで、ハードウェアのパラメータによっては、プリフェッチャ110は、ミスの検出時にアドレスブロックAに続く4つのアドレスブロックA+1~A+4のデータを、同時にプリフェッチバッファに保存してもよい。その後、プリフェッチバッファにあるデータへのアクセスが発生した場合、プリフェッチャ110は、例えばL1キャッシュ12にデータを移動して、以降更に先のアドレスブロックA+2、A+3、・・・を順番にプリフェッチしていきつつデータをプリフェッチバッファに保存していく。
【0029】
次に、Strideプリフェッチングを用いた場合の、プリフェッチャ110の動作について説明する。連続したメモリアクセスがδアドレスブロック先である場合、アドレスブロックAでキャッシュミスを検出した場合に、プリフェッチャ110は、アドレスブロックA+1のStreamプリフェッチングでは対応ができない。そこで、プリフェッチャ110は、アクセスが等間隔であることを検出した場合、アドレスブロックAでキャッシュミスを検出した際にアドレスブロックA+δをプリフェッチしてプリフェッチバッファにデータを保存する。この場合も、パラメータによっては、プリフェッチャ110は、複数のアドレスブロックを同時にプリフェッチの対象としてもよい。以降のデータアクセスでプリフェッチバッファにデータが存在している場合、プリフェッチャ110は、例えばL1キャッシュ12にデータを移し、さらにアドレスブロックA+δ*2をプリフェッチしてプリフェッチバッファにデータを保存する。ここで、プリフェッチャ110は、δ=1とすることで、Strideプリフェッチングを用いて、Streamプリフェッチングと同等の動作をすることも可能である。
【0030】
次に、Temporalプリフェッチングを用いた場合の、プリフェッチャ110の動作について説明する。アクセスパターン履歴中で、一見ランダムに見えるアクセスパターン中に何度も繰り返されるデータアクセスパターンを抽出する事ができた場合、プリフェッチャ110は、その抽出したパターンでプリフェッチを行う。例えば、「N,A,B,C,E,G,H,A,B,C,I,J,K,A,B,C,L,M,N,O,A,B,C,...」といったアクセスパターンの場合、プリフェッチャ110は、A,B,Cが繰り返されると判定して、アドレスブロックA、B、Cの順にプリフェッチを行なう。
【0031】
さらに、L1キャッシュ12を例に、プリフェッチャ110の動作を説明する。プリフェッチャ111~113の中から、セレクタ101によって実際にプリフェッチを行なうプリフェッチャ110が選択される。
【0032】
また、プリフェッチャ110には、積極的プリフェッチまたは保守的プリフェッチのいずれの動作モードでプリフェッチを行なうかの指示の入力を帯域監視部103から受ける。そして、各プリフェッチャ110は、帯域監視部103により指定された動作モードでプリフェッチを行なう。
【0033】
積極的プリフェッチとは、確度の高いプリフェッチに加えて確度の低いプリフェッチも発行する動作モードである。また、保守的プリフェッチとは、確度の低いプリフェッチは発行せず確度の高いプリフェッチを発行する動作モードである。
【0034】
Streamプリフェッチングを用いる場合であれば、例えば、アドレスブロックAについてキャッシュミスが発生した場合、アドレスブロックA+1のデータがヒットする角度が最も高く、その後アドレスブロックA+2、A+3、・・・と続く。そこで、プリフェッチャ110は、保守的プリフェッチの場合、アドレスブロックAに対してキャッシュミスが発生すると、アドレスブロックA+1をプリフェッチの対象とする。これに対して、積極的プリフェッチの場合、プリフェッチャ110は、アドレスブロックA+1~A+4をプリフェッチ対象とする。
【0035】
各プリフェッチャ110は、セレクタ101を介して、コア11によるデータアクセスの情報及びL1キャッシュ12におけるキャッシュミスの情報を取得する。キャッシュミスを検出すると、それぞれのプリフェッチャ110は、自己が使用するデータアクセス予測アルゴリズムにしたがってプリフェッチの対象とするアドレスブロックを算出する。すなわち、プリフェッチャ111~113は、それぞれ異なるデータアクセス予測アルゴリズムを用いてそれぞれがプリフェッチの対象とするアドレスブロックを算出する。
【0036】
その後、セレクタ101により選択されたプリフェッチャ110及び選択されていないプリフェッチャ110のいずれも含む全てのプリフェッチャ110は、算出したアドレスブロックの情報を精度監視部102へ出力する。
【0037】
また、セレクタ101により選択されたプリフェッチャ110は、算出したアドレスブロックからデータを取得して自己が有するプリフェッチバッファにデータを格納する。そして、セレクタ101により選択されたプリフェッチャ110は、データアクセスの対象となったデータが自己のプリフェッチバッファに格納されている場合、セレクタ101を介して自己が保持するデータをL1キャッシュ12へ移す。その後、使用するデータアクセス予測アルゴリズムにしたがって、順次データをプリフェッチする。
【0038】
精度監視部102は、各プリフェッチャ110のそれぞれのプリフェッチミス率を算出するための各種パラメータの情報をレコードとして保持する。例えば、精度監視部102は、パラメータとして、プリフェッチャ110毎のプリフェッチしたアドレス、キャッシュ読み込みアクセス数及びプリフェッチャ110毎のプリフェッチヒット数を保持する。また、精度監視部102は、SMT(Simultaneous Multi-Threading)機能を有する場合、スレッド毎に上述したパラメータを保持する。
【0039】
精度監視部102は、L1キャッシュ12に対してデータの読み込みのアクセスが発生すると、キャッシュ読み込み発生の通知をL1キャッシュ12から受ける。そして、精度監視部102は、キャッシュ読み込みアクセス数を1つインクリメントする。
【0040】
また、精度監視部102は、プリフェッチャ110毎のプリフェッチの対象とするアドレスブロックの算出結果をそれぞれのプリフェッチャ110から取得する。そして、精度監視部102は、プリフェッチャ110毎にプリフェッチされたアドレスブロックを記憶する。ここで、精度監視部102が記憶するアドレスブロックの個数は精度監視部102が有する記憶領域の大きさに依存する。また、精度監視部102は、プリフェッチャ110のプリフェッチ数をカウントして記憶する。
【0041】
そして、L1キャッシュ12にキャッシュミスが発生すると、精度監視部102は、アクセス対象のアドレスブロックを含むキャッシュミスの情報がL1キャッシュ12から入力される。そして、精度監視部102は、キャッシュミスが発生したアドレスブロックと同じアドレスブロックがそれぞれのプリフェッチャ110の過去にプリフェッチされたアドレスブロックのいずれかと一致するか否かを判定する。精度監視部102は、アドレスブロックが一致したプリフェッチャ110については、プリフェッチヒット数を1つインクリメントする。
【0042】
また、精度監視部102は、プリフェッチャ110の選択のタイミングの情報を予め有する。例えば、選択のタイミングは、定期的であっても良いし、キャッシュミスの発生回数が所定数に達した場合であってもよい。プリフェッチャ110の選択のタイミングに達すると、精度監視部102は、プリフェッチャ110毎にキャッシュ読み込みアクセス数からプリフェッチヒット数を減算してその時点でのプリフェッチミスの数を算出する。そして、精度監視部102は、プリフェッチャ110毎のプリフェッチミス数をプリフェッチ数で除算して百分率に直して、プリフェッチャ110毎のミス率を算出する。その後、精度監視部102は、ミス率が最も低いプリフェッチャ110をセレクタ110に通知する。
【0043】
すなわち、精度監視部102は、対応するキャッシュであるL1キャッシュ12におけるプリフェッチャ110それぞれによるプリフェッチのミス率を監視し、ミス率を基にプリフェッチを行わせるプリフェッチャ110を決定する。また、精度監視部102は、L1キャッシュ12の各プリフェッチャ110の過去の所定期間のプリフェッチ結果を保持し、所定期間にアクセス対象となったデータの情報及びプリフェッチ結果を基に各プリフェッチャ110の前記ミス率を算出する。そして、精度監視部102は、ミス率が最も低いプリフェッチャ110である低ミス率プリフェッチャにプリフェッチを行わせると決定する。
【0044】
図3は、精度監視部によるプリフェッチャ毎のミス率の算出結果の一例を示す図である。例えば、
図3のような算出結果130を得た場合、精度監視部102は、プリフェッチャ111のミス率が最も高く、プリフェッチャ113のミス率が最も低いと判定する。その後、精度監視部102は、ミス率が最も低いプリフェッチャ110の情報をセレクタ101に通知する。
【0045】
セレクタ101は、実際にプリフェッチを実行させるプリフェッチャ110の初期値を予め有する。例えば、セレクタ101は、プリフェッチャ111を初期値として有する。セレクタ101は、情報処理装置1の起動直後など精度監視部102からミス率が最も低いプリフェッチャ110の情報が未通知の状態では、初期値で示されるプリフェッチャ110を、実際にプリフェッチを実行させるプリフェッチャ110として選択する。これにより、セレクタ101は、初期値で示されるプリフェッチャ110にL1キャッシュ12に関するプリフェッチを実行させる。
【0046】
プリフェッチャ110の選択のタイミングに達すると、セレクタ101は、精度監視部102からミス率が最も低いプリフェッチャ110の情報の通知を受ける。そして、セレクタ101は、実際にプリフェッチを実行させるプリフェッチャ110として通知されたプリフェッチャ110を選択する。セレクタ101は、その時点でミス率が最も低いプリフェッチャ110にL1キャッシュ12に関するプリフェッチを実行させる。
【0047】
帯域監視部103は、プリフェッチの制御対象となるL1キャッシュ12及びL2キャッシュ13の読み込み方向すなわち上流のバスの使用率を監視する。すなわち、L1キャッシュ12については、帯域監視部103は、L1キャッシュ12とL2キャッシュ13との間のバス121の使用率を監視する。また、L2キャッシュ13については、帯域監視部103は、L2キャッシュ13とLLC14との間のバス122の使用率を取得する。ここで、本実施例では、LLC14のプリフェッチの動作モードを調整は行わないため、帯域監視部103は、LLC14とメインメモリ15の間のバスの監視を行っていないが、そのバスの監視を行ってLLC14のプリフェッチの動作モードを調整してもよい。
【0048】
例えば、帯域監視部103は、バスにおけるデータ転送量をバスの使用率として監視する。域監視部103はいずれのバスについても同様の処理を行なうので、以下では、L1キャッシュ12とL2キャッシュ13との間のバス121の監視について説明する。
【0049】
帯域監視部103は、バス121の使用率が高いか低いかを判定するためのバス使用率閾値を予め有する。例えば、帯域監視部103は、バス使用率閾値をバス121の最大転送量の50%とすることができる。
【0050】
そして、帯域監視部103は、バス121の使用率とバス使用率閾値とを比較する。帯域監視部103は、バス121の使用率がバス使用率閾値以上の場合、バス121の使用率が高いと判定し、バス121の使用率がバス使用率閾値未満の場合、バス121の使用率が低いと判定する。
【0051】
L1キャッシュ12とL2キャッシュ13との間のバス121の使用率が高いと判定した場合、帯域監視部103は、そのバスによるデータの受けてであるL1キャッシュ12のプリフェッチを保守的プリフェッチで行うと決定する。そして、帯域監視部103は、L1キャッシュ12のプリフェッチャ110に動作モードとして保守的プリフェッチを指示する。
【0052】
逆に、L1キャッシュ12とL2キャッシュ13との間のバス121の使用率が低いと判定した場合、帯域監視部103は、L1キャッシュ12のプリフェッチを積極的プリフェッチで行うと決定する。そして、帯域監視部103は、L1キャッシュ12のプリフェッチャ110に動作モードとして積極的プリフェッチを指示する。
【0053】
すなわち、帯域監視部103は、各キャッシュ間及びLLC14とメインメモリ15と間の読み込み方向の各バスの使用率を監視する。そして、帯域監視部103は、使用率が低い低使用率バスのコア11側のキャッシュに対応するプリフェッチャ110に確度の高いプリフェッチ及び確度の低いプリフェッチを発行させる。また、帯域監視部103は、使用率が高い高使用率バスのコア11側のキャッシュに対応するプリフェッチャ110に確度の低いプリフェッチの発行を停止させて確度の高いプリフェッチを発行させる。より詳しくは、帯域監視部103は、ミス率が最も低いプリフェッチャ110の動作モードを、確度の高いプリフェッチ及び確度の低いプリフェッチの発行又は確度の低いプリフェッチの発行を停止させて確度の高いプリフェッチの発行のいずれにするかを決定する。
【0054】
帯域監視部103は、バス121及び122のそれぞれについて動作モードを決定する。例えば、バス121及びバス122の使用率がいずれも高い場合、帯域監視部103は、L1キャッシュ12及びL2キャッシュ13のいずれにも保守的プリフェッチを用いる。また、バス121の使用率が高く及びバス122の使用率が低い場合、帯域監視部103は、L1キャッシュ12には保守的プリフェッチを用い、L2キャッシュ13には積極的プリフェッチを用いる。また、バス121及びバス122の使用率がいずれも低い場合、帯域監視部103は、L1キャッシュ12及びL2キャッシュ13のいずれにも積極的プリフェッチを用いる。
【0055】
ここで、本実施例では、同じデータアクセス予測アルゴリズムの中で積極的プリフェッチと保守的プリフェッチとのそれぞれの動作モードの切り替えを行った。ただし、プリフェッチの数を切り替えることができれば良く、例えば、異なるデータアクセス予測アルゴリズムを用いて積極的プリフェッチと保守的プリフェッチの切り替えを行なってもよい。例えば、保守的プリフェッチではStreamプリフェッチングを用いるプリフェッチャ110を動作させ、積極的プリフェッチではStreamプリフェッチングを用いるプリフェッチャ110とStrideプリフェッチングを用いるプリフェッチャ110の双方を動作させる。ただし、2つのプリフェッチャ110が動作するため、双方が同じアドレスブロックのデータをプリフェッチすると、L1キャッシュ12は、使用するデータの特定が困難となる。そこで、この場合は、2つのプリフェッチャ110が異なるアドレスブロックのデータをプリフェッチすることが前提となる。
【0056】
図4は、プリフェッチャ選択の動作の一例を示す図である。次に、
図4を参照して、プリフェッチャ110の選択の動作の一例を説明する。
【0057】
状態201は、起動時の状態を表す。ここでは、セレクタ101は、初期値としてプリフェッチャ111を有する。そこで、セレクタ101は、プリフェッチャ111を選択する。これにより、プリフェッチャ111が、L1キャッシュ12に対するプリフェッチを行なう。
【0058】
その後、プリフェッチャ110の選択のタイミングが到来すると、精度監視部102は、各プリフェッチャ111~113のミス率の算出を行ない、状態202に示す算出結果131を得る。この場合、プリフェッチャ111のミス率が最も低いので、精度監視部102は、プリフェッチャ111の情報をセレクタ101に通知する。セレクタ101は、状態202に示すように、そのままプリフェッチャ111の選択状態を維持する。この場合、プリフェッチャ111が、そのままL1キャッシュ12に対するプリフェッチを行なう。
【0059】
その後、プリフェッチャ110の選択のタイミングが再度到来すると、精度監視部102は、各プリフェッチャ111~113のミス率の算出を行ない、状態203に示す算出結果132を得る。この場合、プリフェッチャ113のミス率が最も低いので、精度監視部102は、プリフェッチャ113の情報をセレクタ101に通知する。セレクタ101は、状態203に示すように、プリフェッチャ113を選択する。この場合、プリフェッチャ113が、L1キャッシュ12に対するプリフェッチを行なう。
【0060】
図5は、実施例1に係るCPUにおけるプリフェッチを用いた演算処理のフローチャートである。次に、
図5を参照して、実施例1に係るCPU10におけるプリフェッチを用いた演算処理を説明する。ここでは、L1キャッシュ12におけるプリフェッチ処理を例に説明する。
【0061】
コア11は、演算処理を実行する(ステップS1)。
【0062】
コア11は、演算が終了したか否かを判定する(ステップS2)。演算が終了した場合(ステップS2:肯定)、プリフェッチャ110は、プリフェッチ処理を終了する。
【0063】
これに対して、演算が終了していない場合(ステップS2:否定)、帯域監視部103は、L1キャッシュ12とL2キャッシュ13との間のバス121の使用率を監視する(ステップS3)。
【0064】
そして、帯域監視部103は、バス121の使用率がバス使用率閾値以上か否かを判定する(ステップS4)。
【0065】
バス121の使用率がバス使用率閾値以上の場合(ステップS4:肯定)、帯域監視部103は、保守的プリフェッチをプリフェッチャ110に指示する(ステップS5)。
【0066】
一方、バス121の使用率がバス使用率閾値未満の場合(ステップS4:否定)、帯域監視部103は、積極的プリフェッチをプリフェッチャ110に指示する(ステップS6)。
【0067】
各プリフェッチャ110は、キャッシュミスが発生するとプリフェッチを実行する(ステップS7)。
【0068】
各プリフェッチャ110は、プリフェッチしたデータのアドレスを精度監視部102に通知する。精度監視部102は、各プリフェッチャ110から取得したプリフェッチしたデータのアドレスをプリフェッチャ110毎にレコードに保存する(ステップS8)。
【0069】
さらに、精度監視部102は、キャッシュミスが発生時にデータアクセスが行われたアドレスの情報をL1キャッシュ12から取得する。そして、精度監視部102は、データアクセスが行われたアドレスと一致するアドレスを過去にプリフェッチ対象としたプリフェッチャ110が存在すれば、そのプリフェッチャ110のプリフェッチヒット数を1つインクリメントする。これにより、精度監視部102は、各プリフェッチャ110のプリフェッチヒット数をカウントする(ステップS9)。また、精度監視部102は、L1キャッシュ12にけるキャッシュ読み込みアクセス数を求める。
【0070】
次に、精度監視部102は、プリフェッチャ110の選択のタイミングが到来したか否かを判定する(ステップS10)。プリフェッチャ110の選択のタイミングが到来していない場合(ステップS10:否定)、プリフェッチを用いた演算処理は、ステップS1へ戻る。
【0071】
これに対して、プリフェッチャ110の選択のタイミングが到来した場合(ステップS10:肯定)、精度監視部102は、プリフェッチャ110毎のミス率を算出する(ステップS11)。詳しくは、精度監視部102は、キャッシュ読み込みアクセス数及びプリフェッチャ110毎のプリフェッチヒット数を用いて、プリフェッチャ110毎のミス率を算出する。
【0072】
その後、精度監視部102は、ミス率が最も低いプリフェッチャ110の情報をセレクタ101に通知する。セレクタ101は、精度監視部102から通知されたプリフェッチャ110を、実際にプリフェッチを行わせるプリフェッチャ110として選択する(ステップS12)。その後、プリフェッチを用いた演算処理は、ステップS1へ戻る。
【0073】
ここで、以上では
図2に示したコア11が1つの場合を例に説明したが、CPU10は、他の構成を取ることも可能である。例えば、CPU10は、複数のコア11を有してもよい。さらに、CPU10は、コア11毎にL1キャッシュ12及びL2キャッシュ13をそれぞれ有する。そして、L1キャッシュ12及びL2キャッシュ13毎に、セレクタ101、精度監視部102及びプリフェッチャ110が配置される。さらに、それぞれのコア11から延びるバス毎に、帯域監視部103が配置されてもよい。ただし、1つの帯域監視部103が、それぞれのコア11から延びるバスをまとめて監視してもよい。
【0074】
以上に説明したように、本実施例に係るCPUは、各プリフェッチャのプリフェッチのミス率を求め、ミス率が最も低いプリフェッチャにプリフェッチを行わせる。これにより、コアが行なう演算のデータアクセスの特徴に応じたデータアクセス予測アルゴリズムを用いてプリフェッチを行なうことができ、プリフェッチの精度を向上させることができる。したがって、CPUによる演算の処理性能を向上させることが可能となる。
【0075】
また、CPUは、各キャッシュの上流のバス、すなわち読み込み方向のバスの使用率を算出する。そして、CPUは、バスの使用率が低い場合は対応するキャッシュのプリフェッチを積極的プリフェッチで行わせ、バスの使用率が高い場合は対応するキャッシュのプリフェッチを保守的プリフェッチで行わせる。これにより、バスに余裕がある場合には多くのデータをプリフェッチすることができ、よりプリフェッチの精度を向上させることができる。したがって、CPUによる演算の処理性能をさらに向上させることが可能となる。
本実施例に係るCPU10は、複数のコア11を有する。さらに、各コア11は、SMTの機能を有しており、複数のスレッドを実行する。さらに、各コア11から延びるバスには、L1キャッシュ12及びL2キャッシュ13が接続され、それぞれにはセレクタ101、プリフェッチャ111~113及び精度監視部102が設けられる。また、コア11毎に、帯域監視部103が設けられる。また、本実施例に係るLLC14は、複数のコア11により共有される。
精度監視部102は、プリフェッチヒット数及びキャッシュ読み込みアクセス数を用いて、コア11におけるスレッド毎に各プリフェッチャ110のプリフェッチヒット率を算出する。精度監視部102は、プリフェッチヒット率をキャッシュ読み込みアクセス数で除算することで、プリフェッチヒット率を算出できる。例えば、L1キャッシュ12に対応する精度監視部102は、L1キャッシュ12におけるプリフェッチヒット率を算出する。また、L2キャッシュ13に対応する精度監視部102は、L2キャッシュ13におけるプリフェッチヒット率を算出する。
そして、各精度監視部102は、プリフェッチヒット率が最小のスレッド、すなわちミス率が最も高いスレッドを選出する。次に、各精度監視部102は、各プリフェッチャ110のミス率から選出したスレッドの平均ミス率を算出する。そして、各精度監視部102は、選出したスレッドの平均ミス率を統合監視部104へ出力する。
ここで、精度監視部102は、データをパケット形式でキャッシュおよびデータパスを経由して統合監視部104へ一定時間間隔で送信する。他にも、精度監視部102は、統合監視部104との間に専用のパスが配線された場合であれば、その専用のパスを用いてデータを送信しても良い。
帯域監視部103は、L1キャッシュ12とL2キャッシュ13との間のバス121及びL2キャッシュ13とLLC14との間のバス122のスレッド毎の帯域占有率を算出する。また、帯域監視部103は、LLC14とメインメモリ15との間のバス123におけるスレッド毎のデータ量の情報の入力を統合監視部104から受ける。そして、帯域監視部103は、LLC14とメインメモリ15との間のバス123のスレッド毎の帯域占有率を算出する。その後、帯域監視部103は、各バス121~123の帯域占有率を統合監視部104へ出力する。
統合監視部104は、LLC14の階層に存在する。具体的には、統合監視部104は、LLC14とメインメモリ15との間のバス123に接続される。また、統合監視部104は、LLC14に接続される。さらに、統合監視部104は、コア11毎に設けられた帯域監視部103のそれぞれに接続される。
統合監視部104は、各精度監視部102において選出されたスレッドの平均ミス率の入力をそれぞれの精度監視部102から定期的に受ける。また、統合監視部104は、LLC14とメインメモリ15との間のバス123におけるスレッド毎のデータ量の情報を取得して帯域監視部103へ出力する。そして、統合監視部104は、各スレッドの各バス121~123の帯域占有率の入力を各帯域監視部103から受ける。
統合監視部104は、予め平均ミス率及び帯域占有率の移動判定閾値を有する。統合監視部104は、以下のようにL1キャッシュ12の平均ミス率、L2キャッシュ13の平均ミス率、帯域占有率の順に優先度を付けて移動対象とするスレッドを決定する。ここで、統合監視部104は、移動対象とするスレッドの数である移動対象数を1つとしても良いし複数としてもよい。
統合監視部104は、L1キャッシュ12の平均ミス率が移動判定閾値を超過するスレッド及びそのスレッドを実行するコア11を特定する。L1キャッシュ12の平均ミス率が移動判定閾値を超過するスレッドが存在する場合、統合監視部104は、それらスレッドのうち平均ミス率が高い順に移動対象数のスレッドを移動対象とする。
L1キャッシュ12の平均ミス率を用いて移動対象を選択した後、移動対象としたスレッドの数が移動対象数に達していない場合、統合監視部104は、L2キャッシュ13の平均ミス率による移動対象の判定に移る。具体的には、統合監視部104は、L2キャッシュ13の平均ミス率が移動判定閾値を超過するスレッド及びそのスレッドを実行するコア11を特定する。L2キャッシュ13の平均ミス率が移動判定閾値を超過するスレッドが存在する場合、統合監視部104は、それらスレッドのうち平均ミス率が高い順に移動対象数までの残りの数のスレッドを移動対象とする。
L2キャッシュ13の平均ミス率を用いて移動対象を選択した後、移動対象としたスレッドの数が移動対象数に未だ達していない場合、統合監視部104は、帯域占有率による移動対象の判定に移る。具体的には、統合監視部104は、帯域占有率が移動判定閾値を超過するスレッド及びそのスレッドを実行するコア11を特定する。帯域占有率が移動判定閾値を超過するスレッドが存在する場合、統合監視部104は、それらスレッドのうち帯域占有率が高い順に移動対象数までの残りの数のスレッドを移動対象とする。
統合監視部104は、帯域占有率による移動対象の判定まで終了した時点で、移動対象数まで移動対象としたスレッドの数が達していなくても移動対象の選択処理を終了する。例えば、いずれのスレッドも平均ミス率及び帯域占有率ともに移動判定閾値を超えない場合、統合監視部104は、スレッドの移動を行わずにスレッドの移動処理を終了する。
さらに、統合監視部104は、いずれのスレッドもL1キャッシュ12のミス率、L2キャッシュ13のミス率及び帯域占有率が移動判定閾値を超えていないコア11がある場合、そのコア11を移動先とする。移動先となるコア11が複数存在する場合、統合監視部104は、L1キャッシュ12のミス率の低い順、L2キャッシュ13のミス率の低い順及び帯域占有率の低い順で移動先とするコア11の選択を行なう。その後、統合監視部104は、移動対象と決定したスレッドを移動先としたコア11へ移動させるマイグレーションの指示をOS105へ出力する。例えば、統合監視部104は、システムコールなどを用いてOS105に対してマイグレーションの指示を行なう。このように、統合監視部104は、プリフェッチャ110のミス率及び各バス121~123の使用率を基に移動させるスレッド及び移動先のコア11を決定して、移動させるスレッドを移動先のコア11に移動させる。
また、精度監視部102は、テーブル141に示すように、コア#1のスレッド##1についてL1キャッシュ12のミス率が、プリフェッチャ111で3%、プリフェッチャ112で3%、プリフェッチャ113で1%と算出する。この場合、精度監視部102は、コア#1のスレッド##1のL1キャッシュ12の平均ミス率を2.3%と算出する。同様に、精度監視部102は、テーブル141に示すように、コア#1のスレッド##1についてL2キャッシュ13のミス率が、プリフェッチャ111で2%、プリフェッチャ112で2%、プリフェッチャ113で0%と算出する。この場合、精度監視部102は、コア#1のスレッド##1のL2キャッシュ13の平均ミス率を1.3%と算出する。
また、帯域監視部103は、テーブル141にL1~L2帯域占有率として示すように、コア#0のスレッド##0のL1キャッシュ12とL2キャッシュ13との間のバス121の帯域占有率を60%と算出する。また、ここでは、帯域監視部103は、L2~Mem帯域占有率として示すようにL2キャッシュ13からメインメモリ15までの間のバスの帯域占有率を算出する。このバスは、バス122とバス123をまとめたものである。このように、帯域監視部103は、帯域占有率を求めるバスの範囲を、バス121~123のそれぞれ別に求めなくても良く、いずれかをまとめた範囲としてもよい。この場合、帯域監視部103は、テーブル141に示すように、コア#0のスレッド##0のL2キャッシュ13とメインメモリ15との間のバスの帯域占有率を60%と算出する。
また、帯域監視部103は、テーブル141に示すように、コア#1のスレッド##1のL1キャッシュ12とL2キャッシュ13との間のバス121の帯域占有率を10%と算出する。また、帯域監視部103は、テーブル141に示すように、コア#1のスレッド##1のL2キャッシュ13とメインメモリ15との間のバスの帯域占有率を10%と算出する。
この場合、統合監視部104は、コア#0のスレッド##0のL1キャッシュ12のミス率が移動判定閾値以上であると判定する。そして、統合監視部104は、コア#0のスレッド##0を移動対象とする。
そして、統合監視部104は、コア#1のスレッド##1がL1キャッシュ12のミス率、L2キャッシュ13のミス率及び帯域占有率が移動判定閾値を超えてないと判定する。統合監視部104は、コア#1の他のスレッドについてもコア#1のスレッド##1がL1キャッシュ12のミス率、L2キャッシュ13のミス率及び帯域占有率が移動判定閾値を超えてないことを確認する。その後、統合監視部104は、コア#0のスレッド##0をコア#1に移動させることをOS105に通知する。
OS105は、マイグレーションの指示とともに移動対象とするスレッドの情報及び移動先となるコア11の情報の入力を統合監視部104から受ける。そして、OS105は、指定されたスレッドを指定されたコア11へ移動する。
以上に説明したように、本実施例に係る演算処理装置は、マルチコアマルチスレッド環境において、ミス率及び帯域占有率が高いスレッドを移動対象として、ミス率及び帯域占有率が低いスレッドを有するコアへ移動させる。あるコアが実行するスレッドのうちミス率が他のスレッドに比べて高いスレッドは、データへのアクセスパターンが他のスレッドと異なると考えられる。そこで、ミス率が高いスレッドを他のコアに移動させることで、データへのアクセスパターンの乱れを解消することができ、適切なプリフェッチ発行が可能となる。また、帯域占有率が高いスレッドを各スレッドの帯域占有率が低いコアに移動させることで、コア毎の帯域占有率を均等にでき、積極的プリフェッチの実行数を増やすことが可能となる。
本変形例においても、L1キャッシュ12に対応する精度監視部102は、L1キャッシュ12における各プリフェッチャ110のプリフェッチヒット率を算出する。L2キャッシュ13に対応する精度監視部102は、L2キャッシュ13における各プリフェッチャ110のプリフェッチヒット率を算出する。そして、各精度監視部102は、プリフェッチヒット率が最小のスレッドを選出する。次に、各精度監視部102は、各プリフェッチャ110のミス率から選出したスレッドの平均ミス率を算出する。そして、各精度監視部102は、選出したスレッドの平均ミス率を統合監視部104へ出力する。
統合監視部104は、L1キャッシュ12に対応する精度監視部102から送信されたスレッドの平均ミス率を用いて、L1キャッシュ12の平均ミス率が移動判定閾値を超過するスレッド及びそのスレッドを実行するコア11を特定する。L1キャッシュ12の平均ミス率が移動判定閾値を超過するスレッドが存在する場合、統合監視部104は、それらスレッドのうち平均ミス率が高い順に移動対象数のスレッドを移動対象とする。
L1キャッシュ12の平均ミス率を用いて移動対象を選択した後、移動対象としたスレッドの数が移動対象数に達していない場合、統合監視部104は、L2キャッシュ13の平均ミス率が移動判定閾値を超過するスレッド及びそのスレッドを実行するコア11を特定する。L2キャッシュ13の平均ミス率が移動判定閾値を超過するスレッドが存在する場合、統合監視部104は、それらスレッドのうち平均ミス率が高い順に移動対象数までの残りの数のスレッドを移動対象とする。このように、本変形例では、統合監視部104は、L1キャッシュ12における平均ミス率が高いスレッド、次に、L2キャッシュ13における平均ミス率が高いスレッドの順に優先順位を付けて、移動するスレッドを決定する。
次に、統合監視部104は、移動先となるコア11を決定する。その後、統合監視部104は、移動対象と決定したスレッドを移動先としたコア11へ移動させるマイグレーションの指示をOS105へ出力する。例えば、統合監視部104は、システムコールなどを用いてOS105に対してマイグレーションの指示を行なう。すなわち、統合監視部104は、ミス率を基に移動させるスレッド及び移動先のコア11を決定して、移動させるスレッドを移動先のコア11に移動させる。
以上に説明したように、帯域占有率を用いずにミス率を基にスレッドの移動を行なうことも可能である。この場合にも、ミス率が高いスレッドを他のコアに移動させることで、データへのアクセスパターンの乱れを解消することができ、適切なプリフェッチ発行が可能となる。