1 / 22

応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング

応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング. 第 3 回 計算理工学専攻 張研究室 山本有作. 前回の概要. 「並列計算機による高性能計算」 1 .  並列計算機の種類と特徴 2 .  共有メモリ型並列計算機 プログラミングモデル 高性能化の技法. 今回の概要. 「並列計算機による高性能計算」 3 .  分散メモリ型並列計算機 プログラミングモデル 高性能化の技法 「連立一次方程式の高性能解法 (密行列の場合)」 1 . LU 分解 2 . LU 分解のブロック化 3 . LU 分解の並列化.

denise
Download Presentation

応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 応用数理工学特論線形計算とハイパフォーマンスコンピューティング応用数理工学特論線形計算とハイパフォーマンスコンピューティング 第3回 計算理工学専攻 張研究室 山本有作

  2. 前回の概要 「並列計算機による高性能計算」 1. 並列計算機の種類と特徴 2. 共有メモリ型並列計算機 • プログラミングモデル • 高性能化の技法

  3. 今回の概要 「並列計算機による高性能計算」 3. 分散メモリ型並列計算機 • プログラミングモデル • 高性能化の技法 「連立一次方程式の高性能解法 (密行列の場合)」 1.LU分解 2.LU分解のブロック化 3.LU分解の並列化

  4. 3.1 分散メモリ型並列計算機のプログラミング3.1 分散メモリ型並列計算機のプログラミング • 通信ライブラリMPI • MPIのプログラミングモデル • MPIの関数 • 行列乗算の例

  5. 通信ライブラリMPI • MPI(Message Passing Interface) • プロセッサ間通信を行うためのサブルーチンの集合 • MPIの機能 • 1対1通信 • ブロードキャスト • 総和演算・最大値 • その他

  6. MPIのプログラミングモデル • SPMD(Single Program Multiple Data) • 全プロセッサが共通のプログラムを実行 • 処理するデータはプロセッサ毎に異なる。 • 各プロセッサは固有の番号(0, 1, … , p-1)を持ち,プログラム中で自分の番号を参照して処理を行う。 • 分散メモリ • 各プロセッサは自分の持つローカルメモリのみをアクセス可能 • 他プロセッサのメモリ上にあるデータが必要な場合は,プロセッサ間通信により取得

  7. MPIの関数 • 起動/終了 • MPI_INIT : MPIの初期化 • MPI_FINALIZE : MPIの終了 • 環境情報の取得 • MPI_COMM_SIZE : 全プロセッサ台数の取得 • MPI_COMM_RANK : プロセッサ番号の取得 • 1対1の送受信 • MPI_SEND : データの送信 • MPI_RECV : データの受信 • 集団通信 • MPI_BCAST : データのブロードキャスト • MPI_REDUCE : リダクション演算(総和/最大値など)

  8. 行列乗算の例 (1) • 問題 • N×N 行列 A,B に対し,P 台のプロセッサを使って C = AB を計算 • A はブロック行分割,B はブロック列分割されているとする。 • 結果の C はブロック列分割の形で求めるとする。 • 各プロセッサは,行列の一部のみを持つ (分散メモリ)。 • また,自分の持つ部分のみにアクセスできる。 PU0 PU3 PU0 A0 PU1 A1 × = B0 B1 B2 B3 C0 C1 C2 C3 PU2 A2 PU3 A3

  9. 行列乗算の例 (2) • 計算の方針 • 各 CJ を縦方向に P 個のブロック C0J, C1J, …, CP-1,J に分ける。 • まず,自分の持つ部分行列のみで計算できる CJJを計算 • その後,他のプロセッサからデータをもらいながら, 他の CIJを計算 program matmult (配列の確保: AJ,BJ,CJ ,ATMP) (MPIの初期化と環境情報取得。自分のプロセッサ番号をJとする。) (配列AJ,BJの初期化) CJJ = AJ×BJ do I = 1, P-1 (プロセッサ MOD(J-I+P,P)にAJを送る。) (プロセッサ MOD(J+I,P)からAMOD(J+I,P)を受け取り,ATMPに格納。) CMOD(J+I,P),J = ATMP×BJ end do (配列CJの出力) (MPIの終了) stop end

  10. 3.2 高性能化の技法 • 基本的な考え方 • 実行時間の予測 • 行列乗算の例

  11. 基本的な考え方 キャッシュ PU0 PU1 PU2 PU3 • PU間の負荷分散均等化 • 各PUの処理量が均等になるよう   処理を分割 • PU間通信量の削減 • 通信には,データ1個あたり数十サイクルの時間が必要 • データ分割の最適化による通信量の削減と通信の隠蔽が重要 • PU間通信回数の削減 • 1回の通信には通常,数百~数千サイクルの起動時間が必要 • 並列粒度の増大による通信回数の削減が重要 • キャッシュメモリの有効利用 メモリ ネットワーク

  12. 実行時間の予測 • 演算時間 • Tcomp = (演算量)/(演算速度) • もっとも単純なモデル化 • より精密には,キャッシュの影響などを考慮する必要あり • 通信時間 • Tcomm = (転送回数)×(起動時間) + (転送量)/(転送速度) • 待ち時間 • Tidle • 全実行時間 • Texec = Tcomp + Tcomm + Tidle

  13. 行列乗算の例 • アルゴリズム • A,C をブロック行分割,B をブロック列分割とした行列乗算 • 実行時間の予測 • Tcomp = 2N3 / P / s :P に反比例して減少 • Tcomm = (P – 1 ) * (Tsetup + (N / P) * N * 8 / b) = (P – 1 ) * Tsetup + 8 (1 – 1 / P) N2 / b) :P とともに減少しない • Tidle = 0 :負荷は完全に均等 PU0 PU3 PU0 A0 PU1 A1 × = B0 B1 B2 B3 C0 C1 C2 C3 PU2 A2 PU3 A3 P を増やすと,並列化効率が大きく低下

  14. 通信の隠蔽 • アイディア • 行列 A のデータを,計算に必要な1ステップ前に送ってもらう。 • 演算とのオーバーラップにより,通信時間を隠蔽できる。 • ただし,通信時間 ≦ 演算時間 でないと,隠蔽は不可能 program matmult (配列の確保: AJ,BJ,CJ ,ATMP) (MPIの初期化と環境情報取得。自分のプロセッサ番号をJとする。) (配列AJ,BJの初期化) (プロセッサ MOD(J-1+P,P)にAJを送る。) CJJ = AJ×BJ do I = 1, P-1 (プロセッサ MOD(J+I,P)からAMOD(J+I,P)を受け取り,ATMPに格納。) IF (I < P-1) (プロセッサ MOD(J-I+1+P,P)にAJを送る。) CMOD(J+I,P),J = ATMP×BJ end do (配列CJの出力) (MPIの終了) stop end

  15. Fox のアルゴリズム (1) • アルゴリズム • プロセッサを2次元に並べ,A,B,C を縦横両方向にブロック分割 • プロセッサ (I,J) は,第 K ステップで CIJ += A I, MOD(I+K-1,√P) B MOD(I+K-1,√P), J を計算 B0 B1 B2 B3 B0 B1 B2 B3 AIIの横方向 ブロードキャスト × = A B C B0 B1 B2 B3 B0 B1 B2 B3 CIJ += A II,B IJ の計算 × =

  16. Fox のアルゴリズム (2) AI,I+1の横方向 ブロードキャスト × = • 第2ステップ B0 B1 B2 B3 B0 B1 B2 B3 BIJの縦方向 サイクリック転送 × = A B C B0 B1 B2 B3 B0 B1 B2 B3 CIJ += A I,I+1,B I+1,J の計算 × =

  17. Fox のアルゴリズム (3) • アルゴリズム program matmult (配列の確保: AIJ,BIJ,CIJ ,ATMP, BTMP) (MPIの初期化と環境情報取得。自分のプロセッサ番号を(I,J)とする。) (配列AIJ,BIJの初期化) do K = 1, √P IF (J = MOD(I+K,√P)) (配列AIJをATMPにコピー)   配列ATMPを行方向のプロセッサ間でブロードキャスト IF (K > 1) THEN     (プロセッサ (MOD(I-1+P,P),J)にBTMPを送る。)     (プロセッサ (MOD(I+1,P)からBTMPを受け取る。) ELSE     (BIJを配列BTMPにコピー) END IF CIJ += ATMP×BTMP end do (配列CIJの出力) (MPIの終了) stop end

  18. Fox のアルゴリズムの MPI による実装 • ATMP の横方向ブロードキャスト • 同じ I の値を持つ PU 群に対してコミュニケータ(PUのグループ)を定義 • コミュニケータを用い,MPI_BCAST によりブロードキャスト • BTMP の縦方向サイクリック転送 • MPI_SEND を用いて1つ上の PU にデータを送信 • MPI_RECV を用いて1つ下の PU からデータを受信 × = B0 B1 B2 B3 B0 B1 B2 B3 × =

  19. Fox のアルゴリズムの性能モデル • 実行時間の予測 • Tcomp = 2N3 / P :P に反比例して減少 • Tcomm = √P * log2(√P) * (Tsetup + N2 / P * 8 / b) :ATMP の転送 + (√P – 1 ) * (Tsetup + N2 / P * 8 / b) :BTMP の転送 • Tidle = 0 :負荷は完全に均等 P を増やすと,通信時間も 1/√P で減少 P を増やしたときの並列化効率の低下が小さい。

  20. より効率的な行列乗算 • 通信の隠蔽 • ATMP の転送を,計算の1ステップ前に行う。 • 通信用バッファがもう1個必要 • ノンブロッキング通信(MPI_ISEND,MPI_IRECV)を使うと,より効果的 • より効率的なアルゴリズムの利用 • SUMMA (Scalable Universal Matrix Multiplication) • LAPACK Working Notes 96 http://www.netlib.org/lapack/lawns/downloads/

  21. 連立一次方程式の高性能解法 (密行列の場合)連立一次方程式の高性能解法 (密行列の場合) 1.LU分解 2.LU分解のブロック化 3.LU分解の並列化

  22. ガウスの消去法の性能 • n=1000のときの性能は250MFLOPS程度

More Related