JP5458621B2 - スパースな正値対称行列の連立1次方程式の計算方法、装置、プログラム - Google Patents
スパースな正値対称行列の連立1次方程式の計算方法、装置、プログラム Download PDFInfo
- Publication number
- JP5458621B2 JP5458621B2 JP2009068957A JP2009068957A JP5458621B2 JP 5458621 B2 JP5458621 B2 JP 5458621B2 JP 2009068957 A JP2009068957 A JP 2009068957A JP 2009068957 A JP2009068957 A JP 2009068957A JP 5458621 B2 JP5458621 B2 JP 5458621B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- nodes
- subtree
- chain
- branch
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 239000011159 matrix material Substances 0.000 title claims description 27
- 238000000034 method Methods 0.000 title description 166
- 230000005055 memory storage Effects 0.000 claims description 86
- 230000008030 elimination Effects 0.000 claims description 56
- 238000003379 elimination reaction Methods 0.000 claims description 56
- 238000000354 decomposition reaction Methods 0.000 claims description 43
- 238000004364 calculation method Methods 0.000 claims description 33
- 238000003860 storage Methods 0.000 claims description 22
- 238000001514 detection method Methods 0.000 claims description 15
- 239000013598 vector Substances 0.000 claims description 15
- 238000010586 diagram Methods 0.000 description 11
- 239000012141 concentrate Substances 0.000 description 6
- 239000000470 constituent Substances 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000013178 mathematical model Methods 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000006866 deterioration Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/11—Complex mathematical operations for solving equations, e.g. nonlinear equations, general mathematical optimization problems
- G06F17/12—Simultaneous equations, e.g. systems of linear equations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Description
今、図13に示されるようなスパースな正値対象行列Lを考える。対角要素にノード番号、●は非ゼロ要素、○はLDL^T(又はLL^T)分解で発生したフィルイン(fill-in)を表す。
行列Lのi行目のiを除いた非ゼロ要素を持つノードの集合が算出される。これをrowstruct(i) とする。例えば、rowstruct(4)={1,2,3}, rowstruct(8)={5,7}である。
li ← ai − Σdjj ×lij ×lj ・・・(1)
j ∈ rowstruct(i)
li ← li /dii ,ここで dii=lii ・・・(2)
上記(1)式及び(2)式で示される処理がi=1 からn まで繰り返されることにより、li が算出される。
また、ノードiの更新で、エリミネーションツリーのdescendantとなるノードのインデクスでiよりも大きなものは、ノードiのインデクスの部分集合になることが、上記(1)式からわかる。
liの並列計算に関して、ノードiの更新をスレッドに割り付けて並列に、参照可能なljを使ってliを計算できる。ノードiの更新が終わればこれが参照可能となるため、このノードを待っていたスレッドの計算が可能になる。更新の終わったスレッドには、タスクチェイン(タスクキュー)にある次に更新されるべきノードの計算が新たに割り当てられる。参照可能なノードjに関しての更新が実行され、まだ計算が完了していないノードは後回しにして処理される。利用可能なノードの計算が終わり、計算に必要なノードjが残っていれば、ノードjの計算が終わるのが待たれる。このようににして、パイプライン方式で、LDL^T分解計算の並列化を実現することができる。
parent(i)=min { j | lji ≠ 0 , j > i } ・・・(3)
: Lのi番目の列で最初にゼロでない行番号
例えば、図13に示される行例において、ノード1の親はノード2、ノード2の親はノード4、ノード3の親はノード4などである。実際のエリミネーションツリーは、LDL^T分解される配列Aの下三角({aij | i ≧ j , j=1,…,n})をサーチすることで算出することができる。この処理の詳細は、下記非特許文献1に記載されている。
一般には、前述の(1)式から、{ i } + rowstruct(i) と { j } +rowstruct(j) が共通部分を持たない場合、各々に属するliの計算は、独立に実行することができる。エリミネーションツリーにおいては、共通部分のないsubtree同士は、独立に計算可能である。subtreeの各ノードのliの計算に必要なノードは、ノードiをルートとするpuruned subtree なので、subtree内に含まれている。従って、共通部分のないsubtree同士は、相互に依存関係がないことになるので、独立な計算が可能である。
本出願が開示する技術に関連する従来技術として、下記先行技術文献が開示されている。
サブツリーチェイン生成ステップ又はサブツリーチェイン生成部は、分岐ノードの集合のうち、その集合の要素数が並列実行される複数のスレッドの数以上となる集合をサーチし、そのサーチで得られる分岐ノードの集合に含まれる各分岐ノードをルートノードとする各サブツリーに関する情報をその各サブツリー単位で第1のタスクチェインであるサブツリーチェインに接続する。
そして開示する技術によれば、各スレッドは概ね独立したメモリ格納領域をアクセスする。この結果、アクセスが集中することがないため、メモリアクセスのボトルネックが発生せず、並列度が上げたときに処理性能が著しく劣化することを回避することが可能となる。
スパースな正値対象行列のLDL^T分解は、以下に示される方法で行われる。まず、スパース行列データが、compressed column storage(圧縮列格納方式)などの圧縮格納方式によってメモリに格納される。これにより、対角要素を含む下三角行列部分の非ゼロ要素が圧縮してメモリに格納される。列同士の依存関係や分解で新たに発生する非ゼロ要素が考慮されて、非ゼロパターンが同じか似ている列が並べ替えられて、1つのpanel(ブロック)にまとめられる。ブロックはスーパーノードと呼ばれ、複数のノードからなる。分解過程で生じるスーパーノード間のデータ依存関係が木構造で表現されて処理が実行される。この木のことをエリミネーションツリー(elimination tree)と呼ぶ。
ノードがleft-looking法で更新されてゆくとき、そのノードに関するpruned row subtreeの情報に基づいて、更新により参照されるrow structure(行構造)が決まる。pruned row subtreeは、エリミネーションツリーのsubtree(サブツリー、部分木)である。
更に処理が進むと、木のルート(root)の方向に処理が進みながら、更新されるべきノードが順次選択されてゆく。処理がルートに近づくほど、一般に独立なsubtreeは減ってゆく。各ノードの依存関係が考慮されながらノードに対するブロックの更新が並列処理されてゆく。スパース行列のために、参照・更新されるノードは限られる。このため、単純に木の構造を構成するノードで近いものがメモリ上でも近くのメモリ格納領域に割り当てられると、メモリへの参照・更新が局所的な部分に集中してしまう。
本実施形態では、エリミネーションツリーは、全ノード数を#nodeとする1次元配列parentを用いて表現される。例えば、j=parent(i)は、「ノードiの親(parent)はノードjである」という意味を表現している。
上述のエリミネーションツリーを用いることにより、スパース行列で、ノードに対応する列ベクトルを束ねたスーパーノードが検出される。スーパーノードを構成するノードの非ゼロ要素の存在する行のみが圧縮され、2次元のpanel(パネル)に分解結果が格納される。
全panelを格納する1次元配列が用意され、この1次元配列のどの要素位置に各スーパーノードに対応するpanelが配置されるかが決定される。
この実施形態は、分岐ノード集合検出部101、メモリ割付チェイン生成部102、タスクチェイン生成部103、LDL^T分解実行部104を含む。
ステップ1.エリミネーションツリーデータ(parent配列、child配列、brother配列)が入力される。そして、それによって表現されるエリミネーションツリーにおいて、ルートノードからサーチが行われ、兄弟が複数ノードある、同じ並列レベルの分岐ノードの集合が、レベル毎に検出される。
ステップ2.ステップ1.で検出されたレベル毎の分岐ノードの集合のうち、集合の要素数が連続にメモリデータを割り当てるセクション(メモリ格納領域)の数以上となるものが、レベルが低いものから順にサーチされる。
ステップ5.ステップ1.で検出されたレベル毎の分岐ノードの集合のうち、集合の要素数が並列実行されるスレッドの数以上となる集合が、レベルの低いものから順にサーチされる。
ステップ8.ステップ6.にて生成されたsubtree chainにエントリがあるうちは、subtree chainの先頭から順次各分岐ノードがスレッドの並列数ずつ取り出され、各スレッドに割り当てられる。各スレッドでは、割り当てられた分岐ノードに対応するsubtreeを構成する各ノードに対して、left-lookingなLDL^T分解が実行される。subtree chainのエントリがなくなったら、ステップ7.にて生成されたnode chainの先頭から順次各ノードがスレッドの並列数ずつ取り出され、各スレッドに割り当てられる。各スレッドでは、割り当てられたノードに対して、left-lookingなLDL^T分解が実行される。
図7は、エリミネーションツリーのルートノードをレベル1として、レベル1から順次増加するレベル毎に、各レベルに属する分岐ノードの集合を管理するための配列データの構成例を示した図である。
続いて、ステップS206では、childのノードに、更にchildとそのbrotherがあるか否かが判定される。今、図14に示されるように、child=10には、更にchild=4と、そのbrother=9があるので、この判定はYESとなる。この結果、ステップS207へ移行する。
続いて、ステップS208では、branchlvl配列のlevel変数の値に対応する配列位置に、レベル(level+1)のインデックスとして、ptrnext変数の値が格納される。上記配列位置に既に値が格納されている場合には、この処理は実行されない。今、図7(a)の702として示されるように、branchlvl配列の配列位置1(level=1)に、レベル2(=level+1)のインデックスとして、ptrnext=1が格納される。
ステップS211では、childのchildでchildが置き換えられる。即ち、child=19となる。続いて、ステップS206に移行する。
図14に示されるように、childstart=20にはbrotherがないので、ステップS212の判定はNOとなる。この結果、ステップS214へ移行する。
図7(b)の704として示されるようにレベル1の分岐ノードは1つ(=ノード21)のみであり、ptrsearch=1>levelend=0となるので、ステップS203の判定はNOとなる。この結果、ステップS215へ移行する。
branch内の配列位置=ptrsearch=1のノード10(図7(b)の705)には、図14に示されるように、child=4があるので、ステップS204の判定はYESとなる。この結果、ステップS205へ移行する。
続いて、図14に示されるように、child=4には、更にchild=2と、そのbrother=3があるので、ステップS206の判定はYESとなる。この結果、ステップS207へ移行する。
続いて、ステップS208では、図7(a)の703に示されるように、branchlvl配列の配列位置level=2に、レベル3(=level+1)のインデックスとして、branch配列の末尾の配列位置ptrnext=2が格納される。
図14に示されるように、childstart=4にはbrother=9があるので、ステップS212の判定はYESとなる。この結果、ステップS213へ移行する。
図14に示されるように、child=9には、child=8があるが、そのbrotherはないので、ステップS206の判定はNOとなる。この結果、ステップS210へ移行する。
ステップS211では、child=8となる。続いて、ステップS206に移行する。
上述のようにchild=8にはchild=7があるので、ステップS210の判定はYESとなる。この結果、ステップS211に移行する。
図14に示されるように、child=7には、更にchild=5と、そのbrother=6があるので、ステップS206の判定はYESとなる。この結果、ステップS207へ移行する。
続いて、branchlvl配列の配列位置2(=level)に、レベル3(=level+1)のインデックス=2が既にあるから、ステップS208の処理は実行されない。
図14に示されるように、childstart=9にはbrotherがないので、ステップS212の判定はNOとなる。この結果、ステップS214へ移行する。
図7(b)の705として示されるようにレベル2の分岐ノードは1つ(=ノード10)のみであり、ptrsearch=2>levelend=1となるので、ステップS203の判定はNOとなる。この結果、ステップS215へ移行する。
図14に示されるように、branch配列内の配列位置ptrsearch=2のノード4にはchild=2があるので、ステップS204の判定はYESとなる。この結果、ステップS205へ移行する。
図14に示されるように、child=2には、child=1があるが、そのbrotherはないので、ステップS206の判定はNOとなる。この結果、ステップS210へ移行する。
ステップS211では、child=1となる。続いて、ステップS206に移行する。
上述のようにchild=1にはchildはないので、ステップS210の判定はNOとなる。この結果、ステップS212に移行する。
ステップS213では、childstart=3、child=3とされる。続いて、ステップS206へ移行する。
図14に示されるように、childstart=3にはbrotherがないので、ステップS212の判定はNOとなる。この結果、ステップS214へ移行する。
図7(b)の706及び707として示されるようにレベル3の分岐ノードは2つ(=ノード4及び7)であり、現在ノード4の処理が終わってノード7の処理に移っており、ptrsearch=3≦levelend=3となるので、ステップS203の判定はYESとなる。この結果、ステップS204へ移行する。
続いて、図14に示されるように、child=5はリーフノードでありchildはないので、ステップS206の判定はNOとなる。この結果、ステップS212に移行する。
ステップS213では、childstart=6、child=6とされる。続いて、ステップS206へ移行する。
図14に示されるように、childstart=6にはbrotherがないので、ステップS212の判定はNOとなる。この結果、ステップS214へ移行する。
図7(b)の706及び707として示されるようにレベル3の分岐ノードは2つ(=ノード4及び7)であり、ノード4とノード7の処理が共に終了しており、ptrsearch=4>levelend=3となるので、ステップS203の判定はNOとなる。この結果、ステップS215へ移行する。
次に、図3は、図1のメモリ割付チェイン生成部102が実行する前述のステップ2.から4.のメモリ割付チェイン生成処理の詳細を示す動作フローチャートである。ここでは、エリミネーションツリー上の各ノードに対して、メモリ格納領域が割付けられる。
次に、ステップS301で見つかったlevel集合から、1つのノード=分岐ノードが取り出され、nodelvlとされる(ステップS303)。ここでは例えば、level 3の集合{4,7}からノード4がnodelvlとして取り出される。
chain1={1→2→3→4} ・・・(4)
この割付チェインchain1が、例えば図8(a)に示されるデータ構造を使って形成される。
pool=mod(pool,#pool)+1 ・・・(5)
今、#pool=2であり、現在のpool番号pool=1とすれば、上記計算の結果、新たなpool番号はpool=2となる。なお逆に、現在のpool番号pool=2とすれば、上記計算の結果、新たなpool番号はpool=1となる。
ここで、現在のpoolが1から2に変化した後、ステップS301で見つかったlevel集合に残りがあるか否かが判定される(ステップS308)。
chain2={5→6→7} ・・・(6)
以上のステップS303からS308の処理により、メモリ割付チェイン生成部102による前述のステップ3.の処理が実現される。
次に、ステップS311では、nodestart≦nodeendが成立するか否かが判定される。図9の行3の状態では、ステップS311の判定がYESとなり、ステップS312に移行する。
ステップS312において、図9の行8の状態では、nodestart=2で示される配列位置の対象ノード10がwork配列から取り出され、その対象ノード10のchild,brotherのノードが調べられる。対象ノード10は、図9の行4でwork配列の配列位置2にセットされている。図14の例では、対象ノード10のchildノードであるノード4、そのbrotherノードであるノード9の各ノードが調べられる。まず、ノード4は、前述のステップS301からS308の処理におけるメモリ割付対象となっており、nmark配列上でonされている。このため、ノード4はwork配列には格納されない。続いて、ノード9は、前述のステップS301からS308の処理におけるメモリ割付対象とはなっておらず、nmark配列上でonされてはいない。このため、nodeend=3+1=4で示されるwork配列上の配列位置4に、ノード9が格納される(図9の行8)。
図9の行10の状態では、nodestart=3≦nodeend=4でステップS311の判定がYESとなり、ステップS312に移行する。
図9の行13の状態では、nodestart=4≦nodeend=5でステップS311の判定がYESとなり、ステップS312に移行する。
図9の行16の状態では、nodestart=5≦nodeend=6でステップS311の判定がYESとなり、ステップS312に移行する。
図9の行19の状態では、nodestart=6≦nodeend=7でステップS311の判定がYESとなり、ステップS312に移行する。
図9の行22の状態では、nodestart=7=nodeend=7でステップS311の判定がYESとなり、ステップS312に移行する。
図9の行42の状態では、ステップS313において、nodestart=13+1=14とされる。続いて、ステップS311に移行する。
ステップS312において、図9の行44の状態では、nodestart=14で示される配列位置の対象ノード11がwork配列から取り出されるが、図14に示されるように、対象ノード11にはchild,brotherのノードがない。このため、work配列へのノード格納は行われない(図9の行44)。なお、対象ノード11は、図9の行41でwork配列の配列位置14にセットされている。
図9の行46の状態では、nodestart=15=nodeend=14でステップS311の判定がNOとなり、ステップS311の判定がNOとなって、ステップS314に移行する。
work={21|10,20|9,19|8,18|17|16|15|14|13|12|11} ・・・(7)
ここで、区切り記号「|」は、レベルの境界を示している。
chain1={1→2→3→4→11→13→15→17→8→9→10} ・・・(8)
chain2={5→6→7→12→14→16→18→19→20→21} ・・・(9)
ステップS315では、図10に示されるようなメモリ割当て制御用のデータ群に対して、割付チェインchain1及びchain2に基づいてデータ設定が行われる。後述するLDL^T分解処理の実行時には、これらのデータ群が随時参照されて各ノードの計算結果をメモリ格納領域に割り当てるための制御が実行されることになる。
図4の動作フローチャートにおいて、まず、図7(a)に示されるbranchlvl配列と図7(b)に示されるbranch配列がアクセスされることにより、#thread以上の要素数を有する分岐ノード集合が見つけられる(ステップS401)。ここで、branchlvl配列とbranch配列は、図2の動作フローチャートで示される分岐ノード集合検出処理によって得られている。図7に示される配列構造の例から、レベル1(level 1)の分岐ノード集合は{21}(ノード21を要素とする集合)となる。次に、レベル2(level 2)の分岐ノード集合は{10}(ノード10を要素とする集合)となる。更に、レベル3(level 3)の分岐ノード集合は{4,7}(ノード4とノード7の集合)となる。そして、#thread=2とすると、2以上の要素数を有する分岐ノード集合は、level 3の分岐ノード集合{4,7}である。この結果、ステップS402の判定がYESとなる。
subtree chain={4} ・・・(10)
このsubtree chainが、例えば図8(a)に示されるデータ構造を使って形成される。
前述のlevel 3の集合{4,7}の場合、まだノード7が残っている。従って、ステップS407の判定がYESとなり、ステップS403の処理に戻る。この結果、level 3の集合{4,7}からノード7が取り出される(ステップS403)。次に、1次元配列nmark上の上記ノードnodelvl=7に対応する配列位置の配列要素が、onを示す値に設定される(ステップS404)。更に、nodelvlノード=4に対するfirstdescendantのノードとして、fstdecs=5が設定される(ステップS405)(図14参照)。続いて、subtree chainに、ノードnodelvlが加えられる(ステップS406)。従って、subtree chainは、次のようになる。
subtree chain={4→7} ・・・(11)
node chain={11→12→13→14→15→16→17→18→19→20→10→21}
・・・(12)
各スレッドでは、ステップS502において、変数snodeと変数nnodeの各値が0に初期設定される。
subtree chainにノードがあってステップS504の判定がYESの場合、第1のスレッドでは、ステップS505において、subtree chain の先頭ノードが取り出され、そのノード番号が変数snode に設定され、その後、subtree chainの次のノードが先頭に設定される。今、図8(a)に示されるデータ構造において、chain1がsubtree chainであったとした場合において、subtree chainが例えば前述の(11)式で示されるように得られている場合を考える。この場合、図8(a)のレジスタ801には、1次元配列800上のノード4に対応する配列位置が格納されている。また、1次元配列800上のノード4に対応する配列位置には、1次元配列800上のノード7に対応する配列位置が格納されている。1次元配列800上のノード7に対応する配列位置には、nullデータが格納されている。このような例において、第1のスレッドでは、ステップS505において、レジスタ801に格納されている配列位置が、ノード4のノード番号として変数snodeに設定される。その後、レジスタ801からアクセスできる1次元配列800上のノード4に対応する配列位置に格納されているノード7の配列位置が、新たにレジスタ801に設定し直される。
今、ステップS505にてsnodeにノード4のノード番号が設定されたため、ステップS509の判定はNOとなる。
即ち、第2のスレッドで、ステップS503にて、subtree chainとnode chainがlockされる。これ以後、第2のスレッドがsubtree chainとnode chainがunlockするまでの間、第1のスレッドは、subtree chainとnode chainへのアクセスを待たされることになる。
subtree chainにノードがあってステップS504の判定がYESの場合、第2のスレッドでは、ステップS505において、subtree chain の先頭ノードが取り出され、そのノード番号が変数snode に設定され、その後、subtree chainの次のノードが先頭に設定される。今、前述の第1のスレッドによるステップS505の処理によって、図8(a)のsubtree chainを示すレジスタ801に格納されている配列位置は、ノード4の次のノード7のノード番号を指している。この結果、第2のスレッドによりステップS505の処理では、ノード7のノード番号が変数snodeに設定される。その後、レジスタ801からアクセスできる1次元配列800上のノード7に対応する配列位置に格納されているnull値が、新たにレジスタ801に設定し直される。このnull値は、subtree chainにはこれ以上ノードが無いことを示している。
今、ステップS505にてsnodeにノード7のノード番号が設定されたため、ステップS509の判定はNOとなる。
node chainにノードがあってステップS506の判定がYESの場合、第1のスレッドでは、ステップS507において、node chain の先頭ノードが取り出され、そのノード番号が変数nnode に設定され、その後、node chainの次のノードが先頭に設定される。今、図8(a)に示されるデータ構造において、chain2がnode chainであったとした場合において、node chainが例えば前述の(12)式で示されるように得られている場合を考える。この場合、図8(a)のレジスタ802には、1次元配列800上のノード11に対応する配列位置が格納されている。また、1次元配列800上のノード11に対応する配列位置には、1次元配列800上のノード12に対応する配列位置が格納されている。以下、node chainでの各ノードの接続順に従って、各ノードの配列位置にはその次に接続されるノードの配列位置が格納される。そして、最後のノードに対応する配列位置には、nullデータが格納されている。このような例において、第1のスレッドでは、ステップS507において、レジスタ802に格納されている配列位置が、ノード11のノード番号として変数nnodeに設定される。その後、レジスタ802からアクセスできる1次元配列800上のノード11に対応する配列位置に格納されているノード12の配列位置が、新たにレジスタ802に設定し直される。
続いて、第1のスレッドでは、ステップS509において、変数snodeの値が0であるか否かが判定される。ここで、ステップS502にて変数snodeが0クリアされた後、ステップS504の判定はNOとなっているため、変数snodeの値は0のままであり、ステップS509の判定はYESとなる。
即ち、第2のスレッドで、ステップS503にて、subtree chainとnode chainがlockされる。
node chainにノードがあってステップS506の判定がYESの場合、第2のスレッドでは、ステップS507において、node chain の先頭ノードが取り出され、そのノード番号が変数nnode に設定され、その後、node chainの次のノードが先頭に設定される。今、前述の第1のスレッドによるステップS507の処理によって、図8(a)のnode chainを示すレジスタ802に格納されている配列位置は、ノード11の次のノード12のノード番号を指している。この結果、第2のスレッドによりステップS507の処理では、ノード12のノード番号が変数nnodeに設定される。その後、レジスタ802からアクセスできる1次元配列800上のノード12に対応する配列位置に格納されているノード13に対応する配列位置が、新たにレジスタ802に設定し直される。
続いて、第2のスレッドでは、ステップS509において、変数snodeの値が0であるか否かが判定される。ここで、ステップS502にて変数snodeが0クリアされた後、ステップS504の判定はNOとなっているため、変数snodeの値は0のままであり、ステップS509の判定はYESとなる。
次に、並列に実行されるスレッド数が2から3に増やされた場合について説明する。
work={21|10,20|4,9,19|2,3,8,18|1,7,17|1,5,6,16|15|14|13|12|11}
・・・(13)
これより、node chainとしては、次のようなものが生成される。
node chain={11→12→13→14→15→16→6→5→1→17→7→1→18→8
→3→2→19→9→4→20→10→21} ・・・(14)
最初、ノード11、12、13が3つのスレッドに割り当てられてpanel更新処理が実行され、空いたスレッドに次のノード14が割り当てられる。
マルチコアCPU1100が、相互結合網(バス)1104を介して、複数のメモリモジュール1103と接続される。
図12に示されるコンピュータシステムは、CPU1201、メモリ1202、入力装置1203、出力装置1204、外部記憶装置1205、可搬記録媒体1209が挿入される可搬記録媒体駆動装置1206、及びネットワーク接続装置1207を有し、これらがバス1208によって相互に接続された構成を有する。同図に示される構成は上記システムを実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。
可搬記録媒体駆動装置1206は、光ディスクやSDRAM、コンパクトフラッシュ(登録商標)等の可搬記録媒体1209を収容するもので、外部記憶装置1205の補助の役割を有する。
本実施形態によるシステムは、図1の各部に必要な機能を搭載したプログラムをCPU1201が実行することで実現される。そのプログラムは、例えば外部記憶装置1205や可搬記録媒体1209に記録して配布してもよく、或いはネットワーク接続装置1207によりネットワークから取得できるようにしてもよい。
102 メモリ割付チェイン生成部
103 タスクチェイン生成部
104 LDL^T分解実行部
1100 マルチコアCPU
1101 CPUコア+L1キャッシュ
1102 L2キャッシュ・バスインタフェース
1103 メモリモジュール
1104 相互結合網(バス)
1201 CPU
1202 メモリ
1203 入力装置
1204 出力装置
1205 外部記憶装置
1206 可搬記録媒体駆動装置
1207 ネットワーク接続装置
1208 バス
1209 可搬記録媒体
Claims (3)
- 複数のメモリ格納領域を備えるコンピュータで実行される計算方法であって、
前記コンピュータが、
正値対称行列のコレスキー分解に先立ち入力行列の非零要素の構造を解析して得られるスーパーノード間のデータ依存関係が木構造で表現されるエリミネーションツリーをルートノードからサーチして、前記ルートノードから数えた分岐ノードの数が互いに同じである分岐ノードの集合を検出し、
検出された前記分岐ノードの集合のうち、該集合の要素数が連続にメモリデータが割り当てられる記憶単位である複数のメモリ格納領域の数以上となる集合をサブツリーとしてサーチし、該サーチで得られるサブツリーに含まれるノード群を複数のメモリ格納領域のうちの1つのメモリ格納領域に割り付け、
前記エリミネーションツリーを構成するノード群のうち、前記サーチで得られるサブツリーを構成するノード群を含まないノード群の各ノードを、前記複数のメモリ格納領域のうち、異なるメモリ格納領域にサイクリックに割り付け、
前記分岐ノードの集合のうち、該集合の要素数が並列実行される複数のスレッドの数以上となる前記分岐ノードの集合をサブツリーとしてサーチし、該サーチで得られるサブツリーの分岐ノードで構成されるサブツリーチェインを生成し、
前記エリミネーションツリーを構成するノード群のうち、前記スレッドに関するサーチで得られる分岐ノードの集合に対応する前記各サブツリーを構成するノード群を含まないノード群を、前記エリミネーションツリーのリーフノードからルートノードに向かう順に並べてノードチェインを生成し、
前記各スレッドは、前記サブツリーチェインを構成する分岐ノードを登録順に選択して該分岐ノードに対応するサブツリーを構成するノード群に対する列ベクトルの演算を実行し、前記サブツリーチェインで選択すべき分岐ノードがなくなったら、前記ノードチェインを構成する各ノードに対する前記列ベクトルの演算を登録順に実行する、
ことを特徴とする計算方法。 - 複数のメモリ格納領域を備える計算装置であって、
正値対称行列のコレスキー分解に先立ち入力行列の非零要素の構造を解析して得られるスーパーノード間のデータ依存関係が木構造で表現されるエリミネーションツリーをルートノードからサーチして、前記ルートノードから数えた分岐ノードの数が互いに同じである分岐ノードの集合を検出する分岐ノード集合検出処理部と、
前記分岐ノード集合検出処理部により検出された前記分岐ノードの集合のうち、該集合の要素数が連続にメモリデータが割り当てられる記憶単位である複数のメモリ格納領域の数以上となる集合をサブツリーとしてサーチし、該サーチで得られるサブツリーに含まれるノード群を複数のメモリ格納領域のうちの1つのメモリ格納領域に割り付けるサブツリーメモリ格納領域割付け部と
前記エリミネーションツリーを構成するノード群のうち、前記サーチで得られるサブツリーを構成するノード群を含まないノード群の各ノードを、前記複数のメモリ格納領域のうち、異なるメモリ格納領域にサイクリックに割り付けるノードメモリ格納領域割付け部と、
前記分岐ノードの集合のうち、該集合の要素数が並列実行される複数のスレッドの数以上となる集合をサブツリーとしてサーチし、該サーチで得られるサブツリーの分岐ノードで構成されるサブツリーチェインを生成するサブツリーチェイン生成部と、
前記エリミネーションツリーを構成するノード群のうち、前記スレッドに関するサーチで得られる分岐ノードの集合に対応する前記各サブツリーを構成するノード群を含まないノード群を、前記エリミネーションツリーのリーフノードからルートノードに向かう順に並べてノードチェインを生成するノードチェイン生成部と、
を含み、
前記各スレッドは、前記サブツリーチェインを構成する分岐ノードを登録順に選択して該分岐ノードに対応するサブツリーを構成するノード群に対する列ベクトルの演算を実行し、前記サブツリーチェインで選択すべき分岐ノードがなくなったら、前記ノードチェインを構成する各ノードに対する前記列ベクトルの演算を登録順に実行する、
ことを特徴とする計算装置。 - 複数のメモリ格納領域を備えるコンピュータに、
正値対称行列のコレスキー分解に先立ち入力行列の非零要素の構造を解析して得られるスーパーノード間のデータ依存関係が木構造で表現されるエリミネーションツリーをルートノードからサーチして、前記ルートノードから数えた分岐ノードの数が互いに同じである分岐ノードの集合を検出し、
検出された前記分岐ノードの集合のうち、該集合の要素数が連続にメモリデータが割り当てられる記憶単位である複数のメモリ格納領域の数以上となる集合をサブツリーとしてサーチし、該サーチで得られるサブツリーに含まれるノード群を複数のメモリ格納領域のうちの1つのメモリ格納領域に割り付け、
前記エリミネーションツリーを構成するノード群のうち、前記サーチで得られるサブツリーを構成するノード群を含まないノード群の各ノードを、前記複数のメモリ格納領域のうち、異なるメモリ格納領域にサイクリックに割り付け、
前記分岐ノードの集合のうち、該集合の要素数が並列実行される複数のスレッドの数以上となる集合をサブツリーとしてサーチし、該サーチで得られるサブツリーの分岐ノードで構成されるサブツリーチェインを生成し、
前記エリミネーションツリーを構成するノード群のうち、前記スレッドに関するサーチで得られる分岐ノードの集合に対応する前記各サブツリーを構成するノード群を含まないノード群を、前記エリミネーションツリーのリーフノードからルートノードに向かう順に並べてノードチェインを生成する、
ことを実行させ、
前記各スレッドは、前記サブツリーチェインを構成する分岐ノードを登録順に選択して該分岐ノードに対応するサブツリーを構成するノード群に対する列ベクトルの演算を実行し、前記サブツリーチェインで選択すべき分岐ノードがなくなったら、前記ノードチェインを構成する各ノードに対する前記列ベクトルの演算を登録順に実行する、
ことを特徴とするプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009068957A JP5458621B2 (ja) | 2009-03-19 | 2009-03-19 | スパースな正値対称行列の連立1次方程式の計算方法、装置、プログラム |
US12/697,342 US8583719B2 (en) | 2009-03-19 | 2010-02-01 | Method and apparatus for arithmetic operation by simultaneous linear equations of sparse symmetric positive definite matrix |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009068957A JP5458621B2 (ja) | 2009-03-19 | 2009-03-19 | スパースな正値対称行列の連立1次方程式の計算方法、装置、プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2010224682A JP2010224682A (ja) | 2010-10-07 |
JP5458621B2 true JP5458621B2 (ja) | 2014-04-02 |
Family
ID=42738554
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009068957A Active JP5458621B2 (ja) | 2009-03-19 | 2009-03-19 | スパースな正値対称行列の連立1次方程式の計算方法、装置、プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8583719B2 (ja) |
JP (1) | JP5458621B2 (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5672902B2 (ja) | 2010-09-27 | 2015-02-18 | 富士通株式会社 | ordering生成方法、プログラム及び共有メモリ型スカラ並列計算機 |
US8943511B2 (en) * | 2012-05-31 | 2015-01-27 | Nec Corporation | Parallel allocation optimization device, parallel allocation optimization method, and computer-readable recording medium |
US8938484B2 (en) * | 2012-06-01 | 2015-01-20 | International Business Machines Corporation | Maintaining dependencies among supernodes during repeated matrix factorizations |
JP6083300B2 (ja) | 2013-03-29 | 2017-02-22 | 富士通株式会社 | プログラム、並列演算方法および情報処理装置 |
JP6384331B2 (ja) * | 2015-01-08 | 2018-09-05 | 富士通株式会社 | 情報処理装置、情報処理方法、および情報処理プログラム |
US11221876B2 (en) * | 2018-12-30 | 2022-01-11 | Paypal, Inc. | Scheduling applications in CPU and GPU hybrid environments |
GB2582785A (en) * | 2019-04-02 | 2020-10-07 | Graphcore Ltd | Compiling a program from a graph |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089275B2 (en) * | 2003-01-29 | 2006-08-08 | Sun Microsystems, Inc. | Block-partitioned technique for solving a system of linear equations represented by a matrix with static and dynamic entries |
CN101529765A (zh) * | 2006-03-17 | 2009-09-09 | 乔斯林·奥林 | 快衰落信道中的ofdm |
US7822289B2 (en) * | 2006-07-25 | 2010-10-26 | Microsoft Corporation | Locally adapted hierarchical basis preconditioning |
JP2009025962A (ja) * | 2007-07-18 | 2009-02-05 | Hitachi Ltd | 連立一次方程式求解方法及び装置 |
-
2009
- 2009-03-19 JP JP2009068957A patent/JP5458621B2/ja active Active
-
2010
- 2010-02-01 US US12/697,342 patent/US8583719B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US8583719B2 (en) | 2013-11-12 |
US20100241683A1 (en) | 2010-09-23 |
JP2010224682A (ja) | 2010-10-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5458621B2 (ja) | スパースな正値対称行列の連立1次方程式の計算方法、装置、プログラム | |
Gebremedhin et al. | Colpack: Software for graph coloring and related problems in scientific computing | |
US11093526B2 (en) | Processing query to graph database | |
Plimpton et al. | Mapreduce in MPI for large-scale graph algorithms | |
Liu | The multifrontal method for sparse matrix solution: Theory and practice | |
Buluç et al. | Reduced-bandwidth multithreaded algorithms for sparse matrix-vector multiplication | |
Darwish et al. | Optimal time-space tradeoff for the 2D convex-hull problem | |
Sao et al. | A supernodal all-pairs shortest path algorithm | |
CN111292805B (zh) | 一种三代测序数据重叠检测方法及系统 | |
Carr et al. | Scalable contour tree computation by data parallel peak pruning | |
Liu et al. | Register-aware optimizations for parallel sparse matrix–matrix multiplication | |
Turgut et al. | An exact parallel objective space decomposition algorithm for solving multi-objective integer programming problems | |
Almasri et al. | Parallel k-clique counting on gpus | |
Engström et al. | PageRank for networks, graphs, and Markov chains | |
Azad et al. | A parallel tree grafting algorithm for maximum cardinality matching in bipartite graphs | |
Steinbach et al. | Sources and obstacles for parallelization-a comprehensive exploration of the unate covering problem using both CPU and GPU | |
Leroy et al. | Work stealing strategies for multi-core parallel branch-and-bound algorithm using factorial number system | |
Chen et al. | Exploiting hierarchical parallelism and reusability in tensor kernel processing on heterogeneous hpc systems | |
Morihata et al. | A practical tree contraction algorithm for parallel skeletons on trees of unbounded degree | |
Freire et al. | Enhancing the sparse matrix storage using reordering techniques | |
Reustle et al. | Fast gpu convolution for cp-decomposed tensorial neural networks | |
US9600446B2 (en) | Parallel multicolor incomplete LU factorization preconditioning processor and method of use thereof | |
Rastogi et al. | Significance of parallel computation over serial computation | |
Capannini | Designing efficient parallel prefix sum algorithms for gpus | |
Lu et al. | TileSpTRSV: a tiled algorithm for parallel sparse triangular solve on GPUs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20111107 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130606 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130625 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130826 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131001 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131202 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20131217 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131230 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5458621 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |