JPH08227405A - 反復処理の並列実行方法 - Google Patents

反復処理の並列実行方法

Info

Publication number
JPH08227405A
JPH08227405A JP3209995A JP3209995A JPH08227405A JP H08227405 A JPH08227405 A JP H08227405A JP 3209995 A JP3209995 A JP 3209995A JP 3209995 A JP3209995 A JP 3209995A JP H08227405 A JPH08227405 A JP H08227405A
Authority
JP
Japan
Prior art keywords
processing
processor
executed
processors
partial
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.)
Pending
Application number
JP3209995A
Other languages
English (en)
Inventor
Teruo Tanaka
輝雄 田中
Yusaku Yamamoto
有作 山本
Yoshiaki Hojo
芳章 北城
Yoshiko Tamaoki
由子 玉置
Tadayuki Sakakibara
忠幸 榊原
Machiko Asaya
真知子 朝家
Yoshiko Yasuda
淑子 保田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP3209995A priority Critical patent/JPH08227405A/ja
Publication of JPH08227405A publication Critical patent/JPH08227405A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)

Abstract

(57)【要約】 【目的】LU分解処理などの反復処理を並列計算機でよ
り短時間に実行可能にする。 【構成】K回目の反復処理が、並列化不可能な処理P
(K)と並列化可能な処理Q(K)とから構成され、処
理Q(K)は、処理P(K)の結果を利用し、かつ、K
+1回目の処理P(K+1)はK回目の処理Q1(K)
中の一部の処理Qs(K)の結果を利用する時、処理Q
(K)を、プロセッサの台数 Pと同数の処理Q1(K)
からQP(K)に分解し、かつ、処理Q1(K)には、処
理QS(K)を含ませる。処理Q1(K)と処理P(K+
M)を同一のプロセッサで順次実行し、これと並行し
て、他の処理Q2(K)からQn(K)を他のP-1台のプ
ロセッサで実行する。以後、全プロセッサの処理が終了
する毎に以上の処理を繰り返す。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、N次元連立一次方程式
の係数行列を下三角行列と上三角行列に分解するLU分
解処理のように、同じ処理を異なるデータに対して反復
して実行する反復処理を、複数のプロセッサを持つ並列
計算機で実行させる方法に関する。
【0002】
【従来の技術】各種の工業用製品の開発に数値シミュレ
ーションが実用に供されている。このような数値シミュ
レーションでよく使用される処理は、N次元連立方程式
AX=Bをガウスの消去法で解く処理である。ここで、
AはN行N列の係数行列、XとBはN列のベクトルであ
る。このガウスの消去法により上記方程式を解く処理の
主要な部分は、係数行列Aを下三角行列Lと上三角行列
Uの積である行列LUに分解するLU分解処理である。
【0003】大規模行列のLU分解処理の実用化は進ん
でおり、特にスーパコンピュータ向けには、多段同時展
開法が一般的である。これらの手法は、文献:村田、小
国、唐木著スーパコンピュータ、丸善、91〜103
頁、1985や文献:ブロッキングLU分解法のVP2
000シリーズ向けチューニングについて、情報処理学
会第42回(平成3年前期)全国大会予稿集第1分冊7
1〜72頁、特開平4−259064および特開平6−
75988などに開示されている。
【0004】とくに最近は、並列計算機の進歩に伴い、
並列計算機を数値シミュレーションに応用する研究が盛
んである。
【0005】近年実用化されている並列計算機は、一般
的に次のような3種類の形態をとる。図1は、複数台の
プロセッサ2ないし4が主記憶1を共有する主記憶共有
型並列計算機である。これは、現在のベクトル型スーパ
コンピュータの主流であり、スーパコンピュータの場
合、各プロセッサ2ないし4は多数のデータをベクトル
データとしてまとめ、そのベクトルデータに同一の処理
をパイプライン演算器を使用して連続的に施すベクトル
プロセッサとなる。
【0006】図2は、各々が演算処理装置10と専用の
主記憶9を持つ独立したを計算機6ないし8である。こ
こで、計算機6ないし8をプロセッサと呼ぶ。これらの
プロセッサ6ないし8を相互結合網5で接続する。現在
は、各プロセッサはスーパスカラなどの高性能マイクロ
プロセッサとメモリで構成されることが多い。
【0007】図3は、主記憶15および複数台のプロセ
ッサ16ないし17から構成される主記憶共有型並列計
算機12ないし14(図1と同様)をさらに相互結合網
11で接続した構成を持つ。これは、たとえば、特開平
6−96032で開示されている。図3の構成における
各々の主記憶共有型計算機12ないし14をクラスタと
呼ぶ。
【0008】図2の形式の並列計算機でLU分解処理を
実行させる方法の例は、文献:星野著PAXコンピュー
タ、オーム社、1985や特開平3−105694など
に開示されている。
【0009】LU分解処理の概要および図1に示した並
列計算機でLU分解処理を実行させる従来の方法を図
4、図5を用いて説明する。
【0010】図4は、行列Aに対するLU分解処理のK
回目のループ処理を説明するための図である。すなわ
ち、行列Aの各要素a(i,j)(すなわち、第i行第
j列番目の要素)を、異なる処理を受ける要素群に分け
て、それらの要素群を領域の形で示している。図中、N
は行列サイズである。ここでは、第1行から第K−1行
および第1列から第K−1列までのLU分解処理は終了
している。各反復回では、高速化のために、一度にM列
をまとめてLU分解処理を行なういわゆる多段同時消去
方法が使用される。このためには、Mは複数であるが、
原理的にはMは1でもよい。
【0011】以下の説明のため、行列Aの第K列から第
N列ないし第K行から第N行の領域を5つに分け、それ
ぞれに次のような名称を付ける。
【0012】(1)L1(K)22:第K列から第K+
M−1列および第K行から第K+M−1行で構成される
左下三角領域 (2)U1(K)21:第K列から第K+M−1列およ
び第K行から第K+M−1行で構成される右上三角領域 (3)L2(K)23:第K列から第K+M−1列およ
び第K+M行から第N行で構成される矩形領域 (4)U2(K)24:第K+M列から第N列および第
K行から第K+M−1行で構成される矩形領域 (5)A(K)25 :第K+M列から第N列および第
K+M行から第N行構成される矩形領域 図5に、図1の並列計算機で実行可能な、従来技術によ
るLU分解処理プログラムを示す。この図において、L
U分解プログラムは、2重のDOループで構成されてい
る。
【0013】外側のループ20は、M列づつまとめて処
理するために、行列のサイズNをMで割ったM/N回だ
け繰り返す。
【0014】内側は2つDOループで構成され、それら
の処理は以下のとおりである。なお、外側ループ20の
繰返し回数はKとする。
【0015】まず、最初の内側ループ(DO 1)の処
理では、第K列から第K+M−1列番目まで、つまりU
1(K)21、L1(K)22およびL2(K)23の
領域に対して、各列ごとに、部分軸選択(いわゆるピボ
ット処理)およびそれに対する消去更新処理を繰り返し
て行なう。これらの処理の概要は以下のとおりである。
最初の内側ループ(DO 1)のループ繰返し回数はK
Mとする。但し、KMはK、Mとは関係のない値であ
る。
【0016】(1)ピボット処理:KM列の第KM行か
ら第N行までの要素から最大値を検索し、検索した最大
値を含む行と第KM行との行交換を行なう。すなわち、
それらの行の第KM列から第K+M−1列番目の要素を
交換する。
【0017】(2)消去更新処理:第KM+1列から第
K+M−1列および第KM+1行から第N行により構成
される矩形領域内の各要素a(i,j)に対して、消去
更新処理a(i,j)=a(i,j)−a(KM,j)×
a(i,KM)を行なう。
【0018】このDOループの処理を、以下では、処理
P(K)と呼ぶ。このDOループの処理では、最大値検
索という逐次処理を繰り返して行なう必要があるため、
このループ自体を並列化してもあまり性能が向上しな
い。
【0019】次に、第2の内側DOループ(DO 2)
では、領域U2(K)および領域A(K)に対して、次
の処理を行なう。
【0020】(1)領域U2(K)および領域A(K)
の行交換:前述のピボット処理において行交換処理を施
したM組の行の第K+M列から第N列の要素に対して、
行交換処理を行なう。
【0021】(2)領域U1(K)、領域L1(K)を
用いた領域U2(K)の消去更新処理:この領域U2
(K)内の各要素a(i,j)に対して、消去更新処理
a(i,j)=a(i,j)−a(k,j)×a(i,k)
を行なう。ここで、kをKからK+M−1に順次変化さ
せて、この計算を合計M回行なう。なお、iは、K+1
からK+M−1の一つを1取り、jはK+MからNの一
つの値を取る。したがって、この計算は、領域U1
(K)、L1(K)内の要素を使用して、領域U2
(K)内の要素を更新している。
【0022】(3)領域U2(K)、L2(K)を用い
た領域A(K)内の要素の消去更新処理:消去更新処理
a(i,j)=a(i,j)−a(k,j)×a(i,k)
を行なう。ここで、kをKからK+Mに順次変えて、こ
の計算を合計M回行なう。ここで、iはk+MからNの
一つであり、jはK+MからNの一つである。
【0023】この第2の内側ループの処理を、以下で
は、処理Q(K)と呼ぶ。
【0024】これらの計算(1)から(3)は、領域U
2(K)、A(K)の各列ごとに独立に計算可能であ
る。すなわち、各列毎に、上記処理(1)から(3)を
実行する処理が基本の処理であり、処理Q(k)は、こ
の単位処理を複数の列に対して集めたものとなってい
る。このため、このような各列毎の処理は、処理Q
(K)を構成する、互いに並列に実行可能な部分処理と
言える。したがって、Q(K)28を列を単位に均等に
p個にグループで分け、それぞれをQ1(K)、Q2
(K)、、、QP(K)とし、p台のプロセッサに分割
して処理を行なうことにより、p倍に近い台数効果を得
ることができる。
【0025】このようなLU分解処理のフローチャート
は、図7の通りである。図7では、パラメタKの初期値
設定35に続き、処理P(K)36の実行後、並列化可
能な処理Q(K)の並列化37を行ない、p個の処理Q
1(K)38ないし処理Qp(K)40に分け、p台のプ
ロセッサでそれぞれの処理を分担し、並列に実行する。
このとき、並列化された処理Q(K)のあとに、処理を
逐次にもどして、Kの更新処理41と収束判定42を行
ない、次のK+M回目の反復ループである処理P(K+
M)、さらに処理Q(K+M)を実行する。
【0026】このように処理Q(K)を複数の並列実行
可能な処理に分けて実行するプログラムを得るには、最
適化コンパイラの自動並列化機構を使用してソースプロ
グラムの内の並列実行可能な部分を検出し、かつ、それ
らを自動的に並列実行可能なオブジェクトプログラムに
変換する方法あるいはソースプログラムに並列指示行を
追加し、これをコンパイラにより並列実行可能なオブジ
ェクトプログラムに変換する方法が取られる。図5に示
したプログラムは、DO ALLタイプの並列化指示行
29を有する例である。このプログラムの場合、処理Q
(K)28の並列化は並列指示行29により各反復回ご
とに毎回行なわれる。
【0027】以上の説明から明かな通り、LU分解処理
の基本的な処理の流れは、図6に示すように、パラメタ
Kの初期値設定30およびそのパラメータの更新処理3
3により制御し、処理P(K)31と、処理Q(K)3
2を指定した条件34(収束条件あるいは反復回数な
ど)が成立するまで繰返し実行することである。図5の
プログラムは、この処理を、図7に示す手順にしたがっ
て図1の形式の並列計算機で実行可能にし、それでもっ
てLU分解処理の高速化を図っている。
【0028】数値シミュレーションでは、LU分解処理
に限らず、ほぼ同一の処理を、図6に示す手順にしたが
って繰り返す反復処理が多く見受けられる。その場合
は、Mは1でもよい。このような他の反復処理でも、処
理Pが本来逐次的にしか実行できないとしても、図7に
示す処理手順にしたがって処理Qを並列に実行すること
により、このような他の反復処理も高速に実行できる。
【0029】
【発明が解決しようとする課題】LU分解処理を図7に
示した手順で処理した場合、処理Q(K)が並列計算機
を構成する複数のプロセッサにより並列に実行されるた
め、その処理の実行時間は、プロセッサ数が多いほど短
縮される。しかし、各反復回ごとに処理P(K)は並列
計算機を構成する一つのプロセッサにより実施されるた
め、この処理P(K)の実行時間が、プロセッサ数を多
くしても、LU分解処理全体の処理時間を短縮するのを
妨げている。
【0030】いま仮に、対象とする行列のサイズNを1
000としたとき、上記処理Q(K)と処理P(K)
は、それぞれLU分解処理の総演算量の処理のおおよそ
98%および2%程度の演算量を占める。しかし、処理
P(K)、処理Q(K)の実行時の演算器の使用率が大
幅に異なる。
【0031】たとえば、図1の並列計算機が4台のプロ
セッサからなり、各プロセッサがベクトルプロセッサの
場合、この処理Q(K)は並列処理可能であり、この処
理のために異なるベクトルプロセッサ内のパイプライン
演算器も使用される上に、処理Q(K)の計算処理は積
和計算のため、各ベクトルプロセッサ内のパイプライン
演算器の使用率が高い。一方、処理P(K)は、一台の
ベクトルプロセッサ内の演算器しか使用しない上に、こ
の処理の主たる部分は最大値検索処理であり、必要とす
るデータ量に対して相対的に演算量が少なく、この一つ
のベクトルプロセッサ内の一部のパイプライン演算器し
か使用せず、演算器の使用率は高くない。このため、上
述の4台のベクトルプロセッサからなる並列計算機に対
する推定例では、処理Q(K)に対する処理P(K)の
演算器利用率は約1/10程度と低い。このため、処理
P(K)と処理Q(K)の処理時間の比は、 約10:12(=2:98/(10×4)) となり、わずか2%の演算量の処理P(K)がLU分解
処理全体の処理時間の約半分を占める。したがって、4
台のプロセッサを使用しているにもかかわらず最大2台
分の性能向上しか得られない。
【0032】また、図1のプロセッサ1等が、スーパー
スカラプロセッサからなり、かつプロセッサの総数が1
00台程度である場合の推定例では、処理Q(K)に対
する処理P(K)の演算器利用率は約1/2である。こ
のため、処理P(K)と処理Q(K)の処理時間の比
は、 約4:1(=2:98/(2×100)) となり、わずか2%の演算量の処理P(K)が演算時間
の約80%を占めることがわかる。したがって、100
台のプロセッサを使用しているにもかかわらず10台強
の性能向上しか得られない。
【0033】したがって、処理P(K)の実行時間が、
LU分解処理の全体の処理時間に及ぼす影響をさらに減
じることが望まれる。
【0034】同じような問題は、LU分解処理に限ら
ず、処理P(K)で例示される第1の処理と、その処理
の実行後に実行すべき、処理Q(K)で例示される並列
実行可能な第2の処理とを繰返するとともに、この繰返
しに当たっては、第2の処理の実行後に第1の処理を実
行するように第1、第2のの処理を実行するときに生じ
る。
【0035】言い替えると、従来の方法では、複数のプ
ロセッサの内、一部のプロセッサは処理をしないで、他
のプロセッサでの処理待ちの状態にある時間が長いこと
になる。
【0036】したがって、本発明の目的は、本来は逐次
処理されるべき第1の処理とその後に実行されるべき、
並列実行可能な第2の処理とを有し、第2の処理の完了
を待って再度第1、第2の処理を実行するように、第
1、第2の処理を反復して実行すべき反復処理を、並列
計算機で実行させる場合に、この反復処理全体の処理時
間を軽減することが可能な反復処理の並列実行方法を提
供することである。
【0037】本発明の他の目的は、このような処理の実
行時に、プロセッサが待ち状態にある時間を軽減するこ
とである。
【0038】本発明のより具体的な目的は、LU分解処
理を並列計算機で実行させる場合に、この処理全体の処
理時間を軽減することが可能なLU分解処理の並列実行
方法を提供することである。
【0039】本発明の他のより具体的な目的は、このL
U分解処理を実行しているときのプロセッサが待ち状態
にある時間を減少させることである。
【0040】
【課題を解決するためにの手段】上に説明したLU分解
処理では、外側ループの繰返し回数Kのときに、処理P
(K)の結果を使用して実行される処理Q(K)では、
領域U2(K)と領域A(K)の要素の更新後の値が計
算される。これらの要素のうち、外側ループの次の繰返
し時に実行される処理P(K+M)の計算に使用する要
素は、このK+1回目における領域U1(K)、L1
(K)、L2(K)に属すべき要素のみである。すなわ
ち、図4において、第K+M行から第N行と第K+M列
から第K+2*M−1列により構成される領域26内の
要素である。したがって、処理P(K+M)は、この領
域26内の要素に関する処理Q(K)(これをQS
(K)と呼ぶことにする)が終了後に実行を開始しなけ
ればならない。しかし、処理P(K+M)は、領域A
(K)の内、この領域26以外の領域内の要素に対する
処理Q(K)とは、並列に実行可能である。
【0041】本発明では、このことを利用して、本来は
逐次処理されるべき第1の処理(例えば、P(K)、以
下括弧内は例示である)とその後に実行されるべき、並
列実行可能な第2の処理(Q(K))とを有し、第2の
処理の完了を待って再度第1、第2の処理を実行するよ
うに、第1、第2の処理を反復して実行すべき反復処理
を、並列計算機で実行させる場合に、ある繰返し(K回
目)で実行される第2の処理(Q(K))の内、次の繰
返し(K+M回目)で実行されるべき第1の処理(P
(K+M))が使用する処理結果を生成する部分処理
(Qs(K))と、次の繰返し時の第1の処理(P(K
+M))とを同じプロセッサに割り当て、この第1の処
理(P(K+M))を、この部分処理(QS(K))に
続いてそのプロセッサで実行させる。第2の処理(Q
(K))の内、この部分処理(QS(K))以外の部分
を、残りのプロセッサの数P−1に等しい数の、並列に
実行可能な処理(Q2(K)からQP(K))に分割し、
それらの残りのプロセッサにより並列に実行させる。
【0042】この際、上記部分処理(Qs(K))と第
1の処理(P(K+M))とを実行するプロセッサの処
理時間が、他のプロセッサのそれより小さいときには、
前者の処理時間が他のプロセッサのそれとほぼ同じにな
るように、第2の処理(Q(K))の内、部分処理(Q
S(K))以外の一部もこの部分処理(QS(K))を割
り当てたプロセッサに割り当てることがより望ましい。
すなわち、第2の処理処理(Q(K))を実施するのに
必要な第1の処理(P(K))を、いずれかのプロセッ
サにより予め実行した後、上記のごとくにして各プロセ
ッサに割り当てるべき第2の処理(Q(K))の一部を
決定し、決定された処理の割り当てに従って、各プロセ
ッサで、部分処理(QS(K)もしくはQi(K)(i=
2からp−1))を実行させる。
【0043】部分処理(QS(K))を割り当てられた
プロセッサでは、この処理が終了すると、第1の処理
(P(K+M))を実行させる。この部分処理(QS
(K)と第1の処理(P(K+M))および他の部分処
理(Q2(K)からQP(K))の実行の終了を待って、
以上の処理を繰り返す。
【0044】なお、本発明は、図2、図3の形式の並列
計算機でも実施可能である。
【0045】
【作用】次の反復回((K+M))の第1の処理(P
(K+M))は、第2の処理(Q(K))の内、その第
1の処理(P(K+M))に先立って実行する必要があ
る部分処理(QS(K))以外の処理と並列に実行され
るので、並列計算機内のプロセッサが待ち状態にある時
間を軽減することが出来、計算機資源の有効な利用を図
ることが出来る。それにより、この反復処理全体の処理
時間を軽減することが可能になる。又、従来のごとく、
第1の処理(P(K+M))を第2の処理(Q(K))
と逐次に実行する従来の場合に比べて、この第1の処理
(P(K+M))の実行時間が、繰返し処理全体に及ぼ
す影響を減少できる。なお、第1の処理(P(K+
M))は、部分処理(QS(K))を割り当てられたプ
ロセッサ内で、この処理の後に実行されるので、正常な
結果を出力する。
【0046】
【実施例】以下、本発明に係る反復処理の並列実行方法
を図面に示したいくつかの実施例を参照してさらに詳細
に説明する。なお、以下においては、同じ参照番号は同
じものもしくは類似のものを表わすものとする。
【0047】<実施例1>本実施例では、図1の主記憶
共有型の並列計算機を使用した、LU分解処理の並列実
行方法を示す。図8は本実施例で使用するプログラムの
例であり、図9はそのプログラムを図1の装置で実行す
る手順を示すフローチャートである。
【0048】以下、本実施例を、図9のフローチャート
に基づいて、従来例で示した図7と異なる部分について
主に説明する。
【0049】図5に関して説明した通り、LU分解処理
での次反復回の処理P(K+M)は、図4に示す行列A
において、点線で囲った領域26に対して処理を実行す
る。したがって、前反復回の処理Q(K)のうち、図4
の行列A内の領域26である第K+M列から第K+2*
M−1列の更新処理QS(K)を処理Q(K)から除い
た残りの処理(Q(K)−QS(K))と処理P(K+
M)は並列に実行可能である。処理P(K+M)は処理
QS(K)を終了すればいつでも実行可能となる。した
がって、図9において、処理Q(K)を並列化する処理
63を実行し、処理QS(K)を含む処理Q1´(K)6
4、処理Q2´(K)65ないし処理QP´(K)66の
p個に分割し、そのうち、処理Q1´(K)64を処理
P(K+M)67と同じプロセッサで、その処理より前
に実行することにより、処理Q2´(K)65ないし処
理QP´(K)66と処理P(K+M)とを並列に実行
することができるようになる。
【0050】処理P(K+M)67をK回目の反復回で
実行するために、61、68および69で制御される反
復ループに入る前に、K=1のときの処理P(1)60
を1度だけ実行する必要がある。
【0051】処理Q1´(K)64、処理Q2´(K)6
5ないし処理QP´(K)66の分割は、処理P(K+
M)67を含めて、全体の処理が均等になるように分割
する必要がある。処理Q(K)の分割は、各プロセッサ
に割り付ける列の数を変更することにより自由に扱うこ
とができる。ここでは、処理Q1´(K)64で扱う列
をK+MからK1とし、処理Q2´(K)65で扱う列
をK1+1からK2とし、処理QP´(K)66で扱う
列をK(p-1)からNとする。
【0052】この処理の均等分割によるK1、K
2、、、K(p-1)の決定62の手順を説明する。
【0053】まず、処理P(K+M)に先だって実行す
る必要のある処理QS(K)は、最低、処理Q1´(K)
64に含テまれている必要がある。したがって、K1は
K+2*M−1以上となる(条件1)。今仮に、処理P
(K+M)67の演算量を処理Q(K)における列の演
算量に換算した時の列数をProwとする。処理Q1´
(K)64と処理P(K+M)67の演算量の和を全体
の1/pにし、かつ条件1を満たすためには、K1の値
は次の式、
【0054】
【数1】 K1=MAX(K+2M−1、K+M+(N−(K+M)+1−Prow)/p) (1) であらわすことができる。ここで、MAXは最大値を求め
る関数である。
【0055】さらに、K2ないしK(p-1)は処理Q
(K)から処理Q1´(K)64を除いた処理を、残り
のp−1台のプロセッサで均等に分割すれば良い。した
がって、K2ないしK(p-1)は次の式、
【0056】
【数2】 Ki=K1+(i−1)/(p−1)*(N-K1)+1 (2) であらわすことができる。ここで、KiはK2ないしK
(p-1)をあらわす。
【0057】処理の均等分割によるK1、K2、、、K
(p-1)の決定処理62は、各反復回ごとに行なえば効
率が良いが、対象とする行列は徐々に小さくなるので、
数回の反復回ごとに値を更新するようにすることもでき
る。
【0058】図8に示すプログラムは、プロセッサ台数
Pが4の場合である。
【0059】まず、K=1のときの処理P(1)45を
実行し、DO9ループ46で指示された反復処理を実行
する。次に前述した式(式1)および(式2)により、
処理を均等に分割するためにK1、K2、K3を決定4
7する。
【0060】プログラムの並列化記述は、ひとつのプロ
セッサのみに処理P(K+M)58を割り付けるので、
SECTIONタイプの並列化指示行48ないし53を
用いる。各プロセッサの処理は、各SECTON()文で区切
られた範囲を実行する。
【0061】SECTION(1)49では、処理Q1´
(K)54と処理P(K+M)58をこの順番に実行す
る。ここで、処理Q1´(K)54は行列Aの第K+M
列から第K1列までを担当する。ここで、K1は(式
1)を用いて求める。(式1)のK1の定義により、処
理Q1´(K)54は前述した処理QS(K)を含むこと
を保障することができる。
【0062】SECTION(2)50では、処理Q2´
(K)55を実行する。処理Q2´(K)55は行列A
の第(K1+1)列から第K2列までを担当する。ここ
で、K2は(式2)を用いて求める。
【0063】SECTION(3)51では、処理Q3´
(K)56を実行する。処理Q3´(K)56は行列A
の第(K2+1)列から第K3列までを担当する。ここ
で、K3も(式2)を用いて求める。
【0064】SECTION(4)52では、処理Q4´
(K)57を実行する。処理Q4´(K)57は行列A
の第(K3+1)列から第N列までを担当する。ここ
で、K3は(式2)を用いて求める。
【0065】図8に示したプログラムをコンパイルする
ことにより、図9に示した手順で実行されるオブジェク
トプログラムが生成される。このコンパイルにより、図
8に示す各部分に対応するオブジェクト部分が生成され
るとともに、これらのオブジェクト部分の実行を制御す
るために、並列化処理63と同期処理69を実行するコ
ードがこのオブジェクトプログラムに追加される。この
ような目的のためのコンパイラはすでに知られている。
【0066】この実施例により、処理Pを実質上、並列
処理の中に組み込むことが可能となるために、処理Pの
実行時間が実質的に(1−1/p)に短縮される。この
結果LU分解処理全体の処理時間が短縮される。例え
ば、図1の形式の並列計算機が4台のプロセッサを有
し、かつ、各プロセッサがベクトルプロセッサの場合、
行列のサイズNを1000で、処理Pと処理Qの実行時
間がほぼ同程度の場合は、本実施例を用いることによ
り、LU分解処理の実行時間を最大35%程度低減する
ことができる。
【0067】<実施例2>本実施例は、図1の主記憶共
有型の並列計算機を使用した、、LU分解処理の並列実
行方法の他の例を提供する。図10は本実施例で使用す
るプログラムの例であり、図11はこのプログラムを図
1の装置で実行させるときの実行手順を示すフローチャ
ートである。
【0068】実施例1においては、図9で示したごと
く、各反復ごとに毎回並列化処理63を行なうことによ
り、処理P(K+M)と次の反復回の処理Q1´(K+
M)ないし処理QP´(K+M)との順序関係を保証し
ている。しかし、毎回行なう並列化処理63はすべての
プロセッサ間の同期を取るために性能低下の要因となる
可能性がある。本実施例では、きめ細かくPost処理
やWait処理を用いた同期処理を用いて順序保障処理
を行ない、並列化処理を制御変数Kの反復ループの外側
に移動させる方法を説明する。ここで用いるPost処
理やWait処理は、OSの発行するPost/Wai
tマクロではなく、コンパイラの並列制御ライブラリの
ひとつであるPost/Waitライブラリであり、コ
ストが小さい処理である。
【0069】この処理手順を図11を用いて図9と比較
して説明する。まず、図9と同様に、処理P(1)10
1を実行する。次に、制御変数Kにより指示される反復
ループの外側に並列化処理102を移動する。このた
め、処理の均等分割処理103ないし105、反復ルー
プの制御変数Kの更新処理117ないし119および反
復ループの判定処理120ないし122は、並列化され
た後、各プロセッサごとに実行させる。さらに、他のプ
ロセッサの次の反復回の処理との順序関係を保障するた
めに、プロセッサ間でPost処理およびWait処理
を実行する必要がある。
【0070】Post処理およびWait処理の設定す
べき位置について説明する。基本的な方針はPost処
理をできるかぎり早く実行し、Wait処理をできるか
ぎり遅く実行することである。このことにより、各プロ
セッサの実行の独立性を高め、動的な要因(たとえば、
主記憶アクセス競合など)によるWait処理時の不要
な同期待ちを軽減することができる。
【0071】まず、処理P(K+M)107を担当する
プロセッサの実行順序を説明する。このプロセッサで実
行する消去更新処理Q1´(K)を処理QS(K)106
と処理(Q1´(K)−QS(K))108の2つに分解
する。ここで、処理QS(K)106は、処理P(K+
M)107に先だって行なう行列A内の第K+M行から
第K+2*M−1行の更新処理である。処理(Q1´
(K)−QS(K))108は、このプロセッサが担当
する処理Q(K)に関する残りの処理である。処理P
(K+M)107を実行することにより、他のプロセッ
サの次の反復ループの処理Q2´(K+M)109ない
し処理QP´(K+M)110を実行することができる
ので、ここで、Post処理111およびWait処理
115ないし116を実行する。ここで、Post処理
111は他のp−1台のプロセッサのWait処理と対
応することとする。次に、処理(Q1´(K)−Q1S
(K))108を実行する。次反復回の処理P(K+2
*M)を実行するためには、その前に他のプロセッサの
処理Q2´(K)109ないし処理QP´(K)110を
実行する必要があるので、ここで、Post処理113
ないし114およびWait処理112を実行する。こ
こで、Wait処理112はp−1台のプロセッサから
のPost処理をすべて受けて成立することとする。
【0072】このように、処理Q1´(K)を処理QS
(K)106と処理(Q1´(K)−Q1S(K))10
8の2つに分解することにより、Post処理111は
処理P(K+M)107の直後に実行可能となり、処理
(Q1´(K)−Q1S(K))108の時間だけpos
t処理111を他のプロセッサのWait処理115な
いし116より早く実行することが可能となる。
【0073】図10に示すプログラムでは、SECTI
ONタイプの並列化70ないし75は1回だけ行なう。
各SECTION()文とSECTION()文の間に
各プロセッサで各々実行する制御変数Kの反復ループ7
6ないし79がある。それぞれの反復ループの中に各演
算処理80ないし89がある。複数のPost処理とW
ait処理を対応させるために、ここでは、イベント変
数を引数とする。複数のイベント変数を持つPost処
理90は、設定した数のイベントを発行し、Wait処
理95ないし97と対応する。複数のイベント変数を持
つWait処理94は、設定した数のイベントを対応す
るPost処理91ないし93から受けることにより成
立する。
【0074】図10に示したプログラムをコンパイルす
ることにより、図11に示した手順で実行されるオブジ
ェクトプログラムが生成される。このことは、実施例1
の場合と同様である。
【0075】<実施例3>本実施例は、図2の主記憶分
散型の並列計算機を使用した、LU分解処理の並列実行
方法を提供する。図13は本実施例で使用するプログラ
ムの例であり、図14はこのプログラムを図2の装置で
実行させるときの実行手順を示すフローチャートであ
る。
【0076】このような並列計算機では、図2に示すよ
うに、相互結合網5を介して、プロセッサ6ないし8間
でのデータの送受信処理が必要となる。このデータの送
受信処理を用いて順序保証を行なう。以下では、メッセ
ージ交換型の並列計算機を例に説明する。
【0077】分散記憶型の並列計算機では、まず、デー
タを分割配置する必要がある。ここでは、図12に示す
ように、行列Aを多段展開の幅Mごとに行を分割して、
順次各プロセッサに分割する。このような分割では、各
プロセッサが、順番にピボット処理Pを担当することに
なる。
【0078】この処理手順を図14を用いて説明する。
図11と比較して、図14で異なっている部分は、
(1)同期処理のPost/Wait処理の代わりに、
データの送信/受信処理を伴うSend処理およびRe
ceive処理を用いること、(2)図14の実施例で
は、つねに一つのプロセッサがピボット処理Pを担当し
ていたのに対して、実施例3では、負荷をできるだけ均
等にするために、各プロセッサが交互にピボット処理を
担当することである。図14では、2台のプロセッサ
(PEaとPEb)で処理を実行する場合を示す。もち
ろん、3台以上のプロセッサの場合も同様である。処理
Q(K)は、プロセッサ数である2つに均等に分割され
る。それぞれのプロセッサの担当する処理を処理Qa
(K)および処理Qb(K)とする。
【0079】このとき、もし、データを送信するSen
d処理とデータを受信するReceive処理が非同期
に実行可能な場合は、Send処理を可能なかぎり先行
させて、Receive処理を同様に可能なかぎり遅ら
せて実行する必要がある。これは、図11のPost/
Wait処理を用いた時のスケジューリング方針と同様
であり、処理Qa(K)を処理Qs(K)170と処理
(Qa(K)−Qs(K))172とに分解することによ
り、実現可能である。
【0080】まず、それぞれのプロセッサでは、16
0、161において自プロセッサがどちらのプロセッサ
であるかを判断する。これは、一般にたとえばUNIX
コマンドのWHOAMIなどのような判別ライブラリを事前に
用意しておく。ここでは、それぞれ自プロセッサである
と判断した162および163とする。
【0081】次に、プロセッサPEaで、処理P(1)
166を行ない、生成した領域L2(図4)のデータを
プロセッサPEbに送信するためにSend処理167
を行なう。
【0082】一方、プロセッサPEbは、このデータを
受信するReceive処理168を実行する。以下、
各プロセッサはそれぞれ制御変数Kの反復ループに入
る。
【0083】まず、プロセッサPEbは、処理QS
(K)173を実行し、引き続き、処理P(K+M)1
74を実行する。これにより、K+M回目の消去処理に
用いる領域L2の生成が可能となるために、ただちにプ
ロセッサPEaにSrend処理178を実行する。そ
の後、残りの処理(Qb(K)−Qs(K))175を実
行し、次反復回であるK+Mステップに手順を進める。
【0084】一方、プロセッサPEaでは、まず処理Q
a(K)169で担当するQの領域の更新処理を行な
い、その後に、K+Mステップに必要なL2のデータを
Receive処理177で受け取る。このとき、プロ
セッサPEb側のSend処理178は可能なかぎり早
く実行されているため、Receive処理177での
受信待ちはあまりなく、すぐにデータ受信が可能とな
る。
【0085】次にK+Mステップに進む。今度は、プロ
セッサPEa側がピボット処理P(K+2*M)171
を担当する。以下の処理は、プロセッサPEbのKステ
ップの手順と同等である。他方のプロセッサPEbでも
K+Mステップの処理は、プロセッサPEaのKステッ
プの処理と同様に行なう。
【0086】まず、処理QS(K+M)170を実行
し、引き続き、処理P(K+2*M)171を実行す
る。これにより、K+2*M回目の消去処理に用いる領
域L2の生成が可能となるために、ただちにプロセッサ
PEbにSend処理179を実行する。その後、残り
の処理(Qa(K+M)−Qs(K+M))172を実行
し、次反復回であるK+2*Mステップに手順を進める
ために、制御変数Kの更新処理181、判定処理183
を行なう。
【0087】一方、プロセッサPEbでは、まず処理Q
b(K)176で担当するQの領域の更新処理を行な
い、その後に、K+2*Mステップに必要なL2のデー
タをReceive処理180で受け取る。このとき、
プロセッサPEa側のSend処理179は可能なかぎ
り早く実行されているため、Receive処理180
での受信待ちはあまりなく、すぐにデータ受信が可能と
なる。その後、制御変数Kの更新処理182、判定処理
184を行なう。
【0088】図13に示すプログラムでは、まず130
では自プロセッサがどちらのプロセッサであるかを判断
する。これは、一般にたとえばUNIXコマンドのWHOA
MIなどのような判別ライブラリを事前に用意しておく。
それぞれのプロセッサの処理は、条件文131ないし1
33で判別される。図13においては、136以下13
2の直前までがプロセッサPEaの処理で、148以下
133の直前までがプロセッサPEbの処理である。
【0089】各プロセッサで交互にピボット処理を担当
するために、まず、1回だけ、プロセッサPEaで、処
理P(1)136を行ない、その結果をSEND処理1
45で送信し、プロセッサPEbにおいてRECEIV
E処理148で受信する。その後、各プロセッサは、反
復ループに入る。各反復ループDO91およびDO92
は制御変数Kに関して、2回分の処理を行なっている。
そのために、DO91およびDO92ループの間隔の指
定が、図13の134、135に示すように、第1、2
の実施例に比べて2倍となっている。
【0090】K回目のステップでは、プロセッサPEb
において、処理QS(K)141、処理P(K+M)1
42および処理(Qb(K)−Qs(K))143を行な
い、SEND処理149でプロセッサPEaにピボット
値を送信する。プロセッサPEaでは、平行して処理Q
a(K)137を行ない、RECEIVE処理146で
ピボット値を受信する。
【0091】K+M回目のステップでは、プロセッサP
Eaにおいて、処理QS(K+M)138、処理P(K
+2*M)139および処理(Qa(K+M)−Qs(K
+M))140の演算処理を行ない、SEND処理14
7でプロセッサPEbにピボット値を送信する。プロセ
ッサPEbでは、平行して処理Qb(K)144を行な
い、RECEIVE処理150でピボット値を受信す
る。
【0092】図13に示したプログラムをコンパイルす
ることにより、図14に示した手順で実行されるオブジ
ェクトプログラムが生成される。このことは、実施例1
の場合と同様である。
【0093】<実施例4>本実施例は、図3に示した、
複数のクラスタにより構成された主記憶分散型の並列計
算機を使用した、LU分解処理の並列実行方法を提供す
る。図15は本実施例で使用するプログラムの例であ
り、図16はこのプログラムを図3の装置で実行させる
ときの実行手順を示すフローチャートである。
【0094】このような並列計算機では、実施例3のよ
うに、データの送受信処理をもとに順序保証を行ない、
さらに、各反復回ごとに、クラスタ内のプロセッサ間で
第1、第2の実施例のような並列処理を実施する。
【0095】実施例4の実施例3と異なる点は、各ステ
ップ実行内で、クラスタ内のプロセッサ間の並列処理を
実行することである。このときの手順は、ここでは図9
を用いて説明した実施例1で示した方法を用いる。もち
ろん、実施例2で示した図11の手順も利用することが
可能である。
【0096】本実施例では、2つのクラスタCLaとC
Lb、および各クラスタ内のプロセッサ数がp台と仮定
する。以下、本実施例での処理手順を図16を用いて説
明する。
【0097】図14と比較して、図16で異なる点は、
(1)図14におけるプロセッサPEaおよびPEbが
それぞれ図16のクラスタCLaおよびCLbに対応す
ること、(2)各クラスタ内の各ステップの処理におい
て、クラスタ内のp台のプロセッサにおいて、並列処理
が行なわれることの2点である。図16では、2台のク
ラスタ(CLaとCLb)で処理を実行する場合を示
す。もちろん、3台以上のクラスタの場合も同様であ
る。
【0098】このとき、もし、データを送信する送信S
end処理とデータを受信するReceive処理が非
同期実行可能な場合は、Send処理を可能なかぎり先
行させて、Receive処理を同様に可能なかぎり遅
らせて実行する必要がある。これは、図14におけるS
end処理/Receive処理を用いた時のスケジュ
ーリング方針と同様である。
【0099】最初に、クラスタCLaでピボット処理P
(1)252を行ない、生成した領域L2(図4参照)
のデータをクラスタCLbに送信するためにSend処
理253を実行する。
【0100】一方、クラスタCLbはこのデータを受信
するReceive処理254を実行する。以下、各ク
ラスタは、それぞれ制御変数Kの反復ループに入る。制
御変数Kの制御は、279ないし282で行なう。処理
Q(K)は、クラスタ数である2つに均等に分割され
る。それぞれのクラスタの担当する処理を処理Qa
(K)および処理Qb(K)とする。
【0101】まず、クラスタCLbは、K回目の反復処
理において、クラスタ内のp台のプロセッサを用いて並
列処理256を行なう。このときの並列処理の分割の方
法は、実施例1から実施例3にしてしたのと同一の方法
で可能である。
【0102】ピボット処理P(K+M)263を担当す
るプロセッサでは、処理QS(K)262を実行し、引
き続き、ピボット処理P(K+M)263を実行する。
これにより、K+M回目の消去処理に用いる領域L2の
生成が可能となるために、ただちにクラスタCLaにS
end処理268を実行する。その後、残りの処理(Q
b(K)−Qs(K))264を実行する。クラスタCL
b内の他のプロセッサは、並列にそれぞれ処理Qb2
(K)265および処理Qbp(K)266を実行する。
Kステップ内でクラスタ内でのプロセッサ間の同期は、
並列化処理256で行なわれる。その後、K+Mステッ
プに手順を進める。
【0103】一方、クラスタCLaでは、まず処理Qa1
(K)259で担当するQの領域の更セ新処理を行な
い、その後に、K+Mステップに必要なL2のデータを
Receive処理267で受け取る。このとき、クラ
スタCLb側のSend処理268は可能なかぎり早く
実行されているため、Receive処理267での受
信待ちはあまりなく、すぐにデータ受信が可能となる。
クラスタCLa内の他のプロセッサは、並列にそれぞれ
処理Qa2(K)260および処理Qap(K)261を実
行する。Kステップ内でクラスタ内でのプロセッサ間の
同期は、並列化処理255で行なわれる。その後、K+
Mステップに手順を進める。
【0104】次にK+Mステップに進む。今度は、クラ
スタCLa側がピボット処理P(K+2*M)270を
担当する。以下の処理は、クラスタCLbのKステップ
の手順と同等である。
【0105】処理QS(K+M)269を実行し、引き
続き、ピボット処理P(K+2*M)270を実行す
る。これにより、K+2*M回目の消去処理に用いる領
域L2の生成が可能となるために、ただちにクラスタC
LbにSend処理277を実行する。その後、残りの
処理(Qa1(K+M)−Qs(K+M))271を実行
する。クラスタCLa内の他のプロセッサは、並列にそ
れぞれ処理Qa2(K)272および処理Qap(K)27
3を実行する。K+Mステップ内でクラスタ内でのプロ
セッサ間の同期は、並列化処理257で行なわれる。そ
の後、K+2*Mステップに手順を進める。
【0106】一方、クラスタCLbでは、まず処理Qb1
(K+M)274において、担当する領域の更新処理を
行ない、その後に、K+2*Mステップに必要なL2の
データをReceive処理278で受け取る。このと
き、クラスタCLa側のSend処理277は可能なか
ぎり早く実行されているため、Receive処理27
8での受信待ちはあまりなく、すぐにデータ受信が可能
となる。クラスタCLb内の他のプロセッサは、並列に
それぞれ処理Qb2(K)275および処理Qbp(K)2
76を実行する。K+Mステップ内でクラスタ内でのプ
ロセッサ間の同期は、並列化処理258で行なわれる。
その後、K+2*Mステップに手順を進める。
【0107】図15に示すプログラムでは、2台のクラ
スタ(CLaとCLb)でかつ各クラスタ内のプロセッ
ササ数がそれぞれ2台の場合を示す。もちろん、3台以
上のクラスタの場合、あるいは、クラスタ内のプロセッ
サ台数を3台以上にすることに可能である。図15中、
206以下202の直前までがクラスタCLaの処理
で、208以下203の直前までがクラスタCLbの処
理である。ここでは、まず200では自クラスタがどち
らのクラスタであるかを判断する。これは、一般にたと
えばUNIXコマンドのWHOAMIなどのような判別ライブ
ラリを事前に用意しておく。
【0108】各クラスタで交互にピボット処理を行なう
ために、DO91ループ204およびDO92ループ2
05は制御変数Kに関して、2回分の処理を行なってい
る。そのために、実施例3と同様に、DO91およびD
O92ループの間隔の指定が、実施例1、2に比べて2
倍となっている。
【0109】各クラスタ内では、各反復ステップKおよ
びK+Mごとに、並列処理指示文209ないし224に
より、並列化の指示を行なう。
【0110】図15の例では、クラスタCLaにおいて
は、ステップKに対しては、209から212の間の並
列指示行により並列処理が規定されており、演算処理2
25および226、RECEIVE処理237を行な
う。ステップK+Mでは、213から216の間の並列
指示行により並列処理が規定されており、演算処理22
7ないし229および230、SEND処理239を行
なう。
【0111】クラスタCLbにおいては、ステップKに
対しても、同様に217から220の間の並列指示行に
より並列処理が規定されており、演算処理231ないし
234、SEND処理238を行なう。ステップK+M
では、221から224の間の並列指示行により並列処
理が規定されており、演算処理235および236、R
ECEIVE処理240を行なう。
【0112】なお、第3および実施例4では、この処理
では、データの送受信のためのSend処理やRece
ive処理を他の演算処理と並列に実行することが必要
となる。もちろん、このSend処理やReceive
処理が専用の通信プロセッサで動作可能である場合は、
それらの通信に要する処理時間を除いたのちに、演算を
担当するプロセッサ内で演算量の処理を均等にする必要
がある。
【0113】図15に示したプログラムをコンパイルす
ることにより、図16に示した処理手順が実行されるオ
ブジェクトプログラムが生成されることは、実施例1の
場合と同様である。
【0114】
【発明の効果】本来は逐次処理されるべき第1の処理と
その後に実行されるべき、並列実行可能な第2の処理と
を有し、第2の処理の完了を待って再度第1、第2の処
理を実行するように、第1、第2の処理を反復して実行
すべき反復処理を、並列計算機で実行させる場合に、プ
ロセッサが待ち状態にある時間を軽減することが出来、
計算機資源の有効な利用を図ることが出来る。それによ
り、この反復処理全体の処理時間を軽減することが可能
になる。
【図面の簡単な説明】
【図1】従来の主記憶共有型並列計算機の概略構造を示
す図。
【図2】従来の主記憶分散型並列計算機の概略構造を示
す図。
【図3】従来のクラスタ結合型並列計算機の概略構造を
示す図。
【図4】従来の多段同時消去LU分解法の概要を示す
図。
【図5】従来の多段同時消去LU分解法のプログラム例
を示す図。
【図6】従来の反復計算処理のフローチャート。
【図7】並列化された反復計算処理のフローチャート。
【図8】本発明の実施例1で使用するプログラム例を示
す図。
【図9】実施例1による反復計算処理のフローチャー
ト。
【図10】実施例2で使用するプログラム例を示す図。
【図11】本発明の実施例2による反復計算処理のフロ
ーチャート。
【図12】分散記憶型計算機向けのデータの分割を示す
図。
【図13】本発明の実施例3で使用するプログラム例を
示す図。
【図14】実施例3による反復計算処理のフローチャー
ト。
【図15】本発明の実施例4で使用するプログラム例を
示す図。
【図16】実施例4による反復計算処理のフローチャー
ト。
【符号の説明】
20、34、42…ループ制御、27、31、36…逐
次的処理P(K)、28、32…並列化可能処理Q
(K)、29…並列指示、38ないし40…並列化可能
処理Q(K)を分割した処理
フロントページの続き (72)発明者 玉置 由子 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内 (72)発明者 榊原 忠幸 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内 (72)発明者 朝家 真知子 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内 (72)発明者 保田 淑子 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内

Claims (14)

    【特許請求の範囲】
  1. 【請求項1】第1の処理と、その実行結果を使用する第
    2の処理とを反復して実行する反復処理であって、第2
    の処理は、並列に実行可能な複数の部分処理からなり、
    第1の処理は、該反復処理のある繰返し時における第2
    の処理の実行結果をその反復処理の次の繰返し時に使用
    するものを並列計算機で実行させる方法であって、 (a)該並列計算機を構成する複数のプロセッサのいず
    れか一つにより、該反復処理の第1の繰返しに対して第
    1の処理を実行させ、 (b)一つの処理群が、第2の処理に含まれる上記複数
    の部分処理の内、第1の処理が次の繰返し時に使用する
    データを生成する一部の複数の部分処理と該第1の処理
    とを少なくとも含むように、かつ、他の処理群が、第2
    の処理に含まれる上記複数の部分処理の内、該一部の複
    数の部分処理以外の他の複数の部分処理の一部を含むよ
    うに、該第1の処理と第2の処理に含まれた上記複数該
    複数の部分処理とを、上記複数のプロセッサの数に等し
    い数の複数の処理群に分割し、 (c)該第1の繰返しに対して、該ステップ(a)の実
    行結果を使用して該一部の複数の部分処理を実行し、該
    次の繰返しに対して、該一部の複数の部分処理のこの実
    行結果を使用して第1の処理を実行するように、該一部
    の複数の部分処理と該第1の処理を少なくとも含む上記
    一つの処理群を、該複数のプロセッサのいずれか一つに
    より実行し、 (d)該他の複数のプロセッサの各々により、該複数の
    処理群の一つを、該第1の繰返しに対して該ステップ
    (a)の実行結果を使用して、かつ、該一つのプロセッ
    サによるステップ(c)での上記実行と並行して実行
    し、 (e)各プロセッサによる、ステップ(c)または
    (d)の実行の終了後、上記ステップ(c)から(e)
    を繰返し、その繰返しにおいては、(e1)該第2の処
    理を該次の繰返し以降の繰返しに対して実行され、か
    つ、該第1の処理を該次の繰返し以降の繰返しの次の繰
    返しに対して実行されるように、ステップ(c)から
    (d)を実行し、(e2)上記繰返しをする前にステッ
    プ(c)の実行の結果得られた、第1の処理の実行結果
    を、上記繰返しをした後に実行されるステップ(d)に
    おいて第2の処理により利用する反復処理の並列実行方
    法。
  2. 【請求項2】ステップ(e)による繰返しのときに、ス
    テップ(b)も実行した上で繰り返す請求項1記載の反
    復処理の並列実行方法。
  3. 【請求項3】ステップ(b)は、該一部の複数の部分処
    理に付加して該一つのプロセッサにより実行すべき他の
    一部の複数の部分処理が、該一つの処理群に属するよう
    に、該分割を実行するステップを有する請求項1記載の
    反復処理の並列実行方法。
  4. 【請求項4】ステップ(b)は、上記一部の複数の部分
    処理と上記第1の処理の実行に必要な第1の処理時間
    と、該他の複数の部分処理の各々の実行に必要な第2の
    処理時間とに基づいて、該複数の処理群の実行時間がほ
    ぼ等しくなるように、上記分割を行なうステップを有す
    る請求項1記載の反復処理の並列実行方法。
  5. 【請求項5】上記反復処理は、N次元連立一次方程式の
    係数行列をLU分解する処理であり、上記第1の処理は
    ピボット処理を含み、上記第2の処理は係数行列の消去
    更新処理を含む請求項1から4のいずれか一つに記載の
    反復処理の並列実行方法。
  6. 【請求項6】ステップ(e)は、各プロセッサにおける
    処理の終了を検出した後、該一つのプロセッサによるス
    テップ(c)の繰返しおよび該他の複数のプロセッサの
    各々によるステップ(d)の繰返しを同時に起動するス
    テップを有する請求項1記載の反復処理の並列実行方
    法。
  7. 【請求項7】ステップ(e)は、 各プロセッサにより、そのプロセッサでの処理の終了後
    に、他の複数のプロセッサの各々での処理の終了を判別
    し、 各プロセッサにより、他のプロセッサの各々での処理の
    終了が検出されたときに、そのプロセッサでの、ステッ
    プ(c)または(d)の繰返しを起動するステップを有
    する請求項1記載の反復処理の並列実行方法。
  8. 【請求項8】該並列計算機は該複数のプロセッサにより
    共有された主記憶をさらに有し、 該方法は、 (f)各プロセッサが該ステップ(c)または(d)の
    実行を終了したとき、その終了を示す情報をそのプロセ
    ッサにより該主記憶に書き込むステップをさらに有し、 該ステップ(e)は、各プロセッサから該主記憶に書き
    込まれた、そのプロセッサでの処理の終了を示す情報に
    基づいて行なわれる請求項7記載の反復処理の並列実行
    方法。
  9. 【請求項9】ステップ(f)は、 ステップ(c)の実行の終了後、該一つのプロセッサに
    よりそのプロセッサでの処理の終了を示す情報を該主記
    憶に書き込み、 該他の複数のプロセッサの各々により、ステップ(d)
    による、いずれかの部分処理群の実行の終了後に、その
    プロセッサでの処理の終了を示す情報をその各プロセッ
    サにより該主記憶に書き込むステップを有し、 ステップ(e)は、 該一つのプロセッサにより、上記終了を示す情報を書き
    込んだ後に、該他の複数のプロセッサの各々による、終
    了を示す情報が該主記憶に書き込まれたか否かを該第一
    つのプロセッサにより監視し、 該他の複数のプロセッサの各々による、上記終了を示す
    情報の書き込みの後に、該他の複数のプロセッサの以外
    のプロセッサの各々による、終了を示す情報が該主記憶
    に書き込まれたか否かを、該他の複数のプロセッサの各
    々により監視することにより、該複数のプロセッサの各
    々により、他のプロセッサでのステップ(c)または
    (d)での処理の実行が終了したか否かを判別するステ
    ップとを有し、 ステップ(e)は、該ステップ(e)による各プロセッ
    サ別の、他プロセッサの終了の判別結果に基づいて、各
    プロセッサ毎に、ステップ(c)から(d)の繰返しの
    開始時期を決定するステップを有する請求項8記載の反
    復処理の並列実行方法。
  10. 【請求項10】第1の処理と、その実行結果を使用する
    第2の処理とを反復して実行する反復処理であって、第
    2の処理は、並列に実行可能な複数の部分処理からな
    り、第1の処理は、該反復処理のある繰返し時における
    第2の処理の実行結果をその反復処理の次の繰返し時に
    使用するものを並列計算機で実行させる方法であって、 (a)該並列計算機を構成する複数のプロセッサのいず
    れか一つにより、該反復処理の第1の繰返しに対して第
    1の処理を実行させ、 (b)一つの処理群が、第2の処理に含まれる上記複数
    の部分処理の内、第1の処理が次の繰返し時に使用する
    データを生成する一部の複数の部分処理と該第1の処理
    とを少なくとも含むように、かつ、他の処理群が、第2
    の処理に含まれる上記複数の部分処理の内、該一部の複
    数の部分処理以外の他の複数の部分処理の一部を含むよ
    うに、第2の処理に含まれた上記複数該複数の部分処理
    と第1の処理とを上記複数のプロセッサの数に等しい数
    の複数の処理群に分割し、 (c)該第1の繰返しに対して、該ステップ(a)の実
    行結果を使用して該一部の複数の部分処理を実行し、該
    次の繰返しに対して、該一部の複数の部分処理のこの実
    行結果を使用して第1の処理を実行するように、該一部
    の複数の部分処理と該第1の処理を少なくとも含む上記
    一つの処理群を、該複数のプロセッサのいずれか一つに
    より実行し、 (d)該他の複数のプロセッサの各々により、該複数の
    処理群の一つを、該第1の繰返しに対して、該ステップ
    (a)の実行結果を使用して、かつ、該一つのプロセッ
    サによるステップ(c)での上記実行と並行して実行
    し、 (e)各プロセッサにおいて、そのプロセッサによるス
    テップ(c)または(d)の実行が終了した時点で、そ
    のプロセッサにより上記(c)または(d)を繰返し、
    その繰返しにおいては、(e1)ステップ(c)または
    (d)で実行した処理群とは異なる他の一つの理群をそ
    のプロセッサで実行するように、ステップ(c)または
    (d)を実行し、(e2)当該他の処理群が第2の処理
    の部分処理群を含んでいるときには、それらの部分処理
    群を該次の繰返し以降の繰返しに対して実行し、当該他
    の処理群が第1の処理を含んでいるときには、その第1
    の処理を該次の繰返し以降の繰返しの次の繰返しに対し
    て実行し、(e3)そのプロセッサがステップ(c)ま
    たは(d)で実行した処理群が第1の処理を含んでいな
    いときには、他のプロセッサから通知される、第1の処
    理の実行結果の通知を確認した後に、上記繰返しを開始
    するステップを有する反復処理の並列実行方法。
  11. 【請求項11】ステップ(e)による該繰返しは、各プ
    ロセッサがステップ(e)による繰返し毎に、順次異な
    る処理群を実行するように行なわれる請求項10記載の
    反復処理の並列実行方法。
  12. 【請求項12】いずれか一つのプロセッサによりステッ
    プ(c)によりいずれかの繰返しに対して上記一つの処
    理群を実行したときに、その実行結果を他の複数のプロ
    セッサに通知し、 他の複数のプロセッサの各々は、上記実行結果が、該一
    つのプロセッサから通知されたのを確認してから、その
    繰返しに対する、該複数の処理群の内のいずれかの他の
    一つの処理群を実行し、 該一つの処理群を上記繰返しの次の繰返しに対して実行
    する、さらに他のプロセッサに、該他の複数のプロセッ
    サの各々により該他の処理群の実行結果を通知し、 該さらに他のプロセッサでは、そのプロセッサ以外の複
    数のプロセッサから上記繰返しに対する上記複数の処理
    群の実行結果の受信を、当該さらに他のプロセッサによ
    り確認してから、上記さらに次の繰返しに対して、該一
    つの処理を開始するステップをさらに有する請求項10
    記載の反復処理の並列実行方法。
  13. 【請求項13】該並列計算機は、該複数のプロセッサを
    相互に接続するセットワークと、各プロセッサに対応し
    て設けられ、そのプロセッサで実行されるプログラムと
    データを保持するローカルメモリとを有する分散記憶型
    並列計算機であり、 上記一つの処理の実行結果の通知と上記他の処理群の実
    行結果の通知は、このネットワークを介して行なわれる
    請求項12記載の反復処理の並列実行方法。
  14. 【請求項14】第1の処理と、その実行結果を使用する
    第2の処理とを反復して実行する反復処理であって、第
    2の処理は、並列に実行可能な複数の部分処理からな
    り、第1の処理は、該反復処理のある繰返し時における
    第2の処理の実行結果をその反復処理の次の繰返し時に
    使用するものを、それぞれ複数のプロセッサとそれらの
    プロセッサで共有される、プログラムとデータを保持す
    るためのローカルメモリとを有する複数のクラスタと、
    それらを結合するネットワークからなる分散記憶型の並
    列計算機で実行させる方法であって、 (a)該複数のクラスタ内のいずれか一つに含まれた複
    数のプロセッサのいずれか一つにより、該反復処理の第
    1の繰返しに対して第1の処理を実行させ、 (b)一つの処理群が、第2の処理に含まれる上記複数
    の部分処理の内、第1の処理が次の繰返し時に使用する
    データを生成する一部の複数の部分処理と該第1の処理
    とを少なくとも含むように、かつ、他の処理群が、第2
    の処理に含まれる上記複数の部分処理の内、該一部の複
    数の部分処理以外の他の複数の部分処理の一部を含むよ
    うに、該第1の処理と第2の処理に含まれた上記複数該
    複数の部分処理とを、上記複数のクラスタの数に等しい
    数の複数の処理群に分割し、 (c)該複数のクラスタの各々により、該複数の処理群
    の一つを他のクラスタによる他の処理群の実行と並行し
    て実行し、各クラスタによる、一つの処理群の実行に当
    たっては、(c1)その一つの処理群に上記一部の複数
    の部分処理と該第1の処理とが含まれているときには、
    その一部の複数の部分処理と第1の処理とを少なくとも
    含む一つの部分処理群と、第2の処理に含まれる上記複
    数の部分処理の内、該一部の複数の部分処理以外の他の
    複数の部分処理の一部をそれぞれ含む複数の他の部分処
    理群とに、該一つの処理群の処理を分割し、該一つの処
    理群に上記一部の複数の部分処理と第1の処理が含まれ
    ていないときには、第2の処理に含まれる上記複数の部
    分処理の内、該一部の複数の部分処理以外の他の複数の
    部分処理の一部をそれぞれ含む複数の他の部分処理群
    に、該一該一つの処理群の処理を分割し、(c2)その
    クラスタ内の複数のプロセッサにより、ステップ(c
    1)による分割で得られた複数の部分処理群の一つを、
    そのクラスタ内の他のプロセッサによる他の部分処理群
    の実行と並行して実行し、(c3)そのクラスタで実行
    した上記一つの処理群に上記第1の処理が含まれている
    場合、その第1の処理が属する一つの部分処理群を実行
    した一つのプロセッサから、他のクラスタに第1の処理
    の実行結果を通知し、 (d)各クラスタにおいて、そのクラスタ内の各プロセ
    ッサによるステップ(c1)の実行が終了した時点で上
    記(c)を繰返し、その繰返しにおいては、(d1)該
    複数の処理群のうち、そのクラスタによりステップ
    (c)で実行した処理群とは異なる他の処理群をそのク
    ラスタで実行するように、ステップ(c)を繰返し、
    (d2)ステップ(c)でそのクラスタが実行した処理
    群の中に、該第1の処理が含まれていない場合には、他
    のクラスタから通知されるその第1の処理の実行結果の
    通知を確認した後、該他の処理群の実行を開始し、(d
    3)その繰返しにおいて実行する該他の処理群が、第2
    の処理に属する部分処理群を含んでいる場合には、該次
    の繰返し以降の繰返しに対してその部分処理群を実行
    し、かつ、該他の処理群が、第1の処理を含んでいると
    きには、該次の繰返し以降の繰返しの次の繰返しに対し
    て第1の処理を実行するように、該他の処理群を実行す
    る反復処理の並列実行方法。
JP3209995A 1995-02-21 1995-02-21 反復処理の並列実行方法 Pending JPH08227405A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3209995A JPH08227405A (ja) 1995-02-21 1995-02-21 反復処理の並列実行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3209995A JPH08227405A (ja) 1995-02-21 1995-02-21 反復処理の並列実行方法

Publications (1)

Publication Number Publication Date
JPH08227405A true JPH08227405A (ja) 1996-09-03

Family

ID=12349453

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3209995A Pending JPH08227405A (ja) 1995-02-21 1995-02-21 反復処理の並列実行方法

Country Status (1)

Country Link
JP (1) JPH08227405A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002175182A (ja) * 2000-08-31 2002-06-21 Koninkl Philips Electronics Nv 時間的な一連のステップでのデータ処理方法
US6460176B1 (en) 1998-03-31 2002-10-01 Nec Corporation Method of, apparatus for, and recording medium storing a program for, parallelizing a program containing an array designated to undergo indirect and irregular division
US6907513B2 (en) 2000-11-24 2005-06-14 Fujitsu Limited Matrix processing method of shared-memory scalar parallel-processing computer and recording medium
JP2008165694A (ja) * 2007-01-05 2008-07-17 Mitsubishi Electric Corp 連立一次方程式の求解処理方式
US9424032B2 (en) 2013-02-27 2016-08-23 Nec Corporation List vector processing apparatus, list vector processing method, storage medium, compiler, and information processing apparatus
JP2016224801A (ja) * 2015-06-02 2016-12-28 富士通株式会社 並列計算機システム、並列計算方法及びプログラム
JP2018206078A (ja) * 2017-06-05 2018-12-27 富士通株式会社 並列処理装置、並列演算方法、及び並列演算プログラム
JP2022510335A (ja) * 2018-12-06 2022-01-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド グラフィックスプロセッシングユニットでのパイプライン化された行列乗算

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6460176B1 (en) 1998-03-31 2002-10-01 Nec Corporation Method of, apparatus for, and recording medium storing a program for, parallelizing a program containing an array designated to undergo indirect and irregular division
JP2002175182A (ja) * 2000-08-31 2002-06-21 Koninkl Philips Electronics Nv 時間的な一連のステップでのデータ処理方法
US6907513B2 (en) 2000-11-24 2005-06-14 Fujitsu Limited Matrix processing method of shared-memory scalar parallel-processing computer and recording medium
JP2008165694A (ja) * 2007-01-05 2008-07-17 Mitsubishi Electric Corp 連立一次方程式の求解処理方式
US9424032B2 (en) 2013-02-27 2016-08-23 Nec Corporation List vector processing apparatus, list vector processing method, storage medium, compiler, and information processing apparatus
JP2016224801A (ja) * 2015-06-02 2016-12-28 富士通株式会社 並列計算機システム、並列計算方法及びプログラム
JP2018206078A (ja) * 2017-06-05 2018-12-27 富士通株式会社 並列処理装置、並列演算方法、及び並列演算プログラム
JP2022510335A (ja) * 2018-12-06 2022-01-26 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド グラフィックスプロセッシングユニットでのパイプライン化された行列乗算

Similar Documents

Publication Publication Date Title
EP0334844B1 (en) Virtual processor techniques in a multiprocessor array
US4905143A (en) Array processor and control method thereof
US5226131A (en) Sequencing and fan-out mechanism for causing a set of at least two sequential instructions to be performed in a dataflow processing computer
Wah et al. Multiprocessing of combinatorial search problems
US11687771B2 (en) Platform for concurrent execution of GPU operations
US5481723A (en) System and method for controlling execution of nested loops in parallel in a computer including multiple processors, and compiler for generating code therefore
Duarte et al. Parallel variable neighbourhood search strategies for the cutwidth minimization problem
US6539542B1 (en) System and method for automatically optimizing heterogenous multiprocessor software performance
US4956800A (en) Arithmetic operation processing apparatus of the parallel processing type and compiler which is used in this apparatus
CN118193135A (zh) 基于神威架构的PIPE-BiCGStab求解器加速优化方法及系统
JPH08227405A (ja) 反復処理の並列実行方法
US7076777B2 (en) Run-time parallelization of loops in computer programs with static irregular memory access patterns
CN112488296A (zh) 基于硬件环境的数据操作方法、装置、设备及存储介质
Diekmann et al. Combining helpful sets and parallel simulated annealing for the graph-partitioning problem
CN114661474B (zh) 信息处理方法、装置、设备、存储介质及程序产品
JPWO2016024508A1 (ja) マルチプロセッサ装置
CN120407109A (zh) 一种面向矩阵加速单元的矩阵乘法优化方法及其系统
Merigot et al. A pyramidal system for image processing
CN115204406A (zh) 一种量子计算模拟方法、量子电路模拟器及相关设备
Brezany et al. Parallelization of irregular out-of-core applications for distributed-memory systems
US7373645B2 (en) Method for using extrema to load balance a loop of parallel processing elements
JP2765861B2 (ja) 並列化コンパイル方法
Ren et al. Parallel Optimization of BLAS on a New-Generation Sunway Supercomputer
JPH04307624A (ja) ループ最適化方法及び装置
JPH0628324A (ja) 並列計算機及びコンパイラ