MPICH2是由Argonne国家实验室维护的开源MPI库,是高性能计算领域使用最为广泛的MPI库之一。本文主要对其中Hydra进程管理框架进行了简要分析,希望可以为相关领域的学者提供帮助。在阅读本文前,读者可以首先参考其官方介绍:http://wiki.mpich.org/mpich/index.php/Hydra_Process_Management_Framework。
Hydra构建了进程管理框架,MPI进程需要经常与该框架进行交互,其交互的语言就是PMI标准,即进程管理接口(Process Management Interface)。因此要全面掌握该框架需要同时了解Hydra和客户端MPI进程两个部分,下面将分别从两个部分展开分析。需要注意的是,文中涉及的内容均以发稿前最新的mpich3.1为准,且使用PMI-1接口。
1. Hydra 进程管理框架
下图是mpich wiki给出的Hydra结构图:
从进程拓扑上看,Hydra由一个运行在服务器上的作业加载程序JLE(Job Launching Executable)和多个运行在不同计算节点上的进程管理代理PMP(Process Manager Proxy)组成。之所以称为PMP是因为它基本上具备了PM(Proxy Manager)的所有功能,代理PM并运行在计算节点上负责具体维护本节点上所有进程的状态。换言之,包括MPI进程在内系统进程拓扑是一个倒树状结构,JLE处于树根,负责在各计算节点上创建进程PMP;PMP在本节点上创建一个或多个MPI进程。JLE对应的执行程序就是我们经常使用的作业加载程序mpiexec.hydra;PMP为hydra_pmi_proxy。
在介绍进程拓扑结构后,我们来看看上图中主要功能模块的作用,按照自底向上的顺序:
1、I/O Demux Engine
Demux的字面意思是“解复用器”。顾名思义,Demux 本质上一个消息管理系统,可以监听多个文件描述符的状态,当文件描述符接收到消息后,回调注册的处理函数。
Demux相关的代码位于src\pm\hydra\tools\demux目录下;其主要函数如下所示:
1)HYDT_dmx_init:根据用户选项指定wait_for_event为HYDT_dmxu_poll_wait_for_event或HYDT_dmxu_select_wait_for_event。