从零到实战:鲲鹏平台 HPC 技术栈与并行计算

从零到实战:鲲鹏平台 HPC 技术栈与并行计算入门实践

一、背景:为什么在鲲鹏平台上进行 HPC 开发

高性能计算(High Performance Computing,HPC)长期以来广泛应用于科学计算、工程仿真、气象预测、能源勘探等领域,其核心目标是通过并行计算充分释放硬件算力,缩短计算时间、提升计算规模

随着 ARM 架构在服务器领域的成熟,基于鲲鹏处理器的计算平台逐步在 HPC 场景中落地。相比传统 x86 架构,鲲鹏平台在能效比、核心规模、生态开放性等方面具备非常明显的优势,配合 openEuler 操作系统与成熟的并行计算软件栈,目前已经可以支撑完整的 HPC 应用开发与运行。

本文将从我们开发者视角出发,围绕鲲鹏平台,介绍一套可运行、可验证的 HPC 技术栈,并通过具体并行算例,展示如何在鲲鹏环境下完成并行计算实践与性能验证。


鲲鹏 vs x86 HPC 性能对比说明

在 HPC 场景中,处理器的核心数、单核性能和能效比是关键指标。下表对比了鲲鹏 920 系列与常见 x86 HPC 处理器(如 Intel Xeon 系列)的部分关键参数和性能特征(数据来源:华为官方资料及公开 benchmark)。

指标鲲鹏 920Intel Xeon Gold 6338
核心数64 核32 核
线程数12864
基础频率2.6 GHz2.0 GHz
单核浮点性能(FP64)~60 GFLOPS~45 GFLOPS
单芯片总浮点性能(FP64)~3.8 TFLOPS~2.3 TFLOPS
功耗180 W205 W
架构ARMv8 64-bitx86-64

对比

  1. 核心与线程数量优势
    1. 鲲鹏单芯片核心数达到 64 核,线程数 128,几乎是同级 x86 芯片的两倍,可在多线程任务中显著提升并行吞吐能力。
  2. **单核性能接近 **x86
    1. 尽管 ARM 架构频率略低,但单核浮点性能达到 60 GFLOPS,足以支撑 HPC 应用。
  3. 整体浮点性能优势
    1. 高核心数 × 高能效比,使得鲲鹏在单机多核 HPC 任务中总浮点性能远超同级 x86 CPU,尤其适合科学计算、工程仿真和大规模数据处理。

二、鲲鹏 HPC 技术栈概览

在鲲鹏平台上进行 HPC 开发,整体技术栈可以分为以下几层:

2.1 硬件与操作系统

  • 处理器架构:鲲鹏 920 处理器(或其他鲲鹏系列)
  • 操作系统:openEuler(服务器级 Linux 发行版)
  • 计算特征
    • 多核心设计
    • NUMA 架构
    • 适合大规模并行计算

对于 HPC 应用而言,核心数、内存带宽以及 NUMA 亲和性,往往比单核频率更加关键。


2.2 编译与并行软件栈

在鲲鹏平台上,常用的 HPC 软件栈包括:

  • 编译器
    • GCC(支持 ARM 架构)
  • 并行编程模型
    • MPI(进程级并行)
    • OpenMP(线程级并行)
  • 运行环境
    • OpenMPI
    • 系统自带运行时库

这一套组合与传统 x86 HPC 平台高度一致,极大降低了应用迁移成本。


2.3 并行计算模型简介

在实际 HPC 开发中,最常见的两种并行方式是:

  • MPI(Message Passing Interface)
    • 适用于分布式或多进程并行
    • 通过显式通信完成数据交换
  • OpenMP
    • 适用于共享内存并行
    • 通过编译指令实现线程级并行

在鲲鹏平台上,这两种模型都能稳定运行,并且可以根据应用规模灵活选择。


三、实验环境说明

本文实验环境如下:

  • 操作系统:openEuler 22.03 LTS
  • 处理器:鲲鹏多核 CPU
  • 编译器:GCC
  • MPI 实现:OpenMPI

所有实验均在单机多核环境下完成,不依赖真实集群,便于读者复现。

实验环境与系统信息截图(lscpu / uname -a 输出)


四、实战一:基于 Hyper MPI 的鲲鹏平台并行通信性能对比实践

在 HPC 应用中,并行通信效率往往直接决定了整体性能上限。虽然通用 MPI 实现(如 OpenMPI)已经能够在多种体系结构上稳定运行,但在多核规模大、NUMA 架构明显的处理器平台上,是否能够充分感知硬件拓扑并进行针对性优化,仍然会对并行效率产生重要影响。

鲲鹏处理器具备高核心数与多 NUMA 节点的典型特征,为并行计算提供了充足的算力资源。在此背景下,鲲鹏生态中引入了针对 ARM 架构与鲲鹏硬件特性进行优化的 MPI 实现 —— Hyper MPI。本节将在相同硬件与算例条件下,对 OpenMPI 与 Hyper MPI 的并行计算性能进行对比分析,以验证鲲鹏平台在并行通信层面的工程实践效果。


4.1 Hyper MPI 技术定位与平台特性

Hyper MPI 是面向鲲鹏处理器平台优化的 MPI 实现,其设计目标并非替代标准 MPI 接口,而是在完全兼容 MPI 编程模型的前提下,进一步提升并行通信在 ARM 多核平台上的执行效率。

相较于通用 MPI 实现,Hyper MPI 更加注重以下方面:

  • 硬件拓扑感知能力:能够更充分识别鲲鹏处理器的多核心与 NUMA 架构特征
  • 进程调度与绑定优化:减少进程跨 NUMA 节点访问带来的内存与通信开销
  • 并行通信路径优化:在中高并发场景下改善同步与通信效率

对于需要在鲲鹏平台上部署 HPC 应用的开发者而言,Hyper MPI 提供了一种无需修改应用代码、即可获得并行通信性能提升的实现路径,具备较高的工程实践价值。


4.2 对比实验设计说明

为保证对比结果的客观性与可复现性,本文采用如下实验设计原则:

  • 相同硬件环境:同一台鲲鹏服务器
  • 相同算例代码:使用同一份 MPI 并行矩阵计算程序
  • 相同进程规模:通过调整进程数观察并行扩展趋势
  • 仅更换 MPI 实现:分别使用 OpenMPI 与 Hyper MPI 进行运行

通过上述方式,可以将性能差异主要归因于 MPI 实现本身在鲲鹏平台上的适配与优化效果,而非其他系统或算法因素。


4.3 并行矩阵计算算例说明

本节选用矩阵计算作为对比算例,其原因在于该类负载具有以下典型 HPC 特征:

  • 计算密集型,能够充分利用 CPU 算力
  • 数据规模可控,便于调整并行粒度
  • 并行划分逻辑清晰,易于分析通信与计算开销

在算例实现中,采用 MPI 进行进程级并行划分,将矩阵按行分配至不同进程,各进程独立完成局部计算后,再通过 MPI 通信机制进行结果汇总。该算例在保持实现简洁的同时,能够有效反映并行通信在整体执行时间中的影响。


4.4 OpenMPI 与 Hyper MPI 的运行方式

在实验过程中,算例程序保持完全一致,仅在运行阶段切换不同的 MPI 实现。

使用 OpenMPI 运行示例:

mpirun -np 1 ./mpi_matmul ``mpirun -np 2 ./mpi_matmul ``mpirun -np 4 ./mpi_matmul ``mpirun -np 8 ./mpi_matmul

使用 Hyper MPI 运行示例:

hypermpirun -np 1 ./mpi_matmul ``hypermpirun -np 2 ./mpi_matmul ``hypermpirun -np 4 ./mpi_matmul ``hypermpirun -np 8 ./mpi_matmul

通过逐步增加进程数,可以观察不同 MPI 实现在并行扩展过程中的性能变化趋势。


4.5 OpenMPI 与 Hyper MPI 性能对比结果

4.5.1 执行时间对比

在完成不同进程规模下的测试后,记录程序的整体执行时间,并对结果进行对比分析。测试结果表明,在相同算例条件下,Hyper MPI 在鲲鹏平台上的执行时间整体低于 OpenMPI,且随着进程数增加,其性能优势逐步显现。

【OpenMPI 与 Hyper MPI 执行时间对比折线图】

从趋势上可以观察到:

  • 在低并发场景下,两种 MPI 实现的性能差异相对有限
  • 随着进程数增加,通信与同步开销逐渐成为性能瓶颈
  • Hyper MPI 在中高并发场景下表现出更好的并行扩展性

这说明在鲲鹏多核平台上,针对硬件特性进行优化的 MPI 实现,能够更有效地降低并行通信带来的性能损耗。


4.5.2 并行效率对比

在 HPC 并行计算中,并行效率(Efficiency)一般来说定义为:

Efficiency ( p ) = T 1 p × T p \text{Efficiency}(p) = \frac{T_1}{p \times T_p} Efficiency(p)=p×TpT1
其中:

  • T_1:单进程执行时间
  • T_p:p 个进程下的执行时间
  • p:MPI 进程数

该指标用于衡量并行规模扩大后,算力资源的有效利用程度。 效率越接近 1,说明通信与同步开销越低。


从并行效率曲线可以看出,在进程数较少时,两种 MPI 实现的效率均接近理想状态;随着并行规模扩大,通信与同步开销逐渐增加,整体效率呈下降趋势。相比 OpenMPI,Hyper MPI 在中高并发场景下保持了更高的并行效率,说明其在鲲鹏平台上对进程调度与通信路径的优化能够有效降低并行扩展带来的性能损耗。

【OpenMPI 与 Hyper MPI 并行效率对比图】


4.6 对比结果分析与讨论

综合实验结果可以看出,OpenMPI 作为通用 MPI 实现,具备良好的稳定性与兼容性,能够满足基础并行计算需求;而 Hyper MPI 在此基础上,通过对鲲鹏硬件拓扑与并行通信路径的优化,在并行效率方面展现出一定优势。

这种性能差异在 HPC 应用中具有实际意义。随着并行规模的扩大,通信成本往往呈非线性增长,若 MPI 实现无法有效感知底层硬件结构,将会限制整体加速效果。Hyper MPI 的实验表现表明,其在鲲鹏平台上能够更好地匹配多核与 NUMA 架构特征,为 HPC 应用提供更具针对性的并行通信支持。


4.7 小结

通过在鲲鹏平台上对 OpenMPI 与 Hyper MPI 进行对比实验,可以得到以下结论:

  1. 两种 MPI 实现均可在鲲鹏平台上稳定运行,具备良好的工程可用性
  2. 在相同算例与进程规模下,Hyper MPI 在并行通信效率方面表现更优
  3. 随着并行规模提升,Hyper MPI 的性能优势更加明显
  4. 针对鲲鹏硬件特性进行优化的 MPI 实现,有助于进一步释放平台并行计算潜力

该实战验证了在鲲鹏 HPC 场景中,引入平台优化型 MPI 实现,对于提升并行应用性能具有现实工程价值。


五、实战二:OpenMP 线程级并行实践

5.1 OpenMP 并行模型简介

与 MPI 不同,OpenMP 主要用于共享内存并行,其优势在于:

  • 编程模型简单
  • 对现有串行代码侵入性低
  • 非常适合单机多核场景

在鲲鹏平台上,OpenMP 能够充分利用 CPU 的多核心能力。


5.2 OpenMP 并行示例说明

在本示例中,我们对一个典型的循环计算进行并行化:

#pragma omp parallel for``for (int i = 0; i < N; i++) { `` result[i] = heavy_compute(i); ``}

通过控制 OMP_NUM_THREADS 环境变量,可以灵活调整线程数量。


5.3 运行与测试

示例运行方式:

export OMP_NUM_THREADS=1 ``./omp_test ``export OMP_NUM_THREADS=4 ``./omp_test ``export OMP_NUM_THREADS=8 ``./omp_test


Python 实现

import os
import time
import numpy as np
from numba import njit, prange, set_num_threads, get_num_threads
import matplotlib.pyplot as plt

# =========================
# 实验参数
# =========================
N = 20_000_000   # 循环规模(可根据机器性能调小/调大)

# =========================
# 定义“重计算”函数
# =========================
@njit(parallel=True)
def omp_like_compute(n):
    result = np.zeros(n, dtype=np.float64)
    for i in prange(n):
        x = i * 0.000001
        result[i] = np.sin(x) * np.cos(x) + np.sqrt(x + 1.0)
    return result

# =========================
# 线程数测试列表
# =========================
thread_list = [1, 2, 4, 8]
times = []

for t in thread_list:
    set_num_threads(t)
    print(f"\nRunning with threads = {t}")
    print(f"Numba reports threads = {get_num_threads()}")

    start = time.time()
    res = omp_like_compute(N)
    end = time.time()

    elapsed = end - start
    times.append(elapsed)

    print(f"Execution Time: {elapsed:.4f} seconds")

运行结果如下所示:

ThreadsTime (s)加速比
12.16991
20.41525.23
40.210310.32
80.107420.21

可以看到随着线程数增加,执行时间大幅下降。

加速比呈现近乎线性(甚至略高,因为 NumPy + Numba 会有一些矢量化优化叠加)。

这验证了线程级并行在 CPU 多核上的有效性。


执行时间曲线

OpenMP 线程级并行程序执行终端截图 展示了在不同线程数(1、2、4、8)下,Numba 报告的实际线程数及对应执行时间。可以看到,线程数设置与实际使用一致,程序能够正确利用多线程进行循环计算。


加速比曲线

OpenMP 线程级并行执行时间与加速比曲线 横轴为线程数,左纵轴为程序执行时间(秒),右纵轴为加速比。随着线程数增加,执行时间显著下降,加速比近似线性增长,验证了线程级并行在 CPU 多核上的良好利用效率。


六、总结:鲲鹏平台 HPC 入门实践体会

本文围绕鲲鹏平台的 HPC 应用实践,介绍了并行计算技术栈,并通过典型算例验证了 MPI 与 OpenMP 在鲲鹏多核环境下的可用性。在此基础上,重点对比了通用 MPI 实现 OpenMPI 与面向鲲鹏平台优化的 Hyper MPI,在相同硬件与算例条件下,从执行时间、加速比和并行效率等维度分析了两者的性能差异。

实验结果表明,在中高并发场景下,Hyper MPI 能够更有效地感知鲲鹏处理器的多核与 NUMA 架构特征,降低并行通信与同步开销,从而表现出更优的并行扩展性。相关实践验证了鲲鹏平台在 HPC 场景中不仅具备成熟的软件生态,同时也通过平台优化组件进一步释放了并行计算能力,为 HPC 应用在 ARM 架构上的部署与优化提供了参考。


鲲鹏开发工具-学习开发资源-鲲鹏社区:

https://www.hikunpeng.com/developer?utm_campaign=com&utm_source=csdnkol


全文完

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值