1 / 23

程序优化技术 PartialEvaluation 和 Supercompilation

程序优化技术 PartialEvaluation 和 Supercompilation. 导师:陈海明 郑丽丽 lili@ios.ac.cn 2009-09-08. 背景 1 : LFC 语言 . LFC 是为支持软件形式规约的获取工作而开发的一种函数式语言,以上下文无关语言为数据类型,如例。 Grammar : <Bin>  0 <Bin>  1 <Bin>  <Bin>0 <Bin>  <Bin>1 Function: Dec bInc: Bin  Bin;

nara
Download Presentation

程序优化技术 PartialEvaluation 和 Supercompilation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程序优化技术PartialEvaluation和Supercompilation 导师:陈海明 郑丽丽 lili@ios.ac.cn 2009-09-08

  2. 背景1: LFC语言 • LFC是为支持软件形式规约的获取工作而开发的一种函数式语言,以上下文无关语言为数据类型,如例。 • Grammar: <Bin>  0 <Bin> 1 <Bin> <Bin>0 <Bin> <Bin>1 • Function: Dec bInc: Bin Bin; Var b: Bin; Def bInc(“0”) = “1”; bInc(“1”) = “10”; bInc(b [] “0”) = b [] “1”; bInc(b [] “1”) = scat (bInc (b), “0”);

  3. 背景2:程序转换技术 • 对程序进行一系列的修改使得程序能够满足某些需求。它应用在软件工程的多个方面,如下:

  4. 程序综合: 由高级语言程序转换为低级语 言程序。如:程序的编译。 高级语言(C语言等)汇编或者机器语言

  5. 程序优化:提高程序的效率(时间,空间) 程序重构:改变程序的设计增加易读性,或使 其更难理解。 逆向工程: 由低级语言程序转换为高级语 言程序。

  6. Partial Evaluation和 Supercompilation是优化程序的转换技术,主要是为提高程序的运行时间。

  7. Partial Evaluation • 通过提前计算程序中的已知部分,减少程序的总体运行时间。简单的描述: 函数 f(x,y)=x2 + y 当x=2已知时, x2便可提前计算,得到: g(y) = f(2,y) = 4 + y

  8. program Known data Partial Evaluator Residual program result other data

  9. 部分参数必须已知 • 而且满足 Residual program(other data)=program (known data, other data) = result

  10. Example power(int e, int x) { int s; if (e==0) s=1; else s=x*power(e-1, x); } 那么e=2已知时,power函数优化为: power_2 (int x) { int s; s=x*x*1; }

  11. Partial Evaluation并不总能使程序得到优化。例如在power( )函数中,若x的值已知,设为3,而指数e未知,则power(e,3)= 3e power(3,x) { int s; if (e==0) s=1; else s=3*power(e-1, 3); } 在该程序中,程序递归的次数依然取决于e,而e未知,且程序中没有关于x的可提前计算的部分,所以程序没有得到优化。

  12. 实现: Step1:Time-Binding Analysis(时间绑定分析) ― 遍历程序,找出已知的变量和能够计算出值的变量和函 数,标记为Static,其它标记为Dynamic。 ― 其中,标记为Static的部分是可以提前进行计算的部分。 Step2:Program Specialization(程序例化) ― 将标记为Static的部分进行计算,包括: 已知变量:值替代变量。 可计算函数:计算并将结果值替代函数名。 …… 最终剩余的代码便是优化后的结果。

  13. 尤其当函数的某些参数变化的频率小于另外参数的变化频率时,便可利用PE将变化频率小的参数和程序提前计算,然后可减少剩余程序的运行时间。尤其当函数的某些参数变化的频率小于另外参数的变化频率时,便可利用PE将变化频率小的参数和程序提前计算,然后可减少剩余程序的运行时间。

  14. 计算机图像学、数值计算、文法分析器等。 • 在计算机图像学和数值计算模型中,一些参数 是固定的,所以可利用PE提前计算,然后再采集数据,计算。这样可提高实验的效率。 • 在文法分析器中,若文法已知,通过PE,我们便可得到一个固定文法的句子分析器。……

  15. Supercompilation (SCP) • SCP也可实现PE所实现的功能,但是,SCP不要求源程序的参数已知。 • 他们的实现方法不一样,SCP不需要对程序做预处理。 • 总体上说,SCP比PE 的优化能力强。

  16. 它的思想是:由高一级(high-level)的程序控制分析低层(lower-level)的程序。 SCP < source (argument1)> = residual program ( argument2 )

  17. 实现: • Step1:Scp根据源程序的运行将其展开为一个 树。树中每个节点表示了当时的运行状 态。类似解释器运行程序的过程。 • Step2:展开的树可能是无限的,应用 Generalization Algorithm将树转换为有 限的。 • Step3:从树中提取程序。

  18. 主流的SCP是基于函数式语言Refal的。 • Refal Example: • Fab { • 'a' e.X = 'b' <Fab e.X>; • s.1 e.X = s.1 <Fab e.X>; • = ; • } • Fbc { • 'b' e.X = 'c' <Fbc e.X>; • s.1 e.X = s.1 <Fbc e.X>; • = ; • } 若要求 <Fbc <Fab e>> ,则需先运行函数Fab将 string e 中的‘a’转换为’b’,然后调用 函数Fbc将string中的’b’转换为‘c’。这样程序调用了两次函数。利用SCP优化的过程如下:

  19. fig <Fbc <Fab e.1> e.1->'a' e.2 e.1-> e.1-> s.1 e.3 <Fbc > <Fbc 'b' <Fab e.2>> <Fbc s.1 <Fab e.3>> /*empty*/ s.1->’b’ s.1!=’b’ 'c' <Fbc <Fab e.2>> 'c' <Fbc <Fab e.3>> s.1 <Fbc <Fab e.3>> e.2<-e.1 e.3<-e.1 e.3<-e.1

  20. 最终得到的程序为: • F1{ • 'a' e.2 = 'c' <F1 e.2>; • 'b' e.2 = 'c' <F1 e.2>; • s.1 e.2 = s.1 <F1 e.2>; • = ; • }

  21. 目前,SCP还主要应用于程序方面,近期应用于程序的规范化(verification),证明两个程序是否相同(可检测多变的病毒,判断一个程序是否和一个已知病毒是一样的)目前,SCP还主要应用于程序方面,近期应用于程序的规范化(verification),证明两个程序是否相同(可检测多变的病毒,判断一个程序是否和一个已知病毒是一样的) • 目前,实现SCP的语言有Refal等一些first-order functional language。

  22. 一点体会: 1. 尽快适应科学院和实验室的氛围。 2. 尽早了解导师的相关课题。多多准备以确 定自己感兴趣的研究方向。 3. 多交流。

  23. 祝大家有一个愉快的科研生活! 谢谢!

More Related