1月21、2006年

概要
連立一次方程式は
どこまで速く解けるのか?
•
•
•
•
•
•
•
Commodity PC clusterと
並列多倍長数値計算
静岡理工科大学
幸谷智紀
http://na-inet.jp/
2006年9月21日(木)
秋田県立大学講演資料
1
多倍長数値計算とは?
Commodity PC clusterとは? 教科書的な常識
MPIとは?
BNCpackとは?
Conjugate-Gradient(CG)法とは?
ヨタ話
CG法の最短計算時間は?
まとめ
2006年9月21日(木)
秋田県立大学講演資料
今のパソコンのアーキテクチャ
(Pentium 4 + 865PE chipset)
多倍長数値計算とは?
今回使用するPC (Cluster)
•
•
•
•
CPU
x86_32 アーキテクチャ
Pentium4 ・・・ Intel Pentium IV 2.8cGHz (11
nodes, 11PEs, Vine Linux 3.2)
Xeon・・・ Intel Xeon 3.0GHz(名古屋大学三井研,
8 nodes, 16PEs, Redhat 8)
PentiumD ・・・ Intel Pentium D 820 (2.8GHz, 4
nodes, 8PEs, Fedora Core 5 x86_64)
Athlon64X2 ・・・ AMD Athlon64 X2 3800+
2.0GHz (幸谷私物, Fedora Core 4 x86_64)
x86_64 アーキテクチャ
2006年9月21日(木)
秋田県立大学講演資料
2
RAM
Network
Interface
HDD
http://support.intel.com/products/i/chipsets/865pe/865pe_schematic.gif
3
2006年9月21日(木)
秋田県立大学講演資料
4
IEEE754-1985 standard
コンピュータの演算
•2進数ベースの浮動小数点(FP)数の国際規格
•CPU内のFP演算unitで高速処理
•IEEE754 double(倍精度)が通常使用される精度:10進約16桁
2006年9月21日(木)
秋田県立大学講演資料
5
2006年9月21日(木)
秋田県立大学講演資料
6
1
IEEE754 double計算でも不十分
多倍長計算の実装
• ある大御所のお言葉「8倍精度で十分」・・・ホントか?
• 「多倍長計算」「multiple precision」でGoogleると山ほど出
てくる(円周率πの計算など)
• 「作るのは簡単,速くすることが難しい」
• 悪条件問題
– 連立一次方程式の条件数が10^15以上
– 近接根を持つ代数方程式の数値計算
– 他にもいっぱい
実用になるかどうかはともかく,桁を任
• 複雑系の数値計算
•
– Logistic写像に基づく数列の計算
– Lorenz/Roessler modelの数値解
• IEEE754 FP数を繋げて桁を長くする
– Krylov部分空間法・・・連立一次方程式
– Lanczos法・・・行列のreduction(固有値問題)
• 多倍長「自然数」演算を積み上げて多倍長FP演算を実装す
る
意に変動させてみないと,問題やアル
ゴリズムの持つ性質は分からない!
丸め誤差に敏感なアルゴリズムの数値的性質の調査
– ARPREC (C++/Fortran90)
http://crd.lbl.gov/~dhbailey/mpdist/arprec.tar.gz
– GNU MP(GMP) とそのファミリーhttp://www.swox.com/gmp/
– MPFR/GMP・・・GMPの自然数(mpn_*)ライブラリを土台にした多倍
長FP数ライブラリ
→double以上の精度(仮数部の桁数)を持つFP数をソフトウェ
アで実装する=多倍長浮動小数点演算(多倍長計算)
2006年9月21日(木)
秋田県立大学講演資料
7
2006年9月21日(木)
GMPの特徴
• 高速な自然数演算(mpn_*)を,CPUアーキテクチャごとに最
適化して実現
• ANSI Cレベルでの実装+CPUアーキテクチャごとの最適化
(アセンブラ)
• x86系CPUは,MMX/SSE/SSE2を利用して高速化
• 整数(mpz_*), 有理数(mpq_*), FP数(mpf_*)を実現
秋田県立大学講演資料
8
MPFRの特徴
• http://www.mpfr.org/
• ベースの自然数演算はGMPを利用・・・MPFR/GMPと呼ぶべき
• IEEE754 standardの上位互換
– 4種類の丸めモード(GMPはRZのみ)
– 無限大(±Inf), 非数(NaN)
– 初等関数
• 特殊関数も実装
• 四則演算と初等関数では世界トップレベルの速さ
http://www.medicis.polytechnique.fr/~pphd/mpfr/timings220.html
• GMP Version 4までは同梱されていた→2004年1月以降は分離
(GMP側の偏狭さが原因?)
• GMPのFP数は実用的には機能が不足
→MPFR
2006年9月21日(木)
秋田県立大学講演資料
9
2006年9月21日(木)
MPFR/GMPの構造体
秋田県立大学講演資料
10
自然数の乗法アルゴリズム
Bit数 N に応じて4つのアルゴリズムを実装
1.
2.
3.
4.
Basecase乗算(筆算と同じ)・・・O(N^2)
Karatsuba乗算・・・ O(N^1.585)
Toom-Cook 3way乗算・・・ O(N^1.465)
FFT乗算(Option)・・・ O(N^1.333∼1.4)
FFTが利いてくるのは少なくても約10000bits以上
(by GMP マニュアルより)
2006年9月21日(木)
秋田県立大学講演資料
11
2006年9月21日(木)
秋田県立大学講演資料
12
2
MPFR/GMPの性能・・・除法
MPFR/GMPの性能・・・乗法(と加法)
Div of MPFR
Mul of MPFR
1.E+02
1.E+00
100 #bits 1000
1.E-01
1.E+01
10000
100000
milli-sec/div
milli-sec/mul
1.E+01
1000000
1.E-02
1.E-03
N^1.5
N^1.6
PentiumD
Pentium4
Pentium4 Add
1.E-04
1.E-05
# of bits
32768
65536
2006年9月21日(木)
1.48
100 #bits 1000
10000
3.84
13
実用的な多倍長計算とは?
1.E-02
# of bits
Pentium D 820
32768
1.16
2.65
65536
3.5
7.97
Pentium 4 2.8GHz
秋田県立大学講演資料
14
でもやっぱり多倍長計算は遅い
• 行列積を計算し,FLOPS(乗算回数/sec)を計測
• IEEE754 doubleはATLASを使用
• MPFR 2.1.0+BNCpackを使用
DGEMM --- ATLAS 3.7.11
Matrix Mul (128bits, MPFR)
3.5
GFLOPS
2.5
2
1.5
Xeon
Pentium4
PentiumD
Athlon64X2
1
0.5
0
0
→以降は,この精度範囲内のみを対象とする。
500
1000
1500
Dimension
2000
2500
3000
MFLOPS
3
秋田県立大学講演資料
1000000
N^1.4
N^1.5
PentiumD
Pentium4
2006年9月21日(木)
• 3つの多倍長FP数が全てキャッシュ(512KB∼4MB)に収ま
る(174761∼11184809bits → 何年かかるの?)
• 全ての四則演算が現状のCommodity PCで1ミリ秒以下
(10x10の行列積は1秒, 100x100だと1000秒=約17分)
のうち,後者が最も実用的な基準(FFTが利くようでは非実
用的?)
2006年9月21日(木)
100000
1.E-04
1.33
秋田県立大学講演資料
1.E-01
1.E-03
Pentium D 820 Pentium 4 2.8GHz
0.491
1.E+00
3.5
3
2.5
2
1.5
1
0.5
0
0
200
400
600
Dimension of matrix
• 128bit計算でもIEEE754 doubleの1/1000以下
15
2006年9月21日(木)
秋田県立大学講演資料
16
並列計算(処理)必須の時代へ
Commodity PC clusterとは?
• Commodity PC cluster =
Commodity PC(ふつうのパソコン)
+ TCP/IP on Ethernet(安いネット
ワーク)
• Flynnの分類→MIMD, 分散メモリ
•CPU coreの動作周波数の向上の限界(使用電力量の増大)
•並列度を上げて性能向上を図る→ソフトウェアで対応する必要あり
•小規模な並列計算→共有メモリ・・・Pthread, OpenMP
Pentium4 cluster
2006年9月21日(木)
•大規模な並列計算→(やっぱり)分散メモリ・・・MPI
秋田県立大学講演資料
17
2006年9月21日(木)
秋田県立大学講演資料
18
3
メモリのヒエラルキー
PC clusterの違い
• Multi-core/SMP cluster・・・Xeon, PentiumD
データの転送速度は,PC内
部においても一定でない
Register←→L2:
122GB/sec(P4 3.8GHz)
CPU←→RAM: 6.4GB/sec
PE(Processor Element)
• Single-core cluster・・・Pentium4
CPU←→HDD:150MB/sec
ネットワークを介すると更に
遅くなる
Ethernet: 10M∼
1000M(1G) bit/sec
秋田県立大学講演資料
19
• Node内転送速度はCPU/Chipset/DIMMによっ
て大きく異なる。
12
6
4
8
6
2
1.E+02
1.E+04
0
1.E+00
1.E+06
1.E+02
1.E+04
1.E+06
Bytes
Bytes
1.E+02
1000
900
800
700
600
500
400
300
200
100
0
1.E+00
1.E+04
1.E+06
1000
900
800
700
600
500
400
300
200
100
0
1.E+00
NPtcp
NPmpi
1.E+02
Bytes
2006年9月21日(木)
秋田県立大学講演資料
21
2006年9月21日(木)
“print_process.c”
#include <stdio.h>
#include <math.h>
#include “mpi.h” // MPI用のヘッダファイル
int main(int argc,char *argv[])
{
int namelen, numprocs, myid;
char processor_name[2048];
– MPICH(Xeon),
MPICH2(Pentium4)
http://wwwunix.mcs.anl.gov/mpi/mpich/
– LAM(→OpenMPIへ統合予
定)(PentiumD)
http://www.lam-mpi.org/
• 一対一通信・・・同期通信と非同
期通信
• 集団通信・・・一対一通信を土台
に,コミュニケータ内のnode全体
にデータを一括送受信
2006年9月21日(木)
MPI_Init(&argc,&argv); // MPI初期化
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stdout,"Process %d of %d on %s¥n",
myid, numprocs, processor_name);
1.E+06
秋田県立大学講演資料
22
[user01@cs-room443-d01 ~]$ lamboot –v ←LAMDの起動
(略)
[user01@cs-room443-d01 mpi]$ mpicc print_process.c ←コンパイル
[user01@cs-room443-d01 mpi]$ mpirun -np 8 ./print_process
Print_process”プログラムを8PEsで実行↑
Process 0 of 8 on cs-room443-d01
Process 2 of 8 on cs-room443-d02
Process 4 of 8 on cs-room443-d03
Process 6 of 8 on cs-room443-d04
Process 7 of 8 on cs-room443-d04
Process 3 of 8 on cs-room443-d02
Process 5 of 8 on cs-room443-d03
Process 1 of 8 on cs-room443-d01
[user01@cs-room443-d01 mpi]$
プログラムは1本(Single Program),
流れるデータは多重(Multiple
Data)
MPI_Finalize(); // MPI終了
return 0;
}
秋田県立大学講演資料
1.E+04
Bytes
SPMDアプローチ
MPIとは?
• Message-Passing Interfaceの
略
• 分散メモリ環境における並列計
算のための関数を規格化したも
の
• Node間のデータのやり取りを全
て指定する必要がある(「BSD
socket関数に毛が生えた程度」)
• 代表的な実装
1.E+06
VTPCC
NPtcp
NPmpi
1.E+02
1.E+04
Bytes
PentiumD
4
2
0
1.E+00
NPtcp
NPmpi
10
8
NPtcp
NPmpi
Fork
14
NPtcp
NPmpi
1000
900
800
700
600
500
400
300
200
100
0
1.E+00
• 最高でも約900Mbps
Xeon
Gbps
Gbps
10
– CPU性能
– NIC chip性能
Mbps
12
Pentium4
Mbps
• Ethernet(1000BASE,
GbE)性能は以下の二つに
大きく依存
NetPIPEベンチマーク結果
14
20
ネットワークも複雑
PC内部のデータ転送は複雑
PentiumD
秋田県立大学講演資料
2006年9月21日(木)
Mbps
2006年9月21日(木)
23
2006年9月21日(木)
秋田県立大学講演資料
24
4
集団通信・・・Bcast/Gather/Reduce
Bcast・・・同じ
データを全
PEに流す
Gather・・・特定
のPEにデータ
を集約する
集団通信のアルゴリズム
Reduce・・・特定
のPEに,演算
しながらデー
タを集約する
• 通信回数はlog2(PE数)で済む
a=0 b[0] b[1] b[2] b[3]
PE0
a=1
PE1
a=2
PE2
a=3
PE3
秋田県立大学講演資料
2006年9月21日(木)
25
ベクトルの内積と行列・ベクトル積
2006年9月21日(木)
秋田県立大学講演資料
26
Allgather/Allreduceの場合
• 行列,ベクトルを以下のように各PEに分割
・・・
・・・
・・・
・・・
・・・
• ベクトルの内積計算の並列化→Reduce + Bcast =
Allreduceを使用
• 行列・ベクトル積→Gather + Bcast = Allgatherを使用
2006年9月21日(木)
秋田県立大学講演資料
27
2006年9月21日(木)
秋田県立大学講演資料
28
多倍長FP数の送信方法
BNCpackとは?
送信前にpack (memcpy)
し,受診後にunpack
(memcpy)する。
[利点] 実装が簡単(某氏
談「学部の卒研並み」)
http://na-inet.jp/na/bnc/
•
•
•
•
•
基本的な数値計算アルゴリズムを実装した自作ライブラリ
ANSI Cで組んである(C++でも利用可能のハズ)
IEEE754 double計算
MPFR/GMPによる多倍長計算
MPIによる両者の並列計算
2006年9月21日(木)
秋田県立大学講演資料
29
[欠点1] packのための
bufferの確保が必要(メ
モリが倍必要になる)
[欠点2] pack/unpack
のoverheadが問題(?)
2006年9月21日(木)
秋田県立大学講演資料
30
5
CG法のアルゴリズム
Conjugate-Gradient(CG)法とは?
• ベクトル単位の計
算のみでアルゴリ
ズムが構成されて
いる→並列化が容
易
• pk が互いに直交す
る→理論的には有
限回(<=n)の反復で
終了する筈が・・・
• 連立一次方程式のアルゴリズム
– 直接法(Linpack, Top500)・・・LU分解・Gaussの
消去法
– 反復法・・・Jacobi反復,Gauss-Seidel, SOR法
– Krylov部分空間法・・・CG,BiCG, CGS・・・法
• 正定値対称行列に適用可能
• Krylov部分空間内で解を構成する。
2006年9月21日(木)
秋田県立大学講演資料
31
今回使用する例題
秋田県立大学講演資料
2006年9月21日(木)
32
Frank行列(n = 512)の収束特性
Dimension: 512
1.E+00
1
51
101
¦¦r_k¦¦_2/¦¦r_0¦¦_2
1.E-04
2006年9月21日(木)
ベクトル ベクトル/8
0.5 KB
4 KB
double
行列
2 MB
64bits
7 (MB) 14 (KB) 0.33 (KB)
128bits
9
18
2.25
256bits
13
26
3.25
512bits
21
42
5.25
1024bits
37
74
9.25
n = 512
秋田県立大学講演資料
151
201
Iterative Times
251
128bits
256bits
301
1.E-08
1.E-12
1.E-16
1.E-20
double
512bits
64bits
1024bits
多倍長FP数の桁を増やすと反復回数が減少→単調減少に近づく
(最小反復回数(>2048bits):127回)
33
秋田県立大学講演資料
2006年9月21日(木)
CG法の最短計算時間は?
34
逐次計算の場合
• 多倍長FP数の桁の増加
→1演算の計算時間の増加
→CG法の反復回数は減少
• 1PEで計算した時の反復回数と,計算時間(sec)
並列化による計算時間減少は?
• PE数の増加
→1 PEあたりの計算時間の減少 (PE数=次元数が最小)
→通信時間の増加
#bits #Iteration
64 506∼513
Pentium4
34.4
128 286∼294
256
191
512
147
47.3
38.4
85.3
24.2
31.2
69.3
15.6
17.9
30.4
205
173
60.6
1024
131
PentiumD
Xeon
22.9
16.9
• →並列化でどこまで時間短縮が図れるのか?
計算時間 < 通信時間 となれば,並列計算の効果は頭打ち
2006年9月21日(木)
秋田県立大学講演資料
35
2006年9月21日(木)
秋田県立大学講演資料
36
6
Pentium4の場合
50
0
128bits 256bits 512bits
Length of Mantissa
160
50
40
30.1
30
20
0
16.3
9.52
64bits
1PE > 2PEs > 4PEs > 8PEs
39.7
140
120
80
60
40
20
12.3
14.9
9.32
6.65
15.4
64bits
128bits 256bits 512bits
Length of Mantissa
8.54
5.31
128bits 256bits 512bits
Length of Mantissa
1024bits
0
3.56
3.02
64bits
4.2
2.45
2.14
4.68
128bits
256bits
512bits
Length of Mantissa
1024bits
時間は約1/8!
37
秋田県立大学講演資料
2006年9月21日(木)
38
本当の本当の最小計算時間は?
20
1PE
2PEs
4PEs
8PEs
18
16
40
30
20
10
14
128bits
256bits
512bits
Length of Mantissa
1024bits
17.3
4PEs
8PEs
12
11
10
8
6
4
0
64bits
11.9
10
最小計算時間(128bits): 2.14秒(16PEs)
秋田県立大学講演資料
Comp. Time (sec)
8.93
7.31
4.83
5.45
4.59
4.26
2.89
2
2.69
• PE数の限界を超えて,最小計算時間を求め
ることはできないか?
• 前提「全てのPEの計算・ネットワーク性能は
同じ」
0
64bits
128bits
256bits
512bits
Length of Mantissa
1024bits
→計算時間の予測
→通信時間の予測
最小計算時間(128bits): 2.69秒(8PEs)
時間は約1/5!
39
秋田県立大学講演資料
2006年9月21日(木)
Pentium4, 1024bits, n=512
• 多倍長FP演算アルゴリズムから,計算時間
のorderは分かるが,実測値との絶対的なズ
レは大きくなる
• 多倍長乗法・除法・加法,1回あたりの計算
時間を予め計測しておく
• 計算回数×1回あたりの多倍長演算時間で
計算時間を予測
• Pentium4のズレが大き
いのは特殊要因?(1PE
計算のズレが大きい)
• PentiumD, Xeonは良く
合っている
2.E+03
2.E+03
1.E+03
1.E+03
1.E+03
8.E+02
6.E+02
4.E+02
2.E+02
0.E+00
1 Iter. Time
Forecast
0
41
4
6
8
10
Xeon, 1024bits, n=512
1 Iter. Time
Forecast
2.E+03
1.E+03
1 Iter. Time
Forecast
1.E+03
1.E+03
8.E+02
6.E+02
4.E+02
2.E+02
0.E+00
2
4
6
8
10
0
# of PEs
秋田県立大学講演資料
2
# of PEs
PentiumD, 1024bits, n=512
5.E+02
5.E+02
4.E+02
4.E+02
3.E+02
3.E+02
2.E+02
2.E+02
1.E+02
5.E+01
0.E+00
0
2006年9月21日(木)
40
計算時間を予測してみると・・・
計算時間の予測は可能か?
Comp. Time(milli-sec)
秋田県立大学講演資料
Comp. Time(milli-sec)
2006年9月21日(木)
Comp. Time(milli-sec)
Comp. Time (sec)
50
15
1024bits
PentiumDの場合
60
8PEs
16PEs
5
0
桁を倍に増やしたのに,時間は約1/5!
70
22.1
20
100
最小計算時間(128bits): 6.65秒(8PEs)
2006年9月21日(木)
25
1PE
2PEs
4PEs
8PEs
16PEs
180
60
10
1024bits
81.4
4PEs
8PEs
70
Comp. Time (sec)
80
100
64bits
200
Comp. Time (sec)
150
1PE
2PEs
4PEs
8PEs
Comp. Time (sec)
Comp. Time (sec)
200
Xeonの場合
90
250
2006年9月21日(木)
秋田県立大学講演資料
5
10
# of PEs
15
20
42
7
通信時間を予測してみると・・・
• PE数が多くなると,集団通
信時間が急激に上がる→
精度が落ちる
• 同じorderになっている,ぐ
らいの目安
• 過小評価なので,最低通信
時間としてみる
• 集団通信における一斉通信は,「各nodeから送ら
れるデータを1回送信」と考える
→通信回数=log2(PE数)
• 1PE/nodeの場合
– NPmpiの結果を補間してThroughput(send_receive_time, Mbps)を求める
– 通信回数×send_receive_time で予測
Pentium4, 1024bits, n = 512
10
Communication Time
(milli-sec)
通信時間の予測は可能か?
秋田県立大学講演資料
4
3
2
CG
Forecast
1
1
2006年9月21日(木)
Pentium4
PentiumD
Xeon
3.48(32PEs)×506
=1.76
1.18(256PEs)×506
=0.60
To Node 3
To Node 3
1.31(512PEs)×286
=0.37
が増加すると
256
191
8.27(128PEs)×191
=1.58
4.4(128PEs)×191
=0.84
1.64(512PEs)×191
=0.31
転送速度が落ちる
512
147
9.97(256PEs)×147
=1.47
5.29(256PEs)×147
=0.78
2.5(512PEs)×147
=0.37
1024
131
12.2(512PEs)×131
=1.60
6.29(512PEs)×131
=0.82
4.59(512PEs)×131
=0.60
→殆ど全部,通信時間になってしまっている(実用的には意味のな
いレベル)
45
2006年9月21日(木)
Mbps
Mbps
1.E+07
Xeon
PentiumD
300
0
1.E+02
1.E+03
Bytes
1.E+04
→「小さいこと(データ)から,コツコツと!」
2006年9月21日(木)
秋田県立大学講演資料
秋田県立大学講演資料
46
まとめ
100
1.E+06
44
3.75(64PEs) ×286
=1.07
200
1.E+05
1000
7.2(64PEs) ×286
=2.06
100
1.E+03 1.E+04
Bytes
# PEs 100
286
400
1.E+02
10
128
400
1.E+01
1
1000
秋田県立大学講演資料
506
600
0
1.E+00
# PEs 100
64
600
200
10
• 処理可能パケッ
ト数
• 転送データ量が小さい所で速度が遅い(実際遅い)
• Fedora Core 5のKernelはTuningが甘いらしい
300
CG
Forecast
Min
#Iter.
PentiumDがXeonに
実測値でも予測値でも負けている理由
500
1
0.5
6.44(milli-sec,
32PEs)×506
=3.26(sec)
秋田県立大学講演資料
500
2
1.5
CG法の最小計算時間は?
(たぶん相当過小評価)
• L2 Switchの性能を考慮に入れる必要あり
700
1000
0
• Buffer容量
Xeon
PentiumD
# PEs 100
2.5
Communication Time
(milli-sec)
Communication Time
(milli-sec)
43
#bits
800
10
Xeon, 1024bits, n = 512
5
L2 SwitchのStore & Forward方式
900
Comm. CG
Forecast
2
1
0
1000
4
0
6
– 基本的には上記と同じ
– Node内通信とNode間通信とで別々に算出して和を取る
2006年9月21日(木)
6
PentiumD, 1024bits, n = 512
• 2PE/nodeの場合
2006年9月21日(木)
8
47
• CG法のような,多倍長計算が有効なアルゴリズムはま
だ研究する余地がある
• 実用的な多倍長計算のためには
– 128bits∼16384bitsの精度で高速な演算
– 100∼10000 Bytesのデータサイズで高い
Throughput
が重要
• 集団通信時間の予測は難しい(実測値を使うのが確
実)
• 「πの世界記録」と「8倍精度」の間にある「実用的な多
倍長計算」が必要な問題やアルゴリズムは存在する!
2006年9月21日(木)
秋田県立大学講演資料
48
8