乐趣区

关于程序员:Plasticine-面向并行模式的可重配架构

本文基于对并行模式的分层架构、数据局部性和控制流的形象,提出了 Plasticine 架构,从而为并行模式计算提供更好的灵活性和更低的能耗反对。原文: Plasticine: A Reconfigurable Architecture For Parallel Patterns

摘要

近年来,因为可重配架构有助于设计高能效加速器,迅速失去遍及。因为位级 (bit-level) 的可重配形象,细粒度构造 (如 FPGA) 传统上存在着性能和能效低下的问题。细粒度和粗粒度架构 (如 CGRA) 传统上都须要低级编程,并忍耐漫长的编译工夫。咱们用 Plasticine 来解决这两个挑战,这是一个新的空间可重配架构,旨在无效执行由并行模式组成的应用程序。并行模式曾经从最近的并行编程钻研中怀才不遇,成为弱小的高级形象,能够优雅捕获数据地位、内存拜访模式和逾越宽泛的密集和稠密利用的并行性。

首先,咱们通过观察要害利用的并行模式特色,发现这些特色适宜于硬件加速,如分层并行、数据局部性、内存拜访模式和控制流,从而激发咱们构思了 Plasticine。基于这些察看,咱们将 Plasticine 架构为 模式计算单元 (Pattern Compute Units) 模式存储单元 (Pattern Memory Units) 的汇合。模式计算单元是可重配的 SIMD 性能单元的多级流水线,能够无效执行嵌套模式。模式存储单元应用分组暂存器(banked scratchpad memories) 和可配置的地址解码器实现数据定位。多个片上地址生成器和 scatter-gather 引擎通过反对大量未实现的内存申请、内存合并和密集拜访的突发模式,无效利用了 DRAM 带宽。Plasticine 基于 28 纳米工艺实现的芯片面积为 113 $mm^2$,在 1GHz 时钟下的最大功耗为 49 瓦。通过应用周期准确的模拟器,证实 Plasticine 在宽泛的密集和稠密利用中比传统的 FPGA 提供了高达 76.9 倍的每瓦性能改良。

1. 简介

为了寻求更高的性能和能源效率,计算零碎正越来越多的应用专门的加速器 [7, 9-11, 19, 33, 44]。加速器实现了定制的数据和管制门路,以适应某一畛域的利用,从而防止通用处理器中的大量灵活性开销。然而,因为设计和制作的一次性工程(NRE, non-recurring engineering) 老本高,以及部署和迭代工夫长,以专用 ASIC 的模式进行专业化很低廉,因而 ASIC 加速器只适宜最广泛的利用。

像 FPGA 这样的 可重配架构 (reconfigurable architectures) 通过在动态可编程网络互连中提供灵便的逻辑块来实现自定义数据门路,从而对消高额的 NRE 制作老本。通过 FPGA,能够在位级(bit-level) 定制数据通路,容许用户对任意数字逻辑进行原型化,并利用架构反对任意精度的计算,这种灵活性曾经吸引了一些数据中心胜利部署了基于 FPGA 的商业加速器 [28, 29, 37]。然而,灵活性是以架构的低效为代价的。计算和网络资源的位级(bit-level) 可重配带来了微小的芯片面积和功耗开销。例如,FPGA 中超过 60% 的芯片面积和功耗是用在可编程网络上 [4, 5, 22, 35]。通过多个逻辑元件的长组合门路限度了加速器设计能够运行的最大时钟频率。低效率促使了粗粒度可重配架构(CGRA, Coarse-Grain Reconfigurable Architecture) 的倒退,其字级 (word-level) 性能单元合乎大多数加速器利用的计算需要。CGRAs 提供密集的计算资源、电源效率以及比 FPGA 高一个数量级的时钟频率。古代商业 FPGA 架构,如英特尔的 Arria 10 和 Stratix 10 器件系列,曾经倒退到包含越来越多的粗粒度块,包含整数乘积器(“DSP”)、浮点单元、流水线互连和 DRAM 存储控制器。然而,FPGA 中的互连依然是细粒度的,以使这些器件可能施展其作为任意数字逻辑原型验证构造的最后目标。

可怜的是,FPGA 和以前提出的 CGRA 都很难用。加速器设计通常造成低级编程模型和长编译工夫 [3, 21, 22]。大多数 CGRA 和带有粗粒度块的 FPGA 中资源的异质性进一步减少了复杂度。简化加速器开发的一个有心愿的办法是用特定畛域语言,这些语言能够捕捉到高级别的并行模式,如 map、reduce、filter 和 flatmap[38, 41]。并行模式曾经胜利用于简化并行编程和代码生成,实用于各种并行架构,包含多核芯片[27, 34, 40] 和 GPU[8, 23]。最近的工作表明,并行模式也可用于从高级语言中为 FPGA 生成优化的加速器[15, 36]。在这项工作中,咱们专一于开发粗粒度、可重配的架构,对并行模式有间接的架构反对,在面积、功耗和性能方面都很高效,在编程和编译的复杂性方面也很容易应用。

为此咱们引入了 Plasticine,作为新的空间可重配加速器架构,为高效执行并行模式进行了优化。Plasticine 是由两种粗粒度的可重配单元组成的二维阵列: 模式计算单元 (PCU, Pattern Compute Unit) 模式存储单元 (PMU, Pattern Memory Unit)。每个 PCU 由一个可重配流水线组成,具备多级 SIMD 性能单元,并反对跨 SIMD 通道的转移和简化。PMU 由一个分组暂存器(banked scratchpad memory) 和专用寻址逻辑及地址解码器组成。这些单元通过流水线 动态混合互连 (static hybrid interconnect) 互相通信,具备独立的总线级(bus-level) 和字级 (word-level) 数据,以及位级 (bit-level) 管制网络。Plasticine 架构中的层次结构简化了编译器映射,进步了执行效率。编译器能够将内循环计算映射到一个 PCU 上,这样大多数操作数就能够间接在性能单元之间传输,而不须要应用 scratchpad 存储器或 PCU 之间的通信。片上 scratchpad 存储器可配置为反对流式和双缓冲拜访,片外存储控制器反对流式 (突发) 模式和 scatter/gather 拜访。最初,片上管制逻辑可配置为反对嵌套模式。

咱们用基于 Scala 的硬件定义语言 Chisel[2]实现 Plasticine,应用 Synopsys Design Compiler 综合设计后失去面积估算,通过模仿轨迹和 PrimeTime 失去功率数。应用 VCS 和 DRAM-Sim2 进行准确周期模仿,在线性代数、机器学习、数据分析和图剖析等畛域大量密集、稠密计算基准测试的根底上对 Plasticine 架构进行具体评估。

本文的其余部分组织如下: 第 2 节回顾并行模式中的要害概念及其硬件实现。第 3 节介绍了 Plasticine 架构并探讨了要害的设计衡量。第 4 节介绍了与 FPGA 相比,Plasticine 的电源和性能效率。第 5 节探讨相干工作。

2. 并行模式

2.1. 并行模式编程

并行模式是对传统函数式编程的扩大,包含密集和稠密数据汇合上的可并行计算,以及相应的内存拜访模式。并行模式为常见计算工作提供了简略、主动的程序并行化规定,同时也通过更高层次的形象来晋升程序员的生产力。并行化带来的性能劣势,加上程序员生产力的进步,使得并行模式在各种畛域越来越受欢迎,包含机器学习、图形处理和数据库剖析 [38, 41]。以前的工作以及证实,并行模式能够在函数式编程模型中利用,为 CPU 生成可与手工优化代码相媲美的多线程 C ++[40] 以及为 FPGA 生成高效的加速器设计[1, 15, 36]。与 FPGA 和多核 CPU 一样,在针对 CGRA 时,数据并行性的常识对于实现良好的性能至关重要。这种隐含的常识使得并行模式成为驱动 CGRA 设计的天然编程模型。

和以前并行模式的硬件生成工作一样 [15, 36],咱们的编程模型基于并行模式MapFlatMapFoldHashReduce,抉择这些模式是因为它们最适宜硬件加速。表 1 介绍了每种模式的概念性例子,显示了同时在四个索引上进行的计算。每个模式都有一个或多个函数和一个形容该模式操作的数值范畴的 索引域(index domain) 作为输出。每个模式都有一个输入,并可能读取任意数量的输出汇合。

Map应用函数 f 为每个索引创立输入元素,f的每次执行都被保障是独立的。Map 的输入元素的数量与输出迭代域的大小雷同。基于 f 读取的汇合数量和每次读取的拜访模式,Map 能够获取汇合、规范元素级映射、压缩包、窗口过滤器或其任何组合的行为。

FlatMap应用函数 g 为每个索引产生任意数量的元素,其中函数的执行也是独立的。产生的元素被串联成一个扁平输入。有条件数据查问 (例如 SQL 中的WHERE,Haskell 或 Scala 中的filter) 是 FlatMap 的特例,其中 g 产生零个或一个元素。

Fold首先充当 Map,应用函数 f 为每个索引生成单个元素,而后应用关联组合函数 r 对这些元素进行约简。

HashReduce应用函数 kv别离为每个索引生成哈希键和值。具备雷同对应键的值在执行中被放到单个累加器中,应用同一个关联的组合函数 r。HashReduce 能够是密集型的,即键的空间是提前晓得的,所有累加器都能够动态调配,也能够是稠密型的,即模式能够在运行时产生任意数量的键。直方图创立是一个常见的、简略的 HashReduce 的例子,其中key 函数给出了直方图的堆,value函数被定义为总是 ”1″,而 combine 函数是整数加。

图 1 显示了用明确的并行模式语法编写无约束矩阵 (untiled matrix) 乘法的例子。在这种状况下,Map 创立大小为 M×P 的输入矩阵,Fold 应用 N 个元素的点乘法产生这个矩阵的每个元素。Fold 的 map 函数 (f2) 拜访矩阵 a 和矩阵 b 中的元素,并将它们相乘。Fold 的组合函数 (r) 定义了如何组合由 f2 产生的任意元素,在示例中应用求和。

图 2 给出了基于 Scala 语言中应用并行模式的示例,在并行模式实例对应的汇合上定义了中断操作符。留神,本例第 3 行的 filter 创立了一个 FlatMap,其索引域等于 lineItems 汇合的大小。第 5 行的 hashReduce 创立了一个 HashReduce,其索引域的大小为 before 汇合的大小。

2.2. 硬件实现需求

并行模式提供了一组简洁的并行形象,能够简洁表白各种机器学习和数据分析算法[8,36,38,41]。通过创立专门反对这些模式的体系架构,能够无效执行这些算法。这种并行模式体系架构须要几个要害硬件个性,上面将逐个介绍,表 2 进行了总结。

首先,所有四种模式都能够实现并行数据计算,每个索引上的操作都齐全独立,一个流水线计算架构被构建成 SIMD 通道,利用数据并行性实现每周期多元素的吞吐量。此外,除了无奈在循环中维持依赖,表 1 中的函数 fgkv在其余方面不受限制,这意味着该架构的流水线计算必须是可编程的,以便实现这些函数。

其次,为了利用流水线 SIMD 通道提供的高吞吐量,该架构必须可能提供高片上内存带宽。在咱们的编程模型中,函数两头值通常是具备动态已知位宽的标量,这些标量值能够存储在小型分布式流水线寄存器中。

汇合被用来在并行模式之间进行数据通信,对汇合架构的反对取决于相干内存拜访模式,并通过剖析用于计算内存地址的函数来确定。为了简略起见,咱们将拜访模式分为动态可预测 线性 函数模式或不可预测 随机 拜访模式。此外,咱们将拜访要么标记为 流式 (即在动态可确定的函数执行数量中不产生数据重用),要么tiled(即可能产生重用)。咱们应用畛域常识和编译器启发式办法来确定随机拜访是否可能体现出重用。以前的工作显示了如何将并行模式平铺(tile) 从而应用动态大小的重用窗口,并有可能晋升数据的局部性[36]。

反对 tiled 拜访的汇合能够被存储在 scratchpad 中。为了驱动 SIMD 计算,这些 scratchpad 存储器应该尽可能反对多个并行地址流。在线性拜访状况下,地址流能够通过重叠 (banking) 来创立。并发随机读取能够通过本地内存的复制来反对,而随机写入命令必须程序化并且尽量合并操作。

尽管流拜访不可避免须要拜访主存,但通过合并内存命令和线性拜访预取数据,能够将主存读写老本降至最低,架构中的本地 FIFO 为这两种优化提供了备份存储。

本地存储器使咱们可能利用应用程序的局部性,尽量减少对低廉的主存储器的加载或数量要求[32]。本地存储器中的可重配反对减少了这些片上存储器的可用带宽,从而使计算失去更好的利用。在 scratchpad 存储器中反对双重缓冲,个别称为 N - 缓冲(N-buffering),能够实现不齐全嵌套模式的粗粒度流水线执行。

该架构还须要高效的内存控制器来填充本地内存并提交计算结果。与片上存储器一样,存储控制器应该专门用于不同的拜访模式。线性拜访对应于 DRAM 突发命令,而并行模式下的随机读写别离对应于 gather 和 scatter。

Fold 和 FlatMap 也暗示了细粒度的跨 SIMD 通道通信。Fold 须要跨通道的简化树,而 FlatMap 中的拼接最好由无效的跨通道字合并 (word coalescing) 硬件来反对。

最初,所有并行模式都有一个或多个相干的循环索引。这些索引能够在硬件中实现为并行、可编程的计数器链。因为并行模式能够任意嵌套,因而体系架构必须具备可编程管制逻辑,以确定每个模式何时容许执行。

尽管曾经提出了许多粗粒度硬件加速器,但以前的工作所形容的繁多加速器都不具备所有这些硬件特色。这意味着尽管这些加速器中的一部分能够成为并行模式的指标,但没有一个能够齐全利用这些模式的个性来实现性能的最大化。传统 FPGA 也能够被配置来实现这些模式,但正如咱们在第 4 节中所展现的那样,能效要差得多。咱们将在第 5 节进一步探讨相干工作。

3. Plasticine 架构

Plasticine 是一个由可重配 模式计算单元 (PCU) 模式存储单元 (PMU) 组成的 tiled 构造,咱们将其统称为 ” 单元 ”。单元与三种动态互连进行通信: 字级标量(word-level scalar)、多字级矢量(multiple-wordlevel vector) 和位级管制互连(bit-level control interconnects)。Plasticine 的单元阵列通过多个 DDR 通道与 DRAM 连贯,每个通道都有相干的地址治理单元,在多个地址流之间进行仲裁,并由缓冲器反对多个未实现的内存申请和地址聚合,以尽量减少 DRAM 的拜访。每个 Plasticine 组件用于映射应用程序的特定局部: 本地地址计算在 PMU 中实现,DRAM 地址计算产生在 DRAM 地址治理单元中,其余的数据计算产生在 PCU 中。请留神,Plasticine 架构是参数化的,咱们将在第 3.7 节探讨这些参数的取值。

3.1. 模式计算单元(Pattern Compute Unit)

PCU 被设计为在应用程序中执行外部单个并行模式。如图 3 所示,PCU 数据门路被组织为多阶段、可重配的 SIMD 管道。这种设计使每个 PCU 实现了高计算密度,并利用了跨通道的循环级并行和跨阶段的流水线并行。

SIMD 通道的每个阶段由一个 性能单元 (FU, functional unit) 和相干流水线寄存器(PR, pipeline register) 组成。性能单元执行 32 位字级算术运算和二进制操作,包含对浮点数和整数操作的反对。因为单个流水线阶段的性能单元以 SIMD 形式操作,每个阶段只须要一个配置寄存器,每个 FU 的后果都被写入其相干的寄存器中。每个通道中的 PR 是跨流水线阶段链在一起的,容许在同一通道内的阶段之间流传实时值。FU 之间的跨道通信通过两种类型的 PCU 外部网络实现: 一种是还原树网络,容许将多个通道的值还原成一个标量; 另一种是移位网络,容许将 PR 作为跨阶段滑动窗口从而在模版利用中复用。这两个网络都在 PR 内应用专用寄存器,以尽量减少硬件开销。

PCU 应用三种输入输出 (IO) 作为全局互连接口: 标量 (scalar)、矢量(vector) 和管制(control)。标量 IO 用于单字数据的通信,如 Fold 的后果等。每个矢量 IO 容许在 PCU 中的每个通道上通信一个字,并用于诸如读写 PMU 中的 scratchpad 存储器和在多个 PCU 之间的长管道上传输两头数据。每个矢量和标量输出都应用一个小型 FIFO 进行缓冲。通过输出端 FIFO 解耦数据生产者和消费者,并通过加强鲁棒性缩小输出提早从而简化 PCU 间的管制逻辑。管制 IO 用于通信管制信号,如 PCU 执行的开始或完结,或批示背压。

一个可重配计数器链产生模式迭代指数和管制信号以协调执行。当管制块启用其中一个计数器时,PCU 开始执行。依据利用的管制和数据依赖性,管制块能够被配置为联合来自本地 FIFO 和全局管制输出的多个管制信号来触发 PCU 的执行。管制块应用可重配组合逻辑和用于状态机的可编程计数器来实现。

3.2. 模式存储单元(Pattern Memory Unit)

图 4 显示了 PMU 架构。每个 PMU 蕴含一个由程序员治理的 scratchpad 存储器,加上一个用于地址计算的可重配标量数据通路。如图 5 所示,PMU 被用来在整个 Plasticine 架构中调配片上存储器。Plasticine 对参加内存地址计算的操作和利用根底的外围计算进行了辨别。地址计算在 PMU 数据通路上进行,而外围计算则在 PCU 内进行。一些察看后果促使采纳了这种设计抉择:(i)地址计算波及简略的标量数学,这须要比 PCU 中的 FU 更简略的 ALU;(ii)对大多数片上拜访模式来说,应用多个通道进行地址计算通常并不必要;(iii)在 PCU 内执行地址计算须要将地址从 PCU 路由到 PMU,这占用了 PCU 阶段和输入链接,并可能导致 PCU 利用率有余。

scratchpad 上有多个 SRAM 重叠,与 PCU 通道的数量相匹配。scratchpad 四周的地址解码逻辑能够被配置为在几种重叠模式下运行,以反对各种拜访模式。Strided banking模式反对密集数据结构上经常出现的线性拜访模式。FIFO模式反对流式拜访。行缓冲 (Line buffer) 模式反对相似于滑动窗口的拜访模式。 复制(Duplication) 模式,即内容在所有存储器中复制,提供多个读取地址通道,以反对并行的片上 gather 操作。

正如重叠对于反对多个 SIMD 单元以维持计算吞吐量很重要,N- 缓冲(N-buffering) 或狭义上的双缓冲对于反对粗粒度管道也同样重要。PMU scratchpad 能够被配置成 N -buffer,并采纳上述任何一种重叠模式进行操作。N-buffer 是通过将每个 SRAM 的地址空间划分为 N 个不相连的区域来实现的。利用写和读的状态信息,在每个存储器的本地地址上减少适当偏移量,以拜访正确的数据。

相似于 PCU,一个可编程的计数器链和管制块触发 PMU 执行。每个 PMU 通常蕴含来自生产者模式的写地址计算逻辑,以及来自消费者模式的读地址计算逻辑。依据本地 FIFO 和内部管制输出的状态,能够配置管制块,通过启用适当的计数器来别离或者同时触发写地址计算和读地址计算。

3.3. 互联(Interconnect)

Plasticine 反对通过三种形式实现 PMU、PCU 和外围元件之间的通信: 标量、矢量和管制。这些网络在传输数据的粒度上有所不同: 标量网络以字级粒度运行,矢量网络以多字级粒度运行,而管制网络以位级粒度运行。所有三个网络的拓扑构造都是雷同的,如图 5 所示。所有网络都是动态配置的。网络交换机中的链接包含寄存器,以防止长线提早。

应用程序通常蕴含嵌套流水线,其中外围流水线层只须要计数器和一些可重配管制。此外,因为内部流水线逻辑通常波及某种程度的管制信号同步,因而是管制热点,须要大量管制和标量输入输出。为了无效解决内部流水线逻辑,标量和管制交换机共享同一个可重配管制块和计数器。将管制逻辑纳入交换机内,能够缩小对热点的路由,以进步 PCU 利用率。

3.4. 片外存储拜访(Off-chip Memory Access)

Plasticine 通过 4 个 DDR 内存通道拜访片外 DRAM,每个 DRAM 通道基于芯片两侧的若干个 地址生成器 (AG, address generator) 拜访,如图 5 所示。每个 AG 蕴含一个可重配标量数据门路生成 DRAM 申请,其架构与图 4 所示的 PMU 数据门路相似。此外,每个 AG 蕴含 FIFO 缓冲从 DRAM 收回的指令、数据和传入的响应。多个 AG 连贯到一个地址 聚合单元(coalescing unit),地址聚合单元负责 AG 之间的仲裁并解决内存申请。

AG 能够产生或 密集 (dense) 稠密 (sparse) 的内存指令。密集申请用于批量传输间断的 DRAM 区域,通常用于读取或写入数据块。密集申请被聚合单元转换为多个 DRAM 突发申请。稠密申请将地址流输出聚合单元,聚合单元通过聚合缓存保护已收回的 DRAM 申请元数据,并合并属于同一 DRAM 申请的稠密地址,以尽量减少收回的 DRAM 申请数量。换句话说,稠密内存的加载触发了聚合单元的gather 操作,而稠密内存的存储则触发了 scatter 操作。

3.5. 控制流(Control Flow)

Plasticine 应用分布式、分层的管制计划,尽量减少单元之间的同步,以适应网络中无限的位数连贯。咱们反对从高级语言构造推断出三种类型的控制器协定: (a) 程序 (sequential) 执行,(b) 粗粒度流水线 (coarse-grained pipelining),和(c) 流式(streaming) (图 6)。这些管制计划对应于输出程序中的外循环,并决定单个单元的执行如何绝对于其余单元进行调度。单元被分组为 层次分明的控制器集,同级控制器的管制计划基于其直属父控制器的计划。

在程序执行父控制器中,任何时候都只有一个数据依赖的子节点处于活动状态,这通常利用在有循环依赖的时候。咱们通过 令牌 (token) 强制执行数据依赖,其实现是通过管制网络路由的前馈脉冲信号。当父控制器被启用时,一个令牌被发送给所有对其兄弟节点没有数据依赖的 头部(head) 子程序。在实现执行后,每个子节点会将令牌传递给其输入数据的消费者。每个控制器只有在所有依赖数据源的令牌被收集后才会被启用。来自最初一组控制器的令牌,其数据不被同级别的任何兄弟控制器所耗费,被送回给父控制器。父控制器将令牌收集起来,要么将令牌送回给头部进行下一次迭代,要么在其所有迭代实现后在本人的层次结构中传递令牌。

在粗粒度流水线中,子控制器以流水线形式执行。为了容许并发,父控制器向头部发送 N 个令牌,其中 N 是要害门路中的数据依赖子节点数量,从而容许所有子节点在稳固状态下处于活动状态。为了容许生产者和消费者在不同的迭代中对雷同数据进行解决,每个两头存储器都有 M 个缓冲区,其中 M 是在其数据依赖门路上相应的生产者和消费者之间的间隔。为了避免生产者溢出上行缓冲区,每个子控制器通过应用 点数(credit) 跟踪可用的上行缓冲区大小来解决背压。每个生产者在生产完父代 ” 以后 ” 迭代的所有数据后,递加其点数。同样,消费者在生产完父代 ” 以后 ” 迭代的所有数据后,通过网络送回一个点数。在粗粒度流水线计划中,当每个子节点至多有一个令牌和一个点数可用时,就会被启用。

最初,流式父控制器的子控制器以细粒度流水线形式执行。这使得编译器能够通过串联多个单元造成一个大流水线来适应大型外部模式体。在流式模式中,子节点通过 FIFO 进行通信。当某个控制器的所有读 FIFO 都不为空,且所有写 FIFO 都不满时,该控制器被启用。FIFO 在消费者控制器本地,所以入队以及非空信号是通过管制网络从消费者发送到生产者的。

为了执行这些控制协议,咱们应用动态可编程计数器、状态机和组合查问表来实现专门的可重配管制块,架构中的每个 PCU、PMU、交换机和存储控制器都有一个管制块。一般来说,没有任何子节点的控制器被映射到 PCU,而内部控制器被映射到交换机的管制逻辑。因为内部控制器通常有许多子节点须要同步,这种映射为内部控制器提供了较高的通信基数。Plasticine 管制计划中的档次架构和分布式通信使编译器可能利用嵌套并行模式中的多层次并行性,而只需最小的位级可重配开销。

3.6. 利用映射(Application Mapping)

咱们从一个被示意为并行数据流流水线层次结构的利用开始,该利用是用一种基于并行模式的语言 –Delite 硬件定义语言 (DHDL, Delite Hardware Definition Language)[20] 编写的。之前的工作 [36] 显示了以第 2 节所述的并行模式表白的应用程序如何可能主动合成为 DHDL 中的流水线,这些流水线要么只蕴含其余流水线的内部控制器,要么是不蕴含其余控制器 (只蕴含计算和存储操作的数据流图) 的外部控制器。

为了将 DHDL 映射到 Plasticine,咱们首先基于用户指定的或主动调整的并行化系数开展内部流水线。而后,基于开展的后果调配和安顿虚构 PMU 和 PCU。这些虚构单元是对 Plasticine 单元的形象示意,有有限多的可用输出、输入、寄存器、计算阶段和计数器链。因为内部控制器不蕴含计算,只蕴含管制逻辑,它们被映射到虚构 PCU,没有计算阶段,只有管制逻辑和计数器链。外部控制器中的计算是通过线性化数据流图和将产生的操作列表映射到虚构阶段和寄存器来实现的。每个本地存储器映射到一个虚构 PMU,用于计算该存储器读写地址的阶段被复制到虚构 PMU 上。

而后,通过划分阶段将每个虚构单元映射为一组物理单元。虚构 PCU 被划分为多个 PCU,而 PMU 则成为一个具备零个或多个反对 PCU 的 PMU。尽管一般来说图分区 (graph partitioning) 是 NP-hard 问题,但每个虚构单元的计算阶段往往远少于 200 个,而且循环依赖性十分小。这意味着,带有简略启发式的贪心算法能够实现靠近完满的物理单元分区。在咱们的分区算法中,应用一个老本指标计算物理阶段的数量,每阶段的沉闷变量,以及给定分区所需的标量和矢量输出 / 输入总线。请留神,因为咱们从应用程序的残缺数据流示意开始,这些通信和计算成本总是能够动态预测的。应用启发式办法,编译器会抉择一个倡议分区,其中所有 PCU 和 PMU 在物理上都是可实现的,并给定一些选定的 Plasticine 架构参数(PCU、PMU、阶段、流水线、总线等的数量),并使 ALU 和本地内存利用率最大化。

在分区之后,依照第 3.5 节所述,生成与控制器层次结构绝对应的管制逻辑。而后,咱们将虚构硬件节点与物理硬件资源进行分层绑定,包含数据通路和管制通路的搁置和路由,SIMD 单元的寄存器调配,包含将阶段映射到物理 ALU,并调配 scratchpad 和管制资源。Plasticine 的分层性质使得每层映射的节点少于 1000 个,从而极大缩小了搜寻空间。

给定配置和路由信息,而后生成相似于汇编语言的 Plasticine 配置形容,用于为架构生成动态配置 ” 位流(bitstream)”。因为分层体系架构,以及计算单元之间的粗总线粒度,使得整个编译过程只需几分钟就能够实现(或失败),而生成 FPGA 配置则须要数小时。

3.7. 架构规模(Architecture Sizing)

目前为止,咱们曾经介绍了由 PCU、PMU 和网络等组成的参数化架构。当初咱们介绍调整 PCU 和 PMU 参数的过程,以创立最终的 Plasticine 架构,咱们将在第 4 节对其进行评估。表 3 总结了所思考的架构参数,每个参数的可能值,以及所选的最终值。为了进步利用路由性的概率,咱们要求架构中的 PMU 和 PCU 是同质的。

在抉择设计参数时,首先剖析表 4 中所列基准测试的特点来剪裁空间。依据每个基准测试的性能模型,确定所有基准测试的现实外部控制器的并行化系数在 8 到 32 之间。在 Plasticine 中,对应于具备 8 至 32 条 SIMD 通道的模式计算单元。咱们抉择了具备 16 条通道的均衡架构。16 个 4 字节矢量也不便与咱们的主存储器的 64 字节突发大小相匹配。对于 PMU 的 scratchpad,咱们发现对于基准测试来说,现实的 tile 大小最多为每组 4000 字。因而,咱们将 PMU 设置为有 16 个可配置的 16KB 内存,每个 PMU 总共有 256KB。

接下来搜寻残余的架构空间,抉择每个 PCU 的级数、每级寄存器、输出和输入。在咱们的编程模型中,内部控制器的并行化在硬件上对应于外部控制器的复制。这意味着能够假如,在特定利用中,外循环的并行化不会扭转其现实的 PCU 参数,而只是扭转所需 PCU 数量。因而,咱们用事实的并行化因素固定每个基准测试,并确定如何在最大限度进步无效计算能力的同时最小化总 PCU 面积。请留神,必须容许扭转所需 PCU 的数量,因为这些参数间接影响到虚构 PCU 须要多少物理 PCU。思考到最小化 PCU 设计,咱们能够在给定总芯片面积估算的条件下创立具备最大性能的 Plasticine 架构。

咱们应用模型驱动的蛮力搜寻来调整不同利用中的每个架构参数。为了推动这一搜寻,咱们通过将基准测试归一化的面积开销作为无效 PCU 面积的老本指标。当调整某个参数时,对其数值进行扫描,对于每个倡议值,扫过残余空间,找到可能的最小 PCU 面积 ($Area_{PCU}$)。而后,依据其最小值($Min_{PCU}$) 将这些面积归一化,并将每个可能的参数值的开销报告为 $Area_{PCU}/Min_{PCU}-1$。单个 PCU 面积被建模为其管制盒、FU、流水线寄存器、输出 FIFO 和输入网络的面积之和。一组给定设计参数所需的 PCU 总数是应用第 3.6 节中概述的映射程序计算出来的。

咱们在钻研中发现,调优过程中参数的排序对最终的架构设计影响不大。为了简略起见,咱们基于一种可能的排序进行搜寻,但任何排序进去的最终参数值都是一样的。

咱们首先查看每个物理 PCU 的阶段数所定义的空间,所有其余参数都不受限制。图 7a 显示了在 4 到 16 级之间扫频后的预计面积开销。在这里,咱们看到对于大多数基准测试来说,每个 PCU 的现实级数是 5 或 6。在这些基准测试中,每个模式的计算量相当小,容许模式被映射到单个 PCU 上。在 PCU 内,至多须要 5 个阶段来实现残缺的跨通道还原树。在 BlackScholes 中,外围计算流水线有大概 80 个阶段,这曾经足够长了,每个 PCU 的阶段对均匀 FU 利用率的影响很小。在 TPCHQ6 中,外围计算有 16 个阶段,这意味着额定开销在 8 和 16 个阶段 (即便不包含计算) 是最小的。咱们抉择每个 PCU 的 6 个阶段作为所有基准测试的均衡架构,这种抉择意味着像 TPCHQ6 这样运算量绝对较小、不被均匀宰割为 6 份的利用将不能充分利用 PCU 分区,但这是在同质单元上进行分区的一个不可避免的后果。

咱们接下来确定每个 FU 的寄存器数量。咱们再次扫过参数空间,将级数固定为 6,但对其余参数不作限度。从图 7b 中能够发现大多数利用的现实寄存器数量在 4 到 6 之间,间接对应于每个 PCU 流水线阶段中任何给定点的最大沉闷值数量。低于 4 个寄存器,PCU 就会受到给定工夫内所能包容的沉闷值数量的限度,从而导致不相干的分区。在每个 FU 超过 8 个寄存器时,绝对于 PCU 的总面积,未应用寄存器的老本变得很显著。因而咱们抉择每个 FU 有 6 个寄存器。

依照同样的程序,咱们确定标量输出和输入的数量。标量逻辑绝对便宜,然而,像寄存器一样,不足可用的标量输出或输入会导致逻辑被宰割到许多 PCU 中,未利用的逻辑会产生大量开销。因而,咱们在图 7(c,d)中看到,每个基准测试都有一些所需的最低数量的输出和输入,在这之后减少任何一个都没有什么影响。咱们抉择了 6 个标量输出和 5 个标量输入,因为这在所有基准测试中都能使面积开销最小。

最初,咱们以同样的形式对每个 PCU 的矢量输出和输入进行调整。矢量与标量是离开调整的,因为两者在 PCU 之间应用不同的互连门路,在 PCU 外部应用不同的寄存器。请留神,矢量输出与输出 FIFO 无关,占了 PCU 面积的很大一部分。因而,咱们心愿尽可能减少矢量输出。然而,如图 7e 所示,因为在 PCU 之间宰割的限度,BlackScholes 和 GDA 被限度为至多有 3 个矢量输出。图 7f 显示,矢量输入绝对便宜,对所需的设计面积影响很小。因而,咱们抉择每个 PCU 有 3 个矢量输出和 3 个矢量输入。

咱们还以相似办法抉择了表 3 给出的 PMU 参数。请留神,PMU 的矢量输出和输入的数量大抵对应于缓存盘的读、写和数据总线。因为编译器总是将内存读取的后果映射到矢量总线,因而 PMU 目前从不应用标量输入。

在这个调优过程之后,有了一个调优的 PCU 和 PMU 设计。基于对每个基准测试的钻研,咱们抉择 16×8 个单元,还试验了多种比例的 PMU 和 PCU。最终咱们抉择 1:1 的 PMU、PCU 比例。而较大比率 (例如 2:1 的 PMU、PCU 比例) 在某些基准测试上进步了单位利用率,但能效较低。

4. 评估

本节咱们基于商用 Stratix V FPGA 评估 Plasticine 的性能和功耗效率,将 Plasticine 架构的运行工夫和功耗与来自机器学习、数据分析和图形处理畛域的基准测试、无效的 FPGA 实现进行比拟。在成熟工具链的反对下,FPGA 被宽泛应用,使得咱们有可能在实在硬件上取得性能数据。

4.1. 基准测试(Benchmarks)

咱们围绕两种架构的各种属性开发了一组基准测试,比方密集数据处理和依赖性数据的内存拜访。咱们应用实在利用领导基准测试的设计,以确保 Plasticine 可能做有用的工作。表 4 提供了应用程序的简要介绍。

在密集利用中,内积 (inner product) 外积 (outer product) 和 GEMM(单精度通用矩阵乘法, single precision general matrix multiplication) 是根本的线性代数操作,是许多算法的外围。TPC-H Query 6提供了简略的过滤还原性能,展现了数据库查问性能。Black-Scholes是一种计算量很大的金融算法,具备极深的流水线。高斯判别分析 (GDA, Gaussian Discriminant Analysis) 随机梯度降落 (SGD, Stochastic Gradient Descent) 是常见的机器学习算法,波及绝对简单的内存拜访,体现出许多并行化的抉择。K-means 聚类通过迭代计算 k 个最佳聚类中心点将一组输出点分组。K-means 应用密集的 HashReduce 计算下一次迭代的中心点。卷积神经网络(CNN, Convolutional Neural Network) 是用于图像分类的重要机器学习内核。CNN 波及多层计算,其中每一层都波及对输出特色图执行若干个三维卷积操作。

稠密利用波及对内存中依赖性数据的拜访和非确定性计算。稠密矩阵 - 密集向量 (SMDV, Sparse matrix-dense vector) 乘法是许多稠密迭代办法和优化算法中应用的另一个根本线性代数内核。PageRank 是一种风行的图算法,波及片外稠密数据收集,以迭代更新页面排名。广度优先搜寻(BFS, BreadthFirst Search) 是另一种图算法,执行与数据相干的、基于边界的遍历,并应用数据分布来存储每个节点的信息。

咱们用 Delite 硬件定义语言 (DHDL, Delite Hardware Definition Language) 实现这些基准测试,这是一种基于并行模式的专门语言,用于为空间架构 (spatial architecture) 编写应用程序 [20]。在 DHDL 中,应用程序被指定为可并行的数据流流水线的层次结构。以前的工作[36] 表明,DHDL 能够从并行模式中主动生成,并可用于生成 FPGA 的高效硬件加速器设计[20]。

4.2. Plasticine 设计

咱们基于 Chisel[2]应用表 3 所列选定参数实现 Plasticine 架构。该架构被组织成 16×8 的单元阵列,PMU 与 PCU 的比例为 1:1,应用 Synopsys 设计编译器 (Synopsys Design Compiler) 与 28nm 技术库进行综合。设计中的要害门路已被优化为 1GHz 时钟频率,芯片总面积的估算是在综合之后失去的,通过带有 28nm 库的 Synopsys 内存编译器 (Synopsys Memory Compiler) 取得本地 scratchpad 和 FIFO 的尺寸。咱们应用 Synopsys PrimeTime 和 RTL 跟踪器对单个 PCU、PMU 和 AG 的功率进行剖析,整个芯片的动态功率和所应用单元的动静功率都包含在总功率中。表 5 提供了 Plasticine 的组件面积细分,面积为 112.77$mm^2$。最终的 Plasticine 架构具备 12.3 个单精度 TFLOPS 峰值浮点性能和 16MB 的总片上 scratchpad 容量。

应用 Synopsys VCS 和 DRAMSim2[39]进行准确周期模仿,测量芯片外内存拜访工夫,失去了 Plasticine 的执行工夫。咱们配置 DRAMSim2 模仿具备 4 个 DDR3-1600 通道的内存零碎,给出 51.2 GB/ s 的实践峰值带宽。

通过批改 DHDL 编译器,应用第 3.6 节中介绍的过程为 Plasticine 生成动态配置,每个基准测试被编译为一个 Plasticine 配置,用于对模拟器编程。Plasticine 总运行工夫在数据复制到加速器主内存后开始计算,当加速器执行实现时完结(即在将数据复制回主机之前)。

4.3. Plasticine 设计开销

咱们首先钻研 Plasticine 架构中设计决定的面积开销。每个决定都被隔离开来,并依据一个理想化的架构进行评估。这些架构被归一化,以便在 1GHz 的时钟和固定的本地存储器大小下,确保每个基准测试的性能与它在最终的 Plasticine 架构上的性能雷同。这些设计决定 (表 6 的 a - e 列) 容许每个基准测试有任意数量的 PCU 和 PMU,这样做是为理解耦特定架构对具体决定和利用的影响。

咱们首先评估了将一个利用划分为粗粒度 PCU 和 PMU 的老本。在这里,咱们将特定于基准 ASIC 设计的预计面积与具备 异构(heterogeneous) PCU 和 PMU 的现实 Plasticine 架构进行比拟。对于给定基准,ASIC 面积被估算为其计算和存储资源的面积之和。每个资源的面积都是用 Synopsys DC 来形容的。Plasticine 架构具备第 3 节中形容的所有特色,包含配置逻辑、可配置的重叠存储器和可动态配置的 ALU。表 6 的 a 列显示了这种异构架构的预计老本与特定基准芯片设计的预计面积的关系。绝对于 ASIC 设计,可重配单元的面积开销均匀约为 2.8 倍。这是 Plasticine 的可重配性的根本开销,次要集中在使内存控制器可配置和将计算逻辑从固定操作转换为可重配 FU。

尽管应用异构单元是利用面积的现实抉择,但产生了一个难以解决的映射问题,而且不能在不同利用中通用。在表 6 的 b 列中,显示了从异构架构到依然具备异构 PCU 但具备繁多同构 PMU 设计的架构的老本。咱们依然容许这个 PMU 设计对每个基准来说是惟一的,然而在基准测试中,依据程序须要的最大 scratchpad 来确定 PMU 的大小。迁徙到对立 PMU 的均匀开销是 1.4 倍,对于内存大小急剧变动的应用程序,开销特地大。例如,OuterProduct 对大小为 N 的向量 tile 和大小为 $N^2$ 的输入 tile 应用本地存储器。在 ASIC 设计中,对于指标利用的动态常识容许将每个本地存储器专门化为所需大小和芯片数量,从而节俭大量 SRAM 面积。在 Plasticine 中,咱们抉择了对立大小的存储器单元,从而简化映射,并进步特定利用可被路由的可能性。

c 列显示了进一步限度 PCU 的开销,使其也是同质的,但在不同基准上仍有差别。这里的开销对于像 PageRank 这样有大量程序循环的利用来说特地高。所有模式的主体都被映射到 PCU 中,然而因为每个 PCU 被固定为 16 个通道,程序循环中的大部分通道以及大部分面积都没有被应用,导致开销高达 8.4 倍。同样,像 TPCHQ6 这样的计算流水线长度变化很大的利用,往往对同质 PCU 内的阶段利用有余。

咱们接下来展现在所有利用中抉择一组 PMU 参数后的面积开销。如第 3.7 节所述,这将所有基准中的 scratchpad 的总大小设定为每个 256KB。尽管这种本地内存容量对 GEMM 和 OuterProduct[33]等利用的性能至关重要,但其余利用的本地内存要求要小得多。从 d 列能够看出,这种未利用的 SRAM 容量的均匀芯片面积开销为 1.2 倍。

e 列列出了应用第 3.7 节中失去的数值在不同利用中通用化 PCU 的后果。在这里,咱们看到残余的开销与同质化单元的老本相比是很小的,对于 BlackScholes 来说,均匀只有 5%,最高为 15%。这表明,不同利用中 PCU 需要的大部分变动曾经被单个利用中的各种循环所代表,这反过来又使跨利用的计算通用化变得绝对便宜。

综上所述,咱们预计,与具备雷同性能的特定利用芯片设计相比,咱们的同质化、通用化、基于单元的架构的均匀面积开销为 3.9 倍到 42.8 倍。当然,这种开销依据基准的本地内存和计算要求而有很大不同。尽管最终固定尺寸的 Plasticine 架构的 PCU 和 PMU 利用率 (起初在表 7 中显示) 往往低于 100%,但咱们不认为这自身是面积开销。相同,Plasticine 架构被认为是一个 ” 足够大 ” 的构造,能够用来实现 e 列中列出的现实架构,残余的单元资源能够用门控时钟优化。

4.4. FPGA 设计

咱们接下来比拟 Plasticine 与 FPGA 的性能和功率。咱们应用 DHDL 编译器来生成 VHDL,而后应用 Altera 的综合工具为 FPGA 生成位流。咱们在 Altera 28nm Stratix V FPGA 上运行每个合成的基准,通过 PCIe 与主机 CPU 控制器连贯。该 FPGA 有一个 150 MHz 的构造时钟,一个 400 MHz 的存储器控制器时钟,以及 48 GB 的专用片外 DDR3-800 DRAM,有 6 个通道,峰值带宽为 37.5 GB/s。FPGA 的执行工夫为运行 20 次的平均值。与 Plasticine 一样,计时在数据从主机拷贝到 FPGA 的专用 DRAM 实现后开始,在 FPGA 执行实现后完结。咱们还应用 Altera 的 PowerPlay 工具在基准搁置和布线后取得了每个基准测试的 FPGA 功率预计。

4.5. Plasticine 和 FPGA 比拟

表 7 显示了在咱们的一系列基准测试中,绝对于 Stratix V FPGA 的 Plasticine 的利用率、功率、性能和每瓦性能。表格显示,与 FPGA 相比,Plasticine 实现了更高的能源效率。表 7 显示了每个基准测试在两个平台上的资源利用率,接下来咱们将探讨各个基准测试后果。

内积和 TPC-H Query 6 都别离实现了 1.4 倍的速度晋升。这两个基准测试都是内存带宽束缚,大量数据从 DRAM 中通过数据通路流进去,而计算量较小。因而,性能差别对应于各自平台上可实现的主内存带宽差别。Plasticine 上的功耗也与 FPGA 相当,大部分 PCU 和一半 PMU 都没有应用,因而触发了功耗门控。

外积也是有带宽限度的,但有局部长期局部性,因而能够从更大的 tile 尺寸中受害。FPGA 受限于能够实例化的具备多端口的大型存储器数量,这反过来又限度了可利用的内循环并行性以及潜在的计算与 DRAM 通信之间的并行处理。对重叠的、有缓冲的 scratchpad 的本地反对使 Plasticine 可能更好利用 SIMD 和流水线并行性,从而实现 6.7 倍的速度晋升。

Black-Scholes 通过浮点操作流水线从 DRAM 中传输若干浮点阵列。每次拜访 DRAM 时的大量浮点运算使其在大多数架构上受计算限度。尽管 Black-Scholes 的深度流水线性质使其成为 FPGA 减速的现实候选者,但 FPGA 在其主存储器带宽饱和之前就曾经耗尽了实例化计算资源的空间。另一方面,Plasticine 具备更高的浮点单元容量。在 Plasticine 上的 BlackScholes 能够被充沛并行化,以至于受限于内存。从表 7 中能够看到,应用 65% 的 PCU,Black-Scholes 最大限度利用了 DRAM 带宽,实现了 5.1 倍的减速。

GEMM 和 GDA 是计算受限的,具备充沛的工夫和空间局部性。在 Plasticine 上,GEMM 实现了 33.0 倍的速度晋升,GDA 也有相似体现,速度进步了 40.0 倍。Plasticine 能够通过将更大的 tile 加载到重叠 scratchpad 来利用更多的局部性,并通过将 scratchpad 配置为双缓冲区来暗藏 DRAM 的通信提早。在 FPGA 上,创立重叠的双缓冲 tile 会在计算资源耗尽之前耗尽 BRAM 资源,从而限度了计算吞吐量。在目前 GEMM 与 Plasticine 的映射中,PCU 通过在其数据门路中间断执行流水线内积,对两块 tile 进行乘法。并行性是在 PCU 外部跨通道实现的,在多个 tile 被并行处理的状况下,跨 PCU 也是如此。通过并行处理更多的输出 tile,能够实现更多的并行性。因而,在目前的计划中,GEMM 的性能受限于 AG 的数量,因为须要更多的 AG 来加载多个输出 tile。此外,因为每个 PCU 都执行内积,不属于还原网络的 FU 就没有失去充分利用。更加简单的映射计划,以及对 PCU 内阶段间 FU 通信的更多硬件反对,能够进一步提高计算利用率,从而进步性能[31]。

CNN 是另一个计算密集型基准测试,在这种状况下,Plasticine 的性能优于 FPGA,晋升达 95.1 倍。Plasticine 的性能是因为更高的计算密度以及反对内核权重部分化和 PMU 局部后果部分化的能力。为了无效利用 CNN 中的滑动窗口重用,scratchpad 被配置为行缓冲区,以防止不必要的 DRAM 重加载。每个 PCU 通过从一个 PMU 中读取内核权重并产生输入特色图到另一个 PMU 中来执行繁多三维卷积。PCU 中的 FU 之间的移位网络使数据在滑动窗口中失去重用,并在流水线寄存器中积攒局部和,从而最大限度缩小了 scratchpad 的读写。CNN 目前被映射到 Plasticine 上,因而每个 PCU 须要 2 个 PMU,一个用于保留内核权重,另一个用于存储输入特色图。因为 Plasticine 被配置为 1:1 的 PCU:PMU 比例,使得 PCU 的利用率下限为 49.0%,而 PMU 和 AG 的利用率却达到了最大化。应用更多的 PMU 共享进行更优化的映射能够克服这个限度。

LogReg 是一个计算量很大的基准测试,它应用大 tile 来捕获局部性。并行性在外循环层面通过并行处理多个 tile 失去利用,在内循环层面则应用 PCU 内的 SIMD 通道。目前,编译器只在单个 PCU 的 SIMD 通道内利用内循环的并行性,而不在多个 PCU 之间宰割内循环。通过以比 FPGA 更快的时钟速率并行处理更多的输出 tile,Plasticine 实现了 11.4 倍的速度晋升。

SGD 和 K -means 具备有顺外循环和可并行的内循环。这些利用固有的程序性导致在 Plasticine 上的速度别离进步了 6.7 倍和 6.1 倍,这次要是因为 Plasticine 的时钟频率更高。然而,因为 Plasticine 只须要几个 PCU 来利用无限的并行性,大部分未应用的资源能够通过功耗门控,使每瓦性能别离进步 39.8 倍和 12.3 倍。

SMDV、PageRank 和 BFS 在 Plasticine 上别离实现了 8.3 倍、14.2 倍和 7.3 倍的速度晋升。这些稠密基准测试的性能受限于 DDR 随机拜访 DRAM 的带宽。SMDV 和 PageRank 只执行稠密负载 (gather),而 BFS 在每次迭代中执行 gather 和 scatter,scatter 和 gather 引擎是在 FPGA 上应用软逻辑实现的。这些基准测试的外循环被并行化,以产生多个并行的稠密内存申请流,使得地址聚合后未解决的内存申请数量最大化。基准测试中应用的 FPGA 平台的随机拜访 DRAM 带宽是无限的,所有通道都作为一个宽的 DRAM 通道以 ”ganged” 模式运行。具备多个独立 DRAM 通道的 FPGA 平台在实践上能够比咱们的 FPGA 基线在稠密利用中体现得更好。然而,scatter-gather 单元依然必须在软逻辑中实现。scatter-gather 单元须要大量本地存储器,然而本地存储器(BRAM) 往往是 FPGA 上的要害资源,从而限度了未实现的存储器申请的数量和地址聚合的效用。此外,FPGA 构造时钟通常比 DRAM 时钟慢,在利用随机拜访带宽方面造成了另一个瓶颈。像 Plasticine 中的聚合单元这样的专用硬件容许以更无效的形式应用 DRAM 带宽。

总之,Plasticine 能够最大限度进步内积和 TPC-H Q6 等流式利用的 DRAM 带宽利用率,并维持深度流水线数据通路的计算吞吐量,使 Black-Scholes 等利用受到内存束缚。Plasticine 为 GEMM、GDA、CNN、LogReg、SGD 和 K -means 等利用提供 PMU 和 PCU 间网络的数据部分化和通信模式。最初,通过反对大量具备地址聚合性能的未决内存申请,DRAM 带宽被无效用于 SMDV、Pagerank 和 BFS 中的 scatter 和 gather 操作。

5. 相干工作

表 2 介绍了高效执行并行模式所需的要害体系架构个性,接下来咱们探讨与这些个性相干的重要工作。

可重配 scratchpad: 先前提出的几种可重配架构不足对可重配分布式 scrachpad 存储器的反对。如果不能应用反对并行模式所需的不同存储和缓冲策略重新配置片上内存零碎,内存就会成为许多工作负载的瓶颈。

例如,ADRES[25]、DySER[17]、Garp[6]和 Tartan[26]将可重配架构与 CPU 紧密结合,通过与主机 CPU 共享高速缓存层拜访主内存。ADRES 和 DySER 将可重配架构严密整合到处理器流水线的执行阶段,因而依赖处理器的加载 / 存储单元进行内存拜访。ADRES 由性能单元网络、带有寄存器文件的可重配组件和共享多端口寄存器文件组成。DySER 是一个可重配阵列,具备动态配置的互连,旨在以流水线形式执行最内层的循环体。然而,不反对带有后沿 (back-edge) 或反馈门路的数据流图,这使得执行诸如 Fold 和嵌套并行模式成为挑战。Garp 由一个 MIPS CPU 外围和一个相似 FPGA 的协处理器组成。协处理器的位级动态互连产生了与传统 FPGA 雷同的重配置开销,限度了计算密度。Piperench[16]由性能单元 (FSU) 的 ”stripes” 流水线序列组成,每个 stripe 之间有一个字级 crossbar,每个性能单元都有对应的寄存器文件,用来保留长期后果。Tartan 由一个 RISC 外围和一个异步、粗粒度的可重配网络 (RF, reconfigurable fabric) 组成。RF 架构是分层的,最顶层有一个动静互连,外部有一个动态互连,最内层的 RF 外围架构是依照 Piperench[16]的模式设计的。

可重配数据通路: 具备可重配性能单元的架构的能耗较少,不会产生传统指令流水线的开销 (如指令获取、解码和寄存器文件拜访),这些开销约占 CPU 数据通路能耗的 40%[18],约占 GPU 总动静能耗的 30%[24]。此外,在 GPU 中应用可重配数据通路代替传统指令流水线,能够缩小约 57% 的能耗[43]。Raw 微处理器[42] 是平铺式架构(tiled architecture),每个 tile 由一个单发有序处理器(single-issue in-order processor)、一个浮点单元、一个数据缓存和一个软件治理的指令缓存组成。tile 应用流水线、字级动态和动静网络与最近的街坊通信。Plasticine 不会产生上述动静网络和通用处理器的开销,基于硬件治理的缓存来代替可重配 scratchpad,能够降低功耗和面积效率,有利于通用性。

密集数据通路和层次化流水线: Plasticine 的分层架构,具备密集的流水线 SIMD 性能单元和扩散的管制,可能在 PCU 内解决大量数据通信,并无效利用应用程序中的粗粒度流水线并行性。相同,在架构中不足对嵌套流水线分层反对的架构,基于全局互连替换大多数后果,从而使得互连成为带宽、功率或面积的瓶颈。例如,RaPiD[12]是由 ALU、寄存器和存储器组成的一维阵列,对动态和动态控制有硬件反对。随后一个名为 Mosaic[13]的钻研我的项目包含一个动态混合互连,以及在多个互连配置之间切换的硬件反对。RaPiD 的线性流水线强制执行生硬的控制流,从而难以利用嵌套的并行性。HRL[14]将粗粒度和细粒度的逻辑块与混合动态互连相结合,尽管集中式 scratchpad 能够实现一些片上缓冲,但该架构次要是为内存密集型利用设计的,简直没有局部性和嵌套并行性。Triggered[30]是由动态互连中的 ALU 和寄存器的粗粒度解决元件 (PE, processing element) 组成的架构。每个 PE 蕴含一个调度器和一个谓词寄存器(predicate register),通过触发器和特定动作执行数据流。Plasticine 中应用的控制流机制与 Triggered 指令有一些相似之处。尽管这种架构能够灵便利用嵌套的并行性和局部性,但因为不足层次结构,减少了全局互连上的通信,可能会造成瓶颈,并升高数据门路的计算密度。

6. 论断

咱们在本文中介绍了 Plasticine,这是一种新型可重配架构,用于无效执行由并行模式组成的稠密和密集应用程序。咱们确定了解决稠密和密集算法所需的要害计算模式,并介绍了粗粒度模式和内存计算单元,可能以流水线化、矢量化的形式执行并行模式。这些单元在咱们的编程模型中利用了分层并行性、局部性和内存拜访模式的信息。而后,咱们基于设计空间摸索领导 Plasticine 架构的设计,并创立了残缺的软硬件堆栈,将应用程序映射为两头示意,而后在 Plasticine 上执行。试验证实,在 113$mm^2$ 的面积估算下,与相似工艺技术的 FPGA 相比,Plasticine 的性能进步了 95 倍,每瓦性能进步了 77 倍。

致谢

感激 Tony Wu 对本文的帮助,并感激审稿人的倡议。这项工作失去了 DARPA 合同 Air Force FA8750-12-2-0335; 陆军合同 FA8750-14-2-0240 和 FA8750-12-20335; NSF 赞助 CCF-1111943 和 IIS1247701 的反对。本文蕴含的观点和论断是作者的观点和论断,不代表 DARPA 或美国政府的官网政策或认可。

参考文献

[1] Joshua Auerbach, David F. Bacon, Perry Cheng, and Rodric Rabbah. 2010. Lime: A Java-compatible and Synthesizable Language for Heterogeneous Architectures. In Proceedings of the ACM International Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA). 89–108. https://doi.org/10.1145/1869459.1869469

[2] Jonathan. Bachrach, Huy Vo, Brian Richards, Yunsup Lee, Andrew Waterman, Rimas Avizienis, John Wawrzynek, and Krste Asanovic. 2012. Chisel: Constructing hardware in a Scala embedded language. In Design Automation Conference (DAC), 2012 49th ACM/EDAC/IEEE. 1212–1221.

[3] David Bacon, Rodric Rabbah, and Sunil Shukla. 2013. FPGA Programming for the Masses. Queue 11, 2, Article 40 (Feb. 2013), 13 pages. https://doi.org/10.1145/2436696.2443836

[4] Ivo Bolsens. 2006. Programming Modern FPGAs, International Forum on Embedded Multiprocessor SoC, Keynote,. http://www.xilinx.com/univ/mpsoc2006keynote.pdf.

[5] Benton. Highsmith Calhoun, Joseph F. Ryan, Sudhanshu Khanna, Mateja Putic, and John Lach. 2010. Flexible Circuits and Architectures for Ultralow Power. Proc. IEEE 98, 2 (Feb 2010), 267–282. https://doi.org/10.1109/JPROC.2009.2037211

[6] Timothy J. Callahan, John R. Hauser, and John Wawrzynek. 2000. The Garp architecture and C compiler. Computer 33, 4 (Apr 2000), 62–69. https://doi.org/10.1109/2.839323

[7] Jared Casper and Kunle Olukotun. 2014. Hardware Acceleration of Database Operations. In Proceedings of the 2014 ACM/SIGDA International Symposium on Fieldprogrammable Gate Arrays (FPGA’14). ACM, New York, NY, USA, 151–160. https://doi.org/10.1145/2554688.2554787

[8] Bryan Catanzaro, Michael Garland, and Kurt Keutzer. 2011. Copperhead: compiling an embedded data parallel language. In Proceedings of the 16th ACM symposium on Principles and practice of parallel programming (PPoPP). ACM, New York, NY, USA, 47–56. https://doi.org/10.1145/1941553.1941562

[9] Yunji Chen, Tao Luo, Shaoli Liu, Shijin Zhang, Liqiang He, Jia Wang, Ling Li, Tianshi Chen, Zhiwei Xu, Ninghui Sun, and Olivier Temam. 2014. DaDianNao: A MachineLearning Supercomputer. In 2014 47th Annual IEEE/ACM International Symposium on Microarchitecture. 609–622. https://doi.org/10.1109/MICRO.2014.58

[10] Yu-Hsin Chen, Tushar Krishna, Joel Emer, and Vivienne Sze. 2016. 14.5 Eyeriss: An energy-efficient reconfigurable accelerator for deep convolutional neural networks. In 2016 IEEE International Solid-State Circuits Conference (ISSCC). IEEE, 262–263.

[11] Eric S. Chung, John D. Davis, and Jaewon Lee. 2013. LINQits: Big Data on Little Clients. In Proceedings of the 40th Annual International Symposium on Computer Architecture (ISCA’13). ACM, New York, NY, USA, 261–272. https://doi.org/10.1145/2485922.2485945

[12] Darren C. Cronquist, Chris Fisher, Miguel Figueroa, Paul Franklin, and Carl Ebeling. 1999. Architecture design of reconfigurable pipelined datapaths. In Advanced Research in VLSI, 1999. Proceedings. 20th Anniversary Conference on. 23–40. https://doi.org/10.1109/ARVLSI.1999.756035

[13] Brian Van Essen, Aaron Wood, Allan Carroll, Stephen Friedman, Robin Panda, Benjamin Ylvisaker, Carl Ebeling, and Scott Hauck. 2009. Static versus scheduled interconnect in Coarse-Grained Reconfigurable Arrays. In 2009 International Conference on Field Programmable Logic and Applications. 268–275. https://doi.org/10.1109/FPL.2009.5272293

[14] Mingyu Gao and Christos Kozyrakis. 2016. HRL: Efficient and flexible reconfigurable logic for near-data processing. In 2016 IEEE International Symposium on High Performance Computer Architecture (HPCA). 126–137. https://doi.org/10.1109/HPCA.2016.7446059

[15] Nithin George, HyoukJoong Lee, David Novo, Tiark Rompf, Kevin J. Brown, Arvind K. Sujeeth, Martin Odersky, Kunle Olukotun, and Paolo Ienne. 2014. Hardware system synthesis from Domain-Specific Languages. In Field Programmable Logic and Applications (FPL), 2014 24th International Conference on. 1–8. https://doi.org/10.1109/FPL.2014.6927454

[16] Seth Copen Goldstein, Herman Schmit, Matthew Moe, Mihai Budiu, Srihari Cadambi, R. Reed Taylor, and Ronald Laufer. 1999. PipeRench: A Co/Processor for Streaming Multimedia Acceleration. In Proceedings of the 26th Annual International Symposium on Computer Architecture (ISCA’99). IEEE Computer Society, Washington, DC, USA, 28–39. https://doi.org/10.1145/300979.300982

[17] Venkatraman. Govindaraju, Chen-Han Ho, Tony Nowatzki, Jatin Chhugani, Nadathur Satish, Karthikeyan Sankaralingam, and Changkyu Kim. 2012. DySER: Unifying Functionality and Parallelism Specialization for Energy-Efficient Computing. IEEE Micro 32, 5 (Sept 2012), 38–51. https://doi.org/10.1109/MM.2012.51

[18] Rehan Hameed, Wajahat Qadeer, Megan Wachs, Omid Azizi, Alex Solomatnikov, Benjamin C. Lee, Stephen Richardson, Christos Kozyrakis, and Mark Horowitz. 2010. Understanding Sources of Inefficiency in General-purpose Chips. In Proceedings of the 37th Annual International Symposium on Computer Architecture (ISCA’10). ACM, New York, NY, USA, 37–47. https://doi.org/10.1145/1815961.1815968

[19] Song Han, Xingyu Liu, Huizi Mao, Jing Pu, Ardavan Pedram, Mark A Horowitz, and William J Dally. 2016. EIE: efficient inference engine on compressed deep neural network. arXiv preprint arXiv:1602.01528 (2016).

[20] David Koeplinger, Raghu Prabhakar, Yaqi Zhang, Christina Delimitrou, Christos Kozyrakis, and Kunle Olukotun. 2016. Automatic Generation of Efficient Accelerators for Reconfigurable Hardware. In International Symposium in Computer Architecture.

[21] Ian Kuon and Jonathan Rose. 2007. Measuring the Gap Between FPGAs and ASICs. IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems 26, 2 (Feb 2007), 203–215. https://doi.org/10.1109/TCAD.2006.884574

[22] Ian Kuon, Russell Tessier, and Jonathan Rose. 2008. FPGA Architecture: Survey and Challenges. Found. Trends Electron. Des. Autom. 2, 2 (Feb. 2008), 135–253. https://doi.org/10.1561/1000000005

[23] HyoukJoong Lee, Kevin J. Brown, Arvind K. Sujeeth, Tiark Rompf, and Kunle Olukotun. 2014. Locality-Aware Mapping of Nested Parallel Patterns on GPUs. In Proceedings of the 47th Annual IEEE/ACM International Symposium on Microarchitecture (IEEE Micro).

[24] Jingwen Leng, Tayler Hetherington, Ahmed ElTantawy, Syed Gilani, Nam Sung Kim, Tor M. Aamodt, and Vijay Janapa Reddi. 2013. GPUWattch: Enabling Energy Optimizations in GPGPUs. In Proceedings of the 40th Annual International Symposium on Computer Architecture (ISCA’13). ACM, New York, NY, USA, 487–498. https://doi.org/10.1145/2485922.2485964

[25] Bingfeng Mei, Serge Vernalde, Diederik Verkest, Hugo De Man, and Rudy Lauwereins. 2003. ADRES: An Architecture with Tightly Coupled VLIW Processor and CoarseGrained Reconfigurable Matrix. Springer Berlin Heidelberg, Berlin, Heidelberg, 61–70. https://doi.org/10.1007/978-3-540-45234-8_7

[26] Mahim Mishra, Timothy J. Callahan, Tiberiu Chelcea, Girish Venkataramani, Seth C. Goldstein, and Mihai Budiu. 2006. Tartan: Evaluating Spatial Computation for Whole Program Execution. In Proceedings of the 12th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS XII). ACM, New York, NY, USA, 163–174. https://doi.org/10.1145/1168857.1168878

[27] M. Odersky. 2011. Scala. http://www.scala-lang.org. (2011).

[28] Jian Ouyang, Shiding Lin, Wei Qi, Yong Wang, Bo Yu, and Song Jiang. 2014. SDA: Software-Defined Accelerator for LargeScale DNN Systems (Hot Chips 26).

[29] Kalin Ovtcharov, Olatunji Ruwase, Joo-Young Kim, Jeremy Fowers, Karin Strauss, and Eric S. Chung. 2015. Accelerating Deep Convolutional Neural Networks Using Specialized Hardware. Technical Report. Microsoft Research. http://research-srv.microsoft.com/pubs/240715/CNN%20Whitepape…

[30] Angshuman Parashar, Michael Pellauer, Michael Adler, Bushra Ahsan, Neal Crago, Daniel Lustig, Vladimir Pavlov, Antonia Zhai, Mohit Gambhir, Aamer Jaleel, Randy Allmon, Rachid Rayess, Stephen Maresh, and Joel Emer. 2013. Triggered Instructions: A Control Paradigm for Spatially-programmed Architectures. In Proceedings of the 40th Annual International Symposium on Computer Architecture (ISCA’13). ACM, New York, NY, USA, 142–153. https://doi.org/10.1145/2485922.2485935

[31] Ardavan Pedram, Andreas Gerstlauer, and Robert van de Geijn. 2012. On the Efficiency of Register File versus Broadcast Interconnect for Collective Communications in DataParallel Hardware Accelerators. In Proceedings of the 2012 IEEE 24th International
Symposium on Computer Architecture and High Performance Computing (SBAC-PAD). 19–26. https://doi.org/10.1109/SBAC-PAD.2012.35

[32] Ardavan Pedram, Stephen Richardson, Sameh Galal, Shahar Kvatinsky, and Mark Horowitz. 2017. Dark memory and accelerator-rich system optimization in the dark silicon era. IEEE Design & Test 34, 2 (2017), 39–50.

[33] Ardavan Pedram, Robert van de Geijn, and Andreas Gerstlauer. 2012. Codesign Tradeoffs for High-Performance, Low-Power Linear Algebra Architectures. IEEE Transactions on Computers, Special Issue on Power efficient computing 61, 12 (2012), 1724–1736.

[34] Simon Peyton Jones [editor], John Hughes [editor], Lennart Augustsson, Dave Barton, Brian Boutel, Warren Burton, Simon Fraser, Joseph Fasel, Kevin Hammond, Ralf Hinze, Paul Hudak, Thomas Johnsson, Mark Jones, John Launchbury, Erik Meijer, John Peterson, Alastair Reid, Colin Runciman, and Philip Wadler. 1999. Haskell 98 — A Nonstrict, Purely Functional Language. Available from http://www.haskell.org/definition/.(feb 1999).

[35] Kara K. W. Poon, Steven J. E. Wilton, and Andy Yan. 2005. A Detailed Power Model for Field-programmable Gate Arrays. ACM Trans. Des. Autom. Electron. Syst. 10, 2 (April 2005), 279–302. https://doi.org/10.1145/1059876.1059881

[36] Raghu Prabhakar, David Koeplinger, Kevin J. Brown, HyoukJoong Lee, Christopher De Sa, Christos Kozyrakis, and Kunle Olukotun. 2016. Generating Configurable Hardware from Parallel Patterns. In Proceedings of the Twenty-First International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS’16). ACM, New York, NY, USA, 651–665. https://doi.org/10.1145/2872362.2872415

[37] Andrew Putnam, Adrian M. Caulfield, Eric S. Chung, Derek Chiou, Kypros Constantinides, John Demme, Hadi Esmaeilzadeh, Jeremy Fowers, Gopi Prashanth Gopal, Jan Gray, Michael Haselman, Scott Hauck, Stephen Heil, Amir Hormati, Joo-Young Kim, Sitaram Lanka, James Larus, Eric Peterson, Simon Pope, Aaron Smith, Jason Thong, Phillip Yi Xiao, and Doug Burger. 2014. A Reconfigurable Fabric for Accelerating Large-scale Datacenter Services. In Proceeding of the 41st Annual International Symposium on Computer Architecuture (ISCA’14). IEEE Press, Piscataway, NJ, USA, 13–24. http://dl.acm.org/citation.cfm?id=2665671.2665678

[38] Jonathan Ragan-Kelley, Connelly Barnes, Andrew Adams, Sylvain Paris, Frédo Durand, and Saman Amarasinghe. 2013. Halide: A Language and Compiler for Optimizing Parallelism, Locality, and Recomputation in Image Processing Pipelines. In Proceedings of the 34th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI’13). ACM, New York, NY, USA, 519–530. https://doi.org/10.1145/2491956.2462176

[39] Paul Rosenfeld, Elliott Cooper-Balis, and Bruce Jacob. 2011. DRAMSim2: A Cycle Accurate Memory System Simulator. IEEE Computer Architecture Letters 10, 1 (Jan 2011), 16–19. https://doi.org/10.1109/L-CA.2011.4

[40] Arvind K. Sujeeth, Kevin J. Brown, HyoukJoong Lee, Tiark Rompf, Hassan Chafi, Martin Odersky, and Kunle Olukotun. 2014. Delite: A Compiler Architecture for Performance-Oriented Embedded Domain-Specific Languages. In TECS’14: ACM Transactions on Embedded Computing Systems.

[41] Arvind K. Sujeeth, Tiark Rompf, Kevin J. Brown, HyoukJoong Lee, Hassan Chafi, Victoria Popic, Michael Wu, Aleksander Prokopec, Vojin Jovanovic, Martin Odersky, and Kunle Olukotun. 2013. Composition and Reuse with Compiled Domain-Specific Languages. In European Conference on Object Oriented Programming (ECOOP).

[42] Michael Bedford Taylor, Jason Kim, Jason Miller, David Wentzlaff, Fae Ghodrat, Ben Greenwald, Henry Hoffman, Paul Johnson, Jae-Wook Lee, Walter Lee, Albert Ma, Arvind Saraf, Mark Seneski, Nathan Shnidman, Volker Strumpen, Matt Frank, Saman Amarasinghe, and Anant Agarwal. 2002. The Raw Microprocessor: A Computational Fabric for Software Circuits and General-Purpose Programs. IEEE Micro 22, 2 (March 2002), 25–35. https://doi.org/10.1109/MM.2002.997877

[43] Dani Voitsechov and Yoav Etsion. 2014. Single-graph Multiple Flows: Energy Efficient Design Alternative for GPGPUs. In Proceeding of the 41st Annual International Symposium on Computer Architecuture (ISCA’14). IEEE Press, Piscataway, NJ, USA, 205–216. http://dl.acm.org/citation.cfm?id=2665671.2665703

[44] Lisa Wu, Andrea Lottarini, Timothy K. Paine, Martha A. Kim, and Kenneth A. Ross. 2014. Q100: The Architecture and Design of a Database Processing Unit. In Proceedings of the 19th International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS’14). ACM, New York, NY, USA, 255–268. https://doi.org/10.1145/2541940.2541961

* 你好,我是俞凡,在 Motorola 做过研发,当初在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓重的趣味,平时喜爱浏览、思考,置信继续学习、一生成长,欢送一起交流学习。\
微信公众号:DeepNoMind*

本文由 mdnice 多平台公布

退出移动版