on Wed Oct 19 2011, Matthias Troyer <troyer-AT-phys.ethz.ch> wrote:
On Sep 30, 2011, at 5:18 PM, Tim Jacobs wrote:
I'm not sure why the following test-class produces this error: "MPI_Recv: MPI_ERR_TRUNCATE: message truncated"
If the std::map has only a single element (ie I remove one of the test[].push_back() lines) the error does not occur. Can someone verify that this is indeed a bug and not just novice misuse of the library?
Thanks, Tim
#include <boost/mpi.hpp> #include <boost/serialization/string.hpp> #include <boost/serialization/vector.hpp> #include <boost/serialization/map.hpp>
int main( int argc, char * argv [] ) { boost::mpi::environment env(argc, argv); boost::mpi::communicator world;
if(world.rank()==0){ std::map<int, std::vector<std::string> > test; test[1].push_back("FOO"); test[50].push_back("BAR"); world.send(1, 1, boost::mpi::skeleton(test)); world.send(1, 1, boost::mpi::get_content(test)); std::cout << "sent" << std::endl; } else{ std::map<int, std::vector<std::string> > test; world.recv(0,1,boost::mpi::skeleton(test)); world.recv(0,1,boost::mpi::get_content(test)); } }
The problem is that a std::map cannot be sent using the skeleton&content approach, since the keys need to be known to build a map.
I think, at least in principle, it should be possible to send a map that way *if* the keys never change... right? -- Dave Abrahams BoostPro Computing http://www.boostpro.com