220 likes | 311 Views
並列処理 演習. クラスタの構成技術と クラスタによる並列処理. 3. クラスタによる並列処理. アプリケーション. クラスタ向きのアプリケーション 一般にプロセッサ内での処理量が多く通信量が少なければ並列処理の効果は高い 特にクラスタではこの傾向が顕著 驚異的並列計算 (embarrassingly parallel) 同時に実行できる完全な独立部分に分解できる問題 スーパーリニアスピードアップ n 台で n 倍以上の速度向上 データサイズ縮小によるメモリ・キャッシュの効果. アプリケーション (2). 画像処理 ボリュームレンダリング データベース検索
E N D
並列処理 演習 クラスタの構成技術と クラスタによる並列処理
アプリケーション クラスタ向きのアプリケーション • 一般にプロセッサ内での処理量が多く通信量が少なければ並列処理の効果は高い • 特にクラスタではこの傾向が顕著 • 驚異的並列計算(embarrassingly parallel) 同時に実行できる完全な独立部分に分解できる問題 • スーパーリニアスピードアップ n台でn倍以上の速度向上 データサイズ縮小によるメモリ・キャッシュの効果
アプリケーション(2) • 画像処理 • ボリュームレンダリング • データベース検索 • たんぱく質分析 • データマイニング
メッセージ通信ライブラリ • 並列アプリケーションで通信を行うソフトウェア • ネットワークに依存しない通信がしたい • いちいちソケットを使って書くのは大変 • ネットワークプロトコルがTCP/IPとは限らない • かつては各社が独自に提供 • IBM: MPL • 可搬性のあるプログラムを書きたい • 標準規格が欲しい • MPI Forum: MPI
PVM • Parallel Virtual Machine • 1989年 オークリッジ国立研究所 • 問題を別々のプログラムに分解して実行 • Heterogeneousな環境による並列処理の研究から誕生 • データ表現の自動変換、動的プロセス生成、マシン自動選択 • Heterogeneous環境での並列実行も可能 • 動的なプロセス生成を提供 • 固有の並列計算機に特化した高速化はできない
MPI • Message Passing Interface • 1992年 MPI Forum • 並列計算機ベンダーと学術組織 • 仕様のみ策定。実装は各ベンダーに任せる • ベンダーがそれぞれの計算機固有の方式を用いて実装 • MPICH, LAM • 1997年 MPI-2 動的プロセス生成、並列I/Oなどの仕様を追加
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()
高速化技法 • 実行速度向上の障害 • 通信 • 同期 • 計算量の不均衡 • 負荷分散 • 静的負荷分散 • 動的負荷分散
静的負荷分散 • 問題の性質を見極めて、ノードへ割り当てる仕事量を決める • 性質の分かっている問題にしか使えない • うまく配分するのは難しい
動的負荷分散 • アプリケーションによるアプローチ マスタ・スレーブ型アプリケーション • ワークプール • システムによるアプローチ プロセスマイグレーション • 負荷の軽いノードへプロセスを移動