gpt4 book ai didi

c++ - 如何有效地使用boost mpi广播功能?

转载 作者:行者123 更新时间:2023-11-30 05:26:51 25 4
gpt4 key购买 nike

我正在尝试从根进程广播一个值并在所有其他进程中接收它。我用以下两种格式实现了它。1.我在所有进程(root和所有其他slave)中使用了广播功能

#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。我只从 root 调用广播,而调用从其他进程接收,如下所示:

  if (world.rank() == 0) {
value = "Hello, World!";
broadcast(world, value, 0);
}
else {
world.recv(boost::mpi::any_source, boost::mpi::any_tag, value);
}

在这些例子中两者似乎工作相似,但我想知道这里是否有代码效率和性能方面的偏好。

谢谢!

最佳答案

使用普通的广播

第二个版本不是正确的 MPI 程序。如果它有效,那只是偶然。总的来说,broadcast 和其他集合是高度优化的,可以利用系统拓扑信息。因此,它们比您自己使用点对点消息实现它的性能要好。此外,它们以更抽象的方式表达您的通信结构,从而产生更清晰的代码。

关于c++ - 如何有效地使用boost mpi广播功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37598726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com