本文基于对并行模式的分层架构、数据局部性和控制流的形象,提出了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],咱们的编程模型基于并行模式Map、FlatMap、Fold和HashReduce,抉择这些模式是因为它们最适宜硬件加速。表1介绍了每种模式的概念性例子,显示了同时在四个索引上进行的计算。每个模式都有一个或多个函数和一个形容该模式操作的数值范畴的索引域(index domain) 作为输出。每个模式都有一个输入,并可能读取任意数量的输出汇合。
Map应用函数f
为每个索引创立输入元素,f
的每次执行都被保障是独立的。Map的输入元素的数量与输出迭代域的大小雷同。基于f
读取的汇合数量和每次读取的拜访模式,Map能够获取汇合、规范元素级映射、压缩包、窗口过滤器或其任何组合的行为。
FlatMap应用函数g
为每个索引产生任意数量的元素,其中函数的执行也是独立的。产生的元素被串联成一个扁平输入。有条件数据查问(例如SQL中的WHERE,Haskell或Scala中的filter)是FlatMap的特例,其中g
产生零个或一个元素。
Fold首先充当Map,应用函数f
为每个索引生成单个元素,而后应用关联组合函数r
对这些元素进行约简。
HashReduce应用函数k
和v
别离为每个索引生成哈希键和值。具备雷同对应键的值在执行中被放到单个累加器中,应用同一个关联的组合函数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中的函数f
、g
、k
和v
在其余方面不受限制,这意味着该架构的流水线计算必须是可编程的,以便实现这些函数。
其次,为了利用流水线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多平台公布