实时系统WCET分析方法Word格式.docx

上传人:b****3 文档编号:18278368 上传时间:2022-12-15 格式:DOCX 页数:9 大小:24.32KB
下载 相关 举报
实时系统WCET分析方法Word格式.docx_第1页
第1页 / 共9页
实时系统WCET分析方法Word格式.docx_第2页
第2页 / 共9页
实时系统WCET分析方法Word格式.docx_第3页
第3页 / 共9页
实时系统WCET分析方法Word格式.docx_第4页
第4页 / 共9页
实时系统WCET分析方法Word格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

实时系统WCET分析方法Word格式.docx

《实时系统WCET分析方法Word格式.docx》由会员分享,可在线阅读,更多相关《实时系统WCET分析方法Word格式.docx(9页珍藏版)》请在冰豆网上搜索。

实时系统WCET分析方法Word格式.docx

公认的WCET分析的定义是由P.Puschner和A.Burns给出的[1]:

WCET分析是指计算给定应用程序代码片断执行时间的上限,这里代码片断执行时间定义为执行代码片断所花费的

处理器时间。

从上述定义能够看出:

?

WCET的分析结果是实际WCET值的上界,这里不要求完全精确;

分析得到的时间是运行程序占有的处理器时,这里不考虑上下文切换引起的时间,也没有考虑整个应用程序甚至系统的WCET,考虑的只是不间断运行一个程序所占用的处理器时间;

这个时间显然和程序代码片断以及处理器特征有关。

WCET的三种分析方法:

WCET分析包括动态度量、静态分析和混合方法共3种方法[1]。

动态度量方法就是直接运行程序以测量(measure)程序的执行时间,目前使用的有随机方法、基于遗传算法的进化方法(EvolutionMethod)、模拟退火方法和统计方法。

动态度量方法很难保证所得到结果是安全的,尤其是现代高性能处理器,并且执行的输入量非常大的情况下。

静态分析方法根据程序的流信息,针对运行程序的处理器特性估算出程序的WCET。

因为程序的流信息通常是非常复杂的,而处理器尤其是现代处理器(比如高速缓存和超级流水线)的特性也很复杂,所以静态分析和计算也会变得非常复杂。

但静态分析方法能够保证得到的结果是安全的,而且能够不运行程序就获得结果,从而成为WCET分析研究的主流。

混合方法就是既包括静态分析也包括动态度量的方法。

该方法或者首先对程序进行分析,根据分析结果进行测试,或者先度量,然后在度量的基础上静态计算程序的WCET值。

静态WCET分析的介绍

静态分析的主要目标是把分析限制在小的程序块而不是整个的执行通路上。

通常静态分析针对的只是一个基本的代码块,或者是基本代码块的简单序列。

把执行通路划分成数个代码块会降低测量的时间,因为有些公用的代码块只需要测量一次即可。

从大的角度来看,静态WCET分析大概需要三个步骤。

流分析决定所有可能的路径,同时用图或者语法树来描述这些路径。

时间分析,得到基本块的执行时间,这一过程包括两个步骤:

历史依赖机制(缓存和支路预测)的分析,这一步也被叫做全局分析;

局部分析,计算基本块的执行时间。

最后,把各个基本块的执行时间按照图或者语法树描述的执行路径相加再加上额外的时间来获取整个的WCET。

WCET分析的基本思路:

为了得到精确的WCET分析值,需要获得程序流事实信息。

流事实信息通常包括循环的最大迭代次数、递归调用的最大深度、不可行路径(infeasiblepath)和其它的程序流约束信息,其中不可行路径是指对任意输入数据都不可能执行的程序路径。

在程序流信息中,对WCET分析影响较大的是循环的迭代次数和不可行路径。

要获取程序的WCET,还需要对程序的目标代码进行分析以获得实际的时间,即建立执行时间模型,此分析也称为低层分析。

对于不带cache、没有流水线的传统CISC指令,其执行时间是固定的,此时低层分析就非常简单:

一个代码段的执行时间就是其所对应的每条指令执行时间的累加。

但对于带有高速缓存和流水线以及分支预测机制等特征的现代处理器,代码段执行时间的估算就复杂得多。

高速缓存对整个程序段甚至是整个系统的执行时间都有影响,因此它是全局性的,而流水线对相邻的几条指令的执行时间有影响,因此它是局部性的。

流水线分析的典型方法是利用保留表,这也是处理器体系流水线分析的常用方法。

两条指令的执行时间就是它们对应的两个保留表连接之后,从第一条指令第一个阶(stage)到最后一条指令的最后一个阶之间的周期(cycle)数。

典型的高速缓存的分析方法是把每条指令分为不同的访问类型,根据不同的访问类型计算缓存引起的WCET。

Mueller把指令的访问类型分为4类:

alwaysmiss、alwayshit、firstmiss和firsthit,分别表示总是丢失、总是命中、第一次丢失和第一次命中。

WCET分析的关键技术:

已知特定的应用环境,实时程序的WCET取决于下列因素:

(1)实时程序执行的各种可能路径(序列);

(2)所有路径(序列)中,每个路径(序列)的每个动作(指令)所需时间。

由于不可判定性(undecidabilitv),已经被证明,在通常情况下,通过静态分析计算程序的WCET是不可能的(等同于停机问题),因此,WCET分析经常使用附加流信息(即flowfacts)来查找通过程序的最长执行路径。

可以在不同的语言层完成WCET分析,但为了获得可靠的WCET,最好在目标代码层完成,而程序员易于在源代码层提供有关代码可行(不可行)路径信息,因此,WCET分析应把源代码提供的路径信息转换成目标代码表示。

因此,WCET分析主要和下面这些技术有关。

1程序流分析技术

程序流分析目的是判定程序可能流,不考虑指令或基本块的具体执行时间。

程序执行期间,各个动作潜在的执行序列由程序源代码描述。

实时程序设计语言结构的控制语义定义语句的可能执行序列,通常,用这些信息来自动给程序的WCET定界是不够的。

研究人员通过对执行路径特性的分析,提出各种办法来描述WCET分析所需的flowfacts。

他们寻找程序注释(annotation)方法(注释机制用来定义最大循环范围、决定互斥路径等),来充分描述程序的执行频率和执行序列以及它们的相关性。

例如,文介绍通过语义分析来进行路径分析和应用符号执行(即用抽象的符号表示程序中变量的值)来识别假路径,它使用循环界和函数递归界作为flowfacts注释。

由于没有考虑

输入变量的注释和仅使用基于变量和常量简单关系的粗糙值域,该方法准确性有限。

程序流分析结果提供有关哪些函数被调用、循环多少次、IF语句是否有相关性等信息。

2路径信息转换(flowfactstransformation)技术

在进行WCET分析时,将源代码说明的路径信息转化成机器代码表示是非常重要的。

编译器,尤其是优化编译器,通过重新安排代码和执行转换以获得高效代码和达到优化目标,代码结构的这些变化,使得源代码表示的路径信息在机器代码中识别变得很困难。

如何在目标代码中识别源代码说明的flowfacts是当前WCET分析研究的热点。

目前基本上有两种途径:

其一让编译器在进行代码转换时,同时转换路径信息。

在某些情况

下(如highcost,等),调整编译器或重写编译器是不可接受或不可能的,因此,所采用的方法最好是编译器无关[12],或者仅仅需要编译器有限的支持;

其二是设法自动从机器代码或汇编代码推导出路径信息,这种方法有些困难和局限性,因为自动路径分析问题通常具有不可判定性。

3执行时间建模技术

目的是建立目标硬件结构的执行时间模型。

对于高性能的现代处理器需要特定flowfacts(先前指令执行情况)来精确建立应用环境相关的时间模型。

由于现代处理器越来越多地应用在安全关键的实时系统中,因此具有硬件加速(speedup)特征的处理器执行时间建模是当前活跃的研究课题,也是难点所在。

高性能的实时系统不仅要利用缓冲器,而且要利用流水线处理器,其复杂性取决于目标硬件特性,在先进的计算机体系结构中,一条指令的执行时间不仅取决于所执行的操作和操作数,而且取决于指令执行时硬件状态,因此,为了获得理想分析的结果,这一步要结合缓冲器分析、流水线分析等。

例如,Kim等人通过模拟数据高速缓冲器机制,大大改善了分析结果。

他们目的是减少由于动态数据装载和存储指令对WCET分析结果的不利影响。

首先,他们应用全局的数据流分析以避免动态错误分类的数据存取。

其次,通过考虑控制流信息,以数据相关性分析(data—dependencyanalysis)来减少动态装载和存储所产生的不利影响。

Healv等人介绍了模拟指令高速缓冲器的静态高速缓冲仿真(staticcachesimulation)法。

这种方法通过分析程序可能的控制流和对每次存取指令的缓冲器行为进行静态分类,如始终命中,始终失败等,最后,时间分析器使用这些分类信息来计算执行时间上界。

LPET方法:

Cache高速缓冲试图使存储速度接近现有的最快的存储器,同时以较为便宜的半导体存储器的成本提供大存储容量.通常在包含Cache的存储系统中有一个相对大而比较慢的主存储器和一个较小较快的Cache存储器,Cache包含一部分主存储器的副本,当处理器试图读取存储器中的一个字时,进行一次检查以确定这个字是否在Cache中,如果在,该字被传递给处理器,如果不在,则由固定数目的字组成的一块主存储器被读入Cache,然后该字被传递给处理器.由于访问局部性现象的存在,当一块数据被取入Cache满足一次存储器访问时,很可能下一次是访问该块中的其他字.

LPET的方法假定执行每一指令使用一固定时间,这样可以通过指令数与相应的指令执行时间之积获得总的执行时间.由于在一个基本块内的所有指令有相同的执行次数,可以考虑为一个单元,设xi是基本块Mi的执行计数,ci是基本模块的执行时间,设有N个基本模块,则总的执行时间

T=ΣNi*ci*xi

xi值受程序结构和程序变量的可能值约束,如果把这些约束用线性不等式描述,那么估计WCET的问题就变成线性估计问题.可以把线性约束分为两部分,一是程序结构约束,由程序控制流程给出;

二是程序功能约束,通常由用户给出如循环边界和其他的路径信息。

IPET约束系统既可以用整数线性规划技术解决(ILP),也可以用约束解决技术CSP解决。

由于有可用的有效ILP解决器,ILP成为最流行的计算方法。

约束解决技术允许表达更复杂的约束,但一般会花费更长的时间。

程序流事实分析:

程序流事实用来确定程序可能的执行路径,也就是程序的动态行为。

流事实分析的结果是诸如哪些函数得到调用、循环的迭代次数、不同的if语句之间的依赖关系等信息。

因为此问题一般是计算处理,所以通常都进行简化和近似的分析。

但此分析必须遵从安全的路径信息,即要考虑到所有的可行路径。

流事实信息分析包括手工标注和自动分析两种。

手工标注是用户通过与WCET工具的交互,给源程序代码添加标注(annotation),或者在程序代码外面给出需要的信息。

比如Kirner等通过用额外的语法来扩充C语言以定义循环的界限和路径信息,从而允许流信息进入源程序代码。

rjesson使用C代码中的#pragmas添加标注。

手工标注对程序员来说是个很大的负担,因为有时即使是一个很小的程序想标注出来也是困难的,同时手工标注容易出错。

因此,最好能够通过自动流分析获取需要的信息。

自动流信息分析通过分析程序代码来获取流信息,自动流分析通常获得循环的执行界限和循环中的不可行路径。

程序流事实分析方法:

1直接计算

Healy等[11]分析编译后的目标代码,他针对依赖于归纳变量的循环使用特定的算法,自动获取循环的界限。

其分析包括4步:

(1)标识循环中影响循环执行次数的条件分支(称为迭代分支)。

(2)对每一个迭代分支,计算什么时候每个被标识分支能够影响改变自身的结果(3)确定这些分支能够到达的循环迭代的范围。

(4)计算循环迭代的最小和最大次数。

与Healy方法类似,Holsti等在目标代码层使用PresburgerArithmetic计算基于计数循环的循环界限,Pres2burgerArithmetic是指整数算术的子集。

同样,对于非正交多重循环,Colin等使用一组数学表达式[Maxiter,counter]对每一个循环进行标注,其中Maxiter是循环的最大数目,counter是循环计数值。

标注之后,使用外部工具Maple对数学表达式进行符号计值,以计算内层循环的数目。

根据编译器产生的基本块中赋值对控制变量的作用(包括谓词和迭代范围)以及分支谓词与分支谓词之间的关系,文自动确定循环中的不可行路径、循环中路径的执行范围和执行次数。

2抽象解释

抽象解释是一种形式化的程序分析方法。

Gustafsson和Ermedahl[16]使用抽象解释对源代码进行自动分析以获取程序流信息。

他们把程序中改变变量值的位置称为控制点i,把该点所有变量a的可能取值组合称为环境σ,即

σhi={a1|?

v1,?

am|?

vm}

这里h是指循环中的第h次迭代,v是变量a可能的取值或取值范围。

对条件语句,把环境按照条件分为两个环境:

S〖if(C)S1elseS2〗σ={σ2,σ4}

其中,σ1=C[C]σ,σ2=S[S1]σ1,σ3=C[C]σ,σ4=S[S2]σ3。

C[?

]是条件语义函数,S[?

]是条件语句函数。

语义函数根据依赖的规则,把一个环境修改为另一个环境。

比如,

σ(x)=0..10,令σ1=C[x<

4]σ,则σ(x)=0..3;

令σ3=C[(x<

4)]σ,则σ(x)=4..

10;

令σ1=S[x=x+2]σ,则σ(x)=2..12。

根据操作语义展开循环计算循环的迭代次数:

S〖while(C)S〗σ=S〖if(C){S;

while(C)S}〗σ

当存在一个变量,该变量在一个环境下其值为空,则说明该环境对应的路径为不可行路

径。

因为环境的个数会随着分支和循环呈指数级增长,为了减少环境的个数,该方法在循环尾部(出口之前或者回到循环头节点之前)合并环境。

Gustafsson和Ermedahl的方法虽然能够根据程序语义获取循环的最大和最小执行次数,标识不可行路径,甚至判断无法执行的代码(deadcode)等其他信息,但该分析方法无法确定分析终止。

3一般抽象

Schuele使用带时间标记的有限自动机为系统建模,通过寻找初始状态与终止状态之间最短路径来确定汇编程序的WCET。

为了减少计算复杂度,使用程序切片技术删除与控制流中与控制转移无关的指令,从而加快WCET分析。

4mode和Scenario

在一定的输入变量范围内,程序往往会执行某种固定的轨迹,这种固定的轨迹称为程序的模式(mode)。

Chapman等人通过人工标注的形式,在程序中插入标记,把程序分成不同的模式。

针对指定的模式,按照程序的语法树结构(Timeschema),计算其WCET值。

同样针对Timeschema,有人针对情节(Scenario)进行研究。

一个情节是输入数据的特定类型定义的程序行为。

情节是模式的特例。

自动发现情节步骤包括5步:

(1)确定可能影响程序执行时间的参数。

检查那些在程序开始读取数据,在程序剩余部分保持不变的程序参数。

这些参数只有一个地方改变参数的值;

(2)计算这些参数对程序WCET的最大影响。

这些参数v的影响用影响系数IC(influence

coefficient)表示。

IC(v)表示的是参数v的不同值所能引起的程序WCET的最大变化。

通过后序遍历程序的抽象语法树计算每个语句s的IC(v):

ICs(v)=contribution(s)+max

x?

successors(s)(ICx(v))

语句s的IC(v)包括两部分:

一个是语句s的贡献,一个是语句s后续语句的IC。

因为是后序遍历程序,所以后续语句的IC总是已知的。

如果v出现在if语句的条件表达式中,则if语句的贡献是两个分支语句的WCET之差。

如果是循环语句,则该语句的贡献是循环体的第一个语句乘以循环的迭代次数。

(3)根据这些参数及其影响,按照情节对应用程序进行划分;

(4)产生针对每个情节的源码,利用Timeschema估算其WCET;

(5)使用下面公式计算整个程序的WCET:

WCET(app)=max

S?

Scenarios(WCET(S))

存在问题:

提出WCET分析概念已有十多年了,在此期间,许多不同的WCET分析方法和方案被提出来,

针对这些方法的分析工具实现和使用都比较复杂。

前面已经分析过,实时程序的WCET取决于应用程序执行的各种可能路径和所有路径中每个路径的每个动作所需时间。

很明显,这两个因素不仅决定代码的WCET,而且决定了WCET分析的复杂性。

其中,动作(指令)的可能路径取决于解决这个问题的算法和编译器编译期间处理的代码;

每个动作(指令)所需的时间取决于动作执行的机器(硬件)特征和结构。

下面分别讨论这两个因素对WCET分析复杂性的影响。

1软件优化

实时程序设计者使用在非实时应用中已证明有效的算法和程序设计技术。

在非实时应用中,大多数算法速度优化是追求的主要目标,时间可预估(测)不是努力的主要目标。

在大多数情况中,非实时算法执行的动作是基于输入数据的,然而,输入数据相关控制判断(Input—datadependentcontroldecisions)引起程序在不同的路径上执行具有不同的执行时间,因此,WCET分析需要考虑的不同情况很多,从而导致WCET分析变得很复杂。

为此在软件上要设法摆脱数据相关性影响,通过降低输入数据的相关性,以减少WCET分析需要考虑的路径数目,从而也降低WCET分析的复杂性。

根据这个思路,我们可以采用“单一路径”方案,这种方案能产生时间可预估的程序。

它的中心思想是产生性能和输入数据无关的程序,因而始终在一条并且只有一条可能的路径上执行。

单一路径程序可以通过代码变换原理,以消除程序中数据相关分支语句。

2硬件加速

这主要体现在分级(层)存储体系结构中,如高速缓冲器。

指令或数据装入(保存在)小容量的快速存取的高速缓冲器,这样可以提高数据和指令的存取速度。

哪些数据被装入、保存和取代缓冲器内容,通过启发式推测(heuristicsspeculation)完成,即推测将来哪些数据项被存取,使用推测判断机制导致内存存取时间变化。

各种特定内存存取时间,取决于先前在高速缓冲器的操作状态,内存存取时间的变化和实际内存存取时间和过去状态的相关性导致WCET分析变得复杂。

与非实时应用相反,(强)实时应用主要要求时间可预估,因此,支持WCET分析的正确的硬件设计目标应该是时间可预估性。

为了达到这个目的,通过使用对高速缓冲器内容实施绝对控制的内存分级体系,而不是依靠推测。

如预取策略(prefetching

strategies)使高速缓冲器内容和存取时间易于预测控制。

新进展:

传统的静态时间分析的研究,是在计算过程中,是把每条汇编指令的CPU时间作为一个确定值来处理,最后得到的程序运行时间也随之为确定值。

可见,传统的WCET分析没有考虑“不确定性”。

这种做法已经显得不合理:

?

因为高速缓存、多段流水线、分支预测、指令调度等技术的出现,使得程序运行时间不是确定值;

单一浮点指令的运行时间本身存在峰值、谷值、最可能值等。

程序的运行时间不是一个单一值,而是一个区间,浮点型指令占优的程序更是如此。

对时间区间的研究属于概率WCET(pWCET)的范畴,这是2003年才出现的新概念,其目的是决定代码段的最大执行时间(WCET)的概率分布。

2003年,StefanM.Petters提出采用了极值统计理论来界定程序执行时间区间。

其做法是将程序运行多次,每次的输入是随机值,记录每次运行的时间,绘成曲线后用Gumble概率

函数逼近,筛选出时间极值。

Stefan的方法是由已观测到的时间值去推测未观测到的时间值的出现概率,它需要运行程序,所以不是纯粹的静态分析。

与传统的WCET分析相比,Stefan的方法探索了运行时间的不确定性,然而,它需要目标机来运行程序。

在航天领域,很多情况下目标机昂贵或对实时性要求高,不可能让未经检验实时性的程序在目标机上运行,这时,Stefan的方法难以有实际应用。

研究热点:

(1)WCET分析计算结果的可视化是一个方向;

(2)如何更好地测定先进处理器特征的作用,即解决具有先进体系结构处理器执行时间模型问题;

(3)研究与语言及硬件平台无关的可移植的WCET分析框架,即WCET分析的可移植性研究;

(4)如何将静态分析(WCET分析、调度分析)和动态测量结合在一起,即研究混合处理方法,以提高WCET分析的可信度。

参考文献:

[1]ATime-PredictableExecutionModeforSuperscalarPipelineswithInstructionPrescheduling,

ChristineRochange,PascalSainrat[2]AbstractingFunctionalityforModularPerformanceAnalysisofHardReal-TimeSystems,

ErnestoWandeler,LotharThiele

[3]SatisfyingRealTimeConstraintswithCustomInstru

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1