【发布时间】:2016-09-01 17:12:01
【问题描述】:
我正在尝试了解 MPI 发送模式(send、bsend、ssend、rsend)的具体情况,我有下一个问题:
- 如果 MPI_Send 未初始化适当的 MPI_|i|recv 且消息大小不太大且未超出缓冲区大小,则 MPI_Send 使用一些缓冲区(否则,MPI_Send 将等待适当的接收)。我知道,这是真的(这里描述的这种情况:Deadlock with MPI)。
- MPI_Bsend 仅在未初始化适当的接收时才使用缓冲区(表示为 MPI_Buffer_attach 函数)。 是真的吗?
- MPI_Bsend 的缓冲区与 MPI_send 的缓冲区相同吗?
- MPI_Ssend 从不使用缓冲区。 是真的吗? 或 MPI_Ssend 的行为类似于 MPI_Send(缓冲区使用,如果消息大小未超过缓冲区大小)?
如果对我的问题的回答“这不是真的”,你能不能给我详细的回答和解释?
【问题讨论】:
-
你能清楚地重申你的问题,尤其是第一个问题吗?
-
你的问题在目前的状态下很难理解,但初步的答案是:1.它是依赖于实现的; 2. 不真实; 3. 不真实; 4. 同步发送永远不会被缓冲。
-
同步发送可以在目标进程上缓冲,作为一种减少延迟的方法,如果接收者相对于发送者晚了。哎呀,实现也可以合法地在发送过程中缓冲同步发送,这看起来很愚蠢。一个有意义的情况是在发送非连续类型时,使用只能处理连续缓冲区的网络。所以,序列化成一个缓冲区,然后在接收者匹配之前不要完成操作。
标签: mpi