(57)【特許請求の範囲】
【請求項１】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
前記レコード番号配列をｎ１（ｎ１≦ｎ）個の部分に分割し、前記分割されたレコード番号配列のｎ１個の部分を前記ｎ台のプロセッサのうちのｎ１台のプロセッサにそれぞれ割り当てるステップと、
前記ｎ１台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントするステップと、
前記項目値番号の範囲をｎ２（ｎ２≦ｎ）個の範囲に分割し、前記分割された項目値番号のｎ２個の範囲を前記ｎ台のプロセッサのうちのｎ２台のプロセッサにそれぞれ割り当てるステップと、
前記ｎ２台のプロセッサのうちの各プロセッサによって、前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記ｎ１台のプロセッサによってカウントされた前記項目値番号のそれぞれの出現回数を累計数に変換するステップと、
前記ｎ１台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む情報処理方法。
【請求項２】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
を含み、
前記ソート処理が、
前記現在のレコード番号配列をｎ１（ｎ１≦ｎ）個の部分に分割し、前記分割された現在のレコード番号配列の部分を前記ｎ台のプロセッサのうちのｎ１台のプロセッサに割り当てるステップと、
前記ｎ１台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントするステップと、
前記項目値番号の現在の桁の値の範囲をｎ２（ｎ２≦ｎ）個の範囲に分割し、前記分割された項目値番号の桁の値のｎ２個の範囲を前記ｎ台のプロセッサのうちのｎ２台のプロセッサに割り当てるステップと、
前記ｎ２の複数台のプロセッサのうちの各プロセッサによって、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記ｎ１台のプロセッサによってカウントされた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
前記ｎ１台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む、
情報処理方法。
【請求項３】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
を含み、
前記ソート処理が、
前記現在のレコード番号配列を分割し、前記分割された現在のレコード番号配列の部分を前記複数台のプロセッサに割り当てるステップと、
各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントするステップと、
少なくとも１台のプロセッサによって、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
前記各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む、
情報処理方法。
【請求項４】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
前記レコード番号配列をｎ１（ｎ１≦ｎ）個の部分に分割し、前記分割されたレコード番号配列のｎ１個の部分を前記ｎ台のプロセッサのうちのｎ１台のプロセッサに割り当てるステップと、
前記ｎ１台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントするステップと、
前記項目値番号の範囲をｎ２（ｎ２≦ｎ）個の範囲に分割し、前記分割された項目値番号のｎ２個の範囲を前記ｎ台のプロセッサのうちのｎ２台のプロセッサに割り当てるステップと、
前記ｎ２台のプロセッサのうちの各プロセッサによって、前記ｎ２台のプロセッサに割り当てられた項目値番号に関して、（ｉ）前記ｎ１台のプロセッサのうちの各プロセッサによってカウントされた前記出現回数の和を算出し、算出された和を前記項目値番号の範囲の順番に前記ｎ２台のプロセッサ間で伝搬させ、（ｉｉ）前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順番に従って、前記出現回数を累計数に変換し、前記伝搬させられた和を前記累計数に加算することにより、前記ｎ１台のプロセッサのうちの各プロセッサに割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号毎に前記出現回数を累計数に変換するステップと、
前記ｎ１台のプロセッサのうちの各プロセッサによって、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号毎に得られた前記累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む、
情報処理方法。
【請求項５】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法であって、
少なくとも１台のプロセッサによって、前記項目値番号の範囲に応じて前記項目値番号の基数を設定することにより、前記項目値番号を上位の桁の下位の桁に分けるステップと、
少なくとも１台のプロセッサによって、前記レコード番号配列に含まれるレコード番号に関連付けられた前記項目値番号の上位の桁の値の出現回数をカウントし、前記項目値番号の上位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の上位の桁の値の累計数をポインタとして利用して前記レコード番号配列中のレコード番号を並べ換え、前記項目値番号の上位の桁の値の順序に従ってｎ１（≦ｎ）個に区分された中間的なレコード番号配列を生成するステップと、
少なくとも１台のプロセッサによって、前記中間的なレコード番号配列のｎ１個の区分をそれぞれ前記ｎ台のプロセッサのうちのｎ１台のプロセッサに割り当てるステップと、
前記区分ごとに割り当てられた各プロセッサによって、前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号に関連付けられた前記項目値番号の下位の桁の値の出現回数をカウントし、前記項目値番号の下位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の下位の桁の値の累計数をポインタとして利用して前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号をその関連付けられた前記項目値番号の下位の桁の値の順序に並べ換えるステップと、
を含む、
情報処理方法。
【請求項６】
共有メモリと前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサとを具備した共有メモリ型マルチプロセッサシステムであって、
前記共有メモリが、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶し、
各プロセッサが、
ｎ１（ｎ１≦ｎ）個の部分に分割された前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める手段と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントする手段と、
ｎ２（ｎ２≦ｎ）個の範囲に分割された前記項目値番号の範囲のうち各プロセッサによって受け持たれる範囲を決める手段と、
前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号のそれぞれの出現回数を累計数に変換する手段と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
を含む、
共有メモリ型マルチプロセッサシステム。
【請求項７】
前記項目値番号の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される、請求項６に記載の共有メモリ型マルチプロセッサシステム。
【請求項８】
共有メモリと前記共有メモリにアクセス可能である複数台のプロセッサとを具備した共有メモリ型マルチプロセッサシステムであって、
前記共有メモリが、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶し、
各プロセッサが、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、
を含み、
前記ソート処理を繰り返す手段が、
前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める手段と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする手段と、
前記項目値番号の現在の桁の値の範囲のうち各プロセッサによって受け持たれる範囲を決める手段と、
前記項目値番号の現在の桁の値が異なる場合に前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
を含む、
共有メモリ型マルチプロセッサシステム。
【請求項９】
前記項目値番号の現在の桁の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される、請求項８に記載の共有メモリ型マルチプロセッサシステム。
【請求項１０】
共有メモリと前記共有メモリにアクセス可能である複数台のプロセッサとを具備した共有メモリ型マルチプロセッサシステムであって、
前記共有メモリが、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶し、
各プロセッサが、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、
を含み、
前記ソート処理を繰り返す手段が、
前記レコード番号配列のうち各プロセンサによって受け持たれる部分を決める手段と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする手段と、
を含み、
少なくとも１台のプロセッサの前記ソート処理を繰り返す手段が、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段を含み、
前記ソート処理を繰り返す手段が、前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段をさらに含む、
共有メモリ型マルチプロセッサシステム。
【請求項１１】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
各プロセッサに、
ｎ１（ｎ１≦ｎ）個の部分に分割された前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める機能と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントする機能と、
ｎ２（ｎ２≦ｎ）個の範囲に分割された前記項目値番号の範囲のうち各プロセッサによって受け持たれる範囲を決める機能と、
前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号のそれぞれの出現回数を累計数に変換する機能と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能と、
を実現させるためのプログラム。
【請求項１２】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
各プロセッサに、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定する機能と、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、前記現在の桁のソート処理を制御する機能と、
前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める機能と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする機能と、
前記項目値番号の現在の桁の値の範囲のうち各プロセッサによって受け持たれる範囲を決める機能と、
前記項目値番号の現在の桁の値が異なる場合に前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、各プロセッサによって受け持たれる範囲内の項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する機能と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能と、
を実現させるためのプログラム。
【請求項１３】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
各プロセッサに、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定する機能と、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、前記現在の桁のソート処理を制御する機能と、
前記レコード番号配列のうち各プロセッサによって受け持たれる部分を決める機能と、
前記レコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の現在の桁の値の出現回数をカウントする機能と、
を実現させ、
少なくとも１台のプロセッサに、前記項目値番号の現在の桁の値が異なる場合には前記項目値番号の現在の桁の値の順序に従い、前記項目値番号の現在の桁の同じ値が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順序に従って、前記項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する機能を実現させ、
前記各プロセッサに、前記レコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能をさらに実現させるためのプログラム。
【請求項１４】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
ｎ１（ｎ１≦ｎ）個の部分に分割された前記レコード番号配列の部分が割り当てられた前記ｎ台のプロセッサのうちのｎ１台のプロセッサのそれぞれに、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号の出現回数をカウントする機能を実現させ、
ｎ２（ｎ２≦ｎ）個の範囲に分割された前記項目値番号の範囲が割り当てられた前記ｎ台のプロセッサのうちのｎ２台のプロセッサのそれぞれに、前記ｎ２台のプロセッサに割り当てられた項目値番号に関して、（ｉ）前記ｎ１台のプロセッサのうちの各プロセッサによってカウントされた前記出現回数の和を算出し、算出された和を前記項目値番号の範囲の順番に前記ｎ２台のプロセッサ間で伝搬させ、（ｉｉ）前記項目値番号が異なる場合には前記項目値番号の順序に従い、同じ項目値番号の出現回数が２台以上のプロセッサによってカウントされている場合には前記レコード番号配列の部分の順番に従って、前記出現回数を累計数に変換し、前記伝搬させられた和を前記累計数に加算することにより、前記ｎ１台のプロセッサのうちの各プロセッサに割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた項目値番号毎に前記出現回数を累計数に変換する機能を実現させ、
前記ｎ１台のプロセッサのうちの各プロセッサに、前記割り当てられたレコード番号配列の部分に含まれるレコード番号に関連付けられた前記項目値番号毎に得られた前記累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する機能を実現させるためのプログラム。
【請求項１５】
表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に関連付けて格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能であるｎ（ｎ≧１）台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
少なくとも１台のプロセッサに、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定することにより、前記項目値番号を上位の桁と下位の桁に分ける機能と、
前記レコード番号配列に含まれるレコード番号に関連付けられた前記項目値番号の上位の桁の値の出現回数をカウントし、前記項目値番号の上位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の上位の桁の値の累計数をポインタとして利用して前記レコード番号配列中のレコード番号を並べ換え、前記項目値番号の上位の桁の値の順序に従ってｎ１（≦ｎ）に区分された中間的なレコード番号配列を生成する機能と、
を実現させ、
前記中間的なレコード番号配列の区分ごとに割り当てられた各プロセッサに、前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号に関連付けられた前記項目値番号の下位の桁の値の出現回数をカウントし、前記項目値番号の下位の桁の値の順序に従って前記出現回数を累計数に変換し、前記項目値番号の下位の桁の値の累計数をポインタとして利用して前記中間的なレコード番号配列のうちの前記割り当てられた区分内のレコード番号をその関連付けられた前記項目値番号の下位の桁の値の順序に並べ換える機能を実現させるためのプログラム。
【請求項１６】
請求項１１乃至１５のうちいずれか１項に記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数台のプロセッサがメモリを共有して並列処理を行う共有メモリ型マルチプロセッサシステムにおける情報処理方法、特に、共有メモリ上の大規模な表形式データを複数台のプロセッサで並列にソートする情報処理方法に関する。【０００２】
本発明は、また、このような情報処理方法を実施する共有メモリ型マルチプロセッサシステムに関する。【０００３】
本発明は、さらに、このような情報処理方法を実現させるためのプログラムに関する。【０００４】
本発明は、さらに、このようなプログラムを記録した記憶媒体に関する。
【背景技術】
【０００５】
社会全体のさまざまな場所にコンピュータが導入され、インターネットをはじめとするネットワークが浸透した今日では、そこここで、大規模データが蓄積・処理されるようになった。【０００６】
一方で、大規模データを処理するために、効率の良いアルゴリズムが開発されている。大規模データ、特に、大規模な表形式データを処理する際に頻出する処理はソートである。効率的なソートアルゴリズムとして、基数（RADIX）ソートとカウンティング（COUNTING）ソート（計数ソート、分布数え上げソートとも称される）が知られている。カウンティングソートは基数ソートの各桁のソートに利用されることがあり、効率の良いアルゴリズムであるが、その適用のためには、
１）ソート対象が整数であること
２）ソート対象となる整数の上限と下限が分かっていること
３）ソート対象となる整数の上限と下限の差が、大きすぎないこと
という前提条件がある。【０００７】
これに対して、本発明者は、大規模な表形式データを高速に検索、集計、ソートするために適したデータ管理機構を提案している（特許文献１を参照）。このデータ管理機構は、表形式データの項目の各項目値を表すための情報ブロックを有する。この情報ブロックでは、表形式データの項目に属する項目値は、各項目値に付与された項目値番号と、項目値番号の順番に並べられた実際の項目値の配列とによって表される。各レコードの項目値に対応した項目値番号をレコード番号順に並べた配列が準備され、各レコードの項目値は、当該レコードの項目値番号に対応した値を項目値の配列から見つけることによって特定される。また、表形式データ中の処理対象のレコードは、レコード番号を順番に並べた配列によって特定される。【０００８】
情報ブロックは、表形式データの各項目に対し、その項目に属する項目値が順序付け（整数化）された項目値番号の順番に、上記項目値番号に対応した項目値が格納されたテーブルである。項目値自体は、数値（整数、固定小数点、浮動小数点など）、文字列などのどのようなタイプのデータでもよい。したがって、このデータ管理機構は、あらゆるタイプのデータの値が項目値番号という整数で取り扱えることに特長がある。すなわち、このデータ管理機構によれば、たとえば、文字列型のデータのソートを行う際に、文字列型のデータをそのままソート対象としてソートするのではなく、文字列型のデータの値に対応した項目値番号をソート対象としてソートすることができる。このとき、ソートの結果はレコード番号を順番に並べた配列によって表される。このように、本発明者が提案した情報ブロックに基づくデータ管理機構は、カウンティングソートを適用するための上記１）から３）の前提条件を満たしている点で優れている。【０００９】
他方で、大規模データを処理するために必要である膨大な計算を高速に実行するため、並列処理を導入することが試みられている。ソートに関しても各種の並列ソートアルゴリズムが提案されている。一般に、並列処理アーキテクチャは「分散メモリ型」と「共有メモリ型」に大別される。分散メモリ型は、各プロセッサがそれぞれローカルなメモリを持ち、これらを結合してシステムを構築する。この方式では、理論的に数百〜数万台ものプロセッサを組み込んだハードウェアシステムの設計が可能である。しかしながら、分散メモリ型は、データの分掌管理の複雑さや、プロセッサ間通信の効率の低さなどの技術的課題がある。これに対して、共有メモリ型は複数のプロセッサが１つの巨大なメモリ空間を共有する方式である。この方式では、プロセッサ群と共有メモリ間のトラフィックがボトルネックとなるので、現実的には百台を越えるプロセッサを用いてシステムを構築することは容易ではない、と考えられている。【００１０】
しかし、このような状況下で、近年、複数台のＣＰＵを用いた共有メモリ型マルチプロセッサシステムとして構成されたパーソナルコンピュータが入手可能である。この種のパーソナルコンピュータに使用される標準的なＣＰＵは、メモリバスの５〜６倍程度の内部クロックで動作し、その内部に自動的な並列実行機能やパイプライン処理機能が装備されており、およそ１データを１クロック（メモリバス）で処理できる。
【特許文献１】国際公開ＷＯ００／１０１０３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
したがって、大規模な表形式データを処理するために、効率的なソートアルゴリズムと、共有メモリ型マルチプロセッサシステムとを組み合わせることが望まれる。【００１２】
効率的なソートアルゴリズムとして知られているカウンティングソートは、上記の１）から３）の前提条件によって制約されているので、本発明者が提案した上記の情報ブロックに基づくデータ管理機構を採用しない限り、大規模な表形式データの処理に適用することが困難である。さらに、大規模な表形式データを共有メモリ型マルチプロセッサシステムで並列ソートする技術は未だ知られていない。【００１３】
したがって、本発明の目的は、上記情報ブロックに基づくデータ管理機構を利用して、共有メモリ上の大規模な表形式データを複数台のプロセッサで並列にソートするための情報処理方法を提案することである。【００１４】
また、本発明の目的は、このような情報処理方法を実施する共有メモリ型マルチプロセッサシステムを提供することである。【００１５】
さらに、本発明の目的は、このような情報処理方法を実現させるためのプログラムを提供することである。【００１６】
さらに、本発明の目的は、このようなプログラムを記録した記憶媒体を提供することである。
【課題を解決するための手段】
【００１７】
本発明は、表形式データの各項目に対し、その項目に属する項目値が順序付け（整数化）された項目値番号の順番（昇順又は降順のどちらでもよい）に、上記項目値番号に対応した項目値が格納されたテーブルである情報ブロックに基づくデータ管理機構に依拠している。項目値自体は、数値（整数、固定小数点、浮動小数点など）、文字列などのどのようなタイプのデータでもよい。このデータ管理機構を採用することにより、あらゆるタイプのデータの値が項目値番号という整数で取り扱える。すなわち、このデータ管理機構によれば、任意のタイプのデータのソートを行う際に、その任意のタイプのデータをそのままソート対象としてソートするのではなく、そのデータの値に対応した項目値番号をソート対象としてソートすることができる。したがって、この情報ブロックに基づくデータ管理機構は、カウンティングソートを適用するための前提条件を満たしている。また、表形式データ中の処理対象のレコードがレコード番号を順番に並べた配列によって特定されるので、ソートの結果はレコード番号を順番に並べた配列によって表される。【００１８】
本発明は、このようなデータ管理機構を共有メモリ型マルチプロセッサシステムに適用することにより、共有メモリ上の大規模な表形式データを複数台のプロセッサで並列にソートするための情報処理方法、及び、その情報処理方法を実施する共有メモリ型マルチプロセッサシステムを実現する。そのため、本発明によれば、最初に、処理対象のレコードが分割されて複数台のプロセッサへ割り当てられる。次に、各プロセッサが処理対象のレコードに関連付けられた項目値番号のローカルな出現回数をカウントする。次に、各プロセッサでカウントされた項目値番号のローカルな出現回数を、項目値番号のグローバルな累計数、すなわち、複数台のプロセッサ間で共通に用いられる累計数に変換する。最後に、各プロセッサは、このグローバルな累計数をポインタとして利用することにより、割り当てられたレコードの順序を入れ替える。したがって、本発明によれば、共有メモリ型マルチプロセッサシステムにおいて、レコードのある項目の項目値（たとえば、整数値、固定小数点数値、浮動小数点数値、文字列など）に関してレコードを並列にソートすることが可能である。【００１９】
処理対象のレコードの複数台のプロセッサへの割り当て、ローカルな出現回数のカウント、及び、割り当てられたレコードの順序の入れ替えは、複数台のプロセッサが並列に処理可能である。また、グローバルな累計数の算出は、複数台のプロセッサの並列処理を利用してもよいが、メモリにシーケンシャルにアクセスできるためキャッシュへのヒット率が高いので、１台又は一部のプロセッサだけが担当して高速性を維持できる。【００２０】
上記の本発明の原理は以下の種々の態様によって実施される。【００２１】
本発明の第１の態様は、共有メモリ型マルチプロセッサシステムにおいてレコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法である。共有メモリ型マルチプロセッサシステムは、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、前記共有メモリにアクセス可能である複数台のプロセッサと、を具備する。本発明による情報処理方法は、
前記レコード番号配列を分割して第１の複数台のプロセッサに割り当てるステップと、
前記第１の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の出現回数をカウントするステップと、
前記項目値番号の範囲を分割して第２の複数台のプロセッサに割り当てるステップと、
前記第２の複数台のプロセッサのうちの各プロセッサにおいて、前記項目値番号の順番に、前記項目値番号が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記割り当てられた項目値番号のそれぞれの出現回数を累計数に変換するステップと、
前記第１の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した前記項目値番号の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む。【００２２】
この情報処理方法は、項目値番号の出現回数のカウント処理の並列化、出現回数から累計数への変換処理の並列化、及び、さらなるレコード番号配列の作成処理の並列化を達成する。したがって、本発明は、カウンティングソートの技術を共有メモリ型マルチプロセッサ環境に適合するように拡張することにより、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて並列ソートすることが可能である。尚、マルチプロセッサシステムを構成する複数台のプロセッサのうち、任意の第１の複数台のプロセッサがレコード番号配列のそれぞれの部分を担当し、任意の第２の複数台のプロセッサが項目値番号の範囲のそれぞれの部分を担当する。第１の複数台の個数と第２の複数台の個数はマルチプロセッサシステムを構成するプロセッサの全数でもよく、その一部でもよいことに注意する必要がある。【００２３】
また、本発明の情報処理方法は、項目値番号に関して基数ソートの考え方を導入することにより、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて多段階で並列ソートすることが可能である。たとえば、項目値番号配列のサイズが大きい場合には、項目値番号配列を圧縮して利用できれば処理を効率化することが可能である。そのため、本発明による情報処理方法は、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
を含む。これにより、最下位桁から最上位桁まで順番に項目値番号の桁ごとに並列ソート処理が行われる。前記ソート処理は、
前記現在のレコード番号配列を分割して第１の複数台のプロセッサに割り当てるステップと、
前記第１の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントするステップと、
前記項目値番号の現在の桁の値の範囲を分割して第２の複数台のプロセッサに割り当てるステップと、
前記第２の複数台のプロセッサのうちの各プロセッサにおいて、前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
前記第１の複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む。【００２４】
本発明によれば、項目値番号の最下位桁から最上位桁へ順番に現在の桁に関するソート処理が繰り返されるので、基数ソートの考え方に従って項目値番号に関するソートが実現される。したがって、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて並列ソートすることが可能である。【００２５】
上記の多段階並列ソートでは、項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップは第２の複数台のプロセッサによって並列に実行される。しかし、このステップは複数台のプロセッサによって並列に実行しなくても高速に行える場合がある。なぜならば、このステップの処理は、シーケンシャルに行われるので、キャッシュヒット率が高いからである。そのため、本発明による情報処理方法は、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁に関して、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として、ソート処理を繰り返すステップと、
を含み、
前記ソート処理が、
前記現在のレコード番号配列を分割して前記複数台のプロセッサに割り当てるステップと、
各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントするステップと、
少なくとも１台のプロセッサにおいて、前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換するステップと、
前記各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記割り当てられた前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納するステップと、
を含む。【００２６】
本情報処理方法では、項目値番号の現在の桁の範囲は複数台のプロセッサに分割されることがなく、少なくとも１台、好ましくは、１台のプロセッサが、項目値番号の現在の桁の値の出現回数を順番に累計数に変換する。この場合も、項目値番号の最下位桁から最上位桁へ順番に現在の桁に関するソート処理が繰り返されるので、基数ソートの考え方に従って項目値番号に関するソートが実現される。したがって、大規模な表形式データを共有メモリ型マルチプロセッサシステムにおいて並列ソートすることが可能である。【００２７】
また、本発明は上記目的を達成するため、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
前記レコード番号配列を分割して前記複数台のプロセッサに割り当てるステップと、
前記複数台のプロセッサのうちの各プロセッサにおいて、前記割り当てられたレコード番号配列の部分に含まれるレコードの順番を当該レコードに対応した項目値番号に応じて入れ替え、当該レコードのレコード番号をさらなるレコード番号配列に格納するステップと、
を含む、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法を提供する。【００２８】
さらに、本発明は上記目的を達成するため、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する共有メモリと、
前記共有メモリにアクセス可能である複数台のプロセッサと、
を具備した共有メモリ型マルチプロセッサシステムにおいて、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定するステップと、
前記基数で表現された前記項目値番号の上位の桁に関して前記レコード番号配列中のレコード番号を並べ換え、前記項目値番号の上位の桁の値の順番に区分された中間的なレコード番号配列を生成するステップと、
前記中間的なレコード番号配列の区分ごとにプロセッサを割り当てるステップと、
前記区分ごとに割り当てられた各プロセッサが、前記中間的なレコード番号配列の前記区分内のレコード番号を前記項目値番号の下位の桁の値の順番に並べ換えるステップと、
を含む、レコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法を提供する。【００２９】
本発明の第２の態様は、共有メモリと前記共有メモリにアクセス可能である複数台のプロセッサとを具備し、上記の本発明の情報処理方法を実施する共有メモリ型マルチプロセッサシステムである。本発明の共有メモリ型マルチプロセッサシステムにおいて、前記共有メモリは、表形式データのレコードのレコード番号が所定のレコード順に従って格納されたレコード番号配列、表形式データのレコードの所定の項目の項目値に対応する項目値番号がレコード番号に従って格納された項目値番号配列、及び、表形式データの項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列を記憶する。これにより、本発明の共有メモリ型マルチプロセッサシステムはブロック情報に基づくデータ管理機構を利用することができる。【００３０】
各プロセッサは、
前記レコード番号配列のうち自プロセッサが受け持つ部分を決める手段と、
前記レコード番号配列の部分に含まれるレコードに対応した項目値番号の出現回数をカウントする手段と、
前記項目値番号の範囲のうち自プロセッサが受け持つ範囲を決める手段と、
前記項目値番号の順番に、前記項目値番号が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記受け持つ範囲内の項目値番号のそれぞれの出現回数を累計数に変換する手段と、
前記レコード番号配列の部分に含まれるレコードに対応した前記項目値番号の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
を含む。【００３１】
各プロセッサは並列に動作可能であるため、出現回数のカウントの並列化、出現回数の累計数への変換の並列化、及び、さらなるレコード番号配列の作成の並列化が実現される。【００３２】
項目値番号の出現回数を累計数に変換する際に、得られた累計数を項目値番号の順に伝搬させる必要がある。そのため、前記項目値番号の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される。【００３３】
また、本発明の共有メモリ型マルチプロセッサシステムは、項目値番号に関して基数ソートの考え方を導入することにより、大規模な表形式データを多段階で並列ソートするため、各プロセッサが、
前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、
前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、
を含む。これにより、項目値番号の最下位桁から最上位桁までの桁ごとの並列ソート処理が順番に実行される。さらに、前記ソート処理を繰り返す手段は、
前記レコード番号配列のうち自プロセッサが受け持つ部分を決める手段と、
前記レコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントする手段と、
前記項目値番号の現在の桁の値の範囲のうち自プロセッサが受け持つ範囲を決める手段と、
前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記受け持つ範囲内の項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段と、
前記レコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段と、
を含む。これにより、項目値番号の桁ごとの並列ソート処理が実現される。本発明によれば、項目値番号の桁ごとのソート処理において、複数台のプロセッサが、出現回数のカウントと、出現回数の累計数への変換と、さらなるレコード番号配列の作成と、を並列に実行する。【００３４】
また、出現回数の累計数への変換を複数台のプロセッサで分担して行うため、本発明において、前記項目値番号の現在の桁の範囲のうち先行する範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって得られた前記累計数が、直後の範囲を受け持つプロセッサの前記出現回数を累計数に変換する手段によって参照される。【００３５】
さらに、大規模な表形式データを多段階で並列ソートする本発明による共有メモリ型マルチプロセッサシステムは、現在の桁の値のそれぞれの出現回数の累計数化を少なくとも１台、好ましくは、１台のプロセッサで実行することも可能である。そのため、本発明による共有メモリ型マルチプロセッサシステムにおいて、各プロセッサは、前記項目値番号の範囲に応じて前記項目値番号の基数を設定する手段と、前記基数で表現された前記項目値番号の最下位桁から最上位桁まで順番に現在の桁を設定し、１回目は前記レコード番号配列を現在のレコード番号配列として、２回目以降はさらなるレコード番号配列を現在のレコード番号配列として設定し、ソート処理を繰り返す手段と、を含む。【００３６】
各プロセッサの前記ソート処理を繰り返す手段は、前記レコード番号配列のうち自プロセッサが受け持つ部分を決める手段と、前記レコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントする手段と、を含む。【００３７】
さらに、少なくとも１台のプロセッサの前記ソート処理を繰り返す手段は、前記項目値番号の現在の桁の値の順番に、前記項目値番号の現在の桁の値が一致する範囲内では前記レコード番号配列の部分の順番に従って、前記項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する手段を含む。【００３８】
さらに、前記ソート処理を繰り返す手段は、前記レコード番号配列の部分に含まれるレコードに対応した前記項目値番号の現在の桁の値の累計数をポインタとして利用して、前記レコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する手段を含む。【００３９】
本発明によれば、各プロセッサは、項目値番号の現在の桁の値の範囲のうち自プロセッサが受け持つ範囲を決める必要がなくなり、複数台のプロセッサで出現回数を累計数に変換する処理を分担しなくても済むので、共有メモリ型マルチプロセッサシステムの構成が簡単化される。【００４０】
さらに、本発明の第３の態様によれば、このような情報処理方法を実現させるためのプログラムが提供される。【００４１】
さらに、本発明の第４の態様によれば、このようなプログラムを記録した記憶媒体が提供される。
【発明の効果】
【００４２】
本発明によれば、共有メモリ型の並列処理環境において、大規模な表形式データの高速並列ソートを実現可能な情報処理装置を提供することが可能となる。
【発明を実施するための最良の形態】
【００４３】
以下、添付図面を参照して本発明の種々の実施例を説明する。【００４４】
［コンピュータシステム構成］
図１は本発明によるレコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法を実施するコンピュータシステムの一実施例の概略図である。図１に示すように、このコンピュータシステム１０は、プログラムを実行することによりシステム全体および個々の構成部分を制御するｐ台のプロセッサ（ＣＰＵ）１２−１、１２−２、．．．１２−ｐ、ワークデータなどを記憶する共有メモリ、たとえば、ＲＡＭ(Random Access Memory)１４、プログラム等を記憶するＲＯＭ(Read Only Memory)１６、ハードディスク等の固定記憶媒体１８、ＣＤ−ＲＯＭ１９をアクセスするためのＣＤ−ＲＯＭドライバ２０、ＣＤ−ＲＯＭドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、ＣＲＴ表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、外部記憶媒体１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。図示されていないが、各ＣＰＵは固有のローカルメモリを備えていてもよい。【００４５】
本実施の形態にかかる、レコードの所定の項目の項目値に応じてレコード順を並べ換えるプログラムは、ＣＤ−ＲＯＭ１９に収容され、ＣＤ−ＲＯＭドライバ２０に読取られても良いし、ＲＯＭ１６に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ１９から読み出したものを、外部記憶媒体１８の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て外部から供給されるものであっても良い。【００４６】
また、本発明の実施の形態にかかる共有メモリ型マルチプロセッサシステムは、コンピュータシステム１０にレコードの所定の項目の項目値に応じてレコード順を並べ換えるプログラムを実行させることにより実現される。【００４７】
［情報ブロックに基づくデータ管理機構］
図２はデータ管理機構を説明するための表形式データの一例を表す図である。この表形式データは、上述の国際公開第ＷＯ００／１０１０３号に提案したデータ管理機構を用いることにより、コンピュータ内では図３に示されるようなデータ構造として記憶される。【００４８】
図３に示すように、表形式データの各レコードの並び順の番号と、内部データの並び順の番号を対応付ける配列３０１（以下、この配列を「OrdSet」のように略記する。）には、表形式のレコード毎に内部データの並び順番号が値として配置される。この例では、すべての表形式データが内部データとして表されるため、表形式データのレコード番号と内部データの並び順番号とは一致する。【００４９】
例えば、性別に関しては、表形式データのレコード０に対応する内部データの並び順番号は、配列OrdSet３０１から「０」であることがわかる。並び順番号が「０」であるレコードに関する実際の性別の値、即ち、「男」又は「女」は、実際の値が所定の順序に従ってソートされた値リスト３０３（以下、値リストを「VL」のように略記する。）へのポインタ配列３０２（以下、ポインタ配列を「VNo」のように略記する。）を参照することによって取得できる。ポインタ配列３０２は、配列OrdSet３０１に格納されている並び順番号の順に従って、実際の値リスト３０３中の要素を指し示すポインタを格納している。これにより、表形式データのレコード「０」に対応する性別の項目値は、（１）配列OrdSet３０１からレコード「０」に対応する並び順番号「０」を取り出し、（２）値リストへのポインタ配列３０２から並び順番号「０」に対応する要素「１」を取り出し、（３）値リスト３０３から、値リストへのポインタ配列３０２から取り出された要素「１」によって指し示される要素「女」を取り出すことにより取得できる。【００５０】
他のレコードに対しても、また、年齢及び身長に関しても同様に項目値を取得することができる。【００５１】
このように表形式データは、値リストVLと、値リストへのポインタ配列VNoの組合せにより表現され、この組合せを、特に、「情報ブロック」と称する。図３には、性別、年齢及び身長に関する情報ブロックがそれぞれ情報ブロック３０８、３０９及び３１０として示されている。【００５２】
単一のコンピュータが、単一のメモリ（物理的には複数であっても良いが、単一のアドレス空間に配置されアクセスされるという意味で単一のメモリ）であれば、当該メモリに、順序集合の配列OrdSet、各情報ブロックを構成する値リストVLおよびポインタ配列VNoとを記憶しておけばよい。しかしながら、大量のレコードを保持するためには、その大きさに伴ってメモリ容量も大きくなるため、これらの大量のレコードを並列処理できるのが望ましい。【００５３】
そこで、本実施の形態においては、複数台のプロセッサが共有メモリに記憶されたレコードのデータにアクセスし、複数台のプロセッサの並列処理により、高速なソートを実現している。【００５４】
［並列ソート］
次に、本発明の実施の形態にかかる、共有メモリ型マルチプロセッサシステムにおいてレコードの所定の項目の項目値に応じてレコード順を並べ換える情報処理方法、すなわち、並列ソート方法を説明する。図４Ａ、Ｂはソート対象のデータ構造を表す図である。図４Ａに示された表形式データ４０１は、ソート対象のデータ構造を行列形式で分かりやすく表現したものであり、レコード０からレコード１９までの２０個のレコードを含み、各レコードは、年齢と地域の二つの項目により構成される。図４Ｂに示されたデータ構造４０２は、コンピュータシステム１０の共有メモリ１４に記憶されたデータ構造を表している。図４Ｂのレコード番号配列(OrdSet：順序集合を表す)４０３はレコード番号０から１９を所定の順に従って格納する配列である。本例では、レコード番号は０から１９の順に格納されている。年齢と地域のデータは、それぞれ、情報ブロック４０４と情報ブロック４０５の形で記憶される。年齢の情報ブロック４０４は、年齢の項目値に対応する項目値番号がレコード番号の順番に従って格納された項目値番号配列（以下では、VNo：値番号とも称される）４０６と、年齢の項目値が当該項目値に対応する項目値番号の順序に従って格納された項目値配列（以下では、VL：値リストとも称される）４０７とにより構成される。同様に、地域の情報ブロック４０５は、地域の項目値に対応する項目値番号がレコード番号の順番に従って格納された項目値番号配列４０８と、地域の項目値が当該項目値に対応する項目番号の順序に従って格納された項目値配列４０９とにより構成される。コンピュータシステム１０のｐ台のプロセッサ１２−１、・・・、１２−ｐは、共有メモリ１４上のこれらのデータにアクセスすることが可能である。【００５５】
図５は、本発明の実施の形態にかかる並列ソート方法のフローチャートである。本実施の形態では、ＣＰＵの台数は４台とし、すべてのＣＰＵが並列に動作する例を考える。システム内のＣＰＵの総数、及び、並列に動作するＣＰＵの台数はこの例に限定されないことに注意すべきである。また、以下では、説明の便宜上、年齢の項目に関して、年齢の昇順にソートする場合を考える。また、年齢の項目値配列の要素は年齢の昇順に並べられている。並列ソート方法は、ステップ５０１からステップ５０５の５ステップにより構成される。【００５６】
ステップ５０１：レコード番号配列を４分割して各部分を４台のＣＰＵに割り当てる（図６を参照）。【００５７】
ステップ５０２：各ＣＰＵは、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の出現回数を並列的にカウントする（図７Ａ、Ｂ乃至図９Ａ、Ｂを参照）。【００５８】
ステップ５０３：項目値番号の範囲、すなわち、項目値番号０から項目値番号４までの５個の値を４台のＣＰＵに割り当てる。たとえば、ＣＰＵ−０は項目値番号０及び１が割り当てられ、ＣＰＵ−１からＣＰＵ−３は項目値番号２から項目値番号４までが一つずつ割り当てられる（図１０Ａを参照）。【００５９】
ステップ５０４：４台のＣＰＵは、それぞれ、項目値番号の順番に、項目値番号が一致する範囲内ではレコード番号配列の部分の順番に従って、割り当てられた項目値番号のそれぞれの出現回数を累計数に変換する（図１０Ａ及びＢを参照）。【００６０】
ステップ５０５：４台のＣＰＵは、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の累計数をポインタとして利用して、割り当てられたレコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する（図１１Ａ、Ｂ乃至図１３Ａ、Ｂを参照）。【００６１】
次に各ステップを詳述する。【００６２】
図６は並列ソート方法の初期化ステップ５０１の説明図である。ＣＰＵ−０からＣＰＵ−３の４台のＣＰＵには、レコード番号配列の先頭から順番に４レコードずつが割り当てられる。たとえば、ＣＰＵ−０は、レコード番号配列の先頭のＯｒｄＳｅｔ［０］から５番目のＯｒｄＳｅｔ［４］までを担当する（ＯｒｄＳｅｔ［ｘ］のｘは配列ＯｒｄＳｅｔの添字を表す）。また、共有メモリ１４には、項目値番号の出現回数をカウントするためのカウント配列Ｃｏｕｎｔ−０、Ｃｏｕｎｔ−１、Ｃｏｕｎｔ−２及びＣｏｕｎｔ−３が設けられ、各ＣＰＵに関連付けられる。Ｃｏｕｎｔ配列の個数はＣＰＵの数と同数であり、Ｃｏｕｎｔ配列の配列サイズはＶＬ配列のサイズと同じである。Ｃｏｕｎｔ配列の要素は０で初期化される。【００６３】
図７Ａ、Ｂ乃至図９Ａ、Ｂは並列ソート方法のカウントアップステップ５０２の説明図である。図７Ａのサブステップ１では、たとえば、ＣＰＵ−０は、ＯｒｄＳｅｔ［０］の値０を読み出し、読み出された値０を添字として、ＶＮｏ［０］の値１を読み出し、この値１を添字として、Ｃｏｕｎｔ−０［１］の値０を１にインクリメントする。同様に、ＣＰＵ−１は、ＯｒｄＳｅｔ［５］の値５を読み出し、読み出された値５を添字として、ＶＮｏ［５］の値２を読み出し、この値２を添字として、Ｃｏｕｎｔ−１［２］の値０を１にインクリメントする。ＣＰＵ−２及びＣＰＵ−３についても同様である。図７Ｂのサブステップ２では、たとえば、ＣＰＵ−０は、ＯｒｄＳｅｔ［１］の値１を読み出し、読み出された値１を添字として、ＶＮｏ［１］の値３を読み出し、この値３を添字として、Ｃｏｕｎｔ−０［３］の値０を１にインクリメントする。ＣＰＵ−１、ＣＰＵ−２及びＣＰＵ−３についても同様である。各プロセッサは、図８Ａ及びＢ、図９Ａに示されるように、自プロセッサが担当する配列ＯｒｄＳｅｔの各要素を読み出し、その要素を添字として、配列ＶＮｏの要素を読み出し、さらに、その読み出された要素を添字として対応するＣｏｕｎｔ配列の要素をインクリメントする。その結果として、図９Ｂに示されるようなカウントアップ結果が得られる。図９Ａ、Ｂの配列Ｃｏｕｎｔ−０の要素Ｃｏｕｎｔ−０［ｉ］は、ＣＰＵ−０が担当した配列ＯｒｄＳｅｔのＯｒｄＳｅｔ［０］からＯｒｄＳｅｔ［４］の範囲内の各レコードに対応する年齢の項目値番号ｉの出現回数を表わしている。たとえば、Ｃｏｕｎｔ−０［０］は、ＣＰＵ−０の担当範囲内の項目値番号０の出現回数が１回であることを表し、Ｃｏｕｎｔ−３［１］はＣＰＵ−３の担当範囲内の項目値番号１の出現回数が２回であることを表す。【００６４】
図１０Ａ、Ｂは並列ソート方法の累計数化ステップ５０３及び５０４の説明図である。本例では、昇順ソートに対応して、項目値番号の昇順に累計数化を行う。ＣＰＵ−０は、配列Ｃｏｕｎｔの１行目と２行目（すなわち、項目値番号０と１）の累計数化を担当し、ＣＰＵ−１乃至ＣＰＵ−３は、それぞれ、配列Ｃｏｕｎｔの３乃至５行目（すなわち、項目値番号３乃至５）の累計数化を担当する。図１０Ａに示されるように、累計数化は配列Ｃｏｕｎｔの横方向（すなわち、添字が一致する行）を優先して行われ、次に、先行する行の累計数を後続する行の累計数に加算することにより、全体の累計数が決まる。尚、横方向の累計数化は、各ＣＰＵが並列に実行できることに注意すべきである。【００６５】
一般に、ｉ番目(０≦ｉ≦ｐ−１)のＣＰＵであるＣＰＵ−ｉがカウントアップした項目値番号ｊ（０≦ｊ≦ｑ−１）のカウント値を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]を伝搬させることが必要である。したがって、本実施の形態では、累計数化の演算をＣＰＵが分担して行っているが、１台のプロセッサを選択し、そのプロセッサが単独で累計数化を行ってもよい。【００６６】
図１０Ｂは累計数化の順番を縦方向で一列に表したものである。たとえば、図１０Ｂにおいて、(１）Ｃｏｕｎｔ−０：０の行は、配列Ｃｏｕｎｔ−０の先頭の要素Ｃｏｕｎｔ−０［０］のカウント値１が累計数０に変換されることを表している。すなわち、
１，２，２，０，２，０，２，２，０，２，０，１，１，１，０，１，１，０，１，１
というカウント値の系列を累計数化すると、
０，１，３，５，５，７，７，９，１１，１１，１３，１３，１４，１５，１６，１６，１７，１８，１８，１９
になる。【００６７】
図１１Ａ、Ｂ乃至図１３Ａ、Ｂはレコード番号をさらなるレコード番号配列に格納する転送ステップ５０５の説明図である。転送ステップでは、各ＣＰＵは、レコード番号配列ＯｒｄＳｅｔから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列ＶＮｏから項目値番号を読み出し、さらに、この項目値番号を添字として、自プロセッサに関連付けられた累計数化されたＣｏｕｎｔ配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列ＯｒｄＳｅｔ’にレコード番号を格納すると共に、Ｃｏｕｎｔ配列の累計数値を１ずつインクリメントする。【００６８】
たとえば、図１１Ａのサブステップ１では、ＣＰＵ−０は、ＯｒｄＳｅｔ［０］の値０（すなわち、レコード番号０）を読み出し、次にＶＮｏ［０］の値１を読み出し、さらに、関連付けられたＣｏｕｎｔ配列のＣｏｕｎｔ−０［１］の値５を読み出し、ＯｒｄＳｅｔ［５］にレコード番号０を設定すると共に、Ｃｏｕｎｔ−０［１］の値を６にインクリメントする。このレコード番号の転送処理は、以下同様に、図１１Ｂのサブステップ２、図１２Ａ及びＢのサブステップ３及び４、図１３Ａのサブステップ５のように進められ、最終的に、図１３Ｂに示されるようなさらなるレコード番号配列ＯｒｄＳｅｔ’が得られる。【００６９】
図１４Ａ〜Ｃ及び図１５Ａ、Ｂは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる並列ソート方法を適用した結果を示す図である。本例では、年齢に関する昇順ソートを行ったので、結果のレコード番号配列ＯｒｄＳｅｔ’には、年齢の項目値として１６歳、１８歳、２０歳、２１歳及び２３歳を有するレコードが年齢順に並んでいることがわかる。また、年齢が一致するレコードの順番は、元のレコード番号配列ＯｒｄＳｅｔ中の順番が保存されている。【００７０】
上記の並列ソート方法は年齢に関する昇順ソートの例について説明しているが、この並列ソート方法は年齢に関する降順ソートにも同様に適用できる。降順ソートは昇順ソートと同様に行われるが、累計数化の順番が昇順ソートとは異なる。図１６Ａ、Ｂは本発明の実施の形態にかかる並列（降順）ソート方法の累計数化ステップの説明図である。図１６Ａに示されるように、累計数化は配列Ｃｏｕｎｔの横方向（すなわち、添字が一致する行）を優先して行われ、次に、後方の行の累計数を先行する行の累計数に加算することにより、全体の累計数が決まる。尚、横方向の累計数化は、各ＣＰＵが並列に実行できることに注意すべきである。【００７１】
一般に、ｉ番目(０≦ｉ≦ｐ−１)のＣＰＵであるＣＰＵ−ｉがカウントアップした項目値番号ｊ（０≦ｊ≦ｑ−１）のカウント値を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]を伝搬させることが必要である。したがって、本実施の形態では、累計数化の演算をＣＰＵが分担して行っているが、１台のプロセッサを選択し、そのプロセッサが単独で累計数化を行ってもよい。図１６Ｂは累計数化の順番を縦方向で一列に表したものである。図１６Ｂにおいて、たとえば、（１）Ｃｏｕｎｔ−０：４の行は、配列Ｃｏｕｎｔ−０の先頭の要素Ｃｏｕｎｔ−０［４］のカウント値１が累計数０に変換されることを表している。【００７２】
図１７Ａ、Ｂ乃至図１９Ａ、Ｂは降順の並列ソート方法の転送ステップ５０５の説明図である。転送ステップでは、各ＣＰＵは、レコード番号配列ＯｒｄＳｅｔから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列ＶＮｏから項目値番号を読み出し、さらに、この項目値番号を添字として、自プロセッサに関連付けられた累計数化されたＣｏｕｎｔ配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列ＯｒｄＳｅｔ’にレコード番号を格納すると共に、Ｃｏｕｎｔ配列の累計数値を１ずつインクリメントする。【００７３】
図２０Ａ、Ｂ及び図２１Ａ〜Ｃは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる降順の並列ソート方法を適用した結果を示す図である。本例では、年齢に関する降順ソートを行ったので、結果のレコード番号配列ＯｒｄＳｅｔ’には、年齢の項目値として２３歳、２１歳、２０歳、１８歳及び１６歳を有するレコードが年齢順に並んでいることがわかる。また、年齢が一致するレコードの順番は、元のレコード番号配列ＯｒｄＳｅｔ中の順番が保存されている。【００７４】
［並列累計数化演算］
次に、上記の実施例で説明した累計数化ステップ５０４をさらに具体的に説明する。図９Ｂに示すようなカウント結果が得られたとき、図１０Ａ及びＢに示されるような累計数化が行われる。累計数化を並列に行うため、各ＣＰＵには、対象とする項目値番号の値の範囲が割り当てられる。ＣＰＵ−０には項目値番号０と１が、ＣＰＵ−１には項目値番号２が、ＣＰＵ−２には項目値番号３が、ＣＰＵ−３には項目値番号４が割り当てられる。したがって、Ｃｏｕｎｔ配列の要素を、上述のようにCount[i][j]の形で表す（ｉはカウントを担当したＣＰＵの番号、ｊは項目値番号を表す）と、各ＣＰＵの累計数化の担当範囲：
・ＣＰＵ−０の担当範囲（項目値番号０及び１）
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
・ＣＰＵ−１の担当範囲（項目値番号２）
Count[0][2]=0
Count[1][2]=2
Count[2][2]=0
Count[3][2]=1
・ＣＰＵ−２の担当範囲（項目値番号３）
Count[0][3]=1
Count[1][3]=1
Count[2][3]=0
Count[3][3]=1
・ＣＰＵ−３の担当範囲（項目値番号４）
Count[0][4]=1
Count[1][4]=0
Count[2][4]=1
Count[3][4]=1
が得られる。【００７５】
このような担当範囲が決まると、最初に、各ＣＰＵ−ｉが担当範囲内のカウントの小計Sum[i]を計算すると、
Sum[0]=11
Sum[1]=3
Sum[2]=3
Sum[3]=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
が得られる。小計の累計数は先頭が０になるように定義される。【００７７】
最後に、各ＣＰＵ−ｉは、担当範囲でCount値を累計数に変換し、算出された小計の累計数Aggr_sum[i]をそのCount値の累計数に加算することにより、最終的なカウントの累計数Count'を得る。このCount'の計算も並列処理である。これにより、
・ＣＰＵ−０の担当範囲（項目値番号０及び１）
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
・ＣＰＵ−１の担当範囲（項目値番号２）
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
・ＣＰＵ−２の担当範囲（項目値番号３）
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
・ＣＰＵ−３の担当範囲（項目値番号４）
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
が得られる。【００７８】
この結果は図１０Ｂに示された累計数化の結果と一致している。【００７９】
［多段階並列ソート］
上記のカウンティングソートに基づく並列ソートは基数ソートの考え方と組み合わせることが可能である。項目値配列ＶＬのサイズが大きいとき、すなわち、項目値番号の個数が多数であるときには、項目値番号を基数で表現し、桁ごとに上記の並列ソートを実施することにより、効率的なソートを実現することが可能である。以下では、このような多段階並列ソート方法について説明する。特に、本実施の形態にかかる多段階並列ソートは、最下位の桁から始めて順番に現在の桁に関するソート処理を行い、最後に最上位の桁に関するソート処理を行うことによって最終的なソートを完了する。【００８０】
本発明の実施にかかる多段階並列ソート方法の一例でも、上記の並列ソート方法の例で使用した図４Ｂのデータ構造を利用する。本実施の形態では、ＣＰＵの台数は４台とし、すべてのＣＰＵが並列に動作する例を考える。システム内のＣＰＵの総数、及び、並列に動作するＣＰＵの台数はこの例に限定されないことに注意すべきである。また、以下では、説明の便宜上、年齢の項目に関して、年齢の昇順にソートする場合を考える。また、年齢の項目値配列の要素は年齢の昇順に並べられている。図４Ｂのデータ構造では、年齢に関する項目値番号ＶＮｏは０から４までの値を取り得るので、基数＝４として項目値番号を分解すると、項目値番号は下の桁と上の桁の２桁に分解される。具体的には、項目値番号のモジュロ（４）の値が下の桁の値であり、項目値番号を４で割った商が上の桁の値である。【００８１】
図２２は、本発明の実施の形態にかかる多段階並列ソート方法のフローチャートである。多段階並列ソート方法は、ステップ２２０１からステップ２２０５の５ステップにより構成される。【００８２】
ステップ２２０１：項目値番号の範囲に応じて項目値番号の基数（本例では基数＝４）を選択し、初期のレコード番号配列ＯｒｄＳｅｔを現在のレコード番号配列に設定し、項目値番号の最下位の桁（本例では項目値番号のモジュロ（４）の値）を現在の桁に設定する。【００８３】
ステップ２２０２：現在のレコード番号配列を分割して４台のプロセッサに割り当てる。【００８４】
ステップ２２０３：４台のプロセッサのうちの各プロセッサにおいて、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数をカウントする。【００８５】
ステップ２２０４：項目値番号の現在の桁の値の範囲を分割して４台のプロセッサに割り当てる。【００８６】
ステップ２２０５：４台のプロセッサのうちの各プロセッサにおいて、項目値番号の現在の桁の値の順番に、項目値番号の現在の桁の値が一致する範囲内ではレコード番号配列の部分の順番に従って、割り当てられた項目値番号の現在の桁の値のそれぞれの出現回数を累計数に変換する。【００８７】
ステップ２２０６：４台のプロセッサのうちの各プロセッサにおいて、割り当てられたレコード番号配列の部分に含まれるレコードに対応した項目値番号の現在の桁の値の出現回数の累計数をポインタとして利用して、割り当てられたレコード番号配列の部分に含まれるレコード番号をさらなるレコード番号配列に格納する。【００８８】
ステップ２２０７：基数で表現された項目値番号の最上位桁までソート処理が行われたかどうかを判定し、最上位桁までソートされているならば、多段階並列ソート処理を終了する。【００８９】
ステップ２２０８：未処理の桁が残っているならば、その桁を現在の桁に設定し、さらなるレコード番号配列を現在のレコード番号配列として、ステップ２２０２へ戻る。【００９０】
上記の本発明の実施の形態にかかる多段階並列ソート方法において、ステップ２２０２からステップ２２０６までのソート処理は、上記の本発明の並列ソート方法と同様の処理であり、項目値番号の代わりに項目値番号の現在の桁の値が使用される点だけが異なっている。【００９１】
次に、本発明の実施の形態にかかる多段階並列ソート方法を具体的に説明する。本例では、図４Ｂに示されたデータを、４台のＣＰＵを使用し、年齢の昇順でソートする。初期化ステップ２２０１は、１段階目のソート処理として、年齢の項目値番号のモジュロー４（ＭＯＤ  ４）の値（下位の桁の値）に関するソート処理を設定し、２段階目のソート処理として、年齢の項目値番号の４で割った商（ＤＩＶ  ４）の値に関するソート処理を設定する。【００９２】
初期化ステップ２２０１では、図６に示されたＣｏｕｎｔ配列と同様の配列が準備される。但し、本例の配列は、項目値番号の現在の桁の値の出現回数をカウントする配列である。【００９３】
図２３Ａ、Ｂ乃至図２５Ａ、Ｂは、多段階並列ソート方法の第１段階のカウントステップ２２０３の説明図である。図２３Ａのサブステップ１では、たとえば、ＣＰＵ−０は、ＯｒｄＳｅｔ［０］の値０を読み出し、読み出された値０を添字として、ＶＮｏ［０］の値１を読み出し、この値１のモジュロー４（ＭＯＤ４）の値１を添字として、Ｃｏｕｎｔ−０［１］の値０を１にインクリメントする。同様に、ＣＰＵ−１は、ＯｒｄＳｅｔ［５］の値５を読み出し、この値５を添字として、ＶＮｏ［５］の値２を読み出し、この値２のＭＯＤ４の値２を添字として、Ｃｏｕｎｔ−１［２］の値０を１にインクリメントする。以下、図２３Ｂのサブステップ２、図２４Ａのサブステップ３、図２４Ｂのサブステップ４及び図２５Ａのサブステップ５を実行することにより、図２５Ｂに示されるようなカウントアップ結果が得られる。図２３Ａ、Ｂ〜図２５Ａ、Ｂの配列Ｃｏｕｎｔ−０の要素Ｃｏｕｎｔ−０［ｉ］は、ＣＰＵ−０が担当した配列ＯｒｄＳｅｔのＯｒｄＳｅｔ［０］からＯｒｄＳｅｔ［４］の範囲内の各レコードに対応する年齢の項目値番号の下位の桁の値ｉの出現回数を表わしている。たとえば、Ｃｏｕｎｔ−０［０］は、ＣＰＵ−０の担当範囲内の項目値番号の下位の桁の値０の出現回数が１回であることを表し、Ｃｏｕｎｔ−３［１］はＣＰＵ−３の担当範囲内の項目値番号の下位の桁の値１の出現回数が２回であることを表す。【００９４】
図２６Ａ、Ｂは多段階並列ソート方法の第１段階の累計数化ステップの説明図である。本例では、昇順ソートに対応して、項目値番号の下位の桁の値の昇順に累計数化を行う。ＣＰＵ−０は、配列Ｃｏｕｎｔの１行目（すなわち、項目値番号の下位の桁の値０）の累計数化を担当し、ＣＰＵ−１乃至ＣＰＵ−３は、それぞれ、配列Ｃｏｕｎｔの２乃至４行目（すなわち、項目値番号の下位の桁の値１乃至３）の累計数化を担当する。図２６Ａに示されるように、累計数化は配列Ｃｏｕｎｔの横方向（すなわち、添字が一致する行）を優先して行われ、次に、先行する行の累計数を後続する行の累計数に加算することにより、全体の累計数が決まる。尚、横方向の累計数化は、既に説明したように各ＣＰＵが並列に実行可能であるが、単一のＣＰＵが担当してもよい。【００９５】
図２７Ａ、Ｂ乃至図２９Ａ、Ｂは多段階並列ソート方法の第１段階においてレコード番号をさらなるレコード番号配列に格納する転送ステップの説明図である。転送ステップでは、各ＣＰＵは、レコード番号配列ＯｒｄＳｅｔから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列ＶＮｏから項目値番号の下位の桁の値を読み出し、さらに、この項目値番号の下位の桁の値を添字として、自プロセッサに関連付けられた累計数化されたＣｏｕｎｔ配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列ＯｒｄＳｅｔ’にレコード番号を格納すると共に、Ｃｏｕｎｔ配列の累計数値を１ずつインクリメントする。図２９Ｂはこのような転送ステップの結果として第１段階で得られたレコード番号配列ＯｒｄＳｅｔ’を表す。【００９６】
第２段階では、第１段階で得られたレコード番号配列ＯｒｄＳｅｔ’を初期条件として、年齢の項目値番号の上位の桁の値（ＤＩＶ  ４の値）に関する昇順ソートを実行する。【００９７】
図３０は、本発明の実施の形態にかかる多段階並列ソート方法の第２段階のステップ２２０２において、現在のレコード番号配列ＯｒｄＳｅｔ’を４台のＣＰＵに割り当て、それぞれのＣｏｕｎｔ配列を準備した状態を示す図である。【００９８】
図３１Ａ、Ｂ乃至図３３Ａ、Ｂは、多段階並列ソート方法の第２段階のカウントステップの説明図である。図３１Ａのサブステップ１では、たとえば、ＣＰＵ−０は、ＯｒｄＳｅｔ’［０］の値２を読み出し、読み出された値２を添字として、ＶＮｏ［２］の値４を読み出し、この値１の４で割った商（ＤＩＶ４）の値１を添字として、Ｃｏｕｎｔ−０［１］の値０を１にインクリメントする。同様に、ＣＰＵ−１は、ＯｒｄＳｅｔ’［５］の値１２を読み出し、この値１２を添字として、ＶＮｏ［１２］の値４を読み出し、この値４のＤＩＶ４の値１を添字として、Ｃｏｕｎｔ−１［１］の値０を１にインクリメントする。以下、図３１Ｂのサブステップ２、図３２Ａのサブステップ３、図３２Ｂのサブステップ４及び図３３Ａのサブステップ５を実行することにより、図３３Ｂに示されるような第２段階のカウントアップ結果が得られる。図３１Ａ、Ｂ〜３３Ａ、Ｂにおいて、配列Ｃｏｕｎｔ−０の要素Ｃｏｕｎｔ−０［ｉ］は、ＣＰＵ−０が担当した配列ＯｒｄＳｅｔ’のＯｒｄＳｅｔ’［０］からＯｒｄＳｅｔ［４］の範囲内の各レコードに対応する年齢の項目値番号の上位の桁の値ｉの出現回数を表わしている。たとえば、Ｃｏｕｎｔ−０［０］は、ＣＰＵ−０の担当範囲内の項目値番号の上位の桁の値０の出現回数が４回であることを表し、Ｃｏｕｎｔ−３［１］はＣＰＵ−３の担当範囲内の項目値番号の上位の桁の値１の出現回数が０回であることを表す。【００９９】
図３４は多段階並列ソート方法の第２段階の累計数化ステップの説明図である。本例では、昇順ソートに対応して、項目値番号の上位の桁の値の昇順に累計数化を行う。多段階化によって項目値番号の上位の桁の値の個数は２個に削減されているので、本例では、たとえば、ＣＰＵ−０がすべての値の累計数化を担当する。図３４Ａに示されるように、ＣＰＵ−０は、Count[0][0]、Count[1][0]、Count[2][0]、Count[3][0]、Count[0][1]、Count[1][1]、Count[2][1]、及び、Count[3][1]の順に累計数化を行う。勿論、本例の場合に、ＣＰＵ−０とＣＰＵ−１の２台のＣＰＵに項目値番号の上位の桁の値０と１を割り当て、２台のＣＰＵが累計数化演算を行ってもよい。【０１００】
図３５Ａ、Ｂ乃至図３７Ａ、Ｂは多段階並列ソート方法の第２段階においてレコード番号をさらなるレコード番号配列に格納する転送ステップの説明図である。転送ステップでは、各ＣＰＵは、レコード番号配列ＯｒｄＳｅｔから自分が担当する範囲内のレコード番号を読み出し、次に、そのレコード番号を添字として、ポインタ配列ＶＮｏから項目値番号の上位の桁の値を読み出し、さらに、この項目値番号の上位の桁の値を添字として、自プロセッサに関連付けられた累計数化されたＣｏｕｎｔ配列から累計数値を読み出し、この読み出された累計数値をポイントしてさらなるレコード番号配列ＯｒｄＳｅｔ”にレコード番号を格納すると共に、Ｃｏｕｎｔ配列の累計数値を１ずつインクリメントする。図３７Ｂはこのような転送ステップの結果として第２段階で得られたレコード番号配列ＯｒｄＳｅｔ”を表す。【０１０１】
本実施例の多段階並列ソート方法は項目値番号の下位の桁と上位の桁の２段階により構成されているので、これ以上のソート処理は行われない。したがって、第２段階で得られたレコード番号配列ＯｒｄＳｅｔ”が最初のレコード番号配列ＯｒｄＳｅｔを年齢に関して昇順にソートを行った結果である。【０１０２】
図３８Ａ〜Ｃ及び図３９Ａ、Ｂは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる昇順の多段階並列ソート方法を適用した結果を示す図である。本例では、年齢に関する昇順ソートを行ったので、結果のレコード番号配列ＯｒｄＳｅｔ”には、年齢の項目値として１６歳、１８歳、２０歳、２１歳及び２３歳を有するレコードが年齢順に並んでいることがわかる。また、年齢が一致するレコードの順番は、元のレコード番号配列ＯｒｄＳｅｔ中の順番が保存されている。この結果は、図１４Ａ〜Ｃ及び図１５Ａ、Ｂに示された本発明の実施の形態にかかる昇順の並列ソート方法を図４Ｂのデータ構造に適用した結果と一致している。【０１０３】
また、上記の多段階並列ソート方法は昇順ソートであるが、本発明の多段階並列ソートは降順ソートでも同様に動作する。さらに、既に説明したように、多段階並列ソートの各段階における累計数化演算は、複数台のプロセッサで並列処理してもよく、或いは、少なくとも１台、好ましくは、１台のプロセッサが単独で処理してもよい。【０１０４】
［多段階ソート］
上記の多段階並列ソートは、最下位の桁から始めて順番に現在の桁に関するソート処理を行い、最後に最上位の桁に関するソート処理を行うことによって最終的なソートを完了している。これに対して、最上位の桁から始めて順番に現在の桁に関するソート処理を行い、最後に最下位の桁に関するソート処理を行うことによって最終的なソートを完了することも可能である。以下では、このような最上位から最下位の順にソート処理を多段化する方法を簡単に説明する。【０１０５】
本例では、図４０に示されるようなデータ構造を利用する。また、本例では、ＣＰＵの台数は１台とする。また、以下では、年齢の項目に関して、年齢の昇順にソートする場合を考える。レコードの総数はレコード番号０からレコード番号１９までの２０個であり、項目値番号は０から８までの９個である。すなわち、実際の年齢の値は、１５、１６、１８、１９、２０、２１、２３、２５及び２８の９通りである。図４０のデータ構造では、年齢に関する項目値番号ＶＮｏは０から８までの値を取り得るので、基数＝４として項目値番号を分解すると、項目値番号を４で割った商が上の桁の値であり、項目値番号のモジュロ（４）の値が下の桁の値である。項目値番号の上の桁は０、１及び２の３通りの値を取り、下の桁は０、１、２及び３の４通りの値を取り得る。【０１０６】
最初に、第１段階において、上の桁の値０、１及び２の出現回数をカウントするための配列Ｃｏｕｎｔ−１を準備し、要素を０で初期化する。たとえば、Count-1[0]は、項目値番号の上位の桁の値が０であるレコードの個数をカウントするための領域である。【０１０７】
次に、レコード番号配列ＯｒｄＳｅｔの先頭の要素（すなわち、レコード）から順番に、その要素に対応する項目値番号を配列ＶＮｏから読み出し、その項目値番号を４で割った商の値をポインタとして用いて、配列Ｃｏｕｎｔ−１の要素の値をインクリメントする。図４１Ａ〜Ｄは、ＯｒｄＳｅｔ［０］＝０、ＯｒｄＳｅｔ［７］＝７、及び、ＯｒｄＳｅｔ［１９］＝１９の３個のレコード番号について、項目値番号の上位の桁の値を算出し、該当するカウンタをカウントアップし、次に累計数化する例の説明図である。図４１Ｃからわかるように、この第１段階のカウントアップ処理により、項目値番号の上位の桁の値が０であるレコードの個数は１２個、上位の桁の値が１であるレコードの個数は７個、上位の桁の値が２であるレコードの個数は１個である。さらに、図４１Ｄに示されるように、このカウント値を累計数化する。【０１０８】
次に、項目値番号の上位の桁の値の出現回数が累計数化された配列Ａｇｇｒ−１を用いて、レコード番号配列ＯｒｄＳｅｔをさらなるレコード番号配列ＯｒｄＳｅｔ’に変換する。具体的には、ＯｒｄＳｅｔ［ｉ］＝ｊであるならば、ＶＮｏ［ｊ］を読み出し、このＶＮｏ［ｊ］を４で割った商（ＶＮｏ［ｊ］  ＤＩＶ  ４）をｋとすると、Ａｇｇｒ−１［ｋ］の値を読み出し、ＯｒｄＳｅｔ［Ａｇｇｒ−１［ｋ］］にレコード番号ｊを設定し、Ａｇｇｒ−１［ｋ］をインクリメントする。図４２Ａ、Ｂは、このような多段階ソートにおけるレコード番号転送処理の説明図であり、図４２ＡはＯｒｄＳｅｔ［０］の転送を、図４２ＢはＯｒｄＳｅｔ［１９］の転送を表している。図４３は、第１段階のレコード番号転送の結果のレコード番号配列ＯｒｄＳｅｔ’と、上位の桁の値が分布する範囲とを表している。たとえば、上位の桁の値が０であるレコードはレコード番号配列ＯｒｄＳｅｔ’のＯｒｄＳｅｔ’［０］からＯｒｄＳｅｔ’［１１］の範囲（区間０）に分布し、上位の桁の値が１であるレコードはレコード番号配列ＯｒｄＳｅｔ’のＯｒｄＳｅｔ’［１２］からＯｒｄＳｅｔ’［１８］の範囲（区間１）に分布し、上位の桁の値が２であるレコードはレコード番号配列ＯｒｄＳｅｔ’のＯｒｄＳｅｔ’［１９］（区間２）に存在する。【０１０９】
次に、多段階ソートの第２段階では、各区間内で、項目値番号の下位の桁の値によってレコード番号をソートする。たとえば、ＯｒｄＳｅｔ’の区間１は、ＯｒｄＳｅｔ”の対応した区間１へ転送される。第２段階のソートでは、既に上位の桁で区間が定められているので、レコード番号が区間外に転送されることはない。【０１１０】
図４４は、多段階ソートの第２段階の初期状態を表す図である。以下の説明では、ＯｒｄＳｅｔ’の区間１について説明する。たとえば、複数台のプロセッサが存在する場合には、区間ごとにプロセッサを割り当てることにより、以下の処理を並列化することも可能である。Ｃｏｕｎｔ−２は区間１内で項目値番号の下位の桁の値（０，１，２，３）の出現回数をカウントするための配列である。【０１１１】
図４５Ａ〜Ｃは、多段階ソートの第２段階のカウントアップ及び累計数化の説明図である。図４５Ａから始めて順番にカウントアップすることにより、図４５Ｂに示されるようなカウントアップ配列が得られる。このカウントアップ配列は、図４５Ｃに示されるように累計数化される。【０１１２】
最後に、第２の累計数配列Ａｇｇｒ−２をポインタとして利用して、レコード番号配列ＯｒｄＳｅｔ’の区間１をレコード番号配列ＯｒｄＳｅｔ”の区間１へ転送することにより、多段階ソートが完了する。図４６Ａ、Ｂは、多段階ソートの第２段階のレコード番号転送の説明図である。具体的には、ＯｒｄＳｅｔ’［ｉ］＝ｊであるならば、ＶＮｏ［ｊ］を読み出し、このＶＮｏ［ｊ］を４で割った余り（ＶＮｏ［ｊ］  ＭＯＤ  ４）をｋとすると、Ａｇｇｒ−２［ｋ］の値を読み出し、ＯｒｄＳｅｔ”［Ａｇｇｒ−２［ｋ］］にレコード番号ｊを設定し、Ａｇｇｒ−２［ｋ］をインクリメントする。図４６ＡはＯｒｄＳｅｔ’［１４］の転送を、図４６ＢはＯｒｄＳｅｔ’［１８］の転送を表している。図４６ＢのＯｒｄＳｅｔ”の区間１は、区間１の最終的なソート結果を表している。【０１１３】
区間１と同様に、その他の区間０、区間２についても第２段階のカウントアップ、累計数化、及び、レコード番号転送を適用することにより、レコード番号配列ＯｒｄＳｅｔの全体がレコード番号配列ＯｒｄＳｅｔ”へ転送され、ソートが完了する。【０１１４】
前述したように、本発明の実施の形態においては、コンピュータシステム１０にレコードの所定の項目の項目値に応じてレコード順を並べ替えるプログラムを実行させる。より具体的には、本実施の形態においては、以下のように、プログラムは、各ＣＰＵに、上述した処理ステップを実行させ、或いは、上述した機能を実現させる。【０１１５】
本実施の形態において、コンピュータシステム１０には、ＯＳ（たとえば、リナックス（Ｌｉｎｕｘ：登録商標））が搭載される。初期的には、ＯＳの制御にしたがって、あるＣＰＵ（たとえば、ＣＰＵ１２−１）が、プログラムをメモリ（たとえば共有メモリ１４）にロードする。プログラムがメモリにロードされると、ＣＰＵ１２−１、１２−２、．．．、１２−ｐの各々が処理を実行すべき場合には、ＯＳの制御の下、各ＣＰＵに、それぞれ、所定の機能を実現させる。つまり、各ＣＰＵが、共有メモリ１４に記憶されたプログラム中の所定の処理ステップを読み出し、当該処理ステップを実行する。その一方、特定のＣＰＵが処理をすべき場合には、ＯＳの制御の下、当該特定のＣＰＵに、他の所定の機能を実現させる。つまり、特定のＣＰＵのみが、共有メモリ１４に記憶されたプログラム中の他の所定の処理ステップを読み出し、当該他の所定の処理ステップを実行する。なお、各ＣＰＵが実行するプログラムの格納場所は、上記共有メモリ１４に限定されず、各ＣＰＵに付随するそれぞれのローカルメモリ（図示せず）でもよい。【０１１６】
このように、本実施の形態においては、ＯＳの制御の下、プログラムは、各ＣＰＵに所定の機能を実現させるとともに、必要に応じて、特定のＣＰＵに、他の所定の機能を実現させることができる。【０１１７】
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【図面の簡単な説明】
【０１１８】
【図１】図１は本発明の実施の形態にかかるコンピュータシステムの概要図である。
【図２】図２はデータ管理機構を説明するための表形式データの一例を表す図である。
【図３】図３は本発明の実施の形態にかかるデータ管理機構の説明図である。
【図４】図４Ａ、Ｂは本発明の実施の形態にかかるソート対象のデータ構造の説明図である。
【図５】図５は本発明の実施の形態にかかる並列ソート方法のフローチャートである。
【図６】図６は本発明の実施の形態にかかる並列ソート方法の初期化ステップの説明図である。
【図７】図７Ａ、Ｂは本発明の実施の形態にかかる並列ソート方法のカウントアップステップの説明図（その１）である。
【図８】図８Ａ、Ｂは本発明の実施の形態にかかる並列ソート方法のカウントアップステップの説明図（その２）である。
【図９】図９Ａ、Ｂは本発明の実施の形態にかかる並列ソート方法のカウントアップステップの説明図（その３）である。
【図１０】図１０Ａ、Ｂは本発明の実施の形態にかかる昇順の並列ソート方法の累計数化ステップの説明図である。
【図１１】図１１Ａ、Ｂは本発明の実施の形態にかかる昇順の並列ソート方法の転送ステップの説明図（その１）である。
【図１２】図１２Ａ、Ｂは本発明の実施の形態にかかる昇順の並列ソート方法の転送ステップの説明図（その２）である。
【図１３】図１３Ａ、Ｂは本発明の実施の形態にかかる昇順の並列ソート方法の転送ステップの説明図（その３）である。
【図１４】図１４Ａ〜Ｃは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる昇順の並列ソート方法を適用した結果を示す図（その１）である。
【図１５】図１５Ａ、Ｂは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる昇順の並列ソート方法を適用した結果を示す図（その２）である。
【図１６】図１６Ａ、Ｂは本発明の実施の形態にかかる降順の並列ソート方法の累計数化ステップの説明図である。
【図１７】図１７Ａ、Ｂは本発明の実施の形態にかかる降順の並列ソート方法の転送ステップの説明図（その１）である。
【図１８】図１８Ａ、Ｂは本発明の実施の形態にかかる降順の並列ソート方法の転送ステップの説明図（その２）である。
【図１９】図１９Ａ、Ｂは本発明の実施の形態にかかる降順の並列ソート方法の転送ステップの説明図（その３）である。
【図２０】図２０Ａ、Ｂは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる降順の並列ソート方法を適用した結果を示す図（その１）である。
【図２１】図２１Ａ〜Ｃは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる降順の並列ソート方法を適用した結果を示す図（その２）である。
【図２２】図２２は本発明の実施の形態にかかる多段階並列ソート方法のフローチャートである。
【図２３】図２３Ａ、Ｂは本発明の実施の形態にかかる多段階並列ソート方法の第１段階のカウントアップステップの説明図（その１）である。
【図２４】図２４Ａ、Ｂは本発明の実施の形態にかかる多段階並列ソート方法の第１段階のカウントアップステップの説明図（その２）である。
【図２５】図２５Ａ、Ｂは本発明の実施の形態にかかる多段階並列ソート方法の第１段階のカウントアップステップの説明図（その３）である。
【図２６】図２６Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第１段階の累計数化ステップの説明図である。
【図２７】図２７Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第１段階の転送ステップの説明図（その１）である。
【図２８】図２８Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第１段階の転送ステップの説明図（その２）である。
【図２９】図２９Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第１段階の転送ステップの説明図（その３）である。
【図３０】図３０は本発明の実施の形態にかかる多段階並列ソート方法の第２段階の初期化ステップの説明図である。
【図３１】図３１Ａ、Ｂは本発明の実施の形態にかかる多段階並列ソート方法の第２段階のカウントアップステップの説明図（その１）である。
【図３２】図３２Ａ、Ｂは本発明の実施の形態にかかる多段階並列ソート方法の第２段階のカウントアップステップの説明図（その２）である。
【図３３】図３３Ａ、Ｂは本発明の実施の形態にかかる多段階並列ソート方法の第２段階のカウントアップステップの説明図（その３）である。
【図３４】図３４は本発明の実施の形態にかかる昇順の多段階並列ソート方法の第２段階の累計数化ステップの説明図である。
【図３５】図３５Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第２段階の転送ステップの説明図（その１）である。
【図３６】図３６Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第２段階の転送ステップの説明図（その２）である。
【図３７】図３７Ａ、Ｂは本発明の実施の形態にかかる昇順の多段階並列ソート方法の第２段階の転送ステップの説明図（その３）である。
【図３８】図３８Ａ〜Ｃは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる昇順の多段階並列ソート方法を適用した結果を示す図（その１）である。
【図３９】図３９Ａ、Ｂは、図４Ｂに示されたデータ構造に対して本発明の実施の形態にかかる昇順の多段階並列ソート方法を適用した結果を示す図（その２）である。
【図４０】図４０は多段階ソートを説明するためのデータ構造図である。
【図４１】図４１Ａ〜Ｄは多段階ソートの第１段階のカウントアップ及び累計数化の説明図である。
【図４２】図４２Ａ、Ｂは多段階ソートの第１段階のレコード番号転送の説明図である。
【図４３】図４３は多段階ソートの第１段階のレコード番号転送の結果の説明図である。
【図４４】図４４は多段階ソートの第２段階の初期状態を表す図である。
【図４５】図４５Ａ〜Ｃは多段階ソートの第２段階のカウントアップ及び累計数化の説明図である。
【図４６】図４６Ａ、Ｂは多段階ソートの第２段階のレコード番号転送の説明図である。
【符号の説明】
【０１１９】
１０        コンピュータシステム
１２−１，１２−２，・・・，１２−ｐ        ＣＰＵ
１４        共有メモリ
１６        ＲＯＭ
１８        固定記憶装置
２０        ＣＤ−ＲＯＭドライバ
２２        Ｉ／Ｆ
２４        入力装置
２６        表示装置
【図１】
0004339381.tif 000002
【図２】
0004339381.tif 000003
【図３】
0004339381.tif 000004
【図４】
0004339381.tif 000005
【図５】
0004339381.tif 000006
【図６】
0004339381.tif 000007
【図７】
0004339381.tif 000008
【図８】
0004339381.tif 000009
【図９】
0004339381.tif 000010
【図１０】
0004339381.tif 000011
【図１１】
0004339381.tif 000012
【図１２】
0004339381.tif 000013
【図１３】
0004339381.tif 000014
【図１４】
0004339381.tif 000015
【図１５】
0004339381.tif 000016
【図１６】
0004339381.tif 000017
【図１７】
0004339381.tif 000018
【図１８】
0004339381.tif 000019
【図１９】
0004339381.tif 000020
【図２０】
0004339381.tif 000021
【図２１】
0004339381.tif 000022
【図２２】
0004339381.tif 000023
【図２３】
0004339381.tif 000024
【図２４】
0004339381.tif 000025
【図２５】
0004339381.tif 000026
【図２６】
0004339381.tif 000027
【図２７】
0004339381.tif 000028
【図２８】
0004339381.tif 000029
【図２９】
0004339381.tif 000030
【図３０】
0004339381.tif 000031
【図３１】
0004339381.tif 000032
【図３２】
0004339381.tif 000033
【図３３】
0004339381.tif 000034
【図３４】
0004339381.tif 000035
【図３５】
0004339381.tif 000036
【図３６】
0004339381.tif 000037
【図３７】
0004339381.tif 000038
【図３８】
0004339381.tif 000039
【図３９】
0004339381.tif 000040
【図４０】
0004339381.tif 000041
【図４１】
0004339381.tif 000042
【図４２】
0004339381.tif 000043
【図４３】
0004339381.tif 000044
【図４４】
0004339381.tif 000045
【図４５】
0004339381.tif 000046
【図４６】
0004339381.tif 000047