CN103559016A - 一种基于图形处理器并行计算的频繁子图挖掘方法 - Google Patents

一种基于图形处理器并行计算的频繁子图挖掘方法 Download PDF

Info

Publication number
CN103559016A
CN103559016A CN201310503214.6A CN201310503214A CN103559016A CN 103559016 A CN103559016 A CN 103559016A CN 201310503214 A CN201310503214 A CN 201310503214A CN 103559016 A CN103559016 A CN 103559016A
Authority
CN
China
Prior art keywords
frequent
limit
edge
expansion
subgraph
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
Application number
CN201310503214.6A
Other languages
English (en)
Other versions
CN103559016B (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.)
Jiangxi University of Science and Technology
Original Assignee
Jiangxi University of Science and Technology
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 Jiangxi University of Science and Technology filed Critical Jiangxi University of Science and Technology
Priority to CN201310503214.6A priority Critical patent/CN103559016B/zh
Publication of CN103559016A publication Critical patent/CN103559016A/zh
Application granted granted Critical
Publication of CN103559016B publication Critical patent/CN103559016B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种基于图形处理器并行计算的频繁子图挖掘方法,通过GPU划分出各个线程块block,将频繁边均匀分配给不同的线程进行并行处理,通过最右扩展rightmost得到不同的扩展子图,将最后各个线程得到的图挖掘数据集返回给每个线程块block;最后,通过GPU与内存进行数据通信,将结果返回给CPU进行处理。本发明提供了一种可行、有效的图挖掘方法,使得在密集型大数据环境下的图挖掘性能得到优化,提高图挖掘效率,为科研分析、市场研究等提供快速、可靠的数据信息,实现在CUDA统一计算设备架构上的并行挖掘方法。

Description

一种基于图形处理器并行计算的频繁子图挖掘方法
技术领域
本发明涉及一种基于图形处理器并行计算的频繁子图挖掘方法,以提高图数据挖掘效率。
背景技术
随着数据挖掘领域的不断深入和发展,图数据挖掘越来越受到研究人员的关注,因此图挖掘已经成为数据挖掘和机器学习的新的研究方向。该研究在现实生活中的许多领域都具有巨大的潜在价值,如生物信息学中的蛋白质结构分析、基因组识别,社会网络中实体间的联系,Web分析中Web内容挖掘、Web链接结构分析,文本信息检索等。
目前国内外对图数据挖掘的研究工作主要可分为以下四类:1、图的匹配研究;2、图数据中的关键字查询研究;3、频繁子图挖掘问题研究;4、图的聚类及分类问题研究。频繁子图挖掘作为图数据挖掘领域中的一个重要研究方向,现已存在诸如AGM(Apriori based Graph Mining)、FSG(Frequent SubgraphDiscovery)、gSpan、CloseGraph等经典算法及其改进算法。随着大数据时代的来临,以上算法作为串行算法,让处理器的计算工作量变得非常庞大,使得整个图数据挖掘过程变得“捉襟见肘”,挖掘性能受到一定的抑制。
在单CPU处理器环境下,一般的频繁子图挖掘方法在通过给定的图数据库中找出支持度大于min_sup最小支持度的频繁边,再对频繁边做频繁子图扩展,得到生成图集,最后通过同构验证去除同构的频繁子图结构,得到图数据库中的所有频繁项集。对于这种传统挖掘方法存在几个弊端:其一,挖掘过程需要进行复杂的同构验证,而子图同构问题其实是NP完全问题,其计算复杂且运算量大;其二,挖掘过程中,将进行大量的重复计算,浪费资源;其三,由于数据量庞大,单CPU处理器平台负载过大,CPU内部存储单元不够使用。
图形处理器GPU(Graphics Processing Units)是一种集成了几何变换、光照、三角形构造、裁剪和绘制引擎等功能,并具有每秒至少1千万个多边形的处理能力的单芯片处理器,且具有天然的并行特性。GPU体系结构一般由流处理器阵列和存储器系统两部分组成,其中流处理器阵列又包含若干个线程处理群(Thread Processing Cluster,TPC),每个TPC中包含有2-3个流多处理器(StreamingMultiprocessor,SM),而每个流多处理器又包含8个流处理器(StreamingProcessor,SP),流处理器是用来处理各个线程及线程块运算。因此,GPU是以大量线程实现面向大数据量的并行计算,适合处理计算密度高、逻辑分支简单的大规模数据并行负载。
针对GPU通用计算(General-Purpose computing on the GPU,GPGPU),nVIDIA公司推出了一个全新的软硬件平台----统一计算机设备架构(ComputeUnified Device Architecture)。CUDA可以直接对GPU进行设备管理和并行计算的架构平台,其编程语言是针对GPGPU的C/C++语言,而不需要考虑在图形环境下API的实现方法。
发明内容
本发明的目的在于突破单处理器环境下频繁子图挖掘的瓶颈,提供一种可行、有效的图挖掘方法,使得在密集型大数据环境下的图挖掘性能得到优化,提高图挖掘效率,为科研分析、市场研究等提供快速、可靠的数据信息,实现在CUDA统一计算设备架构上的并行挖掘方法。
为解决上述技术问题,本发明采用以下技术方案:
一种基于图形处理器并行计算的频繁子图挖掘方法,通过GPU划分出各个线程块block,将频繁边均匀分配给不同的线程进行并行处理,通过最右扩展rightmost得到不同的扩展子图,将最后各个线程得到的图挖掘数据集返回给每个线程块block;最后,通过GPU与内存进行数据通信,将结果返回给CPU进行处理。
所述的频繁子图挖掘方法,频繁子图扩展在GPU中的并行过程如下所述:
步骤1:计算图集中所有标号图的边的支持度,根据最小支持度min_sup确定频繁图的片段,将输入图集合中所有的频繁边加入集合rank_edge[]中,并以rank_edge[]中的频繁边作为初始子图;
步骤2:根据集合rank_edge[],GPU同时开辟sum_count个线程,并标号t0,t1...tn,平均每512个线程组成一个block;由各个初始子图做最右扩展,得到的频繁子图;如对k阶频繁子图的最小DFS编码进行最右扩展,每次向最右路添加一条边,得到k+1阶候选子图;其中每一阶候选子图都是其父母节点的超图;
步骤3:重新计算k+1阶候选子图的支持度;对通过最右扩展得到的k+1阶子图计算支持度,如果大于最小支持度min_sup则保存,否则将其删除;
步骤4:剪枝冗余编码;比较第k+1阶候频繁子图的DFS编码,如果扩展得到的k+1阶频繁子图不是最小DFS编码,则认为该图是冗余的,可从候选子图中删除;
步骤5:缩减图集合;当一条频繁边的所有最右扩展全部完成后,可将该频繁边从输入图集合中删除,以缩小输入图集合。
所述的频繁子图挖掘方法,具体执行以下步骤:
(1)首先读取图数据库中数据集data_node[10000]到CPU内存单元graphdata[num]中去,其中graphdata为结构体数组,其结构体成员为一五元组(node_msg,node_lable,edge_x,edge_y,edge_weight),分别表示图中结点信息,结点标号,一条边的两个顶点x、y以及边的权值,num表示图数据库的图数量;
(2)定义两个数组rank_node[lable-max],rank_edge[lable-max]用于对图数据库中不同标号的点和边进行排序,分别存储在rank_node[]和rank_edge[]中;label-max代表每个图集的节点最大的个数,初始化label-max为500;排序后,能够快速找到满足min_sup最小支持度的点边集合;
(3)初始化min_sup的值,对图数据集进行遍历,将所有满足条件min_sup的边存入数组rank_edge[],并对其进行排序和计数,用字典顺序进行排序,用sum_count计数;
(4)在GPU端,根据sum_count频繁边总数,决定开辟线程数目的多少,将数据从cpu端传输到gpu端;
(5)在GPU开辟的两个内存块:stacksource[]和ksource[],其大小均为sum_count*sizeof(Graphdata)*100;两块内存分别用来存储不同数据,stacksource[]用于返回频繁子图结果集,ksource[]则用于进行最右扩展的迭代运算;定义graphdata型变量source,用于存放扩展得到的中间结果,初始化计数变量next的值为source中频繁边的个数,令p=next-1,其值为频繁边在stacksource中的计数并初始化p1=p=0;
(6)在GPU中分配内存后,开始对于每个线程进行并行,tid用于标记线程号,令ksource[tid*100+0]等于每个线程的初始source;
(7)将ksource[]遍历循环,将每个值赋给source使其做接下来的工作;对source中的图数据进行最小dfs编码,将booldfs(source)这个类型的函数设置为gpu端的一个设备状态函数bool_device_dfs(source);
bool_device_dfs(source)函数可初始化为boolf[countnode][countedge]=true,conutedge为source的频繁边总个数,同时定义一个栈edgestack[maxlen],maxlen=10;
(8)如果bool_device_dfs(source)返回值是ture,则把source插入到stacksource[tid*100+k],k代表当前线程中第k个插入到数组中去的,也即对一个结果集计数的过程,同时,p1++;
(9)利用最右扩展,对k阶频繁图而言,任意从一条频繁边开始,判断并比较该边两端x,y的值,若其y值比rm数组中的x值大,则将该y值写入数组rm中,作为最右扩展的扩展边,即找到k阶频繁子图的第k+1条边,然后将找到的所有的结果集用类似map容器存数方式进行存储,并将此函数定义为func;
(10)在这个流程中,核心程序开始在func函数按顺序查找,如果edge{node_msg,node_lable,edge_x,edge_weight,edge_y}中的edge_y>next,next=next+1;这样可以知道扩展是内扩展还是外扩展,内扩展是指扩展的边两端的节点都在原来的图中;外扩展是指扩展的边两端的节点有一端是在图中,另一端是在扩展外部而来;
(11)将GPU端的stacksoruce传递给CPU端的内存,内存大小是:sum_count*sizeof(Graphdata)*100;
(12)对stacksoruce[]进行遍历,将结果集输出到txt文档中,最后得到结果频繁子项集。
所述的频繁子图挖掘方法,所述(3)中,其排序方法如下:有结构体变量edge1、edge2定义为graphdata{node_msg,node_lable,edge_x,edge_y,edge_weight}型变量,其值为egde1{0,4,0,8,7},edge2{2,9,1,6,8};首先比较edge_x,此时(edge1->x)<(edge2->x),则edge1<edge2;如果edeg_x值相等,再比较edge_y,最后比较edge_weight。
所述的频繁子图挖掘方法,所述(4)中,将排好序的频繁边传输到gpu端,在gpu端开辟sum_count*sizeof(edge)大小的显卡内存。
所述的频繁子图挖掘方法,所述(7)中对频繁边的遍历包括以下步骤:
7.1)步骤为先取出遍历的第一条边,进行dfs编码,利用dfs编码进行字典顺序排序;
7.2)若在dfs编码中,存在边edge_x{node_msg,node_msgv,edge_x,edge_y,edge_weight},则标记f[x][y]=false,f[y][x]=false,表明该边已经遍历,无需重复遍历;利用IF(stack[p])来判断stack[p]里面是否是空集,如果是,则dfs遍历完成,返回true值;如果不是,则继续遍历,直到stack[p]为空;
7.3)最后通过while(satck[p])循环进行判断该编码是否为最小的dfs编码,令w=stack[p--];if(w<k)(k为dfs排序的一个设定值)则继续执行;否则,证明这不是一个最小的dfs编码,返回false,继续遍历。
本发明采用GeForceGTX650图形图像处理器,其执行单元频率为4.5GHz,显存容量1024MB,最大数据传输可达80GB/S。在GPU中CUDA架构下,数个线程thread可以组成一个block线程块。在每一个线程块block中,所有thread线程共享一个sharedmemory公共显存;不同线程块block之间的线程thread不能进行共享。由此,我们可以通过开辟多个线程块block来增加thread线程的数目,进而降低线程thread用于存取全局显存globalmemory所消耗的时间,因为在同一个线程块block中,各个thread共享一个sharedmemory。
本发明对频繁子图进行并行挖掘,对图数据集中的每一条频繁边采用并行策略,其并行挖掘总体流程如图2所示。
本发明通过GPU划分出各个线程块block,将频繁边均匀分配给不同的线程进行处理,通过最右扩展rightmost得到不同的扩展子图,将最后各个线程得到的图挖掘数据集返回给每个线程块block。最后,通过GPU与内存进行数据通信,将结果返回给CPU进行处理。
对于CPU+GPU异构协同计算,为进一步提高其数据处理性能,必须考虑到内存的负载均衡和通信成本这两个问题。CUDA框架下block的内存共享机制可以解决GPU内存不足的问题,本发明采用一种字典顺序标号的存储方式,控制线程并行,实现负载分配平衡问题。在整个并行协同计算的过程中,CPU负责复杂逻辑和事务处理等串行运算,其中的某一进程调用GPU工作,通过主存将处理后的数据传送给GPU中的内存单元,进行数据通信。GPU根据数据内容负责线程块的分配和线程的并行运算,本发明通过对频繁边进行迭代进行并行运算。迭代过程中线程根据各频繁边的权值大小判断其优先级,进行负载均衡分配。最后,GPU通过PCIExpress接口在线实时返回并行结果,这一过程充分利用了CPU和GPU的系统资源,实现CPU与GPU异构协同计算。
附图说明
图1:频繁子图并行挖掘示意图;
图2:频繁子图并行挖掘总体流程图;
图3:具体实施方案流程图;
图4:GPU中最右扩展流程;
具体实施方式
以下结合具体实施例,对本发明进行详细说明。
变量定义:
data_node[]图数据集
graphdata[]结构体数组(node_msg图中结点信息,node_lable结点标号,edge_x边顶点x,edge_y边顶点y,edge_weight边权值)
rank_node[]  节点排序数组
rank_edge[]  边排序数组
min_sup  最小支持度
sum_count  记录频繁变总数
stacksource[]  接收返回频繁子图结果集
ksource[]  最右扩展的迭代运算存储
source  存放中间计算值
tid  线程标号
bool_device_dfs(source)设备状态函数,返回dfs是否完成
stack[maxlen]dfs遍历栈
一种基于图形处理器并行计算的频繁子图挖掘方法,其主要流程如图1所示:
1、宿主程序把数据从内存拷贝到GPU外部存储器;
2、核心程序运算,进行频繁子图扩展;
3、宿主程序再把数据从GPU外部存储器拷贝回内存。
本发明采用GeForceGTX650图形图像处理器,其执行单元频率为4.5GHz,显存容量1024MB,最大数据传输可达80GB/S。在GPU中CUDA架构下,数个线程thread可以组成一个block线程块。在每一个线程块block中,所有thread线程共享一个sharedmemory公共显存;不同线程块block之间的线程thread不能进行共享。由此,我们可以通过开辟多个线程块block来增加thread线程的数目,进而降低线程thread用于存取全局显存globalmemory所消耗的时间,因为在同一个线程块block中,各个thread共享一个sharedmemory。
本发明对频繁子图进行并行挖掘,对图数据集中的每一条频繁边采用并行策略,其并行挖掘总体流程如图2所示。本发明通过GPU划分出各个线程块block,将频繁边均匀分配给不同的线程进行处理,通过最右扩展rightmost得到不同的扩展子图,将最后各个线程得到的图挖掘数据集返回给每个线程块block。最后,通过GPU与内存进行数据通信,将结果返回给CPU进行处理。对于CPU+GPU异构协同计算,为进一步提高其数据处理性能,必须考虑到内存的负载均衡和通信成本这两个问题。CUDA框架下block的内存共享机制可以解决GPU内存不足的问题,本发明采用一种字典顺序标号的存储方式,控制线程并行,实现负载分配平衡问题。在整个并行协同计算的过程中,CPU负责复杂逻辑和事务处理等串行运算,其中的某一进程调用GPU工作,通过主存将处理后的数据传送给GPU中的内存单元,进行数据通信。GPU根据数据内容负责线程块的分配和线程的并行运算,本发明通过对频繁边进行迭代进行并行运算。迭代过程中线程根据各频繁边的权值大小判断其优先级,进行负载均衡分配。最后,GPU通过PCIExpress接口在线实时返回并行结果,这一过程充分利用了CPU和GPU的系统资源,实现CPU与GPU异构协同计算。
图3、4具体说明了本发明的详细实施步骤。
(1)如图3所示,首先读取图数据库中数据集data_node[10000]到CPU内存单元graphdata[]中去,其中graphdata为结构体数组,其结构体成员为一五元组(node_msg,node_lable,edge_x,edge_y,edge_weight),分别表示图中结点信息,结点标号,一条边的两个顶点x、y以及边的权值。
(2)定义两个数组rank_node[lable-max],rank_edge[lable-max]用于对图数据库中不同标号的点和边进行排序,分别存储在rank_node[]和rank_edge[]中。label-max代表每个图集的节点最大的个数,初始化label-max为500。排序后,可以快速找到满足min_sup最小支持度的点边集合。
(3)初始化min_sup的值,对图数据集进行遍历,将所有满足条件min_sup的边存入数组rank_edge[],并对其进行排序和计数,用字典顺序进行排序,用sum_count计数。其排序方法如下:
有结构体变量edge1、edge2定义为graphdata{node_msg,node_lable,edge_x,edge_y,edge_weight}型变量,其值为egde1{0,4,0,8,7},edge2{2,9,1,6,8}。
首先比较edge_x,此时(edge1->x)<(edge2->x),则edge1<edge2;如果edeg_x值相等,再比较edge_y,最后比较edge_weight。
(4)在GPU端,根据sum_count频繁边总数,决定开辟线程数目的多少,将数据从cpu端传输到gpu端。
将排好序的频繁边传输到gpu端,在gpu端开辟sum_count*sizeof(edge)大小的显卡内存。此时对rank_edge[]中的频繁边并行扩展,由于频繁边扩展存在频繁图重复出现,为有效利用显存资源,提高并行效率,可以对频繁边进行排序。举例如下:
有g1,g2两个图,g1包含两个边edge1{data1,0,0,edge1,1}和edge2{data2,1,1,edge2,2},若g2恰好与g1相同,min_sup=2,那么当两个线程开始进行并行挖掘时,在线程1中,存在edge1→edge2一个频繁子图,而在线程2中,也存在edge2→edge1的一个频繁子图。因此产生了同构的图结构,为了尽可能的减少重复操作,可以给频繁边设置一个顺序标号,只有当下一个频繁边标号大于当前的频繁边标号时,最右扩展才可以进行。这样在很大程度上减少了同构结构图的产生。
(5)在GPU开辟的两个内存块:stacksource[]和ksource[],其大小均为sum_count*sizeof(Graphdata)*100。两块内存分别用来存储不同数据,stacksource[]用于返回频繁子图结果集,ksource[]则用于进行最右扩展的迭代运算。因此,定义graphdata型变量source,用于存放扩展得到的中间结果,初始化计数变量next的值为source中频繁边的个数,令p=next-1,其值为频繁边在stacksource中的计数并初始化p1=p=0。
(6)在GPU中分配内存后,开始对于每个线程进行并行,tid用于标记线程号,令ksource[tid*100+0]等于每个线程的初始source(频繁边)。
(7)将ksource[]遍历循环,将每个值赋给source使其做接下来的工作。对source中的图数据进行最小dfs编码,将booldfs(source)这个类型的函数设置为gpu端的一个设备状态函数bool_device_dfs(source)。
bool_device_dfs(source)函数可初始化为boolf[countnode][countedge]=true,conutedge为source的频繁边总个数,同时定义一个栈edgestack[maxlen],maxlen=10。
由于GPU对于递归要求比较严格,所以本实施方式避免使用,因此考虑用栈来进行dfs遍历,例如:一个图有两条边,分别为(0,1,edge_weight0)、(1,2,edge_weight1)。首先遍历第一条边,为使遍历能够顺利进行,将边号(0,1,edge_weight0)中的“1“元素存入栈edgestack[maxlen]中,当进行下一条边运算的时候,如果栈顶有元素,就可以直接输出边,进行接下来的遍历;否则,就返回true值,结束dfs遍历。
7.1)上述对频繁边的遍历,步骤为先取出遍历的第一条边,进行dfs编码,利用dfs编码进行字典顺序排序。
7.2)若在dfs编码中,存在边edge_x{node_msg,node_msgv,edge_x,edge_y,edge_weight},则标记f[x][y]=false,f[y][x]=false,表明该边已经遍历,无需重复遍历。利用IF(stack[p])来判断stack[p]里面是否是空集,如果是,则dfs遍历完成,返回true值;如果不是,则继续遍历,直到stack[p]为空。
7.3)最后通过while(satck[p])循环进行判断该编码是否为最小的dfs编码,令w=stack[p--];if(w<k)(k为dfs排序的一个设定值)则继续执行;否则,证明这不是一个最小的dfs编码,返回false,继续遍历。
(8)如果bool_device_dfs(source)返回值是ture,则把source插入到stacksource[tid*100+k],k代表当前线程中第k个插入到数组中去的,也即对一个结果集计数的过程),同时,p1++。
(9)利用最右扩展,如图4所示,对k阶频繁图而言,任意从一条频繁边开始,判断并比较该边两端x,y的值,若其y值比rm数组中的x值大,则将该y值写入数组rm中,作为最右扩展的扩展边,即找到k阶频繁子图的第k+1条边,然后将找到的所有的结果集用类似map容器存数方式进行存储,并将此函数定义为func,采用func存储具有以下优点:
1)可以避免生成重复的边;
2)可以按照顺序生成频繁子图;
3)可以节省显卡内存;
func函数是利用c++中map函数的顺序查找的方式和一一对应的原理进行重写的自写函数,使扩展的边中不存在重复边,并且其扩展过程中所耗内存较小。func函数和map函数数据结构类似,都是采用树状链表方式进行存储。
将插入过来的结点(边元素)与该树的根节点(边元素)进行比较,如果两者相等,则舍去;如果比其边小,则往k阶频繁子图的左子树插入;如果比其边大,则往其右子树插入;如此往复,直到该条边成为一个叶子节点。
9.1)定义一个整型数组rm[next],并将其初始化为rm[next]={-1}。
9.2)开始对source中的每个节点进行循环,令每个节点都和rm数组做起比较{s[i]->iy>s[i]->ix&&s[i]->iy>rm[s[i]->ix]},这样可以保证rm[]数组里面的值均为最右扩展的节点。
9.3)进行树形扩展,并进行dfs编码。
9.4)将扩展的边(func中所存储的边集)按照从小到大的顺序插入到ksource[tid*100+p++]中去,如果p等于p1,则运行完毕返回;否则的话,返回到(7),进行一个循环。如果p不等于p1,说明还有扩展边可能出现频繁子图,这样可以保证频繁子图的完备性。
(10)在这个流程中,核心程序开始在func函数按顺序查找,如果edge{node_msg,node_lable,edge_x,edge_weight,edge_y}中的edge_y>next,next=next+1。这样可以知道扩展是内扩展还是外扩展,内扩展是指扩展的边两端的节点都在原来的图中。外扩展是指扩展的边两端的节点有一端是在图中,另一端是在扩展外部而来。
(11)将GPU端的stacksoruce传递给CPU端的内存,内存大小是:sum_count*sizeof(Graphdata)*100。
(12)对stacksoruce[]进行遍历,将结果集输出到txt文档中,最后得到结果频繁子项集。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (6)

1.一种基于图形处理器并行计算的频繁子图挖掘方法,其特征在于,通过GPU划分出各个线程块block,将频繁边均匀分配给不同的线程进行并行处理,通过最右扩展rightmost得到不同的扩展子图,将最后各个线程得到的图挖掘数据集返回给每个线程块block;最后,通过GPU与内存进行数据通信,将结果返回给CPU进行处理。
2.根据权利要求1所述的频繁子图挖掘方法,其特征在于,频繁子图扩展在GPU中的并行过程如下所述:
步骤1:计算图集中所有标号图的边的支持度,根据最小支持度min_sup确定频繁图的片段,将输入图集合中所有的频繁边加入集合rank_edge[]中,并以rank_edge[]中的频繁边作为初始子图;
步骤2:根据集合rank_edge[],GPU同时开辟sum_count个线程,并标号t0,t1...tn,平均每512个线程组成一个block;由各个初始子图做最右扩展,得到的频繁子图;如对k阶频繁子图的最小DFS编码进行最右扩展,每次向最右路添加一条边,得到k+1阶候选子图;其中每一阶候选子图都是其父母节点的超图;
步骤3:重新计算k+1阶候选子图的支持度;对通过最右扩展得到的k+1阶子图计算支持度,如果大于最小支持度min_sup则保存,否则将其删除;
步骤4:剪枝冗余编码;比较第k+1阶候频繁子图的DFS编码,如果扩展得到的k+1阶频繁子图不是最小DFS编码,则认为该图是冗余的,可从候选子图中删除;
步骤5:缩减图集合;当一条频繁边的所有最右扩展全部完成后,可将该频繁边从输入图集合中删除,以缩小输入图集合。
3.根据权利要求2所述的频繁子图挖掘方法,其特征在于,具体执行以下步骤:
(1)首先读取图数据库中数据集data_node[10000]到CPU内存单元graphdata[num]中去,其中graphdata为结构体数组,其结构体成员为一五元组(node_msg,node_lable,edge_x,edge_y,edge_weight),分别表示图中结点信息,结点标号,一条边的两个顶点x、y以及边的权值,num表示图数据库的图数量;
(2)定义两个数组rank_node[lable-max],rank_edge[lable-max]用于对图数据库中不同标号的点和边进行排序,分别存储在rank_node[]和rank_edge[]中;label-max代表每个图集的节点最大的个数,初始化label-max为500;排序后,能够快速找到满足min_sup最小支持度的点边集合;
(3)初始化min_sup的值,对图数据集进行遍历,将所有满足条件min_sup的边存入数组rank_edge[],并对其进行排序和计数,用字典顺序进行排序,用sum_count计数;
(4)在GPU端,根据sum_count频繁边总数,决定开辟线程数目的多少,将数据从cpu端传输到gpu端;
(5)在GPU开辟的两个内存块:stacksource[]和ksource[],其大小均为sum_count*sizeof(Graphdata)*100;两块内存分别用来存储不同数据,stacksource[]用于返回频繁子图结果集,ksource[]则用于进行最右扩展的迭代运算;定义graphdata型变量source,用于存放扩展得到的中间结果,初始化计数变量next的值为source中频繁边的个数,令p=next-1,其值为频繁边在stacksource中的计数并初始化p1=p=0;
(6)在GPU中分配内存后,开始对于每个线程进行并行,tid用于标记线程号,令ksource[tid*100+0]等于每个线程的初始source;
(7)将ksource[]遍历循环,将每个值赋给source使其做接下来的工作;对source中的图数据进行最小dfs编码,将booldfs(source)这个类型的函数设置为gpu端的一个设备状态函数bool_device_dfs(source);
bool_device_dfs(source)函数可初始化为boolf[countnode][countedge]=true,conutedge为source的频繁边总个数,同时定义一个栈edgestack[maxlen],maxlen=10;
(8)如果bool_device_dfs(source)返回值是ture,则把source插入到stacksource[tid*100+k],k代表当前线程中第k个插入到数组中去的,也即对一个结果集计数的过程,同时,p1++;
(9)利用最右扩展,对k阶频繁图而言,任意从一条频繁边开始,判断并比较该边两端x,y的值,若其y值比rm数组中的x值大,则将该y值写入数组rm中,作为最右扩展的扩展边,即找到k阶频繁子图的第k+1条边,然后将找到的所有的结果集用类似map容器存数方式进行存储,并将此函数定义为func;
(10)在这个流程中,核心程序开始在func函数按顺序查找,如果edge{node_msg,node_lable,edge_x,edge_weight,edge_y}中的edge_y>next,next=next+1;这样可以知道扩展是内扩展还是外扩展,内扩展是指扩展的边两端的节点都在原来的图中;外扩展是指扩展的边两端的节点有一端是在图中,另一端是在扩展外部而来;
(11)将GPU端的stacksoruce传递给CPU端的内存,内存大小是:sum_count*sizeof(Graphdata)*100;
(12)对stacksoruce[]进行遍历,将结果集输出到txt文档中,最后得到结果频繁子项集。
4.根据权利要求3所述的频繁子图挖掘方法,其特征在于,所述(3)中,其排序方法如下:有结构体变量edge1、edge2定义为graphdata{node_msg,node_lable,edge_x,edge_y,edge_weight}型变量,其值为egde1{0,4,0,8,7},edge2{2,9,1,6,8};首先比较edge_x,此时(edge1->x)<(edge2->x),则edge1<edge2;如果edeg_x值相等,再比较edge_y,最后比较edge_weight。
5.根据权利要求3所述的频繁子图挖掘方法,其特征在于,所述(4)中,将排好序的频繁边传输到gpu端,在gpu端开辟sum_count*sizeof(edge)大小的显卡内存。
6.根据权利要求3所述的频繁子图挖掘方法,其特征在于,所述(7)中对频繁边的遍历包括以下步骤:
7.1)步骤为先取出遍历的第一条边,进行dfs编码,利用dfs编码进行字典顺序排序;
7.2)若在dfs编码中,存在边edge_x{node_msg,node_msgv,edge_x,edge_y,edge_weight},则标记f[x][y]=false,f[y][x]=false,表明该边已经遍历,无需重复遍历;利用IF(stack[p])来判断stack[p]里面是否是空集,如果是,则dfs遍历完成,返回true值;如果不是,则继续遍历,直到stack[p]为空;
7.3)最后通过while(satck[p])循环进行判断该编码是否为最小的dfs编码,令w=stack[p--];if(w<k)(k为dfs排序的一个设定值)则继续执行;否则,证明这不是一个最小的dfs编码,返回false,继续遍历。
CN201310503214.6A 2013-10-23 2013-10-23 一种基于图形处理器并行计算的频繁子图挖掘方法 Active CN103559016B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310503214.6A CN103559016B (zh) 2013-10-23 2013-10-23 一种基于图形处理器并行计算的频繁子图挖掘方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310503214.6A CN103559016B (zh) 2013-10-23 2013-10-23 一种基于图形处理器并行计算的频繁子图挖掘方法

Publications (2)

Publication Number Publication Date
CN103559016A true CN103559016A (zh) 2014-02-05
CN103559016B CN103559016B (zh) 2016-09-07

Family

ID=50013273

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310503214.6A Active CN103559016B (zh) 2013-10-23 2013-10-23 一种基于图形处理器并行计算的频繁子图挖掘方法

Country Status (1)

Country Link
CN (1) CN103559016B (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103995690A (zh) * 2014-04-25 2014-08-20 清华大学深圳研究生院 一种基于gpu的并行时间序列挖掘方法
CN104102476A (zh) * 2014-08-04 2014-10-15 浪潮(北京)电子信息产业有限公司 非规则流中高维数据流典型相关性并行计算方法及装置
CN104952032A (zh) * 2015-06-19 2015-09-30 清华大学 图的处理方法、装置以及栅格化表示及存储方法
CN105808779A (zh) * 2016-03-30 2016-07-27 北京大学 基于剪枝的图漫游并行计算方法和应用
CN106414860A (zh) * 2016-03-28 2017-02-15 株式会社小松制作所 评价装置以及评价方法
CN106446161A (zh) * 2016-09-23 2017-02-22 中山大学 一种使用Hadoop的极大频繁子图挖掘方法
CN106777065A (zh) * 2016-12-12 2017-05-31 郑州云海信息技术有限公司 一种频繁子图挖掘的方法及系统
CN108520027A (zh) * 2018-03-20 2018-09-11 大连理工大学 一种基于cuda框架的gpu加速的频繁项集挖掘算法
CN109508739A (zh) * 2018-11-02 2019-03-22 中国空间技术研究院 一种基于频繁模式挖掘的典型设计活动预测方法
CN109684418A (zh) * 2018-11-22 2019-04-26 全球能源互联网研究院有限公司 基于电网图数据库的数据存储方法及装置
CN109710314A (zh) * 2018-12-20 2019-05-03 四川新网银行股份有限公司 一种基于图结构分布式并行模式构建图的方法
CN109861858A (zh) * 2019-01-28 2019-06-07 北京大学 微服务系统根因节点的错误排查方法
CN110175172A (zh) * 2019-05-22 2019-08-27 深圳大学 基于稀疏二分图的极大二分团并行枚举方法
CN111259205A (zh) * 2020-01-15 2020-06-09 北京百度网讯科技有限公司 一种图数据库遍历方法、装置、设备及存储介质
CN111292223A (zh) * 2020-01-22 2020-06-16 北京百度网讯科技有限公司 图计算的处理方法、装置、电子设备及存储介质
CN111831861A (zh) * 2020-07-15 2020-10-27 中兴飞流信息科技有限公司 一种大数据领域使用gpu实现多分组数据排序的方法
CN111832714A (zh) * 2019-04-19 2020-10-27 上海寒武纪信息科技有限公司 运算方法及装置
CN111984833A (zh) * 2020-05-18 2020-11-24 中科院计算所西部高等技术研究院 基于gpu的高性能图挖掘方法及系统
CN114816680A (zh) * 2022-03-09 2022-07-29 华北电力大学 一种基于cpu-gpu架构的业务流程模型发现方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102096719A (zh) * 2011-02-18 2011-06-15 中国科学院计算技术研究所 一种基于图的存储模式挖掘方法
JP2011197846A (ja) * 2010-03-18 2011-10-06 Fujitsu Ltd 情報処理装置、並列計算制御方法、プログラム及び並列計算システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011197846A (ja) * 2010-03-18 2011-10-06 Fujitsu Ltd 情報処理装置、並列計算制御方法、プログラム及び並列計算システム
CN102096719A (zh) * 2011-02-18 2011-06-15 中国科学院计算技术研究所 一种基于图的存储模式挖掘方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
白洪涛等: "一种基于图形处理器的频繁模式挖掘算法", 《仪器仪表学报》 *
胡健等: "挖掘不确定频繁子图的改进算法的研究", 《计算机工程与应用》 *

Cited By (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103995690A (zh) * 2014-04-25 2014-08-20 清华大学深圳研究生院 一种基于gpu的并行时间序列挖掘方法
CN103995690B (zh) * 2014-04-25 2016-08-17 清华大学深圳研究生院 一种基于gpu的并行时间序列挖掘方法
CN104102476A (zh) * 2014-08-04 2014-10-15 浪潮(北京)电子信息产业有限公司 非规则流中高维数据流典型相关性并行计算方法及装置
CN104952032B (zh) * 2015-06-19 2018-03-23 清华大学 图的处理方法、装置以及栅格化表示及存储方法
CN104952032A (zh) * 2015-06-19 2015-09-30 清华大学 图的处理方法、装置以及栅格化表示及存储方法
US10147339B2 (en) 2016-03-28 2018-12-04 Komatsu Ltd. Evaluation apparatus and evaluation method
CN106414860B (zh) * 2016-03-28 2019-04-26 株式会社小松制作所 评价装置以及评价方法
CN106414860A (zh) * 2016-03-28 2017-02-15 株式会社小松制作所 评价装置以及评价方法
CN105808779A (zh) * 2016-03-30 2016-07-27 北京大学 基于剪枝的图漫游并行计算方法和应用
CN106446161A (zh) * 2016-09-23 2017-02-22 中山大学 一种使用Hadoop的极大频繁子图挖掘方法
CN106446161B (zh) * 2016-09-23 2019-10-01 中山大学 一种使用Hadoop的极大频繁子图挖掘方法
CN106777065A (zh) * 2016-12-12 2017-05-31 郑州云海信息技术有限公司 一种频繁子图挖掘的方法及系统
CN108520027A (zh) * 2018-03-20 2018-09-11 大连理工大学 一种基于cuda框架的gpu加速的频繁项集挖掘算法
CN108520027B (zh) * 2018-03-20 2020-09-29 大连理工大学 一种基于cuda框架的gpu加速的频繁项集挖掘方法
CN109508739A (zh) * 2018-11-02 2019-03-22 中国空间技术研究院 一种基于频繁模式挖掘的典型设计活动预测方法
CN109684418A (zh) * 2018-11-22 2019-04-26 全球能源互联网研究院有限公司 基于电网图数据库的数据存储方法及装置
CN109710314A (zh) * 2018-12-20 2019-05-03 四川新网银行股份有限公司 一种基于图结构分布式并行模式构建图的方法
CN109861858A (zh) * 2019-01-28 2019-06-07 北京大学 微服务系统根因节点的错误排查方法
CN109861858B (zh) * 2019-01-28 2020-06-26 北京大学 微服务系统根因节点的错误排查方法
CN111832714B (zh) * 2019-04-19 2023-11-17 上海寒武纪信息科技有限公司 运算方法及装置
CN111832714A (zh) * 2019-04-19 2020-10-27 上海寒武纪信息科技有限公司 运算方法及装置
CN110175172A (zh) * 2019-05-22 2019-08-27 深圳大学 基于稀疏二分图的极大二分团并行枚举方法
CN110175172B (zh) * 2019-05-22 2021-08-31 深圳大学 基于稀疏二分图的极大二分团并行枚举方法
CN111259205B (zh) * 2020-01-15 2023-10-20 北京百度网讯科技有限公司 一种图数据库遍历方法、装置、设备及存储介质
CN111259205A (zh) * 2020-01-15 2020-06-09 北京百度网讯科技有限公司 一种图数据库遍历方法、装置、设备及存储介质
CN111292223A (zh) * 2020-01-22 2020-06-16 北京百度网讯科技有限公司 图计算的处理方法、装置、电子设备及存储介质
CN111292223B (zh) * 2020-01-22 2023-07-25 北京百度网讯科技有限公司 图计算的处理方法、装置、电子设备及存储介质
US11941055B2 (en) 2020-01-22 2024-03-26 Beijing Baidu Netcom Science And Technology Co., Ltd. Method and apparatus for graph computing, electronic device and storage medium
CN111984833A (zh) * 2020-05-18 2020-11-24 中科院计算所西部高等技术研究院 基于gpu的高性能图挖掘方法及系统
CN111984833B (zh) * 2020-05-18 2023-08-01 中科院计算所西部高等技术研究院 基于gpu的高性能图挖掘方法及系统
CN111831861A (zh) * 2020-07-15 2020-10-27 中兴飞流信息科技有限公司 一种大数据领域使用gpu实现多分组数据排序的方法
CN114816680A (zh) * 2022-03-09 2022-07-29 华北电力大学 一种基于cpu-gpu架构的业务流程模型发现方法

Also Published As

Publication number Publication date
CN103559016B (zh) 2016-09-07

Similar Documents

Publication Publication Date Title
CN103559016B (zh) 一种基于图形处理器并行计算的频繁子图挖掘方法
Lieberman et al. A fast similarity join algorithm using graphics processing units
Pan et al. Fast GPU-based locality sensitive hashing for k-nearest neighbor computation
US8959138B2 (en) Distributed data scalable adaptive map-reduce framework
Yu et al. A space and time efficient algorithm for SimRank computation
Lakhotia et al. Accelerating {PageRank} using {Partition-Centric} Processing
Yuan et al. PathGraph: A path centric graph processing system
Date et al. Collaborative (cpu+ gpu) algorithms for triangle counting and truss decomposition on the minsky architecture: Static graph challenge: Subgraph isomorphism
CN102737126A (zh) 云计算环境下的分类规则挖掘方法
Zhu et al. A classification algorithm of CART decision tree based on MapReduce attribute weights
He et al. Efficient parallel A* search on multi-GPU system
Chimani et al. Algorithm engineering: Concepts and practice
Yang et al. An improved cop-kmeans clustering for solving constraint violation based on mapreduce framework
Mittal A survey on applications and architectural-optimizations of micron’s automata processor
Li et al. A single-scan algorithm for mining sequential patterns from data streams
Blelloch et al. The read-only semi-external model
Song et al. Community detection using parallel genetic algorithms
Boinski et al. Algorithms for spatial collocation pattern mining in a limited memory environment: a summary of results
Werner et al. Automated composition and execution of hardware-accelerated operator graphs
Xu et al. Evaluation and trade-offs of graph processing for cloud services
Xu et al. GraphCP: an I/O-efficient concurrent graph processing framework
Rochd et al. An Efficient Distributed Frequent Itemset Mining Algorithm Based on Spark for Big Data.
Zhang et al. An efficient algorithm for extracting high-utility hierarchical sequential patterns
Ajwani et al. Design and engineering of external memory traversal algorithms for general graphs
CN117010991B (zh) 基于gpu并行改进遗传算法的高利润商品组合挖掘方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant