高效的稀疏并行的基于威诺格拉德的卷积方案的制作方法

文档序号:13137853阅读:279来源:国知局
高效的稀疏并行的基于威诺格拉德的卷积方案的制作方法

相关申请的交叉引用

本专利申请要求根据35u.s.c.119(e)条的于2016年5月31日提交的美国临时专利申请no.62/343,721和2017年5月11日提交的美国专利申请no.15/593,210的优先权权益,其公开内容通过引用全部并入本文。

本文公开的主题总地涉及卷积神经网络(convolutionalneuralnetwork,cnn),并且更具体地,涉及一种在基于winograd(威诺格拉德)的卷积实现中有效地并行跳过0值权重的装置和方法。



背景技术:

对于网络训练期间所做的推理和反向传播,卷积运算约占执行cnn所需的计算量的90%。基于winograd的卷积方法显著地减少了cnn中执行卷积运算所需的乘法运算次数。根据滤波器内核的大小和由winograd变换产生的输出阵列的大小,所述减少可能在乘法运算次数的2倍到4倍之间,并且在某些情况下可能会有更大的减少。然而,乘法运算的减少的代价是将输入数据(从输入特征图读取的)变换为winograd域(其中需要一些加法操作)时的一些开销。此外,权重内核(weightkernel)必须变换为winograd域,但这一般可以在线下完成。在对变换后的数据和变换后的权重内核矩阵进行逐元素(element-wise)的乘法运算后,需要进行最终的变换,但这可以在对来自所有卷积的输入特征图的结果求和之后完成。因此,最终变换运算可以被分摊(amortized),使得开销的数量占全部运算的非常小的一部分。

与标准卷积内核一样,winograd变换的权重(winograd-transformedweight)矩阵中的大百分比的权重可以被消减(即设置为0)。例如,可以将50%的权重设置为等于0,在这种情况下,消减后剩余的权重内核矩阵元素可以被重新训练以保持整个神经网络的精度。

目前,卷积层处理的最佳实现由图形处理单元(gpu)完成。然而,gpu可能难以有效地实现并行0值权重跳过(parallel0-valueweightskipping)。gpu也不包括winograd变换的权重的消减,因此在该权重内核矩阵中可能会有相对小的稀疏性以利用跳过任何0值权重的优势。



技术实现要素:

一个示例性实施例提供了一种方法,其可以包括:通过第一输入数据路径(idp)单元将第一输入特征图变换到winograd域,其中变换的第一输入特征图可以包括第一多个输入小片(patch),并且其中所述第一多个输入小片的每一个输入小片可以包括多个元素;通过所述第一idp单元向请求组装单元(rau)提供第一多个请求,所述第一多个请求的每一个针对具有相应元素的变换后的权重内核中的第一多个非0权重;以及由第一乘法累加阵列(maa),通过将所述第一多个非0权重应用于每个输入矩阵的相应元素来为第一输出特征图并行产生多个输出矩阵。在一个实施例中,该方法还可以包括由第一idp单元内的位置确定器确定第一变换权重内核内的至少一个非0值权重的位置;并且其中由所述第一idp单元提供所述第一多个请求的步骤还可以包括由所述第一idp单元提供所述第一多个请求到rau,所述第一多个请求中的每一个请求针对具有相应元素的变换后的权重内核中的所述第一多个非0权重,并且跳过与第一变换后权重内核中的至少一个0值权重的位置相对应的请求。

一个示例性实施例提供了一种从输入特征图生成多个输出特征图的系统,其中该系统可以包括idp、rau和maa。idp可以将第一输入特征图变换到winograd域,在该域中变换后的第一输入特征图可以包括第一多个输入矩阵,并且第一多个输入矩阵的每一个输入矩阵可以包括多个元素。其中第一idp可以还产生第一多个请求,每个请求针对具有相应元素的变换后的权重内核的第一多个非0权重。rau可以耦合到第一idp以接收第一多个请求。maa可以耦合到rau,以基于将第一多个非0权重应用于每个输入矩阵的相应元素为第一输出特征图并行产生多个输出矩阵。在一个实施例中,该系统还可以包括位置确定器,以确定第一变换后的权重核内的至少一个0值权重的位置,其中第一idp单元还可以提供第一多个请求到rau,每个请求针对具有相应元素的变换后的权重内核中的第一多个非0权重,并且跳过与所述第一变换后的权重内核中的所述至少一个0值权重的位置相对应的请求。

附图说明

在下面的部分中,将参考附图中示出的示例性实施例来描述本文公开的主题的方面,其中:

图1描绘了应用于n个8×8的特征图的winograd变换,其中n是大于或等于2的整数;

图2描绘了根据本文公开的主题的有效地对n个winograd变换的特征图矩阵进行卷积以形成输出图小片的系统架构的示例性实施例;

图3描绘了根据本文公开的主题的乘法-累加阵列的示例性实施例中的请求-组装单元的示例实施例;

图4描绘了根据本文公开的主题的与系统架构的并行性质相关的附加示例细节;和

图5描绘了根据本文公开的主题的一种电子设备,其包括形成在基于winograd的卷积实现中有效地并行跳过0值权重的系统的一个或多个集成电路(芯片)。

具体实施方式

在下面的详细描述中,阐述了许多具体细节以便提供对本公开的透彻理解。然而,本领域技术人员将会理解,可以在没有这些具体细节的情况下实践所公开的方面。在其他情况下,没有详细描述公知的方法、过程、组件和电路以便不模糊本文公开的主题。

整个说明书中对“一个实施例”或“实施例”的引用意味着结合实施例描述的特定特征、结构或特性可以包括在本文公开的至少一个实施例中。因此,贯穿本说明书的各个地方的短语“在一个实施例中”或“在实施例中”或“根据一个实施例”(或具有相似导入的其他短语)的出现可能不一定都指代相同的实施例。此外,特定特征、结构或特性可以以任何合适的方式组合在一个或多个实施例中。在这方面,如本文所使用的,词语“示例性”是指“用作示例、实例或说明”。本文中描述为“示例性”的任何实施例不应被解释为与其他实施例相比优选或有利。此外,根据本文讨论的上下文,单个术语可以包括相应的复数形式,并且多项可以包括相应的单数形式。还要注意的是,本文所示和讨论的各种附图(包括组件图)仅用于说明的目的,而不是按比例绘制的。类似地,仅为了说明的目的示出了各种波形和时序图。例如,为了清楚起见,相对于其它元素,某些元素的尺寸可能被夸大。此外,如果认为适当的话,附图中重复了附图标记,以表示对应的和/或类似的元素。

本文使用的术语仅用于描述特定示例性实施例的目的,并不旨在限制所要求保护的主题。如本文所使用的,单数形式“一”和“该”意图也包括复数形式,除非上下文另有明确指出。将进一步理解,当在本说明书中使用时,术语“包括””指定所述特征、整数、步骤、运算、元素和/或组件的存在,但不排除存在或添加一个或多个其它特征、整数、步骤、运算、元素、组件和/或其组合。如本文所使用的术语“第一”、“第二”等用作其名称的标号,除非明确定义,否则它们之前并不意味着任何类型的排序(例如空间、时间、逻辑等)。此外,在两个或多个附图中可以使用相同的附图标记来表示具有相同或相似功能的部分、组件、块、电路、单元或模块。然而,这样的用法仅仅是为了简单说明和容易讨论;这并不意味着这些组件或单元的结构或结构细节在所有实施例中是相同的,或者这样的共同引用的部分/模块是实现本文公开的特定实施例的教导的唯一方式。

除非另有定义,本文使用的所有术语(包括技术和科学术语)具有与本主题所属领域的普通技术人员通常理解的相同的含义。例如,本文所用的术语“mod”是指“模”。还将理解,诸如在常用词典中定义的术语应当被解释为具有与其在相关领域的上下文中的含义一致的含义并其不应被以理想化或过度正式的意义来解释,除非在此明确定义。

如本文所使用的,术语“模块”是指被配置引用提供本文结合模块描述的功能的软件、固件和/或硬件的任何组合。适用于本文所述的任何实现的术语“软件”可以被实现为软件包、代码和/或指令集或指令。应用于本文所述的任何实现的术语“硬件”可以包括例如单独地或以任何组合形式存储由可编程电路执行的指令的硬连线电路、可编程电路、状态机电路和/或固件。模块可以集体地或单独地被实现为形成较大系统的一部分的软件、固件和/或硬件,诸如但不限于集成电路(ic)、片上系统(soc)等等。

本文公开的主题提供了一种在基于winograd的卷积实现中有效地并行跳过0值权重的系统。在一个实施例中,本文公开的主题涉及一个系统,在该系统中多个输入特征图(ifm)中的多个输入节点被并行卷积,从而最大化计算吞吐量。在一个特定实施例中,4个或8个输入特征图可以被并行卷积,并且从每个特征图,卷积输出的4×4的小片被生成并且被求和,从而提供每个周期64或128个卷积输出值的吞吐量。在其他实施例中,输入特征图的数量可以被缩放以并行处理任何数量的输入特征图和/或更大或更小的小片。

根据一个实施例,多个输入单元,其中每个输入单元对应于一个输入特征图,可以将输入特征图与相应的滤波器内核进行卷积,然后将结果求和以生成多个输出特征图(ofm)。在每个输入特征图中,多个小片可以被变换到例如winograd域。例如,在每个输入特征图中可以将16个2×2的小片变换到winograd域,这可以构成输入特征图的8×8的区域。然后,每个输入特征图被与不同的滤波器内核进行卷积。滤波器内核被离线变换到winograd域并在该域中被消减,因此变换后的某些权重可能具有0值。在每个相应的滤波器内核中,0值权重可以在不同的位置。通过对变换后的输入小片元素与变换后的权重值进行逐元素相乘来完成卷积。在每个输入特征图中,通过每个周期对所有变换后的数据矩阵应用仅一个变换后的权重来执行逐元素相乘。通过一次应用一个权重,0值权重的处理可以通过遍历变换后的滤波器内核中的非0权重而被跳过。每个权重与逐元素的乘法运算中的2d位置相关联。

例如,滤波器内核中的位置(1,3)处的权重值可以被用来计算元素(1,3)并且被应用于(1,3)处的变换后的输入数据元素。如果存在16个小片,则该权重在同一周期中被应用于所有16个小片的(1,3)位置中的数据元素,并且被加到对应于(1,3)位置的16个累加器。由于存在并行处理的多个输入特征图,每个具有不同的内核,所以该过程可以被复制例如8次,因此在一个周期中,一个非0的变换后的权重被应用于相应输入特征图的相应元素。一个输入特征图滤波器内核可能例如在位置(1,3)具有非0权重,而另一个输入特征图滤波器内核可能在位置(2,2)处具有非0权重。在同一周期中,可以发出请求以在两个不同位置应用非0权重。其他六个输入特征图单元将尝试在其他位置应用非0权重,因为通常它们在它们各自的权重内核中的不同2d位置可以具有0。

对于给定输出元素(例如在位置(1,3))的来自所有输入特征图的所有贡献可以由输入单元在同一周期中处理。输入单元对8个输入(每个来自不同的输入特征图)应用8个权重,将结果求和,并将结果加到相应的累加器——在这种情况下为对应于位置(1,3)的累加器。由于所述贡献是为了更新相同的输出元素,因此对于所有8个输入特征图处理的权重位置是相同的——在这种情况下是位置(1,3)。

由于对于过滤器内核中的相同位置处理权重,并且输入单元正在请求对不同位置应用权重,所以请求-组装单元可以将多个周期上的不同请求合并并且重新排序成更大请求,该更大请求在每个周期中仅对于单个位置处理权重。在第一周期中,一个输入单元可以请求处理位置(1,3)处的权重,并且第二输入单元可以请求处理位置(0,1)处的权重。在第二周期中,第一输入单元可以请求处理位置(0,1)处的权重,并且第二输入单元可以请求处理位置(1,3)处的权重。作为响应,请求-组装单元可以重新排序所述输入请求,使得在一个周期中位置(1,3)处的权重被处理并且在随后的周期中位置(0,1)处的权重被处理。通过并行处理输入特征图,可以从多个输入特征图生成多个输出特征图。

根据另一个实施例,多个输入特征图被并行卷积并且被求和以产生一个输出特征图。每个输入特征图和相应的变换后的权重矩阵由idp单元处理。在对8个输入特征图并行卷积的系统配置中,存在8个idp单元,其中每个idp单元处理8个输入特征图之一和相应的内核权重。每个idp单元将一个输入特征图的16个小片变换为例如winograd域。例如,输入小片包括生成最终输出数据的2×2矩阵所需的winograd变换的数据。在应用3x3的内核以生成2x2的输出小片的情况下,输入数据可以被变换为4x4的winograd变换的输入。idp单元将每个输入特征图的16个输入小片进行变换,以生成输入特征图的16组4x4的变换后的输入小片。idp单元还选择相应的winograd变换的权重内核中的下一个非0权重,该内核也是4×4的矩阵。该权重具有相应xy位置,其确定16个变换后的输入小片中的每一个中的哪个元素将被乘以所选择的权重。例如,如果当前权重在内核中的位置(1,3)处,则选择16个变换后的输入小片的(1,3)元素。然后,该权重和16个输入值由请求-组装单元处理。其他七个idp单元以相同的方式并行处理其他相应的输入特征图和相应的权重内核。每个idp单元将所得到的权重和16个输入值在关于处理的请求中发送到请求-组装单元。

由于用于8个不同输入特征图的每个权重内核在不同位置具有0值,所以每个请求可以对应于不同的xy位置。例如,第一idp单元可以产生处理位置(1,3)处的权重的请求,而第二idp单元可以请求处理位置(0,0)处的权重,等等。16个乘法-累加单元(mau)的阵列耦合到请求-组装单元以处理所述请求。每个mau将8组输入值和相应的8个权重的集合当做输入。并行地,8个输入中的每一个被乘以其相应的权重以产生8个结果。该8个结果全部加到由idp单元维护的16个累加器寄存器之一中,每个累加器寄存器对应于由mau正在计算的输出小片的16个元素中的一个。16个mau中的每一个计算正被并行计算的16个输出小片中的不同的一个。耦合到一个mau中的输入都对应于在给定周期中计算的相同的输出值。例如,来自8个不同输入特征图的8个输入和它们对应的权重中的每一个可能是给定周期中位置(1,3)处的元素。每个idp单元产生对不同输入特征图的处理请求,并且由于相应的权重内核在内核中的不同位置处具有0权重,所以输入提取单元生成的请求可以针对不同的输出元素的处理。请求-组装单元的目的是接收在多个周期内所做的请求并且将请求重新排序,使得请求-组装单元向mau生成一个请求,其中来自8个输入特征图中的每一个的输入和权重对应于输出矩阵中的相同xy位置。例如,一个请求是要更新例如位置(1,3)处的输出元素,在这种情况下,8个权重来自相应权重矩阵的位置(1,3)处的元素和位置(1,3)处的输入数据元素。通过以这种方式重新组装请求,所有8个mau乘法器和这些mau乘法器之下的加法器可以并行执行计算并被完全使用。如果请求没有被重新排序,则在跳过0值权重的同时并行处理多个输入特征图将是不现实的。

对于所描述的实施例,并行处理16个输出小片以产生一个输出特征图的一部分。还可以并行处理多个输出特征图。例如,可以并行地生成16个输出特征图中的每一个的16个小片。在这种情况下,每个idp单元读取和变换单个输入特征图,但是16个不同的变换后的权重内核被应用于每个输入特征图,每个输出特征图一个内核。idp单元将输入数据的16个小片变换为例如winograd域。idp单元然后从16个内核中的每一个内核选择下一个非0权重——所有这些内核会对应于4x4的内核中的不同xy位置。idp单元然后向16个不同的请求-组装单元发送16个请求,每个请求-组装单元对应于不同的输出特征图。每个请求-组装单元馈入不同的一组16个mau。16个请求-组装单元和对应的16个mau中的每一个独立动作,每个产生一个输出图的16个小片。

在多个周期中,计算每个输出4×4矩阵的所有16个元素。当所有权重都已应用于对输出图有贡献的所有输入图的所有输入采样时,所得到的每个输出矩阵的16个累加值被馈送到诸如数据返回单元(dru)的最终处理单元。每个输出图可以有16个输出矩阵被并行处理,每个矩阵对应于输出图的一个输出小片并且每个矩阵包括16个元素。除了其他计算,dru可以计算输出元素从例如winograd域到线性空间的最终变换。在该最终变换中,4×4的矩阵可以被变换成2×2的小片,该小片的每个元素对应于输出图的一个元素。

与常规卷积的计算不同,在winograd方法中,相同的权重可能不被应用于相邻的输入样本。相反,在winograd卷积方法中,完成变换后的权重矩阵与变换后的输入元素的矩阵的逐元素乘法,以计算输出矩阵。输出矩阵是输出小片的winograd变换的表示。在2x2的输出小片的情况下,输入图数据、输出图数据和3x3的权重内核都是winograd域中的4x4矩阵。

在一个实施例中,xy维度被并行化以使得能够跳过0值权重,并且可以并行地处理16个4×4矩阵。在每个周期中,可以将一个变换后的权重应用于来自16个小片中的每一个的一个变换后的数据样本。例如,当应用3×3内核来生成2×2输出小片时,输入数据被变换为4×4矩阵并且被消减的winograd权重内核是4×4矩阵。与16个输出小片对应的16个矩阵被并行处理。将相同的变换后的权重矩阵应用于16个不同的变换后的输入矩阵。每个周期,从4×4权重矩阵中选择一个非0权重,并且该权重被应用于16个相应的元素,一个元素来自于变换后的输入矩阵中的每一个。只应用非0权重。0值权重没有任何效果因此被跳过,这节省处理周期和电力。不跳过0值权重,就需要16个逐元素乘法来计算每个4x4输出矩阵。如果16个权重中只有4个是非0的,则通过跳过0值权重的处理,只需要四个乘法来计算输出矩阵。通过对16个输出矩阵中的每一个并行处理相同的非0权重值,只需四个周期来处理所有16个矩阵。在这个例子中,通过跳过0值权重,速度增加至四倍。由于每个输出矩阵表示输出图中的2×2小片——四个元素——并且在跳过0值权重时需要四次乘法运算,应用利用winograd方案的卷积,因此每个输出元素的总计算仅为一次乘法。

相比之下,为了利用传统卷积实现方法应用3×3内核,每个输出需要九个乘法运算而不跳过0值权重,并且在传统实现方法中需要平均4.5个乘法运算(其中权重的一半是0,可以被跳过)。请注意,传统内核的网络消减后0值权重的典型百分比约为50%。对于被用于应用3x3内核以生成2x2的小片的winograd内核,非0权重的百分比更接近25%。

变换后的输入数据和变换后的权重矩阵的维度取决于输出小片的大小和内核的大小。在输出小片始终为2×2的一个实施例中,应用3×3内核涉及4×4变换后的权重和数据矩阵。在应用所有权重的情况下,用于生成2x2输出小片的3x3内核将涉及16个乘法。在另一个例子中,使用5x5内核来生成4x4小片,如果没有0值权重被跳过,则变换后的权重和数据矩阵是7x7并且此需要49个乘法来生成4x4输出小片。

可以通过进一步每个周期地并行处理多个输入图来增加总体吞吐量。例如,可以并行地从8个不同的输入图读取和变换用来生成给定输出图的16个输出小片的输入数据。将不同的内核应用于每个输入图,以生成该图对当前输出图的贡献。与这些不同内核中的每一个对应的被消减的winograd权重矩阵在不同位置具有0值权重。例如,将内核1应用于输入图1,将内核2应用于输入图2,依此类推。在对应于内核1的4x4权重矩阵中,考虑(0,0)处的0值权重。在第二个矩阵中,在(0,0)处有非0值。winograd方案对于所有输入图进行4x4矩阵的逐元素乘法并将结果求和,以得到最终的4x4输出矩阵。例如,对于输出矩阵的(0,0)元素,只有(0,0)变换后的数据元素和(0,0)权重元素被作乘法并被求和。乘法累加硬件单元应该在一个周期内仅将与一个输出矩阵元素对应的元素求和。例如,如果mau单元正在处理(2,2),则所有输入元素和对应的权重也必须对应于它们各自的矩阵的(2,2)元素。

每个周期中,idp将在其正在提取、变换和馈送到每个mau的其输入的输入图所对应的当前变换后的权重内核中找到下一个非0权重。当并行处理8个输入图时,有8个idp,每个idp处理不同的输入图和权重矩阵。每个权重矩阵在不同位置具有0。因此,每个周期中,每个idp发出对应于与其他idp不同的位置的元素(变换后的权重矩阵元素和输入矩阵元素)——任何对应于内核中的下一个非0权重。idp1可能会发出用于(1,1)权重和相应的输入数据,而idp2会在同一周期内发出用于(2,2)的值。由于这些值对应于不同的输出元素,所以它们不能在同一周期内被馈送到相同的mau中,这是因为mau做乘法并将积加到同一个累加器中。因此,在给定周期中由8个idp生成的到mau的输入必须被重新排序,然后再将其馈送到mau。请求组装单元接受8个请求(由8个idp中的每一个发出的输入元素和权重元素)、缓冲这些请求的多个周期,然后将这些请求重新排序以向mau发出重新排序的请求。由rau输出的请求仅具有与单个输出矩阵位置对应的权重和输入。例如,如果rau选择在给定周期中处理(2,2)输出元素,则它选择来自每个idp的缓冲的一个(2,2)请求,并在一个周期内将它们一起发送。它同时向mau发信号以选择对应于(2,2)输出矩阵元素的累加器。该发出的请求由每个mau在一个周期内处理,每个mau将8个权重元素乘以8个输入元素,再将积求和并将添加到所选择的累加器中。请注意,16个mau将并行处理16个输出小片,每个mau处理一个小片。所有mau将处理相同的位置并且对于给定的输入图被馈入相同的权重。通过重新排序idp跳过0权重时发出的分散的请求,rau使得能够并行处理多个输入图,同时跳过每个相应内核中的0值权重。

除了通过并行处理相同输出图的多个输出小片(例如16个小片)在xy维度中实现并行并且通过使多个idp中的每个并行地运算不同的输入图(例如8个输入图在rau中重新排序之后被馈送到每个mau中)来在输入通道维度中实现并行化之外,有可能在输出通道维度中实现并行化并且这是有利的。例如,可以并行生成16个输出图。这是通过复制idp中的逻辑来每个输出图处理一个权重内核并且通过与并行生成的输出通道的数量成比例地增加rau和maa的数量来完成。

除了通过增加并行产生的输出通道的数量来增加处理吞吐量之外,还将最小化将输入特征图数据变换到winograd域时所涉及的开销。将输出矩阵从winograd变换回线性域时也有一些开销,但是输出变换的成本已经非常低,这是因为只有在所有权重输入都已经被累加到最终输出矩阵之后才需要执行一次这样的变换。而这并不受在输出通道维度中实现并行化所影响。在一个实施例中,一次处理一个输出图。在这种情况下,每个输入图必须被读取并从线性变换到winograd域一次。在将所有输入图的加权贡献求和后,最终的4x4输出矩阵被从winograd变换为线性域一次。例如,如果需要64个输入图来生成输出图,则需要64个线性到winograd输入数据变换来生成一个输出小片。只需要一次变换来将4x4输出矩阵从winograd变换为线性域。在另一个实施例中,使用相同的一组输入图来并行地生成16个输出图,但是不同的内核被应用于每个输入图以生成每个不同的输出图。相同的64个输入图都被变换一次,并且变换后结果每个被使用16次以便为16个不同的输出图生成输出小片。在这种情况下,平均需要四个输入图变换来生成每个输出图小片。换句话说,每个输入图被变换一次并对16个不同的输出重复使用16次。在具有16个输出图的组中,需要64个输入图变换:64/16=4。因此,并行处理多个输出图在减少输入图读取和输入数据的变换方面显著更有效。

图1描绘了应用于n个8×8的特征图中的输入数据小片的winograd变换,其中n是大于或等于2的整数。在一个实施例中,n可以等于8。如图1所示,使用4×4变换矩阵(未示出)将包含在n个8×8的特征图中的每一个中的数据的部分变换为winograd域,以形成4×4的变换后的输入数据小片。也就是说,每个8×8的特征图的部分(如101a-101n处的粗线所示)通过变换矩阵(未示出)被变换到winograd域,成为4×4的变换后的特征图数据小片,并且然后利用逐元素乘法(最多16个乘法)矩阵将相应的4×4的变换和消减后的权重内核应用于该变换后的输入数据。应当理解,将输入数据变换为winograd域的变换矩阵不是与所述逐元素乘法矩阵一起使用的所述变换后的权重内核。所述变换后的权重内核中的低值权重可以被消减。所述变换后的权重内核可以包含非0权重值和等于0的权重值。将权重内核变换为winograd域和消减的过程可以在线下执行。本文公开的主题包括多个idp102a-102n,其中变换后的特征图数据小片的各个元素和相应的变换后的权重内核中的权重值被相乘以形成winograd域中的卷积矩阵。n个卷积矩阵中的元素分别被求和,并且103处表示的结果是被逆winograd变换以形成2×2的输出特征图小片。

图2描绘了根据本文公开的主题的系统架构200的示例性实施例,其有效地对n个winograd变换的特征图小片进行卷积以形成输出图矩阵。如idp102所示,8×8的特征图0已经以众所周知的方式被变换到winograd域。变换后的8x8的特征图0被组织成16个小片(小片0-小片15)。为了说明的目的,变换后的输入数据的4×4矩阵0在图2中被放大及被关注。对于该示例,矩阵0的每个位置可以包含8比特数据值。变换后的权重内核201中的位置处的权重值可以是8比特权重值。

位置确定器202基于该权重内核中的非0权重的位置来生成权重掩码203。在一个实施例中,权重掩码203中的1的位置是基于该权重内核中非0权重的对应位置。类似地,权重掩码203中的0的位置是基于权重内核中的等于0的权重的对应位置。为了说明的目的,权重掩码203中自右开始的第三个位置中的1的位置(以粗体显示)对应于该权重内核中的位置(1,3)中的变换后的数据元素的位置以及小片0中的位置(1,3)。

非0权重选择器204使用权重掩码203来驱动两个16:1的复用器205和206。复用器205选择包含在小片0-15的每个中的变换后的输入数据的元素,而复用器206从该权重内核中选择变换后的权重值。也就是说,非0权重选择器204驱动复用器205以选择与权重掩码203中的每个1的位置相对应的、小片0-15每个中的位置处的变换后的输入数据的元素。非0权重选择器204类似地驱动复用器206以选择与权重掩码203中的1的位置对应的、变换后的权重内核201中的位置处的变换后的权重值。作为示例,权重掩码203中的1(粗体)对应于小片0-15每个中的(1,3)处的变换后的数据元素和权重内核中的位置(1,3)处的变换后的权重值的位置。在一个实施例中,非0权重选择器204仅在与包含1的权重掩码203中的位置对应的位置处选择小片0-15每个中的变换后的数据和变换后的权重内核201中的变换的权重值,并且跳过对应于包含0的权重掩码203中的位置的、变换后的小片0-15以及权重内核中的位置,由此精简变换后的输入数据与相应的变换后的权重值的卷积。

复用器205的输出(变换后的数据)和复用器206的输出(变换后的权重值)被输入到maa240中的rau220。请求-组装单元220缓冲多个周期上来自多个idp的请求并将对相同的xy位置的请求组合成单个请求。请求-组装单元220将这个请求发送到包括16个mau的maa,该请求包括接收到的变换后的输入数据和相应的变换后的权重值以及用于选择累加寄存器(accregister)的位置选择。rau220接收来自每个idp102a-102n的请求(这些idp通常将不同位置处的权重应用到不同的输入图)并将输入的请求重新排序,使得在输出请求中所有权重(对于在系统架构200的示例性实施例中的8个idp102a-102n来说是8个权重)应用于相同的位置(即位置(1,3))。rau220在多个先前周期中接收的输入请求被在rau220的内部重新排序,以便将正在使用相同位置的8个请求合并成一个输出请求。在输出请求中,相同的8个权重被输入到所有mau,除了每个mau从不同的小片接收变换后的输入元素。rau220将接收到的变换后的输入数据和对应的变换后的权重值引导到的特定累加寄存器,对应于从其选择该变换后的输入数据的小片中的位置和从其选择变换后的权重值的权重内核中的位置,并且也对应于正在处理的输出矩阵中的位置。例如,使用变换后的小片0-15中的每一个中的(1,3)处的变换后的数据元素和权重内核201中的位置(1,3)处的变换后的权重值的范例,rau220将小片0中(1,3)处的变换后的数据元素和权重内核201中的位置(1,3)处的变换后的权重值引导到mau0(用于小片0)中的(1,3)寄存器,在其中变换后的输入数据和变换后的权重值相乘并累加。

请求-组装单元220类似地将小片1中的(1,3)处的变换后的数据元素和相应权重内核中位置(1,3)处的变换后的权重值引导到mau1(用于小片1)中的(1,3)寄存器,在该(1,3)寄存器中变换后的输入数据和变换后的权重值相乘并累加。该过程对于所有的小片继续进行,并且在小片15的情况下,rau220将小片15中的(1,3)处的变换后的数据元素和在相应的权重内核中的位置(1,3)处的变换后的权重值引导到mau15(用于小片15)中的(1,3)寄存器,在该(1,3)寄存器中变换后的输入数据和变换后的权重值被相乘并累加。

只有对应于权重掩码203中的1的每个小片中的位置处的变换后的输入数据和权重内核中的位置处的变换后的权重值被输出到rau220,使得变换后的输入数据与相应的变换后的权重值的卷积被简化并且乘以0值的运算被消除。

每个idp102a-102n将变换后的输入数据和相应的变换后的权重值输出到rau220。位置确定器202还向rau220输出在给定周期内由每个相应的idp选择的权重内核中的非0权重的位置信息。图3描绘了根据本文公开的主题的maa240的示例性实施例内的rau单元220的示例实施例。rau220从每个idp接收作为请求的信息,并且重新排序来自不同idp102a-102n的各个请求,每个请求通常对应于不同的位置。例如,一个idp可能提交处理(1,3)元素的请求,而另一个idp可能请求处理(3,0)元素。在重新排序在给定周期内和先前周期内到达的8个请求时,rau220发出一个合并请求,该请求适用于一个位置——例如全部将用于位置(1,3)。

在一个实施例中,rau220包括多个请求单元221a-n和元素选择逻辑222。请求单元221a-221n分别从idp102a-102n接收变换后的数据、变换后的权重值和位置信息。元素选择逻辑222使用来自各个请求单元221的输出并选择将在下一周期中处理的变换后的权重。在一个实施例中,rau220在最近几个周期中接收来自所有n个idp的请求(其中每个请求表示要更新不同位置中的值的尝试)并且将要被处理以更新输出元素之一的权重和数据组装到一个周期中。

在一个实施例中,请求单元221包括请求缓冲器223、掩码阵列224、控制逻辑225、or(或)逻辑226和待处理(pending)-请求计数器227。请求缓冲器223从相应的idp102接收变换后的输入数据和变换后的权重值(请求)。在一个实施例中,请求缓冲器223可以包括16个缓冲器位置以顺序地从相应的idp接收16个条目。掩码阵列224从位置确定器201接收诸如权重掩码202的位置信息,并且将权重掩码202存储在与从idp102接收的变换后的输入数据和变换后的权重值相对应的条目中。在一个实施例中,掩码阵列224可以包括16个条目。or逻辑225将所接收的位置信息进行逻辑or运算,并且输出位置字,该位置字中的给定位置中的1表示该给定位置处的权重值。控制逻辑226包括用于定位和向mau发送由元素选择逻辑222选择的条目的逻辑、用于更新掩码阵列224中的掩码的逻辑以及响应于所选择的条目使待处理请求计数器227递减的逻辑。待处理请求计数器227可以针对由请求单元221接收的每个请求被递增。元素选择逻辑222使用来自or逻辑225和待处理请求计数器227的输出来选择将在下一周期中处理的变换后的权重。

元素选择逻辑222将请求单元221中与对同一元素(权重阵列中的x,y位置)的待处理请求的数量相加,并选择具有最大请求数量的元素。在一些情况下,所有n个请求单元221可以指示特定位置处的权重的出现,但是在另一些情况下,请求单元221中的一个或多个可以在特定位置没有请求,在这种情况下,这些请求单元不将权重和输入数据传输到相应的mau输入。请求缓冲器223的满度也可以是影响元素请求单元222的选择过程的因素。例如,在请求单元221的请求缓冲器223已满的情况下,元素请求单元222可以选择请求单元221的已满请求缓冲器223中的元素,以缓解已满队列状况,而不是优先选择具有最大请求总数的元素位置。已满队列还可能导致停滞(stall)信号(未示出)传播到相应的idp。

如前所述,系统架构200并行地从输入特征图生成多个输出特征图。例如,并行地从8个输入特征图生成16个输出小片。单个maa单元在一个输出特征图中生成16个输出小片。根据一个实施例,系统架构200可以从同一输入数据生成多个输出特征图,使得所述输出特征图可以被并行地处理。例如,16个maa单元并行生成16个输出特征图,并且也在每个输出特征图中并行生成16个小片。每个idp102从一个输入特征图读取并变换16个小片。不是从一个变换后的权重内核发出下一个非0权重,而是基于用于生成每个输出特征图的一个权重及其相应位置从16个不同的变换后的权重内核发出16个非0权重。

例如,在给定周期中,idp102a从用于生成输出特征图0的权重内核中发出权重(1,3),并且同时从用于生成输出特征图1的权重内核中发出权重(2,3)。所有权重都应用于同一变换后的输入数据的不同元素。将不同的权重和相应的输入数据元素发送到计算相应输出特征图的maa单元。这减少了读取和变换输入数据的开销。

图4描绘了根据本文公开的主题的与系统架构400的并行性质相关的附加示例细节。具体地,图4描绘了被处理以形成16个ofm的8个ifm的系统架构400的并行性质。如图4所示,存储器4010-4017可以分别存储用于8个ifm的输入特征图ifm0-ifm7。存储器4010-4017还可以存储将被应用于存储在存储器中的ifm的权重内核。存储在存储器401中的数据由相应的idp4020-40215处理以产生多个请求,所述多个请求由maa4040-40415内的rau4030-40315接收并由mau累加。图2和图3描绘了idp、rau、mau和maa的示例细节。存储在存储器中的数据被输入到相应的idp并且在16个maa中的每一个中被处理。应当理解,尽管存储器4010-4017被描绘为单独的,但是存储器4010-4017可以是单独存储器的组合或统一存储器。

图2-4中描绘的各种功能块可以被实现为从软件、固件和/或硬件的任何组合形成的模块,所述软件、固件和/或硬件被配置为提供结合功能块描述的功能。也就是说,可以实施图2-4的功能块的所述模块可以共同地或单独地被实现为形成更大系统的一部分的软件、固件和/或硬件,诸如但不限于ic、soc等等。

图5描绘了根据本文公开的主题的一种电子设备500,其包括形成可以在基于winograd的卷积实现中有效地并行跳过0值权重的系统的一个或多个集成电路(芯片)。电子设备500可以用于但不限于计算设备、个人数字助理(pda)、膝上型计算机、移动计算机、网络平板电脑、无线电话、蜂窝电话、智能电话、数字音乐播放器或有线或无线电子设备。电子设备500可以包括通过总线550彼此耦合的控制器510、诸如但不限于键区、键盘、显示器、触摸屏显示器、照相机和/或图像传感器的输入/输出设备520、存储器530和接口540。控制器510可以包括例如至少一个微处理器、至少一个数字信号处理、至少一个微控制器等。存储器530可以被配置用于存储要由控制器510使用的命令代码或用户数据。根据本文公开的主题,电子设备500和电子设备500的各种系统组件可以形成一个系统,该系统在基于winograd的卷积实现中有效地并行跳过0值权重。接口540可以被配置为包括无线接口,该无线接口被配置用于使用rf信号向无线通信网络发送数据或从无线通信网络接收数据。无线接口540可以包括例如天线、无线收发器等。电子系统500还可以在如下通信系统的通信接口协议中使用,例如但不限于码分多址(cdma),全球移动通信系统(gsm)、北美数字通信(nadc)、扩展时分多址(e-tdma)、宽带cdma(wcdma)、cdma2000、wi-fi、市政wifi(muniwi-fi)、蓝牙、数字增强无绳电信(dect)、无线通用串行总线(wirelessusb)、无缝切换正交频分复用快速低延迟访问(flashofdm)、ieee802.20、通用分组无线业务(gprs)、iburst、无线宽带(wibro)、wimax、wimax高级、通用移动电信服务-时分双工(umts-tdd)、高速分组接入(hspa)、演进数据优化(evdo)、长期演进-高级(lte-advanced)、多信道多点分配服务(mmds)等。

如本领域技术人员将认识到的,本文所描述的创新概念可以在广泛的应用中进行修改和变化。因此,所要求保护的主题的范围不应当限于上述讨论的任何具体的示例性教导,而是由所附权利要求限定。

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