ルート プロセスから値をブロードキャストし、それを他のすべてのプロセスで受信しようとしています。以下の2つの形式で実装しました。1.すべてのプロセス(ルートおよび他のすべてのスレーブ)でブロードキャスト機能を使用しました
#include <boost/mpi.hpp>
#include <iostream>
#include <boost/serialization/string.hpp>
namespace mpi = boost::mpi;
int main(int argc, char* argv[])
{
mpi::environment env(argc, argv);
mpi::communicator world;
std::string value;
if (world.rank() == 0) {
value = "Hello, World!";
}
broadcast(world, value, 0);
std::cout << "Process #" << world.rank() << " says " << value << std::endl;
return 0;
}
2.次のように、ルートからのみブロードキャストを呼び出し、他のプロセスから呼び出しを受信します。
if (world.rank() == 0) {
value = "Hello, World!";
broadcast(world, value, 0);
}
else {
world.recv(boost::mpi::any_source, boost::mpi::any_tag, value);
}
これらの例ではどちらも同様に機能しているように見えますが、ここでコードの効率とパフォーマンスに関して好みがあるかどうかを知りたいです。
ありがとうございました!