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_SsendMPI_Issend 也会出现类似的混淆,因为 MPI_SSEND 中的 S 表示同步(或阻塞)并且:-

MPI_Ssend:同步发送阻塞,直到远程进程接收到数据并确认 发件人收到, MPI_Issend:表示立即同步发送

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_SSendMPI_ISend MPI_Send 是所谓的标准 发送操作——它要么缓冲消息,要么以与MPI_Ssend 相同的方式发送消息。与MPI_Ssend不同,它不保证接收方已经开始接收消息,只保证消息已经进入MPI库,数据缓冲区可以进一步复用。

以上是关于openmpi 中的即时通信与同步通信的主要内容,如果未能解决你的问题,请参考以下文章

私有化即时通讯软件是什么

毕设作品基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)免费下载

论文参考ASP.NET基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)免费下载

开发汉澳即时通信网,2006年上线,QQ死期到了

iOS-Senior11-即时通信1(环境配置)

即时通信和实时通信的区别