CN104952032B - 图的处理方法、装置以及栅格化表示及存储方法 - Google Patents

图的处理方法、装置以及栅格化表示及存储方法 Download PDF

Info

Publication number
CN104952032B
CN104952032B CN201510347734.1A CN201510347734A CN104952032B CN 104952032 B CN104952032 B CN 104952032B CN 201510347734 A CN201510347734 A CN 201510347734A CN 104952032 B CN104952032 B CN 104952032B
Authority
CN
China
Prior art keywords
packet
summit
grouped
data
processing
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.)
Active
Application number
CN201510347734.1A
Other languages
English (en)
Other versions
CN104952032A (zh
Inventor
朱晓伟
韩文弢
陈文光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ant Yunchuang Digital Technology Beijing Co ltd
Original Assignee
Tsinghua University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN201510347734.1A priority Critical patent/CN104952032B/zh
Publication of CN104952032A publication Critical patent/CN104952032A/zh
Application granted granted Critical
Publication of CN104952032B publication Critical patent/CN104952032B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

提供了图的处理方法、装置以及栅格化表示及存储方法。图的处理方法包括:将原始图处理为栅格式结构;以及流式处理各个边分组,其中对于每个边分组,按照预定的处理函数逐个对边分组中的边进行处理,其中,从慢速存储设备将该边分组的数据读入快速存储设备中,以及将起始顶点分组的数据和目标顶点分组的数据读入快速存储设备中。还可以针对“高速缓存-内存-磁盘”的三层存储器结构,预处理时根据高速缓存大小执行首次划分,执行时根据内存大小以合并栅格的方式执行虚拟的二次划分。本发明的对图的栅格化表示中对边的顺序没有要求,计算开销小,在流式处理中,能够将相关的顶点分组载入快速存储设备,保证了顶点的读写局部性。

Description

图的处理方法、装置以及栅格化表示及存储方法
技术领域
本发明总体地涉及图计算领域,更具体地涉及图的处理方法、装置以及栅格化表示及存储方法。
背景技术
近年来,不管在学术界还是工业界,对于高效处理大规模图的需求日益增长。图是一种由顶点的集合和顶点之间的关联关系即边的集合共同形成的数据结构。图也可以视为一种网络。现实生活中的许多问题,例如,社交网络中用户之间的关系、万维网中网页之间的关系、用户-项目矩阵(user-item matrix)等,都可以转化为图计算问题。
为处理大规模图数据,近些年提出了许多分布式图处理系统,例如Pregel、GraphLab、PowerGraph、GraphX等。借助强大的集群计算资源,分布式图处理系统能够处理大规模图数据。但是,在分布式环境下,负载不平衡、服务器间同步、容错处理开销等仍是严峻的挑战。而且,分布式计算算法复杂度很高,调试、优化都很困难,对程序开发人员也是较大的挑战。
作为替代,已经提出了一些通过高效利用磁盘在单个计算机上处理大规模图的图处理系统,例如GraphChi,X-Stream等。
GraphChi需要进行预处理,先把顶点分成若干个区间(interval),然后把以每个区间内的顶点为目标顶点的边放在一个切片(shard)中,各个切片必须根据起始顶点进行排序,这导致了不可忽视的预处理开销。经过这样的预处理之后,GraphChi就可以用并行滑动窗口(parallel sliding window)技术进行计算。GraphChi使用顶点中心(Vertex-centric)处理模型,通过读取边值从邻居收集数据,计算并对顶点应用新值,以及通过写边值将该新数据分散到邻居。另外,切片为了在收集阶段直接对顶点进行更新,还要求根据目标顶点对边进行预排序。
X-Stream引入了边中心(edge-centric)发散-收集处理模型。在发散阶段,X-Stream流式遍历边,并产生更新来传播顶点状态。在收集阶段,X-Stream流式遍历更新来产生顶点的新状态。对顶点的访问是随机的并且是在快速的小容量存储设备上进行的;对边的访问和更新是在慢的大容量存储设备上进行的,但是是顺序访问,从而能够获得大的吞吐量。X-Stream没有独立的预处理阶段,但是需要在计算之前和每次产生更新之后对边和更新进行重新排列(shuffle)。
发明内容
鉴于上述情况,提出了本发明。
根据本发明的一个方面,提供了一种由计算机执行的图的处理方法,包括:原始图结构获取步骤,获取原始图的图结构信息;预处理步骤,用于将图处理为边分组的栅格结构,包括:根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,保存关于顶点分组的信息,将各个顶点分组V的数据存储在第一存储设备上;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将该第i个顶点分组称为起始顶点分组,将第j个顶点分组称为终点顶点分组,将P*P个边分组E的数据存储在第二存储设备上;流式处理步骤,按照预定的处理函数,一个边分组一个边分组进行处理,其中对于每个边分组,流式处理其中的边,即按照该预定的处理函数逐个对边分组中的边进行处理,其中在处理具体边分组Ei,j时,从第二存储设备将该边分组的数据顺序读入第三存储设备中,以及将起始顶点分组Vi的数据和终点顶点分组Vj的数据从第一存储设备读入第四存储设备中,依据起始顶点分组Vi的数据、终点顶点分组Vj的数据和边分组Eij的数据,按照预定的处理函数,对于该边分组Ei,j中的边进行处理。
2、如方面1所述的处理方法,其中,第一存储设备和第二存储设备的访问速度低于第三存储设备和第四存储设备的访问速度。
3、如方面2所述的数据处理方法,第一和第二存储设备为硬盘或固态盘,第三和第四存储设备为内存。
4、如方面2所述的数据处理方法,第一和第二存储设备为内存,第三和第四存储设备为高速缓存cache。
5、如方面1到4任一项所述的处理方法,所述流式处理边包括实时对边终点进行本地更新。
6、如方面1到4任一项所述的处理方法,包括按列顺序来处理各个边分组。
7、如方面1到4任一项所述的处理方法,还包括:
在边分组Ei,j处理完成后,将处理后的起始顶点分组Vi的数据和/或终点顶点分组Vj的数据统一更新到第一存储设备。
8、如方面1到4任一项的处理方法,其中顶点数据存储在文件系统上,通过操作系统的内存映射机制来访问。
9、如方面1到4任一项所述的处理方法,还包括:
在对边分组Ei,j进行处理之前,判断该边分组Ei,j是否处于活动状态;以及
当判断结果为该边分组Ei,j并未处于活动状态时,不对该边分组Ei,j进行处理。
10、如方面1到4任一项所述的处理方法,还包括:
在对边分组Ei,j中的顶点和/或边进行处理之前,判断该顶点和/或边是否应该被处理;以及
当判断结果为该顶点和/或边不应被处理时,不对该顶点和/或边进行处理。
11、如方面1到4任一项所述的处理方法,其中,采用多个线程并行对各个边分组进行处理。
12、如方面8所述的处理方法,其中,在第四存储设备的带宽比第一存储设备的带宽高预定数量级的情况下,并发进行在第四存储设备中的边分组的处理和对第一存储设备进行的顶点的数据更新处理。
13、如方面1到4任一项所述的处理方法,所述预定处理为BFS、WCC、SpMV、PageRank中的任一个,其中BFS为对图进行宽度优先搜索、WCC为获取无向图的弱连通分支、SpMV为稀疏向量乘、PageRank为对网络中的顶点进行排序。
14、如方面1到4任一项所述的处理方法,所述计算机为单个计算机。
15、如方面1到4任一项所述的处理方法,处理过程中,对边分组的访问是只读访问。
16、如方面1到4中任一项所述的处理方法,其中在预处理之前和预处理之后,对边的顺序没有限制。
17、如方面1到4中任一项所述的处理方法,还包括在第一或第二存储设备上存储图的元数据,元数据包括顶点的数目、边的数目、边的类型以及P的大小。
18、如方面1到4中任一项所述的处理方法,第二存储设备是硬盘,在预处理阶段,先获得各个边分组数据的文件,然后按照后续流式处理时边分组被访问的顺序将多个边分组的文件合并为一个文件写到硬盘上,并维护索引信息,使得能够定位合并后的文件中的具体边分组数据。
19、根据本发明另一方面,提供了一种计算机执行的图的栅格化表示及存储方法,包括:获取原始图的图结构信息;根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,将各个顶点分组V的数据存储在第一存储设备上;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将P*P个边分组E的数据存储在第二存储设备上,其中在后续对如此存储的图的边分组进行处理时,将相应的起始顶点分组和终点顶点分组的数据整体加载到第三存储设备中,该第三存储设备的读取速度高于第一存储设备的读取速度。
20、如方面19所述的栅格化表示及存储方法,所述第二存储设备是硬盘或固态盘。
21、如方面19所述的栅格化表示及存储方法,其中每个边分组Eij以文件系统中的文件形式进行读写各个边分组为单独的文件。
22、如方面20所述的栅格化表示及存储方法,其中所述第二存储设备是硬盘,按照边分组在后续流式处理阶段被访问的顺序,将多个边分组文件合并为一个文件,并维持索引信息,使得根据索引能够定位到文件中的具体边分组数据。
23、如方面19所述的栅格化表示及存储方法,还在第一或第二存储设备上存储图的元数据,元数据包括顶点的数目、边的数目、边的类型以及P的大小。
24、如方面19所述的栅格化表示及存储方法,其中对边分组中边的顺序没有限制。
25、如方面19到24任一项所述的栅格化表示及存储方法,所述计算机为单个计算机。
26、根据另一方面,提供了一种图处理装置,包括:原始图结构获取部件、预处理部件和流化处理-更新部件,图结构获取部件用于获取原始图的图结构信息;预处理部件用于将图处理为边分组的栅格结构,包括:根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,将各个顶点分组V的数据存储在第一存储设备上;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将P*P个边分组E的数据存储在第二存储设备上;以及流式处理-更新部件用于按照预定的处理函数,一个边分组一个边分组进行处理,其中对于每个边分组,流式处理其中的边,即按照该预定的处理函数逐个对边分组中的边进行处理,其中在处理具体边分组Ei,j时,从第二存储设备将该边分组的数据顺序读入第三存储设备中,以及将起始顶点分组Vi的数据和终点顶点分组Vj的数据读入第四存储设备中,依据起始顶点分组Vi的数据、终点顶点分组Vj的数据和边分组Eij的数据,按照预定的处理函数,逐个对该边分组Ei,j中的边进行处理。
27、根据本发明的另一方面,提供了一种由计算机执行的图的处理方法,包括:原始图结构获取步骤,获取原始图的图结构信息;预处理步骤,用于将图处理为边分组的栅格结构,包括:根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,保存关于顶点分组的信息,顶点分组的数据被存储在慢速存储设备上;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将该第i个顶点分组称为起始顶点分组,将第j个顶点分组称为终点顶点分组,将P*P个边分组E的数据存储在慢速存储设备上,其中每个边分组中的各个边的数据被以顺序写方式存储在慢速存储设备中,流式处理步骤,包括循环执行下述操作:将多个未处理的边分组的数据和与该多个未处理的边分组的每个相关联的起始顶点分组和终点顶点分组的数据读入第一级别的快速存储设备中;以及对于该多个未处理的边分组的每个,将该边分组的数据和相关联的起始顶点分组和终点顶点分组的数据从第一级别的快速存储设备读入第二级别的快速存储设备,该第二级别的快速存储设备的存储速度高于第一级别的快速存储设备,流式处理其中的边,即按照该预定的处理函数逐个对边分组中的边进行处理。
28、如方面27所述的方法,其中流式处理步骤中,按列顺序来流式处理各个边分组,
将多个未处理的边分组的数据和与该多个未处理的边分组的每个相关联的起始顶点分组和终点顶点分组的数据读入第一级别的快速存储设备中包括:
将边分组的栅格结构中的一列中的全部或部分的边分组读入第一级别的快速存储设备。
29、如方面27所述的方法,所述慢速存储设备是硬盘或固态盘设备,所述第一级别的快速存储设备是内存,所述第二级别的快速存储设备是高速缓存。
30、根据方面27的方法,流式处理边包括:
实时本地更新边的终点顶点数据。
31、根据方面27的方法,其中顶点数据存储在文件系统上,通过操作系统的内存映射机制来访问。
32、根据方面27的方法,所述慢速存储设备是硬盘,在预处理阶段,先获得各个边分组数据的文件,然后按照后续流式处理时边分组被访问的顺序将多个边分组的文件合并为一个文件写到硬盘上,并维护索引信息,使得能够定位合并后的文件中的具体边分组数据。
33、根据方面28的方法,还包括:
在对边分组Ei,j进行处理之前,判断该边分组Ei,j是否处于活动状态;以及
当判断结果为该边分组Ei,j并未处于活动状态时,不对该边分组Ei,j进行处理。
34、根据方面28的方法,还包括:
在对边分组Ei,j进行处理之前,判断该边分组Ei,j是否处于活动状态;以及
当判断结果为该边分组Ei,j并未处于活动状态时,不对该边分组Ei,j进行处理。
本实施例的图处理方法和装置中图的预处理和后续的具体计算目标无关,对于给定的一个图,只需要做一次预处理。得到的预处理的结果能够被各个算法使用,是可重用的。
本发明实施例的图处理系统GridGraph的上述预处理中,对边进行分组,无需对原始图的边进行排序处理,而只需将各个边归入相应的分组即可,而且在各个边分组中的边也无需进行排序处理。因此相比于GraphChi系统的预处理,本发明实施例的预处理的I/O和计算负荷都轻得多。经实验验证,相比于GraphChi的预处理,本发明实施例的图处理系统GridGraph的预处理在速度上快至少一个数量级。
根据本发明实施例的GridGraph图处理系统,基于预处理得到的栅格化边分组,能够将相关的顶点分组载入快速存储设备,保证了顶点的读写局部性。
根据本发明实施例的GridGraph图处理系统,通过读窗口和写窗口保证了顶点的读写局部性,使得全部图处理过程,只需要一遍对边的顺序读取。
另外,根据本发明实施例的GridGraph图处理系统,借助于可选的用户定义的过滤函数,能够跳过对不相关的顶点或边的流化处理,对于迭代式定制算法能够显著提高收敛速度。
附图说明
从下面结合附图对本发明实施例的详细描述中,本发明的这些和/或其它方面和优点将变得更加清楚并更容易理解,其中:
图1示出了根据本发明实施例的图处理方法S100的总体流程图。
图2示出了作为待处理的图结构的一个示例。
图3示出了根据本发明实施例的预处理方法S120的流程图。
图4示出了对图2的图进行预处理后得到的栅格式边分组示例。
图5示出了根据本发明一个实施例从原始边列表获得边分组的方法的流程图。
图6示出了根据本发明实施例的GridGraph图处理方法中的对边分组进行顺序流式处理的伪码。
图7示出了关于页面排序PageRank定制算法下,对于图4所示的边分组,起始顶点分组窗口和目标顶点分组窗口的滑动情况示意图。
图8示出了对边进行流化处理的函数STREAMEDGES(Fe,F)的伪码。
图9示出了对顶点进行流化处理的函数STREAMVERTICES(Fv,F)的伪码。
图10示出了利用根据本发明实施例的GridGraph图管理方法来实现BFS算法的伪码。
图11示出了利用根据本发明实施例的GridGraph图管理方法来实现WCC算法的伪码。
图12示出了利用根据本发明实施例的GridGraph图管理方法来实现稀疏向量乘SpMV算法的伪码。
图13示出了利用根据本发明实施例的GridGraph图管理方法来实现PageRank算法的伪码。
图14示出了根据本发明第二实施例的图处理方法S200的总体流程图。
图15示出了实验使用的数据集列表。
图16给出了本发明实施例的GridGraph图数据处理系统、以及传统的GraphChi、X-Stream图数据处理系统在分别利用固态盘SSD和硬盘HDD情况下在各个数据集和各个定制算法上的运行时间。
图17(a)到(f)示出了本发明实施例的GridGraph系统与GraphChi和X-Stream在读和写上的盘带宽,其记录了在Yahoo图数据上运行PageRank算法10分钟的I/O吞吐量。
图18(a)-(b)分别示出了本发明实施例的GridGraph图处理方法与GraphChi、X-Stream在Yahoo图上运行PageRank算法至完成的I/O量、在Twitter图上运行WCC算法至完成的I/O量;图18(c)示出了本发明实施例的GridGraph图处理方法与GraphChi、X-Stream在Twitter图上运行WCC算法的每个迭代的I/O量。
图19示出了根据本发明实施例的GridGraph图处理方法和已有的GraphChi图处理方法在4个数据集上的预处理时间。
图20(a)示出了随着内存从8GB上升到30.5GB,本发明实施例的GridGraph在Twitter图上运行WCC算法以及在Yahoo图上运行PageRank算法需要的执行时间;图20(b)示出了当使用其他I2instance时本发明实施例的GridGraph的性能比较。
图21(a)和(b)分别以表格和图表形式示出了当使用i2.4×large instance时本发明实施例的GridGraph图处理算法与分布式图处理系统PowerGraph和Graphx在不同图数据上运行不同算法所使用的时间比较。
图22示出了根据本发明第三实施例的GridGraph图处理装置200的配置框图。
具体实施方式
为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。
本发明面对的应用问题是,已经存在了原始的图数据结构,典型地为大规模图结构,要对该图结构进行计算。本发明通过提出一种图的栅格化表示方法并进行流式处理和更新,能够高效地进行图计算。
下面解释一下本文中的术语。
流式处理(streaming):指流水线化处理对象,本文中指流水线化处理各个边分组,以及流水线化处理边分组中的各个边,只需对边的一遍读取。
实时(on the fly)本地(in place)更新顶点:在本文中指处理一条边后,即时、直接修改相关数据,例如在内存中执行流化处理边,则一条边处理完成后,立刻修改内存中的边的目标顶点的数据。
“对边进行处理”、“处理边”:表示按照预定的处理函数进行处理时,处理对象是边,不过需要说明的是,边包括起始顶点和终点顶点,这里并不排除也包括对顶点进行处理。
下面将按照如下顺序进行说明:
1、第一实施例的GridGraph图处理方法
1.1、图处理方法的总体流程
1.2、预处理:图的栅格化表示
1.3、流化处理-更新
2、第二实施例的GridGraph图处理方法
3、GridGraph图处理方法的性能的实验评估
4、第三实施例的GridGraph图处理装置
5、第四实施例的GridGraph图栅格化方法
1、第一实施例的GridGraph图处理方法
下面结合附图描述根据本发明第一实施例的GridGraph图处理方法。
1.1、图处理方法的总体流程
图1示出了根据本发明实施例的图处理方法S100的总体流程图。
在步骤S110中,读取原始图的图结构信息。
原始图结构数据可以存储在硬盘(hard disk)或固态盘(Solid State Disk,SSD)等持久存储介质上,可以存储在本地,也可以存储在远程例如远程服务器中。原始图结构数据可以以顶点列表和边列表的形式存储,例如顶点列表中的元素按照[顶点编号,顶点值]格式存储,边列表的元素的存储格式可以为[起始顶点,目标顶点,边的值]。原始图结构数据也可以以邻接表形式存储。本发明对于原始图结构数据的存储地址和方式没有限制。
图2示出了作为待处理的图结构的一个示例。请注意,此图结构仅为示例,并非作为本发明限制,显然,实际的图结构通常远比该示例复杂。
在步骤S120中,进行预处理,将图处理为栅格结构,其中对顶点进行分组,对于任意的起始顶点分组和目标顶点分组,得到对应边分组,将边分组的数据存储在慢速存储设备上。
在一个示例中,每个边分组的数据被以顺序写的方式存储在慢速存储设备上。
在一个示例中,各个顶点分组的数据被顺序写在慢速存储设备上。
在步骤S130中,进行流式处理-更新操作,具体地,流式处理各个边分组,其中对于每个边分组,流式处理其中的边,其中,从慢速存储设备将该边分组的数据顺序读入快速存储设备中,以及将起始顶点分组的数据和目标顶点分组的数据读入快速存储设备中。
本发明的对图的栅格化表示中对边的顺序没有要求,计算开销小,在后续的流式处理中,能够将相关的顶点分组载入快速存储设备,保证了顶点的读写局部性。
下面将对图的预处理步骤S120和图的流化处理-更新操作步骤S130进行示例性具体描述。
1.2、预处理:图的栅格化表示
下面参考图3描述根据本发明实施例的预处理方法S120的流程图,该方法可以用于实现图1所示的步骤S120。
该预处理方法S120的输入为图1所示的步骤S110读取的图结构信息,分组的数目P和顶点总数目。
在步骤S121中,根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠。将各个顶点分组V的数据存储在第一存储设备上,其中P为大于等于2的整数。
需要说明的是,“将各个顶点分组V的数据存储在第一存储设备上”应该进行广泛理解,只要能够在第一存储设备上访问到该顶点分组的数据即可。例如,可以是,全体顶点的数据按照顶点编号顺序整体作为一个文件存储在第一存储设备上(在进行顶点分组之前已经如此),而顶点分组时,将若干相邻编号的顶点分在一组的,因此可以方便地定位到顶点分组,并不需要对全体顶点的数据的存储做出改变。替代地,也可以是每个顶点分组的数据作为单独的文件存储在第一存储设备上。再或者,可以是多个顶点分组的数据作为一个文件存储上第一存储设备上,同时维护索引信息,使得能够定位到文件中具体顶点分组的数据。
P为顶点分组的数目,P的大小是重要的参数。一般地,对顶点进行细粒度划分(这意味着较大的P值),虽然预处理时间会有所延长,但是能够获得更佳的顶点数据访问局部性以及在根据顶点分组的活跃与否来选择性流式处理顶点分组(下文中称之为选择性调度)上面表现更佳(例如,如果一个顶点分组中不包含任何活跃顶点,则可以跳过该顶点分组,即不对该顶点分组进行流式处理,而直接前进到下一分组)。
在一个示例中,设置顶点分组的数目P,使得能够将一个顶点分组的数据完全载入内存中,例如能够将下文的一个边分组涉及到的起始顶点相关的分组完全载入内存中。更优选地,设置P,使得能将起始顶点分组的数据和终点顶点分组的数据完全载入内存中。进一步优选地,设置P,使得能起始顶点分组的数据、终点顶点分组的数据连同相关联的边分组的数据完全载入内存。
在另一个示例中,设置顶点分组的数目P,使得能够将一个顶点分组的数据完全载入高速缓存cache中,例如能够将的一个边分组涉及到的起始顶点分组的数据完全载入高速缓存cache中。更优选地,设置P,使得能够将起始顶点分组的数据和终点顶点分组的数据完全载入高速缓存cache中。进一步优选地,设置P,使得能将起始顶点分组的数据、终点顶点分组的数据连同相关联的边分组的数据完全载入高速缓存cache中。
例如,对于图2所示的图结构,将顶点集合{1,2,3,4}分为顶点分组{1,2}和{3,4}。
各个顶点分组中的顶点数目优选是相同的。不过,根据需要,各个顶点分组中的顶点的数目也可以不同。,例如在顶点的总数目不是顶点分组数目P的倍数的情况下,有些顶点分组中的顶点数比其它分组中的顶点数多一个。
在顶点分组完成之后,前进到步骤S122。
在步骤S122中,得到P*P个边分组E,该P*P个边分组E在逻辑上可以视为栅格形式,获得方式如下:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到的以i和j来标识的边分组Eij
在一个示例中,在实际对边进行分组的操作中,原始图结构中,各个边以边列表形式存储,则从该边列表中读取边,并根据边的起始顶点决定该边属于栅格的哪行,以及根据边的目标顶点决定该边属于栅格的哪列。
图4示出了对图2的图进行预处理后得到的栅格式边分组示例。
图4中四个方块表示四个边分组,每个方块内示出了属于该边分组的边。在第一列方块的上部示出了顶点分组{1,2},其指示该列的边分组中的边的目标顶点应该属于顶点分组{1,2},在第二列方块的上部示出了顶点分组{3,4},其指示该列的边分组中的边的目标顶点应该属于顶点分组{3,4};在第一行方块的左侧示出了顶点分组{1,2},其指示该行的边分组中的边的起始顶点应该属于顶点分组{1,2},在第二行方块的左侧示出了顶点分组{3,4},其指示该行的边分组中的边的起始顶点应该属于顶点分组{3,4}。
由此,按照上述边分组标识方式,边分组E11由边(1,2)和边(2,1)组成,边分组E12由边(1,3)和边(2,4)组成,边分组E21由边(3,2)和边(4,2)组成,边分组E22由边(4,3)组成。
下面参考图5描述从原始边列表获得边分组的方法S122的示例。图5示出了根据本发明一个实施例从原始边列表获得边分组的方法的流程图。该方法的输入为顶点的总数,边的总数,顶点分组的数目P。该方法的处理结果为各个边分组文件。
如图5所示,在步骤S1221中,主线程从原始边列表读取边到循环缓冲的块(chunk)中,将该块的状态标记为TODO(未完成),并将该块推入任务队列。然后前进到步骤S1222。
在步骤S1222中,维持工作线程池,当任务队列中没有任何任务时,工作线程池退出。每个工作线程从队列中获取任务,计算对应块中的边所属于的边分组,并将边追加到对应的边分组文件,在该块被处理完后,将块状态改为Finished(已完成)。
回到图3,在步骤S123中,存储边分组的数据。
需要说明的是,虽然图3中顺序示出了对顶点进行分组、获得边分组以及存储边分组的步骤,但是这并不表示这三个步骤必须按照所示顺序在时间上顺序执行,实际上,步骤S123的边分组的存储是可以合并到边分组步骤S122中执行的,例如获得一个边分组即存储该边分组。
在一个示例中,将各个顶点分组V的数据存储在第一存储设备上,第一存储设备可以是例如硬盘或固态盘上。顶点数据可以以类似数组的形式存储,一个元素跟着一个元素,每个元素包含一个顶点的数据。
在一个示例中,每个边分组中的各个边的数据被以顺序写方式存储在第二存储设备中。优选地,第二存储设备为外存,例如磁盘或固态盘。边数据可以以类似数组的形式存储,一个元素跟着一个元素,每个元素包含一条边的数据。例如,每个元素是(起始顶点,目标顶点)的二元组。
在一个示例中,在每个边分组存储为单独的文件,这尤其适合于随机访问性能较高的固态盘存储。
在每个边分组存储为单独的文件的情况下,在采用硬盘存储边分组的情况下,因为硬盘需要通过旋转寻道来定位到文件在磁盘上对应的位置,在文件数量很多时,导致边分组的读取性能下降。因此,在另一个示例中,在预处理阶段,先获得各个边分组数据的文件,然后按照后续流式处理时边分组被访问的顺序将多个边分组的文件合并为一个文件写到硬盘上,并维护索引信息,使得能够定位合并后的文件中的具体边分组数据。在边分组是按列顺序访问的情况下,可以按列顺序将多个边分组文件合并为一个文件并顺序写到硬盘上。
在一个示例中,可以以文件系统的方式对各个边分组进行顺序写和顺序读处理。
在一个示例中,连同栅格式边分组数据,还存储图的元数据,元数据包括顶点的数目、边的数目、边的类型以及P的大小。边的类型指边是否有权重。
本实施例的图处理方法中图的预处理和后续的具体计算目标无关,对于给定的一个图,只需要做一次预处理。得到的预处理的结果能够被各个算法使用,是可重用的。
顺便说一下,正是因为本发明中将边逻辑上分组为栅格(grid)形式,所以本文中将本发明的图处理系统称为GridGraph。
本发明实施例的图处理系统GridGraph的上述预处理中,对边进行分组,无需对原始图的边进行排序处理,而只需将各个边归入相应的分组即可,而且在各个边分组中的边也无需进行排序处理。因此相比于GraphChi系统的预处理,本发明实施例的预处理的I/O和计算负荷都轻得多。
1.3、流化处理-更新
下面具体描述图1所示的流化处理-更新步骤S130的实现示例。
如前所述,在步骤S130中,进行流式处理-更新操作,具体地,根据要完成的处理任务,按照预定的处理函数,一个边分组一个边分组地进行处理,其中在处理具体边分组Ei,j时,从第二存储设备将该边分组的数据顺序读入第三存储设备中,以及将顶点分组Vi的数据和顶点分组Vj的数据读入第四存储设备中,依据顶点分组Vi的数据、顶点分组Vj的数据和边分组Eij的数据,按照预定的处理函数,对于该边分组Ei,j中的边和/或顶点进行处理。
出于不同的目的,对图要进行不同的计算,例如宽度优先搜索BFS、网页排序PageRank、获取无向图的弱连通分支、稀疏向量乘等,这些算法对图进行的计算彼此不同,下文中为描述方便,有时将其统称为定制计算或定制函数或定制处理或用户定制算法,对应的对边的定制处理也如此称呼,并用符号Fe表示。
边的定制处理Fe会将相应的处理结果反应到顶点上,具体地影响与边的起始顶点或目标顶点相关联的数据。为了提高计算速度,高效进行顶点数据的读写很重要。为此,前面通过进行顶点分组处理,使得在流式处理中能够将有关顶点分组全部载入快速存储设备,本文中称其为第四存储设备。
需要说明的是,慢速存储设备(例如,对应于本文中的第一存储设备和第二存储设备)和快速存储设备(例如,对应于本文中的第三存储设备和第四存储设备)是相对而言的。对于外存中图数据的处理(out of core)而言,慢速存储设备可以是磁盘或固态盘,快速存储设备(例如)可以是内存,内存例如可以是DRAM、SRAM、EPRM等;对于内存中图数据的处理(in memory)而言,慢速存储设备可以是内存,而快速存储设备可以是高速缓存cache。当图的规模不是很大时,整个图的所有数据都可以载入内存中,此时适用于in memory模式,不过一般实际的图不满足这个条件。下面的描述中以out of core处理模式进行说明。
在处理某个边分组Eij时,将对应的起始顶点分组Vi和目标顶点分组Vj从第一存储设备加载入第四存储设备,优选地从慢速存储设备加载到快速存储设备,由此能够保证顶点访问的局部性良好,从而获得优秀的计算性能。
在后面的示例中,通常将以顶点分组和边分组存储在磁盘上,在流式处理时,将相关的顶点分组和边分组加载到内存中为例加以说明。
GridGraph一个分组一个分组地流式处理边,分组的顺序流式处理例如可以用图6中的伪码表示。
该伪码中,ChunkIsActive(i)表示判断顶点分组Vi是否活跃的函数,StreamEdgeBlock(i,j)是对边分组Ei,j进行流式处理的函数。该段伪码表示逐个对边分组Ei,j进行处理,在处理之前,判断顶点分组Vi(边的起始顶点所在的顶点分组)是否处于活动状态,如果处于活动状态,对于边分组Ei,j才进行处理,否则直接跳过该边分组Ei,j,不对其进行处理。所谓顶点分组的活动状态,是指该顶点分组中包含处于活动状态的顶点。所谓顶点处于活动状态,是指在当前迭代中,该顶点需要被处理。根据定制算法的不同,判断一个顶点是否需要处理的原则也不同,例如最短路径,本轮计算中如果一个顶点v的目前已知的最短路径被更新了,那么在下一轮它应该要更新它的出邻居,这个顶点就是活跃的;如果本轮没有更新,那么下一轮它就不需要去更新它的出邻居,这时这个顶点就是不活跃的。
在快速存储设备中,对顶点的更新是实时本地进行的,也就是说,例如,如果是将起始顶点分组、终点顶点分组的数据、边分组载入高速缓存中,则对一条边处理完成后,如果需要对终点顶点进行更新,则立即对高速缓存中的终点顶点数据进行更新。
另外,在一个示例中,以面向目标节点顺序更新顶点,即在一个边分组处理完毕之后(即针对具体i,j取值的StreamEdgeBlock(i,j)执行完之后),将目标顶点分组(即顶点分组Vj)的数据成批写入磁盘或固态盘SSD中。由此能够使得对磁盘或固态盘进行顺序写的操作集中在一起并且最小化。在实际应用中,该属性非常重要,对固态盘SSD来说尤其如此,这是因为:一方面,由于写入放大现象,使得写大批量数据后固态盘SSD的写性能可能劣化;另一方面,由于固态盘SSD存在写周期上限,尽可能减少盘写入次数是非常重要的。
换句话说,边分组的访问顺序是为了更新顶点(即目标顶点分组)写的最优化而决定的,按列访问使得只有在这一列访问完后才需要写回对应的目标顶点分组到磁盘上。而起始顶点由于只读,因此尽管被读取了P遍,但是对磁盘来说问题不大。而写的数据量少对SSD而言很重要,因此按列访问对于采用SSD存储边分组的情况是特别优选的。
上述逐个边分组的流式处理过程可以视为双窗口滑动过程,即对于起始顶点分组为一个窗口,对于目标顶点分组为另一个窗口,在逐个边分组进行处理时,起始顶点分组和目标顶点分组看起来都在进行滑动。
下面参考图7以页面排序PageRank定制算法为例,以图4所示的边分组和顶点分组为例,说明如何进行双窗口滑动。图7示出了关于页面排序PageRank定制算法,对于图4所示的边分组,起始顶点分组窗口和目标顶点分组窗口的滑动情况示意图。
图7中,标号0指示未开始执行PageRank算法前的窗口和边分组状态,标号1、2、3、4分别指示第1、2、3、4轮迭代后的状态,标号5指示PageRank算法执行后的结果。PR标识的列指示上一轮迭代后的各个顶点(自上至下对应于顶点1、2、3、4)的PageRank值,Deg标识的列指示各个顶点(自上至下对应于顶点1、2、3、4)的出度,NewPR指示当前迭代后的顶点的PageRank值,其中PR一列中加暗的部分指示读窗口(对起始顶点分组进行读的窗口),NewPR一行中加暗的部分指示写窗口(对目标顶点分组进行写的窗口),Edge Blocks(边分组)一行中加暗的部分指示当前迭代中作为处理对象的边分组。
由图7可见,在标号1指示的第一轮迭代中,读窗口读入了起始顶点分组{1,2}的数据,其PageRank值分别为{1,1},目前处理的边分组为E1,1,当前迭代后目标顶点分组{1,2}的PageRank变为{0.5,0.5};在标号2指示的第二轮迭代中,读窗口读入了起始顶点分组{3,4}的数据,其PageRank值分别为{1,1},目前处理的边分组为E2,1,当前迭代后目标顶点分组{1,2}的PageRank更新(写)为{0.5,2};在标号3指示的第三轮迭代中,读窗口读入了起始顶点分组{1,2}的数据,其PageRank值分别为{1,1},目前处理的边分组为E1,2,当前迭代后目标顶点分组{3,4}的PageRank更新(写)为{0.5,0.5};在标号4指示的第四轮迭代中,读窗口读入了起始顶点分组{3,4}的数据,其PageRank值分别为{1,1},目前处理的边分组为E2,2,当前迭代后目标顶点分组{3,4}的PageRank更新(写)为{1,0.5}。标号5指示了在PageRank算法执行完后,顶点1、2、3、4变成了0.5、2、1、0.5。
由图7可见,读窗口(从起始顶点读取当前PageRank值的窗口)和写窗口(累计目标顶点的新PageRank值的窗口)随着GridGraph系统以特定顺序流式处理各个边分组而滑动。
在一个示例中,GridGraph系统通过多个工作线程并发地对关注的顶点分组施加原地更新。这样,在定制函数Fe内部,用户需要使用原子操作以对顶点施加线程安全更新(thread-safe update),以确保算法的正确。基于对快速存储设备的并行随机访问的带宽仍然比慢速存储设备的顺序带宽高若干数量级的事实(例如内存对盘,高速缓存对内存),施加更新的时间与边的流式处理相重叠。本发明实施例的GridGraph系统仅需要对边进行一遍(one pass)只读的处理,这优于GraphChi和X-Stream方案,这两种方案需要对边进行变化或先生成然后再流化进行更新。
在一个示例中,对边分组的访问是只读访问,GridGraph所需的内存非常紧凑。实际上,只需要较小的缓存来保持边数据,从而可以使用除了保持顶点分组的内存之外的其它空闲内存来缓存边数据,这在活动的边数据很小足以装入内存的情况下非常有利。
本发明实施例的GridGraph系统的流式处理-更新模型的另一优势在于,其不仅支持经典的BSP(Bulk synchronous Parallel,整体同步并行计算)模型,而且还允许异步更新。因为顶点更新是原地进行并且是即时(instant)进行的,所以当前时刻的更新的效果能够在接下来的顶点访问中反映出来,这对于众多迭代式图形处理算法尽快收敛非常有利。
本发明实施例的边分组流式处理-即时更新技术将起始顶点分组和终点顶点分组加载入快速存储设备(如内存中),并且进行即时本地更新,使得无需如传统算法X-stream那样要先经过分散和收集(gather)阶段然后才应用更新,从而在例如I/O(输入/输出)上获得性能的显著提升。
下面首先概要描述GridGraph系统的执行实现示例,然后描述GridGraph系统在几个定制算法上的应用。
关于GridGraph系统的执行实现示例,如图6所示,GridGraph引擎顺序地流式处理各个边分组。在进行流式处理之前,GridGraph首先检查每个起始顶点分组的活动性(ChunkIsActive(i)),并将检查结果存储在布尔数组中。按照双窗口滑动所需的顺序流式处理各个边分组,并且如果对应的边分组的起始顶点分组是活动的,则将该边分组加入任务列表中。
在一个具体实现示例中,由主线程和工作线程来协作实现该流式处理以及即时更新。主线程一个一个地处理各个边分组,主线程维持一个双缓存(读窗口和写窗口,或者说起始顶点分组缓存和目标顶点分组缓存)以预取数据;同时与主线程并行地,工作线程处理缓存中的边。首先利用定制的过滤函数F来检查每条边,如果该条边的起始顶点是活动的,则对该条边调用定制函数Fe,以对起始顶点或目标顶点施加更新,例如图7所示的PageRank算法示例中是对目标顶点施加更新,需要说明的是,不建议既对起始顶点也对目标顶点施加更新,这可能导致内存映射向量因为向慢速存储设备的意外写回而出问题。
下面,描述根据本发明实施例的GridGraph系统的核心接口示例,然后介绍几个原子操作函数,最后简要给出GridGraph系统对BFS、WCC、SpMV、PageRank这几种定制算法的实现示例。
核心接口示例之一是对边进行流化处理的函数STREAMEDGES(Fe,F),如图8所示。核心接口另一示例是对顶点进行流化处理的函数STREAMVERTICES(Fv,F),如图9所示。
上述图8和图9所示的接口中,F是可选的定制函数,其接受一个顶点作为输入,并会返回一个布尔值来指示在流化处理中该顶点是否需要。当算法需要进行选择性地规划以跳过一些无用的流化,经常和一个位图(bitmap)一起使用,该位图紧凑有效地表达活动的顶点集合。Fe和Fv是定制函数,描述了流化的行为,这两个函数接受边(对于Fe)或顶点(对于FV)作为输入,并且范围类型为R的值,R例如为整数或浮点数。累计该返回值并且作为最后的简约结果返回给用户。该值经常被用于获得活动的顶点的数目,不过其用途并不局限于此,例如,用户可以使用该函数来获得PageRank的迭代之间的差之和以决定是否继续计算。
在一个示例中,对于GridGraph图数据处理系统,预先定义了几个原子操作,供实现定制算法时使用。
原子操作函数接口示例如下:
(1)、CAS(&Data,OldValue,NewValue)
比较并交换(CompareAndSwap),如果Data的内容等于OldValue,则返回布尔值true,并将设置Data的新内容为NewValue。
(2)、SetMin(&Data,Value)
设置最小值,如果Value小于Data,则返回布尔值true,并将Data设置为Value。
(3)、Accum(&Data,Value)
值累积,将Value加到Data上。
下面描述流化处理-更新在各个定制算法上的应用示例。
(1)、BFS
宽度优先搜索,其实现伪码如图10所示。
BFS的输入是一个点s(用户指定的一个出发顶点),然后计算从这个点出发进行广度优先遍历能够达到的点;输出是一个数组parent,parent[i]为i在广度优先树上的父节点。一开始的时候把parent置为{-1,…,-1},令parent[s]=s,计算过程其实就是对当前层的节点,考虑这些点出发的边,如果destination(终点节点)的parent值依然为-1,那么就将其parent值置为source。依次进行直到不存在active vertex(活动节点)为止。需要使用两个bitmap(位图),用来标记当前层的active节点和下一层(即这一层扩展出来)的active节点。
(2)、WCC
求无向图的弱连通分支,其伪码如图11所示。
WCC的目的是求无向图的弱连通分支。一般使用最小标签传递法计算。label[i]用来标记i所属的分支。一开始令label[i]=i。每轮迭代,对一条边上的两个点source(起始顶点或源顶点)和destination(终点顶点或目标顶点),令label[destination]=min{label[source],label[destination]}。如果label[i]的值在这一轮中有变化,那么下一轮i依然active,否则可以从active点集中去掉以减少计算量。
(3)、SpMV
稀疏向量乘,其伪码如图12所示。
SpMV即稀疏向量乘。假设A为稀疏矩阵,考虑将A用有权图存储,则A[i,j]即可表示为从i出发到j的一条权值为A[i,j]的边。B和C为待乘和结果向量,可以使用存储vertexdata的方式表示。一开始令C[i]=0。计算过程即遍历每条边,然后将权值与B[destination]的成绩累加到C[source]上。
(4)、PageRank
PageRank为对网络中的顶点进行排序,该顶点可以为网页或用户,伪码如图13所示。
2、第二实施例的图处理方法
第一实施例的图处理方法从I/O性能上来说,假设按列顺序来处理各个边分组,对于每轮处理算法的迭代来说,每个边被访问一次,以及每个起点顶点数据被读取P次,而每个重点顶点数据被读取和写入一次,可见要想最小化I/O访问量,较小的顶点分组个数P是优选的。
不过在前面进行第一实施例的图处理方法描述时,提到P越大,即对顶点分组划分得越细致,顶点数据访问局部性以及选择性调度方面会表现更优。即,较大的顶点分组个数P是优选的。
可见,从I/O访问量角度和从数据访问局部性以及选择性调度角度,P的大小的选择上存在矛盾。为了减轻此矛盾,同时获得较低的I/O访问量和获得较好的数据访问局部性以及选择性调度,提出了第二实施例的图处理方法。
在第二实施例的图处理方法中,采用三层的存储器结构,其访问速度阶梯型变化,例如采用“高速缓存-内存-磁盘”的三层存储器结构,在图的预处理(即栅格化处理)阶段,根据高速缓存cache的大小来划分栅格,使得至少一个顶点分组的数据能够载入高速缓存cache中;在实际执行流式处理阶段,根据内存大小在预处理阶段获得的栅格上通过合并栅格的方式进行虚拟的二层划分,使得将合并后的大栅格对应的数据能够载入内存中,而在实际执行预定处理算法时,仍是每次将一个栅格载入高速缓存中,对栅格中的边逐个进行处理。
下面参考图14描述根据本发明第二实施例的图处理方法。图14示出了根据本发明第二实施例的图处理方法S200的总体流程图。
如图14所示,在步骤S210中,读取图结构信息;在步骤S220中,预处理为栅格形式。图14的步骤S210和S220与图1所示的步骤S110和步骤S220类似,这里不再赘述。只不过需要说明的是,所有顶点的数据和边分组的数据在进行流式处理之前存储在慢速存储设备中,慢速存储设备是相对于下文的第一快速级别存储设备和第二快速级别存储设备而言的,在一个示例中,例如为硬盘或固态盘。图14的图处理方法与图1的图处理方法的不同主要在于流式处理步骤S230,下面重点描述步骤S230。
在步骤S230中,执行流式处理步骤,包括循环执行下述操作,直至所有的边分组都经过了处理:
在步骤S231中,将多个未处理的边分组的数据和与该多个未处理的边分组的每个相关联的起始顶点分组和终点顶点分组的数据从慢速存储设备读入第一级别的快速存储设备中。该第一级别的快速存储设备例如为内存。
在步骤S232中,对于该多个未处理的边分组的每个:将该边分组的数据和相关联的起始顶点分组和终点顶点分组的数据从第一级别的快速存储设备读入第二级别的快速存储设备,该第二级别的快速存储设备的存储速度高于第一级别的快速存储设备;第二级别的快速存储设备例如为高速缓存cache;流式处理其中的边,即按照该预定的处理函数逐个对边分组中的边进行处理。经过步骤S232,步骤S231中的未处理的边分组经过了处理,然后返回到步骤S231,以便对其他未处理的边分组进行处理。
与图1所示的第一实施例的图处理方法类似,流式处理各个边包括:实时本地更新边的终点顶点数据。例如,当在高速缓存中执行PageRank算法对各个边进行处理时,每当处理了一个边时,即当将出度从边的起始顶点向边的终点顶点传播时,都对高速缓存中的终点顶点的数据进行更新。
在一个示例中,由操作系统通过内存映射机制来进行从内存向硬盘或固态盘的回写。顶点数据以文件系统的机制存储,通过内存映射的方式来访问,从磁盘将数据载入内存以及将数据写回到磁盘的工作均由操作系统来负责。
关于选择将哪些边分组载入内存,可以采用按列顺序,一次将一列的全部或部分的边分组数据和相关顶点分组数据载入内存,然后再一次将一个边分组从内存载入高速缓存,这样能够获得较好的终点顶点数据更新。
不过这仅为示例,在需要更新的对象是起始顶点时,可以按行顺序,一次将一行的全部或部分的边分组数据和相关顶点分组数据载入内存,然后再一次将一个边分组从内存载入高速缓存,这样能够获得较好的终点顶点数据更新。
这里载入内存中的边分组的个数,可以根据内存的大小来决定。
3、GridGraph图处理方法的性能评估
下面给出在实际数据集上的对本发明实施例的GridGraph进行性能评估的实验结果,在性能评估时,与GraphChi和Xstream的结果进行了比较,还与几个分布式图处理系统进行了比较。
(I)、测试环境
测试环境a:i2.xlarge(SSD)
在Amazon EC2上进行实验,其使用AWS i2.xlarge instance(亚马逊弹性计算服务(Amazon Elastic Compute Cloud 2)中高IOPS实例系列),包括4(hyperthread)vCPUcores,30.5GB内存(24MB L3Cache),以及800GB的SSD。对于I/O可扩展性评测,还使用了其他更强大的i2.2xlarge/i2.4xlarge/i2.8large instance,包括多个800GB的SSD,以及更多的CPU cores和内存。
测试环境b:d2.xlarge(HDD)
在Amazon EC2上进行实验,其使用AWSd2.xlarge instance(亚马逊弹性计算服务(Amazon Elastic Compute Cloud 2)中高密度存储的实例系列),包括4(hyperthread)vCPU cores,30.5GB内存(24MB L3Cache),以及3×2TB的HDD。
(II)、实验数据集
实验数据集为LiveJournal,Twitter、UK和Yahoo,是真实世界的社交网络图或万维网页面图,这些数据集如何获得可以参考非专利文献1、BACKSTROM,L.,HUTTENLOCHER,D.,KLEINBERG,J.,ANDLAN,X.Group formation in large social networks:membership,growth,and evolution.In Proceedings of the 12th ACM SIGKDDinternationalconference on Knowledge discovery and data mining(2006),ACM,pp.44–54.,非专利文献2、KWAK,H.,LEE,C.,PARK,H.,AND MOON,S.What is Twitter,a social network or anews media?In WWW’10:Proceedings ofthe 19th international conference on Worldwide web(New York,NY,USA,2010),ACM,pp.591–600,非专利文献3、BOLDI,P.,SANTINI,M.,AND VIGNA,S.A large time-awareweb graph.In ACM SIGIR Forum(2008),vol.42,ACM,pp.33–38.,非专利文献4:YAHOO.Yahoo!altavista web page hyperlinkconnectivity graph,circa 2002.http://webscope.sandbox.yahoo.com/中得到。图15示出了对数据集的总结。
图15中,第一列为数据集的名称,第二列为顶点的数据,第三列为边的数目,第四列为数据集的大小,第五列为选择的顶点分组的数目。
(III)、运行结果
(1)、GridGraph系统与GraphChi、X-Stream的比较
(a)运行时间比较
图16给出了本发明实施例的GridGraph图数据处理系统、以及传统的GraphChi、X-Stream图数据处理系统在各个数据集和各个定制算法上的运行时间。
在上述实验中,对于BFS和WCC算法,各个图数据处理系统运行直至收敛,即不能再找到更多的顶点或不能更新更多的顶点;对于PageRank,对每个图迭代20次。
由图16可见,本发明实施例的GridGraph在所有图上、所有算法上其运行时间方面的性能都显著优于GraphChi和X-Stream。
(b)盘带宽比较
图17(a)到(f)示出了本发明实施例的GridGraph系统与GraphChi和X-Stream在读和写上的盘带宽,其记录了在Yahoo图数据上运行PageRank算法10分钟的I/O吞吐量。从图可见,X-Stream和GridGraph能够利用高顺序盘带宽,而GraphChi由于在众多切片(shard)上的众多碎片式(fragmented)读和写而表现不够理想。本发明实施例的Graph尽可能地最小化写数量而把更多的I/O花在写上,相对比而言X-Sream系统写大量数据。
(c)I/O量比较
图18(a)-(b)分别示出了本发明实施例的GridGraph图处理方法与GraphChi、X-Stream在Yahoo图上运行PageRank算法至完成的I/O量、在Twitter图上运行WCC算法至完成的I/O量。图18(c)示出了本发明实施例的GridGraph图处理方法与GraphChi、X-Stream在Twitter图上运行WCC算法的每个迭代的I/O量。从图18(c)可见,随着WCC算法的收敛,本发明实施例的GridGraph的I/O量降低。
可见,本发明实施例的GridGraph图处理方法以有限的资源很好对处理大规模真实世界图,能够显著降低I/O量
(d)预处理时间比较图19示出了根据本发明实施例的GridGraph图处理方法和已有的GraphChi图处理方法在4个数据集上的预处理时间(单位为秒),其中符号C指示GraphChi图处理方法,符号G指示本发明实施例的GridGraph图处理方法,S指示顶点数据和边数据存储在固态盘SSD上,H指示顶点数据和边数据存储在硬盘HDD上,P指示将边分组数据存储在硬盘时划分阶段所用的时间,即C(S)指示现有的GraphChi图处理方法在将顶点数据和边数据存储在固态盘SSD上时的预处理时间,G(S)指示本发明实施例的GridGraph图处理方法在将顶点数据和边数据存储在固态盘SSD上时的预处理时间,C(H)指示现有的GraphChi图处理方法在将顶点数据和边数据存储在硬盘HDD上时的预处理时间。在一个示例中,本发明实施例的GridGraph图处理方法在将边分组数据存储在硬盘时,预处理阶段包括划分阶段和合并阶段,划分阶段和合并阶段的加和时间是预处理的总时间,划分阶段是指将原始的图的边列表划分为各个边分组,得到相应的边分组文件,但对硬盘来说,要旋转寻道来定位到文件,各个边分组文件分散存储时会带来过多的寻道开销,因此可以经这些边分组文件合并为一个文件进行顺序写,然后在访问时通过偏移地址来获得相应边分组,由此在读取边时能够充分利用硬盘的I/O带宽。G(H)P指示本发明实施例的GridGraph图处理方法在将边分组数据存储在硬盘时预处理阶段中的划分阶段所花费的时间,G(H)M指示本发明实施例的GridGraph图处理方法在将边分组数据存储在硬盘时预处理阶段中的合并阶段所花费的时间,G(H)M指示本发明实施例的GridGraph图处理方法在将边分组数据存储在硬盘时预处理阶段所花费的总时间。由图10可见,在预处理时间方面,本发明实施例的GridGraph图处理方法优于已有的GraphChi。
(e)可扩展性评估
图20(a)示出了随着内存从8GB上升到30.5GB,本发明实施例的GridGraph在Twitter图上运行WCC算法以及在Yahoo图上运行PageRank算法需要的执行时间。图20(b)示出了当使用其他I2instance(I2实例,亚马逊弹性计算服务(Amazon Elastic ComputeCloud 2)中高IOPS实例系列)时本发明实施例的GridGraph的性能,其中盘被设置为RAID-0阵列,没有限制能够使用的内存量,直接对边进行I/O。可见,本发明实施例的GridGraph图处理方法体现出近似随盘带宽线性扩展的性质。
(2)、与分布式图处理系统的比较
图21(a)和(b)分别以表格和图表形式示出了当使用i2.4×large instance(包含16个hyperthread core,122GB RAM,4800GB SSD,$3.41/h)时本发明实施例的GridGraph图处理算法与分布式图处理系统PowerGraph和Graphx(在16m2.4xlarge instance的集群上,每个实例具有8cores,68.4GB RAM,2840GB HDD,0.98$/h)在不同图数据上运行不同算法所使用的时间比较。可见,本发明实施例的GridGraph作为基于单节点的解决方案提供了足够优秀的性能,而且大大降低了成本(本发明实施例的$3.41/h vs.$15.68/h)。实际上,分布式图处理系统在许多图算法的计算上由于高通信开销扩展性有限,而如前所述本发明实施例的GridGraph则随着内存和I/O带宽增加能够平滑地扩展。概括而言,本发明实施例的GridGraph图处理方法在使用更强力的硬件时性能甚至可与分布式系统相媲美。
图21(a)中最后一列表示当前每小时的成本(以美元计)。根据本发明实施例的GridGraph图处理方法,提供了一种新颖的对图的栅格化表示方法,其无需对边进行排序处理,预处理开销很低,而且得到的栅格化边分组能够被不同的用户定制算法重用。
根据本发明实施例的GridGraph图处理方法,基于预处理得到的栅格化边分组,能够将相关的顶点分组载入快速存储设备,保证了顶点的读写局部性。
根据本发明实施例的GridGraph图处理方法,通过读窗口和写窗口保证了顶点的读写局部性,使得全部图处理过程,只需要一遍对边的顺序读取。
另外,借助于可选的用户定义的过滤函数,能够跳过对不相关的顶点或边的流化处理,对于迭代式定制算法能够显著提高收敛速度。
4、第三实施例的GridGraph图处理装置
下面描述根据本发明第三实施例的GridGraph图处理装置。
图22示出了根据本发明第三实施例的GridGraph图处理装置300的配置框图。
如图22所示,GridGraph图处理装置300包括原始图结构获取部件310、预处理部件320和流化处理-更新部件330。
图结构获取部件30用于获取原始图的图结构信息。
预处理部件320用于将图处理为边分组的栅格结构,包括:根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到的以i和j来标识的边分组Eij,将P*P个边分组E的数据存储在第二存储设备上,其中每个边分组中的各个边的数据被以顺序写方式存储在第二存储设备中,
流式处理-更新部件330用于按照预定的处理函数,一个边分组一个边分组进行处理,其中对于每个边分组,流式处理其中的边,其中在处理具体边分组Ei,j时,从第二存储设备将该边分组的数据顺序读入第三存储设备中,以及将顶点分组Vi的数据和顶点分组Vj的数据读入第四存储设备中,依据顶点分组Vi的数据、顶点分组Vj的数据和边分组Eij的数据,按照预定的处理函数,对于该边分组Ei,j中的边和/或顶点进行处理。
有关原始图结构获取部件310、预处理部件320和流化处理-更新部件330的功能和实现可以参考前述图处理方法S100的各相应步骤的描述。
5、第四实施例的GridGraph图栅格化方法
根据本发明另一实施例,还提供了一种计算机执行的图的栅格化表示及存储方法,包括:获取原始图的图结构信息;根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,将各个顶点分组V的数据存储在第一存储设备上;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将P*P个边分组E的数据存储在第二存储设备上,优选地每个边分组中的各个边的数据被以顺序写方式存储在第二存储设备中,其中在后续对如此存储的图进行处理时,能够将两个顶点分组V的数据整体加载到第三存储设备中,该第三存储设备的读取速度高于第一存储设备的读取速度。
在一个示例中,所述第一和第二存储设备是硬盘或固态盘,第三存储设备是内存。
在另一个示例中,所述第一和第二存储设备是内存,第三存储设备是高速缓存cache。
在一个示例中,其中每个边分组Eij以文件系统中的文件形式进行读写,各个边分组为单独的文件。
在一个示例中,第二存储设备是硬盘,按照边分组在后续流式处理阶段被访问的顺序,将多个边分组文件合并为一个文件,并维持索引信息,使得根据索引能够定位到文件中的具体边分组数据。
在一个示例中,还在第一或第二存储设备上存储图的元数据,元数据包括顶点的数目、边的数目、边的类型以及P的大小。
在一个示例中,其中对边分组中边的顺序没有限制。
在一个示例中,所述计算机为单个计算机。
以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。
因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是除非逻辑上要求否则并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (34)

1.一种由计算机执行的图的处理方法,包括:
原始图结构获取步骤,获取原始图的图结构信息;
预处理步骤,用于将图处理为边分组的栅格结构,包括:
根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,保存关于顶点分组的信息,将各个顶点分组V的数据存储在第一存储设备上;
根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组V中的第i个顶点分组,以及P个顶点分组V中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将该第i个顶点分组称为起始顶点分组Vi,将第j个顶点分组称为终点顶点分组Vj,将P*P个边分组E的数据存储在第二存储设备上,
流式处理步骤,按照预定的处理函数,一个边分组一个边分组地进行预定处理,其中对于每个边分组,流式处理其中的边,即按照该预定的处理函数逐个对边分组中的边进行处理,
其中在处理具体边分组Ei,j时,从第二存储设备将该边分组的数据顺序读入第三存储设备中,以及将起始顶点分组Vi的数据和终点顶点分组Vj的数据从第一存储设备读入第四存储设备中,
依据起始顶点分组Vi的数据、终点顶点分组Vj的数据和边分组Eij的数据,按照预定的处理函数,对于该边分组Ei,j中的边进行处理。
2.如权利要求1所述的处理方法,其中,第一存储设备和第二存储设备的访问速度低于第三存储设备和第四存储设备的访问速度。
3.如权利要求2所述的处理方法,第一和第二存储设备为硬盘或固态盘,第三和第四存储设备为内存。
4.如权利要求2所述的处理方法,第一和第二存储设备为内存,第三和第四存储设备为高速缓存cache。
5.如权利要求1到4任一项所述的处理方法,所述流式处理边包括实时对边终点进行本地更新。
6.如权利要求1到4任一项所述的处理方法,包括按列顺序来处理各个边分组。
7.如权利要求1到4任一项所述的处理方法,还包括:
在边分组Ei,j处理完成后,将处理后的起始顶点分组Vi的数据和/或终点顶点分组Vj的数据统一更新到第一存储设备。
8.如权利要求1到4任一项所述的处理方法,其中顶点数据存储在文件系统上,通过操作系统的内存映射机制来访问。
9.如权利要求1到4任一项所述的处理方法,还包括:
在对边分组Ei,j进行处理之前,判断该边分组Ei,j是否处于活动状态;以及
当判断结果为该边分组Ei,j并未处于活动状态时,不对该边分组Ei,j进行处理。
10.如权利要求1到4任一项所述的处理方法,还包括:
在对边分组Ei,j中的顶点和/或边进行处理之前,判断该顶点和/或边是否应该被处理;以及
当判断结果为该顶点和/或边不应被处理时,不对该顶点和/或边进行处理。
11.如权利要求1到4任一项所述的处理方法,其中,采用多个线程并行对各个边分组进行处理。
12.如权利要求8所述的处理方法,其中,在第四存储设备的带宽比第一存储设备的带宽高预定数量级的情况下,并发进行在第四存储设备中的边分组的处理和对第一存储设备进行的顶点的数据更新处理。
13.如权利要求1到4任一项所述的处理方法,所述预定处理为BFS、WCC、SpMV、PageRank中的任一个,其中BFS为对图进行宽度优先搜索、WCC为获取无向图的弱连通分支、SpMV为稀疏向量乘、PageRank为对网络中的顶点进行排序。
14.如权利要求1到4任一项所述的处理方法,所述计算机为单个计算机。
15.如权利要求1到4任一项所述的处理方法,处理过程中,对边分组的访问是只读访问。
16.如权利要求1到4中任一项所述的处理方法,其中在预处理之前和预处理之后,对边的顺序没有限制。
17.如权利要求1到4中任一项所述的处理方法,还包括在第一或第二存储设备上存储图的元数据,元数据包括顶点的数目、边的数目、边的类型以及P的大小。
18.如权利要求1或2所述的处理方法,第二存储设备是硬盘,在预处理阶段,先获得各个边分组数据的文件,然后按照后续流式处理时边分组被访问的顺序将多个边分组的文件合并为一个文件写到硬盘上,并维护索引信息,使得能够定位合并后的文件中的具体边分组数据。
19.如权利要求1到4中任一项所述的处理方法,其中每个边分组Eij的数据存储在文件系统中,各个边分组为单独的文件;所有顶点的数据以文件系统机制存储,所有顶点的数据按照编号的顺序写在一个文件中,按照编号的顺序排列的顶点逻辑上被以相等间距划分为顶点分组。
20.一种计算机执行的图的栅格化表示及存储方法,包括:
获取原始图的图结构信息;
根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,将各个顶点分组V的数据存储在第一存储设备上;
根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:
对于P个顶点分组中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,
以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij
将P*P个边分组E的数据存储在第二存储设备上,
其中在后续对如此存储的图的边分组进行处理时,将相应的起始顶点分组和终点顶点分组的数据整体加载到第三存储设备中,
该第三存储设备的读取速度高于第一存储设备的读取速度。
21.如权利要求20所述的栅格化表示及存储方法,所述第二存储设备是硬盘或固态盘。
22.如权利要求20所述的栅格化表示及存储方法,其中每个边分组Eij以文件系统中的文件形式进行读写,各个边分组为单独的文件。
23.如权利要求20所述的栅格化表示及存储方法,其中所述第二存储设备是硬盘,按照边分组在后续流式处理阶段被访问的顺序,将多个边分组文件合并为一个文件,并维持索引信息,使得根据索引能够定位到文件中的具体边分组数据。
24.如权利要求20所述的栅格化表示及存储方法,还在第一或第二存储设备上存储图的元数据,元数据包括顶点的数目、边的数目、边的类型以及P的大小。
25.如权利要求20所述的栅格化表示及存储方法,其中对边分组中边的顺序没有限制。
26.如权利要求20到25任一项所述的栅格化表示及存储方法,所述计算机为单个计算机。
27.一种图处理装置,包括原始图结构获取部件、预处理部件和流化处理-更新部件,
原始图结构获取部件用于获取原始图的图结构信息;
预处理部件用于将图处理为边分组的栅格结构,包括:根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,将各个顶点分组V的数据存储在第一存储设备上;根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组V中的第i个顶点分组,以及P个分组中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将该第i个顶点分组称为起始顶点分组Vi,将第j个顶点分组称为终点顶点分组Vj,将P*P个边分组E的数据存储在第二存储设备上;以及
流式处理-更新部件用于按照预定的处理函数,一个边分组一个边分组地进行处理,其中对于每个边分组,流式处理其中的边,即按照该预定的处理函数逐个对边分组中的边进行处理,其中在处理具体边分组Ei,j时,从第二存储设备将该边分组的数据顺序读入第三存储设备中,以及从第一存储设备将起始顶点分组Vi的数据和终点顶点分组Vj的数据读入第四存储设备中,依据起始顶点分组Vi的数据、终点顶点分组Vj的数据和边分组Eij的数据,按照预定的处理函数,逐个对该边分组Ei,j中的边进行处理。
28.一种由计算机执行的图的处理方法,包括:
原始图结构获取步骤,获取原始图的图结构信息;
预处理步骤,用于将图处理为边分组的栅格结构,包括:
根据图结构信息,将图的所有顶点分为P个顶点分组V,各个顶点分组V之间不重叠,保存关于顶点分组的信息,顶点分组的数据被存储在慢速存储设备上;
根据图结构信息,按照如下方式得到P*P个边分组E,其中P为大于等于2的整数:对于P个顶点分组V中的第i个顶点分组,以及P个顶点分组V中的第j个顶点分组,其中i=1到P,j=1到P,以第i个顶点分组中的各个顶点为边起点候选,以第j个顶点分组中的各个顶点为边终点候选,依据图结构信息,得到各个边,构成以i和j来标识的边分组Eij,将该第i个顶点分组称为起始顶点分组Vi,将第j个顶点分组称为终点顶点分组Vj,将P*P个边分组E的数据存储在慢速存储设备上,其中每个边分组中的各个边的数据被以顺序写方式存储在慢速存储设备中,
流式处理步骤,包括循环执行下述操作,直至所有的边分组都经过了处理:
将多个未处理的边分组的数据和与该多个未处理的边分组的每个相关联的起始顶点分组和终点顶点分组的数据读入第一级别的快速存储设备中;以及
对于该多个未处理的边分组的每个
将该边分组的数据和相关联的起始顶点分组和终点顶点分组的数据从第一级别的快速存储设备读入第二级别的快速存储设备,该第二级别的快速存储设备的存储速度高于第一级别的快速存储设备,
流式处理其中的边,即按照预定的处理函数逐个对边分组中的边进行处理。
29.如权利要求28所述的方法,其中流式处理步骤中,按列顺序来流式处理各个边分组,
将多个未处理的边分组的数据和与该多个未处理的边分组的每个相关联的起始顶点分组和终点顶点分组的数据读入第一级别的快速存储设备中包括:
将边分组的栅格结构中的一列中的全部或部分的边分组读入第一级别的快速存储设备。
30.如权利要求28所述的方法,所述慢速存储设备是硬盘或固态盘设备,所述第一级别的快速存储设备是内存,所述第二级别的快速存储设备是高速缓存。
31.如权利要求28所述的方法,流式处理边包括:
实时本地更新边的终点顶点数据。
32.如权利要求28所述的方法,其中顶点数据存储在文件系统上,通过操作系统的内存映射机制来访问。
33.如权利要求28所述的方法,所述慢速存储设备是硬盘,在预处理阶段,先获得各个边分组数据的文件,然后按照后续流式处理时边分组被访问的顺序将多个边分组的文件合并为一个文件写到硬盘上,并维护索引信息,使得能够定位合并后的文件中的具体边分组数据。
34.如权利要求28所述的方法,还包括:
在对边分组Ei,j进行处理之前,判断该边分组Ei,j是否处于活动状态;以及
当判断结果为该边分组Ei,j并未处于活动状态时,不对该边分组Ei,j进行处理。
CN201510347734.1A 2015-06-19 2015-06-19 图的处理方法、装置以及栅格化表示及存储方法 Active CN104952032B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510347734.1A CN104952032B (zh) 2015-06-19 2015-06-19 图的处理方法、装置以及栅格化表示及存储方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510347734.1A CN104952032B (zh) 2015-06-19 2015-06-19 图的处理方法、装置以及栅格化表示及存储方法

Publications (2)

Publication Number Publication Date
CN104952032A CN104952032A (zh) 2015-09-30
CN104952032B true CN104952032B (zh) 2018-03-23

Family

ID=54166667

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510347734.1A Active CN104952032B (zh) 2015-06-19 2015-06-19 图的处理方法、装置以及栅格化表示及存储方法

Country Status (1)

Country Link
CN (1) CN104952032B (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106919628A (zh) * 2015-12-28 2017-07-04 阿里巴巴集团控股有限公司 一种图数据的处理方法和装置
CN108132838B (zh) 2016-11-30 2021-12-14 华为技术有限公司 一种图数据处理的方法、装置及系统
CN109918017A (zh) * 2017-12-12 2019-06-21 北京机电工程研究所 数据调度方法及装置
CN109240600B (zh) * 2018-07-24 2020-05-19 华中科技大学 一种基于混合更新策略的磁盘图处理方法
CN109254725B (zh) * 2018-07-26 2020-05-19 华中科技大学 一种基于子图构建的磁盘图处理方法及系统
CN109214944B (zh) * 2018-08-28 2022-03-11 北京蚂蚁云金融信息服务有限公司 基于社交图谱的垃圾用户识别方法和装置
CN109461113B (zh) 2018-10-11 2021-07-16 中国人民解放军国防科技大学 一种面向数据结构的图形处理器数据预取方法及装置
CN110245135B (zh) * 2019-05-05 2021-05-18 华中科技大学 一种基于numa架构的大规模流式图数据更新方法
CN110609924A (zh) * 2019-08-15 2019-12-24 深圳壹账通智能科技有限公司 基于图数据的全量关系计算方法、装置、设备及存储介质
CN112463065A (zh) * 2020-12-10 2021-03-09 恩亿科(北京)数据科技有限公司 一种账号打通的计算方法及系统
CN112988064B (zh) * 2021-02-09 2022-11-08 华中科技大学 一种面向并发多任务的磁盘图处理方法
CN113792170B (zh) * 2021-11-15 2022-03-15 支付宝(杭州)信息技术有限公司 图数据划分方法、装置和计算机设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102332168A (zh) * 2011-09-08 2012-01-25 南京大学 一种基于v图的栅格地图矢量化方法
CN102750219A (zh) * 2011-04-22 2012-10-24 清华大学 基于cpu硬件性能监控计数器的cpi精确测量方法
CN103559016A (zh) * 2013-10-23 2014-02-05 江西理工大学 一种基于图形处理器并行计算的频繁子图挖掘方法
JP2014036277A (ja) * 2012-08-07 2014-02-24 Kddi Corp 自己の設置位置の推定方法及びノード装置
CN103631878A (zh) * 2013-11-08 2014-03-12 中国科学院深圳先进技术研究院 一种大规模图结构数据处理方法、装置和系统
CN104063507A (zh) * 2014-07-09 2014-09-24 时趣互动(北京)科技有限公司 一种图计算方法及引擎
JP2015070544A (ja) * 2013-09-30 2015-04-13 Kddi株式会社 グラフ情報を生成する方法及びノード装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102750219A (zh) * 2011-04-22 2012-10-24 清华大学 基于cpu硬件性能监控计数器的cpi精确测量方法
CN102332168A (zh) * 2011-09-08 2012-01-25 南京大学 一种基于v图的栅格地图矢量化方法
JP2014036277A (ja) * 2012-08-07 2014-02-24 Kddi Corp 自己の設置位置の推定方法及びノード装置
JP2015070544A (ja) * 2013-09-30 2015-04-13 Kddi株式会社 グラフ情報を生成する方法及びノード装置
CN103559016A (zh) * 2013-10-23 2014-02-05 江西理工大学 一种基于图形处理器并行计算的频繁子图挖掘方法
CN103631878A (zh) * 2013-11-08 2014-03-12 中国科学院深圳先进技术研究院 一种大规模图结构数据处理方法、装置和系统
CN104063507A (zh) * 2014-07-09 2014-09-24 时趣互动(北京)科技有限公司 一种图计算方法及引擎

Also Published As

Publication number Publication date
CN104952032A (zh) 2015-09-30

Similar Documents

Publication Publication Date Title
CN104952032B (zh) 图的处理方法、装置以及栅格化表示及存储方法
Liu et al. Closing the" quantum supremacy" gap: achieving real-time simulation of a random quantum circuit using a new sunway supercomputer
CN104063507B (zh) 一种图计算方法及系统
US20160299919A1 (en) Management of Intermediate Data Spills during the Shuffle Phase of a Map-Reduce Job
US9053067B2 (en) Distributed data scalable adaptive map-reduce framework
CN105468439B (zh) 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行方法
CN104778077B (zh) 基于随机和连续磁盘访问的高速核外图处理方法及系统
US20090249004A1 (en) Data caching for distributed execution computing
Meister et al. Parallel memory-efficient adaptive mesh refinement on structured triangular meshes with billions of grid cells
CN105930479A (zh) 一种数据倾斜处理方法及装置
US20180300330A1 (en) Proactive spilling of probe records in hybrid hash join
Jiang et al. Parallel K-Medoids clustering algorithm based on Hadoop
JP2023546040A (ja) データ処理方法、装置、電子機器、及びコンピュータプログラム
Kotwica et al. Efficient space virtualization for the Hoshen–Kopelman algorithm
Kim et al. Behemoth: a flash-centric training accelerator for extreme-scale {DNNs}
Liu Parallel and scalable sparse basic linear algebra subprograms
Lee et al. Parallel mesh simplification using embedded tree collapsing
Tang et al. A high-throughput solver for marginalized graph kernels on GPU
CN103365926A (zh) 在文件系统中用于保存快照的方法和装置
Delling et al. Customizing driving directions with GPUs
CN104239520B (zh) 一种基于历史信息的hdfs数据块放置策略
CN106575296A (zh) 用于托管的分析的动态n维立方体
CN106484532B (zh) 面向sph流体模拟的gpgpu并行计算方法
Nie et al. Angel-ptm: A scalable and economical large-scale pre-training system in tencent
Liang et al. A Survey on Spatio-temporal Big Data Analytics Ecosystem: Resource Management, Processing Platform, and Applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201022

Address after: 05-05, 5 / F, building 9, yard 1, Zhongguancun East Road, Haidian District, Beijing 100084

Patentee after: BEIJING FMA TECHNOLOGY Co.,Ltd.

Address before: 100084 Tsinghua University, Beijing, Haidian District

Patentee before: TSINGHUA University

TR01 Transfer of patent right

Effective date of registration: 20201118

Address after: 518000 a1202ac17, building 1, Shenzhen software industry base, No. 81, 83, 85, Gaoxin South 10th Road, Binhai community, Yuehai street, Nanshan District, Shenzhen City, Guangdong Province

Patentee after: Shenzhen Shentu Technology Co.,Ltd.

Address before: 05-05, 5 / F, building 9, yard 1, Zhongguancun East Road, Haidian District, Beijing 100084

Patentee before: BEIJING FMA TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210823

Address after: 100192 No. 306, 3 / F, building 28, Baosheng Beili West District, Haidian District, Beijing

Patentee after: Beijing ant cloud Financial Information Service Co.,Ltd.

Address before: A1202ac17, building 1, Shenzhen software industry base, No. 81, 83 and 85, South 10th Road, Gaoxin, Binhai community, Yuehai street, Nanshan District, Shenzhen, Guangdong 518000

Patentee before: Shenzhen Shentu Technology Co.,Ltd.

TR01 Transfer of patent right
CP01 Change in the name or title of a patent holder

Address after: 100192 No. 306, 3 / F, building 28, Baosheng Beili West District, Haidian District, Beijing

Patentee after: Ant yunchuang digital technology (Beijing) Co.,Ltd.

Address before: 100192 No. 306, 3 / F, building 28, Baosheng Beili West District, Haidian District, Beijing

Patentee before: Beijing ant cloud Financial Information Service Co.,Ltd.

CP01 Change in the name or title of a patent holder