| 【発明の名称】 |
タスク割当方法および装置およびプログラムおよび記録媒体 |
| 【発明者】 |
【氏名】佐々木 淳
|
| 【要約】 |
【課題】従来はサーバネットワークにのみ依存していたタスク割当/負荷均衡化を、クライアントを含むネットワークで行う。
【解決手段】線形ネットワークの右半分に全要素(タスク)を収集し、次いで、最小値からk番目に小さな(優先度が高い)要素までを選択するが、より大きな要素が右の方で選択されるようにする。 |
【特許請求の範囲】
【請求項1】 nプロセスから仮想的に構成される同期型の線形ネットワーク(Line Network)上に、タスクを処理するk個のプロセス(サーバ)が分散して存在し、n個の各プロセスが初期状態で1タスクずつ保持している状況において、各タスクには優先度を表す値(以下では要素と呼ぶ)が付与されていて、初期状態では、左端のプロセス[外1]はleft状態、右端のプロセス[外2]はright状態、それ以外のプロセスはwait状態とし、[外1]が保持している要素とleftメッセージおよび[外1]がサーバかどうかの情報とをrightへ、[外2]が保持している要素とrightメッセージおよび[外2]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージおよび[外1]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素の中の最小の要素に直前にrightから受信した制御メッセージおよびそのプロセスから[外2]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかを行う、という処理により、優先度の高いk個のタスクを選択すると同時にk台のサーバにそれらをひとつずつ割り当てることを特徴とするタスク割当方法。 【外1】
【外2】
【請求項2】 タスクを持たないプロセスには要素として∞を与える請求項1記載のタスク割当方法。 【請求項3】 優先度の代わりにそのタスクの大きさを要素として扱い、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順に割り当てる処理を、未割当タスクが存在する間は繰り返す請求項1記載のタスク割当方法。 【請求項4】 非同期モデル上では、同期メッセージを用いる請求項1ないし3のいずれかに記載のタスク割当方法。 【請求項5】 メッセージの通信時に要素をエンコードする請求項1ないし4のいずれかに記載のタスク割当方法。 【請求項6】 端プロセスを除く各プロセスが方向感覚を持たない場合に、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除する請求項1ないし5のいずれかに記載のタスク割当方法。 【請求項7】 請求項1ないし6のいずれかに記載のタスク割当方法を実行する手段を備えたことを特徴とするタスク割当装置。 【請求項8】 情報処理装置にインストールすることにより、その情報処理装置に、nプロセスから仮想的に構成される同期型の線形ネットワーク(Line Network)上に、タスクを処理するk個のプロセス(サーバ)が分散して存在する状況で、n個の各プロセスが初期状態で1タスクずつ保持される場合に、優先度の高いk個のタスクを選択すると同時に、k台のサーバにそれらタスクを割当て、各タスクには優先度を表す値(以下では要素と呼ぶ)が付与されていて、初期状態では、左端のプロセス[外1]はleft状態、右端のプロセス[外2]はright状態、それ以外のプロセスはwait状態とし、[外1]が保持している要素とleftメッセージおよび[外1]がサーバかどうかの情報とをrightへ、[外2]が保持している要素とrightメッセージおよび[外2]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージおよび[外1]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素の中の最小の要素に直前にrightから受信した制御メッセージおよびそのプロセスから[外2]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかを行う処理を実行する手順を実行させることを特徴とするプログラム。 【請求項9】 タスクを持たないプロセスには要素として∞を与える手順を実行させる請求項8記載のプログラム。 【請求項10】 優先度の代わりにそのタスクの大きさを要素として扱い、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順に割り当てる処理を、未割当タスクが存在する間は繰り返す手順を実行させる請求項8記載のプログラム。 【請求項11】 非同期モデル上では、同期メッセージを用いる手順を実行させる請求項8ないし10のいずれかに記載のプログラム。 【請求項12】 メッセージの通信時に要素をエンコードする手順を実行させる請求項8ないし11のいずれかに記載のプログラム。 【請求項13】 端プロセスを除く各プロセスが方向感覚を持たない場合に、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除する手順を実行させる請求項8ないし12のいずれかに記載のプログラム。 【請求項14】 情報処理装置にインストールすることにより、その情報処理装置に請求項1ないし6のいずれかに記載のタスク割当方法を実行する機能を実現させることを特徴とするプログラム。 【請求項15】 請求項8または14記載のプログラムが記録された前記情報処理装置読み取り可能な記録媒体。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、分散システムにおけるタスク割り当てに関する。なお、並列システムは分散システムの一種であるため、本発明は並列システムでも分散システムでも使えるが、それぞれのシステムにおいては用語が異なるため、以下では並列システムにおけるプロセッサ、CPU、分散システムにおけるエージェント、プロセス、計算機等の用語を一括してプロセスと呼ぶ。 【0002】 【従来の技術】従来、集中的にタスクが到着する場合にのみ、負荷均衡化を考慮したタスク割当方法が村主俊彦,山下博之,木下真吾,岡田靖史,自律協調型分散システムにおける負荷分散方法,電子情報通信学会論文誌D-I,Vol.J81-D-I,No.10,pp.1115-1129,1998.等で述べられているが、分散的に存在するタスクに対するタスク割当方法は考えられていない。 【0003】その代わり、分散的にタスクが存在する状況においては、辻敦宏,上野仁,山本幹,池田博昌,ネットワークを介した不均質な分散システムにおける自律負荷分散制御方式,電子情報通信学会論文誌B-I,Vol.J81-B-I,No.10,pp.587-595,1998.等では、負荷均衡化に絞って検討されている。 【0004】なお、サーバ間で協調してそれぞれに到着したタスクを移動させずに、個々のタスクの自己最適化のみを目指してタスクを移動させる方法もあるが、移動させない場合に比べて良くならないという結果がH.Kameda, J.Li, Y.Hosokawa, E.Altman, and O.Pourtallier,Braess-like Paradoxes in Distributed PerformanceOptimization,電子情報通信学会技術研究報告,IN2000-33-42,pp.49-56,2000.等で述べられている。 【0005】さらに、従来、考えられてきたタスク割当や負荷均衡化は、タスクの要求元であるクライアントを考慮せず、単にタスクがサーバへ届いた時点からのタスクの移動を検討している。しかし、クライアントが特定できる場合には、クライアントからのタスクの移動も考慮に入れた方がサーバ側の負担が減るなどの効果が期待できる。そのため、サーバだけでなく、クライアントも含めたネットワークにおけるタスク割当/負荷均衡化の方法があると非常に有用である。 【0006】 【発明が解決しようとする課題】そこで、本発明では、分散的に存在するタスクを一箇所に集めることなく、分散させたままで、そのタスクを処理すべきサーバへ割り当てる方法を考える。その際、一般的にタスク数の方がサーバ数よりも多いため、どのタスクを優先的に割り当てるかが問題となる。 【0007】本発明においてはその基準までは言及しないが、何かしらの基準となる数値を各タスクが持っていることを前提とする。そして、対象とするネットワークをサーバだけを取出したネットワークではなく、図1に示すようなタスクの要求元であるクライアントも含むネットワーク上で考える。図1においては、斜線のプロセスがサーバを、それ以外のプロセスがクライアントを表している。サーバ同士は直接通信リンクで結ばれていないため、サーバネットワークを構築するには、間にあるクライアントがサーバ間の通信を補助する必要がある。しかし、本発明においては、そのようなことをせず、クライアントとサーバが混在する状態のままでタスクを割り当てる。 【0008】具体的には、サーバもクライアントの一種と考えてタスクを持つものとし、k台のサーバとn−k台のクライアント(以後、これらをまとめてプロセスと呼ぶ)により構成されるネットワーク上で、各プロセスが一つずつタスクを持つときに、優先度の高いk個のタスクを選択すると同時に、それらをk台のサーバへひとつずつ割り当てる方法を考える。 【0009】このようなサーバ、クライアントは、図2〜図5に示すようにして構成される。これらの図のうち、図2がサーバの基本内部構成例、図3がクライアントの基本内部構成例である。ただし、本発明と関係がない装置は省略してあり、通常、クライアントにはそのクライアント独自の処理を行う装置がある。また、図4と図5は後に例として挙げる負荷均衡化を行うためのサーバの内部構成例である。図4に示すサーバは負荷均衡化装置とタスク処理装置とが別々の場合の例であり、図5に示すサーバは負荷均衡化装置とタスク処理装置とが同一装置の場合の例である。 【0010】このような構成例の下で、単純に要素を選択して配送するのなら、分散ソーティング、あるいは、ランキングを行って小さい方からk要素選択し、次いで、それらを順次適切なプロセスへと配送すれば良い。しかし、そのような方法では割当に要する時間が長くなってしまうので、この二つの処理を同時に行うことが望まれる。 【0011】この二つの処理を同時に行う方法の一つとして、佐々木淳,線形ネットワークにおける時間複雑度と通信複雑度が共に最適な分散ソーティング,電子情報通信学会研究報告,COMP2000-32,2000.で簡単に述べた動的な問題に対するアルゴリズムを利用する方法がある。ここでいう動的な問題とは、Doron Rotem,Nicola Santoro,and Jeffrey B.Sidney,Distributed Sorting,IEEE Transactions on Computers,Vol.C-34,No.4,pp.372-376,1985.で述べられている初期状態と最終状態とにおける各プロセスの要素数が異なる問題である。本発明が対象とする問題では、右端にダミーのプロセスを設けて、そのプロセスが最終状態でn−k要素持つように問題を変更すれば、このアルゴリズムをそのまま利用できる。しかし、このアルゴリズムの時間複雑度はn−1よりも大きいため、本発明が対象とする問題に対しては最適なアルゴリズムではないことがわかる。 【0012】以上で本発明が対象とする問題の概略と、それに対しては単純な対策では解決できないことを示した。以下では、より詳細な問題の定義を行う。そのために、まず、ネットワークや分散システムのモデルを述べる。 【0013】本発明では、図6に示すような、プロセス[数1]と、[数2]と[数3]の間の双方向通信リンクから構成される線形ネットワークを対象とする。ただし、ここでは通信が線形ネットワーク上で行われているように見なせれば問題ないため、物理的なネットワークが線形である必要はなく、仮想的(論理的)なネットワークが線形であれば問題ない。 【数1】
【数2】
【数3】
【0014】具体的な例を挙げて説明する。まず、図7に示すようなネットワークがあったとする。図7のA、B、C、D、E、F、Lはプロセス(計算機)を表し、Rはルータを表す。図7において、プロセスA、B、C、D、E、Fが本発明を適用するクライアントあるいはサーバとする。そして、Rがルータ、Lが本発明を適用しないプロセスとする。このとき、図8の上の図に示すような経路の通信を行うようにすると、仮想的に同図の下の図に示すような線形ネットワークにおける通信を実現できる。なお、LはEとFとの間の通信の中継だけは行う。 【0015】このような線形ネットワークに対して、本発明で置く仮定を述べる。まず、一般性を失うことなく、[外3]が左端となるように水平に置かれていると仮定する。このとき、各プロセスは左右の隣接プロセスをそれぞれ“left”と“right”という局所名でのみ認識する。ただし、左右の認識は全プロセスで一致しており、端プロセスではこれらのうち対応する局所名がnullとなる。また、プロセス[外4]は自身の識別子iとプロセス数nを知らないと仮定する。さらに、各プロセスの局所メモリの大きさを[数4]ビット、プロセス間の通信に用いられるメッセージの長さを[数5]ビットに制限する。ただし、Lは各タスクの優先度、大きさなどを表す要素の最大値を表し、[数6]である。つまり、この制約は一回の通信で1要素しか送信できないことを意味する。 【外3】
【外4】
【数4】
【数5】
【数6】
【0016】このような仮定の下で、各プロセスは隣接プロセスと適切な回数だけ通信を行うことで問題を解決する。このようなシステムのモデルには主に同期モデルと非同期モデルとがある。同期モデルおよび非同期モデルについては、亀田恒彦,山下雅史,分散アルゴリズム,近代科学社,1994,Nancy A.Lynch,Distributed Algorithms,Morgan Kaufmann,1996.等で述べられている。 【0017】同期モデルでは、送受信処理が毎ラウンド全てのプロセス間で同期的に行われる。一方、非同期モデルでは、各プロセスの送受信処理は独立に行われるが、各通信リンクがFIFO(First In First Out)であることと、各通信リンクにおけるメッセージディレイが有限であることが仮定される。また、一般に、分散アルゴリズムの評価には時間複雑度と通信複雑度との二つの基準が存在する。前者は同期モデルではラウンド数、非同期モデルではメッセージの最長鎖に属するメッセージ数で表される。一方、後者にはメッセージ複雑度とビット複雑度とがあり、それぞれ総メッセージ数、メッセージの総ビット数で表されるが、本発明のメッセージ長に関する制約の下では両者は同じ大きさを表す。 【0018】最後に本発明が対象とする問題を定義する。この問題はk−selection問題の一種となるが、分散k−selection問題はk番目に小さな要素を求める問題であり、本問題とは多少異なるため、Distributed Arrangement Selection問題と呼ぶことにする。この問題を以下のように定義する。ただし、[外5]をi番目に小さな要素、[外6]を最終状態で解を持つプロセスの集合とする。つまり、[数7]となる。まず、初期状態において、プロセス[外4]は要素[数8]を持ち、さらに、[数9]か否かを知っているものとする。そして、最終状態において、[数10]の二つの条件を満たすように[外7]以下の要素を移動させる。 【外5】
【外6】
【外7】
【数7】
【数8】
【数9】
【数10】
【0019】なお、要素の大小、あるいは、ネットワークの左右を入れ替えたとしても、同一のアルゴリズムを適用することができる。要素の大小、つまり、左から昇順に並べるか降順に並べるかについては、要素を負の数と見なして(−1を掛けて大小比較を行って)本発明のアルゴリズムを適用すれば降順になるので問題ない。ネットワークの左右については名前の付け方の問題というだけなので、アルゴリズム自体に変更を加える必要はない。 【0020】すなわち、本発明により、従来はサーバネットワークにのみ依存していたタスク割当/負荷均衡化を、クライアントを含むネットワークで行うことができるタスク割当方法および装置およびプログラムおよび記録媒体を提供することを目的とする。 【0021】 【課題を解決するための手段】本発明の中心的なアイデアは、まず、ネットワークの右半分に全要素を収集し、次いで、最小値からk番目に小さな要素までを選択するが、より大きな要素が右の方で選択されるようにする。このアイデアにより、要素が相対的に大きなほど、それが選択されてから移動する距離が短くなる、という性質が実現される。最小値を求めるよりもk番目に小さな要素を求める方が時間がかかるため、この性質は非常に有用である。 【0022】本発明の具体的な方法は、同期型のネットワークにおいては、初期状態では、左端のプロセス[外3]はleft状態、右端のプロセス[外8]はright状態、それ以外のプロセスはwait状態とし、[外3]が保持している要素とleftメッセージ、および[外3]がサーバかどうかの情報とをrightへ、[外8]が保持している要素とrightメッセージ、および、[外8]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージ、および、[外3]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素のなかの最小の要素に直前にrightから受信した制御メッセージ、および、そのプロセスから[外8]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかの処理を実行する、というものである。なお、これらの状態間の状態遷移関係は図9に示すとおりである。図9は各楕円が各状態を表し、各矢印が各状態遷移を表す。そして、矢印に付与されているleft、rightは、その制御メッセージの受信により状態遷移が起こることを示している。なお、wait状態からrelay状態へ向かう矢印に付与されているbothは、leftメッセージとrightメッセージとを同時に受信することを示している。各プロセスの初期状態は、[外3]がleft状態、[外8]がright状態で、残りの全てのプロセスがwait状態である。また、実行終了(sleep)は、left状態かrelay状態においてのみ行われる。 【外8】
【0023】この方法においては、初期状態で全てのプロセスがちょうどひとつずつ要素を持つことが要求されるが、k+1番目以降の要素が削除されることを利用し、初期状態で要素を持たないプロセスに要素として∞を与えることで有効なタスクのみを抽出して割り当てることができる。なお、数値的には∞はLを越える数であるが、∞を特殊な記号として扱い、例えばL+1という数値を∞に割り当てるなどの方法により、∞のビット表現時のビット数が[数5]を越えないようにすることができる。また、初期状態の要素数がk個未満の場合には∞も割り当てられてしまうが、∞が割り当てられたプロセスはひとつも割り当てられなかったと見なせば実用上は何ら問題はない。 【0024】さらに、タスクの優先度の代わりにそのタスクの大きさを要素として扱うと、サーバ([外6]に属するプロセス)に小さなタスクから順に並ぶ、このことを利用して特願2000−356093号(本願出願時に未公開)に示した簡略化した方法と同様の方法を採ると、サーバ間の負荷均衡化も実現できる。具体的には、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順番に割り当てればよい。 【0025】本発明の以下の記述においては、同期モデルについてのみ詳細に述べるが、非同期モデルに対しては、同期メッセージを用いることで簡単に本発明を利用できる。具体的には、各プロセスは各ラウンドの動作を全ての隣接プロセスからの同期メッセージの受信により開始するようにすればよい。 【0026】さらに、Michael C.Loui,The Complexity of Sorting on Distributed Systems,Information and Control,Vol.60,No.1-3,pp.70-85,1984,O.Gerstel and S.Zaks,The Bit Complexity of Distributed Sorting,Algorithmica,Vol.18,No.3,pp.405-416,1997.に述べられている要素のエンコード(圧縮)方法を用いると、通信するビット数を減らすことが可能になる。 【0027】また、端プロセスを除く各プロセスが方向感覚を持たない場合であっても、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除する、という処理を追加することにより、通信量は多少増えるものの、同じ時間で同じ結果を得ることができる。 【0028】すなわち、本発明の第一の観点は、タスク割当方法であって、本発明の特徴とするところは、nプロセスから仮想的に構成される同期型の線形ネットワーク(Line Network)上に、タスクを処理するk個のプロセス(サーバ)が分散して存在し、n個の各プロセスが初期状態で1タスクずつ保持している状況において、各タスクには優先度を表す値(以下では要素と呼ぶ)が付与されていて、初期状態では、左端のプロセス[外3]はleft状態、右端のプロセス[外8]はright状態、それ以外のプロセスはwait状態とし、[外3]が保持している要素とleftメッセージおよび[外3]がサーバかどうかの情報とをrightへ、[外8]が保持している要素とrightメッセージおよび[外8]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージおよび[外3]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素の中の最小の要素に直前にrightから受信した制御メッセージおよびそのプロセスから[外8]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかを行う、という処理により、優先度の高いk個のタスクを選択すると同時に、k台のサーバにそれらをひとつずつ割り当てるところにある。 【0029】これにより、従来はサーバネットワークにのみ依存していたタスク割当/負荷均衡化を、クライアントを含むネットワークで行うことができる。 【0030】タスクを持たないプロセスには要素として∞を与えることにより、有効なタスクのみを抽出して割り当てることができる。 【0031】優先度の代わりにそのタスクの大きさを要素として扱い、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順に割り当てる処理を、未割当タスクが存在する間は繰り返すことにより、負荷均衡を実現しつつタスクを割り当てることができる。 【0032】非同期モデル上では、同期メッセージを用いることにより、非同期モデル上でも動作させることができる。 【0033】メッセージの通信時に要素をエンコードすることにより、通信ビット数を減らすことができる。 【0034】端プロセスを除く各プロセスが方向感覚を持たない場合に、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除することにより、端プロセスを除く各プロセスが方向感覚を持たない場合にも適用することができる。 【0035】本発明の第二の観点は、本発明のタスク割当方法を実行する手段を備えたことを特徴とするタスク割当装置である。 【0036】本発明の第三の観点はプログラムであって、本発明の特徴とするところは、情報処理装置にインストールすることにより、その情報処理装置に、nプロセスから仮想的に構成される同期型の線形ネットワーク(Line Network)上に、タスクを処理するk個のプロセス(サーバ)が分散して存在する状況で、n個の各プロセスが初期状態で1タスクずつ保持される場合に、優先度の高いk個のタスクを選択すると同時に、k台のサーバにそれらタスクを割当て、各タスクには優先度を表す値(以下では要素と呼ぶ)が付与されていて、初期状態では、左端のプロセス[外1]はleft状態、右端のプロセス[外2]はright状態、それ以外のプロセスはwait状態とし、[外1]が保持している要素とleftメッセージおよび[外1]がサーバかどうかの情報とをrightへ、[外2]が保持している要素とrightメッセージおよび[外2]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージおよび[外1]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素の中の最小の要素に直前にrightから受信した制御メッセージおよびそのプロセスから[外2]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかを行う処理を実行する手順を実行させるところにある。 【0037】タスクを持たないプロセスには要素として∞を与える手順を実行させることができる。 【0038】優先度の代わりにそのタスクの大きさを要素として扱い、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順に割り当てる処理を、未割当タスクが存在する間は繰り返す手順を実行させることができる。 【0039】非同期モデル上では、同期メッセージを用いる手順を実行させることができる。 【0040】メッセージの通信時に要素をエンコードする手順を実行させることができる。 【0041】端プロセスを除く各プロセスが方向感覚を持たない場合に、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除する手順を実行させることができる。 【0042】あるいは、本発明のプログラムは、情報処理装置にインストールすることにより、その情報処理装置に本発明のタスク割当方法を実行する機能を実現させることを特徴とする。 【0043】本発明の第四の観点は、本発明のプログラムが記録された前記情報処理装置読み取り可能な記録媒体である。 【0044】 【発明の実施の形態】本発明実施例を図6〜図25を参照して説明する。図6は線形ネットワークを示す図である。図10〜図19は詳細な実行例を示す図である。図20〜図24はさまざまな状況における実行例を示す図である。図25は本タスク割当方法を負荷状均衡化に利用した際の実行例を示す図である。 【0045】本発明の第一の観点はタスク割当方法であって、本発明の特徴とするところは、図6に示すように、nプロセスから仮想的に構成される同期型の線形ネットワーク(Line Network)上に、タスクを処理するk個のプロセス(サーバ)が分散して存在し、n個の各プロセスが初期状態で1タスクずつ保持している状況において、図11に示すように、各タスクには優先度を表す値である要素が付与されていて、初期状態では、左端のプロセス[外3]はleft状態、右端のプロセス[外8]はright状態、それ以外のプロセスはwait状態とし、[外3]が保持している要素とleftメッセージおよび[外3]がサーバかどうかの情報とをrightへ、[外8]が保持している要素とrightメッセージおよび[外8]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージおよび[外3]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素の中の最小の要素に直前にrightから受信した制御メッセージおよびそのプロセスから[外8]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかを行う、という処理により、優先度の高いk個のタスクを選択すると同時に、k台のサーバにそれらをひとつずつ割り当てるところにある。 【0046】タスクを持たないプロセスには要素として∞を与える。 【0047】優先度の代わりにそのタスクの大きさを要素として扱い、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順に割り当てる処理を、未割当タスクが存在する間は繰り返す。 【0048】非同期モデル上では、同期メッセージを用いる。 【0049】メッセージの通信時に要素をエンコードする。 【0050】端プロセスを除く各プロセスが方向感覚を持たない場合に、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除する。 【0051】本発明の第二の観点は、本発明のタスク割当方法を実行する手段を備えたことを特徴とするタスク割当装置であり、図2〜図5に示すように、サーバおよびクライアントの装置内に設けられる。 【0052】本発明の第三の観点はプログラムであって、本発明の特徴とするところは、情報処理装置としてのコンピュータ装置にインストールすることにより、そのコンピュータ装置に、nプロセスから仮想的に構成される同期型の線形ネットワーク(Line Network)上に、タスクを処理するk個のプロセス(サーバ)が分散して存在する状況で、n個の各プロセスが初期状態で1タスクずつ保持される場合に、優先度の高いk個のタスクを選択すると同時に、k台のサーバにそれらタスクを割当て、各タスクには優先度を表す値(以下では要素と呼ぶ)が付与されていて、初期状態では、左端のプロセス[外1]はleft状態、右端のプロセス[外2]はright状態、それ以外のプロセスはwait状態とし、[外1]が保持している要素とleftメッセージおよび[外1]がサーバかどうかの情報とをrightへ、[外2]が保持している要素とrightメッセージおよび[外2]がサーバかどうかの情報とをleftへ、それ以外のプロセスが保持している要素とnullメッセージとをrightへと送信することで起動し、wait状態とleft状態においては、直前にleftから受信した要素と制御メッセージおよび[外1]からそのプロセスの間のサーバ数とをrightへ送信し、right状態においては、保持している要素の中の最小の要素に直前にrightから受信した制御メッセージおよびそのプロセスから[外2]の間のサーバ数とをleftへ、最大の要素とnullメッセージとをrightへ送信し、relay状態においては、それまでに受信したメッセージの内容から算出した左右のサーバ数とその時点で左右に存在する要素数とに基づいて、その時点で保持している各要素を、そのまま保持するか、leftへ送信するか、rightへ送信するか、削除するか、のいずれかを行う処理を実行する手順を実行させるところにある。 【0053】タスクを持たないプロセスには要素として∞を与える手順を実行させることができる。 【0054】優先度の代わりにそのタスクの大きさを要素として扱い、小さなタスクから順番に一旦割り当てた後、その順番とは逆の順番に残ったタスクを小さい順に割り当てる処理を、未割当タスクが存在する間は繰り返す手順を実行させる。 【0055】非同期モデル上では、同期メッセージを用いる手順を実行させることができる。 【0056】メッセージの通信時に要素をエンコードする手順を実行させることができる。 【0057】端プロセスを除く各プロセスが方向感覚を持たない場合に、初期状態でwait状態のプロセスが要素を全隣接プロセスに送信し、wait状態の間は毎ラウンド、それぞれの隣接プロセスから受信した要素をそのままもう一方の隣接プロセスへ送信し、wait状態から他の状態に遷移するときに受信する制御メッセージとその受信した方向により各通信リンクがleftかrightかを判断し、leftメッセージを受信した時点で、rightからrightメッセージを伴わずに受信した要素を削除する手順を実行させることができる。 【0058】あるいは、本発明のプログラムは、コンピュータ装置にインストールすることにより、そのコンピュータ装置に本発明のタスク割当方法を実行する機能を実現させることを特徴とする。 【0059】本発明の第四の観点は、本発明のプログラムが記録されたコンピュータ装置読み取り可能な記録媒体である。この記録媒体によりコンピュータ装置に本発明のプログラムをインストールすることによりそのコンピュータ装置を本発明のタスク割当装置に相応する装置とし、このコンピュータ装置に本発明のタスク割当方法を実行させる。コンピュータ装置への本発明のプログラムのインストールは、サーバからのダウンロードによって行うこともできる。 【0060】以下ではより詳細な本方法を記述する。なお、[数11]は二つの多重集合A、Bの多重和集合を表す。[外9]は代入を“=”は比較を表す。また、方向感覚を持たない場合などに追加される処理は先に述べたとおりなので、詳細なアルゴリズムは示さない。さらに、アルゴリズムの記述の区切りごとに、文章による説明を入れる。 【外9】
【数11】
【0061】 【数12】
【0062】 【数13】
【0063】 【数14】
【0064】 【数15】
【0065】 【数16】
【0066】 【数17】
【0067】 【数18】
【0068】 【数19】
【0069】 【数20】
【0070】 【数21】
【0071】 【数22】
【0072】 【数23】
【0073】 【数24】
【0074】 【数25】
【0075】 【数26】
【0076】 【数27】
【0077】 【数28】
【0078】 【数29】
【0079】 【数30】
【0080】 【数31】
【0081】 【数32】
【0082】 【数33】
【0083】 【数34】
【0084】 【数35】
【0085】 【数36】
【0086】 【数37】
【0087】 【数38】
【0088】 【数39】
【0089】 【数40】
【0090】 【数41】
【0091】 【数42】
【0092】 【数43】
【0093】 【数44】
【0094】 【数45】
【0095】 【数46】
【0096】 【数47】
【0097】 【数48】
【0098】 【数49】
【0099】 【数50】
【0100】(実行例)ここでは上記アルゴリズムおよび上記アルゴリズムを用いたタスク割当方法の実行例を示す。ただし、方向感覚を持たない場合などで処理が追加された場合の実行例は、ここで示す実行例と本質的な相違があるわけではないので示さない。まず、上記アルゴリズムの特徴的な動作例を四つ示す。最初の例におけるプロセス数が少ない場合でのみメッセージの内容も表示して詳細な実行例を示すが、残りは各ラウンドにおける要素の位置のみ示す。 【0101】 【数51】
【0102】 【数52】
【0103】 【数53】
【0104】 【数54】
【0105】 【数55】
【0106】 【数56】
【0107】 【数57】
【0108】 【数58】
【0109】例2:[外6]に属するプロセスが左半分に偏って分布している場合例1の図20および図21により、実行に要する時間が初期状態に依存しないことがわかるので、例2以降では例1の図20に示した実行例と比較するために、全てn=14で初期状態における要素の並びが左から順に降順になっている場合の実行例を示す。例2では、[外6]に属するプロセスが左半分に偏って分布している場合の実行例として、図25に[数59]の場合の実行例を示す。 【数59】
【0110】例3:[外6]に属するプロセスが右半分に偏って分布している場合例3では、[外6]に属するプロセスが右半分に偏って分布している場合の実行例として、図18に[数60]の場合の実行例を示す。 【数60】
【0111】例4:全プロセスが[外6]に属する場合(分散ソーティング問題と同一) 例4では、全プロセスが[外6]に属する場合、つまり、分散ソーティング問題と同一の問題に対する実行例を図24に示す。 【0112】例5:負荷均衡化を実現するタスク割当方法の例実行例の最後に、このアルゴリズムを利用した負荷均衡化方法を適用した例を示す。本発明においては、アルゴリズムを繰り返し適用する際に、割り当てられなかったタスクの扱いを規定していない。そのため、この例においては以下のように定める。 【0113】割り当てられなかったタスクは毎回n−k個生じる。それらタスクを[外10]から[外8]が一つずつ保持するように、アルゴリズム中では削除されてしまうタスクを移動させる。ここではその具体的な方法は定めていないので、例においてはこのタスクの移動の詳細は示さない。さらに、アルゴリズムの実行の詳細は例1から例4までと同様のため、この例5では示さず、実行結果のみを示す。つまり、この例5では1回のタスク割当を1フェイズとして、1フェイズずつ示す。 【外10】
【0114】ここでは、3台のサーバと6台のクライアントから構成される線形ネットワークにおいて、各サーバは未割当タスクを持たず、各クライアントが一つずつ優先度が等しい未割当タスクを持つ場合のタスク割当方法を示す。そして、各タスクの大きさがわかっているとして、負荷均衡化を考慮したタスクの割当を行う。なお、実際のシステムにおいては、動的にタスクが発生し、各クライアントが持つタスク数やタスクの優先度も等しいとは限らないので、この例よりも複雑になるが、基本となる処理は同じである。この例では、タスクが6個でサーバが3台なので、2フェイズですべてのタスクの割当が完了する。図25にこの状況における初期状態、フェイズ1終了時の状態、フェイズ2終了時の状態を示す。各数値はタスクの大きさを表し、フェイズ2終了時点におけるサーバの負荷量はサーバが持つ二つのタスクの大きさの合計となる。なお、先に述べたように、タスクを持たないプロセスは要素として∞を持つものとして処理されるが、図25においては明示しない。 【0115】この例においては6タスクの大きさの合計が24なので、各サーバの負荷量が8ずつになるのが理想である。しかし、大きさ7のタスクがあるものの大きさ1のタスクが存在しないので、負荷量をちょうど8ずつにすることができない。そのため、この場合に最も負荷が均衡した状況は負荷量がそれぞれ7、8、9となる場合である。この結果を見ると、サーバ[数61]の負荷量はそれぞれ9、8、7となっているので、それを実現できていることがわかる。全ての場合にこのように均衡化させることができるわけではないが、ある程度の均衡化が期待できる。 【数61】
【0116】 【発明の効果】本発明により、従来はサーバネットワークにのみ依存していたタスク割当/負荷均衡化を、クライアントを含むネットワークで行うことができるようになる。ただし、現状では線形ネットワーク上のアルゴリズムしか構築されていないため、木形状等のネットワークでは現状では直接使用できないが、アルゴリズムだけを拡張すれば、タスク割当/負荷均衡化は同じ枠組みで実現できる。 【0117】なお、本発明はタスク割当を前提にして説明したが、同じ方法により、資源割当も行うことができる。例えば、サーバが持つデータベースへのアクセス権を本アルゴリズムにより各サーバに対して一つずつ割り当てる、ということが考えられる。これ以外にも、出力するプリンタの割当等にも利用できる。 【0118】一方、本発明で使用しているアルゴリズムは、従来は議論されていない新しい問題設定に対するアルゴリズムである。そして、厳密に最適な時間で実行されるという特徴を持つ。 【0119】なお、実際にクライアントにこのような処理をさせることは非現実的と見なされるかもしれないが、認証等のためのクライアント側の負荷と同様に考えれば、そのサーバを利用するためのアクセスプログラムに本発明の処理を埋め込むことで、クライアント側のユーザに本発明による挙動をあまり意識させずに実行することが期待できる。
|
| 【出願人】 |
【識別番号】000004226 【氏名又は名称】日本電信電話株式会社
|
| 【出願日】 |
平成13年4月13日(2001.4.13) |
| 【代理人】 |
【識別番号】100078237 【弁理士】 【氏名又は名称】井出 直孝 (外1名)
|
| 【公開番号】 |
特開2002−312337(P2002−312337A) |
| 【公開日】 |
平成14年10月25日(2002.10.25) |
| 【出願番号】 |
特願2001−115522(P2001−115522) |
|