




已阅读5页,还剩55页未读, 继续免费阅读
(计算机科学与技术专业论文)面向方面程序并行化技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国防科学技术大学研究生院硕士学位论文 摘要 面向方面编程( a o p ) 能模块化横切关注点,近年来获得了广泛的关注。方面可 以看作一个特殊模块,它观察程序的控制流,当目标事件发生时,执行自己特殊 的动作。这是一种与传统编程方式不同的执行过程,但同时这种执行方式也产生 了额外的运行负担。例如将面向方面技术应用于软件运行时监控时,方面程序的 织入带来的额外时间开销将影响监控的准确性。在硬件方面,随着处理器技术的 发展,在一块芯片上集成多核已成为趋势。基于多核处理器的计算机被广泛采用, 这要求通过并行程序来充分利用多核平台的性能优势。但面向方面技术本身并没 有涉及在多核环境下并行运行。 论文分析研究了面向方面程序的结构特性,针对典型的面向方面程序设计语 言a s p e c t j 提出了一套实现方面程序并行化的框架。课题首先通过对面向对象并行 编程技术的研究,提出了采用编译指导指令的方式实现方面程序的并行化,并根 据j o m p 的编译指导指令,定义了基于触p e c u 程序的指导指令。根据面向方面程 序的结构特性,将面向方面程序并行化划分为方面程序的并行化、方面程序和基 程序的并行化、基程序的并行化三个方面,并分别针对各个方面的不同特征,提 出了一种可行的并行化方法。 a b c 是a s p e c t j 语言的一个可扩展的编译平台。它提供了模块化的环境,可 以较容易的开发实验a s p e e t j 的并行特性。在a b c 平台上,我们实现了本文中的 算法,并取得了预期的实验结果。 主题词:关注点分离,面向方面程序,并行,a s p e c t j 第i 页 国防科学技术大学研究生院硕+ 学位论文 a b s t r a c t a s p e c t - o r i e n t e dp r o g r a m m i n g ( a o p ) ,a sa ni d e a lc a n d i d a t et oe n c a p s u l a t e c r o s s c u t t i n gc o n c e l t i s ,h a sb e e nw i d e l yc o n c e r n e di nr e c e n ty e a r s a s p e c t sc a no b s e r v e t h ec o n t r o lf l o wo fp r o g r a m sa sas p e c i a lm o d u l ea n de x e c u t ei t so w na c t i o n sw h e nt h e t a r g e te v e n th a p p e n s t h ee x e c u t i o nm o d e lo fa o pi sd i f f e r e n tf r o mt r a d i t i o n a l p r o g r a m s h o w e v e r , e x e c u t i n ga s p e c t sc o s te x t r ar u n n i n gt i m e f o re x a m p l e ,w h e nt h e a o pt e c h n o l o g yi s a p p l i e di nt h ef i e l do fs o f t w a r er u n t i m em o n i t o r i n g ,t h ew e a v i n g m e c h a n i s mw i l la r o s ee x t r at i m ec o s t sa n di n f l u e n c et h ea c c u r a c yo fm o n i t o r i n g i nt h e f i e l do fh a r d w a r e ,w i t ht h ed e v e l o p m e n to ft h em u l t i c o r et e c h n i q u e ,t h em u l t i c o r e c o m p u t i n gp l a t f o r mb e c o m e sm u c hm o r em a t u r e ,w h i c hh a sb e e nw i d e l yu s e di np c s 1 1 1 ep r o g r a m sn e e dt ob ep a r a l l e l i z e df o r u t i l i z i n gt h ec a p a b i l i t yo fm u l t i - c o r ep l a t f o r m s b u tt h ea o pt e c h n i q u ed o e s n tp r o v i d et h ep a r a l l e le x e c u t i o nm o d e li nt h em u l t i c o r e e n v i r o n m e n t n l i sp a p e ra n a l y z e st h es t r u c t u r ef e a t u r eo fa o pa n dp r o p o s e sa na o p p a r a l l e l f r a m e w o r kf o ra s p e c t j ,at y p i c a la s p e c t o r i e n t e dp r o g r a m m i n gl a n g u a g e f i r s t l y ,w e a d o p tt h ec o m p i l i n gd i r e c t i v e su s e di nj o m p ,a n dm o d i f yi tt os u i tw i t ht h e a s p e c t - o r i e n t e dp r o g r a m s e c o n d l y ,a c c o r d i n gt ot h ef e a t u r eo fa o p ,w ed i v i d et h e p a r a l l e lp r o c e s si n t ot h r e ep a r t s :t h ep a r a l l e l i z a t i o nb e t w e e na s p e c t s ,b e t w e e na s p e c ta n d b a s ep r o g r a m ,a n da m o n gb a s ec o d e s b a s e do nj a v am u l t i - t h r e a d sm e c h a n i s m ,a l l a l g o r i t h mh a s b e e np r e s e n t e dt oa c h i e v ea u t o m a t i cp a r a l l e l i z a t i o n a c c o r d i n gt o p r e s c r i p t i v ed e n o t a t i o n s a b ci sa l le x t e n s i b l ep l a t f o r mf o ra s p e c t j i tp r o v i d e sm o d u l a rc o m p i l i n g m e c h a n i s mw h i c hc a ns i m p l i f yt h ee x p e r i m e n tt ot e s tt h ep a r a l l e lf e a t u r e so fa s e p c t j w r ei m p l e m e n tt h ea l g o r i t h ma b o v ea n da c h i e v et h ee x p e c t i n gr e s u l t sb a s e do ni t k e yw o r d s :s e p a r a t i o no fc o n c e r n s ,a s p e c t - o r i e n t e dp r o g r a m ,p a r a l l e l , a s p e c t j 第i i 页 国防科学技术大学研究生院硕士学位论文 表目录 表2 1 程序语言的演化过程4 表3 1 编译指导指令及其功能2 0 表5 1j i m p l e 指令表3 8 表5 2 类s t a t e s 中属性4 3 表5 3l o c k 中的s e t o i 函数实现4 4 表5 4a t m 模拟系统中定义的操作4 4 表5 5 添加代码模拟延迟4 5 表5 6 建议并行执行时间对比4 5 表5 7 连接点并行执行时间对比4 6 第1 i i 页 国防科学技术大学研究生院硕士学位论文 图2 1 图2 2 图2 3 图2 4 图2 5 图2 6 图3 1 图3 2 图3 3 图3 4 图3 5 图3 6 图3 7 图3 8 图3 9 图3 1 0 图3 1 l 图3 1 2 图4 1 图4 2 图4 3 图4 4 图4 5 图4 6 图5 1 图5 2 图5 3 图5 4 图5 5 图5 6 图目录 横切关注点与核心关注点5 身份验证在各类中的分散6 面向方面程序的编织机制7 a s p e c t j 的两步编织8 a s p e c t 的语言结构1 l 连接点与方面的关系1 1 通过a d v i c e 获得代码段运行时间。1 3 方面程序并行化流程1 4 建议和连接点之间的对应关系l5 去掉a d v i c e 和基程序间的同步点。1 6 串行程序并行化后连接点发生改变17 线程的分层结构18 线程状态转换图19 p a r a l l e lj a v a 体系结构2 2 a j c 结构。2 4 a b c 结构2 4 a b c 编织器结构图2 5 扩展a b c 编译器实现a s p e c t 的并行化2 6 方面程序间的并行框架2 8 串行方面的执行顺序2 8 a s p e c t 3 与a s p e c t l 和a s p e c t 2 并行2 9 a s p e c t 之间的分段并行2 9 方面并行的处理流程2 9 a d v i c e 线程化3 4 工具总体框架3 7 p o l y g l o t 体系结构3 8 s o o t 的优化流程3 8 并行p o i n t c u t 与并行a d v i c e 4 l 程序并行化编译流程图4 l a d v i c e 转换为线程4 3 第1 v 页 独创性声明 本人声明所呈交的学位论文是我本人在导师指导下进行的研究工作及取得的研 究成果尽我所知,除了文中特另4 加以标注和致谢的地方外,论文中不包含其他人已 经发表和撰写过的研究成果,也不包含为获得国防科学技术大学或其它教育机构的学 位或证书而使用过的材料与我一同工作的同志对本研究所做的任何贡献均已在论文 中作了明确的说明并表示谢意 学位论文题目:堑自左亘猩庄羞盈毡越苤盈窀 学位论文作者签名:i 洫 一 日期: 弘叩年,t 月2 7 日 学位论文版权使用授权书 本人完全了解国防科学技术大学有关保留,使用学位论文的规定本人授权国 防科学技术大学可以保留并向国家有关部门或机构送交论文的复印件和电子文档,允 许论文被查阅和借阅;可以将学位论文的全部或部分内容编入有关数据库进行检索, 可以采用影印、缩印或扫描等复制手段保存、汇编学位论文 ( 保密学位论文在解密后适用本授权书) 学位论文作者签名:! 至i 墅蕉堡 作者指导教师签名:垂史垄一 日期: p 呷年体月z 1 日 日期2 7 年”月、7 日 国防科学技术大学研究生院硕士学位论文 第一章绪论 1 1 课题研究背景和意义 程序设计语言一次次革新,从机器语言、汇编语言到高级语言,从过程到对 象到方面,其抽象程度越来越高,也越来越便于程序员的使用,使程序员的工作 效率、程序本身的可读性、模块化程度等得到了很大的提高。程序设计语言演变 得越来越切合人类的思维方式,但它脱离机器本身的执行模型却越来越远,程序 设计语言抽象程度提高的过程,也是其执行效率降低的过程。 面向方面编程( a o p ) 是2 0 世纪9 0 年代出现的一种新的编程技术l l 】。它能有 效的模块化横切关注点,使跨越多个类的功能( 例如,日志记录、事务处理及安 全性) 能很好的集中在一起处理。但是仔细研究会发现,在方面代码和基代码编 织后,基代码的运行效率会受到一定的影响。当织入的方面代码较少,或原系统 对实时性等没有太高要求时,这种织入的影响常常可以被忽略。但当织入的方面 代码较多所需运行时间较长时,织入代码所带来的影响就需要特别的关注。特别 是在实时系统中1 2 j ,这种影响尤为突出。而由于面向方面代码本身的透明性,基程 序并不知道代码织入后的影响。 同时,计算机硬件系统也在摩尔定律的驱使下迅速发展,如今高性能的多核 处理器已得到了广泛的应用【3 】。面向方面软件开发是目前软件开发方法的研究热点 之一。但目前面向方面的主流技术通常不涉及并行化和多核环境运行。 关注点是一个为了满足系统整体目标必须被处理的特定需求或考虑【4 】。面向方 面编程将关注点划分为两种类型:核心关注点和横切关注点。核心关注点用于表 示模块的核心需求,而横切关注点用于表示横跨多个模块的外围需求,例如事务、 日志、安全等【5 】。面向方面编程允许核心关注点和横切关注点在同一系统中分离实 现。在现有的a o p 技术中,核心关注点仍采用面向对象的方式实现,在类中集中 处理。横切关注点则由a s p e c t s 具体实现。a o p 通过自身独特的语法机制实现了对 横切关注点的封装1 6 j 。 面向方面编程提供的这种关注点分离技术,使关注点被显式的划分为核心关 注点和横切关注点两种。充分挖掘这两种不同类型关注点间的并行特性,通过一 定的机制实现并执行,将可提高软件的效率【7 】。例如对于日志记录,当核心关注点 运行到需要记录日志的地方时,只需要触发相应的横切关注点,即可继续该关注 点的运行,而记录日志的关注点可与该关注点并行执行【8 1 。 在面向方面技术一个很大的应用领域软件监控方面【9 1 ,如果能在个核上 运行软件本身,而在另个核上执行采用面向方面技术编写的监控代码,这将对 第l 页 国防科学技术大学研究生院硕士学位论文 原软件的运行在效率上影响最小,也使对时间监控的准确性进一步提耐】。 从方法学的角度,很多学者正积极探讨如何用面向方面程序设计技术编写并 行程序,以期并行程序可以得到更好的模块化,即使用a o p 的方法来将可以并行 的横切关注点从业务逻辑中分离出来1 1 1 2 】。但a o p 本身是一种串行的编织技术, 他的织入时机的选择也是基于基程序运行中的一些连接点( j o i np o i n t ) ,并使用一些 关键字( b e f o r e 、a f t e r 、a r o u n d ) 来定义方面代码基于基程序的运行时机。 为此,本文从方面程序和基程序间的编织方式方面展开研究,探讨了方面程 序和基程序并行的可行性,并提出一套并行化的解决机制,包括方面间的并行、 方面和基程序间的并行、基程序自身的并行等三个方面。 本课题研究的基本任务是探讨如何使面向方面技术充分利用多核平台的资源 优势,拟通过修改a s p e c t 支持语言的编译器,研究a s p e c t 在多核环境下的并行执 行实现技术,以获得更高的执行效率,减小代码编织所带来的性能上的影响。 本课题的研究在理论上详细阐明面向方面编程在多核平台上获得更高执行效 率的可行性,并选择一种面向方面程序设计语言,在其中引入编译指导指令以方 便开发更适合在多核平台执行的程序;在实践上通过修改a s p e c t 支持语言的编译 器,提供一个支持该指导指令,能更好的针对特定的多核平台进行优化的编译器, 并以典型案例分析采用新方法后在多核平台上运行所带来的性能上的改变。 1 2 课题研究内容 本课题研究的基本内容是从并行编译技术、面向方面程序设计语言自身特性、 面向方面语言编译技术三个方面展开。通过研究并行编译技术,针对面向方面语 言的特殊性,优化通用的并行编译规则,设计一套适合在a o p 中使用的并行编译 方法;通过面向方面程序设计语言的研究,深入探讨该语言在并行化方面与其他 语言的区别,从而在并行优化上做出特殊的处理;通过对面向方面语言编译技术 的研究,选择a s p e c t j 语言编译器a b c ( a s e p c tb e n c hc o m p i l e r ) ,在其基础之上进 行修改,使之具有一定的并行编译能力。 本课题从理论、方法和工具三个方面来研究面向方面程序中的自动并行化问 题。通过以上内容的研究,达到以下目标: 1 探讨a o p 与其他程序设计方法( 如o o p ) 并行编译的不同特征。 2 定义一个良好的a o p 并行机制。 3 分析验证该并行机制的有效性和正确性。 4 通过修改牛津大学的a b c 实现一个支持该并行机制的编译器。 5 使用典型的案例,验证该编译器及并行机制的有效性。 第2 页 国防科学技术大学研究生院硕士学位论文 1 3 论文结构 论文共分为六章。 第一章是绪论。主要介绍了课题的研究背景、 课题的研究目标。 第二章从面向方面程序和并行编译两个方面, 言和有参考意义的并行编译的方法和技术。 研究意义和研究内容,确定了 介绍了目前主流的面向方面语 第三章介绍了方面并行化的基本问题和多线程技术,研究了方面并行的分类、 检测和解决的途径。 第四章研究了方面程序间并行、方面程序和基程序间并行,以及基程序并行 的基本问题,并提出了相应的解决途径。 第五章介绍基于a b c 编译器的并行编译工具的设计与实现,并给出了相应的 案例分析。 第六章对论文研究工作进行了总结,并对后续工作做了展望。 第3 页 国防科学技术大学研究生院硕士学位论文 第二章面向方面程序语言 当前面向方面程序设计方法研究十分活跃,人们从各个侧面研究面向方面技 术的特性及带来的理念和问题。针对不同的发展阶段和抽象级别,程序语言从低 级到高级,从与机器紧密结合到高度的抽象分离,程序语言及其蕴含的思想为使 用软件解决现实问题更加易行,简化了过程的难度,使之更加贴合人们的思维方 式。针对横切关注点分离的问题,研究人员提出了面向方面软件开发技术,并产 生了对应的面向方面程序设计语言。 2 1 面向方面程序语言概述 2 1 1 程序语言的演化 从程序设计语言的历史看,随着计算能力的提高,程序设计语言经历了从低 级到高级、从贴近机器到贴近人的发展历程,逐步从机器语言、汇编语言、过程 式语言发展到面向对象语言。2 0 世纪九十年代,为解决横切关注点的问题,美国 施乐公司帕洛阿尔托研究中心( x e r o xp a r c ) 的研究小组提出了面向方面的思想【l 】, 并在j a v a 语言上实现了支持该思想的a s p e c t j 1 3 j 。 程序语言的进化,展示了其后所代表的软件开发思想的进化,例如更加明晰 的关注点划分、高内聚低耦合等。 表2 1 程序语言的演化过程 i 基本单位二进制位基本指令过程类方面i i i 程序语言 机器语言 汇编语言过程式语言 面向对象语言 面向方面语言i 从表2 1 中可以看出程序语言的发展历程,程序语言的发展伴随着语言封装的 基本单位更加自然,其表达更加贴近问题本身等。 2 1 2 横切关注点问题 面向对象将问题域分解为一个个的实体,通过实体的高内聚化和实体间的松 耦合来实现逻辑的分离。但在通常情况下,由于现实问题的复杂性,并不存在一 个一成不变的实体,或者说从不同的角度、不同的层面上看,不同的时期开发人 员关注的是实体的不同方面,而实体在不同的方面有不同的属性和要求,这就产 生了关注点多维分离的问题。 第4 页 国防科学技术大学研究生院硕士学位论文 核心关注点 j 笼el2 j td一q一d亡 i里型! 型, 型 , 一 - j丰l车l 。j 横 切 关 注 点 图2 1 横切关注点与核心关注点 考虑一个图书馆管理系统的实例。在类u s e r 中,封装了用户的i d ,密码,借 书等操作。 p u b f i cc l a s su s e r p u b f i cb o o lb o r r o w b o o k s 0 ; 在借书的过程中,需要验证用户的身份合法性,因此在u s e r 中,应有验证身 份的函数。 p u b h c c l a s su s e r p u b l i cb o o lb o r r o w b o o k s o ; p u b h c b o o la u t h e n t i c a t e ( ) ; 验证用户身份 ) 在每次借书的时候,均需要首先调用验证函数,确认用户的身份。 p u b f i cb o o lb o r r o w b o o k s o b o o lv a l i d i t y = a u t h e m i c a t e o ; i t ( v a l i d a t y = = = t r u e ) e l s e ) ) 此类的关注点划分按照用户的需求来划分,而横切关注点按照系统的需求来 划分。其核心关注点有借书,横切关注点有用户身份验证。当在核心关注点中加 入用户修改密码的操作,同样需要调用验证身份的函数,如下: p u b h cc l a s su s e r p u b l i cb o o lb o r r o w b o o k s o a u t h e n t i c a t e ( ) ) ; p u b h cb o o lm o d i f y p a s s w o r d o a u m e n t i c a t e o ) ; p u b l i cb o o la u t h e n t i c a t e ( ) ; ) 在上面的代码中,我们可以看到b o r r o w b o o k s 和m o d i f y p a s s w o r d 均调用了验 第5 页 国防科学技术大学研究生院硕士学位论文 证身份的方法a u t h e n t i c a t e ( ) ,这表明横切功能己分散在代码之中。 若考虑到管理员也需要用到身份验证的功能,如下: p u b i c c l a s sa d m i n i s t r a t o r p u b f i cb o o lr e g i s t e r ( ) a u t h e n t i c a t e ( ) ) ; p u b h c b o o la u t h e n t i c a t e ( ) ; 从上面的代码中可以看出,横切关注点身份验证已经分散到不同类u s e r 和 a d m i n i s t r a t o r 的多个函数中,而身份验证并不是类u s e r 和a d m i n i s t r a t o r 需要实现 的功能,而是系统安全的需要,这种责任分散的程序设计方式导致了内聚度的降 低,同时违反了软件设计中的单一职责原则。 a d m i n i s t r a t o ru s e r b o r r o w b ( m k ( ) i o g i n 0 m o i l f y p w o 身份验证o 图2 2 身份验证在各类中的分散 横切关注点分散在核心逻辑中,将导致如下一些问题: 内聚度的降低。一个类或一个函数除了需要关注自身要实现的核心逻辑 外,还需要关注系统上的性能要求。这导致类功能点的分散,而非集中在 核心的功能上,类的内聚度被降低。 维护上的困难。横切关注点的代码分散在多个模块中,同样功能的代码需 要多次实现,在系统功能进化的过程中,版本的一致性难以保持。 降低了可理解性。同一功能代码的分散,结构上的混乱,导致用户理解上 的困难。 2 1 3a o p 语言分析 传统的面向对象编程方式只支持一维的关注点分离,通常按照核心业务逻辑 的维度来划分。面向方面技术支持横切关注点的分离,这是从一种与传统核心关 注点横切的角度来分离的关注点,包括一些跨越多个一维关注点,不能简单的在 某个类中被完全实现的一些特性1 7 】,例如日志记录、身份验证、安全控制、错误检 测等。这些横切的关注点贯穿了多个模块,代码分散在各个类中,造成了修改和 复用的困难。面向方面技术支持对这些横切关注点的封装,并通过连接点机制将 它们在编译时织入实际运行的位置,而不需要由基程序显示调用。 为实现横切关注点的封装,面向方面技术通常均涉及两种机制:建议机制和 第6 页 国防科学技术大学研究生院硕士学位论文 连接点机制。其中建议机制定义了横切关注点需要实际执行的指令,而连接点机 制定义了这些指令需要执行的位置,并最终通过编织器将这些指令插入到基程序 相应的位置中去。 目前面向方面的主流技术有: j b o s s a o p j b o s s 是一个符合j 2 e e 规范的应用服务器框架,作为规范的补充,j b o s s 中引 入了a o p 框架。j b o s s 通过在类载入时,使用j a v a s s i s t 对字节码操作实现动态a o p 框架,j a v a s s i s t 是一个开源的编辑字节码的类库。j b o s s 中切入点与方面采用普通 j a v a 对象实现,并使用x m l 文件配置。 s r i n g a o p s p r i n g 是一个采用了反转控$ 1 ( i n v e r s i o no fc o n t r o l ,i o c ) 策略的基于j 2 e e 的 轻量级应用框架。像其他的i o c 容器管理的组件一样,a o p 的切入点与方面也由 i o c 容器管理,由x m l 配置文件定义。 a s p e c t c - h - a s p e c t c + + 1 1 4 】是对c + + 语言进行的面向方面的扩充。编译器a c + + 将扩展后的 语言转化为纯c + + 语言,这是一种源代码级别上的转换。由于得到了e c l i p s e 项目 组的支持,a s p e c t c + + 项目组已经成功开发出了支持e c l i p s e 的插件a c d t ,将它整 合进e c l i p s e 后,可直接进行可视化的a s p e c t c + + 的开发。 a s e p c t j a s p e c t l 是目前最完善的a o p 语言。a s p e c t j 提供了两种横切实现机制:动态 横切和静态横切。目前,a s p e c t j 既支持编译前的预处理方式实现代码的织入,也 支持编译后的字节码操作。 2 1 4 应用编织实现面向方面程序的编译 目前的面向方面语言均在面向对象的基础之上实现,即通过编织机制将面向 方面的程序转化为面向对象程序,将面向方面中的建议机制转化为面向对象中的 函数来实现f 1 5 l 。 图2 3 面向方面程序的编织机制 在主流的面向对象语言的方面扩展中,如a s p e c t c + + 、a s p e c t j 中,a s p e c t c + + 第7 页 国防科学技术大学研究生院硕士学位论文 实现了源程序间的编织,即通过编织机制,将方面程序转化为对象,并直接插入 到源代码的相应位置,最后生成不含方面元素的c 抖代码。a s p e c t j 则在字节码的 基础之上进行编织【1 6 】。在目前的两款支持a s p e c t j 语言的编织器中,a s p e c t j 程序 的编织均分为两步来完成。首先提取出连接点框架,在其中插入a d v i c e 的接口, 最后才将可执行指令插入该接口中i 】。 图2 4a s p e c r j 的两步编织 由于面向方面程序均是在面向对象程序编译器或运行平台的基础之上进行, 目前主流的面向方面语言大都是在面向对象语言基础之上的扩充。下面是一个方 面程序编织的例子【1 8 】,本文通过它来分析方面程序编译的具体方法。 下面的程序包括基类h e l l o 和方面w o r l d 。基类仅包含一个简单的函数,输入 字符串h e l l o ,方面定义了连接点g r e e t i n g o ,它申明在函数s a y h e l l o ( ) 执行之前执行 建议定义的指令,输出变量h e l l o x 。 方面程序: p u b l i ca s p e c tw o r l d p u b l i cs t a t i ci n th e l l o x20 ; p o i n t c u tg r e e t i n g ( ) :e x e c u t i o n ( 幸h e l l o s a y h e l l o ( 。) ) ; b e f o r e ( ) :g r e e t i n g ( ) s y s t e m o u t p r i n t ( h e l l o x ) ; ) 基程序: p u b l i cc l a s sh e l l o p u b l i cs t a t i cv o i dm a i n ( s t r i n g 】a r g s ) s a y h e l l o o ;) p u b l i cs t a t i cv o i ds a y h e l l o ( ) s y s t e m o u t p r i n t l n ( ”h e l l o ”) ; ) 对编织后的程序进行反编译1 9 1 ,我们得到了如下代码: p u b l i cc l a s sh e l l o p u b l i cs t a t i ci n tx ; p u b l i cs t a t i cv o i dm a i n ( s t r i n ga r g s 口) s a y h e l l o ( ) ;) p u b l i cs t a t i cv o i ds a y h e l l 0 0 w o r l d a s p e c t o f 0 b e f o r e $ w o r l d $ ( ) ; s y s t e m o u t p r i n t l n ( ”h e l l o ”) ; 第8 页 国防科学技术大学研究生院硕士学位论文 s t a t i c w o r l d a j ci n t e r f i e l d l n i t _ w o d d _ h e l l o w o r l d _ h e l l ox o ; 从上面的结果我们可以看到,方面程序的建议被编织后,建议被封装为函数, 方面以其本名成为一个类,该类被声明为静态的,并通过函数a s p e c t o f o 获得该类 的引用,并在连接点定义的位置调用由建议生成的函数。通过编织后的程序,可 以看出编译器的编织策略: 方面被编织为静态类。上例中,w o r l d 是方面a s p e c t w o r l d 编译后生成的类。 由于方面编译生成的类为静态的,需通过函数a s p e c t o f o 获得其实例。 建议被编织为函数。上例中b e f o r e $ w o r l d $ o 是对a d v i c e 中定义的函数的封 装。 这表明了a s p e c t 和c l a s s 、a d v i c e 和方法之间的对应关系。本文将依据此对应 关系实现面向方面程序的并行化。 2 2 并行编译技术概述 自动并行编译技术提供了将串行程序转换为并行程序的能力【2 0 1 【2 1 1 。近年来, 。随着多核c p u 的广泛使用,并行技术更加受到重视【2 2 1 。近几年来,自动并行编译 在依赖关系分析【2 3 1 、程序变换、数据分布和重分布及调度【2 4 】等方面取得了很大的 发展 并行程序的开发由于其内在的复杂性,对开发难度和时间消耗都难以把握。 目前的多核体系结构,主要有共享存储和分布存储两种。而并行时的消息传递方 式,则主要有共享主存和消息传递两种。而对应于编程方式,则主要有共享主存 的o p e n m p 和基于消息传递机制的m p i ( m e s s a g ep a s s i n gi n t e r f a c e ) 目前大型系统的并行应用开发,主要采用m p i 2 5 】或o p e n m p 的方式2 6 1 。 o p e n m p 是在多处理机上编写并行程序而设计的一个应用程序接口。它包 括一套编译指导指令和一个用来支持它的函数库。在编译阶段,编译器根 据编译指导指令自动将串行程序转化为并行程序,并支持在多处理器上的 执行。这种方式不需要程序员自己负责开发并行程序,减小了代码编写的 难度,也保证了程序并行运行的正确性。o p e n m p 的指令能支持并发,同 步等,同时在f o r t r a n 、c 、c + + 等语言中有应用。o p e n m p 的编译指导指 令均以o m p 作为标志,例如:# p r a g m ao m pp a r a l l e l 。同时在o p e n m p 中, 使用各种独立的指令来标识不同的并行类型,例如使用# p r a g a m ao m pf o r 来表示f o r 循环语句的并行,使用# p r a g r n ao m ps e c t i o n 来表示代码段的并 行。 第9 页 国防科学技术大学研究生院硕士学位论文 m p i 定义了一套支持消息传递的库,并几乎受到了所有硬件提供商的支 持。它提供一套方法用以使用m p i 的接口,例如m p ii n i t 用于初始化m p i , 在所有其他的m p i 调用之前需要使用该指令。m p if i n a l i z e 用于终止m p i , 在m p i 使用结束时需要调用该指令。 目前对于以上基于c 程序的并行方式,在j a v a 程序中都有类似的移植。对于 j a v a 程序,由于其可移植性,j a v a 字节码均运行在虚拟机上,j a v a 线程均在虚拟机 的统一管理之下【2 7 1 。 j o m p 2 8 j 是采用类似o p e n m p 机制实现并行的j a v a 并行编译器。它参考 o p c n m p 的编译指导指令,在编译阶段实现程序的自动并行,同样不需要 用户显示编写并行代码。 p a r a l l e lj a v a 2 9 】是一套并行编程的a p i ,它在j a v a 线程的基础之上,同时 支持共享主存和消息传递两种并行的方式。它完全用j a v a 编写,提供与 o p e n m p 和m p i 类似的并行能力。 上述语言均是在面向对象或过程语言的基础上实现的并行编译。对于面向方 面语言,目前并没有类似的并行编译机制。而面向方面技术对问题域的二维划分 特性,以及其程序的切入、编织特性,都对并行编译机制提出了新的需求。 2 3 1 a s p e c t j 简介 2 3 a s p e c t j a s p e c t j 3 0 】是目前被广泛使用和研究的面向方面语言,它是j a v a 语言的面向方 面扩展。a s p e c t j 语言已被用于工业上大型复杂应用的开发,从2 0 0 2 年起由 e c l i p s e a j d t 小组负责维护,目前已成为a o p 领域事实上的标准。 a s p e c t j 通过编译器最终转化为完全可在j a v a 虚拟机上运行的字节码。目前支 持a s p e c t j 语言的编译器主要有两种,由e c l i p s e a j d t 小组维护的a j c 1 7 j 和由牛 津大学领导的小组负责维护的a b c 阁,它们设计思想的不同也导致了最后实现上 的差异。a j c 旨在实现a s p e c t j 的标准,支持大型复杂的工业应用以及和e c l i p s e 平台的无缝集成。a b c 旨在实验a s p e c t j 语言的新特性,以支持快速的语言扩展 为基础,编译器由开源模块搭建而成,各模块间采用p a s s 的方式传递数据,减小 了各模块间的耦合,使编译器更加易于扩展。 2 3 2 a s p e c t j 语言机制 面向对象语言封装实现了核心关注点,面向方面语言封装实现了横切关注点, 并通过连接点机制织入到基程序中。在a s p e c t j 中,a s p e c t 是模块化横切关注点的 第1 0 页 国防科学技术大学研究生院硕士学位论文 最小单元,类似于面向对象中的c l a s s l 3 1 】。a s p e c t 中封装了横切关注点中的所有元 素,包括连接点( p o i n tc u t ) ,建议( a d v i c e ) ,内部类型声明( i n t e 啊p ed e c l a r a t i o n ) 。 a s p e c t j 的语法结构【19 】如图2 5 所示: l 图2 5 a s p e c t j 的语言结构 连接点:连接点是基程序中一个可以显示定义的位置,面向方面程序经过 一定的语法规则,定义表达式指向该位置。这是横切程序对基程序的切入 点和交互点,基程序运行到此处将被暂停并插入横切程序执行。 连接点 图2 6 连接点与方面的关系 建议:建议( a d v i c e ) 定义了横切关注点处需要执行的指令,它在连接点指 出的位置处插入执行。在a s p e c o 中,a d v i c e 可在连接点匹配的三个不同 的时刻执行:连接点之前、连接点之后或取代连接点执行。建议通常可以 拦截基程序上下文的一些参数,供横切关注点使用。 内部类型声明:连接点和建议被称作动态横切,内部类型声明被称作静态 横切,它影响了程序的静态类型层次结构。类型间声明【3 2 1 1 3 3 】完成的功能 有:添加成员( 方法、构造函数、域) 到类型;添加具体的实现到接口中; 声明类型将扩展新类型或实现新的接口;声明a s p e c t s 的优先级;声明白 定义的编译错误或警告;检查异常转换为未检查异常。 第1 1 页 国防科学技术大学研究生院硕士学位论文 2 4 本章小结 面向对象技术支持以一维的方式来分解关注点,但对于具有横切性质的关注 点,面向对象技术只能将横切关注点分散在核心关注点中来解决,这造成了代码 的分散和纠缠。面向方面技术支持以二维的方式来分解关注点,即以类为基础的 核心关注点和以方面为基础的横切关注点,并通过连接点机制实现类和方面的编 织,最终形成统一的执行码。这种关注点的分离方式更加贴近问题域,改进了代 码的散射和纠缠,提高了软件的质量和性能。 本章从面向方面语言的结构、编译机制等方面出发,结合传统的并行编译方 法,阐述了这种新语言带来的新的并行问题,引出了面向方面语言的并行化编译。 本章介绍了a o p 技术的发展历史,并选择目前面向方面领域最重要的a s p e c t j 语 言做了重点介绍。同时本文也介绍了在面向过程、面向对象语言中的并行编译技 术和并行编程方法,以和面向方面语言中的并行化技术做对比。 第1 2 页 国防科学技术大学研究生院硕+ 学位论文 第三章面向方面程序并行化的基本问题 面向方面程序由两部分组成:基程序( b a s ep r o g r a m ) 和方面( a s p e c t ) 。在一个方 面程序中,基程序仅有一套,方面程序可以有多个,方面通过编织技术插入到基 程序相应的位置,成为最终可执行码的一部分。对于织入到同一个连接点处的 a d v i c e ,需通过优先级声明确定程序的编织顺序,并按照此顺序串行执行。面向方 面程序由于方面代码的织入,带来了额外的运行时间上的损耗,这在一些对时间 有严格要求的系统中是不能被接受的。另一方面,由于多核平台的广泛运用,并 行程序的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年商业店铺租赁合同范本
- 中国银行玉林市容县2025秋招笔试经济学专练及答案
- 中国银行盐城市亭湖区2025秋招英文面试20问及高分答案
- 工商银行保定市高碑店市2025秋招笔试数量关系题专练及答案
- 邮储银行晋中市太谷区2025秋招笔试会计学专练及答案
- 中国银行昌都市芒康县2025秋招笔试计算机基础专练及答案
- 中国银行银川市灵武市2025秋招英文面试20问及高分答案
- 邮储银行松原市长岭县2025秋招笔试银行特色知识专练及答案
- 中国银行四平市铁西区2025秋招笔试英语选词填空题专练50题及答案
- 邮储银行昆明市西山区2025秋招半英文面试题库及高分答案
- 美发师考试题
- 浙江安保考试题库及答案
- 苏州安全生产教育培训课件
- 2025年专题讲座-纪念抗战胜利80周年93阅兵
- 兵团面试题目及答案
- 2025贵州贵阳市投资控股集团房地产置业有限公司招聘12人考试参考题库及答案解析
- 免疫细胞治疗安全性评价-第1篇-洞察及研究
- 车间师带徒管理办法
- 桥梁工程监理工作实施方案
- 第9课《天上有颗南仁东星》公开课一等奖创新教学设计
- 2025年秋期新教材部编人教版一年级上册道德与法治教学计划+进度表
评论
0/150
提交评论