概要 連立一次方程式は どこまで速く解けるのか? • • • • • • • 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
© Copyright 2024 Paperzz