(57)【特許請求の範囲】
【請求項１】
多数の要素からなる配列に対して、Ｎ個（Ｎは３以上の整数）の入力列から１個の出力列を生成するマルチウェイ・マージの処理を実行する装置であって、
１つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、Ｎ個の入力列に対して、当該入力列の基となった要素を並べ替えることなく、前記マルチウェイ・マージの処理を実行する実行部と、
前記実行部による前記マルチウェイ・マージの処理により生成された出力列に応じて前記入力列の基となった要素を並べ替えて、要素のソート済み配列を生成する生成部とを備え、
前記実行部にてマルチウェイ・マージの処理が実行され、生成された出力列に応じて前記生成部にて前記入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、当該処理単位が複数段にて順に実行され、
前記実行部により生成された出力列が複数個であれば、生成された当該複数個の出力列に応じて前記生成部にてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が１個であれば、生成された当該１個の出力列に応じて当該生成部にて前記多数の要素を並べ替えて、当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第１のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第１のビット数よりも多い第２のビット数となるように、当該キーのビット数が決定されること
を特徴とする装置。
【請求項２】
前記複数段のうち最初の段の処理単位では、前記多数の要素からなる配列の中の１つの要素または要素のソート済み配列を１個の入力列の対象としたＮ個の入力列に対する前記実行部の処理を、当該多数の要素からなる配列の中の要素及びソート済み配列の数に応じて複数回繰り返し実行して、生成された複数個の出力列に応じて前記生成部にて当該入力列の基となった要素を並べ替えて複数個のソート済み配列を生成し、
前記最初の段の処理単位から次段以降の各処理単位では、前段の処理単位におけるマルチウェイ・マージの処理により生成されたソート済み配列に対して、Ｎ個のソート済み配列を対象とした前記実行部の処理を当該生成されたソート済み配列の数に応じて１回または複数回実行すること
を特徴とする請求項１に記載の装置。
【請求項３】
前記処理単位の一連の処理において、入力列の数がＮ個に満たない場合、前記実行部はＮ個に満たない当該入力列に対して前記マルチウェイ・マージの処理を実行し、前記生成部は、Ｎ個に満たない当該入力列に基づき生成された出力列に応じて当該入力列の基となった要素を並べ替えてソート済み配列を生成すること
を特徴とする請求項１または２に記載の装置。
【請求項４】
前記インデックスとして、前記マルチウェイ・マージの処理の入力列に対して順番に付与される番号が使用されること
を特徴とする請求項１乃至３のいずれか１項に記載の装置。
【請求項５】
前記第１のビット数が３２であり、前記第２のビット数が６４であること
を特徴とする請求項１乃至４のいずれか１項に記載の装置。
【請求項６】
前記処理単位の一連の処理において、ＳＩＭＤ命令を用いて前記マルチウェイ・マージの処理が実行されること
を特徴とする請求項１乃至５のいずれか１項に記載の装置。
【請求項７】
複数の入力列から１個の出力列を生成するマルチウェイ・マージの処理を利用して、多数の要素からなる配列をマージソートする装置であって、
前記多数の要素からなる配列を記憶する記憶部と、
前記多数の要素からなる配列の中の１つの要素または要素のソート済み配列を前記マルチウェイ・マージの処理の入力列の対象とし、ソートでの比較に用いられるキーと要素を識別するインデックスとを要素ごとに組み合わせて入力列を構成し、複数の入力列に対して、当該入力列の基となった要素を並べ替えることなく当該マルチウェイ・マージの処理を実行し、生成した出力列に応じて前記記憶部に記憶された当該入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の入力列の対象となる要素のソート済み配列を生成するソート済み配列生成部とを備え、
最初の段の処理として、前記多数の要素の全てを前記マルチウェイ・マージの処理の入力列の対象として前記ソート済み配列生成部の処理を繰り返し実行した後、最初の段から次段以降の各段の処理として、前段のマルチウェイ・マージの処理により生成された全てのソート済み配列を新たなマルチウェイ・マージの処理の入力列の対象として当該ソート済み配列生成部の処理を繰り返す処理を実行し、最終的に当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第１のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第１のビット数よりも多い第２のビット数となるように、当該キーのビット数が決定されること
を特徴とする装置。
【請求項８】
多数の要素からなる配列に対して、Ｎ個（Ｎは３以上の整数）の入力列から１個の出力列を生成するマルチウェイ・マージの処理を実行する方法であって、
１つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、Ｎ個の入力列に対して、当該入力列の基となった要素を並べ替えることなく、前記マルチウェイ・マージの処理を実行するステップと、
前記実行するステップによる前記マルチウェイ・マージの処理により生成された出力列に応じて前記入力列の基となった要素を並べ替えて、要素のソート済み配列を生成するステップとを含み、
前記実行するステップにてマルチウェイ・マージの処理が実行され、生成された出力列に応じて前記生成するステップにて前記入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、当該処理単位が複数段にて順に実行され、当該実行するステップにより生成された出力列が複数個であれば、生成された当該複数個の出力列に応じて当該生成するステップにてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が１個であれば、生成された当該１個の出力列に応じて当該生成するステップにて前記多数の要素を並べ替えて、当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第１のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第１のビット数よりも多い第２のビット数となるように、当該キーのビット数が決定されること
を特徴とする方法。
【請求項９】
多数の要素からなる配列に対して、Ｎ個（Ｎは３以上の整数）の入力列から１個の出力列を生成するマルチウェイ・マージの処理を実行するシステムとして、コンピュータを機能させるプログラムであって、当該コンピュータに、
１つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、Ｎ個の入力列に対して、当該入力列の基となった要素を並べ替えることなく、前記マルチウェイ・マージの処理を実行する機能と、
前記実行する機能による前記マルチウェイ・マージの処理により生成された出力列に応じて前記入力列の基となった要素を並べ替えて、要素のソート済み配列を生成する機能とを実現させ、
前記実行する機能にてマルチウェイ・マージの処理が実行され、生成された出力列に応じて前記生成する機能にて前記入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、当該処理単位が複数段にて順に実行され、
前記実行する機能により生成された出力列が複数個であれば、生成された当該複数個の出力列に応じて前記生成する機能にてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が１個であれば、生成された当該１個の出力列に応じて当該生成する機能にて前記多数の要素を並べ替えて、当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第１のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第１のビット数よりも多い第２のビット数となるように、当該キーのビット数が決定されること
を特徴とするプログラム。
【請求項１０】
複数の入力列から１個の出力列を生成するマルチウェイ・マージの処理を利用して、多数の要素からなる配列をマージソートするシステムとして、コンピュータを機能させるプログラムであって、当該コンピュータに、
前記多数の要素からなる配列を記憶部に記憶させる機能と、
前記多数の要素からなる配列の中の１つの要素または要素のソート済み配列を前記マルチウェイ・マージの処理の入力列の対象とし、ソートでの比較に用いられるキーと要素を識別するインデックスとを要素ごとに組み合わせて入力列を構成し、複数の入力列に対して、当該入力列の基となった要素を並べ替えることなく当該マルチウェイ・マージの処理を実行し、生成した出力列に応じて前記記憶部に記憶された当該入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の入力列の対象となる要素のソート済み配列を生成する機能とを実現させ、
最初の段の処理として、前記多数の要素の全てを前記マルチウェイ・マージの処理の入力列の対象として前記生成する機能の処理を繰り返し実行した後、最初の段から次段以降の各段の処理として、前段のマルチウェイ・マージの処理により生成された全てのソート済み配列を新たなマルチウェイ・マージの処理の入力列の対象として当該生成する機能の処理を繰り返す処理を実行し、最終的に当該多数の要素の全てが連続的にソートされたソート済み配列を生成し、
前記マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、前記キーと前記インデックスとの組み合わせが第１のビット数となるように前記キーのビット数が決定され、前記要素の数が当該所定の閾値を超えると、当該組み合わせが当該第１のビット数よりも多い第２のビット数となるように、当該キーのビット数が決定されること
を特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多数の要素からなる配列をソートする装置、方法およびプログラムに関する。
【背景技術】
【０００２】
多数のデータ（例えば、プログラミング言語におけるデータ型の１つである構造体など）からなる配列を、各データに含まれるキーの値に応じてソートする処理は多くのアプリケーションで用いられる。このようなソートを行うには、一般的に大きく分けて２つのアプローチが存在する。１つは、データを直接ソートする手法である。もう１つは、各データのキーの値と配列内でのデータの位置を表すインデックスとをデータごとに組み合わせて、その組み合わせ（ペア）をソートした結果により実際のデータを並べ替える手法である。この手法では、全てのペアを対象として連続的にソートした後、整列したインデックスをもとに、実際のデータの並べ替えが行われる。
【０００３】
また、マージソートを実行する技術として、例えば、特許文献１には、複数の入力ノードのそれぞれで、入力ローカルディスクに分配して格納されるソート対象データについて、内部ソートを行い、その内部ソート結果を、複数のソート列として、入力ノードと出力ノード間に接続した共用ディスクに格納し、全ての入力ノードからのマージ指示を受領した出力ノードは、ソート列を共用ディスクから読み出してマージして、入力データ全体に対する総合的なソート結果を出力ローカルディスクに出力する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−５６９４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したデータを直接ソートする手法では、ソートの間、実際のデータを繰り返しメモリ内でコピーすることが必要となり、メモリコピーのオーバーヘッドが大きくなる。また、キーがメモリ内で分散しているため、キーに対する不連続メモリアクセスが生じ、１つの命令で複数のデータを処理するＳＩＭＤ（Single Instruction Multiple Data）命令を用いた高速化技術が使用しづらい問題がある。また、上述したペアのソート結果によりデータを並べ替える手法では、ソートの間、実際のデータを移動する必要がなく、またキーによる単純な整数のソートになるため、ＳＩＭＤ命令を使用し易い。しかし、ペアをソートして最終的にデータを並べ替える工程では、データの場所に直接アクセスするランダムアクセスが並列に行われる。そのため、必要なデータがキャッシュメモリに存在しないキャッシュミスが大量に発生し、処理時間が増加することとなる。また、この工程では一度に多くのメモリアクセスが並列に行われるために、ＣＰＵ（Central Processing Unit）からメモリへアクセスする際のメモリバンド幅がボトルネックとなり、ＳＩＭＤの効果が期待できない。
【０００６】
本発明は、ソートを実行する際のメモリコピーの処理負荷を低減するとともにキャッシュミスの発生を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
かかる目的のもと、本発明は、多数の要素からなる配列に対して、Ｎ個（Ｎは３以上の整数）の入力列から１個の出力列を生成するマルチウェイ・マージの処理を実行する装置であって、１つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、Ｎ個の入力列に対して、入力列の基となった要素を並べ替えることなく、マルチウェイ・マージの処理を実行する実行部と、実行部によるマルチウェイ・マージの処理により生成された出力列に応じて入力列の基となった要素を並べ替えて、要素のソート済み配列を生成する生成部とを備え、実行部にてマルチウェイ・マージの処理が実行され、生成された出力列に応じて生成部にて入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、処理単位が複数段にて順に実行され、実行部により生成された出力列が複数個であれば、生成された複数個の出力列に応じて生成部にてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が１個であれば、生成された１個の出力列に応じて生成部にて多数の要素を並べ替えて、多数の要素の全てが連続的にソートされたソート済み配列を生成することを特徴とする、装置を提供する。
【０００８】
ここで、複数段のうち最初の段の処理単位では、多数の要素からなる配列の中の１つの要素または要素のソート済み配列を１個の入力列の対象としたＮ個の入力列に対する実行部の処理を、多数の要素からなる配列の中の要素及びソート済み配列の数に応じて複数回繰り返し実行して、生成された複数個の出力列に応じて生成部にて入力列の基となった要素を並べ替えて複数個のソート済み配列を生成し、最初の段の処理単位から次段以降の各処理単位では、前段の処理単位におけるマルチウェイ・マージの処理により生成されたソート済み配列に対して、Ｎ個のソート済み配列を対象とした実行部の処理を生成されたソート済み配列の数に応じて１回または複数回実行する、ものであってよい。
【０００９】
また、処理単位の一連の処理において、入力列の数がＮ個に満たない場合、実行部はＮ個に満たない入力列に対してマルチウェイ・マージの処理を実行し、生成部は、Ｎ個に満たない入力列に基づき生成された出力列に応じて入力列の基となった要素を並べ替えてソート済み配列を生成する、ものであってよい。
【００１０】
また、インデックスとして、マルチウェイ・マージの処理の入力列に対して順番に付与される番号が使用される、ものであってよい。
【００１１】
さらに、この装置において、マルチウェイ・マージの処理の入力列に含まれる要素の数が所定の閾値に達するまでは、キーとインデックスとの組み合わせが第１のビット数となるようにキーのビット数が決定され、要素の数が所定の閾値を超えると、組み合わせが第１のビット数よりも多い第２のビット数となるように、キーのビット数が決定される、ものであってよい。
【００１２】
また、この装置において、第１のビット数が３２であり、第２のビット数が６４、であってよい。
【００１３】
さらに、処理単位の一連の処理において、ＳＩＭＤ命令を用いてマルチウェイ・マージの処理が実行される、ものであってよい。
【００１４】
また、本発明は、複数の入力列から１個の出力列を生成するマルチウェイ・マージの処理を利用して、多数の要素からなる配列をマージソートする装置であって、多数の要素からなる配列を記憶する記憶部と、多数の要素からなる配列の中の１つの要素または要素のソート済み配列をマルチウェイ・マージの処理の入力列の対象とし、ソートでの比較に用いられるキーと要素を識別するインデックスとを要素ごとに組み合わせて入力列を構成し、複数の入力列に対して、入力列の基となった要素を並べ替えることなくマルチウェイ・マージの処理を実行し、生成した出力列に応じて記憶部に記憶された入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の入力列の対象となる要素のソート済み配列を生成するソート済み配列生成部とを備え、最初の段の処理として、多数の要素の全てをマルチウェイ・マージの処理の入力列の対象としてソート済み配列生成部の処理を繰り返し実行した後、最初の段から次段以降の各段の処理として、前段のマルチウェイ・マージの処理により生成された全てのソート済み配列を新たなマルチウェイ・マージの処理の入力列の対象としてソート済み配列生成部の処理を繰り返す処理を実行し、最終的に多数の要素の全てが連続的にソートされたソート済み配列を生成する、装置も提供する。
【００１５】
さらに、本発明は、多数の要素からなる配列に対して、Ｎ個（Ｎは３以上の整数）の入力列から１個の出力列を生成するマルチウェイ・マージの処理を実行する方法であって、１つの要素または要素のソート済み配列において、ソートでの比較に用いられる要素内のキーと要素を識別するインデックスとを組み合わせて入力列を構成し、Ｎ個の入力列に対して、入力列の基となった要素を並べ替えることなく、マルチウェイ・マージの処理を実行するステップと、実行するステップによるマルチウェイ・マージの処理により生成された出力列に応じて入力列の基となった要素を並べ替えて、要素のソート済み配列を生成するステップとを含み、実行するステップにてマルチウェイ・マージの処理が実行され、生成された出力列に応じて生成するステップにて入力列の基となった要素を並べ替えてソート済み配列を生成する一連の処理を処理単位とし、処理単位が複数段にて順に実行され、実行するステップにより生成された出力列が複数個であれば、生成された複数個の出力列に応じて生成するステップにてそれぞれの入力列の基となった要素を並べ替えて、次段のマルチウェイ・マージの処理の対象となる複数個のソート済み配列を生成し、生成された出力列が１個であれば、生成された１個の出力列に応じて生成するステップにて多数の要素を並べ替えて、多数の要素の全てが連続的にソートされたソート済み配列を生成する、方法も提供する。
【００１６】
さらにまた、本発明は、コンピュータを制御して上述した装置の各機能を実現するプログラム、またはコンピュータに上記の方法における各ステップに対応する処理を実行させるプログラムとしても実現される。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより、提供することができる。
【発明の効果】
【００１７】
本発明によれば、ソートを実行する際のメモリコピーの処理負荷を低減するとともにキャッシュミスの発生を抑制することができる。
【図面の簡単な説明】
【００１８】
【図１】本実施の形態に係るマージソート処理装置の機能構成例を示したブロック図である。
【図２】マージソートの処理手順の一例を示すフローチャートである。
【図３】（ａ）、（ｂ）は、本実施の形態に係る２ウェイ・マージの一例を説明するための図である。
【図４】本実施の形態に係るマルチウェイ・マージの一例を説明するための図である。
【図５】入力列に基づいてインデックスを決める処理の一例を説明するため図である。
【図６】本実施の形態に係るマージソート処理装置を構成するのに好適なハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。本実施の形態に係るマージソート処理装置１０は、多数の要素（例えば、構造体など）からなる配列に対してマージソートの処理を行うものである。マージソートの処理において、マージソート処理装置１０は、１個の構造体またはソート済みの構造体の配列を入力列の対象とし、Ｎ個の入力列についてマージを行って１個の出力列を生成するマルチウェイ・マージを実行する。ただし、後述するように、マルチウェイ・マージは２ウェイ・マージを繰り返し行うことによって実行され、Ｎは３以上の整数であるものとする。
【００２０】
また、以下では、ソートの対象となるデータの一例として構造体を用いることとし、多数の構造体からなる配列に対して、構造体を並び替えてソートが行われるものとする。ただし、本実施の形態において、ソート対象のデータは構造体に限られるものではない。
【００２１】
＜マージソート処理装置の機能構成＞
まず、本実施の形態に係るマージソート処理装置１０の機能構成について説明する。図１は、本実施の形態に係るマージソート処理装置１０の機能構成例を示したブロック図である。図示するように、マージソート処理装置１０は、多数の構造体からなる配列を記憶する記憶部１１と、マルチウェイ・マージの入力列を構成する入力列構成部１２とを備える。また、マージソート処理装置１０は、入力列構成部１２により構成された入力列に対してマージ処理を実行して出力列を生成するマージ実行部１３と、マージ実行部１３により生成された出力列をもとに記憶部１１内の構造体を並べ替える並べ替え実行部１４とを備える。さらに、マージソート処理装置１０は、マルチウェイ・マージを実行して構造体を並べ替える一連の処理を制御するマージ制御部１５を備える。
【００２２】
本実施の形態では、実行部の一例として、入力列構成部１２、マージ実行部１３が用いられる。また、生成部の一例として、並べ替え実行部１４が用いられる。さらに、ソート済み配列生成部の一例として、入力列構成部１２、マージ実行部１３、並べ替え実行部１４が用いられる。そして、記憶部の一例として、記憶部１１が用いられる。
【００２３】
記憶部１１は、多数の構造体からなる配列を記憶する。この多数の構造体からなる配列に対して、ソートの処理が行われる。
【００２４】
入力列構成部１２は、記憶部１１に記憶された構造体からキーを取り出し、１つの構造体または構造体のソート済み配列において、キーとインデックスとを組み合わせて、マルチウェイ・マージの入力列を構成する。キーとは、構造体の一部のデータであり、ソートで順番に並べるための比較に用いられる値である。即ち、各構造体のキーの値が昇順や降順に並ぶように、ソートが行われる。キーは、例えば、３２ビットや６４ビットの整数で表される。
【００２５】
また、インデックスとは、キーに付随して用いられるデータであり、構造体を識別するための値である。インデックスにより、多数の構造体の中から一意の構造体が決定される。このインデックスは、少なくとも、記憶部１１に記憶されたソート対象の全構造体と同数のインデックスが用意される。即ち、インデックスのビット数は、全構造体を識別可能となるビット数分用意される。例えば、インデックスが３２ビットの整数の場合、２の３２乗個の構造体が識別可能となる。以下では、１つの構造体におけるキー及びインデックスの組合せを、ペアと称することとする。ペアは、キーのビット列とインデックスのビット列とを組み合わせたビット列であり、整数で表される。
【００２６】
マージ実行部１３は、入力列構成部１２により構成されたＮ個の入力列に対して、キーの値をもとにマルチウェイ・マージの処理を行う。ここで、マージ実行部１３は、マルチウェイ・マージの処理として、Ｎ個の入力列をマージし、Ｎ個の入力列がソートされて並んだ１個の出力列を生成する。マルチウェイ・マージの入力列の数（＝Ｎ）は、例えば８や１６であり、マージソート処理装置１０の処理性能やソート対象のデータ量などに応じて、予め定められている。また、マージ実行部１３は、キー及びインデックスの組み合わせであるペアを並べ替える処理を行うのであって、実際に記憶部１１内の構造体を並べ替えるわけではない。さらに、マージ実行部１３は、ＳＩＭＤ命令を用いることにより、マージ処理を並列に実行しても良い。
【００２７】
並べ替え実行部１４は、マルチウェイ・マージにおいてマージ実行部１３によって生成された出力列に応じて、実際に記憶部１１内の構造体を並べ替える。ここで、並べ替え実行部１４は、出力列に含まれるインデックスに対応する構造体を記憶部１１内で特定し、出力列にてインデックスが配列されている順番に従って、実際に記憶部１１内の構造体を並べ替える。
【００２８】
マージ制御部１５は、マルチウェイ・マージを実行して構造体を並べ替える一連の処理を制御する。即ち、マージ制御部１５は、入力列構成部１２、マージ実行部１３、並べ替え実行部１４による処理を制御する。具体的には、マージ制御部１５は、入力列構成部１２、マージ実行部１３、並べ替え実行部１４による一連の処理を、複数段にて順番に実行するように制御する。また、各段においては、入力列構成部１２、マージ実行部１３、並べ替え実行部１４による一連の処理が１回または複数回繰り返し実行される。本実施の形態では、各段で行われる一連の処理を、処理単位の一例とする。
【００２９】
例えば、マージソート処理装置１０の処理が開始される最初の段では、マージ制御部１５は、多数の構造体に対して、Ｎ個の構造体を入力列の対象としたマルチウェイ・マージの処理を複数回繰り返し実行するように制御する。そして、マージ実行部１３により生成された出力列に応じて、並べ替え実行部１４は、出力列にてインデックスが配列されている順番に従って、実際に、記憶部１１内の入力列の基となった構造体の並べ替えを行ってソート済み配列を生成する。ここで、マージ実行部１３によるマルチウェイ・マージの処理の繰り返しにより出力列は複数個生成されているため、並べ替え実行部１４は、複数個の出力列に応じて複数個のソート済み配列を生成する。そして、多数の構造体を入力列の対象とする最初の段の処理が終了すると、マージ制御部１５は、次段の処理を開始するように制御する。次段の処理では、最初の段で生成されたソート済み配列を入力列の対象とするマルチウェイ・マージの処理が行われる。
【００３０】
そして、例えば、最初の段から次段以降では、マージ制御部１５は、前段のマルチウェイ・マージにより生成されたソート済み配列に対して、Ｎ個のソート済み配列を対象としたマルチウェイ・マージの処理を複数回繰り返し実行するように制御する。また、マージ実行部１３により生成された複数個の出力列に応じて、並べ替え実行部１４は、記憶部１１内の入力列の基となった構造体の並べ替えを行って複数個のソート済み配列を生成する。さらに、最後の段では、マージ制御部１５は、前段のマルチウェイ・マージにより生成されたソート済み配列に対して、Ｎ個のソート済み配列を対象としたマルチウェイ・マージの処理を１回実行するように制御する。そして、マージ実行部１３により生成された１個の出力列に応じて、並べ替え実行部１４は、記憶部１１内の構造体の並べ替えを行って、多数の構造体の全てが連続的にソートされたソート済み配列を生成する。
【００３１】
ここで、マルチウェイ・マージの入力列の数がＮ個に満たない場合には、マージ制御部１５は、Ｎ個に満たない入力列に対してマルチウェイ・マージの処理を実行するように制御するものとする。例えば、ある段において、前段で生成されたソート済み配列の数が（１０Ｎ＋２）個である場合、マージ制御部１５は、１０Ｎ個のソート済み配列を入力列の対象として１０回のマルチウェイ・マージを行うように制御する。また、２個のソート済み配列が余るため、マージ制御部１５は、この２個のソート済み配列を入力列の対象として、１回のマルチウェイ・マージを行うように制御する。即ち、この段では合計で１１回のマルチウェイ・マージが行われることとなる。そして、マージ実行部１３は、出力列として、１１個のソート済み配列を生成する。
【００３２】
また、前段のマルチウェイ・マージにより生成された出力列がＮ個以下の場合、マルチウェイ・マージの入力列の数がＮ個以下となる。この場合、マージ制御部１５は、マルチウェイ・マージを１回行い、１個の出力列を生成するように制御する。例えば、Ｎ＝８とすると、前段で生成されたソート済み配列の数が２〜８個である場合、ソート済み配列はＮ個以下になる。この場合、マージ制御部１５は、この２〜８個のソート済み配列を入力列の対象として、１回のマルチウェイ・マージを行うように制御する。即ち、この段が最後の段となり、マージ実行部１３により生成された１個の出力列に応じて、並べ替え実行部１４は、多数の構造体の全てが連続的にソートされたソート済み配列を生成することとなる。
【００３３】
さらに、最初の段にて生成された出力列がＮ個以下の場合、マージ制御部１５は、次段の処理にて１回のマルチウェイ・マージを行い、１個の出力列を生成するように制御する。この場合には、最初の段の次の段（２段目）が最後となる。そして、並べ替え実行部１４は、２段目の処理にてマージ実行部１３により生成された出力列に応じて、構造体の並べ替えを行い、多数の構造体の全てが連続的にソートされたソート済み配列を生成する。
【００３４】
また、本実施の形態では、記憶部１１としてメインメモリが用いられる。さらに、入力列構成部１２、マージ実行部１３の処理は、キャッシュメモリ内で実行される。即ち、入力列構成部１２は、メインメモリに記憶された構造体を読み込んで入力列を構成する。次に、マージ実行部１３は、構成された入力列に対するマルチウェイ・マージの処理を、キャッシュメモリ内で行う。そして、マルチウェイ・マージの出力結果として生成された出力列をもとに、並べ替え実行部１４がメインメモリ内の構造体の並び替えを行う。
【００３５】
図２は、マージソートの処理手順の一例を示すフローチャートである。まず、マージ制御部１５は、記憶部１１において、マルチウェイ・マージの対象となる構造体または構造体のソート済み配列を特定する（ステップ１０１）。例えば、記憶部１１に記憶された構造体に対して並べ替え実行部１４による並べ替えの処理が全く行われていない初期状態では、最初の段の処理として、マージ制御部１５は、記憶部１１内の各構造体をマルチウェイ・マージの対象として特定する。また、例えば、最初の段から次段以降の処理として、マージ制御部１５は、前段で生成された記憶部１１内の各ソート済み配列をマルチウェイ・マージの対象として特定する。
【００３６】
次に、入力列構成部１２は、マージ制御部１５により特定された構造体またはソート済み配列の中から、入力列の対象とするＮ個を選択する（ステップ１０２）。次に、入力列構成部１２は、選択したＮ個の構造体またはソート済み配列について、構造体ごとにキーを取り出し、キーとインデックスとを組み合わせてペアを作成して、マルチウェイ・マージの入力列を構成する（ステップ１０３）。ここでは、１個の構造体またはソート済みの複数の構造体の塊が入力列の対象とされ、マルチウェイ・マージの入力列がＮ個作成される。
【００３７】
例えば、最初の段の処理として、入力列構成部１２は、選択したＮ個の構造体のうち、１個の構造体から１個のペアを作成して１個の入力列とする。このようにして、入力列構成部１２は、選択したＮ個の構造体からＮ個のペアを作成してＮ個の入力列を構成する。また、例えば、最初の段の次段の処理において、入力列構成部１２は、ソート済みの構造体の塊として、Ｎ個の構造体が並んだソート済み配列をＮ個選択する。そして、入力列構成部１２は、選択したＮ個の配列のうち１個を抽出し、「Ｎ個の構造体が並んだソート済み配列」から「Ｎ個のペアが並んだソート済み配列」を生成して１個の入力列として構成する。このようにして、入力列構成部１２は、選択したＮ個の配列に対して、「Ｎ個のペアが並んだソート済み配列」をＮ個生成し、マルチウェイ・マージのＮ個の入力列とする。
【００３８】
次に、マージ実行部１３は、Ｎ個の入力列に対してキーの値をもとに整数によるマージ処理を行い、１個の出力列を生成する（ステップ１０４）。例えば、最初の段の処理として、１個のペアで１個の入力列を構成する場合には、Ｎ個のペアがマージされて並んだ１個の出力列が生成される。また、例えば、最初の段の次段の処理として、「Ｎ個のペアが並んだソート済み配列」で１個の入力列を構成する場合には、Ｎ×Ｎ個のペアがマージされて並んだ１個の出力列が生成される。ステップ１０４のソートでは、ＳＩＭＤを用いた並列処理が行われる。
【００３９】
そして、並べ替え実行部１４は、マルチウェイ・マージにおいて生成された出力列に含まれるインデックスをもとに、実際に記憶部１１内の構造体を並べ替える（ステップ１０５）。例えば、最初の段の処理として、１個の出力列にＮ個のペアが含まれている場合には、入力列の基となったＮ個の構造体を並べ替えたソート済み配列が記憶部１１内に生成される。また、例えば、最初の段の次段の処理として、１個の出力列にＮ×Ｎ個のペアが含まれている場合には、入力列の基となったＮ×Ｎ個の構造体を並べ替えたソート済み配列が記憶部１１内に生成される。
【００４０】
次に、マージ制御部１５は、ステップ１０１にて特定したマルチウェイ・マージの対象となる全ての構造体またはソート済み配列に対して、処理が行われたか否かを判定する（ステップ１０６）。ここで、マージ制御部１５は、特定した全ての構造体またはソート済み配列に対して、ステップ１０２〜１０５の処理が行われたか否かを判定する。ステップ１０６で否定の判断（Ｎｏ）がされた場合、即ち、マージ制御部１５が特定した構造体またはソート済み配列の中でステップ１０２〜１０５の処理が行われていないものが存在する場合には、ステップ１０２に移行する。そして、入力列構成部１２が新たにＮ個の構造体またはソート済み配列を選択し、その段における処理を続行する。
【００４１】
結果として、各段では、記憶部１１内の構造体を並べ替えた複数個のソート済み配列が生成される。ただし、最後の段では、生成される出力列は１個である。また、ステップ１０６で肯定の判断（Ｙｅｓ）がされた場合、即ち、マージ制御部１５が特定した構造体またはソート済み配列の全てについてステップ１０２〜１０５の処理が完了した場合には、その段の処理が終了したこととなり、ステップ１０７に移行する。
【００４２】
次に、マージ制御部１５は、並べ替え実行部１４により生成されたソート済み配列の合計が１個であるか否かを判定する（ステップ１０７）。生成されたソート済み配列の合計が１個であると判定された場合（ステップ１０７でＹｅｓ）、即ち、ステップ１０５で生成されたソート済み配列が１個で、それに応じて記憶部１１内の構造体の並べ替えが行われた場合には、多数の構造体の全てが連続的にソートされていることとなる。この場合には、最後の段の処理が完了し、本処理フローは終了する。一方、生成されたソート済み配列の合計が２個以上であると判定された場合（ステップ１０７でＮｏ）、即ち、ステップ１０５で生成されたソート済み配列が２個以上ある場合、ステップ１０１に移行する。そして、次段の処理が続けて行われる。
【００４３】
また、ステップ１０７において、マージ制御部１５は、マージ実行部１３により生成された出力列の合計が１個であるか否かを判定することとしても良い。この場合、生成された出力列の合計が１個の場合、多数の構造体の全てが連続的にソートされたこととなり、最後の段の処理が完了して本処理フローは終了する。一方、生成された出力列の合計が２個以上の場合、ステップ１０１に移行する。
【００４４】
さらに、図２に示す手順では、並べ替え実行部１４は１つのマルチウェイ・マージが終了するたびに出力列に応じて構造体を並べ替えることとしたが、このような構成に限られるものではない。例えば、並べ替え実行部１４は、各段の複数のマルチウェイ・マージの処理が繰り返し実行された後に、生成された複数の出力列にてまとめて構造体を並べ替えることとしても良い。
【００４５】
＜マルチウェイ・マージの説明＞
次に、本実施の形態で用いられるマルチウェイ・マージの処理について詳細に説明する。マルチウェイ・マージの処理は、２ウェイ・マージの処理を繰り返し行うことによって実行される。図３（ａ）、（ｂ）は、本実施の形態に係る２ウェイ・マージの一例を説明するための図である。また、図４は、本実施の形態に係るマルチウェイ・マージの一例を説明するための図である。
【００４６】
まず、図３（ａ）、（ｂ）に示すように、２ウェイ・マージでは、２個の入力列をマージして１個の出力列が生成される。ここで、図３（ａ）に示すように、入力列が例えばペアＡ、ペアＢで、各入力列に１つのペアしか含まれていない場合、ペアＡとペアＢとの比較によりマージが行われる。即ち、ペアＡ及びペアＢが昇順または降順に整列されて、１個の出力列にマージされる。
【００４７】
一方、図３（ｂ）に示すように、入力列が例えばペアＡ〜Ｄ及びペアＥ〜Ｈで、入力列に複数のペア（図３（ｂ）に示す例では４個）が含まれている場合、入力列の先頭の比較が順に行われる。例えば、昇順に整列させる場合、まず、入力列の先頭であるペアＡ及びペアＥの比較が行われ、値の小さいものから先に出力列に並べられる。ここで、例えばペアＡの方が小さい場合、ペアＡが出力列の先頭として並べられ、次に入力列の先頭となるペアＢ及びペアＥの比較が行われる。ここで、例えばペアＢの方が小さい場合、ペアＢが出力列のペアＡの次に並べられ、さらに、次に入力列の先頭となるペアＣ及びペアＥの比較が行われる。このようにして順番に入力列の各ペアの比較が行われ、１個の出力列としてマージされる。
【００４８】
次に、図４に示すように、マルチウェイ・マージでは、複数の入力列をマージして、最終的に１個の出力列が生成される。その際、２ウェイ・マージが繰り返し実行される。図４に示す例は、マルチウェイ・マージの入力列の数が８（Ｎ＝８）の場合の例である。
【００４９】
まず、１段階目の２ウェイ・マージにより、８個の入力列から４個の出力列が生成される。次の段階の２ウェイ・マージでは、１段階目で生成された出力列が入力列となり、４個の入力列から２個の出力列が生成される。そして、最終の２ウェイ・マージでは、２段階目で生成された出力列が入力列となり、２個の入力列から１個の出力列が生成される。このように、入力列の数が８の場合には、３（＝ｌｏｇ２８）段階の２ウェイ・マージが行われて、マルチウェイ・マージの処理が実行される。
【００５０】
例えば、記憶部１１に記憶された構造体に対して並べ替え実行部１４による並べ替えの処理が全く行われていない初期状態では、入力列構成部１２は、例えば予め記憶されたメモリ位置に沿った順番に従って、記憶部１１から８個の構造体をシーケンシャルに読み込む。そして、入力列構成部１２は、１個の構造体当たり１個のペアを生成して、８個の入力列を構成する。次に、マージ実行部１３は、８個のペアに対して２ウェイ・マージを繰り返し実行し、８個のペアがソートされて並んだ１個の出力列をシーケンシャルに書き出す。そして、並べ替え実行部１４は、生成された出力列に含まれるインデックスをもとに、実際に記憶部１１内の８個の構造体を並べ替える。また、記憶部１１内には、ソートの対象となる構造体がこの８個以外にも存在する。そのため、最初の段の処理として、同様にマルチウェイ・マージが行われ、８個の構造体を並べ替えたソート済みの配列が、記憶部１１内に複数生成される。
【００５１】
次に、最初の段の次段の処理において、入力列構成部１２は、記憶部１１から８個の構造体が並んだソート済み配列を読み込む。そして、入力列構成部１２は、８個の構造体が並んだソート済み配列から、８個のペアが並んだソート済み配列を生成し、１個の入力列とする。このようにして、入力列構成部１２は、８個のペアが並んだソート済み配列を合計８個生成し、マルチウェイ・マージの８個の入力列とする。そして、マージ実行部１３は、８個の入力列に対して２ウェイ・マージを繰り返し実行し、１個の出力列を生成する。この出力列には、８×８＝６４個のペアが含まれている。並べ替え実行部１４は、出力列に含まれるインデックスをもとに、実際に記憶部１１内の６４個の構造体を並べ替える。また、ソートの対象となる構造体がこの６４個以外にも存在する。そのため、最初の段の次段の処理として、同様にマルチウェイ・マージが行われ、６４個の構造体を並べ替えたソート済みの配列が、記憶部１１内に複数生成される。
【００５２】
このようにして、マージ制御部１５は、前段の処理により生成された複数のソート済み配列をマルチウェイ・マージの入力列の対象として、各段における処理を行い、それぞれの段ごとに記憶部１１内の構造体の並べ替えを行うように制御する。そして、ある段のマルチウェイ・マージにより生成された出力列が１個の場合、その段が最後の段となり、記憶部１１内の多数の構造体の全てが連続的にソートされたソート済み配列が生成されて、マージソート処理装置１０の処理が終了する。
【００５３】
以上説明したように、本実施の形態に係るマージソート処理装置１０は、記憶部１１内のソート対象の全ての構造体を連続的に整列させるまで、マルチウェイ・マージの処理を繰り返し実行する。マルチウェイ・マージの処理では、生成された１個の出力列をもとに実際に構造体を並べ替えるのであって、ソートにおいて構造体を常に移動させるわけではない。また、全てのペアをソートした後に構造体をまとめて並べ替えるものでもない。
【００５４】
本実施の形態では、一定の段数ごとに構造体の並べ替えやキーの抽出を行うことにより、例えば、ソートにより構造体を直接並べ替える構成と比較して、メモリコピーのオーバーヘッドが抑制されて処理負荷が軽減される。また、ＳＩＭＤ命令をし易くなる。さらに、一定の段数ごとに構造体の並べ替えやキーの抽出を行うことにより、例えば、全てのペアをソートした後に構造体をまとめて並べ替える構成と比較して、ランダムアクセスが回避されてキャッシュミスの発生が抑制される。また、例えば、全ての構造体をまとめて並べ替える場合よりも、使用するメモリバンド幅が削減される。
【００５５】
さらに、本実施の形態では、マルチウェイ・マージを用いることで、例えば、２ウェイ・マージのみを用いる構成と比較して、メインメモリにアクセスする回数が減少する。例えば、図４に示すようにＮ＝８とすると、３段階のマージ処理をキャッシュメモリ内で行うことになる。そのため、メインメモリにアクセスする回数は、２ウェイ・マージのみを用いる場合の１／３になる。即ち、メモリバンド幅の消費量が削減され、メモリバンド幅がボトルネックになる並列ソートで性能向上が得られる。
【００５６】
＜インデックスの他の例＞
上記の例では、入力列構成部１２は、構造体のキーとインデックスとを組み合わせて、マルチウェイ・マージの入力列を構成した。この場合、記憶部１１に含まれる全ての構造体を識別するために、少なくとも構造体と同数のインデックスが用意される。即ち、例えば構造体の総数をＭ個とすると、インデックスに対して、ｌｏｇ２Ｍビットを割り当てることとなる。インデックスに割り当てるビット数は、データサイズが大きくなり構造体の総数が増えるほど多くなる。
【００５７】
そこで、本実施例では、入力列構成部１２は、構造体の総数に対応する値をインデックスに用いるのではなく、マルチウェイ・マージの各入力列、即ち、マルチウェイ・マージにおける１段階目のマージ処理の各入力列に対して順番に番号を付与し、付与した番号をインデックスとして使用する。この場合、１段階目のマージ処理の入力列の数（＝Ｎ）だけインデックスがあれば足りるため、インデックスに対して、ｌｏｇ２Ｎビットを割り当てれば良い。
【００５８】
ＳＩＭＤ命令では、例えば１２８ビットＳＩＭＤ命令などのように、１つの命令当たりに処理可能なビット数が決まっている。例えば、構造体の総数に基づくインデックスのビット数が３２ビットであり、キーのビット数が３２ビットであれば、ペアのビット数は６４ビットになる。そのため、ＳＩＭＤ命令により２並列処理が行われることとなる。一方、本実施例のように、入力列に基づいてインデックスのビット数を決める場合、Ｎ＝８であれば、１段階目のマージ処理の各入力列に０〜７の番号が振られ、インデックスには３（ｌｏｇ２８）ビットが割り当てられることとなる。ここで、キーの下位のビット部分を削って２９ビットとすると、ペアのビット数は３２ビットになる。即ち、ＳＩＭＤ命令により４並列処理が行われることとなり、並列処理数が２から４に向上する。
【００５９】
図５は、入力列に基づいてインデックスを決める処理の一例を説明するため図である。図５に示す例では、入力列の数をＮ＝８とし、マルチウェイ・マージにおける１段階目のマージ処理の各入力列に０〜７の番号を付与するものとする。ここで、１つの入力列に複数のペアが含まれる場合には、入力列内に含まれる各ペアに同じ番号が付与される。また、マルチウェイ・マージによる出力列をもとに構造体の並び替えを行う際には、１段階目の各入力列の先頭にポインタをセットする。そして、出力列のインデックスに応じて入力列のペアを出力するとともに、入力列において先頭を表すポインタを隣のペアに一つずつ進めていく。
【００６０】
例えば、図５に示す最終の出力列において、最上位の３つのインデックスは、順番に「０、３、３」である。また、各入力列の先頭にはポインタがセットされている。この場合、出力列の１番目の「０」は、最初の段階で番号が「０」の入力列に該当するため、番号「０」の入力列でポインタがセットされている先頭の「ペアＩ」を出力し、ポインタを隣の「ペアＪ」に進める。次に、出力列の２番目の「３」は、最初の段階で番号が「３」の入力列に該当するため、番号「３」の入力列でポインタがセットされている先頭の「ペアＫ」を出力し、ポインタを隣の「ペアＬ」に進める。次に、出力列の３番目の「３」は、最初の段階で番号が「３」の入力列に該当するため、番号「３」の入力列でポインタがセットされている先頭の「ペアＬ」を出力し、ポインタを隣の「ペアＭ」に進める。このようにして、個々の構造体に対応するインデックスを用いなくても、出力列のペアに対応する入力列のペアが特定されるため、記憶部１１内の構造体が特定されて構造体の並べ替えが行われる。
【００６１】
このように、本実施例では、インデックスとして構造体の総数に対応する値を用いるのではなく、マルチウェイ・マージの入力列の数に対応する値を用いる。そのため、データサイズが大きくなり構造体の総数が増えたような場合であっても、入力列の数を変えない限りインデックスのビット数は変わらない。また、インデックスのビット数が少なくなることに伴いペアのビット数を減らせば、ＳＩＭＤ命令での並列度が向上する。
【００６２】
ここで、例えば、キーのビット数が３２ビットで、ペアのビット数を３２ビットにするためにキーの下位のビット部分を削って、キーを２９ビットにした場合について考える。この場合、２９ビットでは同じ値のキーと判定されたとしても、３２ビットでみると異なる値のキーである場合が存在する。即ち、キーの下位部分を削ったことにより、本来は異なる値であるキー同士が同じ値であると判定される場合がある。このような判定が行われると、マージ処理にて誤った並べ替えが行われることが考えられる。
【００６３】
そのため、実際のキーのビット数を削ってマージ処理を行った場合には、下位部分を削っていない本来のキーの値を用いて、マージ結果が正しいか否かを確認する処理が行われる。例えば、並べ替え実行部１４は、マルチウェイ・マージで生成された出力列をもとに構造体を並べ替える前に、出力列に含まれるペアの本来のキーの値を比較して、出力列でのマージ結果が正しいか否かを確認する処理を行う。また、例えば、並べ替え実行部１４は、各段の処理を実行して、最後の段の処理にて多数の構造体の全てが連続的にソートされたソート済み配列を生成した後に、本来のキーの値を比較して、並べ替えたソート結果が正しいか否かを確認することとしても良い。
【００６４】
また、マージ制御部１５は、入力列に含まれる構造体の数に応じてキーのビット数を変えることとしても良い。具体的には、入力列の構造体の数が所定の閾値に達するまでは、マージ制御部１５は、例えば、ペアのビット数が３２ビットの整数となるようにキーのビット数を決定する。一方、マルチウェイ・マージの処理が何段か行われて、入力列の構造体の数が所定の閾値を超えた場合には、マージ制御部１５は、例えば、ペアのビット数が６４ビットの整数となるようにキーのビット数を決定する。本実施の形態では、ペアとインデックスとの組み合わせの第１のビット数の一例を３２ビットとし、第２のビット数の一例を６４ビットとする。
【００６５】
マルチウェイ・マージの処理を何段か実行する処理において、入力列に含まれる構造体の数が少ない初期段階では、キーの下位のビット部分をインデックスに割り当ててキーのビット数を削っても、異なるキー同士が同じ値であると判定される可能性が低い。そのため、入力列の構造体の数が所定の閾値以下の場合には、ペアのビット数を、例えば３２ビットに抑えることで、１２８ビットＳＩＭＤ命令にて４並列処理が可能になる。
【００６６】
一方、マルチウェイ・マージの処理が何段か行われて、入力列に含まれる構造体の数が増えてくると、キーの上位側のビット数のみでは、異なるキー同士が同じ値であると判定される可能性が高くなる。そのため、入力列の構造体の数が所定の閾値より多い場合には、マージ制御部１５は、ペアのビット数を３２ビットから６４ビットにしてキーのビット数を増やす。このようにすることで、１２８ビットＳＩＭＤ命令での並列処理数は４から２に減るが、キーのビット数を増やさない場合と比較して、マージ処理での誤った並べ替えが抑制される。
【００６７】
＜マージソート処理装置のハードウェア構成例＞
最後に、マージソート処理装置１０のハードウェア構成について説明する。図６は、本実施の形態に係るマージソート処理装置１０を構成するのに好適なハードウェア構成例を示す図である。ここでは、コンピュータに適用する場合について説明する。図６に示すコンピュータは、演算手段であるＣＰＵ１０ａと、主記憶手段であるメモリ１０ｃを備える。また、外部デバイスとして、磁気ディスク装置（ＨＤＤ：Hard Disk Drive）１０ｇ、ネットワーク・インターフェイス１０ｆ、ディスプレイ装置を含む表示機構１０ｄ、音声機構１０ｈ、キーボードやマウス等の入力デバイス１０ｉ等を備える。
【００６８】
図６に示す構成例では、メモリ１０ｃおよび表示機構１０ｄは、システム・コントローラ１０ｂを介してＣＰＵ１０ａに接続されている。また、ネットワーク・インターフェイス１０ｆ、磁気ディスク装置１０ｇ、音声機構１０ｈおよび入力デバイス１０ｉは、Ｉ／Ｏコントローラ１０ｅを介してシステム・コントローラ１０ｂと接続されている。各構成要素は、システム・バスや入出力バス等の各種のバスによって接続される。
【００６９】
また、図６において、磁気ディスク装置１０ｇにはＯＳのプログラムやアプリケーション・プログラムが格納されている。そして、これらのプログラムがメモリ１０ｃに読み込まれてＣＰＵ１０ａに実行されることにより、本実施の形態に係るマージソート処理装置１０における入力列構成部１２、マージ実行部１３、並べ替え実行部１４、マージ制御部１５の機能が実現される。また、例えば、メモリ１０ｃ等の記憶手段により、記憶部１１が実現される。
【００７０】
なお、図６は、本実施の形態が適用されるのに好適なコンピュータのハードウェア構成を例示するに過ぎない。本実施の形態は、マルチウェイ・マージを用いて多数のデータからなる配列に対してマージソートの処理を行う機能を有する装置に広く適用できるものであり、図示の構成においてのみ本実施の形態が実現されるのではない。
【００７１】
また、本実施の形態では、ＳＩＭＤ命令を用いてマージ処理を実行することとしたが、このような構成に限られるものではない。ＳＩＭＤ命令を用いることにより並列処理が可能になり、効率良くマージ処理が実行される。一方、本実施の形態においてＳＩＭＤ命令を用いない場合、ＳＩＭＤ命令の並列処理による効果は得られないが、例えばメモリコピーのオーバーヘッドやキャッシュミスの発生は抑制される。
【００７２】
さらに、本実施の形態において、マージソート処理装置１０は、マージソート処理装置１０の処理が開始される最初の段において、多数の構造体に対して、Ｎ個の構造体を入力列の対象としたマルチウェイ・マージの処理を実行することとしたが、このような構成に限られるものではない。例えば、マージソート処理装置１０は、本実施の形態に係るマージソートとは別のアルゴリズムを用いて多数の構造体からなる配列の中の構造体をソートする処理を行った後、本実施の形態に係るマージソートの最初の段の処理を行うこととしても良い。この場合、本実施の形態に係る最初の段のマルチウェイ・マージの処理では、１つの構造体、または複数の構造体をソートしたソート済み配列を、１個の入力列の対象として、Ｎ個の入力列から１個の出力列を生成する処理が行われることとなる。また、マージソート処理装置１０は、最初の段において、多数の構造体からなる配列の中の１つの構造体及びソート済み配列の数に応じて、マルチウェイ・マージの処理を複数回繰り返し実行することとなる。
【００７３】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００７４】
１０…マージソート処理装置、１１…記憶部、１２…入力列構成部、１３…マージ実行部、１４…並べ替え実行部、１５…マージ制御部
【図１】
0006380952.tif 000002
【図２】
0006380952.tif 000003
【図３】
0006380952.tif 000004
【図４】
0006380952.tif 000005
【図５】
0006380952.tif 000006
【図６】
0006380952.tif 000007