1.1.1 TOP500的测试方式HPL

为了评估超级计算机的性能,TOP500选择了Linpack基准中的“最佳”性能测试。选择Linpack的理由是其使用广泛,且几乎所有相关系统都有对应的性能数据。TOP500选用的是允许用户调整问题规模并优化软件以在特定机器上获得最佳性能的基准版本。这个性能值并不能完全反映一个系统的整体性能,但是它能表示这个系统解决密集线性方程组时的专用性能,有比较好的通用性和代表性。

通过测量不同问题规模n的实际性能,用户不仅可以获得问题规模Nmax的最大可达到的性能 Rmax,还可以得到实现 Rmax 一半性能的问题规模。这些数字,加上理论峰值性能Rpeak 都被列入了 TOP500。为了保证所有计算机的性能报告的一致性,解决基准程序中的方程组的算法必须符合带部分主元的LU分解。这排除了使用如“Strassen算法”这样的快速矩阵乘法算法,或者使用低于双精度(64位浮点计算)计算解并使用迭代方法细化解的算法。

矩阵在连续迭代过程中的分解如图1-2所示,这里提到的LU分解是线性代数中的一个过程,其中一个方阵被分解为两个矩阵LUL是一个下三角矩阵(主对角线以下有数值,主对角线以上都是0),而U是一个上三角矩阵(主对角线以上有数值,主对角线以下都是0)。

在HPL中,一个LU因子分解的迭代由4个阶段组成,如图1-3所示,可理解为4个线程的流水线。

图1-2 矩阵在连续迭代过程中的分解

图1-3 LU分解迭代中的4个阶段

● 面板因子分解(Panel Factorization,FACT):这个阶段的任务是对当前迭代的面板进行因子分解。只有拥有面板的进程列才参与此阶段。它们通过使用MPI交换消息以确定主元,并执行相对较小的BLAS例程来更新面板。在图1-3的(a)部分可以看到一个面板(阴影部分)正在被处理。

● 面板广播(Panel Broadcast,BCAST):经过因子分解后,面板需要被分发到各个进程。在图1-3的(b)部分,阴影面板被广播到其他的列。广播后,每个进程都获得了面板和主元索引的信息。

● 行交换(Row Swapping,SWAP):在这个阶段,每个进程根据面板的主元索引交换其尾随子矩阵的行。同时,Ui被广播到所有进程行。在图1-3的(c)部分,行被交换(箭头指示了交换)。

● 尾随子矩阵更新(Trailing Submatrix Update,UPDATE):在此阶段,每个进程使用DTRSM和DGEMM例程更新其尾随子矩阵,UPDATE阶段没有进程间通信。在图1-3的(d)部分展示了这个过程,其中尾随子矩阵的每个块都在使用新信息进行更新。

HPL 天然地支持极高的并行度,它的并行性来源于算法和数据的结构。在 HPL 中,LU分解被划分为多个迭代和阶段,每个迭代和阶段都可以在不同的处理器或计算节点上并行执行。HPL使用2D块循环分布将矩阵分布在MPI进程上。矩阵的每一个小块都由一个特定的进程处理,这使得各个进程可以并行地在各自的数据上工作。并行计算不仅仅关乎计算,还涉及进程之间的通信。HPL中的进程需要共享数据,使用MPI(Message Passing Interface)可以高效通信、同步数据和协调工作。

TOP500测试所用的HPL旨在分布式内存计算机上用双精度算术求解一个(随机的)密集线性系统,拥有极高的并行度。HPL是一个可携带并免费使用的工具,可以在不同的计算机系统上运行,并且是开源的,每个人都可以下载对应程序测试自己的计算机。当然,超级计算机的建造方也可以选择不向TOP500披露测试结果。