JP5465105B2 - 計算機システム及びコンピュータプログラム及びパイプライン処理方法 - Google Patents

計算機システム及びコンピュータプログラム及びパイプライン処理方法 Download PDF

Info

Publication number
JP5465105B2
JP5465105B2 JP2010140181A JP2010140181A JP5465105B2 JP 5465105 B2 JP5465105 B2 JP 5465105B2 JP 2010140181 A JP2010140181 A JP 2010140181A JP 2010140181 A JP2010140181 A JP 2010140181A JP 5465105 B2 JP5465105 B2 JP 5465105B2
Authority
JP
Japan
Prior art keywords
processing
thread
processing device
time
computer
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.)
Active
Application number
JP2010140181A
Other languages
English (en)
Other versions
JP2012003653A (ja
Inventor
和宏 村山
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2010140181A priority Critical patent/JP5465105B2/ja
Publication of JP2012003653A publication Critical patent/JP2012003653A/ja
Application granted granted Critical
Publication of JP5465105B2 publication Critical patent/JP5465105B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

この発明は、1以上の処理装置を有する複数の計算機からなる計算機システムに関する。また、そのような計算機システムを用いて、リアルタイム性が要求されるパイプライン処理をするパイプライン処理方法に関する。
複数の処理装置を有する計算機システムにおいて、処理の負荷を分散させることにより、処理にかかる時間を短縮する技術がある。
特開2005−157955号公報 特開2008−123205号公報 特開2008−165301号公報 特開2008−191949号公報
計算機システムが複数の計算機を有し、各計算機が1以上の処理装置を有する場合、同じ計算機の処理装置の間の通信コストと、異なる計算機の処理装置の間の通信コストとは同じではない。このため、処理の負荷を均等に分散させるだけでは、効率が悪くなり、処理にかかる時間が短縮しない場合がある。
この発明は、例えば、上記のような課題を解決するためになされたものであり、効率よく処理の負荷を分散させることにより、パイプライン処理にかかる時間が制限時間を超過するのを未然に防ぐことを目的とする。
この発明にかかる計算機システムは、
所定の周期で繰り返し入力データを入力し、直列関係にある複数のプロセスからなるパイプライン処理により上記入力データを処理し、最前段のプロセスは上記入力データを処理して処理結果を出力し、後段のプロセスは前段のプロセスが出力した処理結果を処理して処理結果を出力し、上記入力データを入力した時刻から所定の制限時間が経過するまでの間に最後段のプロセスが処理結果を出力することを要求される計算機システムにおいて、
上記計算機システムは、複数の計算機と、スレッド開始時刻取得部と、スレッド終了時刻取得部と、プロセス開始時刻算出部と、プロセス終了時刻算出部と、プロセス処理時間算出部と、パイプライン処理時間算出部と、パイプライン処理時間予測部と、制限時間超過判定部と、分割プロセス選択部と、空き処理装置選択部と、スレッド起動部と、他計算機処理装置選択部と、他計算機スレッド起動部とを有し、
上記複数の計算機の各計算機は、1以上の処理装置を有し、
上記複数の計算機のうち少なくともいずれかの計算機の少なくともいずれかの処理装置は、上記パイプライン処理の複数のプロセスのうちいずれかのプロセスの処理の少なくとも一部の処理をスレッドとして実行し、
上記プロセス処理時間算出部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、各周期の入力データについて、上記パイプライン処理の各プロセスの処理にかかった時間を算出し、
上記パイプライン処理時間算出部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、各周期の入力データについて、上記パイプライン処理にかかった時間を算出し、
上記パイプライン処理時間予測部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記パイプライン処理時間算出部が算出した時間に基づいて、将来の周期において上記パイプライン処理にかかる時間を予測し、
上記制限時間超過判定部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記パイプライン処理時間予測部が予測した時間に基づいて、将来の周期において上記制限時間を超過するか否かを判定し、
上記分割プロセス選択部は、将来の周期において上記制限時間を超過すると上記制限時間超過判定部が判定した場合に、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記プロセス処理時間算出部が算出した時間に基づいて、上記複数のプロセスのうちから、プロセスの処理にかかる時間が増加しているプロセスを選択し、
上記空き処理装置選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスについて、上記プロセスの処理の一部であるスレッドを実行している処理装置と同じ計算機の処理装置のなかに、上記プロセスのスレッドを実行していない処理装置があるか否かを判定し、上記プロセスのスレッドを実行していない処理装置があると判定した場合に、上記プロセスのスレッドを実行していないと判定した処理装置を選択し、
上記スレッド起動部は、上記空き処理装置選択部が処理装置を選択した場合に、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記空き処理装置選択部が選択した処理装置に、上記分割プロセス選択部が選択したプロセスのスレッドを新たに実行させ、
上記他計算機処理装置選択部は、上記空き処理装置選択部が処理装置を選択しなかった場合に、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスのスレッドを実行している処理装置と異なる計算機の処理装置のなかから、処理装置を選択し、
上記他計算機スレッド起動部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記他計算機処理装置選択部が選択した処理装置に、上記分割プロセス選択部が選択したプロセスのスレッドを新たに実行させることを特徴とする。
この発明にかかる計算機システムによれば、繰り返し処理の各周期におけるパイプライン処理時間の変化から、将来の周期のパイプライン処理時間を予測するので、制限時間の超過を早い段階で予測し、対策を取ることができる。また、プロセスを分割したスレッドを実行する処理装置を、同じ計算機の処理装置を優先させて選択するので、スレッド間通信の負荷を減らすことができ、プロセスを分割したことによるパイプライン処理時間の短縮効果を確実にすることができる。
実施の形態1における計算機リソース制御方式が対象とする計算機システム1の構成図。 実施の形態1における計算機3が持つCPU4の例を示す図。 実施の形態1における計算機システム1で動作するプロセス群の処理形態を示す図。 実施の形態1におけるプロセス7の構成を示す図。 実施の形態1におけるプロセス7の動作の概要を示す図。 実施の形態1における計算機リソース制御方式の構成を示す図。 実施の形態1における計算機リソース制御方式の各構成要素の連係動作の一例を示す図。 実施の形態1における計算機リソース制御方式の各構成要素の連係動作の別の例を示す図。 実施の形態1におけるシステム負荷監視部13の、パイプライン処理の処理時間変動時におけるスレッド8、スレッド8を動作させるCPU4、CPUコア5の決定の手順を示すフローチャート図。 実施の形態1におけるステップS3のシステム負荷監視部13の処理を示すフローチャート図。 実施の形態1におけるプロセスの分割とCPU時間の削減量との関係を説明するための図。 実施の形態1におけるステップS1023における、システム負荷監視部13の他計算機3へのプロセス配置処理を示すフローチャート図。 実施の形態1におけるステップS5における処理手順を示すフローチャート図。 実施の形態2におけるシステム負荷監視部13のステップS3の処理手順を示すフローチャート図。 実施の形態2におけるステップS2017の動作を示すフローチャート図。 実施の形態3におけるシステム負荷監視部13のステップS3の処理手順を示すフローチャート図。 実施の形態4におけるシステム負荷監視部13のステップS4の処理の詳細を示すフローチャート図。 実施の形態5における計算機システム800の全体構成の一例を示すシステム構成図。 実施の形態5における計算機810のハードウェア資源の一例を示すハードウェア構成図。 実施の形態5におけるパイプライン処理850の一例を示す図。 実施の形態5におけるパイプライン処理850のタイミングの一例を示すタイミング図。 実施の形態5におけるプロセス851の処理のタイミングの一例を示すタイミング図。 実施の形態5におけるプロセス851の処理852の構成の一例を示す図。 実施の形態5におけるスレッド854の構成の一例を示す図。 実施の形態5における計算機システム800の機能ブロックの構成の一例を示すブロック構成図。 実施の形態5におけるパイプライン管理処理S400の流れの一例を示すフローチャート図。 実施の形態5におけるプロセス分割工程S405の流れの一例を示すフローチャート図。 実施の形態5におけるプロセス併合工程S409の流れの一例を示すフローチャート図。
計算機リソース制御方式について説明する。
プロセスを処理する計算機を複数台接続して複数のプロセスを連携処理するシステムにおいて、処理対象プロセスが要求するリソース量と、各計算機が持つ余剰リソース量を考慮し、計算機が、プロセスの処理量増加や、システム内計算機の故障などにより、プロセスが必要とするリソース量を提供できなくなった場合に、プロセスの必要とするリソース量を保持する他の計算機に、処理対象プロセスを移行させることにより、プロセスの制限時間超過の継続発生を防ぐ。
このような計算機リソース制御方式では、計算機に複数の異なる処理が動作している場合において、他の計算機に処理を移行すると他の処理の制限時間超過が発生する可能性がある。
また、プロセスを他の計算機に移動させる際、処理を継続させるために必要なデータを移動させる必要がある。例えば、過去N回のデータをもとにして次の処理結果を求める場合、プロセスを移動させ、移動させたプロセスが直ちに処理に参入すると、過去N回のデータを破棄することになり、計算結果が必ずしも正確ではない。
また、近年、CPU内に複数のCPUコアを持つマルチコアCPUが計算機に搭載されている。マルチコアCPUを持つ計算機に従来の計算機リソース制御方式を適用した場合、同一計算機内のCPUコアに処理を再配置したほうが、過去N回のデータを計算機内に保持しているため、処理再配置に伴うオーバーヘッドは小さくなる。このため、同一計算機内の他CPUコアへの配置を優先的に行うことが望ましい。
また、制限時間超過の原因プロセスの処理を、そのプロセスと連携して処理を行う他の計算機のプロセスに配置したほうが計算機間通信の時間を短縮できる。
以下に説明する計算機システムおよびパイプライン処理方法は、マルチコアCPUを搭載した計算機で構成された分散計算機システムにおいて、処理の制限時間超過発生の可能性がある場合に、原因となるプロセスを複数の処理に分割し、分割後の処理を行うスレッドを同一計算機の他CPUコアに優先的に配置することにより、処理の再配置時のオーバーヘッドを小さくする。また、他の計算機にプロセスを起動した場合に、n周期分データを蓄積するだけの時間が経過してから新規起動したプロセスを処理に参入させる。
実施の形態1.
実施の形態1について、図1〜図13を用いて説明する。
図1は、この実施の形態における計算機リソース制御方式が対象とする計算機システム1の構成図である。
本計算機システム1は、ネットワーク2、ネットワーク2に接続された複数の計算機3(3−1、3−2、・・・3−N)によって構成される。
図2は、この実施の形態における計算機3が持つCPU4の例を示す図である。
図のように、本計算機システム1の計算機3は、2つ以上のCPUコア(5−1、5−2、・・・5−N)を持つCPU4(Central Processing Unit)で構成される。各CPU4では、SMP(Symmetric Multi Processing)用OS(Operating System)6が動作しているものとする。SMPではCPUコア5でメモリを共有しているため、異なるCPUコア5で動作するプロセスおよびスレッド間でデータを共有することが可能である。
図3は、この実施の形態における計算機システム1で動作するプロセス群の処理形態を示す図である。
プロセス7は、図のように、パイプライン状に連なって、他のプロセス群と連携して処理を行う。以降、プロセス7がパイプライン状に連なって構成される処理を、パイプライン処理と呼ぶ。各パイプライン処理は、一定の周期で処理を行い、各パイプライン処理は周期内に終了する必要があるリアルタイム処理を行う。
また、プロセス7は、過去N周期の演算結果もとに計算を行うものとする。
図4は、この実施の形態におけるプロセス7の構成を示す図である。
図に示すように、プロセス7は1つ以上のスレッド8によって構成される。
図5は、この実施の形態におけるプロセス7の動作の概要を示す図である。
本計算機リソース制御方式が対象とするプロセス7は、N個のスレッドに処理を分割可能なように作成されており、プロセス7のメインスレッド(プロセス起動時に作成されるスレッド)がデータを受信し、プロセス7内に1つのスレッド8しか存在しない場合には、そのスレッド8がデータを処理してパイプライン処理の次の処理を行うプロセス7にデータを送信し、プロセス7内にスレッド8が複数個ある場合には、これらのスレッド8でデータを分割して処理し、各スレッド8がデータを次の処理を行うプロセス7に送信できるようになっているものとする。
なお、本システムにおける各パイプライン処理およびそれを構成するプロセス7には識別子が付与されており、識別子によってどのプロセス7がどのパイプライン処理に属するかがわかるようになっているものとする。
図6は、この実施の形態における計算機リソース制御方式の構成を示す図である。
本実施の形態における計算機リソース制御方式は、スレッド処理時間監視部9、計算機負荷監視部10、パイプライン処理時間監視部11、スレッド割付部12、システム負荷監視部13、スレッド制御部14によって構成される。以下、各構成要素の役割の概要を説明する。
スレッド処理時間監視部9は、各CPUコア5に1つ存在し、各CPUコア5で動作するスレッド8の処理時間、CPU時間をスレッド制御部14から取得し、それぞれの履歴を保持し、各スレッド8の処理時間、各スレッド8のCPU時間の変動を求める役割を持つ。なお、本実施の形態において、処理時間とは、スレッド8がデータを受信してから、パイプライン処理における次の処理を行うスレッド8にデータを転送し終わるまでに要した時間を示し、CPU時間とは、処理時間のうち実際にCPU4がそのスレッド8に対して演算処理を行った時間を示す。
また、スレッド処理時間監視部9は、パイプライン処理の先頭の処理を行うスレッド8の処理開始時刻、および、パイプライン処理の末尾のスレッド8の処理終了時刻を、パイプライン処理時間監視部11に通知する役割を持つ。
計算機負荷監視部10は、各計算機3に1つ存在し、システム負荷監視部13からの指示にしたがい、プロセス7の処理時間、CPU時間の状況をスレッド処理時間監視部9から取得して返す役割を持つ。また、計算機負荷監視部10は、システム負荷監視部13からの指示に従い、プロセス7の複数スレッド化による処理分散化、スレッド8の処理の集約の実現可/不可の応答を返し、システム負荷監視部13からのスレッド8の起動/停止指示を適切なスレッド割付部12に転送する役割を持つ。
パイプライン処理時間監視部11は、システムに1つ存在し、スレッド処理時間監視部9から送られるパイプライン処理の開始時刻、終了時刻をもとに、パイプライン処理全体の処理時間を求め、パイプライン処理の処理時間の変動の傾向を調査し、今後、T1だけ先の時刻に制限時間オーバーの可能性がある場合、制限時間オーバー発生間近の場合、制限時間が短縮傾向にある場合に、システム負荷監視部13に通知する役割を持つ。ここで、時間T1は、システム中のパイプライン処理のN周期の時間の最大値よりも長いものとする。例えば、システム中のパイプライン処理の処理周期の最大値がCxであった場合、時間T1の値は、Cx×Nよりも大きな値となる。
スレッド割付部12は、計算機負荷監視部10からの指示に基づき、スレッド8の起動/停止を行う役割を持つ。また、スレッド割付部12は、スレッド8に、データの送信先の変更、送信するデータの変更、データ送信元の変更を指示する役割を持つ。
システム負荷監視部13は、システムに1つ存在し、パイプライン処理がどのプロセス7から構成されているかを保持するとともに、パイプライン処理時間監視部11からの、パイプライン処理の処理時間の変動の通知に基づき、処理時間の変動が発生したパイプライン処理のプロセス7が動作する計算機3に対し、プロセス7のCPU時間、処理時間に変動のあったプロセス7の検出の指示を行い、処理時間変動の原因となったプロセス7を検出し、プロセス7のスレッド8への分割や、スレッド数の削減などの処理を各計算機負荷監視部10に指示する役割を持つ。ここで、プロセス7のCPU時間とは、プロセス7を構成するスレッド8のCPU時間の総和であり、プロセス7の処理時間とは、本実施の形態では、処理開始時刻は同一であるとし、スレッド8の処理時間(スレッドの処理終了時刻−スレッドの処理開始時刻)であるとする。
スレッド制御部14は、スレッド8ごとに持つものであり、スレッド処理時間監視部9に、処理開始時刻、処理終了時刻、処理時間中におけるCPU時間を送信する役割を持つ。また、スレッド制御部14は、スレッド割付部12からの、どの計算機にデータを送信すればよいか、各計算機にどの領域のデータを送信するか、どの計算機からどの領域のデータを待つ必要があるか、などの指示を元に、送信すべき全計算機に適切なサイズのデータを送信し、受信すべき全ての送信元スレッドからのデータを受信する役割を持つ。
図7は、この実施の形態における計算機リソース制御方式の各構成要素の連係動作の一例を示す図である。
なお、図において、スレッド8−2−1〜8−2−3は、プロセス7−2の処理を3つのスレッドの処理量が均等になるよう分割したものである。
スレッド8−1−1、スレッド8−2−1〜8−2−3、プロセス8−3−1はそれぞれデータを受け取ると、スレッド処理時間監視部9に処理開始時刻を通知し(A1)、処理を行い、パイプライン処理中における次の処理を行うスレッド8にデータを転送すると、スレッド処理時間監視部9に処理終了時刻のデータを送信する(A2)。パイプライン処理の先頭の処理を行うスレッド(8−1−1)からの処理開始時刻を受信したスレッド処理時間監視部(9−1−1)は、処理開始時刻をパイプライン処理時間監視部11に通知し(A3)、パイプライン処理の末尾の処理を行うプロセスまたはスレッド(8−3−1)からの処理終了時刻を受信するスレッド処理時間監視部(9−3−1)は、処理完了時刻をパイプライン処理時間監視部11に通知する(A4)。
パイプライン処理時間監視部11は、スレッド処理時間監視部9からパイプライン処理の処理開始時刻、処理終了時刻を受信すると、この2つの時刻から処理時間を求め、処理時間の履歴として保持しておく。そして、パイプライン処理時間監視部11は、過去の履歴をもとに処理時間の変動を調査し、今後時間T1以内に制限時間オーバーの可能性が生じた場合、制限時間オーバー発生間近の場合、処理時間が短縮傾向にある場合のいずれかの場合、それらの内容の通知をシステム負荷監視部13に送信する(A6)。なお、パイプライン処理における先頭の処理、または末尾の処理が複数のスレッド8により行われている場合、パイプライン処理の先頭の処理を複数のスレッド8が行っている場合は、同一処理を行っている複数のスレッド8のうち最初に処理を開始したスレッド8の時刻がパイプライン処理の処理開始時刻として採用され、また、パイプライン処理の末尾の処理を複数のスレッド8が行っている場合は、同一処理を行っている複数のスレッド8のうち、最後に処理を終了したスレッド8の時刻がパイプライン処理の処理終了時刻として採用される。また、複数のスレッド8によってプロセス7が構成されている場合は、プロセス7の処理時間は、最初に処理を開始したスレッド8の処理開始時刻から最後に処理を完了したスレッド8の処理完了時刻までとする。そして、その処理時間の中で、プロセス7のCPU時間が求められる。
各スレッド処理時間監視部9は、各CPUコア5で動作するスレッド8の開始時刻、処理終了時刻をスレッド8より受信すると、それぞれのスレッド8の処理時間、CPU時間を求め、計算機負荷監視部10に送信する。計算機負荷監視部10は、スレッド処理時間監視部9から処理時間、CPU時間を受信すると、スレッド8ごとに処理時間、CPU時間の履歴を保持するとともに、プロセス7としての処理時間、CPU時間を求める。また、各履歴をもとに、スレッド8およびプロセス7の処理時間、CPU時間に関する傾向を一次近似式で求め、保持しておく。一次近似式は、例えば最小二乗法などで求めることが考えられる。
図8は、この実施の形態における計算機リソース制御方式の各構成要素の連係動作の別の例を示す図である。
パイプライン処理時間監視部11からシステム負荷監視部13に処理時間変動通知(A6)が届くと、図において、処理時間変動の要因となったプロセス7を調査するため、処理時間変動が発生したパイプライン処理の各スレッド8が動作するCPU4の計算機負荷監視部10に、処理時間に変動のあったプロセス7を抽出するよう指示する(A7)。計算機負荷監視部10は、処理時間の傾向に変動のあったプロセス7の識別子、および、すでに処理を複数のスレッド8に分割している場合は分割数をシステム負荷監視部13に通知する(A8)。
A8以降、システム負荷監視部13は、A8で受信したプロセス7のうち、処理時間が短縮傾向にある場合で、かつ、すでに処理が複数のスレッド8に分割されているプロセス7があれば、デッドラインミスを発生させずにスレッド数を削減させるよう、処理の分割数を決定する。
また、処理が増加傾向にある場合で、かつ、1つのプロセスの分割数がそのCPUのCPUコア数以下である場合には、制限時間オーバーを先延ばしするか、もしくは制限時間オーバーを解消可能なスレッド数に分割するよう、スレッド数、およびスレッドを動作させるCPU、CPUコアを決定する。
なお、システム負荷監視部13の、スレッド数、および、スレッドを動作させるCPU4、CPUコア5の決定方式は、後にフローチャートにて詳細を述べる。
そして、そのプロセス7が動作するCPU4の計算機負荷監視部10に、スレッドの起動、停止などを指示する(A9)。
スレッド8の起動、停止指示を受け取った計算機負荷監視部10は、CPUコア5ごとに存在するスレッド割付部12に、各CPUコア5にスレッドを起動、停止するよう指示し(A10)、スレッド割付部12は、各CPUコア5でスレッド8を起動、停止する(A11)。
図9は、この実施の形態におけるシステム負荷監視部13の、パイプライン処理の処理時間変動時におけるスレッド8、スレッド8を動作させるCPU4、CPUコア5の決定の手順を示すフローチャート図である。
ステップS1で、システム負荷監視部13は、パイプライン処理時間監視部11から処理時間変動の通知を待つ。
パイプライン処理時間監視部11から処理時間変動の通知を受信すると、ステップS2で、システム負荷監視部13は、通知内容が、今後時間T1以内にパイプライン処理の処理時間が制限時間をオーバーすることを示すものであるか、制限時間オーバー発生間近を示すものであるか、処理時間が短縮傾向であることを示すものであるかを調べる。通知内容が時間T1内に制限時間オーバーするというものであれば、ステップS3に進み、制限時間オーバー間近であれば、ステップS5に進み、減少傾向であればステップS4に進み、各ステップにおいて処理を行う。各ステップの処理を終了すると、ステップS1に戻る。システム負荷監視部13は、S1〜S5の処理を、パイプライン処理時間監視部11から通知を受ける限り繰り返す。
図10は、この実施の形態におけるステップS3のシステム負荷監視部13の処理を示すフローチャート図である。
ステップS1001で、システム負荷監視部13は、パイプライン処理時間監視部11から受信したパイプライン処理の識別子より、そのパイプライン処理を構成するプロセス7を調べる。
ステップS1002で、システム負荷監視部13は、ステップS1001で抽出したプロセス7が動作する計算機3の計算機負荷監視部10に、処理時間、CPU時間が増加傾向にあるプロセス7と、処理時間、CPU時間の変化に関する近似式、およびプロセス7の現在の分割数を調べるよう指示し、計算機負荷監視部10からこれらの通知を受信し、記憶しておく。
ステップS1003で、システム負荷監視部13は、各パイプライン処理を構成するプロセス7のCPU時間の増加量、処理時間の増加量、および、パイプライン処理の処理時間の増加量から、パイプライン処理の処理時間増加が、パイプライン処理を構成するプロセス7に原因があるのか、同一CPUコア5で動作する、より優先度の高い他のパイプライン処理に属するスレッド8がCPU4を占有したことによって処理時間が長くなって起きたのか、を調査する。
調査の具体的な方法としては、例えば、パイプライン処理を構成するスレッド8のCPU時間の増加量とパイプライン処理の処理時間の増加量の差を求め、パイプライン処理の処理時間の増加量が各スレッド8のCPU時間の増加量の和と同一であれば、制限時間オーバーの可能性のあるパイプライン処理に属するスレッド8がCPU4を占有したことによって処理時間が長くなったことと考えることができる。
なお、本実施の形態では、現在時刻より時間T1だけ先の時刻までに制限時間オーバーが発生する原因が、自パイプライン処理を構成するプロセス7にあるパイプライン処理に対してのみ処理時間短縮に向けた処理を行うこととする。この理由は、このパイプライン処理のスレッド8の実行時間を短縮することにより、制限時間オーバーの原因が他のパイプライン処理を構成するプロセス7にある場合のパイプライン処理の時間短縮も可能となると考えられるためである。
ステップS1003で、システム負荷監視部13は、処理時間短縮に向けた処理を行うパイプライン処理の識別子を全て抽出し、記憶する。
ステップS1004で、システム負荷監視部13は、ステップS1003において処理時間短縮に向けた処理を行うことになったパイプライン処理の全てについて、S1005〜S1023を行ったかどうかを調べ、行った場合は終了し、行っていなければ、パイプライン処理の処理時間短縮に向けた処理を行う。
ステップS1005以降では、まず、パイプライン処理の制限時間オーバー発生の原因となったプロセス7の処理を同一CPU4上の他CPUコア5にて分割することにより制限時間オーバーの解消を目指し、それが不可能であれば、他計算機3へのプロセス移行を行う。
以下、ステップS1005以降の処理を説明する。
ステップS1005で、システム負荷監視部13は、ステップS1003で抽出したパイプライン処理の中から1つを選択する。
ステップS1006で、システム負荷監視部13は、ステップS1005で選択したパイプライン処理を構成するプロセス7中のCPU時間が増加傾向にあるプロセス7で、ステップS1007で記憶した分割数(ステップS1005で選択したパイプライン処理について、ステップS1007で分割数を記憶していない場合には、ステップS1002にて記憶した分割数)にさらに1加えた場合に、現在時刻からT1だけ先の時刻において1スレッドあたりのCPU時間の削減量の最も多いプロセスを選択する。
図11は、この実施の形態におけるプロセスの分割とCPU時間の削減量との関係を説明するための図である。
例えば、図において、パイプライン処理Aがプロセス1、プロセス2、プロセス3で構成され、プロセス1とプロセス3のCPU時間が増加傾向にあったとする。ステップS1002にて記憶しているプロセス1の分割数が1、プロセス3の分割数が3であったとし、現在時刻から時間T1だけ先の時刻におけるプロセス1、プロセス3のCPU時間を、ステップS1002で記憶した近似式を用いて求めたところ、プロセス1のCPU時間が100、プロセス3のCPU時間が120であったとする。この場合、プロセス1の分割数を1加えるとプロセス1の分割数は2であり、各スレッドのCPU時間は50、プロセス3の分割数を1加えると、プロセス3の分割数は4となり、CPU時間は30となる。本例の場合、元のプロセス1の分割数は1、スレッドのCPU時間は100であり、分割数を1増やした(分割数は2となる)場合のプロセス1を構成するスレッドのCPU時間は50となり、削減量は50となる。そして、プロセス3は、元は3つのスレッドに分割されており、元の各スレッドのCPU時間は40であったため、分割数を1増やした(分割数は4となる)場合のスレッドのCPU時間は30となり、削減量は10である。以上から、スレッドのCPU時間の削減量の最も多いプロセスはプロセス1となるため、プロセス1を選択する。
ステップS1007で、システム負荷監視部13は、ステップS1006で選択したプロセス7のみ分割数を1加え、その他のプロセス7の分割数はステップS1002で記憶したときのままとして記憶する。前記の例の場合、プロセス1の分割数を2、プロセス3の分割数を3として記憶する。
ステップS1008で、システム負荷監視部13は、ステップS1007の分割数における、現在時刻から時間T1だけ先の時刻におけるパイプライン処理の処理時間を求める。
ステップS1009で、システム負荷監視部13は、制限時間オーバーが解消されるかどうか調べる。制限時間オーバーが解消されなければ、ステップS1022に進む。
ステップS1022において、システム負荷監視部13は、ステップS1007における各プロセス7の分割数が、そのプロセス7が動作する計算機3のうち、同一パイプライン処理に属する他のプロセス7、スレッド8が動作していないCPUコア数の値よりも大きいかどうかを調べ、CPUコア数以下であればステップS1006に進む。
コア数よりも大きい場合は、1つのCPUコア5に同一パイプライン処理のスレッド8が複数動作することになり、スレッド8の処理時間が分割数よりも大きくなるため、そのプロセス7をスレッド分割してもパイプライン処理の制限時間オーバーの解消は不可能とし、ステップS1004に進む。
ステップS1022からステップS1006に進んだ場合、ステップS1006において、システム負荷監視部13は、ステップS1005で選択したパイプライン処理を構成するプロセス7で、S1007で記憶した分割数からさらに1だけ加えた場合に、CPU時間の削減量が最も多いプロセスを選択する。前記の例の場合、新たにプロセス1の分割数を1加えると分割数は3となり、スレッドのCPU時間は33.3、スレッドのCPU時間の削減量は16.7、プロセス3の分割数を1加えると分割数は4となり、スレッドのCPU時間は30、CPU時間の削減量は10となる。この場合、スレッドあたりのCPU時間の削減量が最も多いプロセスはプロセス1となる。以下、同様にステップS1007〜ステップS1008を行う。
システム負荷監視部13は、ステップS1005〜ステップS1009を、現在時刻から時間T1だけ先の時刻において、制限時間オーバーが解消されるか、ステップS1006で選択したプロセスの、ステップS1007で記憶したスレッドへの分割数がCPUコア数になっても制限時間オーバー解消が不可能となるまで行う。
ステップS1005〜ステップS1009の処理の結果、現在時刻から時間T1だけ先の時刻において制限時間オーバーが解消される場合、ステップS1010に進む。
ステップS1010以降では、ステップS1006で選択したプロセス群を、ステップS1007で記憶した分割数まで分割し、各スレッドを同一CPU4の異なるCPUコア5に配置させる。
ステップS1010において、システム負荷監視部13は、分割数を変更するプロセス7の中で、過去にステップS1011で選択していないプロセス7のうち、スレッド8あたりのCPU時間が最も長いプロセス7を1つ選択する。
ステップS1011において、システム負荷監視部13は、S1010のプロセス7の新規起動するスレッド8のうち、配置するスレッド8を1つ選択する。
ステップS1012で、システム負荷監視部13は、スレッド8の属するプロセス7が動作する計算機3において、同一プロセス7のスレッド8が動作しておらず、同一パイプライン処理を構成するプロセス7のスレッド8が動作していないCPUコア5を選択し、そのCPUコア5でスレッド8を動作させた場合に、新規起動するスレッド8が動作可能か、そして、そのCPUコア5で動作しているその他のスレッド8が、新規にスレッド8を起動しても制限時間内に動作可能かどうか、を調べる。
スレッドtの処理時間Exec(t)は、スレッドtの起動を予定するCPUコアですでに動作しているスレッドを、処理の優先度の高い順に並べたものを{t,t,…,t,…,t}とし、スレッドtの処理周期をC、CPU時間をcpu(t)とした場合、次の式として表すことができる。
Figure 0005465105
そして、その他のスレッド8の処理時間は、tよりも優先度の高いスレッドは変化せず、tよりも優先度の低い各スレッドtは、次の式の分だけ増加する。
Figure 0005465105
ステップS1013において、システム負荷監視部13は、ステップS1012で求めた各スレッド8の処理時間から、各スレッド8が属するプロセス7の処理時間を求め、プロセス7の処理時間からパイプライン処理の処理時間を求める。そして、システム中のパイプライン処理が制限時間オーバーを発生させないかどうかを調べる。新たに分割数を決定した後の、ステップS1003で抽出した以外のパイプライン処理の処理時間は、「パイプライン処理の処理時間+(分割数決定後のプロセスの処理時間−新しい分割数を決定する前のプロセスの処理時間)」として求めることができる。
ステップS1014で、システム負荷監視部13は、プロセス7の処理時間が変動した全てのパイプライン処理が制限時間オーバーを起こしていないかどうか調べ、起こしていなければ、ステップS1015に進み、制限時間オーバーするパイプライン処理があれば、ステップS1015を行わずにステップS1016に進む。
ステップS1015にて、システム負荷監視部13は、そのCPUコア5をスレッド8の配置先の候補として記憶する。
ステップS1016において、システム負荷監視部13は、同一のパイプライン処理に属するプロセス7のスレッド8が動作していないCPUコア5の全てについてスレッド8の配置可能性の調査を行ったかどうか調べ、行っていなければ、ステップS1012に戻る。調査をおこなった場合はステップS1017に進む。
ステップS1017にて、システム負荷監視部13は、ステップS1015において記憶したCPUコア5、つまり、スレッド8を配置可能なCPUコア5があればステップS1018に進み、記憶したCPUコア5がなければ、そのプロセス7は同一計算機に配置不可能であるため、ステップS1023に進み、他の計算機に配置するための処理を行う。
ステップS1018において、システム負荷監視部13は、ステップS1015にて記憶した全てのCPUコア5のうち、CPU空き時間の最も少ないCPUコア5を、スレッド8の配置先として決定する。ここで求めるCPU空き時間は、最も優先度の低いスレッド8をt、スレッドtの処理周期をC(t)、CPU時間をcpu(t)とすると、次の式で求められる。
Figure 0005465105
そして、ステップS1019において、システム負荷監視部13は、新規起動する全てのスレッド8の再配置が決まっていなければ、ステップS1011に戻る。ステップS1011〜ステップS1019の処理を、全てのスレッド8の配置先が決まるまで行う。
1つのプロセス7の全てのスレッド8の配置が決定したら、ステップS1020で、システム負荷監視部13は、計算機負荷監視部10にステップS1017で記憶したCPUコア5でスレッド8を起動するよう指示する。計算機負荷監視部10は、ステップS1020でスレッド起動の指示を受けると、ステップS1018で記憶したCPUコア5のスレッド割付部12にスレッド起動を指示する。スレッド割付部12は、スレッド8を起動する。その際、スレッド割付部12は、スレッド制御部14に、各スレッド8がデータ中どの部分を処理すべきかを指示し、さらに、パイプライン処理において、自プロセス7の次に処理を行うプロセス7にデータを送信するよう指示する。各スレッド8がデータ中のどの部分を処理すべきか、という分け方は、例えば、各スレッド8にスレッド数と固有の番号を与え、スレッド数に応じてデータを均等分割し、そのうちの自スレッドの番号である、N番目のデータを処理するなどが考えられる。例えば、プロセス7を5つのスレッド8に分割し、100個の配列を持つデータを受信した場合、1番のスレッドは分割後の配列の1番目のブロックである配列の1番目〜20番目のデータを処理する、2番のスレッドは21〜40番目を処理する、などのようなことが考えられる。
その後、ステップS1021に進む。
ステップS1021で、システム負荷監視部13は、全てのプロセス7およびスレッド8について処理を完了していれば、ステップS1004に戻り、完了していなければ、ステップS1010に戻る。
ステップS1023の処理を行う場合は、ステップS1017で、スレッド8を配置可能なCPUコア5が計算機3内に存在しない場合であるため、この場合には、これまでに決定したスレッド8のCPUコア配置をキャンセルし、他の計算機3にプロセス7を配置するための処理を行う。
図12は、この実施の形態におけるステップS1023における、システム負荷監視部13の他計算機3へのプロセス配置処理を示すフローチャート図である。
ステップS1024で、システム負荷監視部13は、他計算機3に移行対象となったプロセス7の動作中の計算機3以外の計算機3を1つ抽出し、分割数をステップS1007で記憶した数とし、ステップS1011〜ステップS1015を行う。
その結果、ステップS1026において、システム負荷監視部13は、ステップS1015でスレッド8の配置先として記憶したCPUコア5があれば、ステップS1027に進む。
ステップS1027で、システム負荷監視部13は、ステップS1018を行う。そして、選択したプロセス7の、新規起動する全てのスレッド8の配置するCPUコア5が決定した場合は、ステップS1029に進む。
ステップS1029で、システム負荷監視部13は、ステップS1027で記憶したCPUコア5全てでスレッド8を起動するよう計算機負荷監視部10に指示する。計算機負荷監視部10は、指定されたCPUコア5でスレッド8を起動するよう、スレッド割付部12に指示する。スレッド割付部12は、スレッド8を起動する。その際、スレッド割付部12は、スレッド制御部14に、各スレッド8がデータ中どの部分を処理すべきかを指示し、さらに、パイプライン処理において、自プロセスの次に処理を行うプロセスにデータを送信しないよう指示する。各スレッド8がデータ中どの部分を処理すべきか、という分け方は、例えば、各スレッド8にスレッド数と固有の番号を与え、スレッド数に応じてデータを均等分割し、そのうちの自スレッドの番号である、N番目のデータを処理するなどが考えられる。例えば、プロセス7を5つのスレッド8に分割し、100個の配列を持つデータを受信した場合、1番のスレッドは分割後の配列の1番目のブロックである配列の1番目〜20番目のデータを処理する、2番のスレッドは21〜40番目を処理する、などのようなことが考えられる。
ステップS1030で、システム負荷監視部13は、パイプライン処理において、選択したプロセス7にデータを送信するプロセス7が動作する計算機3の計算機負荷監視部10に、S1024で選択したホスト(計算機3)で新規プロセスを起動した旨を伝える。計算機負荷監視部10は、スレッド制御部14に、データ送信処理を行うプロセス7が、新規プロセスにデータを送信するよう指示する。これにより、データ送信処理を行うプロセス7が新規プロセスにデータを送信できるようになる。
そして、ステップS1031において、システム負荷監視部13は、選択したプロセス7のデータ送信先となるプロセス7が動作する計算機3の計算機負荷監視部10に、S1024で選択したホスト(計算機3)で新規プロセスを起動した旨を伝え、計算機負荷監視部10は、スレッド制御部14に、新規起動したスレッド8からのデータを破棄するよう指示する。本処理の後、ステップS1021に進む。
ステップS1026において、ステップS1015でスレッドの配置先CPUコアを記憶していなければ、ステップS1024で選択した計算機3でプロセス配置不可とし、ステップS1032に進む。システム負荷監視部13は、未選択の計算機3があれば、ステップS1024に戻る。未選択のCPU4(計算機3)がなければ、そのプロセス7はシステムの全計算機3で配置不可とし、ステップS1021に進む。
また、本実施の形態において、ステップS1023を実行した場合、他の計算機3上にプロセスを新規起動したため、N周期分のデータを蓄積するまでプロセス7を処理に参入させないようにしている。これは、ステップS1031において、処理を分割し、プロセス7からのデータを破棄することにより実現している。
T1時間以上経過し、制限時間オーバーが発生するまでに、パイプライン処理時間監視部11は、システム負荷監視部13に、図9のS1において、制限時間オーバー間近である旨を通知する。すると、システム負荷監視部13は、ステップS5で、新規起動したプロセスを処理に参入させる。
図13は、この実施の形態におけるステップS5における処理手順を示すフローチャート図である。
ステップS1032で、システム負荷監視部13は、新規起動したプロセス7のデータの送信先となるプロセス7が動作する計算機3の計算機負荷監視部10に、新規起動したスレッド8が送信するデータを受信するよう指示する。システム負荷監視部13からの指示を受けた計算機負荷監視部10は、スレッド制御部14に新規起動したスレッド8が送信するデータを受信するよう指示する。これにより、プロセス7は、新規起動したスレッド8からのデータを受信することができる。計算機負荷監視部10からスレッド制御部14への通知内容としては、例えば、自プロセスの前の処理を行うプロセス7のスレッド8の数などが考えられる。スレッド数がわかれば、1回の処理で受信すべきデータ数を把握することができる。
これにより、パイプライン処理において新規起動したプロセス7の次の処理を行うプロセス7は、新規起動したスレッド8からのデータを受信するようになる。
ステップS1033で、新規起動するプロセス7と同一処理を行い新規起動するプロセス7よりも前から動作していたプロセス7の計算機負荷監視部10に、プロセス7を停止するよう指示する。計算機負荷監視部10は、スレッド割付部12にプロセス7の各スレッド8を停止するよう指示し、各CPUコア5で動作するスレッド割付部12は、停止対象のプロセス7のスレッド8を停止させる。
以上説明した計算機システムは、複数のCPUコア5を持つCPU4を搭載した計算機3をネットワーク2により複数台接続することにより構成される。
分散リアルタイム処理システムは、各計算機3の各CPUコア5で複数のプロセス7が連携または独立して動作する。各プロセス7は、一定時間周期で処理を行い、制限時間内に処理を完了することが求められている。
計算機リソース制御方式は、スレッド処理時間監視部9と、計算機負荷監視部10と、パイプライン処理時間監視部11と、スレッド割付部12と、スレッド制御部14と、システム負荷監視部13とを有する。
スレッド処理時間監視部9は、プロセス7の構成要素であるスレッド8の処理時間を監視する。
計算機負荷監視部10は、各計算機3上で動作するスレッド8の処理時間およびCPU時間を取得して履歴を保持し、履歴をもとに処理時間やCPU時間の変動を調査する。
パイプライン処理時間監視部11は、複数のプロセス7が連携して動作する場合に連携動作するプロセス群全体の処理時間を取得し、履歴を保持し、履歴をもとに、処理時間の変動を検出する。
スレッド割付部12は、CPUコア5にてスレッド起動、停止を指示するとともに、データの送信先や送信元の変更、送信するデータの領域などをスレッド制御部14に指示する。
スレッド制御部14は、スレッド割付部12の指示をもとに、各計算機3、各CPUコア5からのデータから、適切なデータ領域のデータを受信し、適切なデータ領域のデータを送信する役割を持つ。
システム負荷監視部13は、処理時間に変更があった場合に、プロセス7のスレッド8への処理の分割やスレッド数の削減などの処理を行う。
計算機リソース制御方式は、各構成要素に以下の特徴を付与することにより、前記分散リアルタイム処理システムの制限時間超過の防止、処理時間短縮時の処理の集約を行う。
・処理の制限時間超過が予想される場合に、システム負荷監視部13により、制限時間超過発生の原因となるプロセス7を、自プロセス7が属する処理およびシステムで動作する全ての処理の制限時間超過が発生しない数の処理に分割する。
・決定した分割数のスレッド8を、元のプロセス7が動作していたCPUコア5に配置できない場合に、システム負荷監視部13が、プロセス7を他の計算機3に移動させ、他のCPUコア5で分割数分のスレッド8を起動する。
・他の計算機3にプロセス7を移動させた場合、スレッド割付部12により、プロセス7が必要とするデータが蓄積された後、プロセス7を処理に参入させる。
このように、本実施の形態の計算機リソース制御方式では、プロセス7を制限時間超過が発生しない数のスレッド8に分割し、そのスレッド8を、元のプロセス7が動作していた計算機3の他CPUコア5に配置させることにより、プロセス移動のオーバーヘッドを排除し、他の計算機3への移行が必要となった場合には、極力同一計算機3内に処理を配置することにより、ステップS5の処理が不要となるため、プロセス7の分散化にともなうオーバーヘッドを排除することが可能になる。また、他の計算機3にてプロセス7を起動した場合も、新規起動したプロセス7が必要とするデータが十分蓄積された段階でそのプロセス7を処理に参入させることにより、演算データの不整合を防ぐことが可能となる。
実施の形態2.
実施の形態2について、図14〜図15を用いて説明する。
なお、実施の形態1と共通する部分については、同一の符号を付し、説明を省略する。
実施の形態1は、パイプライン処理の制限時間オーバーが予想される場合に、パイプライン処理を構成するプロセス7を複数のスレッド8に分割し、全スレッド8を同一計算機3で動作できるようにしたものであるが、次に、一部のスレッド8は元の計算機3の他のCPUコア5で動作可能であるが、他のスレッド8が元の計算機3の他のCPUコア5で動作できない場合に、それらのスレッド8を他の計算機3で動作させる実施の形態を示す。
図14は、この実施の形態におけるシステム負荷監視部13のステップS3の処理手順を示すフローチャート図である。
ステップS2001において、システム負荷監視部13は、ステップS1001〜S1003を実行する。
ステップS2002で、システム負荷監視部13は、ステップS1003において処理時間短縮に向けた処理を行うことになったパイプライン処理の全てについて、ステップS2003〜S2014を行ったかどうかを調べる。行った場合、システム負荷監視部13は、ステップS3を終了する。行っていなければ、システム負荷監視部13は、ステップS2003以降でパイプライン処理の処理時間短縮に向けた処理を行う。
ステップS2003で、システム負荷監視部13は、ステップS1005を実行する。
ステップS2004で、システム負荷監視部13は、ステップS1006〜S1008を実行する。
ステップS2005で、システム負荷監視部13は、現在時刻から時間T1だけ先の時刻において制限時間オーバーが解消される場合、ステップS2006に進む。
制限時間オーバーが解消されない場合、システム負荷監視部13は、ステップS2016に進む。システム負荷監視部13は、現在のスレッドの分割数を調べる。分割数がCPUコア数よりも大きい場合、システム負荷監視部13は、1つのCPUコア5に同一パイプライン処理のスレッド8が複数動作することになり、スレッド8の処理時間が分割数よりも大きくなるため、そのプロセス7をスレッド分割してもパイプライン処理の制限時間オーバーの解消は不可能とし、ステップS2002に戻る。分割数がCPUコア数以下の場合、システム負荷監視部13は、ステップS2004に戻る。
ステップS2006で、システム負荷監視部13は、ステップS1010を実行する。
ステップS2007で、システム負荷監視部13は、ステップS1011を実行する。
ステップS2008で、システム負荷監視部13は、ステップS1012〜S1013を実行する。
ステップS2009で、システム負荷監視部13は、プロセス7の処理時間が変動した全てのパイプライン処理が制限時間オーバーを起こしていないかどうか調べる。起こしていなければ、システム負荷監視部13は、ステップS2010に進む。制限時間オーバーするパイプライン処理があれば、システム負荷監視部13は、ステップS2010を行わずにステップS2011に進む。
ステップS2010にて、システム負荷監視部13は、そのCPUコア5をスレッド8の配置先の候補として記憶する。ステップS2011において、システム負荷監視部13は、同一のパイプライン処理に属するプロセス7のスレッド8が動作していないCPUコア5の全てについてスレッド8の配置可能性の調査を行ったかどうか調べる。行っていなければ、システム負荷監視部13は、ステップS2008に戻る。調査をおこなった場合、システム負荷監視部13は、ステップS2012に進む。
ステップS2012で、システム負荷監視部13は、S1015で記憶したCPUコアがあれば、ステップS2013に進む。
ステップS2013で、システム負荷監視部13は、記憶したCPUコアのうち、最も空きCPU時間の少ないCPUコア5でスレッドを起動する。
ステップS2014で、システム負荷監視部13は、選択したプロセスの全新規起動スレッド8について、配置するCPUコア5が決定していれば、ステップS2015に進む。決定していなければ、システム負荷監視部13は、ステップS2007に戻る。
ステップS2015にて、システム負荷監視部13は、全てのプロセス7のスレッド8の配置先が決定していれば、ステップS2002に戻る。決定していなければ、システム負荷監視部13は、ステップS2006に戻る。
なお、ステップS2012において、ステップS1015で記憶したCPUコア5がなければ、同一計算機3の他コア内にスレッド8を動作可能な計算機3が存在しないことになるため、そのプロセス7の残りスレッド8を他の計算機3で動作させるため、ステップS2017に進む。
図15は、この実施の形態におけるステップS2017の動作を示すフローチャート図である。
ステップS2018において、システム負荷監視部13は、スレッド分割の対象となっているプロセス7が動作している計算機3およびステップS2018で選択した計算機以外の計算機3を1つ選択する。
ステップS2019で、システム負荷監視部13は、選択した計算機3で起動すべきスレッド数を、ステップS1007で記憶したスレッド数から、ステップS1020、ステップS2022で起動したスレッド数を引いたものとする。
ステップS2020で、システム負荷監視部13は、ステップS1011〜S1016を実行する。
ステップ2021で、システム負荷監視部13は、ステップS1015で記憶したCPUコア5があるかどうかを調べ、あればステップS2022に進む。なければ、システム負荷監視部13は、ステップS2026に進む。
ステップS2022で、システム負荷監視部13は、ステップS1018を実行する。
ステップS2023で、システム負荷監視部13は、ステップS2022で選択したCPUコア5でスレッドを起動する。
ステップS2024で、システム負荷監視部13は、パイプライン処理において、起動したプロセス7のデータ送信元となるプロセスに、新規にプロセス7が起動した旨と、起動したホスト(計算機3)を通知する。
ステップS2025で、システム負荷監視部13は、配置すべき全てのスレッド8の配置するCPUコア5が決定したかどうかを調べる。決定していれば、システム負荷監視部13は、ステップS2015に戻る。決定していなければ、システム負荷監視部13は、ステップS2020に戻り、配置先CPUコア5が決定していないスレッド8について、配置可能なCPUコア5の調査を行う。
ステップS2026で、システム負荷監視部13は、S2018で未選択の計算機3があるかどうかを調べる。あれば、システム負荷監視部13は、他の計算機3でスレッド8を起動するため、ステップS2018に進む。未選択の計算機3がなければ、システム負荷監視部13は、制限時間オーバー解消に向けたプロセス7の処理時間短縮を断念し、ステップS2015に戻る。
本実施の形態において、ステップS2017を実行した場合、他の計算機3上にプロセス7を新規起動したため、N周期分のデータを蓄積するまで、プロセス7を処理に参入させないようにする必要がある。そこで、T1時間以上経過し、制限時間オーバーが発生するまでに、パイプライン処理時間監視部11は、システム負荷監視部13に、図9のS1において、制限時間オーバー間近である旨を通知する。そして、ステップS5で、システム負荷監視部13は、新規起動したプロセス7を処理に参入させる。この場合の処理手順において、システム負荷監視部13は、新規起動したプロセス7のデータの送信先となるプロセス7が動作する計算機3の計算機負荷監視部10に、新規起動したプロセス7からのデータを受信するよう指示する。計算機負荷監視部10は、スレッド制御部14に、新規起動したプロセス7からのデータを受信するよう指示する。指示の内容としては、プロセス7が新規起動した計算機3の識別子、スレッド8の数などが考えられる。これにより、パイプライン処理において、新規起動したプロセス7の後の処理を行うプロセス7からのデータを受信するようになり、新規起動したプロセス7は処理に参入することができる。
以上説明した計算機リソース制御方式は、以下の特徴を加えることにより、システムの計算機リソースを効率よく使用する。
・決定した分割数の全てのスレッド8を元のプロセス7が動作していたものと同一計算機3の他CPUコア5に配置できない場合に、システム負荷監視部13により、動作可能なスレッド8のみ配置し、配置できなかったスレッド8を他の計算機3に移動させる。
・プロセス7の一部処理を他の計算機3に移動させた場合、スレッド割付部12により、新規起動した全てのプロセス7が必要とするデータが蓄積された後、全ての新規起動したプロセス7を処理に参入させる。
このように、本実施の形態における計算機リソース制御方式では、同一計算機3のCPUコア5に配置できなかったスレッド8の処理のみ他の計算機に配置することにより、計算機3の余剰リソースを有効に活用することができる。
実施の形態3.
実施の形態3について、図16を用いて説明する。
なお、実施の形態1〜実施の形態2と共通する部分については、同一の符号を付し、説明を省略する。
実施の形態1は、パイプライン処理の制限時間オーバーが予想される場合に、パイプライン処理を構成するプロセス7を複数のスレッド8に分割し、全スレッド8を同一計算機で動作できるようにしたものであるが、次に、CPU時間が増加傾向にあるプロセス7を、パイプライン処理における、自プロセス7の前または後の処理を行うプロセス7が動作する計算機3上の異なるCPUコア5に優先的に配置することにより、プロセス間通信時間を短縮し、パイプライン処理の制限時間オーバーまでの時間をさらに先延ばしにさせる実施の形態を示す。
図16は、この実施の形態におけるシステム負荷監視部13のステップS3の処理手順を示すフローチャート図である。
ステップS3001で、システム負荷監視部13は、S1001〜S1003を行う。
ステップS3002で、システム負荷監視部13は、S1003で抽出した全てのパイプライン処理について、S3003〜S3016を実施したかどうかを調べる。実施していなければ、システム負荷監視部13は、ステップ3003に進む。実施していれば、システム負荷監視部13は、ステップS3を終了する。
ステップS3003において、システム負荷監視部13は、ステップS1005を実行する。
ステップS3004において、システム負荷監視部13は、ステップS1006〜S1008を実行する。
ステップS3005において、システム負荷監視部13は、ステップS1006で選択したプロセス7をステップS1007で記憶したスレッド数に分割した場合に、制限時間オーバーの解消が可能であるかどうかを調べる。可能であれば、システム負荷監視部13は、ステップS3006に進む。可能でなければ、システム負荷監視部13は、ステップS3004に戻る。
ステップS3006で、システム負荷監視部13は、ステップS1010を実行する。
ステップS3007で、システム負荷監視部13は、パイプライン処理において、ステップS3006で選択したプロセス7のデータ送信元となるプロセス7が動作する計算機3があるかどうかを調べる。あれば、システム負荷監視部13は、ステップS3008に進む。なければ、システム負荷監視部13は、ステップS3017に進む。
ステップS3008で、システム負荷監視部13は、その計算機を選択する。
ステップS3009で、システム負荷監視部13は、ステップS1011を実行する。
ステップS3010で、システム負荷監視部13は、ステップS3007で選択した計算機3のCPUコア5において、ステップS3006で選択したプロセス7と同一パイプライン処理に属するプロセス7のスレッド8が動作していないCPUコア5が、分割数以上あるかどうかを調べる。あれば、システム負荷監視部13は、ステップS3011に進む。なければ、システム負荷監視部13は、ステップS3017に進む。
ステップS3011で、システム負荷監視部13は、ステップS1012〜S1016を実行する。
ステップS3012で、システム負荷監視部13は、ステップS1015で記憶したCPUコア5があるかどうかを調べる。あれば、システム負荷監視部13は、ステップS3013に進む。ステップS1015で記憶したCPUコア5がなければ、スレッド8がその計算機3に配置できないことを意味するので、システム負荷監視部13は、ステップS3017に進む。
ステップS3013で、システム負荷監視部13は、ステップS1018を実行する。
ステップS3014において、システム負荷監視部13は、ステップS3006で選択したプロセス7の新規起動スレッド8を配置するCPUコア5が決定していなければ、ステップ3009に戻り、他のスレッド8を動作させるCPUコア5の決定処理を行う。決定していれば、システム負荷監視部13は、ステップS3014に進む。
ステップS3015で、システム負荷監視部13は、ステップS1020を行う。
ステップS3016で、システム負荷監視部13は、全てのプロセス7のスレッド8の配置先が決定したかどうかを調べる。決定していれば、システム負荷監視部13は、ステップS3002に進む。決定していなければ、システム負荷監視部13は、ステップS3006に戻り、他のプロセス7のスレッド8を動作させる計算機3およびCPUコア5を決定する。
ステップS3017において、システム負荷監視部13は、パイプライン処理において、ステップS3006で選択したプロセス7のデータ送信先となるプロセス7が動作する計算機3へのプロセス7の配置可能性を調べたかどうかを調べる。未調査であれば、システム負荷監視部13は、ステップS3006で選択したプロセス7のデータ送信先となるプロセス7が動作する計算機を選択し、ステップS3008以降を実行する。調査済であれば、システム負荷監視部13は、パイプライン処理において、自プロセスの前または後の処理を行うプロセス7と同一計算機3に配置するのを断念し、ステップ3017に進み、それ以外の計算機3に配置を試行する。
ステップS3017の動作は、ステップS2018で、自プロセスが動作している計算機3、ステップS3001〜S3017で調査した計算機3以外の計算機3を選択すること以外は図15のステップS2017と同じである。
以上説明した計算機リソース制御方式は、以下の特徴を加えることにより、分散処理におけるプロセス間の計算機間通信の所要時間を短縮させる。
・制限時間オーバーの原因となったプロセス7を、連携して処理を行う他の計算機3上のプロセス7と同一の計算機3の他CPUコア5に配置する。
このように、本実施の形態における計算機リソース制御方式では、制限時間超過の可能性がある場合に、その原因となるプロセス7を、パイプライン処理において、前後の処理を行うプロセス7と同一計算機3の他CPUコア5に配置することにより計算機間通信時間を短縮することができ、制限時間オーバーまでの時間を先延ばしにすることができる。
実施の形態4.
実施の形態4について、図17を用いて説明する。
なお、実施の形態1〜実施の形態3と共通する部分については、同一の符号を付し、説明を省略する。
実施の形態1から実施の形態3では、パイプライン処理の処理時間が増加している際に、パイプライン処理の制限時間オーバーを防ぐために、制限時間オーバーの原因となっているプロセス7をスレッド8に分割することについて述べたが、本実施の形態は、パイプライン処理の処理時間が増加から短縮に転じたときに、実施の形態1から実施の形態3までの方式によって分散させた処理を集約させることについて述べる。
図9のフローチャートにおいて、パイプライン処理の処理時間が短縮傾向にある場合、パイプライン処理時間監視部11は、そのパイプライン処理の処理時間の変動の監視を継続し、処理時間が一定になったときに、システム負荷監視部13に、処理時間が減少傾向にあるパイプライン処理の識別子を通知する。すると、システム負荷監視部13は、ステップS4において、処理の集約を行う。
図17は、この実施の形態におけるシステム負荷監視部13のステップS4の処理の詳細を示すフローチャート図である。
ステップS4001において、システム負荷監視部13は、パイプライン処理時間監視部11から受信したパイプライン処理の識別子より、そのパイプライン処理を構成するプロセス7を調べる。
ステップS4002で、システム負荷監視部13は、ステップS4001で抽出したプロセス7が動作する各計算機負荷監視部10に、処理時間、CPU時間が減少したプロセスと、処理時間、CPU時間の変化に関する近似式、およびプロセス7の現在の分割数を調べるよう指示し、計算機負荷監視部10からこれらの通知を受信し、記憶しておく。
ステップS4003で、システム負荷監視部13は、各パイプライン処理を構成するプロセス7のCPU時間の減少量、処理時間の減少量、および、パイプライン処理のピーク時から処理時間が一定になるまでの処理時間の減少量から、パイプライン処理の処理時間の減少量が、パイプライン処理を構成するプロセス7に原因があるのか、同一CPUコア5で動作する、より優先度の高い他のパイプライン処理を構成するスレッド8の処理時間が短くなったことによって処理時間が短くなったのか、を調査する。
調査の具体的な方式としては、例えば、システム負荷監視部13は、パイプライン処理を構成するスレッド8のCPU時間の減少量とパイプライン処理の処理時間の減少量の差を求める。パイプライン処理の処理時間の減少量が各スレッドのCPU時間の減少量の和と同一であれば、システム負荷監視部13は、処理時間が減少したパイプライン処理に属するスレッドのCPU時間が減少したことによって処理時間が短くなったことが考えられる。
なお、本実施の形態では、処理時間が減少した原因が自パイプライン処理を構成するプロセス7にあるパイプライン処理に対してのみ処理の集約を行うこととする。
ステップS4003で、システム負荷監視部13は、処理の集約を行うパイプライン処理の識別子を全て記憶する。
ステップS4004で、システム負荷監視部13は、ステップS4003において記憶したパイプライン処理の全てについて、S4005〜S4018を行ったかを調べる。行った場合、システム負荷監視部13は、ステップS4を終了する。行っていなければ、システム負荷監視部13は、パイプライン処理に属するプロセス7の集約に向けた処理を行う。
ステップS4005で、システム負荷監視部13は、まず、ステップS4003で記憶したパイプライン処理から1つを選択する。
ステップS4006で、システム負荷監視部13は、ステップS4005で選択したパイプライン処理を構成するプロセス中、CPU時間がピークから減少し、一定になったプロセス7を選択する。
なお、本実施の形態では、CPU時間が増加する前は1つのプロセスであったが、プロセス7が消費するCPU時間の増加により、複数の計算機3で複数のプロセス7に分割して処理を行っている可能性がある。この場合、システム負荷監視部13は、同一処理を行うプロセス7を全て選択する。
ステップS4007で、システム負荷監視部13は、ステップS4006で選択したプロセス群の総スレッド数を求める。
ステップS4008で、システム負荷監視部13は、ステップS4006で選択したプロセス群の各スレッドが動作するCPUコア5から、ステップS4009で未選択のCPUコア5があるかどうかを調べる。あれば、システム負荷監視部13は、ステップS4009に進む。
ステップS4009で、システム負荷監視部13は、CPUコア5を1つ選択する。
ステップS4010で、システム負荷監視部13は、ステップS4009で選択したCPUコア5に集約可能なスレッド8の最大数を求める。例えば、分散配置されているスレッド8のうち1つを、ステップS4009で選択したCPUコア5のスレッド8に集約した場合、そのスレッド8のCPU時間、およびプロセスの処理時間は倍になる。また、2つのスレッドを1つのスレッドに集約した場合には、CPU時間、プロセスの処理時間は3倍になる。スレッドを1つのCPUコア5に集約した場合に、そのプロセス7が属するパイプライン処理が制限時間オーバーを起こさず、かつ、同一CPUコア5で動作するスレッド8が属するパイプライン処理が制限時間オーバーを起こさないような最大値を求める。本ステップ以降、集約処理後、処理を行うスレッド8を被集約スレッド、処理の集約により、処理が不要となるスレッド8を集約スレッドと呼ぶ。
ステップS4011で、システム負荷監視部13は、ステップS4010で求めた最大値を過去に記憶した最大値と比較する。過去の最大値よりも大きければ、システム負荷監視部13は、ステップS4012へ進む。
ステップS4012で、システム負荷監視部13は、その最大値および、ステップS4009で選択したCPUコア5を記憶する。
システム負荷監視部13は、ステップS4009〜S4012を、全てのCPUコア5について実施する。その後、システム負荷監視部13は、ステップS4013に進む。
システム負荷監視部13は、ステップS4013以降で、ステップS4012で記憶したCPUコア5に、記憶した数のスレッド8を集約することとし、集約スレッドを選択する。選択の方式は、そのスレッド8がそのCPUコア5で動作しなくなった場合に、空きCPU時間が最も大きくなるものから順に選択する。空きCPU時間とは、優先度が最低のスレッド8が動作した場合において、1周期の時間でどのスレッド8も動作していない時間のことである。そのCPUコア5において、最も優先度の低いスレッドをtx、スレッドtxの処理周期をC(tx)、CPU時間をcpu(tx)とすると、数13で求めることができる。
ステップS4013で、システム負荷監視部13は、各集約スレッドが動作するCPUコア5において、集約スレッドが不在になった場合の各CPUコア5の空きCPU時間を求める。
ステップS4014で、システム負荷監視部13は、S4013で求めた各CPUコア5の空きCPU時間で、最も大きいものから順に、そのCPUコア5で動作するスレッド8を集約スレッドとして決定する。
ステップS4015において、システム負荷監視部13は、ステップS4010で記憶したスレッド8が動作する計算機3の計算機負荷監視部10に、各集約スレッドが処理を担当していたデータの領域を通知する。そして、計算機負荷監視部10は、スレッド割付部12に、集約するスレッド数および集約スレッドが処理を担当していたデータ領域を通知する。これにより、ステップS4010で記憶したCPUコア5で動作する非集約スレッドは、集約スレッドの処理も行う。ただし、この段階では、パイプライン処理において、集約スレッドのデータ送信先のプロセス7は、集約プロセスのデータのうち、もともと担当していたデータ領域のみを受信し、ステップS4015で新しく担当することとなった集約スレッドのデータの演算結果は破棄する。
ステップS4016で、システム負荷監視部13は、N周期だけ時間が経過するのを待つ。N周期経過後、システム負荷監視部13は、ステップS4017へ進む。
ステップS4017において、システム負荷監視部13は、S4006で選択したプロセス7のデータ送信先となるプロセス7に、集約スレッドが送信する全データを受信するよう指示する。
ステップS4018で、システム負荷監視部13は、集約スレッドが動作する計算機の計算機負荷監視部10に、集約スレッドを停止するよう指示する。計算機の計算機負荷監視部10は、各CPUコア5のスレッド割付部12に、スレッドを停止するよう指示する。スレッド割付部12は、スレッド8を停止する。その後、システム負荷監視部13は、ステップS4004に戻り、S4003で抽出した全てのパイプライン処理について、スレッド8の処理の集約処理が完了したかどうかを調べる。完了していれば、システム負荷監視部13は、ステップS4を終了する。完了していなければ、システム負荷監視部13は、ステップS4005以降を行う。
以上説明した計算機リソース制御方式は、以下の特徴を加えることにより、プロセス7の処理時間が短縮傾向にある場合に処理を集約し、計算機リソース利用を効率化する。
・処理時間が短縮傾向にある分散処理において、処理時間短縮の原因となったプロセス7のスレッド8の数を、自プロセス7が属する処理およびシステム内の全ての処理が制限時間超過を発生させない数にまで集約する。
・スレッド8の集約により、他のスレッド8の処理を行うスレッド8が、処理をするために必要なデータを蓄積した後、処理集約に伴い不要となったスレッド8を停止させる。
このように、本実施の形態における計算機リソース制御方式では、パイプライン処理の処理時間が増加から短縮に転じた場合に、その原因となったプロセス7の処理を、自プロセスが属するパイプライン処理および他のパイプライン処理が制限時間超過を発生させない程度に集約することにより、計算機リソースの利用効率化を実現することができる。また、処理を集約した際に、これまで集約スレッドが行っていた処理を代行することとなった被集約スレッドの、代行処理箇所を、パイプライン処理の後段処理が十分に時間が経過してから採用することにより、演算結果の不整合を防ぐことを可能とする。
実施の形態5.
実施の形態5について、図18〜図28を用いて説明する。
なお、実施の形態1と共通する部分については、同一の符号を付し、説明を省略する。
図18は、この実施の形態における計算機システム800の全体構成の一例を示すシステム構成図である。
計算機システム800は、複数の計算機810と、ネットワーク820とを有する。ネットワーク820は、複数の計算機810を相互に接続する。複数の計算機810は、ネットワーク820を介して通信する。
複数の計算機810のうち少なくともいずれかの計算機810は、計算機システム800の外部からデータを入力する。複数の計算機810のうち少なくともいずれかの計算機810は、計算機システム800の外部へデータを出力する。外部からデータを入力する計算機810と、外部へデータを出力する計算機810とは、同じ計算機810でもよいし、異なる計算機810でもよい。また、複数の計算機810が、外部からデータを入力し、あるいは、外部へデータを出力してもよい。
図19は、この実施の形態における計算機810のハードウェア資源の一例を示すハードウェア構成図である。
計算機810は、1以上の処理装置911と、バス912と、記憶装置914と、入力装置915と、出力装置916とを有する。複数の計算機810それぞれが有する処理装置911の数は、同じ数であってもよいし、異なる数であってもよい。少なくともいずれかの計算機810は、複数の処理装置911を有する。
バス912は、処理装置911と、記憶装置914と、入力装置915と、出力装置916との間を接続する。処理装置911と、記憶装置914と、入力装置915と、出力装置916とは、バス912を介して通信する。
処理装置911は、プログラムを実行することにより、データを処理し、記憶装置914や入力装置915や出力装置916などを制御する。
記憶装置914は、処理装置911が実行するプログラムや、処理装置911が処理するデータなどを記憶する。計算機810が複数の処理装置911を有する場合、記憶装置914は、複数の処理装置911が共有している。すなわち、記憶装置914が記憶したデータは、いずれの処理装置911も読み出すことができ、いずれの処理装置911も、処理したデータを記憶装置914に記憶させることができる。記憶装置914は、ロック機能など、記憶したデータの整合性を保つための機能を持つ。記憶装置914は、例えば、半導体メモリ、フラッシュメモリ、磁気ディスク装置、光学ディスク装置などである。
入力装置915は、計算機システム800の外部や他の計算機810など、計算機810の外部からデータや信号などの情報を入力する。入力装置915が信号など処理装置911が直接処理できない形式の情報を入力する場合、入力装置915は、入力した信号を、処理装置911が処理できるデータの形式に変換する。入力装置915が入力あるいは変換したデータは、処理装置911が直接処理してもよいし、記憶装置914が一時的あるいは恒久的に記憶してもよい。入力装置915は、例えば、他の計算機810や計算機システム800の外部の装置などと通信する通信装置、カメラやスキャナなど画像を入力する画像入力装置、マイクなど音声を入力する音声入力装置、キーボードやマウスなど利用者の操作を入力する操作入力装置、アナログ信号を入力するアナログデジタル変換装置などである。
出力装置916は、計算機システム800の外部や他の計算機810など、処理装置911が処理したデータや記憶装置914が記憶したデータ、あるいはこれらのデータを計算機810の外部に出力する形式に変換した信号などの情報を出力する。出力装置916は、例えば、他の計算機810や計算機システム800の外部の装置などと通信する通信装置、ディスプレイやプリンタなど画像を出力する画像出力装置、スピーカなど音声を出力する音声出力装置、アナログ信号を出力するデジタルアナログ変換装置などである。
以下に説明する計算機システム800の機能ブロックや、パイプライン処理の一部であるスレッドの処理は、いずれかの計算機810の記憶装置914が記憶したプログラムを、いずれかの処理装置911が実行することにより、実現される。
図20は、この実施の形態におけるパイプライン処理850の一例を示す図である。
なお、同じ要素が複数ある場合、符号の後ろにアルファベットを付加して区別する場合がある。他の図においても同様である。
計算機システム800は、1以上のパイプライン処理850を実行する。パイプライン処理850は、入力データ861を入力する。パイプライン処理850は、入力した入力データを処理して、処理結果を表わす結果データを生成する。パイプライン処理850は、生成した結果データを出力する。
パイプライン処理850は、直列関係にある複数のプロセス851からなる。例えば、パイプライン処理850aは、5つのプロセス851a〜851eからなる。パイプライン処理850bは、4つのプロセス851f〜851iからなる。
パイプライン処理850aを構成する複数のプロセス851a〜851eのうち、最前段のプロセス851aは、パイプライン処理850aが入力した入力データ861aを入力する。プロセス851aは、入力した入力データ861aを処理して、処理結果を表わす結果データ862aを生成する。プロセス851aは、生成した結果データ862aを出力する。
二段目のプロセス851bは、最前段のプロセス851aが出力した結果データ862aを入力する。プロセス851bは、入力した結果データ862aを処理して、処理結果を表わす結果データ862bを生成する。プロセス851bは、生成した結果データ862bを出力する。
以下同様に、後段のプロセス851は、前段のプロセス851が生成した結果データ862を処理して、結果データを生成する。
パイプライン処理850aが出力する結果データは、最後段のプロセス851eが生成した結果データ862eである。
図21は、この実施の形態におけるパイプライン処理850のタイミングの一例を示すタイミング図である。
横軸は、時刻を表わす。
パイプライン処理850は、所定の周期で繰り返し入力データ861を入力する。複数のパイプライン処理850が入力データ861を入力する周期は、同じ周期であってもよいし、異なる周期であってもよい。
パイプライン処理850が入力データ861を入力してから、結果データを出力するまでにかかった時間を、パイプライン処理時間871と呼ぶ。
パイプライン処理850において、後段のプロセス851は、前段のプロセス851の結果データを処理するから、前段のプロセス851の処理が終わってから、後段のプロセス851の処理が開始する。したがって、パイプライン処理時間871は、パイプライン処理850を構成する各プロセス851の処理時間の合計である。
また、処理が後段のプロセス851に移ったのち、前段のプロセス851は、次のデータ待ち状態になる。このため、パイプライン処理850は、ある入力データ861の処理が終わる前であっても、次の入力データ861の処理を開始することができる。
この実施の形態において、パイプライン処理850は、リアルタイム性が要求される処理をする。すなわち、パイプライン処理850は、入力データ861を入力してから、所定の制限時間872が経過する前に、結果データを出力することを要求される。なお、複数のパイプライン処理850の制限時間872は、同じ制限時間であってもよいし、異なる制限時間であってもよい。
また、複数のパイプライン処理850の間には、優先順序が存在する。例えば、複数のパイプライン処理850が入力データ861を入力する周期が異なる場合、入力データ861を入力するタイミングが重なって、一時的に処理が追いつかなくなる場合がある。例えば、パイプライン処理850bの優先順位が、パイプライン処理850aの優先順位より高い場合であれば、そのようなとき、パイプライン処理850aの処理を待たせ、パイプライン処理850bの処理を優先して実行する。
図22は、この実施の形態におけるプロセス851の処理のタイミングの一例を示すタイミング図である。
横軸は、時刻を表わす。
対象データ863は、プロセス851が入力するデータである。プロセス851がパイプライン処理850の最前段のプロセスである場合、対象データ863は、そのパイプライン処理850が入力した入力データ861である。プロセス851がそれ以外のプロセスである場合、対象データ863は、前段のプロセス851が出力した結果データ862である。
少なくともいずれかのパイプライン処理850のいずれかのプロセス851において、各周期の処理852は、その周期で入力した対象データ863だけでなく、直前の所定の回数の周期で入力した対象データ863に基づいて実行される。例えば、処理852Cは、その周期で入力した対象データ863Cと、1つ前の周期で入力した対象データ863Bと、2つ前の周期で入力した対象データ863Aとの3つの対象データ863に基づいて実行される。
プロセス851の処理852をするために必要となる対象データ863の数を「入力回数n」と呼ぶ。入力回数nのプロセス851は、[n−1]周期前の周期で入力した対象データ863から、今の周期で入力した対象データ863までのn個の対象データ863に基づいて、処理852を実行する。
例えば、入力回数nが3である場合、プロセス851が起動した第一回目の周期では、その周期で入力した対象データ863Aしかないので、第一回目の処理852Aは、実行できない。あるいは、第一回目の処理852Aを実行したとしても、その結果として生成する結果データ862Aは、正しい処理結果ではない。プロセス851は、後の周期の処理852のため、対象データ863Aを記憶しておく。
第二回目の周期では、その周期で入力した対象データ863Bと、第一回目の周期で記憶しておいた対象データ863Aとがあるが、2つ前の周期の対象データ863がないので、第二回目の処理852Bも、実行できない。あるいは、第二回目の処理852Bを実行したとしても、その結果として生成する結果データ862Bは、正しい処理結果ではない。プロセス851は、後の周期の処理852のため、対象データ863Bを記憶しておく。
第三回目の周期になると、その周期で入力した対象データ863Cと、第二回目の周期で記憶しておいた1つ前の対象データ863Bと、第一回目の周期で記憶しておいた2つ前の対象データ863Aとが揃うので、処理852Cを実行できる。プロセス851は、処理852Cを実行して、結果データ862Cを生成する。また、プロセス851は、後の周期のため、対象データ863Cを記憶しておく。
それ以降の周期では、同様に3つの対象データ863が揃うので、プロセス851は、処理852を実行して、結果データ862を生成する。また、プロセス851は、後の周期のため、対象データ863を記憶しておく。
なお、複数のプロセス851の入力回数nは、同じ入力回数であってもよいし、異なる入力回数であってもよい。各パイプライン処理850のすべてのプロセス851のうち、最も入力回数nが多いプロセス851の入力回数を「最大入力回数nmax」と呼ぶ。
図23は、この実施の形態におけるプロセス851の処理852の構成の一例を示す図である。
1つのプロセス851の1回の処理852は、複数の部分処理853a〜853dに分けることができる。各部分処理853a〜853dは、並列関係にあり、各部分処理853a〜853dの間には、依存関係がない。すなわち、各部分処理853a〜853dは、他の部分処理が処理した処理結果を利用することなく、プロセス851が入力した対象データ863を処理して、結果データ862の一部を生成する。プロセス851の結果データ862は、各部分処理853a〜853dが生成した結果データ862の一部を結合することにより、生成することができる。
このような処理の一例としては、例えば、共通鍵による暗号化処理および復号処理や、画像に所定の視覚効果を加えるフィルタ処理などがある。
例えば、共通鍵による暗号化処理および復号処理では、データを共通鍵と同じ長さのブロックに分割して、分割したブロックごとに、共通鍵との間でビットごとの排他的論理和を取る。排他的論理和を取ったブロックを結合して、暗号化もしくは復号したデータを生成する。したがって、この処理は、ブロックの長さの整数倍ごとにデータを分割することにより、部分処理に分けることができる。
また、例えば、画像にソフトフォーカスやエンボスなどの視覚効果を加えるフィルタ処理では、各画素の近傍に位置する画素の色や輝度などに基づいて、その画素の色や輝度などを算出する。したがって、この処理は、画像を複数に分割することにより、部分処理に分けることができる。ただし、分割された画像の境界付近では、隣の画像の画素のデータを必要とする場合がある。このため、各部分処理が入力する画像は、担当する部分だけでなく、隣接する部分の少なくとも一部を含む。
図24は、この実施の形態におけるスレッド854の構成の一例を示す図である。
スレッド854は、処理装置911が処理を実行する単位である。処理装置911は、スレッド854として処理を実行する。
1つのプロセス851の処理852を4つの部分処理853a〜853dに分けた場合、それに対応して、4つのスレッド854a〜854dが起動される。4つのスレッド854a〜854dのうちの1つ(スレッド854a)は、そのプロセス851の主スレッドであり、残りの3つのスレッド854b〜854dは、そのプロセス851の従スレッドである。
主スレッド854aを実行する処理装置911は、主スレッド854aに割り当てられた部分処理853aのほかに、対象データ入力処理881、対象データ通知処理882、結果データ取得処理885、結果データ結合処理886、結果データ出力処理887などの処理を実行する。
従スレッド854b〜854dを実行する処理装置911は、従スレッド854b〜854dにそれぞれ割り当てられた部分処理853b〜853dのほかに、対象データ取得処理883、結果データ通知処理884などの処理を実行する。
対象データ入力処理881は、主スレッド854aが、そのプロセス851の代表として、対象データ863を入力する処理である。
対象データ通知処理882は、主スレッド854aが、対象データ入力処理881で入力した対象データ863を、従スレッド854b〜854dに通知する処理である。なお、対象データ入力処理881で入力した対象データ863全部を通知してもよいし、各従スレッド854b〜854dが必要とする部分のみを通知してもよい。
対象データ取得処理883は、従スレッド854b〜854dが、対象データ通知処理882で主スレッド854が通知した対象データ863(の一部)を取得する処理である。
結果データ通知処理884は、従スレッド854b〜854dが、部分処理853b〜853dで生成した結果データ862の一部を、主スレッド854aに通知する処理である。
結果データ取得処理885は、主スレッド854aが、結果データ通知処理884で従スレッド854b〜854dが通知した結果データ862の一部を取得する処理である。
結果データ結合処理886は、主スレッド854aが、部分処理853aで生成した結果データ862の一部と、結果データ取得処理885で取得した結果データ862の一部とを結合して、結果データ862を生成する処理である。
結果データ出力処理887は、主スレッド854aが、そのプロセス851の代表として、生成した結果データ862を出力する処理である。
なお、1つのプロセス851につき、1つの主スレッドを設けるのではなく、2つの主スレッドを設ける構成としてもよい。2つの主スレッドのうちの1つは、対象データ入力処理881や対象データ通知処理882など入力側の処理を担当する。もう一つの主スレッドは、結果データ取得処理885や結果データ結合処理886や結果データ出力処理887など出力側の処理を担当する。
対象データ通知処理882、対象データ取得処理883、結果データ通知処理884、結果データ取得処理885の具体的な内容は、主スレッド854aを実行する処理装置911と、従スレッド854b〜854dを実行する処理装置911との関係によって異なる。
主スレッド854aを実行する処理装置911と、従スレッド854を実行する処理装置911とが、同じ計算機810の処理装置911である場合、通知されるべきデータは、その計算機810の記憶装置914が既に記憶している。したがって、対象データ通知処理882や結果データ通知処理884では、データが出来たことを単に通知するだけでよい。対象データ取得処理883や結果データ取得処理885は、その通知を受けて、記憶装置914からデータを読み出す。
これに対し、主スレッド854aを実行する処理装置911と、従スレッド854を実行する処理装置911とが、異なる計算機810の処理装置911である場合、通知側の処理装置911は、出力装置916(通信装置)を用いて、ネットワーク820を介して、通知されるべきデータを送信し、取得側の処理装置911は、入力装置915(通信装置)を用いて、送信されたデータを受信する必要がある。
したがって、プロセス851の主スレッド854aと、従スレッド854b〜854dとを、同じ計算機810の処理装置911が実行するほうが、異なる計算機810の処理装置911が実行するよりも、処理装置911の間の通信処理の負荷が減り、効率がよい。
対象データ入力処理881や結果データ出力処理887の具体的な内容も、同様に、前段のプロセス851の主スレッド854を実行する処理装置911と、後段のプロセス851の主スレッド854を実行する処理装置911との関係によって異なる。
前段のプロセス851の主スレッド854を実行する処理装置911と、後段のプロセス851の主スレッド854を実行する処理装置911とが同じ計算機810の処理装置911である場合、前段のプロセス851の主スレッド854aの結果データ出力処理887は、データが出来たことを単に通知するだけでよい。後段のプロセス851の主スレッド854aの対象データ入力処理881は、その通知を受けて、記憶装置914からデータを読み出す。
これに対し、前段のプロセス851の主スレッド854を実行する処理装置911と、後段のプロセス851の主スレッド854を実行する処理装置911とが異なる計算機810の処理装置911である場合、出力側の処理装置911は、出力装置916(通信装置)を用いて、ネットワーク820を介して、出力すべきデータを送信し、入力側の処理装置911は、入力装置915(通信装置)を用いて、送信されたデータを受信する必要がある。
したがって、前段のプロセス851の主スレッド854aと、後段のプロセス851の主スレッド854aとを、同じ計算機810の処理装置911が実行するほうが、異なる計算機810の処理装置911が実行するよりも、処理装置911間の通信処理の負荷が減り、効率がよい。
なお、1つのプロセス851の処理852を分割せず、1つのスレッド854で実行してもよい。その場合、対象データ通知処理882、対象データ取得処理883、結果データ通知処理884、結果データ取得処理885が不要になるので、効率がよい。
1つの処理装置911は、複数のスレッド854を実行することができる。しかし、1つのプロセス851の複数のスレッド854は、それぞれ異なる処理装置911が実行するほうがよい。同じ処理装置911が、1つのプロセス851の複数のスレッド854を実行すると、処理の負荷が分散されないので、処理852を複数の部分処理853に分けた意義が失われる。それどころか、対象データ通知処理882、対象データ取得処理883、結果データ通知処理884、結果データ取得処理885が必要になる分、処理の効率が落ちる。
図25は、この実施の形態における計算機システム800の機能ブロックの構成の一例を示すブロック構成図である。
計算機システム800は、スレッド実行部111と、スレッド管理部112と、スレッド開始時刻取得部121と、スレッド終了時刻取得部122と、プロセス開始時刻算出部125と、プロセス終了時刻算出部126と、プロセス処理時間算出部131と、パイプライン処理時間算出部132と、パイプライン処理時間予測部133と、制限時間超過判定部141と、分割プロセス選択部142と、空き処理装置選択部143と、スレッド起動部144と、他計算機処理装置選択部145と、他計算機スレッド起動部146と、移動プロセス終了部147と、処理時間短縮判定部151と、分割済プロセス選択部152と、終了スレッド選択部153と、スレッド終了部154とを有する。
上述したように、これらの機能ブロックは、処理装置911がプログラムを実行することにより実現される。スレッド実行部111以外の機能ブロックを実現する処理装置911は、いずれの計算機810のいずれの処理装置911であってもよい。例えば、スレッド実行部111以外のすべての機能ブロックを、1つの処理装置911が実現してもよい。あるいは、すべての処理装置911に、処理の負荷が均等になるよう、機能ブロックを分散して配置してもよい。また、1つの機能ブロックを、複数の処理装置911が分担して実現してもよい。
スレッド実行部111は、割り当てられた処理装置911を用いて、スレッド854を実行する。
スレッド管理部112は、処理装置911を用いて、スレッド実行部111が実行するスレッド854を管理する。
例えば、スレッド管理部112は、記憶装置914を用いて、どの計算機810のどの処理装置911が、どのパイプライン処理850のどのプロセス851のどのスレッド854を実行しているかを表わすスレッド管理テーブルを記憶している。スレッド管理部112は、後述するスレッド起動部144などからの指示にしたがい、処理装置911を用いて、スレッド実行部111に対して、スレッド854の起動・終了などを指示するとともに、記憶したスレッド管理テーブルを更新する。
スレッド開始時刻取得部121は、処理装置911を用いて、各パイプライン処理850の各周期において、スレッド実行部111が実行する各スレッド854の処理が開始した時刻を取得する。スレッド開始時刻取得部121は、記憶装置914を用いて、取得した時刻を記憶する。
スレッド終了時刻取得部122は、処理装置911を用いて、各パイプライン処理850の各周期において、スレッド実行部111が実行する各スレッド854の処理が終了した時刻を取得する。スレッド終了時刻取得部122は、記憶装置914を用いて、取得した時刻を記憶する。
プロセス開始時刻算出部125は、処理装置911を用いて、スレッド開始時刻取得部121が記憶した時刻に基づいて、各パイプライン処理850の各周期において、各プロセス851の処理が開始した時刻を算出する。プロセス開始時刻算出部125は、記憶装置914を用いて、算出した時刻を記憶する。
例えば、プロセス開始時刻算出部125は、処理装置911を用いて、スレッド管理部112が記憶したスレッド管理テーブルに基づいて、各プロセスの主スレッドを判定する。プロセス開始時刻算出部125は、記憶装置914を用いて、判定した主スレッドについて、スレッド開始時刻取得部121が取得した時刻を、そのプロセス851の処理が開始した時刻として記憶する。
あるいは、プロセス開始時刻算出部125は、処理装置911を用いて、あるプロセス851の各スレッド854についてスレッド開始時刻取得部121が取得した時刻のなかから、最も早い時刻を判定する。プロセス開始時刻算出部125は、記憶装置914を用いて、判定した時刻を、そのプロセス851の処理が開始した時刻として記憶する。
プロセス終了時刻算出部126は、処理装置911を用いて、スレッド終了時刻取得部122が記憶した時刻に基づいて、各パイプライン処理850の各周期において、各プロセス851の処理が終了した時刻を算出する。プロセス終了時刻算出部126は、記憶装置914を用いて、算出した時刻を記憶する。
例えば、プロセス終了時刻算出部126は、処理装置911を用いて、スレッド管理部112が記憶したスレッド管理テーブルに基づいて、各プロセスの主スレッドを判定する。プロセス開始時刻算出部125は、記憶装置914を用いて、判定した主スレッドについて、スレッド終了時刻取得部122が取得した時刻を、そのプロセス851の処理が終了した時刻として記憶する。
あるいは、プロセス終了時刻算出部126は、処理装置911を用いて、あるプロセス851の各スレッド854についてスレッド終了時刻取得部122が取得した時刻のなかから、最も遅い時刻を判定する。プロセス終了時刻算出部126は、記憶装置914を用いて、判定した時刻を、そのプロセス851の処理が終了した時刻として記憶する。
プロセス処理時間算出部131は、処理装置911を用いて、プロセス開始時刻算出部125が記憶した時刻と、プロセス終了時刻算出部126が記憶した時刻とに基づいて、各パイプライン処理850の各周期において、各プロセス851の処理にかかった時間を算出する。プロセス処理時間算出部131は、記憶装置914を用いて、算出した時間を記憶する。
例えば、プロセス処理時間算出部131は、処理装置911を用いて、あるプロセス851についてプロセス終了時刻算出部126が算出した時刻から、プロセス開始時刻算出部125が算出した時刻を差し引いた差を計算する。プロセス処理時間算出部131は、記憶装置914を用いて、計算した差を、そのプロセス851の処理にかかった時間として記憶する。
パイプライン処理時間算出部132は、処理装置911を用いて、プロセス開始時刻算出部125が記憶した時刻と、プロセス終了時刻算出部126が記憶した時刻とに基づいて、各パイプライン処理850の各周期において、パイプライン処理850にかかったパイプライン処理時間871を算出する。パイプライン処理時間算出部132は、記憶装置914を用いて、算出したパイプライン処理時間871を記憶する。
例えば、パイプライン処理時間算出部132は、処理装置911を用いて、あるパイプライン処理850の最後段のプロセス851についてプロセス終了時刻算出部126が算出した時刻から、最前段のプロセス851についてプロセス開始時刻算出部125が算出した時刻を差し引いた差を計算する。パイプライン処理時間算出部132は、記憶装置914を用いて、計算した差を、そのパイプライン処理850のパイプライン処理時間871として記憶する。
あるいは、パイプライン処理時間算出部132は、処理装置911を用いて、あるパイプライン処理850の各プロセス851についてプロセス開始時刻算出部125が算出した時刻のなかから、最も早い時刻を判定して、そのパイプライン処理850の開始時刻とする。パイプライン処理時間算出部132は、処理装置911を用いて、そのパイプライン処理850の各プロセス851についてプロセス終了時刻算出部126が算出した時刻のなかから、最も遅い時刻を判定して、そのパイプライン処理850の終了時刻とする。パイプライン処理時間算出部132は、処理装置911を用いて、判定したパイプライン処理850の終了時刻から、判定したパイプライン処理850の開始時刻を差し引いた差を計算する。パイプライン処理時間算出部132は、記憶装置914を用いて、計算した差を、そのパイプライン処理850のパイプライン処理時間871として記憶する。
パイプライン処理時間予測部133は、処理装置911を用いて、パイプライン処理時間算出部132が記憶したパイプライン処理時間871に基づいて、各パイプライン処理850について、将来の周期におけるパイプライン処理時間871を予測する。パイプライン処理時間予測部133は、記憶装置914を用いて、予測したパイプライン処理時間871を記憶する。
例えば、パイプライン処理時間予測部133は、処理装置911を用いて、パイプライン処理時間871の変化を直線で近似する。例えば、パイプライン処理時間予測部133は、処理装置911を用いて、重み付き最小二乗法により、パイプライン処理時間871の変化を近似する直線の傾きや切片を算出する。パイプライン処理時間予測部133は、処理装置911を用いて、パイプライン処理時間871の変化を近似する直線を外挿して、将来の周期におけるパイプライン処理時間871を予測する。
あるいは、パイプライン処理時間予測部133は、処理装置911を用いて、カルマンフィルタにより、将来の周期におけるパイプライン処理時間871を予測するための計算式の係数を推定する構成であってもよい。例えば、パイプライン処理時間871が等差級数的あるいは等比級数的に変化すると仮定して、時間推移モデルを作る。パイプライン処理時間871のバラツキは、観測誤差として捉える。
パイプライン処理時間予測部133がパイプライン処理時間871を予測する将来の周期が、現在の周期から数えてm周期後であるとする。mを「予測周期」と呼ぶ。パイプライン処理時間予測部133は、そのパイプライン処理850の最大入力回数nmaxよりも大きい予測周期mについて、パイプライン処理時間871を予測する。
制限時間超過判定部141は、処理装置911を用いて、パイプライン処理時間予測部133が予測したパイプライン処理時間871に基づいて、各パイプライン処理850のパイプライン処理時間871が増加傾向にある場合、m周期後に制限時間872を超過するか否かを判定する。
分割プロセス選択部142は、制限時間超過判定部141の判定結果に基づいて、あるパイプライン処理850のパイプライン処理時間871がm周期後に制限時間872を超過する場合、処理装置911を用いて、そのパイプライン処理850のプロセス851のなかから、分割するプロセスを選択する。分割プロセス選択部142は、処理装置911を用いて、選択したプロセスを記憶する。
「プロセスを分割する」とは、プロセス851の処理852を複数の部分処理853に分割して、処理の負荷を分散させることである。また、プロセスが既に分割済である場合には、分割数を増やして、処理の負荷を更に分散させることである。
上述したように、パイプライン処理時間871は、各プロセス851の処理時間の合計である。したがって、パイプライン処理時間871の増加は、少なくともいずれかのプロセス851の処理時間の増加に原因がある。
例えば、分割プロセス選択部142は、処理装置911を用いて、パイプライン処理時間871がm周期後に制限時間872を超過すると制限時間超過判定部141が判定したパイプライン処理850を構成するすべてのプロセス851について、プロセス処理時間算出部131が算出した時間に基づいて、そのプロセス851の処理時間が増加傾向にあるか減少傾向にあるか、増加傾向や減少傾向の強さなどを判定する。例えば、分割プロセス選択部142は、処理装置911を用いて、プロセス851の処理時間の変化を直線で近似する。例えば、分割プロセス選択部142は、処理装置911を用いて、重み付き最小二乗法により、プロセス851の処理時間の変化を近似する直線の傾きを算出する。分割プロセス選択部142が算出した直線の傾きが正であれば増加傾向、負であれば減少傾向を表わし、その絶対値は、増加傾向や減少傾向の強さを表わす。
分割プロセス選択部142は、処理装置911を用いて、パイプライン処理時間871がm周期後に制限時間872を超過すると制限時間超過判定部141が判定したパイプライン処理850を構成するすべてのプロセス851のなかから、処理時間の増加傾向が最も強いプロセス851を、分割するプロセスとして選択する。
あるいは、分割プロセス選択部142は、分割による効果を加味して、分割するプロセスを選択する構成であってもよい。
例えば、分割されていないプロセスを2つに分割すれば、各部分処理853の負荷は半分になる。したがって、プロセス851の処理時間は、最高で半分に縮まることが期待できる。これに対し、2つに分割されているプロセスの分割数を3つに増やすと、各部分処理853の負荷は3分の2になる。したがって、プロセス851の処理時間は、最高でも3分の1しか縮まらない。すなわち、プロセスの処理時間をt、現在の分割数をk、分割数の増加数をΔkとすると、プロセス851の処理時間は、最高で[t・Δk/(k+Δk)]縮まる可能性がある。
例えば、分割プロセス選択部142は、処理装置911を用いて、パイプライン処理時間871がm周期後に制限時間872を超過すると制限時間超過判定部141が判定したパイプライン処理850を構成するプロセス851のうち、処理時間が増加傾向にあるすべてのプロセスについて、プロセスを分割することにより処理時間がどれだけ縮まるかを算出する。分割プロセス選択部142は、処理装置911を用いて、算出した減少量が最も大きいプロセス851を、分割するプロセスとして選択する。
あるいは、分割プロセス選択部142は、CPU時間を加味して、分割するプロセスを選択する構成であってもよい。
CPU時間とは、処理装置911が実際にそのスレッド854の処理を実行するのにかかった時間のことである。処理装置911が複数のスレッド854を実行している場合、実際に、処理装置911が一度に実行できるスレッド854は一つだけであり、時分割により、複数のスレッド854を並行して実行する。例えば、優先度の低いパイプライン処理850のスレッド854は、優先度の高いパイプライン処理850のスレッド854を処理装置911が実行している間、待たされることになる。したがって、プロセス851の処理時間には、処理装置911がそのプロセス851のスレッド854を実行していた時間と、処理装置911が他のプロセス851のスレッド854を実行していた時間とが含まれる。プロセス851の処理時間が増加傾向にある場合、そのプロセスの処理の負荷が増加することによりCPU時間が増加している場合と、他のプロセスの処理の負荷が増加したことの影響によるものでCPU時間はあまり増加していない場合とがある。
例えば、分割プロセス選択部142は、処理装置911は、パイプライン処理時間871がm周期後に制限時間872を超過すると制限時間超過判定部141が判定したパイプライン処理850を構成するプロセス851のうち、処理時間が増加傾向にあるプロセスのなかから、CPU時間の増加傾向が最も強いプロセス851を、分割するプロセスとして選択する。
空き処理装置選択部143は、処理装置911を用いて、分割プロセス選択部142が選択したプロセス851について、新たに起動するスレッド854を実行する処理装置911を選択する。空き処理装置選択部143は、処理装置911を用いて、そのプロセス851の主スレッド854を実行している処理装置911と同じ計算機810の処理装置911のなかから、同じプロセス851のスレッド854を実行していない処理装置911を選択する。
なお、同じプロセス851のスレッド854を実行していない処理装置911であっても、同じパイプライン処理850の別のプロセス851のスレッド854を実行している処理装置911に新たに起動するスレッド854を実行させると、負荷分散の皺寄せが、同じパイプライン処理850の別のプロセス851に出ることになり、パイプライン処理850のパイプライン処理時間871を短縮させることに繋がらない可能性がある。
このため、空き処理装置選択部143は、同じプロセス851のスレッド854を実行していない処理装置911であっても、同じパイプライン処理850の別のプロセス851のスレッド854を実行している場合には、選択しない構成であってもよい。
また、既に処理の負荷が大きい処理装置911に新たに起動するスレッド854を実行させると、処理装置911がもっと優先度が高いパイプライン処理850のスレッド854の実行に追われて、新たに起動したスレッド854の実行時間を確保できない可能性がある。逆に、新たに起動したスレッド854の実行時間を確保した結果、もっと優先度が低いパイプライン処理850のスレッド854の実行時間を確保できなくなり、もっと優先度が低いパイプライン処理850のパイプライン処理時間871が増加して制限時間872を超過する可能性がある。
このため、空き処理装置選択部143は、処理装置911を用いて、選択した処理装置911のCPU時間を算出し、新たに起動するスレッド854を実行する余裕があるか否かを判定する。新たに起動するスレッド854を実行する余裕がないと判定した場合、空き処理装置選択部143は、処理装置911を用いて、その処理装置911の選択を撤回する。
スレッド起動部144は、空き処理装置選択部143が処理装置911を選択した場合、処理装置911を用いて、分割プロセス選択部142が選択したプロセス851のスレッド854を新たに起動して、空き処理装置選択部143が選択した処理装置911に実行させる。
例えば、スレッド起動部144は、処理装置911を用いて、新たに起動するスレッド854を実行する処理装置911や、新たに起動するスレッド854がどのパイプライン処理850のどのプロセス851のものであるかなどの情報を含む指示を、スレッド管理部112に通知する。スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、新たなスレッド854の起動を指示する。
また、新たなスレッド854の起動により、同じプロセス851の他のスレッド854が処理すべき部分処理853の範囲が変わるので、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、同じプロセス851の主スレッドや他の従スレッドの部分処理853の範囲の変更を指示する。
そのプロセス851の主スレッドを実行している処理装置911と同じ計算機810で、新たなスレッド854を起動する場合、その計算機810の記憶装置914は、そのプロセス851の対象データ863を、既に蓄積している。このため、新たに起動するスレッド854は、すぐに処理を開始することができ、正しい結果データ862を生成する。
スレッド管理部112は、処理装置911を用いて、新たに起動したスレッド854を、そのプロセス851の処理にすぐに参入させる。スレッド管理部112は、処理装置911を用いて、すぐに、同じプロセス851の他のスレッド854の部分処理853を変更する。
他計算機処理装置選択部145は、空き処理装置選択部143が選択できる処理装置911がない場合、処理装置911を用いて、そのプロセス851の主スレッド854を実行している処理装置911と異なる計算機810の処理装置911のなかから、新たに起動するスレッド854を実行する処理装置911を選択する。他計算機処理装置選択部145は、記憶装置914を用いて、選択した処理装置911を記憶する。
上述したように、同じプロセス851の主スレッドと従スレッドとは、同じ計算機810の処理装置911が実行するほうがよい。このため、他計算機処理装置選択部145は、プロセス851のスレッド854をまるごと別の計算機810に移動しようとする。他計算機処理装置選択部145は、増加数の処理装置911だけでなく、増加した分割数の処理装置911を選択しようとする。
また、上述したように、前段のプロセス851の主スレッドと、後段のプロセス851の主スレッドとは、同じ計算機810の処理装置911が実行するほうがよい。このため、他計算機処理装置選択部145は、可能であれば、そのプロセス851の前段または後段のプロセスの主スレッドを実行している処理装置911と同じ計算機810の処理装置911を選択する。
例えば、他計算機処理装置選択部145は、処理装置911を用いて、そのプロセス851の前段のプロセスの主スレッドを実行している処理装置911の計算機810を選択する。
他計算機処理装置選択部145は、処理装置911を用いて、選択した計算機810の処理装置911を選択する。なお、同じパイプライン処理850の他のプロセス851のスレッド854を実行している処理装置911や、新たに起動するスレッドを実行する余裕がない処理装置911を除外する点は、空き処理装置選択部143と同様である。
増加した分割数以上の処理装置911が選択できた場合、他計算機処理装置選択部145は、処理装置911を用いて、増加した分割数の処理装置911を残し、それ以外の処理装置911の選択を撤回する。
増加した分割数の処理装置911を選択できない場合、他計算機処理装置選択部145は、処理装置911を用いて、処理装置911の選択をすべて撤回する。他計算機処理装置選択部145は、処理装置911を用いて、そのプロセス851の後段のプロセスの主スレッドを実行している処理装置911の計算機810を選択する。他計算機処理装置選択部145は、処理装置911を用いて、選択した計算機810で、増加した分割数の処理装置911を選択しようとする。
それもできない場合、他計算機処理装置選択部145は、処理装置911を用いて、それ以外の計算機810を順に1つずつ選択し、選択した計算機810で、増加した分割数の処理装置911を選択しようとする。
いずれの計算機810でも、増加した分割数の処理装置911を選択できない場合、他計算機処理装置選択部145は、そのプロセス851のスレッド854全部を移動させるのを断念し、元のスレッド854を残したまま、増加数分のスレッド854だけを別の計算機810の処理装置911に実行させることにする。
例えば、他計算機処理装置選択部145は、処理装置911を用いて、そのプロセス851の主スレッドを実行している処理装置911の計算機810と異なる計算機810のなかに、そのプロセス851の従スレッドを実行している処理装置911の計算機810があれば、その計算機810を選択する。他計算機処理装置選択部145は、処理装置911を用いて、選択した計算機810で、増加数の処理装置911を選択しようとする。
それができない場合や、そのプロセス851の主スレッドを実行している処理装置911の計算機810と異なる計算機810のなかに、そのプロセス851の従スレッドを実行している処理装置911の計算機810がない場合、他計算機処理装置選択部145は、処理装置911を用いて、それ以外の計算機810を順に1つずつ選択し、選択した計算機810で、増加数の処理装置911を選択しようとする。
他計算機スレッド起動部146は、処理装置911を用いて、分割プロセス選択部142が選択したプロセス851のスレッド854を新たに起動して、他計算機処理装置選択部145が選択した処理装置911に実行させる。
例えば、他計算機スレッド起動部146は、処理装置911を用いて、新たに起動するスレッド854を実行する処理装置911や、新たに起動するスレッド854がどのパイプライン処理850のどのプロセス851のものであるかなどの情報を含む指示を、スレッド管理部112に通知する。スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、新たなスレッド854の起動を指示する。
そのプロセス851のスレッド854を実行していた処理装置911がない計算機810で、新たなスレッド854を起動する場合、その計算機810の記憶装置914は、そのプロセス851の対象データ863が蓄積されていない。このため、新たに起動するスレッド854は、すぐに処理を開始することはできず、入力回数nの対象データ863が蓄積されるまで、正しい結果データ862を生成することができない。
スレッド管理部112は、処理装置911を用いて、新たに起動したスレッド854を、そのプロセス851の処理にはすぐに参入させない。入力回数n以上の周期が経過して、記憶装置914に十分な対象データ863が蓄積されたのち、新たに起動したスレッド854を、そのプロセス851の処理に参入させる。
例えば、そのプロセス851の既存のスレッド854を生かしつつ、追加の従スレッドだけを別の計算機810で起動した場合、すぐに、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、そのプロセス851の主スレッドが、対象データ通知処理882で、そのプロセス851の既存のスレッド854だけでなく、新たに起動した従スレッドに対しても、入力した対象データ863(の一部)を通知するよう、指示する。ただし、この時点では、そのプロセス851の既存のスレッド854が処理する部分処理853の範囲は、変更しない。そのプロセス851の主スレッドは、結果データ結合処理886で、そのプロセス851の既存の従スレッドが通知してきた結果データだけを使って結果データ862を生成する。新たに起動した従スレッド854が通知してきた結果データ862は、利用しない。
入力回数n以上の周期が経過したのち、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、そのプロセス851の既存のスレッドが処理する部分処理853の範囲の変更を指示する。そのプロセス851の主スレッドは、結果データ結合処理886で、そのプロセス851の既存の従スレッドが通知してきた結果データだけでなく、新たに起動した従スレッドが通知してきた結果データも使って結果データ862を生成する。
また、そのプロセス851のスレッド854をまるごと別の計算機810に移動した場合、すぐに、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、そのプロセス851の前段のプロセスの主スレッドが、そのプロセス851の既存の主スレッドだけでなく、新たに起動した主スレッドに対しても、結果データ862を通知するよう、指示する。ただし、この時点では、そのプロセス851の後段のプロセスの主スレッドは、そのプロセス851の既存の主スレッドが通知してきた結果データ862を、対象データ863として入力する。新たに起動した主スレッドが通知してきた結果データ862は、利用しない。
入力回数n以上の周期が経過したのち、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、そのプロセス851の後段のプロセスの主スレッドが、新たに起動した主スレッドが通知してきた結果データを、対象データ863として入力するよう、指示する。
移動プロセス終了部147は、他計算機処理装置選択部145が増加した分割数の処理装置911を選択した場合、処理装置911を用いて、他計算機スレッド起動部146が新たなスレッドを起動してから、そのプロセス851の入力回数n以上の周期が経過したのち、そのプロセス851の既存のスレッド854を終了させる。
例えば、移動プロセス終了部147は、処理装置911を用いて、終了させるスレッド854などの情報を含む指示を、スレッド管理部112に通知する。スレッド管理部112は、新たに起動したスレッドをそのプロセス851の処理に参入させたのち、処理装置911を用いて、スレッド実行部111に対して、指示された既存のスレッド854の終了を指示する。
処理時間短縮判定部151は、処理装置911を用いて、パイプライン処理時間予測部133が予測した予測結果に基づいて、各パイプライン処理850のパイプライン処理時間871が減少傾向にある場合、制限時間872を超過する危険が去ったか否かを判定する。
例えば、制限時間872の80%を安全ラインとして、制限時間872を超過の危険が去ったか否かを判定する。処理時間短縮判定部151は、処理装置911を用いて、パイプライン処理時間予測部133がパイプライン処理時間871の変化を近似した直線の係数が正であるか負であるかを判定する。パイプライン処理時間871の変化を近似した直線の係数が負である場合、パイプライン処理時間871は、減少傾向にある。処理時間短縮判定部151は、処理装置911を用いて、パイプライン処理時間算出部132が算出した現在のパイプライン処理時間871と、制限時間872の80%とを比較する。現在のパイプライン処理時間871が制限時間872の80%以下であれば、処理時間短縮判定部151は、制限時間872を超過する危険が去ったと判定する。
分割済プロセス選択部152は、処理時間短縮判定部151の判定結果に基づいて、あるパイプライン処理850のパイプライン処理時間871が制限時間872を超過する危険が去った場合、処理装置911を用いて、そのパイプライン処理850の分割済のプロセス851のなかから、分割数を減らすプロセス851を選択する。
例えば、分割済プロセス選択部152は、処理装置911を用いて、分割済のプロセス851のなかから、処理時間の減少傾向が最も強いプロセスを選択する。
あるいは、分割済プロセス選択部152は、処理装置911を用いて、分割済であって処理時間が減少傾向にあるプロセス851のなかから、分割数を減らすことによる処理時間の増加が最も少ないプロセスを選択する。
あるいは、分割済プロセス選択部152は、処理装置911を用いて、分割済であって処理時間が減少傾向にあるプロセス851のなかから、主スレッドを実行している処理装置911と異なる計算機810の処理装置911が従スレッドを実行していることにより効率が悪くなっているプロセスを選択する。
あるいは、分割済プロセス選択部152は、処理装置911を用いて、分割済であって処理時間が減少傾向にあるプロセス851のなかから、前段および後段のプロセスのスレッド854を実行している処理装置911と異なる計算機810の処理装置911がスレッド854を実行していることにより効率が悪くなっているプロセスを選択する。
終了スレッド選択部153は、処理装置911を用いて、分割済プロセス選択部152が選択したプロセス851のスレッド854のなかから、終了するスレッド854を選択する。
例えば、分割済プロセス選択部152が選択したプロセス851の従スレッドのなかに、主スレッドを実行している処理装置911と異なる計算機810の処理装置911が実行している従スレッドがあれば、終了スレッド選択部153は、処理装置911を用いて、その従スレッドを選択する。
あるいは、終了スレッド選択部153は、処理装置911を用いて、分割済プロセス選択部152が選択したプロセス851の各スレッド854を実行している各処理装置911のCPU時間に基づいて、空き時間が最も少ない処理装置911を選択し、その処理装置911が実行しているスレッド854を選択する。
あるいは、終了スレッド選択部153は、処理装置911を用いて、分割済プロセス選択部152が選択したプロセス851のスレッド854のなかから、そのスレッド854を実行している処理装置911と同じ計算機810の処理装置911のなかに前段または後段のプロセスを実行している処理装置911がないスレッド854を選択する。
スレッド終了部154は、処理装置911を用いて、終了スレッド選択部153が選択したスレッド854を終了させる。
例えば、スレッド終了部154は、処理装置911を用いて、終了するスレッド854を実行する処理装置911や、新たに起動するスレッド854がどのパイプライン処理850のどのプロセス851のものであるかなどの情報を含む指示を、スレッド管理部112に通知する。スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、指示されたスレッド854の終了を指示する。
また、スレッド854の終了により、同じプロセス851の他のスレッド854が処理すべき部分処理853の範囲が変わるので、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、同じプロセス851の主スレッドや他の従スレッドの部分処理853の範囲の変更を指示する。
図26は、この実施の形態におけるパイプライン管理処理S400の流れの一例を示すフローチャート図である。
パイプライン管理処理S400において、計算機システム800は、実行している各パイプライン処理850のパイプライン処理時間871を監視し、制限時間872を超過しないようにする。
パイプライン管理処理S400は、パイプライン選択工程S401と、パイプライン処理時間予測工程S402と、制限時間超過判定工程S403と、対策済判定工程S404と、プロセス分割工程S405と、参入時刻判定工程S406と、参入工程S407と、処理時間短縮判定工程S408と、プロセス併合工程S409とを有する。
パイプライン選択工程S401において、パイプライン処理時間予測部133は、処理装置911を用いて、計算機システム800が実行しているパイプライン処理850のなかから、パイプライン処理850を一つ選択する。
パイプライン処理時間予測工程S402において、パイプライン処理時間予測部133は、処理装置911を用いて、パイプライン選択工程S401で選択したパイプライン処理850について、m周期先におけるパイプライン処理時間871を予測する。
予測の結果、パイプライン処理時間871が増加傾向にある場合、パイプライン処理時間予測部133は、処理装置911を用いて、制限時間超過判定工程S403へ処理を進める。
パイプライン処理時間871が減少傾向にある場合、パイプライン処理時間予測部133は、処理装置911を用いて、処理時間短縮判定工程S408へ処理を進める。
制限時間超過判定工程S403において、制限時間超過判定部141は、処理装置911を用いて、パイプライン処理時間予測工程S402でパイプライン処理時間予測部133が予測したパイプライン処理時間871に基づいて、m周期後にパイプライン処理時間871が制限時間872を超過するか否かを判定する。
超過すると判定した場合、制限時間超過判定部141は、処理装置911を用いて、対策済判定工程S404へ処理を進める。
超過しないと判定した場合、制限時間超過判定部141は、処理装置911を用いて、参入時刻判定工程S406へ処理を進める。
対策済判定工程S404において、分割プロセス選択部142は、処理装置911を用いて、制限時間超過への対策が済んでいるか否かを判定する。制限時間超過への対策が済んでいる場合とは、プロセス851を分割して新たなスレッド854を起動したが、入力回数nの対象データ863がまだ蓄積されていないため、プロセスの処理に参入していない状態のことである。
対策済であると判定した場合、分割プロセス選択部142は、処理装置911を用いて、参入時刻判定工程S406へ処理を進める。
まだ対策していないと判定した場合、分割プロセス選択部142は、処理装置911を用いて、プロセス分割工程S405へ処理を進める。
プロセス分割工程S405において、分割プロセス選択部142は、処理装置911を用いて、分割するプロセス851を選択する。空き処理装置選択部143または他計算機処理装置選択部145は、処理装置911を用いて、新たに起動するスレッド854を実行する処理装置911を選択する。スレッド起動部144または他計算機スレッド起動部146は、処理装置911を用いて、空き処理装置選択部143または他計算機処理装置選択部145が選択した処理装置911に、新たなスレッド854を実行させる。
新たに起動したスレッド854を実行する処理装置911が、それまでとは異なる計算機810の処理装置である場合、データが蓄積されていないので、すぐにプロセス851の処理に参入できない。移動プロセス終了部147は、処理装置911を用いて、分割プロセス選択部142が選択したプロセス851の入力回数nに基づいて、n周期以上経過したあとの時刻を、新たに起動したスレッド854を処理に参入させる時刻として算出する。移動プロセス終了部147は、記憶装置914を用いて、算出した時刻を記憶する。
参入時刻判定工程S406において、移動プロセス終了部147は、処理装置911を用いて、プロセス分割工程S405で記憶した時刻があるか否か、ある場合には、その時刻を過ぎたか否かを判定する。
プロセス分割工程S405で記憶した時刻を過ぎた場合、移動プロセス終了部147は、処理装置911を用いて、参入工程S407へ処理を進める。
プロセス分割工程S405で記憶した時刻をまだ過ぎていない場合、あるいは、プロセス分割工程S405で時刻を記憶していない場合、移動プロセス終了部147は、処理装置911を用いて、パイプライン選択工程S401に処理を戻す。パイプライン処理時間予測部133は、次のパイプライン処理850を選択する。
参入工程S407において、スレッド管理部112は、処理装置911を用いて、新たに起動したスレッド854を、プロセス851の処理に参入させる。移動プロセス終了部147は、処理装置911を用いて、まるごと別の計算機810に移動したプロセス851の既存のスレッド854を終了させる。
移動プロセス終了部147は、処理装置911を用いて、パイプライン選択工程S401に処理を戻す。パイプライン処理時間予測部133は、次のパイプライン処理850を選択する。
処理時間短縮判定工程S408において、処理時間短縮判定部151は、処理装置911を用いて、制限時間超過の危険が去ったか否かを判定する。
制限時間超過の危険が去ったと判定した場合、処理時間短縮判定部151は、処理装置911を用いて、プロセス併合工程S409へ処理を進める。
制限時間超過の危険がまだ去っていないと判定した場合、処理時間短縮判定部151は、処理装置911を用いて、参入時刻判定工程S406へ処理を進める。
プロセス併合工程S409において、分割済プロセス選択部152は、処理装置911を用いて、併合するプロセスを選択する。終了スレッド選択部153は、処理装置911を用いて、終了するスレッド854を選択する。スレッド終了部154は、処理装置911を用いて、終了スレッド選択部153が選択したスレッド854を終了させる。
図27は、この実施の形態におけるプロセス分割工程S405の流れの一例を示すフローチャート図である。
プロセス分割工程S405は、プロセス選択工程S411と、処理装置選択工程S412と、スレッド起動工程S413と、他計算機選択工程S414と、処理装置選択工程S415と、他計算機選択工程S416と、処理装置選択工程S417と、スレッド起動工程S418と、参入工程S419と、参入予約工程S420とを有する。
プロセス選択工程S411において、分割プロセス選択部142は、処理装置911を用いて、パイプライン選択工程S401でパイプライン処理時間予測部133が選択したパイプライン処理850のプロセス851のなかから、分割するプロセス851を選択する。
処理装置選択工程S412において、空き処理装置選択部143は、処理装置911を用いて、スレッド管理部112が記憶したスレッド管理テーブルに基づいて、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の主スレッドを実行している処理装置911を判定する。
空き処理装置選択部143は、処理装置911を用いて、判定した処理装置911を有する計算機810の処理装置911のなかから、新たに起動するスレッド854を実行させる処理装置911を選択する。
新たに起動するスレッド854を実行させることができる処理装置911がある場合、空き処理装置選択部143は、処理装置911を用いて、スレッド起動工程S413へ処理を進める。
新たに起動するスレッド854を実行させることができる処理装置911がない場合、空き処理装置選択部143は、処理装置911を用いて、他計算機選択工程S414へ処理を進める。
スレッド起動工程S413において、スレッド起動部144は、処理装置911を用いて、処理装置選択工程S412で空き処理装置選択部143が選択した処理装置911に、新たに起動するスレッド854を実行させる。
スレッド起動部144は、処理装置911を用いて、参入工程S419へ処理を進める。
他計算機選択工程S414において、他計算機処理装置選択部145は、処理装置911を用いて、処理装置選択工程S412で空き処理装置選択部143が判定した処理装置911を有する計算機810と異なる計算機810のなかから、まだ選択していない計算機810を1つ選択する。選択の優先順位は、例えば、以下のとおりである。
(1)プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の前段または後段のプロセスの主スレッドを実行している処理装置911と、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の従スレッドを実行している処理装置911とを有する計算機810。
(2)プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の前段または後段のプロセスの主スレッドを実行している処理装置911を有し、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の従スレッドを実行している処理装置911を有さない計算機810。
(3)プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の前段または後段のプロセスの主スレッドを実行している処理装置911を有さず、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の従スレッドを実行している処理装置911を有する計算機810。
(4)プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の前段または後段のプロセスの主スレッドを実行している処理装置911を有さず、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の従スレッドを実行している処理装置911も有さない計算機810。
前段または後段のプロセスの主スレッドを実行している処理装置911を有する計算機810を優先させるのは、プロセス間通信の負荷を抑えるためである。また、同じプロセス851の従スレッドを実行している処理装置911を有する計算機810を優先させるのは、対象データ863の蓄積があり、すぐに処理に参入できるからである。
すべての計算機810が選択済であり、選択できる計算機810がない場合、他計算機処理装置選択部145は、処理装置911を用いて、他計算機選択工程S416へ処理を進める。
まだ選択していない計算機810がある場合、他計算機処理装置選択部145は、処理装置911を用いて、優先順位にしたがって、そのなかから、計算機810を1つ選択する。他計算機処理装置選択部145は、処理装置911を用いて、処理装置選択工程S415へ処理を進める。
処理装置選択工程S415において、他計算機処理装置選択部145は、処理装置911を用いて、他計算機選択工程S414で選択した計算機810の処理装置911のなかから、新たに起動するスレッド854を実行させることができる処理装置911を選択する。他計算機処理装置選択部145は、処理装置911を用いて、選択した処理装置911の数と、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の現在のスレッド854の数kとを比較する。
選択した処理装置911の数が、現在のスレッド854の数kより大きい場合、他計算機処理装置選択部145は、処理装置911を用いて、スレッド起動工程S418へ処理を進める。
選択した処理装置911の数が、現在のスレッド854の数k以下である場合、他計算機処理装置選択部145は、処理装置911を用いて、処理装置911の選択を解除し、他計算機選択工程S414に処理を戻して、次の計算機810を選択する。
他計算機選択工程S416において、他計算機処理装置選択部145は、処理装置911を用いて、再び最初から、処理装置選択工程S412で空き処理装置選択部143が判定した処理装置911を有する計算機810と異なる計算機810のなかから、まだ選択していない計算機810を1つ選択する。選択の優先順位は、他計算機選択工程S414のときと同様である。
処理装置選択工程S417において、他計算機処理装置選択部145は、処理装置911を用いて、他計算機選択工程S416で選択した計算機810について、処理装置選択工程S415で選択した処理装置911のなかから、処理装置911を1つ選択する。
処理装置選択工程S415で選択した処理装置911が1つもなかった場合、他計算機処理装置選択部145は、処理装置911を用いて、他計算機選択工程S416に処理を戻し、次の計算機810を選択する。
処理装置選択工程S415で選択した処理装置911があった場合、他計算機処理装置選択部145は、処理装置911を用いて、スレッド起動工程S418へ処理を進める。
スレッド起動工程S418において、他計算機スレッド起動部146は、処理装置911を用いて、処理装置選択工程S415またはS417で他計算機処理装置選択部145が選択した処理装置911に、新たに起動するスレッドを実行させる。
スレッド管理部112は、処理装置911を用いて、新たに起動したスレッドがプロセスの処理にすぐに参入できるか否かを判定する。新たに起動したスレッドがプロセスの処理にすぐに参入できる場合とは、新たに起動したスレッドを実行する処理装置911を有する計算機810の記憶装置914に、そのプロセス851の入力回数n以上の対象データ863が蓄積されている場合である。
新たに起動したスレッドがプロセスの処理にすぐに参入できる場合、スレッド管理部112は、処理装置911を用いて、参入工程S419へ処理を進める。
新たに起動したスレッドがプロセスの処理にすぐに参入できない場合、スレッド管理部112は、処理装置911を用いて、参入予約工程S420へ処理を進める。
参入工程S419において、スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の既存のスレッド854が担当する部分処理853の変更を指示し、新たに起動したスレッド854をプロセス851の処理に参入させる。
また、新たに起動したスレッド854がプロセス851の処理に参入したことにより、不要になったスレッド854があれば、移動プロセス終了部147は、処理装置911を用いて、不要になったスレッド854を終了させる。
スレッド管理部112は、処理装置911を用いて、プロセス分割工程S405を終了する。
参入予約工程S420において、スレッド管理部112は、処理装置911を用いて、プロセス選択工程S411で分割プロセス選択部142が選択したプロセス851の入力回数nに基づいて、n周期以上先の時刻を算出する。スレッド管理部112は、記憶装置914を用いて、算出した時刻を、スレッド起動工程S418で他計算機スレッド起動部146が新たに起動したスレッドをプロセスの処理に参入させる予約時刻として記憶する。
スレッド管理部112は、処理装置911を用いて、プロセス分割工程S405を終了する。
図28は、この実施の形態におけるプロセス併合工程S409の流れの一例を示すフローチャート図である。
プロセス併合工程S409は、プロセス選択工程S421と、スレッド選択工程S422と、スレッド終了工程S423とを有する。
プロセス選択工程S421において、分割済プロセス選択部152は、処理装置911を用いて、パイプライン選択工程S401でパイプライン処理時間予測部133が選択したパイプライン処理850のプロセス851のなかから、併合するプロセス851を選択する。
スレッド選択工程S422において、終了スレッド選択部153は、処理装置911を用いて、プロセス選択工程S421で分割済プロセス選択部152が選択したプロセス851のスレッド854のなかから、終了するスレッド854を選択する。
スレッド終了工程S423において、スレッド終了部154は、処理装置911を用いて、スレッド選択工程S422で終了スレッド選択部153が選択したスレッド854を終了させる。スレッド管理部112は、処理装置911を用いて、スレッド実行部111に対して、プロセス選択工程S421で分割済プロセス選択部152が選択したプロセス851の他のスレッドの部分処理853の変更を通知する。
スレッド管理部112は、処理装置911を用いて、プロセス併合工程S409を終了する。
以上、各実施の形態で説明した構成は、一例であり、異なる実施の形態で説明した構成を組み合わせた構成としてもよい。また、主要でない部分の構成を既存の技術など他の構成と置き換えるなどの変形をした構成としてもよい。
以上説明した計算機システム(800;1)は、所定の周期で繰り返し入力データ(861)を入力し、直列関係にある複数のプロセス(851;7)からなるパイプライン処理(850)により上記入力データ(861)を処理する。最前段のプロセス(851;7)は、上記入力データ(861)を処理して処理結果(結果データ862)を出力する。後段のプロセス(851;7)は、前段のプロセス(851;7)が出力した処理結果(862)を処理して処理結果(862)を出力する。上記入力データ(861)を入力した時刻から所定の制限時間(872)が経過するまでの間に最後段のプロセス(851;7)が処理結果を出力することを要求される。
計算機システム(800;1)は、複数の計算機(810;3)と、スレッド開始時刻取得部(121;スレッド処理時間監視部9)と、スレッド終了時刻取得部(122;9)と、プロセス開始時刻算出部(125)と、プロセス終了時刻算出部(126)と、プロセス処理時間算出部(131;計算機負荷監視部10)と、パイプライン処理時間算出部(132;パイプライン処理時間監視部11)と、パイプライン処理時間予測部(133;11)と、制限時間超過判定部(141;11)と、分割プロセス選択部(142;システム負荷監視部13)と、空き処理装置選択部(143;13)と、スレッド起動部(144;13)と、他計算機処理装置選択部(145;13)と、他計算機スレッド起動部(146;13)とを有する。
各計算機(810;3)は、1以上の処理装置(911;CPUコア5)を有する。
複数の計算機(810;3)のうち少なくともいずれかの計算機の少なくともいずれかの処理装置(911;5)は、上記パイプライン処理(850)の複数のプロセス(851;7)のうちいずれかのプロセスの処理の少なくとも一部の処理をスレッド(854;8)として実行する。
スレッド開始時刻取得部(121;9)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、各周期の入力データ(861)について、いずれかの処理装置(911;5)が上記スレッド(854;8)の実行を開始した時刻を取得する。
スレッド終了時刻取得部(122;9)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、各周期の入力データ(861)について、いずれかの処理装置(911;5)が上記スレッド(854;8)の実行を終了した時刻を取得する。
プロセス開始時刻算出部(125)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、各周期の入力データ(861)について、上記スレッド開始時刻取得部(121;9)が取得した時刻に基づいて、上記パイプライン処理(850)の複数のプロセス(851;7)それぞれの処理が開始した時刻を算出する。
プロセス終了時刻算出部(126)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、各周期の入力データ(861)について、上記スレッド終了時刻取得部(122;9)が取得した時刻に基づいて、上記パイプライン処理(850)の複数のプロセス(851;7)それぞれの処理が終了した時刻を算出する。
プロセス処理時間算出部(131;10)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、各周期の入力データ(861)について、上記プロセス開始時刻算出部(125)が算出した時刻と、上記プロセス終了時刻算出部(126)が算出した時刻とに基づいて、上記パイプライン処理(850)の各プロセス(851;7)の処理にかかった時間を算出する。
パイプライン処理時間算出部(132;11)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、各周期の入力データ(861)について、上記プロセス開始時刻算出部(125)が上記パイプライン処理(850)の最前段のプロセス(851;7)について算出した時刻と、上記プロセス終了時刻算出部(851;7)が上記パイプライン処理(850)の最後段のプロセス(851;7)について算出した時刻とに基づいて、上記パイプライン処理(850)にかかった時間(パイプライン処理時間871)を算出する。
パイプライン処理時間予測部(133;11)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記パイプライン処理時間算出部(132;11)が算出した時間に基づいて、将来の周期において上記パイプライン処理(850)にかかる時間を予測する。
上記制限時間超過判定部(141;11)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記パイプライン処理時間予測部(133;11)が予測した時間に基づいて、将来の周期において上記制限時間(872)を超過するか否かを判定する。
上記分割プロセス選択部(142;13)は、将来の周期において上記制限時間(872)を超過すると上記制限時間超過判定部(141;11)が判定した場合に、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記プロセス処理時間算出部(131;10)が算出した時間に基づいて、上記複数のプロセス(851)のうちから、プロセスの処理にかかる時間が増加しているプロセスを選択する。
上記空き処理装置選択部(143;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851)について、上記プロセスの処理の一部であるスレッド(854;8)を実行している処理装置(911;5)と同じ計算機(810;3)の処理装置(911;5)のなかに、上記プロセス(851)のスレッド(854)を実行していない処理装置(911;5)があるか否かを判定し、上記プロセス(851)のスレッド(854)を実行していない処理装置(911;5)があると判定した場合に、上記プロセス(851)のスレッド(854)を実行していないと判定した処理装置(911;5)を選択する。
スレッド起動部(144;13)は、上記空き処理装置選択部(143;13)が処理装置(911;5)を選択した場合に、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記空き処理装置選択部(143;13)が選択した処理装置(911;5)に、上記分割プロセス選択部(142;13)が選択したプロセス(851)のスレッド(854)を新たに実行させる。
他計算機処理装置選択部(145;13)は、上記空き処理装置選択部(143;13)が処理装置(911;5)を選択しなかった場合に、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851)のスレッド(854)を実行している処理装置(911;5)と異なる計算機(810;3)の処理装置(911;5)のなかから、処理装置(911;5)を選択する。
他計算機スレッド起動部(146;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記他計算機処理装置選択部(145;13)が選択した処理装置(911;5)に、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)のスレッド(854;8)を新たに実行させる。
繰り返し処理の各周期におけるパイプライン処理時間の変化から、将来の周期のパイプライン処理時間を予測するので、制限時間の超過を早い段階で予測し、対策を取ることができる。また、プロセスを分割したスレッドを実行する処理装置を、同じ計算機の処理装置を優先させて選択するので、スレッド間通信の負荷を減らすことができ、プロセスを分割したことによるパイプライン処理時間の短縮効果を確実にすることができる。
パイプライン処理(850)の複数のプロセス(851;7)のうち少なくともいずれかのプロセスは、直前の所定の入力回数の周期で入力した入力データ(861)または前段のプロセス(851;7)が直前の所定の入力回数の周期で出力した処理結果(862)を処理して処理結果(862)を出力する。
各計算機(810;3)は、上記1以上の処理装置(911;5)が共有する記憶装置(914)を有する。
記憶装置(914)は、上記記憶装置(914)を共有する1以上の処理装置(911;5)のいずれかが実行しているスレッド(854;8)のプロセス(851;7)について、上記プロセス(851;7)が処理する入力データ(861)または前段のプロセス(851;7)が出力した処理結果(862)を記憶する。
制限時間超過判定部(141;11)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、現在の周期から所定の予測回数だけ先の周期において上記制限時間(872)を超過するか否かを判定する。予測回数は、上記パイプライン処理(850)の複数のプロセス(851;7)の入力回数のうち最も大きい入力回数よりも大きい。
他計算機処理装置選択部(145;13)が選択した処理装置(911;5)に上記他計算機スレッド起動部(146;13)が実行させたスレッド(854;8)のプロセス(851;7)について、上記プロセス(851;7)の後段のプロセス(851;7)のスレッド(854;8)を実行している処理装置(911;5)は、上記プロセス(851;7)の入力回数が経過するまで、上記他計算機処理装置選択部(145;13)が選択した処理装置(911;5)が実行したスレッド(854;8)の処理結果(862)を利用しない。
パイプライン処理850の最大入力回数の周期よりも先の周期において制限時間を超過するか否かを予測するので、制限時間の超過を早い段階で予測し、対策を取ることができる。それまでとは異なる計算機の処理装置が新たに起動したスレッドを実行する場合であっても、新たに起動したスレッドが必要とするデータが蓄積されるまで待つ余裕がある。このため、新たに起動したスレッドが必要とするデータをまとめて転送するなど、新たなスレッド起動に伴う余計な処理をする必要がなく、新たなスレッド起動の影響により逆にパイプライン処理時間が長くなり、制限時間を超過するのを防ぐことができる。
他計算機処理装置選択部(145;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)について実行されているスレッド(854;8)の数よりも多い数の処理装置(911;5)を選択する。
計算機システム(800;1)は、移動プロセス終了部(147;13)を有する。
上記移動プロセス終了部(147;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)について、上記他計算機スレッド起動部(146;13)が上記プロセス(851;7)のスレッド(854;8)を実行させた場合に、上記他計算機スレッド起動部(146;13)が上記プロセス(851;7)のスレッド(854;8)を実行させてから上記プロセス(851;7)の入力回数の周期が経過したのちに、上記他計算機スレッド起動部(146;13)が上記プロセス(851;7)のスレッド(854;8)を実行させるよりも前から上記プロセス(851;7)のスレッド(854;8)を実行していた処理装置(911;5)に、上記プロセス(851;7)のスレッド(854;8)の実行を終了させる。
プロセスを分割したスレッドを異なる計算機の処理装置に実行させる場合、増加分のスレッドだけを異なる計算機の処理装置で実行させるのでなく、すべてのスレッドを同じ計算機の処理装置に実行させるので、スレッド間通信の負荷を軽減することができ、プロセスを分割したことによるパイプライン処理時間の短縮効果を確実にすることができる。また、新たに起動したスレッドが必要とするデータを蓄積するまでは、それより前から実行されていたスレッドを残しておくので、新たに起動したスレッドが必要とするデータをまとめて転送するなど、新たなスレッド起動に伴う余計な処理をする必要がなく、新たなスレッド起動の影響により逆にパイプライン処理時間が長くなり、制限時間を超過するのを防ぐことができる。
空き処理装置選択部(143;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)について、上記プロセス(851;7)の処理の一部であるスレッド(854;8)を実行している処理装置(911;5)と同じ計算機(810;3)の処理装置(911;5)のなかに、上記パイプライン処理(850)の複数のプロセス(851;7)のいずれのプロセスのスレッド(854;8)も実行していない処理装置(911;5)があるか否かを判定し、上記パイプライン処理(850)の複数のプロセス(851;7)のいずれのプロセスのスレッド(854;8)も実行していない処理装置(911;5)があると判定した場合に、上記パイプライン処理(850)の複数のプロセス(851;7)のいずれのプロセスのスレッド(854;8)も実行していないと判定した処理装置(911;5)を選択する。
分割したプロセスのスレッドを、同じパイプライン処理のプロセスのスレッドを実行していない処理装置に実行させるので、新たなスレッド起動の影響が同じパイプライン処理の別のプロセスに出るのを防ぎ、プロセスを分割したことによるパイプライン処理時間の短縮効果を確実にすることができる。
他計算機処理装置選択部(145;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)のスレッド(854;8)を実行している処理装置(911;5)と異なる計算機(810;3)の処理装置(911;5)のなかから、上記パイプライン処理(850)の複数のプロセス(851;7)のいずれのプロセスのスレッド(854;8)も実行していない処理装置(911;5)を選択する。
分割したプロセスのスレッドを、同じパイプライン処理のプロセスのスレッドを実行していない処理装置に実行させるので、新たなスレッド起動の影響が同じパイプライン処理の別のプロセスに出るのを防ぎ、プロセスを分割したことによるパイプライン処理時間の短縮効果を確実にすることができる。
他計算機処理装置選択部(145;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)のスレッド(854;8)を実行している処理装置(911;5)と異なる計算機(810;3)のなかから、上記分割プロセス選択部(142;13)が選択したプロセス(851;7)の前段のプロセス(851;7)または後段のプロセス(851;7)のスレッド(854;8)を実行している処理装置(911;5)を有する計算機(810;3)を選択し、選択した計算機(810;3)の処理装置(911;5)のなかから処理装置(911;5)を選択する。
新たに起動するスレッドを、前段または後段のプロセスを実行している処理装置を有する計算機の処理装置に実行させるので、プロセス間通信の負荷を減らすことができ、プロセスを分割したことによるパイプライン処理時間の短縮効果を確実にすることができる。
計算機システム(800;1)は、処理時間短縮判定部(151;11)と、分割済プロセス選択部(152;13)と、終了スレッド選択部(153;13)と、スレッド終了部(154;13)とを有する。
処理時間短縮判定部(151;11)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記パイプライン処理時間予測部(133;11)が予測した時間に基づいて、上記パイプライン処理(850)にかかる時間が短縮しつつあるか否かを判定する。
分割済プロセス選択部(152;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記パイプライン処理(850)にかかる時間が短縮しつつあると上記処理時間短縮判定部(151;11)が判定した場合に、上記パイプライン処理(850)の複数のプロセス(851;7)のなかから、複数のスレッド(854;8)が実行されているプロセスを選択する。
終了スレッド選択部(153;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割済プロセス選択部(152;13)が選択したプロセス(851;7)の複数のスレッド(854;8)のなかから、終了するスレッド(854;8)を選択する。
スレッド終了部(154;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記終了スレッド選択部(153;13)が選択したスレッド(854;8)について、上記スレッド(854;8)を実行している処理装置(911;5)に、上記スレッド(854;8)の実行を終了させる。
パイプライン処理時間が減少傾向にある場合に、分割したプロセスのスレッドを終了するので、プロセス分割による処理負荷を減らすことができ、計算機資源を有効活用することができる。
分割済プロセス選択部(152;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記プロセス処理時間算出部(131;10)が算出した時間に基づいて、上記パイプライン処理(850)の複数のプロセス(851;7)のなかから、プロセス(851;7)の処理にかかる時間が減少しているプロセス(851;7)を選択する。
処理時間が減少しているプロセスのスレッドを終了するので、プロセスの併合によりパイプライン処理時間が増加するのを防ぐことができる。
終了スレッド選択部(153;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割済プロセス選択部(152;13)が選択したプロセス(851;7)の複数のスレッド(854;8)のなかから、他のスレッド(854;8)と異なる計算機(810;3)の処理装置(911;5)が実行しているスレッド(854;8)を選択する。
スレッド間通信の負荷が大きいスレッドを終了させるので、スレッド間通信の負荷を減らすことができる。
終了スレッド選択部(153;13)は、上記複数の計算機(810;3)のうちいずれかの計算機のいずれかの処理装置(911;5)を用いて、上記分割済プロセス選択部(152;13)が選択したプロセス(851;7)について、上記プロセス(851;7)の複数のスレッド(854;8)のなかから、同一の計算機(810;3)の他の処理装置(911;5)のなかに、上記プロセス(851;7)の前段のプロセス(851;7)または後段のプロセス(851;7)のスレッド(854;8)を実行している処理装置(911;5)がない処理装置(911;5)が実行しているスレッド(854;8)を選択する。
プロセス間通信の負荷が大きいスレッドを終了させるので、プロセス間通信の負荷を減らすことができる。
以上説明した計算機システムの機能ブロックは、計算機システムの少なくともいずれかの計算機の少なくともいずれかの処理装置がコンピュータプログラムを実行することにより、実現することができる。
1,800 計算機システム、2,820 ネットワーク、3,810 計算機、4 CPU、5 CPUコア、6 OS、7,851 プロセス、8,854 スレッド、9 スレッド処理時間監視部、10 計算機負荷監視部、11 パイプライン処理時間監視部、12 スレッド割付部、13 システム負荷監視部、14 スレッド制御部、111 スレッド実行部、112 スレッド管理部、121 スレッド開始時刻取得部、122 スレッド終了時刻取得部、125 プロセス開始時刻算出部、126 プロセス終了時刻算出部、131 プロセス処理時間算出部、132 パイプライン処理時間算出部、133 パイプライン処理時間予測部、141 制限時間超過判定部、142 分割プロセス選択部、143 空き処理装置選択部、144 スレッド起動部、145 他計算機処理装置選択部、146 他計算機スレッド起動部、147 移動プロセス終了部、151 処理時間短縮判定部、152 分割済プロセス選択部、153 終了スレッド選択部、154 スレッド終了部、850 パイプライン処理、852 処理、853 部分処理、861 入力データ、862 結果データ、863 対象データ、871 パイプライン処理時間、872 制限時間、881 対象データ入力処理、882 対象データ通知処理、883 対象データ取得処理、884 結果データ通知処理、885 結果データ取得処理、886 結果データ結合処理、887 結果データ出力処理、911 処理装置、912 バス、914 記憶装置、915 入力装置、916 出力装置。

Claims (11)

  1. 所定の周期で繰り返し入力データを入力し、直列関係にある複数のプロセスからなるパイプライン処理により上記入力データを処理し、最前段のプロセスは上記入力データを処理して処理結果を出力し、後段のプロセスは前段のプロセスが出力した処理結果を処理して処理結果を出力し、上記入力データを入力した時刻から所定の制限時間が経過するまでの間に最後段のプロセスが処理結果を出力することを要求される計算機システムにおいて、
    上記計算機システムは、複数の計算機と、プロセス処理時間算出部と、パイプライン処理時間算出部と、パイプライン処理時間予測部と、制限時間超過判定部と、分割プロセス選択部と、空き処理装置選択部と、スレッド起動部と、他計算機処理装置選択部と、他計算機スレッド起動部とを有し、
    上記複数の計算機の各計算機は、1以上の処理装置を有し、
    上記複数の計算機のうち少なくともいずれかの計算機の少なくともいずれかの処理装置は、上記パイプライン処理の複数のプロセスのうちいずれかのプロセスの処理の少なくとも一部の処理をスレッドとして実行し、
    上記プロセス処理時間算出部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、各周期の入力データについて、上記パイプライン処理の各プロセスの処理にかかった時間を算出し、
    上記パイプライン処理時間算出部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、各周期の入力データについて、上記パイプライン処理にかかった時間を算出し、
    上記パイプライン処理時間予測部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記パイプライン処理時間算出部が算出した時間に基づいて、将来の周期において上記パイプライン処理にかかる時間を予測し、
    上記制限時間超過判定部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記パイプライン処理時間予測部が予測した時間に基づいて、将来の周期において上記制限時間を超過するか否かを判定し、
    上記分割プロセス選択部は、将来の周期において上記制限時間を超過すると上記制限時間超過判定部が判定した場合に、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記プロセス処理時間算出部が算出した時間に基づいて、上記複数のプロセスのうちから、プロセスの処理にかかる時間が増加しているプロセスを選択し、
    上記空き処理装置選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスについて、上記プロセスの処理の一部であるスレッドを実行している処理装置と同じ計算機の処理装置のなかに、上記プロセスのスレッドを実行していない処理装置があるか否かを判定し、上記プロセスのスレッドを実行していない処理装置があると判定した場合に、上記プロセスのスレッドを実行していないと判定した処理装置を選択し、
    上記スレッド起動部は、上記空き処理装置選択部が処理装置を選択した場合に、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記空き処理装置選択部が選択した処理装置に、上記分割プロセス選択部が選択したプロセスのスレッドを新たに実行させ、
    上記他計算機処理装置選択部は、上記空き処理装置選択部が処理装置を選択しなかった場合に、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスのスレッドを実行している処理装置と異なる計算機の処理装置のなかから、処理装置を選択し、
    上記他計算機スレッド起動部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記他計算機処理装置選択部が選択した処理装置に、上記分割プロセス選択部が選択したプロセスのスレッドを新たに実行させ
    上記パイプライン処理の複数のプロセスのうち少なくともいずれかのプロセスは、直前の所定の入力回数の周期で入力した入力データまたは前段のプロセスが直前の所定の入力回数の周期で出力した処理結果を処理して処理結果を出力し、
    上記複数の計算機の各計算機は、上記1以上の処理装置が共有する記憶装置を有し、
    上記記憶装置は、上記記憶装置を共有する1以上の処理装置のいずれかが実行しているスレッドのプロセスについて、上記プロセスが処理する入力データまたは前段のプロセスが出力した処理結果を記憶し、
    上記制限時間超過判定部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、現在の周期から所定の予測回数だけ先の周期において上記制限時間を超過するか否かを判定し、上記予測回数は、上記パイプライン処理の複数のプロセスの入力回数のうち最も大きい入力回数よりも大きく、
    上記他計算機処理装置選択部が選択した処理装置に上記他計算機スレッド起動部が実行させたスレッドのプロセスについて、上記プロセスの後段のプロセスのスレッドを実行している処理装置は、上記プロセスの入力回数が経過するまで、上記他計算機処理装置選択部が選択した処理装置が実行したスレッドの処理結果を利用しないことを特徴とする計算機システム。
  2. 上記他計算機処理装置選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスについて実行されているスレッドの数よりも多い数の処理装置を選択し、
    上記計算機システムは、移動プロセス終了部を有し、
    上記移動プロセス終了部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスについて、上記他計算機スレッド起動部が上記プロセスのスレッドを実行させた場合に、上記他計算機スレッド起動部が上記プロセスのスレッドを実行させてから上記プロセスの入力回数の周期が経過したのちに、上記他計算機スレッド起動部が上記プロセスのスレッドを実行させるよりも前から上記プロセスのスレッドを実行していた処理装置に、上記プロセスのスレッドの実行を終了させることを特徴とする請求項に記載の計算機システム。
  3. 上記空き処理装置選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスについて、上記プロセスの処理の一部であるスレッドを実行している処理装置と同じ計算機の処理装置のなかに、上記パイプライン処理の複数のプロセスのいずれのプロセスのスレッドも実行していない処理装置があるか否かを判定し、上記パイプライン処理の複数のプロセスのいずれのプロセスのスレッドも実行していない処理装置があると判定した場合に、上記パイプライン処理の複数のプロセスのいずれのプロセスのスレッドも実行していないと判定した処理装置を選択することを特徴とする請求項1または請求項に記載の計算機システム。
  4. 上記他計算機処理装置選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスのスレッドを実行している処理装置と異なる計算機の処理装置のなかから、上記パイプライン処理の複数のプロセスのいずれのプロセスのスレッドも実行していない処理装置を選択することを特徴とする請求項1乃至請求項のいずれかに記載の計算機システム。
  5. 上記他計算機処理装置選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割プロセス選択部が選択したプロセスのスレッドを実行している処理装置と異なる計算機のなかから、上記分割プロセス選択部が選択したプロセスの前段のプロセスまたは後段のプロセスのスレッドを実行している処理装置を有する計算機を選択し、選択した計算機の処理装置のなかから処理装置を選択することを特徴とする請求項1乃至請求項のいずれかに記載の計算機システム。
  6. 上記計算機システムは、処理時間短縮判定部と、分割済プロセス選択部と、終了スレッド選択部と、スレッド終了部とを有し、
    上記処理時間短縮判定部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記パイプライン処理時間予測部が予測した時間に基づいて、上記パイプライン処理にかかる時間が短縮しつつあるか否かを判定し、
    上記分割済プロセス選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記パイプライン処理にかかる時間が短縮しつつあると上記処理時間短縮判定部が判定した場合に、上記パイプライン処理の複数のプロセスのなかから、複数のスレッドが実行されているプロセスを選択し、
    上記終了スレッド選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割済プロセス選択部が選択したプロセスの複数のスレッドのなかから、終了するスレッドを選択し、
    上記スレッド終了部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記終了スレッド選択部が選択したスレッドについて、上記スレッドを実行している処理装置に、上記スレッドの実行を終了させることを特徴とする請求項1乃至請求項のいずれかに記載の計算機システム。
  7. 上記分割済プロセス選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記プロセス処理時間算出部が算出した時間に基づいて、上記パイプライン処理の複数のプロセスのなかから、プロセスの処理にかかる時間が減少しているプロセスを選択することを特徴とする請求項に記載の計算機システム。
  8. 上記終了スレッド選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割済プロセス選択部が選択したプロセスの複数のスレッドのなかから、他のスレッドと異なる計算機の処理装置が実行しているスレッドを選択することを特徴とする請求項または請求項に記載の計算機システム。
  9. 上記終了スレッド選択部は、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置を用いて、上記分割済プロセス選択部が選択したプロセスについて、上記プロセスの複数のスレッドのなかから、同一の計算機の他の処理装置のなかに、上記プロセスの前段のプロセスまたは後段のプロセスのスレッドを実行している処理装置がない処理装置が実行しているスレッドを選択することを特徴とする請求項乃至請求項のいずれかに記載の計算機システム。
  10. 1以上の処理装置を有する複数の計算機からなる計算機システムの少なくともいずれかの計算機のいずれかの処理装置が実行することにより、上記計算機システムが請求項1乃至請求項のいずれかに記載の計算機システムとして機能することを特徴とするコンピュータプログラム。
  11. 1以上の処理装置を有する複数の計算機からなる計算機システムが、所定の周期で繰り返し入力データを入力し、直列関係にある複数のプロセスからなるパイプライン処理により上記入力データを処理し、最前段のプロセスは上記入力データを処理して処理結果を出力し、後段のプロセスは前段のプロセスが出力した処理結果を処理して処理結果を出力し、上記入力データを入力した時刻から所定の制限時間が経過するまでの間に最後段のプロセスが処理結果を出力することを要求される処理を実行するパイプライン処理方法において、
    上記複数の計算機の各計算機は、1以上の処理装置を有し、
    上記複数の計算機のうち少なくともいずれかの計算機の少なくともいずれかの処理装置は、上記パイプライン処理の複数のプロセスのうちいずれかのプロセスの処理の少なくとも一部の処理をスレッドとして実行し、
    プロセス処理時間算出部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、各周期の入力データについて、上記パイプライン処理の各プロセスの処理にかかった時間を算出し、
    パイプライン処理時間算出部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、各周期の入力データについて、上記パイプライン処理にかかった時間を算出し、
    パイプライン処理時間予測部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記パイプライン処理時間算出部が算出した時間に基づいて、将来の周期において上記パイプライン処理にかかる時間を予測し、
    制限時間超過判定部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記パイプライン処理時間予測部が予測した時間に基づいて、将来の周期において上記制限時間を超過するか否かを判定し、
    将来の周期において上記制限時間を超過すると上記制限時間超過判定部が判定した場合に、分割プロセス選択部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記プロセス処理時間算出部が算出した時間に基づいて、上記複数のプロセスのうちから、プロセスの処理にかかる時間が増加しているプロセスを選択し、
    空き処理装置選択部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記分割プロセス選択部が選択したプロセスについて、上記プロセスの処理の一部であるスレッドを実行している処理装置と同じ計算機の処理装置のなかに、上記プロセスのスレッドを実行していない処理装置があるか否かを判定し、上記プロセスのスレッドを実行していない処理装置があると判定した場合に、上記プロセスのスレッドを実行していないと判定した処理装置を選択し、
    スレッド起動部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記空き処理装置選択部が処理装置を選択した場合に、上記空き処理装置選択部が選択した処理装置に、上記分割プロセス選択部が選択したプロセスのスレッドを新たに実行させ、
    他計算機処理装置選択部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記空き処理装置選択部が処理装置を選択しなかった場合に、上記分割プロセス選択部が選択したプロセスのスレッドを実行している処理装置と異なる計算機の複数の処理装置のなかから、処理装置を選択し、
    他計算機スレッド起動部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、上記他計算機処理装置選択部が選択した処理装置に、上記分割プロセス選択部が選択したプロセスのスレッドを新たに実行させ
    上記パイプライン処理の複数のプロセスのうち少なくともいずれかのプロセスは、直前の所定の入力回数の周期で入力した入力データまたは前段のプロセスが直前の所定の入力回数の周期で出力した処理結果を処理して処理結果を出力し、
    上記複数の計算機の各計算機は、上記1以上の処理装置が共有する記憶装置を有し、
    上記記憶装置は、上記記憶装置を共有する1以上の処理装置のいずれかが実行しているスレッドのプロセスについて、上記プロセスが処理する入力データまたは前段のプロセスが出力した処理結果を記憶し、
    上記制限時間超過判定部として、上記複数の計算機のうちいずれかの計算機のいずれかの処理装置は、現在の周期から所定の予測回数だけ先の周期において上記制限時間を超過するか否かを判定し、上記予測回数は、上記パイプライン処理の複数のプロセスの入力回数のうち最も大きい入力回数よりも大きく、
    上記他計算機処理装置選択部が選択した処理装置に上記他計算機スレッド起動部が実行させたスレッドのプロセスについて、上記プロセスの後段のプロセスのスレッドを実行している処理装置は、上記プロセスの入力回数が経過するまで、上記他計算機処理装置選択部が選択した処理装置が実行したスレッドの処理結果を利用しないことを特徴とするパイプライン処理方法。
JP2010140181A 2010-06-21 2010-06-21 計算機システム及びコンピュータプログラム及びパイプライン処理方法 Active JP5465105B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010140181A JP5465105B2 (ja) 2010-06-21 2010-06-21 計算機システム及びコンピュータプログラム及びパイプライン処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010140181A JP5465105B2 (ja) 2010-06-21 2010-06-21 計算機システム及びコンピュータプログラム及びパイプライン処理方法

Publications (2)

Publication Number Publication Date
JP2012003653A JP2012003653A (ja) 2012-01-05
JP5465105B2 true JP5465105B2 (ja) 2014-04-09

Family

ID=45535525

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010140181A Active JP5465105B2 (ja) 2010-06-21 2010-06-21 計算機システム及びコンピュータプログラム及びパイプライン処理方法

Country Status (1)

Country Link
JP (1) JP5465105B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2499105B (en) 2012-01-12 2014-09-17 Seiko Epson Corp Cartridge and printing material supply system
KR102247888B1 (ko) * 2015-01-05 2021-05-04 에스케이플래닛 주식회사 클라우드 스트리밍 서비스 시스템, 선택적 스트리밍 파이프라인 방식에 기반한 이미지 클라우드 스트리밍 서비스 방법 및 이를 위한 장치
CN105988872B (zh) * 2015-02-03 2020-02-18 阿里巴巴集团控股有限公司 一种cpu资源分配的方法、装置及电子设备
JP2018129011A (ja) * 2017-02-10 2018-08-16 日本電信電話株式会社 データ処理装置、基盤及びデータ出力方法
CN112204484B (zh) * 2018-10-31 2024-03-22 东芝三菱电机产业系统株式会社 生产流水线hmi系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007219577A (ja) * 2006-02-14 2007-08-30 Sony Corp データ処理装置、データ処理方法、データ処理方法のプログラム及びデータ処理方法のプログラムを記録した記録媒体
JP4523921B2 (ja) * 2006-02-24 2010-08-11 三菱電機株式会社 計算機リソース動的制御装置
JP4370313B2 (ja) * 2006-07-10 2009-11-25 三菱電機株式会社 制御装置、制御装置のプロセス制御方法およびプロセス制御プログラム
JP4308241B2 (ja) * 2006-11-10 2009-08-05 インターナショナル・ビジネス・マシーンズ・コーポレーション ジョブ実行方法、ジョブ実行システム及びジョブ実行プログラム

Also Published As

Publication number Publication date
JP2012003653A (ja) 2012-01-05

Similar Documents

Publication Publication Date Title
JP5465105B2 (ja) 計算機システム及びコンピュータプログラム及びパイプライン処理方法
CN108345501B (zh) 一种分布式资源调度方法和系统
US11150948B1 (en) Managing programmable logic-based processing unit allocation on a parallel data processing platform
US10599484B2 (en) Weighted stealing of resources
WO2017131187A1 (ja) アクセラレータ制御装置、アクセラレータ制御方法およびプログラム
JP3658420B2 (ja) 分散処理システム
JP4387174B2 (ja) 複数の優先順位グループに関連付けられたプロセスを複数のリソース間に分散する方法
WO2015106533A1 (zh) 基于协处理器的作业调度处理方法及装置
CN107193655B (zh) 一种基于效用函数的面向大数据处理的公平资源调度方法
CN110187970A (zh) 一种基于Hadoop MapReduce的分布式大数据并行计算方法
Wang Emergency department staffing: A separated continuous linear programming approach
US9442772B2 (en) Global and local interconnect structure comprising routing matrix to support the execution of instruction sequences by a plurality of engines
CN111522637A (zh) 一种基于成本效益的storm任务调度方法
Pati et al. Comprehensive Study on Task Scheduling Strategies in Multicloud Environment.
López‐Albelda et al. Heuristics for concurrent task scheduling on GPUs
US20230010895A1 (en) Information processing apparatus, information processing method, and computer-readable recording medium storing information processing program
Gouasmi et al. Geo-distributed bigdata processing for maximizing profit in federated clouds environment
CN103294535A (zh) 最大化磁盘缓存效果的工作流作业调度装置及方法
CN113806044B (zh) 一种用于计算机视觉应用的异构平台任务瓶颈消除方法
US9778958B2 (en) Management method, management apparatus, and information processing system for coordinating parallel processing in a distributed computing environment
Smanchat et al. Toward grid workflow scheduling based on resource competition
Peyravi et al. On the optimization of Hadoop MapReduce default job scheduling through dynamic job prioritization
Li et al. Analysis and Improvement of Makespan and Utilization for MapReduce
Ramaparvathy A New-Threshold Based Job Scheduling for Grid System
Feng et al. EPYFQ: a novel scheduling algorithm for performance virtualization in shared storage environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121119

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20121207

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131024

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131105

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131204

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: 20131224

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140121

R150 Certificate of patent or registration of utility model

Ref document number: 5465105

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250