首页 > 其他分享 >cs149笔记并行图计算

cs149笔记并行图计算

时间:2022-11-25 17:01:39浏览次数:47  
标签:cs149 并行 vertex rank 算法 笔记 计算 磁盘 更新

Parallel Programming on Graphs

这些课主要讲了关于图并行算法,包括pagerank等算法。

PageRank

PageRank 算法可以见https://en.wikipedia.org/wiki/PageRank#math_2

\[R[i]=\frac{1-\alpha}{N}+\alpha \sum_{j \text { linksto } i} \frac{R[j]}{\text { Outlinks }[j]} \]

graph lab实现

image-20221125124137531

我没有使用过graphlab这个库,但是我猜测主要是,实现三个接口。

gather用于实现pagerank的正向计算,也就是计算某个vertex的所有入边能够提供的rank贡献。

apply用于更新当前点的rank值,也就是使用公式将gather的结果进行计算。

scatter有点类似于反向更新,即当前vertex的rank值更新之后,同时去更新其邻居的值。(这里scatter_edges 返回NO_EDGES,意味着不需要更新其邻居)

这个实现的算法如何收敛?教授抛出的这个问题,我开始想法是直接执行多轮迭代就是可以收敛吗?但是其实还有更好的办法。

graphLab还提供了这个signal的功能,意味着将当前vertex加入到任务池中,或者说工作队列中。

基于signal算法,可以将外圈的迭代放到算法的执行中。使用一个count标识执行的轮数。如果小于10轮,那么将当前点放入到工作队列中继续执行。

image-20221125124854489

但是还可以利用scatter,如果某个点的rank值进行了更新,那么就将其邻居vertex进行signal加入到工作队列。

image-20221125125357350

并行BFS

这里教授使用了Ligra作为了例子

image-20221125142457708

我上github一看,这个项目基本上已经死了。还有腾讯开源的图计算框架柏拉图也死了,有点好奇,这些图计算框架是现在都不做了,还是大公司当做自己的商业机密不在开源?

image-20221125141555174

每次利用frontier中的节点进行遍历,并行更新frontier,迭代执行EDGEMAP直到遍历所有点。

对于稀疏图算法

image-20221125141806632

因为每个点都会加入一遍到result中,这样就会访问到所有点的记录,即所有出边。

对于稠密图算法

image-20221125142105939

这里考虑的是出边,理想情况下,只需要执行一遍就可以遍历所有节点。

Graph sharding

如果对一个大图进行操作,可以无法将整张图完全放到内存中,这时候就需要对graph中sharding,这和数据库中的sharding思想很类似。

streaming graph computation

有一说一,这章节和我实习做的磁盘图索引优化工作关系挺大的。我们的需求也是当内存无法将图索引完全放入时候,就需要放入磁盘当中,因为ANNS的图算法的检索算法有点类似于BFS,这就会产生很多的4KB磁盘随机读,我们做的事情就是提升这个访问磁盘图索引的局部性。和这里教授提到的思想很接近,不过我们做的粒度更加小一点。

image-20221125143717330

把一部分点的所有入边放到同一个shard中,并且按照source vertex ID进行排序。

image-20221125144424015 image-20221125144750151 image-20221125144759829

图压缩

即对邻接表进行压缩

image-20221125144931921

我觉得不太靠谱。。。,但是教授说这样可以提高Cache的命中率,因为可以有更多数据放到cache中。

image-20221125144953965

标签:cs149,并行,vertex,rank,算法,笔记,计算,磁盘,更新
From: https://www.cnblogs.com/kalicener/p/16925687.html

相关文章

  • 林晓斌 MySQL实战45讲(学习笔记)
    本系列是学习极客时间林晓斌的《MySQL实战45讲》系列的学习笔记。原文链接:https://time.geekbang.org/column/intro/13901基础架构:一条SQL查询语句是如何执行的?https://bl......
  • mx6ull字符设备驱动(以及新字符设备驱动)开发笔记
    在测试完后面的WIFI、4g网络驱动之后,这边需要测试一下ZigBee能否与开发板实现通信,看了网上的资料,可能需要修改设备树里面的串口信息啥的,索性先学习一下如何进行驱动开发,毕......
  • 后端踩坑笔记:记一次内存泄漏查障修复过程
    前言由于某开发项目的特殊性,在开发过程中需要将一些核心的代码加密。但是项目一开始就是由swoft框架(一个基于swoole的PHP框架)进行开发,未找到swoft代码加密工具。因此想到了......
  • 编译原理笔记
    编译消除左递归 A->Aα|β结果A->βRR->αR|ε串的各部分术语  一个串abcde……1234一共有n个这个串的前缀,从这个串的尾部开始删除连续的0个、1个……n个,例如abcde……1......
  • 重构:改善既有代码的设计 第三章 读书笔记
    目录代码的坏味道3.1神秘命名(MysteriousName)需要好的命名方式,有意义的命名方式3.2重复代码(DuplicatedCode)场景方法同一个类中出现重复代码提......
  • Vue2.0+3.0笔记
    生命周期 非单文件组件:全局事件时  脚手架文件结构  ├──node_modules├──public│├──favicon.ico:页签图标│└──index.htm......
  • 重构:改善既有代码的设计 读书笔记
    第1章重构,第一个示例1.1起点1.2对此起始程序的评价1.3重构的第一步1.4分解statement函数1.5进展:大量嵌套函数1.6拆分计算阶段与格式化阶段1.7进展:分离......
  • Html笔记
    html笔记html是什么HTML英文全称是HyperTextMarkupLanguage,中文译为“超文本标记语言”,专门用来设计和编辑网页。1.超文本也即超越纯文本,这意味着HTML文档不仅......
  • Clickhouse 安装使用笔记(随记 未整理)
     安装创建SHA256密码echo-n123456|openssldgst-sha256(stdin)=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 尝试用Navicat......
  • 驱动开发学习笔记---字符设备
    字符设备是按照字节流进行读写操作的设备,读写数据是分先后顺序的。常见的点灯、按键、IIC、SPI和LCD等都是字符设备。字符设备驱动开发步骤:总体思路:------定义并初......