图上的并行处理 Parallel Processing of Graphs
Graph
本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph。1.5h的talk,听完自觉意犹未尽。本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西能Match。这里记录了一些笔记与各位分享,希望各位园友一起跟着邵斌老师来感受一下Graph的魅力。
Lecture是以三个领域的对比娓娓道来的:Graph、Image与Graphics。直观上讲,Image象征图像处理,Graphics则是计算机图形学。
那么,Graph是什么呢?它其实一点也不神秘。对大多数程序员来说,它可能要比前两者更亲切,因为大部分人都曾在数据结构书中见过它。比如著名的七桥问题,抽象为图的结构,就是这样的:

这里的Graph,我们用图谱来称呼它可能更为合适。和图像图形相比,它显得更抽象一些,所以概括能力也更强:我们可以说一个社交网络是一张图谱,一个人物关系也是一张图谱,图谱在我们生活之中无处不在。引用一句充满哲学意味的话来形容就是:“万物之间皆有联系”。万物组成了一张大大的图谱,每个人都是其中的一个结点。粗浅地了解一下图谱的基本概念以后,就开始进入本次talk的主题。
Challenges
我们在处理大规模的图谱时,会遇到各种各样的挑战,包括但不仅限于以下:
- 图的多样性
由于实体和关系的复杂性,图的多样性也是必然事件。笔者以为,图的多样性作为挑战之一,主要是因为它给建设统一的图谱处理系统带来了巨大的困难。不同的图谱依赖的数据特点不一,对于不同的图谱需要的处理方法即使相似,但也还是有不小差异。 - 计算的多样性
在图谱处理的背后是大量的计算,所以计算对图谱的处理有很重要的影响。丰富的操作类型决定了多种多样的计算模式,比如:有Online的查询处理,也有Offline的数据分析,不同的操作对应着不同的计算方式,这些都是在构建图谱时所需要面对的challenge。 - 图的规模
如果一个任务的计算规模很大,那么我们可以把它分成若干个子任务,在不同的机器上分别跑每个子任务。当每个子任务顺利完成后,我们把子任务的结果汇总合并,就可以得到原任务的结果了。这是传统的做法,也就是MapReduce的大致思路。然而在面对图时,这样的办法就不是很奏效了。最大的困难之处在于:图很难切割。MapReduce是分而治之,但图的处理在第一步上就栽了个跟头。
Design Principles
下面我们来介绍一下在设计一个系统时用到的一些通用的设计准则。
No one size fits all
第一条,也是非常重要的一条设计准则:There is no one-size-fits-all system. What is one size fits all?
没有任何一个系统是可以放之四海而皆准的。当然,现有的系统当然是能够处理图的,从这一方面讲,图这个东西就像链表,数组等,只是一种数据结构,没有什么特别的地方。但是,能够处理只是最基本的功能,我们这里所说的“皆准”指的是:对于不同的数据结构有大致相同的处理性能。
但我们目前分层的体系结构中,在处理图和处理其他数据结构的速度上会有巨大的差异。这种差异主要来源于图区别于其他的一些特性,这些特性恰恰与分层体系结构的设计理念产生了冲突。
Random Access
有计算机基础的同学应该都知道局部性原理。它强调了CPU访存时的一大特性:所访问的存储单元总趋向于在一小块连续区域【更完整准确的解释戳这里】。这样就意味着,当我们访问了一块数据后,接下来一段时间内的活跃数据将是这块数据周围的数据。既然我们可以预测活跃数据,那我们就希望把这些活跃数据预取到访问速度最快的存储器中,以此来减少平均访问数据的时间,这样做代价又小,效果又好。于是,Cache出现了。
但是想象一下,如果我们要对一个图遍历操作,就会在大量的结点之间跳来跳去。图的结构决定了在遍历时是真正的随机存储访问,局部性很弱。在这种局部性概念极度弱化的场景下,一个结点相邻的存储数据刚取到Cache里,跳跃一个相邻结点可能会命中Cache,但再跳跃一个结点,就很难继续命中Cache了。这是制约图处理速度的很重要的一部分原因。
当然,笔者认为,存在大量先验知识的情况下,我们做一些对图结构友好的Cache优化也是可以的。比如统计概率上关联更深的结点,把它们在内存布局上调整靠近,以满足Cache预取的本意(访问最频繁的数据放在最快的存储器中)。
Hard to Divide
之前也提到了,传统的MapReduce无法在图的处理上很好work的主要原因就是图很难Divide。所以也就没有什么高效的分治算法,不好做Partition。
Data Driven
在图谱中,最重要的部分就是支撑图谱的数据。不同的数据组织对图谱的效率影响很大,不仅仅只有算法才会影响图处理的效率。
Tradeoff
我们要做的是一个可work的系统,而不是一个只能供观赏的art。所以在设计一个系统时不能总追求理想化的完美,总要考虑一些 Tradeoff。在图处理的问题上就有一些Tradeoff值得我们考虑:
- 要支持online query, offline analytic, 或者两者都支持?
- 要针对吞吐量(throughput),还是在响应时间(response time)上做优化?
- scale "out" 还是 "up"?
- 是否需要事务支持?
在online or offline的选择上,online查询更加注重响应速度,而offline分析则更加注重吞吐量。通常意义来说,online查询更加难以优化。我们上面提到了,在图处理时,数据存取局部性较弱,很难普遍提高响应速度。
图上的并行处理 Parallel Processing of Graphs的更多相关文章
- 【ARL】Parallel Processing of Graphs
Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...
- [讲座] Parallel Processing of Graphs
Graph 本次学术前沿讲座由邵斌老师主讲,标题已经揭示了主题:Graph.1.5h的talk,听完自觉意犹未尽.本来以为是一节自己没接触过的图形学的talk,没想到讲的很多内容都跟自己学过的很多东西 ...
- 论文解读《The Emerging Field of Signal Processing on Graphs》
感悟 看完图卷积一代.二代,深感图卷积的强大,刚开始接触图卷积的时候完全不懂为什么要使用拉普拉斯矩阵( $L=D-W$),主要是其背后的物理意义.通过借鉴前辈们的论文.博客.评论逐渐对图卷积有了一定的 ...
- Lorenzini:Laplacian与图上的黎曼-罗赫定理
前两天去听了一下搞代数几何的Dino Lorenzini在交大的两场讲座(“On Laplacian Of Graphs and Generalization”,“Riemann-Roch Theor ...
- 2021.11.14 CF1583E Moment of Bloom(LCA+图上构造)
2021.11.14 CF1583E Moment of Bloom(LCA+图上构造) https://www.luogu.com.cn/problem/CF1583E 题意: She does h ...
- yii2组件之多图上传插件FileInput的详细使用
作者:白狼 出处:http://www.manks.top/yii2_multiply_images.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...
- [python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上
将沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上 原理:python读取前一次处理完的计算5日后涨跌幅输出的csv文件 文件名前加"[paint]" 安照通达信的画图文件和板 ...
- matlab 将多个盒图放在一张图上
1.boxplot 将多个盒图放在一张图上 x1 = normrnd(5,1,100,1)';x2 = normrnd(6,1,200,1)';X = [x1 x2];G = [zeros(size( ...
- ajax 异步插入图片到数据库(多图上传)
额 大概就这么个样子...截个图 点浏览 选择几张图片 选择完了 确定一下 然后插入数据库 同时在页面中显示插入的图片,代码 也没啥.看下 index.php <html><hea ...
随机推荐
- HTML列表简单介绍
1.无序列表 使用标签:<ul>,<li> 属性:disc,circle,square 2.有序列表 使用标签:<ol>,<li> 属性:A,a,I,i ...
- React学习笔记①
三种导出方式 export let num = 1://1 let num2 = 2://2 export {num2};//2 export default {default}//3 三种导入方式 ...
- android studio打印
写入打印语句 System.out.println("hello furong"); 添加打印过滤 指定过滤规则 Filter Name:随便写 Log Tag:日志标志 Log ...
- vagrant 无法挂载共享目录
Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem " ...
- 购买了一台阿里云ECS后安装Java项目运行环境
在docker等虚拟化技术大行其道的今天,我原本也想在我买的ECS服务器里全系使用docker技术,只可惜在我尝试后发现我的ECS配置不够高,整个服务器卡到爆炸,无奈只能使用最原始的方式. 我买的服务 ...
- Ubuntu中wine程序安装windows软件中文乱码如何解决
1.安装wine sudo apt install wine 2.安装中文程序方法 下载exe文件 在命令行执行 wine 文件名.exe 3.中文乱码原因分析 查看/home/用户名/.wine/d ...
- 《linux就该这么学》课堂笔记05 管道符、通配符、转义、vim编辑器
vim编辑器 三种模式的操作区别以及模式之间的切换方法 命令模式:控制光标移动,可对文本进行复制.粘贴.删除和查找等工作. 输入模式:正常的文本录入. 末行模式:保存或退出文档,以及设置编辑环境. 表 ...
- Letsencrypt.org CA免费证书生成
Letsencrypt.org CA免费证书使用 Let's 支持多中客户端,这里使用acme.sh客户端配置免费证书. acme.sh优点: github官方地址 纯用Shell(Unix外壳)语言 ...
- windows系统获取进程的pid号并终止
,,,* delims= " %a in ('tasklist ^| findstr "AutodeskDesktopApp.exe"') do (set commitd ...
- ELK快速入门(三)logstash收集日志写入redis
ELK快速入门三-logstash收集日志写入redis 用一台服务器部署redis服务,专门用于日志缓存使用,一般用于web服务器产生大量日志的场景. 这里是使用一台专门用于部署redis ,一台专 ...