基于YML和XcalableMP的多SPMD编程模型
发布时间: 2025-08-17 01:11:23 阅读量: 1 订阅数: 2 

### 基于YML和XcalableMP的多SPMD编程模型
#### 1. 引言
从千万亿次级、后千万亿次级到百亿亿次级,超级计算机正朝着更大规模、更高密度和更复杂的方向发展。大量的核心将以多层次的层次结构进行排列,例如节点内的核心组、紧密相连的节点组或集群,以及集群的集群。然而,现有的编程模型,如简单的单程序多数据(SPMD)、OpenMP + MPI等,难以充分利用这些系统的性能。因此,采用跨不同架构级别的多种编程模型变得至关重要。
为了充分发挥这些系统的性能,提出了一种新的编程模型——多SPMD(mSPMD)编程模型。在这个模型中,多个MPI程序和OpenMP + MPI程序在工作流编程的协调下协同工作。为了开发工作流中的mSPMD组件,支持使用XcalableMP(XMP)。下面将详细介绍mSPMD编程模型以及为实现该模型而构建的开发和执行环境。
#### 2. 背景:后千万亿次级和百亿亿次级计算的国际合作
有两个重要的国际合作项目对mSPMD编程模型的规划、实现和评估起到了关键作用。
- **FP3C项目**:2010年9月至2013年3月期间开展的“后千万亿次级计算的框架和编程”(FP3C)项目,旨在探索未来超级计算机的高效编程方法。这是一个法日联合研究项目,有十多所大学和研究机构参与。该项目的重点是为现有和未来的超级计算机开发新的编程范式、语言、方法和系统。mSPMD编程模型正是在这个项目中被提出的,并且许多重要特性也在项目期间得到了实现。
- **SPPEXA项目**:“百亿亿次级计算软件”(SPPEXA)优先项目在2013 - 2015年(第一阶段)和2016 - 2018年(第二阶段)开展,致力于高性能计算(HPC)软件各个方面的基础研究。其中,“YML和XMP程序的MUST正确性检查”(MYX)项目被选为SPPEXA的第二阶段项目。该项目将德国开发的MUST、法国开发的YML和日本开发的XMP相结合,旨在研究可扩展正确性检查方法的应用。
#### 3. 多SPMD编程模型
##### 3.1 概述
大多数编程模型考虑的是MPI + X(如MPI + OpenMP或MPI + X1 + X2 · · · )的组合,而mSPMD编程模型则采用X1 + MPI(或XMP) + X2的形式。在这个模型中,MPI程序和OpenMP + MPI程序在工作流编程模型的框架下协同工作。换句话说,工作流中的任务是用XMP、MPI或它们与OpenMP的混合编写的并行程序。
在预期的目标系统中,通常存在非均匀内存访问(NUMA)、通用多核CPU和GPU等加速器。为了充分利用这些系统的性能,采用了以下编程模型:
- 在节点内或核心组内,使用共享内存编程模型。
- 在加速器上,使用通用图形处理单元(GPGPU)编程。
- 在节点组之间,采用分布式并行编程模型。
- 在这些节点组之间,使用工作流编程模型来管理和控制多个分布式并行程序以及分布式并行和共享编程模型的混合程序。
为了实现这个框架,支持使用XMP来描述工作流中的分布式并行程序,同时也支持MPI,因为它是分布式并行编程的事实上的标准。对于共享编程和GPGPU编程,除了XMP + OpenMP、MPI + OpenMP、MPI + GPGPU(如CUDA、OpenACC)之外,还支持一个名为StarPU的运行时库。StarPU是一个用于混合架构的任务编程库,它使得能够以统一的方式实现异构应用程序。此外,XMP还提供了一个扩展,支持在CPU核心和GPU之间进行工作共享。而YML则作为科学工作流的开发和执行环境,用于工作流的执行。
##### 3.2 YML
YML是一个用于科学工作流的编程环境,最初是为了在网格和点对点(P2P)环境中执行工作流应用程序而开发的。它提供了以下软件组件:
- **组件(任务)生成器**:根据组件的“抽象”和“实现”描述生成可执行程序。
- **工作流编译器**:支持一种名为YvetteML的原创工作流语言,该语言允许轻松描述任务之间的依赖关系。工作流编译器将用YvetteML编写的工作流编译成任务的有向无环图(DAG)。
- **工作流调度器**:解释DAG以执行定义的工作流。根据可用的系统,调度器会使用不同的中间件,如用于P2P的XtremWeb和用于网格的OmniRPC。
需要注意的是,原始的YML并不支持XMP和MPI,这些支持是通过扩展YML和中间件实现的。
##### 3.3 OmniRPC - MPI
YML设计用于在各种环境中执行工作流应用程序,如集群、P2P和单处理器环境。在执行过程中,YML工作流调度器会根据环境动态加载后端库,每个后端库会调用中间件库中定义的API。例如,在网格环境中,需要加载与OmniRPC中间件库链接的OmniRPC后端。
OmniRPC是一个用于集群系统的网格远程过程调用(RPC)工具,支持主 - 从编程模型,通过exec、rsh或ssh执行远程串行程序。为了实现mSPMD编程模型,实现了一个MPI后端,并将OmniRPC扩展为OmniRPC - MPI,以适应大规模集群环境。OmniRPC - MPI库提供了以下功能:
- 在指定数量的节点上调用远程程序(工作程序)。
- 实现工作流调度器与远程程序之间的通信:
- 调度器向远程程序发送执行特定任务的请求。
- 调度器监听通信器并接收远程程序的终止消息。
- 管理远程程序和计算资源。
#### 4. mSPMD编程环境中的应用开发
##### 4.1 任务生成器
YML组件生成器经过扩展,以适应mSPMD编程环境。它的工作流程如下:
1. 接收实现源代码,例如图3所示的代码。
2. 结合实现和抽象源代码,生成几个中间文件:
- 一个XMP源代码,提取用户定义的任务过程本身。
- 一个接口定义文件,包含用于与工作流调度器通信的一些通信函数。
3. 调用XMP编译器将XMP源代码转换为带有XMP运行时库调用的C源代码,然后使用C编译器编译该C源代码。
0
0
相关推荐








