并行多重网格求解器的自动调优技术解析
立即解锁
发布时间: 2025-10-24 00:56:37 阅读量: 18 订阅数: 22 AIGC 

高性能计算前沿探索
# 并行多重网格求解器的自动调优技术解析
## 1. 超级计算机系统概述
### 1.1 T2K/Tokyo 与 Cray XE6
T2K/Tokyo 和 Cray XE6 均基于 cc - NUMA 架构。整个 T2K/Tokyo 系统由 6,384 个节点、153,216 个核心和 212 TB 内存构成,总峰值性能达 1.28 PFLOPS。计算节点通过 Cray 的 Gemini 网络连接,该网络具有 3D 环形网络拓扑。在相关评估中,选取了系统的 128 个节点。Cray XE6 每个具有六个核心的芯片对应 T2K/Tokyo 一个具有四个核心的插槽。
### 1.2 富士通 FX10
富士通 FX10(Oakleaf - FX)是东京大学的 PRIMEHPC FX10 大规模并行超级计算机,峰值性能为 1.13 PFLOPS。它由 4,800 个配备 16 核(1.848 GHz)SPARC64™ IXfx 处理器的计算节点组成。整个系统包含 76,800 个核心和 154 TB 内存,节点通过名为“Tofu”的六维网格/环形互连连接。同样,在评估中选取了 128 个节点。在 SPARC64™ IXfx 上,16 个核心中的每个核心都能以统一的方式访问内存。
## 2. 目标应用的算法与实现
### 2.1 目标应用概述
目标应用是使用并行单元中心 3D 有限体积法(FVM)求解通过非均质多孔介质的地下水流动问题的泊松方程。每个网格中的水导率非均质分布通过顺序高斯算法计算,水导率的最小值和最大值分别为 10⁻⁵ 和 10⁵,平均值为 1.0,这种配置会产生条件数约为 10¹⁰ 的病态系数矩阵。每个网格为立方体,网格分布为有限差分类型的体素结构。
采用带多重网格预条件器的共轭梯度(CG)求解器(MGCG)来求解泊松方程。应用了一个非常简单的具有 V 循环的几何多重网格,对于结构化有限差分类型的体素,八个子网格以各向同性的方式形成一个父网格。最细网格的级别设为 1,级别从最细到最粗编号,在每个域(MPI 进程)中最粗级别网格的数量为 1。
多重网格在每个级别上的操作是并行进行的,但最粗级别上的操作通过收集所有进程的信息在单个 MPI 进程上执行。由于其鲁棒性,采用具有加法 Schwarz 域分解(ASDD)的 IC(0) 作为每个级别的平滑算子。3D 代码通过使用 MPI 进行分区域之间的通信进行并行化,在 OpenMP/MPI 混合并行编程模型中,对每个分区域应用 OpenMP 多线程。
为实现多重网格过程中 IC 操作的最佳并行性能,对每个域中的元素进行重新排序,采用了带循环多着色的反向 Cuthill - McKee(RCM)(CM - RCM),每个级别上的颜色数量设置为 2(CM - RCM(2))。同时,对 OpenMP/MPI 混合并行编程模型应用了以下三种针对 cc - NUMA 架构的优化过程:
- 适当的 NUMA 控制命令行,使用“--cpunodebind”和“--localalloc”,保持内存局部性,使每个线程能高效访问每个插槽上的内存。
- 首次触摸数据放置。
- 对内存进行连续“顺序”访问的重新排序。
此外,还应用了对粗网格求解器的优化。
### 2.2 弱缩放结果
在 T2K/Tokyo 上使用 16 到 8,192 个核心评估弱缩放性能,每个核心的有限体积网格数量为 262,144(= 64³),最大总问题规模为 2,147,483,648。应用了以下三种 OpenMP/MPI 混合并行编程模型,并与扁平 MPI 进行比较:
- 混合 4×4(HB 4×4):每个节点的四个插槽各有四个 OpenMP 线程,每个节点有四个 MPI 进程。
- 混合 8×2(HB 8×2):两个插槽对各有八个 OpenMP 线程,每个节点有两个 MPI 进程。
- 混合 16×1(HB 16×1):单个节点有十六个 OpenMP 线程,每个节点有一个 MPI 进程。
使用改进的粗网格求解器(C2),结果显示了所开发方法的可扩展性。在 8,192 个核心时,MGCG 求解器的收敛迭代次数和耗时如下表所示:
| 编程模型 | 迭代次数 | 耗时(秒) |
| ---- | ---- | ---- |
| 扁平 MPI | 70 | 35.7 |
| HB 4×4 | 71 | 28.4 |
| HB 8×2 | 72 | 32.8 |
| HB 16×1 | 72 | 34.4 |
MGCG 是一个内存受限的过程,内存访问性能至关重要。HB 4×4 的性能最佳,主要是因为每个进程的所有数据都保证在每个插槽的本地内存上,从而实现了最有效的内存访问。扁平 MPI 在核心数量较少时也比其他模型好,但它包含的 MPI 进程数量比 OpenMP/MPI 混合并行编程模型多,且粗网格求解器的问题规模更大,因此在核心数量较多时,由于通信开销和粗网格求解器的原因,其性能会变差。
### 2.3 强缩放结果与通信优化
在 T2K/Tokyo 上使用 16 到 1,024 个核心对固定规模为 33,554,432 个网格(= 512×256×256)的问题进行强缩放性能评估。基于使用原始粗网格求解器的 16 个核心的扁平 MPI 性能,在 1,024 个核心时,并行性能约为 16 个核心时的 60%。HB 16×1 的并行性能下降非常明显,在 1,024 个核心时,虽然收敛性更好,但速度比扁平 MPI 慢。
在并行多重网格过程中,各级别分区域之间会进行通信,通过 MPI 的点对点通信函数交换每个域边界的信息。在这个过程中,会进行数组到发送/接收缓冲区的复制操作。在原始的 OpenMP/MPI 混合并行编程模型代码中,这种内存复制操作通过 OpenMP 并行化,但在多重网格过程的较粗级别,如果循环长度较短且线程数量较多,OpenMP 的开销会很显著。如果循环长度较短,单线程操作可能比多线程操作更快。
通过评估在多重网格过程较粗级别从多线程切换到单线程的效果,发现一般情况下,“LEVcri = 2”在 1,024 个核心时为 HB 4×4、HB 8×2 和 HB 16×1 提供了最佳性能。优化后的 HB 16×1 比原始情况快 22%,优化后 HB 8×2 和 HB 16×1 在核心数量较多时性能有很大提升,在 1,024 个核心时,HB 8×2 甚至比 HB 4×4 更快,而核心数量较少时性能不变。
```mermaid
graph LR
A[开始] --> B[执行通信操作]
B --> C{循环长度短?}
C -- 是 --> D[单线程操
```
0
0
复制全文


