
本书面向国产E级超算的体系结构和高性能计算领域,关注近年来出现的新超算硬件和新软件技术(如神威E级超算编程模式、DCU编程模式)。本书涵盖神威、曙光等超算的硬件架构与编程方法,深度结合国产超算体系结构特点,以实例的形式探讨异构超算上的高性能算法设计、优化技术及高性能软件的开发和优化方法。本书可作为高等院校计算机科学与技术、软件工程等专业本科生或研究生的教材,使其在掌握通用计算机程序设计的基础上,进一步提升在该领域的理论知识水平和程序优化实践技能,也可作为从事高性能计算和体系结构研究的科研工作者与工程技术人员的参考资料,同时也能为关注高性能计算与超算技术发展的读者提供有益参考。
超级计算机作为国之重器,在工程模拟(如洪水、地震、气象模拟等)、数据分析、国防军工、人工智能等领域发挥着重要作用。2022年可以算是E级超算的元年,美国已经推出了E级超算。作为世界大国间科技竞争的制高点之一,我国也已经建成多台E级超算并开始投入使用。目前,我国的超算系统均采用完全自主的国产硬件(包括CPU、加速器、互连网络等)打造,采用与其他国家完全不同的硬件架构和软件栈。如何在异构混合架构的超算上进行高效算法设计、程序开发和性能优化,以充分发挥超算的硬件性能,一直是工程领域和计算机高性能计算领域关心的热点问题。 基于国产超算环境体系结构新颖、编程难、优化难、技术资料稀缺等现实情况,我们编写了本书。本书聚焦现代超算体系结构,特别侧重国产超算的异构混合架构,探索在新架构下的编程模式与创新方式,重点介绍相关体系结构、编程模型、算法设计和性能优化方法。本书以结合我国超算环境的程序优化为特色,关注近年来出现的新超算硬件和新软件技术,以及国产超算环境体系结构上的编程方法,这部分内容也是现有的体系结构相关书籍较少涉及的。 本书从超算发展和典型超算硬件架构开始介绍,过渡到软硬件性能评价指标和计算方法;核心部分是面向国产超算的编程、优化、性能分析和评价及国产超算环境下的并行异构算法设计,并结合高性能应用案例介绍超算上的软件开发和优化方法。本书共9章,第1~3章介绍超算相关背景与高性能计算的理论知识;第4~6章围绕异构混合架构及其上的编程方法,重点内容包括国产神威超算架构和DCU架构;第7~8章的主要内容是异构混合架构上的算法设计与算法库;第9章从应用角度介绍如何开发并行应用程序并优化。 本书编写团队长期面向超算环境从事并行程序开发与深度优化工作,拥有丰富的异构混合架构并行算法设计与性能优化经验。在本书编写过程中,我们充分总结了团队工作中的相关技术积累与异构编程经验,从中凝练出高质量的技术问题解决方案和通俗示例,这些形成了本书的内容。 本书可作为高等院校计算机科学与技术、软件工程等专业本科生或研究生的教材,使其在掌握通用计算机程序设计的基础上,进一步提升在该领域的理论知识水平和程序优化实践技能,也可作为从事高性能计算和体系结构研究的科研工作者与工程技术人员的参考资料,同时也能为关注高性能计算与超算技术发展的读者提供有益参考。 无论是超算技术,还是异构架构上的编程和算法,都还处在快速发展之中。由于编者水平有限,加之编写时间仓促,书中肯定有不完善之处,请广大读者批评指正。
第1章 绪论 1 1.1 高性能计算应用需求和意义 1 1.2 混合架构超算发展趋势 2 1.3 如何进行异构混合架构上的程序设计 2 1.4 本书的内容和安排 3 第2章 异构混合架构概述 5 2.1 国际国内超算现状 5 2.1.1 超算发展历程 6 2.1.2 超算发展现状 8 2.1.3 我国超算发展现状 12 2.2 典型的混合架构计算机 13 2.2.1 CPU+GPU架构:以Frontier、Summit、Aurora为代表 13 2.2.2 ARM架构:日本富岳 16 2.2.3 CPU+DCU:曙光超算 17 2.2.4 神威主从核架构:新一代神威超算 18 2.2.5 新一代天河超算 19 2.3 混合架构程序设计语言与框架概述 22 2.3.1 OpenMP 22 2.3.2 MPI 23 2.3.3 CUDA/HIP 24 2.3.4 OpenACC 25 2.3.5 Athread 26 2.3.6 OpenCL 27 2.3.7 oneAPI 28 习题 29 参考文献 30 第3章 异构混合架构性能分析理论 31 3.1 并行程序的时间开销 31 3.2 相对性能 31 3.3 绝对性能 36 3.4 性能瓶颈 37 3.4.1 计算密度 37 3.4.2 访存密集与计算密集 38 3.4.3 roofline性能模型 38 3.4.4 roofline分析示例:SpMV 39 习题 41 参考文献 42 第4章 CPU高性能程序设计 43 4.1 内存模型与OpenMP、MPI并行编程方法 43 4.2 OpenMP并行编程简介 44 4.2.1 OpenMP的Hello World 45 4.2.2 编译制导指令 47 4.2.3 运行时库函数 49 4.2.4 环境变量 49 4.2.5 OpenMP offload 49 4.3 MPI并行编程简介 50 4.3.1 MPI基本函数 50 4.3.2 MPI通信模式 55 4.4 SIMD向量化 60 4.4.1 CPU向量化指令集发展 60 4.4.2 向量化编程实践 61 4.5 性能分析工具 65 4.5.1 perf工具 65 4.5.2 gprof工具 69 4.5.3 IPM工具 70 4.5.4 Score-P工具 73 习题 76 第5章 神威异构众核程序设计 77 5.1 神威超算及编程环境概述 77 5.1.1 神威超算的背景及历史 77 5.1.2 神威·太湖之光超算架构 78 5.1.3 新一代神威超算架构 80 5.1.4 神威编程环境 81 5.1.5 访存层次 84 5.2 神威众核编程 85 5.2.1 众核程序结构 85 5.2.2 从核函数 86 5.2.3 第一个并行程序 87 5.2.4 示例:stencil计算优化 92 5.3 神威SIMD 96 5.3.1 SIMD简介 96 5.3.2 SIMD示例 100 习题 101 第6章 面向DCU架构的程序设计与优化 102 6.1 曙光超算及编程环境概述 102 6.1.1 曙光超算简介 102 6.1.2 曙光超算节点架构 102 6.1.3 ROCm/DTK编程环境 111 6.2 HIP编程方法 112 6.2.1 HIP与CUDA 112 6.2.2 曙光DCU编程模型 113 6.2.3 HIP编程 114 6.3 利用LDS进行数据共享 127 6.3.1 LDS概念 127 6.3.2 LDS使用实例 129 6.4 线程间通信 134 6.4.1 Block级线程通信 134 6.4.2 wavefront级线程通信 135 6.5 reduce优化 138 习题 148 第7章 异构混合架构上的算法设计 149 7.1 DCU上的前缀和 149 7.1.1 Prefix Sum简介 149 7.1.2 并行难点 150 7.1.3 wavefront Scan算法 152 7.1.4 Block Scan算法 154 7.1.5 全局Scan算法 155 7.1.6 更高效的Scan算法 157 7.2 通用矩阵乘 157 7.2.1 GEMM简介 157 7.2.2 并行难点 158 7.2.3 面向DCU的GEMM优化 158 7.2.4 BENCHMARK 163 7.3 DCU上的稀疏矩阵向量乘 164 7.3.1 概述 164 7.3.2 稀疏矩阵CSR存储格式 164 7.3.3 并行难点 164 7.3.4 高效SpMV算法实现 166 习题 170 第8章 异构混合架构常用算法库 172 8.1 算法库介绍 172 8.1.1 常见算法库层次 172 8.1.2 国内外典型超算上的算法库 172 8.2 稠密矩阵计算库:rocBLAS、cuBLAS、swBLAS 173 8.2.1 BLAS接口介绍 173 8.2.2 rocBLAS 177 8.2.3 cuBLAS 181 8.3 稀疏矩阵计算库:rocSPARSE、cuSPARSE、swSPARSE 182 8.3.1 常用的稀疏矩阵的存储格式 182 8.3.2 rocSPARSE 185 8.3.3 cuSPARSE 190 8.3.4 swSPARSE 192 8.4 LAPACK线性代数计算库:特征值、LU 195 8.4.1 LAPACK介绍 195 8.4.2 rocSOLVER 196 8.4.3 cuSOLVER 199 8.5 线性方程组求解 201 8.5.1 常用的求解算法 201 8.5.2 PETSc的层次架构 202 习题 209 第9章 异构混合架构上并行应用程序开发示例 210 9.1 MISA-MD分子动力学模拟程序异构优化 210 9.1.1 分子动力学模拟概述 210 9.1.2 面向DCU的MD优化的挑战性及优化思路 211 9.1.3 主机-设备间通信及其优化 211 9.1.4 并行计算策略 214 9.1.5 其他访存优化技术 215 9.2 SUMMER-CD 216 9.2.1 软件介绍 216 9.2.2 物理模型 216 9.2.3 三层并行模型 218 9.2.4 自适应异构数据传输 221 9.2.5 基于Stream的计算通信重叠 223 9.3 有限体积法求解圣维南方程组在神威·太湖之光上的优化 223 9.3.1 物理模型简介 223 9.3.2 使用Athread线程库加速 224 9.3.3 SIMD 226 9.3.4 双缓冲机制 226 9.3.5 优化效果 229