Parallel processing MPI中的可变大小消息

Parallel processing MPI中的可变大小消息,parallel-processing,cluster-computing,mpi,Parallel Processing,Cluster Computing,Mpi,是否存在允许使用MPI发送/接收可变大小消息的库调用 解决方法是在第一条消息中发送数据大小,然后再发送实际有效负载,但我想知道是否有将这两条单独消息组合在一起的约定。提供给MPI_Recv的计数只是一个上限。MPI_Get_count可用于查找收到的项目的确切数量 我猜有点像插座。你也可以使用MPI\u探头或MPI\u Iprobe而不是用MPI\u Recv或MPI\u Irecv发送接收。如果使用不当,Probe/Iprobe可能会有性能缺点,但它们是处理可变大小消息的一种常见方法。另外,在

是否存在允许使用MPI发送/接收可变大小消息的库调用


解决方法是在第一条消息中发送数据大小,然后再发送实际有效负载,但我想知道是否有将这两条单独消息组合在一起的约定。

提供给MPI_Recv的计数只是一个上限。MPI_Get_count可用于查找收到的项目的确切数量


我猜有点像插座。

你也可以使用
MPI\u探头
MPI\u Iprobe
而不是用
MPI\u Recv
MPI\u Irecv
发送接收。如果使用不当,Probe/Iprobe可能会有性能缺点,但它们是处理可变大小消息的一种常见方法。另外,在多线程环境中要小心,因为Probe/Iprobe在某些多线程环境中是不安全的。有关这些问题的详细讨论以及MPI-3中可能包含的修复程序(Mprobe)草图,请参阅。

在一般情况下,两条消息的大小和有效负载是传递消息的首选方法,其中消息的大小直到运行时才知道。这是解决方法,但这并不简单,因为这两条消息可能会干扰不同线程中的另一对消息。道格拉斯·格雷戈(Douglas Gregor)和其他人在本文中讨论了线程安全方法,并提出了实现这一点的标准方法。唯一需要注意的是,传递给MPI_Recv的计数和缓冲区大小应该一致。如果可以提前对消息大小进行一些合理的限制,这将是一种有效的技术。否则,为了适应一般情况,将有一些缓冲区能够容纳32位的数据类型计数。这会严重增加内存占用。您可以添加一个示例吗?您会使用
MPI\u Get\u count()
然后使用类似于
malloc(sizeof(char)*getCountResult)
的方法,然后将生成的缓冲区传递给
MPI\u Recv()