1.本技术涉及数据存储技术领域,具体涉及一种静态内存分配方法、装置、设备及介质。
背景技术:2.深度学习前向推理主要由算子和包含算子中间计算结果的张量组成,为了减少推理时间,通常会为这些张量预先分配内存,如果给每个张量独立分配内存,推理引擎的内存使用量较大,对内存资源敏感的设备是不适用这种内存分配方式的。
3.实际上,这些张量并不需要并存,可以允许无依赖关系的多个张量共享同一块内存,且在前向推理中,这些张量的信息都能预先知道,因此可使用静态内存分配的方法来提高内存资源的使用率。
技术实现要素:4.本技术实施例提供一种静态内存分配方法、装置、设备及介质,用于提高内存资源的使用率。
5.第一方面,本技术提供一种静态内存分配方法,包括:
6.获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小;
7.将所述多个张量按预设指标进行排序,并按预设规则为所述多个张量分配首地址偏移;其中,所述首地址偏移表示每个张量的首地址与内存池的首地址之间的偏移,所述预设规则包括时间信息重叠的张量的内存地址不重叠、内存地址重叠的张量的时间信息不重叠,每个张量的内存地址是根据每个张量的首地址偏移和空间大小确定的;
8.若存在任一张量的尾地址偏移大于理论阈值,则调整所述多个张量的排序,并按所述预设规则重新为所述多个张量分配首地址偏移;其中,每个张量的尾地址偏移为每个张量的首地址偏移和空间大小之和,所述理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值;
9.直到所述多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。
10.在本技术实施例中,当存在任一张量的尾地址偏移大于理论阈值时,调整多个张量的排序,按照预设规则重新为多个张量分配首地址偏移,直到多个张量满足调优目标之后,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。通过调整排序、设置调优目标的方式,尽量找到最优的排序方式,进而得到多个张量的最优内存分配结果,提高内存资源的使用率。
11.在一种可能的实施例中,将所述多个张量按预设指标进行排序,并按预设规则为所述多个张量分配首地址偏移,包括:
12.生成多个内存操作对应的多个内存矩形;其中,所述多个内存操作表示所述多个张量占用内存的操作,每个内存矩形的长表示每个内存操作的时间长度,每个内存矩形的
宽表示每个内存操作的空间大小;
13.将所述多个内存矩形按预设指标进行排序,并按预设规则排布在所述内存池对应的内存容器中;其中,所述内存池的首地址对应所述内存容器的底部,每个内存矩形与所述底部的距离最小值为每个张量的首地址偏移。
14.在一种可能的实施例中,若存在任一张量的尾地址偏移大于理论阈值,则调整所述多个张量的排序,并按所述预设规则重新为所述多个张量分配首地址偏移,包括:
15.若目标矩形的宽超过理论阈值,调整所述多个内存矩形的排序,并按所述预设规则重新排布在所述内存容器中;其中,所述目标矩形为包含排列后的多个内存矩形的最小矩形,所述目标矩形的宽表示所述多个张量的尾地址偏移中的最大值。
16.在本技术实施例中,将静态内存分配问题转换为二维矩形带装箱问题,对内存操作进行几何抽象表示,根据每个张量占用内存的时间信息和空间大小构造内存矩形,将内存转换为矩形,将内存池转换为内存容器,将多个矩形排布在内存容器中,通过调整多个矩形排布在内存容器中的位置,从而达到调优目标。
17.在一种可能的实施例中,在直到所述多个张量满足多个调优目标中的任意一个目标之后,所述方法还包括:
18.根据每个内存矩形在所述内存容器中的位置,确定每个张量的首地址偏移和尾地址偏移。
19.在一种可能的实施例中,调整所述多个内存矩形的排序,包括:
20.对所述多个内存矩形进行分类,获得高风险内存矩形、中风险内存矩形、低风险内存矩形和无风险内存矩形;其中,所述高风险内存矩形包括尾地址偏移大于所述理论阈值的第一张量对应的第一内存矩形、与所述第一内存矩形存在时间重叠的第二内存矩形,所述中风险内存矩形包括尾地址偏移等于所述理论阈值的第二张量对应的第三内存矩形、与所述第三内存矩形存在时间重叠的第四内存矩形,所述低风险内存矩形包括与所述高风险内存矩形和所述中风险内存矩形存在时间重叠的内存矩形,所述无风险内存矩形包括所述多个内存矩形中除所述高风险内存矩形、所述中风险内存矩形和所述低风险内存矩形之外的内存矩形;
21.分别调整所述高风险内存矩形的排序和所述中风险内存矩形的排序;
22.依次合并调整后的高风险内存矩形、调整后的中风险内存矩形、所述低风险内存矩形和所述无风险内存矩形。
23.在本技术实施例中,将多个内存矩形按照对影响调优目标的风险大小划分为四大类,仅调整中高风险内存矩形的排序,低风险内存矩形和无风险内存矩形则简单按风险等级降序合并,在保证调优效果的同时还降低了算法复杂度。
24.在一种可能的实施例中,分别调整所述高风险内存矩形的排序和所述中风险内存矩形的排序,包括:
25.根据时间重叠长度,将所述高风险内存矩形划分为多个组,以及将所述低风险内存矩形划分为多个组;
26.将每个组的内存矩形按所述预设指标进行排序,并按所述预设规则排布在所述内存容器中;
27.若目标矩形的宽超过所述理论阈值,则调整每个组的内存矩形的排序,并按所述
预设规则重新排布在所述内存容器中;
28.直到每个组的内存矩形满足多个调优目标中的任意一个目标,依次导出调整排序后的每个组的内存矩形,获得调整后的高风险内存矩形和调整后的中风险内存矩形。
29.在本技术实施例中,将高风险内存矩形和中风险内存矩形进一步划分为多个组,依次对每个组的内存矩形进行调优,进一步降低了算法复杂度。且按照时间重叠长度进行聚类划分,将重叠度高的内存矩形分到同一组,这样可以提高布局调优的有效性。
30.在一种可能的实施例中,所述预设指标包括内存矩形的长、内存矩形的宽、内存矩形之间的时间重叠长度中的至少一个指标。
31.在本技术实施例中,对多个内存矩形进行预处理,根据一个或多个指标对多个内存矩形进行排序,可以加快调优速度和改善调优结果。
32.在一种可能的实施例中,所述多个调优目标包括不存在任一张量的尾地址偏移大于所述理论阈值、出现相同的排序结果、调整次数大于或等于预设次数。
33.第二方面,本技术提供一种静态内存分配装置,包括:
34.获取模块,用于获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小;
35.分配模块,用于将所述多个张量按预设指标进行排序,并按预设规则为所述多个张量分配首地址偏移;其中,所述首地址偏移表示每个张量的首地址与内存池的首地址之间的偏移,所述预设规则包括时间信息重叠的张量的内存地址不重叠、内存地址重叠的张量的时间信息不重叠,每个张量的内存地址是根据每个张量的首地址偏移和空间大小确定的;
36.所述分配模块,还用于若存在任一张量的尾地址偏移大于理论阈值,则调整所述多个张量的排序,并按所述预设规则重新为所述多个张量分配首地址偏移;其中,每个张量的尾地址偏移为每个张量的首地址偏移和空间大小之和,所述理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值;
37.确定模块,用于直到所述多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。
38.在一种可能的实施例中,所述分配模块具体用于:
39.生成多个内存操作对应的多个内存矩形;其中,所述多个内存操作表示所述多个张量占用内存的操作,每个内存矩形的长表示每个内存操作的时间长度,每个内存矩形的宽表示每个内存操作的空间大小;
40.将所述多个内存矩形按预设指标进行排序,并按预设规则排布在所述内存池对应的内存容器中;其中,所述内存池的首地址对应所述内存容器的底部,每个内存矩形与所述底部的距离最小值为每个张量的首地址偏移。
41.在一种可能的实施例中,所述分配模块具体用于:
42.若所述目标矩形的宽超过理论阈值,调整所述多个内存矩形的排序,并按所述预设规则重新排布在所述内存容器中;其中,所述目标矩形为包含排列后的多个内存矩形的最小矩形,所述目标矩形的宽表示所述多个张量的尾地址偏移中的最大值。
43.在一种可能的实施例中,所述确定模块还用于:
44.在直到所述多个张量满足多个调优目标中的任意一个目标之后,根据每个内存矩
形在所述内存容器中的位置,确定每个张量的首地址偏移和尾地址偏移。
45.在一种可能的实施例中,所述分配模块具体用于:
46.对所述多个内存矩形进行分类,获得高风险内存矩形、中风险内存矩形、低风险内存矩形和无风险内存矩形;其中,所述高风险内存矩形包括尾地址偏移大于所述理论阈值的第一张量对应的第一内存矩形、与所述第一内存矩形存在时间重叠的第二内存矩形,所述中风险内存矩形包括尾地址偏移等于所述理论阈值的第二张量对应的第三内存矩形、与所述第三内存矩形存在时间重叠的第四内存矩形,所述低风险内存矩形包括与所述高风险内存矩形和所述中风险内存矩形存在时间重叠的内存矩形,所述无风险内存矩形包括所述多个内存矩形中除所述高风险内存矩形、所述中风险内存矩形和所述低风险内存矩形之外的内存矩形;
47.分别调整所述高风险内存矩形的排序和所述中风险内存矩形的排序;
48.依次合并调整后的高风险内存矩形、调整后的中风险内存矩形、所述低风险内存矩形和所述无风险内存矩形。
49.在一种可能的实施例中,所述分配模块具体用于:
50.根据时间重叠长度,将所述高风险内存矩形划分为多个组,以及将所述低风险内存矩形划分为多个组;
51.将每个组的内存矩形按所述预设指标进行排序,并按所述预设规则排布在所述内存容器中;
52.若目标矩形的宽超过所述理论阈值,则调整每个组的内存矩形的排序,并按所述预设规则重新排布在所述内存容器中;
53.直到每个组的内存矩形满足多个调优目标中的任意一个目标,依次导出调整排序后的每个组的内存矩形,获得调整后的高风险内存矩形和调整后的中风险内存矩形。
54.在一种可能的实施例中,所述预设指标包括内存矩形的长、内存矩形的宽、内存矩形之间的时间重叠长度中的至少一个指标。
55.在一种可能的实施例中,所述多个调优目标包括不存在任一张量的尾地址偏移大于所述理论阈值、出现相同的排序结果、调整次数大于或等于预设次数。
56.第三方面,本技术提供一种电子设备,包括:
57.存储器,用于存储程序指令;
58.处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行第一方面中任一项所述的方法。
59.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行第一方面中任一项所述的方法。
附图说明
60.为了更清楚地说明本技术实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
61.图1为本技术实施例提供的一种静态内存分配方法的应用场景示意图;
62.图2为本技术实施例提供的一种静态内存分配方法的流程示意图一;
63.图3为本技术实施例提供的目标矩形的示意图;
64.图4为本技术实施例提供的一种内存分配设备的结构示意图;
65.图5为本技术实施例提供的一种静态内存分配方法的流程示意图二;
66.图6为本技术实施例提供的一种布局空间调优器的结构示意图;
67.图7为本技术实施例提供的一种中高风险内存调优器的工作流程图;
68.图8为本技术实施例提供的一种静态内存分配装置的结构图;
69.图9为本技术实施例提供的一种电子设备的结构图。
具体实施方式
70.为使本发明的目的、技术方案和优点更加清楚明白,下面将结合本发明实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以按不同于此处的顺序执行所示出或描述的步骤。
71.本技术的说明书和权利要求书及上述附图中的术语“第一”和“第二”是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的保护。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
72.本技术实施例中,“多个”可以表示至少两个,例如可以是两个、三个或者更多个,本技术实施例不做限制。
73.在介绍本技术实施例所提供的静态内存分配方法之前,为了便于理解,首先对本技术实施例的背景技术进行详细介绍。
74.传统的张量内存复用法主要是将多个张量按照内存大小进行排序,并按此排序依次为每个张量分配内存,其中,已分配的内存会添加到预分配列表中。针对待分配的某个张量,检测预分配列表中是否存在大小合适且没有生命周期重叠的内存,若存在,则将该内存分配给该张量标记使用,若不存在,则为该待分配张量分配新的内存,并将新的内存添加到预分配列表。然而如果多个张量需要的内存大小的差异较大,会出现小内存的张量复用大内存的情况,从而产生大量的空闲内存,导致内存资源的使用率较低。
75.鉴于此,本技术实施例提供一种静态内存分配方法,该方法可以由内存分配设备执行。内存分配设备可以通过终端或服务器实现,终端例如移动终端、固定终端或便携式终端,例如移动手机、多媒体计算机、多媒体平板、台式计算机、笔记本计算机、平板计算机等。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务
器,但并不局限于此。
76.下面对本技术实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本技术实施例而非限定。在具体实施过程中,可以根据实际需要灵活地应用本技术实施例提供的技术方案。
77.请参照图1,为本技术实施例提供的静态内存分配方法的应用场景示意图,该应用场景包括待分配的多个张量101和内存分配设备102。
78.具体来说,内存分配设备102获取待分配的多个张量101之后,为每个张量分配内存。其中,张量的含义请参照前文论述的内容,内存分配设备102具体如何为待分配的多个张量101分配内存的过程将在下文进行详细介绍。
79.如上介绍了应用场景,下面结合图1所示的应用场景,以图1中的内存分配设备102执行静态内存分配方法为例进行介绍。请参照图2,为本技术实施例提供的一种静态内存分配方法的流程示意图。
80.s201、获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小。
81.目标模型主要由算子和包含算子中间计算结果的多个张量组成,目标模型例如神经网络模型、深度学习前向推理模型等,内存分配设备获取目标模型之后,按算子的执行顺序依次获取目标模型的多个张量,通过分析多个张量之间的依赖关系,可以确定每个张量需要占用内存的时间信息和空间大小。其中,时间信息包括每个张量占用内存的起始时刻和结束时刻,每个张量占用内存的空间大小又称为内存大小。
82.s202、将多个张量按预设指标进行排序,并按预设规则为多个张量分配首地址偏移。
83.在一种可能的实施例中,预设指标包括张量占用内存的时间长度、张量占用内存的空间大小、张量之间的时间重叠长度中的至少一个。其中,每个张量占用内存的时间长度为每个张量占用内存的起始时刻和结束时刻之间的差值,张量之间的时间重叠长度是指任意两个张量同时占用内存的时间长度。
84.例如,张量a占用内存的时间信息为8:00-8:10,张量b占用内存的时间信息为8:05-8:15,则张量a和张量b占用内存的时间长度均为10分钟,张量a和张量b在8:05-8:10期间均占用了内存,则张量a和张量b之间的时间重叠长度为5分钟。
85.内存分配设备或者多个张量之后,可以将多个张量按预设指标进行排序,可以是从大到小的顺序,也可以是从小到大的顺序,并按预设规则依次为排序后的多个张量分配首地址偏移。其中,首地址偏移表示每个张量的首地址与内存池的首地址之间的偏移,预设规则包括时间信息重叠的张量的内存地址不重叠、内存地址重叠的张量的时间信息不重叠。每个张量的内存地址是根据每个张量的首地址偏移和空间大小确定的。
86.例如,两个张量的排序为:张量a、张量b。张量a和张量b在8:05-8:10期间均需要占用内存,先为张量a分配首地址偏移之后,再为张量b分配首地址偏移,且张量b的首地址偏移大于或等于张量a的尾地址偏移,以保证张量a和张量b的内存地址不重叠。
87.在一种可能的实施例中,为了尽量节省内存,预设规则还可以包括第一张量的尾地址偏移等于第二张量的首地址偏移,其中,第一张量的排序在第二张量的排序之前,第二张量为与第一张量的时间信息存在重叠、且距离第一张量的排序最近的张量。每个张量的尾地址偏移表示每个张量的尾地址与内存池的首地址之间的偏移,每个张量的尾地址偏移
为每个张量的首地址偏移和空间大小之和。
88.例如,四个张量的排序为:张量a、张量b、张量c、张量d,张量a和张量c、张量d的时间信息均存在重叠,若张量a为第一张量,则张量c为第二张量,若张量c为第一张量,则张量d为第二张量。张量a的尾地址偏移等于张量c的首地址偏移,张量c的尾地址偏移等于张量d的首地址偏移。
89.s203、若存在任一张量的尾地址偏移大于理论阈值,则调整多个张量的排序,并按预设规则重新为多个张量分配首地址偏移。
90.考虑到多个张量的初次内存分配结果通常不是最优分配结果,内存分配设备可以根据多个张量中是否存在任一张量的尾地址偏移大于理论阈值,确定是否重新分配首地址偏移。其中,尾地址偏移的含义与计算方式请参照前文论述的内容,此处不再赘述。理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值。
91.具体的,内存分配设备在对多个张量分配完首地址偏移之后,根据每个张量的首地址偏移和空间大小之和,确定每个张量的尾地址偏移。内存分配设备可以计算每个时刻对应的张量占用内存的空间大小之和,获得多个和,取其中的最大值作为理论阈值。进一步,内存分配设备可以检测每个张量的尾地址偏移是否大于理论阈值,若存在任一张量的尾地址偏移大于理论阈值,则调整多个张量的排序,并按预设规则重新依次为调整排序后的多个张量分配首地址偏移。
92.s204、直到多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。
93.内存分配设备调整多个张量的排序,并按预设规则重新为多个张量分配首地址偏移之后,可以根据多个张量是否满足调优目标,确定是否继续调整多个张量的排序。
94.具体的,多个调优目标包括任一张量的尾地址偏移小于或等于理论阈值、出现相同的排序结果、调整次数大于或等于预设次数。相同的排序结果又称为不动点调优结果。若多个张量不满足多个调优目标中的任意一个目标,则继续调整多个张量的排序,并按预设规则重新为多个张量分配首地址偏移。直到多个张量满足多个调优目标中的任意一个目标,内存分配设备可以根据内存池的首地址和每个张量的首地址偏移,确定每个张量的内存池的首地址,根据内存池的首地址和每个张量的尾地址偏移,确定每个张量的尾地址,根据每个张量的首地址和每个张量的尾地址,确定每个张量的内存地址。
95.例如,针对3个张量:张量x、张量y、张量w,预设次数为4次,第一次的排序结果为:x、y、w,依次为x、y、w分配首地址偏移之后,若存在某个张量的尾地址偏移大于理论阈值,则对多个张量的排序进行调整,第二次排序结果为:x、w、y,依次为x、w、y分配首地址偏移之后,仍然存在某个张量的尾地址偏移大于理论阈值,且第二次与第一次的排序结果不同,且未达到预设次数,则继续对多个张量的排序进行调整,第三次排序结果为:x、y、w,仍然存在某个张量的尾地址偏移大于理论阈值,且未达到预设次数,但第三次与第一次的排序结果相同,可以停止调整。
96.应当说明的是,内存分配设备执行s202之后,若不存在任一张量的尾地址偏移大于理论阈值,说明多个张量的初次分配结果已经为最优的分配结果,则不执行s203和s204,可以直接根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。具体如何确定内存地址的内容请参照前文论述的内容,此处不再赘述。
97.为了更加形象地说明本技术实施例提供的内存分配方法,在一种可能的实施例中,内存分配设备可以对每个张量占用的内存进行几何抽象表示,内存相当于矩形,内存池相当于容器,为张量分配内存的过程相当于将矩形摆放到容器中的过程,根据矩形在容器中的最终位置,确定每个张量的内存地址。具体步骤如下所述。
98.s1.1、生成多个内存操作对应的多个内存矩形,将多个内存矩形按预设指标进行排序,并按预设规则排布在内存池对应的内存容器中。
99.其中,多个内存操作表示多个张量占用内存的操作,每个内存矩形的长表示每个内存操作的时间长度,每个内存矩形的宽表示每个内存操作的空间大小,内存容器的长表示多个内存操作的时间总长度。
100.具体的,内存分配设备根据每个张量占用内存的时间信息分析出每个内存操作的起始时刻和结束时刻,并以起始时刻和结束时刻之间的时间长度作为每个内存矩形的长,以每个张量占用内存的空间大小作为每个内存矩形的宽,从而生成多个内存操作对应的多个内存矩形。
101.在一种可能的实施例中,序列化模型可以提供内存操作序列。序列化模型就是以数组形式保存的模型,其中节点的排列顺序即是节点的执行顺序。内存操作序列包括按顺序执行的多个内存操作,每个内存操作可以有多个参数,例如内存名、内存操作类型、内存大小、地址对齐大小等。内存操作类型有两种,分别是申请内存和释放内存,地址对齐大小就是首地址偏移。
102.内存分配设备获得多个内存矩形之后,可以按预设指标对多个内存矩形进行排序,并按预设规则将排序后的多个内存矩形依次排布在内存池对应的内存容器中。
103.其中,内存池的首地址对应内存容器的底部,每个内存矩形与底部的距离最小值为每个张量的首地址偏移。预设规则包括多个内存矩形中任意两个内存矩形之间不能重叠,预设规则还可以包括底部对齐规则,例如以内存容器的建立平面直角坐标系,内存容器的横轴表示时间,纵轴表示内存偏移,底部对齐是指将内存矩形往内存偏移更小的方向紧贴着摆放。
104.其中涉及到预设指标的含义,在一种可能的实施例中,预设指标包括内存矩形的宽度、内存矩形的高度、内存矩形之间的时间重叠长度中的至少一个。下面分情况进行介绍。
105.第一种情况、预设指标包括内存矩形的宽度、内存矩形的高度、内存矩形之间的时间重叠长度中的任意一个指标。
106.情况1、预设指标为内存矩形的宽度或内存矩形的高度。
107.内存分配设备将多个内存矩形按宽度或者高度进行排序。当存在宽度或者高度相同的至少两个内存矩形时,可以将任意排列这至少两个内存矩形的先后顺序。例如,内存矩形a与内存矩形b的宽度相同,则从大到小的排列顺序可以是a、b,也可以是b、a。
108.情况2、预设指标为内存矩形之间的时间重叠长度。
109.内存分配设备根据每个内存矩形与其他内存矩形之间的时间重叠长度之和进行排序,若两个内存矩形不存在时间重叠,则这两个内存矩形之间的时间重叠长度为0。当存在时间重叠长度之和相同的至少两个内存矩形时,可以任意排列这至少两个内存矩形的先后顺序。
110.例如,针对3个内存矩形:矩形a、矩形b和矩形c,矩形a与矩形b的时间重叠长度为x1,矩形a与矩形c的时间重叠长度为x2,矩形b与矩形c的时间重叠长度为x3,则矩形a与其他矩形之间的时间重叠长度之和为x1+x2,则矩形b与其他矩形之间的时间重叠长度之和为x1+x3,则矩形c与其他矩形之间的时间重叠长度之和为x2+x3。如果x1+x2》x1+x3》x2+x3,则从大到小的排列顺序为a、b、c。如果x1+x2》x1+x3=x2+x3,则从大到小的排列顺序可以为a、b、c,也可以是a、c、b。
111.第二种情况、预设指标包括内存矩形的宽度、内存矩形的高度、内存矩形之间的时间重叠长度中的任意两个指标。
112.具体的,任意两个指标分别为第一指标和第二指标。内存分配设备可以按第一指标和第二指标的和值或者乘积值或者比值进行排序。
113.例如,若内存矩形a的宽度与高度的比值大于内存矩形b的宽度与高度的比值,则从大到小的排序为:a、b。
114.或者,内存分配设备可以按第一指标对多个内存矩形进行排序,当存在第一指标相同的至少两个内存矩形时,再按第二指标对这至少两个内存矩形进行排序。其中,第一指标的优先级高于第二指标的优先级。
115.例如,高度的优先级高于宽度的优先级,针对3个内存矩形:矩形a、矩形b和矩形c,矩形a的高度大于矩形b的高度,矩形b的高度等于矩形c的高度,矩形c的宽度大于矩形b的宽度,则从大到小的排序为:a、c、b。
116.第三种情况、预设指标包括内存矩形的宽度、内存矩形的高度、内存矩形之间的时间重叠长度中的三个指标。
117.具体的,这三个指标分别为第一指标、第二指标和第三指标,内存分配设备可以按第一指标、第二指标和第三指标的和值或者乘积值进行排序。
118.或者,内存分配设备可以按第一指标对多个内存矩形进行排序,当多个内存矩形中存在第一指标相同的多个第一矩形时,按第二指标对这多个第一矩形进行排序。当这多个第一矩形中存在第二指标相同的多个第二矩形时,按第三指标对这多个第二矩形进行排序。其中,第一指标的优先级高于第二指标的优先级,第二指标的优先级高于第三指标的优先级。
119.s1.2、若目标矩形的宽超过理论阈值,调整多个内存矩形的排序,并按预设规则重新排布在内存容器中。
120.考虑到矩形的初次摆放通常不是最优摆放位置,例如部分内部矩形的顶部超出了理论阈值对应的最优高度。内存分配设备可以根据目标矩形的宽是否超过理论阈值,确定是否调整内存矩形在内存容器中的位置。其中,目标矩形为包含排列后的多个内存矩形的最小矩形。目标矩形的宽表示多个张量的尾地址偏移中的最大值。
121.请参照图3,为本技术实施例提供的目标矩形的示意图,一共有9个实线框对应的矩形,虚线框对应的矩形为目标矩形。
122.具体的,内存分配设备在摆放完多个内存矩形后,可以确定出目标矩形,对目标矩形的宽和理论阈值进行比较,若目标矩形的宽超过理论阈值,则内存分配设备调整多个内存矩形的排序,并按预设规则依次将调整排序后的多个内存矩形重新排布在内存容器中。
123.为了加快调优速度,本技术提供一种峰值抑制调优方法,聚焦于中高风险内存的
调优处理,目的在于削减内存容器中的峰值内存矩形的高度。
124.具体的,内存分配设备可以对多个内存矩形进行分类,获得高风险内存矩形、中风险内存矩形、低风险内存矩形和无风险内存矩形,分别调整高风险内存矩形的排序和中风险内存矩形的排序,依次合并调整后的高风险内存矩形、调整后的中风险内存矩形、低风险内存矩形和无风险内存矩形。
125.其中,高风险内存矩形包括尾地址偏移大于理论阈值的第一张量对应的第一内存矩形、与第一内存矩形存在时间重叠的第二内存矩形,中风险内存矩形包括尾地址偏移等于理论阈值的第二张量对应的第三内存矩形、与第三内存矩形存在时间重叠的第四内存矩形,低风险内存矩形包括与高风险内存矩形和中风险内存矩形存在时间重叠的内存矩形,无风险内存矩形包括多个内存矩形中除高风险内存矩形、中风险内存矩形和低风险内存矩形之外的内存矩形。
126.其中涉及到如何调整高风险内存矩形的排序和中风险内存矩形的排序,下面进行介绍。
127.内存分配设备可以根据时间重叠长度,将高风险内存矩形划分为多个组,以及将低风险内存矩形划分为多个组,将每个组的内存矩形按预设指标进行排序,并按预设规则排布在内存容器中,若目标矩形的宽超过理论阈值,则调整每个组的内存矩形的排序,并按预设规则重新排布在内存容器中;直到每个组的内存矩形满足多个调优目标中的任意一个目标,依次导出调整排序后的每个组的内存矩形,获得调整后的高风险内存矩形和调整后的中风险内存矩形。
128.应当说明的是,每个组内存矩形的排列结果可以累加到内存容器中。例如,内存容器一开始是空的,将第一组内存矩形排布在空的内存容器中并开始调优,直到满足调优目标,保存第一组内存矩形在内存容器中的排布结果。接着将第二组内存矩形排布在包含第一组内存矩形的内存容器中并开始调优,直到满足调优目标,并保存第一组内存矩形和第二组内存矩形在内存容器中的排布结果,第三组、第四组以此类推。
129.本技术实施例从内存使用率的瓶颈入手,提出了峰值抑制的调优方法,优先处理对使用率有直接影响的内存,并对这部分内存进行聚类分组,兼顾了算法复杂度和算法效果。
130.s1.3、直到多个内存矩形满足多个调优目标中的任意一个目标,根据每个内存矩形在内存容器中的位置,确定每个张量的首地址偏移和尾地址偏移。
131.具体的,多个调优目标包括目标矩形的宽不超过理论阈值、出现相同的排序结果、调整次数大于或等于预设次数。若多个内存矩形不满足多个调优目标中的任意一个目标,则继续调整多个内存矩形的排序,并按预设规则重新排布在内存容器中。直到多个内存矩形满足多个调优目标中的任意一个目标,内存分配设备可以根据每个内存矩形与内存容器的底部的距离最小值,确定每个张量的首地址偏移,根据每个内存矩形与内存容器的底部的距离最大值,确定每个张量的尾地址偏移,进而根据每个张量的首地址和每个张量的尾地址,确定每个张量的内存地址。
132.在一种可能的实施例中,在直到多个张量满足多个调优目标中的任意一个目标之后,内存分配设备还可以对多个内存矩形和内存容器进行可视化,便于用户查看和检查内存分配结果。
133.在一种可能的实施例中,内存分配设备在确定每个张量的内存地址之后,可以检测是否存在重叠的内存地址,确保内存可以被正常使用。
134.请参照图4,为本技术实施例提供一种内存分配设备的结构示意图,该内存分配设备包括:内存矩形转换器401、内存布局调优器402和内存分配调试器403。其中,内存矩形转换器401用于将每个内存操作转换为内存矩形。内存布局调优器402用于调整内存矩形在内存容器中的位置,使得内存容器的高度尽可能地低,调优完成后输出内存分配信息。内存分配调试器403用于对内存分配信息进行检查和可视化分析。内存分配信息包括内存名、时间信息、内存大小、首地址偏移等。
135.内存布局调优器402包括内存矩形排序器404、内存矩形放置器405、布局空间优化器406、内存分配信息导出器407。其中,内存矩形排序器404用于对多个内存矩形进行排序。内存矩形放置器405用于依次将多个内存矩形排布在内存容器中。布局空间优化器406用于对多个内存矩形的空间布局进行调优。内存分配信息导出器407用于在调优完成后输出内存分配信息。
136.请参照图5,本技术实施例提供一种静态内存分配方法的流程图二,下面结合图4和图5,介绍本技术实施例提供的静态内存分配方法。
137.s501、获取内存操作序列。
138.内存矩形转换器401可以接收序列化模型提供的内存操作序列,内存操作序列包括按顺序执行的多个内存操作。内存操作的含义请参照前文论述的内容,此处不再赘述。
139.s502、将每个内存操作转换为内存矩形。
140.内存矩形转换器401获取内存操作序列之后,根据内存操作序列,分析出每个内存操作的时间长度和空间大小,并以时间长度和空间大小构造内存矩形,获得包括多个内存矩形的内存矩形列表。
141.s503、对多个内存矩形进行排序。
142.内存矩形排序器404接收内存矩形转换器401输出的内存矩形列表,对内存矩形列表中的多个内存矩形按预设指标进行排序,输出排序后的多个内存矩形。预设指标的含义请参照前文论述的内容,此处不再赘述。
143.s504、将排序后的多个内存矩形依次摆放在内存容器中。
144.内存矩形放置器405接收内存矩形排序器404输出的排序后的内存矩形列表,将按照预设规则以及排列顺序依次将多个内存矩形摆放在内存容器中。排序方式、预设规则和内存容器的含义请参照前文论述的内容,此处不再赘述。
145.s505、是否满足调优目标。
146.判断内存矩形放置器405的摆放结果满足调优目标。若满足,则执行s507。若不满足,则执行s506。调优目标的含义请参照前文论述的内容,此处不再赘述。
147.s506、对多个内存矩形的空间布局进行调优。
148.当未达到调优目标时,布局空间优化器406接收内存矩形排序器404输出的排序后的内存矩形列表,对多个内存矩形的空间布局进行调优,调整内存布局中不合理部分,使得调优结果更接近调优目标,然后继续执行s505,直到满足调优目标。
149.s507、对内存分配信息进行检查和可视化展示。
150.当达到调优目标时,内存分配信息导出器407输出的内存分配信息,内存分配调试
器403可以接收内存分配信息导出器407输出的内存分配信息,检查内存地址是否存在重叠,将内存矩形和内存容器进行可视化。如何确定内存地址的内容请参照前文论述的内容,此处不再赘述。
151.请参照图6,为本技术实施例提供一种布局空间优化器的结构示意图,布局空间优化器406包括内存矩形分类器601、中高风险内存调优器602、内存矩形合并器603。下面结合各个模块介绍布局空间优化器406的具体工作流程。
152.内存矩形分类器601接收内存矩形排序器404输出的排序后的内存矩形列表,将排序后的内存矩形列表中的多个内存矩形划分为四类,分别是高风险内存矩形、中风险内存矩形、低风险内存矩形、无风险内存矩形。其中,高风险内存矩形、中风险内存矩形、低风险内存矩形、无风险内存矩形的含义请参照前文论述的内容,此处不再赘述。
153.中高风险内存调优器602接收内存矩形分类器601输出的高风险内存矩形和中风险内存矩形,分别调整高风险内存矩形的排序和中风险内存矩形的排序。
154.内存矩形合并器603接收中高风险内存调优器602输出的调整后的高风险内存矩形和调整后的中风险内存矩形,以及内存矩形分类器601输出的低风险内存矩形、无风险内存矩形,然后按风险降级顺序,依次合并调整后的高风险内存矩形、调整后的中风险内存矩形、低风险内存矩形、无风险内存矩形,获得更新后的内存矩形列表。
155.在一种可能的实施例中,中高风险内存调优器602还包括内存矩形重排器,用于对内存矩形进行重新排序。请参照图7,本技术实施例提供一种中高风险内存调优器的工作流程图,下面结合图4和图7,介绍中高风险内存调优器602的具体工作流程。
156.s701、将中高风险内存矩形划分为多个组。
157.中高风险内存调优器602将高风险内存矩形划分为多个组,以及将中风险内存矩形分为多个组。
158.s702、组内排序。
159.中高风险内存调优器602通过内存矩形排序器404对每组的内存矩形进行排序。
160.s703、将每组内的内存矩形依次摆放在内存容器中。
161.中高风险内存调优器602通过内存矩形放置器405将每组内的内存矩形按照预设规则依次摆放在内存容器中。
162.s704、是否满足调优目标。
163.中高风险内存调优器602判断每组内的内存矩形的摆放结果是否满足调优目标,若不满足,则执行s705,若满足,则执行s706。
164.s705、对每组的内存矩形进行重新排列。
165.中高风险内存调优器602通过内存矩形重排器对每组的内存矩形进行重新排列,以获得可能更优的排序结果。
166.s706、将每组调优结果累加到内存容器中。
167.中高风险内存调优器602依次将每组调优结果累加到内存容器中。累加的含义请参照前文论述的内容,此处不再赘述。
168.s707、导出中高风险内存矩形列表。
169.当所有组都处理完毕后,中高风险内存调优器602从内存容器导出中高风险内存矩形列表。
170.综上所述,本技术将静态内存分配问题转换为二维矩形带装箱问题,通过近似的数学问题来解决静态内存分配问题,每个待分配内存相当于矩形,内存池相当于箱子容器,将矩形摆放到箱子容器中,通过调整排序、分组策略、设置调优目标等,使箱子容器的最大高度尽可能低,进而找到更优的内存分配结果,提高内存资源的使用率。
171.基于同一发明构思,本技术还提供一种静态内存分配装置,可以具体设置于前文论述的内存分配设备中,请参照图8,该装置包括:
172.获取模块801,用于获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小;
173.分配模块802,用于将多个张量按预设指标进行排序,并按预设规则为多个张量分配首地址偏移;其中,首地址偏移表示每个张量的首地址与内存池的首地址之间的偏移,预设规则包括时间信息重叠的张量的内存地址不重叠、内存地址重叠的张量的时间信息不重叠,每个张量的内存地址是根据每个张量的首地址偏移和空间大小确定的;
174.分配模块802,还用于若存在任一张量的尾地址偏移大于理论阈值,则调整多个张量的排序,并按预设规则重新为多个张量分配首地址偏移;其中,每个张量的尾地址偏移为每个张量的首地址偏移和空间大小之和,理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值;
175.确定模块803,用于直到多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。
176.在一种可能的实施例中,分配模块802具体用于:
177.生成多个内存操作对应的多个内存矩形;其中,多个内存操作表示多个张量占用内存的操作,每个内存矩形的长表示每个内存操作的时间长度,每个内存矩形的宽表示每个内存操作的空间大小;
178.将多个内存矩形按预设指标进行排序,并按预设规则排布在内存池对应的内存容器中;其中,内存池的首地址对应内存容器的底部,每个内存矩形与底部的距离最小值为每个张量的首地址偏移。
179.在一种可能的实施例中,分配模块802具体用于:
180.若目标矩形的宽超过理论阈值,调整多个内存矩形的排序,并按预设规则重新排布在内存容器中;其中,目标矩形为包含排列后的多个内存矩形的最小矩形,目标矩形的宽表示多个张量的尾地址偏移中的最大值。
181.在一种可能的实施例中,确定模块803还用于:
182.在直到多个张量满足多个调优目标中的任意一个目标之后,根据每个内存矩形在内存容器中的位置,确定每个张量的首地址偏移和尾地址偏移。
183.在一种可能的实施例中,分配模块802具体用于:
184.对多个内存矩形进行分类,获得高风险内存矩形、中风险内存矩形、低风险内存矩形和无风险内存矩形;其中,高风险内存矩形包括尾地址偏移大于理论阈值的第一张量对应的第一内存矩形、与第一内存矩形存在时间重叠的第二内存矩形,中风险内存矩形包括尾地址偏移等于理论阈值的第二张量对应的第三内存矩形、与第三内存矩形存在时间重叠的第四内存矩形,低风险内存矩形包括与高风险内存矩形和中风险内存矩形存在时间重叠的内存矩形,无风险内存矩形包括多个内存矩形中除高风险内存矩形、中风险内存矩形和
低风险内存矩形之外的内存矩形;
185.分别调整高风险内存矩形的排序和中风险内存矩形的排序;
186.依次合并调整后的高风险内存矩形、调整后的中风险内存矩形、低风险内存矩形和无风险内存矩形。
187.在一种可能的实施例中,分配模块802具体用于:
188.根据时间重叠长度,将高风险内存矩形划分为多个组,以及将低风险内存矩形划分为多个组;
189.将每个组的内存矩形按预设指标进行排序,并按预设规则排布在内存容器中;
190.若目标矩形的宽超过理论阈值,则调整每个组的内存矩形的排序,并按预设规则重新排布在内存容器中;
191.直到多个内存矩形满足多个调优目标中的任意一个目标,依次导出调整排序后的每个组的内存矩形,获得调整后的高风险内存矩形和调整后的中风险内存矩形。
192.在一种可能的实施例中,预设指标包括内存矩形的长、内存矩形的宽、内存矩形之间的时间重叠长度中的至少一个指标。
193.在一种可能的实施例中,多个调优目标包括目标矩形的宽不超过理论阈值、出现相同的排序结果、调整次数大于或等于预设次数。
194.应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个单元中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
195.应当说明的是,图8中装置还可以用于实现前文论述的任一的静态内存分配方法,此处不再赘述。
196.基于同一发明构思,本技术实施例中还提供了一种电子设备,该设备相当于前文论述的内存分配设备,请参照图9,该设备包括:
197.存储器902,用于存储程序指令;
198.处理器901,用于调用所述存储器902中存储的程序指令,按照获得的程序指令执行图2和图5所述任一的静态内存分配方法。处理器901还可以实现图8所示的装置中各个模块的功能。
199.本技术实施例中不限定处理器901与存储器902之间的具体连接介质,图9中是以处理器901和存储器902之间通过总线900连接为例。总线900在图9中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线900可以分为地址总线、数据总线、控制总线等,为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。或者,处理器901也可以称为控制器,对于名称不做限制。
200.其中,处理器901是该装置的控制中心,可以利用各种接口和线路连接整个该控制设备的各个部分,通过运行或执行存储在存储器902内的指令以及调用存储在存储器902内的数据,该装置的各种功能和处理数据,从而对该装置进行整体监控。
201.在一种可能的设计中,处理器901可包括一个或多个处理单元,处理器901可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成
到处理器901中。在一些实施例中,处理器901和存储器902可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
202.处理器901可以是通用处理器,例如中央处理器(cpu)、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本技术实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的目标监测方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
203.存储器902作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器902可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(random access memory,ram)、静态随机访问存储器(static random access memory,sram)、可编程只读存储器(programmable read only memory,prom)、只读存储器(read only memory,rom)、带电可擦除可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、磁性存储器、磁盘、光盘等。存储器902是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本技术实施例中的存储器902还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
204.通过对处理器901进行设计编程,可以将前述实施例中介绍的目标监测方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行图2和图5所述的静态内存分配方法的步骤。如何对处理器901进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
205.基于同一发明构思,本技术实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被计算机执行时,使计算机执行如前文论述任一的静态内存分配方法。由于上述计算机可读存储介质解决问题的原理与静态内存分配方法相似,因此上述计算机可读存储介质的实施可以参见方法的实施,重复之处不再赘述。
206.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
207.本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
208.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
209.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
210.显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
技术特征:1.一种静态内存分配方法,其特征在于,包括:获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小;将所述多个张量按预设指标进行排序,并按预设规则为所述多个张量分配首地址偏移;其中,所述首地址偏移表示每个张量的首地址与内存池的首地址之间的偏移,所述预设规则包括时间信息重叠的张量的内存地址不重叠、内存地址重叠的张量的时间信息不重叠,每个张量的内存地址是根据每个张量的首地址偏移和空间大小确定的;若存在任一张量的尾地址偏移大于理论阈值,则调整所述多个张量的排序,并按所述预设规则重新为所述多个张量分配首地址偏移;其中,每个张量的尾地址偏移为每个张量的首地址偏移和空间大小之和,所述理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值;直到所述多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。2.如权利要求1所述的方法,其特征在于,将所述多个张量按预设指标进行排序,并按预设规则为所述多个张量分配首地址偏移,包括:生成多个内存操作对应的多个内存矩形;其中,所述多个内存操作表示所述多个张量占用内存的操作,每个内存矩形的长表示每个内存操作的时间长度,每个内存矩形的宽表示每个内存操作的空间大小;将所述多个内存矩形按预设指标进行排序,并按预设规则排布在所述内存池对应的内存容器中;其中,所述内存池的首地址对应所述内存容器的底部,每个内存矩形与所述底部的距离最小值为每个张量的首地址偏移。3.如权利要求2所述的方法,其特征在于,若存在任一张量的尾地址偏移大于理论阈值,则调整所述多个张量的排序,并按所述预设规则重新为所述多个张量分配首地址偏移,包括:若目标矩形的宽超过理论阈值,调整所述多个内存矩形的排序,并按所述预设规则重新排布在所述内存容器中;其中,所述目标矩形为包含排列后的多个内存矩形的最小矩形,所述目标矩形的宽表示所述多个张量的尾地址偏移中的最大值。4.如权利要求3所述的方法,其特征在于,在直到所述多个张量满足多个调优目标中的任意一个目标之后,所述方法还包括:根据每个内存矩形在所述内存容器中的位置,确定每个张量的首地址偏移和尾地址偏移。5.如权利要求3所述的方法,其特征在于,调整所述多个内存矩形的排序,包括:对所述多个内存矩形进行分类,获得高风险内存矩形、中风险内存矩形、低风险内存矩形和无风险内存矩形;其中,所述高风险内存矩形包括尾地址偏移大于所述理论阈值的第一张量对应的第一内存矩形、与所述第一内存矩形存在时间重叠的第二内存矩形,所述中风险内存矩形包括尾地址偏移等于所述理论阈值的第二张量对应的第三内存矩形、与所述第三内存矩形存在时间重叠的第四内存矩形,所述低风险内存矩形包括与所述高风险内存矩形和所述中风险内存矩形存在时间重叠的内存矩形,所述无风险内存矩形包括所述多个内存矩形中除所述高风险内存矩形、所述中风险内存矩形和所述低风险内存矩形之外的内存矩形;
分别调整所述高风险内存矩形的排序和所述中风险内存矩形的排序;依次合并调整后的高风险内存矩形、调整后的中风险内存矩形、所述低风险内存矩形和所述无风险内存矩形。6.如权利要求5所述的方法,其特征在于,分别调整所述高风险内存矩形的排序和所述中风险内存矩形的排序,包括:根据时间重叠长度,将所述高风险内存矩形划分为多个组,以及将所述低风险内存矩形划分为多个组;将每个组的内存矩形按所述预设指标进行排序,并按所述预设规则排布在所述内存容器中;若所述目标矩形的宽超过所述理论阈值,则调整每个组的内存矩形的排序,并按所述预设规则重新排布在所述内存容器中;直到每个组的内存矩形满足多个调优目标中的任意一个目标,依次导出调整排序后的每个组的内存矩形,获得调整后的高风险内存矩形和调整后的中风险内存矩形。7.如权利要求2-6任一项所述的方法,其特征在于,所述预设指标包括内存矩形的长、内存矩形的宽、内存矩形之间的时间重叠长度中的至少一个指标。8.如权利要求1-6任一项所述的方法,其特征在于,所述多个调优目标包括不存在任一张量的尾地址偏移大于所述理论阈值、出现相同的排序结果、调整次数大于或等于预设次数。9.一种静态内存分配装置,其特征在于,包括:获取模块,用于获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小;分配模块,用于将所述多个张量按预设指标进行排序,并按预设规则为所述多个张量分配首地址偏移;其中,所述首地址偏移表示每个张量的首地址与内存池的首地址之间的偏移,所述预设规则包括时间信息重叠的张量的内存地址不重叠、内存地址重叠的张量的时间信息不重叠,每个张量的内存地址是根据每个张量的首地址偏移和空间大小确定的;所述分配模块,还用于若存在任一张量的尾地址偏移大于理论阈值,则调整所述多个张量的排序,并按所述预设规则重新为所述多个张量分配首地址偏移;其中,每个张量的尾地址偏移为每个张量的首地址偏移和空间大小之和,所述理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值;确定模块,用于直到所述多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。10.一种电子设备,其特征在于,包括:存储器,用于存储程序指令;处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行权利要求1-8中任一项所述的方法。11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时,使所述计算机执行如权利要求1-8中任一项所述的方法。
技术总结本申请涉及数据存储技术领域,具体涉及一种静态内存分配方法、装置、设备及介质,用于提高内存资源的使用率。该方法包括:获取目标模型的多个张量,确定每个张量占用内存的时间信息和空间大小;将多个张量按预设指标进行排序,并按预设规则为多个张量分配首地址偏移;若存在任一张量的尾地址偏移大于理论阈值,则调整多个张量的排序,并按预设规则重新为多个张量分配首地址偏移;每个张量的尾地址偏移为每个张量的首地址偏移和空间大小之和,理论阈值为每个时刻对应的张量占用内存的空间大小之和的最大值;直到多个张量满足多个调优目标中的任意一个目标,根据每个张量的首地址偏移和尾地址偏移,确定每个张量的内存地址。确定每个张量的内存地址。确定每个张量的内存地址。
技术研发人员:庄宇
受保护的技术使用者:浙江大华技术股份有限公司
技术研发日:2022.07.15
技术公布日:2022/11/1