如何在C ++中使用std::vector
或MPI_Send()
传输班级或MPI_Bcast()
的实例?
答案 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)