(57)【要約】【課題】オンラインアルゴリズム型のマージソートの処理において、記憶装置の所要量の削減を可能にした情報処理装置を提供する。【解決手段】オンライン型アルゴリズムを利用してストリームデータをマージソートする情報処理装置であって、ストリームデータとして入力され、所定のルールにしたがって予め別々にソートされた前半部分および後半部分からなるデータのうち、少なくとも前半部分を記憶する記憶部と、後半部分および前半部分のデータをマージソートして出力するソート処理部とを有し、ソート処理部は、記憶部において、前半部分を記憶する領域と後半部分を記憶する領域とで共用する構成である。【選択図】図１
2014211682.tif 000002
【特許請求の範囲】
【請求項１】
オンライン型アルゴリズムを利用してストリームデータをマージソートする情報処理装置であって、
前記ストリームデータとして入力され、所定のルールにしたがって予め別々にソートされた前半部分および後半部分からなるデータのうち、少なくとも該前半部分を記憶する記憶部と、
前記後半部分および前記前半部分のデータをマージソートして出力するソート処理部と、を有し、
前記ソート処理部は、前記記憶部において、前記前半部分を記憶する領域と前記後半部分を記憶する領域とで共用する、情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記記憶部は、所定の順序で配置され、データ数が「前記前半部分のデータ数＋１」のデータを格納するための複数のレジスタを有し、
前記ソート処理部は、
前記前半部分のデータを前記所定のルールに準じて前記複数のレジスタに順次シフトさせて格納し、前記後半部分のデータが１つ入力される度に、前記複数のレジスタのうち、順序が最初のレジスタに該データを格納し、該後半部分の先頭のデータと順序が最後のレジスタに格納されたデータとの大きさを比較し、前記所定のルールに基づいて１つのデータを選択して出力し、前記記憶部に残されたデータを前記順序が最後のレジスタの方にレジスタ間でシフトさせる、情報処理装置。
【請求項３】
請求項２に記載の情報処理装置において、
前記ソート処理部は、
入力されるデータの数をカウントするカウンタと、
前記入力されるデータにラベルを付与し、前記カウンタによるカウント値が所定の値になると前記ラベルを更新するラベル生成部と、
入力される順序が隣り合う２つのデータの前記ラベルが所定の条件を満たす場合、前記複数のレジスタのデータのうち、前記後半部分の先頭のデータと前記順序が最後のレジスタに格納されたデータとの大きさを比較し、前記所定のルールに基づいて１つのデータを選択して出力し、前記２つのデータの前記ラベルが所定の条件を満たさない場合、前記順序が最後のレジスタに格納されたデータを出力する比較選択部と、
前記比較選択部の出力結果に基づいて、前記記憶部に残されたデータを前記順序が最後のレジスタの方にレジスタ間でシフトさせる制御部と、を有する情報処理装置。
【請求項４】
請求項２に記載の情報処理装置において、
前記ソート処理部は、
入力されるデータの数をカウントするとともに該データにラベルを付与し、カウント値が所定の値に達すると前記ラベルを更新するラベル生成部と、
前記複数のレジスタに対応して設けられた、複数のセレクタおよび複数の制御部と、
前記複数のセレクタの出力の論理和を出力するバスと、
前記複数の制御部から受信する制御信号により、前記バスから受け取るデータと前記順序が最後のレジスタに格納されたデータとの大きさを比較するか否かを判定し、該比較の結果または前記制御信号に基づいて、出力するデータを決定する比較選択部と、
前記比較選択部の比較結果を前記複数の制御部に出力する分配部と、を有し、
前記複数の制御部のそれぞれは、対応するレジスタと隣り合うレジスタの２つのデータの前記ラベルが前記所定の条件を満たすか否かを示す前記制御信号を、対応するセレクタと前記比較選択部に出力し、該制御信号と前記比較結果とに基づいて、対応するレジスタに格納されたデータを順序が次のレジスタにシフトさせるか否かを判断し、
前記複数のセレクタのそれぞれは、対応する前記制御部から受信する前記制御信号にしたがって、対応するレジスタに格納されたデータまたは０を選択して前記バスに出力し、
前記比較選択部は、前記複数の制御部から受信する前記制御信号のうち、いずれか１つが前記所定の条件を満たすものである場合、前記バスから受け取るデータと前記順序が最後のレジスタに格納されたデータとの大きさを比較し、前記所定のルールに基づいて１つのデータを選択して出力し、前記制御信号が前記所定の条件を満たすものでない場合、前記順序が最後のレジスタに格納されたデータを出力する、情報処理装置。
【請求項５】
オンライン型アルゴリズムを利用してストリームデータをマージソートする情報処理装置による情報処理方法であって、
所定のルールにしたがって予め別々にソートされた前半部分および後半部分からなるデータのうち、前記ストリームデータとして入力される前記前半部分のデータを前記情報処理装置の記憶部に格納し、
前記ストリームデータとして入力される前記後半部分のデータと前記記憶部に格納された前記前半部分のデータをマージソートして出力し、
前記マージソートを行う際、前記記憶部において、前記前半部分を記憶する領域と前記後半部分を記憶する領域とで共用する、情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のデータを並び替える技術、特に、オンライン型アルゴリズムを利用してストリームデータをソートする技術に関する。
【背景技術】
【０００２】
従来のマージソータをストリームデータに対してオンライン型アルゴリズムで実装する場合では、マージソータの各段に、該当段におけるマージソート対象のデータ個数、すなわち、第ｎ段の場合では２＾（ｎ−１）で２組、つまり２＾ｎ個のデータに相当する記憶装置が必要であった。
【０００３】
従来のマージソートの一例が非特許文献１に開示されている。図７を参照して、非特許文献１に開示されたマージソートの手順を説明する。マージソートは、各１個のデータの比較を行う１段目と、１段目の結果を各２個ずつ２組にして一時的に格納し、これを比較しつつ併合する２段目と、２段目の結果を各４個ずつ２組にして一時的に格納し、これを比較しつつ併合する３段目とを有する構成である。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“マージソート［Ｍｅｒｇｅ Ｓｏｒｔ］”、［ｏｎｌｉｎｅ］、［平成２５年４月２日検索］、インターネット＜ＵＲＬ：http:// www.codereading.com/ algo_and_ds/ algo/ merge_sort. html＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特に、絶え間なく到来するデータに対して、常に停滞することなくソートを行い続けるマージソートのオンライン実装では、以下に説明するように、段数が増えることにより記憶装置の所要量の増大が避けられない。
【０００６】
初段には、比較するデータ各１個のための記憶装置が必要であり、比較の結果、時間的に指定の大小順になるように出力する機能を備え、第２段には、比較するデータ各２個のための記憶装置が必要であり、比較の結果、時間的に指定の大小順になるように出力する機能を備えている。一般に、第ｎ段には、比較するデータ各（２＾（ｎ−１））個のための記憶装置が必要であり、比較の結果、時間的に指定の大小順になるように出力する機能を備えることが必要であった。これは、各段でデータ比較を進めていく途中で、２つデータ列のどちらが、どれだけ残るかを、予め決めることができないため、どちらについても、全体を格納できる記憶容量を考慮して第ｎ段に２組の（２＾（ｎ−１））個の比較対象のデータを保持するための記憶装置を用意しなければならないことに起因する。オンライン型実装に期待される間断ない動作のためには、これらの総和の記憶装置を備えることが必要である。
【０００７】
また、処理対象となるデータの増大に対して、ハードウェアとして必要な記憶装置の所要量が増大してしまうという問題がある。
【０００８】
本発明は上述したような技術が有する問題点を解決するためになされたものであり、オンラインアルゴリズム型のマージソートの処理において、記憶装置の所要量の削減を可能にした情報処理装置および情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するための本発明の情報処理装置は、オンライン型アルゴリズムを利用してストリームデータをマージソートする情報処理装置であって、
前記ストリームデータとして入力され、所定のルールにしたがって予め別々にソートされた前半部分および後半部分からなるデータのうち、少なくとも該前半部分を記憶する記憶部と、
前記後半部分および前記前半部分のデータをマージソートして出力するソート処理部と、を有し、
前記ソート処理部は、前記記憶部において、前記前半部分を記憶する領域と前記後半部分を記憶する領域とで共用する構成である。
【００１０】
また、本発明の情報処理方法は、オンライン型アルゴリズムを利用してストリームデータをマージソートする情報処理装置による情報処理方法であって、
所定のルールにしたがって予め別々にソートされた前半部分および後半部分からなるデータのうち、前記ストリームデータとして入力される前記前半部分のデータを前記情報処理装置の記憶部に格納し、
前記ストリームデータとして入力される前記後半部分のデータと前記記憶部に格納された前記前半部分のデータをマージソートして出力し、
前記マージソートを行う際、前記記憶部において、前記前半部分を記憶する領域と前記後半部分を記憶する領域とで共用するものである。
【発明の効果】
【００１１】
本発明によれば、記憶装置の所要量を削減でき、処理対象の増大に対するハードウェアの増大を緩和できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態の情報処理装置の一構成例を示すブロック図である。
【図２】第１の実施形態のマージソータの第ｎ段の構成例を示す図である。
【図３】第１の実施形態の情報処理装置によるマージソートの動作手順を示すフローチャートである。
【図４】第ｎ段の入力となるデータの時系列の一例を示す図である。
【図５】第ｎ段の出力となるデータの時系列の一例を示す図である。
【図６】第２の実施形態のマージソータの一構成例を示すブロック図である。
【図７】従来のマージソートの手順を説明するための図である。
【発明を実施するための形態】
【００１３】
オンラインアルゴリズム型のマージソータを構成する、本発明の情報処理装置および情報処理方法について、実施形態を説明する。
【００１４】
（第１の実施形態）
本実施形態の情報処理装置の構成を説明する。本実施形態は、第１段から第ｎ段（ｎは２以上の整数）のマージソータを有するオンラインアルゴリズム型のマージソータの場合である。図１は本実施形態の情報処理装置の一構成例を示すブロック図である。
【００１５】
図１に示すように、情報処理装置１０は、前段のソータから到来するストリームデータを受け付ける入力部１１と、マージソートの対象となるデータを保持する記憶部１２と、マージソートを実行するソート処理部１３と、マージソート後のデータを順に出力する出力部１４とを有する。ソート処理部１３は、プログラムにしたがって処理を実行するＣＰＵ（Central Processing Unit）（不図示）と、プログラムを記憶するメモリ（不図示）とを有する。
【００１６】
図２は本実施形態のマージソータの第ｎ段の構成例を示す図である。ここで、第（ｎ−１）段でソートされたデータの長さをＮとすると、Ｎ＝２＾（ｎ−１）である。
【００１７】
第ｎ段のマージソータは、図２に示すように、カウンタ２１と、ラベル生成部２２と、レジスタＲ＿０〜Ｒ＿Ｎと、比較選択部２３と、制御部２４とを有する構成である。図１に示したソート処理部１３におけるＣＰＵ（不図示）がプログラムにしたがって処理を実行することで、図２に示すカウンタ２１、ラベル生成部２２、比較選択部２３および制御部２４が情報処理装置１０に仮想的に構成される。レジスタＲ＿０〜Ｒ＿Ｎが図１に示した記憶部１２に含まれている。
【００１８】
以下では、カウンタ２１がカウントする値をｃとし、ラベル生成部２２が生成するラベルをＬとする。
【００１９】
ｋを０からＮの任意の整数とすると、各レジスタＲ＿ｋは、ラベル生成部２２で付与されるラベルの値を記録するためのフィールドＬ＿ｋと、比較対象のデータを記録するためのフィールドｖ＿ｋからなる。
【００２０】
カウンタ２１は、第（ｎ−１）段から出力されるデータが入力される度に、カウント値ｃを「ｃ＋１」に更新する。カウンタ２１は、ｃ＝Ｎになると、カウント値ｃをリセットして０にする。
【００２１】
ラベル生成部２２は、第（ｎ−１）段から出力されるデータが入力される度に、データにラベルＬを付与する。また、ラベル生成部２２は、カウント値ｃを監視し、ｃ＝Ｎになると、データに付与するラベルを（Ｌ＋１）ｍｏｄ ４の値に更新する。
【００２２】
比較選択部２３は、第（ｎ−１）段でソートされた、前半部分および後半部分からなるデータのうち、前半部分がレジスタＲ＿１〜Ｒ＿Ｎに格納された後、後半部分のデータが新たにレジスタＲ＿０に格納される度に、レジスタＲ＿１〜Ｒ＿ｋに格納された後半部分の先頭のデータとｖ＿Ｎの値を比較し、昇順に出力する場合には小さい方を出力値とし、降順に出力する場合には大きい値を出力値とする。昇順および降順がソートに関するルールに相当し、本実施形態では、昇順に出力する場合で説明する。
【００２３】
具体的には、比較選択部２３は、各レジスタＲ＿ｋのフィールドＬ＿ｋを参照し、＜条件式（１）＞「隣接する２つの値（Ｌ＿ｋ，Ｌ＿（ｋ＋１））について（１，０）または（３，２）となる箇所がある」を満たすｋがあるか否かを調べ、該当するｋがあると、＜条件式（２）＞「ｖ＿ｋ＜ｖ＿Ｎ」を満たすか否か判定し、条件式（２）を満たしていると、ｖ＿ｋの値を出力値とする。一方、比較選択部２３は、条件式（１）を満たさない、または条件式（１）を満たしても条件式（２）を満たさない場合、ｖ＿Ｎの値を出力値とする。さらに、比較選択部２３は、その出力結果を制御部２４に通知する。
【００２４】
制御部２４は、ラベルの付与されたデータをレジスタＲ＿１〜Ｒ＿Ｎに順次シフトさせて格納する。また、制御部２４は、比較選択部２３から受け取る出力結果がｖ＿ｋを出力したことを示していると、レジスタＲ＿１からＲ＿ｋのそれぞれの値をレジスタＲ＿（ｋ−１）の値に更新する。また、制御部２４は、受け取った出力結果がｖ＿Ｎを出力したことを示していると、レジスタＲ＿１からＲ＿Ｎのそれぞれの値をレジスタＲ＿（ｋ−１）の値に更新する。そして、制御部２４は、出力結果がいずれの場合でも、Ｒ＿０の値を新たに入力されたデータの値ｘに更新する。
【００２５】
従来のオンラインアルゴリズム型のマージソータでは、比較対象のデータを保持するために、第ｎ段において、（２＾（ｎ−１））個のレジスタを含む記憶装置を２組、すなわち（２＾ｎ）個のレジスタを用意していた。この記憶装置が２組必要になるのは、最悪の場合、どちらか一方の記憶装置のデータを全て、他方の記憶装置に後続して出力しなければならず、前半あるいは後半どちらがどれだけ残るかは、処理毎に変わるからである。しかしながら、処理の途中で、双方の記憶装置には空きができる。
【００２６】
これに対して、本実施形態の構成では、図２に示すように、記憶装置はＲ＿０〜Ｒ＿Ｎで十分であり、該当する第ｎ段には１組の（２＾（ｎ−１）＋１）個のレジスタを含む記憶装置を用意すればよい。そのため、本実施形態では、各段における記憶装置の所要量を削減でき、空き容量を再利用することができる。
【００２７】
なお、本実施形態では、ＣＰＵ（不図示）がプログラムにしたがって処理を実行することで、カウンタ２１、ラベル生成部２２、比較選択部２３および制御部２４が情報処理装置１０に仮想的に構成される場合で説明しているが、これらの構成のうち、一部または全部がそれぞれ専用の回路で構成されてもよい。
【００２８】
次に、本実施形態の情報処理装置による、第ｎ段のマージソートの動作を説明する。ここでは、ｎ＝３の場合で説明する。
【００２９】
図３は本実施形態の情報処理装置によるマージソートの動作手順を示すフローチャートである。ここでは、昇順にソートする場合で説明する。降順にソートする場合は、図３に示すフローのステップ１０６における判定式「ｖ＿ｋ＜ｖ＿Ｎ」を「ｖ＿ｋ＞ｖ＿Ｎ」に置き換えればよい。
【００３０】
カウント値ｃおよびラベルＬの初期値を０とし、各フィールドＬ＿ｋ（ｋ＝０，・・・，Ｎ）の初期値を０とする。各フィールドｖ＿ｋ（ｋ＝０，・・・，Ｎ）の初期値は、無効値であり任意であるが、例えば、０とする。
【００３１】
第（ｎ−１）段から出力されるデータが１つ入力される度に、ソート処理部１３は、図３に示す動作フローを実行する。第（ｎ―１）段からデータが入力され、この値を「ｘ」とすると、カウンタ２１はカウント値ｃを「ｃ＋１」に更新する（ステップ１０１）。カウンタ２１およびラベル生成部２２は、ｃ＝Ｎであるか否かの判定を行い（ステップ１０２）、ｃ＝Ｎの場合、カウンタ２１はカウント値ｃをリセットし、ラベル生成部２２はラベルの値を更新する（ステップ１０２）。ステップ１０２において、ｃ＝Ｎでない場合、ラベルＬは更新されず、カウント値ｃはリセットされない。
【００３２】
続いて、ソート処理部１３は、図２に示したレジスタＲ＿０〜Ｒ＿Ｎに記録される情報について、次のように更新の判定を行う。
【００３３】
制御部２４は、ラベルの付与されたデータをレジスタＲ＿０〜Ｒ＿Ｎに順次シフトさせて格納し、比較選択部２３は、全てのレジスタＲ＿０〜Ｒ＿Ｎに記録されたラベルについて、＜条件式（１）＞を満たすか否か判定する（ステップ１０４）。比較選択部２３は、該当するｋの値を取得する。
【００３４】
条件式（１）を満たすｋがある場合、比較選択部２３は、該当するｋを取得し、取得したｋに対応するｖ＿ｋの値が、＜条件式（２）＞を満たすか否か判定する（ステップ１０５）。条件式（２）を満たす場合、比較選択部２３は、ｖ＿ｋの値を出力値ｙとし、その出力結果を制御部２４に通知する。制御部２４は、比較選択部２３から受け取る出力結果により、レジスタＲ＿１〜Ｒ＿ｋのそれぞれに保持される値を、レジスタＲ＿（ｋ−１）に保持された値に更新する。その際、制御部２４は、レジスタＲ＿０のフィールドＬ＿０にラベル生成部２２によって付与されたラベルＬの値を格納し、フィールドｖ＿０にｘの値を格納して、レジスタＲ＿０を更新する（ステップ１０６）。レジスタＲ＿（ｋ−１）に格納されていたデータがレジスタＲ＿ｋにシフトする。これにより、昇順が維持されたままレジスタＲ＿Ｎの方にレジスタ間でデータがシフトする。
【００３５】
例えば、レジスタＲ＿１のｖ＿１に保持されていた値が出力値ｙとなった場合、レジスタＲ＿１に保持される値がレジスタＲ＿０に保持されていた値に更新され、新たに入力されたデータの値ｘがレジスタＲ＿０のフィールドｖ＿０に格納される。
【００３６】
一方、ステップ１０４の判定で条件式（１）を満たさない場合、または、条件式（１）を満たしてもステップ１０５の判定で条件式（２）を満たさない場合、比較選択部２３は、ｖ＿Ｎの値を出力値ｙとし、その出力結果を制御部２４に通知する。制御部２４は、比較選択部２３から受け取る出力結果により、レジスタＲ＿１〜Ｒ＿Ｎのそれぞれに保持される値を、レジスタＲ＿（ｋ−１）に保持された値に更新する。その際、制御部２４は、レジスタＲ＿０のフィールドＬ＿０にラベル生成部２２によって付与されたラベルＬの値を格納し、フィールドｖ＿０にｘの値を格納して、レジスタＲ＿０を更新する（ステップ１０７）。
【００３７】
このようにして、第ｎ段のマージソータは、第（ｎ−１）段から入力されるデータに対して、カウンタ２１で計数し、ラベルＬを付与し、上述した論理判断にしたがってレジスタＲ＿０〜Ｒ＿Ｎに順次格納して更新することで、Ｎ＝２＾（ｎ−１）個のソートの済んだ２つのデータ系列を、昇順にマージして、２＾ｎ個のソートの済んだ１つのデータ系列を生成する。
【００３８】
次に、図３に示した手順の具体例を、図４および図５を参照して説明する。
【００３９】
図４は第ｎ段の入力となるデータの時系列の一例を示す図である。図５は第ｎ段の出力となるデータの時系列の一例を示す図である。説明を簡単にするために、ｎ＝３とする。
【００４０】
第ｎ段の入力となるデータ系列は、すでに（２＾（ｎ−１））の系列についてソートの済んでいる２つのデータ系列を連結したものである。ｎ＝３の場合の出力は、図４に示すように、ソートの済んだ４つのデータで構成されるデータ系列を、２つ連結させたものになる。
【００４１】
ｎ＝３の場合の第ｎ段のマージソータが達成する機能は、図５に示すように、Ｎ＝４個（＝２＾（ｎ−１）個）のソートの済んだ２つのデータ系列を昇順にマージして、８個（＝２＾ｎ個）のソートの済んだ１つのデータ系列を生成することである。
【００４２】
第３段のマージソータにおいて、初期化直後に、図４に示すデータ系列が入力されるものとして説明する。
【００４３】
時刻ｔ0に、値ｘ＝２のデータが入力されると、カウンタ２１が計数を行う。カウント値ｃの初期値は０なので、このデータの入力により、カウント値ｃは１となる。続いて、カウンタ２１およびラベル生成部２２がｃ＝Ｎであるか否かの判定を行うが、ｃ＝Ｎではないので、カウント値ｃ＝１のままである。また、入力されたデータに対して、ラベル生成部２２が初期値０のラベルＬを付与する。
【００４４】
次の時刻ｔ0+1に値ｘ＝３のデータが入力されるとき、制御部２４はレジスタＲ＿０のフィールドＬ＿０に「０」を格納し、フィールドｖ＿０にデータ「２」を格納する。このようにして、時刻ｔ0+3までに最初の４つのデータが順にレジスタに格納される。
【００４５】
時刻ｔ0+4に、［数１］のように最初の４つのデータがレジスタＲ＿０〜Ｒ＿３に格納されたところで、値ｘ＝１のデータが入力される。
【００４６】
【数１】
2014211682.tif 000003
【００４７】
値ｘ＝１のデータが入力されたとき、ｃ＝Ｎが成立するので、ラベルＬが更新される。次の時刻ｔ0+5に値ｘ＝５のデータが入力されるとき、制御部２４はレジスタＲ＿０のフィールドＬ＿０に「１」を格納し、フィールドｖ＿０にデータ「１」を格納する。レジスタＲ＿０〜Ｒ＿４に保持される値は［数２］のようになる。
【００４８】
【数２】
2014211682.tif 000004
【００４９】
値ｘ＝５のデータが入力されるとき、［数２］を参照すると、条件式（１）がｋ＝０において成立し、さらに、＜条件式（２）＞も成立するため、ｖ＿０＝１がｙとして出力される。ステップ１０６において、レジスタＲ＿０のみが更新される。その結果、レジスタＲ＿０〜Ｒ＿４に保持される値は［数３］のようになる。
【００５０】
【数３】
2014211682.tif 000005
【００５１】
これ以降、時刻ｔ0+12まで値ｘのデータが入力される度に、ソート処理部１３が図３に示した動作フローを実行する。時刻ｔ0+6〜ｔ0+12における、レジスタＲ＿０〜Ｒ＿４に保持される値および出力値ｙを［数４］から［数１０］に示す。なお、図４に示さないデータの値を「＊」で表記する。
【００５２】
【数４】
2014211682.tif 000006
【００５３】
【数５】
2014211682.tif 000007
【００５４】
【数６】
2014211682.tif 000008
【００５５】
【数７】
2014211682.tif 000009
【００５６】
【数８】
2014211682.tif 000010
【００５７】
【数９】
2014211682.tif 000011
【００５８】
【数１０】
2014211682.tif 000012
【００５９】
次の時刻では、ｖ＿４に格納された「＊１」の値とｖ＿０に格納された「＊５」の値の比較が行われる。以降、第３段では、間断なく到来する図４と同周期の入力に対して、ソート処理部１３は、第３段の処理を行い、図５と同周期の出力を発生させる。この出力は、第４段の入力となる。
【００６０】
以上のように、レジスタＲ＿０〜Ｒ＿４、すなわち第ｎ段において、（２＾（ｎ−１）＋１）個のレジスタ（記憶装置）によって、マージソートの処理が行われることがわかる。
【００６１】
本実施形態では、マージソートのオンラインアルゴリズムを実装した場合に前半データと後半データのそれぞれの記憶のために必要となる記憶装置を共用することにより、記憶装置の所要量が概ね半分で済み、記憶装置の所要量を削減することが可能となる。その結果、処理対象の増大に対するハードウェアの増大を緩和できる。
【００６２】
（第２の実施形態）
本実施形態は、第１の実施形態で説明したマージソータとは異なる構成の場合である。なお、本実施形態の情報処理装置の全体は、図１のブロック図に示した装置と同様であり、本実施形態では、第１の実施形態と同様な構成についての詳細な説明を省略し、第１の実施形態と異なる点を説明する。
【００６３】
本実施形態のマージソータの構成を説明する。図６は本実施形態のマージソータの第ｎ段の構成例を示すブロック図である。
【００６４】
図６に示すように、第ｎ段のマージソータは、ラベル生成部３１と、レジスタＲ＿０〜Ｒ＿Ｎと、制御部３２＿ｋと、セレクタ３３＿ｋと、バス３４と、比較選択部３５と、分配部３６とを有する。
【００６５】
図１に示したソート処理部１３におけるＣＰＵ（不図示）がプログラムにしたがって処理を実行することで、図６に示すラベル生成部３１、制御部３２＿０〜３２＿Ｎ、セレクタ３３＿０〜３３＿Ｎ、バス３４、分配部３６および比較選択部３５が情報処理装置１０に仮想的に構成される。レジスタＲ＿０〜Ｒ＿Ｎが図１に示した記憶部１２に含まれている。
【００６６】
ラベル生成部３１は、カウント値ｃを計数するカウンタ２１およびラベルＬを生成するラベル生成部２２を有し、これらの値を更新する機能を有する。
【００６７】
レジスタＲ＿ｋは、ラベルＬを保持するためのフィールドＬ＿ｋと、比較対象のデータを保持するためのフィールドｖ＿ｋとを有する。ｋ＝２〜Ｎの場合で、各レジスタＲ＿ｋの入力はレジスタＲ＿（ｋ−１）の出力と接続されている。
【００６８】
制御部３２＿ｋは、ラベルの付与されたデータをレジスタＲ＿０〜Ｒ＿Ｎに順次シフトさせて格納し、条件式（１）を満たすか否か、（Ｌ＿ｋ，Ｌ＿（ｋ＋１））を調べ、条件式（１）の真偽に対応する制御信号をセレクタ３３＿ｋに送信することでセレクタ３３＿ｋを制御する。具体的には、制御部３２＿ｋは、条件式（１）が満たされる場合、「真」であることを示す第１の制御信号をセレクタ３３＿ｋに送信し、条件式（１）が満たされない場合、「偽」であることを示す第２の制御信号をセレクタ３３＿ｋに送信する。図６に示すように、制御部３２＿０〜３２＿Ｎから出力される制御信号は比較選択部３５にも伝送される。
【００６９】
また、制御部３２＿ｋは、比較選択部３５の比較結果に対応して、第１の実施形態と同様に、レジスタＲ＿ｋが保持するデータを更新する。この更新処理の詳細は後述する。
【００７０】
セレクタ３３＿ｋは、制御部３２＿ｋから受信する制御信号にしたがって、レジスタＲ＿ｋのｖ＿ｋの値または０を選択して出力する。具体的には、セレクタ３３＿ｋは、第１の制御信号を制御部３２＿ｋから受信すると、レジスタＲ＿ｋのｖ＿ｋの値を出力し、第２の制御信号を制御部３２＿ｋから受信すると、０の値を出力する。
【００７１】
バス３４は、セレクタ３３＿０〜３３＿Ｎの出力の論理和を求めて比較選択部３５に出力する。条件式（１）を満たすｋに対応するｖ＿ｋが、バス３４を介して、比較選択部３５に提供される。
【００７２】
比較選択部３５は、ｖ＿Ｎの値、制御部３２＿ｋからの制御信号、およびバス３４の出力値に基づいて、出力値ｙを決定し、比較結果ｄを分配部３６に出力する。具体的には、比較選択部３５は、制御部３２＿０〜３２＿Ｎから受信する制御信号により条件式（１）の真偽を判定し、真がある場合には、バス３４から受け取るｖ＿ｋの値とレジスタＲ＿Ｎのｖ＿Ｎの値を比較し、条件式（２）を満たすか否かを判定し、ｖ＿Ｎまたはｖ＿ｋの値をｙとして出力する。さらに、比較選択部３５は、条件式（２）の判定結果を比較結果ｄとして分配部３６に出力する。
【００７３】
例えば、データを昇順に並べる場合、ｖ＿ｋ＜ｖ＿Ｎであるとき、比較結果ｄは真となり、比較選択部３５はｖ＿ｋの値を出力値ｙとする。そして、ｖ＿ｋ＜ｖ＿Ｎでないとき、比較結果ｄは偽となり、比較選択部３５はｖ＿Ｎの値を出力値ｙとする。
【００７４】
分配部３６は、比較選択部３５から受信する比較結果ｄを制御部３２＿０〜３２＿Ｎに分配する。
【００７５】
ここで、制御部３２＿ｋによる、レジスタＲ＿ｋに格納される値の更新方法を説明する。
【００７６】
制御部３２＿ｋは、条件式（２）の判定結果を比較結果ｄとして分配部３６から受け取り、条件式（２）の判定結果が真であり、条件式（１）の判定結果が真である場合には、条件式（２）を満たすｋについて、ｋ以下のレジスタＲ＿ｋの値をＲ＿（ｋ−１）の値に更新し、レジスタＲ＿０については、入力されたデータの（Ｌ，ｘ）に更新する。全てのレジスタの各レジスタＲ＿ｋの入力はレジスタＲ＿（ｋ−１）の出力と接続されており、更新には、その値が用いられる。
【００７７】
一方、条件式（１）の判定結果が偽である場合、または、条件式（２）の判定結果が偽である場合には、全ての制御部３２＿０〜３２＿Ｎは、レジスタＲ＿１〜Ｒ＿Ｎの全てのレジスタの値をレジスタＲ＿（ｋ−１）の値に更新し、レジスタＲ＿０については、入力されたデータの（Ｌ，ｘ）に更新する。全てのレジスタの各レジスタＲ＿ｋの入力はレジスタＲ＿（ｋ−１）の出力と接続されており、更新には、その値が用いられる。
【００７８】
なお、制御部３２＿Ｎが判断対象として用いるＬ＿（Ｎ＋１）については、Ｒ＿（Ｎ＋１）として用意する必要はなく、Ｌ＿（Ｎ＋１）のみもしくは、固定値で「３」または「１」としておくこと等により、境界条件を打ち消すことができる。また、セレクタ３３＿Ｎに対応するｖ＿ｋがｖ＿Ｎに相当し、本実施形態では、必須の構成ではないため、図に示すことを省略している。
【００７９】
さらに、本実施形態では、ＣＰＵ（不図示）がプログラムにしたがって処理を実行することで、ラベル生成部３１、制御部３２＿０〜３２＿Ｎ、セレクタ３３＿０〜３３＿Ｎ、バス３４、分配部３６および比較選択部３５が情報処理装置１０に仮想的に構成される場合で説明したが、これらの構成のうち、一部または全部がそれぞれ専用の回路で構成されてもよい。
【００８０】
図６に示したマージソータが図２に示したマージソータと同様な機能を有し、本実施形態においても、図３に示した動作フローと同様な処理が実行されるため、本実施形態における動作手順についての詳細な説明を省略する。
【００８１】
本実施形態においても、第１の実施形態と同様な効果が得られる。また、本実施形態では、図６に示したように、第ｎ段は、構成単位（２＾ｎ＋１）個で構成され、この構成単位は、どの段であるかによらず同一である。そのため、予めこの構成単位を用意しておけば、需要に応じて即座に所定の第ｎ段を構成することが可能となる。つまり、マージソータの各段においてソート対象のデータを記憶する部品の設計が、その部品が使われるソータの段によって変わるということがなく、どの段に対しても共通化できる。各段の構成部品の規格を共通化することで、必要に応じて所定の段を構成する際に、設計変更を速やかに実行することが可能となる。
【符号の説明】
【００８２】
１０    情報処理装置
１２    記憶部
１３    ソート処理部
２１    カウンタ
２２、３１    ラベル生成部
２３、３５    比較選択部
２４、３２＿０〜３２＿Ｎ    制御部
３３＿０〜３３＿Ｎ    セレクタ
３６    分配部
【図１】
2014211682.tif 000013
【図２】
2014211682.tif 000014
【図３】
2014211682.tif 000015
【図４】
2014211682.tif 000016
【図５】
2014211682.tif 000017
【図６】
2014211682.tif 000018
【図７】
2014211682.tif 000019