首页 > 其他分享 >Efficient GPU-Accelerated Subgraph Matching

Efficient GPU-Accelerated Subgraph Matching

时间:2023-07-09 19:12:38浏览次数:26  
标签:候选 匹配 Efficient BFS Accelerated 过滤 邻居 GPU

Efficient GPU-Accelerated Subgraph Matching

总结

核心在利用GPU并行计算,为此设计了更适合GPU查询的数据结构,并混合BFS-DFS(先广度过滤再深度匹配)实现更好的时空复杂度

动机

现有的算法都是先过滤再枚举。常规的CPU算法一次只能计算一个点,而现有的最好的GPU算法难以动态维护候选集,有些过滤步骤任然需要在cpu上进行等等,效率上仍然有优化空间。此外,广度优先遍历也导致他们的空间复杂度很高、BFS策略需要大量的内存访问策略,而显存的延迟又会比内存高。为此,文章针对GPU优化实现了更好的子图匹配算法.

基本思路

  1. 设计新的数据结构(Cuckoo tries)实现更高效的边插入和删除来辅助过滤过程,以及更高效的随机邻居访问辅助实现枚举过程。
  2. 使用index而不是原图
  3. 基于新数据结构设计了GPU上的三步并行剪枝
  4. 混合BFS-DFS,及广度优先分组,深度优先匹配,从而减少内存占用

Cuckoo tries有三层,哈希表、offsets和邻居集。查询时,每个线程都可以在顶层的哈希表中找一个点,再在最后一层找不同的邻居。

img

img

第一层的\(v_1\), \(v_2\)是\(u_0\)的候选点。然后\(v_1\)有三个邻居,把他们根据度进行排序,0号开始的前两个满足,映射得到\(v_5\), \(v_6\),也就是\(u_2\)的候选点。通过这样的结构来进行点的匹配搜索。后面还会将这些结果矩阵化。

问题定义

使用点有标签的图,Q为查询图(小),G为数据图(大)。最终目的是确定两图之间的点匹配情况。
定义wedge,及u'-u-u'',包含两边三点的一个开三角
以前的方法是做点的候选集合C(u)(看后面的伪代码还是用到了点候选),这里设立查询图的边候选合集R(u, u'),并且其中的元组t(v, v')可以找到数据图中的对应:\(e(v, v') \in E(G)\)。
定义R(u, u')中的v的邻居集为N(v, u, u'),也就是只在这个集合内的邻居集合。
\(\phi\)表示匹配顺序,排在u之前的点集为\(N_+(u)\),之后的是\(N_-(u)\)

伪代码

GPU上BFS匹配部分:

img

  1. 先生成候选集和排序,再把排序最靠前的放入匹配集M中(排序是如何初始化的?)
  2. 不断地将排序下一个点进行匹配。具体说是之前那些高排位的点的候选点的邻居以及当前点的候选点集,再提出最小集合。最后判断最小集合的点是否在大的候选集里,是就加入

过滤部分:
img

其实就是建立Cuckoo Tries的过程。每次取一个点,比较标签和邻居。其中的NLC是邻居标签向量(每有一个邻居有标签n,则在n维+1)。

GPU上的DFS部分:
img

利用递归实现广度优先。

GPU上两部分合并:
img

会先用BFS,做一波匹配,再用DFS进行进一步的匹配

数据集

img

实验

能够解决的匹配数量
img

效率
img

空间占用
img

过滤效果
img

加速效果
img

可拓展性
img

标签:候选,匹配,Efficient,BFS,Accelerated,过滤,邻居,GPU
From: https://www.cnblogs.com/yujianke100/p/17539180.html

相关文章

  • GPU扫盲
    前言相信对于软件工程师来说,CPU并不陌生.人工智能以及机器学习带火了GPU.经常听到的就是,GPU计算比CPU快,但具体是怎么快的却从未刨根问底.之前在听到GPU的时候,我有过这样的疑问:GPU是什么?为什么比CPU快?快在哪里?如果各方面碾压那CPU不就淘汰了?是否可以基于GPU......
  • 从0开发WebGPU渲染引擎:开篇
    大家好,本系列会从0开始,开发一个基于WebGPU的路径追踪渲染器,使用深度学习降噪、DLSS等AI技术实现实时渲染;并且基于自研的低代码开发平台,让用户可以通过可视化拖拽的方式快速搭建自定义的Web3D引擎目录回顾目前的技术积累为什么要从0开发WebGPU渲染引擎?下一步回顾目前的技术积累......
  • 大模型复现实践记录-在linux环境4090GPU(24G)
    chatglm-6btiger-7b......
  • Unreal Engine4 GPU崩溃或3D设备丢失的解决方案
    起因:UnrealEngine4在渲染时报错GPU崩溃或3D设备丢失解决办法:regedit 打开注册表在以下2个路径下新建 DWORD(32-bit)Value命名为  TdrDelay,并修改数值为:60(十进制)Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDriversComput......
  • 大连人工智能计算平台——华为昇腾AI平台——高性能计算HPC的异构计算——CPU和GPU的
    好消息,居然有经费了,账号可以接着用了,可以接着玩超算了。   ==========================================================......
  • 二项式系数 BINOMIAL COEFFICIENTS
    基本恒等式BASICIDENTITIES符号\({\dbinom{n}{k}}\)就是二次项系数,将此符号读作“\(n\)选取\(k\)”。这种常用说法来源于它的组合解释——从一个有\(n\)个元素的集合选取\(k\)个元素做成子集的方法数。嗯,显然有\({\dbinom{n}{k}}=\dfrac{n(n-1)...(n-k+1)}{k(k-1)......
  • Linux 6.5增加对高通开源GPU Adreno 690的支持
    即将推出的Linux 6.5内核将把对高通Adreno690GPU的支持添加到开源的MSM内核图形/显示驱动程序中。A690主要用于骁龙8cx第三代(SC8280XP)平台,而联想ThinkPadX13s笔记本电脑和其他硬件也采用了该平台。新的支持将包含近200行代码,并超过现有Adreno600系列硬件的支持。此次......
  • Linux 6.5增加对高通开源GPU Adreno 690的支持
    即将推出的Linux 6.5内核将把对高通Adreno690GPU的支持添加到开源的MSM内核图形/显示驱动程序中。A690主要用于骁龙8cx第三代(SC8280XP)平台,而联想ThinkPadX13s笔记本电脑和其他硬件也采用了该平台。新的支持将包含近200行代码,并超过现有Adreno600系列硬件的支持。此次......
  • Linux 6.5增加对高通开源GPU Adreno 690的支持
    即将推出的Linux 6.5内核将把对高通Adreno690GPU的支持添加到开源的MSM内核图形/显示驱动程序中。A690主要用于骁龙8cx第三代(SC8280XP)平台,而联想ThinkPadX13s笔记本电脑和其他硬件也采用了该平台。新的支持将包含近200行代码,并超过现有Adreno600系列硬件的支持。此次......
  • efficienthrnet读取H-2yaml文件
    代码读取配置文件创建的网络['features.0.1.weight:torch.Size([24,3,3,3])','features.0.2.weight:torch.Size([24])','features.0.2.bias:torch.Size([24])','features.1.conv.0.1.weight:torch.Size([24,1,3,3])','features.1.......