이 간단한 MPI 예제를 함께 던졌습니다. 테스트 주위에 이상한 행동을보고 있어요 :: mpi :: 요청을 설명 할 수 없습니다. 특히, 두 번째 루프에서 주석을 제거하면 영구히 회전합니다. boost :: mpi :: 요청 테스트는 true를 한 번만 리턴합니까? 그렇다면 어떤 상태의 비트가 업데이트되고 있습니까? 나는 Boost의 MPI와 선택적 코드를 뚫고 보았고 나는 내가보고있는 것을 설명 할 수 없다.boost :: mpi :: request에 대해 누락 된 점은 무엇입니까? 테스트가 상태를 변경하는 것 같습니다
는 (당연히 미숙를 들어, 당신이 스스로를 실행하는 두 개의 노드로 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;
}
}
그래, 내가 그 일을 끝냈다. 내 자신의 bool을 bookkeping하는 것이다. 기본 MPI_TEST를 고려하지 않았습니다. - 감사합니다. – Carbon