openmpi 中的即时通信与同步通信
Posted
技术标签:
【中文标题】openmpi 中的即时通信与同步通信【英文标题】:Immidiate vs synchronous communication in openmpi 【发布时间】:2015-01-08 23:19:15 【问题描述】:我对阻塞和非阻塞操作(在 OpenMPI 中)上下文中的同步 - 异步的概念有些混淆:
link 1
:MPI_Isend
不一定是异步的(所以它可以同步?)
link 2
:MPI_Isend()
和 MPI_Irecv()
是 MPI 的 ASYNCHRONOUS 通信原语。
我已经完成了关于 *** (asynchronous vs non-blocking) 的上一个同步 - 异步 - 阻塞 - 非阻塞问题,但对我没有帮助。 据我所知:
立即 (MPI_Isend
):方法返回并执行下一行 -> 非阻塞
标准/非即时 (MPI_Send
) :对于大型消息,它会阻塞直到传输完成
同步操作块 (http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html)
异步操作是非阻塞的 (http://www.cs.unc.edu/~dewan/242/s07/notes/ipc/node9.html)
那么为什么MPI_ISEND
可能会阻塞(链接 1)以及非阻塞(链接 2)?
即这里的异步和同步MPI_Isend
是什么意思?
MPI_Ssend
和 MPI_Issend
也会出现类似的混淆,因为 MPI_SSEND 中的 S 表示同步(或阻塞)并且:-
Immediate 也是非阻塞的, 那么,MPI_ISSEND 如何S同步并立即返回I?
我想在阻塞和非阻塞 OpenMPI 通信的上下文中异步和同步需要更清晰。 这方面的实际例子或类比将非常有用。
【问题讨论】:
我试图理解同样的事情,我最终为每种发送模式编写了示例,这里:gist.github.com/deborasetton/9f8597d85a4d314ace17。有时查看实际代码以了解差异很有用。 【参考方案1】:MPI 函数调用何时返回(阻塞与非阻塞)和相应操作何时完成(标准、同步、缓冲、就绪模式)之间存在区别。
非阻塞调用MPI_I...
立即返回,无论操作是否完成。操作在后台或异步继续。除非操作完成,否则阻塞调用不会返回。非阻塞操作由它们的句柄表示,可用于执行阻塞等待 (MPI_WAIT
) 或非阻塞测试 (MPI_TEST
) 以完成。
操作完成意味着提供的数据缓冲区不再被 MPI 访问,因此可以重复使用。发送缓冲区在消息全部放入网络后(包括部分消息可能仍由网络设备和/或驱动程序缓冲的情况)或已由MPI 实现。缓冲的情况不需要接收器已经发布了匹配的接收操作,因此不同步 - 接收可以在更晚的时间发布。除非接收者发布了接收操作,否则阻塞同步发送MPI_SSEND
不会返回,因此它会同步两个等级。非阻塞同步发送MPI_ISSEND
立即返回,但异步(后台)操作不会完成,除非接收方发布了匹配的接收。
阻塞操作相当于非阻塞操作,紧接着是等待。例如:
MPI_Ssend(buf, len, MPI_TYPE, dest, tag, MPI_COMM_WORLD);
相当于:
MPI_Request req;
MPI_Status status;
MPI_Issend(buf, len, MPI_TYPE, dest, tag, MPI_COMM_WORLD, &req);
MPI_Wait(&req, &status);
标准发送(MPI_SEND
/MPI_ISEND
)在消息构造完成后完成,作为第一个参数提供的数据缓冲区可能会被重用。没有同步保证 - 消息可能会在本地或远程缓冲。对于大多数实现,通常有一些大小阈值:达到该大小的消息会被缓冲,而较长的消息会同步发送。阈值取决于实现。
缓冲发送总是将消息缓冲到用户提供的中间缓冲区中,本质上执行更复杂的内存复制操作。阻塞版(MPI_BSEND
)和非阻塞版(MPI_IBSEND
)的区别在于,在所有消息数据都被缓冲之前,前者不会返回。
就绪发送是一种非常特殊的操作。只有在发送方发出发送调用时,目标排名已经发布了接收操作,它才会成功完成。通过消除执行某种握手的需要,它可能会减少通信延迟。
【讨论】:
作为后续,MPI_Send
是什么意思,因为您已经解释了MPI_SSend
和MPI_ISend
?
MPI_Send
是所谓的标准 发送操作——它要么缓冲消息,要么以与MPI_Ssend
相同的方式发送消息。与MPI_Ssend
不同,它不保证接收方已经开始接收消息,只保证消息已经进入MPI库,数据缓冲区可以进一步复用。以上是关于openmpi 中的即时通信与同步通信的主要内容,如果未能解决你的问题,请参考以下文章
毕设作品基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)免费下载