JP2004110249A - プログラム割当制御方法とプログラムおよびプログラム割当制御システム - Google Patents

プログラム割当制御方法とプログラムおよびプログラム割当制御システム Download PDF

Info

Publication number
JP2004110249A
JP2004110249A JP2002269762A JP2002269762A JP2004110249A JP 2004110249 A JP2004110249 A JP 2004110249A JP 2002269762 A JP2002269762 A JP 2002269762A JP 2002269762 A JP2002269762 A JP 2002269762A JP 2004110249 A JP2004110249 A JP 2004110249A
Authority
JP
Japan
Prior art keywords
parallel
processing
processor
program
parallel program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2002269762A
Other languages
English (en)
Other versions
JP3951230B2 (ja
Inventor
Kazumasa Tobe
戸部 和政
Hideki Iwatsuki
岩月 秀樹
Yoichi Hitomi
人見 洋一
Kenji Matsui
松井 謙治
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2002269762A priority Critical patent/JP3951230B2/ja
Publication of JP2004110249A publication Critical patent/JP2004110249A/ja
Application granted granted Critical
Publication of JP3951230B2 publication Critical patent/JP3951230B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Abstract

【課題】複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを用いたコンピュータシステムにおいて、プロセッサの稼働率を向上させる。
【解決手段】複数の処理単位(プロセス、スレッド)で並列に処理する並列プログラムで、並列プログラムの逐次処理中には、この逐次処理にのみ独立したプロセッサを割り当て、逐次処理を行なう以外の処理単位へプロセッサを割り当てず、並列演算処理の開始時に、並列プログラムの各処理単位に独立したプロセッサを同時に割り当てる。
【選択図】    図1

Description

【0001】
【発明の属する技術分野】
本発明は、汎用あるいは特定の用途を持ったコンピュータシステムにおいて、特に、複数のプロセッサを用いたジョブの多重スケジューリングに関するものである。
「名称」に関するものである。
【0002】
【従来の技術】
複数のプロセッサ(CPU、MPU)を用いて実行される並列プログラムは、いくつかのプロセスやスレッドなどの処理単位に分割され、各々、別のプロセッサ上で並列に動作する。各プロセッサ上で並列に動作する処理単位は、互いにデータをやりとりしながら、全体として一つの結果を導き出す。
【0003】
このように実行される並列プログラムでは、あるチェックポイントごとに同期して実行が行われる。このとき、相手の処理単位が、そのチェックポイントに達していない場合、相手の処理単位とのデータのやりとりが行えず、いわゆる同期待ちが生じる。
【0004】
並列コンピュータシステムで、複数の並列プログラムが多重に実行される場合、複数のプロセッサ間の相互で協調することなく並列プログラムの各処理単位をスケジューリングすると、各プロセッサで実行される処理単位の実行時間差のために、同期待ち時間が大きくなるという課題がある。
【0005】
この同期待ち時間の増大を避けるために、プロセッサ間の相互で協調したスケジューリングを行う技術として、福田晃著「並列オペレーティングシステム」(株式会社コロナ社、1997年発行)(ISBN4−339−02587−9)の第56頁から第62頁に記載のものがあります。
【0006】
ここでは、並列プログラムの並列プロセスをタイムスライスの間同時実行し、その後、グローバルなスケジューラがよばれ、次に実行するプロセスを選び、各プロセッサに通知するといった、プロセスのスケジューリング技術が示されている。
【0007】
また、特開平10−74150号公報においては、複数のプロセッサ上で並列プロセスを実行するため、一定期間のプロセスの開始、停止時刻をあらかじめ決定したプログラム割当て表を作成し、各プロセッサに通知しておき、各プロセッサでは、それにしたがってプロセスを実行する、プロセスのスケジューリング技術が記載されている。
【0008】
しかしながら、ほとんどの並列プログラムでは、並列演算処理の合間に、データの読み込みや書き出し等の逐次的な処理(逐次処理)を必要とし、特に大量のデータの読み込みや書き出しを行なうプログラムにおいては、一回の逐次処理の処理時間が、数ms〜数秒等、並列処理に較べて長時間にわたる場合がある。
【0009】
上記の従来技術においては、このような逐次処理を行なっている間、逐次処理を行なっている処理単位以外の処理単位が、並列演算処理の開始を待つアイドルループを行うため、上述のように大量のデータの読み込みや書き出しを行なうプログラムにおいては、計算機システムの実際の演算に対する稼働率が低下してしまう。
【0010】
【発明が解決しようとする課題】
解決しようとする問題点は、従来の技術では、並列プログラムにおいて、逐次的な処理(逐次処理)を行なっている間、この逐次処理を行なっている処理単位以外の処理単位が、並列演算処理の開始を待つアイドルループを行うため、例えば大量のデータの読み込みや書き出しを行なうプログラムにおいては一回の逐次処理の処理時間が長時間にわたる場合があり、計算機システムの実際の演算に対する稼働率が低下してしまう点である。
【0011】
本発明の目的は、これら従来技術の課題を解決し、複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを有するコンピュータシステムにおける各プロセッサの稼働率を向上させることである。
【0012】
【課題を解決するための手段】
上記目的を達成するため、本発明では、並列プログラムの逐次処理中には、この逐次処理処理にのみ独立したプロセッサを割り当て、空いたプロセッサに他の並列プログラムや逐次プログラムを割り当て、並列演算処理の開始時に、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てる。尚、例えば、並列演算処理の終了後の逐次処理が、一定時間、並列演算処理の開始が行なわれなかった場合に、並列プログラムの逐次処理にのみ独立したプロセッサを割り当てる。このことにより、短時間の逐次処理の開始、及び、並列演算処理の開始で、頻繁なプロセッサの割り当て変更によるオーバヘッドを低減する。また、定期的なスケジュール切り替え時に、次にスケジュールする並列プログラムが、逐次処理中か並列演算処理中かを判断し、逐次処理中には、並列プログラムの逐次処理にのみ独立したプロセッサを割り当て、並列演算処理の開始時に、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てる。このことにより、各々の並列演算処理が不均一であった場合に断片的に発生するプロセッサの割り当て変更によるオーバヘッドを低減する。
【0013】
【発明の実施の形態】
以下、本発明の実施の形態を、図面により詳細に説明する。
【0014】
図1は、本発明に係わるプログラム割当制御システムの第1の構成例を示すブロック図である。
【0015】
図1におけるプログラム割当制御システムは、CPU(Central Processing Unit)や主メモリ、表示装置、入力装置、外部記憶装置等からなるコンピュータシステムであり、光ディスク駆動装置等を介してCD−ROM等の記憶媒体に記録されたプログラムやデータを外部記憶装置内にインストールした後、この外部記憶装置から主メモリに読み込みCPUで処理することにより、本発明に係わるマルチプロセッサのスケジュール処理を行う各機能を構築する。
【0016】
図1において、プロセッサ群1000は、例えばCPUやMPUからなる4台のプロセッサ1100〜1400によって構成されている。各プロセッサ1100〜1400は、プロセッサ1100において示すように、並列演算処理の開始と終了の同期点到達を検知するバリア同期待ち機構1110を備える。
【0017】
並列プログラムスケジューラ2000は、プロセッサ割り当て済みキュー3000とプロセッサ割り当て待ちキュー4000と、空きプロセッサ数5000(カウンタ)と、空きプロセッサビットマップ5100とを有し、プロセッサ1100〜1400へ割り当てる並列プログラムのスケジュールを管理する。
【0018】
各並列プログラムは、並列プログラム3100において示すように、任意の数の演算処理を管理するテーブル(図中及び以降「演算処理」と記載)3110と、各演算処理3110が演算を行なっているかどうかを示す演算フラグ3120と、並列プログラムの演算処理数3130と、並列プログラムの実際に演算を行なっている演算処理数を示す演算処理実行数3140と、並列プログラムの優先度3150と、並列プログラムにプロセッサが割り当てられているかどうかを示すスケジュールフラグ3160とを保持している。
【0019】
尚、本例では、並列プログラムの実際に演算を行なっている演算処理数を示す演算処理実行数3140を保持するとしているが、例えば、並列プログラムの演算処理の起動待ちを行なう演算起動待ち数などのような、簡単な計算によって、並列プログラムの実際に演算を行なっている演算処理実行数が求めらる情報を保持しても良い。
【0020】
このような構成により、本例のプログラム割当制御システムでは、一つの連続する演算を複数の処理単位(プロセスやスレッドなど)に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行する際、並列プログラムでの逐次演算処理の開始を検知すると、逐次演算処理に対してはプロセッサを割り当て、逐次演算処理が完了するまで、当該並列プログラムの並列演算処理に対してのプロセッサの割り当ては保留する。
【0021】
以下、並列プログラムスケジューラ2000による各プロセッサへの並列プログラムのスケジュール処理手順について、図2から図5を用いて説明する。
【0022】
図2は、図1における並列プログラムスケジューラによる並列プログラムのスケジュール処理手順例を示すフローチャートである。
【0023】
図1における並列プログラムスケジューラ2000は、定期的に、優先度3150などで決定するプロセッサの割り当て率に従い、プロセッサ割り当て済みキュー3000につなげた並列プログラム3100〜3300と、プロセッサ割り当て待ちキュー4000につなげた並列プログラム4100〜4300とを入れ替えるスケジュール切り替え処理を行なう。
【0024】
先ず、ステップS101において、プロセッサ割り当て待ちキュー4000に並列プログラムが存在するかどうかを判断する。このステップS101で、プロセッサ割り当て待ちキュー4000に並列プログラムが存在しない場合、ステップS107において、次のスケジュールタイミングとなるまでスリープする。
【0025】
前述のステップS101で、プロセッサ割り当て待ちキュー4000に並列プログラムが存在する場合、ステップS102において、プロセッサ割り当て待ちキュー4000に存在する並列プログラムの優先度3150を、プロセッサの割り当て待ち時間に応じて高い優先度3150に変更する。
【0026】
次に、ステップS103において、プロセッサ割り当て済みキュー3000に並列プログラムが存在するか否かを判断する。このステップS103で、プロセッサ割り当て済みキュー3000に並列プログラムが存在する場合、ステップS104において、プロセッサ割り当て済みキュー3000に存在する並列プログラムの優先度3150を、プロセッサの割り当て時間に応じて低い優先度3150に変更する。
【0027】
次に、ステップS105において、前述のステップS102、及びステップS104で変更された、プロセッサ割り当て済みキュー3000、及びプロセッサ割り当て待ちキュー4000の各並列プログラムの優先度3150に従って、プロセッサ割り当て済みキュー3000の並列プログラムと、プロセッサ割り当て待ちキュー4000の並列プログラムとの入れ替え処理を行なうスケジュール選択処理を呼び出す。このスケジュール選択処理の詳細については、図3を用いて後述する。
【0028】
次に、ステップS106において、前述のステップS105により変更されたプロセッサ割り当て済みキュー3000に従って、並列プログラムの各演算処理を各プロセッサへ同時に割り当てる処理である、スケジュール切替処理を呼び出し、その後、ステップS107において、次のスケジュールタイミングとなるまでスリープする。尚、ステップS106におけるスケジュール切替処理の詳細については、図4を用いて後述する。
【0029】
図3は、図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール選択処理手順例を示すフローチャートである。
【0030】
本図3に示す処理例は、図2におけるステップS105でのスケジュール選択処理の詳細を示すものであり、先ず、ステップS201において、プロセッサ割り当て済みキュー3000に並列プログラムが存在するか否かを判断する。
【0031】
このステップS201での判断で、プロセッサ割り当て済みキュー3000に並列プログラムが存在しない場合、後述のステップS210以降を処理する。また、プロセッサ割り当て済みキュー3000に並列プログラムが存在する場合、ステップS202において、プロセッサ割り当て待ちキュー4000に、並列プログラムが存在するか否かを判断する。
【0032】
このステップS202で、プロセッサ割り当て待ちキュー4000に、並列プログラムが存在しない場合、ステップS214において、スケジュール選択処理を終了する。
【0033】
前述のステップS202で、プロセッサ割り当て待ちキュー4000に、並列プログラムが存在する場合、ステップS203において、プロセッサ割り当て待ちキュー4000につなげた中で最も優先度3150の高い並列プログラム(A)を選択する。
【0034】
次に、ステップS204において、前述のステップS203で選択した最も優先度3150の高い並列プログラム(A)の演算処理実行数3140と、空きプロセッサ数5000との比較を行なう。
【0035】
ここで、並列プログラム(A)の演算処理数3130ではなく、演算処理実行数3140を使用することにより、実際に演算を行なっておらず、並列演算の開始待ち処理を行なっている演算処理の数は、空きプロセッサ数5000との比較の対象外とする。尚、この演算処理実行数3140の詳細については、図7を用いて後述する。
【0036】
前述のステップS204で、最も優先度の高い並列プログラム(A)の演算処理実行数3140が、空きプロセッサ数以下である場合、ステップS205において、この最も優先度の高い並列プログラム(A)を、プロセッサ割り当て待ちキュー4000から取り出し、プロセッサ割り当て済みキュー3000に挿入する。その後、ステップS202の処理に戻り、処理を繰り返す。
【0037】
前述のステップS204で、最も優先度の高い並列プログラム(A)の演算処理実行数3140が、空きプロセッサ数を超える場合、ステップS206において、プロセッサ割り当て済みキュー3000につなげた中で最も優先度3150の低い並列プログラム(B)を選択する。
【0038】
そして、ステップS207において、前述のステップS203で選択した最も優先度の高い並列プログラム(A)の優先度と、前述のステップS206で選択した最も優先度の低い並列プログラム(B)の優先度との比較を行なう。
【0039】
このステップS207で、前述のステップS203で選択した最も優先度の高い並列プログラム(A)の優先度が、前述のステップS206で選択した最も優先度の低い並列プログラム(B)の優先度以下である場合、後述のステップS210以降を処理する。
【0040】
また、ステップS207で、前述のステップS203で選択した最も優先度の高い並列プログラム(A)の優先度が、前述のステップS206で選択した最も優先度の低い並列プログラム(B)の優先度より大きい場合、ステップS208において、並列プログラム(B)をプロセッサ割り当て済みキュー3000より取り出し、プロセッサ割り当て待ちキュー4000に挿入する。
【0041】
そして、ステップS209において、空きプロセッサ数5000から、前述のステップS208でプロセッサ割り当て待ちキュー4000に移動した並列プログラム(B)の演算処理実行数3140を減算する。
【0042】
その後、ステップS204に戻り、ステップS204からステップS209の処理を繰り返して、優先度にしたがってプロセッサ割り当て済みキュー3000の並列プログラムとプロセッサ割り当て待ちキュー4000の並列プログラムとのスケジュール入れ替え処理を行う。
【0043】
また、ステップS210においては、すなわち、前述のステップS207で、前述のステップS203で選択した最も優先度の高い並列プログラム(A)の優先度が、前述のステップS206で選択した最も優先度の低い並列プログラム(B)の優先度以下である場合、プロセッサ割り当て待ちキュー4000につなげた中で最も優先度が高く、空きプロセッサ数5000以下の演算処理実行数3140である並列プログラム(C)を選択する。
【0044】
尚、このステップS210で、プロセッサ割り当て待ちキュー4000につなげた中で最も優先度が高く、演算処理実行数3140が空きプロセッサ数5000以下である並列プログラム(C)が存在しない場合には、ステップS211に示すようにして、前述のステップS214の処理に進み、スケジュール選択処理を終了する。
【0045】
また、ステップS211で、プロセッサ割り当て待ちキュー4000につなげた中で最も優先度が高く、演算処理実行数3140が空きプロセッサ数5000以下である並列プログラム(C)が存在する場合、ステップS212において、当該並列プログラム(C)を、プロセッサ割り当て待ちキュー4000から取り出し、プロセッサ割り当て済みキュー3000に挿入する。
【0046】
そして、ステップS213において、空きプロセッサ数5000から、前述のステップS212でプロセッサ割り当て済みキュー3000に移動した並列プログラム(C)の演算処理実行数3140を減算する。その後、ステップS210の処理に戻り、空きプロセッサへのスケジュール選択処理を繰り返す。
【0047】
図4は、図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【0048】
本図4に示す処理例は、図2におけるステップS106でのスケジュール切替処理の詳細を示すものであり、先ず、ステップS301において、プロセッサ割り当て待ちキュー4000の先頭の並列プログラム(D)を選択する。
【0049】
次に、ステップS302において、前述のステップS301での選択対象である並列プログラム(D)が存在するか否かを判断し、当該並列プログラム(D)が存在しない場合、後述のステップS307以降の処理を行う。
【0050】
前述のステップS302で、並列プログラム(D)が存在する場合、ステップS303において、並列プログラム(D)のスケジュールフラグ3160が、プロセッサが割り当てられていることを示す「TRUE」であるか、プロセッサが割り当てられていないことを示す「FALSE」であるかを判断する。
【0051】
このステップS303の判断で、並列プログラム(D)のスケジュールフラグ3160が「FALSE」である場合、ステップS306において、プロセッサ割り当て待ちキューの4000の次の並列プログラム(D)を選択する。
【0052】
また、ステップS303の判断で、並列プログラム(D)のスケジュールフラグ3160が「TRUE」である場合、ステップS304において、並列プログラム(D)のプロセッサが割り当てられた演算処理を停止し、その演算処理へのプロセッサの割り当てを解除する。
【0053】
その後、ステップS305において、並列プログラム(D)のスケジュールフラグ3160を、プロセッサが割り当てられていないことを示す「FALSE」に変更し、ステップS306において、プロセッサ割り当て待ちキュー4000の次の並列プログラム(D)を選択する。
【0054】
このような、ステップS302からステップS306の繰り返しにより、プロセッサ割り当て待ちキュー4000の全ての並列プログラムの各々の演算処理へのプロセッサ割り当てを解除し、停止させ、その後、ステップS307において、プロセッサ割り当て済みキュー3000の先頭の並列プログラム(E)を選択する。
【0055】
次のステップS308においては、このステップS307で選択する並列プログラム(E)が存在するか否かを判断し、当該並列プログラム(E)が存在しない場合、ステップS313において、スケジュール切替処理を終了する。
【0056】
また、並列プログラム(E)が存在する場合には、ステップS309において、この並列プログラム(E)のスケジュールフラグ3160が、プロセッサが割り当てられていることを示す「TRUE」であるか、プロセッサが割り当てられていないことを示す「FALSE」であるかを判断する。
【0057】
このステップS309での判断結果が、並列プログラム(E)のスケジュールフラグ3160が、プロセッサが割り当てられていることを示す「TRUE」である場合、ステップS312において、プロセッサ割り当て済みキュー3000の次の並列プログラム(E)を選択する。
【0058】
また、前述のステップS309で、並列プログラム(E)のスケジュールフラグ3160が、プロセッサが割り当てられていないことを示す「FALSE」である場合、ステップS310において、当該並列プログラム(E)の演算処理に対し、プロセッサ割り当て処理を行なう。尚、このプロセッサ割り当て処理の詳細については、図5を用いて後述する。
【0059】
次に、ステップS311において、並列プログラム(D)のスケジュールフラグ3160を、プロセッサが割り当てられていることを示す「TRUE」に変更する。その後、ステップS312において、プロセッサ割り当て済みキュー3000の次の並列プログラム(E)を選択し、前述のステップS308の処理に戻る。
【0060】
そして、このステップS312で選択した、プロセッサ割り当て済みキュー3000の次の並列プログラム(E)に対して、ステップS308からステップS312の処理を行なうことで、プロセッサ割り当て済みキューの全ての並列プログラムの、全ての演算実行中である演算処理に、独立したプロセッサを割り当て、動作させる。
【0061】
図5は、図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【0062】
本図5に示す処理例は、図4におけるステップS310でのプロセッサ割り当て処理の詳細を示すものであり、先ず、ステップS401において、プロセッサを割り当てる並列プログラム(E)の先頭の演算処理(T)を選択する。
【0063】
このステップS401で選択した演算処理(T)が存在するか否かを、ステップS402において判断し、演算処理(T)が存在しない場合、ステップS411において、プロセッサ割り当て処理を終了する。
【0064】
また、ステップS402で、演算処理(T)が存在する場合、ステップS403において、演算処理(T)の演算フラグ3120が、演算処理実行中であることを示す「TRUE」であるか、演算処理実行待ちであることを示す「FALSE」であるかを判断する。尚、演算フラグ3120の詳細については、図7を用いて後述する。
【0065】
ステップS403での判断結果が、演算処理(T)の演算フラグ3120が、演算処理実行待ちであることを示す「FALSE」である場合、プロセッサの割り当てを行わずに、ステップS410において、並列プログラム(E)の次の演算処理(T)を選択する。
【0066】
また、前述のステップS403での判断結果が、演算処理(T)の演算フラグ3120が、演算処理実行中であることを示す「TRUE」である場合、ステップS404において、空きプロセッサビットマップ5100より、空き状態のプロセッサ(P)を一つ選択する。そして、選択したプロセッサ(P)のビットを、ステップS405において、クリアする。
【0067】
次に、ステップS406において、プロセッサ割り当て待ちキュー4000にプロセッサ割り当て待ちの並列プログラムが存在するか否かを判断する。
【0068】
プロセッサ割り当て待ちの並列プログラムが存在する場合、ステップS407において、プロセッサ(P)のバリア同期待ち機構1110に対し、バリア同期待ち命令の発行をトラップするように設定する。尚、このバリア同期待ち命令の発行時のトラップ処理の詳細については、図7を用いて後述する。
【0069】
また、ステップS406において、プロセッサ割り当て待ちキュー4000にプロセッサ割り当て待ちの並列プログラムが存在しない場合、ステップS408において、並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しいか否かを判断する。
【0070】
このステップS408での判断結果において、並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しくない場合、ステップS407の処理を行う。すなわち、プロセッサ(P)のバリア同期待ち機構1110に対し、バリア同期待ち命令の発行をトラップするように設定する。
【0071】
また、前述のステップS408での判断結果において、並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しい場合、ステップS409において、当該プロセッサ(P)に当該演算処理(T)をディスパッチ(割り当て)する。
【0072】
そして、ステップS410において、並列プログラム(E)の次の演算処理(T)を選択し、ステップS402に戻り、前述のステップS402からステップS410の処理を繰り返す。このようにして、並列プログラム(E)へのプロセッサ割り当て処理を行う。
【0073】
次に、図6を用いて、本例のプログラム割当制御システムによる並列プログラムの制御動作について説明する。
【0074】
図6は、図1のプログラム割当制御システムにおける並列プログラムの制御動作例を示す説明図である。
【0075】
プロセッサ1100〜1400までの4台のプロセッサには、並列プログラム3100の演算処理3121〜3124が、それぞれ独立して割り当てられ、時刻T501〜T503の流れで、逐次処理と並列演算処理とを交互に繰り返し実行している。
【0076】
並列プログラム3100の演算処理3121は、並列演算処理に加え、逐次処理を行なう代表の演算処理とし、演算処理3122〜3124は、並列演算処理のみを行なう演算処理とする。
【0077】
先ず、時刻T501において、演算処理3121が逐次処理を開始し、演算処理3122〜3124は、バリア同期待ち命令を発行して、次の並列演算処理が開始を示すバリア同期の確立を待ち合わせる。
【0078】
このとき、図5を用いて説明したステップS407での処理によりバリア同期待ち命令トラップを設定している場合、図7を用いて後述するバリア同期待ちトラップ処理が動作する。
【0079】
次に、時刻T502において、演算処理3121は、逐次処理を完了し、並列演算処理を行なうためにバリア同期命令を発行する。
【0080】
この演算処理3121のバリア同期命令の発行により、前述の時刻T501でバリア同期を発行していた各演算処理3122〜3124のバリア同期待ちが解除され、各演算処理3121〜3124で、並列演算処理を開始する。
【0081】
そして、時刻T503において、各演算処理3121〜3124の並列演算処理が完了し、演算処理3121が逐次処理を開始し、残りの演算処理3122〜3124は、バリア同期命令を発行して、次の並列演算処理が開始を示すバリア同期の確立を待ち合わせる。
【0082】
以下、図7を用いて、バリア同期待ちトラップ処理を説明する。
【0083】
図7は、図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるバリア同期待ちトラップ処理手順例を示すフローチャートである。
【0084】
本図7に示すバリア同期待ちトラップ処理600は、前述の図6の時刻T501において各演算処理3122〜3124がバリア同期待ち命令を発行して、バリア同期確立の待ち合わせ処理を行った際に、前述の図5のプロセッサ割り当て処理でのステップS407においてバリア同期待ち命令の発行をトラップするように設定されている場合のバリア同期待ち例外に対する処理である。
【0085】
先ず、ステップS601において、バリア同期待ちトラップが発生したプロセッサに割り当てられた演算処理3110に対応する演算フラグ3120を「FALSE」に変更する。
【0086】
次に、ステップS602において、バリア同期待ちトラップが発生したプロセッサに割り当てられた演算処理3110が属する並列プログラム3100の演算処理実行数3140を1減算する。また、ステップS603において、バリア同期待ちトラップが発生したプロセッサへの演算処理3110の割り当てを解除する。
【0087】
そして、ステップS604において、前述のステップS602で減算した並列プログラム3100の演算処理実行数3140が「0」より大きいかどうかを判断する。演算処理実行数3140が「0」より大きい場合、後述のステップS607からのステップを行う。
【0088】
また、演算処理実行数3140が「0」である場合、ステップS605において、トラップが発生した演算処理3110が属する並列プログラム3100の演算処理実行数3140を、演算処理数3130の値とする。
【0089】
さらに、ステップS606において、トラップが発生した演算処理3110が属する並列プログラム3100の全ての演算処理の演算フラグ3120を「TRUE」に変更する。
【0090】
そして、ステップS607において、他のプロセッサで同様のバリア同期待ちトラップが発生し、これを保留しているかどうかを判断する。保留中のバリア同期待ちトラップが存在する場合、前述のステップS601からステップS607の処理を繰り返す。
【0091】
また、保留中のバリア同期待ちトラップが存在しない場合、ステップS608において、図2から図5を用いて前述した並列プログラムスケジューラ処理を行い、ステップS609において、バリア同期待ちトラップ処理を終了する。
【0092】
次に、図8を用いて、本例の並列プログラムスケジューラによる並列プログラムの動作制御について、特に、複数の並列プログラムが多重に実行される場合を例に説明する。
【0093】
すなわち、図1のプログラム割当制御システムにおいて、一つの連続する演算を複数の処理単位に分けて並列に処理する並列プログラムを、複数のプロセッサで多重に実行する際、処理中の並列プログラムAでの逐次演算処理の開始を検知すると、この逐次演算処理にはプロセッサを割り当てるが、並列プログラムAの並列演算処理に対しては、そのプロセッサの割り当てを解除し、このように割り当てを解除したプロセッサを、他の並列プログラムBの並列演算処理に割り当てるものである。
【0094】
図8は、図1のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【0095】
本例では、プロセッサ1100〜1400の4台のプロセッサで、並列プログラムAと並列プログラムBの2つの並列プログラムが多重に動作しているものとする。また、並列プログラムAは4つの演算処理を持つ4並列の並列プログラムであり、並列プログラムBは3つの演算処理を持つ3並列の並列プログラムであるものとする。
【0096】
先ず、時刻T701において、並列プログラムAがスケジュールされており、並列プログラムAの演算処理A3121〜A3124のそれぞれが、プロセッサ1100〜1400に割り当てられ、並列演算処理を実行している。このとき、並列プログラムBは、プロセッサ割り当て待ちキュー4000に接続されて、次のプロセッサ割り当て待ちとなっている。
【0097】
次に、時刻T702において、並列プログラムAの並列演算処理が完了し、演算処理A3121が逐次処理を開始し、並列プログラムAの演算処理A3122〜A3124は、次の並列演算処理のためのバリア同期待ち命令を発行する。
【0098】
このバリア同期待ち命令の発行により、バリア同期待ちトラップが発生し、図7を用いて説明したバリア同期待ちトラップ処理600により、並列プログラムAの演算処理A3122〜A3124のプロセッサ1200〜1400への割り当てが解除され、図2〜図5を用いて説明した並列プログラムスケジューラ2000の動作により、並列プログラムBの演算処理B3121〜B3123が、プロセッサ1200〜1400に割り当てられ、並列プログラムBの並列演算処理を実行する。
【0099】
さらに、時刻T703において、並列プログラムAの逐次処理が完了し、演算処理A3121がバリア同期待ち命令を発行する。このバリア同期待ち命令の発行により、バリア同期待ちトラップが発生し、図7を用いて説明したバリア同期待ちトラップ処理600により、一旦、演算処理A3121のプロセッサ1100への割り当てが解除され、図2〜図5を用いて説明した並列プログラムスケジューラ2000の動作によって、プロセッサ使用量などを考慮した優先度に従って、並列プログラムAのスケジュールが決定し、並列プログラムAの演算処理A3121〜A3124がプロセッサ1100〜1400に割り当てられ、並列プログラムAの並列演算処理を実行する。
【0100】
そして、時刻T704において、図2を用いて説明したように並列プログラムスケジューラ2000が定期的な動作を開始し、プロセッサ使用量などを考慮した優先度に従って、並列プログラムBのスケジュールを決定し、並列プログラムBの演算処理B3121〜B3123がプロセッサ1200〜1400に割り当てられ、並列プログラムBの並列演算処理を実行する。
【0101】
次に、図9〜図11を用いて、本発明に係わるプログラム割当制御システムの他の実施形態について説明する。
【0102】
図9は、本発明に係わるプログラム割当制御システムの第2の構成例を示すブロック図である。
【0103】
本図9に示すプログラム割当制御システムにおいては、図1で示したプログラム割当制御システムにおけるプロセッサ1100〜1400のそれぞれに、バリア同期待ちタイマ1120を設けた構成となっている。
【0104】
そして、本例におけるマルチプロセッサのスケジュール方法には、図2〜図4を用いて説明した、並列プログラムスケジューラの処理手順に加えて、図10で説明するプロセッサ割り当て処理手順を含む。
【0105】
以下、図10を用いて、図9に示す構成のプログラム割当制御システムにおけるプロセッサ割り当て処理手順を説明する。
【0106】
図10は、図9のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【0107】
先ず、ステップS801において、プロセッサを割り当てる並列プログラム(E)の先頭の演算処理(T)を選択し、ステップS802において、この選択した演算処理(T)が存在するか否かを判断する。
【0108】
演算処理(T)が存在しない場合、ステップS811において、プロセッサ割り当て処理を終了し、演算処理(T)が存在する場合、ステップS803において、演算処理(T)の演算フラグ3120が、演算処理実行中であることを示す「TRUE」であるか、演算処理実行待ちであることを示す「FALSE」であるかを判断する。
【0109】
この演算処理(T)の演算フラグ3120が演算処理実行待ちであることを示す「FALSE」である場合、プロセッサの割り当てを行わずに、ステップS810において、並列プログラム(E)の次の演算処理(T)を選択し、また、演算処理(T)の演算フラグ3120が、演算処理実行中であることを示す「TRUE」である場合、ステップS804において、空きプロセッサビットマップ5100より、空き状態のプロセッサ(P)を一つ選択する。
【0110】
そして、ステップS805において、空きプロセッサビットマップ5100の前述のステップS804で選択したプロセッサ(P)のビットをクリアし、さらに、ステップS806において、プロセッサ割り当て待ちキュー4000にプロセッサ割り当て待ちの並列プログラムが存在するか否かを判断する。
【0111】
プロセッサ割り当て待ちキュー4000にプロセッサ割り当て待ちの並列プログラムが存在する場合、ステップS807において、プロセッサ(P)のバリア同期待ちタイマ1120に対し、バリア同期待ちのタイムアウトを設定する。尚、バリア同期待ちのタイムアウトが発生した場合、図1に示した構成のシステムにおける図7を用いて説明したバリア同期待ちトラップ処理が実施される。
【0112】
前述のステップS806で、プロセッサ割り当て待ちキュー4000にプロセッサ割り当て待ちの並列プログラムが存在しない場合、ステップS808において、並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しいか否かを判断する。
【0113】
並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しくない場合、ステップS807において、プロセッサ(P)のバリア同期待ちタイマ1120に対し、バリア同期待ちのタイムアウトを設定する。
【0114】
その後、あるいは、並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しい場合、ステップS809において、プロセッサ(P)に演算処理(T)をディスパッチ(割り当て)する。
【0115】
そして、ステップS810において、並列プログラム(E)の次の演算処理(T)を選択し、ステップS802に戻り、このステップS802からステップS810の処理を繰り返すことで、並列プログラム(E)へのプロセッサ割り当て処理を行う。
【0116】
次に、図11を用いて、本例の並列プログラムスケジューラによる並列プログラムの動作制御手順について、特に、複数の並列プログラムを多重に実行する場合に、逐次演算処理の開始を検知した際、この逐次演算処理が所定時間経過した後に、逐次演算処理に対するプロセッサの割り当てと、並列演算処理に対するプロセッサの割り当ての解除・保留を行う動作を説明する。
【0117】
図11は、図9のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【0118】
ここでは、プロセッサ1100〜1400の4台のプロセッサで、並列プログラムAと並列プログラムBの2つの並列プログラムが多重に動作しているものとする。また、並列プログラムAは4つの演算処理を持つ4並列の並列プログラムであり、並列プログラムBは3つの演算処理を持つ3並列の並列プログラムであるものとする。
【0119】
先ず、時刻T901において、並列プログラムAがスケジュールされており、並列プログラムAの演算処理A3121〜A3124のそれぞれが、プロセッサ1100〜1400に割り当てられ、並列演算処理を実行している。このとき、並列プログラムBは、プロセッサ割り当て待ちキュー4000に接続されて、次のプロセッサ割り当て待ちとなっている。
【0120】
次の時刻T902において、並列プログラムAの並列演算処理が完了し、演算処理A3121が逐次処理を開始し、並列プログラムAの演算処理A3122〜A3124は、次の並列演算処理のためのバリア同期待ち命令を発行する。
【0121】
このバリア同期待ち命令の発行により、バリア同期待ちタイマ1120の動作が開始される。バリア同期待ちタイマ1120は、時間の経過とともに減算されてタイマが「0」になった時点でバリア同期待ちトラップを発生させる。
【0122】
そして、時刻T903において、並列プログラムAの逐次処理が完了し、演算処理A3121がバリア同期待ち命令を発行する。これにより、演算処理A3121〜A3124の全ての演算処理でバリア同期待ちが発行されたことにより、バリア同期が成立し、一斉に並列演算処理を開始する。
【0123】
さらに、時刻T904において、並列プログラムAの並列演算処理が完了し、演算処理A3121が逐次処理を開始し、演算処理A3122〜A3124は、次の並列演算処理のためのバリア同期待ち命令を発行する。このバリア同期待ち命令の発行により、バリア同期待ちタイマ1120の動作が開始される。
【0124】
そして、時刻905において、並列プログラムAの演算処理A3122〜A3124がバリア同期命令を実行している各プロセッサ1200〜1400で、バリア同期待ちタイマが「0」となり、バリア同期待ちトラップが発生する。
【0125】
このバリア同期待ちトラップ処理600により、並列プログラムAの演算処理A3122〜A3124のプロセッサ1200〜1400への割り当てが解除され、並列プログラムスケジューラ2000により、並列プログラムBの演算処理B3121〜B3123が、プロセッサ1200〜1400に割り当てられ、並列プログラムBの並列演算処理を実行する。
【0126】
次に、図12〜図16を用いて、本発明に係わるプログラム割当制御システムの他の(第3の)実施形態について説明する。
【0127】
図12は、本発明に係わるプログラム割当制御システムの第3の構成例を示すブロック図である。
【0128】
本図12に示すプログラム割当制御システムにおいては、図1で示したプログラム割当制御システムにおけるプロセッサ1100〜1400のそれぞれに、バリア同期ステータス1130を設けた構成となっている。
【0129】
そして、本例におけるマルチプロセッサのスケジュール方法には、図2および図3を用いて説明した、並列プログラムスケジューラの処理手順に加えて、図13〜図15で説明するスケジュール切替処理手順を含む。
【0130】
以下、図13〜図15を用いて、図2に示す構成のプログラム割当制御システムにおけるプロセッサ割り当て処理手順を説明する。
【0131】
図13は、図12のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【0132】
先ず、ステップS1001において、プロセッサ割り当て待ちキュー4000の先頭の並列プログラム(D)を選択し、ステップS1002において、選択対象のプロセッサ割り当て待ちキュー4000の先頭の並列プログラム(D)が存在するか否かを判断する。
【0133】
並列プログラム(D)が存在しない場合、後述のステップS1007以降を処理し、また、並列プログラム(D)が存在する場合、ステップS1003において、並列プログラム(D)のスケジュールフラグ3160が、プロセッサが割り当てられていることを示す「TRUE」であるか、プロセッサが割り当てられていないことを示す「FALSE」であるかを判断する。
【0134】
スケジュールフラグ3160が「FALSE」である場合、ステップS1006において、プロセッサ割り当て待ちキューの4000の次の並列プログラム(D)を選択し、また、スケジュールフラグ3160がプロセッサが「TRUE」である場合、ステップS1004において、並列プログラム(D)の演算処理に対し、プロセッサ割り当ての解除処理を行なう。このプロセッサ割り当ての解除処理の詳細については、図14を用いて後述する。
【0135】
次のステップS1005において、並列プログラム(D)のスケジュールフラグ3160を、プロセッサが割り当てられていないことを示す「FALSE」に変更し、さらに、ステップS1006において、プロセッサ割り当て待ちキュー4000の次の並列プログラム(D)を選択する。
【0136】
そして、前述のステップS1002〜ステップS1006の処理の繰り返しにより、プロセッサ割り当て待ちキュー4000の全ての並列プログラムの各々の演算処理へのプロセッサ割り当てを解除し、停止させた後、次に、ステップS1007において、プロセッサ割り当て済みキュー3000の先頭の並列プログラム(E)を選択する。
【0137】
次に、ステップS1008において、前述のステップS1007で説明した、プロセッサ割り当て済みキュー3000の先頭の並列プログラム(E)が存在するか否かを判断する。
【0138】
並列プログラム(E)が存在しない場合、ステップS1013において、スケジュール切替処理を終了し、並列プログラム(E)が存在する場合、ステップS1009において、並列プログラム(E)のスケジュールフラグ3160が、プロセッサが割り当てられていることを示す「TRUE」であるか、プロセッサが割り当てられていないことを示す「FALSE」であるかを判断する。
【0139】
並列プログラム(E)のスケジュールフラグ3160が「TRUE」で、プロセッサが割り当てられていることを示す場合、ステップS1012において、プロセッサ割り当て済みキュー3000の次の並列プログラム(E)を選択し、ステップS1008からの処理に戻る。
【0140】
また、並列プログラム(E)のスケジュールフラグ3160が「FALSE」で、プロセッサが割り当てられていないことを示す場合、ステップS1010において、並列プログラム(E)の演算処理に対し、プロセッサ割り当て処理を行なう。尚、このプロセッサ割り当て処理の詳細については、図15を用いて後述する。
【0141】
その後、ステップS1011において、並列プログラム(D)のスケジュールフラグ3160を、プロセッサが割り当てられていることを示す「TRUE」に変更し、次のステップS1012において、プロセッサ割り当て済みキュー3000の次の並列プログラム(E)を選択する。
【0142】
以降、ステップS1008での処理に戻り、ステップS1012で選択した、プロセッサ割り当て済みキュー3000の次の並列プログラム(E)に対して、ステップS1009からステップS1012の処理を繰り返して行なうことで、プロセッサ割り当て済みキューの全ての並列プログラムの、全ての演算実行中である演算処理に、独立したプロセッサを割り当て、動作させる。
【0143】
次に、図14を用いて、図13におけるステップS1004でのプロセッサ割り当て解除処理手順を説明する。
【0144】
図14は、図12の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て解除処理手順例を示すフローチャートである。
【0145】
先ず、ステップS1101において、プロセッサ割り当てを解除する並列プログラム(D)の先頭の演算処理(T)を選択する。
【0146】
このステップS1101で選択した演算処理(T)が存在するか否かを、ステップS1102において判断し、演算処理(T)が存在しない場合、ステップS1109において、プロセッサ割り当て解除処理を終了する。
【0147】
また、前述のステップS1102で、演算処理(T)が存在する場合、ステップS1103において、演算処理(T)の演算フラグ3120が、演算処理実行中であることを示す「TRUE」であるか、演算処理実行待ちであることを示す「FALSE」であるかを判断する。
【0148】
演算処理(T)の演算フラグ3120が「FALSE」で、演算処理実行待ちであることを示す場合、プロセッサの割り当て解除を行わずに、後述するステップS1108以降の処理を行う。
【0149】
また、演算処理(T)の演算フラグ3120が「TRUE」で、演算処理実行中であることを示す場合、ステップS1104において、演算処理(T)が割り当てられているプロセッサのバリア同期ステータス1130を参照し、演算処理(T)がバリア同期待ち中であるか否かを判断する。
【0150】
バリア同期ステータス1130すなわち演算処理(T)がバリア同期待ち中である場合、ステップS1105において、演算処理(T)の演算フラグ3120を、演算処理実行待ちであることを示す「FALSE」に変更し、その後、あるいはバリア同期ステータス1130すなわち演算処理(T)がバリア同期待ち中でない場合、ステップS1106において、演算処理(T)へのプロセッサディスパッチを解除する。
【0151】
そして、ステップS1107において、空きプロセッサビットマップ5100の演算処理(T)が割り当てられていたプロセッサに対応するビットをセットする。さらに、ステップS1108において、並列プログラム(D)の次の演算処理(T)を選択し、ステップS1102に戻る。
【0152】
このステップS1102からステップS1208の処理を繰り返すことで、並列プログラム(D)へのプロセッサ割り当て解除処理を行う。
【0153】
次に、図15を用いて、図13におけるステップS1010でのプロセッサ割り当て処理手順を説明する。
【0154】
図15は、図12の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【0155】
先ず、ステップS1201において、プロセッサを割り当てる並列プログラム(E)の先頭の演算処理(T)を選択し、次に、ステップS1202において、ここで選択した演算処理(T)が存在するか否かを判断する。演算処理(T)が存在しない場合、ステップS1210において、プロセッサ割り当て処理を終了する。
【0156】
また、演算処理(T)が存在する場合、ステップS1203において、演算処理(T)の演算フラグ3120が、演算処理実行中であることを示す「TRUE」であるか、演算処理実行待ちであることを示す「FALSE」であるかを判断する。
【0157】
演算処理(T)の演算フラグ3120が「FALSE」で、演算処理(T)が演算処理実行待ちであることを示す場合、プロセッサの割り当てを行わずに、後述するステップS1209以降の処理を行う。
【0158】
また、演算処理(T)の演算フラグ3120が「TRUE」で、演算処理(T)が演算処理実行中であることを示す場合、ステップS1204において、空きプロセッサビットマップ5100より、空き状態のプロセッサ(P)を一つ選択し、ステップS1205において、空きプロセッサビットマップ5100の前述のステップS1204で選択したプロセッサ(P)のビットをクリアする。
【0159】
そして、ステップS1206において、並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しいか否かを判断する。並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しくない場合、ステップS1207において、プロセッサ(P)のバリア同期待ち機構1110に対し、バリア同期待ちのタイムアウトを設定する。バリア同期待ちのタイムアウトが発生した場合、図7を用いて説明したバリア同期待ちトラップ処理が行われる。
【0160】
その後、あるいはステップS1206において並列プログラム(E)の演算処理数3130が演算処理実行数3140と等しい場合、ステップS1208において、プロセッサ(P)に演算処理(T)をディスパッチする。
【0161】
そして、ステップS1209において、並列プログラム(E)の次の演算処理(T)を選択し、ステップS1202に戻り、このステップS1202からステップ1209の処理を繰り返すことで、並列プログラム(E)へのプロセッサ割り当て処理を行う。
【0162】
次に、図16を用いて、本例の並列プログラムスケジューラによる並列プログラムの動作制御手順について、特に、複数の並列プログラムを多重に実行する場合に、予め定められた周期で、並列プログラムのプロセッサへの割り当ての変更要否を判別し、次周期で変更要と判別された変更前の並列プログラムで逐次演算処理を実行中であれば、この逐次演算処理を次周期での空きプロセッサに割り当てる動作を説明する。
【0163】
図16は、図12のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【0164】
ここでは、プロセッサ1100〜1400の4台のプロセッサで、並列プログラムAと並列プログラムBの2つの並列プログラムが多重に動作しているものとする。
【0165】
また、並列プログラムAは4つの演算処理を持つ4並列の並列プログラムであり、並列プログラムBは3つの演算処理を持つ3並列の並列プログラムであるものとする。
【0166】
先ず、時刻T1301において、並列プログラムAがスケジュールされており、並列プログラムAの演算処理A3121〜A3124が、プロセッサ1100〜1400に割り当てられ、並列演算処理を実行している。
【0167】
このとき、並列プログラムBは、プロセッサ割り当て待ちキュー4000に接続されて、次のプロセッサ割り当て待ちとなっている。
【0168】
次の時刻T1302において、並列プログラムAの並列演算処理が完了し、演算処理A3121が逐次処理を開始し、並列プログラムAの演算処理A3122〜A3124は、次の並列演算処理のためのバリア同期待ち命令を発行する。
【0169】
そして、時刻T1303において、定期的な並列プログラムスケジューラの動作が発生し、プロセッサ使用量などを考慮した優先度に従って、並列プログラムAへのプロセッサ1100〜1400の割り当てが解除され、並列プログラムBにプロセッサ1200〜1400が割り当てられる。
【0170】
この並列プログラムAへのプロセッサ割り当て解除処理において、演算処理A3122〜A3124はバリア同期待ちを行っており、演算処理A3121への1プロセッサのみで実行が可能であるため、演算処理A3121が空きプロセッサ1100へ割り当てられる。
【0171】
以上、図1〜図16を用いて説明したように、本例では、一つの連続する演算を複数の処理単位に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行する際、並列プログラムでの逐次演算処理の開始を検知すると、この逐次演算処理に対してプロセッサを割り当てるが、逐次演算処理が完了するまで、並列プログラムの並列演算処理に対してのプロセッサの割り当ては保留する。
【0172】
あるいは、処理中の並列プログラムAでの逐次演算処理の開始を検知し、この逐次演算処理にプロセッサを割り当てると、並列プログラムAの並列演算処理に対するプロセッサの割り当てを解除し、この割り当てを解除したプロセッサを、他の並列プログラムの並列演算処理に割り当てる。
【0173】
また、逐次演算処理の開始を検知した後、この逐次演算処理が所定時間経過したことを検知した後、逐次演算処理に対するプロセッサの割り当て、並列演算処理に対するプロセッサの割り当て解除等を実行する。あるいは、予め定められた周期で、並列プログラムのプロセッサへの割り当ての変更要否を判別し、次周期で変更要と判別された変更前の並列プログラムで逐次演算処理を実行中であれば、この逐次演算処理を次周期での空きプロセッサに割り当てる。
【0174】
このように、本例では、逐次処理中には、並列プログラムの逐次処理処理にのみ独立したプロセッサを割り当て、空いたプロセッサに他の並列プログラムや逐次プログラムを割り当て、並列演算処理の開始時には、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てることにより、実際の演算に対するプロセッサの稼働率を向上し得る。
【0175】
また、並列演算処理の開始待ちが一定時間に達したことを検知する機能を持ち、並列演算処理の終了後の逐次処理が、一定時間、並列演算処理の開始が行なわれなかった場合に、並列プログラムの逐次処理にのみ独立したプロセッサを割り当てることにより、短時間の逐次処理の開始、及び、並列演算処理の開始で、頻繁なプロセッサの割り当て変更によるオーバヘッドを低減し得る。
【0176】
また、並列演算の開始待ちを行なっていることを静的に検知する機能を持ち、スケジュール切り替え時に、次にスケジュールする並列プログラムが、逐次処理中か並列演算処理中かを判断し、逐次処理中には、並列プログラムの逐次処理にのみ独立したプロセッサを割り当て、並列演算処理の開始時には、並列プログラムの全ての並列演算処理に独立したプロセッサを同時に割り当てることにより、各々の並列演算処理が不均一であった場合に断片的に発生するプロセッサの割り当て変更によるオーバヘッドを低減し得る。
【0177】
これにより、複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを用いたコンピュータシステムにおいて、実際の演算に対するプロセッサの稼働率を向上させることができる。
【0178】
尚、本発明は、図1〜図16を用いて説明した例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。例えば、本例では、プロセッサの台数を4台として説明したが、プロセッサの台数はこの4台に限られるものではない。
【0179】
また、本例で複数のプロセッサ(CPU、MPU)に割り当てる処理単位は、プロセスとしてもスレッドとしても、あるいは、各並列プログラム単位としても良い。
【0180】
また、コンピュータ構成例としても、キーボードや光ディスクの駆動装置の無いコンピュータ構成としても良い。また、本例では、光ディスクを記録媒体として用いているが、FD(Flexible Disk)等を記録媒体として用いることでも良い。また、プログラムのインストールに関しても、通信装置を介してネットワーク経由でプログラムをダウンロードしてインストールすることでも良い。
【0181】
【発明の効果】
本発明によれば、複数の並列プログラム、及び逐次プログラムを多重に実行する複数のプロセッサを用いたコンピュータシステムにおいて、実際の演算に対するプロセッサの稼働率の向上を図ることが可能である。
【図面の簡単な説明】
【図1】本発明に係わるプログラム割当制御システムの第1の構成例を示すブロック図である。
【図2】図1における並列プログラムスケジューラによる並列プログラムのスケジュール処理手順例を示すフローチャートである。
【図3】図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール選択処理手順例を示すフローチャートである。
【図4】図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【図5】図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【図6】図1のプログラム割当制御システムにおける並列プログラムの制御動作例を示す説明図である。
【図7】図1の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるバリア同期待ちトラップ処理手順例を示すフローチャートである。
【図8】図1のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【図9】本発明に係わるプログラム割当制御システムの第2の構成例を示すブロック図である。
【図10】図9のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【図11】図9のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【図12】本発明に係わるプログラム割当制御システムの第3の構成例を示すブロック図である。
【図13】図12のプログラム割当制御システムにおける並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるスケジュール切替処理手順例を示すフローチャートである。
【図14】図12の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て解除処理手順例を示すフローチャートである。
【図15】図12の並列プログラムスケジューラによる各プロセッサへの並列プログラムのスケジュール処理におけるプロセッサ割り当て処理手順例を示すフローチャートである。
【図16】図12のプログラム割当制御システムにおける多重に実行された複数の並列プログラムの動作制御例を示す説明図である。
【符号の説明】
1000:プロセッサ群、1100〜1400:プロセッサ、1110:バリア同期待ち機構、1120:バリア同期待ちタイマ、1130:バリア同期ステータス、2000:並列プログラムスケジューラ、3000:プロセッサ割り当て済みキュー、3100〜3300,4100〜4300:並列プログラム、3110:演算処理(管理テーブル)、3120:演算フラグ、3130:演算処理数、3140:演算処理実行数、3150:優先度、3160:スケジュールフラグ、4000:プロセッサ割り当て待ちキュー、5000:空きプロセッサ数(カウンタ)、5100:空きプロセッサビットマップ。

Claims (7)

  1. 一つの連続する演算を複数の処理単位に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行するコンピュータシステムのプログラム割当制御方法であって、
    上記並列プログラムでの逐次演算処理の開始を検知するステップと、
    該逐次演算処理に対してプロセッサを割り当てるステップと、
    上記逐次演算処理が完了するまで、上記並列プログラムの並列演算処理に対してのプロセッサの割り当てを保留するステップと
    を有することを特徴とするプログラム割当制御方法。
  2. 一つの連続する演算を複数の処理単位に分けて並列に処理する並列プログラムを、複数のプロセッサで多重に実行するコンピュータシステムのプログラム割当制御方法であって、
    処理中の並列プログラムAでの逐次演算処理の開始を検知する第1のステップと、
    該逐次演算処理にプロセッサを割り当てる第2のステップと、
    上記並列プログラムAの並列演算処理に対するプロセッサの割り当てを解除する第3のステップと、
    該割り当てを解除したプロセッサを、他の並列プログラムの並列演算処理に割り当てる第4のステップとを有することを特徴とするプログラム割当制御方法。
  3. 請求項2に記載のプログラム割当制御方法であって、
    上記第1のステップで逐次演算処理の開始を検知した後、該逐次演算処理が所定時間経過したことを検知するステップを有し、
    該ステップでの検知後、上記第3のステップでの処理および上記第4のステップでの処理を行うことを特徴とするプログラム割当制御方法。
  4. 請求項2、もしくは、請求項3のいずれかに記載のプログラム割当制御方法であって、
    予め定められた周期で、並列プログラムのプロセッサへの割り当ての変更要否を判別するステップと、
    次周期で変更要と判別された変更前の並列プログラムで逐次演算処理を実行中であれば、該逐次演算処理を次周期での空きプロセッサに割り当てるステップと
    を有することを特徴とするプログラム割当制御方法。
  5. コンピュータに、請求項1から請求項4のいずれかに記載のプログラム割当制御方法における各ステップを実行させるためのプログラム。
  6. 一つの連続する演算を複数の処理単位に分け、複数のプロセッサに割り当てて並列に処理する並列プログラムを実行するコンピュータのプログラム割当制御システムであって、
    上記並列プログラムでの逐次演算処理の開始を検知する手段と、
    該手段で検知した逐次演算処理に対してはプロセッサを割り当て、当該並列プログラムの並列演算処理に対しては、上記逐次演算処理が完了するまで、プロセッサの割り当てを保留する手段と
    を有することを特徴とするプログラム割当制御システム。
  7. 一つの連続する演算を複数の処理単位に分けて並列に処理する並列プログラムを、複数のプロセッサで多重に実行するコンピュータのプログラム割当制御システムであって、
    処理中の並列プログラムAでの逐次演算処理の開始を検知する第1の手段と、
    該逐次演算処理にはプロセッサを割り当て、上記並列プログラムAの並列演算処理に対するプロセッサの割り当てを解除し、該割り当てを解除したプロセッサを、他の並列プログラムの並列演算処理に割り当てる第2の手段とを有することを特徴とするプログラム割当制御システム。
JP2002269762A 2002-09-17 2002-09-17 プログラム割当制御方法とプログラムおよびプログラム割当制御システム Expired - Fee Related JP3951230B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002269762A JP3951230B2 (ja) 2002-09-17 2002-09-17 プログラム割当制御方法とプログラムおよびプログラム割当制御システム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002269762A JP3951230B2 (ja) 2002-09-17 2002-09-17 プログラム割当制御方法とプログラムおよびプログラム割当制御システム

Publications (2)

Publication Number Publication Date
JP2004110249A true JP2004110249A (ja) 2004-04-08
JP3951230B2 JP3951230B2 (ja) 2007-08-01

Family

ID=32267598

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002269762A Expired - Fee Related JP3951230B2 (ja) 2002-09-17 2002-09-17 プログラム割当制御方法とプログラムおよびプログラム割当制御システム

Country Status (1)

Country Link
JP (1) JP3951230B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009238157A (ja) * 2008-03-28 2009-10-15 Seiko Epson Corp ソケット管理装置及び方法
JP2010250821A (ja) * 2009-04-15 2010-11-04 Asml Netherlands Bv リソグラフィ装置、制御システム、マルチコアプロセッサ、およびマルチコアプロセッサにおいてタスクを開始する方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02144657A (ja) * 1988-11-26 1990-06-04 Hitachi Ltd 並列演算処理装置
JPH06139210A (ja) * 1992-10-26 1994-05-20 Toshiba Corp 映像信号処理装置
JPH1074150A (ja) * 1996-06-28 1998-03-17 Fujitsu Ltd プロセススケジューリング方法ならびにそのためのプロセススケジューリング装置およびプログラム記憶媒体
JPH10143380A (ja) * 1996-11-07 1998-05-29 Hitachi Ltd マルチプロセッサシステム
JPH10240549A (ja) * 1997-02-24 1998-09-11 Hitachi Ltd 並列ジョブ多重スケジューリング方法及び装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02144657A (ja) * 1988-11-26 1990-06-04 Hitachi Ltd 並列演算処理装置
JPH06139210A (ja) * 1992-10-26 1994-05-20 Toshiba Corp 映像信号処理装置
JPH1074150A (ja) * 1996-06-28 1998-03-17 Fujitsu Ltd プロセススケジューリング方法ならびにそのためのプロセススケジューリング装置およびプログラム記憶媒体
JPH10143380A (ja) * 1996-11-07 1998-05-29 Hitachi Ltd マルチプロセッサシステム
JPH10240549A (ja) * 1997-02-24 1998-09-11 Hitachi Ltd 並列ジョブ多重スケジューリング方法及び装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009238157A (ja) * 2008-03-28 2009-10-15 Seiko Epson Corp ソケット管理装置及び方法
JP4586873B2 (ja) * 2008-03-28 2010-11-24 セイコーエプソン株式会社 ソケット管理装置及び方法
JP2010250821A (ja) * 2009-04-15 2010-11-04 Asml Netherlands Bv リソグラフィ装置、制御システム、マルチコアプロセッサ、およびマルチコアプロセッサにおいてタスクを開始する方法

Also Published As

Publication number Publication date
JP3951230B2 (ja) 2007-08-01

Similar Documents

Publication Publication Date Title
TWI410866B (zh) 排程方法、排程裝置、多工處理器系統及排程用程式
US5349682A (en) Dynamic fault-tolerant parallel processing system for performing an application function with increased efficiency using heterogeneous processors
JP2008084009A (ja) マルチプロセッサシステム
JP5408356B2 (ja) スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法
JP5874811B2 (ja) 情報処理方法、プログラム、および情報処理装置
JPWO2002069174A1 (ja) 並列プロセス実行方法、及びマルチプロセッサ型コンピュータ
CN101702134A (zh) 无操作系统干预情况下调度os隔离定序器上的线程的机制
EP2802997A1 (en) Pricing of resources in virtual machine pools
JP2008090546A (ja) マルチプロセッサシステム
KR20070090649A (ko) 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법
JP5820525B2 (ja) 仮想計算機のスケジュールシステム及びその方法
JP5321748B2 (ja) マルチコアプロセッサシステム、スレッド制御方法、およびスレッド制御プログラム
JP3962370B2 (ja) 資源予約システムおよび資源予約方法および該方法を実行するためのプログラムが記録された記録媒体
JP3951230B2 (ja) プログラム割当制御方法とプログラムおよびプログラム割当制御システム
Al-Bayati et al. Task placement and selection of data consistency mechanisms for real-time multicore applications
JP2002530736A (ja) 多重処理システムにおける改良結果処理方法
US20230123634A1 (en) Dynamic, low-latency, dependency-aware scheduling on simd-like devices for processing of recurring and non-recurring executions of time-series data
Piel et al. Load-balancing for a real-time system based on asymmetric multi-processing
JP5243822B2 (ja) 仮想化されたデータ処理環境におけるワークロード管理
JP2010182199A (ja) ジョブスケジューリングシステム、方法、及びプログラム
JP2003186686A (ja) リソース制御装置、方法及び記憶媒体
JP3648402B2 (ja) コンパイル方法及びコンパイラ装置
JP2002014827A (ja) プロセスの制御及び可視化方法
JPH11249917A (ja) 並列型計算機及びそのバッチ処理方法及び記録媒体
JPS63300350A (ja) マルチプロセッサシステムのタスクスケジュ−ル方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040813

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061006

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061204

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070330

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070412

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees