<講義2> MPIによる並列プログラミングの基礎

  1. MPI(Messsage Passing Interface)とは
    • プロセッサ間でメッセージを交換する方式(インターフェース) 2種
      • メッセージパッシング方式
      • データ並列方式
    • メッセージパッシング方式 2種
      • MPI(Message Passing Interface)
      • PVM(Parallel Virtual Machine)
  2. MPIのインストール
    • 通常のLinuxソフトウェアのインストール・設定と異なる点
      • インストール先
        • PCクラスタのノードPCのそれぞれにインストールするか否かはライブラリにより異なる
          • 全ノードPCにインストールする、もしくは、NFSで共有しているファイルシステムにインストールする場合
          • 1ノードにインストールし、そのノードがマスターマシンとして機能する場合
      • ノードの指定
        • hostノード(単一)とslaveノード(複数)を記述する
  3. ノード間通信とその制御
    • 通信関数と制御関数
      • ライブラリに装備された複数プロセス間のメッセージ交換方法に関する関数とプロセス制御のための多数の関数
--通信参加プロセス数による区別
---1対1通信
---グループ通信
----クラスタ内全ノードを1グループとする場合と一部のノードを1グループとする場合とがある
---送受信手続きの開始・保留方法による区別
----ブロッキング通信
-----メッセージを送るにあたり、送信を打診して、受け手の受信許可を待つ
-----メッセージの送信打診から受信許可の受け取りまで待機状態になる
-----送信と受信とは同時に起こり、その送受信中は送り側・受け側ともに待機状態になる
-----送受信終了後に処理が開始される
----ノン・ブロッキング通信
-----メッセージを送るにあたり、受けて側の状態によらず、すぐに送信を開始する
-----送信開始後も、別の処理を継続する
-----送信と受信とは同時には始まらないが、受信の終了をもって、送信は完了する
-----送受信終了は明示的に送り側・受け側に伝えられ、その情報をもって次の処理が開始される
-----1対1通信のときのみ使用可能
-----待ち時間を減らすことが可能
  • PCクラスタでの並列プログラムの実行制御
    • ライブラリに装備された複数の制御関数と2つの通信関数をプログラムに用いることによってプロセス間の通信制御を行う
    • コミュニケータ
      • 並列プログラムが実行するプロセスの集合
      • すべてのプロセスはコミュニケータ上のID(rank)を与えられる
      • 制御関数・通信関数はrankを引数としてとることにより、制御・通信を実行する
-PCクラスタでの並列プログラムの実行の実際
--クラスタホストマシンにログインする
--"クラスタ"に対して、使用するPC数を指定してジョブを投入する
--ジョブの投入はスクリプトによって行う
--個々のプロセスの起動は実行環境に任せる
  • その他 実際上の問題
    • 送受信要素数が不明な状態での送受信
      • データの受信を終える前にデータの要素数を把握してやることでスムーズな送受信を実現する
      • 構造体など複雑なデータ構造の送受信においては、Byte型置換(パック)をして少ない回数で送り、受信後アンパックするなどの工夫も必要となることがある