| 【発明の名称】 |
データソート装置及び方法 |
| 【発明者】 |
【氏名】松井 信明
|
| 【要約】 |
【課題】大規模なランダムデータのソートを、高速に処理可能とするる。
【解決手段】メインメモリ104の指定されたメモリ空間の範囲にあるデータをソートするデータソート装置において、データ交換回路103は、指定されたメモリ空間の範囲内のデータを、基準データリードDMAC105によって読み出された設定された基準値に基づいて移動して、上記指定された範囲を2つのグループ範囲に分ける。そして、繰り返し制御回路101が、データ交換回路103で得られた各グループ範囲のデータについてデータ交換回路103による処理を実行させ、データソートを実現する。 |
【特許請求の範囲】
【請求項1】 指定されたメモリ空間上の範囲にあるデータをソートするデータソート装置であって、メモリ空間上の指定された範囲内のデータを、設定された基準値によって移動して、前記指定された範囲を2つのグループ範囲に分ける交換手段と、前記交換手段で得られた各グループ範囲について該交換手段を実行する制御手段とを備えることを特徴とするデータソート装置。 【請求項2】 前記交換手段は、前記メモリ空間上の指定された範囲内のデータを下位アドレスから上位アドレスへ向かって読み出し、基準値との比較によって移動すべきデータを検出する第1検出手段と、前記メモリ空間上の指定された範囲内のデータを上位アドレスから下位アドレスへ向かって読み出し、前記基準値との比較によって移動すべきデータを検出する第2検出手段と、前記第1及び第2検出手段で検出されたデータを入れ替える入替手段と、前記第1検出手段で比較されるデータの読み出しアドレスが、前記第2検出手段で比較されるデータの読出アドレスよりも上位になった場合に、当該交換手段による処理の終了と判断する判断手段とを備えることを特徴とする請求項1に記載のデータソート装置。 【請求項3】 前記交換手段において、前記第1及び前記第2検出手段は、同時に複数のデータを読み出して、前記基準値に基づいて移動すべきデータを検出することを特徴とする請求項2に記載のデータソート装置。 【請求項4】 前記交換手段において、前記第1及び第2検出手段は、それぞれ読み出した複数のデータを一時的に保持するプリフェッチバッファと、該プリフェッチバッファより読み出され、前記基準値との比較対象となる複数のデータを保持する比較バッファを含み、前記入替手段は、前記第1及び第2検出手段で検出されたデータを入れ替えるとともに、該第1及び第2検出手段の比較バッファ同士でデータを入れ替えることを特徴とする請求項3に記載のデータソート装置。 【請求項5】 前記交換手段において、前記第1及び第2検出手段は、それぞれ読み出した複数のデータを一時的に保持するプリフェッチバッファと、該プリフェッチバッファより読み出され、前記基準値との比較対象となる複数のデータを保持する比較バッファを含み、前記入替手段は、前記第1及び第2検出手段で検出されたデータを入れ替えるとともに、該第1及び第2検出手段間でプリフェッチバッファと比較バッファのデータを入れ替えることを特徴とする請求項3に記載のデータソート装置。 【請求項6】 前記交換手段で得られたグループのメモリ空間上における範囲の大きさが所定サイズ以下となったかを判定する判定手段と、前記判定手段により、所定サイズ以下と判定されたグループ範囲に対して、所定のソート処理を適用して当該グループのソート処理を完了する手段とを更に備えることを特徴とする請求項1に記載のデータソート装置。 【請求項7】 前記所定のソート処理は、バブルソート回路によって実行されることを特徴とする請求項6に記載のデータソート装置。 【請求項8】 処理の対象となるグループ範囲のデータをキャッシュするキャッシュ手段を更に備えることを特徴とする請求項1乃至7のいずれかに記載のデータソート装置。 【請求項9】 前記処理の対象となるグループ範囲のサイズに基づいて、前記キャッシュ手段の実行を制御する手段を更に備えることを特徴とする請求項8に記載のデータソート装置。 【請求項10】 請求項1乃至9のいずれかに記載のデータソート装置を複数有し、前記複数のデータソート装置にソートすべきメモリ空間の範囲を割り当てる割り当て手段を備えることを特徴とするデータソート装置。 【請求項11】 前記割り当て手段は、ソート処理情報を取得し、これに基づいてソートすべきメモリ空間の範囲を割り当てることを特徴とする請求項10に記載のデータソート装置。 【請求項12】 前記データ交換手段において、前記第1及び第2検出手段のそれぞれが、基準値と比較対象のデータが等価であった場合に、該比較対象のデータに含まれるポインタ情報から更なる比較対象データを取得する取得手段を備え、前記取得手段で取得した更なる比較対象データと、これに対応した基準データとの比較によって移動すべきデータを検出することを特徴とする請求項2に記載のデータソート装置。 【請求項13】 指定されたメモリ空間上の範囲にあるデータをソートするデータソート方法であって、メモリ空間上の指定された範囲内のデータを、設定された基準値によって移動して、前記指定された範囲を2つのグループ範囲に分ける交換工程と、前記交換工程で得られた各グループ範囲について該交換工程を実行する制御工程とを備え、前記交換工程は、前記メモリ空間上の指定された範囲内のデータを下位アドレスから上位アドレスへ向かって読み出し、基準値との比較によって移動すべきデータを検出する第1検出工程と、前記メモリ空間上の指定された範囲内のデータを上位アドレスから下位アドレスへ向かって読み出し、前記基準値との比較によって移動すべきデータを検出する第2検出工程と、前記第1及び第2検出工程で検出されたデータを入れ替える入替工程と、前記第1検出工程で比較されるデータの読み出しアドレスが、前記第2検出工程で比較されるデータの読出アドレスよりも上位になった場合に、当該交換工程による処理の終了と判断する判断工程とを備えることを特徴とするデータソート方法。 【請求項14】 前記交換工程において、前記第1及び前記第2検出工程は、同時に複数のデータを読み出して、前記基準値に基づいて移動すべきデータを検出することを特徴とする請求項13に記載のデータソート方法。 【請求項15】 前記交換工程において、前記第1及び第2検出工程は、それぞれ読み出した複数のデータをプリフェッチバッファに一時的に保持し、前記基準値との比較対象となる複数のデータを該プリフェッチバッファより読み出して比較バッファに保持することを含み、前記入替工程は、前記第1及び第2検出工程で検出されたデータを入れ替えるとともに、前記比較バッファ同士でデータを入れ替えることを特徴とする請求項14に記載のデータソート方法。 【請求項16】 前記交換工程において、前記第1及び第2検出工程は、それぞれ読み出した複数のデータをプリフェッチバッファに一時的に保持し、前記基準値との比較対象となる複数のデータを該プリフェッチバッファより読み出して比較バッファに保持することを含み、前記入替工程は、前記第1及び第2検出工程で検出されたデータを入れ替えるとともに、該第1及び第2検出工程間のプリフェッチバッファと比較バッファのデータを入れ替えることを特徴とする請求項14に記載のデータソート方法。 【請求項17】 前記交換工程で得られたグループのメモリ空間上における範囲の大きさが所定サイズ以下となったかを判定する判定工程と、前記判定工程により、所定サイズ以下と判定されたグループ範囲に対して、所定のソート処理を適用して当該グループのソート処理を完了する工程とを更に備えることを特徴とする請求項1に記載のデータソート方法。 【請求項18】 前記所定のソート処理は、バブルソート回路によって実行されることを特徴とする請求項17に記載のデータソート方法。 【請求項19】 処理の対象となるグループ範囲のデータをキャッシュするキャッシュ手段を設け、前記処理の対象となるグループ範囲のサイズに基づいて、前記キャッシュ手段の実行を制御する工程を更に備えることを特徴とする請求項13乃至18のいずれかに記載のデータソート方法。 【請求項20】 請求項13乃至19のいずれかに記載のデータソート方法を実行する為の複数のデータソート処理を並列に実行する工程を有し、前記複数のデータソート処理にソートすべきメモリ空間の範囲を割り当てる割り当て工程を備えることを特徴とするデータソート方法。 【請求項21】 前記割り当て工程は、ソート処理情報を取得し、これに基づいて各データソート装置にソートすべきメモリ空間の範囲を割り当てることを特徴とする請求項20に記載のデータソート方法。 【請求項22】 前記データ交換工程において、前記第1及び第2検出工程のそれぞれが、基準値と比較対象のデータが等価であった場合に、該比較対象のデータに含まれるポインタ情報から更なる比較対象データを取得する取得工程を備え、前記取得工程で取得した更なる比較対象データと、これに対応した基準データとの比較によって移動すべきデータを検出することを特徴とする請求項14に記載のデータソート方法。
|
【発明の詳細な説明】【0001】 【発明の属する技術分野】本発明は、メモリ上のデータをソートするデータソート装置及び方法に関する。 【0002】 【従来の技術】従来、データソート装置は、小規模なデータを並べ替えるためのバブルソートアルゴリズムをとるソート装置か、大規模データベースに用いるインサートソートアルゴリズムを採用したソート装置しか存在しない。これらのデータソート装置は大規模なランダムデータのソートには適さず、大規模なランダムデータを処理する場合には、ソフトウェアでソート処理を行っていた。 【0003】 【発明が解決しようとする課題】しかしながら、大規模なランダムデータをソートする場合には、CPUキャッシュのヒット率が低下してしまい、高速なソート処理が行えないという問題があった。 【0004】本発明は上記の問題に鑑みてなされたものであり、クイックソートアルゴリズムによるソート処理をハードウエアにて実行可能とし、大規模ランダムデータのソート処理を高速に行えるようにすることを目的とする。 【0005】 【課題を解決するための手段】上記の目的を達成するための本発明によるデータソート装置は以下の構成を備える。即ち、指定されたメモリ空間上の範囲にあるデータをソートするデータソート装置であって、メモリ空間上の指定された範囲内のデータを、設定された基準値によって移動して、前記指定された範囲を2つのグループ範囲に分ける交換手段と、前記交換手段で得られた各グループ範囲について該交換手段を実行する制御手段とを備える。 【0006】また、上記の目的を達成するための本発明によるデータソート方法は例えば以下の工程を備える。即ち、指定されたメモリ空間上の範囲にあるデータをソートするデータソート方法であって、メモリ空間上の指定された範囲内のデータを、設定された基準値によって移動して、前記指定された範囲を2つのグループ範囲に分ける交換工程と、前記交換工程で得られた各グループ範囲について該交換工程を実行する制御工程とを備え、前記交換工程は、前記メモリ空間上の指定された範囲内のデータを下位アドレスから上位アドレスへ向かって読み出し、基準値との比較によって移動すべきデータを検出する第1検出工程と、前記メモリ空間上の指定された範囲内のデータを上位アドレスから下位アドレスへ向かって読み出し、前記基準値との比較によって移動すべきデータを検出する第2検出工程と、前記第1及び第2検出工程で検出されたデータを入れ替える入替工程と、前記第1検出工程で比較されるデータの読み出しアドレスが、前記第2検出工程で比較されるデータの読出アドレスよりも上位になった場合に、当該交換工程による処理の終了と判断する判断工程とを備える。 【0007】 【発明の実施の形態】以下、添付の図面を参照して本発明の好適な実施形態を説明する。 【0008】[実施形態1]図1は実施形態1によるデータソート装置の構成を示したブロック図である。以下、本実施形態のデータソート装置の動作について図1を参照しながら説明する。 【0009】繰り返し制御回路101が起動されることによってソート処理が開始される。繰り返し制御回路101は初めにソートするエレメント範囲(被ソートデータ)を指定してデータ交換回路103を起動する。データ交換回路103が起動されると、制御回路117がまず、基準データリードDMAC105、昇順データリードDMAC107、降順データリードDMAC111を起動する。基準データリードDMAC105は、メインメモリ104から基準データを取得し、基準データバッファ106に格納する。なお、本例では、基準データとしてはエレメント範囲の中央値を用いるものとする。 【0010】昇順データリードDMAC107は、メインメモリ104から、ソートすべきエレメント範囲の最下位アドレス側から順にエレメントを取得してプリフェッチバッファ108に格納する。昇順データリードDMAC107はプリフェッチバッファ108がフルになるまでデータリードを繰り返し、フルになったならば次にプリフェッチバッファ108が解放されるまで待ち、解放された後に再度データリードを再開する。 【0011】プリフェッチバッファ108は、比較バッファ109が空いていればエレメントを比較バッファ109に送信する。比較バッファ109に保持されたエレメントは、比較器110によって基準データバッファ106に保持されたデータと比較され、もしエレメントの値が基準データよりも小さかったならば、次のエレメントが比較バッファ109にロードされ、次の比較が行われる。もしエレメントが基準データよりも大きかったならば、比較を停止し、降順データ比較器114が比較を停止するまで待機する。 【0012】すなわち、以上の処理では、メインメモリ104の設定されたエレメント範囲の上位側アドレスから順にエレメントが取得され、各々が基準値と比較され、エレメントの値が基準値よりも大きい場合に、その時点のアドレスと値が保持される。 【0013】同様に、降順データリードDMAC111は、メインメモリ104から、ソートすべきエレメント範囲の最上位アドレス側から順にエレメントを取得し、プリフェッチバッファ112に格納する。降順データリードDMAC111はプリフェッチバッファ112がフルになるまでデータリードを繰り返し、フルになったならば、次にプリフェッチバッファ112が解放されるまで待ち、解放された後に再度データリードを再開する。 【0014】プリフェッチバッファ112は、比較バッファ113が空いていればエレメントを比較バッファ113に送信する。比較バッファ113に保持されたエレメントは、比較器114によって基準データバッファ106に保持されたデータと比較され、もしエレメントの値が基準データの値よりも大きかったならば、次のエレメントが比較バッファ113にロードされ、次の比較が行われる。もしエレメントが基準データよりも小さかったならば、比較を停止し、昇順データ比較器110が比較を停止するまで待機する。 【0015】すなわち、以上の処理では、メインメモリ104の設定されたエレメント範囲の下位側アドレスから順にエレメントが取得され、各々が基準値と比較され、エレメントの値が基準値よりも小さい場合に、その時点のアドレスとエレメントが保持される。 【0016】こうして比較器110、114が共に停止した状態になったならば、データライトDMAC115は、メインメモリ104の比較バッファ109に保持されたデータが格納されているメモリアドレスに、比較バッファ113に保持されたデータをライトし、データライトDMAC116はメインメモリ104の比較バッファ113に保持されたデータが格納されているメモリアドレスに、比較バッファ109に保持されたデータをライトすることで、データ交換を行う。データ交換が行われたならば、比較器110,114は比較を再開する。 【0017】もし、データ交換する際に、昇順読み出しの被ソートデータアドレスと降順読み出しの被ソートデータアドレスがクロスしたならば、制御回路117はデータ交換を終了し、データ交換終了を繰り返し制御回路101に報せると共に、データ交換回路103内のシーケンスを終了し、次の起動を待つ状態となる。なお、データ交換の終了判定は、基準値との比較の対象となったエレメントのアドレスがクロスしていることの判断に基づいて行えばよい。 【0018】繰り返し制御回路101は、データ交換回路103からデータ交換終了通知とクロスアドレスを受け取ると、次に行うデータ交換がクロスアドレスよりも上位側か下位側かを決定し、もし上位側を先に行うのであれば下位側のアドレスをスタックメモリ102に格納して、上位側のアドレスと共に再度データ交換回路103を起動する。この処理を繰り返し、データがすべてソートされるまでこの処理を続ける。 【0019】図2は本実施形態の繰り返しシーケンスを示した模式図である。繰り返し制御回路101は、データ交換回路103を用いて、初めに全エレメントに対して交換処理を行い、基準データよりも大きいデータと小さいデータをクロスアドレスの上位、下位に振り分ける。つづいて繰り返し制御回路101は、振り分けられた領域を指定して再度データ交換回路103を用いて、さらに細分化された領域にエレメントを振り分ける。これを繰り返すことによってソートが行われる。以上のように、実施形態1によれば、大容量のデータを高速にソートすることが可能となる。 【0020】[実施形態2]上記実施形態1では、昇順読み出し、降順読み出しのそれぞれで被ソートデータのエレメントを1つずつ読み出したが、実施形態2では、複数のエレメントを同時に読み出して基準値との比較を行い、処理速度を更に向上する。 【0021】図3は実施形態2におけるデータ交換回路103の構成を示したブロック図である。実施形態1と同様に、繰り返し制御回路101からデータ交換回路103が起動されると、基準データリードDMAC105、昇順データリードDMAC107、降順データリードDMAC111が起動される。 【0022】基準データリードDMAC105は、メインメモリ104から基準データを取得し、基準データバッファ106に格納する。 【0023】昇順データリードDMAC107は、メインメモリ104から、ソートすべきエレメント範囲の最下位アドレスから順に被ソートデータを取得し、プリフェッチバッファ108に格納する。このときリードされたデータは、リードトランザクションのバースト長に相当するエレメント数(本例では4とする)で並列化されてプリフェッチバッファ108のバッファ305に格納される。昇順データリードDMAC107はプリフェッチバッファ108の残りバッファ303,304がフルになるまでデータリードを繰り返し、バッファがフルになったならば、次にバッファが解放されるまで待ち、バッファが解放された後に再度データリードを再開する。 【0024】プリフェツチバッファ108は、比較バッファ109が空いていれば被ソートデータを比較バッファ109に送信する。このとき、並列にならべられたデータは一括して比較バッファ109へ送られる。 【0025】比較バッファ109に保持された被ソートデータは、比較器110によって基準データバッファ106に保持されたデータと並列に比較され、もし並列に処理された全てのエレメントの値が基準データよりも小さかったならば、次のエレメントが比較バッファ109にロードされ、次の比較が行われる。もし並列に比較されたエレメントの中に基準データよりも大きい値を有するエレメントがあったならば、比較を停止し、降順データ比較器114が比較を停止するまで待機する。 【0026】降順データリードDMAC111は、メインメモリ104から、ソートすべきエレメント範囲の最上位アドレスから順にエレメントを取得し、プリフェッチバッファ112に格納する。このときリードされたデータは、リードトランザクションのバースト長に相当するエレメント数(本例では4とする)で並列化されてプリフェッチバッファ112のバッファ308に格納される。降順データリードDMAC111はプリフェッチバッファ112の残りバッファ306,307がフルになるまでデータリードを繰り返し、バッファがフルになったならば、次にバッファが解放されるまで待ち、バッファが解放された後に再度データリードを再開する。 【0027】プリフェッチバッファ112は、比較バッファ113が空いていれば4つのエレメントを一括に比較バッファ113に送信する。 【0028】比較バッファ113に保持されたエレメントは、比較器114によって基準データバッファ106に保持されたデータと並列に比較され、もし比較バッファ113内の全てのエレメントが基準データよりも大きかったならば、次のエレメントが比較バッファ113にロードされ、次の比較が行われる。もし比較バッファ113内のエレメントに基準データよりも小さいデータが在ったならば、比較を停止し、昇順データ比較器110が比較を停止するまで待機する。 【0029】こうして比較器110、114が共に停止したならば、データライトDMAC115は比較バッファ109に保持されたデータに相当するメモリアドレスに、比較バッファ113に保持されたデータをメインメモリ104に対してライトし、データライトDMAC116は比較バッファ113に保持されたデータに相当するメモリアドレスに、比較バッファ109に保持されたデータをメインメモリ104に対してライトすることで、データ交換を行う。データ交換が行われたならば、比較器110,114は比較を再開する。なお、ここで実行されるデータ交換は、同時に読み込んだ複数データのうち交換の必要のあるもののみが対象となる。 【0030】もし、データ交換する際に、昇順の被ソートデータアドレスと降順の被ソートデータアドレスがクロスしたならば、制御回路117はデータ交換を終了し、データ交換終了を繰り返し制御回路101に報せると共に、データ交換回路103内のシーケンスを終了し、次の起動を待つ状態となる。 【0031】以上のように、プリフェッチバッファ108、112及び比較バッファ109、113を並列にし、比較器110、114を1サイクルに複数のデータを比較できるようにすることにより、データ比較が高速化される。 【0032】ただし、データ比較の並列化を行うことによって、データ交換したメインメモリ104の内容と、プリフェッチバッファ108、112、比較バッファ109、113との間に内容の不一致が起こるので、レジスタフォワードパス301、302を付加することによって整合を取る。以下、レジスタフォワードパス301、302の機能について説明する。 【0033】図4A、図4Bは本実施形態におけるデータ不一致が起きる状況を示した模式図である。昇順のデータ比較と降順のデータ比較が交差する近傍において、データ交換により、プリフェッチバッファ108、112及び比較バッファ109、113内のデータと、メインメモリ104に更新されたデータとに不一致が生じる。図4Aに示すように比較バッファ109と比較バッファ113に同じアドレスのデータが保持された場合の不一致に対して、互いのバッファ内でデータを交換する必要がある。 【0034】また図4Bに示すように、比較バッファ109の内容がプリフェッチバッファ308と、比較バッファ114の内容がプリフェッチバッファ305と一致する場合にも、プリフェッチバッファ108、112と比較バッファ109、113のバッファ間でデータの交換を行う必要がある。 【0035】以上のように、実施形態2によれば、複数のエレメントについて並列して読み出し、基準値との比較が行われるので、実施形態1に比べ、処理速度を更に向上することができる。 【0036】[実施形態3]実施形態3では、データ交換回路とバブルソート回路を併用することにより更にデータソート処理の高速化を実現する。 【0037】図5Aは、実施形態3の構成を示したブロック図である。繰り返し制御回路101が起動されることによってソート処理が開始される。繰り返し制御回路101は、初めにソートするエレメント範囲を指定してデータ交換回路103を起動する。なお、以下では実施形態1で説明したデータ交換回路を適用して実施形態3を説明するが、実施形態2で説明したデータ交換回路を用いてもよい。 【0038】データ交換回路103が起動されると、制御回路117がまず、基準データリードDMAC105、昇順データリードDMAC107、降順データリードDMAC111を起動する。基準データリードDMAC105は、メインメモリ104から基準データを取得し、基準データバッファ106に格納する。昇順データリードDMAC107は、メインメモリ104から、ソートすべきエレメントの最下位から順にエレメントを取得し、プリフェツチバッファ108に格納する。昇順データリードDMAC107はプリフェッチバッファ108がフルになるまでデータリードを繰り返し、バッファがフルになったならば、次にバッファが解放されるまで待ち、バッファが解放された後に再度データリードを再開する。 【0039】プリフェッチバッファ108は、比較バッファ109が空いていればエレメントを比較バッファ109に送信する。比較バッファ109に保持されたエレメントは、比較器110によってその値が基準データバッファ106に保持されたデータと比較される。もしエレメントの値が基準データよりも小さかったならば、次のエレメントが比較バッファ109にロードされ、次の比較が行われる。もしエレメントの値が基準データよりも大きかったならば、比較を停止し、降順データ比較器114が比較を停止するまで待機する。 【0040】降順データリードDMAC111は、メインメモリ104から、ソートすべきエレメントの最上位から順に被ソートデータを取得し、プリフェッチバッファ112に格納する。降順データリードDMAC111はプリフェッチバッファ112がフルになるまでデータリードを繰り返し、バッファがフルになったならば、次にバッファが解放されるまで待ち、バッファが解放された後に再度データリードを再開する。 【0041】プリフェッチバッファ112は、比較バッファ113が空いていれば被ソートデータを比較バッファ113に送信する。比較バッファ113に保持されたエレメントは、比較器114によって基準データバッファ106に保持されたデータと比較され、もしエレメントの値が基準データよりも大きかったならば、次のエレメントが比較バッファ113にロードされ、次の比較が行われる。もしエレメントの値が基準データよりも小さかったならば、比較を停止し、昇順データ比較器110が比較を停止するまで待機する。 【0042】もし比較器110、114が共に停止したならば、データライトDMAC115は比較バッファ109に保持されたデータに相当するメモリアドレスに、比較バッファ113に保持されたデータ(エレメント)をメインメモリ104に対してライトし、データライトDMAC116は比較バッファ113に保持されたデータに相当するメモリアドレスに、比較バッファ109に保持されたデータをメインメモリ104に対してライトすることで、データ交換を行う。データ交換が行われたならば、比較器110、114は比較を再開する。 【0043】もし、データ交換する際に、昇順の被ソートデータアドレスと降順の被ソートデータアドレスがクロスしたならば、制御回路117はデータ交換を終了し、データ交換終了を繰り返し制御回路101に報せると共に、データ交換回路103内のシーケンスを終了し、次の起動を待つ状態となる。 【0044】繰り返し回路101は、データ交換回路103からデータ交換終了通知とクロスアドレスを受け取ると、次に行うデータ交換がクロスアドレスよりも上位側か下位側かを判断し、もし上位側を先に行うのであれば下位側のアドレスをスタックメモリ102に格納する。次に上位側のエレメント数がバブルソート回路501で処理可能かを判断し、バブルソート回路501の処理範囲を超えているようであれば、上位側のアドレスと共に再度データ交換回路103を起動する。もし次の処理のエレメント数がバブルソート回路501で処理可能であれば、上位側のアドレスと共にバブルソート回路501を起動する。 【0045】バブルソート回路501が起動されると、制御回路507は、はじめにデータリードDMAC502を起動してメインメモリ104より被ソートデータを取得する。次に制御回路607はセレクタ群503を切り替え、リードした被ソートデータをレジスタ群504へロードさせる。続いて制御回路507は、偶数・奇数判別信号をエレメント数回切り替えて、ソート処理を実行する。レジスタ群504に保持されたデータは比較器群505によって隣接したエレメント間の大小を比較される。比較器群505の比較結果と、制御信号507が生成する偶数回・奇数回判別信号によって、セレクタ群503は現在保持されているレジスタの内容と、上位に隣接するレジスタの内容と、下位に隣接するレジスタの内容を選択し、選択された結果をレジスタ群504に更新する。 【0046】上記動作をエレメント数回繰り返すことにより、当該エレメント範囲内のソート処理が終了する。次に制御回路507はデータライトDMAC506を起動して、レジスタ群504に保持されたデータをメインメモリ104に書き戻し、最後に処理の終了を繰り返し回路101へ通知する。 【0047】バブルソート回路501の処理終了を受けた繰り返し回路101は、当該エレメント間のソートは終了したものと判断し、スタックメモリ102より未ソートの被ソートデータアドレスを取得し、そのエレメント数がバブルソート回路501で処理可能かを判断し、バブルソート回路501の処理範囲を超えているようであれば、上位側のアドレスと共に再度データ交換回路103を起動する。もし次の処理のエレメント数がバブルソート回路501で処理可能であれば、上位側のアドレスと共に再度バブルソート回路501を起動する。この処理を繰り返すことによってソート処理が行われる。 【0048】図5Bは、実施形態2における繰り返し制御回路101の動作例を説明するフローチャートである。スタックメモリ102に格納された、設定されたエレメント範囲を読み出し、このエレメント範囲でデータ交換回路103を起動する(ステップS501、S502)。データ交換回路103の制御回路117から処理終了を受けると、そのクロスアドレスをスタックメモリ102に保持する(ステップS503)。そして、データ交換回路による交換が完了したエレメント範囲の1つについて、そのエレメント数がバブルソート可能な数であるかどうかを判断する(ステップS504)。バブルソート可能なエレメント範囲でなければ、ステップS504からステップS501へ戻り、当該エレメント範囲について更にデータ交換回路103による処理を施す。 【0049】一方、エレメント範囲の1つがバブルソート可能となった場合は、当該エレメント範囲でバブルソート回路501を起動して、当該エレメント範囲のソートを完了させる(ステップS505)。そして、ソートが未完のエレメント範囲が存在するかどうかを調べ、未完のエレメント範囲があればステップS504へ戻って上述の処理を繰り返し、全エレメント範囲のソーティングを完成する。 【0050】図6は、実施形態1のソート装置と、実施形態3のソート装置の繰り返し数を比較した模式図である。図6の(A)は、実施形態1のソート装置を用いた場合の処理の繰り返しを示している。実施形態1のソート装置ではアルゴリズムを変えないためにくり返し数が多くなっている。これに対し、本実施形態では、図6(B)に示すように、エレメント数が少なくなってきた場合にバブルソート装置に処理を切り替えることによって、処理のくり返し数が少なくなっていることが判る。 【0051】なお、実施形態3では、データ交換回路とバブルソート回路との組み合わせを説明したが他の方式のソート回路との組み合わせであってもよい。すなわち、本実施形態は、データ交換回路によってソート処理の対象範囲を狭めて、所定の方式のソート回路を適用可能とするものであり、データ交換回路と他の方式のソート回路とを組み合わせるようにしてもよいことは明らかである。 【0052】[実施形態4]実施形態4では、実施形態3で説明したデータソート回路にキャッシュメモリを適用し、更に処理を高速化する。なお、実施形態1、2のデータソート回路にキャッシュメモリを適用できることは、実施形態4の説明から明らかである。 【0053】図7は、実施形態4の構成を示したブロック図である。繰り返し制御回路101が起動されることによってソート処理が開始される。繰り返し制御回路101は初めにソートするエレメント範囲を判断し、キャッシュメモリに格納できる範囲であれば、キャッシュ制御回路を含むバスブリッジ回路701にキャッシュをオンにすることを知らせ、データ交換回路103を起動する。なお、データ交換回路103は上述した実施形態1乃至3のいずれかにおいて用いたものと同様である。また、バブルソート回路501は上述の実施形態3で用いたものと同様である。 【0054】データ交換回路103は、くり返し制御回路101によって指定されたエレメント範囲内を、基準データよりも大きいデータと小さいデータのに振り分けてデータ交換処理を終了する。この振り分けの際に、データ交換回路103からリードトランザクションが発行されると、バスブリッジ回路701はキャッシュにヒットしているかを判断し、ヒットしていなければメインメモリ104から当該データを取得してデータ交換回路103にデータを送ると共にキャッシュメモリ702に当該データをキャッシュする。もしヒットしていれば、当該データをキャッシュメモリ702から取得し、データ交換回路103にデータを送る。データ交換回路103からライトトランザクションが発行されると、データは必ずヒットしているはずなので、バスブリッジ回路701はライトデータをキャッシュメモリ702にライトする。 【0055】繰り返し回路101は、データ交換回路103からデータ交換終了通知とクロスアドレスを受け取ると、次に行うデータ交換がクロスアドレスよりも上位側か下位側かを判断し、もし上位側を先に行うのであれば下位側のアドレスをスタックメモリ102に格納し、次に上位側のエレメント数がバブルソート回路501で処理可能かを判断し、バブルソート回路501の処理範囲を超えているようであれば、上位側のアドレス(エレメント範囲)で再度データ交換回路103を起動する。 【0056】もし次の処理のエレメント数がバブルソート回路501で処理可能であれば、上位側のアドレスでバブルソート回路501を起動する。バブルソート回路501が起動されると、エレメント範囲内の被ソートデータをソートして、処理を終了する。この際に、バブルソート回路501からリードトランザクションが発行されると、バスブリッジ回路701はキャッシュにヒットしているかを判断し、ヒットしていなければメインメモリ104から当該データを取得してデータ交換回路103にデータを送ると共にキャッシュメモリ702に当該データをキャッシュする。もしヒットしていれば、当該データをキャッシュメモリ702から取得し、バブルソート回路501にデータを送る。 【0057】バブルソート回路501からライトトランザクションが発行されると、データは必ずヒットしているはずなので、バスブリッジ回路701はライトデータをキャッシュメモリ702にライトする。バブルソート回路501の処理終了を受けた繰り返し回路101は、当該エレメント間のソートは終了したものと判断し、スタックメモリ102より未ソートの被ソートデータアドレスを取得する。そして、そのエレメント数がキャッシュをオンにした際の範囲を超えているかを判断し、超えていなければそのエレメント数がバブルソート回路501で処理可能かを判断し、バブルソート回路501の処理範囲を超えているようであれば、上位側のアドレスと共に再度データ交換回路103を起動する。 【0058】もし次の処理のエレメント数がバブルソート回路501で処理可能であれば、上位側のアドレスと共に再度バブルソート回路501を起動する。もしエレメント範囲がキャッシュをオンにした際の範囲を超えていれば、くりかえし回路101はキャッシュ制御回路を含むバスブリッジ回路701にキャッシュをオフにすることを通知してキャッシングされたデータをメインメモリ104にライトバックさせ、次に次のエレメント範囲がキャッシュメモリ702の範囲を超えていないかを判断し、超えていればキャッシュをオフのままデータ交換回路103を起動し、超えていなければ再度キャッシュをオンにしてデータ交換回路103もしくはバブルソート回路501を起動する。この処理を繰り返すことによってソート処理が行われる。 【0059】図8は本実施形態のくり返しシーケンスの様子を示した模式図である。キャッシュメモリ702に、ソート対象範囲のデータが収まる場合にキャッシュオンとし、その範囲を超えた場合にキャッシュのデータをライトバックする。例えば、図8においては、繰り返し2のライトと、繰り返し3,4,5,6のリード及びライトはキャッシュヒットすることになり、メモリアクセスのレイテンシを削減できるため、くり返しシーケンスのエレメント数の少ない回の処理が高速化される。 【0060】[実施形態5]図9は、本実施形態の構成を示したブロック図である。大規模なランダムデータのソート処理の場合には、ソート処理をする前に、あらかじめいくつかの範囲にグループ分けすることが、処理の高速化に有効であることが知られている。本実施形態では、グループ分けされたそれぞれのグループのソート処理を並行に処理を行うことによって高速な処理を行う。 【0061】ディスパッチ回路901が起動されると、コマンドリードDMAC904が起動され、メインメモリ104から処理すべきグループの情報を持ったコマンドを取得し、コマンドディスパッチ回路905へ送る。コマンドディスパッチ回路905はソート装置902および903の処理状態を判断し、処理を行っていないソート装置にコマンドに対応したグループのソート処理を割り当てる。コマンドリードDMACはつづくコマンドを取得し、コマンドディスパッチ回路905へ送る。コマンドディスパッチ回路905はソート装置902および903の処理状態を判断し、処理を行っていないソート装置にコマンドに対応したグループのソート処理を割り当てる。もしどのソート装置も以前のコマンドを処理中であれば、どれかのソート装置が空くまで、コマンドに対応したソート処理の割り当てを待つ。もしコマンドの内容が終了を意味していたならば、コマンドディスパッチ回路905は全てのソート装置902,903の処理終了を待って全ての処理を終了する。 【0062】図10AはコマンドリードDMAC904の処理シーケンスを示したフローチャートである。また、図10Bは、コマンドディスパッチ回路905の処理シーケンスを示したフローチャートである。 【0063】コマンドリードDMAC904は、はじめにソート処理の起動待ちをし(ステップS1001)、ソート処理が起動されたならばメインメモリ104に対してリードトランザクションを発行して(ステップS1002)、メインメモリ104からのリードデータを待つ(ステップS1003)。つづいてコマンドディスパッチ回路905がデータ受信可能か否かを判断し(ステップS1004)、もし可能であればコマンドディスパッチ回路905へメインメモリ104からリードしたコマンドデータを送る(ステップS1005)。次に、送ったコマンドが終了コマンドであったかどうかを示す情報をコマンドディスパッチ回路905から受信し、終了であるかを判断し(ステップS1006)、もし終了でなければ次ノードトランザクションを発行し(ステップS1002)、終了であればまた起動待ちに戻る(ステップS1001)。 【0064】コマンドディスパッチ回路905は、まずソート処理の起動待ちをし(ステップS1007)、ソート処理が起動されたならばつぎにコマンドデータ待ちをする(ステップS1008)。コマンドリードDMAC904からコマンドデータを受け取ったならば、それが終了コマンドか否かを判断する(ステップS1009)。終了コマンドでなければ、空いているソート装置にソート処理を割り当てる(ステップS1010)。その後、更に空いているソート装置が在るかを判断し(ステップS1011)、空いているソート装置があればステップS1008へ戻りコマンドデータを待つ。 【0065】ステップS1009において、終了コマンドであったならば、コマンドリードDMAC904に終了を通知し(ステップS1012)、つづいて全てのソート装置が処理を終了するのを待ち(ステップS1013)、全てのソート装置が終了したならば、またソート処理の起動待ちに戻る(ステップS1007)。 【0066】[実施形態6]図11は、本実施形態の構成を示したブロック図である。実施形態6では、データを2つ以上の変数と比較し、比較の際に第1の変数が等価であった場合は第2の変数で比較し、第2の変数も等価であった場合には第3の変数で比較するという場合において、第1の変数は並べ替えるエレメントに内包され、第2、第3の変数は並べ替えるエレメントとは異なったメモリアドレスに存在する方が処理が高速である。 【0067】実施形態6は、その様なデータ構造をとったデータソートのソート装置である。繰り返し制御回路101は初めにソートするエレメント範囲を指定してデータ交換回路103を起動する。データ交換回路103が起動されると、制御回路117がまず、基準データリードDMAC105、昇順データリードDMAC107、降順データリードDMAC111を起動する。基準データリードDMAC105は、メインメモリ104から基準データを取得し、基準データバッファ106に格納する。昇順データリードDMAC107は、メインメモリ104から、ソートすべきエレメント範囲の最下位から順にエレメントを取得し、プリフェッチバッファ108に格納する。 【0068】昇順データリードDMAC107はプリフェッチバッファ108がフルになるまでデータリードを繰り返し、バッファがフルになったならば、次にバッファが解放されるまで待ち、バッファが解放された後に再度データリードを再開する。プリフェッチバッファ108は、比較バッファ109が空いていればエレメントを比較バッファ109に送信する。比較バッファ109に保持されたエレメントは、比較器110によって基準データバッファ106に保持されたデータと比較され、もしエレメントの値が基準データよりも小さかったならば、次のエレメントが比較バッファ109にロードされ、次の比較が行われる。もしエレメントの値が基準データよりも大きかったならば、比較を停止し、降順データ比較器114が比較を停止するまで待機する。 【0069】もしエレメントの最初の変数KEY1が基準データのKEY1と等価であった場合には、次にポインタリードDMAC1101が起動され、メインメモリ104からKEY2,KEY3を含むデータがリードされ、比較バッファ1102に格納され、比較器1103によって基準データのKEY2,KEY3と比較される。もし被ソートデータのKEY2,KEY3が基準データのKEY2,KEY3よりも小さかったならば、次の被ソートデータが比較バッファ109にロードされ、次の比較が行われる。もし被ソートデータのKEY2,KEY3が基準データのKEY2,KEY3よりも大きかったならば、比較を停止し、降順データ比較器114が比較を停止するまで待機する。降順データリードDMAC111は、メインメモリ104から、ソートすべきエレメントの最上位から順に被ソートデータを取得し、プリフェッチバッファ112に格納する。 【0070】降順データリードDMAC111はプリフェッチバッファ112がフルになるまでデータリードを繰り返し、バッファがフルになったならば、次にバッファが解放されるまで待ち、バッファが解放された後に再度データリードを再開する。プリフェッチバッファ112は、比較バッファ113が空いていればエレメントを比較バッファ113に送信する。比較バッファ113に保持されたエレメントは、比較器114によって基準データバッファ106に保持されたデータと比較され、もしエレメントの値が基準データよりも大きかったならば、次のエレメントが比較バッファ113にロードされ、次の比較が行われる。もしエレメントの値が基準データよりも小さかったならば、比較を停止し、昇順データ比較器110が比較を停止するまで待機する。 【0071】もし被ソートデータの最初の変数KEY1が基準データのKEY1と等価であった場合には、次にポインタリードDMAC1104が起動され、メインメモリ104からKEY2,KEY3を含むデータがリードされ、比較バッファ1105に格納され、比較器1106によって基準データのKEY2,KEY3と比較される。 【0072】もし被ソートデータのKEY2,KEY3が基準データのKEY2,KEY3よりも大きかったならば、次の被ソートデータが比較バッファ109にロードされ、次の比較が行われる。もし被ソートデータのKEY2,KEY3が基準データのKEY2,KEY3よりも小さかったならば、比較を停止し、降順データ比較器114が比較を停止するまで待機する。 【0073】もし比較器110、114が共に停止したならば、データライトDMAC115は比較バッファ109に保持されたデータに相当するメモリアドレスに、比較バッファ113に保持されたデータをメインメモリ104に対してライトし、データライトDMAC116は比較バッファ113に保持されたデータに相当するメモリアドレスに、比較バッファ109に保持されたデータをメインメモリ104に対してライトすることで、データ交換を行う。データ交換が行われたならば、比較器110、114は比較を再開する。 【0074】もし、データ交換する際に、昇順の被ソートデータアドレスと降順の被ソートデータアドレスがクロスしたならば、制御回路117はデータ交換を終了し、データ交換終了を繰り返し制御回路101に報せると共に、データ交換回路103内のシーケンスを終了し、次の起動を待つ状態となる。繰り返し回路101は、データ交換回路103からデータ交換終了通知とクロスアドレスを受け取ると、次に行うデータ交換がクロスアドレスよりも上位側か下位側かを判断し、もし上位側を先に行うのであれば下位側のアドレスをスタックメモリ102に格納して、上位側のアドレスと共に再度データ交換回路103を起動する。この処理を繰り返し、データがすべてソートされるまでこの処理を続ける。 【0075】図12は、本実施形態のデータ構造を示した模式図である。データを並べ替えるエレメントは、第一に比較するKEY1とKEY2以降の構造体のポインタから成る。ポインタのさす先の構造体は第二に比較する変数KEY2および第三に比較する変数KEY3から成っている。KEY1は必ず比較するのに対し、KEY2,KEY3を比較する頻度は極低いことから、メモリアクセスを最小限に押さえ、キャッシュのヒット率を高くするこのデータ構造が、複数の変数で比較し、ソートする場合に、高速なソート処理に対して有効である。 【0076】 【発明の効果】以上説明したように本発明によれば、大規模なランダムデータのソートを、高速に処理できる。
|
| 【出願人】 |
【識別番号】000001007 【氏名又は名称】キヤノン株式会社
|
| 【出願日】 |
平成13年4月9日(2001.4.9) |
| 【代理人】 |
【識別番号】100076428 【弁理士】 【氏名又は名称】大塚 康徳 (外3名)
|
| 【公開番号】 |
特開2002−312159(P2002−312159A) |
| 【公開日】 |
平成14年10月25日(2002.10.25) |
| 【出願番号】 |
特願2001−110245(P2001−110245) |
|