




已阅读5页,还剩54页未读, 继续免费阅读
(计算机系统结构专业论文)itanium+2上编译器性能调优方法的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 编译器是一种将高级程序设计语言编写的源程序转化为语义等价的机器语言程序 的系统软件在这个过程中,编译器常常会对于输入代码进行优化,从而可以得到更好 的性能或者是减少生成的代码大小等通常对于通用处理器的编译器,性能往往是最重 要的目标开发编译器的种种优化的最终目的都是为了提高程序的性能然而,在编译 器的开发过程中。我们常常会遇到这样一种情况:在经历了很长时间的设计和实现之 后,编译器可以正常运行,但是却达不到预期的优化效果,有些时候性能甚至出现了下 降的情况在这种情况下。我们就需要对基准测试用例进行分析来找出性能下降的原 因该过程我们称为性能分折性能分析的主要目的是找到现有程序的瓶颈之处,通过 对这些地方的编译优化进行分析,发现现有优化的不足并对其进行改进,从而获得性能 提升 i t a n i u m2 是由i n t e l 以及h p 公司联合推出的一款用于高性能服务器的6 4 位通 用处理器i t a n i u m2 采用的是显式指令集并行( e x p n c i t l yp a r a l l e li n s t r u c t i o nc o m - p u t i n g ,e p i c ) 结构e p i c 结构中软硬件接口可以使得软件更好地发掘编译时信息并 有效地将这些信息传递给硬件e p i c 结构提供了强大的硬件支持使得编译器能够在 很大范围内的代码作全局优化这些优化可以使得指令级并行性( i n s t r u c t i o nl e v e l p a r a l l e l i s m ,i l p ) 更好地暴露给硬件,从而可以使得硬件资源得到更好的利用同时,对 于编译好的代码,e p i c 结构可以很好地进行动态运行时优化这样使得软件以及硬件 的联系更加紧密,从而使得编译器的地位更加重要 本论文主要讨论i t a n i u m2 处理器上的编译器的性能分析与调优方法论文首先介 绍了性能分析与调优的基本过程以及其意义之后,我们介绍了i t a n i u m2 上用于性能 分析与调优的常见工具以及i t a u i u m2 本身对于性能分析和调优提供的硬件支持在 此基础上,论文讨论了i t a n i u m2 上的性能分析以及调优的基本方法以及步骤最后, 我们给出了具体的调优实例我们主要的调优对象是开放源代码编译器o r c ( o p e n r e s e a r c hc o m p i l e r ) 通过利用i t a n i u m2 提供的硬件计数器及其丰富的性能监测与分 析工具,我们对于s p e cc p u 2 0 0 0 中的m g r i d 浮点程序进行调优通过调优,我们发 现: 1 o r c 编译器中产生局部性提示的部分可以被改进目前,o r c 对所有的预取指 令都产生n t a 的局部性提示。这里,n t a 表示在所有的存储层次上都没有时间局部 性对于浮点程序,大部分预取都是在循环中进行的很显然,n t a 不太符合这种 情况 2 o r c 编译器的代码生成部分没有很好的利用i t a n i u m2 体系结构的特点一个饲 子就是f e t c h 指令( 预取指令) 的自增模式。在该模式下,每次l f e t c h 指令在预取 之后可以自动对目标地址增加一个常数。这样可以减少对寄存器的使用,同时也 减少生成的代码大小 3 在寄存器分配中,活跃区间的分裂算法过于激进。这会导致一些冗余的拷贝指令 被插入。 4 预取在i t a n i u m2 体系结构上占有重要的地位但是,0 r c 的预取算法有待改 进( 例如:可以利用i t a n i u m2 的旋转寄存器特点产生预取指令,这样可以减少生 成的代码也可以减少经s w p 后核心循环所需要的周期) 关键词:i t a n i u m2 ,o r c ,编译器,性能,调优 t,;p;。 a b s t r a c t c o m p i l e ri sas y s t e ms o f t w a r et h a tt r a n s l a t e sh i g hl e v e lp r o g r a m m i n gl a n g u a g ei n t o s e m a n t i c a l l ye q u i v a l e n tm a c h i n ec o d e i nt h i st r a n s l a t i o np r o c e s s ,c o m p i l e ro f t e np e r f o r m s v d x i o u 8o p t i m i z a t i o n st ot h ei n p u ts o u r c ec o d e 8 0t h a tb e t t e rp e r f o r m a n c eo rs m a l l e r c o d es i z ec a nb ea c h i e v e d f o rg e n e r a lp u r p o s ep r o c e s s o r sc o m p i l e r s 。p e r f o r m a n c ei s a l w a y st h eu l t i m a t eg o a l a l lt h eo p t i m i z a t i o n sa r ed e s i g n e dt o w a r dh i g h e rp e r f o r m a n c e h o w e v e r ,d u r i n gt h ec o m p i l e rd e v e l o p m e n t ,w eo f t e nm e e tt h ec a s et h a ta f t e rah u g e e f f o r th a sb e e ns p e n t ;w es t i l lg a i nv e r yl i t t l ep e r f o r m a n c ei m p r o v e m e n t ,s o m e t i m e se v e n p e r f o r m a n c ed e c r e a s e t os o l v et h i sp r o b l e m , w en e e dt od op e r f o r m a n c ea n a l y s i 8a n d t u n i n g ,w h o s em a i np u r p o s ei st oi d e n t i f yt h ep r o g r a m 8b o t t l e n e c k t h r o u g ht h ea n a l y s i s o ft h e s eb o t t l e n e c k s w ec 蛐f i n do u tt h ed e f i c i e n c i e so fc u r r e n to p t i m i z a t i o na l g o r i t h m s a n d m a k ef u r t h e ri m p r o v e m e n t i t a n i n m2i saj o i n te f f o r tb yi n t e la n dh pf o rh i g hp e r f o r m a n c ei n t e r n e ts e r v e r s a n dw o r k s t a t i o n s i ti st h es e c o n di m p l e m e n t a t i o no fi a - 6 4a r c h i t e c t u r e w i t he p i c ( e x p l i c i t l yp a r a l l e li n s t r u c t i o nc o m p u t i n g ) s t y l ef o rt i g h tc o u p l i n gb e t w e e nh a r d w a r e a n ds o f t w a r e ,t h ei t a n i u m2h a r d w a r e - s o f t w a r ei n t e r f a c ec a nm o r ee f f i c i e n t l ye x p l o i tt h e c o m p i l a t i o nt i m ei n f o r m a t i o n ,t h u sp u t t i n gm o r ee m p h a s i so nt h ee f f e c t so fc o m p i l e r o p t i m i z 眦i o n s 恤p a p e rd e a l sw i t ht h ep e r f o r m a n c ea n a l y s i sa n dt u n i n gm e t h o d o l o g yo ft h eh a - n i u m2a r c h i t e c t u r e ,e s p e c i a l l yt h ep e r f o r m a n c et u n i n go fc o m p i l e ro p t i m i z a t i o n s f i r s t , t h ec o n c e p to fp e r f o r m a n c et u n i n ga n da n a l y s i si si n t r o d u c e d t h e n ,t h eg e n e r a lm e t h - o t i sa n dc o m m o n l yu s e dt o o l sf o rp e r f o r m a n c et u n i n g a sw e l la st h ee r c h i t e c t u r es u p p o r t p r o v i d e db yi t a n i u m2 ,a r ed i s c u s s e d f i n a l l y , o i l ec a s es t u d yi ss h o w n t h i sc a s es t u d y s h o wo u re x p e r i e n c e si nt u n m gt h eo r c ( o p e nr e s e a r c hc o m p i l e r ) c o m p i l e r , o ns p e c 2 0 0 0f pc a 8 e :m g r i d d u r i n gt h et u n i n gp r o c e s s ,w ef o u n do u t : 1 t h el o c a l i t yh i n tg e n e r a t i o na l g o r i t h mi no r cc o m p i l e rs h o u l db ei m p r o v e d ,b e - c a u s e8 ut h ec u r r e n th i n t sa r ej u s tn t aw h i c hm e a n sn ot e m p o r a ll o c a l i t yi na l l l e v e i s 2 o r cc o m p i l e r sc o d eg e n e r a t i o nd o e sn o tu t i l i z ei t a n i u ma r c h i t e c t u r ef e a t u r e sv e r y w e l l ( e g t h ei m m e d i a t eb a s eu p d a t ef o r mi nl f o t c hi n s t r u c t i o n ) 3 t h et o oa g g r e s s i v es p l i t t i n gi nl i v er a n g es p l i t t i n gi nr e g i s t e ra l l o c a t i o n t h i sm a y r e s u l ti nr e d u n d a n tc o p yi n s t r u c t i o n si n s e r t e d 4 p r e f e t c hi sv e r yi m p o r t a n to ni t a n i u ma r c h i t e c t u r e ,e s p e c i a l l yf o rt h ef l o a t i n gp o i n t a p p l i c a t i o n s h o w e v e r ,t h ep r e f e t c hg e n e r a t i o na l g o r i t h mc a n b ei m p r o v e di no r c c o m p i l e r ( e g u s i n gr o t a t i n gr e g i s t e rf o rl e s sc o d es i z ea n dc y c l e si nh o tl o o p s ) k e y w o r d s :i t a n i u m2 ,o r c ,c o m p i l e r ,p e r f o r m a n c e ,t u n i n g i l - l。r t f f 表格 2 1p m c 寄存器的位1 3 2 2p m d 寄存器的位1 3 2 3p m dp m c 读写1 4 2 4u l t r s s p a r c + p c r 寄存器组成1 7 3 1 不同编译器编译出的m g r i d 部分特征比较 3 5 插图 i i 性能分析的一般方法4 2 1 一个寄存器栈例予 2 2i t a n i u m2 核心流水线图示 2 3i t a n i u m2 性能计数器 2 4i t a n i u m2p m dp m c 寄存器 2 5m i p sr 1 0 0 0 0 控制寄存器 2 6 g p r o f 使用的一般流程 2 7c p u 伪r c u 强计数器组成 2 8b e1 , 1 d _ f p u _ 1 3 u b b l e 计数器组成 2 9b e 脚上u b b l e 计数器组成 2 1 0v t u n e 显示的热函数示例( 文本方式) 2 1 1v t u n e 显示的热函数示例图形方式) 3 1o r c 编译器编译流程 3 2i n t e lc o m p i l e r 编译器流程圈 3 3 m g r i d 在不同编译选项下的性能比较 3 4m g r i d 中的各个函数执行时闻排列 3 5 m g r i d 在不同的循环块大小的性能图 3 6 m g r i d 核心循环在不嗣情况卜的性能比较图 3 7m g r i d 在每个周期都预驭时的性能分析结果 3 8 不同选项下m g r i d 性能图 9 m船坞硌均殂毖嚣弱 瓤嚣弘弱n舒 声明 我声明本论文是我本人在导师指导下进行的研究工作及取得的研究成 果。尽我所知,除了文中特别加以标注和致谢的地方外,本论文中不包含 其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做 的任何贡献均已在论文中作了明确的说明并表示了谢意。 作者签名: i 硷连 日期:1 6 6 击 论文版权使用授权书 本人授权中国科学院计算技术研究所可以保留并向国家有关部门或机 构送交本论文的复印件和电子文档,允许本论文被查阅和借阅,可以将本 论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编本论文。 ( 保密论文在解密后适用本授权书。) 作者签名。a 奄导师签名:炎幼 日期:矿6 伊2 第一章引言 编译器是一种将高级程序设计语言编写的源程序转化为语义等价的机器语言程序 的系统软件在这个过程中,编译器常常会对于输入代码进行优化,从而可以得到更好 的性能或者是减少生成的代码大小等通常对于通用处理器的编译器,性能往往是最重 要的目标开发编译器的种种优化的最终目的都是为了提高程序的性能然而,在编译 器的开发过程中,我们常常会遇到这样一种情况:在经历了很长时间的设计和实现之 后,编译器可以正常运行,但是却达不到预期的优化效果,有些时候性能甚至出现了下 降的情况在这种情况下,我们就需要对基准测试用例进行分析来找出性能下降的原 因该过程我们称为性能分析性能分析的主要目的是找到现有程序的瓶颈之处,通过 对这些地方的编译优化进行分析,发现现有优化的不足并对其进行改进,从而获得性能 提升 1 1性能分析及其作用 性能分析在处理器和编译器的设计开发等不同阶段有着不同的内容【3 8 】如:在处 理器设计的早期,性能分析主要是基本设计定义以及设计空间搜索设计者根据设计 经验、工艺发展情况等特性确定期望的设计目标之后,人们常常使用详细的性能模型 来指导设计性能分析技术表现为这种模型的设计和验证工作芯片流片之后进入硅 后( p e s t - s i l i c o n ) 优化阶段,主要是根据实际芯片的表现验证和改进硅前性能分析技术 以及机器相关的编译优化 性能分析在整个处理器以及编译器的开发过程中占有重要的地位,具体而言主要有 以下几个作用: 性能分析可以帮助我们找出现有优化的不足,从而可以帮助我们发现新的问题和 更好地改进优化算法例如,程序的主要执行时间是花在了访存操作上在通过调 优发现这是由于编译器的访存优化算法不是很好而造成的之后,我们就可以将主 要精力放在访存优化上面,从而可以减少开发过程中的资源浪费 通过性能分析我们也可以了解到程序的热点( h o t s p o t ) ,哪些函数的执行时间比 较多通过对于这些函数的进一步分析,我们可以了解问题的所在同时我们也 可以将这些函数单独进行改写,将其变为一个很小的但是行为和原程序很相似的 核( k e r n e l ) 其他开发人员在开发过程中可以仅仅对这个核进行测试和调优从 而可以节约大量的时间,并且同时可以获得较好的性能 性能分析可以用来跟踪每天编译器的最新状态,让开发人员知道每天的性能变化 这样,如果某一天出现了性能下降的情况,开发人员可以很快地定位出问题的所 在 通过性能分析p 4 】,我们可以更好地对处理器的微体系结构、存储结构( m e m o r y h i e r a r c h y ) 以及系统结构进行调优,使之适应程序的特点。性能分析对于性能评估 有很重要的作用。理解程序的特点可以帮助我们更好地理解性能结果以及模拟的 结果例如,数据以及控制依赖以及程序相关等属性可以帮助我们更好的理解转 移猜测( b r a n c hp r e d i c t o r ) 以及处理器的流水线知道到底是什么因素造成了程序 性能的瓶颈( 如面向对象程序设计语言中的虚函数调用导致了程序的跳转难以猜 测) 可以促使体系结构以及编译器方面的研究来解决该问题,同时也可以帮助程 序员对于自己的代码进行优化 程序执行时的指令序列( 也可以包括更多的信息,如指令地址、数据地址等) 称 为。踪迹”( t r a c e ) 性能分析也可以帮助我们验证性能评估中的踪迹规约( t r a c e r e d u c t i o n ) 以及踪迹取样( t r a c es s m p l i n g ) 等技术f 2 4 j 。踪迹规约是指通过删除过 长的踪迹中与需要研究的内容无关的部分来得到利于研究的更加短小的踪迹,从 而可以减少程序的执行时问。踪迹取样技术是在不同的时间对于踪迹取样,之后 对于这些取样进行分析的技术。程序在踪迹规约或取样之前以及之后的特点可以 用来确认约简的有效性。 性能分析可以确定程序的特点,如访存特性、局部性、控制流特点以及指令级并 行等特点这些特点可以帮助我们更好地综合出未来的程序特点1 2 4 】p o u r s e p a n j e t a l 【2 4 】综合了现有的图形程序的特点,得出了未来的该类程序的特点。 性能分析可以帮助我们建立程序行为模型。该模型可以与处理器模型一起被用 在计算机系统的建模中【2 4 】。计算机系统的性能是由该系统本身( 硬件以及软 件) 和应用程序的特点决定的绝大多数硅前( p r e - s i l i c o n ) 系统性能评测都是 通过模拟的方法来进行的。用于这些模拟的工作负载( w o r k l o a d ) 通常是s p e c c p u 、s p e cj v m 等。这些程序通常都特别的大,以避免整个程序可以放入高速 缓存( c a c h e ) 中。因此,模拟这些程序都需要大量的时阃。从而会耗费设计者大量 的时间,以至于设计者不能够很好地寻找更好的设计空间f d e s i g ns p a c e ) 。如,j d g e e 用s p e c9 2 评测c a c h e 的性能时候,仅仅执行时间就花费了3 年 2 4 1 。如 果人们要建立一个可以用于准确的分析系统性能的模型,这个模型必须拥有很快 的执行速度通常,分析性质的模型都不是非常准确,在初步设计完成之后,还需 要进行精细的模拟 1 2 性能分析的一般方法 为了进行性能分析,我们必须首先确定需要达到的目标这个目标就是我们评价调 优的基准,通常称为程序模型( m o d e l ) 1 3 1 1 。建立模型通常需要如下步骤 3 1 1 : 1 设定程序的性能目标 为了设定程序性能目标,首先列出该程序使用的函数以及使用该程序的用户 第2 页,共4 8 页 i t i u m2 上编译嚣性能调优方法的研究 与性能密切相关的目标一为了使应用程序可用并且有效,它必须符合一定的 要求 与性能不是很密切相关的目标一这些目标不影响程序的性能,但是可以改善 它们可以改善程序的易用性等。 当设定程序的性能目标时,应当: 考虑该程序的用途 考虑该程序的使用者,不同的使用者有不同的要求 将所有函数按照其影响程序的性能以及用户使用体验来进行优先级捧列 2 定义程序的工作负载特性 负载是指程序的大部分被使用时的状况定义程序的工作负载特性这一步骤主要 是确定程序的优化目标以及重点例如:对于文字处理器程序,由于绝大部分时间 用户是在输入文字。因而对于文字输入的快速响应是一个重要目标但是,文字 处理也有一些不太常用的特性,如将简体汉字转换为繁体汉字因而对于该转换 的响应时间就不如前面的对于文字输入的响应时问要求严格而对于批处理程序, 例如编译器,通常情况下的负载也是一个重要的方面例如:通常情况下,需要编 译的源代码的行数:1 0 0 ,1 0 0 0 还是1 0 0 0 0 7 在这些情况下,编译器的内部行为以 及运行时行为可能很不相同同时,编译器的编译时阃也不一定就是随着程序的 增长而线性增长因此,一个为编译1 0 0 0 行程序而调优的编译器可能编译1 0 0 0 0 0 行程序的时候性能非常差 # 3 定义运行工作负载的软件以及硬件环境 软硬件环境影响程序的性能一个在某种配置情况下运行得很好的程序可能在另 外一种情况下运行得极其稽糕。因而,在性能调优时,我们必须考虑程序运行的软 件以及硬件环境 在定义好了程序的模型之后,我们就可以开始对程序进行调优了通常情况下,程 序调优是一个反复多次的循环迭代过程每次迭代都是对于预先假定的性能目标的测 试同时,性能分析以及调优应该是系统性的应该避免在解决现有问题的同时带来新 的问题如图1 1 所示,通常情况下,性能分析包含以下几个步骤【3 l j 1 编译程序的源代码获得可执行文件 2 对可执行文件进行插桩使之包含性能数据统计的代码( 这一步也可以在源代码一 级进行) 执行该程序,从而获得程序的性能数据这一步骤可以程序员手动进行, 也可以通过相应的工具自动进行 3 分析缛到的性能数据,确定程序问题之处找出认为可行的方法。 第3 页,共鹤页 1 3 相关工作 4 根据认为可行的方法对原有的程序进行改动,重新编译程序。 5 重复上面几步,直到程序达到预定的性能目标 1 编译源代码 2 执行程序并统计敦据 售改代玛 重编译程序 f j ” 否 图1 1 :性能分析的一般方法 1 3 相关工作 论文【3 嘲研究了i t a n i u m 体系结构上的s p e c2 0 0 0 c 程序的内存访问特点该文主 要是通过测量硬件的性能计数器( p e r f o r m a n c ec o u n t e r ) 以及通过c a c h ep r o f i t i n g 等方 法来获取数据在该文章中,作者指出t 对于s p e c2 0 0 0 c ,内存访问占据了很大一部分 开销,平均造成了3 9 的停顿。c a c h e 不命中也是一个很重要的因素,但是t l b 不命 中也造成了许多基准测试用例的停顿同时,作者还重点研究了一些重要的1 0 a d 指令 以及需要l o a d 的地址。作者定义的重要l o a d 指令是至少占据了c a c h e 不命中9 5 的那 些l o a d 指令。通过该研究,作者指出;重要l o a d 指令通常都很少。并且,这些指令通常 都是在内层循环中而且这些循环的次数( t r i pc o u n t ) 通常也比较高在研究了重要l o a d 指令之后,作者通过s t r i d ep r o f i l i n g 来减少c a c h e 不命中通过该方法,作者获得了大约 6 的性能提升 论文【3 j 分析了商用系统的工作负载,如数据库,w e b 服务等的特点。该文章主要研 究的对象是多处理器系统在该文中。作者主要分析了三种重要的工作负载( w o r k l o a d ) : 第4 页,共鹌页 i t a m u m2 土编译嚣性能调优方法的研究 在线事务处理( o l t p ) ,决策支持系统( d s s ) 以及网页索引检索在这些分析中,作者 主要采取的方法是硬件监测的方法,同时采用了s i m o s 模拟器来进行全系统模拟作为 辅助手段为了更好地进行研究,作者还评测了不同大小的工作负载,从而可以更好地 研究访存系统的特型与前人工作相比,作者发现操作系统的操作以及i o 延迟等不是 被调优过后的数据库操作的瓶颈。作者采用了三种不同的工作负载用以更好地评测访存 系统通过这些,作者发现如果系统有足够大的片外c h e 的话,o l l : p 有很好的指令 以及数据局部性o 。pi 司时具有很高的通讯不命中率( c o m m u n i c a t i o nm i s sr a t e ) 这 些使得它对于内存一级d i r t ym i s sl a t e n c y 非常敏感增加c a c h e 大小以及处理器的数目 会使得d 咐m i s s 在整个系统的性能中变得更加重要。相反,d s s 以及网页检索主要对 予片上的c a c h e 的大小以及延迟敏感这些程序对于片外c a c h e 的大小以及内存和d i r t y m i s sl a t e n c y 不是很敏感通过这些研究,作者给出了面向o l t p 的系统设计建议以及 面向d s s 和网页检索系统的设计建议 论文 2 9 1 中给出了o r c 编译器开发过程中性能分析与监测经验在该文中,作者 首先指出了性能分析的重要性,如,可以找出现有优化的不足等之后,作者介绍了如 何采用每天测试的方法来确保编译器的性能同时,作者还给出了一些系统性能分析的 工具:静态指令周期计算工具。动态指令周期计算工具以及热路径分析工具静态指令 周期计算工具采用o r c 编译器在产生的汇编代码的同时产生的附加信息来估计指令执 行时间通过该工具,我们可以很简单地得到程序中每个函数的执行时间。动态指令周 期计算工具主要是通过在编译时在程序中加入p u _ c o u n t e r + = b b c y c l e s 来统计动态的 指令周期,其中b b _ c y c l e e 是编译器估计的基本块的指令周期数。该工具相对于静态统 计工具,有更好地准确性但是由于髓一c y c l e s 是编译器的估计值,也不是非常准确, 因而统计结果还是会产生误差热路径寻找工具通过分析程序汇编代码计算每个基本块 的执行频率等信息,从而给出相应地热路经,使得编译器开发人员可以将自己的主要精 力放着这些热路经上面,以提高开发效率 论文 2 6 1 分析了s p e cc p u 2 0 0 0 的数据t l b 行为在该文中,作者采用了模拟 的方法研究了s p b cc p u 2 0 0 0 中的数据t l b 的行为,以及不同的t l b 配置对于程 序的影响论文的主要贡献是对t l b 的研究,提供了程序的重要特点,量化了s p e c c p u 2 0 0 0 中程序的这些特点,同时对于未来研究也提出了相应的建议具体而言主要 包括:有1 4 的程序在t l b 为1 2 8 - 全相连的情况下的不命中率为1 。而这就会导致大 约1 0 的停顿对于r l b 的结构组织形式,有些程序对于相连的数目比较敏感,而另 外一些则对于t l b 的大小敏感。同时两级t l b 的组织形式对于提升s p e c2 0 0 0 的性 能有较大帮助但是,不同的程序通过s u p e r p a g i n g 获得的性能提升却不同一些程序 一次会访问虚拟页中的多个连续的页面这样,对于s u p e r g a g e 的表项需求比较少占 据程序执行中大部分时间的那些程序片段也是那些t l b 不命中主要的发生地点对于 t l b 不命中比较高的程序,主要的原因不仅是由于一些动态的数据访问,一些很普通的 数据访问也会造成该问题。 第5 页,共船页 1 4 论文组织 论文【1 1 1 给出了关于i n t s lc + + 编译器以及微软的v i s u a lc + + 编译器的对比 分析作者通过评测s p e cc p u2 0 0 0 来比较两个编译器的性能通过比较,得出如 下结论:i n t e lc 在程序的优化上面要优于v i s u a lc + + ,编译出的程序需要更少 的时钟周期完成。对于含有图形库以及计算机可视化( c o m p u t e rv i s u a l i z a t i o n ) 的程 序,i n t e lc + + 也取得了很好的结果。但是,v i s u a lc + + 却产生更少的指令数目对于 产生的指令中l o a d 、b t o r s 以及跳转指令的比例,两个编译器基本相同但是,对于计 算机可视化的程序,i n t s lc + + 产生了更少的l s a d 、s t o r e 指令同时,i n t e lc + + 对 于跳转指令没有获得相应的性能提升i n t e lc + + 对于图形库以及计算机可视化程序的 性能提升,主要的原因是对于多媒体指令的更好利用。 论文1 4 】利用s p e cc p u9 5 以及s y s m a r k n t 作为基准测试用例,对于p e n t i u m 以及p e n t i u mp r o 的性能进行了测试与分析作者指出:p e n t i u mp r o 拥有更高的性能 其主要原因是由于p e n t i u mp r o 采用了更深的流水级这种方式可以是的它的时钟比 p e n t i u m 快2 5 。性能提升的另一个原因是由于采用了乱序执行技术通过数据分析, 可以得出p e n t i u mp r o 的c p i 比p e n t i u m 的少1 5 至4 5 。p e n t i u mp r o 处理器的乱 序执行、猜测执行可以很好地掩盖访存的延迟以及c a c h e 不命中,同时也掩盖了资源竞 争带来的停顿。p e n t i u mp r o 采用的转移猜测方法减少了误猜的情况,从而使得误猜带 来的损失不会对于程序的执行效率造成很大的影响。 论文 2 8 1 给出了s p e c9 2 的一些c a c h e 调优实例。作者首先给出了目前程序员以 及编译器常用的c a c h e 优化技术之后,作者简单介绍了一下一个c a c h ep r o f i l i n gt 具:c p r o f 。该工具专门可以指出程序的瓶颈之处以及给出关于这些瓶颈之处的信 息这些信息可以帮助程序员更好地理解哪些程序变换可以提升c a c h e 性能。作者使 用c p r o f 对于s p e c9 2 中的六个程序进行了调优。主要变换是在源代码一级进行的 通过这些变换,程序的c a c h e 行为得到很大地改善,并且获得很好的加速比,从1 0 2 到 3 4 6 1 4 论文组织 本论文的组织如下: 第一章为引言,主要对于整个论文结构以及内容作一个简介。 第二章主要介绍i t a n i u m 体系结构以及其对于性能分析提供的硬件支持同时我 们将其与其它几种常见的体系结构对性能分析提供的硬件支持进行了对比。之后,我们 介绍了i t a n i u m 上用于性能分析的几种常见技术以及常用工具最后,我们具体介绍了 如何利用这些工具进行性能分析以及调优。 第三章在第二章的基础上。给出性能分析与调优的具体实例我们主要分析 s p e cc p u2 0 0 0 中的m g r i d 测试用例我们主要分析的编译器是o r c 编译器。 第网章主要是对前面工作的总结同时,也讨论了下一步的工作 第6 页,共鹤页 第二章i t a n i u m 体系结构上的性能分析与调优 s 2 1i t a n i u m2 简介 ,i t a n i u m2 是由i n t e l 和h p 公司设计的一款面向i n t e r n e t 服务器以及工作站的高性 能6 4 位处理器1 3 0 】它兼容i a - 3 2 体系结构。同时可以运行多种操作系统和平台该处 理器采用的是显式并行指令集( e x p 5 d t l yp a r s l l e li n s t r u c t i o nc o m p u t i n g ,e p i c 3 4 ) 结 构e p i c 结构中软硬件接口可以使得软件更好地发掘编译时信息并有效地将这些信息 传递给硬件e p i c 结构提供了强大的硬件支持使得编译器可以在很大的代码范围内作 全局优化这些优化可以使得指令级并行性( i n s t r u c t i o nl e v e lp a r a l l e l i s m ,儿p ) 更好地 暴露给硬件,从而可以使得硬件资源得到更好的利用同时,对于编译好的代码,e p i c 结构可以很好地进行动态运行时优化这样使得软件以及硬件的联系更加紧密,从而使 得编译器的地位更加重要。 2 1 1 i t a n i u m2 的一些特性 i t a n i u m2 引入了很多新的微体系结构特性来支持e p i c ,主要包含谓词、寄存器。 栈、旋转寄存器、投机等特性【1 9 2 0 1 这里我们主要介绍谓词、寄存器栈以及旋转寄存 器这三个特性。 2 1 1 1 谓词 警:一 谓词是一种控制指令条件执行的技术在传统的体系结构中,条件执行是通过跳转 来实现的而在i t a n i u m2 中,条件执行可以通过谓词指令来实现。谓词可以减少或消 除用于条件执行的跳转指令数目,从而可以得到更大的基本块以及减少跳转预测失误的 代价一条普通的指令r t = r 2 + r 3 的谓词形式为:( p 5 ) r l = = r 2 + r 3 其中,p 5 为谓词寄存 器它控制r l f r 2 + r 3 是否执行如果p 5 的值为真( t r u e ) ,则该指令会被执行否则, 这条指令就不会执行,像n o p 一样谓词寄存器通常都是由比较指令赋值 谓词执行可以减少跳转并可以通过将控制依赖变为数据依赖简化编译器的优化 如: ii f ( 虻出) c = c + 1 - e l s ed#de+f 可以变为: ip 2 - p 3 = c o m p a r e ( a b ) ,( p 2 ) c = c + 1 o ( p 3 ) d = d e + f 在上面的代码中,当a b 时,p 2 被设定为t r u e 而p 3 为f a l s e 通过该变化,可以避免 跳转指令 2 1 1 2 寄存器栈( r e g i s t e rs t a c ke n g i n e ) 过程( 函数) 调用是高级语言程序中的一个常用特性。但是,其广泛地使用会产生 很大开销。这些开销通常是由于在调用者( c a l l e r ) 以及被调用者( c a l l e e ) 之间的参数传 递以及由于函数调用而产生的寄存器溢出操作例如:假设一个变量的活跃区间穿过一 个函数调用点并且这个变量被存放在一个c a l l e r - s a v e 的寄存器中,则该变量的值应该在 函数调用之前保存到内存中并在调用之后从内存中恢复而这就引入了一对l o a d s t o r e 操作为了减少这种开销,i t a u i u m2 处理器硬件实现了寄存器栈i t a n i u m2 上的1 2 8 个整点寄存器( g r ) 被分为两个部分:寄存器r 0 - r 3 1 是对任何过程可见,它们是静态 的;而剩下的9 6 个寄存器,它们仅对某个特定的函数可见 寄存器栈帧是所有仅对某个函数可见的栈寄存器集合。寄存器栈可以通过a l l o c 指令进行分配具体大小由编译器决定。当没有足够的寄存器可用时( 栈溢出,s t a c k o v e r f l o w ) ,v 1 1 0 c 指令会停顿处理器,将调用者的寄存器溢出直到有足够多的可用寄存 器为止 对于每个函数来说,栈寄存器都是局部的。每个寄存器的栈帧都是从r 3 2 开始的, 最多可以达到r 1 2 7 寄存器栈的大小可以通过a l l o t 指令进行分配其指令的语法为: ls l i o cr l = a r p f s ,i ,1 ,o ,r 其中i 为输入寄存器的大小,l 为局部寄存器的大小,o 为输出寄存器的大小,r 为旋转 寄存器的大小输入寄存器以及旋转寄存器都被包含在了局部寄存器部分。一个寄存器 栈帧的大小为局部寄存器的大小以及输出寄存器的大小之和。 每次函数调用时,栈寄存器被重命名调用函数在输出区域内的第一个栈寄存器变 为了被调用函数的r 3 2 调用函数输出区域的第二个栈寄存器变为了被调用函数的r 3 3 依次类推当被调用函数返回时,寄存器被重命名并重新载入到调用函数的配置中。 下面我们从一个例子来描述寄存器栈是如何工作的在图2 1 中,函数f o o o 的寄 存器栈从r 3 2 开始。1 :3 2 以及r 3 3 为f o o o 的局部寄存器。r 3 4 为f 0 0 0 的输出寄存器。 当f 0 0 0 调用b a r ( ) 时,r 3 4 自动重命名为b a r ( ) 的r 3 2 寄存器 2 。1 1 3 旋转寄存器( r o t a t i n gr e g i s t e r ) 及其对软流水的支持 循环的软流水 3 3 1 是指循环像硬件的流水线一样在前一个循环迭代尚未完成时启 动下一次的迭代循环本身被分割成为多个流水级,就像处理器流水线中的级一样。而 软流水技术就是一种可以使得不同次迭代的循环的不同流水级同时执行的技术传统的 体系结构上的软流水需要首先将循环进行循环展开之后再进行寄存器重命名以及调度 操作这样不仅使得产生出来的代码变得臃肿而且也难以阅读i t a n i u m2 提供一种硬 第8 页,共4 8 页 i t s n i u m2 上编译器性能调优方法的研究 f o o :a l l o cr 2 = a r p f s0 。2 。1 。0 b a r a l l o cr 2 = a r p f s1 。1 。0 。0 栈 物理寄存器 f 0 0 0 寄存器栈 b a r ( ) 寄存器栈,其中陪2 存放n 的值 物理寄存器 图2 1 :一个寄存器栈例子 件机制来支持软流水技术;寄存器旋转循环的每次迭代旋转寄存器都会自动进行重命。 名,因而可以避免循环的展开,从而可以得到更少的代码 。 寄存器旋转是通过将一个寄存器号与重命名寄存器基( r e g i s t e rl * e n s , m eb a s e ,r r b ) 相 加并对旋转寄存器个数取模而得到的这个r r b 寄存器在软流水循环核( k e r n e l ) 的最后 的跳转指令执行的时候自动减一该减一操作使得在寄存器x 的值看上去好像是移动到 了寄存器x + t 中如果x 是最后一个旋转寄存器,它的值就会。旋转”到第一个寄存器 除了整点寄存器,谓词寄存器( p t 6 - p 6 3 ) 以及浮点寄存器( f 3 2 - f t 2 7 ) 都可以用作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超简单的两人合伙协议范本
- 小学一年级上学期体育教学工作总结
- 光的干涉教案
- 项目工程管理策划书
- 学校舆情信息收集工作制度
- 北师大版《-长方形的面积》大型赛课教学设计
- 2025临时仓库租用合同模板
- vr设计制作合同标准文本
- KTV清洁合同样本
- 灾害性天气应急预案
- 软件代码审计与测试作业指导书
- 上消化道出血护理疑难病例讨论记
- 城市轨道交通自动售票机
- 环境设计专业考察课程教学大纲
- 2024版互联网企业股东合作协议书范本3篇
- 企业环保知识培训课件
- 110kV立塔架线安全施工方案
- 完形填空-2025年安徽中考英语总复习专项训练(含解析)
- 《岁末年初重点行业领域安全生产提示》专题培训
- 商混站(商品混凝土公司)安全风险分级管控和隐患排查治理双体系方案全套资料汇编完整版
- GB/T 16288-2024塑料制品的标志
评论
0/150
提交评论