《并行计算的编程模型》一1.5 非阻塞式通信

简介: 本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 非阻塞式通信

非阻塞式通信方式是MPI的重要特性之一。非阻塞式通信初始化后,不需等待通信完成后再进行操作。该特性具有两个优势:一是非阻塞式通信实现了通信与其他计算等操作异步执行;二是针对复杂的通信模式,不需要严格的通信顺序和内存空间管理。为了更好地理解第二个优势,执行如下代码,其中partner是其他进程的进程号。

MPI_Send需要将buf中的1亿个整数发送到partner进程上。若发送操作未申请到内存,程序将处于等待状态,直到内存申请成功。同理,调用MPI_Recv等接收操作后,也需要等待内存申请成功。在本程序示例中,两个进程都先调用MPI_Send执行发送操作,所以程序有可能永远处于等待状态。该程序运行是不安全的,程序能否正确执行依赖于内存申请情况以及发送和接收操作的合理匹配。
针对死锁的问题,经典的解决办法如图1-4所示,screenshot
通过改变发送和接收顺序消除进程间等待。该方法仅适用于通信模式简单或者程序编译时通信方式已明确的情况下。复杂的通信模式有时在程序运行时才决定通信方式,从而不适用该方法。针对复杂的通信模式,解决方法是在通信结束前MPI通信操作可以返回,无需等待通信过程结束。在MPI中,这种通信方式称之为非阻塞式通信,通常在函数名称前加入字母“I”,例如MPI_Send的非阻塞发送函数名为MPI_Isend。非阻塞式通信方式的参数设置类似于阻塞式通信方式。非阻塞比阻塞式通信方式增加了一个输出参数MPI_Request。MPI_Request是用于查询操作状态和等待操作完成的句柄。使用非阻塞式通信方式进行发送和接收的程序实例如图1-5所示。用户需要调用一个测试或者等待函数完成通信操作。MPI_Wait函数会阻塞程序执行,直到通信操作完成。MPI_Test函数不会阻塞程序执行,该函数执行后立即返回,用于测试通信操作是否完成。同时,MPI提供组测试和组等待函数,用于同时测试和等待多个通信操作,例如图1-5中MPI_Waitall函数。
在很多应用程序中,需要重复相同的通信方式。针对重复的通信需求,MPI提供重复非阻塞式通信方式,例如通过使用MPI_Send_init和MPI_Recv_init函数实现重复通信初始化。在重复通信模式中,通信操作初始化后并没有启动消息通信,消息通信由MPI_Start函数触发。如果消息通信结束,例如调用MPI_Wait后返回结果,可通过调用MPI_Start再次启动消息通信。当不再需要进行消息通信时,通过调用MPI_Request_free释放通信对象。

screenshot

相关文章
用户态和内核态是如何切换的?
【10月更文挑战第28天】用户态和内核态的切换是通过系统调用指令、异常和中断等机制来实现的。这些机制确保了应用程序能够在需要时请求内核提供的服务,同时也保证了内核能够对系统资源进行有效的管理和保护,维护系统的稳定性和安全性。通过准确地保存和恢复上下文信息,实现了用户态和内核态之间的无缝切换,为计算机系统的正常运行提供了有力保障。
|
编译器 开发工具 数据安全/隐私保护
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
本文提供了一个关于如何在Gitee上进行多人协作和版本控制的详细教程,包括新建和初始化仓库、克隆仓库、邀请好友共同管理仓库以及注意事项,旨在帮助用户顺利进行代码协作开发。
2602 0
Git——多人协作/版本控制,在一个gitee仓库下开发(Gitee版教程)手把手教学,包好用的!
|
域名解析 缓存 网络协议
【域名解析DNS专栏】深入理解DNS根服务器与顶级域服务器
【5月更文挑战第24天】DNS的根服务器和顶级域服务器在域名解析中起关键作用。根服务器是核心,负责提供顶级域服务器引用,维护顶级域列表;顶级域服务器管理如.com的域名,处理二级域名解析和管理。这两者影响解析速度、可靠性和安全性。了解它们有助于优化DNS配置和提升网站访问体验。
1606 1
【域名解析DNS专栏】深入理解DNS根服务器与顶级域服务器
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
1744 1
|
存储 C++
gRPC 四模式之 双向流RPC模式
gRPC 四模式之 双向流RPC模式
1148 0
|
算法 图形学
【计算机图形学】实验一 DDA算法、Bresenham算法
【计算机图形学】实验一 DDA算法、Bresenham算法
1262 3
|
前端开发 索引
这款开源的 Markdown 编辑器,实在太好用了!
今天,小 D 给大家分享一款非常好用的微信 Markdown 编辑器 md[1]。
917 0
这款开源的 Markdown 编辑器,实在太好用了!
|
数据库
这份菜单能修改吗;这份菜单可以修改;菜名和价格的展示;菜单的信息量好大
某平台实训 python这份菜单能修改吗;这份菜单可以修改;菜名和价格的展示;菜单的信息量好大
|
算法 机器学习/深度学习 数据处理
【玩转数据系列三】利用图算法实现金融行业风控
本文将针对阿里云平台上图算法模块来进行实验。图算法一般被用来解决关系网状的业务场景。与常规的结构化数据不同,图算法需要把数据整理成首尾相连的关系图谱。图算法更多的是考虑边和点的概念。阿里云机器学习平台上提供了丰富的图算法组件,包括K-Core、最大联通子图、标签传播聚类等。
13723 1