摘要
对低功耗数据处理硬件的需求不可阻挡地继续上升。现有的可编程和“通用”解决方案(例如,SIMD,GPGPU)是不够的,这一点从机器学习,计算机视觉和大数据等重要领域的(应用程序和领域特定加速器)的(数量级改进和行业采用)中可以看出。在这两个极端:效率和普遍性之间的鲜明的权衡提出了一个棘手的问题:如果没有特定于领域的硬件解决方案,特定领域硬件的效率如何实现?
在这项工作(在这个问题中),我们依赖结论:“加速”算法具有广泛的共同特性:高阶计算强度高,简单的控制模式和依赖性,以及简单的流存储器(访问和重用)模式。我们定义了一个通用的体系结构(一个软硬件接口),可以更有效地用这些称为流数据流的属性表达程序。该体系结构的数据流组件实现了高度的并发性,而流组件则以非常低的功耗和面积开销实现了通信和协调。本文探讨硬件和软件的影响,描述其详细的微结构,并评估实施。与先进的领域专用加速器(DianNao)和MachSuite的固定功能加速器相比,Softbrain可以和它们的表现差不多而平均功率开销仅为2倍。
1引言
数据处理硬件对全球经济至关重要 - 规模从网络服务和仓库计算,到网络物联网和个人移动设备。随着这些领域的应用需求的不断发展,由于传统VonNeumann架构的能源消耗和表现都不太行,所以通用技术(甚至SIMD和GPGPU)相对于它们面临的需求显得不充足,并逐渐失去关注。
相反,专用和特定域的硬件盛行。对于大规模计算,微软已经在其数据中心部署了Catapult FPGA加速器,而Google的张量处理单元也用于分布式机器学习。物联网设备和现代移动系统芯片(SOCs)已经满载着定制硬件,在这个领域上与公司(如Movidius)继续创新开发计算机视觉专用处理器。
虽然更多狭义硬件解决方案是有效的(Whilemore narrow hardware solutions are effective),但它们提出了许多挑战。随着算法快速的变化,导致硬件必须重新设计和重新验证,加重了开发成本和时间成本。因此如果不使用灵活的硬件,算法的创新将变得更加困难。此外,可编程硬件可以跨应用程序进行时间共享,而特定领域则无法实现,从而使得芯片成本更高。最后,从学术角度来看,很难将领域特定硬件形式化或改进并应用到计算机体系结构的更广泛领域,造成了这些工作的局限性。
理想情况下,我们需要的是能够执行 高性能 数据密集型算法的硬件,其功耗比现有可编程架构低得多,同时保持广泛的适用性和适应性。
一个重要的现象,正如文献[9, 21],中提到的,典型加速的工作量?负载(typically-accelerated workloads)具有共同的特征:1. 高阶计算强度高; 2.具有简单控制流程的小型指令空间,3.简单的内存访问和重用模式。原因很简单:通过利用并发性,这些属性可以帮助他们实现非常高效的硬件实现。现有的数据并行硬件解决方案在这些工作量?负载上表现良好,但是为了追求普遍性,牺牲了太多的效率来取代域特定的硬件。例如,短向量SIMD依靠低效的通用流水线来控制和生成地址,但加速代码通常不具有复杂的控制和内存访问。 GPGPU使用大规模多线程硬件来隐藏内存延迟,但加速代码的内存访问模式通常可以在没有多线程的情况下进行简单的解耦(将关联解除,使系统内各通道相互独立)。
基于这个优势,我们的工作提出了一个加速工作量?负载的架构和执行模型,其硬件实现可以接近专用设计的功耗和面积效率,同时在各个应用领域保持灵活性。由于其组件,它被称为流数据流,并显示出这些基本的性质:
•用于重复流水线计算的数据流图。
•(用于促进跨组件和内存的高效数据移动)的基于流的命令。
•私有(便签本)地址空间,用于有效的数据重用。
图1(a)描述了程序员关于流数据流的视图,包括数据流图本身,以及用于存储器访问读取重用和循环的显式流通信。抽象图推出直观的硬件实现(The abstractions lead to an intuitive hardware implementation);图1(b)显示了我们的高级设计。它由粗粒度可重构体系结构(CGRA)和暂存器组成,与宽总线连接到存储器。它由一个简单的控制核心控制,它发送流命令,由内存控制引擎,暂存器控制引擎和粗粒度可重构体系结构同时执行。这种基于流接口的粗粒度特性使得内核非常简单,而不会牺牲执行时高度并行的特性。流访问模式和有限的内存语义也使高效的地址生成和协调硬件成为可能。
相对于特定于域的体系结构,流式数据流处理器可以重新配置其数据路径和内存流,因此具有更强的通用性和适应性。相对于GPGPU或短向量SIMD等现有解决方案而言,在适合的工作量?(负载)内,功耗和面积开销明显较低。实例可以在各种设置中灵活地部署,既可以作为独立的芯片,也可以作为SoC上的块;它可以与虚拟内存集成,并使用缓存或直接访问内存。
在本文中,我们首先定义流数据流,描述其执行模型,并解释为什么它提供了比现有体系结构更专业化的好处。然后我们在描述我们实现的微体系结构SoftBrain之前讨论ISA和可编程性。为了演示这个架构的通用性和这个实现的能力,我们比较了一个最先进的机器学习加速器,以及MachSuite工作负载的固定功能加速器。我们的评估显示,它可以实现与加速器相当的性能,与CPU相比,数量级和功耗效率都有所提高。与机器学习加速器相比,我们平均只有2×功率和面积开销。在更广泛的MachSuite工作负载中,与定制ASIC相比,平均开销是2倍功率和8倍面积.
2动机和概述(MOTIVATION AND OVERVIEW)
对于广泛的数据处理算法,特定于领域的硬件比起现有的通用解决方案具有数量级的性能和能源优势。根据定义,领域特定的加速器采用的策略是限制编程接口以支持适用于该领域的更加狭义的一组功能(narrowerset of functionality),并且这样做简化了硬件设计并提高了效率。我们进一步推测,特定领域和通用架构之间的效率差距是在于通用程序在指令级的表现,而不是采用的微架构机制的一个方面的基础。
到目前为止,现有的可编程体系结构(例如SIMD,SIMT,Spatial)已经显示出一些希望,但只有在提供硬件/软件接口取得了有限的成功,这些接口使得更多定制设计采用的相同的专用微架构技术成为可能(buthave only had limited success inproviding a hardware/software interface that enables the same specialized microarchitecture techniques that morecustomized designs haveemployed. )。
因此,我们的目标是发现什么样的抽象架构可以使微体系结构与定制设计的执行风格和效率相适应,至少对于具有长时间数据处理阶段和流存储行为的广泛使用和重要的应用来说。(at least for a broad and important class of applications that havelong phases of dataprocessing and streaming memory behavior. )为了深入了解当前体系结构的局限性和机遇,本节将探讨现有可编程硬件范例的专业化机制。然后我们讨论它们的局限性如何激发一套新的架构抽象。总体而言,我们认为我们提出的流式数据流抽象可以作为未来可编程加速器创新的基础。
2.1现有方法的专业化
为了实现可编程硬件专业化,已经探索了几种从基础上就不同的架构范例; 图2描述了突出的例子。我们分三个方面讨论它们的专业化能力:
1.降低每个指令的功耗和资源访问成本,
2.降低内存寻址和通信的成本
3.降低获得高执行资源利用率的成本。
表1提供了一个总结,我们在下面详细讨论。
SIMD和SIMT:SIMD和SIMT都在其ISA中提供了固定长度的向量抽象,这使得微架构能够缓冲指令调度,并使得更少,更宽的存储器访问成为可能。然而,指令级计算的规范意味着它们都不能通过大的寄存器文件来避免指令通信。
另外,这两种架构都不能实现高硬件利用率的廉价支持。由于向量长度固定且相对较短,因此短向量SIMD处理器不断依赖通用内核来动态调度并行指令。缩放问题宽度,重新排序逻辑和注册文件端口在面积和功耗上是昂贵的。 SIMT公开了大规模多线程能力,通过允许同时执行许多warp(一起发布的线程组)来实现高硬件利用率。这需要大的寄存器文件来保存实时状态,warp-scheduling硬件,并且引起来自许多独立warp的缓存压力。
无论SIMT和SIMD有一些特殊的局限性。 SIMD的通过掩蔽和合并控制流的规范引入附加指令的开销。此外,典型的短向量SIMD扩展缺少有效的数据再利用可编程暂存器。 SIMT线程被编程为对标量数据进行操作,并且warp内的线程通常执行用于空间本地访问的冗余地址生成,并且附加的逻辑结合常见的跨线程访问模式。
VectorThreads ([15, 16]):向量线程体系结构与SIMD类似,但是提供了编程能力以指定计算通道的SIMD风格和标量执行。 虽然这的确消除了控制发散处罚,它面临着许多与SIMD相同的限制。 具体来说,由于计算指令级别的规定,无法避免寄存器文件访问,有限的向量长度意味着依靠控制核心的流水线来实现高利用率
空间数据流:空间数据流体系结构通过其硬件/软件接口公开底层计算结构的通信通道。这使得分布式指令调度成为可能,并消除了实时指令之间的寄存器文件访问的需求。调度开销可以通过配置步骤进行一定程度的缓冲。这种抽象方法的分布式特性也使高利用率,无需多线程或者多issue的逻辑。
但是,这些体系结构无法将内存访问专业化到相同的程度。微架构实现通常执行冗余地址生成,并针对空间本地访问发布更多更小的缓存访问。这是因为空间上分布的存储器地址产生和访问是比聚集成向量存储器操作更难的。