経路最適化による集団通信の動的最適化 曽我武史 1 集団通信 集団通信(collective通信)は複数のプロセス(コードの実行単位)から なるグループに関連した通信として定義されている。 MPI規格では集団通信の実装手法については、ベンダで自由にしてよ いとされているが1対1通信を使って完全な実装が可能ともしている。 broadcast allgather processes data A0 A0 A0 A0 B0 C0 D0 E0 A0 B0 A0 B0 C0 D0 E0 A0 C0 A0 B0 C0 D0 E0 A0 D0 A0 B0 C0 D0 E0 A0 E0 A0 B0 C0 D0 E0 2 Binomial tree algorithm mpic_bc_bl16 Wait Receive Send 0 2 Node No. 4 6 8 10 12 14 16 0 20 40 60 Time 80 100 120 3 動機 MPI通信を改善したい。 -> MPI通信は1対1通信で成立。 -> 集団通信であっても1対1通信の集合で構成される。 -> そのため、集団通信では受信を待っているだけのPE (processor element)が でてくる。 -> 受信を待っているだけというのはCPU時間の浪費であり、その待ち時間を減らし CPUを有効に使うことで性能改善が期待できる。 MPI_BCAST 0 1 2 rank0 send(1) send(2) rank1 rank2 rank3 recv(0) recv(0) recv(2) send(3) 3 4 mpic_bc4_bl4 -1 Wait Receive Send CPU mpic_bc2_bl4 -1 0 Wait Receive Send CPU 待ち時間測定に基づく仮想ランク番号の交換 0 Node No. 1 1 Node No. 2 2 3 3 4 0 100 200 300 400 500 600 T ime 4 0 100 200 300 400 500 600 700 800 T ime Rank 0 VR 0 1 (b) Rank 0 Wait 0 Rank 0 VR 0 1 1 200 1 2 2 2 0 3 3 3 600 (a) (c) (e) Rank 0 Wait 0 1 1 200 2 3 2 0 3 2 3 100 (d) (f) 5 最高性能確認実験 broadcastデータを一番最初に受信するランクにのみ負荷を掛ける。 (本実験ではrank62 (全rank数=128)) -> 動的最適化により送信を行わないランクと置き換わる。 Bcast通信時間 : 横軸の幅 Bcast総内部通信時間 : 通信部分の面積 6 broadcast通信の実行時間改善率 Ratio = 最適化適用/最適化なし Ratio of Elapsed Time 1.2 1.1 1 0.9 0.8 Load 0 Load 30 Load 40 Load 80 Load 160 0.7 0.6 0.5 1 10 100 1000 10000 100000 1e+06 1e+07 1e+08 Message Size (By te) 7 broadcast通信の総内部通信時間改善率 Ratio = 最適化適用/最適化なし Ratio of Elapsed Time 1.6 Load 0 Load 30 Load 40 Load 80 Load 160 1.4 1.2 1 0.8 0.6 0.4 0.2 0 1 10 100 1000 10000 100000 1e+06 1e+07 1e+08 Message Size (By te) 8 疎行列乗算 Howell-Boewing format (CCS形式) 1 0 2 0 0 3 0 4 0 0 5 0 0 0 0 6 pointers[] = {1, 3, 5, 6, 7} indices[] = {1, 3, 2, 4, 3, 4} values[] = {1, 2, 3, 4, 5, 6} ・ 列に属する要素の抽出は高速 ・ 行に属する要素の抽出は低速 rank0 -> 行要素の抽出 他のランク -> 担当列要素と行要素の乗算 BCSSTK32 : 44609-by-44609 matrix Message size : 44,609x8=356,872 (3.6KB) rank 1 : column = 14,870 NonZero = 384,899(2.7MB) rank 2 : column = 14,870 NonZero = 326,763(2.6MB) rank 3 : column = 14,869 NonZero = 317,993(2.5MB) 9 疎行列乗算実験結果 BCSSTK32 : 44609-by-44609 matrix Type 0.0038 0.0036 0.0034 0.0032 0.003 0.0028 0.0026 0.0024 0.0022 0.002 Broadcast Time Orig Opt Opt/Orig 977 909 0.930 1690 1680 0.994 2090 2070 0.990 2370 2380 1.004 2670 2670 1.000 2890 2880 0.997 Total Time Orig Opt Opt/Orig 3510 3460 0.986 2470 2460 0.996 2440 2420 0.992 2540 2550 1.004 2750 2750 1.000 2930 2920 0.997 0.004 0.0035 Time (Sec) Time (Sec) 4 8 Number 16 of Process 32 64 128 Workload Time Orig Opt Opt/Orig 2530 2550 1.008 783 784 1.001 350 349 0.997 169 171 1.012 82.7 82.7 1.000 41.9 41.8 0.998 0.003 0.0025 0.002 0.0015 0.001 0.0005 0 1 2 3 0 1 2 3 4 5 6 7 10 ランク毎の時間 11 今後の予定 低レベルの階層にも手を入れて、より効果的な動的最適化を狙う。 ・ 動的最適化コスト削減 ・ プロファイルの詳細化 ・ 対象集団通信種類の増加 12 動的最適化コスト削減 ・ 待ち時間に送信を実行 ・ MPI標準にこだわらない通信を行う 完了待ちループ コア コア 完了待ちチェック キャッシュ キャッシュ 待ち時間閾値チェック メモリ メモリ 演算ノード DMA 制御ノード 13 プロファイルの詳細化 ・ call stackを利用した集団通信の特定 int MPI_Bcast(….) { call_stack抽出(MPI_Bcast->func1()->main) main() { func1() … MPI_Bcast() … MPI_Bcast() Virtual-rank table 1 func2() MPI_Bcast() Virtual-rank table 3 } Virtual-rank table 2 14 ・ scatter, gather ,reduce mpic_ga3_bl16 mpic_ga2_bl16 0 0 2 2 4 4 6 6 Node No. Node No. 対象集団通信種類の増加 8 8 10 10 12 12 Wait Receive Send CPU 14 16 0 5 10 15 25 20 Time 30 35 40 Wait Receive Send CPU 14 16 45 0 5 10 15 20 25 30 35 40 Time 15 45 Thank You 16
© Copyright 2024 ExpyDoc