CN117851015A - 一种应用多gpu协同进行单源最短路径计算方法 - Google Patents
一种应用多gpu协同进行单源最短路径计算方法 Download PDFInfo
- Publication number
- CN117851015A CN117851015A CN202410033218.0A CN202410033218A CN117851015A CN 117851015 A CN117851015 A CN 117851015A CN 202410033218 A CN202410033218 A CN 202410033218A CN 117851015 A CN117851015 A CN 117851015A
- Authority
- CN
- China
- Prior art keywords
- light
- edges
- vertex
- edge
- graph data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000004364 calculation method Methods 0.000 title claims abstract description 17
- 238000000034 method Methods 0.000 title claims description 46
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 71
- 238000012545 processing Methods 0.000 claims description 33
- 230000008569 process Effects 0.000 claims description 25
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 230000009286 beneficial effect Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000001788 irregular Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
Landscapes
- Image Generation (AREA)
Abstract
本发明提供了一种应用多GPU协同进行单源最短路径计算方法,包括步骤:S1、获取原始的第一图数据和预设的步进增量,根据步进增量预先确定第一图数据中的轻边和重边,构建在不同子图分别存储轻边和重边的局部感知的第二图数据;S2、将所述第二图数据中的轻边和重边均衡划分为N份,并根据每份划分到的轻边和重边,生成在不同子图分别存储轻边和重边的第三图数据,得到N份第三图数据,所述N为参与计算的GPU的数量,N≥2;S3、获取源顶点,由N个GPU读取各自分到的第三图数据,基于德尔塔步进算法协同进行单源最短路径计算,确定源顶点到每个顶点间的最短路径;本发明提升了确定单源最短路径的效率。
Description
技术领域
本发明涉及计算机技术领域,具体来说涉及图数据处理领域,更具体地说,涉及一种应用多GPU协同进行单源最短路径计算方法。
背景技术
图(Graph)作为表达对象及其复杂关系的一种基本数据结构,已经渗透到很多关键应用中。为更好地分析、研究和挖掘图数据中潜在的联系与价值,图计算技术应运而生,并在互联网、金融、医疗、能源、脑科学等领域有着广阔的应用前景。其中,单源最短路径算法(Single Source Shortest Path,简称SSSP算法)作为图计算技术中的一种基础图遍历算法,已成为学术界和工业界研究的热点之一。
SSSP算法的基本思想是从图中任意一个顶点出发,遍历计算该顶点到图中其它所有顶点的最短距离。典型的SSSP算法是迪杰斯特拉算法(Dijkstra)和贝尔曼-福特(Bellman-Ford)算法。Dijkstra算法基于贪心的思想,每次遍历到起始顶点距离最近且未访问过的顶点的邻居顶点,直到所有顶点都被访问过。处理过程中,为快速找到距离起始顶点最短的距离,迪杰斯特拉算法经常使用优先级队列。对于图中的任意一个顶点的距离,迪杰斯特拉算法最多只更新一次,故它是工作高效的。然而,对GPU来说,优先级队列结构较难实现,同时,迪杰斯特拉算法每次迭代,只处理一个顶点,故其并行性较差。与迪杰斯特拉算法不同,贝尔曼-福特算法(Bellman-Ford)并行性较好,因为它每次可以处理多个活跃的顶点。但是,贝尔曼-福特算法会导致顶点更新多次,所以它的工作效率较差。
为了权衡算法的并行性和高效性,德尔塔步进算法(Δ-Stepping算法)被提出,它综合了迪杰斯特拉算法和贝尔曼-福特算法的思想,引入了桶(后面简称bucket)和Δ(delta,即步进增量)的概念,并依据Δ值,将每个顶点的邻边分为轻边(或者称light边)和重边(或者称heavy边),同时依据距离值,将所有的顶点放在不同的桶中。对整数i(i≥0),Bi(第i个桶)将存储距离属于[i·Δ,(i+1)·Δ)的所有顶点。德尔塔步进算法按照桶的编号的顺序从小到大依次对非空桶进行处理,直到不存在任何活跃的顶点为止。其处理过程包括三个阶段:阶段一,循环处理当前桶中所有点的所有轻边,直到当前桶的所有轻边不会带来相关顶点的最短路径/距离更新;阶段二,对所有距离落在当前桶中的顶点,基于它们的重边,执行相关邻居顶点的最短路径/距离更新;阶段三,遍历所有的顶点,筛选出距离落在下一个桶中的所有顶点,同时更新桶信息,以进入下一个桶的处理。其中,阶段一和阶段二会执行SSSP算法的基本操作,即松弛边操作。该松弛边操作,针对一个顶点u和它的一个邻边e(u,v,w),它会判断v顶点的最短距离dist[v]与dist[u]+w的大小,如果dist[v]大于dist[u]+w,则用dist[u]+w更新dist[v],否则不进行任何处理。其中,e(u,v,w)表示顶点u和顶点v之间的边,该边的权重为w。
由于德尔塔步进算法很好地权衡了迪杰斯特拉算法和贝尔曼-福特算法,故得了业界普遍的关注与研究。但因图数据的局部性差,分布不规则,图算法执行依赖复杂等,使得德尔塔步进算法在GPU上处理时面临着访存效率低、冗余开销大、负载不均衡、收敛速度慢等难题,其性能难以满足实际应用需求。
发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种应用多GPU协同进行单源最短路径计算方法。
本发明的目的是通过以下技术方案实现的:
根据本发明的第一方面,提供一种应用多GPU协同进行单源最短路径计算方法,包括步骤:S1、获取原始的第一图数据和预设的步进增量,根据步进增量预先确定第一图数据中的轻边和重边,构建在不同子图分别存储轻边和重边的局部感知的第二图数据;S2、将所述第二图数据中的轻边和重边均衡划分为N份,并根据每份划分到的轻边和重边,生成在不同子图分别存储轻边和重边的第三图数据,得到N份第三图数据,所述N为参与计算的GPU的数量,N≥2;S3、获取源顶点,由N个GPU读取各自分到的第三图数据,基于德尔塔步进算法协同进行单源最短路径计算,确定源顶点到每个顶点间的最短路径。本发明通过考虑德尔塔步进算法的特性,在执行德尔塔步进算法前先将轻边和重边划分到不同的子图中存储,充分考虑了德尔塔步进算法不同阶段访问不同类型边数据的执行特性,执行过程中访存效率得到显著提升,并减少了一定的冗余开销,提升了确定单源最短路径的效率,原因是德尔塔步进算法执行过程中,是分阶段处理的,所以把轻边和重边分开,数据的局部性能够变好,访存效率将得到提升;另外,通过轻边和重边的均衡划分,可以让各GPU更高效地协同确定最短路径。
可选的,所述步骤S1包括:S11、获取预设的调整参数和原始的第一图数据,根据所述调整参数、第一图数据中顶点间边的权重和度信息确定步进增量,其中,所述调整参数与GPU执行调度的基本单位所含的线程数相关;S12、将第一图数据中边的权重小于等于所述步进增量的边划分为轻边,其余的边划分为重边;S13、根据各个轻边构建第二图数据中的轻边子图,根据各个所述重边构建第二图数据中的重边子图。本发明通过将步进增量与GPU执行调度的基本单位所含的线程数相关,充分考虑GPU的并行能力,提升德尔塔步进算法的执行效率。
可选的,第二图数据以CSR结构存,第二图数据的顶点编号是根据顶点的轻边数量大小重映射得到的重映射编号,并且建立同一顶点的重映射编号与原始编号的关联,其中,顶点的轻边数量相对越大则重映射编号越小。考虑到德尔塔步进算法在阶段一执行过程中,会频繁访问轻边度高的顶点,对此,算法执行前,本发明依据图数据顶点的轻边数目的降序对图数据顶点进行重编号,得到重映射编号,以提升数据局部性,从而提高访存效率。
可选的,所述第二图数据的邻边表中,同一顶点的权重越小的邻居顶点排在更靠近表头的位置。
可选的,所述步骤S2包括:S21、以单个顶点为划分单位,均衡地将所述第二图数据中轻边子图的各顶点关联的轻边分给N个GPU;S22、以单个边为划分单位,均衡地将所述第二图数据中重边子图的各个重边分给N个GPU;S23、根据步骤S21划分给每个GPU的轻边和步骤S22划分给每个GPU的重边,生成在不同子图分别存储轻边和重边的第三图数据。本发明采用任务驱动的图数据划分的策略,即对轻边以节点为单位划分,以保证划分的所有顶点的轻边存在一个GPU节点上,在后续德尔塔步进算法根据同一顶点进行关联的顶点的最短路径的距离更新时,可以减少不同GPU就同一顶点相关的数据进行同步,提高处理效率;另外,考虑到阶段二主要针对重边进行处理,重边以边为单位划分,即采用边中心的数据划分,从而保证划分到每个GPU上的重边信息粗粒度的相近即可;通过任务驱动的图数据划分,充分考虑了图数据特性和GPU数目,从而大致确保了数据划分的均衡性,同时减少了德尔塔步进算法在一轮迭代中的数据同步开销。
可选的,在步骤S3中,按以下方式为活跃顶点分配工作线程:获取预设的多个轻边数目范围以及每种轻边数目范围对应粒度单位,其中,越大的轻边数目范围对应的粒度单位所含的线程数越大;根据每个活跃顶点的轻边数目判断所处的轻边数目范围,按所处的轻边数目范围确定每个活跃顶点对应的粒度单位;按每个活跃顶点对应的粒度单位,为每个活跃顶点创建处理其对应任务的工作线程。本发明对粒度单位按不同的轻边数目范围进行设置,差异化地为具有不同轻边数目的活跃顶点分配适宜的GPU资源,相对于使用自适应分配粒度单位的并行调度,使得算法执行过程中各GPU资源的利用率得到明显提升,从而使得算法在GPU平台上获得较好的性能。
可选的,在步骤S3中,设置三个轻边数目范围,分别为第一数目范围[1,32),第二数目范围[32,256)和第三数目范围[256,+∞),其中,第一、第二和第三数目范围对应的粒度单位所含的线程数依次为1、32和256,其中,当一个活跃顶点的轻边数目t处于第一数目范围时,创建t个以Thread为粒度单位的工作线程处理该活跃顶点对应的任务;当一个活跃顶点的轻边数目m处于第二数目范围时,创建个以Warp为粒度单位的工作线程处理该活跃顶点对应的任务;当一个活跃顶点的轻边数目n处于第三数目范围时,创建/>个以CTA为粒度单位的工作线程处理该活跃顶点对应的任务。
可选的,在每个GPU中,设置有管理线程和工作线程,所述工作线程包括小任务工作线程、中任务工作线程和大任务工作线程,其中,由管理线程将按第一数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给小任务工作线程处理,由管理线程将按第二数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给中任务工作线程处理,由管理线程将按第三数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给大任务工作线程处理。本发明对粒度单位按不同的轻边数目对应多种任务类型,通过使用自适应的任务类型并行调度,算法执行过程中各GPU资源的利用率得到明显提升,从而使得算法在GPU平台上获得较好的性能。
可选的,在步骤S3中,同一活跃顶点对应的任务以同步的方式执行,不同活跃顶点对应的任务间异步并行执行。
可选的,所述第一图数据中的顶点代表地点,两个顶点间的边代表路径,边的权重代表路径长度。
附图说明
以下参照附图对本发明实施例作进一步说明,其中:
图1为根据本发明实施例的应用多GPU协同进行单源最短路径计算方法的流程示意图;
图2为根据本发明实施例的多种图数据的示意图;
图3为根据本发明实施例的基于任务驱动的图数据划分策略的示意图;
图4为根据本发明实施例的划分不同粒度单位的工作线程的示意图;
图5为根据本发明实施例的方法采用的计算设备的示意图。
具体实施方式
为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如在背景技术部分提到的,德尔塔步进算法在GPU上处理时面临的访存效率低、负载不均衡、收敛速度慢等问题仍未得到很好解决。对此,申请人结合德尔塔步进算法各阶段的特点和GPU的并行处理特性,在基于德尔塔步进算法对图数据进行处理前,先对原始的图数据(第一图数据)根据与预设的步进增量进行轻边和重边的划分,轻边和重边划分到不同的子图(即第二图数据包括仅含轻边的子图和仅含重边的子图);然后再均衡划分给多个GPU中(N个),每个GPU得到的每份第三图数据中,轻边和重边也是单独存储在不同的子图;通过考虑德尔塔步进算法的特性,在执行德尔塔步进算法前先将轻边和重边划分到不同的子图中存储,充分考虑了德尔塔步进算法不同阶段访问不同类型边数据的执行特性,执行过程中访存效率得到显著提升,并减少了一定的冗余开销,提升了确定单源最短路径的效率;最后由多个GPU根据各自得到第三图数据,基于德尔塔步进算法协同进行单源最短路径计算,确定源顶点到每个顶点间的最短路径;由此,通过轻边和重边的均衡划分和多GPU协调处理,可以让各GPU更高效地协同确定最短路径。
在对本发明的实施例进行具体介绍之前,先对其中使用到的部分术语作如下解释:
图数据(Graph),是指包括多个顶点和多个边的图结构数据。其中,顶点代表实体,边表示顶点间的关系,边的权重表示顶点间关系的属性值。例如,当实体是地点,边表示地点间的路径,权重代表地点间的路径的距离值。又比如,当实体是人,边表示人之间的社交关系,边的权重可以表示人之间的亲密度或者交互频繁程度等。
轻边,是指边的权重小于等于步进增量的边。
重边,是指边的权重大于步进增量的边。
根据本发明的一个实施例,本发明提供一种应用多GPU协同进行单源最短路径计算方法,参见图1,包括步骤:S1、S2和S3,为了更好地理解本发明,下面结合具体的实施例针对每一个步骤分别进行详细说明。
步骤S1:获取原始的第一图数据和预设的步进增量,根据步进增量预先确定第一图数据中的轻边和重边,构建在不同子图分别存储轻边和重边的局部感知的第二图数据。
根据本发明的一个实施例,第一图数据中的顶点代表地点,两个顶点间的边代表路径,边的权重代表路径长度。由此,后续可以通过本发明方法求解一个源顶点(比如地点A)到各个顶点(其他地点)的最短路径。比如,算出的最短路径可以用于导航时根据需要选择最短路径对应的路线。当然,此处仅为示意,也可应用到其他方面。比如:第一图数据的顶点也可以是人,两个顶点间的边代表人之间的关系,边的权重代表亲密度。找出的人员间的最短路径可以用于帮助分析人员间的社交关系。
参见图2,其中图2a为一张用于示意的原始的第一图数据的图形化表示,其中有顶点0、1、2、3、4、5、6,顶点间的连线代表边,边上的数值代表边的权重,比如顶点3和5之间的权重为12,其余类似,不作赘述。优选的,图数据可以采用CSR格式存储。示意性的,原始的第一图数据的CSR(Compressed Sparse Row)表示见图2b,CSR是一种常用的稀疏矩阵存储格式,它将稀疏矩阵以三个数组的形式存储,三个数组分别为偏移值、邻边表和边值表,偏移值存储图数据中顶点在邻边表的起始偏移位置,邻边表存储图数据中所有顶点的所有邻居顶点,边值表存储图数据中所有顶点与各邻居顶点对应边的权重。这种原始的第一图数据的表示形式下,轻边和重边是混合存储,一方面单个图数据的大小较大,可能会被分割为更多的数据块分散存储,当前处理的活跃顶点位于不同数据块的可能性更大,访存时可能需要不断地改变需要访问的数据块而得到所需的数据,导致访存效率不高。
可选的,步进增量可以由用户根据经验预设,比如设为6、12、18、32等。此处可以是用户直接根据经验来设置,不考虑GPU特性。
但是,为了更好地考虑GPU的特性,实现更高效的计算,可以进一步改进。根据本发明的一个实施例,所述步骤S1包括:S11、获取预设的调整参数和原始的第一图数据,根据所述调整参数、第一图数据中顶点间边的权重和度信息确定步进增量,其中,所述调整参数与GPU执行调度的基本单位所含的线程数相关;S12、将第一图数据中边的权重小于等于所述步进增量的边划分为轻边,其余的边划分为重边;S13、根据各个轻边构建第二图数据中的轻边子图,根据各个所述重边构建第二图数据中的重边子图。
优选的,步进增量按照以下方式计算:Δ=Gd*W/D,其中Gd为GPU执行调度的基本单位所含的线程数(当前主流GPU对应的Gd为32),W为第一图数据的平均权重,即第一图数据的所有边的权重之和除以边的总数;D为第一图数据的平均度,即第一图数据的所有顶点的度数之和除以顶点的总数。
应当理解的是,实际执行中Gd的可根据数据集的特性进行适当调整,从而得到其他实施方式。比如:可选的,Δ=γGd*W/D,其中,γ表示对Gd的比重进行调整的系数,该系数的大小可以由用户根据需要设置。
该实施例的技术方案至少能够实现以下有益技术效果:本实施例的步进增量与GPU执行调度的基本单位所含的线程数相关,充分考虑GPU的并行能力,提升德尔塔步进算法的执行效率。
可选的,在从第一图数据划分得到轻边子图和重边子图时,一种可行的方式是直接保留原来的顶点编号,得到保留第一图数据中顶点编号的第二图数据。由于将第一图数据划分得到轻边子图和重边子图,可以使得在德尔塔步进算法的不同阶段所需的数据分别保存在不同的子图中,同一阶段访问的数据更集中,需要访问的数据则更加集中在某些数据块中,提升访存效率。
但是,考虑德尔塔步进算法在阶段一执行过程中,其工作负载是顺序敏感的,故为减少冗余计算,可以进一步改进。根据本发明的一个实施例,第二图数据以CSR结构存,第二图数据的顶点编号是根据顶点的轻边数量大小重映射得到的重映射编号,并且建立同一顶点的重映射编号与原始编号的关联,其中,顶点的轻边数量相对越大则重映射编号越小。示意性的,假设步进增量Δ=6,从第一图数据先分出如图2c所示的原始轻边子图数据和如图2d所示的原始重边子图数据。此处,考虑到阶段一的访存特征,按照顶点的轻边数量(轻边度)重映射顶点编号,比如顶点0和1的轻边数量分别为4(最大)和3(次大),则重映射后顶点0的顶点编号依然是0,顶点1的顶点编号依然是1。顶点的轻边数目排第3的是原来的顶点3,则重映射后顶点3的顶点编号是2。在两个顶点的轻边数目相同时,重映射时可以考虑按原顶点编号的排序来编号。可选的,当两个顶点的轻边数目相同时,顶点在第一图数据中的顶点编号相对越小则重映射编号越小。比如:图2c和图2e所示的,对于图2c中轻边数目都是1的顶点2、5、6,重映射后顶点2的顶点编号是3,重映射后顶点5的顶点编号是4,重映射后顶点6的顶点编号是5;对于图2c中轻边数目为0的顶点4,重映射后顶点4的顶点编号是6。当然,实施者也可能有其他实施方式,比如:当两个顶点的轻边数目相同时,也可以是顶点在第一图数据中的顶点编号相对越小则重映射编号越大。该实施例的技术方案至少能够实现以下有益技术效果:考虑到德尔塔步进算法在阶段一执行过程中,会频繁访问轻边度高的顶点,对此,算法执行前,本发明依据图数据顶点的轻边数目的降序对图数据顶点进行重编号,得到重映射编号,以提升数据局部性,从而提高访存效率。
另外,通过分析,权重越小的边先用于更新,会减少松弛更新数据的操作,也能减少访存。根据本发明的一个实施例,所述第二图数据的邻边表中,同一顶点的权重越小的邻居顶点排在更靠近表头的位置。由于第二图数据分为轻边子图和重边子图。第二图数据的邻边表则对应分为轻边子图对应的轻边边表和重边子图对应的重边边表。对应的,第二图数据的轻边边表中同一顶点的权重越小的轻边邻居顶点排在更靠近表头的位置。示意性的,图2e中顶点0的邻居顶点1、2、3、4的权重分别为2、5、3、4,若不采用本实施例,则轻边的轻边边表(相对于轻边子图的邻边表)也可以按邻居顶点编号排序,则轻边边表中应按顶点1、2、3、4的顺序排列。若按照本实施例方式,图数据应按图2g的形式表示,按顶点1(对应权重2)、顶点3(对应权重3)、顶点4(对应权重4)、顶点2(对应权重5)的顺序排列。其他类似,不作赘述。重边的重边边表也可以按邻居顶点编号排序,又或者,第二图数据的重边边表中同一顶点的权重越小的重边邻居顶点排在更靠近表头的位置。
以上实施例根据第一图数据的步进增量,设计局部感知的数据表示来表达第二图数据,本发明称其为局部感知的压缩稀疏行表示(Locality-aware Compressed SparseRepresentation,LACSR)。LACSR数据表示包括轻边子图和重边子图,轻边子图包括轻边偏移、轻边边表和轻边值表,重边子图包括重边偏移、重边边表和重边值表。其中,轻边偏移存储图数据中顶点在轻边边表的起始偏移位置,轻边边表存储图数据中所有顶点的所有轻边邻居顶点,轻边值表存储图数据中所有顶点与各轻边邻居顶点对应轻边的权重,重边偏移存储图数据中顶点在重边边表的起始偏移位置,重边边表存储图数据中所有顶点的各重边邻居顶点,重边值表存储图数据中所有顶点与各重边邻居顶点对应重边的权重。考虑到单源最短路径算法在阶段一执行过程中,会频繁访问轻边度高的顶点,对此,算法执行前,本发明依据图数据顶点的轻边数目的降序对图数据顶点进行重编号,然后重映射LACSR结构。之后考虑到阶段一执行过程中,其工作负载是顺序敏感的,故为减少冗余计算,本发明设计对LACSR结构中各顶点的轻边边表和轻边值表依据轻边权重的升序进行重排。通过设计局部感知的图数据表示,算法执行过程中访存效率得到显著提升,并减少了一定的冗余开销,提升了算法的执行效率。
步骤S2:将所述第二图数据中的轻边和重边均衡划分为N份,并根据每份划分到的轻边和重边,生成在不同子图分别存储轻边和重边的第三图数据,得到N份第三图数据,所述N为参与计算的GPU的数量,N≥2。
根据本发明的一个实施例,所述步骤S2包括:S21、以单个顶点为划分单位,均衡地将所述第二图数据中轻边子图的各顶点关联的轻边分给N个GPU;S22、以单个边为划分单位,均衡地将所述第二图数据中重边子图的各个重边分给N个GPU;S23、根据步骤S21划分给每个GPU的轻边和步骤S22划分给每个GPU的重边,生成在不同子图分别存储轻边和重边的第三图数据。例如,参见图3,其展示了任务驱动的图数据划分策略(对应于S21-S23),其中,V表示所有的顶点,N表示GPU数量,Eheavy表示所有的重边,N个GPU分别表示为GPU1、GPU2、GPU3……GPUN,M表示第三图数据。在划分时,可以看到,轻边划分时,是以顶点的数量|V|均衡划分轻边;而在重边划分时,是以重边的数量|Eheavy|均衡划分重边。划分时,由于顶点的数量或重边的数量不一定能被GPU数量N整除,因此,为了实现均衡,可以通过轮询的方式分配。比如:假设将图2g中的7个顶点的轻边要分给两个GPU,则第一轮将顶点0和1关联的轻边分别分给GPU1和GPU2,如此分给GPU1的边有顶点0参与构成的4条轻边,分给GPU2的边有顶点1参与构成的3条轻边;第二轮将顶点2和3关联的轻边分别分给GPU1和GPU2,以此类推,最终GPU1分得顶点0、2、4、6关联的轻边,GPU2分得顶点1、3、5关联的轻边。当然,此处仅为示意,当顶点数量较多时,也可以考虑一轮中一次给每个GPU分更多的顶点,比如2个或者3个等,以得到其他实施方式。重边划分可以参考轻边的划分,唯一的不同是重边是以单条边为单位划分的,此处不作赘述。该实施例的技术方案至少能够实现以下有益技术效果:本实施例采用任务驱动的图数据划分的策略,即对轻边以节点为单位划分,以保证划分的所有顶点的轻边存在一个GPU节点上,在后续德尔塔步进算法根据同一顶点进行关联的顶点的最短路径的距离更新时,可以减少不同GPU就同一顶点相关的数据进行同步,提高处理效率;另外,考虑到阶段二主要针对重边进行处理,重边以边为单位划分,即采用边中心的数据划分,从而保证划分到每个GPU上的重边信息粗粒度的相近即可;通过任务驱动的图数据划分,充分考虑了图数据特性和GPU数目,从而大致确保了数据划分的均衡性,同时减少了德尔塔步进算法在一轮迭代中的数据同步开销。
步骤S3:获取源顶点,由N个GPU读取各自分到的第三图数据,基于德尔塔步进算法协同进行单源最短路径计算,确定源顶点到每个顶点间的最短路径。
根据本发明的一个实施例,在步骤S3中,按以下方式为活跃顶点分配工作线程:获取预设的多个轻边数目范围以及每种轻边数目范围对应粒度单位,其中,越大的轻边数目范围对应的粒度单位所含的线程数越大;根据每个活跃顶点的轻边数目判断所处的轻边数目范围,按所处的轻边数目范围确定每个活跃顶点对应的粒度单位;按每个活跃顶点对应的粒度单位,为每个活跃顶点划分处理其对应任务的工作线程。
可选的,在步骤S3中,设置三个轻边数目范围,分别为第一数目范围[1,32),第二数目范围[32,256)和第三数目范围[256,+∞),其中,第一、第二和第三数目范围对应的粒度单位所含的线程数依次为1、32和256,其中,当一个活跃顶点的轻边数目t处于第一数目范围时,创建t个以Thread为粒度单位的工作线程处理该活跃顶点对应的任务;当一个活跃顶点的轻边数目m处于第二数目范围时,创建个以Warp为粒度单位的工作线程处理该活跃顶点对应的任务;当一个活跃顶点的轻边数目n处于第三数目范围时,创建/>个以CTA为粒度单位的工作线程处理该活跃顶点对应的任务。对于德尔塔步进算法的阶段一,算法执行过程中工作负载存在不规则特性,依据轻边的数目,设计不同的类型的工作任务,分别为小工作量任务、中工作量任务和大工作量任务,同时将不同的任务放在不同的任务队列中。在执行过程中,不同任务间异步并行执行,同一任务则以同步方式执行。同时不同的任务,以不同粒度单位的GPU线程进行执行。换言之,对应不同任务的执行,则依据顶点的轻边数量,分别以CTA、Warp、Thread为粒度单位进行工作线程的创建。其中,GPU平台上CTA粒度为包含256个线程的粒度单位,Warp粒度为包含32个线程的粒度单位,Thread粒度为1个线程(即包括单个线程的粒度单位)。例如,如果当前大工作量活跃顶点拥有n条轻边,本发明将会创建/>个以CTA为单位的工作线程,如果当前中工作量活跃点拥有m条轻边,则创建/>个以Warp为粒度单位的工作线程,对于有t条轻边的小工作量活跃顶点,则以t个Thread为粒度单位的工作线程进行执行。其中,/>表示向下取整。示意性的,如果当前活跃顶点拥有1028条轻边,本发明将会创建4个以CTA为单位的工作线程;如果当前活跃点拥有75条轻边,则创建2个以Warp为单位的工作线程;对于有3条轻边的活跃顶点,则以3个Thread为单位的工作线程进行执行。参见图4,在德尔塔步进算法中,在处理每个桶(bucket,假设有桶0,其为处理完成的桶、……、桶k,其为当前的处理桶,桶k含有正在处理活跃顶点、桶k+1,其为未处理的桶,和桶n,其为未处理的桶)时,阶段一会不断判断当前处理的桶(桶k)是否存在轻边对应的活跃顶点(如图所示顶点3、顶点5等),若是,则会通过管理线程为其分发工作线程,可以参考前述以CTA、Warp、Thread为粒度单位进行工作线程的创建过程。若没有轻边对应的活跃顶点,则会开始阶段二和阶段三的重边任务,以Warp粒度划分工作线程。该实施例的技术方案至少能够实现以下有益技术效果:本实施例对粒度单位按不同的轻边数目范围进行设置,差异化地为具有不同轻边数目的活跃顶点分配适宜的GPU资源,相对于使用自适应分配粒度单位的并行调度,使得算法执行过程中各GPU资源的利用率得到明显提升,从而使得算法在GPU平台上获得较好的性能。
根据本发明的一个实施例,在每个GPU中,设置有管理线程和工作线程,所述工作线程包括小任务工作线程、中任务工作线程和大任务工作线程,其中,由管理线程将按第一数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给小任务工作线程处理,由管理线程将按第二数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给中任务工作线程处理,由管理线程将按第三数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给大任务工作线程处理。该实施例的技术方案至少能够实现以下有益技术效果:本实施例对粒度单位按不同的轻边数目对应多种任务类型,通过使用自适应的任务类型并行调度,算法执行过程中各GPU资源的利用率得到明显提升,从而使得算法在GPU平台上获得较好的性能。
根据本发明的一个实施例,对于活跃顶点的重边,GPU被配置为将所有活跃顶点的重边均分为若干份重边任务,分配以Warp为粒度单位的工作线程处理对应的重边任务,其中,当重边任务含有k个重边时,分配创建个以Warp为粒度单位的工作线程处理该重边任务。相当于,基于重边计算并更新顶点距离信息的过程,本发明设计以边数目近似相等的粗粒度方式组织近似相等任务,然后以Warp粒度的工作线程来并行执行算法基本操作。
根据本发明的一个实施例,在步骤S3中,同一活跃顶点对应的任务以同步的方式执行,不同活跃顶点对应的任务间异步并行执行。不同活跃顶点对应的任务间异步并行执行是指一个活跃顶点的任务不用等待另一个活跃顶点的任务,两者可以分别异步执行。该实施例的技术方案至少能够实现以下有益技术效果:不同活跃顶点的任务以异步的方式执行,可以充分调动空闲的计算资源处理任务。
本发明可以是如图5所示的计算设备上执行,计算设备包括一个或者多个通用处理器CPU(Central Processing Unit,中央处理器)和多个图形处理器GPU(GraphicsProcessing Unit,例如GPU1……GPUN),通用处理器CPU和多个图形处理器GPU间通过PCIe或NVlink互连。GPU处理器内部存在多个流处理器(Stream Multiple,SM),而每个流处理器包括指令缓存、线程束调度器、寄存器、上百个结构相对简单的计算核心(Core,简称核)、L1缓存和共享内存。一定数量的计算核心在GPU中组成一组,组内的计算核心共享同一指令缓存,这使得GPU可支持单指令多数据(SIMD)的计算模型。此外,GPU支持合并访存,当共享同一指令缓冲区的线程访问相邻地址时,其发起的多个内存访问请求可在一个事务周期内完成,同时GPU可提供更高的访存位宽,以上设计使得GPU内部带宽可达数百GB/s。以NVDIATesla V100为例,其包含80个流处理器,5120个计算核心,访存位宽4096bit,内存带宽高达900GB/s。
此外,初始时,从文件中读取原始的图数据(对应第一图数据),并转成对应的LACSR格式(对应步骤S1得到第二图数据)存储到CPU内存中,然后对其进行划分(对应步骤S2得到第三图数据)后,将划分后的图数据(第三图数据)经过PCIe/NVLink传输到GPU的全局内存中,用于后面SSSP算法的执行。
需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种应用多GPU协同进行单源最短路径计算方法,其特征在于,包括步骤:
S1、获取原始的第一图数据和预设的步进增量,根据步进增量预先确定第一图数据中的轻边和重边,构建在不同子图分别存储轻边和重边的局部感知的第二图数据;
S2、将所述第二图数据中的轻边和重边均衡划分为N份,并根据每份划分到的轻边和重边,生成在不同子图分别存储轻边和重边的第三图数据,得到N份第三图数据,所述N为参与计算的GPU的数量,N≥2;
S3、获取源顶点,由N个GPU读取各自分到的第三图数据,基于德尔塔步进算法协同进行单源最短路径计算,确定源顶点到每个顶点间的最短路径。
2.根据权利要求1所述的方法,其特征在于,所述步骤S1包括:
S11、获取预设的调整参数和原始的第一图数据,根据所述调整参数、第一图数据中顶点间边的权重和度信息确定步进增量,其中,所述调整参数与GPU执行调度的基本单位所含的线程数相关;
S12、将第一图数据中边的权重小于等于所述步进增量的边划分为轻边,其余的边划分为重边;
S13、根据各个轻边构建第二图数据中的轻边子图,根据各个所述重边构建第二图数据中的重边子图。
3.根据权利要求1所述的方法,其特征在于,第二图数据以CSR结构存,第二图数据的顶点编号是根据顶点的轻边数量大小重映射得到的重映射编号,并且建立同一顶点的重映射编号与原始编号的关联,其中,顶点的轻边数量相对越大则重映射编号越小。
4.根据权利要求3所述的方法,其特征在于,所述第二图数据的邻边表中,同一顶点的权重越小的邻居顶点排在更靠近表头的位置。
5.根据权利要求1所述的方法,其特征在于,所述步骤S2包括:
S21、以单个顶点为划分单位,均衡地将所述第二图数据中轻边子图的各顶点关联的轻边分给N个GPU;
S22、以单个边为划分单位,均衡地将所述第二图数据中重边子图的各个重边分给N个GPU;
S23、根据步骤S21划分给每个GPU的轻边和步骤S22划分给每个GPU的重边,生成在不同子图分别存储轻边和重边的第三图数据。
6.根据权利要求1所述的方法,其特征在于,在步骤S3中,按以下方式为活跃顶点分配工作线程:
获取预设的多个轻边数目范围以及每种轻边数目范围对应粒度单位,其中,越大的轻边数目范围对应的粒度单位所含的线程数越大;
根据每个活跃顶点的轻边数目判断所处的轻边数目范围,按所处的轻边数目范围确定每个活跃顶点对应的粒度单位;
按每个活跃顶点对应的粒度单位,为每个活跃顶点创建处理其对应任务的工作线程。
7.根据权利要求6所述的方法,其特征在于,在步骤S3中,设置三个轻边数目范围,分别为第一数目范围[1,32),第二数目范围[32,256)和第三数目范围[256,+∞),其中,第一、第二和第三数目范围对应的粒度单位所含的线程数依次为1、32和256,
其中,当一个活跃顶点的轻边数目t处于第一数目范围时,创建t个以Thread为粒度单位的工作线程处理该活跃顶点对应的任务;
当一个活跃顶点的轻边数目m处于第二数目范围时,创建个以Warp为粒度单位的工作线程处理该活跃顶点对应的任务;
当一个活跃顶点的轻边数目n处于第三数目范围时,创建个以CTA为粒度单位的工作线程处理该活跃顶点对应的任务。
8.根据权利要求7所述的方法,其特征在于,在每个GPU中,设置有管理线程和工作线程,所述工作线程包括小任务工作线程、中任务工作线程和大任务工作线程,其中,
由管理线程将按第一数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给小任务工作线程处理,
由管理线程将按第二数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给中任务工作线程处理,
由管理线程将按第三数目范围对应的粒度单位划分出的活跃顶点对应的任务分配给大任务工作线程处理。
9.根据权利要求6所述的方法,其特征在于,在步骤S3中,同一活跃顶点对应的任务以同步的方式执行,不同活跃顶点对应的任务间异步并行执行。
10.根据权利要求1-9之一所述的方法,其特征在于,所述第一图数据中的顶点代表地点,两个顶点间的边代表路径,边的权重代表路径长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410033218.0A CN117851015A (zh) | 2024-01-09 | 2024-01-09 | 一种应用多gpu协同进行单源最短路径计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410033218.0A CN117851015A (zh) | 2024-01-09 | 2024-01-09 | 一种应用多gpu协同进行单源最短路径计算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117851015A true CN117851015A (zh) | 2024-04-09 |
Family
ID=90528374
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410033218.0A Pending CN117851015A (zh) | 2024-01-09 | 2024-01-09 | 一种应用多gpu协同进行单源最短路径计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117851015A (zh) |
-
2024
- 2024-01-09 CN CN202410033218.0A patent/CN117851015A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Khorasani et al. | Scalable simd-efficient graph processing on gpus | |
Bajaj et al. | Parallel accelerated isocontouring for out-of-core visualization | |
Badouel et al. | Distributing data and control for ray tracing in parallel | |
Arifuzzaman et al. | A fast parallel algorithm for counting triangles in graphs using dynamic load balancing | |
CN110516316B (zh) | 一种间断伽辽金法求解欧拉方程的gpu加速方法 | |
CN105468439A (zh) | 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行算法 | |
Kijsipongse et al. | Dynamic load balancing on GPU clusters for large-scale K-Means clustering | |
Langguth et al. | Scalable heterogeneous CPU-GPU computations for unstructured tetrahedral meshes | |
CN116684420A (zh) | 集群资源调度方法、装置、集群系统和可读存储介质 | |
Kunaseth et al. | Analysis of scalable data-privatization threading algorithms for hybrid MPI/OpenMP parallelization of molecular dynamics | |
EP3008597B1 (en) | Method for the continuous processing of two-level data on a system with a plurality of nodes | |
Papagiannis et al. | Rearchitecting mapreduce for heterogeneous multicore processors with explicitly managed memories | |
Hong et al. | A multi-gpu fast iterative method for eikonal equations using on-the-fly adaptive domain decomposition | |
US9110855B2 (en) | Matrix based dynamic programming | |
Gao et al. | A parallel multiresolution volume rendering algorithm for large data visualization | |
Calore et al. | Optimizing communications in multi-GPU Lattice Boltzmann simulations | |
Yassir et al. | Graph-based model and algorithm for minimising big data movement in a cloud environment | |
CN117851015A (zh) | 一种应用多gpu协同进行单源最短路径计算方法 | |
Incardona et al. | Distributed sparse block grids on GPUs | |
Binyahib | Scientific visualization on supercomputers: A survey | |
Hsu et al. | A job scheduling design for visualization services using GPU clusters | |
CN114428936A (zh) | 针对矩阵-矩阵乘法分配处理线程 | |
CN113377523A (zh) | 一种异构感知的流式图划分方法 | |
Li et al. | Topology-aware scheduling on blue waters with proactive queue scanning and migration-based job placement | |
Jeannot | Process mapping on any topology with TopoMatch |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |