(57)【要約】本発明は，複数のタスクを分散して処理する複数の処理装置を有する分散処理システムのタスクスケジューリング装置を提供する。このタスクスケジューリング装置は，第１のタスクスケジューリング方法として，温度の最も低い処理装置にタスクを割り当てる。また，タスクスケジューリング装置は，第２のタスクスケジューリング方法として，各処理装置の温度と，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値とに基づいて，タスクを選択し，選択したタスクを処理装置に割り当てる。たとえば，第２のタスクスケジューリング方法として，温度の低い処理装置には，温度上昇の度合いの大きなタスク（たとえば単位時間当たりに処理される命令数の多いタスク）が割り当てられる。このようなスケジューリング方法により，各処理装置の温度を均一にすることができる。
2003083693.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムの前記各処理装置へのタスクスケジューリングを実行するタスクスケジューリング装置であって，
前記計測装置により計測された各処理装置の温度または消費電力を比較する比較部と，
前記比較部の比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てるタスク割り当て部と，
を備えているタスクスケジューリング装置。
【請求項２】
請求の範囲第１項において，
前記タスクスケジューリング装置は，前記複数の処理装置の少なくとも１つに設けられ，自己または他の処理装置に前記タスクスケジューリングを実行する，
タスクスケジューリング装置。
【請求項３】
請求の範囲第１項または第２項において，
前記比較部は，前記複数の処理装置のうち，アイドル状態にある処理装置の温度または消費電力を比較する，
タスクスケジューリング装置。
【請求項４】
複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムの前記各処理装置へのタスクスケジューリングを実行するタスクスケジューリング装置であって，
各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値をタスクごとに記憶する記憶部と，
タスクの割り当て対象となる処理装置についての，前記計測装置により計測された温度または消費電力と，前記記憶部に記憶された前記特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択し，該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てるタスク割り当て部と，
を備えているタスクスケジューリング装置。
【請求項５】
請求の範囲第４項において，
前記特性値が，各タスクの単位時間当たりに処理される命令数を表すイベント頻度であり，
前記タスク割り当て部は，前記タスクの割り当て対象となる処理装置の温度が前記複数の処理装置の平均温度以上もしくは平均温度より高いか，または，前記処理装置の消費電力が前記複数の処理装置の平均消費電力以上もしくは平均消費電力よりも高い場合には，これまでに実行されたすべてのタスクのイベント頻度の平均値以下または平均値より小さなイベント頻度を有するタスクを実行待ちタスクから選択して前記処理装置に割り当てる，
タスクスケジューリング装置。
【請求項６】
請求の範囲第５項において，
前記タスク割り当て部は，前記これまでに実行されたタスクのイベント頻度の平均値以下または平均値より小さなイベント頻度を有するタスクが実行待ちのタスクの中に存在しない場合には，実行待ちのタスクの中から最小のイベント頻度を有するタスクを前記処理装置に割り当てる，
タスクスケジューリング装置。
【請求項７】
請求の範囲第４項において，
前記特性値が，各タスクの単位時間当たりに処理される命令数を表すイベント頻度であり，
前記タスク割り当て部は，前記タスクの割り当て対象となる処理装置の温度が前記複数の処理装置の平均温度以下もしくは平均温度より小さいか，または，前記処理装置の消費電力が前記複数の処理装置の平均消費電力以下もしくは平均消費電力より小さい場合には，これまでに実行されたすべてのタスクのイベント頻度の平均値以上または平均値より大きなイベント頻度を有するタスクを実行待ちタスクから選択して前記処理装置に割り当てる，
タスクスケジューリング装置。
【請求項８】
請求の範囲第７項において，
前記タスク割り当て部は，前記これまでに実行されたタスクのイベント頻度の平均値以下または平均値より小さなイベント頻度を有するタスクが実行待ちのタスクの中に存在しない場合には，実行待ちのタスクの中から最大のイベント頻度を有するタスクを前記処理装置に割り当てる，
タスクスケジューリング装置。
【請求項９】
請求の範囲第４項において，
前記特性値が，各タスクの単位時間当たりに処理される命令数を表すイベント頻度であり，
前記タスク割り当て部は，前記複数の処理装置における，前記タスクの割り当て対象となる処理装置の温度の順位を求め，実行待ちタスクをイベント頻度の値に基づいてソートし，前記温度の順位に対応するイベント頻度の順位を有するタスクを選択して割り当てる，
タスクスケジューリング装置。
【請求項１０】
請求の範囲第９項において，
前記タスク割り当て部は，前記温度の順位が高いものからの順位である場合には，前記タスクを，低いイベント頻度から高いイベント頻度に向けてソートし，前記温度の順位が低いものからの順位である場合には，前記タスクを，高いイベント頻度から低いイベント頻度に向けてソートする，
タスクスケジューリング装置。
【請求項１１】
請求の範囲第４項において，
前記記憶部に記憶された特性値は，タスクに含まれる命令の個数，単位時間当たりに処理される前記命令の個数，タスクの実行時に行われるメモリへのアクセス回数，単位時間当たりのメモリへのアクセス回数，前記命令と前記アクセス回数との合計値，単位時間当たりの前記命令と前記アクセス回数との合計値，または前記タスクの処理に要する処理時間である，
タスクスケジューリング装置。
【請求項１２】
請求の範囲第５項から第１１項のいずれか１項において，
前記命令は浮動小数点演算命令である，タスクスケジューリング装置。
【請求項１３】
請求の範囲第４から第１２項のいずれか１項において，
前記タスクスケジューリング装置は，前記複数の処理装置の１つであり，自己または他の処理装置に前記タスクスケジューリングを実行する，
タスクスケジューリング装置。
【請求項１４】
複数のタスクを分散して処理する複数の処理装置を有する分散処理システムであって，
前記複数の処理装置のそれぞれの温度または消費電力を計測する計測装置と，
前記複数の処理装置とは別装置として設けられ，または，前記複数の処理装置の少なくとも１つに設けられ，前記計測装置により計測された各処理装置の温度または消費電力を比較し，前記比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てるタスクスケジューリング装置と，
を備えている分散処理システム。
【請求項１５】
複数のタスクを分散して処理する複数の処理装置を有する分散処理システムであって，
前記複数の処理装置のそれぞれの温度または消費電力を計測する計測装置と，
各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値をタスクごとに記憶する記憶装置と，
タスクの割り当て対象となる処理装置についての，前記計測装置により計測された温度または消費電力と，前記記憶装置に記憶された前記特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択し，該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てるタスク割り当て部と，
を備えている分散処理システム。
【請求項１６】
複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムにおける前記複数の処理の少なくとも１つにより，または，前記複数の処理装置とは別個に設けられた制御装置により実行されるタスクスケジューリング方法であって，
前記計測装置により計測された各処理装置の温度または消費電力を比較し，
前記比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てる，
タスクスケジューリング方法。
【請求項１７】
複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムにおける前記複数の処理の少なくとも１つにより，または，前記複数の処理装置とは別個に設けられた制御装置により実行されるタスクスケジューリング方法であって，
タスクの割り当て対象となる処理装置についての，前記計測装置により計測された温度または消費電力と，内部のメモリまたは外部の共有メモリに記憶され，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択し，
該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てる，
タスクスケジューリング方法。
【請求項１８】
複数のタスクを分散して処理する複数の処理装置の少なくとも１つまたは前記複数の処理装置とは別個に設けられた制御装置に設けられたコンピュータに，
各処理装置の温度または消費電力を計測する計測装置によって計測された前記各処理装置の温度または消費電力を比較する手順と，
前記比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てる手順と，
を実行させるためのプログラム。
【請求項１９】
複数のタスクを分散して処理する複数の処理装置の少なくとも１つまたは前記複数の処理装置とは別個に設けられた制御装置に設けられたコンピュータに，
タスクの割り当て対象となる処理装置についての，計測装置により計測された温度または消費電力と，内部のメモリまたは外部の共有メモリに記憶され，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択する手順と，
該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てる手順と，
を実行させるためのプログラム。
【発明の詳細な説明】
技術分野
本発明は，タスクスケジューリング装置およびタスクスケジューリング方法に関し，特に，複数のタスクを分散して処理する複数の処理装置を有する分散処理システムのタスクスケジューリング装置およびタスクスケジューリング方法に関する。また，本発明は，タスクスケジューリングをコンピュータに実行させるプログラムに関する。
背景技術
近年，ＣＰＵ，ＭＰＵ等のプロセッサの著しい性能向上に伴い，プロセッサの消費電力が増大し，これによりプロセッサの発熱量が増加している。その結果，プロセッサの温度上昇が問題となっている。
このため，プロセッサの温度上昇を防ぐために，プロセッサにファンを装着したり，プロセッサを格納した筐体内の風流を最適化したりする等の熱対策が講じられている。しかし，プロセッサの性能向上に伴う最大ＴＤＰ（Ｔｈｅｒｍａｌ  Ｄｅｓｉｇｎ  Ｐｏｗｅｒ：熱設計電力）の増加により，ファンの大型化，消費電力の増大，および筐体容積の増加を招いており，その結果，装置全体のコストが増加し，また装置が大型化するという問題が発生している。
また，プロセッサの電圧または周波数を制御する機構を設け，この機構により，プロセッサの電圧や周波数を，必要に応じて低減する熱対策も講じられている。しかし，この対策によると，プロセッサの処理能力が低下し，好ましくない。
一方で，プロセッサやプロセッサを有するコンピュータ等の処理装置を複数設けて，タスクを複数の処理装置に分散して処理させることにより，処理の負荷分散または機能分散を行い，処理の高速化を図る分散処理システムないしは並列処理システムが実用化されてきている。
このようなシステムでは，複数の処理装置が稼動するので，熱対策はより重要となるが，複数の処理装置が存在するために，特有の問題も生じている。すなわち，ある特定のプロセッサまたはプロセッサ群の温度上昇が他のプロセッサに対して大きくなる場合があり，しかも，そのようなプロセッサ（群）は，その時々の処理において変化し一定でないために，結果的に，全プロセッサに対して上記のようなファンを取り付ける必要があり，大幅なコストの増加を招く。また，電圧や周波数を低減させる方法では，処理の高速化を図るために，複数の処理装置を設けたマルチプロセッサ構成や分散コンピューティング環境の意味がなくなる。
発明の開示
本発明は，このような状況に鑑みなされたものであり，その目的は，複数の処理装置を有する分散処理システムにおいて，各処理装置の温度をほぼ均等にするためのタスクスケジューリング装置およびタスクスケジューリング方法を提供することにある。
前記目的を達成するために，本発明の第１の側面によるタスクスケジューリング装置は，複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムの前記各処理装置へのタスクスケジューリングを実行するタスクスケジューリング装置であって，前記計測装置により計測された各処理装置の温度または消費電力を比較する比較部と，前記比較部の比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てるタスク割り当て部と，を備えている。
本発明の第１の側面によるタスクスケジューリング方法は，複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムにおける前記複数の処理の少なくとも１つにより，または，前記複数の処理装置とは別個に設けられた制御装置により実行されるタスクスケジューリング方法であって，前記計測装置により計測された各処理装置の温度または消費電力を比較し，前記比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てるものである。
本発明の第１の側面によるプログラムは，前記第１の側面によるタスクスケジューリング方法を，複数のタスクを分散して処理する処理装置の少なくとも１つまたは前記複数の処理装置とは別個に設けられた制御装置に設けられたコンピュータに実行させるものである。
また，本発明の第１の側面による分散処理システムは，複数のタスクを分散して処理する複数の処理装置を有する分散処理システムであって，前記複数の処理装置のそれぞれの温度または消費電力を計測する計測装置と，前記複数の処理装置とは別装置として設けられ，または，前記複数の処理装置の少なくとも１つに設けられ，前記計測装置により計測された各処理装置の温度または消費電力を比較し，前記比較の結果，前記計測装置により計測された温度または消費電力が最も低い処理装置にタスクを割り当てるタスクスケジューリング装置と，を備えている。
ここで，前記タスクスケジューリング装置は，前記複数の処理装置の少なくとも１つが備えていてもよいし，前記複数の処理装置とは別個の装置として設けられてもよい。
本発明の第１の側面によると，温度または消費電力の最も低い処理装置にタスクが割り当てられるので，温度または消費電力の最も低い処理装置はタスクの処理に伴い発熱し，温度が上昇する一方，温度または消費電力の高い他の処理装置は，タスクが割り当てられないことにより，発熱量が減少する。その結果，各処理装置の温度を均一にさせて行くことができる。
本発明の第２の側面によるタスクスケジューリング装置は，複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムの前記各処理装置へのタスクスケジューリングを実行するタスクスケジューリング装置であって，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値をタスクごとに記憶する記憶部と，タスクの割り当て対象となる処理装置についての，前記計測装置により計測された温度または消費電力と，前記記憶部に記憶された前記特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択し，該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てるタスク割り当て部と，を備えている。
本発明の第２の側面によるタスクスケジューリング方法は，複数のタスクを分散して処理する複数の処理装置と各処理装置の温度または消費電力を計測する計測装置とを有する分散処理システムにおける前記複数の処理の少なくとも１つにより，または，前記複数の処理装置とは別個に設けられた制御装置により実行されるタスクスケジューリング方法であって，タスクの割り当て対象となる処理装置についての，前記計測装置により計測された温度または消費電力と，内部のメモリまたは外部の共有メモリに記憶され，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択し，該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てるものである。
本発明の第２の側面によるプログラムは，前記第２の側面によるタスクスケジューリング方法を，複数のタスクを分散して処理する処理装置の少なくとも１つまたは前記複数の処理装置とは別個に設けられた制御装置に設けられたコンピュータに実行させるものである。
本発明の第２の側面による分散処理システムは，複数のタスクを分散して処理する複数の処理装置を有する分散処理システムであって，前記複数の処理装置のそれぞれの温度または消費電力を計測する計測装置と，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値をタスクごとに記憶する記憶装置と，タスクの割り当て対象となる処理装置についての，前記計測装置により計測された温度または消費電力と，前記記憶装置に記憶された前記特性値とに基づいて，前記タスクの割り当て対象となる処理装置に割り当てるタスクを実行待ちのタスクから選択し，該選択したタスクを前記タスクを割り当てる対象となる処理装置に割り当てるタスク割り当て部と，を備えている。
ここで，前記タスクスケジューリング装置は，前記複数の処理装置の少なくとも１つが備えていてもよいし，前記複数の処理装置とは別個の装置として設けられてもよい。
本発明の第２の側面によると，各処理装置の温度または消費電力と，各タスクの実行に伴う各処理装置の温度上昇または消費電力増加の度合いに関連するタスクの特性値とに基づいて，たとえば温度または消費電力の大きな処理装置には，温度上昇または消費電力増加の度合いが小さいことを示す特性値を有するタスクを割り当て，温度または消費電力の小さな処理装置には，この逆を行うことにより，各処理装置の温度を均一にさせて行くことができる。
発明を実施するための最良の形態
＜第１の実施の形態＞
図１は，本発明の第１の実施の形態による分散処理システム１の構成例を示すブロック図である。この分散処理システム１は，たとえば１つの筐体に収納されるマルチプロセッサシステムであり，ｎ個（ｎは２以上の整数，以下同じ。）のプロセッサＰ１〜Ｐｎ，ｎ個の温度センサＨ１〜Ｈｎ，共有メモリ２，バス３，タイマ４，および通信インタフェース装置（Ｉ／Ｆ）５を備えている。
プロセッサＰ１〜Ｐｎ，共有メモリ２，タイマ４，およびＩ／Ｆ５は，バス３に接続されている。プロセッサＰ１〜Ｐｎは，バス３を介して，共有メモリ２に記憶されたプログラムまたはデータを読み出し，また，処理により生成されたデータまたはプログラムを共有メモリ２に書き込むことができるようになっている。
プロセッサＰ１〜Ｐｎは，たとえばＣＰＵ，ＭＰＵ等，または，ＣＰＵ，ＭＰＵ等とその周辺のハードウェア回路とを備えた装置（たとえばプロセッサボード）により構成される。このプロセッサＰ１〜Ｐｎは，内部にメモリ（キャッシュメモリを含む。）を有し，共有メモリ２に記憶されているＯＳ（ＯＳプログラム）およびアプリケーションプログラム（実行待ちタスクキューにあるタスクに対応するタスクプログラム）を実行する。
また，プロセッサＰ１〜Ｐｎは，性能モニタリング機能を有する。この性能モニタリング機能を使用することにより，プロセッサＰ１〜Ｐｎは，実行した命令数，タスクの処理に要した時間またはクロック数，メモリへのアクセス回数，単位時間当たりに実行した命令数，単位時間当たりのメモリへのアクセス回数，これらの組み合わせ（たとえば単位時間当りに実行される命令数とメモリアクセス回数の合計値）等の性能に関する数値を計測することができる。いずれの数値を計測するかを，各プロセッサにあらかじめ指定しておくことができる。
タイマ４には，プロセッサＰ１〜Ｐｎのいずれかにより時間が設定され，タイマ４は，設定された時間が経過すると，タイマ割り込み信号をバス３に出力する。出力された割り込み信号は，プロセッサＰ１〜Ｐｎのいずれかにより受信され処理される。このタイマ４は，たとえば，所定の時間の間，タスクをスリープ状態に置き，所定の時間の経過後，このスリープ状態のタスクを目覚めさせ（ウェイクアップさせ），プロセッサにより実行させる場合に利用される。
Ｉ／Ｆ５は，この分散処理システム１の外部の装置（コンピュータ等）に接続され，この外部装置との間で通信インタフェースの処理（プロトコルの処理等）を実行する。このＩ／Ｆ５は，外部装置からデータを受信すると，割り込み信号をバス３に出力する。出力された割り込み信号は，いずれかのプロセッサにより受信され処理される。
温度センサＨ１〜Ｈｎは，それぞれプロセッサＰ１〜Ｐｎの温度を計測するセンサである。プロセッサＰｉ（ｉは１〜ｎのいずれかの整数，以下同じ。）は，対応する温度センサＨｉの温度をあらかじめ定められた一定時間間隔で読み出し，読み出した温度を共有メモリの所定の領域（後述）に書き込む。
温度センサＨ１〜Ｈｎは，図１に示すように，プロセッサＰ１〜Ｐｎとは別に設けられてもよいし，プロセッサＰ１〜Ｐｎのハードウェア回路に内蔵されていてもよい。温度センサＨ１〜ＨｎがプロセッサＰ１〜Ｐｎと別に設けられる場合には，プロセッサＰ１〜Ｐｎの表面に接触して取り付けられるか，あるいは，プロセッサＰ１〜Ｐｎの近傍に離間（数ｍｍの間隔を離間）して設置されることとなる。また，プロセッサＰ１〜Ｐｎが温度センサＨ１〜Ｈｎの温度をそれぞれ読み出して，共有メモリ２に温度を書き込むのではなく，温度センサＨ１〜Ｈｎがバス３に直接接続され，一定時間間隔で計測した温度を，バス３を介して共有メモリ２に書き込んでもよい。
共有メモリ２は，たとえばＲＡＭであり，ＯＳ（ＯＳプログラム），アプリケーションプログラム等を記憶する。図２は，共有メモリ２に記憶されたデータ（プログラムを含む。）を示している。共有メモリ２に記憶されたデータには，ＯＳ，アプリケーションプログラム，プロセッサ温度データ，発熱イベント頻度データ，タスクキュー等が含まれる。
ＯＳは，プロセッサＰ１〜Ｐｎにより実行される共通のＯＳであり，プロセッサＰ１〜Ｐｎは，このＯＳを読み出して実行する。このＯＳには，スケジューラ（スケジューリングプログラム）が含まれており，プロセッサＰ１〜Ｐｎは，このスケジューリングプログラムに従ってスケジューリングを実行する。後に詳述するように，このスケジューリングにおいて，本発明の第１の実施の形態によるタスクのスケジューリング処理（すなわちタスクの選択および割り当て処理）が実行される。
アプリケーションプログラムは，プロセッサＰ１〜Ｐｎによる実行単位であるタスク（タスクプログラム）に分割され，図２では，ｍ個（ｍは２以上の整数，以下同じ。）のタスクプログラムＫ１〜Ｋｍに分割されている。これらのタスクプログラムＫ１〜Ｋｍが，プロセッサＰ１〜Ｐｎによって実行されることにより，機能分散および負荷分散の双方またはいずれか一方が図られ，アプリケーションプログラムの処理が高速化される。
タスクキューには，実行待ちのタスク（たとえばタスクプログラムを示す識別子等）がキューイングされている。プロセッサＰ１〜Ｐｎは，タスクキューに存在するタスクの中から１つを選択して自己または他のプロセッサに割り当てる。タスクを割り当てられたプロセッサは，割り当てられたタスクに対応するタスクプログラムを実行する。また，プロセッサＰ１〜Ｐｎは，タスクプログラムの実行によって新たにタスクが生成されると，このタスクをタスクキューにキューイングする。
プロセッサ温度データおよび発熱イベント頻度データは，プロセッサＰ１〜Ｐｎが，タスクスケジューリングを実行する際に，タスクの選択基準として，または，タスクを割り当てる対象となるプロセッサの選択基準として使用される。
プロセッサ温度データは，全プロセッサの平均温度ＴａおよびプロセッサＰ１〜Ｐｎのそれぞれの温度Ｔ１〜Ｔｎのデータ項目を有する。
温度Ｔ１〜Ｔｎは，前述した温度センサＨ１〜Ｈｎによりそれぞれ計測され，プロセッサＰ１〜Ｐｎにより一定時間間隔で書き込まれた温度である。したがって，温度Ｔ１〜Ｔｎは，一定時間間隔で更新される。
全プロセッサの平均温度Ｔａは，温度Ｔ１〜Ｔｎの平均値である。すなわち，Ｔａ＝（Ｔ１＋Ｔ２＋…＋Ｔｎ）÷ｎにより求められる。この平均温度Ｔａは，たとえばプロセッサＰｉが温度Ｔｉを書き込んだ時に，書き込み後，プロセッサＰｉにより温度Ｔ１〜Ｔｎに基づいて計算され，更新される。したがって，この平均温度Ｔａは，各プロセッサＰ１〜Ｐｎが自己の温度を書き込む際に，更新されることとなる。
発熱イベント頻度データは，各プロセッサの温度上昇または消費電力増加の度合いに関連するタスクの特性値の一例である。この発熱イベント頻度データは，現在までの発熱イベント頻度の平均値（平均発熱イベント頻度）ＥａおよびタスクプログラムＫ１〜Ｋｍのそれぞれについての発熱イベント頻度Ｅ１〜Ｅｍのデータ項目を有する。
ここで，「発熱イベント」とは，プロセッサに熱を発生させる原因となるイベントであり，たとえばプロセッサにより実行される命令，プロセッサの内部メモリまたは共有メモリ２へのアクセス等を発熱イベントとして挙げることができる。したがって，「発熱イベント頻度」としては，たとえば，タスクまたはＯＳの処理における単位時間当たりに実行される命令数，単位時間当りのメモリアクセス回数，これらの組み合わせ（たとえば単位時間当りに実行される命令数とメモリアクセス回数の合計値）等がある。
なお，発熱イベント頻度の代わりに，各タスクに含まれる命令数やメモリアクセス回数等の「発熱イベント数」を使用することもできる。また，タスクの処理に要する時間をタスクの選択基準として使用することもできる。
本実施の形態では，一例として「発熱イベント頻度」を使用し，また，発熱イベント頻度として，各タスクの実行時に，単位時間当たりに実行される命令数を使用することとする。すなわち，タスクプログラムＫ１〜Ｋｍのそれぞれについて，実行された命令数をＩ１〜Ｉｍとし，これらの命令数をそれぞれ実行するのに要する時間（またはクロック数）をｔ１〜ｔｍとすると，発熱イベント頻度Ｅ１〜Ｅｍは，Ｅ１＝Ｉ１÷ｔ１，…，Ｅｉ＝Ｉｉ÷ｔｉ，…，Ｅｍ＝Ｉｍ÷ｔｍとなる。なお，時間としてクロック数を使用した場合に，発熱イベント頻度の単位はＩＰＣ（Ｉｎｓｔｒｕｃｔｉｏｎ  ｐｅｒ  Ｃｌｏｃｋ）となる。
たとえば，タスクプログラムＫｊ（ｊは１〜ｍのいずれかの整数，以下同じ。）がプロセッサＰｉにより実行されると，プロセッサＰｉは，性能モニタリング機能を使用して，タスクプログラムＫｊの実行した命令数および実行に要する時間を計測し，これら命令数および時間から発熱イベント頻度Ｅｊを計算する。そして，プロセッサＰｉは，発熱イベント頻度Ｅｊを共有メモリ２に書き込む。
これらの命令数や時間は，プロセッサＰｉがタスクプログラムＫｊの実行開始時に性能モニタリング機能から読み出した値と，実行終了時に性能モニタリング機能から読み出した値との差分により求めることもできるし，プロセッサＰｉがタスクプログラムＫｊの実行開始時に性能モニタリング機能の値を０にリセットし，実行終了時に性能モニタリング機能から読み出した値により求めることもできる。
また，同じタスクプログラムＫｊであっても，ある時点で実行された場合の発熱イベント頻度の値と，他の時点で実行された場合の発熱イベント頻度の値とが異なる場合がある。たとえば，タスクプログラムＫｊが条件分岐や繰り返しループを有する場合に，ある時点で実行されたときの，選択された分岐や繰り返しループ回数と，他の時点で実行されたときの，選択された分岐や繰り返しループ回数とが異なる場合に，このような発熱イベント頻度の値が異なる事態が生じる。
したがって，発熱イベント頻度Ｅｊとしては，（ａ）タスクプログラムＫｊが最も近時に実行された時点の値とすることもできるし，（ｂ）タスクプログラムＫｊがこれまでに実行されたすべての場合の平均発熱イベント頻度値とすることもできる。
前者（ａ）の場合に，プロセッサＰｉは，タスクプログラムＫｊの実行後，性能モニタリング機能により求められた発熱イベント頻度Ｅｊを共有メモリ２の所定のアドレスに書き込む（上書きする）だけでよい。
後者（ｂ）の場合に，図２における図示は省略するが，共有メモリ２には，タスクプログラムＫｊがこれまでに実行されたすべての場合の命令数の合計値（Ｉｊａ１１とする。）と，実行に要した時間の合計値（ｔｊａ１１とする。）とが記憶される。たとえば，タスクプログラムＫｊがこれまでにｘ回実行されている場合には，Ｉｊａ１１＝Ｉｊ１＋Ｉｊ２＋…＋Ｉｊｘ，ｔｊａ１１＝ｔｊ１＋ｔｊ２＋…＋ｔｊｘとなる（Ｉｊｋ（ｋは１〜ｘのいずれかの整数）はタスクプログラムＫｊが第ｋ回目に実行された場合の命令数，ｔｊｋはタスクプログラムＫｊが第ｋ回目に実行された場合の実行時間）。そして，命令数の合計値を時間の合計値で割った値が発熱イベント頻度Ｅｊとされる。すなわち，Ｅｊ＝Ｉｊａ１１÷ｔｊａ１１となる。
たとえば，プロセッサＰｉが，第（ｘ＋１）回目のタスクプログラムＫｊを実行した場合に，実行後，性能モニタリング機能により求められた命令数Ｉｊｘ＋１および実行時間ｔｊｘ＋１を，共有メモリ２に記憶されたＩｊａ１１およびｔｊａ１１にそれぞれ加算し，加算後の値に基づいてＥｊ＝Ｉｊａ１１÷ｔｊａ１１を計算し，計算したＥｊを新たな発熱イベントＥｊとして共有メモリ２に書き込む（上書きする）こととなる。
なお，タスクプログラムが実行されないと，発熱イベント頻度は求められないので，タスクプログラムが１度も実行されていない時点における発熱イベント頻度Ｅ１〜Ｅｍの値（すなわち初期値）は，あらかじめ定められた値とされる。この初期値は，たとえばタスクプログラムＫ１〜Ｋｍを実験やシミュレーションにより実行して求めた値とすることができる。
「現在までの平均発熱イベント頻度Ｅａ」は，全プロセッサＰｉ〜Ｐｎにより，これまでに実行されたすべてのタスクの平均発熱イベント頻度値である。
すなわち，平均値Ｅａは，タスクプログラムＫ１〜Ｋｍのそれぞれについてのこれまでの実行命令数の合計値の総和（Ｉａ１１＝Ｉ１ａ１１＋Ｉ２ａ１１＋…＋Ｉｍａ１１）を，これまでの実行命令数の合計値の総和（ｔａ１１＝ｔ１ａ１１＋ｔ２ａ１１＋…＋ｔｍａ１１）で割った値（Ｅａ＝Ｉａ１１÷ｔａ１１）とされる。
なお，各タスクプログラムの毎回の実行時間を一定であるとみなすと，平均値Ｅａは以下の式で表すこともできる。
Ｅａ＝｛（Ｅ１１＋Ｅ１２…＋Ｅ１ｎ１）＋（Ｅ２１＋Ｅ２２…＋Ｅ２ｎ２）＋…＋（Ｅｊ１＋Ｅｊ２…＋Ｅｊｎｊ）＋…＋（Ｅｍ１＋Ｅｍ２…＋Ｅｍｎｍ）｝÷（ｎ１＋ｎ２＋…＋ｎｊ＋…＋ｎｍ）
ここで，タスクＫｊはｎｊ回実行され，第１回から第ｎｊ回までのそれぞれの発熱イベント頻度をＥｊ１〜Ｅｊｎｊとしている。
プロセッサＰｉは，タスクプログラムＫｊの実行後，タスクプログラムＫｊの発熱イベント頻度Ｅｊを更新するとともに，平均発熱イベント頻度Ｅａの値も計算し，計算した値により，共有メモリ２の値を更新する。
このようなマルチプロセッサシステム１において，プロセッサＰ１〜Ｐｎは，これまで実行していたタスク（タスクプログラム）の処理が終了したり，タスクの切り替えが発生したり，あるいは，タイマ４またはＩ／Ｆ５から割り込みが発生したりすると，タスクキューにキューイングされた実行待ちのタスクから１つを選択し，選択したタスクを自己または他のプロセッサに割り当てるタスクスケジューリングを実行する。このタスクスケジューリングの方法には，以下の方法がある。
（１）第１のタスクスケジューリング方法
第１のタスクスケジューリング方法は，タスクを実行していないアイドル状態のプロセッサが複数存在する場合に，アイドル状態のプロセッサの温度にのみ基づいて，温度の最も低いプロセッサにタスクを割り当てるものである。
たとえば，タイマ４が，設定された時間の経過により割り込み信号を発生し，この割り込み信号がプロセッサＰｉにより受信されると，プロセッサＰｉは，これまで実行していたタスクを一時的に中断し，スケジューラを実行する。あるいは，プロセッサＰｉがアイドル状態にある場合には，割り込み信号の受信により直ちにスケジューラを実行する。
プロセッサＰｉは，割り込み信号受信時におけるアイドル状態のプロセッサが複数あるかどうかを判断する。プロセッサＰｉ自身もアイドル状態にあるならば，自己も対象となる。プロセッサがアイドル状態にあるかどうかは，プロセッサＰｉが各プロセッサに問い合わせることによって確認することもできるし，各プロセッサが共有メモリ２の所定の領域に自己の状態（アイドル状態またはタスク処理状態）を書き込む場合には，この領域を読み出すことによって判断することもできる。
続いて，アイドル状態のプロセッサが複数存在する場合に，プロセッサＰｉは，アイドル状態にあるプロセッサの温度を共有メモリ２から読み出し，温度の最も低いプロセッサを選択する。温度の最も低いプロセッサが複数存在する場合には，たとえば擬似乱数等を発生させ，発生された数値に基づいて１つのプロセッサを選択することができる。
続いて，プロセッサＰｉは，選択したプロセッサに，ウェイクアップ状態に移行するタスクを割り当てる。
Ｉ／Ｆ５から割り込み信号がプロセッサＰｉに入力された場合にも，プロセッサＰｉは，同様にして，アイドル状態にあるプロセッサのうち，温度の最も低いプロセッサを選択し，選択したプロセッサにタスク（たとえばＩ／Ｆ５からのデータ受信処理等）を割り当てることができる。
このように，アイドル状態にあるプロセッサのうち，温度の最も低いプロセッサにタスクが割り当てられ，実行されるので，各プロセッサの発熱量が均等化されて行き，その結果，各プロセッサの温度を均一にすることができる。
なお，アイドル状態のプロセッサが１つの場合には，このプロセッサにタスクを割り当てることもできるし，他のプロセッサで温度の最も低いものに，割り当てることもできる。また，アイドル状態のプロセッサが存在しない場合にも，温度の最も低いプロセッサにタスクを割り当てることもできる。アイドル状態でないプロセッサにタスクが割り当てられた場合には，割り当てられるタスクの優先順位が実行中のタスクの優先順位より高い場合には，実行中のタスクが中断され，新たに割り当てられたタスクを実行することもできる。
（２）第２のタスクスケジューリング方法
第２のタスクスケジューリング方法は，プロセッサの温度および発熱イベント頻度の双方に基づいてタスクを選択し，割り当てるものである。図３は，各プロセッサにより実行される第２のタスクスケジューリング方法の処理の流れを示すフローチャートである。この処理は，前述したように，ＯＳのスケジューラの一部である。
プロセッサＰｉにおいて，これまで実行していたタスクの処理が終了し，または，タスクの切り替えが実行されると，プロセッサＰｉは，共有メモリ２にアクセスして，共有メモリ２のタスクキューに複数のタスクが存在するかどうかを判断する（Ｓ１）。
タスクキューに複数のタスクが存在する場合には（Ｓ１でＹＥＳ），プロセッサＰｉは，自己の温度Ｔｉと共有メモリ２に記憶された平均温度Ｔａとを比較する（Ｓ２）。ここで，自己の温度Ｔｉは，共有メモリ２に記憶されたものを使用することもできるし，プロセッサＰｉが，この比較を行う時に，温度センサＨｉから読み出したものを使用することもできる。
Ｔｉ＞Ｔａであるならば（Ｓ２でＹＥＳ），プロセッサＰｉは，タスクキューに存在する各タスクの発熱イベント頻度Ｅおよび平均発熱イベント頻度Ｅａを共有メモリ２から読み出し，各タスクの発熱イベントと平均発熱イベント頻度Ｅａとをそれぞれ比較する（Ｓ３）。そして，プロセッサＰｉは，平均発熱イベント頻度Ｅａ以下の発熱イベント頻度Ｅ（すなわちＥ≦Ｅａ）を有するタスクがタスクキューに存在するかどうかを判断する（Ｓ３）。
Ｅ≦Ｅａとなるタスクがタスクキューに存在する場合には（Ｓ２でＹＥＳ），プロセッサＰｉは，Ｅ≦Ｅａとなるタスクからタスクを１つ選択し（Ｓ４），選択したタスクを実行する。Ｅ≦Ｅａとなるタスクが１つの場合には，そのタスクが選択される。
ここで，Ｅ≦Ｅａとなるタスクが複数存在する場合には，その中で最小の発熱イベント頻度を有するタスクを選択することもできるし，その中で最大の発熱イベント頻度を有するタスクを選択することもできるし，中程度の発熱イベント頻度を有するタスクを選択することもできる。あるいは，擬似乱数等の数値を発生させ，この数値に基づいてタスクを選択することもできる。また，通常のスケジューリングと同様に，タスクの優先順位に基づいて最も優先順位の高いタスクを選択することもできる。さらに，同じ優先順位を有するタスクが複数存在する場合には，その中から，タスクキューの先頭位置により近いタスクまたはタスクキューに時間的に先にキューイングされたタスクを選択することもできる。
一方，Ｅ≦Ｅａとなるタスクがタスクキューに存在しない場合には（Ｓ３でＮＯ），プロセッサＰｉは，タスクキューに存在するタスクのうち，最小の発熱イベント頻度Ｅを有するタスクを選択し（Ｓ５），選択したタスクを実行する。
ステップＳ２において、Ｔｉ≦Ｔａである場合に（Ｓ２でＮＯ），プロセッサＰｉは，タスクキューに存在するタスクの中で，平均発熱イベント頻度Ｅａより大きな発熱イベント頻度Ｅ（Ｅ＞Ｅａ）を有するタスクが存在するかどうかを判断する（Ｓ６）。
Ｅ＞Ｅａとなるタスクがタスクキューに存在する場合には（Ｓ６でＹＥＳ），プロセッサＰｉは，Ｅ＞Ｅａとなるタスクの中からタスクを１つ選択し（Ｓ７），選択したタスクを実行する。Ｅ＞Ｅａとなるタスクが１つの場合には，そのタスクが選択される。
Ｅ＞Ｅａとなるタスクが複数存在する場合には，前述したのと同様に，その中から最大の発熱イベント頻度，最小の発熱イベント頻度，または中程度の発熱イベント頻度を有するタスクを選択したり，擬似乱数等の数値に基づいて選択したり，あるいは，通常のスケジューリングと同様の選択処理によりタスクを選択することができる。
Ｅ＞Ｅａとなるタスクがタスクキューに存在しない場合には（Ｓ６でＮＯ），プロセッサＰｉは，タスクキューに存在するタスクの中で最大の発熱イベント頻度Ｅを有するタスクを選択し（Ｓ８），選択したタスクを実行する。
ステップＳ１において，タスクキューに複数のタスクが存在しない場合には，プロセッサＰｉは，さらにタスクキューに存在するタスクが１つかどうかを判断する（Ｓ９）。タスクキューに存在するタスクが１つならば（Ｓ９でＹＥＳ），プロセッサＰｉはそのタスクを選択して（Ｓ１０），実行し，タスクキューにタスクが存在しない場合には（Ｓ９でＮＯ），プロセッサＰｉは，アイドルタスクを実行する。
なお，選択されたタスクは，タスクキューから消去される。また，プロセッサＰｉは，タスクキューにタスクが存在しない場合に，アイドルタスクを実行するのではなく，自己を停止状態にすることもできる。この場合には，タスクキューにタスクが発生した時点で，他の稼動状態にあるプロセッサによって，プロセッサＰｉは停止状態から稼動状態にされることとなる。
このように第２のタスクスケジューリング方法によると，プロセッサＰｉの温度Ｔｉが平均温度Ｔａと比較され，温度Ｔｉが平均温度Ｔａ以下である場合には，タスクキューに存在するタスクのうち，なるべく大きな発熱イベント頻度を有するタスクが選択される。したがって，選択されたタスクをプロセッサＰｉが実行することにより発生する発熱量は，一般に，平均的な発熱量よりも大きくなる。一方，温度Ｔｉが平均温度Ｔａより大きな場合には，なるべく小さな発熱イベント頻度を有するタスクが選択される。したがって，選択されたタスクをプロセッサＰｉが実行することにより発生する発熱量は，一般に，平均的な発熱量よりも小さくなる。
これにより，各プロセッサの発熱量が均等化されて行き，その結果，各プロセッサの温度が均一化されるので，ある特定のプロセッサ（群）のみが高温になることを防止することができる。その結果，各プロセッサに大規模なファンを取り付けたり，熱設計のために大きな筐体を設けたりする必要が回避され，システムのコスト増大および大型化が防止できる。また，プロセッサの電圧や周波数を抑制することも回避でき，各プロセッサの処理能力を最大限活用することもできる。
なお，ステップＳ２における比較Ｔｉ＞Ｔａは，Ｔｉ≧Ｔａであってもよいし，ステップＳ３における比較をＥ＜Ｅａとし，ステップＳ６における比較をＥ≧Ｅａとしてもよい。
（３）第３のタスクスケジューリング方法
第３のタスクスケジューリング方法も，第２のタスクスケジューリング方法と同様に，プロセッサの温度および発熱イベント頻度に基づいてタスクの選択および割り当てを行うものである。図４は，各プロセッサにより実行される第３のタスクスケジューリング方法の処理の流れを示すフローチャートである。この処理は，前述したように，ＯＳのスケジューラの一部である。
プロセッサＰｉは，タスクキューに複数のタスクが存在するかどうかを判断する（Ｓ２１）。タスクキューに複数のタスクが存在する場合には（Ｓ２１でＹＥＳ），プロセッサＰｉは，共有メモリ２に記憶されたプロセッサ温度データに基づいて，全プロセッサの温度Ｔ１〜Ｔｎにおける自己の温度Ｔｉの，温度の低いものからの順位（順位ｒとする。）を求める（Ｓ２２）。
続いて，プロセッサＰｉは，タスクキューに存在するタスクを，発熱イベント頻度に基づいて発熱イベント頻度の値の大きなものから小さなものに向けてソートする（Ｓ２３）。
次に，プロセッサＰｉは，ステップＳ２２で求めた自己の温度Ｔｉの順位ｒに対応した発熱イベント頻度を有するタスクの中から１つのタスクを選択し（Ｓ２４），選択したタスクを実行する。
ここで，自己の温度Ｔｉの順位ｒに対応した発熱イベント頻度は，たとえば，次のようにして決定される。まず，プロセッサＰｉは，タスクキューに存在するタスクを，発熱イベント頻度の大きなものから小さなものに向けてｎ個（すなわちプロセッサＰ１〜Ｐｎの個数）のグループＧ１〜Ｇｎに分割する。そして，プロセッサＰｉは，自己の温度の順位ｒに対応するグループＧｒに属するタスクの中からタスクを１つ選択する。すなわち，自己の温度の順位が全プロセッサにおいて，低いものからｒ番目に位置する場合には，発熱イベント頻度の大きなものからｒ番目のグループＧｒからタスクが選択される。
これにより，相対的に温度の低いプロセッサには，相対的に発熱イベント頻度の高いタスクが割り当てられ，相対的に温度の高いプロセッサには，相対的に発熱イベント頻度の低いタスクが割り当てられる。その結果，各プロセッサの発熱量が平均化され，各プロセッサの温度が均一化されるので，ある特定のプロセッサ（群）のみが高温になることを防止することができる。その結果，プロセッサに大規模なファンを取り付けたり，熱設計のために大きな筐体を設けたりする必要が回避され，システムのコスト増大および大型化が防止できる。また，プロセッサの電圧や周波数を抑制することも回避でき，各プロセッサの処理能力を最大限活用することもできる。
なお，タスクキューに存在するタスクの個数（個数ｐとする。）がプロセッサの個数ｎ未満（すなわちｐ＜ｎ）である場合には，タスクキューに存在するタスクをｎ個のグループに分割するのではなく，温度の順位を，温度の低いものから高いものに向けてｐ個のグループＧ１〜Ｇｐに分割し，プロセッサＰｉの温度Ｔｉが属するグループＧｒに対応するタスクＴｒが選択される。すなわち，プロセッサＰｉの温度Ｔｉが，温度の低いものからｒ番目のグループＧｒに属する場合には，発熱イベント頻度の高いものからｒ番目のタスクが選択される。
これによっても，各プロセッサの発熱量が平均化され，各プロセッサの温度が均一化されるので，ある特定のプロセッサ（群）のみが高温になることを防止することができることは言うまでもない。
一方，ステップＳ２１で，タスクキューに複数のタスクが存在しない場合には，プロセッサＰｉは，ステップＳ２５およびＳ２６の処理を実行する。これらステップＳ２５およびＳ２６は，前述した図３のステップＳ９およびＳ１０とそれぞれ同じであるので，ここではその説明を省略する。
＜第２の実施の形態＞
図５は，本発明の第２の実施の形態による分散処理システム１０の構成例を示すブロック図である。この分散処理システム１０は，分散コンピューティングシステムであり，コントローラ１１，ｎ個のノードＮ１〜Ｎｎ，および通信ネットワーク１２を備えている。
ノードＮ１〜Ｎｎおよびコントローラ１１は，通信ネットワーク１２に接続され，通信ネットワーク１２を介して相互に通信可能となっている。通信ネットワーク１２は，たとえばＬＡＮ，インターネット等である。
ノードＮ１〜Ｎｎのそれぞれは，たとえばコンピュータであり，内部に，ＣＰＵ，ＭＰＵ等により構成されるプロセッサ２１，通信ネットワーク１２との通信インタフェース処理を実行する通信インタフェース装置（Ｉ／Ｆ）２２，およびプロセッサ２１の温度を測定する温度センサ２３を有する。
コントローラ１１は，たとえばコンピュータであり，その内部の記憶装置（図示略）には，前述した図２に示す共有メモリ２のデータと同じデータが記憶されている。すなわち，内部の記憶装置には，スケジューラを含むＯＳ，アプリケーションプログラム，プロセッサ温度データ，発熱イベント頻度データ，タスクキュー等が記憶されている。
また，コントローラ１１は，内部にタイマを有し，タイマの割り込み信号によって，所定のスリープ状態にあるタスクをウェイクアップ状態にし，このタスクをいずれかのノードに割り当てて実行させることもできる。
本実施の形態において，コントローラ１１は，タスクスケジューリングを専用に行い，自らはタスクを実行しない。このため，コントローラ１１は，内部の記憶装置に記憶されたスケジューラを実行して，ノードＮ１〜Ｎｎのタスクスケジューリング処理を実行する。
タスクスケジューリング処理においては，ノードＮ１〜Ｎｎがタスク割り当て要求をコントローラ１１に送信し，コントローラ１１がこの要求に応じて，要求を送信したノードに対してタスクを選択し割り当ててもよいし，コントローラ１１がアイドル状態のノードに対してタスクを選択し割り当ててもよい。ノードがアイドル状態かどうかは，ノードＮ１〜Ｎｎからコントローラ１１に送信される状態通知によって検知することもできるし，コントローラ１１が定期的にノードＮ１〜Ｎｎの状態をチェックすることによっても検知することができる。
プロセッサ温度データにおける温度Ｔ１〜Ｔｎは，本実施の形態では，ノードＮ１〜Ｎｎのそれぞれのプロセッサ２１の温度である。前述した第１の実施の形態と同様に，各ノードのプロセッサ２１は，温度センサ２３により計測された自己の温度を一定時間間隔で読み出し，読み出した温度をＩ／Ｆ２２および通信ネットワーク１２を介してコントローラ１１に送信する。コントローラ１１は，各ノードから送信された温度を内部の記憶装置に記憶する。
また，平均温度Ｔａは，コントローラ１１が，温度Ｔ１〜Ｔｎに基づいて計算する。コントローラ１１は，温度Ｔ１〜Ｔｎの少なくとも１つがノードから送信され，更新（記憶）されるごとに，更新後の値に基づいて平均温度Ｔａを求める。
タスクプログラムＫ１〜Ｋｍのそれぞれの発熱イベント頻度Ｅ１〜Ｅｍは，ノードＮ１〜Ｎｎのそれぞれのプロセッサ２１の性能モニタリング機能により計測された実行命令数，処理時間（またはクロック数）等によって求められた発熱イベント頻度の値である。各ノードのプロセッサ２１は，あるタスクがコントローラ１１から割り当てられ，割り当てられたタスクを実行すると，実行後，性能モニタリング機能により計測された実行命令数，処理時間等をコントローラ１１に送信する。コントローラ１１は，各ノードから送信されたこれらの値に基づいて，第１の実施の形態と同様にして発熱イベント頻度を計算し，第１の実施の形態における方法（ａ）または（ｂ）により，内部の記憶装置に記憶（更新）する。
また，平均発熱イベント頻度Ｅａは，前述した第１の実施の形態と同様にして，コントローラ１１により計算され，記憶される。
このような分散処理システム１０において，コントローラ１１は，前述した第１の実施の形態における第１，第２，または第３のタスクスケジューリング方法を実行することにより，タスクの選択および割り当てを行う。具体的には，次のようにタスクスケジューリング処理が実行される。
（１）第１のタスクスケジューリング方法
コントローラ１１は，たとえば，内部のタイマの割り込み信号により，スリープ状態のタスクをウェイクアップ状態にしてノードに割り当てる場合に，アイドル状態のノードが存在するかどうかを確認する。アイドル状態のノードが複数存在する場合に，コントローラ１１は，それらノードの中から，温度の最も低いプロセッサを有するノードを選択し，選択したノードに，ウェイクアップ状態に移行するタスクを割り当て，実行させる。
このように，アイドル状態にあるノードのうち，温度の最も低いノードにタスクが割り当てられ，実行されるので，各ノードのプロセッサの発熱量が均等化されて行き，その結果，各ノードの温度を均一にすることができる。
なお，アイドル状態のノードが１つの場合には，このノードにタスクを割り当てることもできるし，他のノードで温度の最も低いプロセッサを有するものに，割り当てることもできる。また，アイドル状態のノードが存在しない場合にも，温度の最も低いプロセッサを有するノードにタスクを割り当てることもできる。アイドル状態でないノードにタスクが割り当てられた場合には，割り当てられるタスクの優先順位が実行中のタスクの優先順位より高い場合には，実行中のタスクが中断され，新たに割り当てられたタスクを実行することもできる。
（２）第２のタスクスケジューリング方法
コントローラ１１は，ノードＮｉからタスクの割り当て要求を受信すると，ノードＮｉの温度Ｔｉ，平均温度Ｔａ，平均発熱イベント頻度Ｅａ，および各発熱イベント頻度Ｅ１〜Ｅｍに基づいて，図３に示すフローチャートの処理を実行し，ノードＮｉに割り当てるタスクを選択する。そして，コントローラ１１は，選択したタスクをノードＮｉに割り当てる。
コントローラ１１がアイドル状態のノードＮｉを検出し，このアイドル状態のノードＮｉに対して，図３に示すフローチャートの処理によりタスクを選択し，選択したタスクを割り当ててもよい。
これにより，各プロセッサの発熱量が均等化されて行き，その結果，各プロセッサの温度が均一化されるので，ある特定ノードのプロセッサ（群）のみが高温になることを防止することができる。
（３）第３のタスクスケジューリング方法
コントローラ１１は，ノードＮｉからタスクの割り当て要求を受信すると，図４に示すフローチャートの処理を実行し，ノードＮｉに割り当てるタスクを選択する。そして，コントローラ１１は，選択したタスクをノードＮｉに割り当てる。
コントローラ１１がアイドル状態のノードＮｉを検出し，このアイドル状態のノードＮｉに対して，図３に示すフローチャートの処理によりタスクを選択し，選択したタスクを割り当ててもよい。
これにより，各プロセッサの発熱量が均等化されて行き，その結果，各プロセッサの温度が均一化されるので，ある特定ノードのプロセッサ（群）のみが高温になることを防止することができる。
＜他の実施の形態＞
第１および第２の実施の形態において，プロセッサの温度に代えてプロセッサの消費電力を，プロセッサ（ノード）の選択基準またはタスクの選択基準に用いることもできる。この場合には，各プロセッサに内蔵され，または，各プロセッサに取り付けられる消費電力計測回路が消費電力を計測し，共有メモリ２またはコントローラ１１の内部メモリには，プロセッサ温度データの代わりに，各プロセッサの消費電力の累積値およびその平均値が記憶される。
また，第１および第２の実施の形態において，発熱イベント頻度を，実行されるすべての命令を対象にして求めるのではなく，発熱量（および消費電力）の多い浮動小数点演算命令のみを対象にして求めることもできる。
第２の実施の形態において，１つのノードが，図１に示すように，複数のプロセッサを有するマルチプロセッサシステムであってもよい。この場合には，コントローラ１１は，各ノードのプロセッサごとにタスクを選択して割り当てることができる。
なお，第１の実施の形態に示すマルチプロセッサシステムにおいても，プロセッサＰ１〜Ｐｎとは別にコントローラを設け，このコントローラが，第２の実施の形態におけるコントローラ１１の機能を実行して，プロセッサＰ１〜Ｐｎへのタスクスケジューリングを実行することもできる。
産業上の利用の可能性
本発明は，マルチプロセッサシステム，複数のコンピュータが通信ネットワークに接続された分散コンピューティングシステム等の分散処理システムに適用することができる。
本発明によると，分散処理システムの各処理装置（プロセッサ，コンピュータ等）の温度を均一にさせて行くことができる。その結果，各処理装置に大規模なファンを取り付けたり，熱設計のために大きな筐体を設けたりする必要が回避され，システムのコスト増大および大型化が防止できる。また，各処理装置の電圧や周波数を抑制することも回避でき，各処理装置の処理能力を最大限活用することもできる。
【図面の簡単な説明】
図１は，本発明の第１の実施の形態による分散処理システムの構成例を示すブロック図である。
図２は，共有メモリに記憶されたデータを示す。
図３は，各プロセッサにより実行される第２のタスクスケジューリング方法の処理の流れを示すフローチャートである。
図４は，各プロセッサにより実行される第３のタスクスケジューリング方法の処理の流れを示すフローチャートである。
図５は，本発明の第２の実施の形態による分散処理システムの構成例を示すブロック図である。
【図１】
2003083693.tif 000003
【図２】
2003083693.tif 000004
【図３】
2003083693.tif 000005
【図４】
2003083693.tif 000006
【図５】
2003083693.tif 000007
【国際調査報告】
2003083693.tif 000008
2003083693.tif 000009