图数据处理方法及装置与流程

文档序号:23395719发布日期:2020-12-22 14:03阅读:93来源:国知局
本申请涉及分布式图计算技术,具体地,涉及图数据处理方法及装置。
背景技术
::图是由点(vertex)和边(edge)构成的一种数据结构,基于图的数据处理和分析已经形成了图计算这一专门的研究方向。单机图处理系统由于资源的限制难以满足高效处理的要求,而分布式图计算通过利用更多的计算资源,能够有效地提高图处理的能力,因而逐渐成为一种主流的解决方案。尽管分布式系统能够给计算提供充足的资源,同时分布式图计算引擎降低了分布式计算的难度,然而图计算很高的访存计算比、类型与操作的多样性、结构不规则以及数据局部性差等特点给大规模图的高效处理带来了巨大的挑战。特别是在分布式计算环境中,数据局部性差意味着系统需要耗费更多的时间进行大量数据的跨节点传输,而这进一步降低了数据处理的效率,而结构的不规则不可避免的会引起负载不均衡,从而极大地影响应用的效率。对于分布式图计算而言,无论采用哪种计算模型或框架,任务的执行都是在多个计算节点上完成的,各计算节点通过网络将其他计算节点上的数据读取到本地内存之中完成处理。与数据的本地读取相比,网络读取延迟更大,速度更慢,因此减少执行过程中的网络通信量、提升通信效率对于提升计算性能至关重要。针对相关技术中,已有分布式图计算存在节点间通信效率不高、计算低效的问题,目前尚未存在有效的解决方案。技术实现要素:本申请实施例提供了一种图数据处理方法及装置,以至少解决已有分布式图计算所存在的节点间通信效率不高、计算低效的问题。根据本申请实施例的第一个方面,提供了一种图数据处理方法,包括:收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。可选地,所述在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加到至预设集合包括:在检测出所述激活消息中的图数据的活跃边的数目大于所述图数据总边数的情况下,将所述激活消息中的所述图顶点标记为活跃节点。可选地,所述在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加到至预设集合包括:将所述预设集合的数据结构配置为位图;将所述激活消息中已被激活的图顶点数据按照所述位图的数据结构添加至所述预设集合。可选地,所述方法还包括:在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口,其中,所述同步消息包括对于所述图数据的聚合和计算阶段中的计算节点间的数据同步消息的<id,value>消息结构,id表示顶点的全局id,value表示对应的数值;和/或,在所述第一计算节点和所述第二计算节点之间传输所述激活消息的过程中采用mpi接口,其中,所述激活消息包括对于所述图数据的扩散阶段中计算节点之间的顶点激活消息的<id>消息结构,id表示待激活的邻居顶点标识。可选地,所述在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口包括:在所述第一计算节点作为发送端发送所述同步消息的情况下,在所述第一结算节点中的计算线程通过发送缓冲区域发送所述同步消息;在所述第二计算节点作为发送端发送所述同步消息的情况下,在所述第二结算节点中的计算线程通过发送缓冲区域发送所述同步消息。可选地,所述在所述第一计算节点和所述第二计算节点之间传输所述激活消息的过程中采用mpi接口包括:在所述第一计算节点作为接收端接收所述激活消息的情况下,通过所述同步消息中消息块头部的消息数量,对消息块中的消息数据进行处理;在接收到的消息数据是从所述第二计算节点汇总到所述第一计算节点的情况下,将消息数据中的图顶点数据值取出并计算;在接收到的消息数据是是从所述第一计算节点同步到所述第二计算节点的情况下,更新所述第二计算节点的图顶点数据值;在接收到的消息数据是激活所述图顶点的情况下,将图顶点数据添加至下一次迭代的预设集合。可选地,所述在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口包括:在所述第一计算节点或者第二计算节点作为接收端接收所述同步消息的情况下,当在接收端中的计算线程完成计算后,在所述计算线程转换为接收线程用于接收消息。可选地,所述收集计算节点中的图数据之前还包括:将所述图数据中的顶点和边划分至所述计算节点;根据目标顶点的度数,确定目标顶点的第一计算节点所在的所述计算节点或者在所述计算节点上的顶点为第一计算节点或第二计算节点。可选地,所述收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点包括:多个所述第二计算节点将所述图数据中的图顶点数据的相邻顶点的数据聚合;在所述第二计算节点中的顶点为第一度数的情况下,通过第一计算节点从邻居顶点获取用于计算的数据,用以同步更新至所述第二计算节点;在所述第二计算节点中的顶点为第二度数的情况下,通过所述第二计算节点将通过聚合的数据汇总到第一计算节点,用以通过所述第一计算节点计算后再同步更新至所述第二计算节点。根据本申请实施例的第二个方面,提供了一种图数据处理装置,包括:收集模块,用于收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;同步模块,用于在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;计算模块,用于通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;扩散模块,用于在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。采用本申请实施例中提供的图数据处理方法及装置,采用优化的图数据计算架构,在图数据的收集阶段允许对消息进行提前计算,在图数据的扩散阶段,利用位图作为活跃顶点集合的数据储存结构。既适用于cpu计算环境,也可应用于配备有fpga、gpu等加速器件的异构计算环境。解决了图计算中通信效率低,通信时间开销大的问题。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1是本申请实施例的图数据处理方法的计算机设备的硬件结构框图;图2为本申请实施例中的图数据处理方法流程示意图;图3为本申请实施例中的图数据处理装置结构示意图;图4根据本申请优选实施例的系统结构图;图5为本申请实施例中消息块block的结构示意图;图6为本申请实施例中table的数据结构示意图;图7为本申请实施例中的block的指针以及空桶的位置示意图。具体实施方式在实现本申请的过程中,发明人发现,尽管分布式系统能够给计算提供充足的资源,同时分布式图计算引擎降低了分布式计算的难度,然而图计算很高的访存计算比、类型与操作的多样性、结构不规则以及数据局部性差等特点给大规模图的高效处理带来了巨大的挑战。特别是在分布式计算环境中,数据局部性差意味着系统需要耗费更多的时间进行大量数据的跨节点传输,而这进一步降低了数据处理的效率;而结构的不规则不可避免的会引起负载不均衡,从而极大地影响应用的效率。针对上述问题,本申请实施例中提供了一种图数据处理方法,包括:收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。改善了图计算中通信效率低,通信时间开销大的问题。本申请实施例中的方案可以采用各种计算机语言实现,例如,面向对象的程序设计语言java和直译式脚本语言javascript等。为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。本申请实施例所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本申请实施例的一种信号处理方法的计算机设备的硬件结构框图。如图1所示,计算机设备20可以包括:至少一个处理器201,例如cpu,至少一个网络接口204,用户接口203,存储器205,至少一个通信总线202,可选地,还可以包括显示屏206。其中,通信总线202用于实现这些组件之间的连接通信。其中,用户接口203可以包括触摸屏、键盘或鼠标等等。网络接口204可选的可以包括标准的有线接口、无线接口(如wi-fi接口),通过网络接口204可以与服务器建立通信连接。存储器205可以是高速ram存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器,存储器205包括本申请实施例中的flash。存储器205可选的还可以是至少一个位于远离前述处理器201的存储系统。如图1所示,作为一种计算机存储介质的存储器205中可以包括操作系统、网络通信模块、用户接口模块以及程序指令。需要说明的是,网络接口204可以连接接收器、发射器或其他通信模块,其他通信模块可以包括但不限于wifi模块、蓝牙模块等,可以理解,本申请实施例中计算机设备也可以包括接收器、发射器和其他通信模块等。处理器201可以用于调用存储器205中存储的程序指令,并使计算机设备20执行图数据处理操作。在本实施例中提供了一种运行于上述计算机终端的信号处理方法,图2是根据本申请实施例的图数据处理方法的流程图,如图2所示,该流程包括如下步骤:步骤s201,收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;步骤s202,在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;步骤s203,通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;步骤s204,在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。采用本申请实施例中提供的图数据处理方法及装置,采用优化的图数据计算架构,在图数据的收集阶段允许对消息进行提前计算,在图数据的扩散阶段,利用位图作为活跃顶点集合的数据储存结构。既适用于cpu计算环境,也可应用于配备有fpga、gpu等加速器件的异构计算环境。解决了图计算中通信效率低,通信时间开销大的问题。在上述步骤s201中基于现有的图计算模型,收集计算节点中的图数据。需要注意的是,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点。所述第一计算节点作为主副本的图顶点,所述第二计算节点作为从副本的图顶点。在上述步骤s202中在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果,在经过收集阶段后进入应用阶段。在上述步骤s203中通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据。即取消了收集阶段的消息缓存和应用阶段的消息再提取,允许对消息进行提前计算。具体地,所述第一计算节点在接收到第二计算节点的消息时,直接将消息中的数据值取出进行计算,并更新相应的顶点值。在上述步骤s204中在扩散阶段,所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。具体地,所述第一计算节点或者所述第二计算节点的接收线程接收到激活消息后,立即将消息中被激活的点添加到活跃顶点集合active_set中。优选地,为了充分提高并行性,active_set使用了bitmap的数据结构。在本申请可选的实施例中,所述在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加到至预设集合包括:在检测出所述激活消息中的图数据的活跃边的数目大于所述图数据总边数的情况下,将所述激活消息中的所述图顶点标记为活跃节点。当活跃边数较多时,即活跃边的数量大于总边数的一半时,直接跳过扩散阶段,在下一阶段直接对所有的点执行聚合操作,从而避免了扩散阶段大量原子操作所带来的开销。在本申请可选的实施例中,所述在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加到至预设集合包括:将所述预设集合的数据结构配置为位图;将所述激活消息中已被激活的图顶点数据按照所述位图的数据结构添加至所述预设集合。在接收端中的接收线程收到激活消息后,立即将消息中被激活的点添加到活跃顶点集合active_set中。为了充分提高并行性,active_set使用了bitmap的数据结构,每次加入一个激活的点,首先将id映射到该点在bitmap中的位置,再将bitmap中相应的位置为1。在遍历active_set时,首先将bitmap转化为id数组,再利用多线程同时对id数组中的点进行遍历。在本申请可选的实施例中,还包括:在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口,其中,所述同步消息包括对于所述图数据的聚合和计算阶段中的计算节点间的数据同步消息的<id,value>消息结构,id表示顶点的全局id,value表示对应的数值;和/或,在所述第一计算节点和所述第二计算节点之间传输所述激活消息的过程中采用mpi接口,其中,所述激活消息包括对于所述图数据的扩散阶段中计算节点之间的顶点激活消息的<id>消息结构,id表示待激活的邻居顶点标识。具体地,为了提高计算节点间的通信效率以及减少计算节点间的通信开销,计算节点间采用mpi接口进行发送和接收消息。在(计算节点)发送端,采用了非阻塞同步接口mpi_issend以及同步接口mpi_ssend进行发送消息。而在接收端,首先通过mpi_improbe获取消息的大小,并为消息的接收动态分配空间,再通过mpi_mrecv将消息接收接进所分配的内存空间中。在本申请可选的实施例中,所述在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口包括:在所述第一计算节点作为发送端发送所述同步消息的情况下,在所述第一结算节点中的计算线程通过发送缓冲区域发送所述同步消息;在所述第二计算节点作为发送端发送所述同步消息的情况下,在所述第二结算节点中的计算线程通过发送缓冲区域发送所述同步消息。具体地,(计算节点)发送端中每个线程thread_id维护了自己的一个单独的数据结构send_buffer[thread_id],send_buffer的数据结构如图5所示。图5中表示了消息块block的结构,一个消息块由头部header以及消息构成,其中header记录了该消息块的有效消息个数。发送时将消息打包成block,再将block发送出。由于发送为非阻塞发送,每个发送的block通过数组将指针记录下来,与之相对应mpirequests同样用一个数组保存记录下来。图6为table的数据结构,table共含有n-1项(n为集群机器的总数),table中每一项为<block_ptr,index>,分别记录了当前正在写入的block的指针以及空桶的位置,如图7所示。发送消息时,发送端首先调用get_bucket获得一个空桶(该函数会首先检测block是否已经满了,如果block满了,则将block通过非阻塞的方式发送出去,重新分配一个新的block,并返回一个空桶),再向空桶填入所要发送的消息数据。在本申请可选的实施例中,所述在所述第一计算节点和所述第二计算节点之间传输所述激活消息的过程中采用mpi接口包括:在所述第一计算节点作为接收端接收所述激活消息的情况下,通过所述同步消息中消息块头部的消息数量,对消息块中的消息数据进行处理;在接收到的消息数据是从所述第二计算节点汇总到所述第一计算节点的情况下,将消息数据中的图顶点数据值取出并计算;在接收到的消息数据是是从所述第一计算节点同步到所述第二计算节点的情况下,更新所述第二计算节点的图顶点数据值;在接收到的消息数据是激活所述图顶点的情况下,将图顶点数据添加至下一次迭代的预设集合。具体地,(计算节点)接收端的接收线程接收到消息块后,通过消息块头部判断消息数量,并对消息块中的每一条消息进行处理。如果接收到的是mirror(第二计算节点)汇总到master(第一计算节点)的消息,则将消息中的值取出,并进行计算;如果接收到的是master同步到mirror的消息,则直接更新mirror的值;如果接收到的是激活顶点的消息,则直接将顶点加入到下一轮的活跃顶点集合中。在本申请可选的实施例中,所述在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口包括:在所述第一计算节点或者第二计算节点作为接收端接收所述同步消息的情况下,当在接收端中的计算线程完成计算后,在所述计算线程转换为接收线程用于接收消息。具体地,采用消息接收端的线程角色切换机制。在(计算节点)接收端,只保留两个常驻的消息接收线程,剩余所有线程用于计算。当计算线程完成计算工作后,计算线程将会转换任务而用于接收消息,从而加快消息接收的速度。发送端计算线程完成计算任务后,转换到进行接收和处理消息的任务。当接收完成所有消息后,计算线程等待本节点上的所有消息发送的完成,而后继续执行下一步的计算工作。通过动态的线程角色切换机制,有效加快了消息的接收速率,从而减少了通信的等待时间。在本申请可选的实施例中,所述收集计算节点中的图数据之前还包括:将所述图数据中的顶点和边划分至所述计算节点;根据目标顶点的度数,确定目标顶点的第一计算节点所在的所述计算节点或者在所述计算节点上的顶点为第一计算节点或第二计算节点。具体地,采用powerlyra混合的图划分方法将图的顶点和边划分给各个计算节点。即给定的一条边src→dst(src为源点,dst为目标顶点),如果dst为低度数的顶点,则直接采用hash(dst)的方法确定目标顶点master所在的计算节点;如果dst为高度数的顶点,则采用hash(src)的方法确定目标顶点所在的计算节点,并且通过hash(dst)确定该在所划分的计算节点上该顶点为master或mirror。由于现实中的自然图具有power-law的特点,绝大多数的点为低度数点,因此如果在gather阶段中只对入边进行计算,由于低度数的顶点的mirror不存在入边,则可以省去mirror汇总计算值给master的过程,从而减少大量的通信开销。在本申请可选的实施例中,所述收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点包括:多个所述第二计算节点将所述图数据中的图顶点数据的相邻顶点的数据聚合;在所述第二计算节点中的顶点为第一度数的情况下,通过第一计算节点从邻居顶点获取用于计算的数据,用以同步更新至所述第二计算节点;在所述第二计算节点中的顶点为第二度数的情况下,通过所述第二计算节点将通过聚合的数据汇总到第一计算节点,用以通过所述第一计算节点计算后再同步更新至所述第二计算节点。具体地,在gas(收集—应用—扩散)模型的数据收集阶段:图顶点所有副本同时聚合相邻顶点的数据,并将聚合结果以消息的形式发送给主副本。当顶点是低度数顶点的情况下:当只需要对入边进行聚合操作时,例如pagerank算法,低度数顶点只有master需要从邻居获取数据用于计算,然后直接通过消息的方式同步给mirror,省去了mirror向master发送数据的过程,master从根据邻居计算出值后,可以更快地将消息同步给mirror;只有当需要对出边进行聚合操作时,例如求连通分量算法,需要从所有的邻居节点进行聚合操作,低度数的顶点mirror才需要将聚合的值汇总到master。当顶点是高度数顶点的情况下:而高度数的顶点在数据收集阶段,由于mirror存在入边,因此不论是只针对入边的聚合或是对出边的聚合,mirror都需要首先将聚合的数据汇总到master,由master计算完成后再同步更新到mirror。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在本实施例中还提供了一种图数据处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图3是根据本申请实施例的图数据处理装置的结构框图,如图3所示,该装置包括:收集模块31,用于收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;同步模块32,用于在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;计算模块33,用于通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;扩散模块34,用于在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。在所述收集模块31中基于现有的图计算模型,收集计算节点中的图数据。需要注意的是,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点。所述第一计算节点作为主副本的图顶点,所述第二计算节点作为从副本的图顶点。在所述同步模块32中在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果,在经过收集阶段后进入应用阶段。在所述计算模块33中通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据。即取消了收集阶段的消息缓存和应用阶段的消息再提取,允许对消息进行提前计算具体地,所述第一计算节点在接收到第二计算节点的消息时,直接将消息中的数据值取出进行计算,并更新相应的顶点值。在所述扩散模块34中在扩散阶段,所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。具体地,所述第一计算节点或者所述第二计算节点的接收线程接收到激活消息后,立即将消息中被激活的点添加到活跃顶点集合active_set中。优选地,为了充分提高并行性,active_set使用了bitmap的数据结构。所述扩散模块34,还用于在检测出所述激活消息中的图数据的活跃边的数目大于所述图数据总边数的情况下,将所述激活消息中的所述图顶点标记为活跃节点。所述扩散模块34,还用于将所述预设集合的数据结构配置为位图;将所述激活消息中已被激活的图顶点数据按照所述位图的数据结构添加至所述预设集合。所述装置中还包括:消息收发模块,所述消息收发模块用于在所述第一计算节点和所述第二计算节点之间传输所述同步消息的过程中采用mpi接口,其中,所述同步消息包括对于所述图数据的聚合和计算阶段中的计算节点间的数据同步消息的<id,value>消息结构,id表示顶点的全局id,value表示对应的数值;和/或,在所述第一计算节点和所述第二计算节点之间传输所述激活消息的过程中采用mpi接口,其中,所述激活消息包括对于所述图数据的扩散阶段中计算节点之间的顶点激活消息的<id>消息结构,id表示待激活的邻居顶点标识。所述消息收发模块用于在所述第一计算节点作为发送端发送所述同步消息的情况下,在所述第一结算节点中的计算线程通过发送缓冲区域发送所述同步消息;在所述第二计算节点作为发送端发送所述同步消息的情况下,在所述第二结算节点中的计算线程通过发送缓冲区域发送所述同步消息。所述消息收发模块用于在所述第一计算节点作为接收端接收所述激活消息的情况下,通过所述同步消息中消息块头部的消息数量,对消息块中的消息数据进行处理;在接收到的消息数据是从所述第二计算节点汇总到所述第一计算节点的情况下,将消息数据中的图顶点数据值取出并计算;在接收到的消息数据是是从所述第一计算节点同步到所述第二计算节点的情况下,更新所述第二计算节点的图顶点数据值;在接收到的消息数据是激活所述图顶点的情况下,将图顶点数据添加至下一次迭代的预设集合。所述消息收发模块用于在所述第一计算节点或者第二计算节点作为接收端接收所述同步消息的情况下,当在接收端中的计算线程完成计算后,在所述计算线程转换为接收线程用于接收消息。所述装置中还包括:划分模块,用于将所述图数据中的顶点和边划分至所述计算节点;根据目标顶点的度数,确定目标顶点的第一计算节点所在的所述计算节点或者在所述计算节点上的顶点为第一计算节点或第二计算节点。为了更好的理解上述图数据处理方法流程,以下结合优选实施例对上述技术方案进行解释说明,但不用于限定本申请实施例的技术方案。本申请优选实施例改进了已有的gas计算模型,取消了收集阶段的消息缓存和应用阶段的消息再提取,允许对消息进行提前计算;在扩散阶段,利用位图表示活跃顶点集合,并在活跃边数较多的情况下,直接跳过扩散操作,将所有节点标记为活跃节点。如此一来,大幅加速了计算速度。此外,通过高效的消息收发模型,节点间通过mpi接口和精简的消息结构进行通信,每个线程维护自己的消息发送缓冲区,并将消息打包成block进行非阻塞发送。如此一来大幅加速了消息的发送与接收速度。图4根据本申请优选实施例的系统结构图,如图4所示,每个计算节点的计算线程负责gas引擎的计算任务,并且有各自的发送缓冲区,在完成计算任务后进行角色切换接收消息;两个常驻的接收线程用于接收消息。计算节点间通过网络以消息块的方式进行通信。在本申请中提供了改进的gas计算模型,取消了gather阶段的消息缓存,允许对消息进行提前计算,在活跃边数较多时,直接跳过scatter操作,将所有节点标记为活动节点。具体地,预先采用powerlyra混合的图划分方法将图的顶点和边划分给各个计算节点。由于现实中的自然图具有power-law的特点,绝大多数的点为低度数点,因此如果在gather阶段中只对入边进行计算,由于低度数的顶点的mirror不存在入边,则可以省去mirror汇总计算值给master的过程,从而减少大量的通信开销。基于gas(收集—应用—扩散)模型,进行同步的迭代计算。具体包含以下步骤:步骤s1,数据收集:图顶点所有副本同时聚合相邻顶点的数据,并将聚合结果以消息的形式发送给主副本。根据低度数顶点和高度数顶点分以下两种情况:情况1低度数顶点:当只需要对入边进行聚合操作时,例如pagerank算法,低度数顶点只有master需要从邻居获取数据用于计算,然后直接通过消息的方式同步给mirror,省去了mirror向master发送数据的过程,master从根据邻居计算出值后,可以更快地将消息同步给mirror;只有当需要对出边进行聚合操作时,例如求连通分量算法,需要从所有的邻居节点进行聚合操作,低度数的顶点mirror才需要将聚合的值汇总到master。情况2高度数顶点:而高度数的顶点在数据收集阶段,由于mirror存在入边,因此不论是只针对入边的聚合或是对出边的聚合,mirror都需要首先将聚合的数据汇总到master,由master计算完成后再同步更新到mirror。步骤s2,数据计算:主副本master收到其它副本消息时,直接将消息中的数据值取出进行计算,并更新相应的顶点值。主副本通常对应多个从副本,多线程下存在对同一个主副本顶点值进行更新的数据冲突,采用了cas(compareandswap)的原子操作,在并行处理接收处理消息的同时保证了结果的正确性。主副本master更新完成后,则将更新后的值通过消息同步给从副本mirror。由于一个从副本只对应于一个主副本,接收端不存在同时对同一个从副本进行更新的问题,因此不需要考虑多线程访问共享变量的问题。故接收端取出消息后,直接对从副本的值进行更新。步骤s3,数据扩散:在发送端,mirror直接发送激活消息给全局所有的副本(包括master和mirror),并且mirror每次发送激活消息时先检查是否已被激活,如果激活则直接放弃发送消息的操作,有效地减少了对同一个顶点重复的激活消息;在接收端,接收线程收到激活消息后,立即将消息中被激活的点添加到活跃顶点集合active_set中。为了充分提高并行性,active_set使用了bitmap的数据结构,每次加入一个激活的点,首先将id映射到该点在bitmap中的位置,再将bitmap中相应的位置为1。在遍历active_set时,首先将bitmap转化为id数组,再利用多线程同时对id数组中的点进行遍历。优选地,当活跃边数较多时,即活跃边的数量大于总边数的一半时,直接跳过扩散阶段,在下一阶段直接对所有的点执行聚合操作,从而避免了扩散阶段大量原子操作所带来的开销。在本申请中还提供了高效的消息收发模型,节点间通过mpi接口和精简的消息结构进行通信,每个线程维护自己的消息发送buffer,并将消息打包成消息块进行非阻塞发送。具体地,在计算节点间采用mpi接口进行发送和接收消息。在发送端,采用了非阻塞同步接口mpi_issend以及同步接口mpi_ssend进行发送消息。而在接收端,首先通过mpi_improbe获取消息的大小,并为消息的接收动态分配空间,再通过mpi_mrecv将消息接收接进所分配的内存空间中。进一步地,采用精简的消息结构。对于数据聚合和数据计算阶段中计算节点间的数据同步消息,统一表示为<id,value>,其中id表示顶点的全局id,value表示对应的数值;对于数据扩散阶段节点间的顶点激活消息,直接用<id>表示,其中id即为待激活的邻居顶点标识。优选地,在本申请中提供了低开销-高度并行化的消息发送端,计算线程进行非阻塞的消息发送,其中每个线程维护自己的消息发送缓冲区,多个消息以消息块的方式一起进行发送。发送端中每个线程thread_id维护了自己的一个单独的数据结构send_buffer[thread_id]。接收端的接收线程接收到消息块后,通过消息块头部判断消息数量,并对消息块中的每一条消息进行处理。如果接收到的是mirror汇总到master的消息,则将消息中的值取出,并进行计算;如果接收到的是master同步到mirror的消息,则直接更新mirror的值;如果接收到的是激活顶点的消息,则直接将顶点加入到下一轮的活跃顶点集合中。进一步,还提供了一种消息接收端的线程角色切换机制。在接收端,只保留两个常驻的消息接收线程,剩余所有线程用于计算。当计算线程完成计算工作后,计算线程将会转换任务而用于接收消息,从而加快消息接收的速度。发送端计算线程完成计算任务后,转换到进行接收和处理消息的任务。当接收完成所有消息后,计算线程等待本节点上的所有消息发送的完成,而后继续执行下一步的计算工作。通过动态的线程角色切换机制,有效加快了消息的接收速率,从而减少了通信的等待时间。本申请实施例中提供的上述gas模型,实现了分布式图计算系统,用于改善图计算中通信效率低,通信时间开销大的问题。通过对计算和通信进行协同优化,改进了gas模型并重新设计实现了高效的消息收发模型。有效地减少了计算时间并加快了通信速率,从而实现系统的高有效性和高可扩展性。本申请的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:s1,收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;s2,在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;s3,通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;s4,在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。本申请的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:s1,收集计算节点中的图数据,其中,所述图数据至少包括图顶点数据,所述计算节点包括一个第一计算节点和多个第二计算节点,所述第一计算节点用于分配所述图顶点数据的计算任务至第二计算节点;s2,在所述第一计算节点接收通过同步消息发送的所述计算节点中的图数据的收集结果;s3,通过计算所述同步消息中非缓存的所述图数据的收集结果,得到计算结果用以更新所述图顶点数据;s4,在所述第一计算节点或者所述第二计算节点接收通过激活消息发送的所述计算结果的情况下,将所述激活消息中已被激活的图顶点数据添加至预设集合。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1