【问题标题】:MPI_SSEND : How does it guarantee reuse of the sender buffer?MPI_SSEND :它如何保证发送者缓冲区的重用?
【发布时间】:2020-07-07 18:19:21
【问题描述】:

我了解MPI_Bsend 会将发送者的缓冲区保存在 MPI 库管理的本地缓冲区中,因此将发送者的缓冲区用于其他目的是安全的。 我不明白的是MPI_Ssend如何保证这一点?

以同步模式发送。

无论是否发布了匹配的接收,都可以启动使用同步模式的发送。但是,只有发送匹配的接收,并且接收操作已经开始接收同步发送发送的消息,发送才会成功完成。因此,一次同步发送的完成不仅表明发送缓冲区可以被重用,而且表明接收方在其执行过程中已经到达了某个点,即它已经开始执行匹配的接收

如上所述,MPI_Ssend 将返回(即允许进一步的程序执行)如果匹配的接收已经发布并且它已经开始接收同步发送发送的消息。 考虑以下情况:

我通过MPI_Ssend 发送intdata[1 million] 的巨大数据数组。另一个进程开始接收它(但可能没有完全接收),这允许MPI_Ssend 返回并执行下一个程序语句。下一条语句在data[1 million] = \*new value*\ 的最后对缓冲区进行更改。然后MPI_Ssend 最终到达缓冲区末端并发送这个不是我想要的新值。

我在这张照片中缺少什么?

TIA

【问题讨论】:

    标签: parallel-processing mpi


    【解决方案1】:

    MPI_Ssend() 既是阻塞又是同步

    来自 MPI 3.1 标准(第 3.4 章,第 37 页)

    因此,同步发送的完成不仅表明 发送缓冲区可以重复使用,但这也表明 接收者在其执行中达到了某个点,即它 已开始执行匹配的接收。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 2018-01-12
      • 2018-12-06
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多