使用MPI广播对象

时间:2011-11-17 18:53:31

标签: object mpi broadcast

有没有办法广播一个对象,还是我必须以其他方式播放它包含的所有值?

1 个答案:

答案 0 :(得分:0)

我假设C ++语言只是具有对象的语言,并且在标准中定义了MPI接口。如果我错了,就说。对于其他语言,基本原则是这样的。

基本上,如果您可以对对象执行memcpy或将其存储到文件(write)并从文件(read)中读取它,则可以执行内存的MPI_Bcast,存储哪个对象。

为了能够这样做,你的对象应该

  • 由Only POD类型(普通旧数据:char,int,float,double)或具有相同属性的其他对象组成
  • 里面没有指针,因为在发送到另一个MPI进程后,内存与发送过程中的内存不同。

如果您的对象更复杂,则应在发送之前将其序列化(编组)到某个缓冲区,然后在接收之后进行反序列化(解组)。您可以使用boost serialization - 但即使这个变体也不是通用的(对象如何组织为可序列化有限制)

PS boost序列化已集成到Boost.MPI