【问题标题】:understanding MPI send differences了解 MPI 发送差异
【发布时间】:2015-10-06 13:37:57
【问题描述】:

好吧,让我们开始吧,我脑子里有点糊涂。

发送:它正在阻塞。发送方将等待接收方发布相应的 RECV。

SSEND:它是阻塞的,发送方不会只等到接收方发布相应的RECV,它会等待RECV的ack。这意味着RECV运行良好。

BSEND:它是非阻塞的。该过程可以继续执行其部分代码。数据存储在之前正确分配的缓冲区中。

ISEND:它是非阻塞的。该过程可以继续执行其部分代码。数据未存储在缓冲区中:在确定 ISEND 运行正常(WAIT/TEST)之前,不得覆盖正在发送的数据。

那么.. ISEND 和 BSEND 只是缓冲区不同吗?

【问题讨论】:

  • 我只使用过 send 和 isend,而你的这两个都是正确的。还有一点要添加到 isend:在您确定 irecv 也已通过等待/测试完成之前,您不得访问您收到的数据。
  • 有六个发送。常规、同步和缓冲,每个都有阻塞和非阻塞。同步发送对于调试和实现点对点屏障很有用。不应使用缓冲发送。它揭示了一个最好隐藏起来的植入概念。
  • 这里解释了不同的 MPI 发送模式:Immidiate vs synchronous communication in openmpi。 MPI 中有四种不同的阻塞发送类型,每种类型都有对应的非阻塞变体,总共 8 次 MPI 调用。请注意,阻塞并不意味着同步。
  • @HristoIliev 谢谢。我忘记了准备发送,这也是对实现细节的毫无意义的暴露。

标签: parallel-processing mpi


【解决方案1】:

是的 -- ISENDBSEND 之间的区别在于缓冲区。

ISEND 是就地执行的非阻塞发送。

BSEND 是一种非阻塞发送,可以缓冲在MPI_Buffer_Attach 指定的内存段中。

创建 BSEND 函数是为了让程序员能够准确指定数据被缓冲的位置。

请务必注意,与 ISEND 非常相似,您还必须使用 BSEND 缓冲区检查所有发送的状态,以免缓冲区溢出或覆盖待处理的 BSEND

【讨论】:

  • 我相信 BSEND 会阻塞直到数据被缓冲(即如果它被缓冲)。 IBSEND 是非阻塞的 @FrancescoN 。
猜你喜欢
  • 1970-01-01
  • 2013-07-12
  • 2022-01-22
  • 2013-12-08
  • 2013-12-10
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
相关资源
最近更新 更多