Page 48 - 《软件学报》2021年第8期
P. 48

2330                                   Journal of Software  软件学报 Vol.32, No.8,  August 2021

                 working set of Hetero-HPL is not restricted by the limit of pinned memory size in a single allocation, and is distributed in a way that the
                 workload is balanced among all the co-processors and massive fine-grained parallelism can be exploited. On one experimental platform
                 with four co-processors, Heter-HPL can reach an efficiency of 76.5% (the efficiency of function dgemm is 84%) in one computing node,
                 and further experiment suggests that Hetero-HPL is also a feasible approach in distributed environment.
                 Key words:    HPL (high performance Linpack); multi-device heterogeneous platform; parallel computing


                 1    HPL 基准测试及主流异构并行架构

                                              [1]
                    HPL(high performance Linpack) 是一套被广泛用于测量计算机实际峰值计算性能的基准测试程序
                                                                              [2]
                 (benchmark).以其实际运行性能为标准,国际超级计算机性能排行榜 TOP-500 每年会对众多超算进行性能排
                                                  [3]
                 名.例如,2019 年,来自美国的超算“Summit” 以实测 HPL 148.6 PFLOPS 双精度浮点性能位居 TOP-500 榜首,而
                 来自中国的神威-太湖之光则以 93.0 PFLOPS 位居第三.TOP-500 排行榜是衡量全世界超级计算机发展的重要
                 指标,而其核心测试程序 HPL 的性能优化问题历来是各个超算厂商乃至各个国家发展高性能计算事业所关注
                 的重点.在不断提高 HPL 运行效率的过程中,程序的性能表现也为计算机系统及其基础软件的开发者提供有效
                 的反馈信息,能够有效促进计算机系统的向前发展.
                    由于众核协处理器(如 GPGPU)的普及,目前高性能计算机一般采用多路(socket)多核 CPU+众核协处理器
                 架构,如在 2019 年 TOP-500 榜单中名列前茅的 Summit、Sierra 及天河 2 号等.CPU 和协处理器往往采用不同的
                 体系结构及指令集,这样的计算机架构被称为异构计算机架构.在这样的系统中,传统多核 CPU 负责执行程序的
                 逻辑密集部分,众核协处理器则高效地处理程序中计算密集的部分.由于协处理器的高性能主要依赖于大量轻
                 量级核心提供的并行处理能力,因此可大幅度提高计算机系统整体的计算功耗比.鉴于异构众核架构诸多优势,
                 其如今已在事实上成为了当今高性能计算机建设的主流解决方案.
                    图 1 展示了目前典型的异构众核架构,从总体上来说,该架构可以简单地区分为 Host 端和 Device 端.Host
                 端采用的 CPU 具有多个物理上分开的 Socket,而每个 Socket 中有若干物理核心.这些核心是常规 CPU 核心,能
                 够有效处理程序中复杂的逻辑判断部分,因此程序的主进程运行在这些核心上.从内存层次结构上看,当今多路
                 多核 CPU 一般具有多级数据和指令缓存.如图 1 所示,每个 CPU 核心具有独立的一级缓存(L1-cache),而处于同
                 一 Socket 的若干 CPU 核心共享二级 Cache(L2-cache),可有效加速多个 CPU 核心间共享数据或指令的访问.而
                 作为 CPU 与内存之间的桥梁,三级 Cache(L3-cache)用来提高 CPU 整体的访存速度.从图 1 中还可以看到,异构
                 众核系统的内存和 CPU 的各个 Socket 一样也是物理上独立的,每个 Socket 都有与自己邻近的一块物理内存,
                 该 Socket 上的 CPU 核心能够以较低的延迟访问近端内存,但若访问远端内存则延迟大幅度提高.各个 Socket
                 直接由高速网络互联,并在硬件上实现了访存一致性协议,形成 cc-NUMA(cache coherent  non-uniform memory
                 access)结构,使得各个 CPU 核心能在逻辑上共享一致的内存空间.值得注意的是,缓存一致性协议及远端内存访
                 问会带来较大的开销,一种比较通用的方法是将各个进程分布在不同的 Socket 上使得各个进程仅利用与该
                 Socket 毗邻的资源.
                    目前 Device 端可以配备多个协处理器设备.这些协处理器相对于 CPU 来说具有很高的计算能力.这样强大
                 的计算能力一般是通过大规模并行计算实现.以当今主流的 GPGPU 为例,一块 GPGPU 卡中包含了众多流处理
                 器,这些处理器结构相对简单而不适合处理逻辑复杂的代码,但这些流处理器在硬件上整合了大量的向量计算
                 部件并实现了高效的线程切换机制.这样,一个流处理器能够高效地调度大量线程予以向量化并行执行.协处理
                 器拥有独立的内存空间,一般通过 PCI-e 总线与 Host 端的内存进行数据交换.
                    虽然上述异构架构较为普及,但以往对  大规模超级计算机上 HPL 测试程序的优化工作的开展大多基于进
                 程与协处理器一一对应这一前提            [4−6] .这种方案易于优化,也可避免缓存一致性协议及访问远端内存带来的开
                 销.但在 HPL 程序的实际执行过程中,这种方案将不可避免地导致大量处理器空闲,并增加结点内进程间通信开
                 销.在本文中,我们面向高度异构架构提出一套新型 HPL 测试程序 Hetero-HPL,突破以往进程与协处理必须一一
                 对应这一限制,使用进程内多协处理级并行方案,进而研究基于此方案的性能优化方法,在执行过程中更充分地
   43   44   45   46   47   48   49   50   51   52   53