C++でOpenMPI入門3 ブロードキャスト

お次はブロードキャスト.

標準入力から情報を得たいときに, ランクを気にせず普通にやってしまうと, プロセス全てから値を尋ねられて大変な事になる. そこで, 0番目のプロセスでだけ入力を得て, 後は他のプロセスに0番目から教えてやる, という方式をとる.

#include <iostream>
#include <mpi.h>

int main(int argc, char **argv)
{
    MPI_Init(argc, argv);

    int rank = MPI::COMM_WORLD.Get_rank();
    int value = 0;
    if (rank == 0)
    {
        std::cout << "Input an integer value : ";
        std::cin >> value;
    }

    MPI::COMM_WORLD.Bcast(&value, 1, MPI_INT, 0);
    std::cout << "rank = " << rank << " : value = " << value << std::endl;

    MPI::Finalize();
}

新しいのはBcastだけです. ブロードキャストでは, 特定のプロセスから他のすべてのプロセスへと送信します.

この場合, Bcastで, 1つのMPI_INT型分のデータを0番目のプロセスからvalueに受信するということです. 簡単ですな. 受信と書いたが, 引数にvalueしかしていないことからわかるようにむしろvalueの値を同期させていると言って良いかもしれない.

結果はこんな感じ.

Input an integer value : 10
rank = 1 : value = 10
rank = 2 : value = 10
rank = 3 : value = 10
rank = 0 : value = 10