説明

演算装置、演算方法および演算プログラム

【課題】2値行列と実数ベクトルとの行列演算を効率的に実行する。
【解決手段】演算装置100は、M行N列(M、Nは整数)の2値行列のデータを入力するデータ入力部と、N次元の実数ベクトルを入力するベクトル入力部と、前記データ入力部により入力された2値行列のデータを、ゼロサプレス型二分決定グラフ(ZDD)のデータ構造に変換した変換データを構築する構築部と、前記構築部により構築された変換データと、前記ベクトル入力部により入力された実数ベクトルとの行列演算を実行する演算部と、前記演算部による演算結果を出力する出力部とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算装置、演算方法および演算プログラムに関する。
【背景技術】
【0002】
計算機上で動作させることにより、例えば、0(ゼロ)と、0(ゼロ)以外の数を要素に持つM行N列の2値行列と、N次元の実数ベクトルとの行列演算を行うライブラリが提案されている(非特許文献1参照)。例えば、このライブラリでは、行列が疎な場合、すなわち、非零である要素数をKとしたときにK≪MNである場合には、非零成分のみについて行列計算を行う。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】「SPARSKIT:a basic tool kit for sparse matrix computations(Version2)」.Datasheet.[Online].Youcef Saad,University of Minnesota,Department of Computer Science and Engineering,June 6 1994,pages 3-12.Retrieved from the Internet:<URL:http://www-users.cs.umn.edu/~saad/software/SPARSKIT/index.html>
【発明の概要】
【発明が解決しようとする課題】
【0004】
一般に、M行N列の2値行列と、N次元の実数ベクトルとの行列演算を行う場合には、「O(MN)」の演算量に応じた計算時間および記憶容量とが必要となる。なお、「O(オー)」は行列演算のオーダーを示し、「MN」は要素数を示す。一方で、上述したライブラリでは、行列が疎な場合、すなわち、非零である要素数「K」がK≪MNである場合に、非零成分のみについて行列計算を行うので、「O(K)」の演算量に応じた計算時間および記憶容量が必要となる。このように、上述したライブラリにより行列演算を行う場合には、非零である要素数「K」に応じた計算時間および記憶容量が行列演算に必要となる。このため、上述したライブラリにより要素数が膨大な行列について演算を行う場合、演算量も膨大となる結果、演算に必要となる計算時間および記憶容量の規模が大きくなってしまうという問題がある。
【0005】
本発明は、上記に鑑みてなされたものであって、2値行列と実数ベクトルとの行列演算を効率的に実行することが可能な演算装置、演算方法および演算プログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
上述した課題を解決し、目的を達成するために、本発明は、2値行列とN次元の実数ベクトルとの行列演算を行う演算装置であって、M行N列(M、Nは整数)の前記2値行列のデータを入力するデータ入力部と、N次元(Nは整数)の前記実数ベクトルを入力するベクトル入力部と、前記データ入力部により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築部と、前記構築部により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算部と、前記演算部による演算結果を出力する出力部とを有することを特徴とする。
【0007】
また、本発明は、2値行列とN次元の実数ベクトルとの行列演算をコンピュータにより実行される演算方法であって、M行N列(M、Nは整数)の前記2値行列のデータを入力するデータ入力工程と、N次元(Nは整数)の前記実数ベクトルを入力するベクトル入力工程と、前記データ入力工程により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築工程と、前記構築工程により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算工程と、前記演算工程による演算結果を出力する出力工程とを実行することを特徴とする。
【0008】
また、本発明は、2値行列とN次元の実数ベクトルとの行列演算を行うコンピュータに実行させるための演算プログラムであって、前記コンピュータに、M行N列(M、Nは整数)の前記2値行列のデータを入力するデータ入力手順と、N次元(Nは整数)の前記実数ベクトルを入力するベクトル入力手順と、前記データ入力手順により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築手順と、前記構築手順により構築された前記変換データと、前記ベクトル入力手順により入力された前記実数ベクトルとの行列演算を実行する演算手順と、前記演算手順による演算結果を出力する出力手順とを実行させることを特徴とする。
【発明の効果】
【0009】
本発明によれば、2値行列と実数ベクトルとの行列演算を効率的に実行できるという効果を奏する。
【図面の簡単な説明】
【0010】
【図1】図1は、実施例1に係る演算装置の構成を示す機能ブロック図である。
【図2】図2は、データ入力部が入力する2値行列の一例を示す図である。
【図3】図3は、ZDDの一例を示す図である。
【図4】図4は、図3に示すZDDに対応するノード表の一例を示す図である。
【図5】図5は、ZDD構築部120により構築されるZDDの一例を示す図である。
【図6】図6は、ZDD構築部120により構築されたZDDに対応するノード表の一例を示す図である。
【図7】図7は、図2に示す行列の1行目のデータについて構築したZDDを示す図である。
【図8】図8は、図7に対応するノード表を示す図である。
【図9】図9は、実施例1に係るZDD構築処理の流れを示す図である。
【図10】図10は、実施例1に係る行列と実数ベクトルとの積の計算処理の流れを示す図である。
【図11】図11は、行列演算処理の流れを示す図である。
【図12】図12は、演算プログラムを実行する電子機器の一例を示す図である。
【発明を実施するための形態】
【0011】
以下に、図面を参照しつつ、本願に係る演算装置、演算方法および演算プログラムの各実施例について詳細に説明する。後述する実施例は一例にすぎず、本願に係る演算装置、演算方法および演算プログラムを限定するものではない。また、後述する各実施例は処理内容に矛盾を生じさせない範囲で適宜組み合わせることもできる。
【実施例1】
【0012】
[演算装置の概要と特徴(実施例1)]
実施例1に係る演算装置は、2値行列と実数ベクトルとの行列演算を行うことを概要とする。そして、実施例1に係る演算装置は、2値行列を所定のデータ構造を用いて圧縮し、圧縮した2値行列を対象として演算を実行する点に特徴がある。
【0013】
具体的には、実施例1に係る演算装置は、M行N列(M、Nは正の整数)の2値行列を、ゼロサプレス型二分決定グラフ(Zero-Suppressed Binary Decision Diagram,以下、適宜ZDDと記載する)を用いたデータ構造に変換する。そして、実施例1に係る演算装置は、ZDDと実数ベクトルとの積の演算を、ZDD上で再帰的なアルゴリズムとして実行する。すなわち、実施例1に係る演算装置は、2値行列をZDDを用いたデータ構造に変換することにより2値行列のデータを圧縮して表現することができる。そして、実施例1に係る演算装置は、2値行列が有する非零の要素数「K」に応じた演算を実行するのではなく、2値行列をZDDを用いたデータ構造に変換したときのZDDのノード数「W」に応じた演算を実行できるようになる。このようなことから、実施例1に係る演算装置は、2値行列と実数ベクトルとの積の演算に必要となる計算時間や記憶容量を減らすことができ、行列演算を効率的に実行できる。
【0014】
[演算装置の構成(実施例1)]
図1は、実施例1に係る演算装置の構成を示す機能ブロック図である。実施例1に係る演算装置100は、例えば、所定のプログラムなどに記述された手順に従い、所定の演算処理を行うパーソナルコンピュータやワークステーション、オフコンなどに相当する。なお、図1では、演算装置100を説明する上で必要となる機能を図示し、中央演算装置や主記憶装置、補助記憶装置などの一般的な機能の図示は省略する。
【0015】
図1に示すように、実施例1に係る演算装置100は、データ入力部110と、ZDD構築部120と、データ記憶部130と、ベクトル入力部140と、行列演算実行部150と、計算結果出力部160とを有する。
【0016】
データ入力部110は、M行N列(M、Nは正の整数)の2値行列(要素が0もしくは1の値である行列)を入力する。図2は、データ入力部が入力する2値行列の一例を示す図である。図2に示すように、データ入力部110は、例えば、3行3列の2値行列を入力する。なお、データ入力部110は、例えば、キーボードやマウスなどのユーザインターフェースや、USB(Universal Serial Bus)やイーサネット(登録商標)などのハードウェアインターフェースなどを介して2値行列を入力する。
【0017】
ZDD構築部120は、データ入力部110により入力されたM行N列の2値行列から、ZDD(Zero-Suppressed Binary Decision Diagram)を構築する。まず、ZDD構築部120によるZDDの構築手順の説明に先立ち、ZDDについて説明する。
【0018】
ZDDは、組み合わせ集合を2分グラフの形で保持するデータ構造である。ここで、組み合わせ集合とは、あるアイテムの集合A={a,a,…,}に対して、e⊆Aであるようなeを要素とする集合である。一例を挙げれば、集合B={a,b,c}がある場合に、集合{{a,b},{b,c},{a,c}}は、集合Bの組み合わせ集合ということになる。図3は、ZDDの一例を示す図である。なお、図3は、組み合わせ集合{{a,b},{b},{c}}のZDDを表している。図3に示すように、ZDD「I」は指向性を持ったグラフ構造で構成される。また、図3に示すように、ZDD「I」は、「0または1」のラベルが貼り付けられた終端ノード(図3の四角いノード)と、「a,bまたはc」のラベルが貼り付けられた中間ノード(図3の丸いノード)との2種類のノードを有する。また、図3に示すように、中間ノードは、それぞれ、HIリンク(実線矢印)およびLOリンク(点線矢印)を有する。中間ノードが有する各リンクは、それぞれが別の子ノードを指す。また、図3に示すように、ZDDには、先頭ノードを表すポインタ「f」が設けられる。このように、ZDDは、終端ノード、中間ノード、HIリンク、LOリンクおよびポインタを有するグラフ構造によって組み合わせ集合を表現する。
【0019】
例えば、ある組み合わせeが、ZDDが表す組み合わせ集合に含まれるか否かは、以下に説明する手続きにより判明する。まず、ZDDの先頭ノードを表すポインタに沿って、先頭ノードに遷移する。そこで、先頭ノードのラベルが表すアイテムがeに含まれているならHIリンクが指すノードに遷移し、そうでないならLOリンクが指すノードに遷移する。以上の手続きを最終的に終端ノードにたどり着くまで実行し、最終的にラベル1をもつ終端ノードに遷移し、かつeに含まれるすべてのアイテムに対応するノードを遷移してきているなら、eは組み合わせ集合に含まれる。一方、以上の手続きを最終的に終端ノードにたどり着くまで実行し、最終的にラベル1をもつ終端ノードに遷移せず、かつeに含まれるすべてのアイテムに対応するノードを遷移してきていないなら、eは組み合わせ集合に含まれない。
【0020】
図4は、図3に示すZDDに対応するノード表の一例を示す図である。図4に示すように、ZDDは、コンピュータ上においては、ノードIDをインデックスとし、各要素を配列したノード表で表現される。図4に示すように、ノード表には、各要素として、ノードIDごとに、ノードのラベル、HIリンク先のノードID、LOリンク先のノードIDがそれぞれ格納されている。
【0021】
ところで、ある組み合わせをZDDで表現するときには、アイテム間にあらかじめ順序が定められている。具体的には、あるノードのラベルであるアイテムとその子ノードのラベルであるアイテムとを比較したときに、必ず子ノードのアイテムの順序が後になるようにするという制約がある。例えば、上述したZDD「I」(図3)では、ラベル「a」、「b」、「c」が貼り付けられたアイテムの間に、「a」、「b」、「c」の順で順序が定められている。また、ノードIDがiであるノードのHIリンク先となるノードのノードIDをHI(i)、LOリンク先となるノードのノードIDをLO(i)とした場合に、上述したZDDの配列(図4)では、i>2のときに、常にHI(i)<i,LO(i)<iが成り立つように構成されている。以下、ノードIDがiであるノードのラベルをv(i)、HIリンク先のノードのノードIDをHI(i)、LOリンク先のノードのノードIDをLO(i)と記述する。
【0022】
ZDDの説明に続いて、ZDD構築部120が、M行N列の2値行列からZDDを構築する手順について説明する。ZDD構築部120は、データ入力部110からM行N列の2値行列を取得し、行列の各行について、1つの要素のみからなる集合を作成する。行列の各行について、ZDD構築部120により作成される1つの要素のみからなる集合は、例えば、以下に示す式(1)で表される。
【0023】
【数1】

【0024】
続いて、ZDD構築部120は、行列の各行について、1つの要素のみからなる集合を作成した後、それらの和集合を作成する。ZDD構築部120により作成される和集合は、例えば、以下に示す式(2)で表される。
【0025】
【数2】

【0026】
なお、上述した式(1)および(2)に示すa(i,j)は、行列のi行目のN個の要素のうち、値が「1」である列番号を並べたものである。例えば、データ入力部110から取得した2値行列が、図2に示すような3行3列の2値行列で与えられたとすると、a(1,1)=1,a(1,2)=3となる。また、上述した式(1)および(2)に示すb(i)は、行列のi行目のN個の要素のうち、値が「1」である要素の個数を示すものである。例えば、データ入力部110から取得した2値行列が、図2に示すような3行3列の2値行列で与えられたとすると、b(1)=2,b(2)=1,b(3)=1となる。また、上述した式(1)および(2)に示すRは、行列のi行目に対応するシンボルを示すものであり、上述した式(1)および(2)に示すCは、行列のi列目に対応するシンボルを示すものである。
【0027】
このように、ZDD構築部120は、データ入力部110により入力された2値行列を、上述した式(2)に示すようにして圧縮して表現できる。
【0028】
続いて、ZDD構築部120は、上述の式(2)で表わされる和集合を組み合わせ集合Fとして、組み合わせ集合FのZDDを計算し、データ記憶部130に格納する。なお、組み合わせ集合と、その集合に出現するシンボルの順序とが与えられれば、既存の技術を利用して、ZDDを対象とした演算を行うことによりZDDを計算することができる。そこで、ZDD構築部120は、組み合わせ集合F(式(2))に出現するシンボルR,R,…,R,C,C,…,Cに対して、R<R<・・・<R<C<C<・・・<Cという順序を与え、既存の技術を利用した演算を行うことにより、組み合わせ集合FのZDDを計算する。なお、ZDDを対象とした演算を行う既存の技術としては、例えば、Shin-ichi Minato,「Zero-Suppressed BDDs for Set Manipulation in Combinatorial Problems」,DAC’93,pp.272-277などがある。
【0029】
図5は、ZDD構築部120により構築されるZDDの一例を示す図である。図6は、ZDD構築部120により構築されたZDDに対応するノード表の一例を示す図である。なお、図5および図6は、上述した式(2)で表される組み合わせ集合から構築されるZDDである。ZDD構築部120は、組み合わせ集合Fと、組み合わせ集合Fに出現するシンボルの順序とが与えられると、既存技術を利用した演算を行うことにより、図5に示すようなZDD「I」を構築できる。図5に示すように、ZDD「I」は、ラベル「R」,「R」,「R」,「C」,「C」,「C」が貼り付けられた中間ノード(丸いノード)と、「0」または「1」のラベルが貼り付けられた終端ノード(四角いノード)とを有する。また、図5に示すように、ZDD「I」は、中間ノードのうち、ポインタ「f」が指すラベル「R」が貼り付けられたノードを先頭ノードとする。また、図6に示すように、ZDD「I」は、コンピュータ上において、ノードIDをインデックスとし、各要素を配列したノード表で表現される。ノード表のノードID「1」〜「8」は、図5に示すラベル「0」,「1」,「C」,「C」,「C」,「R」,「R」,「R」のノードにそれぞれ対応する。なお、ZDD構築部120により構築されるZDDは、組み合わせ集合を可能な限り圧縮した形で表現することが可能なデータ構造である。もし、ZDD構築部120が、組み合わせ集合を全く圧縮することなく、ZDDを構築したとする。この場合、ZDD構築部120は、2値行列の行数と、行列中の非零成分の個数分の中間ノードを有するZDDとして、組み合わせ集合を表現することとなる。一方、ZDD構築部120は、組み合わせ集合で表される2値行列の各行をベクトルとして行同士を比較し、共通部分を可能な限り圧縮した構造でZDDを構築したとする。この場合、ZDD構築部120は、共通部分を圧縮せずに構築したZDDよりも、中間ノードの数を減らしたZDDとして、組み合わせ集合を表現することができる。
【0030】
ベクトル入力部140は、データ入力部110により入力された2値行列との積の計算対象であるN次元(Nは正の整数)の実数ベクトルを入力する。なお、ベクトル入力部140は、データ入力部110と同様に、ユーザインターフェースやハードウェアインターフェースなどを介してN次元の実数ベクトルを入力する。
【0031】
行列演算実行部150は、ZDD構築部120により2値行列から構築されたZDDと、ベクトル入力部140により入力されたN次元の実数ベクトル(以下、適宜N次元ベクトルと記載する)とを用いて、行列演算を実行する。
【0032】
具体的には、行列演算実行部150は、以下に説明するように、2値行列から構築されたZDDと、実数ベクトルとの積の演算を、ZDD上で再帰的なアルゴリズムとして実行する。まず、行列演算実行部150は、ベクトル入力部140からN次元ベクトルを取得し、取得したN次元ベクトルをq、i番目の要素をqと表す。続いて、行列演算実行部150は、データ記憶部130からZDDを取得し、N次元ベクトルとの積を演算する。なお、N次元ベクトル「q」と、ZDDとの演算結果を、M次元ベクトルpとする。行列演算実行部150は、まず、スコアを格納する要素数(W−M)の1次元配列scoreを用意し、すべての要素を0で初期化しておく。ここで、要素数(W−M)は、ZDDの中間ノードのうち、列に対応するラベルを持つものの数である。次に、行列演算実行部150は、インデックス(i)をi=3に初期化する。続いて、行列演算実行部150は、v(i)が、C1〜のいずれかに一致するか否かを判定する。v(i)は、ノードIDがiであるノードのラベルである。v(i)が、C1〜のいずれかに一致する場合には、行列演算実行部150は、1次元配列score[i]の値を、ノードIDがiであるノードの子ノードの1次元配列score[HI(i)]と、v(i)=Cとなるjに対応するパラメータqの和に更新する。HI(i)は、ノードIDがiであるノードのHIリンク先となるノードのノードIDである。なお、ノード表については、HI(i)<iが成り立っているので、score[i]の値の計算は更新されたscore[HI(i)]の値を利用して行うことができる。
【0033】
一方、v(i)が、C1〜のいずれにも一致しない場合には、行列演算実行部150は、pにscore[HI(i)]の値を代入する。なお、kは、v(i)=Rとなるときの行番号のことである。つまり、v(i)が、C1〜のいずれにも一致しない場合、v(i)は、R1〜のいずれかに一致するためである。
【0034】
続いて、行列演算実行部150は、ZDDの全てのノードについて1次元配列scoreの計算を完了したか(i≦Wであるか)否かを判定する。全てのノードについて1次元配列scoreの計算を完了していない場合には、行列演算実行部150は、インデックス(i)を1インクリメントして、上述したのと同様の手順で1次元配列scoreの計算を行う。一方、全てのノードについて1次元配列scoreの計算を完了している場合には、行列演算実行部150は、行列演算の結果pを後述する計算結果出力部160に送出して処理を終了する。
【0035】
上述してきたように、行列演算実行部150による行列演算は、以下に示す式(3)のように計算できることを利用し、各ノードに計算途中の値を記憶することによって、最終的な計算結果pを得るものである。
【0036】
【数3】

【0037】
以下、図7および図8を用いて、行列演算実行部150による行列演算について補足説明する。図7は、図2に示す行列の1行目のデータについて構築したZDDを示す図である。図8は、図7に対応するノード表を示す図である。行列演算実行部150は、図7に示すZDD「I」を構成するノードのうち、ノードIDが3であるノードについて、score[3]=qとする。続いて、行列演算実行部150は、図7に示すZDD「I」を構成するノードのうち、ノードIDが4であるノードについて、score[4]=q+qとし、最終的に、p=q+qを計算する。
【0038】
上述してきたように、行列演算実行部150は、ZDDと実数ベクトルとの積の演算を、ZDDのノード数(W)に比例する時間で演算の処理を終了することができる。すなわち、行列演算実行部150は、演算量「O(W)」に応じた計算時間および記憶容量で処理を行うことができ、演算量「O(MN)」や演算量「O(K)」よりも、必要となる計算時間や記憶容量を削減できる。上述してきた方法により、ZDDと実数ベクトルとの積の演算量を、「O(W)」に減らすことができる理由は次のとおりである。再帰的計算において各中間ノードに対応して計算されるscoreの値は、行ベクトルと実数ベクトルqとの乗算の途中までの演算結果を保持している。このとき、ある行ベクトルに対する乗算と、別の行ベクトルに対する乗算において、途中までの計算が同一である場合、その結果が同一のノードに保持されることになるので、計算回数を削減することができる。その結果、ZDDと実数ベクトルとの積の演算量を「O(W)」に減らすことができる。
【0039】
計算結果出力部160は、行列演算実行部150による演算の結果を外部へ出力する。例えば、計算結果出力部160は、ディスプレイやモニタ、プリンタなどの周辺機器へ演算の結果を出力する。
【0040】
なお、上述してきた演算装置100の各種処理機能は、例えば、電子回路や集積回路により実装することができる。電子回路としては、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)がある。また、集積回路としては、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などがある。また、データ記憶部130は、例えば、RAM(Random Access Memory)やフラッシュメモリ(flash memory)などの半導体メモリ素子を用いて実装することができる。
【0041】
[演算装置による処理(実施例1)]
図9〜図11を用いて、実施例1に係る演算装置による処理の流れを説明する。図9は、実施例1に係るZDD構築処理の流れを示す図である。図10は、実施例1に係る行列と実数ベクトルとの積の計算処理の流れを示す図である。図11は、行列演算処理の流れを示す図である。実施例1に係る演算装置100による処理は、図9に示すZDD構築処理と、図10および図11に示す行列と実数ベクトルとの積の計算処理とに2分される。
【0042】
(ZDD構築処理)
図9に示すように、データ入力部110は、M行N列の2値行列を入力する(S101)。続いて、ZDD構築部120は、S101で入力した行列の各行を入力として、組み合わせ集合Fを計算する(S102)。そして、ZDD構築部120は、S102で計算した組み合わせ集合Fに対応するZDDを構築する(S103)。
【0043】
具体的には、ZDD構築部120は、データ入力部110からM行N列の2値行列を取得し、行列の各行について、1つの要素のみからなる集合を作成する(式(1)参照)。続いて、ZDD構築部120は、行列の各行について、1つの要素のみからなる集合を作成した後、それらの和集合を作成し、組み合わせ集合Fを作成する(式(2)参照)。そして、ZDD構築部120は、組み合わせ集合F(式(2))に出現するシンボルR,R,…,R,C,C,…,Cに対して、R<R<・・・<R<C<C<・・・<Cという順序を与え、既存の技術を利用した演算を行うことにより、組み合わせ集合Fに対応するZDDを構築する。
【0044】
(行列と実数ベクトルとの積の計算処理)
図10に示すように、ベクトル入力部140は、N次元の実数ベクトルを入力する(S201)。続いて、行列演算実行部150は、ZDD構築部120により2値行列から構築されたZDDと、ベクトル入力部140により入力されたN次元の実数ベクトルとを用いて、行列演算を実行する(S202)。
【0045】
(行列演算処理)
行列演算実行部150は、図11に示す処理を実行する前に、ベクトル入力部140からN次元ベクトルqを取得し、データ記憶部130からZDDを取得して、スコアを格納する要素数(W−M)の1次元配列scoreを用意し、すべての要素を0で初期化しておく。以上の準備が完了した後、行列演算実行部150は、インデックス(i)をi=3に初期化する(S301)。
【0046】
続いて、行列演算実行部150は、v(i)が、C1〜のいずれかに一致するか否か(v(i)=C(1≦j≦N)?)を判定する(S302)。判定の結果、v(i)が、C1〜のいずれかに一致する場合には(S302、Yes)、行列演算実行部150は、score[i]の値を、score(HI(i))+qに更新する(S303)。
【0047】
続いて、行列演算実行部150は、i≦Wであるか否かを判定する(S304)。判定の結果、i≦Wである場合には(S304、Yes)、行列演算実行部150は、ZDDの全てのノードについてscoreの計算を完了しているものとして、演算結果pを計算結果出力部150に送出して(S305)、行列演算処理を終了する。一方、判定の結果、i≦Wではない場合には(S304、No)、行列演算実行部150は、ZDDの全てのノードについてscoreの計算を完了していないものとして、iの値を1インクリメント(i←i+1)して(ステップS306)、上述のS302に戻る。
【0048】
上述したステップS302において、判定の結果、v(i)が、C1〜のいずれにも一致しない場合には(S302、No)、行列演算実行部150は、p←score(HI(i))として(S307)、上述のS305に移行する。
【0049】
[実施例1による効果]
上述してきたように、実施例1に係る演算装置100は、M行N列(M、Nは正の整数)の2値行列を、ZDDを用いたデータ構造に変換する(図5、6等)。そして、実施例1に係る演算装置は、ZDDと実数ベクトルとの積の演算を、ZDD上で再帰的なアルゴリズムとして実行する(図11等)。すなわち、実施例1に係る演算装置は、2値行列をZDDを用いたデータ構造に変換することにより2値行列のデータを圧縮して表現することができる。そして、実施例1に係る演算装置は、2値行列が有する非零の要素数「K」に応じた演算を実行するのではなく、2値行列をZDDを用いたデータ構造に変換したときのZDDのノード数「W」に応じた演算を実行できるようになる。このようなことから、実施例1に係る演算装置は、2値行列と実数ベクトルとの積の演算に必要となる計算時間を減らすことができ、行列演算を効率的に実行できる。
【0050】
また、疎な2値行列のデータを圧縮するので、演算に必要となる記憶容量を削減することもできる。
【0051】
また、上述の実施例1では、図9に示すZDD構築処理と、図10および図11に示す行列と実数ベクトルとの積の計算処理とを2分して説明したが、図9に示すZDD構築処理と、図10および図11に示す行列と実数ベクトルとの積の計算処理とをシリアルに実行してもよい。
【0052】
なお、上述してきた実施例1に係る演算装置は、各種数値計算や物理的なシミュレーション、各種情報管理などに幅広く適用することができる。特に、ある特定の2値行列が繰り返し利用される状況においては、一旦ZDDによって2値行列を構築すれば、計算量削減の効果が見込まれる。
【実施例2】
【0053】
以下、本発明にかかる演算装置、演算方法および演算プログラムの他の実施形態として実施例2を説明する。
【0054】
(1)装置構成等
図1に示した演算装置100の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、演算装置100の分散または統合の具体的形態は図1に示すものに限られず、演算装置100のZDD構築部120、データ記憶部130および行列演算実行部150を機能的に統合されていてもよい。このように、演算装置100の各構成要素の全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0055】
(2)演算プログラム
また、実施例1で説明した演算装置100の各種の処理(例えば、図9〜11等参照)は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどの電子機器で実行することによって実現することができる。そこで、以下では、図12を用いて、実施例1で説明した演算装置100と同様の機能を有する演算プログラムを実行する電子機器の一例を説明する。図12は、演算プログラムを実行する電子機器の一例を示す図である。
【0056】
図12に示すように、演算装置100が有する機能と同様の機能を有する電子機器200は、CPU(Central Processing Unit)210、入力部220、出力部230、メモリ240およびハードディスク装置250を有する。そして、CPU210、入力部220、出力部230、メモリ240およびハードディスク装置250は、バス260を介して接続される。
【0057】
CPU210は、各種演算処理を実行する。なお、電子機器200は、CPU210の代わりに、例えば、MPU(Micro Processing Unit)などの電子回路、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を用いることもできる。
【0058】
入力部220は2値行列などの各種情報を入力する。また、出力部230は行列演算の結果などを出力する。また、メモリ240は、2値行列を変換したZDDなどの各種情報を一時的に記憶する。なお、メモリ240は、例えば、RAM(Random Access Memory)やフラッシュメモリ(flash memory)などの半導体メモリ素子を用いて実装できる。また、ハードディスク装置250は、CPU210による各種処理の実行に必要な情報を記憶する。
【0059】
ハードディスク装置250には、演算装置100が有する機能と同様の機能を発揮する演算プログラム251および演算用データ252が記憶されている。なお、この演算プログラム251を適宜分散させて、ネットワークを介して通信可能に接続された他のコンピュータの記憶部に記憶させておくこともできる。
【0060】
そして、CPU210が、演算プログラム251をハードディスク装置250から読み出してメモリ240に展開することにより、図12に示すように、演算プログラム251は演算プロセス241として機能する。演算プロセス241は、ハードディスク装置250から読み出した演算用データ252等の各種データを適宜メモリ240上の自身に割当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。
【0061】
なお、演算プロセス241は、例えば、上述した演算装置100のZDD構築部120や行列演算実行部150などにより実行される処理、例えば、上述の図9〜11などを用いて説明した処理を含む。
【0062】
なお、上述した演算プログラム251については、必ずしも最初からハードディスク装置250に記憶させておく必要はない。例えば、電子機器200が、フレキシブルディスク、CD−ROM、DVD、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に予め記憶された演算プログラム251を読み出して実行するようにしてもよい。
【0063】
さらには、電子機器200が、公衆回線、インターネット、LAN、WANなどを介して接続可能な「他のコンピュータ(またはサーバ)」などに格納された演算プログラム251を読み出して実行するようにしてもよい。
【0064】
(3)演算方法
実施例1で説明した演算装置100により、以下のような演算方法が実現される。
【0065】
すなわち、2値行列とN次元の実数ベクトルとの行列演算を演算装置100としてのコンピュータが実行する演算方法であって、コンピュータは、M行N列(M、Nは整数)の2値行列のデータを入力するデータ入力工程と(図9、S101)、N次元(Nは整数)の実数ベクトルを入力するベクトル入力工程と(図10、S201)、データ入力工程により入力された2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築工程と(図9、S103)、構築工程により構築された変換データと、ベクトル入力部により入力された実数ベクトルとの行列演算を実行する演算工程と(図10、S202、図11)、演算工程による演算結果を出力する出力工程とを実行することを特徴とする演算方法が実現される。
【符号の説明】
【0066】
100 演算装置
110 データ入力部
120 ZDD構築部
130 データ記憶部
140 ベクトル入力部
150 行列演算実行部
160 計算結果出力部
200 電子機器
210 CPU
220 入力部
230 出力部
240 メモリ
250 ハードディスク装置
260 バス

【特許請求の範囲】
【請求項1】
2値行列とN次元の実数ベクトルとの行列演算を行う演算装置であって、
M行N列(M、Nは整数)の前記2値行列のデータを入力するデータ入力部と、
N次元の前記実数ベクトルを入力するベクトル入力部と、
前記データ入力部により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築部と、
前記構築部により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算部と、
前記演算部による演算結果を出力する出力部と
を有することを特徴とする演算装置。
【請求項2】
2値行列とN次元の実数ベクトルとの行列演算を行うコンピュータにより実行される演算方法であって、
M行N列(M、Nは整数)の前記2値行列のデータを入力するデータ入力工程と、
N次元の前記実数ベクトルを入力するベクトル入力工程と、
前記データ入力工程により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築工程と、
前記構築工程により構築された前記変換データと、前記ベクトル入力部により入力された前記実数ベクトルとの行列演算を実行する演算工程と、
前記演算工程による演算結果を出力する出力工程と
を含むことを特徴とする演算方法。
【請求項3】
2値行列とN次元の実数ベクトルとの行列演算を行うコンピュータに実行させるための演算プログラムであって、
前記コンピュータに、
M行N列(M、Nは整数)の前記2値行列のデータを入力するデータ入力手順と、
N次元の前記実数ベクトルを入力するベクトル入力手順と、
前記データ入力手順により入力された前記2値行列のデータを、二分決定グラフのデータ構造に変換した変換データを構築する構築手順と、
前記構築手順により構築された前記変換データと、前記ベクトル入力手順により入力された前記実数ベクトルとの行列演算を実行する演算手順と、
前記演算手順による演算結果を出力する出力手順と
を実行させることを特徴とする演算プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2012−243040(P2012−243040A)
【公開日】平成24年12月10日(2012.12.10)
【国際特許分類】
【出願番号】特願2011−111812(P2011−111812)
【出願日】平成23年5月18日(2011.5.18)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】