...

解説 - 名古屋工業大学

by user

on
Category: Documents
13

views

Report

Comments

Transcript

解説 - 名古屋工業大学
並列型パーソナルコンピュータによる
FDTD計算
MPI: Message Passing Interface
名古屋工業大学
王 建青
背景
FDTD法の特徴:領域分割型解法
並列化
並列化の種類
CPU CPU CPU CPU
複数のCPUが単一のメモリを
共有する共有メモリ型
CPUごとにメモリをもたせる
分散メモリ型
MEMORY
CPU CPU CPU CPU
MEM MEM MEM MEM
パーソナルコンピュータの廉価化
FDTD法の特徴
分散メモリ型が有効
Nagoya Institute of Technology, Japan
内容
FDTDアルゴリズムの並列化の原理を述べる
パーソナルコンピュータを用いた
8並列の構築例を紹介する
Nagoya Institute of Technology, Japan
∆x
FDTDアルゴリズムの特徴
σ∆t
1−
2ε E n ( i, j , k )
Ezn +1 ( i, j , k ) =
σ∆t z
1+
2ε
∆t
+ ε
σ∆t
1+
2ε
Hx
Ez
(i,j,k)
∆z
Hy
Ey
Hz
Ex
∆y
⎡ H yn +1/ 2 ( i, j , k ) − H yn +1/ 2 ( i − 1, j , k ) H xn +1/ 2 ( i, j , k ) − H xn +1/ 2 ( i, j − 1, k ) ⎤
−
⎢
⎥
∆
∆
x
y
⎢⎣
⎥⎦
H zn +1/ 2 ( i, j , k ) = H zn −1/ 2 ( i, j , k )
n
n
n
n
∆t ⎡ E y ( i + 1, j , k ) − E y ( i, j , k ) Ex ( i, j + 1, k ) − Ex ( i, j , k ) ⎤
+ ⎢
−
⎥
∆x
∆y
µ ⎢⎣
⎥⎦
E n +1 (i, j , k ) ⇐ H n +1/ 2 ( i − 1, j − 1, k − 1)
H n +1/ 2 (i, j , k ) ⇐ E n ( i + 1, j + 1, k + 1)
隣接の界成分
だけ必要
Nagoya Institute of Technology, Japan
FDTD計算アルゴリズム
Program
Call INIT
Call SETUP
………
T=0
Do N=1, NSTOP
Call E_FIELD
Call E-PML
T=T+DT/2
Call H_FIELD
Call H-PML
T=T+DT/2
End do
MPIを用いたFDTD並列計算
Program
Include ‘mpif.h’
………
Call MPI_INIT
T=0
Do N=1,NSTOP
Call E
Call E-PML
Call MPI_SEND (E)
Call MPI_RECV (E)
T=T+DT/2
Call H
Call H-PML
Call MPI_SEND (H)
Call MPI_RECV (H)
T=T+DT/2
MPI: Message Passing Interface
FDTD解析空間
Subspace 6 Subspace 7
CPU0 Æ Subspace 0
CPU1 Æ Subspace 1
:
:
CPU7 Æ Subspace 7
Subspace 4 Subspace 5
2
3
Subspace 0 Subspace 1
End do
Call MPI_FINALIZE
Nagoya Institute of Technology, Japan
サブ空間境界面でのデータ送受信
一次元の場合
E-Field Computation : E n +1 (i, j , k ) ⇐ H n +1/ 2 ( i − 1, j − 1, k − 1)
CPU0のHMをCPU1の
H0に引き渡す
H0 H1
E1 E2
CPU1
EM
EM E1 E2
H0 H1
HM-1 HM
HM-1HM
CPU0
H-Field Computation : H n +1/ 2 (i, j , k ) ⇐ E n ( i + 1, j + 1, k + 1)
CPU1のE1をCPU0の
EM+1に引き渡す
E1 E2
H1 H2
HM H1 H2
E1 E2
EM EM+1
CPU0
CPU1
EM EM+1
HM
3次元時の定義:
E(II+1,JJ+1,KK+1,3)
H(0:II, 0:JJ, 0:KK,3)
プログラミング技法①
c
MPI 送受信のための準備
c
プロセッサID
integer myrank
エラーコード
integer ierr
c
c
MPI 初期化
call MPI_INIT(ierr)
c
自プロセッサIDの取得
call MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr)
コミュニケータ.互いにメッセージを送
れるプロセスの集団.MPIで定義済み.
プログラミング技法②
Fortranでの配列データの並べ方
(1,1,1)
(1,2,1)
…
(1,JJ+1,1)
(1,1,2)
(1,2,2)
…
(1,JJ+1,2)
(2,1,1)
(2,2,1)
…
…
(2,JJ+1,1) …
(2,1,2)
(2,2,2)
…
…
(2,JJ+1,2) …
(II+1,1,1)
(II+1,2,1)
K=1,KK+1
J=1,JJ+1
I=1,II+1
(II+1,JJ+1,1)
(II+1,1,2)
(II+1,2,2)
k
i
(II+1,JJ+1,2)
…
(1,1,KK+1)
(1,2,KK+1)
…
(1,JJ+1,KK+1)
j
7
6
(2,1,KK+1) …
(2,2,KK+1) …
(II+1,1,KK+1)
(II+1,2,KK+1)
4
5
3
2
(2,JJ+1,KK+1) … (II+1,JJ+1,KK+1)
0
1
プログラミング技法③
要素が配列の中のエントリである場合,MPI_TYPE_VECTORを
使用して,データをまとめて送受信する(パッキング).
MPI_TYPE_VECTOR(要素数,各要素内配列エントリ数,各要素間隔,
配列データ型,パッキングデータ名,ierr)
jkplan (I=II+1)
要素数: (JJ+1)(KK+1) 各要素内配列エントリ数: 1
各要素間隔: (II+1)
7
6
4
5
3
2
0
k
1
kiplan (J=JJ+1)
要素数: (KK+1) 各要素内配列エントリ数: (II+1)
各要素間隔: (II+1)(JJ+1)
j
i
ijplan (K=KK+1)
要素数: 1 各要素内配列エントリ数: (II+1)(JJ+1)
各要素間隔: (II+1)(JJ+1)(KK+1)
プログラミング技法④
c
送受信データのパッキングのための定義
integer jkplan
integer kiplan
integer ijplan
call MPI_TYPE_VECTOR(
& 3*(KK+1)*(JJ+1), 1, (II+1),
& MPI_DOUBLE_PRECISION, jkplan, ierr)
call MPI_TYPE_VECTOR(
& 3*(KK+1), (II+1)*1, (II+1)*(JJ+1),
& MPI_DOUBLE_PRECISION, kiplan, ierr)
7
6
4
5
3
2
0
k
1
j
i
call MPI_TYPE_VECTOR(
& 3, (JJ+1)*(II+1)*1, (II+1)*(JJ+1)*(KK+1),
& MPI_DOUBLE_PRECISION, ijplan, ierr)
call MPI_TYPE_COMMIT(jkplan, ierr)
call MPI_TYPE_COMMIT(kiplan, ierr)
call MPI_TYPE_COMMIT(ijplan, ierr)
使用する前に
コミットする.
これで使用可能.
プログラミング技法⑤
MPI 送受信 E Field
c
7
6
if (mod(myrank,2).eq.1) then
4
1,3,5,7 は 0,2,4,6 に 送信
c
call MPI_SEND (E( 1,1,1,1),1, jkplan, myrank-1,
&
tag(1), MPI_COMM_WORLD, ierr)
else
5
3
2
0
k
1
j
0,2,4,6 は 1,3,5,7 から 受信
c
call MPI_RECV(E(II+1,1,1,1),1, jkplan, myrank+1,
&
tag(1), MPI_COMM_WORLD, status, ierr)
endif
i
プログラミング技法⑥
MPI 送受信 H Field
c
7
6
if (mod(myrank,2).eq.0) then
4
0,2,4,6 は 1,3,5,7 へ送信
c
call MPI_SEND (H(II,0,0,1),1, jkplan, myrank+1,
&
tag(1), MPI_COMM_WORLD, ierr)
else
5
3
2
0
k
1
j
1,3,5,7 は 0,2,4,6 から 受信
c
call MPI_RECV (H( 0,0,0,1),1, jkplan, myrank-1,
&
tag(1), MPI_COMM_WORLD, status, ierr)
endif
i
並列FDTDシステムの構成
Dual CPU
PCワークステーション:4台
CPU :
Pentinum Ⅲ
1.26GHz
並列数: 8
メモリ:
2GB x 8
OS :
TurboLinux 7
コンパイラ: Intel Fortran
(Fortran 90)
NIC: ギガビット
スイッチングハブ
ディスプレー切替え器
Nagoya Institute of Technology, Japan
設定・実行メモ
●MPICHをインストール.
●MPICHで各ホストのコマンドにrshを使用.
●ネットワーク環境の利用のためnfsを立ち上げ
る.
●mountの設定は /etc/fstab で行う.
host_name1:
/home /nfs
●コンパイル: mpif90 filename.f
●実行: mpirun –np 8 –nolocal a.out&
並列プログラムの検証 ガウシャンパルスで微小ダイポールアンテナを励振
z
y
6
x
解析空間: 40×40×40セル
7
4
5
ダイポール:
サブ空間0に配置
○
Observation
Point
40 cells
Dipole
3
2
0
観測点O
サブ空間7に配置
反復回数: 40 cells 1000
1
40 cells
Nagoya Institute of Technology, Japan
並列FDTDプログラム検証結果
P_FDTD
0.09
2.E-04
観測点での
電界主成分
1.E-04
0.00
-0.03 0
200
400
600
800
5.E-05
0.E+00
-5.E-05 0
-0.06
-1.E-04
-0.09
-2.E-04
-0.12
-2.E-04
200
105s
80
20s
40
0
FDTD
P-FDTD
1 CPU Required
memory [MB]
120
400
600
800
Time [ps]
Time [ps]
160
FDTD
観測点での
磁界主成分
2.E-04
0.03
Run time [s]
Ez [V/m]
0.06
P_FDTD
Hx [A/m]
0.12
FDTD
20
15
10
5
0
18MB
3.8MB
FDTD
P-FDTD
Nagoya Institute of Technology, Japan
8
6
6
4
4
2
2
0
0
0
50 3
100 3
150 3
Memory-up ratio
8
メモリ向上比
速度向上比
Speed-up ratio
並列FDTDシステムの性能評価
8並列で
6倍の速度向上
7.9倍のメモリ拡張
200 3
Cell numbers
FDTD全解析空間セル数
速度向上比: 非並列計算で要した時間/8並列計算で要した時間
メモリ向上比:非並列計算の所要メモリ
/8並列計算で1CPUの所要メモリ
Nagoya Institute of Technology, Japan
Fly UP