XcalableMP2.0的性能评估与全局任务并行编程
发布时间: 2025-08-17 01:11:24 阅读量: 1 订阅数: 2 

# XcalableMP 2.0 的性能评估与全局任务并行编程
## 1. XcalableMP 在富岳超级计算机上的性能
富岳超级计算机的多核处理器和新型 Tofu - D 互连技术提升了 XcalableMP 的性能。下面从全局视图编程和局部视图编程两方面进行性能评估。
### 1.1 XcalableMP 全局视图编程性能
为评估 XcalableMP 全局视图编程在富岳上的性能,我们使用了 IMPACT - 3D 程序,最多使用 512 个节点。程序采用混合 XMP - OpenMP 并行编程:一个 XMP 节点分配给一个物理节点,每个节点内运行 48 个 OpenMP 线程。问题规模为 512 × 512 × 512,采用三维块分布,编译选项为“ - Kfast”。
与 MPI 版本相比,富岳上的程序具有良好的可扩展性,且性能更优,这得益于模板计算中优化的 XMP 运行时通信机制。
### 1.2 XcalableMP 局部视图编程性能
富岳拥有定制的互连技术 Tofu - D,支持硬件 RDMA 操作。我们实现了 XMP 运行时库,利用 Tofu - D 进行 XMP 局部视图编程的单边通信。
为评估 XMP 局部视图编程性能,我们使用了 CCS QCD 和 NTChem - MINI 这两个来自 Fiber Miniapp Suite 的迷你应用程序。
- **CCS QCD**:八个 XMP 节点分配给一个物理节点,以扁平 XMP 模式运行。目标数据为 Class 2 (32 × 32 × 32 × 32)(强缩放),编译选项为“ - Kfast, zfill, simd = 2”,计时区域为内置计时功能中“Clover + Clover_inv Performance”和“BiCGStab (CPU: double precision) Performance”的总和。与 K 计算机相比,XMP 版本的性能与 MPI 版本相近。K 计算机上 XMP 版本性能下降的原因是用于通信缓冲区的可分配协同数组的分配开销,使用 uTofu 通信层可消除此开销。
- **NTChem - MINI**:一个 XMP 节点分配给一个物理节点,节点内使用 48 个核心执行 BLAS 函数。目标数据为 taxol(强缩放),编译选项为“ - Kfast, simd = 2”,计时区域为内置计时功能的“RIMP2_Driver”。XMP 版本的性能与原始 MPI 版本几乎相同。
|应用程序|节点分配|目标数据|编译选项|计时区域|
| ---- | ---- | ---- | ---- | ---- |
|CCS QCD|八个 XMP 节点/物理节点|Class 2 (32 × 32 × 32 × 32)| - Kfast, zfill, simd = 2|Clover + Clover_inv Performance + BiCGStab (CPU: double precision) Performance|
|NTChem - MINI|一个 XMP 节点/物理节点|taxol| - Kfast, simd = 2|RIMP2_Driver|
## 2. 全局任务并行编程
### 2.1 背景与动机
现代多核处理器集群广泛应用,如 Intel Xeon Phi。OpenMP 作为共享内存编程模型被广泛用于多核处理器编程,但大多数 OpenMP 程序使用循环工作共享结构,涉及全局同步。随着处理器核心数增加,工作共享的全局同步成本增大,核心间负载不平衡导致性能下降。OpenMP 4.0 中基于任务依赖的任务并行编程是解决此问题的有效方法,它通过用户指定的数据依赖实现细粒度的任务间同步,避免全局同步。
我们希望将任务并行编程模型扩展到 XcalableMP 的 PGAS 模型,以支持分布式内存系统。除了消除昂贵的全局同步,还期望实现通信和计算的重叠。为此,我们为 XMP 2.0 提出了全局任务并行编程。
### 2.2 OpenMP 和 XMP 任务指令
OpenMP 最初专注于循环工作共享,OpenMP 3.0 引入了任务并行编程的任务指令。OpenMP 4.0 支持任务指令的 depend 子句,用于指定数据依赖类型(in、out 和 inout),可减少线程团队的全局同步。
为在 XMP 中支持任务并行编程,XMP 2.0 提出了 tasklet 指令。其语法如下:
- **tasklet 指令**:为关联的结构化块在 on 子句指定的节点上生成一个任务。如果没有任务依赖,任务将由指定节点上的任意线程调度并立即执行;若有依赖,任务执行将推迟到所有依赖解决。当任务被 tasklets 指令包围时会有上述行为;若未被包围,则在指定节点上顺序执行。tasklet 指令支持多个描述任务依赖的子句,in、out 和 inout 子句表示节点内的任务依赖,其行为与 OpenMP 任务的 depend 子句相同。
- **taskletwait 指令**:等待每个节点上生成的任务完成。由于该指令不涉及屏障同步,为确保所有节点上的任务都完成,还需要 XMP 中的 barrier 指令。
0
0
相关推荐









