针对应用程序的反馈优化方法与流程

文档序号:16607730发布日期:2019-01-14 21:15阅读:343来源:国知局
针对应用程序的反馈优化方法与流程

本发明涉及计算机体系结构技术领域,尤其涉及针对应用程序的反馈优化技术。



背景技术:

当前,越来越多的处理器集成了simd(单指令多数据流)指令集,如何充分发挥处理器中simd功能部件的性能成为当前应用程序开发者的难题之一。与此同时,随着集成cache系统的芯片越来越多,应用程序如何良好地使用cache并且符合当前cache的设计模式,也是一个亟待解决的问题。针对这些问题,应用程序开发者在寻找最优的开发策略时,往往缺乏针对性的指导意见。

现有的针对应用程序的反馈优化工具往往只提示应用程序开发者当前应用程序有没有并行化,并不会分析应用程序的访存时间。如果应用程序的瓶颈在于访存,则并行化的计算指令对应用程序的执行效率没有任何帮助。profiling是一种当前常用的针对应用程序的反馈优化工具,其根据指令计数器的分析来展示应用程序的运行过程,然而,profiling对影响程序性能的主要因素没有进行分析。对于使用simd技术的应用程序而言,profiling也没有考虑到数据是否对齐的问题,以及数据不对齐对应用程序性能所产生的影响。另外,尽管profiling可以告知处理器中各级cache的缺失率,但其没有分析cache的缺失是否是拖慢应用程序性能的关键因素。

另外,现有的反馈优化方法无法估计优化后的应用程序的性能,应用程序开发者需要自己来预测性能的提升并且根据预测结果选择优化方法,这降低了应用程序优化的效率。



技术实现要素:

为解决上述现有技术中存在的问题,本发明提供一种针对应用程序的反馈优化方法,包括:

步骤1)根据执行应用程序的计算平台的体系结构特征,计算在所述计算平台上所述应用程序经编译得到的计算指令的执行时间以及执行所述应用程序所需的访存时间;

步骤2)比较所述计算指令的执行时间和所述访存时间的大小,根据比较结果反馈相应的应用程序优化方案。

上述方法中,执行所述应用程序的计算平台的处理器包括多级缓存。所述访存时间包括:在所述计算平台上所述应用程序经编译得到的访存指令的执行时间;执行所述应用程序时从主存到缓存的数据传输时间;以及执行所述应用程序时缓存之间的数据传输时间。

上述方法中,步骤2)包括:比较所述计算指令的执行时间和所述访存时间的大小;如果所述计算指令的执行时间大于所述访存时间,则反馈关于优化所述计算指令的执行时间的信息;如果所述计算指令的执行时间小于所述访存时间,则反馈关于优化所述访存时间的信息;如果所述计算指令的执行时间等于所述访存时间,则反馈关于优化所述计算指令的执行时间和所述访存时间的信息。

上述方法中,反馈关于优化所述计算指令的执行时间的信息包括:如果所述计算平台支持simd指令集,并且所述应用程序没有使用适用所述计算平台的simd技术,则反馈关于使用适用所述计算平台的simd技术来优化应用程序的信息;如果所述计算平台不支持simd指令集或者所述应用程序使用了适用所述计算平台的simd技术,则反馈关于减少所述应用程序中的计算的信息。

上述方法中,反馈关于优化所述访存时间的信息包括:

步骤i)如果所述计算平台支持simd指令集,所述应用程序使用了适用所述计算平台的simd技术并且所述应用程序的数据不满足所述simd指令集对数据的对齐要求,则反馈关于对齐所述应用程序的数据的信息;

步骤ii)反馈关于提高缓存重用性的信息。

上述方法还可以包括:反馈与所述应用程序优化方案相对应的应用程序性能的提升量。

上述方法中,步骤2)中包括:反馈关于使用适用所述计算平台的simd技术来优化应用程序的信息,反馈关于对齐所述应用程序的数据的信息,或者反馈关于提高缓存重用性的信息。所述方法还包括:将按所述应用程序优化方案修改的应用程序作为优化的应用程序,估算在所述计算平台上优化的应用程序经编译得到的计算指令的执行时间以及执行所述优化的应用程序所需的访存时间;计算在所述计算平台上所述优化的应用程序的执行时间,并且计算在所述计算平台上优化的应用程序的执行时间与在所述计算平台上优化前的应用程序的执行时间的差值;以及反馈所述差值。

上述方法中,根据下式计算在所述计算平台上应用程序的执行时间:

t(ppr)=max{t1,t2+…+ti+2}

其中,t(ppr)表示在所述计算平台上所述应用程序的执行时间;t1表示在所述计算平台上所述应用程序经编译得到的计算指令的执行时间;t2+…+ti+2(i为大于等于1的整数)表示执行所述应用程序所需的访存时间,其中t2表示在所述计算平台上所述应用程序经编译得到的访存指令的执行时间;ti+2表示执行所述应用程序时从主存到i级缓存的数据传输时间;当i≥2时,tj+1表示执行所述应用程序时从j级缓存到j-1级缓存的数据传输时间,其中2≤j≤i。

与现有技术相比,本发明的优点在于:

通过对应用程序建立性能模型,分析应用程序在各个阶段的时间开销,得出哪个阶段是应用程序的性能瓶颈,从而有针对性地给开发者反馈优化建议以及可以达到的性能提升效果。由此,减少了应用程序开发者使用不同方法去尝试优化应用程序的时间,提高了应用程序优化的效率。

附图说明

以下参照附图对本发明实施例作进一步说明。

图1是性能模型(ppr模型)的示意图;

图2是根据本发明一个实施例的针对应用程序的反馈优化方法的流程图;

图3是根据本发明一个实施例的反馈优化阶段的流程图。

具体实施方式

为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明提供的针对应用程序的反馈优化方法是基于性能模型(ppr模型)设计的,因此在描述本发明的具体实施例之前,首先对该ppr模型展开描述。参见图1,ppr模型将应用程序在计算平台(应理解,不同计算平台的体系结构特征也不同)上的执行过程划分为处理阶段和访存阶段,其中处理阶段指的是应用程序的指令在处理器核中的执行阶段,而访存阶段指的是应用程序的数据传输阶段。在处理阶段,ppr模型将处理器核中指令的执行时间划分为两个时间片——计算指令的执行时间t1以及访存指令的执行时间t2,如图1所示,t2即访问l1cache(一级缓存)所花费的时间(换句话说,t2是从l1cache到寄存器的数据传输时间);在访存阶段,ppr模型将各级缓存之间的数据传输时间以及最高级别的缓存与主存之间的数据传输时间看作独立的时间片。假设处理器有i级(i≥1)缓存,则ppr模型定义如下:

t(ppr)=max{t1,t2+…+ti+2}(1)

其中,t(ppr)表示应用程序的执行时间;t1表示处理器核中计算指令的执行时间;t2+…+ti+2是访存时间,其中t2表示处理器核中访存指令的执行时间;ti+2表示数据从主存传输到i级缓存的时间;当i≥2时,tj+1表示数据从j级缓存传输到j-1级缓存的时间(其中2≤j≤i)。

以图1所示的含有三级缓存的处理器(如intele5-2680v3)为例,处理器核中计算指令的执行时间为t1,数据从l1cache传输到寄存器的时间定义为t2,数据从l2cache(二级缓存)传输到l1cache的时间定义为t3,数据从l3cache(三级缓存)传输到l2cache的时间定义为t4,并且数据从主存传输到l3cache的时间定义为t5,则根据公式(1),应用程序的执行时间表示为t(ppr)=max{t1,t2+t3+t4+t5}。

基于上述的ppr模型,根据本发明的一个实施例,提供一种针对应用程序的反馈优化方法,该方法包括ppr模型建模阶段、反馈优化阶段以及性能提升预计阶段。下文将参照图2具体描述针对应用程序的反馈优化方法的这三个阶段,在本实施例中,以包括三级缓存的处理器为例展开描述。

步骤100.ppr模型建模阶段

在本阶段,根据执行应用程序的计算平台(后文简称当前计算平台)的体系结构特征,分析应用程序源代码以及应用程序在当前计算平台上经编译得到的指令,从而对应用程序的处理阶段和访存阶段建模,进而构建出在当前计算平台上应用程序的ppr模型。

具体地,对应用程序的处理阶段建模包括:计算在处理器核中应用程序经编译得到的计算指令的执行时间t1和应用程序经编译得到的访存指令的执行时间t2。以t1为例,对于应用程序经编译得到的每种计算指令,将该计算指令在当前计算平台上的执行时间乘以该计算指令在应用程序中的执行次数,得到该计算指令的总的执行时间,将应用程序每种计算指令的总的执行时间相加得到t1。本领域技术人员应理解,通过类似的方法可以计算得到t2。

对应用程序的访存阶段建模包括:计算应用程序的数据从l2cache传输到l1cache的时间t3,应用程序的数据从l3cache传输到l2cache的时间t4,以及应用程序的数据从主存传输到l3cache的时间t5。具体地,分析应用程序的源代码,获得访存指令并基于访存指令构建需要访问的数据序列;将需要访问的数据序列划分为规则访存序列(即连续访存序列)和非规则访存序列(即随机访存序列),预测规则访存序列在各级缓存之间以及主存与最高级别的缓存之间传输的数据量,而对于非规则访存序列则首先去除重用的不必要的数据传输,并进而预测在各级缓存之间以及主存与最高级别的缓存之间传输的数据量,从而得到l2cache传输到l1cache的数据量,l3cache传输到l2cache的数据量以及主存传输到l3cache的数据量;随后,根据当前计算平台上l2cache与l1cache之间的最大访问带宽、l3cache与l2cache之间的最大访问带宽以及l3cache(即最高级别的缓存)与主存之间的最大访问带宽,得到数据从l2cache传输到l1cache的时间t3,数据从l3cache传输到l2cache的时间t4,以及数据从主存传输到l3cache的时间t5。其中,将从l2cache传输到l1cache的数据量除以l2cache与l1cache之间的最大访问带宽得到t3,并且类似地计算出t4,t5。

在计算出t1-t5后,根据公式(1)构建在当前计算平台上应用程序的ppr模型:t(ppr)=max{t1,t2+t3+t4+t5},其中,t1是计算指令的执行时间,t(ppr)是应用程序在当前计算平台上的执行时间,t2+t3+t4+t5是应用程序的访存时间。

步骤200.反馈优化阶段

在本阶段,根据构建的ppr模型,分析影响应用程序性能(执行时间)的最大因素,并且结合当前计算平台的体系结构特征,向应用程序开发者反馈相应的应用程序优化方案。其中,如果t1>t2+t3+t4+t5,即处理器核中计算指令的执行时间是影响应用程序性能的最大因素,则向开发者反馈关于优化计算指令的执行时间的信息;如果t1<t2+t3+t4+t5,即应用程序的访存时间是影响应用程序性能的最大因素,则向开发者反馈关于优化访存时间的信息;如果t1=t2+t3+t4+t5,即处理器核中计算指令的执行时间或者应用程序的访存时间都有可能是影响应用程序性能的最大因素,则向开发者反馈关于优化计算指令的执行时间和优化访存时间的信息。下面参照图3,详细描述反馈优化阶段的各个子步骤。

步骤210.判断t(ppr)是否等于t1(即t1≥t2+t3+t4+t5),如是则执行步骤220,否则(即t1<t2+t3+t4+t5)执行步骤230。

步骤220.向开发者反馈关于优化计算指令的执行时间的信息。具体地,首先判断当前计算平台是否支持simd(例如sse、avx、avx2等)指令集,如果支持则分析应用程序(例如分析应用程序源代码),判断其是否使用了相应的simd技术,如果没有使用相应的simd技术(即适用当前计算平台的simd技术)则向开发者反馈关于当前计算平台支持的simd指令集的信息,以及关于使用相应的simd技术来优化应用程序的信息;如果当前计算平台不支持simd指令集或者支持但应用程序已经使用了相应的simd技术,则向开发者反馈关于减少应用程序中的计算的信息,开发者可以通过优化算法来减少计算,从而降低处理器核中计算指令的执行时间。

如果t1>t2+t3+t4+t5,则结束反馈优化过程;如果t1=t2+t3+t4+t5,则继续执行步骤230。

步骤230.如果当前计算平台支持simd指令集并且应用程序使用了相应的simd技术,则执行步骤240;如果当前计算平台不支持simd指令集或者应用程序没有使用相应的simd技术,则执行步骤260。

步骤240.判断应用程序的数据是否满足(计算平台所支持的)simd指令集的对齐要求,如果不满足,则执行步骤250,否则执行步骤260。

具体地,根据应用程序经编译后得到的指令分析是否使用了simd指令,如果没有使用simd指令(例如使用了其他指令集,如x86、mips、arm等),则表示应用程序的数据是非对齐的(即不满足simd指令集对数据的对齐要求,例如simd指令集要求访问的数据是16字节对齐的,但应用程序的数据的首地址不能被16字节整除),并且执行步骤250;否则(即应用程序的数据是对齐的),执行步骤260。

步骤250.反馈开发者关于对齐应用程序的数据的信息。其中,还要向开发者反馈当前计算平台所支持的simd指令集对数据的对齐要求,使得用户能够根据该对齐要求来对齐数据,从而降低处理器核中访存指令的执行时间。

具体地,可以向开发者反馈关于更改应用程序的数据存储的信息,以使开发者相应地修改应用程序的数据存储,从而使应用程序中的数据能够对齐访问。另外,也可以向开发者反馈关于增加应用程序的数据存储的对齐副本的信息。

步骤260.向开发者反馈关于提高缓存重用性的信息。

具体地,可以向开发者反馈关于使用cachetile技术来提高缓存重用性的信息。其中,cachetile技术通过在保证计算正确性的前提下改变应用程序中数据的使用顺序,使得同一区域中的数据被连续访问,从而降低cachemiss(cache未命中),提高各级缓存的重用性(即降低t3-t5)。

步骤300.性能提升预计阶段

如果在上一阶段(反馈优化阶段)中向应用程序的开发者反馈了一些具体的优化方法,例如,向开发者反馈simd指令集信息以及使用相应的simd技术来优化应用程序,或者向开发者反馈对齐要求以及对齐应用程序的数据,或者向开发者反馈具体的提高缓存重用性的技术,则在本阶段可以估算出开发者根据反馈修改应用程序后,修改后的应用程序的执行时间。

例如,如果当前计算平台支持sse指令集并且向开发者反馈使用sse技术来优化应用程序,则对于经sse技术优化后的应用程序来说,其编译后得到的计算指令在处理器核中的执行时间t1’可以减少到t1的约1/4;如果当前计算平台支持avx或avx2指令集,并且向开发者反馈使用avx或avx2技术来优化应用程序,则优化后的应用程序的t1’可以减少到t1的约1/8。

再例如,如果当前计算平台支持simd指令集,并且应用程序使用了相应的simd技术,但是其数据非对齐,如果开发者根据反馈的关于对齐数据的信息相应修改了应用程序(对齐了数据),则修改后的应用程序经编译后得到的访存指令在处理器核中的执行时间t2’可以减少到t2的1/2。

另外,如果反馈开发者使用cachetile来提高缓存重用性,则可以根据cachetile技术的原理相应地计算出t3’,t4’,t5’。

在估算出t1’,t2’,t3’,t4’或者t5’之后,根据公式(1),可以得到修改后的应用程序的执行时间t’(ppr)=max{t1’,t2’+t3’+t4’+t5’}。其中,没有反馈需要优化的时间片不变。

计算修改后的应用程序的执行时间和应用程序原先的执行时间的差值,即t(ppr)-t’(ppr),并且将该差值反馈给应用程序的开发者,该差值用于度量应用程序性能的提升。

在上文描述的实施例中,如果t1≤t2+t3+t4+t5,则会反馈开发者关于提高各级缓存的信息。而在另一个实施例中,可以进一步比较t3,t4,t5的值,得到其中的最大者(如t3),接着,仅反馈开发者关于提高与最大者对应的两级缓存中较低级的缓存(例如l1cache)的重用性。

此外,尽管上文以包含三级缓存的处理器作为执行应用程序的处理器,并且依此详细描述了针对应用程序的反馈优化方法,然而应该理解,本发明提供的反馈优化方法同样适用于包含一级缓存、二级缓存、四级缓存甚至更高级别的缓存的处理器,其中四级缓存例如是edram、mcdram等。其中,在仅包含一级缓存的情况下,访存时间为处理器核中访存指令的执行时间与主存到一级缓存的数据传输时间之和。

应注意到一些示例性方法被描绘为流程图。虽然流程图将操作表述为顺序执行,但可以理解的是,许多操作可以并行、同时或同步地执行。另外,可以重新排列操作的顺序。处理可以在操作完成时终止,但是也可以具有并未包括在图中或实施例中的另外的步骤。

应理解,软件实现的示例性实施例通常在一些形式的程序存储介质上进行编码或者在一些类型的传输介质上实现。程序存储介质可以是任意的非瞬态存储介质,诸如磁盘(例如,软盘或硬盘)或光盘(例如,紧凑盘只读存储器或“cdrom”),并且可以是只读的或者随机访问的。类似地,传输介质可以是双绞线、同轴线缆、光纤,或者本领域已知的一些其它适用的传输介质。

虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所做出的各种改变以及变化。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1