
i found the problem, and found a solution, but would be better if i learn
some explanations of you guys which know much more.
problem was that i was sending the pointer of my object
{
Lattice* lat = new Lattice("filename");
world.send(1, 1, lat);
}
that generated the errors on the packing algorithms i suppose (correct me if
im wrong)
so instead of changing all my program i only sent the object pointed
world.send(1, 1, *lat );
and on the receiver process i receive it with
Lattice lat;
world.recv(0, 1, lat);
then i can transform it to pointer again to keep my algorithms unchanged,
Lattice plat = ⪫
i wonder, is this a good approach to solve the error i was having?? at least
does work and i can continue programming, which makes me happy :)
any suggestions welcome
and thanks everybody for all the help already
viva boost
On Mon, Aug 30, 2010 at 11:09 AM, Cristobal Navarro
sure,
this is master process, sends objects. #SENDER PROCESS (rank 0) printf("sending latticec to worker 1\n"); lat->print(); //to see what i am sending cin >> a; world.send(1, 1, lat);
#RECEIVER PROCESS (rank 1) Lattice* latr; printf("worker%2d:: waiting master signal...\n", world.rank()); world.recv(0, 1, latr); printf("OK\n"); latr->print();
#this is the Lattice class, i have commented almost all atributes on the serialization method except 2 integers. class Lattice{
private: friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version){ ar & numNodes; ar & numEdges; //ar & nodes; //ar & edges; //ar & keyLists; //ar & corrupt; //ar & rec; //ar & nop; //ar & acumCoef; //ar & key; }
public: int numNodes; int numEdges; map
edges; map nodes; string key; list< list<int> > keyLists; bool corrupt; bool rec; int nop; string acumCoef; } #when i send the object it has Nodes=2 Edges= 1
#when i receive it, i get Nodes=131072 Edges= 65536
On Mon, Aug 30, 2010 at 5:46 AM, Matthias Troyer
wrote: On Aug 30, 2010, at 2:05 AM, Cristobal Navarro wrote:
hello again
i wrote my code for sending one object from rank 0 to rank 1 process sing boost.mpi because it is very simple. it worked when sending a string just like in the documentation,
however when i sent the object i showed earlier i am getting errors.
terminate called after throwing an instance of 'boost::archive::archive_ exception' what(): class version St8multimapIiiSt4lessIiESaISt4pairIKiiEEE [lenovo00:06116] *** Process received signal *** [lenovo00:06116] Signal: Aborted (6) [lenovo00:06116] Signal code: (-6) [lenovo00:06116] [ 0] [0x71f410] [lenovo00:06116] [ 1] /lib/tls/i686/cmov/libc.so.6(abort+0x182) [0x74da82] [lenovo00:06116] [ 2]
/usr/lib/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x14f)
[0x4da52f] [lenovo00:06116] [ 3] /usr/lib/libstdc++.so.6(+0xbd465) [0x4d8465] [lenovo00:06116] [ 4] /usr/lib/libstdc++.so.6(+0xbd4a2) [0x4d84a2] [lenovo00:06116] [ 5] /usr/lib/libstdc++.so.6(+0xbd5e1) [0x4d85e1] [lenovo00:06116] [ 6]
[0x80ee491] ... ... ... says something about multimap type error and other things. if i remove the multimap attribute from the serialization method i get another error, and if i comment almost everything and only keep 2 integers (numNodes numEdges) for testing... the receiving object has different values on those integers.
this can be a problem of the internal serializing which uses packed_oarchive/iarchive instead of the binary_oarchive/iarchive i was testing earlier when it worked?? any indication is welcome if you need more debugging information i can
bin/release/plattice(_ZN5boost13serialization15throw_exceptionINS_7archive17archive_exceptionEEEvRKT_+0x3e) provide
Please post the code that just sends two integers and fails to receive them correctly
Matthias
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users