已阅读5页,还剩55页未读, 继续免费阅读
(计算机应用技术专业论文)基于分布式组件的并行程序设计研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中科技大学硕士学位论文 摘要 f 随着高性能计算在科学研究和工程技术领域的应用日益广泛和深入,人们 对易用高效的并行计算支撑环境的需求也与日俱增。消息传递是当前最流行的 并行程序设计模式,但是它们的应用程序界面( a p i ) 对于编写并行程序并不 方便,而且编制出来的软件还存在着可重用性低、不易维护等缺点。分布式组 件技术为解决这些问题提供 计算领域成为新的研究方向 如何将分布式组件技术有效地应用到并行 为了能够降低并行程序的编写难度,提高并行代码的可重用性与可扩展性, 通过深入研究基于组件的并行计算系统框架系统的应用程序接口( a p i ) 、对象 管理、集体通信、负载平衡、对象迁移等方面,并结合微软分布式组件对象模 型( d c o m ) 实现了一个并行组件库,使并行程序设计建立在并行组件的基础 上,为并行程序设计提供了新的方法和途径。 对象管理是基于组件的并行运行系统的核心。系统将组件作为并行计算的 基本单元,通过将组件映射到特定的节点并加以管理而实现任务的并行处理。 对象组管理改善了基于c s 的编程模式在并行计算领域方面的不足,通过扩展 分布式组件技术的远程方法调用机制,提供集合类通信功能,以满足并行程序 设计的需要。对象迁移是实现任务共享与负载平衡的基础,相对于进程迁移而 言,对象迁移时只需保存其状态数据,可以减少任务迁移代价。基于预测的负 载平衡机制以保持节点忙碌而不是负载水平大致相同为调度目标,减少任务迁 移“抖动”的出现。 关键词:d c o m :并行组件;对象迁移;对象组 能 崎卢 华中科技大学硕士学位论文 a b s t r a c t w i t ht h e a p p l i c a t i o n o f h i g hp e r f o r m a n c ec o m p u t i n go ns c i e n c ea n d e n g i n e e r i n gt e c h n o l o g y ,i t sv e r yn a t ur a l l yt h a tp a r a l l e lp r o g r a mf r a m e w o r k i s r e q u i r e de a s yt ou s e o fc ur r e n tp a r a l l e lp r o g r a m m i n gd e s i g n i n gm o d e l s , m e s s a g ep a s s i n gs y s t e m sa r em o s tp r e v a l e n t b u tt h e i ra p i sa r ed i f f i c u l tt o u s ea n dt h er e s u l t i n g p r o g r a m sa r ed i f f i c u l tt o m a i n t a i na n dr e u s e s oi t b e c o m e san e wt r e n dt o a p p l y d i s t r i b u t e d c o m p o n e n tt e c h n o l o g y o n p a r a l l e l c o m p u t i n g i nor d e rt o d e v e l o ps c a l a b l e ,r e u s a b l ea n dh i g hp e r f o r m a n c ep ar a l l e l s o f t w a r e e a s i l y ,t h es y s t e ma p p l i c a t i o np r o gr a m m i n gi n t e r f a c e ,c o l l e c t i o n c o m m u n i c a t i o n 1 0 a d i n g b a l a n c ea n do b j e c t m i g r a t i o n h a v eb e e ns t u d i e d w i t ht h ed i s t r i b u t e dc o m p o n e n tb a s e dp a r a l l e lp r o g r a m m i n gf r a m e w o r k a n d ap a r a l l e lc o m p o n e n tl i b r a r y ,o nw h i c hp ar a l l e l p r o g r a m sc a nb eb u i l t ;b a s e o nm i c r o s o f td c o m t e c h n o l o g yi sp r o v i d e d p ar a l l e l o b j e c tm a n a g e m e n ti s t h ec or eo ft h er u n - t i m e s y s t e m t h e c o m p o n e n t s a r eu s e da st h eb a s i cu n i t so f c o m p u t a t i o n p a r a l l e l p r o c e s s i n g i so b t a i n e d b ym a p p i n g t h e c o m p o n e n t s t on o d e s t h e c l i e n t s e r v e rm o d e lo fc o m p o n e n t b a s e dp r o g r a m m i n gh a sg e n e r a l l yb e e n c o n s i d e r e du n s u i t a b l ef o r p a r a l l e l p r o g r a m m i n g p a r a l l e lo b j e c tgr o u p e x t e n d st h em e c h a n i s mo fr e m o t ef u n c t i o n sc a l lf o rd i s t r i b u t e d c o m p o n e n t t op r o v i d em e t h o dr e v o c a t i o no np a r a l l e lo b j e c tg r o u pt os a t i s f yt h ep a r a l l e l p r o gr a m m i n g o b j e c tm i g r a t i o ni st h eb a s i so ft a s k s h a r i n ga n dl o a d i n g b a l a n c e ,w h i c hr e d u c e st h ec o s to fm i gr a t i o nb ym i g r a t i n go b j e c t si n t e r n a l s t a t eb u tn o tt h ec o n t e x t a sf o rt h el o a d i n gb a l a n c e ,t h eg o a lo fk e e p i n ga l l t h en o d eb u s y i n gi sa d o p t e dt or e d u c et h en u m b e ro ft a s km i g r a t i o n k e yw o r d s :d c o m p a r a l l e lc o m p o n e n t ,o b j e c t m i g r a t i o n ,gr o u p c o m p o n e n t 华中科技大学硕士学位论文 1 1 课题背景 1绪论 并行计算是未来计算机科学发展的重要方向之一。如何快速地开发高效、 可扩展的并行应用程序成为并行程序设计研究方面的热点与难点。 人们从不同的角度入手,研制出了各种各样的并行程序设计环境。有的是 从程序设计语言的角度出发,在程序设计语言中引入了有利于并行性开发的语 言元素,有的从程序辅助开发工具出发,开发了并行操作原语库。大部分开发 环境都是对传统的结构化程序设计加以扩展,使传统的结构化程序设计思想能 够适应并行程序设计的需要。它们的功能一般由一个基层软件库提供支持,该 软件库为并行程序设计人员提供了一组处理通信和进程间关系的函数接口 ( a p i ) ,使底层操作系统与硬件的实现细节对程序员透明。程序员在编写并行 程序时不再关心底层的实现细节,而是调用这些a p i 来获得对并行系统的使 用,操纵n o w 系统中的并行计算资源。 但是即使使用这些a p i 进行并行程序设计仍然非常困难。首先学习使用这 些a p i 本身就不是一件容易的事,而且由于它们都是根植于传统的结构化程序 设计,从程序设计方法学的角度来说也存在一些无法克服的问题。主要表现在: 1 对于既大又复杂的并行软件,开发它们耗费大量时间,维护困难而且 代价高昂,扩展其功能将冒很大的风险; 2 应用程序按照单片集成电路的风格进行持续开发,它们可以以某个范 围内的静态特性进行预先封装,但是不能够被独立地添加、取消和更新或 者被替换: 3 应用程序不能对外集成,数据和功能不能很容易地为其它程序所用; 4 对于并行计算资源和环境的管理能力较弱,可扩展性差。 基于组件的程序设计是由面向对象程序设计思想发展而来的,是一种基于 接口的编程模型,这种机制的建立使程序模块化和软件最大限度重用有了实现 的可能。组件软件由可重用的二进制形式的软件块组成( 与源代码不周) 发布, 华中科技大学硕士学位论文 这些软件块可以用相当小的代价插入到用户的应用程序中。而且由于组件是一 种二进制软件,使得组件的编程、使用和独立发展成为可能的模式。 另外并行是组件概念化的一个很自然的结果,事实上,传统并行程序设计 中的协同程序与组件程序设计中的并行操作很类似,另外组件的自主操作、信 启、交互、事件触发也促进了并行计算可视化的实现。通过分布式组件还可以实 现在广域网上的并行计算。 基于上述事实,我们考虑从基于软件组件的程序设计思想出发,通过扩展 现有的基于组件的程序设计技术来满足并行程序设计的需要。使用基于软件组 件的程序设计技术不汉可以在一定程度上克服上述结构化程序设计的问题,同 时还可以为传统的并行程序设计方法带来目前只能用于组件技术的一些新的 特点。 1 2 国内外概况 对并行计算支撑环境的研究一直是并行软件设计领域的热点,特别随着 n o w 系统的流行和相关理论的成熟,科研人员对基于n o w 系统的并行计算 支撑环境作了大量的研究。目前n o w 系统上的并行编程环境主要可以分为分 布式共享存储模型、消息传递模型、面向对象模型、组件模型四种。 1 2 1 分布式共享存储模型 传统的紧耦合式结构,如多处理机器,通常使用共享内存,这使得编程模 型相对简单。现在共享内存的方法已被扩展到许多松耦合系统结构上,一般理 解为分布式共享存储器【1 】( d s m ) 。在d s m 系统中,进程跨过节点边界透明地 共享数据,数据容错、定位和移动都由d s m 系统来处理,这使得并行程序设 计不需要修改松耦合式系统就可使用共享存储器。 共享存储器编程模型优点是显而易见的:共享存储器使得进程到进程的通 信透明,编程容易理解( 与消息传递相比) ,对于实现同样的功能,共享存储 器程序通常比消息传递程序短,而且大的或者复杂的数据结构易于通信,不需 要重整。 虽然不同的d s m 系统在设计上不尽相同,但它们有共同的结构特征:系 2 华中科技大学硕士学位论文 统由一组结构相同的处理机节点构成,每个节点主要包括c p u 、c a c h e 、存储 模块、通信及存储控制部件( c m m u ) 。节点间通过网络互联,每个节点中的 存储模块是全局物理地址空间的一部分,d s m 提供给用户一个统一的逻辑地 址空间。c m m u 用于控制节点访存是落在本地节点还是远地节点,并通过消息 的方式完成远程数据访问。d s m 系统程序设计主要涉及的问题包括:共享地 址空间的结构与粒度、数据一致性协议、同步与替换策略、容错与存储器的分 配等。 d s m 系统的典型代表有a m o e b a 操作系统、m a c h 等p ”。a m o e b a 操作 系统的存储管理是很有特色的:在a m o e b a 操作系统中,考虑到存储芯片的存 储容量正在不断的增加,价格越来越低,系统可以安装容量很大的内存,所以 没有采用大多数存储系统普遍采用的存储扩充技术( 在外存划出存储空间作为 内存的补充) ,而是使进程映像常驻内存。根据a m o e b a 操作系统设计者 t a n e n b a u m 的观点,由于进程图像常驻内存,不需要在内存和外存之间传输 进程映像,系统的性能比其他操作系统要好,存储管理软件a m o e b a 也比较简 单,容易实现。在m a c h 操作系统中,系统为每个用户进程提供了很大的虚拟 存储空问,虚拟空间被分成一些区域,通过把存储对象映射到区域中,进程可 以通过访问虚拟空间的区域来访问存储对象中的数据,存储对象由运行于核外 的存储管理器管理。m a c h 操作系统支持各种存储对象。当存储对象为普通文 件时,m a c h 为用户进程提供了存储映射方式访问文件:当存储对象为临时文 件时,m a c h 为用户进程提供存储扩充。由于使用了存储扩充,在m a c h 操作 系统中进程可以访问的数据量可以不受存储容量的限制。还有一些其它的d s m 如p l a n9 l 刚、s p r i n go s 9 1 这些系统中的存储管理和m a c h 中的存储管理原理上 是相似的,也是通过把存储对象映射到进程的虚拟空间中为进程提供存储扩 充。目前除了这些研究性成果之外也有一些商业的d s m 系统问世,s g i 于1 9 9 6 年发布的o r i g i n 系列和s e q u e n t 公司最新的n u m a - q 是其中典型的代表。 d s m 在松耦合的分布式环境下,实现了一个虚拟的m i m d - s m 模型。在这 个模型的并行计算中,这种透明性与易用性与开销相关,d s m 应用程序往往 比手工编码的消息传递慢。而且d s m 系统还有一个缺点是安全的保护处理不 清楚,容错相当困难 1 0 , 1 1 1 。 3 华中科技大学硕士学位论文 1 2 2 消息传递模型 消息传递模型是近年来在分布式并行计算领域研究方面的一个热点。基于 消息传递的模型通过底层互连的网络将数据以消息的形式发送到其它合作的 并行计算进程,接到消息的进程依据收到的数据做出相应的响应,各进程通过 消息的接收与发送进行同步。 消息传递模型中最基本的发送和接收消息函数的调用形式是s e n d ( p a r a m e t e r i) 和() ,其中 出现在源进程中,由_ i s t r e c v p a r a m e t e r _ l i s t s e n d 它发送消息;而r e c v 则出现在目的进程中收集已被发出的消息。它们的参数 依赖于具体的实现。其它消息传递函数都是基本消息传递函数的某种功能上的 扩充。比如锁定与非锁定的消息传递、广播汇集与散播等h 2 - 1 3 。 并行虚拟机( p v m ) 是一个典型的消息传递系统,它建立了事实上的并行 程序编程标准【1 4 1 5 】。p v m 提供给进程创建、进程间通信的编程接口( a p i ) 和 基本应用程序管理的实时运行时系统。p v m 在大多数普通类型的分布式存储 系统上( 也就是一般的i p 网络) 以及共享存储系统和m p p 上运行得很好,这 保证了p v m 程序最广泛的可移植性。并且p v m 进程能够查询p v m 运行时系 统有关本地处理器的计算能力,这有助于设计自平衡的并行应用程序。 在p v m 中,程序员将求解问题分解成独立的程序,每个程序经编译后在 网络中指定类型的计算机上运行。在并行系统中,每个工作站可以访问含有已 经编译的程序的文件系统。唯一需要保证的是已存在可执行的程序,该程序将 由指定的工作站加以执行。在p v m 中运行程序以前,首先必须定义参与计算 的计算机集,由该计算机集构成虚拟并行机。计算机间消息的路由由p v m 安 装在形成虚拟机的各台计算机上的p v m 守护进程( d a e m o np r o c e s s ) 完成。 消息传递接1 :3 ( m p i ) 是消息传递并行编程的另一个标准 1 4 , 1 6 】。如同p v m 一样,m p i 为消息传递和相关操作提供了库例程。但m p i 和p v m 之间存在不 同,m p i 的基本特征是它是一个实现的“标准”,m p i 比p v m 提供了更大更通 用的例程集合,但不提供任何实时管理系统( 至少在目前的m p i - 2 标准中) 。 实际上,m p l 的流行应该归功于它的现有实现与p v m 相比更加有效,而不是 它丰富的编程接口( 事实上m p i 用户只利用了大型m p l 例程集合中的一小部 分) 。 4 华中科技大学硕士学位论文 1 2 3 面向对象模型 面向对象技术极大地促进了计算机应用和软件技术的发展。近些年,在将 两种技术结合起来,即进行面向对象的编程并同时获得并行性的研究方面,进 行了许多有益的探索,并取得了一些实质性的成果,出现了像m e n t a t 、d c + + 、 c c + + 和h p c + + 等从c + + 繁衍出来的显式并行面向对象语言【1 7 2 ”。 面向对象模型的典型代表有m e n t a t 和e m e r a l d 。m e n t a t 编程语言对对象 的语义进行了新的规定和扩充,以便支持对象的并行性。在m e n t a t 中的对象 分为c + + 对象和m e n t a t 对象两类,其中用m e n t a t 关键字定义的对象占据独立 的、互不相交的存储空间,其成员函数调用都是按值调用,函数的返回结果也 是传值的。m e n t a t 对于每个m e n t a t 对象使用一个独立的线程控制,并在系统 中使用一个唯一的名字标识,每个对象在任一时刻也只提供一个成员函数的服 务j 。尽管m e n t a t 非常侧重于对象的自然并行语义,尽量减少显式的描述并 行性的语言设施,但是由于m e n t a t 对象和大部分面向对象语言( o o l ) 的对 象语义不同,一方面使编译器的设计实现复杂化,另一方面也增加了程序员的 学习难度,而且m e n t a t 对象任一时刻只提供一个成员函数服务的特性有时会 导致“死锁”问题。e m e r a l d 中没有类或继承的概念,该语言的所有入1 3 都被 定义为对象,主动或被动的进程。对象间通过相互间调用进行通信,同m e n t a t 一样,e m e r a l d 也通过一个监视器来同步个对象体内同时存在的多个调用。 它实现并行的方式是为每一个对象分配一个进程,抽象类型用来定义对象接口 ( 和j a v ar m i 类似) ,并行单元是从抽象类型创建得到的封装的对象,并行性 通过运行于不同的计算机上活动对象得到。但是e m e r a l d 不支持组通信,多道 接收可以通过串行的循环实现,在支持并行编程方面不够灵活。 、 1 2 4 组件模型 分布式组件技术一个重要的特点就是将面向对象技术中的方法调用扩展 到了跨越进程甚至计算机的边界【2 甜,能够得到其它计算机上对象的引用而且可 以像对普通的对象一样进行进程方法调用,这一点对于并行程序设计有着巨大 的吸引力。因为并行应用程序员就再也不用考虑如何在计算机之间传递数据, 他们现在只需要简单地利用远程对象方法调用就可以达到传递数据的目的了。 组件模型中一般利用接口定义语言( i d l ) 定义对象的界面,我们一般称 华中科技大学硕士学位论文 对象的界面为接口,在接口的方法声明中还要指出参数传递的方向,由分布式 组件的底层设施来提供数据的传递 2 3 - 2 5 。 人们普遍认为客户端服务器( c s ) 模式的组件编程技术不适合用于并行 计算领域,它缺乏对于点到点( p e e r t o p e e r ) 通信语法支持,而且组件模型 也不容易达到对象分布的并发访问与数据流控制。不过这随着一些最近在组件 领域的新发展如a m i 、多线程及异步调用等,使人们对于基于组件的并行支撑 环境的研究又充满了希望。 p a r d i s 是一个用c o r b a 来封装m pj 并行程序的项目。p a r d i s 的整个 基础是建立在基于m p i 的s p m d 程序之上,对每个s p m d 进程使用一个 c o r b a 对象进行封装,适用于数据并行类的计算。p a r d i s 还通过扩充了 c o r b a 的i d l 语义来达到数据的透明分布,但由于对c o r b a 的基础设施进 行了扩展,使得它不能完全兼容于目前的c o r b a 产品。p a r d i s 中对于对象 组管理使用的方法是多个对象共享一个名字,也就是说同一个c o r b a 类在多 个计算机节点上的实例使用相同的名字在命名服务上注册,然后修改 s t u b s k e l e t o n 来达到对对象组的透明使用。文献 2 5 】也对基于c o r b a 的高性 能计算的设计与性能表现加以了描述。 由于j a v a 的日益强大与流行,很多人也对基于j a v ar m l 的远程对象调 用加以扩展,以用于并行计算领域 2 6 - 2 8 。m a n t a 高性能j a v a 是一个利用r m i 进行远程方法调用的并行环境,虽然m a n t a 是一个j a v a 运行时系统,但是它 是使用c 语言实现的,而且m a n t a 还将代码编译成目标机器代码而不是 b y t e c o d e ,所以在运行效能上比一般的j a v ar m i 效率要高,但这也丧失了程 序的部分可移植性。m a n t a 在使用g m i ( gr o u pm e t h o dl n v a c a t i o n ) 来进行 对象组调用,使m a n t a 可以提供如m p i 和p v m 系统上那样的归约与集合类风 格的计算。g m i 虽然实现了r m l 功能,但是它与传统的j a v ar m i 不一样。 r m i 通过r p c ( s u n 实现) 进行远程调用,而g m i 则传递可序列化消息对象, 这使它看起来更象是m p l j 和p v m j 等j a v a 消息传递系统。m a n t a 重新设计 了底层通信协议( p a n d a ) ,利用p a n d a 组播消息对象实现对远程对象的并行 调用。g m f 中编译生成的s t u b 和s k e l e t o n 和持续化也使用c 语言实现,这也 提高了它的运行效率。 综合以上这些系统的特点,我们可以看出,并行程序设计的发展有如下趋 6 华中科技大学硕士学位论文 势: 1 对于可并行的单元,其封装性越来越好,具有较强的自主性; 2 系统更加为客户着想,能够快速地编写易用、高效的应用程序已经成 为系统设计的一个主要目标; 3 对于封装为对象的并行运算单元,必须提供组对象调用方法。 ,1 3 课题主要研究工作 - 本课题以微软分布式组件对象模型为基础,在n o w 系统上实现一个基于 组件的并行计算支撑环境。主要研究内容包括对象组管理和对象迁移等内容。 1 、对象组管理 在并行程序中,经常需要对多个对象同时进行某一操作,如何采取有效 的方式对对象组加以管理是研究基于分布式组件系统的并行支撑环境一个重 要方面,本文通过实现通用的组对象来达到对对象组的有效管理。 2 、对象迁移与负载平衡 大部分的并行程序都需要负载平衡才可以取得最好的执行效果。由于应用 程序中的负载会随着时间变化,所以经常需要平衡负载。无论是由应用程序自 身或是外部条件的变化而引起的负载不平衡,任务迁移是平衡负载的唯一办 法。进行任务迁移的难点在于:如果由程序员来进行任务的划分,那么进行任 务转移也需要由程序员来进行,这在有时是不可能达到的,如果系统支持自动 迁移,又因为没有应用程序的特定的对于任务的知识,准确性差。本文将在基 于组件对象的迁移基础上研究负载平衡,并且提出了一种基于预测的负载平衡 算法 对象迁移提供了一个进行有效的、自动控制的负载平衡机制。对象一般是 小的、在内存中有固定位置的,因而迁移代价也小得多。这包括如下的内容: 1 对象异地生成机制; 2 对象状态的保存: 3 对象之间点到点通信状态的维护; 4 跨结点的对象组的管理。 全文共分六章。 7 华中科技大学硕士学位论文 第一章为绪论,介绍了课题来源目的、范围、意义及国内外研究概况。 第二章介绍了本课题的研究背景及一些相关的概念和体系结构。 第三章是本文的重点,主要介绍并行组件对象及对象组的管理技术。 第四章介绍了并行组件系统中对象迁移以及负载平衡的机制。 第五章为系统实现与测试: 第六章为本课题的总结。 一一 8 华中科技大学硕士学位论文 2 研究背景及相关概念 本文设计并行组件库( p a r a e l e lc o m p o n e n tl i b r a r y :p c l ) 的目的是能够 建立一个基于组件的并行软件支撑环境,使得一方面原有的组件设计人员能够 比较容易地设计出高效、可扩展、高重用性有并行软件组件,另外一方面也使 原来的并行程序员能够很快地适应基于组件的编程模式,利用其他人或者机构 提供的具有高可用性的成品并行组件,快速地构造并行应用程序。 2 1 分布式软件组件的概述 当前主流的分布式组件技术主要有s u n 的e j b 、o m g 的c o r b a 和 m i c r o s o f t 的d c o m 2 9 3 1 1 。它们都是客户服务器结构,提供服务的对象运行 在服务器端,根据客户端的请求调用相应的方法,客户端和服务器端遵循同样 的调用规则。其中e j b 和c o r b a 都是产品规范,只是规定了组件应该遵循的 接口标准,而没有特定的实现细节,d c o m 则是一个产品。 2 1 1e j b e j b 是基于组件的开发模型,用于创建可伸缩、多层次、跨平台分布式应 用,其规范是s u n 公司发布的。e j b 通过j a v a 语言很方便地创建分布式应 用,此种模型以j a v a b e a n s 作为构件基础。 e j b 通过j a v a 虚拟机( j v m ) 提供的远程方法调用( r m i ) 使客户机运 行的程序可以调用远程服务器上对象的方法,它使程序员能够使用类似于单机 上的顺序编程方法来编制分布式的并行程序,在网络环境中进行分布式计算。 r m i 应用通常由两个独立部分组成:服务器和客户。典型的服务器创建一 系列的远程对象,并给出这些远程对象可以到达的引用,等待客户对这些远程 对象的方法调用。客户程序得到服务器上远程对象的引用,然后调用它们的方 法。r m i 提供了服务器和客户通信的机制并来回传递消息【32 1 。 2 1 2c o r b a c o r b a 技术规范是o m g 的产品,o m g 是一个包含多个组织的联合协会。 9 华中科技大学硕士学位论文 c o r b a 体系结构中,对象请求代理( o r b ) 是其核心。通过o r b ,客户可以 透明地访问服务对象的方法,而不用关心服务对象的位置、实现细节、状态和 采用的通信协议。客户与对象之间的接口是通过接1 :3 定义语言i d l 定义的,l d l 编译器编译i d l 文件后生成相应的打包,解包代码,其中客户端的打包解包代 码称为存根( s t u b ) ,服务器端的打包,解包代码称为框架( s k e l e t o n ) ,除了 o r b 以外,c o r b a 还提供了许多对象服务与公共设施。 c o r b a 的流行在于它的跨平台、跨语言的能力,o r b 一般支持目前市场 上用到的大多数平台,并且大部分c o r b a 产品也支持多种编程语言【33 1 。但是 由于o m g 向各公司提供的是技术规范而不是实现细节,因此每种o r b 产品 并不完全兼容。虽然在c o r b a 规范2 3 中增加了i l o p 的规定使得不同厂商 之间o r b 能够互连拉,但是有些公司在其产品上包含了扩展性能,在利用这 些扩展性能时,开发者不得不损失o r b 之间的互操作性和移植性。 2 1 3d c o m 作为微软的分布式计算策略,d c o m 是在开放性软件基金组织( o s f ) 的 远程过程调用协议( r p c ) 的基础上开发的【3 5 1 。d c o m 是微软组件对象模型 ( c o m ) 的扩展,c o m 和d c o m 最大的不同是c o m 是运行在单机上,而 d c o m 组件则分布在网络上,能够支持在局域网、广域网甚至i n t e r n e t 上不同 计算机的对象之间的通信。在d c o m 环境下,界面是关键,组件是界面的具 体实现,客户机和服务器的通信只需通过包含指向组件可用函数的指针的界 面。每一个组件都必须在本地注册,以便客户能够通过注册表上的唯一标识找 到组件对象。 与c o r b a 类似,d c o m 组件的接1 3 也是通过i d l 定义的,一个对象类可 以实现多个接口,每个接1 3 又可以定义多个操作。每个d c o m 对象和每个接 1 3 都被赋予了一个全局唯一标志符g u i d ,分别称为类标志符( c l s i d ) 和接 口标志符( 1 i d ) 。通过编译i d l 文件,可以产生相应的调度( m a r s h a l ) ,反调 度( u n m a r s h a l ) 代码,其中客户方的代码称为代理( p r o x y ) ,服务器一方的 称为存根( s t u b ) ,一次完整的调用包括激活服务器对象和调用相应方法的过 程。在d c o m 中服务器对象是根据客户的调用自动激活而不是象c o r b a 和 r m l 中事先生成再注册到某个名字服务器或者仓库中。 1 0 华中科技大学硕士学位论文 2 2 基于d c o m 的并行程序框架 分布式计算与并行计算是计算机未来的发展方向。然而,目前的分布式组 件系统并不是为了编写数值计算并行程序而开发,它们的主要目的在于提供高 的可靠性和可扩展性以及应用程序之间的交互性,执行速度虽然很重要,但并 不是这些占据着市场主要地位的组件系统最重要的目的。由于一些额外的基础 设施会降低程序的执行速度,如事务处理等,在一般的数值计算并行程序中, 我们并不需要事务处理,还如内存数据库、排队组件等,这些在基于三层结构 的商务应用程序中很重要,但是并行程序并不需要这些特性1 3 6 1 ,而对于些并 行应用程序中需要的集合类运算等用目前的组件技术也不容易描述。所以我们 希望开发一种基于组件的并行运算环境,运行在这个环境中的并行组件既可充 分利用n o w 系统中的并行计算资源,利用分布式组件技术所提供的特性,又 不会为不必要的特性付出性能上的代价。 分布式组件技术是在面向对象技术的基础之上建立的,它是由面向对象更 进一步地发展而来的。在组件编程模式中,客户都是要与一个本地的代理对象 进行通信,而代理又与服务器端的一个存根对象进行通信,存根对象才真正对 组件进行直接的方法调用。正是有了代理和存根对象( 在不同的分布式组件模 型中它们的叫法不同) 才使得客户与服务器对象之间可以进行透明的通信,客 户程序不用知道组件运行在什么地方,也不用知道组件的实现细节,它只要知 道组件对象提供了它声明的调用界面( 通过接口定义语言l d l 进行接口声明 p ,j ) ,就可以利用在客户端获得的对组件对象的引用来进行方法调用,而具体 的跨计算机或者跨越进行之间的通信细节由组件框架提供的基础设施来完成。 分布式组件技术还提供了良好的可扩展性,当负载增加或者需要更快的处 理结果时,一台最快的多处理机也有可能不适应需求,对于这样一些组件,可 以在不同的计算机上运行多个不同的副本,将用户负载平衡到各个处理器,从 而获得较好地效果。在并行计算领域,如果采用了组件技术,也可以在需要更 大的计算能力的时候,将更多的工作者组件布置到更多的计算结点上,从而可 以很方便地获得更强大的计算能力而不需要重新设计并行应用程序。 采用组件技术还可以降低并行程序的开发难度。我们知道长期以来,阻障 并行程序的广泛应用很重要的一点就是并行程序难以编写。编写应用程序对于 华中科技大学硕士学位论文 程序员增加了额外的因素:不仅仅是程序在什么时候运行,而且还有在什么地 方运行,什么处理机来运行它。如果采用组件技术一方面可以获得位置透明性 基础设施,另一方面为并行程序编写带来了软件组件令人激动人心的组装程序 的能力。 采用组件技术还可以获得健壮的版本发展:因为基于组件的编程模型中机 能被分组放入界面中,客户程序不关心也无法获得组件的内部实现细节,程序 员可以随时修改组件的,只要实现了它对客户所声称的接口,客户程序就可以 健壮地运行。 在现有的分布式组件技术中,e j b 、c o r b a 和d c o m 各有千秋。它们都 有可以达到位置无关性,与位置有关的信息不是出现在组件源代码中。无论是 在同一进程空间或是在同一计算机的不同进程空间还是在不同的计算机上,客 户连接组件和调用组件的方式是一致的,组件不仅无需改变源代码,而且不需 要重新编译程序,一个简单的再配置动作就可以改变组件与客户之间的连接方 式。e j b 在基于j a v a 的分布式编程领域获得了广泛的应用。c o r b a 由于它 是一种开放的规范也获得了注目。然而由于我们系统的目的是用于非专用机群 系统,在各个工业系统以及科研机构的p c 上一般运行的仍然是w i n d o w s 操 作系统,虽然目前l i n u x 系统也获得了一定的应用,但是由于它在易用性上的 欠缺以及与传统的办公方式的不兼容,还只是占据了很小的一部分份额,而且 一般也只是应用于专用系统上。d c o m 由于获得了操作系统底层的支持,因此 在速度上更胜一筹。再加上微软推出的c o m + 和后来的n e t 战略都是根基于 c o m ,所以不用考虑以后的升级问题。 在d c o m 中,客户程序并不能直接看到服务器组件,客户进程同组件进 行交互的唯一方式就是通过方法调用,当用户和组件不在同一个空间时, d c o m 的远程过程调用框架代码将每个方法调用打包放到一个标准的缓冲器 结构中,这个缓冲器结构将被发送给组件( 当然,这是由我们前面说的代理和 占位对象完成的) ,组件打开包并且执行方法调用。d c o m 本身就是一个大的 由c o m 组件形成的系统,只要程序员实现了相应的接口,就允许对某些核心 功能提供替代,这对于以库形式开发并行运行支撑环境非常有利。 实验表明d c o m 的通信开支大约比t c p i p 多了3 5 ,如果网络可靠的 话,使用u d p 则会使这个开支减少到大约2 0 。由于通信开销的增加,使得 华中科技大学硕士学位论文 基于分布式组件的适用于粗粒度的、通信量相对不是太频繁的并行计算。 事实上,我们将底层的实现细节全部对客户程序屏蔽,而是提供了一组与 应用程序接口( a p l ) ,利用这些a p i ,客户程序就可以利用我们系统中的所有 功能。这使得我们可以很轻松地将系统移植到其它组件系统之上,或者也可以 开发专用的底层组件设施,而客户程序将不需要或者只是修改很少的代码就可 以投入运行。虽然客户程序员也可以使用d c o m 系统提供的a p i 进行方法调 用,但是这样将丧失应用程序的可移植性。 。 2 3 有关的概念和定义的说明 为了方便对于系统的描述,在这里先对一些文章中要用到有关定义和概念 加以说明: 定义1 单独组件s c ( s i n g u l a rc o m p o n e n t s ) ,单独组件就是传统意义上 的组件,对它们的调用总是执行在一个上下文环境( 线程或者进程) 中。如果 组件的成员函数实现中将调用传递来的任务加以划分,然后利用p v m 或者m p j 等这样传统并行计算环境完成任务,最后收集结果返回给调用者,我们仍然将 这种组件称为s c 组件。 定义2 部分对象p o ( p a r to b j e c t ) 部分对象是实际完成并行组件( p c s ) 功能的对象。部分对象有两种类别,一种是有状态对象,一种是无状态对象, 有状态对象利用内部成员变量保存在每客户期的状态,直到客户宣称对对象的 使用已经完成后才可以被回收。无状态对象本身不保存任何状态信息,它只在 每调用中根据客户传递的参数进行计算,然后向客户返回计算的结果,无状态 对象能够大大增加程序的可扩展性和性能。部分对象必须遵守c o m 规范,也 就是说它至少要实现i u n k n o w n 接口。 定义3 并行组件p c s ( p a r a l l e lc o m p o n e n t s ) ,并行组件指封装并行代 码的组件。对p c s 的调用由一个或者多个p o 执行完成,这些p o 通常是并 列地运行在不同的上下文中,多个p o 组成一个p c s 。p c s 是逻辑上的概念, 在程序员开发组件的过程中,它是不可见的,并行程序员开发的是p o 组件, 而客户程序创建p c s 时得到的实际上是在多个处理机上生成的p o 组件对象 的引用。 华中科技大学硕士学位论文 定义4p o 对象组p o g ( p a r a l l e io b j e c tg r o u p ) p o g 是由至少实现了 一个相同的自定义接口的p o 对象组成,它是系统中进行集合类通信和计算的 基本单元。 p o g 与p c s 与有许多相似之处,它们基本上支持相同的操作。不同之处 在于创建机制,客户程序直接创建一个p c s ,创建p c s 实际上是一组p o 对 象的创建,p o 对象不能离开这个p c s ,并且个p o 对象只有在创建时才能 够属于一个p c s 。而p o g 是针对接口而言的,它创建时是一个空的容器,任 何实现了同一接口的p o 对象都可以属于同一个p o g ,而且一个p o 对象可以 加入或者离开个p o g 。p c s 对象可以转换为p o g ,但是p o g 则无法转换 为p c s 。 客户与服务器客户与服务器的关系体现在一次p o 组件的成员函数调用 中,在这次调用中,p o 组件就是服务器,而调用了p o 组件成员函数者是客 户,无论这个调用者是最终的并行应用程序还是一个其它的p o 组件。 为了便于描述,除非特殊说明,本方中对象一般指的是p o 对象。 2 4 功能要求与系统框架 并行运行系统必须支持开发出能够在各种环境下使用的模块。例如程序员 可以使用其他人先前已经开发好的并行线性方程求解模块和并行f f t 变化模 块开发自己的动态流体力学应用程序。将功能模块封装为组件,正是为了提供 这种封装性与可重用性。 在我们设计这个系统时,考虑到与原有的d c o m 组件系统相兼容,因此 当程序员实现具有一定功能的并行组件时,与完成普通的c o m 组件没有什么 区别,只要是实现了l u n k n o w n 接口的c o m 对象都可以在我们的系统中使用。 但是为了达到更好的计算效率,也有很多因素需要考虑。 为了准确地确定系统设计的范围,我们给出了如下的设计原则: 1 类库必须在语义上与原有的组件系统保持一致;也就是说基于我们的 p c l 库开发的组件能够象一般的d c o m 组件那样使用。 2 对客户程序要尽可能地透明,程序员不需要关心到底封装了并行功能的 组件在哪一个处理器上在运行,将对象实例映射到特定的处理器是p c l 运行 4 华中科技大学硕士学位论文 时库的功能。客户程序要求在不与d c o m 直接打交道的情况下就能够完成并 行程序的设计,通过掩盖底层实现细节使得程序在底层实现修改后能够仅仅重 新连接就可以执行而不用或者说很少用得上改变源代码。 3 程序员可以将一个并行程序划分为多个组件功能模块而不会导致性能 上有大的损失: 4 支持动态负载平衡,通过对象迁移提高整个系统的执行效能。 t 5 支持对远程对象的异步调用。标准的组件对象都是完全同步的,但是这 种起源于与接口标准过程调用相对的远程过程调用( r p c ) 的同步模型,对于 所有的情况来说并不是最好的。客户应用程序可能会希望对象处理方法调用时 处理一些其它的工作,因此异步调用是一种合理的方式,而在系统结构中内建 一种这样类型的服务器更具有优越性,异步调用是系统体系结构的特征之一, 系统可以通过优化这些调用来减轻整体的负担。 p c l 作为一个并行程序开发和运行的支持环境,它必须提供给程序员足够 的功能,使程序员可以快速、高效地开发并行应用程序,下面我们简要地介绍 一个p c l 系统提供的功能。 1 通信功能 通信包括点到点的通信与集合通信,其中点到点的通信表现为客户程序对 一个对象或者是一个对象对另外一个对象的成员函数的调用,这类调用可以是 同步的,也可以是异步的。同步调用由于我们采用了在现有的组件技术之上构 建我们的系统,因此可以很容易地达到。而异步调用则是通过系统提供的调度 对象来完成的。集合通信主要是指对对象组或者在对象组内的广播通信。p c l 系统中提供了p o g 对象,一个p o g 中的对象至少都实现了- 个自定义接口, t 集合类通信就是为属于一个组中的对象同时调用它们都实现了接口上的方法 的功能。p c l 提供了p o g 的创建与销毁,以及将一个对象加入或者离开特定 的p o g 。p c l 中还要支持组方法调用,即对个组对象的方法调用事实上是 由运行在不同计算节点上的一组对象并行完成的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年麻精药品培训考核试题(含答案)
- 2026 年教师节感恩教育主题学习课件
- 研究生请假条模板
- 2026年广东茂名市中考模拟考试一模数学试题附答案
- 保健科易错试题与答案揭秘
- 微生物农药生产工风险识别水平考核试卷含答案
- 橡胶栽培工安全宣贯测试考核试卷含答案
- 木屋架工岗前设备性能考核试卷含答案
- 野生植物监测工安全风险能力考核试卷含答案
- 天然香料制备工成果测试考核试卷含答案
- 2026年浙江经贸职业技术学院高职单招笔试英语试题库含答案解析3套试卷
- 青海2026年省考公务员《行政职业能力测验》考试真题(完整版)
- 2026语文新教材 2026年秋期新教材统编版六年级上册语文教材分析解读 教学课件
- 《中华人民共和国生态环境法典》应知应会测试题100道
- 2025年重庆市从“五方面人员”中选拔乡镇领导班子成员考试历年参考题库含答案详解
- 诸暨水务集团招聘试卷
- 岗位hes责任制度
- 2026第二届全国红旗杯班组长大赛考试备考核心试题库500题
- 医疗器械公司介绍
- 2026湖南奥林匹克物理竞赛试题及答案
- 医疗器械有效期确认流程及报告模板
评论
0/150
提交评论