CHALLENGES IN PARALLEL GRAPH PROCESSING

探讨图形算法在科学计算和数据分析中的重要性,以及并行计算资源在解决大规模图形问题中的作用。文章分析了图形问题与现有并行计算方法的不匹配,包括数据驱动的计算、非结构化问题、局部性差和高数据访问率。讨论了并行架构和编程模型,如分布式内存机器、PGAS计算、共享内存计算机,并评估了它们在图形算法中的适用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

图形算法对于解决科学计算,数据挖掘和其他领域的许多问题变得越来越重要。随着这些问题规模的扩大,需要并行计算资源来满足其计算和内存要求。不幸的是,对于开发主流并行科学应用程序运行良好的算法,软件和硬件不一定对大规模图形问题有效。在本文中,我们介绍了当前最先进的图形问题,软件和并行硬件之间的相互关系,并讨论了这些问题如何在解决大规模图形问题时带来固有的挑战。这些挑战的范围为开发可解决图形问题的可扩展高性能软件提出了研究议程

介绍

图为描述离散对象之间的关系提供了非常灵活的抽象。科学计算,数据分析和其他领域中的许多实际问题都可以通过图形以其本质形式建模,并通过适当的图形算法来解决。随着图形问题规模的扩大和复杂性的提高,它们很容易超出单个处理器的计算和存储容量。鉴于并行计算在科学计算的许多领域都取得了成功,因此似乎有必要并行处理来克服图形计算中单个处理器的资源限制。当整体计算问题解决方法之间取得很好的平衡时,应用程序的性能和伸缩性就会很好:即,当要解决的问题时,用于解决该问题的算法,用于表达该算法的软件以及运行该软件的硬件都彼此完全匹配。在很大程度上,并行科学计算的成功归因于这些方面与典型的科学应用完全匹配的事实。解决科学领域典型问题的常见习惯用法(往往涉及解决偏微分方程组的问题)已经发展并成为科学计算界的标准实践。同样,可以很好地解决典型问题的硬件平台和编程模型也已变得司空见惯。世界各地的机房都包含运行着MPI编程代码的商品集群。

不幸的是,对于开发主流并行科学应用程序运行良好的算法,软件和硬件不一定对大规模图形问题有效。图问题具有一些固有的特征,使其与当前的计算问题解决方法不匹配。特别是,图问题的以下特性对有效的并行性提出了巨大的挑战。

  • 数据驱动的计算。图计算通常是完全由数据驱动的。由图算法执行的计算由它在其上运行的图的顶点和边缘(节点和链接)结构决定,而不是直接用代码表示。结果,由于算法中的计算结构不是先验的,因此很难表达基于计算分区的并行性。
  • 非结构化问题。图形问题中的数据通常是非结构化且高度不规则的。类似于在基于其计算结构并行化图形问题时遇到的困难,图形数据的不规则结构使得难以通过对问题数据进行分区来提取并行性。可伸缩性可能会因数据分区不足而导致计算负载不平衡而受到很大限制。
  • 局部性差。由于图形表示实体之间的关系,并且由于这些关系可能是不规则的且是非结构化的,因此计算机和数据访问模式往往没有太多的局部性。对于来自数据分析的图尤其如此。当代处理器的性能取决于开发本地性。因此,即使在串行计算机上,图形算法也很难获得高性能。
  • 数据访问率高,计算量大。图算法通常基于探索图的结构,而不是对图数据执行大量计算。结果,与科学计算应用程序相比,数据访问计算的比例更高。由于这些访问的可利用本地性较低,因此运行时可能受等待内存提取的支配。

在本文中,我们从几个角度讨论了高性能图形实现的障碍及其一些可能的解决方案。在下一节中,我们将简要概述高性能体系结构的概况。在§3中,我们讨论了这些不同的体系结构如何映射到图算法的需求。在§4中,我们回顾了一些正在进行的开发平行图软件的活动。然后在§5中,我们报告了有关不同体系结构的一些性能结果。然后,我们讨论了可能影响§6中的图形算法性能的一些可能的体系结构趋势,并在§7中提出了一些需要进一步研究的领域。

并行架构和编程模型

商业上可以买到各种功能各异的并行计算机。大多数机器是在具有多层存储层的传统微处理器的基础上构建的。快速存储器用于存储可能很快将被访问的存储器地址中的值,从而减少延迟。对于许多应用程序来说,这是提高性能的一种非常有效的方法,但是正如我们将在§3中讨论的那样,它对非结构化图的操作并不是特别有效。这些应用倾向于由高延迟主导,并且在传统微处理器上往往利用率极低。

分布式内存机器
分布式存储机器最常通过显式消息传递进行编程。在这种编程模型中,用户负责将数据划分到不同处理器的存储器之间,并负责确定哪个处理器执行哪些任务。通常,使用所有者计算模型,其中拥有数据的处理器也对该数据执行任何操作。数据通常通过MPI通信库[14]通过用户控制的消息在处理器之间交换。由于计算和通信的细节几乎完全掌握在用户手中,因此许多应用程序都可以通过这种方式实现高性能。但是,对数据分区和通信的详细控制可能很乏味且容易出错。除了利用内存层次结构之外,消息传递程序还经常通过摊销来减少延迟。通常,程序是以批量同步方式编写的,其中处理器在独立处理本地数据和参与集体通信操作之间交替[20]。通过将数据交换分组为大型的集体操作,可以大大降低总体延迟成本。但是,这是以算法灵活性为代价的。不能按需传输数据,而只能在计算步骤之间的间歇传输数据。这对于负载平衡可能是有害的,并且使得难以在应用程序中利用细粒度的并行性

原则上,消息传递程序不必是批量同步的。异步消息可以任意方式与计算交织。但是,大多数MPI版本都针对双向通信进行了优化,在这种情况下,发送和接收必须成对进行(即,如果不涉及该处理器上的程序,则无法写入或读取另一个处理器的内存)。如果没有对单面通信的更有效支持,则分布式存储机将无法很好地适应细粒度的并行性

分区全局地址空间计算
MPI不是编程分布式内存并行计算机的唯一方法。一个更适合细粒度并行性的重要替代方法是使用分区的全局地址空间语言,例如UPC [6]。在UPC程序中,程序员仍然负责区分本地数据和全局数据,但是该语言支持使用简单语法在远程存储器位置上进行操作。对全局地址空间的这种支持有助于编写具有复杂数据访问模式的程序。 UPC位于支持单面通信的通信层之上。因此,与MPI相比,细粒度的并行程序更易于编写,并且可以获得更高的性能。但是,与MPI一样,在UPC程序中,控制线程的数量是恒定的,通常等于处理器的数量。如下所述,缺少动态线程会严重阻碍高性能图形软件的开发。

分享内存计算机
UPC在分布式内存硬件上提供了全局可寻址内存的软件幻觉。也可以在硬件中提供对全局地址空间的支持。这样的共享存储计算机可以以各种方式分类。在这里,我们考虑高速缓存一致性计算机和大规模多线程计算机。

将并行图算法映射到硬件

尽管已经有很多关于并行图算法的理论论文,但是许多使用PRAM模型[12],但是描述实际实现或库的论文却很少。事实证明,高性能并行图算法难以开发,必须解决许多与硬件和软件相关的挑战。

  • 任务粒度。设计图算法的一个基本问题是在哪里引入并行性。对于某些算法,存在很大程度的粗粒度并行性。例如,一些中心性计算涉及解决许多最短路径问题。每个最短路径问题都可能是一个单独的任务。但是,对于大多数图形操作,尤其是那些具有线性或接近线性运行时间的图形操作,只能在更细粒度的级别上找到并行性。促进细粒度并行性的机器将更适合运行此类算法。
  • 内存争用。在支持全局地址空间的系统中,多个进程或线程可以尝试同时访问同一内存。这会大大降低性能。这个问题的重要性随着并行度的提高而增加,因此对于多线程系统最为重要。方便地,对于信息学中的许多应用程序,可以将图形视为只读对象,并且只读争用问题较少。图查询算法不会写入图本身,但会分配并写入自己的本地数据结构,因此必须谨慎处理这些操作的争用。
  • 负载均衡。在图算法中被访问的顶点在全局存储器中可能具有一些空间局部性。在所有者计算模型中,这意味着某些处理器将比其他处理器要做更多的工作。重新分配这项工作的方法可以提高性能。请注意,此问题在共享内存计算机上不太明显,因为可以在不显式移动数据的情况下迁移工作。负载平衡的时间方面也很重要。单个图形算法可能需要做随时间变化的工作。例如,在广度优先搜索中,早期阶段可能要访问的顶点很少,而后期阶段可能要拥有更多的顶点。动态线程创建和分配是一种用于处理各种工作负载的机制。
  • 同时查询。在某些数据挖掘应用程序中,一个大型图表可能由一组分析人员使用,并且每个人都可以随时提交查询。这为进一步的并行度提供了可能。在这样的设置下,与一次只能响应单个查询的系统相比,一种优雅且高效地处理查询流的系统更为可取。相反,几乎所有文献都涉及执行单个图形算法所需的时间。更好的模型将专注于吞吐量,奖励可以同时处理多个查询的系统。
  • 软件开发。可以并且应该将针对以上提到的许多挑战的解决方案封装在精心设计的软件框架中。 §4将更全面地解决软件设计问题,但是灵活性,可扩展性,可移植性和可维护性都是重要的考虑因素。由于信息学应用程序经常涉及迭代算法探索,因此该软件还应支持快速原型设计。

软件方法

并行Boost图形库
并行Boost图形库(Parallel BGL)[10,9]是一个并行图形算法和随附数据结构的库。使用通用编程范式进行设计的Parallel BGL将并行算法的实现与底层数据结构和通信机制分开。因此,并行BGL中给定通用算法的实现(例如,广度优先搜索)可以在任何图形数据结构上进行操作,并且可以在任何通信介质上进行通信,只要该数据结构和介质满足某些基本的抽象要求即可。通过抽象出对特定通信媒体的依赖,并行BGL中的相同算法可以使用MPI(依赖于消息传递进行通信)在分布式内存集群上执行,或者使用Pthreads(依赖于共享内存并锁定进行通信)执行SMP。因此,可以将特定于体系结构的优化(例如引入无锁数据结构或MPI单面通信)与算法描述分开,从而大大简化了移植和调试新并行计算机体系结构的过程。并行BGL中的算法对通信基础架构的要求尽可能少,以实现最大的可重用性。但是,存在某些算法,其最佳实现方式在一种体系结构与另一种体系结构之间差异很大。在这些情况下,可能需要采用多种算法实现来解决架构上的根本差异,例如区分在群集和某些SMP上表现良好的进程粒度并行性与在大规模多线程上表现良好的细粒度并行性之间的区别MTA-2之类的体系结构。并行BGL的绝大多数开发工作都集中在使用MPI的过程粒度并行化上,尽管将来我们打算扩展到其他并行模型。

多线程图库
MTA-2和XMT机器的简单编程模型原则上非常适合“通用编程”范式。但是,在这些平台上开发软件库的努力还处于起步阶段。例如,可以使用C ++标准模板库(STL),但它可以串行运行。大规模多线程代码仅在具有足够的并行性时才有用。 STL的线程安全版本及其Boost扩展将为多线程Boost Graph库提供基础,这是未来的工作。受串行Boost Graph库的启发,正在开发MultiThreaded Graph Library [4]。桑迪亚国家实验室(Sandia National Laboratories)提供了一种近期通用编程功能,用于在大型多线程计算机上实现图形算法。像Parallel BGL一样,底层数据结构也被用来从程序员那里抽象出并行性。但是,与Parallel BGL不同,主要的算法设计方法是不为串行图算法提供并行化的数据结构。 MTA / XMT计算机上性能的关键是使处理器保持忙碌,实际上,这通常减少为同时执行许多通信,异步,细粒度的任务。 MTGL提供了灵活的引擎来控制这种并行性.MTGL的开发是为了促进语义图(即具有顶点和边类型的图)上的数据挖掘。语义图计算涉及在图搜索期间广泛使用过滤器。 MTGL为这些​​过滤操作提供了机制。此外,XMT使用模型将允许许多用户在同一图形上同时运行算法。 MTGL旨在支持此使用模型。

总结

大型图正在计算生物学,非结构化网格计算以及各种数据分析中得到越来越多的应用。我们预见到对解决问题的高性能解决方案的需求将不断增长。正如我们所论证的那样,图算法的计算要求与大多数现有并行应用程序的计算要求显着不同,这些差异对体系结构,软件库和算法开发都有影响。在并行图算法和软件方面仍有很多研究要做。尽管无处不在且便宜,但是分布式存储机器是图算法的一个具有挑战性的平台。诸如Parallel BGL之类的努力表明,许多图形算法可以在这些平台上并行化,但是处理器利用率通常很低。在分布式内存中,使用幽灵单元优化运行时间和使用散列优化内存使用之间存在着根本的张力。需要新的,也许是混合的想法。一种可能性是基于Yoo等人的工作。使用基于矩阵的见解并行化广度优先遍历[21]。统一跨不同体系结构的算法表达的方法也将非常有益。需要对分布式内存算法和软件进行进一步的工作。大规模多线程似乎是使图形操作并行化的一种有吸引力的方法,具有实现出色的可伸缩性和性能的潜力。但是这项工作实际上还处于起步阶段,需要新的算法和改进的软件。此外,类似MTA的机器的商业可行性尚不确定,这将增加这种方法的风险。尽管图形对并行机器提出了重大挑战,但我们总体上对未来表示乐观。相对于处理器速度而言,内存访问成本的不断增长意味着越来越多的应用程序成为延迟的主导。我们希望这会导致架构变化,这将有利于图形算法。多亏了摩尔定律,处理器现在变得足够小,以至于其中几个可以装在一个芯片上。我们期望硅不动产的突然可用性将促进人们对提高存储器性能的方法(包括新形式的多线程)进行新的研究。我们希望我们在图形算法方面的经验将有助于推动技术的发展,这将有益于广泛的应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值