説明

連立一次方程式の並列求解方法およびノード順序付け方法

【課題】大規模系統の回路網計算である連立一次方程式の求解を実時間性能で実行できる連立一次方程式の並列計算用のノード順序付け方法および連立一次方程式の並列求解方法を得ること。
【解決手段】放射状系統部分については、最初に順序付けするノードは接続されているブランチ数が最小のノードの中から任意に選択し、以降はノードに接続されているブランチ数が少ないノードから順に選択すると共に、ノード順序付け候補のノードとその相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードの場合に優先してノード順序付けを行う。ループ状系統部分については、ノードの縮約時に発生する新規非零要素発生数のシミュレーションを並列計算し、新規非零要素発生数の少ないノードから選択すると共に、ノード順序付け候補のノードとその相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードの場合に優先してノード順序付けを行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電力系統の計算に現れる連立一次方程式の並列計算に関し、特に、並列計算を高速に処理できるノードの順序付け方法と、前進消去・後退代入処理の並列計算に関する。
【背景技術】
【0002】
従来、連立一次方程式の解法として、三角分解による直接解法が知られており、この手法を用いた場合に、連立一次方程式の求解は、(1)ノードの順序付け、(2)係数行列の三角分解(LDU分解)、(3)前進/後退代入計算による解の算出、の3つの処理を行うことになる。また、連立一次方程式の高速な求解のために並列計算が利用されている。並列計算では、複数のCPUに処理を分散して計算を行い、また、CPU間のデータの授受は通信処理を経て行っている。
【0003】
従来の連立一次方程式の並列計算は、前進/後退代入処理のツリー作成に基づいており、その際、ノードの順序付け方法が重要になる。従来の方法では、Tinney2法に基づき、ノードの消去により発生するfill−in(非零要素)の数が少ないものから選択し、あるステージ(並列処理での各ステップをステージという)で接続ブランチ数が2本以下のノードが消去される場合には、当該ステージでは接続ブランチ数が3本以上のノードは消去せず、かつ、あるノードから2ブランチまでの範囲に、同じステージで消去されるノードがある場合、当該ノードは消去しないとしている(非特許文献1を参照)。
【0004】
【非特許文献1】永田真幸、内田直之著 「過度安定度計算高速化のための系統計算の並列処理アルゴリズムの開発」 電気学会論文誌B、120巻2号、平成12年
【非特許文献2】田岡久雄、阿部茂著「パイプライン処理に適した連立一次方程式の高速求解法とその電力系統解析への応用」電気学会論文誌B、105巻5号、昭和60年
【発明の開示】
【発明が解決しようとする課題】
【0005】
従来の連立一次方程式の並列計算のためのノード順序付け方法は、ノード消去により発生するfill−inの数が少ないものから選択し、あるステージで接続ブランチ数が2本以下のノードを消去する場合には、当該ステージでは接続ブランチ数が3本以上のノードは消去せず、かつ、あるノードから2ブランチまでの範囲に、同じステージで消去されるノードがある場合、当該ノードは消去しないとしており、また、ノード順序付けの結果として得られた処理を各CPUに割当てるために、通信回数の削減とCPU間での計算処理の均等化のバランスをとるようにしている。
【0006】
従来の方法は、上記の通りノードの順序付けにTinney2法を適用しており、放射状系統に対しては最適な順序付けになるが、ループ状系統に対しては最適な順序付けにはならず、fill−inが多くなり処理性能が悪化すること、また、並列計算を各CPUへ割当てるための処理に時間が掛り、並列処理のオーバヘッドが大きくなること、また、並列処理の効果をCPU間通信量と各CPUの処理量のバランスを考慮して決定するため、CPU資源の無駄が発生する等の問題点があった。このような問題点と、さらに、オフラインで実施される系統解析業務以外の訓練シミュレータ、オンラインの給電自動化システム等への適用にはリアルタイム性能が要求されることから、従来の方法はこの分野には適用が困難であるという問題点があった。
【0007】
本発明は、上記に鑑みてなされたものであって、大規模系統の回路網計算である連立一次方程式の求解を実時間性能で実行できる連立一次方程式の並列計算用のノード順序付け方法および連立一次方程式の並列求解方法を得ることを目的とする。
【課題を解決するための手段】
【0008】
上述した課題を解決し、目的を達成するために、本発明にかかるノード順序付け方法は、複数個のCPUと、前記各CPUが共通にアクセス可能な共有メモリと、を有する対称型マルチCPU構成の並列計算装置を用い、係数行列の三角分解、前進消去処理、および後退代入処理に基づいて電力系統の解析における連立一次方程式の解を並列計算する際に使用され、前記係数行列の構造ならびに前記前進消去処理および前記後退代入処理の手順を、ノードおよびノード間を接続するブランチからなるツリーで表現するときのノード順序付け方法であって、前記ツリーにおけるループを含まない系統部分である放射状系統部分に属するノードについてのノード順序付けを行う第1のステップと、前記ツリーにおける放射状系統部分以外の系統部分であるループ状系統部分に属するノードについてのノード順序付けを行う第2のステップと、を含み、前記第1のステップにおいては、最初に順序付けするノードはそのノードに接続されているブランチ数が最小のノードの中から任意に選択し、以降はノード順序付け候補のノードのうち各ノードに接続されているブランチ数が少ないノードから順に選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行い、前記第2のステップにおいては、前記複数個のCPUを用いて前記前進消去処理におけるノードの縮約時に発生する新規非零要素発生数のシミュレーションを並列処理して実施し、前記シミュレーションにより得られた前記新規非零要素発生数の少ないノードから選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行うことを特徴とする。
【発明の効果】
【0009】
この発明にかかるノード順序付け方法によれば、前進消去・後退代入処理における並列処理の実行効率を向上させて、処理性能を高速化できるという効果があり、大規模系統の回路網方程式(連立一次方程式)を実時間性能で実行することが可能になるという効果がある。
【発明を実施するための最良の形態】
【0010】
以下に、本発明にかかる連立一次方程式の並列求解方法およびノード順序付け方法の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【0011】
実施の形態1.
図1は、本実施の形態が適用される訓練シミュレータの構成を示す構成図である。図1では、まず、訓練を実施するための訓練の問題となる系統構成状態、発電機・負荷条件、および事故発生条件等からなる訓練シナリオを、トレーナが訓練管理サーバ群1、トレーナ卓4を使用して作成し、登録する。次に、訓練実施時には、トレーナがトレーナ卓4から登録した訓練シナリオを選択して、実時間で実行するが、それに伴い、系統摸擬サーバ群2で系統シミュレーションが実行されて、その計算結果がトレーナ卓4、トレーニ卓5、および大画面系統盤6に表示される。トレーニ(被訓練者)は自動化摸擬サーバ群3、トレーニ卓5、大画面系統盤6を使用して、事故発生状況を確認、把握して、事故復旧操作のための復旧指令、復旧操作等を行い、停電している負荷の復旧等を行う。一方、訓練実施中の系統シミュレーションは、系統摸擬サーバ群2で実行されるが、本実施の形態を適用した系統の静的、動的特性をシミュレーションするソフトウェアは、この系統摸擬サーバ群2に実装され、動作する。訓練管理サーバ群1、系統摸擬サーバ群2、自動化摸擬サーバ群3間の情報の送受信、また、トレーナ卓4、トレーニ卓5、大画面系統盤6へのデータ送信は、システムLAN7を介して行う。
【0012】
図2は、本実施の形態にかかる連立一次方程式の並列求解に利用される計算機構成の一例を示す図である。図2に示すように、本実施の形態における計算機は、例えば、対称型マルチCPU構成の計算機であり、複数のCPUであるCPU1(8)、CPU2(9)、CPU3(10)、・・・、CPUn(11)と、各CPUが共通にアクセス可能な共有メモリ12と、を備えて構成される。ここで、nは2以上の任意の整数である。なお、各CPUは、キャッシュメモリ、ローカルメモリ、および外部記憶装置を実装しており、システムLAN7と接続している。
【0013】
図3は、系統摸擬サーバ群2に実装し、系統シミュレーションを行う動態安定度計算の処理例を示すフロー図である。動態安定度計算は、積分刻み毎(通常10msec)に回路網方程式の求解と発電機の微分方程式の求解を交互に行い、電力系統の母線電圧、位相角、周波数、有効電力、無効電力、および発電機の内部位相角等を計算する。
【0014】
図3においては、まず、初期処理として、計算時刻の初期化(ステップS13)とY行列の作成、三角分解(ステップS14)の処理を順次行う。ここで、Y行列は回路網方程式の係数行列である。次に、回路網方程式の求解を行うが、まず、系統構成変化の有無を判定し(ステップS15)、変化がない場合にはステップS17に分岐する。変化がある場合は、Y行列の修正、三角分解(ステップS16)を行い、続いて、回路網方程式の電流項である発電機の等価電流源の計算(ステップS17)と非線形負荷の等価電流源の計算(ステップS18)とを行い、ステップS16、S17、S18の結果を用いて回路網方程式の求解(ステップS19)を行い、母線電圧を得る。そして、計算結果である回路網の母線電圧(V)収束の判定(ステップS20)を行い、未収束の場合は、ステップS18に分岐し、計算結果の母線電圧を使用して非線形負荷の等価電流源の計算(ステップ18)を行い、回路網方程式の求解(ステップS19)を繰返す。回路網方程式の求解が収束すれば、次に、発電機の微分方程式の求解を行う。
【0015】
まず、発電機の動揺方程式の求解(ステップS21)を行い、発電機内部位相角を算出し、次に発電機のAVR(自動電圧調整装置)、ガバナ等の制御系と発電機の電機子回路等について、発電機微分方程式の求解(ステップS22)を行い、発電機内部電圧等を算出し、その発電機の内部電圧(V)収束(ステップS23)の判定を行う。未収束の場合は、ステップS17に分岐し、回路網方程式の求解と発電機微分方程式の求解を繰返す。回路網の電圧と発電機の内部電圧が収束した場合は、動態安定度計算の計算時刻更新(ステップS24)を行い、さらに、計算終了(ステップS25)の判定を行い、計算終了時間に至っていない場合は、ステップS15に分岐し、回路網方程式の求解と発電機微分方程式の求解を繰返す。計算終了時間に至っている場合は、処理を終了する。本実施の形態の連立一次方程式の並列計算方法は、回路網方程式の求解(ステップS19)を高速に処理するために適用されるものである。
【0016】
次に、本実施の形態と従来の技術との相違を明確にするために、非特許文献1に記載の従来の系統計算の並列処理アルゴリズムの説明を行う。
【0017】
従来の方法においても、計算機として、並列計算機(マルチCPU)を想定しており、CPU間のデータ授受は通信処理により行うことを想定している。また、連立一次方程式の解法として、三角分解による直接解法を用いている。本手法を用いた場合、
y=A・x ・・・(1)
という連立一次方程式の求解を以下の3つの処理で行うことになる。
(1)ノードの順序付け
(2)係数行列Aの三角分解(LDU分解)
(3)前進/後退代入計算によるxの算出
【0018】
安定度計算は、系統計算(回路網計算)と発電機微分方程式求解から構成され、系統計算が全体の約4割を占め、その内、前進/後退代入計算が約6割を占め、かつ、多数回の計算が行われる。また、三角分解と前進/後退代入の処理は、ノードの順序付けが決まれば自動的に決定されるので、ノードの順序付けをどのように行うかが逐次処理での直接法高速化の鍵となる。連立一次方程式の直接解法における前進代入処理は、
xj=xj+xi・Dij ・・・(2)
という計算の繰返し処理であり、(2)式は、ノードiとノードjとを結ぶブランチDijを消去して、ノードjの値を変更するという処理である((2)式のDijは、三角分解(LDU分解)における対角要素である。)。あるノードiについてブランチDijを全てのjについて消去すれば、ノードiの値xiは以後の処理には必要でなくなる。これはノードiの消去に対応する。後退代入計算も同様であり、例えば、図21−1の単純なネットワークの場合には、(2)式の処理を前進/後退代入それぞれについて、6回繰返すことになる。なお、図中の点線のブランチは三角分解の結果生じるfill−in(三角分解により新たに発生する非零要素)に対応する。
【0019】
前進/後退代入計算の処理は、図21−2のようにツリー構造の処理過程として表すことができる。図21−2の横向きの矢印は前進代入でのノードの消去を表している。また、図21−2での矢印の向き(上から下)は前進代入での処理の流れであり、後退代入の場合はツリーの根から葉の方へ(下から上へ)、ツリーをたどる処理となる。
【0020】
図中、四角で囲っている箇所は、ノードが複数データを持つことを意味している。例えば、ノード1を消去した場合、ノード3とノード5の両方の値が変わることになるが、ノード1から見てノード番号が近い方のノード3に渡す。そのためノード3は自分自身のデータとノード5の値を更新するためのデータを持つことになる。この表現法により、ノード間をどのようなデータが移動していくかを容易に把握できる。
【0021】
ここで注意すべきは、ノード1の消去とノード2の消去の処理は順番を入れ替えても、あるいは同時に並列に処理しても計算結果に影響を与えないことである。なぜならば、これらの計算は互いに無関係に行うことができる(依存関係がない)からである。つまり、ツリーにおいて並んでいる横向きの矢印(ノードの消去)同士は並列に実行できることになる。したがって、ノードの消去を一つの処理単位として考えると、図21−2の例の前進代入計算は、逐次処理では4ステップの処理であるのに対し、並列処理では3ステップの処理で済むことになる。以下、並列処理での各ステップ(複数のノード同時消去)をステージと呼ぶ。
【0022】
図21−2のようなツリーを用いた前進/後退代入処理の表現は、これまでも提案されているが、図21−2のツリー表現は、これまでのものよりも前進代入計算処理で並列に実行可能な処理の抽出を容易なものとするために考案されたものであり、以下の特徴をもっている。
(1)ツリーの各ステージの処理は、前進代入においては必ず左から右に(後退代入では右から左に)ツリーをたどる向きとなり、逆向きの処理は発生しない。
(2)同一ステージ内のノードの処理(横向きの矢印)は全て並列に行うことができ
る。
(3)並列処理の場合、例えば前進代入で、ノードの消去処理時に消去されるノードと値の変わるノードが異なるCPUに割当てられている場合には、通信処理が発生する。これはツリーでCPU間をまたがる横向きの矢印となるため、並列処理時に必要となる通信回数が容易に把握できる。
(4)ノード間でどのようなデータが渡されるかがツリー上に明示されている。このため、並列処理時に通信で授受されるデータが容易に把握できる。
【0023】
非特許文献1では、Tinney2法をベースにして並列処理向けの新しいノードの順序付け手法を考案している。前進/後退代入計算の並列処理を効率良く行うには、並列に実行できる計算ができるだけ多くなるように順序付けをすることが必要となる。そのためには、ステージ数がなるべく小さくなるようにノードの順序付けを行えば良い。そこでノードの順序付けを、各ステージでのノードの消去処理が通信処理の妨げにならない範囲でできるだけ多くなるように、かつLDU分解でのfill−inの発生ができるだけ少なくなるように行うようにしている。
【0024】
具体的には、各ステージで消去されるノードに関して、以下の2つの選択基準を設けている。
【0025】
(1)ノードの消去により発生するfill−inが少ないものから選択していく。ただし、あるステージで接続ブランチが2本以下のノードが消去される場合には、接続ブランチ数が3本以上のノードはこのステージでは消去せず、次のステージ以降で消去する。
(2)あるノードから2ブランチまでの範囲に、同じステージで消去されるノードがある場合、当該ノードは消去しない。
【0026】
ノードの消去によって発生するfill−inの数は、そのノードに接続しているブランチ数によって決まるので、接続するブランチ数が少ないノードから選択することで、(1)の条件を満たすことができる。また、接続ブランチ数の多いノードが早い段階で消去されると、fill−inの数の増大を招くので、接続ブランチ数が2本以下のノードが消去されるステージでは、接続ブランチ数が3本以上のノードは消去しない。
【0027】
(2)の条件に関しては以下の理由による。あるノードが消去されるとそのノードに隣接するノードの値が書き換えられる。消去されたノードから2ブランチの範囲までに、同じステージで消去されるノードがあると、再度の値の書き換えが行われる可能性がある。2度の書き換えの両方が通信処理を伴う場合、2つの通信処理の前後関係を判断するのは不可能である。2つの通信処理のスケジューリング上の前後関係が実際の前後関係と異なる場合には、通信時間を余計に長くしてしまうことになり、また、使用計算機のCPU間の通信方式が共通のバスを用いる場合には、バスの混雑が発生し、通信処理に大きなペナルティが発生する可能性がある。このような通信処理の非効率化を避けるために、(2)の条件を設けている。
【0028】
以上に述べた、ノードの順序付けのアルゴリズムを図22に示す(非特許文献1を参照)。ここでは、接続ブランチ数が2以下のノードがない場合にのみ、接続ブランチ数が3以上のノードが選択できるようにしている。
【0029】
以上、ノードの順序付けについて述べたが、これは前進/後退代入の計算過程から、「並列処理が行える処理を抽出する処理」であり、順序付けの結果として得られた処理を各CPUに割当てていく必要がある。系統解析計算の多くが基本的にノード単位の処理であるため、非特許文献1では、ノード単位にCPUに割当てることとしている。
【0030】
効率の良い並列処理を実現するためには、以下の2点を考慮する必要がある。
・通信回数の低減
・CPU間での計算処理の均等化
【0031】
この2つの目的はトレードオフの関係にある。そこで、一つのパラメータ(以下、グループ化係数と呼ぶ)を用いて、ノードにCPUを割当てる際にノードのグループの大きさを調整するようにし、両者のバランスが取れるようにしている。
【0032】
通信の処理は計算の処理に比べて時間を要するため、通信回数をなるべく少なくすることが並列処理による高速化の観点から不可欠となる。処理ツリー上では通信処理はCPU間にまたがる横向きの矢印であるので、横向きの矢印の少ない、番号の大きなステージで通信を行うようにする。
【0033】
各CPUに処理を割当てるアルゴリズムは以下のようになる。
(1)前進/後退代入の処理ツリーを番号の大きなステージで切る。ただし、切り離された枝葉の部分のノード数が、(全ノード数)/(グループ化係数)を上回らないようにする。切り離された枝葉の部分の各々を一つのグループとする。
(2)(1)の結果得られるグループの境界線から、(CPU数−1)本の境界線を選択して、CPUへの割り当ての境界線とする。その際、
Σ|ni−nTotal/nCPU| ・・・(3)
を最小化する境界線の組合せを選択する。ただし、niはCPUiに割当てられるノードの数、nTotalは全ノード数、nCPUはCPU数を表す。
【0034】
上述のような非特許文献1に記載の方法は、ノードの順序付けにTinney2法を適用しており、放射状系統に対しては最適になるが、ループ状系統に対しては最適にはならず、fill−inが多くなり処理性能が悪化すること、また、並列計算を各CPUへ割当てるための処理に時間が掛り、並列処理のオーバヘッドが大きくなること、また、並列処理の効果をCPU間通信量と各CPUの処理量のバランスを考慮して決定するため、CPU資源の無駄が発生する等の問題点があった。ここで、放射状系統とは、内部にループ構造を含まない系統であり、ループ状系統とはループ構造を含む系統である。なお、実際の系統では、発電所等が系統の末端にあり、そのため、ツリーの中に放射状系統部分は必ず存在している。このような問題点と、さらに、オフラインで実施される系統解析業務以外の訓練シミュレータ、オンラインの給電自動化システム等への適用にはリアルタイム性能が要求されることから、非特許文献1に記載の方法はこの分野には適用が困難であるという問題点があった。
【0035】
そこで、本実施の形態では、リアルタイム性能を実現させるために、非特許文献2に記載された連立一次方程式の求解方法に基づき、前進消去・後退代入処理の並列処理化を向上させるノード順序付け方法を以下に開示する。
【0036】
図11−1および図11−2は、本実施形態のノード順序付け方法を示すフロー図であり、図11−2は、図11−1に続く処理を示す。なお、図11−1と図11−2とは、‘1’で示す箇所で接続される。図11−1において、まず初期化処理(1)(ステップS40)により、フラグ類の初期設定を行い、次に各ノードに接続する相手端ノード番号、相手端ノード数等のノードテーブル作成(ステップS41)を行い、相手端ノード数の少ない順番にノードテーブル並替え(ステップS42)を行う。相手端ノード数が同一の場合は、先に処理したノード順に並替えを行う。なお、各ノードに接続する相手端ノードとは、各ノードに(1本の)ブランチを介して接続されている隣接ノードをいう。例えば、図13−3においては、ノード1の相手端ノードは、ノード5である。
【0037】
次に、まず、放射状系統部分のノード順序付けを行う。放射状系統部分においては、例えば図13−3の放射状系統におけるノード1、ノード2、ノード3、ノード4、およびノード6のように、あるノードに接続するブランチ数が1つという部分を含み、従って、このようなノードに対しては、相手端ノード数も1つということになる。また、例えばノード1を任意に選択して順序付けた場合、ノード1が消去されノード1とノード5との間のブランチも消去されると、ノード5の接続ブランチ数が1つとなって、同様の構造が生じる。そして、順次、放射状系統部分のノード順序付けを行えば、最適なノード順序付けを行えることが分かっている(Tinney2法の考え方)。以下、この特徴に基づき、ノード順序付けを行う。
【0038】
前進消去、後退代入処理を並列処理する場合、通常は各CPUが1ノードの処理を行うため、並列処理に利用されるCPU数(以下、並列CPU数という。)の要素を一度に扱うことになり、それらの要素処理単位でノード順序付けを行う必要がある。このため、まずステップS43で同時に順序付けを行うノード数が並列CPU数以下か否かの判定を行い、Noの場合は初期化処理(2)(ステップS44)により、要素数カウントの初期化を行う。Yesの場合は、何も処理せず、ステップS45に分岐する。
【0039】
ステップS45では、順序付け対象のノードiが放射状系統か否かの判定を行い、Yesであれば、ステップS46で、ノードiは並列処理可能か否かの判定を行う。なお、並列処理可能か否かの判定については後述する。ステップS46での判定の結果がYesの場合、ノードiを順序付け(ステップS47)、各種配列のカウントアップ(1)(ステップS48)を行い、ステップS43に分岐する。ステップS46での判定の結果がNoの場合は、この処理では当該ノードiを順序付け除外対象(ステップS49)とし、各種配列のカウントアップ(2)(ステップS50)を行い、ステップS43に分岐する。
【0040】
ステップS45でNoの場合は、除外対象ノードとした放射状系統部分が残っているかどうかを確認するために、順序付けが未実施のノードについて、相手端ノード数が少ない順番にノードテーブル並替え(ステップS51)を行い、初期化処理(3)(ステップS52)を行う。次に、ノードテーブル並替え後のノードについて、ノードiが放射状系統部分か否かの判定(ステップS53)を行い、Yesの場合は、さらに放射状系統部分が全て除外対象であるか否かの判定(ステップS54)を行い、ステップS54での判定結果がNoの場合、ステップS46に分岐する。ステップS54での判定結果がYesの場合は、全除外対象ノードを順番に順序付け(ステップS55)を行い、図11−2の‘1’に示すステップに進む。ステップS53でNoの場合は、図11−2の‘1’に示すステップに進む。
【0041】
上記までの処理で、放射状系統部分のノード順序付けが終了したので、以降はループ系統部分のノード順序付けを行う。ループ系統部分については、最適なノード順序付け方法が無く、従って、各ノードの新規非零要素発生のシミュレーションを行い、その新規非零要素発生数の一番少ないノードについて、順序付けを行い、それを繰返して実施して行くことが準最適化になることになっている(Tinney3法の考え方)。ここでは、その考え方に基づき、以下の手順でノード順序付けを行う。
【0042】
図11−2に示すように、まず、ステップS56で、各種フラグ等の初期化処理(4)を行い、次に残りノード全てについて、新規非零要素発生のシミュレーション(ステップS57)を行い、新規非零要素発生数の少ない順番にノード並替え(ステップS58)を行う。次に、順序付けノード数が並列CPU数以上か否かの判定(ステップS59)を行い、Yesの場合は、順序付け配列数等の初期化処理(2)(ステップS60)を行い、ステップS61に分岐する。Noの場合は、何も処理せずにステップS61に分岐する。ステップS61では、ノードiが並列処理可能か否かの判定を行い、Yesの場合、ノードiを順序付け(ステップS62)をし、各種配列のカウントアップ(3)(ステップS63)を行い、次に、ステップS64で、全ノードの順序付けが終了したか否かの判定を行い、Noの場合は、各種配列のカウントアップ(4)(ステップS65)を行い、ステップS57に分岐する。ステップS64での判定結果がYesの場合は、処理を終了する。ステップS61でNoの場合は、この処理ではノードiを除外対象(ステップS66)とし、各種配列のカウントアップ(5)(ステップS67)を行い、続いて、残りのノードが全て除外対象か否かの判定(ステップS68)を行い、Noの場合は、各種配列のカウントアップ(6)(ステップS69)を行い、ステップS59に分岐する。ステップS68でYesの場合は、残りのノードについて、新規非零要素発生のシミュレーション(ステップS70)を行い、新規非零要素発生数の少ない順番にノード並替え(ステップS71)を行い、そして、それが最小のノードiの順序付け(ステップS72)を行い、全て終了すれば処理を終了する。
【0043】
図12は、図11−2における新規非零要素発生のシミュレーションの並列処理を示すフロー図である。ループ系統部分においては、ノード順序付けの最適化のために、残りの全ノードについて、そのノードを順序付けした場合の新規非零要素発生数がいくつになるかのシミュレーションを行い、その新規非零要素発生数が最小のノードを次の順序付けノード候補とし、当該ノードを並列処理が可能か否かの判定を行い、並列処理が可能な場合は、そのノードの順序付けを行い、以降、上記の処理を最後まで繰返し、実施している。従って、ループ系統部分のノード順序付けは、処理時間が掛かることになる。そのため、新規非零要素発生のシミュレーションについては、並列処理を行い、処理の高速化を実現する。
【0044】
図12において、ループ系統部分の全ノードを、並列処理を行う複数のCPUに平均的に按分して、処理を分担することを考える。まず、各CPUで処理する場合の平均処理量の計算(ステップS73)を行い、また、平均処理量の計算における余りの計算(ステップS74)を行う。余りの処理量については、CPU1で担当させる(すなわち、CPU1は、平均処理量+余り分の処理を担当する。)。次に、処理するCPUがCPU1か否かの判定(ステップS75)を行い、Yesの場合は、処理対象(k1、k2)の計算(ステップS76)を行い、以降の処理におけるフラグ類の初期化処理(ステップS77)を行い、ステップS79に分岐する。CPU1以外の場合は、処理対象(k1、k2)の計算(ステップS78)を行い、ステップS79に分岐する。ステップS79では、各CPUが処理を実行できる状態か否かを、自身に対するCPU処理フラグである自CPU処理フラグがゼロか否かで判定し、Noの場合は継続してチェックを行う。ステップS79でYesの場合は、各CPUが担当する処理量について、新規非零要素発生のシミュレーション(ステップS80)を行い、その結果を共有メモリに保存する。その後、各CPUは処理が終了したことをCPU1に示すために、自CPU処理フラグに、自CPU番号を書き込む(ステップS81)。
【0045】
次に、再び、CPU1か否かの判定(ステップS82)を行い、CPU1の場合は、全CPUの処理フラグが正か否かの判定(ステップS83)を行い、ステップS83での判定結果がNoの場合は継続してチェックを行う。ステップS83での判定結果がYesの場合は、各CPUが計算した新規非零要素発生数が少ない順番に並び替えを行い、それが最小である最初のノードを選定し(ステップS84)、その後、処理終了フラグにCPU1の番号をセットし(ステップS85)、処理を終了する。ステップS82でCPU1でない場合、処理終了フラグが正か否かの判定(ステップS86)を行い、Noの場合は継続してチェックを行い、Yesの場合は処理を終了する。
【0046】
次に、本実施の形態の動作について説明する。本実施の形態は、非特許文献2に記載の連立一次方程式求解の実時間処理を実現するために、連立一次方程式の前進消去・後退代入の処理について、並列処理を可能とすると共に、並列処理の実行効率を向上させて処理性能の大幅な向上を実現するものである。なお、図2に示すように、連立一次方程式の並列計算を行う計算機構成は、共有メモリ結合された対称型マルチCPUを想定しており、この計算機であれば、各CPUで共通に読み書きするデータを共有メモリに配置することにより、計算機間の通信手段を不要とし、高速にデータのアクセスができることになり、各CPUの性能を十分に活用することが可能になる。
【0047】
非特許文献2では、ノードの順序付け方法としてTinney2法に基づいている。図4は、非特許文献2に記載の系統例を示す図であり、円内の数字は、ノード番号を示す。また、図5は、図4の系統例の回路網方程式(連立一次方程式)を示す図である。また、非特許文献2では、係数行列の三角分解については、図6の処理フローにより実施し、その結果を図7に示すテーブル形式で保存している。図6では、処理はi、j、kの3重のループで構成されており、ループiではステップS26、S27の処理を、ループjではステップS28、S29の処理を、また、ループkではステップS30の処理を行う。図6におけるNNmaxはノード総数を示す。図7では、’のついている要素は、三角分解の過程で変更を受けた要素であり、P(k)、Q(k)はノードの縮約順序を示すベクトルである。また、Nmaxは、係数行列の三角分解後の非対角非零要素数を示す。ノード順序付けは、Q(k)で示すノードを消去し、P(k)で示すノードに縮約したことを示している。一方、係数行列の三角分解後に行う前進消去・後退代入の処理は、図8に示す処理フローに従って実行するが、後退代入の処理は、2段階に分かれている。この前進消去の処理において、並列処理の阻害要因があり、それを図9により説明する。
【0048】
図9においては、例えばCPU4台で並列処理する場合を示しており、1回目の並列処理では、k=1,2,3,4をそれぞれCPU1、CPU2、CPU3、CPU4が担当するが、CPU2については、Q(2)=2が先行して処理するCPU1のP(1)=2と一致するため、並列処理ができず、直列に処理を行う必要がある。そのため、CPU1の処理が終了した後に、CPU2の処理を実行する必要がある。また、CPU4については、P(4)=4が、CPU3のP(3)=4と一致するため、並列処理ができず、直列に処理を行う必要があり、CPU3の処理が終了した後に、CPU4の処理を実行する必要がある。同様に、2回目の並列処理においては、CPU2の処理は並列処理ができず、また、3回目の並列処理においては、CPU2の処理は並列処理ができないことが分かる。
【0049】
一方、後退代入の処理における並列処理の阻害要因については、図10を参照して説明する。後退代入処理については、要素番号の大きいものから要素番号が小さい方向に、処理を行う。まず、1回目の並列処理においては、k=10,9,8,7を、それぞれCPU1、CPU2、CPU3、CPU4が担当するが、CPU2については、P(9)=10が、CPU1のQ(10)=10と一致するため、並列処理ができず、直列に処理を行う必要がある。そのため、CPU1の処理が終了した後に、CPU2の処理を実行する必要がある。また、2回目の並列処理においては、CPU2については、P(5)=3が、CPU1のQ(6)=3と一致するため、並列処理ができず、直列に処理を行う必要があり、CPU1の処理が終了した後に、CPU2の処理を実行する必要がある。さらに、CPU4については、P(3)=4が、CPU3のP(4)=4と一致するため、並列処理ができず、直列に処理を行う必要があり、CPU3の処理が終了した後に、CPU4の処理を実行する必要がある。3回目の並列処理でも、CPUについては、P(1)=2が、CPU1のQ(2)=2と一致するため、並列処理ができず、直列に処理を行う必要があり、CPU1の処理が終了した後に、CPU2の処理を実行する必要がある。前述の通り、後退代入処理における並列処理の阻害要因も、前進消去処理と同じであることが分かる。
【0050】
係数行列のノード順序付けを行うと、三角分解、前進消去、後退代入の処理も全て、同じ影響を受けることになる。従って、係数行列の三角分解の処理に悪影響を与えず、前進消去と後退代入処理の並列処理の実行効率を向上させるノード順序付け方法を考案することが求められる。
【0051】
従って、本実施の形態では、以下の基本的考え方に基づき、ノード順序付けを行う。
【0052】
(1)fill−inの最小なノードからノード順序付けを行う。この条件を維持すれば、係数行列の三角分解の処理は、従来の方法と同じ考え方であり、処理性能が悪くなることは無い。
(2)(1)に基づき、前進消去処理における並列処理が可能なノードを優先して、ノ
ード順序付けを行う。これにより、前進消去処理の並列処理の実行効率を向上できると共に、後退代入処理の並列処理の実行効率も向上できる。
【0053】
前進消去処理の並列処理の実行効率を向上させるためのノード順序付け方法を以下に説明する。前進消去処理における並列処理の阻害要因については、図9に基づき説明した。従って、この阻害要因を解消し、以下の考え方でノード順序付けを行う。
(1)fill−inが最小なノードからノード順序付けを行う。
(2)最初のノードは、(1)で得られたfill−inが最小なノードの中から任意に選択するが、以降の並列処理対象のノードについては、当該ノード順序付け候補のノードとその相手端ノードが、順序付け済みのノードの相手端ノードと一致しないノードである場合、優先してノード順序付けを行う。ノード順序付け候補のノードとその相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードであるか否かは、前述の、並列処理が可能か否かの判定である。
(3)優先して順序付けるノードが全て無くなれば、残りのノードをfill−inが最小なノードから順にノード順序付けを行う。
【0054】
上記の考え方を処理フローで表現したのが、図11−1および図11−2である。図11−1では、まず、fill−inが最小となる放射状系統部分のノード順序付けを行い、その後、図11−2で、ループ状系統部分のノード順序付けを行う方法である。なお、ノード順序付け方法については、放射状系統部分にはTinney2法を、ループ状系統部分についてはTinney3法を適用しており、fill−inが最小となる方法である。
【0055】
なお、Tinney3法を適用した計算では、新規非零要素発生のシミュレーションを全ノードについて実施し、fill−inが最小なノードを選択することになるため、これを並列処理して、高速化を実現している。その処理フローを図12に示す。図12では、まず、各CPUが自分の処理対象要素を計算するために、各CPUの平均処理量と余りを計算し、CPU1が先頭から、(平均処理量+余り)の要素を分担し、CPU2以降はそれに続く、平均処理量の要素を分担するようにしている。その後、各CPUが分担する全要素について、新規非零要素発生数のシミュレーションを行い、処理が終了すれば、共有メモリにそのシミュレーション結果と自分のCPU処理フラグに自分のCPU番号をセットする。全体の管理を行うCPU1は、自分の処理が終了し、全CPUのCPU処理フラグがセットされていれば、全処理が終了したことになるので、各CPUの計算した新規非零要素発生数のシミュレーション結果を共有メモリから取り出し、それを新規非零要素発生数の少ない順番に並び替えを行い、最初のノードをノード順序付け候補として選択する。そして、処理終了フラグをセットし、処理を終了する。一方、CPU1以外のCPUは、処理終了フラグをチェックし、処理終了フラグがセットされていれば、処理を終了する。以上の方法で、新規非零要素発生数のシミュレーションを並列処理することができる。
【0056】
次に、このノード順序付け方法の効果を、図13−1〜図13−4を参照して説明する。図13−1は、系統例における従来のノード順序付けされたノード番号を示し、図13−2は、そのノード順序付けに従い、三角分解をした結果を示す。図13−3は、本実施形態のノード順序付けに基づくノード順序付けの結果を示し、図13−4は、そのノード順序付けに基づき、三角分解をした結果を示す。図13−1および図13−3は、図5に示す連立一次方程式の係数行列の構造をツリーで表現し、このツリーはノードとノード間を接続するブランチとから構成されている。図13−1、13−2では、矢印で示すように、並列処理が不可能な処理が4回発生している。一方、図13−3、13−4は、実施の形態1のノード順序付け方法の結果を示しており、並列処理が不可能な処理が2回となっており、効果があることを示している。特に、本実施の形態におけるノード順序付けの基準の一つである、ノード順序付け候補のノードとその相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に優先してノード順序付けにより、図13−2に示すような並列処理の阻害要因を解消する効果があることがわかる。
【0057】
このように、本実施の形態における連立一次方程式の並列計算方式のノード順序付け方法は、fill−inが最小なノードからノード順序付けを行うが、最初のノードは、fill−inが最小なノードの中から任意に選択し、以降の並列処理対象のノードについては、当該ノードとその相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に優先してノード順序付けを行う。そして、優先して順序付けるノードが無くなれば、残るノードをfill−inが最小なノードからノード順序付けを行うようにしたものである。本実施の形態によれば、前進消去・後退代入処理における並列処理の実行効率を向上させて、処理性能を高速化できるという効果があり、大規模系統の回路網方程式(連立一次方程式)を実時間性能で実行することが可能となる。
【0058】
実施の形態2.
図11−1は、実施の形態2のノード順序付け方法を示すフロー図であり、図11−2は、図11−1に続くフロー図である。すなわち、本実施の形態でも実施の形態1と同様のノード順序付け方法に従う。しかしながら、実施の形態1では、ループ状系統部分のノード順序付けにおける新規非零要素発生のシミュレーションを並列処理しているが、実施の形態2では、この新規非零要素発生のシミュレーションを並列処理せず、1台のCPUで処理するようにしたものである。このようにすれば、処理性能は高速化できないが、ノード順序付けの最適化は実現可能であり、CPU台数を少なくして訓練シミュレータを安価に構成できるという効果がある。
【0059】
実施の形態3.
図14−1および図14−2は、実施の形態3のノード順序付け方法を示すフロー図である。なお、図14−2は、図14−1に続く処理を示しており、‘2’で示す箇所において処理が接続される。図14−1において、まず初期化処理(1)(ステップS90)により、フラグ類の初期設定を行い、次に各ノードに接続する相手端ノード番号、相手端ノード数等のノードテーブル作成(ステップS91)を行い、相手端ノード数の少ない順番にノードテーブル並替え(ステップS92)を行う。相手端ノード数が同一の場合は、先に処理したノード順に並び替えを行う。
【0060】
次に、まず、放射状系統部分のノード順序付けを行う。放射状系統部分においては、例えば図13−3の放射状系統におけるノード1、ノード2、ノード3、ノード4、およびノード6のように、あるノードに接続するブランチ数が1つという部分を含み、従って、このようなノードに対しては、相手端ノード数も1つということになる。また、例えばノード1を任意に選択して順序付けた場合、ノード1が消去されノード1とノード5との間のブランチも消去されると、ノード5の接続ブランチ数が1つとなって、同様の構造が生じる。そして、順次、放射状系統部分のノード順序付けを行えば、最適なノード順序付けを行えることが分かっている(Tinney2法の考え方)。以下、この特徴に基づき、ノード順序付けを行う。
【0061】
前進消去、後退代入処理を並列処理する場合、各CPUが1ノードの処理を行うため、並列処理を行うCPU数の要素を一度に扱うことになり、それらの要素処理単位でノード順序付けを行う必要がある。このため、まずステップS93で、同時に順序付けを行うノード数が並列CPU数以下か否かの判定を行い、Noの場合は初期化処理(2)(ステップS94)により、要素数カウントの初期化を行う。ステップS93での判定結果がYesの場合は、何も処理せず、ステップS95に分岐する。
【0062】
ステップS95では、順序付け対象のノードiが放射状系統か否かの判定を行い、Yesであれば、ステップS96で、ノードiは並列処理可能か否かの判定を行う。ステップS96での判定結果がYesの場合、ノードiを順序付け(ステップS97)を行い、各種配列のカウントアップ(1)(ステップS98)を行い、ステップS93に分岐する。
ステップS96での判定結果がNoの場合は、この処理では当該ノードiを順序付け除外対象(ステップS99)とし、各種配列のカウントアップ(2)(ステップS100)を行い、ステップS93に分岐する。
【0063】
ステップS95でNoの場合は、除外対象ノードとした放射状系統部分が残っているかどうかを確認するために、順序付けが未実施のノードについて、相手端ノード数が少ない順番にノードテーブル並替え(ステップS101)を行い、初期化処理(3)(ステップS102)を行う。次に、ノードテーブル並替え後のノードについて、ノードiが放射状系統部分か否かの判定(ステップS103)を行い、Yesの場合は、さらに放射状系統部分が全て除外対象であるか否かの判定(ステップS104)を行い、Noの場合、ステップS96に分岐する。ステップS104でYesの場合は、全除外対象ノードを順番に順序付け(ステップS105)を行い、図14−2に示す処理に進む。また、ステップS103でNoの場合は、図14−2示す処理に進む。
【0064】
上記までの処理で、放射状系統部分のノード順序付けが終了したので、以降はループ状系統部分のノード順序付けを行う。ループ状系統部分についても、放射状系統部分と同様の考え方でノード順序付けを行う。
【0065】
図14−2に示すように、まず、ステップS106で、各種フラグ等の初期化処理(4)を行い、次に、残りノード全てについて、ノード接続数の少ない順番にノードテーブルの並び替え(ステップS107)を行い、ノード接続数が少ない順番にノードを並替える。次に、順序付けノード数が並列CPU数以上か否かの判定(ステップS108)を行い、Yesの場合は、順序付け配列数等の初期化処理(2)(ステップS109)を行い、ステップS110に分岐する。ステップ108でNoの場合は、何も処理せずにステップS110に分岐する。ステップS110では、ノードiが並列処理可能か否かの判定を行い、Yesの場合、ノードiを順序付け(ステップS111)をし、各種配列のカウントアップ(3)(ステップS112)を行い、次に、ステップS113で全ノードの順序付けが終了したかの判定を行う。ステップS113でNoの場合は、各種配列のカウントアップ(4)(ステップS114)を行い、ステップS107に分岐する。ステップS113でYesの場合は、処理を終了する。
【0066】
ステップS110でNoの場合は、この処理ではノードiを除外対象(ステップS115)とし、各種配列のカウントアップ(5)(ステップS116)を行い、続いて、残りのノードが全て除外対象か否かの判定(ステップS117)を行い、Noの場合は、各種配列のカウントアップ(6)(ステップS118)を行い、ステップS108に分岐する。ステップS117でYesの場合は、残りのノードについて、ノード接続数が少ない順番にノードテーブルの並替え(ステップS119)を行い、そして、それが最小のノードiの順序付け(ステップS120)を行い、全て終了すれば処理を終了する。
【0067】
実施の形態1では、ループ状系統部分のノード順序付けにおいて、新規非零要素発生数のシミュレーションを並列処理するようにしたが、この実施の形態3では、ループ状系統部分のノード順序付けにおいて、新規非零要素発生のシミュレーションの替わりに、放射状系統部分と同様に、あるノードに接続する相手端ノード数が少ない順番にノード順序付け候補とするようにしたものである。このようにすれば、ノード順序付けの最適化の度合いは実施の形態1よりは低下するが、ノード順序付けの処理を1台のCPUでも高速に処理できるため、訓練シミュレータにおける訓練実行段階でも系統構成状態の変化が発生した場合に、再度、ノード順序付けを高速に実行できるため、訓練実行段階における回路網計算を準最適化できる。そのため、連立一次方程式の求解を高速に処理することが可能になると共に、安価に訓練シミュレータを構成できるという効果がある。また、給電自動化システム等のオンライン用途のシステムにも適用可能になるという効果がある。
【0068】
実施の形態4.
本実施の形態にかかる連立一次方程式の並列求解方法について説明する。なお、ノード順序付けは、実施の形態1〜3のいずれか1つのノード順序付け方法を利用して行い、また、係数行列の三角分解は非特許文献2の方法により実施するものとし、その三角分解結果を用いて、前進消去処理および後退代入処理を行うものとする。図15−1および図15−2は、本実施の形態にかかる連立一次方程式の並列求解方法を示すフロー図であり、実施の形態1、2、または3のノード順序付け方法を適用した前進消去、後退代入過程の複数CPUによる並列処理を示すフロー図である。なお、図15−2は、図15−1に続く処理の流れを示し、‘3’で示す箇所で接続されている。
【0069】
図15−1において、まず、前進消去過程の並列処理を行うが、最初に、CPU1か否かの判定(ステップS121)を行い、Yesの場合は、フラグ類の初期化処理(ステップS122)を行い、次に、各CPUが並列処理できるか否かを示す並列処理フラグの作成(ステップS123)を行い、ステップS124に進む。ステップS121での判定結果がNoの場合は、ステップS124に分岐する。ステップS124では、複数個のCPUが並列処理を行う処理回数L、処理順序kの設定を行い、続いて、処理対象bj要素の選定(ステップS125)を行う。ここで、bjは、係数ベクトルbのj番目の成分を表す。次に、bj要素が並列処理可能か否かの判定(ステップS126)を行い、Yesの場合は、ステップS128に分岐する。ステップS126での判定結果がNoの場合は、bj要素の処理に必要な、関連する要素である関連bi要素が処理済みか否かの判定(ステップS127)を行い、ステップS127での判定結果がNoの場合は継続してチェックを行い、ステップS127での判定結果がYesの場合はステップS128に進む。ステップS128では、前進消去過程の計算を行い、続いて、CPU処理フラグの設定(ステップS129)をし、前進消去過程終了の判定(ステップS130)を行う。ステップS130での判定結果がNoの場合はCPU処理フラグをゼロに設定(ステップS131)し、ステップS124に分岐する。ステップS130での判定結果がYesの場合は、前進消去過程の処理を終了し、後退代入過程1の処理に移る。
【0070】
図15−2に示すように、後退代入過程1では、まず、CPU1か否かの判定(ステップS132)を行い、Yesの場合は、フラグ類の初期化処理(ステップS133)を行い、Noの場合はスキップする。次に、処理対象xi群の設定(ステップS134)を行い、後退代入過程1の計算(ステップS135)を実行し、計算終了後に、CPU処理フラグの設定(ステップS136)を行い、続いて、後退代入過程1終了の判定(ステップS137)を行う。ここで、xiは解xのi番目の成分を表し、また、ステップS135において、aiiは係数行列のi番目の対角成分、biは係数ベクトルのi番目の成分、
C(i)=1/aiiである(図6を参照)。ステップS137での判定結果がNoの場合は継続してチェックを行うが、Yesの場合は後退代入過程1を終了し、後退代入過程2に移る。
【0071】
後退代入過程2では、まず、CPU1か否かの判定(ステップS138)を行い、Yesの場合にはフラグ類の初期化処理(ステップS139)を行い、次に、各CPUが並列処理できるか否かを示す並列処理フラグの作成(ステップS140)を行うが、Noの場合、ステップS141に分岐する。ステップS141では、処理回数L、処理順序kの設定を行い、処理対象xi要素の選定(ステップS142)をし、次に、xi要素が並列処理可能か否かの判定(ステップS143)を行う。ステップS143での判定結果がNoの場合は、xi要素の処理に必要な、関連する要素である関連xj要素が処理済みか否かの判定(ステップS144)を行い、ステップS144での判定結果がNoの場合は継続してチェックを行い、ステップS144での判定結果がYesの場合はステップS145に進む。ステップS143での判定結果がYesの場合は、ステップS145に分岐する。
【0072】
ステップS145では、後退代入過程2の計算を行い、次に、CPU処理フラグの設定(ステップS146)をし、最後に、後退代入過程2終了の判定(ステップS147)を行い、Noの場合はCPU処理フラグにゼロを設定(ステップS148)し、ステップS141に分岐する。ステップS147での判定結果がYesの場合は、後退代入過程2の処理を終了する。
【0073】
図16−1および図16−2は、本実施の形態の前進消去過程における並列処理フラグ作成の処理を示すフロー図である。なお、図16−2は、図16−1に続くフロー図であり、‘4’で示す箇所で接続されている。図16−1では、まず、並列処理フラグ作成対象の設定(ステップS150)を行い、続いて、CPU1か否かの判定(ステップS151)を行い、Yesの場合はCPU実行フラグ、CPU参照フラグ、CPU処理フラグ、並列処理フラグ作成の終了フラグ等、フラグ類の初期化処理(ステップS152)を行い、Noの場合はステップS153に分岐する。次に、処理要素の配列iと処理CPU番号km、knの初期値設定(ステップS153)を行う。次に、図16−2では、前進消去の並列処理対象要素の計算(ステップS154)を行い、以降、各要素について並列処理が可能か否かの判定を行い、可能な場合はCPU実行フラグにCPU番号を設定し、不可能な場合は、処理終了を参照すべきCPU番号をCPU参照フラグに設定して、並列処理フラグの作成を行う。
【0074】
まず、選定した要素の配列Qが既に選定した要素の配列Pと一致するか否かのチェックを行う。一致する場合は、並列処理が不可能であり、一致しない場合は、並列処理が可能と判定する。この処理は、mとnのループから構成するが、mのループでは、並列処理対象要素を全て含み、ステップS155で、mのループにおける処理CPU番号をカウントアップする。nのループは最初の要素は必ず含むが、それ以降の要素は、m−1の要素までとする。これは、例えば、2番目の要素は1番目の要素と、3番目の要素は1番目、2番目の要素と、4番目の要素は1番目、2番目、3番目の要素と比較するためである。
【0075】
まず、ステップS156で、nのループにおける処理CPU番号をカウントアップする。knは先行して選定された要素を処理するCPU番号であり、kmは先行して選定された要素に対し並列処理を行うCPU番号である。
【0076】
次に、kmが1か否かの判定(ステップS157)を行い、Yesの場合は、並列処理対象の先頭要素であるため、無条件で並列処理可能として、CPU実行フラグを設定し、CPU参照フラグをクリア(ステップS162)し、ステップS161の次に分岐する(mのループの更新を行う。)。ステップS157でNoの場合は、Q(m)とP(n)が一致するか否かの判定(ステップS159)を行い、Yesの場合は並列処理が不可能であるため、CPU参照フラグを設定し、CPU実行フラグをクリア(ステップS159)するが、Noの場合は何も処理しない。そして、nのループが終了した後で、Q(m)と全P(n)とが不一致か否かの判定(ステップS160)を行い、Yesの場合は並列処理が可能であるため、CPU実行フラグを設定し、CPU参照フラグをクリア(ステップS161)する。ステップS160でNoの場合は何も処理しない。
【0077】
次に、さらに並列処理が可能か否かの判定として、先行して選定した要素の配列Pとそれ以降に選定した要素の配列Pとが一致するか否かのチェックを行う。一致しない場合は、並列処理が可能であるが、一致する場合は並列処理が不可能であるため、それぞれに対応して、CPU実行フラグ、CPU参照フラグの設定を行う。
【0078】
まず、nのループにおける処理CPU番号を初期値設定(ステップS163)する。これらの処理は、mとnのループで構成し、mのループについては、先頭の要素は無条件で並列処理可能であるため、2番目の要素から選定する、また、nのループについては、先頭の要素からm−1の要素までを選定する。これは、2番目の場合は1番目の要素と、3番目の要素の場合は1番目、2番目の要素と、4番目の場合は1番目、2番目、3番目の要素と比較するためである。
【0079】
まず、ステップS164で処理CPU番号knをカウントアップし、P(m)とP(n)とが一致するか否かの判定(ステップS165)を行い、一致する場合は並列処理が不可能なためCPU参照フラグを設定し、CPU実行フラグをクリア(ステップS166)し、Noの場合は何も処理しない。mとnのループの処理が終了すれば、全要素の処理が終了したか否かの判定(ステップS167)を行い、Noの場合は、配列iを並列処理するCPU台数分(CPUmax)だけ増加(ステップS168)させ、また、処理CPU番号km、knをクリア(ステップS169)して、ステップS154に分岐する。Yesの場合は自CPU処理フラグに、処理を実施したCPU番号を設定し(ステップS170)、CPU1の判定(ステップS171)を行い、Yesの場合は全CPU処理フラグが正か否かの判定(ステップS172)を行う。ステップS172で、Noの場合は継続してチェックを行い、Yesの場合は並列処理フラグ作成の終了フラグを設定(ステップS173)し、CPU1の処理を終了する。ステップS171でCPU1以外の場合は、並列処理フラグ作成の終了フラグの判定(ステップS174)を行い、判定結果が、Noの場合は継続してチェックを行い、Yesの場合は処理を終了する。
【0080】
図17−1および図17−2は、本実施の形態の後退代入過程における並列処理フラグ作成の処理を示すフロー図である。なお、図17−2は、図17−1に続くフロー図であり、‘5’で示す箇所で接続されている。前進消去処理では、要素1から最大要素の方向に処理が進むが、後退代入処理の場合は、逆に、最大の要素から要素1の方向に処理が進む。これが両者の最大の差異である。
【0081】
図17−1では、まず、並列処理フラグ作成対象の設定(ステップS150)を行い、続いて、CPU1か否かの判定(ステップS150)を行い、Yesの場合はCPU実行フラグ、CPU参照フラグ、CPU処理フラグ、並列処理フラグ作成の終了フラグ等、フラグ類の初期化処理(ステップS152)を行い、Noの場合はステップ153に分岐する。次に、処理要素の配列iとCPU処理番号km、knの初期値設定(ステップS152)を行う。次に、図17−2では、後退代入の並列処理対象要素の計算(ステップS154)を行い、以降、各要素について並列処理が可能か否かの判定を行い、可能な場合はCPU実行フラグにCPU番号を設定し、不可能な場合は、処理終了を参照するべきCPU番号をCPU参照フラグに設定して、並列処理フラグの作成を行う。
【0082】
まず、選定した要素の配列Qが既に選定した要素の配列Pと一致するか否かのチェックを行う。一致する場合は、並列処理が不可能であり、一致しない場合は、並列処理が可能と判定する。この処理は、mとnのループから構成するが、mのループでは、並列処理対象要素を全て含み、ステップS155でmのループにおける処理CPU番号をカウントアップする。nのループは最初の要素は必ず含むが、それ以降の要素は、m−1の要素までとする。これは、2番目の要素は1番目の要素と、3番目の要素は1番目、2番目の要素と、4番目の要素は1番目、2番目、3番目の要素と比較するためである。
【0083】
まず、ステップS156で、nのループにおける処理CPU番号をカウントアップする。knは先行して選定された要素を処理するCPU番号であり、kmは先行して選定された要素に対し並列処理を行うCPU番号である。
【0084】
次に、kmが1か否かの判定(ステップS157)を行い、Yesの場合は、並列処理対象の先頭要素であるため、無条件で並列処理可能として、CPU実行フラグを設定し、CPU参照フラグをクリア(ステップS162)し、ステップS162の次に分岐する(mのループの更新を行う。)。Noの場合は、ステップS157でNoの場合は、P(m)とQ(n)とが一致する否かの判定(ステップS159)を行い、Yesの場合は並列処理が不可能であるため、CPU参照フラグを設定し、CPU実行フラグをクリア(ステップ100)するが、Noの場合は何も処理しない。そして、nのループが終了した後で、P(m)と全Q(n)とが不一致か否かの判定(ステップS160)を行い、Yesの場合は並列処理が可能であるため、CPU実行フラグを設定し、CPU参照フラグをクリア(ステップS161)する。ステップS160でNoの場合は何も処理しない。
【0085】
次に、さらに並列処理が可能か否かの判定として、先行して選定した要素の配列Pとそれ以降に選定した要素の配列Pが一致するかのチェックを行う。一致しない場合は、並列処理が可能であるが、一致する場合は並列処理が不可能であるため、それぞれに対応して、CPU実行フラグ、CPU参照フラグの設定を行う。
【0086】
まず、nのループにおける処理CPU番号を初期値設定(ステップS163)する。これらの処理は、mとnのループで構成し、mのループについては、先頭の要素は無条件で並列処理可能であるため、2番目の要素から選定する、また、nのループについては、先頭の要素からm−1の要素までを選定する。これは、2番目の場合は1番目の要素と、3番目の要素の場合は1番目、2番目の要素と、4番目の場合は1番目、2番目、3番目の要素と比較するためである。
【0087】
まず、ステップS164で処理CPU番号knをカウントアップし、P(m)とP(n)が一致するかの判定(ステップS165)を行い、一致する場合は並列処理が不可能なためCPU参照フラグを設定し、CPU実行フラグをクリア(ステップS166)し、Noの場合は何も処理しない。mとnのループの処理が終了すれば、全要素の処理が終了したか否かの判定(ステップS167)を行い、Noの場合は、配列iを並列処理するCPU台数分(CPUmax)だけ減少(ステップS168)させ、また、処理CPU番号km、knをクリア(ステップS169)して、ステップS154に分岐する。Yesの場合は自CPU処理フラグに自CPU番号を設定(ステップS170)し、CPU1か否かの判定(ステップS171)を行い、Yesの場合は全CPU処理フラグが正か否かの判定(ステップS172)を行う。ステップS712で、Noの場合は継続してチェックし、Yesの場合は並列処理フラグ作成の終了フラグを設定(ステップS173)し、CPU1の処理を終了する。ステップS171でNoの場合は、並列処理フラグ作成の終了フラグが正か否かの判定(ステップS174)を行い、判定結果が、Noの場合は継続してチェックを行い、Yesの場合は処理を終了する。
【0088】
実施の形態1では、前進消去、後退代入処理の並列処理の実行効率を上げるためのノード順序付け方法を説明したが、この実施の形態4では、そのノード順序付けを適用した場合の前進消去、後退代入処理の並列処理の実現方法を説明した。このように、実施の形態1と実施の形態4とを組合せることにより、連立一次方程式求解の並列処理を実現できると共に、高速処理が可能になるという効果がある。
【0089】
次に、動作について説明する。まず、前進消去過程の並列処理について、説明する。複数のCPUで並列処理を行う場合、処理前に、bi要素の並列処理が可能であるか否かのチェックを行い、並列処理フラグ(CPU実行フラグ、CPU参照フラグ)を複数CPUで並列に作成し、各CPUの処理するbi、bj要素の決定、1回毎の並列計算ステップにおける各CPUの処理が終了したことの検出方法、また、全行の処理が終了したことの検出方法を定める必要がある。
(a)並列処理フラグ(CPU実行フラグ、CPU参照フラグ)の作成
(1)各CPUは、各CPUが担当する自分の並列処理フラグ作成対象の設定を行う。
(2)CPU1は、まず、全CPUのCPU実行フラグ、CPU参照フラグを「0」で初期化する。
(3)次に、各CPUは、当該並列処理における並列処理対象要素について、後段のQ(m)と前段の全P(n)の値とが一致するか否かチェックする。一致する場合は、並列処理が不可になるのでCPU参照フラグを設定し、全て一致しない場合は並列処理が可能になるので、CPU実行フラグを設定する。
・並列処理対象の最初の要素は、無条件で並列処理可能とし、当該CPUのCPU実行フラグに当該CPU番号を設定する。
・後段の要素と先行する全要素のチェックの結果、一致する場合は、当該CPUのCPU参照フラグに、参照すべき一致した要素のP(n)を担当するCPU番号を設定する。
・後段の要素と先行する全要素のチェックの結果、全て一致しない場合は、当該要素Q(m)を担当するCPUのCPU実行フラグに当該CPU番号を設定する。
(4)次に、各CPUは、当該並列処理における並列処理対象要素について、後段のP(m)と前段の全P(n)の値とが一致するか否かチェックする。一致する場合は、並列処理が不可になるのでCPU参照フラグを設定する。全て一致しない場合は何も処理しない。
・一致する場合は、当該CPUのCPU参照フラグに、参照すべき一致した要素のP(n)を担当するCPU番号を設定する。
・一致しない場合は、何もしない。
(5)各CPUは、自分の処理が終了すれば、自CPU処理フラグに自分のCPU番号を設定する。
(6)CPU1は、全てのCPUの処理が終了したか否かをCPU終了フラグでチェックし、終了していれば、並列処理フラグ作成の終了フラグを設定し、処理を終了する。
(7)CPU1以外のCPUも、並列処理フラグ作成の終了フラグが設定されている場合は、処理を終了する。
(b)処理対象bi、bj要素の決定
(1)各CPUが処理するbi、bj要素を下記の(4)式により算出する。また、図18は、前進消去過程の並列処理において、4台のCPUに処理を割り振り各種フラグで管理する様子を示す図である。
k=(L−1)*CPUmax+CPUi ・・・(4)
j=P(k)
i=Q(k)
ただし、
L:各CPUの計算回数(CPU1が初期化。初期値は1)
CPUmax:並列処理するCPU台数
CPUi:CPU番号(CPU1=1、・・・、CPUn=CPUmax)
(c)CPU処理フラグの管理
CPU1が各CPUの計算回数Lの更新を行うためには、各CPUの処理が終了したことを確認する必要がある。これをCPU処理フラグと定義する。
(1)初期化
CPU1が、全CPUのCPU処理フラグを、0で初期化する。
(2)CPU処理フラグの設定
各CPUが、担当の処理が終了した時点で、CPU処理フラグに自CPU番号を書き込む。
(3)計算回数Lのカウントアップ
CPU1は、全CPUのCPU処理フラグが正になった時点で、Lを1だけ、カウントアップし、全CPUのCPU処理フラグをリセットする。
(d)前進消去過程終了フラグの管理
前進消去過程の処理終了は、各CPUが行う。
(1)初期化
CPU1が、前進消去過程終了フラグを、0で初期化する。
(2)最終行の検出
各CPUが処理するbj要素の行番号が、行サイズnmaxと一致した場合、最
終行の処理をしたと判断し、検出したCPUは、前進消去過程終了フラグに自CPU番号をセットする。
(3)前進消去過程の終了
各CPUは、前進消去過程終了フラグが正の場合、前進消去過程の処理が終了したと判断し、次の後退代入過程1の処理に入る。
(e)前進消去過程の並列処理手順
(1)各CPUが担当する並列処理フラグ作成対象を設定する。
(2)CPU1が、各CPUのCPU実行フラグ、CPU参照フラグ、CPU処理フラグ、前進消去過程終了フラグを初期化する。
(3)各CPUが、全てのCPU実行フラグ、CPU参照フラグを並列に作成する。
(4)各CPUが、処理対象bi、bj要素を決定する。
(5)各CPUが、CPU実行フラグをチェックする。
・自分のCPU番号と一致する場合は、bj要素の計算を行い、CPU処理フラグをセットする。なお、bi要素と掛け算となるD要素がゼロの場合は、その処理をスキップする。
・自分のCPU番号と一致しない場合は、CPU参照フラグが示すCPU番号について、そのCPU処理フラグをチェックする。
(i)CPU処理フラグが正の場合は、bj要素の処理を行い、CPU処理フラグをセットする。
(ii)CPU処理フラグが正でない場合は、継続チェックを行う(先行CPUの計算終了待ち)。
(6)CPU1が、全CPU処理フラグが正であることを確認し、Lを1アップし、
全CPUのCPU処理フラグをリセットし、(4)に戻る。
(7)各CPUは、自分が最終行を処理した場合、前進消去過程終了フラグをセット
する。
(8)各CPUは、前進消去過程終了フラグが正の場合、前進消去を終了し、次の後
退代入過程1に進む。
【0090】
次に、後退代入過程1の並列処理について、説明する。後退代入過程1の処理は、各CPUが全処理を分担して、並列処理することができる。複数のCPUで並列処理を行う場合、各CPUの処理するxj要素の決定、各CPUの処理が終了したことの検出方法、また、全行の処理が終了したことの検出方法を決める必要がある。
(a)処理対象xiの決定
(1)各CPUが処理するxi要素を下記の式により算出する。
・各CPUの平均処理量
k0=(nmax/CPUmax)の整数値
・余り
k1=nmax−k0・CPUmax
・CPU1の処理量
i=1〜k0+k1
・CPU2〜CPUmaxの処理量
i=(k0+k1)+(CPUi−2)*k0+1
〜(k0+k1)+(CPUi−1)*k0
(b)CPU処理フラグ、後退代入過程1終了フラグの管理
後退代入過程1の処理が終了したことをチェックするためには、各CPUの処理が終了したことを確認する必要がある。また、図19は、後退代入過程1の並列処理において、4台のCPUに処理を割り振りCPU処理フラグで管理する様子を示す図である。
(1)初期化
CPU1が、全CPUのCPU処理フラグ、後退代入過程1終了フラグを、0で初期化する。
(2)CPU処理フラグの設定
各CPUが、担当の処理が終了した時点で、CPU処理フラグに自CPU番号を書き込む。
(3)後退代入過程1終了フラグの設定
CPU1は、自分の処理が終了した時点に、他CPUのCPU処理フラグが正になったことを検出し、後退代入過程1終了フラグをセットする。
(c)後退代入過程1の並列処理手順
(1)初期化
CPU1が、全CPUのCPU処理フラグ、後退代入過程1終了フラグを、0で初期化する。
(2)処理対象xiの決定
各CPUが、自分が担当する処理対象xiを計算する。
(3)CPU処理フラグの設定
各CPUが、担当の処理が終了した時点で、CPU処理フラグに自CPU番号を書き込む。
(4)後退代入過程1終了フラグの設定
CPU1は、自分の処理が終了した時点で、他CPUのCPU処理フラグが正になっていることを検出し、後退代入過程1終了フラグをセットする。
(5)各CPUは、後退代入過程1終了フラグが正の場合、後退代入過程1の処理が終了したことを認識し、次の後退代入過程2の処理に進む。
【0091】
最後に、後退代入過程2の並列処理について、説明する。複数のCPUで並列処理を行う場合、処理前に、xi、xj要素の並列処理が可能であるか否かのチェックを行い、並列処理フラグ(CPU実行フラグ、CPU参照フラグ)を複数CPUで並列に作成し、各CPUの処理するxi、xj要素の決定、1回毎の並列計算ステップにおける各CPUの処理が終了したことの検出方法、また、全行の処理が終了したことの検出方法を定める必要がある。
(a)並列処理フラグ(CPU実行フラグ、CPU参照フラグ)の作成
(1)各CPUが自分の担当する並列処理フラグ作成の対象要素を設定する。
(2)CPU1は、まず、全CPUのCPU実行フラグ、CPU参照フラグを「0」で初期化する。
(3)次に、各CPUは、今回の並列処理対象要素について、後段のP(m)と前段の全Q(n)の値とが一致するか否かチェックする。一致する場合は、並列処理が不可になるのでCPU参照フラグを設定し、全て一致しない場合は並列処理が可能になるので、CPU実行フラグを設定する。
・並列処理対象の最初の要素は、無条件で並列処理可能とし、当該CPUのCPU実行フラグに当該CPU番号を設定する。
・後段の要素と先行する全要素のチェックの結果、一致する場合は、当該CPUのCPU参照フラグに、参照すべき一致した要素のQ(n)を担当するCPU番号を設定する。
・後段の要素と先行する全要素のチェックの結果、全て一致しない場合は、当該要素P(m)を担当するCPUのCPU実行フラグに当該CPU番号を設定する。
(4)次に、各CPUは、今回の並列処理対象要素について、後段のP(m)と前段の全P(n)の値とが一致するかチェックする。一致する場合は、並列処理が不可になるのでCPU参照フラグを設定する。全て一致しない場合は何も処理しない。
・一致する場合は、当該CPUのCPU参照フラグに、参照すべき一致した要素のP(n)を担当するCPU番号を設定する。
・一致しない場合は、何もしない。
(5)各CPUは、自分の担当する処理が終了すれば、自CPU処理フラグに自分のCPU番号を設定する。
(6)CPU1は、全てのCPUの処理が終了したか否かを、CPU処理フラグから判定し、終了している場合は、並列処理フラグ作成の終了フラグを設定し、処理を終了する。
(7)CPU1以外のCPUは、並列処理フラグ作成の終了フラグをチェックし、設定済みの場合は処理を終了する。
(b)処理対象xi、xj要素の決定
(1)各CPUが処理するxiを下記の(5)式により算出する。また、図20は、後退代入過程2の並列処理において、4台のCPUに処理を割り振り各種フラグで管理する様子を示す図である。
k=nmax−(L−1)・CPUmax−CPUi+1 ・・・(5)
i=Q(k)
j=P(k)
ただし、
nmax:xiの最大要素数
L:各CPUの計算回数(CPU1が初期化。初期値は1)
CPUmax:並列処理するCPU台数
CPUi:CPU番号(CPU1=1、・・・、CPUn=CPUmax)
(c)CPU処理フラグの管理
CPU1が各CPUの計算回数Lの更新を行うためには、各CPUの処理が終了したことを確認する必要がある。これをCPU処理フラグと定義する。
(1)初期化
CPU1が、全CPUのCPU処理フラグを、0で初期化する。
(2)CPU処理フラグの設定
各CPUが、担当の処理が終了した時点で、CPU処理フラグに自CPU番号を書き込む。
(3)計算回数Lのカウントアップ
CPU1は、全CPUのCPU処理フラグが正になった時点で、Lを1だけ、
カウントアップし、全CPUのCPU処理フラグをリセットする。
(d)後退代入過程2終了フラグの管理
後退代入過程2の処理終了は、各CPUが行う。
(1)初期化
CPU1が、後退代入過程2終了フラグを、0で初期化する。
(2)最終行の検出
各CPUが処理するxiの行番号が、「1」と一致した場合、最終行の処理をしたと判断し、検出したCPUは、後退代入過程2終了フラグに自CPU番号をセットする。
(3)後退代入過程2の終了
各CPUは、後退代入過程2終了フラグが正の場合、後退代入の処理が終了したと判断し、全処理の終了とする。
(e)後退代入過程2の並列処理手順
(1)各CPUは、自分の担当する並列処理フラグ作成の対象要素を設定する。
(2)CPU1が、各CPUのCPU実行フラグ、CPU参照フラグ、CPU処理フラグ、後退代入過程2終了フラグを初期化する。
(3)各CPUが、全てのCPU実行フラグ、CPU参照フラグを並列に作成する。
(4)各CPUが、処理対象xi、xj要素を決定する。
(5)各CPUが、CPU実行フラグをチェックする。
・自分のCPU番号と一致する場合は、xi要素の計算を行い、CPU処理フラグをセットする。なお、xj要素と掛け算となるD要素がゼロの場合は、その処理をスキップする。
・自分のCPU番号と一致しない場合は、CPU参照フラグが示すCPU番号について、そのCPU処理フラグをチェックする。
(i)CPU処理フラグが正の場合は、xi要素の処理を行い、CPU処理フラ
グをセットする。
(ii)CPU処理フラグが正でない場合は、継続チェックを行う(先行CPUの処理終了待ち)。
(6)CPU1が、全CPU処理フラグが正であることを確認し、Lを1カウントアップし、全CPUのCPU処理フラグをリセットし、(4)に戻る。
(7)各CPUは、自分が1行目を処理した場合、後退代入過程2終了フラグをセッ
トする。
(8)各CPUは、後退代入過程2終了フラグが正の場合、後退代入過程2を終了す
る。
【0092】
本実施の形態によれば、実施の形態1〜3のいずれかのノード順序付けの結果に基づき、処理の実施前に、前進消去・後退代入処理の並列処理可能の可否を判定し、可能な場合はCPU実行フラグをセットし、不可能な場合はCPU参照フラグに参照すべきCPU番号をセットし、前進消去・後退代入処理においては、CPU実行フラグがセットされている場合は並列処理を行い、セットされていない場合は、CPU参照フラグより、参照すべきCPU番号を抽出し、そのCPUの処理が終了したことを確認して、その後に当該CPUの処理を行うようにしたので、従来はすべて直列に処理していた前進消去・後退代入処理の並列処理を実現すると共に、並列処理の実行効率を向上させることができるという効果がある。また、図2に示すような対称型マルチCPU構成の計算機に基づき、本実施の形態にかかる連立一次方程式の並列求解方法を用いることにより、連立一次方程式の解を並列求解するための並列求解装置を構成することができる。
【図面の簡単な説明】
【0093】
【図1】実施の形態1が適用される訓練シミュレータの構成を示す構成図である。
【図2】実施の形態1にかかる連立一次方程式の並列求解に利用される計算機構成の一例を示す図である。
【図3】実施の形態1において、系統摸擬サーバ群に実装し、系統シミュレーションを行う動態安定度計算の処理例を示すフロー図である。
【図4】非特許文献2に記載の系統例を示す図である。
【図5】図4の系統例の回路網方程式(連立一次方程式)を示す図である。
【図6】三角分解の基本的な処理を示すフロー図である。
【図7】三角分解結果の各種データを保存するテーブルの構造を示す図である。
【図8】前進消去・後退代入処理を示す処理フロー図である。
【図9】前進消去処理における並列処理の問題点を示す図である。
【図10】後退代入処理における並列処理の問題点を示す図である。
【図11−1】実施の形態1のノード順序付け方法を示すフロー図である。
【図11−2】図11−1に続くフロー図である。
【図12】図11−2における新規非零要素発生のシミュレーションの並列処理を示すフロー図である。
【図13−1】実施の形態1のノード順序付けの効果を説明するための図である。
【図13−2】実施の形態1のノード順序付けの効果を説明するための図である。
【図13−3】実施の形態1のノード順序付けの効果を説明するための図である。
【図13−4】実施の形態1のノード順序付けの効果を説明するための図である。
【図14−1】実施の形態3のノード順序付け方法を示すフロー図である。
【図14−2】図14−1に続くフロー図である。
【図15−1】実施の形態4における連立一次方程式の並列求解方法を示すフロー図である。
【図15−2】図15−1に続くフロー図である。
【図16−1】実施の形態4の後退代入過程における並列処理フラグ作成の処理を示すフロー図である。
【図16−2】図16−1に続くフロー図である。
【図17−1】実施の形態4の後退代入過程における並列処理フラグ作成の処理を示すフロー図である。
【図17−2】図17−1に続くフロー図である。
【図18】前進消去過程の並列処理において、4台のCPUに処理を割り振り各種フラグで管理する様子を示す図である。
【図19】後退代入過程1の並列処理において、4台のCPUに処理を割り振りCPU処理フラグで管理する様子を示す図である。
【図20】後退代入過程2の並列処理において、4台のCPUに処理を割り振り各種フラグで管理する様子を示す図である。
【図21−1】非特許文献1に記載の単純なネットワークを示す図である。
【図21−2】非特許文献1に記載のツリー構造の処理過程を示す図である。
【図22】非特許文献1に記載のノード順序付けアルゴリズムを示すフロー図である。
【符号の説明】
【0094】
1 訓練管理サーバ群
2 系統摸擬サーバ群
3 自動化模擬サーバ群
4 トレーナ卓
5 トレーニ卓
6 大画面系統盤
7 システムLAN
8 CPU1
9 CPU2
10 CPU3
11 CPUn
12 共有メモリ

【特許請求の範囲】
【請求項1】
複数個のCPUと、前記各CPUが共通にアクセス可能な共有メモリと、を有する対称型マルチCPU構成の並列計算装置を用い、係数行列の三角分解、前進消去処理、および後退代入処理に基づいて電力系統の解析における連立一次方程式の解を並列計算する際に使用され、前記係数行列の構造ならびに前記前進消去処理および前記後退代入処理の手順を、ノードおよびノード間を接続するブランチからなるツリーで表現するときのノード順序付け方法であって、
前記ツリーにおけるループを含まない系統部分である放射状系統部分に属するノードについてのノード順序付けを行う第1のステップと、
前記ツリーにおける放射状系統部分以外の系統部分であるループ状系統部分に属するノードについてのノード順序付けを行う第2のステップと、
を含み、
前記第1のステップにおいては、最初に順序付けするノードはそのノードに接続されているブランチ数が最小のノードの中から任意に選択し、以降はノード順序付け候補のノードのうち各ノードに接続されているブランチ数が少ないノードから順に選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行い、
前記第2のステップにおいては、前記複数個のCPUを用いて前記前進消去処理におけるノードの縮約時に発生する新規非零要素発生数のシミュレーションを並列処理して実施し、前記シミュレーションにより得られた前記新規非零要素発生数の少ないノードから選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行うことを特徴とするノード順序付け方法。
【請求項2】
複数個のCPUと、前記各CPUが共通にアクセス可能な共有メモリと、を有する対称型マルチCPU構成の並列計算装置を用い、係数行列の三角分解、前進消去処理、および後退代入処理に基づいて電力系統の解析における連立一次方程式の解を並列計算する際に使用され、前記係数行列の構造ならびに前記前進消去処理および前記後退代入処理の手順を、ノードおよびノード間を接続するブランチからなるツリーで表現するときのノード順序付け方法であって、
前記ツリーにおけるループを含まない系統部分である放射状系統部分に属するノードについてのノード順序付けを行う第1のステップと、
前記ツリーにおける放射状系統部分以外の系統部分であるループ状系統部分に属するノードについてのノード順序付けを行う第2のステップと、
を含み、
前記第1のステップにおいては、最初に順序付けするノードはそのノードに接続されているブランチ数が最小のノードの中から任意に選択し、以降はノード順序付け候補のノードのうち各ノードに接続されるブランチ数が少ないノードから順に選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行い、
前記第2のステップにおいては、前記複数個のCPUのうちの単一のCPUを用いて前記前進消去処理におけるノードの縮約時に発生する新規非零要素発生数のシミュレーションを実施し、前記シミュレーションにより得られた前記新規非零要素発生数が少ないノードから選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行うことを特徴とするノード順序付け方法。
【請求項3】
複数個のCPUと、前記各CPUが共通にアクセス可能な共有メモリと、を有する対称型マルチCPU構成の並列計算装置を用い、係数行列の三角分解、前進消去処理、および後退代入処理に基づいて電力系統の解析における連立一次方程式の解を並列計算する際に使用され、前記係数行列の構造ならびに前記前進消去処理および前記後退代入処理の手順を、ノードおよびノード間を接続するブランチからなるツリーで表現するときのノード順序付け方法であって、
前記ツリーにおけるループを含まない系統部分である放射状系統部分に属するノードについてのノード順序付けを行う第1のステップと、
前記ツリーにおける放射状系統部分以外の系統部分であるループ状系統部分に属するノードについてのノード順序付けを行う第2のステップと、
を含み、
前記第1のステップにおいては、最初に順序付けするノードはそのノードに接続されているブランチ数が最小のノードの中から任意に選択し、以降はノード順序付け候補のノードのうち各ノードに接続されるブランチ数が少ないノードから順に選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行い、
前記第2のステップにおいては、前記複数個のCPUのうちの単一のCPUを用いて処理することによりノード順序付け候補のノードのうち各ノードに接続されるブランチ数が少ないノードから順に選択するとともに、ノード順序付け候補のノードとそれにブランチを介して接続された隣接ノードである相手端ノードが順序付け済みのノードの相手端ノードと一致しないノードである場合に当該ノード順序付け候補のノードを優先して選択する、という選択基準に基づいて前記複数個のCPU単位にノード順序付けを行うことを特徴とするノード順序付け方法。
【請求項4】
複数個のCPUと、前記各CPUが共通にアクセス可能な共有メモリと、を有する対称型マルチCPU構成の並列計算装置を用い、請求項1〜3のいずれか1つに記載のノード順序付け方法を適用したノード順序付けステップと、係数行列の三角分解を行う三角分解ステップと、前進消去処理ステップと、後退代入処理ステップと、を含む処理手順に基づいて電力系統の解析における連立一次方程式の解を並列計算する並列求解方法であって、
前記前進消去処理ステップにおいては、並列処理が可能か否かを判別するための並列処理フラグを前記複数個のCPUにより並列に作成し、前記並列処理フラグを参照して、並列処理が可能な要素については並列処理を実行し、並列処理が不可能な要素については当該要素の処理に必要な関連する要素の処理の終了を確認して処理を行うことにより、前進消去の並列処理を実行し、
前記後退代入処理ステップは、前記連立一次方程式の係数ベクトルの成分とこの成分に対応する前記係数行列の対角成分の逆数との積を処理対象である解ベクトルの成分に代入する処理を含む後退代入第1ステップと、この後退代入第1ステップ以降の処理である後退代入第2ステップと、を含み、
前記後退代入第1ステップにおいては、処理対象を前記複数個のCPUに按分して並列処理を行い、
前記後退代入第2ステップにおいては、並列処理が可能か否かを判別するための並列処理フラグを前記複数個のCPUにより並列に作成し、前記並列処理フラグを参照して、並列処理が可能な要素については並列処理を実行し、並列処理が不可能な要素については当該要素の処理に必要な関連する要素の処理の終了を確認して処理を行うことにより、後退代入の並列処理を実行することを特徴とする連立一次方程式の並列求解方法。

【図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−1】
image rotate

【図11−2】
image rotate

【図12】
image rotate

【図13−1】
image rotate

【図13−2】
image rotate

【図13−3】
image rotate

【図13−4】
image rotate

【図14−1】
image rotate

【図14−2】
image rotate

【図15−1】
image rotate

【図15−2】
image rotate

【図16−1】
image rotate

【図16−2】
image rotate

【図17−1】
image rotate

【図17−2】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21−1】
image rotate

【図21−2】
image rotate

【図22】
image rotate


【公開番号】特開2008−299641(P2008−299641A)
【公開日】平成20年12月11日(2008.12.11)
【国際特許分類】
【出願番号】特願2007−145639(P2007−145639)
【出願日】平成19年5月31日(2007.5.31)
【出願人】(000006013)三菱電機株式会社 (33,312)
【Fターム(参考)】