30
LU 分解法(3) 東京大学情報基盤センター 准教授 敏博 スパコンプログラミング(1)、(1 201675日(火) 10:25-12:10 2016/7/5

LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

LU分解法(3)

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

スパコンプログラミング(1)、(Ⅰ) 1

2016年7月5日(火) 10:25-12:10

2016/7/5

Page 2: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!"

!

#$%& ' ( %$)#(*%#)%$

#$%&+'+(

Page 3: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

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

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 行列-ベクトル積の並列化

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 2

7. 6月7日(8:30-10:15)★大演習室2l べき乗法の並列化

8. 6月7日(10:25-12:10)l 行列-行列積の並列化(1)

9. 6月14日(8:30-10:15)★大演習室2l 行列-行列積の並列化(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 新しいスパコンの紹介・お試し、

レポートおよびコンテスト課題(締切:

2016年8月8日(月)24時 厳守

Page 4: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

LU分解法の演習日程1. 今週

• 講義&並列化の検討

2. 今週• LU分解法並列化実習

3. 今週• LU分解法並列化実習

スパコンプログラミング(1)、(Ⅰ) 32016/7/5

Page 5: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

講義の流れ

1. 並列化実習の続き

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

スパコンプログラミング(1)、(Ⅰ) 42016/7/5

Page 6: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

LU分解並列化のヒント(2)C言語版ほぼ解答が載っています

スパコンプログラミング(1)、(Ⅰ) 52016/7/5

Page 7: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

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);

}

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 6

Page 8: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

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);

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 7

Page 9: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

前進代入部分(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];}

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 8

Page 10: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月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 --------------------------------------------------- */

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 9

Page 11: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

LU分解並列化のヒント(2)FORTRAN言語版ほぼ解答が載っています

スパコンプログラミング(1)、(Ⅰ) 102016/7/5

Page 12: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

LU分解部分(1)• ib = n/numprocs

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

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

idiagPE = (k-1) / ibc ---枢軸列をもつPE

if (idiagPE .eq. myid) thendtemp = 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 )

enddoc --- 担当範囲の縮小

istart = k + 1else

c ---枢軸列を持たないPEcall MPI_Recv(A(k,k)), …, MPI_DOUBLE_PRECISION idiagPE, k, MPI_COMM_WORLD,

istatus, ierr)endif

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 11

Page 13: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

LU分解部分(2)c --- 共通消去部分

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

A(i , j) = A(i , j) – A(i , k) * dtempenddo

enddo

enddoc --- End of k-loop ---------------------------------------

c --- 前進消去にメッセージがかぶらないように同期 -----------------------------call MPI_Barrier(MPI_COMM_WORLD, ierr)

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 12

Page 14: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

前進代入部分(1)c ---担当範囲の初期化

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

c --- Forward substitution ------------------c --- c の初期化

do k=1, nc[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)

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 13

if (myid .eq. idiagPE) thenc ---対角ブロックをもつPE

do kk=1, ibc ---途中結果が送られてくるため必要な変更点

c(k+kk-1) = b(k+kk-1) + c(k+kk-1) c ---対角ブロックだけ先行計算し値を確定させる

do j=istart, istart+kk-2c(k+kk-1) = c(k+kk-1) - A(k+kk-1, j ) * c( j )

enddoenddo

Page 15: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

前進代入部分(2)else

c ---対角ブロックを持たないPEdo kk=1, ib

do j=istart, iend-1c(k+kk-1) = c(k+kk-1) –A(k+kk-1, j ) * c( j )

enddoenddo

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

endifendif

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

2016/7/5 スパコンプログラミング(1)、(Ⅰ) 14

Page 16: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

おわり

お疲れ様でした

スパコンプログラミング(1)、(Ⅰ) 152016/7/5

Page 17: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

%, - %. / 0#, - #&

!

"# $ !%!

-, ( %'!

(, ( #-! #

&, ( 1%! *

#$%&+'+( &

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

!

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

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

!

%$, & %- /%$)#(*%#)%$0!

!

%%, & #2!

%#, (!

%1, ' %#!

&%!' ( ( &)

Page 18: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!"%,

3

#,3 !"

1,3 !"

"#$%&+'+(

Page 19: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

%,#,

)#$%&+'+(

Page 20: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!"4

$#$%&+'+(

Page 21: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!" /%03 56 789+9:;<=>?@A5@BC=B 78;D5E F856A5G9E 78/;D5EH 0F856A

+F8!"8EG?>;<>@5B5>98********************** F+I>=8/J7$A8 8JK5G9EA88JHH08L5E5CMNO 78J8+856A5I8/5E5CMNO 778;D5E088L88+F8 NO8F+

EBG;< 78%,$8+8PQJRQJRA6:IQ R

I>=8/57;D5EH A8885K9:;<=>?@A8885HH088L88+F8 F+SNTUVG9E/W6:IQXRY8 8X8Y88SNTUZ["\!OY885Y88JY88SNTU4[SSU][^!Z0A_85@BC=B 78JH A +F8 F+_8G`@G8L888+F8 NO8F+SNTU^G?a/W6:IQXRY8 8XY88SNTUZ["\!OY885E5CMNOY88JY8SNTU4[SSU][^!ZY88

W5@BCB:@0A_

#$%&+'+( '

Page 22: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!" /#0+F88 F+I>=8/b7JH A8 8bK9A88bHH08LEBG;< 786:IQbRAI>=8/575@BC=BA8 85K5G9EA885HH08LPQbRQ5R878PQbRQ5R8* PQJRQ5RFEBG;<A

_8_

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

+F88 **************************** F+SNTU\C==5G=/SNTU4[SSU][^!Z0A

#$%&+'+( *

Page 23: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

/%03 5@BC=B 78;D5E F856A 5G9E 78/;D5EH 08F856A8888+F8 F++F8c>=dC=E8@:6@B5B:B5>98****************** F+I>=8/J7$A8 JK9A88JHH08?QJR878$,$A888+F8? F+8

I>=8/J7$A88JK9A88JH756088L8 +F8 F+5I8/J8e785@BC=B088L888+F8 F+5E5CMNO 78J8+856A5I8/;D5E f78$08+F NO F+8SNTU^G?a/W?QJRY856Y8SNTUZ["\!OY8;D5E* Y8JY8SNTU4[SSU][^!ZY8

W5@BCB:@0A5I8/;D5E 7785E5CMNO088L +F8 NOF++F88 F+8I>=8/JJ7$A88JJK56A88JJHH08L?QJHJJR8786QJHJJR8H8?QJHJJRA+F8 F+I>=8/b75@BC=BA888bK5@BC=BHJJA888bHH0?QJHJJR8*788PQJHJJRQ8b8R8F8?QbRA

_

#$%&+'+( (

Page 24: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

/#0_8G`@G8L +F8 NO8 F+

+F88 F+I>=8/JJ7$A88JJK56A88JJHH0I>=8/b75@BC=BA888bK5G9EA888bHH0?QJHJJR8*78PQJHJJRQbRF?QbRA

+F8 NO F+85I8/;D5E f789:;<=>?@* 0SNTUVG9E/W?QJRY856Y8SNTUZ["\!OY8;D5EH Y8JY8

SNTU4[SSU][^!Z0A_

_8 +F8O9E8>I85I/ 08********************************* F+_8 +F8O9E8>I8J*`>><8*************************************************** F+

#$%&+'+( +

Page 25: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!"c[^g^Ph

!%#$%&+'+(

Page 26: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!" /%03 56 789+9:;<=>?@

5@BC=B 78;D5E F856 H85G9E 78/;D5EH 0F856

?8888888*** !"8EG?>;<>@5B5>98**********************E>8J7 Y885G9E5E5CMNO 78/J* 08+856

?8888888888*** NO85I8/5E5CMNO ,Gi,88;D5E08BjG9

EBG;< 78%,$8+8P/JY8J0

?88888888888888***E>857;D5EH Y889:;<=>?@ k?C``8SNTUVG9E/P/JYJ00Y88X8Y88SNTUZ["\!OUN^O4TVT[hY8885Y88JY88SNTU4[SSU][^!ZY88

5G== 0G9EE>

?8888888888888***5@BC=B 78J8H8G`@G8

?88888888888*** NO?C``8SNTU^G?a/P/JYJ00Y88XY88SNTUZ["\!OUN^O4TVT[h885E5CMNOY88JY88SNTU4[SSU][^!ZY88

5@BCB:@Y85G==0G9E5I

#$%&+'+( !!

Page 27: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!" /#0?88888888888***

E>8b75@BC=BY8 85G9EEBG;< 78P/8JY8b80E>857JH Y89P/5 Y8b0878P/5 Y8b08k P/5 Y8J08F8EBG;<

G9EE>G9EE>

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

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

#$%&+'+( !&

Page 28: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

/%0?8888***5@BC=B 78;D5E F856 H85G9E 78/;D5EH 08F856

?8888*** c>=dC=E8@:6@B5B:B5>98******************?8888*** ?8E>8J7 Y8 89?QJR878$,$ G9EE>

?888***E>8J7 Y8 89Y88565I8/J8,`G,885@BC=B08 BjG985E5CMNO 78/J* 08+856

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

?888888888888*** NO?C``8SNTU^G?a/?/J0Y8 56Y8

W888888888888SNTUZ["\!OUN^O4TVT[hY8W888888888888;D5E* Y8JY8SNTU4[SSU][^!ZY8W8888888888885@BCB:@Y85G==0

#$%&+'+( !"

5I8/;D5E ,Gi,885E5CMNO088BjG9?8888888888888*** NO

E>8JJ7 Y8 856?888888888888888***

?/JHJJ* 08786/JHJJ* 08H8?/JHJJ* 08?888888888888888***

E>8b75@BC=BY8 5@BC=BHJJ*#?/JHJJ* 0878?/JHJJ* 08* P/JHJJ* Y8 8b808F8?/8b80

G9EE>G9EE>

Page 29: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

/#0G`@G8

?8888888888*** NOE>8JJ7 Y8856E>8b75@BC=BY885G9E*?/JHJJ* 08788?/JHJJ* 08kP/JHJJ* Y88b808F8?/8b80

G9EE>G9EE>

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

?88888888888888*** NO?C``8SNTUVG9E/?/J0Y856Y8SNTUZ["\!OUN^O4TVT[hY88;D5EH Y8

W8888888888888888888JY8SNTU4[SSU][^!ZY8 85G==0G9E5I

G9E5IG9E5I

?88888*** O9E8>I85I8 ***************************************G9EE>?88*** O9E8>I8J*`>><8********************************************************************

#$%&+'+( !)

Page 30: LU分解法(3)講義日程(工学部共通科目) 1. 4月19日(今日):ガイダンス 2. 4月26日 l 並列数値処理の基本演算(座学) 3. 5月10日:スパコン利用開始

!$#$%&+'+(