基于连通分量生成优化的超级计算机基准测试加速方法技术

技术编号:28673662 阅读:22 留言:0更新日期:2021-06-02 02:49
本发明专利技术公开了一种基于连通分量生成优化的超级计算机基准测试加速方法,目的是最小化通信路径、最大化访存带宽利用率,对超级计算机大数据基准测试进行加速;技术方案是利用Graph500生成的图中包含多个连通分量的特点,在图中快速找到连通分量,采用二维向量存贮连通分量,并对连通分量中顶点的父子关系进行路径压缩且对根顶点不同的两个连通分量进行合并,把同一个连通分量的顶点划分到超级计算机中通信路径较短的物理节点上,使得图遍历访问时通信开销小,运算速度快。采用本发明专利技术可以有效快速地存储图中所有连通分量,最大限度提高合并速度,加快根顶点的查询速度,减小内存中栈的占用开销,提高超级计算机大数据处理能力测试速度。

【技术实现步骤摘要】
基于连通分量生成优化的超级计算机基准测试加速方法
本专利技术涉及超级计算机大数据基准测试加速方法,尤指一种基于二维向量和路径压缩的连通分量生成优化进行基准测试加速的方法。
技术介绍
图作为一种常见的数据结构,可以用来抽象表达现实事物间各种复杂的关联关系。例如,社交网络、万维网等都可以采用图表示。图计算是针对图数据进行处理和计算,在现实生活中诸多场景都发挥着重要作用。近年来,图数据的规模不断增长,根据相关报告显示,2020年第三季度,Facebook每日活跃用户为18.2亿,腾讯微信及WeChat月活跃用户达到12.1亿,把用户和其之间的关系抽象为图中的点和边,那么图中点的规模达到了数十亿,边的规模更是达到了数千亿。这导致在数据存储和计算力方面具有更高的需求。超级计算机主要用于数值计算,在数据密集型应用广泛兴起的大数据时代,Graph500是测试超级计算机计算力(即超级计算机对数据的处理能力)的重要基准测试程序。Graph500以每秒遍历图中边的数量TEPS(TraversedEdgePerSecond)来衡量超级计算机的大数据处理能力。Graph500基准测试程序由图生成、图建立、BFS搜索与验证、结果输出四步组成,如图1所示。(1)图生成:通过Kronecker图生成器生成随机图结构G=(V,E),V为顶点集合,E为边集合,图的规模由用户输入的参数scale、edgefactor确定,其中,scale指示图的顶点规模,edgefactor指示每个顶点连接边的平均数量,N=2scale表示输入图的顶点数目即V的元素数量,M=edgefactor*N表示输入图的边数目即E的元素数量。通常使用vi表示图中编号为i的顶点,使用顶点对(vi,vj)表示顶点i到顶点j的边。(vi,vj)∈E,0≤i≤N-1,0≤j≤N-1,N=2scale为V中顶点个数。(2)图建立:将第一步生成的顶点和边信息转化成任意表示图的数据结构,标准Graph500中采用图的邻接矩阵来存储图信息。(3)BFS(Breadth-FirstSearch宽度优先搜索)搜索与验证:随机生成一个根项点,并以此为源点对整个图进行BFS搜索,输出生成树作为搜索结果,记录Graph500有效计时时间t,并验证搜索得到的BFS生成树是否与原图信息匹配。该过程将循环64次,且分别对每次BFS搜索部分计时。(4)结果输出:Graph500用每秒遍历的边数TEPS来衡量程序的执行性能,TEPS=生成图的边数M除以BFS搜索时间t,即,64次循环遍历分别计算TEPS=M/t,然后取64个TEPS的平均值作为Graph500最终测试和排名的依据。综上所述,Graph500中BFS搜索中需要对图中所有顶点依次遍历,这些顶点分布在超级计算机众多的物理节点上,因此,访存带宽是影响Graph500的性能的关键因素。并且,Graph500的衡量依据中主要将BFS搜索时间作为衡量时间,并未限定BFS之前的图数据准备。Graph500主要应用于超级计算机系统对大数据的计算能力的基准测试,超级计算机系统通常由计算节点、存储节点、互连网络组成,其中,计算节点和存储节点通过交换机由互连网络连接组成超级计算机系统,节点间的交互信息均通过交换机转发(2个相互通信的节点间需要通过的交换机个数称为节点间路径的跳数,跳数越多则路径越长),转发消息经互连网络到达目标节点,通常情况下,存储节点的存储空间会均匀映射至计算节点,即多个计算节点可以共享一个存储节点,但是计算节点访存非映射存储空间(即计算节点访存的不是本计算节点对应的存储空间)则需要互连通信,Graph500测试性能主要受限于内存大小和访存带宽,带宽越高,性能表现也越好。因此,若2个需交互的计算节点共享存储空间,则可以减小通信路径,提高访存速度。专利“基于顶点重排序与优先缓存的大数据处理能力测试方法”(专利申请号:202010748396.3)中,利用BFS遍历中度数高的顶点与根节点之间存在边关系的概率高的特点,提出一种基于顶点重排序与优先缓存的大数据处理能力测试方法,减少了访存次数,但该方法没有考虑大图中连通分量的连通性。无向图的连通分量,也叫极大连通子图,指每对顶点都能通过通路来互相连通的子图。连通分量算法通常是大规模图处理的重要一步。非连通图可分解为多个连通分量,而每个连通分量又各自对应至少1个生成树(包含连通分量所有顶点的树),这些连通分量的生成树的集合构成连通森林。若在点划分时把同一个连通分量中的顶点划分到通信路径较短的物理节点上,即在Graph500基准测试程序的图建立过程(即第二步)中依据计算机系统网络拓扑结构将存在边关联的顶点尽可能分布至同层交换机路由范围内,在此基础上运行BFS,则可以提高超级计算机系统带宽利用率,实现负载均衡,降低通信开销,加快生成树的生成。多个学者在单处理器和多处理器上实现了连通分量算法的优化,但目前连通分量算法只应用于可达性查询、一致性检测等场景,还没有公开文献涉及将连通分量算法应用于超级计算机大数据基准测试加速。利用Graph500生成的图中包含多个连通分量,如果能对连通分量实现算法进行优化无疑会对超级计算机大数据基准测试进行加速。并查集算法是连通分量的实现方式之一,传统的并查集算法包括以下步骤:第一步,查找当前访问边的两个顶点的根顶点(即find),如图2(a)所示,图2(a)为查找(find)操作,表示在树中通过不断追溯父亲顶点来查找根顶点。第二步,如果根顶点不同,对两个顶点所在的集合进行合并(即union)。如图2(b)所示,图2(b)为合并(union)操作,表示将根顶点不同的2个树合并为1棵树。并查集算法把每个集合用1个树来表示,每个顶点均有其父亲顶点,不断寻找父亲顶点,直到父亲顶点是自身就找到了树根,这是所有顶点的根顶点。传统的并查集算法中,在union(合并)时只改变部分顶点的父亲顶点,导致在find(查找)阶段多次调用查找父亲顶点的函数(含有函数递归),在大规模图计算中,函数递归的开销无疑是巨大的。因此这样的并查集算法无法直接用于超级计算机大数据基准测试加速。虽然也出现了路径压缩的优化算法来优化并查集算法,例如,1985年SIAMJournalonComputing(SICOMP)的论文“Ontheexpectedperformanceofpathcompressionalgorithms”(关于路径压缩算法的预期性能)分析了路径压缩的复杂度,使得在做查找时无需多次调用查找父亲顶点的函数,减少函数递归,但目前路径压缩的优化算法未考虑与数据结构的耦合度,导致优化效果一般。因此进行了路径压缩的并查集算法也无法直接用于超级计算机大数据基准测试加速。因此,如何最小化通信路径、最大化访存带宽利用率,对超级计算机大数据基准测试进行加速仍然是本领域技术人员亟需解决的技术难题。
技术实现思路
本专利技术要解决的技术问题在于:最小化通信路径、最大化访存带宽利用率,对超级计算机大数据基准测试进行加速。技术方案本文档来自技高网
...

【技术保护点】
1.一种基于连通分量生成优化的超级计算机基准测试加速方法,其特征在于包括以下步骤:/n第一步、图生成,通过Kronecker图生成器生成随机图结构G=(V,E),V为顶点集合,E为边集合,图的规模由用户输入的参数scale、edgefactor确定,其中,scale指示图的顶点规模,edgefactor指示每个顶点连接边的平均数量,N=2

【技术特征摘要】
1.一种基于连通分量生成优化的超级计算机基准测试加速方法,其特征在于包括以下步骤:
第一步、图生成,通过Kronecker图生成器生成随机图结构G=(V,E),V为顶点集合,E为边集合,图的规模由用户输入的参数scale、edgefactor确定,其中,scale指示图的顶点规模,edgefactor指示每个顶点连接边的平均数量,N=2scale表示G的顶点数目,即V的元素中的顶点个数,M=edgefactor×N表示G的边数目即E的元素数量;使用vi表示G中编号为i的顶点,使用顶点对(vi,vj)表示顶点vi到顶点vj的边;(vi,vj)∈E,i和j均为正整数且0≤i≤N-1,0≤j≤N-1;
第二步、构建存储图G的邻接矩阵A,Aij=0表示顶点vi与顶点vj之间没有边,Aij=1表示顶点vi与顶点vj之间有边;
第三步、数据结构初始化,把V中所有顶点的根顶点和子顶点设置成相应的值,遍历边集合E,去除边集合E中的自环边即顶点与自身连接的边,并根据边的两个顶点的不同情况来分类,方法是:
3.1.根据图G的数据规模scale,初始化V中所有顶点的根顶点向量root和二维子顶点向量son,root中包含N个元素,root[vi]表示顶点vi的根顶点,将root[vi]初始化为-1,son是二维向量,包含N个元素,每个元素都是一个向量,将son中的每个元素初始化为空向量;son[vi]表示顶点vi的子顶点向量,用来存储以顶点vi为根顶点的顶点集合,即以顶点vi为根顶点的连通分量的顶点信息,连通分量是root值为自身的顶点在son向量中所存储的内容;初始化变量e=1;
3.2.创建与Graph500源代码中边数据存储格式相一致的结构体packed_edge,packed_edge包含三个int类型的整型变量,第一个变量v0_low是构成边的第一个顶点的ID,第二个变量v1_low是构成与v0_low第一个变量相连边的第二个顶点的ID,第三个变量high留作功能扩展所用;用e_b.v0_low表示ID为v0_low的边e_b的第一个顶点,用e_b.v1_low表示ID为v1_low的边e_b的第二个顶点;
3.3.用结构体packed_edge创建一条边e_b,用于存贮从E中读取的边信息;
3.4.若e>M,表示边集合E已处理完毕,转第六步,否则,从边集合E中按顺序读取第e条边,令e_b=第e条边,其中e_b.v0_low和e_b.v1_low就是构成e_b的两个顶点,令e=e+1,转3.5;
3.5.如果e_b.v0_low≠e_b.v1_low,说明e_b.v0_low和e_b.v1_low连成的边不是自环边,转3.6,否则,说明e_b.v0_low和e_b.v1_low连成的边是自环边,直接转3.4;
3.6.判定e_b.v0_low和e_b.v1_low的根顶点是否相同,如果root[e_b.v0_low]=root[e_b.v1_low],转第四步,如果不相等,转第五步;
第四步、处理根顶点相同的情况,如果e_b.v0_low和e_b.v1_low均未被访问过,则将e_b.v0_low和e_b.v1_low合并到以e_b.v0_low为根顶点的连通分量son[e_b.v0_low]中,如果e_b.v0_low和e_b.v1_low均被访问过,说明e_b.v0_low和e_b.v1_low已经在同一个连通分量里了,则跳过e_b,访问E中下一条边,方法是:
4.1.如果root[e_b.v0_low]=-1,说明e_b.v0_low和e_b.v1_low均未被访问过,e_b.v0_low和e_b.v1_low所构成的边是第一次访问,转4.2;否则,说明e_b.v0_low和e_b.v1_low均被访问过且已经处于同一个连通分量son[root[e_b.v0_low]]中,不需要进行合并操作,转3.4;
4.2.将e_b.v1_low合并到以e_b.v0_low为根顶点的连通分量中,把e_b.v0_low设置成e_b.v0_low和e_b.v1_low两个顶点的根顶点,e_b.v0_low和e_b.v1_low的root向量对应的元素均设置为e_b.v0_low,即令root[e_b.v0_low]=e_b.v0_low,root[e_b.v1_low]=e_b.v0_low;
4.3.在e_b.v0_low对应的son向量中插入e_b.v0_low和e_b.v1_low的ID号,即在连通分量son[e_b.v0_low]中添加新的顶点信息,即将e_b.v0_low插入到son[e_b.v0_low],将e_b.v1_low也插入到son[e_b.v0_low]),转3.4;
第五步、根据根顶点不同的情况对顶点的父子关系进行路径压缩,并对根顶点不同的两个连通分量进行合并,方法是:
5.1.如果root[e_b.v0_low]=-1,转5.2,否则,转5.3;
5.2.此时顶点e_b.v1_low已被...

【专利技术属性】
技术研发人员:白皓甘新标张一鸣李东升贾孟涵谭雯司嘉奇来宪龙李海莉来乐宣栋梁苏鸿宇王庆坤徐云鹏
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1