浙江大学学报(工学版), 2023, 57(9): 1856-1864 doi: 10.3785/j.issn.1008-973X.2023.09.017

计算机技术

基于GPU的子图匹配优化技术

李安腾,, 崔鹏杰, 袁野,, 王国仁

1. 北京理工大学 计算机学院,北京 100081

2. 东北大学 计算机科学与工程学院,辽宁 沈阳 110169

Research on subgraph matching optimization based on GPU

LI An-teng,, CUI Peng-jie, YUAN Ye,, WANG Guo-ren

1. School of Computer Science and Technology, Beijing Institute of Technology, Beijing 100081, China

2. School of Computer Science and Engineering, Northeastern University, Shenyang 110169, China

通讯作者: 袁野,男,教授. orcid.org/0000-0002-0247-9866. E-mail: yuan-ye@bit.edu.cn

收稿日期: 2022-10-31  

基金资助: 国家自然科学基金资助项目(61932004, 61732003); 中央高校基本科研基金资助项目(N181605012)

Received: 2022-10-31  

Fund supported: 国家自然科学基金资助项目(61932004,61732003);中央高校基本科研基金资助项目(N181605012)

作者简介 About authors

李安腾(1998—),男,硕士生,从事GPU图数据管理研究.orcid.org/0000-0002-8763-5441.E-mail:lee_anteng@qq.com , E-mail:lee_anteng@qq.com

摘要

提出高效的基于图形处理器(GPU)的子图匹配算法GpSI,针对主流算法的过滤阶段和连接阶段分别设计优化方案. 提出基于复合签名的过滤算法,在过滤阶段利用结点所处局部的数量特征和结构特征提升候选集过滤能力. 采用基于候选点的连接策略,在连接阶段以最小邻居数为粒度预分配空间,设计高效的集合运算,避免传统方法重复连接的额外开销. 多个数据集测试结果表明GpSI较主流GPU子图匹配算法在候选集过滤能力、执行用时、GPU内存占用和稳定性上均有明显优势. 在真实数据集测试中,相比GPU友好子图匹配算法,GpSI的执行用时加速2~10倍.

关键词: 子图同构 ; 数据挖掘 ; 图形处理器(GPU) ; 并行计算 ; 高性能计算

Abstract

An efficient graphic processing unit (GPU)-based subgraph matching algorithm GpSI was proposed, and the optimization schemes were designed for the filtering phase and the joining phase of the mainstream algorithms. In the filtering phase, a filtering algorithm based on the composite signatures was proposed, and the local quantitative and structural features of the vertices were used to improve the filtering ability of the candidate sets. In the joining phase, a joining strategy based on candidate vertices was adopted. The space was pre-allocated at the granularity of the minimum number of neighbors, an efficient set operations was designed to realize the joining, and the extra overhead caused by the repeated joins in the traditional method was avoided. Experimental results of multiple datasets show that GpSI has obvious advantages in the filtering ability of the candidate set, the execution time, the GPU memory usage and the stability compared with the mainstream GPU subgraph matching algorithms. In a real data set experiment, the execution time of GpSI was 2 to 10 times faster compared to the execution time of GPU-friendly subgraph isomorphism algorithm.

Keywords: subgraph isomorphism ; data mining ; graphic processing unit (GPU) ; parallel computing ; high performance computing

PDF (1352KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

李安腾, 崔鹏杰, 袁野, 王国仁. 基于GPU的子图匹配优化技术. 浙江大学学报(工学版)[J], 2023, 57(9): 1856-1864 doi:10.3785/j.issn.1008-973X.2023.09.017

LI An-teng, CUI Peng-jie, YUAN Ye, WANG Guo-ren. Research on subgraph matching optimization based on GPU. Journal of Zhejiang University(Engineering Science)[J], 2023, 57(9): 1856-1864 doi:10.3785/j.issn.1008-973X.2023.09.017

图作为重要的数据结构,能清晰地表示系统内各部分之间的复杂联系. 子图匹配是基础的图数据挖掘算法,目的是在数据图中找到与查询图结构相同的子图,在社交网络分析[1-2]、知识图谱检索[3-5],化合物发现[6]、生物事件提取[7]等领域都有重要应用. 子图匹配被证明是NP-hard问题[8],传统的解决方法通常基于树的搜索和回溯实现[9]. 随着信息时代的发展,图数据规模急剧增大,上百万条边的图已十分常见[10],传统的串行子图匹配算法难以应对. 以图形处理器(graphic processing unit, GPU)为中心的中央处理器(center processing unit, CPU)-GPU异构图处理系统不断涌现[11-12],英伟达推出的计算机统一设备架构(computer unified device architecture,CUDA)编程模型进一步方便了GPU的使用. 相比于以CPU为主的图计算系统,GPU有更高的带宽和并发度,为子图匹配问题的解决带来了新的思路.

根据算法的执行环境,对子图匹配算法的研究可以分为2个类别:基于CPU和基于GPU. 基于CPU的串行算法由Ullmann[13]提出,使用基于深度优先搜索的策略,VF2[14]在此基础上利用结点间的连接性进行剪枝,VF3[15]改进VF2,由此出现更多的剪枝策略,如启发式确定匹配顺序、结点分类. 为了降低候选集的规模,减少冗余的匹配,TurboISO[16] 提出邻居等价类的概念.还有许多算法预先建立关于图的结构索引,以减少搜索空间和优化匹配顺序,如QuickSI[17]、GraphQL[18]、GADDI[19]等,这些算法的优化细节[20-21]各有不同,但基本思路都是通过增强候选集的过滤能力来提升算法的执行效率[22].

随着GPU相关技术的发展,研究者开始尝试寻求子图匹配在GPU上的并行解决方案. Tran等[23]提出GpSM,采用基于边的连接策略,利用生成树和非树结构2次过滤候选集以提升匹配效率. 同样是以候选边为连接单元,GunrockSM[24] 基于Gunrock[25]图计算平台, 采用广度优先的并行处理方式. 不同于基于边的连接实现,Zeng等[26]提出的GPU友好子图匹配算法(GPU-friendly subgraph isomorphism algorithm,GSI)采用基于点的连接策略,并针对图的边标签设计数据结构以提升访存效率. Bonnici等[27]提出GRASS算法,采用混合广度优先和深度优先的方式,通过 GPU并行过滤候选集. 汪洋等[28]提出多编码树结构,使生成的搜索空间树的尺寸减小. 当前子图匹配算法在GPU上的实现主要由过滤和连接2个阶段组成. 在过滤阶段,为每个查询图中的结点确定在数据图中可供匹配的候选集,GpSM利用生成树且分2步过滤候选集,并行性不高;GSI将邻边和邻接点的标签数量编码为签名以方便并行验证,但忽略了结点的所处局部的结构特征,过滤能力不强. 在连接阶段,GpSM由候选点生成候选边,再基于候选边进行连接运算,但这样不能确定中间结果表的大小和写入地址,需要进行重复连接[2326],占用大量线程资源且在时间上带来额外开销.

针对以上挑战和已有算法的不足,本研究提出基于GPU的子图匹配算法GpSI,对过滤和连接的2阶段模型进行优化. 过滤阶段,综合考虑结点局部的数量特征和结构特征,将这些特征编码生成结点签名,利用GPU并行验证,高效过滤候选集;连接阶段,采用基于候选点的连接策略[26],预分配空间并设计高效的集合运算以避免边连接策略因重复连接带来的额外时空开销. 通过在真实数据集与合成数据集上的多个算法对比实验来证明GpSI的优越性.

1. 预备知识

1.1. 子图匹配

定义:子图匹配. 给定查询图 $ Q = {\text{\{ }}{V_q},{E_q},{L_q}{\text{\} }} $,数据图 $G = {\text{\{ }}{V_g},{E_g},{L_g}{\text{\} }}$,其中 $ {V_q} $$ {V_g} $为图的结点集合, $ {E_q} $$ {E_g} $为边集合, $ {L_q} $$ {L_g} $为结点到标签的映射函数. 在 $ Q $$G$间存在单射函数 $ f:{V_q} \to {V_g} $,使得

$ \begin{split} \forall u,v \in {V_q};\; & \exists (f(u) \in {V_g},\;f(v) \in {V_g}) \wedge \\ & ({L_q}(u) = {L_g}(f(u)),\;{L_q}(v) = {L_g}(f(v))) . \\ \end{split} $
(1)

$ (u,v) \in {E_q} \to (f(u),\;f(v)) \in {E_g}. $
(2)

子图匹配算法要求枚举所有映射 $ f $.图1所示,在查询图和数据图之间可以找到2个符合定义的匹配,分别为 ${m_0}$={ $({u_0},{v_0})$, $({u_1},{v_2})$, $({u_2},{v_5})$}、 ${m_1}$={ $({u_0},{v_0})$, $({u_1} ,{v_3})$, $({u_2},{v_5})$} ,其中A、B、C均为结点标签,uivi均为结点.

图 1

图 1   子图匹配示例

Fig.1   Example of subgraph matching


1.2. CUDA模型和GPU架构

CUDA由NVIDIA在2007年推出[29]. 在CUDA模型下,GPU的线程按组织粒度由大到小分为线程格(grid)、线程块(block)以及线程(thread),同一个线程块内每32个线程组织成线程束(warp),工作在单指令多线程(single instruction multiple threads, SIMT)模式下,是GPU最小的调度单元. GPU内部包含一组固定的流式多处理器(streaming multiprocessor, SM),线程块按一定策略被调度到处理器上执行. GPU内存被划分为多个层次和类型,各部分容量和访问延迟均有较大差异. 其中最外层为全局内存(global memory),可供所有的线程访问,大小通常为GB级别,访问延迟在400~600个时间片;其次为每个线程块内的共享内存(shared memory),只能由块内线程访问,大小通常为48 KB,访问延迟为32个时间片;线程块内还设有L1缓存,特性与共享内存类似. GPU上内存总线读写全局内存和L1缓存每次都传输连续的128 B[30],因此对同一个线程束内的线程而言,访问一段连续的内存可以进行合并访存优化,显著降低访存频率从而降低访存延迟.

2. 算法处理框架

图2所示为GpSI的整体处理框架. GpSI按执行顺序可以大致分为过滤和连接2个阶段. 过滤阶段,利用签名确定每个查询点的候选集;连接阶段,基于这些候选集迭代完成查询点的匹配,最后得出匹配结果.

图 2

图 2   GpSI的框架

Fig.2   Framework of GpSI


GpSI先进行过滤阶段的处理: 1)为输入的数据图和查询图中的每个结点生成签名,即一串编码结点局部特征的比特序列. 2)利用签名进行候选集过滤,对每个查询点并行与所有数据点按一定规则进行签名验证. 对某个查询点而言,在这一步可以剔除不可能匹配的数据点. 过滤阶段完成即可确定每个查询点的候选集,以图1 (a)中 ${u_1}$为例,在经过过滤阶段的处理后,得到它在数据图中的候选集 $C({u_1})$={ ${v_2}$, ${v_3}$}. 在连接阶段,按一定顺序连接获得的候选集. 采用基于候选点的连接策略,预分配空间,再在这些临时空间上进行集合运算,完成连接过程. 连接阶段会产生一系列形如图1 (c)所示的匹配表,由于每次增量匹配1个查询点,新匹配表每次扩充1列,行数与集合运算后产生的结果数有关. 当连接阶段完成,最后输出的匹配表即为结果,算法执行完毕.

3. 过滤阶段

3.1. 复合签名

假设在某个正确匹配中,数据点 $v$是查询点 $u$的匹配点,则除了结点标签一致外, $u$的局部特征也一定复现于 $v$的局部特征中,这些特征包括局部的数量特征(如邻居数量)和结构特征. GpSI提出结点的复合签名对这些特征进行描述. 结点的复合签名由数量签名和结构签名2个部分组成. 先对结点的邻居按标签进行分类计数以生成数量签名. 为了方便验证,采用哈希算法将邻居标签映射到不同的桶(buckets)进行统计:数量签名表现为比特序列,它被均分成若干个桶,邻居标签将被分别映射到这些桶内并编码计数. 如图3所示为图1(b)中 $ {v_0} $的数量签名. 若桶大小为4,对于某个桶,无标签映射编码为0000,有1个映射编码为0001,2个映射编码为0011,3个映射编码为0111,4个及以上映射编码为1111. 在具体实现中,桶的长度可依据输入的图数据信息进行调整.

图 3

图 3   数量签名

Fig.3   Quantity signature


仅利用数量签名不能反映结点的局部特征以及有效过滤候选集. 结点和它不超过2跳区域的邻近点可能构成多种结构,如路径和三角形,使用结构签名记录这些结构,可以显著增强候选集的过滤能力. 以图1(b)中的 ${v_0}$为例,图4中从 $ {v_0} $出发,不超过2跳可以找到由标签组成的1条(A,B,A)路径,2条(A,C,B)路径,3条(A,B,C)路径以及2个标签三角形(A,B,C). 如图5所示,结构签名包含若干个桶,被均分为路径签名和三角签名2个部分,对获得的标签序列进行与生成数量签名类似的操作,即对这些序列进行哈希,使之映射到相应的桶中进行编码计数. 在结构签名中,各个桶内的编码方式和数量签名一致,如从 ${v_0}$出发的路径序列(A,B,C)出现3次,则对应桶内编码为0111. 观察到序列的首位都是出发点的标签,这部分将单独验证,因此实现中可将首位省略,只对序列的后2位组合进行哈希计数即可. 在标签三角形序列中,为了避免重复计数,同一个三角形序列严格按标签的次序只计数一次,例如图4中已记录三角形序列(A,B,C)则不再记录序列(A,C,B). 算法1为某个结点 $u$的复合签名生成过程. 行2~3遍历结点 $u$的邻居,生成数量签名;行4~8从点 $u$出发进行1次不超过2跳的广度优先遍历,得到三角形和路径序列,生成对应的结构签名.

图 4

图 4   结点的局部路径

Fig.4   Local paths of vertex


图 5

图 5   结构签名

Fig.5   Structure signature


算法1 生成复合签名

输入:结点 $u \in G$输出:结点签名 $S(u)$   1 $ {\text{init}}(S(u)) $;  2 for each $v$ in $N(u)$:  3   ${\text{GenQuantitySig}}$( $v,{\text{ }}S(u)$);  4 for each $v$ in $N(u)$:  5   for each $w$ in $N(v)$:  6    if $w \in N(u)$:  7     ${\text{GenTriangleSig}}$( $v,{\text{ }}w,{\text{ }}S(u)$);  8    ${\text{GenPathSig}}$( $v,{\text{ }}w,{\text{ }}S(u)$);  9 return $S(u)$;

图6所示,复合签名由数量签名和结构签名2部分拼接而成. 签名的空间占用小不仅能节省GPU的内存,使GPU处理更大规模的图,也能减少后续验证签名的用时. 通常情况下,查询图中的结点标签均来自数据图,有 $|{L_g}| > |{L_q}|$. 为了保证统计的准确性,数量签名的桶数量应为 $|{L_g}|$;结构签名中的路径和三角形序列都可由2个标签组成,考虑可能构成的组合数,桶数量应该分别为 $|{L_g}{|^2}$.$|{L_g}| > > |{L_q}|$时,由于 $|{L_q}|$一般不超过10,增加桶的个数带来的过滤能力增益有限,此时可以牺牲一定的准确性,基于 $|{L_q}|$分配桶数量. 一般来讲,数量签名的桶所占比特序列较长,偏向于记录数量;结构签名中桶的长度较短,偏向于记录种类. 为了节省空间,以上所有类型的桶大小均支持依据图数据的统计信息进行动态调整.

图 6

图 6   复合签名

Fig.6   Composite signature


3.2. 候选集过滤

数据图和查询图的每个点的签名生成后,便可以利用这些签名进行候选集过滤. 虽然复合签名分为若干部分,但过滤候选集采用统一的验证方法:比较各个桶内编码的数值大小,若 $ v \in C(u) $,则 $S(u)$的各个桶内数值应不大于 $S(v)$. 为了方便GPU并行处理,采用按位与运算完成验证. 可以推出, $ \forall u \in {V_q},v \in {V_g} $;若 $ v \in C(u) $,则

$ {L_q}(u) = {L_g}(v) \wedge (S(u)\;\& \;S(v) = S(u)). $
(3)

换言之,作为必要条件,若式(3)不成立,则 $v \notin C(u)$,以此剔除无关的数据点,使得候选集的规模缩小. 相较只考虑数量特征[26],综合利用结点局部的结构和数量特征的复合签名具有更强的过滤能力. 以图1(a)中的 ${u_1}$为例,若只采用数量签名,则过滤阶段后 $C({u_1}) = \{ {v_2},{v_3},{v_4}\} $,只有继续进行连接才能发现 ${v_4} \notin C({u_1})$;若采用复合签名,则过滤阶段后即可确定 $C({u_1}) = \{ {v_2},{v_3}\} $,后续连接阶段的任务量可以认为是各候选集大小的乘积. 复合签名能有效地降低候选集规模,减少连接阶段任务量、提升整体性能,在面对大规模的图时优势明显. 利用签名验证进行候选集过滤适于GPU并行处理,使用并行前缀和算法[30],时间复杂度为 $O(|{V_q}|{\rm{lb}}\;|{V_g}|)$,其中 $|{V_q}|$通常不超过10,时间开销较为理想.

4. 连接阶段

按一定顺序连接查询点的候选集,便可得到最终的匹配结果,算法2为连接阶段的总流程. 优先选取候选集规模 $|C(u)|$最小的查询点加入部分匹配集 ${Q_p}$$M$初始设为起始查询点的候选集;每轮选择与 ${Q_p}$相连且 $|C(u)|$最小的未匹配点 $u'$,调用join函数对 $M$$C(u)$进行连接以生成新匹配表 $M'$;每次连接结束,更新 $M$${Q_p}$;当查询图结点全部匹配完成,返回 $M$为结果,连接过程结束.

算法2 基于候选点的连接   输入:查询图 $ Q $,数据图 $G$    输出:匹配结果表 $M$   1 partial matching query graph ${Q_p} = \emptyset $;  2 for $i$=1 to $|{V_q}|$:  3   if $i$==1:  4    $u' = \arg {\min _u}|C(u)|$;  5    $M = C(u')$, ${Q_p}.{\text{add}}(u')$;   6  else:  7  $ u' = \arg {\min _u}\{ |C(u)||u \notin {Q_p} \wedge N(u) \cap {Q_p}! = \emptyset \} $;  8  new matching table $ M' $= ${\text{join}}(M,{\text{ }}C(u'))$;  9   $M = M'$, ${Q_p}.{\text{add}}(u')$;  10 return $M$;

图7所示,新匹配表的生成是连接阶段的关键步骤. 假定 ${Q_p}$={ $ {u_0} $, ${u_1}$}且部分匹配表为 ${M_1}$,须进行 ${u_2}$匹配,已知 $C({u_2}) = \{ {v_5}\} $. 1)获得 ${Q_m} = N({u_2}) \cap {Q_p}$,即与 ${u_2}$相邻且已匹配的查询点集,为 ${M_1}$的每一行分配1个线程束(warp),在warpi中查询 ${Q_m}$在该行对应匹配的数据点,求得这些数据点邻居数量的最小值并记录下来,即 $ {\text{siz}}{{\text{e}}_i} = \min \;\{ |N({v_j})||{v_j} = {m_i}[u'],u' \in {Q_m}\} $. 2)以 ${\text{siz}}{{\text{e}}_i}$为粒度给warpi在全局预分配空间 $ {\text{bu}}{{\text{f}}_i} $. 例如 ${m_0}$中符合条件的匹配点有 $ {\tilde m_0} $= $\{ {v_0},{v_2}\} $,邻居集合中 $N({v_2})$规模最小,故以 $|N({v_2})|$预分配空间并将 $N({v_2})$载入 ${\text{bu}}{{\text{f}}_0}$. 在这些临时空间 $ {\text{bu}}{{\text{f}}_i} $上,warpi并行地进行集合运算. 以warp0为例,进行 $N({v_2}) - {m_0}$(排除本行中已匹配数据点)、 $N({v_2}) \cap C({u_2})$$N({v_2}) \cap N({v_0})$等运算. 3)将 $ {\text{bu}}{{\text{f}}_{{i}}} $中的结果和 ${M_1}$对应拼接,写入新匹配表 ${M_2}$,完成 ${u_2}$的匹配. 重复上述过程直到所有查询点都完成匹配.

图 7

图 7   生成新匹配表

Fig.7   Generating new matching table


算法3为 ${\text{join}}$函数的执行过程,由于涉及的集合运算多,优化这些运算将加速整个算法的执行. 行7中,由于 ${m_i}$的规模一般不超过10,可以考虑将其缓存至共享内存,直接遍历 $ {\text{bu}}{{\text{f}}_i} $去除 ${m_i}$中结点即可. 行8中,由于 $C(u)$一般规模较大且对所有线程共享,可以将其转换成位图,存于GPU的全局内存或常量内存中,这样不仅空间开销低,且 $O(1)$时间即可判断某个结点是否属于 $C(u)$. 行9~10是对 ${\tilde m_i}$中每个数据点的邻居求交集,该部分执行次数多且运算中涉及的集合规模通常比较大,暴力算法时间开销大,有必要进行优化.考虑到图在GPU上的存储结构. 采用CSR(compressed sparse row)格式[31]进行存储. 不同于传统的邻接表和邻接矩阵的图数据表现形式,CSR具有节省空间、存储结构对GPU友好的优点. 使用CSR, $O(1)$时间即可定位到结点的邻接表,且邻接表都连续存储在一块区域,方便了线程的合并访存.

算法3  ${\text{join}}(M,C(u))$   输入:匹配表 $M$,候选集 $C(u)$    输出:新匹配表 $M'$   1 ${Q_m} = N(u) \cap {Q_p}$;  2 parallel allocate memory:   3   $ {\tilde m_i} = \{ {m_i}[u']|u' \in {Q_m}\} $;  4   ${v_{{s}}} = \min {\arg _v}\{ |N(v)||v \in {\tilde m_i}\}$;  5   ${\text{bu}}{{\text{f}}_i} = N({v_{{s}}})$;  6 parallel set operation:  7   ${\text{bu}}{{\text{f}}_i} = {\text{bu}}{{\text{f}}_i} - {m_i}$;  8   ${\text{bu}}{{\text{f}}_i} = {\text{bu}}{{\text{f}}_i} \cap C(u)$;  9   for each ${v_j}$in ${\tilde m_i}$ except ${v_s}$:  10    ${\text{bu}}{{\text{f}}_i} = {\text{bu}}{{\text{f}}_i} \cap N({v_j})$;  11 allocate memory for new matching table $M'$;  12 parallel link process:  13  link ${m_i}$ with ${\text{bu}}{{\text{f}}_i}$,write to $M'$;  14 return $M'$

为了优化交集运算,生成CSR时对邻接表进行预处理,将每个邻接表内结点按编号从小到大的顺序进行排列,以便二分查找使交集运算时间复杂度显著降低. 如图8所示, $N({v_s})$被初始加载到 ${\text{bu}}{{\text{f}}_i}$中,在所有交集运算的邻居集合中, $N({v_s})$的规模最小. 在线程束并行处理下,即匹配表中的每一行各分配1个warp处理时,和1个邻居集合 $N({v_j})$求交集,迭代 ${{|N({v_s})|}}/{{|{\text{warp}}|}}$轮,其中 $|{\text{warp}}| = 32$. 在每轮迭代中,同个warp内线程ti$N({v_j})$中进行二分查找,验证 $N({v_s})$中的结点是否在 $N({v_j})$出现. 由于所有邻居集合的结点都是按编号有序存放的,当warp中相邻线程在 $N({v_j})$进行二分查找时,访问过的结点在物理内存上有一定程度的邻近性,避免了随机访存,提升了访存效率.

图 8

图 8   交集运算

Fig.8   Intersection operation


综合以上分析,得到算法3中行9~10的时间复杂度为 $O \bigg({{|N({v_s})|}}/{{|{\text{warp}}|}}\displaystyle\sum\limits_{{v_j} \in {{\tilde m}_i},{v_j}! = {v_s}} {{\rm{lb}}\; |N(v{ _j})|} \bigg)$. 在实际数据集中,结点度数普遍大于2,可以证明GpSI提出的以最小邻居数为粒度的空间预分配方法不仅节省空间,在集合运算中也能达到最优的时间复杂度.

引理:给定整数序列 $ 3 \leqslant {N_1} \leqslant {N_2},{N_3},\cdots,{N_k} $(k $ \geqslant $2),给出整数序列 $1\sim k$的排列 $\pi $,那么 $\forall \pi $$N_{\pi[1]} \sum_{i=2}^k {\rm{lb}} N_{\pi[j]}$仅当 $\pi [1] = 1$时取得最小值且最小值与 $\pi [2{\sim}k]$无关.

证明:序列 ${N_1},{N_2},\cdots,{N_k}$已给定,则 $F = \prod\limits_{j = 1}^k {{N_j}} $为定值,对原式进行转化: $N_{\pi[1]}\left(\displaystyle\sum_{j=2}^k {\rm{lb}} \; N_{\pi[j]}\right)=$ $N_{\pi[1]} {\rm{lb}} \;({F}/{N_{\pi[1]}} )$,其中 $N_1 \leqslant N_{\pi[1]} \leqslant {F}/{3}$.$N_{\pi[1]} = N_1$$\pi[1] = 1$时, $N_{\pi[1]} {\rm{lb}}\;( {F}/{N_{\pi[1]}} )$取得最小值,且该最小值与 $\pi[2 \sim k]$无关,证毕.

时间复杂度的相关推导和证明过程中假定的是临时结果 ${\text{bu}}{{\text{f}}_i}$不变,在具体实现中,算法3的行6~10每完成一次集合运算都会即时把不符合要求的数据点从 ${\text{bu}}{{\text{f}}_i}$剔除,以降低临时结果规模,因此实际的时空复杂度都会更低.

负载不均衡不但会导致线程资源的浪费,而且会影响整体执行耗时. 为此,结合GPU的线程模型,采用线程的三级调度策略[32],即在并行场景下,当任务量较大时,优先采用线程块执行;任务量中等时,使用线程束;若仍有剩余则使用线程并行处理. 如算法3的行6~10,若 $ 32 \leqslant |N({v_{\rm{s}}})| < 1\;024 $;优先采用线程束并行处理; $ 1\;024 \leqslant |N({v_{\rm{s}}})| $,优先采用线程块并行处理. 行12~13也可以采用类似调度策略并行将结果写入新匹配表.

5. 实验结果

对本研究提出的算法GpSI进行实验,并对比GPU上先进的算法GSI、基于边连接的算法GpSM和CPU上广泛使用的串行算法VF3. 实验采用真实数据集和合成数据集进行测试. 真实数据集来自斯坦福大规模网络数据集SNAP[33],包括脸书社交圈网络(facebook)、联邦能源委员会邮件通信网络(enron)、地理位置社交网络(gowalla)、DBLP协作网络(dblp)以及美国得州道路网(road),各数据集详细信息如表1所示. 表中,MD为最大结点度数,NV为结点数,NE为边数. 设置相关研究中普遍使用的3个查询图[34]进行实验,如图9所示. 稳定性测试中,采用模型生成或随机游走的方式生成数据图、查询图以验证算法的鲁棒性. 真实数据集上结点一般不带标签,因此预处理阶段进行随机设置,下文若不作特殊说明,数据图中结点标签种类均设定为5. 算法代码均采用C++编写,使用CUDA Toolkit 10.9,操作系统为Ubuntu20.04. CPU为Intel i5-9400,GPU为NVIDIA GTX1650,显存4 GB,拥有896个流处理器,内存为DDR4 16 GB,SSD大小为512 GB. 所有实验均重复10次,以平均值作为实验结果. 算法输出经过Boost-VF2lib[35]提供的子图匹配算法程序的正确性验证.

表 1   子图匹配实验的数据集信息

Tab.1  Data set information of subgraph matching

数据集 NV NE MD 是否幂律图
facebook 4 039 88 234 1 045
enron 36 692 183 831 1 383
gowalla 196 591 950 327 14 730
dblp 317 080 1 049 866 343
road 1 379 917 1 921 660 12

新窗口打开| 下载CSV


图 9

图 9   查询图

Fig.9   Query graph


5.1. 过滤能力测试

在GPU算法中只有GSI基于候选点进行连接,将GpSI与GSI进行候选集过滤能力的对比测试. 连接阶段总是从候选集最小的查询点开始,因此以最小候选集的规模衡量过滤能力. 使用查询图 ${Q_0}$作为输入,结果如表2所示. 可以看出,复合签名过滤能力显著优于GSI,候选集规模更小. 在过滤用时上GpSI也略占优势,主要原因是签名经过精心设计,空间占用比GSI少,减少了每个线程验证过程的循环次数.

表 2   2种算法在不同数据集上的过滤能力测试结果

Tab.2  Filtering ability test results of two algorithms on different datasets

数据集 $\min {\text{|}}C(u){\text{|}}$ t/ms
GpSI GSI GpSI GSI
facebook 647 657 3 4
enron 2211 2429 4 5
gowalla 9299 14197 6 7
dblp 19475 23026 7 11
road 3869 47973 17 22

新窗口打开| 下载CSV


5.2. 执行用时测试

图10所示为GpSI与GSI、GpSM和VF3在各数据集和查询图下的总执行用时比较. VF3在查询图 ${Q_1}$${Q_2}$下用时已远超GPU版本算法,故不再记录; ${Q_2}$在数据图road中找不到匹配,也不作用时统计. 实验结果表明,在总执行用时上,GpSI在所有测试数据集上均优于同类算法,其中比GSI加速了2~10倍,比GpSM加速了最高100倍. 在查询图为 ${Q_0}$${Q_1}$时,查询图的边数比较稀疏,复合签名充分挖掘查询点局部的数量和结构特征,使得GpSI相比GSI和GpSM加速明显. 查询图 ${Q_2}$中的边比较稠密,基于候选边连接的GpSM性能有所提升,由于结点局部数量信息的增加,GSI的过滤能力也得到增强,但GpSI在执行用时上依然优势明显. 得益于高效集合运算和三级调度策略,GpSI在真实世界的幂律图下表现出色. 图10(a)中,当面对稀疏网格图(road)时,结点局部特征缺乏导致GpSM和GSI候选集过滤能力下降,总用时表现不如VF3,但GpSI的复合签名过滤策略使得候选集规模远小于同类算法,在总执行用时上仍然保持巨大优势.

图 10

图 10   算法的执行用时对比

Fig.10   Comparison of execution time for algorithms


5.3. GPU内存占用测试

为了测试算法的内存开销,进行GPU内存占用MGPU测试. 以 ${Q_2}$作为查询图,记录各算法运行时的最大GPU内存占用,结果如图11所示. 可以看出,GpSI的整体内存占用优于GSI、GpSM. 得益于复合签名的高效过滤能力,GpSI的候选集与匹配表的规模比GSI和GpSM的小;复合签名经过精心设计,自身空间占用优于GSI;GpSI连接阶段以最小邻居数预分配空间的策略,使得生成新匹配表时产生的额外空间占用小于GSI.

图 11

图 11   算法的图形处理器内存占用对比

Fig.11   Comparison of graphic processing unit memory consumption for algorithms


5.4. 稳定性测试

为了测试GpSI的稳定性,记录算法随数据图和查询图规模增长时的总执行用时. 数据图规模增长测试中,采用Erdős-Rényi模型[36]生成随机的数据图进行实验,初始时 $N_{\rm{V}}= 5.0 \times {10^4}$$N_{\rm{E}} = 2.0 \times {10^5}$,之后数据图规模线性递增直到 $N_{\rm{V}}= 2.5 \times {10^5}$$N_{\rm{E}} = 1.0 \times {10^6}$,查询图为 ${Q_0}$. 在查询图规模增长测试中,使用Erdős-Rényi模型生成 $N_{\rm{V}}= 1.0 \times {10^5}$$N_{\rm{E}} = 4.0 \times {10^5}$的数据图,另随机生成若干查询图,限定查询图结点的平均度数为3,结点数由6递增到10,实验结果如图12所示,图中,NV, D为数据图结点数,NV, Q为查询图结点数. 由于候选集和匹配表规模庞大,随着数据图规模的增长,GpSM耗时急剧增加,GpSI和GSI的执行用时都维持着线性增长. GpSI有高强的候选集过滤能力和高效的连接策略,在执行用时上始终优于GpSM和GSI,且对图数据规模的增长不敏感,稳定性最好.

图 12

图 12   3种算法的稳定性测试

Fig.12   Scalability test of three algorithms


6. 结 语

本研究提出GPU上的子图匹配算法GpSI,该算法采用过滤和连接的2阶段处理模型. 在过滤阶段,充分利用结点的局部数量特征和结构特征设计复合签名,增强了候选集过滤能力. 在连接阶段,采用基于候选点的连接策略,提出以最小邻居数为粒度的空间预分配方法,设计高效的集合运算,避免了传统方法带来的额外开销,提升了连接效率. 针对图数据的不规则性,在实现上使用多种方式降低访存延迟和均衡线程负载. 在未来研究中,计划面对更大规模的图开展基于多GPU的子图匹配算法的相关研究.

参考文献

WANG J, CHENG J. Truss decomposition in massive networks [C]// proceedings of the VLDB Endowment. [S.l.]: VLDB Endowment, 2012, 5(9): 812–823.

[本文引用: 1]

KAIRAM S R, WANG D J, LESKOVEC J. The life and death of online groups: predicting group growth and longevity [C]// Proceedings of the Fifth ACM International Conference on Web Search and Data Mining. [S.l.]: ACM, 2012: 673–682.

[本文引用: 1]

PÉREZ J, ARENAS M, GUTIERREZ C. Semantics and complexity of sparql [C]// ACM Transactions on Database Systems, 2009, 16: 1-45.

[本文引用: 1]

CHRISTOPHIDES V. Resource description framework (RDF) schema (RDFS) [M]// LIU L, ÖZSU M T. Encyclopedia of database systems. Boston: Springer, 2009: 2425-2428.

ZENG L, ZOU L

Redesign of the gstore system

[J]. Frontiers Computer Science, 2018, 12: 623- 641

DOI:10.1007/s11704-018-7212-z      [本文引用: 1]

YAN X F, YU P S, HAN J W. Graph indexing: a frequent structure-based approach [C]// Proceedings of the 2004 ACM SIGMOD International Conference on Management of Data. [S.l.]: ACM, 2004: 335-346.

[本文引用: 1]

LIU H B, BLOUIN C, KEŠELJ V. Biological event extraction using subgraph matching [EB/OL]. [2022-06-01]. https://ceur-ws.org/Vol-714/ShortPaper03_Liu.pdf.

[本文引用: 1]

GAREY M R, JOHNSON D S. Computers and intractability: a guide to the theory of NP-completeness [M]. [S.l.]: W. H. Freeman and Company, 1979.

[本文引用: 1]

CONTE D, FOGGIA P, SANSONE C, et al

Thirty years of graph matching in pattern recognition

[J]. International Journal of Pattern Recognition and Artificial Intelligence, 2004, 18 (3): 265- 298

DOI:10.1142/S0218001404003228      [本文引用: 1]

LIN H, ZHU X W, YU B W, et al. ShenTu: processing multi-trillion edge graphs on millions of cores in seconds [C]// SC18: International Conference for High Performance Computing, Networking, Storage and Analysis. Dallas: IEEE, 2018: 706-716.

[本文引用: 1]

MENG K, LI J J, TAN G M, et al. A pattern based algorithmic autotuner for graph processing on GPUs [C]// Proceedings of the 24th Symposium on Principles and Practice of Parallel Programming. [S.l.]: ACM, 2019: 201-213.

[本文引用: 1]

KHORASANI F, VORA K, GUPTA R, et al. CuSha: vertex-centric graph processing on GPUs [C]// Proceeding of the 23rd International Symposium on High-Performance Parallel and Distributed Computing. [S.l.]: ACM, 2014: 239-252.

[本文引用: 1]

ULLMANN J R. An algorithm for subgraph isomorphism [J] Journal of the ACM, 1976, 23(1): 31-42.

[本文引用: 1]

CORDELLA L P, FOGGIA P, SANSONE C, et al

A (sub)graph isomorphism algorithm for matching large graphs

[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2004, 26 (10): 1367- 1372

DOI:10.1109/TPAMI.2004.75      [本文引用: 1]

CARLETTI V, FOGGIA P, SAGGESE A, et al

Challenging the time complexity of exact subgraph isomorphism for huge and dense graphs with VF3

[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2018, 40 (4): 804- 818

DOI:10.1109/TPAMI.2017.2696940      [本文引用: 1]

HAN W S, LEE J, LEE J H. TurboISO: towards ultrafast and robust subgraph isomorphism search in large graph databases [C]// Proceedings of the ACM SIGMOD International Conference on Management of Data. [S.l.]: ACM, 2013: 337-348.

[本文引用: 1]

HE H, SINGH A K. Graphs-at-a-time: query language and access methods for graph databases [C]// Proceedings of the 2008 ACM SIGMOD International Conference on Management of Data. [S.l.]: ACM, 2008: 405-418.

[本文引用: 1]

SUN Z, WANG H Z, WANG H X, et al. Efficient subgraph matching on billion node graphs [C]// Proceedings of the VLDB Endowment. [S.l.]: VLDB Endowment, 2012, 5(9): 788-799.

[本文引用: 1]

ZHANG S J, LI S R, YANG J. GADDI: distance index based subgraph matching in biological networks [C]// Proceedings of the 12th International Conference on Extending Database Technology: Advances in Database Technology. [S.l.]: ACM, 2009: 192-203.

[本文引用: 1]

LEE J, HAN W S, KASPEROVICS R, et al. An in-depth comparison of subgraph isomorphism algorithms in graph databases [C]// Proceedings of the VLDB Endowment. [S.l.]: VLDB Endowment, 2012, 6(2): 133-144.

[本文引用: 1]

徐周波, 李珍, 刘华东, 等

基于邻居信息聚合的子图同构匹配算法

[J]. 计算机应用, 2021, 41 (1): 43- 47

[本文引用: 1]

XU Zhou-bo, LI Zhen, LIU Hua-dong, et al

Subgraph isomorphism matching algorithm based on neighbor information aggregation

[J]. Journal of Computer Applications, 2021, 41 (1): 43- 47

[本文引用: 1]

MOORMAN J D, CHEN Q Y, TU T K, et al. Filtering methods for subgraph matching on multiplex networks [C]// Proceedings of the 2018 IEEE International Conference on Big Data. Seattle: IEEE, 2018: 3980-3985.

[本文引用: 1]

TRAN H N, KIM J J, HE B S. Fast subgraph matching on large graphs using graphics processors [C]// Proceedings of the 2015 International Conference on Database Systems for Advanced Applications. [S.l.]: Springer, 2015: 299-315.

[本文引用: 2]

WANG L, OWENS J D. Fast Gunrock subgraph matching (GSM) on GPUs [EB/OL]. [2022-06-01]. https://arxiv.org/pdf/2003.01527.pdf.

[本文引用: 1]

WANG Y Z H, DAVIDSON A, PAN Y C, et al. Gunrock: a high-performance graph processing library on the GPU [C]// Proceedings of the 20th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. [S.l.]: ACM, 2015: 265-266

[本文引用: 1]

ZENG L, ZOU L, ÖZSU M T, et al. GSI: GPU-friendly subgraph isomorphism [C]// Proceedings of the 2020 IEEE 36th International Conference on Data Engineering. Dallas: IEEE, 2020: 1249-1260.

[本文引用: 4]

BONNICI V, GIUGNO R, BOMBIERI N. An efficient implementation of a subgraph isomorphism algorithm for GPUs [C]// Proceedings of the 2018 IEEE International Conference on Bioinformatics and Biomedicine. Madrid: IEEE, 2018: 2674-2681.

[本文引用: 1]

汪洋, 江世杰, 曹宇聪, 等

多编码树GPU并行轴心子图匹配

[J]. 计算机应用, 2022, 42 (1): 132- 139

[本文引用: 1]

WAGN Yang, JIANG Shi-jie, CAO Yu-cong, et al

Parallel pivoted subgraph matching with multiple coding trees on GPU

[J]. Journal of Computer Applications, 2022, 42 (1): 132- 139

[本文引用: 1]

KIRK D. NVIDIA CUDA software and GPU parallel computing architecture [C]// Proceedings of the 6th International Symposium on Memory Management. [S.l.]: ACM, 2007: 103–104.

[本文引用: 1]

NVIDIA: CUDA Toolkit documentation v10.2 [CP/OL]. (2019-11-28)[2022-06-01]. https://docs.nvidia.com/cuda/archive/10.2/.

[本文引用: 2]

ASHARI A, SEDAGHATI N, EISENLOHR J, et al. Fast sparse matrix-vector multiplication on GPUs for graph applications [C]// Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis. New Orleans: IEEE, 2014: 781-792.

[本文引用: 1]

李岑浩, 崔鹏杰, 袁野, 等

面向大图子图匹配的多GPU编程模型

[J]. 计算机科学与探索, 2023, 17 (7): 1576- 1585

[本文引用: 1]

LI Cen-hao, CUI Peng-jie, YUAN Ye, et al

Muti-GPU programming model for subgraph matching in large graphs

[J]. Journal of Frontiers of Computer Science and Technology, 2023, 17 (7): 1576- 1585

[本文引用: 1]

LESKOVEC J. Stanford large network dataset collection [DS/OL]. (2021-09-17)[2022-06-01]. http://snap.stanford.edu/data/.

[本文引用: 1]

REZA T, RIPEANU M, TRIPOUL N, et al. PruneJuice: pruning trillion-edge graphs to a precise pattern-matching solution [C]// Proceedings of the International Conference for High Performance Computing, Networking, Storage, and Analysis. Dallas: IEEE, 2018: 1-17.

[本文引用: 1]

Boost Library: VF2 (Sub)Graph Isomorphism-master [CP/OL]. (2013-04-26) [2022-06-01]. https://www.boost.org/doc/libs/master/libs/graph.

[本文引用: 1]

HU Y F, WANG W J, YU Y

Graph matching beyond perfectly-overlapping Erdős-Rényi random graphs

[J]. Statistics and Computing, 2022, 32: 19

DOI:10.1007/s11222-022-10079-1      [本文引用: 1]

/