掌桥专利:专业的专利平台
掌桥专利
首页

图的处理方法及装置

文献发布时间:2024-04-18 19:58:53


图的处理方法及装置

技术领域

本申请实施例涉及数据处理技术领域,尤其涉及一种图的处理方法及装置。

背景技术

图是一种非线性的数据结构,其可以简单直观的体现任意两个顶点之间的关联关系,交通运输网、社交网络以及计算机的状态执行等均可以采用图表示。动态图指的是图结构随着时间不断变化的图,在进行动态图分析的过程中,当图发生变化时,需要对图中受影响顶点的顶点状态进行更新。

相关技术中,在图发生变化后,首先确定图变化时直接受影响的初始顶点,更新每个初始顶点的状态,之后每个初始顶点生成增量并沿着图的拓扑结构进行传播。该传播过程中,每个接收到增量的顶点根据增量更新自身状态,并生成新的增量继续沿着图的拓扑结构传播。

在实现本发明过程中,发明人发现相关技术中至少存在如下问题:相关技术的传播过程中,各个顶点生成的增量的传播是不规则的,导致更新顶点状态的过程中存在无效和冗余计算开销,从而影响更新效率。

发明内容

本申请提供一种图的处理方法及装置,能够减小更新顶点状态的过程中的无效计算和冗余计算,提高更新效率。

第一方面,本申请提供一种图的处理方法,所述方法包括:当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,所述受影响顶点为所述图发生变化时需要更新顶点状态的顶点;基于所述每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至所述每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边;基于按照所述遍历顺序排列的所述多条边进行状态传播;所述遍历过程包括:从所述多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以所述根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以所述根顶点为起始的状态传播路径均被遍历;其中,所述至少一个活跃顶点包括:未曾作为根顶点的初始顶点和未曾作为根顶点且满足所述第一停止条件的受影响顶点,所述至少一个活跃顶点中所述根顶点的接收增量个数阈值与被访问次数的差值最小,所述初始顶点为所述图发生变化时直接受影响的顶点;所述第一停止条件包括:在访问至受影响顶点时所述受影响顶点的被访问次数小于接收增量个数阈值,和/或在访问至受影响顶点时所述受影响顶点不存在可访问的邻居受影响顶点。

图发生变化即指图结构发生变化,图结构的变化包括以下至少一种:新增边、删除边、更新边、新增顶点、删除顶点以及更新顶点。

顶点状态在不同图计算算法中具有不同的含义,例如在网页排名(PageRank)算法中,任一顶点的顶点状态为顶点当前的PageRank值;在单源最短路(Single SourceShortest Path,SSSP)算法中,任一顶点的顶点状态为源顶点与该任一顶点之间的最短路径的长度。

图发生变化时,可以先确定初始顶点,之后遍历以初始顶点为起始的状态传播路径,从而确定所有受影响顶点以及每个受影响顶点的接收增量个数阈值。最后确定的多个受影响顶点包括初始顶点以及从初始顶点能够到达的顶点。初始顶点即为图发生变化时首先需要更新顶点状态并生成增量的受影响顶点。

遍历过程中,从其他受影响顶点沿着状态传播路径到达任一受影响顶点,视为该任一受影响顶点被访问一次。同一个受影响顶点可能被访问多次,同一条边也可能被访问多次。

首次遍历过程中,从初始顶点中确定根顶点,后续遍历过程中,从未曾作为根顶点的初始顶点和未曾作为根顶点且满足第二停止条件的顶点中确定根顶点。

图处理设备确定的根顶点为至少一个活跃顶点中接收增量个数阈值与被访问次数的差值最小的活跃顶点,且存在以根顶点为起始的状态传播路径未遍历。在遍历过程中访问至满足第一停止条件的受影响顶点后,将该受影响顶点设置为活跃顶点。在每确定一个根顶点后,将该根顶点设置为非活跃顶点。

以根顶点为起始的状态传播路径为初始顶点在进行状态传播时通过的所有路径,即从根顶点能够到达的所有终点之间的路径。

在遍历过程中受影响顶点被访问一次,相当于在状态传播过程中受影响顶点接收到一个增量。将至少一个活跃顶点中接收增量个数阈值与被访问次数的差值最小的顶点确定为根顶点,相当于在状态传播过程中将至少一个活跃顶点中未接收到的增量的数量最少的顶点确定为根顶点。

增量表示顶点状态的变化。在不同算法中增量的含义不同,例如在PageRank算法中增量表示顶点状态的变化值,在SSSP算法中增量表示顶点更新后的顶点状态的值与顶点的发送边的权重之和。

受影响顶点通过接收边接收增量。本申请实施例中,图可以包括有向图和无向图,当图为有向图时,受影响顶点的接收边为入边,发送边为出边。当图为无向图时,受影响顶点连接的一条边可以视为一条发送边和一条接收边。

在第一停止条件中,受影响顶点不存在可访问的邻居受影响顶点可以包括两种情况:一种是受影响顶点到达的其他邻居受影响顶点的边均被访问(即受影响顶点连接有邻居受影响顶点的发送边均被访问),另一种是受影响顶点未连接有到达其他邻居受影响顶点的边(即受影响顶点不具有连接有邻居受影响顶点的发送边)。

在遍历过程中,可以记录访问到的各条边的遍历顺序。示例地,可以创建队列,每访问一条边,则将该边的边标识存储在队列中。

本申请实施例中,图可以是完整的一个图,也可以是初始图中的部分结构。示例地,图处理设备(例如运行在核上的图处理系统软件)可以将完整的图配置在一个核上以进行处理,也可以将初始图分块,将每个块配置在一个核上以进行处理。

该方法中,在确定接收增量个数阈值后,当某一活跃顶点的接收增量个数阈值与被访问次数的差值为至少一个活跃顶点中最小的时,相当于在后续状态传播过程中该某一活跃顶点未接收到的增量数量为至少一个活跃顶点中最少的,将该某一活跃顶点作为根顶点开始遍历。当访问至一个受影响顶点,该受影响顶点的被访问次数小于其接收增量个数阈值,相当于在后续状态传播过程该顶点当前接收到的增量数不够,因此不能继续往下访问。这样使得一个活跃顶点在接收增量个数阈值与被访问次数的差值最小时才能作为根顶点,在遍历过程中接收增量个数阈值与被访问次数的差值为0时才可以继续往下访问其邻居受影响顶点。状态传播过程按照这种遍历顺序进行状态传播时,从未接收到增量的数量最少的活跃顶点开始进行状态传播,接收到增量的受影响顶点在累积到所有增量后才会往下进行状态传播,实现了状态传播的规范化,有效减小了后续访问的受影响顶点的更新次数,从而减小了更新顶点状态的过程中的无效计算和冗余计算,提高了更新效率。

在一种可能的实现方式中,所述基于按照所述遍历顺序排列的所述多条边进行状态传播,包括:按照所述多条边的排列顺序选择当前需要通过状态传播的边;获取选择的边两端的受影响顶点的顶点状态;基于选择的边以及选择的边两端的受影响顶点的顶点状态进行状态传播。

图处理设备可以基于选择的边的权重和/或选择的边两端的受影响顶点的顶点状态确定增量,之后沿着选择的边传播增量。

在一种可能的实现方式中,所述方法还包括:从所述图中确定多个热顶点,所述热顶点的接收增量个数阈值大于或等于数量阈值;将所述多个热顶点的顶点状态存储在连续存储区域;所述获取选择的边两端的受影响顶点的顶点状态,包括:当选择的边的任一端的受影响顶点为热顶点时,从所述连续存储区域获取所述任一端的受影响顶点的顶点状态;当所述任一端的受影响顶点为非热顶点时,从内存区域获取所述任一端的受影响顶点的顶点状态。

热顶点为在状态传播过程中被频繁访问的顶点,即访问频率较高的顶点。数量阈值可以通过各个顶点的访问频率以及自定义比率α得到,0≤α≤1。本申请实施例中,将顶点的接收增量个数阈值近似视为顶点的访问频率,将访问频率在所有顶点中占前α(可以包括α)的顶点确定为热顶点,即将访问频率在所有顶点中占前α的顶点中的最小访问频率确定为数量阈值。

在图计算过程中,大多数状态传播过程仅涉及到一小部分顶点是受影响顶点需要更新顶点状态,即需要更新顶点状态的顶点在所有顶点中占比较小,因此大多数顶点的顶点状态在图计算过程中是不需要的。

相关技术中,各个顶点的顶点状态稀疏地存储在主存储器中,在图计算过程中,一个缓存行存储的图计算所需的顶点状态数量较小,甚至可能只存储有一个图计算所需的顶点状态。这样导致获取顶点状态时会存在较多的随机数据访问,从而导致获取顶点状态的过程中数据访问开销较大。本申请实施例中,将热顶点的顶点状态合并存储在连续的存储区域,使得一个缓存行存储有较多数量的图计算所需的顶点状态,即一个缓存行能够用于状态传播过程中大部分的顶点状态访问过程,顶点状态的获取连续且规则化,从而减小了数据访问开销。

在一种可能的实现方式中,所述确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,包括:分别遍历以每个初始顶点为起始的状态传播路径,在访问至满足第二停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以所述每个初始顶点为起始的状态传播路径均被遍历;将所述受影响顶点的被访问次数确定为所述受影响顶点的接收增量个数阈值;所述第二停止条件包括:受影响顶点为其他初始顶点,和/或在访问至受影响顶点时所述受影响顶点不存在可访问的邻居受影响顶点。此时状态传播路径上的边仅被访问一次,不同状态传播路径的公共边也仅被访问一次。

初始顶点先更新顶点状态后需要生成增量以进行状态传播。以初始顶点为起始的状态传播路径为初始顶点在进行状态传播时通过的所有路径,即从初始顶点能够到达的所有终点之间的路径。

在一种可能的实现方式中,所述分别遍历以每个初始顶点为起始的状态传播路径,包括:遍历以所述初始顶点为起始的状态传播路径上的边,所述受影响顶点的被访问次数为从所述受影响顶点的邻居受影响顶点到达所述受影响顶点的边数量;所述遍历以所述根顶点为起始的状态传播路径,包括:遍历以所述根顶点为起始的状态传播路径上的边。

该实现方式中受影响顶点的被访问次数为从该受影响顶点的邻居受影响顶点到达该受影响顶点的边数量,即受影响顶点连接有邻居受影响顶点的接收边数量。受影响顶点被访问一次指的是受影响顶点连接有邻居受影响顶点的一条接收边被访问。

遍历以每个初始顶点为起始的状态传播路径以及遍历以根顶点为起始的状态传播路径上的边时,需要保证所有遍历结束后图中任意两个受影响顶点之间的边均被访问到,因此在遍历过程中一个顶点可能被访问多次。

在一种可能的实现方式中,所述遍历以所述初始顶点为起始的状态传播路径上的边,包括:基于遍历算法遍历以所述初始顶点为起始的状态传播路径上的边;所述遍历以所述根顶点为起始的状态传播路径上的边,包括:基于所述遍历算法遍历以所述根顶点为起始的状态传播路径上的边,所述遍历算法包括:深度优先遍历算法和/或广度优先遍历算法。

第二方面,本申请提供一种图的处理装置,所述装置包括:第一确定模块,用于当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,所述受影响顶点为所述图发生变化时需要更新顶点状态的顶点;遍历模块,用于基于所述每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至所述每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边;状态传播模块,用于基于按照所述遍历顺序排列的所述多条边进行状态传播;所述遍历过程包括:从所述多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以所述根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以所述根顶点为起始的状态传播路径均被遍历;其中,所述至少一个活跃顶点包括:未曾作为根顶点的初始顶点和未曾作为根顶点且满足所述第一停止条件的受影响顶点,所述至少一个活跃顶点中所述根顶点的接收增量个数阈值与被访问次数的差值最小,所述初始顶点为所述图发生变化时直接受影响的顶点;所述第一停止条件包括:在访问至受影响顶点时所述受影响顶点的被访问次数小于接收增量个数阈值,和/或在访问至受影响顶点时所述受影响顶点不存在可访问的邻居受影响顶点。

在一种可能的实现方式中,所述状态传播模块,具体用于:按照所述多条边的排列顺序选择当前需要通过状态传播的边;获取选择的边两端的受影响顶点的顶点状态;基于选择的边以及选择的边两端的受影响顶点的顶点状态进行状态传播。

在一种可能的实现方式中,所述装置还包括:第二确定模块,用于从所述图中确定多个热顶点,所述热顶点的接收增量个数阈值大于或等于数量阈值;存储模块,用于将所述多个热顶点的顶点状态存储在连续存储区域;所述状态传播模块,具体用于:当选择的边的任一端的受影响顶点为热顶点时,从所述连续存储区域获取所述任一端的受影响顶点的顶点状态;当所述任一端的受影响顶点为非热顶点时,从内存区域获取所述任一端的受影响顶点的顶点状态。

在一种可能的实现方式中,所述第一确定模块,具体用于:分别遍历以每个初始顶点为起始的状态传播路径,在访问至满足第二停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以所述每个初始顶点为起始的状态传播路径均被遍历;将所述受影响顶点的被访问次数确定为所述受影响顶点的接收增量个数阈值;所述第二停止条件包括:受影响顶点为其他初始顶点,和/或在访问至受影响顶点时所述受影响顶点不存在可访问的邻居受影响顶点。

在一种可能的实现方式中,所述第一确定模块,具体用于:遍历以所述初始顶点为起始的状态传播路径上的边,所述受影响顶点的被访问次数为从所述受影响顶点的邻居受影响顶点到达所述受影响顶点的边数量;所述遍历模块,具体用于:遍历以所述根顶点为起始的状态传播路径上的边。

在一种可能的实现方式中,所述第一确定模块,具体用于:基于遍历算法遍历以所述初始顶点为起始的状态传播路径上的边;所述遍历模块,具体用于:基于所述遍历算法遍历以所述根顶点为起始的状态传播路径上的边,所述遍历算法包括:深度优先遍历算法和/或广度优先遍历算法。

第三方面,本申请提供一种图的处理装置,所述装置包括:一个或多个处理器;存储器,用于存储一个或多个计算机程序或指令;当所述一个或多个计算机程序或指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面中任一项所述的方法。

第四方面,本申请提供一种图的处理装置,包括,处理器,用于执行如第一方面中任一项所述的方法。

第五方面,本申请提供一种计算机可读存储介质,包括计算机程序或指令,所述计算机程序或指令在计算机上被执行时,使得所述计算机执行如第一方面中任一项所述的方法。

附图说明

图1为本申请实施例提供的一种图处理设备的结构示意图;

图2为本申请实施例提供的一种图处理设备中的部分结构示意图;

图3为本申请实施例提供的一种图的处理方法的流程示意图;

图4为本申请实施例提供的另一种图的处理方法的流程示意图;

图5为本申请实施例提供的一种有向图的结构示意图;

图6为本申请实施例提供的一种无向图的结构示意图;

图7为本申请实施例提供的一种TDTU的结构示意图;

图8为本申请实施例提供的一种配置信息的示意图;

图9为本申请实施例提供的一种通过遍历确定每个受影响顶点的接收增量个数阈值的流程示意图;

图10为本申请实施例提供的一种基于每个受影响顶点的接收增量个数阈值执行至少一次遍历过程的流程示意图;

图11为本申请实施例提供的一种热顶点的顶点状态存储示意图;

图12为本申请实施例提供的一种图的处理装置的框图;

图13为本申请实施例提供的另一种图的处理装置的框图;

图14为本申请实施例提供的一种电子设备的结构示意图;

图15为本申请实施例提供的一种图的处理装置的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。

本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一范围和第二范围等是用于区别不同的范围,而不是用于描述范围的特定顺序。

在本申请实施例中,“在一种示例中”、“示例地”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“在一种示例中”、“示例地”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“在一种示例中”、“示例地”或者“例如”等词旨在以具体方式呈现相关概念。

在本申请实施例的描述中,除非另有说明,“至少一个”的含义是指一个或多个,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。

图是由顶点和顶点之间的边组成的一种非线性的数据结构,每条边连接有两个顶点。图按照边是否有方向可以分为有向图和无向图,有向图中顶点之间需要按照边的方向传输数据,无向图中顶点之间可以双向传输数据。

动态图指的是图结构随着时间不断变化的图,图发生变化即指图结构发生变化,图结构的变化包括以下至少一种:新增边、删除边、更新边、新增顶点、删除顶点以及更新顶点。在动态图分析过程中,当图发生变化时,需要进行图计算以对每个受影响顶点的顶点状态进行更新。首先确定初始顶点,初始顶点先更新顶点状态,之后初始顶点需要进行状态传播以对其他受影响顶点的顶点状态进行更新。顶点状态在不同图计算算法中具有不同的含义,例如在PageRank算法中,任一顶点的顶点状态为顶点当前的PageRank值;在SSSP算法中,任一顶点的顶点状态为源顶点与该任一顶点之间的最短路径的长度。其中,初始顶点为图变化时直接受影响的顶点,即为图发生变化时首先需要更新顶点状态并生成增量的受影响顶点。

在PageRank算法中,若需要新增边,则新增边的源顶点先将之前的收敛逆值通过变化之前的发送边发送给连接的邻居顶点,同时删除源顶点的所有发送边。之后将实际所有发送边(包括新增边)加回,生成增量并向源顶点的发送边所连接的邻居顶点发送增量。将接收到增量的顶点确定为初始顶点,初始顶点更新顶点状态并开始执行状态传播过程。若需要删除边,则删除边的源顶点生成负增量并通过变化之前的发送边发送给连接的邻居顶点,同时删除源顶点的所有发送边。之后将实际所有发送边加回,生成增量并向源顶点的发送边所连接的邻居顶点发送增量。将接收到增量的顶点确定为初始顶点,初始顶点更新顶点状态并开始执行状态传播过程。

在SSSP算法中,若需要新增边,将新增边的目的顶点确定为初始顶点,初始顶点更新顶点状态并开始执行状态传播过程。若删除了边,则先将各个受影响顶点的顶点状态重置为初始值,每个受影响顶点通过接收边接收邻居顶点的状态。之后将删除边的目的顶点确定为初始顶点,初始顶点更新顶点状态并开始执行状态传播过程。

新增顶点可以视为新增了该顶点连接的边,删除顶点可以视为删除了该顶点连接的边,因此新增顶点和删除顶点的过程可以分别参考前述新增边和删除边的图计算过程。更新边时,将更新边的目的顶点确定为初始顶点,初始顶点更新状态并开始执行状态传播过程。更新顶点时,直接将更新的顶点确定为初始顶点,初始顶点更新状态并开始执行状态传播过程。

其中,顶点的发送边表示顶点用于发送数据的边,顶点的接收边表示顶点用于接收数据的边。图计算算法中,顶点的一条边用于发送和/或接收数据。对于有向图,顶点连接的入边即为顶点的接收边,连接的出边即为顶点的发送边,边的箭头所指向的顶点为目的顶点。对于无向图,将顶点连接的边视为发送边和接收边两条边,边任一端的顶点可以视为源顶点和目的顶点。

目前通常利用增量实现状态传播过程,即在状态传播过程中传播的数据是增量,增量表示顶点状态的变化。在不同算法中增量的含义不同,例如在PageRank算法中增量表示顶点状态的变化值,在SSSP算法中增量表示顶点更新后的顶点状态的值与顶点的发送边的权重之和。状态传播过程中,对于任一受影响顶点,更新其顶点状态的过程包括:获取顶点状态,基于顶点状态以及通过接收边接收到的增量更新受影响顶点的顶点状态。在更新结束后生成新的增量,获取图结构数据,基于图结构数据确定邻居顶点,并通过发送边向邻居顶点发送新的增量。其中,图结构数据包括图中当前顶点的边集合。

相关技术中,每个初始顶点在更新顶点状态后,生成增量并沿着图的拓扑结构进行传播。该传播过程中,每个接收到增量的顶点根据增量更新自身顶点状态,并生成新的增量继续沿着图的拓扑结构传播。

但是该传播过程中,各个顶点生成的增量的传播是不规则的,不同顶点生成的新增量会沿着不同的状态传播路径进行传播。因此不同顶点的状态传播可能会在不同时间到达相同的顶点,这样相同的顶点需要多次更新顶点状态,相同的顶点关联的图结构数据也需要被获取多次,导致更新顶点状态的过程中存在无效和冗余计算开销,从而影响更新效率。

本申请实施例提供了一种图的处理方法,能够减小顶点状态更新过程中的无效和冗余计算开销,从而提高顶点状态的更新效率。该方法可以应用于需要实现高性能图处理的图处理设备,以实现高效的数据分析,例如异常检测以及社交网络分析等。其中,图处理设备可以包括但不限于计算机设备(例如服务器、个人电脑以及手机和平板电脑等手持式设备等)。

请参考图1,图1为本申请实施例提供的一种图处理设备的结构示意图,该图处理设备包括多个核(core)、最后一级缓存(Last Level Cache、LLC)、主存储器(Mainmemory)、多个核分别对应的一级(L1)缓存、多个核分别对应的二级(L2)缓存以及多个核分别对应的图拓扑驱动(Topology Driven Graph,TDGraph)模块。每个核与对应的TDGraph模块耦合,任一核对应的TDGraph模块位于该核与该核对应的L2缓存之间。LLC、主存储器和L2缓存均可以用于存储图数据。

需要说明的是,图1是以TDGraph模块是与核耦合的硬件模块为例进行说明的。可选地,TDGraph模块还可以为运行在核上的软件模块,或者由运行在核上的软件模块以及与核耦合的硬件模块组成。其中,硬件模块可以包括但不限于:现场可编程逻辑门阵列(FieldProgrammable Gate Array,FPGA)电路和/或专用集成电路(Application SpecificIntegrated Circuit,ASIC)。

请参考图2,图2为本申请实施例提供的一种图处理设备中的部分结构示意图,图2以一个核为例对该核对应的TDGraph模块的结构进行说明。如图2所示,TDGraph模块包括轻量级硬件单元:拓扑驱动遍历单元(Topology-Driven Traversing Unit,TDTU)。可选地,TDGraph模块还可以包括与TDTU连接的轻量级硬件单元:顶点状态合并单元(VertexStates Coalescing Unit,VSCU)。

需要说明的是,图1和图2所示的结构仅为示例性说明,本申请实施例对图处理设备中的模块以及各个模块的数量均不做限定。

请参考图3,图3为本申请实施例提供的一种图的处理方法的流程示意图,该方法描述了在动态图分析中,当图发生变化时的图处理过程。该方法可以应用于图处理设备,例如图1和图2所示的图处理设备。具体地,该方法可以应用于图1和图2所示的TDGraph模块,当需要进行图的处理时,核调用对应的TDGraph模块执行下述方法过程。本申请实施例以一个核对应的TDGraph模块为例对该方法进行说明,其他核对应的TDGraph模块的执行过程可以参考下述过程,如图3所示,该方法可以包括以下过程:

101、当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,受影响顶点为图发生变化时需要更新顶点状态的顶点。

102、基于每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边。遍历过程包括:从多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以根顶点为起始的状态传播路径均被遍历。

该遍历过程中,从其他受影响顶点沿着状态传播路径到达任一受影响顶点,视为该任一受影响顶点被访问一次。同一个受影响顶点可能被访问多次,同一条边也可能被访问多次。

第一停止条件包括:在访问至受影响顶点时受影响顶点的被访问次数小于接收增量个数阈值,和/或在访问至受影响顶点时受影响顶点不存在可访问的邻居受影响顶点。

后续103的状态传播过程是按照该遍历过程中各个边的遍历顺序进行状态传播的,因此该102的遍历过程相当于模拟的状态传播过程。该根顶点相当于状态传播过程中往后续受影响顶点传播增量的顶点,因此活跃顶点应该为在状态传播过程中能够往后续受影响顶点传播增量的顶点。在状态传播过程最开始,增量是从初始顶点开始传播至后续受影响顶点的,其他受影响顶点还未生成增量,无法进行状态传播,因此在首次遍历时活跃顶点仅包括初始顶点。遍历过程中访问至满足第一停止条件的顶点后停止当前状态传播路径的遍历,满足第一停止条件的顶点相当于在状态传播过程中已接收到部分增量的顶点,其在状态传播过程中也可能往后续受影响顶点传播增量,因此可以将满足第一停止条件的顶点也设置为活跃顶点。

不同遍历过程确定的根顶点不同,因此基于前述描述可得,至少一个活跃顶点包括:未曾作为根顶点的初始顶点和未曾作为根顶点且满足第一停止条件的受影响顶点。

图处理设备确定的根顶点为至少一个活跃顶点中接收增量个数阈值与被访问次数的差值最小的活跃顶点,且存在以根顶点为起始的状态传播路径未遍历。在遍历过程中访问至满足第一停止条件的受影响顶点后,将该受影响顶点设置为活跃顶点。在每确定一个根顶点后,将该根顶点设置为非活跃顶点。

在遍历过程中受影响顶点被访问一次,相当于在状态传播过程中受影响顶点接收到一个增量。将至少一个活跃顶点中接收增量个数阈值与被访问次数的差值最小的顶点确定为根顶点,相当于在状态传播过程中将至少一个活跃顶点中未接收到的增量的数量最少的顶点确定为根顶点。

103、基于按照遍历顺序排列的多条边进行状态传播。

图处理设备可以按照多条边的排列顺序选择当前需要通过状态传播的边,并获取选择的边两端的受影响顶点的顶点状态,之后基于选择的边以及该边两端的受影响顶点的顶点状态进行状态传播。

综上所述,本申请实施例提供的图的处理方法,当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,之后基于每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边。之后基于按照遍历顺序排列的多条边进行状态传播。遍历过程包括:从多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以根顶点为起始的状态传播路径均被遍历。在确定接收增量个数阈值后,当某一活跃顶点的接收增量个数阈值与被访问次数的差值为至少一个活跃顶点中最小的时,相当于在后续状态传播过程中该某一活跃顶点未接收到的增量数量为至少一个活跃顶点中最少的,将该某一活跃顶点作为根顶点开始遍历。当访问至一个受影响顶点,该受影响顶点的被访问次数小于其接收增量个数阈值,相当于在后续状态传播过程该顶点当前接收到的增量数不够,因此不能继续往下访问。这样使得一个活跃顶点在接收增量个数阈值与被访问次数的差值最小时才能作为根顶点,在遍历过程中接收增量个数阈值与被访问次数的差值为0时才可以继续往下访问其邻居受影响顶点。状态传播过程按照这种遍历顺序进行状态传播时,从未接收到增量的数量最少的活跃顶点开始进行状态传播,接收到增量的受影响顶点在累积到所有增量后才会往下进行状态传播,实现了状态传播的规范化,有效减小了后续访问的受影响顶点的更新次数,从而减小了更新顶点状态的过程中的无效计算和冗余计算,提高了更新效率。

请参考图4,图4为本申请实施例提供的另一种图的处理方法的流程示意图,该方法描述了在动态图分析中,当图发生变化时的图处理过程。该方法可以应用于图处理设备,例如图1和图2所示的图处理设备。具体地,该方法可以应用于图1和图2所示的TDGraph模块,当需要进行图的处理时,核调用对应的TDGraph模块执行下述方法过程。本申请实施例以一个核对应的TDGraph模块为例对该方法进行说明,其他核对应的TDGraph模块的执行过程可以参考下述过程,如图4所示,该方法可以包括以下过程:

201、当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,受影响顶点为图发生变化时需要更新顶点状态的顶点。

图发生变化时,可以先确定初始顶点,之后遍历以初始顶点为起始的状态传播路径,从而确定所有受影响顶点以及每个受影响顶点的接收增量个数阈值。最后确定的多个受影响顶点包括初始顶点以及从初始顶点能够到达的顶点。

初始顶点的确定与图发生变化时所采用的图计算算法有关,本申请实施例以PageRank算法和SSSP算法为例对确定初始顶点的过程进行说明。在PageRank算法中,对于新增边,初始顶点为新增的边的源顶点的发送边所连接的顶点;对于删除边,初始顶点为删除的边在删除之前的源顶点的发送边所连接的顶点。在SSSP算法中,对于新增边,初始顶点为新增的边的目的顶点;对于删除边,初始顶点为删除的边在删除之前的目的顶点。

示例地,请参考图5和图6,图5为本申请实施例提供的一种有向图的结构示意图,图6为本申请实施例提供的一种无向图的结构示意图,图5和图6均示出了11个顶点V0至V10,假设图的变化为新增了边(V0,V4)和(V0,V5),删除了边(V1,V2)。对于PageRank算法,图5中确定的初始顶点为V1、V2、V4和V5,图6中确定的初始顶点为V0、V1、V2、V3、V4、V5和V6。对于SSSP算法,图5中确定的初始顶点为V2、V4和V5,图6中确定的初始顶点为V0、V1、V2、V4以及V5。

之后图处理设备分别遍历以每个初始顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以每个初始顶点为起始的状态传播路径均被遍历。将遍历过程中访问到的顶点确定为受影响顶点,并将每个受影响顶点的被访问次数确定为受影响顶点的接收增量个数阈值。

由前述描述可知,初始顶点先更新顶点状态后需要生成增量以进行状态传播。以初始顶点为起始的状态传播路径为初始顶点在进行状态传播时通过的所有路径,即从初始顶点能够到达的所有终点之间的路径。示例地,如图5所示,以初始顶点V2为起始的状态传播路径包括:V2→V4→V5→V6→V7→V8→V9和V2→V3→V4→V5→V6→V7→V8→V9。

第一停止条件包括:条件1.受影响顶点为其他初始顶点,和/或条件2.在访问至受影响顶点时受影响顶点不存在可访问的邻居受影响顶点。受影响顶点不存在可访问的邻居受影响顶点可以包括两种情况:一种是受影响顶点到达的其他邻居受影响顶点的边均被访问(即受影响顶点连接有邻居受影响顶点的发送边均被访问),另一种是受影响顶点未连接有到达其他邻居受影响顶点的边(即受影响顶点不具有连接有邻居受影响顶点的发送边)。第一停止条件包括多个条件时,只要满足至少一个条件即可视为满足第一停止条件,不满足所有条件视为不满足第一停止条件。

受影响顶点通过接收边接收增量。本申请实施例中,图可以包括有向图和无向图,当图为有向图时,受影响顶点的接收边为入边,发送边为出边。当图为无向图时,受影响顶点连接的一条边可以视为一条发送边和一条接收边。

如图5和图6所示,对于PageRank算法,图5中通过遍历确定的受影响顶点包括V1至V9,图6中通过遍历确定的受影响顶点包括V0至V10;对于SSSP算法,图5中通过遍历确定的受影响顶点包括V2至V9,图6中通过遍历确定的受影响顶点包括V0至V10。

该遍历过程可以通过遍历所有状态传播路径上的边实现。可选地,图处理设备可以遍历以初始顶点为起始的状态传播路径上的边,直至以初始顶点为起始的状态传播路径上的边均被遍历。此时状态传播路径上的边仅被访问一次,不同状态传播路径的公共边也仅被访问一次。该实现方式中,对于前述第一停止条件中的条件2,若受影响顶点还存在与邻居受影响顶点连接的发送边未被访问,则确定该受影响顶点还存在可访问的邻居受影响顶点;若受影响顶点与邻居受影响顶点连接的发送边均被访问或者受影响顶点不存在连接有邻居受影响顶点的发送边,则确定该受影响顶点不存在可访问的邻居受影响顶点。此外,该实现方式中受影响顶点的被访问次数为从该受影响顶点的邻居受影响顶点到达该受影响顶点的边数量,即受影响顶点连接有邻居受影响顶点的接收边数量。

可选地,可以基于遍历算法遍历以初始顶点为起始的状态传播路径上的边。遍历算法包括:深度优先遍历算法和/或广度优先遍历算法。需要保证所有遍历结束后图中任意两个受影响顶点之间的边均被访问到,因此在遍历过程中一个顶点可能被访问多次。

需要说明的是,遍历过程中,状态传播路径上的边仅被访问一次,不同状态传播路径的公共边也仅被访问一次。对于无向图,当访问至任一受影响顶点时,该受影响顶点连接有邻居受影响顶点的边可以视为一条发送边和一条接收边,因此无向图中状态传播路径上的一条边可以最多被访问两次,受影响顶点和邻居受影响顶点可以互相发送增量。

以下分别以图5和图6为例对遍历以初始顶点为起始的所有状态传播路径上的边的过程进行说明,假设后续图计算算法为SSSP算法,且第一停止条件包括条件1和条件2。如图5所示,遍历以V2为起始的状态传播路径上的边。

如图5所示,以深度优先遍历算法为例,先遍历边(V2,V3),V3的被访问次数加1。V3不满足第一停止条件,遍历边(V3,V4),V4的被访问次数加1。V4满足条件1,返回V3。V3此时满足条件2,返回V2。接着遍历(V2,V4),V4的被访问次数加1。V4满足条件1,返回V2。此时以V2为起始的两条状态传播路径上的边均被遍历,可以结束以V2开始的遍历过程。以其他初始顶点开始的遍历过程可以参考前述说明,本申请实施例在此不做赘述。

如图5所示,以广度优先遍历算法为例,先遍历边(V2,V3)和边(V2,V4),V3和V4的被访问次数均加1。V3不满足第一停止条件,遍历边(V3,V4),V4的被访问次数加1。V4满足条件1,返回V2。此时以V2为起始的两条状态传播路径上的边均被遍历,可以结束以V2开始的遍历过程。以其他初始顶点开始的遍历过程可以参考前述说明,本申请实施例在此不做赘述。

遍历结束后,各个受影响顶点的被访问次数如下所示:V2(0)、V3(1)、V4(2)、V5(1)、V6(1)、V7(1)、V8(1)、V9(1)。

如图6所示,在第一次遍历过程中,由于受影响顶点连接有邻居受影响顶点的边无方向,因此可以将受影响顶点连接有邻居受影响顶点的一条边视为一条发送边和一条接收边。如图6所示,从初始顶点V4开始遍历以V4为起始的状态传播路径上的边。

如图6所示,以深度优先遍历算法为例,先遍历边(V4,V0),V0的被访问次数加1。V0满足第一停止条件中的条件1,返回V4。遍历边(V4,V2),V2的被访问次数加1。V2满足第一停止条件中的条件1,返回V4。遍历边(V4,V5),V5的被访问次数加1。V5满足第一停止条件中的条件1,返回V4。遍历边(V4,V3),V3的被访问次数加1。V3不满足第一停止条件。遍历边(V3,V4),V4的被访问次数加1。V4满足第一停止条件中的条件1,返回V3。遍历边(V3,V2),V2的被访问次数加1,V2满足第一停止条件中的条件1,返回V3。遍历边(V3,V10),V10的被访问次数加1。V10不满足第一停止条件,遍历边(V10,V3),V3的被访问次数加1。V3满足第一停止条件中的条件2,返回V4。以V4为起始的状态传播路径均被遍历,可以结束以V4开始的遍历过程。遍历以其他初始顶点为起始的所有状态传播路径上的边的过程可以参考前述说明,本申请实施例在此不做赘述。

如图6所示,以广度优先遍历算法为例,遍历边(V4,V0)、边(V4,V2)、边(V4,V3)和边(V4,V5),V0、V2、V3和V5的被访问次数均加1。V0满足第一停止条件中的条件1,返回V2。V2满足第一停止条件中的条件1,返回V3。V3不满足第一停止条件,遍历边(V3,V4)、边(V3,V2)和边(V3,V10),V4、V2和V10的被访问次数均加1,返回V5。V5满足第一停止条件中的条件1,返回V4。V4满足第一停止条件中的条件1,返回V2。V2满足第一停止条件中的条件1,返回V10。V10不满足第一停止条件,遍历边(V10,V3),V3的被访问次数均加1。V3满足第一停止条件中的条件2。以V4为起始的状态传播路径均被遍历,可以结束以V4开始的遍历过程。遍历以其他初始顶点为起始的所有状态传播路径上的边的过程可以参考前述说明,本申请实施例在此不做赘述。

遍历结束后,各个受影响顶点的被访问次数如下所示:V0(3)、V1(1)、V2(2)、V3(3)、V4(4)、V5(3)、V6(2)、V7(2)、V8(2)、V9(1)、V10(1)。

其中,深度优先遍历算法在遍历过程中需要使用堆栈,广度优先遍历算法在遍历过程中需要使用队列。以下以堆栈的角度对前述采用深度优先遍历算法进行遍历,从而确定每个受影响顶点的接收增量个数阈值的过程进行进一步说明。

首先对确定每个受影响顶点的接收增量个数阈值的过程的执行主体进行明,执行主体可以是TDGraph模块,例如可以是TDGraph模块中的TDTU。示例地,请参考图7,图7为本申请实施例提供的一种TDTU的结构示意图,TDTU包括获取根(Fetch Root)模块、获取偏移量(Fetch Offsets)模块、获取邻居(Fetch Neighbors)模块、同步传播(SynchronizePropagation)模块以及获取状态(Fetch states)模块。

在开始执行遍历过程之前,图处理设备(例如运行在核上的图处理系统软件)需要先初始化确定每个受影响顶点的接收增量个数阈值的过程所需的配置信息。配置信息可以位于图1所示的内存区域,例如位于图1的LLC、主存储器或L2缓存中。

可选地,请参考图8,图8为本申请实施例提供的一种配置信息的示意图,图8示出了存储各个配置信息的存储位置的名称、配置信息的大小(Size)、存储位置的地址基数(Base address)以及配置信息。如图8所示,存储位置包括:偏移量数组(Offset Array)、邻居数组(Neighbor Array)以及拓扑列表(Topology List)。

Neighbor Array用于存储图中每个顶点的邻居顶点,地址基数为Addr1。OffsetArray用于存储每个顶点在Neighbor Array中的邻居顶点的存储开始位置和/或存储结束位置,地址基数为Addr0。Offset Array中的第i个单元存储的是身份标识号(Identitydocument,ID)为i的顶点在Neighbor Array中的邻居顶点的存储开始位置。例如ID为i的顶点的邻居顶点存储在Neighbor Array中的a至b-1单元中,则Offset Array中的第i个单元存储的值为a,第i+1个单元存储的值为b。Topology List包括每个顶点对应的单元,在该过程201中,任一顶点对应的单元存储的值表示该顶点的被访问次数,第i个单元存储的值表示顶点Vi的被访问次数,地址基数为Addr9。

以前述图5所示的图以及后续采用的图计算算法为SSSP算法为例,在图8中,Neighbor Array包括12个单元,Size为12,依次存储有:V1、V4、V5、V3、V4、V4、V5、V6、V7、V8、V9和V3。Offset Array包括12个单元,Size为12,依次存储有:0、3、3、5、6、7、8、9、10、11、11和12。Topology List包括11个顶点分别对应的11个单元,Size为11,在该过程201中,11个单元存储的值分别表示V0至V10这11个顶点的被访问次数,在还未开始遍历时各个顶点的被访问次数均为0。

在初始化完成配置信息后,TDTU基于配置信息(例如图8所示的配置信息)执行遍历过程以确定每个受影响顶点的接收增量个数阈值,请参考图9,图9为本申请实施例提供的一种通过遍历确定每个受影响顶点的接收增量个数阈值的流程示意图,该过程如下所示:

2011、从Active Vertices Array中获取初始顶点,并将初始顶点作为根顶点推入堆栈。

该过程可以由图7所示的Fetch Root模块执行,Fetch Root模块确定并获取初始顶点的过程可以参考前述说明,本申请实施例在此不做赘述。以图5和图8为例,Fetch Root模块获取初始顶点V2,之后可以将V2推入堆栈。

2012、从Offset Array中读取出堆栈中的最顶层顶点的邻居顶点的存储开始位置和/或存储结束位置。

该过程可以由图7所示的Fetch Offsets模块执行。以图5和图8为例,此时堆栈中最顶层顶点为V2,Fetch Offsets模块从Offset Array中读取V2的邻居顶点的存储开始位置为3,存储结束位置为4。

2013、基于堆栈中的最顶层顶点的邻居顶点的存储开始位置和/或存储结束位置,从Neighbor Array中检索最顶层顶点的未访问邻居顶点的ID所在的缓存行。

该过程可以由图7所示的Fetch Neighbors模块执行。以图5和图8为例,FetchNeighbors模块基于存储开始位置和存储结束位置从Neighbor Array中检索得到未访问邻居顶点ID所在的缓存行,从而得到未访问邻居顶点ID分别为:V3和V4。

2014、将堆栈中的最顶层顶点的未访问邻居顶点中的任一顶点推入堆栈,将堆栈中前一个最顶层顶点和当前最顶层顶点之间的边设置为已访问,并同时将Topology List中当前最顶层顶点的值增加1。

该过程可以由图7所示的Synchronize Propagation模块执行。以图5和图8为例,Synchronize Propagation模块将V3推入堆栈,将边(V2,V3)设置为已访问,并同时将Topology List中V3的值增加1后变成1,此时访问至V3。

在前述过程中,当堆栈中的当前最顶层顶点满足第一停止条件时,从堆栈中弹出当前最顶层顶点。当堆栈中的当前最顶层顶点不满足第一停止条件时,再次执行前述过程2012至2014,将当前最顶层顶点的未访问邻居顶点推入堆栈,将堆栈中前一个最顶层顶点和当前最顶层顶点之间的边设置为已访问,并同时将Topology List中当前最顶层顶点的值增加1。直至堆栈中最顶层顶点为最开始入堆栈的初始顶点,且初始顶点满足第一停止条件。之后将下一个初始顶点推入堆栈并重新执行前述过程,直至以每个初始顶点为起始的状态传播路径均被遍历,从而得到每个受影响顶点的接收增量个数阈值。

示例地,以图5和图8为例,当前最顶层顶点为V3,V3不满足第一停止条件,则对V3重新执行前述过程2012至2014,将V4推入堆栈,将边(V3,V4)设置为已访问,并同时将Topology List中V4的值增加1后变成1,此时访问至V4。当前最顶层顶点为V4,V4满足第一停止条件中的条件1,从堆栈中弹出V4。当前最顶层顶点为V3,V3满足第一停止条件,从堆栈中弹出V3。当前最顶层顶点为V2,V2不满足第一停止条件,则对V2重新执行前述过程2012至2014,将V4推入堆栈,将边(V2,V4)设置为已访问,并同时将Topology List中V4的值增加1后变成2,此时访问至V4。当前最顶层顶点为V4,V4满足第一停止条件中的条件1,从堆栈中弹出V4。当前最顶层顶点为V2,V2满足第一停止条件,此时以V2为起始的状态传播路径均被遍历,从堆栈中弹出V2,从初始顶点V2开始的遍历过程结束。之后从下一个初始顶点开始遍历,该过程可以参考从V2开始的遍历过程,本申请实施例在此不做赘述。

在以多每个初始顶点为起始的状态传播路径均被遍历后,Topology List依次存储有:0、0、0、1、2、1、1、1、1、1和0。此时Topology List中存储的顶点对应的值同时也表示顶点的接收增量个数阈值。

本申请实施例中,图可以是完整的一个图,也可以是完整的初始图中的部分结构。示例地,图处理设备(例如运行在核上的图处理系统软件)可以将完整的图配置在一个核上以进行处理,也可以将完整的初始图分块,将每个块配置在一个核上由该核以及对应的TDGraph模块进行处理。

202、基于每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边。遍历过程包括:从多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以根顶点为起始的状态传播路径均被遍历。

以根顶点为起始的状态传播路径可以参考前述以初始顶点为起始的状态传播路径的说明,本申请实施例在此不做赘述。由前述过程102可知,首次遍历过程中,从初始顶点中确定根顶点,后续遍历过程中,从未曾作为根顶点的初始顶点和未曾作为根顶点且满足第二停止条件的顶点中确定根顶点。

需要说明的是,通常应该从至少一个活跃顶点中选择接收增量个数阈值与被访问次数的差值为0的顶点作为根顶点,这样相当于在状态传播过程中将接收到所有增量的顶点确定为根顶点,以使根顶点仅需更新一次以及进行一次状态传播。

当活跃顶点包括的初始顶点未与其他受影响顶点形成环,该初始顶点的接收增量个数阈值与被访问次数的差值为0。但是若活跃顶点包括的初始顶点与其他受影响顶点形成环,则初始顶点的接收增量个数阈值与被访问次数的差值也可能不为0。此时为了尽可能减小状态传播过程中根顶点的更新次数以及状态传播次数,可以从至少一个活跃顶点中选择接收增量个数阈值与被访问次数的差值最小的受影响顶点作为根顶点。示例地,如图5所示,若还存在边(V4,V2),对于SSSP算法,在首次遍历过程开始前,至少一个活跃顶点包括所有初始顶点V2、V4和V5。V2和V4形成一个环,V2、V4和V5中不存在接收增量个数阈值与被访问次数阈值为0的顶点。

第二停止条件包括:条件1.在访问至受影响顶点时受影响顶点的被访问次数小于接收增量个数阈值,和/或条件2.在访问至受影响顶点时受影响顶点不存在可访问的邻居受影响顶点。关于条件2的解释可以参考前述第一停止条件中的条件2的相关说明,本申请实施例在此不做赘述。对于条件1,相当于在状态传播过程中,在访问至顶点时顶点接收到的增量个数还未达到接收增量个数阈值,即还存在未接收到的增量,因此不能继续往下访问,以避免相同顶点的顶点状态的多次重复更新,从而减小更新顶点状态的过程中的无效计算和冗余计算,提高更新效率。第二停止条件包括多个条件时,只要满足至少一个条件即可视为满足第二停止条件,不满足所有条件视为不满足第二停止条件。

在遍历过程中,可以记录访问到的各条边的遍历顺序。示例地,可以创建队列,每访问一条边,则将该边的边标识存储在队列中。

当前述过程201通过遍历所有状态传播路径上的边实现时,相应地,该过程202也可以通过遍历所有状态传播路径上的边实现。此时状态传播路径上的边仅被访问一次,不同状态传播路径的公共边也仅被访问一次。如前述过程201所述,该实现方式中受影响顶点的接收增量个数阈值为受影响顶点连接有邻居受影响顶点的接收边数量,受影响顶点被访问一次指的是受影响顶点连接有邻居受影响顶点的一条接收边被访问。

可选地,可以基于遍历算法遍历以根顶点为起始的状态传播路径上的边。当访问至满足第二停止条件的顶点时,结束当前状态传播路径的遍历,继续遍历其他以根顶点为起始的状态传播路径,直至以根顶点为起始的状态传播路径均被遍历,结束以该根顶点开始的遍历。遍历算法包括:深度优先遍历算法和/或广度优先遍历算法。需要保证所有遍历结束后图中任意两个受影响顶点之间的边均被访问到,因此在遍历过程中一个顶点可能被访问多次。

需要说明的是,遍历过程中,状态传播路径上的边只会被访问一次,不同状态传播路径的公共边也仅被访问一次。对于无向图,当访问至任一受影响顶点时,该受影响顶点连接有邻居受影响顶点的边可以视为一条发送边和一条接收边,因此无向图中状态传播路径上的一条边可以最多被访问两次,受影响顶点和邻居受影响顶点可以互相发送增量。

以下分别以图5和图6为例对遍历以根顶点为起始的所有状态传播路径上的边的过程进行说明,假设后续图计算算法为SSSP算法,且第一停止条件包括条件1和条件2。如图5所示,在首次遍历开始前,至少一个活跃顶点包括V2、V4和V5,基于前述过程201可得,V2、V4和V5中只有V2的接收增量个数阈值与连接有邻居受影响顶点的已访问接收边数量的差值最小,该差值为0,因此可以将V2确定为根顶点遍历以V2为起始的状态传播路径上的边。

如图5所示,以深度优先遍历算法为例,先遍历边(V2,V3),V3的被访问次数加1。V3不满足第二停止条件,遍历边(V3,V4),V4的被访问次数加1。V4满足条件1,返回V3。V3此时满足条件2,返回V2。V2不满足第二停止条件,遍历边(V2,V4),V4的被访问次数加1。V4此时不满足第二停止条件,遍历边(V4,V5),V5的被访问次数加1。参考前述遍历过程,后续依次遍历(V5,V6)、(V6,V7)、(V7,V8)和(V8,V9),V6、V7、V8和V9的被访问次数依次加1。此时以V2为起始的两条状态传播路径上的边均被遍历,且每个受影响顶点的被访问次数达到各自的接收增量个数阈值,可以结束遍历过程。

如图5所示,以广度优先遍历算法为例,先遍历边(V2,V3),再遍历边(V2,V4),V3和V4的被访问次数均加1。V3不满足第二停止条件,遍历边(V3,V4),V4的被访问次数均加1。V4此时不满足第二停止条件,遍历边(V4,V5),V5的被访问次数加1。参考前述遍历过程,后续依次遍历(V5,V6)、(V6,V7)、(V7,V8)和(V8,V9),V6、V7、V8和V9的被访问次数依次加1。此时以V2为起始的两条状态传播路径上的边均被遍历,且每个受影响顶点的被访问次数达到各自的接收增量个数阈值,可以结束遍历过程。

如图6所示,在第一次遍历过程中,由于受影响顶点连接有邻居受影响顶点的边无方向,因此可以将受影响顶点连接有邻居受影响顶点的边视为一条发送边和一条接收边。在首次遍历开始前,至少一个活跃顶点包括V0、V1、V2、V4和V5,基于前述过程201可得,在V0、V1、V2、V4和V5中,V1的接收增量个数阈值与被访问次数的差值最小,该差值为1,因此可以将V1确定为根顶点遍历以V1为起始的状态传播路径上的边。

如图6所示,以深度优先遍历算法为例,先遍历边(V1,V0),V0的被访问次数加1。V0满足第二停止条件的条件1,返回V1。此时以V1为起始的状态传播路径均被遍历,需要重新选择根顶点。

当前至少一个活跃顶点包括V0、V2、V4和V5。在V0、V2、V4和V5中,V0和V2的接收增量个数阈值与被访问次数的差值最小,该差值为2,因此可以将V0和V2中的任一顶点确定为根顶点。假设选择V0作为根顶点,遍历边(V0,V1),V1的被访问次数加1。V1满足第二停止条件的条件2,返回V0。遍历边(V0,V4),V4的被访问次数加1。V4满足第二停止条件的条件1,返回V0。遍历边(V0,V5),V5的被访问次数加1。V5满足第二停止条件的条件1,返回V0。此时以V0为起始的状态传播路径均被遍历,需要重新选择根顶点。

当前至少一个活跃顶点包括V2、V4和V5。在V2、V4和V5中,V2和V5的接收增量个数阈值与被访问次数的差值最小,该差值为2,因此可以将V2和V5中的任一顶点确定为根顶点。假设选择V2作为根顶点,遍历边(V2,V3),V3的被访问次数加1。V3满足第二停止条件的条件1,返回V2。遍历边(V2,V4),V4的被访问次数加1。V4满足第二停止条件的条件1,返回V2。此时以V2为起始的状态传播路径均被遍历,需要重新选择根顶点。后续重新确定根顶点以及遍历以新的根顶点为起始的所有状态传播路径上的边的过程可以参考前述说明,本申请实施例在此不做赘述。

如图6所示,以广度优先遍历算法为例,遍历边(V1,V0),V0的被访问次数加1。V0满足第二停止条件的条件1,返回V1。此时以V1为起始的状态传播路径均被遍历,需要重新选择根顶点。

当前至少一个活跃顶点包括V0、V2、V4和V5。在V0、V2、V4和V5中,V0和V2的接收增量个数阈值与被访问次数的差值最小,该差值为2,因此可以将V0和V2中的任一顶点确定为根顶点。假设选择V0作为根顶点,遍历边(V0,V1)、边(V0,V4)和边(V0,V5),V1、V4和V5的被访问次数均加1。V1满足第二停止条件的条件2,返回V4。V4满足第二停止条件的条件1,返回V5。V5满足第二停止条件的条件1,返回V0。此时以V0为起始的状态传播路径均被遍历,需要重新选择根顶点。

当前至少一个活跃顶点包括V2、V4和V5。在V2、V4和V5中,V2和V5的接收增量个数阈值与被访问次数的差值最小,该差值为2,因此可以将V2和V5中的任一顶点确定为根顶点。假设选择V2作为根顶点,遍历边(V2,V3)和边(V2,V4),V3和V4的被访问次数均加1。V3满足第二停止条件的条件1,返回V4。V4满足第二停止条件的条件1,返回V2。此时以V2为起始的状态传播路径均被遍历,需要重新选择根顶点。后续重新确定根顶点以及遍历以新的根顶点为起始的所有状态传播路径上的边的过程可以参考前述说明,本申请实施例在此不做赘述。

在前述图9的基础上,以下以堆栈的角度对基于每个受影响顶点的接收增量个数阈值,采用深度优先遍历算法执行的至少一次遍历过程进行进一步说明。该过程的执行主体可以是TDGraph模块,例如可以是TDGraph模块中的TDTU(例如图7所示的TDTU)。基于前述图9所示的实施例得到了每个受影响顶点的接收增量个数阈值(即连接有邻居受影响顶点的接收边数量)后,TDTU基于配置信息(例如图8所示的配置信息)采用深度优先遍历算法执行至少一次遍历过程以得到按照遍历顺序排列的多条边。

如图8所示,存储位置还可以包括:活跃顶点数组(Active Vertices Array),Active Vertices Array用于实时记录图中每个顶点是否为活跃顶点,地址基数为Addr6。Active Vertices Array包括图中每个顶点分别对应的比特位,第i个比特位用于记录Vi是否为活跃顶点。

示例地,Active Vertices Array中可以通过位向量形式记录各个顶点是否为活跃顶点。例如“1”可以表示顶点为活跃顶点,“0”表示顶点为非活跃顶点。由前述可得,还未开始遍历时,Active Vertices Array中每个初始顶点对应的值均为“1”。当将一个活跃顶点确定为根顶点时,将该活跃顶点设置为非活跃顶点,例如可以将Active Vertices Array中其对应的值置为0。在遍历过程中每访问至一个满足第二停止条件的受影响顶点,将该受影响顶点设置为活跃顶点,例如可以将Active Vertices Array中该受影响顶点对应的值置为1。

如图5和图8所示,Active Vertices Array包括图中11个顶点分别对应的11个比特位,Size为11。在还未开始遍历时,Active Vertices Array中第2、4和5个比特位为1,其他比特位均为0。请参考图10,图10为本申请实施例提供的一种基于每个受影响顶点的接收增量个数阈值执行至少一次遍历过程的流程示意图,在图10所示的遍历过程中,每访问任一受影响顶点连接有邻居受影响顶点的一条接收边,即将Topology List中该任一受影响顶点对应的值减1,因此在该遍历过程中,Topology List中存储的值分别表示V0至V10这11个顶点的接收增量个数阈值与被访问次数的差值,在还未开始遍历时Topology List中存储的值分别表示V0至V10这11个顶点的接收增量个数阈值。该遍历过程如下所示:

2021、从至少一个活跃顶点中确定根顶点,将根顶点推入堆栈并在ActiveVertices Array中将根顶点设置为非活跃顶点。

该过程可以由图7所示的Fetch Root模块执行。如前述图9对应实施例所述,Active Vertices Array中记录有每个顶点是否为活跃顶点,Topology List中记录有每个顶点的接收增量个数阈值与被访问次数的差值。接收增量个数阈值与被访问次数的差值越小表示顶点连接有邻居受影响顶点的所有未访问接收边的数量越少,接收增量个数阈值与被访问次数的差值为0表示顶点连接有邻居受影响顶点的所有未访问边均为发送边,因此可以通过Active Vertices Array确定活跃顶点,再将活跃顶点中在Topology List中值最小的活跃顶点作为根顶点。以图5和图8为例,Fetch Root模块确定Active Vertices Array中的活跃顶点V2、V4和V5中V2在Topology List中的值最小,其为0,将V2推入堆栈,并在Active Vertices Array中将V2的状态设置为非活跃顶点,例如将Active Vertices Array中第二个比特位由1置为0。

2022、从Offset Array中读取出堆栈中的最顶层顶点的邻居顶点的存储开始位置和/或存储结束位置。

该过程可以由图7所示的Fetch Offsets模块执行。以图5和图8为例,此时堆栈中最顶层顶点为V2,Fetch Offsets模块从Offset Array中读取V2的邻居顶点的存储开始位置为3,存储结束位置为4。

2023、基于堆栈中的最顶层顶点的邻居顶点的存储开始位置和/或存储结束位置,从Neighbor Array中检索最顶层顶点的未访问邻居顶点的ID所在的缓存行。

该过程可以由图7所示的Fetch Neighbors模块执行。以图5和图8为例,FetchNeighbors模块基于存储开始位置和存储结束位置从Neighbor Array中检索得到未访问邻居顶点ID所在的缓存行,从而得到未访问邻居顶点ID分别为:V3和V4。

2024、将堆栈中的最顶层顶点的未访问邻居顶点中的任一顶点推入堆栈,将堆栈中前一个最顶层顶点和当前最顶层顶点之间的边设置为已访问并添加到队列中,同时将Topology List中当前最顶层顶点的值减1。

该过程可以由图7所示的Synchronize Propagation模块执行。以图5和图8为例,Synchronize Propagation模块将V3推入堆栈,将边(V2,V3)设置为已访问并将边(V2,V3)添加到队列中,同时将Topology List中V3的值减1后变成0,此时访问至V3。队列可以包括先进先出(First Input First Output,FIFO)队列,名称可以为提取的缓冲区(FetchedBuffer)。

本申请实施例中,由于前述过程每访问一个顶点连接有邻居受影响顶点的接收边后,会将Topology List中该顶点的值减1,因此可以通过当前Topology List中该顶点的值确定顶点是否满足第二停止条件的条件1。若在访问至一个顶点时当前Topology List中该顶点的值为0,则确定该顶点不满足第二停止条件的条件1。若在访问至一个顶点时当前Topology List中该顶点的值不为0,则确定该顶点满足第二停止条件的条件1。

在前述过程中,当堆栈中的当前最顶层顶点满足第二停止条件时,从堆栈中弹出当前最顶层顶点。当堆栈中的当前最顶层顶点不满足第二停止条件时,再次执行前述过程2022至2024,将当前最顶层顶点的未访问邻居顶点推入堆栈,将堆栈中前一个最顶层顶点和当前最顶层顶点之间的边设置为已访问并添加到队列中,同时将Topology List中当前最顶层顶点的值减1。直至堆栈中最顶层顶点为最开始入堆栈的根顶点,且根顶点满足第二停止条件。之后将下一个根顶点推入堆栈并重新执行前述过程,直至每个受影响顶点的被访问次数达到各自的接收增量个数阈值,即每个受影响顶点在Topology List中的值均为0,从而得到按照遍历顺序存储有多条边的队列。

示例地,以图5和图8为例,当前最顶层顶点为V3,V3不满足第二停止条件,则对V3重新执行前述过程2022至2024,将V4推入堆栈,将边(V3,V4)设置为已访问并添加到队列中,同时将Topology List中V4的值减1后变成1,此时访问至V4。当前最顶层顶点为V4,V4满足第二停止条件中的条件1,从堆栈中弹出V4。当前最顶层顶点为V3,V3满足第二停止条件中的条件2,从堆栈中弹出V3。当前最顶层顶点为V2,V2不满足第二停止条件,则对V2重新执行前述过程2022至2024,将V4推入堆栈,将边(V2,V4)设置为已访问并添加到队列中,同时将Topology List中V4的值减1后变成0,此时访问至V4。当前最顶层顶点为V4,V4不满足第二停止条件,则对V4重新执行前述过程2022至2024,将V5推入堆栈,将边(V4,V5)设置为已访问并添加到队列中,同时将Topology List中V5的值减1后变成0,此时访问至V5。后续依次将边(V5,V6)、(V6,V7)、(V7,V8)以及(V8,V9)设置为已访问并添加到队列中。

通过前述遍历的过程得到了队列(例如Fetched Buffer),队列中存储有按照遍历顺序排列的多条边。

后续状态传播过程可以由图1所示的核(例如运行在核上的图处理系统软件)执行。参见前述过程201,多条边标识可以按照遍历顺序存储在队列中。TDTU将该队列发送给对应的核,核基于该队列进行图计算中的状态传播过程。

状态传播过程还需要队列中每条边两端的受影响顶点的顶点状态。在一种实现方式中,图处理设备可以在前述遍历过程结束后,分别获取队列中的每条边两端的受影响顶点的顶点状态,每条边两端的顶点的顶点状态也可以存储在队列中。或者可以在每访问一条边,即获取这条边两端的受影响顶点的顶点状态。

在另一种实现方式中,可以在后续状态传播过程中每选择一条当前需要通过状态传播的边,即获取该选择的边两端的受影响顶点的顶点状态。参见下述过程203和204,以下述过程203和204为例对该实现方式进行说明。

203、按照多条边的排列顺序选择当前需要通过状态传播的边。

204、获取选择的边两端的受影响顶点的顶点状态。

图处理设备可以从图1所示的LLC、主存储器或L2缓存中获取选择的边两端的受影响顶点的顶点状态。

可选地,图处理设备可以从图中确定多个热顶点,之后将多个热顶点的顶点状态存储在连续存储区域。热顶点为在状态传播过程中被频繁访问的顶点,即访问频率较高的顶点,其接收增量个数阈值大于或等于数量阈值。若通过遍历方式执行遍历过程,则热顶点连接有邻居受影响顶点的接收边数量大于或等于数量阈值。在获取选择的边两端的受影响顶点的顶点状态时,当选择的边任一端的受影响顶点为热顶点时,从连续存储区域获取任一端的受影响顶点的顶点状态。当任一端的受影响顶点为非热顶点时,从内存区域获取任一端的受影响顶点的顶点状态。

数量阈值可以通过各个顶点的访问频率以及自定义比率α得到,0≤α≤1。本申请实施例中,将顶点的接收增量个数阈值近似视为顶点的访问频率,将访问频率在所有顶点中占前α(可以包括α)的顶点确定为热顶点,即将访问频率在所有顶点中占前α的顶点中的最小访问频率确定为数量阈值。

可选地,可以基于配置信息(例如图8所示的配置信息)获取选择的边两端的受影响顶点的顶点状态。如图8所示,存储位置还可以包括:顶点状态数组(Vertex StatesArray)、状态合并数组(Coalesced States Array)、哈希表(Hash Tables,H Tables)以及热顶点数组(Hot Vertices Array)。图8示出了Vertex States Array1和Vertex StatesArray2这两个内存区域,Vertex States Array1和Vertex States Array2用于存储每个顶点的顶点状态,地址基数分别为Addr2和Addr3。图8示出了Coalesced States Array1和Coalesced States Array2这两个连续存储区域,Coalesced States Array1和CoalescedStates Array2用于存储热顶点的顶点状态,地址基数分别为Addr4和Addr5。H Tables用于存储热顶点的索引信息,地址基数为Addr7。

Hot Vertices Array用于记录每个顶点是否为热顶点,地址基数为Addr8。HotVertices Array包括图中每个顶点分别对应的比特位,第i个比特位用于记录Vi是否为热顶点。示例地,Hot Vertices Array中可以通过位向量形式记录各个顶点是否为热顶点。例如“1”可以表示顶点为热顶点,“0”表示顶点为非热顶点。

可选地,配置信息还包括图结构的首个顶点ID(First vertex ID)和最后一个顶点ID(Last vertex ID)。其中,Vertex States Array相当于内存区域,Coalesced StatesArray相当于连续存储区域。

该获取选择的边两端的受影响顶点的顶点状态的过程可以由TDTU的Fetchstates模块以及VSCU执行。对于选择的边任一端的受影响顶点,VSCU先确定该任一端的受影响顶点是否是热顶点。当该受影响顶点的访问频率在所有顶点中占前α时将该受影响顶点确定为热顶点,并将Hot Vertices Array该受影响顶点对应的比特位置为1。当该受影响顶点的访问频率在所有顶点中未占前α时将该受影响顶点确定为非热顶点,并将HotVertices Array该受影响顶点对应的比特位置为0。

若确定该受影响顶点为非热顶点,则VSCU获取并向Fetch states模块提供该受影响顶点的顶点状态在Vertex States Array中的地址。Fetch states模块根据VSCU提供的地址从Vertex States Array中获取到该受影响顶点的顶点状态。

若确定该受影响顶点为热顶点,则VSCU先判断该受影响顶点是否为第一次访问。当该受影响顶点不是第一次访问时,VSCU从H Tables中获取受影响顶点的顶点状态在Coalesced States Array中的地址,并向Fetch states模块提供该地址。Fetch states模块根据VSCU提供的地址从Coalesced States Array中获取到该受影响顶点的顶点状态。

当该受影响顶点为第一次访问时,此时该受影响顶点的顶点状态存储在VertexStates Array中。VSCU从Vertex States Array获取该受影响顶点的顶点状态,将该受影响顶点的顶点状态存储在Coalesced States Array中,并在H Tables中添加受影响顶点的索引信息以表示受影响顶点在Coalesced States Array中的地址。例如添加受影响顶点V的索引信息,vertex offset表示受影响顶点V在Coalesced StatesArray中的偏移地址。

请参考图11,图11为本申请实施例提供的一种热顶点的顶点状态存储示意图,图11示出了位于LLC的一个缓存行(cache line)1,cache line1为连续存储区域,其存储有多个热顶点的顶点状态(图11示出了4个)。在图计算过程中,大多数状态传播过程仅涉及到一小部分顶点是受影响顶点需要更新顶点状态,即需要更新顶点状态的顶点在所有顶点中占比较小,因此大多数顶点的顶点状态在图计算过程中是不需要的。相关技术中,各个顶点的顶点状态稀疏地存储在主存储器中,在图计算过程中,一个缓存行存储的图计算所需的顶点状态数量较小,甚至可能只存储有一个图计算所需的顶点状态。这样导致获取顶点状态时会存在较多的随机数据访问,从而导致获取顶点状态的过程中数据访问开销较大。本申请实施例中,将热顶点的顶点状态合并存储在连续的存储区域,使得一个缓存行存储有较多数量的图计算所需的顶点状态,即一个缓存行能够用于状态传播过程中大部分的顶点状态访问过程,顶点状态的获取连续且规则化,从而减小了数据访问开销。

205、基于选择的边以及选择的边两端的受影响顶点的顶点状态进行状态传播。

图处理设备可以基于选择的边的权重和/或选择的边两端的受影响顶点的顶点状态确定增量,之后沿着选择的边传播增量。

由前述过程可知,状态传播过程中边的遍历顺序是由队列中边的存储顺序决定的,而队列中边的存储顺序是由过程202的遍历过程中的根顶点和访问至某一顶点时顶点是否满足第二停止条件这两个因素决定的。在确定接收增量个数阈值后,至少一个活跃顶点中某一活跃顶点的接收增量个数阈值与连接有邻居受影响顶点的已访问接收边数量的差值最小时,相当于在状态传播过程中该活跃顶点未接收到的增量个数最少,将该活跃顶点作为根顶点开始遍历。当访问至一个受影响顶点,该受影响顶点的被访问次数小于其接收增量个数阈值,满足第二停止条件的条件1,相当于在状态传播过程中该受影响顶点当前未接收到所有增量,因此不能继续往下访问。

这样使得一个活跃顶点在接收增量个数阈值与被访问次数的差值最小时才能作为根顶点,在遍历过程中接收增量个数阈值与被访问次数的差值为0时才可以继续往下访问其邻居受影响顶点。状态传播过程按照这种访问顺序进行状态传播时,一个受影响顶点在累积到大部分增量甚至所有增量后才会往下进行状态传播,实现了状态传播的规范化,有效减小了后续访问的受影响顶点的更新次数,从而减小了更新顶点状态的过程中的无效计算和冗余计算,提高了更新效率。

当前述两次遍历过程均以遍历状态传播路径上的边实现时,如前述图9和图10的实施例所述,根顶点和是否满足第二停止条件中的条件1可以通过Topology List中各个受影响顶点的值确定。Topology List中各个受影响顶点的值在图9的过程2014和图10的过程2024会发生变化。在图9所示的遍历中,当一个受影响顶点连接有邻居受影响顶点的接收边被访问时,将Topology List中该受影响顶点的值增加1。通过图9的遍历得到了每个受影响顶点的接收增量个数阈值(即受影响顶点连接有邻居受影响顶点的接收边数量)。

在图10所示的遍历中,当一个受影响顶点连接有邻居受影响顶点的接收边被访问时,相当于在状态传播过程中一个状态传播已经通过该受影响顶点(即该受影响顶点已经接收到一个增量),将该受影响顶点在Topology List中的值减1。当某一活跃顶点在Topology List中的值最小例如为0时,相当于在后续状态传播过程中该某一活跃顶点未接收到的增量为至少一个活跃顶点中最少的(例如已经接收到了所有通过该某一活跃顶点的增量),将该某一活跃顶点作为根顶点开始进行遍历。当访问至一个受影响顶点,该受影响顶点在Topology List中的值不为0时,满足第一停止条件的条件1,相当于在状态传播过程中该受影响顶点还存在未接收到的增量,因此不能继续往下遍历。

本申请实施例中,通过在图9和图10两个遍历中修改Topology List中的值,使得一个顶点在大部分或者所有连接有邻居受影响顶点的接收边均被访问后,才可以继续往下遍历。状态传播过程按照这种遍历顺序进行状态传播时,一个顶点在接收到大部分或者所有增量后才会往下进行状态传播,实现了状态传播的规范化,减小了每个受影响顶点的更新次数以及生成增量的次数,例如当一个顶点在所有连接有邻居受影响顶点的接收边均被访问后再继续往下遍历,则每个受影响顶点仅需更新一次状态以及生成一次增量。从而减小了更新顶点状态的过程中的无效计算和冗余计算,提高了更新效率。

综上所述,本申请实施例提供的图的处理方法,当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值基于每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边。之后按照多条边的排列顺序选择当前需要通过状态传播的边,获取选择的边两端的受影响顶点的顶点状态,并基于选择的边以及选择的边两端的受影响顶点的顶点状态进行状态传播。遍历过程包括:从所述多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以根顶点为起始的状态传播路径均被遍历。在确定接收增量个数阈值后,当某一活跃顶点的接收增量个数阈值与被访问次数的差值为至少一个活跃顶点中最小的时,相当于在后续状态传播过程中该某一活跃顶点未接收到的增量数量为至少一个活跃顶点中最少的,将该某一活跃顶点作为根顶点开始遍历。当访问至一个受影响顶点,该受影响顶点的被访问次数小于其接收增量个数阈值,相当于在后续状态传播过程该顶点当前接收到的增量数不够,因此不能继续往下访问。这样使得一个活跃顶点在接收增量个数阈值与被访问次数的差值最小时才能作为根顶点,在遍历过程中接收增量个数阈值与被访问次数的差值为0时才可以继续往下访问其邻居受影响顶点。状态传播过程按照这种遍历顺序进行状态传播时,从未接收到增量的数量最少的活跃顶点开始进行状态传播,接收到增量的受影响顶点在累积到所有增量后才会往下进行状态传播,实现了状态传播的规范化,有效减小了后续访问的受影响顶点的更新次数,从而减小了更新顶点状态的过程中的无效计算和冗余计算,提高了更新效率。

当前述两个遍历过程均以遍历状态传播路径上的边实现时,通过在两个遍历过程中修改Topology List中的值,使得一个顶点在大部分或者所有连接有邻居受影响顶点的接收边均被访问后,才可以继续往下遍历。状态传播过程按照这种遍历顺序进行状态传播时,一个顶点在接收到大部分或者所有增量后才会往下进行状态传播,实现了状态传播的规范化,减小了每个受影响顶点的更新次数以及生成增量的次数,例如当一个顶点在所有连接有邻居受影响顶点的接收边均被访问后再继续往下遍历,则每个受影响顶点仅需更新一次状态以及生成一次增量。从而减小了更新顶点状态的过程中的无效计算和冗余计算,提高了更新效率。

此外,图处理设备可以从图中确定多个热顶点,之后将多个热顶点的顶点状态存储在连续存储区域。热顶点的接收增量个数阈值大于或等于数量阈值。在获取选择的边任一端的受影响顶点的顶点状态时,当受影响顶点为热顶点时,从连续存储区域获取受影响顶点的顶点状态。当受影响顶点为非热顶点时,从内存区域获取受影响顶点的顶点状态。在图计算过程中,大多数状态传播过程仅涉及到一小部分顶点是受影响顶点需要更新顶点状态,即需要更新顶点状态的顶点在所有顶点中占比较小,因此大多数顶点的顶点状态在图计算过程中是不需要的。将热顶点的顶点状态合并存储在连续的存储区域,使得一个缓存行存储有较多数量的图计算所需的顶点状态,即一个缓存行能够用于状态传播过程中大部分的顶点状态访问过程,顶点状态的获取连续且规则化,从而减小了数据访问开销。

本申请实施例提供的方法的先后顺序可以进行适当调整,过程也可以根据情况进行相应增减。任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,本申请实施例对此不做限定。

上述主要从设备的角度对本申请实施例提供的图的处理方法进行了介绍。可以理解的是,设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

本申请实施例可以根据上述方法示例对设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

图12为本申请实施例提供的一种图的处理装置的框图,示例性地,该图的处理装置可以是图处理设备,也可以是其中的芯片或者其他具有上述图的处理装置功能的组合器件、部件等。在采用对应各个功能划分各个功能模块的情况下,所述图的处理装置300,包括:

第一确定模块301,用于当图发生变化时,确定在进行状态传播时多个受影响顶点中每个受影响顶点的接收增量个数阈值,所述受影响顶点为所述图发生变化时需要更新顶点状态的顶点;

遍历模块302,用于基于所述每个受影响顶点的接收增量个数阈值,执行至少一次遍历过程,直至所述每个受影响顶点的被访问次数达到各自的接收增量个数阈值,得到按照遍历顺序排列的多条边;

状态传播模块303,用于基于按照所述遍历顺序排列的所述多条边进行状态传播;

所述遍历过程包括:从所述多个受影响顶点中的至少一个活跃顶点中确定根顶点;遍历以所述根顶点为起始的状态传播路径,在访问至满足第一停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以所述根顶点为起始的状态传播路径均被遍历;

其中,所述至少一个活跃顶点包括:未曾作为根顶点的初始顶点和未曾作为根顶点且满足所述第一停止条件的受影响顶点,所述至少一个活跃顶点中所述根顶点的接收增量个数阈值与被访问次数的差值最小,所述初始顶点为所述图发生变化时直接受影响的顶点;所述第一停止条件包括:在访问至受影响顶点时所述受影响顶点的被访问次数小于接收增量个数阈值,和/或在访问至受影响顶点时所述受影响顶点不存在可访问的邻居受影响顶点。

结合上述方案,所述状态传播模块303,具体用于:按照所述多条边的排列顺序选择当前需要通过状态传播的边;获取选择的边两端的受影响顶点的顶点状态;基于选择的边以及选择的边两端的受影响顶点的顶点状态进行状态传播。

结合上述方案,图13为本申请实施例提供的另一种图的处理装置的框图,在图12的基础上,所述装置还包括:

第二确定模块304,用于从所述图中确定多个热顶点,所述热顶点的接收增量个数阈值大于或等于数量阈值;

存储模块305,用于将所述多个热顶点的顶点状态存储在连续存储区域;

所述状态传播模块303,具体用于:当选择的边的任一端的受影响顶点为热顶点时,从所述连续存储区域获取所述任一端的受影响顶点的顶点状态;当所述任一端的受影响顶点为非热顶点时,从内存区域获取所述任一端的受影响顶点的顶点状态。

结合上述方案,所述第一确定模块301,具体用于:分别遍历以每个初始顶点为起始的状态传播路径,在访问至满足第二停止条件的受影响顶点时停止当前状态传播路径的遍历,直至以所述每个初始顶点为起始的状态传播路径均被遍历;将所述受影响顶点的被访问次数确定为所述受影响顶点的接收增量个数阈值;所述第二停止条件包括:受影响顶点为其他初始顶点,和/或在访问至受影响顶点时所述受影响顶点不存在可访问的邻居受影响顶点。

结合上述方案,所述第一确定模块301,具体用于:遍历以所述初始顶点为起始的状态传播路径上的边,所述受影响顶点的被访问次数为从所述受影响顶点的邻居受影响顶点到达所述受影响顶点的边数量;所述遍历模块302,具体用于:遍历以所述根顶点为起始的状态传播路径上的边。

结合上述方案,所述第一确定模块301,具体用于:基于遍历算法遍历以所述初始顶点为起始的状态传播路径上的边;所述遍历模块302,具体用于:基于所述遍历算法遍历以所述根顶点为起始的状态传播路径上的边,所述遍历算法包括:深度优先遍历算法和/或广度优先遍历算法。

图14为本申请实施例提供的一种电子设备的结构示意图,该电子设备400可以为图处理设备,或者图处理设备中的芯片或者功能模块。如图14所示,该电子设备400包括处理器401,收发器402以及通信线路403。

其中,处理器401用于执行如图3、图4、图9和图10所示的方法实施例中的任一步骤,且在执行诸如收发数据等过程时,可选择调用收发器402以及通信线路403来完成相应操作。

进一步的,该电子设备400还可以包括存储器404。其中,处理器401,存储器404以及收发器402之间可以通过通信线路403连接。

其中,处理器401是处理器、通用处理器网络处理器(network processor,NP)、数字信号处理器(digital signal processing,DSP)、微处理器、微控制器、可编程逻辑器件(programmable logic device,PLD)或它们的任意组合。处理器401还可以是其它具有处理功能的装置,例如电路、器件或软件模块,不予限制。

收发器402,用于与其他设备或其它通信网络进行通信,其它通信网络可以为以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。收发器402可以是模块、电路、收发器或者任何能够实现通信的装置。

收发器402主要用于数据的收发,可以包括发射器和接收器,分别进行信号的发送和接收;除信号收发之外的操作由处理器实现,如信息处理,计算等。

通信线路403,用于在电子设备400所包括的各部件之间传送信息。

在一种设计中,可以将处理器看做逻辑电路,收发器看做接口电路。

存储器404,用于存储指令。其中,指令可以是计算机程序。

其中,存储器404可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DRRAM)。存储器404还可以是只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或其他磁存储设备等。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。

需要指出的是,存储器404可以独立于处理器401存在,也可以和处理器401集成在一起。存储器404可以用于存储指令或者程序代码或者一些数据等。存储器404可以位于电子设备400内,也可以位于电子设备400外,不予限制。处理器401,用于执行存储器604中存储的指令,以实现本申请上述实施例提供的方法。

在一种示例中,处理器401可以包括一个或多个处理器,例如图14中的处理器0和处理器1。

作为一种可选的实现方式,电子设备400包括多个处理器,例如,除图14中的处理器401之外,还可以包括处理器407。

作为一种可选的实现方式,电子设备400还包括输出设备405和输入设备406。示例性地,输入设备406是键盘、鼠标、麦克风或操作杆等设备,输出设备405是显示屏、扬声器(speaker)等设备。

需要指出的是,电子设备400可以是芯片系统或有图14中类似结构的设备。其中,芯片系统可以由芯片构成,也可以包括芯片和其他分立器件。本申请的各实施例之间涉及的动作、术语等均可以相互参考,不予限制。本申请的实施例中各个设备之间交互的消息名称或消息中的参数名称等只是一个示例,具体实现中也可以采用其他的名称,不予限制。此外,图14中示出的组成结构并不构成对该电子设备400的限定,除图14所示部件之外,该电子设备400可以包括比图14所示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本申请中描述的处理器和收发器可实现在集成电路(integrated circuit,IC)、模拟IC、射频集成电路、混合信号IC、专用集成电路(application specific integratedcircuit,ASIC)、印刷电路板(printed circuit board,PCB)、电子设备等上。该处理器和收发器也可以用各种IC工艺技术来制造,例如互补金属氧化物半导体(complementary metaloxide semiconductor,CMOS)、N型金属氧化物半导体(nMetal-oxide-semiconductor,NMOS)、P型金属氧化物半导体(positive channel metal oxide semiconductor,PMOS)、双极结型晶体管(Bipolar Junction Transistor,BJT)、双极CMOS(BiCMOS)、硅锗(SiGe)、砷化镓(GaAs)等。

图15为本申请实施例提供的一种图的处理装置的结构示意图。该图的处理装置可适用于上述方法实施例所示出的场景中。为了便于说明,图15仅示出了图的处理装置的主要部件,包括处理器、存储器、控制电路、以及输入输出装置。处理器主要用于对通信协议以及通信数据进行处理,执行软件程序,处理软件程序的数据。存储器主要用于存储软件程序和数据。控制电路主要用于供电及各种电信号的传递。输入输出装置主要用于接收用户输入的数据以及对用户输出数据。

当该图的处理装置为图处理设备时,该控制电路可以为主板,存储器包括硬盘,RAM,ROM等具有存储功能的介质,处理器可以包括基带处理器和中央处理器,基带处理器主要用于对通信协议以及通信数据进行处理,中央处理器主要用于对整个图的处理装置进行控制,执行软件程序,处理软件程序的数据,输入输出装置包括显示屏、键盘和鼠标等;控制电路可以进一步包括或连接收发电路或收发器,例如:网线接口等,用于发送或接收数据或信号,例如与其他设备进行数据传输及通信。进一步的,还可以包括天线,用于无线信号的收发,用于与其他设备进行数据/信号传输。

根据本申请实施例提供的方法,本申请还提供一种计算机程序产品,该计算机程序产品包括计算机程序代码,当计算机程序代码在计算机上运行时,使得计算机执行本申请实施例任一所述的方法。

本申请实施例还提供了一种计算机可读存储介质。上述方法实施例中的全部或者部分流程可以由计算机或者具有信息处理能力的装置执行计算机程序或指令,以控制相关的硬件完成,该计算机程序或该组指令可存储于上述计算机可读存储介质中,该计算机程序或该组指令在执行时,可包括如上述各方法实施例的流程。计算机可读存储介质可以是前述任一实施例的服务器的内部存储单元,例如服务器的硬盘或内存。上述计算机可读存储介质也可以是上述服务器的外部存储设备,例如上述服务器上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,上述计算机可读存储介质还可以既包括上述服务器的内部存储单元也包括外部存储设备。上述计算机可读存储介质用于存储上述计算机程序或指令以及上述服务器所需的其他程序和数据。上述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

相关技术
  • 心电图数据的分割处理方法、装置及可读存储介质
  • 用于神经网络的特征图处理方法、装置和系统及存储介质
  • 基于图半监督学习的文档二值化处理方法、系统、装置
  • 数据处理方法、装置、系统、服务端装置和客户端装置
  • 话音数据处理方法以及支持该话音数据处理方法的电子装置
  • 心电图的处理方法及装置、心电图的远程处理方法及系统
  • 心电图的处理方法及装置、心电图的远程处理方法及系统
技术分类

06120116514659