GraphR: Accelerating Graph Processing Using ReRAM

(HPCA2018 by Linghao Song)

摘要

鉴于理解关系的广泛需求,图处理最近受到了广泛的关注。它以糟糕的局部性和高内存带宽要求而闻名。在传统架构中,它们会产生大量的数据移动和能量消耗,这激发了几种硬件图处理加速器。当前的图处理加速器依赖于内存访问优化或将计算逻辑靠近内存。与所有现有方法不同,我们利用新兴的内存技术来加速模拟计算的图处理。

本文介绍了第一个基于 ReRAM 的图形处理加速器 GRAPHR。 GRAPHR 遵循近数据处理的原则,探索以低硬件和能源成本执行大规模并行模拟运算的机会。 模拟计算适用于图形处理,因为: 1)算法是迭代的,可以固有地容忍不精确性; 2) 概率计算(例如,PageRank 和协作过滤)和典型的涉及整数的图算法(例如,BFS/SSSP)都具有容错性。 GRAPHR 的关键见解是,如果图算法的顶点程序可以用稀疏矩阵向量乘法 (SpMV) 表示,那么它可以通过 ReRAM 交叉开关有效地执行。 我们表明,对于大量图算法,这种假设通常是正确的。

GRAPHR是一种新颖的加速器体系结构,由两个组件组成: 内存ReRAM和图形引擎 (GE)。核心图计算以GEs (ReRAM crossbar) 中的稀疏矩阵格式执行。基于向量/矩阵的图形计算并不新鲜,但是ReRAM提供了独特的机会,以前所未有的能效和较低的硬件成本实现大规模并行性。对于由GEs处理的小子图,执行并行操作的增益掩盖了由于稀疏而造成的浪费。实验结果表明,与CPU基准系统相比,GRAPHR在几何平均值上实现了16.01 × (最高132.67 ×) 的加速和33.82 × 的节能。与GPU相比,GRAPHR可实现1.69 × 至2.19 × 的加速,并消耗4.77 × 至8.91 × 的能量。与基于PIM的体系结构相比,GRAPHR的加速速度为1.16 × 至4.12 ×,能量效率为3.67 × 至10.96 ×。

1.介绍

随着从大量来源收集的数据的爆炸式增长,由于对关系的理解需求不断增加,图处理受到了广泛的关注。它已应用于许多重要领域,包括网络安全 [59],社交媒体 [3],PageRank引文排名 [47],自然语言处理 [9,16,40],系统生物学 [12,14],推荐系统 [33, 54, 62] 和机器学习 [20, 42, 61]。

有几种方法可以执行图形处理。分布式系统 [10、22、30、36、57、67] 利用充足的计算资源来处理大图。然而,它们固有地受到同步和容错开销 [27、50、69] 和负载不平衡 [63] 的影响。或者,基于磁盘的单机图形处理系统 [28、52、58、60、70] (也称为核心外系统)可以在很大程度上消除分布式框架的所有挑战。这种系统的关键原理是只在内存中保留少量的活动图形数据,并将剩余部分溢出到磁盘。第三种方法是内存图形处理。许多成功的项目,包括RAMCloud[45] 、Pregel [39] 、GraphLab [37] 、甲骨文TimesTen [29] 和SAPHANA [19],都体现了内存中数据处理的潜力。

由于遍历邻域顶点时的随机访问和高内存带宽要求,它以局部性差而闻名,因为从内存访问数据的计算通常很简单。此外,图操作会导致内存带宽浪费,因为它们只使用缓存块的一小部分。在传统架构中,图形处理会导致大量数据移动和能源消耗。为了克服这些挑战,提出了几种硬件加速器[4,23,46],以使用专门的架构更有效地执行图形处理。在下文中,我们回顾了图计算和当前的解决方案来激发我们的方法。

图可以自然地表示为邻接矩阵,并且大多数图算法可以通过某种形式的矩阵向量乘法来实现。但是,由于图的稀疏性,图数据不是以压缩的稀疏矩阵表示形式存储的,而是以矩阵形式存储的。基于稀疏数据表示的图处理包括:1)基于压缩表示从内存中引入数据进行计算; 2)对加载的数据执行计算。由于稀疏性,1)中的数据访问可能是随机且不规则的。本质上,2) 执行简单的计算,这些计算是矩阵向量乘法的一部分,但仅限于非零操作数。因此,每个计算核心都会经历可选的长随机存储器访问延迟和短计算。这导致了图形处理中众所周知的挑战和其他问题,例如内存带宽浪费 [23]。

当前的图形处理加速器主要优化内存访问。具体来说,Graphionado [23] 通过用对暂存器内存优化和流水线的顺序访问代替对常规内存层次结构的随机访问来减少内存访问延迟并提高吞吐量。奥兹达尔等人。 [46]通过延迟容忍和硬件支持来提高性能和能源效率,以实现依赖跟踪和一致性。 TESSERACT [4] 通过将计算逻辑(例如,有序内核)放置在靠近内存的位置来应用近数据处理的原理,以获得混合内存立方体 (HMC) [48] 的高内部带宽。然而,所有架构在计算单元上几乎没有变化——简单的计算由指令或专用单元一次执行一个。

为了执行矩阵向量乘法,存在两种反映频谱两端的方法:1)基于密集矩阵的方法会导致定期的内存访问并使用矩阵/向量中的每个元素执行计算; 2) 基于稀疏矩阵的方法会产生随机内存访问,但只对非零操作数执行计算。 在本文中,我们采用了一种方法,可以将其视为这两端之间的中点,这可能会实现更好的性能和能源效率。 具体来说,我们建议对压缩表示的数据块执行稀疏矩阵向量乘法。 好处是双重的。 首先,增加了计算和数据移动的比率。 这意味着带来数据的成本可以自然地被对数据块的大量计算所隐藏。 其次,在这个数据块内部,可以并行执行计算。 缺点是某些硬件和能量将被浪费在执行无用的零乘法上。

这种方法原则上可以应用于当前的 GPU 或加速器,但在相同数量的计算资源(例如 GPU 中的 SM)下,尚不清楚增益是否会超过稀疏性导致的低效率。 显然,一个关键因素是计算逻辑的成本——通过一种低成本的机制来实现矩阵向量乘法,所提出的方法可能是有益的。

在本文中,我们证明了非易失性存储器,金属氧化物电阻随机存取存储器 (ReRAM) [65] 可以用作在图形处理中执行矩阵向量乘法的基本硬件构建块。最近的工作 [13,55,56] 证明了ReRAM的有效原位矩阵矢量乘法在神经网络加速上的有前途的应用。模拟计算适用于图形处理,因为: 1) 迭代算法本质上可以容忍不精确的值; 2) 概率计算 (例如PageRank和协作过滤) 和涉及整数的典型图形算法 (例如BFS/SSSP) 都对错误具有弹性。由于低成本和能效,ReRAM中基于矩阵的计算不会由于稀疏性而导致大量硬件浪费。此类浪费仅在尺寸适中 (例如8 × 8) 的ReRAM横杆内部产生。而且,稀疏性并没有完全丢失,-如果一个小子图包含所有零,则不需要对其进行处理。因此,该体系结构将主要享受计算中更多并行性以及计算和数据移动之间更高比率的好处。在ReRAM中执行计算还可以减少数据移动的近数据处理: 数据不需要像传统体系结构或某些加速器那样经过内存层次结构。

在图形处理中应用 ReRAM 带来了一些挑战:1)数据表示。图形以压缩格式存储,而不是以邻接矩阵的形式存储,要进行内存计算,需要将数据转换为矩阵格式。== 2) 大图==。现实世界的大图可能不适合内存。 3)执行模型。子图处理的顺序需要仔细确定,因为它会影响硬件成本和正确性。== 4) 算法映射==。将各种图算法映射到具有良好并行性的 ReRAM 非常重要。

本文提出了 GRAPHR,一种基于 ReRAM 的新型图形处理加速器。它由两个关键组件组成:内存 ReRAM 和图形引擎 (GE),它们都基于 ReRAM,但具有不同的功能。内存 ReRAM 以压缩的稀疏表示形式存储图形数据。 GE(ReRAM 交叉开关)对稀疏矩阵表示执行有效的矩阵向量乘法。我们提出了一种新颖的流应用模型和相应的预处理算法,以确保正确的处理顺序。我们提出了两种算法映射模式,并行 MAC 和并行 add-op,以实现不同类型算法的良好并行性。 GRAPHR 可用作核外图形处理系统的嵌入式加速器。

在评估中,我们将 GRAPHR 与基于高端 CPU 平台、GPU 和 PIM [4] 实现的软件框架 [70] 进行比较。实验结果表明,与 CPU 基线相比,GRAPHR 在几何平均值上实现了 16.01 倍(最高 132.67 倍)的加速和 33.82 倍的节能。与 GPU 相比,GRAPHR 实现了 1.69 到 2.19 倍的加速,并且消耗了 4.77 到 8.91 倍的能量。与基于 PIM 的架构相比,GRAPHR 的加速比提高了 1.16 倍至 4.12 倍,能效提高了 3.67 倍至 10.96 倍。

本文组织如下。第2节介绍了图处理的背景,ReRAM和当前的硬件图处理加速器。第3节介绍了GRAPHR体系结构。第4节介绍了各种图算法的处理模式。第5节介绍了评估方法和实验结果。第六节是本文的结论。

2.背景和动机

2.1图处理


图算法遍历顶点和边以根据关系发现有趣的图属性。 一个图可以自然地被认为是一个邻接矩阵,其中行对应于顶点,矩阵元素表示边。 大多数图算法都可以映射到矩阵运算。 然而,实际上,图是稀疏的,这意味着邻接矩阵中会有很多零。 此属性会导致存储和计算资源的浪费。 因此,当前的图处理系统使用适合稀疏图数据的格式。 基于这样的数据结构,图处理本质上可以认为是在稀疏矩阵表示上实现矩阵运算。 在这种情况下,整个矩阵计算中的单个(和简单)操作在获取数据后由计算单元(例如 CPU 中的核心或 GPU 中的 SM)执行。 在下文中,我们详细阐述了各种图处理方法中随机访问的挑战。 关于稀疏图数据表示的更多细节将在 2.4 节中讨论。

为了提供一个简单的编程接口,以“象顶点一样思考 (TLAV) ”为特征的顶点中心程序 [39] 被提出为人类大脑思考图形问题的一种自然和直观的方法。图1 (a) 显示了一个示例,一个算法可以首先访问和处理中心的红色顶点,其所有邻居都通过红色边缘。然后它可以移动到其中一个邻居,顶部的蓝色顶点,通过蓝色边缘访问顶点和邻居。然后,该算法可以访问另一个顶点(左边的绿色顶点),该顶点是蓝色顶点的相邻顶点之一。

在图处理中,顶点访问导致随机访问,因为相邻顶点不是连续存储的。对于边,它们会引起局部顺序访问,因为与顶点相关的边连续存储,但是全局随机访问,因为算法需要访问不同顶点的边。概念如图1 (b) 所示。随机访问会导致较长的内存延迟,更重要的是会导致带宽浪费,因为在内存块中仅访问一小部分数据。在传统的分层存储系统中,这会导致大量的数据移动。


显然,减少随机访问对于提高图形处理的性能至关重要,这对于基于磁盘的单机图形处理系统(a.k.a out-of- 核心系统 [28, 52, 60, 70]),因为随机磁盘 I/O 操作对性能的危害更大。 在这种情况下,内存被认为是小而快(因此可以承受随机访问),而磁盘被认为是大而慢(因此只能按顺序访问)。 X-Stream [52] 中的以边为中心的模型是减少随机访问的显着解决方案。 具体而言,图分区的边在磁盘中顺序存储和访问,相关顶点在内存中随机存储和访问。 这种设置是可行的,因为通常顶点数据比边缘数据小得多。 在此过程中,X-Stream 在分散阶段生成更新,这会导致顺序写入,然后在聚集阶段将这些更新应用到顶点,从而导致顺序读取。 这些概念如图 2 (a) 所示。

X-stream 的一个显着缺点是更新的数量可能与边的数量一样大,GridGraph [70] 提出了优化以进一步降低存储成本和由于更新引起的数据移动。该解决方案基于双滑动窗口(如图 2 (b) 所示),它将边划分为块,将顶点划分为块。在访问边块时,源顶点块(橙色)被访问,更新直接应用于目标顶点块(蓝色)。这不需要像 X-Stream 中那样的临时更新存储。可以以面向源的顺序(如图 2 (b) 所示)或面向目标的顺序访问边缘块。请注意,双滑动窗口机制基于以边缘为中心的模型。

2.2 ReRAM 基础

电阻式随机存取存储器 (ReRAM) [65] 是一种新兴的非易失性存储器,具有高密度、快速读取访问和低泄漏功率等吸引人的特性。 ReRAM 被认为是未来内存架构的有希望的候选者。 ReRAM 的主要应用是用作主存储器的替代品[18,34,68]。 图 3 (a) 展示了 ReRAM 单元的金属-绝缘体-金属 (MIM) 结构。 它具有顶部电极、底部电极和夹在电极之间的金属氧化物层。 通过在其上施加外部电压,ReRAM 单元可以在高电阻状态(HRS 或 OFF 状态)和低电阻状态(LRS 或 On 状态)之间切换,这用于表示逻辑“0”和 “1”,分别如图3(b)所示。 ReRAM 的耐久性可能高达 1012 [24, 31],从而减轻了其他非易失性存储器(例如 PCM [49])所面临的寿命问题。

ReRAM的特点是能够执行图3(c)所示的原位矩阵向量乘法[25,26],它利用ReRAM交叉条中位线电流求和的特性,实现高性能和低能耗的计算。虽然传统的基于CMOS的系统在神经网络加速方面取得了成功[6,11,38],但最近的工作[13,35,55,56]表明,基于ReRAM的体系结构为计算和内存密集型神经网络计算提供了显著的性能和能量效益。

2.3图处理加速器

由于图处理的广泛应用及其挑战,最近提出了几种硬件加速器。安等人[4] 提出了 TESSERACT,第一个基于 PIM 的图形处理架构。它定义了一个通用的通信接口来将图形处理映射到 HMC。在任何时候,每个核心都可以进行远程内存访问并被中断以接收和执行来自其他核心的 Put 调用。奥兹达尔等人[46] 引入了一种用于异步图处理的加速器,它具有高效的硬件调度和依赖跟踪功能。要使用该系统,程序员必须了解其架构并修改现有代码。 Graphicionado [23] 是一种基于片外 DRAM 和片上 eDRAM 的定制图形加速器,旨在实现高性能和高能效。它修改图形数据结构和数据路径以优化图形访问模式,并设计专门的内存子系统以获得更高的带宽。这些加速器都优化了内存访问,减少了延迟或更好地容忍随机访问延迟。 [5] 和 [43] 专注于内存中的数据一致性,可以通过来自主机 CPU 和加速器的指令访问,并且 [43] 还考虑了原子操作。

2.4图的表示

如第 1 节所述,支持小数据块上的矩阵向量乘法可以增加计算和数据移动之间的比率并减少内存系统的压力。 凭借其矩阵向量乘法能力,ReRAM 自然可以在稀疏子矩阵(子图)上执行低成本的并行密集运算,在不增加硬件和能源成本的情况下享受收益。

GRAPHR 的关键见解仍然是将大部分图形数据存储在压缩的稀疏矩阵表示中,并以未压缩的稀疏矩阵表示形式处理子图。 下面,我们回顾几种常用的稀疏表示。


三种主要的压缩稀疏表示是压缩稀疏列(CSC)、压缩稀疏行(CSR)和坐标列表(COO)。 它们如图 4 所示。在 CSC 表示中,非零值按列主顺序存储为列表中的(行索引,值)对,列表中的条目数是非零值的数量。 另一个列起始指针列表指示 (row,val) 列表中行的起始索引。 例如,在图 4 (a) 中,colptr 中的 4 表示 (row,val) 列表中的第 4 个条目,即 (0,8) 是第 3 列的开头。 colptr 中的条目数为列数+1。压缩稀疏行(CSR)类似于CSC,行和列交替。 对于坐标列表 (COO),每个条目都是非零的(行索引、列索引、值)的元组。

在 GRAPHR 中,我们假设坐标列表 (COO) 表示来存储图形。 给定图 5 1 (a) 中的图,其(稀疏)邻接矩阵表示和 COO 表示(划分为四个 4×4 子图)分别如图 5(b) 和 © 所示。 在此示例中,与邻接矩阵表示相比,坐标列表节省了 61% 的存储空间。 对于具有高稀疏性的真实世界图,节省的成本甚至很高:与邻接矩阵相比,WikiVote [32] 的坐标列表仅占用 0.2% 的空间。

3.GraphR体系架构

3.1稀疏矩阵向量乘法(SpMV)与图形处理


图 6 显示了用于图形处理的通用顶点编程模型。它遵循“像顶点一样思考”的原则[39]。在每次迭代中,计算可以分为两个阶段。在第一阶段,使用 processEdge 函数处理每条边,基于边权重和活动源顶点 V 的属性 (V.prop),它为每条边计算一个值。在第二阶段,每个顶点减少所有传入边的值 (E.value) 并生成一个属性值,该属性值应用于顶点作为其更新的属性。

图7(a)显示了图形视图中的顶点程序。V15、V7、V1和V2分别执行processEdge函数,结果存储在V4对应的边中。处理完所有边后,V4执行reduce函数生成新属性并更新自身。在图形处理中,processEdge函数中的操作是乘法,为每个顶点生成新的属性,本质上需要的是乘法累加(MAC)操作。此外,每个顶点的顶点程序相当于图7(b)所示的稀疏矩阵向量乘法(SpMV)。假设A是稀疏邻接矩阵,x是包含所有顶点的V.prop的向量,所有顶点的顶点程序可以在矩阵视图中作为ATx并行计算。如图3(c)所示,ReRAM crossbar可以有效地执行矩阵向量乘法。因此,只要顶点程序可以用SpMV形式表示,我们的方法就可以加速它。我们将在第4节讨论在SpMV中表达算法的不同模式。

从图7(b)中,我们看到矩阵和向量的大小是|V|×|V|和|V|,其中V是图中的顶点数。在理想情况下,如果给定一个大小为 |V|×|V| 的 ReRAM 交叉开关 (CB),则每个顶点的顶点程序可以并行执行,并且新值(即图 6 中的 V.prop)可以在一个周期内计算。更重要的是,存储 AT 的内存可以直接执行这种内存计算,无需数据移动。不幸的是,这是不现实的,CB 的大小非常有限(例如 4×4 或 8×8),为了实现这个想法,我们需要使用由小 CB 以某种方式组成的 Graph Engines (GE) 处理子图。这是 GRAPHR 架构的最终设计目标。我们面临几个关键问题。首先,如第 2.4 节所述,图以压缩格式存储,而不是以邻接矩阵的形式存储,要执行内存计算,需要将数据转换为矩阵格式。其次,现实世界的大图可能不适合内存。第三,需要仔细确定子图处理的顺序,因为这会影响缓冲临时结果以进行归约的硬件成本。

为了解决这些问题,图7(d)显示了高级处理过程。GRAPHR体系结构既有内存也有计算模块,每次都会将一个大型图形块以压缩稀疏表示加载到GRAPHR的内存模块(蓝色)。如果内存模块可以适应整个图形,那么只有一个块,否则,一个图形会被划分成几个块。在GRAPHR内部,有许多GEs(橙色),每个GEs由流应用模型(第3.3节)中的若干CBs、“扫描”和“处理”(类似于toa滑动窗口)子图组成。为了实现内存计算,控制器将图形数据转换为矩阵格式。对于预处理的边缘列表,这种转换非常简单(第12节)。子图的中间结果存储在缓冲区中,并使用简单的计算逻辑执行约简。

GRAPHR可以在两种设置中使用:1)多节点:一个可以连接不同的GRAPHR节点,并将它们连接在一起以处理大型图。在这种情况下,每个块都由一个GRAPHR节点处理。数据移动发生在GRAPHR节点之间。2)核外:一个可以使用一个GRAPHR节点作为内存中图处理加速器,以避免使用多个线程和通过内存层次结构移动数据。在这种情况下,所有块都由单个GRAPHR节点连续处理。数据移动发生在磁盘和GRAPHR节点之间。在本文中,我们假设核外设置,因此我们不考虑节点及其支持之间的通信,我们将此作为未来的工作和扩展。接下来,我们将介绍整个GRAPHR体系结构及其工作流程。

3.2 GraphR架构


图8显示了一个GRAPHR节点的体系结构。GRAPHR是一个基于ReRAM的内存模块,可执行高效的近数据并行图形处理。它包含两个关键组件:内存ReRAM和图形引擎(GE)。内存ReRAM以原始压缩稀疏表示形式存储图形数据。GEs对矩阵表示执行有效的矩阵向量乘法。GE包含许多ReRAM交叉杆(CBs)、驱动器(DRV)、置于网格中的采样保持(S/H)组件,它们与模数转换器(ADC)、移位和加法单元(S/A)以及简单算法和逻辑单元(sALU)相连。输入和输出寄存器(RegI/RegO)用于缓存数据流。下面我们将详细讨论几个组件。

Driver (DRV) 用于 1) 将新的边缘数据加载到 ReRAM crossbars 进行处理; 2) 将数据输入到 ReRAM 交叉开关中以进行矩阵向量乘法。

Sample and Hold(S/H) 它用于对模拟值进行采样并在转换为数字形式之前将其保持。

Analog to Digital Converter (ADC) 它将模拟值转换为数字格式。 因为 ADC 具有相对较高的面积和功耗,所以 ADC 不是连接到 GE 中 ReRAM 交叉开关的每个位线,而是在这些位线之间共享。 如果 GE 周期为 64ns,我们可以让一个 ADC 以 1.0GSps 工作,以在一个 GE 内转换来自八个 8 位线交叉开关的所有数据。

sALU 它是一个简单的定制算法和逻辑单元。 sALU 执行 ReRAM 交叉开关无法有效执行的操作,例如比较。 sALU 执行的实际操作取决于算法并且可以配置。 当我们在第 4 节讨论算法时,我们将展示更多细节。

Data Fmart ReRAM 单元支持高分辨率是不切实际的。 最近的工作 [26] 报告了 ReRAM 编程的 5 位分辨率。 为了减轻潜水员的压力,我们保守地假设为 4 位 ReRAM 单元。 为了支持更高的计算分辨率,例如 16 位,采用了移位和加法 (S/A) 单元。 一个 16 位的定点数 M 可以表示为 M=[M3,M2,M1,M0],其中每个段 Mi 是一个 4 位的数。 我们可以将四个 4 位分辨率 ReRAM 交叉开关(即 D3 12+D2 8+D1 4+D0)的结果移位和相加,得到 16 位结果。

当sALU和S/A被旁路掉时,图引擎可以简单地视为内存ReRAM 模式。在 [13] 中采用了类似的重新使用ReRAM横杆进行计算和存储的方案。

I/O 接口用于将图形数据和指令分别加载到内存 ReRAM 和控制器中。在 GRAPHR 中,控制器(后面的代码是这个控制器的)是可以执行简单指令的软件/硬件接口:1)基于流应用执行模型协调内存 ReRAM 和 GE 之间的图形数据移动; 2) 将内存 ReRAM 中的预处理坐标列表(本文假设但也可以与其他表示一起使用)中的边缘转换为 GE 中的稀疏矩阵格式; 3) 进行收敛检查。


图 9 显示了 GRAPHR 在核外设置中的工作流程。 GRAPHR 节点可用作嵌入式内存图形处理加速器。每个块的加载由核外图形处理框架(例如,GridGraph [70])在软件中执行。集成很容易,因为它已经包含将块从磁盘加载到 DRAM 的代码,我们只需要将数据重定向到 GRAPHR 节点。由于边列表是按一定顺序进行预处理的,因此加载每个块只涉及顺序磁盘 I/O。在 GRAPHR 节点内部,数据初始加载到内存 ReRAM 中,控制器以流应用的方式管理 GE 之间的数据移动。 GRAPHR 的边列表预处理需要仔细设计,它基于架构参数。图 10 显示了控制器执行的操作。

3.3流应用执行模型


在GRAPHR中,所有GEs都处理子图,处理顺序很重要,因为它会影响硬件资源需求。我们提出了流应用执行模型,如图11所示。关键的见解是,子图以流方式处理,并且由sALU在 fl y上执行缩减。此模型有两种变体: column-major和row-major。在执行期间,RegI和RegO用于存储源顶点和更新的目标顶点。在图11 (a) 中,以列主顺序,具有相同目标顶点的子图一起处理。所需的RegO大小与子图中的目标顶点数相同。在图11 (b) 中按行主顺序,具有相同源顶点的子图一起处理。所需的RegO大小是具有相同源顶点的所有子图的目标顶点总数。很容易看出,行主订单需要更大的RegO。另一方面,行主序对RegI的读取较少,-对于具有相同源顶点的所有子图,仅需要一次读取。在GRAPHR中,我们使用列主顺序,因为它需要更少的寄存器,并且在ReRAM中,写入成本高于读取成本。

图11( c )在完整的核外设置中的全局处理顺序。 我们看到整个图被划分为 4 个块,其中三个以 COO 表示存储在磁盘中,一个以 COO 表示存储在 GraphR 的内存 ReRAM 中。 只有 GE 正在处理的子图是稀疏矩阵格式。 由于图数据的稀疏性,如果子图为空,则 GE 可以向下移动到下一个子图。 因此,稀疏性只会在子图内部产生浪费(例如,当一个 GE 有一个空矩阵而其他 GE 没有时)

3.4图预处理

为了支持流式应用执行模型和从协调列表表示到稀疏矩阵格式的转换,需要对边列表进行预处理,以便将连续子图的边存储在一起。它还确保在加载块/子图时顺序访问磁盘和内存。下面,我们将详细解释预处理过程。

给定一些架构参数,预处理在软件中实现并且只执行一次。图 12 说明了这些参数和我们应该生成的子图顺序。此顺序由流应用模型确定。 C是CB的大小; N 是 GE 中 CB 的数量; G 是一个 GRAPHR 节点中的 GE 数量; B 是块中的顶点数(即块大小)。此外,V 是图中的顶点数。参数中,C、N 和 G 指定了 GRAPHR 节点的架构设置,B 由节点中内存 ReRAM 的大小决定。在示例中,图有 64 个顶点(V = 64),每个块有 32 个顶点(B = 32),因此图被划分为 4 个块,每个块将从磁盘加载到 GRAPHR 节点。此外,C = 4,N = 2,G = 2,因此子图大小为 C×(C×N×G)= 4×(4×2×2)= 4×16。因此,将每个块划分为 16 个子图,每个子图的数量为全局子图顺序。我们的目标是根据这个顺序生成一个有序的边列表,以便边可以顺序加载。

在介绍算法之前,我们假设原始边列表首先基于源顶点排序,然后对于具有相同源的所有边,它们按目的地排序。 换句话说,边在矩阵视图中以行优先顺序存储。 我们还假设在有序边列表中,子图中的边以列优先顺序存储。 考虑矩阵视图中的问题,每条边(i,j),我们首先计算一个全局顺序ID(I(i,j)),所以我们有一个3元组:(i,j,I(i,j) )。 这个全局订单ID考虑了所有的零,例如,如果全局订单的两条边之间有k个零,那么它们的全局顺序ID的差值仍然是k。 然后,所有 3 元组都可以按 I(i, j) 排序。 如果我们按照这个顺序输出它们,就得到了有序边列表。 该过程的空间和时间复杂度分别为 O(V) 和 O(VlogV),采用常用方法。 这里的关键问题是为每个 (i, j) 计算 I(i, j)。 没有混淆,我们简单地将 I(i, j) 表示为 I。我们表明 I 可以以分层方式计算。

令BI表示包含 (i,j) 的块的全局块顺序。我们假设块也按列主要顺序处理: B(0,0) → B(1,0) → B(0,1) → B(1,1)。一个块B的坐标为:

基于clolunm-major顺序,BI为:

我们假设B可以除V,同样地,C可以除B,C×N×B可以除B。否则,我们可以简单地填充零以满足条件,这不会影响结果,因为这些零与实际边不对应。对应于BI的块以以下全局顺序ID开始:

接下来,我们计算 SI, (i, j) 的全局子图 ID。从块 BI (Bi,Bj) 开始的边坐标为:

子图的相对坐标从对应块开始:

这样我们就可以得到:

最后,我们计算 SubI,即 (i, j) 从其对应的子图 (SI) 的相对顺序。 坐标是:

由于假定子图中的边以cloumn-major顺序存储,因此 SubI 为:

通过计算 SI 和 SubI,我们得到 I:

3.5讨论


表 1 比较了图形处理的不同架构。 由于两个独特的功能,GRAPHR 比以前的架构有所改进。 首先,计算是以模拟方式执行的,其他的则使用指令或专门的数字处理单元。 这提供了出色的能源效率。 其次,GRAPHR 中的所有磁盘和内存访问都是顺序的,这是由于预处理和调度顶点的灵活性较低。 这是一个很好的折衷方案,因为在 ReRAM CB 中执行并行操作非常节能。 我们认为 GRAPHR 是第一个使用 ReRAM CB 执行图形处理的架构方案,本文提出了详细而完整的解决方案,将其集成为核外图形处理系统的嵌入式加速器。 架构、流应用执行模型和预处理算法都是新颖的贡献。 此外,GRAPHR 是通用的,因为它可以加速所有可以以 SpMV 形式执行的顶点程序。

4.GE中的映射算法

在本节中,我们讨论将算法映射到 GE 时的两种模式:并行 MAC 和并行加法运算。我们使用每个类别的典型示例(即分别为 PageRank 和 SSSP)来解释这些见解。表 2 中列出了 GRAPHR 中支持的算法的更多示例(但不是全部)。前两个是并行 MAC 模式,后两个是并行 add-op 模式。

4.1并行MAC

在一个算法中,如果 processEdge 函数执行一个乘法,可以在每个 CB 单元中执行,我们称之为并行 MAC 模式。 并行化程度大致为(C×C×N×G)(见图9中的参数)。
PageRank [47] 是这种模式的一个很好的例子。图 13 显示了它的顶点程序。它执行以下迭代计算:

PR_t表示在pagerank的第t次迭代,M是概率转移矩阵,r是随机浏览的概率,→e是停留在每一页的概率向量。

我们考虑一个5 × 4CB 的小子图(附加行是执行加法)。它最多包含16条边,由稀疏矩阵中4行和4列的交叉表示(如图16(a)所示)。因此,块与8个顶点相关(即 i0∼ i3,j0∼ j3)。以下是图16(b1)所示4 × 4块 pagerank 的参数: M = [0,1/2,1,0; 1/3,0,0,1/2; 1/3,0,0,1/2; 1/3,1/2,0,0]T ,→ e = [1/4,1/4,1/4,1/4] T,r = 4/5。

我们定义

所以


在图 16 (b2, b3) 中的 CB 中,这些值已经用 r 进行了缩放。 图 16 (b3) 显示了 PageRank 算法到 CB 的映射。 附加行用于实现 -→e0 的加法。 sALU 被配置为在 reduce 函数中执行 add 操作以添加 PageRank 值(图 15 (a))。 为了检查收敛性,将新的 PageRank 值与上一次迭代中的值进行比较,如果差值小于阈值,则算法收敛。

4.2并行add-op

在算法中,如果processEdge函数执行加法 (可以一次针对每个CB行执行加法),则我们将其称为并行add-op模式。op指定在sALU中实现的reduce中的操作。并行化度大致为 (c × n × g)。单源最短路径 (SSSP) [15] 是这种模式的典型例子。图14显示了顶点程序。我们看到processEdge执行加法,reduce执行最小操作。因此,sALU被配置为执行图15 (b) 所示的最小操作。

在SSSP中,每个顶点v都被赋予一个距离标签dist(v),该距离标签dist(v) 保持从源到顶点v的最短已知路径的长度。距离标签在源处初始化为0,在所有其他节点处初始化为 ∞。然后SSSP算法迭代地应用松弛算子,松弛算子定义如下: 如果 (u,v) 是一条边且dist(u) w(u,v) <dist(v),则dist(v) 的值更新为dist(u) w(u,v)。通过将此运算符应用于与其连接的所有边,可以松弛活动顶点。每个松弛可以降低某个顶点的距离标签,并且当在图形中的任何位置都不能执行进一步的降低时,所得到的顶点距离标签指示从源到顶点的最短距离,而不管松弛的顺序如何执行。图的广度优先编号是SSSP的一种特殊情况,其中所有边缘标签均为1。

我们使用一个小的 8 顶点子图来解释 SSSP 算法到 CB 的映射,该子图对应于稀疏矩阵中的 4 × 4 块,如图所示 在图 16 (c1) 中。 可以用邻接矩阵表示:W =[M,1,5,M;M,M,3, 1; M,M,M,M;M,M,1,M] 其中 M 表示没有连接两个顶点的边,并且 M 设置为 CB 中的存储单元的保留最大值。 这些值存储在图 16 (c2) 中所示的 CB 中。

给定一个顶点 u 和 dist(u),u 的邻接矩阵 W 中的行表示 w(u,v)。 我们可以并行执行 u 的松弛算子(即加法)。 这里,SpMV 仅用于通过与 one-hot 向量相乘来选择 CB 中的一行。

u的松弛算子涉及读取: 1) dist(u): 从源迭代计算,对于源顶点,初始值为零; 2) 松弛算子之前的dist(v) 的向量: 它是一个向量,指示源和所有其他顶点之间的距离,并且也是从源迭代计算的。在我们的示例中,对于源顶点 (i0,i1,i2,i3),初始值为 [4,3,1,2]; 3) w(u,v) 的向量: 它是从u到子图中目的顶点的距离,并且可以通过读取邻接矩阵W中的一行来获得。

图16(c3)显示了在5 × 4 cb 中执行 sssp 的过程。最后一行(绿色方块)被设置为一个固定值1,用于将 dist (u)(最后一个单词行的输入)添加到松弛操作符中的每个 w (u,v)。目标顶点(j0,j1,j2,j3)的 dist (u)的初始值是[7,6,m,m ]。W (u,v)的向量是通过激活时间槽中与顶点 v 相关的 wordline (t = 1)获得的,wordline 0(表示源顶点 i0)被激活(红色方块,输入值为1) ,值4(表示源顶点 i0的 dist (v)中的当前值)被输入到最后一个 wordline (绿色方块行)。目标顶点((j0,j1,j2,j3)的 dist (v)的向量设置为每个位线上输出的值,即[7,6,m,m ]。利用这种映射,图16(c3-1)位线的当前求和为[1 × m + 4 × 1,1 × 1 + 4 × 1,1 × 5 + 4 × 1,1 × m + 4 × 1] = [ m,5,9,m ]。它是平行计算的 dist (u) + w (u,v) ,其中 u 是源顶点。然后用一组比较器将源到每个顶点 v 的距离与初始 dist (v)([7,6,m,m ])进行比较,得到位线的最终输出[7,5,9,m ] ,即时间槽 t = 1后更新的 dist (v)向量。并行比较是通过顶点相关操作执行的。不同的算法可能需要不同的顶点函数。

在时隙 t = 1 之后,我们移动到图 16 (c3-2) 中的下一个顶点,我们 i) 激活第二条字线; ii) 将最后一个字线的输入更改为 3(源顶点 i1 的距离标签); iii) 将中间 dist(v) 设置为时隙 t = 1 中位线的最终输出,即 [7,5,9,M]。与图 16 (c3-1) 类似,位线中的当前总和为 [M,M,6,4] 并与 [7,5,9,M] 进行比较,得出时隙位线的最终输出t = 2 为 [7,5,6,4]。我们使用橙色方块表示更新的距离标签。时隙 t = 3 和 t = 4 中的操作可以以类似的方式执行。

最初,在处理该块之前,将每个目的顶点的活动指示符设置为FALSE。在CB中进行串行处理之后,已更新的所有顶点 (在图16 (c3) 中以橙色标记) 的活动指示符设置为TRUE。这表明它们对于下一次迭代是活动的。在我们的示例中,j1,j2,j3被标记为活动。参照图16,这意味着这些顶点的距离标签已经更新。因为我们正在CB中处理该块,所以目标顶点的活动指示器可能会被多次访问,但是如果至少一次将其设置为真,则该顶点在下一次迭代中处于活动状态。在全局范围内,在迭代中处理所有活动源顶点和相应边之后,保存旧值的源顶点属性 (值和活动指示符) 将由目标中相同顶点的属性更新。新的源顶点属性将在下一次迭代中使用。我们可以检查是否还有活动顶点来确定收敛。

5.评估

5.1图数据集及应用


表 3 显示了我们评估中使用的数据集。我们使用七个真实世界的图表。适用于 WikiVote(WV)、Slashdot(SD)、Amazon(AZ)、WebGoogle(WG)、LiveJournal(LJ)、Orkut(OK) 和 Netflix(NF)。我们在前六个数据集上运行 pagerank(PR)、广度优先搜索(BFS)、单源最短路径(SSSP)和稀疏矩阵向量乘法(SpMV)。在 Netflix(NF)上,我们运行协同过滤(CF),使用的特征长度为 32。

5.2实验配置

在我们的实验中,我们将GRAPHR与CPU基线平台,GPU平台和基于PIM的体系结构进行了比较 [4]。运行在CPU平台上的PR、BFS、SSSP和SpMV基于软件框架GridGraph [70],而协同过滤则基于GraphChi [28]。在GPU平台上运行的PR、BFS、SSSP和SpMV基于Gunrock [64],而CuMF_SGD [66] 则是CF的GPU框架。我们在zSim [53] 上评估了基于PIM的体系结构,这是可x86-64多核模拟器。我们使用HMC内存和互连模型,异构计算单元,片上网络和其他硬件功能对zSim进行了修改。结果是NDP [21] 的验证结果,这也扩展了zSim的HMC仿真。在所有实验中,图形数据都可以放入内存中。我们还从基于CPU/GPU的平台的执行时间中排除了磁盘I/O时间。


CPU 和 GPU 平台的规格如表 4 和表 5 所示。CPU 能耗由 Intel Product Specifications [2] 估算,而 NVIDIA 系统管理接口 (nvidia-smi) 用于估算 GPU 的能耗。 CPU/GPU 平台的执行时间是在计算框架中测量的。

为了评估 GRAPHR,对于 ReRAM 部分,我们使用 NVSim [17] 来估计时间和能耗。 HRS/LRS电阻为25M/50K Ω,读取电压(Vr)和写入电压(Vw)分别为0.7V和2V,LRS/HRS的电流分别为40 uA和2 uA。根据 [44] 中报告的数据,使用的读/写延迟和读/写能量成本分别为 29.31ns / 50.88ns、1.08 pJ / 3.91nJ。双极 ReRAM 单元的编程是改变(从高到低)或反转。对于多级单元,编程是将电阻变为High和Low之间的中间状态,中间状态由编程电压脉冲长度决定​​。实际上,高低之间的差异是最坏的情况。请注意,[7, 26] 描述了一个 ReRAM 编程原型,其中包括:1)写入电路; 2) ReRAM 单元/阵列; 3) 转换电路。他们证明了多级单元格精度为 1% 的可能性。但是,在实际生产系统中,只需要“写入电路”和“ReRAM 单元/阵列”,无需考虑转换,只需“默认”一个写入精度即可。因此,这种 4 位单元编程的能量成本估算是合理的,并且比最近的两个基于 ReRAM 的加速器更保守 [13, 55]。

对于片上寄存器,我们使用 32nm 的 CACTI 6.5 [1] 进行建模。对于模拟/数字转换器,我们使用来自 [41] 的数据。系统性能由代码工具建模。 ReRAM 交叉开关大小 S、每个图形引擎 C 的 ReRAM 交叉开关数量和图形引擎数量分别为 8、32、64。

5.3性能结果

图 17 比较了 GRAPHR 和 CPU 平台的性能。 CPU 实现被用作基线,并且 GRAPHR 应用程序的执行时间被标准化为它。 与 CPU 平台相比,使用 GRAPHR 架构的所有 25 次执行的加速几何平均值为 16.01 倍。 在数据集上的所有应用程序中,GRAPHRis 实现了最高的加速比 132.67×,它发生在 WikiVote 数据集上的 SpMV 上。 使用 OK 数据集在 SSSP 上实现的最低加速 GRAPHR 是 2.40 倍。 PageRank 和 SpMV 是并行 MAC 模式,与基于 CPU 的平台相比具有更高的加速比。 对于并行加法模式的 BFS 和 SSSP,GRAPHR 仅由于并行加法而实现了较低的加速。

5.4耗能结果

图18显示了GRAPHR架构在CPU平台上的节能情况。与CPU相比,所有应用程序的节能几何平均值为33.82×。GRAPHR在SD数据集上实现的最高能耗为217.88×,在稀疏矩阵向量乘法上实现。GRAPHR在OK数据集上实现的最低能耗为4.50×。GRAPHR从ReRAM的非易失性和现场计算能力中获得了高能效。

5.5和GPU平台对比

GPU 利用大量线程(CUDA 核心)实现高并行性。比较中使用的 GPU 有 2880 个 CUDA 内核,而在 GRAPHR 中,我们有相当数量的交叉开关(2048 = 32×64)。为了与 GPU 进行比较,我们在 LiveJournal 数据集上运行 PageRank 和 SSSP,在 Netflix 数据集上运行协同过滤(CF)。

标准化为CPU的性能和节能如图19(a)和(b)所示。总的来说,考虑到CPU内存和GPU内存之间的数据传输时间,GRAPHR的性能高于GPU,GRAPHR不会产生开销。与GPU相比,GRAPHR的性能提高了1.69倍到2.19倍。更重要的是,GRAPHR的能耗比GPU低4.77到8.91倍。图19(a)显示,GRAPHR在PageRank和CF上实现了更高的加速,其中Mac主导计算,GRAPHR和GPU完全支持。对于SSSP,GRAPHR中与顶点相关的遍历需要访问主内存和存储器。在GPU中,基于缓存的内存层次结构更好地支持随机访问。因此,GRAPHR的加速比较低。GRAPHR在SSSP中仍有收益的原因在于顺序访问模式。在节能方面,GRAPHR优于GPU。除了通过GEs中的现场计算和内存处理系统设计进行节能外,从[23]中的图17中我们可以看到,在传统CMOS系统中,eDRAM(内存)的静态能耗占据了大部分能耗。随着工艺节点规模的缩小,泄漏功率在CMOS系统中占主导地位。相比之下,ReRAM几乎没有静态能量泄漏,因此GRAPHR具有更高的节能性。

5.6与PIM平台比较


我们将GraphRact与基于PIM的体系结构(即Tesseract[4])进行了比较。标准化为CPU的性能和节能如图20(a)和(b)所示。GRAPHR的加速比为1.16倍至4.12倍,与基于PIM的架构相比,其能效提高了3.67倍至10.96倍。

5.7对稀疏性的敏感性

我们使用#Edge/(#Vertex)2 来表示一个数据集的密度,随着密度的降低,稀疏度增加。 图 21 (a) 和 (b) 显示了 GRAPHR(与 CPU 平台相比)与数据集密度的性能和节能。 随着稀疏度的增加,性能和节能略有下降。 因为随着稀疏度的增加,需要遍历的边块的数量会增加,从而减慢了边的访问时间,消耗更多的能量。

6.结论

本文介绍了第一个基于 ReRAM 的图形处理加速器 GRAPHR。 GRAPHR 的关键见解是,如果图算法的顶点程序可以用稀疏矩阵向量乘法 (SpMV) 表示,那么它可以通过 ReRAM 交叉开关有效地执行。 GRAPHR 是一种新颖的加速器架构,由两个组件组成:内存 ReRAM 和图形引擎 (GE)。 核心图计算在 GE(ReRAM 交叉条)中以稀疏矩阵格式执行。 对于 GE 处理的小型子图,执行并行操作的收益超过了稀疏性造成的浪费。 实验结果表明,与 CPU 基线系统相比,GRAPHR 在几何平均值上实现了 16.01 倍(最高 132.67 倍)的加速和 33.82 倍的节能。 与 GPU 相比,GRAPHR 实现了 1.69 到 2.19 倍的加速,并且消耗了 4.77 到 8.91 倍的能量。 与基于 PIM 的架构相比,GRAPHR 获得了 1.16 倍至 4.12 倍的加速,并且能效提高了 3.67 倍至 10.96 倍。

GraphR: Accelerating Graph Processing Using ReRAM(论文翻译 HPCA2018)相关推荐

  1. 《How powerful are graph neural networks》论文翻译

    作者:Keyulu Xu (MIT),Weihua Hu(Stanford Universtity),Jure Leskovec(Stanford Universtity),Stefanie Jege ...

  2. 论文翻译:A Comprehensive Survey on Graph Neural Networks

    论文翻译:图神经网络综合研究 arXiv:1901.00596v1 文章目录 论文翻译:图神经网络综合研究 1 引言 2 定义 3 分类和框架 3.1 GNN的分类 3.2 框架 4 图卷积网络 4. ...

  3. 【论文翻译】Graph Convolution over Pruned Dependency Trees Improves Relation Extraction

    [论文翻译]Graph Convolution over Pruned Dependency Trees Improves Relation Extraction 摘要 1 引言 2 模型 2.1 依 ...

  4. 转债---Pregel: A System for Large-Scale Graph Processing(译)

    转载:http://duanple.blog.163.com/blog/static/70971767201281610126277/ 作者:Grzegorz Malewicz, Matthew H. ...

  5. 分布式系统领域经典论文翻译集

    分布式领域论文译序 sql&nosql年代记 SMAQ:海量数据的存储计算和查询 一.google论文系列 1.      google系列论文译序 2.      The anatomy o ...

  6. ECCV2020 Flow-edge Guided Video Completion20论文翻译

    ECCV2020 Flow-edge Guided Video Completion20论文翻译 摘要 1.介绍 2.相关工作 3.方法 3.1 综述 3.2 Edge-guided Flow Com ...

  7. 图像分类经典卷积神经网络—ResNet论文翻译(中英文对照版)—Deep Residual Learning for Image Recognition(深度残差学习的图像识别)

    图像分类经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为中英文对照版,纯中文版请稳步:[ResNet纯中文版] Deep Residual Learning for Image ...

  8. RDD论文翻译:基于内存的集群计算容错抽象

    该论文来自Berkeley实验室,英文标题为:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cl ...

  9. [论文翻译] Deep Learning

    [论文翻译] Deep Learning 论文题目:Deep Learning 论文来源:Deep learning Nature 2015 翻译人:BDML@CQUT实验室 Deep learnin ...

最新文章

  1. 数据库Mysql的学习(八)-储存过程和事务和导入导出
  2. 牛逼!用 12 万行代码堆出来个 蔡徐坤,编译还能通过!
  3. Cflow使用具体解释
  4. redis底层数据结构之intset
  5. JavaWeb学习总结(一)——JavaWeb开发入门(转载)
  6. 为什么工业控制系统需要安全防护?
  7. 统计_statistics_不同的人_大样本_分析_统计方法_useful ?
  8. JavaScript事件循环探索
  9. wxWidgets:wxTimePickerCtrl类用法
  10. bzoj 1015 并查集
  11. tf.metrics._将指标标签与MicroProfile Metrics 2.0一起使用
  12. String Start!
  13. asp.net webform设计思路的思考
  14. 5G的基站覆盖范围300米,今后边远地区的手机通话怎样保证?
  15. linux脚本课程设计通讯录,shell整理(35)====模拟用户登录的打印菜单脚本
  16. redis入门(转)
  17. 【GD32L233C-START】11、GD32 ISP软件还不支持GD32L233
  18. Scrapy爬虫项目的创建及案例
  19. 怎样提高文章原创度,被快速收录?
  20. 【转载】等波纹滤波器中density factor参数的解释

热门文章

  1. ARIMA如何引入外生变量
  2. Ci520 13.56MHz非接触式读写器芯片(A卡,低成本)
  3. ClickHouse - LowCardinality 数据类型的神秘之旅
  4. Pycharm又是啥东西?
  5. 魔兽9月12服务器维护,魔兽世界9月12日改动_魔兽世界9月12日更新_3DM网游
  6. 积重难返辉煌渐淡,暴雪帝国倾倒前的颓萎
  7. 小糊涂学symbian日记(5)(转)
  8. 二极管电路图如图所示,试分析各电路中二极管的工作状态,并求出输出电压值,设二极管的导通电压为Vd=0.7V
  9. 《独孤九剑》锻造ubuntu大侠
  10. 基于FPGA的手势识别