openmp (3)new

openmp (3)new

ID:34371458

大小:897.67 KB

页数:25页

时间:2019-03-05

openmp (3)new_第1页
openmp (3)new_第2页
openmp (3)new_第3页
openmp (3)new_第4页
openmp (3)new_第5页
资源描述:

《openmp (3)new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、错误处理由于编程人员不可避免的会写出有错误的代码,一个可用的编译器必须能够发现大多数常见错误,并能准确地报告出错误在源代码中的位置,否则就没有使用价值。由于编译系统的各个部分都可能需要程序来诊断问题,所以错误处理代码是广泛分布于编译器的各个角落,在需要的地方进行检查和诊断并报告错误所在。3.2.2工作流程虽然典型编译器都有八个功能部件,但是图3.5所表示的只是它们的逻辑组织方式,并不代码执行上的先后顺序。在一个特定的实现中,多个步骤的活动可以被组合成一“遍”(Pass)或称为一“趟”的执行单位,每遍读入一个输入文件并产生一个输出文件。比如前端步骤

2、中的词法分析、语法分析、语义分析,以及中间代码生成可以被组合成一个前端遍;代码优化可以作为一个可选的遍;最后是为特定目标机生成代码的后端遍。3.3编译优化采用标准C代码作为输出的源代码级别的OpenMP编译虽然具有良好的可移植性和平台无关性,但是这种方案将OpenMP编译与后端的优化编译器分割开来,因此限制了线程级并行与指令集并行性开发之间的交互,使得很多优化方法无法实施。如果采用另一种实现方式,将OpenMP的翻译作为后端工作的一部分(牺牲了可移植性),此时由于OpenMP翻译、优化与面向指令级并行性的编译和优化可以共同在中间表示的层面上开展,

3、可以灵活安排优化的相对顺序,也可以方便地在各种不同的分析、优化过程之间传递信息,因此可以获得比源代码级翻译更多的优化机会。但是即便采用源代码级的翻译,也可以在并行域的合并、冗余制导指令消除以及针对变量的数据属性进行优化。另外在与运行库方面,也有许多优化技术,比如采用开销更小的线程库、针对NUMA架构利用局部性原理对数据分配和线程与处理器和的绑定等等技术来提高性能。本书作为入门级参考材料,并没有对性能优化进行讨论,需要读者自行阅读相关论文和书籍。3.4小结本章介绍了OpenMP编译的狭义定义,简单分析了相应的编译器的基本构件:词法分析模块、语法分析

4、模块、语义分析模块、中间代码生成、代码优化模块、目标代码生成以及符号表管理和错误检查。其中词法分析中要注意OpenMP与C语言共用关键字的区分,语法分析程序需要能在C语法基础之上识别OpenMP制导指令的语法,中间代码选取AST以便保留源代码的语法层次结构,目标代码生成中需要翻译OpenMP的并行语义。通过简单的介绍,在复习编译原理的基础之上初步了解OpenMP编译所涉及的几个问题,形成初步的概念。364第4章词法与语法分析在编译器的前端产生出中间代码的第一遍(Pass)步骤中,OpenMP编译器和其他编译器很相似,就是通过词法分析和语法分析建立

5、起抽象语法树AST中间代码表示,词法分析和语法分析的原理可以参考编译原理的教材,本章只讨论如何利用工具来实现OpenMP的词法分析和语法分析。我们将基于两个开源工具Lex和Yacc来讨论,而该工具的原理以及可以适用的文法类型可以参考编译原理的书籍。在进行语法分析的同时可以编写相应的语义动作函数从而建立起AST(其中又涉及AST树节点的设计问题),这些问题将在第5章讨论。Lex和Yacc是UNIX类操作系统中两个非常重要的、功能强大的工具。Lex代表LexicalAnalyzar,Yacc代表YetAnotherCompilerCompiler。如

6、果能熟练掌握Lex和Yacc,利用它们强大的功能可以非常容易地创建FORTRAN、C或其他编程语言的编译器。如果没有这样的工具,在开发程序的过程中遇到文本解析的问题时,例如解析C语言源程序、编写脚本引擎等等,就需要自己手动用C或者C++直接编写解析程序,这对于简单格式的文本信息来说,不会是什么问题,但是对于稍微复杂一点的文本信息的解析来说,手工编写解析器将会是一件漫长痛苦而容易出错的事情。如果可以通过某种格式的文件来描述其词法或语法规则,再由工具软件来自动生成分析工具,那么将极大提高开发效率减少编程错误。Lex指词法扫描器,Yacc指语法分析器,

7、这是通用的说法。但是具体的实现将会有所不同,GNU的Lex就是Flex,GNU的Yacc就是Bison。为了统一,所以在后面的章节就只会用Lex来表示词法扫描器,用Yacc来表示语法分析器。4.1Lex工具本节要讨论编写某种的语言的编译器所用到的第一种工具——Lex,内容包括正则表达式、声明、匹配模式、变量,然后在后续小节继续讨论Yacc语法和解析器代码、以及如何把Lex和Yacc结合起来。Lex是一种生成词法扫描器的工具,扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者正则表达式)定义在一种特殊的句子结构中。当Lex生成的扫描器在扫描

8、接收到文件或文本形式的输入时,它试图将文本与正则表达式进行匹配。它一次读入一个输入字符,直到找到一个匹配的模式,Lex就执行相关的动作(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。