GraphGen: An FPGA Framework for Vertex-Centric Graph Computation

摘要

以顶点为中心的图形计算已广泛应用于对图形数据结构进行操作的许多机器学习和数据挖掘应用程序中。本文介绍了GraphGen,这是一个以FPGA为中心的顶点为中心的框架,用于图形计算的硬件加速。 GraphGen接受以顶点为中心的图形规范,并将其自动编译到目标FPGA平台的特定于应用程序的综合图形处理器和存储系统上。我们报告了使用GraphGen在Terasic DE4和Xilinx ML605 FPGA板上实现立体声匹配和手写识别图应用的设计案例研究。结果显示,这两种应用程序的速度分别比Intel Core i7 CPU上的软件高14.6倍和2.9倍。

介绍

基于图的数据结构的计算是机器学习和数据挖掘中许多应用程序的基础,可实现现代计算中的许多重要功能(例如,立体匹配,图像分割等)被广泛用于捕获这样的基于图形的应用程序,这些应用程序具有任意的图形结构,数据类型和图形更新功能。GraphGen项目提供了一个自动编译高级代码的设计框架。以加速器(例如,FPGA GPGP)为平台的以顶点为中心的图形级规范。目的是允许没有特定平台专业知识的应用程序开发人员利用硬件加速器的性能和能效。本文介绍了GraphGen用于自动编译到FPGA平台的以顶点为中心的图形规范。本文还提供了针对FPGA目标的GraphGen框架的高级概述。该框架自动将以顶点为中心的规范编译到FPGA上的特定于应用程序的综合图形处理器上该处理器使用一个内存子系统,该子系统设计用于处理由片外DRAM存储的大型图形数据结构。使用CoRAM [3]实现DRAM的DMA接口,以便灵活地针对多个FPGA平台。 GraphGen还提供用于验证的模拟器和RTL测试平台。图1说明了GraphGen框架。
在这里插入图片描述
本文还报告了设计案例研究,这些研究表明GraphGen在两个FPGA平台(Xilinx ML605和Terasic DE4)上实现两个应用程序(立体匹配,手写识别)的灵活性。

对于这两个应用程序,GraphGen的实现速度分别比Intel Core i7 CPU上的软件快14.6倍和2.9倍。本文其余部分安排如下。第二部分详细介绍了GraphGen的以顶点为中心的规范。第三部分提供了到FPGA的自动映射的高级概述。第四部分报告了设计案例研究。第五节讨论相关工作。第六节作总结性发言。

GRAPHGEN的顶点中心规范

A. Review of Vertex-Centric Abstraction
在以顶点为中心的规范中,图计算公式为图G =(V,E,D),其中V和E是G的顶点和边。边e =( u,v)连接两个顶点u和v。如果边是有向的,则u是源,而v是目标。可以将任意数据D与每个顶点{Dv:v∈V}和每个边沿{De:e∈E}关联。 D的值可以通过执行来更新,但是G的结构(即V和E)是固定的。顶点上的计算单位指定为update-function(v),这是一个无状态函数,修改顶点v的范围。范围Sv是与顶点v及其相邻边和顶点关联的数据。迭代地对每个顶点执行更新功能,直到满足终止条件(例如,已经达到期望的迭代次数)为止。

B GraphGen中的更新函数规范
与将更新功能描述为软件功能(例如C ++代码)的现有软件框架不同,GraphGen的规范将更新功能描述为自定义图形指令的组成这些自定义图形指令被映射到FPGA上的图形处理器,如下所示:

  • 首先,定义了用于更新功能的自定义指令。用户可以使用范围和临时数据变量作为输入和输出来定义用于计算任意组合功能的自定义指令。显式声明临时数据变量。
  • 然后,用户将这些自定义指令的流水线RTL实现作为规范的一部分提供。这些实现在编译过程中被集成到图形处理器中。它们必须遵循规范中声明的接口。任何硬件设计方法都可以用于创建这些自定义指令实现。
  • 最后,将更新功能指定为自定义指令的组合。在编译期间,使用更新功能,定制指令和图结构的规范来生成一系列定制指令,以对图中的给定顶点(即,顶点程序)执行更新功能。

C 例子
图2(a)显示了一个简单示例的图形,该图形具有六个顶点(v1至v6)和七个边缘(e1至e7)。图2(b)描绘了顶点数据(Dv)和边缘数据(De)的示例数据结构定义。它还显示了更新功能使用的临时数据变量的数据结构定义。此示例描述了三个32位整数(L0至L2),但通常可以是任意结构。图2(c)显示了名为i1,i2和i3的自定义指令的声明。这些指令的流水线RTL实现也包含在规范中。图2(d)展示了自定义指令i1的RTL模块接口(未显示时钟和复位信号)。
在这里插入图片描述
该模块由其具有的管线级数来注释。此信息在编译中使用。

图2(e)描述了示例更新功能。它首先读取顶点数据(vdata),并通过应用自定义指令i1初始化临时变量(tdata)。然后,它读取所有相邻边,并使用自定义指令i2计算tdata的新值。最后,i3根据输入边沿数据(edata)和tdata更新相邻边沿。图2(f)显示了从图的左上角到右下角的示例遍历顺序。遍历由四个阶段(P0,P1,P2,P3)组成,需要按顺序执行。每个阶段内的顶点都是独立的,可以并行执行。例如,P1中v2和v3的更新功能可以并行执行。

尽管相对简单,但本示例还是许多低级计算机视觉应用程序的代表[11],例如本案例研究中使用的立体声匹配应用程序。

在前面提到的规范中,GraphGen编译器可以生成一个顶点程序,该程序是图形处理器针对图形中给定顶点计算更新函数的一系列指令。图3(a)显示了顶点v3的示例程序。第一条i1指令对临时数据变量执行初始化。然后,将for-each循环详述为在连接到v3的边缘(e2,e4,e5)上操作的三个i2指令。最后的三个i3指令计算最后一个for-each循环。
在这里插入图片描述

D 使用SIMD图形指令改善并行度
由于更新功能通常包含在连接的边和/或顶点上的for-each循环操作。通过使用对多个数据(SIMD)进行操作的一条指令,可以改善并行性。 GraphGen支持此类SIMD样式自定义指令。图3(b)显示了图2(c)中自定义指令i2的SIMD版本,该自定义指令i2适用于图3(a)中v3的顶点程序。我们将一次处理的数据数量称为SIMD度。在此示例中,两个边缘数据由i2指令处理。因此,一条i2指令现在可以同时处理e2和e4沿。因此,现在在更新功能中为每个循环计算一个指令所需的指令数量减少了一个。SIMD指令的RTL实现需要作为规范的一部分包括在内。其界面需要结合指令SIMD度的适当数量的顶点/边缘数据输入/输出。

自动映射到FPGA

A 结构
GraphGen框架面向图4所示的系统体系结构。它由图形处理器和内存子系统组成,中间由暂存器组成。该处理器可定制以集成输入规范中提供的用户定义图形指令。处理器一次执行一组顶点(即子图)的更新功能。子图数据和顶点程序存储在处理器的顶点暂存器(VS),边暂存器(ES)和指令暂存器(IS)中,这些暂存器是通过FPGA Block RAM实现的。

整个图形的图形数据和顶点程序存储在外部存储器(DRAM)中。编译器将输入图划分为子图,并确定它们的执行时间表。内存系统包含一个基于CoRAM的DMA控制器,该DMA控制器按照执行计划将子图与处理器进行传输。处理器是DMA控制器的从属。 DMA控制器将子图带入处理器的暂存器后,便通知处理器开始执行完成后,处理器会向DMA控制器发送信号,指示它现在处于空闲状态并准备执行另一个子图。为了重叠数据传输和计算,处理器使用两组暂存器进行双缓冲。当它在一组上运行时,DMA控制器预取下一个子图以执行到第二组。
在这里插入图片描述
B 编译
GraphGen从输入规范中编译FPGA实现的关键步骤如下:首先,将图形划分为较小的子图,以便它们可以适合处理器的暂存器。。GraphGen提供手动和自动分区功能。对图进行分区后,编译器会为每个子图生成一个程序。基于输入更新函数规范和图结构,GraphGen首先为每个顶点创建程序。相应地考虑SIMD度(例如,如图3(b)所示)。然后,它将给定子图中顶点的程序合并为子图程序,以供处理器执行。下一个编译步骤将为FPGA生成存储映像。应用了各种优化来改善DRAM带宽的使用。最后,编译器生成可综合的RTL实现(Verilog),该实现由图形处理器,暂存器和内存子系统组成。

设计实例研究

我们进行了设计案例研究,以评估GraphGen框架的有效性。实验是在ML605和DE4平台上进行的。它们之间的主要区别是它们的DRAM带宽。 DE4有两个DDR通道,而ML605只有一个。

为了演示GraphGen的灵活性,我们实现了两个流行的图形应用程序,它们的属性差异很大,如表I所示。第一个应用程序是立体声匹配,如图5(a)所示。该应用程序接受立体图像对(左右2D图像),并推断包含每个像素深度信息的视差图。我们使用了树重加权消息传递(TRW-S)算法,该算法提供了优于其他选择的推理质量。我们研究的第二个应用是手写识别,如图5(b)所示。它接受手写数字的图像并输出数字应该是什么的推论。我们使用了一种流行的手写识别算法-卷积神经网络(CNN)。使用GraphGen,我们为ML605和DE4板生成了SIMD度为1、2和4的实现。唯一的例外是ML605的CNN,它没有足够的路由资源来容纳SIMD等级4。我们的目标是ML605上的图形处理器的时钟频率为100 MHz。对于DE4,我们可以在100MHz和150MHz上运行图形处理器。除具有SIMD等级4的150MHz CNN之外,所有DE4实现均使用2个DDR通道,这不满足时序要求。
t
在这里插入图片描述

图6描述了GraphGen生成的实现的性能
在这里插入图片描述
运行时间可分为处理器处于活动状态的时间(即计算)和等待数据加载到暂存器的时间(即数据)。结果表明,SIMD优化有助于提高性能,特别是在CNN中,图中每个节点都有许多边。此外,对于大多数设计而言,处理器停滞以等待数据可忽略不计。这表明GraphGen内存优化(例如,双缓冲)成功地将数据传输与计算重叠。对于内存优化不能完全隐藏数据传输的设计(例如,SIM605的SIMD等级为2和4的ML605上的TRW-S),在DE4上利用两个内存通道可进一步改进。我们还比较了性能最佳的设计(DE4 -150),且软件在1.87 GHz Intel Core i7 CPU上运行。在立体匹配和手写识别方面,GraphGen实现分别快了14.6倍和2.9倍。与Nvidia GTX 680m上的手工GPU实现相比,提速分别为10.8倍和1.3倍。

相关工作

几个以顶点为中心的框架,例如GraphLab,GraphChi 和Pregel ,已在机器学习社区中得到广泛使用。但是,这些框架完全基于软件,没有利用基于FPGA的加速。与以前的基于FPGA的图形计算框架相比,GraphGen是独一无二的,因为它是唯一的支持所有这些功能:
(1)对图形数据进行读写操作;
(2)使用片外DRAM管理基于现代图形的应用程序中日益庞大的图形数据集;
(3)从高级以顶点为中心的规范到FPGA实施的最终编译流程
(4)支持多个FPGA平台。

总结

本文介绍了GraphGen,这是一种用于以顶点为中心的图形计算的FPGA框架。该框架接受以顶点为中心的规范,并为目标平台生成FPGA实现。设计案例研究表明,GraphGen可以灵活地处理针对不同FPGA平台的不同图形应用程序。他们还表明,GraphGen实现比软件实现显着提高了速度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值