近況報告 遠藤敏夫 近況の概要 Phoenix上でデータ並列プログラム(LU分解) を実装 記述法の議論 性能評価 MPIと同等(0.89—1.15倍)の速度 性能へテロな環境にも対応 SACSIS03に投稿 背景: Grid 広域に分散した計算資源を効率的に利用する考え 方&環境 多数のノード、ノード増減 ヘテロ性 セキュリティ Gridツールが徐々に一般的に(Globus, Nimrod…) でも、ちょっと複雑な並列プログラムが書きにくい Grid上のアプリケーション 巨大なCPU資源を利用 巨大なストレージ資源を利用 計算物理学、生物情報 SETI@home 本発表の メイン 生物情報、gnutella 広域分散した情報を利用 gnutella, ネットワークゲーム 発表の概要 MPIとPhoenixの概要 LU分解アルゴリズム ノード増減、性能へテロ性への対応 MPIによる並列化 Phoenixによる並列化 LUの性能評価 MPI 素朴なメッセージパッシングAPI 物理ノードがそのまま見えるモデル 整数のノードIDで通信先指定(0~P-1) API(抜粋) MPI_Send(buf, count, type, dest, tag, comm) MPI_Recv(buf, count, type, source, tag, comm, stat) MPI_Comm_Rank(comm, rank_p) 自ノードID取得 MPI_Comm_Size(comm, size_p) ノード数取得 集団通信(broadcastなど) MPIでのデータ並列プログラム の記述 データ(配列、行列)を 各ノードに分散配置 他ノードのデータが 必要なら通信 ノード増減への対応 が難しい Phoenix [田浦02] メッセージパッシングの拡張 仮想ノードID(0~262-1)を対象に通信 API(抜粋) ph_send(dest, msg) msg = ph_recv() 自分が担当する仮想ノードあてメッセージを受信 ph_assume(vp_set) 担当仮想ノードの設定 Phoenixでのデータ並列プログラ ムの記述(1) 2種類のマッピングを指定 データと仮想ノード 仮想ノードと物理ノード ノード増減時には仮想ノード担当を変更 CPU性能に比例した仮想ノード数を割り当 て → 性能へテロ対応 Phoenixでのデータ並列プログラ ムの記述(2) データ 仮想ノード 物理ノード 本当にPhoenixはノード増減へ の対応が楽なのか?(1) MPIで増減対応プログラムを書くには (1) データと物理ノードの新マッピング決定 (2) データの移送処理 (3) データの位置情報の更新 cf. A[i]⇔物理ノードIDの表を全員が更新 本当にPhoenixはノード増減へ の対応が楽なのか?(2) Phoenixで増減対応プログラムを書くには (1) 仮想ノードと物理ノードの新マッピング決 定 (2) データの移送処理 位置情報の更新は要らない。(1)の変更を行っ た場合でも、Phoenixランタイムが自動でルー ティング表を更新、正しい宛先に届けてくれる。 → Phoenixの利用により(3)が省ける 性能へテロ性への対応 Phoenixでは、CPU性能∝担当仮想ノード 数により、対応可 MPIでもできる場合があるが、サイクリック 分割(後述)の場合にやりにくい 発表の概要 MPIとPhoenixの概要 LU分解アルゴリズム ノード増減、性能へテロ性への対応 MPIによる並列化 Phoenixによる並列化 LUの性能評価 LU分解 for( i = 0; i < n; i++ ) for( j = i+1; j < n; j++ ){ A[j][i] /= A[i][i]; for( k = i+1; k < n; k++) A[j][k] -= A[i][k] * A[j][i]; } U L A (i) A 全体の計算量はO(n3) 右下ほど計算量が多い → ブロック分割よりサイクリック分割が望ましい MPI上での並列化 物理ノード間で要素たちを分担 LUではサイクリック分割 ブロック分割 P0 P1 P2 P3 P4 P5 サイクリック分割 (実際にはブロック-サイクリッ ク分割が使われる) Phoenixモデルでの並列化 各要素を仮想ノード空間にばらまく サイクリック分割 もどきの一例 ブロック分割 ノード0 ノード262-1 要素たちに一次元の順番 をつけ、ばらまく 行列を適当な数に分割し、 左と同様 Phoenix版の最適化 効率的なブロードキャスト 複数の仮想ノードに同一メッセージを送りたい 一つ一つメッセージを送るのは通信量大 → メッセージをまとめることにより通信削減 ノード増減と同時に起こっても正しく動作(論文 参照) 発表の概要 MPIとPhoenixの概要 LU分解アルゴリズム ノード増減、性能へテロ性への対応 MPIによる並列化 Phoenixによる並列化 LUの性能評価 実験環境 800MHzクラスタ (hibariXX.kototoi.org) 1.4GHzクラスタ (tsubameXX.kototoi.org) Pentium III 800MHz×2CPU×16ノード Linux 2.4.18 Pentium III 1.4GHz×1CPU×16ノード Linux 2.4.18 100Mbpsネットワーク 実験1: Phoenix版とMPI版の比 較 LU-MPI(MPI版LU) mpich1.2.4を使用 LU-PH(Phoenix版LU) 金田版Phoenixランタイムを使用 物理ノード数、仮想ノード担当はプログラム実行中一 定 接続グラフは全対全 GFlops LU-PHとLU-MPIの速度比較 4 3.5 3 2.5 2 1.5 1 0.5 0 0 10 20 30 40 # of processors LU-PH (4096) LU-MPI (4096) LU-PH (8192) LU-MPI (8192) 行列サイズN=4096, 8192 800MHzクラスタ LU-PHはLU-MPIと同等の速 度 (0.89—1.15倍) LU-PHは2nプロセッサ以外で 遅め 分割形状が不規則で、通信が 増えるため? 総通信量の比較 総通信量 (MBytes) 6000 LU-PHでは2nプロセッサ以 外で通信が多くなる傾向 5000 4000 3000 2000 1000 0 0 10 20 30 40 # of processors LU-PH (4096) LU-MPI (4096) LU-PH (8192) LU-MPI (8192) 前頁の結果を全て説明するか どうか、まだ不明 LU-MPIの通信が多いのは効 率化不足のため 実験2: 性能ヘテロ性への対応 800MHzマシンと1.4GHzマシンを混ぜて実験 Phoenix上で、仮想ノード担当量を自由に調整 速いマシン:遅いマシン= 1:1 9:7 10:6 11:5 12:4 性能ヘテロな環境でのLU-PHの 速度 1.4 relative speed 1.2 1 0.8 uniform "9:7" "10:6" "11:5" "12:4" 0.6 0.4 0.2 0 1+1 2+2 4+4 8+8 # of processors 16+16 プロセッサが少ないとき、 担当変更の効果あり 4+4, 16+16プロセッサで は変えない方が良かった 関連研究 MPICH-V [Bosilcaら 02] (SC02) Grid上でMPIプログラムが無変更で動作 ノード故障に対応 (checkpointingによる) ノード増減、負荷分散はユーザ責任 関連研究 性能へテロクラスタでのLinpack アルゴリズム[笹生ら02] (JSPP02) LinpackはLUを含む 速いマシンに遅いマシンの整数倍 の要素を割り当てる → Phoenixではより自由に調整可能 まとめ Phoenixで並列LU分解プログラムを記述 比較的容易な記述で、ノード増減にも対応 MPI版と同等の性能 性能へテロ性にも対応 今後の展望 (誰かがやってくれ るであろうことも含めて) LANをまたいだ環境での実験 ノード増減がある場合の実験 第一段階: 通知してからのノード脱退 第二段階: いきなりノード脱退 多様なアプリケーション ツールの充実 SGC is still alive! 問い合わせがいくつかあり、SGCをメンテ中です (Version 0.4beta) GC_malloc/GC_free更に高速化 Boehm GCとの互換性向上(SGC_init廃止など) TODO: Incremental GC機能の公開 GC_freeとのからみもやっかい 64bit対応
© Copyright 2024 ExpyDoc