使用C ++中的MPI Send()或MPI_Bcast发送类实例

时间:2014-05-05 19:41:13

标签: mpi

如何在C ++中使用std::vectorMPI_Send()传输班级或MPI_Bcast()的实例?

3 个答案:

答案 0 :(得分:3)

您不能简单地传输随机类的实例,因为C调用MPI_Send()MPI_Bcast()都不了解这些类的结构。您可以通过向std::vector提供&vector[0]来发送MPI_Send()的实例(因为它使用连续的内存存储),但接收操作应该分几个步骤实现:MPI_Probe() - &gt ;获取消息中的元素数量 - >调整矢量实例的大小 - > MPI_Recv()进入已调整大小的实例。对于所有其他情况,您应该使用类似Boost.MPI的内容,或者应使用MPI_Pack()MPI_Unpack()将类实例与MPI消息进行序列化和反序列化。

答案 1 :(得分:3)

MPI不对对象进行操作,它在内存位置上运行。因此,要从您自己的类中发送对象,您需要知道类中的内存布局。然后,您可以使用它来构建MPI数据类型。有一整章MPI规范(第4章)专门讨论如何做到这一点。基本前提是您基于标准MPI类型构建数据类型,以指定的内存布局排列。一旦构建并提交了此类型,就可以在MPI操作中使用它。

答案 2 :(得分:1)

好的,我已经找到了解决方案:

http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report/node83.htm#Node83

第五个例子中的