並列処理 演習 クラスタの構成技術と クラスタによる並列処理 3. クラスタによる並列処理 アプリケーション クラスタ向きのアプリケーション – 一般にプロセッサ内での処理量が多く通信量が 少なければ並列処理の効果は高い • 特にクラスタではこの傾向が顕著 – 驚異的並列計算(embarrassingly parallel) 同時に実行できる完全な独立部分に分解できる問題 – スーパーリニアスピードアップ n台でn倍以上の速度向上 データサイズ縮小によるメモリ・キャッシュの効果 アプリケーション(2) • 画像処理 – ボリュームレンダリング • データベース検索 – たんぱく質分析 – データマイニング メッセージ通信ライブラリ • 並列アプリケーションで通信を行うソフトウェア – ネットワークに依存しない通信がしたい • いちいちソケットを使って書くのは大変 • ネットワークプロトコルがTCP/IPとは限らない • かつては各社が独自に提供 – IBM: MPL • 可搬性のあるプログラムを書きたい • 標準規格が欲しい – MPI Forum: MPI PVM • • • • Parallel Virtual Machine 1989年 オークリッジ国立研究所 問題を別々のプログラムに分解して実行 Heterogeneousな環境による並列処理の研究から 誕生 – データ表現の自動変換、動的プロセス生成、マシン自 動選択 • Heterogeneous環境での並列実行も可能 • 動的なプロセス生成を提供 • 固有の並列計算機に特化した高速化はできない PVMの動作モデル MPI • Message Passing Interface • 1992年 MPI Forum – 並列計算機ベンダーと学術組織 • 仕様のみ策定。実装は各ベンダーに任せる – ベンダーがそれぞれの計算機固有の方式を用いて実 装 • MPICH, LAM • 1997年 MPI-2 動的プロセス生成、並列I/Oなどの仕様を追加 MPIの動作モデル MPIの実装 • MPICH – アルゴンヌ国立研究所・ミシシッピ州立大 – 現在の主流 • LAM – オハイオ スーパーコンピューティングセン ター • CHIMP – エジンバラ並列計算センター MPIプログラミング • SPMD (Single Program Multiple Data)モデル • 基本的には6つの関数で書ける – – – – – – MPI_Init() MPI_Comm_size() MPI_Comm_rank() MPI_Send() MPI_Recv() MPI_Finalize() サンプルMPIプログラム #include <mpi.h> int main(int argc, char *argv[]) { int rank; MPI_Status status; char buf[256]; char data[] = "Hello"; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { MPI_Send(data, 5, MPI_CHAR, 1, 0, MPI_COMM_WORLD); } else if (rank == 1) { MPI_Recv(buf, 5, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); printf("%s\n", buf); } MPI_Finalize(); } 通信のモデル • 1対1通信 • 1対n通信 – – – – いろいろな通信パターンがある ブロードキャスト、マルチキャスト レデュース ギャザ・スキャタ 1対1通信 • MPI_Send(), MPI_Recv() P0 P1 ブロードキャスト • あるプロセスから他の全てのプロセスへデータをコ ピー • MPI_Bcast() リデュース • すべてのプロセスから値を集約 • MPI_Reduce() スキャタ・ギャザ • データの要素を各プロセスに分配・収集 • MPI_Scatter(), MPI_Gather() バリア • 処理のある部分で全てのプロセスが同期 • MPI_Barrier() 高速化技法 • 実行速度向上の障害 – 通信 – 同期 – 計算量の不均衡 • 負荷分散 – 静的負荷分散 – 動的負荷分散 静的負荷分散 • 問題の性質を見極めて、ノードへ割り当て る仕事量を決める – 性質の分かっている問題にしか使えない – うまく配分するのは難しい 動的負荷分散 • アプリケーションによるアプローチ マスタ・スレーブ型アプリケーション • ワークプール • システムによるアプローチ プロセスマイグレーション • 負荷の軽いノードへプロセスを移動 プロセスマイグレーション
© Copyright 2024 ExpyDoc