内存分配优化方法、装置、电子设备、介质及程序产品制造方法及图纸

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

【技术实现步骤摘要】
内存分配优化方法、装置、电子设备、介质及程序产品


[0001]本专利技术实施例涉及计算机
,具体涉及一种内存分配优化方法、装置、电子设备、介质及程序产品。

技术介绍

[0002]在AI网络推演等计算过程中,为数据分配和释放内存是必不可少的。由于GPU或CPU中存在多层级内存,每层内存有不同的带宽、延迟及访问局限性(局限性越高访存冲突概率越低),因此在如执行AI网络推演等计算时内存的使用策略会对计算性能产生巨大影响。
[0003]为提高计算性能,现有的一种内存使用策略是通过数据自然命中的方式,即用户申请的内存统一在主内存(层级较低、容量较大)中。CPU或GPU访问后,通过在高速缓冲存储器(cache)留下访问过的低层内存的数据副本(将数据副本放入缓存),在下次需要读取相同数据时,从cache中读取数据以减少低层内存的访问,以提高系统性能。在这种通过cache加速的技术下,数据至少被用户访问过一次后才能被cache命中,由于高层内存不会直接被用户使用,因此高层内存的数据无法放入缓存。而且,放入缓存的是连续分布的数据,如果数据不连续分布,则也无法放入缓存。如果放入缓存的数据不再被读取,cache也无法发挥作用。在cache中数据需要保留多久靠自然淘汰法,有用的数据可能被冲掉,不用的数据可能仍占用空间,无法保证空间被合理使用。
[0004]现有的另外一种内存使用策略是为计算手工指定内存空间,或者写一个程序按照一个固定的规则分配内存。比如,在AI网络推演等计算中,AI网络可以很大,而且类型多样,为每个AI网络手动规划内存布局效率很低,而且最终效果极大地依赖于工程师的个人能力;用某个固定的程序分配内存难以覆盖各类AI网络的变数,难以达到全局最优甚至局部最优。因此,需要一个能够适应不同程序自动完成内存的分配优化工作的方法。

技术实现思路

[0005]为解决现有技术中的问题,本专利技术实施例提供一种内存分配优化方法、装置、电子设备、介质及程序产品。
[0006]本专利技术实施例提供一种内存分配优化方法,包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更
新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0007]根据本专利技术实施例提供的一种内存分配优化方法,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。
[0008]根据本专利技术实施例提供的一种内存分配优化方法,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
[0009]根据本专利技术实施例提供的一种内存分配优化方法,在所述当前所述时间步遍历完成后,所述方法还包括:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
[0010]根据本专利技术实施例提供的一种内存分配优化方法,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
[0011]根据本专利技术实施例提供的一种内存分配优化方法,所述方法还包括:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
[0012]根据本专利技术实施例提供的一种内存分配优化方法,所述预配置内存空间动作包括内存预分配及内存释放;其中,在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数
据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
[0013]根据本专利技术实施例提供的一种内存分配优化方法,所述预配置内存空间动作还包括内存盖写;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
[0014]根据本专利技术实施例提供的一种内存分配优化方法,所述总耗时表示为:
[0015][0016]其中,E(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存分配优化方法,其特征在于,包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。2.根据权利要求1所述的内存分配优化方法,其特征在于,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。3.根据权利要求1所述的内存分配优化方法,其特征在于,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。4.根据权利要求1所述的内存分配优化方法,其特征在于,在所述当前所述时间步遍历完成后,所述方法还包括:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。5.根据权利要求1所述的内存分配优化方法,其特征在于,包括:所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
6.根据权利要求5所述的内存分配优化方法,其特征在于,所述方法还包括:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。7.根据权利要求5所述的内存分配优化方法,其特征在于,所述预配置内存空间动作包括内存预分配...

【专利技术属性】
技术研发人员:ꢀ七四专利代理机构
申请(专利权)人:上海壁仞智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1