CN104778077A - 基于随机和连续磁盘访问的高速核外图处理方法及*** - Google Patents
基于随机和连续磁盘访问的高速核外图处理方法及*** Download PDFInfo
- Publication number
- CN104778077A CN104778077A CN201510206124.XA CN201510206124A CN104778077A CN 104778077 A CN104778077 A CN 104778077A CN 201510206124 A CN201510206124 A CN 201510206124A CN 104778077 A CN104778077 A CN 104778077A
- Authority
- CN
- China
- Prior art keywords
- data
- update data
- task
- file
- update
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于随机和连续磁盘访问的高速核外图处理方法及***,属于大数据领域的图计算与处理技术领域。本发明包括:应用于I/O操作子模块的核外数据的快速索引机制,采用内存映射的方式快速处理核外数据;应用于算法调度子模块的基于位图管理的同步与异步模型相结合的混合调度策略,达到减少迭代次数并节省内存的目的;应用于数据管理子模块的中间计算数据的“核内”置放与处理策略,达到减少中间计算数据的额外I/O开销的目的,并且该策略将随机I/O接入转化为连续I/O接入,减少了磁盘的空转,提高***运行效率。
Description
技术领域
本发明属于大数据处理的图计算技术领域,更具体地,涉及一种基于随机和连续磁盘访问的高速核外图处理方法及***。
背景技术
随着社交网络、生物信息网络和信息技术的高速发展,使得以这些信息为对象的图数据日益增大。这些图数据蕴含的信息以及潜在的价值是非常有诱惑力的,但是如何处理这些图数据却是一个具有挑战性的问题。
现实世界的图数据具有Power-Law特性,某些顶点的出边和入边多,某些则很少,这种分布特点也称长尾特性。
现有的图处理方法包括分布式处理和核外处理方式,分布式***由于下列原因并不适合普通人使用:(1)强耦合性图的分割难度巨大,寻常的用户需要阅读大量的资料才能找到合适的方法把图分割,部署到集群的各个节点上;(2)由于分布式计算处理过程相当复杂,大多数***采用的是同步模型来进行迭代和通信,由于每次处理的消息数量有限,因此网络的延迟和节点的通信会影响该模型的性能;(3)当图数据很大时,重复的计算和***故障将会大大的影响处理性能,同时分布式***的容错性也是需要影响性能和稳定性的关键因素,而这个正好是普通用户难以处理的;(4)对普通的科研人员来说,如果不熟悉分布式***,那么在分布式***上编写和调试算法也是一个很大的挑战。
分布式***带来额外的管理开销以及难度极大的图划分使得人们开始把注意力转向单个机器(PC),因为单机容易获得并且实践方便,很适合普通用户。但是由于目前的图数据拥有数十亿的边和点,普通机器无法提供数百GB的内存(DRAM),而且单一的依赖内存十分昂贵,普通人无法承受,所以单机下的***必须依赖磁盘来辅助计算。简单的单机***不需要考虑强耦合性图的划分与部署问题,也不需要考虑网络通信的延迟和准确性问题,更不需要处理容错和分布式调试的问题。近几年,在单机下基于磁盘的图处理***成为了新的研究热点,下面的这些特点也使得这类***相比于分布式***更加适合普通用户:(1)充分利用了CPU之间的并行性,通过特殊的数据结构保证了各个CPU互不干扰的工作,解决了分布式计算局部性差与图划分难度高等问题;(2)充分挖掘了磁盘的潜能,在不改变I/O通信速度的情况下,充分利用多线程优势挖掘计算与I/O并行化操作,使得部分I/O与计算同步处理;(3)学习并使用以点为中心(以边为中心)的哲学思想,将特殊于算法的图处理***变成一个成为普通用户都能使用的图处理编程工具,并且设计出一套方便的应用程序编程接口(Application ProgrammingInterface,API)供用户调用,用户可以自行编写算法来做具体的工作。并且大部分这类技术还是开源的,用户可以下载并研究,为这类技术做出新的贡献;(4)使用特殊的迭代模型,在硬件资源不足的情况下,将计算分成一个个迭代来完成,使得这类***稳定并方便使用。
基于磁盘的图处理***大多沿用GAS(Gather-apply-Scatter)计算模型,源自分布式图处理技术。GAS模型将用户算法分为多次迭代,每次迭代包括scatter计算和gather计算,其中scatter计算沿着某个顶点的出边或入边传递消息,gather计算收集指向某个顶点的所有消息。每次迭代后,如果有新的顶点需要传递消息,则继续执行新的迭代。如果某次迭代后没有顶点需要传递消息,则算法收敛,***执行结束。
上述处理过程伴随大量的消息的产生,内存的限制导致不能立即传递到目标顶点。现有***将这些消息称为中间计算数据(下文称为update数据),update数据通常情况下包含需要传递消息的目标顶点以及一个需要传递的消息,将传递的消息称为update的属性值。update的属性值生成的过程因用户算法的不同而不一致,但基本上都是通过顶点的属性值与边的权值做某种计算后生成。顶点的属性值一般包含具体的数值。用户算法主要指的是图查询算法,包括全局查询算法PageRank、SpMV(Sparse Matrix-vectorMultiplication)以及目标查询算法WCC(Weakly Connected Components)、BFS(Breadth-First Search)、SSSP(Single Source Shortest Path)等等。其中全局查询算法执行时,所有顶点都会参与计算;目标查询算法可能只有部分顶点参与计算。
现有的核外图处理***存在各种不足:(1)随机磁盘读写效率不高:图数据分布的特殊性导致随机访问的几率大大增加,但是磁盘的随机访问会带来巨大的性能损耗;TurboGraph由于采用完全的随机读写方式,导致此类***只能在固态硬盘(SSD)上取得良好的效果;(2)数据的使用效率不高:现有的GraphChi和X-Stream采用完全连续读写方式,由于读写了太多无意义的数据,导致内存效率不高;(3)中间计算数据的处理:类似X-Stream的***采用了生成中间计算数据的方式传递信息,但是由于图数据太大,导致生成的计算数据不得不存储到磁盘中,同样,类似GraphChi的***通过原始的边数据传递信息,也即会在计算中修改原始数据,但是这种方法带来了更大的I/O开销,类似TurboGraph在执行某些任务量大的任务时,也会生成大量的计算数据,并且采用的是随机读写方式,因此现有***在处理大的图数据时,都会采用磁盘来辅助存储中间计算数据,带来了额外的I/O操作;(4)执行模型与并行化:现有的执行模型主要包括同步方式和异步方式,GraphChi采用的是异步方式,这种方式的好处是收敛速度快,但是并行化不高;X-Stream采用的完全同步方式,这种方式和分布式***类似,好处是并行化高;异步模式的缺点是并行度低,并行模式的缺点是重复率大。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供一种基于随机和连续磁盘访问的高速核外图处理方法及***,其目的在于设计一种高速的并且最大化内存使用效率的核外图数据处理方法,由此解决现有核外图处理***由于采用连续读写方式而带来的内存使用率不高以及采用随机读写方式带来的存储介质局限性问题。
为实现上述目的,根据本发明的一个方面,提供一种基于随机和连续磁盘访问的高速核外图处理方法,包括:
步骤1初始化核外数据,并根据用户输入的参数与选择的算法进行***初始化,其中,所述核外数据为经过预处理后的二进制文件;
步骤2判断本次迭代是否有任务需要执行,是则根据公式CID=VID/N将所有任务分配到对应的CPU上,其中,CID表示被分配到的CPU的编号;VID表示任务顶点的编号;N表示CPU的个数;然后执行步骤3,否则流程结束;
步骤3各个CPU根据分配的任务,读取任务顶点编号,索引该任务顶点依赖的核外数据,并按照用户算法执行scatter计算,每次执行一个任务,将计算结果存储在update数据缓冲区,如果所述update数据缓冲区溢出,则保存上下文信息,标记context-gather并执行步骤5,否则执行步骤4;
步骤4判断本次迭代的所有任务是否已经执行完毕,是则执行步骤5,否则读取下一个任务,继续执行所述步骤3;
步骤5读取溢出的update数据缓冲区内的update数据,依次将每个update数据与对应任务顶点进行计算,并修改update数据映射表,直到消耗完所述溢出的update数据缓冲区内所有update数据,然后执行步骤6;
步骤6判断是否标记了context-gather,是则读取所述步骤3保存的所述上下文信息,使***便恢复到之前的状态执行,然后执行步骤3,否则执行步骤7;
步骤7判断算法是否收敛,是则流程结束,否则执行步骤2。
根据本发明的另一方面,提供一种基于随机和连续磁盘访问的高速核外图处理***,包括算法模块、逻辑接口模块以及核心引擎模块,其中:
所述算法模块用于根据用户的选择调用用户算法;
所述逻辑接口模块用于提供API,还用于分析所述算法模块的操作请求,并通过逻辑转换功能,将所述算法模块的操作请求转化为对所述核心引擎模块的操作请求,并将转化的操作请求传递到所述核心引擎模块;
所述核心引擎模块包含***配置子模块、数据管理子模块、算法调度子模块和I/O操作子模块,其中,所述***配置子模块用于***初始化,所述算法调度子模块用于任务处理与执行,所述I/O操作子模块用于读写磁盘数据,所述数据管理子模块用于管理内存数据并负责相关的计算结果操作,所述核心引擎分析根据所述逻辑接口模块传来的操作请求,调用相应的子模块进行处理,处理完成之后将结果返回至所述逻辑接口模块,由所述逻辑接口模块的逻辑转换功能处理后,返回给所述算法模块,最后由所述算法模块内的用户算法进行处理。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)***采用了模块分离的设计方法,不仅可以处理用户的各种输入、请求,同时具有高扩展性;核心引擎的设置可以让计算、I/O、任务调度并行化,提高了对硬件资源的利用率;
(2)核外数据的快速索引方法提高了数据读取的效率,对大图数据进行按需索引并调度的策略,因此,相比于GraphChi和X-Stream,大大的减少了读数据的量,提高了对这部分数据的利用率,并且由于使用了内存映射,导致某些访问很高的数据一直存在于内存,相比与采用传统映射的TurboGraph,减少了这部分数据的I/O操作量,提升了***的性能;
(3)update数据的“核内”置放与处理策略通过连续方式载入属性文件,将update通过特殊的置放与处理方法与属性值进行计算,减少update数据的额外I/O开销,同时将由于数据分布长尾特性而导致的大量随机I/O接入转化为对属性文件的连续I/O接入,减少磁盘的无效空转;
(4)使用了基于位图管理的同步与异步模型相结合的混合型调度策略,在提高任务索引速度的同时,节省了内存,并且一定程度的减少了迭代次数。
附图说明
图1为本发明基于随机和连续磁盘访问的高速核外图处理***的结构框图;
图2为本发明基于随机和连续磁盘访问的高速核外图处理方法的流程图;
图3为本发明基于随机和连续磁盘访问的高速核外图处理方法的核外数据示意图;
图4为本发明基于随机和连续磁盘访问的高速核外图处理方法的内存管理结构示意图;
图5为本发明基于随机和连续磁盘访问的高速核外图处理***在执行目标查询算法时任务数量虽迭代次数增加的变化图;
图6为本发明基于随机和连续磁盘访问的高速核外图处理方法中update数据的“核内”置放预处理策略示例图;
图7为本发明基于随机和连续磁盘访问的高速核外图处理方法在执行SpMV算法时update数据缓冲区的利用率和分区之间的update数据数量的标准差变化图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
图1所示为本发明基于随机和连续磁盘访问的高速核外图处理***的结构框图,包括:算法模块、逻辑接口模块以及核心引擎模块,其中,算法模块用于调用用户算法,根据用户选择的算法,调用具体用户算法执行。在本发明实施例中,用户算法包括PageRank、SpMV、WCC、BFS、SSSP等在内的所有图查询算法,由用户编写。算法模块采用传统C/C++编程方法调用各种库,包括Glibc库和Boost库,以及逻辑接口模块提供的API。逻辑接口模块除了提供API外,还用于分析算法模块的操作请求,并通过逻辑转换功能,转化为对核心引擎模块的操作请求,之后便将请求传递到核心引擎模块。核心引擎模块主要用于执行具体的操作,包括读写磁盘数据、任务处理与执行、计算结果等操作。核心引擎模块包含***配置、数据管理、算法调度和I/O操作四个子模块,其中,***配置子模块用于初始化***,算法调度子模块用于任务处理与执行,所处理的任务一般包括一个或多个顶点,I/O操作子模块用于读写磁盘数据,数据管理子模块管理内存数据并负责相关的计算结果操作,所管理的内存数据既包含I/O子模块读写的数据,也包括算法调度子模块处理的任务,计算操作主要为scatter计算和gather计算。核心引擎分析根据逻辑接口模块传来的操作请求,调用相应的子模块处理,处理完成之后将结果返回至逻辑接口模块,由逻辑接口模块的逻辑转换功能处理后,返回给算法模块,最后由算法模块内的用户算法进行处理。
图2所示为本发明基于随机和连续磁盘访问的高速核外图处理方法的流程图,具体包括以下步骤:
步骤1***初始化,包括各种数据以及各个模块的初始化,具体包括以下子步骤:
(1-1)核外数据初始化;
核外数据是对特殊磁盘数据的统称,在本发明实施例中,包括一系列经过预处理后的二进制文件。现有的代表性核外图处理***都把原始的图数据预处理成对应的二进制文件。本发明实施例的预处理程序为简单的I/O读写操作。
核外数据是本发明的实现基础,图3所示为本发明基于随机和连续磁盘访问的高速核外图处理方法的核外数据示意图,包括(a)出边索引文件和出边文件,其中出边文件拥有配套的可选的权值;(b)入边索引文件和入边文件,均为可选文件;(c)属性文件,存储每个顶点的属性值。其中,出边索引文件按照顺序存储了每个顶点在出边文件中的索引,索引规则为普通的索引规则,不包含任何映射关系。出边文件存储了所有顶点的出边,可选的权值为某些算法特有,例如SSSP和SpMV算法。入边索引文件和入边文件为某些回溯算法特有,例如WCC算法。属性文件用于存储每个顶点的属性值,不同的算法拥有不同的属性值。核外数据的初始化主要包括读取核外数据的描述文件,描述文件同样为预处理程序生成,自动被***识别。描述文件包括核外数据的参数,主要包括:每个核外文件的名称、文件的大小、顶点个数、边的个数。
(1-2)根据步骤(1-1)传递的参数以及用户输入的参数,初始化数据管理子模块,I/O操作子模块以及算法调度子模块;
用户输入的参数主要包括算法名称、静态分配内存大小、CPU个数、执行线程数以及I/O线程数,具体包括以下子步骤:
(1-2-1)根据步骤(1-1)输入的核外数据的参数以及I/O线程数初始化I/O操作子模块,主要包括设置I/O读写线程并对应到各个核外文件;
(1-2-2)根据算法名称和顶点个数初始化算法调度子模块,准备好初始化的参数:CPU个数和顶点个数。
(1-2-3)初始化数据管理子模块,数据管理子模块用于管理一切内存数据和计算。图4所示为本发明基于随机和连续磁盘访问的高速核外图处理方法的内存管理结构示意图。在本发明实施例中,内存管理结构用于数据管理子模块的操作,下面详细说明该内存管理结构的构造和初始化过程。
根据静态分配内存大小参数在内存划分一块区域,如图4(a)所示,假设CPU个数为4,整块区域分为2部分,分别是局部数据区和全局数据区,局部数据区用于管理每个CPU的局部数据,全局数据区用于缓冲属性文件,也称属性文件缓冲区。
如图4(a)所示,局部数据区划分为管理区和update数据缓冲区,管理区用于管理数据,如图4(b)所示,该区域划分为头表、update数据映射表以及可选的位图调度器,其中头表存放着各种数据结构,包括上述各种参数;update数据映射表用于管理上述update数据缓冲区;位图调度器只有在目标查询算法才启动并根据顶点个数初始化。update数据缓冲区存放scatter计算过程中生成的update数据。
在针对特大数据的具体实施过程中,属性文件非常大,属性文件缓冲区大小有限,本发明提出“段式分割”的方法,将属性文件分割成多个部分,每一部分成为一个属性段,每次载入某个属性段用于计算,“段式分割”的详细步骤如下:
(1-2-3-1)根据步骤(1-2)中用户输入的参数,得到需要预分配的静态内存大小,接着在***内存中分配该大小的内存,并将已经分配的该内存划分为2部分,其中2/5倍的内存划分给全局数据区,也即属性文件缓冲区,剩下的划分给局部数据区。该划分数值是本发明在不断实验中得出的经验型结论,并不以此为限;
(1-2-3-2)属性文件完全载入到属性文件缓冲区时,调整属性文件缓冲区的大小至属性文件的大小,执行步骤(1-3);否则比较属性文件大小和属性文件缓冲区大小的差值,如果该差值在预先定义的某个阈值T内,则自适应的调整属性文件缓冲区的大小,并执行步骤(1-3),否则执行步骤(1-2-3-3);
(1-2-3-3)将属性文件缓冲区两等分,形成一个双缓冲器,每个缓冲器的大小是属性文件缓冲区大小的一半,通过属性文件大小除以缓冲器的大小得到属性文件应该被分割成几个属性段,并得到每个属性段的大小和顶点的个数,接着通过静态内存大小减去属性文件缓冲区的大小得到局部数据区的大小,通过局部数据区的大小减去管理区的大小得到update数据缓冲区的大小,其中管理区的大小通过几个数据结构的大小相加得到,这些数据结构是固定的;
(1-2-3-4)根据属性段的个数将update数据缓冲区等分成同样个数的缓冲段,每个缓冲段内部再根据CPU个数等分成多个分区,缓冲段和属性段一一对应,也即某个缓冲段内的update数据的目标顶点都在同一个属性段,然后执行步骤(1-3);
(1-3)逻辑接口模块初始化和算法模块初始化;
***配置子模块将自动执行用户所编写的初始化函数,如果是目标查询算法,则根据用户定义的规则产生下一次迭代需要执行的任务,并存储在位图调度器内;如果是全局查询算法,则在下一次迭代中执行所有任务,通过头表中的数据结构保存,并记录每次任务的起始顶点和结束顶点,方便任务执行时暂停和继续。至此,***初始化工作完成。
步骤2本次迭代开始,如果本次迭代有任务需要执行,则将所有任务分配到对应的CPU上,执行步骤3,否则流程结束。
算法调度子模块读取数据管理子模块中的任务数据,并将任务分配到各个CPU上,本发明采用基于位图管理的同步与异步模型相结合的混合调度策略进行任务的分配、调度与添加。任务产生后存储在数据子模块相应数据区,如果是全局查询算法,任务存储在管理区。如果是目标查询算法,任务存储在位图调度器内。
基于位图管理的同步与异步模型相结合的混合调度策略采用跨越式的分配方式将任务分配到各个CPU上。在本发明实施例中,跨越式任务分配方法主要包括:假如CPU个数为N,则使用公式CID=VID/N,得到某个任务被分配到的CPU的编号,其中,CID表示被分配到的CPU的编号;VID表示任务的顶点的编号。
例如CPU个数为4时,顶点编号为0、4、8、12、16等任务的CID为0,因此被分配到CPU0;顶点编号为1、5、9、13、17等任务的CID为1,因此被分配到CPU1;顶点编号为1、5、9、13、17等任务的CID为2,因此被分配到CPU2;顶点编号为3、7、11、15、19等任务的CID为3,因此被分配到CPU3,依次类推。之所以采用跨越式的分配是因为现实世界图数据具有Power-Law特性,导致scatter计算呈现某些顶点的任务特别多,而某些则特别少,造成各个CPU执行任务的不均衡,根据本发明在实验中的不断尝试,发现跨越式的任务分割方法具有较高的均衡性。采用跨越式的分割方法保证了scatter计算均衡性的同时,带来了极大的并行度,各个CPU只要执行自身的任务,生成update数据,互不影响,极大的发挥了同步模型的优势。
基于位图管理的同步与异步模型相结合的混合调度策略采用位图管理的目的是动态的保存任务并节省内存。图5所示为本发明基于随机和连续磁盘访问的高速核外图处理***在执行目标查询算法时任务数量虽迭代次数增加的变化图,也即三个目标查询算法BFS、WCC、SSSP在执行时的任务数量随迭代次数增加的变化情况。图中横坐标表示算法执行时的迭代次数,纵坐标表示每次迭代的任务数量,可以发现,整个算法执行过程中任务数量变化很大,WCC算法开始时任务非常多,后面则很少,SSSP和BFS分布呈中间多,两边少。使用动态数组或者链表虽然可以解决任务变化的问题,但是一旦数据量太大,内存无法装下,会带来额外的存数开销,影响***性能。采用位图管理的方式,可以动态的增删任务而不用动态的分配内存,位图的管理开销较小,并且占用内存只有普通情况下的八分之一,在单机下更加具有优势。
步骤3各个CPU根据分配的任务,执行scatter计算,每次执行一个任务,将计算结果存储在update数据缓冲区,如果该update数据缓冲区溢出,则保存上下文信息,标记context-gather并执行步骤5,否则执行步骤4。
任务按照所述的基于位图管理的同步与异步模型相结合的混合调度策略分配到各个CPU上之后,各个CPU便自动执行,由于使用了同步模型,因此保证了较高的并行性。为了叙述的完整性,下面以CPU0上的执行过程为例,详细叙述步骤3的子步骤如下:
(3-1)各个CPU根据分配的任务,执行某个任务,读取任务顶点的属性值以及顶点对应的出边或入边数据。scatter计算根据不同的算法执行不同的动作,需求的数据就会不一样。例如执行PageRank算法,则依赖顶点的属性值和顶点的出边数,如果是SSSP算法,则依赖顶点的属性值和顶点各个出边的权值。本步骤(3-1)具体包含以下子步骤:
(3-1-1)读取顶点的属性值,如果属性段的个数为1,说明属性文件可以完全装入内存,直接在内存读取相应顶点的属性值,并执行步骤(3-1-3),否则执行步骤(3-1-2);
(3-1-2)通过I/O操作子模块使用***的虚拟内存***读取所需的属性值;
(3-1-3)通过I/O操作子模块使用***的虚拟内存***读取顶点所需的出边或入边数据。
(3-1-4)等待数据读取到内存,执行步骤(3-2)。
步骤(3-1-2)和(3-1-3)中的读取数据方法也称核外数据的快速索引机制,在本发明实施例中,核外数据的快速索引策略包括:使用***的虚拟内存***,将核外数据映射到虚拟内存,随后访问这部分数据就像访问内存一样方便。当需要磁盘的数据时,发生缺页中断并交给操作***,操作***根据请求的页面去磁盘或者交换分区寻找对应的页面;当请求的页面已经在内存时,操作***便不会执行I/O操作;当内存装满,操作***会将一些不太活跃的页面替换到交换分区,而后将需要的页面载入到内存。核外数据的快速索引机制依赖图3中的核外数据,按照索引规则,读取某个任务的顶点对应的索引值,并寻找到顶点出边(入边)在出边(入边)文件中的起始位置和结束位置,最后连续的读取出边(入边)。
在本发明实施例中,基于位图管理的同步与异步模型相结合的混合调度策略和核外数据的快速索引机制相结合后,实现了一种按需调度数据的效果,与GraphChi以及X-Stream不同的是,节省了I/O操作以及提高了内存使用效率。与TurboGraph不同的是,TurboGraph每次读取的页面较大(1MB),而核外数据的快速索引机制每次读取的页面较小(4KB),并且对于频繁使用的页面来说,虚拟内存***会将其暂存在内存的Page Cache中,而TurboGraph采用的传统索引方式每次都需要从磁盘读数据,从这个角度上看,本发明加快了核外图处理索引核外数据的速度;
(3-2)沿着顶点的出边(入边),执行scatter计算,并生成update数据;
(3-3)判断update数据缓冲区是否溢出,如果是则暂停一切任务,记录导致溢出的缓冲段的编号,执行步骤(3-4),如果不溢出则将update数据存放到update数据缓冲区相应的缓冲段内对应的分区内,并修改相应的update数据映射表,然后执行步骤4。步骤(3-3)的存储方法由update数据的“核内”置放与处理策略提供,该策略用于存储update以及处理update,用于存储产生的update。
每个update数据包含一个目标顶点和一个update数据的属性值,表示将update数据的属性值传递到目标顶点中。现实世界图数据的长尾分布特点,导致指向某些顶点的update数据较多,其他的较少。现有***大多采用写回磁盘的方式存储,由于update数据数量的庞大与不确定性,该方式确实比较稳妥,但是带来了额外的I/O操作开销和管理开销。
为了解决这个问题,update数据的“核内”置放与处理策略将update采用跨越式的映射规则存放到内存中相应的缓冲区,并保证了各个缓冲区的平衡性,某个缓冲区溢出之后,其他的缓冲区也几乎是满的,保证了内存的利用率。
为了叙述的完整性,下面将简单的例子详细说明update数据的“核内”置放与处理策略存放update的实施步骤。图6所示为本发明基于随机和连续磁盘访问的高速核外图处理方法中update数据的“核内”置放预处理策略示例图。
如图6(a)所示,是某CPU的update数据映射表,图6(b)是某CPU的update数据缓冲区。步骤(1-2-3)初始化数据管理子模块时,详细介绍了update缓冲区的划分方法,假设当前CPU个数为4,缓冲段个数为3,分区个数为4。
根据缓冲段的个数和分区个数得到图6(a)中的update映射表是一个3×4的矩阵,并随着update数据的生成不断地更新,其中行号表示update数据在图6(b)中update数据缓冲区内对应的缓冲段编号,列号表示对应分区编号。定义新的参数LUMi,表示CPUi的局部映射表,i为CPU编号,此表的所有值初始化为0。
假设当前有一条边v→u,生成一条由顶点v指向顶点u的update数据,使用如下数学方法来计算此update要存放在CPUi的位置,定义缓冲段编号为r,分区编号为c,具体步骤如下:
(3-3-1)计算缓冲段编号r和分区编号c;
使用公式r=u/Csegment,c=u%N分别计算r和c,其中,u表示顶点的编号;csegment表示属性段的大小;N表示CPU的个数;
(3-3-2)通过计算得到update数据在分区内的存放位置;
定义LUMi[r][c]为LUMi的第r行第c列,将生成的update数据存放的位置定义为Pu,可以使用公式Pu=LUMi[r][c]×NCPU+c得到;
所有update存放后,每个CPU各个缓冲段内所有update的目标顶点指向同一个属性段,并且每个CPU各个缓冲段的“分区0”的update将由CPU0处理,“分区1”的update将由CPU1处理,“分区2”的update将由CPU2处理,“分区3”的update将由CPU3处理;
(3-3-3)如果Pu>Cstrip说明CPUi的update数据缓冲区内某个缓冲段溢出,暂停一切任务,记录导致溢出的缓冲段的编号,执行步骤(3-4),否则执行步骤(3-3-4),其中,Cstrip表示缓冲段的大小;;
(3-3-4)将update数据存储到该缓冲区的第r个缓冲段的第Pu个位置,然后将LUMi[r][c]加1,即更新udpate数据映射表,然后执行步骤4。
至此,某个任务完成了存储过程,并更新了update数据映射表。
(3-4)保存上下文信息,标记context-gather并执行步骤5;
在本发明实施例中,上下文信息包括context={vertex_ID,edge_SN},vertex_ID表示任务中顶点的编号,edge_SN表示所述顶点在缓冲区溢出时正在处理的边的编号。
步骤4判断本次迭代的所有任务是否已经执行完毕,是则说明所有任务完成scatter计算,执行步骤5,否则读取下一个任务,继续执行步骤3。
步骤5依次将每个update数据与对应任务顶点进行计算,直到消耗完所有update数据缓冲区的update数据,并修改update数据映射表,最后根据用户选择的算法特性决定是否添加新的任务,以便下次迭代能正常运行。本发明步骤5执行的原因有两个:一是正常情况下,执行完scatter计算便执行gather计算,二是缓冲区溢出,不得不清空update数据缓冲区以继续进行scatter计算。值得一提的是,第二点会更新还未执行scatter计算的任务对应顶点的属性值。
上述用户选择的算法特性包括:就现有的图查询算法而言,只有目标查询算法才会在迭代计算中添加新任务。不同于GraphChi和X-Stream的是,本发明会建议用户算法在gather计算的末尾执行添加任务调度的操作,添加的规则根据具体的算法而定,但是一般而言,只要update执行的目标顶点的属性值发生了更新,则需要将此顶点添加到新的任务中,以便下次迭代正常运行。添加的方式采用上述的基于位图管理的同步与异步模型相结合的混合调度策略的任务添加功能实现,也即在相应的位图调度器中添加新的任务,以便于下次迭代调度。
CPU的各个缓冲段对应相应的属性段,因此gather计算前,必须确认哪些属性段需要载入到内存进行计算。如果是scatter计算正常完成,则所有属性段依次载入内存。如果是update数据缓冲区溢出,则载入溢出的缓冲段对应的属性段。
步骤5具体包括以下子步骤:
(5-1)如果是scatter计算正常完成的情况,准备好所有update缓冲段的编号,执行步骤(5-3),否则执行步骤(5-2);
(5-2)读取导致溢出的缓冲段的编号记录,将编号按照排序,执行步骤(5-3);
(5-3)依次读取需要处理的缓冲段的编号,将编号对应的属性段从属性文件中读取到属性文件缓冲区的某个缓冲器内,随后依次读取每个需要处理的update数据,并与update数据的目标点对应的属性值进行计算,修改update数据映射表,并根据算法特性决定是否添加新的任务,以便下次迭代能正常运行;
到这一步,属性文件的某个属性段就在内存了。
使用update数据的“核内”置放与处理策略的处理update数据的功能,每个CPU依次读取每个CPU的update数据映射表中对应的缓冲段内的值。如图6(a)所示,假设现在CPU3要处理缓冲段1,CPU3首先载入属性文件的属性段1,接着读取CPU0的update数据,最后计算。不同的算法计算的规则不同,但都是通过update数据携带的属性值与目标顶点的属性值进行计算。每次处理完后,更改update映射表中对应的值。步骤(5-3)的详细子步骤示例如下:
(5-3-1)读取CPU0的update数据映射表中缓冲段1对应的CPU3的值,定位到CPU0的update数据缓冲区的缓冲段1内分区3,遍历需要处理的update数据并与相应的属性值计算,修改update数据映射表,并根据算法特性决定是否添加新的任务,以便下次迭代能正常运行;
(5-3-2)读取CPU1的update数据映射表中缓冲段1对应的CPU3的值,定位到CPU1的update数据缓冲区的缓冲段1内分区3,遍历需要处理的update数据并与相应的属性值计算,修改update数据映射表,并根据算法特性决定是否添加新的任务,以便下次迭代能正常运行;
(5-3-3)读取CPU2的update数据映射表中缓冲段1对应的CPU3的值,定位到CPU2的update数据缓冲区的缓冲段1内分区3,遍历需要处理的update数据并与相应的属性值计算,修改update数据映射表,并根据算法特性决定是否添加新的任务,以便下次迭代能正常运行;
(5-3-4)读取CPU3的update数据映射表中缓冲段1对应的CPU3的值,定位到CPU3的update数据缓冲区的缓冲段1内分区3,遍历需要处理的update数据并与相应的属性值计算,修改update数据映射表,并根据算法特性决定是否添加新的任务,以便下次迭代能正常运行。如果还需要处理其他的缓冲段,则重复(5-3-1)到(5-3-4)过程。并且每处理完一个缓冲段,将属性段写回到属性文件中。
(5-4)gather计算完成,执行步骤6。
对目标查询算法而言,步骤5最重要的工作便是添加了新的任务,该新任务存储在数据管理子模块,待到下次迭代(即回到步骤2)执行时,根据基于位图管理的同步与异步模型相结合的混合调度策略将该任务分配到各个CPU上。
步骤6判断是否标记了context-gather,是则恢复现场,包括读取步骤(3-4)保存的上下文信息,由数据管理子模块实现,解析之后将任务调度需要的数据传递给算法调度子模块,于是***便恢复到之前的状态执行,然后执行步骤3,否则执行步骤7。
上述步骤3到步骤6也称为一个子迭代,由上述步骤可知,假设某次迭代从顶点0执行到顶点100,在顶点50的时候,发生update缓冲区溢出,执行所述流程处理后,发现有些大于50的顶点的属性值发生了更新,于是在后面的执行中,这些发生了属性值更新的顶点便提前将更新的值传递出去,但这些顶点本该在下一次迭代中才会将最新的传递出去。该过程使得基于位图管理的同步与异步模型相结合的混合型调度策略实现了异步更新,使基于同步模型的调度策略实现了异步模型的功能,保证高并发性的同时减少了迭代次数。
在有限内存机器上对特大的数据执行算法时,会频繁的发生update数据缓冲区溢出,也即有大量的子迭代产生,update数据的“核内”置放与处理策略虽然能一定程度上减少update数据的I/O操作量,但是太多次属性文件的属性段读写操作同样会造成I/O操作太频繁。但是根据本发明实施过程中不断的实验证明和真实世界图数据分布的特殊性,发现子迭代发生的原因大多是某几个缓冲段溢出,而不是所有缓冲段溢出,因此update数据的“核内”置放与处理策略包含了如下优化机制:
首先,如果多个CPU的同一个缓冲段溢出,则将该缓冲段对应的属性文件属性段载入到内存,进行gather计算,之后写回;
其次,如果某个CPU的某个属性段的利用率大于某个阈值(假设为80%),同样按照同上的方式处理;
再者,如果本次gather计算发生在迭代的末尾,则将所有文件属性段依次载入进行计算,之后写回;
最后,采用了LRU算法辅助update数据缓冲区的双缓冲器的工作。
如果检测到迭代只有很少一部分update数据需要处理,则使用虚拟内存映射的方式直接写回属性文件,而不用担心内存页面颠簸问题。针对这种现象,本发明同样定义了一个阈值(2%),当某个缓冲段的利用率小于此值时,采用上述的虚拟内存映射直接写回方法。每完成一次迭代后,属性文件将会被重新映射,以便下次scatter计算能使用最新的值。
如前所述,跨越式的方式分配任务后,各个CPU自动的执行scatter计算,衡量计算的均衡性就是属性段内分区的均衡性。如图6(b)所示,各个CPU会并发的读取对应属性段的相应分区,而这些分区都是在scatter计算中填充的,因此分区的平衡性不仅导致了gather计算的平衡性,也会影响scatter计算时各个CPU的平衡性,也就是执行太快的CPU会等待太慢的CPU。图7所示为本发明基于随机和连续磁盘访问的高速核外图处理方法在执行SpMV算法时update数据缓冲区的利用率和分区之间的update数据数量的标准差变化图,其中横坐标表示子迭代次数,左边的纵坐标表示分区之间update数据数量的相对标准差,右边的纵坐标表示update数据缓冲区的利用率。可以发现,标准差一直维持在10%以下,说明跨越式任务划分方法非常高效。而update缓冲区的利用率一直维持在90%以上,说明某个缓冲段溢出时,其他的缓冲段也将要溢出,间接地说明基于位图管理的同步与异步模型相结合的混合型调度策略分配的任务是非常均衡的,并且采用update数据的“核内”置放与处理策略后,update数据的分布也比较均衡的。
步骤7判断算法是否收敛,是则流程结束,否则执行步骤2。
上述步骤2到步骤7也称一次迭代,迭代的工作便是完成所有任务的scatter计算和gather计算,并能确定下一次迭代需要执行的任务。
本发明采用上述方案,在性能上基本优于现有的基于磁盘的图处理***,具体如下:
在固态硬盘(SSD)和硬盘(HDD)上,执行算法本比GraphChi和X-Stream最多快25倍;对比TurboGraph,除了SSD上执行PageRank算法,其他的代表性算法最多比TurboGraph快3.8倍;这是因为目标查询算法会遭受更多的磁盘随机读写和update数据,而本发明通过使用上述的几个机制,达到提高性能的目标,所以要优于TurboGraph;全局算法由于局部性好,并且SSD上的随机访问带宽比HDD要好许多,所以得到不错的性能。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于随机和连续磁盘访问的高速核外图处理方法,其特征在于,包括:
步骤1初始化核外数据,并根据用户输入的参数与选择的算法进行***初始化,其中,所述核外数据为经过预处理后的二进制文件;
步骤2判断本次迭代是否有任务需要执行,是则根据公式CID=VID/N将所有任务分配到对应的CPU上,其中,CID表示被分配到的CPU的编号;VID表示任务顶点的编号;N表示CPU的个数;然后执行步骤3,否则流程结束;
步骤3各个CPU根据分配的任务,读取任务顶点编号,索引该任务顶点依赖的核外数据,并按照用户算法执行scatter计算,每次执行一个任务,将计算结果存储在update数据缓冲区,如果所述update数据缓冲区溢出,则保存上下文信息,标记context-gather并执行步骤5,否则执行步骤4;
步骤4判断本次迭代的所有任务是否已经执行完毕,是则执行步骤5,否则读取下一个任务,继续执行所述步骤3;
步骤5读取溢出的update数据缓冲区内的update数据,依次将每个update数据与对应任务顶点进行计算,并修改update数据映射表,直到消耗完所述溢出的update数据缓冲区内所有update数据,然后执行步骤6;
步骤6判断是否标记了context-gather,是则读取所述步骤3保存的所述上下文信息,使***便恢复到之前的状态执行,然后执行步骤3,否则执行步骤7;
步骤7判断算法是否收敛,是则流程结束,否则执行步骤2。
2.如权利要求1所述的方法,其特征在于,所述步骤1中上述核外数据包括出边索引文件和出边文件、入边索引文件和入边文件以及属性文件,其中,所述出边索引文件按照顺序存储了每个顶点在所述出边文件中的索引,所述出边文件存储了所有顶点的出边,拥有相应的可选的权值;所述入边索引文件和入边文件均为可选文件,为某些回溯算法特有;所述属性文件用于存储每个顶点的属性值。
3.如权利要求1所述的方法,其特征在于,所述步骤1中***初始化时根据用户输入参数中预分配的静态内存大小,将预分配的静态内存划分为两部分,一部分划分为属性文件缓冲区,剩下的划分为局部数据区;将所述属性文件缓冲区两等分,形成一个双缓冲器,以属性文件大小除以缓冲器的大小得到属性文件被分割成几个属性段,并得到每个属性段的大小和顶点的个数;根据属性段的个数将所述update数据缓冲区等分成同样个数的缓冲段,每个缓冲段内部再根据CPU个数等分成多个分区,其中缓冲段和属性段一一对应。
4.如权利要求1-3中任一项所述的方法,其特征在于,所述步骤3包括以下子步骤:
(3-1)各个CPU根据分配的任务,读取任务顶点的属性值以及该任务顶点对应的出边或入边数据;
(3-2)沿着该任务顶点的出边或入边,执行scatter计算,并生成update数据;
(3-3)判断所述update数据缓冲区是否溢出,如果是则暂停一切任务,记录导致溢出的缓冲段的编号,执行步骤(3-4),如果不溢出则将update数据存放到所述update数据缓冲区相应的缓冲段内对应的分区内,并修改相应的update数据映射表,然后执行所述步骤4;
(3-4)保存上下文信息,标记context-gather并执行所述步骤5。
5.如权利要求4所述的方法,其特征在于,所述步骤(3-1)包括以下子步骤:
(3-1-1)读取顶点的属性值,如果属性段的个数为1,说明属性文件可以完全装入内存,直接在内存读取相应顶点的属性值,并执行步骤(3-1-3),否则执行步骤(3-1-2);
(3-1-2)通过I/O操作子模块使用***的虚拟内存***读取所需的属性值;
(3-1-3)通过I/O操作子模块使用***的虚拟内存***读取顶点所需的出边或入边数据。
(3-1-4)等待数据读取到内存,执行步骤(3-2)。
6.如权利要求4所述的方法,其特征在于,所述步骤(3-3)包括以下子步骤:
(3-3-1)使用公式r=u/Csegment,c=u%N分别计算冲段编号r和分区编号c,其中,u表示update数据的目标顶点的编号;Csegment表示属性段的大小;N表示CPU的个数;
(3-3-2)定义LUMi[r][c]为LUMi的第r行第c列,其中,LUMi表示CPUi的局部映射表,i为CPU编号,将生成的update数据存放的位置定义为Pu,使用公式PU=LUMi[r][c]×MCPU+c得到update数据在分区内的存放位置;
(3-3-3)如果Pu>Cstrip则暂停一切任务,记录导致溢出的缓冲段的编号,执行所述步骤(3-4),否则执行步骤(3-3-4),其中,Cstrip表示缓冲段的大小;
(3-3-4)将update数据存储到该缓冲区的第r个缓冲段的第Pu个位置,将LUMi[r][c]加1,然后执行所述步骤4。
7.如权利要求1-3中任一项所述的方法,其特征在于,所述步骤5包括以下子步骤:
(5-1)如果是scatter计算正常完成的情况,准备好所有update缓冲段的编号,执行步骤(5-3),否则执行步骤(5-2);
(5-2)读取导致溢出的缓冲段的编号记录,将编号按照排序,执行步骤(5-3);
(5-3)依次读取需要处理的缓冲段的编号,将编号对应的属性段从属性文件中读取到属性文件缓冲区的某个缓冲器内,随后依次读取每个需要处理的update数据,并与update数据的目标点对应的属性值进行计算,修改update数据映射表,并根据算法特性决定是否添加新的任务,然后执行步骤6。
8.一种基于随机和连续磁盘访问的高速核外图处理***,其特征在于,包括算法模块、逻辑接口模块以及核心引擎模块,其中:
所述算法模块用于根据用户的选择调用用户算法;
所述逻辑接口模块用于提供API,还用于分析所述算法模块的操作请求,并通过逻辑转换功能,将所述算法模块的操作请求转化为对所述核心引擎模块的操作请求,并将转化的操作请求传递到所述核心引擎模块;
所述核心引擎模块包含***配置子模块、数据管理子模块、算法调度子模块和I/O操作子模块,其中,所述***配置子模块用于***初始化,所述算法调度子模块用于任务处理与执行,所述I/O操作子模块用于读写磁盘数据,所述数据管理子模块用于管理内存数据并负责相关的计算结果操作,所述核心引擎分析根据所述逻辑接口模块传来的操作请求,调用相应的子模块进行处理,处理完成之后将结果返回至所述逻辑接口模块,由所述逻辑接口模块的逻辑转换功能处理后,返回给所述算法模块,最后由所述算法模块内的用户算法进行处理。
9.如权利要求8所述的基于随机和连续磁盘访问的高速核外图处理***,其特征在于,所述数据管理子模块根据静态分配内存大小参数在内存划分一块区域,将整块区域分为局部数据区和属性文件缓冲区,所述局部数据区用于管理每个CPU的局部数据,所述属性文件缓冲区用于缓冲属性文件,其中,所述局部数据区划分为头表、update数据映射表以及可选的位图调度器,所述头表用于存放各种数据结构;所述update数据映射表用于管理存放scatter计算过程中生成的update数据的update数据缓冲区;所述位图调度器只有在目标查询算法才启动并根据顶点个数初始化。
10.如权利要求9所述的基于随机和连续磁盘访问的高速核外图处理***,其特征在于,所述***配置子模块在***初始化时自动执行用户所编写的初始化函数,如果是目标查询算法,则根据用户定义的规则产生下一次迭代需要执行的任务,并存储在所述位图调度器内;如果是全局查询算法,则在下一次迭代中执行所有任务,通过所述头表中的数据结构保存,并记录每次任务的起始顶点和结束顶点,方便任务执行时暂停和继续。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510206124.XA CN104778077B (zh) | 2015-04-27 | 2015-04-27 | 基于随机和连续磁盘访问的高速核外图处理方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510206124.XA CN104778077B (zh) | 2015-04-27 | 2015-04-27 | 基于随机和连续磁盘访问的高速核外图处理方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104778077A true CN104778077A (zh) | 2015-07-15 |
CN104778077B CN104778077B (zh) | 2018-03-27 |
Family
ID=53619561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510206124.XA Active CN104778077B (zh) | 2015-04-27 | 2015-04-27 | 基于随机和连续磁盘访问的高速核外图处理方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104778077B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107256527A (zh) * | 2017-04-18 | 2017-10-17 | 上海高顿教育培训有限公司 | 一种基于动态缓存的位图回溯方法 |
CN107679133A (zh) * | 2017-09-22 | 2018-02-09 | 电子科技大学 | 一种实用于海量实时pmu数据的挖掘方法 |
CN107992358A (zh) * | 2017-11-13 | 2018-05-04 | 华中科技大学 | 一种适用于核外图处理***的异步io执行方法及*** |
CN108536492A (zh) * | 2018-04-08 | 2018-09-14 | 武汉斗鱼网络科技有限公司 | 一种直播间属性信息获取方法、装置、设备及存储介质 |
CN109785224A (zh) * | 2019-01-29 | 2019-05-21 | 华中科技大学 | 一种基于fpga的图数据处理方法和*** |
CN112000296A (zh) * | 2020-08-28 | 2020-11-27 | 北京计算机技术及应用研究所 | 一种全闪存阵列中的性能优化*** |
CN112667562A (zh) * | 2021-01-22 | 2021-04-16 | 北京工业大学 | 一种基于cpu-fpga的大规模图上的随机游走异构计算*** |
CN113722320A (zh) * | 2021-08-18 | 2021-11-30 | 南京航空航天大学 | 一种基于并行的图数据索引的持久化方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1304099A (zh) * | 1999-12-22 | 2001-07-18 | 国际商业机器公司 | 对本地保持的数据提供访问控制的保密机制 |
US20040225378A1 (en) * | 2001-07-02 | 2004-11-11 | Siemens Aktiengesellschaft | Method for processing data using external and internal identifiers, and associated system |
CN102096596A (zh) * | 2010-11-29 | 2011-06-15 | 华中科技大学 | 一种基于虚拟机内存模板的云计算服务Cache*** |
CN102112967A (zh) * | 2008-08-04 | 2011-06-29 | 富士通株式会社 | 多处理器***、多处理器***用管理装置、以及记录有多处理器***用管理程序的计算机可读的记录介质 |
CN102855333A (zh) * | 2012-09-27 | 2013-01-02 | 南京大学 | 一种基于组推荐的服务选取***及其选取方法 |
-
2015
- 2015-04-27 CN CN201510206124.XA patent/CN104778077B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1304099A (zh) * | 1999-12-22 | 2001-07-18 | 国际商业机器公司 | 对本地保持的数据提供访问控制的保密机制 |
US20040225378A1 (en) * | 2001-07-02 | 2004-11-11 | Siemens Aktiengesellschaft | Method for processing data using external and internal identifiers, and associated system |
CN102112967A (zh) * | 2008-08-04 | 2011-06-29 | 富士通株式会社 | 多处理器***、多处理器***用管理装置、以及记录有多处理器***用管理程序的计算机可读的记录介质 |
CN102096596A (zh) * | 2010-11-29 | 2011-06-15 | 华中科技大学 | 一种基于虚拟机内存模板的云计算服务Cache*** |
CN102855333A (zh) * | 2012-09-27 | 2013-01-02 | 南京大学 | 一种基于组推荐的服务选取***及其选取方法 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107256527A (zh) * | 2017-04-18 | 2017-10-17 | 上海高顿教育培训有限公司 | 一种基于动态缓存的位图回溯方法 |
CN107256527B (zh) * | 2017-04-18 | 2020-10-02 | 上海高顿教育培训有限公司 | 一种基于动态缓存的位图回溯方法 |
CN107679133A (zh) * | 2017-09-22 | 2018-02-09 | 电子科技大学 | 一种实用于海量实时pmu数据的挖掘方法 |
CN107679133B (zh) * | 2017-09-22 | 2020-01-17 | 电子科技大学 | 一种实用于海量实时pmu数据的挖掘方法 |
CN107992358B (zh) * | 2017-11-13 | 2020-05-19 | 华中科技大学 | 一种适用于核外图处理***的异步io执行方法及*** |
CN107992358A (zh) * | 2017-11-13 | 2018-05-04 | 华中科技大学 | 一种适用于核外图处理***的异步io执行方法及*** |
CN108536492A (zh) * | 2018-04-08 | 2018-09-14 | 武汉斗鱼网络科技有限公司 | 一种直播间属性信息获取方法、装置、设备及存储介质 |
CN108536492B (zh) * | 2018-04-08 | 2021-09-07 | 武汉斗鱼网络科技有限公司 | 一种直播间属性信息获取方法、装置、设备及存储介质 |
CN109785224A (zh) * | 2019-01-29 | 2019-05-21 | 华中科技大学 | 一种基于fpga的图数据处理方法和*** |
CN112000296A (zh) * | 2020-08-28 | 2020-11-27 | 北京计算机技术及应用研究所 | 一种全闪存阵列中的性能优化*** |
CN112000296B (zh) * | 2020-08-28 | 2024-04-09 | 北京计算机技术及应用研究所 | 一种全闪存阵列中的性能优化*** |
CN112667562A (zh) * | 2021-01-22 | 2021-04-16 | 北京工业大学 | 一种基于cpu-fpga的大规模图上的随机游走异构计算*** |
CN112667562B (zh) * | 2021-01-22 | 2024-04-05 | 北京工业大学 | 一种基于cpu-fpga的大规模图上的随机游走异构计算*** |
CN113722320A (zh) * | 2021-08-18 | 2021-11-30 | 南京航空航天大学 | 一种基于并行的图数据索引的持久化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104778077B (zh) | 2018-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104778077A (zh) | 基于随机和连续磁盘访问的高速核外图处理方法及*** | |
CN106991011B (zh) | 基于cpu多线程与gpu多粒度并行及协同优化的方法 | |
US5852826A (en) | Parallel merge sort method and apparatus | |
Ko et al. | TurboGraph++ A scalable and fast graph analytics system | |
US8140585B2 (en) | Method and apparatus for partitioning and sorting a data set on a multi-processor system | |
CN104508639B (zh) | 使用一致性域表的一致性管理 | |
CN104133661A (zh) | 基于列存储的多核并行哈希分区优化方法 | |
Yang et al. | Huge: An efficient and scalable subgraph enumeration system | |
CN109522428B (zh) | 一种基于索引定位的图计算***的外存访问方法 | |
CN102799679B (zh) | 基于Hadoop的海量空间数据索引更新***及方法 | |
CN110874271B (zh) | 一种海量建筑图斑特征快速计算方法及*** | |
US20100094870A1 (en) | Method for massively parallel multi-core text indexing | |
EP3391214A1 (en) | Processing data using dynamic partitioning | |
CN104361113A (zh) | 一种内存-闪存混合存储模式下的olap查询优化方法 | |
US20140115291A1 (en) | Numa optimization for garbage collection of multi-threaded applications | |
CN102708009A (zh) | 一种基于cuda实现多任务共享gpu的方法 | |
CN106406762A (zh) | 一种重复数据删除方法及装置 | |
CN113095022A (zh) | 门级电路的并行仿真处理方法、计算机可读存储介质 | |
CN106033442A (zh) | 一种基于共享内存体系结构的并行广度优先搜索方法 | |
CN112000845B (zh) | 一种基于gpu加速的超空间哈希索引方法 | |
Feng et al. | HQ-Tree: A distributed spatial index based on Hadoop | |
CN115510134A (zh) | 面向图-关系混合存储数据库的数据快速装载方法及*** | |
Herter et al. | CAMA: Cache-aware memory allocation for WCET analysis | |
US20210149746A1 (en) | Method, System, Computer Readable Medium, and Device for Scheduling Computational Operation Based on Graph Data | |
US11176631B1 (en) | GPU-based parallel indexing for concurrent spatial query |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |