(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023169993
(43)【公開日】2023-12-01
(54)【発明の名称】探索プログラム、情報処理装置および探索方法
(51)【国際特許分類】
G06F 17/15 20060101AFI20231124BHJP
【FI】
G06F17/15
【審査請求】未請求
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2022081396
(22)【出願日】2022-05-18
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】栗原 康志
(72)【発明者】
【氏名】川上 健太郎
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB23
(57)【要約】
【課題】相関が現れる条件を採用する場合に用いられる相関係数を効率的に算出する。
【解決手段】情報処理装置1は、相関係数が閾値を超える属性ペアがn(nは自然数)個以上あるサンプルデータ群を抽出できる条件の組み合わせの探索において、条件の組み合わせの数が、並列化できる数以上であれば、並列化できる数分のプレディケートレジスタを用いたSIMD化処理に加えて、並列化できる数分の前記条件の組み合わせの処理を並列化して、条件の組み合わせごとの複数の属性ペアの相関係数を算出する。そして、情報処理装置1は、条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
相関係数が閾値を超える属性ペアがn(nは自然数)個以上あるサンプルデータ群を抽出できる条件の組み合わせの探索において、前記条件の組み合わせの数が、並列化できる数以上であれば、前記並列化できる数分のプレディケートレジスタを用いたSIMD化処理に加えて、前記並列化できる数分の前記条件の組み合わせの処理を並列化して、前記条件の組み合わせごとの複数の属性ペアの相関係数を算出し、
前記条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する
処理をコンピュータに実行させる探索プログラム。
【請求項2】
該算出する処理は、前記条件の組み合わせの数が、並列化できる数未満であれば、前記プレディケートレジスタを用いたSIMD化処理に加えて、1つの前記条件の組み合わせの処理を複数単位に展開するアンローリング処理で、前記条件の組み合わせごとの複数の属性ペアの相関係数を算出する
ことを特徴とする請求項1に記載の探索プログラム。
【請求項3】
相関係数が閾値を超える属性ペアがn(nは自然数)個以上あるサンプルデータ群を抽出できる条件の組み合わせの探索において、前記条件の組み合わせの数が、並列化できる数以上であれば、前記並列化できる数分のプレディケートレジスタを用いたSIMD化処理に加えて、前記並列化できる数分の前記条件の組み合わせの処理を並列化して、前記条件の組み合わせごとの複数の属性ペアの相関係数を算出する算出部と、
前記条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する探索部と、
を有することを特徴とする情報処理装置。
【請求項4】
相関係数が閾値を超える属性ペアがn(nは自然数)個以上あるサンプルデータ群を抽出できる条件の組み合わせの探索において、前記条件の組み合わせの数が、並列化できる数以上であれば、前記並列化できる数分のプレディケートレジスタを用いたSIMD化処理に加えて、前記並列化できる数分の前記条件の組み合わせの処理を並列化して、前記条件の組み合わせごとの複数の属性ペアの相関係数を算出し、
前記条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する
処理をコンピュータが実行する探索方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、探索プログラムなどに関する。
【背景技術】
【0002】
近年、相関関係を持つ条件の抽出により、因果探索すべき条件の数を効率的に絞り込む研究がなされている。
図17は、統計的因果探索のための条件抽出を示す参考図である。
図17に示すように、かかる技術では、AIに学習させるための過去のデータから相関関係を持つデータの条件候補をすべて抽出する。そして、当該技術では、抽出したデータの条件候補から因果関係をもつデータの条件をすべて抽出する。ところが、当該技術では、すべてのデータの条件候補に対して因果関係を探索するが、計算量の観点から非現実的であるという問題がある。
【0003】
そこで、条件の探索対象を、因果関係から相関関係に緩和することで、因果探索すべき条件の数を効率的に絞り込む技術が開示されている(例えば、非特許文献)。
図18は、個々の特徴的な因果関係を発見する技術を示す参考図である。
図18に示すように、かかる技術では、まず、顕在パターン発見技術を用いて、過去のサンプル集合から、特定の条件下で目的変数と強い相関を持つ重要因子候補と、その時の条件との組を網羅的に求める。なお、過去のサンプル集合は、閾値に基づき2値化した後に使用される。
【0004】
その後、求めた条件それぞれに対して、因果探索技術を用いて、その条件下での重要因子候補が正しく重要因子であるかを判定する。例えば、「x1∧x3∧x4→y」(x1=x3=x4=1ならばy=1)がある場合とする。かかる場合には、左辺から選んだ1変数を「重要因子の候補」、残りを「条件」とする。ここでは、x4が「重要因子の候補」、残りの「x1∧x3」が「条件」を示すとする。かかる技術では、「条件」を満たす過去のサンプル集合の中で「重要因子の候補」と右辺のyとに高い相関があれば、その「条件」を採用する。このように求めた条件と重要因子は、DB(DataBase)に保持される。そして、適用時には、因果関係を知りたいサンプルに対して、そのサンプルが満たす条件をDBから選択し、対応する重要因子を提示する。
【先行技術文献】
【特許文献】
【0005】
【非特許文献】
【0006】
【非特許文献1】小柳 祐介,他4名,“個々の特徴的な因果関係を発見する技術の開発とマーケティングデータへの適用”,人工知能学会第18回ビジネスインフォマティクス研究会,2021年3月,<URL:http://sig-bi.jp/doc/18thSIG-BI2021/18thSIG-BI2021 paper13.pdf>
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、過去のサンプル集合を抽出するための条件を採用する場合に、「重要因子の候補」と右辺のyとの間で相関係数を算出するが、相関係数を効率的に算出することが求められている。
【0008】
本発明は、1つの側面では、相関が現れる条件を採用する場合に用いられる相関係数を効率的に算出することを目的とする。
【課題を解決するための手段】
【0009】
1つの態様では、探索プログラムが、相関係数が閾値を超える属性ペアがn(nは自然数)個以上あるサンプルデータ群を抽出できる条件の組み合わせの探索において、条件の組み合わせ数が、並列化できる数以上であれば、前記並列化できる数分のプレディケートレジスタを用いたSIMD化処理に加えて、1条件の組み合わせの処理を1単位とした並列化処理で、条件の組み合わせごとの複数の属性ペアの相関係数を算出し、条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する、処理をコンピュータに実行させる。
【発明の効果】
【0010】
1実施態様によれば、相関が現れる条件を採用する場合に用いられる相関係数を効率的に算出することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、実施例に係る情報処理装置の構成を示す機能ブロック図である。
【
図2】
図2は、SIMD処理化を説明する図である。
【
図3】
図3は、SIMD化処理のsum計算の疑似コードの一例を示す図である。
【
図4】
図4は、SIMD化処理を適用した場合の相関係数算出処理のフローチャートの一例を示す図である。
【
図5】
図5は、実施例に係るストリーム処理のイメージを説明する図である。
【
図6】
図6は、実施例に係るストリーム処理のsum計算の疑似コードの一例を示す図である。
【
図7】
図7は、実施例に係るアンローリング処理のイメージを説明する図である。
【
図8】
図8は、実施例に係るアンローリング処理のsum計算の疑似コードの一例を示す図である。
【
図9】
図9は、実施例に係る探索処理のフローチャートの一例を示す図である。
【
図10】
図10は、実施例に係るストリーム処理を適用した場合の相関係数算出処理のフローチャートの一例を示す図である。
【
図11】
図11は、実施例に係るアンローリング処理を適用した場合の相関係数算出処理のフローチャートの一例を示す図である。
【
図12】
図12は、探索プログラムを実行するコンピュータの一例を示す図である。
【
図13A】
図13Aは、条件の組み合わせの探索方法を説明する参考図(1)である。
【
図13B】
図13Bは、条件の組み合わせの探索方法を説明する参考図(2)である。
【
図13C】
図13Cは、条件の組み合わせの探索方法を説明する参考図(3)である。
【
図14】
図14は、相関係数算出処理の疑似コードを示す参考図である。
【
図16】
図16は、相関係数算出処理の処理フローを示す参考図である。
【
図17】
図17は、統計的因果探索のための条件抽出を示す参考図である。
【
図18】
図18は、個々の特徴的な因果関係を発見する技術を示す参考図である。
【発明を実施するための形態】
【0012】
以下に、本願の開示する探索プログラム、情報処理装置および探索方法の実施例を図面に基づいて詳細に説明する。なお、本発明は、実施例により限定されるものではない。
【実施例0013】
まず、個々のサンプルに関して観測した複数属性のサンプルデータ群が存在する場合に、相関係数が閾値を超える属性ペアがn個以上となるようなサンプル集合を抽出できる条件の項目の組み合わせを探索することを考える。
図13A~
図13Cは、条件の組み合わせの探索方法を説明する参考図である。
【0014】
図13A左図には、観測値リストが表わされている。観測値リストは、サンプルidに対して観測した複数の観測値(属性)の数値データ群を記憶したリストである。
図13A右図には、条件リストが表わされている。条件リストは、「相関関係を持つ属性ペアを有する」サンプル集合を抽出するための条件のリストである。条件は、例えば、観測値(属性)から生成されるが、これに限定されるものではない。条件は、網羅的な探索を目的とするため、1つの条件に対し、not条件が含まれる。ここでは、1つの条件が「年齢<20」である場合に、not条件として「!(年齢<20)」が記憶される。
【0015】
図13Bに示すように、条件の組み合わせは、条件リストの中の全条件からk個抜き出して作成される。ここでは、kが「2」の場合であり、条件の組み合わせは、「年齢<20」と「!(体重<50)」との論理積を示す「(年齢<20) and (!(体重<50))」である。探索処理は、組み合わせた条件が全て「1」であるサンプルデータ群を抽出する。すなわち、探索処理は、「(年齢<20) and (!(体重<50))」の条件を満たすサンプルデータ群を抽出する。
【0016】
図13Cには、抽出されたサンプルデータ群が表わされている。探索処理は、抽出したサンプルデータ群から2つの属性を抜き出して、抜き出した属性ペアに対する相関係数を計算する。例えば、年齢属性と体重属性が抜き出され、年齢-体重間の相関係数が計算される。年齢属性と身長属性が抜き出され、年齢-身長間の相関係数が計算される。そして、探索処理は、相関係数が閾値を超える属性ペアがn個以上あるなどの判定を行い、判定を満たす場合に抽出に使用した条件の組み合わせを保存する。ここでは、判定を満たす1つの条件は、「(年齢<20) and (!(体重<50))」となる。
【0017】
条件の組み合わせの探索は、全条件の数をdx、組み合わされる数をkとすると、dxCkパターンの回数分実施される。全条件の数dxや組み合わされる数kが大きくなると、条件の組み合わせの探索は、爆発的に増加してしまう。すなわち、探索処理は、それぞれの条件の組み合わせについて、条件を満たすサンプルデータ群を抽出し、抽出したサンプルデータ群の属性ペア間の相関係数を算出する。そして、探索処理は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する。このため、大規模な全条件の数dxに対応するために、探索処理の並列化や各演算の処理の高速化が不可欠である。
【0018】
探索処理において、抽出したサンプルデータ群の属性ペアの相関係数を算出する処理が非常に時間を要する。相関係数算出処理は、2つの属性Y
1、Y
2に関して相関係数を算出する場合、以下の式(1)~(4)を用いて相関係数R
y12を算出する。なお、Y
1,iは、抽出されたサンプルデータ群の中のサンプルidがiである属性Y
1のデータを意味する。Y
2,iは、抽出されたサンプルデータ群の中のサンプルidがiである属性Y
2のデータを意味する。Y
1aveは、抽出されたサンプルデータ群の中の属性Y
1に対応するデータの平均値である。Y
2aveは、抽出されたサンプルデータ群の中の属性Y
2に対応するデータの平均値である。
【数1】
【数2】
【数3】
【数4】
【0019】
1つの条件の組み合わせを探索する際に、属性の数をdyとすると、相関係数算出処理は、かかる式(1)~式(4)をdyC2回実施することになる。
【0020】
ここで、相関係数算出処理の疑似コードを、
図14に示す。
図14は、相関係数算出処理の疑似コードを示す参考図である。
図14に示すy1_aveがY
1aveに対応する。y2_aveがY
2aveに対応する。S_xyがS
y12に対応する。S_xがS
y1に対応する。S_yがS
y2に対応する。rがR
y12に対応する。また、th_candは、観測値リストに含まれるn個の各サンプルデータに対して、選択した組み合わせの条件が「1」であるか否かを示す配列である。
【0021】
th_candは、条件の組み合わせに対してビット単位のandを計算することにより求められる。
図15A、
図15Bは、相関係数算出処理の補足を示す参考図である。
図15A左図には、条件リストが表わされている。ここでは、条件が「年齢<20」を示すビット列がX
1、条件が「!(体重<50)」を示すビット列がX
2であるとする。すると、th_candは、X
1とX
2とのandの論理演算をすることにより算出される。なお、th_cand[i]が「1」の場合、サンプルidが「i」を示すサンプルデータは、組み合わせの条件に合致するデータであることを意味する。
【0022】
図15B左図には、組み合わせの条件に対し、抽出されたサンプルデータ群が表わされている。すなわち、抽出されたサンプルデータ群は、th_candが「1」を示すサンプルidのデータ群である。例えば、属性が「年齢」である場合の、抽出されたデータがY
mで表わされている。組み合わせの条件に対し、抽出されたサンプルデータ群を使って、属性ペアごとの相関係数が算出される。
【0023】
ここで、相関係数算出処理の処理フローを、
図16を参照して説明する。
図16は、相関係数算出処理の処理フローを示す参考図である。なお、全ての条件は、dx個であるとする。条件の組み合わせの数kは、2であるとする。サンプルidの総数は、n個であるとする。属性の列数は、dyであるとする。
【0024】
図16に示すように、相関係数算出処理は、全ての条件から2つの条件を抜き出して、
dxC
2回、ステップS202~S217の処理を繰り返す(ステップS201)。
【0025】
相関係数算出処理は、th_cand配列のインデックスeが1~サンプルidの総数nまで、ステップS203~S204を繰り返す(ステップS202)。相関係数算出処理は、th_cand計算処理を行う(ステップS203)。例えば、相関係数算出処理は、th_cand[e]に「Xi,e and Xj,e」を計算した結果を設定する。ここでいうXi,e、Xj,eは、条件Xi、条件Xjに対するインデックスeのビットを示す。相関係数算出処理は、次のインデックスeの処理をすべく、ステップS202に移行する(ステップS204)。
【0026】
続いて、相関係数算出処理は、属性を示すインデックスmが1~属性の列数dyまで、ステップS206~S210を繰り返す(ステップS205)。そして、相関係数算出処理は、th_cand配列のインデックスeが1~サンプルidの総数nまで、ステップS207~S208を繰り返す(ステップS206)。相関係数算出処理は、属性の列Ymのsum計算を行う(ステップS207)。例えば、相関係数算出処理は、条件を満たす(the_cand[e]=「1」)属性の列Ymのe番目の値を加算して合計(sum)を計算する。相関係数算出処理は、次のインデックスeの処理をすべく、ステップS206に移行する(ステップS208)。
【0027】
続いて、相関係数算出処理は、属性の列Ymの平均値を計算する(ステップS209)。そして、相関係数算出処理は、次の属性の処理をすべく、ステップS205に移行する(ステップS210)。
【0028】
続いて、相関係数算出処理は、全ての属性の列から2つの属性の列を抜き出して、dyC2回、ステップS212~S214の処理を繰り返す(ステップS211)。相関計算算出処理は、th_cand配列のインデックスeが1~サンプルidの総数nまで、ステップS213~S214を繰り返す(ステップS212)。相関係数算出処理は、S_xy、S_x、S_yを計算する(ステップS213)。例えば、相関係数算出処理は、条件を満たす(the_cand[e]=「1」)属性の列Ymのe番目の値を使って、S_xy、S_x、S_yを計算する。ここでいうS_xyは、式(1)に対応する。S_xは、式(2)に対応する。S_yは、式(3)に対応する。そして、相関係数算出処理は、次のインデックスeの処理をすべく、ステップS212に移行する(ステップS214)。
【0029】
続いて、相関係数算出処理は、抜き出した2つの属性の列に対する相関係数Ry12を算出する(ステップS215)。ここでいうRy12は、式(4)に対応する。そして、そして、相関係数算出処理は、次の2つの属性の列を抜き出すべく、ステップS211に移行する(ステップS216)。
【0030】
そして、相関係数算出処理は、次の2つの条件を抜き出すべく、ステップS201に移行する(ステップS217)。
【0031】
このように、条件の組み合わせの探索は、全条件の数をdx、組み合わされる数をkとすると、dxCkパターンの回数分実施される(<1>)。全条件の数dxや組み合わされる数kが大きくなると、条件の組み合わせの探索は、爆発的に増加してしまう。すなわち、探索処理は、dxCkパターンの回数分、それぞれの条件の組み合わせについて、条件を満たすサンプルデータ群を抽出し、抽出したサンプルデータ群の属性ペア間の相関係数を算出する。そして、探索処理は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索することになる。このため、大規模な全条件の数dxに対応するために、条件を満たすサンプルデータ群の抽出処理や抽出したサンプルデータ群の属性ペアの相関係数を算出する処理の高速化を図ることが不可欠である。
【0032】
そこで、以降の実施例では、条件を満たすサンプルデータ群の抽出処理や抽出したサンプルデータ群の属性ペアの相関係数を算出する処理を高速化する情報処理装置について説明する。
【0033】
[情報処理装置の構成]
図1は、実施例に係る情報処理装置の構成を示す機能ブロック図である。情報処理装置1は、条件の組み合わせの探索において、サンプルデータ群の抽出処理や抽出したサンプルデータ群の属性ペアの相関係数を算出する処理に関して、処理をSIMD(Single Instruction Multiple Data)化する。さらに、情報処理装置1は、条件の組み合わせの数に応じて、並列処理(ストリーム処理)やアンローリング処理を選択して利用することで、サンプルデータ群の抽出処理や抽出したサンプルデータ群の属性ペアの相関係数を算出する処理を高速化する。
【0034】
ここで、SIMD処理化について、
図2を参照して説明する。
図2は、SIMD処理化を説明する図である。なお、A[0]、・・、B[0]、・・は、それぞれSIMDレジスタである。処理をSIMD化するために、プレディケートレジスタが用いられる。情報処理装置1は、th_candの値をプレディケートレジスタの値として利用することにより、SIMD幅分のデータの演算を、ALU(Arithmetic and Logic Unit)(演算器)を使って同時に処理することが可能になる。
図2では、2個のSIMDレジスタA,Bが搭載されているが、SIMDレジスタA,Bの個数は、CPUによって決まる。なお、ここでいうth_candは、後述する観測値リスト21に含まれるn個の各サンプルデータに対して、組み合わせの条件が満たされていれば「1」、満たされていなければ「0」が設定される配列を示す。
【0035】
例えば、
図2では、組み合わせの条件が満たされるサンプルデータ群のある属性に対応するsum計算が行われている。th_candが「0110・・」である場合に、th_candがプレディケートレジスタ(predicate register)に与えられる。SIMDレジスタBに属性に対応するサンプルデータの値が複数個(ここでは4個分)ずつ入力される。すると、情報処理装置1は、th_candのビット列によって演算がマスクされるので、組み合わせの条件が満たされるサンプルデータの値の加算を同時に処理できる。
【0036】
ここで、SIMD化処理の疑似コードを、
図3に示す。
図3は、SIMD化処理のsum計算の疑似コードの一例を示す図である。なお、疑似コードは、ARM向けのACLEによるSIMD化のコードである。
図3に示すth_candは、後述する観測値リスト21に含まれるn個の各サンプルデータに対して、組み合わせの条件が満たされていれば「1」、満たされていなければ「0」が設定される配列である。y1_sumが相関係数を求める属性ペアの一方の属性のsum計算に用いられる変数である。y2_sumが相関係数を求める属性ペアの他方の属性のsum計算に用いられる変数である。
【0037】
ここでは、処理対象のサンプルデータがfloat型(32ビット)で、SIMD幅が512ビットの場合であるとする。すると、
図2に示すSIMDレジスタA,Bは、それぞれ16個搭載される。したがって、情報処理装置1は、属性ペアの属性ごとに、プレディケートレジスタを用いて、属性ペアの属性ごとに同時に16個ずつ加算する。これにより、情報処理装置1は、属性ペアの属性ごとに、ループ回数を1/16に削減することができる。この結果、情報処理装置1は、属性ペアの属性ごとに、逐次的に加算するより、高速化することができる。
【0038】
図3で示したSIMD化は、sum計算の一例であったが、th_candを生成するth_cand計算を含む相関係数算出処理にも適用できる。
図4は、SIMD化処理を適用した場合の相関係数算出処理のフローチャートの一例を示す図である。なお、全ての条件は、dx個であるとする。条件の組み合わせの数kは、2であるとする。サンプルidの総数は、n個であるとする。属性の列数は、dyであるとする。また、サンプルデータのデータ型がfloat型(32ビット)で、SIMD幅が512ビットの場合であるとする。
【0039】
図4に示すように、相関係数算出処理は、全ての条件から2つの条件を抜き出して、
dxC
2回、ステップS82~S97の処理を繰り返す(ステップS81)。
【0040】
相関係数算出処理は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を16として、ステップS83~S84を繰り返す(ステップS82)。相関係数算出処理は、th_cand計算(simd)処理を行う(ステップS83)。例えば、相関係数算出処理は、インデックスe~e+16の「Xi,e and Xj,e」を計算し、計算した結果をth_cand[e]に設定する。ここでいうXi,e、Xj,eは、条件Xi、条件Xjに対するインデックスeのビットを示す。相関係数算出処理は、次のインデックスeの処理をすべく、ステップS82に移行する(ステップS84)。
【0041】
続いて、相関係数算出処理は、属性を示すインデックスmが1~属性の列数dyまで、ステップS86~S90を繰り返す(ステップS85)。そして、相関係数算出処理は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を16として、ステップS87~S88を繰り返す(ステップS86)。相関係数算出処理は、属性の列Ymのsum計算(simd)を行う(ステップS87)。例えば、相関係数算出処理は、条件を満たす(the_cand[e]=「1」)属性の列Ymの加算を16個ずつ行い、インデックスe~e+16の各値を加算して合計(sum)を計算する。相関係数算出処理は、次のインデックスeの処理をすべく、ステップS86に移行する(ステップS88)。
【0042】
続いて、相関係数算出処理は、属性の列Ymの平均値を計算する(ステップS89)。そして、相関係数算出処理は、次の属性の処理をすべく、ステップS85に移行する(ステップS90)。
【0043】
続いて、相関係数算出処理は、全ての属性の列から2つの属性の列を抜き出して、dyC2回、ステップS92~S96の処理を繰り返す(ステップS91)。相関計算算出処理は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を16として、ステップS93~S94を繰り返す(ステップS92)。相関係数算出処理は、S_xy、S_x、S_yを計算(simd)する(ステップS93)。例えば、相関係数算出処理は、条件を満たす(the_cand[e]=「1」)属性の列Ymのインデックスe~e+16の値を使って、S_xy、S_x、S_yを計算する。ここでいうS_xyは、式(1)に対応する。S_xは、式(2)に対応する。S_yは、式(3)に対応する。そして、相関係数算出処理は、次のインデックスeの処理をすべく、ステップS92に移行する(ステップS94)。
【0044】
続いて、相関係数算出処理は、抜き出した2つの属性の列に対する相関係数Ry12を算出する(ステップS95)。ここでいうRy12は、式(4)に対応する。そして、相関係数算出処理は、次の2つの属性の列を抜き出すべく、ステップS91に移行する(ステップS96)。
【0045】
そして、相関係数算出処理は、次の2つの条件を抜き出すべく、ステップS81に移行する(ステップS97)。
【0046】
これにより、情報処理装置1は、SIMD化を適用すると、th_cand計算(<2>)、sum計算(<4>)および相関係数の計算(<6>)のループ内の処理が1度に16要素ずつ行われるので、ループ回数を1/16に削減することができる。この結果、情報処理装置1は、逐次的に処理するより、高速化することができる。
【0047】
図2~
図4では、1つのプレディケートレジスタを利用して、1つの条件の組み合わせについての処理をSIMD化した例である。プレディケートレジスタは、複数搭載されていても良く、余剰のプレディケートレジスタを利用して、複数の条件の組み合わせについての処理をSIMD化して、高速化を図るようにしても良い。
【0048】
図1に戻って、情報処理装置1は、制御部10と、記憶部20とを有する。制御部10は、判定部11と、ストリーム処理部12と、アンローリング処理部13と、出力部14とを有する。記憶部20は、観測値リスト21と、条件リスト22と、パラメータ23とを有する。なお、ストリーム処理部12およびアンローリング処理部13は、算出部および探索部の一例である。
【0049】
観測値リスト21は、サンプルidに対して観測した複数の観測値の数値データ群を記憶したリストである。言い換えれば、観測値リスト21は、各サンプルidが持つ複数の観測値(属性)の値を蓄積した表データである。ここでいうサンプルidとは、個々の人などを一意に識別する識別子である。観測値リスト21の各列は、各観測値(属性)に対応する。
【0050】
条件リスト22は、「相関関係を持つ属性ペアを有する」サンプルidのサンプル集合を抽出するための条件のリストである。言い換えれば、条件リスト22は、観測値リスト21から、各サンプルidが持つ複数の観測値(属性)の値を条件に基づいて2値化した表データである。すなわち、条件リスト22の列単位の配列は、条件に対するビット列となる。条件は、例えば、観測値から生成されるが、これに限定されるものではない。また、条件は、網羅的な探索を目的とするため、1つの条件に対し、not条件が含まれる。
【0051】
パラメータ23は、探索処理を実行する際に用いられるパラメータである。パラメータ23は、例えば、条件を組み合わせる数や後述するプレディケートレジスタの数などを含む。
【0052】
判定部11は、条件の組み合わせ数が並列処理(ストリーム処理)できる数以上であるか否かを判定する。ここでいう並列処理(ストリーム処理)できる数は、例えば、プレディケートレジスタの数を示す。判定部11は、条件の組み合わせ数が並列処理(ストリーム処理)できる数以上である場合には、ストリーム処理部12に移行する。判定部11は、条件の組み合わせ数が並列処理(ストリーム処理)できる数未満である場合には、アンローリング処理部13に移行する。なお、並列処理(ストリーム処理)できる数のことを、以降では、ストリーム数というものとする。
【0053】
ストリーム処理部12は、並列処理(ストリーム処理)できる数分のプレディケートレジスタを用いたSIMD化を行う。加えて、ストリーム処理部12は、並列処理(ストリーム処理)できる数分の条件の組み合わせを並列処理(ストリーム処理)して、条件の組み合わせごとの複数の属性ペアの相関係数を算出する。そして、ストリーム処理部12は、条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する。そして、ストリーム処理部12は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを保存する。
【0054】
アンローリング処理部13は、余剰のプレディケートレジスタを用いたSIMD化を行う。加えて、アンローリング処理部13は、1つの条件の組み合わせの処理を複数単位に展開するアンローリング処理で、条件の組み合わせごとの複数の属性ペアの相関係数を算出する。そして、アンローリング処理部13は、条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する。そして、アンローリング処理部13は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを保存する。
【0055】
出力部14は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを出力する。
【0056】
[ストリーム処理の説明]
ここで、ストリーム処理部12によって行われるストリーム処理の説明を、
図5を参照して説明する。
図5は、実施例に係るストリーム処理のイメージを説明する図である。なお、
図5では、ストリーム数が「2」であり、SIMDの要素数(SIMDレジスタA,B,Cの各個数)は、「2」であるとする。
【0057】
ストリームIDが「1」の場合には、条件の組み合わせは、「年齢<20」と「体重<50」との論理積を示す「(年齢<20) and (体重<50)」である。組み合わせの条件のビット列を示すth_cand1は、{0,1,0,0,・・}である。ストリームIDが「2」の場合には、条件の組み合わせは、「年齢<20」と「!(体重<50)」との論理積を示す「(年齢<20) and (!(体重<50))」である。組み合わせの条件のビット列を示すth_cand1は、{1,0,0,1,・・}である。
【0058】
このような状況の下、ストリーム処理部12が、条件の組み合わせごとの、属性の列Y1のsum計算を行う場合について説明する。ストリーム処理部12は、SIMDレジスタBにY1に配置される値をSIMDの要素数(ここでは2個)ずつ入力し、ストリームIDが「1」および「2」のsum計算を並列して行う。
【0059】
例えば、ストリームIDが「1」の場合には、ストリーム処理部12は、プレディケートレジスタ1にth_cand1に配置されるビットをSIMDの要素数(ここでは2個)ずつ入力する。そして、ストリーム処理部12は、th_cand1のビットが「0」を示す要素の演算をマスクして、th_cand1のビットが「1」を示す要素の演算を行ってSIMDレジスタAとSIMDレジスタBとを加算する。SIMDレジスタAは、加算される側のレジスタである。ここでは、1回目には、プレディケートレジスタ1に「0,1」が入力されるので、ストリーム処理部12は、A[0]=A[0](=0)、A[1]=A[1]+B「1」(=13)と計算する。2回目には、プレディケートレジスタ1に「0,0」が入力されるので、ストリーム処理部12は、A[0]=A[0](=0)、A[1]=A[1](=13)と計算する。このようにして、ストリーム処理部12は、プレディケートレジスタ1にth_cand1のビットを入力して、プレディケートレジスタ1で各要素の演算をマスクして、SIMDレジスタBに入力される値をA[0],A[1]に加算する。そして、ストリーム処理部12は、最後に、A[0]とA[1]とを加算して、属性の列Y1のsum計算の計算結果を取得する。
【0060】
また、ストリームIDが「2」の場合には、ストリーム処理部12は、プレディケートレジスタ2にth_cand2に配置されるビットをSIMDの要素数(ここでは2個)ずつ入力する。そして、ストリーム処理部12は、th_cand2のビットが「0」を示す要素の演算をマスクして、th_cand2のビットが「1」の要素の演算を行ってSIMDレジスタCとSIMDレジスタBとを加算する。SIMDレジスタCは、加算される側のレジスタである。ここでは、1回目には、プレディケートレジスタ2に「1,0」が入力されるので、ストリーム処理部12は、C[0]=C[0]+B[0](=19)、C[1]=C[1](=0)と計算する。2回目には、プレディケートレジスタ2に「0,1」が入力されるので、ストリーム処理部12は、C[0]=C[0](=19)、C[1]=C[1]+B[1](=15)と計算する。このようにして、ストリーム処理部12は、プレディケートレジスタ2にth_cand2のビットを入力して、プレディケートレジスタ2でALUをマスクして、SIMDレジスタBに入力される値をC[0],C[1]に加算する。そして、ストリーム処理部12は、最後に、C[0]とC[1]とを加算して、属性の列Y1のsum計算の計算結果を取得する。
【0061】
これにより、ストリーム処理部12は、SIMDレジスタBにロードする属性の列Ymのロード回数を減らすことができる。また、ストリーム処理部12は、複数の条件の組み合わせを同時にストリーム処理できるので、1回の属性の列Ymのロードで複数の条件の組み合わせにおけるsum計算をすることができる。
【0062】
ここで、ストリーム処理の疑似コードを、
図6に示す。
図6は、実施例に係るストリーム処理のsum計算の疑似コードの一例を示す図である。なお、疑似コードは、ARM向けのACLEによるSIMD化のコードである。
図6では、ストリーム数が「4」であるとする。また、処理対象のサンプルデータがfloat型(32ビット)で、SIMD幅が512ビットの場合であるとする。すなわち、SIMDの要素数は「16」である。th_cand0~3は、4つの組み合わせの条件に対応するビット列であり、観測値リスト21に含まれるn個の各サンプルデータに対して、それぞれの条件が満たされていれば「1」、満たされていなければ「0」が設定されるビット列を配置する配列である。y_valは、属性の列Ymの加算する値の配列である。y_sum0~3は、4つの組み合わせの条件に対応する加算される側の値の配列である。
【0063】
ストリーム処理部12は、1つの属性Ymに対して、SIMDの要素数(ここでは「16」)ずつ、以下の処理を行う。ストリーム処理部12は、4つの組み合わせの条件のプレディケートレジスタpred0~3に、th_cand0~3のそれぞれの16個のビット列を設定する(符号a1)。ストリーム処理部12は、y_val(
図5のSIMDレジスタB)に16個分の属性Y
mの属性値をロードする(符号a2)。そして、ストリーム処理部12は、ロードした1つの属性Y
mの属性値群に対して、4つのプレディケートレジスタpred0~3を使用して、同時に4つの組み合わせの条件のsum計算を行う(符号a3)。
【0064】
これにより、ストリーム処理部12は、メモリへの1回の属性Y
mに対応する属性値のロードで、ストリーム数個のsum計算をストリーム処理できる。この結果、ストリーム処理部12は、SIMD処理はあるがストリーム処理がない場合(
図3参照)と比較して、ループ回数とメモリへのアクセス回数が1/ストリーム数に削減できる。なお、
図6で示したストリーム処理は、sum計算の一例であったが、th_candを生成するth_cand計算を含む相関係数算出処理にも適用できる。
【0065】
[アンローリング処理の説明]
ここで、アンローリング処理部13によって行われるアンローリング処理の説明を、
図7を参照して説明する。
図7は、実施例に係るストリーム処理のイメージを説明する図である。なお、
図7では、ストリーム数が「2」であり、アンローリング数が「2」であるとする。
【0066】
アンローリングIDが「1」の場合には、条件の組み合わせは、「年齢<20」と「体重<50」との論理積を示す「(年齢<20) and (体重<50)」である。組み合わせの条件のビット列を示すth_candは、{0,1,0,0,0,1,・・}である。アンローリングIDが「2」の場合には、条件の組み合わせは、アンローリングIDが「1」の場合と同じである。組み合わせの条件のビット列を示すth_candも、アンローリングIDが「1」の場合と同じである。
【0067】
このような状況の下、アンローリング処理部13が、1つの条件の組み合わせについての、属性の列Y1のsum計算を行う場合について説明する。アンローリング処理部13は、2つのプレディケートレジスタを用いて、IDが「1」および「2」のsum計算を並列して行い、最後に合算して、属性の列Y1のsum計算を行う。
【0068】
例えば、アンローリングIDが「1」の場合には、アンローリング処理部13は、プレディケートレジスタ1にth_candに配置されるビットをSIMDの要素数(ここでは2個)ずつ入力する。また、アンローリング処理部13は、SIMDレジスタBにY1に配置される値をSIMDの要素数(ここでは2個)だけ入力する。そして、アンローリング処理部13は、th_candのビットが「0」を示す要素の演算をマスクして、th_candのビットが「1」を示す要素の演算を行ってSIMDレジスタAとSIMDレジスタBとを加算する。SIMDレジスタAは、加算される側のレジスタである。ここでは、1回目には、プレディケートレジスタ1に「0,1」が入力されるので、アンローリング処理部13は、A[0]=A[0](=0)、A[1]=A[1]+B「1」(=13)と計算する。2回目には、プレディケートレジスタ1に「0,1」が入力されるので、アンローリング処理部13は、A[0]=A[0](=0)、A[1]=A[1]+B[1](=31)と計算する。このようにして、アンローリング処理部13は、プレディケートレジスタ1にth_candのビットを入力して、プレディケートレジスタ1で各要素の演算をマスクして、SIMDレジスタBに入力される値をA[0],A[1]に加算する。
【0069】
また、アンローリングIDが「2」の場合には、アンローリング処理部13は、プレディケートレジスタ2にth_candに配置されるビットであってアンローリングID「1」で処理した次の配置からSIMDの要素数(ここでは2個)ずつ入力する。また、アンローリング処理部13は、SIMDレジスタCにY1に配置される値であってアンローリングID「1」で処理した次の配置からSIMDの要素数(ここでは2個)だけ入力する。そして、アンローリング処理部13は、th_candのビットが「0」を示す要素の演算をマスクして、th_candのビットが「1」を示す要素の演算を行ってSIMDレジスタAとSIMDレジスタCとを加算する。SIMDレジスタAは、加算される側のレジスタである。ここでは、1回目には、プレディケートレジスタ1に「0,0」が入力されるので、アンローリング処理部13は、A[0]=A[0](=0)、A[1]=A[1](=13)と計算する。このようにして、アンローリング処理部13は、プレディケートレジスタ2にth_candのビットを入力して、プレディケートレジスタ2で各要素の演算をマスクして、SIMDレジスタCに入力される値をA[0],A[1]に加算する。そして、アンローリング処理部13は、最後に、A[0]とA[1]とを加算して、属性の列Y1のsum計算の計算結果を取得する。
【0070】
これにより、アンローリング処理部13は、残りの条件の組み合わせ数がストリーム数より少なくなった場合には、余剰のプレディケートレジスタを利用して、アンローリングによりsum計算を高速化することができる。
【0071】
ここで、アンローリング処理の疑似コードを、
図8に示す。
図8は、実施例に係るアンローリング処理のsum計算の疑似コードの一例を示す図である。なお、疑似コードは、ARM向けのACLEによるSIMD化のコードである。
図8では、アンローリング数が「4」であるとする。また、処理対象のサンプルデータがfloat型(32ビット)で、SIMD幅が512ビットの場合であるとする。すなわち、SIMDの要素数は「16」である。th_candは、1つの組み合わせの条件に対応するビット列であり、観測値リスト21に含まれるn個の各サンプルデータに対して、組み合わせの条件が満たされていれば「1」、満たされていなければ「0」が設定されるビット列を配置する配列である。y_val0~3は、属性の列Y
mの加算する値の配列である。y_sumは、1つの組み合わせの条件に対応する加算される側の値の配列である。
【0072】
アンローリング処理部13は、1つの属性Y
mに対して、SIMDの要素数(ここでは「16」)ずつ、以下の処理を行う。アンローリング処理部13は、1つの組み合わせの条件のプレディケートレジスタpred0~3に、th_candの16個ずつのビット列を設定する(符号b1)。アンローリング処理部13は、y_val0~3(
図7のSIMDレジスタB、C)に属性Y
mの16個ずつの属性値をロードする(符号b2)。そして、アンローリング処理部13は、y_val0に対して、プレディケートレジスタpred0を使用して、同時に1つの組み合わせの条件に対するsum計算を行う。アンローリング処理部13は、y_val1に対して、プレディケートレジスタpred1を使用して、同時に1つの組み合わせの条件に対するsum計算を行う。アンローリング処理部13は、y_val2に対して、プレディケートレジスタpred2を使用して、同時に1つの組み合わせの条件に対するsum計算を行う。アンローリング処理部13は、y_val3に対して、プレディケートレジスタpred3を使用して、同時に1つの組み合わせの条件に対するsum計算を行う。(符号a4)。sum計算の結果は、y_sumに設定される。
【0073】
これにより、アンローリング処理部13は、余剰のプレディケートレジスタを利用して、1つの組み合わせの条件に対するsum計算をアンローリングにより処理することで、sum計算を高速化することができる。また、アンローリング処理部13は、SIMD処理はあるがストリーム処理がない場合(
図3参照)と比較して、ループ回数が減少することで、ループカウントを計算する命令やループの都度実行されるジャンプ命令を削減できるため、sum計算を高速化することができる。なお、
図8で示したアンローリング処理は、sum計算の一例であったが、th_candを生成するth_cand計算を含む相関係数算出処理にも適用できる。
【0074】
[探索処理のフローチャート]
図9は、実施例に係る探索処理のフローチャートの一例を示す図である。
【0075】
判定部11は、条件の組み合わせ数を変数Nに設定する(ステップS11)。すなわち、全条件の数をdxとし、組み合わされる数をkとした場合、変数Nに設定される値は、dxCkである。
【0076】
判定部11は、変数Nがストリーム数S以上であるか否かを判定する(ステップS12)。変数Nがストリーム数S以上であると判定した場合には(ステップS12;Yes)、ストリーム処理部12は、SIMD+ストリーム(ストリーム処理)で処理を行う(ステップS13)。なお、ストリーム処理のフローチャートは、後述する。
【0077】
そして、ストリーム処理部12は、S個の条件の組み合わせごとに、相関係数が一定値以上である属性ペアの数がn個以上か探索する(ステップS14)。そして、ストリーム処理部12は、相関係数が一定値以上である属性ペアの数がn個以上ある条件の組み合わせを記録する(ステップS15)。
【0078】
そして、判定部11は、変数Nからストリーム数Sを引いて得られる数を変数Nに設定する(ステップS16)。そして、判定部11は、ステップS21に移行する。
【0079】
一方、変数Nがストリーム数S未満であると判定した場合には(ステップS12;No)、アンローリング処理部13は、SIMD+アンローリング(アンローリング処理)で処理を行う(ステップS17)。なお、アンローリング処理のフローチャートは、後述する。
【0080】
そして、アンローリング処理部13は、1個の条件の組み合わせに対し、相関係数が一定値以上である属性ペアの数がn個以上か探索する(ステップS18)。そして、アンローリング処理部13は、相関係数が一定値以上である属性ペアの数がn個以上の条件の組み合わせを記録する(ステップS19)。
【0081】
そして、判定部11は、変数Nから「1」を引いて得られる数を変数Nに設定する(ステップS20)。そして、判定部11は、ステップS21に移行する。
【0082】
ステップS21において、判定部11は、変数Nは0であるか否かを判定する(ステップS21)。変数Nが0でないと判定した場合には(ステップS21;No)、判定部11は、ステップS12に移行する。
【0083】
一方、変数Nが0であると判定した場合には(ステップS21;Yes)、判定部11は、探索処理を終了する。
【0084】
[ストリーム処理のフローチャート]
図10は、実施例に係るストリーム処理を適用した場合の相関係数算出処理のフローチャートの一例を示す図である。なお、ストリーム数は、「4」であるとする。全ての条件は、dx個であるとする。条件の組み合わせの数kは、「2」であるとする。サンプルidの総数は、n個であるとする。属性の列数は、dyであるとする。また、サンプルデータのデータ型がfloat型(32ビット)で、SIMD幅が512ビットの場合であるとする。
【0085】
図10に示すように、ストリーム処理部12は、
dxC
2/4回、ステップS32~S47の処理を繰り返す(ステップS31)。例えば、ストリーム処理部12は、4個の条件の組み合わせを選択して、選択した4個の条件の組み合わせについて、ステップS32~S47の処理を実施する。
【0086】
ストリーム処理部12は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を16として、ステップS33~S34を繰り返す(ステップS32)。ストリーム処理部12は、th_cand計算(simd)処理を行う(ステップS33)。例えば、ストリーム処理部12は、選択した1個目の条件の組み合わせについて、それぞれインデックスe~e+16の「Xi0,e and Xj0,e」を計算し、計算した結果をth_cand0[e]に設定する。ここでいうXi0,e、Xj0,eは、条件Xi0、条件Xjoに対するインデックスeのビットを示す。ストリーム処理部12は、選択した2~4個目の条件の組み合わせについても同様に計算し、計算した結果をth_cand1[e]、th_cand2[e]、th_cand3[e]に設定する。相関係数算出処理は、次のインデックスeの処理をすべく、ステップS32に移行する(ステップS34)。
【0087】
続いて、ストリーム処理部12は、属性を示すインデックスmが1~属性の列数dyまで、ステップS36~S40を繰り返す(ステップS35)。そして、ストリーム処理部12は、インデックスeが1~サンプルidの総数nまで、増分値を16として、ステップS37~S38を繰り返す(ステップS36)。ストリーム処理部12は、属性の列Ymについて、sum計算(simd,th_cand0)、sum計算(simd,th_cand1)、sum計算(simd,th_cand2)、sum計算(simd,th_cand3)を行う(ステップS37)。例えば、ストリーム処理部12は、選択した1個目の条件の組み合わせについて、条件を満たす(the_cand0[e]=「1」)属性の列Ymの加算を16個ずつ行い、インデックスe~e+16の各値を加算して合計(sum0)を計算する。ストリーム処理部12は、選択した2~4個目の条件の組み合わせについても同様に加算して合計(sum1~3)を計算する。ストリーム処理部12は、次のインデックスeの処理をすべく、ステップS36に移行する(ステップS38)。
【0088】
続いて、ストリーム処理部12は、選択した4個の条件の組み合わせについて、それぞれ属性の列Ymの平均値を計算する(ステップS39)。そして、ストリーム処理部12は、次の属性の処理をすべく、ステップS35に移行する(ステップS40)。
【0089】
続いて、ストリーム処理部12は、全ての属性の列から2つの属性の列を抜き出して、dyC2回、ステップS42~S46の処理を繰り返す(ステップS41)。ストリーム処理部12は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を16として、ステップS43~S44を繰り返す(ステップS42)。ストリーム処理部12は、S_xy、S_x、S_yの計算(simd、th_cand0)、S_xy、S_x、S_yの計算(simd、th_cand1)、S_xy、S_x、S_yの計算(simd、th_cand2)、S_xy、S_x、S_yの計算(simd、th_cand3)を行う(ステップS43)。例えば、ストリーム処理部12は、選択した1個目の条件の組み合わせについて、条件を満たす(the_cand0[e]=「1」)属性の列Ymのインデックスe~e+16の値を使って、S_xy、S_x、S_yを計算する。ここでいうS_xyは、式(1)に対応する。S_xは、式(2)に対応する。S_yは、式(3)に対応する。ストリーム処理部12は、選択した2~4個目の条件の組み合わせについても同様に計算する。そして、ストリーム処理部12は、次のインデックスeの処理をすべく、ステップS42に移行する(ステップS44)。
【0090】
続いて、ストリーム処理部12は、選択した4個の条件の組み合わせについて、それぞれ抜き出した2つの属性の列に対する相関係数Ry12を算出する(ステップS45)。ここでいうRy12は、式(4)に対応する。そして、相関係数算出処理は、次の2つの属性の列を抜き出すべく、ステップS41に移行する(ステップS46)。
【0091】
そして、ストリーム処理部12は、4個の条件の組み合わせを選択すべく、ステップS31に移行する(ステップS47)。
【0092】
これにより、ストリーム処理部12は、ストリーム数分の条件の組み合わせにおける相関係数算出処理を並列して行うことで、SIMD処理はあるがストリーム処理がない場合(
図3参照)と比較して、ループ回数を1/ストリーム数(<1>)に削減できる。この結果、ストリーム処理部12は、探索処理を高速化することができる。
【0093】
[アンローリング処理のフローチャート]
図11は、実施例に係るアンローリング処理を適用した場合の相関係数算出処理のフローチャートの一例を示す図である。なお、アンローリング数は、「4」であるとする。条件の組み合わせの数kは、「2」であるとする。サンプルidの総数は、n個であるとする。属性の列数は、dyであるとする。また、サンプルデータのデータ型がfloat型(32ビット)で、SIMD幅が512ビットの場合であるとする。
【0094】
図11に示すように、アンローリング処理部13は、1個の条件の組み合わせについて1回、ステップS52~S67の処理を繰り返す(ステップS51)。
【0095】
アンローリング処理部13は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を64として、ステップS53~S54を繰り返す(ステップS52)。アンローリング処理部13は、th_cand計算を行う(ステップS53)。例えば、アンローリング処理部13は、条件の組み合わせについて、サンプルデータ16個ずつ以下の計算を行う。アンローリング処理部13は、最初のサンプルデータ16個について、「Xi,e~e+15 and Xj,e~j+15」を計算し、計算した結果をth_cand(e~e+15)に設定する。ここでいうXi,e、Xj,eは、条件Xi、条件Xjに対するインデックスeのビットを示す。アンローリング処理部13は、次のサンプルデータ16個について、同様に計算し、計算した結果をth_cand(e+16~e+31)に設定する。アンローリング処理部13は、次のインデックスeの処理をすべく、ステップS52に移行する(ステップS54)。
【0096】
続いて、アンローリング処理部13は、属性を示すインデックスmが1~属性の列数dyまで、ステップS56~S60を繰り返す(ステップS55)。そして、アンローリング処理部13は、インデックスeが1~サンプルidの総数nまで、増分値を64として、ステップS57~S58を繰り返す(ステップS56)。アンローリング処理部13は、属性の列Ymについて、サンプルデータ16個ずつ、sum計算(simd,th_cand(e~e+15))、sum計算(simd,th_cand(e+16~e+31))、sum計算(simd,th_cand(e+32~e+47))、sum計算(simd,th_cand(e+48,e+63))を行う(ステップS57)。例えば、アンローリング処理部13は、最初のサンプルデータ16個について、条件を満たす(the_cand[e]=「1」)属性の列Ymの加算を行い、インデックスe~e+16の各値を加算して合計(sum)を計算する。アンローリング処理部13は、次のサンプルデータ16個についても同様に加算して合計(sum)を計算する。アンローリング処理部13は、次のインデックスeの処理をすべく、ステップS56に移行する(ステップS58)。
【0097】
続いて、アンローリング処理部13は、合計(sum)を用いて、属性の列Ymの平均値を計算する(ステップS59)。そして、アンローリング処理部13は、次の属性の処理をすべく、ステップS55に移行する(ステップS60)。
【0098】
続いて、アンローリング処理部13は、全ての属性の列から2つの属性の列を抜き出して、dyC2回、ステップS62~S66の処理を繰り返す(ステップS61)。アンローリング処理部13は、th_cand配列のインデックスeが1~サンプルidの総数nまで、増分値を64として、ステップS63~S64を繰り返す(ステップS62)。アンローリング処理部13は、S_xy、S_x、S_yの計算(simd、th_cand(e~e+15))、S_xy、S_x、S_yの計算(simd、th_cand(e+16~e+31))、S_xy、S_x、S_yの計算(simd、th_cand(e+32~e+47))、S_xy、S_x、S_yの計算(simd、th_cand(e+48~e+63))を行う(ステップS63)。例えば、アンローリング処理部13は、最初のサンプルデータ16個について、条件を満たす(the_cand[e]=「1」)属性の列Ymのインデックスe~e+16の値を使って、S_xy、S_x、S_yを計算する。ここでいうS_xyは、式(1)に対応する。S_xは、式(2)に対応する。S_yは、式(3)に対応する。アンローリング処理部13は、次のサンプルデータ16個についても同様に計算する。そして、アンローリング処理部13は、次のインデックスeの処理をすべく、ステップS62に移行する(ステップS64)。
【0099】
続いて、アンローリング処理部13は、抜き出した2つの属性の列に対する相関係数Ry12を算出する(ステップS65)。ここでいうRy12は、式(4)に対応する。そして、アンローリング処理部13は、次の2つの属性の列を抜き出すべく、ステップS61に移行する(ステップS66)。
【0100】
そして、アンローリング処理部13は、次の条件の組み合わせを抜き出すべく、ステップS51に移行する(ステップS67)。
【0101】
これにより、アンローリング処理部13は、th_cand計算(<2>)、sum計算(<4>)および相関係数の計算(<6>)のループ内の処理が1度に16個のサンプルデータ×アンローリング数ずつ行われるので、SIMD処理のみの場合(
図3参照)と比較して、ループ回数を1/(16×アンローリング数)に削減できる。つまり、アンローリング処理部13は、ループ回数を削減することで、ループカウントを計算する命令やループの都度実行されるジャンプ命令を削減できるため、探索処理を高速化することができる。
【0102】
[実施例の効果]
上記実施例によれば、情報処理装置1は、相関係数が閾値を超える属性ペアがn(nは自然数)個以上あるサンプルデータ群を抽出できる条件の組み合わせの探索において、条件の組み合わせの数が、並列化できる数以上であれば、並列化できる数分のプレディケートレジスタを用いたSIMD化処理に加えて、並列化できる数分の条件の組み合わせの処理を並列化して、条件の組み合わせごとの複数の属性ペアの相関係数を算出する。そして、情報処理装置1は、条件の組み合わせごとの複数の属性ペアのそれぞれの相関係数を用いて、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する。かかる構成によれば、情報処理装置1は、SIMD化に加え、並列化を行うことで、属性ペアの相関係数を算出する処理を高速化できる。この結果、情報処理装置1は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する処理を高速化できる。
【0103】
また、上記実施例によれば、情報処理装置1は、条件の組み合わせの数が、並列化できる数未満であれば、プレディケートレジスタを用いたSIMD化処理に加えて、1つの条件の組み合わせの処理を複数単位に展開するアンローリング処理で、条件の組み合わせごとの複数の属性ペアの相関係数を算出する。かかる構成によれば、情報処理装置1は、SIMD化に加え、アンローリング処理を行うことで、属性ペアの相関係数を算出する処理を高速化できる。この結果、情報処理装置1は、相関係数が閾値を超える属性ペアがn個以上ある条件の組み合わせを探索する処理を高速化できる。
【0104】
なお、図示した情報処理装置1の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、情報処理装置1の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。また、記憶部20を情報処理装置1の外部装置としてネットワーク経由で接続するようにしても良い。
【0105】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、
図1に示した情報処理装置1と同様の機能を実現する探索プログラムを実行するコンピュータの一例を説明する。
図12は、探索プログラムを実行するコンピュータの一例を示す図である。
【0106】
図12に示すように、コンピュータ200は、各種演算処理を実行するCPU203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD(Hard Disk Drive)205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
【0107】
ドライブ装置213は、例えばリムーバブルディスク210用の装置である。HDD205は、探索プログラム205aおよび探索処理関連情報205bを記憶する。
【0108】
CPU203は、探索プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスは、情報処理装置1の各機能部に対応する。探索処理関連情報205bは、観測値リスト21および条件リスト22に対応する。そして、例えばリムーバブルディスク210が、探索プログラム205aなどの各情報を記憶する。
【0109】
なお、探索プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、光磁気ディスク、IC(Integrated Circuit)カードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらから探索プログラム205aを読み出して実行するようにしても良い。