• PSW平行式滑动窗口


    GraphChi 由卡内基梅隆大学的 Aapo Kyrola 博士生开发,是GraphLab项目的一个分支。该框架能够在单机上完成大数据的图计算。GraphChi 借鉴 GraphLab 和 Pregel 两个项目,采用基于以顶点为中心的计算模型。GraphChi 的核心是名为 Parallel Sliding Windows (并行式滑动窗口,简称PSW)的模型,能够异步处理存储在硬盘上的可变图数据。

    1. PSW模型1

    PSW模型算法分为三个阶段:从硬盘载入数据、更新顶点和边、将更新写入到磁盘。作者对在介绍PSW时,以边权重可变的图作为示例,给定有向图G=(V, E)

    载入数据阶段:顶点集V被分为P个不相交的子集 interval(i)。每个子集 intervals(i) 关联一个存储边信息的分区 shard,边的目标节点属于且仅属于子集 intervals(i),存储顺序按照源节点排序。shard 的大小以一次能够完全载入内存为最佳,可以通过设置 interval 个数进行调整。

    GraphChi分区示意图

    GraphChi 每次取一个节点子集 interval(i) ,根据子集中的点信息构造子图进行计算。例如,假设总共有P个分区,对于第p个节点子集,首先将分区 shard(p) 载入内存,该分区包含了关联 interval(p) 中节点的入边,然后在其他 P-1 个分区中读入关联 interval(p) 中节点的出边(注意,由于在 shard(i) 中存储的边按源节点排序,所以在每个分区 interval(i) 中与节点关联的出边都是连续存储的)。进行第p次操作后,更新的边/节点信息会在第p+1次操作时使用。直观上看,PSW算法执行完P个节点子集,就像在每个shard上进行滑动窗口操作。

    滑动分区

    并行更新节点:第p次操作所需的子图数据载入后,PSW对每个节点并行地执行用户定义的更新函数。此时,相邻节点进行更新操作时,可能会造成冲突。作者采用如下机制避免冲突的发生:如果一条边的两个端点在同一个子集中,则该端点将被标记。被标记的顶点将顺序执行更新操作,未被标记的顶点能够并行执行更新操作。顺序更新时,前一次更新的结果会作为下一次更新的输入。

    将更新写入磁盘:PSW每次更新是对内存中的数据项性能更新,在对一个节点子集完成更新后,PSW将修改的块文件写入磁盘。

    下图显示了GraphChi的执行流程

    GraphChi执行流程图

    2. PSW模型2

    作者对上述模型进行修改使得PSW支持在图中增加/删除边的操作。

    作者将每个分区shard分解为P个逻辑部分,part(j)包含以interval(j)中的顶点为源的边。作者增加了一个edge-buffer(p,j)结果关联 part(j) 和 shard(p)。当一个边被加入到图中,它首先加入到相应的edge-buff中。对于buff的管理包括写磁盘,切片等。

    为了保证一致性,对于会影响当前interval的节点增删操作将在执行结束时更新。

    xxx
  • 相关阅读:
    ExcelManager基于.Net的Excel读写管理类库(二)
    ExcelManager基于.Net的Excel读写管理类库(一)
    NHibernate初探!
    也谈软件工程!
    本人初学WCF ,请教一个问题
    初来咋到,今天终于在这里建起了一个家!
    c#中委托和直接函数调用用什么区别,好处和目的在哪?
    CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别
    C++线程同步
    C++中using的作用
  • 原文地址:https://www.cnblogs.com/valder/p/2657544.html
Copyright © 2020-2023  润新知