CN115809243A - 基于b树的重叠社区发现方法、装置、设备及存储介质 - Google Patents
基于b树的重叠社区发现方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115809243A CN115809243A CN202211449751.2A CN202211449751A CN115809243A CN 115809243 A CN115809243 A CN 115809243A CN 202211449751 A CN202211449751 A CN 202211449751A CN 115809243 A CN115809243 A CN 115809243A
- Authority
- CN
- China
- Prior art keywords
- tree
- graph
- target
- community
- vertex
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种基于B树的重叠社区发现方法、装置、设备及存储介质,涉及计算机软件与理论技术领域,包括基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;将模块度的变化量大于0的邻居图顶点加入至所述目标社区。本申请通过B树来组织图数据,可有效消除计算过程中的分支分歧,并改善因非规则访存而导致的访存效率差的问题,提高了GPU应用于重叠社区检测时的计算能力、计算效率以及访存效率。
Description
技术领域
本申请涉及计算机软件与理论技术领域,特别涉及一种基于B树的重叠社区发现方法、装置、设备及存储介质。
背景技术
社区检测算法主要包含离散社区检测算法和重叠社区检测算法,在离散社区检测算法中网络图数据顶点被划分到唯一一个社区中,而在重叠社区检测算法中,一个顶点可以同时隶属于多个社区中。其中,社区检测的早期研究工作主要集中于离散社区检测,不过在真实网络图数据中,一个顶点在不同的场景下可能具有不同的身份,也就意味着同一个顶点可以同时属于多个社区,进而导致不同社区之间的顶点存在“重叠”。例如,在社会关系网络中,根据职业关系、亲情关系和同学关系等不同维度进行划分时,一个人可能同时属于多个社区;在学术论文引用关系网络中,一个研究者可能同时关注计算机体系结构和网络安全方面等的研究。因此,相比于传统的离散社区而言,重叠社区能够更加真实、全面地反映复杂网络的基本结构,重叠顶点作为不同社区之间的“桥梁”一定程度上反映了不同社区之间的一些潜在的联系,其比普通顶点具有更高的研究价值。
为了实现大规模图数据上的重叠社区检测,GPU(Graphics Processing Unit,图形处理器)被广泛应用于重叠社区检测。不过,由于在重叠社区的检测过程中存在大量的分支分歧操作,使得GPU上的重叠社区检测算法执行过程中存在大量的线程等待,进而严重限制了GPU的计算能力和计算效率;此外,GPU只有在规则访存的数据模型中才能达到其性能峰值,但是在重叠社区检测过程中却存在大量的非规则访存,从而严重影响了GPU的访存效率。
发明内容
本申请提供一种基于B树的重叠社区发现方法、装置、设备及存储介质,以解决相关技术中由于重叠社区检测中存在分支分歧操作以及非规则访存而导致的GPU计算能力、计算效率及访存效率差的问题。
第一方面,提供了一种基于B树的重叠社区发现方法,包括以下步骤:
基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;
当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;
分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;
将模块度的变化量大于0的邻居图顶点加入至所述目标社区。
一些实施例中,所述将目标社区以外的邻居图顶点存储于B树中,包括:
将所述邻居图顶点存储于B树中的节点上;
当B树中的其中一个目标节点上的邻居图顶点数量达到N-2个时,对所述目标节点进行***得到新节点,以供其他邻居图顶点的存储,其中,N表示B树的路数。
一些实施例中,所述方法还包括:
当所述目标节点的父节点上的邻居图顶点数量达到N-1个时,在所述父节点下新增至少一个子节点,以供其他邻居图顶点的存储。
一些实施例中,在所述基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中的步骤之前,还包括:
设置两缓冲区,使得CPU上的目标社区内的图顶点和目标社区外的邻居图顶点加载至GPU的动作在一缓冲区内完成,GPU上的目标社区内的图顶点读取至查找数组以及目标社区外的邻居图顶点读取至B树中的动作在另一缓冲区内完成。
一些实施例中,所述B树的路数为32路。
第二方面,提供了一种基于B树的重叠社区发现装置,包括:
存储单元,其用于基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;
访问单元,其用于当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;
计算单元,其用于分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;
发现单元,其用于将模块度的变化量大于0的邻居图顶点加入至所述目标社区。
一些实施例中,所述存储单元具体用于:
将所述邻居图顶点存储于B树中的节点上;
当B树中的其中一个目标节点上的邻居图顶点数量达到N-2个时,对所述目标节点进行***得到新节点,以供其他邻居图顶点的存储,其中,N表示B树的路数。
一些实施例中,所述存储单元具体还用于:
当所述目标节点的父节点上的邻居图顶点数量达到N-1个时,在所述父节点下新增至少一个子节点,以供其他邻居图顶点的存储。
第三方面,提供了一种基于B树的重叠社区发现设备,包括:存储器和处理器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行,以实现前述的基于B树的重叠社区发现方法。
第四方面,提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,当所述计算机程序被处理器执行时,以实现前述的基于B树的重叠社区发现方法。
本申请提供的技术方案带来的有益效果包括:可有效提高GPU应用于重叠社区检测时的计算能力、计算效率以及访存效率。
本申请提供了一种基于B树的重叠社区发现方法、装置、设备及存储介质,包括基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;将模块度的变化量大于0的邻居图顶点加入至所述目标社区。本申请充分考虑了GPU上内存空间的大小和高度并行的特点,通过B树来组织图数据,消除了计算过程中的分支分歧,且由于B树是一种平衡树结构,其上的节点包含了多个邻居图顶点,使得一个线程组通过一次读取就可以获取B树节点的完整内容,进而可以有效减少访存次数,提高GPU缓存利用率的同时降低访存,有效改善了因非规则访存而导致的访存效率差的问题。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种基于B树的重叠社区发现方法的流程示意图;
图2为现有技术中GPU上内存分支映射的示意图;
图3为现有技术中节点***操作的示意图;
图4为本申请实施例提供的社区c1的邻居图顶点及其B树表示的示意图;
图5为本申请实施例提供的一种基于B树的重叠社区发现设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供了一种基于B树的重叠社区发现方法、装置、设备及存储介质,其能解决相关技术中由于重叠社区检测中存在分支分歧操作以及非规则访存而导致的GPU计算能力、计算效率及访存效率差的问题。
图1是本申请实施例提供的一种基于B树的重叠社区发现方法,包括以下步骤:
步骤S10:基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中,其中,所述B树的路数为32路;
示范性的,需要理解的是,GPU虽然被广泛应用于加速各种图数据处理算法,但是当前针对重叠社区检测算法的研究主要集中于串行算法研究以及基于多核CPU的并行算法研究,因此基于GPU的重叠社区检测存在一系列的研究挑战。
首先,重叠社区检测过程中存在大量的分支分歧操作,使得GPU上重叠社区检测算法执行过程中存在大量的线程等待,将严重限制GPU的计算能力、吞吐和内存带宽利用率等。其中,在进行重叠社区检测时,顶点划分的过程中包含了大量的分支操作,而分支操作的主要内容为确认被划入的顶点是合理的,其主要形式为“ifthen movevertex intoc2”,表示社区c1的模块度(模块度用于度量重叠社区划分的准确性),表示社区c2的模块度,由此可见,当前重叠社区检测算法中需要使用大量的“IF-THEN”语句来实现对顶点的移动。此外,参见图2所示,假设Warp(即线程组)的大小为4,当数组X、Y和Z加载到连续的内存区域时,在计算过程中branch 2的计算需依赖于branch 1的计算结果A,即branch 2仅能在branch 1执行结束之后开始;而且,如果执行branch 1和branch 2的线程处于同一线程组,那么所有的线程将访问同一个内存区域,这一内存访问模式将会导致线程的空内存操作,同时还会导致需多次内存访问方可获取活跃线程所需的数据。因此,避免分支分歧将会极大提升GPU在重叠社区检测的执行效率。
另外,由于不同社区的规模差异巨大,因此不同社区检测过程中的计算量差异巨大,其模块度的计算速度也各不相同,使得负责小规模社区的线程/线程组将先于负责大规模社区的线程/线程组结束计算过程。但是,在同一个迭代轮次中,负责规模较小社区的线程需要开始计算模块度,而负责规模较大社区的线程则需要执行顶点移动操作,这一矛盾将会导致计算过程中的访存冲突,进而会限制GPU效率,且根据实验结果显示GPU上分支效率仅为66.89%,因此大量的分支分歧操作也将极大地降低线程的利用率。
其次,GPU只有在规则访存的数据模型才能达到其性能峰值,即仅在规则访存模式下方能提高访存带宽利用率,也就是一个线程组中的所有线程访问一个连续的内存区域,并且每一个线程都能获取到该线程所需的数据,而在这种规则的访存模式下,一个线程组内的全部线程仅需一次访存即可获取全部所需数据。但是,图数据由于其复杂的关联关系,导致访存过程中所需数据散落在多个内存片段,这一现象使得一个线程组需要多次访存方可获取所有线程所需的数据,由此可见,在重叠社区检测过程中存在大量的非规则访存,其严重影响了GPU的访存效率。
因此为了解决因分支分歧现象导致的并行度问题以及非规则访存导致的访存效率低的问题,本实施例提出基于B树的重叠社区检测算法Lugger,将通过B树的支持并发查询来提升算法整体的并行度,并通过B树存储结构来管理GPU上的图数据,将B树节点映射到GPU的cache line(缓存行),以提高GPU缓存利用率的同时降低访存开销。
可以理解的是,B树作为一种多路平衡查找树,其节点中的所有元素都是按序排列并且所有的叶子节点都处于同一层次;而非叶子节点的中间元素作为分割点(pivots)将其子节点划分成多个子树,所有记录值(value)都存储在叶子节点,并且每一个节点中包含若干个指向其子节点的指针(叶子节点的指针为空),且在B树遍历过程中,主要依据节点间的指针进行搜索。对于一个N路的B树来说,除根节点外,任意节点的子节点数量不超过N-1个,并且最少包含B/2个子节点。
具体的,本实施例将随机选取若干顶点作为不同社区的代表,并以选取的顶点及其邻居顶点作为算法的输入。其中,在算法执行过程中,Lugger将目标社区内的图顶点作为lookup数组(即查找数组),并将非目标社区内的邻居图顶点采用B树的结构来进行管理,以消除计算过程中的分支分歧。而为了提高GPU内存吞吐,本实施例中的Lugger将采用32路平衡树(即N=32)来组织非目标社区内的邻居顶点;通过Lugger算法的这一设置,一个B树节点中将包含至多31个图顶点,一个线程组通过一次读取就可以获取B树节点的完整内容,进而可以有效减少算法执行过程中的访存次数;且这一设置将使得cache(高速缓冲存储器)可以容纳一个或多个B树节点,从而可以减少算法执行过程中的内存load(即加载或装载)操作的次数。另一方面,由于B树是一种平衡树结构,并且所有的记录值都存储在叶子节点,其一定程度上可以改善非规则访存的问题,且基于B树的线程分配可以避免因顶点度数差异带来的负载不均的问题。
进一步的,在所述基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中的步骤之前,还包括:
设置两缓冲区,使得CPU上的目标社区内的图顶点和目标社区外的邻居图顶点加载至GPU的动作在一缓冲区内完成,GPU上的目标社区内的图顶点读取至查找数组以及目标社区外的邻居图顶点读取至B树中的动作在另一缓冲区内完成。
示范性的,应当理解的是,在当前的图数据应用中,除了最基本的图数据格式之外,还需要存储大量的临时变量,临时变量的存储开销将进一步加剧GPU内存空间的压力。因此,本实施例将采用CSR(Compressed Sparse Row,稀疏矩阵压缩格式,其采用一种紧凑的存储方式,所占用的存储空间最少)来初始化图数据,并将目标社区外的邻居顶点存储到B树结构中。由于B树结构遍历有序,本实施例将按照B树遍历顺序将其节点升序存储到连续的内存空间,而基于这一存储结构,本实施例将在主机(即CPU)与GPU通信过程中采用GPU预取技术加速内存访问。
GPU预取是处理主机到GPU数据传输的一个重要技术,本实施例将在Lugger中通过数据预取技术来实现大规模图数据的传输。具体的,本实施例的Lugger的数据预取中,将分别针对数据读取和数据装载设置单独的缓冲区,每一个缓冲区独立工作,即在一个缓冲区内执行将CPU上的目标社区内的图顶点和目标社区外的邻居图顶点加载至GPU的动作,而在另一个缓冲区内执行将GPU上的目标社区内的图顶点读取至查找数组以及目标社区外的邻居图顶点读取至B树中的动作,进而使得数据读取工作不受数据加载工作的影响,从而保证候选活跃数据的加载工作可以和当前活跃顶点的计算任务进行重叠,减少了因数据传输而导致的流水线中断。
进一步的,所述将目标社区以外的邻居图顶点存储于B树中,包括:
将所述邻居图顶点存储于B树中的节点上;
当B树中的其中一个目标节点上的邻居图顶点数量达到N-2个时,对所述目标节点进行***得到新节点,以供其他邻居图顶点的存储,其中,N表示B树的路数。
示范性的,需要理解的是,由于B树中任意一个节点最多只能有N个儿子节点,且其中的元素数量不超过N-1。因此,当节点中包含多于N-1个元素时需要进行节点***。现有技术中往往是采用原子操作的方式来完成节点***,从而保证节点***过程中的数据一致性。不过,在基于原子操作的节点***过程中,需要***的节点所在的当前层和其父节点所在层的节点都需要被加锁,而大量的锁操作会严重拖慢B树建立的速度;另一方面,当***节点的父节点本身存储N-1个元素时,当前节点的***操作会向上传递导致其父节点需要进一步***,这种节点***的传递会导致更多的节点需要被加锁,并且***节点的子节点处于空闲状态,而这种情况将会进一步降低GPU性能。
例如,在图3所示的3路平衡树中***节点10会导致节点(7,9)进行一次***,由于节点(7,9)的父节点中已有(4,6)两个元素,因此节点(7,9)***将会导致节点(4,6)也进行一次***,以致包含顶点4、6、7和9的节点都会被加锁,同时包含顶点3和5的节点则处于空闲状态,直到节点***操作结束。
因此,本实施例为了尽可能降低节点***操作带来的性能开销,提出一种激进的节点***策略,而这一策略将节点***过程提前到遍历过程:当节点中包含N-2个元素时(即节点尚未存满元素)就开始节点的***,进而使得所有的节点***被限制在当前层进行,同时也消除了节点***操作传递的可能性,从而使得需要***节点的父节点上的锁可以被移除,以提升GPU性能和B树创建的速度。
进一步的,所述方法还包括:
当所述目标节点的父节点上的邻居图顶点数量达到N-1个时,在所述父节点下新增至少一个子节点,以供其他邻居图顶点的存储。
示范性的,在本实施例中,当前节点的父节点中包含N-1个元素时,将通过重启机制给父节点添加新的儿子节点的方式来避免父节点的***导致的子树的调整。虽然重启机制将一定程度上增加子节点建立的开销,但是整个B树建立过程中一共存在不超过(2logNM)次重启操作(假设每一层都存在一个向上传递的***节点),M表示B树的节点数量,且重启机制不会增加树的高度,而传统的父节点***操作将会导致树的高度变化。由此可见,本实施例通过重启机制和激进的节点***机制,可以降低节点***过程中原子操作和锁操作带来的开销,同时重启机制可以在一定程度上增加算法的并行度。
步骤S20:当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;
示范性的,应当理解的是,目标社区内的所有图顶点都被组织成一个lookup数组,而由于B树的节点存储在连续的内存空间中,因此在访问lookup数组时可以将其映射到连续的内存区域,从而实现lookup数组的连续访问。其中,可以并行访问lookup数组中的所有图顶点,也可以串行访问lookup数组中的所有图顶点,具体可以根据实际需求确定。当lookup数组中的某个图顶点被访问时,将并行搜索B树中的所有元素(即邻居图顶点),并逐步计算非目标社区内的邻居顶点是否可以被加入目标社区。比如,参见图4所示,图顶点1和图顶点2构成初始社区c1,社区c1内的元素采用数组的形式进行存储;而社区c1的邻居图顶点包括3、4、5、6、7、9、10和11存储于B树中,该B树结构为3路平衡树,Lugger将从根节点开始并行搜索B树中的各个邻居图顶点。
步骤S30:分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;
示范性的,本实施例中,将会计算每一个邻居图顶点加入到目标社区之后带来的模块度的变化,从而动态调整顶点划分的过程,达到发现重叠社区的目的。具体的,可以通过以下公式计算得到邻居图顶点v加入至目标社区Ci后对应的模块度EQ:
式中,m表示边的数量,Ci表示第i个社区,v表示可能需要加入至Ci的邻居图顶点,w表示Ci内的图顶点,Ov表示邻居图顶点v所归属社区的数量(即已经发现的社区的数量),Ow表示图顶点w所归属社区的数量,Avw表示图G的邻接矩阵,Avw=1表示邻居图顶点v和图顶点w之间有一条边,Avw=0表示邻居图顶点v和图顶点w之间没有边,kv表示邻居图顶点v的度,即邻居图顶点v连出去的边的条数,kw表示图顶点w的度。
在计算得到邻居图顶点v的模块度EQ后,就需要根据该模块度EQ和邻居图顶点v未加入至目标社区Ci之前的模块度计算得到邻居图顶点v加入至目标社区Ci后对应的模块度的变化量ΔEQ,通过ΔEQ的大小即可判断是否需要将邻居图顶点v加入至目标社区Ci。
步骤S40:将模块度的变化量大于0的邻居图顶点加入至所述目标社区。
示范性的,在本实施例中,当检测到ΔEQ>0时,则判定需要将邻居图顶点v加入至目标社区Ci,而若ΔEQ≤0时,则判定不需要将邻居图顶点v加入至目标社区Ci,进而实现重叠社区的发现。
其中,Lugger算法如下所示:
具体的,在本实施例将结合以上Lugger算法阐释重叠社区的发现原理:随机选取图G中的若干图顶点作为不同社区的代表,并以选取的图顶点及其邻居图顶点作为算法的输入;在算法执行过程中,Lugger将社区Ci内的图顶点作为lookup数组,并将非社区Ci内的邻居图顶点采用B树的结构来进行管理,且算法在执行过程中从根节点并行搜索B树中的元素,并逐步计算非社区Ci内的邻居图顶点是否可以被加入社区Ci,即计算每一个邻居图顶点加入社区Ci之后带来的模块度的变化,当且仅当ΔEQ>0时,算法将对应的邻居图顶点加入到社区Ci中。其中,B树建立和更新的时间复杂度分别为O(Mlog32(M))以及O(log32(M)),识别与收集非重叠社区的时间复杂度为因此,算法时间复杂度为
此外,本实施例还能实现一种以Warp为中心的线程组织策略来实现GPU上的负载均衡:根据B树节点的度数差异来分配不同数量的Warp,由于每个Warp中包含32个线程,因此本实施例可分配个Warp来实现计算过程中的负载均衡。
综上,本实施例充分考虑了GPU上内存空间的大小和高度并行的特点,通过B树来组织图数据,消除了计算过程中的分支分歧,且由于B树是一种平衡树结构,其上的节点包含了多个邻居图顶点,使得一个线程组通过一次读取就可以获取B树节点的完整内容,进而可以有效减少访存次数,提高GPU缓存利用率的同时降低访存,有效改善了因非规则访存而导致的访存效率差的问题。
本申请实施例还提供了一种基于B树的重叠社区发现装置,包括:
存储单元,其用于基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;
访问单元,其用于当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;
计算单元,其用于分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;
发现单元,其用于将模块度的变化量大于0的邻居图顶点加入至所述目标社区。
进一步的,所述存储单元具体用于:
将所述邻居图顶点存储于B树中的节点上;
当B树中的其中一个目标节点上的邻居图顶点数量达到N-2个时,对所述目标节点进行***得到新节点,以供其他邻居图顶点的存储,其中,N表示B树的路数。
进一步的,所述存储单元具体还用于:
当所述目标节点的父节点上的邻居图顶点数量达到N-1个时,在所述父节点下新增至少一个子节点,以供其他邻居图顶点的存储。
进一步的,所述装置还包括设置单元,其用于:
设置两缓冲区,使得CPU上的目标社区内的图顶点和目标社区外的邻居图顶点加载至GPU的动作在一缓冲区内完成,GPU上的目标社区内的图顶点读取至查找数组以及目标社区外的邻居图顶点读取至B树中的动作在另一缓冲区内完成。
进一步的,所述B树的路数为32路。
需要说明的是,所属本领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和各单元的具体工作过程,可以参考前述基于B树的重叠社区发现方法实施例中的对应过程,在此不再赘述。
上述实施例提供的装置可以实现为一种计算机程序的形式,该计算机程序可以在如图5所示的基于B树的重叠社区发现设备上运行。
本申请实施例还提供了一种基于B树的重叠社区发现设备,包括:通过***总线连接的存储器、处理器和网络接口,存储器中存储有至少一条指令,至少一条指令由处理器加载并执行,以实现前述的基于B树的重叠社区发现方法的全部步骤或部分步骤。
其中,网络接口用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
处理器可以是CPU,还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件分立硬件组件等。通用处理器可以是微处理器,或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如视频播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如视频数据、图像数据等)等。此外,存储器可以包括高速随存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘、智能存储卡(SmartMedia Card,SMC)、安全数字(Secure digital,SD)卡、闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件或其他易失性固态存储器件。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现前述的基于B树的重叠社区发现方法的全部步骤或部分步骤。
本申请实施例实现前述的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only memory,ROM)、随机存取存储器(Random Accessmemory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、服务器或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者***中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种基于B树的重叠社区发现方法,其特征在于,包括以下步骤:
基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;
当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;
分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;
将模块度的变化量大于0的邻居图顶点加入至所述目标社区。
2.如权利要求1所述的基于B树的重叠社区发现方法,其特征在于,所述将目标社区以外的邻居图顶点存储于B树中,包括:
将所述邻居图顶点存储于B树中的节点上;
当B树中的其中一个目标节点上的邻居图顶点数量达到N-2个时,对所述目标节点进行***得到新节点,以供其他邻居图顶点的存储,其中,N表示B树的路数。
3.如权利要求2所述的基于B树的重叠社区发现方法,其特征在于,所述方法还包括:
当所述目标节点的父节点上的邻居图顶点数量达到N-1个时,在所述父节点下新增至少一个子节点,以供其他邻居图顶点的存储。
4.如权利要求1所述的基于B树的重叠社区发现方法,其特征在于,在所述基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中的步骤之前,还包括:
设置两缓冲区,使得CPU上的目标社区内的图顶点和目标社区外的邻居图顶点加载至GPU的动作在一缓冲区内完成,GPU上的目标社区内的图顶点读取至查找数组以及目标社区外的邻居图顶点读取至B树中的动作在另一缓冲区内完成。
5.如权利要求1所述的基于B树的重叠社区发现方法,其特征在于:所述B树的路数为32路。
6.一种基于B树的重叠社区发现装置,其特征在于,包括:
存储单元,其用于基于目标社区内的所有图顶点构建查找数组,将目标社区外的邻居图顶点存储于B树中;
访问单元,其用于当访问查找数组中的其中一个目标图顶点时,将所述目标图顶点映射至连续的内存区域中,以对B树中的所有邻居图顶点进行并行遍历;
计算单元,其用于分别计算每个邻居图顶点加入至所述目标社区后对应的模块度的变化量;
发现单元,其用于将模块度的变化量大于0的邻居图顶点加入至所述目标社区。
7.如权利要求6所述的基于B树的重叠社区发现装置,其特征在于,所述存储单元具体用于:
将所述邻居图顶点存储于B树中的节点上;
当B树中的其中一个目标节点上的邻居图顶点数量达到N-2个时,对所述目标节点进行***得到新节点,以供其他邻居图顶点的存储,其中,N表示B树的路数。
8.如权利要求7所述的基于B树的重叠社区发现装置,其特征在于,所述存储单元具体还用于:
当所述目标节点的父节点上的邻居图顶点数量达到N-1个时,在所述父节点下新增至少一个子节点,以供其他邻居图顶点的存储。
9.一种基于B树的重叠社区发现设备,其特征在于,包括:存储器和处理器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行,以实现权利要求1至5中任一项所述的基于B树的重叠社区发现方法。
10.一种计算机可读存储介质,其特征在于:所述计算机存储介质存储有计算机程序,当所述计算机程序被处理器执行时,以实现权利要求1至5中任一项所述的基于B树的重叠社区发现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211449751.2A CN115809243A (zh) | 2022-11-18 | 2022-11-18 | 基于b树的重叠社区发现方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211449751.2A CN115809243A (zh) | 2022-11-18 | 2022-11-18 | 基于b树的重叠社区发现方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115809243A true CN115809243A (zh) | 2023-03-17 |
Family
ID=85483504
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211449751.2A Pending CN115809243A (zh) | 2022-11-18 | 2022-11-18 | 基于b树的重叠社区发现方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115809243A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117609227A (zh) * | 2023-11-09 | 2024-02-27 | 北京火山引擎科技有限公司 | 数据处理方法、装置及电子设备 |
-
2022
- 2022-11-18 CN CN202211449751.2A patent/CN115809243A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117609227A (zh) * | 2023-11-09 | 2024-02-27 | 北京火山引擎科技有限公司 | 数据处理方法、装置及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Polychroniou et al. | Track join: distributed joins with minimal network traffic | |
Karloff et al. | A model of computation for MapReduce | |
US8959138B2 (en) | Distributed data scalable adaptive map-reduce framework | |
Halim et al. | A MapReduce-based maximum-flow algorithm for large small-world network graphs | |
Wehr et al. | Parallel kd-tree construction on the gpu with an adaptive split and sort strategy | |
Shen et al. | GPU‐based branch‐and‐bound method to solve large 0‐1 knapsack problems with data‐centric strategies | |
Beaumont et al. | Optimal GPU-CPU offloading strategies for deep neural network training | |
CN115809243A (zh) | 基于b树的重叠社区发现方法、装置、设备及存储介质 | |
Chen et al. | HiClus: Highly scalable density-based clustering with heterogeneous cloud | |
Wan et al. | Efficient CPU‐GPU cooperative computing for solving the subset‐sum problem | |
KR20210024751A (ko) | 이종 메모리 장치를 포함하는 그래프 처리 시스템 및 그래프 처리 시스템의 동작방법 | |
Gupta et al. | Map-based graph analysis on MapReduce | |
Tran et al. | Exploring means to enhance the efficiency of GPU bitmap index query processing | |
Neelima et al. | Kepler GPU accelerated recursive sorting using dynamic parallelism | |
Salah et al. | A time-space efficient algorithm for parallel k-way in-place merging based on sequence partitioning and perfect shuffle | |
Ibrahim et al. | Improvement of data throughput in data-intensive cloud computing applications | |
Geetha et al. | Implementation and performance comparison of partitioning techniques in apache spark | |
US20130144838A1 (en) | Transferring files | |
Haglin et al. | Scalable, multithreaded, partially-in-place sorting | |
Kim et al. | DSP-CC-: I/O efficient parallel computation of connected components in billion-scale networks | |
CN116700995B (zh) | 一种异构内存池并发访问方法、装置、设备及存储介质 | |
Metwally | Scaling Equi-Joins | |
Ajwani et al. | I/O-optimal distribution sweeping on private-cache chip multiprocessors | |
Neukirchen | Survey and performance evaluation of DBSCAN spatial clustering implementations for big data and high-performance computing paradigms | |
Uprety et al. | MapReduce: Big Data Maintained Algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |