一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于神经网络执行期间的存储器分配的方法与流程

2022-06-18 03:59:45 来源:中国专利 TAG:

用于神经网络执行期间的存储器分配的方法
1.相关申请的交叉引用
2.本技术要求于2020年12月16日提交的法国申请第2013373号的优先权,该申请通过引用被整体并入本文中。
技术领域
3.本公开总体上涉及人工神经网络,并且在具体实施例中,涉及神经网络映射期间的存储器分配。


背景技术:

4.人工神经网络可以由诸如微控制器的集成电路来实现。人工神经网络通常包括一系列神经元层。人工神经网络将数据集合作为第一层的输入,并且将最终结果作为最后一层的输出来传递。被布置在第一层与最后一层之间的每层在其输出处生成中间结果数据的块,也称为张量数据。其他层将这些中间结果数据作为输入,并且由此生成对应的中间结果数据。
5.在神经网络的执行期间,每个中间结果被临时存储在集成电路的存储器的存储区域(称为全局存储器区域)中。然而,集成电路具有有限大小的存储器。限制存储由神经网络层生成的中间结果所需的大小将是有利的。
6.方法用于在神经网络的执行期间定义中间结果缓冲在存储器中的放置,以限制用于存储中间结果的存储器的大小。
7.例如,以编号ep3663987公开的欧洲专利申请或以编号no.2004337提交的法国专利申请公开了这样的方法。
8.除此之外,层的执行可能需要将暂存(scratch)数据临时存储在存储器中。暂存数据是仅由给定层使用的临时层内数据,并且仅在该给定层的执行期间需要被分配。
9.例如,暂存数据可以是权重、与层相关的临时中间结果或查找表的副本。暂存数据也可以是针对计算密集型任务(诸如循环展开)的层内数据。然而,这种暂存数据的临时存储通常没有被优化。为了使神经网络的推理时间最小化,暂存数据的临时存储通常导致ram或闪速存储器损失。
10.提供一种用于有效地分配和放置暂存数据的方法将是有利的。


技术实现要素:

11.根据一个方面,提出了一种用于定义在人工神经网络的执行期间使用的临时暂存缓冲在易失性存储器中的放置的方法。根据一个实施例,该方法包括:确定神经网络的层的执行次序;根据层的执行次序,定义由每层生成的中间结果缓冲在易失性存储器的堆存储器区中的放置。该方法还包括:在层的执行上确定堆存储器区的至少一个自由区域;以及根据层的执行次序,定义临时暂存缓冲在堆存储器区的至少一个自由区域中的放置。
12.在实施例中,根据神经网络的层的执行次序,中间结果缓冲的放置确定用于分配
这些中间结果缓冲所需的堆存储器区的限制。
13.在实施例中,只要层的执行需要中间结果缓冲,就在堆存储器区中分配它们。当用于层的执行的中间结果缓冲具有比堆存储器区的大小更小的累积大小时,在堆存储器区中出现自由区域。这种方法允许用于分配中间结果缓冲的堆存储器区的可用自由区域也被用于分配暂存缓冲。
14.暂存缓冲可以用于层内级优化。例如,暂存缓冲用于将层的权重从闪速存储器移动到随机存取存储器(ram)。暂存缓冲也可以用于针对计算密集型任务的循环展开。使用堆存储器区的自由区域来分配暂存缓冲使得可以在不增加ram或闪速存储器的大小的情况下优化推理时间。该方法还允许降低用于神经网络的执行的功耗。
15.对神经网络的层的执行次序的确定可以通过深度优先搜索算法(例如,通过使用有向无环图(directed acyclic graphs))来执行。
16.以编号ep3663987出版的欧洲专利申请或以编号n20.04337提交的法国专利申请所公开的方法可以用于定义中间结果缓冲在堆存储器区中的放置。
17.在一个实施例中,该方法包括针对每层:将与该层相关联的临时暂存缓冲从最大缓冲到最小缓冲进行排序,将可变大小暂存缓冲排列在最小缓冲之后,以及遵循它们的次序来定义临时暂存缓冲的放置。
18.在一个实施例中,所定义的暂存缓冲的放置是暂存缓冲在至少一个自由区域的顶部的放置。
19.在一个实施例中,所定义的暂存缓冲的放置是暂存缓冲在至少一个自由区域的底部的放置。
20.在一个实施例中,所定义的暂存缓冲的放置是暂存缓冲在另一暂存缓冲上的放置。
21.在一个实施例中,该方法包括,针对暂存缓冲的放置:修改堆存储器区的顶部,以在堆存储器区的顶部获得具有暂存缓冲的大小的自由区域,以及定义暂存缓冲在堆存储器区的顶部的自由区域中的放置。
22.在一个实施例中,该方法包括,针对暂存缓冲的放置:修改堆存储器区的底部,以在堆存储器区的底部获得具有暂存缓冲的大小的自由区域,以将暂存缓冲放置在堆存储器区的底部的自由区域中。
23.在一个实施例中,在定义具有固定大小的暂存缓冲的放置之后,在堆存储器区的至少一个剩余自由区域中定义针对具有可变大小的暂存缓冲的放置。有利的是,当存在若干剩余自由区域可用于具有可变大小的暂存缓冲的放置时,选择这些剩余自由区域中的最大自由区域以用于放置该暂存缓冲。
24.优选地,该方法包括:将针对层的自由区域存储在列表中,并且在暂存缓冲的每个放置定义之后更新该列表。
25.在一个实施例中,提出了一种计算机程序产品,该计算机程序产品包括指令,当该程序由计算机执行时,该指令使得计算机执行上述方法。
26.在一个实施例中,提出了一种集成电路,该集成电路具有:被配置为存储神经网络的非易失性存储器、易失性存储器和处理器。处理器被配置为:确定神经网络的层的执行次序;根据层的执行次序,定义由每层生成的中间结果缓冲在易失性存储器的堆存储器区中
的放置;在层的执行上确定堆存储器区的至少一个自由区域;以及根据层的执行次序,定义临时暂存缓冲在堆存储器区的至少一个自由区域中的放置。
27.在一个实施例中,处理器还被配置为,针对每层:将与该层相关联的临时暂存缓冲从最大缓冲到最小缓冲进行排序;将可变大小暂存缓冲排列在最小缓冲之后;以及遵循它们的次序,定义临时暂存缓冲的放置。
28.在一个实施例中,处理器被配置为:定义暂存缓冲在至少一个自由区域的顶部的放置。
29.在一个实施例中,处理器被配置为:定义暂存缓冲在至少一个自由区域的底部的放置。
30.在一个实施例中,处理器被配置为:定义暂存缓冲另一暂存缓冲上的放置。
31.有利地,处理器被配置为,针对暂存缓冲的放置:修改堆存储器区的顶部,以便在堆存储器区的顶部获得具有暂存缓冲的大小的自由区域;以及定义暂存缓冲在堆存储器区的顶部的自由区域中的放置。
32.在一个实施例中,处理器被配置为,针对暂存缓冲的放置:修改堆存储器区的底部,以便在堆存储器区的底部获得具有暂存缓冲的大小的自由区域;以及将暂存缓冲放置在堆存储器区的底部的自由区域中。
33.优选地,处理器被配置为:在定义具有固定大小的暂存缓冲的放置之后,定义具有可变大小的暂存缓冲在堆存储器区的至少一个剩余自由区域中的放置。有利地,处理器被配置为:当存在若干剩余自由区域可用于具有可变大小的暂存缓冲的放置时,选择这些剩余自由区域中的最大自由区域以用于放置该暂存缓冲。
34.在一个实施例中,处理器被配置为:将针对给定层的自由区域存储在列表中,在暂存缓冲的每个放置定义之后更新列表。
附图说明
35.本发明的其他优点和特征将出现在实施例和实施方式的详细描述中,但不是限制性的,并且在附图中:
36.图1是实施例集成电路的框图;
37.图2是实施例方法的流程图;
38.图3是随时间推移的实施例中间结果缓冲放置的示意图;
39.图4是实施例方法的流程图;以及
40.图5是中间结果缓冲和暂存缓冲的实施例放置的图。
具体实施方式
41.图1示出了集成电路(ci)。该集成电路(ci)可以是例如微控制器、代码生成器或可以包含板上(on-board)或硬件软件架构的任何其他对象。
42.集成电路(ci)被配置为实现神经网络。神经网络包括一系列层。
43.集成电路(ci)包括非易失性存储器(mnv),该非易失性存储器被配置为存储对神经网络的架构进行定义的各种参数(如其层的配置以及其权重和参数)。
44.集成电路(ci)还包括易失性存储器(mv),例如ram存储器(针对“随机存取存储
器”)。易失性存储器(mv)被配置为存储神经网络的执行代码以及用于执行神经网络的程序。易失性存储器(mv)还包括被称为堆存储器区的区(zone),该区可以被动态分配以用于在神经网络的执行期间使用的数据的存储。如下文将详细描述的,这些数据可以是由层生成的中间结果或用于给定层的执行的暂存缓冲数据。
45.堆存储器区可以呈现较快存储器部分和较慢存储器部分。对较快存储器部分的访问比对较慢存储器部分的访问执行得更快。
46.集成电路(ci)还包括处理器(ut)。处理器(ut)包括例如微处理器。处理器(ut)耦合到易失性存储器(mv)。处理器被配置为在神经网络的执行期间分配易失性存储器(mv)的堆存储器区来存储数据。
47.为了在这些神经网络的执行期间优化存储器的分配,在网络的执行之前,实现一种用于定义缓冲在易失性存储器中的放置的方法。
48.处理器(ut)被配置为实现这样的方法。具体地,处理器(ut)可以执行包括指令的计算机程序,当该程序由处理器执行时,该指令使得处理器执行该方法。
49.该方法如图2所示。该方法包括步骤20,其中处理器(ut)确定神经网络的层的执行次序。这允许获得神经网络的层的执行时间表。
50.更具体地,对神经网络的层的执行次序的确定可以通过深度优先搜索算法(例如通过使用本领域技术人员公知的有向无环图)来执行。
51.然后,该方法包括步骤21,其中根据层的执行次序,处理器(ut)定义中间结果缓冲(也称为张量缓冲)在存储器中的放置。
52.具体地,中间结果缓冲用于存储中间结果(也称为张量数据)。中间结果是由除最后一层之外的每层根据在该层的输入处接收的数据计算出的数据。由一个层计算的中间结果在该层的输出上被传递,并且被之后执行的其他层所使用。中间结果需要被存储在存储器中,直到使用它们的层被执行。对中间结果缓冲的放置的定义允许对存储中间结果所需的易失性存储器的堆存储器区的大小的优化。
53.具体地,以编号ep3663987出版的欧洲专利申请或以编号no.2004337提交的法国专利申请所公开的方法可以用于定义中间结果缓冲在堆存储器区中的放置。
54.图3示出了针对每层的随时间推移的中间结果缓冲放置。图3在y轴(纵坐标)上示出了中间结果缓冲在堆存储器区(hmz)中的放置,并且在x轴(横坐标)上示出了作为层1至层n的处理的结果的执行时间。
55.例如,在一些层的执行时间期间,中间结果缓冲tb1、tb2、tb3被放置在堆存储器区中。
56.堆存储器区(hmz)的大小由针对中间结果缓冲而选择的放置来定义。例如,在图3中,堆存储器区的大小sz等于sz=topz-botz,其中topz是堆存储器区的顶部地址,并且botz是堆存储器区的底部地址。如图所示,在大多数层的执行期间,堆存储器区的实际大小没有被完全分配。在大多数层的执行期间,堆存储器区的某些区域是自由的。例如,在图3中,区域fa1、fa2、fa3是自由的。
57.该方法利用堆存储器区的自由区域来分配临时暂存缓冲。具体地,该方法允许对在堆存储器区中的临时暂存缓冲放置的定义。
58.暂存缓冲可以用于存储用于层级优化的暂存数据。在实施例中,暂存缓冲用于将
层的权重从闪速存储器移动到ram。在一些实施例中,暂存缓冲也可以用于针对计算密集型任务的循环展开。
59.暂存数据是针对神经网络的给定层的执行而定义的。因此,每个暂存缓冲与神经网络的给定层相关联。
60.暂存缓冲可以具有固定大小或可变大小。可变暂存缓冲是在神经网络的执行之前具有未知大小的暂存缓冲。具有可变大小的暂存缓冲可能需要最小大小,也可能不需要。
61.具体地,该方法包括步骤22,其中处理器(ut)在层的执行上确定堆存储器区的自由区域。更具体地,堆存储器区的自由区域是针对每层的执行时间而确定的。
62.例如,在图3中,为了继续执行第10层,处理器(ut)需要中间结果缓冲tb2和tb3中所存储的数据。这些中间结果缓冲仅占用堆存储器区中的给定区域。因此,在第10层的执行时间处,区域fa1和fa2是自由的。在实施例中,所确定的自由区域被存储在列表中。
63.然后,该方法包括用于根据层的执行次序来定义临时暂存缓冲在堆存储器区的自由区域中的放置的过程。临时暂存缓冲的放置是根据层的执行时间表而逐个执行的。
64.具体地,在步骤23,根据执行时间表将要放置的临时暂存缓冲存储在队列中。在实施例中,与相同层相关联的临时暂存缓冲从最大到最小被存储在队列中,具有可变大小的暂存缓冲被排列在最小暂存缓冲之后。如下所述,在定义暂存缓冲的放置之后,从队列删除该暂存缓冲。
65.用于定义暂存缓冲的放置的过程包括步骤24,其中处理器(ut)检查队列是否为空。如果队列不为空,则这意味着仍然存在至少一个暂存缓冲要放置。在这种情况下,下一步骤为步骤25。
66.如果队列为空,则这意味着没有暂存缓冲要放置。在这种情况下,该方法在步骤28结束。
67.当队列不为空时,在步骤25,处理器(ut)恢复队列中的第一个暂存缓冲,以将其放入堆存储器区。
68.具体地,在步骤26,处理器(ut)检查在与步骤25恢复的暂存缓冲相关联的层的执行时间处可用的堆存储器区的自由区域。该检查根据在层的执行时间处可用的自由区域的列表来执行。
69.然后,在步骤27,处理器(ut)根据暂存缓冲的约束和可允许移动来定义暂存缓冲的放置。
70.图4示出了用于定义暂存缓冲在堆存储器区中的放置的过程。
71.更具体地,在步骤40,处理器(ut)检查针对暂存缓冲是否需要延迟优化。如果需要延迟优化,则处理器(ut)在步骤41选择堆存储器区的较快存储器部分作为堆存储器区中将放置暂存缓冲的部分。接下来,处理器(ut)根据与暂存缓冲相关联的层的执行时间从自由区域列表中提取较快存储器部分的自由区域。
72.如果不需要延迟优化,则处理器(ut)在步骤42选择堆存储器区中较慢存储器部分作为堆存储器区中将放置暂存缓冲的部分。接下来,处理器(ut)根据与暂存缓冲相关联的层的执行时间从自由区域列表中提取较慢存储器部分的自由区域。
73.然后,在步骤43,处理器(ut)评估是否有可能将暂存缓冲放置在从列表中提取的自由区域中。
74.具体地,处理器(ut)将暂存缓冲的大小与从列表中提取的每个自由区域的大小进行比较。当提取的自由区域的大小大于或等于暂存缓冲的大小时,该提取的自由区域被适配为接收暂存缓冲。
75.如果存在至少一个自由区域被适配为接收暂存缓冲,则处理器(ut)直接进行步骤44,其中处理器(ut)定义暂存缓冲的放置。
76.如果不存在被适配为接收暂存缓冲的自由区域,则在步骤44,处理器(ut)增加堆存储器区中暂存缓冲必须被放置在其中的部分的大小。
77.在实施例中,处理器(ut)增加堆存储器区的顶部或底部,以在堆存储器区的顶部或底部获得具有被适配为接收暂存缓冲的大小的自由区域。
78.在实施例中,当分别在全局存储器大小的顶部和底部不存在自由区域时,处理器(ut)分别修改堆存储器区的顶部地址和底部地址,以便获得大小等于暂存缓冲大小的自由区域。
79.然而,当分别在堆存储器区的顶部和底部存在自由区域时,处理器(ut)分别修改顶部地址和底部地址,以便将自由区域的大小增加暂存缓冲的大小与自由区域的初始大小之间的差。
80.然后,处理器(ut)进行步骤45。在步骤45,处理器(ut)定义暂存缓冲的放置。在实施例中,如果暂存缓冲具有固定大小,则处理器(ut)选择从列表中提取的最小自由区域来放置暂存缓冲,该最小自由区域的大小被适配为接收暂存缓冲。然后,处理器(ut)可以根据不同的可能放置来放置具有固定大小的暂存缓冲。
81.针对固定大小暂存缓冲的第一种放置包括:为了使最终堆大小最小化并且当特定层实现请求时,将暂存缓冲放置为与另一暂存缓冲叠加以用于层的执行。在实施例中,将暂存缓冲放置在大小大于或等于要放置的暂存缓冲的、已经放置的暂存缓冲上。当存在与大小小于要放置的暂存缓冲的、已经放置的暂存缓冲相邻的自由区域,该自由区域的大小大于或等于要放置的暂存缓冲与已经放置的暂存缓冲之间的差时,也可以将暂存缓冲放置在该已经放置的暂存缓冲上。在实施例中,该自由区域是与已经放置的暂存缓冲的底部相邻的自由区域。
82.针对固定大小暂存缓冲的第二种放置包括:将暂存缓冲放置在大小被适配为接收暂存缓冲的最小自由区域的顶部。
83.针对固定大小暂存缓冲的第三种放置包括:将暂存缓冲放置在大小被适配为接收暂存缓冲的最小自由区域的底部。
84.在实施例中,当定义了与相同层相关联的具有固定大小的暂存缓冲的所有可能放置时,处理器进行对与相同层相关联的具有可变大小的暂存缓冲的放置的定义。
85.为了放置具有可变大小的暂存缓冲,处理器(ut)选择列表中剩余的最大自由区域集合来放置暂存缓冲。在实施例中,剩余的自由区域按照递减的大小来排序。
86.如果要放置的具有可变大小的暂存缓冲的数目小于或等于剩余自由区域的数目,则每个暂存缓冲可以被放置在以递减的大小次序进行排序的给定的剩余自由区域中。在这种情况下,所定义的暂存缓冲的大小等于其中暂存缓冲被放置的剩余自由区域的大小。
87.然而,如果要放置的具有可变大小的暂存缓冲的数目大于剩余自由区域的数目,则处理器计算要放置在剩余自由区域中的暂存缓冲的数目的平均值。因此,具有可变大小
的暂存缓冲可以与具有可变大小的至少一个其他暂存缓冲一起被放置在剩余的自由区域中。在实施例中,所定义的要放置的暂存缓冲的大小等于其中暂存缓冲被放置的剩余自由区域的大小除以要放置在该剩余自由区域中的暂存缓冲的数目。
88.此外,在具有可变大小的暂存缓冲需要比每个剩余自由区域的大小更大的最小大小的情况下。在步骤44,可以增加堆存储器区的顶部或底部,以在堆存储器区的顶部或底部获得大小等于该暂存缓冲所需的最小大小的自由区域。然后,将暂存缓冲放在该自由区域中。
89.在暂存缓冲的放置之后,更新自由区域列表,并且从队列中删除暂存缓冲。
90.然后,从步骤24开始重复该过程,以便在队列中放置下一个暂存缓冲,直到队列为空。当队列为空时,没有更多暂存缓冲要放置。该方法在步骤28结束。
91.然而,可以重复用于定义暂存缓冲的放置的过程,以尝试针对每个暂存缓冲的不同放置。这允许为暂存缓冲找到优化的放置。具体地,可以根据给定的标准来优化放置。例如,标准可以是为了避免由中间结果缓冲的放置所定义的堆存储器区的增加。另一标准可以是为了保持放置方案允许获得最小大小的堆存储器区。备选地,另一标准可以是为了保持放置方案允许获得最少碎片化的存储器区。另一标准可以是为了保持放置方案允许使暂存缓冲在堆存储器区的较快存储器部分中的放置最大化,以加速神经网络的执行。
92.图5示出了中间结果缓冲和暂存缓冲的放置的最终方案的示例。中间结果缓冲的放置与图3中的相同(例如,缓冲tb1、tb2和tb3)。因此,中间结果缓冲的放置定义了地址botz与topz之间的堆存储器区。
93.在实施例中,一些暂存缓冲被放置在一些自由区域的顶部或底部。例如,暂存缓冲sb1被放置在自由区域的顶部。暂存缓冲sb2被放置在自由区域的底部。
94.在实施例中,一些其他暂存缓冲被放置在已经放置的暂存缓冲上。例如,暂存缓冲sb3被放置在已经放置在自由区域的顶部的暂存缓冲上。另一暂存缓冲sb4被放置在暂存缓冲sb3上。
95.在实施例中,为了在没有自由区域可用时放置一些暂存缓冲,增加堆存储器区的顶部或底部。
96.例如,为了放置暂存缓冲sb5,将堆存储器区的顶部的地址增加到地址i_topz,以便在堆存储器区的顶部获得暂存缓冲sb5的大小的自由区域。然后,将暂存缓冲sb5放置在该自由区域中。
97.此外,为了放置暂存缓冲sb6,将堆存储器区的底部的地址修改为地址f_botz,以在堆存储器区的底部获得暂存缓冲sb6的大小的自由区域。然后,将暂存缓冲sb6放置在该自由区域中。
98.为了放置暂存缓冲sb7,将堆存储器区的顶部增加到地址f_topz,因为在暂存缓冲sb6的放置之前所定义的堆存储器区的顶部的自由区域的大小小于暂存缓冲sb7。在实施例中,将堆存储器区的顶部增加暂存缓冲sb7的大小与在暂存缓冲sb7的放置之前所定义的堆存储器区的顶部的自由区域的大小之间的差。
99.最后,将最终的堆存储器区fhmz定义在地址f_topz和地址f_botz之间。
100.在定义了中间结果缓冲和暂存缓冲的放置之后,处理器(ut)可以执行神经网络。当处理器(ut)执行神经网络时,根据所定义的中间结果缓冲的放置和所定义的暂存缓冲的
放置来分配存储器。
101.上述方法允许使用堆存储器区中用于分配中间结果缓冲以转而分配暂存缓冲的可用自由区域。
102.通过使用堆存储器区的自由区域来分配暂存缓冲,可以优化推理时间,而几乎不会影响ram或闪速存储器的大小。
103.该方法还允许降低神经网络的执行的功耗。
104.尽管已经详细描述了该描述,但是应当理解,在不脱离由所附权利要求限定的本公开的精神和范围的情况下,可以进行各种改变、替换和变更。在不同的附图中,相同的元素用相同的附图标记表示。此外,本公开的范围并不旨在限于本文描述的特定实施例,因为本领域普通技术人员将从本公开中容易地理解,当前存在的或以后将开发的过程、机器、制造、物质组成、部件、方法或步骤可以执行与本文描述的相应实施例基本相同的功能或实现基本相同的结果。相应地,所附权利要求旨在将这些过程、机器、制造、物质组成、部件、方法或步骤包括在其范围内。
105.相应地,说明书和附图被简单地视为由所附权利要求限定的本公开的说明,并且被预期为覆盖落入本公开范围内的任何和所有修改、变化、组合或等同物。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献