CN101278262A - 非循环的指令模式的识别方法 - Google Patents

非循环的指令模式的识别方法 Download PDF

Info

Publication number
CN101278262A
CN101278262A CNA2005800273826A CN200580027382A CN101278262A CN 101278262 A CN101278262 A CN 101278262A CN A2005800273826 A CNA2005800273826 A CN A2005800273826A CN 200580027382 A CN200580027382 A CN 200580027382A CN 101278262 A CN101278262 A CN 101278262A
Authority
CN
China
Prior art keywords
variable
value
statement
function
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2005800273826A
Other languages
English (en)
Inventor
梅延·穆德吉尔
弗拉迪米尔·科特利亚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Aspen home company
Original Assignee
Sandbridge Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sandbridge Technologies Inc filed Critical Sandbridge Technologies Inc
Publication of CN101278262A publication Critical patent/CN101278262A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

通过优化编译器来确定给定程序中的任何变量是否等于程序中应用到给定变量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...)的值表示为具有对应的判定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...)=f(x,y...)。

Description

非循环的指令模式的识别方法
交叉引用
本申请要求于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中显示了实施例一的该方法。
使用该第一实施例检测饱和加法的时间很长,例如,尝试证明加法是饱和加法需要10毫秒/每次尝试。甚至在添加了过滤大多数加法的试探(heuristic)之后,使用BDD也可能使编译时间增加数十秒。尝试使用该方法识别饱和乘法,但是在形成初始相乘的BDD时会用光存储器空间。例如,随着硬件和/或布尔表达式等效或可满足性谕示的改进,可以将第一实施例用于饱和乘法。
在使用当前硬件和布尔解算器(solver)有困难的情况下,开发用于发现饱和算法运算的快速近似算法作为第二实施例。构建描述程序变量的值的布尔表达式的近似。通过构建,将近似限制在一定大小,并且可以针对等效进行快速测试。
可以使用多种语法(如,全范围、子范围)实现给定饱和运算(如,加法),并且可以以多种方式实现每种语法。可以依据语句和变量的简单属性来描述每种语法。这可以允许程序段的等效而不需要解决一般布尔可满足性。
可以将语法识别的问题定义为如下:
·给定计算二互补运算的语句:z=x OPy
·给定根据输入x,y和结果z的饱和值的定义。该定义必须是判定形式:
Figure A20058002738200081
·目标是标识程序中等于OPsat(x,y,z)的值例如,可以将全范围加法语法定义为:
Figure A20058002738200082
在下面显示的GSM EFR编码解码器中的L_add函数中,在14行上的返回语句中的L_var_outvariable的值匹配该定义。如果这个可以自动证明,则可以使用饱和加法指令(如果这在目标基础架构中是可用的话)来计算返回值。
1:Word32 L_add(
2:Word32 L_var1,Word32 L_var2
3:){
4:Word32 L_var_out;
5:L_var_out=L_var1+L_var2;
6:if(((L_var1^L_var2)&MIN_32)==0)
7:{
8:if((L_var_out^L_var1)&MIN_32)
9:{
10:L_var_out=
11:(L_var1<0)?MIN_32:MAX_32;
12:}
13:}
14:return NATIVE_ADDS AT(L_var 1,L_var2);
15:}
然后失效码消除法会产生最佳代码:
1:Word32 L_add(
2:Word32 L_var 1,Word32 L_var2
3:){
4:return NATIVE_ADDS AT(L_var1,L_var2);
5:}
最初,输入程序已经被降低为三地址格式,该格式被表示为语句的控制流程图G=(N,E)。节点包括唯一的开始和结束节点、形如x:=OP(y,z)的赋值语句、形如IF(x≠0)的切换和显示控制流程归并(merge)。
如果仅有的可用标量类型是32位int(整数)和16位short(短整数),则可以将推论容易地归纳到其它位宽的运算,诸如8位有符号和无符号像素运算。
给定程序位置和变量x和y,并且任务是标识变量v,其在所有的程序执行中承载给定函数f(x,y)的值。形式上,我们给出:
·候选程序边e0和候选变量x,y
·试探证据(witness)z。该证据帮助简化判定。在饱和运算的情况下,通常是非饱和运算的结果。
·由蕴涵式的析取(disjunction of implication)表示的模式函数f(x,y,z):
Figure A20058002738200091
目标是标识边e和变量v,使得当执行e时v的值是f(x0,y0,z0),其中x0、y0和z0是在最近执行的候选边e0中候选变量的值。
在本实施例中,对于给定的候选边和候选变量,对方程2中的每个条件执行一次抽象解释。在抽象解释的每个相继实例中,在判定Pj为真的假设下,计算对变量值V(e,a)和边条件或声明(assertoin)A(e)的近似。
如果执行程序边,则边声明A(e)是为真的条件。作为候选x,y和证据z的函数,计算边声明A(e)。变量值V(e,v)表示关于当执行边e时的v值的知识。V(e,v)也是x、y和z的函数。
修改程序来在候选边e0将x、y和z的值保存在临时变量x0、y0和z0中。然后在每个边e,该声明assert(A(e)(x0,y0,z0)),以及对于每个变量,声明assert((v==V(e,v)(x0,y0,z0))都满足。
给定以上定义,如果下面公式3成立,则变量a承载模式函数f(x,y,z)的值:
换句话说,对于方程2中的每个条件Pj,测试(a)执行边e,或(b)执行边e,并且变量a等于合适的情况fj。在图2中示出第二实施例。
为了近似声明和值,使用两种格(lattice),一种近似条件或判定,而另一种近似值。Φ表示判定的格,而Λ表示值的格。这些格必须满足下面的要求:
·Φ和Λ都必须包括顶端和底端元素。都必须定义相遇运算符和比较运算符。比较运算符对于合式的格是必要的。相遇运算符用在程序合并点。
·Φ必须定义合取(conjunction)、析取(disjunction)和非(negation)。Φ必须包括真值和假值。Φ必须遵守:必须持有用于合取、析取、真和假关系的通用代数规则。
·对于在中间程序语言中的每个算术运算OP,格Λ必须定义解释OP:A×A→Λ。(我们假设所有操作是二进制的)。
将值链接到相应判定的两个函数:
·MayNonZero:Λ→Φ函数测试值是否可能是非零的。
·MayZero:Λ→Φ函数测试值是否可能是零。
MayNonZero和MayZero函数不一定产生矛盾的结果。有时候它可能需要将值同时近似为可能为零和可能为非零。
给出这些定义、依据边声明A(e)的程序的抽象解释和与候选边e0相关的变量值V(e,a),定义候选变量x,y和证据z。在图3中示出了该方程。这是较标准方程组。用于归并语句的方程考虑Wegman-Zadeck型单边条件传播(参考文献8和9)。
整体算法概括如下:
ApproxMatch(G:程序CFG,OP:要匹配的运算)\{重复\{
-试探性挑选候选值x,y和证据z
如果没有发现,则退出
-对于每个蕴涵式Pj(x,y,z)=>fj(x,y,z)(在模式函数中){
-假设Pj为真
-使用抽象解释计算边声明A(e)和变量值V(e,v)
-标识满足下式的边e和变量v:
Figure A20058002738200111
\}\}\}
下面是如何将本方法应用到乘法和全范围和子范围加法的实例。可以直接将我们的技术扩展到识别饱和减法。要说明的进一步实例包括识别进位相加和算术移位。还可以将该方法应用到诸如截短(clipping)之类的运算上。
A.全范围饱和加法
为了匹配全范围饱和加法,从非饱和加法运算z=x+y开始,输入变量x和y是候选变量。输出变量z是证明。模式函数为:
Figure A20058002738200112
可以通过符号测试来定义上溢和下溢判定:
在该定义中比较运算符使用32位二互补算法。
全范围饱和加法的各种实现依据x、y和z的符号位按判定分支(branch),和/或执行符号位的位操作。因此,将边声明表示为符号位(和更多)的判定。另外,跟踪任何变量v的位段[p,p+n]是否等于x、y或z的位段[q,q+n]。
格Φ是依据六个输入变量的所有判定的集合:
σx≡(x<0)x的符号位
σy≡(y<0)y的符号位
σz≡(z<0)z的符号位    (6)
ζx≡(x=0)
ζy≡(y=0)
ζz≡(z=0)
作为两个格的乘积来建立值格Λ=Φ32×Γ:
·Φ32是Φ中判定的长度32的所有向量的格。Φ32用于根据x、y和z的符号位近似变量位。
·Γ={T xp,q,n,yp,q,n},zp,q,n,⊥}用于将变量近似为x、y和z的位的子范围。将变量v近似为xp,q,n意味着v的位v[p,p+n]与x的位x[q,q+n]相同。
在Λ中每个元素是<ν,ρ>对,其中在<ν,ρ>中,ν∈Φ32,而ρ∈Γ。ν是向量分量,而ρ是位范围(bit range)分量。
依据向量分量的算术运算符的解释OP是更直接的,也就是说,对于任何算术运算,可以为结果的每一位导出判定。试探地,除了可以转换为移位或按位的那些外,不解释乘法、除法和余数运算。将这些运算的结果(适当地)设置成⊥的向量。
依据位范围分量的解释也是很简单的。关于常数的常数移位和按位运算产生不是⊥的输出。不解释所有其它运算。
作为解释的实例,考虑等同比较:c:=(a=0)。如果对于ν∈x,y,z,a的位范围分量是ν0,0,31的形式,则必须将c的向量分量设置为<0...0ζv>。
MayNonZero和MayZero运算符测试输入值的表示是否可以分别为非零或零。MayNonZero形成Φ32分量中所有位的析取。如果析取一般(trivially)不是假,则MayNonZero返回1。类似地,如果析取一般不是真,则MayZero返回1。
一般(trivially)编码用于模式函数的条件Pj
Underflow(x,y,z)≡σx∧σy∧σz    (7)
Figure A20058002738200122
候选边e0的初始值是:
V(e0,x)=<<σx⊥...⊥>x0,0,31>
V(e0,y)=<<σy⊥...⊥>y0,0,31>    (8)
V(e0,z)=<<σz⊥...⊥>z0,0,31>
为了声明抽象解释在本实例中如何工作,考虑下面的实例:
1:int addsat_32bit(int x,int y){
2:int z=x+y;
3:int t1=(~(x^y)&(x^z));
4:int t2=MIN32&t1;
5:if(t2){
6:int t3=(x>>31)&1;
7:z=MAX32+t3;
8:}
9:return z;
10:}
只有t1的最高有效位(行3)可以被表示为:
Figure A20058002738200131
与MIN32(即,0x80000000)合取孤立了t1的最高有效位。因此行4上的t2的值的表示为:
Figure A20058002738200132
由于隐含的测试是t2≠0,因此通过t2的位的析取来给出执行行6和7的语句的条件:
Figure A20058002738200133
因此,行6和7的声明是:
Figure A20058002738200134
Figure A20058002738200135
其中如方程7所给出的那样,P是当前假设(上溢,下溢,二者皆否)。很容易看到,如果我们假设“二者皆否”则A1=0,而在其它情况下则不为0。因此,在“二者皆否”的假设下,在候选边上只有对z的赋值到达返回语句(行9)。
针对行6上的t3的所计算的近似是:
V3=<<0,0...0,σx>x0,31,0>
即,t3承载x的符号(第31)位。在上溢的假设下σx=0。因此,将常数MAX32赋给z。当假设下溢时,σx=1,并且将MAX32+1==MIN32赋给z。
以上所有都证明了当上溢发生时值MAX32到达返回语句,当下溢发生时MIN32到达,在其它情况下则为z的原始值到达。这依次证明了由饱和值到达返回语句。
B.子范围加法
用于子范围加法的模式函数是:
Figure A20058002738200141
在该定义中的比较使用32位二互补算法。
子范围加法更简单。候选加法z=x+y,其中将x和y声明为16位“short”。依据对z的范围测试表示上溢、下溢和非溢出条件:
Overflow(x,y,z)≡(z∈]Max16,+∞[)
Underflow(x,y,z)≡(z∈]-∞,Min16[)
NoOverflow(x,y,z)≡(z∈]Min 16,Max16[)
因此,对上溢和下溢假设执行范围传播,而对非溢出假设传播“该变量等于z”的属性。
C.乘法
考虑定点饱和乘法的实现(16位到32位):
1:#define MAX32(0x80000000)
2:int mult_sat(short x,short y){
3:int z=x*y;
4:if(z==0x40000000){
5:z=MAX32;
6:}
7:else{
8:z=2*z;
9:}
10:return z;
11:}
事实上,更通用的语法是“位移k乘法”:
1:#define MAX32(0x80000000)
3:#define k()
2:int mult_sat_k(short x,short y){
3:int z=x*y;
4:if(z==0x40000000){
5:z=MAX32;
6:}
10:return(z>>(k-1));
11:}
这计算被表示为32-k位的定点数的x和y的乘积。通常k=16。
为了确定当上溢发生时赋给的值,使用下式定义的附加映射来简单地执行常数传播
V(e0,x)=0x8000
V(e0,y)=0x8000
V(e0,z)=0x40000000
为了确定当没有溢出发生时赋给了哪些值,跟踪变量等于哪个常数(如果有的话),已知不等于哪个常数,以及变量是否包含来自x、y和z的位的范围。在这种情况下,值格是乘积:
Λ=C×C×Γ
其中格Γ具有与实例A中的Γ相同的含义。常常跟踪位范围。C是通常用在常数传播的格。C格包括与C相同的元素,但是其具有相反的含义:如果已知从不等于该常数,则将const∈C赋给变量。
用于算术运算的解释是直接的。必须对定义用于比较的解释的规则予以特别关注。经由下面的规则解释等同cmpeq测试:
Figure A20058002738200151
cmpeq(<c,_,_>,<_,c,_>)=<0,⊥,⊥>为其它比较定义类似的规则。用于乘法的特殊规则是:
mul(<0x8000,_,_>,<,_0x8000_>)=<_,0x40000000,_>
即,如果我们将0x8000与不是0x8000的其他数相乘,我们永远不能获得0x40000000。
必须对不创建诸如<0,0,_>之类的矛盾表示予以特别关注:从不创建具有C的元素和被设置为常数的C的元素二者的数组(tuple)。如果后者被设置为常数,则将前者设置为⊥。
为了简化分析,将经移位的饱和乘法的定义分为三种情况,其中两种处理非溢出条件,给出模式函数:
Figure A20058002738200161
在第一种情况下,使用在候选边的x的初始值(为<⊥,0x8000,x0,0,15>)执行抽象解释。在第二种情况下,将类似的格值给予y。在两种情况下,证据z被赋予<⊥,0x40000000,z0,0,31>。在第三种情况下,上溢始于赋值:
V(e0,x)=<0x8000,⊥,x0,0,15>
V(e0,y)=<0x8000,⊥,x0,0,15>
V(e0,z)=<0x40000000,⊥,z0,0,31>
D.进位加
给定加法运算z=x+y和进位输入变量(carry-in variable)cin,标识保持进位输出位(carry-out bit)的变量。标识加法的结果是很简单的:使用全局值编号来标识保存z+cin的变量。基于先前程序分析(诸如范围传播)的重要假设是cin∈{0,1}。实例为:
1:int addc(int x,int y,
2:int c_in,int*p_c_out){
3:int z=x+y;
4:int c_internal;
5:int c_out;
6:assert(c==0||c==1);
7:if((x<0)&&(y<0)){
8:c_internal=1;
9:}
10:else if(MIN32&((x^y)&~z)){
11:c_internal=1;
12:}
13:else{
14:c_internal=0;
15:}
16:if(z==OxFFFFFFFF){c_out=c_in;}
17:else{c_out=c_internal;}
18:*p_c_out=c_out;
19:return(z+c_in);
20:}
为了定义关于进位输出位的模式函数,首先将“carry internal”位定义为:
Figure A20058002738200171
这是加法$z=x+y$的进位输出位,不用存在额外的进位输入位。在进位输入位存在时,将进位输出函数定义为:
Figure A20058002738200172
这是模式函数。重新使用先前各节的某些处理以便检测进位输出计算。在下面的假设下执行抽象解释:
z=0xFFFFFFFF
z≠0xFFFFFFFF
需要传播“等于常数”和“不等于常数”信息。我们利用C和为检测饱和乘法引入的C格。检测CarryInternal的计算,其为符号位σx、σy、σz和进位输入位cin的布尔判定。为此,我们利用Φ32。总体上,值格是Λ=C×C×Φ32
观察到条件z=0xFFFFFFFF还暗示x和y必须具有不同的符号。所以对于第一情况,在下面的假设下执行抽象解释:
Figure A20058002738200173
在候选边,将格值赋给该变量z:
V(e0,z)=<0xFFFFFFFF,,⊥,<1,1,...1>>
为了实现z≠0xFFFFFFFF假设,将初始值赋给z:
V(e0,z)=<⊥0xFFFFFFFF,<σz,⊥,...⊥>>
E.算术移位计算
ANSIC标准不定义当第一操作数是带符号型时右移位运算符“x>>y”从左侧引入哪些位。该问题是它引入x的符号位还是零。在第一种情况下,称为“算术移位”,而在第二种情况下,称为“逻辑移位”。
这里是算术移位的一些可移植实现:
    int arith_shift_1(int x,int y){
      if(y<0){
          return x<<(-y);
    }
    else if(y>=31){
        return(x<0)?-1:0;
    }
    else{
       int z=(x>>y);
       int t=(1<<(31-y));
       if(z&t){
           z=z |(0xFFFFFFFF<<(32-y));
        }
        return z;
    }
}
int arith_shift_2(int x,int y){
  if(y<0){
      return x<<(-y);
   }
   else if(y>=31){
       return(x<0)?-1:0;
   }
   else{
      if(x<0){
          return~(~x>>y);
      }
      else{
         return x>>y;
      }
   }
}
观察到(a)变量被移位了作为y中的线性量那么多,(b)大多数变量被分到两个位范围[0:p(y)]和[p(y)+1,31],其中p(y)是y的线性函数。两个位范围的值是常数,或x的子范围,也可能被相反。
将算术移位的定义分为5种情况:
            (x<<(-y))如果y<0
            -1         如果y≥31∧x<0
Shra(x,y)=0          如果y≥31∧x≠0\
            (x>>y)   如果0≤y≤30和x≥0
Figure A20058002738200191
如果0≤y≤30和x<0
(在以上公式中“本地(native)”右移运算符的符号扩展行为是不相关的)
为了确定对于以上5种情况中的每一种执行哪些语句,传播范围和“等于常数”和“不等于常数”属性。为了确定哪些变量等于x<<(-y)、-1、0、x>>y、
Figure A20058002738200192
执行全局值编号(global value numbering)。观察到正在重新使用早先引入的或希望在成熟的编译器中实现的值格。
本方法允许编译器代替硬件实现,其中当已经识别了身份时,运算符的软件实现也是可用的。可以变换程序,使得通过添加指令t=f(x,y...)的调用来由可用函数f(x,y...)计算取函数f(x,y...)的值的每个变量v的值;和在每个语句s中用对t的引用替换对变量v的每个引用,使得在s中v的值等于f(x,y...)。在通过失效码消除法消除程序变换之后不使用的指令。其中以硬件计算数学函数f(x,y...),可以变换程序,使得通过关于f(x,y...)的可用硬件指令来计算取函数f(x,y...)的值的每个变量v的值。
用于自动识别饱和算法运算的以上技术具有相当低的编译时间开销。此外,这些技术是比较通用的,原因在于甚至当使用很不同的语法表示时它们也能识别潜在的饱和算法运算。该方法的通用性在于以语义方式开发潜在语义概念,而不是进行语义模式匹配。此外,与专门方式相反,抽象解释允许应用程序系统地进行推理。一旦已经确定合适的语义元素并构建格,就可以系统地确定用于每个运算的翻译。
虽然已经详细描述和图解了本发明,但是应该理解,这仅是用于图解和实例的目的而做出的,并且不是进行限制。仅由所附权利要求的术语限定本发明的范围。
参考文献
[1]E.T.S.Institute,Digital cellular telecommunications system,ANSI-Ccode for the GSM Enhanced Full Rate(EFR)speech codec.(GSM 46.053),ftp://ftp.3gpp.org/specs/archive.
[2]——,Digital cellular telecommunications system,ANSI-C code for theGSM Adaptive Multiple Rate(AMR)speech codec.(GSM 26.073),ftp://ftp.3gpp.org/specs/archive.
[3]DSP-C Proposed Standard,www.dsp-c.org.
[4]J.Lind-Nielsen,BuDDy-A Binary Decision Diagram Package,http://www.itu.dk/research/buddy.
[5]P.Cousot and R.Cousot,″Abstract interpretation:a unified lattice modelfor static analysis of programs by construction or approximation of fixpoints,″inPOPL 1979.
[6]——,″Systematic design of program transformation frameworks byabstract interpretation,″in Proceedings of the 29th annual ACMSIGACT-SIGPLAN symposium on Principles of programming languages.ACMPress,2002,pp.178-190.
[7]——,″Automatic synthesis of optimalinvariant assertions:Mathematicalfoundations,″in Proceedings of the 1977 symposium on Artificial intelligence andprogramming languages,1977,pp.1-12.
[8]M.N.Wegman and F.K.Zadeck,″Constant propagation withconditional branches,″TOPLAS,vol.13,no.2,pp.181-210,1991.
[9]K.Pingali,M.Beck,R.Johnson,M.Moudgill,and P.Stodghill,″Dependence flow graphs:an algebraic approach to program dependencies,″inProceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles ofprogramming languaggs.ACM Press,1991,pp.67-78.

Claims (16)

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...)。
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...)的值表示为具有对应的判定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...)。
9. 如权利要求8所述的方法,其中能以硬件计算出数学函数f(x,y...)。
10. 如权利要求9所述的方法,其中变换程序,使得通过关于f(x,y...)的可用硬件指令计算取函数f(x,y...)的值的每个变量v的值。
11. 如权利要求10所述的方法,包括:
添加硬件指令t=f(x,y)的调用;和
在每个语句s中用对t的引用替换对变量v的每个引用,使得在s中的v的值等于f(x,y,...)。
12. 如权利要求10所述的方法,其中在通过失效码消除法消除程序变换之后不使用的软件指令。
13. 如权利要求8所述的方法,其中变换程序,使得通过:
添加指令t=f(x,y...)的调用;和
在每个语句s中用对t的引用替换对变量v的每个引用,使得在s中v的值等于f(x,y...),
来由可用函数f(x,y...)计算取函数f(x,y...)的值的每个变量v的值。
14. 如权利要求13所述的方法,其中在通过失效码消除法消除程序变换之后不使用的指令。
15. 如权利要求8所述的方法,其中编译器根据判定Pj(x,y...)或函数fj(x,y...),使用程序值的近似来确定条件Cj(s)(x,y...)是否成立,以及是否只要Pj(x,y...)成立则Vj(s,v)(x,y...)=fj(x,y...)。
16. 如权利要求15所述的方法,其中该近似是应用到全体变量或变量的位范围的常数传播、全局值编号、范围传播的一个或多个组合。
CNA2005800273826A 2004-08-12 2005-08-11 非循环的指令模式的识别方法 Pending CN101278262A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US60099904P 2004-08-12 2004-08-12
US60/600,999 2004-08-12

Publications (1)

Publication Number Publication Date
CN101278262A true CN101278262A (zh) 2008-10-01

Family

ID=35908126

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2005800273826A Pending CN101278262A (zh) 2004-08-12 2005-08-11 非循环的指令模式的识别方法

Country Status (7)

Country Link
US (1) US8056064B2 (zh)
EP (1) EP1779240A2 (zh)
JP (1) JP2008510230A (zh)
KR (1) KR20070040805A (zh)
CN (1) CN101278262A (zh)
TW (1) TW200622904A (zh)
WO (1) WO2006020729A2 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8056067B2 (en) * 2006-09-29 2011-11-08 International Business Machines Corporation Method, computer program product, and device for reducing delays in data processing
US7543266B2 (en) 2006-11-20 2009-06-02 Microsoft Corporation Lock-free state merging in parallelized constraint satisfaction problem solvers
US8826255B1 (en) * 2007-06-18 2014-09-02 The Mathworks, Inc. Restructuring control flow graphs generated from a model
JP5039948B2 (ja) * 2007-10-30 2012-10-03 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムを最適化するコンパイラ
WO2010070384A1 (en) 2008-12-17 2010-06-24 Freescale Semiconductor, Inc. Compiler optimisation like idiom recognition through pattern matching using value numbering
US9213531B2 (en) * 2014-05-01 2015-12-15 Google Inc. Methods to eliminate extra memory loads while accessing global variables in position independent code
US10235190B2 (en) 2016-12-14 2019-03-19 International Business Machines Corporation Executing instructions to store context information based on routine to be executed
US20180165073A1 (en) * 2016-12-14 2018-06-14 International Business Machines Corporation Context information based on type of routine being called

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1091395A (ja) * 1996-09-13 1998-04-10 Toshiba Corp プロセッサ
US6631392B1 (en) * 1999-07-30 2003-10-07 Mips Technologies, Inc. Method and apparatus for predicting floating-point exceptions
US6363523B1 (en) * 1999-11-12 2002-03-26 Sun Microsystems, Inc. Optimization of N-base typed arithmetic expressions
US7171438B2 (en) * 2002-11-12 2007-01-30 Sandbridge Technologies, Inc. Method for recognition of full-word saturating addition and subtraction

Also Published As

Publication number Publication date
JP2008510230A (ja) 2008-04-03
EP1779240A2 (en) 2007-05-02
TW200622904A (en) 2006-07-01
US20080127148A1 (en) 2008-05-29
WO2006020729A2 (en) 2006-02-23
US8056064B2 (en) 2011-11-08
KR20070040805A (ko) 2007-04-17
WO2006020729A3 (en) 2008-01-17

Similar Documents

Publication Publication Date Title
Abadi et al. A simple differentiable programming language
Seger et al. An industrially effective environment for formal hardware verification
Goubault et al. Static analysis of numerical algorithms
King A new approach to program testing
CN101278262A (zh) 非循环的指令模式的识别方法
Damouche et al. Improving the numerical accuracy of programs by automatic transformation
Boldo et al. Verified compilation of floating-point computations
US20160321039A1 (en) Technology mapping onto code fragments
Brahmakshatriya et al. Buildit: A type-based multi-stage programming framework for code generation in C++
Plump From imperative to rule-based graph programs
Gupta et al. Effective use of SMT solvers for program equivalence checking through invariant-sketching and query-decomposition
Daly et al. Synthesizing Instruction Selection Rewrite Rules from RTL using SMT.
Di Martino et al. Two program comprehension tools for automatic parallelization
Christensen et al. Offline partial evaluation can be as accurate as online partial evaluation
Schreiner et al. Digital hardware design based on metamodels and model transformations
Gadelha et al. An efficient floating-point bit-blasting API for verifying C programs
Sharma et al. Sound bit-precise numerical domains
Bramas Inastemp: A Novel Intrinsics‐as‐Template Library for Portable SIMD‐Vectorization
Simić et al. Bit-precise verification of discontinuity errors under fixed-point arithmetic
Albert et al. Experiments in cost analysis of Java bytecode
Falcou et al. Eve, an object oriented simd library
Bodeveix et al. Experimenting Acceleration Methods for the Validation of Infinite State Systems.
Madeleine Arithmetic and casting in Lean
Butucaru et al. Bidirectional Reactive Programming for Machine Learning
Muller et al. Verifying Floating-Point Algorithms

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: ASPEN REAL ESTATE COMPANY

Free format text: FORMER OWNER: SANDBRIDGE TECHNOLOGIES INC.

Effective date: 20101210

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: NEW YORK STATE, UNITED STATES TO: CALIFORNIA STATE, UNITED STATES

TA01 Transfer of patent application right

Effective date of registration: 20101210

Address after: American California

Applicant after: Aspen home company

Address before: American New York

Applicant before: Sandbridge Technologies Inc

C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20081001