89
並列アプリケーション開発法入門 IV粒子間熱伝導問題解析粒子間熱伝導問題解析並列化 並列化 2011年夏季集中講義 中島研吾 中島研吾 並列計算プログラミング(616-2057)・先端計算機演習I616-4009

2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

並列アプリケーション開発法入門(IV)

粒子間熱伝導問題解析コ ド粒子間熱伝導問題解析コード並列化並列化

2011年夏季集中講義

中島研吾中島研吾

並列計算プログラミング(616-2057)・先端計算機演習I(616-4009)

Page 2: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 2

概 要概 要

• 問題設定

• 1CPU用プログラムの解説

• 並列プログラムの解説• 並列プログラムの解説

Page 3: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 3

問題設定(1/5)問題設定(1/5)• 空間上に規則正しく,X,Y,Z方向にNX,NY,NZ個ずつ等, , , ,間隔(DX,DY,DZ)に配置された粒子の集合体を考える。

Page 4: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 4

問題設定(2/5)粒子iに関する熱流束の/釣り合い

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

j ijij

i

Y

X

Page 5: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 5

問題設定(3/5)粒子間熱伝導

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

i ijij

粒子iを中心とする粒子iを中心とする,半径RADImaxの球(円)

i

Y

X

Page 6: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 6

問題設定(3/5)粒子間熱伝導

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

i ijij

粒子iを中心とする粒子iを中心とする,半径RADImaxの球(円)

i

粒子間の距離DELijがRADImaxのよりも小さい

粒子群とのみ熱伝導が粒 群 熱伝導ある。

Y

X

Page 7: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 7

問題設定(3/5)粒子間熱伝導

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

i ijij

粒子iを中心とする

断面積=AREA

粒子iを中心とする,半径RADImaxの球(円)

i

粒子間の距離DELijがRADImaxのよりも小さい

粒子群とのみ熱伝導がi熱伝導率

CO粒 群 熱伝導ある。

長さDEL 断面積AREA

CONDij

長さDEL,断面積AREA,熱伝導率CONDijの管で連結

Page 8: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 8

熱伝導率:COND熱伝導率:CONDij

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

i ijij

( )201010min0

DELijCONDCOND = ( )10,10min

iDELij

COND0 「基準」熱伝導率

Page 9: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 9

問題設定(4/5)対流熱伝達

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

i ijij

対流熱伝達率

X=0

対流熱伝達率HCONVi= HCONV if X=0= 0 otherwise

i

= 0 otherwise

熱交換面積SURFSURF

雰囲気温度Y

T0

X

Page 10: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 10

問題設定(5/5)体積発熱

<RADIDEL

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

i ijij

体積発熱量 QVOL

発熱体積 V

222

21 DELQVOLCVOLCV ⋅⋅+⋅=222

iii ZYXDELQ ++=

C1, C2 定数VOL 各粒子の「基準」体積DELQ 粒子中心と原点との距離DELQ 粒子中心と原点との距離

Page 11: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 11

粒子iに関するつりあい粒子 関する りあ

( ) ( ) 0/ 0

max

=⋅+−⋅⋅+−∑<

VQVOLTTSURFHCONVTTCONDDEL

AREAiiij

RADIDEL

j ijijj ijij

maxmax

⎥⎤

⎢⎡

−⎥⎤

⎢⎡

∑∑<<

TAREATAREAi

RADIDELRADIDEL

j

0

//

0 =⋅+⋅⋅−⋅⋅+

⎥⎥⎦⎢

⎢⎣⎥

⎥⎦⎢

⎢⎣

∑∑

VQVOLTSURFHCONVTSURFHCONV

TCONDDEL

TCONDDEL

iii

ij ijijj

jijij

TCONDDEL

AREATSURFHCONVCONDDEL

AREA RADIDEL

jj

ijiji

RADIDEL

ji

ijij ⎥⎥⎦

⎢⎢⎣

⎡+

⎥⎥⎦

⎢⎢⎣

⎡⋅−− ∑∑

<< maxmax

//

VQVOLTSURFHCONVi

j ijijj ijij

⋅−⋅⋅−=

⎥⎦⎢⎣⎥⎦⎢⎣

0

AMAT(i,i)(対角成分) AMAT(i,j)(非対角成分)

VQVOLTSURFHCONVi 0

RHS(右辺)

Page 12: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 12

係数行列 AMAT係数行列 AMAT• 影響範囲 RADImax が小さければ,係数行列は疎影響範囲 max 小さけれ ,係数行列 疎

– 局所的な効果

• 影響範囲が大きければ 係数行列は密影響範囲が大きければ,係数行列は密

– 非ゼロ成分の割合が大きくなる

ii

Page 13: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 13

疎行列と密行列: {q}=[A]{p}疎行列と密行列: {q} [A]{p}疎行列:差分法,有限要素法,有限体積法

do i= 1, Nq(i)= D(i)*p(i)d k i d (i 1) 1 i d (i)do k= index(i-1)+1, index(i)q(i)= q(i) + AMATs(k)*p(item(k))

enddoenddo

密行列 スペクトル法 分子動力学 境界要素法do i= 1, N

q(i)= 0 d0

密行列:スペクトル法,分子動力学,境界要素法

q(i)= 0.d0do j= 1, Nq(i)= q(i) + AMATd(i,j)*p(j)ddenddo

enddo

Page 14: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 14

係数行列 AMAT係数行列 AMAT• 影響範囲 RADImax が小さければ,係数行列は疎影響範囲 max 小さけれ ,係数行列 疎

– 局所的な効果

• 影響範囲が大きければ 係数行列は密影響範囲が大きければ,係数行列は密

– 非ゼロ成分の割合が大きくなる

• 影響範囲が大きくなる場合のことを考えて,プログラムの中では係数行列を「密(AMATd(i j))」として扱うの中では係数行列を「密(AMATd(i,j))」として扱う。

Page 15: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 15

• 問題設定

• 1CPU用プログラムの解説

• 並列プログラムの解説• 並列プログラムの解説

Page 16: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 16

ファイル on ECCS2008$> cp /home03/skengon/Documents/class/EPSsummer/sphere.tar .$> t f h t$> tar xvf sphere.tar$> ls

sphere$> cd sphere ⇒ <$E SPHERE>$> cd sphere ⇒ <$E-SPHERE>$> ls

C F$> cd C$> cd C$> ls

inp1 test.c testp.c testp2.c

$> cd ../F$> ls

inp1 test.f testp.f testp2.fp p p

Page 17: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 17

コンパイル,実行,実行

$> cd <$E-SPHERE>/C$ 3$> cc –O3 test.c -o sps$> ./sps$> ls -l sphere*

sphere.fld spheredata

$> cd <$SPHERE>/F$ $$> g95 –O3 test.f -o sps$> ./sps$> ls -l sphere*$> ls l sphere

sphere.fld spheredata

Page 18: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 18

sps: ファイル,データp ,

sphere.fld(名称固定)

inp1

計算結果(形状)

spsinp1

(名称固定)spheredata(名称固定)

計算結果(名称固定) (温度)制御データ

Page 19: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 19

制御データ:inp1制御 p10 10 10 NX, NY, NZ1.e0 1.e0 1.e0 DX, DY, DZ1.e0 10.e0 1.e0 1.e0 VOL, AREA, QVOL, COND01.e24 0.e0 10.e0 HCONV, T0, SURF, ,8.0e0 RADImax1.0e0 0.1e0 C1, C2

Page 20: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 20

計算結果(形状):sphere fld計算結果(形状):sphere.fld*.fldの形式であれば名称は任意

# AVS field file 必須ndim= 3 三次元モデルであることを示すndim 3 次元 デルである とを示すdim1= 10 NXdim2= 10 NYdim3= 10 NZdim3= 10 NZnspace= 3veclen= 1data= floatdata= floatfield= uniformlabel= temperature

/ 温度フ イル名variable 1 file=./spheredata filetype=ascii 温度ファイル名

Page 21: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 21

計算結果(温度):spheredata計算結果(温度):spheredata計算結果(形状)からの参照が正しければ名称は任意

1.188402E-245.388751E+009.485117E+001.311638E+011 630137E+011.630137E+01

open (22, file='spheredata', status='unknown')do i= 1, NX*XY*NZ

write (22,'(1pe16.6)') PHI(i)enddo

Page 22: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 22

シリアル版の計算手順シリアル版の計算手順

• 制御データ入力• 制御デ タ入力

• 粒子生成

係数 トリク 計算• 係数マトリクス計算

– 熱伝導

– 対流熱伝達

– 発熱

• CG法による連立一次方程式求解

– 密行列

– 点ヤコビ前処理

• 出力出力

– MicroAVS用

Page 23: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 23

test.f:シリアル版(1/10)初期設定

implicit REAL*8 (A-H,O-Z)

real(kind=8) :: VOL, AREA, QVOL, COND0, COND, RADImaxreal(kind=8) :: HCONV, T0, SURF, DEL, DEL0, coef1, coef2real(kind=8), dimension(:) , allocatable :: XC, YC, ZCreal(kind=8), dimension(:,:), allocatable :: AMATreal(kind=8), dimension(:) , allocatable :: RHSreal(kind=8), dimension(:) , allocatable :: PHIreal(kind=8), dimension(:,:), allocatable :: W

integer :: NX NY NZ Ninteger :: NX, NY, NZ, Ninteger :: R, Z, P, Q, DD

!C!C +------+!C | INIT |!C +------+!C===

open (11, file= 'inp1', status='unknown')read (11,*) NX, NY, NZread (11 *) DX DY DZread (11,*) DX, DY, DZread (11,*) VOL, AREA, QVOL, COND0read (11,*) HCONV, T0, SURFread (11,*) RADImaxread (11,*) coef1, coef2( , ) ,

close (11)

N= NX*NY*NZ

Page 24: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 24

test.f:シリアル版(2/10)粒子中心の座標(XC,YC,ZC)

allocate (XC(N) YC(N) ZC(N))allocate (XC(N), YC(N), ZC(N))

icou= 0do k= 1, NZdo j= 1, NYdo i= 1, NX

icou= icou + 1XC(icou)= dfloat(i-1)*DXYC(icou)= dfloat(j-1)*DYZC(icou)= dfloat(k-1)*DZZC(icou)= dfloat(k-1)*DZ

enddoenddo

enddo!C===

粒子の通し番号 ii (1~N)ii=(k-1)*NX*NY + (j-1)*NX + i

Page 25: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 25

test.f:シリアル版(3/10)マトリクス生成:熱伝導部分

!C!C +--------+ AREARADIDEL ⎤⎡ < max!C + +!C | MATRIX |!C +--------+!C===

allocate (AMAT(N,N), RHS(N)) AREA

TSURFHCONVCONDDEL

AREA

RADIDEL

ij

iijij

⎥⎤

⎢⎡

+⎥⎥⎦

⎢⎢⎣

⎡⋅−−

∑< max

max

/

AMAT= 0.d0RHS = 0.d0do i= 1, Ndo j= 1 N

VQVOLTSURFHCONV

TCONDDEL

AREA

i

jj

ijij

⋅−⋅⋅−=

⎥⎥⎦⎢

⎢⎣

0

/

do j= 1, Nif (j.ne.i) then

DEL= dsqrt((XC(i)-XC(j))**2 + (YC(i)-YC(j))**2 && + (ZC(i)-ZC(j))**2)

if (DEL.le.RADImax) thenCOND= COND0/(10.d0**dmin1(DEL,20.d0))coef= COND*AREA / DELAMAT(i,j)= coefAMAT(i,i)= AMAT(i,i) - coef

endif ( )201010min0

DELijCONDCOND =

endifendif

enddoenddo

( )10,10minj

Page 26: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 26

test.f:シリアル版(3/10)マトリクス生成:熱伝導部分

!C!C +--------+ AREARADIDEL ⎤⎡ < max!C + +!C | MATRIX |!C +--------+!C===

allocate (AMAT(N,N), RHS(N)) AREA

TSURFHCONVCONDDEL

AREA

RADIDEL

ij

iijij

⎥⎤

⎢⎡

+⎥⎥⎦

⎢⎢⎣

⎡⋅−−

∑< max

max

/

AMAT= 0.d0RHS = 0.d0do i= 1, Ndo j= 1 N

VQVOLTSURFHCONV

TCONDDEL

AREA

i

jj

ijij

⋅−⋅⋅−=

⎥⎥⎦⎢

⎢⎣

0

/

do j= 1, Nif (j.ne.i) then

DEL= dsqrt((XC(i)-XC(j))**2 + (YC(i)-YC(j))**2 && + (ZC(i)-ZC(j))**2)

if (DEL.le.RADImax) thenCOND= COND0/(10.d0**dmin1(DEL,20.d0))coef= COND*AREA / DELAMAT(i,j)= coefAMAT(i,i)= AMAT(i,i) - coef 対角項

endifendifendif

enddoenddo

Page 27: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 27

test.f:シリアル版(4/10)マトリクス生成:体積発熱

do i= 1, NDELQ= dsqrt(XC(i)**2 + YC(i)**2 + ZC(i)**2)DELQ= dsqrt(XC(i)**2 + YC(i)**2 + ZC(i)**2)RHS(i)= -QVOL*(coef1*VOL + coef2*DELQ*VOL)

enddo

i= 1do k= 1, NZdo j= 1, NYic= (k-1)*NX*NY + (j-1)*NX + iAMAT(ic,ic)= -HCONV*SURF + AMAT(ic,ic)RHS (ic )= -HCONV*SURF*T0 + RHS (ic)RHS (ic )= -HCONV*SURF*T0 + RHS (ic)

enddoenddo

!C===

TSURFHCONVCONDDEL

AREAi

RADIDEL

ji

ijij

+⎥⎥⎦

⎢⎢⎣

⎡⋅−− ∑

< max

/ 222

21

ZYXDELQ

DELQVOLCVOLCV

++=

⋅⋅+⋅=

TCONDDEL

AREARADIDEL

jj

ijij

j ijij

⎥⎥⎦

⎢⎢⎣

⎥⎦⎢⎣

∑< max

/

iii ZYXDELQ ++=

VQVOLTSURFHCONVi

jj

⋅−⋅⋅−=⎦⎣

0

Page 28: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 28

test.f:シリアル版(4/10)マトリクス生成:対流熱伝達

do i= 1, NDELQ= dsqrt(XC(i)**2 + YC(i)**2 + ZC(i)**2)DELQ= dsqrt(XC(i) 2 + YC(i) 2 + ZC(i) 2)RHS(i)= -QVOL*(coef1*VOL + coef2*DELQ*VOL)

enddo

i= 1do k= 1, NZdo j= 1, NYic= (k-1)*NX*NY + (j-1)*NX + iAMAT(ic,ic)= -HCONV*SURF + AMAT(ic,ic)RHS (ic )= -HCONV*SURF*T0 + RHS (ic)RHS (ic )= -HCONV*SURF*T0 + RHS (ic)

enddoenddo

!C===

TSURFHCONVCONDDEL

AREAi

RADIDEL

ji

ijij

−⎥⎥⎦

⎢⎢⎣

⎡⋅−− ∑

< max

/

TCONDDEL

AREARADIDEL

jj

ijij ⎥⎥⎦

⎢⎢⎣

⎡∑< max

/

VQVOLTSURFHCONVi ⋅−⋅⋅−= 0

Page 29: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 29

前処理付き共役勾配法Preconditioned Conjugate Gradient Method (CG)

0 0Compute r(0)= b-[A]x(0)

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

(i 1) (i 1)前処理:対角スケーリング

ρi-1= r(i-1) z(i-1)if i=1p(1)= z(0)

elsex(i) :ベクトル

elseβi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)

endif

αi :スカラー

endifq(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)x x + αipr(i)= r(i-1) - αiq(i)check convergence |r|

end

Page 30: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 30

test.f:シリアル版(5/10)CG法①

!C!C +---------------+ Compute r(0)= b-[A]x(0)!C + +!C | CG iterations |!C +---------------+!C===

EPS= 1.d-08

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

ρi-1= r(i-1) z(i-1)allocate (W(N,4), PHI(N))W = 0.d0PHI= 0.d0

R = 1

if i=1p(1)= z(0)

elseβR = 1

Z = 2Q = 2P = 3DD= 4

βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)

endif(i) [A] (i)

do i= 1, NW(i,DD)= 1.0D0 / AMAT(i,i)

enddo

q(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)r(i) r(i-1) α q(i)

W(i,1)= W(i,R) ⇒ {r}W(i,2)= W(i,Z) ⇒ {z}W(i,2)= W(i,Q) ⇒ {q}

r(i)= r(i 1) - αiq(i)check convergence |r|

endW(i,2) W(i,Q) ⇒ {q}W(i,3)= W(i,P) ⇒ {p}W(i,4)= W(i,DD) ⇒ 1/DIAG

Page 31: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 31

test.f:シリアル版(6/10)CG法②

!C!C-- {r0}= {b} - [A]{xini} | Compute r(0)= b-[A]x(0)!C {r0}= {b} [A]{xini} |

do i= 1, NW(i,R) = RHS(i)do j= 1, N

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

ρi-1= r(i-1) z(i-1)W(i,R) = W(i,R) - AMAT(i,j)*PHI(j)

enddoenddo

BNRM2= 0 0D0

if i=1p(1)= z(0)

elseβBNRM2= 0.0D0

do i= 1, NBNRM2 = BNRM2 + RHS(i)**2

enddo

βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)

endif(i) [A] (i)

!C******************************************do iter= 1, N

!C!C-- {z}= [Minv]{r}

q(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)r(i) r(i-1) α q(i)

do i= 1, NW(i,Z)= W(i,DD) * W(i,R)

enddo

r(i)= r(i 1) - αiq(i)check convergence |r|

end

Page 32: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 32

test.f:シリアル版(7/10)CG法③

!C!C-- RHO= {r}{z} Compute r(0)= b-[A]x(0)!C RHO= {r}{z}

RHO= 0.d0do i= 1, NRHO= RHO + W(i,R)*W(i,Z)

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

ρi-1= r(i-1) z(i-1)enddo

!C!C-- {p} = {z} if ITER=1!C BETA= RHO / RHO1 otherwise

if i=1p(1)= z(0)

elseβ /!C BETA= RHO / RHO1 otherwise

if ( iter.eq.1 ) thendo i= 1, NW(i,P)= W(i,Z)

βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)

endif(i) [A] (i)

enddoelse

BETA= RHO / RHO1do i= 1, NW(i P) W(i Z) + BETA*W(i P)

q(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)r(i) r(i-1) α q(i)W(i,P)= W(i,Z) + BETA*W(i,P)

enddoendif

r(i)= r(i 1) - αiq(i)check convergence |r|

end

Page 33: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 33

test.f:シリアル版(8/10)CG法④

!C!C-- {q}= [A]{p} Compute r(0)= b-[A]x(0)!C {q}= [A]{p}

do i= 1, NW(i,Q) = 0.d0do j= 1, N

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

ρi-1= r(i-1) z(i-1)W(i,Q) = W(i,Q) + AMAT(i,j)*W(j,P)

enddoenddo

!C

if i=1p(1)= z(0)

elseβ!C

!C-- ALPHA= RHO / {p}{q}

C1= 0.d0do i= 1, N

βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)

endif(i) [A] (i)

C1= C1 + W(i,P)*W(i,Q)enddoALPHA= RHO / C1

!C

q(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)r(i)= r(i-1) α q(i)!C

!C-- {x}= {x} + ALPHA*{p}!C {r}= {r} - ALPHA*{q}

do i= 1, N

r(i)= r(i 1) - αiq(i)check convergence |r|

end,

PHI(i) = PHI(i) + ALPHA * W(i,P)W (i,R)= W(i,R) - ALPHA * W(i,Q)

enddo

Page 34: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 34

test.f:シリアル版(9/10)CG法⑤

DNRM2 = 0.0do i= 1 N Compute r(0)= b-[A]x(0)do i= 1, NDNRM2= DNRM2 + W(i,R)**2

enddo

RESID= dsqrt(DNRM2/BNRM2)

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

ρi-1= r(i-1) z(i-1)

write (*, 1000) iter, RESID1000 format (i5, 1pe16.6)

if ( RESID le EPS) goto 900

if i=1p(1)= z(0)

elseβif ( RESID.le.EPS) goto 900

RHO1 = RHO

enddo!C******************************************

βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i-1)

endif(i) [A] (i)

IER = 1

900 continue!C

q(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)r(i) r(i-1) α q(i)!C=== r(i)= r(i 1) - αiq(i)check convergence |r|

end

Page 35: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 35

test.f:シリアル版(10/10)結果出力結果出力

!C!C +--------+!C | OUTPUT |!C | OUTPUT |!C +--------+!C===

N1= 1N3= 3

!C!C-- MESH

open (22, file='sphere.fld', status='unknown')write (22,'(a)') '# AVS field file'write (22 '(a i5)') 'ndim=' N3write (22, (a,i5) ) ndim , N3write (22,'(a,i5)') 'dim1=', NXwrite (22,'(a,i5)') 'dim2=', NYwrite (22,'(a,i5)') 'dim3=', NZwrite (22,'(a,i5)') 'nspace=', N3write (22,'(a,i5)') 'veclen=', N1write (22,'(a,i5)') 'data= float'write (22,'(a,i5)') 'field= uniform'write (22,'(a,i5)') 'label= temperature'write (22 '(a i5)') 'variable 1 file= /spheredata filetype=ascii'write (22, (a,i5) ) variable 1 file=./spheredata filetype=asciiclose (22)

!C!C-- RESULTS

open (22, file='spheredata', status='unknown')do i= 1, Nwrite (22,'(1pe16.6)') PHI(i)

enddo!C===

Page 36: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 36

MicroAVSによる処理(1/4)

Page 37: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 37

MicroAVSによる処理(2/4)

Page 38: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 38

MicroAVSによる処理(3/4)

Page 39: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 39

MicroAVSによる処理(4/4)

Page 40: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 40

• 問題設定

• 1CPU用プログラムの解説

• 並列プログラムの解説• 並列プログラムの解説

Page 41: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 41

粒子間熱伝導コードの並列化粒子間熱伝導コ ドの並列化

• 未知数をNとする。

• 有限要素法,有限体積法に必要な記憶容量

– 未知数ベクトル: O(N)

– 係数マトリクス: O(N)

• 粒子間熱伝導コードで必要な記憶容量粒子間熱伝導コ ドで必要な記憶容量

– 未知数ベクトル: O(N)

– 係数マトリクス: O(N2):Nの値は必然的に小さくなる係数マトリクス: O(N ):Nの値は必然的に小さくなる

• 本手法では,係数マトリクスが必要な記憶容量のほとんどを占めるため:んどを占めるため:

– 未知数ベクトル,形状については各PEが全体情報を記憶する:eps fvmのときのような領域分割は不要する:eps_fvmのときのような領域分割は不要。

– 係数マトリクスを各PEに分散して記憶する。

Page 42: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 42

行列ベクトル積の例(1/5)行列 クトル積の例(1/5)

{q} {p}[A]

= x

Page 43: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 43

行列ベクトル積の例(2/5)行列 クトル積の例(2/5)

{q} {p}[A]

#PE0

= x

#PE1

#PE2

#PE3

各PEで分散して記憶各PEで

全体を記憶

Page 44: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 44

行列ベクトル積の例(3/5)行列 クトル積の例(3/5){q} {p}[A]{q} {p}[ ]

#PE0

#PE1

= x

#PE1

#PE2

#PE3

各PEで分散して記憶各PEで

全体を記憶

Page 45: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 45

行列ベクトル積の例(3/5)行列 クトル積の例(3/5){q} {p}[A]{q} {p}[ ]

#PE0

#PE1

= x

#PE1

#PE2

#PE3

各PEで分散して記憶各PEで

全体を記憶MPI_ALLREDUCEALLGATHERVで一つにまとめる

Page 46: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 46

行列ベクトル積の例(4/5)行列ベクトル積の例(4/5)MPI_ALLREDUCE使用(白い部分は0)

{q}PE0 {q}PE1 {q}PE2 {q}PE3 {q}{ }PE0 { }PE1 { }PE2 { }PE3 { }

#PE0

#PE1

#PE2+ + + =

#PE3

Page 47: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 47

行列ベクトル積の例(5/5)行列ベクトル積の例(5/5)MPI_ALLGATHERV使用

{q}PE0 {q}PE1 {q}PE2 {q}PE3 {q}{ }PE0 { }PE1 { }PE2 { }PE3 { }

#PE0

#PE1

#PE2+ + + =

#PE3

Page 48: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 48

行列ベクトル積:有限体積法等(疎行列)行列 クトル積:有限体積法等(疎行列)

{q} {p}[A]

#PE0

= x

#PE1

#PE2

#PE3

各PEで分散して記憶各PEで

分散して記憶各PEで

分散して記憶

Page 49: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 49

ファイル on T2K$> cd$> cp /home/t00000/EPSsummer/sphere.tar .$> tar xvf sphere.tar$> ls$

sphere$> cd sphere ⇒ <$T-SPHERE>$> ls$> ls

C F$> cd C$> ls$> ls

inp1 test.c testp.c testp2.c

$ d /$> cd ../F$> ls

inp1 test.f testp.f testp2.f

Page 50: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 50

コンパイル,実行,実行

$> cd <$T-SPHERE>/C$> mpicc –Os -noparallel testp.c -o spp[go.sh修正]$> qsub go.sh$ q g$> ls -l sphere*

sphere.fld spheredata

$> cd <$T-SPHERE>/F$> mpif90 –Oss -noparallel testp.f -o spp[go sh修正][go.sh修正]$> qsub go.sh $> ls -l sphere*

sphere.fld spheredata

Page 51: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 51

spp: ファイル,データpp ,

sphere.fld(名称固定)

inp1

計算結果(形状)

sppinp1

(名称固定)spheredata(名称固定)

計算結果(名称固定) (温度)制御データ

Page 52: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 52

T2K ⇒ECCS2008:ファイルコピーT2K ⇒ECCS2008:ファイルコピscpコマンドを使う

① ECCS2008にログイン

② T2K上の /home/t50000/EPSsummer/sphere/F/sphere.fld を ECCS2008へ持って来たいときは③のようにするは③のようにする

③ $> scp [email protected]:~/EPSsummer/sphere/F/sphere.fld .

でも同じようにするPuTTY on Windowsでも同じようにする

Page 53: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 53

testp.f:パラレル版(1/12)p初期設定①

implicit REAL*8 (A-H,O-Z)

include 'mpif.h'

real(kind=8) :: VOL, AREA, QVOL, COND0, COND, RADImaxreal(kind=8) :: HCONV, T0, SURF, DEL, DEL0, coef1, coef2real(kind=8), dimension(:) , allocatable :: XC, YC, ZCreal(kind=8), dimension(:,:), allocatable :: AMATreal(kind=8), dimension(:) , allocatable :: RHSreal(kind=8), dimension(:) , allocatable :: PHIreal(kind=8) dimension(: :) allocatable :: Wreal(kind=8), dimension(:,:), allocatable :: W

integer :: NX, NY, NZ, Ninteger :: R, Z, P, Q, DD, WK

integer :: PETOT, PEsmpTOT, my_rank, errnointeger, dimension(:) , allocatable :: NElocal, AGVindexinteger, dimension(:) , allocatable :: PEon

!C!C + +!C +------+!C | INIT |!C +------+!C===

call MPI INIT (ierr)_ ( )call MPI_COMM_SIZE (MPI_COMM_WORLD, PETOT , ierr)call MPI_COMM_RANK (MPI_COMM_WORLD, my_rank , ierr)

Page 54: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 54

testp.f:パラレル版(2/12)p初期設定②:同じ制御データ

open (11, file= 'inp1', status='unknown')read (11 *) NX NY NZread (11,*) NX, NY, NZread (11,*) DX, DY, DZread (11,*) VOL, AREA, QVOL, COND0read (11,*) HCONV, T0, SURFread (11,*) RADImaxread (11,*) coef1, coef2

close (11)

N= NX*NY*NZ

allocate (XC(N), YC(N), ZC(N))

S1_time= MPI_WTIME()

icou= 0do k= 1, NZdo j= 1, NYdo i= 1, NX

icou icou + 1icou= icou + 1XC(icou)= dfloat(i-1)*DXYC(icou)= dfloat(j-1)*DYZC(icou)= dfloat(k-1)*DZ

enddoenddo

enddo

Page 55: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 55

testp.f:パラレル版(3/12)p初期設定③:ローカルデータ設定

!C!C-- LOCAL!C LOCAL

allocate (NElocal(PETOT), AGVindex(0:PETOT))allocate (PEon(N))

NElocal = 0AGVindex= 0PEon = -1

NN= N / PETOTNElocal= NNNElocal= NNNR= N - PETOT*NNdo ip= 1, PETOTif (ip.le.NR) NElocal(ip)= NElocal(ip) + 1AGVindex(ip)= AGVindex(ip-1) + NElocal(ip)p p p

enddo

PE#0 PE#1 PE#2 PE#(m-2) PE#(m-1)

NElocal(1) NElocal(2) NElocal(3) NElocal(m)NElocal(m-1)

AGVindex(0)=0 AGVindex(1)=AGVindex(m)=

AGVindex(0)=0 AGVindex(1)=AGVindex(0) + NElocal(1)

AGVindex(m-1) + NElocal(m)=N

Page 56: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 56

ローカルデータ生成成

PE#0 PE#1 PE#2 PE#(m-2) PE#(m-1)

NElocal(1) NElocal(2) NElocal(3) NElocal(m)NElocal(m-1)

PE#0 PE#1 PE#2 PE#(m-2) PE#(m-1)

AGVindex(0)=0 AGVindex(1)=AGVindex(0) + NElocal(1)

AGVindex(m)=AGVindex(m-1) + NElocal(m)=N

全体ベクトル 1 ~ N全体ベクトル 1 N局所ベクトル 1 ~ NElocal(my_rank+1)

Page 57: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 57

testp.f:パラレル版(3/12)p初期設定③:ローカルデータ設定

!C!C-- LOCAL!C LOCAL

allocate (NElocal(PETOT), AGVindex(0:PETOT))allocate (PEon(N))

NElocal = 0AGVindex= 0PEon = -1

PE#0 PE#1 PE#2 PE#(m-2) PE#(m-1)

NElocal(1) NElocal(2) NElocal(3) NElocal(m)NElocal(m-1)

PE#0 PE#1 PE#2 PE#(m 2) PE#(m 1)

AGVindex(0)=0 AGVindex(1)=AGVindex(0) + NElocal(1)

AGVindex(m)=AGVindex(m-1) + NElocal(m)=N

do ip= 1, PETOTdo j= AGVindex(ip-1)+1, AGVindex(ip)

PEon(j)= ip - 1enddo

enddo!C===

Page 58: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 58

オペレーションの並列化FEM,FVM FEM,FVM

do i= 1, Ndo j= 1, ICON(i)

…enddo

do i= 1, Nlocaldo j= 1, ICON(i)

…enddo

Nlocal= N/PETOT

enddoenddo

enddo

本手法

do i= 1, N

本手法

do i= 1, Nlocaldo j= 1, N

…enddo

enddo

,do j= 1, N

…enddo

enddo

Nlocal= N/PETOT

e ddo

Page 59: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 59

係数行列:各PEで独立に計算,格納係数行 各 算,格納

[A][A]#PE0 NL

A(NL,N)NLは各PEで異なる可能性がある

#PE1 NL

性がある。

行に関しては局所番号#PE1 NL 行に関しては局所番号列に関しては全体番号

#PE2 NL

#PE3 NL

N

Page 60: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 60

係数行列:各PEで独立に計算,格納係数行 各 算,格納

[A][A]#PE0 NL

A(NL,N)NLは各PEで異なる可能性がある

#PE1 NL

性がある。

行に関しては局所番号#PE1 NL 行に関しては局所番号列に関しては全体番号

#PE2 A(1,1)NL

#PE3 NL

N

Page 61: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 61

係数行列:各PEで独立に計算,格納係数行 各 算,格納

[A][A]#PE0 NL

A(NL,N)NLは各PEで異なる可能性がある

#PE1 NL

性がある。

行に関しては局所番号#PE1 NL 行に関しては局所番号列に関しては全体番号

#PE2 A(NL,1)NL

#PE3 NL

N

Page 62: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 62

係数行列:各PEで独立に計算,格納係数行 各 算,格納

[A][A]#PE0 NL

A(NL,N)NLは各PEで異なる可能性がある

#PE1 NL

性がある。

行に関しては局所番号#PE1 NL 行に関しては局所番号列に関しては全体番号

#PE2 A(NL,N)NL

#PE3 NL

N

Page 63: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 63

testp.f:パラレル版(4/12)pマトリクス生成:熱伝導部分

!C!C +--------+!C + +!C | MATRIX |!C +--------+!C===

allocate (AMAT(NElocal(my_rank+1),N), RHS(N))

AMAT= 0.d0RHS = 0.d0do i0= 1, NElocal(my_rank+1)i= i0 + AGVindex(my rank)

i0:局所番号i 全体番号i= i0 + AGVindex(my_rank)

do j= 1, Nif (j.ne.i) then

DEL= dsqrt((XC(i)-XC(j))**2 + (YC(i)-YC(j))**2 && + (ZC(i)-ZC(j))**2)

i : 全体番号

if (DEL.le.RADImax) thenCOND= COND0/(10.d0**dmin1(DEL,20.d0))coef= COND*AREA / DELAMAT(i0,j)= coefAMAT(i0 i)= AMAT(i0 i) coefAMAT(i0,i)= AMAT(i0,i) - coef

endifendif

enddoenddo

Page 64: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 64

testp.f:パラレル版(5/12)pマトリクス生成:体積発熱:シリアルと同じ

do i= 1, NDEL= dsqrt(XC(i)**2 + YC(i)**2 + ZC(i)**2)DEL= dsqrt(XC(i)**2 + YC(i)**2 + ZC(i)**2)RHS(i)= -QVOL*(coef1*VOL + coef2*DEL*VOL)

enddo

i= 1do k= 1, NZdo j= 1, NYic= (k-1)*NX*NY + (j-1)*NX + iip= PEon(ic)if (my rank eq ip) thenif (my_rank.eq.ip) thenic0= ic - AGVindex(ip)AMAT(ic0,ic)= -HCONV*SURF + AMAT(ic0,ic)

endifRHS (ic )= -HCONV*SURF*T0 + RHS (ic)

enddoenddo

!C===S2_time= MPI_WTIME()

Page 65: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 65

testp.f:パラレル版(5/12)pマトリクス生成:対流熱伝達

do i= 1, NDEL= dsqrt(XC(i)**2 + YC(i)**2 + ZC(i)**2)DEL= dsqrt(XC(i) 2 + YC(i) 2 + ZC(i) 2)RHS(i)= -QVOL*(coef1*VOL + coef2*DEL*VOL)

enddo

i= 1do k= 1, NZdo j= 1, NYic= (k-1)*NX*NY + (j-1)*NX + iip= PEon(ic)if (my rank eq ip) then

ic0: 局所番号i 全体番号if (my_rank.eq.ip) then

ic0= ic - AGVindex(ip)AMAT(ic0,ic)= -HCONV*SURF + AMAT(ic0,ic)

endifRHS (ic )= -HCONV*SURF*T0 + RHS (ic)

ic : 全体番号

enddoenddo

!C===S2_time= MPI_WTIME()

Page 66: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 66

testp.f:パラレル版(6/12)pCG法①

!C!C +---------------+ Compute r(0)= b-[A]x(0)!C !C | CG iterations |!C +---------------+!C===

EPS= 1.d-08ll ( ( 5) ( ))

for i= 1, 2, …solve [M]z(i-1)= r(i-1)

ρi-1= r(i-1) z(i-1)allocate (W(N,5), PHI(N))

NEL= NElocal(my_rank+1)

W = 0.d0

if i=1p(1)= z(0)

elseβW 0.d0

PHI= 0.d0

R = 1Z = 2

βi-1= ρi-1/ρi-2p(i)= z(i-1) + βi-1 p(i)

endif(i) [A] (i)Q = 2

P = 3DD= 4WK= 5

q(i)= [A]p(i)

αi = ρi-1/p(i)q(i)x(i)= x(i-1) + αip(i)r(i) r(i-1) α q(i)r(i)= r(i 1) - αiq(i)check convergence |r|

end

Page 67: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 67

CG法(密行列)の並列化

• 計算量のオーダー計算量 オ ダ

– 行列ベクトル積 N2

– 前処理(対角スケーリング) N前処理(対角スケ リング) N– 内積 N– DAXPY({y}= a{x}+{y}) NDAXPY({y} a{x}+{y}) N

• Nがある程度大きくなると 行列ベクトル積が占める量• Nがある程度大きくなると,行列ベクトル積が占める量が圧倒的になる

行列ベクトル積の部分のみ並列化– 行列ベクトル積の部分のみ並列化

– 他は並列化しない(各PEで同じ計算を1~Nで実施)

• 局所デ タを使用して並列に計算することも可能であるが 計算量• 局所データを使用して並列に計算することも可能であるが,計算量に比べて通信オーバーヘッドの方が概して大きくなる。

Page 68: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 68

行列ベクトル積(1/2)行列 クトル積(1/2){q} {p}[A]{q} {p}[ ]

#PE0

#PE1

= x

#PE1

#PE2

#PE3

各PEで分散して記憶各PEで

全体を記憶

Page 69: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 69

行列ベクトル積(2/2)行列ベクトル積(2/2)MPI_ALLREDUCE使用(白い部分は0)

{q}PE0 {q}PE1 {q}PE2 {q}PE3 {q}{ }PE0 { }PE1 { }PE2 { }PE3 { }

#PE0

#PE1

#PE2+ + + =

#PE3

Page 70: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 70

testp.f:パラレル版(7/12)pCG法②:行列の対角成分の逆数の計算

do i0= 1, NELi= i0 + AGVindex(my rank)i i0 + AGVindex(my_rank)W(i,DD)= 1.d0/AMAT(i0,i)

enddo

do i= 1, N(i ) 0 d0W(i,WK)= 0.d0

enddo

call MPI_allREDUCE && (W(1,DD), W(1,WK), N, MPI DOUBLE PRECISION, MPI SUM, && (W(1,DD), W(1,WK), N, MPI_DOUBLE_PRECISION, MPI_SUM, && MPI_COMM_WORLD, ierr)

do i= 1, NW(i,DD)= W(i,WK)

enddo

PE#0 PE#1 PE#2 PE#3

MPI_allREDUCE

各PEで担当部分計算(白い部分0)

Page 71: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 71

行列の対角成分の逆数行列の対角成分の逆数

• 前処理については各PEで以下のような計算を実施したい。do i= 1, NW(i,Z)= W(i,DD) * W(i,R)

enddo

前処理については各PEで以下のような計算を実施したい。

enddo

#PE0• しかし,係数行列を右のよう

#PE0に分散して覚えているので,「対角成分」は各PEに分散

#PE1して記憶されている。

– 従って,各PEで計算した#PE2W(i,DD)を

MPI_ALLREDUCEしている。

#PE3

Page 72: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 72

testp2.f:MPI_Allgathervを使用p _ g行列の対角成分の逆数の計算

do i0= 1, NELi= i0 + AGVindex(my rank)i i0 + AGVindex(my_rank)W(i0,WK)= 1.d0/AMAT(i0,i)

enddo

call MPI_allGATHERv &( (1 )& (W(1,WK), NEL, MPI_DOUBLE_PRECISION, &

& W(1,DD), NElocal, AGVindex(0), MPI_DOUBLE_PRECISION, && MPI_COMM_WORLD, ierr)

NElocal(1) NElocal(2) NElocal(3) NElocal(m)NElocal(m-1)

PE#0 PE#1 PE#2 PE#(m-2) PE#(m-1)

AGVindex(0)=0 AGVindex(1)=AGVindex(0) + NElocal(1)

AGVindex(m)=AGVindex(m-1) + NElocal(m)=N

全体ベクトル 1 ~ N局所ベクトル 1 ~ NEL

Page 73: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 73

testp.f:パラレル版(8/12)pCG法③

!C!C-- {r0}= {b} - [A]{xini} |!C {r0} {b} [A]{xini} |

do i0= 1, NELi= i0 + AGVindex(my_rank)W(i,R)= RHS(i)

enddo

#PE0

#PE1

do j= 1, NXX= PHI(j)W(j,WK)= 0.d0do i0= 1, NEL

= x

#PE1

#PE2do i0 1, NELi= i0 + AGVindex(my_rank)W(i,R)= W(i,R) - AMAT(i0,j) * XX

enddoenddo

#PE3

call MPI_allREDUCE && (W(1,R), W(1,WK), N, MPI_DOUBLE_PRECISION, MPI_SUM, && MPI_COMM_WORLD, ierr)

do i= 1, NW(i,R)= W(i,WK)

enddo

BNRM2= 0.0D0do i= 1, NBNRM2 = BNRM2 + RHS(i)**2

enddo

Page 74: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 74

testp.f:パラレル版(9/12)pCG法④

!C********************************************************************do iter= 1, Ndo iter 1, N

!C!C-- {z}= [Minv]{r}

do i= 1, NW(i,Z)= W(i,DD) * W(i,R)ddenddo

!C!C-- RHO= {r}{z}

RHO= 0.d0do i= 1, Ndo i 1, NRHO= RHO + W(i,R)*W(i,Z)

enddo!C!C-- {p} = {z} if ITER=1!C BETA= RHO / RHO1 otherwise

if ( iter.eq.1 ) thendo i= 1, NW(i P)= W(i Z)W(i,P) W(i,Z)

enddoelse

BETA= RHO / RHO1do i= 1, NW(i,P)= W(i,Z) + BETA*W(i,P)

enddoendif

Page 75: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 75

testp.f:パラレル版(10/12)pCG法⑤

!C!C-- {q}= [A]{p}!C {q} [A]{p}

do i= 1, NW(i,Q)= 0.d0

enddo

#PE0

#PE1

do j= 1, NXX= W(j,P)W(j,WK)= 0.d0do i0= 1, NEL

= x

#PE1

#PE2do i0 1, NELi= i0 + AGVindex(my_rank)W(i,Q)= W(i,Q) + AMAT(i0,j) * XX

enddoenddo

#PE3

call MPI_allREDUCE && (W(1,Q), W(1,WK), N, MPI_DOUBLE_PRECISION, MPI_SUM, && MPI_COMM_WORLD, ierr)

do i= 1, NW(i,Q)= W(i,WK)

enddo

Page 76: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 76

testp2.f:MPI_Allgatherv 使用p _ g{q}= [A]{p}:少し速い:ゼロクリア少ない

!C!C-- {q}= [A]{p}!C {q} [A]{p}

do i0= 1, NEL(i0 ) 0 d0

#PE0

#PE1W(i0,WK)= 0.d0enddo

do j= 1, NXX= W(j,P)

= x

#PE1

#PE2XX W(j,P)do i0= 1, NELW(i0,WK)= W(i0,WK) + AMAT(i0,j) * XX

enddoenddo

#PE3

call MPI_allGATHERv & & (W(1,WK), NEL, MPI_DOUBLE_PRECISION, && W(1,Q ), NElocal, AGVindex(0), MPI_DOUBLE_PRECISION, && MPI COMM WORLD ierr)& MPI_COMM_WORLD, ierr)

Page 77: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 77

testp.f:パラレル版(11/12)pCG法⑥

!C!C-- ALPHA= RHO / {p}{q}!C ALPHA= RHO / {p}{q}

C1= 0.d0do i= 1, NC1= C1 + W(i,P)*W(i,Q)

enddoALPHA= RHO / C1

!C!C-- {x}= {x} + ALPHA*{p}!C {r}= {r} - ALPHA*{q}

do i= 1 Ndo i= 1, NPHI(i) = PHI(i) + ALPHA * W(i,P)W (i,R)= W(i,R) - ALPHA * W(i,Q)

enddo

DNRM2 = 0.0do i= 1, NDNRM2= DNRM2 + W(i,R)**2

enddo

RESID= dsqrt(DNRM2/BNRM2)

if ( RESID.le.EPS) goto 900RHO1 = RHO

enddo!C********************************************************************

900 continue!C===

Page 78: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 78

testp.f:パラレル版(12/12)結果出力結果出力

if (my_rank.eq.0) then!C!C +--------+!C | OUTPUT |!C +--------+!C===

N1= 1N3 3N3= 3

open (22, file='sphere.fld', status='unknown')write (22,'(a)') '# AVS field file'write (22,'(a,i5)') 'ndim=', N3( , ( , ) ) ,write (22,'(a,i5)') 'dim1=', NXwrite (22,'(a,i5)') 'dim2=', NYwrite (22,'(a,i5)') 'dim3=', NZwrite (22,'(a,i5)') 'nspace=', N3it (22 '( i5)') ' l ' N1write (22,'(a,i5)') 'veclen=', N1

write (22,'(a,i5)') 'data= float'write (22,'(a,i5)') 'field= uniform'write (22,'(a,i5)') 'label= temperature'write (22,'(a,i5)') 'variable 1 file=./spheredata filetype=ascii'write (22, (a,i5) ) variable 1 file ./spheredata filetype asciiclose (22)

open (22, file='spheredata', status='unknown')do i= 1, N

i iwrite (22,'(1pe16.6)') PHI(i)enddo

!C===endif

Page 79: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

ジョブスクリプト例:Policy-3T2K-FVM-03

ジョブスクリプト例:Policy 3go.sh numarun.sh:Policy-3相当

#@$-r sphere#@$-q lecture#@$-N 1

#!/bin/bashMYRANK=$MXMPI_IDMYVAL=$(expr $MYRANK / 4)SOCKET=$(expr $MYVAL % 4)n mactl cp nodebind $SOCKET membind $SOCKET $@#@$-J T16

#@$-e err#@$-o a1-016-2.lst#@$-lM 28GB

numactl --cpunodebind=$SOCKET --membind=$SOCKET $@

numarun.sh:Policy-4相当

# / /#@$ lM 28GB#@$-lT 00:05:00#@$

#!/bin/bashMYRANK=$MXMPI_IDMYVAL=$(expr $MYRANK / 4)SOCKET=$(expr $MYVAL % 4)numactl --cpunodebind=$SOCKET --localalloc $@

cd $PBS_O_WORKDIRmpirun ./numarun.sh ./spp

exit

p

exit

Page 80: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 80

計算例: testp f:遅い方計算例: testp.f:遅い方

80 00 80 00

60.00

80.00

idealN=10^3N=20^3 60.00

80.00

ideal

N=20^3

N 30^3

1コア基準 16コア基準

40.00

peed

-Up N=30^3

40.00

peed

-Up

N=30^3

20.00

Sp

20.00

Sp

0.000 16 32 48 64

C #

0.000 16 32 48 64

C #

PC Clusterの例 N=203

4PE’s 8PE’s

Core # Core #

4PE s 8PE stestp: 9.54 5.13testp2: 9.13 4.82

Page 81: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 81

自習課題(できるだけやってください)

• CG法の全てのプロセスを並列に計算するように書き換

えて見よ。現在の「行列ベクトル積」のみを並列に計算する場合と比較して見よ。

1.E+02行列ベクトル積「以外」の計算量の比率

1.E+01• 実線 完全に並列にした場合• ● 「行列ベクトル積」のみ,16PE

1.E+00

% • ○ 「行列ベクトル積」のみ,24PE• ▲ 「行列ベクトル積」のみ,32PE

1.E-0110 100 1000 10000 100000

DOF

Page 82: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 82

並列分散データ構造

FVM型• FVM型

– 隣接領域

– 内点,外点,境界点

– 通信テーブル(送信,受信)

• 本手法

– 内点

– 基本的にはグローバル情報中心

– ベクトルをローカルに扱う場合とグローバルに扱う場合がある。

Page 83: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 83

補足:LAPACKの利用(1PEのみ)足 用( )

$> cd$> cp /home/t00000/EPSsummer/sphere_lapack.tar .$> tar xvf sphere_lapack.tar$> ls$

sphere_lapack$> cd sphere_lapack ⇒ <$T-SPLAPACK>$> ls$> ls

C F$> cd C$> ls$> ls

inp1 test.c test_org.c

$ d /$> cd ../F$> ls

inp1 test.f test_org.f

Page 84: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 84

PGIコンパイラの利用(1/2)ラ 用( )

$> source /opt/itc/mpi/mpiswitch.sh mpich-mx-pgi$> which mpif90$> which mpif90/opt/itc/mpi/mpich-mx-pgi/bin/mpif90

日立にもどす日立にもどす$> source /opt/itc/mpi/mpiswitch.sh mpich-mx-hitachi $> which mpif90/opt/itc/mpi/mpich-mx-hitachi/bin/mpif90

オリジナル版$> pgf95 –fast test_org.f –o test_org$> pgcc -fast test_org.c –o test_org

Page 85: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 85

PGIコンパイラの利用(2/2)ラ 用( )

$> cd <$T-SLAPACK>$> make$> makepgf95 -o test -fast test.f -lacmltest.f:

pgcc -o test -fast test.c -lacml -lpgftnrtl -pgf90libs -lmtest.c:

$> qsub go.sh (./test でもOK)$ q g

• ACML: AMD Core Math LibraryACML: AMD Core Math Library– AMD向けに 適化されたBLAS,LAPACK,FFT提供

– PGIコンパイラ– PGIコンパイラ

– http://www.softek.co.jp/SPG/Pgi/TIPS/acml.html

Page 86: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 86

LAPACKの呼び方:FORTRANCGの替わりにDGESVを呼ぶだけ

!C!C + +!C +---------------+!C | LAPACK Call |!C +---------------+!C===

INC = 1ALLOCATE(PIV(N))

call system_clock(t1)

call DGESV(N,INC,AMAT,N,PIV,RHS,N,INFO)

call system_clock(t2, t_rate, t_max)if ( t2 < t1 ) then

diff = t_max - t1 + t2else

diff = t2 - t1endiftw = dble(diff)/dble(t_rate)

PRINT *, "TIME[sec] =",tw

DFLOPS = 2.0d0/3.0d0*DBLE(N)*DBLE(N)*DBLE(N)DFLOPS 2.0d0/3.0d0 DBLE(N) DBLE(N) DBLE(N)DFLOPS = DFLOPS + 7.0d0/2.0d0*DBLE(N)*DBLE(N)DFLOPS = DFLOPS + 4.0d0/3.0d0*DBLE(N)DFLOPS = DFLOPS / DBLE(TW) / 1.0E6PRINT *, "MFLOPS =",DFLOPS

DEALLOCATE(PIV)DEALLOCATE(AMAT)

Page 87: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 87

計算結果:test.out, test_org.out, _ g

• ソルバー部分の計算時間

• N=103

• FORTRANO i i l 0 141– Original 0.141 sec.

– LAPACK 0.183 sec., 3661.6 MFLOPS(ピークの40%)

• C– Original 0.225 sec.– LAPACK 0.178 sec., 3765.5 MFLOPS(ピークの41%)

Page 88: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

616-2057/616-4009 88

ScaLAPACK:並列版係数行列をブロック分割する

12月21日・22日に講習会月 講習会

Page 89: 2011年夏季集中講義 中島研吾 - 東京大学nkl.cc.u-tokyo.ac.jp/11e/07-Sphere/sphere.pdf並列アプリケーション開発法入門 (IV) 粒子間熱伝導問題解析コドコード

お試しアカウント付き講習会(2011年度)89

http://www.cc.u-tokyo.ac.jp/publication/kosyu/schedule_kosyu.html

名称名称 期間期間 時期(予定)時期(予定) 内容内容名称名称 期間期間 時期(予定)時期(予定) 内容内容

MPI基礎1日半~2日

2011年6月8・9日2011年9月6・7日2012年3月13・14日

• MPIによる並列プログラミングの基礎に関する講習,実習 並列化の基礎知識• MPIのAPI説明• 行列積の並列化実習• makeを使った分割コンパイルと並列処理2012年3月13・14日 • makeを使った分割コンパイルと並列処理• T2K(東大)による実習

2011年5月19・20日

• MPIを使用した並列アプリケーション開発手法に関する講習,実習 有限体積法によるポアソン方程式ソルバーの概要

• 並列データ構造の考え方MPI応用 1日半 2011年10月下旬(未定)

• 並列データ構造の考え方• 領域分割手法• 並列化手法• T2K(東大)による実習

• OpenMPによるマルチコアプロセッサ向け並列プログラミング 適化手法に

OpenMP(基礎+応用)

1日半~2日

2011年6月30日・7月1日2011年12月上旬(未定)

• OpenMPによるマルチコアプロセッサ向け並列プログラミング, 適化手法に関する,実アプリケーションに基づく講習,実習 有限体積法によるポアソン方程式ソルバー,ICCG法の概要

• OpenMPの基礎• リオーダリングによる並列化, 適化

(東大) る実習• T2K(東大)による実習

ライブラリ利用 2日 2011年12月21・22日2012年 2月21・22日

• 密行列ライブラリBLAS, LAPACK, ScaLAPACK、および、疎行列ライブラリPETsc, Lisの利用法に関する講習,実習 数値解法の原理と特徴の説明

• 数理的モデリング,離散化,データ格納ブ ク デ タ分散 考 方

2012年 2月21 22日 • ブロック化、データ分散の考え方• T2K(東大)による実習