JP4339381B2 - 共有メモリ型マルチプロセッサシステム及びその情報処理方法 - Google Patents

共有メモリ型マルチプロセッサシステム及びその情報処理方法 Download PDF

Info

Publication number
JP4339381B2
JP4339381B2 JP2007517805A JP2007517805A JP4339381B2 JP 4339381 B2 JP4339381 B2 JP 4339381B2 JP 2007517805 A JP2007517805 A JP 2007517805A JP 2007517805 A JP2007517805 A JP 2007517805A JP 4339381 B2 JP4339381 B2 JP 4339381B2
Authority
JP
Japan
Prior art keywords
record
item value
array
value
item
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.)
Active
Application number
JP2007517805A
Other languages
English (en)
Other versions
JPWO2006126467A1 (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.)
Turbo Data Laboratories Inc
Original Assignee
Turbo Data Laboratories Inc
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 Turbo Data Laboratories Inc filed Critical Turbo Data Laboratories Inc
Publication of JPWO2006126467A1 publication Critical patent/JPWO2006126467A1/ja
Application granted granted Critical
Publication of JP4339381B2 publication Critical patent/JP4339381B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、複数台のプロセッサがメモリを共有して並列処理を行う共有メモリ型マルチプロセッサシステムにおける情報処理方法、特に、共有メモリ上の大規模な表形式データを複数台のプロセッサで並列にソートする情報処理方法に関する。
本発明は、また、このような情報処理方法を実施する共有メモリ型マルチプロセッサシステムに関する。
本発明は、さらに、このような情報処理方法を実現させるためのプログラムに関する。
本発明は、さらに、このようなプログラムを記録した記憶媒体に関する。
社会全体のさまざまな場所にコンピュータが導入され、インターネットをはじめとするネットワークが浸透した今日では、そこここで、大規模データが蓄積・処理されるようになった。
一方で、大規模データを処理するために、効率の良いアルゴリズムが開発されている。大規模データ、特に、大規模な表形式データを処理する際に頻出する処理はソートである。効率的なソートアルゴリズムとして、基数(RADIX)ソートとカウンティング(COUNTING)ソート(計数ソート、分布数え上げソートとも称される)が知られている。カウンティングソートは基数ソートの各桁のソートに利用されることがあり、効率の良いアルゴリズムであるが、その適用のためには、
1)ソート対象が整数であること
2)ソート対象となる整数の上限と下限が分かっていること
3)ソート対象となる整数の上限と下限の差が、大きすぎないこと
という前提条件がある。
これに対して、本発明者は、大規模な表形式データを高速に検索、集計、ソートするために適したデータ管理機構を提案している(特許文献1を参照)。このデータ管理機構は、表形式データの項目の各項目値を表すための情報ブロックを有する。この情報ブロックでは、表形式データの項目に属する項目値は、各項目値に付与された項目値番号と、項目値番号の順番に並べられた実際の項目値の配列とによって表される。各レコードの項目値に対応した項目値番号をレコード番号順に並べた配列が準備され、各レコードの項目値は、当該レコードの項目値番号に対応した値を項目値の配列から見つけることによって特定される。また、表形式データ中の処理対象のレコードは、レコード番号を順番に並べた配列によって特定される。
情報ブロックは、表形式データの各項目に対し、その項目に属する項目値が順序付け(整数化)された項目値番号の順番に、上記項目値番号に対応した項目値が格納されたテーブルである。項目値自体は、数値(整数、固定小数点、浮動小数点など)、文字列などのどのようなタイプのデータでもよい。したがって、このデータ管理機構は、あらゆるタイプのデータの値が項目値番号という整数で取り扱えることに特長がある。すなわち、このデータ管理機構によれば、たとえば、文字列型のデータのソートを行う際に、文字列型のデータをそのままソート対象としてソートするのではなく、文字列型のデータの値に対応した項目値番号をソート対象としてソートすることができる。このとき、ソートの結果はレコード番号を順番に並べた配列によって表される。このように、本発明者が提案した情報ブロックに基づくデータ管理機構は、カウンティングソートを適用するための上記1)から3)の前提条件を満たしている点で優れている。
他方で、大規模データを処理するために必要である膨大な計算を高速に実行するため、並列処理を導入することが試みられている。ソートに関しても各種の並列ソートアルゴリズムが提案されている。一般に、並列処理アーキテクチャは「分散メモリ型」と「共有メモリ型」に大別される。分散メモリ型は、各プロセッサがそれぞれローカルなメモリを持ち、これらを結合してシステムを構築する。この方式では、理論的に数百〜数万台ものプロセッサを組み込んだハードウェアシステムの設計が可能である。しかしながら、分散メモリ型は、データの分掌管理の複雑さや、プロセッサ間通信の効率の低さなどの技術的課題がある。これに対して、共有メモリ型は複数のプロセッサが1つの巨大なメモリ空間を共有する方式である。この方式では、プロセッサ群と共有メモリ間のトラフィックがボトルネックとなるので、現実的には百台を越えるプロセッサを用いてシステムを構築することは容易ではない、と考えられている。
しかし、このような状況下で、近年、複数台のCPUを用いた共有メモリ型マルチプロセッサシステムとして構成されたパーソナルコンピュータが入手可能である。この種のパーソナルコンピュータに使用される標準的なCPUは、メモリバスの5〜6倍程度の内部クロックで動作し、その内部に自動的な並列実行機能やパイプライン処理機能が装備されており、およそ1データを1クロック(メモリバス)で処理できる。
国際公開WO00/10103号公報
したがって、大規模な表形式データを処理するために、効率的なソートアルゴリズムと、共有メモリ型マルチプロセッサシステムとを組み合わせることが望まれる。
効率的なソートアルゴリズムとして知られているカウンティングソートは、上記の1)から3)の前提条件によって制約されているので、本発明者が提案した上記の情報ブロックに基づくデータ管理機構を採用しない限り、大規模な表形式データの処理に適用することが困難である。さらに、大規模な表形式データを共有メモリ型マルチプロセッサシステムで並列ソートする技術は未だ知られていない。
したがって、本発明の目的は、上記情報ブロックに基づくデータ管理機構を利用して、共有メモリ上の大規模な表形式データを複数台のプロセッサで並列にソートするための情報処理方法を提案することである。
また、本発明の目的は、このような情報処理方法を実施する共有メモリ型マルチプロセッサシステムを提供することである。
さらに、本発明の目的は、このような情報処理方法を実現させるためのプログラムを提供することである。
さらに、本発明の目的は、このようなプログラムを記録した記憶媒体を提供することである。
本発明は、表形式データの各項目に対し、その項目に属する項目値が順序付け(整数化)された項目値番号の順番(昇順又は降順のどちらでもよい)に、上記項目値番号に対応した項目値が格納されたテーブルである情報ブロックに基づくデータ管理機構に依拠している。項目値自体は、数値(整数、固定小数点、浮動小数点など)、文字列などのどのようなタイプのデータでもよい。このデータ管理機構を採用することにより、あらゆるタイプのデータの値が項目値番号という整数で取り扱える。すなわち、このデータ管理機構によれば、任意のタイプのデータのソートを行う際に、その任意のタイプのデータをそのままソート対象としてソートするのではなく、そのデータの値に対応した項目値番号をソート対象としてソートすることができる。したがって、この情報ブロックに基づくデータ管理機構は、カウンティングソートを適用するための前提条件を満たしている。また、表形式データ中の処理対象のレコードがレコード番号を順番に並べた配列によって特定されるので、ソートの結果はレコード番号を順番に並べた配列によって表される。
本発明は、このようなデータ管理機構を共有メモリ型マルチプロセッサシステムに適用することにより、共有メモリ上の大規模な表形式データを複数台のプロセッサで並列にソートするための情報処理方法、及び、その情報処理方法を実施する共有メモリ型マルチプロセッサシステムを実現する。そのため、本発明によれば、最初に、処理対象のレコードが分割されて複数台のプロセッサへ割り当てられる。次に、各プロセッサが処理対象のレコードに関連付けられた項目値番号のローカルな出現回数をカウントする。次に、各プロセッサでカウントされた項目値番号のローカルな出現回数を、項目値番号のグローバルな累計数、すなわち、複数台のプロセッサ間で共通に用いられる累計数に変換する。最後に、各プロセッサは、このグローバルな累計数をポインタとして利用することにより、割り当てられたレコードの順序を入れ替える。したがって、本発明によれば、共有メモリ型マルチプロセッサシステムにおいて、レコードのある項目の項目値(たとえば、整数値、固定小数点数値、浮動小数点数値、文字列など)に関してレコードを並列にソートすることが可能である。
処理対象のレコードの複数台のプロセッサへの割り当て、ローカルな出現回数のカウント、及び、割り当てられたレコードの順序の入れ替えは、複数台のプロセッサが並列に処理可能である。また、グローバルな累計数の算出は、複数台のプロセッサの並列処理を利用してもよいが、メモリにシーケンシャルにアクセスできるためキャッシュへのヒット率が高いので、1台又は一部のプロセッサだけが担当して高速性を維持できる。
上記の本発明の原理は以下の種々の態様によって実施される。
本発明の第1の態様は、共有メモリ型マルチプロセッサシステムにおいてレコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法である。共有メモリ型マルチプロセッサシステムは、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、前記共有メモリにアクセス可能である複数台のプロセッサと、を具備する。本発明による情報処理方法は、
前記レコード番号配列を分割して第1の複数台のプロセッサに割り当てるステップと、
前記第1の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の出現回数をカウントするステップと、
前記項目値番号の範囲を分割して第2の複数台のプロセッサに割り当てるステップと、
前記第2の複数台のプロセッサのうちの各プロセッサにおいて、前記項目値番号の順番に、前記項目値番号が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記割り当てられた項目値番号のそれぞれの出現回数を累計数に変換するステップと、
前記第1の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した前記項目値番号の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む。
この情報処理方法は、項目値番号の出現回数のカウント処理の並列化、出現回数から累計数への変換処理の並列化、及び、さらなるレコード番号配列の作成処理の並列化を達成する。したがって、本発明は、カウンティングソートの技術を共有メモリ型マルチプロセッサ環境に適合するように拡張することにより、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて並列ソートすることが可能である。尚、マルチプロセッサシステムを構成する複数台のプロセッサのうち、任意の第1の複数台のプロセッサがレコード番号配列のそれぞれの部分を担当し、任意の第2の複数台のプロセッサが項目値番号の範囲のそれぞれの部分を担当する。第1の複数台の個数と第2の複数台の個数はマルチプロセッサシステムを構成するプロセッサの全数でもよく、その一部でもよいことに注意する必要がある。
また、本発明の情報処理方法は、項目値番号に関して基数ソートの考え方を導入することにより、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて多段階で並列ソートすることが可能である。たとえば、項目値番号配列のサイズが大きい場合には、項目値番号配列を圧縮して利用できれば処理を効率化することが可能である。そのため、本発明による情報処理方法は、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
を含む。これにより、最下位桁から最上位桁まで順番に項目値番号の桁ごとに並列ソート処理が行われる。前記ソート処理は、
前記現在のレコード番号配列を分割して第1の複数台のプロセッサに割り当てるステップと、
前記第1の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントするステップと、
前記項目値番号の現在の桁の値の範囲を分割して第2の複数台のプロセッサに割り当てるステップと、
前記第2の複数台のプロセッサのうちの各プロセッサにおいて、前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
前記第1の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む。
本発明によれば、項目値番号の最下位桁から最上位桁へ順番に現在の桁に関するソート処理が繰り返されるので、基数ソートの考え方に従って項目値番号に関するソートが実現される。したがって、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて並列ソートすることが可能である。
上記の多段階並列ソートでは、項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップは第2の複数台のプロセッサによって並列に実行される。しかし、このステップは複数台のプロセッサによって並列に実行しなくても高速に行える場合がある。なぜならば、このステップの処理は、シーケンシャルに行われるので、キャッシュヒット率が高いからである。そのため、本発明による情報処理方法は、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
を含み、
前記ソート処理が、
前記現在のレコード番号配列を分割して前記複数台のプロセッサに割り当てるステップと、
各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントするステップと、
少なくとも1台のプロセッサにおいて、前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
前記各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む。
本情報処理方法では、項目値番号の現在の桁の範囲は複数台のプロセッサに分割されることがなく、少なくとも1台、好ましくは、1台のプロセッサが、項目値番号の現在の桁の値の出現回数を順番に累計数に変換する。この場合も、項目値番号の最下位桁から最上位桁へ順番に現在の桁に関するソート処理が繰り返されるので、基数ソートの考え方に従って項目値番号に関するソートが実現される。したがって、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて並列ソートすることが可能である。
また、本発明は上記目的を達成するため、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
前記レコード番号配列を分割して前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードの順番を当該レコードに対応した項目値番号に応じて入れ替え、当該レコードのレコード番号をさらなるレコード番号配列に格納するステップと、
を含む、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法を提供する。
さらに、本発明は上記目的を達成するため、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の上位の桁に関して前記レコード番号配列中のレコード番号を並べ換え、前記項目値番号の上位の桁の値の順番に区分された中間的なレコード番号配列を生成するステップと、
前記中間的なレコード番号配列の区分ごとにプロセッサを割り当てるステップと、
前記区分ごとに割り当てられた各プロセッサが、前記中間的なレコード番号配列の前記区分内のレコード番号を前記項目値番号の下位の桁の値の順番に並べ換えるステップと、
を含む、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法を提供する。
本発明の第2の態様は、共有メモリと前記共有メモリにアクセス可能である複数台のプロセッサとを具備し、上記の本発明の情報処理方法を実施する共有メモリ型マルチプロセッサシステムである。本発明の共有メモリ型マルチプロセッサシステムにおいて、前記共有メモリは、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する。これにより、本発明の共有メモリ型マルチプロセッサシステムはブロック情報に基づくデータ管理機構を利用することができる。
各プロセッサは、
前記レコード番号配列のうち自プロセッサが受け持つ部分を決める手段と、
前記レコード番号配列の部分に含まれるレコードに対応した項目値番号の出現回数をカウントする手段と、
前記項目値番号の範囲のうち自プロセッサが受け持つ範囲を決める手段と、
前記項目値番号の順番に、前記項目値番号が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記受け持つ範囲内の項目値番号のそれぞれの出現回数を累計数に変換する手段と、
前記レコード番号配列の部分に含まれるレコードに対応した前記項目値番号の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
を含む。
各プロセッサは並列に動作可能であるため、出現回数のカウントの並列化、出現回数の累計数への変換の並列化、及び、さらなるレコード番号配列の作成の並列化が実現される。
項目値番号の出現回数を累計数に変換する際に、得られた累計数を項目値番号の順に伝搬させる必要がある。そのため、前記項目値番号の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される。
また、本発明の共有メモリ型マルチプロセッサシステムは、項目値番号に関して基数ソートの考え方を導入することにより、大規模な表形式データを多段階で並列ソートするため、各プロセッサが、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、
を含む。これにより、項目値番号の最下位桁から最上位桁までの桁ごとの並列ソート処理が順番に実行される。さらに、前記ソート処理を繰り返す手段は、
前記レコード番号配列のうち自プロセッサが受け持つ部分を決める手段と、
前記レコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントする手段と、
前記項目値番号の現在の桁の値の範囲のうち自プロセッサが受け持つ範囲を決める手段と、
前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記受け持つ範囲内の項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段と、
前記レコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
を含む。これにより、項目値番号の桁ごとの並列ソート処理が実現される。本発明によれば、項目値番号の桁ごとのソート処理において、複数台のプロセッサが、出現回数のカウントと、出現回数の累計数への変換と、さらなるレコード番号配列の作成と、を並列に実行する。
また、出現回数の累計数への変換を複数台のプロセッサで分担して行うため、本発明において、前記項目値番号の現在の桁の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される。
さらに、大規模な表形式データを多段階で並列ソートする本発明による共有メモリ型マルチプロセッサシステムは、現在の桁の値のそれぞれの出現回数の累計数化を少なくとも1台、好ましくは、1台のプロセッサで実行することも可能である。そのため、本発明による共有メモリ型マルチプロセッサシステムにおいて、各プロセッサは、前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、を含む。
各プロセッサの前記ソート処理を繰り返す手段は、前記レコード番号配列のうち自プロセッサが受け持つ部分を決める手段と、前記レコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントする手段と、を含む。
さらに、少なくとも1台のプロセッサの前記ソート処理を繰り返す手段は、前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段を含む。
さらに、前記ソート処理を繰り返す手段は、前記レコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段を含む。
本発明によれば、各プロセッサは、項目値番号の現在の桁の値の範囲のうち自プロセッサが受け持つ範囲を決める必要がなくなり、複数台のプロセッサで出現回数を累計数に変換する処理を分担しなくても済むので、共有メモリ型マルチプロセッサシステムの構成が簡単化される。
さらに、本発明の第3の態様によれば、このような情報処理方法を実現させるためのプログラムが提供される。
さらに、本発明の第4の態様によれば、このようなプログラムを記録した記憶媒体が提供される。
本発明によれば、共有メモリ型の並列処理環境において、大規模な表形式データの高速並列ソートを実現可能な情報処理装置を提供することが可能となる。
以下、添付図面を参照して本発明の種々の実施例を説明する。
[コンピュータシステム構成]
図1は本発明によるレコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法を実施するコンピュータシステムの一実施例の概略図である。図1に示すように、このコンピュータシステム10は、プログラムを実行することによりシステム全体および個々の構成部分を制御するp台のプロセッサ(CPU)12−1、12−2、...12−p、ワークデータなどを記憶する共有メモリ、たとえば、RAM(Random Access Memory)14、プログラム等を記憶するROM(Read Only Memory)16、ハードディスク等の固定記憶媒体18、CD−ROM19をアクセスするためのCD−ROMドライバ20、CD−ROMドライバ20や外部ネットワーク(図示せず)と接続された外部端子との間に設けられたインタフェース(I/F)22、キーボードやマウスからなる入力装置24、CRT表示装置26を備えている。CPU12、RAM14、ROM16、外部記憶媒体18、I/F22、入力装置24および表示装置26は、バス28を介して相互に接続されている。図示されていないが、各CPUは固有のローカルメモリを備えていてもよい。
本実施の形態にかかる、レコードの所定の項目の項目値に応じてレコード順を並べ換えるプログラムは、CD−ROM19に収容され、CD−ROMドライバ20に読取られても良いし、ROM16に予め記憶されていても良い。また、いったんCD−ROM19から読み出したものを、外部記憶媒体18の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク(図示せず)、外部端子およびI/F22を経て外部から供給されるものであっても良い。
また、本発明の実施の形態にかかる共有メモリ型マルチプロセッサシステムは、コンピュータシステム10にレコードの所定の項目の項目値に応じてレコード順を並べ換えるプログラムを実行させることにより実現される。
[情報ブロックに基づくデータ管理機構]
図2はデータ管理機構を説明するための表形式データの一例を表す図である。この表形式データは、上述の国際公開第WO00/10103号に提案したデータ管理機構を用いることにより、コンピュータ内では図3に示されるようなデータ構造として記憶される。
図3に示すように、表形式データの各レコードの並び順の番号と、内部データの並び順の番号を対応付ける配列301(以下、この配列を「OrdSet」のように略記する。)には、表形式のレコード毎に内部データの並び順番号が値として配置される。この例では、すべての表形式データが内部データとして表されるため、表形式データのレコード番号と内部データの並び順番号とは一致する。
例えば、性別に関しては、表形式データのレコード0に対応する内部データの並び順番号は、配列OrdSet301から「0」であることがわかる。並び順番号が「0」であるレコードに関する実際の性別の値、即ち、「男」又は「女」は、実際の値が所定の順序に従ってソートされた値リスト303(以下、値リストを「VL」のように略記する。)へのポインタ配列302(以下、ポインタ配列を「VNo」のように略記する。)を参照することによって取得できる。ポインタ配列302は、配列OrdSet301に格納されている並び順番号の順に従って、実際の値リスト303中の要素を指し示すポインタを格納している。これにより、表形式データのレコード「0」に対応する性別の項目値は、(1)配列OrdSet301からレコード「0」に対応する並び順番号「0」を取り出し、(2)値リストへのポインタ配列302から並び順番号「0」に対応する要素「1」を取り出し、(3)値リスト303から、値リストへのポインタ配列302から取り出された要素「1」によって指し示される要素「女」を取り出すことにより取得できる。
他のレコードに対しても、また、年齢及び身長に関しても同様に項目値を取得することができる。
このように表形式データは、値リストVLと、値リストへのポインタ配列VNoの組合せにより表現され、この組合せを、特に、「情報ブロック」と称する。図3には、性別、年齢及び身長に関する情報ブロックがそれぞれ情報ブロック308、309及び310として示されている。
単一のコンピュータが、単一のメモリ(物理的には複数であっても良いが、単一のアドレス空間に配置されアクセスされるという意味で単一のメモリ)であれば、当該メモリに、順序集合の配列OrdSet、各情報ブロックを構成する値リストVLおよびポインタ配列VNoとを記憶しておけばよい。しかしながら、大量のレコードを保持するためには、その大きさに伴ってメモリ容量も大きくなるため、これらの大量のレコードを並列処理できるのが望ましい。
そこで、本実施の形態においては、複数台のプロセッサが共有メモリに記憶されたレコードのデータにアクセスし、複数台のプロセッサの並列処理により、高速なソートを実現している。
[並列ソート]
次に、本発明の実施の形態にかかる、共有メモリ型マルチプロセッサシステムにおいてレコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法、すなわち、並列ソート方法を説明する。図4A、Bはソート対象のデータ構造を表す図である。図4Aに示された表形式データ401は、ソート対象のデータ構造を行列形式で分かりやすく表現したものであり、レコード0からレコード19までの20個のレコードを含み、各レコードは、年齢と地域の二つの項目により構成される。図4Bに示されたデータ構造402は、コンピュータシステム10の共有メモリ14に記憶されたデータ構造を表している。図4Bのレコード番号配列(OrdSet:順序集合を表す)403はレコード番号0から19を所定の順に従って格納する配列である。本例では、レコード番号は0から19の順に格納されている。年齢と地域のデータは、それぞれ、情報ブロック404と情報ブロック405の形で記憶される。年齢の情報ブロック404は、年齢の項目値に対応する項目値番号がレコード番号の順番に従って格納された項目値番号配列(以下では、VNo:値番号とも称される)406と、年齢の項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列(以下では、VL:値リストとも称される)407とにより構成される。同様に、地域の情報ブロック405は、地域の項目値に対応する項目値番号がレコード番号の順番に従って格納された項目値番号配列408と、地域の項目値が当該項目値に対応する項目番号の順序に従って格納された項目値配列409とにより構成される。コンピュータシステム10のp台のプロセッサ12−1、・・・、12−pは、共有メモリ14上のこれらのデータにアクセスすることが可能である。
図5は、本発明の実施の形態にかかる並列ソート方法のフローチャートである。本実施の形態では、CPUの台数は4台とし、すべてのCPUが並列に動作する例を考える。システム内のCPUの総数、及び、並列に動作するCPUの台数はこの例に限定されないことに注意すべきである。また、以下では、説明の便宜上、年齢の項目に関して、年齢の昇順にソートする場合を考える。また、年齢の項目値配列の要素は年齢の昇順に並べられている。並列ソート方法は、ステップ501からステップ505の5ステップにより構成される。
ステップ501:レコード番号配列を4分割して各部分を4台のCPUに割り当てる(図6を参照)。
ステップ502:各CPUは、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の出現回数を並列的にカウントする(図7A、B乃至図9A、Bを参照)。
ステップ503:項目値番号の範囲、すなわち、項目値番号0から項目値番号4までの5個の値を4台のCPUに割り当てる。たとえば、CPU−0は項目値番号0及び1が割り当てられ、CPU−1からCPU−3は項目値番号2から項目値番号4までが一つずつ割り当てられる(図10Aを参照)。
ステップ504:4台のCPUは、それぞれ、項目値番号の順番に、項目値番号が一致する範囲内ではレコード番号配列の部分の順番に従って、割り当てられた項目値番号のそれぞれの出現回数を累計数に変換する(図10A及びBを参照)。
ステップ505:4台のCPUは、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の累計数をポインタとして利用して、割り当てられたレコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する(図11A、B乃至図13A、Bを参照)。
次に各ステップを詳述する。
図6は並列ソート方法の初期化ステップ501の説明図である。CPU−0からCPU−3の4台のCPUには、レコード番号配列の先頭から順番に4レコードずつが割り当てられる。たとえば、CPU−0は、レコード番号配列の先頭のOrdSet[0]から5番目のOrdSet[4]までを担当する(OrdSet[x]のxは配列OrdSetの添字を表す)。また、共有メモリ14には、項目値番号の出現回数をカウントするためのカウント配列Count−0、Count−1、Count−2及びCount−3が設けられ、各CPUに関連付けられる。Count配列の個数はCPUの数と同数であり、Count配列の配列サイズはVL配列のサイズと同じである。Count配列の要素は0で初期化される。
図7A、B乃至図9A、Bは並列ソート方法のカウントアップステップ502の説明図である。図7Aのサブステップ1では、たとえば、CPU−0は、OrdSet[0]の値0を読み出し、読み出された値0を添字として、VNo[0]の値1を読み出し、この値1を添字として、Count−0[1]の値0を1にインクリメントする。同様に、CPU−1は、OrdSet[5]の値5を読み出し、読み出された値5を添字として、VNo[5]の値2を読み出し、この値2を添字として、Count−1[2]の値0を1にインクリメントする。CPU−2及びCPU−3についても同様である。図7Bのサブステップ2では、たとえば、CPU−0は、OrdSet[1]の値1を読み出し、読み出された値1を添字として、VNo[1]の値3を読み出し、この値3を添字として、Count−0[3]の値0を1にインクリメントする。CPU−1、CPU−2及びCPU−3についても同様である。各プロセッサは、図8A及びB、図9Aに示されるように、自プロセッサが担当する配列OrdSetの各要素を読み出し、その要素を添字として、配列VNoの要素を読み出し、さらに、その読み出された要素を添字として対応するCount配列の要素をインクリメントする。その結果として、図9Bに示されるようなカウントアップ結果が得られる。図9A、Bの配列Count−0の要素Count−0[i]は、CPU−0が担当した配列OrdSetのOrdSet[0]からOrdSet[4]の範囲内の各レコードに対応する年齢の項目値番号iの出現回数を表わしている。たとえば、Count−0[0]は、CPU−0の担当範囲内の項目値番号0の出現回数が1回であることを表し、Count−3[1]はCPU−3の担当範囲内の項目値番号1の出現回数が2回であることを表す。
図10A、Bは並列ソート方法の累計数化ステップ503及び504の説明図である。本例では、昇順ソートに対応して、項目値番号の昇順に累計数化を行う。CPU−0は、配列Countの1行目と2行目(すなわち、項目値番号0と1)の累計数化を担当し、CPU−1乃至CPU−3は、それぞれ、配列Countの3乃至5行目(すなわち、項目値番号3乃至5)の累計数化を担当する。図10Aに示されるように、累計数化は配列Countの横方向(すなわち、添字が一致する行)を優先して行われ、次に、先行する行の累計数を後続する行の累計数に加算することにより、全体の累計数が決まる。尚、横方向の累計数化は、各CPUが並列に実行できることに注意すべきである。
一般に、i番目(0≦i≦p−1)のCPUであるCPU−iがカウントアップした項目値番号j(0≦j≦q−1)のカウント値をCount[i][j]、累計数をCount'[i][j]のように表すと、累計数化は次のように記述できる。
Count'[0][0]=0
Count'[i][0]=Count'[i-1][q-1]+Count[i-1][q] 但し、i>1
Count'[i][j]=Count'[i][j-1]+Count[i][j-1] 但し、j>1
このように、累計数演算では、先行の行から次の行へオフセットCount'[i-1][q-1]を伝搬させることが必要である。したがって、本実施の形態では、累計数化の演算をCPUが分担して行っているが、1台のプロセッサを選択し、そのプロセッサが単独で累計数化を行ってもよい。
図10Bは累計数化の順番を縦方向で一列に表したものである。たとえば、図10Bにおいて、(1)Count−0:0の行は、配列Count−0の先頭の要素Count−0[0]のカウント値1が累計数0に変換されることを表している。すなわち、
1,2,2,0,2,0,2,2,0,2,0,1,1,1,0,1,1,0,1,1
というカウント値の系列を累計数化すると、
0,1,3,5,5,7,7,9,11,11,13,13,14,15,16,16,17,18,18,19
になる。
図11A、B乃至図13A、Bはレコード番号をさらなるレコード番号配列に格納する転送ステップ505の説明図である。転送ステップでは、各CPUは、レコード番号配列OrdSetから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列VNoから項目値番号を読み出し、さらに、この項目値番号を添字として、自プロセッサに関連付けられた累計数化されたCount配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列OrdSet’にレコード番号を格納すると共に、Count配列の累計数値を1ずつインクリメントする。
たとえば、図11Aのサブステップ1では、CPU−0は、OrdSet[0]の値0(すなわち、レコード番号0)を読み出し、次にVNo[0]の値1を読み出し、さらに、関連付けられたCount配列のCount−0[1]の値5を読み出し、OrdSet[5]にレコード番号0を設定すると共に、Count−0[1]の値を6にインクリメントする。このレコード番号の転送処理は、以下同様に、図11Bのサブステップ2、図12A及びBのサブステップ3及び4、図13Aのサブステップ5のように進められ、最終的に、図13Bに示されるようなさらなるレコード番号配列OrdSet’が得られる。
図14A〜C及び図15A、Bは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる並列ソート方法を適用した結果を示す図である。本例では、年齢に関する昇順ソートを行ったので、結果のレコード番号配列OrdSet’には、年齢の項目値として16歳、18歳、20歳、21歳及び23歳を有するレコードが年齢順に並んでいることがわかる。また、年齢が一致するレコードの順番は、元のレコード番号配列OrdSet中の順番が保存されている。
上記の並列ソート方法は年齢に関する昇順ソートの例について説明しているが、この並列ソート方法は年齢に関する降順ソートにも同様に適用できる。降順ソートは昇順ソートと同様に行われるが、累計数化の順番が昇順ソートとは異なる。図16A、Bは本発明の実施の形態にかかる並列(降順)ソート方法の累計数化ステップの説明図である。図16Aに示されるように、累計数化は配列Countの横方向(すなわち、添字が一致する行)を優先して行われ、次に、後方の行の累計数を先行する行の累計数に加算することにより、全体の累計数が決まる。尚、横方向の累計数化は、各CPUが並列に実行できることに注意すべきである。
一般に、i番目(0≦i≦p−1)のCPUであるCPU−iがカウントアップした項目値番号j(0≦j≦q−1)のカウント値をCount[i][j]、累計数をCount'[i][j]のように表すと、累計数化は次のように記述できる。
Count'[p-1][0]=0
Count'[i][0]=Count'[i+1][q-1]+Count[i+1][q] 但し、i>1
Count'[i][j]=Count'[i][j-1]+Count[i][j-1] 但し、j>1
このように、累計数演算では、後方の行から前の行へオフセットCount'[i+1][q-1]を伝搬させることが必要である。したがって、本実施の形態では、累計数化の演算をCPUが分担して行っているが、1台のプロセッサを選択し、そのプロセッサが単独で累計数化を行ってもよい。図16Bは累計数化の順番を縦方向で一列に表したものである。図16Bにおいて、たとえば、(1)Count−0:4の行は、配列Count−0の先頭の要素Count−0[4]のカウント値1が累計数0に変換されることを表している。
図17A、B乃至図19A、Bは降順の並列ソート方法の転送ステップ505の説明図である。転送ステップでは、各CPUは、レコード番号配列OrdSetから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列VNoから項目値番号を読み出し、さらに、この項目値番号を添字として、自プロセッサに関連付けられた累計数化されたCount配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列OrdSet’にレコード番号を格納すると共に、Count配列の累計数値を1ずつインクリメントする。
図20A、B及び図21A〜Cは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる降順の並列ソート方法を適用した結果を示す図である。本例では、年齢に関する降順ソートを行ったので、結果のレコード番号配列OrdSet’には、年齢の項目値として23歳、21歳、20歳、18歳及び16歳を有するレコードが年齢順に並んでいることがわかる。また、年齢が一致するレコードの順番は、元のレコード番号配列OrdSet中の順番が保存されている。
[並列累計数化演算]
次に、上記の実施例で説明した累計数化ステップ504をさらに具体的に説明する。図9Bに示すようなカウント結果が得られたとき、図10A及びBに示されるような累計数化が行われる。累計数化を並列に行うため、各CPUには、対象とする項目値番号の値の範囲が割り当てられる。CPU−0には項目値番号0と1が、CPU−1には項目値番号2が、CPU−2には項目値番号3が、CPU−3には項目値番号4が割り当てられる。したがって、Count配列の要素を、上述のようにCount[i][j]の形で表す(iはカウントを担当したCPUの番号、jは項目値番号を表す)と、各CPUの累計数化の担当範囲:
・CPU−0の担当範囲(項目値番号0及び1)
Count[0][0]=1
Count[1][0]=2
Count[2][0]=2
Count[3][0]=0
Count[0][1]=2
Count[1][1]=0
Count[2][1]=2
Count[3][1]=2
・CPU−1の担当範囲(項目値番号2)
Count[0][2]=0
Count[1][2]=2
Count[2][2]=0
Count[3][2]=1
・CPU−2の担当範囲(項目値番号3)
Count[0][3]=1
Count[1][3]=1
Count[2][3]=0
Count[3][3]=1
・CPU−3の担当範囲(項目値番号4)
Count[0][4]=1
Count[1][4]=0
Count[2][4]=1
Count[3][4]=1
が得られる。
このような担当範囲が決まると、最初に、各CPU−iが担当範囲内のカウントの小計Sum[i]を計算すると、
Sum[0]=11
Sum[1]=3
Sum[2]=3
Sum[3]=3
が得られる。この小計の計算は並列処理である。
次に、この小計をCPU−0からCPU−3へ順番に伝搬させて、小計の累計数Aggr_sum[i]を計算すると、
Aggr_sum[0]=0
Aggr_sum[1]=Aggr_sum[0]+Sum[0]=11
Aggr_sum[2]=Aggr_sum[1]+Sum[1]=14
Aggr_sum[3]=Aggr_sum[2]+Sum[2]=17
が得られる。小計の累計数は先頭が0になるように定義される。
最後に、各CPU−iは、担当範囲でCount値を累計数に変換し、算出された小計の累計数Aggr_sum[i]をそのCount値の累計数に加算することにより、最終的なカウントの累計数Count'を得る。このCount'の計算も並列処理である。これにより、
・CPU−0の担当範囲(項目値番号0及び1)
Count'[0][0]=0+Aggr_sum[0]=0+0=0
Count'[1][0]=Count'[0][0]+Count[0][0]=0+1=1
Count'[2][0]=Count'[1][0]+Count[1][0]=1+2=3
Count'[3][0]=Count'[2][0]+Count[2][0]=3+2=5
Count'[0][1]=Count'[3][0]+Count[3][0]=5+0=5
Count'[1][1]=Count'[0][1]+Count[0][1]=5+2=7
Count'[2][1]=Count'[1][1]+Count[1][1]=7+0=7
Count'[3][1]=Count'[2][1]+Count[2][1]=7+2=9
・CPU−1の担当範囲(項目値番号2)
Count'[0][2]=0+Aggr_sum[1]=9+2=11
Count'[1][2]=Count'[0][2]+Count[0][2]=11+0=11
Count'[2][2]=Count'[1][2]+Count[1][2]=11+2=13
Count'[3][2]=Count'[2][2]+Count[2][2]=13+0=13
・CPU−2の担当範囲(項目値番号3)
Count'[0][3]=0+Aggr_sum[2]=0+14=14
Count'[1][3]=Count'[0][3]+Count[0][3]=14+1=15
Count'[2][3]=Count'[1][3]+Count[1][3]=15+1=16
Count'[3][3]=Count'[2][3]+Count[2][3]=16+0=16
・CPU−3の担当範囲(項目値番号4)
Count'[0][4]=0+Aggr_sum[3]=0+17=17
Count'[1][4]=Count'[0][4]+Count[0][4]=17+1=18
Count'[2][4]=Count'[1][4]+Count[1][4]=18+0=18
Count'[3][4]=Count'[2][4]+Count[2][4]=18+1=19
が得られる。
この結果は図10Bに示された累計数化の結果と一致している。
[多段階並列ソート]
上記のカウンティングソートに基づく並列ソートは基数ソートの考え方と組み合わせることが可能である。項目値配列VLのサイズが大きいとき、すなわち、項目値番号の個数が多数であるときには、項目値番号を基数で表現し、桁ごとに上記の並列ソートを実施することにより、効率的なソートを実現することが可能である。以下では、このような多段階並列ソート方法について説明する。特に、本実施の形態にかかる多段階並列ソートは、最下位の桁から始めて順番に現在の桁に関するソート処理を行い、最後に最上位の桁に関するソート処理を行うことによって最終的なソートを完了する。
本発明の実施にかかる多段階並列ソート方法の一例でも、上記の並列ソート方法の例で使用した図4Bのデータ構造を利用する。本実施の形態では、CPUの台数は4台とし、すべてのCPUが並列に動作する例を考える。システム内のCPUの総数、及び、並列に動作するCPUの台数はこの例に限定されないことに注意すべきである。また、以下では、説明の便宜上、年齢の項目に関して、年齢の昇順にソートする場合を考える。また、年齢の項目値配列の要素は年齢の昇順に並べられている。図4Bのデータ構造では、年齢に関する項目値番号VNoは0から4までの値を取り得るので、基数=4として項目値番号を分解すると、項目値番号は下の桁と上の桁の2桁に分解される。具体的には、項目値番号のモジュロ(4)の値が下の桁の値であり、項目値番号を4で割った商が上の桁の値である。
図22は、本発明の実施の形態にかかる多段階並列ソート方法のフローチャートである。多段階並列ソート方法は、ステップ2201からステップ2205の5ステップにより構成される。
ステップ2201:項目値番号の範囲に応じて項目値番号の基数(本例では基数=4)を選択し、初期のレコード番号配列OrdSetを現在のレコード番号配列に設定し、項目値番号の最下位の桁(本例では項目値番号のモジュロ(4)の値)を現在の桁に設定する。
ステップ2202:現在のレコード番号配列を分割して4台のプロセッサに割り当てる。
ステップ2203:4台のプロセッサのうちの各プロセッサにおいて、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントする。
ステップ2204:項目値番号の現在の桁の値の範囲を分割して4台のプロセッサに割り当てる。
ステップ2205:4台のプロセッサのうちの各プロセッサにおいて、項目値番号の現在の桁の値の順番に、項目値番号の現在の桁の値が一致する範囲内ではレコード番号配列の部分の順番に従って、割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する。
ステップ2206:4台のプロセッサのうちの各プロセッサにおいて、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数の累計数をポインタとして利用して、割り当てられたレコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する。
ステップ2207:基数で表現された項目値番号の最上位桁までソート処理が行われたかどうかを判定し、最上位桁までソートされているならば、多段階並列ソート処理を終了する。
ステップ2208:未処理の桁が残っているならば、その桁を現在の桁に設定し、さらなるレコード番号配列を現在のレコード番号配列として、ステップ2202へ戻る。
上記の本発明の実施の形態にかかる多段階並列ソート方法において、ステップ2202からステップ2206までのソート処理は、上記の本発明の並列ソート方法と同様の処理であり、項目値番号の代わりに項目値番号の現在の桁の値が使用される点だけが異なっている。
次に、本発明の実施の形態にかかる多段階並列ソート方法を具体的に説明する。本例では、図4Bに示されたデータを、4台のCPUを使用し、年齢の昇順でソートする。初期化ステップ2201は、1段階目のソート処理として、年齢の項目値番号のモジュロー4(MOD 4)の値(下位の桁の値)に関するソート処理を設定し、2段階目のソート処理として、年齢の項目値番号の4で割った商(DIV 4)の値に関するソート処理を設定する。
初期化ステップ2201では、図6に示されたCount配列と同様の配列が準備される。但し、本例の配列は、項目値番号の現在の桁の値の出現回数をカウントする配列である。
図23A、B乃至図25A、Bは、多段階並列ソート方法の第1段階のカウントステップ2203の説明図である。図23Aのサブステップ1では、たとえば、CPU−0は、OrdSet[0]の値0を読み出し、読み出された値0を添字として、VNo[0]の値1を読み出し、この値1のモジュロー4(MOD4)の値1を添字として、Count−0[1]の値0を1にインクリメントする。同様に、CPU−1は、OrdSet[5]の値5を読み出し、この値5を添字として、VNo[5]の値2を読み出し、この値2のMOD4の値2を添字として、Count−1[2]の値0を1にインクリメントする。以下、図23Bのサブステップ2、図24Aのサブステップ3、図24Bのサブステップ4及び図25Aのサブステップ5を実行することにより、図25Bに示されるようなカウントアップ結果が得られる。図23A、B〜図25A、Bの配列Count−0の要素Count−0[i]は、CPU−0が担当した配列OrdSetのOrdSet[0]からOrdSet[4]の範囲内の各レコードに対応する年齢の項目値番号の下位の桁の値iの出現回数を表わしている。たとえば、Count−0[0]は、CPU−0の担当範囲内の項目値番号の下位の桁の値0の出現回数が1回であることを表し、Count−3[1]はCPU−3の担当範囲内の項目値番号の下位の桁の値1の出現回数が2回であることを表す。
図26A、Bは多段階並列ソート方法の第1段階の累計数化ステップの説明図である。本例では、昇順ソートに対応して、項目値番号の下位の桁の値の昇順に累計数化を行う。CPU−0は、配列Countの1行目(すなわち、項目値番号の下位の桁の値0)の累計数化を担当し、CPU−1乃至CPU−3は、それぞれ、配列Countの2乃至4行目(すなわち、項目値番号の下位の桁の値1乃至3)の累計数化を担当する。図26Aに示されるように、累計数化は配列Countの横方向(すなわち、添字が一致する行)を優先して行われ、次に、先行する行の累計数を後続する行の累計数に加算することにより、全体の累計数が決まる。尚、横方向の累計数化は、既に説明したように各CPUが並列に実行可能であるが、単一のCPUが担当してもよい。
図27A、B乃至図29A、Bは多段階並列ソート方法の第1段階においてレコード番号をさらなるレコード番号配列に格納する転送ステップの説明図である。転送ステップでは、各CPUは、レコード番号配列OrdSetから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列VNoから項目値番号の下位の桁の値を読み出し、さらに、この項目値番号の下位の桁の値を添字として、自プロセッサに関連付けられた累計数化されたCount配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列OrdSet’にレコード番号を格納すると共に、Count配列の累計数値を1ずつインクリメントする。図29Bはこのような転送ステップの結果として第1段階で得られたレコード番号配列OrdSet’を表す。
第2段階では、第1段階で得られたレコード番号配列OrdSet’を初期条件として、年齢の項目値番号の上位の桁の値(DIV 4の値)に関する昇順ソートを実行する。
図30は、本発明の実施の形態にかかる多段階並列ソート方法の第2段階のステップ2202において、現在のレコード番号配列OrdSet’を4台のCPUに割り当て、それぞれのCount配列を準備した状態を示す図である。
図31A、B乃至図33A、Bは、多段階並列ソート方法の第2段階のカウントステップの説明図である。図31Aのサブステップ1では、たとえば、CPU−0は、OrdSet’[0]の値2を読み出し、読み出された値2を添字として、VNo[2]の値4を読み出し、この値1の4で割った商(DIV4)の値1を添字として、Count−0[1]の値0を1にインクリメントする。同様に、CPU−1は、OrdSet’[5]の値12を読み出し、この値12を添字として、VNo[12]の値4を読み出し、この値4のDIV4の値1を添字として、Count−1[1]の値0を1にインクリメントする。以下、図31Bのサブステップ2、図32Aのサブステップ3、図32Bのサブステップ4及び図33Aのサブステップ5を実行することにより、図33Bに示されるような第2段階のカウントアップ結果が得られる。図31A、B〜33A、Bにおいて、配列Count−0の要素Count−0[i]は、CPU−0が担当した配列OrdSet’のOrdSet’[0]からOrdSet[4]の範囲内の各レコードに対応する年齢の項目値番号の上位の桁の値iの出現回数を表わしている。たとえば、Count−0[0]は、CPU−0の担当範囲内の項目値番号の上位の桁の値0の出現回数が4回であることを表し、Count−3[1]はCPU−3の担当範囲内の項目値番号の上位の桁の値1の出現回数が0回であることを表す。
図34は多段階並列ソート方法の第2段階の累計数化ステップの説明図である。本例では、昇順ソートに対応して、項目値番号の上位の桁の値の昇順に累計数化を行う。多段階化によって項目値番号の上位の桁の値の個数は2個に削減されているので、本例では、たとえば、CPU−0がすべての値の累計数化を担当する。図34Aに示されるように、CPU−0は、Count[0][0]、Count[1][0]、Count[2][0]、Count[3][0]、Count[0][1]、Count[1][1]、Count[2][1]、及び、Count[3][1]の順に累計数化を行う。勿論、本例の場合に、CPU−0とCPU−1の2台のCPUに項目値番号の上位の桁の値0と1を割り当て、2台のCPUが累計数化演算を行ってもよい。
図35A、B乃至図37A、Bは多段階並列ソート方法の第2段階においてレコード番号をさらなるレコード番号配列に格納する転送ステップの説明図である。転送ステップでは、各CPUは、レコード番号配列OrdSetから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列VNoから項目値番号の上位の桁の値を読み出し、さらに、この項目値番号の上位の桁の値を添字として、自プロセッサに関連付けられた累計数化されたCount配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列OrdSet”にレコード番号を格納すると共に、Count配列の累計数値を1ずつインクリメントする。図37Bはこのような転送ステップの結果として第2段階で得られたレコード番号配列OrdSet”を表す。
本実施例の多段階並列ソート方法は項目値番号の下位の桁と上位の桁の2段階により構成されているので、これ以上のソート処理は行われない。したがって、第2段階で得られたレコード番号配列OrdSet”が最初のレコード番号配列OrdSetを年齢に関して昇順にソートを行った結果である。
図38A〜C及び図39A、Bは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる昇順の多段階並列ソート方法を適用した結果を示す図である。本例では、年齢に関する昇順ソートを行ったので、結果のレコード番号配列OrdSet”には、年齢の項目値として16歳、18歳、20歳、21歳及び23歳を有するレコードが年齢順に並んでいることがわかる。また、年齢が一致するレコードの順番は、元のレコード番号配列OrdSet中の順番が保存されている。この結果は、図14A〜C及び図15A、Bに示された本発明の実施の形態にかかる昇順の並列ソート方法を図4Bのデータ構造に適用した結果と一致している。
また、上記の多段階並列ソート方法は昇順ソートであるが、本発明の多段階並列ソートは降順ソートでも同様に動作する。さらに、既に説明したように、多段階並列ソートの各段階における累計数化演算は、複数台のプロセッサで並列処理してもよく、或いは、少なくとも1台、好ましくは、1台のプロセッサが単独で処理してもよい。
[多段階ソート]
上記の多段階並列ソートは、最下位の桁から始めて順番に現在の桁に関するソート処理を行い、最後に最上位の桁に関するソート処理を行うことによって最終的なソートを完了している。これに対して、最上位の桁から始めて順番に現在の桁に関するソート処理を行い、最後に最下位の桁に関するソート処理を行うことによって最終的なソートを完了することも可能である。以下では、このような最上位から最下位の順にソート処理を多段化する方法を簡単に説明する。
本例では、図40に示されるようなデータ構造を利用する。また、本例では、CPUの台数は1台とする。また、以下では、年齢の項目に関して、年齢の昇順にソートする場合を考える。レコードの総数はレコード番号0からレコード番号19までの20個であり、項目値番号は0から8までの9個である。すなわち、実際の年齢の値は、15、16、18、19、20、21、23、25及び28の9通りである。図40のデータ構造では、年齢に関する項目値番号VNoは0から8までの値を取り得るので、基数=4として項目値番号を分解すると、項目値番号を4で割った商が上の桁の値であり、項目値番号のモジュロ(4)の値が下の桁の値である。項目値番号の上の桁は0、1及び2の3通りの値を取り、下の桁は0、1、2及び3の4通りの値を取り得る。
最初に、第1段階において、上の桁の値0、1及び2の出現回数をカウントするための配列Count−1を準備し、要素を0で初期化する。たとえば、Count-1[0]は、項目値番号の上位の桁の値が0であるレコードの個数をカウントするための領域である。
次に、レコード番号配列OrdSetの先頭の要素(すなわち、レコード)から順番に、その要素に対応する項目値番号を配列VNoから読み出し、その項目値番号を4で割った商の値をポインタとして用いて、配列Count−1の要素の値をインクリメントする。図41A〜Dは、OrdSet[0]=0、OrdSet[7]=7、及び、OrdSet[19]=19の3個のレコード番号について、項目値番号の上位の桁の値を算出し、該当するカウンタをカウントアップし、次に累計数化する例の説明図である。図41Cからわかるように、この第1段階のカウントアップ処理により、項目値番号の上位の桁の値が0であるレコードの個数は12個、上位の桁の値が1であるレコードの個数は7個、上位の桁の値が2であるレコードの個数は1個である。さらに、図41Dに示されるように、このカウント値を累計数化する。
次に、項目値番号の上位の桁の値の出現回数が累計数化された配列Aggr−1を用いて、レコード番号配列OrdSetをさらなるレコード番号配列OrdSet’に変換する。具体的には、OrdSet[i]=jであるならば、VNo[j]を読み出し、このVNo[j]を4で割った商(VNo[j] DIV 4)をkとすると、Aggr−1[k]の値を読み出し、OrdSet[Aggr−1[k]]にレコード番号jを設定し、Aggr−1[k]をインクリメントする。図42A、Bは、このような多段階ソートにおけるレコード番号転送処理の説明図であり、図42AはOrdSet[0]の転送を、図42BはOrdSet[19]の転送を表している。図43は、第1段階のレコード番号転送の結果のレコード番号配列OrdSet’と、上位の桁の値が分布する範囲とを表している。たとえば、上位の桁の値が0であるレコードはレコード番号配列OrdSet’のOrdSet’[0]からOrdSet’[11]の範囲(区間0)に分布し、上位の桁の値が1であるレコードはレコード番号配列OrdSet’のOrdSet’[12]からOrdSet’[18]の範囲(区間1)に分布し、上位の桁の値が2であるレコードはレコード番号配列OrdSet’のOrdSet’[19](区間2)に存在する。
次に、多段階ソートの第2段階では、各区間内で、項目値番号の下位の桁の値によってレコード番号をソートする。たとえば、OrdSet’の区間1は、OrdSet”の対応した区間1へ転送される。第2段階のソートでは、既に上位の桁で区間が定められているので、レコード番号が区間外に転送されることはない。
図44は、多段階ソートの第2段階の初期状態を表す図である。以下の説明では、OrdSet’の区間1について説明する。たとえば、複数台のプロセッサが存在する場合には、区間ごとにプロセッサを割り当てることにより、以下の処理を並列化することも可能である。Count−2は区間1内で項目値番号の下位の桁の値(0,1,2,3)の出現回数をカウントするための配列である。
図45A〜Cは、多段階ソートの第2段階のカウントアップ及び累計数化の説明図である。図45Aから始めて順番にカウントアップすることにより、図45Bに示されるようなカウントアップ配列が得られる。このカウントアップ配列は、図45Cに示されるように累計数化される。
最後に、第2の累計数配列Aggr−2をポインタとして利用して、レコード番号配列OrdSet’の区間1をレコード番号配列OrdSet”の区間1へ転送することにより、多段階ソートが完了する。図46A、Bは、多段階ソートの第2段階のレコード番号転送の説明図である。具体的には、OrdSet’[i]=jであるならば、VNo[j]を読み出し、このVNo[j]を4で割った余り(VNo[j] MOD 4)をkとすると、Aggr−2[k]の値を読み出し、OrdSet”[Aggr−2[k]]にレコード番号jを設定し、Aggr−2[k]をインクリメントする。図46AはOrdSet’[14]の転送を、図46BはOrdSet’[18]の転送を表している。図46BのOrdSet”の区間1は、区間1の最終的なソート結果を表している。
区間1と同様に、その他の区間0、区間2についても第2段階のカウントアップ、累計数化、及び、レコード番号転送を適用することにより、レコード番号配列OrdSetの全体がレコード番号配列OrdSet”へ転送され、ソートが完了する。
前述したように、本発明の実施の形態においては、コンピュータシステム10にレコードの所定の項目の項目値に応じてレコード順を並べ替えるプログラムを実行させる。より具体的には、本実施の形態においては、以下のように、プログラムは、各CPUに、上述した処理ステップを実行させ、或いは、上述した機能を実現させる。
本実施の形態において、コンピュータシステム10には、OS(たとえば、リナックス(Linux:登録商標))が搭載される。初期的には、OSの制御にしたがって、あるCPU(たとえば、CPU12−1)が、プログラムをメモリ(たとえば共有メモリ14)にロードする。プログラムがメモリにロードされると、CPU12−1、12−2、...、12−pの各々が処理を実行すべき場合には、OSの制御の下、各CPUに、それぞれ、所定の機能を実現させる。つまり、各CPUが、共有メモリ14に記憶されたプログラム中の所定の処理ステップを読み出し、当該処理ステップを実行する。その一方、特定のCPUが処理をすべき場合には、OSの制御の下、当該特定のCPUに、他の所定の機能を実現させる。つまり、特定のCPUのみが、共有メモリ14に記憶されたプログラム中の他の所定の処理ステップを読み出し、当該他の所定の処理ステップを実行する。なお、各CPUが実行するプログラムの格納場所は、上記共有メモリ14に限定されず、各CPUに付随するそれぞれのローカルメモリ(図示せず)でもよい。
このように、本実施の形態においては、OSの制御の下、プログラムは、各CPUに所定の機能を実現させるとともに、必要に応じて、特定のCPUに、他の所定の機能を実現させることができる。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
図1は本発明の実施の形態にかかるコンピュータシステムの概要図である。 図2はデータ管理機構を説明するための表形式データの一例を表す図である。 図3は本発明の実施の形態にかかるデータ管理機構の説明図である。 図4A、Bは本発明の実施の形態にかかるソート対象のデータ構造の説明図である。 図5は本発明の実施の形態にかかる並列ソート方法のフローチャートである。 図6は本発明の実施の形態にかかる並列ソート方法の初期化ステップの説明図である。 図7A、Bは本発明の実施の形態にかかる並列ソート方法のカウントアップステップの説明図(その1)である。 図8A、Bは本発明の実施の形態にかかる並列ソート方法のカウントアップステップの説明図(その2)である。 図9A、Bは本発明の実施の形態にかかる並列ソート方法のカウントアップステップの説明図(その3)である。 図10A、Bは本発明の実施の形態にかかる昇順の並列ソート方法の累計数化ステップの説明図である。 図11A、Bは本発明の実施の形態にかかる昇順の並列ソート方法の転送ステップの説明図(その1)である。 図12A、Bは本発明の実施の形態にかかる昇順の並列ソート方法の転送ステップの説明図(その2)である。 図13A、Bは本発明の実施の形態にかかる昇順の並列ソート方法の転送ステップの説明図(その3)である。 図14A〜Cは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる昇順の並列ソート方法を適用した結果を示す図(その1)である。 図15A、Bは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる昇順の並列ソート方法を適用した結果を示す図(その2)である。 図16A、Bは本発明の実施の形態にかかる降順の並列ソート方法の累計数化ステップの説明図である。 図17A、Bは本発明の実施の形態にかかる降順の並列ソート方法の転送ステップの説明図(その1)である。 図18A、Bは本発明の実施の形態にかかる降順の並列ソート方法の転送ステップの説明図(その2)である。 図19A、Bは本発明の実施の形態にかかる降順の並列ソート方法の転送ステップの説明図(その3)である。 図20A、Bは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる降順の並列ソート方法を適用した結果を示す図(その1)である。 図21A〜Cは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる降順の並列ソート方法を適用した結果を示す図(その2)である。 図22は本発明の実施の形態にかかる多段階並列ソート方法のフローチャートである。 図23A、Bは本発明の実施の形態にかかる多段階並列ソート方法の第1段階のカウントアップステップの説明図(その1)である。 図24A、Bは本発明の実施の形態にかかる多段階並列ソート方法の第1段階のカウントアップステップの説明図(その2)である。 図25A、Bは本発明の実施の形態にかかる多段階並列ソート方法の第1段階のカウントアップステップの説明図(その3)である。 図26A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第1段階の累計数化ステップの説明図である。 図27A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第1段階の転送ステップの説明図(その1)である。 図28A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第1段階の転送ステップの説明図(その2)である。 図29A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第1段階の転送ステップの説明図(その3)である。 図30は本発明の実施の形態にかかる多段階並列ソート方法の第2段階の初期化ステップの説明図である。 図31A、Bは本発明の実施の形態にかかる多段階並列ソート方法の第2段階のカウントアップステップの説明図(その1)である。 図32A、Bは本発明の実施の形態にかかる多段階並列ソート方法の第2段階のカウントアップステップの説明図(その2)である。 図33A、Bは本発明の実施の形態にかかる多段階並列ソート方法の第2段階のカウントアップステップの説明図(その3)である。 図34は本発明の実施の形態にかかる昇順の多段階並列ソート方法の第2段階の累計数化ステップの説明図である。 図35A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第2段階の転送ステップの説明図(その1)である。 図36A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第2段階の転送ステップの説明図(その2)である。 図37A、Bは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第2段階の転送ステップの説明図(その3)である。 図38A〜Cは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる昇順の多段階並列ソート方法を適用した結果を示す図(その1)である。 図39A、Bは、図4Bに示されたデータ構造に対して本発明の実施の形態にかかる昇順の多段階並列ソート方法を適用した結果を示す図(その2)である。 図40は多段階ソートを説明するためのデータ構造図である。 図41A〜Dは多段階ソートの第1段階のカウントアップ及び累計数化の説明図である。 図42A、Bは多段階ソートの第1段階のレコード番号転送の説明図である。 図43は多段階ソートの第1段階のレコード番号転送の結果の説明図である。 図44は多段階ソートの第2段階の初期状態を表す図である。 図45A〜Cは多段階ソートの第2段階のカウントアップ及び累計数化の説明図である。 図46A、Bは多段階ソートの第2段階のレコード番号転送の説明図である。
符号の説明
10 コンピュータシステム
12−1,12−2,・・・,12−p CPU
14 共有メモリ
16 ROM
18 固定記憶装置
20 CD−ROMドライバ
22 I/F
24 入力装置
26 表示装置

Claims (16)

  1. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
    前記レコード番号配列をn1(n1≦n)個の部分に分割し、前記分割されたレコード番号配列のn1個の部分を前記n台のプロセッサのうちのn1台のプロセッサにそれぞれ割り当てるステップと、
    前記n1台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントするステップと、
    前記項目値番号の範囲をn2(n2≦n)個の範囲に分割し、前記分割された項目値番号のn2個の範囲を前記n台のプロセッサのうちのn2台のプロセッサにそれぞれ割り当てるステップと、
    前記n2台のプロセッサのうちの各プロセッサによって、前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記n1台のプロセッサによってカウントされた前記項目値番号のそれぞれの出現回数を累計数に変換するステップと、
    前記n1台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
    を含む情報処理方法。
  2. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
    前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
    を含み、
    前記ソート処理が、
    前記現在のレコード番号配列をn1(n1≦n)個の部分に分割し、前記分割された現在のレコード番号配列の部分を前記n台のプロセッサのうちのn1台のプロセッサに割り当てるステップと、
    前記n1台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントするステップと、
    前記項目値番号の現在の桁の値の範囲をn2(n2≦n)個の範囲に分割し、前記分割された項目値番号の桁の値のn2個の範囲を前記n台のプロセッサのうちのn2台のプロセッサに割り当てるステップと、
    前記n2の複数台のプロセッサのうちの各プロセッサによって、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記n1台のプロセッサによってカウントされた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
    前記n1台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
    を含む、
    情報処理方法。
  3. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能である複数台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
    前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
    を含み、
    前記ソート処理が、
    前記現在のレコード番号配列を分割し、前記分割された現在のレコード番号配列の部分を前記複数台のプロセッサに割り当てるステップと、
    各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントするステップと、
    少なくとも1台のプロセッサによって、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
    前記各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
    を含む、
    情報処理方法。
  4. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
    前記レコード番号配列をn1(n1≦n)個の部分に分割し、前記分割されたレコード番号配列のn1個の部分を前記n台のプロセッサのうちのn1台のプロセッサに割り当てるステップと、
    前記n1台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントするステップと、
    前記項目値番号の範囲をn2(n2≦n)個の範囲に分割し、前記分割された項目値番号のn2個の範囲を前記n台のプロセッサのうちのn2台のプロセッサに割り当てるステップと、
    前記n2台のプロセッサのうちの各プロセッサによって、前記n2台のプロセッサに割り当てられた項目値番号に関して、(i)前記n1台のプロセッサのうちの各プロセッサによってカウントされた前記出現回数の和を算出し、算出された和を前記項目値番号の範囲の順番に前記n2台のプロセッサ間で伝搬させ、(ii)前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順番に従って、前記出現回数を累計数に変換し、前記伝搬させられた和を前記累計数に加算することにより、前記n1台のプロセッサのうちの各プロセッサに割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号毎に前記出現回数を累計数に変換するステップと、
    前記n1台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号毎に得られた前記累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
    を含む、
    情報処理方法。
  5. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
    少なくとも1台のプロセッサによって、前記項目値番号の範囲に応じて前記項目値番号の基数を設定することにより、前記項目値番号を上位の桁の下位の桁に分けるステップと、
    少なくとも1台のプロセッサによって、前記レコード番号配列に含まれるレコード番号に関連付けられた前記項目値番号の上位の桁の値の出現回数をカウントし、前記項目値番号の上位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の上位の桁の値の累計数をポインタとして利用して前記レコード番号配列中のレコード番号を並べ換え、前記項目値番号の上位の桁の値の順序に従ってn1(≦n)個に区分された中間的なレコード番号配列を生成するステップと、
    少なくとも1台のプロセッサによって、前記中間的なレコード番号配列のn1個の区分をそれぞれ前記n台のプロセッサのうちのn1台のプロセッサに割り当てるステップと、
    前記区分ごとに割り当てられた各プロセッサによって、前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号に関連付けられた前記項目値番号の下位の桁の値の出現回数をカウントし、前記項目値番号の下位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の下位の桁の値の累計数をポインタとして利用して前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号をその関連付けられた前記項目値番号の下位の桁の値の順序に並べ換えるステップと、
    を含む、
    情報処理方法。
  6. 共有メモリと前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサとを具備した共有メモリ型マルチプロセッサシステムであって、
    前記共有メモリが、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶し、
    各プロセッサが、
    n1(n1≦n)個の部分に分割された前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める手段と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントする手段と、
    n2(n2≦n)個の範囲に分割された前記項目値番号の範囲のうち各プロセッサによって受け持たれる範囲を決める手段と、
    前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号のそれぞれの出現回数を累計数に変換する手段と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
    を含む、
    共有メモリ型マルチプロセッサシステム。
  7. 前記項目値番号の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される、請求項6に記載の共有メモリ型マルチプロセッサシステム。
  8. 共有メモリと前記共有メモリにアクセス可能である複数台のプロセッサとを具備した共有メモリ型マルチプロセッサシステムであって、
    前記共有メモリが、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶し、
    各プロセッサが、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、
    前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、
    を含み、
    前記ソート処理を繰り返す手段が、
    前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める手段と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする手段と、
    前記項目値番号の現在の桁の値の範囲のうち各プロセッサによって受け持たれる範囲を決める手段と、
    前記項目値番号の現在の桁の値が異なる場合に前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
    を含む、
    共有メモリ型マルチプロセッサシステム。
  9. 前記項目値番号の現在の桁の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される、請求項8に記載の共有メモリ型マルチプロセッサシステム。
  10. 共有メモリと前記共有メモリにアクセス可能である複数台のプロセッサとを具備した共有メモリ型マルチプロセッサシステムであって、
    前記共有メモリが、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶し、
    各プロセッサが、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、
    前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、
    を含み、
    前記ソート処理を繰り返す手段が、
    前記レコード番号配列のうち各プロセンサによって受け持たれる部分を決める手段と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする手段と、
    を含み、
    少なくとも1台のプロセッサの前記ソート処理を繰り返す手段が、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段を含み、
    前記ソート処理を繰り返す手段が、前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段をさらに含む、
    共有メモリ型マルチプロセッサシステム。
  11. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、
    各プロセッサに、
    n1(n1≦n)個の部分に分割された前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める機能と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントする機能と、
    n2(n2≦n)個の範囲に分割された前記項目値番号の範囲のうち各プロセッサによって受け持たれる範囲を決める機能と、
    前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号のそれぞれの出現回数を累計数に変換する機能と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能と、
    を実現させるためのプログラム。
  12. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能である複数台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、
    各プロセッサに、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定する機能と、
    前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、前記現在の桁のソート処理を制御する機能と、
    前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める機能と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする機能と、
    前記項目値番号の現在の桁の値の範囲のうち各プロセッサによって受け持たれる範囲を決める機能と、
    前記項目値番号の現在の桁の値が異なる場合に前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する機能と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能と、
    を実現させるためのプログラム。
  13. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能である複数台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、
    各プロセッサに、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定する機能と、
    前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、1回目は前記レコード番号配列を現在のレコード番号配列として、2回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、前記現在の桁のソート処理を制御する機能と、
    前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める機能と、
    前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする機能と、
    を実現させ、
    少なくとも1台のプロセッサに、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する機能を実現させ、
    前記各プロセッサに、前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能をさらに実現させるためのプログラム。
  14. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、
    n1(n1≦n)個の部分に分割された前記レコード番号配列の部分が割り当てられた前記n台のプロセッサのうちのn1台のプロセッサのそれぞれに、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントする機能を実現させ、
    n2(n2≦n)個の範囲に分割された前記項目値番号の範囲が割り当てられた前記n台のプロセッサのうちのn2台のプロセッサのそれぞれに、前記n2台のプロセッサに割り当てられた項目値番号に関して、(i)前記n1台のプロセッサのうちの各プロセッサによってカウントされた前記出現回数の和を算出し、算出された和を前記項目値番号の範囲の順番に前記n2台のプロセッサ間で伝搬させ、(ii)前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が2台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順番に従って、前記出現回数を累計数に変換し、前記伝搬させられた和を前記累計数に加算することにより、前記n1台のプロセッサのうちの各プロセッサに割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号毎に前記出現回数を累計数に変換する機能を実現させ、
    前記n1台のプロセッサのうちの各プロセッサに、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号毎に得られた前記累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能を実現させるためのプログラム。
  15. 表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
    前記共有メモリにアクセス可能であるn(n≧1)台のプロセッサと、
    を具備した共有メモリ型マルチプロセッサシステムにおいて、
    少なくとも1台のプロセッサに、
    前記項目値番号の範囲に応じて前記項目値番号の基数を設定することにより、前記項目値番号を上位の桁と下位の桁に分ける機能と、
    前記レコード番号配列に含まれるレコード番号に関連付けられた前記項目値番号の上位の桁の値の出現回数をカウントし、前記項目値番号の上位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の上位の桁の値の累計数をポインタとして利用して前記レコード番号配列中のレコード番号を並べ換え、前記項目値番号の上位の桁の値の順序に従ってn1(≦n)に区分された中間的なレコード番号配列を生成する機能と、
    を実現させ、
    前記中間的なレコード番号配列の区分ごとに割り当てられた各プロセッサに、前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号に関連付けられた前記項目値番号の下位の桁の値の出現回数をカウントし、前記項目値番号の下位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の下位の桁の値の累計数をポインタとして利用して前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号をその関連付けられた前記項目値番号の下位の桁の値の順序に並べ換える機能を実現させるためのプログラム。
  16. 請求項11乃至15のうちいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
JP2007517805A 2005-05-24 2006-05-22 共有メモリ型マルチプロセッサシステム及びその情報処理方法 Active JP4339381B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2005150604 2005-05-24
JP2005150604 2005-05-24
PCT/JP2006/310110 WO2006126467A1 (ja) 2005-05-24 2006-05-22 マルチプロセッサシステム及びその情報処理方法

Publications (2)

Publication Number Publication Date
JPWO2006126467A1 JPWO2006126467A1 (ja) 2008-12-25
JP4339381B2 true JP4339381B2 (ja) 2009-10-07

Family

ID=37451891

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007517805A Active JP4339381B2 (ja) 2005-05-24 2006-05-22 共有メモリ型マルチプロセッサシステム及びその情報処理方法

Country Status (7)

Country Link
US (2) US7801903B2 (ja)
EP (1) EP1901183A4 (ja)
JP (1) JP4339381B2 (ja)
KR (1) KR101196566B1 (ja)
CN (1) CN101133414B (ja)
CA (1) CA2595858A1 (ja)
WO (1) WO2006126467A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101196145B1 (ko) 2012-02-21 2012-10-30 인하대학교 산학협력단 Cuda를 이용한 최장공통비상위문자열 그래프 모델의 병렬 생성 방법

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007020849A1 (ja) * 2005-08-15 2007-02-22 Turbo Data Laboratories Inc. 共有メモリ型マルチプロセッサシステム及びその情報処理方法
WO2008155852A1 (ja) * 2007-06-21 2008-12-24 Turbo Data Laboratories Inc. メモリ共有型並列処理システムにおいて表形式データを集計する方法及び装置
JP5208117B2 (ja) * 2007-08-28 2013-06-12 株式会社ターボデータラボラトリー 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム
JPWO2009044486A1 (ja) * 2007-10-05 2011-02-03 株式会社ターボデータラボラトリー 表形式データをソートする方法、マルチコア型装置、及び、プログラム
US8473467B2 (en) 2009-01-02 2013-06-25 Apple Inc. Content profiling to dynamically configure content processing
US8959094B2 (en) * 2010-05-28 2015-02-17 Oracle International Corporation Early return of partial sort results in a database system
US20120259869A1 (en) * 2011-04-07 2012-10-11 Infosys Technologies, Ltd. System and method for implementing a window sorting mechanism
GB2500863A (en) * 2012-01-20 2013-10-09 Data Re Ltd A method of indexing a database
KR101993258B1 (ko) 2012-11-22 2019-09-27 삼성전자주식회사 레지스터 슬라이싱 회로 및 이를 포함하는 시스템 온 칩
US9177006B2 (en) * 2012-12-29 2015-11-03 International Business Machines Corporation Radix sort with read-only key
KR101770234B1 (ko) * 2013-10-03 2017-09-05 후아웨이 테크놀러지 컴퍼니 리미티드 소프트웨어 프로그램의 연산 블록을 멀티-프로세서 시스템의 코어에 할당하는 방법 및 시스템
CN104657388A (zh) * 2013-11-22 2015-05-27 阿里巴巴集团控股有限公司 一种数据处理方法和装置
US9628107B2 (en) 2014-04-07 2017-04-18 International Business Machines Corporation Compression of floating-point data by identifying a previous loss of precision
US9959299B2 (en) * 2014-12-02 2018-05-01 International Business Machines Corporation Compression-aware partial sort of streaming columnar data
US10909078B2 (en) 2015-02-25 2021-02-02 International Business Machines Corporation Query predicate evaluation and computation for hierarchically compressed data
US10296612B2 (en) 2015-09-29 2019-05-21 At&T Mobility Ii Llc Sorting system
US10416959B2 (en) 2015-10-27 2019-09-17 At&T Mobility Ii Llc Analog sorter
US10496370B2 (en) 2015-12-02 2019-12-03 At&T Intellectual Property I, L.P. Adaptive alphanumeric sorting apparatus
US10261832B2 (en) 2015-12-02 2019-04-16 At&T Mobility Ii Llc Sorting apparatus
US10216478B2 (en) * 2016-03-30 2019-02-26 International Business Machines Corporation Increasing radix sorting efficiency utilizing a crossover point
US9934287B1 (en) * 2017-07-25 2018-04-03 Capital One Services, Llc Systems and methods for expedited large file processing
CN108052309A (zh) * 2017-12-26 2018-05-18 杭州迪普科技股份有限公司 一种对象排序方法及装置
CN109857573B (zh) * 2018-12-29 2021-03-05 深圳云天励飞技术有限公司 一种数据共享方法、装置、设备及系统
US11281427B2 (en) * 2019-04-24 2022-03-22 Ido Dov Cohen Fast sort engine

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0522488B1 (en) * 1991-07-10 2002-02-20 Hitachi, Ltd. Method of sorting on distributed database system and method of accessing thereto
JP3395208B2 (ja) * 1991-07-10 2003-04-07 株式会社日立製作所 分散データベースのソート方法およびアクセス方法
US5765146A (en) * 1993-11-04 1998-06-09 International Business Machines Corporation Method of performing a parallel relational database query in a multiprocessor environment
JP3581831B2 (ja) * 1998-08-11 2004-10-27 晋二 古庄 表形式データの検索・集計・ソート方法及び装置
JP2001147800A (ja) * 1999-11-22 2001-05-29 Taabo Data Laboratory Kk 情報処理システム、並びに、この情報処理システムを利用したソート方法、コンパイル方法およびジョイン方法
KR20040019335A (ko) * 2001-07-18 2004-03-05 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 다중프로세서 디바이스 및 동기화 최적화 방법 및 액세스제어 방법
KR20060008889A (ko) * 2003-04-16 2006-01-27 신지 후루쇼 정보처리시스템 및 정보처리방법
WO2005041066A1 (ja) * 2003-10-24 2005-05-06 Shinji Furusho 分散メモリ型情報処理システム
WO2007020849A1 (ja) * 2005-08-15 2007-02-22 Turbo Data Laboratories Inc. 共有メモリ型マルチプロセッサシステム及びその情報処理方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101196145B1 (ko) 2012-02-21 2012-10-30 인하대학교 산학협력단 Cuda를 이용한 최장공통비상위문자열 그래프 모델의 병렬 생성 방법

Also Published As

Publication number Publication date
WO2006126467A1 (ja) 2006-11-30
JPWO2006126467A1 (ja) 2008-12-25
US20080215584A1 (en) 2008-09-04
CN101133414A (zh) 2008-02-27
US20100312802A1 (en) 2010-12-09
KR101196566B1 (ko) 2012-11-01
CN101133414B (zh) 2011-05-04
US8065337B2 (en) 2011-11-22
EP1901183A1 (en) 2008-03-19
KR20080014726A (ko) 2008-02-14
EP1901183A4 (en) 2010-01-13
CA2595858A1 (en) 2006-11-30
US7801903B2 (en) 2010-09-21

Similar Documents

Publication Publication Date Title
JP4339381B2 (ja) 共有メモリ型マルチプロセッサシステム及びその情報処理方法
JP6977239B2 (ja) 行列乗算器
US8751556B2 (en) Processor for large graph algorithm computations and matrix operations
JP2019148969A (ja) 行列演算装置、行列演算方法および行列演算プログラム
US9240237B2 (en) Semiconductor device and method of writing/reading entry address into/from semiconductor device
CN103914506A (zh) 数据检索装置、数据存储方法和数据检索方法
WO2012076377A2 (en) Optimizing output vector data generation using a formatted matrix data structure
Komarov et al. Fast k-NNG construction with GPU-based quick multi-select
JP4511469B2 (ja) 情報処理方法及び情報処理システム
WO2005106713A1 (ja) 情報処理方法及び情報処理システム
JP4881435B2 (ja) メモリ共有型並列処理システムにおいて表形式データを集計する方法及び装置
US20210049012A1 (en) Parallel union control device, parallel union control method, and storage medium
CN105608056A (zh) 一种基于Flink的大规模矩阵并行化的计算方法
JPWO2009044486A1 (ja) 表形式データをソートする方法、マルチコア型装置、及び、プログラム
CN110765413B (zh) 矩阵求和结构及神经网络计算平台
WO2010013320A1 (ja) 表形式データを操作する方法、分散メモリ型マルチプロセッサ、及び、プログラム
JP4772506B2 (ja) 情報処理方法、情報処理システムおよびプログラム
JP4995724B2 (ja) 情報処理システムおよび情報処理方法
Bandyopadhyay et al. Sorting large multifield records on a GPU
CN108280461B (zh) 使用OpenCL加速的快速全局K-均值聚类方法
JP3259622B2 (ja) ベクトル演算装置を用いたバケットソート処理方式
JP5008720B2 (ja) メモリ間接参照をメモリ直接参照に変換する方法及び装置
JPS6143338A (ja) 連想技術を使用して稀薄なデータベースをサーチする方法
JPWO2009028050A1 (ja) 表形式データを操作するマルチコア対応データ処理方法、マルチコア型処理装置、及び、プログラム
Shao et al. Speeding up model building for ECGA on CUDA platform

Legal Events

Date Code Title Description
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: 20090623

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090701

R150 Certificate of patent or registration of utility model

Ref document number: 4339381

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120710

Year of fee payment: 3

S202 Request for registration of non-exclusive licence

Free format text: JAPANESE INTERMEDIATE CODE: R315201

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120710

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150710

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S303 Written request for registration of pledge or change of pledge

Free format text: JAPANESE INTERMEDIATE CODE: R316303

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250