(57)【特許請求の範囲】
【請求項１】
１つのプロセッサーに各々独立して演算処理を行う複数のコアを備えるマルチコアプロセッサの制御方法において、
所定時間内での各コアの稼働率を計算し全コアの稼働率を合計し、
前記合計した全体稼働率に応じて稼働するコア数を決定し、
前記決定したコア数に応じて稼働するコアを選択し、
前記各コアの稼働率は、所定時間内での稼働回数であり、
各コアの稼働回数を合計して全コアの稼働率を算出することを特徴とするマルチコアプロセッサ制御方法。
【請求項２】
例外処理の発生を検出したとき全コアを稼働させることを特徴とする請求項１記載のマルチコアプロセッサ制御方法。
【請求項３】
例外処理の発生に伴い全コアを稼働させた後に、所定時間経過後において例外処理を行う状態が解消したことを検出したときには、前記コアの選択処理を再開することを特徴とする請求項２記載のマルチコアプロセッサ制御方法。
【請求項４】
前記例外処理は、請求項１記載のマルチコアプロセッサ制御方法の作動が適切に行われていないことを検出したときに行うことを特徴とする請求項２記載のマルチコアプロセッサ制御方法。
【請求項５】
１つのプロセッサに各々独立して演算処理を行う複数のコアを備えるマルチコアプロセッサの制御装置において、
所定時間内での各コアの稼働率を計算するコア稼働率計算手段と、
前記コア稼働率計算手段で計算した各コアの稼働率を合計し、プロセッサの全体稼働率を算出する全体稼働率算出手段と、
プロセッサの全体稼働率と稼働コア数との関係を対応して記憶する稼働コア数記憶手段と、
プロセッサの全体稼働率により前記稼働コア数記憶手段から稼働コア数を決定する稼働コア数決定手段と、
前記稼働コア数決定手段で決定したコア数に対応して稼働するコアを選択する稼働コア選択手段とを備え、
前記コア稼働率計算手段では、所定時間内での各コアの稼働回数により各コアの稼働率を求め、前記全体稼働率算出手段では、各コアの稼働回数を合計して全体稼働率を算出することを特徴とするマルチコアプロセッサ制御装置。
【請求項６】
マルチコアプロセッサの例外処理発生状態を検出する例外処理発生検出手段を備え、
前記例外処理発生検出手段で例外処理発生状態になったことを検出したとき、全てのコアの稼働を決定する手段を備えることを特徴とする請求項５記載のマルチコアプロセッサ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチコアを備えたプロセッサを搭載したユニットにおける消費電力を低減する制御方法及びその方法を実施する装置に関する。
【背景技術】
【０００２】
従来から用いられてきた一般的なマイクロプロセッサでは、パッケージの中には命令発行部や演算部などを組み合わせた、一つの部品として動作するプロセッサコアが１セット組み込まれている。このような単一プロセッサを用いて性能を向上させるため、従来よりクロック周波数を上げるクロックアップの手法が用いられてきた。しかしながらクロックアップに伴う消費電力増大と発熱は大きなネックとなり、他の手法の開発が求められてきた。
【０００３】
その対策として、プロセッサを複数個並列動作可能に接続して、効率よく処理を行うことができるようにしたマルチプロセッサの技術が開発され、広く利用されるようになっている。しかしながら単に複数個のプロセッサを並列動作可能に接続すると、その個数が多くなると大型化せざるを得ず、そのプロセッサの使用範囲は限られてしまうという問題がある。その対策として近年の高密度のＬＳＩ製作技術の進歩により、１つのプロセッサに互いに独立して作動することができるプロセッサコアを複数設ける、マルチコアプロセッサが開発され、広く使用されるようになってきた。
【０００４】
マルチコアプロセッサでは、各プロセッサコアは基本的に独立しているため、それぞれのプロセッサコアは他のプロセッサコアに影響されることなく動作でき、マルチコアプロセッサの原理はマルチプロセッサと殆ど同じであり、複数のプロセッサコアで処理を分担し、その分だけ性能を向上させることができる。したがって、マルチコアプロセッサに搭載するコアの数を増やせば、その分だけ性能が上がることとなる。
【０００５】
そのためマルチコアとしてコアを２個備えたデュアルコアプロセッサから、４個備えたクアッドコアプロセッサ等、その個数も次第に多くなっている。このようなマルチコアプロセッサは、ＯＳからは複数のマイクロプロセッサとして扱われ、動作感もマルチプロセッサ構成と殆ど変わらないため、ユーザやプログラマはマルチコアプロセッサ上での動作を特に意識せずに作業を行うことができるため、利用しやすいプロセッサとしても注目されている。
【０００６】
なお、複数のプロセッサからなるマルチプロセッサシステムにおいて、多くの処理能力を必要としない場合に、各プロセッサの利用量を監視し、利用量が少ないプロセッサを特定して停止またはサスペンドする技術は特開平１１−２０２９８８号公報に開示されている。
【特許文献１】特開平１１−２０２９８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
前記のようにマルチコアプロセッサにおいては１つのプロセッサに複数個のプロセッサを搭載し、全体として小型で且つプロセッサが一つにまとまっているため取り扱いやすく、次第に安価になっているため、小型の電気機器にも広く用いられようとしている。しかしながら、この高性能のマルチコアプロセッサを使用するときには、例えばそのマルチコアプロセッサが１つのプロセッサに４個のコアを備えたクアッドコアプロセッサの時、必ずしも常に４個のコアを用いる必要がないことがある。
【０００８】
即ち、特定の電気機器をより高性能化しようとするとき、特定の機能を行うとき短時間に多くの処理量を必要とすることにより、コアを４個備えたクアッドコアプロセッサを搭載しようとしたとき、特に大容量の処理を行う機能を作動させるときには４個のコアがフル稼働して対応し、所望の機能を行わせることができるようになっても、それ以外の機能を行わせるときにはこのような高速処理を必要としないことが多い。
【０００９】
しかしながら、従来のマルチコアプロセッサは、現在処理するタスクがないとき、或いは１つのタスクの中のスレッド処理を行わない場合でも、常に何らかの処理を行うために待機して稼働状態となっており、そのための電力を必要としている。このような無用な電力消費は、一般家庭用の機器でも問題となるが、特に電池で作動するような携帯機器や、照明機器も含めた数多くの機器の電力を供給しているバッテリーから電力供給を行う、例えば車両搭載機器にとっては大きな負担となり、その対策が求められている。更に、消費電力が高い場合は発熱量が多いため、各種の発熱を押さえる対策や、発生した熱の対策を必要とし、全体としてコストアップの原因となる。
【００１０】
なお、前記従来技術として挙げた特許文献１記載の技術では、マルチプロセッサシステムにおいて多くの処理能力を必要としない場合に、各プロセッサの利用量を監視し、利用量が少ないプロセッサを特定して停止またはサスペンドする技術は開示されているが、単に特定のプロセッサの作動を制限するのみであり、必ずしも全体のプロセッサから見た効率的なプロセッサの作動制御は行っていない。
【００１１】
したがって本発明は、各々独立して作動可能なプロセッサのコアを複数備えたマルチコアプロセッサにおいて、このプロセッサで処理する全体の処理量が少ないときには、全体として適切な数のコアを稼働させ、全体として稼働させなくても済むコアは稼働させないようにすることにより、消費電力を低減するとともに発熱を押さえ、発熱防止対策や、発生した熱対策に必要なコストを低減することができるマルチコアプロセッサ制御方法及びその方法を実施する装置を提供することを主たる目的とする。
【課題を解決するための手段】
【００１２】
本発明に係るマルチコアプロセッサ制御装置は、前記課題を解決するため、１つのプロセッサーに各々独立して演算処理を行う複数のコアを備えるマルチコアプロセッサの制御方法において、所定時間内での各コアの稼働率を計算し全コアの稼働率を合計し、前記合計した全体稼働率に応じて稼働するコア数を決定し、前記決定したコア数に応じて稼働するコアを選択し、前記各コアの稼働率は、所定時間内での稼働回数であり、
各コアの稼働回数を合計して全コアの稼働率を算出することを特徴とする。
【００２１】
また、本発明に係る他のマルチコアプロセッサ制御方法は、前記マルチコアプロセッサ制御方法において、例外処理の発生を検出したとき全コアを稼働させることを特徴とすることを特徴とする。
【００２２】
また、本発明に係る他のマルチコアプロセッサ制御方法は、前記マルチコアプロセッサ制御方法において、例外処理の発生に伴い全コアを稼働させた後に、所定時間経過後において例外処理を行う状態が解消したことを検出したときには、前記コアの選択処理を再開することを特徴とする。
【００２３】
また、本発明に係る他のマルチコアプロセッサ制御方法は、前記マルチコアプロセッサ制御方法において、前記例外処理を、前記のマルチコアプロセッサ制御方法の作動が適切に行われていないことを検出したときに行うことを特徴とする。
【００２４】
また、本発明に係るマルチコアプロセッサ制御装置は、前記課題を解決する為、１つのプロセッサに各々独立して演算処理を行う複数のコアを備えるマルチコアプロセッサの制御装置において、  所定時間内での各コアの稼働率を計算するコア稼働率計算手段と、  前記コア稼働率計算手段で計算した各コアの稼働率を合計し、プロセッサの全体稼働率を算出する全体稼働率算出手段と、  プロセッサの全体稼働率と稼働コア数との関係を対応して記憶する稼働コア数記憶手段と、  プロセッサの全体稼働率により前記稼働コア数記憶手段から稼働コア数を決定する稼働コア数決定手段と、  前記稼働コア数決定手段で決定したコア数に対応して稼働するコアを選択する稼働コア選択手段とを備え、  前記コア稼働率計算手段では、所定時間内での各コアの稼働回数により各コアの稼働率を求め、前記全体稼働率算出手段では、各コアの稼働回数を合計して全体稼働率を算出することを特徴とする。
【００３１】
また、本発明に係るマルチコアプロセッサ制御装置は、前記マルチコアプロセッサ制御装置に於いて、マルチコアプロセッサの例外処理発生状態を検出する例外処理発生検出手段を備え、前記例外処理発生検出手段で例外処理発生状態になったことを検出したとき、全てのコアの稼働を決定する手段を備えることを特徴とする。
【発明の効果】
【００３２】
本発明は上記のように構成したので、各々独立して作動可能なプロセッサのコアを複数備えたマルチコアプロセッサにおいて、このプロセッサで処理する全体の処理量が少ないときには、全体として適切な数のコアを稼働させ、稼働させなくても済むコアは稼働させないようにすることにより、消費電力を低減するとともに、全体の消費電力を低減させることにより発熱を押さえ、発熱防止対策や、発生した熱対策に必要なコストを低減することができるマルチコアプロセッサ制御手法を提供すること
【発明を実施するための最良の形態】
【００３３】
本発明は、マルチコアプロセッサの稼働状態に合わせた適当数のコアのみを作動させるという目的を、１つのプロセッサーに各々独立して演算処理を行う複数のコアを備えるマルチコアプロセッサの制御方法において、所定時間内での各コアの稼働率を計算し全コアの稼働率を合計し、前記合計した全体稼働率に応じて稼働するコア数を決定し、前記決定したコア数に応じて稼働するコアを選択することにより実現した。
【実施例１】
【００３４】
本発明の実施例を図面に沿って説明する。図１は本発明によるマルチコアプロセッサの機能ブロック図であり、１つのプロセッサに４個のコア（Ｃｏｒｅ０〜３）を備えた例を示している。図示の例では１つのタスクが多数のスレッドに分けられ、処理高速化のためにそれぞれのスレッドがスレッドスケジューラー１によって各コアに割り振られて処理を行うようにしている。
【００３５】
それにより図１の例ではタスクリスト２に第１タスク３、第２タスク４・・・と多数のタスクが存在し、例えば第１タスク１について多数のスレッドが存在し、これらのスレッドがスレッドスケジューラ１の指示に従い、コア０〜３で処理される。その際スレッドスケジューラー１は、タスクリストのスレッド情報によりスレッドの割り振り処理を行うこととなる。
【００３６】
したがって図示の例では、コア０〜３は第１タスク３についてコア０で処理することとなるスレッドであるコア０スレッド５、コア１で処理することとなるスレッドであるコア１スレッド６、コア２で処理することとなるスレッドであるコア２スレッド７、コア３で処理することとなるスレッドであるコア３スレッド８が存在することとなる。このようにしてタスク１の処理を行うに際して、コア０ではタスクリスト２で示される第１タスク３について、コア０スレッド５を処理し、同様にコア１ではコア１スレッド６を処理し、コア２ではコア２スレッド７を、コア３ではコア３スレッド８を処理する。このように１つのタスクを多数のスレッドに分割して、図中４個のコアによって並列処理を行う結果、マルチコアプロセッサとして所望の処理を行うことができる。
【００３７】
このようなマルチコアプロセッサにおいて、４個のコア０〜３のうち、予め設定した１つのコアを可動制御用コアである基本コアとする。図示の例ではコア０をこの基本コアとした例を示しており、このコア０にコア０〜３のうち稼働するコアを選択する処理を行う稼働コア選択処理部９を備えている。この稼働コア選択処理部９で行う処理については、後に図２〜図５で詳述するが、図１で示す稼働コア選択処理部９には、コア毎の稼働率を計算するコア毎稼働率計算部１０と、このコア毎稼働率計算部の計算結果に基づいて全体の稼働率を算出する全体稼働率算出部１１と、全体稼働率算出部の算出結果に基づき、また稼働コア記憶部１５で記憶した直前の処理における稼働コア数とによって、稼働率・稼働コア数対応テーブル１３からデータを読み出し、稼働するコア数を決定する稼働コア数決定部１２と、稼働コア数決定部で決定した稼働コア数と必要に応じて直前の稼働コアのデータとに基づいて稼働コアを選択する稼働コア選択部１４とを備えた例を示している。
【００３８】
上記のような機能ブロックからなるマルチコアプロセッサにおいて、本発明においては図２及び図３に示すような作動フローによって順に作動させることができる。図２には本発明の制御にとって基本的なデータとなる各コア毎の稼働率計算処理の作動フローを示しており、図示の例においては各コア毎の処理として、最初に稼働率計測処理を開始するか否かの判別をしている（ステップＳ１１）。
【００３９】
即ち、各コア毎の稼働率を計測するに際して、例えば図４に示すように、所定時間Ｔの間で、各コアが稼働している時間、即ち図中ｔｓ−ｔｆとして示す所定時刻の間の時間Ｔにおける各コアの稼働率を計測するため、計測処理開始時刻としてｔｓが設定され、終了時刻としてｔｆが設定される。したがって図２の作動フローのステップＳ１１ではこの時刻ｔｓになったか否かを判別する。なお、実際の処理に際しては、例えばコア０に予め備えているソフトにより、処理開始指示及び終了指示を行うことにより、時刻を検出することなく実行することもできる。
【００４０】
図２の例においてステップＳ１１で前記のように処理開始指示があり、稼働率計測処理を開始すると判別したときには、次の処理を行う前に稼働率計測単位時間が終了してしまったときのために、稼働率計測単位時間は終了したか否かの判別を行い（ステップＳ１２）、終了したときは後述するステップＳ２１に進み、終了していないときにはステップＳ１３に進む。なお、ステップＳ１１で未だ稼働率計測処理の開始指示がないときにはこの状態で待機する。図４の例においては、コア０は稼働率計測処理を開始した時刻ｔｓ以降において、スレッドＡの処理を開始したことが判別される。ステップＳ１３で未だこのようなスレッドＡの処理が開始されていないときにはステップＳ１２に戻って、稼働率計測単位時間が終了していなければこの作動を繰り返して待機する。
【００４１】
このときステップＳ１１で稼働率計測処理を開始したか否かの判別を行って、開始時刻になったことを検出し、ステップＳ１２で稼働率計測単位時間が終了していないと判別した後、直ちにステップＳ１３でスレッド処理が開始したか否かを判別し、このときにおいて開始していると判別したときには、そのスレッドは稼働率計測開始時刻ｔｓより以前にスレッド処理を開始していたときであり、このような場合は、そのスレッド処理の途中の時刻ｔｓから稼働時間の計測が始まることとなる。
【００４２】
ステップＳ１３でスレッド処理が開始したと判別したときには、その処理の開始時刻をタイマから読み込む。図４の例では、コア０においてスレッドＡの処理を開始したとき、その時の時刻ｔａ１をタイマから読み込む。次いで図示の例では稼働率計測単位時間は終了したか否かを判別している（ステップＳ１５）。即ち、この可動率計測処理に際しては時刻ｔｓからｔｆまでの時間Ｔの間を稼働率計測処理単位時間としており、前記ステップＳ１５では、この稼働率計測単位時間Ｔが終了したか否かを判別している。この稼働率計測単位時間の終了は、制御装置によって計測終了指示があったか否かによって判別することもできる。
【００４３】
ステップＳ１５で未だ稼働率計測処理単位時間が終了していないと判別したときにはステップＳ１６に進み、スレッド処理は終了したか否かを判別する（ステップＳ１６）。図４の例においては、時刻ｔａ１で開始したスレッドＡが終了したか否かを判別することとなる。ここで未だスレッドＡの処理が終了していないと判別したときには、再びステップＳ１５に戻って稼働率計測単位時間Ｔは終了したか否かの判別を行い、これらの作動を繰り返す。
【００４４】
このように未だ稼働率計測単位時間が終了していない間にこのスレッド処理が終了したときには、スレッド処理終了時刻をタイマから読み込む（ステップＳ１７）。図４の例において、コア０のスレッドＡの処理に際しては、時刻ｔａ２において終了しており、この時刻ｔａ２が読み込まれる。
【００４５】
次いで前記ステップＳ１４でタイマから読み込んだスレッド処理開始時刻ｔａ１と、ステップＳ１７でタイマから読み込んだスレッド終了時刻ｔａ２とから稼働時間を算出してその値を記憶する（ステップＳ１８）。この処理に際しては（ｔａ２−ｔａ１）によってスレッドＡの処理時間、即ちコア０におけるスレッドＡの稼働時間Ｔ１を計算することができる。その後再び稼働率計測単位時間は終了したか否かを判別し（ステップＳ１９）、終了していないときには再びステップＳ１２に戻って、前記他の処理のために主として判別処理を行う同様の処理を経由し、このコアにおける次のスレッド処理の開始を待ち、同様の作動を繰り返す。
【００４６】
この処理の過程でステップＳ１５において稼働率計測単位時間が終了したと判別したときには、図示の例ではステップＳ２２に進み、稼働率計測単位時間が終了した時刻をタイマから読み込む。
【００４７】
図４の例においては、スレッドＡの処理後スレッドＢの処理を行っており、このスレッドＢの処理は時刻ｔｂ１で開始し、時刻ｔｂ２で終了している。この処理では前記のようにして稼働時間を（ｔｂ２−ｔｂ１）によりＴ２を求める。コア０においては稼働率計測単位時間Ｔの間に更にスレッドＣの処理も行っており、このスレッドＣでは時刻ｔｃ１で処理を開始し、時刻ｔｃ２で終了しており、その結果（ｔｃ２−ｔｃ１）によってスレッドＣの稼働時間Ｔ３を求める。これらの処理も図２のステップＳ１３からステップＳ１９までの処理を繰り返すことにより行うことができる。
【００４８】
この処理の課程においてステップＳ１３で新たなスレッド処理を開始したと判別した後、ステップＳ１５で稼働率計測単位時間が終了したか否かの判別において、終了したと判別したときには、そのスレッド処理の途中で稼働率計測単位時間が終了したときであり、このような場合はステップＳ２２に進み、図示の例では稼働率計測単位時間の終了時刻をタイマから読み込んでいる。但し、稼働率計測単位時間の終了時刻ｔｆが予め設定されているので、この設定値を直接読み込むことにより、稼働率計測単位終了時刻を取り込む込むようにしても良い。
【００４９】
次いでこのスレッド処理において、スレッド処理開始時刻と、稼働率計測単位時間の終了時刻から稼働時間を前記と同様に算出して記憶する。前記ステップＳ１８及びステップＳ１９において、スレッド処理を行っていないときにおいて、稼働率計測単位時間が終了したときにはステップＳ２２及びステップＳ２３の処理を行った時と共に、稼働率計測単位時間内でのスレッド毎の稼働時間を合計する（ステップＳ２０）。なお、ステップＳ１９で稼働率計測単位時間が終了したと判別したときには、前記のようなステップＳ２０で合計の計算を行うと同時にステップＳ１１に戻って次の稼働率計測単位時間が開始したか否かを判別する。多くの場合は稼働率計測単位時間は連続しているので、その際はステップＳ１９の後、直ちにステップＳ１１からステップＳ１３に進み、前記作動を繰り返すこととなる。
【００５０】
この稼働率計測単位時間内でのスレッド毎の稼働時間を合計する処理に際しては、図４の例においてコア０では、スレッドＡのＴ１とスレッドＢのＴ２とスレッドＣのＴ３とを合計した（Ｔ１＋Ｔ２＋Ｔ３）を計算する。コア１では、スレッドＤのＴ４のみであり、コア２ではスレッドＥのＴ５とスレッドＦのＴ６とを合計し（Ｔ５＋Ｔ６）を計算する。同様にコア３ではスレッドＧのＴ７とスレッドＨのＴ８を合計し（Ｔ７＋Ｔ８）を計算する。
【００５１】
次いでステップＳ２１において稼働率計測単位時間内での稼働率の計算を行い、その計算値を出力する（ステップＳ２４）。この処理においてはコア０においては図４に示すように稼働率η０は［η０＝（Ｔ１＋Ｔ２＋Ｔ３）／Ｔ×１００］を計算し、コア１においては稼働率η１は［η１＝Ｔ４／Ｔ×１００］を計算し、コア２においては稼働率η２は［η２＝（Ｔ５＋Ｔ６）／Ｔ×１００］を計算し、コア３においては稼働率η３は［η３＝（Ｔ７＋Ｔ８）／Ｔ×１００］を計算することにより求める。
【００５２】
本発明によるマイクロプロセッサ制御の基本データとなる各コア毎の稼働率を前記のような手法で求めることができる結果、本発明によるマルチコアプロセッサの制御による稼働コア選択制御処理は図３に示すようにして行うことができる。図３に示す稼働コア選択制御処理の例においては、最初に前記図２に示すような各コア毎の稼働率計算処理を行った後（ステップＳ３１）、即ち、稼働率計測単位時間の終了後に前記コア毎の稼働率計算処理を行った後は、各コアの稼働率計算値を集計して合計稼働率を算出する（ステップＳ３２）。
【００５３】
この合計稼働率の算出に際しては、コアの稼働率η０、コア１の稼働率η１、コア２の稼働率η２、コア３の稼働率η３を合計するものであり、図４に記載しているように、全体稼働率ηは（η０＋η１＋η２＋η３）によって求める。したがってこの値は、例えば全コアが稼働率計測単位時間Ｔの間全て稼働していたときには、η＝４００となり、理論上全て稼働していなかったと仮定したときにはη＝０となる。但し、本発明においては、少なくとも特定のコアで本発明による制御処理を行っているが、その計算処理量は極めて僅かである。
【００５４】
その後このプロセッサにおいて、この稼働率計算単位時間開始の直前における稼働コア数、即ち直前の作動時の稼働コア数と前記のようにして計算した全体稼働率により、稼働コア数をテーブルから読み出す（ステップＳ３３）。このときのテーブルとしては種々の態様のものを用いることができるが、例えば図５に示すような稼働コア数・コア起動/停止タイミングテーブルを用いることができる。
【００５５】
図５に示す稼働コア数・コア起動/停止タイミングテーブルの例においては、全体稼働率ηが０〜４０％の時は、稼働コア数が１であり、同図から明らかなように必ずコア０のみが選択されることとなる。もしもこの状態から次第に全体稼働率が単調に上昇していった場合には、全体稼働率ηが８０％を超えたとき稼働にコア数を２とし、図示の例ではコア１を起動する。次いで全体稼働率ηが１６０％を超えたときに稼働コア数を３とし、図示の例ではコア２も起動する。また、全体稼働率ηが２４０％を超えたときに稼働コア数を４とし、図示の例ではコア３を起動する。即ち全体稼働率が２４０％を超えたときには全コア数４個が初めて全て起動状態となる。
【００５６】
このように、各全体稼働率の状態においてコアの稼働数を設定することにより、コアの稼働数を全体の処理量に応じた数だけ稼働させることができるため、このマルチコアプロセンサの消費電力を低減することができる。しかも前記従来技術のように単に稼働率が少ないコアを停止するのではなく、プロセッサ全体の稼働率に応じて停止コアを調節できるため、プロセッサ全体として最適な稼働コアの制御を行うことができる。    
【００５７】
前記のように全体稼働率が次第に上昇したときには、上記のように稼働コアの制御が行われるものであるが、逆に全体稼働率が４００％の状態で稼働コア数が４個から単調に全体稼働率が低下し、１６０以下に低下したときには稼働コア数３とし、コア３の稼働を停止する。このように図５のテーブルの例では、例えば稼働コア数４個で稼働する状態については、起動するときは２４０％になった時であるのに対して、一旦起動した後は１６０％になるまで４個稼働している。このようなヒステリシス特性を持たせた作動は、後述するように他の全体稼働率でのコア数制御においても同様にして行われる。
【００５８】
前記のように全体稼働率が次第に低下し、１６０％から更に８０％に低下した時稼働コア数を２とし、図示の例ではコア２を停止している。更に全体稼働率が４０％に低下した時に稼働コア数１とし、コア１を停止して、以降はコア０のみで処理を行うこととなる。このような全体稼働率が上昇していくときと降下していくときとでコアの稼働数を異ならせるヒステリシス特性を持たせて設定しているので、全体稼働率が頻繁に変化するとき、コアの起動と停止の頻繁な起動と停止作動を行わせないようにすることができる。
【００５９】
したがって、例えば全体稼働率が（１）１０％−（２）７０％−（３）９０％−（４）４５％−（５）２００％−（６）１５０％−（７）３００％−（８）７０％と順に変化したときには、（１）１０％では稼働コア数１でコア０のみ稼働し、その後の（２）７０％でも稼働コア数１でコア０のみ稼働し、（３）９０％では稼働コア数２で、コア０とコア１を稼働し、その後の（４）４５％でも稼働コア数２で、コア０とコア１を稼働し、その後の（５）２００では稼働コア数３でコア０とコア１とコア２を稼働し、その後の（６）１５０％ではコア稼働数３で変わらず、したがってコア０とコア１とコア２を稼働し、その後の（７）３００％では稼働コア数４で更にコア３も稼働して全コア稼働状態となり、その後の（８）７０％では稼働コア数２で、コア４、更にコア３を停止してコア０とコア１を稼働することとなる。
【００６０】
このように、例えば同じ全体稼働率７０％の時でも、（１）１０％から（２）７０％に変化したときにはコア０のみ稼働し、（７）３００％から（８）７０％に変化したときにはコア０とコア１を稼働し、また、この全体稼働率７０％より低い４５％のときでも（３）９０％からの時にはコア０とコア１を稼働を継続する、というように、単にその時の全体稼働率のデータのみではなく、前の全体稼働率との関係で稼働コアを決定するテーブルとしている。
【００６１】
図３のステップＳ３３ではこのように直前の稼働コア数と、今回計算した合計稼働率により稼働コア数を読み出した後は、図３の例では稼働コアを選択し、これを記憶する（ステップＳ３４）。即ち、図５のテーブルの例では、コア０〜３についてコア０を基本コアとし、コアが２個必要な全体稼働率の時は、常にコア１を追加し、更に稼働コアが３個必要な全体稼働率の時には常にコア２を起動し、コア３については全コアを稼働する必要がある全体稼働率のときのみ稼働する例を示したが、全体稼働率に対して稼働するコア数は、このように設定されても、稼働するコアの選択については、必ずしも前記の例によらず、他の手法により駆動することもできる。
【００６２】
その際には、例えば全体稼働率に応じて稼働するコアの選択順序を、前記のコア０、１、２、３の順のほか、コア０、２、３、１の順とし、或いはコア０、３、１、２の順にする等、予め設定した全体稼働率に対応した特定コアの作動を、種々の態様で実施することができる。なお、前記実施例では図１に示すように、コア０に本発明の処理を行うソフトを組み込んで、この作動処理を行っているため、このコアを基本コアとして常に作動させている。したがって、このソフトをコア１に組み込んで前記作動処理を行うときには、コア１を基本コアとして常に稼働させることとなる。
【００６３】
また、前記の例においても、最初はこのコア０、１、２、３の順序で全体稼働率に合わせて作動させていても、その後のスレッド処理において例えば基本コア０のみ稼働している状態等、適当なタイミングを見計らい、例えばコア０、２、３、１の順で作動させ、その後コア０、２、１、３の順序で、またコア０，３、１、２の順序で、またコア０、３、２、１の順序で、またコア０、１、３、２の順序で作動する等、種々の態様で作動を変更するように予め設定しても良い。その時には基本コアをコア０とするとき、他のコアの稼働をできる限り均一化するように制御して処理負担の均一化を図ることができる。その際には基本コア以外はランダムに変更することも可能である。
【００６４】
図３の作動の例においてはステップＳ３４において前記のような稼働コアの選択を行うものであり、選択したコアを記憶しておく。このとき、コア数のみを記憶しておいても良い。次いで図示の例では例外処理が発生したか否かを判別している。即ち、このプロセッサの一連のスレッド処理の過程で、大量データ処理の急な割り込みが入ったときのように、緊急に大容量の処理の必要性が発生したときには、ステップＳ３５で例外処理が発生したと判別し、その際には全コアでの稼働処理を直ちに行うことができるようにする（ステップＳ３６）。
【００６５】
このときの例外処理としては予め各種の状態を設定しておくことができ、例えばこのマルチコアプロセッサ制御が適切な作動を行っていないことを検出した時に、前記のようなコア選択処理を解除するため、即ち本発明による処理の安全対策として用いても良い。ステップＳ３６において、例えば緊急に大量のデータ処理作業が入って全コアの稼働処理を行ったときには、所定時間が経過したか否かを判別し（ステップＳ３７）、所定時間が経過するまではステップＳ３６に戻って前記作動を定期的に繰り返し、所定時間が経過したときには再びステップＳ３１に戻って前記作動を繰り返す。未だステップＳ３５で例外処理が発生していないと判別したときには、図１のスレッドスケジューラ１によりステップＳ３４で選択したコアに対して、１つのタスクを複数に分割したスレッドを割り振り（ステップＳ３８）、再びステップＳ３１に戻って同様の作動を繰り返す。
【００６６】
前記の例においては、マルチコアプロセッサの各コアに対して、１つのタスクを細分化したスレッドの処理を、スレッドスケジューラにより処理する例を示したが、そのほかに１つの比較的大きなタスクを、複数のタスクに分割し、各タスクについてタスクスケジューラにより任意のコアに各タスクを割り振る際にも、前記手法により同様に作動させることができる。その際には図１のスレッドスケジューラはタスクスケジューラとなり、タスクリスト２の、例えば第１タスクについて細分化したコア０タスク、コア１タスク、コア２タスク、コア３タスクを、各コアに対して割り振ることとなる。
【００６７】
また、前記の例においては各コアの稼働率を計算するに際して、所定時間内で処理した各スレッドの稼働時間を求め、これを合計して各コアの稼働時間を求めることにより稼働率を計算する例を示したが、それ以外に所定時間内において処理したスレッド或いはタスクの数を求め、これを各コアの稼働率として、前記手法によりこのプロセッサを制御するように構成しても良い。それにより、稼働率の計算処理を簡略化して、この演算を行う基本コアの処理負担を低減することができる。  
【図面の簡単な説明】
【００６８】
【図１】本発明の実施例の機能ブロック図である。
【図２】同実施例における各コア毎の稼働率計算処理の作動フロー図である。
【図３】同実施例における稼働コア選択制御処理の作動フロー図である。
【図４】各コア毎の稼働率計算例を示す図である。
【図５】稼働コア数決定時、及び稼働コアを選択するテーブル例を示す図である。
【符号の説明】
【００６９】
１  スレッド・スケジューラ  
２  タスクリスト
３  第１タスク
４  第２タスク
５  コア０スレッド
６  コア１スレッド
７  コア２スレッド
８  コア３スレッド
９  稼働コア選択処理部
１０  コア毎稼働率計算部
１１  全体稼働率算出部
１２  稼働コア数決定部
１３  稼働率・稼働コア数対応テーブル
１４  稼働コア選択部
１５  稼働コア記憶部
【図１】
0005182792.tif 000002
【図２】
0005182792.tif 000003
【図３】
0005182792.tif 000004
【図４】
0005182792.tif 000005
【図５】
0005182792.tif 000006