JP6380952B2 - 多数の要素からなる配列をソートする装置、方法およびプログラム - Google Patents

多数の要素からなる配列をソートする装置、方法およびプログラム Download PDF

Info

Publication number
JP6380952B2
JP6380952B2 JP2014252509A JP2014252509A JP6380952B2 JP 6380952 B2 JP6380952 B2 JP 6380952B2 JP 2014252509 A JP2014252509 A JP 2014252509A JP 2014252509 A JP2014252509 A JP 2014252509A JP 6380952 B2 JP6380952 B2 JP 6380952B2
Authority
JP
Japan
Prior art keywords
elements
input
generated
sorted
array
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.)
Expired - Fee Related
Application number
JP2014252509A
Other languages
English (en)
Other versions
JP2016115092A (ja
Inventor
拓 井上
拓 井上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2014252509A priority Critical patent/JP6380952B2/ja
Priority to US14/965,190 priority patent/US10642901B2/en
Publication of JP2016115092A publication Critical patent/JP2016115092A/ja
Application granted granted Critical
Publication of JP6380952B2 publication Critical patent/JP6380952B2/ja
Priority to US16/655,288 priority patent/US11372929B2/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90348Query processing by searching ordered data, e.g. alpha-numerically ordered data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Advance Control (AREA)

Description

本発明は、多数の要素からなる配列をソートする装置、方法およびプログラムに関する。
多数のデータ(例えば、プログラミング言語におけるデータ型の1つである構造体など)からなる配列を、各データに含まれるキーの値に応じてソートする処理は多くのアプリケーションで用いられる。このようなソートを行うには、一般的に大きく分けて2つのアプローチが存在する。1つは、データを直接ソートする手法である。もう1つは、各データのキーの値と配列内でのデータの位置を表すインデックスとをデータごとに組み合わせて、その組み合わせ(ペア)をソートした結果により実際のデータを並べ替える手法である。この手法では、全てのペアを対象として連続的にソートした後、整列したインデックスをもとに、実際のデータの並べ替えが行われる。
また、マージソートを実行する技術として、例えば、特許文献1には、複数の入力ノードのそれぞれで、入力ローカルディスクに分配して格納されるソート対象データについて、内部ソートを行い、その内部ソート結果を、複数のソート列として、入力ノードと出力ノード間に接続した共用ディスクに格納し、全ての入力ノードからのマージ指示を受領した出力ノードは、ソート列を共用ディスクから読み出してマージして、入力データ全体に対する総合的なソート結果を出力ローカルディスクに出力する技術が開示されている。
特開2000−56947号公報
上述したデータを直接ソートする手法では、ソートの間、実際のデータを繰り返しメモリ内でコピーすることが必要となり、メモリコピーのオーバーヘッドが大きくなる。また、キーがメモリ内で分散しているため、キーに対する不連続メモリアクセスが生じ、1つの命令で複数のデータを処理するSIMD(Single Instruction Multiple Data)命令を用いた高速化技術が使用しづらい問題がある。また、上述したペアのソート結果によりデータを並べ替える手法では、ソートの間、実際のデータを移動する必要がなく、またキーによる単純な整数のソートになるため、SIMD命令を使用し易い。しかし、ペアをソートして最終的にデータを並べ替える工程では、データの場所に直接アクセスするランダムアクセスが並列に行われる。そのため、必要なデータがキャッシュメモリに存在しないキャッシュミスが大量に発生し、処理時間が増加することとなる。また、この工程では一度に多くのメモリアクセスが並列に行われるために、CPU(Central Processing Unit)からメモリへアクセスする際のメモリバンド幅がボトルネックとなり、SIMDの効果が期待できない。
本発明は、ソートを実行する際のメモリコピーの処理負荷を低減するとともにキャッシュミスの発生を抑制することを目的とする。
かかる目的のもと、本発明は、多数の要素からなる配列に対して、N個(Nは3以上の整数)の入力列から1個の出力列を生成するマルチウェイ・マージの処理を実行する装置であって、1つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、N個の入力列に対して、入力列の基となった要素を並べ替えることなく、マルチウェイ・マージの処理を実行する実行部と、実行部によるマルチウェイ・マージの処理により生成された出力列に応じて入力列の基となった要素を並べ替えて、要素のソート済み配列を生成する生成部とを備え、実行部にてマルチウェイ・マージの処理が実行され、生成された出力列に応じて生成部にて入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、処理単位が複数段にて順に実行され、実行部により生成された出力列が複数個であれば、生成された複数個の出力列に応じて生成部にてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が1個であれば、生成された1個の出力列に応じて生成部にて多数の要素を並べ替えて、多数の要素の全てが連続的にソートされたソート済み配列を生成することを特徴とする、装置を提供する。
ここで、複数段のうち最初の段の処理単位では、多数の要素からなる配列の中の1つの要素または要素のソート済み配列を1個の入力列の対象としたN個の入力列に対する実行部の処理を、多数の要素からなる配列の中の要素及びソート済み配列の数に応じて複数回繰り返し実行して、生成された複数個の出力列に応じて生成部にて入力列の基となった要素を並べ替えて複数個のソート済み配列を生成し、最初の段の処理単位から次段以降の各処理単位では、前段の処理単位におけるマルチウェイ・マージの処理により生成されたソート済み配列に対して、N個のソート済み配列を対象とした実行部の処理を生成されたソート済み配列の数に応じて1回または複数回実行する、ものであってよい。
また、処理単位の一連の処理において、入力列の数がN個に満たない場合、実行部はN個に満たない入力列に対してマルチウェイ・マージの処理を実行し、生成部は、N個に満たない入力列に基づき生成された出力列に応じて入力列の基となった要素を並べ替えてソート済み配列を生成する、ものであってよい。
また、インデックスとして、マルチウェイ・マージの処理の入力列に対して順番に付与される番号が使用される、ものであってよい。
さらに、この装置において、マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、キーとインデックスとの組み合わせが第1のビット数となるようにキーのビット数が決定され、要素の数が所定の閾値を超えると、組み合わせが第1のビット数よりも多い第2のビット数となるように、キーのビット数が決定される、ものであってよい。
また、この装置において、第1のビット数が32であり、第2のビット数が64、であってよい。
さらに、処理単位の一連の処理において、SIMD命令を用いてマルチウェイ・マージの処理が実行される、ものであってよい。
また、本発明は、複数の入力列から1個の出力列を生成するマルチウェイ・マージの処理を利用して、多数の要素からなる配列をマージソートする装置であって、多数の要素からなる配列を記憶する記憶部と、多数の要素からなる配列の中の1つの要素または要素のソート済み配列をマルチウェイ・マージの処理の入力列の対象とし、ソートでの比較に用いられるキーと要素を識別するインデックスとを要素ごとに組み合わせて入力列を構成し、複数の入力列に対して、入力列の基となった要素を並べ替えることなくマルチウェイ・マージの処理を実行し、生成した出力列に応じて記憶部に記憶された入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の入力列の対象となる要素のソート済み配列を生成するソート済み配列生成部とを備え、最初の段の処理として、多数の要素の全てをマルチウェイ・マージの処理の入力列の対象としてソート済み配列生成部の処理を繰り返し実行した後、最初の段から次段以降の各段の処理として、前段のマルチウェイ・マージの処理により生成された全てのソート済み配列を新たなマルチウェイ・マージの処理の入力列の対象としてソート済み配列生成部の処理を繰り返す処理を実行し、最終的に多数の要素の全てが連続的にソートされたソート済み配列を生成する、装置も提供する。
さらに、本発明は、多数の要素からなる配列に対して、N個(Nは3以上の整数)の入力列から1個の出力列を生成するマルチウェイ・マージの処理を実行する方法であって、1つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、N個の入力列に対して、入力列の基となった要素を並べ替えることなく、マルチウェイ・マージの処理を実行するステップと、実行するステップによるマルチウェイ・マージの処理により生成された出力列に応じて入力列の基となった要素を並べ替えて、要素のソート済み配列を生成するステップとを含み、実行するステップにてマルチウェイ・マージの処理が実行され、生成された出力列に応じて生成するステップにて入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、処理単位が複数段にて順に実行され、実行するステップにより生成された出力列が複数個であれば、生成された複数個の出力列に応じて生成するステップにてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が1個であれば、生成された1個の出力列に応じて生成するステップにて多数の要素を並べ替えて、多数の要素の全てが連続的にソートされたソート済み配列を生成する、方法も提供する。
さらにまた、本発明は、コンピュータを制御して上述した装置の各機能を実現するプログラム、またはコンピュータに上記の方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
本発明によれば、ソートを実行する際のメモリコピーの処理負荷を低減するとともにキャッシュミスの発生を抑制することができる。
本実施の形態に係るマージソート処理装置の機能構成例を示したブロック図である。 マージソートの処理手順の一例を示すフローチャートである。 (a)、(b)は、本実施の形態に係る2ウェイ・マージの一例を説明するための図である。 本実施の形態に係るマルチウェイ・マージの一例を説明するための図である。 入力列に基づいてインデックスを決める処理の一例を説明するため図である。 本実施の形態に係るマージソート処理装置を構成するのに好適なハードウェア構成例を示す図である。
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。本実施の形態に係るマージソート処理装置10は、多数の要素(例えば、構造体など)からなる配列に対してマージソートの処理を行うものである。マージソートの処理において、マージソート処理装置10は、1個の構造体またはソート済みの構造体の配列を入力列の対象とし、N個の入力列についてマージを行って1個の出力列を生成するマルチウェイ・マージを実行する。ただし、後述するように、マルチウェイ・マージは2ウェイ・マージを繰り返し行うことによって実行され、Nは3以上の整数であるものとする。
また、以下では、ソートの対象となるデータの一例として構造体を用いることとし、多数の構造体からなる配列に対して、構造体を並び替えてソートが行われるものとする。ただし、本実施の形態において、ソート対象のデータは構造体に限られるものではない。
<マージソート処理装置の機能構成>
まず、本実施の形態に係るマージソート処理装置10の機能構成について説明する。図1は、本実施の形態に係るマージソート処理装置10の機能構成例を示したブロック図である。図示するように、マージソート処理装置10は、多数の構造体からなる配列を記憶する記憶部11と、マルチウェイ・マージの入力列を構成する入力列構成部12とを備える。また、マージソート処理装置10は、入力列構成部12により構成された入力列に対してマージ処理を実行して出力列を生成するマージ実行部13と、マージ実行部13により生成された出力列をもとに記憶部11内の構造体を並べ替える並べ替え実行部14とを備える。さらに、マージソート処理装置10は、マルチウェイ・マージを実行して構造体を並べ替える一連の処理を制御するマージ制御部15を備える。
本実施の形態では、実行部の一例として、入力列構成部12、マージ実行部13が用いられる。また、生成部の一例として、並べ替え実行部14が用いられる。さらに、ソート済み配列生成部の一例として、入力列構成部12、マージ実行部13、並べ替え実行部14が用いられる。そして、記憶部の一例として、記憶部11が用いられる。
記憶部11は、多数の構造体からなる配列を記憶する。この多数の構造体からなる配列に対して、ソートの処理が行われる。
入力列構成部12は、記憶部11に記憶された構造体からキーを取り出し、1つの構造体または構造体のソート済み配列において、キーとインデックスとを組み合わせて、マルチウェイ・マージの入力列を構成する。キーとは、構造体の一部のデータであり、ソートで順番に並べるための比較に用いられる値である。即ち、各構造体のキーの値が昇順や降順に並ぶように、ソートが行われる。キーは、例えば、32ビットや64ビットの整数で表される。
また、インデックスとは、キーに付随して用いられるデータであり、構造体を識別するための値である。インデックスにより、多数の構造体の中から一意の構造体が決定される。このインデックスは、少なくとも、記憶部11に記憶されたソート対象の全構造体と同数のインデックスが用意される。即ち、インデックスのビット数は、全構造体を識別可能となるビット数分用意される。例えば、インデックスが32ビットの整数の場合、2の32乗個の構造体が識別可能となる。以下では、1つの構造体におけるキー及びインデックスの組合せを、ペアと称することとする。ペアは、キーのビット列とインデックスのビット列とを組み合わせたビット列であり、整数で表される。
マージ実行部13は、入力列構成部12により構成されたN個の入力列に対して、キーの値をもとにマルチウェイ・マージの処理を行う。ここで、マージ実行部13は、マルチウェイ・マージの処理として、N個の入力列をマージし、N個の入力列がソートされて並んだ1個の出力列を生成する。マルチウェイ・マージの入力列の数(=N)は、例えば8や16であり、マージソート処理装置10の処理性能やソート対象のデータ量などに応じて、予め定められている。また、マージ実行部13は、キー及びインデックスの組み合わせであるペアを並べ替える処理を行うのであって、実際に記憶部11内の構造体を並べ替えるわけではない。さらに、マージ実行部13は、SIMD命令を用いることにより、マージ処理を並列に実行しても良い。
並べ替え実行部14は、マルチウェイ・マージにおいてマージ実行部13によって生成された出力列に応じて、実際に記憶部11内の構造体を並べ替える。ここで、並べ替え実行部14は、出力列に含まれるインデックスに対応する構造体を記憶部11内で特定し、出力列にてインデックスが配列されている順番に従って、実際に記憶部11内の構造体を並べ替える。
マージ制御部15は、マルチウェイ・マージを実行して構造体を並べ替える一連の処理を制御する。即ち、マージ制御部15は、入力列構成部12、マージ実行部13、並べ替え実行部14による処理を制御する。具体的には、マージ制御部15は、入力列構成部12、マージ実行部13、並べ替え実行部14による一連の処理を、複数段にて順番に実行するように制御する。また、各段においては、入力列構成部12、マージ実行部13、並べ替え実行部14による一連の処理が1回または複数回繰り返し実行される。本実施の形態では、各段で行われる一連の処理を、処理単位の一例とする。
例えば、マージソート処理装置10の処理が開始される最初の段では、マージ制御部15は、多数の構造体に対して、N個の構造体を入力列の対象としたマルチウェイ・マージの処理を複数回繰り返し実行するように制御する。そして、マージ実行部13により生成された出力列に応じて、並べ替え実行部14は、出力列にてインデックスが配列されている順番に従って、実際に、記憶部11内の入力列の基となった構造体の並べ替えを行ってソート済み配列を生成する。ここで、マージ実行部13によるマルチウェイ・マージの処理の繰り返しにより出力列は複数個生成されているため、並べ替え実行部14は、複数個の出力列に応じて複数個のソート済み配列を生成する。そして、多数の構造体を入力列の対象とする最初の段の処理が終了すると、マージ制御部15は、次段の処理を開始するように制御する。次段の処理では、最初の段で生成されたソート済み配列を入力列の対象とするマルチウェイ・マージの処理が行われる。
そして、例えば、最初の段から次段以降では、マージ制御部15は、前段のマルチウェイ・マージにより生成されたソート済み配列に対して、N個のソート済み配列を対象としたマルチウェイ・マージの処理を複数回繰り返し実行するように制御する。また、マージ実行部13により生成された複数個の出力列に応じて、並べ替え実行部14は、記憶部11内の入力列の基となった構造体の並べ替えを行って複数個のソート済み配列を生成する。さらに、最後の段では、マージ制御部15は、前段のマルチウェイ・マージにより生成されたソート済み配列に対して、N個のソート済み配列を対象としたマルチウェイ・マージの処理を1回実行するように制御する。そして、マージ実行部13により生成された1個の出力列に応じて、並べ替え実行部14は、記憶部11内の構造体の並べ替えを行って、多数の構造体の全てが連続的にソートされたソート済み配列を生成する。
ここで、マルチウェイ・マージの入力列の数がN個に満たない場合には、マージ制御部15は、N個に満たない入力列に対してマルチウェイ・マージの処理を実行するように制御するものとする。例えば、ある段において、前段で生成されたソート済み配列の数が(10N+2)個である場合、マージ制御部15は、10N個のソート済み配列を入力列の対象として10回のマルチウェイ・マージを行うように制御する。また、2個のソート済み配列が余るため、マージ制御部15は、この2個のソート済み配列を入力列の対象として、1回のマルチウェイ・マージを行うように制御する。即ち、この段では合計で11回のマルチウェイ・マージが行われることとなる。そして、マージ実行部13は、出力列として、11個のソート済み配列を生成する。
また、前段のマルチウェイ・マージにより生成された出力列がN個以下の場合、マルチウェイ・マージの入力列の数がN個以下となる。この場合、マージ制御部15は、マルチウェイ・マージを1回行い、1個の出力列を生成するように制御する。例えば、N=8とすると、前段で生成されたソート済み配列の数が2〜8個である場合、ソート済み配列はN個以下になる。この場合、マージ制御部15は、この2〜8個のソート済み配列を入力列の対象として、1回のマルチウェイ・マージを行うように制御する。即ち、この段が最後の段となり、マージ実行部13により生成された1個の出力列に応じて、並べ替え実行部14は、多数の構造体の全てが連続的にソートされたソート済み配列を生成することとなる。
さらに、最初の段にて生成された出力列がN個以下の場合、マージ制御部15は、次段の処理にて1回のマルチウェイ・マージを行い、1個の出力列を生成するように制御する。この場合には、最初の段の次の段(2段目)が最後となる。そして、並べ替え実行部14は、2段目の処理にてマージ実行部13により生成された出力列に応じて、構造体の並べ替えを行い、多数の構造体の全てが連続的にソートされたソート済み配列を生成する。
また、本実施の形態では、記憶部11としてメインメモリが用いられる。さらに、入力列構成部12、マージ実行部13の処理は、キャッシュメモリ内で実行される。即ち、入力列構成部12は、メインメモリに記憶された構造体を読み込んで入力列を構成する。次に、マージ実行部13は、構成された入力列に対するマルチウェイ・マージの処理を、キャッシュメモリ内で行う。そして、マルチウェイ・マージの出力結果として生成された出力列をもとに、並べ替え実行部14がメインメモリ内の構造体の並び替えを行う。
図2は、マージソートの処理手順の一例を示すフローチャートである。まず、マージ制御部15は、記憶部11において、マルチウェイ・マージの対象となる構造体または構造体のソート済み配列を特定する(ステップ101)。例えば、記憶部11に記憶された構造体に対して並べ替え実行部14による並べ替えの処理が全く行われていない初期状態では、最初の段の処理として、マージ制御部15は、記憶部11内の各構造体をマルチウェイ・マージの対象として特定する。また、例えば、最初の段から次段以降の処理として、マージ制御部15は、前段で生成された記憶部11内の各ソート済み配列をマルチウェイ・マージの対象として特定する。
次に、入力列構成部12は、マージ制御部15により特定された構造体またはソート済み配列の中から、入力列の対象とするN個を選択する(ステップ102)。次に、入力列構成部12は、選択したN個の構造体またはソート済み配列について、構造体ごとにキーを取り出し、キーとインデックスとを組み合わせてペアを作成して、マルチウェイ・マージの入力列を構成する(ステップ103)。ここでは、1個の構造体またはソート済みの複数の構造体の塊が入力列の対象とされ、マルチウェイ・マージの入力列がN個作成される。
例えば、最初の段の処理として、入力列構成部12は、選択したN個の構造体のうち、1個の構造体から1個のペアを作成して1個の入力列とする。このようにして、入力列構成部12は、選択したN個の構造体からN個のペアを作成してN個の入力列を構成する。また、例えば、最初の段の次段の処理において、入力列構成部12は、ソート済みの構造体の塊として、N個の構造体が並んだソート済み配列をN個選択する。そして、入力列構成部12は、選択したN個の配列のうち1個を抽出し、「N個の構造体が並んだソート済み配列」から「N個のペアが並んだソート済み配列」を生成して1個の入力列として構成する。このようにして、入力列構成部12は、選択したN個の配列に対して、「N個のペアが並んだソート済み配列」をN個生成し、マルチウェイ・マージのN個の入力列とする。
次に、マージ実行部13は、N個の入力列に対してキーの値をもとに整数によるマージ処理を行い、1個の出力列を生成する(ステップ104)。例えば、最初の段の処理として、1個のペアで1個の入力列を構成する場合には、N個のペアがマージされて並んだ1個の出力列が生成される。また、例えば、最初の段の次段の処理として、「N個のペアが並んだソート済み配列」で1個の入力列を構成する場合には、N×N個のペアがマージされて並んだ1個の出力列が生成される。ステップ104のソートでは、SIMDを用いた並列処理が行われる。
そして、並べ替え実行部14は、マルチウェイ・マージにおいて生成された出力列に含まれるインデックスをもとに、実際に記憶部11内の構造体を並べ替える(ステップ105)。例えば、最初の段の処理として、1個の出力列にN個のペアが含まれている場合には、入力列の基となったN個の構造体を並べ替えたソート済み配列が記憶部11内に生成される。また、例えば、最初の段の次段の処理として、1個の出力列にN×N個のペアが含まれている場合には、入力列の基となったN×N個の構造体を並べ替えたソート済み配列が記憶部11内に生成される。
次に、マージ制御部15は、ステップ101にて特定したマルチウェイ・マージの対象となる全ての構造体またはソート済み配列に対して、処理が行われたか否かを判定する(ステップ106)。ここで、マージ制御部15は、特定した全ての構造体またはソート済み配列に対して、ステップ102〜105の処理が行われたか否かを判定する。ステップ106で否定の判断(No)がされた場合、即ち、マージ制御部15が特定した構造体またはソート済み配列の中でステップ102〜105の処理が行われていないものが存在する場合には、ステップ102に移行する。そして、入力列構成部12が新たにN個の構造体またはソート済み配列を選択し、その段における処理を続行する。
結果として、各段では、記憶部11内の構造体を並べ替えた複数個のソート済み配列が生成される。ただし、最後の段では、生成される出力列は1個である。また、ステップ106で肯定の判断(Yes)がされた場合、即ち、マージ制御部15が特定した構造体またはソート済み配列の全てについてステップ102〜105の処理が完了した場合には、その段の処理が終了したこととなり、ステップ107に移行する。
次に、マージ制御部15は、並べ替え実行部14により生成されたソート済み配列の合計が1個であるか否かを判定する(ステップ107)。生成されたソート済み配列の合計が1個であると判定された場合(ステップ107でYes)、即ち、ステップ105で生成されたソート済み配列が1個で、それに応じて記憶部11内の構造体の並べ替えが行われた場合には、多数の構造体の全てが連続的にソートされていることとなる。この場合には、最後の段の処理が完了し、本処理フローは終了する。一方、生成されたソート済み配列の合計が2個以上であると判定された場合(ステップ107でNo)、即ち、ステップ105で生成されたソート済み配列が2個以上ある場合、ステップ101に移行する。そして、次段の処理が続けて行われる。
また、ステップ107において、マージ制御部15は、マージ実行部13により生成された出力列の合計が1個であるか否かを判定することとしても良い。この場合、生成された出力列の合計が1個の場合、多数の構造体の全てが連続的にソートされたこととなり、最後の段の処理が完了して本処理フローは終了する。一方、生成された出力列の合計が2個以上の場合、ステップ101に移行する。
さらに、図2に示す手順では、並べ替え実行部14は1つのマルチウェイ・マージが終了するたびに出力列に応じて構造体を並べ替えることとしたが、このような構成に限られるものではない。例えば、並べ替え実行部14は、各段の複数のマルチウェイ・マージの処理が繰り返し実行された後に、生成された複数の出力列にてまとめて構造体を並べ替えることとしても良い。
<マルチウェイ・マージの説明>
次に、本実施の形態で用いられるマルチウェイ・マージの処理について詳細に説明する。マルチウェイ・マージの処理は、2ウェイ・マージの処理を繰り返し行うことによって実行される。図3(a)、(b)は、本実施の形態に係る2ウェイ・マージの一例を説明するための図である。また、図4は、本実施の形態に係るマルチウェイ・マージの一例を説明するための図である。
まず、図3(a)、(b)に示すように、2ウェイ・マージでは、2個の入力列をマージして1個の出力列が生成される。ここで、図3(a)に示すように、入力列が例えばペアA、ペアBで、各入力列に1つのペアしか含まれていない場合、ペアAとペアBとの比較によりマージが行われる。即ち、ペアA及びペアBが昇順または降順に整列されて、1個の出力列にマージされる。
一方、図3(b)に示すように、入力列が例えばペアA〜D及びペアE〜Hで、入力列に複数のペア(図3(b)に示す例では4個)が含まれている場合、入力列の先頭の比較が順に行われる。例えば、昇順に整列させる場合、まず、入力列の先頭であるペアA及びペアEの比較が行われ、値の小さいものから先に出力列に並べられる。ここで、例えばペアAの方が小さい場合、ペアAが出力列の先頭として並べられ、次に入力列の先頭となるペアB及びペアEの比較が行われる。ここで、例えばペアBの方が小さい場合、ペアBが出力列のペアAの次に並べられ、さらに、次に入力列の先頭となるペアC及びペアEの比較が行われる。このようにして順番に入力列の各ペアの比較が行われ、1個の出力列としてマージされる。
次に、図4に示すように、マルチウェイ・マージでは、複数の入力列をマージして、最終的に1個の出力列が生成される。その際、2ウェイ・マージが繰り返し実行される。図4に示す例は、マルチウェイ・マージの入力列の数が8(N=8)の場合の例である。
まず、1段階目の2ウェイ・マージにより、8個の入力列から4個の出力列が生成される。次の段階の2ウェイ・マージでは、1段階目で生成された出力列が入力列となり、4個の入力列から2個の出力列が生成される。そして、最終の2ウェイ・マージでは、2段階目で生成された出力列が入力列となり、2個の入力列から1個の出力列が生成される。このように、入力列の数が8の場合には、3(=log8)段階の2ウェイ・マージが行われて、マルチウェイ・マージの処理が実行される。
例えば、記憶部11に記憶された構造体に対して並べ替え実行部14による並べ替えの処理が全く行われていない初期状態では、入力列構成部12は、例えば予め記憶されたメモリ位置に沿った順番に従って、記憶部11から8個の構造体をシーケンシャルに読み込む。そして、入力列構成部12は、1個の構造体当たり1個のペアを生成して、8個の入力列を構成する。次に、マージ実行部13は、8個のペアに対して2ウェイ・マージを繰り返し実行し、8個のペアがソートされて並んだ1個の出力列をシーケンシャルに書き出す。そして、並べ替え実行部14は、生成された出力列に含まれるインデックスをもとに、実際に記憶部11内の8個の構造体を並べ替える。また、記憶部11内には、ソートの対象となる構造体がこの8個以外にも存在する。そのため、最初の段の処理として、同様にマルチウェイ・マージが行われ、8個の構造体を並べ替えたソート済みの配列が、記憶部11内に複数生成される。
次に、最初の段の次段の処理において、入力列構成部12は、記憶部11から8個の構造体が並んだソート済み配列を読み込む。そして、入力列構成部12は、8個の構造体が並んだソート済み配列から、8個のペアが並んだソート済み配列を生成し、1個の入力列とする。このようにして、入力列構成部12は、8個のペアが並んだソート済み配列を合計8個生成し、マルチウェイ・マージの8個の入力列とする。そして、マージ実行部13は、8個の入力列に対して2ウェイ・マージを繰り返し実行し、1個の出力列を生成する。この出力列には、8×8=64個のペアが含まれている。並べ替え実行部14は、出力列に含まれるインデックスをもとに、実際に記憶部11内の64個の構造体を並べ替える。また、ソートの対象となる構造体がこの64個以外にも存在する。そのため、最初の段の次段の処理として、同様にマルチウェイ・マージが行われ、64個の構造体を並べ替えたソート済みの配列が、記憶部11内に複数生成される。
このようにして、マージ制御部15は、前段の処理により生成された複数のソート済み配列をマルチウェイ・マージの入力列の対象として、各段における処理を行い、それぞれの段ごとに記憶部11内の構造体の並べ替えを行うように制御する。そして、ある段のマルチウェイ・マージにより生成された出力列が1個の場合、その段が最後の段となり、記憶部11内の多数の構造体の全てが連続的にソートされたソート済み配列が生成されて、マージソート処理装置10の処理が終了する。
以上説明したように、本実施の形態に係るマージソート処理装置10は、記憶部11内のソート対象の全ての構造体を連続的に整列させるまで、マルチウェイ・マージの処理を繰り返し実行する。マルチウェイ・マージの処理では、生成された1個の出力列をもとに実際に構造体を並べ替えるのであって、ソートにおいて構造体を常に移動させるわけではない。また、全てのペアをソートした後に構造体をまとめて並べ替えるものでもない。
本実施の形態では、一定の段数ごとに構造体の並べ替えやキーの抽出を行うことにより、例えば、ソートにより構造体を直接並べ替える構成と比較して、メモリコピーのオーバーヘッドが抑制されて処理負荷が軽減される。また、SIMD命令をし易くなる。さらに、一定の段数ごとに構造体の並べ替えやキーの抽出を行うことにより、例えば、全てのペアをソートした後に構造体をまとめて並べ替える構成と比較して、ランダムアクセスが回避されてキャッシュミスの発生が抑制される。また、例えば、全ての構造体をまとめて並べ替える場合よりも、使用するメモリバンド幅が削減される。
さらに、本実施の形態では、マルチウェイ・マージを用いることで、例えば、2ウェイ・マージのみを用いる構成と比較して、メインメモリにアクセスする回数が減少する。例えば、図4に示すようにN=8とすると、3段階のマージ処理をキャッシュメモリ内で行うことになる。そのため、メインメモリにアクセスする回数は、2ウェイ・マージのみを用いる場合の1/3になる。即ち、メモリバンド幅の消費量が削減され、メモリバンド幅がボトルネックになる並列ソートで性能向上が得られる。
<インデックスの他の例>
上記の例では、入力列構成部12は、構造体のキーとインデックスとを組み合わせて、マルチウェイ・マージの入力列を構成した。この場合、記憶部11に含まれる全ての構造体を識別するために、少なくとも構造体と同数のインデックスが用意される。即ち、例えば構造体の総数をM個とすると、インデックスに対して、logMビットを割り当てることとなる。インデックスに割り当てるビット数は、データサイズが大きくなり構造体の総数が増えるほど多くなる。
そこで、本実施例では、入力列構成部12は、構造体の総数に対応する値をインデックスに用いるのではなく、マルチウェイ・マージの各入力列、即ち、マルチウェイ・マージにおける1段階目のマージ処理の各入力列に対して順番に番号を付与し、付与した番号をインデックスとして使用する。この場合、1段階目のマージ処理の入力列の数(=N)だけインデックスがあれば足りるため、インデックスに対して、logNビットを割り当てれば良い。
SIMD命令では、例えば128ビットSIMD命令などのように、1つの命令当たりに処理可能なビット数が決まっている。例えば、構造体の総数に基づくインデックスのビット数が32ビットであり、キーのビット数が32ビットであれば、ペアのビット数は64ビットになる。そのため、SIMD命令により2並列処理が行われることとなる。一方、本実施例のように、入力列に基づいてインデックスのビット数を決める場合、N=8であれば、1段階目のマージ処理の各入力列に0〜7の番号が振られ、インデックスには3(log8)ビットが割り当てられることとなる。ここで、キーの下位のビット部分を削って29ビットとすると、ペアのビット数は32ビットになる。即ち、SIMD命令により4並列処理が行われることとなり、並列処理数が2から4に向上する。
図5は、入力列に基づいてインデックスを決める処理の一例を説明するため図である。図5に示す例では、入力列の数をN=8とし、マルチウェイ・マージにおける1段階目のマージ処理の各入力列に0〜7の番号を付与するものとする。ここで、1つの入力列に複数のペアが含まれる場合には、入力列内に含まれる各ペアに同じ番号が付与される。また、マルチウェイ・マージによる出力列をもとに構造体の並び替えを行う際には、1段階目の各入力列の先頭にポインタをセットする。そして、出力列のインデックスに応じて入力列のペアを出力するとともに、入力列において先頭を表すポインタを隣のペアに一つずつ進めていく。
例えば、図5に示す最終の出力列において、最上位の3つのインデックスは、順番に「0、3、3」である。また、各入力列の先頭にはポインタがセットされている。この場合、出力列の1番目の「0」は、最初の段階で番号が「0」の入力列に該当するため、番号「0」の入力列でポインタがセットされている先頭の「ペアI」を出力し、ポインタを隣の「ペアJ」に進める。次に、出力列の2番目の「3」は、最初の段階で番号が「3」の入力列に該当するため、番号「3」の入力列でポインタがセットされている先頭の「ペアK」を出力し、ポインタを隣の「ペアL」に進める。次に、出力列の3番目の「3」は、最初の段階で番号が「3」の入力列に該当するため、番号「3」の入力列でポインタがセットされている先頭の「ペアL」を出力し、ポインタを隣の「ペアM」に進める。このようにして、個々の構造体に対応するインデックスを用いなくても、出力列のペアに対応する入力列のペアが特定されるため、記憶部11内の構造体が特定されて構造体の並べ替えが行われる。
このように、本実施例では、インデックスとして構造体の総数に対応する値を用いるのではなく、マルチウェイ・マージの入力列の数に対応する値を用いる。そのため、データサイズが大きくなり構造体の総数が増えたような場合であっても、入力列の数を変えない限りインデックスのビット数は変わらない。また、インデックスのビット数が少なくなることに伴いペアのビット数を減らせば、SIMD命令での並列度が向上する。
ここで、例えば、キーのビット数が32ビットで、ペアのビット数を32ビットにするためにキーの下位のビット部分を削って、キーを29ビットにした場合について考える。この場合、29ビットでは同じ値のキーと判定されたとしても、32ビットでみると異なる値のキーである場合が存在する。即ち、キーの下位部分を削ったことにより、本来は異なる値であるキー同士が同じ値であると判定される場合がある。このような判定が行われると、マージ処理にて誤った並べ替えが行われることが考えられる。
そのため、実際のキーのビット数を削ってマージ処理を行った場合には、下位部分を削っていない本来のキーの値を用いて、マージ結果が正しいか否かを確認する処理が行われる。例えば、並べ替え実行部14は、マルチウェイ・マージで生成された出力列をもとに構造体を並べ替える前に、出力列に含まれるペアの本来のキーの値を比較して、出力列でのマージ結果が正しいか否かを確認する処理を行う。また、例えば、並べ替え実行部14は、各段の処理を実行して、最後の段の処理にて多数の構造体の全てが連続的にソートされたソート済み配列を生成した後に、本来のキーの値を比較して、並べ替えたソート結果が正しいか否かを確認することとしても良い。
また、マージ制御部15は、入力列に含まれる構造体の数に応じてキーのビット数を変えることとしても良い。具体的には、入力列の構造体の数が所定の閾値に達するまでは、マージ制御部15は、例えば、ペアのビット数が32ビットの整数となるようにキーのビット数を決定する。一方、マルチウェイ・マージの処理が何段か行われて、入力列の構造体の数が所定の閾値を超えた場合には、マージ制御部15は、例えば、ペアのビット数が64ビットの整数となるようにキーのビット数を決定する。本実施の形態では、ペアとインデックスとの組み合わせの第1のビット数の一例を32ビットとし、第2のビット数の一例を64ビットとする。
マルチウェイ・マージの処理を何段か実行する処理において、入力列に含まれる構造体の数が少ない初期段階では、キーの下位のビット部分をインデックスに割り当ててキーのビット数を削っても、異なるキー同士が同じ値であると判定される可能性が低い。そのため、入力列の構造体の数が所定の閾値以下の場合には、ペアのビット数を、例えば32ビットに抑えることで、128ビットSIMD命令にて4並列処理が可能になる。
一方、マルチウェイ・マージの処理が何段か行われて、入力列に含まれる構造体の数が増えてくると、キーの上位側のビット数のみでは、異なるキー同士が同じ値であると判定される可能性が高くなる。そのため、入力列の構造体の数が所定の閾値より多い場合には、マージ制御部15は、ペアのビット数を32ビットから64ビットにしてキーのビット数を増やす。このようにすることで、128ビットSIMD命令での並列処理数は4から2に減るが、キーのビット数を増やさない場合と比較して、マージ処理での誤った並べ替えが抑制される。
<マージソート処理装置のハードウェア構成例>
最後に、マージソート処理装置10のハードウェア構成について説明する。図6は、本実施の形態に係るマージソート処理装置10を構成するのに好適なハードウェア構成例を示す図である。ここでは、コンピュータに適用する場合について説明する。図6に示すコンピュータは、演算手段であるCPU10aと、主記憶手段であるメモリ10cを備える。また、外部デバイスとして、磁気ディスク装置(HDD:Hard Disk Drive)10g、ネットワーク・インターフェイス10f、ディスプレイ装置を含む表示機構10d、音声機構10h、キーボードやマウス等の入力デバイス10i等を備える。
図6に示す構成例では、メモリ10cおよび表示機構10dは、システム・コントローラ10bを介してCPU10aに接続されている。また、ネットワーク・インターフェイス10f、磁気ディスク装置10g、音声機構10hおよび入力デバイス10iは、I/Oコントローラ10eを介してシステム・コントローラ10bと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。
また、図6において、磁気ディスク装置10gにはOSのプログラムやアプリケーション・プログラムが格納されている。そして、これらのプログラムがメモリ10cに読み込まれてCPU10aに実行されることにより、本実施の形態に係るマージソート処理装置10における入力列構成部12、マージ実行部13、並べ替え実行部14、マージ制御部15の機能が実現される。また、例えば、メモリ10c等の記憶手段により、記憶部11が実現される。
なお、図6は、本実施の形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎない。本実施の形態は、マルチウェイ・マージを用いて多数のデータからなる配列に対してマージソートの処理を行う機能を有する装置に広く適用できるものであり、図示の構成においてのみ本実施の形態が実現されるのではない。
また、本実施の形態では、SIMD命令を用いてマージ処理を実行することとしたが、このような構成に限られるものではない。SIMD命令を用いることにより並列処理が可能になり、効率良くマージ処理が実行される。一方、本実施の形態においてSIMD命令を用いない場合、SIMD命令の並列処理による効果は得られないが、例えばメモリコピーのオーバーヘッドやキャッシュミスの発生は抑制される。
さらに、本実施の形態において、マージソート処理装置10は、マージソート処理装置10の処理が開始される最初の段において、多数の構造体に対して、N個の構造体を入力列の対象としたマルチウェイ・マージの処理を実行することとしたが、このような構成に限られるものではない。例えば、マージソート処理装置10は、本実施の形態に係るマージソートとは別のアルゴリズムを用いて多数の構造体からなる配列の中の構造体をソートする処理を行った後、本実施の形態に係るマージソートの最初の段の処理を行うこととしても良い。この場合、本実施の形態に係る最初の段のマルチウェイ・マージの処理では、1つの構造体、または複数の構造体をソートしたソート済み配列を、1個の入力列の対象として、N個の入力列から1個の出力列を生成する処理が行われることとなる。また、マージソート処理装置10は、最初の段において、多数の構造体からなる配列の中の1つの構造体及びソート済み配列の数に応じて、マルチウェイ・マージの処理を複数回繰り返し実行することとなる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
10…マージソート処理装置、11…記憶部、12…入力列構成部、13…マージ実行部、14…並べ替え実行部、15…マージ制御部

Claims (10)

  1. 多数の要素からなる配列に対して、N個(Nは3以上の整数)の入力列から1個の出力列を生成するマルチウェイ・マージの処理を実行する装置であって、
    1つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、N個の入力列に対して、当該入力列の基となった要素を並べ替えることなく、前記マルチウェイ・マージの処理を実行する実行部と、
    前記実行部による前記マルチウェイ・マージの処理により生成された出力列に応じて前記入力列の基となった要素を並べ替えて、要素のソート済み配列を生成する生成部とを備え、
    前記実行部にてマルチウェイ・マージの処理が実行され、生成された出力列に応じて前記生成部にて前記入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、当該処理単位が複数段にて順に実行され、
    前記実行部により生成された出力列が複数個であれば、生成された当該複数個の出力列に応じて前記生成部にてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が1個であれば、生成された当該1個の出力列に応じて当該生成部にて前記多数の要素を並べ替えて、当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
    前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第1のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第1のビット数よりも多い第2のビット数となるように、当該キーのビット数が決定されること
    を特徴とする装置。
  2. 前記複数段のうち最初の段の処理単位では、前記多数の要素からなる配列の中の1つの要素または要素のソート済み配列を1個の入力列の対象としたN個の入力列に対する前記実行部の処理を、当該多数の要素からなる配列の中の要素及びソート済み配列の数に応じて複数回繰り返し実行して、生成された複数個の出力列に応じて前記生成部にて当該入力列の基となった要素を並べ替えて複数個のソート済み配列を生成し、
    前記最初の段の処理単位から次段以降の各処理単位では、前段の処理単位におけるマルチウェイ・マージの処理により生成されたソート済み配列に対して、N個のソート済み配列を対象とした前記実行部の処理を当該生成されたソート済み配列の数に応じて1回または複数回実行すること
    を特徴とする請求項1に記載の装置。
  3. 前記処理単位の一連の処理において、入力列の数がN個に満たない場合、前記実行部はN個に満たない当該入力列に対して前記マルチウェイ・マージの処理を実行し、前記生成部は、N個に満たない当該入力列に基づき生成された出力列に応じて当該入力列の基となった要素を並べ替えてソート済み配列を生成すること
    を特徴とする請求項1または2に記載の装置。
  4. 前記インデックスとして、前記マルチウェイ・マージの処理の入力列に対して順番に付与される番号が使用されること
    を特徴とする請求項1乃至3のいずれか1項に記載の装置。
  5. 前記第1のビット数が32であり、前記第2のビット数が64であること
    を特徴とする請求項1乃至4のいずれか1項に記載の装置。
  6. 前記処理単位の一連の処理において、SIMD命令を用いて前記マルチウェイ・マージの処理が実行されること
    を特徴とする請求項1乃至のいずれか1項に記載の装置。
  7. 複数の入力列から1個の出力列を生成するマルチウェイ・マージの処理を利用して、多数の要素からなる配列をマージソートする装置であって、
    前記多数の要素からなる配列を記憶する記憶部と、
    前記多数の要素からなる配列の中の1つの要素または要素のソート済み配列を前記マルチウェイ・マージの処理の入力列の対象とし、ソートでの比較に用いられるキーと要素を識別するインデックスとを要素ごとに組み合わせて入力列を構成し、複数の入力列に対して、当該入力列の基となった要素を並べ替えることなく当該マルチウェイ・マージの処理を実行し、生成した出力列に応じて前記記憶部に記憶された当該入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の入力列の対象となる要素のソート済み配列を生成するソート済み配列生成部とを備え、
    最初の段の処理として、前記多数の要素の全てを前記マルチウェイ・マージの処理の入力列の対象として前記ソート済み配列生成部の処理を繰り返し実行した後、最初の段から次段以降の各段の処理として、前段のマルチウェイ・マージの処理により生成された全てのソート済み配列を新たなマルチウェイ・マージの処理の入力列の対象として当該ソート済み配列生成部の処理を繰り返す処理を実行し、最終的に当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
    前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第1のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第1のビット数よりも多い第2のビット数となるように、当該キーのビット数が決定されること
    を特徴とする装置。
  8. 多数の要素からなる配列に対して、N個(Nは3以上の整数)の入力列から1個の出力列を生成するマルチウェイ・マージの処理を実行する方法であって、
    1つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、N個の入力列に対して、当該入力列の基となった要素を並べ替えることなく、前記マルチウェイ・マージの処理を実行するステップと、
    前記実行するステップによる前記マルチウェイ・マージの処理により生成された出力列に応じて前記入力列の基となった要素を並べ替えて、要素のソート済み配列を生成するステップとを含み、
    前記実行するステップにてマルチウェイ・マージの処理が実行され、生成された出力列に応じて前記生成するステップにて前記入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、当該処理単位が複数段にて順に実行され、当該実行するステップにより生成された出力列が複数個であれば、生成された当該複数個の出力列に応じて当該生成するステップにてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が1個であれば、生成された当該1個の出力列に応じて当該生成するステップにて前記多数の要素を並べ替えて、当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
    前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第1のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第1のビット数よりも多い第2のビット数となるように、当該キーのビット数が決定されること
    を特徴とする方法。
  9. 多数の要素からなる配列に対して、N個(Nは3以上の整数)の入力列から1個の出力列を生成するマルチウェイ・マージの処理を実行するシステムとして、コンピュータを機能させるプログラムであって、当該コンピュータに、
    1つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、N個の入力列に対して、当該入力列の基となった要素を並べ替えることなく、前記マルチウェイ・マージの処理を実行する機能と、
    前記実行する機能による前記マルチウェイ・マージの処理により生成された出力列に応じて前記入力列の基となった要素を並べ替えて、要素のソート済み配列を生成する機能とを実現させ、
    前記実行する機能にてマルチウェイ・マージの処理が実行され、生成された出力列に応じて前記生成する機能にて前記入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、当該処理単位が複数段にて順に実行され、
    前記実行する機能により生成された出力列が複数個であれば、生成された当該複数個の出力列に応じて前記生成する機能にてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が1個であれば、生成された当該1個の出力列に応じて当該生成する機能にて前記多数の要素を並べ替えて、当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
    前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第1のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第1のビット数よりも多い第2のビット数となるように、当該キーのビット数が決定されること
    を特徴とするプログラム。
  10. 複数の入力列から1個の出力列を生成するマルチウェイ・マージの処理を利用して、多数の要素からなる配列をマージソートするシステムとして、コンピュータを機能させるプログラムであって、当該コンピュータに、
    前記多数の要素からなる配列を記憶部に記憶させる機能と、
    前記多数の要素からなる配列の中の1つの要素または要素のソート済み配列を前記マルチウェイ・マージの処理の入力列の対象とし、ソートでの比較に用いられるキーと要素を識別するインデックスとを要素ごとに組み合わせて入力列を構成し、複数の入力列に対して、当該入力列の基となった要素を並べ替えることなく当該マルチウェイ・マージの処理を実行し、生成した出力列に応じて前記記憶部に記憶された当該入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の入力列の対象となる要素のソート済み配列を生成する機能とを実現させ、
    最初の段の処理として、前記多数の要素の全てを前記マルチウェイ・マージの処理の入力列の対象として前記生成する機能の処理を繰り返し実行した後、最初の段から次段以降の各段の処理として、前段のマルチウェイ・マージの処理により生成された全てのソート済み配列を新たなマルチウェイ・マージの処理の入力列の対象として当該生成する機能の処理を繰り返す処理を実行し、最終的に当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
    前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第1のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第1のビット数よりも多い第2のビット数となるように、当該キーのビット数が決定されること
    を特徴とするプログラム。
JP2014252509A 2014-12-12 2014-12-12 多数の要素からなる配列をソートする装置、方法およびプログラム Expired - Fee Related JP6380952B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014252509A JP6380952B2 (ja) 2014-12-12 2014-12-12 多数の要素からなる配列をソートする装置、方法およびプログラム
US14/965,190 US10642901B2 (en) 2014-12-12 2015-12-10 Sorting an array consisting of a large number of elements
US16/655,288 US11372929B2 (en) 2014-12-12 2019-10-17 Sorting an array consisting of a large number of elements

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014252509A JP6380952B2 (ja) 2014-12-12 2014-12-12 多数の要素からなる配列をソートする装置、方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2016115092A JP2016115092A (ja) 2016-06-23
JP6380952B2 true JP6380952B2 (ja) 2018-08-29

Family

ID=56111359

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014252509A Expired - Fee Related JP6380952B2 (ja) 2014-12-12 2014-12-12 多数の要素からなる配列をソートする装置、方法およびプログラム

Country Status (2)

Country Link
US (2) US10642901B2 (ja)
JP (1) JP6380952B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6380952B2 (ja) 2014-12-12 2018-08-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 多数の要素からなる配列をソートする装置、方法およびプログラム
US10402164B1 (en) * 2016-12-23 2019-09-03 EMC IP Holding Company LLC Method for merge sort by representation
US11200056B2 (en) 2018-02-08 2021-12-14 Nec Corporation Parallel union control device, parallel union control method, and storage medium
CN109271132B (zh) * 2018-09-19 2023-07-18 中南大学 一种基于机器学习模型的排序方法
US11360740B1 (en) * 2020-03-04 2022-06-14 Unm Rainforest Innovations Single-stage hardware sorting blocks and associated multiway merge sorting networks
CN112015366B (zh) * 2020-07-06 2021-09-10 中科驭数(北京)科技有限公司 数据排序方法、数据排序装置及数据库系统

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60128529A (ja) * 1983-12-16 1985-07-09 Fujitsu Ltd マ−ジ処理器
JP2536572B2 (ja) * 1988-01-07 1996-09-18 株式会社日立製作所 ソ―ト処理装置
US4878246A (en) * 1988-05-02 1989-10-31 Pitney Bowes Inc. Method and apparatus for generating encryption/decryption key
US5131012A (en) * 1990-09-18 1992-07-14 At&T Bell Laboratories Synchronization for cylic redundancy check based, broadband communications network
JPH0580977A (ja) * 1991-09-21 1993-04-02 Toshiba Corp データ処理装置
JPH05197522A (ja) 1992-01-20 1993-08-06 Mitsubishi Electric Corp ソート演算処理装置
JPH0728841A (ja) 1993-07-09 1995-01-31 Hitachi Ltd 索引順編成ファイルの一括作成方式
JP3415914B2 (ja) 1993-10-12 2003-06-09 富士通株式会社 並列マージソート処理方法
US6182121B1 (en) * 1995-02-03 2001-01-30 Enfish, Inc. Method and apparatus for a physical storage architecture having an improved information storage and retrieval system for a shared file environment
JP3196637B2 (ja) 1996-04-26 2001-08-06 三菱電機株式会社 ソートプロセッサおよびソート処理装置
JP3347592B2 (ja) 1996-07-19 2002-11-20 三菱電機株式会社 マージソート処理装置
JP3774324B2 (ja) 1998-08-03 2006-05-10 株式会社日立製作所 ソート処理システムおよびソート処理の方法
JP2001331353A (ja) 2000-05-22 2001-11-30 Teijin Ltd データベースへのデータ入力システム及びそのプログラムを記憶した記録媒体
US7580967B2 (en) * 2002-02-28 2009-08-25 Texas Instruments Incorporated Processor with maximum and minimum instructions
US7590677B2 (en) * 2002-03-11 2009-09-15 Texas Instruments Incorporated Processor with summation instruction using overflow counter
US6901476B2 (en) * 2002-05-06 2005-05-31 Hywire Ltd. Variable key type search engine and method therefor
US7240995B2 (en) * 2003-05-06 2007-07-10 Lexmark International, Inc. Method of authenticating a consumable
US20070156685A1 (en) * 2005-12-28 2007-07-05 Hiroshi Inoue Method for sorting data using SIMD instructions
US8478755B2 (en) 2006-04-20 2013-07-02 Microsoft Corporation Sorting large data sets
JPWO2009044486A1 (ja) 2007-10-05 2011-02-03 株式会社ターボデータラボラトリー 表形式データをソートする方法、マルチコア型装置、及び、プログラム
JP4502223B2 (ja) 2007-12-05 2010-07-14 株式会社エスグランツ ビット列のマージソート装置、方法及びプログラム
US9129004B2 (en) 2008-11-12 2015-09-08 Oracle America, Inc. Multi-interval quicksort algorithm for complex objects
US8190943B2 (en) * 2009-03-13 2012-05-29 Massachusetts Institute Of Technology Systolic merge sorter
US20110055492A1 (en) 2009-09-03 2011-03-03 Ren Wu Multiple processing core data sorting
JP6380952B2 (ja) 2014-12-12 2018-08-29 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 多数の要素からなる配列をソートする装置、方法およびプログラム

Also Published As

Publication number Publication date
US20200050640A1 (en) 2020-02-13
US10642901B2 (en) 2020-05-05
JP2016115092A (ja) 2016-06-23
US11372929B2 (en) 2022-06-28
US20160171030A1 (en) 2016-06-16

Similar Documents

Publication Publication Date Title
JP6380952B2 (ja) 多数の要素からなる配列をソートする装置、方法およびプログラム
JP6605573B2 (ja) 並列ディシジョン・ツリー・プロセッサー・アーキテクチャ
US11275741B2 (en) Merge join system and method
JP5575997B1 (ja) 半導体装置及び半導体装置に対するエントリアドレス書き込み/読み出し方法
WO2017013701A1 (ja) 計算機システム及びデータベース管理方法
JP6907700B2 (ja) 情報処理装置、マルチスレッド行列演算方法、およびマルチスレッド行列演算プログラム
US9020911B2 (en) Name search using multiple bitmap distributions
US9342564B2 (en) Distributed processing apparatus and method for processing large data through hardware acceleration
KR20210024751A (ko) 이종 메모리 장치를 포함하는 그래프 처리 시스템 및 그래프 처리 시스템의 동작방법
US8990741B2 (en) Circuit design support device, circuit design support method and program
JPWO2005098612A1 (ja) 重要成分優先計算方式ならびに装置
JP2016091488A (ja) データソート方法およびプログラム
TW202014882A (zh) 基於記憶體處理器的多處理架構及其操作方法
US20130173647A1 (en) String matching device based on multi-core processor and string matching method thereof
WO2017082323A1 (ja) 分散処理システム、分散処理装置、方法および記憶媒体
WO2015143708A1 (zh) 后缀数组的构造方法及装置
JPWO2009044486A1 (ja) 表形式データをソートする方法、マルチコア型装置、及び、プログラム
JP2021051448A (ja) 情報処理装置、疎行列格納方法及びプログラム
WO2018218927A1 (zh) 一种排序网络、排序方法及排序装置
JPWO2014168199A1 (ja) 論理演算方法および情報処理装置
JP7242743B2 (ja) システム、情報処理方法及びプログラム
US20230214178A1 (en) Device and method for selecting top values from a set of raw values
KR102149576B1 (ko) 저전력 디바이스 환경상에서의 공개키 암호 고속화 연산 처리 방법
JPWO2021149202A5 (ja) 情報処理装置、情報処理方法、及び、プログラム
Zhao et al. Comparative Analysis of Numerical Sorting Algorithms in Java Language

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170822

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180122

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180424

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20180703

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180724

R150 Certificate of patent or registration of utility model

Ref document number: 6380952

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees