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

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

2022-03-26 15:08:10 来源:中国专利 TAG:


1.本发明实施例涉及计算机技术领域,具体涉及一种内存分配优化方法、装置、电子设备、介质及程序产品。


背景技术:

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


技术实现要素:

5.为解决现有技术中的问题,本发明实施例提供一种内存分配优化方法、装置、电子设备、介质及程序产品。
6.本发明实施例提供一种内存分配优化方法,包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更
新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
7.根据本发明实施例提供的一种内存分配优化方法,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。
8.根据本发明实施例提供的一种内存分配优化方法,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
9.根据本发明实施例提供的一种内存分配优化方法,在所述当前所述时间步遍历完成后,所述方法还包括:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
10.根据本发明实施例提供的一种内存分配优化方法,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
11.根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
12.根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作包括内存预分配及内存释放;其中,在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数
据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
13.根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作还包括内存盖写;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
14.根据本发明实施例提供的一种内存分配优化方法,所述总耗时表示为:
[0015][0016]
其中,e(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
[0017]
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:
[0018]
在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
[0019]
本发明实施例还提供一种内存分配优化装置,包括:初始化模块,用于:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;内存分配优化模块,用于:按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;优化结果获取模块,用于:响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0020]
本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述内存分配优化方法的步骤。
[0021]
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述内存分配优化方法的步骤。
[0022]
本发明实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述内存分配优化方法的步骤。
[0023]
本发明实施例提供的内存分配优化方法、装置、电子设备、介质及程序产品,通过按照算子的执行顺序遍历时间步,在遍历时间步时,通过遍历预设动作集对该时间步的数据块执行预设内存调整动作,对未遍历的时间步的数据块执行预配置内存空间动作,得到内存更新状态,通过比较更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,获取耗时减小且耗时最少的更新的内存状态作为当前预设状态更新时间步遍历完成后的内存状态,能够实现不同程序的自适应内存分配优化。
附图说明
[0024]
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0025]
图1是本发明实施例提供的内存分配优化方法的流程示意图之一;
[0026]
图2是本发明实施例提供的内存分配优化方法的流程示意图之二;
[0027]
图3是本发明实施例提供的内存分配优化方法中初始化的时空图;
[0028]
图4是本发明实施例提供的内存分配优化方法中优化完成后的时空图;
[0029]
图5是本发明实施例提供的内存分配优化装置的结构示意图;
[0030]
图6是本发明实施例提供的电子设备的结构示意图。
具体实施方式
[0031]
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0032]
图1是本发明实施例提供的内存分配优化方法的流程示意图之一。如图1所示,所述方法包括:
[0033]
步骤101、为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知。
[0034]
本发明实施例提供的内存分配优化方法可以应用于目标程序的编译优化,如ai网络推演程序的编译优化中。在执行内存分配优化方法之前,已经得到目标程序的顺序的算子序列,所有算子的输入、输出以及中间数据的大小和生存时段已知,比如已经由ai网络图推导得出。也即目标程序的算子分别对应于一个时间步,时间步的数据块的数量、大小和生存时段已知。在某些算子中,输入或中间数据是可以被盖写的,这时将该数据的内存空间标记为可重用。
[0035]
内存分配优化方法希望优化的是目标程序各个时间步的内存分配。优化目标可以是提高内存加载速度,内存加载速度和时间成反比,因此提高内存加载速度等同于减少内存加载耗时。然而,在内存分配策略进行完之前无法得到各个时间步的耗时,因此,通过一
个初始策略(通过执行预配置内存空间动作)为目标程序的各个时间步的数据块配置初始的内存状态,预配置内存空间动作可以包括内存预分配(allocate)及内存释放(free),按照每个数据块的生命周期和大小为其分配或释放内存。预配置内存空间动作的执行可以按照已有技术的方法,也可以按照自定义的方法进行。
[0036]
步骤102、按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历。
[0037]
内存状态可以包括数据在内存中的占用情况。比如,在每个算子执行时,会有一个内存资源占用的表busy_list,形态如下:
[0038]
[{

数据名1’,起始地址1,数据量1},{

数据名2’,起始地址2,数据量2},
……
]
[0039]
其中,由于各层级内存的地址域不同,起始地址也就自然包含了内存类型的信息。没有被占据的区域自然为空闲区。但为了查找方便,还可以使用表free_list:
[0040]
[{

空闲区’,起始地址1,数据量1},{

空闲区’,起始地址2,数据量2},
……
]
[0041]
busy_list和free_list共同构成了内存状态。
[0042]
初始化完成后,按照算子的执行顺序依次遍历目标程序的时间步。在遍历时间步的过程中,对应每个时间步,遍历时间步的所有数据块,遍历时间步的所有数据块的顺序可以是随机顺序或设定的顺序,如根据数据块的类型(输入数据、中间数据或输出数据)进行遍历。在遍历数据块的过程中,对应每个数据块,通过遍历预设动作集分别执行预设内存调整动作,预设动作集包括设置的至少一种预设内存调整动作。通过遍历预设动作集分别执行预设内存调整动作时,可以按照随机的顺序执行预设内存调整动作,或根据预设内存调整动作的类型设置的顺序依次执行预设内存调整动作。
[0043]
预设内存调整动作的执行可能成功或失败,预设内存调整动作执行失败主要是因为目的空闲区没有足够的空间,或者执行内存盖写(reuse)时,目的数据不能被盖写。若任一预设内存调整动作执行成功,则当前遍历的时间步中相应数据块的内存状态发生改变,由于调整一个时间步上的数据位置之后内存占用状态发生了改变,会影响其后时间步的数据排布,所以需要通过执行预配置内存空间动作对后面时间步的数据重新分配。也即,响应于任一预设内存调整动作执行成功,为当前遍历的时间步的后续时间步的数据块执行预配置内存空间动作。这也间接要求了调整工作必须按照时间顺序执行,否则调好的时间步的内存状态会被打乱。对一个数据块遍历完成后,根据执行成功的内存调整动作的数量,会得到多个不同的更新的内存状态。
[0044]
预设状态更新时间步是预先设置的在该时间步遍历完成后,进行可能的内存分配优化的时间步。具体在该时间步是否进行内存状态的优化需要判断更新的内存状态是否比
之前的更优,是,则优化,否,则保持原状态。如果当前遍历的时间步为预设状态更新时间步,则记录当前更新的内存状态,更新的内存状态包括了目标程序的各个时间步的数据块的内存分配状态,计算并记录更新的内存状态下完成目标程序的读写任务的总耗时,也即计算更新的内存状态下完成各个时间步的数据块的读写任务的总耗时。
[0045]
计算总耗时是从全局优化的角度寻求内存分配的最优解,以利用最优解优化当前内存状态。如前所述,本发明实施例提供的内存分配优化方法可以应用于编译优化过程,编译优化过程体现为算子的按序执行过程,每个算子对应一个时间步。完成内存分配优化的时间步可以根据优化的结果读写实际数据。尚未完成内存优化的时间步,比如当前遍历的时间步的后续时间步,虽然按照预配置内存空间动作进行了内存空间的预分配,并利用内存空间的预分配的结果计算耗时,但是计算结果只是为了寻求内存分配的最优解,并非利用预分配的结果进行实际数据的读写。
[0046]
因此,本发明实施例通过初始策略(通过执行预配置内存空间动作实现)得到一个解并计算整体时间,然后在这个策略的基础上逐个改变动作(或动作的参数),每次改变一个状态下的一个动作(要保证等效性)并得到其价值(或直接利用总耗时代表价值,总耗时最小代表价值最大),直到遍历所有解空间,对比之下可得最优解。当一个时间步的状态改变时,后续的时间步会受到这一状态的影响,所以需要重新规划数据在内存中的位置。所以要求通过执行预配置内存空间动作不仅能初始化内存状态,而且在任意内存状态下也可以用上述规则为任意的算子序列分配、释放内存。
[0047]
当前时间步的数据块全部遍历完成后,如果当前时间步为预设状态更新时间步,则根据对于该时间步的数据块执行成功的预设内存调整动作的数量,得到多个更新的内存状态。根据记录的各个更新的内存状态下完成目标程序的读写任务的总耗时,将各个更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时进行比较,若存在至少一个更新的内存状态下完成目标程序的读写任务的总耗时小于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,则选取总耗时的最小值对应的更新的内存状态作为当前的内存状态,完成当前时间步的遍历,当前时间步的数据块可以根据当前更新的内存状态进行实际数据的读写。
[0048]
由于每一时间步上,每个数据块都有多种内存调整方法,产生多个对应的内存状态。原理上,要遍历所有的状态,每个时间步上的状态都要和其它时间步的状态进行组合,如果时间步较多的话,状态空间级数增长会使计算进程崩溃,所以采用局部最优的组合策略对计算进行剪枝。(这样不能保证得到的结果是全局最优,但至少会接近全局最优,而且比较实用)。也即在预设状态更新时间步确定一个当前的最优状态,并作为下一时间步开始遍历时的初始状态。
[0049]
步骤103、响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0050]
本发明实施例可以根据目标程序(如ai网络)中一系列算子的需要依次分配内存空间或根据预设内存调整动作调整数据的内存分配,以及在数据不再需要内存空间时释放内存。
[0051]
当按照目标程序的算子的执行顺序对所有时间步遍历完成后,则循序渐进地得到
了各个时间步的内存状态,可以实现目标程序编译过程中整体上的内存分配优化过程。
[0052]
本发明实施例提供的内存分配优化方法,通过按照算子的执行顺序遍历时间步,在遍历时间步时,通过遍历预设动作集对该时间步的数据块执行预设内存调整动作,对未遍历的时间步的数据块执行预配置内存空间动作,得到内存更新状态,通过比较更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,获取耗时减小且耗时最少的更新的内存状态作为当前预设状态更新时间步遍历完成后的内存状态,能够实现不同程序的自适应内存分配优化。
[0053]
根据本发明实施例提供的一种内存分配优化方法,在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步之前,所述方法还包括:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。
[0054]
预设状态更新时间步可以设置为目标程序的所有时间步,也即每个时间步遍历完成后,均计算总耗时,根据总耗时的情况更新内存状态。而由于内存状态的数量随时间步数量的增加是级数增长的,如果时间步很多,计算量会过大。如一共20个时间步,每步产生3个内存状态(仅为举例),组合起来就是3
20
种内存状态。
[0055]
为此,可将全部时间步分段得到最优,在前一段局部最优的基础上计算下一段。将全部时间步分段得到局部最优段,每个局部最优段可以包括多个时间步,将每个局部最优段的最后时间步作为预设状态更新时间步。在局部最优段包括多个时间步时,下一时间步的调整不一定在上一时间步最优的结果上进行,而是尝试所有的调整情况。
[0056]
比如,将20个时间步拆解成4个5步,分别求最优内存状态,内存状态的数量就变成35 35 35 35<<3
20
,这样将计算量由大级数增长转化为小级数增长相加,大大缩减了计算量。
[0057]
可以理解的,获取局部最优段时,并不一定是通过对全部时间步平均分段得到局部最优段的。预设状态更新时间步设置的数量可以综合内存加载速度的需求和计算机计算性能确定。另外,某些局部最优段也可以只包括一个时间步,则这个时间步即为预设状态更新时间步。
[0058]
本发明实施例提供的内存分配优化方法,通过设置预设状态更新时间步为局部最优段的最后时间步,不仅提高了内存分配优化的灵活性,并且大大减少了计算量。
[0059]
根据本发明实施例提供的一种内存分配优化方法,在所述为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,所述方法还包括:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
[0060]
在为当前遍历的时间步的后续时间步的数据块执行预配置内存空间动作之后,若获知当前遍历的时间步不为预设状态更新时间步,则无需记录当前更新的内存状态及无需
计算更新的内存状态下完成目标程序的读写任务的总耗时;判断预设动作集中的内存调整动作是否执行完;若预设动作集中的内存调整动作尚未执行完,则执行下一内存调整动作;若预设动作集中的内存调整动作已经执行完,则进一步判断当前遍历的时间步的数据块是否遍历完;若当前遍历的时间步的数据块尚未遍历完,则对下一数据块进行遍历;若当前遍历的时间步的数据块已经遍历完,则开始对下一时间步进行遍历,直至遍历完所有的时间步。
[0061]
本发明实施例提供的内存分配优化方法,通过响应于当前遍历的时间步不为预设状态更新时间步,则在内存调整动作未执行完时执行下一动作,在内存调整动作执行完时根据当前遍历的时间步的数据块是否遍历完,遍历下一数据块或遍历下一时间步,保证了内存分配优化的成功执行。
[0062]
根据本发明实施例提供的一种内存分配优化方法,在所述当前所述时间步遍历完成后,所述方法还包括:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
[0063]
在当前时间步为预设状态更新时间步且遍历完成后,若获知通过执行成功的预设内存调整动作得到的更新的内存状态下完成目标程序的读写任务的总耗时均大于或等于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,也即通过调整内存分配并未减小目标程序的读写任务的总耗时,则保持上一预设状态更新时间步遍历完成后的内存状态,并开始对下一时间步进行遍历。
[0064]
本发明实施例提供的内存分配优化方法,通过响应于更新的内存状态下完成目标程序的读写任务的总耗时均大于或等于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,则保持上一预设状态更新时间步遍历完成后的内存状态,并开始对下一时间步进行遍历,保障了内存的分配朝着优化的方向发展。
[0065]
根据本发明实施例提供的一种内存分配优化方法,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
[0066]
预设内存调整动作包括同级移动数据块(move)、内存盖写(reuse)和跨层级移动数据块(swap)。同级移动数据块可以通过将数据块移动到同级内存的另一个空闲位置实现内存调整。内存盖写可以通过盖写可重用空间放置新的数据块实现内存调整,可盖写的数据只能是输入数据或中间数据,且只在其消亡的时间步上被输出数据或产生在其后的中间数据盖写。跨层级移动数据块可以通过将数据块移动到其他层级的内存实现内存调整,包括了从当前内存换出、然后换入到目标层级内存的过程。
[0067]
allocated和free改变的是数据分配和消亡的时间步。由于目标程序(如ai网络)中数据的生存期已经确定,即不能改变数据块分配和消亡的时间步,或者增加、删除时间步。而只能通过改变数据在内存中的位置改变状态。故预设动作集包括move,swap和reuse三个预设内存调整动作,而不包括allocated和free。但是allocated和free可以用于内存预分配的过程。
[0068]
对每个数据块都实施一次上述move,swap和reuse3个动作,如果有n个数据,每个数据可能分别有m1,m2,
……mn
个可移动位置(包括可重用位置)。动作确定之后,下一个状态还取决于该动作执行成功与否。
[0069]
表1是对内存预分配allocate、内存释放free、同级移动数据块move、内存盖写reuse及跨层级移动数据块swap的解释。
[0070]
表1
[0071][0072][0073]
本发明实施例可以实现在运算单元没有访问数据前就将数据放到高层内存。
[0074]
本发明实施例提供的内存分配优化方法,通过设置预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块,通过尝试多样化的预设内存调整动作进一步优化内存分配。
[0075]
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子
的输出数据的数据块盖写。
[0076]
可以为预设内存调整动作设置规则,以优化内存分配,避免盲目尝试浪费资源。
[0077]
在执行预设内存调整动作(可以适用同级移动数据块、内存盖写和跨层级移动数据块的过程)时,任意两个相邻的空闲空间随时合并成一个空闲空间。在执行同级移动数据块及跨层级移动数据块时,为数据块分配的内存空间贴近空闲空间的边界(上界或下界均可)。在执行内存盖写时,一个算子中的输入数据的可重用空间可以被当前算子的中间数据和输出数据重用,中间数据的可重用空间能够被当前算子的输出数据重用。
[0078]
本发明实施例提供的内存分配优化方法,通过设置执行预设内存调整动作的规则,提高了内存分配的效率和效果。
[0079]
根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作包括内存预分配及内存释放;其中,在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
[0080]
预配置内存空间动作包括内存预分配及内存释放的动作。为保证预配置内存空间的效果,可以为内存预分配的过程设置如下规则:
[0081]
若数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为数据块分配内存,若当前层次的内存无法容纳数据块,则尝试低一层级的内存;若数据块的内存层级预先指定,则将数据块分配到预先指定的内存;
[0082]
对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为数据块分配内存,即从最小空闲空间开始遍历,直到找到可以容纳该数据块的空闲空间为止;
[0083]
任意两个相邻的空闲空间随时合并成一个空闲空间;
[0084]
为数据块分配的内存空间贴近空闲空间的边界(上界或下界均可);
[0085]
当空闲空间两端都有数据时,新分配在这一空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若空闲空间两端的数据的销毁时间相同,则新分配在这一空闲空间的数据块靠近当前层级内存区域的边界。这样早期销毁的数据空间可以与剩余空闲空间合并。
[0086]
本发明实施例提供的内存分配优化方法,通过设置内存预分配的规则,保障了预配置内存空间的效果,在此基础上进行内存调整,进一步提高了内存分配优化的效率和效果。
[0087]
根据本发明实施例提供的一种内存分配优化方法,所述预配置内存空间动作还包括内存盖写;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;在执行所述内存释放时,未被盖写的可重用空间在当
前所述算子结束时释放。
[0088]
预配置内存空间动作还可以包括内存盖写。在执行内存盖写时,一个算子中的输入数据的可重用空间可以被当前算子的中间数据和输出数据重用,中间数据的可重用空间能够被当前算子的输出数据重用。在执行内存释放时,未被盖写的可重用空间在当前算子结束时释放。
[0089]
本发明实施例提供的内存分配优化方法,通过设置预配置内存空间动作中内存盖写和内存释放的规则,可进一步提高内存优化的效率和效果。
[0090]
根据本发明实施例提供的一种内存分配优化方法,所述总耗时表示为:
[0091][0092]
其中,e(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
[0093]
以对应同一数据,将数据写入内存和从内存中读取数据发生在同一内存为例,t(aj(d))的表达式为:
[0094][0095]
其中,l
ib
表示从其他层级内存移入b类型内存访问的延迟,l
ob
表示从b类型内存移出到其他层级内存访问的延迟,w
ib
表示从其他层级内存移入b类型内存访问的带宽,w
ob
表示从b类型内存移出到其他层级内存访问的带宽,write表示将数据写入内存,read表示从内存中读取数据。其中,b表示一种内存类型,并非特指哪种内存类型。
[0096]
根据每一时间步上的动作,可以计算出这一时间步上消耗的时间。由于本发明关注于通过内存分配改善性能(计算速度),将内存状态的价值(可以作为学习的奖励)设为总耗时的倒数即可。
[0097]
将一个时间步上的所有读写任务计算出消耗时间之后相加,即可得到该时间步的总消耗时间。常量数据可以在计算前一次性加载,所以可以不计第一次加载时间。
[0098]
总耗时就是计算一个内存状态下完成数据的所有的读写任务需要的时间。在计算总耗时时,具体结合上式计算完成目标程序的读写任务的总耗时。
[0099]
上述计算总耗时的公式计算得到的时间只是对加载时间的估算,虽不精确代表总耗时,但总耗时的计算结果值可以用于内存状态价值的比较。
[0100]
本发明实施例提供的一种内存分配优化方法,通过给出计算内存状态s下完成目标程序的读写任务的总耗时的计算公式,进一步保障了内存分配的优化效果。
[0101]
根据本发明实施例提供的一种内存分配优化方法,所述方法还包括:在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
[0102]
在按照目标程序的算子的执行顺序依次遍历时间步的过程中,对于每一个算子,如果该算子的所有数据(包括输入、输出和中间结果)都在可访问内存最高层内存中,则认为该算子的数据块的内存分配不再需要优化,则跳过该时间步,准备下一时间步的处理。
[0103]
本发明实施例提供的内存分配优化方法,通过在获知时间步的数据块均在最高层内存中,则跳过当前时间步,进一步提高了内存优化的效率和效果。
[0104]
图2是本发明实施例提供的内存分配优化方法的流程示意图之二。如图2所示,该方法包括:
[0105]
通过执行预配置内存空间动作(通过预设的常规程序实现)生成初始内存分配状态后,按照算子的执行顺序遍历时间步;
[0106]
若在遍历某个时间步之前,获知该时间步中的数据块均分配在最高层内存(已是最优),则跳过该时间步,准备遍历处理下一时间步;
[0107]
在遍历时间步的过程中,遍历该时间步的所有数据块;
[0108]
在遍历数据块的过程中,通过遍历预设动作集,对该数据块执行预设动作集中的预设内存调整动作,若执行成功,则记录内存状态,用常规程序为后续时间步重新规划内存布局,计算并记录该状态的耗时和价值(价值为耗时的倒数);若动作没有执行成功,则跳过此动作,对数据块执行下一预设内存调整动作;若对该数据块已遍历完预设动作集,即对该数据块执行了预设动作集中的全部预设内存调整动作,则遍历当前时间步的下一数据块;
[0109]
若当前时间步的所有数据块遍历完成,判断当前时间步所在的局部最优段是否遍历完成;若当前时间步所在的局部最优段已遍历完成,则将内存状态更新为最优状态,即读写数据耗时最小、价值最大的状态,进而遍历下一时间步;若当前时间步所在的局部最优段尚未遍历完成,则开始遍历下一时间步;
[0110]
若所有的时间步均遍历完成,则结束。
[0111]
上述过程利用状态转移遍历状态,实际是从已知价值的状态出发,利用各种动作使状态转移到相邻状态,逐步对相邻状态计算价值,最终得到所有状态的价值的一种遍历过程。可以由下列伪代码阐释:
[0112][0113]
为了直观了解时间步上的内存分配状态,可以用时空图表示,横轴代表时间步,纵轴代表空间布局。
[0114]
图3是本发明实施例提供的内存分配优化方法中初始化的时空图。图4是本发明实施例提供的内存分配优化方法中优化完成后的时空图。图3和图4为针对同一目标程序的时空图对比。图3所示的时空图的总耗时cost time=111528.862924cycle,图4所示的时空图的总耗时cost time=100207.360000cycle,cycle表示时钟周期,可以看到总耗时有明显的减小。同样的序号表示同一个数据块的数据。
[0115]
下面对本发明实施例提供的内存分配优化装置进行描述,下文描述的内存分配优化装置与上文描述的内存分配优化方法可相互对应参照。
[0116]
图5是本发明实施例提供的内存分配优化装置的结构示意图。如图5所示,所述装置包括初始化模块10、内存分配优化模块20及优化结果获取模块30,其中:初始化模块10用于:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;内存分配优化模块20用于:按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存
状态作为当前的内存状态,完成所述时间步的遍历;优化结果获取模块30用于:响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0117]
本发明实施例提供的内存分配优化装置,通过按照算子的执行顺序遍历时间步,在遍历时间步时,通过遍历预设动作集对该时间步的数据块执行预设内存调整动作,对未遍历的时间步的数据块执行预配置内存空间动作,得到内存更新状态,通过比较更新的内存状态下完成目标程序的读写任务的总耗时与上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,获取耗时减小且耗时最少的更新的内存状态作为当前预设状态更新时间步遍历完成后的内存状态,能够实现不同程序的自适应内存分配优化。
[0118]
根据本发明实施例提供的一种内存分配优化装置,所述装置还包括预设状态更新时间步设置模块,在内存分配优化模块20执行之前,所述预设状态更新时间步设置模块用于:将所述目标程序的全部时间步分段得到局部最优段,将所述局部最优段的最后时间步作为所述预设状态更新时间步;其中,所述局部最优段包括至少一个所述时间步。。
[0119]
本发明实施例提供的内存分配优化装置,通过设置预设状态更新时间步为局部最优段的最后时间步,不仅提高了内存分配优化的灵活性,并且大大减少了计算量。
[0120]
根据本发明实施例提供的一种内存分配优化装置,内存分配优化模块20在用于为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作之后,还用于:响应于当前遍历的所述时间步不为预设状态更新时间步,进一步判断所述预设动作集中的所述内存调整动作是否执行完;若所述预设动作集中的所述内存调整动作尚未执行完,则执行下一所述内存调整动作;若所述预设动作集中的所述内存调整动作已经执行完,则进一步判断所述时间步的所述数据块是否遍历完;若所述时间步的所述数据块尚未遍历完,则对下一所述数据块进行遍历;若所述时间步的所述数据块已经遍历完,则开始对下一所述时间步进行遍历。
[0121]
本发明实施例提供的内存分配优化装置,通过响应于当前遍历的时间步不为预设状态更新时间步,则在内存调整动作未执行完时执行下一动作,在内存调整动作执行完时根据当前遍历的时间步的数据块是否遍历完,遍历下一数据块或遍历下一时间步,保证了内存分配优化的成功执行。
[0122]
根据本发明实施例提供的一种内存分配优化装置,在当前所述时间步遍历完成后,内存分配优化模块20还用于:响应于所述更新的内存状态下完成所述目标程序的读写任务的总耗时均大于或等于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,则保持所述上一所述预设状态更新时间步遍历完成后的内存状态,并开始对下一所述时间步进行遍历。
[0123]
本发明实施例提供的内存分配优化装置,通过响应于更新的内存状态下完成目标程序的读写任务的总耗时均大于或等于上一预设状态更新时间步遍历完成后的内存状态下完成目标程序的读写任务的总耗时,则保持上一预设状态更新时间步遍历完成后的内存状态,并开始对下一时间步进行遍历,保障了内存的分配朝着优化的方向发展。
[0124]
根据本发明实施例提供的一种内存分配优化装置,所述预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块;其中:所述同级移动数据块包括将数据块移
动到同级内存的另一个空闲位置;所述内存盖写包括通过盖写可重用空间放置数据块;所述跨层级移动数据块包括将数据块移动到其他层级的内存。
[0125]
本发明实施例提供的内存分配优化装置,通过设置预设内存调整动作包括同级移动数据块、内存盖写和跨层级移动数据块,通过尝试多样化的预设内存调整动作进一步优化内存分配。
[0126]
根据本发明实施例提供的一种内存分配优化装置,内存分配优化模块20还用于:在执行所述预设内存调整动作时,任意两个相邻的空闲空间随时合并成一个空闲空间;在执行所述同级移动数据块及跨层级移动数据块时,为所述数据块分配的内存空间贴近空闲空间的边界;在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写。
[0127]
本发明实施例提供的内存分配优化装置,通过设置执行预设内存调整动作的规则,提高了内存分配的效率和效果。
[0128]
根据本发明实施例提供的一种内存分配优化装置,所述预配置内存空间动作包括内存预分配及内存释放;其中,内存分配优化模块20在执行所述内存预分配时,遵循如下规则中的至少一种:若所述数据块的内存层级未预先指定,则按照内存层级由高到低的顺序尝试在当前层级内存为所述数据块分配内存;对于每一层级的内存,将空闲空间由小到大排序,按照空闲空间由小到大的顺序尝试在当前空闲空间为所述数据块分配内存;任意两个相邻的空闲空间随时合并成一个空闲空间;为所述数据块分配的内存空间贴近空闲空间的边界;当空闲空间两端都有数据时,新分配在所述空闲空间的数据块靠近更晚销毁的数据所在的内存空间的数据边界;若两端数据的销毁时间相同,则新分配在所述空闲空间的数据块靠近当前层级内存区域的边界。
[0129]
本发明实施例提供的内存分配优化装置,通过设置内存预分配的规则,保障了预配置内存空间的效果,在此基础上进行内存调整,进一步提高了内存分配优化的效率和效果。
[0130]
根据本发明实施例提供的一种内存分配优化装置,所述预配置内存空间动作还包括内存盖写;内存分配优化模块20在执行所述内存盖写时,所述算子的输入数据的可重用空间能够被当前所述算子的中间数据和输出数据的数据块盖写,所述算子的中间数据的可重用空间能够被当前所述算子的输出数据的数据块盖写;内存分配优化模块20在执行所述内存释放时,未被盖写的可重用空间在当前所述算子结束时释放。
[0131]
本发明实施例提供的内存分配优化装置,通过设置预配置内存空间动作内存盖写和内存释放的规则,可进一步提高内存优化的效率和效果。
[0132]
根据本发明实施例提供的一种内存分配优化装置,所述总耗时表示为:
[0133][0134]
其中,e(s)表示内存状态s下完成所述目标程序的读写任务的总耗时,n表示所述目标程序的时间步的数量,m表示内存状态s下第i个时间步上的所述读写任务的数量,t(aj(d))表示对d数据量执行aj动作所用的时间。
[0135]
本发明实施例提供的一种内存分配优化装置,通过给出计算内存状态s下完成目标程序的读写任务的总耗时的计算公式,进一步保障了内存分配的优化效果。
[0136]
根据本发明实施例提供的一种内存分配优化装置,内存分配优化模块20还用于:在所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步的过程中,若所述时间步的所述数据块均在最高层内存中,则跳过当前所述时间步。
[0137]
本发明实施例提供的内存分配优化装置,通过在获知时间步的数据块均在最高层内存中,则跳过当前时间步,进一步提高了内存优化的效率和效果。
[0138]
图6是本发明实施例提供的电子设备的结构示意图,如图6所示,该电子设备可以包括:处理器(processor)610、通信接口(communications interface)620、存储器(memory)630和通信总线640,其中,处理器610,通信接口620,存储器630通过通信总线640完成相互间的通信。处理器610可以调用存储器630中的逻辑指令,以执行内存分配优化方法,该方法包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0139]
此外,上述的存储器630中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0140]
另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的内存分配优化方法,该方法包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分
别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0141]
又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的内存分配优化方法,该方法包括:为目标程序的各个时间步的数据块执行预配置内存空间动作;其中,所述目标程序的算子分别对应于一个所述时间步,所述时间步的所述数据块的数量、大小和生存时段已知;按照所述目标程序的所述算子的执行顺序依次遍历所述时间步;在遍历所述时间步的过程中,遍历所述时间步的所述数据块;在遍历所述时间步的所述数据块的过程中,通过遍历预设动作集分别执行预设内存调整动作,响应于任一所述预设内存调整动作执行成功,为当前遍历的所述时间步的后续时间步的所述数据块执行所述预配置内存空间动作,响应于当前遍历的所述时间步为预设状态更新时间步,则记录当前更新的内存状态,计算并记录所述更新的内存状态下完成所述目标程序的读写任务的总耗时;所述时间步的所述数据块遍历完成后,响应于至少一个所述更新的内存状态下完成所述目标程序的读写任务的总耗时小于上一所述预设状态更新时间步遍历完成后的内存状态下完成所述目标程序的读写任务的总耗时,选取所述总耗时的最小值对应的所述更新的内存状态作为当前的内存状态,完成所述时间步的遍历;响应于所述按照所述目标程序的所述算子的执行顺序依次遍历所述时间步执行完毕,得到所述目标程序的各个所述时间步的所述内存状态。
[0142]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0143]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0144]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和
范围。
再多了解一些

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

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

相关文献