(计算机软件与理论专业论文)嵌入式risc编译优化研究.pdf_第1页
(计算机软件与理论专业论文)嵌入式risc编译优化研究.pdf_第2页
(计算机软件与理论专业论文)嵌入式risc编译优化研究.pdf_第3页
(计算机软件与理论专业论文)嵌入式risc编译优化研究.pdf_第4页
(计算机软件与理论专业论文)嵌入式risc编译优化研究.pdf_第5页
已阅读5页,还剩58页未读 继续免费阅读

(计算机软件与理论专业论文)嵌入式risc编译优化研究.pdf.pdf 免费下载

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

文档简介

摘要 摘要 本课题的研究方向是基于现代编译结构及编译技术的角度,而进行的嵌入式 系统结构的设计优化。本课题的目的是要从现代编译结构特征及嵌入式r i s c 特征 出发,总结出什么样的系统结构的设计足有利于编泽技术执行及有利于编译性能 及最终代码性能的提高,也即是嵌入式系统结构的设计从编译角度考虑时,应该 涉及到什么要素。 在研究嵌入式系统结构的编译优化之前,一定要有一个平台作为一个支撑, 所以本论文首先深入研究现代编译器典型代表叫c c ( g n ucc o m p i l e r ) ,g c c 是g n u 发布的开源编译器,是我们研究并进行实验的一个好工具。采用g c c 的开源 特征及可移植特性,能够让实验在不进行硬件芯片的修改,直接修改g c c 的后端的 映射方向,让优化的系统结构的特征能够通过修改g c c 的映射直接反映出来。 接下来便是深入研究嵌入式系统结构的与编译相关的特征,包括指令集特征、 寄存器分配特点及流水线的设计,这三个因素与现代编译技术息息相关,优化技 术的实现一般是依据具体硬件平台的这三个因素来实现的,那么嵌入式系统结构 的编译优化的前提就是总结什么样的指令集的特征、寄存器分配特点和流水线的 设计会影响优化技术的实现,及优化后的代码的效果。 接着重点分析嵌入式系统结构特征与现代编译技术如何结合,具体探讨现代 编译技术及编译结构包括窥孔优化技术,图着色技术及指令调度技术的角度来分 析总结出,如何对系统结构的指令集,寄存器,流水线三个方面进行的优化设计。 本文优化的系统结构平台选用a r m 系统平台,a r m 是典型的精简指令集结构,并且 常用于嵌入式系统的处理器,所以优化设计会同时结合a r m 本身具有的系统结构特 征来进行分析,经过分析之后,得出a r m 的编译优化之后的一个设计。 最后通过实验验证,优化之后的系统结构的编译性能是有所提升的,效果是 明显的。 通过本课题的研究,系统结构的设计需要考虑编译角度以及从哪一方面去考 虑编译角度,这对于系统结构的系统设计是有帮助的。 关键字:编译优化:g c c :嵌入式r i s c :a r m a b s t r a c t a b s t r a c t t h er e s e a r c hd i r e c t i o no fm y t o p i ci st h ef a c tt h a ti sa b o u ta r c h i t e c t u r eo p t i m i z i n gb a s e d o nm o d e mc o m p i l es t r u c t u r ea n dt e c h n o l o g y i no r d e rt oc o n c l u d et h a tw h a tk i n do f d e s i g n a t i o no fh a r d w a r ea r c h i t e c t u r e t a k e sd is v a n t a g e sf o re x c u t i o no fc o m p i l e t e c h n o l o g y , i m p r o v i s i o no fc o m p i l ep e r f o r m a n c ea n dt h ef i n a l l yc o d ep e r f o r m a n c e ,m y t o p i cs t a r t sf r o ma n l y s i n gf o rc h a r a c t e r i s t i co fm o d e mc o m p i l e r s t r u c t u r ea n de m b e d d e d r i s ca r c h i t e c t u r e t h a ti st os a y , w h e nw es h o u l dt a k ea n g l eo fc o m p i l i n gi n t oa c c o u n t i nd e s i g n a t i o no fe m b e d d e dr i s ca r c h i t e c t u r e ,w em u s tt os t a r tf r o mw h a tk i n d so f e l e m e n t so fc o m p i l i n g f i r s to fa l l ,t h et o p i cm u s tr e s e a r c hf r o mg c c ( g n ucc o m p i l e r ) ,w h i c hi sak i n d o ft y p i c a lc o m p i l e r i ti sa no p e n c o d e dc o m p i l e rp u b l i s h e db yg n u ,w h i c hi san i c e t o o lf o rm yr e s e a r c h a n dt h e n ,t h e t o p i cw i l l b er e s e a c h e dt h ec h a r a c t e r i s t i co fe m b e d d e dr i s c a r c h i t e c t u r ei n c l u d i n gc h a r a c t e r i s t i co fi n s t r u c t i o ns e t s ,r e g i s t e rl o c a t i o na n dd e s i g no f p i p e l i n i n g t h et h r e ef a c t o r si st i g h t l yr e l a t e dw i t hc o m p i l et e c h n o l o g y , a sar e s u l to f i m p l e m e n to fc o m p i l et e c h n o l o g ya c c o r d i n g t ot h et h r e ef a c t o r so fh a r d w a r e s oo nt h e c o n t r a r y , w es h o u l d f i n dt h a t ,w h e nw eo p t i m i z eh a r d w a r ea c c o r d i n gt oc o m p i l e t e c h n o l o g y , w es h o u l dc o n s i d e rt h et h r e ef a c t o r s t h e n1w o u l da n l y z eh o wt oc o m b i n ec h a r a c t e r i s t i co fe m b e d d e da r c h i t e c t u r ea n d m o d e mc o m p i l et e c h n o l o g y i nd e t a i l ,m o d e mc o m p i l et e c h n o l o g ya n dc o m p i l e s t r u c t u r e ,i n c l u d i n gt e c h n o l o g y o fp e e p h o l e ,d i a g r a m c o l o r i n g a n di n s t r u c t i o n s c h e d u l i n g ,w o u l db ec o n c l u d e d s ot h a t , w ek n o wa b o u th o wt oo p t i m i z et od e s i g n i n s t r u c t i o ns e t ,r e g i s t e rl o c a t i o na n dp i p e l i n i n go fa r c h i t e c t u r e p l a t f o r mf o ro p t i m i z i n g t h et o p i cs e l e c ta r m ,a r mi so nb e h a l f o fa l le m b e d d e dr i s c ,s o1w o u l do p t i m i z et o d e s i g na c c o r d i n gt oa r m i n s t r u c t i o ns e t ,r e g i s t e rl o c a t i o na n dp i p e l i n i n g f i n a l l y , w ed i ds o m ee x p e r i m e n ts ot h a to u ra s s u m p t i o nc a n b ec o n f i r m e d a n dt h e r e s u l t sa r ee x p e c t e d k e y w o r d s :c o m p i l eo p t i m i z e ;g c c ;e m b e d d e dr i s c ;a r m i i 独创性声明 独创性声明 秉承学校严谨的学风与优良的科学道德,本人声明所呈交的论文是我个人在 导师的指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以 标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,不包 含本人或其他用途使用过的成果。与我一同工作过的同志对本研究所做的任何贡 献均己在论文中作了明确的说明,并表示了谢意。 本学位论文成果是本人在广东工业大学读书期间在导师的指导下取得的,论 文成果归广东工业大学所有。 申请学位论文与资料若有不实之处,本人承担一切相关责任,特此声明。 5 9 指导教师签字 论文作者签字 年月日 独创悱声明 学位论文版权使用授权书 本学位论文作者完全了解有关保留、使用学位论文的规定,有权保留并 向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权 可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印、或扫 描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适应本授权书) 学位论文作者签名: 签字日期:年月日 学位论文作者毕业后去向: 工作单位: 通讯地址: 导师签名: 签字日期:年月 日 电话: 邮编: 第一章绪论 1 1 研究背景 第一章绪论 随着计算机系统结构的发展,嵌入式系统结构领域已是渗透人们生活的一个 重要领域,所以嵌入式系统结构的设计一直在不断变化着。长期以来,人们为了 提高计算机性能,往往是不断提高硬件复杂性,包括指令集的复杂功能及灵活编 址,这样c i s c ( 复杂指令集系统结构) 便应运而生,一般c i s c 计算机所含的指令数 目至少3 0 0 条以上,有的甚至超过5 0 0 条n 1 。比如,i b m 公司的大、中型计算机,i n t e l 公司的8 0 8 6 、8 0 2 8 6 、8 0 3 8 6 微处理器等。然而,日益庞大的指令系统不仅使计算 机研制周期变长,而且还有难以调试、难以维护等一些自身无法克服的缺点。研 究人员开始把视线转移至u r i s c ( 精简指令集系统结构) ,比如a r m 7 ,a r m 9 ,m i p s 处 理器等。r i s c 指令的运行具有速度快,指令周期短,而且易调试的特点。嵌入式 结构发展至今,虽然已是c i s c 和r i s c 市h 互结合成主导趋势,但r i s c 仍然是计算机 系统结构内核的最主要选择。 另外,还有一个非常重要的趋势,在嵌入式系统中,操作系统和应用软件常 被集成于计算机硬件系统之中,使系统的应用软件与硬件一体化。其中编译软件 因为本身具有减少低层程序员工作的功能,可以帮助程序员特定的硬件平台中仍 然应用统一的高级程序语言来进行编程,它是嵌入式体系结构推进商业化的一个 必不可少的片上软件。 软件已经渗透到硬件中,那么我们的硬件设计时就需要不能再脱离软件而单 纯地把硬件功能做到最好,这样往往会片面强调硬件性能,而忽略了软件性能。 这样,有人就提出嵌入式系统的硬件与软件需要高效率地协同设计,以做到 量体裁衣、去除冗余,在整个系统上实现更高的性能。如v a x 系统结构的设计,v a x 的设计目标是简化高级语言的编译,已经为硬件与软件的协同设计作出一个良好 的引领,然而,v a x 的设计是失败的,v a x 的系统结构设计成具有高度的正交性乜1 , 并允许把高级语言的一条语句直接映射为一条指令,然而因为编译后的程序经常 因为太大而超出了可用的内存范围。失败的原因不在于思想的提出,而是实现的 方式是在编译结构及编译优化技术没有定位的情况下,而片面的强调系统结构设 广东t 业大学t 学硕l :学位论文 计的正交性,尽管正交性是系统结构设计考虑编译性能的一个重要指标。这里提 出的定位就是我们需要从具体的编译结构和编译原理技术出发,来进行系统结构 的设计。之所以提到定位,是因为编译器发展至今,已是一个相对定形的结构, 编译技术也已是纯熟的技术,图1 - 1 所示为近代编译器的结构。 相关性 与语苦相关广 + 与机器无关 与语言轻微相关 与机器基本无关 与语言少量相关 与机器轻微相关 ( 如寄存器数量类型) 与语言无关 与机器密切相关 功能 把语言转化成 公共的中间形式 例如过程展开( 又称 过程集成) 和循环变换 全局和局部优化 + 寄存器分配 具体指令的选择和机器相关 的优化,它可能包含汇编器 或在其后一个汇编器 图1 - 1 近代编译器结构 f i g u r e1 1m o d e r nc o m p il e rs t r u c t u r e 近代编译器一般2 - 4 遍扫描,而性能更高的编译器会包括更多次的扫描。这种 结构最大限度地提高了在相同输入前提下以不同的优化级别编译的程序可以产生 相同输出的可能性。当编译的目标是更高的编译速度同时较低的代码质量能被接 受时,优化扫描可以被跳过。一遍扫描简单来说就是编译器读取并且翻译整个程 序的个步骤。优化扫描被设计成一个可选项。由于优化扫描是独立的,因此不 同的语言可以使用相同的优化与代码生成步骤。对于一种新的语言只需要一个新 的前端程序就可以了。 近代编译器结构是以r i s e 结构出现之后而形成的,也就是近代编译器结构一 般是以r i s c 结构为平台的,女n g c c ( g n ucc o m p i l e r ) ,l c c 等等,而c i s c 结构的编 译软件是比较复杂,而且编译结构是多变,无法定位。 嵌入式系统结构设计者面临的任务非常复杂:对一个新的系统结构而言,首 先要判断哪些属性是最重要的,然后在不超出成本的范围内力求性能最高。这里 面涵盖的问题是多方面的,包括指令集的设计、功能组织、逻辑设计与实现“1 。 一个系统结构的实现包括两个部分内容:组织和硬件b 1 。 2 第一章绪论 组织涵盖了系统结构设计的高层次方面,例如存储器系统、总线结构以及内 部c p u - - 一实现算术运算、逻辑运算、分支和数据传输的部件的设计。 硬件是指一个系统结构实现的具体细节,这可能包括具体的逻辑设计和封装 技术。同一系列的系统结构通常具有相同的指令集系统结构和几乎完全相同的组 织,但它们的具体硬件实现却不同。 嵌入式系统结构设计者必须设计一个既能满足功能需求,又能达到价格和性 能目标的系统结构。通常,他们还必须弄明白功能要求究竟是什么,这可能是主 要的任务。这些要求中可能包括由市场需求激发的特定功能。如果某一类特定应 用软件的市场需求非常大,设计者就可能会在新机器中引入某些支持这些软件的 功能特性,以提高新的系统结构在市场中的竞争力。图卜2 总结了设计一新的嵌入 式系统结构要考虑的功能需求。 功能需求应具备或支持的典型特性 浮点格式和算法:i e e e7 5 4 标准,针对图像信号处理的特殊算法 i 0 总线i o 设备:u l t r a ,a t a ,s c s i 和p c i 标准 操作系统u n i x ,p a l m o s ,w i n d o w s ,w i n d o w sn t ,w i n d o w sc e 和c i s c oi o s 网络对不同网络的支持:以太网,i n f i n i b a n d 编程语言编程语言( a n s ic ,c + + ,j a v a 和f o r t r a n ) 将影响指令集 i i i i i i i i i i i i i i i i i 宣i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i 图卜2 嵌入式系统结构设计者要考虑功能需求 f i g u r e1 2p r o v i d e df u n c t i o n a lr e q u i r e m e n tf o re m b e d d e dd e s i g n e r 但一般来说传统嵌入式系统结构的设计一包括指令集的设计及组织与硬件 设计在了解清楚功能需求之后,一般情况下是不会考虑软件级别上的需求,即使 是有市场需求的考虑,也是无法定位软件结构的情况下所做的设计。 广东丁业大学t 学硕十学位论文 1 2 研究意义 本论文主要是通过优化系统结构的设计来降低编译速率,从中我们可以总结 中一些在系统结构的设计中的因素在影响着编译性能或者是编译出来的代码在机 器平台上的执行效率。 因为一个嵌入式系统的性能要全局来看,包括编译性能,代码大小,硬件性 能等等,所以我们在设计时就必须要全面考虑性能。 本论文的研究意义就在于通过优化系统结构的设计我们总结出一些设计原则 可以提高提高编译性能,进而帮助新系统结构设计者,在进行设计时会从这些原 则上考虑,考虑对编译性能有帮助的设计。 1 3 研究内容 现代编译器面临着系统结构多元化设计的挑战h 1 ,而实践证明,r i s c 编译器结 构和组织足以灵活地应付这些新挑战,所以我们或许可以提出这个构想,我们在 设计或优化系统结构时,是否可以考虑到现有编译技术和现在编译结构的基础上 也就是编译角度来设计和优化系统结构。课题中的”编译优化”的概念不再是停留 在硬件结构定位的基础上,进行代码的编译优化,使编译优化的目的同样是最终 产生的代码能够在代码大小有所减小及代码运行速度上有所提高,只是角度变换 了。 本论文的研究内容主要从以下几方面着手: ( 1 ) 通过分析这个具体的编译器,总结出对于一个具体硬件平台设计或优化 的影响因素,这个具体的编译器,本课题选择了g n u 计划发布的g c c ,g c c 本身是现 代编译器的典型代表,它的编译结构有经典的三个层次结构,即前端,中间代码 优化和后端,其中中间代码优化,后端是根据具体平台的相关特点而进行定制的, 比如g c c 后端的指令模板定制就是根据具体平台的指令集而进行的匹配工作,而中 间代码的优化是在考虑指令集系统和相关具体平台资源的模型下运行成本更低的 代码。这些都注定了编译器在后端与中间优化的层次上与具体平台的指令集系统 的密切相关。而本论文选择g c c 的另一个重要原因,它本身是开源的和可移植的, 这些特性都便于进行研究及优化实验的实现。 4 第一章绪论 ( 2 ) 我们必须要寻找一个嵌入式r i s c 平台来进行编译优化,r i s c 平台我们选 择a r m 平台,a r m 具有r i s c 的典型特点,有较简单的指令集,有流水线等等,另外 a r m 是一个面向低预算市场的一款嵌入式微处理器晦1 ,研究此平台具有一定的商业 价值。事实上经过g c c 编译结构的研究,我们可以知道编译结构及编译技术会影响 至i j r i s c 结构的哪些设计因子,比如编译器后端的指令模板定制是跟r i s c 结构的指 令集设计息息相关的,所以在进行指令集优化时,我们需要考虑编译角度。所以 我们研究嵌入式r i s c 平台时就要从编译相关的设计因子去研究,比如指令集特征, 寄存器设计方案,流水线结构等。 ( 3 ) 最后是从编译技术和编译结构的各个相关的角度出发,总结出一套嵌入式 平台编译优化设计的设计原则,然后通过实验进行验证这套原则。当然我们可能 只能在a r m 平台进行验证,是否是所有嵌入式平台通用的设计原则,这将是一个今 后的验证工作。 本课题的研究定位是,即在现代已知的编译器的结构体系下,对已有的嵌入 式r i s c 指令集系统和指令结构进行编译优化设计,让优化后的指令集系统能够在 编译性能上有更大的提高。 1 4 研究目标 编译优化是一直是研发编译器的一个重要课题,但此前编译优化是一直停留 在硬件结构定位的基础上,进行代码的编译优化,也就是硬件结构的设计是与编 译软件结构分离开来的 本课题提出的思想较之以前的编译优化的概念有所改变,硬件结构的设计加 入编译的设计角度,以至于硬件结构的设计时就已开始全面地为提高整个系统性 能做好准备。 所以本课题的研究目标是从编译技术和编译结构的各个相关的角度出发,总 结出一套嵌入式平台编译优化设计的设计原则。使用这套设计原则设计出来的嵌 入式r i s c 系统结构能够对整个嵌入式系统的性能有所提高,包括编译性能及代码 在硬件平台上运行的性能。也即是代码的编译速度有所提高及代码大小有所减小, 代码运行速度有所改善。 5 广东t 业火学1 二学硕i j 学位论文 1 5 研究工作 在清楚研究工作所要达到的目的之后,那就是要得到一个编译优化后的一个 嵌入式r i s c 编译设计原则,当然优化后的结果必然会影响原来的硬件设计,所以 优化的前提是不能改变指令集的原有功能,但可能也会影响到硬件性能,这就变 成是一个权衡的问题。图1 - 3 介绍了本课题研究工作开展流程: 优 图1 - 3 本课题研究工作流程 f i g u r e1 3r e s e a r c hp r o c e s so ft h et o p i c 要想达到课题目标,首要的工作就是要了解清楚现代编译器结构及编译优化 技术。因为g c c 是基于l i n u x 下的开放源码的现代编译器结构的典型代表,可以接 收多种高级源语言,广泛支持多平台操作系统。其代码优化机制,不仅能兼顾时 间、空间效率,生成高质量的目标代码,而且具有很强的可移植性与可扩充性, 是很多编译器或系统结构研究者常拿来作研究的一个题材或辅助工具。在这里, 我的首要重点工作是研究g c c 的编译结构,而研究g c c 编译优化技术是接下来的任 务,因为编译优化技术,尤其是跟r i s c 目标板相关的编译优化技术对指令集系统 优化的具有关键的指导作用。 接着就要结合具体平台的指令集系统进行研究,找到具有编译优化空间的指 令内容,进行优化。 最后的任务是进行优化后指令集的编译性能的测试及测试结果的比较。 6 第一二市g c c 编译结构及编译优化 第二章g c c 编译结构及编译优化 本章将着重介绍g c c ( g n uc o m p i l e rc o l l e c t i o n ) 编译结构,编译流程及编 译优化技术,将重点分析什么样编译相关与具体平台的设计是相关的,以为下一 章做出铺垫。 g c c 包含一系列针对不同语言和不同目标平台,以及可运行在不同主机系统上 的编译器。 g c c 具有现代编译器编译结构的特点,其中采用的编译流程及优化技术都是现 代编译器普遍采用的,所以本章将探讨g c c 内部编译结构,编译流程及如何进行相 关的编译优化,通过本章的研究,我们将可以了解至u g c c 的内部编译结构及编译流 程的哪些结构和哪些步骤将与具体平台是直接关联的,那么我们进行嵌入式系统 结构的编译优化时,我们只需要从这些结构部分进行考察,如我们将在后面得出 g c c 的后端的指令模板描述部分是与具体平台的指令集直接相关的,那么这一部分 将在后面重点探讨的。 而g c c 的编译优化,本章把g c c 采用的优化分成两大类,一类是与目标机器无 关的编译优化,一类是与目标机器相关的编译优化。与目标机器相关的编译优化 将是本章重点,与目标机器相关的优化对象及优化结果是直接关系到优化后的代 码的运行效率,而所采用的优化技术则是直接关系至u g c c 的编译性能,当然这是以 目标机器的如何设计为前提的。 2 1g e e 编译结构 g c c 最初只是r i c h a r ds t a l l m a n 于1 9 8 7 年编写的一个c 的编译器,当时也叫做 g c c ,不过表示的是g n uc o m p i l e r 。1 9 8 7 年发布1 o 版,至i u l 9 9 2 年发布基于新的开 发框架的g c c 2 ,1 9 9 7 年g c c 的一个分支e g c s ( e n h a n c e dg c cc o m p i l e rs y s t e m ) 并入 g c c 官方发布版本,版本号为2 9 5 ,目前最新发布版本3 4 t ”。g c c 的代码来源,目 前有两种方式,一种是遍布于全世界各地的开发人员无偿的奉献,另外一种是商 业公司的资助。g c c 依据c n ug e n e r a lp u b l i s hl i c e n s e 发布,其主要立场在于可 以获得g c c 的源代码,但是对其作出的修改也应当以相同的协议发布。 7 广东t 业大学t 学硕 :学位论文 本节首先将g c c 放在g n u 开发工具链中考查它的核心地位,然后依次深入, 从g c c 编译器的框架结构,编译流程,一直到编译器中的重要模块分析。试图 提供一个g c c 编译器全景。 2 1 1 g n u 工具链中的g c c 首先,简要的回顾一下在嵌入式系统开发中编译器是如何工作的。通常我们 为了从源代码得到可执行文件需要通过如下几步:预处理,编译,汇编,连接 ( 以c 语言为例) 。如图2 - 1 所示: 图2 1g c c 工具链过程 f i g u r e2 1p r o c e s so fc h a i no fg c c 下面对g n u i 具链的几个主要成员做一介绍 c p p 是c 预处理器。c 语言预处理器是一个相当简单的工具。它删除了所有的源 代码中的注释,然后执行所有的在第一列有一个# 号的行中的命令。也就是说,当 我们在一个源文件中有这样; t i n c l u c e 的标记,它会处理将气候跟随的头文件包含 在其中,同时它也会处理条件,比如# i f ,也会扩展用在这个c 源文件中的宏。c 语 言预处理器的输出还是一个c 源代码,但是已经没有注释,和所有的预处理指示符。 除了c 语言之外的大多数的语言都没有预处理器。 c c l 是实际上的c 编译器,负责实际上的c 源代码到汇编代码的翻译,然后才由 8 第二苹g c c 编译结构及编详优化 汇编器进一步的将汇编代码翻译成目标代码。有一些编译器具有一个集成的汇编 器,也就是说他们略过了汇编源代码,而是直接编译成为二进制目标代码,而c c l 生成的仅仅是目标平台相关的汇编代码。 g n ua s 本来仅仅作为编译遍中的一个功能,现在它也可以用作源代码层次上 的汇编器。当用作源代码层次上的汇编器时,它有一个称为g a s p 的汇编预处理器。 g a s 从汇编代码生成可重定位目标文件。可重定位意味这这里没有代码是通过绝对 地址来进行寻址的,而是相反,如果必须由一个绝对的地址,那么这里会有一个 标记,那个标记将会被连接器的实际地址所代替。目标代码文件包含一个外部符 号输出的表,可以被其他二进制文件所使用,而没有被定义的符号需要在其他的 目标文件中被定义。目标代码包括应用程序的可执行部分,以及调试信息。 1 d 的任务时解析地址和符号到确定的地方,以得到一个完整的映象。实际上 1 d 具有两种功能,一是连接器( l i n k e r ) ,它的输出还是一个可重定位文件。但是 通过连接,将所有的二进制代码集成到一个文件中,用地址替代符号标一记,将 函数调用和符号访问链接到其他的二进制文件中去,以得到一个实际的符号定义。 这些目标文件中的一些可能是从一些外部的库中取得的,比如说c 函数库,数学库 等等:二是作为定址器( r e l o c a t e r ) ,根据用户给出目标系统内存大小以及内存映 射,将可重定位文件的地址变成绝对地址,这样才可以将代码烧入r o m 。尽管有一 些r t o s 使用可重定位目标文件格式,比如a o u t ,但是对于大多数嵌入式系统因为 没有底层平台载入器( 1 0 a d e r ) ,代码直接需要被定位到绝对地址。这是嵌入式系 统软件开发和应用程序软件开发区别最大的一个地方。 n e w l i b 库,标准c 库函数,数学库,以及一些板级支持代码库。 o b j c o p y 负责将得到的可执行文件转化成为m o t o r o l as r e c o r d 格式的文件以烧 入r o m 。并不是所有的开发平台上都有必要做这一步,有一些存在r o m 监控器的设 备可以直接加载可执行文件。 g d b 负责程序调试工作。g d b 远程调试有多种模式,但是基本上每一种模式都 会有部分代码( 称为存根s t u b ) 需要在目标机器上运行以建立主机与目标平台之间 的通信联系。 最后上面的所有工具都是通过g c c 这样二个编译驱动程序来调用完成的。它完 成如下动作: 1 、解释命令行参数。 o 广东t 业入学t 学硕 j 学位论文 2 、从选项中确定文件名。 3 、考虑文件名的主要内容,哪一种语言的编译器被调用,或者要运行哪一些 工具程序。比如链接器,或者预处理器,运行的参数是什么,然后实际的运行他 们。它会为各个过程格式化命令行参数,然后传递给他们。一般g c c 用于最后的连 接阶段的命令行都有l d 连接缺省的启动代码和额外的库,在嵌入式环境中则是一 个需要定制的部分。 2 2 2g c c 的结构 g c c 是一个典型的现代优化编译器吲。从技术上来讲,是一个语法制导,一遍 优化编译器。它具有这样的结构( 如图2 2 所示) : j l 1 代 图2 2g c c 编译器结构 f i g u r e2 - 2g c cc o m p i l e rs t r u c t u r e 前端通过词法分析,语法分析,语义分析,生成分析树,分析树进行简单的 优化之后,转化成为中间代码,对中间代码进行优化过以后,生成汇编,。作为一 个支持多语言的编译器,对于不同的语言,g c c 中存在有不同的前端,他们以树作 为前端的接口。而作为支持多目标平台的编译器,不同目标平台的代码生成器是 在构造编译器的时候生成的。图2 - 2 显示了经过配置构造得到的编译器处理源程序 的各个模块的功能。各个模块功能如下所述: 1 、词法分析模块:负责在输入流中分离记号并且决定他们的类和表示,可以 手工生成或者由词法分析程序生成器根据记号描述定义生成。 l o 第二章g c c 编译结构及编译优化 2 、语法分析模块:负责将记号流转化成抽象语法树( a s t ) 。语法分析模块同样 可以手工生成,或者由语法分析程序生成器根据语法规则定义生成。 3 、语义分析模块:从程序的不同地方收集上下文信息,并且用收集到的结果 对抽象语法树进行注释。而这些注释随后被用来执行上下文检验或者传递给后继 模块。最后生成分析树。 4 、分析树优化模块:对源程序作基本的优化。对于某一些优化而言,分析树 的结构处理可能更加方便。下文中有更详细的信息。 5 、r t l 生成模块:负责将分析树中语言特定的结构翻译称为更加一般的结构, 这些一般的结构构成中间代码表示。r t l 语言是g c c 中定义的语言。它的结构是一 种层次的结构,因此它在从分析树的转化中比较方便,同时也适合于最后生成对 应的目标机器指令。r t l 语言是g c c 编译器后端的核心。 6 、r t l 优化模块:负责对程序执行效率或者占用空间大小进行优化。这是编译 程序中非常重要的一部分。6 c c 中所有的优化功能几乎都集中在r t l 表达式上,r t l 对于代码重用有很大的贡献。 7 、代码生成模块:负责将中间代码表示转化成为目标机器对应的指令,这里 指汇编代码。 图2 2 中没有指出的两个模块:错误处理模块和符号表处理模块,顾名思义, 负责错误处理以及符号表管理,它几乎要被其他所有的模块所调用。 编译系统前端是语言相关的,后端是目标机器相关的伸,。g c c 为前端不同的语 言定义连接接口,为后端不同的目标体系结构定义了机器描述的扩展机制。而支 持多语言,多目标机器的编译系统的根本基础是引入了两种中间表示:前端的树作 为高层的中间表示,接近于语言的各种基本构造:后端r t l 作为中层以及底层的中 间表示,用来处理优化,定义机器模型,以及代码生成。 2 2 g c c 编译流程 根据g c c 中程序语义的转化过程,通过简化上面的结构图,g c c 的编译流程可 以大略的分为这样几个步骤。 广东丁业大学t 学硕 j 学位论文 图2 - 3 编译流程的程序语义转换 f i g u r e2 - 3p r o g r a ms e m a n t i ce x c h a n g eo fc o m p il ep r o c e s s 第一步,从高级语言源代码到树的转换是分别在语言相关的语言前端中完成 的,不同的语言有不同的处理方式,g c c 提供接口以及整合方式将前端同g c c 的编 译器主体连接起来。这部分是本文第四章的重点内容。这里仅仅做一介绍。 第二步,树结构的优化,编译器的部分优化技术在树这样一个和高级语言比 较接近的中间表示上进行比在低级中间表示上进行处理器来方便。这里面大部分 是通用的,独立的语言前端可能引入不同的做法。 第三步,树结构转化成为r t l 。从高层的中间表示转化成为中层以及底层的中 间表示。g c c 提供了对于大多数语言构造的适用的r t l 生成函数,语言前端可以调 用:同时,g c c 也提供机会,语言独立的前端可以针对语言独特的构造直接自行生 成r t l 表达式。 第四步,r t l 表示之间的转化。这里是g c c 编译器的重点所在,这里所有的优 化算法都是公用的,这是g c c 真正吸引人的地方。通过在r t l 表达式上进行优化处 理,从而将优化算法同具体的体系结构隔离来开,起到代码重用的效果。另一方 面,也是g c c 性能问题的一个来源,基于公用的优化算法针对具体的体系结构而言 总有不能完全发挥特定处理器性能的地方。实际上,优化过程并不完全脱离了体 系结构进行的。 第五步,r t l 至u 汇编代码的转化过程。在r t l 的最后表达形式上,每一条表达 式基本上同汇编代码具有一一对应的关系。因此这一步的处理相对简单。而这里 i n s n 对于指令的对应关系来源于g c c 对于机器描述的约定。 下面来看一下g c c 的编译流程以及简单的介绍一下每一个流程所涉及的文件 模块n 。 g c c 源代码编译后会生成两个主要的可执行文件,一个是g c c ,另外一个是 c c l ( 以c 语言为例) 。 c c l ( 或者其他编译器比如说g + + ) 对应的m a i n 0 函数在文件g c c m a i n c 文件 1 2 中。这个文件只是一个简单的m a i n0 函数,直接调用g c c t o p l e v c 中的 t o p l e y m a i n0 函数。t o p l e v c 是实际上的编译器顶层模块。编译器所有的控制结 构都在t o p l e v c 文件中,这个文件负责初始化,解码参数,打开关闭文件以及随 后几个阶段的处理。t o p l e v c 采用回调的机制,调用语言前端进行分析处理。 对于每一个完整的输入,分析阶段只调用一次。然后每次对每一个函数输入 生成一个顶层的树表示。这个树表示随后转化成为r t l 中间代码,并对中间代码进 行处理。从树的表示转化成为r t l 表示涉及下面这些文件e x p r c ,e x p m e d c 和 s t m t c 。出于内联处理以及其他的一些考虑,树被转化成r t l 的处理的顺序并不一 定和它从输入生成的顺序一致。 每次分析过程读到一个完整的函数定义或者项层的声明,它就调用t o p l e v c 中r e s t o fc o m p i l e r 或者r e s t o fd e c lc o m p i l a t i o n 函数。这两个函数负责处理 所有后继的工作,直到输出汇编语言代码。所有分析阶段之后其他编译阶段的工 作,都在r e s t o f c o m p i l e r 函数中。当这个r e s t o fc o m p i l e r 函数处理完一个完 整函数的定义,返回时,所有为了处理这个函数而申请的内存空间就完全被释放, 除非这是一个内联函数,或者出于其他的原因而被延迟( 比方说在处理t e m p l a t e 的 时候) 。 2 3g c c 编译优化 g c c 是一个高度优化、高度可移植的编译系统,用c 语言实现,。它能够处理 多种语言,包括c ,c + + ,f o r t r a n ,j a v a 和c h i l l 等。不同的语言由不同的前端词 法与语法分析器进行分析,建立语法树,生成中间语言r t l ,最终调用共同的后端 优化与代码生成的处理程序。 整个系统的工作流程由一个总控程序控制,经过前端分析和后端处理两遍扫 描来完成从一个g n uc 源文件到目标机汇编代码的转换。 总控程序负责初始化、译码参数、打开关闭文件并控制各遍的操作。前端完 成语法、语义分析和中间代码的生成。它的输入为预处理后的源文件,处理是以 一个函数为单位,生成中间语法树,然后转换成r t l 中间代码。语法分析程序是由 一个y a c c 自动生成工具生成的,该工具接收l a l r ( i ) 文法。后端处理完成各种优化、 寄存器分配和汇编代码的生成。优化包括全部常规优化和主要r i s c 优化,它们的 1 3 广东t 业大学t 学硕i j 学位论文 代码在g c c 中占有相当大的份量,而且每遍优化都是对r t l 中间代码的一遍处理。 后端的最后一遍处理是汇编代码的生成。在机器描述产生的各种数据结构引导下, 代码生成的主要工作是进行指令识别、获取汇编指令模板,并据此输出汇编指令 优化代码,最终完成对一个g n uc 源码程序的翻译 g c c 优化体系如图2 - 4 所示。为了实施优化,编译器首先从编译命令行中解析 优化参数,经过分析器p a r s e r ,将源程序翻译成等价的语法树形式,转化为r t l :程 序出口调用优化器,根据解析的不同优化参数实施相应的优化策略,代码生成器 读入优化后的中间代码,生成可执行机器码并输出。 图2 - 4g c c 优化体系 f i g u r eg c co p t i m i z i n ga r c h i t e c t u r e 其中,优化器部分完成了基于r t l 代码优化的核心工作。g c c 优化器设计的主 要特点是:其一,制定了规划合理、性能优越的优化策略;其二,定义一种处理简 单、运行高效、与优化策略相适合的中间语言;其三,采用制流分析和数据流分 析等技术来为优化实施提供必要技术准备和支持。 g c c 编译程序的一趟编译可以包含2 0 3 0 多遍扫描,其中绝大部分是用来实 现优化细节的。g c c 优化既用到了机器无关的优化技术,又用到了与机器有关的优 化技术。 2 3 1 与目标机器无关的编译优化 g c c 的优化器实施策略实际上在编译器的其它部分还合理地规划了可实施的 其它优化m ,例如在p a r s e r 中就实现了表达式化简、删除无用赋值等优化。 首先,g c c 优化器所实施的是全局优化。由于对源程序进厅直接的语义分析 和中间代码生成,会产生一些无用跳转,如交叉跳转、跳转到跳转等,因此要先 对这类低级、无用的跳转进行优化。其后进行的公共子表达式的“物理删除”, 1 4 第_ 章g c c 编译结构及编译优化 是用简单的等价表达式替换当前顺序扫描点具有相同值的表达式,不考虑控制分 支的情况,用最低的开销最大程度的精简程序。接着根据数据流分析所采集的冗 余信息,先进行常量复制传播删除的优化,这样可以减少操作数的数量,然后进 行全局的公共子表达式的逻辑删除,能够缩短中间代码的长度。 其次,g c c 优化器实施的是循环优化。先将循环不变量外提,减少循环中被 分析的操作数的数量。然后逐个分析最外层循环中的操作数,进行强度削弱和基 本归纳变量的删除。最后再展开嵌套的循环,重复上述处理过程。循环优化之后, g c c 优化器实施的是基本块优化,但它并不是必需的,根据不同优化参数的要求, 有可能被执行一次或两次,甚至根本不被执行。基本块优化主要完成死代码的删 除和指令合并,以减少指令的数量。然后重新安排指令的执行顺序,提高时间、 空间的利用率,从而确定了每个操作数的生存周期,并根据操作数的生存周期进 行寄存器的分配。 最后,g c c 优化器所实施的是针对某些特殊优化参数的优化,是可扩充的, 比如延迟分支的优化等。g c c 的优化策略中有两个重要的优化“遍”的组织;跳转 优化和公共子表达式的物理删除。跳转优化在g c c 优化器中实施了三遍: ( 1 )中间代码生成以后: ( 2 )公共子表达式删除之后: ( 3 )整个优化过程结束以前。 公共子表达式的物理删除的优化,也分别在全局优化时和循环优化后各实施 一次。实践证明,这种组织策略充分考虑了由于某种优化的实施,带来的新的可 优化的因素,能够很大程度地减少最终生成代码的时间、空间的开销。 2 3 2 与目标机器相关的编译优化 下面重点来讨论下与机器相关的编译优化及优化技术。优化步骤一般包含以

温馨提示

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

评论

0/150

提交评论