[论文笔记] Gunrock: A High-Performance Graph Processing Library on the GPU

Gunrock: A High-Performance Graph Processing Library on the GPU

Gunrock: GPU 上的高性能图处理库 [Paper] [Code]
PPoPP’16

摘要

Gunrock, 针对 GPU 的高层次批量同步图处理系统.

  • 采用了一种新方法抽象 GPU 图分析: 实现了以数据为中心(data-centric)的抽象, 以在结点或边的边界(frontier)上的操作为中心.
  • 将高性能 GPU 计算原语和优化策略与高级编程模型相结合, 实现了性能与表达的平衡.

1. 介绍

提出了 Gunrock, 基于 GPU 的图处理系统, 通过高层次的、以数据为中心的并行编程模型在计算图分析时提供高性能.
以数据为中心的模型的关键抽象是边界(frontier), 图中当前感兴趣的边或结点的子集.
Gunrock 的所有操作是批量同步的, 并对边界进行操作, 通过计算其中的值或从中计算新边界.

高并行图处理系统的主要挑战: 管理工作分配的不规则性.
Gunrock 将负载均衡和工作效率策略融入其核心, 而对编程者隐藏.

本文贡献:

  • 为图操作提出了一种新的以数据为中心的抽象, 允许编程者在高层次抽象上开发图基本算法(graph primitive, 图原语)的同时提供高性能.
    该抽象能够将有益的优化(内核融合、推拉遍历、幂等遍历和优先级队列)结合到实现的核心中.
  • 设计并实现了一组简单灵活的 API, 可以在高层次抽象上表达广泛的图处理原语.
  • 描述了几种针对内存效率、负载均衡和工作负载管理的 GPU 特定优化策略来共同实现高性能.
    实现了与硬件专用实现相当的性能, 并显著优于之前的可编程 GPU 抽象.
  • 对图基本算法进行了详细的实验评估, 并与几种 CPU 和 GPU 实现进行了性能比较.

2. 相关工作

  1. 单节点 CPU 系统
  2. 分布式 CPU 系统
  3. 特定于图基本算法的 GPU 硬件底层实现
  4. 用于图分析的高层次 GPU 编程模型

2.1 单节点和分布式 CPU 系统

2.2 专用并行图算法

2.3 高层次 GPU 编程模型

3. Gunrock 抽象与实现

3.1 Gunrock 的抽象

Gunrock 针对可表示为迭代收敛过程的图操作.

Gunrock 的抽象专注于操纵数据结构, 即表示激活参与计算的图子集的结点或边的边界.
同时支持结点边界和边边界, 并可以在同一个图基本算法中进行切换.
操作边界的批量同步"步骤"(由一系列步骤构建图算法): advance(推进)、filter(过滤)、compute(计算)

  • Advance(推进): 通过访问当前边界的邻居从当前边界生成一个新边界.
  • Filter(过滤): 根据编程者指定的标准选择当前边界的子集, 从当前边界生成一个新边界.
  • Compute(计算): 由编程者指定对当前边界中所有元素(结点或边)的操作, 然后由 Gunrock 在所有元素上并行执行该操作.

在这里插入图片描述

3.2 可替代的抽象

在这里插入图片描述

3.3 Gunrock API 及其内核融合优化

Gunrock 程序指定的三个组件:

  • problem: 提供图拓扑数据和特定于算法的数据管理接口
  • functors: 包含用户定义的计算代码并暴露内核融合机会
  • enactor: 图算法的入口点并将计算指定为一系列具有用户定义的内核启动设置的 advance 和/或 filter 的内核调用

Gunrock 将其计算步骤公开为在编译时集成到 advance 和 filter 内核中的 functor, 以实现类似(基于硬件底层实现的算法)的效率.
支持应用于 {edges, verteices} 的 functor, 并且要么返回一个布尔值(“cond” functor), 用于过滤(filter 阶段); 要么执行计算(“apply” functor).
在这里插入图片描述

Gunrock 数据结构:

  • 每个结点和每条边的数据表示为阵列结构(structure-of-array, SOA)数据结构
  • 图数据结构: 使用压缩稀疏行(CSR)格式的稀疏矩阵, 允许用户选择仅边列表的表示(无边数据)

3.4 工作负载映射和负载均衡详情

Gunrock 将之前应用于单个硬件底层实现的 GPU 图基本算法的两种工作负载分配和负载均衡策略推广到 Gunrock 的 advance 操作.

每个线程细粒度: 将一个边界结点的邻接表映射到一个线程.

  • 将所有邻接表偏移加载到共享内存
  • 使用 CTA 来协同处理邻接表中每条边上的操作
  • 使用结点切割(vertex-cut)来划分邻接表由多个线程处理
  • 适合具有相对均匀分布的大直径图

每个 warp 和每个 CTA 粗粒度: 根据邻接表大小将其分为三类, 然后使用针对该大小的策略单独处理每个类别.

  • 三种邻接表大小: (1) 比 CTA 大; (2) 大于 warp(32线程) 但小于 CTA ; (3) 比 warp 小
  1. 先将边界的一个子集分配给一个 block, 其中每个线程有一个结点.
  2. 拥有大列表结点的线程决定对整个块的控制
  3. block 中所有线程协同处理获胜者结点的邻接表, 直到所有大列表结点处理完
  4. 每个 warp 中线程开始类似过程处理邻接表为中等大小的所有结点
  5. 使用每个线程细粒度工作负载映射策略处理剩余结点

在这里插入图片描述

负载均衡划分: 将边组织成等长的分块(chunk), 并将每个分块分配给一个 block.

  • 使用排序搜索对分块的索引和扫描的边偏移队列进行映射.
  • 处理结点邻接表时使用二分搜索找到要处理结点的 ID.

在这里插入图片描述

Gunrock 对邻接表较小的结点使用细粒度动态分组策略; 对邻接表较大的结点使用粗粒度负载均衡策略, 其中边界大小小于设置的静态阈值时在结点上使用粗粒度负载均衡, 否则(大于阈值)则在边上使用粗粒度负载均衡.

3.5 Gunrock 的优化

Gunrock 以数据中心的抽象和关注操作边界, 适合将现有和新的替代方案和优化的集成.

幂等与非幂等操作:

  • 幂等操作: Gunrock 的 filter 步骤可以减少输出边界的冗余条目
  • 非幂等操作: 在内部使用原子运算保证每个元素在输出边界中只出现一次

Push 和 Pull 遍历:
Gunrock 不仅支持 Push, 还支持 Pull.
Gunrock 在内部将边界转换为结点位图, 生成所有未访问结点的新边界, 然后使用 advance 步骤来从这些结点的前驱结点中进行"Pull"计算.

优先队列:
Gunrock 允许用户定义优先级函数来将输出边界组织为"远"和"近"两种切片.
Gunrock 在接下来的处理步骤中先只考虑近切片, 并将不符合的新元素添至远切片, 直至近切片处理完; 再对远切片进行操作.

4 应用

在这里插入图片描述

4.1 广度优先搜索 (BFS)

4.2 单源最短路径

4.3 中介中心性 (Betweenness Centrality)

4.4 连通分量标记

4.5 PageRank 和其他结点排名算法

5 实验和结果

性能: Table 2, Table 3, Figure 7,
在这里插入图片描述
warp 效率: Table 4
优化策略带来的性能提升: Figure 8


笔者总结

本文的核心在于提出了基于 GPU 的以数据为中心的并行编程模型来对边界进行操作 的图处理系统, 并提出了几种工作负载映射和负载均衡的 GPU 特定优化策略.
Gunrock 属于 GPU 图计算系统.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/126042.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机房运维管理软件不知道用哪个好?

云顷网络还原系统V7.0是一款专业的机房运维管理产品,基于局域网络环境,针对中高端机房中电脑运维管理需求所设计开发的。网络还原系统软件通过全面的规划和设计,遵从机房部署、使用到维护阶段化使用方式,通过极速网络同传/增量对拷…

智能电话机器人的出现,能够解决哪些问题?

经济的繁荣与高速的发展,使得电销这个方式快速地融合在房地产与金融投资等大部分行业上。在电销人员与客户的沟通上,难免会出现很多问题,毕竟所面对的客户都是各行各业,他们有着不同的经历和身份。 对于时常需要处理客户投诉、安…

2023数模国赛C 题 蔬菜类商品的自动定价与补货决策-完整版创新多思路详解(含代码)

题目简评:看下来C题是三道题目里简单一些的,考察的点比较综合,偏数据分析。涉及预测模型和运筹优化(线性规划),还设了一问开放型问题,适合新手入门,发挥空间大。 题目分析与思路: 背景&#x…

MJ绘制「酱香拿铁」可爱壁纸;LLM产品团队招聘预告;FlowGPT提示词大赛第3季;台大深度学习音乐分析与生成最新课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 蹭「酱香拿铁」热点的Midjouney绘图创意,好可爱的手机壁纸 小红书作者 美学孤诣 使用 Midjourney 制作了「上个茅班」的手…

Emgu调用摄像头

1,安装EMgu 2,调用摄像头 public FaceLoad(){InitializeComponent();try{capture new Capture();capture.Start();//摄像头开始工作capture.ImageGrabbed frameProcess;//实时获取图像}catch (NullReferenceException excpt){//MessageBox.Show(excpt.Message);}}…

原生JavaScript+PHP多图上传实现

摘要 很多场景下需要选择多张图片上传&#xff0c;或者是批量上传以提高效率&#xff0c;多图上传的需求自然就比较多了&#xff0c;本文使用最简单的XMLHttpRequest异步上传图片。 界面 上传示例 代码 index.html <!DOCTYPE html> <html><head><titl…

【C++ • STL】一文带你走进string

文章目录 一、STL简介二、标准库中的string类三、string类的常用接口说明2.1 string类对象的常见构造2.2 string类对象的访问及遍历操作2.2.1 元素访问2.2.2 迭代器 2.3 string类对象的容量操作2.4 string类对象的修改操作2.5 string类非成员函数 四、总结 ヾ(๑╹◡╹)&#x…

Docker 的分层文件系统

1 分层文件系统 UnionFS 联合文件系统 bootfs&#xff1a;boot file systemrootfs&#xff1a;root file system 分层文件系统 Docker镜像都是只读的&#xff0c;当容器启动时&#xff0c;一个新的可写层被加到镜像的顶部&#xff0c;这一层就是我们通常说的容器层&#xf…

2023高教杯数学建模1:ABC题目+初步想法

2023 ABC题目初步想法 写在最前面A题&#xff1a;定日镜场的优化设计问题1&#xff1a;建模将其抽象为数学公式问题2&#xff1a;固定部分参数&#xff0c;约束条件下的局部最优化问题可尝试方法 问题3&#xff1a;约束条件下的局部最优化问题附录&#xff1a;相关计算公式参考…

LeetCode 1004.最大连续1的个数

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 硬往题目介绍上边去想的话其实非常困难&#xff0c;如果换种方式思考就会简单许多。 若我们将思想转化为&#xff0c;找出最长的子串(里面含有的0的数量最大为k)&#xff0c;然后返…

ipad触控笔有必要买原装吗?开学季ipad2023手写笔推荐

随着开学新学期的开始了&#xff0c;而平板电脑也开始在学校里流行了起来&#xff0c;这也给学生们带来了更多的便利。而苹果的原装电容笔&#xff0c;尽管功能很强&#xff0c;但是因为它的价格比较贵&#xff0c;要是你仅仅只是用来做学习和记录笔记的话&#xff0c;所以在国…

结构方程模型SEM、路径分析房价和犯罪率数据、预测智力影响因素可视化2案例...

原文链接&#xff1a;http://tecdat.cn/?p25044 在本文&#xff0c;我们将考虑观察/显示所有变量的模型&#xff0c;以及具有潜在变量的模型&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 1 简介 第一种有时称为“路径分析”&#xff0c;而后者有时称为“测…

这应该是最全的机器学习模型可解释性的综述

模型可解释性方面的研究&#xff0c;在近两年的科研会议上成为关注热点&#xff0c;因为大家不仅仅满足于模型的效果&#xff0c;更对模型效果的原因产生更多的思考&#xff0c;这样的思考有助于模型和特征的优化&#xff0c;更能够帮助更好的理解模型本身和提升模型服务质量。…

【LeetCode-中等题】22. 括号生成

文章目录 题目方法一&#xff1a;递归&#xff1a;方法二&#xff1a;递归回溯 题目 方法一&#xff1a;递归&#xff1a; 递归入口 空子结果集&#xff0c;左括号数目&#xff08;初始为0&#xff09;&#xff0c;右括号数目&#xff08;初始为0&#xff09; 递归出口 若左括…

【数字通信原理】笔记(持续更新ing)

通信原理学习笔记&#xff0c;课程见b站: 由于教材不同&#xff0c;我们的课程使用的是《数字通信原理》主编:李白萍 版本&#xff0c;因此此笔记以我们的教材为主整理up主的笔记。 详情见:通信原理 文章目录 第一章 绪论1. 通信的基本概念2. 信息的量度3. 通信系统的性能指标 …

用C语言实现牛顿摆控制台动画

题目 用C语言实现牛顿摆动画&#xff0c;模拟小球的运动&#xff0c;如图所示 拆解 通过控制台API定位输出小球运动的只是2边小球&#xff0c;中间小球不运动&#xff0c;只需要固定位置输出左边小球上升下降时&#xff0c;X、Y轴增量一致。右边小球上升下降时&#xff0c;X、…

了解静电消除器离子风嘴的作用

离子风嘴在工业用途中很广泛。属于用压缩气系列的除静电的一种设备。具有安装简单、性能稳定、风速强劲、除静电迅速的特点。 离子风嘴可以产生许多的带着有正电荷负电荷的气体&#xff0c;被压缩气吹出&#xff0c;可以把设备上带的电荷中和掉。当设备表面上带有的电荷为负电荷…

索尼 toio™ 应用创意开发征文 | 如何用Python控制Q宝进行机器人擂台赛

你是否曾经想过&#xff0c;如果能用编程来控制真实的物体&#xff0c;那该有多有趣&#xff1f;如果能让一个小方块按照你的指令来移动、旋转、闪烁&#xff0c;那该有多酷&#xff1f;如果能让一个小方块和其他小方块互动&#xff0c;那该有多神奇&#xff1f;这些想法&#…

软件测试/测试开发丨跨平台 api 对接 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27139 跨平台 api 对接 测试平台需求 稳定 功能 调用脚本报告获取分布式支持 API 调用 开源 Jenkins 环境准备 Jenkins 满足所有调度平台的需求 需…

MindFusion.Diagramming for ASP.NET MVC 4.2 Crack

ASP.NET MVC 4.2 的 MindFusion.Diagramming 添加对多个图表页面和选项卡式图表视图的支持。 2023 年 9 月 8 日 - 16:57新版本 特征 多个图表页面-添加了DiagramDocument 类&#xff0c;它表示图表页面或工作表的集合。 可以将新页面添加到文档中&#xff0c;并且可以删除或重…