CN114237903A - 内存分配优化方法、装置、电子设备、介质及程序产品 - Google Patents

内存分配优化方法、装置、电子设备、介质及程序产品 Download PDF

Info

Publication number
CN114237903A
CN114237903A CN202111579000.8A CN202111579000A CN114237903A CN 114237903 A CN114237903 A CN 114237903A CN 202111579000 A CN202111579000 A CN 202111579000A CN 114237903 A CN114237903 A CN 114237903A
Authority
CN
China
Prior art keywords
memory
time step
time
data
target program
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
Application number
CN202111579000.8A
Other languages
English (en)
Other versions
CN114237903B (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Bi Ren Technology Co ltd
Original Assignee
Shanghai Biren Intelligent Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Biren Intelligent Technology Co Ltd filed Critical Shanghai Biren Intelligent Technology Co Ltd
Priority to CN202111579000.8A priority Critical patent/CN114237903B/zh
Publication of CN114237903A publication Critical patent/CN114237903A/zh
Application granted granted Critical
Publication of CN114237903B publication Critical patent/CN114237903B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明实施例提供一种内存分配优化方法、装置、电子设备、介质及程序产品,该方法包括:为目标程序的各个时间步初始化内存;时间步对应算子,包含数据块的数量、大小和生存时段已知;遍历时间步;遍历时间步的数据块;在遍历时间步的数据块时,通过遍历预设动作集分别执行预设内存调整动作,预设内存调整动作执行成功,为后续时间步重新初始化内存,若当前时间步为预设状态更新时间步,记录当前更新的内存状态,计算读写任务的总耗时;当前时间步的数据块遍历完成后,选取总耗时减小且耗时最少的内存状态对当前的内存状态进行更新,所有时间步遍历完成后得到目标程序的各个时间步的内存状态。本发明实施例能够实现不同程序的自适应内存分配优化。

Description

内存分配优化方法、装置、电子设备、介质及程序产品
技术领域
本发明实施例涉及计算机技术领域,具体涉及一种内存分配优化方法、装置、电子设备、介质及程序产品。
背景技术
在AI网络推演等计算过程中,为数据分配和释放内存是必不可少的。由于GPU或CPU中存在多层级内存,每层内存有不同的带宽、延迟及访问局限性(局限性越高访存冲突概率越低),因此在如执行AI网络推演等计算时内存的使用策略会对计算性能产生巨大影响。
为提高计算性能,现有的一种内存使用策略是通过数据自然命中的方式,即用户申请的内存统一在主内存(层级较低、容量较大)中。CPU或GPU访问后,通过在高速缓冲存储器(cache)留下访问过的低层内存的数据副本(将数据副本放入缓存),在下次需要读取相同数据时,从cache中读取数据以减少低层内存的访问,以提高系统性能。在这种通过cache加速的技术下,数据至少被用户访问过一次后才能被cache命中,由于高层内存不会直接被用户使用,因此高层内存的数据无法放入缓存。而且,放入缓存的是连续分布的数据,如果数据不连续分布,则也无法放入缓存。如果放入缓存的数据不再被读取,cache也无法发挥作用。在cache中数据需要保留多久靠自然淘汰法,有用的数据可能被冲掉,不用的数据可能仍占用空间,无法保证空间被合理使用。
现有的另外一种内存使用策略是为计算手工指定内存空间,或者写一个程序按照一个固定的规则分配内存。比如,在AI网络推演等计算中,AI网络可以很大,而且类型多样,为每个AI网络手动规划内存布局效率很低,而且最终效果极大地依赖于工程师的个人能力;用某个固定的程序分配内存难以覆盖各类AI网络的变数,难以达到全局最优甚至局部最优。因此,需要一个能够适应不同程序自动完成内存的分配优化工作的方法。
发明内容
为解决现有技术中的问题,本发明实施例提供一种内存分配优化方法、装置、电子设备、介质及程序产品。
本发明实施例提供一种内存分配优化方法,包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
根据本发明实施例提供的一种内存分配优化方法,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。
根据本发明实施例提供的一种内存分配优化方法,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
根据本发明实施例提供的一种内存分配优化方法,在所述当前所述时间步遍历完成后,所述方法还包括:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
根据本发明实施例提供的一种内存分配优化方法,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作包括内存预分配及内存释放;其中,在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作还包括内存盖写;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
根据本发明实施例提供的一种内存分配优化方法,所述总耗时表示为:
Figure BDA0003426404810000051
其中,E(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:
在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
本发明实施例还提供一种内存分配优化装置,包括:初始化模块,用于:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;内存分配优化模块,用于:按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;优化结果获取模块,用于:响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述内存分配优化方法的步骤。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述内存分配优化方法的步骤。
本发明实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述内存分配优化方法的步骤。
本发明实施例提供的内存分配优化方法、装置、电子设备、介质及程序产品,通过按照算子的执行顺序遍历时间步,在遍历时间步时,通过遍历预设动作集对该时间步的数据块执行预设内存调整动作,对未遍历的时间步的数据块执行预配置内存空间动作,得到内存更新状态,通过比较更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,获取耗时减小且耗时最少的更新的内存状态作为当前预设状态更新时间步遍历完成后的内存状态,能够实现不同程序的自适应内存分配优化。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的内存分配优化方法的流程示意图之一;
图2是本发明实施例提供的内存分配优化方法的流程示意图之二;
图3是本发明实施例提供的内存分配优化方法中初始化的时空图;
图4是本发明实施例提供的内存分配优化方法中优化完成后的时空图;
图5是本发明实施例提供的内存分配优化装置的结构示意图;
图6是本发明实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的内存分配优化方法的流程示意图之一。如图1所示,所述方法包括:
步骤101、为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知。
本发明实施例提供的内存分配优化方法可以应用于目标程序的编译优化,如AI网络推演程序的编译优化中。在执行内存分配优化方法之前,已经得到目标程序的顺序的算子序列,所有算子的输入、输出以及中间数据的大小和生存时段已知,比如已经由AI网络图推导得出。也即目标程序的算子分别对应于一个时间步,时间步的数据块的数量、大小和生存时段已知。在某些算子中,输入或中间数据是可以被盖写的,这时将该数据的内存空间标记为可重用。
内存分配优化方法希望优化的是目标程序各个时间步的内存分配。优化目标可以是提高内存加载速度,内存加载速度和时间成反比,因此提高内存加载速度等同于减少内存加载耗时。然而,在内存分配策略进行完之前无法得到各个时间步的耗时,因此,通过一个初始策略(通过执行预配置内存空间动作)为目标程序的各个时间步的数据块配置初始的内存状态,预配置内存空间动作可以包括内存预分配(allocate)及内存释放(free),按照每个数据块的生命周期和大小为其分配或释放内存。预配置内存空间动作的执行可以按照已有技术的方法,也可以按照自定义的方法进行。
步骤102、按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历。
内存状态可以包括数据在内存中的占用情况。比如,在每个算子执行时,会有一个内存资源占用的表busy_list,形态如下:
[{‘数据名1’,起始地址1,数据量1},{‘数据名2’,起始地址2,数据量2},……]
其中,由于各层级内存的地址域不同,起始地址也就自然包含了内存类型的信息。没有被占据的区域自然为空闲区。但为了查找方便,还可以使用表free_list:
[{‘空闲区’,起始地址1,数据量1},{‘空闲区’,起始地址2,数据量2},……]
Busy_list和free_list共同构成了内存状态。
初始化完成后,按照算子的执行顺序依次遍历目标程序的时间步。在遍历时间步的过程中,对应每个时间步,遍历时间步的所有数据块,遍历时间步的所有数据块的顺序可以是随机顺序或设定的顺序,如根据数据块的类型(输入数据、中间数据或输出数据)进行遍历。在遍历数据块的过程中,对应每个数据块,通过遍历预设动作集分别执行预设内存调整动作,预设动作集包括设置的至少一种预设内存调整动作。通过遍历预设动作集分别执行预设内存调整动作时,可以按照随机的顺序执行预设内存调整动作,或根据预设内存调整动作的类型设置的顺序依次执行预设内存调整动作。
预设内存调整动作的执行可能成功或失败,预设内存调整动作执行失败主要是因为目的空闲区没有足够的空间,或者执行内存盖写(reuse)时,目的数据不能被盖写。若任一预设内存调整动作执行成功,则当前遍历的时间步中相应数据块的内存状态发生改变,由于调整一个时间步上的数据位置之后内存占用状态发生了改变,会影响其后时间步的数据排布,所以需要通过执行预配置内存空间动作对后面时间步的数据重新分配。也即,响应于任一预设内存调整动作执行成功,为当前遍历的时间步的后续时间步的数据块执行预配置内存空间动作。这也间接要求了调整工作必须按照时间顺序执行,否则调好的时间步的内存状态会被打乱。对一个数据块遍历完成后,根据执行成功的内存调整动作的数量,会得到多个不同的更新的内存状态。
预设状态更新时间步是预先设置的在该时间步遍历完成后,进行可能的内存分配优化的时间步。具体在该时间步是否进行内存状态的优化需要判断更新的内存状态是否比之前的更优,是,则优化,否,则保持原状态。如果当前遍历的时间步为预设状态更新时间步,则记录当前更新的内存状态,更新的内存状态包括了目标程序的各个时间步的数据块的内存分配状态,计算并记录更新的内存状态下完成目标程序的读写任务的总耗时,也即计算更新的内存状态下完成各个时间步的数据块的读写任务的总耗时。
计算总耗时是从全局优化的角度寻求内存分配的最优解,以利用最优解优化当前内存状态。如前所述,本发明实施例提供的内存分配优化方法可以应用于编译优化过程,编译优化过程体现为算子的按序执行过程,每个算子对应一个时间步。完成内存分配优化的时间步可以根据优化的结果读写实际数据。尚未完成内存优化的时间步,比如当前遍历的时间步的后续时间步,虽然按照预配置内存空间动作进行了内存空间的预分配,并利用内存空间的预分配的结果计算耗时,但是计算结果只是为了寻求内存分配的最优解,并非利用预分配的结果进行实际数据的读写。
因此,本发明实施例通过初始策略(通过执行预配置内存空间动作实现)得到一个解并计算整体时间,然后在这个策略的基础上逐个改变动作(或动作的参数),每次改变一个状态下的一个动作(要保证等效性)并得到其价值(或直接利用总耗时代表价值,总耗时最小代表价值最大),直到遍历所有解空间,对比之下可得最优解。当一个时间步的状态改变时,后续的时间步会受到这一状态的影响,所以需要重新规划数据在内存中的位置。所以要求通过执行预配置内存空间动作不仅能初始化内存状态,而且在任意内存状态下也可以用上述规则为任意的算子序列分配、释放内存。
当前时间步的数据块全部遍历完成后,如果当前时间步为预设状态更新时间步,则根据对于该时间步的数据块执行成功的预设内存调整动作的数量,得到多个更新的内存状态。根据记录的各个更新的内存状态下完成目标程序的读写任务的总耗时,将各个更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时进行比较,若存在至少一个更新的内存状态下完成目标程序的读写任务的总耗时小于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,则选取总耗时的最小值对应的更新的内存状态作为当前的内存状态,完成当前时间步的遍历,当前时间步的数据块可以根据当前更新的内存状态进行实际数据的读写。
由于每一时间步上,每个数据块都有多种内存调整方法,产生多个对应的内存状态。原理上,要遍历所有的状态,每个时间步上的状态都要和其它时间步的状态进行组合,如果时间步较多的话,状态空间级数增长会使计算进程崩溃,所以采用局部最优的组合策略对计算进行剪枝。(这样不能保证得到的结果是全局最优,但至少会接近全局最优,而且比较实用)。也即在预设状态更新时间步确定一个当前的最优状态,并作为下一时间步开始遍历时的初始状态。
步骤103、响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
本发明实施例可以根据目标程序(如AI网络)中一系列算子的需要依次分配内存空间或根据预设内存调整动作调整数据的内存分配,以及在数据不再需要内存空间时释放内存。
当按照目标程序的算子的执行顺序对所有时间步遍历完成后,则循序渐进地得到了各个时间步的内存状态,可以实现目标程序编译过程中整体上的内存分配优化过程。
本发明实施例提供的内存分配优化方法,通过按照算子的执行顺序遍历时间步,在遍历时间步时,通过遍历预设动作集对该时间步的数据块执行预设内存调整动作,对未遍历的时间步的数据块执行预配置内存空间动作,得到内存更新状态,通过比较更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,获取耗时减小且耗时最少的更新的内存状态作为当前预设状态更新时间步遍历完成后的内存状态,能够实现不同程序的自适应内存分配优化。
根据本发明实施例提供的一种内存分配优化方法,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。
预设状态更新时间步可以设置为目标程序的所有时间步,也即每个时间步遍历完成后,均计算总耗时,根据总耗时的情况更新内存状态。而由于内存状态的数量随时间步数量的增加是级数增长的,如果时间步很多,计算量会过大。如一共20个时间步,每步产生3个内存状态(仅为举例),组合起来就是320种内存状态。
为此,可将全部时间步分段得到最优,在前一段局部最优的基础上计算下一段。将全部时间步分段得到局部最优段,每个局部最优段可以包括多个时间步,将每个局部最优段的最后时间步作为预设状态更新时间步。在局部最优段包括多个时间步时,下一时间步的调整不一定在上一时间步最优的结果上进行,而是尝试所有的调整情况。
比如,将20个时间步拆解成4个5步,分别求最优内存状态,内存状态的数量就变成35+35+35+35<<320,这样将计算量由大级数增长转化为小级数增长相加,大大缩减了计算量。
可以理解的,获取局部最优段时,并不一定是通过对全部时间步平均分段得到局部最优段的。预设状态更新时间步设置的数量可以综合内存加载速度的需求和计算机计算性能确定。另外,某些局部最优段也可以只包括一个时间步,则这个时间步即为预设状态更新时间步。
本发明实施例提供的内存分配优化方法,通过设置预设状态更新时间步为局部最优段的最后时间步,不仅提高了内存分配优化的灵活性,并且大大减少了计算量。
根据本发明实施例提供的一种内存分配优化方法,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
在为当前遍历的时间步的后续时间步的数据块执行预配置内存空间动作之后,若获知当前遍历的时间步不为预设状态更新时间步,则无需记录当前更新的内存状态及无需计算更新的内存状态下完成目标程序的读写任务的总耗时;判断预设动作集中的内存调整动作是否执行完;若预设动作集中的内存调整动作尚未执行完,则执行下一内存调整动作;若预设动作集中的内存调整动作已经执行完,则进一步判断当前遍历的时间步的数据块是否遍历完;若当前遍历的时间步的数据块尚未遍历完,则对下一数据块进行遍历;若当前遍历的时间步的数据块已经遍历完,则开始对下一时间步进行遍历,直至遍历完所有的时间步。
本发明实施例提供的内存分配优化方法,通过响应于当前遍历的时间步不为预设状态更新时间步,则在内存调整动作未执行完时执行下一动作,在内存调整动作执行完时根据当前遍历的时间步的数据块是否遍历完,遍历下一数据块或遍历下一时间步,保证了内存分配优化的成功执行。
根据本发明实施例提供的一种内存分配优化方法,在所述当前所述时间步遍历完成后,所述方法还包括:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
在当前时间步为预设状态更新时间步且遍历完成后,若获知通过执行成功的预设内存调整动作得到的更新的内存状态下完成目标程序的读写任务的总耗时均大于或等于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,也即通过调整内存分配并未减小目标程序的读写任务的总耗时,则保持上一预设状态更新时间步遍历完成后的内存状态,并开始对下一时间步进行遍历。
本发明实施例提供的内存分配优化方法,通过响应于更新的内存状态下完成目标程序的读写任务的总耗时均大于或等于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,则保持上一预设状态更新时间步遍历完成后的内存状态,并开始对下一时间步进行遍历,保障了内存的分配朝着优化的方向发展。
根据本发明实施例提供的一种内存分配优化方法,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
预设内存调整动作包括同级移动数据块(move)、内存盖写(reuse)和跨层级移动数据块(swap)。同级移动数据块可以通过将数据块移动到同级内存的另一个空闲位置实现内存调整。内存盖写可以通过盖写可重用空间放置新的数据块实现内存调整,可盖写的数据只能是输入数据或中间数据,且只在其消亡的时间步上被输出数据或产生在其后的中间数据盖写。跨层级移动数据块可以通过将数据块移动到其他层级的内存实现内存调整,包括了从当前内存换出、然后换入到目标层级内存的过程。
allocated和free改变的是数据分配和消亡的时间步。由于目标程序(如AI网络)中数据的生存期已经确定,即不能改变数据块分配和消亡的时间步,或者增加、删除时间步。而只能通过改变数据在内存中的位置改变状态。故预设动作集包括move,swap和reuse三个预设内存调整动作,而不包括allocated和free。但是allocated和free可以用于内存预分配的过程。
对每个数据块都实施一次上述move,swap和reuse3个动作,如果有n个数据,每个数据可能分别有m1,m2,……mn个可移动位置(包括可重用位置)。动作确定之后,下一个状态还取决于该动作执行成功与否。
表1是对内存预分配allocate、内存释放free、同级移动数据块move、内存盖写reuse及跨层级移动数据块swap的解释。
表1
Figure BDA0003426404810000151
Figure BDA0003426404810000161
本发明实施例可以实现在运算单元没有访问数据前就将数据放到高层内存。
本发明实施例提供的内存分配优化方法,通过设置预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块,通过尝试多样化的预设内存调整动作进一步优化内存分配。
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
可以为预设内存调整动作设置规则,以优化内存分配,避免盲目尝试浪费资源。
在执行预设内存调整动作(可以适用同级移动数据块、内存盖写和跨层级移动数据块的过程)时,任意两个相邻的空闲空间随时合并成一个空闲空间。在执行同级移动数据块及跨层级移动数据块时,为数据块分配的内存空间贴近空闲空间的边界(上界或下界均可)。在执行内存盖写时,一个算子中的输入数据的可重用空间可以被当前算子的中间数据和输出数据重用,中间数据的可重用空间能够被当前算子的输出数据重用。
本发明实施例提供的内存分配优化方法,通过设置执行预设内存调整动作的规则,提高了内存分配的效率和效果。
根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作包括内存预分配及内存释放;其中,在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
预配置内存空间动作包括内存预分配及内存释放的动作。为保证预配置内存空间的效果,可以为内存预分配的过程设置如下规则:
若数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为数据块分配内存,若当前层次的内存无法容纳数据块,则尝试低一层级的内存;若数据块的内存层级预先指定,则将数据块分配到预先指定的内存;
对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为数据块分配内存,即从最小空闲空间开始遍历,直到找到可以容纳该数据块的空闲空间为止;
任意两个相邻的空闲空间随时合并成一个空闲空间;
为数据块分配的内存空间贴近空闲空间的边界(上界或下界均可);
当空闲空间两端都有数据时,新分配在这一空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若空闲空间两端的数据的销毁时间相同,则新分配在这一空闲空间的数据块靠近当前层级内存区域的边界。这样早期销毁的数据空间可以与剩余空闲空间合并。
本发明实施例提供的内存分配优化方法,通过设置内存预分配的规则,保障了预配置内存空间的效果,在此基础上进行内存调整,进一步提高了内存分配优化的效率和效果。
根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作还包括内存盖写;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
预配置内存空间动作还可以包括内存盖写。在执行内存盖写时,一个算子中的输入数据的可重用空间可以被当前算子的中间数据和输出数据重用,中间数据的可重用空间能够被当前算子的输出数据重用。在执行内存释放时,未被盖写的可重用空间在当前算子结束时释放。
本发明实施例提供的内存分配优化方法,通过设置预配置内存空间动作中内存盖写和内存释放的规则,可进一步提高内存优化的效率和效果。
根据本发明实施例提供的一种内存分配优化方法,所述总耗时表示为:
Figure BDA0003426404810000191
其中,E(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
以对应同一数据,将数据写入内存和从内存中读取数据发生在同一内存为例,t(aj(d))的表达式为:
Figure BDA0003426404810000192
其中,lib表示从其他层级内存移入b类型内存访问的延迟,lob表示从b类型内存移出到其他层级内存访问的延迟,wib表示从其他层级内存移入b类型内存访问的带宽,wob表示从b类型内存移出到其他层级内存访问的带宽,write表示将数据写入内存,read表示从内存中读取数据。其中,b表示一种内存类型,并非特指哪种内存类型。
根据每一时间步上的动作,可以计算出这一时间步上消耗的时间。由于本发明关注于通过内存分配改善性能(计算速度),将内存状态的价值(可以作为学习的奖励)设为总耗时的倒数即可。
将一个时间步上的所有读写任务计算出消耗时间之后相加,即可得到该时间步的总消耗时间。常量数据可以在计算前一次性加载,所以可以不计第一次加载时间。
总耗时就是计算一个内存状态下完成数据的所有的读写任务需要的时间。在计算总耗时时,具体结合上式计算完成目标程序的读写任务的总耗时。
上述计算总耗时的公式计算得到的时间只是对加载时间的估算,虽不精确代表总耗时,但总耗时的计算结果值可以用于内存状态价值的比较。
本发明实施例提供的一种内存分配优化方法,通过给出计算内存状态s下完成目标程序的读写任务的总耗时的计算公式,进一步保障了内存分配的优化效果。
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
在按照目标程序的算子的执行顺序依次遍历时间步的过程中,对于每一个算子,如果该算子的所有数据(包括输入、输出和中间结果)都在可访问内存最高层内存中,则认为该算子的数据块的内存分配不再需要优化,则跳过该时间步,准备下一时间步的处理。
本发明实施例提供的内存分配优化方法,通过在获知时间步的数据块均在最高层内存中,则跳过当前时间步,进一步提高了内存优化的效率和效果。
图2是本发明实施例提供的内存分配优化方法的流程示意图之二。如图2所示,该方法包括:
通过执行预配置内存空间动作(通过预设的常规程序实现)生成初始内存分配状态后,按照算子的执行顺序遍历时间步;
若在遍历某个时间步之前,获知该时间步中的数据块均分配在最高层内存(已是最优),则跳过该时间步,准备遍历处理下一时间步;
在遍历时间步的过程中,遍历该时间步的所有数据块;
在遍历数据块的过程中,通过遍历预设动作集,对该数据块执行预设动作集中的预设内存调整动作,若执行成功,则记录内存状态,用常规程序为后续时间步重新规划内存布局,计算并记录该状态的耗时和价值(价值为耗时的倒数);若动作没有执行成功,则跳过此动作,对数据块执行下一预设内存调整动作;若对该数据块已遍历完预设动作集,即对该数据块执行了预设动作集中的全部预设内存调整动作,则遍历当前时间步的下一数据块;
若当前时间步的所有数据块遍历完成,判断当前时间步所在的局部最优段是否遍历完成;若当前时间步所在的局部最优段已遍历完成,则将内存状态更新为最优状态,即读写数据耗时最小、价值最大的状态,进而遍历下一时间步;若当前时间步所在的局部最优段尚未遍历完成,则开始遍历下一时间步;
若所有的时间步均遍历完成,则结束。
上述过程利用状态转移遍历状态,实际是从已知价值的状态出发,利用各种动作使状态转移到相邻状态,逐步对相邻状态计算价值,最终得到所有状态的价值的一种遍历过程。可以由下列伪代码阐释:
Figure BDA0003426404810000211
为了直观了解时间步上的内存分配状态,可以用时空图表示,横轴代表时间步,纵轴代表空间布局。
图3是本发明实施例提供的内存分配优化方法中初始化的时空图。图4是本发明实施例提供的内存分配优化方法中优化完成后的时空图。图3和图4为针对同一目标程序的时空图对比。图3所示的时空图的总耗时cost time=111528.862924cycle,图4所示的时空图的总耗时cost time=100207.360000cycle,cycle表示时钟周期,可以看到总耗时有明显的减小。同样的序号表示同一个数据块的数据。
下面对本发明实施例提供的内存分配优化装置进行描述,下文描述的内存分配优化装置与上文描述的内存分配优化方法可相互对应参照。
图5是本发明实施例提供的内存分配优化装置的结构示意图。如图5所示,所述装置包括初始化模块10、内存分配优化模块20及优化结果获取模块30,其中:初始化模块10用于:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;内存分配优化模块20用于:按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;优化结果获取模块30用于:响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
本发明实施例提供的内存分配优化装置,通过按照算子的执行顺序遍历时间步,在遍历时间步时,通过遍历预设动作集对该时间步的数据块执行预设内存调整动作,对未遍历的时间步的数据块执行预配置内存空间动作,得到内存更新状态,通过比较更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,获取耗时减小且耗时最少的更新的内存状态作为当前预设状态更新时间步遍历完成后的内存状态,能够实现不同程序的自适应内存分配优化。
根据本发明实施例提供的一种内存分配优化装置,所述装置还包括预设状态更新时间步设置模块,在内存分配优化模块20执行之前,所述预设状态更新时间步设置模块用于:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。。
本发明实施例提供的内存分配优化装置,通过设置预设状态更新时间步为局部最优段的最后时间步,不仅提高了内存分配优化的灵活性,并且大大减少了计算量。
根据本发明实施例提供的一种内存分配优化装置,内存分配优化模块20在用于为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,还用于:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
本发明实施例提供的内存分配优化装置,通过响应于当前遍历的时间步不为预设状态更新时间步,则在内存调整动作未执行完时执行下一动作,在内存调整动作执行完时根据当前遍历的时间步的数据块是否遍历完,遍历下一数据块或遍历下一时间步,保证了内存分配优化的成功执行。
根据本发明实施例提供的一种内存分配优化装置,在当前所述时间步遍历完成后,内存分配优化模块20还用于:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
本发明实施例提供的内存分配优化装置,通过响应于更新的内存状态下完成目标程序的读写任务的总耗时均大于或等于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,则保持上一预设状态更新时间步遍历完成后的内存状态,并开始对下一时间步进行遍历,保障了内存的分配朝着优化的方向发展。
根据本发明实施例提供的一种内存分配优化装置,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
本发明实施例提供的内存分配优化装置,通过设置预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块,通过尝试多样化的预设内存调整动作进一步优化内存分配。
根据本发明实施例提供的一种内存分配优化装置,内存分配优化模块20还用于:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
本发明实施例提供的内存分配优化装置,通过设置执行预设内存调整动作的规则,提高了内存分配的效率和效果。
根据本发明实施例提供的一种内存分配优化装置,所述预配置内存空间动作包括内存预分配及内存释放;其中,内存分配优化模块20在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
本发明实施例提供的内存分配优化装置,通过设置内存预分配的规则,保障了预配置内存空间的效果,在此基础上进行内存调整,进一步提高了内存分配优化的效率和效果。
根据本发明实施例提供的一种内存分配优化装置,所述预配置内存空间动作还包括内存盖写;内存分配优化模块20在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;内存分配优化模块20在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
本发明实施例提供的内存分配优化装置,通过设置预配置内存空间动作内存盖写和内存释放的规则,可进一步提高内存优化的效率和效果。
根据本发明实施例提供的一种内存分配优化装置,所述总耗时表示为:
Figure BDA0003426404810000261
其中,E(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
本发明实施例提供的一种内存分配优化装置,通过给出计算内存状态s下完成目标程序的读写任务的总耗时的计算公式,进一步保障了内存分配的优化效果。
根据本发明实施例提供的一种内存分配优化装置,内存分配优化模块20还用于:在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
本发明实施例提供的内存分配优化装置,通过在获知时间步的数据块均在最高层内存中,则跳过当前时间步,进一步提高了内存优化的效率和效果。
图6是本发明实施例提供的电子设备的结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(Communications Interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行内存分配优化方法,该方法包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的内存分配优化方法,该方法包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的内存分配优化方法,该方法包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (14)

1.一种内存分配优化方法,其特征在于,包括:
为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;
按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;
响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
2.根据权利要求1所述的内存分配优化方法,其特征在于,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:
将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。
3.根据权利要求1所述的内存分配优化方法,其特征在于,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:
响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;
若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;
若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
4.根据权利要求1所述的内存分配优化方法,其特征在于,在所述当前所述时间步遍历完成后,所述方法还包括:
响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
5.根据权利要求1所述的内存分配优化方法,其特征在于,包括:所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:
所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;
所述内存盖写包括通过盖写可重用空间放置数据块;
所述跨层级移动数据块包括将数据块移动到其他层级的内存。
6.根据权利要求5所述的内存分配优化方法,其特征在于,所述方法还包括:
在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;
在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;
在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
7.根据权利要求5所述的内存分配优化方法,其特征在于,所述预配置内存空间动作包括内存预分配及内存释放;其中,在执行所述内存预分配时,遵循如下规则中的至少一种:
若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;
对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;
任意两个相邻的空闲空间随时合并成一个空闲空间;
为所述数据块分配的内存空间贴近空闲空间的边界;
当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
8.根据权利要求7所述的内存分配优化方法,其特征在于,所述预配置内存空间动作还包括内存盖写;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
9.根据权利要求1所述的内存分配优化方法,其特征在于,所述总耗时表示为:
Figure FDA0003426404800000041
其中,E(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
10.根据权利要求1所述的内存分配优化方法,其特征在于,所述方法还包括:
在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
11.一种内存分配优化装置,其特征在于,包括:
初始化模块,用于:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;
内存分配优化模块,用于:按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;
优化结果获取模块,用于:响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
12.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至10任一项所述内存分配优化方法的步骤。
13.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至10任一项所述内存分配优化方法的步骤。
14.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至10任一项所述内存分配优化方法的步骤。
CN202111579000.8A 2021-12-22 2021-12-22 内存分配优化方法、装置、电子设备、介质及程序产品 Active CN114237903B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111579000.8A CN114237903B (zh) 2021-12-22 2021-12-22 内存分配优化方法、装置、电子设备、介质及程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111579000.8A CN114237903B (zh) 2021-12-22 2021-12-22 内存分配优化方法、装置、电子设备、介质及程序产品

Publications (2)

Publication Number Publication Date
CN114237903A true CN114237903A (zh) 2022-03-25
CN114237903B CN114237903B (zh) 2024-03-22

Family

ID=80761090

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111579000.8A Active CN114237903B (zh) 2021-12-22 2021-12-22 内存分配优化方法、装置、电子设备、介质及程序产品

Country Status (1)

Country Link
CN (1) CN114237903B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115495248A (zh) * 2022-10-26 2022-12-20 上海燧原科技有限公司 一种推理卡的内存分配方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109471671A (zh) * 2017-09-06 2019-03-15 武汉斗鱼网络科技有限公司 一种程序冷启动方法和系统
CN110851273A (zh) * 2019-10-31 2020-02-28 山东省计算中心(国家超级计算济南中心) 一种基于混合内存的程序处理方法和基于混合内存的设备
CN111488221A (zh) * 2020-06-29 2020-08-04 北京一流科技有限公司 静态网络中的内存空间预配系统及其方法
CN111708641A (zh) * 2020-07-14 2020-09-25 腾讯科技(深圳)有限公司 一种内存管理方法、装置、设备及计算机可读存储介质
KR20210092689A (ko) * 2020-01-15 2021-07-26 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 그래프 데이터베이스의 순회 방법, 장치, 설비 및 저장매체

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109471671A (zh) * 2017-09-06 2019-03-15 武汉斗鱼网络科技有限公司 一种程序冷启动方法和系统
CN110851273A (zh) * 2019-10-31 2020-02-28 山东省计算中心(国家超级计算济南中心) 一种基于混合内存的程序处理方法和基于混合内存的设备
KR20210092689A (ko) * 2020-01-15 2021-07-26 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 그래프 데이터베이스의 순회 방법, 장치, 설비 및 저장매체
CN111488221A (zh) * 2020-06-29 2020-08-04 北京一流科技有限公司 静态网络中的内存空间预配系统及其方法
CN111708641A (zh) * 2020-07-14 2020-09-25 腾讯科技(深圳)有限公司 一种内存管理方法、装置、设备及计算机可读存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
浦汉来;凌明;金晶;周凡;: "基于嵌套循环指令分析的片上存储器分配策略", 电路与系统学报, no. 01, 28 February 2006 (2006-02-28) *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115495248A (zh) * 2022-10-26 2022-12-20 上海燧原科技有限公司 一种推理卡的内存分配方法、装置、电子设备及存储介质
CN115495248B (zh) * 2022-10-26 2023-09-15 上海燧原科技有限公司 一种推理卡的内存分配方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN114237903B (zh) 2024-03-22

Similar Documents

Publication Publication Date Title
US9430388B2 (en) Scheduler, multi-core processor system, and scheduling method
US11675709B2 (en) Reading sequential data from memory using a pivot table
CN111143039B (zh) 一种虚拟机的调度方法、装置及计算机存储介质
JP2008544422A (ja) メモリページ管理
US10474574B2 (en) Method and apparatus for system resource management
CN114327946A (zh) 共享内存访问控制方法、装置、电子设备及自动驾驶车辆
EP3252595A1 (en) Method and device for running process
US8180985B2 (en) Storage switch, storage system, and data copying method using bitmaps representing different sized regions
CN109359063A (zh) 面向存储系统软件的缓存置换方法、存储设备及存储介质
CN111858025A (zh) 一种基于gpu卡显存的混合调度方法、装置、设备和介质
CN109558456A (zh) 一种文件迁移方法、装置、设备及可读存储介质
CN114237903A (zh) 内存分配优化方法、装置、电子设备、介质及程序产品
KR102114245B1 (ko) 그래픽스 상태 관리 장치 및 방법
CN110688055B (zh) 一种大图计算中数据访问方法及系统
US20150381520A1 (en) Data set multiplicity change device, server, data set multiplicity change method and computer redable medium
US10642817B2 (en) Index table update method, and device
CN116841739B (zh) 用于异构计算平台的数据包重用系统
CN113407343A (zh) 一种基于资源分配的业务处理方法、装置及设备
CN111752941A (zh) 一种数据存储、访问方法、装置、服务器及存储介质
CN108008981B (zh) 一种片上系统SoC中进行程序初始化的方法和装置
CN110960858A (zh) 一种游戏资源的处理方法、装置、设备及存储介质
CN113127430A (zh) 镜像信息处理方法、装置、计算机可读介质及电子设备
CN114003228B (zh) 界面更新方法、装置、计算机设备以及存储介质
CN116069263B (zh) 文件系统的优化方法、装置、服务器、设备及存储介质
CN117666934A (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
CP03 Change of name, title or address

Address after: 201114 room 1302, 13 / F, building 16, 2388 Chenhang Road, Minhang District, Shanghai

Patentee after: Shanghai Bi Ren Technology Co.,Ltd.

Country or region after: China

Address before: 201114 room 1302, 13 / F, building 16, 2388 Chenhang Road, Minhang District, Shanghai

Patentee before: Shanghai Bilin Intelligent Technology Co.,Ltd.

Country or region before: China

CP03 Change of name, title or address