Risa最新番号 国产异构系统上HPL的优化与分析
jav 国产
发布日期:2024-08-26 06:30 点击次数:199
HPL(high performance linpack)是目下HPC边界中最进击的基准测试范例之一Risa最新番号, 其性能被用作TOP500的排行依据[1, 2].HPL不错从超等筹算机的筹算性能、访存性能、汇注性能、可用性和稳重性等各个方面赐与超等筹算机概括评价.HPL的优化具有进击酷好, 在学界遥远受到温煦和商榷.HPL的优化不错为其他科学筹算应用的并行优化提供有价值的参考.
自1993年TOP500[3]排行驱动, 榜单中的超等筹算机的体绑缚构一直在发生变化.图 1展示了排行第一的筹算机的体绑缚构的变化.从图 1中咱们不错看到超算的体绑缚构从早期的向量处理器和单核通用CPU期间驱动, 然后演进到多核CPU期间, 超等筹算机的筹算智力也从GFLOPS晋升到TFLOPS.2008年的超算Roadrunner[4]象征着异构架构的超等筹算机体绑缚构的兴起, 随后异构架构驱动时常暴露, 超等筹算机参预了PFLOPS的期间.多样加快器, 如GPU、DSP、FPGA、MIC等王人看成加快卡出当今多样超算中, 我国有也了我方的国产加快器和国产处理器.伴跟着超算体绑缚构的变化, HPL算法的设想与驱散也应该相宜新的体绑缚构.在这种配景下, 本文建造了国产处理器-国产加快器异构架构上的HPL性能模子, 要点商榷了国产处理器-国产加快器异构架构下的HPL算法的设想与驱散.本文的主要孝敬如下:
Fig. 1 History of supercomputer architecture and computing power 图 1 超等筹算机体绑缚构与筹算智力发展历史● 本文建造了一个HPL性能模子.
● 针对国产处理器-国产加快器异构架构, 本文设想了一种多线程细粒度活水HPL算法, 充分利用异构系统中的多种硬件, 取得了跨越同类系统其他驱散的着力.
● 本文驱散了轻量级跨平台的异构加快框架HPCX.
本文第1节分析关联商榷.第2节先容HPL的性能模子.第3节给出针对异构架构的多线程细粒度活水HPL算法及异构加快框架HPCX.第4节呈现新HPL算法的性能以及分析.第5节总结全文.
1 关联商榷HPL是横量超算性能最进击的基准测试范例之一, 其性能看成TOP500排行的依据.由于HPL的进击地位, 国表里有很多针对Linpack的优化使命.这些使命东要勾通在HPL算法优化, 双精度矩阵乘法着力优化和HPL性能模子3个方面.
在Linpack算法优化方面, Dongarra等东说念主基于音信通讯接口(message pass interface, 简称MPI)和基本线性数学库(basic linear arithmetic subroutine, 简称BLAS)的Level 3函数驱散了散布式的HPL算法[1].在此基础上, 文件[5]提倡了一种单边通讯和动态look-ahead算法, 通过疏导第i+1轮迭代的panel领会与第i轮迭代的尾矩阵更新来驱散部分通讯与筹算的疏导.针对异构架构, Fatica通过将尾矩阵隔离为固定比例的两块分别分派给加快器和CPU以驱散CPU和加快器的协同筹算[6].Yang膨胀了Fatica的使命驱散了动态的CPU和加快器筹算任务隔离, 遴选凭据上一次筹算的CPU/加快器性能比决定下一轮任务隔离比例的战略[7].文件[8]驱散了一种work-stealing的战略来驱散CPU和加快器的筹算任务动态均衡, 何况利用有向无环图来羡慕算法中的筹算依赖联系.通过这种对依赖联系的分析, 文件[8]将行交换的过程分红几个部分, 通过行交换和尾矩阵更新的相彼此通探索了一种粗粒度的活水线算法.
看成HPL的中枢运算, 双精度矩阵乘法的优化在HPL的优化中占有进击地位何况得到了全面而深远的商榷.在传统CPU平台上, 文件[9]给出了CPU上的矩阵乘法的分层算法, 通过对CPU存储眉目的模拟设想出相应的多级分块缓存战略, 以尽可能地利用高速缓存中的数据.在包含加快器的异构架构上, 李佳佳等提倡了五阶段活水的异构矩阵乘算法来秘籍CPU与加快器之间的PCIe数据传输[10, 11].MAGMA[12]通过细粒度的任务隔离何况纯真地在CPU和加快器上调遣这些任务来驱散负载的动态均衡.为充分利用加快器如GPU的筹算智力, 文件[13]通过微基准测试来探伤GPU的体绑缚构, 在汇编话语层面作念了多种优化, 以驱散接近GPU表面浮点峰值性能的双精度矩阵乘着力[13].
对于HPL的性能建模, 文件[14]以计算HPL的膨胀性为谋划给出了HPL在CPU系统上的性能模子.HPL的求解时辰被建模为panel领会, panel播送, 行交换和尾矩阵更新的时辰之和, 并给出了模子中一些常量通盘的提醒值.王申等东说念主在这个基础上议论了look-ahead算法中部分播送支出不错被尾矩阵的更新和行交换所秘籍的情况[15], 给出了更为精准的模子.文件[16]以为上述模子的筹算王人不够精准, 因为模子中的常量值王人是提醒值, 而CPU筹算着力以及通讯带宽等模子常量王人会受数据量大小的影响.他们见解将这些常量通盘视为可变的, 通过已有的测试罢休去学习这些通盘, 用学习得到得通盘建模计算大边界求解的性能.
已有文件中对HPL的优化主要勾通在同构架构上的浅近算法优化和性能建模以及异构架构上的双精度矩阵乘的优化上, 而短少异构架构上的HPL的算法建模和算法活水层面的优化.本文在CPU的HPL性能模子的基础上建造了国产处理器-国产加快器异构架构上的HPL性能模子, 并提倡了多线程细粒度的HPL活水线算法, 以充分阐述异构系统中国产处理器的强大筹算智力.在驱散上, 咱们驱散了一个轻量级的跨平台异构加快框架HPCX, 并用坐蓐者消耗者模子来配合多线程和多流的协同筹算.
2 HPL算法和性能模子 2.1 HPL算法简介HPL算法通过迭代法求解N阶线性方程组Ax=b.求解过程包含两个范例, 起初通过带行交换的高斯消元法对通盘矩阵进行LU领会得到$[A{\rm{ }}b] = [[L, U]y]$, 然后进行三角回带求解x.其中LU领会的筹算量为$2{N^3}/3 - {N^2}/2$, 三角回带的筹算量为2N2[1].给定系统的表面浮点峰值性能和HPL的求解时辰T, 系统的实测浮点峰值性能Rmax不错暗示为${R_{{\rm{max}}}} = (2{N^3}/3 - {N^2}/2)/T$, HPL的着力E=Rmax/Rpeak.
$ A = \left( {\begin{array}{*{20}{c}} {{A_{11}}}&{{A_{12}}}\\ {{A_{21}}}&{{A_{22}}} \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {{L_{11}}}&{}\\ {{L_{21}}}&{{L_{22}}} \end{array}} \right)\left( {\begin{array}{*{20}{c}} {{U_{11}}}&{{U_{12}}}\\ {}&{{U_{22}}} \end{array}} \right) = \left( {\begin{array}{*{20}{c}} {{L_{11}}{U_{11}}}&{{L_{11}}{U_{12}}}\\ {{L_{21}}{U_{11}}}&{{L_{21}}{U_{12}} + {L_{22}}{U_{22}}} \end{array}} \right) $ (1)HPL的两个范例中LU领会的筹算量为O(N3)Risa最新番号, 三角回带的筹算量为O(N2), 比较于LU领会的时辰, 三角回带的时辰基本不错忽略[17], 是以咱们的优化也勾通在LU领会上.式(1)给出了LU领会的标记暗示, 寂静的算法数学诠释请参考文件[1].在驱散上, LU领会以NB列为迭代步进行迭代求解, 算法1给出了LU领会的寂静算法形色.每一轮迭代包含4个子过程, 分别是panel领会、panel播送、行交换和尾矩阵更新.其中panel领会(panel_factorization)通过递归高斯消元求解得到L11, U11和L21; panel播送(panel_bcast)将L11和L21播送给同业的行程度; 行交换(row_swap)凭据panel播送收到的行交换信息作念行交换; 尾矩阵更新(update)起初实施双精度三角矩阵求逆(DTRSM)得到U12, 然后通过将L21和U12作念双精度矩阵乘(DGEMM)更新A22矩阵.
算法 1. 并行LU领会算法.
1: for i=0; i < N; i+=NB do
2: panel_factorization(A, i, NB); // recursive panel factorization using Gaussian elimination
3: panel_bcast(L11, L21); // broadcast panel in row processes, including row swap information
4: row_swap(A12, A22); // pivoting according to swap information
5: update(A22, L21, U12); // first calculate U12 by DTRSM, then update A22 using DGEMM
6: end for
2.2 HPL性能模子.在已有的CPU HPL建模分析的基础上[14, 16-19], 咱们提倡了相宜于处理器-加快器异构架构的HPL性能模子.在具体先容咱们的HPL性能模子之前, 咱们先给出一些标记偏激含义, 大部分标记遴选与文件[17]中一致的称呼.矩阵A是N×(N+1)的通盘矩阵, 以NB×NB的块大小均匀散布在P×Q的二维程度网格中, mp×nq暗示每个程度处理的子矩阵的大小. ffact暗示panel领会中浮点操作的比例, Pcpu和Ecpu分别暗示国产处理器双精度浮点峰值性能和浮点操作的着力, Pacc暗示国产加快器双精度浮点峰值性能, Edgemm和Edtrsm分别暗示国产加快器上DGEMM和DTRSM的着力, 汇注延长为Lat s, 带宽为BW byte/s.对于panel领会子过程, 咱们通过猜度子过程中矩阵乘的筹算量乘以一个通盘来猜度举座的浮点筹算量, 式(2)给出了这一子过程的时辰猜度.其中需要特别指出的是, 咱们将panel领会中大矩阵放到国产加快器上进行筹算, 这在式(2)的分母中体现了出来.
$ {T_{{\rm{fact}}}} = \frac{{{f_{{\rm{fact}}}} \times mp \times NB \times NB}}{{{P_{{\rm{cpu|acc}}}} \times {E_{{\rm{cpu|dgemm}}}}}} $ (2)对于panel播送算法的遴荐, 咱们驱散中接收的是HPL软件包中复杂度较低的Long算法.它的复杂度为log级别, 体当今式(3)前半部分的通盘.每次播送, 咱们需要传输大小为NB×NB的L11和mp×NB的L12以及少许索引, 这些数据均为双精度类型(8字节), 公式的后半部分给出了每一跳(从一个节点传往下一个节点)的时辰猜度.式(3)给出了对这一过程的时辰猜度.
$ {T_{{\rm{bcast}}}} = \left( {\frac{{{{\log }_2}Q}}{2} + \frac{1}{Q} + 1} \right) \times (Lat + 8 \times \frac{{mp \times NB + NB \times NB + NB + 1}}{{BW}}) $ (3)行交换时辰的猜度样式与panel播送的猜度样式不异, 区别在于遴选的算法和传输的数据量不同.出于幸免冗尾数据传输的谋划, 行交换接收的是spread-roll算法[11], 式(4)给出了这一子过程的时辰猜度.
$ {T_{{\rm{swap}}}} = ({\log _2}P + P - 1) \times Lat + \left( {\frac{{{{\log }_2}P}}{2} + 2} \right) \times 8 \times nq \times \frac{{NB}}{{BW}} $ (4)尾矩阵更新的过程主淌若在国产加快器上实施两个BLAS库函数DGEMM和DTRSM, 其筹算量分别是$2 \times mp \times nq \times NB$和$nq \times NB \times NB$.式(5)给出了尾矩阵更新的时辰猜度.
$ {T_{{\rm{update}}}} = \frac{{2 \times mp \times nq \times NB}}{{{P_{{\rm{acc}}}} \times {E_{{\rm{dgemm}}}}}} + \frac{{nq \times NB \times NB}}{{{P_{{\rm{acc}}}} \times {E_{{\rm{dtrsm}}}}}} $ (5)性能模子中参数的值, 咱们分为两类.一类是不错先见的, 比如问题的边界, 分块的大小以及硬件的峰值浮点性能等等, 对于这一类参数, 咱们凭据系统硬件以及求解问题的实质边界设定好对应的值; 另一类是不不错先见的, 比如双精度矩阵乘的着力可能和矩阵的边界关联, 汇注的实质带宽和延长可能受发送的数据量的影响等等, 对于这一类参数, 咱们通过小边界实质测试给出其实测值.
咱们用TOP500榜单中排行靠前的与国产处理器-国产加快器不异的异构系统, 如Summit[20]、Serria[21]、ABCI[22]以及晨曦E级超算原型机对上述HPL性能计算模子进行了检修, 罢休见表 1[17].在大边界系统HPL性能计算的准确性上, 最大差错值不到5%.不错看到, 咱们建造的国产处理器-国产加快器异构HPL性能模子较为准确, 不错给将来E级机的建造提供参考.
Table 1 TOP500 supercomputer performance prediction 表 1 TOP500超等筹算机性能计算 3 多线程细粒度HPL算法设想及驱散在已有的文件中, LU领会的4个子过程, panel领会, panel播送, 行交换和尾矩阵的更新王人是端正实施的.在畴前纯CPU期间, 由于尾矩阵更新占据了90%以上的时辰, HPL的着力主要由DGEMM的着力决定, 其他3个子过程对性能的影响不大.此时这种端正实施4个范例, 或者通过浅近的look-ahead算法[5]驱散粗粒度活水的算法也能取得很好的效果.然则对于国产处理器-国产加快器异构架构, 由于国产加快器筹算智力与国产处理器的筹算智力存在1~2个数目级的差距, 尾矩阵更新的时辰占比减少到了50%傍边, 此时panel领会, panel播送和行交换对性能的影响就不成忽略.在这么的配景下, 探索一个新的细粒度活水算法用update的灵验筹算去秘籍panel领会、panel播送和行交换的支出对于晋升HPL的着力, 充分阐述国产加快器的刚劲筹算智力显得尤为进击.
3.1 多线程细粒度HPL算法的设想HPL耗时最多的筹算是尾矩阵A22更新的矩阵乘法筹算, 异构HPL算法加快的中枢是利用国产加快器加快矩阵乘法.传统的CPU-加快器异构HPL算法通过把panel领会的罢休L11, U12, L21矩阵拷贝到加快器内存, 同期将更新前的尾矩阵A22拷贝到加快器内存, 利用加快器求解U12和更新尾矩阵, 将更新后的尾矩阵$\widetilde {{A_{22}}}$拷贝回CPU内存[17].这种作念法将通盘矩阵放在CPU端内存中, 每次调用加快器的DGEMM王人需要把数据通过PCIe拷贝到加快器内存, 在完成筹算后又需要把罢休矩阵拷贝回CPU内存.在文件[6]中通过三阶段活水的见解用加快器上的筹算来秘籍PCIe数据传输的支出, 然则加快器算力增多的速率远远高于PCIe带宽的增多快度, 它们之间越来越大的差距使得加快器筹算的时辰无法秘籍PCIe传输的时辰.为了惩处这个问题, 咱们将通盘矩阵放在国产加快器的内存上, 这么就幸免了国产处理器和国产加快器之间多半的数据交换.只需要在国产处理器作念panel领会之前, 从国产加快器把panel需要的NB列数据拷贝总结就不错了.假定刻下迭代中剩余待求解通盘矩阵大小为$n \times (n + 1)$, 正本粗粒度并行的算法中, 咱们需要通过PCIe出动$8 \times (2 \times n \times {\rm{(}}n + 1{\rm{)}} + n \times NB + NB \times (N + 1))$字节的数据, 当今只需要出动$8 \times (2 \times n \times NB + NB \times (n + 1))$字节数据, 通过PCIe的数据传输量大大减少了.这个版块的HPL算法咱们称为粗粒度HPL算法.
粗粒度HPL算法存在两个问题导致其不成取得很高的性能.一个问题是由于尾矩阵更新时辰占比减少, 行交换的汇注传输的支出显得越来越大.另一个问题是通过浅近使用国产加快器的异步流机制让国产处理器端的panel领会和国产加快器端的update并行, 国产处理器与国产加快器只好很弱的并应用命的效果, 大部分时辰国产处理器与国产加快器王人是串行实施, 这形成了国产加快器多半的安静恭候时辰.为了惩处这两个问题, 咱们设想了一种国产处理器-国产加快器异构多线程细粒度活水算法.咱们通过对数据依赖的分析发现尾矩阵更新与行交换在列与列之间是没少见据依赖的.受此启发, 咱们在列方进取对尾矩阵进行分块, 如图 2所示, 将无缺的尾矩阵行交换和更新隔离红一个个由几许NB列块构成的单位进行行交换和更新.行交换主要利用PCIe和汇注, 对国产加快器的筹算资源占用率不高, 这么就用尾矩阵更新的筹算秘籍了行交换的支出[17].在上头细粒度任务隔离的基础上, 咱们引入了多线程多流机制来配合国产处理器与国产加快器的筹算.具体来说, 咱们引入了4个线程, 如图 3所示, thread 0妥当panel领会和panel播送, thread 1妥当PCIe的数据传输, thread 2妥当行交换, thread 3妥当尾矩阵更新.thread 1和thread 2两个线程运行在消失个国产处理器物理中枢上, thread 0和thread 3分别运行在其他两个国产处理器物理中枢上.除线程0外, 每个线程管制各自的异步流.通过利用线程间同步和流之间的同步来配合国产处理器与国产加快器的筹算, 最终驱散了如图 3所示的活水线.
av在线 Fig. 2 HPL fine-grained parallel data splitting (K is a multiple of NB) 图 2 HPL细粒度并行数据隔离(K是NB的倍数) Fig. 3 HPL multithread fine-grained parallel algorithm flow 图 3 HPL多线程细粒度并行算法经过图 3.2 多线程细粒度HPL算法的驱散咱们通过引入浅近的坐蓐者消耗者花样来羡慕细粒度算法的依赖联系, 以缩小多线程带来的支出, 驱散与文件[17]中作念法一致.如图 4所示, 行交换坐蓐者作念完一个列块的行交换之后, 生成一个更新任务放到更新任务部队里边; 妥当尾矩阵更新的线程看成消耗者, 取出更新部队内部的任务并实施, 同期尾矩阵更新线程如故传输任务的坐蓐者, 在实施完一个更新任务后, 生成一个传输任务放到传输任务部队里边; 妥当传输的线程从传输部队里取任务完成传输; 妥当panel领会的程度在恭候我方需要的列块数据更新完成之后就不错并行驱动作念下一轮的panel领会[17].各个线程间利用信号量驱散恭候和叫醒, 当任务部队为空的时刻, 相应线程就挂起, 幸免忙恭候带来的支出.
Fig. 4 HPL producer-customer model 图 4 HPL坐蓐者消耗者模子异构系统的加快器有多种, 比如GPU、MIC、FPGA、国产加快器等等.为了让异构HPL算法具有可移植性, 好像运行在多种异构平台上, 咱们完成了一个轻量级的异构加快框架HPCX[17].其驱散与文件[17]一致, 如图 5所示, 咱们抽象出了异构加快平台的一些共有特质, 比如内存管制, 并行筹算, 数据传输, 异次序用等等.同期咱们对不同厂商的异构加快器编程模子和基础数学库进行总结, 界说了一套长入的编程结构.在不同的加快器上, 使用不同的编程模子(HIP、CUDA、C)驱散, 底层用不同的编译器编译成不同平台上的二进制范例.目下HPCX援救国产加快器、AMD GPU和NVIDIA GPU以及国产处理器、Intel CPU和AMD CPU.对于其他异构加快器, 结合硬件平台给出HPCX界说抽象接口的具体驱散就不错便捷整理到HPCX框架中.异构并行HPL算法通过调用HPCX提供的编程接口驱散跨平台加快.
Fig. 5 Heterogeneous acceleration framework HPCX 图 5 异构加快框架HPCX 4 性能测试与分析咱们驱散了包括国产加快器和NVIDIA GPU两种异构平台上的粗粒度版块HPL和多线程细粒度版块HPL, 在国产加快器和NVIDIA两个平台上进行了测试.在NVIDIA平台上, 咱们将咱们驱散的两个版块的HPL与开源后果三阶段活水线版块HPL以及目下NVIDIA平台上着力最高的NVIDIA官方非开源范例nvhpl进行了对比.在国产加快器平台上, 咱们在晨曦E级超算原型机的512个节点上进行大边界膨胀性测试.
4.1 实践平台简介表 2给出了咱们实践平台的信息.在两种平台上, 单个节点内处理器与加快器王人通过PCIe 3.0总线衔接.NVIDIA平台上只好一个节点, 配有两张P100显卡.国产加快器平台上有多个节点, 每个节点上装有一个国产加快器, 节点之间接收100Gb/s的EDR汇注衔接.
Table 2 Configuration of computing nodes 表 2 筹算节点的竖立 4.2 性能与分析在NVIDIA平台上的单卡测试罢休如图 6所示.从图 6中咱们不错看到, 跟着问题边界的变大, 除了开源的3阶段活水线版块HPL的性能莫得太大提高外, nvhpl与咱们驱散的两个版块HPL均有彰着性能晋升.出现这种情况是因为3阶段活水线版块的HPL的矩阵位于CPU上, 而三阶段活水线无法用加快器的筹算秘籍PCIe数据传输的支出.咱们不错看到, 通过浅近地把矩阵放到加快器内存上, 粗粒度HPL就取得了很大的性能晋升, 阐述将矩阵置于加快器内存上是合理的.然则粗粒度HPL算法与nvhpl比较如故有较大差距, 原因是粗粒度HPL算法对加快器与处理器的并行度挖掘不够, 以及忽略了行交换中汇注通讯支出的优化.多线程细粒度HPL算法在作念完上述优化之后, 性能透澈卓著了nvhpl的性能, 平均率先nvhpl达9%.图 7展示了NVIDIA平台上多卡的测试罢休.由于三阶段活水线版块HPL速率太慢, 咱们略去了它的多卡测试.从图 7中咱们不错发现, 粗粒度HPL、多线程细粒度HPL与nvhpl王人有较好的膨胀性.在多卡测试上, 咱们的细粒度版块HPL如故率先nvhpl.
Fig. 6 HPL performance on single NVIDIA GPU 图 6 NVIDIA GPU单卡HPL性能 Fig. 7 HPL performance on multiple NVIDIA GPUs 图 7 NVIDIA GPU多卡HPL性能如图 8所示, 在晨曦E级原型机的512个节点上, 咱们进行了1~512个节点的膨胀性测试.从图 8中不错看出, 在不同测试程度边界下, HPL的膨胀性很好, 跟着节点的增多HPL的测试着力渐渐下落, 从2个节点约75%的着力下落到512个节点约71%的着力.需要堤防图中单节点着力偏低是因为单节点测试接收的NN体式(非转置非转置)的矩阵乘, 而多节点接收的NT体式(非转置转置)的矩阵乘, 前者的着力低于后者.咱们驱散的多线程细粒度版块HPL最终在512个节点上驱散了HPL实测峰值性能2.3 PFLOPS, 实测着力71.1%优秀测试罢休.
Fig. 8 Sugon E-prototype supercomputer HPL performance 图 8 晨曦E级超算原型机HPL性能 5 论断本文提倡的异构HPL算法通过将矩阵存储于国产加快器的内存惩处了数据传输瓶颈, 通过多线程细粒度的算法软活水驱散了对通讯支出的秘籍, 通过一个轻量级异构加快框架HPCX提供的对国产加快器的基本操作的抽象驱散了跨平台的异构HPL算法.在同类异构系统上, 咱们驱散的算法性能远远跨越开源的使命Risa最新番号, 何况优于NVIDIA公司的非开源HPL范例.咱们的算法也展示了邃密的膨胀性, 在晨曦E级超算原型机512个节点HPL测试中驱散了71.1%的着力.同期, 咱们的性能模子也展示了较高的准确性, 不错为改日E级异构超算的HPL性能计算提供参考.