Jonathan Bishop:
> HI,
> I am involved in a project which requires the transport of large C++
> instances over MPI communication channels. I am using boost serialization to
> pack and unpack the objects into a buffer. The whole buffer is sent in one
> shot.
>
> Of course for large objects this can be problematic. I have two questions...
>
> 1) is there any way to tell beforehand how large the buffer needs to be? In
> other words, can you run serialization in a counting only mode?
 
I'm not sure about the Boost Serialization library, but the C++
Middleware Writer counts the number of bytes in a message
before any is marshalled.

Here's an example

void
remote_messages::Marshal (SendCompressedBuffer& buf
                                          , marshalling_integer const& abt1
                                          , marshalling_integer const& abt2
                                          , cmw_user_input const& abt3
                                         )
{
  Counter cntr(msg_length_max);
  abt1.CalculateMarshallingSize(cntr);
  abt2.CalculateMarshallingSize(cntr);
  abt3.CalculateMarshallingSize(cntr);
  cntr.Add(sizeof(msg_id_direct));
  buf.Receive(&msg_id_direct, sizeof(msg_id_direct));
  abt1.Marshal(buf, false);
  abt2.Marshal(buf, false);
  abt3.Marshal(buf, false);
}


--
Brian Wood
Ebenezer Enterprises
http://webEbenezer.net