具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如上所述,传统方案利用块大小的掩码来指示块内部的边界。但是传统方案存在两个问题:1)花费了过多的比特来编码块内部的样本边界,从而需要额外的总线带宽来传输这些掩码,以及需要额外的片上存储空间用于存储这些掩码;2)矩阵计算单元需要从掩码推断块内部的边界,从而增加了设计复杂度。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本公开的示例实施例提出了一种用于执行矩阵计算的方案。在该方案中,处理器获取目标矩阵,目标矩阵包括具有第一尺寸的多个子矩阵,目标矩阵被划分为具有第二尺寸的多个块,第二尺寸与第一尺寸不同,以及对于多个块中的每个当前块,执行以下步骤:生成当前块中的左子矩阵边界相对于当前块中的预定列的第一偏移量、当前块中的右子矩阵边界相对于当前块中的预定列的第二偏移量、当前块中的上子矩阵边界相对于当前块中的预定行的第三偏移量和当前块中的下子矩阵边界相对于当前块中的预定行的第四偏移量。矩阵计算单元对于多个块中的每个当前块,基于第一偏移量、第二偏移量、第三偏移量和第四偏移量,对当前块进行填充。
以此方式,通过4个偏移量指示块内的4个子矩阵边界,能够减少用于表示块内的样本边界的比特数量,从而降低总线传输数据量和存储空间。此外,通过明确指示4个子矩阵边界的4个偏移量,无需矩阵计算单元120基于掩码来推导边界的复杂逻辑,从而简化了设计。
在下文中,将结合附图更详细地描述本方案的具体示例。
图1示出了根据本公开的实施例的计算设备100的示例的示意图。如图1所示,计算设备100可以包括(一个或多个)处理器110、(一个或多个)矩阵计算单元120和存储器130。处理器110、矩阵计算单元120和存储器130通过总线140进行耦合。
处理器110包括一个或多个通用或专用微处理器,其运行用于执行控制、计算、输入/输出等功能的指令。处理器110可以包括单个集成电路,例如微处理设备,或配合工作以完成处理器110的功能的多个集成电路设备和/或电路板。另外,处理器110可以运行在存储器130中存储的计算机程序或模块,例如操作系统、软件模块等。例如,软件模块可以包括机器学习应用、人工神经网络(ANN)应用、卷积神经网络(CNN)应用等。
处理器110包括但不限于:标量处理器(Scalar Processor), SIMD (SingleInstruction Multiple Data,单指令多数据)处理器, SIMT(Single InstructionMultiple Threads,单指令多线程)处理器,以及矢量处理器(Vector Processor)。
处理器110可以被配置成获取目标矩阵,目标矩阵包括具有第一尺寸的多个子矩阵,目标矩阵被划分为具有第二尺寸的多个块,第二尺寸与所述第一尺寸不同;以及对于多个块中的每个当前块,生成当前块中的左子矩阵边界相对于当前块中的预定列的第一偏移量、当前块中的右子矩阵边界相对于当前块中的预定列的第二偏移量、当前块中的上子矩阵边界相对于当前块中的预定行的第三偏移量和当前块中的下子矩阵边界相对于当前块中的预定行的第四偏移量。
矩阵计算单元120可以用于接收指令以及执行指令,以及对矩阵进行各种计算,例如乘法、加法、卷积等,以支持软件模块所实现的各种应用。矩阵计算单元120的示例包括但不限于现场可编程门阵列(FPGA)、图形处理单元(GPU)、专用集成电路(ASIC)等。矩阵计算单元120可以具有内部存储单元,例如静态随机存取存储器(SRAM),用于存储矩阵计算过程中的相关数据,例如目标矩阵、块、第一偏移量、第二偏移量、第三偏移量和第四偏移量等。应当理解,本文所述的矩阵包括2维矩阵、3维矩阵乃至多维矩阵,其涵盖了张量的概念。
矩阵计算单元120可以被配置成对于所述多个块中的每个当前块,基于第一偏移量、第二偏移量、第三偏移量和第四偏移量,对当前块进行填充,以用于执行矩阵计算。
存储器130用于存储由处理器110和/或矩阵计算单元120执行的指令以及数据。
总线140用于在处理器110、矩阵计算单元120和存储器130之间传递数据。例如,总线140可以根据处理器110的指令将第一偏移量、第二偏移量、第三偏移量和第四偏移量从处理器110传递给矩阵计算单元120。总线140也可以根据处理器110的指令将数据(例如,目标矩阵、块等)从存储器130传递给矩阵计算单元120。
由此,能够通过4个偏移量指示块内的4个子矩阵边界,能够减少用于表示块内的样本边界的比特数量,从而降低总线传输数据量和存储空间。此外,通过明确指示4个子矩阵边界的4个偏移量,无需矩阵计算单元120基于掩码来推导边界的复杂逻辑,从而简化了设计。
图2示出了根据本公开的实施例的用于执行矩阵计算的方法200的流程图。例如,方法200可以由如图1所示的计算设备110来执行。应当理解的是,方法200还可以包括未示出的附加框和/或可以省略所示出的框,本公开的范围在此方面不受限制。
在框202处,处理器110获取目标矩阵,目标矩阵包括具有第一尺寸的多个子矩阵,目标矩阵被划分为具有第二尺寸的多个块,第二尺寸与第一尺寸不同。
图3示出了根据本公开的实施例的目标矩阵300的示意框图。如图3所述,目标矩阵300包括16个子矩阵310(也可以称为样本)。这16个子矩阵分为4行4列。每个子矩阵310的尺寸为14*14个像素。目标矩阵300还被划分为49个块(数据块,也可以称为片,tile)320。49个块320分为7行7列。每个块320的尺寸为8*8个像素。卷积运算例如可以逐块320进行。应当理解,图3中的目标矩阵、子矩阵和块仅是举例说明,目标矩阵、子矩阵和块可以具有其他的尺寸。还应当理解,这里的像素仅是举例说明,也可以包括其他类型的数据。
回到图2,在框204处,处理器110可以对于多个块中的每个当前块,生成当前块中的左子矩阵边界相对于当前块中的预定列的第一偏移量、当前块中的右子矩阵边界相对于当前块中的预定列的第二偏移量、当前块中的上子矩阵边界相对于当前块中的预定行的第三偏移量和当前块中的下子矩阵边界相对于当前块中的预定行的第四偏移量。
具体来说,处理器110可以确定当前块中是否存在垂直的子矩阵边界。如果处理器110确定当前块中不存在垂直的子矩阵边界,则将第一偏移量和第二偏移量设置为0。
在一些实施例中,如果处理器110确定当前块中存在一条垂直的子矩阵边界,则可以将第一偏移量设置为0,以及将第二偏移量设置为垂直的子矩阵边界相对于当前块中的预定列的偏移量。
备选地,在另一些实施例中,如果处理器110确定当前块中存在一条垂直的子矩阵边界,则可以将第一偏移量设置为垂直的子矩阵边界相对于当前块中的预定列的偏移量,以及将第二偏移量设置为0。
预定列例如包括但不限于第一列。
此外,处理器110还可以确定当前块中是否存在水平的子矩阵边界。如果处理器110确定当前块中不存在水平的子矩阵边界,则可以将第三偏移量和第四偏移量设置为0。
在一些实施例中,如果处理器110确定当前块中存在一条水平的子矩阵边界,则可以将第三偏移量设置为0,以及将第四偏移量设置为水平的子矩阵边界相对于当前块中的预定行的偏移量。
备选地,在另一些实施例中,如果处理器110确定当前块中存在一条水平的子矩阵边界,则可以将第三偏移量设置为水平的子矩阵边界相对于当前块中的预定行的偏移量,以及将第四偏移量设置为0。
预定行例如包括但不限于第一行。
第一偏移量可以通过第一数量个比特来表示。第一数量大于或等于用于表示当前块的列数的最小比特数量。例如,对于尺寸为8*8的块而言,其列数为8,用于表示8的最小比特数量为3个比特,因而可以用3个或更多比特来表示第一偏移量。第二偏移量的表示方式与第一偏移量类似,不再赘述。
第三偏移量可以通过第二数量个比特来表示。第二数量大于或等于用于表示当前块的行数的最小比特数量。例如,对于尺寸为8*8的块而言,其行数为8,用于表示8的最小比特数量为3个比特,因而可以用3个或更多比特来表示第三偏移量。第四偏移量的表示方式与第三偏移量类似,不再赘述。
应当理解,上面以8*8的块举例说明了第一偏移量到第四偏移量的表示形式,但是这只是举例说明,块可以具有更大或更小的尺寸或者不同规格的尺寸,例如长和宽不同,从而用于表示第一偏移量到第四偏移量的比特数量也可随着尺寸的变化而发生变化,本公开的范围在此不受限制。
由此,对于8*8的块而言,用于表示块内的样本边界的开销可以从64比特降低到12比特,极大地降低了总线开销和存储空间开销。
在框206处,矩阵计算单元120可以对于多个块中的每个当前块,基于第一偏移量、第二偏移量、第三偏移量和第四偏移量,对当前块进行填充,以用于执行矩阵计算。
由此,通过4个偏移量指示块内的4个子矩阵边界,能够减少用于表示块内的样本边界的比特数量,降低总线传输数据量和存储空间的开销。此外,通过明确指示4个子矩阵边界的4个偏移量,无需矩阵计算单元120基于掩码来推导边界的复杂逻辑,从而简化了用于多样本卷积的填充逻辑中的硬件设计。
除了生成指示4个子矩阵边界的4个偏移量之外,处理器110还可以生成是否在这4个偏移量处进行填充的指示。
在一些实施例中,处理器110还可以确定针对目标矩阵的指令是第一预定指令还是第二预定指令。第一预定指令例如为卷积指令(CONV,Convolution instruction),例如用于神经网络中的前向传播路径(FWD,Forward),或反向传播路径中的激活梯度计算部分(BPA pass,Back Propagation of Activation gradients pass)。第二预定指令例如为矩阵乘加指令(MMA,Matrix Multiply Accumulation),例如用于反向传播路径中的权重梯度计算部分(BPW pass,Backward Pass for Weight gradients pass)。
如果处理器110确定针对目标矩阵的指令为第一预定指令,则对于多个块中的每个当前块,将第一填充指示、第二填充指示、第三填充指示和第四填充指示确定为第一预定值。
第一填充指示用于指示在第一偏移量处是否进行填充。第二填充指示用于指示在第二偏移量处是否进行填充。第三填充指示用于指示在第三偏移量处是否进行填充。第四填充指示用于指示在第四偏移量处是否进行填充。第一预定值用于表示不填充。
如果处理器110确定针对目标矩阵的指令为第二预定指令,则对于多个块中的每个当前块,基于第一偏移量、第二偏移量以及额外填充需求,生成第一填充指示和第二填充指示;以及基于第三偏移量、第四偏移量以及额外填充需求,生成第三填充指示和第四填充指示。
具体来说,处理器110可以确定第一偏移量和第二偏移量是否均为0。如果处理器110确定第一偏移量和第二偏移量均为0,则将第一填充指示和第二填充指示确定为第一预定值。
处理器110如果确定第一偏移量不为0,则可以确定在第一偏移量处是否需要额外填充。如果处理器110确定在第一偏移量处不需要额外填充,则可以将第一填充指示确定为第一预定值。如果处理器110确定在第一偏移量处需要额外填充,则可以将第一填充指示确定为第二预定值,第二预定值用于表示填充。
第一预定值例如为0,以及第二预定值例如为1,或者反之亦然。第一预定值和第二预定值可以通过1个比特来实现。
处理器110如果确定第二偏移量不为0,则确定在第二偏移量处是否需要额外填充。如果处理器110确定在第二偏移量处不需要额外填充,则可以将第二填充指示确定为第一预定值。如果处理器110确定在第二偏移量处需要额外填充,则可以将第二填充指示确定为第二预定值。
类似地,处理器110可以确定第三偏移量和第四偏移量是否均为0。如果处理器110确定第三偏移量和第四偏移量均为0,则将第三填充指示和第四填充指示确定为第一预定值。
处理器110如果确定第三偏移量不为0,则可以确定在第三偏移量处是否需要额外填充。如果处理器110确定在第三偏移量处不需要额外填充,则可以将第三填充指示确定为第一预定值。如果处理器110确定在第三偏移量处需要额外填充,则可以将第三填充指示确定为第二预定值。
处理器110如果确定第四偏移量不为0,则确定在第四偏移量处是否需要额外填充。如果处理器110确定在第四偏移量处不需要额外填充,则可以将第四填充指示确定为第一预定值。如果处理器110确定在第四偏移量处需要额外填充,则可以将第四填充指示确定为第二预定值。
由此,能够针对矩阵乘加指令(MMA,Matrix Multiply Accumulation),仅在对于反向传播路径中的权重梯度计算部分(BPW pass)在偏移量处需要额外填充时,将对应填充指示设置为表示填充的值,而在其他情况将对应填充指示设置为表示不填充的值,便于矩阵计算单元基于填充指示来对块进行填充。
第一偏移量和第一填充指示可以一起表示为第三数量个比特。第三数量例如包括但不限于用于表示当前块的列数的最小比特数量+1。例如,对于8*8的块而言,可以用3+1=4个比特来表示第一偏移量和第一填充指示。在一些实施例中,第一填充指示可以通过第三数量个比特中的最高位比特来表示,例如4个比特中的bit3。在另一些实施例中,第一填充指示可以通过4个比特中的最低位比特来表示,例如4个比特中的bit0。
类似地,第二偏移量和第二填充指示也可以一起表示为第三数量个比特。第二填充指示也可以通过最高位比特或最低位比特来表示。
第三偏移量和第三填充指示可以一起表示为第四数量个比特。第四数量例如包括但不限于用于表示当前块的行数的最小比特数量+1。例如,对于8*8的块而言,可以用3+1=4个比特来表示第三偏移量和第三填充指示。在一些实施例中,第三填充指示可以通过第四数量个比特中的最高位比特来表示,例如4个比特中的bit3。在另一些实施例中,第三填充指示可以通过第四数量个比特中的最低位比特来表示,例如4个比特中的bit0。
类似地,第四偏移量和第四填充指示也可以一起表示为第四数量个比特。第四填充指示也可以通过最高位比特或最低位比特来表示。
由此,对于8*8的块而言,用于表示块内的样本边界的开销可以从64比特降低到16比特,极大地降低了总线开销和存储空间开销。
在一些实施例中,处理器110如果确定针对目标矩阵的指令为第二预定指令,则确定针对当前块的加载指令中是否指示左移填充。针对当前块的加载指令可以用于将当前块从存储器130加载到矩阵计算单元120内部的存储单元中。例如,针对当前块的加载指令为LDCONV(Load convolution instruction),其中使用的padx=1表示右移填充,padx=-1表示左移填充。应当理解,这里以pad=1表示右移填充,以padx=-1表示左移填充仅是举例说明,也可以采用padx=-1表示右移填充,padx=1表示左移填充,或者任何其他的合适形式来表示,本公开的范围在此不受限制。
如果处理器110确定针对当前块的加载指令中指示左移填充,则将第一偏移量和第二偏移量中的非零偏移量减1。例如,如果确定padx=-1,也就是表明加载指令指示左移填充,则确定第一偏移量是否大于零,如果第一偏移量大于0,则将第一偏移量减1,还确定第二偏移量是否大于零,如果第二偏移量大于0,则将第二偏移量减1。
由此,在加载块时进行左移填充的情况下,原有的元素均向左移动了1位,使得元素的水平偏移量减小了1,通过使得非零的第一偏移量和第二偏移量减1,从而得到左移填充后的正确水平偏移。
备选地或者附加地,在一些实施例中,处理器110如果确定针对目标矩阵的指令为第二预定指令,则确定针对当前块的加载指令中是否指示上移填充。例如,针对当前块的加载指令为LDCONV,其中使用的pady=1表示下移填充,pady=-1表示上移填充。
如果处理器110确定针对当前块的加载指令中指示上移填充,则将第三偏移量和第四偏移量中的非零偏移量减1。例如,如果确定pady=-1,也就是表明加载指令指示上移填充,则确定第三偏移量是否大于零,如果第三偏移量大于0,则将第三偏移量减1,还确定第四偏移量是否大于零,如果第四偏移量大于0,则将第四偏移量减1。
由此,在加载块时进行上移填充的情况下,原有的元素均向上移动了1位,使得元素的垂直偏移量减小了1,通过使得非零的第三偏移量和第四偏移量减1,从而得到上移填充后的正确垂直偏移。
矩阵计算单元120可以对于多个块中的每个当前块,基于第一偏移量、第二偏移量、第三偏移量和第四偏移量、第一填充指示、第二填充指示、第三填充指示和第四填充指示,对当前块进行填充。
具体来说,矩阵计算单元120基于第一填充指示,在当前块中相对于预定列的第一偏移量处进行填充,基于第二填充指示,在当前块中相对于预定列的第二偏移量处进行填充,基于第三填充指示,在当前块中相对于预定行的第三偏移量处进行填充,以及基于第四填充指示,在当前块中相对于预定列的第一偏移量处进行填充。
例如,矩阵计算单元120如果确定第一填充指示等于第一预定值(例如0),则在当前块中相对于预定列的第一偏移量处不进行填充。矩阵计算单元120如果确定第一填充指示等于第二预定值(例如1),则在当前块中相对于预定列的第一偏移量处进行填充,例如0值或周围值。第二填充指示也是类似,不再赘述。
例如,矩阵计算单元120如果确定第三填充指示等于第一预定值(例如0),则在当前块中相对于预定行的第三偏移量处不进行填充。矩阵计算单元120如果确定第三填充指示等于第二预定值(例如1),则在当前块中相对于预定行的第三偏移量处进行填充,例如0值或周围值。第四填充指示也是类似,不再赘述。
由此,矩阵计算单元能够直接基于填充指示在块中的对应偏移量处进行填充,使得用于诸如前向传播路径(FWD),反向传播路径中的激活梯度计算部分(BPA pass)以及权重梯度计算部分(BPW pass)中的多样本卷积的填充逻辑的硬件设计得到简化。
下面结合图4-图12举例说明本公开的一些填充示例。
示例1
[x30, x31, x32, x33, x34, x35, x36, x37]为经由带有padx=0的加载指令LDCONV加载后的数据。
由于在当前块内部没有样本边界,因此第一偏移量x0=0,第二偏移量x1=0。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=0;x1的bit3=0,x1[2:0]=0。
如图4所示,由于x0的bit3和x1的bit3均为0,因而使用该数据的矩阵计算单元将不会对该数据进行额外填充。
示例2
[pad, x30, x31, x32, x33, x34, x35, x36] 为经由带有padx=1的加载指令LDCONV加载后的数据。应当理解,由于padx=1,因而加载指令LDCONV已经将行数据向右平移一个像素,并且在空出的位置进行了填充。
由于在当前块内部没有样本边界,因此第一偏移量x0=0,第二偏移量x1=0。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=0;x1的bit3=0,x1[2:0]=0。
如图5所示,由于x0的bit3和x1的bit3均为0,因而使用该数据的矩阵计算单元将不会对该数据进行额外填充。
示例3
[x31, x32, x33, x34, x35, x36, x37, pad] 为经由带有padx=-1的加载指令LDCONV加载后的数据。应当理解,由于padx=-1,因而加载指令LDCONV已经将行数据向左平移一个像素,并且在空出的位置进行了填充。
由于在当前块内部没有样本边界,因此第一偏移量x0=0,第二偏移量x1=0。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=0;x1的bit3=0,x1[2:0]=0。
如图6所示,由于x0的bit3和x1的bit3均为0,因而使用该数据的矩阵计算单元将不会对该数据进行额外填充。
示例4
[x30, x31, x32, x33, x34, x35, x36, x37] 为经由带有padx=0的加载指令LDCONV加载后的数据。
由于在当前块内部在x=6处存在样本边界,因此第一偏移量x0=0,第二偏移量x1=6。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=0;x1的bit3=0,x1[2:0]=6。
如图7所示,由于x0的bit3和x1的bit3均为0,因而使用该数据的矩阵计算单元将不会对该数据进行额外填充。
示例5
[pad, x30, x31, x32, x33, x34, x35, x36] 为经由带有padx=1的加载指令LDCONV加载后的数据。应当理解,由于padx=1,因而加载指令LDCONV已经将行数据向右平移一个像素,并且在空出的位置进行了填充。
由于在当前块内部在x=6处存在样本边界,因此第一偏移量x0=0,第二偏移量x1=6。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=0;x1的bit3=1,x1[2:0]=6。
如图8所示,由于x1的bit3为1,指示需要进一步填充,并且x1[2:0]=6指示了填充执行的位置,因而使用该数据的矩阵计算单元会将x=6处的数据x35替换为填充值(例如0)。进行实际矩阵乘法运算的行数据变为[pad, x30, x31, x32, x33, x34, pad, x36]。
示例6
[x31, x32, x33, x34, x35, x36, x37, pad]为经由带有padx=-1的加载指令LDCONV加载后的数据。应当理解,由于padx=-1,因而加载指令LDCONV已经将行数据向左平移一个像素,并且在空出的位置进行了填充。
由于在当前块内部在x=6处存在样本边界,因此第一偏移量x0=0,第二偏移量x1=6。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=0;x1的bit3=1,x1[2:0]=5(当前x=原始x-1)。
如图9所示,由于x1的bit3为1,指示需要进一步填充,并且x1[2:0]=5指示了填充执行的位置,因而使用该数据的矩阵计算单元会将x=5处的数据x36替换为填充值(例如0)。进行实际矩阵乘法运算的行数据变为[x31, x32, x33, x34, x35, pad, x37, pad]。
示例7
[x30, x31, x32, x33, x34, x35, x36, x37] 为经由带有padx=0的加载指令LDCONV加载后的数据。
由于在当前块内部在x=2处存在样本边界以及在x=7处存在样本边界,因此第一偏移量x0=2,第二偏移量x1=7。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=0,x0[2:0]=2;x1的bit3=0,x1[2:0]=7。
如图10所示,由于x0的bit3和x1的bit3均为0,因而使用该数据的矩阵计算单元将不会对该数据进行额外填充。
示例8
[pad, x30, x31, x32, x33, x34, x35, x36] 为经由带有padx=1的加载指令LDCONV加载后的数据。应当理解,由于padx=1,因而加载指令LDCONV已经将行数据向右平移一个像素,并且在空出的位置进行了填充。
由于在当前块内部在x=2处存在样本边界以及在x=7处存在样本边界,因此第一偏移量x0=2,第二偏移量x1=7。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=1,x0[2:0]=2;x1的bit3=1,x1[2:0]=7。
如图11所示,由于x0的bit3为1,指示需要进一步填充,并且x0[2:0]=2指示了填充执行的位置,因而使用该数据的矩阵计算单元会将x=2处的数据x31替换为填充值(例如0)。由于x1的bit3为1,指示需要进一步填充,并且x1[2:0]=7指示了填充执行的位置,因而使用该数据的矩阵计算单元会将x=7处的数据x36替换为填充值(例如0)。进行实际矩阵乘法运算的行数据变为[pad, x30, pad, x32, x33, x34, x35, pad]。
示例9
[x31, x32, x33, x34, x35, x36, x37, pad]为经由带有padx=-1的加载指令LDCONV加载后的数据。应当理解,由于padx=-1,因而加载指令LDCONV已经将行数据向左平移一个像素,并且在空出的位置进行了填充。
由于在当前块内部在x=2处存在样本边界以及在x=7处存在样本边界,因此第一偏移量x0=2,第二偏移量x1=7。
对于该情形的偏移量和填充指示的编码可如下所示:x0的bit3=1,x0[2:0]=1(当前x=原始x-1);x1的bit3=1,x1[2:0]= 6(当前x=原始x-1)。
如图12所示,由于x0的bit3为1,指示需要进一步填充,并且x0[2:0]=1指示了填充执行的位置,因而使用该数据的矩阵计算单元会将x=1处的数据x32替换为填充值(例如0)。由于x1的bit3为1,指示需要进一步填充,并且x1[2:0]=6指示了填充执行的位置,因而使用该数据的矩阵计算单元会将x=6处的数据x37替换为填充值(例如0)。进行实际矩阵乘法运算的行数据变为[x31, pad, x33, x34, x35, x36, pad, pad]。
本公开涉及方法、装置、系统、计算设备、计算机可读存储介质和/或计算机程序产品。计算机程序产品可以包括用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。