(57)【特許請求の範囲】
【請求項１】
昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、
前記メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型プロセッサシステムにおいて、前記第１の配列に格納された値のうち前記第２の配列に存在する値を識別する情報処理方法であって、
前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて対応する前記第２の配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の配列に存在する場合に、前記一致する値を有する前記第１の配列の要素にマークを付けるステップと、
を含む、情報処理方法。
【請求項２】
第１の表形式データ及び第２の表形式データを記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備し、前記第１の表形式データ及び前記第２の表形式データが、それぞれのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列として前記メモリに記憶される、共有メモリ型マルチプロセッサシステムにおいて、前記第１の表形式データの前記レコードを、前記第２の表形式データにそのレコードと同じ項目値を有するレコードが存在する一致レコードと、前記同じ項目値を有するレコードが存在しない不一致レコードとに分類する情報処理方法であって、
前記第１の表形式データの前記項目値配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の表形式データの前記項目値配列の分割された区間の境界の要素の値に応じて対応する前記第２の表形式データの前記項目値配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の表形式データの前記項目値配列の要素の個数と前記第２の表形式データの前記項目値配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の表形式データの前記項目値配列に存在する場合に、前記一致する値を有する前記第１の表形式データの前記項目値配列の要素にマークを付けるステップと、
前記第１の表形式データの前記レコード番号配列を前記複数台のプロセッサの台数と同じ個数の複数の部分に分割し、前記複数の部分を前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、前記第１の表形式データの前記レコード番号配列の前記割り当てられた部分から当該部分に格納されているレコード番号を読み出し、前記第１の表形式データの前記項目値番号配列から前記読み出されたレコード番号に対応する項目値番号を読み出し、前記読み出された項目値番号に対応する前記第１の表形式データの前記項目値配列の要素に前記マークが付けられているかどうかを判定し、前記マークが付けられている場合、前記読み出されたレコード番号を前記一致レコードとして分類し、前記マークが付けられていない場合、前記読み出されたレコード番号を前記不一致レコードとして分類するステップと、
を含む情報処理方法。
【請求項３】
昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備した共有メモリ型プロセッサシステムにおいて、前記第１の配列と前記第２の配列を前記所定の順序で重複なしにマージする情報処理方法であって、
前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて前記第１の配列の前記複数の区間に対応する前記第２の配列の複数の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較することにより、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で順位付けし、前記区間に含まれる要素のユニークな値の個数をカウントするステップと、
前記複数台のプロセッサのそれぞれが、前記所定の順序に関して自プロセッサに割り当てられた前記区間よりも前の区間に含まれる要素の前記ユニークな値の個数の合計を、前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素に付けられた順位に加算することにより、前記第１の配列に格納された値及び前記第２の配列に格納された値に前記所定の順序で順位付けするステップと、
を含む情報処理方法。
【請求項４】
昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、
前記メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型プロセッサシステムであって、
前記複数台のプロセッサのいずれか１台のプロセッサが、前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて対応する前記第２の配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる手段を具備し、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の配列に存在する場合に、前記一致する値を有する前記第１の配列の要素にマークを付ける手段を具備する、
共有メモリ型プロセッサシステム。
【請求項５】
第１の表形式データ及び第２の表形式データを記憶するメモリと、
前記メモリにアクセス可能である複数台のプロセッサと、
を具備し、
前記第１の表形式データ及び前記第２の表形式データが、それぞれのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列として前記メモリに記憶される、
共有メモリ型マルチプロセッサシステムであって、
前記複数台のプロセッサのいずれか１台のプロセッサが、前記第１の表形式データの前記項目値配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の表形式データの前記項目値配列の分割された区間の境界の要素の値に応じて対応する前記第２の表形式データの前記項目値配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の表形式データの前記項目値配列の要素の個数と前記第２の表形式データの前記項目値配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる手段を具備し、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の表形式データの前記項目値配列に存在する場合に、前記一致する値を有する前記第１の表形式データの前記項目値配列の要素にマークを付ける手段を具備し、
前記複数台のプロセッサのうちのいずれか１台のプロセッサが、前記第１の表形式データの前記レコード番号配列を前記複数台のプロセッサの台数と同じ個数の複数の部分に分割し、前記複数の部分を前記複数台のプロセッサに割り当てる手段を具備し、
前記複数台のプロセッサのそれぞれが、前記第１の表形式データの前記レコード番号配列の前記割り当てられた部分から当該部分に格納されているレコード番号を読み出し、前記第１の表形式データの前記項目値番号配列から前記読み出されたレコード番号に対応する項目値番号を読み出し、前記読み出された項目値番号に対応する前記第１の表形式データの前記項目値配列の要素に前記マークが付けられているかどうかを判定し、前記マークが付けられている場合、前記読み出されたレコード番号を一致レコードとして分類し、前記マークが付けられていない場合、前記読み出されたレコード番号を不一致レコードとして分類する手段を具備する、
共有メモリ型プロセッサシステム。
【請求項６】
昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備した共有メモリ型プロセッサシステムであって、
前記複数台のプロセッサのいずれか１台のプロセッサが、前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて前記第１の配列の前記複数の区間に対応する前記第２の配列の複数の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる手段を具備し、
前記複数台のプロセッサのそれぞれが、
自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較することにより、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で順位付けし、前記区間に含まれる要素のユニークな値の個数をカウントする手段と、
前記所定の順序に関して自プロセッサに割り当てられた前記区間よりも前の区間に含まれる要素の前記ユニークな値の個数の合計を、前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素に付けられた順位に加算することにより、前記第１の配列に格納された値及び前記第２の配列に格納された値に前記所定の順序で順位付けする手段と、
を具備する、
共有メモリ型マルチプロセッサシステム。
【請求項７】
昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備した共有メモリ型プロセッサシステムにおいて、
前記複数台のプロセッサのいずれか１台のプロセッサに、前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて対応する前記第２の配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる機能を実現させ、
前記複数台のプロセッサのそれぞれに、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の配列に存在する場合に、前記一致する値を有する前記第１の配列の要素にマークを付ける機能を実現させるためのプログラム。
【請求項８】
第１の表形式データ及び第２の表形式データを記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備し、前記第１の表形式データ及び前記第２の表形式データが、それぞれのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列として前記メモリに記憶される、共有メモリ型マルチプロセッサシステムにおいて、
前記複数台のプロセッサのいずれか１台のプロセッサに、前記第１の表形式データの前記項目値配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の表形式データの前記項目値配列の分割された区間の境界の要素の値に応じて対応する前記第２の表形式データの前記項目値配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の表形式データの前記項目値配列の要素の個数と前記第２の表形式データの前記項目値配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる機能を実現させ、
前記複数台のプロセッサのそれぞれに、自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の表形式データの前記項目値配列に存在する場合に、前記一致する値を有する前記第１の表形式データの前記項目値配列の要素にマークを付ける機能を実現させ、
前記複数台のプロセッサのいずれか１台のプロセッサに、前記第１の表形式データの前記レコード番号配列を前記複数台のプロセッサの台数と同じ個数の複数の部分に分割し、前記複数の部分を前記複数台のプロセッサに割り当てる機能を実現させ、
前記複数台のプロセッサのそれぞれに、前記第１の表形式データの前記レコード番号配列の前記割り当てられた部分から当該部分に格納されているレコード番号を読み出し、前記第１の表形式データの前記項目値番号配列から前記読み出されたレコード番号に対応する項目値番号を読み出し、前記読み出された項目値番号に対応する前記第１の表形式データの前記項目値配列の要素に前記マークが付けられているかどうかを判定し、前記マークが付けられている場合、前記読み出されたレコード番号を一致レコードとして分類し、前記マークが付けられていない場合、前記読み出されたレコード番号を不一致レコードとして分類する機能を実現させるためのプログラム。
【請求項９】
昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備した共有メモリ型プロセッサシステムにおいて、
前記複数台のプロセッサのいずれか１台のプロセッサに、前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて前記第１の配列の前記複数の区間に対応する前記第２の配列の複数の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる機能を実現させ、
前記複数台のプロセッサのそれぞれに、
自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較することにより、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で順位付けし、前記区間に含まれる要素のユニークな値の個数をカウントする機能と、
前記所定の順序に関して自プロセッサに割り当てられた前記区間よりも前の区間に含まれる要素の前記ユニークな値の個数の合計を、前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素に付けられた順位に加算することにより、前記第１の配列に格納された値及び前記第２の配列に格納された値に前記所定の順序で順位付けする機能と、
を実現させるためのプログラム。
【請求項１０】
請求項７乃至９のうちいずれか１項に記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数台のプロセッサがメモリを共有して並列処理を行う共有メモリ型マルチプロセッサシステムにおける情報処理方法、特に、メモリ上の２組の大規模データを複数台のプロセッサで並列に処理する情報処理方法に関する。【０００２】
本発明は、また、このような情報処理方法を実施する共有メモリ型マルチプロセッサシステムに関する。【０００３】
本発明は、さらに、このような情報処理方法を実現させるためのプログラムに関する。【０００４】
本発明は、さらに、このようなプログラムを記録した記憶媒体に関する。
【背景技術】
【０００５】
社会全体のさまざまな場所にコンピュータが導入され、インターネットをはじめとするネットワークが浸透した今日では、そこここで、大規模データが蓄積・処理されるようになった。【０００６】
従来、大規模データを高速に処理するために適したデータ構造が提案されている。たとえば、本発明者は、大規模データ、特に、表形式データを高速に検索、集計、ソートするために適したデータ管理機構を提案している（特許文献１を参照のこと）。このデータ管理機構は、表形式データの項目の各項目値を表すための情報ブロックを有する。この情報ブロックでは、表形式データの項目に属する項目値は、各項目値に付与された項目値番号と、項目値番号の順番に並べられた実際の項目値の配列とによって表される。各レコードの項目値に対応した項目値番号をレコード番号順に並べた配列が準備され、各レコードの項目値は、当該レコードの項目値番号に対応した値を項目値の配列から見つけることによって特定される。また、表形式データ中の処理対象のレコードは、レコード番号を順番に並べた配列によって特定される。【０００７】
情報ブロックは、表形式データの各項目に対し、その項目に属する項目値が順序付け（整数化）された項目値番号の順番に、上記項目値番号に対応した項目値が格納されたテーブルである。項目値自体は、数値（整数、固定小数点、浮動小数点など）、文字列などのどのようなタイプのデータでもよい。したがって、このデータ管理機構は、あらゆるタイプのデータの値が項目値番号という整数で取り扱えることに特長がある。すなわち、このデータ管理機構によれば、たとえば、文字列型のデータのソートを行う際に、文字列型のデータをそのままソート対象としてソートするのではなく、文字列型のデータの値に対応した項目値番号をソート対象としてソートすることができる。このとき、ソートの結果はレコード番号を順番に並べた配列によって表される。【０００８】
また、大規模データを処理するために必要である膨大な計算を高速に実行するため、並列処理を導入することも試みられている。一般に、並列処理アーキテクチャは「分散メモリ型」と「共有メモリ型」に大別される。【０００９】
分散メモリ型は、各プロセッサがそれぞれローカルなメモリを持ち、これらを結合してシステムを構築する。この方式では、理論的に数百〜数万台ものプロセッサを組み込んだハードウェアシステムの設計が可能である。しかしながら、分散メモリ型は、データの分掌管理の複雑さや、プロセッサ間通信の効率の低さなどの技術的課題がある。本発明者は、これらの技術的課題が解決された、大規模な表形式データを並列処理可能である分散メモリ型コンピュータアーキテクチャを提案している（特許文献２を参照のこと。）。特許文献２に記載された情報処理システムは、メモリおよび制御装置を有する複数のメモリモジュールと、メモリモジュール間を接続し、あるメモリモジュールの値を他のメモリモジュールに伝達するデータ伝送路とを備え、各メモリモジュールのメモリが、それぞれ、昇順または降順に重複なく順序付けられた値のリストを保持するように構成される。各メモリモジュールの制御装置は、値のリストに含まれる値を他のメモリモジュールへ送信する手段と、他のメモリモジュールから値のリストに含まれる値を受信する手段とを含む。これにより、各メモリモジュールの制御装置は、自己の値のリストの値と、他のメモリモジュールの値のリストとを比較することにより、自己の値リストの値について、他のメモリモジュールの値のリスト中の値を考慮したグローバルな順位を得ることが可能となる。【００１０】
これに対して、共有メモリ型は複数のプロセッサが１つの巨大なメモリ空間を共有する方式である。この方式では、プロセッサ群と共有メモリ間のトラフィックがボトルネックとなるので、現実的には百台を越えるプロセッサを用いてシステムを構築することは容易ではない、と考えられている。しかし、このような状況下で、近年、複数台のＣＰＵを用いた共有メモリ型マルチプロセッサシステムとして構成されたパーソナルコンピュータが入手可能である。この種のパーソナルコンピュータに使用される標準的なＣＰＵは、メモリバスの５〜６倍程度の内部クロックで動作し、その内部に自動的な並列実行機能やパイプライン処理機能が装備されており、およそ１データを１クロック（メモリバス）で処理できる。【００１１】
したがって、共有メモリ型マルチプロセッサシステムとして構成されたパーソナルコンピュータを利用することにより、シングルプロセッサシステムよりも高速に大規模データを処理することが望まれる。
【特許文献１】国際公開ＷＯ００／１０１０３号パンフレット
【特許文献２】国際公開ＷＯ２００５／０４１０６６号パンフレット
【発明の開示】
【発明が解決しようとする課題】
【００１２】
大規模データを複数台のプロセッサで処理する場合、データを分割して各プロセッサに割り当てる方式と、機能を分割して各プロセッサに割り当てる方式が考えられるが、たとえば、何百万行以上に及ぶ表形式データを処理する環境では、大規模データに異なる操作を同時に適用することよりも、大規模データに対して同じ操作を適用することの方が一般に効率的である。なぜならば、プロセッサの台数が同時に適用すべき異なる操作の数よりも多い場合、プロセッサが余ってしまうからである。そのため、マルチプロセッサ化は、大規模データを分割し、分割されたデータに対して同じ処理を並列に適用することによってより効果的になる。また、並列処理の効率は、複数台のプロセッサの処理量にばらつきが生じないように、データを割り当てることによって高くなる。【００１３】
さらに、たとえば、２組の大規模データを併合するマージ処理、或いは、２組の大規模データの一致・不一致を判定するマッチング処理では、比較対象となる２組の大規模データを複数台のプロセッサに割り当てなければならない。その上、２組の大規模データからの実際に比較されるデータは同じプロセッサに割り当てることが必要である。このように、共有メモリ型マルチプロセッサシステムにおいて、２組の大規模データを組み合わせて処理する際、これら２組の大規模データを複数台のプロセッサへ適切に割り当てることが望ましい。【００１４】
そこで、本発明は、共有メモリ型マルチプロセッサシステムにおいて、大規模データを複数台のプロセッサへ適切に割り当てることにより効率的に大規模データを並列処理する情報処理方法の提供を目的とする。【００１５】
また、本発明の目的は、このような情報処理方法を実施する共有メモリ型マルチプロセッサシステムを提供することである。【００１６】
さらに、本発明の目的は、このような情報処理方法を実現させるためのプログラムを提供することである。【００１７】
さらに、本発明の目的は、このようなプログラムを記録した記憶媒体を提供することである。
【課題を解決するための手段】
【００１８】
上記のように、本発明者は大規模な表形式データを取り扱うためのデータ管理機構を既に提案している。このデータ管理機構では、表形式データの項目に属する項目値は、各項目値に付与された項目値番号と、項目値番号の順番に並べられた実際の項目値の配列とによって表される。項目値自体は、数値（整数、固定小数点、浮動小数点など）、文字列などのどのようなタイプのデータでも構わないが、項目値番号の順番に、たとえば、値の昇順又は値の降順のような所定の順序で配列に格納されている。本発明者は、大規模データがその値の昇順又は降順のような所定の順序で整列することにより、ソートなどの操作が非常に効率的に行えることを明らかにしている（特許文献１を参照のこと。）。【００１９】
大規模な表形式データは、レコードの個数が膨大になるだけでなく、上記の項目値の配列のサイズもまた膨大になる。したがって、上記のデータ管理機構における大規模な表形式データを共有メモリ型マルチプロセッサシステムで取り扱う場合、所定の順序に整列された項目値の配列を分割して複数台のプロセッサへ割り当てる方式が考えられる。この場合、所定の順序で整列されているデータを複数台のプロセッサへ割り当てた後、複数台のプロセッサがそれぞれ割り当てられたデータを処理することにより、大規模データの並列処理が実現される。本発明者は、個々のプロセッサに割り当てられたデータがソートなどの操作の対象となる点に着目し、大規模データがその値の昇順又は降順のような所定の順序で整列されている場合、大規模データを複数台のプロセッサへ割り当てる際にもその所定の順序を保存したまま割り当てることを提案する。【００２０】
さらに、２組の大規模な表形式データを併合するアプリケーションでは、多くの場合にそれぞれの表形式データに格納されている対応する項目値が比較される。もし、対応する項目値が別々のプロセッサに割り当てられてしまうと、それらの値を直接比較することが困難になる。そのため、２組の大規模データを複数台のプロセッサへ適切に割り当てることにより、表形式データの併合が効率的に実現される。本発明者は、２組の大規模データを複数台のプロセッサに割り当てる場合にも、大規模データを所定の順序を保存したまま複数台のプロセッサへ割り当てることにより、別々の組からの類似データ、特に、値が一致するデータを同じプロセッサに割り当てると共に、それぞれのプロセッサに割り当てられるデータの量ができる限り均等になるように割り当てることを提案する。【００２１】
上記の本発明の原理は以下の種々の態様によって実施される。【００２２】
本発明の第１の態様による実施形態は、昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備した共有メモリ型プロセッサシステムにおいて、前記第１の配列と前記第２の配列を前記所定の順序で重複なしにマージする情報処理方法であって、
前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて前記第１の配列の前記複数の区間に対応する前記第２の配列の複数の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較することにより、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で順位付けし、前記区間に含まれる要素のユニークな値の個数をカウントするステップと、
前記複数台のプロセッサのそれぞれが、前記所定の順序に関して自プロセッサに割り当てられた前記区間よりも前の区間に含まれる要素の前記ユニークな値の個数の合計を、前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素に付けられた順位に加算することにより、前記第１の配列に格納された値及び前記第２の配列に格納された値に前記所定の順序で順位付けするステップと、
を含む情報処理方法である。【００２３】
本実施形態によれば、所定の順序で整列された前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップは、各プロセッサに割り当てられる要素の個数がバランスされるように、すなわち、要素の個数の合計の差が所定の幅に収まるように第１の配列及び第２の配列の区間を分割する。これにより各プロセッサの処理量のバラツキが減少し、並列化の効率が高くなる。分割された区間内では、第１の配列の要素と第２の配列の要素はそれぞれ所定の順序で整列されているので、次のステップは、これらの配列の要素を順次比較することによって、区間内で要素に順位を付けることができる。このステップは、同時に区間内に含まれる要素のユニークな値の個数をカウントする。このステップは、複数台のプロセッサのそれぞれが自プロセッサに割り当てられた区間に関して並列に実行する。さらに次のステップでは、各プロセッサは、自プロセッサに割り当てられた区間よりも前の区間に含まれる要素のユニークな値の個数の合計を自プロセッサに割り当てられた区間に含まれる要素に付けられた順位に加算する。これにより、複数台のプロセッサに分割された第１の配列及び第２の配列のすべての要素に一連の順位を付けることができる。このようにして一連の順位が付与された第１の配列の要素と第２の配列の要素は所定の順序で重複なく整列させることができる。【００２４】
本実施形態の一実施例では、第１の配列の要素及び第２の配列の要素を複数台のプロセッサへ割り当てる前に、要素の値の範囲の中で、第１の配列又は第２の配列の一方の配列、すなわち、片方の配列だけに存在する値の範囲が割り当てられるべき区間から予め除外される。これらの値の範囲では、区間内の要素の値の順位付け、要素のユニークな値の個数のカウントは、一方の配列だけについて考慮すればよい。したがって、これらの値の範囲を除外した配列の要素が複数台のプロセッサに割り当てられる。【００２５】
また、本実施形態の一実施例では、要素のユニークな値の個数は第１の配列の要素と第２の配列の要素を比較する際に同一でない値の出現回数をカウントすることによって得られる。或いは、要素のユニークな値の個数は、区間内で要素に付与された順位の最大値に基づいて決定される。たとえば、順位が０から始まるときには、要素のユニークな値の個数は、（順位の最大値）−１によって得られる。【００２６】
本実施形態の一実施例によれば、情報処理方法は、前記第１の配列に格納された値及び前記第２の配列に格納された値を、前記第１の配列に格納された値及び前記第２の配列に格納された値に付けられた順位に従って並べることにより、前記第１の配列に格納された値と前記第２の配列に格納された値が前記所定の順序で重複なしにマージされた第３の配列を作成し、前記メモリに記憶するステップをさらに含む。これにより、第１の配列と第２の配列をマージすることによって得られた第３の配列をさらなる処理のためメモリに記憶することができる。【００２７】
本実施形態の一実施例によれば、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素に付けられた順位が、前記第１の配列及び前記第２の配列のすべての要素について、一方の配列の特定の要素よりも前に順序付けされる他方の配列の要素の個数の合計値を計算し、前記特定の要素の前記一方の配列の前記区間の範囲内における順位を前記計算された合計値に加算することにより算出される。【００２８】
さらに、前記一方の配列の特定の要素よりも前に順序付けされる他方の配列の要素の個数の合計値は、一方の配列の特定の要素と前記特定の要素の直前の要素との間に収まる値を有する他方の配列の要素の個数を前記一方の配列の前記特定の要素に対応するカウント値として計算し、前記カウント値を累計数化することにより算出される。【００２９】
上述のように、第１の配列の要素及び第２の配列の要素は所定の順序（たとえば、値の昇順又は降順）に整列されているので、各プロセッサに割り当てられた第１の配列と第２の配列の要素を先頭から順番に比較することにより、一方の配列（たとえば、配列Ａ）を他方の配列（たとえば、配列Ｂ）へマージするときに、一方の配列Ａから他方の配列Ｂの特定の要素の直前に挿入される要素の個数を計算することができる。このカウント値を累計数化することにより、他方の配列Ｂの特定の要素よりも前に順序付けられる一方の配列Ａの要素の個数が得られる。この他方の配列Ｂの特定の要素に対応する累計数化されたカウント値は、この他方の配列Ｂの特定の要素が一方の配列Ａの中で何番目であるか、すなわち、一方の配列Ａ内での順位を表している。この他方の配列Ｂの特定の要素の区間内での順位は、この特定の要素の一方の配列Ａ内の順位に他方の配列Ｂ内での順位を加算することにより決まる。このように各プロセッサに割り当てられた区間内の要素の順位は、一方の配列から他方の配列へ挿入される要素数のカウントと、カウント値の累計数化と、累計数から順位への変換によって得ることができる。【００３０】
本実施例では、累計数から順位への変換は順位の値の加算によって実現される。また、上述のように、区間内の順位からすべての区間における一連の順位への変換もまた加算によって実現される。したがって、本実施形態の一実施例では、区間内における累計数から順位への変換と、区間内の順位からすべての区間における一連の順位への変換が同時に実行される。【００３１】
このように本発明の第１の態様によれば、マージされた要素の位置は、各プロセッサにおいて並列に実行される計算によって得られるので、２組の大規模データを高速で効率的にマージすることが可能である。【００３２】
本発明の第２の態様による実施形態は、昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、
前記メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型プロセッサシステムにおいて、前記第１の配列に格納された値のうち前記第２の配列に存在する値を識別する情報処理方法である。【００３３】
この情報処理方法は、
前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて対応する前記第２の配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の配列に存在する場合に、前記一致する値を有する前記第１の配列の要素にマークを付けるステップと、
を含む。【００３４】
この本発明の第２の態様による情報処理方法は、２組の大規模データがあるときに、一方の大規模データに含まれる要素の値がもう一方の大規模データに含まれる場合に、一方の大規模データの当該要素にマークを付ける。この情報処理方法は、本発明の第１の態様による情報処理方法と同様に、最初のステップにおいて、各プロセッサに割り当てられる要素の個数がバランスされるように、すなわち、要素の個数の合計の差が所定の幅に収まるように第１の配列及び第２の配列の区間を分割する。次のステップでは、第１の配列の値のうち、第２の配列に存在する値をマーキングする。区間分割の際に、値が一致するデータは同じプロセッサに割り当てるので、マーキングが効率的に行われる。【００３５】
本実施形態の一実施例は、前記第１の配列と同じサイズを有する第３の配列を前記メモリに準備するステップをさらに含み、
前記一致する値を有する前記第１の配列の要素にマークを付けるステップが、前記一致する値を有する前記第１の配列の要素に対応する前記第３の配列の要素にフラグを立てるステップを含む。これにより、後の処理で使用できるように、値の一致の有無を示すフラグ配列をメモリ上に作成することができる。【００３６】
本発明の第３の態様によれば、２組の表形式データがあるときに、一方の表形式データのレコードを、そのレコードの所定の項目の項目値と同じ項目値を含むレコードが他方の表形式データに存在するかどうかに応じて分類する情報処理方法が提供される。この本発明の第３の態様による実施形態は、第１の表形式データ及び第２の表形式データを記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備し、前記第１の表形式データ及び前記第２の表形式データが、それぞれのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列として前記メモリに記憶される、共有メモリ型マルチプロセッサシステムにおいて、前記第１の表形式データの前記レコードを、前記第２の表形式データにそのレコードと同じ項目値を有するレコードが存在する一致レコードと、前記同じ項目値を有するレコードが存在しない不一致レコードとに分類する情報処理方法であって、
前記第１の表形式データの前記項目値配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の表形式データの前記項目値配列の分割された区間の境界の要素の値に応じて対応する前記第２の表形式データの前記項目値配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の表形式データの前記項目値配列の要素の個数と前記第２の表形式データの前記項目値配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の表形式データの前記項目値配列に存在する場合に、前記一致する値を有する前記第１の表形式データの前記項目値配列の要素にマークを付けるステップと、
前記第１の表形式データの前記レコード番号配列を前記複数台のプロセッサの台数と同じ個数の複数の部分に分割し、前記複数の部分を前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのそれぞれが、前記第１の表形式データの前記レコード番号配列の前記割り当てられた部分から当該部分に格納されているレコード番号を読み出し、前記第１の表形式データの前記項目値番号配列から前記読み出されたレコード番号に対応する項目値番号を読み出し、前記読み出された項目値番号に対応する前記第１の表形式データの前記項目値配列の要素に前記マークが付けられているかどうかを判定し、前記マークが付けられている場合、前記読み出されたレコード番号を前記一致レコードとして分類し、前記マークが付けられていない場合、前記読み出されたレコード番号を前記不一致レコードとして分類するステップと、
を含む情報処理方法である。【００３７】
本実施形態による情報処理方法は、第２の態様による情報処理方法と同様に、最初に、要素の数をバランスさせる区間分割を行い、次に、第１の表形式データの項目値配列の値のうち、第２の表形式データの項目値配列に存在する値をマーキングする。続いて、レコード番号配列を分割して複数台のプロセッサに割り当てる。これにより、レコード番号の分類を並列処理することが可能になる。すなわち、各プロセッサは、第１の表形式データの割り当てられたレコード番号配列からレコード番号を読み出し、そのレコード番号を使って項目値番号配列から項目値番号を読み出し、その項目値番号を使って、その項目値番号に対応する値が第２の表形式データの項目値配列に存在するかどうかをマーキングから判断し、読み出されたレコード番号をマッチとアンマッチに分類する。【００３８】
本実施形態の一実施例によれば、第１の表形式データに関するレコードの分類の後に続いて、対応する第２の表形式に関するレコードの分類を行うことができる。本実施形態の別の実施例によれば、第１の表形式データに関するレコードの分類と、対応する第２の表形式に関するレコードの分類は、複数台のプロセッサを２群に分けることにより並列に実行される。【００３９】
項目値配列には、レコードの削除等の操作のため、実際には参照されない値が含まれていることがある。そこで、本実施形態の一実施例による情報処理方法は、項目値配列から、レコード番号配列に格納されたレコードによって実際に参照される値だけを含む有効項目値配列を作成するステップをさらに含む。これにより、その後のマーキング処理をより効率的に実行することが可能である。また、有効項目値配列は、レコード番号配列を複数台のプロセッサに分割して割り当てることにより、並列に作成することが可能である。【００４０】
本発明の第４の態様による実施形態は、上記本発明による情報処理方法を実施するため、昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備し、共有メモリ型プロセッサシステムである。【００４１】
前記複数台のプロセッサのいずれか１台のプロセッサは、前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて前記第１の配列の前記複数の区間に対応する前記第２の配列の複数の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる手段を具備する。【００４２】
前記複数台のプロセッサのそれぞれは、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較することにより、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で順位付けし、前記区間に含まれる要素のユニークな値の個数をカウントする手段と、
前記所定の順序に関して自プロセッサに割り当てられた前記区間よりも前の区間に含まれる要素の前記ユニークな値の個数の合計を、前記自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素に付けられた順位に加算することにより、前記第１の配列に格納された値及び前記第２の配列に格納された値に前記所定の順序で順位付けする手段と、を具備する。【００４３】
本発明の第５の態様による実施形態は、上記本発明による情報処理方法を実施するため、昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列を記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備した共有メモリ型プロセッサシステムである。【００４４】
前記複数台のプロセッサのいずれか１台のプロセッサは、前記第１の配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の配列の分割された区間の境界の要素の値に応じて対応する前記第２の配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の配列の要素の個数と前記第２の配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の配列の要素及び前記第２の配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる手段を具備する。【００４５】
前記複数台のプロセッサのそれぞれは、自プロセッサに割り当てられた前記第１の配列の要素及び前記第２の配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の配列に存在する場合に、前記一致する値を有する前記第１の配列の要素にマークを付ける手段を具備する。【００４６】
本発明の第６の態様による実施形態は、上記本発明による情報処理方法を実施するため、第１の表形式データ及び第２の表形式データを記憶するメモリと、前記メモリにアクセス可能である複数台のプロセッサと、を具備し、前記第１の表形式データ及び前記第２の表形式データが、それぞれのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列として前記メモリに記憶される、共有メモリ型マルチプロセッサシステムである。【００４７】
前記複数台のプロセッサのいずれか１台のプロセッサは、前記第１の表形式データの前記項目値配列を前記複数台のプロセッサの台数に応じて複数の区間に分割し、前記第１の表形式データの前記項目値配列の分割された区間の境界の要素の値に応じて対応する前記第２の表形式データの前記項目値配列の区間を定め、前記複数の区間のそれぞれに含まれる前記第１の表形式データの前記項目値配列の要素の個数と前記第２の表形式データの前記項目値配列の要素の個数の合計の差が所定の幅に収まるように前記区間の境界を調整することにより、前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を前記所定の順序で前記複数台のプロセッサに割り当てる手段を具備する。【００４８】
前記複数台のプロセッサのそれぞれは、自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素及び前記第２の表形式データの前記項目値配列の要素を比較し、前記自プロセッサに対応する前記区間の範囲内で前記自プロセッサに割り当てられた前記第１の表形式データの前記項目値配列の要素の値と一致する値を有する要素が前記自プロセッサに割り当てられた前記第２の表形式データの前記項目値配列に存在する場合に、前記一致する値を有する前記第１の表形式データの前記項目値配列の要素にマークを付ける手段を具備する。【００４９】
また、前記複数台のプロセッサのうちのいずれか１台のプロセッサは、前記第１の表形式データの前記レコード番号配列を前記複数台のプロセッサの台数と同じ個数の複数の部分に分割し、前記複数の部分を前記複数台のプロセッサに割り当てる手段を具備する。【００５０】
さらに、前記複数台のプロセッサのそれぞれは、前記第１の表形式データの前記レコード番号配列の前記割り当てられた部分から当該部分に格納されているレコード番号を読み出し、前記第１の表形式データの前記項目値番号配列から前記読み出されたレコード番号に対応する項目値番号を読み出し、前記読み出された項目値番号に対応する前記第１の表形式データの前記項目値配列の要素に前記マークが付けられているかどうかを判定し、前記マークが付けられている場合、前記読み出されたレコード番号を一致レコードとして分類し、前記マークが付けられていない場合、前記読み出されたレコード番号を不一致レコードとして分類する手段を具備する。【００５１】
さらに、本発明の第７の態様によれば、上記の本発明による情報処理方法を実現させるためのプログラムが提供される。【００５２】
さらに、本発明の第８の態様によれば、上記の本発明によるプログラムを記録した記憶媒体が提供される。
【発明の効果】
【００５３】
本発明によれば、共有メモリ型の並列処理環境において、大規模データ、特に、大規模な表形式データを複数台のプロセッサへ効率的に割り当てることにより、大規模データの高速な並列処理を実現可能な情報処理装置を提供することが可能となる。
【発明を実施するための最良の形態】
【００５４】
以下、添付図面を参照して本発明の種々の実施例を説明する。【００５５】
［コンピュータシステム構成］
図１は複数台のプロセッサがメモリを共有して大規模データの情報処理方法を実施するコンピュータシステムの一実施例の概略図である。図１に示すように、このコンピュータシステム１０は、プログラムを実行することによりシステム全体および個々の構成部分を制御するｐ台のプロセッサ（ＣＰＵ）１２−１、１２−２、．．．１２−ｐ、ワークデータなどを記憶する共有メモリ、たとえば、ＲＡＭ(Random Access Memory)１４、プログラム等を記憶するＲＯＭ(Read Only Memory)１６、ハードディスク等の固定記憶媒体１８、ＣＤ−ＲＯＭ１９をアクセスするためのＣＤ−ＲＯＭドライバ２０、ＣＤ−ＲＯＭドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、ＣＲＴ表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、外部記憶媒体１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。図示されていないが、各ＣＰＵは固有のローカルメモリを備えていてもよい。【００５６】
本実施の形態にかかる大規模データの情報処理方法を実施するプログラムは、ＣＤ−ＲＯＭ１９に収容され、ＣＤ−ＲＯＭドライバ２０に読取られても良いし、ＲＯＭ１６に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ１９から読み出したものを、外部記憶媒体１８の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て外部から供給されるものであっても良い。【００５７】
また、本発明の実施の形態にかかる共有メモリ型マルチプロセッサシステムは、コンピュータシステム１０に大規模データの情報処理方法を実施するプログラムを実行させることにより実現される。【００５８】
［情報ブロックに基づくデータ管理機構］
図２はデータ管理機構を説明するための表形式データの一例を表す図である。この表形式データは、上述の国際公開第ＷＯ００／１０１０３号パンフレットに提案したデータ管理機構を用いることにより、コンピュータ内では図３に示されるようなデータ構造として記憶される。【００５９】
図３に示すように、表形式データの各レコードの並び順の番号と、内部データの並び順の番号を対応付ける配列３０１（以下、この配列を「OrdSet」のように略記する。）には、表形式のレコード毎に内部データの並び順番号が値として配置される。この例では、すべての表形式データが内部データとして表されるため、表形式データのレコード番号と内部データの並び順番号とは一致する。【００６０】
例えば、性別に関しては、表形式データのレコード０に対応する内部データの並び順番号は、配列OrdSet３０１から「０」であることがわかる。並び順番号が「０」であるレコードに関する実際の性別の値、即ち、「男」又は「女」は、実際の値が所定の順序に従ってソートされた値リスト３０３（以下、値リストを「VL」のように略記する。）へのポインタ配列３０２（以下、ポインタ配列を「VNo」のように略記する。）を参照することによって取得できる。ポインタ配列３０２は、配列OrdSet３０１に格納されている並び順番号の順に従って、実際の値リスト３０３中の要素を指し示すポインタを格納している。これにより、表形式データのレコード「０」に対応する性別の項目値は、（１）配列OrdSet３０１からレコード「０」に対応する並び順番号「０」を取り出し、（２）値リストへのポインタ配列３０２から並び順番号「０」に対応する要素「１」を取り出し、（３）値リスト３０３から、値リストへのポインタ配列３０２から取り出された要素「１」によって指し示される要素「女」を取り出すことにより取得できる。【００６１】
他のレコードに対しても、また、年齢及び身長に関しても同様に項目値を取得することができる。【００６２】
このように表形式データは、値リストVLと、値リストへのポインタ配列VNoの組合せにより表現され、この組合せを、特に、「情報ブロック」と称する。図３には、性別、年齢及び身長に関する情報ブロックがそれぞれ情報ブロック３０８、３０９及び３１０として示されている。【００６３】
単一のコンピュータが、単一のメモリ（物理的には複数であっても良いが、単一のアドレス空間に配置されアクセスされるという意味で単一のメモリ）であれば、当該メモリに、順序集合の配列OrdSet、各情報ブロックを構成する値リストVLおよびポインタ配列VNoとを記憶しておけばよい。しかしながら、大量のレコードを保持するためには、その大きさに伴ってメモリ容量も大きくなるため、これらの大量のレコードを並列処理できるのが望ましい。【００６４】
そこで、本発明においては、メモリに記憶された大量のレコードは複数台のプロセッサへ分割して割り当てられ、複数台のプロセッサが自プロセッサへ割り当てられたレコードのデータにアクセスし、複数台のプロセッサが大規模データを並列処理する。【００６５】
また、大規模な表形式データでは、値リストVLのサイズも大きくなる。そこで、本発明においては、メモリに記憶された大規模な値リストVLは複数台のプロセッサへ分割して割り当てられ、複数台のプロセッサが大規模データを並列処理する。【００６６】
［並列マージ］
最初に、本発明の実施の形態にかかる共有メモリ型マルチプロセッサシステムにおいて二つの大規模データをマージする情報処理方法、すなわち、並列マージ処理を説明する。ここで、共有メモリ型マルチプロセッサシステムは、複数台のプロセッサがメモリを共有して並列処理を行うシステムを表す。また、二つの大規模データとは、昇順又は降順である所定の順序で重複のない値が格納された第１の配列及び第２の配列である。上記のデータ管理機構の値リストVLはこのような配列の一例である。これらの配列がメモリに記憶され、複数台のプロセッサはこのメモリにアクセス可能である。以下の説明では、簡単のため、プロセッサの台数は４台とする。【００６７】
図４Ａは本実施の形態でマージされる二つの大規模データの一例である第１のリスト（ＬＩＳＴ−１）４０１と第２のリスト（ＬＩＳＴ−２）４０２を表す図、図４Ｂは、マージ後の第３のリスト（ＬＩＳＴ−３）４０３を表す図である。実際には、リストの要素の個数は数百万個以上に達するが、簡単のため、数十個の要素の例について説明する。第１のリスト４０１と第２のリスト４０２の要素は値の昇順に整列されている。マージ後の第３のリスト４０３も同様に値の昇順に整列されている。配列の左側の０，１，２，・・・の番号は配列の要素の順位を表している。この順位は配列の要素が格納されるメモリ上のアドレスに対応している。【００６８】
並列マージ処理では、いずれか１台のプロセッサが、最初に、第１のリスト４０１をプロセッサの台数に応じた４区間に分割する。図５Ａ、Ｂおよび図６Ａ、Ｂは二つのリストの区間分割の種々の例を示す図である。このとき、第２のリスト４０２を単純に大きさが均等になるように４区画に分割すると、第１のリスト４０１及び第２のリストは図５Ａに示されるように分割される。ＣＰＵ−０には第１のリスト４０１から値１００、１１０、１２０、１６０、１８０が割り当てられ、第２のリスト４０２から値８０、９０、１００、１２０、１８０、１９０が割り当てられ、ＣＰＵ−１には第１のリストから値２００、２１０、２２０、２５０、２６０が割り当てられ、第２のリスト４０２から値２０１、２３０、２５０、２９０、３００、３１０が割り当てられ、以下同様である。しかし、このように単純な区間分割では問題が生じる。たとえば、第１のリスト４０１の先頭から１１番目（＝順位１０）の要素の値は３００であり、この要素はＣＰＵ−２に割り当てられている。一方、第２のリスト４０２の先頭から１１番目（＝順位１０）の要素の値も３００であるが、この要素はＣＰＵ−１に割り当てられている。したがって、このような分割では、同じ値３００が別個のＣＰＵに割り当てられるため、ある値を処理するために二つのＣＰＵが協働しなければならない。【００６９】
このような問題を回避するため、本実施の形態による並列マージ処理によれば、第２のリスト４０２の複数の区間は、第１のリスト４０１の分割された区間の境界の要素の値に応じて決定される。すなわち、第２のリスト４０２のある区間の最後の要素は、対応する第１のリスト４０１の区間の最後の要素と同じ値が第２のリスト４０２に存在する場合には、その値を有する要素となるように選択される。同じ値が存在しない場合には、第２のリスト４０２の区間の最後の要素は、対応する第１のリスト４０１の区間の最後の要素の値が第２のリスト４０２の区間の最後の要素よりも大きく、第２のリスト４０２の次の区間の最初の要素よりも小さくなるように選択される。このようにして決定された区間分割の例が図５Ｂに示されている。この区間分割の例では、ＣＰＵ−０には１０個の要素、ＣＰＵ−１には９個の要素、ＣＰＵ−２には１０個の要素、ＣＰＵ−３には１４個の要素が割り当てられている。勿論、同じ値が存在しない場合に、第２のリスト４０２の区間の最後の要素は、対応する第１のリスト４０１の次の区間の最初の要素の値が第２のリスト４０２の区間の最後の要素よりも大きく、第２のリスト４０２の次の区間の最初の要素より以下になるように選択してもよい。このような基準で境界の要素の値を決定すると、図６Ａに示されるような区間分割が行われる。【００７０】
本実施の形態による並列マージ処理は、各プロセッサの処理量ができる限り均等になるように各プロセッサに割り当てられる要素の個数の合計を考慮する。そのため、並列マージ処理は、複数の区間のそれぞれに含まれる第１のリスト４０１の要素の個数と第２のリスト４０２の要素の個数の合計の差が所定の幅に収まるように区間の境界を調整する。たとえば、図５Ｂの区間分割では、ＣＰＵ−１に割り当てられる要素の個数の合計は９個であり、ＣＰＵ−３に割り当てられる要素の個数の合計は１４であり、合計の差が５個である。これに対して、第１のリスト４０１の境界を調整することにより、たとえば、図６Ａに示されるように、各プロセッサに割り当てられる要素の個数の合計の差を２個以下に抑えることができる。並列マージ処理における区間分割方法の詳細については後述する。【００７１】
次に、複数台のプロセッサのそれぞれが、自プロセッサに割り当てられた第１のリスト４０１の要素及び第２のリスト４０２の要素を先頭から順番に比較し、第１のリスト４０１の特定の要素よりも値が小さい第２のリスト４０２の要素の個数の合計をカウントし、同様に第２のリストの特定の要素よりも値が小さい第１のリスト４０１の要素の個数の合計をカウントする。このような要素の個数は、第１のリスト４０１の特定の要素とこの特定の要素の直前の要素との間に収まる値（特定の要素が先頭の要素である場合には、この先頭の要素の値よりも小さい値）を有する第２のリスト４０２の要素の個数をカウントし、カウントされた個数を累計数化することにより得られ、第２のリスト４０２についても同様に得られる。次に、第１のリスト４０１の特定の要素に対応する累計数化された値に、その特定の要素の第１のリスト４０１内での順位（本例では、０から始まる）を加算することにより、その特定の要素の区間内での順位（第１のリスト４０１と第２のリスト４０２を併せた要素の中での順位）が算出され、第２のリスト４０２の特定の要素についても同様に算出される。【００７２】
図７Ａ〜Ｄは、図５Ａ、Ｂ、図６Ａ、Ｂの区間分割の例に基づいて、ＣＰＵ−０が区間内の要素に順位を付ける処理の説明図である。図７Ａには上記の要素の個数のカウント値がＣｏｕｎｔ−１及びＣｏｕｎｔ−２として示されている。図７Ｂにはカウントされた個数を累計数化した値がＡｇｇｒ−１及びＡｇｇｒ−２として示されている。図７Ｃには各要素の区間内での順位がＡｇｇｒ−１及びＡｇｇｒ−２として示されている。図７ＤにはＣＰＵ−０に割り当てられた区間の範囲内で第１のリストと第２のリストを併合して得られた第３のリスト（ＬＩＳＴ−３）が示されている。【００７３】
各プロセッサは、区間内での順位付けと同時に、自プロセッサに割り当てられた区間に含まれる要素のユニークな値の個数をカウントする。この個数は、区間内で併合されたリストの最大順位＋１（本例では、順位は０から始まっている）に一致する。或いは、このユニークな値の個数は、図７Ａにおいて要素の個数をカウントする際に、新しい値が出現したときにカウントアップすることによっても得られる。【００７４】
ＣＰＵ−１、ＣＰＵ−２及びＣＰＵ−３は、図５Ａ、Ｂ、図６Ａ、Ｂおよび図７Ａ〜Ｄを参照して説明したＣＰＵ−０と同様に区間分割と順位付けを実行する。このとき、ＣＰＵ−０からＣＰＵ−３は並列に動作する。図８Ａ〜Ｄは、各プロセッサが算出した区間内の要素の順位とユニークな値の個数を表す図である。【００７５】
複数台のプロセッサのそれぞれに割り当てられた区間内の要素の順位とユニークな値の個数が決定されると、複数台のプロセッサのそれぞれは、所定の順序に関して自プロセッサに割り当てられた区間よりも前の区間に含まれる要素のユニークな値の個数の合計を、自プロセッサに割り当てられた第１のリスト４０１の要素及び第２のリストの要素に付けられた順位に加算する。これにより、第１のリスト４０１に格納された値及び第２のリスト４０２に格納された値のすべてに所定の順序で順位付けされる。図９Ａ〜Ｄはこのようにして得られた各ＣＰＵに割り当てられた要素の併合されたリスト内での順位を表す図である。この結果は図４Ｂに示されたマージ後の第３のリスト４０３と同じであることがわかる。【００７６】
［区間分割］
次に、複数台のプロセッサのいずれか１台のプロセッサによって実行される本発明の実施の形態にかかる区間分割処理を説明する。この区間分割処理は、２組の昇順リスト（要素の値の大きさの順番に要素を並べた配列）であるＡｒｒａｙ１及びＡｒｒａｙ２を、分割される要素の数のバランスを考慮して、Ｎ個の区間に分割する。Ａｒｒａｙ１のサイズ（すなわち、要素の個数）はＳ１、Ａｒｒａｙ２のサイズはＳ２であり、Ａｒｒａｙ１のｉ番目（ｉ＝０，１，２，・・・，Ｓ１−１）の要素をＡｒｒａｙ１［ｉ］のように表し、Ａｒｒａｙ２のｊ番目（ｊ＝０，１，２，・・・，Ｓ２−１）の要素をＡｒｒａｙ２［ｊ］のように表す。また、区間ｋ＝０，１，２，・・・，Ｎ−１に割り当てられるＡｒｒａｙ１の要素の個数をｎ１［ｋ］、Ａｒｒａｙ２の要素の個数をｎ２［ｋ］のように表す。尚、以下の説明中、割り算等の演算は整数演算である。【００７７】
本区間分割処理は、すべてのｋについて、
割り当て個数＝ｎ１［ｋ］＋ｎ２［ｋ］
が
目標値＝（Ｓ１＋Ｓ２）／Ｎ
にほぼ一致するようにリストを分割することを目標とする。そのため、割り当て個数と目標値との差が所定のマージンＭの範囲内に収まるように、すなわち、
条件：｜（ｎ１［ｋ］＋ｎ２［ｋ］）−（Ｓ１＋Ｓ２）／Ｎ｜＜Ｍ
が成り立つようにリストを分割する。【００７８】
このとき、分割の境界の値の拘束条件として、すなわち、異なるリストに同じ値が含まれる場合には、その値が同じ区間に分割されるための拘束条件として、
拘束条件１：Ａｒｒａｙ１［ｎ１［ｋ］−１］＝Ａｒｒａｙ２［ｎ２［ｋ］−１］
又は、
拘束条件２：Ａｒｒａｙ１［ｎ１［ｋ］−１］＞Ａｒｒａｙ２［ｎ２［ｋ］−１］
かつ
Ａｒｒａｙ１［ｎ１［ｋ］−１］＜Ａｒｒａｙ２［ｎ２［ｋ］］
を設定する。【００７９】
上記の条件が満たされない場合には、分割の境界を調整するため、Ａｒｒａｙ１へ分割される要素の個数ｎ１［ｋ］を所定の量ｄｉｆｆだけ変化させる。【００８０】
図１０および図１１は、本発明の実施の形態にかかる区間分割処理を説明するフローチャートである。共有メモリ型マルチプロセッサシステムのある１台のプロセッサは以下の手順で要素数がバランスする区間分割を実行する。【００８１】
ステップ１００１：区間の初期値ｋ＝０とマージンＭを設定する。【００８２】
ステップ１００２：Ａｒｒａｙ１の区間ｋの候補要素数ｎ１［ｋ］をｎ１［ｋ］＝Ｓ１／ｎとして設定する。また、Ａｒｒａｙ１の区間ｋの要素数の調整量ｄｉｆｆをｄｉｆｆ＝ｎ１［ｋ］／２として設定する。【００８３】
ステップ１００３：Ａｒｒａｙ１の区間ｋの終わりであるＡｒｒａｙ１［ｎ１［ｋ］−１］と一致する要素Ａｒｒａｙ２［ｎ２［ｋ］−１］］をバイセクション法によって探索する。【００８４】
ステップ１００４：一致する要素Ａｒｒａｙ２［ｎ２［ｋ］−１］］が存在しない場合、ステップ１００５へ進み、存在する場合にはステップ１００６へ進む。【００８５】
ステップ１００５：Ａｒｒａｙ１［ｎ１［ｋ］−１］＞Ａｒｒａｙ２［ｎ２［ｋ］−１］となる最大のＡｒｒａｙ２［ｎ２［ｋ］−１］を検出し、ステップ１００６へ進む。【００８６】
ステップ１００６：Ａｒｒａｙ２の区間ｋの候補要素数に、ステップ１００４又はステップ１００５で見つけられたｎ２［ｋ］を設定する。【００８７】
ステップ１００７：候補要素数の合計と目標値との差が所定のマージンＭの範囲内に収まるかどうかの条件、すなわち、｜（ｎ１［ｋ］＋ｎ２［ｋ］）−（Ｓ１＋Ｓ２）／Ｎ｜＜Ｍを調べる。条件が充たされない場合、ステップ１００８へ進む。条件が満たされる場合、ステップ１０１３へ進む。【００８８】
ステップ１００８：調整の向きを決めるため、（ｎ１［ｋ］＋ｎ２［ｋ］）−（Ｓ１＋Ｓ２）／Ｎ＞０であるかどうかを判定し、判定結果が肯定的であるならばステップ１００９へ進み、否定的であるならばステップ１０１１へ進む。【００８９】
ステップ１００９：調整量ｄｉｆｆが０であるかどうかを判定し、０であるならば、ステップ１０１３へ進み、０でないならば、ステップ１０１０へ進む。【００９０】
ステップ１０１０：調整量ｄｉｆｆを用いて、Ａｒｒａｙ１の区間ｋの要素の個数を
ｎ１［ｋ］＝ｎ１［ｋ］−ｄｉｆｆ
に従って変更し、次に、調整量ｄｉｆｆを
ｄｉｆｆ＝ｄｉｆｆ／２
に従って変更し、ステップ１００３へ戻る。【００９１】
ステップ１０１１：調整量ｄｉｆｆが０であるかどうかを判定し、０であるならば、ステップ１０１３へ進み、０でないならば、ステップ１０１２へ進む。【００９２】
ステップ１０１２：調整量ｄｉｆｆを用いて、Ａｒｒａｙ１の区間ｋの要素の個数を
ｎ１［ｋ］＝ｎ１［ｋ］＋ｄｉｆｆ
に従って変更し、次に、調整量ｄｉｆｆを
ｄｉｆｆ＝ｄｉｆｆ／２
に従って変更し、ステップ１００３へ戻る。【００９３】
ステップ１０１３：現在のｎ１［ｋ］とｎ２［ｋ］を区間ｋに割り当てられた要素の個数として確定する。【００９４】
ステップ１０１４：次の区間が存在するかどうか（ｋ＜Ｎ）を判定し、存在するならば、ステップ１０１５へ進み、存在しないならば、区間分割処理を終了する。【００９５】
ステップ１０１５：区間ｋをｋ＝ｋ＋１によって更新し、ステップ１００２へ戻る。【００９６】
好ましい実施例では、上記の区間分割処理は簡略化される。たとえば、最初の区間の割り当てが終了した時点で、Ａｒｒａｙ１のｎ１個の要素がその区間に割り当てられ、Ａｒｒａｙ２のｎ２個の要素がその区間に割り当てられたとすると、次の区間の割り当ては、区間の数をＮ＝Ｎ−１とし、Ａｒｒａｙ１の先頭をＡｒｒａｙ１［０］からＡｒｒａｙ１［ｎ１］へ移動し（すなわち、Ａｒｒａｙ１［０］からＡｒｒａｙ１［ｎ１−１］までの要素を削除し）、Ａｒｒａｙ２の先頭をＡｒｒａｙ２［０］からＡｒｒａｙ２［ｎ２］へ移動（すなわち、Ａｒｒａｙ２［０］からＡｒｒａｙ１［ｎ２−１］までの要素を削除）することにより、１回目の分割と全く同じ処理を２回目以降の分割に適用することができる。【００９７】
具体的には、上位の区間分割処理において、ｎ１［ｋ］をｎ１で置き換え、ｎ２［ｋ］をｎ２で置き換え、１区間の分割が終了した時点で、
Ｎ←Ｎ−１
Ｓ１←Ｓ１−ｎ１
Ｓ２←Ｓ２−ｎ２
とし、リスト中の割り当てられた要素を削除して、すなわち、
Ａｒｒａｙ１［０］←Ａｒｒａｙ１［ｎ１］
Ａｒｒａｙ１［１］←Ａｒｒａｙ１［ｎ１＋１］
・・・
Ａｒｒａｙ２［０］←Ａｒｒａｙ２［ｎ２］
Ａｒｒａｙ２［１］←Ａｒｒａｙ２［ｎ２＋１］
・・・・
のように配列の添え字を置き換えることにより、すべての区間に対して全く同じ処理ステップを適用することが可能になる。【００９８】
［並列マージ処理の実施例］
次に、図４Ａに示された二つの昇順リストを４台のプロセッサを使用してマージする一実施例を説明する。以下の説明では、これらの二つの昇順リストは、コンピュータシステム１０のメモリ１４にあることを前提としているが、これらの昇順リストは外部からインタフェース２２を介して、たとえば、通信によって入力されることもある。【００９９】
図１２Ａ、Ｂおよび図１３Ａ、Ｂは、それぞれ、本発明による並列処理マージ処理の一実施例の第１ステップから第４ステップの説明図である。第１ステップにおいて、コンピュータシステム１０のいずれか１台以上のプロセッサが二つの昇順リストＬＩＳＴ−１及びＬＩＳＴ−２をメモリ１４上に準備する（図１２Ａ）。ここで、ＬＩＳＴ−１［０］はＬＩＳＴ−１の１番目の要素である「１００」を表し、ＬＩＳＴ−１［１］はＬＩＳＴ−１の２番目の要素である「１１０」を表し、以下同様である。また、ＬＩＳＴ−２［０］はＬＩＳＴ−２の１番目の要素である「８０」を表し、ＬＩＳＴ−２［１］はＬＩＳＴ−２の２番目の要素である「９０」を表し、以下同様である。【０１００】
第２ステップにおいて、いずれか１台のプロセッサ（以下では、たとえば、ＣＰＵ−０とする）は、メモリ上の二つの昇順リストＬＩＳＴ−１及びＬＩＳＴ−２にそれぞれカウント配列Ｃｏｕｎｔ−１及びＣｏｕｎｔ−２を付加し、カウント配列の要素を０で初期化する（図１２Ｂ）。カウント配列の要素は、リスト配列と同様にＣｏｕｎｔ−１［０］、Ｃｏｕｎｔ−１［１］のように表される。【０１０１】
第３ステップにおいて、ＣＰＵ−０は、一方のリストだけに存在する値の区間を特定し、処理範囲から除外する。図１３Ａに示されるように、ＬＩＳＴ−１の要素の最小値は１００であり、最大値は４５０である。また、ＬＩＳＴ−２の要素の最小値は８０であり、最大値は５５５である。したがって、ＬＩＳＴ−１の最小値よりも小さい値はＬＩＳＴ−２だけに存在し、ＬＩＳＴ−１の最大値よりも大きい値はＬＩＳＴ−２だけに存在する。そこで、これらの値の範囲、すなわち、ＬＩＳＴ−２の要素８０、９０と、要素４６０、４７０、４８０、５００、５５０、５５５を処理範囲から除外する。この第３ステップは省略可能である。【０１０２】
第４ステップにおいて、ＣＰＵ−０は、ＬＩＳＴ−１の中で第３ステップにおいて除去されなかった範囲、すなわち、要素１００から要素４５０までの２０個の要素をプロセッサ台数に一致する４区間に分割し、ＣＰＵ−０からＣＰＵ−３の４台のプロセッサへ割り当てる。図１３Ｂの左側に示されるように、ＣＰＵ−０にはＬＩＳＴ−１［０］からＬＩＳＴ−１［４］の５個の要素が割り当てられ、ＣＰＵ−１にはＬＩＳＴ−１［５］からＬＩＳＴ−１［９］の５個の要素が割り当てられ、同様にＣＰＵ−２及びＣＰＵ３にも５個ずつの要素が割り当てられる。【０１０３】
次に、各ＣＰＵに割り当てられたＬＩＳＴ−１の区間に対応するＬＩＳＴ−２の範囲を定め、各ＣＰＵへ割り当てる。本実施例では、第３ステップにおいて、ＬＩＳＴ−２［０］からＬＩＳＴ−２［１］とＬＩＳＴ−２［１７］からＬＩＳＴ−２［２２］は除外されているので、ＬＩＳＴ−２［２］からＬＩＳＴ−２［１６］までの１５個の要素をＣＰＵに割り当てる。ＣＰＵ−０への割り当てはＬＩＳＴ−２［２］から順番に開始される。ＬＩＳＴ−２からＣＰＵ−０へ割り当てられる区間とＣＰＵ−１へ割り当てられる区間の境界は、ＬＩＳＴ−１からＣＰＵ−１へ割り当てられる最初の要素の値とＬＩＳＴ−２からＣＰＵ−１へ割り当てられる最初の要素の値が一致するか、又は、ＬＩＳＴ−１からＣＰＵ−１へ割り当てられる最初の要素の値がＬＩＳＴ−２からＣＰＵ−０へ割り当てられる最後の要素の値よりも大きく、ＬＩＳＴ−２からＣＰＵ−１へ割り当てられる最初の要素の値よりも小さくなるように定められる。このようにして定められた境界が、図１３Ｂの右側に示されている。【０１０４】
本実施例では、ＬＩＳＴ−２から各ＣＰＵへ割り当てられた要素の個数は、ＣＰＵ−０へ４個、ＣＰＵ−１へ４個、ＣＰＵ−２へ４個、ＣＰＵ−３へ３個である。その結果、ＬＩＳＴ−１とＬＩＳＴ−２を併せて、ＣＰＵ−０、ＣＰＵ−１、ＣＰＵ−２及びＣＰＵ−３へそれぞれ９個、９個、９個及び８個の要素が割り当てられているので、ＣＰＵの処理量はほぼ揃っていると認められる。ＣＰＵの処理量にバラツキがある場合には、上記の区間分割方法を適用すればよい。【０１０５】
第５ステップでは、各ＣＰＵは、自プロセッサに割り当てられたＬＩＳＴ−１とＬＩＳＴ−２の要素を先頭から順に比較し、一方のリストの要素間に位置付けられるもう一方のリストの要素の個数をカウントし、同時に、両方のリストからの要素のユニークな値の個数をカウントする。図１４Ａ〜Ｆは、一例として、ＣＰＵ−０において実行される第５ステップの説明図である。図１４Ａ〜Ｆにおいて、直線的な矢印は現在の比較位置を表し、曲線的な矢印は現在の比較位置の移動を表す。【０１０６】
図１４Ａを参照すると、ＣＰＵ−０は、ＬＩＳＴ−１［０］とＬＩＳＴ−２［２］を比較する。両方の値が同一であると判定されるので、ＣＰＵ−１は、ＬＩＳＴ−１側とＬＩＳＴ−２側のそれぞれの現在の比較位置を一つずつ後へ移動し、同時に、ユニークな値（値１００に相当）の個数を０から１へインクリメントする。【０１０７】
図１４Ｂを参照すると、ＣＰＵ−０は、ＬＩＳＴ−１［１］とＬＩＳＴ−２［３］を比較すると、ＬＩＳＴ−１［１］＝１１０＜ＬＩＳＴ−２［３］＝１２０であるので、Ｃｏｕｎｔ−２［３］をインクリメントし、ＬＩＳＴ−１側の現在の比較位置を一つ後へ移動し、ユニークな値（値１１０に相当）の個数をインクリメントする。【０１０８】
図１４Ｃを参照すると、ＣＰＵ−０は、ＬＩＳＴ−１［２］とＬＩＳＴ−２［３］を比較し、ＬＩＳＴ−１［２］＝ＬＩＳＴ−２［３］＝１２０であり、両方の値が同一であると判定されるので、ＬＩＳＴ−１側とＬＩＳＴ−２側のそれぞれの現在の比較位置を一つずつ後へ移動し、同時に、ユニークな値（値１２０に相当）の個数をインクリメントする。【０１０９】
図１４Ｄを参照すると、ＣＰＵ−０は、ＬＩＳＴ−１［３］とＬＩＳＴ−２［４］を比較すると、ＬＩＳＴ−１［３］＝１６０＜ＬＩＳＴ−２［４］＝１８０であるので、Ｃｏｕｎｔ−２［４］をインクリメントし、ＬＩＳＴ−１側の現在の比較位置を一つ後へ移動し、ユニークな値（値１６０に相当）の個数をインクリメントする。【０１１０】
図１４Ｅを参照すると、ＣＰＵ−０は、ＬＩＳＴ−１［４］とＬＩＳＴ−２［４］を比較し、ＬＩＳＴ−１［４］＝ＬＩＳＴ−２［４］＝１８０であり、両方の値が同一であると判定されるので、ＬＩＳＴ−１側とＬＩＳＴ−２側のそれぞれの現在の比較位置を一つずつ後へ移動し、同時に、ユニークな値（値１８０に相当）の個数をインクリメントする。【０１１１】
図１４Ｆを参照すると、ＣＰＵ−０は、自プロセッサに割り当てられたＬＩＳＴ−１の要素の終わりに到達しているので、ＬＩＳＴ−２側の現在の比較位置を一つ後へ移動し、ユニークな値（値１９０に相当）の個数をインクリメントする。この段階で、自プロセッサに割り当てられたＬＩＳＴ−２の要素の終わりに到達しているので、ＣＰＵ−０は自プロセッサに割り当てられた区間内のカウント処理を終了する。【０１１２】
ＣＰＵ−１、ＣＰＵ−２及びＣＰＵ−３はＣＰＵ−０と同様に、自プロセッサに割り当てられたＬＩＳＴ−１とＬＩＳＴ−２の要素を先頭から順に比較し、一方のリストの要素間に位置付けられるもう一方のリストの要素の個数をカウントし、同時に、両方のリストからの要素のユニークな値の個数をカウントする。図１５Ａ〜Ｆはこのようにして得られたカウント結果を表す図である。図１５Ａおよび図１５Ｆは第３ステップで除外された区間についてのユニークな値の個数を示している。この個数は、たとえば、ＣＰＵ−０によって設定される。【０１１３】
次に、第６ステップにおいて、各ＣＰＵは、第５ステップにおいてカウントした一方のリストの要素間に位置付けられるもう一方のリストの要素の個数を累計数化する。図１６Ａ〜Ｃおよび図１７Ａ〜Ｃはこの累計数化を説明する図である。図１６Ｂに示されるように、ＣＰＵ−０は、自プロセッサに割り当てられた配列Ｃｏｕｎｔ−２の要素を累計数化する。ＣＰＵ−０に割り当てられた配列Ｃｏｕｎｔ−１は全ての要素が０であるため、累計数化によって要素の値は変化しない。説明の便宜上、累計数化されたカウントは、配列Ａｇｇｒ−１及び配列Ａｇｇｒ−２のように表す。この累計数化の計算は、次式のように表すことができる。
Ａｇｇｒ−２［２］＝Ｃｏｕｎｔ−２［２］＝０
Ａｇｇｒ−２［３］＝Ｃｏｕｎｔ−２［２］＋Ｃｏｕｎｔ−２［３］＝０＋１＝１
Ａｇｇｒ−２［４］＝Ｃｏｕｎｔ−２［３］＋Ｃｏｕｎｔ−２［４］＝１＋１＝２
Ａｇｇｒ−２［５］＝Ｃｏｕｎｔ−２［４］＋Ｃｏｕｎｔ−２［５］＝２＋０＝２
ＣＰＵ−１、ＣＰＵ−２及びＣＰＵ−３は、図１６Ｃ、図１７Ａ及びＢに示されるように、ＣＰＵ−１と同様にＣｏｕｎｔ配列の累計数化を行う。第３ステップで除外された区間はＣｏｕｎｔ配列の要素が０のままであるため、累計数化は不要である。【０１１４】
次に、第７ステップにおいて、各ＣＰＵは、自プロセッサに割り当てられたＬＩＳＴ−１の要素及びＬＩＳＴ−２の要素の順位付けを行う。順位付けは、原理的には、区間内の順位付けと、全区間に亘る順位付けの２段階に分離できる。しかし、どちらの順位付けも加算演算によって実現されるので、実際的には、両方の順位付けは同時に実行される。図１８Ａ〜Ｃおよび図１９Ａ〜Ｃはこの順位付けを説明する図である。【０１１５】
あるＣＰＵに割り当てられた一方のリストの特定の要素の区間内での順位は、その特定の要素について計算された累計数に、割り当てられた区間内におけるその一方のリスト中でのその特定の要素の順位（順位は０から始まる）を加算することにより得られる。たとえば、図１８Ｂに示されたＣＰＵ−０の例では、ＬＩＳＴ−２［３］の区間内での順位は、Ａｇｇｒ−２［３］に、ＬＩＳＴ−２［３］の区間内での順位、すなわち、１（ＬＩＳＴ−２［２］が順位０）を加算することにより、２であることがわかる。ＣＰＵ−０に割り当てられた区間内で、ＬＩＳＴ−２［３］は、ＬＩＳＴ−１［０］＝ＬＩＳＴ−２［２］＝１００と、ＬＩＳＴ−１［１］＝１１０の次の順位であるので、その順位は確かに２である。【０１１６】
全区間での順位を計算するためには、この区間内の順位に、その区間よりも前の区間のユニークな値の個数の合計を加算すればよい。図１８Ｂに示されたＣＰＵ−０の例では、ＣＰＵ−０に割り当てられた区間よりも前に、第３ステップで除外された区間（図１８Ａ）が存在するので、この区間のユニークな値の個数＝２を、区間内の順位に加算すればよい。図１８Ｃに示されたＣＰＵ−１の例では、第３ステップで除外された区間内のユニークな値の個数＝２とＣＰＵ−０に割り当てられた区間内のユニークな値の個数＝６の合計値である８が、ＣＰＵ−１に割り当てられた区間内の順位に加算される。図１９Ｂを参照すると、ＬＩＳＴ−１［１５］＝３９０の順位はＡｇｇｒ−１［１５］＝２３であり、ＬＩＳＴ−２［１４］＝４００の順位はＡｇｇｒ−２［１４］＝２４であることがわかる。図２０には上記の第７ステップ実行後の要素の順位が表されている。【０１１７】
以上の処理によって、ＬＩＳＴ−１の全要素とＬＩＳＴ−２の全要素には両方のリストに共通の一連の順位が付けられているので、ＬＩＳＴ−１とＬＩＳＴ−２のマージは実質的に終了している。後の処理のために、ＬＩＳＴ−１とＬＩＳＴ−２を実際に併合したリストＬＩＳＴ−３をメモリ上に保持する必要がある場合には、（１）簡便法又は（２）高効率法によってリストを作成することができる。【０１１８】
図２１〜図２３は、本発明による並列マージ処理の一実施例における併合リスト作成処理（簡便法）の説明図である。配列Ａｇｇｒ−１、ＬＩＳＴ−１、ＬＩＳＴ−２及びＡｇｇｒ−２は、図２０に示された配列と同じである。ＬＩＳＴ−３はＬＩＳＴ−１とＬＩＳＴ−２を実際に併合した配列である。この併合リスト作成処理では、各ＣＰＵが自プロセッサに割り当てられたＬＩＳＴ−１の区間及びＬＩＳＴ−２の区間についてＬＩＳＴ−３の対応する要素を設定する。本例では、第３ステップで除外された区間のうち、ＬＩＳＴ−２［０］及びＬＩＳＴ−２［１］はＣＰＵ−０へ割り当て、ＬＩＳＴ−２［１７］乃至ＬＩＳＴ−２［２２］はＣＰＵ−３へ割り当て、その後の処理を実行する。【０１１９】
第１ステップでは、図２１に示されるように、ＣＰＵ−０は、最初に、順位Ａｇｇｒ−１［０］＝２が付与された要素ＬＩＳＴ−１［０］＝１００をＬＩＳＴ−３［２］へ転送し、順位Ａｇｇｒ−１［１］＝３が付与された要素ＬＩＳＴ−１［１］＝１１０をＬＩＳＴ−３［３］へ転送し、以下同様である。ＣＰＵ−２、ＣＰＵ−３及びＣＰＵ−４もＣＰＵ−１と同時に自プロセッサに割り当てられたＬＩＳＴ−１の要素をＬＩＳＴ−３へ転送する。【０１２０】
第２ステップでは、図２２に示されるように、ＣＰＵ−０は、最初に、順位Ａｇｇｒ−２［０］＝０が付与されたＬＩＳＴ−２［０］＝８０をＬＩＳＴ−３［０］へ転送し、次に、順位Ａｇｇｒ−２［１］＝１が付与されたＬＩＳＴ−２［１］＝９０をＬＩＳＴ−３［１］へ転送し、以下同様である。ＣＰＵ−２、ＣＰＵ−３及びＣＰＵ−４もＣＰＵ−１と同時に自プロセッサに割り当てられたＬＩＳＴ−２の要素をＬＩＳＴ−３へ転送する。【０１２１】
このような転送処理により、図２３に示されたＬＩＳＴ−３の完成型が得られる。但し、簡便法では、ＬＩＳＴ−１とＬＩＳＴ−２に同じ値が存在する場合に、その値はＬＩＳＴ−１とＬＩＳＴ−２の両方からＬＩＳＴ−３へ転送されるので、ＬＩＳＴ−１とＬＩＳＴ−２の重複が大きい場合に効率の低下が起こる。そこで、高効率法では、図１４Ａ〜Ｆに示された並列マージ処理の第５ステップにおいて、ＬＩＳＴ−１の要素とＬＩＳＴ−２の要素を比較する際に、ＬＩＳＴ−２に含まれる要素のうち、ＬＩＳＴ−２に存在し、ＬＩＳＴ−１に存在しない要素にタグを付ける。そして、図２２に示された併合リスト作成処理の第２ステップにおいて、ＬＩＳＴ−２の要素の中でタグが付けられている要素だけをＬＩＳＴ−３へ転送する。これにより、重複した転送が回避されるので、効率が高くなる。【０１２２】
［並列マッチング処理の実施例］
最後に、本発明による並列マッチング処理の実施例を説明する。マッチング処理とは、データＡとデータＢの二つのデータが存在する場合に、相手側のデータに同じ値が存在するかどうかに応じて、自分側のデータ（すなわち、元集合）から一致する相手側が存在するマッチ集合と一致する相手側が存在しないアンマッチ集合とを作成することを意味する。以下の実施例の説明では、データは上記の情報ブロックに基づくデータ管理機構に適合した表形式データである。また、データＡ側とデータＢ側とでは同じ処理が行われるので、一方のデータ側だけについて説明する。データＡ側の処理とデータＢ側の処理は、十分の台数のプロセッサが存在する場合には並列に実行してもよいが、データＡ側の処理終了後にデータＢ側の処理を実行するような形で逐次的に実行してもよい。【０１２３】
図２４Ａ、Ｂは、二つの表形式データ（テーブルＡ及びテーブルＢ）のマッチング処理の説明図である。「性別（Ｓｅｘ）」及び「年齢（Ａｇｅ）」を項目とするテーブルＡ及びテーブルＢは、最初に、「性別」＝女性であるレコードに絞り込まれる。この絞り込まれたテーブルに関して、自テーブルのあるレコードの項目「年齢」の項目値に一致する「年齢」の項目値が相手側テーブルに存在する場合、自テーブルのそのレコードはマッチ集合に分類され、相手側テーブルに同じ項目値が存在しない場合、そのレコードはアンマッチ集合に分類される。図２４Ａ、Ｂを参照すると、たとえば、テーブルＡのレコード０の「年齢」の値１８は、テーブルＢのレコード４の「年齢」の値と一致するので、テーブルＡのレコード０はマッチ集合に分類され、テーブルＡのレコード１の「年齢」の値２４は、テーブルＢの「年齢」の項目値の中に存在しないので、テーブルＡのレコード１はアンマッチ集合に分類される。【０１２４】
図２５Ａ、Ｂは、図２４Ａ、Ｂに示された例を上記情報ブロックに基づくデータ管理機構による表形式データとして表現した例である。図２５ＡのテーブルＡの例では、初期的なレコード番号配列OrdSetから女性のみの絞り込み検索によってレコード番号配列OrdSet'が生成され、次に、項目「年齢」に関するマッチング処理により、レコード番号配列OrdSet'から一致レコード番号配列OrdSet''と不一致レコード番号配列OrdSet'''が生成される。本発明の実施形態では、情報ブロックに基づくデータ管理機構が使用されるので、項目「性別」及び項目「年齢」の情報ブロックを保持したまま、レコード番号配列が変換されている。たとえば、図２５Ａに示されたレコード番号配列OrdSet''の２番目の要素は、レコード番号５を表し、このレコード番号５に対応するレコードの項目値はそれぞれの情報ブロックから獲得される。レコード５の「性別」の値は、「性別」の値番号配列VNoの要素VNo[5]の値１を取り出し、この値を用いて「性別」の値リストVLからVL[1]を取り出すことによりWomanであることがわかる。同様に、レコード５の「年齢」の値は２０であることがわかる。これは図２４Ａ、Ｂを用いて説明した例と一致している。【０１２５】
以下では、図２５Ａ、Ｂに示された絞り込み検索後のレコード番号配列OrdSet'を元集合として並列マッチング処理の動作を説明する。【０１２６】
第１の表形式データ及び第２の表形式データは共有メモリ型プロセッサシステムのメモリに記憶され、複数台のプロセッサがメモリに記憶された第１の表形式データ及び第２の表形式データにアクセス可能である。第１の表形式データ（テーブルＡ）及び第２の表形式データ（テーブルＢ）は、それぞれのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列OrdSet、表形式データのレコードの所定の項目の項目値に対応する値番号がレコード番号に従って格納された値番号配列VNo、及び、表形式データの項目値が当該項目値に対応する値番号の順序に従って格納された値配列VLとしてメモリに記憶されている。本発明の実施の形態にかかる共有メモリ型マルチプロセッサシステムは、第１の表形式データのレコードを、第２の表形式データにそのレコードと同じ項目値を有するレコードが存在する一致レコードと、同じ項目値を有するレコードが存在しない不一致レコードとに分類する。【０１２７】
図２６Ａ、Ｂは本発明の実施の形態にかかる並列マッチング処理の一実施例の第１ステップから第３ステップの説明図である。尚、以下の説明では、主としてテーブルＡ側についてのみ説明を行うが、テーブルＢ側でも同様の処理がなされる。プロセッサの台数が多数である場合には、プロセッサをテーブルＡ側とテーブルＢ側に割り振ることにより、各ステップにおいてテーブルＡ側の処理とテーブルＢ側の処理を並列に実行することが可能である。或いは、テーブルＡ側とテーブルＢ側のそれぞれの処理に全てのプロセッサを使用するため、各ステップにおいて、テーブルＡ側の処理とテーブルＢ側の処理を順次行うことも可能である。【０１２８】
第１ステップでは、複数台のプロセッサのうちのいずれか１台のプロセッサ、たとえば、プロセッサＣＰＵ−０は、レコード番号配列OrdSet'を分割して複数台のプロセッサに割り当てる。また、値配列VLに設定されている値が実際に使用されているかどうかを示す有効フラグ配列Valid
Flagを作成し、初期化する。有効フラグ配列のサイズは値配列のサイズと同じである。【０１２９】
第２ステップでは、各プロセッサは、自プロセッサに割り当てられたレコード番号配列OrdSet'の要素iを順番に読み出し、読み出されたレコード番号iに対応した項目「年齢」の値番号VNo[i]を読み出し、有効フラグ配列Valid
Flagの中でその値番号に対応した要素のフラグをセットする（すなわち、Valid Flag[VNo[i]]=1）。各プロセッサが割り当てられたレコード番号配列の要素に対して、この処理を繰り返すことにより、有効フラグ配列が完成する。尚、有効フラグ配列Valid
Flagをビットマップとして、プロセッサごとに別々の有効フラグを作成し、その後、これらの有効フラグのビットＯＲ演算を実行しても同じ有効フラグ配列が完成する。【０１３０】
第３ステップでは、いずれか１台のプロセッサが有効フラグ配列Valid Flagの要素にフラグがセットされているかどうかを配列の先頭から順番にチェックし、もしフラグがセットされているならば、そのフラグがセットされた要素に対応した（すなわち、添え字が一致する）値配列VLの要素を有効値配列VL'の先頭から順に格納する。これにより、OrdSet'に含まれているレコードによって実際に使用されている項目「年齢」の値だけが有効値配列VL'に昇順に格納される。【０１３１】
図２６Ａを参照すると、レコード番号配列の先頭の要素OrdSet'[0]は０であるので、レコード０のVNoを読み出すと、値が１であるので、有効フラグのValid Flag[1]がセットされる。その他のすべてのレコード番号２、３、５、６、９について同様の処理を行うと、完成後Valid
Flagが得られる。この完成後Valid FlagはValid Flag[0]、Valid Flag[1]、Valid Flag[2]及びValid
Flag[4]がセットされているので、テーブルＡ側の有効値配列の要素は、VL[0]=16、VL[1]=18、VL[2]=20及びVL[4]=24の４個である。図２６Ｂに示されたテーブルＢ側でも同様の処理がなされ、有効値配列が得られる。【０１３２】
次に、テーブルＡ側の値配列VLとテーブルＢ側で作成された有効値配列VL'を比較することにより、テーブルＡ側の値配列VLの要素が、テーブルＢ側にも存在する要素とテーブルＢ側には存在しない要素に分類される。この処理は、テーブルＡ側の値配列VLを複数のプロセッサに分割して割り当てることによって並列に実行される。【０１３３】
図２７Ａ、Ｂは本発明の実施の形態にかかる並列マッチング処理の一実施例の第４ステップから第５ステップの説明図である。【０１３４】
第４ステップでは、複数台のプロセッサのうちのいずれか１台のプロセッサ、たとえば、プロセッサＣＰＵ−０は、テーブルＡ側の値配列VLを複数台のプロセッサの台数に応じて複数の区間に分割し、テーブルＡ側の値配列VLの分割された区間の境界の要素の値に応じて対応するテーブルＢ側の有効項目値配列VL'の区間を定め、複数の区間のそれぞれに含まれるテーブルＡの値配列VLの要素の個数とテーブルＢ側の有効値配列VL'の要素の個数の合計の差が所定の幅に収まるように区間の境界を調整することにより、テーブルＡ側の値配列VLの要素及びテーブルＢ側の有効値配列VL'の要素を所定の順序で複数台のプロセッサに割り当てる。このステップでは上記の区間分割処理が行われる。区間分割処理については既に詳細に説明したのでこれ以上説明しない。【０１３５】
第５ステップでは、複数台のプロセッサのそれぞれが、自プロセッサに割り当てられたテーブルＡ側の値配列VLの要素及びテーブルＢ側の有効値配列VL'の要素を比較し、自プロセッサに対応する区間の範囲内で自プロセッサに割り当てられたテーブルＡ側の値配列VLの要素の値と一致する値を有する要素が自プロセッサに割り当てられたテーブルＢ側の有効値配列VL'に存在する場合に、一致する値を有するテーブルＡ側の値配列VLの要素にマークを付ける。このマークは、一実施例では、存在フラグ配列Exist
Flagによって実現される。【０１３６】
図２７Ａを参照すると、テーブルＡ側の値配列VLの先頭の要素と一致する要素がテーブルＢ側の有効値配列VL'に存在しないので、対応する存在フラグ配列Exist Flagのフラグはセットされない。テーブルＡ側の値配列VLの次の要素１８は、その要素１８と一致する要素がテーブルＢ側の有効値配列VL'に存在するので、対応する存在フラグ配列Exist
Flagのフラグはセットされる。以下同様に、テーブルＡ側の値配列VLの全ての要素に対して、複数台のプロセッサが並列にこのマーキングを行う。テーブルＢ側についても同様である。【０１３７】
この存在フラグ配列は、テーブルＡ側の値配列VLの要素と一致する要素がテーブルＢ側に存在するかどうかを示す配列である。したがって、テーブルＡ側の各レコードについてそのレコードの項目「年齢」の値番号を読み出し、その値番号をインデックスとして存在フラグ配列のフラグの有無を判定することにより、当該レコードを一致レコード又は不一致レコードに分類することができる。【０１３８】
図２８はこのような本発明の実施の形態にかかる並列マッチング処理の一実施例の第６ステップから第７ステップの説明図である。【０１３９】
第６ステップでは、いずれかのプロセッサ、たとえば、ＣＰＵ−０は、第１ステップと同様に、テーブルＡ側のレコード番号配列OrdSet'を複数台のプロセッサの台数と同じ個数の複数の部分に分割し、複数の部分を複数台のプロセッサに割り当てる。【０１４０】
次に、第７ステップにおいて、複数台のプロセッサのそれぞれが、テーブルＡ側のレコード番号配列OrdSet'の割り当てられた部分から当該部分に格納されているレコード番号を読み出し、テーブルＡ側の値番号配列VNoから読み出されたレコード番号に対応する値番号を読み出し、読み出された項目値番号に対応する存在フラグ配列ExistFlagの要素にフラグがセットされているかどうかを判定し、フラグがセットされている場合、読み出されたレコード番号を一致レコードとして分類して一致レコード番号配列OrdSet''に格納し、フラグがセットされていない場合、読み出されたレコード番号を不一致レコードとして分類して不一致レコード番号配列OrdSet'''に格納する。【０１４１】
図２８を参照してより具体的に説明する。たとえば、レコード番号配列の先頭から２番目の要素OrdSet''[1]がＣＰＵ−０に割り当てられるならば、ＣＰＵ−０は、OrdSet''[1]=2を読み出す。ＣＰＵ−０は、次に、値番号配列VNoからVNo[OrdSet''[1]]=VNo[2]=4を読み出す。続いて、ＣＰＵ−０は、存在フラグ配列ExitFlagからExitFlag[VNo[OrdSet''[1]]]=ExitFlag[VNo[2]]=ExitFlag[4]=0を読み出す。これにより、ＣＰＵ−０は、テーブルＡ側のレコード番号２の項目「年齢」の値２４に一致する値がテーブルＢ側に存在しないと判定し、このレコード番号２を不一致レコード番号配列OrdSet'''に格納する。同様の処理が、テーブルＡ側のOrdSet'の全ての要素に対して複数台のプロセッサによって並列に適用され、テーブルＢ側のOrdSet'の全ての要素に対しても複数台のプロセッサによって並列に適用される。プロセッサの台数に余裕があるならば、テーブルＡ側の処理とテーブルＢ側の処理も並列に実行される。【０１４２】
前述したように、本発明の実施の形態においては、コンピュータシステム１０にレコードの所定の項目の項目値に応じてレコード順を並べ替えるプログラムを実行させる。より具体的には、本実施の形態においては、以下のように、プログラムは、各ＣＰＵに、上述した処理ステップを実行させ、或いは、上述した機能を実現させる。【０１４３】
本実施の形態において、コンピュータシステム１０には、ＯＳ（たとえば、リナックス（Ｌｉｎｕｘ：登録商標））が搭載される。初期的には、ＯＳの制御にしたがって、あるＣＰＵ（たとえば、ＣＰＵ１２−１）が、プログラムをメモリ（たとえば共有メモリ１４）にロードする。プログラムがメモリにロードされると、ＣＰＵ１２−１、１２−２、．．．、１２−ｐの各々が処理を実行すべき場合には、ＯＳの制御の下、各ＣＰＵに、それぞれ、所定の機能を実現させる。つまり、各ＣＰＵが、共有メモリ１４に記憶されたプログラム中の所定の処理ステップを読み出し、当該処理ステップを実行する。その一方、特定のＣＰＵが処理をすべき場合には、ＯＳの制御の下、当該特定のＣＰＵに、他の所定の機能を実現させる。つまり、特定のＣＰＵのみが、共有メモリ１４に記憶されたプログラム中の他の所定の処理ステップを読み出し、当該他の所定の処理ステップを実行する。なお、各ＣＰＵが実行するプログラムの格納場所は、上記共有メモリ１４に限定されず、各ＣＰＵに付随するそれぞれのローカルメモリ（図示せず）でもよい。【０１４４】
このように、本実施の形態においては、ＯＳの制御の下、プログラムは、各ＣＰＵに所定の機能を実現させるとともに、必要に応じて、特定のＣＰＵに、他の所定の機能を実現させることができる。【０１４５】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【図面の簡単な説明】
【０１４６】
【図１】図１、は本発明の実施の形態にかかるコンピュータシステムの概要図である。
【図２】図２は、データ管理機構を説明するための表形式データの一例を表す図である。
【図３】図３は、本発明の実施の形態にかかるデータ管理機構の説明図である。
【図４】図４Ａ、Ｂは、本発明の実施の形態にかかるマージ対象のデータ構造の説明図である。
【図５】図５Ａ、Ｂは、二つのリストの区間分割の種々の例を示す図である。
【図６】図６Ａ、Ｂは、二つのリストの区間分割の種々の例を示す図である。
【図７】図７Ａ〜Ｄは、図６Ｂの区間分割の例に基づく区間内の順位付けの説明図である。
【図８】図８Ａ〜Ｄは、図６Ｂの区間分割の例に基づいてＣＰＵ−０からＣＰＵ−３が算出した区間内の要素の順位とユニークな値の個数を表す図である。
【図９】図９Ａ〜Ｄは、図４Ａ、Ｂのデータ構造に本発明の実施の形態にかかる並列マージ処理を適用して得られた併合リスト内での要素の順位を表す図である。
【図１０】図１０は、本発明の実施の形態にかかる区間分割処理を説明するフローチャートである。
【図１１】図１１は、本発明の実施の形態にかかる区間分割処理を説明するフローチャートである。
【図１２】図１２Ａ、Ｂは、それぞれ、本発明による並列マージ処理の一実施例の第１ステップおよび第２ステップの説明図である。
【図１３】図１３Ａ、Ｂは、それぞれ、本発明による並列マージ処理の一実施例の第３ステップおよび第４ステップの説明図である。
【図１４】図１４Ａ〜Ｆは、本発明による並列マージ処理の一実施例の第５ステップの説明図である。
【図１５】図１５Ａ〜Ｆは、本発明による並列マージ処理の一実施例の第５ステップ実行後のカウント結果を表す図である。
【図１６】図１６Ａ〜Ｃは、本発明による並列マージ処理の一実施例の第６ステップの説明図である。
【図１７】図１７Ａ〜Ｃは、本発明による並列マージ処理の一実施例の第６ステップの説明図である。
【図１８】図１８Ａ〜Ｃは、本発明による並列マージ処理の一実施例の第７ステップの説明図である。
【図１９】図１９Ａ〜Ｃは、本発明による並列マージ処理の一実施例の第７ステップの説明図である。
【図２０】図２０は、本発明による並列マージ処理の一実施例の第７ステップ実行後の要素の順位を表す図である。
【図２１】図２１は、本発明による並列マージ処理の一実施例における併合リスト作成処理（簡便法）の説明図である。
【図２２】図２２は、本発明による並列マージ処理の一実施例における併合リスト作成処理（簡便法）の説明図である。
【図２３】図２３は、本発明による並列マージ処理の一実施例における併合リスト作成処理（簡便法）の説明図である。
【図２４】図２４Ａ、Ｂは、二つの表形式データのマッチング処理の概略図である。
【図２５】図２５Ａ、Ｂは、情報ブロックに基づくデータ管理機構に従って表現された二つの表形式データのマッチング処理の概略図である。
【図２６】図２６Ａ、Ｂは、本発明の実施の形態にかかる並列マッチング処理の一実施例の第１ステップから第３ステップの説明図である。
【図２７】図２７Ａ、Ｂは本発明の実施の形態にかかる並列マッチング処理の一実施例の第４ステップから第５ステップの説明図である。
【図２８】図２８は本発明の実施の形態にかかる並列マッチング処理の一実施例の第６ステップから第７ステップの説明図である。
【符号の説明】
【０１４７】
１０        コンピュータシステム
１２−１，１２−２，・・・，１２−ｐ        ＣＰＵ
１４        共有メモリ
１６        ＲＯＭ
１８        固定記憶装置
２０        ＣＤ−ＲＯＭドライバ
２２        Ｉ／Ｆ
２４        入力装置
２６        表示装置
【図１】
0004758429.tif 000002
【図２】
0004758429.tif 000003
【図３】
0004758429.tif 000004
【図４】
0004758429.tif 000005
【図５】
0004758429.tif 000006
【図６】
0004758429.tif 000007
【図７】
0004758429.tif 000008
【図８】
0004758429.tif 000009
【図９】
0004758429.tif 000010
【図１０】
0004758429.tif 000011
【図１１】
0004758429.tif 000012
【図１２】
0004758429.tif 000013
【図１３】
0004758429.tif 000014
【図１４】
0004758429.tif 000015
【図１５】
0004758429.tif 000016
【図１６】
0004758429.tif 000017
【図１７】
0004758429.tif 000018
【図１８】
0004758429.tif 000019
【図１９】
0004758429.tif 000020
【図２０】
0004758429.tif 000021
【図２１】
0004758429.tif 000022
【図２２】
0004758429.tif 000023
【図２３】
0004758429.tif 000024
【図２４】
0004758429.tif 000025
【図２５】
0004758429.tif 000026
【図２６】
0004758429.tif 000027
【図２７】
0004758429.tif 000028
【図２８】
0004758429.tif 000029