非循环的指令模式的识别方法技术

技术编号:2824651 阅读:180 留言:0更新日期:2012-04-11 18:40
通过优化编译器来确定给定程序中的任何变量是否等于程序中应用到给定变量x,y…的给定非循环数学函数f(x,y…)的方法。在一个实施例中,该方法包括将函数f(x,y…)的值的位表示为输入x,y…的位的布尔函数;对于每个变量v和程序语句s,将当执行s时v取的值表示为x,y…的位的布尔函数V(s,v)(x,y…);和对于每个语句s,将执行语句的条件表示为输入x,y…的位的布尔函数C(s)(x,y…)。最后,使用布尔满足性谕示确定:对于给定变量v和程序语句s,下面的布尔表达式是否成立:C(s)(x,y…)=>V(s,v)(x,y…)=f(x,y…)。在第二实施例中,该方法包括将f(x,y…)的值表示为具有对应的判定P↓[j](x,y…)的多个函数f↓[j](x,y…);对于每个变量v和程序语句s,将当执行s时v取的值表示为多个函数V↓[j](s,v)(x,y…),每个判定P↓[j](x,y…)对应一个;和对于每个语句s,将执行语句的条件表示为多个函数C↓[j](s)(x,y…),每个判定P↓[j](x,y…)对应一个。最后,确定是否只要判定P↓[j](x,y…)和条件C↓[j](s)(x,y…)为真,则对于变量v和程序语句s,V↓[j](s,v)(x,y…)=f(x,y…)。

【技术实现步骤摘要】
【国外来华专利技术】交叉引用本申请要求于2002年11月12日提交的美国临时申请No.60/425251的权益;是于2003年3月7日提交的美国专利申请No.10/382578的部分继续;并且要求于2004年8月12日提交的美国临时申请No.60/600999的权益,通过引用将所有内容合并于此。
本公开涉及程序中的指令模式识别,本专利技术涉及通过优化编译器识别非循环模式。
技术介绍
将在这里引用并在末尾列出的参考文献合并在此,这对理解和实现本公开是必要的。定点饱和算法(fixed-point saturating arithmetic)被广泛用于媒体和数字信号处理应用中。给定B位二互补(two’s complement)运算OP,其饱和对应方(saturating counterpart)检测上溢,并且将结果设置到可表示数范围的极限:              MaxB  如果OP(x,y)上溢OPsat(x,y)= MinB  如果OP(x,y)下溢  (1)              OP(x,y),其它情况例如,依据饱和算法运算(参考文献1和2)表示在GSM标准中的语音编码解码器。诸如TI C6x、Intel IA-32和ARM之类的很多现代处理器架构实现饱和算法指令。诸如ANSI C之类的标准编程语言不提供用于饱和算法的运算符。通常,应用程序开发者加入了根据基本二互补算法实现这些运算的函数库或宏。为了在给定基本架构上获得高性能,不得不集合地编码这些库,或者使用卖家专用的库或语言扩展来编码这些库。这显然使软件开发和维护复杂化。已经-->提出了各种语言扩展和标准(参考文献3)。由于已经成立的卖家一般不愿意进行标准化,所以它们的未来是不明朗的。因此,程序员被迫在可移植性和效率之间进行折衷。解决该折衷问题的方式是编译器自动识别实现饱和算法的代码段,并且将它们转换为合适的机器指令。为了使该解决方案有效,识别算法必须足够强健,并且可以跨越不同编码类型(style)进行工作。可以以抽象语法树上的简单模式匹配开始。然而,由于需要考虑饱和加法(addition)的各种实现,因此这样的方法的限制是明显的。在美国专利申请No.10/382578中展示了这些实例。为了证明两个饱和的加法指令都等效于方程1中的定义,需要证明各种位操作序列和逻辑运算的结果之间的等效性。需要具有形式代数基础的方法来代替专门(ad-hoc)方法。在美国专利申请No.10/382578中,具体描述了用于识别饱和加法和减法的方法。本公开认识到在前述申请中的原理可以应用到任何非循环操作中,并且可以以一般术语表示。
技术实现思路
本公开的方法通过优化编译器来确定给定程序中的任何变量是否等于程序中应用到给定变量x,y...的给定非循环数学函数f(x,y...)。在一个实施例中,该方法包括将函数f(x,y...)的值的位表示为输入x,y...的位的布尔函数;对于每个变量v和程序语句s,将当执行s时v取的值表示为x,y...的位的布尔函数V(s,v)(x,y...);和对于每个语句s,将执行语句的条件表示为输入x,y...的位的布尔函数C(s)(x,y...)。最后,使用布尔满足性谕示(oracle)确定:对于给定变量v和程序语句s,下面的布尔表达式是否成立:C(s)(x,y...)=>V(s,v)(x,y...)=f(x,y...)。在第二实施例中,该方法包括将f(x,y...)的值表示为具有对应的判定(predicate)Pj(x,y...)的多个函数fj(x,y...);对于每个变量v和程序语句s,将当执行s时v取的值表示为多个函数Vj(s,v)(x,y...),每个判定Pj(x,y...)对应一个;和对于每个语句s,将执行语句的条件表示为多个函数Cj(s)(x,y...),每个判定Pj(x,y...)对应一个。最后,确定是否只要判定Pj(x,y...)和条件Cj(s)(x,y...)为真,则对于给定变量v和程-->序语句s,Vj(s,v)(x,y...)=fj(x,y...)。在任一实施例中,可以变换程序,使得通过添加指令t=f(x,y...)的调用;和在每个语句s中用对t的引用替换对变量v的每个引用,使得在s中v的值等于f(x,y...),来由可用函数f(x,y...)计算取函数f(x,y...)的值的每个变量v的值。通过失效码(dead-code)消除法消除程序变换之后不使用的指令。其中以硬件计算数学函数f(x,y...),可以变换程序,使得通过可用的用于f(x,y...)的硬件指令来计算取函数f(x,y...)的值的每个变量v的值。当接合附图考虑时,本专利技术的这些和其它方面将从下面的本专利技术详细描述中变得更加清楚。附图说明图1是合并本公开的原理的方法的第一实施例的流程图。图2是合并本公开的原理的方法的第二实施例的流程图。图3是图表和数据流组。具体实施方式将描述用于饱和算法运算的自动识别的一系列技术。在大多数情况下,识别问题仅是布尔电路等效之一。给定解决电路等效的开销,还描述基于抽象解释的一系列实际近似。实验显示出本技术在可靠地识别饱和算法的同时,具有小的汇编时间开销。本方法不限于饱和算法,而是可以应用到识别诸如进位加(add-with-carry)和算术移位之类的其它的语法(idiom)中。可以通过非循环程序段来定义饱和运算。因此,可以按位(bit-wise)地将它们的结果和中间值描述为依据输入的布尔表达式。该观察暗示出下面的解决方案:·给定非循环候选代码段,提取描述其变量的值的布尔表达式。·使用布尔表达式等效谕示(equivalence oracle),测试是否有任何表达式匹配模板。为了测试本方法的实用性,实现了采用二元决策图包(binary decisiondiagram package)BuDDy(参考文献4)的、用于饱和加法的识别算法作为谕-->示。该算法挑选候选二互补加法运算z=x+y,并且尝试发现在程序中依赖于该运算的哪些值承载其饱和值(saturated value)。对于该程序的控制流程图的每个边,该算法计算(只要可能)执行该边的条件。将该条件表示为x,y的位的布尔函数。对于每个变量,该算法将在每个边上的变量值作为x,y的位的布尔函数计算。基于BDD的算法的概要是:ExactMatch(G:程序CFG,OP:要匹配的运算){重复{-挑选候选值x和y如果没有找到,则退出-让F是OP(x,y)的位的布尔表达式-对于每个边e和变量v-计算边条件C(e)-计算变量值V(e,v)-标识程序边e和变量v,使得:∀x,y:C(e)(x,y)⇒(F(x,y)=V(e,v)(x,y))]]>(利用正在经由BDD测试的布尔表达式)对于每个候选加法运算OP(x,y),该算法形成用于饱和值的布尔表达式。其还表示执行边e的条件C(e)和依据对候选运算的输入的变量V(e,v)的值。然后在执行它们时,该算法搜索承载饱和值的程序位置(边)和变量。可以将边条件和变量值的计算表达(phrase)为标准抽象解释问题(参考文献5、6和7)。在这种情况下,抽象解释的域是候选输入的所有布尔函数的集合。在图1中显示了实施例一的该方法本文档来自技高网
...

【技术保护点】
一种通过优化编译器来确定给定程序中的任何变量是否等于程序中应用到给定变量x,y…的给定数学函数f(x,y…)的方法,该方法包括:    将函数f(x,y…)的值的位表示为输入x,y…的位的布尔函数;    对于每个变量v和程序语句s,将当执行s时v取的值表示为x,y…的位的布尔函数V(s,v)(x,y…);    对于每个语句s,将执行语句的条件表示为输入x,y…的位的布尔函数C(s)(x,y…);和    使用布尔满足性谕示确定:对于给定变量v和程序语句s,下面的布尔表达式是否成立:C(s)(x,y…)=>V(s,v)(x,y…)=f(x,y…)。

【技术特征摘要】
【国外来华专利技术】US 2004-8-12 60/600,9991. 一种通过优化编译器来确定给定程序中的任何变量是否等于程序中应用到给定变量x,y...的给定数学函数f(x,y...)的方法,该方法包括:将函数f(x,y...)的值的位表示为输入x,y...的位的布尔函数;对于每个变量v和程序语句s,将当执行s时v取的值表示为x,y...的位的布尔函数V(s,v)(x,y...);对于每个语句s,将执行语句的条件表示为输入x,y...的位的布尔函数C(s)(x,y...);和使用布尔满足性谕示确定:对于给定变量v和程序语句s,下面的布尔表达式是否成立:C(s)(x,y...)=>V(s,v)(x,y...)=f(x,y...)。2. 如权利要求1所述的方法,其中能以硬件计算出数学函数f(x,y...)。3. 如权利要求2所述的方法,其中变换程序,使得通过关于f(x,y...)的可用硬件指令计算取函数f(x,y...)的值的每个变量v的值。4. 如权利要求3所述的方法,包括:添加硬件指令t=f(x,y)的调用;和在每个语句s中用对t的引用替换对变量v的每个引用,使得在s中的v的值等于f(x,y,...)。5. 如权利要求4所述的方法,其中在通过失效码消除法消除程序变换之后不使用的软件指令。6. 如权利要求1所述的方法,其中变换程序,使得通过:添加指令t=f(x,y...)的调用;和在每个语句s中用对t的引用替换对变量v的每个引用,使得在s中v的值等于f(x,y...),来由可用函数f(x,y...)计算取函数f(x,y...)的值的每个变量v的值。7. 如权利要求6所述的方法,其中通过失效码消除法消除程序变换之后不使用的指令。8. 一种通过优化编译器来确定给定程序中的任何变量是否等于程序中应用到给定变量x,y...的给定数学函数f(x,y...)的方法,该方法包括:将f(x,y...)的值表示为具有对应的判...

【专利技术属性】
技术研发人员:梅延穆德吉尔弗拉迪米尔科特利亚
申请(专利权)人:桑德布里奇技术公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1