(57)【要約】【課題】タスクを実行状況に応じて都度動的に、効率よくプロセッサコアへ割り当てるマルチプロセッサシステムを提供すること。  【解決手段】  マルチプロセッサコア５は、データ処理の処理性能を向上する機構とデータ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集するパフォーマンスモニタとを有するコアＡと、第１の処理機構と同一処理方式で性能が劣る機構とデータ処理された際のＩＰＣ値を計測するＩＰＣモニタとを有するコアＢ、Ｃとを備える。スケジューラ補助部６は、初めて実行するか、ＩＰＣ値により再割り当てが必要なタスクはコアＡへ供給し、以前に実行されたことがあり、且つＩＰＣ値により再割り当てが不要なタスクは該タスクの利用情報を参照してコアＡ〜コアＣから一つ選択する。【選択図】図３
2008090546.tif 000002
【特許請求の範囲】
【請求項１】
データ処理の処理性能を向上する第１の処理機構と、データ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集するパフォーマンスモニタとを有する第１のプロセッサコアと、該第１の処理機構と同一処理方式で処理性能が劣る第２の処理機構と、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを有する第２のプロセッサコアとを備えるマルチプロセッサコアと、
同一のタスクを含む複数のタスクを備えるアプリケーションソフトの実行時において、初めて実行するタスクまたは前記ＩＰＣモニタでの計測結果により再割り当てが必要なタスクは前記第１のプロセッサコアへ供給し、以前に実行されたことがあり、且つ前記ＩＰＣモニタでの計測結果により再割り当てが不要なタスクは前記パフォーマンスモニタで以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して前記マルチプロセッサコアから処理させるプロセッサコアを一つ選択し、選択したプロセッサコアへ供給するスケジューリング手段とを備えたことを特徴とするマルチプロセッサシステム。
【請求項２】
データ処理の処理性能を向上するための、互いに異なる複数の処理機構と、データ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集するパフォーマンスモニタとを備える第１のプロセッサコアと、該複数の処理機構の全てによって得られる処理性能未満となり、且つ、該複数の処理機構のそれぞれの処理性能以下となる、少なくとも一つ以上の処理機構と、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを有する第２のプロセッサコアとを備えるマルチプロセッサコアと、
同一のタスクを含む複数のタスクを備えるアプリケーションソフトの実行時において、初めて実行するタスクまたは前記ＩＰＣモニタでの計測結果により再割り当てが必要なタスクは前記第１のプロセッサコアへ供給し、以前に実行されたことがあり、且つ前記ＩＰＣモニタでの計測結果により再割り当てが不要なタスクは前記パフォーマンスモニタで以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して前記マルチプロセッサコアから処理させるプロセッサコアを一つ選択し、選択したプロセッサコアへ供給するスケジューリング手段とを備えたことを特徴とするマルチプロセッサシステム。
【請求項３】
データ処理の処理性能を向上するための、少なくとも互いに異なる第１から第４の４つの処理機構があり、第１の機構、第２の処理機構、およびデータ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集する第１のパフォーマンスモニタを備える第１のプロセッサコアと、第３の機構、第４の処理機構、およびデータ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集する第２のパフォーマンスモニタを備える第２のプロセッサコアと、第１および第３の処理機構、および、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを備える第３のプロセッサコアとを備えるマルチプロセッサコアと、
同一のタスクを含む複数のタスクを備えるソフトウェアの実行時において、初めて実行するタスクまたは前記ＩＰＣモニタでの計測結果により再割り当てが必要なタスクは前記第１のプロセッサコア及び第２のプロセッサコアへ供給し、以前に実行されたことがあり、且つ前記ＩＰＣモニタでの計測結果により再割り当てが不要なタスクは前記第１パフォーマンスモニタおよび第２のパフォーマンスモニタで以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して前記マルチプロセッサコアから処理させるプロセッサコアを一つ選択し、選択したプロセッサコアへ供給するスケジューリング手段とを備えたことを特徴とするマルチプロセッサシステム。
【請求項４】
前記マルチプロセッサコアは、前記複数の処理機構の全てによって得られる処理性能未満となり、且つ、該複数の処理機構のそれぞれの処理性能以下となる、少なくとも一つ以上の処理機構と、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを有する第４のプロセッサコアを備えたとことを特徴とする請求項１乃至請求項３のいずれかに記載のマルチプロセッサシステム。
【請求項５】
前記ＩＰＣモニタでの計測結果により再割り当てが必要か否かを判断する際に、前記計測結果とその再割り当て先のコアの動作周波数とを掛け算した値で判断するようにしたことを特徴とする、請求項１乃至請求項４のいずれかに記載のマルチプロセッサシステム。
【請求項６】
前記ＩＰＣモニタでの計測結果により再割り当てが必要か否かを判断する際に、前記計測結果とその再割り当て先のコアの動作周波数とを掛け算した値に単位時間当たりの消費電力を除した値で判断するようにしたことを特徴とする、請求項１乃至請求項４のいずれかに記載のマルチプロセッサシステム。
【請求項７】
前記第２のプロセッサコアが実行可能な命令セットは、前記第１のプロセッサコアが実行可能な命令セットの少なくとも一部であることを特徴とする請求項１乃至請求項６のいずれかに記載のマルチプロセッサシステム。
【請求項８】
前記第１のプロセッサコアは第１の命令セットで実行可能であり、前記第２のプロセッサコアは前記第１の命令セットとは異なる第２の命令セットで実行可能であることを特徴とする請求項１乃至請求項６のいずれかに記載のマルチプロセッサシステム。
【請求項９】
前記パフォーマンスモニタで収集された該タスクの前記ハードウェア資源の利用情報を、外部へ出力可であって、出力したが入用情報を外部より入力可としたことを特徴とする請求項１乃至請求項８のいずれかに記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ヘテロジーニアスなマルチプロセッサシステムに関するものであり、特に、タスクをプロセッサコアに割り当てるためのマルチプロセッサシステムに関する。
【背景技術】
【０００２】
プロセッサの高速化を目的として、従来から様々な機構、例えばキャッシュ機構、分岐予測機構、スーパースカラ機構、アウトオブオーダ機構、SIMD機構などが提案されている。これらの機構を採用することによって命令レベルの並列度の向上、各種ストールによるペナルティの回避、データレベル並列性の有効利用等が実現でき、その結果プロセッサの処理能力は向上してきた。なお、これらの機構はプロセッサの処理能力向上に寄与する一方で、実装面積や消費電力に対してはマイナスとなり、これらはトレードオフの関係にある。処理能力がこれらの機構によって高速化可能かどうかはソフトウェア次第であり、場合によっては全く速度向上が得られない可能性もあり得る。
【０００３】
また、システムの演算能力を向上させる手段として上記のようなプロセッサを複数並列に動作させるマルチプロセッサ方式が提案されており、近年ではプロセスの微細化によって１つのチップに複数のプロセッサコアを搭載するマルチコアプロセッサ方式も実現されている。このマルチコアプロセッサ方式を採用することで、ソフトウェアの独立した処理単位であるタスクを１チップ内で複数並列に実行できるようになってきている。
【０００４】
さらに、このマルチコアプロセッサが複数の異なる種類のプロセッサコアにより構成されたものが存在し、これをヘテロジーニアスなマルチコアプロセッサと呼ぶ。ヘテロジーニアスなマルチコアプロセッサを構成するプロセッサコアとしては、汎用プロセッサコア、DSPコア、専用ハードウェア処理エンジンなどがあり、例えばCELLプロセッサのように２つの異なる汎用プロセッサコアで構成されたマルチコアプロセッサもヘテロジーニアスなマルチコアプロセッサと呼ばれる。
【０００５】
ヘテロジーニアスなマルチコアプロセッサでは、複数の異なる種類のプロセッサコアを用意し、タスク毎に処理に最も適したプロセッサコアを利用することで効率の良い処理を実現する。例えば前記CELLプロセッサにおいてはメディア処理に適したプロセッサコア（ＳＰＥ）が8個、ＯＳなどの処理に適したプロセッサコア（ＰＰＥ）が１個というマルチコア構成になっている。
【非特許文献１】“10.2 The Design and Implementation of a First-Generation CELL Processor”  D. Pham et al., 2005 IEEE International Solid-State Circuits Conference (ISSCC)
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ヘテロジーニアスな構成のマルチコアプロセッサにおいては、どのタスクをどのプロセッサコアで実行するかというタスク割り当てが重要である。既存のヘテロジーニアスなマルチコアプロセッサでは、どのタスクがどのようなプロセッサコア上で実行されるべきかは、予めソフトウェア開発者やツールによって静的に決定される。
【０００７】
しかし、例えば「キャッシュ容量のみが異なる２種類のプロセッサコアが存在する場合に、そのどちらにタスクを割り当てるべきか」、「アウトオブオーダ機構を持つプロセッサコアとそれを持たないプロセッサコアが存在する場合に、そのどちらにタスクを割り当てるべきか」といった選択に関しては、必ずしも静的な解析が最適に行えるとは限らない。つまりマルチコアプロセッサを構成するプロセッサコアの種類によっては静的なタスク割り当てでは最適な解が得られない可能性がある。
【０００８】
また、プロセスの微細化により１つのチップに搭載できるプロセッサコア数が増加し、それとともにより多くの種類のコアが搭載できるようになると、さらにタスクを静的に割り当てることは困難となってくる。
【０００９】
一方、タスクを動的に割り当てることを仮定すると、タスク群が構成するジョブの実行経過や入力データの変遷に伴い、ジョブの実行開始当初と比較して各タスクが必要とするハードウェアリソース（キャッシュサイズ、分岐予測精度、SIMD機能等）が変化することが考えられ、単純にタスクを動的に割り当てると、結局は効率が劣化する可能性をはらんでいる。
【００１０】
そこで本発明では、ヘテロジーニアスなマルチコアプロセッサにおいて、タスクを実行状況に応じて都度動的に、効率よくプロセッサコアへ割り当てるマルチプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明のマルチプロセッサシステムは、データ処理の処理性能を向上する第１の処理機構と、データ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集するパフォーマンスモニタとを有する第１のプロセッサコアと、該第１の処理機構と同一処理方式で処理性能が劣る第２の処理機構と、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを有する第２のプロセッサコアとを備えるマルチプロセッサコアと、同一のタスクを含む複数のタスクを備えるアプリケーションソフトの実行時において、初めて実行するタスクまたは前記ＩＰＣモニタでの計測結果により再割り当てが必要なタスクは前記第１のプロセッサコアへ供給し、以前に実行されたことがあり、且つ前記ＩＰＣモニタでの計測結果により再割り当てが不要なタスクは前記パフォーマンスモニタで以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して前記マルチプロセッサコアから処理させるプロセッサコアを一つ選択し、選択したプロセッサコアへ供給するスケジューリング手段とを備えたことを特徴とする。
【００１２】
また、本発明のマルチプロセッサシステムは、データ処理の処理性能を向上するための、互いに異なる複数の処理機構と、データ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集するパフォーマンスモニタとを備える第１のプロセッサコアと、該複数の処理機構の全てによって得られる処理性能未満となり、且つ、該複数の処理機構のそれぞれの処理性能以下となる、少なくとも一つ以上の処理機構と、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを有する第２のプロセッサコアとを備えるマルチプロセッサコアと、同一のタスクを含む複数のタスクを備えるアプリケーションソフトの実行時において、初めて実行するタスクまたは前記ＩＰＣモニタでの計測結果により再割り当てが必要なタスクは前記第１のプロセッサコアへ供給し、以前に実行されたことがあり、且つ前記ＩＰＣモニタでの計測結果により再割り当てが不要なタスクは前記パフォーマンスモニタで以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して前記マルチプロセッサコアから処理させるプロセッサコアを一つ選択し、選択したプロセッサコアへ供給するスケジューリング手段とを備えたことを特徴とする。
【００１３】
また、本発明のマルチプロセッサは、データ処理の処理性能を向上するための、少なくとも互いに異なる第１から第４の４つの処理機構があり、第１の機構、第２の処理機構、およびデータ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集する第１のパフォーマンスモニタを備える第１のプロセッサコアと、第３の機構、第４の処理機構、およびデータ処理での利用途中あるいは利用されたハードウェア資源の利用情報を収集する第２のパフォーマンスモニタを備える第２のプロセッサコアと、第１および第３の処理機構、および、データ処理された際のＩＰＣ値を計測するＩＰＣモニタとを備える第３のプロセッサコアとを備えるマルチプロセッサコアと、同一のタスクを含む複数のタスクを備えるソフトウェアの実行時において、初めて実行するタスクまたは前記ＩＰＣモニタでの計測結果により再割り当てが必要なタスクは前記第１のプロセッサコア及び第２のプロセッサコアへ供給し、以前に実行されたことがあり、且つ前記ＩＰＣモニタでの計測結果により再割り当てが不要なタスクは前記第１パフォーマンスモニタおよび第２のパフォーマンスモニタで以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して前記マルチプロセッサコアから処理させるプロセッサコアを一つ選択し、選択したプロセッサコアへ供給するスケジューリング手段とを備えたことを特徴とする。
【発明の効果】
【００１４】
本発明によれば、ヘテロジーニアスなマルチコアプロセッサにおいて、タスクを実行状況に応じて都度動的に効率よくプロセッサコアへ割り当てることができるようになった。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態について図面を用いて説明する。
【００１６】
本実施の形態に係るシステム全体の構成を図１に示す。本システムは、プロセッサ装置１、主記憶装置２、ディスク装置３、外部入出力装置４から構成され、これらはシステムバスを介して接続されている。プロセッサ装置１は、複数のプロセッサコア部５とスケジューラ補助部６とを備える（プロセッサ装置１の詳細は後述）。外部入出力装置４は、図示しないキーボード、マウス、表示装置などの入力・出力デバイスと接続される。
【００１７】
ディスク装置３は、このシステムで実行するための各種ソフトウェアを記憶しており、オペレーティングシステム（ＯＳ）やアプリケーションプログラム（アプリケーション１、アプリケーション２）を含む。
【００１８】
アプリケーションプログラムは、粒度の細かい実行単位である１つまたは複数のタスクで構成され、例えば図１ではアプリケーション１は、タスク１、２、３という３つのタスクで、アプリケーション２はタスク４、５という２つのタスクで構成されていることを例示している。アプリケーションプログラムの実行は、それを構成するタスクを適宜実行することで実現され、例えばアプリケーション１の実行において、各タスクが実行されるのみならず、同じタスクが複数回実行されたり、また、場合によっては同時に実行されることもある。また本実施の形態においては、各タスクがスレッドと呼ばれる実行単位であることを想定して記述するが、これに限らず、タスクはスケジューリングによってプロセッサコア部５に対して割り当てられるソフトウェアの単位であれば良く、例えばプロセス等を想定したものもその対象に含まれる。
【００１９】
ＯＳは、プロセッサコア部５のうちの一つで実行され、これによりシステム全体の管理が行われる。また、ＯＳは、スケジューラを備え、スケジューラ補助装置６と協調しながらタスクのスケジューリングを行う。
【００２０】
ユーザが外部入出力装置４を介し、あるアプリケーションプログラムの実行をＯＳへ指示すると、ＯＳのスケジューラは、そのアプリケーションプログラムを構成する複数のタスクから必要に応じてスケジューラ補助装置６へ実行するタスクを通知し、スケジューラはそのタスクを実行可能なプロセッサコア部５に割り当て、そのプロセッサコア部５は割り当てられたタスクを処理することによって、そのアプリケーションプログラムの実行を進めていく。また、そのアプリケーションプログラムの実行中に別のアプリケーションプログラムの実行が指示された場合、スケジューラはその別のアプリケーションプログラムを構成する複数のタスクを必要に応じてスケジューリングの対象として加えることで、複数のアプリケーションプログラムが並行して実行が進む。
【００２１】
次にプロセッサ装置１の全体構成を図２に示す。
【００２２】
プロセッサ装置１は、ここではＮ＋１個のプロセッサコア部５（コアＡ、・・・コアＮ、コアＺ）を備えるマルチプロセッサであり、それぞれが内部バスを介して相互に接続されている。
【００２３】
コアＺは、ＯＳ実行のために予め予約されるプロセッサコア部５である。残りのプロセッサコア部５である、コアＡ、・・・、コアＮは、それぞれ複数の処理機構を備えている。ここで処理機構とは、プロセッサの高速化を目的とした処理機能を指すものであって、例えば、キャッシュ機構、分岐予測機構、スーパースカラ機構、アウトオブオーダ機構、ＳＩＭＤ機構などを指す。つまり、このプロセッサ装置１は、各プロセッサコア部５が複数の異なる処理機構で構成された、ヘテロジーニアスなマルチコアプロセッサである。
【００２４】
コアＡは、他のコアＢ・・・コアＮが備える各処理機構と同じ、またはそれ以上の性能を持った機能ブロックを備えている。更に、コアＡは、タスクが実行されている最中または、タスクが実行された際のコアＡが有するハードウェア資源の利用情報を収集するパフォーマンスモニタ装置（ＰＭ装置）を備えている。一方、他のコアＢ・・・コアＮにはＩＰＣ（Ｉｎｓｔｒｕｃｔｉｏｎｓ  Ｐｅｒ  Ｃｙｃｌｅ）値を計測するＩＰＣモニタ装置をそれぞれ備えている。なお、ＩＰＣ値については後述する。
【００２５】
一方、コアＢ・・・コアＮは、コアＡが備える全ての処理機構によって得られる処理性能未満となり、且つ、該複数の処理機構のそれぞれの処理性能以下となる処理機構をそれぞれ備える。
【００２６】
また、プロセッサ装置１は、スケジューラ補助部６を備える、スケジューラ補助部６は、同一のタスクの実行を含む複数のタスクを備えるアプリケーションプログラムを実行する際に、各タスクをどのプロセッサコア部（コアＡ〜Ｎの何れか）で実行させるかを割り振るものである。スケジューラ補助部６は、初めて実行する、または再割り当てが必要なタスクの場合には、必ずコアＡへ供給するよう割り振る。また、スケジューラ補助部６は、以前に実行されたことがあり、再割り当てが不要なタスクを再実行する場合には、前記パフォーマンスモニタ装置で以前に収集された該タスクの前記ハードウェア資源の利用情報を参照して、処理させるプロセッサコア部（コアＡ〜Ｎ）を一つ選択し、選択したプロセッサコア部（コアＡ〜Ｎの何れか一つ）へ供給する。
【００２７】
また、プロセッサ装置１は、システムバスＩ／Ｆ部７を備える。システムバスＩ／Ｆ部７は、内部バスとシステムバスとを接続するためのインターフェースである。
【００２８】
次に上記で示したプロセッサ装置１の全体の概略動作を図３に示す。
【００２９】
まず、ユーザからアプリケーションプログラムの実行要求により、コアＺ上のＯＳは、アプリケーションプログラムの複数のタスクを実行順に、順次スケジューラ補助部６へ供給し、スケジューラ補助部６は、供給されたタスクを一時保持しつつ、実行順にタスクを取り出す（Ｓ１１）。取り出したタスクが初めて実行するタスクか、または再割り当てが必要なタスクか否かを判断する（Ｓ１２）。タスクが、初めて実行または再割り当てが必要な場合にはコアＡへ供給する（Ｓ１３）。そして、タスクの実行が終了すると、スケジューラ補助装置６は、パフォーマンスモニタ装置（ＰＭ装置）で収集した該タスクの前記ハードウェア資源の利用情報（ＰＭ情報）を受信する（Ｓ１４）。スケジューラ補助装置６は、前記利用情報を該タスクを示す情報と対応付けて保持する（Ｓ１５）。
【００３０】
一方、初めての実行でないまたは再割り当てが不要な場合には、パフォーマンスモニタ装置（ＰＭ装置）で以前に収集された該タスクの前記ハードウェア資源の利用情報を参照し、このタスクを実行させるプロセッサコア部５（コアＡ〜Ｚ）の一つを選択し、選択したプロセッサコア部５へタスクを供給する（Ｓ１６）。タスクの実行が終了すると、スケジューラ補助装置６は、実行されたプロセッサコアのＰＭ装置またはＩＰＣモニタ装置からＩＰＣ値を受信する（Ｓ１７）。そして、ＩＰＣ値に基づき、タスクの再割り当てが必要か否かを確認し、必要な場合にそのタスクが次回割り当て時に再割り当てが必要であることを管理する（Ｓ１８）。
【００３１】
スケジューラ補助部６は、供給され一時保持されたタスクがなくなるまで（Ｓ１９）、タスクを取り出して（Ｓ２０）、ステップＳ１２以降の処理を繰り返し、タスクが無くなるとアプリケーションプログラムの実行が完了する。
【００３２】
なお、この実行中に、ユーザから、この実行中のアプリケーションに含まれるタスクを含む別のアプリケーションの実行要求を受けた場合は、そのタスクはアプリケーションのタスクの実行した際の利用情報を利用できる。
【００３３】
以上のような本発明の実施の形態によれば、ヘテロジーニアスなマルチプロセッサにおいて、タスクを再実行する際には、そのタスクの実行に適切なプロセッサコア部を選択し、実行させることができるとともに、タスクの実行の際のＩＰＣ値の低下によって、再度割り当てるコアを決定できるから、タスクを効率的に実行できる。
【００３４】
次に上記で説明した本実施の形態をより詳細化した実施例を説明する。
【００３５】
（第一実施例）
第一実施例では、プロセッサ装置１のプロセッサコア部５が４つの場合を想定する。図４は、４つのプロセッサコア部５のうち、ＯＳを実行するコアＺを除いた、コアＡ〜コアＣが備える処理機構の一例を示したものである。
【００３６】
コアＡは、分岐予測機構（Ｂｒａｎｃｈ  ｐｒｅｄｉｃｔｉｏｎ）、アウトオブオーダ機構（ｏｕｔ  ｏｆ  ｏｒｄｅｒ）、３つの同一のパイプライン機構（Ｐｒｏｃｅｓｓｉｎｇ  ｐｉｐｅ  １〜３）、及び、５１２ＫＢの２次キャッシュ機構（Ｌ２：５１２ＫＢ）の各処理機構を備える。また、コアＡは、コアＡのハードウェア資源の利用状況をモニタリングするパフォーマンスモニタ装置（ＰＭ装置）を備える。コアＢは、コアＡと同一のパイプライン機構を１つ、及び、コアＡの半分の記憶領域である２５６ＫＢの２次キャッシュ機構を備える。また、コアＣは、コアＡと同一の分岐予測機構、コアＡと同一のパイプライン機構を２つ、及び、コアＡの１／４の記憶領域である１２８ＫＢの２次キャッシュ機構とを備えている。このようにコアＢ、およびコアＣは、機能的にプロセッサコア部Ａのサブセットとなっている。なお、プロセッサコア部Ｚは、ここではＯＳ専用のプロセッサコアとし、説明を省く。また、コアＡ、コアＢ、コアＣは、いずれも同一のＩＳＡ（命令形式を二進数のオペコードのセットで表現したもの）で構成されるオブジェクトコードを実行可能であるとする。
【００３７】
次に、コアＡに備えるパフォーマンスモニタ装置（ＰＭ装置）について、説明する。
【００３８】
ＰＭ装置は、コアＡでの一つのタスクの実行におけるハードウェア資源の利用状況を収集し、計算などによって複数のデータを生成し、これらを利用情報（ＰＭ情報）としてスケジューラ補助部６へ出力するものである。ＰＭ情報には、様々なデータを備えることが考えられるが、本実施の形態では図５に示すように、タスクＩＤ（TID=6）に対応付けて、キャッシュパフォーマンス低下率、分岐予測の有効度、ＩＰＣ値、アウトオブオーダ有効度、及び、実行時間の各項目で構成することとする。
【００３９】
以下では、各項目の説明、及びその生成方法について説明する。
【００４０】
「キャッシュパフォーマンス低下率」：５１２ＫＢのキャッシュサイズを持つ二次キャッシュ機構によってどのくらい速度向上が得られたかを測定し、そのキャッシュサイズを変更した（減少した）場合に、どの程度パフォーマンスに対して悪影響があるかを示した値。ＰＭ装置によってキャッシュのエントリごとに「ヒット回数」と「ミス回数」を測定し、それをもとに、「５１２ＫＢでヒットだったうちミスになる回数」に、「キャッシュミスペナルティサイクル数」を積算し、「タスク処理に要した全サイクル数」で除して、キャッシュサイズ毎のパフォーマンスへの悪影響を計算する。
【００４１】
なお、「５１２KBでヒットだったうちミスになる回数」は、（１）キャッシュのエントリごとにヒット回数、ミス回数をカウントし、（２）キャッシュサイズを変えた場合に同一エントリになってしまうエントリ同士を比較して、最もヒット数が多いものを探し、（３）キャッシュサイズを変えた場合に同一エントリになってしまうエントリのうち、ヒット数が最も多くなかったエントリ全てのヒット数を合計して、その値に「ワードサイズ÷キャッシュラインサイズ」を掛ける。こうして得られた値がキャッシュサイズを変更した場合に元々ヒットだったものがミスになってしまう回数の予測値とし、（４）最後にそれらの合計を求めることで得られる。
【００４２】
「分岐予測の有効度」：分岐予測機構によってどのくらい速度向上が得られたかを測定し、その有効度を示した値。既存のＰＭ装置でも採用されている性能指標イベントである「分岐がｔａｋｅｎ」、「分岐予測のヒット」を用いて、「分岐がｔａｋｅｎ、かつ分岐予測のヒット、の回数」に、プロセッサによって一意に決まる定数である「分岐ミスペナルティサイクル数」を積算し、他のタスクとの同期処理によって生じた遅延を除いたそのタスク本来に必要な処理時間を示す「タスク処理に要した全サイクル数」で除した値を計算して得られる。
【００４３】
「ＩＰＣ値」：１サイクルあたりに処理された命令数の平均値を測定し、必要なパイプライン数。既存のパフォーマンスモニタ装置でも採用されている性能指標イベントである「実行された命令数」を前出の「タスク処理に要した全サイクル数」で除した値を計算して得られる。
【００４４】
「アウトオブオーダ有効度」：アウトオブオーダ機構によってどの程度命令の追い越しを実現できたかを測定し、その有効度を示す値。「先行命令よりも先にｉｓｓｕｅされた命令数」を「実行された命令数」で除して求める。
【００４５】
「実行時間」：タスクの実行時間に掛かったサイクル数を測定した値。ここではサイクル数を単位とする。
【００４６】
以上のようにしてＰＭ装置で求められた、「キャッシュパフォーマンス低下率」、「分岐予測の有効度」、「ＩＰＣ値」、及び、「アウトオブオーダ有効度」、および「タスク実行時間」は、スケジューラ補助部６へ供給される。
【００４７】
また、コアＢ、Ｃがそれぞれ備えるＩＰＣモニタ装置は、上記ＰＭ装置での説明のうち、ＩＰＣ値だけを測定するものである。
【００４８】
次に、スケジューラ補助部６内部の詳細について説明する。図６は、スケジューラ補助部６の各内部ブロックおよびそれらの関係を図示したものである。
【００４９】
スケジューラ補助部６は、主にレジスタファイルにより実現されるタスクキュー２１、コア管理テーブル２２、タスク情報テーブル２４、コア情報テーブル２３の４つのテーブルと、ハードウェア回路により実現されるタスク管理部１１およびコア選択部１２という２つの実行部とで構成する。まず、各テーブルについて説明する。なお、各テーブルで示すN/Aは、「無」を示す。
【００５０】
タスクキュー２１は、各プロセッサコア部５で実行するタスクの状態を管理するものである。ある状態のタスクキュー２１の一例を図７に示す。タスクキュー２１は有限個のエントリー（本実施例では１０個）で構成され、各エントリは、TID、T#、status、dependency、parameter、orderという項目を持つ。TIDは、現在スケジューラ補助部６内で管理されているタスクのユニークな内部ID、T#はTIDに割り当てられたタスクの開始アドレスごとに固有のID、StatusはTIDで示されるタスクの状態、dependencyはこのタスクが実行可能となるために実行終了していなくてはならないタスクのTIDのリスト、parameterはこのタスクを実行する際に用いるパラメータ、orderはこのタスクキューへの投入された順序を保持する項目である。なお本実施例ではT#はタスクの開始アドレスごとに固有のIDであるとしたが、実際には開始アドレスが同じでも状況によって動作パターンが異なる場合には異なるIDを与える方式も考えられる。
【００５１】
ここでstatusによって示されるタスクの状態としてはempty, wait, ready, run, finishの５つの用意されており、これらが図８で示されるように遷移することでタスク管理が実現される。まず新しいタスクがスケジューラから投入されると状態がemptyであるTIDのうちの一つにそのタスクを登録するが、投入されたタスクに先行依存タスクが設定されている場合には状態をwaitに、そうでなければ状態をreadyとする。状態がwaitであるタスクに関しては全ての先行タスクが終了した時点でその状態をreadyとする。次に状態がreadyであるタスクはコアへの割り当て対象となり、コアに実行を割り当てられた時点で状態をrunに遷移し、さらにこの実行が終了すると状態はfinishに遷移する。最後にタスクの終了をスケジューラに通知した時点で状態をemptyに戻し、再び新しいタスクを受け入れ可能な状態とする。
【００５２】
次に、コア管理テーブル２２は、各プロセッサコア部５の現在の状態を記憶しておくためのテーブルである。ある状態のコア管理テーブル２２の一例を図９に示す。コア管理テーブル２２は、プロセッサ装置１が備えるコアの個数分のエントリを持つ。各エントリは、CID、C#、status、running TIDという４つの項目を持ち、それぞれプロセッサ装置１内のユニークな内部ID、コアの種類、コアの状態、実行中のTIDを示すために用いられる。コアの状態としてはbusy, idle, reservedが存在し、それぞれタスクを実行中、タスク実行割り当て待ち、タスク割り当て対象外という状態を示す。
【００５３】
次に、コア情報テーブル２３は、プロセッサ装置１に搭載されている各コアの種類ごとの特徴が記載され、コア選択の基準として用いられるテーブルである。ある状態のコア情報テーブルの一例を図１０に示す。コアの特徴としては、L2キャッシュサイズ(L2 cache size)、分岐予測器の有無(branch prediction available)、命令実行パイプライン数(pipeline number)、アウトオブオーダ実行の可否(OOO available)があり、機能の有無を示す場合は有する場合にはYes、有しない場合にはNoを、それ以外の場合にはその項目が示す処理機構の数量をそのパラメータとして持つ。コア情報テーブル２３は、各コア（Ａ〜Ｃ）ごとに固有のテーブルであり、書き換えは行われない。なお、コアＺは、ここではＯＳ実行のために予約されているためタスク割り振りの対象外のため、コアＺ用の項目は有していない。
【００５４】
次に、タスク情報テーブル２４は、タスクを各プロセッサコア部５で実行した場合の適切さの度合いを示したものである。ある状態のタスク情報テーブルの一例を図１１に示す。
【００５５】
タスク情報テーブル２４はT#で示されるタスクがどの種類のコアでどの程度最適に実行可能かを示すためのScoreという項目（Score AはコアAに対する適性、Score BはコアBに対する適性、Score CはコアCに対する適性であり、１０を最大値として大きい方がより適性が高いことを示す）と、このタスクをコアＡで実行したときの実行時間（サイクル数）を保持するための項目execution time、このタスクの実行開始アドレスを示すstart address、タスクが新たな最適なコアへと割り当てられて実行された初回実行終了時にスケジューラ補助装置６が受信したIPC値から算出した閾値、各コア終了時にスケジューラ補助装置６が受信したIPC値、IPC値が閾値より低下した場合にT#で示されるタスクを再度コアAで実行してハードウェアリソースの有効活用度を計測するかどうかを示すre-execution flagで構成される。ここで、閾値とは、予め各コア毎に静的に定められた値（例えば80%など）でも良いし、コア数とタスク数等を勘案して動的に変動する値であっても良い。なお、ここで示したタスク情報テーブル２４は、各コア共通に静的な80%という値を用いている。
【００５６】
同図で、例えば、Ｔ＃１のエントリは、ＩＰＣ値が閾値より低下していないのでｒｅ−ｅｘｅｃｕｔｉｏｎ  ｆｌａｇは０であるが、T#が２のエントリは、ＩＰＣ値が閾値より低下したため、ｒｅ−ｅｘｅｃｕｔｉｏｎ  ｆｌａｇは１となっており、且つ、スコアと実行時間とはクリア（N/A）されている。また、タスクキュー２１に登録されているタスクのT#は全てこのタスク情報テーブル２４にエントリを持つが、そのうちスコア欄がN/Aであるタスクについてはまだコアの種類ごとの適性が調べられていないことを示す。なお、Scoreの値は、コア選択部１２によるスコア計算によって求められるものであり、詳細については後述する。
【００５７】
コア選択部１２は、プロセッサコア部５からのタスク終了通知を受け取り、タスクキュー２１、コア管理テーブル２２、コア情報テーブル２３を参照しながらタスク情報テーブル２４の更新を行うものである。図１２に、タスク情報テーブルの更新のフローを示し、以下に説明する。
【００５８】
タスクが終了すると、プロセッサコア部５は、内部バスを介してスケジューラ補助部６に終了通知を送信する。スケジューラ補助部６内ではコア選択部１２がこの通知を受け取る（Ｓ２１）。終了通知には終了したタスクのTID、通知元のプロセッサコア部５のCID、タスク実行に要した時間、そしてコアＡで実行された場合にはPMデータも含まれる。コア選択部１２は、通知されたTIDとCIDをもとに、タスクキュー２１とコア管理テーブル２２を参照し、そのTIDのT#、および実行されていたプロセッサコア部５のC#を見つけておく。
【００５９】
次に、コア選択部１２は、ステップＳ２１において求めたT#について、タスク情報テーブル２４を参照して既にコアタイプ毎のスコアが計算済みであるかどうかを判定する（Ｓ２２）。スコア項目がN/Aの場合はまだスコアが計算されていないと判断して、ステップＳ２３へ処理を進める。一方、スコアに既にある値があれば、ステップＳ２６へ処理を進める。
【００６０】
コア選択部１２は、Ｓ２１において求めたC#から、このタスクがコアＡで実行されたのかどうかの判定を行う（Ｓ２３）。コアＡで実行されたものである場合にはステップＳ２４へ処理を進める。そうでなかった場合には処理を終了する。
【００６１】
コア選択部１２は、終了通知の一部として送信されてきたＰＭ情報をもとにして、このタスクが対応するT#の、各コアタイプに対するスコアを計算する（Ｓ２４）。コア選択部１２は、Ｓ２４で計算した各コアタイプに対するスコア値をタスク情報テーブル２４の該当する項目に記録する。またタスクの実行時間をexecution time項目に記録し（Ｓ２５）、終了する。
【００６２】
ステップＳ２２の判定でＮｏの場合、コア選択部１２は、ステップＳ２１で得られたT#とC#とによって、タスク情報テーブル２４中のこのタスクの実行されたプロセッサコア部５に対するスコア値を調べ、これが１０だった場合のみＳ２７に処理を進める。そうでなければ処理を終了する。ここでスコア＝１０の時のみＳ２７の処理を行うのは、スコア＝１０のコアと言うのはこのタスクにとって最適なコアであると判断されていたということであり、そのようなコアで実行した場合の実行時間とコアＡでの実行時間とを比較することにより、この最適性の判断の妥当性が再検証できるからである。逆にスコア＜１０であるようなコアでの実行時間はコアＡでの実行時間との比較が難しいため、本実施例ではＳ２７による再検証処理も行わない。
【００６３】
コア選択部１２は、このタスクの今回の実行時間とタスク情報テーブル２４中に登録されているコアＡでの実行時間を比較する（Ｓ２７）。ここではある程度の誤差を許容するために、テーブル中に登録された実行時間に対して一定の値を加算した（もしくは乗算した）ものと比較するようにしても良い（一定の値は、外部から設定可能）。比較の結果、今回のタスクの実行時間がタスク情報テーブル２４中に登録されていた実行時間を上回った場合には、コア選択部１２は、タスク情報テーブル２４のこのタスクに関する情報をN/Aに、即ち、クリアする（Ｓ２８）。このステップＳ２８の処理により、この後、再度同じタスクが実行される際には最適なプロセッサコア部５の再選択が行われるようになる。
【００６４】
一方、比較の結果、今回のタスクの実行時間がタスク情報テーブル２４中に登録されていた実行時間を上回わらなかった場合には、図１３の処理に進む。
【００６５】
次に、コア選択装置１２は、タスク情報テーブル２４を参照することで、ＩＰＣ値を初めて計測したか否かを判定する（ステップＳ２７１）。ＩＰＣ値を初めて計測した場合にはステップＳ２７５へ、そうでない場合にはステップＳ２７２に処理が進む。
【００６６】
コア選択装置１２は、プロセッサコア５から送信されるＰＭ情報もしくはＩＰＣ値により、タスク情報テーブル２４にＩＰＣ値を書き込む（ステップＳ２７２）。コア選択装置１２は、書き込まれたＩＰＣ値と閾値とを比較する（ステップＳ２７３）。上回っていれば本処理を終了する。閾値を下回っていれば、次にコア選択装置１２は、タスク情報テーブルのre-execution flagを立て、各コアのスコアとexecution timeをN/Aにクリアし（ステップＳ２７４）、本処理を終了する。これにより、次回同一T#となるタスクは再度コアAに割り当てられ最適なコアを再選択できるようになる。
【００６７】
一方、ステップＳ２７１で、ＩＰＣ値の計測が初めての場合、タスク情報テーブル２４に閾値とＩＰＣ値を登録して（ステップＳ２７５）処理が終了する。
【００６８】
ここで、タスク情報テーブル２４内に記録するスコアの計算方法について、以下に一例を示す。
【００６９】
コア選択部１２は、ＰＭ情報を評価するための閾値テーブルを備えている。閾値テーブルの一例を図１４に示す。閾値テーブルを用いたスコア計算方法は次のように行われる。
【００７０】
まず、閾値テーブルとＰＭ情報を参照し、各プロセッサコア部５が有しているハードウェア資源がそのタスクを遅延なしに実行するための条件を満たしているかそうでないかを決定する。具体的にはPMデータの値が閾値未満のものは条件を満たしていない（×）、閾値以上のものは条件を満たしている（○）と判断する。この処理の結果は、例えば図１５のようになる。
【００７１】
次に、各プロセッサコア部５が有しているハードウェア資源ごとのスコアを計算する。先の判定でタスクを遅延なしに実行できるための条件を満たしていない（×）と判定された場合は０点を、満たしている（○）と判定された場合は、さらに必要度に応じたスコア計算を行う。必要度に応じたスコア計算とは、概念的には必要最小限のハードウェア資源で要求を満たしている場合には１点を、必要以上のハードウェア資源を備えている場合には減点をして１点未満のスコアを付ける、というものである。より具体的にはYesかNoで示されるハードウェア資源に対しては、必要が無かったのに有している場合には０．５点を、数量で示されるハードウェア資源に対しては、必要だった量を実際に所有している数量で割った値をそのスコアとする。この処理の結果は、例えば図１６の６項目のうちの左の４項目それぞれのようになる。
【００７２】
次に、プロセッサコアごとに、ハードウェア資源ごとに計算された値の合計値を求める。この処理の結果は、例えば図１６の６項目のうちの左から５項目”Intermediate score(SUM)”のようになる。
【００７３】
最後に、上記で求めた合計値のうち、最も大きな値を持つコアを１０点、それ以外のプロセッサコアは中間値で求めた値に２．５を乗算した値に対して、整数値への切り上げを行った値を最終的なスコアとする。この処理の結果は、例えば図１６の６項目のうちの一番右の項目”Final Score”のようになる。
【００７４】
以上のようにして、タスク情報テーブル２４内に記録するためのスコアを求める。
【００７５】
図６の説明に戻る。
【００７６】
タスク管理部１１は、ＯＳが実行されているコアＺと通信を行うとともに、タスク割り当て対象のプロセッサコア部５へのタスク実行割り当ての通知、およびタスクを割り当てたプロセッサコア部５から実行終了通知の受け取りを行うものである。
【００７７】
タスク管理部１１の内部を図１７に示す。破線で囲まれた領域がタスク管理部１１を示している。タスク管理部１１は、タスクキュー２１の更新を行うタスクキュー管理部３１、プロセッサコア部５に割り当てるタスクを決定するためのタスク割り当て決定部３２、割り当てが決まったタスクのプロセッサコア部５上での実行を管理するためのタスク実行管理部３３、コア管理テーブル２２の更新を行うコア管理テーブル管理部３４を備える。また、タスクキュー管理部３１、タスク実行管理部３３は、内部バスを介して各プロセッサコア部５と通信を行うことができる。
【００７８】
次にこのタスク管理部１１の動作について図１８に示すフローチャートをもとにして説明する。動作としては「新規タスクの登録」、「タスクのプロセッサコア装置への割り当て」、「タスクの実行終了」の３つのフローがあり、これらは共通のテーブルへのアクセスを除いてはそれぞれ独立に実行される。共通のテーブルへのアクセスに関する排他関係は図中の破線矢印に示すとおりである。破線矢印で結ばれた処理ステージ間は排他的な実行が行われる。
【００７９】
まず、新規タスクの登録について説明する。
【００８０】
タスクキュー管理部３１は、内部バスを介してスケジューラからの、新規タスクの実行の要求を受理する（Ｓ３１）。
【００８１】
タスクキュー管理部３１は、タスク情報テーブル２４を参照してスケジューラから要求されたタスクの開始アドレスからT#を求める。タスク情報テーブル２４にタスクの開始アドレスが登録されていればそのT#を新規タスクのT#とし、まだ登録されていなかった場合は新しいT#エントリをタスク情報テーブル２４に生成してその開始アドレスをstart address項目に登録してタスクのT#とする（Ｓ３２）。
【００８２】
タスクキュー管理部３１は、タスクキュー２１内の空いているエントリ(状態がemptyのエントリ)に新規タスクを登録する。タスクキュー管理部３１はステップＳ３２で得られたT#とスケジューラからの要求に含まれているdependency、parameter情報をもとにタスクキュー２１の該当する項目を登録し（Ｓ３３）、また、既存のタスクより順序関係が後になるようにorder項目の値を設定する。dependencyが空でなければstatusをwaitに、そうでなければreadyとする。
【００８３】
タスクキュー管理部３１は、新規タスクを登録したTIDを内部バスを介してスケジューラに返す（Ｓ３４）。
【００８４】
次に、タスクのプロセッサコア部５への割当て時について説明する。
【００８５】
タスク割り当て決定部３２は、タスクキュー２１、タスク情報テーブル２４、コア管理テーブル２３を参照して、新たに実行を割り当てるべきタスクと、それを割り当てるべきプロセッサコア部５を決定し、タスク実行管理部３３に通知する（Ｓ４１）。通知される情報には割り当てられるタスクを示すTIDおよびその実行開始アドレス、実行パラメータと、割り当て先のプロセッサコア部５を示すCIDが含まれる。このタスク割り当て決定部３２によるタスクの決定処理の詳細については後述する。
【００８６】
タスク実行管理部３３は、通知された情報を元に、内部バスを介してCIDで示されたプロセッサコア部５に対してTIDで示されるタスクの実行を要求する。具体的にはタスク実行管理部３３は、受け取ったTIDをもとにしてタスクキュー２１を参照して該当するT#とparameterを読み出し、これらの情報をCIDで示されるプロセッサコア部５にタスク実行要求として通知することにより実現する。またタスク実行管理部３３は、タスク実行中のCIDとTIDのペアを情報として記憶しておく（Ｓ４２）。
【００８７】
タスク実行管理部３３は、コア管理テーブル管理部３４に対して実行開始フラグとともにCID、TIDを送信する。コア管理テーブル管理部３４は、この情報を元にコア管理テーブルの更新を行う。具体的にはCIDが示すエントリのstatus項目をbusyとし、running TID項目にTIDを登録する（Ｓ４３）。
【００８８】
タスク実行管理部３３は、タスクキュー管理部３１に対して実行開始フラグとともにTIDを送信する。タスクキュー管理部３１はこの情報を元にタスクキューの更新を行う。具体的にはTIDが示すエントリのstatus項目をrunとする（Ｓ４４）。
【００８９】
ステップＳ４１に、戻って次のタスク割り当てを行う。
【００９０】
次に、タスクの実行終了について説明する。
【００９１】
タスクを実行中のプロセッサコア部５が内部バスを介してタスクの終了をスケジューラ補助部６に通知すると、タスク実行管理部３３がその情報を受け取る。通知される情報の中には終了したプロセッサコア部５を識別するためのID（CID）が含まれる（Ｓ５１）。
【００９２】
タスク実行管理部３３は、コア管理テーブル管理部３４に対して終了フラグとともにCIDを送信する。コア管理テーブル管理部３４は、この情報を元にコア管理テーブル２２の更新を行う。具体的にはCIDが示すエントリのstatus項目をidleとし、running TID項目をN/Aとする（Ｓ５２）。
【００９３】
タスク実行管理部３３はタスクキュー管理部３１に対して終了フラグとともにTIDを送信する。タスクキュー管理部３１は、この情報を元にタスクキュー２１の更新を行う。具体的にはTIDが示すエントリのstatus項目をfinishとし、さらに他のTIDエントリのdependency項目からこのTIDを取り除く（Ｓ５３）。
【００９４】
タスク実行管理部３３は、内部バスを介してスケジューラに対してこのタスクの終了を通知する。通知情報には実行を終了したTIDが含まれる。さらに通知終了後にタスクキュー２１の更新を行う。具体的にはTIDが示すエントリのstatus項目をemptyとし、T#、parameter、orderの各項目をN/Aとする。さらにタスクキュー２１内の各エントリのorder値のうちこのタスクのorder値よりも大きいものを全て１デクリメントする（Ｓ５４）。
【００９５】
以上のように、タスク管理部１１は動作する。
【００９６】
次に、タスク割り当てを行うタスク割り当て決定部３２の詳細な動作について図１９を用いて説明する。タスク割り当て決定部３２は、スケジューラ補助部６内のタスクキュー２１、タスク情報テーブル２４、コア管理テーブル２２の３つのテーブルを参照して、プロセッサコア部５へ実行させるタスクと、その割り当て先のプロセッサコア部５を決定する機能を有するものである。
【００９７】
まず、タスク割り当て決定部３２は、タイプ毎割り当て可否テーブルを生成する（Ｓ６１）。コアタイプ毎割り当て可否テーブルの一例を図２０に示す。コアタイプ毎割り当て可否テーブルとは、コア管理テーブル２２をもとに生成可能な中間テーブルであって、コアの種類(C#)ごとにエントリを持ち、新規タスク割り当ての可否(status)と、割り当てが可能な場合にはどのCIDに割り当てられるのか(allocatable CID)を示すテーブルである。Status項目はコア管理テーブル中で該当するコア(C#)のうち少なくとも一つのstatusがidleである場合のみidleに、それ以外の場合はbusyとなる。またallocatable CID項目は前項目がidleの場合のみ、コア管理テーブル２２においてそのC#をもつCIDのうちstatusがidleである最も小さなCIDをその値とする。
【００９８】
次に、コアタイプ毎割り当て可否テーブルにstatusがidleであるコアがあるか否かを判断し（Ｓ６２）、あれば、次に、割り当て候補TIDテーブルを作成する（Ｓ６３）。
【００９９】
割り当て候補TIDテーブルの一例を図２１に示す。割り当て候補TIDテーブルは、タスクキュー２１から生成可能な中間テーブルであり、割り当て可能なTIDごとにそのT#とorderのみを抽出したテーブルである。タスクキュー２１においてstatusがreadyであるようなTIDのみを抽出し、そのT#とorderを抜き出すことで生成できる。
【０１００】
次に、割り当て候補TIDテーブルに割り当て可能なTIDがあるか否かを判断し（Ｓ６４）、あれば、次に、コア状態を反映したタスク毎スコアテーブルを作成する（Ｓ６５）。
【０１０１】
コア状態を反映したタスク毎スコアテーブルの一例を図２２に示す。コア状態を反映したタスク毎スコアテーブルは、先ほどのコアタイプ毎割り当て可否テーブルとタスク情報テーブルをもとに生成可能な中間テーブルであり、現在割り当て不可能なコアタイプに対するスコア値を０でマスクしたテーブルである。タスク情報テーブル２４を基本として、コアタイプ毎割り当て可否情報から、もしそのコアタイプが割り当て可能であればスコア値はそのままにし、割り当てが不可能である場合はスコアを０に書き換えることで生成される。またタスク情報テーブル２４にスコアが登録されていないタスク全て（タスク情報テーブルにre-executionフラグが立っているタスクを含む）に対応するような”other”というエントリを追加し、コアＡのみスコアを１０、それ以外を０とした上で、上記と同様なマスク処理を行ってコアタイプ毎のスコアとしている。
【０１０２】
次に、実行可能タスクスコアテーブルを生成する。（Ｓ６６）実行可能タスクスコアテーブルの一例を図２３に示す。実行可能タスクスコアテーブルは、先に生成したコア状態を反映したタスク毎スコアテーブルと割り当て候補TIDテーブルから生成可能な中間テーブルであり、割り当て可能なタスク毎にエントリを持ち、TID、T#、最大score、order、C#を項目として持つテーブルである。このうちC#と最大scoreは、該当するT#をもとにしてコア状態を反映したタスク毎スコアテーブルから計算される値で、最大のスコアをとるためのコアタイプ(C#)とそこに割り当てたときのスコア値を示している。またT#とorderは割り当て候補TIDテーブルから対応するTIDの持つ値をそのまま登録したものとなる。
【０１０３】
上記４つの中間テーブルが生成された時点で、タスク割り当て決定部３２は、実行を割り当てるべきタスクを決定する（Ｓ６７）。具体的には最大スコア値が最大となるTIDで示されるタスクを、該当するC#で示されるコアタイプのプロセッサコア部５に割り当てるのが最も適当であると判断する。また最大スコア値が同じタスクが複数存在する場合にはorder値が最小のTIDを選択する。
【０１０４】
次に、タスク割り当て決定部３２は、選択されたTIDを実行すべきプロセッサコア部５を選択するが、これは実行可能タスクコアテーブルで示されるC#を使ってコア毎割り当て可否テーブルの該当するエントリのCID項目を参照することで実現される（Ｓ６８）。
【０１０５】
さらにタスク割り当て決定部３２は、実行可能タスクコアテーブルで示されるT#をもとにタスク情報テーブル２４を参照してタスクの実行開始アドレスを、TIDをもとにタスクキューを参照してタスクの実行パラメータをそれぞれ決定する（Ｓ６９）。そして、これらの情報（TID、CID、実行開始アドレス、パラメータ）をタスク実行管理部３３に通知する（Ｓ７０）。この例では、TID=６で示されるタスク（開始アドレス=0x10000、実行パラメータ=parameter6）を、CID=2で示されるプロセッサコア部５に割り当てることが決定される。
【０１０６】
なお、ステップＳ６２、ステップＳ６４で、存在しない場合には、インターバル処理を行った（Ｓ７１）後に、ステップＳ６１からの処理を再開する。なお、インターバル処理中は、新規タスク投入やタスクの終了などにともなうスケジュール補助装置６内のテーブルの更新を許している。
【０１０７】
以上説明してきたように、本実施例によれば、ヘテロジーニアスなマルチプロセッサにおいて、タスクを再実行する際には、そのタスクの実行に適切なプロセッサコア部を選択し、実行させることができるとともに、タスクの実行の際のＩＰＣ値の低下によって、再度割り当てるコアを決定するから、タスクを効率的に実行できる。
【０１０８】
次に第２の実施例について説明する。
【０１０９】
（第二実施例）
第一実施例では、コアＡ、コアＢ、コアＣという３種類のプロセッサコア部５を備えたプロセッサ装置１において、コアＡが、その他全ての種類のコアの機能を備える場合について示したが、本実施例は、そのような絶対的なコアＡが存在しないようなプロセッサ装置１にも適用可能な例を示したものである。第ニ実施例は、第一実施例と多くの点で重複するため、差分を中心に説明する。
【０１１０】
第二実施例では、プロセッサ装置１のプロセッサコア部５が５つの場合を想定する。図２４は、５つのプロセッサコア部５のうち、ＯＳを実行するコアＺを除いた、コアＡ〜コアＤが備える処理機構の一例を示したものである。
【０１１１】
同図からわかるように、命令パイプライン数、分岐予測器、アウトオブオーダ機構の観点では、コアＢ、Ｃ、ＤはコアＡのサブセットであり、またＬ２キャッシュサイズの観点では、コアＡ、Ｂ、ＣはコアＤのサブセットである。
【０１１２】
従って、コアＡに加えて、コアＤにおいても、パフォーマンスモニタ装置（ＰＭ）を搭載している。また、コアＢ、コアＣにおいても、ＩＰＣモニタ装置を搭載している。
【０１１３】
次に、スケジューラ補助部６’の内部について、図２５を用いて説明する。同図から、わかるように、第一実施例と比較し、ＰＭデータバッファ２５が追加された点が異なっている。また、図からは直接的には見えないが、タスク情報テーブル２４’、タスク管理部１１’、コア選択部１２’にも、一部変更（拡張）が必要となる。
【０１１４】
ＰＭデータバッファ２５は、あるタスク（T#）をコアＡとコアＤとの２つから異なるタイミングでＰＭ情報が通知されるため、双方からＰＭ情報が揃うまで一時的に記憶するためのものである。双方からのＰＭ情報が揃うと、コア選択部１２’によってそのタスク（T#）の各コアタイプに対するスコアを計算し、スコアの計算が完了するとＰＭバッファ中のそのタスク（T#）に対するエントリは削除される。
【０１１５】
タスク情報テーブル２４’は、図２６に示すように”To be run”項目が追加され、ここにそのタスクのスコアを計算するために実行されなければいけないプロセッサコア部５のタイプ(C#)のリストが登録される。ここに登録されたC#値は、それが示すプロセッサコア５上で該当するタスクが終了するたびにリストから除外され、N/Aになった段階でスコアが計算されたことを示す。この例ではT#＝3のタスクはコアＡでのみ、T#＝6のタスクはコアＤでのみ実行済みであり、その他のタスク1,4,5はコアＡ、コアＤの両方のプロセッサコア５で実行済であることが分かる。
【０１１６】
コア選択部１２’は、図２７および図２８のような動作フローとなる。なお、第一実施例のコア選択部１２の動作フロー（図１２および図１３）と同じステップは同一のステップ番号を付しており、変更となった点は「’（カンマ）」を付しており、新たに追加されたステップは１００番台のステップ番号を付している。
【０１１７】
まず、ステップＳ２１、Ｓ２２は、第一実施例と同じである。
【０１１８】
ステップＳ２２でYesのとき、次に、コア選択部１２’は、Ｓ２１において求めたC#とT#から、このタスクがコアＡ及びコアＤで実行された否かの判定を行う（Ｓ２３’）。具体的には、タスク情報テーブル２４’中のT#が示すエントリにおける”To be run”項目にC#がリストされていれば、コアＡ及びコアＤで実行されたと判定する。ステップＳ２３’にて、コアＡ及びコアＤで実行されなかったとの判定であれば本動作フローを終了し、実行されたとの判定であれば、ステップＳ１０１へ進む。
【０１１９】
コア選択部１２’は、終了通知の一部として送信されてきたＰＭ情報をＰＭデータバッファ２５に登録する（Ｓ１０１）。PMバッファ内に既に対応するT#のエントリが存在すれば、そのエントリに対して追記を行い、そうでなければ新しいエントリを追加してそこの対応する項目に対してPMデータを記録し、PMデータが存在しない項目についてはN/Aのままにしておく。なおexecution timeの欄の登録については既存の値が存在すればその値よりもPMデータの示す値が小さい場合のみ上書きを行う。さらにコア選択装置はタスク情報テーブルの該当する”To be run”項目の登録されるC#を取り除く。
【０１２０】
コア選択部１２’は、ステップ２３’において参照したタスク情報テーブル２４’のT#が示すエントリ中の”To be run”項目にリストアップされていたコアタイプが、C#以外に存在していないかどうか判定する（Ｓ１０２）。C#以外のコアタイプがリストアップされていなかった場合にはステップＳ２４’へ、そうでなければ終了する。
【０１２１】
次に、コア選択部１２’は、ＰＭデータバッファ２５に記録されたＰＭデータをもとにして、このタスクが対応するT#の、各コアタイプに対するスコアを計算する（Ｓ２４’）。
【０１２２】
そして、コア選択部１２’で計算した各コアタイプに対するスコア値をタスク情報テーブル２４’の該当する項目に記録する。また、ＰＭバッファに記録されていたexecution timeをタスク情報テーブル２４’のexecution time項目に記録する（Ｓ２５’）。
【０１２３】
次に、コア選択部１２’は、ＰＭデータバッファ２５内のT#に相当するエントリを削除し（Ｓ１０３）、処理を終了する。
【０１２４】
一方、ステップＳ２２で、Noの場合、ステップＳ２６へ進み、以後ステップＳ２８まで第一実施例と同様である。ステップＳ２８の後、コア選択部１２’は、タスク情報テーブル２４’のT#に相当するエントリ中の”To be run”項目に、全てのＰＭ装置を有するプロセッサコア部５のコアタイプを再登録する（Ｓ１０４）。これによってこのタスクは再測定されることになる。
【０１２５】
次に、タスク管理部１１’について説明する。
【０１２６】
タスク管理部１１’は、Ｈ／Ｗ構成は第1実施例と同様であるが、図１８に示した処理フロー中のステップＳ３２、および、図１９に示したタスク割り当て決定フロー中のステップＳ６５が異なっている。
【０１２７】
ステップＳ３２に対応し、変更した処理は次のようになる。
【０１２８】
「タスクキュー管理部１１’は、タスク情報テーブル２４’を参照して、（ＯＳの）スケジューラから要求されたタスクの開始アドレスからT#を求める。タスク情報テーブル２４’を参照して既にタスクの開始アドレスが登録されていればそのT#を新規タスクのT#とし、まだ登録されていなかった場合は、新しいT#エントリをタスク情報テーブル２４’に生成して、その開始アドレスをstart address項目に登録しタスクのT#とする。T#で示されるエントリに対して、コアＡ及びコアＤに相当するコアタイプのC#（本実施例ではAとD）を”To be run”項目に登録する。」
また、ステップＳ６５に対応し、変更した処理は以下のようになる。
【０１２９】
「コア状態を反映したタスク毎スコアテーブルは、先ほどのコアタイプ毎割り当て可否テーブルとタスク情報テーブル２４’をもとに生成可能なテーブルであり、現在割り当て不可能なコアタイプに対するスコア値を０でマスクしたテーブルである。タスク情報テーブル２４’を基本として、コアタイプ毎割り当て可否情報から、もしそのコアタイプが割り当て可能であればスコア値はそのままにし、割り当てが不可能である場合はスコアを０に書き換えることで生成される。またタスク情報テーブル２４’にスコアが登録されていないタスクに関しては、タスク情報テーブル２４’を参照しながらまだ実行されていない（”To be run”の項目にリストされている）ビッグコアのみスコアを１０、それ以外を０とした上で、上記と同様なマスク処理を行ってコアタイプ毎のスコアとする。」このような変更の結果、コア状態を反映したタスク毎スコアテーブルにはotherというエントリがなくなり、代わりに図２９に示すように、タスク情報テーブルが持つ全てのT#に対するエントリが用意される。
【０１３０】
以上説明した第二実施例によれば、絶対的なコアＡが存在しないようなプロセッサ装置１にも適用可能となった。また絶対的なコアＡが存在しないようなプロセッサ装置においても最小限の回数での実行によって、タスクとプロセッサ装置内の全てのコアに対するスコア判定が可能となった。
【０１３１】
なお、上記で説明した各実施例におけるＰＭ装置は、タスク終了通知とともにＰＭ情報を送信するとして説明したが、タスク終了を伴わない状況でもＰＭ装置があるタイミングでＰＭ情報をTIDとともに送信するようにしてもよく、ステップＳ２４、Ｓ２４’によるスコア計算処理およびステップＳ２５、Ｓ２５’によるタスク情報テーブル２４、２４’の更新処理のみを独立に行うことも可能である。ただし、この場合にはタスクの実行時間であるexecution time項目の更新は行わない、もしくは登録可能な最大値で更新することになる。
【０１３２】
また、上記で説明した各実施例におけるＰＭ装置は、タスクの実行開始から実行終了までタスクに関する実行状況を収集するとしたが、タスクの実行終了までの間に収集中のＰＭ情報をTIDとともにスケジューラ補助部６、６’に送信する機能が必要となる。この場合、送信するきっかけとしてはタイマによる一定間隔ごと送信処理や、ＰＭ情報のあるデータが設定した閾値を超えた場合に送信処理を行うことなどが考えられる。さらにスケジューラ補助部６、６’が、ＰＭ装置へ能動的に収集途中のＰＭ情報の送信を要求する方法などを適用しても良い。
【０１３３】
また、上記で説明した各実施例におけるタスクのコア割当先変更を行うのは、IPC（処理効率）が閾値を下回った場合であったが、これに限るものではなく、“IPC×周波数（処理性能）” が閾値を下回った場合、や“IPC×周波数／単位時間当たりの消費電力（消費電力）”が閾値を下回った場合にも、同様にタスクの割当先コアの変更を行うようにしても良いことは勿論である。
【０１３４】
このような場合には、図７のコア情報テーブル２３にコア毎の動作周波数、及び、単位時間当たりの消費電力を追加すればよい。その場合のコア情報テーブル２３’は、図３０のようになる。
【０１３５】
ところで、プロセッサコアは、周波数と消費電力との関係は図３１に示したように、電圧が変動なら動作周波数を上げるために電圧を上げる必要があり、図示したように電圧が一定の場合より大幅に向上する。一般にプロセッサコアは周波数の変更設定できるため、周波数の変更設定が行われた都度、コア情報テーブルには２３’には、そのプロセッサコアにそのとき設定されている周波数と、図３１により定まる消費電力とが保存されるようにしておく。
【０１３６】
このようにしておけば、ＩＰＣ値を受信した際に、コア選択装置１２’がコア情報テーブル２３’を参照することにより、“IPC×周波数”や、“IPC x 周波数 x 単位時間当たりの消費電力”を算出することが可能となる。
【０１３７】
また、上記で説明した各実施例のプロセッサコア部５は、いずれも同一のＩＳＡ（命令形式を二進数のオペコードのセットで表現したもの）で構成されるオブジェクトコードを実行可能であるとしたが、一部、あるいは、互いに異なった種類のＩＳＡで構成されるオブジェクトコードのみを実行可能である場合にも適用可能である。この場合には、例えば、
それぞれのＩＳＡで実行可能なタスクに対応するオブジェクトコードを用意しておき、
タスクを割り当てるコアプロセッサ部５が決定すると、そのコアプロセッサ部５の種類に対応するオブジェクトコードが格納されるアドレスを知らせるようにし、そのプロセッサコア部５は、そのアドレスからオブジェクトコードを得るようにすれば良い。また別の方法としては、動的にバイナリトランスレーションを実行することによって割り当て先のコアで実行可能なオブジェクトコードを生成する方法、などでも実現できる。
【０１３８】
また、上記で説明した各実施例のプロセッサコア部５は、いずれも同一のＩＳＡで構成されるオブジェクトコードを実行可能であるとしたが、コアＢ、コアＣは、コアＡのＩＳＡで構成されるオブジェクトコードのうち、一部のみを実行可能とするようにしても良い。
【０１３９】
なお、この場合には、実行可能なオブジェクトコードに制限があるため、コアＢ、コアＣへのタスクの割り当ても制限されることは勿論である。
【０１４０】
また、上記で説明した各実施例のスケジューラ補助部６、６’は、ハードウェアで実現するとして説明してきたが、機能ブロックの一部もしくは全てをソフトウェアで実施してもよい。この場合、一部のみをソフトウェアで実施する際には、各実施例で示してきた各テーブルが、このソフトウェアを実行するプロセッサコア装置から読み書き可能であることが必要となる。
【０１４１】
また、上記で説明した各実施例のタスク情報テーブル２４、２４’を、ＯＳもしくはアプリケーションソフトが直接読み書き可能とすることで、例えば、プロセッサ装置１の電源をオフにする前にタスク情報テーブル２４、２４’をディスク装置３上に保存し、またその後、プロセッサ装置１の電源がオンになった時点で保存しておいたタスク情報テーブル情報２４、２４’をスケジュール補助部６、６’上のタスク情報テーブル２４、２４’に登録するといった機能も実現できる。さらにアプリケーションソフトウェアごとに予め用意されたタスク情報テーブル２４、２４’を持たせ、これを実行前にスケジューラ補助部６、６’のタスク情報テーブル２４、２４’に登録しておくことで、そのアプリケーションソフトウェアの最初の実行からタスクの特性を計測することなく効率の良い処理を実現させることも可能である。
【図面の簡単な説明】
【０１４２】
【図１】本実施の形態に係るシステム全体の構成を示す図。
【図２】プロセッサ装置１の全体構成を示す図。
【図３】プロセッサ装置１の全体の概略動作を示す図。
【図４】コアＡ〜コアＣが備える処理機構の一例を示した図。
【図５】ＰＭ情報の一例を示す図。
【図６】スケジューラ補助部６の機能ブロック図。
【図７】ある状態のタスクキュー２１の一例を示す図。
【図８】タスクの状態の遷移を示す図。
【図９】ある状態のコア管理テーブル２２の一例を示す図。
【図１０】ある状態のコア情報テーブル２３の一例を示す図。
【図１１】ある状態のタスク情報テーブル２４の一例を示す図。
【図１２】タスク情報テーブル２４の更新のフローを示したフローチャートの一部。
【図１３】タスク情報テーブル２４の更新のフローを示したフローチャートの一部。
【図１４】閾値テーブルの一例を示す図。
【図１５】各閾値との比較結果の一例を示す図。
【図１６】スコアの計算結果の一例を示す図。
【図１７】タスク管理部１１の内部の機能ブロック図
【図１８】タスク管理部１１の動作の概略フローを示す図。
【図１９】タスク割り当て決定部３２の詳細な動作の概略フローを示す図。
【図２０】コアタイプ毎割り当て可否テーブルの一例を示す図。
【図２１】割り当て候補TIDテーブルの一例を示す図。
【図２２】コア状態を反映したタスク毎スコアテーブルの一例を示す図。
【図２３】実行可能タスクスコアテーブルの一例を示す図。
【図２４】コアＡ〜コアＤが備える処理機構の一例を示した図。
【図２５】スケジューラ補助部６’の内部の機能ブロック図。
【図２６】タスク情報テーブル２４’の一例を示す図。
【図２７】タスク情報テーブル２４’の更新のフローを示したフローチャートの一部。
【図２８】タスク情報テーブル２４’の更新のフローを示したフローチャートの一部。
【図２９】コア状態を反映したタスク毎スコアテーブルの一例を示す図。
【図３０】ある状態のコア情報テーブル２３’の一例を示す図。
【図３１】プロセッサコア５の周波数と消費電力の関係を示す表。
【符号の説明】
【０１４３】
１…プロセッサ装置
２…主記憶装置
３…ディスク装置
４…外部入出力装置
５…プロセッサコア部
６、６’…スケジューラ補助部
７…システムバスＩ／Ｆ
１１、１１’…タスク管理部
１２、１２’…コア選択部
２１…タスクキュー
２２…コア管理テーブル
２３…コア情報テーブル
２４、２４’…タスク情報テーブル
２５…ＰＭデータバッファ
【図１】
2008090546.tif 000003
【図２】
2008090546.tif 000004
【図３】
2008090546.tif 000005
【図４】
2008090546.tif 000006
【図５】
2008090546.tif 000007
【図６】
2008090546.tif 000008
【図７】
2008090546.tif 000009
【図８】
2008090546.tif 000010
【図９】
2008090546.tif 000011
【図１０】
2008090546.tif 000012
【図１１】
2008090546.tif 000013
【図１２】
2008090546.tif 000014
【図１３】
2008090546.tif 000015
【図１４】
2008090546.tif 000016
【図１５】
2008090546.tif 000017
【図１６】
2008090546.tif 000018
【図１７】
2008090546.tif 000019
【図１８】
2008090546.tif 000020
【図１９】
2008090546.tif 000021
【図２０】
2008090546.tif 000022
【図２１】
2008090546.tif 000023
【図２２】
2008090546.tif 000024
【図２３】
2008090546.tif 000025
【図２４】
2008090546.tif 000026
【図２５】
2008090546.tif 000027
【図２６】
2008090546.tif 000028
【図２７】
2008090546.tif 000029
【図２８】
2008090546.tif 000030
【図２９】
2008090546.tif 000031
【図３０】
2008090546.tif 000032
【図３１】
2008090546.tif 000033