mpi4py 中的客户端-服务器编程

本文详细介绍了如何使用 mpi4py 在 Python 中实现客户端-服务器编程。内容涵盖服务器端如何打开端口并接受连接,客户端如何通过端口连接服务器,以及名字发布机制。还提供了具体的服务器端和客户端程序示例,帮助理解 MPI 中的并行服务进程和客户端之间的通信流程。
摘要由CSDN通过智能技术生成

本文从本人简书博客同步过来

上一篇中我们介绍了 mpi4py 中的 Op 对象,下面我们将介绍 mpi4py 中的客户端-服务器编程。

MPI 允许在不拥有相同通信子对象的两个进程组之间建立通信联系。该功能可以适用于很多场合,如:

  • 应用程序分两个部分,各自独立启动,但在运行时需要建立通信联系。
  • 某些可视化工具需要连接到正在运行的进程上。
  • 并行的 server 程序可能需要与多个并行的 client 建立连接。

MPI 提供了若干通信联系 API,这些通信联系 API 通过在两组进程之间建立组间通信子的方式来实现上述要求的功能。

在不共享通信子的两个进程组之间建立联系的操作是一种非对称的集合操作,需要强制一组进程进入监听状态来接收另一组进程的连接请求。MPI 称监听请求的一组进程为并行服务进程(parallel server),尝试连接服务组的进程称作客户端(client)。

由于没有预先存在的连接通道,因此客户端和服务器之间需要就一些关键的同步点达成一致。这就需要再有一个第三方机制来支持。MPI 为此设置了名字服务接口(可与外部域名服务兼容),通过一个可发布的端口号(port_name)供 server 端和 client 端建立连接。端口号可以是 TCP/IP 端口,也可能是系统使用任何其它协议定义的底层通信端口。MPI 通过名字发布机制还可把端口号与服务(service_name)绑定在一起,以 <port_name,service_name>格式发布。端口号、服务及其发布机制也是在灵活性和可移植性之间的一个折中。仅用端口号可保证最好的移植性,但由于需人工参与通知 client,因此使用不方便;使用名字发布机制进行端口号、服务绑定的方式在支持名字发布的版本中可取得最好的移植性;也可在应用程序里自定义端口发现机制,此种方法最灵活,但移植性最差。

服务器端

服务器端首先调用 MPI.Open_port 打开端口,然后调用 MPI.Intracomm.Accept 等待客户端连接。

MPI.Open_port(Info info=INFO_NULL)

打开一个端口,返回打开的端口名字。端口名字也可结合 info 参数传递给 MPI 环境,字符串大小可由 MPI.MAX_PORT_NAME 指定。如果传人的 info 对象不作关于打开端口的任何指示,则可设置其值为 MPI.INFO_NULL,表示使用默认的开端口机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值