GraphMat论文总结

3 篇文章 0 订阅
1 篇文章 0 订阅

GraphMat 是用 c++  写的

GraphMat 是利用vertexprogram来编程的,但是在后端把它们映射成了高效的稀疏矩阵操作。通过这样的方法,我们在高效地容易理解地编程的同时,又使得程序效率变得很高

由于GraphMat表现主要是依赖一些可扩展的容易理解的稀疏矩阵操作,因此,这个特点使得其能够随着硬件的效率的提升利用到很好的并行的特性

GraphMat在一个singlenode上面会比 目前的一些图计算框架要快, 比GraphLab 快5-7倍,比Galois要快1.2倍 

在多核的情况下,提升的性能也会更多一点

 

GraphMat背后的思想是图分析算法(凭借vertex programming)的一般都可以通过稀疏矩阵操作来表示。特别一点的,这种方法适用于我们可以用邻接矩阵来表示图中的边。特别地,我们用到的概括来讲的思想如下,其中左边的是giraph的所采用的模型


在开始的时候,每个vertex都有着用户自己定义的特征向量,一些vertex被标记为active的,用户定义的func 

SEND_MESSAGE()读取vertexdata,然后将其生成为message object.

PROCESS_MESSAGE()读取messageobject, edge data沿着message的,还有desvertex data然后为该edge生成message.

REDUCE()得到该vertex的message并且把其整合为一个value.

APPLY()利用REDUCE()的结果来更新vertex的值

SEND_MESSAGE()用来沿着入边或者出边发送message

特别地,相比于传统的MATRIX框架来说,在PROCESS_MESSAGE()中添加的destination vertex使得算法(比如triangle counting和CF)更容易实现。

GraphMat相比较其它matrix框架的优点是,基于vertex观点来编程的话更加方便了,一些其它的matrix-based 框架例如 CombBLAS和 PEGASUS,用户定义的PROCESS_MESSAGE()函数 只能获取它自己的message和它作为入边的edge上的值,但是GraphMat的可以获得向其发送信息的vertex的特征向量

 

数据结构实现的具体细节

Sparse Matrix

Doubly Compressed Sparse Column形式来高效地存储稀疏矩阵,用四个数组来存储矩阵简单的解释一下: 一个数组来存储“行”的索引,是那些至少有一个非0元素的行, 第二个数组用来存储列的索引,是那些每一行的哪些列是按照第一个数组里的行一一对应下来的。第三个数组用来存储那些非0元素的值具体是多少,其与第二个数组是一一对应的,第四个数组用来表示每一行的起始对应于第2,3数组的哪个位置。

 

Sparse Vector

稀疏向量能用很多方式表达, 一种是可变长度的数组(index, value),另一种则是用bitvector

由于bitvector能够被多线程共享,并且可以利用cache的有效性,所以其在并行性能上提高了很多。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值