2014-05-05 21 views

回答

3

你不能簡單地因爲被C調用既不MPI_Send()也不MPI_Bcast()瞭解這些類的結構傳送隨機類的實例。可以發送的std::vector實例(因爲它使用連續的存儲器存儲)通過提供&vector[0]MPI_Send()但接收操作應該然後在幾個步驟來實現:MPI_Probe() - >獲得的消息中的元素數 - >調整矢量實例 - >將MPI_Recv()納入調整大小的實例。對於所有其他情況下,你應該使用類似Boost.MPI或者你應該使用MPI_Pack()MPI_Unpack()序列化並deserialise你的類實例和MPI消息。

1

MPI不會對對象進行操作,它的運行內存位置。所以要從你自己的班級發送一個對象,你需要知道班級的內存佈局。然後您可以使用它來構建MPI數據類型。有關MPI規範(第4章)的整章專門討論如何執行此操作。基本前提是您可以基於標準MPI類型構建數據類型,並按照指定的內存佈局進行排列。一旦這種類型被構建並提交,您就可以在MPI操作中使用它。