MPI SEND/MPI Issend是否使用系统缓冲区?
根据文档,MPI SEND/MPI Issend是否使用系统缓冲区?,mpi,Mpi,根据文档,MPI_Ssend和MPI_Issend是一种阻塞和非阻塞发送操作,两者都是同步的。MPI规范规定,同步发送在接收方开始接收消息时完成,之后可以安全地更新发送缓冲区: 函数MPI_WAIT和MPI_TEST用于完成非阻塞 沟通。发送操作的完成表明 发送方现在可以自由更新发送缓冲区中的位置( 发送操作本身保留发送缓冲区的内容 不变)。它并不表示已收到该消息, 相反,它可能已被通信子系统缓冲。 但是,如果使用了同步模式发送,则 发送操作表示已启动匹配的接收,并且 消息最终将由此匹配接收接收
MPI_Ssend
和MPI_Issend
是一种阻塞和非阻塞发送操作,两者都是同步的。MPI规范规定,同步发送在接收方开始接收消息时完成,之后可以安全地更新发送缓冲区:
函数MPI_WAIT和MPI_TEST用于完成非阻塞
沟通。发送操作的完成表明
发送方现在可以自由更新发送缓冲区中的位置(
发送操作本身保留发送缓冲区的内容
不变)。它并不表示已收到该消息,
相反,它可能已被通信子系统缓冲。
但是,如果使用了同步模式发送,则
发送操作表示已启动匹配的接收,并且
消息最终将由此匹配接收接收
请记住,同步发送在刚开始接收时被视为已完成,我不确定以下几点:
- 当发送完成的信号发出时,
或MPI\u Ssend
可能只从发送缓冲区读取了部分数据?例如,前N个字节已发送和接收,而下M个字节仍在发送MPI\u Issend
- 在收到整个消息之前,调用者如何安全地修改数据?这是否意味着数据必须复制到系统缓冲区?据我所知,MPI标准允许使用系统缓冲区,但不需要它。此外,我从中了解到,
从不在本地缓冲数据MPI_Issend()
MPI_Ssend()
(或与MPI_Issend()
相关的MPI_Wait()
)在以下情况下返回: