(57)【要約】【課題】複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを用いたコンピュータシステムにおいて、プロセッサの稼働率を向上させる。【解決手段】複数の処理単位（プロセス、スレッド）で並列に処理する並列プログラムで、並列プログラムの逐次処理中には、この逐次処理にのみ独立したプロセッサを割り当て、逐次処理を行なう以外の処理単位へプロセッサを割り当てず、並列演算処理の開始時に、並列プログラムの各処理単位に独立したプロセッサを同時に割り当てる。【選択図】　　　　図１
2004110249.tif 000002
【特許請求の範囲】
【請求項１】
一つの連続する演算を複数の処理単位に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行するコンピュータシステムのプログラム割当制御方法であって、
上記並列プログラムでの逐次演算処理の開始を検知するステップと、
該逐次演算処理に対してプロセッサを割り当てるステップと、
上記逐次演算処理が完了するまで、上記並列プログラムの並列演算処理に対してのプロセッサの割り当てを保留するステップと
を有することを特徴とするプログラム割当制御方法。
【請求項２】
一つの連続する演算を複数の処理単位に分けて並列に処理する並列プログラムを、複数のプロセッサで多重に実行するコンピュータシステムのプログラム割当制御方法であって、
処理中の並列プログラムＡでの逐次演算処理の開始を検知する第１のステップと、
該逐次演算処理にプロセッサを割り当てる第２のステップと、
上記並列プログラムＡの並列演算処理に対するプロセッサの割り当てを解除する第３のステップと、
該割り当てを解除したプロセッサを、他の並列プログラムの並列演算処理に割り当てる第４のステップとを有することを特徴とするプログラム割当制御方法。
【請求項３】
請求項２に記載のプログラム割当制御方法であって、
上記第１のステップで逐次演算処理の開始を検知した後、該逐次演算処理が所定時間経過したことを検知するステップを有し、
該ステップでの検知後、上記第３のステップでの処理および上記第４のステップでの処理を行うことを特徴とするプログラム割当制御方法。
【請求項４】
請求項２、もしくは、請求項３のいずれかに記載のプログラム割当制御方法であって、
予め定められた周期で、並列プログラムのプロセッサへの割り当ての変更要否を判別するステップと、
次周期で変更要と判別された変更前の並列プログラムで逐次演算処理を実行中であれば、該逐次演算処理を次周期での空きプロセッサに割り当てるステップと
を有することを特徴とするプログラム割当制御方法。
【請求項５】
コンピュータに、請求項１から請求項４のいずれかに記載のプログラム割当制御方法における各ステップを実行させるためのプログラム。
【請求項６】
一つの連続する演算を複数の処理単位に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行するコンピュータのプログラム割当制御システムであって、
上記並列プログラムでの逐次演算処理の開始を検知する手段と、
該手段で検知した逐次演算処理に対してはプロセッサを割り当て、当該並列プログラムの並列演算処理に対しては、上記逐次演算処理が完了するまで、プロセッサの割り当てを保留する手段と
を有することを特徴とするプログラム割当制御システム。
【請求項７】
一つの連続する演算を複数の処理単位に分けて並列に処理する並列プログラムを、複数のプロセッサで多重に実行するコンピュータのプログラム割当制御システムであって、
処理中の並列プログラムＡでの逐次演算処理の開始を検知する第１の手段と、
該逐次演算処理にはプロセッサを割り当て、上記並列プログラムＡの並列演算処理に対するプロセッサの割り当てを解除し、該割り当てを解除したプロセッサを、他の並列プログラムの並列演算処理に割り当てる第２の手段とを有することを特徴とするプログラム割当制御システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、汎用あるいは特定の用途を持ったコンピュータシステムにおいて、特に、複数のプロセッサを用いたジョブの多重スケジューリングに関するものである。
「名称」に関するものである。
【０００２】
【従来の技術】
複数のプロセッサ（ＣＰＵ、ＭＰＵ）を用いて実行される並列プログラムは、いくつかのプロセスやスレッドなどの処理単位に分割され、各々、別のプロセッサ上で並列に動作する。各プロセッサ上で並列に動作する処理単位は、互いにデータをやりとりしながら、全体として一つの結果を導き出す。
【０００３】
このように実行される並列プログラムでは、あるチェックポイントごとに同期して実行が行われる。このとき、相手の処理単位が、そのチェックポイントに達していない場合、相手の処理単位とのデータのやりとりが行えず、いわゆる同期待ちが生じる。
【０００４】
並列コンピュータシステムで、複数の並列プログラムが多重に実行される場合、複数のプロセッサ間の相互で協調することなく並列プログラムの各処理単位をスケジューリングすると、各プロセッサで実行される処理単位の実行時間差のために、同期待ち時間が大きくなるという課題がある。
【０００５】
この同期待ち時間の増大を避けるために、プロセッサ間の相互で協調したスケジューリングを行う技術として、福田晃著「並列オペレーティングシステム」（株式会社コロナ社、１９９７年発行）（ＩＳＢＮ４−３３９−０２５８７−９）の第５６頁から第６２頁に記載のものがあります。
【０００６】
ここでは、並列プログラムの並列プロセスをタイムスライスの間同時実行し、その後、グローバルなスケジューラがよばれ、次に実行するプロセスを選び、各プロセッサに通知するといった、プロセスのスケジューリング技術が示されている。
【０００７】
また、特開平１０−７４１５０号公報においては、複数のプロセッサ上で並列プロセスを実行するため、一定期間のプロセスの開始、停止時刻をあらかじめ決定したプログラム割当て表を作成し、各プロセッサに通知しておき、各プロセッサでは、それにしたがってプロセスを実行する、プロセスのスケジューリング技術が記載されている。
【０００８】
しかしながら、ほとんどの並列プログラムでは、並列演算処理の合間に、データの読み込みや書き出し等の逐次的な処理（逐次処理）を必要とし、特に大量のデータの読み込みや書き出しを行なうプログラムにおいては、一回の逐次処理の処理時間が、数ｍｓ〜数秒等、並列処理に較べて長時間にわたる場合がある。
【０００９】
上記の従来技術においては、このような逐次処理を行なっている間、逐次処理を行なっている処理単位以外の処理単位が、並列演算処理の開始を待つアイドルループを行うため、上述のように大量のデータの読み込みや書き出しを行なうプログラムにおいては、計算機システムの実際の演算に対する稼働率が低下してしまう。
【００１０】
【発明が解決しようとする課題】
解決しようとする問題点は、従来の技術では、並列プログラムにおいて、逐次的な処理（逐次処理）を行なっている間、この逐次処理を行なっている処理単位以外の処理単位が、並列演算処理の開始を待つアイドルループを行うため、例えば大量のデータの読み込みや書き出しを行なうプログラムにおいては一回の逐次処理の処理時間が長時間にわたる場合があり、計算機システムの実際の演算に対する稼働率が低下してしまう点である。
【００１１】
本発明の目的は、これら従来技術の課題を解決し、複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを有するコンピュータシステムにおける各プロセッサの稼働率を向上させることである。
【００１２】
【課題を解決するための手段】
上記目的を達成するため、本発明では、並列プログラムの逐次処理中には、この逐次処理処理にのみ独立したプロセッサを割り当て、空いたプロセッサに他の並列プログラムや逐次プログラムを割り当て、並列演算処理の開始時に、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てる。尚、例えば、並列演算処理の終了後の逐次処理が、一定時間、並列演算処理の開始が行なわれなかった場合に、並列プログラムの逐次処理にのみ独立したプロセッサを割り当てる。このことにより、短時間の逐次処理の開始、及び、並列演算処理の開始で、頻繁なプロセッサの割り当て変更によるオーバヘッドを低減する。また、定期的なスケジュール切り替え時に、次にスケジュールする並列プログラムが、逐次処理中か並列演算処理中かを判断し、逐次処理中には、並列プログラムの逐次処理にのみ独立したプロセッサを割り当て、並列演算処理の開始時に、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てる。このことにより、各々の並列演算処理が不均一であった場合に断片的に発生するプロセッサの割り当て変更によるオーバヘッドを低減する。
【００１３】
【発明の実施の形態】
以下、本発明の実施の形態を、図面により詳細に説明する。
【００１４】
図１は、本発明に係わるプログラム割当制御システムの第１の構成例を示すブロック図である。
【００１５】
図１におけるプログラム割当制御システムは、ＣＰＵ（Ｃｅｎｔｒａｌ　Ｐｒｏｃｅｓｓｉｎｇ　Ｕｎｉｔ）や主メモリ、表示装置、入力装置、外部記憶装置等からなるコンピュータシステムであり、光ディスク駆動装置等を介してＣＤ−ＲＯＭ等の記憶媒体に記録されたプログラムやデータを外部記憶装置内にインストールした後、この外部記憶装置から主メモリに読み込みＣＰＵで処理することにより、本発明に係わるマルチプロセッサのスケジュール処理を行う各機能を構築する。
【００１６】
図１において、プロセッサ群１０００は、例えばＣＰＵやＭＰＵからなる４台のプロセッサ１１００〜１４００によって構成されている。各プロセッサ１１００〜１４００は、プロセッサ１１００において示すように、並列演算処理の開始と終了の同期点到達を検知するバリア同期待ち機構１１１０を備える。
【００１７】
並列プログラムスケジューラ２０００は、プロセッサ割り当て済みキュー３０００とプロセッサ割り当て待ちキュー４０００と、空きプロセッサ数５０００（カウンタ）と、空きプロセッサビットマップ５１００とを有し、プロセッサ１１００〜１４００へ割り当てる並列プログラムのスケジュールを管理する。
【００１８】
各並列プログラムは、並列プログラム３１００において示すように、任意の数の演算処理を管理するテーブル（図中及び以降「演算処理」と記載）３１１０と、各演算処理３１１０が演算を行なっているかどうかを示す演算フラグ３１２０と、並列プログラムの演算処理数３１３０と、並列プログラムの実際に演算を行なっている演算処理数を示す演算処理実行数３１４０と、並列プログラムの優先度３１５０と、並列プログラムにプロセッサが割り当てられているかどうかを示すスケジュールフラグ３１６０とを保持している。
【００１９】
尚、本例では、並列プログラムの実際に演算を行なっている演算処理数を示す演算処理実行数３１４０を保持するとしているが、例えば、並列プログラムの演算処理の起動待ちを行なう演算起動待ち数などのような、簡単な計算によって、並列プログラムの実際に演算を行なっている演算処理実行数が求めらる情報を保持しても良い。
【００２０】
このような構成により、本例のプログラム割当制御システムでは、一つの連続する演算を複数の処理単位（プロセスやスレッドなど）に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行する際、並列プログラムでの逐次演算処理の開始を検知すると、逐次演算処理に対してはプロセッサを割り当て、逐次演算処理が完了するまで、当該並列プログラムの並列演算処理に対してのプロセッサの割り当ては保留する。
【００２１】
以下、並列プログラムスケジューラ２０００による各プロセッサへの並列プログラムのスケジュール処理手順について、図２から図５を用いて説明する。
【００２２】
図２は、図１における並列プログラムスケジューラによる並列プログラムのスケジュール処理手順例を示すフローチャートである。
【００２３】
図１における並列プログラムスケジューラ２０００は、定期的に、優先度３１５０などで決定するプロセッサの割り当て率に従い、プロセッサ割り当て済みキュー３０００につなげた並列プログラム３１００〜３３００と、プロセッサ割り当て待ちキュー４０００につなげた並列プログラム４１００〜４３００とを入れ替えるスケジュール切り替え処理を行なう。
【００２４】
先ず、ステップＳ１０１において、プロセッサ割り当て待ちキュー４０００に並列プログラムが存在するかどうかを判断する。このステップＳ１０１で、プロセッサ割り当て待ちキュー４０００に並列プログラムが存在しない場合、ステップＳ１０７において、次のスケジュールタイミングとなるまでスリープする。
【００２５】
前述のステップＳ１０１で、プロセッサ割り当て待ちキュー４０００に並列プログラムが存在する場合、ステップＳ１０２において、プロセッサ割り当て待ちキュー４０００に存在する並列プログラムの優先度３１５０を、プロセッサの割り当て待ち時間に応じて高い優先度３１５０に変更する。
【００２６】
次に、ステップＳ１０３において、プロセッサ割り当て済みキュー３０００に並列プログラムが存在するか否かを判断する。このステップＳ１０３で、プロセッサ割り当て済みキュー３０００に並列プログラムが存在する場合、ステップＳ１０４において、プロセッサ割り当て済みキュー３０００に存在する並列プログラムの優先度３１５０を、プロセッサの割り当て時間に応じて低い優先度３１５０に変更する。
【００２７】
次に、ステップＳ１０５において、前述のステップＳ１０２、及びステップＳ１０４で変更された、プロセッサ割り当て済みキュー３０００、及びプロセッサ割り当て待ちキュー４０００の各並列プログラムの優先度３１５０に従って、プロセッサ割り当て済みキュー３０００の並列プログラムと、プロセッサ割り当て待ちキュー４０００の並列プログラムとの入れ替え処理を行なうスケジュール選択処理を呼び出す。このスケジュール選択処理の詳細については、図３を用いて後述する。
【００２８】
次に、ステップＳ１０６において、前述のステップＳ１０５により変更されたプロセッサ割り当て済みキュー３０００に従って、並列プログラムの各演算処理を各プロセッサへ同時に割り当てる処理である、スケジュール切替処理を呼び出し、その後、ステップＳ１０７において、次のスケジュールタイミングとなるまでスリープする。尚、ステップＳ１０６におけるスケジュール切替処理の詳細については、図４を用いて後述する。
【００２９】
図３は、図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール選択処理手順例を示すフローチャートである。
【００３０】
本図３に示す処理例は、図２におけるステップＳ１０５でのスケジュール選択処理の詳細を示すものであり、先ず、ステップＳ２０１において、プロセッサ割り当て済みキュー３０００に並列プログラムが存在するか否かを判断する。
【００３１】
このステップＳ２０１での判断で、プロセッサ割り当て済みキュー３０００に並列プログラムが存在しない場合、後述のステップＳ２１０以降を処理する。また、プロセッサ割り当て済みキュー３０００に並列プログラムが存在する場合、ステップＳ２０２において、プロセッサ割り当て待ちキュー４０００に、並列プログラムが存在するか否かを判断する。
【００３２】
このステップＳ２０２で、プロセッサ割り当て待ちキュー４０００に、並列プログラムが存在しない場合、ステップＳ２１４において、スケジュール選択処理を終了する。
【００３３】
前述のステップＳ２０２で、プロセッサ割り当て待ちキュー４０００に、並列プログラムが存在する場合、ステップＳ２０３において、プロセッサ割り当て待ちキュー４０００につなげた中で最も優先度３１５０の高い並列プログラム（Ａ）を選択する。
【００３４】
次に、ステップＳ２０４において、前述のステップＳ２０３で選択した最も優先度３１５０の高い並列プログラム（Ａ）の演算処理実行数３１４０と、空きプロセッサ数５０００との比較を行なう。
【００３５】
ここで、並列プログラム（Ａ）の演算処理数３１３０ではなく、演算処理実行数３１４０を使用することにより、実際に演算を行なっておらず、並列演算の開始待ち処理を行なっている演算処理の数は、空きプロセッサ数５０００との比較の対象外とする。尚、この演算処理実行数３１４０の詳細については、図７を用いて後述する。
【００３６】
前述のステップＳ２０４で、最も優先度の高い並列プログラム（Ａ）の演算処理実行数３１４０が、空きプロセッサ数以下である場合、ステップＳ２０５において、この最も優先度の高い並列プログラム（Ａ）を、プロセッサ割り当て待ちキュー４０００から取り出し、プロセッサ割り当て済みキュー３０００に挿入する。その後、ステップＳ２０２の処理に戻り、処理を繰り返す。
【００３７】
前述のステップＳ２０４で、最も優先度の高い並列プログラム（Ａ）の演算処理実行数３１４０が、空きプロセッサ数を超える場合、ステップＳ２０６において、プロセッサ割り当て済みキュー３０００につなげた中で最も優先度３１５０の低い並列プログラム（Ｂ）を選択する。
【００３８】
そして、ステップＳ２０７において、前述のステップＳ２０３で選択した最も優先度の高い並列プログラム（Ａ）の優先度と、前述のステップＳ２０６で選択した最も優先度の低い並列プログラム（Ｂ）の優先度との比較を行なう。
【００３９】
このステップＳ２０７で、前述のステップＳ２０３で選択した最も優先度の高い並列プログラム（Ａ）の優先度が、前述のステップＳ２０６で選択した最も優先度の低い並列プログラム（Ｂ）の優先度以下である場合、後述のステップＳ２１０以降を処理する。
【００４０】
また、ステップＳ２０７で、前述のステップＳ２０３で選択した最も優先度の高い並列プログラム（Ａ）の優先度が、前述のステップＳ２０６で選択した最も優先度の低い並列プログラム（Ｂ）の優先度より大きい場合、ステップＳ２０８において、並列プログラム（Ｂ）をプロセッサ割り当て済みキュー３０００より取り出し、プロセッサ割り当て待ちキュー４０００に挿入する。
【００４１】
そして、ステップＳ２０９において、空きプロセッサ数５０００から、前述のステップＳ２０８でプロセッサ割り当て待ちキュー４０００に移動した並列プログラム（Ｂ）の演算処理実行数３１４０を減算する。
【００４２】
その後、ステップＳ２０４に戻り、ステップＳ２０４からステップＳ２０９の処理を繰り返して、優先度にしたがってプロセッサ割り当て済みキュー３０００の並列プログラムとプロセッサ割り当て待ちキュー４０００の並列プログラムとのスケジュール入れ替え処理を行う。
【００４３】
また、ステップＳ２１０においては、すなわち、前述のステップＳ２０７で、前述のステップＳ２０３で選択した最も優先度の高い並列プログラム（Ａ）の優先度が、前述のステップＳ２０６で選択した最も優先度の低い並列プログラム（Ｂ）の優先度以下である場合、プロセッサ割り当て待ちキュー４０００につなげた中で最も優先度が高く、空きプロセッサ数５０００以下の演算処理実行数３１４０である並列プログラム（Ｃ）を選択する。
【００４４】
尚、このステップＳ２１０で、プロセッサ割り当て待ちキュー４０００につなげた中で最も優先度が高く、演算処理実行数３１４０が空きプロセッサ数５０００以下である並列プログラム（Ｃ）が存在しない場合には、ステップＳ２１１に示すようにして、前述のステップＳ２１４の処理に進み、スケジュール選択処理を終了する。
【００４５】
また、ステップＳ２１１で、プロセッサ割り当て待ちキュー４０００につなげた中で最も優先度が高く、演算処理実行数３１４０が空きプロセッサ数５０００以下である並列プログラム（Ｃ）が存在する場合、ステップＳ２１２において、当該並列プログラム（Ｃ）を、プロセッサ割り当て待ちキュー４０００から取り出し、プロセッサ割り当て済みキュー３０００に挿入する。
【００４６】
そして、ステップＳ２１３において、空きプロセッサ数５０００から、前述のステップＳ２１２でプロセッサ割り当て済みキュー３０００に移動した並列プログラム（Ｃ）の演算処理実行数３１４０を減算する。その後、ステップＳ２１０の処理に戻り、空きプロセッサへのスケジュール選択処理を繰り返す。
【００４７】
図４は、図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【００４８】
本図４に示す処理例は、図２におけるステップＳ１０６でのスケジュール切替処理の詳細を示すものであり、先ず、ステップＳ３０１において、プロセッサ割り当て待ちキュー４０００の先頭の並列プログラム（Ｄ）を選択する。
【００４９】
次に、ステップＳ３０２において、前述のステップＳ３０１での選択対象である並列プログラム（Ｄ）が存在するか否かを判断し、当該並列プログラム（Ｄ）が存在しない場合、後述のステップＳ３０７以降の処理を行う。
【００５０】
前述のステップＳ３０２で、並列プログラム（Ｄ）が存在する場合、ステップＳ３０３において、並列プログラム（Ｄ）のスケジュールフラグ３１６０が、プロセッサが割り当てられていることを示す「ＴＲＵＥ」であるか、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」であるかを判断する。
【００５１】
このステップＳ３０３の判断で、並列プログラム（Ｄ）のスケジュールフラグ３１６０が「ＦＡＬＳＥ」である場合、ステップＳ３０６において、プロセッサ割り当て待ちキューの４０００の次の並列プログラム（Ｄ）を選択する。
【００５２】
また、ステップＳ３０３の判断で、並列プログラム（Ｄ）のスケジュールフラグ３１６０が「ＴＲＵＥ」である場合、ステップＳ３０４において、並列プログラム（Ｄ）のプロセッサが割り当てられた演算処理を停止し、その演算処理へのプロセッサの割り当てを解除する。
【００５３】
その後、ステップＳ３０５において、並列プログラム（Ｄ）のスケジュールフラグ３１６０を、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」に変更し、ステップＳ３０６において、プロセッサ割り当て待ちキュー４０００の次の並列プログラム（Ｄ）を選択する。
【００５４】
このような、ステップＳ３０２からステップＳ３０６の繰り返しにより、プロセッサ割り当て待ちキュー４０００の全ての並列プログラムの各々の演算処理へのプロセッサ割り当てを解除し、停止させ、その後、ステップＳ３０７において、プロセッサ割り当て済みキュー３０００の先頭の並列プログラム（Ｅ）を選択する。
【００５５】
次のステップＳ３０８においては、このステップＳ３０７で選択する並列プログラム（Ｅ）が存在するか否かを判断し、当該並列プログラム（Ｅ）が存在しない場合、ステップＳ３１３において、スケジュール切替処理を終了する。
【００５６】
また、並列プログラム（Ｅ）が存在する場合には、ステップＳ３０９において、この並列プログラム（Ｅ）のスケジュールフラグ３１６０が、プロセッサが割り当てられていることを示す「ＴＲＵＥ」であるか、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」であるかを判断する。
【００５７】
このステップＳ３０９での判断結果が、並列プログラム（Ｅ）のスケジュールフラグ３１６０が、プロセッサが割り当てられていることを示す「ＴＲＵＥ」である場合、ステップＳ３１２において、プロセッサ割り当て済みキュー３０００の次の並列プログラム（Ｅ）を選択する。
【００５８】
また、前述のステップＳ３０９で、並列プログラム（Ｅ）のスケジュールフラグ３１６０が、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」である場合、ステップＳ３１０において、当該並列プログラム（Ｅ）の演算処理に対し、プロセッサ割り当て処理を行なう。尚、このプロセッサ割り当て処理の詳細については、図５を用いて後述する。
【００５９】
次に、ステップＳ３１１において、並列プログラム（Ｄ）のスケジュールフラグ３１６０を、プロセッサが割り当てられていることを示す「ＴＲＵＥ」に変更する。その後、ステップＳ３１２において、プロセッサ割り当て済みキュー３０００の次の並列プログラム（Ｅ）を選択し、前述のステップＳ３０８の処理に戻る。
【００６０】
そして、このステップＳ３１２で選択した、プロセッサ割り当て済みキュー３０００の次の並列プログラム（Ｅ）に対して、ステップＳ３０８からステップＳ３１２の処理を行なうことで、プロセッサ割り当て済みキューの全ての並列プログラムの、全ての演算実行中である演算処理に、独立したプロセッサを割り当て、動作させる。
【００６１】
図５は、図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【００６２】
本図５に示す処理例は、図４におけるステップＳ３１０でのプロセッサ割り当て処理の詳細を示すものであり、先ず、ステップＳ４０１において、プロセッサを割り当てる並列プログラム（Ｅ）の先頭の演算処理（Ｔ）を選択する。
【００６３】
このステップＳ４０１で選択した演算処理（Ｔ）が存在するか否かを、ステップＳ４０２において判断し、演算処理（Ｔ）が存在しない場合、ステップＳ４１１において、プロセッサ割り当て処理を終了する。
【００６４】
また、ステップＳ４０２で、演算処理（Ｔ）が存在する場合、ステップＳ４０３において、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行中であることを示す「ＴＲＵＥ」であるか、演算処理実行待ちであることを示す「ＦＡＬＳＥ」であるかを判断する。尚、演算フラグ３１２０の詳細については、図７を用いて後述する。
【００６５】
ステップＳ４０３での判断結果が、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行待ちであることを示す「ＦＡＬＳＥ」である場合、プロセッサの割り当てを行わずに、ステップＳ４１０において、並列プログラム（Ｅ）の次の演算処理（Ｔ）を選択する。
【００６６】
また、前述のステップＳ４０３での判断結果が、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行中であることを示す「ＴＲＵＥ」である場合、ステップＳ４０４において、空きプロセッサビットマップ５１００より、空き状態のプロセッサ（Ｐ）を一つ選択する。そして、選択したプロセッサ（Ｐ）のビットを、ステップＳ４０５において、クリアする。
【００６７】
次に、ステップＳ４０６において、プロセッサ割り当て待ちキュー４０００にプロセッサ割り当て待ちの並列プログラムが存在するか否かを判断する。
【００６８】
プロセッサ割り当て待ちの並列プログラムが存在する場合、ステップＳ４０７において、プロセッサ（Ｐ）のバリア同期待ち機構１１１０に対し、バリア同期待ち命令の発行をトラップするように設定する。尚、このバリア同期待ち命令の発行時のトラップ処理の詳細については、図７を用いて後述する。
【００６９】
また、ステップＳ４０６において、プロセッサ割り当て待ちキュー４０００にプロセッサ割り当て待ちの並列プログラムが存在しない場合、ステップＳ４０８において、並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しいか否かを判断する。
【００７０】
このステップＳ４０８での判断結果において、並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しくない場合、ステップＳ４０７の処理を行う。すなわち、プロセッサ（Ｐ）のバリア同期待ち機構１１１０に対し、バリア同期待ち命令の発行をトラップするように設定する。
【００７１】
また、前述のステップＳ４０８での判断結果において、並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しい場合、ステップＳ４０９において、当該プロセッサ（Ｐ）に当該演算処理（Ｔ）をディスパッチ（割り当て）する。
【００７２】
そして、ステップＳ４１０において、並列プログラム（Ｅ）の次の演算処理（Ｔ）を選択し、ステップＳ４０２に戻り、前述のステップＳ４０２からステップＳ４１０の処理を繰り返す。このようにして、並列プログラム（Ｅ）へのプロセッサ割り当て処理を行う。
【００７３】
次に、図６を用いて、本例のプログラム割当制御システムによる並列プログラムの制御動作について説明する。
【００７４】
図６は、図１のプログラム割当制御システムにおける並列プログラムの制御動作例を示す説明図である。
【００７５】
プロセッサ１１００〜１４００までの４台のプロセッサには、並列プログラム３１００の演算処理３１２１〜３１２４が、それぞれ独立して割り当てられ、時刻Ｔ５０１〜Ｔ５０３の流れで、逐次処理と並列演算処理とを交互に繰り返し実行している。
【００７６】
並列プログラム３１００の演算処理３１２１は、並列演算処理に加え、逐次処理を行なう代表の演算処理とし、演算処理３１２２〜３１２４は、並列演算処理のみを行なう演算処理とする。
【００７７】
先ず、時刻Ｔ５０１において、演算処理３１２１が逐次処理を開始し、演算処理３１２２〜３１２４は、バリア同期待ち命令を発行して、次の並列演算処理が開始を示すバリア同期の確立を待ち合わせる。
【００７８】
このとき、図５を用いて説明したステップＳ４０７での処理によりバリア同期待ち命令トラップを設定している場合、図７を用いて後述するバリア同期待ちトラップ処理が動作する。
【００７９】
次に、時刻Ｔ５０２において、演算処理３１２１は、逐次処理を完了し、並列演算処理を行なうためにバリア同期命令を発行する。
【００８０】
この演算処理３１２１のバリア同期命令の発行により、前述の時刻Ｔ５０１でバリア同期を発行していた各演算処理３１２２〜３１２４のバリア同期待ちが解除され、各演算処理３１２１〜３１２４で、並列演算処理を開始する。
【００８１】
そして、時刻Ｔ５０３において、各演算処理３１２１〜３１２４の並列演算処理が完了し、演算処理３１２１が逐次処理を開始し、残りの演算処理３１２２〜３１２４は、バリア同期命令を発行して、次の並列演算処理が開始を示すバリア同期の確立を待ち合わせる。
【００８２】
以下、図７を用いて、バリア同期待ちトラップ処理を説明する。
【００８３】
図７は、図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるバリア同期待ちトラップ処理手順例を示すフローチャートである。
【００８４】
本図７に示すバリア同期待ちトラップ処理６００は、前述の図６の時刻Ｔ５０１において各演算処理３１２２〜３１２４がバリア同期待ち命令を発行して、バリア同期確立の待ち合わせ処理を行った際に、前述の図５のプロセッサ割り当て処理でのステップＳ４０７においてバリア同期待ち命令の発行をトラップするように設定されている場合のバリア同期待ち例外に対する処理である。
【００８５】
先ず、ステップＳ６０１において、バリア同期待ちトラップが発生したプロセッサに割り当てられた演算処理３１１０に対応する演算フラグ３１２０を「ＦＡＬＳＥ」に変更する。
【００８６】
次に、ステップＳ６０２において、バリア同期待ちトラップが発生したプロセッサに割り当てられた演算処理３１１０が属する並列プログラム３１００の演算処理実行数３１４０を１減算する。また、ステップＳ６０３において、バリア同期待ちトラップが発生したプロセッサへの演算処理３１１０の割り当てを解除する。
【００８７】
そして、ステップＳ６０４において、前述のステップＳ６０２で減算した並列プログラム３１００の演算処理実行数３１４０が「０」より大きいかどうかを判断する。演算処理実行数３１４０が「０」より大きい場合、後述のステップＳ６０７からのステップを行う。
【００８８】
また、演算処理実行数３１４０が「０」である場合、ステップＳ６０５において、トラップが発生した演算処理３１１０が属する並列プログラム３１００の演算処理実行数３１４０を、演算処理数３１３０の値とする。
【００８９】
さらに、ステップＳ６０６において、トラップが発生した演算処理３１１０が属する並列プログラム３１００の全ての演算処理の演算フラグ３１２０を「ＴＲＵＥ」に変更する。
【００９０】
そして、ステップＳ６０７において、他のプロセッサで同様のバリア同期待ちトラップが発生し、これを保留しているかどうかを判断する。保留中のバリア同期待ちトラップが存在する場合、前述のステップＳ６０１からステップＳ６０７の処理を繰り返す。
【００９１】
また、保留中のバリア同期待ちトラップが存在しない場合、ステップＳ６０８において、図２から図５を用いて前述した並列プログラムスケジューラ処理を行い、ステップＳ６０９において、バリア同期待ちトラップ処理を終了する。
【００９２】
次に、図８を用いて、本例の並列プログラムスケジューラによる並列プログラムの動作制御について、特に、複数の並列プログラムが多重に実行される場合を例に説明する。
【００９３】
すなわち、図１のプログラム割当制御システムにおいて、一つの連続する演算を複数の処理単位に分けて並列に処理する並列プログラムを、複数のプロセッサで多重に実行する際、処理中の並列プログラムＡでの逐次演算処理の開始を検知すると、この逐次演算処理にはプロセッサを割り当てるが、並列プログラムＡの並列演算処理に対しては、そのプロセッサの割り当てを解除し、このように割り当てを解除したプロセッサを、他の並列プログラムＢの並列演算処理に割り当てるものである。
【００９４】
図８は、図１のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【００９５】
本例では、プロセッサ１１００〜１４００の４台のプロセッサで、並列プログラムＡと並列プログラムＢの２つの並列プログラムが多重に動作しているものとする。また、並列プログラムＡは４つの演算処理を持つ４並列の並列プログラムであり、並列プログラムＢは３つの演算処理を持つ３並列の並列プログラムであるものとする。
【００９６】
先ず、時刻Ｔ７０１において、並列プログラムＡがスケジュールされており、並列プログラムＡの演算処理Ａ３１２１〜Ａ３１２４のそれぞれが、プロセッサ１１００〜１４００に割り当てられ、並列演算処理を実行している。このとき、並列プログラムＢは、プロセッサ割り当て待ちキュー４０００に接続されて、次のプロセッサ割り当て待ちとなっている。
【００９７】
次に、時刻Ｔ７０２において、並列プログラムＡの並列演算処理が完了し、演算処理Ａ３１２１が逐次処理を開始し、並列プログラムＡの演算処理Ａ３１２２〜Ａ３１２４は、次の並列演算処理のためのバリア同期待ち命令を発行する。
【００９８】
このバリア同期待ち命令の発行により、バリア同期待ちトラップが発生し、図７を用いて説明したバリア同期待ちトラップ処理６００により、並列プログラムＡの演算処理Ａ３１２２〜Ａ３１２４のプロセッサ１２００〜１４００への割り当てが解除され、図２〜図５を用いて説明した並列プログラムスケジューラ２０００の動作により、並列プログラムＢの演算処理Ｂ３１２１〜Ｂ３１２３が、プロセッサ１２００〜１４００に割り当てられ、並列プログラムＢの並列演算処理を実行する。
【００９９】
さらに、時刻Ｔ７０３において、並列プログラムＡの逐次処理が完了し、演算処理Ａ３１２１がバリア同期待ち命令を発行する。このバリア同期待ち命令の発行により、バリア同期待ちトラップが発生し、図７を用いて説明したバリア同期待ちトラップ処理６００により、一旦、演算処理Ａ３１２１のプロセッサ１１００への割り当てが解除され、図２〜図５を用いて説明した並列プログラムスケジューラ２０００の動作によって、プロセッサ使用量などを考慮した優先度に従って、並列プログラムＡのスケジュールが決定し、並列プログラムＡの演算処理Ａ３１２１〜Ａ３１２４がプロセッサ１１００〜１４００に割り当てられ、並列プログラムＡの並列演算処理を実行する。
【０１００】
そして、時刻Ｔ７０４において、図２を用いて説明したように並列プログラムスケジューラ２０００が定期的な動作を開始し、プロセッサ使用量などを考慮した優先度に従って、並列プログラムＢのスケジュールを決定し、並列プログラムＢの演算処理Ｂ３１２１〜Ｂ３１２３がプロセッサ１２００〜１４００に割り当てられ、並列プログラムＢの並列演算処理を実行する。
【０１０１】
次に、図９〜図１１を用いて、本発明に係わるプログラム割当制御システムの他の実施形態について説明する。
【０１０２】
図９は、本発明に係わるプログラム割当制御システムの第２の構成例を示すブロック図である。
【０１０３】
本図９に示すプログラム割当制御システムにおいては、図１で示したプログラム割当制御システムにおけるプロセッサ１１００〜１４００のそれぞれに、バリア同期待ちタイマ１１２０を設けた構成となっている。
【０１０４】
そして、本例におけるマルチプロセッサのスケジュール方法には、図２〜図４を用いて説明した、並列プログラムスケジューラの処理手順に加えて、図１０で説明するプロセッサ割り当て処理手順を含む。
【０１０５】
以下、図１０を用いて、図９に示す構成のプログラム割当制御システムにおけるプロセッサ割り当て処理手順を説明する。
【０１０６】
図１０は、図９のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【０１０７】
先ず、ステップＳ８０１において、プロセッサを割り当てる並列プログラム（Ｅ）の先頭の演算処理（Ｔ）を選択し、ステップＳ８０２において、この選択した演算処理（Ｔ）が存在するか否かを判断する。
【０１０８】
演算処理（Ｔ）が存在しない場合、ステップＳ８１１において、プロセッサ割り当て処理を終了し、演算処理（Ｔ）が存在する場合、ステップＳ８０３において、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行中であることを示す「ＴＲＵＥ」であるか、演算処理実行待ちであることを示す「ＦＡＬＳＥ」であるかを判断する。
【０１０９】
この演算処理（Ｔ）の演算フラグ３１２０が演算処理実行待ちであることを示す「ＦＡＬＳＥ」である場合、プロセッサの割り当てを行わずに、ステップＳ８１０において、並列プログラム（Ｅ）の次の演算処理（Ｔ）を選択し、また、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行中であることを示す「ＴＲＵＥ」である場合、ステップＳ８０４において、空きプロセッサビットマップ５１００より、空き状態のプロセッサ（Ｐ）を一つ選択する。
【０１１０】
そして、ステップＳ８０５において、空きプロセッサビットマップ５１００の前述のステップＳ８０４で選択したプロセッサ（Ｐ）のビットをクリアし、さらに、ステップＳ８０６において、プロセッサ割り当て待ちキュー４０００にプロセッサ割り当て待ちの並列プログラムが存在するか否かを判断する。
【０１１１】
プロセッサ割り当て待ちキュー４０００にプロセッサ割り当て待ちの並列プログラムが存在する場合、ステップＳ８０７において、プロセッサ（Ｐ）のバリア同期待ちタイマ１１２０に対し、バリア同期待ちのタイムアウトを設定する。尚、バリア同期待ちのタイムアウトが発生した場合、図１に示した構成のシステムにおける図７を用いて説明したバリア同期待ちトラップ処理が実施される。
【０１１２】
前述のステップＳ８０６で、プロセッサ割り当て待ちキュー４０００にプロセッサ割り当て待ちの並列プログラムが存在しない場合、ステップＳ８０８において、並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しいか否かを判断する。
【０１１３】
並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しくない場合、ステップＳ８０７において、プロセッサ（Ｐ）のバリア同期待ちタイマ１１２０に対し、バリア同期待ちのタイムアウトを設定する。
【０１１４】
その後、あるいは、並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しい場合、ステップＳ８０９において、プロセッサ（Ｐ）に演算処理（Ｔ）をディスパッチ（割り当て）する。
【０１１５】
そして、ステップＳ８１０において、並列プログラム（Ｅ）の次の演算処理（Ｔ）を選択し、ステップＳ８０２に戻り、このステップＳ８０２からステップＳ８１０の処理を繰り返すことで、並列プログラム（Ｅ）へのプロセッサ割り当て処理を行う。
【０１１６】
次に、図１１を用いて、本例の並列プログラムスケジューラによる並列プログラムの動作制御手順について、特に、複数の並列プログラムを多重に実行する場合に、逐次演算処理の開始を検知した際、この逐次演算処理が所定時間経過した後に、逐次演算処理に対するプロセッサの割り当てと、並列演算処理に対するプロセッサの割り当ての解除・保留を行う動作を説明する。
【０１１７】
図１１は、図９のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【０１１８】
ここでは、プロセッサ１１００〜１４００の４台のプロセッサで、並列プログラムＡと並列プログラムＢの２つの並列プログラムが多重に動作しているものとする。また、並列プログラムＡは４つの演算処理を持つ４並列の並列プログラムであり、並列プログラムＢは３つの演算処理を持つ３並列の並列プログラムであるものとする。
【０１１９】
先ず、時刻Ｔ９０１において、並列プログラムＡがスケジュールされており、並列プログラムＡの演算処理Ａ３１２１〜Ａ３１２４のそれぞれが、プロセッサ１１００〜１４００に割り当てられ、並列演算処理を実行している。このとき、並列プログラムＢは、プロセッサ割り当て待ちキュー４０００に接続されて、次のプロセッサ割り当て待ちとなっている。
【０１２０】
次の時刻Ｔ９０２において、並列プログラムＡの並列演算処理が完了し、演算処理Ａ３１２１が逐次処理を開始し、並列プログラムＡの演算処理Ａ３１２２〜Ａ３１２４は、次の並列演算処理のためのバリア同期待ち命令を発行する。
【０１２１】
このバリア同期待ち命令の発行により、バリア同期待ちタイマ１１２０の動作が開始される。バリア同期待ちタイマ１１２０は、時間の経過とともに減算されてタイマが「０」になった時点でバリア同期待ちトラップを発生させる。
【０１２２】
そして、時刻Ｔ９０３において、並列プログラムＡの逐次処理が完了し、演算処理Ａ３１２１がバリア同期待ち命令を発行する。これにより、演算処理Ａ３１２１〜Ａ３１２４の全ての演算処理でバリア同期待ちが発行されたことにより、バリア同期が成立し、一斉に並列演算処理を開始する。
【０１２３】
さらに、時刻Ｔ９０４において、並列プログラムＡの並列演算処理が完了し、演算処理Ａ３１２１が逐次処理を開始し、演算処理Ａ３１２２〜Ａ３１２４は、次の並列演算処理のためのバリア同期待ち命令を発行する。このバリア同期待ち命令の発行により、バリア同期待ちタイマ１１２０の動作が開始される。
【０１２４】
そして、時刻９０５において、並列プログラムＡの演算処理Ａ３１２２〜Ａ３１２４がバリア同期命令を実行している各プロセッサ１２００〜１４００で、バリア同期待ちタイマが「０」となり、バリア同期待ちトラップが発生する。
【０１２５】
このバリア同期待ちトラップ処理６００により、並列プログラムＡの演算処理Ａ３１２２〜Ａ３１２４のプロセッサ１２００〜１４００への割り当てが解除され、並列プログラムスケジューラ２０００により、並列プログラムＢの演算処理Ｂ３１２１〜Ｂ３１２３が、プロセッサ１２００〜１４００に割り当てられ、並列プログラムＢの並列演算処理を実行する。
【０１２６】
次に、図１２〜図１６を用いて、本発明に係わるプログラム割当制御システムの他の（第３の）実施形態について説明する。
【０１２７】
図１２は、本発明に係わるプログラム割当制御システムの第３の構成例を示すブロック図である。
【０１２８】
本図１２に示すプログラム割当制御システムにおいては、図１で示したプログラム割当制御システムにおけるプロセッサ１１００〜１４００のそれぞれに、バリア同期ステータス１１３０を設けた構成となっている。
【０１２９】
そして、本例におけるマルチプロセッサのスケジュール方法には、図２および図３を用いて説明した、並列プログラムスケジューラの処理手順に加えて、図１３〜図１５で説明するスケジュール切替処理手順を含む。
【０１３０】
以下、図１３〜図１５を用いて、図２に示す構成のプログラム割当制御システムにおけるプロセッサ割り当て処理手順を説明する。
【０１３１】
図１３は、図１２のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【０１３２】
先ず、ステップＳ１００１において、プロセッサ割り当て待ちキュー４０００の先頭の並列プログラム（Ｄ）を選択し、ステップＳ１００２において、選択対象のプロセッサ割り当て待ちキュー４０００の先頭の並列プログラム（Ｄ）が存在するか否かを判断する。
【０１３３】
並列プログラム（Ｄ）が存在しない場合、後述のステップＳ１００７以降を処理し、また、並列プログラム（Ｄ）が存在する場合、ステップＳ１００３において、並列プログラム（Ｄ）のスケジュールフラグ３１６０が、プロセッサが割り当てられていることを示す「ＴＲＵＥ」であるか、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」であるかを判断する。
【０１３４】
スケジュールフラグ３１６０が「ＦＡＬＳＥ」である場合、ステップＳ１００６において、プロセッサ割り当て待ちキューの４０００の次の並列プログラム（Ｄ）を選択し、また、スケジュールフラグ３１６０がプロセッサが「ＴＲＵＥ」である場合、ステップＳ１００４において、並列プログラム（Ｄ）の演算処理に対し、プロセッサ割り当ての解除処理を行なう。このプロセッサ割り当ての解除処理の詳細については、図１４を用いて後述する。
【０１３５】
次のステップＳ１００５において、並列プログラム（Ｄ）のスケジュールフラグ３１６０を、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」に変更し、さらに、ステップＳ１００６において、プロセッサ割り当て待ちキュー４０００の次の並列プログラム（Ｄ）を選択する。
【０１３６】
そして、前述のステップＳ１００２〜ステップＳ１００６の処理の繰り返しにより、プロセッサ割り当て待ちキュー４０００の全ての並列プログラムの各々の演算処理へのプロセッサ割り当てを解除し、停止させた後、次に、ステップＳ１００７において、プロセッサ割り当て済みキュー３０００の先頭の並列プログラム（Ｅ）を選択する。
【０１３７】
次に、ステップＳ１００８において、前述のステップＳ１００７で説明した、プロセッサ割り当て済みキュー３０００の先頭の並列プログラム（Ｅ）が存在するか否かを判断する。
【０１３８】
並列プログラム（Ｅ）が存在しない場合、ステップＳ１０１３において、スケジュール切替処理を終了し、並列プログラム（Ｅ）が存在する場合、ステップＳ１００９において、並列プログラム（Ｅ）のスケジュールフラグ３１６０が、プロセッサが割り当てられていることを示す「ＴＲＵＥ」であるか、プロセッサが割り当てられていないことを示す「ＦＡＬＳＥ」であるかを判断する。
【０１３９】
並列プログラム（Ｅ）のスケジュールフラグ３１６０が「ＴＲＵＥ」で、プロセッサが割り当てられていることを示す場合、ステップＳ１０１２において、プロセッサ割り当て済みキュー３０００の次の並列プログラム（Ｅ）を選択し、ステップＳ１００８からの処理に戻る。
【０１４０】
また、並列プログラム（Ｅ）のスケジュールフラグ３１６０が「ＦＡＬＳＥ」で、プロセッサが割り当てられていないことを示す場合、ステップＳ１０１０において、並列プログラム（Ｅ）の演算処理に対し、プロセッサ割り当て処理を行なう。尚、このプロセッサ割り当て処理の詳細については、図１５を用いて後述する。
【０１４１】
その後、ステップＳ１０１１において、並列プログラム（Ｄ）のスケジュールフラグ３１６０を、プロセッサが割り当てられていることを示す「ＴＲＵＥ」に変更し、次のステップＳ１０１２において、プロセッサ割り当て済みキュー３０００の次の並列プログラム（Ｅ）を選択する。
【０１４２】
以降、ステップＳ１００８での処理に戻り、ステップＳ１０１２で選択した、プロセッサ割り当て済みキュー３０００の次の並列プログラム（Ｅ）に対して、ステップＳ１００９からステップＳ１０１２の処理を繰り返して行なうことで、プロセッサ割り当て済みキューの全ての並列プログラムの、全ての演算実行中である演算処理に、独立したプロセッサを割り当て、動作させる。
【０１４３】
次に、図１４を用いて、図１３におけるステップＳ１００４でのプロセッサ割り当て解除処理手順を説明する。
【０１４４】
図１４は、図１２の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て解除処理手順例を示すフローチャートである。
【０１４５】
先ず、ステップＳ１１０１において、プロセッサ割り当てを解除する並列プログラム（Ｄ）の先頭の演算処理（Ｔ）を選択する。
【０１４６】
このステップＳ１１０１で選択した演算処理（Ｔ）が存在するか否かを、ステップＳ１１０２において判断し、演算処理（Ｔ）が存在しない場合、ステップＳ１１０９において、プロセッサ割り当て解除処理を終了する。
【０１４７】
また、前述のステップＳ１１０２で、演算処理（Ｔ）が存在する場合、ステップＳ１１０３において、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行中であることを示す「ＴＲＵＥ」であるか、演算処理実行待ちであることを示す「ＦＡＬＳＥ」であるかを判断する。
【０１４８】
演算処理（Ｔ）の演算フラグ３１２０が「ＦＡＬＳＥ」で、演算処理実行待ちであることを示す場合、プロセッサの割り当て解除を行わずに、後述するステップＳ１１０８以降の処理を行う。
【０１４９】
また、演算処理（Ｔ）の演算フラグ３１２０が「ＴＲＵＥ」で、演算処理実行中であることを示す場合、ステップＳ１１０４において、演算処理（Ｔ）が割り当てられているプロセッサのバリア同期ステータス１１３０を参照し、演算処理（Ｔ）がバリア同期待ち中であるか否かを判断する。
【０１５０】
バリア同期ステータス１１３０すなわち演算処理（Ｔ）がバリア同期待ち中である場合、ステップＳ１１０５において、演算処理（Ｔ）の演算フラグ３１２０を、演算処理実行待ちであることを示す「ＦＡＬＳＥ」に変更し、その後、あるいはバリア同期ステータス１１３０すなわち演算処理（Ｔ）がバリア同期待ち中でない場合、ステップＳ１１０６において、演算処理（Ｔ）へのプロセッサディスパッチを解除する。
【０１５１】
そして、ステップＳ１１０７において、空きプロセッサビットマップ５１００の演算処理（Ｔ）が割り当てられていたプロセッサに対応するビットをセットする。さらに、ステップＳ１１０８において、並列プログラム（Ｄ）の次の演算処理（Ｔ）を選択し、ステップＳ１１０２に戻る。
【０１５２】
このステップＳ１１０２からステップＳ１２０８の処理を繰り返すことで、並列プログラム（Ｄ）へのプロセッサ割り当て解除処理を行う。
【０１５３】
次に、図１５を用いて、図１３におけるステップＳ１０１０でのプロセッサ割り当て処理手順を説明する。
【０１５４】
図１５は、図１２の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【０１５５】
先ず、ステップＳ１２０１において、プロセッサを割り当てる並列プログラム（Ｅ）の先頭の演算処理（Ｔ）を選択し、次に、ステップＳ１２０２において、ここで選択した演算処理（Ｔ）が存在するか否かを判断する。演算処理（Ｔ）が存在しない場合、ステップＳ１２１０において、プロセッサ割り当て処理を終了する。
【０１５６】
また、演算処理（Ｔ）が存在する場合、ステップＳ１２０３において、演算処理（Ｔ）の演算フラグ３１２０が、演算処理実行中であることを示す「ＴＲＵＥ」であるか、演算処理実行待ちであることを示す「ＦＡＬＳＥ」であるかを判断する。
【０１５７】
演算処理（Ｔ）の演算フラグ３１２０が「ＦＡＬＳＥ」で、演算処理（Ｔ）が演算処理実行待ちであることを示す場合、プロセッサの割り当てを行わずに、後述するステップＳ１２０９以降の処理を行う。
【０１５８】
また、演算処理（Ｔ）の演算フラグ３１２０が「ＴＲＵＥ」で、演算処理（Ｔ）が演算処理実行中であることを示す場合、ステップＳ１２０４において、空きプロセッサビットマップ５１００より、空き状態のプロセッサ（Ｐ）を一つ選択し、ステップＳ１２０５において、空きプロセッサビットマップ５１００の前述のステップＳ１２０４で選択したプロセッサ（Ｐ）のビットをクリアする。
【０１５９】
そして、ステップＳ１２０６において、並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しいか否かを判断する。並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しくない場合、ステップＳ１２０７において、プロセッサ（Ｐ）のバリア同期待ち機構１１１０に対し、バリア同期待ちのタイムアウトを設定する。バリア同期待ちのタイムアウトが発生した場合、図７を用いて説明したバリア同期待ちトラップ処理が行われる。
【０１６０】
その後、あるいはステップＳ１２０６において並列プログラム（Ｅ）の演算処理数３１３０が演算処理実行数３１４０と等しい場合、ステップＳ１２０８において、プロセッサ（Ｐ）に演算処理（Ｔ）をディスパッチする。
【０１６１】
そして、ステップＳ１２０９において、並列プログラム（Ｅ）の次の演算処理（Ｔ）を選択し、ステップＳ１２０２に戻り、このステップＳ１２０２からステップ１２０９の処理を繰り返すことで、並列プログラム（Ｅ）へのプロセッサ割り当て処理を行う。
【０１６２】
次に、図１６を用いて、本例の並列プログラムスケジューラによる並列プログラムの動作制御手順について、特に、複数の並列プログラムを多重に実行する場合に、予め定められた周期で、並列プログラムのプロセッサへの割り当ての変更要否を判別し、次周期で変更要と判別された変更前の並列プログラムで逐次演算処理を実行中であれば、この逐次演算処理を次周期での空きプロセッサに割り当てる動作を説明する。
【０１６３】
図１６は、図１２のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【０１６４】
ここでは、プロセッサ１１００〜１４００の４台のプロセッサで、並列プログラムＡと並列プログラムＢの２つの並列プログラムが多重に動作しているものとする。
【０１６５】
また、並列プログラムＡは４つの演算処理を持つ４並列の並列プログラムであり、並列プログラムＢは３つの演算処理を持つ３並列の並列プログラムであるものとする。
【０１６６】
先ず、時刻Ｔ１３０１において、並列プログラムＡがスケジュールされており、並列プログラムＡの演算処理Ａ３１２１〜Ａ３１２４が、プロセッサ１１００〜１４００に割り当てられ、並列演算処理を実行している。
【０１６７】
このとき、並列プログラムＢは、プロセッサ割り当て待ちキュー４０００に接続されて、次のプロセッサ割り当て待ちとなっている。
【０１６８】
次の時刻Ｔ１３０２において、並列プログラムＡの並列演算処理が完了し、演算処理Ａ３１２１が逐次処理を開始し、並列プログラムＡの演算処理Ａ３１２２〜Ａ３１２４は、次の並列演算処理のためのバリア同期待ち命令を発行する。
【０１６９】
そして、時刻Ｔ１３０３において、定期的な並列プログラムスケジューラの動作が発生し、プロセッサ使用量などを考慮した優先度に従って、並列プログラムＡへのプロセッサ１１００〜１４００の割り当てが解除され、並列プログラムＢにプロセッサ１２００〜１４００が割り当てられる。
【０１７０】
この並列プログラムＡへのプロセッサ割り当て解除処理において、演算処理Ａ３１２２〜Ａ３１２４はバリア同期待ちを行っており、演算処理Ａ３１２１への１プロセッサのみで実行が可能であるため、演算処理Ａ３１２１が空きプロセッサ１１００へ割り当てられる。
【０１７１】
以上、図１〜図１６を用いて説明したように、本例では、一つの連続する演算を複数の処理単位に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行する際、並列プログラムでの逐次演算処理の開始を検知すると、この逐次演算処理に対してプロセッサを割り当てるが、逐次演算処理が完了するまで、並列プログラムの並列演算処理に対してのプロセッサの割り当ては保留する。
【０１７２】
あるいは、処理中の並列プログラムＡでの逐次演算処理の開始を検知し、この逐次演算処理にプロセッサを割り当てると、並列プログラムＡの並列演算処理に対するプロセッサの割り当てを解除し、この割り当てを解除したプロセッサを、他の並列プログラムの並列演算処理に割り当てる。
【０１７３】
また、逐次演算処理の開始を検知した後、この逐次演算処理が所定時間経過したことを検知した後、逐次演算処理に対するプロセッサの割り当て、並列演算処理に対するプロセッサの割り当て解除等を実行する。あるいは、予め定められた周期で、並列プログラムのプロセッサへの割り当ての変更要否を判別し、次周期で変更要と判別された変更前の並列プログラムで逐次演算処理を実行中であれば、この逐次演算処理を次周期での空きプロセッサに割り当てる。
【０１７４】
このように、本例では、逐次処理中には、並列プログラムの逐次処理処理にのみ独立したプロセッサを割り当て、空いたプロセッサに他の並列プログラムや逐次プログラムを割り当て、並列演算処理の開始時には、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てることにより、実際の演算に対するプロセッサの稼働率を向上し得る。
【０１７５】
また、並列演算処理の開始待ちが一定時間に達したことを検知する機能を持ち、並列演算処理の終了後の逐次処理が、一定時間、並列演算処理の開始が行なわれなかった場合に、並列プログラムの逐次処理にのみ独立したプロセッサを割り当てることにより、短時間の逐次処理の開始、及び、並列演算処理の開始で、頻繁なプロセッサの割り当て変更によるオーバヘッドを低減し得る。
【０１７６】
また、並列演算の開始待ちを行なっていることを静的に検知する機能を持ち、スケジュール切り替え時に、次にスケジュールする並列プログラムが、逐次処理中か並列演算処理中かを判断し、逐次処理中には、並列プログラムの逐次処理にのみ独立したプロセッサを割り当て、並列演算処理の開始時には、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てることにより、各々の並列演算処理が不均一であった場合に断片的に発生するプロセッサの割り当て変更によるオーバヘッドを低減し得る。
【０１７７】
これにより、複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを用いたコンピュータシステムにおいて、実際の演算に対するプロセッサの稼働率を向上させることができる。
【０１７８】
尚、本発明は、図１〜図１６を用いて説明した例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。例えば、本例では、プロセッサの台数を４台として説明したが、プロセッサの台数はこの４台に限られるものではない。
【０１７９】
また、本例で複数のプロセッサ（ＣＰＵ、ＭＰＵ）に割り当てる処理単位は、プロセスとしてもスレッドとしても、あるいは、各並列プログラム単位としても良い。
【０１８０】
また、コンピュータ構成例としても、キーボードや光ディスクの駆動装置の無いコンピュータ構成としても良い。また、本例では、光ディスクを記録媒体として用いているが、ＦＤ（Ｆｌｅｘｉｂｌｅ　Ｄｉｓｋ）等を記録媒体として用いることでも良い。また、プログラムのインストールに関しても、通信装置を介してネットワーク経由でプログラムをダウンロードしてインストールすることでも良い。
【０１８１】
【発明の効果】
本発明によれば、複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを用いたコンピュータシステムにおいて、実際の演算に対するプロセッサの稼働率の向上を図ることが可能である。
【図面の簡単な説明】
【図１】本発明に係わるプログラム割当制御システムの第１の構成例を示すブロック図である。
【図２】図１における並列プログラムスケジューラによる並列プログラムのスケジュール処理手順例を示すフローチャートである。
【図３】図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール選択処理手順例を示すフローチャートである。
【図４】図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【図５】図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【図６】図１のプログラム割当制御システムにおける並列プログラムの制御動作例を示す説明図である。
【図７】図１の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるバリア同期待ちトラップ処理手順例を示すフローチャートである。
【図８】図１のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【図９】本発明に係わるプログラム割当制御システムの第２の構成例を示すブロック図である。
【図１０】図９のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【図１１】図９のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【図１２】本発明に係わるプログラム割当制御システムの第３の構成例を示すブロック図である。
【図１３】図１２のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【図１４】図１２の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て解除処理手順例を示すフローチャートである。
【図１５】図１２の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【図１６】図１２のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【符号の説明】
１０００：プロセッサ群、１１００〜１４００：プロセッサ、１１１０：バリア同期待ち機構、１１２０：バリア同期待ちタイマ、１１３０：バリア同期ステータス、２０００：並列プログラムスケジューラ、３０００：プロセッサ割り当て済みキュー、３１００〜３３００，４１００〜４３００：並列プログラム、３１１０：演算処理（管理テーブル）、３１２０：演算フラグ、３１３０：演算処理数、３１４０：演算処理実行数、３１５０：優先度、３１６０：スケジュールフラグ、４０００：プロセッサ割り当て待ちキュー、５０００：空きプロセッサ数（カウンタ）、５１００：空きプロセッサビットマップ。
【図１】
2004110249.tif 000003
【図２】
2004110249.tif 000004
【図３】
2004110249.tif 000005
【図４】
2004110249.tif 000006
【図５】
2004110249.tif 000007
【図６】
2004110249.tif 000008
【図７】
2004110249.tif 000009
【図８】
2004110249.tif 000010
【図９】
2004110249.tif 000011
【図１０】
2004110249.tif 000012
【図１１】
2004110249.tif 000013
【図１２】
2004110249.tif 000014
【図１３】
2004110249.tif 000015
【図１４】
2004110249.tif 000016
【図１５】
2004110249.tif 000017
【図１６】
2004110249.tif 000018