• 検索結果がありません。

東京大学情報基盤センター准教授塙敏博 LU 分解法(3)

N/A
N/A
Protected

Academic year: 2021

シェア "東京大学情報基盤センター准教授塙敏博 LU 分解法(3)"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

LU 分解法(3)

東京大学情報基盤センター 准教授 塙 敏博

2016

7

5

日(火)

10:25-12:10

(2)

!" qNÛàÜ

H$&5! Y¾×¿Ù <: " ;

#$%& 0 ' D ( ?ÛRÜ %$)#(*%#)%$

(3)

講義日程(工学部共通科目 )

1. 4

19

(

今日

)

: ガイダンス

2. 4

26

l

並列数値処理の基本演算(座学)

3. 5

10

日:スパコン利用開始

l

ログイン作業、テストプログラム実行

4. 5

17

l

高性能プログラミング技法の基礎1

(階層メモリ、ループアンローリン グ)

5. 5

24

l

高性能プログラミング技法の基礎2

(キャッシュブロック化)

6. 5

31

l

行列-ベクトル積の並列化

7. 6

7

(8:30-10:15)

★大演習室

2

l べき乗法の並列化

8. 6

7

(10:25-12:10)

l 行列-行列積の並列化(1)

9. 6

14

(8:30-10:15)

★大演習室

2

l 行列-行列積の並列化(2)

10. 6

14

(10:25-12:10)

l LU分解法(1)

l コンテスト課題発表

11. 6

28

l LU分解法(2)

12.

7月

5

l LU分解法(3)

13. 7

12

l 新しいスパコンの紹介・お試し、

(4)

LU 分解法の演習日程

1. 今週

講義&並列化の検討

2. 今週

• LU

分解法並列化実習

3. 今週

• LU

分解法並列化実習

(5)

講義の流れ

1. 並列化実習の続き

2. 並列化のヒント(その2)の説明

(6)

LU 分解並列化のヒント(2)

C 言語版

ほぼ解答が載っています

(7)

LU 分解部分 (1)

• ib = n/numprocs;

istart = myid * ib;

iend = (myid+ 1 )* ib;

/* LU decomposition --- */

for (k=0; k<iend; k++) { idiagPE = k / ib;

if (idiagPE == myid) { /*

枢軸列をもつ

PE */

dtemp = 1.0 / A[k][k];

枢軸列の計算と、

buf[ ]

へ枢軸列をコピー;

for (i=myid+ 1 ; i<numprocs; i++) { /*

枢軸列の転送

*/

MPI_Send(&buf[…], … , MPI_DOUBLE, i, k, MPI_COMM_WORLD);

}

istart = k+ 1 ; /*

担当範囲の縮小

*/

} else { /*

枢軸列を持たない

PE */

MPI_Recv(&buf[…], …, MPI_DOUBLE, idiagPE, k, MPI_COMM_WORLD,

&istatus);

}

(8)

LU 分解部分 (2)

/*

共通消去部分

*/

for (j=k+ 1 ; j<n; j++) { dtemp = buf[j];

for (i=istart; i<iend; i++) { A[j][i] = A[j][i] - A[k][i]*dtemp;

} }

} /* End of k-loop --- */

/*

前進消去にメッセージがかぶらないように同期

--- */

MPI_Barrier(MPI_COMM_WORLD);

(9)

前進代入部分 (1)

• istart = myid * ib; iend = (myid+ 1 ) * ib; /*

担当範囲の初期化

*/

/* Forward substitution --- */

for (k=0; k<n; k++)

c[k] = 0.0; /* cの初期化 */

for (k=0; k<n; k+=ib) { /* 対角ブロック判定用ループ */

if (k >= istart) { /* 担当するブロックがある */

idiagPE = k / ib;

if (myid != 0)

/*

左隣りPEからデータを受け取る

*/

MPI_Recv(&c[k], ib, MPI_DOUBLE, myid-1, k, MPI_COMM_WORLD,

&istatus);

if (myid == idiagPE) { /* 対角ブロックをもつPE*/

/* 対角ブロックだけ先行計算し値を確定させる */

for (kk=0; kk<ib; kk++) {

c[k+kk] = b[k+kk] + c[k+kk];/*

途中結果が送られてくるため必要な変更点*/

for (j=istart; j<istart+kk; j++) c[k+kk] -= A[k+kk][ j ] * c[j];

}

(10)

前進代入部分 (2)

} else { /*

対角ブロックを持たない

PE */

/*

自分の所有範囲のデータのみ計算(まだ最終結果ではない)

*/

for (kk=0; kk<ib; kk++) for (j=istart; j<iend; j++)

c[k+kk] -= A[k+kk][j]*c[j];

/* 右隣のPEに、自分の担当範囲のデータを用いた演算結果を送る */

if (myid != numprocs-1)

MPI_Send(&c[k], ib, MPI_DOUBLE, myid+1, k, MPI_COMM_WORLD);

}

} /* End of if(

担当するブロックがある

) --- */

} /* End of k-loop --- */

(11)

LU 分解並列化のヒント(2)

FORTRAN 言語版

ほぼ解答が載っています

(12)

LU 分解部分 (1)

ib = n/numprocs istart = myid * ib + 1 iend = (myid+1)* ib

c --- LU decomposition --- do k=1, iend

idiagPE = (k-1) / ib c ---

枢軸列をもつPE

if (idiagPE .eq. myid) then dtemp = 1.0 / A(k, k)

枢軸列の計算

c ---

枢軸列の転送

do i=myid+1, numprocs – 1

call MPI_Send(A(k,k)), … , MPI_DOUBLE_PRECISION, i, k, MPI_COMM_WORLD, ierr )

enddo

c ---

担当範囲の縮小

istart = k + 1 else

c ---

枢軸列を持たないPE

call MPI_Recv(A(k,k)), …, MPI_DOUBLE_PRECISION idiagPE, k, MPI_COMM_WORLD, istatus, ierr)

endif

(13)

LU 分解部分 (2)

c ---

共通消去部分

do j=istart, iend dtemp = A( k, j ) do i=k+ 1 , n

A(i , j) = A(i , j) – A(i , k) * dtemp enddo

enddo enddo

c --- End of k-loop ---

c ---

前進消去にメッセージがかぶらないように同期

---

call MPI_Barrier(MPI_COMM_WORLD, ierr)

(14)

前進代入部分 (1)

c ---

担当範囲の初期化

istart = myid * ib + 1 iend = (myid+ 1 ) * ib

c --- Forward substitution --- c --- c

の初期化

do k= 1 , n

c[k] = 0.0 enddo

c ---

対角ブロック判定用ループ

do k= 1 , n, ib

if (k .le. istart) then idiagPE = (k- 1 ) / ib

c ---

担当するブロックがある

if (myid .ne. 0) then

c ---

左隣りPEからデータを受け取る

call MPI_Recv(c(k), ib,

& MPI_DOUBLE_PRECISION,

& myid- 1 , k, MPI_COMM_WORLD,

& istatus, ierr)

if (myid .eq. idiagPE) then c ---

対角ブロックをもつPE

do kk= 1 , ib

c ---

途中結果が送られてくるため必要な変更点

c(k+kk- 1 ) = b(k+kk- 1 ) + c(k+kk- 1 )

c ---対角ブロックだけ先行計算し値を確定させる

do j=istart, istart+kk-2

c(k+kk- 1 ) = c(k+kk- 1 ) - A(k+kk- 1 , j ) * c( j ) enddo

enddo

(15)

前進代入部分 (2)

else

c ---

対角ブロックを持たないPE

do kk=1, ib

do j=istart, iend-1

c(k+kk-1) = c(k+kk-1) –A(k+kk-1, j ) * c( j ) enddo

enddo

c ---

自分の所有範囲のデータのみ計算(まだ最終結果ではない)

if (myid .ne. numprocs-1) then

c ---

右隣のPEに、自分の担当範囲のデータを用いた演算結果を送る

call MPI_Send(c(k), ib, MPI_DOUBLE_PRECISION, myid+ 1 ,

& k, MPI_COMM_WORLD, ierr) endif

endif endif

c --- End of if 担当するブロックがある ---

enddo

c --- End of k-loop ---

(16)

おわり

お疲れ様でした

(17)

yi?^Û .&‚]ZÜ

%, - D %. ? / ? 0 â ¶µÀ×½

#, - D #& ?

! =U¡ GQaÛ1&Ü

"# $ D !% ?â½Åº×Vƒ%

! Ö¹µ× L‰Â½ÄÉÖ¹ÒÍ)m -, ( D %' ?

! ‡4kÉÖ¹ÒÌ×¹7N¡ \Þ Û„-ÎÏӉÔÙÉ´×ÖÙÓ×

¹Ü (, ( D #- ?

! ‡4kÉÖ¹ÒÌ×¹7N¡ \ # Û·ÐÁ»ÑÈÖÁ¸Ü

&, ( D 1% ?

! m * ʸÄÔ_¡

', & D ' ? /2)1$*%$)%(0

ˆ$Qj* #

!

¦N¡

2, & D ' ? /%$)#(*%#)%$0

!

m * m_¡ÛÞÜ

., & D %- ? /2)1$*%$)%(0

ˆ$Qj* #

!

mÝm_¡ÛßÜ

%$, & D %- ? /%$)#(*%#)%$0

!

äåqNÛÞÜ

!

º×½Äx†Xn

%%, & D #2 ?

!

äåqNÛßÜ

%#, áD ( ?

!

äåqNÛàÜ

%1, ' D %# ?

!

>”‹½Åº×¡c؍u”‰

(18)

!" qN¡Qj?^

%, €

3 yiÚ¡Kt

#, €

3 !" qN)j

1, €

3 !" qN)j

(19)

yi¡O±

%, )j¡f

#, ¡Æ×Äۗ¡ßÜ¡w@

(20)

!" q¡Æ×ÄÛßÜ

4 rvT

§¨q`|šœ‹©•

(21)

!" q‚ /%0

3 56 789+9:;<=>?@A 5@BC=B 78;D5E F856A 5G9E 78/;D5EH Þ 0F856A

+F8!"8EG?>;<>@5B5>98********************** F+

I>=8/J7$A88JK5G9EA88JHH08L 5E5CMNO 78J8+856A

5I8/5E5CMNO 778;D5E088L88+F8 J{³¬› NO8F+

EBG;< 78%,$8+8PQJRQJRA

J{¡saž‰ 6:IQ R ¥J{³ºÇÙã

I>=8/57;D5EH Þ A8885K9:;<=>?@A8885HH088L88+F8 J{¡z} F+

SNTUVG9E/W6:IQXRY88X8Y88SNTUZ["\!OY885Y88JY88SNTU4[SSU][^!Z0A 5@BC=B 78JH _8 Þ A +F8 82b¡h, F+

_8G`@G8L888+F8 J{³9˜Ÿ‹ NO8F+

SNTU^G?a/W6:IQXRY88XY88SNTUZ["\!OY885E5CMNOY88JY8SNTU4[SSU][^!ZY88 W5@BCB:@0A

_

(22)

!" q‚ /#0

+F88 P‚ F+

I>=8/b7JH Þ A88bK9A88bHH08L EBG;< 786:IQbRA

I>=8/575@BC=BA885K5G9EA885HH08L PQbRQ5R878PQbRQ5R8* PQJRQ5RFEBG;<A _8

_

_8+F8O9E8>I8J*`>><8*************************************** F+

+F88 P ÎÁ¾Ù¼Ž¤®Ÿ‹­Œ F **************************** F+

SNTU\C==5G=/SNTU4[SSU][^!Z0A

(23)

‚ /%0

3 5@BC=B 78;D5E F856A 5G9E 78/;D5EH Þ 08F856A8888+F8 82b¡F F+

+F8c>=dC=E8@:6@B5B:B5>98****************** F+

I>=8/J7$A8 JK9A88JHH08

?QJR878$,$A888+F8? ¡F F+8

I>=8/J7$A88JK9A88JH756088L8 +F8 +pÈÖÁ¸(VÔÙÉ F+

5I8/J8e785@BC=B088L888+F8 82•°ÈÖÁ¸Š° F+

5E5CMNO 78J8+856A 5I8/;D5E f78$08

+F /…¯ NO Ž®ÃÙ¿³’° F+8

SNTU^G?a/W?QJRY856Y8SNTUZ["\!OY8;D5E* Þ Y8JY8SNTU4[SSU][^!ZY8 W5@BCB:@0A

5I8/;D5E 7785E5CMNO088L +F8 +pÈÖÁ¸³¬› NOF+

+F88 +pÈÖÁ¸™’msa”³[(“–° F+8 I>=8/JJ7$A88JJK56A88JJHH08L

?QJHJJR8786QJHJJR8H8?QJHJJRA+F8 ~eI}®±œ‘°˜«3oŸ#BS F+

I>=8/b75@BC=BA888bK5@BC=BHJJA888bHH0

?QJHJJR8*788PQJHJJRQ8b8R8F8?QbRA

_

(24)

‚ /#0

_8G`@G8L +F8 +pÈÖÁ¸³9˜Ÿ‹ NO8 F+

+F88 l¡6Eb¡ÃÙ¿¡ªsaÛ©™CdeI¢Ÿ‹Ü F+

I>=8/JJ7$A88JJK56A88JJHH0 I>=8/b75@BC=BA888bK5G9EA888bHH0

?QJHJJR8*78PQJHJJRQbRF?QbRA

+F8 …¡ NO  ‰l¡82b¡ÃÙ¿³V‹˜QaeI³}° F+8 5I8/;D5E f789:;<=>?@* Þ 0

SNTUVG9E/W?QJRY856Y8SNTUZ["\!OY8;D5EH Þ Y8JY8 SNTU4[SSU][^!Z0A

_

_8 +F8O9E8>I85I/ 82•°ÈÖÁ¸Š° 08********************************* F+

_8 +F8O9E8>I8J*`>><8*************************************************** F+

(25)

!" q¡Æ×ÄÛßÜ

c[^g^Ph rvT

§¨q`|šœ‹©•

(26)

!" q‚ /%0

3

56 789+9:;<=>?@

5@BC=B 78;D5E F856 H8 Þ 5G9E 78/;D5EH Þ 0F856

?8888888*** !"8EG?>;<>@5B5>98**********************

E>8J7 Þ Y885G9E

5E5CMNO 78/J* Þ 08+856

?8888888888*** J{³¬› NO8

5I8/5E5CMNO ,Gi,88;D5E08BjG9 EBG;< 78%,$8+8P/JY8J0 J{¡sa

?88888888888888*** J{¡z}

E>857;D5EH Þ Y889:;<=>?@ k Þ

?C``8SNTUVG9E/P/JYJ00Y88X8Y88SNTUZ["\!OUN^O4TVT[hY8885Y88JY88SNTU4[SSU][^!ZY88 5G== 0

G9EE>

?8888888888888*** 82b¡h,

5@BC=B 78J8H8 Þ G`@G8

?88888888888*** J{³9˜Ÿ‹ NO

?C``8SNTU^G?a/P/JYJ00Y88XY88SNTUZ["\!OUN^O4TVT[h885E5CMNOY88JY88SNTU4[SSU][^!ZY88 5@BCB:@Y85G==0

G9E5I

(27)

!" q‚ /#0

?88888888888*** P‚

E>8b75@BC=BY885G9E EBG;< 78P/8JY8b80 E>857JH Þ Y89

P/5 Y8b0878P/5 Y8b08k P/5 Y8J08F8EBG;<

G9EE>

G9EE>

G9EE>

?8888888888*** O9E8>I8J*`>><8***************************************

?8888888888*** P ÎÁ¾Ù¼Ž¤®Ÿ‹­Œ F *****************************

?C``8SNTU\C==5G=/SNTU4[SSU][^!ZY885G==0

(28)

‚ /%0

?8888*** 82b¡F

5@BC=B 78;D5E F856 H8 Þ 5G9E 78/;D5EH Þ 08F856

?8888*** c>=dC=E8@:6@B5B:B5>98******************

?8888*** ?8 ¡F

E>8J7 Þ Y889

?QJR878$,$ G9EE>

?888*** +pÈÖÁ¸(VÔÙÉ

E>8J7 Þ Y889Y8856

5I8/J8,`G,885@BC=B08BjG98 5E5CMNO 78/J* Þ 08+856

?88888888*** 82•°ÈÖÁ¸Š°

5I8/;D5E ,9G,8$08BjG9

?888888888888*** /…¯ NO Ž®ÃÙ¿³’°

?C``8SNTU^G?a/?/J0Y856Y8

W888888888888SNTUZ["\!OUN^O4TVT[hY8 W888888888888;D5E* Þ Y8JY8SNTU4[SSU][^!ZY8 W8888888888885@BCB:@Y85G==0

5I8/;D5E ,Gi,885E5CMNO088BjG9

?8888888888888*** +pÈÖÁ¸³¬› NO

E>8JJ7 Þ Y8856

?888888888888888*** ~eI}®±œ‘°˜«3oŸ#BS

?/JHJJ* Þ 08786/JHJJ* Þ 08H8?/JHJJ* Þ 08

?888888888888888*** +pÈÖÁ¸™’msa”³[(“–°

E>8b75@BC=BY85@BC=BHJJ*#

?/JHJJ* Þ 0878?/JHJJ* Þ 08* P/JHJJ* Þ Y88b808F8?/8b80 G9EE>

G9EE>

(29)

‚ /#0

G`@G8

?8888888888*** +pÈÖÁ¸³9˜Ÿ‹ NO

E>8JJ7 Þ Y8856

E>8b75@BC=BY885G9E* Þ

?/JHJJ* Þ 08788?/JHJJ* Þ 08kP/JHJJ* Þ Y88b808F8?/8b80 G9EE>

G9EE>

?8888888888*** l¡6Eb¡ÃÙ¿¡ªsaÛ©™CdeI¢Ÿ‹Ü

5I8/;D5E ,9G,889:;<=>?@* Þ 08BjG9

?88888888888888*** …¡ NO  ‰l¡82b¡ÃÙ¿³V‹˜QaeI³}°

?C``8SNTUVG9E/?/J0Y856Y8SNTUZ["\!OUN^O4TVT[hY88;D5EH Þ Y8 W8888888888888888888JY8SNTU4[SSU][^!ZY885G==0

G9E5I G9E5I G9E5I

?88888*** O9E8>I85I882•°ÈÖÁ¸Š° ***************************************

G9EE>

?88*** O9E8>I8J*`>><8********************************************************************

(30)

²¯

W±M”˜

参照

関連したドキュメント

学識経験者 小玉 祐一郎 神戸芸術工科大学 教授 学識経験者 小玉 祐 郎   神戸芸術工科大学  教授. 東京都

講師:首都大学東京 システムデザイン学部 知能機械システムコース 准教授 三好 洋美先生 芝浦工業大学 システム理工学部 生命科学科 助教 中村

学識経験者 品川 明 (しながわ あきら) 学習院女子大学 環境教育センター 教授 学識経験者 柳井 重人 (やない しげと) 千葉大学大学院

会長 各務 茂夫 (東京大学教授 産学協創推進本部イノベーション推進部長) 専務理事 牧原 宙哉(東京大学 法学部 4年). 副会長

関谷 直也 東京大学大学院情報学環総合防災情報研究センター准教授 小宮山 庄一 危機管理室⻑. 岩田 直子

東京大学大学院 工学系研究科 建築学専攻 教授 赤司泰義 委員 早稲田大学 政治経済学術院 教授 有村俊秀 委員.. 公益財団法人

司会 森本 郁代(関西学院大学法学部教授/手話言語研究センター副長). 第二部「手話言語に楽しく触れ合ってみましょう」

山本 雅代(関西学院大学国際学部教授/手話言語研究センター長)