Top Banner
応応応応応応応応 応応応応応 応応応応応応応応応応応応応応応応応応 応3応 応応応応応応応 応応応応 応応応応
22

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

Jan 23, 2016

Download

Documents

Denise

応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング. 第 3 回 計算理工学専攻 張研究室 山本有作. 前回の概要. 「並列計算機による高性能計算」 1 .  並列計算機の種類と特徴 2 .  共有メモリ型並列計算機 プログラミングモデル 高性能化の技法. 今回の概要. 「並列計算機による高性能計算」 3 .  分散メモリ型並列計算機 プログラミングモデル 高性能化の技法 「連立一次方程式の高性能解法 (密行列の場合)」 1 . LU 分解 2 . LU 分解のブロック化 3 . LU 分解の並列化. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング

応用数理工学特論

線形計算とハイパフォーマンスコンピューティング

第 3 回

計算理工学専攻 張研究室山本有作

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

前回の概要

「並列計算機による高性能計算」

1 .  並列計算機の種類と特徴

2 .  共有メモリ型並列計算機

– プログラミングモデル

– 高性能化の技法

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

今回の概要

「並列計算機による高性能計算」

3 .  分散メモリ型並列計算機

– プログラミングモデル

– 高性能化の技法

「連立一次方程式の高性能解法 (密行列の場合)」

1 .   LU 分解

2 .   LU 分解のブロック化

3 .   LU 分解の並列化

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

3.1  分散メモリ型並列計算機のプログラミング

• 通信ライブラリ MPI

• MPI のプログラミングモデル• MPI の関数• 行列乗算の例

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

通信ライブラリ MPI

• MPI ( Message Passing Interface )– プロセッサ間通信を行うためのサブルーチンの集合

• MPI の機能– 1対1通信– ブロードキャスト– 総和演算・最大値– その他

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

MPI のプログラミングモデル

• SPMD ( Single Program Multiple Data )– 全プロセッサが共通のプログラムを実行– 処理するデータはプロセッサ毎に異なる。– 各プロセッサは固有の番号( 0, 1, … , p-1 )を持ち,プログ

ラム中で自分の番号を参照して処理を行う。

• 分散メモリ– 各プロセッサは自分の持つローカルメモリのみをアクセス

可能– 他プロセッサのメモリ上にあるデータが必要な場合は,プ

ロセッサ間通信により取得

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

MPI の関数

• 起動/終了– MPI_INIT :  MPI の初期化– MPI_FINALIZE :  MPI の終了

• 環境情報の取得– MPI_COMM_SIZE : 全プロセッサ台数の取得– MPI_COMM_RANK : プロセッサ番号の取得

• 1対1の送受信– MPI_SEND : データの送信– MPI_RECV : データの受信

• 集団通信– MPI_BCAST : データのブロードキャスト– MPI_REDUCE : リダクション演算(総和/最大値など)

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

A2

A3

行列乗算の例 (1)

• 問題– N×N 行列 A,B に対し,P 台のプロセッサを使って C = AB を計算– A はブロック行分割,B はブロック列分割されているとする。– 結果の C はブロック列分割の形で求めるとする。

– 各プロセッサは,行列の一部のみを持つ (分散メモリ)。– また,自分の持つ部分のみにアクセスできる。

A0

A1

PU0PU1PU2PU3

B0 B1 B2 B3× = C0 C1 C2 C3

PU0 PU3

Page 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 の終了)stopend

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

3.2  高性能化の技法

• 基本的な考え方• 実行時間の予測• 行列乗算の例

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

基本的な考え方

• PU 間の負荷分散均等化– 各 PU の処理量が均等になるよう  処理を分割

• PU 間通信量の削減– 通信には,データ 1 個あたり数十サイクルの時間が必要– データ分割の最適化による通信量の削減と通信の隠蔽が重要

• PU 間通信回数の削減– 1 回の通信には通常,数百~数千サイクルの起動時間が必要– 並列粒度の増大による通信回数の削減が重要

• キャッシュメモリの有効利用

PU0 PU1 PU2 PU3キャッシュ

ネットワーク

メモリ

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

実行時間の予測

• 演算時間– Tcomp = (演算量)/(演算速度)

• もっとも単純なモデル化• より精密には,キャッシュの影響などを考慮する必要あり

• 通信時間– Tcomm = (転送回数) × (起動時間) + (転送量)/(転送速

度)

• 待ち時間– Tidle

• 全実行時間– Texec = Tcomp + Tcomm + Tidle

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

A2

A3

行列乗算の例• アルゴリズム

– 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 :負荷は完全に均等

A0

A1

PU0PU1PU2PU3

B0 B1 B2 B3× = C0 C1 C2 C3

PU0 PU3

P を増やすと,並列化効率が大きく低下

Page 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 の終了)stopend

Page 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

B0 B1 B2 B3

× =

B0 B1 B2 B3

A B C

AII の横方向

ブロードキャスト

CIJ += A II,B IJ

の計算

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

Fox のアルゴリズム (2)• 第 2 ステップ

B0 B1 B2 B3

× =

B0 B1 B2 B3

B0 B1 B2 B3

× =

B0 B1 B2 B3

A B C

BIJ の縦方向

サイクリック転送

CIJ += A I,I+1,B I+1,J

の計算

× =AI,I+1 の横方向

ブロードキャスト

Page 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×BTMPend do(配列 CIJ の出力)( MPI の終了)stopend

Page 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

× =

Page 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 を増やしたときの並列化効率の低下が小さい。

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

より効率的な行列乗算

• 通信の隠蔽– ATMP の転送を,計算の1ステップ前に行う。

• 通信用バッファがもう1個必要• ノンブロッキング通信(MPI_ISEND,MPI_IRECV)を使うと,より効果的

• より効率的なアルゴリズムの利用– SUMMA (Scalable Universal Matrix Multiplication)

• LAPACK Working Notes 96 http://www.netlib.org/lapack/lawns/downloads/

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

連立一次方程式の高性能解法 (密行列の場合)

1 .   LU 分解

2 .   LU 分解のブロック化

3 .   LU 分解の並列化

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

ガウスの消去法の性能

• n=1000 のときの性能は 250MFLOPS 程度

0

500

1000

1500

2000

2500

3000

3500

100 200 300 400 500 600 700 800 900 1000

Gaussian eliminationpeak performance