用于根据高级程序进行脉动阵列设计的系统及方法与流程

文档序号:15934189发布日期:2018-11-14 02:07阅读:266来源:国知局

本公开涉及用于在诸如现场可编程门阵列(fpga)的可重配置处理平台上进行脉动阵列设计和实现的自动化系统和方法。

背景和概述

卷积神经网络(cnn)是在深度学习应用中常用的计算结构,包括图像/视频分类和分析、自然语言理解和自主式车辆或机器人控制系统。许多这些实现都是在使用脉动阵列计算架构的fpga上实现的。然而,使脉动阵列架构适于在大规模cnn实现中起作用是具有挑战性的设计问题,这需要考虑计算和通信两方面。因此,存在了对使自动化设计流程能够在合适的计算设备上实现高效的脉动阵列架构的方法的需要。

在一个实施例中,支持卷积神经网络(cnn)的脉动阵列可以包括以行和列排列的可重配置处理元件的二维阵列,其中每个处理元件具有相关联的simd向量并且通过本地连接连接到至少一个其他处理元件。具有双缓冲器的输入特征映射缓冲器可以用于存储输入特征映射。互连系统可以将数据传递到相邻的处理元件(例如在处理元件调度器中使用),并且使用被配置为确定合适的可重配置处理元件参数的自动化系统来将cnn计算映射到可重配置处理元件的二维阵列上。

在另一个实施例中,用于定义具有细粒度数据重用的计算系统的方法包括定义迭代器向量,该迭代器向量列出在循环嵌套中从最外循环到内循环的循环迭代器。定义循环迭代器的范围的迭代域d被设置,并且访问函数计算如何将循环迭代器映射到阵列r的访问索引,其中间循环l上的每个阵列r要求在不同循环l迭代中的阵列r上访问的数据是相同的。

在另一个实施例中,用于定义计算系统的方法包括找到用于用作机器学习系统的嵌套循环的一组可行的脉动阵列配置。鉴于可行的脉动阵列配置,确定多个中间循环的各个边界以提高设计吞吐量依赖于至少部分地基于dsp和bram利用来修剪可行的脉动阵列配置候选者。

附图说明

参考以下附图描述了本公开的非限制性和非穷尽的实施例,其中,除非以其它方式说明,在所有各个附图中相似的参考数字指代相似的部分。

图1是描绘由cnn计算映射生成的脉动架构的实施例的框图。

图2是描绘由cnn计算映射生成的脉动阵列架构的实施例的框图。

图3是描绘在脉动阵列中使用的处理元件的实施例的框图。

图4是描绘在脉动阵列中使用的输入特征映射缓冲器的实施例的框图。

图5是描绘与脉动阵列的实施例相关联的周期级调度的框图。

图6是描绘与脉动阵列的实施例相关联的周期级调度的示例的示意图。

图7是描绘被用作与脉动阵列的实施例相关联的循环分块(tiling)表示的基础的一组嵌套循环的示意图。

图8是描绘包括循环分块的脉动阵列的实施例的框图。

图9是描绘用于定义计算系统进行机器学习的方法的实施例的流程图。

图10是描绘用于定义具有细粒度数据重用的计算系统进行机器学习的方法的实施例的流程图。

图11是描绘用于定义用于机器学习的计算系统的方法的实施例的流程图。

图12是描绘服务器中的主机/加速器模型的实施例的框图。

图13是描绘嵌入式系统的实施例的框图。

详细描述

本文描述的系统和方法使得能够设计和实现使用脉动阵列架构的神经网络、卷积神经网络(cnn)、递归神经网络以及其他机器学习计算系统。该过程可以包括接收用于机器学习的计算系统的模型,执行用于该模型的各种过程和参数设置,并且生成适用于在诸如fpga的可重配置计算平台上实现的脉动阵列架构。一些实施例可以改进诸如系统吞吐量的性能参数并且包括诸如数据重用的特征。

图1是描绘由cnn计算映射生成的脉动阵列架构100的实施例的框图。在一些实施例中,由本文描述的系统和方法生成的cnn计算映射112被用于实现经由映射114映射到合适的计算设备的脉动阵列102。在特定实施例中,映射114可以被实现为由诸如c或c++的高级程序到用于fpga的比特流。

在一些实施例中,脉动阵列102可以包括处理元件阵列104。处理元件阵列104可以包括如本文所讨论的多个处理元件的二维阵列(也称为处理元件并且缩写为pe)。在一些实施例中,处理元件可以包括可重配置处理器块,包括但不限于数字信号处理器(dsp)块。在特定实施例中,每个dsp块可以在其架构中包括单指令多数据(simd)向量。在其他实施例中,处理元件可被配置为实现包括加法、减法、乘法和除法的数学运算,并且处理元件可以包括查找表。

在一些实施例中,脉动阵列102可以包括输入特征映射缓冲器106和输出特征映射缓冲器108,其中输入特征映射缓冲器106被配置为从数据源116读取数据并将该数据传输到处理元件阵列104,并且输出特征映射缓冲器108被配置为从处理元件阵列104读取数据并将该数据传输到数据接收器(datasink)118。在一些实施例中,数据源116可以包括模数转换器、存储器单元(例如,ram或rom)、数字成像设备等的任意组合。在特定实施例中,来自数据源116的输入数据可以是数字图像数据。在一些实施例中,数据接收器118可以包括存储器单元、显示驱动器等的任何组合。在本文中提供了关于输入特征映射缓冲器106和输出特征映射缓冲器108的细节。

脉动阵列架构100的一些实施例可以包括处理元件调度器110,其被配置为基于指定的定时协议使得能够在包括处理元件阵列104的各个处理元件之间传递数据。在本文中描述了处理元件调度器110的细节。

在一些实施例中,cnn计算或cnn架构可以用诸如c或c++的高级程序定义。该定义通过本文描述的过程转换成fpga比特流。

cnn架构的一些实施例涉及卷积运算,其特征在于涉及乘法和加法运算的多个嵌套循环。本公开提出了允许在设计的脉动阵列架构中实现并行性以设计高效计算架构的方法。

图2是描绘由cnn计算映射生成的脉动阵列架构200的实施例的框图。在一些实施例中,脉动阵列架构200包括处理元件的二维阵列(也称为处理元件并且缩写为pe)。图2描绘了处理元件的二维阵列:处理元件220、处理元件222、处理元件224、处理元件226、处理元件230、处理元件232、处理元件234、处理元件236、处理元件240、处理元件242、处理元件244、处理元件246、处理元件250、处理元件252、处理元件254和处理元件256。在由处理元件220至处理元件256组成的二维阵列中,处理元件220至处理元件256经由互连系统互连,该互连系统允许处理元件根据由处理元件调度器(诸如处理元件调度器110)实现的定时协议来将数据传递至相邻处理元件或从相邻处理元件接收数据。例如,图2示出了处理元件220和处理元件230之间的双向互连264。另一方面,处理元件220只能通过相关联的单向数据链路将数据发送到处理元件222。

在一些实施例中,处理元件220至处理元件256中的每一个包括dsp块或由多个dsp块组成的向量处理器。在其他实施例中,处理元件220至处理元件256中的每一个可以被配置为实现包括加法、减法、乘法和除法的数学运算,并且处理元件220至处理元件256可以包括查找表或一些其他计算块。在另外的其他实施例中,处理元件220至处理元件256的组合可以包括dsp块和查找表的某种组合。

在一些实施例中,与处理元件220至处理元件256的二维阵列相关联的2-d拓扑与fpga布局中的2-d结构相匹配,使得可以由于低路由复杂性而实现相关联的定时约束。在一些实施例中,由处理元件220至处理元件256中的每一个向处理元件的这个二维阵列添加第三维,处理元件中的每一个具有被配置为执行向量累积运算的相关联的simd向量。在一些实施例中,由于现代fpga中的专用dsp间累积互连,simd向量的并行化因子是2的幂。这种架构能够解决cnn实现中大规模并行化的定时问题。虽然图2描绘了处理元件的4×4阵列作为说明,但是,如本文所述的,该概念可以被扩展以与数千个处理元件和相关联的支持的组件一起工作。

图2还描绘了输入缓冲器202、输入缓冲器204、输入缓冲器206和输入缓冲器208。输入缓冲器202至输入缓冲器208各自被配置为从诸如数据源116的数据源读取数据。输入缓冲器202至输入缓冲器208中的每一个也可以被称为输入特征映射缓冲器。在一些实施例中,如图2所示,输入缓冲器202经由输入线258从数据源读取数据,并且经由单向数据链路顺序地将数据发送到输入缓冲器204等等。在特定实施例中,传送数据的排序由诸如处理元件调度器110的处理元件调度器来确定。输入缓冲器202、输入缓冲器204、输入缓冲器206和输入缓冲器208中的每一个经由唯一的单向互连分别向处理元件220、处理元件222、处理元件224和处理元件228发送数据。

在一些实施例中,脉动阵列架构200包括权重缓冲器218、权重缓冲器228、权重缓冲器238和权重缓冲器248,其中每一个权重缓冲器被配置为将与cnn相关联的权重数据分别传输到处理元件220、处理元件230、处理元件240和处理元件250。在特定实施例中,权重缓冲器218经由权重线262读取权重数据,并且将该权重数据顺序地发送到权重缓冲器228等等。权重数据还从权重缓冲器218至权重缓冲器248中的每一个分别传输到相应连接的处理元件220至处理元件250。

在一些实施例中,处理元件220、处理元件222、处理元件224和处理元件226中的每一个均分别连接(耦合)到输出缓冲器210、输出缓冲器212、输出缓冲器214和输出缓冲器216。输出缓冲器210至输出缓冲器216各自被配置为接收来自处理元件220至处理元件226的数据,并经由输出线260将数据发送出去。输出缓冲器210至输出缓冲器216中的每一个也可以被称为输出特征映射缓冲器。如图2所示,输出缓冲器216经由单向数据链路将数据发送到输出缓冲器214等等,其中输出缓冲器210通过输出线260将数据发送出去。脉动阵列架构200中的所有数据流都由处理元件调度器(诸如处理元件调度器110)进行排序。

如图2所示,与脉动阵列架构200相关联的全局且大型扇出互连被分成在相邻pe之间的本地互连。此外,任何输入/输出数据都可以移入/移出pe阵列以及相邻的pe之间,使得多路复用被消除。借助本地短的对等互连,即使在大规模并行化的情况下以及当扩展到包括一千多个pe时,脉动阵列架构200也可以实现高频率。

在脉动阵列架构200的操作期间,pe每周期在垂直方向上将输入数据传递给相邻的pe并且在水平方向上将权重数据传递给相邻的pe,并且其还累积输入数据和权重数据的乘数。如图2所示,输出特征映射数据当它们在多轮累积之后准备就绪时还使用pe之间的双向互连特征跨pe阵列移出。输入缓冲器202至输入缓冲器208中的每一个包含双缓冲器——一个缓冲器用于存储从外部存储器提取的数据,以及另一个缓冲器用于将数据馈送到pe中。

在双缓冲器实施例中,所有输入特征映射数据都可以在水平方向上跨输入缓冲器202至输入缓冲器208移位,而输入缓冲器将通过本文描述的过滤器选择性地存储属于pe的对应列的数据。类似的双缓冲器结构被应用于权重缓冲器218至权重缓冲器248和输出缓冲器210至输出缓冲器216中的每一个。

在一些实施例中,图2中所示的本地互连可以包括通常与脉动阵列执行相关的常用特征。首先,pe的计算所需的数据必须从pe边界并跨多个pe进行转移。由于只有边界pe具有对输入数据的访问,因此需要在pe的每行和列之间数据重用。更重要的是,脉动阵列以定期和同步方式运行,使得在每个相邻pe之间执行细粒度的流水线操作。借助于这些特征,pe执行的合适调度对于脉动阵列设计是必不可少的,特别是不同方向上关于每个pe的数据的同步。该功能由处理元件调度器110执行。

图3是描绘在脉动阵列中使用的处理元件300的实施例的框图。在一些实施例中,处理元件300接收三个输入:输入a_in322、输入b_in328和输入c_in324。输入a_in322是水平输入,而输入b_in328是垂直输入。在一些实施例中,输入a_in322是从权重缓冲器或从与处理元件300同一行中的相邻pe接收的权重输入。在特定实施例中,输入b_in328是从输入缓冲器或从与处理元件300同一列中的相邻pe接收的数据输入。输入c_in324是与处理元件300相关联的输出数据的初始值。

在一些实施例中,输入a_in322被处理元件300读取到a寄存器304中。寄存器304还产生输出a_out332。输出a_out332是由权重数据组成的、被传输到与处理元件300同一行中的pe的水平输出。在一些实施例中,输入b_in328被处理元件读取到b寄存器306中。b寄存器306产生输出b_out326。输出b_out326是由输入数据组成的、被传输到与处理元件300同一列中的pe的垂直输出。在一些实施例中,多个权重数据元素和输入数据元素每周期经由并行通道移入和移出每个pe。这种数据移位的并行化因子是与脉动阵列相关联的微架构模板中的参数。

在一些实施例中,a寄存器304中的每个数据样本数据经由乘法器308、乘法器310至乘法器312与b寄存器306中的相应数据样本成对地相乘。实质上,a寄存器304中的每个权重数据样本乘以b寄存器306中的输入数据样本。在一些实施例中,由乘法器308至乘法器312执行的每次乘法是simd乘法。来自乘法器308至乘法器312的乘法结果由加法器314、保存由加法器314输出的结果的寄存器316和c循环累加移位寄存器318的组合来累加。在一些实施例中,c循环累加移位寄存器318每周期轮换以将来自加法器314的输出(也被称为加法器树)累加到不同的数据元素中,并且每个数据元素轮换以累加若干次。每个数据元素的轮换数由在算法中需要求和多少个数据样本确定,并且也是与脉动阵列相关联的微架构模板中的参数。一旦数据元素在c循环累加移位寄存器318中准备就绪,它们就移出到c输出移位寄存器组320中。最后,c输出移位寄存器组320中的所有数据元素经由输出通道c_out330移出pe到达底部相邻pe。实质上,输入c_in324是与输出通道330相关联的数据的初始值,并且在以交织方式在pe内部进行累积之后,更新的数据经由输出通道c_out330被发出到其相邻pe,并且最终移出到脉动阵列之外以形成最终输出。

图4是描绘在脉动阵列中使用的输入特征映射缓冲器400的实施例的框图。在一些实施例中,输入特征映射缓冲器400(也称为输入缓冲器)包括寄存器410,其被配置为接收和存储来自输入线412(其可以类似于输入线258)或者来自如图2中所描绘的相邻输入缓冲器的输入。寄存器410的输出被过滤器408接收,过滤器408被配置为选择性地存储被指定用于与输入特征映射缓冲器400相关联的一列pe的数据。过滤器408经由输出线414将不与该列pe相关联的数据传递到相邻的输入特征映射缓冲器。

在一些实施例中,旨在用于与输入特征映射缓冲器400相关联的一列pe的数据经由缓冲器0404和缓冲器1406被双缓冲,其中的每一个缓冲器被配置为从过滤器408接收数据。在一些实施例中,在第一数据周期中,缓冲器0404被配置为存储从与脉动阵列相关联的外部存储器提取的数据,而缓冲器1406被配置为将数据馈送到相邻的pe中。接下来,在第二数据周期中,缓冲器0404被配置为将数据馈送到相邻的pe中,而缓冲器1406被配置为存储从外部存储器提取的数据。输入特征缓冲器映射400的操作以这种方式在第一数据周期和第二数据周期之间交替。在一些实施例中,缓冲器0404和缓冲器1406中的每一个由缓冲器段的阵列组成,其中每个缓冲器段经由本地连接耦合到相邻缓冲器段。在特定实施例中,诸如权重缓冲器218的权重缓冲器的架构和诸如输出缓冲器210的输出缓冲器的架构具有与输入特征映射缓冲器400类似的双缓冲配置和相关联操作。

图5是描绘与脉动阵列500的实施例相关联的周期级调度的框图。在一些实施例中,脉动阵列500包括二维3×3阵列,其包括处理元件pe00502、处理元件pe01504、处理元件pe02506、处理元件pe10508、处理元件pe11510、处理元件pe12512、处理元件pe20514、处理元件pe21516以及处理元件pe22518。图5还描绘了脉动阵列500读入输入数据和权重数据。在一些实施例中,输入数据样本和权重数据样本被顺序地按时钟输入到各个处理元件中。

图5描绘了包括权重数据样本w0[0]、w0[1]和w0[2]的第一权重数据序列526。第一权重数据序列526顺序地按时钟输入到包括处理元件pe00502、处理元件pe01504和处理元件pe02506的脉动阵列500的第一行中。在此,术语wx[y]表示在阵列(矢量)索引y处按时钟输入到脉动阵列500的第x行中的权重数据序列。类似地,包括权重数据样本w1[0]、w1[1]和w1[2]的第二权重数据序列528顺序地按时钟输入到包括处理元件pe10508、处理元件pe11510和处理元件pe12512的脉动阵列500的第二行中。重要的是要注意,处理元件调度器(图5中未示出)使数据转移同步,使得与第一权重数据序列526相比,第二权重数据序列528延迟了一个时钟周期。在3×3脉动阵列500中,包括权重数据样本w2[0]、w2[1]和w2[2]的第三权重数据序列530被顺序地按时钟输入到包括处理元件pe20514、处理元件pe21516和处理元件pe22518的脉动阵列500的第三行中。处理元件调度器使数据转移同步,使得与第二权重数据序列528相比,第三权重数据序列530延迟一个时钟周期。

图5描绘了包括输入数据样本in0[0]、in1[0]和in2[0]的第一输入数据序列520。第一输入数据序列520顺序地按时钟输入到包括处理元件pe00502、处理元件pe10508和处理元件pe20514的脉动阵列500的第一列中。此处,术语inx[y]表示在阵列(矢量)索引x处被按时钟输入到脉动阵列500的第y列中的输入数据序列。类似地,包括输入数据样本in0[1]、in1[1]和in2[1]的第二输入数据序列522被顺序地按时钟输入到包括处理元件pe01504、处理元件pe11510和处理元件pe21516的脉动阵列500的第二列中。处理元件调度器使数据转移同步,使得与第一输入数据序列520相比,第二输入数据序列522延迟一个时钟周期。在3×3脉动阵列500中,包括输入数据样本in0[2]、in1[2]和in2[2]的第三输入数据序列524被顺序地按时钟输入到包括处理元件pe02506、处理元件pe12512和处理元件pe22518的脉动阵列500的第三列中。处理元件调度器使数据转移同步,使得与第二输入数据序列522相比,第三输入数据序列524延迟一个时钟周期。本文提供了关于如何通过脉动阵列500处理数据的细节。

图6是描绘与脉动阵列的实施例相关联的周期级调度600的示例的示意图。图6描绘了如何通过脉动阵列500处理在图5中描绘的权重数据样本和输入数据样本。图5描绘了示出时间索引0、1到t的时间轴604以及处理元件轴602,该处理元件轴602示出处理元件pe00502、处理元件pe01504、处理元件pe10508、处理元件pe20514,以此类推直到处理元件pxy。(图5示出3×3处理元件脉动阵列;pxy是用于表示任何数量的处理元件索引的广义处理元件名称。)在时间轴604上的周期t处,w(权重数据样本)和in(输入数据样本)的乘积累加在out(输出数据样本)上。最初,在初始步骤(时间轴604上的索引0)处,处理元件pe00502执行simd乘法w0[0]*in[0]。该乘法的结果用于更新存储在输出寄存器中的先前的部分累加结果。在该初始步骤期间,所有其他处理元件(例如,处理元件pe11510)在它们等待权重数据样本和输入数据样本的同时停止。在时间轴604上的索引1处,与处理元件pe00502相关联的权重数据(即,w0[0])被传递到处理元件pe01504(由箭头608示出),而与处理元件pe00502相关联的输入数据(即,in[0])被传递到处理元件pe10508(该数据传递未在图6中示出)。处理元件pe01504和处理元件pe10508现在可以开始处理数据。具体而言,处理元件pe01504执行运算w0[0]*in1[0],而处理元件pe10508执行运算w1[0]*in0[0]。另一方面,处理元件pe00502能够处理新的权重数据样本和新的输入数据样本,执行运算w0[1]*in0[1]。在时间轴604上的索引2处,与处理元件pe10508相关联的输入数据(即,in0[0])被传递到处理元件pe20514,该处理元件pe20514还接收权重数据w2[0]以执行运算w2[0]*in0[0]。这由箭头606示出。在该时间索引处,处理元件pe10508执行运算w1[1]*in0[1],处理元件pe01504执行运算w0[1]*in1[1],并且处理元件pe00502执行运算w0[2]*in0[2]。所有的数据移位和相关联的计算都基于这样的周期级调度来执行。对于图5所示的处理元件的3×3阵列,从处理元件pe00502开始,随着每个时钟周期,随后的处理元件从停止状态移动到活动状态。在5个周期之后,所有处理元件将是活动的并且同步地从先前的邻居处理元件读取数据,执行计算并且在每个周期中将数据传递到相邻的处理元件。在处理元件内的累加结束之后,相关联的移位寄存器中的out数据在垂直(列)处理元件上移位以存储在诸如输出缓冲器210的输出缓冲器中。

图7是描绘用作与脉动阵列的实施例相关联的循环分块表示的基础的一组嵌套循环700的示意图。在一些实施例中,一组嵌套循环700包括原始循环体708,该原始循环体708包括一组外部循环(l0-ln)702、一组中间循环(s0-sn)704和一组内部循环(t0-t2)706。在一些实施例中,循环分块表示建立了脉动阵列架构与原始高级程序代码之间的链接。中间表示中的分块循环包含对脉动阵列的各种架构考量,包括pe阵列映射、pe阵列形状和数据重用策略。

在一些实施例中,在下面的意义上,一组嵌套循环700被映射到与脉动阵列相关联的循环分块架构。假定每个数据块独立于脉动阵列中的另一个数据块进行处理,则每个数据块对应于外部循环(l0-ln)702的迭代。在一些实施例中,数据块是图像数据块。由于数据块被独立处理,因此外部循环(l0-ln)702不影响脉动阵列的吞吐量。一旦从片外存储器提取数据块,其将被存储在诸如输入缓冲器202的输入缓冲器和诸如权重缓冲器218的权重缓冲器中,以用于数据重用。中间循环(s0-sn)704表示将数据从输入缓冲器馈送到pe阵列的顺序处理。由向量定义的中间循环的边界确定数据重用缓冲器的大小。由pe访问的任何重用数据由如本文所讨论的中间循环(s0-sn)704的迭代器索引的阵列访问地址来表示。

在一些实施例中,并行执行在细粒度流水线中在pe阵列中执行。在一些实施例中,内部循环(t0-t2)706表示pe阵列中的并行性,其中内部循环(t0-t2)706的每次迭代对应于阵列中的并行dsp单元。脉动阵列的架构形状由内部循环的边界来确定,而脉动阵列映射可行性由内部循环迭代器和循环体中的阵列访问地址之间的关系来确定。

图8是描绘包括循环分块的脉动阵列800的实施例的框图。在一些实施例中,脉动阵列800包括t0×t1二维阵列:第一行中的处理元件pe(0,0)802、处理元件pe(1,0)804直到处理元件pe(0,t1-1)806;第二行中的处理元件pe(1,0)808、处理元件pe(1,1)810至处理元件pe(1,t1-1)812;直到第t0行中的处理元件pe(t0-1,0)814、处理元件pe(t0-1,1)816至处理元件pe(t0-1,t1-1)。在图8中,t0和t1是对于图7中描绘的内部循环706中的两个内部循环的循环限制。图7中描绘的内部循环706的第三循环限制t2构成对于脉动阵列800的第三维,其被并入到对于被包括在脉动阵列800中的每个处理元件的simd向量中。

在一些实施例中,脉动阵列800包括t1个输入缓冲器:输入缓冲器ib(0)820、输入缓冲器ib(1)822至输入缓冲器ib(t1-1)824。与循环分块表示一致的是,输入缓冲器ib(0)820至输入缓冲器ib(t1-1)824中的每一个都与一组中间循环(诸如中间循环704)相关联。换句话说,输入缓冲器ib(0)820可以被指定为如与中间循环704的限制相关联的输入缓冲器ib(0)(in(s0,...,sn-1))等等。

在一些实施例中,脉动阵列800包括t0个权重缓冲器:权重缓冲器wb(0)826、权重缓冲器wb(1)828至权重缓冲器wb(t0-1)830。与循环分块表示一致的是,权重缓冲器wb(0)826至权重缓冲器wb(t0)830中的每一个与诸如中间循环704的一组中间循环相关联。换句话说,可以将权重缓冲器wb(0)826指定为权重缓冲器wb(0)(w0(s0,...sn-1))等等。

在一些实施例中,诸如外部循环702的外部循环由脉动阵列800在逐块地基础上实现。以这种方式,在脉动阵列800的架构中的循环分块实现被用于计算包括原始循环体708的一组嵌套循环。总而言之,循环分块表示包括外部循环702、中间循环704和内部循环706,其中外部循环702被配置为计算与计算系统相关联的多个数据块(例如图像数据块),中间循环704被配置为表示将来自与计算系统相关联的多个输入缓冲器(例如,输入缓冲器ib(0)820到输入缓冲器ib(t1)826)的数据馈送到处理元件的顺序处理,并且内部循环706被配置为表示脉动阵列中的并行性。

图9是描绘用于定义用于机器学习的计算系统的方法900的实施例的流程图。在902处,方法900接收用于机器学习的计算系统的模型。在一些实施例中,该模型可以用诸如c或c++的高级计算语言来定义。在904处,该方法确定模型中定义的计算到脉动阵列的可行映射。在特定实施例中,脉动阵列包括包含处理元件的行和列的二维阵列。脉动阵列还包括第三维,其中simd向量与脉动阵列中的每个处理元件相关联。接下来,在906处,方法900定义可行映射以将数据重用包括在脉动阵列的行和列中,并且也在每个simd向量中。例如,脉动阵列需要在两个方向上的数据重用;因此相应的循环需要承载两个不同阵列(权重缓冲器w和输入缓冲器in)的数据重用,而第三个循环需要承载输出(out)的累加。未能满足此规则将导致不可行的映射。在一些实施例中,脉动阵列中的一个或更多个处理元件包括dsp块或dsp块的向量。在其他实施例中,脉动阵列中的一个或更多个处理元件被配置为实现包括加法、减法、乘法和除法的数学运算,并且这些处理元件包括查找表。

接下来,在908处,该方法通过表征dsp块的总数、dsp时钟频率和dsp效率来选择脉动阵列的形状。选择脉动阵列的形状包括定义阵列和simd向量大小以及其他变量。在一些实施例中,dsp效率被定义为:

在脉动阵列设计过程期间,尽管具有较高的dsp计数,但对于相同的时钟频率(例如,280mhz),某些脉动阵列实现可能具有比其他阵列更低的效率。例如,具有16行、10列和8个simd向量的dsp阵列可能比具有11行、13列和8个simd向量的dsp阵列效率更低,尽管在其中后者更有效地映射到(128,13,192)行程计数的目标循环映射的环境下,前者具有更高数量的dsp。

接下来,在910处,该方法使用循环分块表示来确定数据分块大小。在一些实施例中,循环分块表示包括多个外部循环、多个中间循环和多个内部循环,如本文所讨论的。在特定实施例中,循环分块与定义数据重用策略相关联。数据重用策略对于增强性能是必不可少的,因为如步骤906中定义的数据重用可能不足以实现所需的系统吞吐量。在一些实施例中,适当的数据分块实现向基础数据重用方案添加几个数量级的数据重用。

在一些实施例中,实现数据重用策略包括利用在具有长重用距离的多个for-循环上承载的数据重用,这又导致大的重用缓冲区。但是,在片上存储器利用率和片外带宽节省之间的权衡中,有超过一万个设计选项,包括选择要重用的阵列、承载数据重用的循环以及为对于承载数据重用所选择的循环的分块大小。例如,采用全流水线式脉动阵列设计,可以实现621浮点运算(gflops)的近似吞吐量。

图10是描绘用于定义对于具有细粒度数据重用的计算系统进行机器学习的方法1000的实施例的流程图。在1002处,方法1000接收用于具有细粒度数据重用的计算系统进行机器学习的模型。在一些实施例中,在脉动阵列中的三个内部循环t0、t1和t2中的至少一个内部循环中具有细粒度的数据重用是强制的,以用于实现可行映射。在一些实施例中,引入二元变量kl以指示循环到架构映射。在特定实施例中,如果循环l被选择为内部循环之一,则kl等于1;否则,kl等于0。对于映射的可行性条件被表示为:

其中,crl表示循环l上的阵列r的数据重用;如果循环l承载阵列r的细粒度数据重用,则crl=1,否则crl=0。

在一些实施例中,确定细粒度数据重用涉及使用多面体模型。在1004处,该方法定义了迭代向量其列出在循环嵌套中从最外侧循环到最内侧循环的循环迭代器。在1006处,该方法设置迭代域d,其定义循环迭代器的范围。在一些实施例中,在1008处,该方法还定义(计算)将循环迭代器映射到阵列r的访问索引的访问函数fr。

在一些实施例中,对于循环l上的阵列r的细粒度数据重用要求在不同循环l迭代中在阵列r上访问的数据是相同的。在1010处,方法1000检查以确定对于循环l上的每个阵列r,在不同循环迭代中在阵列r上访问的数据是否相同。这可以表示为以下条件:

如果上述条件不被满足,则该方法返回到1008。另一方面,如果在1010处满足上述条件,则该方法进入1012,其中该方法基于内部循环的边界来确定与计算系统(脉动阵列)相关联的dsp的资源利用率。最后,在1014处,该方法基于在中间循环和与迭代器向量相关联的内部循环中所访问的来确定与计算系统相关联的片上块ram(bram)大小。

在一些实施例中,由于如本文所述的由脉动阵列执行的计算主要是浮点乘法和浮点累加,因此dsp块和片上块ram(bram)是两种最关键的资源类型。在一些实施例中,dsp利用率是通过内部循环边界的乘积来确定:

其中,是多维阵列的访问向量,并且是中间循环和内部循环的迭代域。就实现而言,可以通过使用多面体模型来解决由上述问题提出的对具有线性约束的整数集的计数;然而,这个模型具有高计算复杂度。通过利用cnn算法的突出特征(诸如高计算复杂度和高数据重用性),可以通过计数阵列访问索引的每个维度的范围来实现模型的简化,使得总大小是每个维度的范围大小的乘积。

在一些实施例中,通过将实际存储器大小分配到四舍五入为2的幂的值来简化与存储器映射相关联的地址生成复杂度。这允许有效的bram实现。基于此,总的bram利用率被表示如下:

其中,cb是用于与脉动阵列相关联的任何输入缓冲器和输出缓冲器的恒定bram成本,cp是对于每个处理元件的bram成本,是与内部循环相关联的边界向量。

在一些实施例中,与计算系统相关联的性能是通过计算吞吐量和外部存储器转移吞吐量来建模的。在特定实施例中,计算吞吐量是由dsp并行性、时钟频率和dsp计算效率来表征的,并且外部存储器转移吞吐量是由总外部存储器带宽和至少一个相关联的访问端口的外部存储器带宽来表征的。

在一些实施例中,在输入和输出中使用双缓冲允许以解耦方式对吞吐量进行建模,因此总吞吐量t由计算吞吐量(pt)和外部存储器转移吞吐量(mt)中较低的一个主导,:

由于脉动阵列以完全流水线的方式执行,因此每个pe将在每个周期中完成两个浮点运算(乘法和累加)。然而,与数据重用策略相关联并且由于不合适的循环分块大小而导致的量化效应可能导致对原始循环的边界上的任何不完整数据块的浪费计算。通过将与脉动阵列相关联的时钟频率定义为f,计算吞吐量被建模为每秒执行的原始代码中的有效浮点运算的数量:

其中,是前面定义的dsp效率。

在一些实施例中,外部存储器转移吞吐量(mt)被定义为在每个块中执行的有效浮点运算的数量除以转移由这些运算所需的数据所花费的时间。由于硬件特征,存储器带宽限制不仅针对整个存储器访问带宽bw总数,还针对每个相关联的访问端口(如存储器访问端口)bw端口(阵列in,w,和out)。转移的数据量和带宽决定了数据转移时间,因此mt可以建模如下:

在上面的等式中,mtt(.)用于表示总存储器吞吐量,而mtr(.)用于表示对于单个存储器端口的存储器吞吐量。

图11是描绘用于定义用于计算系统进行机器学习的方法1100的实施例的流程图。在1102处,该方法接收用于计算系统进行机器学习的模型。在一些实施例中,这种计算系统的实现通过如本文所述的脉动阵列架构来实现。在1104处,该方法找到用于作为机器学习系统的函数的嵌套循环的一组可行的脉动阵列配置。在1106处,给定可行的脉动阵列配置,该方法确定中间循环的各种边界以改进设计吞吐量。步骤1104和1106可以共同地被转换为以下两个子问题的组合的问题:

问题1-步骤1104:给定用作cnn的嵌套循环l,找到包含所有可行的脉动阵列配置的集合s:

其中,是本文讨论的映射向量,是表示内部循环上的边界的向量。

问题2-步骤1106:给定脉动阵列配置找出中间循环的各种边界使得下面的总体设计吞吐量被基本上最大化:

最大化

其中t、b和d已在上面定义。的复杂计算使得问题既不是线性的,也不是凸(convex)的,这又导致了解析求解的困难。另一方面,这两个问题的整个设计空间非常大,这使得蛮力搜索不切实际。在一个实施例中,在具有3.2ghz频率的intel的xeone5-2667cpu上,该算法的实现花费大约311小时来遍历来自alexnetcnn型号的卷积层之一的每个设计选项。

为了解决大型搜索空间,实现了两阶段设计过程。在第一阶段中,其被称为架构设计阶段,通过考虑资源利用率和片上bram特征来减少设计空间。在1108处,方法1100基于dsp和bram利用率来修剪可行的脉动阵列配置候选项。由于本文描述的脉动pe阵列架构的可扩展性,在dsp利用率低时,时钟频率将不会明显下降。因此,可以通过在问题1中添加以下约束来修剪具有低dsp利用率的设计选项:

其中,cs是常数,用于设置由用户定义的dsp利用率的下边界。例如,通过应用其中cs=80的上述等式,对于来自alexnetcnn的卷积层之一,可用的脉动pe阵列映射的数量从160k减少到64k。

在一些实施例中,数据重用策略的设计空间是通过利用在实现中的bram大小总是舍入为二的幂的事实而根据的值进一步被降低的。具体地,设计空间仅通过探索其值是二的幂的的候选项来修剪。数据重用策略的修剪的设计空间可以覆盖原始设计空间中的改进解决方案,因为:

1)相关联的吞吐量的目标函数为的单调非递减函数,并且

2)对于其值具有相同的上舍入的二的幂的的选项,bram利用率相同。

通过这种方式,不是2的幂的bram设计和其他低效bram实现是通过设计过程来修剪的。通过对数据重用策略应用修剪,设计空间会以对数形式减少,使得可以执行穷举搜索以找到最佳策略。在一些实施例中,这结果是对于alexnet卷积层在平均搜索时间上节省了额外的17.5倍。因此,设计空间探索过程的第一阶段只需不到30秒即可识别高吞吐量设计选项的集合,而不是数百小时。

在设计过程的第二阶段中,于是使用例如对于openclapplication的英特尔软件开发工具包(sdk)来合成集合中的设计,以实现时钟频率。实际的时钟频率用于细化性能评估以用于确定最佳的脉动阵列设计。

图12是描绘服务器中的主机/加速器模型1200的实施例的框图。在一些实施例中,服务器1202包括经由合适的通信协议(诸如pciexpress或qpi)接口连接到包括使用上述系统和方法实现的脉动阵列1206的fpga1204的cpu1214。fpga1204还包括pciexpress/qpi接口1210(在图12中被描绘为pcie/qpi接口1210)、ddr控制器1212和片上系统总线1208。pciexpress/qpi接口1210和ddr控制器1212各自经由片上系统总线1208与脉动阵列1206通信。在一些实施例中,pciexpress/qpi接口1210被配置为使用pciexpress或通信协议与外围设备进行通信,而ddr控制器1212被设计为使脉动阵列1212与ddr存储器接口连接。

在一些实施例中,服务器1202可以用于实现涉及cnn计算的应用,诸如图像识别、视频检测、音频处理和自然语言处理。轻负载软件框架(主程序)可以在cpu1214上执行,而重负载cnn计算被卸载并在fpga1204上运行的脉动阵列1206中加速。编译器生成的脉动阵列1206执行cnn加速作为在fpga设计中的寄存器传输级(rtl)模块。该寄存器传输级模块经由诸如axi的标准协议连接到片上系统总线1208。此外,片上系统总线1208然后连接到任何外围接口,包括pciexpress/qpi接口1212和ddr控制器1214。数据(诸如图像帧和权重)首先通过pcie/qpi接口1210、片上系统总线1208和ddr控制器1212从cpu1214传送到fpga1204中的ddr存储器(未示出)。在转移初始数据之后,cpu1214经由pciexpress/qpi接口1210和片上系统总线1208通过信号开始在脉动阵列1206中的执行。然后,脉动阵列1206将来自fpga1204中的ddr存储器的数据提取到脉动阵列1206,并将结果存储回fpga1204中的ddr存储器(未示出)。在脉动阵列1206完成cnn加速的执行之后,cpu1214将检测到完成并且经由ddr控制器1212和pciexpress/qpi接口1210将来自fpga1204中的ddr存储器的数据转移回cpu1214。这个周期构成了使用脉动阵列完成对加速的调用。根据应用需求,也可以在系统中执行多个调用。

本文描述的脉动阵列设计也可以应用于单个服务器上的多fpga平台。多个输入数据(图像)可以在多个fpga上并行计算,其中每个fpga具有类似于图12中描绘的脉动阵列模块的脉动阵列模块。

图13是描绘嵌入式系统1300的实施例的框图。在一些实施例中,具有嵌入式cpu1308的片上系统(soc)1302经芯片上系统总线1306接口连接到脉动阵列1304。片上系统总线1306还与ddr控制器1310接口连接。在一些实施例中,使用本文描述的系统和方法生成脉动阵列1304。

在嵌入式系统1300中,就嵌入式cpu1308、脉动阵列1304和ddr控制器1310经由片上系统总线1306进行通信而言,该系统的行为可以与主机/加速器模型1200相同。整个应用可以在嵌入式系统1300中运行,其中脉动阵列1304部分用作加速器。在嵌入式系统1300中,在同一fpga芯片上通常存在用于嵌入式cpu1308和脉动阵列1304的共享存储器空间。本文描述的由脉动阵列生成系统和方法生成的rtl模块也可用于此场景。如针对主机/加速器模型1200所描述的,脉动阵列1304可以经由片上系统总线1306访问共享ddr存储器(未示出),并且嵌入式cpu1308还可以经由片上系统总线1306将控制信号直接发送到脉动阵列1304。在一些实施例中,嵌入式系统1300可以经由嵌入式cpu1308上的现有系统外围设备来执行整个应用,同时在脉动阵列1304上的计算被加速。

虽然本文描述了本公开的各种实施例,但是应当理解的是,它们仅通过示例而不是限制的方式来呈现。对于相关领域的技术人员明显的是,在不脱离本公开的精神和范围的情况下,可以在其中进行形式和细节上的各种改变。因此,本公开的广度和范围并不限于所描述的示例性实施例中的任一个,而应当仅仅根据所附的权利要求以及它们的等同物来限定。本文的描述已经被呈现用于说明和描述的目的。其不旨在为详尽本公开或将本公开限制为所公开的精确形式。鉴于所公开的教示,许多修改和变型是可能的。进一步地,应注意的是,本文所讨论的可选实施例中的任何实施例和全部实施例可用于任何所需的组合中,以形成本公开的附加混合实施方式。

在本公开中,参考了形成说明书的一部分的随附附图,并且其中以通过说明其中可实践本公开的具体实现的方式示出。应理解的是,其他实施方式可被使用并且可在不脱离本公开的范围的情况下做出结构改变。在实施方式中对“一个实施例”、“实施例”、“示例实施例”等的参考指示所描述的实施例可包括特定特征、结构或特性,但是每个实施例可以不必包括该特定特征、结构或特性。此外,这样的短语不一定是指同一实施例。此外,当描述与实施例有关的特定特征、结构或特性时,应理解,这是在本领域的技术人员的知识范围之内,用以实现与其它实施例有关的这种特征、结构或特性,无论是否明确地描述。

本文所公开的系统、设备和方法的实现可包括或使用专用或通用计算机,其包括计算机硬件,诸如例如一个或更多个处理器和系统存储器,如本文所讨论的。本公开的范围内的实现还可以包括物理和其他计算机可读介质,以用于承载或存储计算机可执行指令和/或数据结构。该类计算机可读介质可以是任何可用的介质,其可由通用或专用计算机系统访问。存储计算机可读指令的计算机可读介质是计算机存储介质(设备)。承载计算机可执行指令的计算机可读介质为传输介质。因此,通过示例的方式且不为限制,本公开的实现可包括至少两个明显不同种类的计算机可读介质:计算机存储介质(设备)和传输介质。

计算机存储介质(设备)包括ram、rom、eeprom、cd-rom、固态驱动(“ssd”)(例如,基于ram)、闪存、相变存储器(“pcm”)、其他类型的存储器、其他光盘存储、磁盘存储或其他磁存储设备,或者可用于以计算机可执行指令或数据结构的形式存储所需程序代码并且可由通用或专用计算机访问的任何其他介质。

本文公开的设备、系统和方法的实现可以通过计算机网络进行通信。“网络”被定义为一个或更多个数据链路,其实现计算机系统和/或模块和/或其他电子设备之间的电子数据的传输。当经由网络或另一个通信连接(硬接线、无线或者硬接线或无线的组合)将信息转移或提供到计算机时,计算机适当地将连接视为传输介质。传输介质可包括网络和/或数据链路,其可用于以计算机可执行指令或数据结构的形式承载所需程序代码,并且可由通用或专用计算机访问。上述的组合也被包括在计算机可读介质的范围内。

例如,计算机可执行指令包括指令和数据,其中当在处理器处执行时,该指令和数据使通用计算机、专用计算机或专用处理设备执行某个功能或功能的集合。例如,计算机可执行指令可以是二进制、中间格式指令(诸如汇编语言或甚至源代码)。尽管已经以特定于结构化特征和/或方法行为的语言描述了主题,但应理解的是,随附权利要求中定义的主题不必需局限于所描述的特征或本文所描述的行为。相反,所描述的特征和行为被公开作为实施权利要求的示例形式。

本领域技术人员将认识到,可在具有许多类型的计算机系统配置的网络计算环境中实践本发明,包括内置式车辆计算机、个人计算机、桌面型计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器的或可编程消费者电子设备、网络pc、迷你计算机、大型计算机、移动手机、pda、平板电脑、传呼机、路由器、交换器、各种存储设备等等。还可在分布式系统环境中实践本公开,其中经网络链接(通过硬接线数据链路、无线数据链路或通过硬接线和无线数据链路的组合)的本地和远程计算机系统都执行任务。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。

进一步地,在适当的情况下,可在以下中的一个或更多个中执行本文所描述的功能:硬件、软件、固件、数字部件或模拟部件。例如,一个或更多个专用集成电路(asic)可经编程来执行本文所描述的系统和过程中的一个或更多个。某些术语贯穿说明书和权利要求使用以指代特定系统部件。如本领域技术人员将认识到,可通过不同的名字来指代部件。本文档不旨在区分在名字上而不是功能上不同的部件。

应该注意,本文讨论的传感器实施例可以包括计算机硬件、软件、固件或其任何组合以执行其功能的至少一部分。例如,传感器可以包括配置成在一个或更多个处理器中执行的计算机代码,并且可以包括由计算机代码控制的硬件逻辑/电路。这些示例设备在本文中被提供用于说明的目的并且不旨在限制。如相关领域的技术人员所知,本公开的实施例可以在其他类型的设备中实现。

本公开的至少一些实施例针对包括存储在任何计算机可用介质上的这种逻辑(例如,以软件的形式)的计算机程序产品。当在一个或更多个数据处理设备中执行时,这种软件使得设备如本文所述的那样进行操作。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1