第一章 编译程序概述.ppt_第1页
第一章 编译程序概述.ppt_第2页
第一章 编译程序概述.ppt_第3页
第一章 编译程序概述.ppt_第4页
第一章 编译程序概述.ppt_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理,主讲教师: 赖国明(博士) 电话:631808 Email:,编译原理课程信息,一. 课程任务和目的 主干课。程序设计语言编译程序构造的基本原理和实现方法是软件的核心技术之一。在学习掌握的基础上,具有分析和实现编译程序的能力,并提高对高级程序设计语言的理解和应用能力。通过正则式、自动机和形式语言的学习,培养形式化的能力。,编译原理课程信息,教学目的与要求: 编译程序是现代计算机系统的基本组成部分之一。本课程重点讲述编译程序的设计原理和常用实现技术。通过课程的学习和实验的完成,应该清楚地理解一个编译程序是如何工作的;应具有一定的使用编译构造工具开发编译程序的经验;会将所学的常用技术和算

2、法应用于类似的软件的设计和实现中。,教学内容,1 编译程序概述 编译程序是现代计算机系统的基本组成部分之一.编译程序一般由词法分析程序,语法分析程序,语义分析程序,中间代码生成程序,目标代码生成程序,代码优化程序,符号表管理程序和错误处理程序等成分构成。本章概要介绍编译成分的主要功能以及编译阶段的逻辑关系。 2 PL/0 编译程序剖析 给出一个简单的类Pascal语言,其编译程序用高级语言(C和Pascal)实现。通过剖析该高级语言程序以理解各编译成分的功能及手工实现方法。,教学内容,3 高级语言的认识 要学习和构造编译程序,理解和定义程序设计语言是必不可少的。每个程序设计语言都有一定的规则用

3、以规定合适程序的语法结构,也需要有对一个程序的含义的描述。上下文无关文法给出程序设计语言的精确的,易于理解的语法说明。尚没有公认的形式系统描述程序含义,但也有流行的描述语义规则的方法属性文法。 4 词法分析程序的自动构造 词法分析程序是编译程序的一个构成部分,它的主要任务是扫描源程序,按构词规则识别单词,并报告发现的词法错误。正则表达式和有穷状态自动机分别作为单词的描述工具和识别机制,成为词法分析程序的自动构造原理,学习Lex(Flex)工具的使用方法。,教学内容,5 语法分析程序的构造 自顶向下的语法分析。可以看作是为一个输入串寻找一个最左推导的过程,也等价于从根开始,按前序生成结点,为输入

4、串构造分析树的过程。讨论一种有效的无回溯的自顶向下分析程序,这种分析程序称为预测分析程序。介绍对于一个文法类:LL(1)文法, 如何自动的构造预测分析程序。 自底向上(自下而上)语法分析方法,也称移进-归约分析法。它的实现思想是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移进边分析,一旦栈顶符号串形成可归约串,就用相应非终结符代替可归约串,这称为一步归约,重复这一过程,直到归约到栈中只剩文法的开始符号时,则为分析成功,并确认输入串是文法的句子。本章介绍LR分析法,分析过程中归约的是当前句型的句柄,称为规范归约。重点讲解LR类(LR(0)、SLR(1)、LALR(1)、L

5、R(1)文法的分析表的构造原理。,教学内容,6 语义分析和中间代码生成 在词法分析和语法分析之后,编译程序下一个逻辑阶段的任务是语义分析和生成中间代码。引入属性文法和语法制导的翻译的概念,介绍中间代码的形式,针对一些语法成分讨论相应语义处理工作的描述。 7 符号表 介绍符号表的一般组织和使用方法,讨论分程序结构语言的名字作用域分析及符号表设计方案。,教学内容,8 运行时的存储组织和管理 编译的最终目标是生成目标程序。在目标代码生成前,编译程序必须对目标程序运行时的数据空间进行组织和安排. 介绍目标程序运行时的数据空间的存储分配策略,说明程序设计语言本身关于名称的作用域和生存期的规则与存储分配策

6、略的关系,重点讨论栈式动态存储方案.,教学内容,9 代码优化和目标代码生成 代码优化是对代码作一些等价变换,以使得最后生成的目标代码更为高效。介绍优化技术,优化分类以及优化工作的基础控制流和数据流分析问题。 编译的最后一个逻辑阶段是目标代码生成。目标代码生成程序的设计细节要考虑目标语言和操作系统的特点。讨论目标代码生成程序设计的一般问题,包括指令选择,寄存器分配和计算顺序选择。,编译原理教学安排与要求,二. 教学要求 课前预习 按时完成作业 认真阅读分析PL/0编译器 重视实验,交实验报告,第一章 编译程序概述,1.1 什么是编译程序 1.2 编译程序的结构 1.3 处理源程序的软件工具 1.

7、4 编译技术的发展,第一章 编译程序概述,主要内容:,过程式语言 Fortran,Pascal,C 函数式语言 Lisp 逻辑式语言 Prolog 对象式语言 C+ 汇编语言 机器语言,第一章 编译程序概述,1.1 什么是编译程序 . 程序设计语言,程序设 计语言,高级语言 低级语言:面向机器的语言,相关基本概念,机器语言:能够被计算机的硬件系统直 接执行的指令程序。 汇编语言:将硬件指令用一些助记符表 示。如ADD表示加法操作, SUB表示减法操作等等 高级语言:使用便于理解的自然语言。,高级程序语言,不同的应用侧重: 数值计算- Fortran 系统程序设计-C 事务处理-obol VLS

8、I设计-VHDL 人工智能-rolog 其它- 大型嵌入式实时处理-da 符号处理-nobol 语言范型: 强制式语言-C,Fortran,Pascal 应用式(函数式)语言-ML,Lisp 基于规则(逻辑)的语言-Prolog,Yacc 面向对象语言-Ada,C+,Java,高级语言程序到可执行代码的转换过程,2.什么是编译程序(compiler),(1) 高级语言的处理过程,主要的途径有两个:通过编译程序和解释程序,编译程序,低级语言程序,高级语言程序,高级语言程序,解释程序,计算结果,有些语言基本通过解释程序 Java的Bytecode有些环境同时提供编译程序和解释系统 Lisp,(2)

9、 编译程序和解释程序,编译程序是现代计算机系统的基本组成部分. 从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序.,功能,层次,编译程序和解释程序,编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编或二进制代码程序, 这个二进制代码程序在机器上运行以生成结果.因此通过编译程序使得我们可以先准备好一个在该机器上运行的程序,然后这个程序便会以机器的速度运行.但是在不把整个程序全部都翻译结束之后,这个程序是不能开始运行,也不能产生任何结果的.编译和运行是两个独立分开的阶段. 但在一个交互环境中,不需要将这

10、两个阶段分隔开,编译就不如解释的方法更方便. 另一种语言处理程序,解释程序,它不需要在运行前先把源程序翻译成目标代码,也可以让我们实现在某台机器上运行程序并生成结果.,解释程序,是这样一个程序,它接受某个语言的程序并立即运行这个源程序.它的工作模式是一个个的获取,分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果, 它特别适合程序员交互方式的工作情况,即希望在获取下一个语句之前了解每个语句的执行结果,允许执行时修改程序. 著名的解释程序有Basic语言解释程序 ,Lisp语言解释程序,UNIX命令语言解释程序(shell),数据库查询语言SQL 解释程序以及byteco

11、de解释程序.,解释程序和编译程序的区别,解释程序和编译程序的根本区别: 是否生成目标代码,概念上的不同 基于解释执行的程序可以动态修改自身, 而基于编译执行的程序则需要动态编译技 术,难度较大。 基于解释方式有利于人机交互。 执行速度。解释器执行速度要慢。 空间开销。 解释器需要保存的信息较多, 空间开销大 利用解释器可自动生成编译器 二者实现技术相似。,高级语言解释系统(interpreter),功能 让计算机执行高级语言(basic,lisp,prolog) 与编译程序的不同 1)不生成目标代码 2)能支持交互环境 (同增量式编译系统) 源 程 序 初始数据,解释程序,计算结果,编译程序

12、和解释程序的存储组织也有很大不同,编译程序处理时,在源语言程序被编译阶段,存储区中要为源程序(中间形式)和目标代码开辟空间,要存放编译用的各种各样表格,比如符号表.在目标代码运行阶段,存储区中主要是目标代码和数据,编译所用的任何信息都不再需要. 解释程序一般是把源程序一个语句一个语句的进行语法分析,转换为一种内部表示形式,存放在源程序区,比如BASIC解释程序,将LET和GOTO这样的关键字表示为一个字节的操作码,标识符用其在符号表的入口位置表示.因为解释程序允许在执行用户程序时修改用户程序,这就要求源程序,符号表等内容始终存放在存储区中,并且存放格式要设计的易于使用和修改.,编译阶段和运行阶

13、段存储结构,编译时 运行时,名字表,目标代码缓冲区,编译用源程序中 间表示各种表格,目标代码区,数据区,源程序缓冲区,解释系统存储结构,1. 编译程序的结构,翻译外文资料与编译源程序进行类比,编译逻辑过程,词法分析:扫描、分解源程序,识别单词(基本字标识符、常数、运算符、界限符),并给予种别(属性)和内部形式(值)构成单词的内部表示。 语法分析:语法检查,分析源程序的语法结构,并用明确的结构(如语法树)表示。 语义分析:检查程序有无语义错误,为代码生成阶段收集类型信息。 中间代码生成:语义分析,生成中间代码。便于代码优化,便于从逻辑上分出与语言或机器无关的阶段。,代码优化 局部优化:合并已知量

14、编译时计算常量表达式 改变计算顺序减少指令、减少中间量 共享子表达式删除多余代码 降低运算强度乘方乘 循环优化:循环不变部分外提 下标地址计算优化 降低运算强度乘加 与机器有关的优化: 使用特殊指令如计数转移指令 寄存器分配 目标代码生成把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。,词法分析第一步识别单词,英文句子由单词构成 This line is a longer sentence. (字母组成的有集体含义的最小成分) 句子开头的单词第一个字母要大写 空格是单词分隔符 句点是句子结尾 ist his linealo gerse nte nce.,词法分析,从

15、左至右扫描字符流的源程序、分解构成源程序的字符串,识别出(拼)一个个的单词(符号) 单词符号是语言中具有独立意义的最基本结构。多数程序语言中,单词符号一般包括 各类型的常数、保留字、标识符、运算符、界符等等。 例如 double f = sqrt(-1);,词法分析,double f = sqrt(-1); TDOUBLE (“double”)TIDENT (“f”)TOP (“=“)TIDENT (“sqrt”) TLPAREN (“(“) TOP (“-”)TINTCONSTANT (“1”)TRPAREN (“)”)TSEP (“;”),词法分析,词法分析(lexical analysi

16、s or scanning) -The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning. 单词-token 保留字-reserved word 标识符 -identifier(user-defined name),例,程序文本If x = y then z := 1 else z := 2; 经词法分析,变成一个个单词

17、 if, x, =, y, then, z, :=, 1, else, z, :=, 2, ; 语言的单词符号是由词法规则所确定的。词法规则规定了字母表中哪样的字符串是一个单词符号。,词法分析position := initial + rate * 60;,单词类型单词值 标识符1(id1) position 算符(赋值) := 标识符2(id2) initial 算符(加) + 标识符3(id3) rate 算符(乘) * 整数 60 分号 ;,语法分析 Syntax Analysis,也称为 “parsing” 使用 context-free grammars 结构上的合法性Structu

18、ral validation (可生成语法树或推导Creates parse tree or derivation),功能:层次分析.依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树).,This line is a longer sentence,分析程序成分,double f = sqrt(-1); “sqrt(-1)”的推导,Expression FuncCall TIDENT TLPAREN Expression TRPAREN TIDENT TLPAREN UnaryExpression TRPAREN TIDENT TLPAREN TOP Expression TR

19、PAREN TIDENT TLPAREN TOP TINTCONSTANT TRPAREN,规则 Expression - UnaryExpressionExpression - FuncCallExpression - TINTCONSTANTUnaryExpression - TOP ExpressionFuncCall - TIDENT TLPAREN Expression TRPAREN,double f = sqrt(-1);的Parsing ?,语言的语法规则规定了如何从单词符号形成更大的结构(即语法单位),语法分析,又例: position := initial + rate *

20、 60 ; (Pascal)规则 :=“:=” :=“+” :=“*” :=“(”“)” := := :=,赋值语句,标识符,表达式,表达式,+,表达式,表达式,标识符,整数,标识符,:=,表达式,*,id1:=id2+id3*N,语法分析,语法分析(syntax analysis or parsing) The purpose of syntax analysis is to determine the source programs phrase structure.This process is also called parsing.The source program is pars

21、ed to check whether it conforms to the source languages syntax,and to construct a suitable representation of its phrase structure. 语法树(推导树)(parse tree or derivation tree),语义分析,句子的结构理解了,扑捉它的“含义” 如:杰克说杰瑞把他的作业落在了家里。 “他的”是谁的? 又:杰克说杰克把他的作业落在了家里。 几个杰克?,语义分析,杰克把她的作业落在了家里。 (杰克是男生)“杰克”和“她的”不一致。 “杰克”和“他的”才匹配,

22、程序设计语言靠严格的约束规则解决二义性。, int jack=3; int jack=4; cout jack; ,语义分析进一步分析语法结构正确的程序是否符合源程序的上下文约束、运算相容性等规定。,审查静态语义 使用的变量声明了吗? 允许操作的运算对象吗? 类型正确吗? ,例:Program p(); Var rate:real; procedure initial; position := initial + rate * 60 /* error */ /* error */ /* warning */; ,Program p(); Var rate:real; Var initial :

23、real; Var position :real ; position := initial + rate * 60 /*warning*/,语义分析(处理),语义分析(语言的规定和实现),int arr2, c; c = arr * 10;,语义分析,语义分析(semantic analysis) The parsed program is further analyzed to determine whether it conforms to the source languages contextual constraints:scope rules, type rules e.g. T

24、o relate each applied occurrence of an identifier in the source program to the corresponding declaration.,中间代码(中间表示)生成(翻译),源程序的内部(中间)表示 三元式、四元式、P-Code、C-Code、U-Code、bytecode ( * id3t1t2) t2 = id3 * t1 t2 := id3 * t1,id1:= id2 + id3 * 60 (1)(inttoreal,60-t1) (2)(*,id3t1t2) (3)(+,id2t2t3) (4)(:=,t3-id

25、1),翻译为中间代码,Three-address code,j = 2 * i + 1;if (j = n) j = 2 * i + 3;return aj;,t1 = 2 * it2 = t1 + 1j = t2t3 = j nif t3 goto L0t4 = 2 * it5 = t4 + 3j = t5L0: t6 = ajreturn t6,中间代码(intermediate code),Intermediate code is a intermediate representation of the source program . We want this representati

26、on ( intermediate representation) to be easy to generate,and easy to translate into the target program. The representation can have a variety of forms, a common one is called three-address code or 4- tuple code.,不同层次的中间代码,代码优化Code Optimization应用一些技术对代码进行变换以使得编译产生的目标代码高效。,Example(中间代码一级),t1 = 2 * it2

27、 = t1 + 1j = t2t3 = j nif t3 goto L0t4 = 2 * it5 = t4 + 3j = t5L0: t6 = ajreturn t6,t1 = 2 * ij = t1 + 1t3 = j nif t3 goto L0 j = t1 + 3L0: t6 = ajreturn t6,代码优化,id1:= id2 + id3 * 60 (1)(inttoreal60-t1) (2)( * id3t1t2) (3)( +id2t2t3) (4)( :=t3-id1) 变换 (1) ( *id360.0t1) ( 2)( + id2 t1id1),目标代码生成Objec

28、t code generation 生成目标机汇编和机器指令,Example: a in R0, i in R1, n in R2,t1 = 2 * ij = t1 + 1t3 = j nif t3 goto L0 j = t1 + 3L0: t6 = ajreturn t6,sll R1, 1, R1add R1, 1, Jcmp J,R2blt .LL3 add R1, 3, J.LL3: ld R0+J, Rt retr,目标代码生成,(*,id360.0t1) (+,id2t1id1),movfid3,R2 mulf#60.0,R2 movfid2,R1 addfR2,R1 movfR

29、1,id1,编译程序的功能和组织结构,表 处 理,词 法 分 析,源 程 序,目 标 程 序,错 误 处 理,语 法 分 析,语 义 分 析,目 标 代 码 生 成,前 端,后 端,中 间 代 码 优 化,中 间 代 码 生 成,编译程序结构(components),词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序 出错处理程序,出 错 处 理 程 序,表 格 管 理 程 序,编译程序的工作,分析(analysis)和综合(synthesis) 源程序的分析 线性分析 层次分析 语义分析 目标程序的综合 编译阶段的划分前端(front

30、end)和后端(back end) 编译的前端 与源语言有关但与目标机无关的那些部分组成 编译的后端 与目标机有关的那些部分组成 遍(趟)从头到尾扫描源程序(各种形式)一遍(pass),编译程序的前端: 与源语言有关,而与目标机无关的编译程序 编译程序的后端: 与目标机有关,而与源语言无关的编译程序,遍(趟):是对源程序或源程序的中间结果从头到尾扫描一遍,并作有关加工处理,生成新的中间结果或目标程序。,宿主机:运行编译程序的计算机称为宿主机。 目标机:运行编译程序所产生的目标代码的计算机成为目标机。,相关基本概念,符号表,记录源程序中使用的名字 收集每个名字的各种属性信息 类型、作用域、分配存

31、储信息,name: I kind:常量 value:35 name:object kind:变量 type:实 level:2 add: dx 符号表管理(登录,查找) symbol table management,出错处理(error handling ),检查错误、报告出错信息、排错、恢复编译工作 (error reporting and error recovery),1.3 处理源程序的软件工具 (编译技术的应用),结构化编缉器 程序分析工具 静态分析 动态分析 度量工具 结构度量 模块接口复杂度 c分析工具(source insight) 广泛的语言领域 数据库系统查询(SQL)

32、脚本语言 置标语言(SGML.HTML.XML),1.3处理源程序的软件工具,1.语言的结构化编辑器 2.语言程序的调试工具 3.程序格式化工具 4.语言程序测试工具 5.程序理解工具 6.高级语言之间的转换工具,1.语言的结构化编辑器 用户可使用该编辑器在语言的语法制导下编制出所需的源程序。结构化编辑器不仅具有通常的正文编辑器的正文编辑和修改功能,而且还能像编译程序那样对源程序正文进行分析。因此,结构化编辑器能够执行一些对编制程序有用的附加的任务。例如,它能够检查用户的输入是否正确,能够自动地提供关键字,当用户敲入if后,编辑器立即显示then并将这两个关键字之间必须出现的条件留给用户输入,

33、并能检查begin或左括号与end或右括号是否相匹配等等。由于结构化编辑器具有上述功能,既可保证编出的源程序无语法错误,并有统一的可读性好的程序格式,这无疑将会提高程序的开发效率和质量。 商用产品很多如Turbo-Edit,Editplus和Ultraedit等等.很多集成开发环境中里也都包含这种类似的工具,如Jbuild中就有JAVA程序的结构化编辑器.,2.语言程序的调试工具 调试是软件开发过程中一个重要环节,结构化编辑器只能解决语法错误的问题,而对一个已通过编译的程序来说,需进一步了解的是程序执行的结果与编程人员的意图是否一致,程序的执行是否实现预计的算法和功能。这种对算法的错误或程序没

34、能反映算法的功能等错误就需用调试器来协助解决。有一种调试器允许用户使用源程序正文和它的符号来调试,即一行一行的跟踪程序,查看变量和数据结构的变化以进行调试工作.当然,这些符号的信息必须由编译程序提供.调试器的实现可以有很多途径.其中一种是写一个解释器,以交互的方式翻译和执行每一行,它必须维护其所有的运行时的资源以保证在程序执行期间很容易的查询不同变量的当前值.如果不想通过解释程序允许编译了的代码调试,编译程序必须在目标代码(汇编)生成时同时生成特定的调试信息,比如,关联标识符和它表示的地址的信息,用于无歧义的引用一个声明了多次的标识符的信息等等.调试功能愈强,实现愈复杂,它涉及源程序的语法分析

35、和语义处理技术。,3.程序格式化工具 程序格式化工具分析源程序并以使程序结构变得清晰可读的形式打印出来。例如,注释可以以一种专门的字形出现,且语句的嵌套层次结构可以用缩排方式(齿形结构)表示出来。 4.语言程序测试工具 语言程序的测试工具有两种:静态分析器和动态测试器。 静态分析器是在不运行程序的情况下对源程序进行静态地分析,以发现程序中潜在的错误或异常.它对源程序进行语法分析并制定相应表格,检查变量定值与引用的关系。如某变量未被赋值就被引用,或定值后未被引用,或多余的源代码等一些编译程序的语法分析发现不了的错误。 动态测试工具也是首先对源程序进行分析,在分析基础上将用于记录和显示程序执行轨迹

36、的语句或函数插入到源程序的适当位置,并用测试用例记录和显示程序运行时的实际路径,将运行结果与期望的结果进行比较分析,帮助编程人员查找问题。,5.程序理解工具 对程序进行分析,确定模块间的调用关系,记录程序数据的静态属性和结构属性,并画出控制流程图,帮助用户理解程序。 6. 高级语言之间的转换工具 由于计算机硬件的不断更新换代,更新更好的程序设计语言的推出为提高计算机的使用效率提供了良好条件,然而一些已有的非常成熟的软件如何在新机器新语言情况下使用呢?为了减少重新编制程序所耗费的人力和时间,就要解决如何把一种高级语言转换成另一种高级语言,乃至汇编语言转换成高级语言的问题。这种转换工作要对被转换的

37、语言进行词法和语法分析,只不过生成的目标语言是另一种高级语言而已。这与实现一个完整的编译程序相比工作量要少些。 比如:C,PASCAL,FORTRAN到Ada的翻译器 IBM 4700汇编到C的转换器 COBOL 到Java 的编译器,计算模式,语言范式 语言应用领域,编译程序,万诺曼机体系结构 并行体系结构 嵌入系统,1.4 编译技术的发展,1、程序设计语言的范型,强制式语言(Imperative Language)也称过程式语言。,其特点是命令驱动,面向语句,一个强制式语言程序由一系列的语句组成,每个语句的执行引起若干存储单元中的值的改变,这种语言的语法形式通常具有如下形式; 语句1; 语

38、句2; 语句3; 语言执行的解释与万诺曼机的体系结构对应:改变机器状态(内存,各种寄存器和外存的内容),应用式(函数式): 应用式语言(Applicative Language)更注重程序所表示的功能,而不是一个语句接一个语句地执行。程序的开发过程是从前面已有的函数出发构造出更复杂的函数,对初始数据集进行操作直至最终的函数可以用于从初始数据计算出最终的结果。 程序执行: 执行一个个函数施用在数据上的变换最终得到的结果 Example: 解决八皇后问题的一段Haskell98程序: queen 0 = queen (n+1) = x :y | y - queen n, x - 1.8, safe

39、 1 x y safe n x = True safe n x (z :y) = and x/=z, x/=z +n, x/=z -n, safe (n+1) x y - test = queen 8 len = length test -92 right answer!,基于规则的语言( Rule-based Language)这类语言的语法形式通常为: 条件1 动作1 条件2 动作2 条件3 动作3 程序的执行过程是:检查一定的条件,当它满足值,则执行适当的动作。它也称逻辑程序设计语言,因为它的基本允许条件是谓词逻辑表达式。 Example: 一个简单的Prolog程序: father(a

40、,b); father(b,c); grandfather(X,Y):-father(X,Z),father(Z,Y); ?grandfather(a,c). Yes ?grandfather(X,c). X=a ?grandfather(X,Y). X=a,Y=c,面向对象语言:,抽象数据类型 支持封装性,继承性和多态性,2、编译技术与体系结构的发展密切相关,CISC (Complex Instruction Set Computing) 传统的编译技术与之伴随 RISC (Reduced Instruction Set Computing) 编译技术与体系结构设计的协同 软硬件协同设计 E

41、PIC (Explicitly Parallel Instruction Computing) 现代编译技术的发展推动体系结构的进步 IA-64 处理器产品系列(IPF)的上市,3、现代编译技术必须面对应用需求和目标体系结构的多样化,高性能计算(High Performance Computing) 指令级并行(Instruction Level Parallelism) 线程级并行(Thread Level Parallelism) 处理机级并行(Processor Level Parallelism) 系统级并行(Thread Level Parallelism) 嵌入式计算(Embedd

42、ed Computing) 需求多样性(实时、资源限制、功耗、多目标) 其它 多媒体计算(Multimedia Computing) 网络计算(Network Computing) ,4、编译技术重要方向,并行编译技术 面向高性能计算 交叉编译技术 面向嵌入式计算,并行编译系统已成为现代高性能计算机系统中一个重要的部分,并行编译系统 处理并行程序设计语言 实现串行程序并行化. 针对并行体系结构的程序优化 针对向量机的向量语言处理、串行程序向量化 针对并行多处理机的并行语言处理,串行程序并行化 针对流水线,超长指令字、指令延迟槽等硬件结构的指令调度优化,针对分布存储器多处理机的通信优化等,并行处

43、理语句举例, 或者 (:)(:)(:) 它们等价于循环: do , ()()() Enddo Parallel do ,T ()()() Enddo do T, ()()() Enddo Endparallel,if ( ab ,例:并行比较,例:针对体系结构的优化,如 针对 IA-64 ,将如下语句 if (ab) then c = c+1 else d = d*e + f 通过编译的优化,可以消除条件语句中的转移指令,把它转化成预测执行: pT, pF = CMP (ab) if (pT) c = c+1 if (pF) d = d*e + f 成功地消除了转移。此外,还可以利用 IA-64 的 E

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论