明 細 書 並列マ一ジソ一卜処理装置及び方法並びにプログラム 技術分野
この発明の核心となる技術は、 2つの整列済デ一タ列を入力とするマージソート処理を任意数 の並列度でできるように、 2つの整列済データ列対 (つい) をキ一値の大小を考慮して複数の整 列済部分データ列対に細分割する技術である。
それを用いた実施例として並列 2分木マ一ジソート法を取り上げる。 まず未整列データ列を利 用可能なプロセッサの数に対応する数に分割し並列にソ一ト操作を行い、 並列数だけの整列済部 分データ列を生成する。 次に、 2組の整列済部分データ列を対にしてマージ操作を行うのだが、 処理速度を高めるために、 入力データ列対を必要な数だけのデータ列対に細分割し、 それぞれ並 列にマージ操作を行う。 この出力は細分割せずに 1つのマージ操作をした時と同じ結果になるよ うに各マージ操作の実行時パラメータで出力域を指定する。 本発明は、 この操作を整列された単 一のデータ列を得る迄繰り返し行うことを特徴とする並列マージソート処理装置及ぴ方法並びに プログラムに関するものである。 -:' 背景技術
コンピュータを用いた基本的な処理の 1つにデータの整列がある。 整列 (ソート) 処理及び併 合 (マージ) 処理は、 入力されたデータ列を着目するフィールドの情報に関して昇順 (小から大 へ) 又は降順 (大から小へ) に整列して 1系列のデータ列を得る操作である。 併合操作は昇順(ま たは降順)に整列された 2系列以上のデータ(整列対象のデータまたはレコードの総称)列を受けて、 昇順または降順に整列された 1系列のデータ列を出力する。
入力系列の数は、 2、 3、 4 · · · と種々の場合が考えられるが、 特に 2の場合は 1回の比較で 1単位のデータの整列位置が確定するため効率が良い。
併合 (マージ) 処理に係る所要時間のオーダはデータ数 (ti)に比例するため、 n2または nlog2n に比例するソート操作に比べ有利である。 しかしデータ数の増大と共に所要時間も增すので、 よ り高速なアルゴリズム(算法)が求められている。 また性能の高いアルゴリズムの開発により、 マ ージソートの適用範囲がさらに広まる可能性もある。 だが 2つのキ一値の比較という単純な操作
であるため、 時間短縮の要因が潜在する可能性は低い。 本発明は従来技術ではなし得なかった 2 つの整列済部分データ列対を入力とするマージ処理の並列化を可能とするものである。
並列プロセッサを用いることにより多数のデータに対して同時並行的にマージ処理を行い、 処 理時間を短縮することが提案されている。 しかしプロセッサ間の接続ネッ卜ワークに特殊なトポ ロジ一を要するものや特殊な機能'構造のプロセッサを要するものが多く、 主記憶を共有する密 結合マルチプロセッサのような汎用的な計算機システムでは実現が困難である。 本発明は構成や 接続に特殊性を持たなレ、汎用的な並列プ口セッサで高レ、並列性をもつマ一ジソート法を実現する ものだが、 そのような方法を用いないと非常に効率が低い処理方式の例を以下に示す。
汎用的な並列プロセッサシステムに適用可能な並列マ—ジソート方法の一例として並列 2分木 マージソート算法をあげる。 図 1 3はその概略フローチャートであり、 図 1 4はプロセッサ数が 8の場合の処理説明図である。
図 1 3を参照すると、 処理対象の未整列データ列 (入力データ) をプロセッサの数に対応する p組のデータ列 (ただし、 = 2 <>、 qは整数) に分割する (S 1 0 0 ) 。 p個のプロセッサを用 レ、、 分割された p組の未整列データ列を例えばクイックソート法によりそれぞれ独立かつ並行し て整列する (S 1 0 1 ) ことができる。 整列された p組の部分データ列に対して q段のマージ処 理を施す (S 1 0 2 ) ことにより、 最終的に全体として整列された 1組のデータ列を得ることが できる (S 1 0 3 ) 。
図 1 4を参照してプロセッサの数が 8の場合の処理について説明する。 図中、 丸はプロセッサ を示し、 四角はデータ列あるいはデータ列 (D) が記憶される領域を示す。 丸の中の記号はプロ セッサが行う処理の内容を示し、 Sは整列 (ソート) 処理、 Mは併合 (マージ) 処理、 Vは必要 に応じてなされる他の記憶領域への転送処理を意味する。
入力領域に置かれた未整列のデータ列は 8つの部分データ列に分割される。 8つのプロセッサ P 1〜P 8によりこれら部分について同時並行的にソ一卜処理を行う。 これらの処理結果は領域 D 1 1〜D 1 8に置かれる。
次に、 第 1段のマージ処理を行う。 プロセッサ P 1によりデータ列 D 1 1と D 1 2が併合され て領域 D 2 1に置かれ、 プロセッサ P 3によりデータ列 D 1 3と D 1 4が併合されて領域 D 2 2 に置かれ、 プロセッサ P 5によりデータ列 D 1 5と D 1 6が併合されて領域 D 2 3に置かれ、 プ 口セッサ P 7によりデータ列 D 1 7と D 1 8が併合されて領域 D 2 4に置かれる。 なお、 第 1段 においてプロセッサ P 2 , P 4 , P 6 , P 8は使用されない (プロセッサの割り当ては便宜上の ものである。 以下同じ) 。
次に、 第 2段のマージソートを行う。 プロセッサ P 1によりデータ列 D 2 1と D 2 2が併合さ れて領域 D 3 1に置かれ、 プロセッサ P 5によりデータ列 D 2 3と D 2 4が併合されて領域 D 3 2に置かれる。 なお、 第 2段においてプロセッサ P 2 , P 3 , P 4 , P 6 , P 7 , P 8は使用さ れない。
次に、 第 3段のマージソートを行う。 プロセッサ P 1によりデータ列 D 3 1と D 3 2が併合さ れて領域 D 4に置かれる。 これでマージソートが完了する。 なお、 第 3段においてプロセッサ P 2 , P 3 , P 4 , P 5 , P 6 , P 7 , P 8は使用されなレ、。 得られた結果 D 4は必要なら 8つの プロセッサにより最終出力領域に転送される。
上述した従来の手法では、 マージ処理段が進行につれ使われなくなるプロセッサが増加するた めプロセッサの処理能力が無駄になっていた。 上記の例では第 1段のマージ処理ではプロセッサ の 5 0 %しか使用されず、 第 2段のマージ処理のプロセッサ使用率は 2 5 %、 第 3段のマ一ジ処 理ではプロセッサ使用率は 1 2 . 5 %となり、 処理段が進むにつれて使用されないプロセッサの 数が増える。 これはマージ処理段がすすむにつれて整列済部分データ列の数が半減していくため である。
また、 1台のプロセッサでマージするデータ数は後段になるに従って倍增するため、 処理時間 が増大する。 高速処理を優先するシステムでは、 プロセッサの使用率低下の問題以上に、 1台の プロセッサが扱うデータ量の增大による処理時間の増大が問題となる。
この発明は、 係る課題を解決するためになされたもので、 並列プロセッサを用いたマ一ジソ一 卜処理においてプロセッサの使用効率を高め、 処理時間を短縮可能な並列マージソ一卜処理装置 及び方法並びにプログラムを提供することを目的とする。 発明の開示
(段落 0 0 1 4 ) 本発明ではマージ処理の入力となる 2つの整列済部分データ列の対を任意数 のデータ列対に細分割して並列にマージ処理をすることにより、 マージ処理の所要時間を短縮す るものである。 複数のプロセッサから共通にデータ群が参照されることから、 主記憶を共有する 複数のプロセッサを接続した並列プロセッサにおいて特に有効であるが、 データ群が各プロセッ サから参照できる環境にある如何なる並列プロセッサにも適用可能である。
並列 2分木マージソート処理では、 未整列の入力データ列を複数組に分割し、 それぞれについ てソー卜処理を行って整列済部分データ列を作る。 以後は存在する整列済部分データ列を 2組ず つ対にしてマージ処理を行い 1組の整列済部分データ列を出力する処理段を、 出力データ列の数
が 1つにまとまる迄繰り返すものである。 各マージ処理段では入力となるデ一タ列対が複数ある 限りマージ処理は並列に行われる。
1単位のジヨブあるいはタスクであるマージ処理の並列化は従来技術では不可能なため、 マー ジ処理段の進行と共に並列度は半減し処理時間は倍増する。
本発明によれば、 マージ処理の入力となる 2組の整列済部分データ列 (図 1 4に示したソート 処理やマージ処理によって得られた部分的な整列済データ列) の対を複数の整列済部分データ列 の対に細分割することにより細分割した数だけのプロセッサを使用することができ、 整列処理に 要する時間を短縮できる。
また、 並列度を高めるため以下に記載する方法を適用することもできる。 すなわち、 入力とな る 2組の整列済データ列の対に対し、 2つのプロセッサを用いて、 キー値の大きい側(始端)から マージ操作を始めて結果を出力域の始端から降順に出力する方法 (正順併合または正順マージ) と、 キー値の小さい側(終端)からマージ操作を始めて出力域の終端から昇順に出力する方法 (逆 順併合または逆順マ一ジ) の両方のマージ操作を同時平行的に実行するのである。
この方式自体に起因する制約はないため、 複数のタスクが並行に動作できる環境下では容易に 実現できる。
以下の説明においては、 説明の便宜上『一つのキ一による降順の整列』 に限定する。 整列に関 連する用語には原則として 『整列』 と 『併合』 を用いるが、 同義語的に 『ソート』 や『マージ』 を用いることがある。
本発明に係る並列マ一ジソ一卜処理装置は、 従来方式のマージ操作における 2系列の入力デー タ列の対を複数組の 2系列の入力データ列対に分割する機構と、 それらの組に対して並列にマ一 ジ操作を行う機構を基本要素とする。
両機構に対しどのようにプロセッサ群を割り付けるかは任意である。 すなわち、 データ列対の 細分割を複数のプロセッサにさせた後、 マージ処理では改めてプロセッサを割り当て直すことも できるし、 データ列の細分割操作とその後のマージ操作を同一プロセッサに担当させることもで きる。
それぞれのマージ操作の出力はあたかも 1つのマージ操作を行った場合と同じ結果でなければ ならない。 このため、 並行に動作する各マージ操作では、 細分割した入力データ列対全体のキー 値の大小に対応した領域に結果を出力する必要がある。
部分データ列の対を割り当てられた前記プロセッサ群は、 それぞれマージ処理を行うと共に当 該マージ処理の結果を予め指示された領域に出力する。 このためには、 例えばマージ処理の入力
データ列対が格納されてレ、る領域の先頭メモリアドレスの対と処理すべきデータ数と出力域の先 頭ァドレスが管理プロセッサから指定されればよい。
前記部分データ列の対それぞれに対して 2つのプロセッサが割り当てられ、 第 1のプロセッサ は前記部分データ列の一方の端 (キ一値の大きい側) 力 ら正順にマージ処理を行い、 第 2のプロ セッサは同じ部分データ列の他方の端 (キ一値の小さい側) から逆順にマージ処理を同時に行い、 前記第 1のプロセッサは前記部分データ列の一方の端から順にマージ処理の結果を書き込み、 前 記第 2のプロセッサは前記領域の部分の他方の端から順にマージ処理の結果を書き込む。
(段落 0020) 段落 001 4に記述したように 1つのデータ列対を複数のデータ列対に細分 割するが、 細分割は指定されたデ一タ列対の始点から始めて指定数 Xのデータ数が存在するデ一 タ列と残りのデータ列とに 2分する操作を Xを変化させて反復する操作に分解できる。
従って細分割の基本はデータ列の 2分操作であるが、 その結果得られる 2つの整列済部分デー タ列対が満たすべき条件は以下のように定式化される。
n個のデータからなる整列 データ列 Dを (D, n) で表わし、 2つのデータ列を対にしたも のを { (D L n) , (D2, n) } と表記する。
整列済のデータ列の対: { (D!, n) , (D2, n) } 力 2つの部分データ列 { (D11( n n) , (D21, η21) } と、 部分データ列 { (D12, n12) , (D22, n22) } に分割され、 それらがマ一ジ処理に使われて全体としてキー値の大小に矛盾のない出力をするためには下式が 成立しなければならない。 部分データ列 と D21の末尾のデータのキ一値の小さい方
≥ 部分デ一タ列 D12と D22の頭部のデータのキー値の大きい方
n t i + n 2 i = 2分した上位データ列対に含まれるべきデータ数 この発明に係る並列マージソ一ト処理方法は、 複数のプロセッサを含む並列プロセッサを用い て並列マージソート処理を行うための方法であって、
入力として、 未整列の 1つのデータ列、 または 2つの整列済部分データ列、 あるいは 3つ以上 の整列済部分データ列のいずれかとその属性情報 (種別 .データの所在情報や個数など) を受け 入れ、
整列対象が未整列デ一タ列の場合はそのデ一タ列を分割して複数の未整列部分データ列を得る 第 1ステップと、
前記複数のソ一卜用部分デ一タ列にそれぞれプ口セッサを割り当てる第 2ステップと、 割り当てられたプロセッサにより前記複数の部分データ列につレ、てそれぞれ独立にソート処理 を行い降順に整列された部分データ列を出力する第 3ステップと、
第 3ステップまたは第 7ステップで得たか初期データとして入力された、 任意の 2つの整列済 部分デ一タ列でマージソート用の入力データ列の対をつく り、 所定の分割条件の下でそれぞれ要 求された数の細分された部分データ列の対に分割する第 4ステップと、
細分した部分データ列対に対してマージ処理をするために必要なジョブ情報を編集する第 5ス テツプと、
各マージ処理に対してプロセッサを割り当てる第 6ステップと、
割り当てられたプロセッサによりマージ処理を行レ、整列された部分デ一タ列を出力する第 7ス テツプと、
出力データ列の数が 1つになる迄前記第 4ステップ乃至前記第 7ステップを繰り返すステップ とを備えるものである。
但し、 以上は 1つの未整列データ列が与えられる場合に適用されるもので、 2つ以上の整列済 データ列が与えられる場合は第 1ステップから第 3ステップ迄は不要である。
また第 4ステップ乃至前記第 7ステップの繰り返しはマージ処理された整列済部分データ列が 1つのデータ列になった段階で終わる。 特に 2つの整列済データ列が与えられる場合は第 4ステ ップから第 7ステップは 1回だけ行われ繰り返しは必要としなレ、。
好ましくは、
前記第 6ステップにおいて、 前記部分データ列の対に対して 2つのプロセッサが割り当てられ、 前記第 7ステップにおいて、 第 1のプロセッサは前記部分データ列の一方の端 (キー値の大き い側) から正順マージ処理を行い、 第 2のプロセッサは同じ部分データ列の他方の端 (キー値の 小さレヽ側) から逆順マージ処理を同時に行う。
( 2分した下位データ列対の頭部の位置決定)
段落 0 0 2 0に記したデータ列対の 2分方法を以下に記述する。
令前記データ列 と D 2内の個々のデータを指定する指標変数 iと jを設け、 それらへの初期 値として前記 Xを設定 (1 0 0 0 0個ずつのデータ列対を 1 0 0 0個ずつのデータ列対 1 0区画 に分割する場合、 個数としての X = 1 0 0 0、 分割位置の初期指標には 1 0 0 0 , . . 9 0 0 0 を設定) するステップと、
♦デ一タ列 D iの指標変数 iが指すデ一タのキ一値とデ一タ列 D 2の指標変数 jが指すデータの キー値を比較する比較ステップと、
♦最初の比較で の指標変数 iが指すデータのキー値と D 2の指標変数 jが指すデータのキー 値が等しくない場合、 キー値の大きい方の指標変数に 1を加え、 小さい方の指標変数から 1を引 いた後、 前記比較ステップに分岐するステップと、
♦ 2回目以降の比較で D jの指標変数 iが指すデータのキー値と D 2の指標変数 jが指すデータ のキ一値との大小関係に変化がない場合、 大きい方の指標変数に 1を加え、 小さい方の指標変数 から 1を引いた後、 前記比較ステップに分岐するステップと、
令最初の比較で の指標変数 iが指すデータのキ一値と D 2の指標変数]'が指すデータのキー 値とが等しいとき、 指標変数 iが指すデータと指標 jが指すデータをそれぞれ分割境界とするス テツプと、
♦ D tの指標変数 iが指すデータのキー値と D 2の指標変数〗が指すデータのキー値との間の大 小関係が前回の大小関係から反転 (2回目以降の比較では等しい場合も反転とみなす) したとき、 前回の比較操作における D iのキ一値と D 2のキー値のうちの大きい方と、 今回の比較操作におけ る のキ一値と D 2のキ一値の内の大きい方とを比較して、 小さい方のキ一値をもつデータを分 割境界とすると共に、 当該データの当初の比較相手を他方の境界とするステップ
とを実行する。 なおこの処理は 2分した後半のデータ列対 { (D 1 2, n 1 2 ) , (D 2 2 , n 2 2 ) } の頭部の決定、 換言すれば正順併合の開始点の決定に使われる。
( 2分した上位データ列対の尾部の位置決定)
段落 0 0 2 0に記したように 2分する方法を以下に記述する。
♦前記データ列 D 1と D 2の個々のデータを指定する指標変数 i と jとに境界の指標値の初期値 として前記 X— 1を設定 (1 0 0 0 0個ずつのデータ列対を 1 0 0 0個ずつのデータ列対 1 0区 画に分割する場合、個数としての Xには 1 0 0 0、分割位置の初期指標には 9 9 9 , 1 9 9 9 , - . 8 9 9 9を設定する) するステップと、
♦データ列 D〗の指標変数 iが指すデータのキー値とデータ列 D 2の指標変数 jが指すデータの キー値を比較する比較ステップと、
♦最初の比較で D の指標変数 iが指すデータのキー値と D 2の指標変数 jが指すデータのキー 値が等しくない場合、 キー値の大きい方の指標変数に 1を加え、 小さい方の指標変数から 1を引 いた後、 前記比較ステップに分岐するステップと、
♦2回目以降の比較で の指標変数 iが指すデータのキー値と D 2の指標変数 jが指すデータ のキー値との大小関係に変化がない場合、 大きい方の指標変数に 1を加え、 小さい方の指標変数 から 1を引いた後、 前記比較ステップに分岐するステップと、
♦最初の比較で の指標変数 iが指すデータのキー値と D 2の指標変数〗が指すデータのキー 値とが等しいとき、 指標変数 iが指すデータと指標 jが指すデータをそれぞれ分割境界とするス テツプと、
♦ D iの指標変数 iが指すデータのキー値と領域 D 2の指標変数 jが指すデータのキ一値との間 の大小関係が前回の大小関係から逆転 (2回目以降の比較では等しい場合も反転とみなす) した とき、 前回の比較操作における のキ一値と D 2のキ一値のうちの小さい方と、 今回の比較操作 における のキ一値と D 2のキー値の内の小さい方とを比較して、 大きい方のキー値をもつデ一 タを分割境界とすると共に、 当該データの当初の比較相手を他方の境界とするステップ
とを実行する。 なおこの処理は 2分した前半のデータ列対 { (D n , n i l ) , (D 2 1 , n 2 1 ) } の尾部の決定、 換言すれば逆順併合の開始点の決定に用いる。
この発明は、 マ一ジソー卜の入力となる 2組の整列済データ列の対をキー値の大小分布を考慮 して複数のデータ列対に細分割することにより、 任意の並列度のマージソート処理を可能とする 並列マージソー卜処理方法であって、
整列されたデータからなる第 1のデ一タ列と第 2のデータ列を用意するステップと、 要求される並列度に応じて前記第 1のデータ列及び前記第 2のデータ列の対を両デ一タ列の頭 部からのキー値の大小を考慮して複数の整列済部分データ列対に細分割するステップと、 分割さ れた整列済部分データ列対を入力として並列にマージ処理を行うステップとを備えるものである。 この発明は、 複数のプロセッサを含む並列プロセッサを用いて並列マージソート処理を行うた めのプログラムであって、
入力として、 未整列の 1つのデータ列、 または 2つの整列済部分データ列、 あるいは 3つ以上 の整列済部分データ列のいずれかとその属性情報 (種別'データの所在情報や個数など) を受け 入れ、
整列対象が未整列データ列の場合はそのデ一タ列を分割して複数の未整列部分データ列を得る 第 1ステップと、
前記複数のソ一ト用部分データ列にそれぞれプ口セッサを割り当てる第 2ステップと、 割り当てられたプロセッサにより前記複数の部分データ列についてそれぞれ独立にソ一ト処理 を行い降順に整列された部分データ列を出力する第 3ステップと、
第 3ステップまたは第 7ステップで得たか初期データとして入力された、 任意の 2つの整列済 部分データ列でマージソート用の入力データ列の対をつくり、 所定の分割条件の下でそれぞれ要 求された数の細分された部分データ列の対に分割する第 4ステップと、
細分した部分データ列対に対してマージ処理をするために必要なジョブ情報を編集する第 5ス テツプと、
各マージ処理に対してプロセッサを割り当てる第 6ステップと、
割り当てられたプロセッサによりマージ処理を行い降順に整列された部分データ列を 各マージ処理に対してプロセッサを割り当てる第 6ステップと、
割り当てられたプロセッサによりマージ処理を行い降順に整列された部分データ列を出力する 第 7ステップと、
マージ処理されたデータ列を前記部分データ列として前記第 4ステップ乃至前記第 7ステップ を出力データ列の数が 1つになる迄繰り返すステップとを備えるものである。
但し第 1ステップから第 3ステツプ迄は入力データ列が未整列の場合にのみ必要なものである。 また第 4ステツプ乃至前記第 7ステツプの繰り返しはマージ処理された整列済部分データ列が 1 つのデータ列になつた段階で終わる。 特に 2つの整列済データ列が与えられる場合は第 4ステツ プから第 7ステップは 1回だけ行われ繰り返しは必要としなレ、。
この発明に係るプログラムは、 例えば、 記録媒体に記録される。
媒体には、 例えば、 EPROMデバイス、 フラッシュメモリデバイス、 フレキシブルディスク、 ハ一ドディスク、 磁気テープ、 光磁気ディスク、 CD (CD-ROM, V i d e o— CDを含む) DVD (DVD— V i d e o、 DVD-ROM, DVD— RAMを含む) 、 ROM力一卜リッジ、 バッテリバックアップ付きの RAMメモリカートリッジ、 フラッシュメモリカートリッジ、 不揮 発性 RAMカートリッジ等を含む。
また、 電話回線等の有線通信媒体、 マイクロ波回線等の無線通信媒体等の通信媒体を含む。 ィ ンタ一ネッ卜もここでいう通信媒体に含まれる。
媒体とは、 何等かの物理的手段により情報 (主にデジタルデータ、 プログラム) が記録されて いるものであって、 コンピュータ、 専用プロセッサ等の処理装置に所定の機能を行わせることが できるものである。 要するに、 何等かの手段でもってコンピュータにプログラムをダウンロード し、 所定の機能を実行させるものであればよい。 図面の簡単な説明
図 1は、 発明の実施の形態に係る並列マージソート処理装置の概要を示す図である。
図 2は、 発明の実施の形態 1に係る処理フローチヤ一卜である。
図 3は、 発明の実施の形態に係る処理全体の説明図である。
図 4は、 発明の実施の形態に係る処理の説明図である。
図 5は、 発明の実施の形態に係る処理の説明図である。
図 6は、 発明の実施の形態に係る処理の説明図である。
図 7は、 発明の実施の形態に係る処理の一部の説明図である。
図 8は、 発明の実施の形態に係る領域分割のフローチャートである (正順併合) 。
図 9は、 発明の実施の形態に係る領域分割のフロ一チャートである (逆順併合) 。
図 1 0は、 発明の実施の形態に係る領域分割の説明図である。
図 1 1は、 発明の実施の形態に係る領域分割の例を示す図である。
図 1 2は、 発明の実施の形態 2に係る処理フローチャートである。
図 1 3は、 従来の並列マージソート処理のフローチャートである。
図 1 4は、 従来の並列マ一ジソート処理の説明図である。 発明を実施するための最良の形態
発明の実施の形態 1 .
発明の実施の形態に係る装置 Z方法について図面を参照して説明する。
図 1は本装置の概略構成を示すものである。 1は複数のプロセッサを含み、 複数のタスクを同 時並行的に実行可能なマージ処理用並列プロセッサである。 2は 2組の整列済データ列の対を所 定数の部分データ列対に分割して管理用プロセッサ 4に返す領域分割用並列プロセッサである。 3は指定された領域に存在する未整列のデ一タ列をソー卜するソート処理用並列プロセッサであ る。 また 4は全体の制御を担当する管理プロセッサで、 ジョブ開始に際して外部から受ける入出 力データの場所やデータ数などの情報 6を受けるほか、 前記並列プロセッサ群に行わせるタス クに必要な情報の編集やタスクの起動、 タスク終了報告の受け付けなどの処理を担当する。 5は 整列対象のデータを含むデータ記憶域である。
1と 3は実装によっては同じ並列プロセッサを用いることもできるし、 2のデータ列対分割用 並列プロセッサについても同様である。
従来技術では一つのマージ処理用としてしか扱われない 2つの整列済データ列の対を複数の部 分データ列の対に分割することにより並列度を向上させる。 後述の図 3の例では、 マージの入力
となるデータ列 D 2 1と D 2 2の対を 2分割することにより 2組の入力データ列対を得て、 それ ぞれを正順マージと逆順マージを行うことによりプロセッサ P 1〜P 4に同時に処理をさせるこ とができ、 データ列 D 3 1、 D 3 2の対を 4分割することにより 4組の入力データ列対を得て、 それぞれを正順マージと逆順マージを行うことによりプロセッサ P 1〜P 8に同時に処理をさせ ることができる。 詳しくは後述する。
図 2の概略フロ一チヤ一卜で示す並列 2分木マージソート法では、 整列の対象であるデータ列 を p = 2 qの関係をもつ p組の未整列のデータ列に分割し、 それぞれを独立に、 例えばクイックソ 一ト法により整列させる。
S 1〜S 3は入力データ列を複数のデータ列に分割し p個のプロセッサに同時並行的にソ一卜 処理を行わせるための手順である。 その後、 以下のように q段のマージソートを繰り返し、 最終 的に全体として整列された 1組のデータ列を得る。
S 1 :整列処理の対象である未整列のデータ列を p組の未整列データ列に分割する。 ここで、 P = 2。で、 動員可能なプロセッサの数に相当し、 qはマージの段数を表す数である。 短い処理時間 を望む場合は Pを大きくするが、 1 o g 2 pの関係で qも増加する。
また説明の便宜上用いるマ一ジ段を表す変数 aを 0に初期化する。
S 2 : p個のプロセッサを分割された p区画に割り当てる。
S 3 :それぞれ独立にソ一卜する。
S 4 :マージ操作の入力となる整列済部分データ列の対を分割する。
( 1 ) a = a + 1
( 2 ) 2 11 _ a + 1組の整列済部分データ列を 2つずつ組み合わせた 2 q _ a組の入力データ列対を作 る。
各入力データ列対のそれぞれを 2 a一1組の細分化されたデータ列対に分割する。 データ列対の 分割の仕方については後述する。
S 5 : ( 2 " - a ) X ( 2 a一1 ) = 2 a一1組の細分されたデータ列対のそれぞれに正順併合と逆順併 合用のプロセッサを割り当てる。
S 6 :各組についてそれぞれ 2つのプロセッサを用いて正順併合と逆順併合を同時に行い 2 11一 a 組の整列された部分データ列を得る。
S 7 :次に、 a≠qなら aに 1を加え、 S 4〜 S 7の処理を繰り返す。
S 8 :以上の手順により、 最終的に全体として整列された 1組のデータ列を得ることができる。
図 2の方法は、 1段目のマージでは分割しないが、 2段目において 2分割し、 3段目において 4分割し、 4段目において 8分割し、 · · ·、 q段目において領域を 2 o 1分割し、 それぞれの 領域に正順併合と逆順併合を適用する。 図 2の整列済データ列分割法を適用した並列 2分木マ一 ジソ一ト法では常に p並列の併合操作を行うことができる。
図 3を参照してプロセッサの数が 8の場合における並列 2分木マ一ジソ一ト法の処理について 説明する。 図中、 丸はプロセッサを示し、 四角はデータ列あるいはデータ列 (D) が記憶される 領域を示す。 丸の中の記号はプロセッサが行う処理の内容を示し、 Sは整列 (ソート) 処理、 M は併合 (マージ) 処理、 Vは転送処理を意味する。
入力領域に置かれたデータは 8組の未整列データ列に分割する。 8つのプロセッサ P 1〜P 8 によりこれら部分データ列について同時並行的にソ一ト処理を行う。 これらの処理結果は領域 D 1 1〜D 18に置かれる。
次に、 第 1段目のマ一ジソ一卜を行う。 プロセッサ P 1、 P 2によりデータ列 D 1 1と D 12 が併合されて D 21に置かれ、 プロセッサ P 3、 P 4によりデータ列 D 13と D 14が併合され て D22に置かれ、 プロセッサ P 5、 P 6によりデータ列 D 1 5と D 16が併合されて D23に 置かれ、 プロセッサ P 7、 P 8によりデ一タ列 D1 7と D 18が併合されて D 24に置力、れる。 なお第 1段目では正順併合と逆順併合が同時に行われるので、 分割を行わなくても 8台のプロ セッサが使用される (プロセッサの割り当ては便宜上のものである。 以下同じ) 。
次に、 第 2段目のマージソ一卜を行う。 全てのプロセッサを使用するためにデータ列対を 2分 割する。 すなわち、 部分データ列 D 21と D 22の対に対しキー値の大小を考慮して 2分割し、 D 21— 1と D 22— 1の対と D 21— 2と D 22— 2の対を作る。 データ列 D 23と D 24の 対についても同様である。
そして、 プロセッサ P l、 P 2によりデータ列 D21— 1と D22— 1が併合されて D31の 一方 (キー値の大きい側) に置かれ、 プロセッサ P 3、 P 4によりデータ列 D 21— 2と D 22 — 2が併合されて D 31の他方 (キー値の小さい側) に置かれる。 同様に、 プロセッサ P 5〜P 8によりデータ列 D 23と D24が併合されて D 32に置かれる。
次に、 第 3段目のマージソ一卜を行う。 第 2段階目と同様に分割が行われる。 すなわち、 デ一 タ列 D 31と D 32を対にし、 キー値の大小を考慮して 4分割し、 031—1と032—1、 D 31— 2と D32_2、 D32— 3と D32— 3、 D31— 4と D32— 4の各部分データ列対 を作る。 プロセッサ P l、 P 2によりデータ列 D 31— 1と D 32— 1が併合されて D4内の所 定の位置に置かれ、 プロセッサ P 3、 P4によりデータ列 D31— 2と D32— 2が併合されて
領域 D 4内の所定の位置に置かれ、 プロセッサ P 5 P6によりデータ列 D31— 3と D32— 3が併合されて領域 D 4内の所定の位置に置かれ、 そして、 プロセッサ P 7 P 8によりデータ 列 D 31—4と D 32— 4が併合されて領域 D 4内の所定の位置に置かれる。 これでマージソー 卜が完了する。 得られた結果 D 4は必要なら 8台のプロセッサにより出力領域に転送される。 図 3の処理の各段階において 8つのプロセッサの全てが使用される。
図 4〜図 6を参照して図 3の処理を模式的に説明する。
dl0 dl3 d20 d23の 8つの部分データ列 (各ブロックのデータ数 = 380個) の合計 304 0組のデータをソ一卜することを考える。
(1) dl0 d 23のそれぞれを 8台のプロセッサを使いソートする。 ソ一卜された状態は図 4の 中段のようにキー値が降順に並べられたものになる。 図中、 三角形は各ブロックのおけるキー値 の大きさの分布を示す。
(2) 別に一組の作業領域 el0 el3 d20 d23を設けて図 4の中段のように並列マージを実行す る。 その結果、 下段のような結果が得られる。
(3) 次に 2段目のマージソ一卜を行う。 (el0 e 11) と ( e 20 e 21) を組み合わせ、 キ一 値の大小を考慮して 2分割して 2組のマージ入力用データ列の対を作り 4並列のマージ操作を実 行する (図 5上段) 。 同時に、 (el2 el3) と ( e 22 e 23) を組み合わせ、 キー値の大小を 考慮して 2分割して 2組のマージ入力用データ列対を作り 4並列のマージ操作を実行する (図 5 下段) 。 結局、 4並列のマージが 2系統並列に実行される。
(4) 次に 3段目のマージソートを行う。 dl0 dl3と d20 d23を組み合わせてキ一値の大小 を考慮して 4分割して 4組のマージ入力対を作り、 e 10 e23 出力する。 各領域は 4分割され、 それぞれ正順 ·逆順の処理がされるので、 8つの処理が並列に実行される。
図 3の各段階におけるマージソート処理についてさらに詳しく説明する。 図 7はその説明図で ある。 入力領域 (D^ n) と (D2 n) の入力データ列の対が与えられたとする。 ここで (D !, n) と (D2 n) は n個のデータからなるデータ列 と D2を意味する。 図 7の各領域にお いて左側ほどキー値が大きく、 右側ほどキー値が小さくなるようにソ一トされている。
(段落 0048) 図 1に示すデータ列対分割部 2により n) と (D2 n) の整列済 部分データ列対がキー値の大小を考慮して分割 (図 7では 2分割) され、 (D„ ηι α) と (D 2い η21) の対と (D12 n12) と (D22 n22) の対とに分けられたとする。
この分割では下記の式を満足しなければならない。
の末尾のデータのキー値と D 2 Jの末尾のデータのキ一値の小さい方
≥D12の頭部のデータのキ一値と D 22の頭部のデ一タのキー値の大きレ、方 n!! + n 21 =2 x、 n12 + n22=2 、n— x)
ここで 2 xは、 データ列対 { (Du、 n n) , (D2い n21) } がもつデータ数である。 マージ操作の入力であるデータ列対 (Du, n 1 :) と (D21, n21) に対して、 プロセッサ P 1で正順併合を行うとともに、 プロセッサ P 2で逆順併合を行う。
図中の点線は併合の順序を示す。 その結果を出力領域 (D3, 2 n) の部分である (D31, n3 !) に順次出力する。
同様に、 整列済データ列 (D12, n12) と (D22, n22) の対に対して、 プロセッサ P 3で 正順併合を行うと共にプロセッサ P 4で逆順併合を行う。 その結果を出力領域 (D3, 2 η) の部 分である (D32, n32) に順次出力する。
ここで、 (D 3 の末尾のデータのキー値) ≥ (D 32の頭部のデータのキー値) 、
n31 + n32=2 nである。
以上のように入力データ列対を分割すると共に、 分割されたデータ列対それぞれにプロセッサ を割り当てることにより、 複数のプロセッサによる同時並行処理が可能になる。 なお、 以上の説 明はあくまで一例であり、 本発明はこれに限定されない。
次に整列済データ列対への分割手順について説明する。 図 7の例からも明らかなように、 マ一 ジソ一卜が正しく行われるためには、 (D 3 iの末尾のデータのキー値) ≥ (D32の頭部のデータ のキ一値) でなければならない。 D31は Dn、 D21のマージソート結果であり、 D32は D12、 D22のマージソート結果である。 したがって、 (Duまたは D21に含まれるデータのキー値の最 小値) ≥ (D12または D22に含まれるデータのキー値の最大値) ということである。 このことか ら本発明の領域分割の条件は次のようなものである。
前記分割条件では、 予め整列された 2つのデータ列の対 (D^ n) と (D2, n) I 部分デ —タ列 (Dl lt n X 1) と (D21, n21) の対と、
部分データ列 (D12, n 12) と (D22, n22) の対に 2分割されたとき、
(部分データ列 と D21の末尾のデータのキー値の小さい方)
≥ (部分データ列 D i 2と D 22の頭部のデータのキー値の大きレ、方)
が成立すると共に、
が成立しなければならない。 ここで Xは と D2の頭部から数えたデータ列対のデータ数の半 分の数である。
例えば、 1000個の整列済データ列対に対し、 x = 300と x = 600の 2回の分割操作を すると、 各データ列対の合計データ数が 600, 600, 800の 3つのデータ列対 { (D: 1, n il) , (ひ 2 ΐ, η 2 } { (D12) n 12) , (D22, n 22) } { (D 13, n 13) , (D23, n23) } に分割される。 この場合、 両データ列を合わせ、 先頭から 600番目のデータのキー値 (Dl tと D21の末尾のデ一タキ一値の小さい方) と 60 1番目のデータのキ一値 (D12と D22 の頭部のキー値の大きい方) 、 1 200番目のデータのキ一値と 1 20 1番目のデータのキー値 に前記の大小関係が満たされねばならない。
以上の条件を満たす整列済データ列対分割の手法を説明する。 以下の正順併合用の分割手法ま たは逆順併合用の分割手法、 あるいは両方の手法を用いることにより、 上記条件を満たすデータ 列対への分割が実現できる。
整列済データ列対の分割手法の具体的な手順の説明の前に、前提となる事項について説明する。 それぞれ n個のデ一タからなる 2つの整列済データ列 と D2を仮定し、 両データ列を(n/k)組の データを含む k組のデータ列対に均等に分割する。
個々のデータ列は 0から k-1のデータ列番号で指定する。 また各データの位置は、 データ列頭 部を 0としデータ毎に 1ずつ増加する指標値で指定する。 この位置指定法は 1^、 D2全体のデー タ位置指定のほか、 分割した各データ列内の位置指定にも用いる。 また、 データ列の頭部あるい は尾部という表現で始端あるレ、は終端のデータ位置を指定する。
前述した均等分割後の と D2の部分データ列中、 同一データ列番号のデータ列同志を仮の併 合対象データ列対とする。
すなわち、 データ列番号 i(i=0〜k- 1)のデータ列対を対象とする正順併合の始点は、 D iと D2 の始端から k) (i)組のデ一タを除いた残りのデータ列の始端、 すなわち指標値が(n/k) (i)の点 とする。
またデータ列番号 i (i=0〜k-l)のデータ列を対象とする逆順併合の始点は、 D!と D 2の始端か らそれぞれ (n/k) (i+1)組のデータが存在するデータ列の末尾、 換言すれば指標値が(n/k) (i+l)-l の点とする。
と D2内のキ一値の分布は互いに独立である。 このため、 それぞれのデータ列内で整列済で あっても、 仮の開始点から併合操作をしたのでは、 全体としてキ一値の分布に矛盾のない整列結 果を得ることはできなレ、。 そこで以下の手順により前記条件を満たす開始点 (分割点) を求める。 ぐ正順併合の場合 >
それぞれ整列された n個のデータからなる 2つのデータ列、 Diと D2とがある。 段落 0048 の条件を満たし、 かつ、 両データ列の先頭からのキー値の大小を考慮してデータ列の先頭からの データ数が 2 (n/k) +2、 4 (n/k) +2, 6 (n/k) +2, · · · 2(k- 1) (n/k)+2となるデータ列対を識別する。 この境界はデータ数が 2 (n/k)、 4 (n/k), 6 (n/k), · · · 2(k_l) (n/k)のデータ列対を除いた残り のデータ列対の頭部の指標である。
図 8を参照する。
S 10 :境界初期値 (あるいは仮の境界値) として(n/k)、 2 (n/k), 3(n/k)、 · · · (k_l) (n/k)の 指標値をもつ点を選ぶ。
S 1 1 : と D2域の作業用指標変数 iと jとに、 S 1 0で定めた境界初期値の指標値を設定す る。
S 1 2 :下記の手順を大小関係が反転する迄繰り返す。 ただし最初の比較を含め、 キー値が等し い場合も反転とみなす。
S 1 2 a : D i)と D2(j)のキー値を比較する。
51 2 b :大小関係を判別する。
(1) 最初の比較で両者が等しいなら S 1 3 aに分岐する。
(2) 大小関係が逆転したら S 1 3 bに分岐する。
(3) 最初の比較で両者が等しくない場合、 または 2回目以降の比較で大小関係が反転しない場 合、 キー値の大きい方の指標値に 1を加え、 小さい方の指標値から 1を引いた後、 S 1 2に分岐 する (S 1 2 c) 。
S 1 3 a : iと jを境界点の指標とし処理を終わる。
51 3 b :大小関係が変化する直前と直後の比較操作の対象データ中、 大きいキー値同志を比較 し、 その小さい方を境界のデータとする。 他方の領域の境界データには今求めたデータの当初の 比較相手を選ぶ。
ぐ逆順併合の場合 >
それぞれ n個のデータを収容した 2つのデータ歹【J、 と D2とがある。 段落 0048の条件を 満たし、 かつ、 両データ列のキー値の大小分布を考慮してデータ列先頭からのデータ数が 2(n/k)、 4 (n/k), 6 (n/k), · · · 2 (k-1) (n/k)となるデータ列の末尾を求める。 以下では図 9を参照する。 S 20:境界初期値(仮の境界値)として、それぞれ (n/k)- l、2(n/k)-l、3(n/k)-l、 · · ·(k- 1) (n/k)- 1 の指標値をもつ点を選ぶ。
S 2 1 : と D2域の作業用指標変数 iと jとに S 20で定めた境界初期値の指標値を設定する。
S 22 :下記の手順を大小関係が反転する迄繰り返す。 ただし最初の比較を含め、 キー値が等し い場合も反転とみなす。
S 22 a : D!(i)と D2(j)のキー値を比較する。
S 22 b :大小関係を判別する。
(1) 最初の比較で両者が等しいなら S 23 aに分岐する。
(2) 大小関係が反転したら S 23 bに分岐する。
(3) 最初の比較で両者が等しくない場合、 または 2回目以降の比較で大小関係が反転しない場 合、 キー値の大きい方の指標値に 1を加え、 小さい方の指標値から 1を引いて S 22に分岐する。 S 23 a : iと jを境界点の指標とし処理を終わる。
S 23 b :大小関係が変化する直前と直後の比較操作の対象データ中、 小さいキー値同志を比較 し、 その大きい方を境界のデータとする。 また、 他方の領域の境界のデータには上で求めたデー タの当初の比較相手を選ぶ。
上記手順によるデータ列対の分割例について説明する。
図 10は降順に整列された、 それぞれ 10個の数値を含む下記の 2つのデータ列を示す。 図 10 (a) は正順併合の始点の決定手順の説明図、 図 10 (b) は逆順併合の始点の決定手順の説明 図、 図 10 (c) は領域の分割結果を示す。
D 1 : (1948, 1868, 1862, 1148, 740, 620, 588, 256, 112, 100)
D 2 : (1996, 1992, 1966, 1694, 1544, 1448, 1182, 432, 254, 30)
(段落 0059) <正順併合の始点の決定 >
(1) データ列頭部から 5組のデータを除いたデータ列の頭部が仮の分割点となる。 作業用指標 i , j にこの値を設定する。 i=j=5となる。
(2) D1(i=5)=620と D2(j=5)=1466を比較する。 1466が大きいので、 i=i - 1=4, j=j+l=6とする
(4)
を比較する。 1148が大きいので、 ここで大小関係の反転を 認識する。
(1) 反転前後の比較で値の大きい 11 と 1182を比較し、 その小さい方である 1148の点を一方 の境界とする。 他方の境界は 1148の当初の比較相手である 432を得る。 なお、 一方の境界が判明 すれば、 次式(1)を用い 2x5-3=7として他方の境界指標値を求めることもできる。
他方の開始点の指標値 = 仮併合開始点の指標 x2 - 既知の開始点の指標
<逆順併合の始点の決定 >
(1) データ列頭部から 5組のデータがある点が仮の分割点となる。 作業用指標 i , jにこの値 を設定する。 i=j=4とする。
(2) 0 1=4)=740と D2(j=4)=1544とを比較すると、 1544が大きいので、 i=i_l=3, j=j+l=5と する。
(3) D1(i=3)=1148と D2(j=5)=1446とを比較すると、 1446が大きいので i=i - 1=2, j=j+l=6と する。
(4) D1(i=2)=1862と D2(j=6)=1182とを比較すると、 1862が大きいので大小関係が反転したこ とになる。
(5) 反転前後の比較で値の小さい 1148と 1182を比較し、 大きい方の 1182を一方の境界とする。 他方の境界は 1182の当初の比較相手のデータ 1862を得る。 段落 0059の式を用レ、、 2x4-6=2 として他方の境界の指標値を求めることもできる。
他の例を図 1 1 (a) (b) に示す。 図 1 1 (a) は、 n = 1 2, k = 4, n/k = 3の場合 である。 図 1 1 (b) は、 n= 1 0, k = 5, n/k = 2の場合である。 この例のように、 分割 後の部分データ列により併合する場合の出力データが または D 2の一方にのみ存在する場合 (両 方のデータ列にまたがつていない場合) であっても、 前記条件を満たすことがわかる。
本発明の実施の形態に係る装置/方法において、 分割する区画の数は使用可能な処理装置の数 に応じて任意に決めることができる。
本発明に係る装置 方法において、 マ一ジソー卜の入力となる整列済部分データ列対を複数の データ列対に分割する時間の全時間に占める割合を小さくするため、 データ数が大きいほど効果 も大きい。 なお、 複数のデータ列対に分割する処理のうち、 実質的な併合開始点を決定する部分 をマージソート作業を割り当てられたプロセッサ自身が実行すれば、 より充実した並列処理が可 能となり全処理時間に占める領域対分割にかかる時間の割合を削減できる。
( 1) 効果の大きい場合
データ列 D!と D 2のキー値の分布がほぼ同じ場合は短時間に大小関係が反転する。 このためマ —ジ入力となるデータ境界の決定に多くの時間を要しない。
(2) 分割に時間のかかる場合
下記のケースが考えられる。
(a) 分割対の確定に時間のかかる場合
k区画に分割する場合で対象となるデ タ列対の区画番号が k / 2に近レ、場合で、 D iまたは D 2の頭部や尾部、 換言すればデータ列の端部近辺になってようやく大小関係が反転する場合、 大小
関係の反転までに時間がかかる。 キーの分布が と D 2とで偏りがある場合に発生するが、 この ようなケースが頻発することは少ないと考える。
( b ) キー値の価域に重複がない場合と大小関係が反転しない場合
大小関係の反転を求めて比較を続け、領域の頭部または端部に至っても反転しない場合である。 このときは次のように扱うことができる。 すなわち、 頭部に達しても反転しない場合は頭部の外 側に無限大のキ一を仮定して強制的に反転させ、 尾部に至っても反転しない場合は尾部の外に無 限小のキーを仮定して反転させる。
なお、 上記例ではデータ列 と D 2のデータ数は同数を仮定していた。 本発明はこれに限定さ れなレ、。 整列タスクゃ併合タスクにおレ、てデータ数を指定しさえすれば D Jと D 2のデータの数が 異なる場合にも適用できる。
本発明は汎用的な技術であり、 主記憶を共有する汎用的な並列プロセッサ方式の電子計算機に 特に適合性が高い。 しかし整列対象のデ一タ群が共通にアクセスできる環境にあればシステムの 構成や処理形態を問わず適用できると考えられる。 本発明は、 並列プロセッサ方式の電子計算機 のソフトウェア (O S ) に組み込まれるプログラムのひとつとして実現されると考えられる。 発明の実施の形態 2 .
発明の実施の形態 1の装置 Z方法は、 図 2に示すように正順併合と逆順併合を同時に用いるも のであった。 この発明は正順併合と逆順併合のレ、ずれか一方しか用いなレ、場合にも適用できる。 図 1 2は並列 2分木マージソート法に適用した場合のフローチャートである。 この場合は初段の マージから 2分割するので常に p個のプロセッサが動作する。 マ一ジ処理を行う並列プロセッサ も正順併合か逆順併合のいずれかの機能を装備するだけでよいので実現は簡単になる。
実施形態 2の処理内容は発明の実施の形態 1の場合と同様であるので、 その説明を省略する。 なお、 図 1 2が図 2と異なる部分は S 4 bと S 5 bと S 6 bである。
本発明は、 以上の実施の形態に限定されることなく、 特許請求の範囲に記載された発明の範囲 内で、 種々の変更が可能であり、 それらも本発明の範囲内に包含されるものであることは言うま でもない。
また、 本明細書において、 手段とは必ずしも物理的手段を意味するものではなく、 各手段の機 能が、 ソフトウェアによって実現される場合も包含する。 さらに、 一つの手段の機能が、 二つ以 上の物理的手段により実現されても、 若しくは、 二つ以上の手段の機能が、 一つの物理的手段に より実現されてもよい。