当前位置: 首页 > news >正文

并行程序设计基础——动态进程管理

       

目录

一、组间通信域

二、动态创建新的MPI进程

1、MPI_COMM_SPAWN

2、MPI_COMM_GET_PARENT

3、MPI_COMM_SPAWN_MULTIPLE

三、独立进程间的通信

1、MPI_OPEN_PORT

2、MPI_COMM_ACCEPT

3、MPI_CLOSE_PORT

4、MPI_COMM_CONNECT

5、MPI_COMM_DISCONNECT

6、MPI_PUBLISH_NAME

7、MPI_LOOKUP_NAME

8、MPI_UNPUBLISH_NAME

四、基于socket的通信

五、小结


        从本节我们开始介绍MPI-2的新特征,相比MPI-1,MPI-2增加了动态进程管理、远程存储访问和并行文件I/O。

         MPI-1版本中,一个MPI程序启动后,直到该MPI程序结束,进程的个数都是固定的,在程序运行过程中是不可能动态改变的。在MPI-2中,允许在程序运行过程中动态改变进程的数目,同时提供了动态进程创建和管理的各种调用。本节开始我们将介绍各种动态改变进程数目的方法和对动态进程的使用。

一、组间通信域

        在MPI-1中进程如何启动是在MPI程序之外定义的,当MPI_Init返回后进程个数是固定的。PVM的进程管理,一类重要的消息传递应用,如客户/服务系统和任务农场任务,需要对进程进行动态控制。这样的扩展可以用MPI自身来写并行计算环境。在MPI-1中虽然提出了组间通信域的概念,但真正使用组间通信域的地方,却是MPI-2提出的动态进程管理。

        在MPI-2中,对点到点通信和组通信,都给出了使用组间通信域时的确切含义。在语法上,不管是使用组内还是组间通信域,两者没有任何区别,但语义不同。

        对于构成组间通信域的两个进程组,调用进程把自己所在的组看作是本地组,而把另一个组看作远地组。使用组间通信域的一个特点是本地组进程发送的数据被远地组进程接收,而本地组接收的数据必然来自远地组。

        在使用组间通信域的点到点通信中,发送语句指定的目的进程是远地组中的进程编号,接收进程指出的源进程编号也是远地组的进程编号。

        对于组通信,如果使用组间通信域,则其含义分不同的形式而有所不同。对于多对多通信,本地进程组的所有进程向远地进程组的所有进程发送数据,同时本地进程组的所有进程从远地进程组的所有进程接收数据。

        对于组间通信域上的一对多操作,本地组的ROOT进程发送消息,远地组的所有进程都接收;反之,对于组间通信域上的多对一操作,本地组的ROOT进程接收消息,而远地组的所有进程都向本地组的ROOT进程发送消息。

        对于本地组的非ROOT进程,它们也要执行此组调用,不过不执行通信操作,本地组的ROOT进程和非ROOT进程是通过在指定ROOT进程时区别开来的,对于ROOT进程,在参数为ROOT进程标识号的位置上写上MPI_ROOT,对于非ROOT进程,在参数为ROOT进程标识号的位置写上MPI_PROC_NULL,对于远地组的进程,则写上本地组ROOT进程的标识号。这是和组内通信域的组通信不同的地方。

        利用组间通信域进行通信主要有三种方式:①通过动态创建新的进程,父进程和子进程形成的组间通信域上的通信;②两个没有父子关系的进程间建立组间通信域进行通信;③将socket通信转换为组间通信域上的通信。

二、动态创建新的MPI进程

        MPI-2的动态进程的创建是指从已经存在的一个组间通信域进程组的进程,派生出若干个进程,形成一个新的进程组,原来的进程组相对于新派生的进程组称为父进程组,而新派生的进程组相对于原来的进程组称为子进程组。父子进程组属于不同的通信域,它们直接的通信是通过父子进程组的通信域形成的组间通信域来进行的。

1、MPI_COMM_SPAWN

        MPI派生新的进程是通过调用MPI_COMM_SPAWN实现的。在MPI_COMM_SPAWN中需要指出将派生的进程对应的可执行程序的名字command,传递给可执行程序的参数argv,将要派生的进程的最大个数maxprocs,以及可能的运行时信息info。对于上述这些参数,不需要MPI每个进程都进行解释,只需要提供一个解释进程的标识号ROOT即可,由ROOT进程

http://www.lryc.cn/news/430678.html

相关文章:

  • C# 字符串(String)使用教程
  • django之ForeignKey、OneToOneField 和 ManyToManyField
  • java.lang.IndexOutOfBoundsException: setSpan ( 0...x ) ends beyond length X
  • 技术进展:CH-90树脂在去除硫酸钠柠檬酸钠溶液中铁锰离子上的应用
  • 录屏时摄像头无法识别?如何录屏时打开摄像头,解决方案及录屏软件推荐
  • 达梦数据库-DM8 企业版安装指南
  • 心脑血管科董田林医生:心律失常患者饮食,调养秘诀,助你找回健康心跳
  • 期权杂记(一)
  • 【MATLAB源码-第163期】基于matlab的BPSK+瑞利(rayleigh)信道下有无波束成形误码率对比仿真。
  • 【数据分享】2000-2022年我国省市县三级的逐日O3数据(免费获取\excel\shp格式)
  • Python 的http.server库详细介绍
  • 使用ffmpeg在视频中绘制矩形区域
  • 计算机,数学,AI在社会模拟中的应用
  • 【数据结构】排序算法系列——插入排序(附源码+图解)
  • TOMATO靶机漏洞复现
  • 高基数 GroupBy 在 SLS SQL 中的查询加速
  • TP5队列和TP5 使用redis 等相关
  • 【R语言速通】1.数据类型
  • 【C++设计模式】(三)创建型模式:单例模式
  • 基于Android Studio的行程记录APK开发指南(三)---界面设计及两种方法获取用户位置
  • 大厂趋势:低代码不等于低能力,赋能高效开发新纪元
  • CentOS全面停服,国产化提速,央国企信创即时通讯/协同门户如何选型?
  • 如何确定Kubernetes是在采用哪种方式进行部署的?
  • 【PostgreSQL】地理空间数据的数据类型定义、索引优化、查询优化策略
  • RocketMQ广播消费消息
  • C#基础(2)枚举
  • Linux之MySQL日志
  • Redis集群模式—主从集群、哨兵集群、分片集群
  • 并发工具类(二):CyclicBarrier
  • Spring Cloud全解析:负载均衡之Ribbon简介