已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
囤防科学技术人学研究生院学位论文 摘要 与传统的d s p s 相比,现代d s p s 采用了更多的i l p 技术以提高性能。同时, 为了适应媒体处理的特殊需要,现代的d s p s 在硬件的设计方面的一个普遍的特 征就是引入了s i m d 指令。这就使得低精度的媒体数据的快速处理成为可能。一 个真正的高性能、低功耗的系统,不仅要有良好的硬件支持而且更重要的是要有 一个能够充分利用这些硬件特征的优化的软件系统。编译器作为这个软件系统中 最重要的一环,其性能的优劣将直接影响系统的整体性能。但目前的编译技术却 不能很好的提供对s i m d 指令的支持,所以本文就深入的研究了支持s i m d 指令 的编译优化技术,取得了如下的一些研究成果。 1 提出了一套完整的支持s i m d 指令的代码选择技术的实现框架。该框架使 得代码选择面向基本块,面不再是语句,扩大了指令注释的搜索空间,产生了 s i m d 指令。同时采用机器描述来刻画目标机器指令集,使得代码选择中与机器 相关的部分局限于机器描述中,提高了代码选择的灵活性和可移植性。 2 设计并实现了一种基本块的数据流图( d f g ) 表示,这种表示既能充分表 达l c o d e 语义又比较适合模式匹配算法。传统的代码选择技术往往基于的是数据 流树( d f t s ) 的中间表示,这也正是其不能很好的支持s i m d 指令的一个重要原 因。同时为了借鉴模式匹配的思想,在这里还实现了从d f g 到d f t s 的转化。 3 采用一种树文法描述了目标机器的指令集,并对其进行预处理,使其转化 为相应的指令模板。树文法为目标机器指令集的描述提供了一种易读、易写、易 修改的方式,同时通过预处理隐藏了机器描述的细节,为编译的树匹配过程提供 了统一的接口。 4 改进了传统的树匹配和动态规划算法。使得其在匹配每棵输入树时,不再 是产生唯一的最优覆盖,而是产生多个可选的最优覆盖。为整数线形规划从全局 角度最终确定最优覆盖做准备。 5 采用了整数线形规划的方法解决了最终的最优覆盖的选择问题。在充分考 虑最终覆盖的正确性和有效性的情况下,提取出其所应满足的一系列约束及相应 的目标方程,该方程的最大解即表示最终将产生的s i m d 指令的数目。 关键词:代码产生树匹配和动态规划整数线性规划数据流图数据流树 s i 帅指令 国防科学技术人学研究生院学位论文 a b s t r a c t c o m p a r e dw i t ht r a d i t i o n a ld s p s ,m o d e md s p su s em o r ei l pt e c h n o l o g i e st o i m p m v et h e i fp e r f o n n a n c e m e a l l w h i l e ,i no r d e rt om e e tt h es p e c i a ln e e do fm e d i a p r o c e s s i n g ,m o d e md s p sh a v eac o m m o nc h a m c t e r i s t i ci nt h eh a r d w a r ed e s 噜n i n ga n d i m p l e m e n t a t i o n s t m d s oi ti sp o s s i b l et h a tt h e1 0 w e rp r e c i s i o nm e d i ad a t aj s p r o c e s s e dq u i c k l y at r u es y s t e mw h i c hi sh i g h e r p e r f o r n l a n c ea n dl o w e rp o 、v e r c o n s u m p t i o nn e e d sn o to n l yg o o dh 硎w a r es u p p o r t i n gb u ta l s oo p t i m i z e ds o f t w a r e t h a tm a ym a k cf u l lu s eo ft h eh a r d w a r e b e s i d eo t h e r s ,c o m p i l e ri st h em o s ti m p o r t a n t e l e m e n t i t sp e r f o m l a n c ew i l li n n u e n tt h et o t a lp e r f b m l a l l c eo fm ee n t i r es y s t e m d i r e c t l y b u tc u 玎e n tc o m p i l e rd o e s n th a v et h ea b i l i t y t o s u p p o r tm e s es i m d i n s t r u c t i o n ss m o o t h l y s oi nt 1 1 i s h e s i s ,w ed oad e 印r e s e a r c ho nc o m p i l e ro p t i m i z i n g t e c h e n 0 1 0 9 yw h i c hi ss u p p o no fs i m d ,m a b n gm a i nc o n t r i b u t i o n sa sf o l l o w s 1 aw h o i ei m p l e m e n t a t i o nf h m e w o r ko fc o d es e l e c t i o nw h i c hi ss u p p o r to f s i m dh a sb e e na d v a l l c e d t h e 丘a m e w o r km a k e sc o d es e l e c t i o nn o tf k es i n g l e s t a t 锄e n tb u tab a s i cb l o c k ,e x p a i l d e dm es e a r c h m gs p a c eo f c o d es e l e c t i o n ,g e n e r a t c d t h ei n s 缸_ i l c t i o n so fs i m d m e 卸w h i l e ,t l l ei n s t r u c t i o ns e to ft a 唱e tm a c h i n ei s c h a r x 国防科学技术人学研究生院学位论文 u s e dt od e c i d em ef i n a lc o v e r 5 u s i n gi n t e g e rl i n e a rp m g r a m m i n gm e t h o dr e s o l v e st h ec h o i c eo ff i n a lc o v e r c o n s i d e r i n gt h ec o 丌e c t n e s sa n de 瓶c i e n c yf u l l y ,w eh a v ea b s t r a c t e das e r i e so f c o n s t r a i n t sa i l dac o r r e s p o n d i n gt a r g e t 胁c t i o n ,t l l em a x i m u ms o l u t i o nm e a n st h ec o u m o fs i m dt h a t w i l lb eg e n e r a t e d k e y w o r d s :c o d eg e n e r a t i o n ,t 代em a t c h i n gw i t hd y n a m i cp r o g r a m m i n g i n t e g e r i i e a rp r o g r a m m i n g ,d a t an o wg r a p h ,d a t an o wt m e ,s i m d i n s t r u c t i o n 国防科学技术人1 擎研究生疏擎衍语文 i | l il ,塞。蚕! 三! ;萄 翡 f ;妻ii l 妻。鏊i j j 岱艨冷蕊;莱素固嚣蓊 & 弱| 二爆h 然;矧争i 彤! 亍j 鞋嘲向鲞量。l 。 i 匡l 爱i 鐾, 囊;亭搴副熏喜童二2 萋薹滞薹;i ; 茹螽毒疆雾邑 譬墓n 弧“耩 ;n 强 蓖受;- i 斗重士x x (譬芋l 錾錾 l 霾主 i 蹦篓蓦妻曼| i 霎 娃m ”i ! 莲i ;。墨j 垒? i 爱q d l _ :季擘囊钼尹毒j 睦薹| 奏l 髂壤毒! 莲l 襄箩;封钵址韭j 囊暖! 孽霉? t l 茎 瞧譬e ;l 手毒;目;篓i 霉雾! ! l f ;霎l 霆耋登? i ;彗;疆攥靖 ;霪誊2 i 7 i ,e e dl :鬟i i 矗主i i ;髫要偿墓i l 喜6 二! 霉! i 臻妻f 强 “。强轮眭i i l i ;茎繁主i 二蔷l i x 馨鹫塞;。 譬t l i 季鐾阶箍;雯鏊意;i i i i l ;i l “i ;i 女? | ;皇雾l 董鏊;割雩l l l 冀馥:4 磊蓦l i 甜h 硅耗鬟 越霪l 垂尊r i f 主i i 冀蓦群琴皂离馨:t 产百;凸蚕;萼奠塞i 囊耋萋堇囊焉l i 撒i 址址! ” 图。jl 斋鐾 x 国防科学技术大学研究生院学 :i 7 :论文 图5 9 表达式i = c + 4 的中间表示树 图5 1 0 标注后的中间表示树 图5 1lb u ns t a t e 的数据结构 图6 1 死锁示意图 图7 1 代码选择的形象化表示 4 3 4 4 4 5 5 1 5 4 独创性声明 本人声明所呈交的学位论文是我本人在导师指导下进行的研究工作及取得 的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含 其他人已经发表和撰写过的研究成果,也不包含为获得国防科学技术大学或其它 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均已在论文中作了明确的说明并表示谢意。 学位论文题目:杰挂墨! 丛望盟q 缉竖选丝撞盛煎堑窥狸塞塑 学位论文作者签名:起婆盘日期:2 ,畸年f7 月7 少日 学位论文版权使用授权书 本人完全了解国防科学技术大学有关保留、使用学位论文的规定。本人授权 国防科学技术大学可以保留并向国家有关部门或机构送交论文的复印件和电子 文档,允许论文被查阅和借阅;可以将学位论文的全部或部分内容编入有关数据 库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密学位论文在解密后适用本授权书。) 学位论文题目:一塞挂墨! 鲤煎堕巳绩竖选i 垦焦垄鲍盟壹塑塞翌 学信i 仑t 作者签名:叁羔鳘 作者括导教师签名 日期:怕j 一年,j 月0 董 日期:? ,口侔 f 4 月殍日 国防科学技术人学研究生院学位论文 第一章引言 1 1 课题背景与意义 在当今这个信息技术高速发展的时代,d s p 技术日益在嵌入式系统中得到了 广泛的应用,因此便对d s p 系统的开发提出了新的更急迫的需求 11 】。而在d s p 系统开发中,性能、芯片大小及功耗三个方面的问题是我们首先必须关注的。为 此,d s p 在硬件设计方面为实现这些目标作出了巨大的努力,比如广泛采用e p i c 和v l l w 的体系结构,为i l p ( i n s t m c t i o nl e v e lp a r a l l e l ) 提供更好的硬件支持;由 于d s p 的一个重要应用是媒体处理,而媒体处理最大的特点就是数据具有高度的 并行性,同时在媒体处理中通常也只要求8 位或l6 位的数据精度,然而,许多 媒体处理器具有3 2 位字长,这就潜在的存在着计算资源浪费的可能。为了解决这 一问题,许多媒体处理器采用一类特殊的指令一s i m d ( s i n g l ei n s t n l c t i o nm u m p l e d a 蛐指令,它允许把一个物理寄存器分成几个虚拟的子寄存器,然后在这几个虚 拟的子寄存器上并行执行相同操作。在此尤其应该引起我们注意的是当今许多高 性能d s p 芯片都提供了对s i m d 指令的支持。我们自行研制的y h f t d s p 7 0 0 便是这样的一款。有了这样的硬件支持以后,如果想真正的得到一个高性能、低 功耗的系统,就必须构造能充分利用硬件特征的优化的软件系统。固然直接利用 汇编语言来编写应用程序可以在很大程度上利用机器的硬件特性,但在当前直接 用汇编语言来编写应用程序的方法正越来越不被人们采用。这主要是因为用汇编 语言来编写应用程序是费时的、低效的而且还会导致应用程序的不可移植的问题。 这就要求我们构造的编译器必须具有能够把用高级语言编写的应用程序转化为能 充分利用机器硬件特征的汇编代码的能力。因此本论文将主要介绍充分支持处理 器硬件特征一s i m d 指令的编译优化技术。支持s i m d 指令的编译技术是本文的 重要研究内容,同时本文也涉及s i m d 指令对低功耗编译技术的影响。有研究表 明s i m d 指令在在提高d s p 性能和降低功耗方面的作用巨大。例如德国的多特蒙 德大学的r a i n e rl e u p e r s 等人已经为1 c x 粥h l s t r u m e n tc 6 2 ) ( x 和p h i l i p st r i m e d i a t m l 0 0 0 这两种d s p 芯片实现了支持s i m d 的指令选择【3 】 2 。他们得到的具体的 实验结果如下: 第l 贞 国防科学技术大学研究生院学位论文 表卜l 在两款芯片上的试验结果 t i ( = 6 2 x x v e c t o ra d d s h o nl840 7 f i r 矗i t e rs h o no 2 l 1 72 9 c o n 、竹l u t i o “s h o ni860 6 f i r m 钯fs h o n l1 5l i 0 9 n c o m p “u p d a 把 s 时n 1 2 01 630 i m a g e m p o s i t i n j s h o n l1 41 1 3l t r i m e d i a t h 咀0 0 0 v e c t o r8 d ds h o n l84 o 7 1 i r 丘l t e rs h o o2 22 25 1 c o n v o l u t j o ns h o n i8b0 9 f i rn l 俯rs h o n l 1 5 9 0 9 nc o m p i e x “p d a t o s l o nl2 02 047 l m a g e m p 。s l t m i s h o i 1 473 2 v e c t o fa d d c h a r31 645o f l r n l k rc h a f 33 61 82 6 5 从上面的实验结果【1 7 】可以看出利用s i m d 指令可以使所需指令的数目在很大 程度上得到减少,其中对于向量加可以减少5 0 。同时多特蒙德大学的m a r k u s l o r e n z 和p e t c rm a n v e d e l 等也首次对s i m d 指令对功耗的影响进行了研究( 基 于m 3 一d s p 这样一款d s p 芯片) ,其研究结果表明:虽然一条s i m d 指令消耗的 能量很可能是一条s i s d 指令消耗能量的一倍或几倍,但若充分利用s i m d 指令 可以达到能量消耗平均减少7 2 而执行时间平均减少7 6 的效果3 4 】。由此不 难看出,构造能充分的挖掘和利用s i m d 指令的优化的编译器便显得至关重要了。 而事实上对支持s i m d 指令的编译技术的研究也是编译技术研究的一个重要的组 成部分【3 5 1 。 1 2 本文的贡献 本文的贡献主要有以下的几个方面: 第一:提出了在现有的编译框架下支持s i m d 指令的完整的算法。面向d s p 的编译器设计与面向通用处理器的编译器设计有很大的不同,其中很重要的一个 方面就是由于d s p 处理器在体系结构上的特殊性使得经典的编译技术不断受到 挑战。s i m d 指令的出现就属于这种情况,而且伴髓着d s p 处理器的广泛使用, 支持s i m d 指令的编译技术的研究已经成为亟待解决的理论和技术问题。 第二:设计和实现了一个可移植的代码选择算法。现代的编译器日益重视其 可移植性和可重构性。因此,在这里我们用机器描述语言描述【2 5 】【2 6 1 了从中间 国防科学技术人学研究生院学位论文 语南到更低级语言的映射,由预处理器【蚓将它装换成相应的模式集,代码生成 器将中间语言与这个模式集作匹配,在匹配过程中生成更低级代码。匹配算法是 与机器无关的,代码生成中与机器相关的成分都集中在模板描述中,这就使得代 码生成算法和机器特征隔离开来。这使得它有良好的可移植性。 第三:设计了一种与代码生成算法相适应的数据流图中间表示。在i m p a c t c 的编译器中,它采用了一种类似三地址码的中问表示一l c o d e 。但在我们的代码 生成算法中,却要求基于一种d f g 图中间表示。在这里把l c o d e 转化为什么样的 d f g 图表示,既要考虑它们的语义等价性和目标指令集的特征更重要的是要满足 树匹配和动态规划算法的要求。 第四:设计并实现了由基本块构造d f g 表示的算法,同时为了借鉴树匹配和 动态规划算法的思想,通过消除公共子表达式把d f g 分解为一系列d f t s 。 第五:用整数线形规划的方法解决了最终覆盖的选择问题,提取出了生成 s i m d 指令所需满足的约束以及表达最大限度生成s i m d 指令的目标方程。 1 3 论文结构 第二章叙述了目标机器v l i wd s p 体系结构特征以及所采用的i m p a c t 编译 框架,重点讨论了这款芯片所引入的s i m d 指令集合以及i m p a c t 编译器的中间 表示l c o d e 。这二者构成了本文讨论的出发点。第三章分析了传统的代码产生算 法的思想,指出它们之所以不能直接支持s l m d 指令产生的原因。同时针对这些 原因提出了相应的解决对策,给出了支持s i m d 指令的编译框架。第四章介绍了 这个框架中最前端的两个并列的过程,关于描述目标机器指令集的机器描述问题 以及关于如何设计d f g 图【3 】表示和如何如何把l c o d e 表示转化为d f g 图表示的 问题。第五章叙述了树匹配和动态规划算法的思想以及为支持s i m d 指令和便于 算法实现所作的相应改进。第六章叙述了产生s i m d 指令所必需满足的约束以及 如何根据这些约束生成相应的目标方程和约束不等式,并用l ps o l v e r 来解这个方 程,最后根据计算结果作相应的语义动作。第七章为工作小结以及关于未来工作 的一些设想。 第3 负 国防科学技术人学研究生院学位论文 第二章s l m d 指令及其编译器 本章主要叙述了两方面的内容,其一+ :介绍了s i m d 指令的基本特征以及v l l wd s p 所支持的几种s i m d 指令的语法和语义。其二:介绍了i m p a c t 编译器的编译框架,其 中主要介绍了其中间表示l c o d e 【9 】【3 0 1 。 2 1 _ 1 基本概念 2 1s i m d 指令概述 如果一条指令是对存储在子寄存器而不是整个寄存器中的数据进行操作,我 们就说这条指令是s i m d 指令。为了利用s i m d 指令,通常把一个3 2 位的数据 寄存器看成是两个1 6 位子寄存器或是四个8 位子寄存器。从而,对c 语言来说, 一个3 2 位寄存器可以存放四个c h a r 型的数据或两个s h o r t 型的数据或一个i n t 型 的数据。图2 一l 给出一个y h f t d s p ,7 0 0 的s i m d 指令的例子a d d 2 。 l1 61 50 s r c l s r c 2 d e s t 图2 1a d d 2 指令的功能示意图 为了充分的利用s i m d 指令,把被操作的八位或十六位的数据高效的从存储 器中读出和写入是至关重要的,在某些条件下,可以利用3 2 位的操作来取操作数 和向存储器写s i m d 指令的计算结果。正如下面的例子所示: v o - df ( s h o n + a ,s h o n + b ,s h o r t + c ) i n t i ; f o r ( i - 0 ;i b ”e 0 ( d s t ) b ”e 1 ( s r c l ) + b y t e l ( s r c 2 )一 b ”e l ( d s t ) b y t e 2 ( s r c l ) + b y t e 2 ( s r c 2 ) _ b y t e 2 ( d s t ) b y t e 3 ( s r c l ) + b ”e 3 ( s r c 2 ) _ b ”e 3 ( d s t ) ) e l s e n o p 该指令不执行饱和操作,其中任意一个8 位加法的进位不影响其余8 位加法 的执行。该指令在流水线的e l 阶段读取源操作数s r c l 和s r c 2 并在这一阶段向目 的寄存器写入结果,故其延时槽为o 。 s u b 4 不带饱和,捆绑的8 位有符号数的减法。 其语法格式为:s u b 4 ( _ u n i t ) s r c l ,s r c 2 ,d s t 表2 2s u b 4 指令描述 使用的操作码映射域操作数类型功能单元操作码域 器 i 4 x i 4 l 1 l 21 1 0 0 1 1 0 i 4 该指令的执行过程如下: i f ( c o n d ) ( b v t e 0 ( s r c l ) 一b v t e 0 ( s r c 2 ) ) ( b y t e l ( s r c l ) 一b y t e l ( s r c 2 ) ) ( b v t e 2 ( s r c l ) 一b v t e 2 ( s r c 2 ) ) ( b v t e 3 ( s r c l ) 一b v c e 3 ( s r c 2 ) ) ) e l s e n o p 该指令不执行饱和操作,其中任意一个8 位减法的借位不影响其余8 位减法 的执行。该指令在流水线的e 1 阶段读取源操作数s r c l 和s r c 2 并在这一阶段向目 的寄存器写入结果,故其延时槽为0 。 a d d 22 对1 6 位数相加,结果为2 个1 6 位数。 o 1 2 3 呐盹龇 一一一一 国防科学技术人学研究生院学何论文 表2 5s a d d 2 指令描述 使川的操作码映射操作数类型 功能堆元操作码域 翌 s 2 x 蛇 si s 20 0 0 0 d s ts 2 在上表中,s 2 表示2 个有符号数,该指令的执行过程如下: i f ( c o n d ) s a t ( m s b l 6 ( s r c l ) + m s b l 6 ( s r c 2 ) ) m s b l 6 ( d s t ) : s a t ( 1 s b l 6 ( s r c l ) + l s b l 6 ( s r c 2 ) ) l s b l 6 ( d s t ) : ) e l s e n o p 该指令执行饱和操作,低1 6 位的进位不影响高1 6 位的执行。对每一个1 6 位的结果均执行饱和操作是指它满足以下规则: 如果加法的和在一2 1 5 至2 1 5 一l 之间,无需执行饱和操作,结果保持不变; 如果加法的和大于2 1 5 1 ,则结果置为2 1 5 一l : 如果加法的和小于一2 1 5 ,则结果置为一2 1 5 。 该指令在流水线的e l 阶段读取源操作数s r c l 和s r c 2 并在这一阶段向目的寄 存器写入结果,故其延时槽为0 。 s a d d u 4 带饱和操作的捆绑8 位无符号数的加法。 其语法格式为:s a d d u 4 ( u n i t ) s r c l ,s r c 2 ,d s t 表2 6s a d d u 4 指令描述 使用的操作码映射域操作数类型功能单元操作码城 器 u 4 x u 4s l s 2o o l l u 4 在上表中,“表示四个8 位无符号整数,该指令的执行过程如下: i f ( c o n d ) s a t ( u b y t e o ( s r c l ) + u b y t e o ( s r c 2 ) )一 u b y t e 0 ( d s t ) ; s a l ( u b y t e l ( s r c l ) + u b y t e l ( s r c 2 ) ) _ u b y t e l ( d s t ) ; s a t ( u b y t e 2 ( s r c l ) + u b y t e 2 ( s r c 2 ) ) _ u b y t e 2 ( d s t ) : s a t ( u b ”e 3 ( s r c l ) + u b y t e 3 ( s r c 2 ) ) - u b ”e 3 ( d s t ) ; ) e l s e n o p 该指令执行饱和操作,其中任意一个8 位加法的进位不影响其余8 位加法的 执行。对每个8 位的结果均执行饱和操作是指它满足以下的规则: 如果加法的和在o 至2 8 1 之间,无需执行饱和操作,结果保持不变: 如果加法的和大于2 8 一l ,则结果置为2 8 一l 。 该指令在流水线的e 1 阶段读取源操作数s r c l 和s r c 2 并在这一阶段向目的寄 鹅8 贝 国防科学技术火学研究生院学位论文 存器写入结果,故其延时槽为o 。 s a d d u s 2 带饱和操作的捆绑1 6 位无符号数与有符号数的加法。 其指令格式为:s a d d u s 2 ( u n i t ) s r c l ,s r c 2 ,d s t 表2 7s a d d u s 2 指令描述 使用的操作码映射域 操作数类型功能单元操作码域 墨 u 2 x s 2s l s 20 0 0 l u 2 在上表中,u 2 表示两个捆绑的1 6 位无符号整数,s 2 表示两个捆绑的1 6 有符 号整数,指令的执行结果为两个捆绑的1 6 位无符号数。其执行过程如下: i f ( c o n d ) s a t ( u m s b l 6 ( s r c l ) + s m s b l 6 ( s r c 2 ) ) _ 啪s b l 6 ( d s t ) : s a t ( u l s b l 6 ( s r c l ) + s l s b l 6 ( s r c 2 ) )一 u l s b l 6 ( d s t ) : ) e l s e n o p 对每一个1 6 位的加法均执行饱和操作,即每一个1 6 加法满足如下规则: 如果加法的和在0 至2 1 6 一l 之间,无需执行饱和操作,结果保持不变; 如果加法的和大于2 1 6 1 ,则结果置为2 1 6 一l ; 如果加法的和小于o ,则结果置为o ; 该指令在流水线的e l 阶段读取源操作数5 f c 】和s r c 2 并在这一阶段向目的寄 存器写入结果,故其延时槽为o 。 s a d d s u 2 带饱和操作的捆绑1 6 位有符号与无符号加法( 伪指令) 。 其指令格式为:s a d d s u 2 ( u m t ) s r c 2 ,s r c l ,d s t 该指令为一条伪指令,汇编器往往用s a d d u s 2 ( u n i t ) s r c l ,s r c 2 ,d s t 来代替上 述指令。 m p y 2 不带饱和操作的捆绑1 6 位有符号数乘法。 其指令格式为:m p y | 2 ( 砌ds r c i ,s r c 2 ,d s t 表2 8m p y 2 指令描述 使用的操作码映射域操作数类型 功能单元操作码域 蒌 s 2 x s 2m i m 20 0 0 0 0 u l l o n g 在上表中,u l l o n g 表示两个l o n g 型的有符号数,其执行过程如下: i f ( c o n d ) l s b l 6 ( s r c l ) 1 s b l 6 ( s r c 2 ) 一 d s t m s b l 6 ( s r c l ) m s b l 6 ( s r c 2 ) d s o ) e l s e n o p 该指令在流水线的e 1 阶段读取源操作数,并在e 2 阶段向目的寄存器写入结 豁9 页 国防科学技术大学研究生院学位论文 链表。a t t r 为属性函数。 幽2 4l c o d e 函数的数据结构 2 2 2 1 2 控制块( l c b ) 控制块由操作组成,它的数据结构如图2 5 所示。i d 是控制块的唯一标识, 6 r s to p 和i a s t0 p 分别指向控制块的第一个和最后一个操作,控制块的所有操作 构成一双向链表。a t t r 为块属性,属性能以简要的形式保存控制块的辅助信息。 s r cn o w 和d e s tf l o w 则是保存控制块之间的控制流信息,d e s tn o w 描述的是在程 序中当前控制块的后继控制块,即当程序执行完本控制块之后应跳到那个控制块 继续执行:而s r cn o w 则描述了当前控制块的前继控制块,即当那个控制块执行 完了以后可能跳到当前的控制块执行。p r c v b 和n e x t - c b 用于构成控制块双向链 表。 c y p e d e 士目c r u c cl f u n c c h 日ro n a m e : lc bo 士i r a 七0 b : lc b 0 1 日8 cc b ; l 乞七r+ 矗七c r 二 lf u n c ; 图2 5l c o d e 控制块的数据结构 2 2 2 1 3 流( l f l o w ) 控制流从属于控制块,它由l _ f l o w 数据结构描述,如图2 6 所示,字段c c 给出分支条件( 跳转还是不跳转) 。s r c _ c b 和d e s t - - c b 分别用于标记相应于该n o w 的 源和目的控制块。p r e v _ f l o w 和n e x t - n o w 用于构成n o w 的双向链表。 c y p e d e 日t r u c tl _ f u 船l c h a ro n 日聃; lc b士i r 日七曲; lc bl a s tc b ; la 七七ra 七七r ; )lf u n c ; 图2 6l c o d e 控制流的数据结构 2 2 2 1 4 指令( l o p e r ) l c o d e 指令的内部数据结构由l _ _ o p e r 给出,如图2 7 所示。其中i d 表示本指 令在控制块中的编号。p r o c _ o p c 是该l c o d e 指令相对应的目标机器指令的操作码。 o p c o d e 则表示p r o c _ o p c 对应的操作码助记符。p r e u p 和n e x t - o p 分别保存的是 该指令在当前控制块内的前一条和后一条指令,从而构成控制块内指令的一个双 向链表。 1 西再r 一 , , 吖髂吖曲b 北 n l e = 昌 o h “h吐北n 酏能卧。f叫叫m缸。警 e 驰c 北 删虹聃配 n 士l b t t t t , , 吖,s b t 垤。c曲h衄n 。n n n 诅n北卧吐b血驰性札驰q 弧 a 七s h衄船札札 删n h “ 国防科学技术大学研究生院学位论文 图2 7l c o d e 指令的数据结构 2 2 2 1 5 操作数( l p e r a n d ) l c o d e 操作数的内部数据结构由lo p e r a i l d 给出,如图2 - 8 所示。lo p e r a i l d 用来描述指令的操作数的类型和它的内容。t y p e 字段表明操作数是否为寄存器、 m a c r o 、标号、字符串指针、立即数,等等。如果t y p c 字段为寄存器或是m a c r o , 则c 谚p e 表示它的内容的c 语言类型。字段v a l u e 是联合类型,引用它的哪个条目 要看t y p e 字段为何值。 图2 8l c o d e 操作数的数据结构 2 2 2 2 外部表示 每个l c o d e 文件包含下面两个大的部分: 1 ) 数据部分:该部分由( m sd a t a ) 表示开头,在数据部分中定义了静态和 动态的变量、数据对齐方式、分配空间的大小、保留的空间的大小、数据访 问的范围、数据类型等信息。 2 ) 代码部分:该部分则是以( m st e x t ) 开头,在其中包含了当前l c o d e 文 件中的代码信息、函数信息、控制块信息、操作信息等。 下面主要对代码部分中的控制块信息和操作信息加以说明。 2 2 2 2 1 控制块( c b ) 国防科学技术人学研究生院学何论文 控制块由一系列操作组成;控制块只有一个入口但可以有一个或多个出口, 如果只有一个入口和一个出口,则这个控制块就是编译中的基本块( b a s i cb l o c k ) : 一个具有多个出口的控制块是一个超级块( s u p e rb l o c k ) 图2 9 是一个典型的控制 块图。 图2 9 控制块结构视图 控制块由前缀c b 开头,紧接在其后的是一个在本地函数中唯一的一个控制块 序号( i d ) 和该控制块的执行次数c b - e x e 吖n t ( 该信息可以通过p r o 丘l e 或静态分析得 到) 。紧跟其后的是流( n o w ) 信息,流信息由四个基本元素组成:n o w 前缀、该流执 行的条件c o n d 、目的控制块号d e s t 以及该分支流执行的次数c n t 。在函数中,通 常一个流( f l o w ) 信息对应于一条分支操作,流信息的c o n d 为1 时,目的控制块 号表示该分支操作执行成功时跳转到的控制块:c o n d 为o 时,目的控制块为该分 支失败时将执行的控制块。控制块除了上面说的流信息外,主要由一系列的操作 ( o p ) 信息组成。下面来阐述操作信息。 2 2 2 2 2 操作( o p e r a t i o n ) 操作以o p 前缀开头,余下主要由四个部分组成:操作编号、操作码信息、操 作数信息和属性信息。操作编号是该操作在所在函数中的唯一标识。图2 1 0 是一 个典型的l c o d e 指令的操作格式。 叩 i d o p c o d ef i a g sp r e d d e s ts o u r c e sa i 埘b u t e s 图2 一1 0 典型的l c o d e 指令格式 在l c o d e 中,每个操作最多可以使用2 个目的操作数和3 个源操作数。属性信息 主要描述了该操作的一些具体信息,如该操作相对应的目的机器指令的操作码、 调度时间等。 笫1 5 虹 国防科学技术大学研究生院学位论文 第三章支持sj m d 指令的代码选择技术 本章叙述了传统的经典的代码产生技术的核心思想,指出其不能直接用于产 生s i m d 指令的原因,在此基础上提出一套完整的支持s l m d 指令的编译实现方 案i l 。3 1 节主要介绍了三种经典的代码选择算法,并比较了它们的优劣。3 2 节 叙述了传统编译器对s i m d 指令的简化处理f 9 j ,并分析了传统代码产生技术不能 直接支持s i m d 指令的原因【2 j 。3 3 节在前两节的基础上提出了一套完整的支持的 s i m d 指令的实现方案。 3 1 经典的指令选择算法 代码生成的任务是把给定的输入语法结构转换成更低级的表示形式或汇编语 言表示,即把中间语言所表示的操作码和操作数映射到更低级表示或汇编语言上 去。由于目标机是多种多样的,为每一种目标机都从零开始构造一个代码生成系 统,需要做大量重复而琐碎的工作。针对这个问题,从八十年代开始了自动代码 生成的研究,考虑如何减少移植代码生成器中的工作量,同时保证能够生成具有 较高效率的代码。在这个探索过程中,产生了一批优秀的成果。 3 1 1 解释型代码生成( i n t e x 国防科学技术大学研究生院学位论文 3 2 3i m p a c t 代码注释的方法 i m p a c t 编译器中的代码注释实际上是要用目标机器的操作复写l c o d e 代码的 语义,注释得到的代码仍用l c o d e 表示,但因为每个操作都是目标机器支持的,因 此也称它为m c o d e 。 在i m p a c t 编译器中,它的注释过程是逐操作进行的。最简单的情形是一个 l c o d e 操作目标机器本身就支持,这时只需重写这个操作即可。稍复杂些的情形, l c o d e 操作目标机器是支持的,但它的操作数格式不合要求,因此需用其它操作来 调整操作数的格式。最复杂的情况是l c o d e 操作在目标机器中没有相应的操作,需 要用其它操作组合来实现。但对于需要同时考虑几条l c o d e 操作,并希望把这几条 操作合并为一条复杂的目标机器指令的这种情形,这种方法明显的无能为力了。 但实际上,在为d s p 处理器进行代码选择的过程中,这种情况确实是经常遇到的。 比如图3 - 4 所示: l c o d e :l d c 2 【( r6s h ) 】【( r2 4i ) ( m a c $ p 1 o p n t ) 】 l d c 2 【( r i5s h ) 】【( r2 6i ) ( m a c $ p 10p n t ) 】 m c o d e :l d i 【( r6 i ) 】【( f2 4i ) ( m a c $ p l 0p n t ) 】 图3 4 多对一的注释 从上面的介绍不难看出,这种处理方法的缺点是明显的,首先它实际上是一 种硬编码的方式,注释过程与目标机器相关,根本不具备可移植性,使得当移植 这个编译框架到其它目标机器上时需要重写这个过程。而更为重要的是对于这种 注释方法,它每次只针对单条的语句进行分析,而不能结合同一基本块中的其它 相关语句一起分析,这 果,故它的延时槽为l 。 2 2 im p a c t 编译器简介 i m p a c t 编译器是可 x 国防科学技术大学研究生院学位论文 模板刁唷2 描述清楚。比如对于a d d 2 ,在我们的机器描述中用图3 5 所示的两条模 板来描述: r e g l o :l o p a d d ( r e g l o ,r e g l o ) r e g h i :l o p a d d ( r e g _ h i ,r e g i ) 圈3 5a d d 2 的机器描述 其中r e g j o 和r e g - h i 分别表示一个3 2 位寄存器的低1 6 位和高1 6 位。同时传统的 模式匹配的代码产生技术基于的是一种数据流树( d f l 的中间表示,把模式匹配的 问题转化为用可用的指令模板匹配数据流树( d f t s ) 的问题,而这时很可能描述 s i m d 指令的多个模板分别匹配了不同的d f t 中的节点( 这是不正确的,因为这样将 产生无效代码) ,即使他们匹配了同一棵树的多个节点,传统的模式匹配技术也没有 能力把描述同一个s i m d 指令的多个模板整合起来而生成s i m d 指令。s i m d 指令的 产生要求基于基本块的数据流图( d f g ) 中间表示而不是d f t ,以便从全局的角度考 虑模板的整合问题。 第二,传统的模式匹配的代码产生技术往往对输入的每个d f t 产生唯一的最优 覆盖,而s i m d 指令的产生要求在覆盖每个d f t 时产生多个可选的最优覆盖,然后 再从全局的角度选择个最优的覆盖【2 0 】【2 1 】,使得这个覆盖要包含尽可能多的 s i m d 指令。 3 ,3 支持s i m d 指令的代码选择技术实现框架 基于传统代码选择技术的不足,我们提出要在基本块的完全数据流图d f g ( 缸l l d a t an o wg r 即h ) 的基础上进行代码选择【2 】,而不再是基于数据流树d f t ( d a t an o w t r 优) 的中间表示。同时,由于希望借鉴模式珏配的代码生成思想,所以在这里采用 把d f g 分解为多个d f t 的方法,以便使用模式匹配的方法完成对每个d f t 的标注。 注意在这里我们对传统的模式匹配与动态规划算法进行了改进,同时对每个d f t 产生多个可选的最优覆盖。最后再使用整数线性规划的方法,从全局的角度在这 多个可选的最优覆盖选择唯一的一个最优覆盖,使得这个覆盖中尽可能多的包含 s i m d 指令。其基本实现框图如图3 6 所示: 树匹配和整数线形 图3 6 支持s i m d 的代码选择的实现框图 在这里我们借鉴了传统的树匹配和动态规划算法的思想,同时又对它进行了 改进,主要表现在如下的两个方面:其一,传统的树匹配和动态规划算法基于的是 1 函顽 国防科学技术人学研究生院学位论文 数据流树的中间表示,但考虑到s i m d 的产生需要从整个基本块的角度来寻求最 优覆盖,所以在这里我们采用基本块的数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论