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