「地球シミュレータ」における非構造格子 アプリケーション向け前処理付反復法 Preconditioned Iterative Linear Solvers for Unstructured Grids on the Earth Simulator 中島 研吾 [email protected] 東京大学情報基盤センター スーパーコンピューティング研究部門 海洋研究開発機構 計算システム計画・運用部 地球シミュレータ 利用講習会,2008年4月22日 08-APR22 2 概 要 • 背景 – – – – スカラープロセッサとベクトルプロセッサ GeoFEMプロジェクト 地球シミュレータ 前処理付き反復法 • FEMコードの「地球シミュレータ」における最 適化戦略 – BIC(0)-CG法による並列反復法ソルバー – 係数行列作成部分 • まとめ プロセッサの動向:スカラーとベクトル スカラープロセッサ 08-APR22 クロック数とメモリバンド幅のギャップ 低い対ピーク性能比(<10%) 3 スカラープロセッサ CPU-キャッシュ-メモリの階層構造 CPU Register FAST Cache 小容量 (MB) 高価 大きい (1億以上のトランジスタ) SLOW Main Memory 08-APR22 大容量 (GB) 廉価 4 プロセッサの動向:スカラーとベクトル スカラープロセッサ クロック数とメモリバンド幅のギャップ 低い対ピーク性能比(<10%) ベクトルプロセッサ 高い対ピーク性能比 そのためには・・・ 08-APR22 例:地球シミュレータ,FEM型アプリケーション → >35 % ベクトルプロセッサ用チューニング 充分長いベクトル長(問題サイズ) 比較的単純な問題に適している 5 ベクトルプロセッサ ベクトルレジスタと高速メモリ Vector Processor Vector Register • 単純構造のDOループの並列処理 • 単純,大規模な演算に適している do i= 1, N A(i)= B(i) + C(i) enddo Very FAST Main Memory 08-APR22 6 プロセッサの動向:スカラーとベクトル スカラープロセッサ クロック数とメモリバンド幅のギャップ 低い対ピーク性能比 (<10%) ベクトルプロセッサ 高い対ピーク性能比 そのためには・・・ 08-APR22 例:地球シミュレータ,FEM型アプリケーション → >35 % ベクトルプロセッサ用チューニング 充分長いベクトル長(問題サイズ) 比較的単純な問題に適している 7 08-APR22 8 Hitachi Earth SR8000/MPP Simulator (U.Tokyo) IBM SP3 (LBNL) Hitachi SR11000/J2 (U.Tokyo) Peak Performance GFLOPS 8.00 1.80 1.50 9.20 Measured Memory BW (STREAM) (GB/sec/PE) 26.6 2.85 0.623 8.00 Estimated Performance/Core GFLOPS (% of peak) 2.31-3.24 (28.8-40.5) .291-.347 (16.1-19.3) .072-.076 (4.8-5.1) .880-.973 (9.6-10.6) Measured Performance/Core 2.93 (36.6) .335 (18.6) .122 (8.1) 1.34 (14.5) BYTE/FLOP 3.325 1.583 0.413 0.870 12.3 1.60 1.00 12.0 5.6-7.7 6-20 16.3 4.7 * Comm. BW (GB/sec/Node) MPI Latency (msec) * IBM p595 J.T.Carter et al. 典型的な挙動 問題規模~GFLOPS:大きい程よい 3.00 1.0E+02 40 % of peak 2.00 GFLOPS GFLOPS 2.50 1.50 1.00 1.0E+00 8 % of peak 0.50 0.00 1.0E-01 1.0E+04 1.0E+05 1.0E+06 1.0E+07 DOF: Problem Size IBM-SP3: 問題サイズが小さい場合はキャッシュの 影響のため性能が良い 08-APR22 1.0E+01 1.0E+04 1.0E+05 1.0E+06 1.0E+07 DOF: Problem Size Earth Simulator: 大規模な問題ほどベクトル長が長くな り,性能が高い 9 並列計算 Ideal PE# 08-APR22 Performance Performance Strong Scaling (全体問題規模固定) Ideal PE# IBM-SP3: Earth Simulator: PE(Processing Element)数が少ない 場合はいわゆるスーパースカラー。 PE数が増加すると通信オーバーヘッド のため性能低下。 PE数が増加すると,通信オーバーヘッ ドに加え,PEあたりの問題規模が小さ くなるため性能低下。 10 08-APR22 11 Improvement of Memory Performance on IBM SP3 ⇒ Hitachi SR11000/J2 ■ Flat-MPI/DCRS □ Hybrid/DCRS Memory Performance (BWDTH, latency etc.) 375 MHz 1.0 GB/sec 8M L2 cache/PE SR11000/J2 POWER5+ 3.00 15.0 2.00 10.0 GFLOPS GFLOPS IBM SP-3 POWER3 1.00 5.0 0.00 0.0 1.E+04 1.E+05 1.E+06 DOF 1.E+07 1.E+04 2.3 GHz 8.0 GB/sec 18M L3 cache/PE 1.E+05 1.E+06 DOF 1.E+07 08-APR22 12 中島研吾とベクトル計算機の付き合い • Cray-1S (1985-1988) – 三菱総合研究所 • Cray-YMP (1988-1995) – 三菱総合研究所 – テキサス大学 • Fujitsu VP, VPP series (1985-1999) – 日本原子力研究所(現JAEA) – 動力炉・核燃料開発事業団(現JAEA ) • NEC SX-4 (1997-2001) – 日本原子力研究所 CCSE(現JAEA ) • Hitachi SR2201 (1997-2004) – 東京大学 – 日本原子力研究所 CCSE (現JAEA ) • Hitachi SR8000 (2000-2007) – 東京大学 • Earth Simulator (2002-) 08-APR22 13 • 背景 – – – – スカラープロセッサとベクトルプロセッサ GeoFEMプロジェクト 地球シミュレータ 前処理付き反復法 • FEMコードの「地球シミュレータ」における最 適化戦略 – BIC(0)-CG法による並列反復法ソルバー – 係数行列作成部分 • まとめ 08-APR22 14 GeoFEM: FY.1998-2002 http://geofem.tokyo.rist.or.jp/ • 文部科学省「科学技術振興調整費総合研究」 – 「高精度の地球変動予測のための並列ソフトウェア開発に 関する研究」の一部 – リーダー:奥田洋司教授(東大・人工物) • 固体地球シミュレーション用並列有限要素法プラッ トフォーム – 並列I/O,並列線形ソルバー,並列可視化をサポート • HPCと自然科学の緊密な協力 08-APR22 15 System Configuration of GeoFEM Pluggable Analysis Modules Utilities One-domain mesh Partitioner Structure Fluid Wave Comm. I/F 構造計算(Static linear) 構造計算(Dynamic 構造計算( linear) Contact) Solver I/F Vis. I/F Platform Parallel Equation Visualizer solvers I/O Partitioned mesh PEs GPPView Visualization data 08-APR22 16 奥田,中島編「並列有限要素解析〔I〕 クラスタコンピューティング」 培風館,2004. • 「GeoFEM」の成果のまとめ • 「地球シミュレータ」上での最 適化,シミュレーション結果 を紹介 08-APR22 17 Results on Solid Earth Simulation Complicated Plate Model around Japan Islands Magnetic Field of the Earth : MHD code Dh=5.00 Dh=1.25 Simulation of Earthquake Generation Cycle in Southwestern Japan T=100 T=200 T=300 T=400 T=500 Transportation by Groundwater Flow through Heterogeneous Porous Media TSUNAMI !! 08-APR22 18 Results by GeoFEM 08-APR22 19 FEM型アプリケーションの特徴(1/2) • 要素単位のローカルなオペレーション – 疎行列:差分も同じ – 実は並列計算には向いている • メモリーへの負担大きい – 「不規則な」間接参照 do i= 1, N jS= index(i-1)+1 jE= index(i) do j= jS, jE in = item(j) Y(i)= Y(i) + AMAT(j)*X(in) enddo enddo 08-APR22 20 FEM型アプリケーションの特徴(2/2) • 並列計算では・・・ – 基本的に通信は隣接領域とのみ(内積などは除く) – 通信メッセージの量も比較的少ない:境界領域のみ – MPI Latencyが結構効く 08-APR22 21 FEM型アプリケーションのベクトル化 • 非構造格子向け連立一次方程式の解法として,RCM (Reverse Cuthil-Mckee,差分のHyperplaneに相当)が 1980年代から90年代にかけて開発。 • 浮動小数点演算部分「以外」についてはベクトル化は困 難,あるいは研究途上。 • 本講演における「ベクトル化」という用語について 08-APR22 22 本講演における「ベクトル化」という用語 • ベクトルプロセッサの特性を利用したベクトル処理,並列 処理 • このほか,「ベクトル化」による「最適化」という意味で使 用している,すなわち「最内ループ」において以下の要 件を達成していること: – データ依存性が無い – 分岐が無い – ループ長がベクトルレジスタサイズ(256)より大きい • 以下の場合でも「ベクトル化」はやってくれる(すなわち ベクトル化率は高くなる可能性がある)が,性能は悪い: – 分岐がある – ループ長が短い 08-APR22 最内ループにおける分岐の有無による 性能比較:接触問題 1 SMP Node of ES, 64 GFLOPS Peak Performance ● 分岐無し, ○ 分岐有り:大きい程良い 西南日本モデル Simple Block 25 25 分岐無し 15 分岐有り 10 15 分岐有り 10 5 5 1 23 分岐無し 20 GFLOPS GFLOPS 20 10 100 Colors 1000 10 100 Colors 1000 08-APR22 24 • 背景 – – – – スカラープロセッサとベクトルプロセッサ GeoFEMプロジェクト 地球シミュレータ 前処理付き反復法 • FEMコードの「地球シミュレータ」における最 適化戦略 – BIC(0)-CG法による並列反復法ソルバー – 係数行列作成部分 • まとめ 08-APR22 25 Earth Simulator (ES) http://www.es.jamstec.go.jp/ • 640×8= 5,120 Vector Processors – – – – SMP Cluster-Type Architecture 8 GFLOPS/PE 64 GFLOPS/Node 40 TFLOPS/ES • 16 GB Memory/Node, 10 TB/ES • 640×640 Crossbar Network – 16 GB/sec×2 • Memory BWTH with 32 GB/sec. • 35.6 TFLOPS for LINPACK (2002-March) • 26 TFLOPS for AFES (Climate Simulation) 08-APR22 26 本研究の動機(motivation) • GeoFEM Project (FY.1998-2002) • FEM型の複雑形状に関するアプリケーション (LINPACKや差分法ではなく)を「地球シ ミュレータ(以下しばしばES)」上で動かす には? – 陰的解法(連立一次方程式) – 並列プログラミングモデル:Flat-MPIとHybrid 08-APR22 27 Flat MPI vs. Hybrid Flat-MPI:Each PE -> Independent Memory P E P E P E Memory P E P E P E P E Hybrid:Hierarchal Structure Memory Memory P P P P E E E E P P P P E E E E P E 08-APR22 28 • 背景 – – – – スカラープロセッサとベクトルプロセッサ GeoFEMプロジェクト 地球シミュレータ 前処理付き反復法 • FEMコードの「地球シミュレータ」における最 適化戦略 – BIC(0)-CG法による並列反復法ソルバー – 係数行列作成部分 • まとめ 08-APR22 29 科学技術計算における 大規模線形方程式の解法 • 多くの科学技術計算は,最終的に大規模線形方程式 Ax=bを解くことに帰着される。 – important, expensive • アプリケーションに応じて様々な手法が提案されている – 疎行列(sparse),密行列(dense) – 直接法(direct),反復法(iterative) • 密行列(dense) – グローバルな相互作用:BEM,スペクトル法,MO,MD(気液) • 疎行列(sparse) – ローカルな相互作用:FEM,FDM,MD(固),高速多重極展開付 BEM 08-APR22 30 GeoFEMにおける戦略 • 反復解法のみが大規模並列計算のための唯一の手法 である。 • 前処理が重要 – ILU(0)/IC(0)(不完全LU分解,不完全コレスキー分解)などの 一般的手法によって広範囲の問題を解くことが可能である。 – 問題に特有の前処理手法が必要になる場合もある。 08-APR22 31 前処理(preconditioning)とは? • 反復法の収束は係数行列の固有値分布に依存 – 固有値分布が少なく,かつ1に近いほど収束が早い(単位行列) – 条件数(condition number)(対称正定)=最大最小固有値の比 • 条件数が1に近いほど収束しやすい 08-APR22 32 前処理(preconditioning)とは? 共役勾配法の収束は係数行列の性質(固有値分布)に強く依存 するため,前処理を適用して固有値が1の周辺に集まるように 行列の性質を改善する。前処理行列を[M]とすると, ~ ~ ~ 1 ~ 1 , として, A M A b M b A {} {b } という方程式を代わりに解くことになる。 [M]-1が[A]-1をよく近似した行列であれば, ~ 1 A M A は単位行列に近くなり,それだけ解きやすくなる。 08-APR22 33 • 背景 – – – – スカラープロセッサとベクトルプロセッサ GeoFEMプロジェクト 地球シミュレータ 前処理付き反復法 • FEMコードの「地球シミュレータ」における 最適化戦略 – BIC(0)-CG法による並列反復法ソルバー – 係数行列作成部分 • まとめ 08-APR22 34 Block IC(0)-CG Solver ブロックIC前処理付共役勾配法 • 三次元弾性問題 • GeoFEMにおける並列反復法ソルバー使用 – http://geofem.tokyo.rist.or.jp/ – 局所ブロックIC(0)前処理 • 正確には非対角成分を保存した不完全修正コレスキー分解 – Additive Schwartz Domain Decomposition(ASDD) • Hybrid並列プログラミング – OpenMP+MPI – 1-SMPノード=1領域 – 3層の並列構造 • ノード間:MPI,ノード内:OpenMP,各PE:ベクトル化 – ベクトル化,並列化のためのオーダリング手法 08-APR22 35 Flat MPI vs. Hybrid Flat-MPI:各プロセッサ独立 Memory P E P E P E Memory P E P E P E P E Hybrid:階層構造 Memory Memory P P P P E E E E P P P P E E E E P E 08-APR22 36 局所データ構造 節点ベース領域分割(領域間オーバーラップあり) PE#1 21 22 PE#0 23 24 4 PE#1 5 17 12 11 18 13 7 6 19 2 PE#3 3 15 9 4 PE#2 6 7 PE#0 2 3 10 7 8 9 11 10 12 5 11 14 13 4 5 10 10 1 2 3 8 9 11 12 10 9 11 12 9 6 3 1 15 20 14 8 12 25 1 16 6 8 4 8 4 6 5 5 1 2 PE#3 7 7 1 2 PE#2 3 08-APR22 37 各SMPノード=幾何学的な領域 MPIによる領域間通信 Node-0 Node-2 Node-1 Node-3 Node-0 PE PE M PE e PE m PE o PE r PE y PE Node-1 PE PE M PE e PE m PE o PE r PE y PE PE PE M PE e PE m PE o PE r PE y PE Node-2 PE PE M PE e PE m PE o PE r PE y PE Node-3 08-APR22 38 前処理付共役勾配法 Preconditioned Conjugate Gradient Method (PCG) Compute r(0)= b-[A]x(0) for i= 1, 2, … solve [M]z(i-1)= r(i-1) ri-1= r(i-1) z(i-1) if i=1 p(1)= z(0) else bi-1= ri-1/ri-2 p(i)= z(i-1) + bi-1 z(i) endif q(i)= [A]p(i) ai = ri-1/p(i)q(i) x(i)= x(i-1) + aip(i) r(i)= r(i-1) - aiq(i) check convergence |r| end 08-APR22 39 前処理付き反復法の計算プロセス • • • • 内積 ベクトルの定数倍の加減 行列ベクトル積 前処理 08-APR22 40 前処理付き反復法の計算プロセス 「前処理」以外は容易にベクトル化可能 ① ベクトル内積 RHO= 0.d0 do i= 1, N RHO= RHO + r(i)*z(i) enddo ② ベクトルの実数倍の加減 do i= 1, N p(i)= z(i) + BETA*p(i) enddo ③ 行列ベクトル積 do i= 1, N VAL= D(i)*p(i) do j= 1, INL(i) VAL= VAL + AL(j,i)*p(IAL(j,i)) enddo do j= 1, INU(i) VAL= VAL + AU(j,i)*p(IAU(j,i)) enddo q(i)= VAL enddo ① ベクトル内積 RHO= 0.d0 !CDIR NODEP do i= 1, N RHO= RHO + r(i)*z(i) enddo ② ベクトルの実数倍の加減 !CDIR NODEP do i= 1, N p(i)= z(i) + BETA*p(i) enddo ③ 行列ベクトル積 do i= 1, N VAL= D(i)*p(i) !CDIR NODEP do j= 1, INL(i) VAL= VAL + AL(j,i)*p(IAL(j,i)) enddo !CDIR NODEP do j= 1, INU(i) VAL= VAL + AU(j,i)*p(IAU(j,i)) enddo q(i)= VAL enddo 08-APR22 41 ベクトル計算 • ベクトルレジスタサイズが256の場合(e.g.地球シ ミュレータ),下記において,N=1000とすると: do i= 1, N A(i)= B(i) + C(i) enddo • i=1~256のループは同時に計算される(並列性)。 – 以下同様に,i=257~512, i=513~768, i=769~1000も 同時に計算される。チューニングによって100倍変わる。 08-APR22 42 不完全修正コレスキー分解 i l ik d k l jk aij ( j 1,2,, i 1) k 1 i l ik d k lik aii k 1 ここで lii di 1 とすると以下が導かれる i 1,2,, n j 1,2,, i 1 j 1 lij aij l ik k 1 d i aii k 1 lij aij 1 i 1 lik d k l jk 2 1 d k lii 対角成分のみがもとの 行列と変わる 08-APR22 43 不完全修正コレスキー分解を使用した 前進後退代入 M z LDL z r T z LDL r T 1 d1 0 0 0 0 0 0 0 d2 0 0 0 d3 0 0 0 d4 0 0 0 0 l11 l21 0 0 l22 0 0 0 0 0 0 d 5 0 0 Ly r DLT z y l31 l41 l32 l42 l33 l43 0 l44 0 0 l51 1 l21 / l11 l31 / l11 l52 0 1 l32 / l22 l53 0 0 1 l54 0 0 0 l55 0 0 0 l41 / l11 l42 / l22 l43 / l33 1 0 l51 / l11 l52 / l22 l53 / l33 l54 / l44 1 データ依存性:メモリの読込み書出し が同時に発生し,並列化・ベクトル化困 難 不完全修正 do i= 1, N 08-APR22 44 コレスキー 分解 VAL= D(i) do j= 1, INL(i) VAL= VAL - (AL(j,i)**2) * W(IAL(j,i),DD) enddo W(i,DD)= 1.d0/VAL enddo 前進代入 do i= 1, N WVAL= W(i,Z) do j= 1, INL(i) WVAL= WVAL - AL(j,i) * W(IAL(j,i),Z) enddo W(i,Z)= WVAL * W(i,DD) enddo 08-APR22 45 「地球シミュレータ」における最適化 • 仮説 – IC(0)前処理はFactorizationを含むため,何らかの陽的なデー タ操作(e.g. Re-Ordering)をしないと,ベクトル化はできないだ ろう(データ依存性の排除によるベクトル処理,最適化)。 • 並列・ベクトル計算のためのRe-Ordering手法 – 処理の局所化,依存性の排除 – 連続的なメモリアクセス – 長いループ長(ベクトル化の場合) 08-APR22 46 要素の色づけ(coloring) • 例えば以下のようなオペレーション(Gauss-Seidel) を考慮した場合 do j= 1, N do i= 1, M PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo (i,j+1) (i-1,j) (i,j) (i,j-1) (i+1,j) 08-APR22 47 要素の色づけ(coloring) • 要素(i,j)と隣接する4要素はデータ依存性がある (dependent):このままではベクトル化できない do j= 1, N do i= 1, M PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo (i,j+1) (i-1,j) (i,j) (i,j-1) (i+1,j) 08-APR22 48 要素の色づけ(coloring) • 無理にベクトル化すると正しい解が得られない。 do j= 1, N !CDIR NODEP do i= 1, M PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo (i,j+1) (i-1,j) (i,j) (i,j-1) (i+1,j) 08-APR22 49 要素の色づけ(coloring) • 要素(i,j) と (i-1,j+1), (i+1,j+1), (i-1,j-1), (i+1,j+1) はデー タ依存性が無い(independent)。 • したがって,これらの要素(下図の黄緑色の要素)は 同時に計算が可能である:並列性⇒ベクトル計算の可 能性 (i-1,j+1) (i,j+1) (i+1,j+1) (i-1,j) (i,j) (i+1,j) (i-1,j-1) (i,j-1) (i+1,j-1) 08-APR22 50 Red-Black Coloring 08-APR22 51 Red-Black Coloring 赤と黒:独立に計算できる 08-APR22 52 Red-Black Coloring do j= 1, N do i= 1, M if (RED(i,j) then PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j endif enddo enddo do j= 1, N do i= 1, M if (BLACK(i,j) then PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j endif enddo enddo 08-APR22 53 Red-Black Coloring RED(i+jが偶数):右辺はBLACK do j= 1, N-1, 2 !CDIR NODEP do i= 1, M-1, 2 PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo do j= 2, N, 2 !CDIR NODEP do i= 2, M, 2 PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo 08-APR22 54 Red-Black Coloring BLACK(i+jが奇数):右辺はRED do j= 1, N-1, 2 !CDIR NODEP do i= 2, M, 2 PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo do j= 2, N, 2 !CDIR NODEP do i= 1, M-1, 2 PHI(i,j)= (RHS(i,j)& AW(i,j)*PHI(i-1,j)-AE(i,j)*PHI(i+1,j)& AS(i,j)*PHI(i,j-1)-AN(i,j)*PHI(i,j+1))/AC(i,j enddo enddo 08-APR22 55 Red-Black Coloring • Red要素を計算する場合 – 右辺に来るのはBlack要素 – Red要素を計算している間, 右辺のBlack要素は不変 • Black要素を計算する場合 – 右辺に来るのはRed要素 – Black要素を計算している間, 右辺のRed要素は不変 • データ依存性を排除するこ とができる 08-APR22 56 Red-Black Ordering/Reordering 13 14 15 16 15 7 16 8 9 10 11 12 5 13 6 14 5 6 7 8 11 3 12 4 1 2 3 4 1 9 2 10 • 差分格子のような(i,j)型ではなく,1から順番に要 素番号が振られている場合,要素番号を「Red」⇒ 「Black」の順にふり直す(reordering, ordering)と プログラムが簡単になる(計算効率も高い) 08-APR22 57 ベクトル計算のためのオーダリング法 15 11 16 12 15 7 16 8 10 13 15 16 9 13 10 14 5 13 6 14 6 9 12 14 7 3 8 4 11 3 12 4 3 5 8 11 1 5 2 6 1 9 2 10 1 2 4 7 マルチカラーオーダリング (4色,2色=Red-Black): - 要素間結合グラフをもとにオーダリング - 並列性,独立性重視 CM法(Cuthill-McKee): - 要素間結合グラフに基づき オーダリング - 色間の依存性も考慮 • いずれの手法も,要素間結合グラフを利用。 • 同じ「色」付けされた要素同士は,データ依存性が無い。 – 並列計算(すなわちベクトル計算)が可能 08-APR22 58 Re-Ordering Technique for Vector/Parallel Architectures Cyclic DJDS(RCM+CMC) Re-Ordering (Doi, Washio, Osoda and Maruyama (NEC)) 1. RCM (Reverse Cuthil-Mckee) 2. CMC (Cyclic Multicolor) Vector SMP Parallel 3. DJDS re-ordering Vector 4. Cyclic DJDS for SMP unit SMP Parallel These processes can be substituted by traditional multi-coloring (MC). 08-APR22 59 「地球シミュレータ」における最適化 • 仮説 – IC(0)前処理はFactorizationを含むため,何らかの陽的なデー タ操作(e.g. Re-Ordering)をしないと,ベクトル化はできないだ ろう(データ依存性の排除によるベクトル処理,最適化)。 • 並列・ベクトル計算のためのRe-Ordering手法 – 処理の局所化,依存性の排除 – 連続的なメモリアクセス – 長いループ長(ベクトル化の場合) この2項目はクリア 08-APR22 60 「地球シミュレータ」における最適化 • 仮説 – IC(0)前処理はFactorizationを含むため,何らかの陽的なデー タ操作(e.g. Re-Ordering)をしないと,ベクトル化はできないだ ろう(データ依存性の排除によるベクトル処理,最適化)。 • 並列・ベクトル計算のためのRe-Ordering手法 – 処理の局所化,依存性の排除 – 連続的なメモリアクセス – 長いループ長(ベクトル化の場合) 次はこれ 08-APR22 61 非構造格子における疎行列格納法 1D-Storage (CRS) memory saved, short vector length 2D-Storage long vector length, many ZERO’s 08-APR22 62 各「色」内におけるRe-Ordering 非ゼロ非対角成分の数 各「色」内の要素は互いに独立,従って,色内で計算順序を 変更しても計算結果は変わらない。 DJDS : Descending-Order Jagged Diagonal Storage 08-APR22 63 「地球シミュレータ」における最適化 • 仮説 – IC(0)前処理はFactorizationを含むため,何らかの陽的なデー タ操作(e.g. Re-Ordering)をしないと,ベクトル化はできないだ ろう(データ依存性の排除によるベクトル処理,最適化)。 • 並列・ベクトル計算のためのRe-Ordering手法 – 処理の局所化,依存性の排除 – 連続的なメモリアクセス – 長いループ長(ベクトル化の場合) • Hybrid Parallel Programming:3層の並列構造 – ノード間 : MPI – ノード内 : OpenMP – 各PE : Vectorization 08-APR22 64 Cyclic DJDS (MC/CM-RCM) Cyclic Re-Ordering for SMP units SMPノード内の各PEにおける負荷分散 iS+1 iv0+1 iE do iv= 1, NCOLORS !$omp parallel do do ip= 1, PEsmpTOT iv0= STACKmc(PEsmpTOT*(iv-1)+ip- 1) do j= 1, NLhyp(iv) iS= INL(npLX1*(iv-1)+PEsmpTOT*(j-1)+ip-1) iE= INL(npLX1*(iv-1)+PEsmpTOT*(j-1)+ip ) !cdir nodep do i= iv0+1, iv0+iE-iS k= i+iS - iv0 kk= IAL(k) (Important Computations) enddo enddo enddo enddo npLX1= NLmax * PEsmpTOT INL(0:NLmax*PEsmpTOT*NCOLORS) 08-APR22 65 Flat MPI & Hybridの違い • ほとんどの労力はベクトル化に費やされる。 • 充分に長い依存性のないベクトルを生成できれば,そ れを分割してSMPノード上の各PEにばらまくだけ。 • 従って,HybridとFlat MPIはプログラム上はほとんど変 りなくなる。 –Flat MPIはスレッド数=1のHybridに相当する。 08-APR22 66 Cyclic DJDS (MC/CM-RCM) for Forward/Backward Substitution in BILU Factorization do iv= 1, NCOLORS !$omp parallel do private (iv0,j,iS,iE… etc.) do ip= 1, PEsmpTOT iv0= STACKmc(PEsmpTOT*(iv-1)+ip- 1) SMP do j= 1, NLhyp(iv) parallel iS= INL(npLX1*(iv-1)+PEsmpTOT*(j-1)+ip-1) iE= INL(npLX1*(iv-1)+PEsmpTOT*(j-1)+ip ) !CDIR NODEP do i= iv0+1, iv0+iE-iS k= i+iS - iv0 kk= IAL(k) Vectorized X(i)= X(i) - A(k)*X(kk)*DINV(i) etc. enddo enddo enddo enddo 08-APR22 67 Simple 3D Cubic Model z Uniform Distributed Force in z-dirrection @ z=Zmin Uy=0 @ y=Ymin Ux=0 @ x=Xmin Nz-1 Ny-1 Uz=0 @ z=Zmin x y Nx-1 08-APR22 68 Effect of Ordering 08-APR22 69 Effect of Re-Ordering Long Loops Continuous Access PDJDS/CM-RCM Short Loops Continuous Access Short Loops Irregular Access PDCRS/CM-RCM CRS no re-ordering short innermost loop 08-APR22 70 Matrix Storage, Loops • DJDS (Descending order Jagged Diagonal Storage) は 最内ループ長が長くベクトル計 算向け DJDS do iv= 1, NVECT iv0= STACKmc(iv-1) do j= 1, NLhyp(iv) iS= index_L(NL*(iv-1)+ j-1) iE= index_L(NL*(iv-1)+ j ) do i= iv0+1, iv0+iE-iS k= i+iS - iv0 kk= item_L(k) Z(i)= Z(i) - AL(k)*Z(kk) enddo iS= STACKmc(iv-1) + 1 iE= STACKmc(iv ) do i= iS, iE Z(i)= Z(i)/DD(i) enddo enddo enddo • DCRS (Compressed RowStorage)は,ローカルなオペ レーションが特徴,キャッシュの あるスカラープロセッサ向け DCRS do i= 1, N SW= WW(i,Z) isL= index_L(i-1)+1 ieL= index_L(i) do j= isL, ieL k = item_L(j) SW= SW - AL(j)*Z(k) enddo Z(i)= SW/DD(i) enddo 08-APR22 71 PDJDS/CM-RCM Effect of Re-Ordering PDCRS/CM-RCM CRS no re-ordering short innermost loop Results on 1 SMP node Color #: 99 (fixed) Re-Ordering is REALLY required !!! ● ■ ▲ 1.E+02 GFLOPS 1.E+01 Effect of Vector Length X10 1.E+00 + Re-Ordering X100 22 GFLOPS, 34% of the Peak 1.E-01 1.E-02 1.E+04 1.E+05 1.E+06 DOF Ideal Performance: 40%-45% 1.E+07 for Single CPU 08-APR22 72 Effect of Re-Ordering Results on 1 SMP node Color #: 99 (fixed) Re-Ordering is REALLY required !!! PDJDS/CM-RCM PDCRS/CM-RCM CRS no re-ordering short innermost loop ● ■ ▲ 1.E+02 80x80x80 case (1.5M DOF) GFLOPS 1.E+01 ● 212 iter’s, 11.2 sec. ■ 212 iter’s, 143.6 sec. ▲ 203 iter’s, 674.2 sec. 1.E+00 1.E-01 1.E-02 1.E+04 1.E+05 1.E+06 DOF 1.E+07 08-APR22 PDJDS/CM-RCM 73 PDCRS/CM-RCM CRS no re-ordering short innermost loop 3D Elastic Simulation Problem Size~GFLOPS Earth Simulator 1 SMP node (8 PE’s) ■ ▲ 1.0E+02 1.0E+02 1.0E+01 1.0E+01 GFLOPS GFLOPS ● 1.0E+00 1.0E+00 1.0E-01 1.0E+04 1.0E-01 1.0E+05 1.0E+06 1.0E+07 DOF: Problem Size 1.0E+04 1.0E+05 Flat-MPI is better. Nice Intra-Node MPI. 1.0E+06 1.0E+07 DOF: Problem Size Flat-MPI Hybrid (OpenMP) 23.4 GFLOPS, 36.6 % of Peak 21.9 GFLOPS, 34.3 % of Peak 08-APR22 74 Hitachi Earth SR8000/MPP Simulator (U.Tokyo) IBM SP3 (LBNL) Hitachi SR11000/J2 (U.Tokyo) Peak Performance GFLOPS 8.00 1.80 1.50 9.20 Measured Memory BW (STREAM) (GB/sec/PE) 26.6 2.85 0.623 8.00 Estimated Performance/Core GFLOPS (% of peak) 2.31-3.24 (28.8-40.5) .291-.347 (16.1-19.3) .072-.076 (4.8-5.1) .880-.973 (9.6-10.6) Measured Performance/Core 2.93 (36.6) .335 (18.6) .122 (8.1) 1.34 (14.5) BYTE/FLOP 3.325 1.583 0.413 0.870 12.3 1.60 1.00 12.0 5.6-7.7 6-20 16.3 4.7 * Comm. BW (GB/sec/Node) MPI Latency (msec) * IBM p595 J.T.Carter et al. 08-APR22 75 3D Elastic Simulation Problem Size~GFLOPS PDJDS/CM-RCM Hitachi-SR8000-MPP with Pseudo Vectorization Hybrid is better. 1 SMP node (8 PE’s) Low Intra-Node MPI. PDCRS/CM-RCM CRS no re-ordering short innermost loop ■ ▲ 3.00 3.00 2.50 2.50 2.00 2.00 GFLOPS GFLOPS ● 1.50 1.00 1.50 1.00 0.50 0.50 0.00 0.00 1.0E+04 1.0E+05 1.0E+06 1.0E+07 DOF: Problem Size 1.0E+04 1.0E+05 1.0E+06 1.0E+07 DOF: Problem Size Flat-MPI Hybrid (OpenMP) 2.17 GFLOPS, 15.0 % of Peak 2.68 GFLOPS, 18.6 % of Peak 08-APR22 PDJDS/CM-RCM 76 PDCRS/CM-RCM CRS no re-ordering short innermost loop 3D Elastic Simulation Problem Size~GFLOPS IBM-SP3 (NERSC) 1 SMP node (8 PE’s) ■ ▲ 3.00 3.00 2.50 2.50 2.00 2.00 GFLOPS GFLOPS ● 1.50 1.00 1.50 1.00 0.50 0.50 0.00 0.00 1.0E+04 Cache is well-utilized in Flat-MPI. 1.0E+05 1.0E+06 DOF: Problem Size Flat-MPI 1.0E+07 1.0E+04 1.0E+05 1.0E+06 DOF: Problem Size Hybrid (OpenMP) 1.0E+07 08-APR22 PDJDS/CM-RCM 77 PDCRS/CM-RCM CRS no re-ordering short innermost loop 3D Elastic Simulation Problem Size~GFLOPS Hitachi SR11000/J2 (U.Tokyo) 1 SMP node (8 PE’s) ■ ▲ 15.0 15.0 10.0 10.0 GFLOPS GFLOPS ● 5.0 5.0 0.0 0.0 1.E+04 1.E+05 1.E+06 DOF Flat-MPI 1.E+07 1.E+04 1.E+05 1.E+06 DOF Hybrid (OpenMP) 1.E+07 08-APR22 78 SMP node # > 10 up to 176 nodes (1408 PEs) Problem size for each SMP node is fixed. PDJDS-CM/RCM, Color #: 99 08-APR22 79 3D Elastic Model (Large Case) 256x128x128/SMP node, up to 2,214,592,512 DOF Parallel Work Ratio GFLOPS rate 4000 100 GFLOPS 3000 ●Flat MPI 2000 1000 0 Parallel Work Ratio: % ○Hybrid 90 80 70 60 50 40 0 16 32 48 64 80 96 112 128 144 160 176 192 NODE# 0 16 32 48 64 80 96 112 128 144 160 176 192 NODE# 3.8TFLOPS for 2.2G DOF ●:Flat MPI, ○:Hybrid 176 nodes (33.8% of peak) 08-APR22 80 3D Elastic Model (Small Case) 64x64x64/SMP node, up to 125,829,120 DOF Parallel Work Ratio GFLOPS rate 100 GFLOPS 3000 ○Hybrid 2000 1000 ●Flat MPI 0 Parallel Work Ratio: % 4000 90 80 70 60 50 40 0 16 32 48 64 80 96 112 128 144 160 176 192 0 16 32 48 64 80 96 112 128 144 160 176 192 NODE# NODE# ●:Flat MPI, ○:Hybrid 08-APR22 81 Hybrid vs. Flat-MPI • Hybridが優位に立つのは・・・ – SMPノードの数が多い場合 – 各ノードあたりの問題規模が小さい場合 • なぜなら,Flat-MPIは – 通信プロセス数が8倍 – 通信/計算 比が2倍(通信の割合が高い) • 通信の影響はノード数が多くなると顕著になる • D.Kerbyson (LANL)による性能予測 – LA-UR-02-5222 – ESの通信 Latency の影響 08-APR22 Flat-MPI and Hybrid Flat-MPI Hybrid N N N 82 Flat MPI Hybrid Problem size/each MPI Process (N=number of FEM nodes in one direction of cube geometry 3N3 38N3 Size of messages on each surfaces with each neighboring domain 3N2 34N2 Ratio of communication/computation 1/N 1/(2N) 08-APR22 83 Hitachi Earth SR8000/MPP Simulator (U.Tokyo) IBM SP3 (LBNL) Hitachi SR11000/J2 (U.Tokyo) Peak Performance GFLOPS 8.00 1.80 1.50 9.20 Measured Memory BW (STREAM) (GB/sec/PE) 26.6 2.85 0.623 8.00 Estimated Performance/Core GFLOPS (% of peak) 2.31-3.24 (28.8-40.5) .291-.347 (16.1-19.3) .072-.076 (4.8-5.1) .880-.973 (9.6-10.6) Measured Performance/Core 2.93 (36.6) .335 (18.6) .122 (8.1) 1.34 (14.5) BYTE/FLOP 3.325 1.583 0.413 0.870 12.3 1.60 1.00 12.0 5.6-7.7 6-20 16.3 4.7 * Comm. BW (GB/sec/Node) MPI Latency (msec) * IBM p595 J.T.Carter et al. 08-APR22 84 通信オーバーヘッドは何故生じる? • 立ち上がりのLatency • 有限の通信バンド幅 • 同期オーバーヘッド – SEND/RECV, ALLREDUCE etc. • 実はメモリバンド幅も影響 – 送受信の際にメモリーコピーが発生する 08-APR22 85 Domain-to-Domain Communication Exchange Boundary Information (SEND/RECV) subroutine SOLVER_SEND_RECV (N, NEIBPETOT, NEIBPE, IMPORT_INDEX, IMPORT_NODE, EXPORT_INDEX, EXPORT_NODE, WS, WR, X, SOLVER_COMM, my_rank) & & & & implicit REAL*8 (A-H,O-Z) include 'mpif.h' parameter (KREAL= 8) integer IMPORT_INDEX(0:NEIBPETOT), IMPORT_NODE(N) integer EXPORT_INDEX(0:NEIBPETOT), EXPORT_NODE(N) integer SOLVER_COMM, my_rank integer req1(NEIBPETOT), req2(NEIBPETOT) integer sta1(MPI_STATUS_SIZE, NEIBPETOT) integer sta2(MPI_STATUS_SIZE, NEIBPETOT) real(kind=KREAL) X(N), NEIBPE(NEIBPETOT), WS(N), WR(N) do neib= 1, NEIBPETOT SEND istart= EXPORT_INDEX(neib-1) inum = EXPORT_INDEX(neib ) - istart do k= istart+1, istart+inum WS(k)= X(EXPORT_NODE(k)) enddo call MPI_ISEND (WS(istart+1), inum, MPI_DOUBLE_PRECISION, & NEIBPE(neib), 0, SOLVER_COMM, & req1(neib), ierr) enddo do neib= 1, NEIBPETOT RECEIVE istart= IMPORT_INDEX(neib-1) inum = IMPORT_INDEX(neib ) - istart call MPI_IRECV (WR(istart+1), inum, MPI_DOUBLE_PRECISION, & NEIBPE(neib), 0, SOLVER_COMM, & req2(neib), ierr) enddo call MPI_WAITALL (NEIBPETOT, req2, sta2, ierr) do neib= 1, NEIBPETOT istart= IMPORT_INDEX(neib-1) inum = IMPORT_INDEX(neib ) - istart do k= istart+1, istart+inum X(IMPORT_NODE(k))= WR(k) enddo enddo call MPI_WAITALL (NEIBPETOT, req1, sta1, ierr) return end 08-APR22 86 Domain-to-Domain Communication Exchange Boundary Information (SEND/RECV) subroutine SOLVER_SEND_RECV (N, NEIBPETOT, NEIBPE, IMPORT_INDEX, IMPORT_NODE, EXPORT_INDEX, EXPORT_NODE, WS, WR, X, SOLVER_COMM, my_rank) & & & & implicit REAL*8 (A-H,O-Z) include 'mpif.h' parameter (KREAL= 8) integer IMPORT_INDEX(0:NEIBPETOT), IMPORT_NODE(N) integer EXPORT_INDEX(0:NEIBPETOT), EXPORT_NODE(N) integer SOLVER_COMM, my_rank integer req1(NEIBPETOT), req2(NEIBPETOT) integer sta1(MPI_STATUS_SIZE, NEIBPETOT) integer sta2(MPI_STATUS_SIZE, NEIBPETOT) real(kind=KREAL) X(N), NEIBPE(NEIBPETOT), WS(N), WR(N) do neib= 1, NEIBPETOT SEND istart= EXPORT_INDEX(neib-1) inum = EXPORT_INDEX(neib ) - istart do k= istart+1, istart+inum WS(k)= X(EXPORT_NODE(k)) enddo call MPI_ISEND (WS(istart+1), inum, MPI_DOUBLE_PRECISION, & NEIBPE(neib), 0, SOLVER_COMM, & req1(neib), ierr) enddo do neib= 1, NEIBPETOT RECEIVE istart= IMPORT_INDEX(neib-1) inum = IMPORT_INDEX(neib ) - istart call MPI_IRECV (WR(istart+1), inum, MPI_DOUBLE_PRECISION, & NEIBPE(neib), 0, SOLVER_COMM, & req2(neib), ierr) enddo call MPI_WAITALL (NEIBPETOT, req2, sta2, ierr) do neib= 1, NEIBPETOT istart= IMPORT_INDEX(neib-1) inum = IMPORT_INDEX(neib ) - istart do k= istart+1, istart+inum X(IMPORT_NODE(k))= WR(k) enddo enddo call MPI_WAITALL (NEIBPETOT, req1, sta1, ierr) return end 08-APR22 87 Communication Overhead Memory Copy Comm. Latency Comm. BandWidth 08-APR22 88 Communication Overhead Memory Copy depends on message size Comm. Latency Comm. BandWidth depends on message size 08-APR22 89 Communication Overhead Earth Simulator Comm. Latency 08-APR22 90 Communication Overhead Hitachi SR11000, IBM SP3 etc. Memory Copy Comm. BandWidth 08-APR22 91 Communication Overhead = Synchronization Overhead 08-APR22 92 Communication Overhead = Synchronization Overhead Memory Copy Comm. Latency Comm. BWTH 08-APR22 93 Communication Overhead = Synchronization Overhead Earth Simulator Comm. Latency 08-APR22 94 Communication Overhead Weak Scaling: Earth Simulator Comm. Overhead (sec.) 0.06 ●○ 3x503 DOF/PE ▲△ 3x323 DOF/PE ●▲ Flat-MPI ○△ Hybrid 0.04 Effect of message size is small. Effect of latency is large. 0.02 0.00 10 100 1000 PE# 10000 Memory-copy is so fast. 08-APR22 95 Communication Overhead Weak Scaling: IBM SP-3 Comm. Overhead (sec.) 0.40 ●○ 3x503 DOF/PE ▲△ 3x323 DOF/PE ●▲ Flat-MPI ○△ Hybrid 0.30 Effect of message size is more significant. 0.20 0.10 0.00 10 1000 100 PE# 10000 08-APR22 96 Communication Overhead Weak Scaling: Hitachi SR11000/J2 (8cores/node) Comm. Overhead (sec.) 0.10 ●○ 3x503 DOF/PE ▲△ 3x323 DOF/PE ●▲ Flat-MPI ○△ Hybrid 0.08 0.06 0.04 0.02 0.00 10 100 cores 1000 08-APR22 97 まとめ • 「地球シミュレータ」における非構造格子向け Hybridプログラミングモデルを使用した前処理付き 反復法を開発した。 • 高い並列,ベクトル性能を達成した。22億自由度の 三次元弾性問題,BIC(0)-CG法により176ノード (1408 PE)を使用して3.8TFLOPS(ピーク性能 の33.8%)を達成した。 – 櫛田氏 (奥田研学生,現JAEA) は512ノードを使用して30 億自由度の問題で10TFLOPSを達成した。 • Re-Orderingはやっぱり必要である。 08-APR22 98 まとめ(Flat MPI vs. Hybrid) • 少ないノード数ではFlat MPI有利。 • 大きなノード数ではHybrid有利。 – 特に1ノードあたりの問題規模が小さい場合 • 言い換えると・・・バンド幅の問題 – 通信支配:Hybrid – メモリ支配:Flat MPI – これはHW条件,問題規模ばかりでなく,アプリケーションの傾 向でもある。 • Hybrid はFlat-MPIと比較して色数に対して敏感 – Hybrid is much more sensitive to color numbers than flat MPI due to synchronization overhead of OpenMP. • 地球シミュレータのノード間ネットワーク – 今にして有難さを実感している 08-APR22 99 • 背景 – – – – スカラープロセッサとベクトルプロセッサ GeoFEMプロジェクト 地球シミュレータ 前処理付き反復法 • FEMコードの「地球シミュレータ」における 最適化戦略 – BIC(0)-CG法による並列反復法ソルバー – 係数行列作成部分 • まとめ 08-APR22 100 “CUBE” Benchmark • 3D linear elastic applications on cubes for a wide range of problem size. • 1CPUによる比較 – Earth Simulator – AMD Opteron (1.8GHz) z Uniform Distributed Force in z-dirrection @ z=Zmin Uy=0 @ y=Ymin Ux=0 @ x=Xmin Nz-1 Ny-1 Uz=0 @ z=Zmin x y Nx-1 08-APR22 101 Time for 3x643=786,432 DOF ES 8.0 GFLOPS Opteron 1.8GHz DCRS sec. (MFLOPS) DJDS original sec. (MFLOPS) Matrix 28.6 (291) 34.2 (240) Solver 360 (171) 21.7 (3246) Total 389 55.9 Matrix 10.2 (818) 12.4 (663) Solver 225 (275) 271 (260) Total 235 283 3.6 GFLOPS DCRS DJDS 08-APR22 102 Matrix+Solver 60 50 sec. 40 DJDS on ES original 30 20 10 0 41472 98304 192000 375000 786432 DOF 300 sec. 200 DJDS on Opteron original 100 0 41472 98304 192000 DOF 375000 786432 Matrix Solver 08-APR22 103 Computation Time vs. Problem Size 40 300 Matrix Solver 30 sec. sec. 200 20 100 10 0 0 41472 98304 192000 375000 786432 DOF 41472 98304 192000 375000 786432 DOF 300 Total ES (DJDS original) sec. 200 Opteron (DJDS original) Opteron (DCRS) 100 0 41472 98304 192000 DOF 375000 786432 08-APR22 104 係数マトリクス生成部のほうが実は計 算時間を要している • この部分も「ベクトル化」の必要がある • 非線形計算(例えば弾塑性解析,カップルした Navier-Stokes方程式)では,非線形反復のたびに 係数マトリクスを更新する必要がある。 • 係数マトリクス生成はアプリケーションに強く依 存するため,線形ソルバーなどの違って「ライブ ラリ化」もしにくい – 特にFEMの場合,ベクトル化が困難な複雑なプロセス を含む可能性もある 08-APR22 105 FEMにおける係数マトリクスの計算 • ガラーキン法を各要素に適用して積分 – 要素マトリクスを得る • 要素マトリクスを重ね合わせて「全体マトリクス (Global Matrix)」を得る • 要素マトリクスの計算そのものは,要素ごとに独 立して実施できるため,いわゆるEmbarassingly Parallelなプロセスである 08-APR22 106 Element-by-Element Operations • Integration over each element => element-matrix • Element matrices are accumulated to each node => global-matrix • Linear equations for each node 19 20 21 22 23 24 13 14 15 16 17 18 7 8 9 10 11 12 1 2 3 4 5 6 Elements 08-APR22 107 Element-by-Element Operations • Integration over each element => element-matrix • Element matrices are accumulated to each node => global-matrix • Linear equations for each node 29 30 19 22 20 23 13 15 24 16 8 21 12 13 5 5 28 20 12 Nodes 18 11 4 4 27 19 11 35 24 17 10 3 3 26 18 10 34 23 16 9 2 2 25 17 9 33 22 15 8 1 32 21 14 7 1 31 14 6 6 7 08-APR22 108 Element-by-Element Operations • Integration over each element => element-matrix • Element matrices are accumulated to each node => global-matrix • Linear equations for each node X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 08-APR22 109 Element-by-Element Operations • Integration over each element => element-matrix • Element matrices are accumulated to each node => global-matrix E E E E • Linear equations for each node 11 E 21 E31 E41 12 13 E22 E32 E23 E33 E42 E43 E24 E34 E44 14 08-APR22 110 Element-by-Element Operations • Integration over each element => element-matrix • Element matrices are accumulated to each node => global-matrix • Linear equations for each node 29 30 31 32 33 34 35 22 23 24 25 26 27 28 15 16 17 18 19 20 21 8 9 10 11 12 13 14 1 2 3 4 5 6 7 08-APR22 111 Element-by-Element Operations • Integration over each element => element-matrix • Element matrices are accumulated to each node => global-matrix • Linear equations for each node a1,1 a 2,1 a1, 2 a2 , 2 a3,3 ... a33,33 a34 ,34 a35,34 u1 f1 u2 f 2 u3 f 3 ... ... u33 f 33 a34 ,35 u34 f 34 a35,35 u35 f 35 08-APR22 112 Element-by-Element Operations 22 23 13 15 14 16 7 8 24 17 8 9 10 a1,1 a 2,1 a1, 2 a2 , 2 a3,3 ... a33,33 a34 ,34 a35,34 u1 f1 u2 f 2 u3 f 3 ... ... u33 f 33 a34 ,35 u34 f 34 a35,35 u35 f 35 • a23,16 と a16,23を計算するためには,13番と14番 要素の寄与を考慮する必要がある 08-APR22 113 Current Approach 22 23 13 15 14 16 7 8 24 17 8 9 10 do icel= 1, ICELTOT do ie= 1, 4 do je= 1, 4 - assemble element-matrix - accumulated element-matrix to global-matrix enddo enddo enddo 08-APR22 114 Current Approach 22 23 13 15 14 16 7 8 24 17 8 9 10 do icel= 1, ICELTOT do ie= 1, 4 Local Node ID do je= 1, 4 - assemble element-matrix - accumulat element-matrix to global-matrix enddo enddo enddo 4 3 Local Node ID for each bi-linear 4-node element 1 2 08-APR22 115 Current Approach 22 23 13 15 14 16 7 8 24 17 8 9 10 do icel= 1, ICELTOT do ie= 1, 4 Local Node ID do je= 1, 4 - assemble element-matrix - accumulat element-matrix to global-matrix enddo enddo enddo • スカラープロセッサ向け – キャッシュの再利用に適している • ベクトルプロセッサ向けで無い – a16,23 ・ a23,16 ⇒正しく計算されな い可能性がある – 最内ループ短い – 分岐が多い ES 8.0 GFLOPS Opteron 1.8GHz DCRS sec. (MFLOPS) DJDS original sec. (MFLOPS) Matrix 28.6 (291) 34.2 (240) Solver 360 (171) 21.7 (3246) Total 389 55.9 Matrix 10.2 (818) 12.4 (663) Solver 225 (275) 271 (260) Total 235 283 3.6 GFLOPS 08-APR22 116 Inside the loop: integration at Gaussian quadrature points do jpn= 1, 2 do ipn= 1, 2 coef= dabs(DETJ(ipn,jpn))*WEI(ipn)*WEI(jpn) PNXi= PNX(ipn,jpn,ie) PNYi= PNY(ipn,jpn,ie) PNXj= PNX(ipn,jpn,je) PNYj= PNY(ipn,jpn,je) a11= a22= a12= a21= enddo enddo a11 a22 a12 a21 + + + + (valX*PNXi*PNXj (valX*PNYi*PNYj (valA*PNXi*PNYj (valA*PNYi*PNXj + + + + valB*PNYi*PNYj)*coef valB*PNXi*PNXj)*coef valB*PNXj*PNYi)*coef valB*PNYj*PNXi)*coef 08-APR22 117 ベクトルプロセッサ向け対策 22 23 13 15 14 16 7 8 24 17 8 9 10 do icel= 1, ICELTOT do ie= 1, 4 do je= 1, 4 - assemble element-matrix - accumulat element-matrix to global-matrix enddo enddo enddo • a16,23 ・ a23,16 ⇒(無理にベクトル化すると)正 しく計算されない可能性あり – 再び「色づけ(coloring)」 – 同じ節点を共有する要素は違う「色」に属する 08-APR22 118 Coloring of Elements 29 30 31 32 33 34 35 22 23 24 25 26 27 28 15 16 17 18 19 20 21 8 9 10 11 12 13 14 1 2 3 4 5 6 7 08-APR22 119 Coloring of Elements Elements sharing the 16th node are assigned to different colors 29 30 31 32 33 34 35 22 23 24 25 26 27 28 15 16 17 18 19 20 21 8 9 10 11 12 13 14 1 2 3 4 5 6 7 08-APR22 120 ベクトルプロセッサ向け対策 22 23 13 15 14 16 7 8 24 17 8 9 10 do icel= 1, ICELTOT do ie= 1, 4 do je= 1, 4 - assemble element-matrix - accumulat element-matrix to global-matrix enddo enddo enddo • a16,23 ・ a23,16 ⇒正しく計算されない可能性あり – 再び「色づけ(coloring)」 – 同じ節点を共有する要素は違う「色」に属する • 短い最内ループ – ループ交換 08-APR22 121 ベクトルプロセッサ向け対策 22 23 13 15 14 16 7 8 24 17 8 9 10 do icel= 1, ICELTOT do ie= 1, 4 do je= 1, 4 - assemble element-matrix - accumulat element-matrix to global-matrix enddo enddo enddo • a16,23 ・ a23,16 ⇒正しく計算されない可能性あり – 再び「色づけ(coloring)」 – 同じ節点を共有する要素は違う「色」に属する • 短い最内ループ – ループ交換 • 分岐が多い – 要素~全体行列参照配列(Element-to-Matrix array) 08-APR22 122 Define ELEMENT-to-MATRIX array 22 23 13 15 24 7 23 ④ 15 ① ③ 23 13 17 8 9 ③ 22 14 16 8 ④ 24 14 16 16 ② ① Local Node ID 17 ② 10 if if kkU= index_U(16-1+k) and item_U(kkU)= 23 then ELEMmat(13,2,3)= +kkU ELEMmat(14,1,4)= +kkU endif ELEMmat(icel, ie, je) Element ID Local Node ID kkL= index_L(23-1+k) and item_L(kkL)= 16 then ELEMmat(13,3,2)= -kkL ELEMmat(14,4,1)= -kkL endif 08-APR22 123 Define ELEMENT-to-MATRIX array 22 23 13 15 24 7 23 ④ 15 ① ③ 23 13 17 8 9 ③ 22 14 16 8 ④ 24 14 16 16 ② ① Local Node ID 17 ② 10 if if kkU= index_U(16-1+k) and item_U(kkU)= 23 then ELEMmat(13,2,3)= +kkU ELEMmat(14,1,4)= +kkU endif kkL= index_L(23-1+k) and item_L(kkL)= 16 then ELEMmat(13,3,2)= -kkL ELEMmat(14,4,1)= -kkL endif “ELEMmat”は各要素の各節点と全体マトリクスにおけるアド レスとの関係を示す 08-APR22 124 Optimized Procedure do icol= 1, NCOLOR_E_tot do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - define “ELEMmat” array enddo enddo enddo enddo do icol= 1, NCOLOR_E_tot do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - assemble element-matrix enddo enddo enddo do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - accumulate element-matrix to global-matrix enddo enddo enddo enddo Extra Computation for • ELEMmat Extra Storage for • ELEMmat array • element-matrix components for elements in each color • < 10% increase 08-APR22 125 Optimized Procedure do icol= 1, NCOLOR_E_tot do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - define “ELEMmat” array enddo enddo enddo enddo do icol= 1, NCOLOR_E_tot do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - assemble element-matrix enddo enddo enddo do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - accumulate element-matrix to global-matrix enddo enddo enddo enddo PART I “Integer” operations for “ELEMmat” In nonlinear cases, this part should be done just once (before initial iteration), as long as mesh connectivity does not change. 08-APR22 126 Optimized Procedure do icol= 1, NCOLOR_E_tot do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - define “ELEMmat” array enddo enddo enddo enddo do icol= 1, NCOLOR_E_tot do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - assemble element-matrix enddo enddo enddo do ie= 1, 4 do je= 1, 4 do ic0= index_COL(icol-1)+1, indexCOL_(icol) icel= item_COL(ic0) - accumulate element-matrix to global-matrix enddo enddo enddo enddo PART I “Integer” operations for “ELEMmat” In nonlinear cases, this part should be done just once (before initial iteration), as long as mesh connectivity does not change. PART II “Floating” operations for matrix assembling/accumulation. In nonlinear cases, this part is repeated for every nonlinear iteration. 08-APR22 127 Time for 3x643=786,432 DOF ES 8.0 GFLOPS Opteron 1.8GHz DCRS sec. (MFLOPS) DJDS original sec. (MFLOPS) DJDS improved sec. (MFLOPS) Matrix 28.6 (291) 34.2 (240) 12.5 (643) Solver 360 (171) 21.7 (3246) 21.7 (3246) Total 389 55.9 34.2 Matrix 10.2 (818) 12.4 (663) 21.2 (381) Solver 225 (275) 271 (260) 271 (260) Total 235 283 292 3.6 GFLOPS 08-APR22 128 Time for 3x643=786,432 DOF ES 8.0 GFLOPS Opteron 1.8GHz DCRS sec. (MFLOPS) DJDS original sec. (MFLOPS) DJDS improved sec. (MFLOPS) Matrix 28.6 (291) 34.2 (240) 12.5 (643) Solver 360 (171) 21.7 (3246) 21.7 (3246) Total 389 55.9 34.2 Matrix 10.2 (818) 12.4 (663) 21.2 (381) Solver 225 (275) 271 271 Opteron上ではオリジナル版より (260) (260) 遅い: 3.6 GFLOPS Total 235 ・計算量増大 283・データのローカル性喪失, 292 08-APR22 129 Matrix Solver Matrix+Solver 60 60 sec. 40 DJDS on ES original 50 40 sec. 50 30 30 20 20 10 10 0 0 41472 98304 192000 375000 DJDS on ES improved 786432 41472 98304 DOF 375000 786432 DOF 300 300 DJDS on Opteron original 200 DJDS on Opteron improved sec. sec. 200 192000 100 100 0 0 41472 98304 192000 DOF 375000 786432 41472 98304 192000 375000 786432 08-APR22 130 Computation Time vs. Problem Size 300 40 Matrix Solver 30 sec. sec. 200 20 100 10 0 0 41472 98304 192000 375000 786432 41472 98304 192000 375000 786432 DOF DOF 300 Total ES (DJDS improved) sec. 200 Opteron (DJDS improved) Opteron (DCRS) 100 0 41472 98304 192000 375000 786432 08-APR22 131 “Matrix” computation time for improved version of DJDS 25 Integer (Part I) Floating (Part II) ES 20 15 sec. sec. 20 25 15 10 10 5 5 0 Opteron 0 41472 98304 192000 DOF 375000 786432 41472 98304 192000 DOF 375000 786432 08-APR22 132 係数マトリクス生成部の ベクトルプロセッサ向け最適化 • DJDS用のものは3倍ほど速くなったが,それでも Opetron版DCRSより遅い • 整数演算部(PART I)がボトルネック – 計算の準備部分 – ベクトル長短くせざるを得ない,分岐が結構多い • 実数演算部(PART II)は非常に速くなっている – 整数演算部はメッシュが変わらない限り,最初に一回 計算するだけで良い 08-APR22 133 Suppose “virtual” mode where … • On scalar processor – “Integer” operation part • On vector processor – “floating” operation part – linear solvers • Scalar performance of ES (500MHz) is smaller than that of Pentium III 08-APR22 134 Time for 3x643=786,432 DOF ES 8.0 GFLOPS Opteron 1.8GHz DCRS sec. (MFLOPS) DJDS improved sec. (MFLOPS) DJDS virtual sec. (MFLOPS) Matrix 28.6 (291) 12.5 (643) 1.88 (4431) Solver 360 (171) 21.7 (3246) 21.7 (3246) Total 389 34.2 23.6 Matrix 10.2 (818) 21.2 (381) Solver 225 (275) 271 (260) Total 235 292 3.6 GFLOPS 08-APR22 135 まとめ:有限要素法のベクトル化 • 決して簡単な作業ではない • 有限要素法の特徴である局所性は,ベクトル計算 機の特性と相反する場合もある – 全体マトリクスを対象とする「線形方程式ソルバー」 ではなんとかなるが • 大幅なプログラム書換必要性のある場合もある – 概して,必要記憶容量,行数,オペレーションは増加 • ベクトルプロセッサ向けに最適化すると,スカ ラープロセッサで著しく性能が低下する場合もあ る(マトリクス生成部の例) • ベクトル化できるところを切り分けて重点的に チューニングする(PART I/II)ことも重要 – 最後まで性能の悪いところは残る可能性あり
© Copyright 2024 ExpyDoc