(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024042450
(43)【公開日】2024-03-28
(54)【発明の名称】行列演算プログラム、行列演算方法および情報処理装置
(51)【国際特許分類】
G06F 17/16 20060101AFI20240321BHJP
【FI】
G06F17/16 M
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022147180
(22)【出願日】2022-09-15
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】栗原 康志
(72)【発明者】
【氏名】川上 健太郎
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB42
5B056BB71
5B056FF01
5B056FF02
(57)【要約】
【課題】パターンマイニング処理を高速化する。
【解決手段】実施形態の行列演算プログラムは、分割する処理と、実行する処理とをコンピュータに実行させる。分割する処理は、行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が行列内の列の全組み合わせに対して実行する行列演算において、列のデータサイズと、演算部が行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が第2の記憶部内に収まるように行列を列群のブロックに分割する。実行する処理は、分割した列群のブロックごとに計算する処理を実行する。
【選択図】
図10
【特許請求の範囲】
【請求項1】
行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた前記列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が前記行列内の列の全組み合わせに対して実行する行列演算において、
前記列のデータサイズと、前記演算部が前記行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が前記第2の記憶部内に収まるように前記行列を前記列群のブロックに分割し、
分割した前記列群のブロックごとに前記計算する処理を実行する、
処理をコンピュータに実行させることを特徴とする行列演算プログラム。
【請求項2】
前記分割する処理は、(1列のデータサイズ)/(分割するブロック数)<(前記第2の記憶部の記憶容量)を満たす中の、最小値のブロック数で分割する、
ことを特徴とする請求項1に記載の行列演算プログラム。
【請求項3】
前記ブロック数が1である場合は分割せずに、前記行列内の列の全組み合わせに対して前記計算する処理を実行する、
ことを特徴とする請求項2に記載の行列演算プログラム。
【請求項4】
前記実行する処理は、複数のスレッドのそれぞれにおいて、前記行列内の特定の1列に対して前記列群に含まれる他の列を順次組み合わせて前記計算する処理を実行する、
ことを特徴とする請求項1に記載の行列演算プログラム。
【請求項5】
行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた前記列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が前記行列内の列の全組み合わせに対して実行する行列演算において、
前記列のデータサイズと、前記演算部が前記行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が前記第2の記憶部内に収まるように前記行列を前記列群のブロックに分割し、
分割した前記列群のブロックごとに前記計算する処理を実行する、
処理をコンピュータが実行することを特徴とする行列演算方法。
【請求項6】
行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた前記列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が前記行列内の列の全組み合わせに対して実行する行列演算において、
前記列のデータサイズと、前記演算部が前記行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が前記第2の記憶部内に収まるように前記行列を前記列群のブロックに分割し、
分割した前記列群のブロックごとに前記計算する処理を実行する、
処理を実行する制御部を含むことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、行列演算プログラム、行列演算方法および情報処理装置に関する。
【背景技術】
【0002】
顧客の購買履歴などを用いたデータ解析では、要素の値が0か1の2値である行列に対し、任意の2つの列の各要素の積を求め、その総和を求めるパターンマイニング処理が行われる。例えば、顧客(i)が商品(j)を購入した/購入しなかったについて、(i,j)成分を1/0の2値とした行列で表現する。この行列に対して、パターンマイニング処理を行うことで、どの商品とどの商品が同時に購入され易いかを調べることが可能となる(総和が大きいほど同時に購入している顧客が多い)。
【0003】
図15は、パターンマイニングの概要を説明する説明図である。
図15に示すように、行列Xは、顧客IDで識別される各顧客を行、各商品を列とする各要素において商品購入の有無を1/0の2値で表現している。パターンマイニングを実行する情報処理装置は、この行列Xから任意の2つの列を選択する(S101)。図示例では、商品1の列と、商品2の列を選択している。
【0004】
ついで、情報処理装置は、選んだ2列の各行について論理積(and)を計算し(S102)、各行の論理積の結果の総和(Sum(1,2))を計算する(S103)。情報処理装置は、すべての列の組み合わせについてS101~S103の処理を行う。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2012-88880号公報
【特許文献2】特開2018-197906号公報
【特許文献3】米国特許出願公開第2019/0188239号明細書
【特許文献4】米国特許出願公開第2013/0132707号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、パターンマイニング処理では、組み合わせる商品の数の増加に伴って計算量が爆発的に増加する。例えば、商品数をNとして任意の2個の商品に対してパターンマイニング処理を行う場合には、NC2=N*(N-1)/2!の組み合わせについて調べる必要がある。任意のn個の商品の組み合わせに対してパターンマイニング処理を行う場合には、NCnとなり、その計算量はO(Nn)となる。このため、大規模なN,nに対してパターンマイニング処理を行う場合には処理の高速化が大きな問題となる。
【0007】
1つの側面では、パターンマイニング処理の高速化を支援できる行列演算プログラム、行列演算方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
1つの案では、行列演算プログラムは、分割する処理と、実行する処理とをコンピュータに実行させる。分割する処理は、行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が行列内の列の全組み合わせに対して実行する行列演算において、列のデータサイズと、演算部が行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が第2の記憶部内に収まるように行列を列群のブロックに分割する。実行する処理は、分割した列群のブロックごとに計算する処理を実行する。
【発明の効果】
【0009】
パターンマイニング処理の高速化を支援できる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、実施形態にかかる情報処理装置の全体構成例を示す概略図である。
【
図2】
図2は、複数のCPUコアによるマルチスレッドの概要を説明する説明図である。
【
図3】
図3は、行列演算の並列化の一例を説明する説明図である。
【
図4】
図4は、行列演算の並列化による処理分担を説明する説明図である。
【
図5】
図5は、行列演算の動作例を示すフローチャートである。
【
図6】
図6は、データ配置の概要を説明する説明図である。
【
図7】
図7は、データ配置の概要を説明する説明図である。
【
図8】
図8は、実施形態にかかる情報処理装置の行列演算の並列化を説明する説明図である。
【
図9】
図9は、実施形態にかかる情報処理装置のデータ配置の概要を説明する説明図である。
【
図10】
図10は、実施形態にかかる情報処理装置のデータ配置の概要を説明する説明図である。
【
図11】
図11は、実施形態にかかる情報処理装置の行列演算の動作例を示すフローチャートである。
【
図12】
図12は、組み合わせ数が増えた場合の行列演算を説明する説明図である。
【
図13】
図13は、組み合わせ数が増えた場合の行列演算の動作例を示すフローチャートである。
【
図14】
図14は、組み合わせ数が増えた場合のデータ配置の概要を説明する説明図である。
【
図15】
図15は、パターンマイニングの概要を説明する説明図である。
【発明を実施するための形態】
【0011】
以下、図面を参照して、実施形態にかかる行列演算プログラム、行列演算方法および情報処理装置を説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する行列演算プログラム、行列演算方法および情報処理装置は、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
【0012】
図1は、実施形態にかかる情報処理装置の全体構成例を示す概略図である。
図1に示すように、情報処理装置1は、CPU10(CPU:Central Processing Unit)、メインメモリ15、補助記憶装置16、表示装置17および入力装置18を有する。情報処理装置1は、例えばPC(Personal Computer)などを適用できる。
【0013】
CPU10は、演算部11、L1キャッシュ12およびL2キャッシュ13を有する。演算部11は、L1キャッシュ12、L2キャッシュ13、メインメモリ15、補助記憶装置16、表示装置17および入力装置18のそれぞれとバスで接続される。
【0014】
演算部11は、例えば、CPUコアである。演算部11は、補助記憶装置16に格納されたプログラム16aなどを読み出してメインメモリ15に展開し、L1キャッシュ12、L2キャッシュ13およびメインメモリ15に格納されたデータを用いて演算を実行する。具体的には、演算部11は、パターンマイニング処理に関する行列演算を実行する(詳細は後述する)。
【0015】
L1キャッシュ12は、動作速度が速く且つL2キャッシュ13と比べて容量の小さいキャッシュメモリであり、演算部11によるデータアクセス時に最初に読み込まれるキャッシュメモリである。L1キャッシュ12は、例えば、SRAM(Static Random Access Memory)である。
【0016】
L2キャッシュ13は、動作速度が速く且つ一般的にL1キャッシュ12よりも容量の大きいキャッシュメモリであり、演算部11によるデータアクセス時に、L1キャッシュ12でキャッシュミスが発生した場合に次に読み込まれるキャッシュメモリである。すなわち、L2キャッシュ13は、演算部11によるデータアクセス時においてメインメモリ15に先立ってアクセスされる記憶部の一例である。このL2キャッシュ13も、例えば、SRAMである。
【0017】
本実施形態では、情報処理装置1が、L1キャッシュ12およびL2キャッシュ13という2つのキャッシュメモリを有する場合で説明するが、キャッシュメモリの階層の数はこれに限らない、例えば、情報処理装置1は、L2キャッシュ13を有さなくてもよいし、L3キャッシュ以上の3つ以上の階層を有してもよい。
【0018】
メインメモリ15は、L1キャッシュ12およびL2キャッシュ13に比べて動作速度(読み出し速度)が遅く且つ大容量の主記憶装置である。メインメモリ15は、演算部11が演算に用いるデータ(例えば行列情報16b、処理結果16c等)が格納される。メインメモリ15は、L1キャッシュ12およびL2キャッシュ13のいずれにもアクセス対象のデータが存在しない場合に演算部11からのアクセスを受ける。メインメモリ15は、例えば、DRAM(Dynamic Random Access Memory)である。
【0019】
補助記憶装置16は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)などである。補助記憶装置16には、OS(Operating System)、演算を行なうためのプログラム16a、演算対象となる行列に関する行列情報16bおよび行列演算などで得られた処理結果16cが格納される。
【0020】
プログラム16aは、パターンマイニング処理に関連する行列演算を行うためのプログラムデータであり、行列演算プログラムの一例である。
【0021】
行列情報16bは、パターンマイニング処理の対象となる行列Xに関する情報である。例えば、行列情報16bは、顧客(i)が商品(j)を購入した/購入しなかったについて、(i,j)成分を1/0の2値とした行列Xの各要素を示す。
【0022】
処理結果16cは、行列Xについて少なくとも2つの列(商品)を組み合わせたパターンマイニング処理の結果を示すデータである。例えば、行列Xに含まれる2つの商品(x,y)を組み合わせたパターンマイニング処理における処理結果16cには、2つの商品の全組み合わせそれぞれについて、各行の論理積の結果の総和(Sum(x,y))が示されている。なお、(x,y)と(y,x)は同じ組み合わせになるので、一方については処理しなくてもよい(処理結果16cには含まれなくてよい)。
【0023】
表示装置17は、例えば、モニタやディスプレイなどである。表示装置17は、演算部11による処理結果16cの利用者への提示などを行なう。入力装置18は、例えば、キーボードやマウスなどである。利用者は、表示装置17に表示された画面を参照しつつ、入力装置18を用いて情報処理装置1へのデータや命令の入力を行なう。この表示装置17および入力装置18は、1つのハードウェアとして構成されてもよい。
【0024】
図2は、複数のCPUコアによるマルチスレッドの概要を説明する説明図である。
図2に示すように、CPU10は、演算部11における複数のCPUコア11a、11bのそれぞれが1スレッド分の処理を行うことで、マルチスレッドによる処理の並列化を実現している。具体的には、CPU10では、CPUコア11aがスレッド0の処理を、CPUコア11bがスレッド1の処理を行うことで、2スレッドを並列に実行可能となっている。なお、演算部11におけるコア数(スレッド数)については、2つに限定するものではなく、1つであってもよいし、3つ以上であってもよい。
【0025】
CPUコア11a、11bのそれぞれは、専用のL1キャッシュ12a、12bと接続されている。このため、各スレッドにおいて直近にアクセスされたデータは、スレッドごとにL1キャッシュ12a、12bに独立して格納される。また、L2キャッシュ13は、CPUコア11a、11bの両方からアクセス可能に接続されており、スレッド間の処理で共有される。
【0026】
パターンマイニング処理に関する行列演算では、列の組み合わせ間で処理に依存関係が存在しないので、組み合わせごとに並列に(独立して)処理が可能である。このため、情報処理装置1では、複数のCPUコア11aによるマルチスレッドで行列演算を並列化して実行する。
【0027】
図3は、行列演算の並列化の一例を説明する説明図である。具体的には、
図3では、2つの商品(列)の組み合わせにおけるパターンマイニング処理の行列演算をスレッド0、1の2つのスレッドで並列に行う場合を例示している。
【0028】
図3に示すように、パターンマイニング処理の行列演算を2つのスレッドで行う場合、CPU10は、行列Xより、2つのスレッドのそれぞれが処理を担当する任意の2つの列を選択する(S1)。図示例では、商品1の列と、商品2の列(A,B)をスレッド0が担当し、商品3の列と、商品4の列(C,D)をスレッド1が担当するものとして列を選択している。
【0029】
ついで、スレッド0、スレッド1のCPUコア11a、11bのそれぞれは、2列の各行について論理積(and)を計算し(S2)、各行の論理積の結果の総和(Sum(A,B)、Sum(C,D))を計算する(S3)。このように、情報処理装置1では、マルチスレッドで行列演算を並列化して実行する。
【0030】
図4は、行列演算の並列化による処理分担を説明する説明図である。
図4におけるプログラムコードC100は、パターンマイニング処理を実現する一般的なプログラムコード(疑似的なコード)の一例である。プログラムコードC100における冒頭行(#以下の記述)は、マルチスレッドによる並列処理を宣言しており、以下のコードにおけるループ内の処理などが並列に行われることとなる。また、プログラムコードC100において、Nは行列Xの列数(商品の数)に対応し、Mは行列Xの行数(顧客の数)に対応している。
【0031】
プログラムコードC100における処理では、行列X内の特定の1列(x)から順にインクリメントするとともに、x以外の列(y)を順にインクリメントして組み合わせた2つの列に対して前述の演算を行うことで、全組み合わせにおける処理結果16cを格納していく。例えば、(x,y)が(1,2)の商品1の列と商品2の列の組み合わせについては、その2列の各行について計算した論理積の総和が処理結果16cに格納される。
【0032】
2つのスレッドで上記の演算を分担して処理する場合は、例えば、
図4の下段に示すようになる。具体的には、1列目と、1列目以外の列を組み合わせた2つの列の演算をスレッド0が、2列目と、2列目以外の列を組み合わせた2つの列の演算をスレッド1が行う。また、3列目と、3列目以外の列を組み合わせた2つの列の演算をスレッド0が、4列目と、4列目以外の列を組み合わせた2つの列の演算をスレッド1が行う。以下、同様に、N番目までの列と、その他の列を組み合わせた2つの列の演算をスレッド0、1で分担して処理する。
【0033】
図5は、行列演算の動作例を示すフローチャートであり、具体的には、
図4に例示したプログラムコードC100によるパターンマイニング処理の一例を示している。
【0034】
図5に示すように、処理が開始されると、CPU10は、行列X内の1列(x)を順に1番目からN-1番目まで指定するループ処理(S10~S14)と、xの列に組み合わせる他の列(y)を順にx+1からNまで指定するループ処理(S11~S13)を行う。このループ処理内において、CPU10内のCPUコア11a、11bにおけるそれぞれのスレッドは、組み合わせた2つの列(x、y)について、各行の論理積を計算し、各行の論理積の結果の総和を計算する(S12)。
【0035】
図6は、データ配置の概要を説明する説明図である。具体的には、
図6は、CPUコア11a、11bのスレッド0、スレッド1がそれぞれ最初の組み合わせ群(スレッド0:(1,2~N)、スレッド1:(2,3~N))を処理した後のデータ配置を示している。なお、L2キャッシュ13の記憶容量(キャッシュサイズ)は、N/2個の商品の列データと同等のサイズとする。
【0036】
図6に示すように、スレッド0、スレッド1がそれぞれ最初の組み合わせ群を処理した後において、L1キャッシュ12aには商品1の列データが、L1キャッシュ12bには商品2の列データが格納されている。また、L2キャッシュ13は、キャッシュサイズがN/2個の商品の列データと同等のサイズであり、全ての列データを格納できないことから、直近に処理した列データが格納されている。具体的には、L2キャッシュ13には、商品(N/2+1)~商品Nまでの列データが格納されている。
【0037】
図7は、データ配置の概要を説明する説明図である。具体的には、
図7は、CPUコア11a、11bのスレッド0、スレッド1がそれぞれ2番目の組み合わせ群(スレッド0:(3,4~N)、スレッド1:(4,5~N))の処理開始時のデータ配置を示している。
【0038】
図7に示すように、スレッド0、スレッド1がそれぞれ2番目の組み合わせ群の処理を開始する際に、L2キャッシュ13には、例えば、商品3、商品4に関する列データが残っていない。具体的には、商品1~商品(N/2)までの列データは、L2キャッシュ13には残っていない。このため、商品1~商品(N/2)までの列データについては、メインメモリ15に先立つL2キャッシュ13へのアクセスでヒットせずにキャッシュミスとなり、各組み合わせの処理を行うたびにメインメモリ15からの読み出しが生じることとなる。
【0039】
具体的には、CPUコア11aは、2番目の組み合わせ群の処理を開始する際に、商品3と商品4の列データをメインメモリ15から読み出す(R101)。同様に、CPUコア11bは、商品4と商品5の列データをメインメモリ15から読み出す(R102)。
【0040】
このようなメインメモリ15へのアクセスに要するクロックサイクル数は、L2キャッシュ13へのアクセスに要するクロックサイクル数と比較すると、100倍程度の大きくなる。したがって、L2キャッシュ13のキャッシュミスは、処理速度の低下を招く大きな要因となる。特に、商品数が大規模化し、L2キャッシュ13内に行列Xの全データが格納できない場合、上記の行列演算では、新たな組み合わせ群の処理を開始する度に、常にメインメモリ15へのアクセスが行われる可能性がある。
【0041】
そこで、実施形態にかかる情報処理装置1では、上記の行列演算において、列のデータサイズと、L2キャッシュ13の記憶容量(キャッシュサイズ)とに基づいて、組み合わせの対象とする列群がL2キャッシュ13内に収まるように行列Xを列群のブロックに分割する。そして、情報処理装置1は、分割した列群のブロックごとに行列演算の処理を実行する。これにより、情報処理装置1では、行列演算時において、L2キャッシュ13のキャッシュミスが生じるケースを減らすことができる。
【0042】
図8は、実施形態にかかる情報処理装置1の行列演算の並列化を説明する説明図である。
図8では、2つの商品(列)の組み合わせにおけるパターンマイニング処理の行列演算をスレッド0、1の2つのスレッドで並列に行う場合を例示している。
【0043】
図8におけるプログラムコードC1は、分割した列群のブロックごとに行列演算の処理を実行するプログラムコード(疑似的なコード)の一例である。プログラムコードC1において、Nは行列Xの列数(商品の数)に対応し、Mは行列Xの行数(顧客の数)に対応している。start(t,x)は、分割した各処理(t=0、t=1)におけるx行目に組み合わせるyの開始行を求める関数である。Bは、列のデータサイズと、L2キャッシュ13の記憶容量(キャッシュサイズ)とに基づいて得られたれブロックの分割数である。この分割するブロック数(B)は、1列のデータサイズ/B<(L2キャッシュ13のキャッシュサイズ)を満たすBの値の中で最小値とする。
【0044】
例えば、L2キャッシュ13の記憶容量(キャッシュサイズ)は、N/2個の商品の列データと同等のサイズとする。このため、行列Xについては、商品1~商品N/2に関する列群と、商品N/2+1~商品Nに関する列群の2つに分けているものとする。
【0045】
図9は、実施形態にかかる情報処理装置1のデータ配置の概要を説明する説明図である。具体的には、
図9は、分割したt=0の列群において、CPUコア11a、11bのスレッド0、スレッド1がそれぞれ最初の組み合わせ群(スレッド0:(1,2~N/2)、スレッド1:(2,3~N/2))を処理した後のデータ配置を示している。
【0046】
図9に示すように、分割したt=0の列群について、スレッド0、スレッド1がそれぞれ最初の組み合わせ群を処理した後において、L1キャッシュ12aには商品1の列データが、L1キャッシュ12bには商品2の列データが格納されている。また、L2キャッシュ13には、分割したt=0の列群(商品1~商品N/2)のデータがそのまま格納されている。
【0047】
図10は、実施形態にかかる情報処理装置1のデータ配置の概要を説明する説明図である。具体的には、
図10は、分割したt=0の列群について、CPUコア11a、11bのスレッド0、スレッド1がそれぞれ2番目の組み合わせ群(スレッド0:(3,4~N/2)、スレッド1:(4,5~N/2))の処理開始時のデータ配置を示している。
【0048】
図10に示すように、分割したt=0の列群について、スレッド0、スレッド1がそれぞれ2番目の組み合わせ群の処理を開始する際に、L2キャッシュ13には、分割したt=0の列群(商品1~商品N/2)のデータが残っている。このため、商品1~商品(N/2)までの列データについては、メインメモリ15に先立つL2キャッシュ13へのアクセスでヒットする。すなわち、CPUコア11aは、2番目の組み合わせ群の処理を開始する際に、商品3と商品4の列データをL2キャッシュ13から読み出す(R1)。同様に、CPUコア11bは、商品4と商品5の列データをL2キャッシュ13から読み出す(R2)。
【0049】
このように、実施形態にかかる情報処理装置1では、分割したt=0の列群に関する各組み合わせ処理に必要なデータを、キャッシュミスせずにL2キャッシュ13から読み出すことができる。
【0050】
図11は、実施形態にかかる情報処理装置1の行列演算の動作例を示すフローチャートである。
図11に示すように、処理が開始されると、CPU10は、列のデータサイズと、L2キャッシュ13の記憶容量(キャッシュサイズ)とに基づいて、分割する処理ブロックの数(B)を上述したとおりに計算する(S20)。
【0051】
ついで、CPU10は、計算したブロック数(B)が1であるか否かを判定する(S21)。ブロック数(B)が1である場合(S21:Yes)、行列Xを分割せずとも行列Xの全列がL2キャッシュ13に収まることから、CPU10は、
図5に例示した通常の行列計算(S22)を実行し、処理を終了する。
【0052】
ブロック数(B)が1でない場合(S21:No)、CPU10は、ブロック数をもとに行列Xの列を分割(例えばブロック数での等分割)し、ブロックごとのループ処理(t=0,1,…B)を開始する(S23~S29)。
【0053】
ブロックごとのループ処理において、CPU10は、行列X内の1列(x)を順に1番目からN-1番目まで指定するループ処理(S24~S28)と、xの列に組み合わせる他の列(y)を順にstart(x,t)から(N/B)*(t+1)まで指定するループ処理(S25~S27)を行う。このループ処理内において、CPU10内のCPUコア11a、11bにおけるそれぞれのスレッドは、組み合わせた2つの列(x、y)について、各行の論理積を計算し、各行の論理積の結果の総和を計算する(S26)。
【0054】
上述したパターンマイニング処理では2つの商品(列)を組み合わせる場合を説明したが、パターンマイニング処理において組み合わせる商品(列)は2つ以上であってもよい。2つ以上の列を組み合わせる場合においても、2つの列を組み合わせた結果(列)に対し、新たな列を組み合わせて演算することで対応可能である。
【0055】
図12は、組み合わせ数が増えた場合の行列演算を説明する説明図である。
図12に示すように、ケースC11は、商品1の列と商品2の列の組み合わせに更に商品3の列を組み合わるケースである。このような3つの列を組み合わる場合、まず、情報処理装置1は、2つの列(商品1の列と商品2の列)を組み合わせて論理積を行う。ついで、情報処理装置1は、組み合わせた2列における各行の論理積の結果に対し、3つ目の列(商品3の列)を組み合わせて上述した行列演算を行う。これにより、情報処理装置1は、3つの列を組み合わせた演算結果を得ることができる。
【0056】
ケースC12は、3つの列を組み合わせに更に商品4の列を組み合わせるケース(4つの列の組み合わせ)である。このような4つの列の組み合わせについて、情報処理装置1は、ケースC11と同様、3つの列(商品1の列、商品2の列および商品3の列)を組み合わせた論理積の結果を得た上で4つ目の列(商品4の列)を組み合わせればよい。
【0057】
図13は、組み合わせ数が増えた場合の行列演算の動作例を示すフローチャートである。なお、このフローチャートにおける組み合わせ数(商品数)はNとする。
図13に示すように、情報処理装置1のCPU10は、上述したように、N-1までの組み合わせの論理積(=X)を計算する(S20a)。ついで、CPU10は、得られた論理積(=X)について、もう1つの列(N)を組み合わせる演算処理を上述したS20~S29のとおりに実行する。
【0058】
図14は、組み合わせ数が増えた場合のデータ配置の概要を説明する説明図である。具体的には、
図14は、分割したt=0の列群について、CPUコア11a、11bのスレッド0、スレッド1がそれぞれ2番目の組み合わせ群(スレッド0:((1,4),4~N/2)、スレッド1:((1,5),5~N/2))の処理開始時のデータ配置を示している。
【0059】
図14に示すように、分割したt=0の列群について、スレッド0、スレッド1がそれぞれ2番目の組み合わせ群の処理を開始する際に、L2キャッシュ13には、分割したt=0の列群(商品1~商品N/2)のデータが残っている。このため、商品1~商品(N/2)までの列データについては、メインメモリ15に先立つL2キャッシュ13へのアクセスでヒットする。すなわち、CPUコア11aは、2番目の組み合わせ群の処理を開始する際に、商品3と商品4の列データをL2キャッシュ13から読み出す(R4)。同様に、CPUコア11bは、商品4と商品5の列データをL2キャッシュ13から読み出す(S5)。
【0060】
このように、実施形態にかかる情報処理装置1では、組み合わせ数が増える場合であっても、分割したt=0の列群に関する各組み合わせ処理に必要なデータを、キャッシュミスせずにL2キャッシュ13から読み出すことができる。
【0061】
以上のように、情報処理装置1では、行列Xに含まれる少なくとも2つの列を組み合わせ、組み合わせた列の各行の積を求めて当該各行の積の総和を計算する処理を演算部11が行列X内の列の全組み合わせに対して実行する行列演算を行う。この行列演算において、情報処理装置1は、列のデータサイズと、演算部11が行列Xに関する情報を格納する第1の記憶部(メインメモリ15)に先立ってアクセスする第2の記憶部(L2キャッシュ13)の記憶容量とに基づいて、組み合わせの対象とする列群が第2の記憶部内に収まるように行列Xを列群のブロックに分割する。情報処理装置1は、分割した列群のブロックごとに計算する処理を実行する。
【0062】
これにより、情報処理装置1では、分割した列群のブロックごとの計算時において、組み合わせの対象とする列群が、第2の記憶部(L2キャッシュ13)に一旦格納されると上書きされることなく、そのまま格納され続けることとなる。このため、情報処理装置1では、パターンマイニング処理に関する行列演算において、第1の記憶部(メインメモリ15)までアクセスするようなケース(キャッシュミス)を減らすことができる。すなわち、情報処理装置1では、キャッシュミスによるメモリアクセス時間の大幅な増加を抑止でき、パターンマイニング処理の高速化を支援できる。このような、パターンマイニング処理の高速化は、大規模なN,nのパターンマイニング処理を実用的な計算時間内に完了させることに有効である。
【0063】
また、情報処理装置1は、(1列のデータサイズ)/(分割するブロック数)<(L2キャッシュ13の記憶容量)を満たす中の、最小値のブロック数で分割する。このように分割することで、情報処理装置1は、L2キャッシュ13の記憶領域を効率よく利用して行列演算を実行することができる。
【0064】
また、情報処理装置1は、ブロック数が1である場合は分割せずに、行列X内の列の全組み合わせに対して計算する処理を実行する。これにより、情報処理装置1は、L2キャッシュ13内に行列Xが収まる場合は、行列Xを分割せずに行列演算を行うことができる。
【0065】
また、情報処理装置1は、複数のスレッドのそれぞれにおいて、行列X内の特定の1列に対して列群に含まれる他の列を順次組み合わせて計算する処理を実行する。このように、情報処理装置1は、複数のスレッドによる並列化により、各ブロックにおける計算処理を高速に行うことができる。
【0066】
なお、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0067】
また、行列演算に関するプログラム16aなどは、補助記憶装置16に記憶されていなくてもよい。例えば、情報処理装置1が読み取り可能な記憶媒体に記憶されたプログラム16aを読み出して実行するようにしてもよい。情報処理装置1が読み取り可能な記憶媒体は、例えば、CD-ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN等に接続された装置にプログラム16aを記憶させておき、情報処理装置1が通信インターフェース(図示しない)を介して、これらからプログラム16aを読み出して実行するようにしてもよい。
【0068】
以上の実施形態に関し、さらに以下の付記を開示する。
【0069】
(付記1)行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた前記列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が前記行列内の列の全組み合わせに対して実行する行列演算において、
前記列のデータサイズと、前記演算部が前記行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が前記第2の記憶部内に収まるように前記行列を前記列群のブロックに分割し、
分割した前記列群のブロックごとに前記計算する処理を実行する、
処理をコンピュータに実行させることを特徴とする行列演算プログラム。
【0070】
(付記2)前記分割する処理は、(1列のデータサイズ)/(分割するブロック数)<(前記第2の記憶部の記憶容量)を満たす中の、最小値のブロック数で分割する、
ことを特徴とする付記1に記載の行列演算プログラム。
【0071】
(付記3)前記ブロック数が1である場合は分割せずに、前記行列内の列の全組み合わせに対して前記計算する処理を実行する、
ことを特徴とする付記2に記載の行列演算プログラム。
【0072】
(付記4)前記実行する処理は、複数のスレッドのそれぞれにおいて、前記行列内の特定の1列に対して前記列群に含まれる他の列を順次組み合わせて前記計算する処理を実行する、
ことを特徴とする付記1に記載の行列演算プログラム。
【0073】
(付記5)行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた前記列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が前記行列内の列の全組み合わせに対して実行する行列演算において、
前記列のデータサイズと、前記演算部が前記行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が前記第2の記憶部内に収まるように前記行列を前記列群のブロックに分割し、
分割した前記列群のブロックごとに前記計算する処理を実行する、
処理をコンピュータが実行することを特徴とする行列演算方法。
【0074】
(付記6)前記分割する処理は、(1列のデータサイズ)/(分割するブロック数)<(前記第2の記憶部の記憶容量)を満たす中の、最小値のブロック数で分割する、
ことを特徴とする付記5に記載の行列演算方法。
【0075】
(付記7)前記ブロック数が1である場合は分割せずに、前記行列内の列の全組み合わせに対して前記計算する処理を実行する、
ことを特徴とする付記6に記載の行列演算方法。
【0076】
(付記8)前記実行する処理は、複数のスレッドのそれぞれにおいて、前記行列内の特定の1列に対して前記列群に含まれる他の列を順次組み合わせて前記計算する処理を実行する、
ことを特徴とする付記5に記載の行列演算方法。
【0077】
(付記9)行列に含まれる少なくとも2つの列を組み合わせ、組み合わせた前記列の各行の積を求めて当該各行の積の総和を計算する処理を演算部が前記行列内の列の全組み合わせに対して実行する行列演算において、
前記列のデータサイズと、前記演算部が前記行列に関する情報を格納する第1の記憶部に先立ってアクセスする第2の記憶部の記憶容量とに基づいて、組み合わせの対象とする列群が前記第2の記憶部内に収まるように前記行列を前記列群のブロックに分割し、
分割した前記列群のブロックごとに前記計算する処理を実行する、
処理を実行する制御部を含むことを特徴とする情報処理装置。
【0078】
(付記10)前記分割する処理は、(1列のデータサイズ)/(分割するブロック数)<(前記第2の記憶部の記憶容量)を満たす中の、最小値のブロック数で分割する、
ことを特徴とする付記9に記載の情報処理装置。
【0079】
(付記11)前記ブロック数が1である場合は分割せずに、前記行列内の列の全組み合わせに対して前記計算する処理を実行する、
ことを特徴とする付記10に記載の情報処理装置。
【0080】
(付記12)前記実行する処理は、複数のスレッドのそれぞれにおいて、前記行列内の特定の1列に対して前記列群に含まれる他の列を順次組み合わせて前記計算する処理を実行する、
ことを特徴とする付記9に記載の情報処理装置。
【符号の説明】
【0081】
1…情報処理装置
10…CPU
11…演算部
11a、11b…CPUコア
12、12a、12b…L1キャッシュ
13…L2キャッシュ
15…メインメモリ
16…補助記憶装置
16a…プログラム
16b…行列情報
16c…処理結果
17…表示装置
18…入力装置
C1、C100…プログラムコード
C11、C12…ケース
X…行列