JPWO2003091872A1 - 並列マージソート処理装置及び方法並びにプログラム - Google Patents
並列マージソート処理装置及び方法並びにプログラム Download PDFInfo
- Publication number
- JPWO2003091872A1 JPWO2003091872A1 JP2004501962A JP2004501962A JPWO2003091872A1 JP WO2003091872 A1 JPWO2003091872 A1 JP WO2003091872A1 JP 2004501962 A JP2004501962 A JP 2004501962A JP 2004501962 A JP2004501962 A JP 2004501962A JP WO2003091872 A1 JPWO2003091872 A1 JP WO2003091872A1
- Authority
- JP
- Japan
- Prior art keywords
- data
- data string
- merge
- sorted
- key value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/36—Combined merging and sorting
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
この発明の核心となる技術は、2つの整列済データ列を入力とするマージソート処理を任意数の並列度でできるように、2つの整列済データ列対(つい)をキー値の大小を考慮して複数の整列済部分データ列対に細分割する技術である。
それを用いた実施例として並列2分木マージソート法を取り上げる。まず未整列データ列を利用可能なプロセッサの数に対応する数に分割し並列にソート操作を行い、並列数だけの整列済部分データ列を生成する。次に、2組の整列済部分データ列を対にしてマージ操作を行うのだが、処理速度を高めるために、入力データ列対を必要な数だけのデータ列対に細分割し、それぞれ並列にマージ操作を行う。この出力は細分割せずに1つのマージ操作をした時と同じ結果になるように各マージ操作の実行時パラメータで出力域を指定する。本発明は、この操作を整列された単一のデータ列を得る迄繰り返し行うことを特徴とする並列マージソート処理装置及び方法並びにプログラムに関するものである。
背景技術
コンピュータを用いた基本的な処理の1つにデータの整列がある。整列(ソート)処理及び併合(マージ)処理は、入力されたデータ列を着目するフィールドの情報に関して昇順(小から大へ)又は降順(大から小へ)に整列して1系列のデータ列を得る操作である。併合操作は昇順(または降順)に整列された2系列以上のデータ(整列対象のデータまたはレコードの総称)列を受けて、昇順または降順に整列された1系列のデータ列を出力する。
入力系列の数は、2、3、4・・・と種々の場合が考えられるが、特に2の場合は1回の比較で1単位のデータの整列位置が確定するため効率が良い。
併合(マージ)処理に係る所要時間のオーダはデータ数(n)に比例するため、n2またはnlog2nに比例するソート操作に比べ有利である。しかしデータ数の増大と共に所要時間も増すので、より高速なアルゴリズム(算法)が求められている。また性能の高いアルゴリズムの開発により、マージソートの適用範囲がさらに広まる可能性もある。だが2つのキー値の比較という単純な操作であるため、時間短縮の要因が潜在する可能性は低い。本発明は従来技術ではなし得なかった2つの整列済部分データ列対を入力とするマージ処理の並列化を可能とするものである。
並列プロセッサを用いることにより多数のデータに対して同時並行的にマージ処理を行い、処理時間を短縮することが提案されている。しかしプロセッサ間の接続ネットワークに特殊なトポロジーを要するものや特殊な機能・構造のプロセッサを要するものが多く、主記憶を共有する密結合マルチプロセッサのような汎用的な計算機システムでは実現が困難である。本発明は構成や接続に特殊性を持たない汎用的な並列プロセッサで高い並列性をもつマージソート法を実現するものだが、そのような方法を用いないと非常に効率が低い処理方式の例を以下に示す。
汎用的な並列プロセッサシステムに適用可能な並列マージソート方法の一例として並列2分木マージソート算法をあげる。図13はその概略フローチャートであり、図14はプロセッサ数が8の場合の処理説明図である。
図13を参照すると、処理対象の未整列データ列(入力データ)をプロセッサの数に対応するp組のデータ列(ただし、p=2q、qは整数)に分割する(S100)。p個のプロセッサを用い、分割されたp組の未整列データ列を例えばクイックソート法によりそれぞれ独立かつ並行して整列する(S101)ことができる。整列されたp組の部分データ列に対してq段のマージ処理を施す(S102)ことにより、最終的に全体として整列された1組のデータ列を得ることができる(S103)。
図14を参照してプロセッサの数が8の場合の処理について説明する。図中、丸はプロセッサを示し、四角はデータ列あるいはデータ列(D)が記憶される領域を示す。丸の中の記号はプロセッサが行う処理の内容を示し、Sは整列(ソート)処理、Mは併合(マージ)処理、Vは必要に応じてなされる他の記憶領域への転送処理を意味する。
入力領域に置かれた未整列のデータ列は8つの部分データ列に分割される。8つのプロセッサP1〜P8によりこれら部分について同時並行的にソート処理を行う。これらの処理結果は領域D11〜D18に置かれる。
次に、第1段のマージ処理を行う。プロセッサP1によりデータ列D11とD12が併合されて領域D21に置かれ、プロセッサP3によりデータ列D13とD14が併合されて領域D22に置かれ、プロセッサP5によりデータ列D15とD16が併合されて領域D23に置かれ、プロセッサP7によりデータ列D17とD18が併合されて領域D24に置かれる。なお、第1段においてプロセッサP2,P4,P6,P8は使用されない(プロセッサの割り当ては便宜上のものである。以下同じ)。
次に、第2段のマージソートを行う。プロセッサP1によりデータ列D21とD22が併合されて領域D31に置かれ、プロセッサP5によりデータ列D23とD24が併合されて領域D32に置かれる。なお、第2段においてプロセッサP2,P3,P4,P6,P7,P8は使用されない。
次に、第3段のマージソートを行う。プロセッサP1によりデータ列D31とD32が併合されて領域D4に置かれる。これでマージソートが完了する。なお、第3段においてプロセッサP2,P3,P4,P5,P6,P7,P8は使用されない。得られた結果D4は必要なら8つのプロセッサにより最終出力領域に転送される。
上述した従来の手法では、マージ処理段が進行につれ使われなくなるプロセッサが増加するためプロセッサの処理能力が無駄になっていた。上記の例では第1段のマージ処理ではプロセッサの50%しか使用されず、第2段のマージ処理のプロセッサ使用率は25%、第3段のマージ処理ではプロセッサ使用率は12.5%となり、処理段が進むにつれて使用されないプロセッサの数が増える。これはマージ処理段がすすむにつれて整列済部分データ列の数が半減していくためである。
また、1台のプロセッサでマージするデータ数は後段になるに従って倍増するため、処理時間が増大する。高速処理を優先するシステムでは、プロセッサの使用率低下の問題以上に、1台のプロセッサが扱うデータ量の増大による処理時間の増大が問題となる。
この発明は、係る課題を解決するためになされたもので、並列プロセッサを用いたマージソート処理においてプロセッサの使用効率を高め、処理時間を短縮可能な並列マージソート処理装置及び方法並びにプログラムを提供することを目的とする。
発明の開示
(段落0014) 本発明ではマージ処理の入力となる2つの整列済部分データ列の対を任意数のデータ列対に細分割して並列にマージ処理をすることにより、マージ処理の所要時間を短縮するものである。複数のプロセッサから共通にデータ群が参照されることから、主記憶を共有する複数のプロセッサを接続した並列プロセッサにおいて特に有効であるが、データ群が各プロセッサから参照できる環境にある如何なる並列プロセッサにも適用可能である。
並列2分木マージソート処理では、未整列の入力データ列を複数組に分割し、それぞれについてソート処理を行って整列済部分データ列を作る。以後は存在する整列済部分データ列を2組ずつ対にしてマージ処理を行い1組の整列済部分データ列を出力する処理段を、出力データ列の数が1つにまとまる迄繰り返すものである。各マージ処理段では入力となるデータ列対が複数ある限りマージ処理は並列に行われる。
1単位のジョブあるいはタスクであるマージ処理の並列化は従来技術では不可能なため、マージ処理段の進行と共に並列度は半減し処理時間は倍増する。
本発明によれば、マージ処理の入力となる2組の整列済部分データ列(図14に示したソート処理やマージ処理によって得られた部分的な整列済データ列)の対を複数の整列済部分データ列の対に細分割することにより細分割した数だけのプロセッサを使用することができ、整列処理に要する時間を短縮できる。
また、並列度を高めるため以下に記載する方法を適用することもできる。すなわち、入力となる2組の整列済データ列の対に対し、2つのプロセッサを用いて、キー値の大きい側(始端)からマージ操作を始めて結果を出力域の始端から降順に出力する方法(正順併合または正順マージ)と、キー値の小さい側(終端)からマージ操作を始めて出力域の終端から昇順に出力する方法(逆順併合または逆順マージ)の両方のマージ操作を同時平行的に実行するのである。
この方式自体に起因する制約はないため、複数のタスクが並行に動作できる環境下では容易に実現できる。
以下の説明においては、説明の便宜上『一つのキーによる降順の整列』に限定する。整列に関連する用語には原則として『整列』と『併合』を用いるが、同義語的に『ソート』や『マージ』を用いることがある。
本発明に係る並列マージソート処理装置は、従来方式のマージ操作における2系列の入力データ列の対を複数組の2系列の入力データ列対に分割する機構と、それらの組に対して並列にマージ操作を行う機構を基本要素とする。
両機構に対しどのようにプロセッサ群を割り付けるかは任意である。すなわち、データ列対の細分割を複数のプロセッサにさせた後、マージ処理では改めてプロセッサを割り当て直すこともできるし、データ列の細分割操作とその後のマージ操作を同一プロセッサに担当させることもできる。
それぞれのマージ操作の出力はあたかも1つのマージ操作を行った場合と同じ結果でなければならない。このため、並行に動作する各マージ操作では、細分割した入力データ列対全体のキー値の大小に対応した領域に結果を出力する必要がある。
部分データ列の対を割り当てられた前記プロセッサ群は、それぞれマージ処理を行うと共に当該マージ処理の結果を予め指示された領域に出力する。このためには、例えばマージ処理の入力データ列対が格納されている領域の先頭メモリアドレスの対と処理すべきデータ数と出力域の先頭アドレスが管理プロセッサから指定されればよい。
前記部分データ列の対それぞれに対して2つのプロセッサが割り当てられ、第1のプロセッサは前記部分データ列の一方の端(キー値の大きい側)から正順にマージ処理を行い、第2のプロセッサは同じ部分データ列の他方の端(キー値の小さい側)から逆順にマージ処理を同時に行い、前記第1のプロセッサは前記部分データ列の一方の端から順にマージ処理の結果を書き込み、前記第2のプロセッサは前記領域の部分の他方の端から順にマージ処理の結果を書き込む。
(段落0020) 段落0014に記述したように1つのデータ列対を複数のデータ列対に細分割するが、細分割は指定されたデータ列対の始点から始めて指定数xのデータ数が存在するデータ列と残りのデータ列とに2分する操作をxを変化させて反復する操作に分解できる。
従って細分割の基本はデータ列の2分操作であるが、その結果得られる2つの整列済部分データ列対が満たすべき条件は以下のように定式化される。
n個のデータからなる整列済データ列Dを(D,n)で表わし、2つのデータ列を対にしたものを{(D1,n),(D2,n)}と表記する。
整列済のデータ列の対:{(D1,n),(D2,n)}が、2つの部分データ列{(D11,n11),(D21,n21)}と、部分データ列{(D12,n12),(D22.n22)}に分割され、それらがマージ処理に使われて全体としてキー値の大小に矛盾のない出力をするためには下式が成立しなければならない。
部分データ列D11とD21の末尾のデータのキー値の小さい方
≧ 部分データ列D12とD22の頭部のデータのキー値の大きい方
n11+n21=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分した下位データ列対の頭部の位置決定)
段落0020に記したデータ列対の2分方法を以下に記述する。
◆前記データ列D1とD2内の個々のデータを指定する指標変数iとjを設け、それらへの初期値として前記xを設定(10000個ずつのデータ列対を1000個ずつのデータ列対10区画に分割する場合、個数としてのx=1000、分割位置の初期指標には1000,・・9000を設定)するステップと、
◆データ列D1の指標変数iが指すデータのキー値とデータ列D2の指標変数jが指すデータのキー値を比較する比較ステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値が等しくない場合、キー値の大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆2回目以降の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値との大小関係に変化がない場合、大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値とが等しいとき、指標変数iが指すデータと指標jが指すデータをそれぞれ分割境界とするステップと、
◆D1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値との間の大小関係が前回の大小関係から反転(2回目以降の比較では等しい場合も反転とみなす)したとき、前回の比較操作におけるD1のキー値とD2のキー値のうちの大きい方と、今回の比較操作におけるD1のキー値とD2のキー値の内の大きい方とを比較して、小さい方のキー値をもつデータを分割境界とすると共に、当該データの当初の比較相手を他方の境界とするステップ
とを実行する。なおこの処理は2分した後半のデータ列対{(D12,n12),(D22,n22)}の頭部の決定、換言すれば正順併合の開始点の決定に使われる。
(2分した上位データ列対の尾部の位置決定)
段落0020に記したように2分する方法を以下に記述する。
◆前記データ列D1とD2の個々のデータを指定する指標変数iとjとに境界の指標値の初期値として前記x−1を設定(10000個ずつのデータ列対を1000個ずつのデータ列対10区画に分割する場合、個数としてのxには1000、分割位置の初期指標には999,1999,・・8999を設定する)するステップと、
◆データ列D1の指標変数iが指すデータのキー値とデータ列D2の指標変数jが指すデータのキー値を比較する比較ステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値が等しくない場合、キー値の大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆2回目以降の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値との大小関係に変化がない場合、大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値とが等しいとき、指標変数iが指すデータと指標jが指すデータをそれぞれ分割境界とするステップと、
◆D1の指標変数iが指すデータのキー値と領域D2の指標変数jが指すデータのキー値との間の大小関係が前回の大小関係から逆転(2回目以降の比較では等しい場合も反転とみなす)したとき、前回の比較操作におけるD1のキー値とD2のキー値のうちの小さい方と、今回の比較操作におけるD1のキー値とD2のキー値の内の小さい方とを比較して、大きい方のキー値をもつデータを分割境界とすると共に、当該データの当初の比較相手を他方の境界とするステップ
とを実行する。なおこの処理は2分した前半のデータ列対{(D11,n11),(D21,n21)}の尾部の決定、換言すれば逆順併合の開始点の決定に用いる。
この発明は、マージソートの入力となる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、Video−CDを含む)、DVD(DVD−Video、DVD−ROM、DVD−RAMを含む)、ROMカートリッジ、バッテリバックアップ付きのRAMメモリカートリッジ、フラッシュメモリカートリッジ、不揮発性RAMカートリッジ等を含む。
また、電話回線等の有線通信媒体、マイクロ波回線等の無線通信媒体等の通信媒体を含む。インターネットもここでいう通信媒体に含まれる。
媒体とは、何等かの物理的手段により情報(主にデジタルデータ、プログラム)が記録されているものであって、コンピュータ、専用プロセッサ等の処理装置に所定の機能を行わせることができるものである。要するに、何等かの手段でもってコンピュータにプログラムをダウンロードし、所定の機能を実行させるものであればよい。
発明を実施するための最良の形態
発明の実施の形態1.
発明の実施の形態に係る装置/方法について図面を参照して説明する。
図1は本装置の概略構成を示すものである。1は複数のプロセッサを含み、複数のタスクを同時並行的に実行可能なマージ処理用並列プロセッサである。2は2組の整列済データ列の対を所定数の部分データ列対に分割して管理用プロセッサ4に返す領域分割用並列プロセッサである。3は指定された領域に存在する未整列のデータ列をソートするソート処理用並列プロセッサである。また4は全体の制御を担当する管理プロセッサで、ジョブ開始に際して外部から受ける入出力データの場所やデータ数などの情報 6を受けるほか、前記並列プロセッサ群に行わせるタスクに必要な情報の編集やタスクの起動、タスク終了報告の受け付けなどの処理を担当する。5は整列対象のデータを含むデータ記憶域である。
1と3は実装によっては同じ並列プロセッサを用いることもできるし、2のデータ列対分割用並列プロセッサについても同様である。
従来技術では一つのマージ処理用としてしか扱われない2つの整列済データ列の対を複数の部分データ列の対に分割することにより並列度を向上させる。後述の図3の例では、マージの入力となるデータ列D21とD22の対を2分割することにより2組の入力データ列対を得て、それぞれを正順マージと逆順マージを行うことによりプロセッサP1〜P4に同時に処理をさせることができ、データ列D31、D32の対を4分割することにより4組の入力データ列対を得て、それぞれを正順マージと逆順マージを行うことによりプロセッサP1〜P8に同時に処理をさせることができる。詳しくは後述する。
図2の概略フローチャートで示す並列2分木マージソート法では、整列の対象であるデータ列をp=2qの関係をもつp組の未整列のデータ列に分割し、それぞれを独立に、例えばクイックソート法により整列させる。
S1〜S3は入力データ列を複数のデータ列に分割しp個のプロセッサに同時並行的にソート処理を行わせるための手順である。その後、以下のようにq段のマージソートを繰り返し、最終的に全体として整列された1組のデータ列を得る。
S1:整列処理の対象である未整列のデータ列をp組の未整列データ列に分割する。ここで、p=2qで、動員可能なプロセッサの数に相当し、qはマージの段数を表す数である。短い処理時間を望む場合はpを大きくするが、log2pの関係でqも増加する。
また説明の便宜上用いるマージ段を表す変数aを0に初期化する。
S2:p個のプロセッサを分割されたp区画に割り当てる。
S3:それぞれ独立にソートする。
S4:マージ操作の入力となる整列済部分データ列の対を分割する。
(1)a=a+1
(2)2q−a+1組の整列済部分データ列を2つずつ組み合わせた2q−a組の入力データ列対を作る。
各入力データ列対のそれぞれを2a−1組の細分化されたデータ列対に分割する。データ列対の分割の仕方については後述する。
S5:(2q−a)×(2a−1)=2q−1組の細分されたデータ列対のそれぞれに正順併合と逆順併合用のプロセッサを割り当てる。
S6:各組についてそれぞれ2つのプロセッサを用いて正順併合と逆順併合を同時に行い2q−a組の整列された部分データ列を得る。
S7:次に、a≠qならaに1を加え、S4〜S7の処理を繰り返す。
S8:以上の手順により、最終的に全体として整列された1組のデータ列を得ることができる。
図2の方法は、1段目のマージでは分割しないが、2段目において2分割し、3段目において4分割し、4段目において8分割し、・・・、q段目において領域を2q−1分割し、それぞれの領域に正順併合と逆順併合を適用する。図2の整列済データ列分割法を適用した並列2分木マージソート法では常にp並列の併合操作を行うことができる。
図3を参照してプロセッサの数が8の場合における並列2分木マージソート法の処理について説明する。図中、丸はプロセッサを示し、四角はデータ列あるいはデータ列(D)が記憶される領域を示す。丸の中の記号はプロセッサが行う処理の内容を示し、Sは整列(ソート)処理、Mは併合(マージ)処理、Vは転送処理を意味する。
入力領域に置かれたデータは8組の未整列データ列に分割する。8つのプロセッサP1〜P8によりこれら部分データ列について同時並行的にソート処理を行う。これらの処理結果は領域D11〜D18に置かれる。
次に、第1段目のマージソートを行う。プロセッサP1、P2によりデータ列D11とD12が併合されてD21に置かれ、プロセッサP3、P4によりデータ列D13とD14が併合されてD22に置かれ、プロセッサP5、P6によりデータ列D15とD16が併合されてD23に置かれ、プロセッサP7、P8によりデータ列D17とD18が併合されてD24に置かれる。
なお第1段目では正順併合と逆順併合が同時に行われるので、分割を行わなくても8台のプロセッサが使用される(プロセッサの割り当ては便宜上のものである。以下同じ)。
次に、第2段目のマージソートを行う。全てのプロセッサを使用するためにデータ列対を2分割する。すなわち、部分データ列D21とD22の対に対しキー値の大小を考慮して2分割し、D21−1とD22−1の対とD21−2とD22−2の対を作る。データ列D23とD24の対についても同様である。
そして、プロセッサP1、P2によりデータ列D21−1とD22−1が併合されてD31の一方(キー値の大きい側)に置かれ、プロセッサP3、P4によりデータ列D21−2とD22−2が併合されてD31の他方(キー値の小さい側)に置かれる。同様に、プロセッサP5〜P8によりデータ列D23とD24が併合されてD32に置かれる。
次に、第3段目のマージソートを行う。第2段階目と同様に分割が行われる。すなわち、データ列D31とD32を対にし、キー値の大小を考慮して4分割し、D31−1とD32−1、D31−2とD32−2、D32−3とD32−3、D31−4とD32−4の各部分データ列対を作る。プロセッサP1、P2によりデータ列D31−1とD32−1が併合されてD4内の所定の位置に置かれ、プロセッサP3、P4によりデータ列D31−2とD32−2が併合されて領域D4内の所定の位置に置かれ、プロセッサP5、P6によりデータ列D31−3とD32−3が併合されて領域D4内の所定の位置に置かれ、そして、プロセッサP7、P8によりデータ列D31−4とD32−4が併合されて領域D4内の所定の位置に置かれる。これでマージソートが完了する。得られた結果D4は必要なら8台のプロセッサにより出力領域に転送される。
図3の処理の各段階において8つのプロセッサの全てが使用される。
図4〜図6を参照して図3の処理を模式的に説明する。
d10〜d13、d20〜d23の8つの部分データ列(各ブロックのデータ数=380個)の合計3040組のデータをソートすることを考える。
(1)d10〜d23のそれぞれを8台のプロセッサを使いソートする。ソートされた状態は図4の中段のようにキー値が降順に並べられたものになる。図中、三角形は各ブロックのおけるキー値の大きさの分布を示す。
(2)別に一組の作業領域e10〜e13、d20〜d23を設けて図4の中段のように並列マージを実行する。その結果、下段のような結果が得られる。
(3)次に2段目のマージソートを行う。(e10、e11)と(e20、e21)を組み合わせ、キー値の大小を考慮して2分割して2組のマージ入力用データ列の対を作り4並列のマージ操作を実行する(図5上段)。同時に、(e12、e13)と(e22、e23)を組み合わせ、キー値の大小を考慮して2分割して2組のマージ入力用データ列対を作り4並列のマージ操作を実行する(図5下段)。結局、4並列のマージが2系統並列に実行される。
(4)次に3段目のマージソートを行う。d10〜d13とd20〜d23を組み合わせてキー値の大小を考慮して4分割して4組のマージ入力対を作り、e10〜e23へ出力する。各領域は4分割され、それぞれ正順・逆順の処理がされるので、8つの処理が並列に実行される。
図3の各段階におけるマージソート処理についてさらに詳しく説明する。図7はその説明図である。入力領域(D1,n)と(D2,n)の入力データ列の対が与えられたとする。ここで(D1,n)と(D2,n)はn個のデータからなるデータ列D1とD2を意味する。図7の各領域において左側ほどキー値が大きく、右側ほどキー値が小さくなるようにソートされている。
(段落0048) 図1に示すデータ列対分割部 2により(D1,n)と(D2,n)の整列済部分データ列対がキー値の大小を考慮して分割(図7では2分割)され、(D11、n11)と(D21、n21)の対と(D12、n12)と(D22、n22)の対とに分けられたとする。
この分割では下記の式を満足しなければならない。
D11の末尾のデータのキー値とD21の末尾のデータのキー値の小さい方
≧D12の頭部のデータのキー値とD22の頭部のデータのキー値の大きい方
n11+n21=2x、n12+n22=2(n−x)
ここで2xは、データ列対{(D11、n11),(D21、n21)}がもつデータ数である。
マージ操作の入力であるデータ列対(D11,n11)と(D21,n21)に対して、プロセッサP1で正順併合を行うとともに、プロセッサP2で逆順併合を行う。
図中の点線は併合の順序を示す。その結果を出力領域(D3,2n)の部分である(D31,n31)に順次出力する。
同様に、整列済データ列(D12,n12)と(D22,n22)の対に対して、プロセッサP3で正順併合を行うと共にプロセッサP4で逆順併合を行う。その結果を出力領域(D3.2n)の部分である(D32,n32)に順次出力する。
ここで、(D31の末尾のデータのキー値)≧(D32の頭部のデータのキー値)、
n31+n32=2nである。
以上のように入力データ列対を分割すると共に、分割されたデータ列対それぞれにプロセッサを割り当てることにより、複数のプロセッサによる同時並行処理が可能になる。なお、以上の説明はあくまで一例であり、本発明はこれに限定されない。
次に整列済データ列対への分割手順について説明する。図7の例からも明らかなように、マージソートが正しく行われるためには、(D31の末尾のデータのキー値)≧(D32の頭部のデータのキー値)でなければならない。D31はD11、D21のマージソート結果であり、D32はD12、D22のマージソート結果である。したがって、(D11またはD21に含まれるデータのキー値の最小値)≧(D12またはD22に含まれるデータのキー値の最大値)ということである。このことから本発明の領域分割の条件は次のようなものである。
前記分割条件では、予め整列された2つのデータ列の対(D1,n)と(D2,n)が、部分データ列(D11,n11)と(D21,n21)の対と、
部分データ列(D12,n12)と(D22,n22)の対に2分割されたとき、
(部分データ列D11とD21の末尾のデータのキー値の小さい方)
≧(部分データ列D12とD22の頭部のデータのキー値の大きい方)
が成立すると共に、
n11+n21=2x,n12+n22=2n−2x
が成立しなければならない。ここでxはD1とD2の頭部から数えたデータ列対のデータ数の半分の数である。
例えば、1000個の整列済データ列対に対し、x=300とx=600の2回の分割操作をすると、各データ列対の合計データ数が600,600,800の3つのデータ列対{(D11,n11),(D21,n21)}{(D12,n12),(D22,n22)}{(D13,n13),(D23,n23)}に分割される。この場合、両データ列を合わせ、先頭から600番目のデータのキー値(D11とD21の末尾のデータキー値の小さい方)と601番目のデータのキー値(D12とD22の頭部のキー値の大きい方)、1200番目のデータのキー値と1201番目のデータのキー値に前記の大小関係が満たされねばならない。
以上の条件を満たす整列済データ列対分割の手法を説明する。以下の正順併合用の分割手法または逆順併合用の分割手法、あるいは両方の手法を用いることにより、上記条件を満たすデータ列対への分割が実現できる。
整列済データ列対の分割手法の具体的な手順の説明の前に、前提となる事項について説明する。それぞれn個のデータからなる2つの整列済データ列D1とD2を仮定し、両データ列を(n/k)組のデータを含むk組のデータ列対に均等に分割する。
個々のデータ列は0からk−1のデータ列番号で指定する。また各データの位置は、データ列頭部を0としデータ毎に1ずつ増加する指標値で指定する。この位置指定法はD1、D2全体のデータ位置指定のほか、分割した各データ列内の位置指定にも用いる。また、データ列の頭部あるいは尾部という表現で始端あるいは終端のデータ位置を指定する。
前述した均等分割後のD1とD2の部分データ列中、同一データ列番号のデータ列同志を仮の併合対象データ列対とする。
すなわち、データ列番号i(i=0〜k−1)のデータ列対を対象とする正順併合の始点は、D1とD2の始端から(n/k)(i)組のデータを除いた残りのデータ列の始端、すなわち指標値が(n/k)(i)の点とする。
またデータ列番号i(i=0〜k−1)のデータ列を対象とする逆順併合の始点は、D1とD2の始端からそれぞれ(n/k)(i+1)組のデータが存在するデータ列の末尾、換言すれば指標値が(n/k)(i+1)−1の点とする。
D1とD2内のキー値の分布は互いに独立である。このため、それぞれのデータ列内で整列済であっても、仮の開始点から併合操作をしたのでは、全体としてキー値の分布に矛盾のない整列結果を得ることはできない。そこで以下の手順により前記条件を満たす開始点(分割点)を求める。
<正順併合の場合>
それぞれ整列されたn個のデータからなる2つのデータ列、D1と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−1)(n/k)のデータ列対を除いた残りのデータ列対の頭部の指標である。
図8を参照する。
S10:境界初期値(あるいは仮の境界値)として(n/k)、2(n/k)、3(n/k)、・・・(k−1)(n/k)の指標値をもつ点を選ぶ。
S11:D1とD2域の作業用指標変数iとjとに、S10で定めた境界初期値の指標値を設定する。
S12:下記の手順を大小関係が反転する迄繰り返す。ただし最初の比較を含め、キー値が等しい場合も反転とみなす。
S12a:D1(i)とD2(j)のキー値を比較する。
S12b:大小関係を判別する。
(1)最初の比較で両者が等しいならS13aに分岐する。
(2)大小関係が逆転したらS13bに分岐する。
(3)最初の比較で両者が等しくない場合、または2回目以降の比較で大小関係が反転しない場合、キー値の大きい方の指標値に1を加え、小さい方の指標値から1を引いた後、S12に分岐する(S12c)。
S13a:iとjを境界点の指標とし処理を終わる。
S13b:大小関係が変化する直前と直後の比較操作の対象データ中、大きいキー値同志を比較し、その小さい方を境界のデータとする。他方の領域の境界データには今求めたデータの当初の比較相手を選ぶ。
<逆順併合の場合>
それぞれn個のデータを収容した2つのデータ列、D1とD2とがある。段落0048の条件を満たし、かつ、両データ列のキー値の大小分布を考慮してデータ列先頭からのデータ数が2(n/k)、4(n/k)、6(n/k)、・・・2(k−1)(n/k)となるデータ列の末尾を求める。以下では図9を参照する。
S20:境界初期値(仮の境界値)として、それぞれ(n/k)−1、2(n/k)−1、3(n/k)−1、・・・(k−1)(n/k)−1の指標値をもつ点を選ぶ。
S21:D1とD2域の作業用指標変数iとjとにS20で定めた境界初期値の指標値を設定する。
S22:下記の手順を大小関係が反転する迄繰り返す。ただし最初の比較を含め、キー値が等しい場合も反転とみなす。
S22a:D1(i)とD2(j)のキー値を比較する。
S22b:大小関係を判別する。
(1)最初の比較で両者が等しいならS23aに分岐する。
(2)大小関係が反転したらS23bに分岐する。
(3)最初の比較で両者が等しくない場合、または2回目以降の比較で大小関係が反転しない場合、キー値の大きい方の指標値に1を加え、小さい方の指標値から1を引いてS22に分岐する。
S23a:iとjを境界点の指標とし処理を終わる。
S23b:大小関係が変化する直前と直後の比較操作の対象データ中、小さいキー値同志を比較し、その大きい方を境界のデータとする。また、他方の領域の境界のデータには上で求めたデータの当初の比較相手を選ぶ。
上記手順によるデータ列対の分割例について説明する。
図10は降順に整列された、それぞれ10個の数値を含む下記の2つのデータ列を示す。図10(a)は正順併合の始点の決定手順の説明図、図10(b)は逆順併合の始点の決定手順の説明図、図10(c)は領域の分割結果を示す。
D1:(1948,1868,1862,1148,740,620,588,256,112,100)
D2:(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+1=6とする。
(3)D1(i=4)=740とD2(j=6)=1182を比較する。1182が大きいので、i=i−1=3,j=j+1=7とする。
(4)D1(i=3)=1148とD2(j=7)=432を比較する。1148が大きいので、ここで大小関係の反転を認識する。
(1)反転前後の比較で値の大きい1148と1182を比較し、その小さい方である1148の点を一方の境界とする。他方の境界は1148の当初の比較相手である432を得る。なお、一方の境界が判明すれば、次式(1)を用い2×5−3=7として他方の境界指標値を求めることもできる。
他方の開始点の指標値 = 仮併合開始点の指標×2 − 既知の開始点の指標
<逆順併合の始点の決定>
(1)データ列頭部から5組のデータがある点が仮の分割点となる。作業用指標i,jにこの値を設定する。i=j=4とする。
(2)D1(i=4)=740とD2(j=4)=1544とを比較すると、1544が大きいので、i=i−1=3,j=j+1=5とする。
(3)D1(i=3)=1148とD2(j=5)=1446とを比較すると、1446が大きいのでi=i−1=2,j=j+1=6とする。
(4)D1(i=2)=1862とD2(j=6)=1182とを比較すると、1862が大きいので大小関係が反転したことになる。
(5)反転前後の比較で値の小さい1148と1182を比較し、大きい方の1182を一方の境界とする。他方の境界は1182の当初の比較相手のデータ1862を得る。段落0059の式を用い、2×4−6=2として他方の境界の指標値を求めることもできる。
他の例を図11(a)(b)に示す。図11(a)は、n=12,k=4,n/k=3の場合である。図11(b)は、n=10,k=5,n/k=2の場合である。この例のように、分割後の部分データ列により併合する場合の出力データがD1またはD2の一方にのみ存在する場合(両方のデータ列にまたがっていない場合)であっても、前記条件を満たすことがわかる。
本発明の実施の形態に係る装置/方法において、分割する区画の数は使用可能な処理装置の数に応じて任意に決めることができる。
本発明に係る装置/方法において、マージソートの入力となる整列済部分データ列対を複数のデータ列対に分割する時間の全時間に占める割合を小さくするため、データ数が大きいほど効果も大きい。なお、複数のデータ列対に分割する処理のうち、実質的な併合開始点を決定する部分をマージソート作業を割り当てられたプロセッサ自身が実行すれば、より充実した並列処理が可能となり全処理時間に占める領域対分割にかかる時間の割合を削減できる。
(1)効果の大きい場合
データ列D1とD2のキー値の分布がほぼ同じ場合は短時間に大小関係が反転する。このためマージ入力となるデータ境界の決定に多くの時間を要しない。
(2)分割に時間のかかる場合
下記のケースが考えられる。
(a)分割対の確定に時間のかかる場合
k区画に分割する場合で対象となるデータ列対の区画番号がk/2に近い場合で、D1またはD2の頭部や尾部、換言すればデータ列の端部近辺になってようやく大小関係が反転する場合、大小関係の反転までに時間がかかる。キーの分布がD1とD2とで偏りがある場合に発生するが、このようなケースが頻発することは少ないと考える。
(b)キー値の価域に重複がない場合と大小関係が反転しない場合
大小関係の反転を求めて比較を続け、領域の頭部または端部に至っても反転しない場合である。このときは次のように扱うことができる。すなわち、頭部に達しても反転しない場合は頭部の外側に無限大のキーを仮定して強制的に反転させ、尾部に至っても反転しない場合は尾部の外に無限小のキーを仮定して反転させる。
なお、上記例ではデータ列D1とD2のデータ数は同数を仮定していた。本発明はこれに限定されない。整列タスクや併合タスクにおいてデータ数を指定しさえすればD1とD2のデータの数が異なる場合にも適用できる。
本発明は汎用的な技術であり、主記憶を共有する汎用的な並列プロセッサ方式の電子計算機に特に適合性が高い。しかし整列対象のデータ群が共通にアクセスできる環境にあればシステムの構成や処理形態を問わず適用できると考えられる。本発明は、並列プロセッサ方式の電子計算機のソフトウェア(OS)に組み込まれるプログラムのひとつとして実現されると考えられる。
発明の実施の形態2.
発明の実施の形態1の装置/方法は、図2に示すように正順併合と逆順併合を同時に用いるものであった。この発明は正順併合と逆順併合のいずれか一方しか用いない場合にも適用できる。図12は並列2分木マージソート法に適用した場合のフローチャートである。この場合は初段のマージから2分割するので常にp個のプロセッサが動作する。マージ処理を行う並列プロセッサも正順併合か逆順併合のいずれかの機能を装備するだけでよいので実現は簡単になる。
実施形態2の処理内容は発明の実施の形態1の場合と同様であるので、その説明を省略する。なお、図12が図2と異なる部分はS4bとS5bとS6bである。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
また、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアによって実現される場合も包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。
【図面の簡単な説明】
図1は、発明の実施の形態に係る並列マージソート処理装置の概要を示す図である。
図2は、発明の実施の形態1に係る処理フローチャートである。
図3は、発明の実施の形態に係る処理全体の説明図である。
図4は、発明の実施の形態に係る処理の説明図である。
図5は、発明の実施の形態に係る処理の説明図である。
図6は、発明の実施の形態に係る処理の説明図である。
図7は、発明の実施の形態に係る処理の一部の説明図である。
図8は、発明の実施の形態に係る領域分割のフローチャートである(正順併合)。
図9は、発明の実施の形態に係る領域分割のフローチャートである(逆順併合)。
図10は、発明の実施の形態に係る領域分割の説明図である。
図11は、発明の実施の形態に係る領域分割の例を示す図である。
図12は、発明の実施の形態2に係る処理フローチャートである。
図13は、従来の並列マージソート処理のフローチャートである。
図14は、従来の並列マージソート処理の説明図である。
Claims (11)
- 複数のプロセッサを含み、2つの入力データ列に対してマージソート処理を行うマージソート用並列プロセッサと、マージソート処理の入力となる2つの整列済データ列対(つい)を指定された組数の部分データ列対に細分割するデータ列対分割用並列プロセッサのほか、全体を制御する管理用プロセッサを備え、前記管理用プロセッサは前記分割用並列プロセッサ群から受けた複数の部分データ列対を前記マージソート用並列プロセッサにそれぞれ割り当て、並列にマージ処理を行わせることを特徴とする並列マージソート処理装置。
- 部分データ列の対を割り当てられた前記マージソート用並列プロセッサはそれぞれ独立にマージ処理を行いその結果を予め指示された出力域に出力する。これらの出力域の全体が最終マージ結果となるか、あるいは中間マージ結果として次段の並列マージに使われるように出力されることを特徴とする請求項1記載の並列マージソート処理装置。
- 前記部分データ列対それぞれに対して2つのプロセッサが割り当てられ、第1のプロセッサは正順併合(前記部分データ列対のキー値の大きい側の端から小さい方に向かってマージ処理を行い、前記出力領域のキー値の大きい側の端から小さい方に向かって順に出力を書き込む)を行い、第2のプロセッサは逆順併合(前記部分データ列対のキー値の小さい側の端から大きい方に向かってマージ処理を行い、前記出力領域のキー値の小さい側の端から大きい方に向かって順に出力を書き込む)を行うことを特徴とする請求項2記載の並列マージソート処理装置。
- 前記分割条件として、下記の項目を満たすことを特徴とする請求項1記載の並列マージソート処理装置。
◆以下ではn個のデータからなる整列済データ列Dを(D,n)で表し、2つのデータ列を対にしたものを{(D1,n),(D2,n)}と表記する。
◆整列済データ列対:{(D1,n),(D2,n)}が、部分データ列対:{(D11,n11),(D21,n21)}と{(D12,n12),(D22,n22)}に2分割されたとき、(部分データ列D11とD21の末尾のデータのキー値の小さい方)
≧(部分データ列D12とD22の頭部のデータのキー値の大きい方)
が成立すると共に、
n11+n21=2x,n12+n22=2(n−x)
が成立する。ここでxはD1とD2の頭部から数えた領域対のデータ数の半分である。 - 並列プロセッサを用いて並列マージソート処理を行うための方法であって、入力として、未整列の1つのデータ列、または2つの整列済部分データ列、あるいは3つ以上の整列済部分データ列のいずれかとその属性情報(種別・データの所在情報や個数など)を受け入れ、
整列対象が未整列データ列の場合はそのデータ列を分割して複数の未整列部分データ列を得る第1ステップと、
前記複数の部分データ列にそれぞれプロセッサを割り当てる第2ステップと、
割り当てられたプロセッサにより前記複数の部分データ列をそれぞれ独立に任意のアルゴリズム例えばクイックソート法で整列し、整列された部分データ列を得る第3ステップと、
第3ステップまたは第7ステップで得たか初期データとして入力された、任意の2つの整列済部分データ列でマージソート用入力データ列の対をつくり、その対を所定の分割条件のもとでそれぞれ要求された組数の部分データ列の対に分割する第4ステップと、
分割された複数の部分データ列対から並列マージソート用のジョブ情報を編集する第5ステップと、
得られた並列マージソート用ジョブにマージソート用プロセッサ群を割り当てる第6ステップと、
割り当てられたプロセッサによりマージ処理を行う第7ステップと、
マージ処理された整列済部分データ列を前記整列済部分データ列として前記第4ステップ乃至前記第7ステップを繰り返すステップとを備える並列マージソート処理方法。
但し、以上は1つの未整列データ列が与えられる場合に適用されるもので、2つ以上の整列済データ列が与えられる場合は第1ステップから第3ステップ迄は不要である。
また第4ステップ乃至前記第7ステップの繰り返しはマージ処理された整列済部分データ列が1つのデータ列になった段階で終る。特に2つの整列済データ列が与えられる場合は第4ステップから第7ステップは1回だけ行われ繰り返しは必要としない。 - 前記第6ステップにおいて前記部分データ列の対に対して2つのプロセッサが割り当てられ、前記第7ステップにおいて第1のプロセッサは前記部分データ列のキー値の大きい側からの正順併合処理を、第2のプロセッサは同じ部分データ列のキー値の小さい側の端からの逆順併合処理を、それぞれ同時に行われるように第5ステップでジョブ制御情報を編集することを特徴とする請求項5記載の並列マージソート処理方法。
- 前記第4ステップの分割条件として下記の項目を満たす機能をもつことを特徴とする請求項5記載の並列マージソート処理方法。
データ列の対(D1,n)と(D2,n)が、部分データ列対{(D11,n11),(D21,n21)}と、部分データ列:{(D12,n12),(D22,n22)}に2分割されたとき、(部分データ列D11とD21の末尾のデータのキー値の小さい方)
≧(部分データ列D12とD22の頭部のデータのキー値の大きい方)
が成立すると共に、n11+n21=2x,n12+n22=2(n−x)が成立する。
ここでxは部分データ列対{(D11,n11),(D21,n21)}のデータ数の半分の値であり、n11=n21の場合のD11とD21のデータ数でもある。 - 前記第4ステップとして下記の機能を備えることを特徴とする請求項5記載の並列マージソート処理方法。
(1)整列済データ列の対:{(D1,n),(D2,n)}をk組の区画対に分割する操作は、両データ列のキー値の大小を考慮してD1とD2の頭部から数えたデータ数の合計が2xとなる2分割操作を、xの値を変えてk−1通り行うことと等価となる。
この場合、整列済データ列対:{(D1,n),(D2,n)}のk組の区画対への細分割問題は、前述した請求項7を満たすデータ列の2分割問題に置き換えられる。
(2)データ列中のデータ位置は指標値で指定する。この値はデータ列D1またはD2の先頭データの指標値を0とし、順次1、2、・・・と増加する番号をつける。
また、請求項7のxはデータの個数を表すものだが、xの値自体を指標値と見なすとデータ列の先頭から1,2,3と数えてx+1番目のデータを指すことになる。
さらに請求項7でn11=n21の場合、データ数を表す式n11=n21=xは先頭から数えてx番目のデータ、指標値で言えばx−1のデータ位置がD1とD2の分割境界であることを表していると解釈することもできる。
(3)領域の分割機能
◆前記データ列D1とD2内の個々のデータを指定する指標変数iとjに境界指標値の初期値として前記xを設定(例えば10000個ずつのデータ列対を1000個ずつのデータ列対10区画に分割する場合、個数としてのx=1000、分割位置の初期指標には1000,・・9000を設定)するステップと、
◆データ列D1の指標変数iが指すデータのキー値とデータ列D2の指標変数jが指すデータのキー値を比較する比較ステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値が等しくない場合、キー値の大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆2回目以降の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値との大小関係に変化がない場合、大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値とが等しいとき、指標変数iが指すデータと指標変数jが指すデータをそれぞれ分割境界とするステップと、
◆D1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値との間の大小関係が前回の大小関係から反転(2回目以降の比較では等しい場合も反転とみなす)したとき、前回の比較操作におけるD1のキー値とD2のキー値のうちの大きい方と、今回の比較操作におけるD1のキー値とD2のキー値の内の大きい方とを比較して、小さい方のキー値をもつデータを分割境界とすると共に、当該データの当初の比較相手を他方の境界とするステップ
とを備えることを特徴とする請求項5記載の並列マージソート処理方法。これは2分した下位データ列対の頭部の位置の決定に用いる。 - 前記第4ステップとして下記の機能を備えることを特徴とする請求項5記載の並列マージソート処理方法。
(1)整列済データ列の対:{(D1,n),(D2,n)}をk組の区画対に分割する操作は、両データ列のキー値の大小を考慮してD1とD2の頭部から数えたデータ数の合計が2xとなる2分割操作を、xの値を変えてk−1通り行うことと等価となる。
このように見なすと、整列済データ列の対:{(D1,n),(D2,n)}のk組の区画対への細分割問題は、前述した請求項7の条件を満たすデータ列の2分割問題に置き換えられる。
(2)データ列中のデータ位置は指標値で指定する。この値はD1またはD2の先頭データの指標値を0とし、順次1、2、・・・と増加する。
また請求項7のxはデータの個数だが、xの値自体を指標値と見なすとデータ列の先頭から1,2,3と数えてx+1番目のデータを指すことになる。
さらに請求項7でn11=n21の場合、n11=n21=xは先頭から数えてx番目のデータ、指標値で言えばx−1のデータ位置にD1とD2の分割境界があることを表している。
(3)領域の分割機能
◆前記データ列D1とD2の個々のデータを指定する指標変数iとjとに境界の指標値の初期値として前記x−1を設定(例えば10000個ずつのデータ列対を1000個ずつのデータ列対10区画に分割する場合、個数としてのxには1000、分割位置の初期指標には999,1999,・・8999を設定)するステップと、
データ列D1の指標変数iが指すデータのキー値とデータ列D2の指標変数jが指すデータのキー値を比較する比較ステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値が等しくない場合、キー値の大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆2回目以降の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値との大小関係に変化がない場合、大きい方の指標変数に1を加え、小さい方の指標変数から1を引いた後、前記比較ステップに分岐するステップと、
◆最初の比較でD1の指標変数iが指すデータのキー値とD2の指標変数jが指すデータのキー値とが等しいとき、指標変数iが指すデータと指標jが指すデータをそれぞれ分割境界とするステップと、
◆D1の指標変数iが指すデータのキー値と領域D2の指標変数jが指すデータのキー値との間の大小関係が前回の大小関係から逆転(2回目の比較以降では等しい場合も反転とみなす)したとき、前回の比較操作におけるD1のキー値とD2のキー値のうちの小さい方と、今回の比較操作におけるD1のキー値とD2のキー値の内の小さい方とを比較して、大きい方のキー値をもつデータを分割境界とすると共に、当該データの当初の比較相手を他方の境界とするステップ
とを備えることを特徴とする請求項5記載の並列マージソート処理方法。これは2分した上位データ列対の末尾の決定に用いる。 - 2組の整列済データ列の対を複数の整列済データ列対に細分割して任意の並列度のマージソート操作で整列させる並列マージソート処理方法であって、
整列された第1のデータ列及び第2のデータ列の対を用意するステップと、
要求される並列度に応じて前記第1のデータ列及び第2のデータ列の対を複数の整列済部分データ列対に細分割する分割ステップと、
細分割された整列済部分データ列の対を並列にマージするステップとを備え、細分割した整列済部分データ列の対数に関係なく全体としてキーの並びに矛盾の無いデータ列の出力が可能な並列マージソート処理方法。 - 複数のプロセッサを含む並列プロセッサを用いて並列マージソート処理を行うためのプログラムであって、
入力として、未整列の1つのデータ列、または2つの整列済部分データ列、あるいは3つ以上の整列済部分データ列のいずれかとその属性情報(種別・データの所在情報や個数など)を受け入れ、
整列対象が未整列データ列の場合はそのデータ列を分割して複数の未整列部分データ列を得る第1ステップと、
前記複数の部分データ列にそれぞれプロセッサを割り当てる第2ステップと、
割り当てられたプロセッサにより前記複数の部分データ列についてそれぞれ独立に任意のアルゴリズム、例えばクイックソート法で整列処理を行う第3ステップと、
第3ステップまたは第7ステップで得たか初期データとして入力された、任意の2つの整列済部分データ列でマージソート用の入力データ列の対をつくり、所定の分割条件のもとでそれぞれ要求された分割数の部分データ列対に細分割する第4ステップと、
分割された部分データ列対をマージソートするためのジョブ情報を編集する第5ステップと、
得られたマージソートジョブに対してプロセッサ群を割り当てる第6ステップと、
割り当てられたプロセッサにより並列にマージ処理を行う第7ステップと、
マージ処理されたデータ列を前記部分データ列として前記第4ステップ乃至前記第7ステップを繰り返すステップと、を実行させるためのプログラム。
但し、以上は1つの未整列データ列が与えられる場合に適用されるもので、2つ以上の整列済データ列が与えられる場合は第1ステップから第3ステップ迄は不要である。
また第4ステップ乃至前記第7ステップの繰り返しはマージ処理された整列済部分データ列が1つのデータ列になった段階で終る。特に2つの整列済データ列が与えられる場合は第4ステップから第7ステップは1回だけ行われ繰り返しは必要としない。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002125838 | 2002-04-26 | ||
JP2002125838 | 2002-04-26 | ||
PCT/JP2003/005319 WO2003091872A1 (fr) | 2002-04-26 | 2003-04-25 | Dispositif de tri par fusion en parallele, procede et programme y relatifs |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2003091872A1 true JPWO2003091872A1 (ja) | 2005-09-02 |
JP4171835B2 JP4171835B2 (ja) | 2008-10-29 |
Family
ID=29267579
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004501962A Expired - Fee Related JP4171835B2 (ja) | 2002-04-26 | 2003-04-25 | 並列マージソート処理装置及び方法並びにプログラム |
Country Status (4)
Country | Link |
---|---|
US (1) | US7536432B2 (ja) |
JP (1) | JP4171835B2 (ja) |
AU (1) | AU2003231521A1 (ja) |
WO (1) | WO2003091872A1 (ja) |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5304251B2 (ja) * | 2006-12-22 | 2013-10-02 | 日本電気株式会社 | 並列ソート装置、方法、およびプログラム |
US8074219B2 (en) * | 2007-06-27 | 2011-12-06 | Microsoft Corporation | Order preservation in data parallel operations |
US20090007128A1 (en) * | 2007-06-28 | 2009-01-01 | International Business Machines Corporation | method and system for orchestrating system resources with energy consumption monitoring |
US7945529B2 (en) * | 2007-12-27 | 2011-05-17 | Business Objects, S.A. | Apparatus and method for performing table comparisons |
US8676865B2 (en) * | 2008-05-20 | 2014-03-18 | International Business Machines Corporation | Adaptive lazy merging |
US8250384B2 (en) * | 2009-01-05 | 2012-08-21 | International Business Machines Corporation | Optimizer mechanism to increase battery length for mobile devices |
US20110264993A1 (en) * | 2010-04-23 | 2011-10-27 | Microsoft Corporation | Multi-Threaded Sort of Data Items in Spreadsheet Tables |
US8527866B2 (en) | 2010-04-30 | 2013-09-03 | Microsoft Corporation | Multi-threaded sort of data items in spreadsheet tables |
US8959522B2 (en) | 2012-01-30 | 2015-02-17 | International Business Machines Corporation | Full exploitation of parallel processors for data processing |
JP2015035006A (ja) * | 2012-04-26 | 2015-02-19 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 複数の要素の結合結果を識別する情報処理装置、プログラムおよび方法 |
US8788471B2 (en) | 2012-05-30 | 2014-07-22 | International Business Machines Corporation | Matching transactions in multi-level records |
US9092469B2 (en) | 2012-08-22 | 2015-07-28 | Empire Technology Development Llc | Partitioning sorted data sets |
US9063944B2 (en) | 2013-02-21 | 2015-06-23 | International Business Machines Corporation | Match window size for matching multi-level transactions between log files |
CN104123304B (zh) | 2013-04-28 | 2018-05-29 | 国际商业机器公司 | 数据驱动的并行排序系统和方法 |
US9418089B2 (en) * | 2013-05-13 | 2016-08-16 | Microsoft Technology Licensing, Llc | Merging of sorted lists using array pair |
US9116953B2 (en) | 2013-05-17 | 2015-08-25 | Sap Se | Calculation engine with dynamic partitioning of intermediate results |
CN103530084A (zh) * | 2013-09-26 | 2014-01-22 | 北京奇虎科技有限公司 | 一种数据并行排序方法和系统 |
RU2667385C2 (ru) | 2014-05-30 | 2018-09-19 | Хуавей Текнолоджиз Ко., Лтд. | Параллельная сортировка слиянием |
CN104320382B (zh) * | 2014-09-30 | 2018-04-20 | 华为技术有限公司 | 分布式的实时流处理装置、方法和单元 |
CN105303058B (zh) * | 2015-11-17 | 2018-09-18 | 沈阳东软医疗系统有限公司 | 一种符合事件判定方法和装置 |
US10210207B2 (en) | 2015-12-31 | 2019-02-19 | International Business Machines Corporation | Parallel execution of merge operations |
WO2019156060A1 (ja) | 2018-02-08 | 2019-08-15 | 日本電気株式会社 | 並列ユニオン制御装置、並列ユニオン制御方法、および記憶媒体 |
CN112861145B (zh) * | 2021-01-06 | 2023-12-12 | 华控清交信息科技(北京)有限公司 | 一种数据处理方法、装置和用于数据处理的装置 |
CN116991910A (zh) * | 2022-04-26 | 2023-11-03 | 华为技术有限公司 | 数据处理装置的控制方法与装置 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0797311B2 (ja) * | 1988-05-16 | 1995-10-18 | 日本電気株式会社 | データソート装置 |
US6036350A (en) * | 1995-12-20 | 2000-03-14 | Intel Corporation | Method of sorting signed numbers and solving absolute differences using packed instructions |
US5852826A (en) * | 1996-01-26 | 1998-12-22 | Sequent Computer Systems, Inc. | Parallel merge sort method and apparatus |
JP3196637B2 (ja) * | 1996-04-26 | 2001-08-06 | 三菱電機株式会社 | ソートプロセッサおよびソート処理装置 |
US5721957A (en) * | 1996-06-03 | 1998-02-24 | International Business Machines Corporation | Method and system for storing data in cache and retrieving data from cache in a selected one of multiple data formats |
US6144986A (en) * | 1997-03-27 | 2000-11-07 | Cybersales, Inc. | System for sorting in a multiprocessor environment |
US5924093A (en) * | 1997-05-29 | 1999-07-13 | Ncr Corporation | Virtual processor buffered merge sort for parallel applications |
JP2000003342A (ja) * | 1998-06-16 | 2000-01-07 | Nec Corp | ネットワークファイル分散ソート方法およびネットワークファイル分散ソートシステム |
JP3774324B2 (ja) * | 1998-08-03 | 2006-05-10 | 株式会社日立製作所 | ソート処理システムおよびソート処理の方法 |
US7047395B2 (en) * | 2001-11-13 | 2006-05-16 | Intel Corporation | Reordering serial data in a system with parallel processing flows |
-
2003
- 2003-04-25 WO PCT/JP2003/005319 patent/WO2003091872A1/ja active Application Filing
- 2003-04-25 AU AU2003231521A patent/AU2003231521A1/en not_active Abandoned
- 2003-04-25 US US10/511,683 patent/US7536432B2/en not_active Expired - Fee Related
- 2003-04-25 JP JP2004501962A patent/JP4171835B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20050144167A1 (en) | 2005-06-30 |
JP4171835B2 (ja) | 2008-10-29 |
US7536432B2 (en) | 2009-05-19 |
WO2003091872A1 (fr) | 2003-11-06 |
AU2003231521A1 (en) | 2003-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4171835B2 (ja) | 並列マージソート処理装置及び方法並びにプログラム | |
US8229968B2 (en) | Data caching for distributed execution computing | |
US4575798A (en) | External sorting using key value distribution and range formation | |
US9213782B2 (en) | Sorting multiple records of data using ranges of key values | |
Mailthody et al. | Collaborative (CPU+ GPU) algorithms for triangle counting and truss decomposition | |
CN110837584B (zh) | 一种分块并行构造后缀数组的方法及系统 | |
US8793224B2 (en) | Linear sweep filesystem checking | |
US20200090051A1 (en) | Optimization problem operation method and apparatus | |
Wang et al. | Removing sequential bottlenecks in analysis of next-generation sequencing data | |
CN112015366B (zh) | 数据排序方法、数据排序装置及数据库系统 | |
CN111028897B (zh) | 一种基于Hadoop的基因组索引构建的分布式并行计算方法 | |
CN104516939A (zh) | 一种用以建构人工智能计算机的平行硬件搜索系统 | |
JP7044118B2 (ja) | 並列ユニオン制御装置、並列ユニオン制御方法、および並列ユニオン制御用プログラム | |
JP6006740B2 (ja) | インデックス管理装置 | |
CN115809243A (zh) | 基于b树的重叠社区发现方法、装置、设备及存储介质 | |
JP3159165B2 (ja) | 故障診断における推定論理状態管理方法及びその装置並びにプログラムを記録した機械読み取り可能な記録媒体 | |
Gayathri et al. | ex-FTCD: A novel mapreduce model for distributed multi source shortest path problem | |
JP6961950B2 (ja) | 格納方法、格納装置および格納プログラム | |
CN113495901A (zh) | 一种面向可变长数据块的快速检索方法 | |
CN116821559B (zh) | 用于快速获取一组大数据集中趋势的方法、系统及终端 | |
Martínez Palau | Two-way replacement selection | |
JP7207423B2 (ja) | 作業集合選択装置、作業集合選択方法および作業集合選択プログラム | |
CN117056068B (zh) | ETL中JobEngine任务拆分方法 | |
JP2018173802A (ja) | ストレージシステム、データソート方法及びプログラム | |
CN115543979A (zh) | 重复数据的删除方法、装置、设备、存储介质和程序产品 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080226 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080421 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080603 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080612 |
|
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: 20080708 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080725 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110822 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120822 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120822 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130822 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |