
简介这份《HPC高性能计算架构设计》文档面向从事高性能计算、集群运维与架构选型的工程师及科研人员系统梳理了HPC的基础概念、系统组成与主流技术路线可作为入门认知与方案参考。文档围绕计算、存储、网络、集群软件四大部分展开涵盖高吞吐计算与分布计算的分类逻辑、X86处理器与Linux系统的主流搭配、刀片构建方式及IB与10GE互联网络并详解MPI节点、胖节点与GPU加速节点三类计算节点的定位差异。同时给出单节点性能计算公式、Linpack等性能测试基准以及UDIMM、RDIMM、LRDIMM内存类型的适用场景帮助读者建立从硬件选型到性能评估的完整认知。资源包内含1个docx文档压缩包约979KB结构紧凑便于查阅。目前已有225人学习适合需要快速理解HPC架构要点、为方案设计或技术选型做知识储备的读者。1. 从一份 HPC 架构设计文档说起它到底能解决什么问题如果你正在做集群选型、超算中心方案或者被要求给一个 CAE/气象/生命科学的计算任务配硬件那这份《HPC高性能计算架构设计.docx》就是一份能直接拿来当底稿的参考资料。它不是某款软件的说明书而是一份把 HPC 从市场背景、系统组成、性能指标、网络选型到应用场景串起来的架构设计文档。HPC 高性能计算的核心逻辑其实很朴素用很多处理器或者一群机器通过并行算法把一个大问题拆成小问题分到不同节点上算再把结果合并回来。文档里把这条主线讲得很清楚还顺带把 SMP、NUMA、MPP 三种商用服务器架构的边界和适用场景做了对比。适合谁看刚接手 HPC 项目、需要快速建立全局认知的工程师以及要写方案、做汇报、给领导解释“为什么这里必须上 IB 而不是万兆”的人。它不能替你调 MPI 参数但能让你在架构层面少走弯路。2. HPC 系统四件套计算、存储、网络、集群软件怎么配2.1 计算节点选型瘦节点、胖节点、GPU 节点别配反文档里把计算节点分成三类MPI 节点双路也叫瘦节点、胖节点双路以上大内存、GPU 加速节点。这个分类不是拍脑袋来的它直接对应应用类型。计算密集型应用比如 CAE 隐式有限元分析吃的是高主频 CPU配瘦节点集群最划算内存约束型应用比如某些分子动力学模拟单节点内存需求可能到 1TB 以上这时候胖节点就是刚需用瘦节点堆数量反而会因为跨节点通信把性能拖垮GPU 加速节点则针对浮点运算密集、且能改写成 CUDA/OpenACC 的任务文档里提到 GPU 在浮点运算和并行计算上可以提供数十倍乃至于上百倍于 CPU 的性能但前提是你的代码能并行化。常见做法是先看应用软件官方推荐的硬件配置再看你的预算能买多少节点。单节点性能公式文档里给了单节点性能 处理器主频 × 核数 × 单节点 CPU 数量 × 单周期指令数。单周期指令数取 8 或 16取决于 CPU 代际。节点数量 峰值浮点性能需求 / 单节点性能。这个公式我一般用来做粗算实际选型还要看内存带宽和网络时延。提示胖节点不是越多越好文档明确说“集群中胖节点的数量要根据实际应用需求而定”买多了就是浪费机柜空间和电费。2.2 网络选型为什么 HPC 偏爱 InfiniBand 而不是以太网文档里有一句话点得很透HPC 系统使用 IB 互联主要原因是 IB 协议栈简单、处理效率高、管理简单、对 RDMA 支持好、功耗低、时延低。RDMA 全称远程直接数据存取它通过网络把数据直接传入计算机的存储区实现 Zero Copy绕过了操作系统内核所以时延能压到微秒级。普通万兆以太网在 TCP/IP 协议栈里走一圈时延和 CPU 开销都上去了。对于 MPI 节点之间需要频繁交换中间结果的任务比如 CFD 计算网络时延直接决定并行效率。IB 目前支持 FDR、QDR、EDR 等速率。HCA 是 IB 连接的设备终结点提供传输功能和 Verb 接口TCA 是 HCA 的子集基本用于存储。如果你只是做高吞吐计算子任务之间没什么关联那万兆以太网也能凑合但只要是分布计算子任务间联系紧密、需要大量数据交换IB 就是绕不过去的选项。2.3 存储选型并行文件系统是 HPC 的灵魂文档把并行文件系统称为“高性能计算的灵魂”这个说法不夸张。TOP500 系统里存储主要用分布式文件系统当前主流包括 Lustre、GPFS、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、GoogleFS 等其中 Lustre 和 GPFS 是 HPC 最主流的行业发展趋势。分布式文件系统的设计基于客户机/服务器模式用户不需要关心数据存在哪个节点上像用本地文件系统一样用就行。IO 密集型应用比如动漫渲染、气象数据预处理必须配高带宽大容量并行存储系统。我一般会先算两个数聚合带宽需求GB/s和 IOPS 需求再倒推需要多少个 OSS/OST。Lustre 的 MDS 和 OSS 分离架构适合元数据操作不频繁的场景GPFS 在元数据性能上更强一些但授权费用也更高。2.4 集群软件MPI、OpenMPI、OpenMP 别搞混文档专门用一节讲这三个缩写的区别因为初学者确实容易晕。MPI 是信息传递接口是独立于语言的通信协议标准是一个库OpenMPI 是 MPI 的一种实现也是库项目OpenMP 是应用程序界面是共享存储结构上的一种编程模型。在当前并行计算系统里OpenMP 和 OpenMPI 都是需要的OpenMP 用于本地的并行计算共享内存架构OpenMPI 用于机器之间的通信分布式内存架构。实际配集群时集群软件层还要装作业调度系统Slurm、PBS、LSF 等、编译器GCC、Intel、PGI、数学库MKL、OpenBLAS、MPI 实现OpenMPI、IntelMPI、MPICH。这些软件栈的版本兼容性是个大坑后面避坑章节会细说。3. 性能指标与基准测试Linpack 怎么跑、结果怎么看3.1 浮点性能单位与 CPU 性能粗算文档把浮点性能单位列得很清楚MFlops 是每秒一百万次GFlops 是每秒十亿次TFlops 是每秒一万亿次PFlops 是每秒一千万亿次EFlops 是每秒一百京次。你拿到一个应用需求先看它需要多少 TFlops 或 PFlops再用单节点性能公式倒推节点数。单周期指令数取 8 还是 16取决于 CPU 代际。E5-2600、E5-2600 v2、E7-4800 v2 取 8E5-2600 v3 取 16。这个数来自 AVX/AVX2 指令集的浮点吞吐能力。我一般会留 20% 到 30% 的余量因为实际应用很难跑到理论峰值。3.2 Linpack 测试流程与参数设置Linpack 是国际上最流行的用于测试高性能计算机系统浮点性能的 Benchmark通过高斯消元法求解 N 元一次稠密线性代数方程组来评价浮点性能。跑 Linpack 一般用 HPLHigh-Performance Linpack实现步骤如下# 1. 安装依赖MPI、BLAS、OpenMP sudo apt install libopenmpi-dev libopenblas-dev libomp-dev # 2. 下载 HPL 源码并解压 wget https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz tar -xzf hpl-2.3.tar.gz cd hpl-2.3 # 3. 配置 Makefile指定 MPI 和 BLAS 路径 cp setup/Make.Linux_PII_CBLAS_gm Make.Linux_OpenMPI # 编辑 Make.Linux_OpenMPI修改 TOPdir、MPdir、MPinc、MPlib、LAdir、LAlib# 4. 生成 HPL.dat 配置文件关键参数如下 # Ns问题规模一般取内存的 80% 左右 # NBs块大小通常取 128 或 192 # Ps、Qs进程网格Ps × Qs 总进程数 # 示例4 节点每节点 2 进程共 8 进程Ps4Qs2# 5. 编译并运行 make archLinux_OpenMPI mpirun -np 8 -hostfile hosts ./xhpl hpl_result.txt逻辑说明HPL.dat 里的 Ns 决定矩阵规模越大越能压出峰值性能但受限于内存。NBs 影响计算和通信的重叠效率一般 128 到 256 之间试。Ps 和 Qs 的乘积必须等于 MPI 进程数且尽量让 Ps 和 Qs 接近减少通信开销。跑完后看输出里的 Gflops 值那就是实测浮点性能。参数说明NBs 取 128 时如果 Gflops 不理想可以试 192 或 256Ps/Qs 的分配要结合节点数和每节点进程数比如 4 节点每节点 2 进程Ps4、Qs2 比 Ps8、Qs1 好因为后者跨节点通信更多。注意Linpack 测的是稠密线性方程组求解的峰值性能不代表你的实际应用性能。CAE、CFD 等应用的实测性能可能只有 Linpack 的 30% 到 60%。3.3 其他基准测试工具IOmeter 与 STREAM文档还提到 IOmeter 测试硬盘吞吐能力STREAM 测试内存带宽。这两个工具在存储和内存选型时很有用。IOmeter 可以模拟不同块大小、不同读写比例的 IO 负载帮你判断并行文件系统的聚合带宽是否达标。STREAM 跑的是 Copy、Scale、Add、Triad 四个内核测的是可持续内存带宽NUMA 架构下要绑核跑否则数据会跨节点结果偏低。4. 架构演进SMP、NUMA、MPP 怎么选、怎么避坑4.1 三种架构的特征与性能边界文档把 SMP、NUMA、MPP 讲得很透。SMP 是对称多处理器结构所有 CPU 共享全部资源操作系统只有一个复本每个 CPU 平等访问内存。问题是扩展能力有限实验证明 SMP 服务器 CPU 利用率最好的情况是 2 到 4 个 CPU再多内存访问冲突迅速增加。NUMA 是非一致存储访问结构多个 CPU 模块各有本地内存通过互联模块连接访问本地内存快、远地内存慢。HP 的 Superdome 64 路 CPU 相对性能值只有 20而 8 路 N4000 是 6.38 倍 CPU 换来 3 倍性能提升。MPP 是海量并行处理结构多个 SMP 服务器通过节点互联网络连接每个节点只访问本地资源完全无共享扩展能力最好理论上无限制目前技术可实现 512 个节点互联、数千个 CPU。4.2 应用场景匹配OLTP 选 NUMA数据挖掘选 MPP文档给了很明确的选型建议NUMA 架构更适用于 OLTP 事务处理环境因为事务处理的数据交互相对少远地内存访问时延可以接受当用于数据仓库环境时大量复杂数据处理必然导致大量数据交互CPU 利用率会降低。MPP 系统不共享资源当需要处理的事务达到一定规模时效率比 SMP 好操作相互之间没什么关系、处理单元之间通信比较少时MPP 优势明显所以在决策支持和数据挖掘方面显示了优势。但当前使用的 OLTP 程序中用户访问一个中心数据库如果采用 SMP 结构效率要比 MPP 快得多。4.3 避坑NUMA 绑核、MPP 负载均衡、SMP 扩展上限现象一NUMA 服务器上跑应用性能忽高忽低。原因进程在 CPU 模块之间漂移频繁访问远地内存。 解决用 numactl 绑核绑内存。numactl --cpunodebind0 --membind0 ./app让进程和内存都在同一个 NUMA 节点内。现象二MPP 集群增加节点后整体性能没有线性提升。原因节点间负载不均衡或者某些节点成为通信热点。 解决检查作业调度系统的负载均衡策略用系统级软件如数据库屏蔽节点调度复杂性或者手动调整数据分布。现象三SMP 服务器 CPU 加到 8 路以上性能反而下降。原因内存总线争用严重CPU 资源浪费在等待内存访问上。 解决SMP 适合 2 到 4 路超过这个规模考虑 NUMA 或 MPP。现象四GPU 加速节点买回来应用跑得比 CPU 还慢。原因应用没有做 GPU 移植或者数据传输开销大于计算收益。 解决先确认应用是否有 CUDA/OpenACC 版本再评估数据在主机和设备之间的传输量。计算密集且数据量适中的任务才适合 GPU。现象五IB 网络装好了MPI 性能没提升。原因MPI 没有走 IB 通道或者 IB 驱动、固件版本不匹配。 解决用ibstat检查 HCA 状态用mpirun --mca btl_openib_allow_ib 1强制走 IB检查 OFED 驱动版本和固件版本是否匹配。5. 应用场景落地CAE、生命科学、气象环境的资源配比5.1 CAE 仿真隐式与显式有限元的硬件差异文档把 CAE 流程讲得很清楚几何建模、划分网格、指定荷载和边界条件、提交服务器分析、显示结果、评估性能。隐式有限元IFEA针对结构内部分析主要场景是结构设计显式有限元EFEA针对碰撞、爆炸等结构之间的分析。隐式分析吃内存带宽和内存容量因为要组装和求解大型稀疏矩阵显式分析吃 CPU 主频和核数因为时间步长小、迭代次数多。配硬件时隐式分析优先上胖节点和大内存显式分析优先上高主频瘦节点集群。5.2 生命科学生物信息学、分子动力学、新药研发文档把生命科学分三个领域生物信息学用 HPC 对基因数据做测序、拼接、比对分子动力学模拟用 HPC 做大规模模拟分析蛋白质在分子和原子水平的变化新药研发用 HPC 做高通量药物虚拟筛选研发周期平均缩短 1 年半左右。生物信息学是数据密集型需要大容量并行存储和高内存带宽分子动力学是计算密集型需要高主频 CPU 和低时延网络新药研发的虚拟筛选是吞吐型适合高吞吐计算架构子任务之间关联少可以用普通万兆以太网。5.3 气象环境数据收集、预处理、数值预报气象预报是用数学方法构建方程将气象数据和边界参数导入方程求解预测大气变化和状态。业务流程是气象数据收集和预处理、数值天气预报流程、综合数值天气预报、天气学统计学输出预报结果。气象环境应用是典型的 IO 密集型和网络密集型混合需要高带宽大容量并行存储系统同时节点间通信频繁IB 网络是标配。5.4 资源配比速查表应用类型CPU内存网络存储计算密集型CAE 显式、分子动力学高主频、多核中等容量、高带宽IB中等带宽内存约束型CAE 隐式、生物信息学中等主频大容量、高带宽IB中等带宽网络密集型气象、CFD中等主频中等容量IB 低时延高带宽IO 密集型动漫渲染、数据挖掘中等主频中等容量万兆/IB高带宽大容量并行存储6. 从文档到落地我踩过的三个坑和一条验证习惯这份文档我前后翻了三遍第一遍当科普看第二遍对着项目配硬件第三遍是帮别人排查问题。踩过的坑里有三个印象最深。第一个坑是 DIMM 类型选错。文档里写了 UDIMM、RDIMM、LRDIMM 三种UDIMM 速度快、廉价但不稳定RDIMM 稳定、扩展性好、对内存控制器电气压力小LRDIMM 提供高内存速度、降低总线负载、功耗更低但成本高很多。我早期一个项目为了省钱用了 UDIMM结果节点跑满负载时频繁出现内存校验错误换了 RDIMM 才稳定。从那以后我每次配 HPC 节点都强制走一遍内存兼容性检查主板手册里支持的内存类型和最大容量必须逐条核对。第二个坑是 NVDIMM 的认知偏差。文档说 NVDIMM 由 BBU DIMM 演变而来BBU 用后备电池维持挥发性内存内容几小时但电池含重金属不符合绿色能源要求所以有了用超级电容作为动力源的 NVDIMM使用非挥发性 Flash 存储介质保存数据数据保存时间更长。我一开始以为 NVDIMM 就是普通内存加个电池后来才发现它在断电瞬间把数据从 DRAM 搬到 Flash恢复时再搬回来对内存控制器和 BIOS 都有要求。不是所有主板都支持 NVDIMM买之前一定要查兼容性列表。第三个坑是 Linpack 参数照抄。网上很多教程给了一套 HPL.dat 参数我直接拿来用结果 Gflops 只有理论峰值的 40%。后来自己按内存容量算 Ns按进程数调 Ps/Qs按 CPU 代际改 NBs才跑到 70% 以上。Linpack 的玄学在于参数组合没有一套通用配置必须根据你的硬件实测调优。验证习惯方面我现在每配完一个 HPC 集群都会强制走一遍三层验证第一层用 STREAM 测内存带宽确认 NUMA 绑核后带宽达标第二层用 IOmeter 测存储聚合带宽确认并行文件系统没有瓶颈第三层用 HPL 测浮点性能确认 MPI 和 IB 通道正常。三层都过了再上实际应用。这个习惯帮我省了很多后悔药因为很多问题在基准测试阶段就能暴露不用等到生产环境翻车。希望帮到你。本文还有配套的精品资源点击获取