並列型パーソナルコンピュータによる 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
© Copyright 2024 Paperzz