MPT模型节点频率预测方法与流程

文档序号:23004593发布日期:2020-11-20 11:54阅读:713来源:国知局
MPT模型节点频率预测方法与流程

本发明涉及主存储器的cache行冲突预测方法,具体的说它是一种在多核处理器环境下,对并发任务的共享cache性能分析及预测。



背景技术:

相对于不断提升的处理器速度,主存储器的速度问题越来越成为计算机系统的性能瓶颈。分级存储模型及cache的提出,虽然能够在一定程度上消除主存速度比较慢的影响;然而,与主存容量相比较,cache容量小,由此造成的cache行冲突(cacheconfliction)限制了处理器性能的提高。

cache命中率是计算机系统性能的重要影响因素,目前已经采用体系结构或编译器预测与排布两种方式提高cache的命中率。文献[1,2]提出增加硬件追踪模块重新定位cache的指令序列来改进cache的命中率,同时降低存储子系统(memorysubsystem)的能耗。由于程序代码的空间(spatial)和时间(temporal)局部性(locality),文献[2,3,4,5]提出了编译器的启发式和profile指导的编译器静态分支预测与代码排布方案,以进一步优化代码序列,提高cache的命中率。节点频率(nodefrequencies,nf)是编译器静态预测的重要参数,文献[4,6,7,9]基于传统的启发式方法预测并计算节点运行的频率nf,而文献[3,8]则采纳profile指导的,通过实际测试获取nf的值。然而,基于ball-larus的传统静态预测方法采用固定的启发式分支预测技术fhbp[6],无法准确的区分不同程序的预测差异;基于测试的profile方式虽然能够获得某次测试准确的预测结果,但需要程序多次运行,如果程序输入改变,预测很可能会失败;文献[10,11,12]虽然通过markov状态描述程序基本块节点,但基于nf的预测方法仍然沿袭fhbp,通过markov矩阵构建线性方程求解nf,称之为markov线性方程方法(mle)。以上现有技术均无法真正提高cache命中率,减少cache冲突产生的概率。

为此,申请人在其发表的论文markovparameterstuningpredictiontoimprovecachehitrate,benbinchen,donghuiguo,int.j.internetprotocoltechnology,vol.8,no.4,2014,为提高内存子系统的平均访问时间,提出了一种基于马尔可夫参数调整模型的预测方法以提高缓存命中率。然而该文章中的马尔可夫参数调整模型是采用现有技术的已知公式所推导,其获得的缓存命中率不够高,仍有提高的空间。本发明是对该论文的马尔可夫参数调整模型所提出的进一步的改进方案。

此外,本发明中所提及的文献列表如下:

文献1:luoh.,weis.,andguod.thedynamicrelocationcacheanditsenergyconsumptionmodelforlowpowerprocessor[c]inproc.ofieeeinternationalconferenceofanti-counterfeiting,securityandidentification(asid),ieeepress,2011:123-126;

文献2:huj.s.,vijaykrishnann.,irwinm.j.,andkandemirm.usingdynamicbranchbehaviorforpower-efficientinstructionfetch[c]inproc.ofieeecomput.soc.annu.symp.vlsi,2003:127-132;

文献3:pettisk.,hansenr.c.,anddavidsonj.w.profileguidedcodepositioning[j].acmsigplannotices,2004,39(4):398-411;

文献4:ramireza.,larribaj.l.,andvalerom.softwaretracecache[j].ieeetransactionsoncomputers,2005,54(1):22-35;

文献5:hashemia.h.,kaelid.r.,andcalderb.efficientproceduremappingusingcachelinecoloring[j].acmsigplannotices,1997,32(5):171-182;

文献6:ballt.,andlarusj.r.branchpredictionforfree[j]acmsigplannotices,1993,28(6):300-313;

文献7:wuy.,andlarusj.r.staticbranchfrequencyandprogramprofileanalysis[c]inproc.ofthe27thannualinternationalsymposiumonmicroarchitecture,ieeepress,1994:1-11;

文献8:wagnert.a.,maverickv.,grahams.l.,andharrisonm.a.accuratestaticestimatorsforprogramoptimization[j]acmsigplannotices,1994,29(6):85-96;

文献9:smithj.e.astudyofbranchpredictionstrategies[c].inproc.ofthe8thannualsymposiumoncomputerarchitecture(isca),ieeecomputersocietypress,1981:135-148;

文献10:ramamoorthyc.v.analysisofcomputationalsystems:discretemarkovanalysisofcomputerprograms[c].inproc.ofthe196520thnationalconference,1965:386-392;

文献11:lis.z.,luoh.y.,lix.c.,wongw.e.,andguod.h.analysisofsoftwarespecificationsbasedonstatisticsofmarkovchain[c].inproc.ofieeeinternationalconferenceofanti-counterfeiting,securityandidentification(asid),ieeepress,2013:1-5

文献12:lunterg.hmmoc-acompilerforhiddenmarkovmodels[j].bioinformatics,2007,23(18):2485-2487

文献13:josephd.,andgrunwaldd.prefetchingusingmarkovpredictors[j].ieeetransactionsoncomputers,1999,48(2):121-133;

文献14:embeddedccompilersandtoolsforsoftwaredevelopment:hi-techsoftware[eb/ol],http://www.htsoft.com/。



技术实现要素:

在下文中给出了关于本发明实施例的简要概述,以便提供关于本发明的某些方面的基本理解。应当理解,以下概述并不是关于本发明的穷举性概述。它并不是意图确定本发明的关键或重要部分,也不是意图限定本发明的范围。其目的仅仅是以简化的形式给出某些概念,以此作为稍后论述的更详细描述的前序。

根据本申请的一个方面,提供一种mpt模型节点频率预测方法,包括:

由编译器通过profile方法获取程序(一个代码基本块称为程序)的执行信息,该执行信息包括程序控制流图以及程序的边概率,将程序的边概率记为节点频率nf;

将程序控制流图cfg模型改造为满足markov性质的markov模型,并根据该markov模型建立mpt模型,该mpt模型利用markov稳定态计算nf、分析节点状态及分支概率的关系,并动态调整mpt模型参数以表征不同参数对程序nf频率的影响,然后编译器可根据mpt模型的输出结果重新安排程序在存储系统中的代码排布顺序,将频繁执行的程序与不频繁执行的程序分隔开来。该步骤利用程序的空间局部性和时间局限性使得频繁执行的程序能够大部分驻留在cache中,以提高cache命中率,该方法无需修改硬件就可以提高cache命中率,并达到改善系统性能的目的。

由于节点频率(即程序的边概率)决定了程序被执行的概率,因此分析节点频率可提高基于控制流图的nf预测的准确性。

编译器根据执行信息静态分析程序执行的路径,然后重新安排程序在存储系统中的排布顺序具体是,将程序控制流图模型化为markov模型,并根据该markov模型建立静态markov参数可调模型,将该静态markov参数可调模型记为mpt模型,该mpt模型用以分析节点频率(nf,nodefrequencies)、节点状态及分支概率的关系,然后编译器根据mpt模型的输出结果重新安排程序在存储系统中的排布顺序,以提高节点频率预测的准确性。一个分支if,else节点的频度(节点频率(nf,nodefrequencies)、节点状态及分支概率的关系),决定了该分支被执行的概率,根据这个概率,编译器能够进行分支预测以及程序基本块的重新组织基本块排序。

其中,将程序控制流图模型化为markov模型,并根据该markov模型建立mpt模型,过程如下:根据程序控制流图cfg首次构造cfg的markov模型,程序控制流图cfg表示为cfg=(v,e,entry,exit),有序对g=(v,e),包含两个要素,一个顶点或节点集v,一个是边或线集e,其节点是程序的基本块,连接线一个为程序的控制流向和两个特殊的节点为入口节点和出口节点;

在程序的cfg(v,e,entry,exit)中,若succ(vi)=0,则称vi为cfg的终节点;若pred(vi)=0,则称vi为cfg的起始节点;入口节点entry亦是起始点,出口节点exit亦为终结点;

增加终节点v4,v6到起始节点v1的回边,且pro(v4→v1)=pro(v6→v1)=1,以此构建满足markov性质的第一markov模型,其对应的markov转移矩阵为下述方程:其中,p1和p2是程序的不同分支概率;

增加出口节点exit到入口节点entry的概率为1的回边,以此构建具有出口节点和入口节点的markov模型。

进一步的,由mpt模型分析节点频率即是由mpt模型计算nf值的过程,markov模型的由如下约束条件而求解:

设pnn为cfg对应的markov矩阵,为pnn的转置,s为markov模型的初始状态,令η为特征值为1的特征向量,则为η的转置,使得

根据doblin定理,如果markov链经过一步转移,从某个状态vi到达任何状态vj的概率都是正数,那么由于状态空间s是有限的,则该链将趋于稳定值(即存在);因此,通过求解特征值为1的特征向量η,即可获得markov矩阵稳定值;且设v1=1时,η即为cfg对应节点的nf值。同时,该模型具有良好特性,即获得稳定态时η值时,与初始状态s无关,有利于初始状态的随机选择,方便nf计算。

由于存在吸收markov情形,吸收链到达吸收状态的概率为1,通过求解特征值为1获得markov矩阵稳定态对应的特征向量η并非为cfg对应的nf值,由于吸收markov模型与原程序的cfg不匹配,因此,针对markov模型补充增加nf传播矩阵;

nf传播矩阵满足:在程序的cfg中,若存在一个起始节点v1∈s和若干个终结点vi∈s,令pro(v1→v1)=1且pro(vi→vi)=0,由此构造的概率转移矩阵p′nn称为nf传播矩阵;该nf传播矩阵表达如下:

其中,p1和p2是程序的不同分支概率。

具体的,本发明中,节点频率nf通过markov转移矩阵pnn特征向量计算,或者通过转移矩阵p′nn的稳定态利用方程计算。

其中,节点频率nf通过markov转移矩阵pnn特征向量计算具体过程是:

通过求解特征值为1的特征向量η,即可获得转移矩阵的稳定值;且设v1=1时,η即为程序cfg对应节点的nf值。

根据权利要求4所述的mpt模型节点频率预测方法,其特征在于:通过转移矩阵pnn的稳定态利用方程计算具体过程是:

在程序的cfg中,若存在一个起始节点v1∈s和若干个终结点vi∈s,令pro(v1→v1)=1且pro(vi→vi)=0,由此构造的概率转移矩阵p″nn称为nf传播矩阵;

通过初始状态s乘以k阶方程的nf传播矩阵pnn′能够获得程序的一种稳定态,并且依据稳定态获得对应cfg的nf值;

利用方程对mpt模型的nf计算如下:

k阶方程的nf传播矩阵修改为p″nn表达如下参数可调方程:

其中,(τp)ij=τij·pro(vi→vj);修改的mpt模型nf传播矩阵p″nn,可以匹配不同程序或者相同程序的的边概率ep来进一步分析其与nf预测计算的影响,以确定关键ep。

从状态s出发,经过k+m步状态转移可以分解为两步,即由此,定义mpt稳定态k的取值:

选取合适m值作为结束markov状态转移的条件之一,最终获得稳定状态。

将利用nf传播矩阵创建的mpt模型阐述nf,初始状态s,转移矩阵(τp)ij和模型稳定态的关系,并且有如下特性:

a、nf计算独立于初始状态s;若设置入口基本块的频率为1,将产生确定的nf值;改变初始状态s,并不影响mpt模型的nf值;

b、转移矩阵(τp)ij影响nf值。不同的程序甚至是相同的程序,(τp)ij可能存在差异,因此,采用τ参数调整这种差异是必要的;

在方程和(τp)ij=τij·pro(vi→vj)中,转移矩阵pnn结合fhbp和参数τ可调技术来更加贴近程序的实际概率,因此,相对于fpc&mle方法,mpt模型有机会通过调整p1值,获得更加精确的nf值。

为了确定合适的转移概率(τp)ij,采用混合的可控预测方法,以进一步优化预测的边概率ep,该混合的可控预测方法包括如下过程:

假定节点vi有两个分支,分别指向vj和vk;针对pro(vi→vj)的概率预测,分别采用多种方法获得n1(vj)、n2(vj)、n3(vj)和n4(vj),例如,n1(vj)为编程设定的概率,n2(vj)为profile获得的概率,n3(vj)和n4(vj)是传统静态预测方法获得的概率;此时pro(vi→vk)分别为,n1(vk)=(1-n1(vj)),n2(vk)=(1-n2(vj)),n3(vk)=(1-n3(vj))和n4(vk)=(1-n4(vj));令nf的实际值为ψ,通过传统的方法的预测值为ψ',混合方法的预测值为ψ”,则:

首先,依赖传统的预测方法,即采纳n3(vj)和n4(vj)的值。若n3(vj)和n4(vj)的值存在冲突,则沿用dempster-shafer(ds,用表示)算法计算传统的混合概率,使得ψ'→ψ。

其次,若ψ'偏差较大,通过profile方法获得n2(vj)的值,使得ψ”→ψ。

对于nf随程序输入改变而变化的情况,profile方法无法准确获得n2(vj)时,则采纳n1(vj)(可以通过经验或实验获得),能够根据方程调整p″nn的ep参数,再依据方程状态集合v与s无关的markov特性,计算的nf为

其中,设定的优先级顺序为n1(vj)>n2(vj)>n3(vj),且n1(vj)>n2(vj)>n4(vj),能够通过n1(vj)、n2(vj),以及ds算法的调整,使得混合方法比传统方法获得更加准确的nf预测值。

通过参数可调的mpt模型计算精确的nf值,编译器就能依据nf值完成程序代码的排布。例如,如果分支if(a)中存在ψ=1,变量a如果能够在编译阶段确定为true或false,此时分支就能被消除,以利于cache命中率的提高,进而改进处理器的平均访存时间。

本发明由编译器通过profile方法获取程序的执行信息,该执行信息包括程序控制流图以及程序的边概率,将程序的边概率记为节点频率(nf);首次将程序控制流图(cfg)模型构造为满足markov性质的cfgmarkov模型,并根据该markov模型建立mpt(markovparameterstuning)模型及nf计算理论,该mpt模型利用markov稳定态计算节点频率、分析节点状态及分支概率的关系,并可动态调整mpt模型参数以表征不同参数对程序nf频率的影响,然后编译器可根据mpt模型的输出结果重新安排程序在存储系统中的代码排布顺序,将频繁执行的程序与不频繁执行的程序分隔开来。该mpt模型依据基于cfg的程序特征建立markov模型,能够比传统的shp(simpleheuristicsprediction)等方法有机会表征程序的概率影响关键点,精确获取nf值的同时,有机会优化程序,从而有利于编译器改善以提高cache命中率为目的代码排布技术。

本发明提出的mpt模型在函数cfg中预测节点的nf值,利用其提高cache的命中率pc(i)进而改进处理器的性能。而nf的预测精度由边概率ep或者转移概率矩阵pnn的元素控制。经典的启发式预测基于统一的分支概率,未能考虑到不同程序实际存在的不同分支概率,本申请提出的mpt模型基于模型稳定态获得nf值,同时利用markov参数可调方法尽量贴合函数中控制流图的实际ep或pij进而改进分支和循环概率。结合经典的启发式方法,profile指导的预测方法,及通过编程者可控的概率预测相结合的方法,进一步影响和改进mpt转移概率(τp)ij以获得最为接近实际情况的概率值。通过仿真模拟及评估分析,依据基于cfg的程序特征建立的mpt模型能够有机会获得相对于shp&mle方法更加精确的nf预测,从而有利于编译器改善以提高cache命中率为目的代码排布技术。

附图说明

本发明可以通过参考下文中结合附图所给出的描述而得到更好的理解,其中在所有附图中使用了相同或相似的附图标记来表示相同或者相似的部件。所述附图连同下面的详细说明一起包含在本说明书中并且形成本说明书的一部分,而且用来进一步举例说明本发明的优选实施例和解释本发明的原理和优点。在附图中:

图1为分级存储模型;

图2为直接映射方案及其cache冲突;

图3为程序的优化代码排布;

图4为程序控制流图cfg和边概率ep;

图5为mlecfg及其nf值;

图6为cfg的markov模型,图6(a)为吸收markov模型,图6(b)为nf传播矩阵;

图7为nf传播矩阵构造;

图8为预测和重定位输出代码;

图9为mpt模型nf稳定态,图9(a)为确定的初始状态s及其nf的稳定过程,图9(b)为初始状态s改变及其nf稳定过程;

图10为不同p1情况下的nf值变化,图10(a)为p1=0.9时的nf过程,图10(b)为不同p1情况下的稳定态nf值;

图11为边概率p1=p2=1特殊情形;

图12为不同的输入范围的profile方法实际nf值,图12(a)为输入范围为1000的实测nf值,图12(b)为输入范围10000的实测nf值,图12(c)为输入范围100000的实测nf值;

图13为mpt、shp&mle和profile的nf值比较示意图。

具体实施方式

下面将参照附图来说明本发明的实施例。在本发明的一个附图或一种实施方式中描述的元素和特征可以与一个或更多个其它附图或实施方式中示出的元素和特征相结合。应当注意,为了清楚的目的,附图和说明中省略了与本发明无关的、本领域普通技术人员已知的部件和处理的表示和描述。

在本发明的描述中,需要理解的是,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

为提高cache命中率,以提高内存子系统的平均访问时间,本发明提出了编译器静态markov参数可调(mpt)节点频率(nodefrequencies,nf)预测技术,支持编译器的代码重定位。本发明分别通过以下几点来阐述:论述cache模型及其命中率对系统性能影响、基于控制流程图的markov模型,建立mpt模型分析节点频率,节点状态及分支概率的关系,然后阐述采用混合的编译器静态预测技术提高预测的准确性。最后,通过模型分析及基于profile方式的程序实际执行结果比较验证mpt模型的有效性。

一、cache管理和重定位

本节首先对存储系统与cache模型进行描述,给出cache模型及其命中率对系统运行的影响,论述程序运行过程中的cache映射方式和cache冲突问题。同时,阐述程序代码预测和优化的代码排布或重定位技术在降低cache冲突,改善cache的性能,进而改善和提高嵌入式系统的整体性能方面的作用。

1、多级存储管理与cache

cache技术出现于1960年,其利用程序局部性原理,通过cache映射主存的内容来提高内存访问的速率。如图1所示,在分级存储模型中,不同类型的存储器在容量上存在巨大差异,基于io设备的存储介质,如磁盘和flash拥有大容量的存储单元,而cache和寄存器的存储容量小。然而,就访问速度而言却截然相反,寄存器和cache比其他存储介质有更快的访问速度。多级存储模型是目前通用处理器及嵌入式处理器都普遍采用的一种存储方式。由于访问主存延迟较长,cpu执行指令的访存延迟主要是访问主存的延迟,如对sram或者ddr的访问(其访问时间不同但同属于一类存储层级)。

为了提高访存速率,本节主要讨论主存与cache的平均访问时间和访问概率对存储性能的影响。

假设tm是主存的访问时间,tc是cache的访问时间,pc为cpu平均访问cache的概率,存储子系统的平均访问时间为ta。

因为pc为cpu平均访问cache的概率,假设pm为主存的平均访问概率。针对要访问的任一指令或数据i,其访问概率为1,即:

pc(i)+pm(i)=1(1)

若ta为存储子系统的平均访问时间,n为总的访问次数,则,

公式(1)代入公式(2),由于则ta为,

由于在具体的嵌入式系统中,存储子系统的tc和tm固定,因此,从公式(3)可知,存储的平均访问时间ta由cache的平均访问概率pc决定。假定pc→1,则ta→tc,即指令的平均访问时间接近于cache的访问时间,而cache的访问时间明显比主存访问时间快。因此,通过提高cache命中率能够提高存储系统的平均访问速率。为了提高cache命中率,通常采用如下两类方法:

a、调整硬件及其体系结构以提高cache的命中率:改变cache行的组织结构及其主存、cache映射方式或者利用cache的时间和空间局部性原理增加硬件的预测模块动态的重新组织程序代码;

b、软件的cache重定位方式:由于编译器可以获取程序的控制流图等执行信息,依据编译器静态预测的方式调整程序代码排布,使得程序适应cache的硬件组织方式,达到不需要修改硬件就可以提高cache命中率的目的。

2、映射和代码重定位

主存和cache映射中,将主存空间分割为以cache块(block)大小为单位的若干块,存在三种基于地址的cache和主存的映射方式,即直接映射,组相联映射和全相联映射。

全相联方式虽然需要复杂的电路设计,却使得cache的空间利用率更加有效灵活,也有利于通过硬件或软件优化技术进一步改善cpu的性能。但是,即使是使用全相联的映射方案,由于cpu执行各种各样的程序,实际执行中cache不命中及cache冲突仍然存在。图2展示了程序运行时,使用传统的直接相联方式,映射主存中的程序序列到cache的过程及其存在的问题。

存储子系统通过改进cache命中率进而提高存储子系统的平均访问时间以进一步改进嵌入式系统的访存性能。然而,由于运行程序的随机性,不可避免的会产生cache不命中的情况。如图2所示,假定二进制程序的排布顺序是有序集p={a,b,d,e,c,g,f,h},其中集合中的字母(letter)表示基本块的指令集(instructionssets),且假定其大小为cache块的大小。同时假定程序运行的执行序列为有序集r={a,b,c,d,e,f,g,h}。在cache中存在两个主存到cache的映射子集map1={a,b,d,e}和map2={c,g,f,h},map1&map2对应的元素在cache中相互冲突,不能同时映射到相同的cache块中。所以,当集合r运行到子集{c}时,将取代cache第一块中的子集{a};当集合r运行到子集{f}时,发现cache已经填满,同样需要取代相应的子集{d}在cache中的位置。存在多种cache不命中的情况,如冷启动强制不命中(coldstartcompulsorymiss)、容量限制不命中(capacitymiss)和冲突不命中(conflictmiss)[5],为此,大量的cache替换策略,如先进先出(fifo)、最近最不常使用(lru)等算法被提出用于处理cache冲突及降低cache不命中的情况。

指令预取(instructionsprefetching)和增加cache容量能够相应地解决强制不命中和冲突不命中;而使用全相联cache替代直接相联或组相联的方案,是一种降低cache冲突不命中的有效方法。增加cache容量和改变cache映射方式需要调整硬件架构,考虑到成本、功耗、芯片面积和设计复杂性等因素,其实现存在诸多限制;预测和代码重定位是进一步提高cache利用率的经济实用方法,有硬件和软件两种实现方式。文献[13]提出了基于动态预测的预测器方法,通过采用增加硬件预测执行模块,如跨步预测(strideprefetchers),流缓存预测(streambuffers)和关联预测(correlation-basedprefetching)[14]等预测方法来降低cache冲突。然而这需要处理器设计时就考虑增加相应的硬件模块以完成预测,对于已经定型的嵌入式硬件,只能通过编译器静态预测的软件方式来改善程序的代码排

布以提高cache和系统的性能。其实,即使处理器已经具有硬件预测模块,也可以通过编译器静态分析与针对cache的程序优化,改善cache的性能[10]。

在程序执行过程,频繁执行的程序代码很可能执行时间占整个程序运行时间的90%。由于程序的时间局部性及空间局部性,编译器可以利用程序的这些特征静态的预测程序执行的路径,重新安排代码在存储系统中的顺序(排布)。图3显示了静态编译排布方案(文献[3,4])的基本思路,产生的代码依据边概率由高到低排布,利用程序的局部性(空间和时间)使得频繁执行的代码能够大部分驻留在cache中,以提高cache命中率,达到改善系统性能的目的。

二、控制流程图和nf

如上节所述,为了提高cache的命中率,编译器需要知道代码基本块执行的频率,这就必须提高基于控制流图的nf预测的准确性,本节讨论控制流图的nf计算问题,同时提出基于markov的nf计算方法。

2.1、控制流图和边概率

如前所述,基于程序运行时代码(codes)的局部性,编译器能够预测并重新定位输出的目标代码。如果编译器能够依据程序执行的顺序组织代码,同时将频繁执行的代码与不频繁执行的代码撕裂,考虑到cache的大小和基本块的大小,就能提高cache命中的概率pc(i)进而提高整个存储系统的平均访问时间ta。如果ta近似的接近于cache的访问时间tc,整个存储子系统的访问速度就接近于cache的访问速率,即可通过合理的使用cache极大地改善系统性能。通常,编译器表达和解析程序代码为抽象语法树ast(abstractsyntaxtree)中间形式,通过构造控制流程图cfg(controlflowgraph)来分析和优化程序的控制流。

制流图是一种图,图g是一种有序对g=(v,e),包含两个要素,一个顶点(vertices)或节点(nodes)集v和边(edges)或线(lines)集e。cfg可以表示为cfg=(v,e,entry,exit),是一个有向图,其节点是程序的基本块,连接线为程序的控制流向和两个特殊的节点为入口(entry)节点和出口(exit)节点,如图4所示。

函数的控制流图中,存在从入口节点到程序能够到达的任意基本块的边,同样存在从任意基本块到达程序结束的边。程序顺序执行的语句(statements)组织成基本块,程序流进入一个基本块的第一条语句,在最后一条语句离开基本块。相对于节点vi,节点vj是节点vi的直接后继(successor),边vi→vj的边概率(branchprobability)表示为pro(vi→vj)(在没有混淆的情形下表示为pro(vj))。succ(vi)表示为节点vi的直接后继集合。如果节点vi具有超过一个后继则形成分支,则vj∈succ(vi)。图4是质数求解程序及其控制流图和边概率,编译器能够使用边概率pro(vi→vj)(vj∈succ(vi))的信息重定位分支代码的排列顺序。

2.2、nf计算与概率矩阵

将图4的函数控制流程图cfg=(v,e,entry,exit)模型化为一个markov过程,设基本块节点vi为markov状态,则v是函数中基本块的节点集合(或状态集合)(文献[11])。状态的转移概率pij是cfg的边概率(ep)pro(vi→vj)。状态或节点频率nf能够通过ep或pij计算。依据文献[10],基本块的节点频率nf能够通过传播函数内cfg的分支概率计算,相关的计算公式如公式(4)~(7)。

令vfreq(vj)为基本块的边概率nf,efreq(vi→vj)为边vi→vj的边概率。可知nf是节点所有进入边(incomingedge)的频率之和,且efreq(vi→vj)是vfreq(vj)与边概率eppro(vi→vj)乘积。

vfreq(v1)=efreq(ventry→v1)=1(4)

efreq(vi→vj)=vfreq(vi)pro(vi→vj)(6)

方程(4)中的v1为函数cfg的入口或第一个执行节点,vi∈pred(vj)作为vj(除v1节点)前驱。方程(4)~(6)可以解决cfg中不存在循环的nf计算问题,但对于存在循环的cfg,节点vi带有回边vj→vi时,则无法通过如上方程解决。为此,wu和larus[7]通过方程(7)进一步论述了此问题。

假定in_freq(vi)为所有进入vi的边的频率之和(循环边除外),其中vi是带有回边vj→vi的节点,rl是从vi到vj(j>i)的传播边概率,则有vfreq(vj)=vfreq(vi)·rl,假定cp(vi)为回边概率,则:

vfreq(vi)=in_freq(vi)+vfreq(vi)cp(vi)(8)

如果0≤cp(vi)≤1,利用公式8,计算循环起始节点vi(具有回边)频率为:

利用方程(4)-(6)和方程(9)计算基本块的nf,称之为频率传播计算法(frequencypropagatecalculation,fpc)。利用fpc计算节点nfvfreq(vi),需要逐一遍历cfg。wagneretal.[8]提出了一种基于函数cfg的markov模型,通过线性方程构造的矩阵解决方案,即markov线性方程法(markov-basedlinearequations,mle),但其使用矩阵线性的计算cfg及其相应的节点频率,并且假定循环迭代次数和循环测试次数均为5次,限制了该方法的应用。

假定图4中p1和p2的边概率为0.8,依据wagneretal.研究,通过cfg的线性关系可得方程(10)的矩阵ann,采用矩阵求解线性方程(11)以获得需要的nf值。其中,初始状态s如方程(12)所示。图5是利用方程(10)~(12),通过求解线性方程的方法计算节点的nf值。mle方法建立了基于cfg的markov状态模型是本发明思路的重要基础,但其模型建立的并不完整,且其采用线性方程的求解方法而未能实际应用markov特性求解问题,同时,其对循环迭代次数做了约束,该方法在nf预测准确性上对比fpc计算方法也没有提高。

annv=st(11)

s=(100000)(12)

三、markov稳定态与mpt

3.1稳定态与mpt

从wagneretal.[8]的测试结果可知,采用ballandlarus[6]提出的简单启发式预测(simpleheuristicsprediction,shp)方法,测试基本块的预测精度为81%,并且验证提出的mle也有相近的预测精度。通过mle实现及其测试案例发现:

mle方法的矩阵(如公式(10)的ann)概率来源于shp方法,分支预测采用固定的预测概率,不能够适应所有程序的情形,因此有些程序预测效果比较差。

基于mle基本块nf预测,实际上采用线性方式求解方程,没有充分讨论cfg对应的markov特性且作者假定大部分程序循环次数的经验值是5,即设定循环迭代次数为5来限制方法的应用精度。

为了克服这些缺陷,根据图4的例程,本节详细分析程序cfg的特性及其markov过程,如图6所示,提出基于程序cfg的markov模型作为mpt模型基础。

定义1在程序的cfg(v,e,entry,exit)中,若succ(vi)=0,则称vi为cfg的终节点。若pred(vi)=0,则称vi为cfg的起始节点。入口节点entry亦是起始点,出口节点exit亦为终结点。

由于mle方法通过图5构建的概率转移矩阵不满足markov性质(性质2.1),图6(a)是在mle方法的cfg(图5)基础上,增加终节点v4,v6到起始节点v1的回边,且pro(v4→v1)=pro(v6→v1)=1,以此构建满足markov性质markov模型一,其对应的markov转移矩阵为方程(13)。图6(b)是在图4程序cfg基础上,增加出口节点exit到入口节点entry的概率为1的回边,以此构建markov模型二。

其中,p1和p2是程序的不同边概率;

定理1设pnn为cfg对应的markov矩阵,为pnn的转置,s为markov模型的初始状态,令η为特征值为1的特征向量,则为η的转置,使得

证明:由于markov转置矩阵对应特征值为1的列特征向量为η,则根据特征向量的定义有,

又根据chapman-kolmogorov方程,可得,则有,

lt也为特征值为1的特征向量。因此,使得k·ηt=l,证毕。

实际上,根据doblin定理[12],如果markov链经过一步转移,从某个状态vi到达任何状态vj的概率都是正数,那么由于状态空间s是有限的,则该链将趋于稳定值(即存在)。因此,根据定理1,可以通过求解特征值为1的特征向量η,以获得markov矩阵稳定值。且设v1=1时,η即为cfg对应节点的nf值,因此,定理1描述了基于markov模型的两种nf计算方法。

然而,图5描述的cfg,根据定义2.12,亦可以构造图7(a)的吸收markov模型,但由于吸收链到达吸收状态的概率为1,通过定理1获得稳定态或η并非为cfg对应的nf值。可知图7(a)构建的吸收markov模型与原程序的cfg不匹配,因此,本节提出一种nf传播矩阵如图7(b)所示。

定义2在程序的cfg中,若存在一个起始节点v1∈s和若干个终结点vi∈s,令pro(v1→v1)=1且pro(vi→vi)=0,由此构造的概率转移矩阵pnn称为nf传播矩阵。

根据定义2及如图7所示,相对于吸收markov模型,nf传播矩阵将依据cfg通过起始节点发起概率传播,避免了吸收markov模型最终流向吸收状态。

实验发现,通过初始状态s乘以k阶方程(14)的nf传播矩阵p′nn能够获得程序的一种稳定状态,并且依据稳定态将获得对应cfg的nf值。表1给出了利用方程(12),方程(1.14)的nf传播矩阵及方程(15)计算状态节点的nf值的变化过程,当k≧50时,模型基本趋于稳定,最终获得与shp&mle一致的nf值。因此,可以利用方程(15)构建mpt模型的另一种nf计算方法。

表1nf值随k值增长的稳定过程

实验发现,不同的程序使用同一的启发式预测概率,不仅不符合特定程序的实际分支边概率ep,而且其对nf计算结果具有不同程度的影响,为此,修改mpt模型中的转移矩阵pnn(markov转移矩阵或nf传播矩阵)为方程(16)的参数可调方程p″nn,通过匹配不同程序甚至是相同程序的边概率ep来进一步改进nf的预测精度。

(τp)ij=τij·pro(vi→vj)(17)

根据定理2.1,从状态s出发,经过k+m步状态转移可以分解为两步,即由此,可以定义mpt稳定态k的取值:

选取合适m值作为结束markov状态转移的条件之一,最终获得稳定状态。实际上,使用shp&mle预测ep不够精确甚至产生较大偏差,这也是t.a.wagner测试的benchmark部分程序预测效果欠佳的原因。mpt模型将通过方程(16)和(17)使用τ函数改进pnn进一步调整ballandlarus固定的启发式分支预测值。因此,节点nf能够通过markov转移矩阵pnn特征向量计算,亦可以通过转移矩阵pnn的稳定态利用方程(15)计算。在5节中,将利用nf传播矩阵创建的mpt模型阐述nf,初始状态s(initialstate),转移矩阵(τp)ij和模型稳定态的关系。并且有如下特性:

nf计算独立于初始状态s。若设置入口基本块的频率为1,将产生确定的nf值;改变初始状态s,并不影响mpt模型的nf值。

转移矩阵(τp)ij影响nf值。不同的程序甚至是相同的程序,(τp)ij可能存在差异,因此,采用τ参数调整这种差异是必要的。

在方程(16)和(17)中,转移矩阵pnn结合fhbp和参数τ可调技术来更加贴近程序的实际概率。利用图4的测试程序(质素获取程序),基于方程(14)改变p1的值,获得nf值的变化如表2。p1的变化对nf影响明显,shp&mle基于fhbp方法无法解决此问题。但在质素获取的测试程序中,p1能够被事先预知;因此,相对于fpc&mle方法,mpt模型有机会通过调整p1值,获得更加精确的nf值。

表2p1改变情况下的稳定nf值

3.2、混合的可控预测

为了确定合适的转移概率(τp)ij,结合ball-larus的fhbp方法,及τ参数调整markovnf计算方法,编译器可以更加精确的预测边概率,或通过程序员设置可知的边概率ep(或从profile获得ep信息),以进一步提高nf计算的准确性。虽然fhbp是一种简单有效的边概率静态预测方法,但其无法准确预测特定程序的ep,针对特定程序的误差可能会很大,从而影响到nf值准确性;编程者利用工具在代码中插入代码片段获取程序运行时的nf信息的profile方法,虽然针对相同的程序输入时,能够获得准确的nf预测信息,但如果改变程序输入或profile未能测试到的情形,profile的信息可能是错误的。为了改进这些问题,本发明采用混合的可控预测方法,需要编程者参与及编译器优化以进一步优化预测的边概率ep。

假定节点vi有两个分支,分别指向vj和vk。针对pro(vi→vj)的概率预测,假定程序员编程设定概率描述为n1(vj),profile获得的概率为n2(vj),传统静态预测方法[6,7]获得概率为n3(vj)和n4(vj)。此时pro(vi→vk)分别为,n1(vk)=(1-n1(vj)),n2(vk)=(1-n2(vj)),n3(vk)=(1-n3(vj))和n4(vk)=(1-n4(vj))。若nf的实际值为ψ,通过传统的方法的预测值为ψ',混合方法的预测值为ψ”。可采用如下三个层次的混合方法来改进nf的预测。

首先,依赖传统的预测方法,即采纳n3(vj)和n4(vj)的值。若n3(vj)和n4(vj)的值存在冲突,则根据参考文献[7],沿用dempster-shafer(ds,用表示)算法计算传统的混合概率,使得ψ'→ψ。

其次,若ψ'偏差较大,通过profile方法获得n2(vj)的值,使得ψ”→ψ。

最后,对于nf随程序输入改变而变化的情况,profile方法无法准确获得n2(vj)时,则采纳n1(vj)(可以通过经验或实验获得),能够根据公式(16)调整pnn的ep参数,再依据公式(15),状态集合v与s无关的markov特性,计算的nf为

因此,设定优先级为n1(vj)>n2(vj)>n3(vj),且n1(vj)>n2(vj)>n4(vj),能够通过n1(vj)、n2(vj),以及ds算法的调整,使得混合方法比传统方法获得更加准确的nf预测值。

通过参数可调的mpt模型计算精确的nf值,编译器就能依据nf值完成程序代码的排布。例如,如果分支if(a)中存在ψ=1,变量a如果能够在编译阶段确定为true或false,此时分支就能被消除。同样,图8是图5的子图,如果计算节点nf值为vfreq(3,5,6)={2.22,1.78,0.44}。根据图3的排序算法,基本块5的编译输出很可能安排在节点3的后续代码序列中,而节点6将根据其nf值被安排在更低优先级的相应序列中,以利于cache命中率的提高,进而改进处理器的平均访存时间。

四、mpt仿真与评估

依据公式(14)~(18),模拟了一种mpt模型。通过建立的模型,设定模型输入,指定或改变特定的nf传播矩阵参数值等信息,来描述和评估程序和模型自身的特征,以此来指导更加贴合程序nf规律的预测技术。选择nf传播矩阵来仿真的原因在于,nf传播矩阵能够依据cfg的概率转移中更加形象的描述cfg概率的流动过程。如图4中获取质素的参考程序及其控制流图,图中将参考程序分成6个状态(节点或基本块),并以此来评估和说明在mpt模型中nf特性和影响nf的因素。首先,通过mpt模型验证状态(节点)的稳定过程,验证状态的稳定过程与初始状态值s无关,同时通过稳定状态获得nf预测值,验证其与实际计算的节点nf值一致。其次,改变边概率(ep)的值,说明和评估nf值的相应变化。这些变化或影响规律对mpt模型及程序本身通过概率参数(τp)ij评估和改进nf的预测精度具有重要的作用。最后,对比覆盖测试的profile插装测试方法,进一步验证和阐述提出的基于mpt模型及混合的边概率ep预测方法,能够更加精确的获得节点的nf值。

4.1频率稳定过程评估

通过mpt模型,首个试验验证图4的测试程序,并按表3案例1设定模型参数,如矩阵(14)的两个分支概率p1和p2,方程(15)的测试参数k及参考程序的初始状态s,说明程序节点或状态的稳定过程。初始状态集合s中的第一个元素被设定为1,表示程序的入口基本块的参考频率是1,其他基本块的频率以程序入口节点频率1作为频率基准。当然,可以调整程序入口的频率为任意正整数值,这样其他节点或状态的频率计算结果也会相应的提高,最后各个节点的nf比率仍然相同。一般情况下,使用1作为程序入口频率的参照值。

表3p1,p2,kands参数设置及稳定态

在案例1中,依据方程(15)矩阵pnn阶乘k值增长到一定值,如k=100时,参考程序的6个状态具有稳定的值。再增加k的值,节点状态不再变化。实验结果说明,在确定的概率矩阵和初始状态的情况下,状态频率或nf具有唯一的特征值,并且可以通过方程(15)获得每个状态最终的nf值。如图9(a)所示,状态2~状态5的频率依据函数的控制流图的执行顺序,随着k值的增加而逐渐的增加;当k=10时,程序的状态逐渐趋于稳定,最后k值(k>50)尽管继续增长,各个节点状态的状态值一直保持不变。结果显示,状态2(节点v2,while语句)具有最高的边概率2.78,状态6(节点,returnnum语句)频率最低为0.44。状态1作为程序的顺序入口及其参考频率,节点频率nf一直保持为1。最终的节点频率nf值即状态的稳定值vfreq{v1,v2,v3,v4,v5,v6}为有序集{1,2.78,0.56,2.22,1.78,0.44}。这个值与wagner提出的方法相同,因此,编译器能够使用稳定态计算nf值以便优化代码排布,提高cache的利用率。

实验案例2验证在改变初始状态s情况下,节点状态的稳定nf值是否受其影响。实验结果表明,与案例1相同的设定条件下,状态的稳定值不随着初始状态的改变和变化,保持与案例1一致稳定值。这对编译器确定cfg节点的初始值具有重要的意义。表格3中,初始状态s被设定为有序集{1,5,0.3,0.3,0.3,0.3},模拟运行结果如图9(b),变量k在[0,10]范围内时,除作为参考状态的节点1外,其他5个状态节点的频率明显波动,但最终各个状态节点的频率趋于稳定且稳定于如图9(a)相同的频率值{1,2.78,0.56,2.22,1.78,0.44}。说明状态节点的初始频率值s影响了频率的趋近过程,但并不影响每个状态最终的nf稳定频率值,如由于初始状态2的值为5,状态趋近过程中波动幅度明显比较大,但最终稳定到2.78的实际nf值。

4.2边概率改变及其影响

从上一节分析得到,nf稳定值独立于状态节点的初始频率值s,与状态转移矩阵的关系如何,本节通过案例3和4,分析方程式(14)的nf传播矩阵pnn的元素p1变化时,陈述nf的影响。在案例3中仅改变p1的设定值,从之前的0.8修改为0.9(这两个概率值在实际程序中是比较可能发生的),而在案例4中,p1的值从0.1,0.2逐步修改到1来发现和分析其对节点频率nf的影响。其他参数保存和案例1的实验不变,如表4所示。

表4仅改变p1的nf评估

实验结果如图10,其中图10(a)为表4中案例3的实验结果,图中可知,类似与上一节的案例1,状态频率nf值具有相同的变化趋势,最终趋于稳定。但是,由于边概率p1的改变(从0.8调整到0.9),状态节点2,3,5的稳定频率比案例1中的相应节点变大,状态节点4,6的稳定频率比案例1中的相应节点变小了。最终,nf值vfreq(v)={1,3.57,3.21,0.35,2.57,0.64}。值的注意的是,相对于案例1,状态4和状态6的nf大小顺序出现了翻转。这些变化都会影响到编译器的生成代码排布。

案例3的仿真模拟结果说明转移概率矩阵及其相应的元素变化,能够影响到markov稳定态的nf值;案例4进一步解释转移概率中的元素改变对markov预测的nf稳定值的影响。从0.1到0.9以步长0.1逐渐改变p1值,实验结果如图10(b),除状态1(参考频率)频率始终保持不变外,改变p1的值对稳定的频率影响明显。特别的,以频率1作为参考(如状态1),当p1的值由0.5变化到0.6时,状态3,4和状态5的markovnf稳定值出现翻转,分属于参考频率1的上下两边;同时,当p1设置值从0.8到1时,状态的稳定频率值变化幅度明显大于p1的其他值设定,说明边概率ep在[0.8,1]的取值范围内,对nf预测影响更为明显。而频率信息是编译器代码重定位的主要依据,因此精确的转移概率预测影响到nf预测的精度,进而影响到编译器的代码排布。然而,实际上不同的程序,其cfg中即便是同一类型的分支,也可能具有不同的分支概率。ballandlarus提出统一的静态分支和循环分支的概率预测方法虽然降低了编译器预测的难度,却不利于进一步改进预测精度。在本发明中,通过图4的测试程序评估,编程者和编译器可以提前预知某些循环和分支的概率,编译器可以提供相应的编程接口以便能够设定合适的静态边概率ep,进一步提高nf预测的精度。

当设定参数p2=p1=1时,出现了图11的一种特殊情况,状态2,3,5的频率值随着k的增长而线性增长,值为1/3*k。这是一种非正常的情况,程序将永久的在节点2,3,5之间循环执行(死循环),边概率无限大。

4.3profie结果与比较分析

本节通过基于profile插装的覆盖率测试,验证图4质素获取程序的实际执行结果,采用从1000到1000000范围的随机数作为程序输入(如案例5~案例7),获取程序实际的边概率p1和p2,及nf统计值如表5。图12给出了nf统计值的图形表示,从实验结果发现,程序的不同的输入范围(inputrange),nf值存在差异,p1的值一直比较大(0.98左右),远大于fhbp方法所确定的边概率值。当输入大于1000时,边概率p1实际都将是一个较大的值,这和质素求解程序的实际相符,因为数越大(如大于1000),质素的比率也越小,自然循环执行的次数就更多,p1较大。因此,程序运行之前即可以预测p1的值。

表5基于profile方法的实测结果

为改进预测精度,期望编程者有机会设置循环分支p1的概率,使其更加接近于真实情况。在mpt模型中,采纳了如上的p1值,保守的调整p1为0.97(p1为一个更加接近于案例5~案例7的实际值并且不随输入有明显的变化),远大于shp&mle方法所确定的概率值(0.88);而p2由于其值依据输入的不同而变化明显,相对于shp&mle确定的概率值0.84,实际值在其上下波动,因此,保守的采纳shp&mle确定的值。依据12(a)相同的输入范围及表6的参数设置,比较基于profile的覆盖测试,shp&mle方法及mpt预测方法获得的nf值,比较结果如图13所示。

表6mpt、profile和shp&mle参数值

从图13比较结果看,mpt方法通过改变p1即(τp)23,能够比shp&mle方法更接近profile的实际测试结果。而由于shp&mle的p1固定值偏离了实际的边概率,依据图12(b)的实验结果(概率在区间[0.8,1]的nf波动较为明显),其nf预测概率也将发生较大的偏离。实际上,根据测试程序的输入范围不同,如果已知获取质素范围,可以更加精确的确定p1和p2,采用mpt模型及可调整的转移概率参数,更进一步保证nf预测的精度,但采用shp&mle方法预测值偏离随着质素输入范围的扩大而变大,nf的偏差也将越来越大。

无论是启发式还是profile指导的预测技术,基于静态的预测不可避免的存在预测错误或偏差的情况。编译器通过利用编程者参与的混合静态预测方法,再结合如图3传统的指令排布技术,将有利于提高预测的准确性,并提高指令cache的命中率进而提高存储系统的平均访问时间ta。

五、小结

本发明提出的mpt模型在函数cfg中预测节点的nf值,利用其提高cache的命中率pc(i)进而改进处理器的性能。通过实验可知nf的预测精度由边概率ep或者转移概率矩阵pnn的元素控制。经典的启发式预测基于统一的分支概率,未能考虑到不同程序实际存在的不同分支概率,提出的mpt模型基于模型稳定态获得nf值,同时利用markov参数可调方法尽量贴合函数中控制流图的实际ep或pij进而改进分支和循环概率。结合经典的启发式方法,profile指导的预测方法,及通过编程者可控的概率预测相结合的方法,进一步影响和改进mpt转移概率(τp)ij以获得最为接近实际情况的概率值。通过仿真模拟及评估分析,依据基于cfg的程序特征建立的mpt模型能够有机会获得相对于shp&mle方法更加精确的nf预测,从而有利于编译器改善以提高cache命中率为目的代码排布技术。

为了充分利用程序代码的空间和时间局部性,提高cache命中率,以尽量减少cache冲突产生的概率,本发明提出一种混合的编译器静态预测技术。不同于传统的方案,对所有程序采用统一的编译器静态启发式预测[6,7],考虑到基于程序控制流图的markov模型,采用一种编译器静态的markov参数可调(mpt)节点频率(nf)预测技术,支持编译器辅助的代码重定位。这种结合fhbp和markov转移概率矩阵参数可调的启发式方法,能够充分考虑不同程序及函数中markov模型化的程序控制流图(cfg)的特性,更加精确的预测节点频率nf,以进一步接近于节点的实际边概率。最后,通过建立的mpt模型来分析nf,节点状态及分支概率的关系,通过与基于profile方式的程序实际执行结果比较,mpt能够更加贴合实际结果,说明mpt模型的有效性

应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。

此外,本发明的方法不限于按照说明书中描述的时间顺序来执行,也可以按照其他的时间顺序地、并行地或独立地执行。因此,本说明书中描述的方法的执行顺序不对本发明的技术范围构成限制。

尽管上面已经通过对本发明的具体实施例的描述对本发明进行了披露,但是,应该理解,上述的所有实施例和示例均是示例性的,而非限制性的。本领域的技术人员可在所附权利要求的精神和范围内设计对本发明的各种修改、改进或者等同物。这些修改、改进或者等同物也应当被认为包括在本发明的保护范围内。

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