【发布时间】:2017-09-30 01:42:46
【问题描述】:
所以我把这个简单的 MPI 示例放在一起。我看到一些关于测试 boost::mpi::request 的奇怪行为,我无法解释。具体来说,如果您删除对第二个循环的评论,它会永远旋转。对 boost::mpi::request 的测试是否只返回 true 一次?如果是这样,什么状态正在更新?我浏览了 Boost 的 MPI 和可选代码,但我无法解释我所看到的。
(当然,对于初学者来说,您需要使用带有两个节点的 mpiexec 来自己运行它。)
# include "stdafx.h"
# include <boost/serialization/string.hpp>
# include <boost/mpi.hpp>
# include <windows.h>
# include <iostream>
# include <boost/mpi.hpp>
# include <boost/optional.hpp>
int main(int argc, char *argv[]);
int main(int argc, char *argv[])
{
boost::mpi::environment m_env;
boost::mpi::communicator m_world;
if (m_world.rank() == 0)
{
m_world.send(1,0, std::string("hi!"));
}
else
{
std::shared_ptr<std::string> rcv = std::shared_ptr<std::string>(new std::string());
boost::mpi::request x = m_world.irecv(0, 0, *rcv);
while (!x.test())
{
Sleep(10);
}
//while (!x.test())
//{
// Sleep(10);
//}
std::cout << *rcv;
}
}
【问题讨论】: