linpack
TRANSCRIPT
2013/2/9,2/10- とある勉強会での発表資料 -
Yuki Kawaguchi
なぜなに Linpack
1
自己紹介
2
名前: Yuki Kawaguchitwitter: @kawa0810はてな id: kawa0810
・学生時代の研究並列・分散処理,GPGPU,数値計算関係
・仕事ソフトウェア開発 & サポート
本題
3
Linpack と Top500
4
・LU 分解による連立一次方程式 Ax = b の解法 ただし,A は係数行列,x は未知ベクトル,b は既知ベクトル
・Top500 のベンチマークで利用
Linpack とは?
・スパコンの上位500位を決定するプロジェクト http://www.top500.org・毎年,6月と11月の年2回測定 & 更新・評価方法:High Performance Linpack
Top500 とは?
HPC チャレンジベンチマーク
5
・High Performance Linpack (HPL)Linpack で連立一次方程式を解く際の TFLOPS
・STREAM:メモリへの連続アクセスの際のバンド幅
・PTRANS:行列の転値
・RandomAccess:メモリへのランダムアクセス
・Fast Fourier Transform (FFT):高速フーリエ変換
・Communication bandwidth and latency通信のバンド幅とレイテンシ
・DGEMM:倍精度の行列行列積
表彰
現在の Top500 のベスト3
6
1位:Titan (Cray Inc.)・性能:17.59 PFLOPS・特徴:NVIDIA 製 GPU 搭載
2位:Sequoia (IBM)・性能:16.32 PFLOPS・特徴:汎用型,省エネ設計
3位:K,京 (Fujitsu)・性能:10.51 PFLOPS・特徴:汎用型
目的
7
Linpack の並列化方法について『簡単(?)』にご紹介!!
LU 分解の復習 - 1
8
係数行列 A を A = LU に分解するただし,L は対角要素を1とする下三角行列, U は上三角行列である.
Ax = b は 次式のように表せる
LUx = b
LU 分解の復習 - 2
9
ここで,y = Ux とすると,
Ly = b
となる.L は下三角行列なので前進代入法を用いて解くことにより次式が得られる.
y = L�1b
�
������
1l21 1 0l31 l32 1...
.... . . . . .
ln1 ln2 · · · 1
�
������
�
������
y1
y2
y3...
yn
�
������=
�
������
b1
b2
b3...
bn
�
������
LU 分解の復習 - 3
10
ここで,y を Ux にもどすと,
Ux = L�1b
となる.U は上三角行列なので後退代入法を用いて解くことにより次式が得られる.
x = U�1L�1b
�
������
u11 u12 u13 · · · u1n
u22 u23 · · · u2n
u33 · · · u3n
0. . .
...unn
�
������
�
������
x1
x2
x3...
xn
�
������= L�1
�
������
b1
b2
b3...
bn
�
������
LU 分解の演算量と問題点
11
・LU 分解:
・前進代入法:
・後退代入法:
O(n2)
O(n2)
O
�2n3
3+ 2n2
�
O
�23n3
�
LU 分解の演算量と問題点
12
・LU 分解:
・前進代入法:
・後退代入法:
O(n2)
O(n2)
O
�2n3
3+ 2n2
�
如何に並列化するかがポイント
O
�23n3
�
並列 LU 分解のアルゴリズム
13
Left-Looking 法・データの分散方法によって大量の通信が発生する・Cell/B.E. で用いられている
Right-Looking 法・バランスよくデータ分散が可能・ブロック Right-Looking 法がよく用いられる
Crout 法・大量の通信が必要・分散メモリ型並列計算機では実装が困難
ブロック Right-Looking 法 - 1
14
A をブロックに分割する
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
ブロック Right-Looking 法 - 2
15
軸選択を行いながら LU 分解する
ブロック Right-Looking 法 - 3
16
a12 a15a14a13
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
u11
l11
l21
l31
l41
l51
ブロック Right-Looking 法 - 4
17
a12 a15a14a13
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
u11
l11
l21
l31
l41
l51
をかけるl�111
ブロック Right-Looking 法 - 5
18
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
ブロック Right-Looking 法 - 6
19
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
ブロック Right-Looking 法 - 7
20
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
a�
22 a�
23 a�
24 a�
25
a�
32 a�
33 a�
34 a�
35
a�
45a�
44a�
43a�
42
a�
52 a�
53 a�
54 a�
55
ブロック Right-Looking 法 - 8
21
再び, 軸選択を行いながら LU 分解するすべて終わるまで繰り返す
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
a�
22 a�
23 a�
24 a�
25
a�
32 a�
33 a�
34 a�
35
a�
45a�
44a�
43a�
42
a�
52 a�
53 a�
54 a�
55
ブロック Right-Looking 法 - 9
22
LU 分解完成!!
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
l22
l33
l44
l32
l42
l52 l53 l54
l43
u25
u35
u45
u34
u24u23
l55
u22
u33
u44
u55
問題点:データの分散方法
23
どうやって各マシンにデータを分散配置させればいいのか?
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
a�
22 a�
23 a�
24 a�
25
a�
32 a�
33 a�
34 a�
35
a�
45a�
44a�
43a�
42
a�
52 a�
53 a�
54 a�
55
ブロック・サイクリック分割
24
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
各ブロックをそれぞれ PU に割り当てる
並列 HPL - 1
25
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
各ブロックをそれぞれ PU に割り当てる
並列 HPL - 2
26
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
軸要素を各 PU に転送する
並列 HPL - 3
27
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
軸要素を使い LU 分解する
並列 HPL - 4
28
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
再度,軸要素を各 PU に転送する
並列 HPL - 5
29
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
再度,軸要素を使い LU 分解する
繰り返す
並列 HPL - 6
30
LU 分解が終わり次第各ブロックを転送する
a12 a15a14a13
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
u11
l11
l21
l31
l41
l51
横方向通信
並列 HPL - 7
31
を転送し,u を求める (dtrsm)
a12 a15a14a13
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
u11
l11
l21
l31
l41
l51
l11
並列 HPL - 7
32
a22 a23 a24 a25
a32 a33 a34 a35
a42 a43 a44 a45
a52 a53 a54 a55
l21
l31
l41
l51
u11
l11u12 u13 u14 u15
u を送信する
縦方向通信
並列 HPL - 8
33
l21
l31
l41
l51
u11
l11u12 u13 u14 u15
a�
22 a�
23 a�
24 a�
25
a�
32 a�
33 a�
34 a�
35
a�
45a�
44a�
43a�
42
a�
52 a�
53 a�
54 a�
55
繰り返す
データがそろい次第計算
並列 HPL - 9
34
LU 分解完成!!
u11
l11
l21
l31
l41
l51
u12 u13 u14 u15
l22
l33
l44
l32
l42
l52 l53 l54
l43
u25
u35
u45
u34
u24u23
l55
u22
u33
u44
u55
性能をだすための重要点 - 1
35
通信 (Message Passing Interface)・無駄な通信をいかにさせずに計算させるか?・非同期通信の利用
a11 a12 a15a14a13
a21 a22 a23 a24 a25
a31 a32 a33 a34 a35
a41 a42 a43 a44 a45
a51 a52 a53 a54 a55
性能をだすための重要点 - 2
36
計算 (Basic Linear Algebra Subprograms)・行列行列積・MPI + マルチスレッド + SIMD + キャッシュ・アクセラレータ型計算機の利用
�
�����
l11 l12 l13 l14 l15l21 l22 l23 l24 l25l31 l32 l33 l34 l35l41 l42 l43 l44 l45l51 l52 l53 l54 l55
�
�����
�
�����
u11 u12 u13 u14 u15
u21 u22 u23 u24 u25
u31 u32 u33 u34 u35
u41 u42 u43 u44 u45
u51 u52 u53 u54 u55
�
�����
前進代入法と後退代入法
37
パトラッシュ,僕はもう疲れたよ...
結論
38
Linpack の自作は面倒
ライブラリを使いましょう!!
・Super LU・各ベンダのライブラリ・etc
今後のスパコン分野 (推測)
39
アクセラレータ型計算機の普及・NVIDIA 製 GPU の新アーキテクチャの登場 (Kepler)・Intel 社の Many Intelgrated Core の参入
CPU の機能向上・クロック数はあがらない → コア数の増加・ベクタ長命令の強化 (Altivec,SSE,AVX,etc)
出典:NVIDIA 社http://www.nvidia.co.jp
出典:Intel 社.http://www.intel.com