A Framework for FPGA Acceleration of Large Graph Problems: Graphlet Counting Case Study

摘要

在许多应用领域中,数据都是使用涉及数百万个顶点和边的大型图形表示的。图分析算法(例如查找短路径和同构子图)在很大程度上受内存延迟的支配。如果可以对图形数据进行分区,则基于大型集群的计算平台可以高效地处理图形,并且可以在较小规模的分区上将图形分配给可重配置设备中的低延迟片上RAM。但是,有许多图类,例如无标度的社交网络,它们缺乏使图数据分区成为延迟问题的有效解决方案的局限性,并且太大而无法容纳片上RAM和高速缓存。在本文中,我们提出了一个可重配置的硬件加速框架,用于解决这些大型图形问题,这些问题难以分区并且需要高延迟的片外存储器存储。我们的可重配置架构通过使用内存交叉开关将芯片上并行的处理单元连接到共享的芯片外内存,从而无需使用传统的缓存内存层次结构,即可容忍芯片外的内存延迟。在对小图计数案例研究的软件和硬件性能之间进行的定量比较表明,对于大型图,我们的硬件实现要比四核软件实现好10倍。这种加速包括所需的所有软件和IO开销,并将这种常见的生物信息学算法的执行时间从大约2小时减少到仅12分钟。这些结果表明,我们用于加速图形算法的方法是有效进行并行图形处理的有前途的方法。

说明

许多现实世界中的问题,例如各种类型的社交网络和生物相互作用,已被表示为涉及数百万个顶点的大型图形或网络。在生物信息学中,例如蛋白质-蛋白质相互作用(PPI)通常用图形表示,其中顶点代表蛋白质,边代表相应蛋白质之间的物理相互作用。随着图形问题规模的扩大,有效的并行图形处理随着计算和内存需求的增加而变得重要。不幸的是,用于并行化主流并行应用程序的传统软件和硬件解决方案不一定能很好地解决大规模图形问题。图问题具有许多特性,使其与主流并行应用程序中应用的计算方法不匹配。特别是,图问题的以下特性为有效并行处理图问题提出了重大挑战:

  • 数据驱动的计算
    通常,图形计算是由图形的顶点和边缘结构决定的,执行路径很难使用源代码的静态分析来进行分析和预测。由于缺乏对计算结构的了解,基于分区计算的宗派主义是一项具有挑战性的任务。
  • 非结构化问题
    通常,图问题中的数据是非结构化的并且高度不规则。图数据的这种不规则结构使得很难对图数据进行分区,以利用小型且快速的片上存储器,例如基于缓存的微处理器中的缓存和FPGA中的片上RAM。
  • 局部性差
    数据驱动的计算加上不规则的数据结构导致内存访问位置低。这通常会导致传统的基于缓存的微处理器的性能欠佳,而后者依赖于存储器访问的高空间和时间局部性。
  • 数据访问率高,计算比例高
    许多图算法倾向于在执行相对较少的计算的同时探索图的结构,这导致与主流科学和工程应用程序相比,数据访问计算的比率更高,并且结合了较差的局部性导致执行时间受内存延迟的支配。

先前的工作表明,在许多重要的计算机应用中,与微处理器相比,基于FPGA的可重构计算机可以实现数量级的加速。然而,由于FPGA实施中流水线密集的电路,阻止了广泛使用的FPGA的局限性是对常规或可预测的存储器访问模式(即,来自存储器的数据的顺序流传输)的要求。具有不规则存储器访问模式的应用程序(例如基于图形的算法)由于DRAM存储器中的页面丢失数量增加而实现了更低的存储器带宽。因此,这种低内存带宽会导致许多流水线停顿,从而导致FPGA的加速很小,甚至可能减速。

我们的方法在高性能可重构计算平台上进行了评估,并通过案例研究将其与软件实现进行了比较。我们的主要贡献是:

  • 用于需要访问芯片外存储器存储的大型图形问题的可重配置硬件加速的框架
  • 使用生物信息学中的小图计数案例研究,在高性能可重配置计算(HPRC)系统上演示我们的框架
  • 软件和硬件graphlet计数实现,包括所有硬件开销和IO成本,表明使用我们可重新配置的计算框架可以实现高达10倍的性能提升。

可重构图过程的框架

大规模图形算法的计算和内存访问要求与主流并行应用程序有显着差异,因此需要新的体系结构解决方案来进行有效的并行图形处理。在本节中,我们提出了一个可重构的大图问题加速框架。由于图算法的多样性,我们将自己限制在一大类常见但要求苛刻的图问题上。特别是,我们对具有以下属性的图形问题感兴趣:

  • 涉及数百万个顶点和边的大规模稀疏图。图形数据太大,无法容纳小型和快速的存储器,例如商用微处理器中的高速缓存和FPGA中的片上RAM。
  • 静态图形。这些图形在运行时是静态的,因此可以视为只读对象。有许多算法将图数据集用作关于图的输入和输出统计信息。示例包括在生物信息学中使用的网络对齐和比较。
  • 高度并行。通常,图问题具有大量的平行关系,其中任务是独立于图的所有顶点执行的。最短路径算法是一个示例,其中对于给定的图,每个顶点的最短路径问题可以作为独立任务并行解决
  • 简单的计算操作。与内存访问请求相比,由图形算法执行的计算操作(例如整数加法,逻辑运算等)与更复杂的操作(例如浮点计算)相比相对简单。

在这里插入图片描述
算法1显示了我们框架所针对的图算法的通用模板。在算法编码方面,此属性转换为循环遍历图中所有顶点的循环。每次迭代都可以作为单独的内核执行。外循环(第2行)代表了我们框架所需的粗粒度并行度,而图内核本身(第2行)可能提供了更细粒度的并行度。
A 硬件结构
在讨论可重构体系结构之前,我们首先定义目标HPRC系统的所需特性:
1)FPGA器件与存储体之间的高带宽网络。
2)允许有效的字级内存访问。
3)可以并发访问的多个存储体。
我们的框架中使用的硬件架构如图1所示。
在这里插入图片描述
该架构包含三个不同的组件:

  • 图形处理元素(GPE)。特定于应用程序的复制和并行处理元素的集合。每个GPE可以独立执行一个图形内核(请参阅算法1,第3行)。
  • 内存互连网络。这链接了GPEs到片外存储器。它的基本形式是通过内存交叉开关在每个GPE与所有内存库之间提供点对点连接。通过定制,可以优化内存互连,以提高GPE的整体性能和内存带宽。例如,原子计数器可以在内存互连级别而不是在GPE内部实现。内存请求的动态重新排序是提高有效内存带宽的另一种优化方法。
  • 运行时管理单元。该单元为GPE提供任务分配,以及将基于FPGA的协处理器与主机处理器接口。该单元还可以提供动态负载平衡,这对于诸如无标度网络之类的大量图形问题非常重要。

通常,将算法映射到自定义硬件加速器上需要从算法中提取并行性,以利用硬件资源。对于FPGA,设计人员通常依靠大量流水线设计来补偿这些器件上相对较慢的工作频率。但是,正如我们在第一节中所强调的那样,大图形问题对不规则存储器访问模式的要求导致许多流水线停顿,从而导致有限的FPGA性能提升或根本没有。与其尝试使用流水线技术来提高吞吐量,我们的目标是容忍片外存储器延迟。特别是,我们将以下体系结构设计功能整合到我们的解决方案中,以实现大型图问题的高效并行处理:

  • 高并行度
    这是通过使大量GPE以大规模多线程机器方式并行运行来实现的。拥有大量的GPE,使我们能够利用图算法中经常可用的丰富并行性
  • 定制处理元素
    与通用微处理器相比,设计专用GPE可以有效利用硬件资源。鉴于图算法中执行的操作是映射到相对简单的硬件实现的简单计算操作,因此高级综合工具应该能够生成GPE的有效实现,同时通过复制GPE内核来实现高并行度
  • 容忍内存延迟
    通过使用内存互连将GPE连接到共享内存系统,我们可以忍受内存延迟,而不是使用缓存内存来隐藏内存延迟。在大量并行GPE的情况下,可以将多个并发内存请求发送到共享内存系统中的并行内存库,从而实现出色的内存访问性能

B 设计流程
图2展示了该框架设计流程的高级示意图,从输入规范到硬件生成。目前正在开发所建议框架的完全自动化的实现。因此,对于本文,我们提供了手动执行设计流程的性能结果。

在这里插入图片描述
输入规范包括图形问题描述以及有关要使用的平台配置的信息。阅读输入规范后,设计流程可以并行进行三个不同的过程
(1)提取图形内核并将其综合到GPE硬件组件上;
(2)创建或选择将GPE连接到内存子系统的预先综合的内存互连组件; (3)组装运行时管理单元组件,该组件将安排任务在GPE上执行,以及将GPE与平台接口连接。然后将这三个组件组合并编译,以生成最终的硬件位文件和关联的元数据。在运行时,在主机处理器上运行的软件可以将位文件加载到基于FPGA的协处理器上,然后在FPGA上执行图形内核。

图计数算法研究

在本节中,我们使用案例研究评估了我们提出的框架,该案例研究涉及图算法(称为图计数算法)的加速。对于本文,我们仅报告一种图形算法的结果。因此,我们不认为这是一项彻底的实验研究。而是,本文将作为可重构架构对非结构化图的适用性的案例研究,以及图处理器的设计框架的介绍

A 算法描述
图子计数算法在无向,未加权图G(V,E)中枚举大小为k∈{3,4,5}的所有连通图子。一个小图是网络的一个小连接的诱导子图[6]。图3显示了3、4和5节点连接的图。
在这里插入图片描述
枚举子图已被证明在许多网络分析算法中非常有用,例如GRAph ALigner和小图度签名,但它也是计算的瓶颈。图片段计数算法的伪代码显示在代码片段算法1中。

如何生成子图算法如下
在这里插入图片描述
在计算复杂度方面,对图G中的所有小图进行计数的时间复杂度为O(| V | 5)。但是,对于非常稀疏的图形(例如PPI网络),其计算成本比密集图形的抑制性要低得多。就内存访问时间而言,图形数据通常使用基于指针的数据结构在软件中表示,这需要不可预测的细粒度内存访问操作来执行节点邻接测试和更新图小数计数器。

B 图形数据的表示

有几种方法可以使用不同的数据结构表示图形数据。
在这里插入图片描述
还有邻接表和邻接矩阵,我们使用需要| V | 2位内存存储空间的邻接矩阵,这限制了我们可以处理的图的大小,同时浪费了大量的位,因为在稀疏图中仅需要这些位的一小部分。将来,我们将采用更有效的邻接矩阵存储方案,例如使用硬件加速的哈希表。
C 设计因素
在第一节中,我们概述了并行图处理中的主要挑战。

  • 非结构化问题
    内部循环的可变迭代次数证明了这一点,这在很大程度上取决于图节点的程度:通常只发生2到3次迭代,但偶尔需要10或100次迭代。结果,在内循环中何处引入并行性并不明显。
  • 数据局部性差
    graphlet计数算法通过执行细粒度和随机存储器访问(例如,检索相邻顶点或邻接测试)来探索图形的结构。 这些内存操作通常表现出较差的时间和空间内存访问局部性。
  • 同步问题
    在小图计数算法中,我们需要每个顶点72个计数器来枚举给定图的所有3、4、5节点小图。对于大图形,这些计数器必须存储在片外存储器中。计数器可由同时需要异步机制的两个或多个处理元件增加。在具有大量并行线程或处理元素的系统中,由于争用情况而引入的其他延迟会导致由于争用情况高而导致的同步性能瓶颈。

提到了graphlet计数算法的主要设计问题之后,我们现在介绍如何解决这些问题。

  • 并行化graphlet计数内核。通过将外部循环的并行实现(算法2中的第1行)和所有内部循环的串行实现(算法2中的第2、3、5和7行)组合起来解决此问题。 串行实现采用GPE的形式,而并行实现则来自此GPE的复制。换句话说,几个GPE并行运行,每个GPE一次处理一个图形节点。即外循环的迭代。与软件实现相比,按顺序在硬件上嵌入内部循环最有可能导致执行时间变慢。通过使处理单元数量足够大,以使所有处理元素的总执行时间小于软件执行时间,可以克服这些缓慢的执行时间。
  • 隐藏内存等待时间。可以通过将GPE直接连接到并行内存子系统,而无需使用通用缓存,来解决算法的内存访问局部性差的问题。我们使用内存互连网络在GPE和多个内存库之间路由内存请求,以进行并行访问。通过实例化可以发出多个未完成的内存请求的大量GPE来容忍延迟。
  • 同步图形计数器。最后,为了同步计数器更新,可以在交换互连网络中实现原子增量模块,以防止可能由于两个GPE尝试更新同一计数器而引起的写后读(RAW)危险。使用原子增量操作更新计数器不仅可以防止RAW危害,而且还可以提高性能,因为原子增量操作可以避免在等待从内存中读取计数器数据时GPE停顿。另外,将增量单元从GPE中移出到内存互连网络还使GPE可以共享该单元,从而提高了整体设备的利用率。

D 硬件设计
1)图形处理元素:图处理元素实现小图计数内核。它由一个控制单元,地址功能单元,地址和数据寄存器,标量功能单元以及用于存储哈希表的ROM表组成。控制单元包括一个单个的有限状态机(FSM),该机以串行方式实现小图计数算法中的所有内部循环。该FSM可以由诸如Handel-C之类的高级综合工具自动生成。地址功能单元包括具有自定义位宽的乘法器和加法器,以计算存储器地址。对于graphlet计数器(每个顶点72个计数器),我们将逻辑移位与加法而不是乘法相结合(因为72 = 64 + 8或72 = 26 + 23)。标量功能单元包括针对数据位宽而定制的加法器和逻辑比较运算符,以及具有恒定操作数的加法器,例如在graphlet计数器上执行的1单位增量运算。同样,所有这些优化都使用现有的静态分析技术,这些技术可以由高级综合工具捕获。
数据和地址寄存器的位宽都是针对将在这些寄存器中处理的数据而定的。例如,如果所有内存访问均为8字节长,那么我们可以忽略地址寄存器中的3个最低有效位,并将地址寄存器加1而不是8。最后,graphlet计数算法在内部使用两个哈希表-最多查找5个节点图的循环;这些哈希表使用ROM存储器本地存储在GPE中。

2)内存互连网络。存储器互连网络使每个GPE可以通过存储器交叉开关访问所有片外存储器。内存交叉开关由两个主要部分组成:一个用于内存访问请求,另一个用于内存访问响应。每个部分都包含三个不同的组件:FIFO,仲裁器和多路复用器。对于内存请求,每个GPE都有自己的FIFO来排队内存请求。仲裁器使用N路循环调度程序控制多路复用器,其中N是GPE的数量。对于内存响应,在通过循环仲裁器控制的多路复用器传输到GPE之前,FIFO还用于使内存响应排队。为了实现大量GPE的时序收敛,将存储器交叉开关组织为两个或三个流水线阶段,这导致减少了关键路径,而存储器访问延迟的增加可忽略不计

3)运行时管理单元。这涉及一些简单的控制逻辑,可以通过高级综合工具轻松生成。

表现评估

我们将硬件graphlet计数体系结构与软件实现的性能进行比较。
表II在执行时间方面比较了软件和硬件实现的性能。对于硬件实现,我们使用三种配置:16,64和128 GPE。对于软件实现,我们使用单CPU核和多CPU核来测量四核CPU的性能。
在这里插入图片描述
就并行资源的可伸缩性而言,HC-1比CPU更具可伸缩性,如图5所示。HC-1的性能似乎从16个GPE几乎线性地扩展到64个GPE,效率大于95%,这表明内存子系统尚未饱和,因此添加更多的GPE可能会提高HC-1实现的性能。随着GPE的数量从64倍增加到128,GHC-1的效率开始下降到90%左右,因为对于128个GPE,存储体争用的影响变得更加明显。对于CPU,添加更多的CPU内核并不能相应地放大大型图形,因为它的效率不到80%。这种非线性性能提升是由高速缓存协议开销引起的,并且可能是最后一级高速缓存未命中率提高了。就并行资源的可伸缩性而言,HC-1比CPU更具可伸缩性,如图5所示。HC-1的性能似乎从16个GPE几乎线性地扩展到64个GPE,效率大于95%,这表明内存子系统尚未饱和,因此添加更多的GPE可能会提高HC-1实现的性能。随着GPE的数量从64倍增加到128,GHC-1的效率开始下降到90%左右,因为对于128个GPE,存储体争用的影响变得更加明显。对于CPU,添加更多的CPU内核并不能相应地放大大型图形,因为它的效率不到80%。这种非线性性能提升是由高速缓存协议开销引起的,并且可能是最后一级高速缓存未命中率提高了。
在这里插入图片描述

计划的提升工作

与通用处理器相比,我们可重新配置的硬件体系结构的性能和可扩展性已经令人满意。话虽如此,我们正在研究以下技术,以提高可重构体系结构的性能和效率:

  • 多线程GPE。我们已经表明,随着GPE数量的增加,我们的硬件解决方案的性能几乎呈线性扩展,这表明我们尚未饱和所有可用的内存带宽。下一步是增加并发内存请求的数量或并行请求者的数量。这可以通过增加GPE的数量来实现,但是此数量将受到可重新配置设备的大小的限制。
  • 动态工作负载平衡。可以进一步优化分配给GPE的任务的计划,以提高整体性能。当前,我们使用静态调度程序,这可能会导致GPE的工作负载不均衡。原则上,动态方法应该改善GPE之间的工作负载平衡。
  • 专用缓存。尽管在我们当前的硬件体系结构中,通常由于图形问题的较差的内存局部性而没有内存分层结构,但我们计划在将来计划探索专用缓存以利用某些算法中可能存在的局部性。
  • 自定义内存互连。当前的内存互连网络将GPE连接到片外存储器,而无需执行任何高级技术来改善系统的整体性能。
  • 减少内存占用。在我们当前的设计中,图的大小受存储邻接矩阵所需的存储空间大小的限制,这需要| V | 2位存储空间。鉴于大多数现实世界的图相当稀疏且很少密集,因此使用哈希表可以大大减少邻接矩阵数据的内存占用。然后,可以将该散列构建到内存互连中,而不会增加GPE的计算负荷。

总结

在本文中,我们描述了一种可重构的图形算法硬件加速的新颖框架。通过案例研究,我们通过实验研究表明,与在四核CPU上运行的软件实现相比,我们的方法能够提供一个数量级的性能提速,从而将执行时间从数小时缩短至数分钟,同时实现更好的并行资源可伸缩性。总的来说,我们已经证明,使用我们的框架,我们可以克服内存延迟的成本,而内存延迟是图形算法运行时的一个主要因素。在撰写本文时,该设计流程的大多数步骤框架是手动执行的。我们的目标是提供一个证明概念,证明我们的方法可以显着改善性能。尽管这是一个短期目标,但我们最终旨在为图算法的硬件加速提供一个全自动框架。这包括探索高级综合工具以生成硬件。我们还将探索更多算法,这些算法将使我们能够进一步了解如何改进我们的框架。目前,我们仅支持未标记和未加权的图;将来,我们将扩展框架,以支持带标签和称重的图表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值