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@gmail.com> 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@phys.ethz.ch> 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@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users