CN109324984A - 在卷积运算中使用循环寻址的方法和装置 - Google Patents
在卷积运算中使用循环寻址的方法和装置 Download PDFInfo
- Publication number
- CN109324984A CN109324984A CN201811074632.7A CN201811074632A CN109324984A CN 109324984 A CN109324984 A CN 109324984A CN 201811074632 A CN201811074632 A CN 201811074632A CN 109324984 A CN109324984 A CN 109324984A
- Authority
- CN
- China
- Prior art keywords
- offset
- slice
- data
- address
- segment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
公开了一种用于通过将超出循环寻址区域的预定义长度的数据部分重新寻址到循环寻址区域中的另一个预定义地址来执行循环寻址以尽管物理存储器的容量固定仍模拟几乎无限存储器空间的方法和装置。对于不同的应用可以使用重新计算的循环地址来加载和计算数据样本中的数据片段。
Description
技术领域
本发明总的来说涉及存储器寻址,并且更具体地涉及一种用于在诸如使用卷积神经网络减少存储器访问带宽的基于机器学习的应用之类的应用中使用循环存储器寻址的方法和装置。
背景技术
卷积神经网络(CNN)的快速和持续进步导致越来越多的基于CNN的应用,诸如对象识别、跟踪和分类。大多数基于CNN(或基于其它模型的)的应用不仅要求高精度性能,而且对能量或功耗以及成本敏感。对于具有小形状因子、有限存储器空间和电池供电的嵌入式设备(诸如智能电话、平板计算机以及其它移动手持设备),功耗和成本考虑尤为重要。降低在这种嵌入式设备上运行应用的成本和功耗的一种方法是减小这些设备上的静态随机存取存储器(SRAM)的大小和容量。但是为了保持在这些设备上运行的机器学习应用的预训练卷积神经网络模型(和其它模型)的准确性,输入图像(或视频)需要具有相对较高的分辨率,这需要相对较大的存储器大小用于存储/处理,并且不能一次性缓存在这些嵌入式设备的SRAM中。对于减小的SRAM大小和容量,需要将一个完整的输入图像或视频帧分割(或切片)成若干子区域(或子块),取决于应用和实施方式,这些子区域可以彼此重叠或不重叠。每个片段或切片可以完全缓存在SRAM中,并且通过计算相关联的CNN模型(或对应的神经网络权重)而被独立地处理。因此,处理一个完整的高分辨率图像或视频帧可以通过使用有限的SRAM连续地处理其子区域来实现。
如本领域中已知的,通过将输入图像与卷积核(一系列对应的点数矩阵)相乘来完成对图像应用卷积运算的例子,该输入图像总共具有三个像素矩阵,每一个矩阵分别用于红色、蓝色以及绿色通道,每个像素由每个彩色通道中0到255之间的整数值组成,且在这些点数矩阵中,数字的模式和大小可以被认为是如何在卷积运算中将该输入图像与核交织在一起的秘诀。核的输出是经改变的图像,其在深度学习中通常称为特征图。例如,2D卷积核通常被表示为N×N模板(N可以是3、5或其它整数)。N×N卷积核的数量表示相关联的模型权重。N×N卷积核在相邻子区域的边界处重叠。必须缓冲来自上一个子区域的边界图像像素以处理当前子区域。这些边界像素可以被高速缓存到SRAM中,但是这些边界像素的迭代高速缓存将会浪费与频繁随机访问相关联的存储器访问带宽。
另外,在分割完整图像或视频帧之后并且在计算其任何子区域或片段(包括对像素执行N×N卷积运算)之前,必须将一个片段的整个数据高速缓存到具有连续地址的连续存储器空间中。由于嵌入式设备上的有限的存储器空间(诸如SRAM),通常情况下,处理下一个片段所需的数据在存储上一个片段的数据之后无法适配到剩余存储器空间中,并且必须在某个其它地方进行寻址——使上一个片段内的边界数据不可用于计算下一个片段。因此,必须将下一个片段与重叠边界数据一起加载到新地址以进行计算。
图1说明了这种重复加载边界数据的一个例子。如图1(a)中所示,示例性SRAM具有480KB的容量。544K字节的完整数据集被划分成四个各自为160KB的连续片段(在连续片段之间有32KB重叠)。因此,计算整个数据集被划分成这些连续片段的四个子计算过程。计算片段1需要0到160KB的数据,而128KB到160KB之间的部分(32KB边界数据)与片段2的数据重叠,该片段2的数据从128KB开始重叠到288KB结束。同样,计算片段3需要片段2到3之间的重叠部分,该重叠部分从256KB开始到288KB结束。对于片段1-3的子计算过程,可以在大小为480KB的SRAM中完全、连续且持续地缓存从0KB到416KB的相关联的数据(例如,图像像素或特征图元素)。但是计算第四片段所需的数据(即,从384KB到580KB)不能在片段3之后相继地被高速缓存,因为包括第四片段(总共544KB)将会超过SRAM的总容量480KB,如图1(a)中所示。因为第四片段不能被加载到片段3之后的剩余存储器空间中,所以片段3内的重叠边界数据(从384KB到416KB)不能被再用于计算第四片段。计算第四片段所需的整个160KB数据(包括从384KB到416KB范围的边界数据)必须在其它地方例如通过覆盖由第一子计算过程占用的数据(该数据的地址为0KB到160KB)来进行高速缓存,如图1(b)中所示。结果,从384KB开始到416KB结束的数据部分被高速缓存两次,一次用于片段3,一次用于片段4,从而浪费了有限的存储器资源。因此,存在如下未解决的问题:避免重复加载边界数据并提高嵌入式设备上有限存储器的使用。
发明内容
根据本发明的一个实施例,使用硬件模块(诸如地址发生器)提供循环寻址指令以通过将数据的超过循环缓存器的预定义长度的部分重新寻址到循环缓冲器的起点以尽管物理存储器(诸如嵌入式设备上的SRAM)的容量固定仍模拟几乎无限的存储器空间。因此,避免了相邻数据片段中的重叠边界数据的重复高速缓存,并且减小了诸如使用卷积运算的应用之类的应用中的存储器访问带宽。
根据本发明的另一个实施例,结合用于启用循环寻址的硬件指令,可以使用软件模块来提供附加指令以利用重新计算的循环地址来加载和计算数据片段。
根据本发明的另一方面,可以将特定循环缓存器的长度预定义为例如总SRAM大小的一部分。因此,SRAM可以用作多个循环缓存器,它们可以具有不同的长度。这些不同长度的循环缓存器可以被配置用于高速缓存不同类型或大小的数据片段,以确保连续存储不同数据集,减少由手动分配不同数据集和存储器空间碎片所引起的冲突。
具体地,在一个实施例中,提供了一种用于执行循环寻址的方法。首先定义存储器系统中的循环寻址区域,其中循环寻址区域具有地址为Ax的上边界和地址为Ay的下边界。将数据样本划分为多于一个连续数据片段,其中多于一个连续数据片段包括片段D0至Dn,其中n大于1。提供了一种用于执行的指令集,其被配置用于计算地址Ai,其中数据片段Di存储在从地址Ai开始的循环寻址区域中。数据片段Di的长度为L,包括长度为L1的第一部分和长度为L2的第二部分,其中数据片段Di的第一部分与数据片段Di-1重叠,其中i大于0并且小于或等于n。然后执行该指令集以基于地址Ai-1计算地址Ai,其中数据片段Di-1存储在从地址Ai-1开始的循环寻址区域中;其中地址Ai被计算为Ax+(Ai-1–Ax+L2)%(Ay–Ax+1);其中%指示在(Ai-1–Ax+L2)除以(Ay–Ax+1)之后求余数的取模运算。然后从地址Ai开始存储数据片段Di。
在另一个实施例中,提供了一种用于执行循环寻址的方法。首先定义存储器系统中的循环寻址区域。将循环寻址区域的宽度划分成包括Slice_a到Slice_b的一个或多个切片,并且将循环寻址区域的可用宽度定义为(Slice_a-Slice_b+1)。将循环寻址区域的深度定义为具有地址为Offset_x的上边界和具有地址Offset_y的下边界,并且将循环寻址区域的可用深度定义为(Offset_y-Offset_x+1)。将数据样本划分为多于一个连续数据片段,其中多于一个连续数据片段包括片段D0至Dn,其中n大于0。然后提供用于执行的指令集,其中该指令集被配置用于计算数据片段Di的(Slice_i,Offset_j),其中数据片段Di存储在循环寻址区域中从地址Offset_j开始的Slice_i中,其中数据片段Di具有长度L,包括长度为L1的第一部分和长度为L2的第二部分,其中数据片段Di的所述第一部分与数据片段Di-1重叠,其中i等于或大于0,并且小于或等于n。然后执行该指令集以基于(Slice_i-1,Offset_j-1)计算数据片段Di的(Slice_i,Offset_j),其中数据片段Di-1从地址Offset_j-1开始存储在循环寻址区域中的Slice_i-1中;其中Offset_j被计算为Offset_x+(Offset_i-1–Offset_x+L)%(Offset_y–Offset_x+1);其中地址Slice_i被计算为Slice_a+(Slice_i-1–Slice_a+(Offset_i-1–Offset_x+L)/(Offset_y–Offset_x+1))%(Slice_b–Slice_a+1);其中%指示在相除之后求余数的取模运算。然后在深度中以Offset_i开始,将数据片段Di在宽度中存储在Slice_i中。
在另一个实施例中,提供了一种用于执行循环寻址的装置。该装置包括集成电路设备,其中集成电路包括数据存储器和处理器核。处理器核进一步包括循环地址发生器,其中该循环地址发生器被配置用于在所述数据存储器中执行数据存储器寻址和访问。所述数据存储器包括一个或多个循环寻址区域,其中一个循环寻址区域的宽度被划分成包括Slice_a到Slice_b的一个或多个切片,并且所述循环寻址区域的可用宽度被定义为(Slice_a–Slice_b+1);其中n等于或大于0;其中所述循环寻址区域的深度具有地址为Offset_x的上边界和地址为Offset_y的下边界,并且循环寻址区域的可用深度被定义为(Offset_y-Offset_x+1)。包括在处理器核中的循环地址发生器被配置用于执行指令集以计算长度为L的数据片段Di的(Slice_i,Offset_j),其中数据片段Di是包括在包括片段D0到Dn的多于一个连续数据片段中的一个数据片段,其中n等于或大于0,并且其中i等于或大于0,并且小于或等于n;其中数据片段Di在所述循环寻址区域中从地址Offset_j开始存储在Slice_i中。循环地址发生器被配置用于基于(Slice_i-1,Offset_j-1)计算数据片段Di的(Slice_i,Offset_j),其中数据片段Di-1在循环寻址区域中从地址Offset_j-1开始存储在Slice_i-1中;其中Offset_j被计算为Offset_x+(Offset_i-1–Offset_x+L)%(Offset_y–Offset_x+1);其中所述地址Slice_i被计算为Slice_a+(Slice_i-1–Slice_a+(Offset_i-1–Offset_x+L)/(Offset_y–Offset_x+1))%(Slice_b–Slice_a+1);其中%指示在相除之后求余数的取模运算。处理器核进一步被配置用于:在深度中以Offset_i开始,将数据片段Di存储在循环寻址区域中的Slice_i中。
附图说明
图1(a)和1(b)是说明现有技术中在480KB SRAM中高速缓存和寻址544KB数据的四个片段的图示;
图2(a)、2(b)以及2(c)是说明本发明的实施例的图示,本发明的实施例使用循环缓存器来在480KB SRAM中高速缓存和寻址544KB数据的四个片段。
图3是说明本发明的实施例的流程图,本发明的实施例使用示例性循环缓存器指令来在480KB SRAM中高速缓存和寻址544KB数据的四个片段。
图4是说明根据本发明的实施例的不同数据片段的并行处理的图示。
图5是说明根据本发明的实施例的在二维SRAM中使用循环寻址的简化框图。
图6是说明根据本发明的实施例的在二维SRAM中使用循环寻址来高速缓存并计算两个200KB的输入数据片段的简化框图。
图7是说明根据本发明的实施例的使用软件模块提供附加的循环寻址指令的流程图。
图8是说明可以应用执行根据本原理的一个实施例的循环寻址的示例性硬件模块的简化框图。
具体实施方式
本原理涉及存储器循环寻址,并且可以用于诸如在机器学习中使用卷积运算的应用之类的应用中以通过避免相邻数据片段中的重叠边界数据的重复高速缓存来减小存储器访问带宽。以下讨论基于CNN的应用的背景中的各种实施例。然而,本实施例可以适用于其它机器学习模型和定理,并且还可以应用于嵌入式设备上的其它类型的应用,诸如图像过滤,包括去噪、去块、去模糊等。
图2说明了根据本发明的一个实施例的示例性循环寻址方法。可以将循环缓存器的长度(即,循环寻址的范围)预定义为例如等于SRAM的全长。替代地,可以将循环缓存器的长度预定义为仅是SRAM的一部分。在将数据切片成若干片段之后,并且当要高速缓存的下一个数据片段超出循环寻址的范围时,尺寸过大部分将会以预定义方式重定向到新地址。例如,如图2(a)中所示,一个示例性循环寻址范围被设置为0KB到480KB(所说明的SRAM的全长)。544KB的完整数据集也被划分成四个各自为160KB的连续片段(在连续片段之间有32KB重叠)。如果连续高速缓存的第四个数据片段的范围从384KB到544KB,包括384KB到416KB之间的重叠边界数据,则因此超过循环寻址范围(0-480KB)64KB。为了避免重复加载片段3到4之间的重叠边界数据,第四片段的第一部分(从416KB到480KB)将会在片段3之后相继被高速缓存,但是第二部分(尺寸过大的64KB)被重定向到另一个地址,例如从循环寻址范围的起点(即,0KB)开始,并且被高速缓存为0-64KB,如图2(a)和2(b)中所示。下一数据片段将会相继被高速缓存在SARM中,片段5被高速缓存到32KB到192KB,片段6被高速缓存到160KB到320KB,而片段7被高速缓存到288KB到448KB,如图2(b)中所示。因为高速缓存整个片段8(将会寻址到416KB-576KB)将超过SRAM的容量,所以片段8被划分成两个部分。如图2(b)中所示,第一部分被高速缓存到416KB到480KB,并且尺寸过大部分同样被重新定向到循环范围的起点并且被高速缓存到0KB到96KB,如图2(c)中所示。下一数据片段将以相同方式进行处理,并且这些片段中超过SRAM大小的尺寸过大部分将被重新定向到循环范围的起点。注意,尺寸过大部分也可以被重新定向到循环寻址范围内的任何预定义地址,而不一定是从该范围的起点开始。随后可以从相应的地址中取出同一片段的经划分的数据部分,并且将这些经划分的数据部分一起处理为同一数据片段的各部分。通过使用循环寻址将数据片段的尺寸过大部分重新定向到预定义地址,避免了边界数据的重复高速缓存。
图3是说明根据本发明一个实施例的示例性循环寻址指令和下层处理的流程图。可以将循环缓存器的长度(即,循环寻址的范围)预定义为示例性SRAM的全长(480KB)。另外,544KB的示例性数据集被划分成四个各自为160KB的连续片段(在相邻片段之间有32KB重叠)。
在步骤301,指令是填充SRAM(0,160KB)。根据这个指令,从地址0(SRAM的起点)开始,第一片段的160KB数据被加载到SRAM中,范围是从地址0KB到地址160KB。在步骤302,指令是计算SRAM(0,160KB)。系统被指示从地址0KB开始计算160KB数据。在步骤303,指令是填充SRAM(160K,128KB),这意味着从地址160KB开始,将128KB数据加载到SRAM中,因此使第二片段的160KB数据被高速缓存在地址128KB到地址288KB之间,包括地址128KB到地址160KB之间与第一片段重叠的32KB边界数据。在步骤304,该指令是计算SRAM(128K,160KB),这意味着从地址128KB开始计算160KB数据,即,从地址128KB到地址288KB的范围内的数据的第二片段。在步骤305,指令是填充SRAM(288K,128KB)。根据这个指令,系统被指示从地址288KB开始并且将128KB数据加载到SRAM中,因此使第三片段的160KB数据被高速缓存在地址256KB到地址416KB之间,包括地址256KB到地址288KB之间与第二片段重叠的32KB边界数据。在步骤306,该指令是计算SRAM(256K,160KB),这意味着从地址256KB开始计算160KB数据,即,从地址256KB到地址416KB的范围内的数据的第三片段。
在步骤307,指令是填充SRAM(416K,128KB)。根据这个指令,从地址416KB开始并且将128KB数据加载到SRAM中将超出SRAM的大小(480KB)。使用循环寻址,而不是将包括范围从384KB到416KB的边界数据的整个第四片段加载到新地址,将第四数据片段划分成两个部分,64KB的第一部分被加载在地址416KB到地址480KB之间,而64KB的第二部分从地址0KB开始被加载。在步骤308,指令是计算SRAM(384K,160K)。根据这个指令,可以通过计算范围从地址384KB到416KB的边界32KB数据来执行从地址384KB开始计算160KB数据,64KB的第一部分的范围从地址416KB到地址480KB,64KB的第二部分的范围从地址0到地址64KB。在步骤309,指令是填充SRAM(544K,128KB)。根据这个指令,可以通过将128KB数据从第四片段的上一个地址继续的64KB起始地址加载到SRAM中来执行使用循环寻址从地址544KB开始填充128KB数据,因此使第五片段的160KB数据被高速缓存在地址32KB到地址192KB之间,包括地址32KB到地址64KB之间与第四片段重叠的32KB边界数据。在步骤310,指令是计算SRAM(512K,160KB)。根据这个指令使用循环寻址从地址512KB开始计算160KB数据意味着从地址32KB开始计算160KB数据,即,范围从地址32KB到地址192KB的数据的第五片段。
后续片段可以以如下相同方式进行高速缓存和计算:当SRAM中有足够的存储空间来高速缓存整个片段时,该片段将在上一个片段之后被加载到SRAM中;当加载该片段超出SRAM的大小时,它将被划分成两个部分,一部分将被高速缓存到SRAM的剩余存储空间,而另一部分将被重新定向到SRAM的起点。
虽然在完成上一个片段的处理之后可以进行下一个数据片段的加载和计算,如图3中所示,但是在另一个实施例中,不同片段的处理可以并行发生但处于交错的阶段。例如,如图4中所示,片段2可以被加载到SRAM中,同时片段1的数据已经被高速缓存并且正在使用卷积运算进行计算。当存储片段1的卷积运算的输出时,正在计算片段2并且正在将片段3加载到SRAM中。当使用循环寻址将片段4加载到SRAM中,同时一部分被重新定向到先前由片段1使用的地址范围因此覆盖片段1的数据时,片段1已经进行了存储输出。在各阶段并行处理不同数据片段提高了SRAM的效用和效率,同时确保循环寻址不会覆盖尚未完全处理的先前片段的数据。
为了简化起见,使用一维(1-D)存储器说明根据本发明前述实施例的循环寻址原理。在另一个实施例中,循环寻址原理也可以使用硬件扩展应用于二维(2-D)存储器。如图5中所示,可以使用第一维度(宽度)中的切片号(例如,slice_a(501)、slice_b(502))和第二维度(深度)中的偏移号(例如,offset_1(503)、offset_2(504))来索引、寻址以及访问2-D存储器。可以预定义循环寻址的范围以包括slice_a和slice_b中offset_1到offset_2之间的SRAM存储器空间,如图5的蓝色框中所示。在分割输入数据之后,可以将数据片段从深度为offset_1开始加载到slice_a中,并且继续填充slice_a的offset_1到offset_2之间的空间。当将下一个片段加载到slice_a中将会越过slice_a的offeset_2的边界时,这个片段将被划分成两个部分,其中第一部分填充到slice_a的offset_2,而多余部分将从offset_1开始指向slice_b。类似地,数据片段将被连续加载到offset_1到offset_2之间的slice_b中。当将下一个片段加载到slice_b中将会越过slice_b的offeset_2的边界时,这个片段将被划分成两个部分,其中第一部分填充到slice_b的offset_2,而尺寸过大部分将从offset_1开始指向slice_a。后续数据片段将以相同方式高速缓存在slice_a和slice_b的offset_1到offset_2之间。
下面进一步讨论根据本发明的实施例的使用硬件模块计算下一个数据片段的地址以执行循环寻址。假设循环寻址的范围被预定义为包括slice_a(501)和slice_b(502)的offset_1(503)到offset_2(504)之间的存储器空间。在深度维度中,起始地址被定义为offset_1,而循环寻址的可用深度被定义为(offset_2-offset_1+1)。在宽度维度中,起始地址被定义为slice_a,而循环寻址的可用宽度被定义为(slice_b-slice_a+1)。假设当前地址是(offset_i,slice_j)并且要加载的数据片段的长度为L,则新的深度地址offset_i'可以被计算为offset_1+(offset_i-offset_1+L)%(offset_2-offset_1+1)。新的宽度地址slice_j'可以被计算为slice_a+(slice_i-slice_a+(offset_i-offset_1+L)/(offset_2-offset_1+1))%(slice_b-slice_a+1)。
这些计算和附加的循环寻址指令可以通过包括例如地址发生器的硬件模块来提供。图8中提供了包括根据本发明的实施例的地址发生器的集成电路处理器的简化图。集成电路设备810包括程序存储器811、数据存储器814(诸如SRAM)以及处理器核812,该处理器核812包括用于数据存储器寻址和访问的循环地址发生器815、包括循环缓存器程序寄存器的寄存器文件813。集成电路设备810还可以包括附加的逻辑部件,诸如指令解码器(未示出)。循环地址发生器815为数据存储器814中的循环缓存器提供管理,并且计算要在数据存储器中高速缓存的数据片段的地址,如上面所讨论的。处理器812执行来自程序存储器811的指令,其包括循环寻址指令。示例性循环寻址指令在图3中示出并且在上面讨论。循环地址指令依赖于寄存器文件813中的循环缓存器程序寄存器。
在如上面所讨论使用循环寻址将数据片段高速缓存在slice_a或slice_b中之后,可以将数据片段传送到MUX模块(505)并在其中多路复用,并且然后在MAC阵列(506)中进行处理以进行也如图5中所示的卷积运算(或基于任何其它模型的乘法和求和运算)。
图6说明了根据本发明的一个实施例的在2-D SRAM中执行循环寻址的另一个例子。SRAM包含7个切片(slice_0-slice_6),并且每个切片具有从offset_0到offset_1000的深度。可以基于包括例如SRAM的各个部分的分布和效用的不同的考虑来选择SRAM中的循环地址范围。可以针对不同的输入特征、数据类型选择不同的范围。在这里,循环寻址的范围仅包含用于数据存储和处理的SRAM的一部分,其包括从offset_400(603)到offset_900(604)的slice_1(601)和slice_2(602)。
在图6中,可以在每个切片中的两个连续偏移边界(例如在slice_1中的offset_400到offset_500之间以及在slice_2中的offset_800到offset_900之间)之间高速缓存40KB数据。因此,slice_1和slice_2各自都可以将offset_400中的200KB数据缓存到offset_900的范围。因此,用于循环寻址的整个可用SRAM可以高速缓存总共400KB的数据。假设每个输入特征的大小为640×640×32(12MB),并且卷积运算的输出特征大小为320×320×32(3MB),则12MB的整个输入特征无法一次性高速缓存到400KB范围内。因此,输入特征需要被划分成片段,例如,划分成各自具有10×640×32(200KB)的大小的片段。
假设在这个实施例中使用的卷积核具有步长为2的5×5的大小(也可以使用其它大小的核),则将卷积核应用于输入特征的片段将会导致计算相邻片段时产生2×640×32(40KB)边界重叠数据。使用循环寻址,在上一个片段的重叠40KB边界数据之后,只需要加载下一个片段的160KB非重叠数据。如果加载下一个片段超出用于循环寻址的例如由(slice_id,offset_id)定义的预定义SRAM范围,则应用循环寻址以将该片段中的多余数据重新定向到循环地址范围内的另一个位置。
在图6的这个例子中,存储在片外存储器(例如,DDR存储器)中的12MB的第一输入特征被划分成多个200KB的片段。为了对第一输入特征执行卷积运算,首先将第一片段的200KB数据加载到从地址SRAM(1,800)(即,slice 1和offset_800)开始的循环寻址范围中。在加载40KB数据之后,它达到SRAM(1,900)。从SRAM(2,400)开始将第一片段的剩余160KB数据重新定向到slice_2,并且继续填充slice_2直到SRAM(2,800)。高速缓存在SRAM中的第一片段(从SRAM(1,800)到(1,899)高速缓存的第一部分和从SRAM(2,400)到(2,799)高速缓存的第二部分)然后在MAC阵列中进行处理以便执行卷积运算。将50KB的输出数据缓存到SRAM的预定义范围/地址(例如,图6中的slice_5,offset_350到offset_500),并且然后接着将其存储到片外存储器(例如,DDR)中。接下来,在第一片段之后将第一输入特征的第二片段的非重叠160KB数据从SRAM(2,800)开始加载到SRAM中。再次,在加载160KB数据中的40KB之后,它到达循环地址范围的下边界SRAM(2,900)。然后将剩余120KB数据重新定向到SRAM(1,400),并且继续高速缓存到SRAM(1,700)。高速缓存在SRAM中的第二片段(在SRAM(2,700)到(2,799)之间高速缓存的重叠40KB数据的第一部分、从SRAM(2,800)到(2,899)高速缓存的40KB数据的第二部分,以及从SRAM(1,400)到(1,699)高速缓存的120KB的第三部分)在MAC阵列中进行处理以便执行卷积运算。在将它们存储到片外存储器之前,50KB输出数据类似地存储到SRAM中的预定义地址(例如slice_5)中。
在本发明的另一个实施例中,除了通过如上文所讨论的硬件模块提供的循环寻址指令之外,还可以使用软件模块(例如编译器扩展)来提供附加的循环寻址指令。这些附加的软件指令使得尽管SRAM的物理大小有限,也能够在几乎无限存储器空间中连续地高速缓存数据片段,并且计算高速缓存的片段,诸如执行卷积运算。图7说明了通过软件模块提供的这些附加循环寻址指令的示例性流程图。
用于处理每个数据片段的基于软件的指令在步骤701开始。在步骤702,判定用于高速缓存输入数据片段的剩余可用SRAM的大小是否等于或大于输入数据片段的非重叠数据的大小。如果确定为是,则进入步骤703以将t输入片段的非重叠数据加载到SRAM中。在步骤704,对该片段的高速缓存的非重叠和重叠数据执行卷积运算。在卷积运算完成之后,对这个片段的处理结束。另一方面,如果在步骤702确定用于高速缓存输入数据片段的剩余可用SRAM的大小不等于或大于输入数据片段的非重叠数据的大小,则指令进行到步骤705以计算重叠数据的大小。在步骤706,执行计算以在覆盖未使用的数据之前确定剩余可用SRAM的大小。在步骤707,将等于可用SRAM的剩余大小的片段的相同大小的非重叠数据加载到SRAM中,并且使用如上文所讨论的循环寻址将片段的多余非重叠数据重新定向到另一预定义地址。在步骤708,对重叠数据执行卷积运算,该片段的非重叠数据的部分适应于剩余的SRAM大小,并且该片段的非重叠数据的部分被高速缓存在重新定向的地址中。在步骤709,检查整个数据片段是否已经进行。如果为否,则返回到步骤705以在数据片段进行到结束之前高速缓存并计算数据片段中的剩余数据。
本文公开的每种方法都包括用于实现所描述的方法的一个或多个步骤或动作。在不脱离权利要求书的范围的情况下,方法的步骤和/或动作可以彼此互换和/或组合成单个步骤。换句话说,除非为了正在描述的方法的正确操作需要特定的步骤或动作顺序,否则可以在不脱离权利要求书范围的情况下修改特定步骤和/或动作的顺序和/或使用。
应当理解的是,权利要求书不限于上面说明的精确配置和组成。在不脱离权利要求书范围的情况下,可以对本文描述的系统、方法和装置的布置、操作和细节进行各种修改、改变和变化。
Claims (20)
1.一种用于执行循环寻址的方法,包括:
定义存储器系统中的循环寻址区域,其中所述循环寻址区域具有地址为Ax的上边界和地址为Ay的下边界;
将数据样本划分为多于一个连续数据片段,其中多于一个连续数据片段包括片段D0至Dn,其中n等于或大于1;
提供用于执行的指令集,其中所述指令集被配置用于计算地址Ai,其中所述数据片段Di从地址Ai开始存储在循环寻址区域中,其中所述数据片段Di具有长度L,包括长度为L1的第一部分和长度为L2的第二部分,其中所述数据片段Di的第一部分与数据片段Di-1重叠,其中i大于0且小于或等于n;
执行所述指令集以基于地址Ai-1计算地址Ai,其中数据片段Di-1从地址Ai-1开始存储在循环寻址区域中;其中所述地址Ai被计算为Ax+(Ai-1–Ax+L2)%(Ay–Ax+1);其中%指示在(Ai-1–Ax+L2)除以(Ay–Ax+1)之后求余数的取模运算;以及
从地址Ai开始存储数据片段Di。
2.一种用于执行循环寻址的方法,包括:
定义存储器系统中的循环寻址区域,其中所述循环寻址区域具有宽度和深度,其中所述循环寻址区域的宽度被划分成包括Slice_a到Slice_b的一个或多个切片,并且所述循环寻址区域的可用宽度被定义为(Slice_a–Slice_b+1);其中所述循环寻址区域的深度具有地址为Offset_x的上边界和地址为Offset_y的下边界,并且所述循环寻址区域的可用深度被定义为(Offset_y-Offset_x+1);
将数据样本划分为多于一个连续数据片段,其中多于一个连续数据片段包括片段D0至Dn,其中n等于或大于0;
提供用于执行的指令集,其中所述指令集被配置用于计算数据片段Di的(Slice_i,Offset_j),其中所述数据片段Di从地址Offset_j开始存储在循环寻址区域中的Slice_i中,其中所述数据片段Di具有长度L,包括长度为L1的第一部分和长度为L2的第二部分,其中所述数据片段Di的第一部分与数据片段Di-1重叠,其中i等于或大于0且小于或等于n;
执行所述指令集以基于(Slice_i-1,Offset_j-1)计算数据片段Di的(Slice_i,Offset_j),其中所述数据片段Di-1从地址Offset_j-1开始存储在循环寻址区域中的Slice_i-1中;其中Offset_j计算为Offset_x+(Offset_i-1–Offset_x+L)%(Offset_y–Offset_x+1);其中地址Slice_i被计算为Slice_a+(Slice_i-1–Slice_a+(Offset_i-1–Offset_x+L)/(Offset_y–Offset_x+1))%(Slice_b–Slice_a+1);其中%指示在相除之后求余数的取模运算;以及
在深度中从Offset_i开始,将数据片段Di在宽度中存储在Slice_i中。
3.如权利要求2所述的方法,进一步包括传送并多路复用数据片段Di。
4.如权利要求2所述的方法,进一步包括对数据片段Di执行计算。
5.如权利要求4所述的方法,其中,所述计算包括卷积运算。
6.如权利要求5所述的方法,其中,在深度学习应用中执行所述方法。
7.如权利要求2所述的方法,其中,所述存储器系统包括嵌入式设备内的存储器。
8.如权利要求2所述的方法,其中,所述存储器系统包括SDRAM。
9.如权利要求8所述的方法,其中,所述SDRAM包括多于一个循环寻址区域。
10.如权利要求2所述的方法,其中,使用一个或多个软件模块提供该指令集。
11.如权利要求2所述的方法,其中,使用一个或多个硬件模块来执行所述方法。
12.一种用于执行循环寻址的装置,包括:
集成电路设备,其中所述集成电路包括数据存储器和处理器核;
其中所述处理器核进一步包括循环地址发生器;
其中所述循环地址发生器被配置用于在所述数据存储器中执行数据存储器寻址和访问;
其中所述数据存储器包括具有宽度和深度的一个或多个循环寻址区域,其中一个循环寻址区域的宽度被划分成包括Slice_a到Slice_b的一个或多个切片,且所述循环寻址区域的可用宽度被定义为(Slice_a–Slice_b+1);其中n等于或大于0;其中所述循环寻址区域的深度具有地址为Offset_x的上边界和地址为Offset_y的下边界,并且所述循环寻址区域的可用深度被定义为(Offset_y-Offset_x+1);
其中所述循环地址发生器被配置用于执行指令集以计算长度为L的数据片段Di的(Slice_i,Offset_j),其中所述数据片段Di包含在包括片段D0到Dn的多于一个连续数据片段中,其中n等于或大于0,并且其中i等于或大于0且小于或等于n;其中所述数据片段Di从地址Offset_j开始存储在所述循环寻址区域中的Slice_i中;
其中所述循环地址发生器被配置用于基于(Slice_i-1,Offset_j-1)计算数据片段Di的(Slice_i,Offset_j),其中数据片段Di-1从地址Offset_j-1开始存储在循环寻址区域中的Slice_i-1中;其中Offset_j被计算为Offset_x+(Offset_i-1–Offset_x+L)%(Offset_y–Offset_x+1);其中地址Slice_i被计算为Slice_a+(Slice_i-1–Slice_a+(Offset_i-1–Offset_x+L)/(Offset_y–Offset_x+1))%(Slice_b–Slice_a+1);其中%指示在相除之后求余数的取模运算;并且
其中处理器核进一步被配置用于:在深度中从Offset_i开始,将数据片段Di存储在循环寻址区域中的Slice_i中。
13.如权利要求12所述的装置,其中,所述数据存储器包括SDRAM。
14.如权利要求12所述的装置,其中,所述集成电路设备进一步包括寄存器文件,其中所述寄存器文件包括循环缓存器程序寄存器。
15.如权利要求12所述的装置,其中,所述处理器核进一步被配置用于传送数据片段Di以进行多路复用。
16.如权利要求12所述的装置,其中,所述处理器核进一步被配置用于对数据片段Di执行计算。
17.如权利要求16所述的装置,其中,所述计算包括卷积运算。
18.如权利要求16所述的装置,其中,所述装置进一步包括在集成电路设备外部的另一个存储器,其中所述存储器被配置用于存储来自对数据片段Di的计算的输出。
19.如权利要求16所述的装置,其中,在深度学习应用中执行所述计算。
20.如权利要求12所述的装置,其中,所述设备是移动手持设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811074632.7A CN109324984B (zh) | 2018-09-14 | 2018-09-14 | 在卷积运算中使用循环寻址的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811074632.7A CN109324984B (zh) | 2018-09-14 | 2018-09-14 | 在卷积运算中使用循环寻址的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109324984A true CN109324984A (zh) | 2019-02-12 |
CN109324984B CN109324984B (zh) | 2020-06-26 |
Family
ID=65265256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811074632.7A Active CN109324984B (zh) | 2018-09-14 | 2018-09-14 | 在卷积运算中使用循环寻址的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109324984B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110009103A (zh) * | 2019-03-26 | 2019-07-12 | 深兰科技(上海)有限公司 | 一种深度学习卷积计算的方法和装置 |
CN112631955A (zh) * | 2020-12-18 | 2021-04-09 | 北京地平线机器人技术研发有限公司 | 数据处理方法、装置、电子设备以及介质 |
WO2021119907A1 (en) * | 2019-12-16 | 2021-06-24 | Intel Corporation | Technology to mininimize negative impact of cache conflicts caused by incompatible leading dimensions in matrix multiplication and convolution kernels without dimension padding |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1556470A (zh) * | 2004-01-09 | 2004-12-22 | 上海汉芯半导体科技有限公司 | 具有高效取模寻址单元的数字信号处理器 |
CN1584824A (zh) * | 2003-08-18 | 2005-02-23 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微处理器构架及指令实现方式 |
CN102221987A (zh) * | 2011-05-11 | 2011-10-19 | 西安电子科技大学 | 基于嵌入式专用指令集处理器的指令集编码方法 |
US20120066472A1 (en) * | 2004-04-23 | 2012-03-15 | Gonion Jeffry E | Macroscalar processor architecture |
CN103365821A (zh) * | 2013-06-06 | 2013-10-23 | 北京时代民芯科技有限公司 | 一种异构多核处理器的地址生成器 |
CN105678378A (zh) * | 2014-12-04 | 2016-06-15 | 辉达公司 | 间接访问样本数据以在并行处理系统中执行多卷积操作 |
CN107992943A (zh) * | 2016-10-06 | 2018-05-04 | 想象技术有限公司 | 用于卷积神经网络的缓冲器寻址 |
CN108133264A (zh) * | 2016-12-01 | 2018-06-08 | 上海兆芯集成电路有限公司 | 执行高效3维卷积的神经网络单元 |
CN108268941A (zh) * | 2017-01-04 | 2018-07-10 | 意法半导体股份有限公司 | 深度卷积网络异构架构 |
CN108268932A (zh) * | 2016-12-31 | 2018-07-10 | 上海兆芯集成电路有限公司 | 神经网络单元 |
-
2018
- 2018-09-14 CN CN201811074632.7A patent/CN109324984B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1584824A (zh) * | 2003-08-18 | 2005-02-23 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微处理器构架及指令实现方式 |
CN1556470A (zh) * | 2004-01-09 | 2004-12-22 | 上海汉芯半导体科技有限公司 | 具有高效取模寻址单元的数字信号处理器 |
US20120066472A1 (en) * | 2004-04-23 | 2012-03-15 | Gonion Jeffry E | Macroscalar processor architecture |
CN102221987A (zh) * | 2011-05-11 | 2011-10-19 | 西安电子科技大学 | 基于嵌入式专用指令集处理器的指令集编码方法 |
CN103365821A (zh) * | 2013-06-06 | 2013-10-23 | 北京时代民芯科技有限公司 | 一种异构多核处理器的地址生成器 |
CN105678378A (zh) * | 2014-12-04 | 2016-06-15 | 辉达公司 | 间接访问样本数据以在并行处理系统中执行多卷积操作 |
CN107992943A (zh) * | 2016-10-06 | 2018-05-04 | 想象技术有限公司 | 用于卷积神经网络的缓冲器寻址 |
CN108133264A (zh) * | 2016-12-01 | 2018-06-08 | 上海兆芯集成电路有限公司 | 执行高效3维卷积的神经网络单元 |
CN108268932A (zh) * | 2016-12-31 | 2018-07-10 | 上海兆芯集成电路有限公司 | 神经网络单元 |
CN108268941A (zh) * | 2017-01-04 | 2018-07-10 | 意法半导体股份有限公司 | 深度卷积网络异构架构 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110009103A (zh) * | 2019-03-26 | 2019-07-12 | 深兰科技(上海)有限公司 | 一种深度学习卷积计算的方法和装置 |
WO2021119907A1 (en) * | 2019-12-16 | 2021-06-24 | Intel Corporation | Technology to mininimize negative impact of cache conflicts caused by incompatible leading dimensions in matrix multiplication and convolution kernels without dimension padding |
CN112631955A (zh) * | 2020-12-18 | 2021-04-09 | 北京地平线机器人技术研发有限公司 | 数据处理方法、装置、电子设备以及介质 |
CN112631955B (zh) * | 2020-12-18 | 2024-01-19 | 北京地平线机器人技术研发有限公司 | 数据处理方法、装置、电子设备以及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109324984B (zh) | 2020-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220383067A1 (en) | Buffer Addressing for a Convolutional Neural Network | |
US11960566B1 (en) | Reducing computations for data including padding | |
US11816559B2 (en) | Dilated convolution using systolic array | |
CN106445471A (zh) | 处理器和用于在处理器上执行矩阵乘运算的方法 | |
US11436017B2 (en) | Data temporary storage apparatus, data temporary storage method and operation method | |
CN108573305B (zh) | 一种数据处理方法、设备及装置 | |
CN109324984A (zh) | 在卷积运算中使用循环寻址的方法和装置 | |
CN109656623A (zh) | 执行卷积运算操作的方法及装置、生成指令的方法及装置 | |
CN111310115B (zh) | 数据处理方法、装置及芯片、电子设备、存储介质 | |
CN107909537A (zh) | 一种基于卷积神经网络的图像处理方法及移动终端 | |
CN114341881A (zh) | 在脉动阵列上卷积的通用填充支持 | |
US11481994B2 (en) | Method and apparatus for extracting image data in parallel from multiple convolution windows, device, and computer-readable storage medium | |
US20110054872A1 (en) | Optical simulator using parallel computations | |
CN109447239B (zh) | 一种基于arm的嵌入式卷积神经网络加速方法 | |
CN112990157B (zh) | 一种基于fpga的图像目标识别加速系统 | |
CN107111878B (zh) | 数据处理方法、装置及系统 | |
CN111985617A (zh) | 3d卷积神经网络在神经网络处理器上的处理方法和装置 | |
CN108415881A (zh) | 卷积神经网络的运算装置及方法 | |
GB2585810A (en) | Buffer addressing for a convolutional neural network | |
JP5045652B2 (ja) | 相関処理装置及びその相関処理装置で読みとり可能な媒体 | |
CN109816613A (zh) | 图像补全方法及装置 | |
KR101699029B1 (ko) | 영역 처리 속도를 향상한 영상 처리 장치 및 영상 처리 방법 | |
JP3860545B2 (ja) | 画像処理装置及び画像処理方法 | |
US10936487B2 (en) | Methods and apparatus for using circular addressing in convolutional operation | |
CN112215330B (zh) | 基于神经网络的卷积方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |