(57)【要約】【課題】逐次処理を前提としたループ集計処理を、効率的に稼働する並列化処理に再構築することが可能な処理の並列化装置、処理の並列化方法及びプログラムを提供する【解決手段】並列化装置１００は、複数のプロセッサ１１１と、少なくともキーとデータとを有する、複数の入力レコードを入力し、入力レコード夫々にかかる処理を、いずれかのプロセッサ１１１に割り当てる入力レコード分類手段１０１と、を有する。入力レコード分類手段１０１は、同一のキーを有する複数の入力レコードを、同一のプロセッサ１１１が処理するよう割り当てる。【選択図】図１
2015069518.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、
少なくともキーとデータとを有する、複数の入力レコードを入力し、前記入力レコード夫々にかかる処理を、いずれかの前記プロセッサに割り当てる入力レコード分類手段と、を有し、
前記入力レコード分類手段は、
同一の前記キーを有する複数の前記入力レコードを、同一の前記プロセッサが処理するよう割り当てる
並列化装置。
【請求項２】
前記入力レコード分類手段は、
予め定められたしきい値を参照し、
複数の前記プロセッサに処理が割り当てられた前記入力レコードの数の偏りが、前記しきい値を超えない場合に、同一の前記キーを有する複数の前記入力レコードを、同一の前記プロセッサが処理するよう割り当てるものである
請求項１記載の並列化装置。
【請求項３】
前記入力レコード分類手段は、
第１の入力レコードを入力した際、前記第１の入力レコードと同一の前記キーを有する他の前記入力レコードを処理している前記プロセッサが無い場合には、複数の前記プロセッサのうち負荷の低い前記プロセッサに、前記第１の入力レコードの処理を割り当てる
請求項１又は２記載の並列化装置。
【請求項４】
複数の前記プロセッサによる処理結果を集計する集計手段をさらに有する
請求項１乃至３いずれか１項記載の並列化装置。
【請求項５】
前記プロセッサ毎に、処理が割り当てられた前記入力レコードの数と、処理が割り当てられた前記入力レコード夫々が有する前記キーと、を保持する分散管理テーブルをさらに有する
請求項１乃至４いずれか１項記載の並列化装置。
【請求項６】
少なくともキーとデータとを有する、複数の入力レコードを入力するステップと、
前記入力レコード夫々にかかる処理を、複数のプロセッサのいずれかに割り当てる入力レコード分類ステップと、を有し、
前記入力レコード分類ステップでは、
同一の前記キーを有する複数の前記入力レコードを、同一の前記プロセッサが処理するよう割り当てる
並列化方法。
【請求項７】
前記入力レコード分類ステップは、
予め定められたしきい値を参照し、
複数の前記プロセッサに処理が割り当てられた前記入力レコードの数の偏りが、前記しきい値を超えない場合に、同一の前記キーを有する複数の前記入力レコードを、同一の前記プロセッサが処理するよう割り当てるものである
請求項６記載の並列化方法。
【請求項８】
前記入力レコード分類ステップは、
第１の入力レコードを入力した際、前記第１の入力レコードと同一の前記キーを有する他の前記入力レコードを処理している前記プロセッサが無い場合には、複数の前記プロセッサのうち負荷の低い前記プロセッサに、前記第１の入力レコードの処理を割り当てるものである
請求項６又は７記載の並列化方法。
【請求項９】
複数の前記プロセッサによる処理結果を集計する集計ステップをさらに有する
請求項６乃至８いずれか１項記載の並列化方法。
【請求項１０】
コンピュータに、請求項６乃至９いずれか１項の方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は処理の並列化装置、処理の並列化方法及びプログラムに関し、例えば逐次処理を前提としたループ集計処理を、効率的に稼働する並列化処理に再構築する技術に関する。
【背景技術】
【０００２】
近時、コンピュータシステムの処理能力を増強するため、ハードウェアの台数を増加させて並列稼働させること（スケールアウト）がよく行われるようになった。このようなハードウェアのスケールアウトを見据えたとき、共有メモリ型並列計算機用のソフトウェアよりも、分散メモリ型並列計算機用のソフトウェアのほうが適しているとされる。
【０００３】
共有メモリ型並列計算機における並列処理では、各並列処理間でメモリ空間を共有できるメリットがある。その反面、ハードウェアのスケールアウトが困難である。一方、分散メモリ型並列計算機における並列処理では、各並列処理間でメモリ空間を共有できないためプロセス間で通信する必要がある。その反面、ハードウェアのスケールアウトが容易である。
【０００４】
従来、並列処理ソフトウェアを設計するに際しては、プログラマに対してこれらの特徴を踏まえた設計スキルが要求されており、その設計作業の負荷は大きいものであった。そのため、並列処理ソフトウェアを自動的に作成するための手法がいくつか提案されている。
【０００５】
特許文献１は、分散メモリ型並列計算機において、特にループ処理について、並列化可能な処理と逐次処理とを分けて異なる方式で処理を行う手法、及び並列化を徹底しつつ並列処理結果を都度プロセッサ間で通信して集計する手法を提案している。
【０００６】
また、特許文献２−３は、分散メモリ型並列計算機において、並列処理が可能な処理を効率的に実行するための種々の手法を提案している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０６−２３１０９９号公報
【特許文献２】特開平０７−２００４９８号公報
【特許文献３】特開２００１−００５７９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の並列化可能な処理と逐次処理とを分けて異なる方式で処理を行う手法では、並行して行われる複数の処理と逐次で行われる１つの処理が併存するため、様々な弊害が発生する。また、並列化を徹底しつつ並列処理結果を都度プロセッサ間で通信して集計する手法では、プロセッサ間のデータの受け渡しを多数行う必要があるため、処理が非効率である。
【０００９】
また、特許文献２−３は、いずれも並列処理が可能であることが分かっている処理について、それを効率化する手法を提案するものであり、逐次処理を並列化することや、逐次処理と並列処理を併せた処理手法については、何ら言及していない。
【００１０】
本発明は、このような問題点を解決するためになされたものであり、逐次処理を前提とした処理、特にループ集計処理を、効率的に稼働する並列化処理に再構築することができる、処理の並列化装置、処理の並列化方法及びプログラムを提供することを目的とする。
【００１１】
その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
本発明にかかる並列化装置は、複数のプロセッサと、少なくともキーとデータとを有する、複数の入力レコードを入力し、前記入力レコード夫々にかかる処理を、いずれかの前記プロセッサに割り当てる入力レコード分類手段と、を有し、前記入力レコード分類手段は、同一の前記キーを有する複数の前記入力レコードを、同一の前記プロセッサが処理するよう割り当てるものである。
【００１３】
本発明にかかる並列化方法は、少なくともキーとデータとを有する、複数の入力レコードを入力するステップと、前記入力レコード夫々にかかる処理を、複数のプロセッサのいずれかに割り当てる入力レコード分類ステップと、を有し、前記入力レコード分類ステップでは、同一の前記キーを有する複数の前記入力レコードを、同一の前記プロセッサが処理するよう割り当てるものである。
【００１４】
本発明にかかるプログラムは、上記並列化方法をコンピュータに実行させるためのプログラムである。
【発明の効果】
【００１５】
本発明により、逐次処理を前提としたループ集計処理を、効率的に稼働する並列化処理に再構築することが可能な処理の並列化装置、処理の並列化方法及びプログラムを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態の構成を示す図である。
【図２】本発明の実施の形態における分散管理テーブルの構成を示す図である。
【図３】本発明の実施の形態の処理を示す図である。
【図４】本発明の実施の形態における入力及び出力の例を示す図である。
【図５】本発明の実施の形態における分散管理テーブルの例を示す図である。
【図６】本発明の実施の形態における入力の例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【００１８】
はじめに、本実施の形態における並列化装置１００の概要について説明する。並列化装置１００は、ループ集計処理を並列化する処理を行う装置である。すなわち、並列化装置１００は、逐次処理を前提として設計されたループ集計処理を、分散メモリ型並列計算機上において効率的に稼働するような並列化処理に再構築する処理を行うことに特徴を有するものである。ループ集計処理は、複数の入力レコード間に依存関係がないため各入力レコードを独立して処理できる部分と、各入力レコード間に依存関係がある処理と、の２種類の処理に分けることができる。前者は、例えば集計キーをＩＤとしたマスタ引き当て処理や、１レコード内の情報の加工処理がある。後者は、集計キーが同一のグループの複数の入力レコードに含まれる集計対象の集計処理や、入力レコード数のカウントアップ処理がある。本発明は、従来、主に逐次処理によって行われていた後者の処理を、効率的に並列化する手法に関する。
【００１９】
本実施の形態では、一例として、図４の表４１のような、複数の入力レコードからなる入力データを、親キー及び子キーをソートキーとして使用して集計し、図４の表４２のような集計結果を得る、ループ集計処理に本発明を適用する場合について説明する。すなわち、並列化装置１００は、このループ集計処理を複数のプロセッサに効率的に並列処理させる手法に特徴を有するものである。
【００２０】
なお、ここでいう親キー及び子キーとは、例えば、店舗名（親キー）と、その店舗で売れた商品名（子キー）のような、集計対象（およそ「商品」）を分類するための互いに独立したキーとしての関係を有する。この例に則れば、図４の表４１の１レコード目（親キー＝Ｘ、子キー＝Ａ、データ＝３）は、「店舗Ｘにおいて商品Ａが３個売れた」ことを意味する。同様に、３レコード目（親キー＝Ｙ、子キー＝Ｂ、データ＝５）は、「店舗Ｙにおいて商品Ｂが５個売れた」ことを意味する。そして、集計処理とは、店舗（親キー）毎及び商品名（子キー）毎に、その商品が何個売れたのかを集計する処理をいう。集計結果である表４２は、例えば、店舗Ｘにおいて商品が合計９個売れたこと、そのうち商品Ａの販売数は５であったことを示している。
【００２１】
図１乃至図５を用いて、本実施の形態における並列化装置１００の構成について説明する。
【００２２】
並列化装置１００は、入力レコード分類手段１０１、複数のプロセッサ１１１、集計手段１２１の処理手段を有する。また、並列化手段１００は、図示しない記憶領域上に、しきい値１３１、プロセッサ数１３２、分散管理テーブル１０２、入力ファイル等１４１、出力ファイル等１４２のデータを保持する。
【００２３】
入力レコード分類手段１０１は、ループ集計処理が処理される際に、入力ファイル１４１等から入力レコードを読み込み、各プロセッサに入力レコードの集計処理をさせる指示を出す処理を行う。具体的には、入力レコード分類手段１０１は、現在の処理環境において利用できるプロセッサの数を、プロセッサ数１３２の情報を読み込むことで認識し、指示を出力すべきプロセッサ数の上限値を決定する。また、入力レコード分類手段１０１は、分散管理テーブル１０２を参照することで、各入力レコードを処理するため最も効率が良いプロセッサを選択する。ここでいう効率を判断するための処理フローは後述するが、入力レコード分類手段１０１は、しきい値１３１の情報を読み込んでその判断に利用する。
【００２４】
図２に示すように、分散管理テーブル１０２は、プロセッサ番号２１、子キー２２、親キー２３、処理レコード数２４の各項目を管理する記憶手段である。ここで管理するプロセッサの数、すなわち分散管理テーブル１０２が管理するレコード数は、プロセッサ数１３２の情報に応じて決定される。
【００２５】
複数のプロセッサ１１１は、ループ集計処理を実際に実行する演算処理手段である。プロセッサ１１１の数はプロセッサ数１３２の情報により決定される。
【００２６】
集計手段１２１は、全プロセッサ１１１によるループ集計処理の集計処理（第１段階の集計処理）が完了するまで待ち合わせ、各プロセッサ１１１による第１段階の集計処理結果を集計する処理（第２段階の集計処理）を行う。なお、集計手段１２１による第２段階の集計処理は、最も効率よく複数のプロセッサ１１１に処理が分散された場合は行われない。すなわち、この場合は、プロセッサ１１１における第１段階の集計処理によってすべての処理が完了するので、集計手段１２１による第２段階の集計処理は必要ない。一方、分散が効率よくなされなかったときは、各プロセッサ１１１における第１段階の集計処理の結果を対象として、集計手段１２１が第２段階の集計処理を行うことで、集計が完了する。
【００２７】
しきい値１３１は、複数のプロセッサ１１１のうちどのプロセッサ１１１に処理を行わせれば効率が良いかを判断する際の判断基準となる数値である。しきい値１３１は、分散管理テーブル１０２での処理レコード数の標準偏差と比較される。なお、しきい値１３１は、事前に利用者によって任意の適切な値に設定されるべきパラメータである。しきい値１３１を小さくすると、処理の分散がなされやすくなり、多くのプロセッサ１１１が活用されるようになる。しきい値１３１を大きくすると、処理が集中されやすくなり、使用されるプロセッサ１１１が偏在するようになる。
【００２８】
プロセッサ数１３２は、現在の処理環境下において使用可能なプロセッサ１１１の数を示す数値である。
【００２９】
入力ファイル等１４１は、ループ集計処理の処理対象となる入力ファイル、ＤＢ（データベース）の表（テーブル）、またはメモリ上の複数のレコード等である。入力ファイル等１４１に含まれる複数のレコードは、必ずしも集計キーでソートされている必要はない。
【００３０】
出力ファイル等１４２は、ループ集計処理の処理結果の格納先となる出力ファイル、ＤＢ（データベース）の表（テーブル）、またはメモリ上の複数のレコード等である。一般に、出力ファイル等１４２には、明細レコードと集計結果となるレコードとが混在している。
【００３１】
つづいて、図３のフローチャートを用いて、並列化装置１００の動作について説明する。ここでは、並列化装置１００が、入力ファイル等１４１としての入力レコード４１（図４）を入力し、入力レコード４１に対する集計処理を実行する場合を例として説明する。
【００３２】
ここで、集計処理とは、入力レコード４１の親キーおよび子キーをキーとしてレコードの名寄せを行い、データを合算する処理をいう。かかる集計処理の結果、並列化装置１００は、出力ファイル等１４２としての出力レコード４２（図４）を出力する。
【００３３】
なお、この集計処理の前提として、しきい値１３１は１．５に設定されているものとする。また、分散管理テーブル１０２として、図５に示す分散管理テーブル６１乃至６５を使用するものとする。
【００３４】
ステップ３１：入力ファイル等１４１の１レコードを入力する。
入力レコード分類手段１０１が、入力レコード４１の１レコード目を入力する。１レコード目の内容は、親キー＝Ｘ、子キー＝Ａ、データ＝３である。
【００３５】
ステップ３２：入力レコードの子キーが分散管理テーブル１０２に存在するか確認する。
入力レコード分類手段１０１が、分散管理テーブル６１（図５）を参照し、ステップ３１で入力したレコードの子キーが、分散管理テーブル６１に存在するか判定する。分散管理テーブルとは、あるプロセッサ１１１が、あるレコードを対象とする集計処理を行っている場合、そのレコードの子キー及び親キーの情報を、そのプロセッサ１１１のプロセッサ番号と紐付けて保持する役割を担うテーブルである。いま、分散管理テーブル６１には、いずれのプロセッサ１１１にも、何らの子キーも紐付けられていない。すなわち、ステップ３１で入力したレコードの子キー「Ａ」と紐付けられたプロセッサ１１１は存在しない。これは、この時点で、子キー「Ａ」を有するレコードを処理しているプロセッサ１１１が１つも存在しないことを意味している。この場合、ステップ３４に移行する。
【００３６】
ステップ３４：入力レコードの親キーが分散管理テーブル１０２に存在するか確認する。
入力レコード分類手段１０１が、分散管理テーブル６１（図５）を参照し、ステップ３１で入力したレコードの親キーが、分散管理テーブル６１に存在するか判定する。いま、分散管理テーブル６１には、いずれのプロセッサ１１１にも、何らの親キーも紐付けられていない。すなわち、ステップ３１で入力したレコードの親キー「Ｘ」と紐付けられたプロセッサ１１１は存在しない。これは、この時点で、親キー「Ｘ」を有するレコードを処理しているプロセッサ１１１が１つも存在しないことを意味している。この場合、ステップ３７に移行する。
【００３７】
ステップ３７：負荷が最も低いプロセッサ１１１を選択。
入力レコード分類手段１０１は、現時点で最も処理負荷が低いプロセッサ１１１を１つ選択し、そのプロセッサ１１１を、ステップ３１で入力したレコードの集計処理を行うべきプロセッサとして決定する。なお、最も処理負荷が低いプロセッサ１１１が複数存在する場合は、その中から任意の１つのプロセッサ１１１を選択する。例えば、複数のプロセッサ１１１に予め序列を付与しておき、最も序列の高いプロセッサ１１１を選択することができる。ここでは、入力レコード分類手段１０１によりプロセッサ「１」が選択されたものとする。
【００３８】
この時点で、入力レコード分類手段１０１は、分散管理テーブル６１の内容を、分散管理テーブル６２のように更新する。すなわち、選択されたプロセッサ１１１のプロセッサ番号「１」と、入力レコードの子キー「Ａ」及び親キー「Ｘ」とを、紐付けて保持する。また、プロセッサ番号「１」が集計処理を行うべきレコード数を保持する。ここでは、処理レコード数は「１」となる。この後、ステップ３１に移行する。
【００３９】
ステップ３１（２回目）：
入力レコード分類手段１０１が、入力レコード４１の２レコード目を入力する。１レコード目の内容は、親キー＝Ｘ、子キー＝Ａ、データ＝２である。
【００４０】
ステップ３２：
入力レコード分類手段１０１が、現時点の分散管理テーブル６２を参照し、２回目の入力レコードの子キー「Ａ」が、分散管理テーブル６２に存在するか判定する。いま、分散管理テーブル６２では、プロセッサ「１」と子キー「Ａ」が紐付けられている。これは、この時点で、子キー「Ａ」を有するレコードを、プロセッサ「１」が既に処理していることを意味している。この場合、ステップ３３に移行する。
【００４１】
ステップ３３：既に子キーを処理しているプロセッサ１１１を選択。
入力レコード分類手段１０１が、２レコード目をプロセッサ「１」で処理すべきことを決定する。これは、同じキーを持つレコードの集計処理は極力同一プロセッサで行う方が、プロセッサ間のデータ通信を削減でき、効率的だからである。
【００４２】
入力レコード分類手段１０１は、この時点で、分散管理テーブル６２の内容を、分散管理テーブル６３のように更新する。すなわち、プロセッサ番号「１」が集計処理を行うべきレコード数は「２」となる。この後、再びステップ３１に移行する。
【００４３】
ステップ３１（３回目）：
入力レコード分類手段１０１が、入力レコード４１の３レコード目を入力する。３レコード目の内容は、親キー＝Ｙ、子キー＝Ｂ、データ＝５である。
【００４４】
ステップ３２：
入力レコード分類手段１０１が、現時点の分散管理テーブル６３を参照し、３回目の入力レコードの子キー「Ｂ」が、分散管理テーブル６３に存在するか判定する。この時点で、分散管理テーブル６３には該当するレコードがない。これは、子キー「Ｂ」を有するレコードを処理しているプロセッサ１１１は存在しないことを意味している。この場合、ステップ３４に移行する。
【００４５】
ステップ３４： 
入力レコード分類手段１０１が、現時点の分散管理テーブル６３を参照し、３回目の入力レコードの親キー「Ｙ」が、分散管理テーブル６３に存在するか判定する。この時点で、分散管理テーブル６３には該当するレコードがない。これは、親キー「Ｙ」を有するレコードを処理しているプロセッサ１１１は存在しないことを意味している。この場合、ステップ３７に移行する。
【００４６】
ステップ３７：負荷が最も低いプロセッサ１１１を選択。
入力レコード分類手段１０１は、現時点で最も処理負荷が低いプロセッサ１１１を１つ選択し、そのプロセッサ１１１を、３レコード目を処理すべきプロセッサとして決定する。ここでは、入力レコード分類手段１０１によりプロセッサ「２」が選択されたものとする。
【００４７】
この時点で、入力レコード分類手段１０１は、分散管理テーブル６３の内容を、分散管理テーブル６４のように更新する。すなわち、選択されたプロセッサ１１１のプロセッサ番号「２」と、入力レコードの子キー「Ｂ」及び親キー「Ｙ」とを、紐付けて保持する。また、プロセッサ「２」の処理レコード数は「１」となる。この後、再びステップ３１に移行する。
【００４８】
ステップ３１（４回目）：
入力レコード分類手段１０１が、入力レコード４１の４レコード目を入力する。４レコード目の内容は、親キー＝Ｘ、子キー＝Ｃ、データ＝４である。
【００４９】
ステップ３２：
入力レコード分類手段１０１が、現時点の分散管理テーブル６４を参照し、４回目の入力レコードの子キー「Ｃ」が、分散管理テーブル６４に存在するか判定する。この時点で、分散管理テーブル６４には該当するレコードがない。これは、子キー「Ｃ」を有するレコードを処理しているプロセッサ１１１は存在しないことを意味している。この場合、ステップ３４に移行する。
【００５０】
ステップ３３：
入力レコード分類手段１０１が、現時点の分散管理テーブル６４を参照し、４回目の入力レコードの親キー「Ｘ」が、分散管理テーブル６４に存在するか判定する。いま、分散管理テーブル６４では、プロセッサ「１」と親キー「Ｘ」が紐付けられている。これは、この時点で、親キー「Ｘ」を有するレコードを、プロセッサ「１」が既に処理していることを意味している。この場合、ステップ３５に移行する。
【００５１】
ステップ３５：しきい値判定
入力レコード分類手段１０１は、入力レコードをステップ３３で発見したプロセッサ１１１に処理させるべきかを判断するため、しきい値判定を行う。しきい値判定の処理は次の通りである。まず、入力レコード分類手段１０１は、現在の分散管理テーブル６４に対し、入力レコードと同一の親キーを既に処理しているプロセッサ１１１で入力レコードを処理すると仮定して、分散管理テーブル６４の「処理レコード数」カラムを更新した状態を想定する。この例では、プロセッサ「１」の処理レコード数を「３」とした状態を想定する。その上で、処理レコード数の標準偏差を求める。この例では、標準偏差は１．２４となり、しきい値１．５を超えない。この場合、入力レコード分類手段１０１は、入力レコードをステップ３３で発見したプロセッサ１１１に処理させてよいと判断する。すなわち、４レコード目をプロセッサ「１」に割り当てることとする。この場合、ステップ３６に移行する。
【００５２】
なお、処理レコード数の標準偏差が閾値を超えた場合は、入力レコード分類手段１０１は、入力レコードをステップ３３で発見したプロセッサ１１１に処理させるべきでないと判断する。すなわち、４レコード目の処理をプロセッサ「１」以外のプロセッサ１１１に割り当てることとする。この場合、ステップ３７に移行し、現時点で処理負荷が最も低いプロセッサに処理を割り当てる。
【００５３】
同じ親キーを持つレコードの集計処理は極力同一プロセッサで行う方が、プロセッサ間のデータ通信を削減できる点で効率的である。しかしながら、特定のプロセッサに処理が集中しすぎると、逆にシステム全体として処理効率が低下してしまう。そのため、本実施の形態ではプロセッサ１１１の分散を調整する役割を担うしきい値１３１を導入し、これを利用者により適宜調整可能として、最も優れた処理効率を求めることができるようにした。
【００５４】
ステップ３６：既に親キーを処理しているプロセッサ１１１を選択。
入力レコード分類手段１０１は、４レコード目を、既に同一の親キー「Ｘ」処理しているプロセッサ「１」で処理すべきものと決定する。
【００５５】
この時点で、入力レコード分類手段１０１は、分散管理テーブル６４の内容を、分散管理テーブル６５のように更新する。すなわち、選択されたプロセッサ１１１のプロセッサ番号「１」と、入力レコードの子キー「Ｃ」及び親キー「Ｙ」とを、紐付けて保持する。この結果、プロセッサ「１」に紐づけられる子キーは「Ａ，Ｃ」となる。また、プロセッサ「１」の処理レコード数は累計「３」となる。この後、再びステップ３１に移行する。
【００５６】
以下、入力レコード分類手段１０１は、入力レコード４１の５レコード目から７レコード目についても、上述の処理と同様に、図３のフローチャートに沿って特定のプロセッサ１１１に割り当てる処理を行う。その結果、７レコード全てを処理した時点では、分散管理テーブル１０２は、分散管理テーブル６６（図５）のようになる。
【００５７】
そして、各プロセッサ１１１は、入力レコード分類手段１０１によって自らに割り当てられた入力レコード４１のレコードのみについて、それぞれ集計処理を行う。かかる集計処理により、図４の出力レコード４２のように、プロセッサ１では親キー「Ｘ」の集計値「９」と子キー「Ａ」「Ｃ」の集計値「５」「４」が得られ、プロセッサ２では親キー「Ｙ」の集計値「１１」と子キー「Ｂ」の集計値「１１」が得られ、プロセッサ３で親キー「Ｚ」の集計値「５」と子キー「Ｄ」「Ｅ」の集計値「３」「２」が得られる。
【００５８】
この例における集計処理の効率について検討するに、図５の分散管理テーブル６６における処理レコード数の標準偏差は、０．４７と低い。このことから、３つのプロセッサ「１」「２」「３」が偏りなく均等に利用されていることがわかる。また、各プロセッサ１１１で行われた集計処理において使用されたキーの数は、「Ｘ」「Ａ」「Ｃ」「Ｙ」「Ｂ」「Ｚ」「Ｄ」「Ｅ」の８個と少ない。このことから、効率よく分散処理がなされていることがわかる。
【００５９】
なお、標準偏差は、以下の数１により求めることができる。ここで、ｎ：分散管理テーブルのレコード数、ｉ：プロセッサ番号、ｘｉ：プロセッサ番号ｉの処理レコード数、ｘａ：処理レコード数の平均、を示す。
【数１】
2015069518.tif 000003
【００６０】
ここで、仮に、本実施の形態にかかる手法を採用せず、単に各プロセッサ１１１を均等に利用することを重視する手法（例えば、ラウンドロビン等の公知の負荷分散手法）を採用し（これはしきい値１３１を０に近づけた場合と等価である）、上記７レコードを処理する場合を想定する。この場合、処理レコード数の標準偏差は０．４７であり、本実施の形態と略同等である。しかしながら、各プロセッサ１１１で行われた集計処理において使用されるキーの数は、「Ｘ」「Ａ」「Ｙ」「Ｚ」「Ｂ」「Ｅ」「Ｘ」「Ｚ」「Ｃ」「Ｄ」の１０個となり、本実施の形態よりも多い。これは、異なるプロセッサ１１１で、同じキーを有する異なるレコードの集計処理が、より多く行われていることを意味する。この場合、プロセッサ間の通信が増加する。加えて、複数のプロセッサ１１１で分散して集計された親キー「Ｘ」と「Ｚ」については、集計手段１２１を使用して、最終的な集計処理（第２段階の集計処理）を実施する必要が生ずる。
【００６１】
また、仮に、本実施の形態にかかる手法を採用せず、単にプロセッサ間の通信を最小化することのみを重視し、親キーが同一のレコードをすべて同一プロセッサで処理することとした手法を採用し（これはしきい値１３１を∞に近づけた場合と等価である）、上記７レコードを処理する場合を想定する。この場合は、処理レコード数の標準偏差、及び各プロセッサ１１１で行われた集計処理において使用されたキーの数は、本実施の形態と同等となる。しかしながら、例えば入力ファイル等１４１として、図６の入力レコード７１を使用した場合では、本実施の形態に示す手法では処理レコード数の標準偏差が０．４７であるのに対し、親キーが同一のレコードをすべて同一プロセッサで処理する手法における標準偏差は２．０５と比較的大きくなる。これは、後者の手法において、利用されないプロセッサがより多く現れることを示している。
【００６２】
本実施の形態によれば、入力レコード分類手段１０１が、入力レコードと同一のキーを有する他の入力レコードを既に処理しているプロセッサ１１１が無い場合、処理負荷が最も低いプロセッサ１１１に処理を割り当てる。これにより、利用可能なプロセッサ１１１を均等に利用し、並列処理を効果的に行うことができる。
【００６３】
また、本実施の形態によれば、入力レコード分類手段１０１が、同一のキーを有する複数の入力レコードの集計処理を、同一のプロセッサ１１１に処理させる。これにより、集計結果を得るために必要なプロセッサ間の通信量を最小限に抑制し、並列処理を効率的に行うことができる。
【００６４】
さらに、本実施の形態によれば、入力レコード分類手段１０１は、しきい値１３１の値に応じて、複数のプロセッサ１１１に処理を分散させる程度を変更することができる。これにより、入力レコードの傾向に即した最適な並列処理を行うことができる。
【００６５】
このように、本実施の形態によれば、従来の逐次処理を前提としたループ集計処理を、適切なしきい値を与えるだけで、効率的に稼働する並列化処理に再構築することが可能である。
【００６６】
＜その他の実施の形態＞
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の実施の形態では親キーを１つとした例を説明したが、親キーが２つ以上の場合も同様の考えで処理できる。この場合、しきい値１３１は親キーの数だけ別々に設定し、図２の分散管理テーブル１０２の親キーの列を親キーの数だけ増やし、かつ図３のフローチャートのステップ３４：親キー判定処理を、親キーの数だけ実施することになる。
【００６７】
また、上述の実施の形態では、本発明を主にハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【符号の説明】
【００６８】
１００  並列化装置
１０１  入力レコード分類手段
１１１  プロセッサ
１２１  集計手段
１３１  しきい値
１３２  プロセッサ数
１０２  分散管理テーブル
１４１  入力ファイル等
１４２  出力ファイル等
【図１】
2015069518.tif 000004
【図２】
2015069518.tif 000005
【図３】
2015069518.tif 000006
【図４】
2015069518.tif 000007
【図５】
2015069518.tif 000008
【図６】
2015069518.tif 000009