(57)【要約】【課題】対称型マルチプロセッサシステム上での並列クイックソート処理におけるプロセッサの使用効率を向上させる。【解決手段】データ入力処理手段２は、入力データ１を主記憶領域５に格納する。スレッド起動処理手段３は、任意のクイックソート処理スレッドｘｉを起動する。クイックソート処理スレッドｘｉは、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返す。ソート処理終了待ち手段６は、全てのクイックソート処理スレッドｘ１〜ｘｍが待機状態になるまで待機する。データ出力処理手段７は、主記憶領域５上のソート済データを出力データ８として出力する。【選択図】        図１
2005018158.tif 000002
【特許請求の範囲】
【請求項１】
対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート装置において、
１つ以上のクイックソート処理スレッドが用意されたスレッドプールと、
入力データを主記憶領域に格納するデータ入力処理手段と、
前記データ入力処理手段により前記主記憶領域に入力データが格納された後に前記スレッドプールにある任意のクイックソート処理スレッドを起動するスレッド起動処理手段と、
前記スレッド起動処理手段の実行後に全てのクイックソート処理スレッドが待機状態になるまで待ち合わせるソート処理終了待ち手段と、
前記ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になったことが判断された後に前記主記憶領域上のソート済データを出力データとして出力するデータ出力処理手段とを備え、
前記クイックソート処理スレッドが、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返すことを特徴とする並列クイックソート装置。
【請求項２】
対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート装置において、
実行フラグ，開始位置，終了位置，スタックカウンタおよびスタック領域からなるクイックソート処理スレッド管理テーブルをもち、初期処理手段，基準値選出処理手段，分類処理手段，ブロック処理スレッド決定手段，再帰処理手段および待機処理手段を含む１つ以上のクイックソート処理スレッドを用意するスレッドプールと、
入力データを主記憶領域に格納するデータ入力処理手段と、
前記データ入力処理手段により前記主記憶領域に入力データが格納された後に前記スレッドプールにある任意のクイックソート処理スレッドを起動するスレッド起動処理手段と、
前記スレッド起動処理手段の実行後に全てのクイックソート処理スレッドが待機状態になるまで待ち合わせるソート処理終了待ち手段と、
前記ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になったことが判断された後に前記主記憶領域上のソート済データを出力データとして出力するデータ出力処理手段とを備え、
前記クイックソート処理スレッドが、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返すことを特徴とする並列クイックソート装置。
【請求項３】
前記スレッド起動処理手段が、前記スレッドプールにある任意のクイックソート処理スレッドを１つ選択し、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルに前記主記憶領域に格納した入力データの開始位置および終了位置をセットし、当該クイックソート処理スレッド管理テーブルの実行フラグをオンにして当該クイックソート処理スレッドを起動させることを特徴とする請求項２記載の並列クイックソート装置。
【請求項４】
前記初期処理手段が、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックし、レコード数が１以下ならば当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、レコード数が１より大きいならば当該クイックソート処理スレッド管理テーブルのスタックカウンタを０にすることを特徴とする請求項２記載の並列クイックソート装置。
【請求項５】
前記基準値選出処理手段が、当該クイックソート処理スレッド管理テーブルの開始位置から終了位置までのブロック内にある任意のレコードを基準値として選出することを特徴とする請求項２記載の並列クイックソート装置。
【請求項６】
前記分類処理手段が、前記基準値選出処理手段により選出された基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分けることを特徴とする請求項２記載の並列クイックソート装置。
【請求項７】
前記ブロック処理スレッド決定手段が、各クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグを確認して待機中のクイックソート処理スレッドがあるかどうかをチェックし、待機中のクイックソート処理スレッドがない場合は、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にブロックの開始位置および終了位置をセットしてスタックカウンタを１増やし、待機中のクイックソート処理スレッドがある場合は、起動する別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットし、別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグをオンにして別のクイックソート処理スレッドを起動し、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットすることを特徴とする請求項２記載の並列クイックソート装置。
【請求項８】
前記再帰処理手段が、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックし、レコード数が１以下の場合は当該クイックソート処理スレッド管理テーブルのスタックカウンタをチェックし、スタックカウンタが０の場合は当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、スタックカウンタが１以上の場合は、当該クイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にある開始位置および終了位置を当該クイックソート処理スレッド管理テーブルの開始位置および終了位置にセットしてスタックカウンタの値を１減らし、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックすることを特徴とする請求項２記載の並列クイックソート装置。
【請求項９】
前記待機処理手段が、当該クイックソート処理スレッド管理テーブルの実行フラグがオンになるまで待機し、実行フラグがオンになると前記初期処理手段に制御を移行することを特徴とする請求項２記載の並列クイックソート装置。
【請求項１０】
対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート方法において、
複数のブロックへの分割を任意の基準値を使用して再帰的に行い、分割された複数のブロックの個別のクイックソート処理について、同一のクイックソート処理スレッドで行うか、別々のクイックソート処理スレッドで行うかをプロセッサの負荷の状況に合わせて選択することを特徴とする並列クイックソート方法。
【請求項１１】
対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート方法において、
スレッドプールに１つ以上のクイックソート処理スレッドを用意する工程と、
データ入力処理手段により入力データを主記憶領域に格納する工程と、
スレッド起動処理手段によりスレッドプールにある任意のクイックソート処理スレッドを起動する工程と、
クイックソート処理スレッドにより、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返す工程と、
ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、
データ出力処理手段により主記憶領域上のソート済データを出力データとして出力する工程と
を含むことを特徴とする並列クイックソート方法。
【請求項１２】
対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート方法において、
スレッドプールに、実行フラグ，開始位置，終了位置，スタックカウンタおよびスタック領域からなるクイックソート処理スレッド管理テーブルをもち、初期処理手段，基準値選出処理手段，分類処理手段，ブロック処理スレッド決定手段，再帰処理手段および待機処理手段を含む１つ以上のクイックソート処理スレッドを用意する工程と、
データ入力処理手段により入力データを主記憶領域に格納する工程と、
スレッド起動処理手段により、スレッドプールにある任意のクイックソート処理スレッドを１つ選択し、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルに主記憶領域に格納した入力データの開始位置および終了位置をセットし、当該クイックソート処理スレッド管理テーブルの実行フラグをオンにして当該クイックソート処理スレッドを起動させる工程と、
初期処理手段により、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックし、レコード数が１以下ならば当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、レコード数が１より大きいならば当該クイックソート処理スレッド管理テーブルのスタックカウンタを０にする工程と、
基準値選出処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置から終了位置までのブロック内にある任意のレコードを基準値として選出する工程と、
分類処理手段により、基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分ける工程と、
ブロック処理スレッド決定手段により、各クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグを確認して待機中のクイックソート処理スレッドがあるかどうかをチェックし、待機中のクイックソート処理スレッドがない場合は、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にブロックの開始位置および終了位置をセットしてスタックカウンタを１増やし、待機中のクイックソート処理スレッドがある場合は、起動する別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットし、別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグをオンにして別のクイックソート処理スレッドを起動し、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットする工程と、
再帰処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックし、レコード数が１以下の場合は当該クイックソート処理スレッド管理テーブルのスタックカウンタをチェックし、スタックカウンタが０の場合は当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、スタックカウンタが１以上の場合は、当該クイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にある開始位置および終了位置を当該クイックソート処理スレッド管理テーブルの開始位置および終了位置にセットしてスタックカウンタの値を１減らし、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックする工程と、
待機処理手段により、当該クイックソート処理スレッド管理テーブルの実行フラグがオンになるまで待機し、実行フラグがオンになると初期処理手段に制御を移行する工程と、
ソート処理終了待ち手段により、全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、
データ出力処理手段により、主記憶領域上のソート済データを出力データとして出力する工程と
を含むことを特徴とする並列クイックソート方法。
【請求項１３】
対称型マルチプロセッサシステムにおいて、共用メモリに載せたデータの複数のブロックへの分割を任意の基準値を使用して再帰的に行い、分割された複数のブロックの個別のクイックソート処理について、同一のクイックソート処理スレッドで行うか、別々のクイックソート処理スレッドで行うかをプロセッサの負荷の状況に合わせて選択することを実行させるための並列クイックソートプログラム。
【請求項１４】
対称型マルチプロセッサシステムに、スレッドプールに１つ以上のクイックソート処理スレッドを用意する工程と、データ入力処理手段により入力データを主記憶領域に格納する工程と、スレッド起動処理手段によりスレッドプールにある任意のクイックソート処理スレッドを起動する工程と、クイックソート処理スレッドにより、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返す工程と、ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、データ出力処理手段により主記憶領域上のソート済データを出力データとして出力する工程とを実行させるための並列クイックソートプログラム。
【請求項１５】
対称型マルチプロセッサシステムに、スレッドプールに、実行フラグ，開始位置，終了位置，スタックカウンタおよびスタック領域からなるクイックソート処理スレッド管理テーブルをもち、初期処理手段，基準値選出処理手段，分類処理手段，ブロック処理スレッド決定手段，再帰処理手段および待機処理手段を含む１つ以上のクイックソート処理スレッドを用意する工程と、データ入力処理手段により入力データを主記憶領域に格納する工程と、スレッド起動処理手段により、スレッドプールにある任意のクイックソート処理スレッドを１つ選択し、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルに主記憶領域に格納した入力データの開始位置および終了位置をセットし、当該クイックソート処理スレッド管理テーブルの実行フラグをオンにして当該クイックソート処理スレッドを起動させる工程と、初期処理手段により、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックし、レコード数が１以下ならば当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、レコード数が１より大きいならば当該クイックソート処理スレッド管理テーブルのスタックカウンタを０にする工程と、基準値選出処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置から終了位置までのブロック内にある任意のレコードを基準値として選出する工程と、分類処理手段により、基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分ける工程と、ブロック処理スレッド決定手段により、各クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグを確認して待機中のクイックソート処理スレッドがあるかどうかをチェックし、待機中のクイックソート処理スレッドがない場合は、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にブロックの開始位置および終了位置をセットしてスタックカウンタを１増やし、待機中のクイックソート処理スレッドがある場合は、起動する別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットし、別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグをオンにして別のクイックソート処理スレッドを起動し、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットする工程と、再帰処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックし、レコード数が１以下の場合は当該クイックソート処理スレッド管理テーブルのスタックカウンタをチェックし、スタックカウンタが０の場合は当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、スタックカウンタが１以上の場合は、当該クイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にある開始位置および終了位置を当該クイックソート処理スレッド管理テーブルの開始位置および終了位置にセットしてスタックカウンタの値を１減らし、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックする工程と、待機処理手段により、当該クイックソート処理スレッド管理テーブルの実行フラグがオンになるまで待機し、実行フラグがオンになると初期処理手段に制御を移行する工程と、ソート処理終了待ち手段により、全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、データ出力処理手段により、主記憶領域上のソート済データを出力データとして出力する工程とを実行させるための並列クイックソートプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は並列クイックソート装置，並列クイックソート方法および並列クイックソートプログラムに関し、特に対称型マルチプロセッサ（ＳＭＰ；Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｌｅ  Ｐｒｏｃｅｓｓｏｒ）システム上で共用メモリに載せたデータを複数のブロックに分け複数のクイックソート処理スレッドを利用して並列にクイックソートを行う並列クイックソート装置，並列クイックソート方法および並列クイックソートプログラムに関する。
【０００２】
【従来の技術】
データを複数のブロックに分割して並列にソートを行う方式の従来技術として、データ入力中に並行してソートを実行可能とする技術がある（例えば、特許文献１参照）。この技術では、図７に示すように、データ入力処理手段７２が入力データ７１を入力し複数のブロックに分割してソート・マージ用主記憶領域７５に記憶するとともにソート処理手段７３の複数のスレッドによるソート・マージ用主記憶領域７５内の各ブロックに対するソート処理を起動し、ソート処理手段７３の各スレッドがソート・マージ用主記憶領域７５内の各ブロック毎にソート処理を実行し、全ソート処理終了待ち手段７４が全ソート処理の終了を待ち合わせ、マージ・データ出力処理手段７６がソート処理が終了したソート・マージ用主記憶領域７５内の全ブロックのデータに対してマージ処理を行ってソート結果を出力する。
【０００３】
また、基準値を使用して複数のブロックに分割する方式の従来技術がある（例えば、特許文献２参照）。この技術は、図８に示すように、プロセッサＰ２，…に、下位のプロセッサの個数Ｎを判断する判断回路８６と、（Ｎ−１）個のデータを基準データとして入力データの中から選出する選出回路８７と、（Ｎ−１）個の基準データを基に残りの入力データをＮ個のグループに分類する比較分類回路８９とを装備して、下位のプロセッサの個数に応じて入力データを分類することにより、各プロセッサＰ２，…が多分木形式に結合されて、そのネットワークを有効に利用した並列クイックソート処理を行えるようにしたものである。
【０００４】
【特許文献１】
特開２０００−３０５７５１号公報（第３−４頁、図１）
【特許文献２】
特開平０４−２６４６２１号公報（第３頁、図１）
【０００５】
【発明が解決しようとする課題】
特許文献１記載の技術には、データ入力と並行にソートを実行できることがメリットとならない環境において、例えば、入力データを主記憶領域に格納する処理が高速に終わる場合、または最初から主記憶領域上にデータがある場合は、分割した各ブロック間で負荷にばらつきがあるときに、各ブロックの処理が完了するまで、最後のブロックのマージ処理を実行できないため、プロセッサの使用効率が下がる可能性があるという問題点がある。
【０００６】
また、特許文献２記載の技術には、基準値によるブロックの分割の長所を生かせない仕組みとなっているという問題点がある。すなわち、特許文献２記載の技術では、各プロセッサは固定で結合されているため、下位のプロセッサ以外の他のプロセッサを利用できない構造となっており、プロセッサ全体の使用効率は良くならなかった。また、下位のプロセッサが別用途で利用されている場合は、２重の負荷を掛けることになっていた。さらに、再帰的に実行する仕組みをもたないため、１つしかプロセッサがない場合、ソート処理を実行できなかった。
【０００７】
本発明の目的は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分割することを再帰的に繰り返すことにより、プロセッサの使用効率を向上させるようにした並列クイックソート装置を提供することにある。
【０００８】
本発明の他の目的は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分割することを再帰的に繰り返すことにより、プロセッサの使用効率を向上させるようにした並列クイックソート方法を提供することにある。
【０００９】
本発明の別の目的は、対称型マルチプロセッサシステム上で上記並列クイックソート方法を実現する並列クイックソート用プログラムを提供することにある。
【００１０】
【課題を解決するための手段】
本発明の並列クイックソート装置は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート装置において、１つ以上のクイックソート処理スレッドが用意されたスレッドプールと、入力データを主記憶領域に格納するデータ入力処理手段と、前記データ入力処理手段により前記主記憶領域に入力データが格納された後に前記スレッドプールにある任意のクイックソート処理スレッドを起動するスレッド起動処理手段と、前記スレッド起動処理手段の実行後に全てのクイックソート処理スレッドが待機状態になるまで待ち合わせるソート処理終了待ち手段と、前記ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になったことが判断された後に前記主記憶領域上のソート済データを出力データとして出力するデータ出力処理手段とを備え、前記クイックソート処理スレッドが、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返すことを特徴とする。
【００１１】
また、本発明の並列クイックソート装置は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート装置において、実行フラグ，開始位置，終了位置，スタックカウンタおよびスタック領域からなるクイックソート処理スレッド管理テーブルをもち、初期処理手段，基準値選出処理手段，分類処理手段，ブロック処理スレッド決定手段，再帰処理手段および待機処理手段を含む１つ以上のクイックソート処理スレッドを用意するスレッドプールと、入力データを主記憶領域に格納するデータ入力処理手段と、前記データ入力処理手段により前記主記憶領域に入力データが格納された後に前記スレッドプールにある任意のクイックソート処理スレッドを起動するスレッド起動処理手段と、前記スレッド起動処理手段の実行後に全てのクイックソート処理スレッドが待機状態になるまで待ち合わせるソート処理終了待ち手段と、前記ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になったことが判断された後に前記主記憶領域上のソート済データを出力データとして出力するデータ出力処理手段とを備え、前記クイックソート処理スレッドが、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返すことを特徴とする。
【００１２】
さらに、本発明の並列クイックソート装置は、前記スレッド起動処理手段が、前記スレッドプールにある任意のクイックソート処理スレッドを１つ選択し、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルに前記主記憶領域に格納した入力データの開始位置および終了位置をセットし、当該クイックソート処理スレッド管理テーブルの実行フラグをオンにして当該クイックソート処理スレッドを起動させることを特徴とする。
【００１３】
さらにまた、本発明の並列クイックソート装置は、前記初期処理手段が、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックし、レコード数が１以下ならば当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、レコード数が１より大きいならば当該クイックソート処理スレッド管理テーブルのスタックカウンタを０にすることを特徴とする。
【００１４】
また、本発明の並列クイックソート装置は、前記基準値選出処理手段が、当該クイックソート処理スレッド管理テーブルの開始位置から終了位置までのブロック内にある任意のレコードを基準値として選出することを特徴とする。
【００１５】
さらに、本発明の並列クイックソート装置は、前記分類処理手段が、前記基準値選出処理手段により選出された基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分けることを特徴とする。
【００１６】
さらにまた、本発明の並列クイックソート装置は、前記ブロック処理スレッド決定手段が、各クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグを確認して待機中のクイックソート処理スレッドがあるかどうかをチェックし、待機中のクイックソート処理スレッドがない場合は、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にブロックの開始位置および終了位置をセットしてスタックカウンタを１増やし、待機中のクイックソート処理スレッドがある場合は、起動する別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットし、別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグをオンにして別のクイックソート処理スレッドを起動し、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットすることを特徴とする。
【００１７】
また、本発明の並列クイックソート装置は、前記再帰処理手段が、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックし、レコード数が１以下の場合は当該クイックソート処理スレッド管理テーブルのスタックカウンタをチェックし、スタックカウンタが０の場合は当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、スタックカウンタが１以上の場合は、当該クイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にある開始位置および終了位置を当該クイックソート処理スレッド管理テーブルの開始位置および終了位置にセットしてスタックカウンタの値を１減らし、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックすることを特徴とする。
【００１８】
さらに、本発明の並列クイックソート装置は、前記待機処理手段が、当該クイックソート処理スレッド管理テーブルの実行フラグがオンになるまで待機し、実行フラグがオンになると前記初期処理手段に制御を移行することを特徴とする。
【００１９】
一方、本発明の並列クイックソート方法は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート方法において、複数のブロックへの分割を任意の基準値を使用して再帰的に行い、分割された複数のブロックの個別のクイックソート処理について、同一のクイックソート処理スレッドで行うか、別々のクイックソート処理スレッドで行うかをプロセッサの負荷の状況に合わせて選択することを特徴とする。
【００２０】
また、本発明の並列クイックソート方法は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート方法において、スレッドプールに１つ以上のクイックソート処理スレッドを用意する工程と、データ入力処理手段により入力データを主記憶領域に格納する工程と、スレッド起動処理手段によりスレッドプールにある任意のクイックソート処理スレッドを起動する工程と、クイックソート処理スレッドにより、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返す工程と、ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、データ出力処理手段により主記憶領域上のソート済データを出力データとして出力する工程とを含むことを特徴とする。
【００２１】
さらに、本発明の並列クイックソート方法は、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のスレッドを利用して並列にクイックソートを行う並列クイックソート方法において、スレッドプールに、実行フラグ，開始位置，終了位置，スタックカウンタおよびスタック領域からなるクイックソート処理スレッド管理テーブルをもち、初期処理手段，基準値選出処理手段，分類処理手段，ブロック処理スレッド決定手段，再帰処理手段および待機処理手段を含む１つ以上のクイックソート処理スレッドを用意する工程と、データ入力処理手段により入力データを主記憶領域に格納する工程と、スレッド起動処理手段により、スレッドプールにある任意のクイックソート処理スレッドを１つ選択し、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルに主記憶領域に格納した入力データの開始位置および終了位置をセットし、当該クイックソート処理スレッド管理テーブルの実行フラグをオンにして当該クイックソート処理スレッドを起動させる工程と、初期処理手段により、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックし、レコード数が１以下ならば当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、レコード数が１より大きいならば当該クイックソート処理スレッド管理テーブルのスタックカウンタを０にする工程と、基準値選出処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置から終了位置までのブロック内にある任意のレコードを基準値として選出する工程と、分類処理手段により、基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分ける工程と、ブロック処理スレッド決定手段により、各クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグを確認して待機中のクイックソート処理スレッドがあるかどうかをチェックし、待機中のクイックソート処理スレッドがない場合は、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にブロックの開始位置および終了位置をセットしてスタックカウンタを１増やし、待機中のクイックソート処理スレッドがある場合は、起動する別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットし、別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグをオンにして別のクイックソート処理スレッドを起動し、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットする工程と、再帰処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックし、レコード数が１以下の場合は当該クイックソート処理スレッド管理テーブルのスタックカウンタをチェックし、スタックカウンタが０の場合は当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、スタックカウンタが１以上の場合は、当該クイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にある開始位置および終了位置を当該クイックソート処理スレッド管理テーブルの開始位置および終了位置にセットしてスタックカウンタの値を１減らし、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックする工程と、待機処理手段により、当該クイックソート処理スレッド管理テーブルの実行フラグがオンになるまで待機し、実行フラグがオンになると初期処理手段に制御を移行する工程と、ソート処理終了待ち手段により、全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、データ出力処理手段により、主記憶領域上のソート済データを出力データとして出力する工程とを含むことを特徴とする。
【００２２】
他方、本発明の並列クイックソートプログラムは、対称型マルチプロセッサシステムにおいて、共用メモリに載せたデータの複数のブロックへの分割を任意の基準値を使用して再帰的に行い、分割された複数のブロックの個別のクイックソート処理について、同一のクイックソート処理スレッドで行うか、別々のクイックソート処理スレッドで行うかをプロセッサの負荷の状況に合わせて選択することを実行させることを特徴とする。
【００２３】
また、本発明の並列クイックソートプログラムは、対称型マルチプロセッサシステムに、スレッドプールに１つ以上のクイックソート処理スレッドを用意する工程と、データ入力処理手段により入力データを主記憶領域に格納する工程と、スレッド起動処理手段によりスレッドプールにある任意のクイックソート処理スレッドを起動する工程と、クイックソート処理スレッドにより、ソート対象ブロックに対して基準値を選出し、ソート対象ブロック内のレコードをさらに複数のブロックに振り分け、振り分けられた各ブロックを処理するクイックソート処理スレッドを決定する一連の処理を再帰的に繰り返す工程と、ソート処理終了待ち手段により全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、データ出力処理手段により主記憶領域上のソート済データを出力データとして出力する工程とを実行させることを特徴とする。
【００２４】
さらに、本発明の並列クイックソートプログラムは、対称型マルチプロセッサシステムに、スレッドプールに、実行フラグ，開始位置，終了位置，スタックカウンタおよびスタック領域からなるクイックソート処理スレッド管理テーブルをもち、初期処理手段，基準値選出処理手段，分類処理手段，ブロック処理スレッド決定手段，再帰処理手段および待機処理手段を含む１つ以上のクイックソート処理スレッドを用意する工程と、データ入力処理手段により入力データを主記憶領域に格納する工程と、スレッド起動処理手段により、スレッドプールにある任意のクイックソート処理スレッドを１つ選択し、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルに主記憶領域に格納した入力データの開始位置および終了位置をセットし、当該クイックソート処理スレッド管理テーブルの実行フラグをオンにして当該クイックソート処理スレッドを起動させる工程と、初期処理手段により、当該クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックし、レコード数が１以下ならば当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、レコード数が１より大きいならば当該クイックソート処理スレッド管理テーブルのスタックカウンタを０にする工程と、基準値選出処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置から終了位置までのブロック内にある任意のレコードを基準値として選出する工程と、分類処理手段により、基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分ける工程と、ブロック処理スレッド決定手段により、各クイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグを確認して待機中のクイックソート処理スレッドがあるかどうかをチェックし、待機中のクイックソート処理スレッドがない場合は、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にブロックの開始位置および終了位置をセットしてスタックカウンタを１増やし、待機中のクイックソート処理スレッドがある場合は、起動する別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットし、別のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの実行フラグをオンにして別のクイックソート処理スレッドを起動し、実行中のクイックソート処理スレッドのクイックソート処理スレッド管理テーブルの開始位置および終了位置にブロックの開始位置および終了位置をセットする工程と、再帰処理手段により、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックし、レコード数が１以下の場合は当該クイックソート処理スレッド管理テーブルのスタックカウンタをチェックし、スタックカウンタが０の場合は当該クイックソート処理スレッド管理テーブルの実行フラグをオフにし、スタックカウンタが１以上の場合は、当該クイックソート処理スレッド管理テーブルのスタックカウンタが指すスタック領域位置にある開始位置および終了位置を当該クイックソート処理スレッド管理テーブルの開始位置および終了位置にセットしてスタックカウンタの値を１減らし、当該クイックソート処理スレッド管理テーブルの開始位置および終了位置に基づいてレコード数を計算してチェックする工程と、待機処理手段により、当該クイックソート処理スレッド管理テーブルの実行フラグがオンになるまで待機し、実行フラグがオンになると初期処理手段に制御を移行する工程と、ソート処理終了待ち手段により、全てのクイックソート処理スレッドが待機状態になるまで待ち合わせる工程と、データ出力処理手段により、主記憶領域上のソート済データを出力データとして出力する工程とを実行させることを特徴とする。
【００２５】
本発明では、対称型マルチプロセッサシステム上で共用メモリに載せたデータを複数のブロックに分け複数のクイックソート処理スレッドを利用して並列にソートを行う並列クイックソート装置において、複数のブロックへの分割を任意の基準値を使用して行い、また、このブロックの分割処理を再帰的に行う。そして、分割された複数のブロックの個別のクイックソート処理について、同一のクイックソート処理スレッドで行うか、別々のクイックソート処理スレッドで行うかをプロセッサの負荷の状況に合わせて選択できる。
【００２６】
本発明では、特許文献１記載の技術の問題点に対して、ブロックの分割を再帰的に行うため、処理の各段階においてクイックソート処理スレッドの待機状態をチェックして起動することが可能になり、プロセッサの使用効率が向上する。
【００２７】
また、本発明では、特許文献２記載の技術の問題点に対して、複数のクイックソート処理スレッドを用意しクイックソート処理スレッドを任意のプロセッサ上で実行させるため、プロセッサが固定的に利用されるような問題が発生しない。また、生成するクイックソート処理スレッドの数をあらかじめ変更できるため、プロセッサの負荷状況に合わせてクイックソート処理がプロセッサにかける負荷の度合いをコントロールすることが可能となる。
【００２８】
なお、本発明では、スタックを使用することにより、１つのクイックソート処理スレッドで処理することが可能である。また、これにより、他のプロセッサが負荷が高い状態においても同一のプロセッサで処理することが可能となり、より柔軟なプロセッサの利用が可能となる。
【００２９】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照しながら詳細に説明する。
【００３０】
［第１の実施の形態］
図１を参照すると、本発明の第１の実施の形態に係る並列クイックソート装置は、データ入力処理手段２と、スレッド起動処理手段３と、スレッドプール４と、主記憶領域５と、ソート処理終了待ち手段６と、データ出力処理手段７とから、その主要部が構成されている。なお、図１中、符号１は入力データを、８は出力データをそれぞれ示す。
【００３１】
主記憶領域５を複数のプロセッサ（図示せず）で共有でき、入力データ１より主記憶領域５のサイズが大きい対称型マルチプロセッサシステム上で、図１に示すように、スレッドプール４にｍ（１≦ｍの整数）個のクイックソート処理スレッドｘ１〜ｘｍを用意する。
【００３２】
各クイックソート処理スレッドｘ１〜ｘｍは、初期処理手段１１と、基準値選出処理手段１２と、分類処理手段１３と、ブロック処理スレッド決定手段１４と、再帰処理手段１５と、待機処理手段１６とを含んで構成されている。各クイックソート処理スレッドｘ１〜ｘｍは、起動時に待機処理手段１６を実行中とする。
【００３３】
データ入力処理手段２は、記憶媒体、例えば外部ディスク装置に存在する入力データ１を主記憶領域５に格納する。
【００３４】
スレッド起動処理手段３は、待機中のクイックソート処理スレッドの内の任意の１つのクイックソート処理スレッドｘｉ（ｉは１≦ｉ≦ｍの整数）を起動し、待機処理手段１６から初期処理手段１１に制御を移行させる。
【００３５】
クイックソート処理終了待ち手段６は、スレッド起動処理手段３を実行後、全てのクイックソート処理スレッドｘ１〜ｘｍが待機状態になるまで待ち合わせる。
【００３６】
データ出力処理手段７は、クイックソート処理終了待ち手段６により、全てのクイックソート処理スレッドｘ１〜ｘｍが待機状態になったと判定されたならば、クイックソート処理が完了したので、主記憶領域５上のソート済データを出力データ８として記憶媒体、例えば外部ディスク装置などに出力する。
【００３７】
クイックソート処理スレッドｘ１〜ｘｍ内では、スレッド起動処理手段３や他のクイックソート処理スレッドのブロック処理スレッド決定手段１４により起動されるまで待機処理手段１６で待機する。
【００３８】
初期処理手段１１は、クイックソート処理スレッドｘ１〜ｘｍの起動後、初期処理を行う。詳しくは、初期処理手段１１は、ソート対象ブロックのレコード数をチェックし、レコード数が１より大きい場合は、スタックカウンタを０にして、基準値選出処理手段１２に制御を移行する。レコード数が１以下ならば、実行フラグをＯＦＦにして、待機処理手段１６に制御を移行する。
【００３９】
基準値選出処理手段１２は、ソート対象ブロック内の任意のレコードの値をクイックソートの基準値に選出する。
【００４０】
分類処理手段１３は、ソート対象ブロック内のレコード群を基準値より大きいレコード群と小さいレコード群との２つのブロックに分ける。
【００４１】
ブロック処理スレッド決定手段１４は、分類処理手段１３により２つに分けられた各ブロックについて、処理を行うクイックソート処理スレッドを決定する。詳しくは、まず、分けられたブロックの一方をソート対象ブロックとして同一のクイックソート処理スレッドｘｉ内で処理するか、または別のクイックソート処理スレッドｘｊ（ｊは１≦ｊ≦ｍ，ｊ≠ｉの整数）で処理するかをプロセッサの負荷の状況に合わせて決定する。プロセッサの負荷の状況は、スレッドプール４に待機中のクイックソート処理スレッドがあるかどうかで確認する。待機中のクイックソート処理スレッドがある場合は、その待機中のクイックソート処理スレッドを起動し、ソート対象ブロックの処理をさせる。また、待機中のクイックソート処理スレッドがない場合は、後に同一のクイックソート処理スレッドｘｉ内で処理できるようにソート対象ブロックの開始位置および終了位置をクイックソート処理スレッド管理テーブルｙｉ（図２参照）のスタック領域にセットする。次に、ブロック処理スレッド決定手段１４は、分けられたブロックの他方を引き続き同一のクイックソート処理スレッドｘｉ内で処理するために、再帰処理手段１５を実行する。
【００４２】
再帰処理手段１５は、ソート対象ブロックのレコード数をチェックし、レコード数が１より大きい場合は、基準値選出処理手段１２に制御を移行する。レコード数が１以下ならば、再帰処理手段１５は、クイックソート処理スレッド管理テーブルｙｉのスタック領域よりブロックの開始位置および終了位置を取り出し、別のブロックの処理を実行する。このとき、スタック領域よりブロックの開始位置および終了位置を取り出した別のブロックのレコード数が１以下ならば、スタック領域からブロックの開始位置および終了位置の取り出しを再度行い、レコード数が１より大きい場合は、基準値選出処理手段１２に制御を移行する。
【００４３】
以上の処理をクイックソート処理スレッドが待機処理手段１６に制御を移行し待機状態になるまで繰り返す。
【００４４】
図２を参照すると、各クイックソート処理スレッドｘ１〜ｘｍごとのクイックソート処理スレッド管理テーブルｙ１〜ｙｍは、実行フラグ，開始位置，終了位置，スタックカウンタ，およびスタック領域から構成されている。スタック領域には、各ブロックの開始位置および終了位置を表すブロック位置情報がスタックカウンタ値の数だけ格納される。
【００４５】
次に、このように構成された第１の実施の形態に係る並列クイックソート装置の動作について、図１および図２，ならびに図３〜図５のフローチャートを参照して詳細に説明する。
【００４６】
まず、対称型マルチプロセッサシステム上でスレッドプール４中にｍ個のクイックソート処理スレッドｘ１〜ｘｍを用意する。各クイックソート処理スレッドｘ１〜ｘｍは、図２で示すクイックソート処理スレッド管理テーブルｙ１〜ｙｍをもつものとする。
【００４７】
次に、データ入力処理手段２は、入力データ１の記憶媒体、例えば外部ディスク装置に存在するソート対象データを主記憶領域５に格納し、スレッド起動処理手段３に制御を移行する。
【００４８】
スレッド起動処理手段３は、スレッドプール４にある任意のクイックソート処理スレッドｘｉを１つ選択し、主記憶領域５におけるソート対象ブロックの開始位置および終了位置をクイックソート処理スレッド管理テーブルｙｉにセットし、クイックソート処理スレッド管理テーブルｙｉの実行フラグをＯＮにして、クイックソート処理スレッドｘｉを起動させる。
【００４９】
ソート処理終了待ち手段６は、スレッド起動処理手段３によりクイックソート処理スレッドｘｉが起動されると、主記憶領域５に格納された入力データ１に対するクイックソート処理が完了し、全てのクイックソート処理スレッドｘ１〜ｘｍが待機状態になるまで待ち合わせる。クイックソート処理が終了し全てのクイックソート処理スレッドｘ１〜ｘｍが待機状態になると、ソート処理終了待ち手段６は、データ出力処理手段７に制御を移行する。
【００５０】
データ出力処理手段７は、主記憶領域５に作成されたソート済データを出力データ８として記憶媒体、例えば外部ディスク装置に書き込む。
【００５１】
次に、クイックソート処理スレッドｘｉ内の動作について説明する。
【００５２】
クイックソート処理スレッドｘｉは、クイックソート処理スレッド管理テーブルｙｉ内の実行フラグがＯＦＦの状態で生成され、待機処理手段１６が最初に実行されるものとする。
【００５３】
待機処理手段１６は、実行フラグがＯＮになるまで待機する。実行フラグがＯＮになると、待機処理手段１６は、初期処理手段１１に制御を移行する。
【００５４】
初期処理手段１１の動作について、図３を参照しながら説明する。
【００５５】
初期処理手段１１は、クイックソート処理スレッド管理テーブルｙｉの開始位置および終了位置に基づいてソート対象ブロックのレコード数をチェックする（ステップＡ１）。レコード数が１より大きい場合は、初期処理手段１１は、クイックソート処理スレッド管理テーブルｙｉのスタックカウンタを０にして（ステップＡ２）、基準値選出処理手段１２に制御を移行する。また、レコード数が１以下ならば、初期処理手段１１は、ソートを行う必要がないので、クイックソート処理スレッド管理テーブルｙｉの実行フラグをＯＦＦにして（ステップＡ３）、待機処理手段１６に制御を移行する。
【００５６】
基準値選出処理手段１２は、クイックソート処理スレッド管理テーブルｙｉの開始位置から終了位置までのブロック（ソート対象ブロック）内にある任意のレコードを基準値として選出し、分類処理手段１３に制御を移行する。
【００５７】
分類処理手段１３は、基準値選出処理手段１２により選出された基準値を中心にソート対象ブロック内の各レコードをさらに２つのブロックに振り分ける。ここで、基準値より大きいレコード群をブロックｂ１に、小さいレコード群をブロックｂ２に振り分けるものとする。この後、分類処理手段１３は、ブロック処理スレッド決定手段１４に制御を移行する。
【００５８】
ブロック処理スレッド決定手段１４の動作について、図４を参照しながら説明する。
【００５９】
まず、ブロック処理スレッド決定手段１４は、各クイックソート処理スレッドｘ１〜ｘｍのクイックソート処理スレッド管理テーブルｙ１〜ｙｍの実行フラグを確認し、待機中のクイックソート処理スレッドがあるかどうかをチェックする（ステップＢ１）。
【００６０】
待機中のクイックソート処理スレッドがない場合は、ブロック処理スレッド決定手段１４は、実行中のクイックソート処理スレッドｘｉ内でブロックｂ１の処理を行うための準備をする。詳しくは、ブロック処理スレッド決定手段１４は、実行中のクイックソート処理スレッドｘｉのクイックソート処理スレッド管理テーブルｙｉのスタックカウンタが指すスタック領域位置にブロックｂ１の開始位置および終了位置をセットし、スタックカウンタを１増やす（ステップＢ２）。
【００６１】
待機中のクイックソート処理スレッドがある場合は、ブロック処理スレッド決定手段１４は、現時点で待機中の別のクイックソート処理スレッドでブロックｂ１の処理を行う準備をする。ここで、待機中の別のクイックソート処理スレッドをクイックソート処理スレッドｘｊとする。詳しくは、ブロック処理スレッド決定手段１４は、クイックソート処理スレッドｘｊのクイックソート処理スレッド管理テーブルｙｊの開始位置および終了位置にブロックｂ１の開始位置および終了位置をセットする（ステップＢ３）。次に、ブロック処理スレッド決定手段１４は、クイックソート処理スレッドｘｊのクイックソート処理スレッド管理テーブルｙｊの実行フラグをＯＮにして、クイックソート処理スレッドｘｊを起動する（ステップＢ４）。
【００６２】
ステップＢ２またはステップＢ４の後、ブロック処理スレッド決定手段１４は、ブロックｂ２の処理の準備を行う。詳しくは、ブロック処理スレッド決定手段１４は、実行中のクイックソート処理スレッドｘｉのクイックソート処理スレッド管理テーブルｙｉの開始位置および終了位置にブロックｂ２の開始位置および終了位置をセットし（ステップＢ５）、再帰処理手段１５に制御を移行する。
【００６３】
再帰処理手段１５の動作について、図５を参照しながら説明する。
【００６４】
まず、再帰処理手段１５は、クイックソート処理スレッド管理テーブルｙｉの開始位置および終了位置に基づいてソート対象ブロックのレコード数を計算してチェックする（ステップＣ１）。
【００６５】
ソート対象ブロックのレコード数が１より大きい場合は、再帰処理手段１５は、基準値選出処理手段１２へ制御を移行する。
【００６６】
ソート対象ブロックのレコード数が１以下の場合は、再帰処理手段１５は、クイックソート処理スレッド管理テーブルｙｉのスタックカウンタをチェックする（ステップＣ２）。
【００６７】
スタックカウンタが０の場合は、再帰処理手段１５は、実行フラグをＯＦＦにして（ステップＣ３）、待機処理手段１６へ制御を移行する。
【００６８】
スタックカウンタが１以上の場合は、再帰処理手段１５は、クイックソート処理スレッド管理テーブルｙｉのスタックカウンタを１減らし、クイックソート処理スレッド管理テーブルｙｉのスタックカウンタが指すスタック領域位置にあるブロック位置情報（ブロックの開始位置および終了位置）をクイックソート処理スレッド管理テーブルｙｉの開始位置および終了位置にセットする（ステップＣ４）。
【００６９】
次に、再帰処理手段１５は、クイックソート処理スレッド管理テーブルｙｉの開始位置および終了位置に基づいてソート対象ブロックのレコード数を計算してチェックする（ステップＣ５）。
【００７０】
レコード数が１以下の場合は、再帰処理手段１５は、ステップＣ２に制御を戻す。
【００７１】
レコード数が１より大きい場合は、再帰処理手段１５は、基準値選出処理手段１２に制御を移行する。
【００７２】
以上の処理を、全てのクイックソート処理スレッドｘ１〜ｘｍが待機処理手段１６へ制御を移行して待機状態になるまで繰り返す。
【００７３】
なお、第１の実施の形態では、基準値が１つの場合を例にとって説明したが、基準値を２個以上選出して１回の分割で３個以上のブロックに分けることもできる。
【００７４】
［第２の実施の形態］
図６は、本発明の第２の実施の形態に係る並列クイックソート装置の構成を示すブロック図である。本実施の形態に係る並列クイックソート装置は、図１に示した第１の実施の形態に係る並列クイックソート装置を実現する対称型マルチプロセッサシステム１００に対して、並列クイックソートプログラム２００を付加するようにした点だけが異なる。したがって、その他の特に言及しない部分には同一符号を付して、それらの詳しい説明を省略する。
【００７５】
並列クイックソートプログラム２００は、対称型マルチプロセッサシステム１００に読み込まれ、対称型マルチプロセッサシステム１００の動作を、並列クイックソート装置（データ入力処理手段２，スレッド起動処理手段３，スレッドプール４，主記憶領域５，ソート処理終了待ち手段６，およびデータ出力処理手段７）として制御する。並列クイックソートプログラム２００の制御による対称型マルチプロセッサシステム１００の動作は、第１の実施の形態に係る並列クイックソート装置の動作と全く同様になるので、その詳しい説明を割愛する。
【００７６】
【発明の効果】
第１の効果は、複数のクイックソート処理スレッドが並列してクイックソート処理を行うため、高速な処理が可能となることである。
【００７７】
第２の効果は、ブロックの分割を再帰的に行うため、処理の各段階においてクイックソート処理スレッドの待機状態をチェックして起動することが可能になり、プロセッサの使用効率が向上することである。
【００７８】
第３の効果は、全てのブロックのクイックソート処理が終わると全体のクイックソート処理も完了するため、ブロックのマージ処理など、全体のクイックソートを完了させるためにクイックソート以外の処理を行う必要がなくなることである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る並列クイックソート装置の構成を示すブロック図である。
【図２】図１中の各クイックソート処理スレッドがもつクイックソート処理スレッド管理テーブルの構成を示す図である。
【図３】図１中の初期処理手段の動作を示すフローチャートである。
【図４】図１中のブロック処理スレッド決定手段の動作を示すフローチャートである。
【図５】図１中の再帰処理手段の動作を示すフローチャートである。
【図６】本発明の第２の実施の形態に係る並列クイックソート装置の構成を示すブロック図である。
【図７】従来の並列クイックソート装置の一例を示すブロック図である。
【図８】従来の並列クイックソート装置の他の例を示すブロック図である。
【符号の説明】
１  入力データ
２  データ入力処理手段
３  スレッド起動処理手段
４  スレッドプール
５  主記憶領域
６  ソート処理終了待ち手段
７  データ出力処理手段
８  出力データ
１１  初期処理手段
１２  基準値選出処理手段
１３  分類処理手段
１４  ブロック処理スレッド決定手段
１５  再帰処理手段
１６  待機処理手段
ｘ１〜ｘｍ  イックソート処理スレッド
ｙ１〜ｙｍ  クイックソート処理スレッド管理テーブル
【図１】
2005018158.tif 000003
【図２】
2005018158.tif 000004
【図３】
2005018158.tif 000005
【図４】
2005018158.tif 000006
【図５】
2005018158.tif 000007
【図６】
2005018158.tif 000008
【図７】
2005018158.tif 000009
【図８】
2005018158.tif 000010