| 【発明の名称】 |
分散ソーティング方法および記録媒体 |
| 【発明者】 |
【氏名】佐々木 淳
|
| 【要約】 |
【課題】時間複雑度と通信要素数により評価される通信複雑度とを共に厳密に最適にするアルゴリズムの構築を行う。
【解決手段】wait状態のプロセスがleftメッセージを受信したらleftへ、rightメッセージを受信したらright状態へ、同時にleftメッセージとrightメッセージとを受信したらrelay状態へ、left状態のプロセスがrightメッセージを受信したらrelay状態へ、right状態のプロセスがleftメッセージを受信したらrelay状態へと遷移し、毎ラウンド保持している要素のうち、left状態のプロセスは、最大の要素をrightへ、right状態のプロセスは、最小の要素をleftへ、2要素以上保持するrelay状態のプロセスは、最大の要素をrightへ、最小の要素をleftへ、1要素のみを保持するrelay状態のプロセスは、直近の端プロセスの方向へと送信する。 |
【特許請求の範囲】
【請求項1】 n個のプロセスP1〜Pnから構成される同期型の線形ネットワーク上でソートすべき最初の各プロセスに保持する要素の数とソート後の各プロセスが保持する要素の数が既知である場合に各要素を左のプロセスから昇順に並べ替える分散ソーティング方法において、各プロセスP1〜Pnは、left、right、wait、relayの4状態のいずれか一つの状態をとり、初期状態では、左端のプロセスP1はleft状態、右端のプロセスPnはright状態、それ以外のプロセスはwait状態とし、プロセスP1が保持している要素とleftメッセージとをrightへ、プロセスPnが保持している要素とrightメッセージとをleftへと送信することで起動し、wait状態のプロセスがleftメッセージを受信したらleft状態へ、wait状態のプロセスがrightメッセージを受信したらright状態へ、wait状態のプロセスが同時にleftメッセージとrightメッセージとを受信したらrelay状態へ、left状態のプロセスがrightメッセージを受信したらrelay状態へ、right状態のプロセスがleftメッセージを受信したらrelay状態へと遷移し、left状態のプロセスは、毎ラウンド保持している要素のうちの最大の要素をrightへ、right状態のプロセスは、毎ラウンド保持している要素のうちの最小の要素をleftへ、2要素以上保持するrelay状態のプロセスは、毎ラウンド保持している要素のうち、最大の要素をrightへ、最小の要素をleftへ、1要素のみを保持するrelay状態のプロセスは、毎ラウンド保持している要素を直近の端プロセスの方向へと送信する処理をleft、rightのそれぞれから受信した要素数と同じ数の要素をそれぞれの方向へ送信し終わるまで各プロセスが同期的に繰り返すことを特徴とする分散ソーティング方法。 【請求項2】 n個のプロセスP1〜Pnから構成される非同期型の線形ネットワーク上でソートすべき最初の各プロセスに保持する要素の数とソート後の各プロセスが保持する要素の数が既知である場合に各要素を左のプロセスから昇順に並べ替える分散ソーティング方法において、プロセスP1〜Pn相互間で同期メッセージを送受信し、各プロセスP1〜Pnは、left、right、wait、relayの4状態のいずれか一つの状態をとり、初期状態では、左端のプロセスP1はleft状態、右端のプロセスPnはright状態、それ以外のプロセスはwait状態とし、プロセスP1が保持している要素とleftメッセージとをrightへ、プロセスPnが保持している要素とrightメッセージとをleftへと送信することで起動し、wait状態のプロセスがleftメッセージを受信したらleft状態へ、wait状態のプロセスがrightメッセージを受信したらright状態へ、wait状態のプロセスが同時にleftメッセージとrightメッセージとを受信したらrelay状態へ、left状態のプロセスがrightメッセージを受信したらrelay状態へ、right状態のプロセスがleftメッセージを受信したらrelay状態へと遷移し、left状態のプロセスは、毎ラウンド保持している要素のうちの最大の要素をrightへ、right状態のプロセスは、毎ラウンド保持している要素のうちの最小の要素をleftへ、2要素以上保持するrelay状態のプロセスは、毎ラウンド保持している要素のうち、最大の要素をrightへ、最小の要素をleftへ、1要素のみを保持するrelay状態のプロセスは、毎ラウンド保持している要素を直近の端プロセスの方向へと送信する処理をleft、rightのそれぞれから受信した要素数と同じ数の要素をそれぞれの方向へ送信し終わるまで各プロセスが同期的に繰り返すことを特徴とする分散ソーティング方法。 【請求項3】 wait状態で2要素以上保持するプロセスは、毎ラウンド保持している要素のうち、最大の要素をrightへ、最小の要素をleftへ、left状態で2要素以上保持するプロセスは、毎ラウンド保持している要素のうち最小の要素をleftへ、right状態で2要素以上保持するプロセスは、毎ラウンド保持している要素のうち最大の要素をrightへと送信する処理を追加して実行する請求項1または2記載の分散ソーティング方法。 【請求項4】 leftメッセージに、それを送信したプロセスから左のプロセス集合の初期状態の総要素数と最終状態の総要素数との差を、rightメッセージに、それを送信したプロセスから右のプロセス集合の初期状態の総要素数と最終状態の総要素数との差をそれぞれ添付し、wait状態から他の状態に遷移するときに、その添付された値を利用して次のラウンドで送信するleftメッセージ、あるいは、rightメッセージに添付する値を計算し、同種の計算により、left、rightから受信した要素数を記憶しているプロセス内部の局所変数を、最終状態で保持する要素数に応じて書き換えてleft、rightへ送信する要素数を調整する請求項1ないし3のいずれかに記載の分散ソーテイング方法。 【請求項5】 所定のハードウェアと、このハードウェアにインストールされれた所定の基本ソフトウェアとを備えたコンピュータ装置に、さらにインストールすることによりそのコンピュータ装置に請求項1ないし4のいずれかに記載の分散ソーティング方法を実行させるソフトウェアが記録された記録媒体。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、分散システムにおける分散ソーティングに関する。なお、並列システムは分散システムの一種であるため、本発明は、並列システムでも分散システムでも使えるが、それぞれのシステムにおいては用語が異なるため、以下では、並列システムにおけるプロセッサ、CPU、分散システムにおけるエージェント、プロセス、計算機等の用語を一括してプロセスと呼ぶ。 【0002】 【従来の技術】ソーティングは、基本かつ重要な問題のひとつであるため、逐次、並列アルゴリズムだけでなく、分散アルゴリズムも研究されている。 【0003】分散ソーティングの一般的な問題は、Gerstelらによってビット複雑度の最適化を目指して解かれている(参考文献:[1]O.Gerstel and S.Zaks,The BitComplexity of Distributed Sorting,Algorithmica,Vol.18,No.3,pp.405-416,1997.)。しかし、彼らのアルゴリズムは、広い問題を解決できる反面、ビット複雑度のみを抑えるように構築した結果、ネットワーク上に構成した根付き木の根にすべての情報を収集し、そこでソートして配分するという、非常に逐次性の強いアルゴリズムとなっている。 【0004】全要素を同時に収集できる場合には時間複雑度もdiam(直径)程度で抑えられるが、そのためには局所メモリに全要素を格納する必要があるため、最大要素をL≧nとすると、少なくとも[数1]ビットの局所空間計算量を必要とする。 【数1】
この局所空間計算量を抑えようとすると、時間複雑度が増大してしまう。具体的には、局所空間計算量を[数2]に制限すると、時間複雑度は0(n・diam)必要になる。 【数2】
つまり、局所空間計算量を抑えると、多大な時間複雑度を要するアルゴリズムとなってしまう。 【0005】一方、Hofsteeらは、逐次・並列アルゴリズムにおける問題に類似した分散ソーティング問題に対し、最適な時間複雑度を実現するアルゴリズムを構築している(参考文献:[2]H.Peter Hofstee,Alain J.Martin,and Jan L.A.Van De Snepscheut,Distributed Sorting,Science of Computer Programming,Vol.15,No.2-3,pp.119-133,1990.)。彼らのアルゴリズムは、時間最適であるだけでなく、局所空間計算量も小さく抑えられているが、対象とする問題が線形ネットワークにおいて、各プロセスが保持する要素数が2以上の場合に限定されており、多少不自然な問題になっている。また、通信複雑度は通信要素数により評価する場合の最適値の数倍になっている。 【0006】さらに、並列ソーティングアルゴリズムにおいては、線形ネットワークに類似した線形アレイ上の問題があるが、そこでは、奇偶交換ソート(並列バブルソートとも呼ばれる)により、比較−交換処理のみに基づいた場合の最適な時間計算量nを実現している(参考文献:[3]F.Thomson Leighton,Introduction to Parallel Algorithms and Architectures:Arrays,Trees,Hypercubes,Morgan Kaufmann,1992.)。しかし、比較−交換処理のみには基づかない場合の時間計算量の下界はn−1である。このn−1という時間計算量は線形アレイ上の並列アルゴリズムでは実現されていない。 【0007】 【発明が解決しようとする課題】前記の従来法で述べたように、従来の分散ソーティングアルゴリズムにおいては、局所空間計算量を制限した上で時間複雑度と通信要素数により評価される通信複雑度とが共に最適なアルゴリズムは存在しない。そこで、本発明においては、局所空間計算量を[数2]ビットに、1メッセージ長を[数3]ビットに制限した上で、時間複雑度と通信要素数により評価される通信複雑度とを共に厳密に最適にするアルゴリズムの構築を行う。 【数3】
【0008】その際に対象とする問題は、時間最適なアルゴリズムが既に存在するHofsteeらの扱った問題をより自然な形にした問題を対象とする。具体的には、線形ネットワーク上で各プロセスが丁度1要素ずつ保持する場合に左から順番に並べ替える分散ソーティングを扱う。そして、各プロセスの要素数に関して拡張した問題に対しても適用できるように拡張する。 【0009】以下では、より具体的な問題の定義を行うが、その前に、分散システムとネットワークのモデルの説明を行う。本発明では、図1に示すような、プロセスP1、P2、…、PnとPi,1≦i<nと[外1]の間の双方向通信リンクから構成される線形ネットワークを対象とする。一般性を失うことなく、P1が左端となるように水平に置かれていると仮定する。このとき、各プロセスは左右の隣接プロセスをそれぞれ“left”と“right”という局所名でのみ認識する。但し、左右の認識は全プロセスで一致しており、端プロセスではこれらのうち対応する局所名がnullとなる。 【外1】
【0010】また、プロセスPiは自身の識別子iとプロセス数nを知らないと仮定する。このような仮定の下で、各プロセスは隣接プロセスと適切な回数だけ通信を行うことで問題を解決する。このようなシステムのモデルには主に同期モデルと非同期モデルとがある。(参考文献:[4]亀田恒彦,山下雅史,分散アルコ゛リス゛ム,近代科学社、1994,[5]Nancy A.Lynch,Distributed Algorithms,Morgan Kaufmann、1996.)また、一般に、分散アルゴリズムの評価には時間複雑度と通信複雑度との二つの基準が存在する。前者は同期モデルではラウンド数、非同期モデルではメッセージの最長鎖に属するメッセージ数で表される。一方、後者にはメッセージ複雑度とビット複雑度とがあり、それぞれ総メッセージ数、メッセージの総ビット数で表される。 【0011】最後に、本発明で扱う分散ソーティング問題を定義する。 【0012】問題1:初期状態においてプロセスPiはソートの対象となる要素uiを保持している。そして、最終状態において下記の条件[数4]を満たす要素uiを保持するように各要素を移動させるのが問題である。 【数4】
【0013】問題2:初期状態においてプロセスPiはソートの対象となるki個の要素の集合[数5]を保持している。そして、最終状態において下記の条件[数6]を満たす[外2]個の要素からなる集合Biを保持するように各要素を移動させるのが問題である。 【数5】
【数6】
【外2】
【0014】問題3:初期状態においてプロセスPiはソートの対象となる[外3]個の要素の集合[数5]を保持している。 【外3】
そして、最終状態において、下記の条件[数8]を満たす[外2]個の要素からなる集合Biを保持するように各要素を移動させるのが問題である。ただし、全要素数をmとしたとき[数7]であるとする。 【数7】
【数8】
【0015】なお、問題3は動的な問題の一種である。(参考文献:[6]Doron Rotem,NicolaSantoro,and Jeffrey B.Sidney,Distributed Sortimg,IEEE Thonsactions on Computers,Vol.C-34,No.4,pp.372-376,1985.)また、問題3の条件のうち、[数9]が満たされない場合、つまり、[数10]のときには、そのようなプロセスPiは通信を中継するだけになる。そのため、この条件は問題の本質とは関係ないが、問題の簡略化のために置いている。 【数9】
【数10】
【0016】 【課題を解決するための手段】[問題1を解決するための手段]前記問題1を解決するために、本発明の同期モデルにおける分散ソーティング方法は、初期状態では、左端のプロセスP1はleft状態、右端のプロセスPnはright状態、それ以外のプロセスはwait状態とし、P1が保持している要素とleftメッセージとをrightへ、Pnが保持している要素とrightメッセージとをleftへと送信することで起動し、wait状態のプロセスがleftメッセージを受信したらleft状態へ、wait状態のプロセスがrightメッセージを受信したらright状態へ、wait状態のプロセスが同時にleftメッセージとrightメッセージとを受信したらrelay状態へ、left状態のプロセスがrightメッセージを受信したらrelay状態へ、right状態のプロセスがleftメッセージを受信したらrelay状態へと遷移し、left状態のプロセスは、毎ラウンド保持している要素のうちの最大の要素をrightへ、right状態のプロセスは、毎ラウンド保持している要素のうちの最小の要素をleftへ、2要素以上保持するrelay状態のプロセスは、毎ラウンド保持している要素のうち、最大の要素をrighrへ、最小の要素をleftへ、1要素のみを保持するrelay状態のプロセスは、毎ラウンド保持している要素を直近の端プロセスの方向へと送信する、という処理を、left,rightのそれぞれから受信した要素数と同じ数の要素を、それぞれの方向へ送信し終わるまで各プロセスが同期的に繰り返す。 【0017】このうち、状態遷移の仕方を図2に示した。図2は制御メッセージによるプロセスの状態遷移の仕方を示す。各楕円が各状態を表し、各矢印が各状態遷移を表す。そして、矢印に付与されているleft、rightは、その制御メッセージの受信により状態遷移が起ることを示している。なお、wait状態からrelay状態へ向かう矢印に付与されているbothは、leftメッセージとrightメッセージとを同時に受信することを示している。各プロセスの初期状態は、P1がleft状態、Pnがright状態で、残りのすべてのプロセスがwait状態である。また、relay状態に遷移しない限り、実行が終了することはない。 【0018】本発明の分散ソーティング方法は、厳密に最適な時間複雑度n−1と、通信要素数によって評価した場合の厳密に最適な通信複雑度[外4]とを実現することを特徴とする。 【外4】
【0019】本分散ソーティング方法を非同期モデルにおいて適用するには、同期メッセージを使用すればよい。これにより、非同期モデルにおいても、厳密に最適な時間複雑度と最適な通信要素数とを実現することができる。 【0020】[問題2を解決するための手段]前記問題2を解決するために、本発明の分散ソーティング方法は、問題1を解決する分散ソーティング方法に、さらに、wait状態で2要素以上保持するプロセスは、毎ラウンド保持している要素のうち、最大の要素をrightへ、最小の要素をleftへ、left状態で2要素以上保持するプロセスは、毎ラウンド保持している要素のうち最小の要素をleftへ、right状態で2要素以上保持するプロセスは、毎ラウンド保持している要素のうち最大の要素をrightへ、と送信する処理を追加して実行する構成とすることもできる。 【0021】[問題3を解決するための手段]前記問題3を解決するために、本発明の分散ソーティング方法は、問題2を解決する分散ソーティング方法に、さらに、leftメッセージに、それを送信したプロセスから左のプロセス集合の初期状態の総要素数と最終状態の総要素数との差を、rightメッセージに、それを送信したプロセスから右のプロセス集合の初期状態の総要素数と最終状態の総要素数との差を、それぞれ添付し、wait状態から他の状態に遷移するときに、その添付された値を利用して次のラウンドで送信するleftメッセージ、あるいは、rightメッセージに添付する値を計算し、さらに、同様の計算により、left、rightから受信した要素数を記憶しているプロセス内部の局所変数を、最終状態で保持する要素数に応じて書き換えてleft、rightへ送信する要素数を調整することにより構成することもできる。 【0022】本発明の別の観点は、所定のハードウェアと、このハードウェアにインストールされた所定の基本ソフトウェアとを備えたコンピュータ装置に、さらにインストールすることによりそのコンピュータ装置に本発明の分散ソーティング方法を実行させるソフトウェアが記録された記録媒体である。 【0023】 【発明の実施の形態】ここでは、前記分散ソーティング方法のより詳細な記述を示す。以下では、同期モデルにおけるアルゴリズムのみを示す。なお、非同期モデルにおける記述は、同期メッセージを加えて同期的に動作するだけであるため、問題1を解決するアルゴリズムでの同期メッセージの追加方法のみを簡単に説明し、問題2、3を解決するアルゴリズムでの追加方法は省略する。また、各問題を解決するアルゴリズムの骨格は同じであり、問題2、3を解決するアルゴリズムは問題1を解決するアルゴリズムの一部を変更して構築されているので、問題1を解決するアルゴリズムはアルゴリズム全体(1ラウンドあたりの処理)を詳細に示すが、問題2を解決するアルゴリズムは問題1を解決するアルゴリズムからの拡張法を、問題3を解決するアルゴリズムは問題2を解決するアルゴリズムからの拡張法を示すに止める。 【0024】なお、いずれのアルゴリズムにおいても、文献[1]または下記文献[7]で述べられている要素のエンコード(圧縮)方法を用いると、通信するビット数を減らすことが可能になる。このときの問題1に対するビット複雑度は[数11]となり、文献[1]と同様に、オーダーとしては最適である(参考文献:[7]Michael C.Loui,The Complexity of Sorting on Distributed Systems,Informationand Control,Vo1.60,No.1-3,pp.70-85、1984.)。 【数11】
【0025】[問題1を解決するアルゴリズムの詳細] 各命令の定義send((v,m),P):メッセージ(v,m)をプロセスPへ送信する。ただし、vは要素、mは制御メッセージ∈{left,right,null}で、Pは隣接プロセスへのポインタ∈{left,right}である。sleep:ui:=v∈Uとし、アルゴリズムの実行を終了する。なお、この命令が実行されるときには|U|=1である。 【0026】なお、実際の動作においてはreceive命令も必要になるが、本発明における記述においては、各ラウンドの最初に自動的にreceive命令が実行されて、適宜変数vL、vRが更新され、受信したメッセージの制御メッセージと受信した方向とによって実行の選択を行う。 【0027】[プロセスPiの各局所変数の定義] ui:保持する要素の初期値あるいは解state:プロセスの状態で、wait,left,right,relayのいずれか(初期値:wait)。 U:保持する要素の集合(初期値:{ui})。 vL,vR:left,rightから受信した要素(初期値:任意)。 uL,uR:直前にleft,rightへ送信した要素(初期値:一∞、∞)。 ns:送信が必要な要素数(初期値:0)。 direction:要素の送信を要する方向で、left,right,both,nullのいずれか(初期値:null)。 【0028】[ラウンド0における処理]ラウンド0においては、両端のプロセスのみが下記[数12]のように実行する。他のプロセスはwait状態のまま何もしない。 【数12】
【0029】[ラウンド1以降の処理]Piは自身の状態(stateの値)に応じて、処理を下記[数13]から選択して実行する。 【数13】
【0030】[問題1を解決するアルゴリズムにおける同期メッセージの追加方法]最も単純な方法は、毎回すべての通信リンクで通信が行われるように同期メッセージをやり取りする方法である。具体的には、上記アルゴリズムで何もメッセージが送信されない通信リンクに対して同期メッセージを送信する。なお、各プロセスが最初に送受信するメッセージは、起動メッセージとしても使用できる。 【0031】一方、必要としない部分で同期メッセージを使用すると、同期メッセージに伝送の遅れが生じた場合にアルゴリズムの実行の遅れに結び付くという問題があるので、同期メッセージの数を必要最小限に抑えることが望ましい。そこで、(1)left状態、またはright状態で要素を保持しなくなったプロセス、および(2)relay状態になってから保持する要素数が1になったプロセスでは同期メッセージを送信しないようにする。ただし、同期メッセージを送信しなくなる直前のラウンドにおいて、次のラウンドからは同期メッセージを送信しないことを示す信号を隣接プロセスに送信する必要がある。これは、同期メッセージを2種類用意することで実現できる。このようにすると、同期メッセージ数を必要最小限に抑えることができる。 【0032】[問題2を解決するアルゴリズムヘの拡張]問題2を解決するアルゴリズムは、問題1を解決するアルゴリズムの一部を変更することで構成される。以下にその変更点の概要を示す。なお、∀i,ki≧2の場合には、このアルゴリズムは文献〔2〕のアルゴリズムと同一の動作をする。 【0033】1.uiを{ui,1,ui,2,…,ui,ki}に置き換え、[数5]とする。なお、Uの初期値もBiに変更される。これに伴い、sleepの定義とラウンド0における両端のプロセスの処理を下記のように変更する。sleepの定義:Bi:=Uとし、アルゴリズムの実行を終了する。なお、この命令が実行されるときには、|U|=kiである。ラウンド0における両端のプロセスの処理:[数14] 【数14】
【0034】2.wait状態においてもki≧2のプロセスPiは要素の送信をラウンド0から開始する。つまり、ki≧2のプロセスPiは、minUをleftへ、maxUをrightへと送信する。このとき、leftまたはrightからも要素が送信された場合には、送信した要素と受信した要素とを比較し、昇順となるような要素を保持する。つまり、leftからvLを受信したとき、直前にleftへ送信した要素uLと比較し、max{uL,vL}を保持する。ただし、uLを保持することになった場合には、4の処理が加わる。rightとの通信に関してはこの逆になる。 【0035】3.left,right状態において、要素数が2以上の場合には中央方向への要素の送信とは別に、葉方向にも要素を送信する。但し、葉方向へ送信した要素は、相手側からも要素が送信され、かつ、それと交換される場合にのみ移動する。一方、中心方向へ送信した要素は、中心方向のプロセスからも要素が送られ、かつ、それら要素が交換されない場合にのみ、移動させずに残し、他の場合には中心方向のプロセスへ移動させる。各プロセスは、relay状態になるときには制御メッセージを受信するため、直前のラウンドにおける隣接プロセスの状態を知ることができる。そのため、何も制御メッセージが送受信されないときに、これらの処理を行えば良い。 【0036】4.問題1を解決するアルゴリズムにおける変数nsの代わりに、変数nL,nRを用意し、左右へ送信すべき要素数をそれぞれ計算して記憶する。ただし、これらの変数の値が負のときには、その絶対値の要素数を受信する必要があることを表す。そして、それらの値により、wait状態とrelay状態において、(a)隣接プロセス間で互いに要素を送信し合ったものの、それら要素の交換が起らない場合、(b)保持する要素数が1の場合、に要素の移動を制御する。つまり、交換が起こらない場合には要素を交換する代わりに要素数の調整(要素の移動)を行い、要素数が1の場合にはvL,vRのうち値が正の方向に要素を送信する。値が共に負あるいは共に0ならば、要素の送信を行わない。一方が負で一方が0のときには、wait状態では0の方向へ要素を送信し、relay状態では要素の送信は行わない。なお、要素数が1の場合においては、値が共に正になることはあり得ない。そして、両方向に対する値nL,nRが共に0になり、かつ、プロセス内で交換が起らなければ終了する。 【0037】5.問題1を解決するアルゴリズムではすベてのプロセスが同時にソートを完了したが、問題2においては同時に完了する保証がない。そして、ソートが完了したプロセスは通信を行わなくなるため、ソートが完了した次のラウンドに、ソートが完了した旨を隣接プロセスへ通知する。これにより、その隣接プロセスからメッセージが送信されないようにする。なお、両隣からこの信号を受信したプロセスは自身の判断に関わらず実行を終了する。また、既にこの信号を受信した方向へは同信号を発信する必要はない。 【0038】なお、2.、3.、4.の終了条件以外の変更に関しては、ソートの正当性とは関係なく、高速化にのみ影響する。つまり、1.、5.と4.の終了条件に関わる変更のみを施せば、上記すべての変更を施した場合よりも時間複雑度が上昇するものの、ソート自体は正しく実行される。 【0039】[問題3を解決するアルゴリズムヘの拡張]問題3を解決するアルゴリズムは、問題2を解決するアルゴリズムの一部を変更することで構成される。以下にその変更点の概要を示す。 【0040】まず、変数等の定義部分の変更を示す。問題2を解決するアルゴリズムにおけるsleepの定義の注釈にあるkiを[外2]に置き換える。その他に、変数の定義におけるkiを[外3]に置き換える。 【0041】次に、アルゴリズム部分の変更を示す。問題3においては、初期状態と最終状態とで各プロセスが保持する要素数が異なるため、単純に送受信した要素数から最終状態までに送信しなければならない要素数が求まるわけではない。初期状態と最終状態とで保持する要素数の差を端から順次隣接プロセスに送信し、それを基に送信要素数と送信方向とを判断する必要がある。具体的には、次のような処理を追加する。この処理はwait状態から他の状態へ遷移するときに行われる。 【0042】1.端プロセスP1、Pn:ラウンド0において、Pi,i=1,nは[数15]を他の送信メッセージと共に隣接プロセスへ送信する。 【数15】
この値は、初期状態から最終状態までの間に隣接プロセスへ送信する要素数を表すので、P1ではnRに、PnではnLに代入する。 【0043】2.Piが一方の隣接プロセスからk′という値を受信した場合:このラウンドの受信が終了した時点でPiが保持している要素数を[外5]とする。 【外5】
また、受信した方向をD、逆方向を[外6]とし、nDはnLかnRのいずれかであるとする。まず、nDは[数16]のように決まる。 【外6】
【数16】
【0044】次いで、[数17]とし、[外7]を[外6]の方向に送信する。 【数17】
【外7】
【0045】3.左右の隣接プロセスからそれぞれkL,kRを同時に受信した場合:これが起こるのは、nが奇数の場合の[外8]だけである。この場合には、それぞれの方向に対し、[数18]のようにnL,nRを決める。ただし、kL,kRのどちらか一方のみに基づいて、その値のみを受信した場合の処理を行ってもnL,nRは同じ値が求まるはずである。 【外8】
【数18】
そのため、そのような処理と本処理とを共に行うことで他プロセスの故障等のエラーの検出も可能となる。なお、k′はその方向から受信した値で、kLかkRのいずれかである。 【0046】なお、この後隣接プロセスへはこの値を送信しない。 【0047】4.2回目の受信(1回目とは逆方向からの受信)は無視する。ただし、これが起るのは、nが偶数の場合の[外9]と[外10]だけである。 【外9】
【外10】
上記のnL、nRの変更が影響するのはrelay状態における要素の移動時だけなので、他の状態における動作は、問題2を解決するアルゴリズムと全く変わりない。relay状態でも、値が変わっただけでアルゴリズム自体に変化はないため、[外11]ラウンドまでの動作とそれ以降の動作とが対応しないことを除けば、両者の間に何ら違いはない。 【外11】
【0048】[具体例]以下では、上記方法を用いた具体的な実施例を示す。詳細なメッセージの内容まで示した例は例1でのみ扱い、それ以降の例においては、各ラウンドで各プロセスが保持する要素のみを表の形で示すに止める。文献[1]、[7]で述べられているエンコード方法を用いた場合の通信についても、例1でのみ示す。また、非同期モデルにおける動作は、同期メッセージが存在することを除けば本質的に同期モデルにおける動作と同一なので、具体的な例は省略する。なお、各プロセスの状態は、そのラウンドにおける送信処理(send命令)の直前までの実行が終わった状態を示す。 【0049】例1:問題1を解決するアルゴリズム(その1) まず、本発明の基盤となる問題1を解決するアルゴリズムの例を示す。最初に、例1として、比較的小さなn=5プロセスからなる線形ネットワークを取り上げ、詳細なメッセージの内容も含めた実行例を図を使用して示す。例1では、図3のような初期状態が与えられた場合の実行例を示す。ここで、各プロセスに記された数字は、そのプロセスが保持している要素を示す。 【0050】ラウンド1:図4に示すように、左端プロセスP1が保持している要素“5”とleftメッセージをrightへ、右端プロセスP5が保持している要素“1”とrightメッセージをleftへ送信する。そして、P2がP1から上記メッセージを受信してleftへ遷移し、P4がP5から上記メッセージを受信してright状態へ遷移し、要素の配置は図5に示すようになる。 【0051】ラウンド2:図6に示すように、left状態になった直後のP2が、保持している要素のなかの最大値“5”とleftメッセージをrightへ、right状態になった直後のP4が、保持している要素の中の最小値“1”とrightメッセージをleftへ送信する。なお、P1、P5は何も要素を持たないため、何もしない。そして、P3がP2、P4から上記メッセージを受信してrelay状態へと遷移し、要素の配置は図7に示すようになる。 【0052】ラウンド3:図8に示すように、left状態のP2が、保持している要素“4”とnullメッセージをrightへ、wait状態からrelay状態になった直後のP3が保持している要素のなかの最小値“1”とrightメッセージをleftへ、保持している要素のなかの最大値“5”とleftメッセージをrightへ、right状態のP4が、保持している要素“2”とnllメッセージをleftへ送信する。なお、ラウンド2のときと同様に、P1、P5は何も要素を持たないため何もしない。このとき、P2とP3、P3とP4の間で要素を互いに送り合っているので、各プロセスでは、それぞれの間で送り合った要素が昇順になるように、送信した要素か受信した要素かを保持する。 【0053】なお、文献[1]、[7]で述べられているエンコード方法を利用した場合には、このラウンドにおける通信が図9に示すようになる。ここで、P2からP3へ送られている値“1”は、直前にP2からP3へ送信された要素“5”と、ここで送信する要素“4”の差分を示している。同様に、P4からP3へ送られている値“1”は、直前にP2からP3へ送信された要素“1”と、ここで送信する要素“2”の差分を示している。これにより、送信する値をより小さな値にすることができるため、ビット数を節約することが可能になる。エンコードを用いた場合でも用いない場合でも、このような通信により、要素の配置は図10に示すようになる。また、P2はrightメッセージを、P4はleftメッセージを受信したことにより、共にrelay状態へと遷移する。 【0054】ラウンド4:図11に示すように、leftからrelay状態へと遷移して1要素しか持たないP2が、唯一保持している要素“1”とrightメッセージをleftへ、relay状態のP3が、保持している要素のなかの最小値“1”とnullメッセージをleftへ、保持している要素のなかの最大値“5”とnullメッセージをrightfへ、right状態からrelay状態へと遷移して1要素しか持たないP4が、唯一保持している要素“5”とleftメッセージをrightへ送信する。なお、エンコード方法を利用した場合には、ラウンド3と同様に、図12に示すような通信が行われる。そして、P1はrightメッセージを、P5はleftメッセージを受信することでrelay状態へと遷移し、要素の配置は図13に示すようになり、さらに、すべてのプロセスにおいてns=0となり、ソートが完了する。 【0055】例2:問題1を解決するアルゴリズム(その2) 例1では比較的小さなネットワークにおける詳細な実行例を示したが、例2では、もう少し大きなn=14プロセスからなる線形ネットワークを取り上げ、各ラウンドにおいて各プロセスが保持している要素のみを提示することで実行例を示す。なお、例3、4でも例2と同様の表現による実行例を示す。 【0056】例2では、同一の14プロセスからなる線形ネットワークにおける初期状態が異なる二つの例を図15、図16で示す。図15、図16では、各プロセス(横軸)の各ラウンド(縦軸)において保持している要素を示す。なお、見やすくするために各要素は16進数を用いて一文字で示す。降順の要素列を入力したときの動作を図15に示す。ランダムな要素列を入力したときの動作を図16に示す。 【0057】例3:問題2を解決するアルゴリズム例3では、問題2を解決するアルゴリズムの実行例を示す。要素数がプロセス数よりも多くなる分だけ複雑になるため、例2よりも小さなn=9プロセスの線形ネットワークにおける例を示す。なお、nL、nRが要素の移動と終了判定に用いられるため、各プロセスが保持している要素だけでなく、各プロセスの該変数の内容も合わせて示す。なお、該変数の値は、保持している要素の両隣に小さく示す。そのうち左にあるのがnLの値で、右にあるのがnRの値である。例3の動作を図17に示す。 【0058】ラウンド9では、1要素のみを保持するどのプロセスにおいてもnL=nR=0であり、かつ、2要素以上保持するどのプロセスにおいても、nL=nR=0かつ、このラウンドではプロセス内部で要素の交換が起こらなかったため、この時点ですべてのプロセスにおいて同時にアルゴリズムの実行を終了する。なお、P6はラウンド8の時点でソートが完了しているように見えるがラウンド8ではP6の内部でaとbが交換されているため、P6はソート完了を認識していない。この例3においては、アルゴリズムは最適な時間でソートを完了している。 【0059】例4:問題3を解決するアルゴリズム例4では、問題3を解決するアルゴリズムの実行例を示す。本アルゴリズムと問題2を解決するアルゴリズムとの違いは、変数nL,nRによる送信要素数の制御の部分だけなので、例3と同様に、各プロセスが保持している要素だけでなく、各プロセスの該変数の内容も合わせて示す。また、問題3では、初期状態と最終状態とで各プロセスが保持する要素数が異なるので、最終状態で保持する要素数をプロセス番号の表示の後ろの括弧内に提示する。 【0060】例4では、例3と対比できるように、例3と同じn=9プロセスの線形ネットワークにおいて、例3と同じ初期状態の例を挙げる。さらに、この例4においては、各プロセスのソート完了時刻が例3のように同時ではないので、図18においてソート完了時刻を明示的に示すために、ソート完了後には要素と変数の値の表示を行わないようにする。例4の動作を図18に示す。 【0061】例5、6:問題3を解決するアルゴリズム−特殊な例例4では問題3の一般的な形の問題例を取り上げたが、例5、6では特殊な形の問題例を取り上げる。 【0062】まず、例5で取り上げる問題は、線形ネットワークの右半分にのみ要素があり、それをソートしながらネットワークの左半分に移動させるという問題である。この問題は、一見、今までのソーティングとは異なっているように見えるが、実際には、問題3の特殊な場合にすぎない。つまり、ネットワークの左半分のプロセスPiは[数19]で、ネットワークの右半分のプロセスPjでは[数20]の場合である。 【数19】
【数20】
このように、このアルゴリズムにより、線形ネットワーク上のデータをソートしつつ移動させることも可能である。例5で取り上げる問題では、n=14プロセスで要素数7の場合を取り上げる。なお、見やすくするために、例3、4のようなnL、nRの表示は行わない。また、各プロセスPiが最終状態で保持する要素数[外2]は、[数19]のプロセスでは[数21]とし、[数22]のプロセスでは[数20]とする。例5の動作を図19に示す。 【数21】
【数22】
【0063】次に、例6では、例5とは異なり、移動元のプロセスと移動先のプロセスとに重複がある場合を取り上げる。具体的には、Pn−i+1からPnまでにひとつずつ要素があり、それらをP1からPiへソートさせつつ移動させる問題を扱う。ここで、n<2iの場合に移動元のプロセスと移動先のプロセスとに重複が生じる。例6では、n=10、i=7の例を示す。例6の動作を図20に示す。 【0064】例5の形式の問題だけであれば、右から順次小さい値を左へ送信していくことで要素をソートさせつつ移動させることができるが、その方法では、この例6には対応できない。しかし、問題3を解決するアルゴリズムを利用するとどちらの問題に対してもひとつのアルゴリズムで対応することができる。これらの例に限らず、様々な形式の要素をソートさせつつ移動させる問題に対応することが可能である。 【0065】本発明の分散ソーティング方法は、所定のハードウェアと、このハードウェアにインストールされた基本ソフトウェアとを備えたコンピュータ装置に、さらにインストールすることによりそのコンピュータ装置に本発明の分散ソーティング方法を実行させるソフトウェアが記録された記録媒体を用いてコンピュータ装置に当該ソフトウェアをインストールすることにより実現する。 【0066】 【発明の効果】本発明により、nプロセスから構成される線形ネットワークにおいて、ソートすべき要素を左のプロセスから1プロセスあたり1要素ずつ昇順に並べ替える分散ソーティングを、厳密に最適な時間複雑度n−1と、通信要素数によって評価した場合の厳密に最適な通信複雑度[外4]とで実行できる。 【0067】また、同ネットワークにおいて、各プロセスが初期状態と最終状態で保持する要素数が1以上の場合の分散ソーティングを、高速に解決することができる。 【0068】さらに、同ネットワークにおいて、初期状態と最終状態とで各プロセスが保持すべき要素数が異なる分散ソーティングを、高速に解決することができる。 【0069】これらのアルゴリズムでは、文献[1]、[7]で述べられているエンコード方法を用いることで、オーダーとして最適なビット複雑度[数11]を実現することが可能である。
|
| 【出願人】 |
【識別番号】000004226 【氏名又は名称】日本電信電話株式会社
|
| 【出願日】 |
平成12年10月26日(2000.10.26) |
| 【代理人】 |
【識別番号】100078237 【弁理士】 【氏名又は名称】井出 直孝 (外1名)
|
| 【公開番号】 |
特開2002−132493(P2002−132493A) |
| 【公開日】 |
平成14年5月10日(2002.5.10) |
| 【出願番号】 |
特願2000−327236(P2000−327236) |
|