(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023142272
(43)【公開日】2023-10-05
(54)【発明の名称】計算プログラム及び計算方法
(51)【国際特許分類】
G06F 17/12 20060101AFI20230928BHJP
【FI】
G06F17/12
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2022049092
(22)【出願日】2022-03-24
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100121083
【弁理士】
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【弁理士】
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【弁理士】
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】大山 洋介
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB02
(57)【要約】
【課題】並列に動作する複数の処理単位を用いた反復法の計算時間を短縮する。
【解決手段】コンピュータは、1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行する。コンピュータは、1つ又は複数のループ処理よりも後の所定のループ処理において、複数の処理単位を用いて反復法の計算を実行する。コンピュータは、1つ又は複数のループ処理各々の反復法の計算において解が更新された回数に基づき、所定のループ処理の反復法の計算において更新終了を判定する判定処理のタイミングを決定する。判定処理は、複数の処理単位の間における通信の結果に基づいて、更新終了を判定する処理を含む。
【選択図】
図17
【特許請求の範囲】
【請求項1】
コンピュータのための計算プログラムであって、
前記計算プログラムは、
1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行し、
前記1つ又は複数のループ処理よりも後の所定のループ処理において、前記複数の処理単位を用いて前記反復法の計算を実行し、
前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数に基づき、前記所定のループ処理の前記反復法の計算において更新終了を判定する判定処理のタイミングを決定する、
処理を前記コンピュータに実行させ、
前記判定処理は、前記複数の処理単位の間における通信の結果に基づいて、前記更新終了を判定する処理を含むことを特徴とする計算プログラム。
【請求項2】
前記判定処理のタイミングを決定する処理は、前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数の統計値に基づき、前記所定のループ処理の前記反復法の計算において前記判定処理を開始する開始タイミングを決定する処理を含むことを特徴とする請求項1記載の計算プログラム。
【請求項3】
前記判定処理のタイミングを決定する処理は、前記所定のループ処理の前記反復法の計算において前記解の更新が複数回行われる間に、前記判定処理が1回行われるように、前記判定処理のタイミングを決定する処理を含むことを特徴とする請求項1又は2記載の計算プログラム。
【請求項4】
前記反復法の計算は、連立一次方程式の解を求める計算であり、
前記複数の処理単位各々には、前記連立一次方程式の解の一部を計算する処理が割り当てられ、
前記通信の結果に基づいて前記更新終了を判定する処理は、
前記複数の処理単位の間で、前記連立一次方程式の解の一部に対する残差に関する情報を送受信する処理と、
前記連立一次方程式の解の一部に対する残差に関する情報を用いて、前記連立一次方程式の解に対する残差を求める処理と、
前記連立一次方程式の解に対する残差に基づいて、前記解の更新を終了するか否かを判定する処理と、
を含むことを特徴とする請求項1又は2記載の計算プログラム。
【請求項5】
1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行し、
前記1つ又は複数のループ処理よりも後の所定のループ処理において、前記複数の処理単位を用いて前記反復法の計算を実行し、
前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数に基づき、前記所定のループ処理の前記反復法の計算において更新終了を判定する判定処理のタイミングを決定する、
処理をコンピュータが実行し、
前記判定処理は、前記複数の処理単位の間における通信の結果に基づいて、前記更新終了を判定する処理を含むことを特徴とする計算方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、計算技術に関する。
【背景技術】
【0002】
対称連立一次方程式の解を求める反復法として、共役勾配法(Conjugate Gradient Method,CG法)及び前処理付き共役勾配法(Preconditioned CG Method,PCG法)が知られている(例えば、非特許文献1を参照)。非対称連立一次方程式の解を求める反復法として、双共役勾配法(Biconjugate Gradient Method,BiCG法)及び前処理付き双共役勾配法(Preconditioned BiCG Method,PBiCG法)も知られている(例えば、非特許文献2を参照)。
【0003】
数値解析演算の収束判定、収束までの計算回数等の情報を計算中に取得することができる解析装置も知られている(例えば、特許文献1を参照)。反復計算において、計算完了までの計算量をより精度よく推定する反復計算量推定装置も知られている(例えば、特許文献2を参照)。関数を近似する方法も知られている(例えば、特許文献3を参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007-287055号公報
【特許文献2】特開2017-97392号公報
【特許文献3】米国特許出願公開第2010/0293213号明細書
【非特許文献】
【0005】
【非特許文献1】E. F. Kaasschieter, “Preconditioned conjugate gradients for solving singular systems”, Journal of Computational and Applied mathematics 24, 1988, pages 265-275.
【非特許文献2】“Biconjugate Gradient Method”、Wolfram MathWorld、September 19, 2021、[online]、[令和3年10月1日検索]、インターネット<URL:https://mathworld.wolfram.com/BiconjugateGradientMethod.html>
【発明の概要】
【発明が解決しようとする課題】
【0006】
連立一次方程式の解を求める反復法の計算を、複数のプロセスを用いて並列化する場合、プロセス間通信にかかる時間がボトルネックになることがある。
【0007】
なお、かかる問題は、反復法の計算を複数のプロセスを用いて並列化する場合に限らず、反復法の計算を様々な処理単位を用いて並列化する場合において生ずるものである。
【0008】
1つの側面において、本発明は、並列に動作する複数の処理単位を用いた反復法の計算時間を短縮することを目的とする。
【課題を解決するための手段】
【0009】
1つの案では、計算プログラムは、以下の処理をコンピュータに実行させる。
【0010】
コンピュータは、1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行する。コンピュータは、1つ又は複数のループ処理よりも後の所定のループ処理において、複数の処理単位を用いて反復法の計算を実行する。
【0011】
コンピュータは、1つ又は複数のループ処理各々の反復法の計算において解が更新された回数に基づき、所定のループ処理の反復法の計算において更新終了を判定する判定処理のタイミングを決定する。判定処理は、複数の処理単位の間における通信の結果に基づいて、更新終了を判定する処理を含む。
【発明の効果】
【0012】
1つの側面によれば、並列に動作する複数の処理単位を用いた反復法の計算時間を短縮することができる。
【図面の簡単な説明】
【0013】
【
図4】並列化されたCG法の第1の疑似コードを示す図である。
【
図5】gSumProdの疑似コードを示す図である。
【
図7】gSumMagの疑似コードを示す図である。
【
図8】並列化されたCG法の第2の疑似コードを示す図である。
【
図9】実施形態の情報処理装置の機能的構成図である。
【
図11】情報処理装置の具体例を示す機能的構成図である。
【
図12】判定処理の回数を調整可能なCG法の疑似コードを示す図である。
【
図14】ループ処理における第1の動作を示す図である。
【
図15】ループ処理における第2の動作を示す図である。
【
図16】ループ処理における第3の動作を示す図である。
【
図22】複数のノードを含む情報処理装置のハードウェア構成図である。
【
図23】流体解析シミュレーションにおける計算時間を示す図である。
【
図24】流体解析シミュレーションにおけるδ
iの計算回数及び解更新回数を示す図である。
【
図25】情報処理装置のハードウェア構成図である。
【発明を実施するための形態】
【0014】
以下、図面を参照しながら、実施形態を詳細に説明する。
【0015】
まず、次式のような連立一次方程式の解法について説明する。
【0016】
Ax=b (1)
【0017】
行列Aは、係数行列を表し、ベクトルbは、定数項を表す。ベクトルxは、連立一次方程式の解を表す。Aとしては、例えば、疎行列が用いられる。
【0018】
Aが対称行列である場合、式(1)は対称連立一次方程式となり、Aが非対称行列である場合、式(1)は非対称連立一次方程式となる。対称連立一次方程式の反復法としては、例えば、CG法又はPCG法が用いられ、非対称連立一次方程式の反復法としては、例えば、BiCG法又はPBiCG法が用いられる。
【0019】
図1は、CG法の疑似コードの例を示している。ベクトルx
iは、反復法において更新される解を表し、ベクトルx
0は、初期解を表す。ベクトルr
iは、反復法において更新される残差を表し、ベクトルr
0は、初期残差を表す。
【0020】
if文101のri=0は、CG法のforループの終了条件を表す。実用上は、riのノルムが適当な閾値εよりも小さくなった場合に、反復法の計算が打ち切られ、最後に計算されたxiが解として出力される。
【0021】
図2は、非特許文献1に記載されたPCG法の疑似コードの例を示している。式201のMは、前処理行列を表し、M
-1は、Mの逆行列を表す。式201は、PCG法において、M
-1とr
iの疎行列ベクトル積を計算する前処理を表す。PCG法によれば、r
iに前処理を適用することで解の収束性が改善される。
【0022】
図3は、PBiCG法の疑似コードの例を示している。式301は、
図2の式201に対応する。式302のM
-Tは、M
-1の転置行列を表す。M
-Tは、Mの転置行列M
Tの逆行列に一致する。式301及び式302は、PBiCG法における前処理を表す。
【0023】
行列Aが対称行列である場合、PBiCG法のアルゴリズムは、PCG法のアルゴリズムに一致する。前処理を適用しない場合、M-1は単位行列となり、PBiCG法のアルゴリズムは、BiCG法のアルゴリズムに一致する。
【0024】
複数のプロセスを用いて反復法の計算を並列化する場合、変数が複数の部分に分割され、各部分を用いた計算が各プロセスに割り当てられる。
【0025】
図4は、並列化されたCG法の第1の疑似コードの例を示している。ベクトルx
(p)は、分割されたベクトルxのうち、プロセスpによって更新されるベクトルを表す。例えば、xの要素数がプロセス数で等分され、各部分の要素が順番に各プロセスpに割り当てられる。ベクトルr
(p)は、分割されたベクトルrのうち、プロセスpによって更新されるベクトルを表す。x
(p)は、連立一次方程式の解の一部の一例であり、r
(p)は、解の一部に対する残差の一例である。
【0026】
式401は、プロセスpに割り当てられたr0
(p)を求める計算式である。式401のgSpMV(A,x0
(p))は、Aとx0の行列ベクトル積を表すベクトルの要素のうち、プロセスpが使用する部分を表す。式403のgSpMV(A,pi
(p))は、Aとpiの行列ベクトル積を表すベクトルの要素のうち、プロセスpが使用する部分を表す。
【0027】
式402のgSumProd(ri
(p),ri
(p))は、ベクトルriとベクトルriの内積を表す。式404のgSumProd(pi
(p),qi
(p))は、ベクトルpiとベクトルqiの内積を表す。
【0028】
図5は、
図4のgSumProdの疑似コードの例を示している。
図5の疑似コードは、分割されたベクトルx
(p)と分割されたベクトルy
(p)を用いて計算された、ベクトルxとベクトルyの内積(x,y)を出力する。
【0029】
式501のallreduce(a)は、MPI(Message Passing Interface)のallreduceに対応し、各プロセスpによって計算されたaの値の総和を表す。allreduce通信は、集団通信の一例である。集団通信は、プロセスのような複数の通信主体の間で行われる、一対多、多対一、又は多対多の通信である。
【0030】
図6は、
図4のgSpMVの疑似コードの例を示している。
図6の疑似コードは、Aとxの行列ベクトル積を表すベクトルの要素のうち、プロセスpが使用する部分であるy
(p)=(Ax)
(p)を出力する。
【0031】
行集合R(p)は、入出力を表す列ベクトルの要素のうち、プロセスpが担当する要素の行番号の集合を表す。行列A(p)は、AのR(p)×R(p)成分を要素とする行列を表す。R(p)×R(p)成分は、Aの要素のうち、R(p)の各番号が示す行とR(p)の各番号が示す列に対応するAの要素を表す。
【0032】
A(p,q)は、AのR(p)×R(q)成分のうち、非ゼロ要素からなるベクトルを表す。nnz(p,q)は、R(p)×R(q)成分に含まれる非ゼロ要素の個数を表す。p(p,q)は、プロセスqが行う(Ax)(q)の計算において、A(q,p)に含まれる非ゼロ要素の列位置に対応するように、x(p)を変換する写像を表す。式601のSpMV(A(p),x(p))は、A(p)とx(p)の行列ベクトル積を表す。
【0033】
一例として、Aが次のような4行4列の疎行列であり、プロセス0及びプロセス1の2個のプロセスを用いてy(p)を計算する場合について説明する。
【0034】
【0035】
a、b、c、d、e、及びfは、非ゼロ要素である。x=(x0,x1,x2,x3)T、R(0)={0,1}、R(1)={2,3}である場合、x(0)=(x0,x1)T、x(1)=(x2,x3)Tとなる。また、R(0)×R(0)={(0,0),(0,1),(1,0),(1,1)}となり、R(1)×R(1)={(2,2),(2,3),(3,2),(3,3)}となる。したがって、A(0)及びA(1)は、次のような2行2列の行列となる。
【0036】
【0037】
この場合、nnz(0,1)=2、nnz(1,0)=1、A(0,1)=(b,d)T、A(1,0)=(e)Tである。また、p(0,1)(x(0))=p(0,1)((x0,x1)T)=(x0)Tであり、p(1,0)(x(1))=p(1,0)((x2,x3)T)=(x2,x2)Tである。
【0038】
プロセス0は、p(0,1)(x(0))=(x0)Tをプロセス1へ送信し、次式により、y(0)を計算する。
【0039】
y(0)=SpMV(A(0),x(0))
=(ax0,cx1)T (5)
【0040】
次に、プロセス0は、z=p(1,0)(x(1))=(x2,x2)Tをプロセス1から受信し、次式により、y(0)を更新する。
【0041】
y(0)=y(0)+(A(0,1))Tz
=(ax0+bx2,cx1+dx2)T (6)
【0042】
一方、プロセス1は、p(1,0)(x(1))=(x2,x2)Tをプロセス0へ送信し、次式により、y(1)を計算する。
【0043】
y(1)=SpMV(A(1),x(1))
=(0,fx3)T (7)
【0044】
次に、プロセス1は、z=p(0,1)(x(0))=(x0)Tをプロセス0から受信し、次式により、y(1)を更新する。
【0045】
y(1)=y(1)+(A(1,0))Tz
=(ex0,fx3)T (8)
【0046】
この場合、Axは、式(6)のy(0)及び式(8)のy(1)を用いて、次式により表される。
【0047】
【0048】
式(9)のAxは、A及びxを分割することなく、Aとxの行列ベクトル積を計算した結果と一致している。
【0049】
図4のif文では、forループの終了条件としてr
i
(p)=0が用いられている。しかし、数値計算ではr
i
(p)=0となることがないため、例えば、以下のような終了条件が設定される。
【0050】
(a)解更新回数に基づく終了条件
i=Imax
【0051】
(b)残差ノルムに基づく終了条件
n(ri)<ε
【0052】
(c)相対残差に基づく終了条件
n(ri)/n(r0)<τ
【0053】
n(ri)は、riのL1ノルムを表し、εは、n(ri)に対する閾値を表す。n(ri)/n(r0)は、n(r0)に対するn(ri)の比率を表し、τは、n(ri)/n(r0)に対する閾値を表す。n(ri)は、ri
(p)を用いて、次式により表される。
【0054】
n(ri)=gSumMag(ri
(p)) (10)
【0055】
図7は、gSumMagの疑似コードの例を示している。
図7の疑似コードは、n(x
(p))の総和をn(x)として出力する。x
(p)をr
i
(p)に置き換えた場合、n(r
i
(p))の総和がn(r
i)として出力される。この場合、allreduce(a)によってプロセス間で送受信されるaは、解の一部に対する残差に関する情報の一例である。
【0056】
gSpMV、gSumProd、及びgSumMagは、OpenFOAM(Open source Field Operation And Manipulation)において使用されている名称である。
【0057】
図8は、並列化されたCG法の第2の疑似コードの例を示している。
図8の疑似コードは、
図4のif文において残差ノルムに基づく終了条件を用いた疑似コードに対応する。式802のδ
iは、式(10)のn(r
i)に対応し、if文803のδ
i<εは、残差ノルムに基づく終了条件に対応する。式802及びif文803は、x
i
(p)の更新の終了条件を判定する処理を表す。
【0058】
式802のδiが計算される時点では、x1
(p)~xi
(p)が計算されているため、解がi回更新されている。if文803の終了条件が満たされて、解の更新が打ち切られた場合、その時点におけるイテレータiは、CG法の反復計算における解更新回数を表す。if文803の判定は解の更新よりも先に行われるため、解更新回数が0回になることもあり得る。
【0059】
式801及び式805のgSpMVを実行する際、プロセス間通信にかかる時間は、SpMVの計算時間によって隠蔽することができる。一方、式802のgSumMagと式804及び式806のgSumProdを実行する際、allreduce通信によって計算がブロックされる。このため、allreduce通信にかかる時間は隠蔽されない。
【0060】
行列ベクトル積、ベクトル演算等の計算時間は、プロセス数Pに応じてスケールするのに対して、allreduce通信にかかる時間は、logPのオーダーである。したがって、多数のプロセスが使用される場合、CG法におけるallreduce通信はボトルネックとなる。
【0061】
例えば、流体解析シミュレーションのように、時間発展系を扱うアプリケーションでは、同じ係数行列に対してCG法を用いたループ処理が繰り返し実行され、各ループ処理における解更新回数が毎回類似する傾向が見られる。また、残差ノルムは急峻には変化せず、徐々に小さくなることが多いため、各ループ処理において、残差ノルムを必ずしも毎回計算する必要はない。
【0062】
この場合、残差ノルムが閾値よりも小さくなって、終了条件が満たされると予測されるループ処理の付近のみで残差ノルムを計算することで、残差ノルムの計算回数を削減することができる。さらに、そのループ処理の付近における残差ノルムの計算頻度自体を少なくすることで、残差ノルムの計算回数がさらに削減される。残差ノルムの計算回数を削減することで、式802におけるallreduce通信の回数が減少するため、各ループ処理の計算が高速化される。
【0063】
図9は、実施形態の情報処理装置(コンピュータ)の機能的構成例を示している。
図9の情報処理装置901は、演算処理部911を含む。
【0064】
図10は、
図9の情報処理装置901が行う第1の計算処理の例を示すフローチャートである。まず、演算処理部911は、1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行する(ステップ1001)。次に、演算処理部911は、1つ又は複数のループ処理よりも後の所定のループ処理において、複数の処理単位を用いて反復法の計算を実行する(ステップ1002)。
【0065】
次に、演算処理部911は、1つ又は複数のループ処理各々の反復法の計算において解が更新された回数に基づき、所定のループ処理の反復法の計算において更新終了を判定する判定処理のタイミングを決定する(ステップ1003)。判定処理は、複数の処理単位の間における通信の結果に基づいて、更新終了を判定する処理を含む。
【0066】
図9の情報処理装置901によれば、並列に動作する複数の処理単位を用いた反復法の計算時間を短縮することができる。
【0067】
図11は、
図9の情報処理装置901の具体例を示している。
図11の情報処理装置1101は、CPU(Central Processing Unit)1111、記憶部1112、及び出力部1113を含む。CPU1111は、
図9の演算処理部911に対応する。
【0068】
情報処理装置1101は、様々なアプリケーションの数値計算において、式(1)の連立一次方程式の解を反復法により求めることができる。アプリケーションは、流体解析シミュレーション、気候シミュレーション、材料科学、生化学等の分野における分子動力学シミュレーション等である。反復法としては、例えば、CG法、PCG法、BiCG法、又はPBiCG法が用いられる。
【0069】
例えば、流体解析シミュレーションは、PISO(Pressure-Implicit with Splitting of Operators)法を用いて流体の定常解析を行うシミュレーションであってもよい。この場合、式(1)のベクトルxは、物理量を表す。物理量は、圧力又は速度であってもよい。xが圧力を表す場合、CG法又はPCG法を用いてもよく、xが速度を表す場合、BiCG法又はPBiCG法を用いてもよい。
【0070】
CPU1111は、複数のコアを含み、コア数以下の個数のプロセスを並列に動作させることができる。各コアは、演算回路であり、プロセスは、処理単位の一例である。CPU1111は、所定時間間隔で、1つ又は複数のプロセスを用いてアプリケーションのループ処理を繰り返す。CPU1111は、各時間ステップのループ処理において、反復法の計算を行うことで解xを求める。出力部1113は、各ループ処理において求められた解xと、そのループ処理における解更新回数とを出力する。
【0071】
記憶部1112は、CPU1111が用いるデータとして、プロセス毎にアプリケーションオブジェクト1121及び反復法オブジェクト1122を記憶する。
【0072】
アプリケーションオブジェクト1121は、x(p)、更新履歴、及びアプリケーションデータを含む。x(p)は、ベクトルxを分割することでプロセスpに割り当てられたベクトルを表す。単一のプロセス0のみが動作する場合は、ベクトルxは分割されず、x(p)=x(0)=xとなる。更新履歴は、実行済みの各ループ処理における解更新回数を表す。解更新回数は、解xi
(p)が更新された回数を表す。更新履歴は、プロセス間で一致している。アプリケーションデータは、アプリケーション特有のパラメータ等を表す。
【0073】
反復法オブジェクト1122は、xi
(p)、ri
(p)、ε、NI、NH、η、及びその他の反復法データを含む。イテレータiは、反復法の計算におけるforループのループ変数を表す。xi
(p)は、i番目のforループにおける更新対象の解を表し、ri
(p)は、i番目のforループにおける更新対象の残差を表す。εは、残差ノルムに対する閾値を表す。
【0074】
NIは、反復法の計算において更新終了を判定する判定処理の周期を表す。判定処理では、xi
(p)の更新を終了するか否かが判定される。NHは、更新履歴に含まれる解更新回数の個数を表す。ηは、判定処理を開始する開始タイミングを決定するための係数を表す。NI及びNHは、1以上の整数であり、ηは、0以上1未満の実数である。NI、NH、及びηは、例えば、ユーザにより指定される。その他の反復法データは、係数行列A、定数項を表すベクトルb、イテレータi等を含む。
【0075】
反復法がBiCG法又はPBiCG法である場合、反復法オブジェクトは、i番目のforループにおける更新対象である転置版の残差をさらに含む。
【0076】
図12は、判定処理の回数を調整可能なCG法の疑似コードの例を示している。
図12の疑似コードは、
図8の式802の前にif文1201を挿入した疑似コードに対応する。
【0077】
if文1201のcheckResidual(i,{sj})は、i番目のforループにおいて判定処理を行うか否かを決定する関数を表す。sjは、j回前(j=1,2,...,NH)のループ処理における解更新回数を表し、{sj}は、s1~sNHを含む更新履歴を表す。checkResidual(i,{sj})は、次式により記述される。
【0078】
checkResidual(i,{sj})=T
(i≧ηmin(sj)かつi%NI=0) (11)
checkResidual(i,{sj})=F (otherwise) (12)
【0079】
min(sj)は、{sj}に含まれるs1~sNHの最小値を表す。最小値は、統計値の一例である。1回前までに終了しているループ処理の実行回数がj回未満の場合、そのsjはmin(sj)の計算対象から除外される。最初のループ処理(i=0)では、min(sj)として0が用いられる。i%NIは、iをNIで除算したときの剰余を表す。
【0080】
Tは、真理値“真”を表し、Fは、真理値“偽”を表す。checkResidual(i,{sj})=Tの場合、i番目のforループにおいて判定処理が行われ、checkResidual(i,{sj})=Fの場合、i番目のforループにおいて判定処理がスキップされる。
【0081】
η=0の場合、ηmin(sj)=0となる。したがって、forループがNI回実行される間に1回の頻度で、checkResidual(i,{sj})=Tとなる。ηが1に近いほど、反復法の開始直後の多数のforループにおいて、判定処理を省略することができる。しかし、予測よりも速くδiがε未満になった場合、解の収束の検出が遅れて、不要なforループの反復が行われる可能性がある。η=0かつNI=1の場合、forループにおいて毎回判定処理が行われる。
【0082】
図13は、NH=3の場合におけるmin(s
j)の変化の例を示している。s
j(j=1~3)が未定義である場合、そのループ処理においてs
jは存在しない。sは、各ループ処理における解更新回数を表し、次のループ処理においてs
1として用いられる。k回目のループ処理において、s=ξ
k-1である。各ループ処理は、所定のループ処理に対応する。
【0083】
1回目のループ処理では、s1~s3が未定義であるため、min(sj)=0、s=ξ0となる。2回目のループ処理では、s2及びs3が未定義であるため、min(sj)=min{ξ0}=ξ0、s=ξ1となる。3回目のループ処理では、s3が未定義であるため、min(sj)=min{ξ0,ξ1}、s=ξ2となる。
【0084】
4回目のループ処理では、min(sj)=min{ξ0,ξ1,ξ2}、s=ξ3となる。5回目のループ処理では、min(sj)=min{ξ1,ξ2,ξ3}、s=ξ4となる。
【0085】
複数のプロセスが動作する場合、基本的に各プロセスは独立して動作するが、gSpMV、gSumMag、gSumProd等の実行時にはプロセス間で通信が行われ、データが交換される。
【0086】
CPU1111は、if文1201を実行することで、更新履歴に基づいて、各ループ処理において判定処理を開始する開始タイミングを決定する。開始タイミングは、各ループ処理において、最初にi≧ηmin(sj)が満たされるforループに対応する。更新履歴に基づいて開始タイミングを決定することで、反復法の開始から判定処理の開始タイミングまでの間のforループにおいて、判定処理を省略することができる。
【0087】
CPU1111は、判定処理の開始タイミング以降において、forループがNI回実行される間に判定処理が1回行われるように、判定処理のタイミングを決定する。これにより、判定処理の開始タイミング以降のforループにおける判定処理の回数を削減することができる。
【0088】
判定処理において、CPU1111は、allreduce通信を含むgSumMag(ri
(p))を実行することでδiを計算し、計算されたδiをεと比較することで、xi
(p)の更新を終了するか否かを決定する。
【0089】
図14は、
図12のループ処理における第1の動作の例を示している。
図14のループ処理では、η=0かつNI=1である。横軸は、イテレータiを表し、縦軸は、δ
iを表す。曲線は、δ
iが毎回計算されたと仮定した場合のδ
iの変化を表す。縦の直線は、δ
iが実際に計算されたタイミングを表し、横軸のmは、0番目~i番目のforループにおいて、δ
iが実際に計算された回数を表す。
【0090】
この場合、0番目~5番目のforループにおいてδiが毎回計算され、5番目のforループにおいてδi<εとなるため、解更新回数は5回となる。更新終了時のδiの計算回数は6回である。
【0091】
図15は、
図12のループ処理における第2の動作の例を示している。
図15のループ処理では、η=0かつNI=2であり、δ
iの変化は、
図14のループ処理と同様である。
【0092】
この場合、0番目、2番目、4番目、及び6番目のforループにおいてδ
iが計算され、6番目のforループにおいてδ
i<εとなるため、解更新回数は6回となる。更新終了時のδ
iの計算回数は4回である。したがって、δ
iの計算回数は、
図14のループ処理よりも2回減少し、解更新回数は、
図14のループ処理よりも1回増加する。
【0093】
図16は、
図12のループ処理における第3の動作の例を示している。
図16のループ処理では、0<η<1かつNI=2であり、δ
iの変化は、
図14のループ処理と同様である。
【0094】
この場合、ηmin(s
j)=1.5であり、2番目、4番目、及び6番目のforループにおいてδ
iが計算される。そして、6番目のforループにおいてδ
i<εとなるため、解更新回数は6回となる。更新終了時のδ
iの計算回数は3回である。したがって、δ
iの計算回数は、
図14のループ処理よりも3回減少し、解更新回数は、
図14のループ処理よりも1回増加する。
【0095】
このように、δiの計算回数の削減と解更新回数の増加は、トレードオフの関係にある。η及びNIを適切な値に調整することで、解の不要な更新を抑えつつ、δiの計算回数を効果的に削減することができる。
【0096】
図17は、複数の時間ステップのループ処理における残差ノルムの計算回数の例を示している。
図17(a)は、1回目のループ処理における動作の例を示している。この場合、0番目~5番目のforループにおいてδ
iが毎回計算され、5番目のforループにおいてδ
i<εとなるため、解更新回数は5回となる。更新終了時のδ
iの計算回数は6回である。
【0097】
図17(b)は、2回目のループ処理における動作の例を示している。この場合、0番目~4番目のforループにおいてδ
iが毎回計算され、4番目のforループにおいてδ
i<εとなるため、解更新回数は4回となる。更新終了時のδ
iの計算回数は5回である。
【0098】
図17(c)は、3回目のループ処理における動作の例を示している。この場合、3番目及び5番目のforループにおいてδ
iが計算され、5番目のforループにおいてδ
i<εとなるため、解更新回数は5回となる。更新終了時のδ
iの計算回数は2回である。したがって、δ
iの計算回数は、解更新回数よりも3回少ない。
【0099】
図12の疑似コードによれば、判定処理のみにおいて残差ノルムの計算が行われるため、残差ノルムの計算は、解及び残差を更新する計算には影響しない。したがって、
図15及び
図16に示したように、判定処理をスキップすることで、解更新回数が増加することはあるが、解の収束性が悪化することはない。判定処理をスキップすることで増加した解の更新時間よりも、削減されたプロセス間通信の通信時間の方が長い場合、連立一次方程式の解を求める処理全体の計算時間が短縮される。
【0100】
図18は、
図11の情報処理装置1101が行う第2の計算処理の例を示すフローチャートである。CPU1111は、アプリケーションオブジェクト1121及び反復法オブジェクト1122を用いて、アプリケーションプログラムを実行することで、
図18の計算処理を行う。計算処理は、流体解析シミュレーション、気候シミュレーション、分子動力学シミュレーション等に対応する。
【0101】
CPU1111は、ステップ1801~ステップ1803の時間ステップループのループ処理を繰り返す。時間ステップループのループ処理において、CPU1111は、アプリケーションオブジェクト1121を用いて、アプリケーションの計算を行う(ステップ1801)。アプリケーションの計算は、例えば、物理量を求める計算のうち、CG法を使用しない計算に対応する。
【0102】
次に、CPU1111は、ステップ1802のCG法ループの処理を繰り返す。CG法ループの処理は、
図12の疑似コードにおけるforループの処理に対応し、CPU1111は、各プロセスpにforループの処理を実行させる。CG法ループの処理において、CPU1111は、反復法オブジェクト1122を用いて、プロセスp毎にx
(p)を更新することで、解xを更新する(ステップ1802)。CG法ループの処理は、残差ノルムが終了条件を満たすまで繰り返される。
【0103】
CG法ループの処理の繰り返しが終了した後、CPU1111は、アプリケーションオブジェクト1121に含まれる更新履歴を更新する(ステップ1803)。そして、出力部1113は、求められた解と解更新回数とを出力する。時間ステップループの処理は、計算処理における最後の時間ステップに到達するまで繰り返される。
【0104】
図19は、
図18のステップ1802における解更新処理の例を示すフローチャートである。
図19の解更新処理は、プロセスp毎に行われる。
【0105】
まず、CPU1111は、checkResidual(i,{sj})がTであるか否かをチェックする(ステップ1901)。checkResidual(i,{sj})がFである場合(ステップ1901,NO)、CPU1111は、xi
(p)及びri
(p)を更新して、xi+1
(p)及びri+1
(p)を計算する(ステップ1905)。そして、CPU1111は、iを1だけインクリメントして、次のforループの処理を行う。
【0106】
一方、checkResidual(i,{sj})がTである場合(ステップ1901,YES)、CPU1111は、δiを計算し(ステップ1902)、計算されたδiをεと比較する(ステップ1903)。
【0107】
δiがε以上である場合(ステップ1903,NO)、CPU1111は、ステップ1905の処理を行う。そして、CPU1111は、iを1だけインクリメントして、次のforループの処理を行う。一方、δiがε未満である場合(ステップ1903,YES)、CPU1111は、その時点におけるイテレータiを解更新回数sに設定して(ステップ1904)、forループの処理を終了する。
【0108】
図20は、
図18のステップ1803における履歴更新処理の例を示すフローチャートである。まず、CPU1111は、j=NI~2について、jの降順に、ステップ2001のs
j更新ループの処理を繰り返す。s
j更新ループの処理において、CPU1111は、更新履歴{s
j}に含まれるs
j-1の値をs
jに上書きする(ステップ2001)。
【0109】
sj更新ループの処理の繰り返しが終了した後、CPU1111は、ステップ1904で設定されたsの値をs1に上書きする(ステップ2002)。
【0110】
一例として、Aが次のような4行4列の疎行列である場合に、ある時間ステップのループ処理で行われる解更新処理の例について説明する。
【0111】
【0112】
b=(1,2,3,4)T、x0=(1,3,5,-3)Tである場合、解析解はx=(0.8,2,3,3.7)Tである。プロセス0及びプロセス1の2個のプロセスを用いて連立方程式の解xを計算する場合、xi
(0)及びxi
(1)として2次元ベクトルが用いられる。
【0113】
ε=10-5、NI=2、NH=2、η=0.5、s1=3、s2=4である場合、ηmin(sj)は、次式のように計算される。
【0114】
ηmin(sj)=0.5min{3,4}=1.5 (14)
【0115】
図21は、この場合の解更新処理の例を示している。checkResidualの全体は、checkResidual(i,{s
j})の値を表し、δ
i<εは、終了条件の判定結果を表す。δ
i及びδ
i<εの「計算しない」は、判定処理がスキップされることを表す。
【0116】
δiは、倍精度浮動小数点数型で計算され、指数表示により小数点以下第3位まで表示されている。xi+1
(0)及びxi+1
(1)は、倍精度浮動小数点数型で計算され、小数点以下第5位まで表示されている。
【0117】
i=0のforループでは、式(11)のi≧ηmin(sj)の真理値がFとなり、i%NI=0の真理値がTとなる。したがって、全体の真理値はFとなるため、判定処理がスキップされる。そして、プロセス0によりx1
(0)が計算され、プロセス1によりx1
(1)が計算される。
【0118】
i=1のforループでは、i≧ηmin(sj)及びi%NI=0の真理値がFとなる。したがって、全体の真理値はFとなるため、判定処理がスキップされる。そして、プロセス0によりx2
(0)が計算され、プロセス1によりx2
(1)が計算される。
【0119】
i=2のforループでは、i≧ηmin(sj)及びi%NI=0の真理値がTとなる。したがって、全体の真理値はTとなるため、判定処理が行われる。この場合、δi<εの判定結果はFであるため、解更新処理が継続される。そして、プロセス0によりx3
(0)が計算され、プロセス1によりx3
(1)が計算される。
【0120】
i=3のforループでは、i≧ηmin(sj)の真理値がTとなり、i%NI=0の真理値がFとなる。したがって、全体の真理値はFとなるため、判定処理がスキップされる。そして、プロセス0によりx4
(0)が計算され、プロセス1によりx4
(1)が計算される。
【0121】
i=4のforループでは、i≧ηmin(sj)及びi%NI=0の真理値がTとなる。したがって、全体の真理値はTとなるため、判定処理が行われる。この場合、δi<εの判定結果はFであるため、解更新処理が継続される。そして、プロセス0によりx5
(0)が計算され、プロセス1によりx5
(1)が計算される。
【0122】
i=5のforループでは、i≧ηmin(sj)の真理値がTとなり、i%NI=0の真理値がFとなる。したがって、全体の真理値はFとなるため、判定処理がスキップされる。そして、プロセス0によりx6
(0)が計算され、プロセス1によりx6
(1)が計算される。
【0123】
i=6のforループでは、i≧ηmin(sj)及びi%NI=0の真理値がTとなる。したがって、全体の真理値はTとなるため、判定処理が行われる。この場合、δi<εの判定結果はTであるため、解更新処理が打ち切られる。したがって、x7
(0)及びx7
(1)は計算されない。そして、出力部1113は、x6
(0)及びx6
(1)を解として出力し、s=6を解更新回数として出力する。
【0124】
図12の疑似コードでは、残差ノルムに基づく終了条件が用いられているが、終了条件は、解更新回数又は相対残差に基づく終了条件であってもよく、複数の終了条件の組み合わせであってもよい。複数の終了条件の組み合わせは、複数の終了条件の論理和であってもよい。
【0125】
例えば、相対残差に基づく終了条件を用いる場合、CPU1111は、CG法ループの開始時にn(r0)=gSumMag(r0
(p))を計算しておき、判定処理において、δi/n(r0)<τが満たされるか否かをチェックする。
【0126】
CG法の代わりにPCG法、BiCG法、又はPBiCG法を用いた場合も、同様にして判定処理の回数を削減することで、連立一次方程式の解を求める処理の計算時間を短縮することができる。
【0127】
図22は、複数のノードを含む情報処理装置のハードウェア構成例を示している。
図22の情報処理装置は、ノード2201-1~ノード2201-U(Uは2以上の整数)を含む。各ノード2201-u(u=1~U)は、CPU2211及びメモリ2212を含む。CPU2211及びメモリ2212は、ハードウェアである。CPU2211は、
図9の演算処理部911に対応する。
【0128】
CPU2211は、
図11のCPU1111と同様に、複数のプロセスを並列に動作させることができる。メモリ2212は、
図11と同様の情報を記憶する。
【0129】
ノード2201-1~ノード2201-Uは、通信ネットワーク2202を介して互いに通信することができる。通信ネットワーク2202は、例えば、Ethernet(登録商標)、InfiniBand、Tofuインターコネクト等の規格によるインターコネクトである。通信ネットワーク2202の接続方式は、メッシュ、トーラス、又はfat treeであってもよい。2つのノード2201-uそれぞれにおいて動作しているプロセス同士の通信は、通信ネットワーク2202を介して行われる。
【0130】
図22の情報処理装置は、
図11の情報処理装置1101と同様に、ノード2201-1~ノード2201-Uにおいて動作している複数のプロセスを用いて、計算処理を行う。
【0131】
図23は、100×100×100構造格子の物理量を計算する流体解析シミュレーションにおける計算時間の例を示している。この例では、OpenFOAM HPC Benchmark suiteのcavityと呼ばれる問題が用いられ、32個のノードそれぞれにおいて40個のプロセスを動作させている。したがって、プロセスの総数は1280個である。εは10
-4である。
【0132】
C1は、η=0かつNI=1の場合のシミュレーション結果を表す。C2は、η=0かつNI=10の場合のシミュレーション結果を表す。C3は、η=0.5かつNI=10かつNH=10の場合のシミュレーション結果を表す。C2及びC3の計算時間は、C1の計算時間よりも短縮されており、C3の計算処理は、C1の計算処理と比較して約1.24倍高速化されている。
【0133】
図24は、
図23の流体解析シミュレーションにおけるδ
iの計算回数及び解更新回数の例を示している。
【0134】
図24(a)は、各時間ステップのループ処理毎のδ
iの計算回数の例を示している。C1~C3各々の箱ひげ図において、箱内の×印は、計算回数の平均値を示し、箱内の横線は、計算回数の中央値を示す。箱の下端は、計算回数の第一四分位数を示し、箱の上端は、計算回数の第三四分位数を示し、ひげの下端は、計算回数の最小値を示し、ひげの上端は、計算回数の最大値を示す。C2及びC3の計算回数は、C1の計算回数よりも大幅に減少している。
【0135】
図24(b)は、各時間ステップのループ処理毎の解更新回数の例を示している。C1~C3各々の箱ひげ図において、箱内の×印は、解更新回数の平均値を示し、箱内の横線は、解更新回数の中央値を示す。箱の下端は、解更新回数の第一四分位数を示し、箱の上端は、解更新回数の第三四分位数を示し、ひげの下端は、解更新回数の最小値を示し、ひげの上端は、解更新回数の最大値を示す。C2及びC3の解更新回数は、C1の解更新回数と同程度である。
【0136】
図9の情報処理装置901、
図11の情報処理装置1101、及び
図22の情報処理装置の構成は一例に過ぎず、情報処理装置の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。例えば、CPUの代わりに、GPU(Graphics Processing Unit)等のアクセラレータを用いて、並列処理を実行することも可能である。この場合、プロセスの代わりに、スレッド等の別の処理単位を用いてもよい。
【0137】
図10及び
図18~
図20のフローチャートは一例に過ぎず、情報処理装置の構成又は条件に応じて、一部の処理を省略又は変更してもよい。
【0138】
図1~
図8及び
図12に示した疑似コードは一例に過ぎず、反復法のアルゴリズムは、別の形式で記述することもできる。
図13に示したmin(s
j)は一例に過ぎず、min(s
j)は、NHに応じて変化する。
図14~
図17に示したループ処理の動作は一例に過ぎず、ループ処理の動作は、η、NH、及びNIに応じて変化する。
【0139】
図21に示した解更新処理は一例に過ぎず、解更新処理は、η、NH、及びNIに応じて変化する。
図24に示したシミュレーション結果は一例に過ぎず、シミュレーション結果は、シミュレーションで用いられる連立方程式に応じて変化する。
【0140】
式(1)~式(14)は一例に過ぎず、情報処理装置は、別の計算式を用いて計算処理を行うこともできる。例えば、式(11)のmin(sj)の代わりに、s1~sNHの平均値、中央値、最頻値、最大値等の別の統計値を用いてもよい。
【0141】
図25は、
図9の情報処理装置901及び
図11の情報処理装置1101のハードウェア構成例を示している。
図25の情報処理装置は、CPU2501、メモリ2502、入力装置2503、出力装置2504、補助記憶装置2505、媒体駆動装置2506、及びネットワーク接続装置2507を含む。これらの構成要素はハードウェアであり、バス2508により互いに接続されている。
【0142】
メモリ2502は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)等の半導体メモリであり、処理に用いられるプログラム及びデータを記憶する。メモリ2502は、
図11の記憶部1112として動作してもよい。
【0143】
CPU2501は、例えば、メモリ2502を利用してプログラムを実行することにより、
図9の演算処理部911として動作する。CPU2501は、
図11のCPU1111としても動作する。CPU2501は、プロセッサと呼ばれることもある。
【0144】
入力装置2503は、例えば、キーボード、ポインティングデバイス等であり、ユーザ又はオペレータからの指示又は情報の入力に用いられる。出力装置2504は、例えば、表示装置、プリンタ等であり、ユーザ又はオペレータへの問い合わせ又は指示、及び処理結果の出力に用いられる。処理結果は、時間ステップ毎の解を含む計算結果であってもよい。出力装置2504は、
図11の出力部1113として動作してもよい。
【0145】
補助記憶装置2505は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置2505は、ハードディスクドライブ又はSSD(Solid State Drive)であってもよい。情報処理装置は、補助記憶装置2505にプログラム及びデータを格納しておき、それらをメモリ2502にロードして使用することができる。補助記憶装置2505は、
図11の記憶部1112として動作してもよい。
【0146】
媒体駆動装置2506は、可搬型記録媒体2509を駆動し、その記録内容にアクセスする。可搬型記録媒体2509は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体2509は、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリ等であってもよい。ユーザ又はオペレータは、可搬型記録媒体2509にプログラム及びデータを格納しておき、それらをメモリ2502にロードして使用することができる。
【0147】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ2502、補助記憶装置2505、又は可搬型記録媒体2509のような、物理的な(非一時的な)記録媒体である。
【0148】
ネットワーク接続装置2507は、LAN(Local Area Network)、WAN(Wide Area Network)等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェース回路である。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置2507を介して受信し、それらをメモリ2502にロードして使用することができる。ネットワーク接続装置2507は、
図11の出力部1113として動作してもよい。
【0149】
なお、情報処理装置が
図25のすべての構成要素を含む必要はなく、情報処理装置の用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、ユーザ又はオペレータとのインタフェースが不要である場合は、入力装置2503及び出力装置2504を省略してもよい。可搬型記録媒体2509又は通信ネットワークを使用しない場合は、媒体駆動装置2506又はネットワーク接続装置2507を省略してもよい。
【0150】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【0151】
図1乃至
図25を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
(付記1)
コンピュータのための計算プログラムであって、
前記計算プログラムは、
1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行し、
前記1つ又は複数のループ処理よりも後の所定のループ処理において、前記複数の処理単位を用いて前記反復法の計算を実行し、
前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数に基づき、前記所定のループ処理の前記反復法の計算において更新終了を判定する判定処理のタイミングを決定する、
処理を前記コンピュータに実行させ、
前記判定処理は、前記複数の処理単位の間における通信の結果に基づいて、前記更新終了を判定する処理を含むことを特徴とする計算プログラム。
(付記2)
前記判定処理のタイミングを決定する処理は、前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数の統計値に基づき、前記所定のループ処理の前記反復法の計算において前記判定処理を開始する開始タイミングを決定する処理を含むことを特徴とする付記1記載の計算プログラム。
(付記3)
前記判定処理のタイミングを決定する処理は、前記所定のループ処理の前記反復法の計算において前記解の更新が複数回行われる間に、前記判定処理が1回行われるように、前記判定処理のタイミングを決定する処理を含むことを特徴とする付記1又は2記載の計算プログラム。
(付記4)
前記反復法の計算は、連立一次方程式の解を求める計算であり、
前記複数の処理単位各々には、前記連立一次方程式の解の一部を計算する処理が割り当てられ、
前記通信の結果に基づいて前記更新終了を判定する処理は、
前記複数の処理単位の間で、前記連立一次方程式の解の一部に対する残差に関する情報を送受信する処理と、
前記連立一次方程式の解の一部に対する残差に関する情報を用いて、前記連立一次方程式の解に対する残差を求める処理と、
前記連立一次方程式の解に対する残差に基づいて、前記解の更新を終了するか否かを判定する処理と、
を含むことを特徴とする付記1又は2記載の計算プログラム。
(付記5)
1つ又は複数のループ処理各々において、並列に動作する複数の処理単位を用いて解の更新を反復する反復法の計算を実行し、
前記1つ又は複数のループ処理よりも後の所定のループ処理において、前記複数の処理単位を用いて前記反復法の計算を実行し、
前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数に基づき、前記所定のループ処理の前記反復法の計算において更新終了を判定する判定処理のタイミングを決定する、
処理をコンピュータが実行し、
前記判定処理は、前記複数の処理単位の間における通信の結果に基づいて、前記更新終了を判定する処理を含むことを特徴とする計算方法。
(付記6)
前記判定処理のタイミングを決定する処理は、前記1つ又は複数のループ処理各々の前記反復法の計算において前記解が更新された回数の統計値に基づき、前記所定のループ処理の前記反復法の計算において前記判定処理を開始する開始タイミングを決定する処理を含むことを特徴とする付記5記載の計算方法。
(付記7)
前記判定処理のタイミングを決定する処理は、前記所定のループ処理の前記反復法の計算において前記解の更新が複数回行われる間に、前記判定処理が1回行われるように、前記判定処理のタイミングを決定する処理を含むことを特徴とする付記5又は6記載の計算方法。
(付記8)
前記反復法の計算は、連立一次方程式の解を求める計算であり、
前記複数の処理単位各々には、前記連立一次方程式の解の一部を計算する処理が割り当てられ、
前記通信の結果に基づいて前記更新終了を判定する処理は、
前記複数の処理単位の間で、前記連立一次方程式の解の一部に対する残差に関する情報を送受信する処理と、
前記連立一次方程式の解の一部に対する残差に関する情報を用いて、前記連立一次方程式の解に対する残差を求める処理と、
前記連立一次方程式の解に対する残差に基づいて、前記解の更新を終了するか否かを判定する処理と、
を含むことを特徴とする付記5又は6記載の計算方法。
【符号の説明】
【0152】
101、803、1201 if文
201、301、302、401~404、501、601、801、802、804~806 式
901、1101 情報処理装置
911 演算処理部
1101 情報処理装置
1111、2211、2501 CPU
1112 記憶部
1113 出力部
1121 アプリケーションオブジェクト
1122 反復法オブジェクト
2201-1~2201-U ノード
2202 通信ネットワーク
2212、2502 メモリ
2503 入力装置
2504 出力装置
2505 補助記憶装置
2506 媒体駆動装置
2507 ネットワーク接続装置
2508 バス
2509 可搬型記録媒体