【发布时间】:2020-07-07 18:19:21
【问题描述】:
我了解MPI_Bsend 会将发送者的缓冲区保存在 MPI 库管理的本地缓冲区中,因此将发送者的缓冲区用于其他目的是安全的。
我不明白的是MPI_Ssend如何保证这一点?
以同步模式发送。
无论是否发布了匹配的接收,都可以启动使用同步模式的发送。但是,只有发送匹配的接收,并且接收操作已经开始接收同步发送发送的消息,发送才会成功完成。因此,一次同步发送的完成不仅表明发送缓冲区可以被重用,而且表明接收方在其执行过程中已经到达了某个点,即它已经开始执行匹配的接收
如上所述,MPI_Ssend 将返回(即允许进一步的程序执行)如果匹配的接收已经发布并且它已经开始接收同步发送发送的消息。 考虑以下情况:
我通过MPI_Ssend 发送int 说data[1 million] 的巨大数据数组。另一个进程开始接收它(但可能没有完全接收),这允许MPI_Ssend 返回并执行下一个程序语句。下一条语句在data[1 million] = \*new value*\ 的最后对缓冲区进行更改。然后MPI_Ssend 最终到达缓冲区末端并发送这个不是我想要的新值。
我在这张照片中缺少什么?
TIA
【问题讨论】: