存储器中的基于词的通道最后排序的制作方法

文档序号:33551132发布日期:2023-03-22 10:41阅读:27来源:国知局
存储器中的基于词的通道最后排序
1.相关申请的交叉引用本技术根据35 u.s.c.
ꢀ§ꢀ
119(e)要求于2021年9月3日提交的美国临时专利申请序列号63/240,770的权益。美国临时专利申请序列号63/240,770通过引用以其整体并入本文。
技术领域
2.本公开总体上涉及用于神经网络的张量数据的存储器管理的领域。


背景技术:

3.机器学习是一过程,计算机系统通过该过程学习如何在不遵循明确指令的情况下执行动作的过程。在训练阶段期间,计算机系统学习如何使用训练数据来执行动作。例如,通过训练,计算机系统分析训练数据并从训练数据中的模式中提取推断。在生产阶段,计算机系统基于分析和推断对新数据执行动作。通常,机器学习涉及使用神经网络。神经网络是一种类型的机器学习模型,其获取输入,并且通过输入层、一个或多个隐藏层和输出层的执行来产生结果。层的至少子集的输入和输出是张量(tensor)。张量是基于张量内的值的位置来维持值与值所表示的内容的关联的数据结构。


技术实现要素:

4.提供本发明内容是为了以简化的形式介绍下面在具体实施方式中进一步描述的概念的选择。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在限制所要求保护的主题的范围。
5.一般而言,在一个方面中,一个或多个实施例涉及一种计算设备,其包括存储器和处理器,所述处理器被配置为从存储器中的存储执行第一词和第二词的第一多个存储器访问。第一词具有多个元素的第一子集。所述多个元素的所述第一子集各自具有沿着张量的第一维度的顺序索引值的第一集合、所述张量的第二维度的第一单个索引值、以及所述张量的第三维度的第二单个索引值。第二词具有多个元素的第二子集。所述多个元素的所述第二子集各自具有沿着所述张量的所述第一维度的与所述第一词相同的所述顺序索引值的第一集合、所述张量的所述第二维度的与所述第一词相同的所述第一单个索引值、以及所述张量的所述第三维度的不同于所述第一词的所述第二单个索引值的第三单个索引值。第二词在存储器中与第一词相邻。
6.一般而言,在一个方面中,一个或多个实施例涉及包括第一词和第二词的存储设备。第一词具有多个元素的第一子集。所述多个元素的所述第一子集各自具有沿着张量的第一维度的顺序索引值的第一集合、所述张量的第二维度的第一单个索引值、以及所述张量的第三维度的第二单个索引值。第二词具有多个元素的第二子集。所述多个元素的所述第二子集各自具有沿着所述张量的所述第一维度的与所述第一词相同的所述顺序索引值的第一集合、所述张量的所述第二维度的与所述第一词相同的所述第一单个索引值、以及
所述张量的所述第三维度的不同于所述第一词的所述第二单个索引值的第三单个索引值。第二词在存储器中与第一词相邻。
7.一般而言,在一个方面中,一个或多个实施例涉及一种方法,其包括执行词的多个组的多个存储器访问。所述多个组中的每个组被存储在存储器的连续区段中,并且其中所述多个组中的每个组包括多个词,所述多个词各自包括多个元素,所述多个元素具有与所述组中的每个其他词相同的所述第一维度和所述第二维度的索引值的集合,以及与所述组中的每个其他词不同的所述第三维度的索引值。该方法还包括使用多个存储器访问来执行神经网络模型的层。
8.根据以下描述和所附权利要求,实施例的其他方面将是显而易见的。
附图说明
9.图1是根据一个或多个实施例的计算设备的图。
10.图2是根据一个或多个实施例的存储器结构中的图像的图。
11.图3是根据一个或多个实施例的卷积的图示。
12.图4是使用数据的通道优先排序组织的存储阵列的示例图。
13.图5是使用数据的通道最后排序组织的存储阵列的示例图。
14.图6是使用数据的基于词的通道最后排序(wbclo)组织的存储阵列的示例图。
15.图7示出了使用wbclo组织的存储阵列的通用图。
16.图8示出了根据一个或多个实施例的流程图。
17.图9示出了根据一个或多个实施例的流程图。
18.图10示出了根据一个或多个实施例的流程图。
具体实施方式
19.以下详细描述本质上仅是示例性的,并不旨在限制所公开的技术或所公开的技术的应用和用途。此外,不意图在受前述技术领域、背景技术或以下具体实施方式中呈现的任何明示或暗示的理论的约束。
20.本公开涉及一种用于将三维(3d)数据结构的数据存储在存储器中的改进技术。3d数据结构由元素组成,每个元素具有由标识行标识符、列标识符和通道标识符的索引值定义的位置。在该位置处,元素具有值。为了存储3d数据结构,元素被顺序地布置在存储器中。具体地,3d数据结构以一维格式存储在存储器中。实施例可以用于例如通过卷积神经网络(cnn)模型来优化逐深度(depth-wise)卷积和逐点(pointwise)卷积的执行。一些cnn模型可以在逐深度卷积和逐点卷积之间交替。
21.在逐深度卷积中,卷积过滤器可以一次应用于单个数据通道。当数据以通道优先格式存储在存储器中时,逐深度卷积成为更有效的技术。在逐深度卷积中,当递增通过存储位置时,执行cnn模型的处理器可以在处理下一通道之前首先访问单个通道的行和列中的所有元素。
22.在逐点卷积中,过滤器被应用于单个像素的所有通道数据,这意味着位于相同行和列但不同通道的元素。当数据以通道最后格式存储在存储器中时,逐点卷积更有效。当递增通过存储位置时,执行cnn模型的处理器可以在移动到另一像素之前首先访问一个像素
的所有通道数据。
23.许多计算设备(例如,边缘设备和嵌入式设备)使用基于向量的数字签名处理器(dsp)核来实现深度神经网络(dnn)推断。边缘设备是收集和处理数据的硬件设备。嵌入式设备是包括专用计算机系统的设备。对于这样的架构,在改变通道优先格式和通道最后格式之间的元素的顺序时,可能发生大量的数据混洗。可替代地,可以使用大量的计算能力和带宽来跟踪适当的索引值以检索或存储每个张量中的正确位置。
24.此外,计算设备可以使用各自具有8位值的元素(即,每个元素的大小是8位或一个字节)。然而,存储器可以一次访问一个词。例如,存储器架构可以使用32位词大小。因此,当跨越多个词边界访问数据的各个字节时,可能存在显著的低效率。作为一个非限制性示例,一个操作可能仅需要两个8位值,但是如果那两个8位值不存储在相同词中,则可能需要两个32位存储器访问。
25.在边缘设备或其他小型设备中,元素通常被量化为字节(即,8位值)。将这些字节打乱以改变排序可能需要比向量化卷积运算本身显著多的计算能力。本公开描述了存储器结构的基于词的通道最后排序(wbclo),其是通道最后布局的修改。在该wbclo排序中,词中的字节来自输入/输出张量的相同行和通道,从而允许在词边界处更有效地读取和写入数据。
26.图1是根据一个或多个实施例的计算设备(100)的图。计算设备(100)可以是能够处理图像数据的任何类型的处理系统。作为示例,计算设备(100)可以是移动电话、平板设备、膝上型计算机、台式计算机、服务器等。
27.计算设备(100)包括处理器(120)和存储器(130)。存储器(130)被配置为存储一个或多个张量t(135)和可执行神经网络模型(140)。在一个或多个实施例中,神经网络模型是执行图像处理的卷积神经网络(cnn)模型。在实施例中,处理器(120)被配置为通过执行cnn模型来处理输入图像(110)(张量(135)之一)。执行cnn模型的处理器可以将中间结果存储在3维张量中。在一个实施例中,尺寸可以被描述为通道的高度、宽度和数量。在其他实施例中,元素可以以任何期望的布置存储。作为示例而非限制,张量t可以具有高度“h”、宽度“w”和通道“c”。在示例实施例中,高度h表示图像中的行数,宽度w表示图像中的列数。
28.在实施例中,处理器(120)可以使用例如32位词来访问存储器以进行读取和写入操作。32位词长在许多嵌入式处理器中是常见的。然而,这是通过说明的方式,并且不应被解释为限制本公开和权利要求的范围。在其他实施例中,处理器(120)可使用例如64位词或更大的词来访问存储器以进行读取和写入操作。此外,可以使用其他用户设备。
29.图2是根据一个或多个实施例的存储器结构中的图像(110)的图。具体地,图2示出了可以输入到cnn中的输入图像的图。在图2中,输入图像是初始张量。图中的共线点用于表示可以存在与共线点之前和/或之后相同类型的任何数量的项目。例如,在图2中,共线点指示可以存在任何数量的像素,并且实施例不限于图2中所示的网格尺寸。图2包括图像(110)的二维(2d)表示和3d(3d)表示两者。在2d表示中,图像(110)包括以“n”列布置的“m”行像素,以形成(m
×
n)阵列。因此,高度h=m并且宽度w=n。
30.每个像素包括三个不同的元素。每个元素具有信息通道。举例来说,在第一行、第一列(p1,1)中的像素(205)可包括三个通道值:通道0值、通道1值和通道2值。在实施例中,通道0值、通道1值和通道2值可以分别表示红色、绿色、蓝色(rgb)颜色值。然而,在其它实施
例中,通道0值、通道1值和通道2值可表示其它像素属性。
31.因此,第一行像素包含“n”个像素的像素信息,即像素p(0,0)至像素p(0,n-1)。类似地,第二行像素包含“n”个像素的像素信息,即像素p(1,0)至像素p(1,n-1)。对于其余行也是如此。最后一行,行“m”包含“n”个像素的像素信息,即像素p(m-1,0)至像素p(m-1,n-1)。
32.在图像(110)的3d表示中,通道信息的三个值被分成三个单独的通道层。作为示例,通道(211)可以包括图像(110)中的所有(m
×
n)像素的通道0值。同样地,通道(212)可以包括图像(110)中的所有(m
×
n)像素的通道1值。类似地,通道(213)可以包括图像(110)中的所有(m
×
n)像素的通道2值。在该示例中,通道值的总数因此是(m*n*c)。因此,元素的总数是m*n*c。
33.图像(110)的3d表示是张量的示例。cnn模型的层各自处理到该层的输入张量(例如,第一层的输入图像)以产生输出张量,该输出张量作为输入张量传递到cnn模型的下一层。每个张量由位于由指定行标识符、列标识符和通道标识符的索引值定义的位置处的多个元素组成。例如,对于输入图像,p0,1处的通道2值是元素,并且p0,1处的通道3值是不同的元素。由层使用的输入张量中的元素的数量可以不同于由该层产生的输出张量中的元素的数量,该输出张量被用作到下一层的输入。
34.继续图2,元素被存储在存储器(130)的区域的存储阵列(130)中的顺序存储位置m(1)至m(m*n*c)中。因此,3d数据结构被存储在一维(1d)存储器中。每个位置对应于张量的单个元素的存储。一个或多个实施例涉及用于将张量的元素存储到存储器中的排序(如下面在图7中所描述的)。
35.图3是根据一个或多个实施例的卷积的图示。在该示例中,处理器(120)最初执行逐深度卷积运算(320)。逐深度卷积运算(320)接收3通道输入(310),其是3d张量。3通道输入(310)包括来自图2的通道(211)、通道(212)和通道(213)。逐深度卷积(320)可以在通道(211)、通道(212)和通道(213)上使用一个或多个过滤器(321,322,323)。在各种实施例中,过滤器(321,322,323)可以表示内核、卷积矩阵或掩码(mask)。作为示例,过滤器(321,322,323)可包括用于例如模糊、锐化、浮雕(embossing)、边缘检测等的小矩阵。这是通过在图像的内核和通道层之间进行卷积以产生多个中间结果(330)来实现的。
36.在图3中,逐深度卷积(320)使用通道(211)上的过滤器(321,322,323)来渲染中间结果(331)。逐深度卷积(320)还使用通道(212)上的过滤器(321,322,323)来渲染中间结果(332)。最后,逐深度卷积(320)还使用通道(213)上的过滤器(321,322,323)来渲染中间结果(333)。每个中间结果可以具有单个通道或多个通道。此外,中间结果可以具有与输入张量的通道中不同数量的行和列。
37.继续该示例,中间结果张量可以作为输入被传递到cnn的后续层。cnn的后续层之一可以执行逐点卷积运算(340)。如平行线所示,附加层(诸如执行非线性激活函数的层)可以存在于逐深度卷积和逐点卷积之间。附加层可以修改各种输入。逐点卷积运算(340)接收3-中间层输入(330),其可以由附加层进一步修改。逐点卷积(340)在中间层(331)、中间层(332)和中间层(333)上使用过滤器(345)来渲染输出张量(350)。输出张量可以是与输入张量不同的大小。
38.图像处理cnn模型可以将中间结果存储在3维张量中。如上所述,尺寸可被描述为
通道的高度、宽度和数量。对象可以以任何期望的布置存储。作为示例,张量t可以具有高度h、宽度w和通道c,其中高度h表示张量中的行的总数并且宽度w表示张量中的列的总数。
39.张量t的元素的值以通道优先布置存储。在通道优先布置中,在位置h、w、c处的张量t的元素位于存储位置m[c*h*w+h*w+w]处。
[0040]
图4、图5和图6分别示出了张量的元素的通道优先排序、张量的元素的通道最后排序、和张量的元素的基于词的通道最后排序(wbclo)的示例。图4是使用数据的通道优先排序组织的存储阵列(400)的图。在图4中,m[n]表示存储器中的第n个元素。小写字母表示当前通道c、行h、或列w的值。大写字母表示张量t的维度(通道总数c、行总数h和列总数w)。图4示出了张量t内的通道、列和行数据的相应存储位置。在图4中,存储器编号从零开始。因此,存储位置0(m[0])包含通道0、行0、列0的数据。存储位置1(m[1])包含通道0、行0、列1的数据。存储位置w(m[w])包含通道0、行1、列0的数据。存储位置h*w(m[h*w])包含通道1、行0、列0的数据。第一行通过第一通道中的所有行连续存储在存储器中,随后是第二行。在该通道优先布置中,单个通道阵列被存储在存储器中,一次一行。值得注意的是,不同通道中并且位于相同行和列中的张量的元素的值彼此分离。相反,相同行中的元素的值是相邻的。
[0041]
在可替换实施例中,可以使用通道最后布置来存储张量t的元素的值。在通道最后布置中,在位置h、w、c处的张量t的元素位于存储位置m[h*w*c+w*c+c]处。
[0042]
图5是使用数据的通道最后排序组织的存储阵列(500)的图。在图5中,m[n]表示存储位置n。小写字母表示通道c、列w、或行h中的元素的位置。大写字母指示维度(张量的通道c、列w和行h的总数)。图5示出了张量t内的元素的行、列和通道数据的特定集合的相应存储位置。在图5中,编号从零开始。存储位置0(m[0])包含列0、行0、通道0处的张量的元素的值。存储位置1(m[1])包含列0、行0、通道1的数据。
[0043]
在图5的存储器组织中,相同行和列以及不同通道处的元素是相邻的。值得注意的是,相同通道中并且位于不同行和/或不同列中的元素的值彼此分离。在存储位置c(m[c])处,列0和行0处的元素的所有通道的值已经存储在较早的存储位置中,因此列递增,并且存储下一通道数据。存储位置c(m[c])包含行0、列1、通道0的数据。存储位置c+1(m[c+1])包含行0、列1、通道1的数据。因此,在原始图像中,单个像素的所有通道值包含在连续的存储位置中。
[0044]
图6是根据本公开的实施例的使用数据的基于词的通道最后排序(wbclo)组织的存储阵列(600)的示例图。小写字母表示通道c、行h、或列w处的元素的值。大写字母指示张量t的尺寸(通道总数c、行总数h和列总数w)。在wbclo布置中,在位置h、w、c处的张量t的元素位于存储位置m[h*w*c+div(w,4)*4*c+4*c+mod(w,4)]。这里,div()是整数除法函数并且mod()是模数余数函数。在图6中,四个连续像素的通道值存储在连续存储位置中。每个4-元素词来自数据的相同通道,并且可以利用递增操作来有效地访问。在一些实施例中,元素是一个字节(8位)并且每个词是四个字节(32位)。在其他实施例中,元素可以是16位并且词可以是32或64位。在一些实施例中,逐深度卷积(例如,中间层331、332、333)的输出可以以wbclo格式存储。因此,下游逐点卷积运算(340)可以在对例如32位词的单个存储器访问中依次访问四(4)个8位元素存储位置。这四个存储位置跨四个不同通道保持相同的四个数据像素。逐点卷积可以并行地对这四个像素进行运算。逐点卷积的输出可以以常规通道优先格式存储,以为逐深度卷积层准备。
[0045]
在图6的基于词的通道最后排序中,第一词的字节0包含行0、列0、通道0的数据。第一词的字节1包含行0、列0、通道的数据。第一词的字节2包含行0、列2、通道0的数据。第一词的字节3包含行0、列3、通道0的数据。在字节4处,通道被递增,并且相同的四个像素的通道1信息被存储在接下来的四个连续存储位置(即,接下来的四个字节)中。
[0046]
图6的实施例将数据分组为来自相同通道的4字节词,但是在其他实施例中可以使用其他基于词的排序。在其他实施例中,可以从存储阵列内的相同通道连续地存储较大或较小数量的字节。可以基于特定网络结构中的过滤器和内核的大小来选择来自相同通道的连续存储的字节数。可以基于实现神经网络模型的系统的特定架构限制来选择来自相同通道的连续存储的字节数。在其他实施例中,词内的字节排序可以被反转,或者以其他方式基于系统进行混洗。例如,大端模式和小端模式是关于词的字节的两种常见的不同排序。
[0047]
图7示出了根据wbclo方案的存储阵列(700)的更通用的图。如图7所示,存储阵列(700)被划分成词(例如,词0(702)、词1(704)、
……
)。词大小(706)是每个词的大小。术语词大小与词长同义,并且符合计算机科学领域中使用的标准定义,以指代由硬件处理器同时处理的位数。例如,词大小可以是16位、32位等。词大小(706)取决于处理器架构。
[0048]
每个词中的元素的数量是词大小除以用于表示每个元素的值的位数。因此,32位处理器具有32位的词大小。如果每个元素的值由8位表示,则每个词具有4个元素。
[0049]
如上所述,3d张量具有三个维度(即,第一维度、第二维度和第三维度)。在上述示例中,第三维度是通道维度。第一维度可以沿着高度或沿着宽度(即,行或列),并且第二维度沿着宽度或高度(即,与第一维度正交)。在不脱离权利要求的范围的情况下,可以使用第一维度、第二维度和第三维度与高度维度、宽度维度和通道维度之间的其他映射。
[0050]
在wbclo方案中,在词内,元素具有沿第一维度的顺序索引值。此外,在词内,元素具有沿第二维度和第三维度相同的索引值。相邻词由对于张量的第三维度具有不同索引值的元素组成。词的邻接意味着张量的词被顺序地定位。然而,词的邻接也意味着其他数据可以可选地存在于张量的相邻词之间。作为示例,其他数据可以是与张量无关的数据或不在张量中的数据。此外,对于张量的第一维度和第二维度,顺序相邻的词可以具有与紧接在前的词具有相同索引值的元素。即,沿着第一维度,元素具有与前一词中的元素相同的索引值序列,并且沿着第二维度,元素具有与前一词中的元素相同的索引值。
[0051]
因此,存储的排序如下。d1是沿第一维度的索引值的总数。d2是沿第二维度的索引值的总数。d3是沿第三维度的索引值的总数。各自具有d3个词的词组被连续地存储在存储器中。在每个词组内,词中的元素在该词内沿第三维度具有相同的索引值,并且沿第三维度具有与该组中的其他词不同的索引值。例如,在组内,词可以具有连续增加的索引值作为组中的先前词,直到第三维度中的索引值的总数。相同词组中的不同词中的元素沿第一维度和第二维度具有相同的索引值。值得注意的是,相同词中的元素可以沿着第一和/或第二维度具有不同的索引值,并且沿着第三维度具有相同的索引值。
[0052]
不同词组中的元素沿第一和/或第二维度具有不同的索引值。例如,如先前词组中的元素一样,后续词组中的元素可以具有沿着第一维度和/或第二维度的顺序增加的索引值。因此,例如,后续词组可以具有沿着第一维度从先前词组递增直到d1的索引值和第二维度的相同索引值。然后,下一组可以重新开始第一维度的索引值,并将第二维度的索引值递增一。
[0053]
返回到图2的图像示例,张量是图像,并且通道是像素的红色值、绿色值和蓝色值。第一维度和第二维度是图像的行和列。在该示例中,词大小是32位,并且每个值的位数是8位。因此,每个词中存在4个元素。元素是像素的红色值、像素的蓝色值或像素的绿色值。在wbclo存储方案中,系统如下存储像素通道元素。存储器沿着与第一四个像素的绿色值相邻的单行存储第一四个像素的红色值,该第一四个像素的绿色值与第一四个像素的蓝色值相邻。该行的第一四个像素的红色、绿色和蓝色值的整个存储形成第一组元素。在完全存储第一四个像素之后,存储器沿着该行与第一组相邻地存储接下来的四个像素的组,并且针对接下来的四个像素的红色、蓝色和绿色通道重复该过程。当该行完成时,下一组是从下一行中的第一组四个像素开始的下一行像素。
[0054]
图8示出了根据一个或多个实施例的3d张量的顺序存储器访问(800)的流程图。在804中,确定沿第一维度的初始索引值i、沿第二维度的初始索引值j、和沿第三维度的第三索引值k。在一个或多个实施例中,在操作开始时,第一维度、第二维度和第三维度的初始索引值各自为零。
[0055]
在806中,对形成词的元素的子集执行存储器访问,所述元素的子集(a)在至少第一维度或第二维度中是连续的,其以第一维度的初始索引值i和第二维度的初始索引值j开始,并且(b)具有第三维度的相同的索引值k。存储器访问选择以第一维度的初始索引值i开始并且具有第二维度的初始索引值j的第一维度的连续索引值。如果子集中的元素的数量大于沿第一维度以初始索引值i开始的剩余的元素的数量,则系统针对第一维度添加在索引值0处开始的元素,并且针对第二维度添加在索引值j+1处开始的元素,以完成词。存储器访问可以是例如用于将元素的值保存在存储器中或者从存储器读取元素的值。
[0056]
在808中,确定词中的最后元素的第一维度的最后索引值q和第二维度的最后索引值p。
[0057]
在810中,确定第三维度的第三索引值k是否可以在不超过沿第三维度的元素总数的情况下递增一。如果第三索引值可以递增,则流程行进到框812。如果第三索引值不能递增,则流程行进到框814。
[0058]
在框812中,第三维度的第三索引值k递增1,并且为i的初始索引值和初始索引值j保持不变。然后,流程过渡到框806,其中初始索引值i、j和k用于第一维度、第二维度和第三维度。
[0059]
在框814中,确定是否访问了所有元素。如果访问了张量的所有元素,则流程行进到结束。如果未访问张量的所有元素,则流程行进到框816。
[0060]
在框816中,如果存在沿着第一维度的q个元素,则将初始索引值i设置为递增了1的最后索引值q,或者如果不存在沿着第一维度的q个元素,则将初始索引值i重置为0,并且将初始索引值j设置为递增了1的最后索引值p。然后,流程行进到框806。
[0061]
作为示例,在其中c=4的实施例中,处理器(120)可以将图2中的第一四个像素[(p1,1)、(p1,2)、(p1,3)、(p1,4)]的通道(211)数据存储在第一32位词的四个连续字节(字节0、1、2、3)中。接下来,处理器(120)将图2中的第一四个像素[(p1,1)、(p1,2)、(p1,3)、(p1,4)]的通道(212)数据存储在第二32位词的接下来的四个连续字节(字节4、5、6、7)中。接下来,处理器(120)可以将图2中的第一四个像素[(p1,1)、(p1,2)、(p1,3)、(p1,4)]的通道(213)数据存储在第三32位词的接下来的四个连续字节(字节8、9、10、11)中。然后,处理
器(120)可以将图2中的第一四个像素[(p1,1)、(p1,2)、(p1,3)、(p1,4)]的第四通道(未示出)的数据存储在第四32位词的接下来的四个连续字节(字节12、13、14、15)中。此时,处理器(120)可以递增到下一组四个像素,并存储像素[(p1,5)、(p1,6)、(p1,7)、(p1,8)]的通道数据。
[0062]
图9示出了根据一个或多个实施例的用于访问存储器以进行逐深度卷积运算(900)的流程图。逐深度卷积运算访问每第k个词,其中k是通道的数量。在框902中,将当前通道数设置为零。具体地,当前通道数是张量中的第一通道。在框904中,将当前起始词位置设置为当前通道数。起始词位置是由当前通道数标识的通道的初始词的位置。最初,当前起始词也被设置为零,如在框902中那样。
[0063]
在框906中,将当前词位置设置为当前起始词位置。当前词位置是正被访问的当前词的位置。如上所述,当前词具有在张量的空间维度中相邻(例如,在行中)的元素,并且它们在通道维度中具有相同的当前通道数。
[0064]
在框908中,在当前词位置处执行存储器访问。当前词位置可以被转换为物理存储位置。例如,转换可以基于物理存储器中的张量的开始。转换还可以基于存储器中张量的词的可能分离,诸如利用词之间的其他数据。存储器访问可以是用于读取元素或将元素写入存储器。基于存储器访问,执行逐深度卷积运算。例如,可以在获得预设数量的词之后或者在执行框914之前的任何时间执行逐深度卷积运算以移动到下一通道。
[0065]
在框910中,将当前词位置递增通道的数量。递增当前词位置将当前词位置移动到与先前词相同通道的后续元素集合的位置。
[0066]
在框912中,确定当前词位置是否大于元素的总数除以每个词中的元素的数量减一。元素的总数除以每个词中的元素的数量是张量的词的数量。因此,如果当前词位置大于元素的总数除以每个词中的元素的数量减一,则当前词位置在张量的边界之外,并且张量的元素已经针对当前通道被处理。
[0067]
在框914中,将当前通道数递增一。递增当前通道数启动下一通道的处理。在框916中,确定当前通道数是否大于通道总数减一。如果当前通道数大于通道总数减一,则张量的所有通道的元素都已被处理,并且流程行进到结束。如果当前通道数不大于通道总数减一,则流程继续处理由当前通道数标识的下一通道的元素。对于每个通道重复图9的过程。
[0068]
图10示出了用于执行逐点卷积运算的流程图。在逐点卷积运算中,访问存储器的k个相邻词,其中k是通道的数量。逐点卷积运算对k个词的像素或特征中的每一个单独地执行运算。当处理器执行时,k个词的其他元素可以保存在高速缓存中。
[0069]
转到框1002,将当前词位置设置为零。当前词位置是正被访问的当前词的位置。
[0070]
在框1004中,执行开始于当前词位置的k个词的存储器访问,其中k是通道的数量。上面参考图9的框908描述了执行存储器访问。具体地,k个词的词位置可以各自被转换为物理存储位置。例如,转换可以基于物理存储器中的张量的开始。转换还可以基于存储器中张量的词的可能分离,诸如利用词之间的其他数据。存储器访问可以是读取元素或将元素写入存储器。
[0071]
在框1006中,将当前元素位置设置为零。在框1008中,处理k个词中的每个词的当前元素位置处的元素。逐点卷积运算处理在框1008中访问的k个词中的每个词中的元素的相同位置。例如,k个词的剩余元素可以存储在高速缓存存储器中。
[0072]
在框1010中,当前元素位置递增一。然后确定当前元素位置是否大于每个词中元素的数量减一。如果当前元素位置不大于每个词中的元素数量减一,则并非k个词的所有元素被处理,并且系统迭代到接下来的k个词。因此,流程行进到框1008中的k个词的下一元素集合。
[0073]
如果当前元素位置大于每个词中的元素数量减一,则k个词的元素被处理,并且系统迭代到接下来的k个词。在框1014中,将当前词位置递增k(即,通道的数量)以迭代到处理下一通道集合。
[0074]
在框1016中,确定当前词位置是否大于元素的总数除以每个词中的元素的数量减一。元素的总数除以每个词中的元素的数量是张量的词的数量。因此,如果当前词位置大于元素的总数除以每个词中的元素的数量减一,则当前词位置在张量的边界之外,并且张量的元素已经被处理。因此,逐点卷积运算完成,并且流程可以进行到结束。
[0075]
尽管关于cnn讨论了上述内容,但是一个或多个实施例可以用于任何神经网络的张量数据。例如,一个或多个实施例可以用在使用频谱图的音频处理中。
[0076]
虽然已经关于有限数量的实施例描述了本发明,但是受益于本公开的本领域技术人员将理解,可以设计出不脱离如本文所公开的本发明的范围的其他实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1