(57)【要約】      （修正有）【課題】マルチプロセッサシステム上でデータセットを区分化し、ソートするための方法および装置を提供。【解決手段】複数のアクセラレータを並行して使用することにより、データセットを異なるデータ領域に対応する複数のバケットに反復的に区分化して、複数のアクセラレータのローカルストレージに格納可能で、各反復において、データセットを複数の大規模バケットに大まかに区分化し、そのデータセット内のデータ値の配分を示すことが可能なデータセットのパラメータに基づいて該データセットの複数のデータ領域を決定し、複数のアクセラレータを並行して使用することにより、複数の大規模バケットを、複数のデータ領域それぞれに対応する複数の小規模バケットに区分化することにより、複数のアクセラレータのそれぞれが、区分化している大規模バケット内の各要素について、複数のデータ領域内でその要素が属するデータ領域を計算によって決定する。【選択図】図３
2010033561.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサ・システム上でデータ・セットを区分化するための方法であって、前記マルチプロセッサ・システムは少なくとも１つのコア・プロセッサと複数のアクセラレータとを有し、
前記複数のアクセラレータを並行して使用することにより、前記データ・セットを異なるデータ領域に対応する複数のバケットに反復的に区分化するステップを含み、前記複数のバケットそれぞれは前記複数のアクセラレータのローカル・ストレージに格納可能であり、
各反復において、
前記データ・セットを複数の大規模バケットに大まかに区分化するステップと、
前記データ・セット内のデータ値の配分を示すことが可能な前記データ・セットのパラメータを取得するステップと、
前記パラメータに基づいて前記データ・セットに関する複数のデータ領域を決定するステップと、
前記複数のアクセラレータを並行して使用することにより、前記複数の大規模バケットを、前記複数のデータ領域それぞれに対応する複数の小規模バケットに区分化するステップと、を含み、前記複数のアクセラレータのそれぞれが、区分化している前記大規模バケット内の各要素について、前記複数のデータ領域内で前記要素が属するデータ領域を計算によって決定する、方法。
【請求項２】
各反復において、
前記複数の大規模バケットの中で、同じデータ領域に対応する複数の小規模バケットのマージを実行するステップと、
前記複数のアクセラレータの前記ローカル・ストレージの容量よりも大きい、前記マージ済みバケット内のバケットを、次の反復のための新しいデータ・セットとして決定するステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記複数のアクセラレータそれぞれの前記ローカル・ストレージにおいて、前記複数のデータ領域についてそれぞれストレージ領域が設定され、
前記複数のアクセラレータを並行して使用することにより、前記複数の大規模バケットを、前記複数のデータ領域それぞれに対応する複数の小規模バケットに区分化するステップが、
前記複数のデータ領域に番号付けするステップと、
計算結果が、前記要素が属するデータ領域の番号に対応するように、前記アクセラレータが区分化している前記大規模バケット内の各要素について、前記複数のアクセラレータそれぞれによって計算を実行するステップと、
前記アクセラレータによって、番号が前記計算結果に対応する前記データ領域に対して設定された前記アクセラレータのローカル・ストレージ内の前記ストレージ領域内に、前記要素を格納するステップと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記パラメータに基づいて前記データ・セットに関する複数のデータ領域を決定するステップが、
前記パラメータに基づいて、前記データ・セットに関する固定ステップを備える複数の連続するデータ領域を決定するステップをさらに含み、
計算結果が、前記要素が属するデータ領域の番号に対応するように、前記アクセラレータが区分化している前記大規模バケット内の各要素について、前記複数のアクセラレータそれぞれによって計算を実行するステップが、
前記要素を、前記複数の連続するデータ領域の前記固定ステップで割るステップと、丸めの結果が、前記要素が属するデータ領域の番号に対応するように、前記アクセラレータによって丸めを実行するステップとを、さらに含む、
請求項３に記載の方法。
【請求項５】
前記パラメータに基づいて前記データ・セットに関する複数のデータ領域を決定するステップが、
前記パラメータに基づいて、データの２進表現の複数のビットの重み付け合計に従って、複数のデータ領域を決定するステップをさらに含み、
計算結果が、前記要素が属するデータ領域の番号に対応するように、前記アクセラレータが区分化している前記大規模バケット内の各要素について、前記複数のアクセラレータそれぞれによって計算を実行するステップが、
前記重み付け合計の値が、前記要素が属する前記データ領域の番号に対応するように、前記アクセラレータによって前記要素の２進表現の前記複数のビットの重み付け合計を計算するステップをさらに含む、
請求項３に記載の方法。
【請求項６】
前記複数のアクセラレータそれぞれの前記ローカル・ストレージにおいて、小規模バケットを形成するためにアクセラレータが区分化している大規模バケット内の同じデータ領域に属する要素をまとめてリンク付けするために、リンク付けリストが設定され、
前記アクセラレータによって、番号が前記計算結果に対応する前記データ領域に対して設定された前記アクセラレータのローカル・ストレージ内の前記ストレージ領域内に、前記要素を格納するステップの後に、
前記ストレージ領域が満杯であることが判別された場合、前記アクセラレータによって、前記ストレージ領域内の前記要素を、前記メイン・メモリ内で前記アクセラレータが区分化している前記大規模バケットの位置に、データ・ストライプとして書き戻すステップと、
前記データ・ストライプを、同じデータ領域に属する前記大規模バケット内の他のデータ・ストライプにリンク付けするように、そのローカル・ストレージ内の前記リンク付けリストを、前記アクセラレータによって更新するステップと、
をさらに含む、請求項３に記載の方法。
【請求項７】
前記複数のアクセラレータそれぞれの前記ローカル・ストレージ内の前記リンク付けリストが、インデックス・リストおよびテール・ポインタ・リストからなり、前記インデックス・リストは、前記アクセラレータによって前記メイン・メモリに書き戻された各データ・ストライプについて、前記データ・ストライプと同じ前記データ領域に属するその前のデータ・ストライプの位置を順番に記録し、前記テール・ポインタ・リストは、前記アクセラレータによって前記メイン・メモリに書き戻された前記複数のデータ領域それぞれの最新のデータ・ストライプの位置を示し、
そのローカル・ストレージ内の前記リンク付けリストを、前記アクセラレータによって更新するステップが、
前記ストレージ領域から前記メイン・メモリに書き戻された前記データ・ストライプが属する、前記データ領域に対応するそのテール・ポインタ・リスト内のエントリを、前記アクセラレータによって決定するステップと、
同じデータ領域に属する前記データ・ストライプの前のデータ・ストライプの位置を示すように、前記メイン・メモリに書き戻された前記データ・ストライプに対応する前記アクセラレータの前記インデックス・リスト内のエントリに、前記エントリ内の値を書き込むステップと、
前記データ・ストライプが属する前記データ領域の現在の最新データ・ストライプの位置を示すように、前記メイン・メモリ内で前記アクセラレータが区分化している前記大規模バケット内の前記データ・ストライプの位置を使用して、前記テール・ポインタ・リスト内の前記エントリの値を更新するステップと、
をさらに含む、請求項６に記載の方法。
【請求項８】
同じデータ領域に属する前記データ・セット内の要素をまとめてリンク付けするために、前記メイン・メモリ内にリンク付けリストが設定され、前記リンク付けリストはインデックス・リストおよびテール・ポインタ・リストからなり、
そのローカル・ストレージ内の前記リンク付けリストを前記アクセラレータによって更新するステップの後に、
前記アクセラレータの前記ローカル・ストレージ内の前記インデックス・リストが満杯の場合、前記インデックス・リストのコンテンツを、前記アクセラレータが区分化している前記大規模バケットに対応する前記メイン・メモリの前記インデックス・リスト内の一部分に書き込むステップを、さらに含む、
請求項７に記載の方法。
【請求項９】
前記複数の大規模バケットの中で、同じデータ領域に対応する複数の小規模バケットのマージを実行するステップが、
当初はそれが属する前記大規模バケット内の前記データ・ストライプの位置を示すエントリを置き換えるために、前記データ・セット全体において対応するデータ・ストライプのグローバル位置を示すように、その中の各エントリが変更されるように、前記メイン・メモリにおける前記インデックス・リストおよび前記テール・ポインタ・リストを修正するステップをさらに含み、ヘッド・インデックスおよびテール・インデックスは前記複数の大規模バケットの中で互いにリンク付けされる、請求項８に記載の方法。
【請求項１０】
第１の反復において、前記データ・セット内のデータ値の前記配分を示すことができる前記データ・セットの前記パラメータが、前記データ・セット内の前記データ値の前記配分を精密に示すことができる前記データ・セットに基づいて計算されたパラメータであるか、または前記データ・セット内のデータ値の前記配分を大まかに示すことができる前記データ・セットに基づいて推定されたパラメータである、請求項２に記載の方法。
【請求項１１】
各反復において、前記複数のアクセラレータを並行して使用することにより、前記複数の大規模バケットを、前記複数のデータ領域それぞれに対応する複数の小規模バケットに区分化するステップが、
前記区分化中に、前記小規模バケット内のデータ値の前記現在の配分を精密に示すことができるパラメータを、前記複数の小規模バケットそれぞれについて、リアルタイムで一般化するステップをさらに含み、
前記複数の大規模バケットの中で、同じデータ領域に対応する複数の小規模バケットのマージを実行するステップが、
マージ済みバケットそれぞれについて、その中に含まれる前記複数の小規模バケットの前記パラメータに基づいて、前記マージ済みバケット内のデータ値の前記配分を精密に示すことができるパラメータを決定するステップをさらに含む、
請求項１０に記載の方法。
【請求項１２】
前記パラメータが、データ値の平均／分散、最小値および最大値のうちの１つまたは複数を備える、請求項１、１０、および１１のうちのいずれか一項に記載の方法。
【請求項１３】
マルチプロセッサ・システム上でデータ・セットをソートするための方法であって、前記マルチプロセッサ・システムは少なくとも１つのコア・プロセッサと複数のアクセラレータとを有し、
請求項１から１２のいずれか一項に記載の、マルチプロセッサ・システム上でデータ・セットを区分化するための前記方法を使用することによって、ソートされることになるデータ・セットを、複数の異なるデータ領域に対応する複数のバケットに区分化するステップと、
前記複数のバケットをメイン・メモリから前記複数のアクセラレータに分配するステップと、
前記複数のアクセラレータによって、並行して、前記複数のバケットのそれぞれでデータ・ソートを実行するステップと、
前記複数のアクセラレータにより、前記複数の異なるデータ領域の順序に従って、それらのソートされたバケットをそれぞれ前記メイン・メモリに書き戻すステップと、
を含む、方法。
【請求項１４】
マルチプロセッサ・システム内でデータ・セットを区分化するための装置であって、前記マルチプロセッサ・システムは少なくとも１つのコア・プロセッサと複数のアクセラレータとを有し、前記装置は、前記複数のアクセラレータを並行して使用することにより、前記データ・セットを異なるデータ領域に対応する複数のバケットに反復的に区分化し、前記複数のバケットそれぞれは前記複数のアクセラレータのローカル・ストレージに格納可能であり、
各反復において、前記データ・セットを複数の大規模バケットに大まかに区分化するための大まかな区分化ユニットと、
各反復において、前記データ・セット内のデータ値の配分を示すことが可能な前記データ・セットのパラメータを取得するためのパラメータ取得ユニットと、
各反復において、前記パラメータに基づいて前記データ・セットに関する複数のデータ領域を決定するためのデータ領域決定ユニットと、
前記複数のアクセラレータを並行して使用することにより、前記複数の大規模バケットを、前記複数のデータ領域それぞれに対応する複数の小規模バケットに区分化するための精密な区分化ユニットと、を備え、前記複数のアクセラレータのそれぞれが、区分化している前記大規模バケット内の各要素について、前記複数のデータ領域内で前記要素が属するデータ領域を計算によって決定する、装置。
【請求項１５】
各反復において、前記複数の大規模バケットの中で、同じデータ領域に対応する複数の小規模バケットのマージを実行するための、バケット・マージ・ユニットと、
各反復において、前記複数のアクセラレータの前記ローカル・ストレージの容量よりも大きい、前記マージ済みバケット内のバケットを、区分化されることになる新しいデータ・セットとして決定するための、再区分化バケット決定ユニットと、
をさらに備える、請求項１４に記載の装置。
【請求項１６】
前記複数のアクセラレータそれぞれの前記ローカル・ストレージにおいて、前記複数のデータ領域についてそれぞれストレージ領域が設定され、
前記精密な区分化ユニットが、
各反復において前記複数のデータ領域を番号付けするためのデータ領域番号付けユニットと、
計算結果が各反復において前記要素が属しているデータ領域の番号に対応するように、前記複数のアクセラレータのそれぞれが、前記アクセラレータが区分化している前記大規模バケット内の各要素について計算を実行できるようにするための、コンピューティング・ユニットと、
前記複数のアクセラレータそれぞれが、前記計算結果に基づいて、前記アクセラレータが区分化している前記大規模バケット内の各要素を、前記要素が属している前記データ領域に対応する前記アクセラレータのローカル・ストレージ内の前記ストレージ領域に格納できるようにするための、データ・カテゴリ化ユニットと、
をさらに備える、請求項１５に記載の装置。
【請求項１７】
前記複数のアクセラレータそれぞれの前記ローカル・ストレージにおいて、小規模バケットを形成するために、前記アクセラレータが区分化している大規模バケット内の同じデータ領域に属する要素をまとめてリンク付けするためのリンク付けリストが設定され、前記リンク付けリストは、インデックス・リストおよびテール・ポインタ・リストからなり、
前記精密な区分化ユニットが、
前記アクセラレータが前記ストレージ領域内に要素を書き込んだ後、前記複数のアクセラレータのうちの１つのストレージ領域が満杯である場合、前記アクセラレータに、前記ストレージ領域内の前記要素を、各反復において前記アクセラレータがメイン・メモリ内で区分化している前記大規模バケットの位置に、データ・ストライプとして書き戻させることが可能な、データ・ストライプ書き戻しユニットと、
前記複数のアクセラレータのうちの１つが前記メイン・メモリにデータ・ストライプを書き戻した後、前記データ・ストライプを、各反復において同じデータ領域に属する、前記アクセラレータが区分化している前記大規模バケット内の他のデータ・ストライプに、リンク付けさせるように、前記アクセラレータに、そのローカル・ストレージ内の前記リンク付けリストを更新させることが可能な、リンク付けリスト更新ユニットと、
をさらに備える、請求項１６に記載の装置。
【請求項１８】
同じデータ領域に属する前記データ・セット内の要素をまとめてリンク付けするために、前記メイン・メモリ内にリンク付けリストが設定され、前記リンク付けリストはインデックス・リストおよびテール・ポインタ・リストからなり、
前記精密な区分化ユニットが、
前記複数のアクセラレータのうちの１つのインデックス・リストが満杯であるものと判別した場合、前記アクセラレータに、各反復において、前記アクセラレータが区分化している前記大規模バケットに対応する前記メイン・メモリの前記インデックス・リスト内の一部分に、前記インデックス・リストのコンテンツを書き込ませることができるようにするための、インデックス書き戻しユニットをさらに備え、
前記バケット・マージ・ユニットが、
当初はそれが属する前記大規模バケット内の前記データ・ストライプの位置を示すエントリを置き換えるために、前記データ・セット全体において対応するデータ・ストライプのグローバル位置を示すように、その中の各エントリが変更されるように、各反復において、前記メイン・メモリにおける前記インデックス・リストおよび前記テール・ポインタ・リストを修正するための、インデックス・マージ・ユニットをさらに備え、ヘッド・インデックスおよびテール・インデックスは前記複数の大規模バケットの中で互いにリンク付けされる、
請求項１７に記載の装置。
【請求項１９】
前記精密な区分化ユニットが、
各反復において、前記複数のアクセラレータのそれぞれに、それによって区分化される前記複数の小規模バケットそれぞれについて、区分化中の前記小規模バケット内でのデータ値の前記現在の配分を精密に示すことができるパラメータを、リアルタイムで一般化させることができるようにするための、パラメータ一般化ユニットをさらに備え、
前記バケット・マージ・ユニットが、
各反復において、マージ済みバケットそれぞれについて、前記パラメータ一般化ユニットによって一般化された、前記マージ済みバケットに含まれる前記複数の小規模バケットの前記パラメータに基づいて、前記マージ済みバケット内でのデータ値の前記配分を精密に示すことができるパラメータを決定するための、パラメータ・マージ・ユニットをさらに備える、
請求項１５に記載の装置。
【請求項２０】
マルチプロセッサ・システム内でデータ・セットをソートするための装置であって、前記マルチプロセッサ・システムは少なくとも１つのコア・プロセッサと複数のアクセラレータとを有し、
ソートされることになるデータ・セットを、複数の異なるデータ領域に対応する複数のバケットに区分化するために、請求項１４から１９のいずれか一項に記載のマルチプロセッサ・システム内でデータ・セットを区分化するための装置と、
前記メイン・メモリから前記複数のアクセラレータへ前記複数のバケットを分配するための、データ分配ユニットと、
前記複数のアクセラレータに、前記複数のバケット上でそれぞれ並行してデータ・ソートを実行させることができるようにするためのソート・ユニットと、
前記複数のアクセラレータに、前記複数の異なるデータ領域の順序に従って、それらのソート済みバケットを前記メイン・メモリに書き戻させることができるようにするための、データ書き戻しユニットと、
を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理の分野に関し、とりわけ、データ・セットを区分化するための方法および装置、ならびにマルチプロセッサ・システム上でデータ・セットをソートするための方法および装置に関する。
【背景技術】
【０００２】
データ・ソートは、工業および商業の領域でデータを分析する際に頻繁に使用される、一般的なプロセスである。
【０００３】
一般に、図１に示されるようなシングルプロセッサ・データ処理システムでは、データ・ソートは主に、１）メイン・ストレージからソートされることになるデータを収集する段階、２）フェッチされたデータをソートするために処理コアを使用する段階、３）ソートされたデータをメイン・ストレージに再分配する段階、という、３つの段階を含む。
【０００４】
半導体処理がその限界に近づくにつれて、半導体処理の進展によりシングルプロセッサの機能が継続して向上するのに比べて、データ処理システムにおける処理ノードの数を増加させることが、近い将来、さらに実行可能となる。
【０００５】
図２は、従来のマルチプロセッサ・システムのアーキテクチャを示す。図２に示されるように、マルチプロセッサ・システムは、一般に、１つのコアＣＰＵおよび複数のＡｃｃｅｌｅｒａｔｅｄ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＡＰＵ）を含む、共有メイン・メモリ上で動作する複数のプロセッサを有する。
【０００６】
たとえば、Ｃｅｌｌ  Ｂｒｏａｄｂａｎｄ  Ｅｎｇｉｎｅ（ＣＢＥ）は、Ｐｏｗｅｒ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＰＰＵ）および８つのＳｙｎｅｒｇｉｓｔｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＳＰＵ）を含む、共有メイン・メモリ上で動作する９つのプロセッサを有する、シングルチップ・マルチプロセッサ・システムである。こうしたシステム・アーキテクチャの下で、ＣＢＥは突出したデータ計算機能を提供することができる。したがって、大規模データ・セットでのデータ・ソートに関して、ＣＢＥなどのマルチプロセッサ・システムが使用される場合、ソート・プロセスの性能を大幅に向上させることができる。
【０００７】
しかしながら、ＣＢＥなどのマルチプロセッサ・システムでは、複数のアクセラレータがソートされることになるデータ・セット上で並行してデータ・ソートを実行するため、アクセラレータのローカル・ストレージのサイズに対応するように、データ・セットを均等に区分化する必要があり、したがって、主な処理段階には、１）ソートされることになるデータ・セットを区分化し、これをメイン・メモリから複数のアクセラレータへと分配する段階、２）複数のアクセラレータがそのそれぞれのデータ上で並行してソートを実行する段階、および３）複数のアクセラレータのデータ・ソート結果をメイン・メモリ内に収束（converge）させる段階が含まれる。
【０００８】
しかしながら、上記のプロセスでは、具体的にどのようにデータ・セットを区分化するか、およびどのようにデータ・ソート結果を収束させるかが、現在でも依然として問題である。
【０００９】
さらに一般的には、マルチプロセッサ・システムにおいて、各アクセラレータに大規模ローカル・ストレージを備えることは非常にコストがかかるため、各アクセラレータのローカル・ストレージの容量は制限されている。たとえばＣＢＥでは、各ＳＰＵのローカル・ストレージの容量は２５６ＫＢであり、これは大規模データ・セットには不十分である。
【００１０】
したがって、データ・セットが適切に区分化されなければ、複数のアクセラレータがそれぞれのソート・タスクを並行して実行する場合、それぞれのアクセラレータとメイン・メモリとの間で、ＤＭＡ操作を使用することによってデータ・スワップ動作を繰り返して実行する必要が生じる可能性があり、メイン・メモリと複数のアクセラレータとの間のメモリ帯域幅が一般に制限されているため、多数のデータ・スワップ動作はメイン・メモリ動作の効率を低下させることになる。たとえばＣＢＥでは、ＳＰＵとメイン・メモリとの間のメモリ帯域幅は約２５．６ＧＢ／秒でのみ維持可能であり、これが８つのＳＰＵによって共有されることになる。
【００１１】
加えて、データ・セットが適切に区分されなければ、複数のアクセラレータがそれぞれのソート・タスクを実行する場合、各アクセラレータが他のアクセラレータとのデータ通信を実行する必要が生じる可能性もあり、これもソートの効率を低下させることになる。
【００１２】
したがって、ＣＢＥなどのマルチプロセッサ・システム上でデータ・ソートが実行された場合、メイン・メモリとアクセラレータとの間、およびアクセラレータ間での、データ・スワップ動作が削減されるはずであることを考慮に入れるべきである。
【００１３】
さらに、典型的なデータ・ソート・アルゴリズムでは多数の分岐（比較）動作が存在するが、ＣＢＥなどのマルチプロセッサ・システムの場合、分岐動作の機能は比較的弱い。これも、ＣＢＥなどのマルチプロセッサ・システム上でデータ・ソートを実行する場合に考慮に入れるべき問題である。
【発明の概要】
【発明が解決しようとする課題】
【００１４】
前述の考察に基づき、ＣＢＥなどのマルチプロセッサ・システムに好適なデータの区分化およびソート・ソリューションを設計することが求められている。
【課題を解決するための手段】
【００１５】
前述の問題に鑑みて、本発明は、データ・セットを区分化するための方法および装置、ならびにマルチプロセッサ・システム上のデータ・セットをソートするための方法および装置を提供し、その結果、こうしたマルチプロセッサ・システムの持つ高計算力の利点を十分に活かすように、可能な限り、データ間の比較の代わりにデータの計算を介して、および、データの物理的移動の代わりにデータの論理的収束を介して、ＣＢＥなどのマルチプロセッサ・システム上で、大規模データ・セットの区分化およびソートが実行される。
【００１６】
本発明の一態様によれば、マルチプロセッサ・システム上でデータ・セットを区分化するための方法が提供され、このマルチプロセッサ・システムは少なくとも１つのコア・プロセッサと複数のアクセラレータとを有し、この方法は、当該複数のアクセラレータを並行して使用することにより、当該データ・セットを異なるデータ領域に対応する複数のバケットに反復的に区分化するステップを含み、複数のバケットそれぞれは当該複数のアクセラレータのローカル・ストレージに格納可能であり、各反復において、この方法は、当該データ・セットを複数の大規模バケットに大まかに区分化するステップと、そのデータ・セット内のデータ値の配分を示すことが可能な当該データ・セットのパラメータを取得するステップと、当該パラメータに基づいて当該データ・セットに関する複数のデータ領域を決定するステップと、当該複数のアクセラレータを並行して使用することにより、当該複数の大規模バケットを、複数のデータ領域それぞれに対応する複数の小規模バケットに区分化するステップと、を含み、当該複数のアクセラレータのそれぞれが、区分化している大規模バケット内の各要素について、複数のデータ領域内でその要素が属するデータ領域を計算によって決定する。
【００１７】
本発明の他の態様によれば、マルチプロセッサ・システム上でデータ・セットをソートするための方法が提供され、このマルチプロセッサ・システムは少なくとも１つのコア・プロセッサと複数のアクセラレータとを有し、この方法は、マルチプロセッサ・システム上でデータ・セットを区分化するための上記方法を使用することによって、ソートされることになるデータ・セットを、複数の異なるデータ領域に対応する複数のバケットに区分化するステップと、当該複数のバケットをメイン・メモリから当該複数のアクセラレータに分配するステップと、当該複数のアクセラレータによって、並行して、当該複数のバケットのそれぞれでデータ・ソートを実行するステップと、当該複数のアクセラレータにより、当該複数の異なるデータ領域の順序に従って、それらのソートされたバケットをそれぞれメイン・メモリに書き戻すステップと、を含む。
【００１８】
本発明の特徴、利点、および目的は、添付の図面に関して本発明の詳細な実施の以下の説明を読むことで、より良く理解されるであろうと考えられる。
【図面の簡単な説明】
【００１９】
【図１】シングルプロセッサ・システムを示すブロック図である。
【図２】マルチプロセッサ・システムを示すブロック図である。
【図３】本発明の実施形態に従った、マルチプロセッサ・システム上でデータ・セットを区分化するための方法を示す流れ図である。
【図４】図３の方法を示す全体図である。
【図５】本発明の実施形態に従った、図３の方法における大規模バケットを複数の小規模バケットに区分化するためのステップ３２０を示す詳細な流れ図である。
【図６】図５のプロセスを示す図である。
【図７】図３の方法におけるステップ３３０、３４０を示す図である。
【図８】本発明の実施形態に従った、マルチプロセッサ・システム上でデータ・セットをソートするための方法を示す流れ図である。
【図９】図８のプロセスを示す図である。
【図１０】本発明の実施形態に従った、マルチプロセッサ・システム内でデータ・セットを区分化するための装置を示すブロック図である。
【図１１】本発明の実施形態に従った、マルチプロセッサ・システム内でデータ・セットをソートするための装置を示すブロック図である。
【発明を実施するための形態】
【００２０】
次に、本発明の好ましい諸実施形態について、図面を参照しながら詳細に説明する。
【００２１】
図３は、本発明の実施形態に従った、マルチプロセッサ・システム上でデータ・セットを区分化するための方法を示す流れ図である。ここでマルチプロセッサ・システムは、少なくとも１つのコア・プロセッサと複数のアクセラレータとを有する。具体的に言えば、マルチプロセッサ・システムは、たとえば、１つのＰＰＵ（コア・プロセッサ）および８つのＳＰＵ（アクセラレータ）を備えた上記ＣＢＥとすることができる。加えて、区分化されることになるデータ・セットは、前述のマルチプロセッサ・システムのメイン・メモリ内に事前に格納される。
【００２２】
マルチプロセッサ・システム上でデータ・セットを区分化するための実施形態の方法は、当該複数のアクセラレータを並行して使用することにより、当該データ・セットが、異なるデータ領域に対応する、すべてが当該複数のアクセラレータのローカル・ストレージの容量よりも小さな、複数の小規模バケットに区分化されるまで、当該データ・セットを反復的に区分化する。
【００２３】
具体的に言えば、図３に示されるように、第１にステップ３０５で、そのデータ・セット内のデータ値の配分を実質上示すことができる区分化されることになるデータ・セットのパラメータが取得され、このパラメータは、たとえば、そのデータ・セット内のデータ値の平均／分散または最小値および最大値とすることができる。もちろんパラメータは、データ値の平均または分散、ならびにデータ値の最小値および最大値を含むことができる。
【００２４】
さらに、好ましい実施形態では、データ・セットのパラメータはそのデータ・セットに基づいて推定される。他の実施形態では、パラメータはそのデータ・セットに基づいて算出可能である。
【００２５】
ステップ３１０では、複数のデータ領域が、当該パラメータに基づくデータ・セットに関して決定される。
【００２６】
たとえば、そのデータ・セットに基づいて推定されたパラメータがデータ値の平均であり、平均が５００である場合、そのデータ・セットに関して、固定ステップ１００を備えた複数のデータ領域０〜９９、１００〜１９９、２００〜２９９、・・・、９００〜９９９を決定することができる。もちろん、これに限定されるものではない。データ領域を決定するための複数の様式が存在する。たとえば、データの２進表現の最高位４ビットに対してそれぞれ重みを設定することが可能であり、たとえば、最高位４ビットに対してそれぞれ重み２０、２１、２２、２３を設定し、これらの最高位４ビットの重み付け合計に基づいて、１６の異なるデータ領域、すなわち、データの最高位４ビットの重み付け合計が１であるデータ領域、データの最高位４ビットの重み付け合計が２であるデータ領域などを、決定することができる。
【００２７】
ステップ３１５では、データ・セットが複数の大規模バケットに大まかに区分化される。図４の（ａ）および（ｂ）に示されるように、データ・セットは例示的に４つの大規模バケットに区分化される。
【００２８】
このステップで、データ・セットを複数の大規模バケットに大まかに区分化する目的は、当該複数のアクセラレータが、これらの大規模バケットを反復的に並行してさらに区分化できるようにすることであるため、複数のアクセラレータがデータ・セット上で並行して動作可能である限り、本発明における区分化の様式には特別な制限はない。
【００２９】
一実施形態では、このステップで、データ・セットは、複数のアクセラレータの数に応じて複数の大規模バケットに均等に区分化される。たとえば、８つのＳＰＵを備えた上記ＣＢＥの場合、データ・セットは８つの大規模バケットに均等に区分化される。しかしながらこれは単なる例であり、他の実施形態では、データ・セットはより多いかまたは少ない大規模バケットにも区分化可能であり、これらの大規模バケットのデータ量は均等でない場合もある。
【００３０】
ステップ３２０では、図４（ｃ）に示されるように、複数の大規模バケットが計算を通じて、複数のデータ領域に対応する複数の小規模バケットに反復的に区分化され、その間に、小規模バケットにおけるデータ値の配分を精密に示すことができる複数の小規模バケットそれぞれのパラメータが、当該複数のアクセラレータによって並行して生成される。
【００３１】
たとえば、上記複数のデータ領域０〜９９、１００〜１９９、２００〜２９９、・・・、９００〜９９９の場合、複数のアクセラレータは計算を通じて、複数の大規模バケットをこれらのデータ領域に対応するそれぞれ複数の小規模バケットに並行して区分化することができる。すなわち、複数の大規模バケットそれぞれについて、その値が０〜９９の間にあるすべての要素が計算を通じて１つの小規模バケットに区分化され、その値が１００〜１９９の間にあるすべての要素が１つの小規模バケットに区分化されるというようにして、０〜９９、１００〜１９９、２００〜２９９、・・・、９００〜９９９のデータ領域それぞれに対応する複数の小規模バケットを形成する。
【００３２】
次に、ステップ３２０のプロセスについて、添付の図面に関して詳細に説明する。図５は、複数のアクセラレータのうちのいずれか１つによる大規模バケットの区分化を一例として採用することによる、本発明の実施形態に従ったステップ３２０のプロセスの詳細な流れ図である。図６は、そのプロセスの例示である。
【００３３】
この実施形態では、図６に示されるように、当該複数のアクセラレータそれぞれのローカル・ストレージおよびメイン・メモリにおいて、同じデータ領域に属する要素をまとめてリンクさせるために、リンク付けリストがそれぞれ設定される。一実施形態では、リンク付けリストは、インデックス・リストおよびテール・ポインタ（tail pointer）・リストからなる逆リンク付けリストである。ここでインデックス・リストは複数のエントリを含み、その数はストレージ容量に依存する。加えて、テール・ポインタ・リストも複数のエントリを含み、その数は複数のデータ領域の数に少なくとも等しい。すなわち、複数のデータ領域それぞれについて、テール・ポインタ・リストは、それに対応する少なくとも１つのエントリを含む。加えて、初期に、インデックス・リストおよびテール・ポインタ・リスト内のすべてのエントリは０として設定される。
【００３４】
図５に示されるように、第１のステップ５０５で、この実施形態に従ったステップ３２０のプロセスは、複数のデータ領域に対して特定の番号を設定する。
【００３５】
たとえば、上記複数のデータ領域０〜９９、１００〜１９９、２００〜２９９、・・・、９００〜９９９の場合、データ領域０〜９９を１として番号付けし、データ領域１００〜１９９を２として番号付けするということが可能である。
【００３６】
加えて、データの２進表現の最高位４ビットに対してそれぞれ重み２０、２１、２２、２３が設定され、これらの最高位４ビットの重み付け合計に従って、１６の異なるデータ領域が決定された場合、データの最高位４ビットの重み付け合計が１のデータ領域を１として番号付けし、データの最高位４ビットの重み付け合計が２のデータ領域を２として番号付けするという具合である。
【００３７】
ステップ５１０では、データの一部分が、メイン・メモリに格納されたデータ・セットの大規模バケットから獲得され、アクセラレータへ、すなわちそのアクセラレータのローカル・ストレージへと割り振られる。ここで、その部分のデータ量は、そのアクセラレータのローカル・ストレージの容量に基づいて決定される。
【００３８】
一実施形態では、そのアクセラレータのローカル・ストレージは、メイン・メモリから獲得されたデータ、およびそれぞれ区分化されているデータを格納するために、２つの部分に分割することが可能である。この場合、インデックス・リストおよびテール・ポインタ・リストによって占有されるスペースを考慮に入れると、データのその部分の量は、そのアクセラレータのローカル・ストレージ容量の半分より少ないはずである。しかしながら、これに限定されるものではなく、当業者であれば、当分野の技術的な知識を使用することで、そのアクセラレータのローカル・ストレージのスペースをいずれかの妥当な様式で配置構成することが可能である。
【００３９】
ステップ５１５では、アクセラレータは、区分化されていない要素をそのローカル・ストレージから獲得し、計算を通じて、その要素が属するデータ領域の数にその要素を関連付けることができる。
【００４０】
たとえば、それぞれ１、２、・・・、と番号付けされた上記複数のデータ領域０〜９９、１００〜１９９、２００〜２９９、・・・、９００〜９９９の場合、その複数のデータ領域のステップ、すなわち１００で、獲得された要素を分割すること、および次にその結果を丸めることにより、その要素が属するデータ領域の番号を獲得することができる。ここで、ＣＥＩＬＩＮＧ（数式）関数を使用して、分割結果で丸めを実行することができる。たとえば、ＣＥＩＬＩＮＧ（５１２／１００）は６を戻すことになり、この場合、５１２が６番目のデータ領域、すなわちデータ領域５００〜５９９に属することが決定可能である。
【００４１】
しかしながら、これに限定されるものではなく、ステップ５０５では、データ領域０〜９９を０と番号付けし、データ領域１００〜１９９を１と番号付けするということも可能であり、フロア（数式）関数を使用して、当該ステップによって獲得された要素の分割結果で丸めを実行することができる。たとえば、フロア（５１２／１００）は５を戻すことになり、これによって５１２が、この場合はデータ領域５００〜５９９でもある、５番目のデータ領域に属することが決定可能である。
【００４２】
加えて、１、２、・・・、として番号付けされたデータの２進表現の最高位４ビットの重み付け合計に従って、１６の異なるデータ領域が決定される上記のケースでは、獲得された要素の２進表現の最高位４ビットの重み付け合計を計算することによって、その要素が属するデータ領域の番号を取得することができる。
【００４３】
しかしながら、複数のデータ領域に順番に番号付けし、獲得された要素が属するデータ領域を、その要素に関する計算を実行することによって決定し、計算の結果をデータ領域の番号に関連付けるという上記の様式は、単なる例であり、計算を通じて要素が属するデータ領域に要素を関連付けることができる限り、いずれの方法も使用可能である。
【００４４】
ステップ５２０で、獲得された要素は、上記の計算結果に基づき、番号がその計算結果に対応するデータ領域に、すなわち対応する小規模バケットに区分化される。
【００４５】
この実施形態では、図６の右側に示されるように、アクセラレータのローカル・ストレージでは、１２８Ｂなどの固定サイズを備えるストレージ領域（図６のＡＰＵにおいて１、２、・・・、７とラベル表示された部分）が、上記複数のデータ領域のそれぞれ、すなわち複数の小規模バケットそれぞれに対して割り振られ、これがそのデータ領域に分割化されたデータを格納するために使用される。一実施形態では、ストレージ領域の割り振りは、複数のデータ領域のそれぞれについて、１２８Ｂなどの固定長を備えるアレイを設定することによって実施される。
【００４６】
したがって、このステップでは、獲得された要素を、その番号が計算結果に対応するデータ領域に区分化することは、そのデータ領域に対応するアクセラレータのローカル・ストレージ内のストレージ領域に、その要素を格納することである。
【００４７】
ステップ５２５で、対応する数を備えるデータ領域に、すなわち対応する小規模バケットに、要素を区分化した後、その小規模バケット内のデータ値の平均または分散ならびに最小値および最大値などの、その小規模バケット内のデータ値の現在の配分を精密に示すことができるパラメータが決定される。もちろんパラメータは、データ値の単なる平均または分散とするか、あるいはデータ値の単なる最小値および最大値とすることができる。
【００４８】
当該アクセラレータによって大規模バケットを複数の小規模バケットに区分化するプロセス時に、大規模バケット内の要素は１つずつトラバースしなければならないため、それぞれの小規模バケットにおけるデータ値の現在の最小値および最大値ならびに平均／分散はトラバースと同時に決定することができる。したがって、その大規模バケット内のすべての要素が対応する小規模バケットに区分化された後、それぞれの小規模バケットのデータ値の最終的な最小値および最大値ならびに平均／分散を決定し、その小規模バケット内のデータ値の配分を精密に示すことができるパラメータとして採用することができる。
【００４９】
ステップ５３０で、上記小規模バケットに対応するアクセラレータのローカル・ストレージ内のストレージ領域が満杯であるかどうかが判別される。満杯である場合、プロセスはステップ５３５に進み、満杯でない場合はステップ５５５に進む。
【００５０】
ステップ５３５で、満杯のストレージ領域内の要素はデータ・ストライプとしてメイン・メモリに書き戻される。
【００５１】
具体的に言えばアクセラレータは、メイン・メモリ内で最後に書き戻された、アクセラレータが区分化している大規模バケットのデータ・ストライプの次に、そのデータ・ストライプを書き戻す。すなわち、そのアクセラレータによって区分化されたそれぞれのデータ・ストライプは、メイン・メモリ内でこれらのデータ・ストレイプが属する大規模バケット上に順番に上書きされる。すなわち、大規模バケットから区分化されたそれぞれのデータ・ストライプは、その大規模バケットのロケーションに依然として書き戻される。したがって図６から、それぞれのアクセラレータによって区分化されたデータ・ストライプは、これらのデータ・ストライプが属する大規模バケットに従って、メイン・メモリ内に格納されることがわかる。
【００５２】
ステップ５４０で、当該アクセラレータのローカル・リンク付けリストが更新される。
【００５３】
そのアクセラレータのローカル・ストレージ内の上記複数のデータ領域に対して割り振られた複数のストレージ領域の中で、あるストレージ領域が満杯になると同時に、アクセラレータがその中のデータ・ストライプをメイン・メモリに書き戻すことになるため、図６から、メイン・メモリ内では、同じアクセラレータによって書き戻される同じ大規模バケットに属するデータ・ストライプの中で、同じデータ領域に対応する、すなわち小規模バケットを形成するデータ・ストライプが、連続して格納されない可能性があることがわかる。
【００５４】
この実施形態では、インデックス・リストおよびテール・ポインタ・リストからなる前述の逆リンク付けリストを使用して、このタスクを実施する。
【００５５】
具体的に言えば、当該アクセラレータのローカル・インデックス・リスト内の複数のエントリは、当該アクセラレータによってメイン・メモリに順番に書き戻された複数のデータ・ストライプと１つずつ対応し、対応するデータ・ストライプの関係インデックスを格納するためにそれぞれが使用される。関係インデックスは、同じ大規模バケットから区分化され、対応するデータ・ストライプと同じデータ領域に属する、対応するデータ・ストライプの、前のデータ・ストライプのメイン・メモリ内の位置を示す。すなわち、関係インデックスは、前のデータ・ストライプの大規模バケットと同じ大規模バケットに書き戻されたデータ・ストライプの中での、前のデータ・ストライプの数値順序を示す。前述のように、それぞれのデータ・ストライプのサイズは、すべてが１２８Ｂに等しいなどのように等しいため、前のデータ・ストライプは、インデックスに基づいてメイン・メモリ内の対応する大規模バケット内で容易に位置を突き止めることができる。
【００５６】
加えて、当該アクセラレータのローカル・テール・ポインタ・リスト内の複数のエントリは、複数のデータ領域のうちの１つにそれぞれ対応し、メイン・メモリ内で最新のデータ・ストライプが属する大規模バケット内の対応するデータ領域の最新のデータ・ストライプの位置を示すために、それぞれ使用される。
【００５７】
加えて、このステップで逆リンク付けリストを更新するプロセスは、以下の通りであり、第１に、ステップ５３５でメイン・メモリに書き戻されたデータ・ストライプが属するデータ領域に対応するテール・ポインタ・リスト内のエントリが決定され、第２に、テール・ポインタ・リスト内のそのエントリの値が、メイン・メモリに書き戻された上記データ・ストライプに対応するインデックス・リスト内のエントリに、そのデータ・ストライプの前のデータ・ストライプの位置を示すために書き戻され、第３に、テール・ポインタ・リスト内のエントリが、メイン・メモリ内でデータ・ストライプが属する大規模バケット内のメイン・メモリに書き戻されたデータ・ストライプの位置を使用して、そのデータ領域の現在の最新データ・ストライプの位置を示すように更新される。
【００５８】
したがって、上記インデックス・リストおよびテール・ポインタ・リストからなる逆リンク付けリストを使用すると、１つの小規模バケットに属する複数のデータ・ストライプをまとめて逆にリンクさせ、論理的には収束するが物理的には分散された、図４（ｃ）に示されたような小規模バケットを形成することができる。
【００５９】
ステップ５４５で、当該アクセラレータのローカル・インデックス・リストが満杯であるかどうかが判別される。満杯の場合、プロセスはステップ５５０に進み、満杯でない場合はステップ５５５に進む。
【００６０】
ステップ５５０で、当該アクセラレータのローカル・インデックス・リスト内のコンテンツが、メイン・メモリのインデックス・リストに書き込まれる。
【００６１】
前述のように、それぞれのアクセラレータによって書き戻されたデータ・ストライプは、これらのデータ・ストライプが属する大規模バケットに従って個々に格納され、メイン・メモリのインデックス・リスト内のこれらのデータ・ストライプに対応するインデックスも、それに応じて大規模バケットに従って互いに独立している。
【００６２】
したがってこのステップで、当該アクセラレータは、そのローカル・インデックス・リスト内のコンテンツを、アクセラレータが区分化している大規模バケットに対応するメイン・メモリのインデックス・リスト内の部分に追加するはずである。
【００６３】
ステップ５５５で、当該アクセラレータのローカル・ストレージ内に区分化されていない要素が依然として存在するかどうかが判別され、存在する場合、プロセスはステップ５１５に戻って他の要素の処理を続行し、存在しない場合、ステップ５６０に進む。
【００６４】
ステップ５６０で、メイン・メモリ内のアクセラレータに割り振られた大規模バケット内に区分化されていない要素が依然として存在するかどうかが判別され、存在する場合、プロセスはステップ５１０に戻って、メイン・メモリ内の大規模バケットからアクセラレータのローカル・ストレージへのデータの次の部分の獲得を続行し、存在しない場合、プロセスは終了する。
【００６５】
上記は、本発明の実施形態に従った、図３のステップ３２０のプロセスの詳細な説明である。
【００６６】
次に図３に戻ると、ステップ３２５で、当該複数の大規模バケットがそれぞれ複数の小規模パケットに区分化された後、図４（ｄ）に示されるように、これら複数の大規模バケット内に、同じデータ領域に対応する小規模バケットがマージされる。したがって、図４（ｅ）に示されるように、当該データ・セットは最終的に、当該複数のデータ領域に対応する複数のマージ済みバケットに区分化される。
【００６７】
たとえば、上記複数のデータ領域０〜９９、１００〜１９９、２００〜２９９、・・・、９００〜９９９の場合、データ領域０〜９９に対応する当該複数の大規模バケット内の小規模バケットが１つのバケットにマージされ、データ領域１００〜１９９に対応する小規模バケットが１つのバケットにマージされるという具合である。
【００６８】
このステップで、同じデータ領域に対応する小規模バケットのいわゆるマージングとは、これらの小規模バケットをまとめて物理的にマージすることではなく、メイン・メモリ内のインデックス・リストおよびテール・ポインタ・リストを使用することにより、インデックス・リストおよびテール・ポインタ・リストの正規化を通じて、そのデータ領域に対応するマージ済みバケットを形成するために、当該データ・セット内の同じデータ領域に属するすべてのデータ・ストライプをまとめてグローバルに、論理的にリンクさせることである。
【００６９】
具体的に言えば、前述のように、それぞれのアクセラレータによって生成されたインデックス・コンテンツは、大規模バケットに従ってメイン・メモリのインデックス・リスト内で互いに独立しており、それぞれのアクセラレータのローカル・テール・ポインタ・リスト内に記録されるのは、対応する大規模バケット内の様々な小規模バケットの最新のデータ・ストライプの位置である。
【００７０】
したがってこのステップでは、第１に、メイン・メモリ内のインデックス・リストについて、その中の第２の大規模バケットに対応するインデックスから始まり、対応する大規模バケット内のデータ・ストライプの当初の位置を示すインデックスを置き換えるために、インデックスはデータ・セット全体の中の対応するデータ・ストライプのグローバル位置を示すように修正される。これは、インデックス・リストを使用することで、各大規模バケットのデータ・ストライプの総数を合計し、その後、第２の大規模バケットから始まる各大規模バケットについて、その大規模バケットに対応するインデックスの値を、そのバケットの前のすべての大規模バケットのデータ・ストライプの総数だけ増加させることを通じて、実施可能である。図６を参照し、第１の大規模バケットが８つのデータ・ストライプを含むと想定すると、第２の大規模バケットに対応するメイン・メモリのインデックス・リスト内のすべてのエントリのインデックス値は、８だけ増加される。さらに、第２の大規模バケットも８つのデータ・ストライプを含むと想定すると、ローカル指示からグローバル指示へのインデックス・リスト内のインデックス値の修正を実施するために、第３の大規模バケットに対応するすべてのインデックスの値は１６だけ増加されるという具合である。
【００７１】
加えて、当該複数のアクセラレータそれぞれのローカル・テール・ポインタ・リストについて、メイン・メモリ内のインデックス・リストと同様に、その中の各エントリの値も、データ・ストライプが属する大規模バケット内の対応するデータ・ストライプの位置の当初の指示から、データ・セット全体におけるそのデータ・ストライプのグローバル位置の指示へと、修正されるべきである。
【００７２】
加えてこのステップでは、メイン・メモリのインデックス・リスト内の当該複数の大規模バケットの中で、ヘッド・インデックスおよびテール・インデックスも互いにリンクされる。すなわち、メイン・メモリ内のインデックス・リストについて、その中の第２の大規模バケットに対応するインデックスから始まり、各大規模バケットの各小規模バケットの第１のデータ・ストライプのインデックスが、当該複数のアクセラレータそれぞれのローカル・テール・ポインタ・リスト内の修正されたコンテンツに基づいて、前の大規模バケット内の対応する小規模バケットの最新のデータ・ストライプの位置を示すように、修正される。特に、第２の大規模バケットから始まり、各大規模バケットについて、その大規模バケット内の各小規模バケットの第１のデータ・ストライプは、大規模バケットに対応するアクセラレータのローカル・テール・ポインタ・リスト内のコンテンツに基づいて配置され、これらの第１のデータ・ストライプのインデックス・エントリは、前の大規模バケットに対応するアクセラレータのローカル・テール・ポインタ・リスト内のコンテンツに基づいて、前の大規模バケット内の対応する小規模バケットの最新のデータ・ストライプをポイントするように、修正される。たとえば、第２の大規模バケット内のデータ領域０〜９９の小規模バケット内で、第１のデータ・ストライプに対応するインデックス値が最初は０であると想定すると、これは、第１のデータ・ストライプの前に、データ領域０〜９９の他のデータ・ストライプがないことを示し、第１の大規模バケット内のデータ領域０〜９９の小規模バケット内の最新のデータ・ストライプの位置が、第１の大規模バケットに対応するアクセラレータのローカル・テール・ポインタ・リスト内のコンテンツに基づいて、５と決定されるものと想定すると、第２の大規模バケット内のデータ領域０〜９９の小規模バケット内の第１のデータ・ストライプに対応するインデックス値は、第１の大規模バケット内のデータ領域０〜９９の小規模バケット内の最新のデータ・ストライプにリンクさせるように、０から５に修正される。
【００７３】
加えてこのステップでは、最新の大規模バケットに対応するアクセラレータのローカル・テール・ポインタ・リスト内のコンテンツが、データ・セット全体のグローバル・テール・ポインタとして、メイン・メモリのテール・ポインタ・リストに書き込まれる。
【００７４】
したがって、メイン・メモリ内のインデックス・リストおよびテール・ポインタ・リストを修正することによって、同じデータ領域に属するデータ・セット内のすべてのデータ・ストライプを、それらを物理的にまとめてマージする必要なしに、論理的にまとめてリンクさせることができる。
【００７５】
ステップ３３０で、複数のマージ済みバケットのそれぞれについて、そのマージ済みバケット内のデータ値の配分を精密に示すことができるパラメータは、その小規模バケット内のデータ値の配分を精密に示すことができる各小規模バケットについてステップ３２０で一般化されたパラメータに基づいて決定される。
【００７６】
たとえば、各小規模バケットのデータ値の平均または分散、最小値および最大値に基づいて、複数のマージ済みバケットそれぞれのデータ値の平均または分散、最小値および最大値を決定することができる。
【００７７】
ステップ３３５で、複数のマージ済みバケット内の当該複数のアクセラレータのローカル・ストレージ容量よりも大きいバケットがあるかどうかが判別される。
【００７８】
このステップで、複数のマージ済みバケットのそれぞれについて、メイン・メモリ内のインデックス・リストおよびテール・ポインタ・リストを使用することによって、そのバケット内に含まれるデータ・ストライプの総数を一般化すること、ならびに、その総数に、上記１２８Ｂなどのデータ・ストライプのサイズを掛け合わせることを通じて、マージ済みバケットのサイズを取得することができる。
【００７９】
さらに、図７のバケット２などの、当該複数のアクセラレータのローカル・ストレージ容量よりも大きいマージ済みバケットが存在するものと判別された場合、プロセスはステップ３４０に進み、存在しないと判別された場合、プロセスは終了する。
【００８０】
ステップ３４０で、当該複数のアクセラレータのローカル・ストレージ容量よりも大きいマージ済みバケットそれぞれについて、そのバケット内のデータ値の配分を精密に示すことができるステップ３３０で決定されたパラメータに基づいて、複数のデータ領域が決定される。その後、プロセスはステップ３１５に戻り、結果として生じるすべてのバケットのサイズが、当該複数のアクセラレータのローカル・ストレージ容量よりも小さくなるまで、これらのバケットを、それらを新しいデータ・セットとみなしてさらに区分化する。したがって、後続の反復で使用されるパラメータが、データ・セット自体に基づいて計算されるため、データの区分化はより正確になる。
【００８１】
上記は、この実施形態のマルチプロセッサ・システム上でデータ・セットを区分化するための方法の詳細な説明である。この実施形態では、データ・セットが、データ間の比較ではなくデータの計算を通じて複数のバケットに区分化されるため、この方法は、比較的分岐機能に乏しいＣＢＥなどのマルチプロセッサ・システムにとって特に好適であり、こうしたマルチプロセッサ・システム上でのデータ・セットの区分化に関する性能を向上させることができる。加えて、データの物理的移動を通じて同じデータ領域に属するデータを１つのバケットにマージするのではなく、同じデータ領域に属する複数のデータ・ストライプがリンク付けリストを介して１つのバケットとしてリンクされるため、データ・セットの区分化時のデータ移動コストを大幅に低下させることが可能であり、データの区分化に関する性能を向上させることが可能である。
【００８２】
次に、本発明のマルチプロセッサ・システム上でデータ・セットを区分化するための方法を使用することによって、データ・セットをソートするための方法について説明する。
【００８３】
図８は、本発明の実施形態に従った、マルチプロセッサ・システム上でデータ・セットをソートするための方法を示す流れ図である。ここで、マルチプロセッサ・システムは、少なくとも１つのコア・プロセッサと複数のアクセラレータとを有する。具体的に言えば、マルチプロセッサ・システムは、たとえば１つのＰＰＵ（コア・プロセッサ）および８つのＳＰＵ（アクセラレータ）を備える、上記ＣＢＥとすることができる。
【００８４】
図８に示されるように、ステップ８０５で、ソートされることになるデータ・セットはメイン・メモリ内で獲得および格納される。
【００８５】
ステップ８１０で、ソートされることになるデータ・セットは、図３〜７のマルチプロセッサ・システム上でデータ・セットを区分化するための方法を使用することによって、複数の異なるデータ領域に対応する複数のバケットに区分化される。
【００８６】
ここで、図９に示されるように、複数のバケットはそれぞれ複数のデータ・ストライプを含み、これらのデータ・ストライプは論理的には収束され、物理的には分散され、これらのデータ・ストライプは、インデックス・リストおよびテール・ポインタ・リストからなるメイン・メモリ内のリンク付けリストによって、バケットを形成するためにまとめてリンク付けされる。
【００８７】
次にステップ８１５で、複数のバケットがメイン・メモリから複数のアクセラレータへと分配される。
【００８８】
分配時に、複数のバケットそれぞれについて、そのバケット内の最新のデータ・ストライプは、メイン・メモリ内のテール・ポインタ・リストの対応するエントリの値に基づいて配置され、前のデータ・ストライプは、インデックス・リストを使用して順番に配置されるため、結果としてこれらのデータ・ストライプはメイン・メモリから順番に取得され、図９の右側に示されるように、そのアクセラレータに分配されたバケットとして、対応するアクセラレータのローカル・ストレージに送達される。
【００８９】
ステップ８２０で、複数のアクセラレータは、複数のバケットそれぞれでデータのソートを並行して実行することができる。ここで、本発明において複数のアクセラレータによって採用されるデータ・ソート・アルゴリズムには特別な制限はなく、挿入ソート、バブル・ソート、選択ソートなどの、現在知られている任意のデータ・ソート・アルゴリズム、あるいは、今後知られることになるデータ・ソート・アルゴリズムを使用することができる。
【００９０】
ステップ８２５で、図９に示されるように、複数のアクセラレータは、それぞれ複数の異なるデータ領域の順序に従って、それらのソート済みバケットをメイン・メモリに書き戻す。
【００９１】
上記は、この実施形態のマルチプロセッサ・システム上でデータ・セットをソートするための方法の詳細な説明である。この実施形態では、ソートされることになるデータ・セットは、図３〜７のマルチプロセッサ・システム上でのデータ・セットの区分化のための方法を使用することによって、そのサイズが複数のアクセラレータのローカル・ストレージ容量に適した、複数の異なるデータ領域に対応する複数のバケットに区分化されるため、複数のアクセラレータは、そのデータ・セット上でデータのソートを並行して実行することが可能であり、アクセラレータとメイン・メモリとの間でのデータ・スワップ動作を減少させることが可能であって、結果として、データ・ソートの性能を大幅に向上させることができる。
【００９２】
同じ発明の概念の下で、本発明は、マルチプロセッサ・システム内でデータ・セットを区分化するための装置を提供し、これについて、図面に関して以下で説明する。
【００９３】
図１０は、本発明の実施形態に従った、マルチプロセッサ・システム上でデータ・セットを区分化するための装置を示すブロック図である。ここで、マルチプロセッサ・システムは、少なくとも１つのコア・プロセッサと複数のアクセラレータとを有する。具体的に言えば、マルチプロセッサ・システムは、たとえば１つのＰＰＵ（コア・プロセッサ）および８つのＳＰＵ（アクセラレータ）を備えた上記ＣＢＥとすることができる。
【００９４】
図１０に示されるように、本実施形態のマルチプロセッサ・システムにおいてデータ・セットを区分化するための装置１０は、大まかな区分化ユニット１０１、パラメータ取得ユニット１０２、データ領域決定ユニット１０３、精密な区分化ユニット１０４、バケット・マージ・ユニット１０５、および再区分化バケット決定ユニット１０６を備える。
【００９５】
大まかな区分化ユニット１０１は、各反復において、区分化されることになるデータ・セットを複数の大規模バケットに大まかに区分化する。
【００９６】
パラメータ取得ユニット１０２は、各反復において、そのデータ・セット内でのデータ値の配分を示すことができる、当該データ・セットのパラメータを取得する。
【００９７】
好ましい実施形態では、第１の反復においてそのデータ・セット内でのデータ値の配分を示すことができる当該データ・セットのパラメータは、そのデータ・セット内でのデータ値の配分を大まかに示すことができるそのデータ・セットに基づいて推定されるパラメータであり、後続の反復におけるパラメータは、前の反復で一般化された正確なパラメータである。
【００９８】
他の実施形態では、第１の反復におけるパラメータは、そのデータ・セット内でのデータ値の配分を正確に示すことができる、そのデータ・セットに基づいて計算されるパラメータでもある。
【００９９】
データ領域決定ユニット１０３は、各反復において、当該パラメータに基づいて当該データ・セットに関する複数のデータ領域を決定する。
【０１００】
一実施形態では、データ領域決定ユニット１０３は、当該データ・セットに関する固定ステップを備える複数の連続データ領域を決定する。他の実施形態では、データ領域決定ユニット１０３は、データの２進表現の複数ビットの重み付け合計に従って、複数のデータ領域を決定する。
【０１０１】
精密な区分化ユニット１０４は、各反復において当該複数のアクセラレータを並行して使用することによって、当該複数の大規模バケットを、複数のデータ領域それぞれに対応する複数の小規模バケットに区分化するものであり、ここで、当該複数のアクセラレータそれぞれは、区分化している大規模バケット内の各要素について、複数のデータ領域の中でその要素が属するデータ領域を計算によって決定する。
【０１０２】
この実施形態では、当該複数のアクセラレータそれぞれのローカル・ストレージ内で、当該複数のデータ領域のそれぞれについてストレージ領域がそれぞれ設定される。
【０１０３】
加えて、図１０に示されるように、精密な区分化ユニット１０４は、データ領域番号付けユニット１０４１、コンピューティング・ユニット１０４２、およびデータ・カテゴリ化ユニット１０４３をさらに備える。
【０１０４】
データ領域番号付けユニット１０４１は、各反復において複数のデータ領域を番号付けする。
【０１０５】
コンピューティング・ユニット１０４２は、当該複数のアクセラレータのそれぞれが、区分化している大規模バケットから順番に各要素を取得すること、および、計算結果が各反復においてその要素が属しているデータ領域の番号に対応するように、その要素について計算を実行することを、可能にする。
【０１０６】
一実施形態では、コンピューティング・ユニット１０４２は、当該複数のアクセラレータそれぞれが、取得した各要素について、その要素を複数のデータ領域の固定ステップの値で割る計算、および結果を丸める計算を実行できるようにするものであって、結果として、丸めの結果はその要素が属するデータ領域の数に対応することになる。他の実施形態では、コンピューティング・ユニット１０４２は、当該複数のアクセラレータそれぞれが、取得した各要素について、要素の２進表現の複数のビットの重み付け合計の計算を実行できるようにするものであって、結果としてその重み付け合計の値は、その要素が属するデータ領域の数に対応することになる。
【０１０７】
データ・カテゴリ化ユニット１０４３は、当該複数のアクセラレータそれぞれが、各反復におけるコンピューティング・ユニット１０４２の計算結果に基づいて、アクセラレータが区分化している大規模バケット内の各要素を、その要素が属しているデータ領域に対応するアクセラレータのローカル・ストレージのストレージ領域に格納できるようにするものである。
【０１０８】
この実施形態では、当該複数のアクセラレータそれぞれのローカル・ストレージにおいて、小規模バケットを形成するために、アクセラレータが区分化している大規模バケット内の同じデータ領域に属する要素をそれぞれまとめてリンク付けするためのリンク付けリストが設定され、このリンク付けリストは、インデックス・リストおよびテール・ポインタ・リストからなる。
【０１０９】
図１０に示されるように、精密な区分化ユニット１０４は、データ・ストライプ書き戻しユニット１０４４とリンク付けリスト更新ユニット１０４５とをさらに備える。
【０１１０】
データ・ストライプ書き戻しユニット１０４４は、当該複数のアクセラレータのうちの１つのストレージ領域が満杯であることが判別された場合、当該アクセラレータに、そのストレージ領域内の要素を、各反復において当該アクセラレータがメイン・メモリ内で区分化している大規模バケットの位置に、データ・ストライプとして書き戻させることが可能である。
【０１１１】
リンク付けリスト更新ユニット１０４５は、当該複数のアクセラレータのうちの１つがメイン・メモリにデータ・ストライプを書き戻した後、当該アクセラレータに、そのローカル・ストレージ内のリンク付けリストを更新させ、そのデータ・ストライプを、各反復において同じデータ領域に属する、アクセラレータが区分化している大規模バケット内の他のデータ・ストライプに、リンク付けさせることができる。
【０１１２】
この実施形態では、同じデータ領域に属する当該データ・セット内の要素をまとめてリンク付けするために、リンク付けリストがメイン・メモリ内に設定され、このリンク付けリストはインデックス・リストおよびテール・ポインタ・リストからなる。
【０１１３】
図１０に示されるように、精密な区分化ユニット１０４は、当該複数のアクセラレータのうちの１つのローカル・インデックス・リストが満杯であるものと判別した場合、当該アクセラレータに、各反復において、アクセラレータが区分化している大規模バケットに対応するメイン・メモリのインデックス・リスト内の一部分に、そのインデックス・リストのコンテンツを書き込ませることができるようにするための、インデックス書き戻しユニット１０４６をさらに備える。
【０１１４】
図１０に示されるように、精密な区分化ユニット１０４は、各反復において、当該複数のアクセラレータのそれぞれに、それによって区分化される複数の小規模バケットそれぞれについて、区分化中のその小規模バケット内でのデータ値の現在の配分を精密に示すことができるパラメータを、リアルタイムで一般化させることができるようにするための、パラメータ一般化ユニット１０４７をさらに備える。パラメータは、データ値の平均／分散、最小値および最大値のうちの、１つまたは複数を備える。
【０１１５】
バケット・マージ・ユニット１０５は、各反復において、当該複数の大規模バケットの中で同じデータ領域に対応する複数の小規模バケットのマージを実行する。
【０１１６】
図１０に示されるように、バケット・マージ・ユニット１０５は、インデックス・マージ・ユニット１０５１とパラメータ・マージ・ユニット１０５２とをさらに備える。
【０１１７】
インデックス・マージ・ユニット１０５１は、各反復において、メイン・メモリにおける当該インデックス・リストおよび当該テール・ポインタ・リストを修正し、結果として、その中の各エントリが、当初はそれが属する大規模バケット内のそのデータ・ストライプの位置を示すエントリを置き換えるために、データ・セット全体において対応するデータ・ストライプのグローバル位置を示すように変更され、ヘッド・インデックスおよびテール・インデックスは当該複数の大規模バケットの中で互いにリンク付けされる。
【０１１８】
パラメータ・マージ・ユニット１０５２は、各反復において、マージ済みバケットそれぞれについて、精密な区分化ユニット１０４内のパラメータ一般化ユニット１０４７によって一般化された、そのマージ済みバケットに含まれる複数の小規模バケットのパラメータに基づいて、そのマージ済みバケット内でのデータ値の配分を精密に示すことができるパラメータを決定する。
【０１１９】
再区分化バケット決定ユニット１０６は、各反復において、当該複数のアクセラレータのローカル・ストレージの容量よりも大きいマージ済みバケット内のバケットを、区分化されることになる新しいデータ・セットとして決定する。
【０１２０】
上記は、本実施形態のマルチプロセッサ・システム内でデータ・セットを区分化するための装置についての詳細な説明である。
【０１２１】
次に、本発明のマルチプロセッサ・システム内でデータ・セットを区分化するための装置１０を適用する、データ・セットをソートするための装置について説明する。
【０１２２】
図１１は、本発明の実施形態に従ったマルチプロセッサ・システム内でデータ・セットをソートするための装置を示すブロック図である。ここでマルチプロセッサ・システムは、少なくとも１つのコア・プロセッサと複数のアクセラレータとを有する。具体的に言えば、マルチプロセッサ・システムは、たとえば、１つのＰＰＵ（コア・プロセッサ）および８つのＳＰＵ（アクセラレータ）を備えた上記ＣＢＥとすることができる。
【０１２３】
図１１に示されるように、本実施形態のマルチプロセッサ・システム内でデータ・セットをソートするための装置１１は、データ・セット取得１１１、図１０のマルチプロセッサ・システム内でデータ・セットを区分化するための装置１０、データ分配ユニット１１３、ソート・ユニット１１４、およびデータ書き戻しユニット１１５を備える。
【０１２４】
データ・セット取得ユニット１１１は、ソートされることになるデータ・セットを取得し、これをメイン・メモリに格納する。
【０１２５】
図１０のマルチプロセッサ・システム内でデータ・セットを区分化するための装置１０は、複数の異なるデータ領域に従って、ソートされることになる当該データ・セットを複数のバケットに区分化する。
【０１２６】
データ分配ユニット１１３は、当該複数のバケットをメイン・メモリから当該複数のアクセラレータへと分配する。
【０１２７】
ソート・ユニット１１４は、当該複数のアクセラレータが、当該複数のバケット上でデータのソートをそれぞれ並行して実行できるようにするものである。
【０１２８】
データ書き戻しユニット１１５は、当該複数のアクセラレータが、当該複数の異なるデータ領域の順序に従って、それらのソート済みバケットをメイン・メモリ内にそれぞれ書き戻しできるようにするものである。
【０１２９】
上記は、本実施形態のマルチプロセッサ・システム内でデータ・セットをソートするための装置についての詳細な説明である。ここで、装置１０および１１ならびにその構成要素は、専用に設計された回路またはチップを使用して実装するか、あるいは、対応するプログラムを実行するコンピュータ（プロセッサ）によって実装することができる。
【０１３０】
以上、本発明のマルチプロセッサ・システム上で、データ・セットを区分化するための方法および装置、ならびにデータ・セットをソートするための方法および装置について、いくつかの例示的実施形態を用いて詳細に説明してきたが、これらの実施形態は網羅的なものではなく、当業者であれば、本発明の趣旨および範囲内で様々な変形および修正が実行可能である。したがって本発明はこれらの実施形態に限定されるものではなく、その範囲は添付の特許請求の範囲によってのみ定義される。
【符号の説明】
【０１３１】
１０１    大まかな区分化ユニット
１０２    パラメータ取得ユニット
１０３    データ領域決定ユニット
１０４    精密な区分化ユニット
１０５    バケット・マージ・ユニット
１０６    再区分化バケット決定ユニット
１１１    データ・セット取得ユニット
１１３    データ分配ユニット
１１４    ソート・ユニット
１１５    データ書き戻しユニット
【図１】
2010033561.tif 000003
【図２】
2010033561.tif 000004
【図３】
2010033561.tif 000005
【図４】
2010033561.tif 000006
【図５】
2010033561.tif 000007
【図６】
2010033561.tif 000008
【図７】
2010033561.tif 000009
【図８】
2010033561.tif 000010
【図９】
2010033561.tif 000011
【図１０】
2010033561.tif 000012
【図１１】
2010033561.tif 000013