ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么是脉动系统

2021-07-16 18:32:43  阅读:170  来源: 互联网

标签:为什么 输出 卷积 系统 脉动 计算 设计 输入


        脉动阵列是一种可以做到每次内存访问进行多次计算的架构,可以在不增加I/O请求的情况下加速边缘计算问题执行。

        高性能、专用计算机系统通常用于满足对通用计算机来说特别繁重的特定的应用需求或者卸载计算等。随着硬件成本和尺寸的持续下降,以及人们对信号和图像处理等领域的处理要求的深入了解,越来越多的专用系统被构建。然而,由于这些系统大多是为特定任务专门建立的,所以这方面的方法工作很少。因为从个人经验中获得的知识既没有积累也没有适当组织,所以同样的错误会重复出现。输入/输出和计算不平衡是一个显著的例子——通常,构建了高速专用设备时会发现I/O接口跟不上设备速度。

        我们将通过提供一个通用的指导方针来帮助纠正这种特别的方法——一种将高级计算映射到硬件结构的通用方法,特别是脉动架构的概念。在脉动系统中,数据以有节奏的方式从计算机内存中流出,在返回内从之前经过许多处理单元,就像血液循环进出心脏一样。该系统就像一条汽车装配线,不同的人在不同的时间在同一辆汽车身上工作,许多汽车同时组装。但装配线总是线形的,但脉动系统有时是二维的。它们可以是矩形、三角形或六边形,以利用更高的并行度。此外,为了实现各种计算,脉动系统中的数据流可能在多个方向上以多种速度流动,包括输入和(部分)结果流,而经典流水线系统中只有结果流。一般来说,脉动系统由于其规律性而易于实现,并且由于其模块化而易于重新配置(以满足各种外部约束)。脉动架构概念是在卡内基梅隆大学开发的,各个版本的脉动处理器正在由几个工业和政府组织设计和制造。这篇文章回顾了系统架构的基本原理,并解释了为什么它能为各种问题带来经济高效、高性能的专用系统解决方案。

简单规则的设计:

        在设计特殊用途系统时,成本效益一直是首要考虑的问题;它们的成本必须足够低才能证明其有限的适用性。成本可分为非经常性(设计)成本和经常性(器件)成本。由于集成电路技术的进步,器件成本正在迅速下降,但这一优势同样适用于专用和通用系统。此外,由于专用系统很少大量生产所以器件成本没有设计成本重要。因此,专用系统的设计成本必须相对较小,才能比通用方法更具吸引力。

        幸运的是,特殊用途的设计成本可以通过使用合适的架构来降低。如果一个结构可以分解成几个简单的子结构或构造块,用简单的接口重复使用,就可以节省很多资源。对于单芯片包含数十万个单元的超大规模集成电路设计来说尤其如此。为了应对这种复杂性,与构建大型软件系统中使用的一些技术类似的简单而规则的设计是必不可少的。此外,基于简单、常规设计的专用系统很可能是模块化的,因此可以根据各种性能目标进行调整,也就是说,系统成本可以与所需的性能成比例。这表明,简单、规则的设计架构可以满足具有成本效益的专用系统。

并发和通信:

        基本上有两种方法来建立一个快速的计算机系统。一是使用快速器件,二是使用并发。过去的十年里,计算机组件的成本和尺寸大幅下降,速度却在不断提高。以目前的技术,单个芯片可以放入数万个门,但没有一个门比10年前的TTL快多少。技术趋势表明组件速度的增长率在下降,所以计算速度的任何重大改进都将来自于许多处理单元的并发使用。专用系统中的并发程度很大程度上取决于底层算法。如果算法被设计成引入高度流水线和多处理,则可以实现大规模并行。当大量处理元件同时工作时,协调和通信变得非常重要,特别是在超大规模集成电路技术中,路由成本决定了实现计算所需的功率、时间和面积。这里的问题是设计支持高并发度的算法,同时只使用简单、常规的通信和控制来实现高效运算。

计算和I/O的平衡:

        由于专用系统通常通过与之连接的主机接收数据并输出结果,因此I/O会影响整体性能。(这里的主机可以指计算机、存储器、实时设备等。实际上,专用系统可以从一个“物理”主机输入,然后输出到另一个主机。)专用系统的最终性能目标是平衡主机可用I/O带宽的计算速率。由于对复杂系统中可用I/O带宽的精确先验估计通常是不可能的,因此专用系统的设计应该是模块化的,以便其结构可以很容易地进行调整,以匹配各种输入/输出带宽。

        假设主机和专用系统之间的输入/输出带宽为每秒1000万字节,对于目前的技术来说,这是一个相当高的带宽。假设每次操作至少有两个字节从主机读取或写入主机,无论专用系统的运行速度有多快,最大速率都将仅为每秒500万次操作(见图1)。只有在每次I/O访问执行多个计算时,吞吐量才有可能大幅提高。然而,数据项的重复使用要求它在系统中存储足够长的时间。因此,I/O问题不仅与可用的I/O出带宽有关,还与系统内部的可用内存有关。接下来的问题是如何将计算与适当的内存结构安排在一起,以便计算时间与I/O时间相平衡。

         当在小型专用系统上执行大型计算时,输入/输出问题变得尤为严重。在这种情况下,必须分解计算。一次执行一个子计算可能需要大量的输入/输出来存储或检索中间结果。例如,考虑用S点设备做n点FFT且n>S的情况,图2描述了n点FFT计算和n = 16、S= 4的分解方案。请注意,每个子计算块都足够小,因此可以由4点设备处理。在执行过程中,一个块的结果必须临时发送到主机,并在以后检索,以便在其他块的结果可用时与它们组合。使用图2b所示的分解方案,I/O操作的总数是O(n log n/log S)。事实上,已知,要用一个O(S)存储器设备执行n点FFT,任何分解方案至少需要这么多的输入/输出操作。因此,对于n点FFT问题,S点设备在传统的O(n log n)软件实现时间内不能获得超过O(log S)的加速比,并且由于这是I/O考虑的结果,所以这个上限与设备速度无关。对于排序和矩阵乘法等其他计算,设备可实现的加速比也建立了类似的上限。了解I/O产生的性能限制有助于防止专用设备设计中的过度消耗。

         因此,如何分解计算以最小化输入/输出;输入/输出需求是如何系统的大小及其内存相关联;输入/输出带宽如何限制系统可实现的加速比等都给系统架构师提出了另一组挑战。

脉动结构:基本原理

        作为对上述挑战的解决方案,我们引入了脉动架构,这是最初为某些矩阵运算的VLSI(大规模集成电路)实现而提出的架构概念。下一节将介绍脉动架构的示例,其中包含卷积计算的一系列设计。

        脉动系统由一组相互连接的基本运算元组成,每个基本运算元都能够进行一些简单的操作。因为简单、规则的通信和控制结构在设计和实现上比复杂的通信和控制结构具有显著的优势,脉动系统中的运算元通常相互连接以形成脉动阵列或脉动树。脉动系统中的信息以流水线方式在运算元间流动,与外界的交流只发生在“边界运算元”上。例如,在脉动阵列中,只有阵列边界上的那些单元可以是系统的输入/输出端口。计算任务在概念上可以分为两类——计算限制型计算和I/O限制型计算。在计算中,如果计算操作的总数大于输入和输出元素的总数,则计算是受计算限制的,否则是受I/O限制的。例如,普通的矩阵乘法就是一个计算限制型的计算任务,因为一个矩阵中的每个行(列)都要与另一个矩阵的每一列(行)相乘。另一方面,将两个矩阵相加是I/O受限型的,因为相加结果的总数小于两个矩阵中的元素总数。应该清楚的是,任何加速输入/输出计算的尝试都必须依赖于内存带宽的增加。可以通过使用快速组件(可能很贵)或交错存储器(可能会产生复杂的内存管理问题)来增加内存带宽。然而,加速计算限制型的计算通常可以以相对简单和廉价的方式完成,即通过脉动系统的方法。

        脉动架构的基本原理,特别是脉动阵列,如图1所示。通过将单个PE替换为PE阵列或者本文术语中的运算元(cell),可以在不增加内存带宽的情况下实现更高的计算吞吐量。图中的存储器类似于心脏的功能,就像心脏将血液泵入身体一样,它将数据流泵入(pulses)运算元阵列。这种方法的关键是确保数据项一旦从存储器中取出,就可以在它经过的每个单元中有效地使用,同时沿着阵列从一个单元“泵”到另一个单元。这对于大量的计算限制型计算是可能的,以数据复用的方式对每个数据项执行多个操作。

        能够多次使用每个输入数据项(从而仅用适度的内存带宽实现高计算吞吐量)只是脉动方法的众多优势之一。其他优势,例如模块化的可扩展性、简单和规则的数据和控制流、简单和统一单元的使用、全局广播的消、扇入和快速响应时间将在下一节的各种脉动设计中说明。

卷积计算的脉动结构设计

        为了提供各种脉动结构的具体例子,本节介绍了卷积问题的一系列脉动设计,定义如下:

        给定:             权重序列 

                                输入序列 

                                计算结果序列              

        定义:             运算规则 

         我们考虑卷积问题是因为它是一个有各种启发性脉动解的简单问题,因为它本身就是一个重要的问题,它代表了适合脉动设计的一大类计算。卷积问题可以看作是将两个数据流wi和xi以某种方式(例如,在上面的等式中)组合起来形成数据流yi的问题。这种类型的计算对于许多算法是常见的,例如滤波、模式匹配、相关、插值、多项式求解(包括离散傅立叶变换)以及多项式乘法和除法。例如,如果乘法和加法分别被解释为比较和布尔加法,那么卷积问题就变成了模式匹配问题。卷积问题的体系结构概念因此也可以应用于其他问题。

        卷积计算问题是计算限制型的,因为每个输入都要乘以k个权重。如果每次乘法的输入xi都与内存分开,那么当k较大时,内存带宽就会成为瓶颈,而无法实现高性能计算。如前所述,脉动系结构通过多次使用从内存中提取的每个元素来解决这个I/O瓶颈。基于这一原理,下面描述几种用于解决卷积问题的脉动设计。为简单起见,所有设计都假设k= 3。

全局数据广播的(半)脉动卷积阵列

        如果一个xi一旦从内从中取出就被广播到所有的计算元中,然后所有的计算元就可以同时使用xi。这种广播技术可能是复用每个输入元素的最明显的方法之一。与广播相对的扇入可以用来收集许多运算元的数据。扇入技术也可以直接用于解决I/O瓶颈问题。下面,我们描述利用广播和扇入的脉动设计。注意:接下来的红色部分属于个人理解,原文在各部分后面。

设计脉动阵列B1---输入广播、结果移动,权重保持。

        脉动阵列和它的计算元如图3所示。权重被预加载到计算元中,每个计算元一个权重,并在整个计算过程中保持不变。每个计算元的本时刻计算结果将在下一时刻作为yin流到下一个计算元中。在循环开始时y0被预置为卷积计算的偏置(bias)且在以后的周期保持不变,y1、y2、y3被初始化为0。下面列举四个时钟周期里各个计算元的输入输出情况。可以看出,在y3处可以取得序列xi和wi的卷积序列yi。

图三

原文内容:

原文

设计脉动阵列B2---输入广播、权重移动、结果保持。

        脉动阵列和它的计算元如图4所示。输入广播到每个计算元,权重预置在网络中,输出初始化为0。时钟到来时每个计算元将各自的计算结果保留,将权重输出,这样权重就可以在网络中随时钟节拍流动。权重w1附带一个累加器清零标志,计算元发现权重为w1时需要先将本身累加器清零后进行运算。下面列举四个时钟周期里各个计算元的输入输出情况。可以看出这种设计需要另外的总线设计从各个计算元中取出卷积结果,但是B1设计则不需要。

图4

 原文内容:

 

设计F---结果扇入、输入移动、权重保持

        阵列和它的计算元如图5所示。输入随时钟节拍在网络中从左向右移动,权重预置在网络中,运算元计算结果扇入加法器,最后由加法器输出卷积结果。这是一种我们较为熟悉的结构,其主要的时延由加法器产生,在设计时可以考虑用流水线加法器树,以避免每个周期中太大的延迟。

 原文内容:

 没有全局数据通信的脉动卷积阵列

        尽管全局广播或扇入结构解决了I/O瓶颈问题,但以模块化、可扩展的方式实现它会带来另一个问题。在每个周期中,向(从)脉动阵列的所有单元提供(收集)数据项需要使用总线或某种树状网络。随着运算元数量的增加,总线或树形结构变长;在不降低系统时钟的情况下,很难通过扩展这种非本地通信的方式来满足不断增加的负载。扩展全局网络在芯片、电路板和计算机系统设计层面带来的难度都很大。幸运的是,如下所述,没有全局数据通信的收缩卷积阵列确实存在。理论上来说,这些阵列可以扩展到包括任意大量的计算元,而不会遇到上述工程困难(大脉动阵列的同步问题将在后面讨论)。

设计RI---结果保持、输入和权重反向流动

        阵列和它的计算元如图6所示。相邻两个输入之间间隔一个时钟周期,相邻两个权重之间也间隔一个时钟周期,输入和权重反向流动。同R2设计一样,w1也带有计算前累加器清零标志。下面给出七个周期内各个计算元的输入输出情况(图中没有明确画出权重的循环情况,但读者应该清楚这里的权重是循环流动的)。

图六

         这种设计的优点是,它不需要总线或任何其他全局网络来收集来自单元的输出;脉动输出路径在图6中用虚线箭头表示就足够了。因为连续的信号被两个周期很好地分开,不止一个信号同时到达脉动输出路径上的一个锁存器的冲突不会发生。也很容易就可以看出yi将以自然顺序(y1, y2,.... )从脉动输出路径输出该设计的基本思想,包括脉动输出路径的基本思想,已被用于实现模式匹配芯片。

        请注意,在图6中,任何时候都只有大约一半的单元在做有用的工作。为了充分利用潜在的吞吐量,两个独立的卷积计算可以在同一个脉动阵列中交织,但是阵列中的单元必须稍微修改以支持交织计算。例如,每个单元需要一个额外的累加器来保存其他卷积计算的临时结果。

原文内容:

 ​​​​

 设计R2---结果保持,输入和权重以相同的方向移动,但速度不同。

        R2设计的一个如图7所示。在这种情况下,x和w数据流都从左向右移动,但是xi的速度是wi的两倍。更准确地说,每一个运算元内的每一个wi都要经过一个额外的循环,因此在阵列中移动的时间是xi的两倍。在这种设计中,可以有效地使用乘-累加器硬件,并且也是通过标志位的方法控制累加器输出。与设计R1相比,这种设计的优势在于,当执行单次卷积时,所有单元始终工作,但它需要每个单元中有一个额外的寄存器来保存w值。该算法已用于实现流水线乘法器。

        有一种双重设计的R2,可以让wi和xi移动速度一样快。为了给x数据流造成延迟,这种双重设计要求每个单元中有一个寄存器来存储x值,而不是w值。在wi比xi位宽的情况下,这种结构更具有优势。同样给出四个周期内的yi输出情况。(这里有一点不明白为什么要差速,我让w和x相同速度流动,也可以得到正确结果,我分析可能是由于w=win;wout=w的原因,如果改成w=win;wout=win;应该就可以同速度流动了。)

 原文内容:

 设计W1---权重保持、输入和结果反向流动

         在设计中,权重在每个计算元中保持不懂,输入和结果随时钟节拍流动,这种设计不是为了最有效的使用乘-累加器,但对于一些情况它却更有用,因为有可能是相同的一组权重用于计算不同的输出而不同的输入计算不同的输出。我们将在图8所示的脉动阵列中看到这种结构的一些优点,这是一种脉动滤波阵列的特殊情况。这是一种基本的设计,可以自然的扩展到递归滤波和多项式除法。

         同R1设计相同,xi和yi的相邻两个数据间隔一个时钟周期,需要注意的是,因为移动yi的脉动路径已经存在,不需要像设计RI和R2那样的另一种脉动输出路径。此外,yi是循环流动的。这种设计具有恒定的响应时间。然而,这种设计与R1具有相同的缺点,那就是,只有大约一半的计算单元工作,除非两个独立的卷积计算在同一阵列中交织。(就想文中书的那样,这种设计适合滤波器结构(权重保持不变,就好像滤波器系数一样),不太适合卷积运算,这里不做深入讨论)。

原文内容:

 

设计W2-权重保持不变,输入和结果以相同的方向但不同的速度移动

        W2如图9所示,所有单元一直工作,但它失去了设计W 1的一个优势,即恒定的响应时间。yi的输出在其最后一个输入开始进入脉动阵列的最左侧单元后k个周期发生。这种设计已经扩展到实现二维卷积,其中高吞吐量但不能快速响应是最大的问题。与设计R1相似,设计W2有一个双重版,xi的速度是yi的两倍。(下面这幅图是我自己对w2设计的理解,这种结构给人一种美感,就像原文中说的那样,它已经被用来实现二维卷积计算。)

 

 原文内容:

 

         至此总共介绍了《Why Systolic Architectures?》一文中的七种脉动卷积结构,各种结构各有优劣,在加速结构选取时需要根据实际项目需求而定,原文的后半部分时总结性论述,这里不再逐句翻译和理解,但其内容对于加速结构选取具有十分的意义,绝对值得一读。最后感叹一句,外国人就是厉害,1982年就把这玩意整的明明白白,我用了四天时间才推演和读懂文中内容,实在令人思绪万千,接下来就可以根据一维卷积结构构建高维脉动卷积阵列了。要是看到最后还没有要打赏的冲动,你还是人吗????

标签:为什么,输出,卷积,系统,脉动,计算,设计,输入
来源: https://blog.csdn.net/qq_38961780/article/details/118720532

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有