首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MPI_Ssend/MPI_Issend是否使用系统缓冲区?

MPI_Ssend/MPI_Issend是否使用系统缓冲区?
EN

Stack Overflow用户
提问于 2020-08-02 09:16:46
回答 1查看 240关注 0票数 1

根据文档,MPI_SsendMPI_Issend是一个阻塞和非阻塞的发送操作,两者都是同步的。MPI规范指出,当接收方开始接收消息时,同步发送完成,然后更新发送缓冲区是安全的:

函数MPI_WAIT和MPI_TEST用于完成非阻塞通信。发送操作的完成表明,发送方现在可以自由地更新发送缓冲区中的位置(发送操作本身保持发送缓冲区的内容不变)。它并不表示消息已被接收,而是可能已被通信子系统缓冲。但是,如果使用同步模式send,则send操作的完成表明已启动匹配的接收,并且消息最终将通过此匹配的接收来接收。

考虑到同步发送在刚开始接收时被认为已经完成,我不确定以下几点:

  • MPI_SsendMPI_Issend发出发送完成信号时,可能只有一部分数据是从发送缓冲区读取的?例如,第一个N个字节已经发送和接收,而下一个M字节仍在发送。
  • 如何能够安全地修改数据直到整个消息被接收?这是否意味着必须将数据复制到系统缓冲区?据我所知,MPI标准允许使用系统缓冲区,但不需要它。此外,我从here上读到,MPI_Issend() 从来没有在本地缓冲数据。
EN

Stack Overflow用户

回答已采纳

发布于 2020-08-02 09:34:18

MPI_Ssend() (或与MPI_Issend()相关的MPI_Wait() )在以下情况下返回:

接收方已开始接收message

  • and,发送缓冲区可以重用

如果完全接收到消息,或者MPI库本地缓冲数据,则满足第二个条件。

我没有读到MPI标准禁止数据缓冲。

从标准来看,MPI 3.1 chpt 3.4页37

使用同步模式的发送,无论是否发布了匹配的接收,都可以启动。但是,只有在发送匹配的接收,并且接收操作已开始接收同步发送发送的消息时,发送才能成功完成。因此,同步发送的完成不仅意味着可以重用发送缓冲区,而且还表明接收方在执行过程中已经到达了某个点,即它已经开始执行匹配的接收。如果发送和接收都是阻塞操作,那么同步模式的使用提供了同步通信语义:在两个进程在通信时会合之前,通信在两端都不完成。在此模式下执行的发送是非本地的.

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63214310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档