Boost logo

Boost :

Subject: Re: [boost] Boost mpi, serialization and shared_ptr
From: Moorkamp, Max (Dr.) (mm489_at_[hidden])
Date: 2012-06-05 06:30:55


Thanks for your answer,

I tried what you suggested. Now I have

Derived.h

#ifndef DERIVED_H_
#define DERIVED_H_

#include "Base.h"
#include <boost/serialization/serialization.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/export.hpp>

class Derived: public Base
{
private:
        double b;
        boost::shared_ptr<Base> MemberPointer;
        friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
                ar & boost::serialization::base_object<Base>(*this);
                ar & MemberPointer;
                ar & b;
        }
public:
        Derived();
        virtual ~Derived();
};

BOOST_CLASS_EXPORT_KEY(Derived)

#endif /* DERIVED_H_ */

and

Derived.cpp

#include "Derived.h"
#include <boost/mpi.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/export.hpp>

Derived::Derived()
{
}

Derived::~Derived()
{
}

BOOST_CLASS_EXPORT_IMPLEMENT(Derived)

but now I get

In file included from Derived.h:14,
                 from Derived.cpp:8:
/usr/local/include/boost/serialization/shared_ptr.hpp: In function ‘void boost::serialization::load(Archive&, boost::shared_ptr<U>&, unsigned int) [with Archive = boost::mpi::packed_skeleton_iarchive, T = Base]’:
/usr/local/include/boost/serialization/split_free.hpp:58: instantiated from ‘static void boost::serialization::free_loader<Archive, T>::invoke(Archive&, T&, unsigned int) [with Archive = boost::mpi::packed_skeleton_iarchive, T = boost::shared_ptr<Base>]’
/usr/local/include/boost/serialization/split_free.hpp:74: instantiated from ‘void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::mpi::packed_skeleton_iarchive, T = boost::shared_ptr<Base>]’
/usr/local/include/boost/serialization/shared_ptr.hpp:171: instantiated from ‘void boost::serialization::serialize(Archive&, boost::shared_ptr<U>&, unsigned int) [with Archive = boost::mpi::packed_skeleton_iarchive, T = Base]’
/usr/local/include/boost/serialization/serialization.hpp:128: instantiated from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::mpi::packed_skeleton_iarchive, T = boost::shared_ptr<Base>]’
/usr/local/include/boost/archive/detail/iserializer.hpp:188: instantiated from ‘void boost::archive::detail::iserializer<Archive, T>::load_object_data(boost::archive::detail::basic_iarchive&, void*, unsigned int) const [with Archive = boost::mpi::packed_skeleton_iarchive, T = boost::shared_ptr<Base>]’
Derived.cpp:25: instantiated from here
/usr/local/include/boost/serialization/shared_ptr.hpp:155: error: ‘class boost::mpi::packed_skeleton_iarchive’ has no member named ‘reset’

If I omit the #include <boost/mpi.hpp> from Derived.cpp everything compiles, but as expected I get a runtime error

terminate called after throwing an instance of 'boost::archive::archive_exception'
  what(): unregistered class - derived class not registered or exported

Any ideas?

Regards

Max
________________________________________
From: boost-bounces_at_[hidden] [boost-bounces_at_[hidden]] On Behalf Of Robert Ramey [ramey_at_[hidden]]
Sent: 02 June 2012 03:30
To: boost_at_[hidden]
Subject: Re: [boost] Boost mpi, serialization and shared_ptr

Max Moorkamp wrote:
> Hi,
>
> I have started to parallelize one of my applications using MPI and I
> am running into trouble with serializing classes that contain
> shared_ptr member to be send through MPI. Below is a minimal case
> that demonstrates my problem.

before we get too carried away, please double check the documentation.

the macro BOOST_SERIALIZATION_EXPORT has
been upgraded to the more precise versions

BOOST_SERIALIZATION_EXPORT_IMPLEMENT
and
BOOST_SERIALIZATION_EXPORT_KEY

Make these tweaks and see if this helps.

Robert Ramey

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk