高性能共轭梯度基准测试High-performance conjugate-gradient benchmark
今天要讨论的是关于超级计算机的评价指标。对于超级计算机,我们最关心的是它的计算能力。而对于超级计算机,评价计算能力的标准,对超级计算机的发展起到一个非常重要的导向作用。其实并没有一个标准能够完全反映计算机系统的全部性能,往往只是代表它其中的一个方面,比如数据处理性能,系统软件性能 ,定点性能,浮点性能,或者科学工程计算的性能等等。
我们今天的讨论的就是一个科学工程计算方面的性能。
一个矩阵如果它的阶数非常高,那么要处理它的运算量是比较大的。求解一个大规模的矩阵可以作为一种评价指标。没错,HPL就是这样的一种评价指标。HPL是一种采用高斯消元法对一个n维的矩阵表示的线性代数方程组进行求解,以此来评价高性能计算机的性能。
现在的自然科学和工程当中,将真实世界的过程用偏微分方程来描述,而不再仅仅是线性方程组,比如大气科学,海洋科学,化学,材料科学。这就对高性能计算机用来求解偏微分方程提出更高的要求。这样的话使用HPL衡量,实际上已经偏离了实际应用程序的性能,因为微分方程它对高带宽和低延迟有更强烈的需求,不像HPL所提出的测试基准那样,他使用一种线性方程组数据。访问的规模比较一致如果继续作为测试基准的话,那么很可能导致最终设计出来的计算机对于实际应用程序是参考价值不大,甚至为系统添加不必要的组件或者复杂性,并且可能在将来的发展当中,经过预测HPL的性能可能会越来越增加,那么这样的话,我们高性能计算机它的运算能力。今天所要讨论的一篇论文是2016年提出这样一种广泛的高性能共轭梯度的评价指标。
相关研究
以前也有类似共轭梯度的基准NAS并行基准(NPB),HPCG也将之吸收为一种评价属性。NPB的矩阵具有随机稀疏模式,每行的选择具有均匀的分布,这样它是有一定的副作用:计算和通信的模式是非物理的,不存在预处理器,这样的话这种工作梯度分析还不适合作为广泛的指标。
还有一种2001年提出的迭代求解器基准,它使用了物理上有意义的稀疏模式,但是他的测试没有涉及可扩展的分布式内存并行性和嵌套并行性。
HPC Challenge Bechmark Suite(2013年),是一套性能指标, 可以根据最终用户的需求和应用程序配置文件进行筛选,组合或挑选 。
目标
首先我们说HPCG怎样作为测量代表中的科学计算的性能。首先,将运算模式分为两大类:第一类是计算与数据之比的访问率比较低的一种数据访问模式。第二类是求解大型线性方程组的密集矩阵乘法相关的模式。
看得出来,以前采用的HPL实际上只强调了第二类的模式,并且无法测量第一类模式。现有的性能指标源于加速器的出现,加速器对于第二类是非常有效的但对第一类效果不明显。这对大规模并行吞吐量工作负载与延迟敏感的工作负载的差异有关,实际上现代的许多计算机更多是并行吞吐量大。HPCG则采取使用通信和计算模式的覆盖 。
迭代和执行
构造一个三维偏微分方程模型.每个维度上 \( (n_x \times P_x) \times (n_y \times P_y) \times (n_z \times P_z) \),其中 \( n_x \times n_y \times n_z \) 是局部子网格的维数,分别分配给MPI(消息传递接口)进程, \( P_x \times P_y \times P_z \) 是MPI进程空间的配置数,在HPCG的配置阶段设定。m组n次迭代。一组的运算如下算法所示:
三维的网格点(i,j,k)的求解,它的值取决于周围26个点的值。这样的运算系统主要是为执行计算内核使用。但要知道基准测试不是要对此问题计算精确解,因为最大迭代次数在基准测试中是固定的,不需要收敛到解。作为验证的话可以使用问题的频谱特性和前置共轭梯度算法。
偏微分方程模型的离散化为优化稀疏数据结构提供了机会,HPCG允许对网格点划分和重新排序进行优化。
允许和不允许的优化
三维稀疏计算性能非常重要的方面之一是网格点的划分和排序,允许用户自己设定排序来取得更好的效果。默认情况下HPCG使用的是字典序,在 高斯-赛德尔预处理器上使用红黑树排序就会取得非常好的效果。 在迭代开始之前建立的编号方案在用户定义的数据结构中的整个定时计算中进行,可以通过提供专用内核充分运用到用户自定义排序的优势。
另一个性能优化就是来自特定于系统的通信基础结构:硬件和软件充分利用通信网络 。用一小组的MPI函数可以在分布式内存系统中移植,优化的好也可能获得最佳表现。当然有的供应商有特定的接口,HPCG不会使用这种特定接口,仅限于MPI标准函数广泛实现的子集。
为了保证HPCG结果的广泛适用性,明确限制了对以下几点是不能做特定优化的:矩阵稀疏模式(包括离散化的对称性),结构和连通性模式,域的维数,也不允许使用共轭梯度方法的变体或其它共轭方法来绕过经典算法。HPCG仍希望用通用方法进行矩阵分区和计算核心的硬件特定优化。
验证
即使在同样系统相同数量的处理器上运行相同的精确计算,浮点数运算也可能不能获得二进制位上完全按位可重复的结果。这对必须证明其计算结果并存在按位可变的情况下进行调试的应用程序提出了巨大挑战。HPCG为了能在迭代阶段检测异常,计算预处理条件变量,后继条件变量和不变量,这消除了基准测试的优化版本时可能出现的大多数错误。验证用户内核采用了对稀疏矩阵乘以离散化矩阵的对称性测试。此外HPCG还包含了 频谱测试 ,频谱测试旨在检测由于用户定义的矩阵排序而导致的不准确计算和收敛速率变化而导致的优化实施中的潜在异常 。
结果
下图的结果展示了初期测试的数值比较。上图是半对数刻度(横纵是对数刻度,纵轴是线性的),下图是对数刻度(横纵轴都是对数刻度)。HPL预测的与峰值Peak数值上比较接近,大多数高性能计算机的专家都认同这个观点。但在结点数增多的时候,HPL与Peak的增长率上偏离会增多。虽然在数值上HPCG的绝对值会低很多,但是HPCG的增长比例与峰值是一致的。这是多方面因素以及其数值的记法有关,其中比较常见的因素就是所谓“内存墙”。
这是2016年提出的指标,现在可以到top500.org看到,已经采纳了这个指标
现在的评价单位已经变成了TFlops/s