【问题标题】:Variable sized message in MPIMPI 中的可变大小消息
【发布时间】:2011-05-15 11:13:18
【问题描述】:

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

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

【问题讨论】:

  • 在一般情况下,具有大小和有效负载的两条消息是传递直到运行时才知道大小的消息的首选方法。
  • 这是一种解决方法,但这并不简单,因为这两条消息可能会干扰不同线程中的另一对消息。 Douglas Gregor 和其他人在这篇论文 researchgate.net/publication/… 中讨论了线程安全方法,并提出了一种标准方法来做到这一点。

标签: parallel-processing cluster-computing mpi


【解决方案1】:

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

我猜有点像套接字。

【讨论】:

  • 唯一需要注意的是传递给 MPI_Recv 的计数和缓冲区大小应该在大小上保持一致。如果可以提前对消息大小进行一些合理的限制,这可能是一种有效的技术。否则,为了适应一般情况,将有一些缓冲区能够容纳 32 位的数据类型。这会导致内存占用严重膨胀。
  • 你可以添加一个例子吗?你会使用MPI_Get_count(),然后使用malloc(sizeof(char)*getCountResult),然后将生成的缓冲区传递给MPI_Recv()吗?
【解决方案2】:

您也可以使用MPI_ProbeMPI_Iprobe,而不是使用MPI_RecvMPI_Irecv 发布接收。如果使用不当,Probe/Iprobe 可能会降低性能,但它们是处理可变大小消息的一种常用方法。此外,在多线程环境中要小心,因为 Probe/Iprobe 在某些多线程上下文中是不安全的。请参阅Hoefler et al.,了解对这些问题的全面讨论以及可能包含在 MPI-3 中的修复程序 (Mprobe) 草图。

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多