基于模拟器的嵌入式软件运行时能耗估算方法

文档序号:6631728阅读:190来源:国知局
专利名称:基于模拟器的嵌入式软件运行时能耗估算方法
技术领域
本发明属于嵌入式软件开发过程中的能耗估算技术领域,具体涉及一种估算嵌入式软件运行时能耗的方法。
背景技术
软件能耗评估方法主要有两类一类为硬件测量方法,一类是软件估算方法。硬件测量方法准确性高,但是对处于开发阶段的软件并不适用,因为软件结构和功能会有变化。并且硬件测量方法很难把获得的测量数据与软件的具体语义联系起来。软件估算方法的准确性低于硬件测量方法,但构建简便,测试周期短,并且成本低廉。实际中多采用软件估算方法。
软件估算方法按照估算模型可以分为4类1)晶体管级模型基于这种模型的方法,适用于集成电路设计中估算电路能耗。不适合用来估算大型软件(操作系统,编译器)的能耗。
2)微体系结构级模型基于该模型的方法建立了微体系结构级别的流水线模型,每个时钟周期收集能耗信息,并以此为基础来估算能耗,具有较高的准确性,但不能很好地把能耗映射到软件的语义。
3)指令级模型基于该模型的估算方法以单条指令为基础累计估算软件的能耗。具有较好的速度,但准确性比微体系结构级模型差。
4)系统级模型基于该模型的估算方法把软件能耗归结为软件不同模块的消耗,单位模块有不同状态,并且处于不同的状态时有不同的能耗,由此该模型通过记录软件模块的状态切换来估算能耗。该模型准确性差,适用于选择不同的模块来构成软件系统。

发明内容
本发明克服现有软件能耗估算方法的不足,利用基本的指令在流水线上执行过程的能耗信息,提供一种基于模拟器的嵌入式软件运行时能耗估算方法,能够获得嵌入式软件各个粒度(小到函数,大到包括应用软件和操作系统的整个系统)的能耗,准确估算更高级别的软件构件的能耗。
本发明的技术内容一种基于模拟器的嵌入式软件运行时能耗估算方法,包括
1、分析软件的二进制可执行文件中的符号信息,获取符号的起始地址和结束地址的信息,建立软件构件符号信息表。软件构件的最小单位是函数,根据函数间的调用关系可以构造函数集合组成的操作系统服务、功能模块、整个系统等不同级别的软件构件。
2、指令级模拟器模拟软件运行,并获取运行时的指令地址和指令码。在模拟器读取指令的地址后,把地址送给后续取指模块的同时,送给缓存地址流队列。取指模块读到指令码,送给指令执行模块,通过实现指令功能的方式模拟执行指令的同时,将指令码送入指令流队列。
3、微体系结构模拟器按照同步的原则,从指令流队列获取指令码,交给微体系结构流水线模拟模块。流水线模拟模块分析指令流需要访问的微体系结构部件(如逻辑运算单元ALU、高速缓存CACHE),按照部件的能耗模型计算被访问部件的能耗。在最后一级微体系结构流水线模拟模块里,累计在该流水线周期内,所有被访问部件的能耗。
4、能耗估算模块从地址流队列里,获取与指令码对应的指令地址信息,在软件构件符号信息表中查找该指令所在的函数名符号的起始地址和结束地址,从而判别该指令属于哪一个函数。同时,根据指令所在的函数符号名称建立软件构件能耗信息表,把所有属于该函数的指令的能耗累计起来,估算出该函数的能耗。
5、以上步骤获取指令流在处理器上运行过程中的能耗。嵌入式软件访问内存和外部设备时,调用相应的指令。在对该类指令计算能耗时,利用相应的能耗模型。内存的能耗模型中的关键参数是内存的能耗与内存单元的大小和内存访问的时间成正比。外设的能耗模型根据不同的设备硬件特征定制。
6、从指令级模拟器输出动态执行的指令和地址流,经过能耗估算模块中的函数调用关系树分析子模块根据函数符号和指令起始/终止地址之间的映射信息和动态执行地址流信息,在线分析并构造出函数调用关系树。能耗估算模块中的软件构件能耗估算子模块,根据函数间的调用关系信息和单个函数能耗信息,合成所需要的任意粒度的软件构件能耗。
本发明的技术效果能够在嵌入式软件动态模拟运行期间收集软件的指令和地址信息,结合微体系结构部件的能耗估算模型,参照嵌入式软件运行期间指令地址与软件构件对应关系得到软件构件的能耗估算。


下面结合附图,对本发明做出详细描述。
图1为指令地址和软件构件的映射信息的获取的流程图;图2为指令级模拟器的工作流程图;图3为微体系级模拟器的流水线结构图;
图4为估算软件中函数的能耗流程图。
具体实施例方式
本发明利用模拟器估算嵌入式软件能耗,该方法要用到两个完成部分功能的模拟器1)一个指令级的全系统模拟器该全系统模拟器读入编译链接后生成的二进制映像文件,通过模拟每条指令的执行结果,来实现对嵌入式软件的模拟执行。本发明利用该模拟器获得嵌入式软件动态执行的信息(如指令流,地址流),用于后续的能耗分析。
2)一个微体系结构级的处理器能耗模拟器该微体系结构级的处理器能耗模拟器模拟了处理器内部的流水线结构和组成部件,以及指令流在流水线中访问到的微体系结构部件(如CACHE,ALU,TLB等部件的能耗),同时建立了各部件的能耗模型。本发明利用基本的指令在流水线上执行过程的能耗信息,经过处理,估算更高级别的软件构件的能耗。
以skyeye开源指令级模拟器和sim-panalyzer微体系结构级模拟器为基础的嵌入式软件估算系统,运行在skyeye上的ARM-Linux嵌入式操作系统为实施实例1、获取指令地址和软件构件之间的映射信息本发明首先要分析软件中各构件的符号信息和指令流地址的对应,从而实现动态执行轨迹与软件语义的结合,为估算软件构件的能耗做准备。
下面给出获取指令地址和软件构件符号信息映射的具体步骤(1)把待估算软件编译成带调试信息的可执行文件(2)解析上面第1步得到的可执行文件,获得软件构件的地址信息与构件的映射关系。得到类似下面格式的映射关系<软件函数名,起始地址,结束地址>
图1给出了指令地址和软件构件的映射信息的获取的流程。
2、估算单流水线周期内微体系部件的能耗用指令级模拟器运行嵌入式软件,从中捕获动态执行的指令流的地址和指令码;把这些信息经过缓冲和速度匹配方式提供给微体系结构能耗模拟器;用微体系结构能耗模拟器模拟在流水线上模拟执行每条指令,然后根据指令对微体系部件的访问,获得一个时钟周期内微体系部件的能耗。具体实施步骤如下1、从指令级模拟器中捕获动态执行指令流和地址流指令级模拟器负责运行软件,载入软件的可执行二进制代码以后,指令级模拟器进入一个大循环,在这个循环中依次累加指令地址,从该地址取出指令,然后模拟指令执行。
(1)地址流的获取指令级模拟器在每个循环的开始依照PC(程序计数器)进行地址变换,本发明在此处获取指令地址,并缓存在地址流队列中。
(2)指令流的获取在地址变换完成后,指令级模拟器会按照变换得到的位置取指令,本发明在此处获取指令并存入指令流队列。
2、把指令流和地址流信息传递给微体系结构能耗模拟器采用一个双缓存队列,当指令和地址累积到一定数量时才一次性发送给微体系级模拟器。在缓存发送的过程中指令级模拟器和微体系结构级模拟器的速度不一致,如果指令级模拟器太快将会导致指令地址流缓冲区溢出,本方法利用操作系统提供的IPC来解决这个问题,一旦指令级模拟器太快,操作系统将会阻塞指令级模拟器,使得微体系结构级模拟器有足够的时间来处理指令和地址流。
图2给出了指令级模拟器的工作流程。
3、微体系结构模拟器执行每一条指令,获取微体系结构级别流水线部件的能耗。
从指令级模拟器获得指令和地址后,微体系结构级模拟器处理的方法和步骤(1)从双缓冲队列获取指令流和地址流(2)把获得的指令流交给微体系结构流水线(3)流水线解读指令并访问微体系部件,同时计算被访问部件的能耗。计算时机如下,参考图3a)在取指阶段,判断指令是否在cache中,如果不在,这需要计指令cache和dtlb的能耗;b)在发射阶段,要计算寄存器堆的能耗,数据dtlb和数据cache的能耗,同时根据指令的编码,判断指令要用到的运算部件,比如加法指令就计算ALU的能耗,乘法运算就计算MULT的能耗。
c)在执行阶段,计算逻辑部件的能耗,如果还涉及到数据操作,则还要计算数据cache和dtlb的能耗。如果更新了预测缓冲器,则还要计算bpred(预测缓冲器)的能耗。
d)在写回阶段要计算寄存器堆的能耗,要计算bpred(预测缓冲器)的能耗。
(4)在微体系流水线的最后一段,计算这一个流水线周期内所有部件能耗的和。
3、软件中函数的能耗在上述步骤中获得了<函数名,起始地址,结束地址>信息和单个流水线周期各部件的能耗和总能耗,利用以上信息,来估算该指令所属函数的能耗。参考图4,具体步骤如下
(1)为每个函数建立一个结构,用来存放这个时间段内该函数的能耗,初始化为0(2)在每个流水线周期取指令处,根据指令的地址(PC),对照软件符号信息,可以得知该指令所属函数。
(3)在流水线周期末尾把计算所得的单周期能耗归属给1)中计算得出的函数(4)在第一条指令运行时,找到该指令的归属函数,并记录这个函数为当前函数(5)在下一次取指令时,比较指令的归属函数是否变化,如果变化,则记录新函数为当前函数这样随着流水线的不断循环,最终能得到软件函数的能耗估算。
4、处理器以外部件能耗模型的补充(1)内存内存能耗与其Active状态成正比(idle状态忽略不计,因为对软件来讲,内存能耗消耗在对内存的存取上)。内存能耗还与访问时间有关,我们认为时间与访问内存区域的大小成线性关系。所以得到一个计算公式E=a+b*size(a,b是常量,size是访问区域大小)本发明在微体系结构模型中如下处理内存能耗1找到微体系机构模型数据CACHE缺失处,插入计算内存能耗的模块。
2找到微体系机构模型指令CACHE缺失处,插入计算内存能耗的模块。
(2)外设有一个能耗模型本发明目前提供了一个接口,可以添加外设功耗估算模块。接口在微体系级模拟器的指令解码处,只要在该处加入自己的过滤层,鉴别出该指令是访问待估算外设,就可以调用外设能耗估算模块计算外设能耗。
5、估算更粗粒度的软件构件的能耗根据函数间调用关系信息和单个函数能耗信息,合成所需要的任意粒度的软件构件能耗。函数间调用关系信息可以是静态分析源代码产生的函数调用关系树,也可以是在嵌入式软件运行时,分析得到的运行时函数调用关系树,后一种方法获得的能耗估算结果更为准确。
在微体系结构模拟器的流水线周期的最后一段,估算出嵌入式软件中单个函数在处理器上运行过程的能耗之后,进一步估算更粗粒度的软件构件的能耗的步骤包括(1)从指令级模拟器输出动态执行的指令和地址流,把这些信息提供给微体系结构能耗模拟器的同时,也提供给能耗估算模块。能耗估算模块中的函数调用关系树分析子模块根据函数符号和指令起始/终止地址之间的映射信息和动态执行地址流信息,在线分析并构造出函数调用关系树。
构造运行时的函数调用关系树的具体实施步骤如下(a)利用堆栈结构保存函数调用关系树的节点信息。读取第一条指令地址。
(b)用该地址在函数符号和指令起始/终止地址映射信息表中查找,确认其对应的函数符号,建立节点作为软件的根函数节点。并记录该指令地址到PC变量里面。
(c)取下一条指令,当前函数的起始/终止地址比较,判断该指令是否仍然在该函数内。
(d)如果该地址不在当前函数内,并且当前函数有父函数,则判断该地址是否在父函数内;如果不在父函数内,并且有祖父函数,则判断该地址是否在祖父函数内。如果在父函数内,则将当前函数节点出栈,表示当前函数返回到父函数。如果在祖父函数内,则将当前函数节点和父函数节点出栈。表示返回到祖父函数内。输出函数调用关系树的一条记录。
(e)如果该函数既不在当前函数,也不在父函数和祖父函数,则用该地址在函数符号和指令起始/终止地址映射信息表中查找,确认其对应的函数符号。如果找到,就做在堆栈重压栈,创建一个新节点,当前函数节点作为父节点,如果父节点已有子节点,就作为已有子节点的兄弟节点。并记录该指令地址到PC变量里面。新节点变成当前节点。
(f)返回(c),循环执行这个过程。直至接收到按键中断。完成运行时的软件函数调用关系树的创建过程。
(2)能耗估算模块中的软件构件能耗估算子模块,根据函数间的调用关系信息和单个函数能耗信息,合成所需要的任意粒度的软件构件能耗。
权利要求
1.一种基于模拟器的嵌入式软件运行时能耗估算方法,包括分析嵌入式软件中各构件符号文件,获取函数符号和指令起始/终止地址之间的映射信息;用指令级模拟器运行嵌入式软件,从中捕获动态执行的指令流的地址和指令码,把这些信息经过缓冲和速度匹配方式提供给微体系结构能耗模拟器,用微体系结构能耗模拟器执行指令流,获取指令流在处理器上运行过程中每个流水线周期内的能耗;根据函数符号和指令起始/终止地址之间的映射信息,分析指令流地址信息,获取每个函数的指令流信息,根据指令流在处理器上运行过程中每个流水线周期内的能耗,估算嵌入式软件中每个函数在处理器上运行过程的能耗。
2.如权利要求1所述的基于模拟器的嵌入式软件运行时能耗估算方法,其特征在于获取指令地址和软件构件之间的映射信息的步骤包括(1)把待估算软件编译成带调试信息的可执行文件(2)解析上面第1步得到的可执行文件和调试信息,获得软件构件的地址信息与构件的映射关系。得到类似下面格式的映射关系<软件函数名,起始地址,结束地址>。
3.如权利要求1所述的基于模拟器的嵌入式软件运行时能耗估算方法,其特征在于从指令级模拟器获得指令和地址后,微体系结构级模拟器处理的步骤(1)从双缓冲队列获取指令流和地址流;(2)把获得的指令流交给微体系结构流水线;(3)流水线解读指令并访问微体系部件,同时计算被访问部件的能耗;(4)在微体系流水线的最后一段插入能耗估算模块,能耗估算模块同时采用地址流和待估算软件的语义信息,计算微体系流水线周期内所有部件能耗的和。
4.如权利要求1所述的基于模拟器的嵌入式软件运行时能耗估算方法,其特征在于当嵌入式软件调用访存指令访问内存时,利用内存能耗模型,估算该次访存的能耗,并与指令在处理器上运行过程中产生的能耗相加,得到该访存指令的能耗。
5.如权利要求1所述的基于模拟器的嵌入式软件运行时能耗估算方法,其特征在于当嵌入式软件调用访存指令访问外部设备时,利用外设的能耗模型,估算该次访问的能耗,并与指令在处理器上运行过程中产生的能耗相加,得到该访存指令的能耗。
6.如权利要求1、2、3、4或5所述的基于模拟器的嵌入式软件运行时能耗估算方法,其特征在于根据函数间的调用关系信息,累加软件构件的单个函数能耗信息,得到所需要的任意粒度的能耗。
7.如权利要求6所述的基于模拟器的嵌入式软件运行时能耗估算方法,其特征在于在嵌入式软件运行时,获得函数间的调用关系的步骤包括(1)从指令级模拟器输出动态执行的指令和地址流;(2)把这些信息提供给微体系结构能耗模拟器的同时,也提供给能耗估算模块;(3)能耗估算模块中的函数调用关系树分析子模块根据函数符号和指令起始/终止地址之间的映射信息和动态执行地址流信息,在线分析并构造出函数调用关系树。
全文摘要
一种基于指令级模拟器和微体系结构级模拟器的嵌入式软件能耗估算方法,能够在嵌入式软件动态模拟运行期间收集软件的指令和地址信息,结合微体系结构部件的能耗估算模型,参照嵌入式软件运行期间指令地址与软件构件对应关系得到软件构件的能耗估算。本发明能够获得嵌入式软件各个粒度的能耗,即小到函数,大到包括应用软件和操作系统的整个系统,可以用于嵌入式软件开发过程中的能耗估算和优化。
文档编号G06F11/36GK1766848SQ200510086808
公开日2006年5月3日 申请日期2005年11月8日 优先权日2005年11月8日
发明者陈向群, 赵霞, 雷志勇 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1