openmp毕设论文精内容摘要:
: pragma omp 指令 [子句 [, 子句 ] „] 支持 OpenMP的编译器能识别、处理这些制导指令并实现其功能。 其中指令或命令是可以单独出现的,而子句则必须出现在制导指令之后。 制导指令和子句按照功能可以大体上分成四类: 1)并行域控制类; 2)任务分担类; 3)同步控制类; 4)数据环境类。 并行域控制类指令用于指示编译器产生多个线程以并发执行任务,任务分担类指令指示编译器如何给各个并发线程分发任务,同步控制类指令指示编译器协调并发线程之间的时间约束关 系,数据环境类指令处理并行域内外的变量共享或私有属性以及边界上的数据传送操作等 编译 系统 一个可运行的编译系统不仅仅是一个编译转换程序,同时还是运行环境的支撑系统。 本节将 根据分级编译的思想,分析以标准 C代码作为 OpenMP编译目标代码的原因和优势。 然后给出 OpenMP编译器通常具备的典型结构和相关功能模块的作用。 编译系统包括编译程序(编译器)和运行系统,如果推广到一般情况,编译和运行并不需要在同一计算机上(可以是异构的两台计算机),此时我们将源程南京邮电大学 2020 届本科生毕业设计(论文) 9 序、目标程序、 编译器、运行系统等等要素统一地用图。 图 如果计算机 A和计算机 B属于不同的体系结构,那么这样的编译往往称为交叉编译。 运行系统主要包含运行库、环境变量和一些配置文件等等。 由于源语言程序中许多代码功能可能反复出现,因此可以先构建出具有这些常用功能的运行库,以此减轻编译时的负担。 如果语义差距可以量化的话,图 统采用运行库和不采用运行库时的编译难度差别。 南京邮电大学 2020 届本科生毕业设计(论文) 10 图 作用 从图 ,运行系统的库函数相当于是目标语言的语义扩展,其功能强弱,直接影响到对源语言进行弥补语义差距的难度,因此设计一定的运行库将有利于简化编译器设计。 虽然大多数编译原理的课程重点都在讲述源语言到目标语言的语义差距的消除,并讲述了实现上述功能所需的词法分析、语法分析、中间代码生成和最终输出目标代码,但是实际应用中的编译器,大多都是以带有运行库这种形式来实现的,因此库的设计是可运行的编译系统的另一个重点。 编译器的设计必须和运行库的设计同时进行,或者说目标语言和运行库功能直接影响编 译器的设计。 下面我们需要确定 OpenMP编译的目标语言是什么。 从源语言到目标语言的编译过程可以经过多个中间语言的步骤来完成的,各个步骤可以集中处理本阶段的问题。 比如 GCC编译器对 C语言的编译过程分为四步: 预处理( Preprocess)工作:处理宏定义,不管是由 D参数指定,还是在源码内部通过 define,或者使用了标准库、扩展库中的宏,都会替换为定义的值。 编译( Compile)阶段:将源代码(也就是预处理过的代码)编译为特定机器的汇编语言。 汇编( Assemble)阶段:将汇编源码汇编为机器码内容。 此处如果有对外部的函数调用,则会预留未定义的地址以供最后一步链接阶段来填写。 链接( Link阶段):将链接对象文件链接为可执行文件,此过程比较复杂,需要链接很多外部的库文件,包括静态的,动态的。 从大的步骤上看,可以说第一步是将 C语言程序编译成汇编语言程序,然后再将汇编语言程序编译成机器码。 这是一个典型的分级编译的例子。 OpenMP编译也可以分成多个步骤,在各个步骤完成不同的编译任务。 我们将几种可能的编译实现方案用图。 南京邮电大学 2020 届本科生毕业设计(论文) 11 图 案示意 前三种方式仅仅是在库的功能强弱上有所不同,但是编译目标语言都是机器码,也就是说编译器需要跨越“ OpenMP编译制导 + C语言”到机器码的语义距离。 第四种方式首先消除 OpenMP编译制导的语义差距输出 C代码,然后再将 C代码编译成机器码,此时 OpenMP制导指令的编译和 C语言的编译任务各自独立开来。 第五种方式则将 C代码编译再进一步划分。 后面两种实现方案的安排有利于分析OpenMP编译自身的问题。 本节主要讨论 OpenMP的编译。 常规 C代码的编译已经在编译原理的课程中有详细的论述,因此下面将着重第四、 第五种实现方案。 这时候 C代码的编译可以借助于现有的多种编译器。 如果采用 GCC作为其中的 C语言编译器的话其过程将是第五种方案(虽然 GCC本身具备有 OpenMP编译能力,可通过命令行参数上的编译开关“ fopenmp”打开相应的编译能力),可用图。 图 C编译任务划分 南京邮电大学 2020 届本科生毕业设计(论文) 12 这样一来, OpenMP编译的目标代码为标准 C代码,这些 C代码再经过 C编译器生成机器码形式的可执行文件,这个可执行文件运行中还需要 OpenMP运行库等运行环境的支持。 此时 OpenMP编译称为狭义的 OpenMP编译。 狭义的 OpenMP编译器的功能是将带有 OpenMP编译制导的 C代码翻译成标准 C代码,因此它和所有编译器一样具有相似的结构,即有典型的八个部件构成,它们分别是词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、信息表管理和错误处理,构成如图。 图 从逻辑上,上面的各个功能模块完成了编译过程中的一个步骤( phrase),每个步骤都将源程序从一种表示输出为另一种表示。 下面就这八个功能模块和执行流程分别进行简 单的分析讨论。 词法分析程序 词法分析( Lexical analysis)或扫描( Scanning)是编译器最前端的输入模块,它将源代码文件中的一个长长的字符串,逐个识别为有意义的词素( Lexeme)或单词符号,并转变为便于内部处理的格式来保存。 通常词法扫描器的工作任务有:识别出源程序中的各个基本语法单位(通常称为单词或语法符号);删除无用的空白字符、回车字符以及其他与语言无直接关系的非实质性字符;删除注释行;进行词法检查并报告所发现的错误。 对于识别出来的单词,可以用形如( Class, Value)的二元式来表示,其中 Class是一个整数代码用来指示该单词的类别, Value则是单词的取值。 由于 OpenMP制导指令里面的关键词(保留字)和 C语言的关键词有重叠的地方,比如“ if”既是 C语言条件语句中的关键字,又是 OpenMP编译制导中的条件子句的关键字。 因此在词法分析过程中,实际上要同时分析 C语言单词和OpenMP编译制导的单词,并进行甄别。 南京邮电大学 2020 届本科生毕业设计(论文) 13 OpenMP制导指令中的关键词包括 pragma、 omp、 parallel等等,数量并不多,因此 OpenMP/C编译器的词法分析和普通 C语言的词法分析大体相同。 语法分析程序 语法分析( Syntax Analysis)或解析( Parsing)程序需要借助于前面的词法分析,将词法分析输出的内部编码格式表示的单词序列尝试构建出一个符合语法规则的完整语法树。 如果无法成功建立起一个合法的语法树,则由错误处理模块输出相应的语法错误信息。 这棵树的叶子节点就是源程序中的各个单词,中间的节点则是程序设计语言的相关语法构造名。 产生语法树的过程可以大致分为自顶向下和自底向上两大类。 现有的最常用的两种方法是分别属于这两大类的递归下降法和算符优先法。 前者根据语言中各语法范畴有文法递归定 义的特点,用一组相互递归的子程序来完成语法分析;后者则利用各个算符间的优先关系和结合规则来制导语法分析,因而特别适合于分析各种表达式。 这两种方法比较简单便于实现,许多编译器都或多或少地采用过这两种方法 —— 对于表达式可采用算符优先分析法,对于语言的其他部分可以采用递归下降分析法。 对 OpenMP/C程序代码的分析工作,需要根据 OpenMP的语法规则和 C语言的语法规则的相关文法描述来进行。 通常的编程语言可以用前后文无关文法( CFG)或与之等价的 BacksNaur范式( BNF)来描述,从而整个语法分析过程能够 按照此种描述机械地进行,所以可以直接借用工具软件来完成。 对于前面提到的语法树,可以真的用一个树形结构将所分析的语法成分表达出来,也可以是按照这个树形的语法树思路逐步进行语法分析而不用建立起整个语法树。 语义分析程序 语义分析( Semantic Analysis)是在前面进行了语法分析后,接着需要对编程语言的第二个特征属性 —— 语义特征进行分析。 语法特征描述的是各个语法元素之间的连接形式或结构,语义特征表征的是各个语法成分的含义和功能,包括这些语法元素的属性或执行时应进行的运算或操作。 例如对 OpenMP编 译制导指令行的语法分析结束后,只是获得了相应的元素类型和排列顺序,但是具体是需要生成并行域还是需要进行同步操作,则是语义分析的范畴。 由于至今还没有找到一种公认的方法来系统地描述编程语言的语义,实际上使用的方法是:采用一种半机械化的方法来解决语义分析方面的问题。 当前主流的方法是一种称为“语法制导翻译”的方法,这种方法把编译程序的语法分析和语义分析有机的结合起来同时完成。 如果使用 Yacc语法分析工具,可以方便地将语义动作结合进语法分析过程中。 OpenMP编译过程中需要建立的 AST中间表示就是在语法分析过 程中结合语南京邮电大学 2020 届本科生毕业设计(论文) 14 义动作来建立的。 中间代码生成 首先需要注意区分此处的中间代码与前面的分级编译中的“中间语言”的区别。 虽然前面 介绍 的 C语言和汇编语言从广义上讲也是某种形式的“中间代码”,但是它们都是明确的可使用的真实语言并属于编译器的输出目标代码。 而此处说的中间代码指的是编译器未输出目标代码之前在内部使用的一种源代码的等价表示。 中间代码的生成是与语义分析紧密联系的。 但是由于迄今为止未有公认的形式化系统来描述编程语言的语义,所以对中间代码的生成工作仍需要在一定程度上凭借经验来完成。 如果采用语法制导翻译的编译 器,通常做法是将产生中间代码的工作交给语义过程来完成。 每当一个语义过程被执行以便对相应的语法结构进行语义分析时,它就根据此语法结构的语义,并结合在分析时获得的语义信息,产生相应的中间代码。 目前常见的中间代码形式有逆波兰表示、三元式、四元式以及树形结构等等。 因为树形的 AST保留了源代码的语法层次结构,作为中间表示在源代码变换上具有优势。 这种先将源程序翻译为某种形式的中间代码,然后再将其翻译为目标代码的方法,可以使编译程序前后两部分功能更加单一,逻辑结构更加清晰,从而使得编译程序更易于编写与调整,也为代码优 化和编译器移植创造了条件。 通常将中间代码的生成作为编译器的前后端分界线,将中间代码生成之前的部分称为编译器的前端( Front End),中间代码生成之后的部分称为后端( Back End),这两部分可用图。 前端需要将源程序分解为多个独立的组成要素,并在这些要素上重建语法结构并输出其中间表示,其间收集的有关信息需要存放到符号表中。 后端根据中间表示和符号表来构造和输出目标代码。 图 代码优化程序 代码优化是为了提供更高质量目标代码,该工作常常在中间代码生成和目标南京邮电大学 2020 届本科生毕业设计(论文) 15 代码输出之 间插入一个代码优化处理的阶段来实现。 根据目标代码的目标期望不同,优化方法也相应不同,有的是以运行时间为标准越快越好,有的是以存储空间开销为标准占用内存越少越好。 优化工作可以分为与机器体系结构相关的优化和与机器体系结构无关的优化。 进行代码优化的代价是增加了编译程序本身的时间复杂度和降低可靠性(系统可靠性随复杂度上升而下降)。 对速度的优化目标可能会不利于存储空间的优化目标,因此对各项优化目标应当进行权衡。 如果只是对 OpenMP程序进行源代码到源代码的变换,可以采用的编译优化技术并不多,很多传统编译器优化技术(特别是体系结构相关的优化技术)并不能在这里应用。 但是对于运行环境,其可优化的地方就较多,例如对于 NUMA架构的机器, OpenMP线程的数据分配以及线程对处理器核的绑定等等,都是当前性能优化的热点。 目标代码生成 目标代码的生成是以语义分析(也可能加上优化处理)产生的中间代码作为输入的,它将中间代码翻译为最终形式的目标代码。 这个翻译转换过程,需要确定源语言的的各种语法成分(或中间代码的各种结构)对应的目标代码结构,该结构称为“框架”。 框架比较固定,它是用目标代码形式描述的,但是有某些待定部分,需要在生成具 体的目标代码时,根据各语法成分的确切形式和参数来确定的。 对框架代码的要求做到:目标代码尽可能简洁、有较高的执行效率。 由于我们选定 C语言为 OpenMP编译的目标代码,所以也要求相应的 C框架代码要做到简洁和高效。 狭义的 OpenMP编译只是源代码级的变换,因此编译原理课程中讲述的目标代码生成技术并不完全适用。 例如为了生成可执行文件时,代码生成中的三个主要任务:指令选择、寄存器分配和指派、指令排序,在源代码转换工作中都不存在。 由于 OpenMP并行语义是串行的 C语言中没有的特性,因此需要在目标代码产生过程。openmp毕设论文精
相关推荐
施工图提出指导性建议,确保设计及施工效果,满足设计层高的要求,以指导施工。 对布局复杂、管线密集、技术要求高的部位采取断面综合管线图。 必要时采取实物模型的方法,以便能真实准确地反映各专业管线的标高、坐标及走向,通过这些方法来暴露矛盾,提出解决方法,避免在施工中发生管线打架现象。 精品文档 3. 3 材料供应保证措施 施工材料供应是保证工程顺利进行的又一重要环节。 材料管理好坏会对工程质量
理,不服从指挥,违反现场管理制度严重者,停止其工作,并退回公司。 9. 3 施工安全制度 ( 1)安全为了生产,生产必须安全,凡参加施工人员,要熟悉本工种安全技术规程,在操作中,应坚守工作岗位,严禁酒后操作。 ( 2)进入施工现场,必须戴安全帽,禁止穿拖鞋、带钉易滑鞋。 高空作业必须系好安全带。 ( 3)在安全措施不落实,存在安全隐患时,工人有权拒绝施工,并提出改进措施。 (
AC地址,配置运维简便; ? 高 带宽 — 模式下,桥接带宽上限可达 300M; ? 高 稳定性 — 特有 的 防挂死机制,保障桥接链路时时畅通 ; ? 完整的产品线 — 涵盖无线网桥、室外 AP、及客户端设备( CPE)。 总结: 无论是学校大规模的宿舍、教室全覆盖无线上网,还是图书馆、礼堂、会议室等小范围的密集接入,或者各个校区之间和校园“信息孤岛”的连接, 上海博达
建 商品交易 大 棚 270 ㎡,内设 水泥 交易 摊位 两排 160 ㎡, 铺设市 场内地坪 3300㎡, 改建 沿 青年路一侧的 围墙 和大门 , 配套市场 内 厕 所 、供电、给排A 县 B 镇小城镇经济综合开发示范项目 可行性研究报告 20 水、消防、垃圾 处理 等附属设施 (详见 市场建设平面布局示意图 )。 临街商铺建设 在扎西路街道两侧 新建砖混结构 临街商铺 房 60 间,
不墨守成规,我国古代的一些有识之士早已懂得这道理。 与《吕氏春秋》几乎同时的《韩非子》,在其《五蠢》篇里,就讲了同样的 思想 : 故凡举事必循法以动,变法者因时而化。 又说: 是 以圣人不期修古,不法常可,论世之事,因为之备,故事因于世而备适于事。 这说的也是 世易时移,变法宜矣 的意思。 清末的维新派人士更直接地说: 穷则变,变则通,通则久;变者,古今之公理。 虽然无数的历史事实