【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系统的各方面能力,包括:
- 为以前的DSL解决的一些图形分析问题实现了更复杂的算法,并表明由于更通用的编程模型所提供的更好的算法,即使在幂律图上,端到端性能也可以提高几个数量级。
- 即使当一个算法可以用现有的DSL表示,但由于更复杂的调度,当输入图是道路网络和具有高直径的类似图时,该算法在更通用的系统中的实现可以快几个数量级。
- 本论文在公共基础设施之上实现了三个现有图形DSL的API,并表明即使对于幂律图,由于是轻量级基础设施,最终实现的性能也经常超过原始DSL系统的性能。
研究动机
- 对于那些对图形分析感兴趣的人来说,选择一个表达性编程模型比调整一个受限的DSL可以获得更大的性能增益,通常是数量级的。在这个领域中,一个实现效率低下的丰富编程模型往往比一个实现效率更高的受限编程模型表现得更好。
- 对于共享内存系统上DSL的实现者来说,利用机器拓扑和可伸缩内存分配是可伸缩实现的关键。
- 对于分布式内存系统上编程模型的设计者来说,正如在共享内存系统中一样,选择丰富的编程模型可能带来的巨大改进应该是分布式内存上图形分析设计和实现的重要考虑因素。
- Galois是一个面向单机内存的图数据处理系统,它针对高性能、通用的图形分析;高性能要求一些算法需要自主调度,因此需要程序员提供由编程模型支持的优先级调度函数;通用则要求能满足多样性的算法和输入图形。
方法
解决思路
本文之前提出了许多用于图形分析的DSL。鉴于问题领域的重要性和现有DSL的局限性,本文认为很可能在不久的将来设计和实现更多的DSL。而这些DSL需要一个轻量级的基础设施,支持具有特定于应用程序优先级的细粒度任务的自主调度。
针对解决高性能的图形分析的问题上,Galois系统首先提供了一个具有协调和自主调度以及定义优先级功能的编程模型,并为以前的DSL解决的一些图形分析问题实现了更复杂的算法,允许用户针对特定的应用实现自定义的优先调度策略来提高部分算法的收敛速度。
针对解决通用的图形分析的问题上,Galois系统在通用基础设施上实现了三个现有图形DSL的API ,让用户可以使用更底层的接口表达原先被编程模型所限制的算法。
Galois系统采用非晶态数据并行(ADP)编程模型来实现,该模型的基本概念如图1所示,它定义了活动节点(Active nodes)、活动(activity)、运算符(operator)、领域(neighborhood),其中,图中红色的点表示活动节点,它是必须执行计算的节点,而其周围的灰色区域为该活动节点的领域。运算符为基本图运算和逻辑运算的结合。依照该模型编写并行图分析程序时,关键需要选择运算符执行什么操作,在何处应用操作符,以及何时执行相应的活动。
图1 非晶态数据并行编程模型(ADP)
实现细节
Galois系统是非晶态数据并行(ADP)编程模型的实现,根据上述ADP模型编写并行图分析程序的关键点,Galois系统在实现上有以下关键点:
1). 应用程序程序员通过使用无序集迭代器隐式地指定并行性,该迭代器在活动节点的工作列表上进行迭代。在迭代器开始执行之前,使用一组活动节点初始化工作列表。迭代的执行可以创建新的活动节点,这些节点在迭代完成执行时添加到工作列表中。
2). 迭代器的主体是运算符的实现,它是读取和写入全局数据结构的命令操作。迭代必须在写入任何一个元素之前,在其邻域中读取这些元素。
3). 应用程序代码中未指定迭代执行的相对顺序,唯一的要求是最终结果应该与按一定顺序进行顺序执行迭代所获得的结果相同。对此可以使用迭代器指定迭代的应用程序的优先级顺序,并且在安排迭代时会尝试遵守此顺序。
4). 系统通过并行执行迭代来利用并行性。为了确保迭代的可串行化,程序员必须为图形、工作列表等使用内置的并发数据结构库。调度:
1). 当没有特定于应用程序的优先级时,Galois调度程序使用并发包(concurrent
bag)来保存挂起的任务集(活动节点)。该包(如图2)允许并发插入和检索无序任务,并以分布式、机器拓扑感知的方式实现。
2).优先级调度:操作系统上下文中优先级调度的开销被任务的执行时间掩盖,但在图形分析中却不是这样的,因此这里不能使用操作系统领域的解决方案,另外又因为无法通过无锁跳过列表等而使用并发优先级队列。因此本文描述了一种称为obim的机器拓扑感知物理分布数据结构,利用了优先级是“soft”的,因此调度器不需要完全遵循优先级。obim调度程序使用一个包序列,其中每个包与一个优先级相关联。同一包中的任务具有相同的优先级,因此可以按任何顺序执行;但是会优先安排顺序中较早包中的任务。该全局映射过程如图3所示,其中为了防止它成为瓶颈并减少一致性流量,每个线程都维护一个由软件控制的全局映射延迟缓存,每个局部映射都包含该线程已知的全局映射的某些部分,但是一个线程可以在不通知其他线程的情况下更新全局映射。obim设计中的主要挑战是,尽管采用了分布式、延迟缓存设计,但仍要让线程执行早期优先级的工作。
图2 并发包
图3 全局映射可扩展库和运行时
- 内存分配:本文发现现有解决方案无法扩展到分配密集型的大规模多线程工作负载,也无法直接解决非统一内存访问(NUMA)问题,为此Galois针对内存分配通常限于的两种情况:运行时中的分配(包括库数据结构)和活动中的分配分别考虑。对于第一种情况,Galois运行时系统使用slab分配器,它从固定大小的块池中分配内存。此分配器是可伸缩的,但由于管理碎片的开销,无法有效地处理可变大小的块。第二种情况涉及来自用户代码的分配,可能需要可变大小的分配,但也有定义的生存期,例如活动的持续时间。对于这种情况,Galois系统使用bump-pointer区域分配器。slab分配器对于每个块大小都有一个单独的分配器和一个中央页面池,其中包含从操作系统分配的巨大页面。每个线程维护一个空闲块列表。块首先从空闲列表中分配。如果列表为空,则线程从页面池获取页面,并使用bump-pointer分配将页面划分为块。bump-pointer分配器管理每个活动数据结构的分配,这些数据结构来自用户代码创建的临时数据。此分配器支持标准C分配器语义,使其可用于所有标准容器。分配器由页面池中的页面支持。如果分配大小超过页面大小(2MB),分配器将返回malloc。每个活动都在一个线程上执行,该线程有自己的bump-pointer分配器实例。分配器在线程上的迭代之间重用(重置后)。由于分配的对象的生命周期绑定到一个活动,因此可以在活动结束时立即回收所有内存。
- 同步:通信模式是拓扑感知的,因此最常见的同步仅在同一个包上的核心之间进行,并且共享同一个L3缓存。
结论
本文介绍了Galois系统的设计和实现,该系统通过一个机器拓扑感知调度器、一个称为obim的优先级调度器和一个可伸缩数据结构库来实现。论文中展示了Galois系统的各方面能力,包括:
- 为以前的DSL解决的一些图形分析问题实现了更复杂的算法,并表明由于更通用的编程模型所提供的更好的算法,即使在幂律图上,端到端性能也可以提高几个数量级。
- 即使当一个算法可以用现有的DSL表示,但由于更复杂的调度,当输入图是道路网络和具有高直径的类似图时,该算法在更通用的系统中的实现可以快几个数量级。
- 本论文在公共基础设施之上实现了三个现有图形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.
【Galois系统】用于图形分析的轻量级基础架构相关推荐
- 鲸鲨阵列服务器怎么装系统,鲸鲨软件 | 自主可控IT基础架构产品及解决方案提供商...
方案背景 解放军某疗养院为我军级别最高.规模最大的疗养院,是军队各级首长和地方各界朋友健康体检.养生保健.康复疗养基地. 疗养院体检中心,配备美国GE彩色B超.菲利浦数字化摄片(DR).GE螺旋CT. ...
- 机器学习的中流砥柱:用于模型构建的基础架构工具有哪些?
本文转载自公众号"读芯术"(ID:AI_Discovery) 人工智能(AI)和机器学习(ML)已然"渗透"到了各行各业,企业们期待通过机器学习基础架构平台,以 ...
- 微软业务生产力平台基础架构优化(BPIO)之企业项目管理(EPM)解决方案
微软企业项目管理(EPM)解决方案,帮助企业统一整合项目管理资源,提高项目管理的工作效率,加强信息共享,降低风险,提高企业多项目管理(Program)并增强项目组合管理(Portfolio)的能力,同 ...
- 【合作】云计算基础架构【图】
云计算不仅是技术,更是服务模式的创新.云计算之所以能够为用户带来更高的效率.灵活性和可扩展性,是基于对整个IT领域的变革,其技术和应用涉及硬件系统.软件系统.应用系统.运维管理.服务模式等各个方面. ...
- 广州地铁2011年信息化基础架构平台建设项目
第一章 项目概述 1.1 项目背景 2011年广州地铁将实施多个信息化项目,预计2011至2012年将会陆续建成,为保证系统如期上线运行,需要我司基础架构提供充足的硬件 ...
- Android系统源代码情景分析:基础知识
老罗(罗升阳)发表在的InfoQ上的好文,最新在学习Android,转载一下,方便学习. 老罗的CSDN blog链接:http://blog.csdn.net/Luoshengyang/ 原文链接: ...
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析【转】...
Android系统的运行时库层代码是用C++来编写的,用C++ 来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃.不过系统为我们提供了智能指针,避免出现上述问题,本 ...
- Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析【转】
Android系统的运行时库层代码是用C++来编写的,用C++ 来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃.不过系统为我们提供了智能指针,避免出现上述问题,本 ...
- ZT自老罗的博客 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析...
Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 分类: Android 2011-09-23 00:59 31568人阅读 评论(42) 收藏 举报 androidclass ...
最新文章
- 无线Trace脚本(旧格式)-平均延时
- python数列求和-加强版_ES6深入浅出-3 三个点运算 新版字符串-1.函数与对象的语法糖...
- mysql设置不主动提交无效_关闭事务自动提交无效,回滚也无效
- mysql 5 可执行漏洞_漏洞预警:MySQL 0-day代码执行漏洞 可本地提权
- 工业级光纤收发器的单多模光纤?单多光模块及其用法?
- JS闭包—你不知道的JavaScript上卷读书笔记(二)
- 从上往下打印二叉树(C++)
- 数据之路 - Python爬虫 - Requests库
- EAS使用后台事务定时执行方法
- 华为USG防火墙搭建IPsec***实战
- Java版本和JDK版本对应关系
- 解决无法从公司 Maven 私服下载依赖的问题
- 读《史蒂夫•乔布斯传》(二)
- 俊哥的HADOOP之路
- html5通用兄第选择器,css 通用兄弟选择器( ~ )
- flex的align属性:交叉轴的对齐方式
- HTTP、TCP、Socket、长连接、短连接的概念和原理及其区别
- 教您读懂数字货币开发_交易系统开发
- qiime 2分析菌群数据代码
- FPGA基础知识0(查找表LUT和编程方式)