Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.MPI] question about serializingcustomobject
From: Cristobal Navarro (axischire_at_[hidden])
Date: 2010-08-30 16:36:07


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 <axischire_at_[hidden]>wrote:

> 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<int, Edge> edges;
> map<int, Node> 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 <troyer_at_[hidden]>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]
>> >
>> bin/release/plattice(_ZN5boost13serialization15throw_exceptionINS_7archive17archive_exceptionEEEvRKT_+0x3e)
>> > [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
>> provide
>> >
>>
>> Please post the code that just sends two integers and fails to receive
>> them correctly
>>
>> Matthias
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net