(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024042360
(43)【公開日】2024-03-28
(54)【発明の名称】データ処理プログラム、データ処理方法およびデータ処理装置
(51)【国際特許分類】
G06F 9/50 20060101AFI20240321BHJP
【FI】
G06F9/50 150E
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022147028
(22)【出願日】2022-09-15
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】山田 芙夕楓
(57)【要約】
【課題】複数の演算部の処理量のばらつきを低減する。
【解決手段】記憶部11は、複数の相手データそれぞれとの組み合わせによる演算に用いられる2N(Nは2以上の整数)個のデータを記憶する。処理部12は、2N個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定する。処理部12は、上位のN個の第1データそれぞれを、演算対象の相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。処理部12は、下位のN個の第2データそれぞれを、演算対象の相手データの数の昇順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。処理部12は、N個の演算部に対する2N個のデータの割り当て結果に基づいて、2N個のデータのうちのN個のデータに対する演算をN個の演算部により並列に実行する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンピュータに、
複数の相手データそれぞれとの組み合わせによる演算に用いられる2N(Nは2以上の整数)個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定し、
前記上位のN個の第1データそれぞれを、演算対象の前記相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当て、前記下位のN個の第2データそれぞれを、演算対象の前記相手データの数の昇順となるように、前記第1の演算部から前記第Nの演算部までの前記N個の演算部それぞれに割り当て、
前記N個の演算部に対する前記2N個のデータの割り当て結果に基づいて、前記2N個のデータのうちのN個のデータに対する前記演算を前記N個の演算部により並列に実行する、
処理を実行させるデータ処理プログラム。
【請求項2】
前記上位のN個の第1データそれぞれに対する前記演算の実行では、前記複数の相手データのうち当該演算に用いる前記相手データを第1の順序で選択し、
前記下位のN個の第2データそれぞれに対する前記演算の実行では、前記複数の相手データのうち当該演算に用いる前記相手データを前記第1の順序とは逆の順序で選択する、
請求項1記載のデータ処理プログラム。
【請求項3】
前記N個の演算部によりアクセスされるキャッシュメモリの記憶領域を第1記憶領域と第2記憶領域とに分割し、前記2N個のデータのうちの前記演算の実行対象のデータを前記第1記憶領域にロードし、前記複数の相手データのうちの前記演算の実行対象の前記相手データを前記第2記憶領域にロードする、
請求項2記載のデータ処理プログラム。
【請求項4】
前記2N個のデータそれぞれのサイズである第1サイズにNを乗じた値に基づいて、前記第1記憶領域のサイズを決定する、請求項3記載のデータ処理プログラム。
【請求項5】
コンピュータが、
複数の相手データそれぞれとの組み合わせによる演算に用いられる2N(Nは2以上の整数)個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定し、
前記上位のN個の第1データそれぞれを、演算対象の前記相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当て、前記下位のN個の第2データそれぞれを、演算対象の前記相手データの数の昇順となるように、前記第1の演算部から前記第Nの演算部までの前記N個の演算部それぞれに割り当て、
前記N個の演算部に対する前記2N個のデータの割り当て結果に基づいて、前記2N個のデータのうちのN個のデータに対する前記演算を前記N個の演算部により並列に実行する、
データ処理方法。
【請求項6】
複数の相手データそれぞれとの組み合わせによる演算に用いられる2N(Nは2以上の整数)個のデータを記憶する記憶部と、
前記2N個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定し、前記上位のN個の第1データそれぞれを、演算対象の前記相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当て、前記下位のN個の第2データそれぞれを、演算対象の前記相手データの数の昇順となるように、前記第1の演算部から前記第Nの演算部までの前記N個の演算部それぞれに割り当て、前記N個の演算部に対する前記2N個のデータの割り当て結果に基づいて、前記2N個のデータのうちのN個のデータに対する前記演算を前記N個の演算部により並列に実行する処理部と、
を有するデータ処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータ処理プログラム、データ処理方法およびデータ処理装置に関する。
【背景技術】
【0002】
データの分析にパターンマイニングと呼ばれる手法が用いられている。パターンマイニングでは、データ集合の中から、ある条件を満たすデータの組み合わせを抽出することがある。データの複数の組み合わせそれぞれに対する演算は、例えばコンピュータが備えるCPU(Central Processing Unit)などの複数の演算部により並列に実行することができる。ここで、コンピュータによる並列処理の実行を効率化する方法が考えられている。
【0003】
例えば、マルチプロセッサシステムにおいて、OS(Operating System)のスケジューラにより、中断中のスレッドを最も少ない負荷のCPUに割り当てることで、中断中のスレッドの割り当てと同時に負荷分散処理を行うスケジュール制御方法の提案がある。
【0004】
また、スレッドをまとめてディスパッチする際に、前回と同じCPUにディスパッチするようにディスパッチ時期を調整することで、CPUごとに設けられたキャッシュの中のデータが再利用される可能性を高めるスケジューリング方式の提案もある。
【0005】
また、マルチコアプロセッサを備えたコンピュータシステムで、OSスケジューラによりCPI(Cycles Per Instruction)レートと呼ばれる命令ごとのサイクル数を用いて、各スレッドを各コアに動的に割り当てる方法の提案もある。
【0006】
更に、タスクが実行されているときに発行されたオブジェクト、メモリ、またはレジスタのロックの数などの統計データを収集し、統計データを基に後続の処理サイクルでのスレッド数を調整するマルチスレッド処理システムの提案もある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】国際公開第2007/017932号
【特許文献2】特開平7-302246号公報
【特許文献3】米国特許出願公開第2008/0059712号明細書
【特許文献4】米国特許出願公開第2017/0031708号明細書
【発明の概要】
【発明が解決しようとする課題】
【0008】
第1のデータ集合の要素と第2のデータ集合の要素との全ての組み合わせに対する演算を複数の演算部を用いて行う場合、第1のデータ集合の要素ごとに、当該要素に関する演算を担当する演算部を割り当てることが考えられる。この場合、重複する組み合わせの演算は省略され得る。このため、第1のデータ集合の要素ごとに、組み合わせ相手として用いる第2のデータ集合の要素の数が変わり得る。したがって、例えば第1のデータ集合の要素を、組み合わせ相手となる第2のデータ集合の要素の数が多い順に、各演算部にサイクリックに割り当てると、各演算部が実行する処理量にばらつきが生じる。各演算部の処理量のばらつきは、全ての組み合わせに対する演算の終了を遅延させる要因となる。
【0009】
1つの側面では、本発明は、複数の演算部の処理量のばらつきを低減することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、データ処理プログラムが提供される。このデータ処理プログラムは、コンピュータに、次の処理を実行させる。コンピュータは、複数の相手データそれぞれとの組み合わせによる演算に用いられる2N(Nは2以上の整数)個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定する。コンピュータは、上位のN個の第1データそれぞれを、演算対象の相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。コンピュータは、下位のN個の第2データそれぞれを、演算対象の相手データの数の昇順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。コンピュータは、N個の演算部に対する2N個のデータの割り当て結果に基づいて、2N個のデータのうちのN個のデータに対する演算をN個の演算部により並列に実行する。
【0011】
また、1つの態様では、コンピュータが実行するデータ処理方法が提供される。また、1つの態様では、記憶部と処理部とを有するデータ処理装置が提供される。
【発明の効果】
【0012】
1つの側面では、複数の演算部の処理量のばらつきを低減できる。
【図面の簡単な説明】
【0013】
【
図1】第1の実施の形態のデータ処理装置を説明する図である。
【
図2】第2の実施の形態のデータ処理装置のハードウェア例を示す図である。
【
図4】3種類の商品を全て購入した人数の計算例を示す図である。
【
図5】2種類の商品の組み合わせに対する演算例を示す図である。
【
図6】3種類の商品の組み合わせに対する演算例を示す図である。
【
図8】複数のコアに対するデータ割り当て例を示す図である。
【
図10】組み合わせ計算例を示すフローチャートである。
【
図11】複数のコアに対するデータ割り当ての比較例を示す図である。
【
図12】各コアが計算する組み合わせ数の比較を示す図である。
【
図13】第2の実施の形態のキャッシュ使用例(その1)を示す図である。
【
図14】第2の実施の形態のキャッシュ使用例(その2)を示す図である。
【
図15】第3の実施の形態の組み合わせ計算の実行順序の例を示す図である。
【
図16】商品数が10個の場合の組み合わせ計算の実行順序の例を示す図である。
【
図17】第3の実施の形態のキャッシュ使用例を示す図である。
【
図18】第3の実施の形態のキャッシュ使用例(続き)を示す図である。
【
図19】第3の実施の形態のキャッシュ使用例(続き)を示す図である。
【
図20】組み合わせ計算例を示すフローチャートである。
【
図21】第4の実施の形態のセクタキャッシュの例を示す図である。
【
図22】第4の実施の形態のキャッシュ使用例を示す図である。
【
図23】第4の実施の形態のキャッシュ使用例(続き)を示す図である。
【
図24】第4の実施の形態のキャッシュ使用例(続き)を示す図である。
【
図25】組み合わせ計算例を示すフローチャートである。
【
図26】第2の実施の形態の組み合わせ計算を一般化したフローチャートである。
【
図27】第3の実施の形態の組み合わせ計算を一般化したフローチャートである。
【
図28】第4の実施の形態の組み合わせ計算を一般化したフローチャートである。
【発明を実施するための形態】
【0014】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0015】
図1は、第1の実施の形態のデータ処理装置を説明する図である。
データ処理装置10は、第1のデータ集合の要素と第2のデータ集合の要素との組み合わせに対する演算を複数の演算部を用いて行う。データ処理装置10は、記憶部11および処理部12を有する。
【0016】
記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。
【0017】
ここで、複数のプロセッサの集合を「マルチプロセッサ」と言うことがある。また、複数のプロセッサコアを有するプロセッサを「マルチコアプロセッサ」と言うことがある。処理部12は、例えばマルチプロセッサまたはマルチコアプロセッサである。
【0018】
処理部12は、N個の演算部を有する。Nは2以上の整数である。
図1ではN=2の場合が例示される。N=2の場合、処理部12は、演算部12a,12bを有する。例えば処理部12がマルチプロセッサの場合、演算部12a,12bは、処理部12が有するプロセッサでもよい。例えば処理部12がマルチコアプロセッサの場合、演算部12a,12bは、処理部12が有するプロセッサコアでもよい。演算部12a,12bは、組み合わせの演算に用いられる。
【0019】
ここで、対象となる組み合わせは第1のデータ集合の要素と第2のデータ集合の要素の組み合わせとする。この対象の組み合わせの演算に用いられる第1のデータ集合は2N個のデータを含む。N=2の例では、第1のデータ集合は、第1のデータ集合の要素として4つのデータd1,d2,d3,d4を含む。第1のデータ集合の要素との組み合わせ対象となる第2のデータ集合の要素を「相手データ」と言う。組み合わせの演算では、第1のデータ集合の要素ごとに当該要素の演算を担当する演算部が割り当てられる。第1のデータ集合の1つの要素に対応する全組み合わせの演算を1スレッドで実行することで、演算に使用するデータの入れ替えが少なくて済み、演算を効率的に行えるためである。
【0020】
また、組み合わせの演算では、重複する組み合わせに対する演算が省略される。重複する組み合わせに対する演算の省略により、余計な演算を省ける。例えば、データd1とある相手データとの組み合わせと、データd2と他の相手データとの組み合わせが、同一の組み合わせに相当する場合、データd1についてだけ該当の相手データとの演算を行えばよく、データd2と当該他の相手データとの演算は省略される。このため、データd1~d4は、組み合わせによる演算対象となる相手データの数が異なる。そこで、処理部12は各演算部に対して、次のようにデータd1~d4を割り当てる。
【0021】
処理部12は、N個のデータから、演算対象の相手データの数(相手データとの組み合わせ数)でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定する。テーブル11aは、N=2の例において、データd1~d4それぞれの相手データとの組み合わせ数を例示する。データd1~d4それぞれの演算対象の相手データの数は、データd1~d4それぞれの組み合わせ対象の相手データの数とも言える。例えば、テーブル11aは記憶部11に記憶されてもよい。データd1~d4それぞれの相手データとの組み合わせ数は次の通りであると仮定する。
【0022】
データd1の相手データとの組み合わせ数はm1である。データd2の相手データとの組み合わせ数はm2である。m2<m1である。データd3の相手データとの組み合わせ数はm3である。m3<m2である。データd4の相手データとの組み合わせ数はm4である。m4<m3である。なお、m1~m4は何れも正の整数である。この場合、処理部12は、組み合わせ数の上位2個のデータd1,d2、および、下位2個のデータd3,d4を特定する。
【0023】
処理部12は、上位のN個の第1データそれぞれを、組み合わせ数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。処理部12は、下位のN個の第2データそれぞれを、組み合わせ数の昇順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。
【0024】
上記のN=2の例では、演算部12aが第1の演算部でもよく、演算部12bが第2の演算部でもよい。処理部12は、組み合わせ数の上位2個のデータd1,d2それぞれを、組み合わせ数の降順となるように、演算部12a,12bそれぞれに割り当てる。すなわち、処理部12は、演算部12aにデータd1を割り当て、演算部12bにデータd2を割り当てる。また、処理部12は、組み合わせ数の下位2個のデータd3,d4それぞれを、組み合わせ数の昇順となるように、演算部12a,12bそれぞれに割り当てる。すなわち、処理部12は、演算部12aにデータd4を割り当て、演算部12bにデータd3を割り当てる。
【0025】
なお、上記の割り当てについて、演算部12b,12aの順序でみれば、演算部12b,12aそれぞれにデータd2,d1それぞれが組み合わせ数の昇順となるように割り当てられていると言える。同様に、演算部12b,12aそれぞれにデータd3,d4それぞれが組み合わせ数の降順となるように割り当てられていると言える。
【0026】
また、上記の処理部12による割り当て処理は、演算部12a,12bの何れかにより実行されてもよいし、処理部12が備える他の演算部(制御用の演算部)により実行されてもよい。
図1では当該他の演算部の図示は省略されている。
【0027】
処理部12は、N個の演算部に対する2N個のデータの割り当て結果に基づいて、2N個のデータのうちのN個のデータに対する演算をN個の演算部により並列に実行する。上記のN=2の例では、処理部12は、演算部12a,12bに対するデータd1~d4の割り当て結果に基づいて、2個のデータに対する演算を、演算部12a,12bにより並列に実行する。
【0028】
図1には、演算部12a,12bによる演算の実行例20が示されている。実行例20は、演算部12a,12bそれぞれによる演算の実行時間の例を示す。横軸の左から右向かう方向が時間の正方向である。例えば、演算部12aは、データd1の演算を実行し、その後データd4の演算を実行する。演算部12bは、データd2の演算を実行し、その後データd3の演算を実行する。このように、処理部12は、演算部12a,12bを用いて、同時に2個のデータに対する演算を並列に実行する。
【0029】
第1の実施の形態のデータ処理装置10によれば、複数の相手データそれぞれとの組み合わせによる演算に用いられる2N個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとが特定される。上位のN個の第1データそれぞれが、演算対象の相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てられる。下位のN個の第2データそれぞれが、演算対象の相手データの数の昇順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てられる。N個の演算部に対する2N個のデータの割り当て結果に基づいて、2N個のデータのうちのN個のデータに対する演算がN個の演算部により並列に実行される。これにより、複数の演算部の処理量のばらつきを低減できる。
【0030】
ここで、例えば、データd1,d2,d3,d4を、相手データとの組み合わせ数(演算対象の相手データの数)の多い順に、演算部12a,12bにサイクリックに割り当てることも考えられる。サイクリックに割り当てる場合、演算部12aにデータd1,d3が、演算部12bにデータd2,d4がそれぞれ割り当てられる。しかし、この場合、演算部12aが担当するデータd1,d3に対する処理量と、演算部12bが担当するデータd2,d4に対する処理量との差は比較的大きくなる。その結果、演算部12aによるデータd1,d3に対する合計の計算時間が比較的長くなり、全体の演算の終了が遅延する。
【0031】
一方、データ処理装置10によれば、実行例20に示されるように、演算部12aが担当するデータd1,d4に対する処理量と、演算部12bが担当するデータd2,d3に対する処理量との差を低減できる。その結果、演算部12aの計算時間と演算部12bの計算時間との差が低減され、全体の演算の終了の遅延が低減される。
【0032】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態のデータ処理装置のハードウェア例を示す図である。
【0033】
データ処理装置100は、CPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。データ処理装置100が有するこれらのユニットは、データ処理装置100の内部でバスに接続されている。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0034】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。CPU101は複数のプロセッサコアを含むマルチコアプロセッサである。プロセッサコアはCPUコアと言われてもよい。以下ではプロセッサコアをコアと称する。
【0035】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、データ処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0036】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、データ処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0037】
GPU104は、CPU101からの命令に従って、データ処理装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0038】
入力インタフェース105は、データ処理装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス、タッチパネル、タッチパッド、トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、データ処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0039】
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0040】
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0041】
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0042】
なお、データ処理装置100は、複数のCPU101を有し、大規模な演算に用いられるHPC(High-Performance Computing)システムでもよい。
データ処理装置100は、パターンマイニングに用いられる。パターンマイニングでは、データ処理装置100は、パターンマイニングにより、条件を満たすサンプルが所定数以上ある条件の組み合わせを求める。以下では、一例として、マーケティング分野における購買予測や広告、web掲載などの計画を行うために行われるパターンマイニングを例示する。ただし、データ処理装置100は、選挙投票率の予測といった政治分野や病気の原因発見といった医療分野など、他分野におけるパターンマイニングに適用することもできる。
【0043】
図3は、商品の組み合わせの抽出例を示す図である。
例えば、マーケティング分野では、次のような場合にパターンマイニングが行われ得る。第1の例は、商品の組み合わせに関し、組み合わせ内の全ての商品を購入した人数が、例えば100人など一定数以上いるような組み合わせを求める場合である。第2の例は、特定の2つの商品の両方を購入した人数が、例えば100人など一定数以上であるか否かを調査する場合である。あるいは、第1の例、第2の例以外の他の目的でパターンマイニングが行われることもある。
【0044】
第2の実施の形態の例では、データ処理装置100により、任意のk個の商品の組み合わせを選択し、それら全てを購入した顧客の人数がs_min以上である商品の組み合わせを抽出する場合を例示する。kは2以上の整数である。s_minは1以上の整数である。
【0045】
商品購入履歴データ200は、顧客IDに対する「商品1」、「商品2」、「商品3」、…の購入履歴を示す。商品の列の「0」は購入しなかったことを示し、「1」は購入したことを示す。出力リスト210は、商品購入履歴データ200に基づいてデータ処理装置100により出力される。出力リスト210は、あるk個の商品の組み合わせを全て購入した人数がs_min以上である当該k個の商品の組み合わせを示す。次に、k=3の場合の計算例を説明する。
【0046】
図4は、3種類の商品を全て購入した人数の計算例を示す図である。
例えば、商品購入履歴データ200に基づいて「商品1」、「商品2」、「商品3」の全てを購入した人数を次のように計算する。まず、データ処理装置100は、商品購入履歴データ200の「商品1」の列と「商品2」の列との論理積(AND)を計算する(ステップST1)。各商品の列に相当するデータは、0,1が並ぶベクトルとなる。And
(1,2)は、「商品1」の列と「商品2」の列との論理積の計算結果である。例えば、「商品1」の列が「1111」であり、「商品2」の列が「0110」の場合、And
(1,2)は、「0110」となる。
【0047】
次に、データ処理装置100は、And(1,2)と「商品3」の列との論理積And(1,2,3)を計算する(ステップST2)。「商品3」の列が「0100」の場合、And(1,2,3)は「0100」となる。
【0048】
そして、データ処理装置100は、ステップST2の結果、すなわち、And(1,2,3)の要素の総和Sum(1,2,3)を計算する(ステップST3)。And(1,2,3)に対して、Sum(1,2,3)=0+1+0+0=1となる。データ処理装置100は、例えば、Sum(1,2,3)がs_min以上の場合、「商品1」、「商品2」、「商品3」の組み合わせを出力リスト210に追加する。
【0049】
次に、ステップST1に例示される2種類の商品の組み合わせに対する演算の例を説明する。
図5は、2種類の商品の組み合わせに対する演算例を示す図である。
【0050】
一例として、商品数d_x=10とする。マトリクス201は、2つの商品x,yの組み合わせに対応する論理積And(x,y)の各演算を例示する。列xは、商品購入履歴データ200の商品xに対応する。行yは、商品購入履歴データ200の商品yに対応する。すなわち、「列1」、「列2」、…、「列10」は、それぞれ「商品1」、「商品2」、…、「商品10」に対応する。また、「行1」、「行2」、…、「行10」は、それぞれ「商品1」、「商品2」、…、「商品10」に対応する。
【0051】
マトリクス201の1つのマスが、商品x,yそれぞれの列の組み合わせに対する1つの論理積And(x,y)の演算を示す。例えば、マトリクス201の7行8列目のマスは、商品購入履歴データ200の「商品7」の列と同「商品8」の列との論理積And(8,7)を示す。商品数d_x=10の場合、2つの商品の列の組み合わせ総数は、10C2=45通りとなる。なお、マトリクス201の斜線が記載されたマスは、当該マスに対応する演算が実行されないことを示す。
【0052】
データ処理装置100は、論理積And
(x,y)に基づいて、3種類の商品の組み合わせに対する演算を行う。
図6は、3種類の商品の組み合わせに対する演算例を示す図である。
【0053】
マトリクス202は、And(x,y)のデータと、商品x,yとは異なる商品zのデータ(相手データ)との組み合わせに対応する論理積And(x,y,z)の各演算を例示する。マトリクス202における列zは、商品購入履歴データ200の商品zに対応する。マトリクス202の行は、And(x,y)に相当する。なお、図中、マトリクス202の行は、And(x,y)に対応するラベル(x,y)により識別される。マトリクス202の横軸におけるzの値の数はd_x個である。マトリクス202の縦軸における(x,y)の数はd_xC2である。
【0054】
マトリクス202の行は、(9,10),(8,10),(8,9),(7,10),(7,9),…,(1,2)の順に並べられる。列は、zの10~1の順に並べられる。And(x,y)ごとに計算する組み合わせ数、すなわち、演算対象の相手データの数は、(x,y)に対して組み合わせるzの数として、組み合わせの重複がないように予め特定される。マトリクス202の行に対応する(x,y)の並び順は、当該行に対応するAnd(x,y)のデータを、当該And(x,y)に対して計算する組み合わせ数(zの数)の降順にソートした結果に相当する。
【0055】
マトリクス202の1つのマスが、And(x,y)と商品zの列との組み合わせに対する1つの論理積And(x,y,z)の演算を示す。商品数d_x=10の場合、And(x,y)と商品zの列との組み合わせ総数は、10C3=120通りとなる。なお、マトリクス202の斜線が記載されたマスは、当該マスに対応する演算が実行されないことを示す。
【0056】
マトリクス201やマトリクス202で示される論理積の演算は、1行に対応する演算を1スレッドとしてCPU101の各コアに割り振ることで、マルチスレッドで並列に実行可能である。
【0057】
図7は、CPUのハードウェア例を示す図である。
CPU101は、コア121,122,123,124およびキャッシュメモリ125を有する。コア121~124は、それぞれが並列に演算を実行するプロセッサコアである。キャッシュメモリ125は、コア121~124それぞれの演算に使用されるデータが格納される。キャッシュメモリ125は、コア121~124から、RAM102よりも高速にアクセス可能である。キャッシュメモリ125には演算に用いられるデータがRAM102からロードされる。また、キャッシュメモリ125に格納されたデータがRAM102に書き込まれることもある。キャッシュメモリ125は、コア121~124により共有される。例えば、あるコアの演算のためにキャッシュメモリ125にロードされたデータは、他のコアの演算にも再利用できる。
【0058】
例えば、マトリクス202に対して、コア121~124には、次のように演算に用いられるデータが割り当てられる。
図8は、複数のコアに対するデータ割り当て例を示す図である。
【0059】
マトリクス300は、マトリクス202の一部を記載したものである。第2の実施の形態の例では、4つのコア121~124に対し、ソート順位が隣接する8つ(4×2=8)のAnd(x,y)のデータを1セットとし、次のように各データが各コアに割り当てられる。
【0060】
具体的には、組み合わせ数が上位の4個のデータそれぞれが、組み合わせ数の降順となるように、1番目のコア121から4番目のコア124までの4個のコアそれぞれに割り当てられる。また、組み合わせ数が下位の4個のデータそれぞれが、組み合わせ数の昇順となるように、1番目のコア121から4番目のコア124までの4個のコアそれぞれに割り当てられる。なお、「組み合わせ数」は、演算対象の相手データの数に相当する。
【0061】
すると、マトリクス300の例では、コア121~124に対して、次のように入れ子状にデータが割り当てられる。組み合わせ数「8」であるAnd(9,10)がコア121に割り当てられる。組み合わせ数「7」であるAnd(8,10)がコア122に割り当てられる。組み合わせ数「7」であるAnd(8,9)がコア123に割り当てられる。組み合わせ数「6」であるAnd(7,10)がコア124に割り当てられる。また、組み合わせ数「6」であるAnd(7,9)がコア124に割り当てられる。組み合わせ数「6」であるAnd(7,8)がコア123に割り当てられる。組み合わせ数「5」であるAnd(6,10)がコア122に割り当てられる。組み合わせ数「5」であるAnd(6,9)がコア121に割り当てられる。
【0062】
マトリクス300における行に対応する他のデータについても、同様にコア121~124が入れ子状に割り当てられる。
すると、コア121~124により4スレッドでマトリクス300の行方向の演算を並列に実行することができる。例えば、コア121は、And(9,10)と商品z=8~1の列それぞれとを組み合わせた8通り分の論理積の演算を1スレッドで実行する。コア122は、And(8,10)と商品z=7~1の列それぞれとを組み合わせた7通り分の論理積の演算を1スレッドで実行する。コア123は、And(8,9)と商品z=7~1の列それぞれとを組み合わせた7通り分の論理積の演算を1スレッドで実行する。コア124は、And(7,10)と商品z=6~1の列それぞれとを組み合わせた6通り分の論理積の演算を1スレッドで実行する。
【0063】
コア124は、当該6通りの分の論理積の演算が終了すると、And(7,9)と商品z=6~1の列それぞれとを組み合わせた6通り分の論理積の演算を1スレッドで実行する。コア121~123も同様に、割り当てられたデータに対する演算を順次実行する。
【0064】
なお、データ処理装置100は、マトリクス201に関しても、
図8で例示した方法と同様に、コア121~124へマトリクス201の行yに対応するデータ、すなわち、商品購入履歴データ200の商品yの列を割り当てることができる。
【0065】
図9は、データ処理装置の機能例を示す図である。
データ処理装置100は、データ記憶部130、キャッシュ記憶部140、割り当て部150および演算制御部160を有する。データ記憶部130は、RAM102やHDD103の記憶領域により実現される。キャッシュ記憶部140はキャッシュメモリ125の記憶領域により実現される。割り当て部150および演算制御部160は、RAM102に記憶されたプログラムをCPU101が実行することで実現される。
【0066】
データ記憶部130は、マトリクス201やマトリクス202で使用されるデータの全体を記憶する。例えば、データ記憶部130は、商品購入履歴データ200を記憶する。
キャッシュ記憶部140は、データ記憶部130に記憶されたデータのうちの一部を記憶する。キャッシュ記憶部140には、データ記憶部130に記憶されたデータのうちの一部が、演算制御部160による演算実行に応じてロードされる。キャッシュ記憶部140は一定のサイズを有する。
【0067】
割り当て部150は、コア121~124それぞれに対して、マトリクス201やマトリクス202の行に対応するデータを割り当てる。データの割り当て方法には、
図8で例示した方法が用いられる。
【0068】
演算制御部160は、割り当て部150によるデータの割り当て結果に基づき、コア121~124を用いて並列に各データに関する演算を実行する。演算制御部160は、演算結果をデータ記憶部130に格納する。
【0069】
次に、データ処理装置100による処理手順を説明する。
図10は、組み合わせ計算例を示すフローチャートである。
(S10)演算制御部160は、コア121~124を用いてk=2の組み合わせ計算を行い、各組み合わせの論理積And
(x,y)をリストAとして出力する。
【0070】
(S11)割り当て部150は、リストAの各データ、すなわち、論理積And
(x,y)を各コアに入れ子状に割り当てる。ステップS11の割り当てでは、
図8で例示した方法が用いられる。
【0071】
(S12)演算制御部160は、下記ステップS13~S16で示される任意の3個の商品の組み合わせ計算をコア121~124を用いて繰り返し実行する。組み合わせ計算の総回数は、d_xC3回である。
【0072】
(S13)コア121~124それぞれは、当該コアにて担当する組み合わせAnd(x,y)を選択し、未選択の組み合わせ(x,y,z)となる商品zを選択する。
(S14)コア121~124それぞれは、3個の商品x,y,zの論理積And(x,y,z)を計算する。
【0073】
(S15)コア121~124それぞれは、論理積And(x,y,z)から3つの商品x,y,zを購入した人数Sum(x,y,z)を計数する。
(S16)コア121~124それぞれは、Sum(x,y,z)をリストBに追加する。
【0074】
(S17)演算制御部160は、ステップS13~S16で示される任意の3個の商品の全ての組み合わせに対する計算を終了すると、ステップS18に処理を進める。
(S18)演算制御部160は、リストBを出力する。リストBは、データ記憶部130に格納される。そして、組み合わせ計算の処理が終了する。
【0075】
例えば、ステップS18で出力されたリストBの中から、Sum
(x,y,z)がs_min以上である商品x,y,zの組み合わせが、出力リスト210に追加される。
次に、
図8のデータ割り当てに対する比較例を説明する。
【0076】
図11は、複数のコアに対するデータ割り当ての比較例を示す図である。
マトリクス400は、マトリクス202の一部を記載したものである。例えば、マトリクス400の各行に対応するデータを、組み合わせ数の多い順に、4つのコアC1,C2,C3,C4にサイクリックに割り当てることも考えられる。この場合、コアC1にAnd
(9,10)、コアC2にAnd
(8,10)、コアC3にAnd
(8,9)、コアC4にAnd
(7,10)、コアC1にAnd
(7,9)、…というような割り当てとなる。しかし、比較例の割り当て方法では、コア数が増えるほど、各コアの処理量の差は大きくなる。コア間の処理量の差が大きくなると、処理が特定のコアに偏り、全体の処理時間が長くなる。
【0077】
また、他の比較例の方法として、マトリクス400の一部を4分割してコアC1~C4に割り当てる例も考えられる。例えば、マトリクス400の上から1行目~5行目かつ左から1列目~5列目の第1領域、1行目~5行目かつ6列目~10列目の第2領域、6行目~10行目かつ1列目~5列目の第3領域、6行目~10行目かつ6列目~10列目の第4領域のように分割され得る。そして、分割した領域に含まれる各論理積の演算を、領域ごとにコアC1~C4に割り振る。しかし、このような割り当て方法でも、コアC1~C4の処理量の差は大きくなる。例えば、コアC1に第1領域、コアC2に第2領域、コアC3に第3領域、コアC4に第4領域を割り当てる場合、コアC2,C4が担当する組み合わせ数が25となり、コアC1が担当する組み合わせ数が9となり、コアC3が担当する組み合わせ数が1となる。このため、マトリクス400の1行目~10行目かつ1列目~10列目の部分だけでもコアC1,C3間の処理量の差が非常に大きくなってしまい、当該差を埋めることが難しくなる。また、この方法では、4つのコアのうちの高々2つのコアでしか、同じ商品zのデータを使用できない。
【0078】
図12は、各コアが計算する組み合わせ数の比較を示す図である。
テーブル500は、
図11で示した比較例の方法を用いた場合と、
図8で例示したデータ処理装置100の方法を用いた場合とにおける、コア121~124それぞれが計算する組み合わせ数を示す。コア数=4である。商品数d_x=10である。あるコアが計算する組み合わせ数は、当該コアに割り当てられる(x,y)の各データに対応する組み合わせ数の総和である。
【0079】
図11の比較例の方法では、コア121,122,123,124それぞれが計算する組み合わせ数は、33,31,29,27である。比較例の方法では、コア間の処理量の差の最大値は6となる。
【0080】
一方、
図8のデータ処理装置100の方法では、コア121,122,123,124それぞれが計算する組み合わせ数は、30,30,30,30である。データ処理装置100では、コア間の処理量の差の最大値は0となる。このため、データ処理装置100では、比較例の方法に比べ、全体として3組み合わせ分(=33-30)の計算時間を削減可能になる。
【0081】
以上説明したように、第2の実施の形態のデータ処理装置100によれば、複数のコアの処理量のばらつきを低減できる。その結果、全体の組み合わせに対する演算の終了の遅延を低減できる。
【0082】
ところで、コア121~124は、上記の演算において例えば次のようにキャッシュ記憶部140を共用する。
図13は、第2の実施の形態のキャッシュ使用例(その1)を示す図である。
【0083】
ここで、And(x,y)とzとの1つの組み合わせに対する演算を1ステップとする。テーブル600は、各ステップにおけるコア121~124の演算対象の組み合わせ(z,(x,y))を示す。ステップはステップ1,2,…というようにステップ番号の昇順に進む。また、図中、コア121を「コア1」、コア122を「コア2」、コア123を「コア123」、コア124を「コア4」と略記する。1つの組み合わせの計算にかかる時間は、コア121~124で同じであるとする。
【0084】
更に、各ステップにおける各コアのキャッシュ記憶部140へのデータのロード順は、コア121が最も早く、2番目にコア122が早く、3番目にコア123が早く、コア124が最も遅いものとする。キャッシュ記憶部140に空きがなくなると、キャッシュ記憶部140のデータは、最後に使用されてからの経過時間が長いデータが優先的に削除される。
【0085】
例えば、ステップ1では、コア121~124は次の組み合わせ(z,(x,y))の演算を実行する。コア121は(8,(9,10))の演算を実行する。コア122は(7,(8,10))の演算を実行する。コア123は(7,(8,9))の演算を実行する。コア124は(6,(7,10))の演算を実行する。
【0086】
ステップ1終了直後、キャッシュ記憶部140に保持されるデータは古い方から順に、And(9,10)、「商品8」、And(8,10)、And(8,9)、「商品7」、And(7,10)、「商品6」となる。ここで、「商品z」は商品購入履歴データ200の商品zの列に相当する。なお、図中では、キャッシュ記憶部140に格納されているデータは、図の左側へ向かうほど最後に使用されてからの時間が長く(使用履歴が古く)、図の右側へ向かうほど最後に使用されてからの時間が短い(使用履歴が新しい)。
【0087】
次に、ステップ2では、コア121~124は次の組み合わせ(z,(x,y))の演算を実行する。コア121は(7,(9,10))の演算を実行する。コア122は(6,(8,10))の演算を実行する。コア123は(6,(8,9))の演算を実行する。コア124は(5,(7,10))の演算を実行する。
【0088】
ステップ2終了直後、キャッシュ記憶部140に保持されるデータは古い方から順に、「商品8」、And(9,10)、「商品7」、And(8,10)、「商品6」、And(7,10)、「商品5」となる。
【0089】
このように、第2の実施の形態では、コア121~124はマトリクス300の行方向について、zの大きい方から小さい方へ向かう順で演算を行う。
図13のマトリクス300の各マスには、当該マスの演算が実行されるステップ番号が記載されている。
【0090】
図14は、第2の実施の形態のキャッシュ使用例(その2)を示す図である。
例えば、ステップxの実行中に、キャッシュ記憶部140に新たにデータDが追加される際、キャッシュ記憶部140に空き容量がない場合、キャッシュ記憶部140において、使用履歴が最も古いデータ(例えば、「商品8」のデータ)が削除される。
【0091】
「商品8」のデータは、キャッシュ記憶部140から削除されると、他の演算でキャッシュ記憶部140のデータを再利用できなくなる。このため、他の演算で「商品8」のデータを使用する場合、「商品8」のデータは、キャッシュ記憶部140に再ロードされる。例えば、コア121~124が担当するマトリクス300の各行を、4行ずつブロックに区切る。この場合、各コアが、マトリクス300の第1ブロックの演算後に、次の第2ブロックの演算に移る際、キャッシュ上に「商品z」のデータが無い場合がある。その場合、「商品z」のデータが再ロードされる。
【0092】
[第3の実施の形態]
次に、第3の実施の形態を説明する。前述の第2の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0093】
第3の実施の形態のデータ処理装置100は、第2の実施の形態よりもキャッシュメモリ125へのデータのロード回数を低減する機能を提供する。
図15は、第3の実施の形態の組み合わせ計算の実行順序の例を示す図である。
【0094】
マトリクス700は、マトリクス202の一部を記載したものである。
第3の実施の形態では、コア121~124は、マトリクス700における、ある行の演算を、zを第1の順序で用いて実行する。そして、コア121~124は、次の行の演算を、zを第1の順序とは逆の順序で用いて実行する。第1の順序は、例えばzの降順である。第1の順序はzの昇順でもよい。
【0095】
マトリクス700の各マスには、行に対応するデータAnd(x,y)に対する組み合わせ計算の実行順序を示すステップ数が記載されている。コア121~124には、第2の実施の形態と同様の方法で、各行に対応するデータAnd(x,y)が割り当てられる。例えば、コア121~124は、自身が担当するデータAnd(x,y)について、相手データをzの降順に用いて演算を実行すると、次に自身が担当するデータAnd(x’,y’)について、相手データをzの昇順に用いて演算を実行する。
【0096】
より具体的には、And(9,10),And(6,9)がコア121に割り当てられる例では、コア121はAnd(9,10)に対しz=…,3,2,1の順で演算を実行した後、And(6,9)に対しz=1,2,3,…の順で演算を実行する。このように、第3の実施の形態では、コア121~124は、組み合わせの相手データを折り返し順で使用して演算を実行する。これにより、ある組合せの演算の際に、他の組み合わせの演算のためにキャッシュメモリ125にロード済の相手データが利用され易くなる。
【0097】
図16は、商品数が10個の場合の組み合わせ計算の実行順序の例を示す図である。
マトリクス700aは、商品数d_x=10の場合における、コア121~124による全ての組み合わせ計算の実行順序を示す。なお、And
(9,10)にはコア121が、And
(8,10)にはコア122が、And
(8,9)にはコア123が、And
(7,10)にはコア124がそれぞれ割り当てられるとする。以降、
図8で例示した第2の実施の形態の方法で各コアに入れ子状にデータが割り当てられる。
【0098】
図17は、第3の実施の形態のキャッシュ使用例を示す図である。
テーブル800は、キャッシュ記憶部140におけるデータの格納状態を、マトリクス700aの各ステップ番号(step)に対して例示する。テーブル800の(x,y)の項目は、And
(x,y)のデータを示す。テーブル800のzの項目は、商品購入履歴データ200の「商品z」の列に相当するデータを示す。
【0099】
テーブル800の太枠線で囲われたマスは、キャッシュ記憶部140に格納されたデータ、すなわち、キャッシュ上のデータを示す。なお、キャッシュ記憶部140には、各ステップにおいて、最大10個のデータを格納できるものとする。すなわち、And(x,y)のデータおよび「商品z」の列に相当する、キャッシュ上のデータの総数が10個を超える場合、最後に使用されてからの時間が最も長いデータがキャッシュ記憶部140から削除される。
【0100】
また、テーブル800の薄いドットのハッチングのマスは、データ記憶部130からキャッシュ記憶部140にロードされるデータ、すなわち、RAM102からキャッシュメモリ125にロードされるデータを示す。
【0101】
また、テーブル800の斜線のハッチングのマスは、キャッシュ溢れにより、キャッシュ記憶部140から削除されるデータを示す。当該削除されるデータは、キャッシュ記憶部140内で使用履歴が最古のデータである。
【0102】
更に、テーブル800の濃いドットのハッチングのマスは、各ステップの計算で使用されるデータを示す。計算で使用されるデータは、キャッシュ記憶部140内で使用履歴が最新に更新される。
【0103】
テーブル800は、マトリクス700aにおける各ステップのうち、ステップ番号1~18(step=1~18)のステップを例示する。
図18は、第3の実施の形態のキャッシュ使用例(続き)を示す図である。
【0104】
テーブル800aは、マトリクス700aにおける各ステップのうち、ステップ番号19~26(step=19~26)のステップを例示する。
図19は、第3の実施の形態のキャッシュ使用例(続き)を示す図である。
【0105】
テーブル800bは、マトリクス700aにおける各ステップのうち、ステップ番号27~30(step=27~30)のステップを例示する。なお、テーブル800bは、最終的に各データをキャッシュ記憶部140から削除するステップ番号31(step=31)のステップも例示する。
【0106】
テーブル800~800bの例において、RAM102からキャッシュメモリ125へのロード回数は全部で53回となる。
図20は、組み合わせ計算例を示すフローチャートである。
【0107】
第3の実施の形態では、
図10の手順のステップS13に代えて、ステップS13aが実行される点が第2の実施の形態と異なる。そこで、以下ではステップS13aを主に説明し、他のステップの説明を省略する。ステップS13aは、ステップS12の次に実行される。
【0108】
(S13a)コア121~124それぞれは、当該コアにて担当する組み合わせAnd
(x,y)を選択し、未選択の組み合わせ(x,y,z)となる商品zを、折り返しとなる順序で選択する。ここで、折り返しとなる順序での選択方法には、
図15のマトリクス700や
図16のマトリクス700aで例示した方法が用いられる。そして、ステップS14に処理が進む。
【0109】
このように、データ処理装置100は、組み合わせの相手データをzの折り返し順で用いて組み合わせ計算を実行することで、キャッシュメモリ125にロードされているデータの再利用可能性を高め、キャッシュメモリ125へのロードの回数を低減できる。その結果、データ処理装置100は、キャッシュメモリ125へのロードに伴うオーバーヘッドを低減でき、組み合わせ計算の高速化を図れる。
【0110】
[第4の実施の形態]
次に、第4の実施の形態を説明する。前述の第2,第3の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【0111】
第4の実施の形態では、データ処理装置100は、キャッシュメモリ125へのデータのロード回数を更に低減する機能を提供する。第4の実施の形態は、k≧3以上の場合に適用される。
【0112】
図21は、第4の実施の形態のセクタキャッシュの例を示す図である。
第4の実施の形態のキャッシュ記憶部140は、セクタ141,142を有する。セクタ141,142は、キャッシュ記憶部140の記憶領域全体を更に分割した記憶領域である。セクタ141の識別番号は「#0」である。セクタ142の識別番号は「#1」である。セクタキャッシュはソフトウェア制御可能なキャッシュ機構である。セクタキャッシュを用いると、このように、キャッシュメモリ125の記憶領域を複数のセクタに分割し、再利用性のあるデータと再利用性のないデータをセクタごとに住み分けることができる。
【0113】
ここで、
図17~
図19で例示したテーブル800~800bの例において、And
(x,y)よりも「商品z」のデータの方が再利用性は高い。k≧3の場合において、And
(x,y)は、マトリクス700aの1行の処理が完了した後、二度と参照されることはないためである。
【0114】
そこで、コア121~124は、And(x,y)と「商品z」のデータとを異なるセクタに格納する。例えば、コア121~124は、And(x,y)のデータを、セクタ141に格納する。コア121~124は、「商品z」のデータを、セクタ142に格納する。例えば、データaの配列をセクタ141に配置する、というように、何れのデータを何れのセクタに配置するかは、コア121~124が実行するプログラムのソースコード上で指定することができる。セクタ141,142それぞれの容量の割合は、例えばWAYという単位で指定可能である。WAY当たりの単位サイズsに当該セクタのWAYの値wを乗じた値が、当該セクタのサイズM(=w×s)となる。s,wは正の実数である。
【0115】
例えば、セクタ141のサイズは、コア数分のデータサイズ(例えば、4コアでは4データ分のサイズ)よりも大きくなるWAYの値w相当のサイズ(=w×s)のうちの最小のサイズM1(=w1×s)に対応するWAYの値w1とされる。w1は正の実数である。割り当て部150は、データサイズに基づいて、キャッシュ記憶部140の記憶領域のうちセクタ141に割り当てるWAYの値を決定し、残りのWAYの値をセクタ142に割り当てるようにしてもよい。
【0116】
図22は、第4の実施の形態のキャッシュ使用例を示す図である。
テーブル900は、キャッシュ記憶部140におけるデータの格納状態を、マトリクス700aの各ステップ番号(step)に対して例示する。テーブル900の(x,y)の項目は、And
(x,y)のデータを示す。テーブル900のzの項目は、商品購入履歴データ200の「商品z」の列に相当するデータを示す。
【0117】
コア数は4である。商品数d_x=10である。また、キャッシュ記憶部140の記憶領域は、最大で10データを保持可能であるとする。更に、キャッシュ記憶部140の当該記憶領域はセクタ#0:セクタ#1=4:6の割合で分割されるものとする。
【0118】
第4の実施の形態では、And(x,y)のデータがセクタ141(セクタ#0)に載り、「商品z」のデータがセクタ142(セクタ#1)に載る点が、第3の実施の形態と異なる。
【0119】
テーブル900の太枠線で囲われたマスは、キャッシュ記憶部140に格納されたデータ、すなわち、キャッシュ上のデータを示す。なお、キャッシュ記憶部140には、各ステップにおいて、最大10個のデータを格納できるものとする。
【0120】
また、テーブル900の薄いドットのハッチングのマスは、データ記憶部130からキャッシュ記憶部140にロードされるデータ、すなわち、RAM102からキャッシュメモリ125にロードされるデータを示す。
【0121】
また、テーブル900の斜線のハッチングのマスは、キャッシュ溢れにより、キャッシュ記憶部140から削除されるデータを示す。データの削除は、セクタごとに行われる。当該削除されるデータは、該当のセクタ内で使用履歴が最古のデータである。
【0122】
更に、テーブル900の濃いドットのハッチングのマスは、各ステップの計算で使用されるデータを示す。計算で使用されるデータは、該当のセクタ内で使用履歴が最新に更新される。
【0123】
テーブル900は、マトリクス700aにおける各ステップのうち、ステップ番号1~19(step=1~19)のステップを例示する。
図23は、第4の実施の形態のキャッシュ使用例(続き)を示す図である。
【0124】
テーブル900aは、マトリクス700aにおける各ステップのうち、ステップ番号20~28(step=20~28)のステップを例示する。
図24は、第4の実施の形態のキャッシュ使用例(続き)を示す図である。
【0125】
テーブル900bは、マトリクス700aにおける各ステップのうち、ステップ番号29,30(step=29,30)のステップを例示する。
図25は、組み合わせ計算例を示すフローチャートである。
【0126】
第4の実施の形態では、
図20の手順のステップS10の前にステップS10aが実行される点が第3の実施の形態と異なる。そこで、以下ではステップS10aを主に説明し、他のステップの説明を省略する。
【0127】
(S10a)割り当て部150は、セクタキャッシュの割合、すなわち、セクタ141,142の割合を指定し、データzをセクタ142(セクタ#1)に割り当てるように指定する。前述のように、割り当て部150は、コア数と、商品購入履歴データ200の1列当たりのデータサイズとに基づいて、キャッシュ記憶部140のうちのセクタ141(セクタ#0)のサイズを決定し、残りをセクタ142(セクタ#1)のサイズとする。そして、ステップS10に処理が進む。
【0128】
このように、データ処理装置100は、セクタキャッシュを用いることで、キャッシュメモリ125へのロード回数を一層低減できる。例えば、
図22~
図24のテーブル900~900bにおいて、RAM102からキャッシュメモリ125へのロード回数は全部で44回となる。
【0129】
第3の実施の形態の
図17~
図19の例では、ロード回数は全部で53回である。例えば、第3の実施の形態では、
図18のstep=22,23のように、再利用可能性の高いデータ(例えばz=1のデータ)がキャッシュ上から削除された後に、再びロードされるケースが発生している。このようなケースはロード回数が増える要因となる。
【0130】
一方、データ処理装置100は、セクタキャッシュを用いることで、And(x,y)のデータのロードにより、「商品z」のデータがキャッシュ上から追い出されることを抑えられる。例えば、And(x,y)のデータをロードするときには、最終使用時からの時間が最長であるAnd(x,y)のデータがセクタ141から追い出されて、新たなAnd(x,y)のデータがセクタ141に格納される。その結果、「商品z」のデータが、キャッシュメモリ125のセクタ142上に長く保持されるようになり、RAM102からキャッシュメモリ125へのロード回数を一層低減できる。
【0131】
このように、第4の実施の形態では、セクタキャッシュを用いることで、第3の実施の形態よりもロード回数を低減できる。また、その結果、データ処理装置100は、キャッシュメモリ125へのロードに伴うオーバーヘッドを一層低減でき、組み合わせ計算の一層の高速化を図れる。
【0132】
ところで、パターンマイニング処理をマルチスレッドで実行する際に、スレッド(コア)ごとの処理負荷のばらつきや、キャッシュメモリ125の非効率な使用のため、処理時間が長くなることがある。
【0133】
例えば、コアごとの処理負荷のばらつきへの対策として、OSのスケジューラがコアの処理負荷を常時監視し、負荷の少ないコアに処理を割り振ることが考えられる。しかし、このような方法では、常時監視用のプログラムを要することになる。また、OSのスケジューラでは、パターンマイニング処理以外の他のプログラムなどの処理を各コアに分散するに過ぎない。
【0134】
これに対し、データ処理装置100では、コアへのスレッドの割り振りにスケジューラを用いず、組み合わせ計算の処理の実行前に割り振りを決定する。このため、実装が容易である。また、データ処理装置100の方法は、扱う行列データが三角行列に近いデータであるほど、各コアの処理量の平準化に有用である。すなわち、データ処理装置100の方法は、扱う行列データが三角行列に近いデータであるほど、各コアの負荷を均等に近くすることができる。また、データ処理装置100は、キャッシュメモリ125にロードされたデータの再利用可能性を高めることで、RAM102からキャッシュメモリ125へのデータのロード回数を削減でき、組み合わせ計算の全体の処理時間を短縮できる。
【0135】
次に、第2~第4の実施の形態の処理手順を一般化した例を説明する。
図26は、第2の実施の形態の組み合わせ計算を一般化したフローチャートである。
(S20)演算制御部160は、計算対象の商品の組み合わせ数nがn=2であるか否かを判定する。ここで、nは2以上の整数である。n≠2の場合、ステップS21に処理が進む。n=2の場合、ステップS22に処理が進む。
【0136】
(S21)演算制御部160は、コア121~124を用いてk=n-1の組み合わせ計算を行い、各組み合わせの論理積And(x,...)をリストAとして出力する。そして、ステップS23に処理が進む。
【0137】
(S22)演算制御部160は、相手データdをリストAとする。リストAは、相手データdの一覧となる。そして、ステップS23に処理が進む。
(S23)割り当て部150は、リストAの各データ、すなわち、論理積And
(x,...)を各コアに入れ子状に割り当てる。ステップS23の割り当てでは、
図8で例示した方法が用いられる。(x,...)は、n-1個の商品の組み合わせを示す。
【0138】
(S24)演算制御部160は、下記ステップS25~S27で示される任意のn個の商品の組み合わせ計算をコア121~124を用いて繰り返し実行する。組み合わせ計算の総回数は、d_xCn回である。
【0139】
(S25)コア121~124それぞれは、当該コアにて担当する組み合わせAnd(x,...)を選択し、未選択の組み合わせ(x,...,d)となる商品dのデータ(すなわち、相手データd)を選択する。(x,...,d)は、n個の商品の組み合わせを示す。コア121~124それぞれは、n個の商品x,...,dの論理積And(x,...,d)を計算する。
【0140】
(S26)コア121~124それぞれは、論理積And(x,...,d)からn個の商品x,...,dを購入した人数Sum(x,...,d)を計数する。
(S27)コア121~124それぞれは、Sum(x,...,d)をリストBに追加する。
【0141】
(S28)演算制御部160は、ステップS25~S27で示される任意のn個の商品の全ての組み合わせに対する計算を終了すると、ステップS29に処理を進める。
(S29)演算制御部160は、リストBを出力する。リストBは、データ記憶部130に格納される。リストBは、商品(x,...,d)を購入した総和のリストとなる。そして、組み合わせ計算の処理が終了する。
【0142】
図27は、第3の実施の形態の組み合わせ計算を一般化したフローチャートである。
図27の手順では、
図26のステップS24の次にステップS24aが実行される点が、
図26の手順と異なる。そこで、以下ではステップS24aを主に説明し、他のステップの説明を省略する。
【0143】
(S24a)コア121~124それぞれは、当該コアにて担当する組み合わせAnd
(x,...)を選択し、未選択の組み合わせ(x,...,d)となる商品dを、折り返しとなる順序で選択する。ここで、折り返しとなる順序での選択方法には、
図15のマトリクス700や
図16のマトリクス700aで例示した方法が用いられる。そして、ステップS25に処理が進む。
【0144】
図28は、第4の実施の形態の組み合わせ計算を一般化したフローチャートである。
図28の手順は、n≧3の場合であり、
図27の手順のステップS20に代えて、ステップS20aが実行される点、および、ステップS22が実行されない点が
図27の手順と異なる。そこで、以下ではステップS20aを主に説明し、他のステップの説明を省略する。なお、
図28の手順ではn≧3であるため、ステップS21のkについてk≧2となる。
【0145】
(S20a)割り当て部150は、セクタキャッシュの割合、すなわち、セクタ141,142の割合を指定し、データzをセクタ142(セクタ#1)に割り当てるように指定する。前述のように、割り当て部150は、コア数と、商品購入履歴データ200の1列当たりのデータサイズとに基づいて、キャッシュ記憶部140のうちのセクタ141(セクタ#0)のサイズを決定し、残りをセクタ142(セクタ#1)のサイズとする。そして、ステップS21に処理が進む。
【0146】
このように、第2~第4の実施の形態の手順を一般化することができる。
第2~第4の実施の形態で説明したように、データ処理装置100は次の処理を実行する。
【0147】
割り当て部150は、複数の相手データそれぞれとの組み合わせによる演算に用いられる2N(Nは2以上の整数)個のデータから、演算対象の相手データの数でのソート結果における上位のN個の第1データと下位のN個の第2データとを特定する。割り当て部150は、上位のN個の第1データそれぞれを、演算対象の相手データの数の降順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。割り当て部150は、下位のN個の第2データそれぞれを、演算対象の相手データの数の昇順となるように、第1の演算部から第Nの演算部までのN個の演算部それぞれに割り当てる。演算制御部160は、N個の演算部に対する2N個のデータの割り当て結果に基づいて、2N個のデータのうちのN個のデータに対する演算をN個の演算部により並列に実行する。
【0148】
これにより、データ処理装置100は、複数の演算部(N個の演算部)の処理量のばらつきを低減できる。コア121~124は、4個の演算部の一例である。なお、データ処理装置100の機能は、
図5,6に例示されるように、扱うデータが三角行列に近いほど、複数の演算部の処理量のばらつきを小さくできる。また、
図5のマトリクス201の例では、行に対応するyのデータに対して、列に対応するxのデータが相手データの一例となる。
図6のマトリクス202の例では、行に対応するAnd
(x,y)のデータに対して、列に対応するzのデータが相手データの一例となる。
【0149】
また、上位のN個の第1データそれぞれに対する演算の実行では、N個の演算部は、複数の相手データのうち当該演算に用いる相手データを第1の順序で選択してもよい。下位のN個の第2データそれぞれに対する演算の実行では、N個の演算部は、複数の相手データのうち当該演算に用いる相手データを第1の順序とは逆の順序で選択してもよい。
【0150】
これにより、データ処理装置100は、N個の演算部が共用するキャッシュメモリ125上に相手データをロードする回数を低減できる。その結果、データ処理装置100は、キャッシュメモリ125へのロードに伴うオーバーヘッドを低減でき、演算の高速化を図れる。
【0151】
また、割り当て部150は、N個の演算部によりアクセスされるキャッシュメモリ125の記憶領域を第1記憶領域と第2記憶領域とに分割してもよい。そして、N個の演算部は、2N個のデータのうちの演算の実行対象のデータを第1記憶領域にロードし、複数の相手データのうちの演算の実行対象の相手データを第2記憶領域にロードしてもよい。
【0152】
これにより、データ処理装置100は、再利用可能性の高い相手データがキャッシュメモリ125から追い出されることを抑制し、キャッシュメモリ125上に相手データをロードする回数を一層低減できる。セクタ141は、第1記憶領域の一例である。セクタ142は、第2記憶領域の一例である。
【0153】
例えば、割り当て部150は、2N個のデータそれぞれのサイズである第1サイズにNを乗じた値に基づいて、第1記憶領域のサイズを決定する。これにより、データ処理装置100は、第1記憶領域のサイズを適切に決定でき、キャッシュメモリ125上に相手データをロードする回数を効率的に低減できる。例えば、データ処理装置100は、演算部の数Nに対して、キャッシュメモリ125の記憶領域の使用可能なサイズのうち、第1記憶領域のサイズを必要最小限に定め、残りを第2記憶領域のサイズとする。このようにすると、第2記憶領域のサイズを比較的大きくすることができ、相手データを保持できるサイズが大きくなる。このため、データ処理装置100は、キャッシュメモリ125上に相手データをロードする回数をより一層低減できる。
【0154】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体113に記録できる。
【0155】
例えば、プログラムを記録した記録媒体113を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体113に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0156】
10 データ処理装置
11 記憶部
11a テーブル
12 処理部
12a,12b 演算部
20 実行例