一种数据预读取的优化方法和装置

文档序号:948179 发布日期:2020-10-30 浏览:4次 >En<

阅读说明:本技术 一种数据预读取的优化方法和装置 (Data pre-reading optimization method and device ) 是由 李龙翔 刘羽 崔坤磊 张敏 杨振宇 于占乐 王倩 于 2020-07-17 设计创作,主要内容包括:本发明公开了一种数据预读取的优化方法和装置,方法包括:在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取。本发明能够获得PSD和PSP的最优预读取优化结果值,进而提高CFD求解器的运行速度。(The invention discloses an optimization method and a device for data pre-reading, wherein the method comprises the following steps: collecting operation characteristic information of each function in the CFD program during the operation of the CFD program, analyzing the operation characteristic information to determine a function to be optimized and writing the function to an analysis log; aiming at each function to be optimized in the analysis log, taking the pre-reading scheduling distance and the pre-reading scheduling position as states, and taking the optimization result change as an action construction action value function; aiming at each action value function, performing iterative training by using a reinforcement learning algorithm and taking the single-step speed of a CFD solver as reward until the action value function is converged; determining an optimal pre-fetch scheduling distance and pre-fetch scheduling location to perform data pre-fetching in the cache according to the corresponding state, action, and converged action cost function. The invention can obtain the optimal pre-reading optimization result values of the PSD and the PSP, thereby improving the running speed of the CFD solver.)

一种数据预读取的优化方法和装置

技术领域

本发明涉及机器学习领域,更具体地,特别是指一种数据预读取的优化方法和装置。

背景技术

在CFD(计算流体动力学)等高性能软件中,由于计算过程包含大量稀疏矩阵计算,在实际运行过程中一般对内存带宽需求较高。运行性能除了受处理器性能影响,同时还受到数据访问速度的限制。在大部分CFD软件中,稀疏矩阵数据结构被广泛采用,因此不可避免的产生大量的不连续数据访问,使得对内存访问需求极高。在过去十年中,分层缓存子系统、非均匀内存、同步多执行序和乱序执行等技术的应用和发展,使得现代处理器的性能和计算能力提升了数倍以上,但是CPU与内存之间数据访问速度却增长缓慢。这使得目前在部分高性能应用软件中,内存带宽读取速度逐渐成为了主要瓶颈。

针对内存中数据读取优化,目前主要有两种方法:(1)充分利用缓存,将大部分访问数据放入内存中;(2)使用缓存技术,有效地利用最大内存带宽掩盖内存访问造成的延迟。由于处理器工艺水平和大小限制,目前主流处理器中缓存大小有限,针对大部分应用来说不可能将所有使用数据放入缓存中,并且随着应用软件处理问题规模随着处理器性能逐年增加,使用的数据也呈指数形式增长,而处理器缓存大小增长缓慢,因此方法(1)实现难度较大。方法(2)主要是通过软件预读取技术实现。数据预读取是微架构体系中增强功能,通过有效利用内存读写带宽,将需要使用的数据提前放入处理器的高速缓存中。通过与软件优化相结合,对于大部分应用程序的性能都可以得到显著提高,因此方法(2)是目前主要使用方法。对于应用软件来说,在过去以主频提升为主的时代,可以不需要对代码进行任何修改,就可以在新平台上获得更高的性能,但是在使用预读取技术对软件优化时,却缺少一种统一的模式,这与预读取优化的方式和实现方法有关。采用预读取方法对软件进行优化时,需要确定以下相关参数:(1)预读取数据调度的距离(PSD)。PSD单位为指令个数,当PSD要足够大时才能使访问内存的延迟被其他指令的执行时间掩藏,但是PSD的值过大时会同时造成缓存污染,并且由于其他指令数据对缓存占用导致预读取的数据丢失。并且针对不同处理器平台和不同数据,指定预读取指令的PSD最优值会发生变化;(2)预读取指令的位置(PSP)。预读取指令并非对应用性能没有影响,频繁使用预读取指令也会导致应用性能降低。此外,必须将预读取指令与计算指令交叉,并且指令的位置对于优化性能也有较大影响。可以看出,预读取优化的结果对于平台和应用软件处理的数据有极高的依赖性,并且对于PSD和PSP的最优值无法通过理论公式获得,必须采用测试方法,因此使用预读取方法进行软件优化的工作量极大。

针对现有技术中PSD和PSP的优化工作量大、难以实施的问题,目前尚无有效的解决方案。

发明内容

有鉴于此,本发明实施例的目的在于提出一种数据预读取的优化方法和装置,能够获得PSD和PSP的最优预读取优化结果值,进而提高CFD求解器的运行速度。

基于上述目的,本发明实施例的第一方面提供了一种数据预读取的优化方法,包括执行以下步骤:

在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;

针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;

针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;

根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取。

在一些实施方式中,各函数的运行特征信息包括函数运行时间和函数缓存命中率;分析运行特征信息以确定待优化函数包括:将函数运行时间高于预定值和/或函数缓存命中率低于预定值的函数确定为待优化函数;写入分析日志包括:将每个待优化函数和相关联的变量写入分析日志。

在一些实施方式中,方法还包括:在优化多个待优化函数时,将多个待优化函数按其函数运行时间排序,先将函数运行时间更高的待优化函数优化到其函数运行时间不高于预定值之后再优化函数运行时间更低的待优化函数。

在一些实施方式中,针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数包括:

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的数值对的集合构成优化结果向量作为状态;

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的变化动作集构成优化结果变化作为动作。

在一些实施方式中,针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛包括:

初始化动作价值函数并根据优化结果向量设置动作价值函数的当前状态;

从变化动作集选择一个动作对当前状态执行,以获得奖励和下一状态,根据奖励和下一状态更新动作价值函数并将使用下一状态覆盖当前状态;

重复执行上一步骤直到动作价值函数收敛。

在一些实施方式中,根据奖励和下一状态更新动作价值函数包括:

Q(s,α)=(1-β)·Q(s,α)+β[R+γmaxαQ(s′,α)

其中s为当前状态,α为动作,Q(s,a)为动作价值函数,β为学习率,R为奖励,γ为折扣因子,s′为下一状态,maxαQ(s′,α)为下一状态所采用动作的最大收敛函数值。

在一些实施方式中,根据优化结果向量设置动作价值函数的当前状态包括:设置预读取调度距离为零,设置预读取调度位置为待优化函数的缓存命中率最低所发生位置。

本发明实施例的第二方面提供了一种数据预读取的优化装置,包括:

处理器;和

存储器,存储有处理器可运行的程序代码,程序代码在被运行时依次执行以下步骤:

在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;

针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;

针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;

根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取。

在一些实施方式中,针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数包括:

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的数值对的集合构成优化结果向量作为状态;

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的变化动作集构成优化结果变化作为动作。

在一些实施方式中,针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛包括:

初始化动作价值函数并根据优化结果向量设置动作价值函数的当前状态;

从变化动作集选择一个动作对当前状态执行,以获得奖励和下一状态,根据奖励和下一状态更新动作价值函数并将使用下一状态覆盖当前状态,其中动作价值函数Q(s,α)=(1-β)·Q(s,α)+β[R+γmaxαQ(s′,α)],其中s为当前状态,α为动作,Q(s,a)为动作价值函数,β为学习率,R为奖励,γ为折扣因子,s′为下一状态,maxαQ(s′,α)为下一状态所采用动作的最大收敛函数值;

重复执行上一步骤直到动作价值函数收敛。

本发明具有以下有益技术效果:本发明实施例提供的数据预读取的优化方法和装置,通过在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取的技术方案,能够获得PSD和PSP的最优预读取优化结果值,进而提高CFD求解器的运行速度。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的数据预读取的优化方法的流程示意图;

图2为本发明提供的数据预读取的优化方法中Q-Learning算法的动作价值函数迭代循环示意图;

图3为本发明提供的数据预读取的优化方法中Q-Learning算法的动作价值函数迭代流程示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

基于上述目的,本发明实施例的第一个方面,提出了一种能够获得PSD和PSP的最优预读取优化结果值的优化方法的一个实施例。图1示出的是本发明提供的数据预读取的优化方法的流程示意图。

所述的数据预读取的优化方法,如图1所示,包括执行以下步骤:

步骤S101:在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;

步骤S103:针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;

步骤S105:针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;

步骤S107:根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取。

本发明实施例使用强化学***台获得最优的运行性能,从而有效地提高CFD等高性能软件的运行速度。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

在一些实施方式中,各函数的运行特征信息包括函数运行时间和函数缓存命中率;分析运行特征信息以确定待优化函数包括:将函数运行时间高于预定值和/或函数缓存命中率低于预定值的函数确定为待优化函数;写入分析日志包括:将每个待优化函数和相关联的变量写入分析日志。

在一些实施方式中,方法还包括:在优化多个待优化函数时,将多个待优化函数按其函数运行时间排序,先将函数运行时间更高的待优化函数优化到其函数运行时间不高于预定值之后再优化函数运行时间更低的待优化函数。

在一些实施方式中,针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数包括:

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的数值对的集合构成优化结果向量作为状态;

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的变化动作集构成优化结果变化作为动作。

在一些实施方式中,针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛包括:

初始化动作价值函数并根据优化结果向量设置动作价值函数的当前状态;

从变化动作集选择一个动作对当前状态执行,以获得奖励和下一状态,根据奖励和下一状态更新动作价值函数并将使用下一状态覆盖当前状态;

重复执行上一步骤直到动作价值函数收敛。

在一些实施方式中,根据奖励和下一状态更新动作价值函数包括:

Q(s,α)=(1-β)·Q(s,α)+β[R+γmaxαQ(s′,α)]

其中s为当前状态,α为动作,Q(s,a)为动作价值函数,β为学习率,R为奖励,γ为折扣因子,s′为下一状态,maxαQ(s′,α)为下一状态所采用动作的最大收敛函数值。

在一些实施方式中,根据优化结果向量设置动作价值函数的当前状态包括:设置预读取调度距离为零,设置预读取调度位置为待优化函数的缓存命中率最低所发生位置。

下面根据具体实施例进一步阐述本发明的具体实施方式。

热点函数分析模块负责识别和监控应用软件运行过程中热点函数及函数运行过程缓存命中率等微架构特征,对程序中函数运行时间和各函数运行特征进行分析,包括收集函数内各语句产生的不同层级缓存的未命中等指标。根据监控函数性能分析结果,判断出需要优化的函数及对应需要进行预读取的变量,如最终将耗时较多的函数与其中出现缓存未命中较高的计算变量作为优化对象等,输出和记录分析日志文件。

预读取优化训练模块通过输入软件对应的性能分析日志结果,使用强化学习方法训练对应函数中预读取优化语句位置PSP和对应PSD最优值。将需要进行预读取优化变量对应的PSP和PSD组成向量作为状态,将改变每个单元所属的区域作为动作以构建动作价值函数;将CFD求解器在集群上单步的运行速度作为奖励,根据所述奖励采用强化学习算法对所述动作价值函数进行迭代计算,以得到收敛函数值,从而根据所述状态、动作和收敛函数值实现函数的预读取优化。强化学习算法使用Q-Learning算法,状态集为所有优化变量可能的PSP和PSD值组成,并使用保存优化结果向量ps作为状态,向量中各个元素的含义为

ps=[PSP1,PSD1PSP2,PSD2,…,PSPN,PSDN]

其中下标i代表优化函数内变量的编号,PSP为预读取语句***后的行号,从函数体起始位置开始计算。在优化单个函数时,PSP的值不考虑***的预读取语句,当个多个预读取语句***相同位置时,按照变量编号顺序***。另外,优化函数顺序按照运行时间占比从多到少的顺序逐个进行优化,当运行时间占比低于用户指定阈值时不再进行优化。在每个函数的优化过程中,使用强化学习训练过程如图3所示。

所有变量的PSD和PSP变化构成动作集A;当根据所述奖赏采用Q-Learning算法对所述动作价值函数进行迭代计算时,包括:

1)初始化所述动作价格的函数值,设置所述动作价值函数的当前状态;根据所述当前状态和策略,从所述动作集中选择一个动作;

2)执行所述动作得到奖励和下一个状态;

3)根据所述奖励和所述下一个状态,对动作价值函数进行更新;

4)随后将下一个所述状态作为当前状态,重复迭代直到达到所述状态集的终止状态。

在使用所述奖励和所述下一个状态,对动作价值函数进行更新时,更新后的动作价值函数的计算公式为:

Q(s,α)=(1-β)·Q(s,α)+β[R+γmaxαQ(s′,α)]

s=s′

其中s为当前状态,α为动作,Q(s,a)为动作价值函数,表示当前状态s执行动作α所获得的收敛函数值,β为学习率,R为奖励,γ为折扣因子,s′为下一状态,maxαQ(s′,α)为下一状态所采用动作的最大收敛函数值。

初始状态S_0采用如下方法生成:

1)设置所有变量预读取语句的PSD值为0;

2)所有变量预读取语句的PSP值为包含所有变量语句中,缓存未命中最高的语句位置。

将优化后的CFD软件在集群中运行速度作为奖励R,根据软件处理特定数据所用的单步运行平均时间ΔT进行计算:

R=1/ΔT

根据所述奖励采用强化学习算法对所述动作价值函数进行迭代计算,以得到收敛函数值。在执行一个动作后,可以收集CFD软件单步运行速度,将此作为从环境中获得奖励R。根据当前状态和策略执行动作,同时检测奖励和下一个状态,然后根据下一个状态的最大收敛函数值和奖励对状态和收敛函数值能够更新。为保证并行区域划分体系可以搜索所有可能的动作,可以使用ξ贪婪策略进行搜索。

在图2中显示了在Q-Learning算法中使用动作价值函数的迭代过程,其中环境包含了CFD求解器和实际运行速度,对于每次训练后的结果返回求解器单步运行效率作为奖励,根据所述状态、动作和收敛函数修改预读取语句的PSP和PSD值。一个状态和一个动作与收敛函数值对应。通过上述方式,可以针对CFD求解器运行特点和使用平台的硬件特征获得最优的预读取优化结果,进而提高CFD求解器运行速度。

从上述实施例可以看出,本发明实施例提供的数据预读取的优化方法,通过在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取的技术方案,能够获得PSD和PSP的最优预读取优化结果值,进而提高CFD求解器的运行速度。

需要特别指出的是,上述数据预读取的优化方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于数据预读取的优化方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。

基于上述目的,本发明实施例的第二个方面,提出了一种能够获得PSD和PSP的最优预读取优化结果值的优化装置的一个实施例。数据预读取的优化装置包括:

处理器;和

存储器,存储有处理器可运行的程序代码,程序代码在被运行时依次执行以下步骤:

在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;

针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;

针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;

根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取。

在一些实施方式中,针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数包括:

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的数值对的集合构成优化结果向量作为状态;

使用待优化函数的所有可能的预读取调度距离和预读取调度位置的变化动作集构成优化结果变化作为动作。

在一些实施方式中,针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛包括:

初始化动作价值函数并根据优化结果向量设置动作价值函数的当前状态;

从变化动作集选择一个动作对当前状态执行,以获得奖励和下一状态,根据奖励和下一状态更新动作价值函数并将使用下一状态覆盖当前状态,其中动作价值函数Q(s,α)=(1-β)·Q(s,α)+β[R+γmaxαQ(s′,α)],其中s为当前状态,α为动作,Q(s,a)为动作价值函数,β为学习率,R为奖励,γ为折扣因子,s′为下一状态,maxαQ(s′,α)为下一状态所采用动作的最大收敛函数值;

重复执行上一步骤直到动作价值函数收敛。

从上述实施例可以看出,本发明实施例提供的数据预读取的优化装置,通过在CFD程序运行期间采集CFD程序中各函数的运行特征信息,并分析运行特征信息以确定待优化函数并写入分析日志;针对分析日志中的每个待优化函数,将其预读取调度距离和预读取调度位置作为状态、将其优化结果变化作为动作构建动作价值函数;针对每个动作价值函数,使用强化学习算法以CFD求解器的单步速度作为奖励进行迭代训练,直到动作价值函数收敛;根据对应的状态、动作、和收敛的动作价值函数确定最优的预读取调度距离和预读取调度位置以在缓存中执行数据预读取的技术方案,能够获得PSD和PSP的最优预读取优化结果值,进而提高CFD求解器的运行速度。

需要特别指出的是,上述数据预读取的优化装置的实施例采用了所述数据预读取的优化方法的实施例来具体说明各模块的工作过程,本领域技术人员能够很容易想到,将这些模块应用到所述数据预读取的优化方法的其他实施例中。当然,由于所述数据预读取的优化方法实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于所述数据预读取的优化装置也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:提供异构命名空间的存储设备及其在数据库中的应用

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类