【Galois系统】用于图形分析的轻量级基础架构

【Galois系统】用于图形分析的轻量级基础架构

该笔记为论文*A Lightweight Infrastructure for Graph Analytics[1]*阅读报告

论文信息

论文题目:A Lightweight Infrastructure for Graph Analytics
发表会议名及年份:SOSP’13
论文作者所在团队:The University of Texas at Austin

概述

在该论文之前已经有几种用于并行图形分析的特定领域语言(DSL)提出了。而该论文认为现有的DSL可以在通用基础设施之上实现,其中该基础设施支持非常细粒度的任务,并且能实现这些任务的自主、推测性执行,以及允许任务调度策略的特定应用控制。为此,论文中描述了一个被称为Galois系统的实现。
论文中展示了Galois系统的各方面能力,包括:

  1. 为以前的DSL解决的一些图形分析问题实现了更复杂的算法,并表明由于更通用的编程模型所提供的更好的算法,即使在幂律图上,端到端性能也可以提高几个数量级。
  2. 即使当一个算法可以用现有的DSL表示,但由于更复杂的调度,当输入图是道路网络和具有高直径的类似图时,该算法在更通用的系统中的实现可以快几个数量级。
  3. 本论文在公共基础设施之上实现了三个现有图形DSL的API,并表明即使对于幂律图,由于是轻量级基础设施,最终实现的性能也经常超过原始DSL系统的性能。

研究动机

  1. 对于那些对图形分析感兴趣的人来说,选择一个表达性编程模型比调整一个受限的DSL可以获得更大的性能增益,通常是数量级的。在这个领域中,一个实现效率低下的丰富编程模型往往比一个实现效率更高的受限编程模型表现得更好。
  2. 对于共享内存系统上DSL的实现者来说,利用机器拓扑和可伸缩内存分配是可伸缩实现的关键。
  3. 对于分布式内存系统上编程模型的设计者来说,正如在共享内存系统中一样,选择丰富的编程模型可能带来的巨大改进应该是分布式内存上图形分析设计和实现的重要考虑因素。
  4. Galois是一个面向单机内存的图数据处理系统,它针对高性能、通用的图形分析;高性能要求一些算法需要自主调度,因此需要程序员提供由编程模型支持的优先级调度函数;通用则要求能满足多样性的算法和输入图形。

方法

解决思路
  1. 本文之前提出了许多用于图形分析的DSL。鉴于问题领域的重要性和现有DSL的局限性,本文认为很可能在不久的将来设计和实现更多的DSL。而这些DSL需要一个轻量级的基础设施,支持具有特定于应用程序优先级的细粒度任务的自主调度。

  2. 针对解决高性能的图形分析的问题上,Galois系统首先提供了一个具有协调和自主调度以及定义优先级功能的编程模型,并为以前的DSL解决的一些图形分析问题实现了更复杂的算法,允许用户针对特定的应用实现自定义的优先调度策略来提高部分算法的收敛速度。

  3. 针对解决通用的图形分析的问题上,Galois系统在通用基础设施上实现了三个现有图形DSL的API ,让用户可以使用更底层的接口表达原先被编程模型所限制的算法。

  4. Galois系统采用非晶态数据并行(ADP)编程模型来实现,该模型的基本概念如图1所示,它定义了活动节点(Active nodes)、活动(activity)、运算符(operator)、领域(neighborhood),其中,图中红色的点表示活动节点,它是必须执行计算的节点,而其周围的灰色区域为该活动节点的领域。运算符为基本图运算和逻辑运算的结合。依照该模型编写并行图分析程序时,关键需要选择运算符执行什么操作,在何处应用操作符,以及何时执行相应的活动。

    图1 非晶态数据并行编程模型(ADP)
    图1 非晶态数据并行编程模型(ADP)

实现细节
  1. Galois系统是非晶态数据并行(ADP)编程模型的实现,根据上述ADP模型编写并行图分析程序的关键点,Galois系统在实现上有以下关键点:
    1). 应用程序程序员通过使用无序集迭代器隐式地指定并行性,该迭代器在活动节点的工作列表上进行迭代。在迭代器开始执行之前,使用一组活动节点初始化工作列表。迭代的执行可以创建新的活动节点,这些节点在迭代完成执行时添加到工作列表中。
    2). 迭代器的主体是运算符的实现,它是读取和写入全局数据结构的命令操作。迭代必须在写入任何一个元素之前,在其邻域中读取这些元素。
    3). 应用程序代码中未指定迭代执行的相对顺序,唯一的要求是最终结果应该与按一定顺序进行顺序执行迭代所获得的结果相同。对此可以使用迭代器指定迭代的应用程序的优先级顺序,并且在安排迭代时会尝试遵守此顺序。
    4). 系统通过并行执行迭代来利用并行性。为了确保迭代的可串行化,程序员必须为图形、工作列表等使用内置的并发数据结构库。

  2. 调度:
    1). 当没有特定于应用程序的优先级时,Galois调度程序使用并发包(concurrent
    bag)来保存挂起的任务集(活动节点)。该包(如图2)允许并发插入和检索无序任务,并以分布式、机器拓扑感知的方式实现。
    2).优先级调度:操作系统上下文中优先级调度的开销被任务的执行时间掩盖,但在图形分析中却不是这样的,因此这里不能使用操作系统领域的解决方案,另外又因为无法通过无锁跳过列表等而使用并发优先级队列。因此本文描述了一种称为obim的机器拓扑感知物理分布数据结构,利用了优先级是“soft”的,因此调度器不需要完全遵循优先级。obim调度程序使用一个包序列,其中每个包与一个优先级相关联。同一包中的任务具有相同的优先级,因此可以按任何顺序执行;但是会优先安排顺序中较早包中的任务。该全局映射过程如图3所示,其中为了防止它成为瓶颈并减少一致性流量,每个线程都维护一个由软件控制的全局映射延迟缓存,每个局部映射都包含该线程已知的全局映射的某些部分,但是一个线程可以在不通知其他线程的情况下更新全局映射。obim设计中的主要挑战是,尽管采用了分布式、延迟缓存设计,但仍要让线程执行早期优先级的工作。
    2
    图2 并发包
    3
    图3 全局映射

  3. 可扩展库和运行时

    1. 内存分配:本文发现现有解决方案无法扩展到分配密集型的大规模多线程工作负载,也无法直接解决非统一内存访问(NUMA)问题,为此Galois针对内存分配通常限于的两种情况:运行时中的分配(包括库数据结构)和活动中的分配分别考虑。对于第一种情况,Galois运行时系统使用slab分配器,它从固定大小的块池中分配内存。此分配器是可伸缩的,但由于管理碎片的开销,无法有效地处理可变大小的块。第二种情况涉及来自用户代码的分配,可能需要可变大小的分配,但也有定义的生存期,例如活动的持续时间。对于这种情况,Galois系统使用bump-pointer区域分配器。slab分配器对于每个块大小都有一个单独的分配器和一个中央页面池,其中包含从操作系统分配的巨大页面。每个线程维护一个空闲块列表。块首先从空闲列表中分配。如果列表为空,则线程从页面池获取页面,并使用bump-pointer分配将页面划分为块。bump-pointer分配器管理每个活动数据结构的分配,这些数据结构来自用户代码创建的临时数据。此分配器支持标准C分配器语义,使其可用于所有标准容器。分配器由页面池中的页面支持。如果分配大小超过页面大小(2MB),分配器将返回malloc。每个活动都在一个线程上执行,该线程有自己的bump-pointer分配器实例。分配器在线程上的迭代之间重用(重置后)。由于分配的对象的生命周期绑定到一个活动,因此可以在活动结束时立即回收所有内存。
    2. 同步:通信模式是拓扑感知的,因此最常见的同步仅在同一个包上的核心之间进行,并且共享同一个L3缓存。

结论

本文介绍了Galois系统的设计和实现,该系统通过一个机器拓扑感知调度器、一个称为obim的优先级调度器和一个可伸缩数据结构库来实现。论文中展示了Galois系统的各方面能力,包括:

  1. 为以前的DSL解决的一些图形分析问题实现了更复杂的算法,并表明由于更通用的编程模型所提供的更好的算法,即使在幂律图上,端到端性能也可以提高几个数量级。
  2. 即使当一个算法可以用现有的DSL表示,但由于更复杂的调度,当输入图是道路网络和具有高直径的类似图时,该算法在更通用的系统中的实现可以快几个数量级。
  3. 本论文在公共基础设施之上实现了三个现有图形DSL的API,并表明即使对于幂律图,由于是轻量级基础设施,最终实现的性能也经常超过原始DSL系统的性能。
    此外,在Galois系统之上,可以很容易地实现这些DSL中某些DSL的功能组合。

[1]: D. Nguyen, A. Lenharth and K. Pingali. A lightweight infrastructure for graph analytics. Proceedings of the Twenty-Fourth ACM Symposium on Operating Systems Principles ACM, 2013.

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值