发明内容
为了解决上述问题,本公开的实施例提供了一种可重构计算芯片、一种配置可重构计算芯片的方法、一种卷积处理方法、一种卷积处理装置、一种计算机可读存储介质、一种计算机程序产品。
本公开的实施例提供了一种可重构计算芯片,包括:处理模块,包括多个处理核心,所述多个处理核心共享第一缓存,其中,所述多个处理核心中的每个处理核心包括多个处理单元,所述多个处理单元共享第二缓存,所述多个处理单元中的每个处理单元独占所述处理单元对应的第三缓存,其中,所述可重构计算芯片被动态地配置为对输入特征图和卷积核进行卷积处理以获得输出特征图,所述多个处理单元中的每个处理单元被动态地配置为对所述输入特征图的一部分和卷积核的一部分进行乘加处理以获得所述输出特征图的一部分。
例如,第一缓存包括L2缓存和/或L3缓存,第二缓存包括L1缓存,第三缓存包括L0缓存。
例如,至少部分地基于所述输入特征图、所述卷积核和所述输出特征图的各个维度,所述可重构计算芯片的计算通路和/或数据通路被重构以执行所述卷积处理。
例如,至少部分地基于从所述卷积处理到所述可重构计算芯片的计算通路之间映射关系,所述多个处理单元中的每个处理单元被动态地配置为对所述输入特征图的对应一部分和卷积核的对应一部分进行乘加处理。
本公开的实施例还提供了一种配置可重构计算芯片的方法,包括:基于输入特征图的多个维度、卷积核的多个维度、输出特征图的多个维度,确定各个维度对应的搜索空间,其中,所述输出特征图是对所述输入特征图与所述卷积核进行卷积处理后的卷积结果;基于所述可重构计算芯片的硬件参数和所述各个维度对应的搜索空间,确定从所述卷积处理到所述可重构计算芯片的数据通路和/或计算通路之间的映射关系;以及基于所述映射关系,配置所述可重构计算芯片。
例如,所述可重构计算芯片包括处理模块,所述处理模块包括多个处理核心,所述多个处理核心共享第一缓存,其中,所述多个处理核心中的每个处理核心包括多个处理单元,所述多个处理单元共享第二缓存,所述多个处理单元中的每个处理单元独占所述处理单元对应的第三缓存。
例如,所述基于输入特征图的多个维度、卷积核的多个维度、输出特征图的多个维度,确定各个维度对应的搜索空间还包括:基于可重构计算芯片的存储架构和处理架构,确定所述输入特征图、所述卷积核和所述输出特征图的各个维度对应的维度因子数量;以及基于所述各个维度以及所述各个维度对应的维度因子数量,确定所述各个维度对应的搜索空间。
例如,所述基于所述可重构计算芯片的硬件参数和所述各个维度对应的搜索空间,确定从所述卷积处理到所述可重构计算芯片的数据通络和/或计算通路之间的映射关系还包括:基于所述可重构计算芯片的硬件参数,确定所述各个维度对应的私有限制条件集合;基于所述各个维度对应的私有限制条件集合和搜索空间,确定所述各个维度对应的私有搜索空间;基于所述各个维度对应的私有搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的数据通路和/或计算通路之间的映射关系。
例如,所述基于所述各个维度对应的私有搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系还包括:基于所述可重构计算芯片的硬件参数,确定所述各个维度中的至少两个维度对应的联合限制条件集合;基于所述联合限制条件集合和所述各个维度对应的私有搜索空间,确定全局搜索空间,所述全局搜索空间对应于所述可重构计算芯片进行卷积处理的所有可工作的数据通路和/或计算通路;基于所述全局搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系。
例如,所述基于所述全局搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的数据通路和/或计算通路之间的映射关系还包括:基于所述全局搜索空间,确定所述所有可工作数据通路和/或计算通路对应的分数,所述分数为所述可重构计算芯片在按照该可工作数据通路和/或计算通路进行卷积处理的情况下,所述可重构计算芯片的各个处理单元的利用率、功耗和计算速度的加权值;以及基于所述所有数据通路和/或可工作计算通路对应的分数,确定所述从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系。
例如,所述基于所述映射关系,配置所述可重构计算芯片还包括:基于所述映射关系,调整第一子计算通路与第二子计算通路对应的维度因子,其中,所述第一子计算通路对应于与所述可重构计算芯片的处理单元从第三缓存获取数据相关联的子计算通路,所述第二子计算通路对应于与所述可重构计算芯片的处理单元从第二缓存获取数据对应的子计算通路。
例如,所述基于所述映射关系,配置所述可重构计算芯片还包括:基于所述映射关系对应的并行子任务分配方案集合,确定所述并行子任务分配方案集合中的各个并行子任务分配方案对应的数据重用率;基于所述数据重用率,确定所述映射关系对应的并行子任务分配方案;以及基于所述映射关系对应的并行子任务分配方案,分配所述可重构计算芯片的处理单元待计算的数据。
本公开的实施例还提供了一种卷积处理方法,包括:利用可重构计算芯片,对输入特征图和卷积核进行卷积处理以获得输出特征图,其中,所述可重构计算芯片的多个处理单元被动态地配置为对所述输入特征图的一部分和卷积核的一部分进行乘加处理以获得所述输出特征图的一部分;其中,所述可重构计算芯片包括处理模块,所述处理模块包括多个处理核心,所述多个处理核心共享第一缓存,其中,所述多个处理核心中的每个处理核心包括所述多个处理单元,所述多个处理单元共享第二缓存,所述多个处理单元中的每个处理单元独占所述处理单元对应的第三缓存。
根据本公开实施例的一个方面,提供了一种卷积处理装置,包括:一个或多个处理器;以及一个或多个存储器,其中所述存储器中存储有计算机可读代码,所述计算机可读代码在由所述一个或多个处理器运行时,使得所述一个或多个处理器执行如上述的方法。
根据本公开实施例的另一方面,提供了一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令在被处理器执行时,使得所述处理器执行如本公开上述各个方面中任一项所述的方法。
根据本公开实施例的另一方面,提供了一种计算机程序产品,其包括计算机可读指令,所述计算机可读指令在被处理器执行时,使得所述处理器执行如本公开上述各个方面中任一项所述的方法。
本公开实施例通过可靠有效的算子映射评估模型对算子映射方案进行打分,实现了在尽可能短的时间内从可能的动态配置方案中搜索出特定于CNN卷积算子的最优映射方案。
更进一步地,本公开的实施例在筛选出特定于CNN卷积算子的最优映射方案之后,还通过进一步优化数据拆分规则和并行计算任务到处理单元的指配方案后,进一步提高了数据的读写和计算效能。
本公开的一些方面还可以实现以下有益技术效果:
1.本公开的一些方面引入了双重限制条件对搜索空间进行筛选过滤,缩小全局搜索空间的大小,降低搜索时间。
2.本公开的一些方面还引入了解析模式的算子映射评估模型对评估指标进行计算,例如,基于算子映射方案的组合参数计算的算子映射评估模型,相比于模拟方式(基于芯片模拟器模拟统计),极大缩短算子映射评估模型的计算耗时。
3.本公开的一些方面还引入了综合评估指标(关于多个单评估指标的函数输出)对算子映射方案进行打分,相比于单评估指标(如PE利用率、功耗、数据重用率等),能够获得性能更全面的算子映射方案。
4.本公开的一些方面还引入了缓存模式的算子映射评估模型。映射评估模型在进行某计算步骤前,先去检查该计算步骤对应的中间结果是否缓存,如果缓存,则获取缓存结果;如果未缓存,则直接计算,并将中间结果缓存。该缓存操作可加速搜索过程,降低搜索时间。
5.本公开的一些方面还在进行数据拆分时,交换L1循环体和PE循环体中的维度因子间的顺序,保证L1缓存的数据连续性,提高读写效率,加速算子计算。
6.本公开的一些方面还引入了据重用率筛选规则,将并行子任务指派给处理模块中对应PE执行,降低数据搬移量和功耗。
具体实施方式
为了使得本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。
为了保持本公开实施例的以下说明清楚且简明,本公开省略了部分已知功能和已知部件的详细说明。
以下简要介绍与本公开相关的术语,以便于说明本公开。
神经网络:神经网络可以指代例如通过对例如生物大脑进行建模而获得的计算架构。在神经网络中,对应于大脑神经元的节点相互连接,并共同操作以处理输入数据。存在各种类型的神经网络,例如但不限于CNN、递归神经网络(RNN)等。通常,神经网络模型包括输入层和输出层,输入层和输出层通过至少一个隐藏层分开。隐藏层将由输入层接收到的输入变换为对在输出层中生成输出有用的表示。网络节点经由边全连接至相邻层中的节点,并且每个层内的节点之间不存在边。在神经网络的输入层的节点处接收的数据经由隐藏层、激活层、池化层、卷积层等中的任意一项被传播至输出层的节点。神经网络模型的输入输出可以采用各种形式,本公开对此不作限制。
卷积神经网络(CNN):CNN是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks,SIANN)”。具体地,卷积神经网络包括输入层、隐藏层和输出层。例如,隐藏层包括至少一个卷积层、池化层和全连接层。
卷积层:卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核(Input Filter Weights),组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,在一些示例中,该区域也被称为“感受野(receptive field)”,其含义可类比视觉皮层细胞的感受野。可选地,卷积核在工作时,会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量。
特征图(Input Feature Maps):通过单个卷积层对数据进行处理的过程中,输入的数据可以被称为输入特征图,而从输入特征图中提取出的输出特征的集合可被称为输出特征图。也即,卷积层通过卷积核对输入特征图进行卷积操作以获取输出特征图。
CNN卷积算子:在卷积神经网络的卷积层中,在输入特征图中,将不同数据窗口的数据和卷积核作内积的操作叫做卷积,其中输入特征图和卷积核是卷积层的输入数据。该卷积层称之为卷积算子。
缓存(cache):缓存是介于核和主存储器(例如,外存)之间的小容量存储器,其读写速度比主存储器更快,从而能够实现高速地向中央处理器提供指令和数据,提高程序的执行速度。随着半导体器件集成度的不断提高,当前已出现了多级缓存系统,每一级缓存的所有控制逻辑全部由该级缓存的内部控制器实现。缓存包括零级缓存、一级缓存、二级缓存和三级缓存。
一级缓存(L1 cache):L1缓存为一级高速缓存,位于CPU内核的旁边。其是与CPU结合最为紧密的缓存。一级缓存又分为指令缓存和数据缓存,容量最小,由各个核/集群独享。
二级缓存(L2 cache):L2缓存为二级高速缓存,是CPU第二层级高速缓存,其容量会直接影响CPU的性能,通常由各个核/集群独享。可选地,在一些示例中,L2也可以由各个核/集群共享。
三级缓存(L3 cache):L3缓存为三级高速缓存,为CPU第三层级高速缓存,作用是进一步降低内存延迟,由多个核/集群共享,容量最大。通常情况下L3也是多核处理器的最后一级缓存(Last Level Cache,LLC),L3与外存耦接。
外存:其与处理器的内存是相对的概念,通常为动态随机存取存储器(DynamicRandom Access Memory,DRAM),其通常通过总线与三级缓存连接。外存的容量大,但是访问速度慢。
为了更好的说明本公开,以下参考图1和图2来进一步说明根据本公开的实施例的可重构计算芯片。
图1是示出根据本公开的实施例的可重构计算芯片的示意图。如图1所示,所述可重构计算芯片包括处理模块,包括多个处理核心,所述多个处理核心共享第一缓存,其中,所述多个处理核心中的每个处理核心包括多个处理单元,所述多个处理单元共享第二缓存,所述多个处理单元中的每个处理单元独占所述处理单元对应的第三缓存。
作为一个示例,第一缓存包括L2缓存和/或L3缓存,第二缓存包括L1缓存,第三缓存包括L0缓存。值得注意的是,可重构计算芯片还可以包括其他部件,例如,其他的存储结构,然而,由于这些部件与本公开实施例的内容无关,因此在这里省略其图示和描述。例如,图1中示出的可重构计算芯片可选地采用4级缓存存储结构L0缓存-L3缓存。当然,本公开实施例的可重构计算芯片还可以仅采用3级缓存存储结构L0缓存-L2缓存,或者,缓存存储结构和外存存储结构的组合,本公开并不以此为限。
例如,处理模块可以是一个由n x m个处理核心组成的处理核心矩阵。也即每个处理模块可以包括排列成n行m列的矩阵状的多个处理核心。其中,每个处理核心是由u x v个处理单元(PE)组成的矩阵。也即每个处理核心包括排列成u行v列的矩阵状的多个处理单元(PE)。虽然在图1中仅示出了排列成4行4列的多个处理单元,本领域技术人员应当理解本公开并不以此为限。上述的n、m、u、和v均为正整数,本公开并不限制这4个值的具体取值范围。
如图1所示,每个PE可配有一个独占的L0缓存,PE可以从该L0缓存中直接读取数据。每个处理核心可以配有一个独占的L1缓存,而L2缓存和L3缓存则被整个处理模块的所有PE共享。
可选地,根据上述架构,在包括卷积层的神经网络(例如CNN)的训练和推理过程中,图1中的可重构计算芯片可以被动态地配置为执行卷积相关的映射。例如,根据本公开实施例的可重构计算芯片可以通过动态地配置上述的处理单元阵列,将卷积层映射至硬件上,实现功能的映射、数据流的映射以及相关的控制处理。
例如,图1中的可重构计算芯片可以被动态地配置为对输入特征图和卷积核进行卷积处理以获得输出特征图,所述多个处理单元中的每个处理单元被动态地配置为对所述输入特征图的一部分和卷积核的一部分进行乘加处理以获得所述输出特征图的一部分。
假设某个卷积层对应于将输入特征图Input与卷积核Weights按照步长Stride进行卷积处理以得到输出特征图Output。
作为一个示例,假设输入特征图Input的维度为N*C*H*W,其中,C又称为输入特征图Input的通道总数,H又称为输入特征图Input的高度,W又称为输入特征图Input的宽度,N为输入特征图Input的通道总数、高度和宽度以外的另一维度。例如,可以以以下伪代码表示输入特征图Input。
Input Feature Maps:Input[N][C][H][M]
卷积核Weights的维度为M*C*R*S,其中,类似地,C又称为卷积核Weights的通道总数(其与输入特征图Input的通道总数相同),R又称卷积核Weights的高度,S又称为卷积核Weights的宽度,M为卷积核Weights的通道总数、高度和宽度以外的另一维度。例如,可以以以下伪代码表示卷积核Weights。
Input Filter Weights:Weights[M][C][R][S]
输出特征图Output的维度为N*M*E*F,其中,M又称为输出特征图Output的通道总数,E又称为输出特征图Output的高度,F又称为输出特征图Output的宽度,N为输出特征图Output的通道总数、高度和宽度以外的另一维度。其中,作为一个示例,
例如,例可以以以下伪代码表示输出特征图Output。
Output Feature Maps:Output[N][M][E][F]
上述的各值均为正整数。针对上述假设,可以将CNN卷积算子在图1所示的可重构计算芯片中的计算流程抽象成图2所示的多级嵌套的循环结构。
例如,可重构计算芯片对输入特征图和卷积核进行卷积处理以获得输出特征图的计算过程将至少部分地基于所述输入特征图、所述卷积核和所述输出特征图的各个维度(例如,N、C、H、W、M、R、S、E、F中的一个或多个)而被重构,从而调整神经网络的卷积层在训练和推理过程中的计算通路和/或数据通路,以提高可重构计算资源的利用率并提高数据的读写和计算效能。
以输入特征图Input的维度C(通道总数)为例来进行说明如何重构可重构计算芯片的计算通路和/或数据通路被重构以执行所述卷积处理。具体地,可重构计算芯片的单个PE的单次能够处理的一个维度的最大值往往小于C。因此,需要将维度C拆成不同的维度,以分别对应不同的循环层次。
假设将C分解成C0、C1、C2、C3、C4,分别对应不同的循环层次(loops),且C0xC1xC2xC3xC4≥C。其中C1表示将维度C的遍历计算划分成C1个并行子任务,每个子任务包含的通道数为C0xC2xC3xC4,并分配一个处理核心去完成计算。
类似地,将维度N分解成N0、N1、N2、N3、N4,分别对应不同的循环层次(L0循环体、PE循环体、L1循环体、L2循环体和L3循环体),且N0xN1xN2xN3xN4≥N;将维度M分解成M0、M1、M2、M4,分别对应不同的循环层次(L0循环体、PE循环体、L1循环体和L3循环体),且M0xM1xM2xM4≥M;将维度E分解成E0、E1、E2、E3,分别对应不同的循环层次(L0循环体、PE循环体、L1循环体和L2循环体),且E0xE1xE2xE3≥E;将维度R分解成R0和R1,分别对应不同的循环层次(PE循环体和L1循环体),且R0xR1≥R;将维度S分解成S0,分别对应不同的循环层次(L0循环体),且S1≥S。
上述的循环体的设置可以随着可重构计算芯片的硬件结构和卷积神经网络的变化而变化,上述的设置方式仅为一个示例。例如,可以将维度S与维度R的分解方式进行交换,从而将维度S分解成S0和S1,分别对应不同的循环层次(PE循环体和L1循环体)并将R分解为R0。本公开对此不进行限制。
此外,作为一个示例,图1中的处理模块还可以调用C1个并行子任务,交由C1个处理核心并行地进行计算。本公开并不以此为限。
如图2所示,最小的循环体为L0循环,也即最小的循环层次为L0循环层次。PE循环体可包括多个L0循环。L1循环体可包括多个PE循环。L2循环体包括多个L1循环体。L3循环体可以包括多个L2循环。
在L0循环体中,处理核心中单个PE的L0缓存可存储通道数为C0的输入数据(C0小于单个PE一次能够处理的最大维度),并且单个PE可以针对其独占的L0缓存中的数据进行计算。类似地,单个PE针对其他的维度也可以以类似的方式从其独占的L0缓存中获得数据进行计算。作为一个示例,单个L0循环体(L0 cache loops)的伪代码可以为:
其中,在PE进行的每次计算中,Output_part、Input_part和Weight_part均对应于当前的m0、c0、s0、f0、n0、和e0指示的那部分输出特征图、输入特征图和卷积核。由此,根据上述的参数(例如,E0、N0、F0、S0、C0和M0中的一个或多个),每个PE被动态地配置为从L0缓存中获取相应的数据。也即根据上述参数中的一个或多个,动态地调整了涉及第三缓存(例如L0缓存)的数据通路。
具体地,假设一共分配了N1*M1*C1*E1*R0个PE进行并行计算。其中,单个PE完成上述L0的循环体。所有PE并行计算PE特定的L0循环体的过程也称为PE循环体。作为一个示例,所有PE对应的PE循环体(PE loops)的伪代码可以为:
由此,根据上述的参数(例如,N1、M1、C1、E1和R1中的一个或多个),每个PE被动态地配置为并行执行相应地计算。也即根据上述参数中的一个或多个,动态地调整了各个PE涉及的计算通路,并根据数据流的流动驱动了可重构计算芯片的计算过程。
可选地,针对维度C,当PE完成其特定的C0通道的计算并输出这部分计算结果后,该PE的L0缓存从L1缓存中获取下一个C0通道数据并更新L0缓存中存储的数据。L1缓存可存储通道数为C0xC2的输入数据。从L1缓存中读取数据的循环体又称为L1循环体。作为一个示例,L1循环体对应的伪代码可以为:
由此,根据上述的参数(例如,N2、C2、E2、R1和M2中的一个或多个),每个L0缓存被动态地配置为从L1缓存中获取相应的数据。也即根据上述参数中的一个或多个,动态地调整了涉及第二缓存(例如L1缓存)的数据通路。
继续针对维度C,当L0缓存读取完L1缓存中所有通道数据,L1缓存将从L2缓存获取下一个C0xC2通道数据并更新L1缓存中的数据。从L2缓存中读取数据的循环体又称为L2循环体。作为一个示例,L2循环体对应的伪代码可以为:
依次类推,针对维度C,当L1缓存读取完L2缓存中所有通道数据,L2缓存将从L3缓存获取下一个C2xC4通道数据并更新L2缓存中的数据。从L3缓存中读取数据的循环体又称为L3循环体。作为一个示例,L3循环体对应的伪代码可以为:
由此,根据上述的参数(例如,N3、M3、E3、C3、N4、M4和C4中的一个或多个),每个L1缓存被动态地配置为从L2缓存中获取相应的数据,每个L2缓存被动态地配置为从L3缓存中获取相应的数据。也即根据上述参数中的一个或多个,动态地调整了涉及第三缓存(例如L2缓存和L3)的数据通路。
虽然针对特定的输入特征图Input、卷积核Weights和输出特征图Output,其维度N、C、H、W、M、R、S、E、F已知,但是上述各个维度的分解方式却是可变的。例如,假设维度C=12,其可以分解成C0=2,C1=2,C2=1,C3=3,C4=1,以满足C0xC1xC2xC3xC4≥C。或者其也可以被分解为C0=1,C1=3,C2=4,C3=1,C4=1,以满足C0xC1xC2xC3xC4≥C。针对维度C的分解方式的组合方式实质上是无穷大的,然而在实际应用中,可重构计算芯片的硬件结构却是有限的。
假设针对9个维度N、C、H、W、M、R、S、E、F中的任意一个维度,图1所示的可重构计算芯片都能够满足该维度对应的无穷数量的分解方式中的100种分解组合那么将产生一个含1009个算子映射方案。算子映射是指根据可重构计算芯片的存储结构和处理单元配置,将算子的计算过程和计算数据进行拆分,与芯片的执行流程进行一一对应。本公开以CNN算子的映射为例进行说明,本公开并不以此为限。
为此,本公开还提供了一种配置可重构计算芯片(例如,图1所示的根据本公开的可重构计算芯片)的方法,以从海量的算子映射方案中筛选中优选的算子映射方案。
图3是示出根据本公开实施例的配置可重构计算芯片的方法300的流程图。图4是示出根据本公开实施例的配置可重构计算芯片的方法300的示意图。可重构计算芯片可以是根据图1所示的可重构计算芯片,例如,其包括处理模块,所述处理模块包括多个处理核心,所述多个处理核心共享第一缓存,其中,所述多个处理核心中的每个处理核心包括多个处理单元,所述多个处理单元共享第二缓存,所述多个处理单元中的每个处理单元独占所述处理单元对应的第三缓存。作为一个示例,第一缓存包括L2缓存和/或L3缓存,第二缓存包括L1缓存,第三缓存包括L0缓存。
参见图3,示例方法300包括步骤S301-S303之一或全部。本公开并不以此为限。其中,步骤S301-S302可以由搭载有优化可重构计算芯片配置的软件的任意实体硬件执行,也可以由搭载有与可重构计算芯片配套的、可对可重构计算芯片进行硬件编程的软件的任意实体硬件执行。步骤S303可由与可重构计算芯片配套的、可对可重构计算芯片进行硬件编程的软件的任意实体硬件执行。本公开并不对示例方法300各个步骤的执行主体进行限制,只要其能够实现本公开的目的即可。
作为一个示例,上述的实体硬件可以是任意的终端设备,例如,其可以是台式计算机等的固定终端,诸如智能手机、平板电脑、便携式计算机、手持设备、个人数字助理、智能可穿戴设备、车载终端等具有网络功能的移动终端,或者它们的任意组合,本公开实施例对此不作具体限制。
作为另一示例,上述的实体硬件还可以是任意的云服务器,例如用于配置和优化可重构计算芯片和/或进行神经网络相关计算的独立的服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、定位服务以及大数据和人工智能平台等基础云计算服务的云服务器,本公开实施例对此不作具体限制。
例如,在步骤S301中,基于输入特征图的多个维度、卷积核的多个维度、输出特征图的多个维度,确定各个维度对应的搜索空间,其中,所述输出特征图是对所述输入特征图与所述卷积核进行卷积处理后的卷积结果。
例如,参照上述,输入特征图可以为上述的输入特征图Input,其维度为为N*C*H*W,其中,C又称为输入特征图Input的通道总数,H又称为输入特征图Input的高度,W又称为输入特征图Input的宽度,N为输入特征图Input的通道总数、高度和宽度以外的另一维度。
类似地,卷积核可以为上述的卷积核Weights,其维度为M*C*R*S,其中,类似地,C又称为卷积核Weights的通道总数(其与输入特征图Input的通道总数相同),R又称卷积核Weights的高度,S又称为卷积核Weights的宽度,M为卷积核Weights的通道总数、高度和宽度以外的另一维度。
又例如,输出特征图Output的维度为N*M*E*F,其中,M又称为输出特征图Output的通道总数,E又称为输出特征图Output的高度,F又称为输出特征图Output的宽度,N为输出特征图Output的通道总数、高度和宽度以外的另一维度。根据卷积运算的规则,将输入特征图Input与卷积核Weights按照步长Stride进行卷积处理以得到输出特征图Output。因此,作为一个示例,
作为一个示例,参考图4,根据上述的各个维度,对这些维度进行因式分解,既可以得到各个维度对应维度因子。例如,以维度N(此处N既作为维度标识,也表示维度的尺寸)为例,其分解后的因子组合可以被表示为:
且
其中n表示维度因子个数。所有的维度因子组合构成维度N的搜索空间
其中m表示搜索空间的大小。从数学上来说,m可以为无限大。例如,假设N=5,n=2,也即将N因式分解为N0和N1的乘积。那么可以存在{N0,N1}={1,5}或{2,3}或{3,2}或{70,2}等等。
作为一个示例,n与可重构计算芯片的存储架构和处理架构有关。例如,在图1的示例中维度N可以被分解为N0、N1、N2、N3、N4,其目的是为了与循环层次(L0循环体、PE循环体、L1循环体、L2循环体和L3循环体)相对应。因此,步骤S301还包括:基于可重构计算芯片的存储架构和处理架构,确定所述输入特征图、所述卷积核和所述输出特征图的各个维度对应的维度因子数量;以及基于所述各个维度以及所述各个维度对应的维度因子数量,确定所述各个维度对应的搜索空间。
例如,接着,在步骤S302中,基于所述可重构计算芯片的硬件参数和所述各个维度对应的搜索空间,确定从所述卷积处理到所述可重构计算芯片的数据通路和/或计算通路之间的映射关系。
继续参考图4,例如,在单个PE能够处理的最大维度为6的情况下,上述的{N0,N1}={70,2}是无法满足可重构计算芯片的硬件参数限制的。因此,可以根据可重构计算芯片的硬件参数来对筛选上述的各个维度对应的搜索空间。也即,在步骤S302中可以包括:基于所述可重构计算芯片的硬件参数,确定所述各个维度对应的私有限制条件集合;基于所述各个维度对应的私有限制条件集合和搜索空间,确定所述各个维度对应的私有搜索空间;基于所述各个维度对应的私有搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的数据通路和/或计算通路之间的映射关系。
例如,以维度N的搜索空间U
N为例,根据可重构计算芯片的硬件参数限制,得到关于维度N的若干私有限制条件集合
如1≤N
0≤4,N
1×N
2≤8等,根据私有限制条件集合
对搜索空间U
N中的维度因子组合进行筛选过滤,即得到满足私有限制条件集合的私有搜索空间结合
其中k表示过滤后搜索空间的大小,下标表示维度因子组合的序号,上标为维度识别符。因此,满足私有限制条件集合的搜索空间
又称为维度N对应的私有搜索空间。
又例如,参见图4,步骤S302还包括:基于所述联合限制条件集合和所述各个维度对应的私有搜索空间,确定全局搜索空间,所述全局搜索空间对应于所述可重构计算芯片进行卷积处理的所有可工作的数据通路和/或计算通路;基于所述全局搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系。
可选地,首先,将上述各个维度对应的私有搜索空间进行任意组合,可以得到组合搜索空间。以图1为例,至少可以得到的各个维度对应的私有搜索空间
和
从每个私有搜索空间任选一个维度因子组合,组合得到组合搜索空间的一个算子映射方案,一个算子映射方案对应于对所述可重构计算芯片进行卷积处理的所有可工作的数据通路和/或计算通路。例如,一个算子映射方案可以是
其表示选择了私有搜索空间
中的、序号为3的因式分解组合,私有搜索空间
中的、序号为1的因式分解组合,私有搜索空间
中的、序号为5的因式分解组合等等。最终得到组合搜索空间
其中p表示全局搜索空间的大小。
接着,对组合搜索空间U进行筛选过滤。根据硬件参数要求,得到所述各个维度中的至少两个维度对应的联合限制条件集合
如M
0×S
0≤16,N
1×C
2≥5等,根据联合限制条件集合
对组合搜索空间U中的算子映射方案进行筛选过滤,得到满足条件的全局搜索空间
其中q表示过滤后全局搜索空间的大小。本公开通过引入联合限制条件集合和私有限制条件集合对搜索空间进行筛选过滤可以缩小全局搜索空间的大小,降低搜索时间。
更进一步地,所述基于所述全局搜索空间,确定所述从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系还包括:基于所述全局搜索空间,确定所述所有可工作数据通路和/或计算通路对应的分数,所述分数为所述可重构计算芯片在按照该可工作数据通路和/或计算通路进行卷积处理的情况下,所述可重构计算芯片的各个处理单元的利用率、功耗和计算速度的加权值;以及基于所述所有数据通路和/或可工作计算通路对应的分数,确定所述从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系。
例如,参照图4,可以通过遍历上述的全局搜索空间
通过解析每一个算子映射方案对应的计算模式和缓存模式,可以得到该算子映射方案的算子映射评估模型,从而得到每一个算子映射方案对应的单评估指标集合γ。本公开通过引入解析模式(基于算子映射方案的组合参数计算)的算子映射评估模型对评估指标进行计算,相比于模拟方式(基于芯片模拟器模拟统计),极大缩短算子映射评估模型的计算耗时。
进一步地,上述的算子映射评估模型引入了缓存模式,由此,算子映射评估模型可以在进行某计算步骤前,先检查该计算步骤对应的中间结果是否缓存,如果缓存,则获取缓存结果;如果未缓存,则直接计算,并将中间结果缓存。这样的缓存操作可加速搜索过程,降低搜索时间。
例如,单评估指标集合γ包括诸如处理单元的利用率,功耗,延迟等指标对应的值。然后根据综合评估指标(综合评估指标是对PE利用率,功耗,延迟等单评估指标进行加权的函数),对该算子映射方案进行打分。最终得到所有算子映射方案对应的可工作数据通路和/或计算通路对应的分数集合
中的每一个分值对应一个可工作数据通路和/或计算通路对应的分数。本公开通过引入综合评估指标(关于多个单评估指标的函数输出)对算子映射方案进行打分,相比于单评估指标(如PE利用率、功耗、数据重用率等),能够获得性能更全面的算子映射方案。
例如,可以对分值集合
进行分值排序,其中最高分值对应的算子映射方案即为最佳的算子映射方案,其对应于高可重构计算资源的利用率、高数据的读写和计算效能的算子映射方案(也即,能够实现高可重构计算资源的利用率、高数据的读写和计算效能的从所述卷积处理到所述可重构计算芯片的计算通路之间的映射关系)。
例如,接着,在步骤S303中,可以基于所述映射关系,配置所述可重构计算芯片。
例如,根据该映射对应的各个维度的维度因子,对可重构计算芯片进行硬件编程,以使得其能够实现以上述的各种伪代码为示例的卷积处理。
可选地,为进一步优化数据的读取效能,还可以对上述的映射关系进行数据拆分。例如,还可以基于所述映射关系,调整第一子计算通路与第二子计算通路对应的维度因子,其中,所述第一子计算通路对应于与所述可重构计算芯片的处理单元从第三缓存获取数据相关联的子计算通路,所述第二子计算通路对应于与所述可重构计算芯片的处理单元从第二缓存获取数据对应的子计算通路。
例如,可以交换L1循环体和PE循环体中的维度因子的排列顺序。以参考图1描述的各个伪代码的示例,在运行参考图1描述的伪代码的过程中的任一计算状态,以维度C为例,交换前,其对应下标c=c4*C3*C2*C1*C0+c3*C2*C1*C0+c2*C1*C0+c1*C0+c0;交换后,其对应下标c=c4*C3*C1*C2*C0+c3*C1*C2*C0+c1*C2*C0+c2*C0+c0。PE循环体中出现的其它维度同理。由此,可以实现在L0缓存中每次都能从L1缓存中读取到PE当次/下次计算所需的数据,而不需L1缓存从L2缓存/L3缓存中拉取数据,从而提高数据在L1缓存中的命中率以及L1缓存中的数据连续性,以进一步提高数据读取效能,加速卷积计算。
例如,还可以根据数据重用率筛选规则,进一步优化指派各个PE的并行运算子任务。例如,可以基于所述映射关系对应的并行子任务分配方案集合,确定所述并行子任务分配方案集合中的各个并行子任务分配方案对应的数据重用率;基于所述数据重用率,确定所述映射关系对应的并行子任务分配方案;以及基于所述映射关系对应的并行子任务分配方案,分配所述可重构计算芯片的处理单元待计算的数据。
作为一个示例,可以根据数据重用率筛选规则,将并行子任务(按图1所示,子任务的数目为N1*M1*C1*E1*R0)分别指派给处理模块中对应PE执行。数据重用率筛选规则如下:遍历所有可行的指派方案,选择输入特征图和卷积核数据重用率最高的方案作为最终的指派方案,其中数据重用率的定义为:数据重用率=(实际加载数据量/理论加载数据量)。其中,理论加载数据量=各个PE所计算的数据量之和,实际加载数据量=各个所计算的数据量之和-公用的数据量。由此,相邻的PE之间可以尽可能的重用相同的数据,减少数据读取的开销。例如,在这样的情况下,L1缓存中可以保留尽量多的可被相邻PE重用的数据,以减少L1缓存从L2缓存/L3缓存中反复拉取相同数据的次数。由此实现了数据搬移量和功耗的降低
由此,针对神经网络中的CNN(卷积神经网络)涉及的运算,本公开提出了一种有效的配置可重构计算芯片的方法,以提高可重构计算资源的利用率并提高数据的读写和计算效能。
更进一步地,本公开还提供了一种卷积处理方法,包括:利用可重构计算芯片,对输入特征图和卷积核进行卷积处理以获得输出特征图,其中,所述可重构计算芯片的多个处理单元被动态地配置为对所述输入特征图的一部分和卷积核的一部分进行乘加处理以获得所述输出特征图的一部分;其中,所述可重构计算芯片包括处理模块,所述处理模块包括多个处理核心,所述多个处理核心共享第一缓存,其中,所述多个处理核心中的每个处理核心包括所述多个处理单元,所述多个处理单元共享第二缓存,所述多个处理单元中的每个处理单元独占所述处理单元对应的第三缓存。
根据本公开的另一方面,本公开还提供了一种计算设备1100,其可以用作终端设备或服务器。如图5所示,计算设备1100可以包括总线1110、一个或多个CPU 1120、只读存储器(ROM)1130、随机存取存储器(RAM)1140、连接到网络的通信端口1150、输入/输出组件1160、硬盘1170等。计算设备1100中的存储设备,例如ROM 1130或硬盘1170可以存储计算机处理和/或通信使用的各种数据或文件以及CPU所执行的程序指令。计算设备1100还可以包括用户界面1180。当然,图5所示的架构只是示例性的,在实现不同的设备时,根据实际需要,可以省略图5示出的计算设备中的一个或多个组件。
本公开的实施例也可以被实现为计算机可读存储介质。根据本公开实施例的计算机可读存储介质上存储有计算机可读指令。当计算机可读指令由处理器运行时,可以执行参照以上附图描述的根据本公开实施例的方法。计算机可读存储介质包括但不限于例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
根据本公开的实施例,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序包括计算机可读指令,该计算机可读指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机可读指令,处理器执行该计算机可读指令,使得该计算机设备执行上述各个实施例中描述的方法。
根据本公开实施例的另一方面,还提供了一种计算机可读存储介质,其上存储有计算机可读指令,所述计算机可读指令在被处理器执行时,使得所述处理器执行如本公开上述各个方面中任一项所述的方法。
根据本公开实施例的另一方面,还提供了一种计算机程序产品,其包括计算机可读指令,所述计算机可读指令在被处理器执行时,使得所述处理器执行如本公开上述各个方面中任一项所述的方法。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,该模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
需要说明的是,在本文中,诸如第一和第三等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所附权利要求及其等同物的保护范围为准。