(计算机软件与理论专业论文)并行编程技术在多核处理器上的研究与应用.pdf_第1页
(计算机软件与理论专业论文)并行编程技术在多核处理器上的研究与应用.pdf_第2页
(计算机软件与理论专业论文)并行编程技术在多核处理器上的研究与应用.pdf_第3页
(计算机软件与理论专业论文)并行编程技术在多核处理器上的研究与应用.pdf_第4页
(计算机软件与理论专业论文)并行编程技术在多核处理器上的研究与应用.pdf_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

独创性声明 本人郑重声明:所提交的学位论文是本人在导师指导下独立 进行研究工作所取得的成果。据我所知,除了特别加以标注和 致谢的地方外,论文中不包含其他人已经发表或撰写过的研究 成果。对本人的研究做出重要贡献的个人和集体,均已在文中 作了明确的说明。本声明的法律结果由本人承担。 学位论文作者签名: 学位论文使用授权书 本学位论文作者完全了解东北师范大学有关保留、使用学位论文的规 定,即:东北师范大学有权保留并向国家有关部门或机构送交学位论文的 复印件和电子版,允许论文被查阅和借阅。本人授权东北师范大学可以将 学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩 印或其它复制手段保存、汇编本学位论文。 ( 保密的学位论文在解密后适用本授权书) 签嘉黜 r 币签器恕 日期:2 望 ! 。盘= ( 日 期:乏兰么之:笸! 弓 学位论文作者毕业后去向: 工作单位: 通讯地址: 电话: 邮编: 摘要 近几年开始,c p u 主频提高的速度已经越来越慢,硬件厂商开始将c p u 的 发展方向转变为多核化,i n t e l 、a m d 等公司多核处理器的市场占有率也开始不 断上升,并且这些处理器中集成的核也越来越多。原有方式开发出的串行程序无 法充分的利用多核c p u 的性能,于是就需要在软件开发中加入并发。 东北师范大学正在使用的研究生培养管理系统( g 刑i s ) 也面临着这样的问 题:g t m i s 采取了三层架构,服务层原来采用的串行程序设计方式,使得它很 难发挥多核服务器的性能,以至于在研究生选课等对性能要求比较高的场景中经 常会遇到性能的瓶颈。所以急需对g t m i s 中服务层的串行程序进行改造,以实 现高性能的并行程序。 对并行程序的开发平台的选择,要注意的该平台的发展潜力、对并行开发支 持的是否全面、是否有助于高效开发、已及是否有良好的工具支持。本文对比了 w i n d o w s 平台上各种并行开发技术,最终从中选取了微软n e tf r a m e w o r k4 0 中 即将要发布的并行扩展( p f x ) 来进行了跟踪研究;对p f x 中的任务并行库 ( t p l ) 、并行语言查询( p l i n q ) 和c o o r d i n a t i o nd a t as t r u c t u r e s ( c d s ) 进行 了整理和阐述;通过v i s u a ls t u d i o2 0 1 0 中的c o n c u r r e n c yv i s u a l i z e r ( 并行性能分 析器) 及其他手段找出系统中的性能瓶颈,然后在v i s u a ls t u d i o2 0 1 0 中新增的 p a r a l l e lt a s k s 和p a r a l l e ls t a c k s 调试器的帮助下,使用p l i n q 对g t m i s 服务层 进行了改造,使其在多核处理器上性能有了较好的提升。 关键词;多核处理器;n e tf r a m e w o r k4 o :并行;p l i n q :t p l a b s t r a c t i nr e c e n ty e a r s ,r a t eo fi m p r o v e m e n tf o rc p u f r e q u e n c yh a sb e e ng e t t i n gs l o w e r a n dh a r d w a r em a n u f a c t u r e r sb e g a nt os h i f tt h ed i r e c t i o no fd e v e l o p m e n tc p ut o m u l t i - c o r et e c h n o l o g y i n t e l ,a m da n do t h e rc o m p a n i e sh a v eb e g u nt or a i s et h e i r m a r k e ts h a r eo fm u l t i - c o r ep r o c e s s o r s ,a n dt h e ya r ei n t e g r a t i n gm o r ea n dm o r ec o r et o p r o c e s s o r b e c a u s et h es e r i a lp r o g r a md e v e l o p e db yo r i g i n a ls t y l ec a nn o tf u l l yu t i l i z e m u l t i - c o r ec p u p e r f o r m a n c e ,w en e e dt oa d dc o n c u r r e n c yi ns o f t w a r ed e v e l o p m e n t t h eg r a d u a t et r a i n i n gm a n a g e m e n ts y s t e mu s i n gb yn o r t h e a s tn o r m a lu n i v e r s i t y a r ea l s of a c i n gt h i sp r o b l e m :g t m i sa d o p t e dt h r e e l a y e ra r c h i t e c t u r e ,a n dt h es e r i a l m o d eo f t h eo r i g i n a ld e s i g nm a k ei tv e r yd i f f i c u l tt op l a yam u l t i c o r es e r v e r s p e r f o r m a n c e i nt h es i t u a t i o ns u c ha sg r a d u a t es e l e c t i n gt h ec o u r s e s ,s e r v i c el a y e r o f t e nb e c o m eb o t t l e n e c k s ow en e e dt ot r a n s f o r mi tt oc o n c u r r e n c yp r o g r a m w en e e dt oc o n s i d e ran u m b e ro ff a c t o r ss e l e c t i n gt h ep a r a l l e lp r o g r a m m i n g d e v e l o p m e n tp l a t f o r m ,s u c ha sd e v e l o p m e n tp o t e n t i a lo f t h ep l a t f o r m 、w h e t h e ri t f a c i l i t a t e se f f i c i e n td e v e l o p m e n t 、w h e t h e rt h e r ea r et o o l st om a k ey o u rd e v e l o p m e n t e a s y t h i sa r t i c l ec o m p a r e sp a r a l l e ld e v e l o p m e n tt e c h n i q u e sb a s e do nt h ew i n d o w s p l a t f o r m ,a n ds e l e c t sp a r a l l e le x t e n s i o n sf o rt h e n e tf r a m e w o r k ( p f x ) i n t h es o o n t ob er e l e a s e dt of o l l o w - u pa n ds t u d y a tl a s tt h ea p p l i c a t i o no fp a r a l l e ll a n g u a g e i n t e g r a t e dq u e r y ( p l i n q ) i np f x ,u s i n gt h ec o n c u r r e n c yv i s u a l i z e r 、p a r a l l e lt a s k s d e b u g g e rt o o l w i n d o wa n dp a r a l l e ls t a c k sd e b u g g e rt o o l w i n d o wi nv i s u a ls t u d i o2 0 10 , e f f e c t i v e l yr a i s e dt h ep e r f o r m a n c eo f t h es e r v i c el a y e ri ng t m i so nm u l t i - c o r e p r o c e s s o r s t p l k e yw o r d s :m u l t i c o r ep r o c e s s o r ;n e tf r a m e w o r k4 o ;c o n c u r r e n c y ;p l i n q ; i i 。 目录 摘要。i j b s t r a c t i l 弓i言1 第l 章绪论2 1 1 背景:硬件平台的多核趋势。2 1 2 课题的研究意义:加速比。3 1 3研究现状s 1 4 本文主要工作6 第2 章微软的并行编程模型及其工具8 2 1并行编程模型t p l 8 2 2 v i s u a ls t u d i o2 0 1 0 中的并行支持工具1 1 第3 章并行编程技术在研究生培养管理系统中的应用1 3 3 1研究生培养管理系统( g t m i s ) 架构简介与分析1 3 3 2基于p l i n o 的g t m i s 服务层并行改造1 5 第4 章实验结果及数据分析1 9 4 1实验平台1 9 4 2实验过程与结果1 9 第5 章总结与展望2 4 参考文献2 5 致谢:2 7 在学期间公开发表论文及参加的科研项目情况2 8 东北师范大学硕士学位论文 引言 在过去几十年里,由于内存和硬盘特别是c p u 厂商强力推进主流系统向更 新更快的方向发展大多数软件不做版本升级甚至原封不动就可轻松而持续地享 受处理器性能提升的成果,就像享受“免费的午餐”。尽管摩尔定律预言了历史 上的指数式增长,但我们很清楚指数式增长不可能永远维持。因为硬件毕竟受物 理极限约束光速是不可能更快的,所以增长必然放缓最后停滞【l j 。 近几年来,免费的午餐结束了。随着硬件的制作工艺遇到了材料在物理特性 上的限制,已经很难再快速的提高c p u 的主频了。于是硬件厂商开始将处理器 的发展方向调整为多核,近几年多核处理器逐渐成为市场的主流,而这种趋势势 必将持续下去。由于软件是建构在硬件的基础上的,对于硬件在体系结构上如此 重大的变革,软件的开发方法必须也要进行相应的变化才能与之相适应,否则我 们开发出的程序将不能充分利用硬件的计算潜力。于是并行应用程序设计就显示 出了其重要性。 研究生培养管理系统( g t m i s ) 正在被我校研究生院所使用,用来实现对研 究生及其学业信息的管理,目前应用效果良好。但此系统由于服务层在进行学生 选课等情形时会有很大的性能压力,由原有的串行程序设计方式很难充分的利用 应用服务器c p u 中的多个执行核,所以很有必要对如何进行并行的程序设计来 充分释放硬件服务器中多核c p u 的计算能力。 当前对于共享内存模型下的并行应用程序设计有很多的策略:在较低的级 别,采用线程和加锁的机制,如采用p t h r e a d s 或w i n d o w s 平台提供的 w i n 3 2 m f c c l r 线程a p i 【2 域j a v a 语言提供的线程库,但这就需要处理很多繁 琐的细节问题,使程序开发者难以专注于实际的业务逻辑,这一点可以从相关的 书籍中看出来【3 1 4 1 。在更高级别的抽象层次采用一些其他的编程模型,比如 o p e n m p 【5 】。微软在2 0 1 0 年4 月1 2 日正式推出的n e tf r a m e w o r k4 0 中也提供 了一套新的并行编程模型,而本人从其c t p 、b e t a l 、b e t a 2 、r c 直至最终的发 行版便一直进行跟踪研究。 本文将对各种并行编程技术进行对比,并将找寻出适合解决g t m i s 系统的 并行方案。 东北师范大学硕士学位论文 第1 章绪论 1 1 背景:硬件平台的多核趋势 1 9 5 6 年,i n t e l 的创始人之一戈登摩尔( g o r d o nm o o r e ) 发现了这样一条 规律:半导体厂商能够集成在芯片中的晶体管数量大约每隔1 8 2 4 个月翻一番。 在过去的四十年中,晶体管集成数目和c p u 时钟频率基本上是按照摩尔定律发 展的1 2 j 。但是如图1 1 可以发现,晶体管的集成数目一直在继续上升,但是c p u 的时钟频率在2o 03 年就开始突然急刹车了,这主要是因为一系列的物理学上 难以突破的问题使得cpu 的主频越来越难提高了【6 j 。 于是,新型的c p u 在提升性能方面开始向提升主频以外的另一个方向发展, 那就是:多核。i n t e l 、a m d 、s u n 以及m m 等公司也都相继推出了多核微处理 器产品,而且这些多核处理器的架构也越来越复杂【_ 刀。从2 0 0 5 年开始,从个人 电脑到服务器和游戏平台都出现了采用多核c p u 的情况。仅仅五年后,也就是 2 0 1 0 年的今天,我们已经到处都可以看到多核处理器的身影。在可以预见的未 来,多核处理器更将是深入到从桌面应用到移动应用、服务器、专用嵌入式的各 个计算平台【引。 硬件工业的这种发展趋势为软件开发人员提出了巨大的挑战。因为在从前, 人们编写的程序可以随着c p u 频率的增加,而在直接在新的机器上获得更好的 性能,但是当处理器开始多核化的趋势后,如果应用程序想充分利用c p u 吞吐 增加量,那它们就必然日益需要并发,这种形势逐渐明朗,并将在接下来的数年 里深入发展1 1 j 【9 j 。 2 东北师范大学硕士学位论文 ; l |l 阳羽墨_ 嘲煳l b h - i - l - 卜 藿 ln t e l i c p ut r e n d s _ i s o u l口墨:i n t e l ,w i l d p e d i a i c o l u k o t u n ) , 舔硪i m 蟹陟 , t1i “ 。1。|j, 一 jl l i r l _ l 。,i i 一- 一z 1 - ,r _ 、一、 , 。- 厂一n 一, 一 少菇誓 o - 7 衫蜘导; ,。压z 簟缸撕畦嘲雌0 一 一一,r 1 _ t o o d ( w 稿秘铭 ! 霸棚 勃蜊啊e i 嚏柱纷 图1 - 1c p u 的性能增长曲线 i 2 课题的研究意义:加速比 当我们开始进行并行程序设计,以便充分利用硬件工业为我们提供的强大并 行计算平台时,我们必须要关心的就是如何来衡量并行系统或程序并行化的性能 和效果。其中一种重要的衡量指标就是加速比( s p e e d u p ) :是同一个任务用最 优串行算法的执行时间除以并行处理器系统中运行时消耗的时间所得到的比值。 下面列出了有两个比较著名的定律,它们分别从不同的角度和观点对加速比进行 了计算【l o 】: 1 2 1a m d a h l 定律 g e n ea m d a h l 在1 9 6 7 年1 1 1 1 提出的方法能够简单而清晰地计算加速比的理论 最大值,他将程序划分为可加速与不可加速两部分,在忽略分配并行化工作过程 中带来的开销后,程序总的加速比就是一个关于这两部分比例以及可加速部分性 东北师范大学硕士学位论文 能加速程度的函数: 公式1 力哒睁正葡丽面丽丽i 丽丽丽1 观丽葡蘧丽荡孺丽 l 我们可以将公式( 1 ) 变换成如下公式( 2 ) : 1 加速比= _ 二 ( 2 ) j + ( 1 一s ) n 其中,s 表示执行程序中串行部分的比例,n 表示处理器核的数量,最优串 行算法的执行时间为一个单位时间( 即分子为1 ) 。 由公式( 2 ) 可以推出,当处理器核的数量趋于无穷大时,如果应用程序串 行部分比例为s ,那么加速比在程序并行化之后能够达到的极限为: 加速比= 二 ( 3 ) s 这无疑是一个令人悲观的公式,因为这个公式表明无论处理器核有多少颗, 加速比都还是取决于程序中串行部分的比例。但是我们要注意,这个公式假定了 当处理器核数目增加时问题的规模不变,也就是程序的负载不变,其实自现实世 界中这个假设是不一定正确的。事实上,一般都是保持程序运行时间不变,因为 当拥有更多的计算资源时人们普遍会增加问题的规模,而保持运算时间不变。基 于这点,就有了下面的固定时间加速比模型。 1 2 2g u s t a f s o n 定律 所谓固定时间加速比模型,就是说当机器节点数增加时,问题规模也随之扩 大。增大问题规模是出于使所有处理机保持忙碌状态,在问题扩大到与可用的计 算能力匹配时,程序中的顺序部分就不再是瓶颈了【1 2 1 。这一模型是1 9 8 8 年,j o h n g u s t a f s o n 和e b a r s i s 为了更准确地反映他们在s a n d i a 国家实验室工作的过程一 起,通过调整a m d a h l 定律中关于固定负载的假设而建立的【1 3 1 。在这种情况下, 假设在一个并行系统中串行程序执行的时间为s ,并行程序执行的时间是p ,那 么在一个单核处理器上运行相同的任务需要花费的时间就是+ p 7 n , g u s t a f s o n 定律: 扩展加速比= ( + p x n ) ( s 7 + p ) = s + p x n = + ( 1 一) s 7 ( 4 ) 可以看出,在这种情况下,加速比是随着处理器核的数量线性增长的。 东北师范大学硕士学位论文 通过g u s t a f s o n 定律,我们可以看到,并行计算的开发技术,在理论上我们 可以充分利用c p u 新增的吞吐量来提高程序的性能。而且在当前的实践中,也 已经有一些并行的方案可以帮助我们来进行并行程序的开发。 1 3 研究现状 1 3 1 微软面向w i n 3 2 、m f c 和n e t 的线程a p i 微软的低级别的线程a p i 包括w i n 3 2 m f c 线程a p i 和c l r 的线程a p i 。 对于前者,如果不须维护已有的遗留系统中的代码,则没有太大的必要了解,因 为目前w i n d o w s 开发的主流都已经是n e t 平台了。而对于后者,是在n e t 4 0 之前的并行多线程开发中采用的方式,通过一系列的文献【1 4 】b 5 】【1 6 】都可以看出, 由于对线程的控制比较麻烦,开发者的效率也不高。 1 3 2 o p e n m p o p e n m p ( o p e n m u l t i p r o c e s s i n g ) 是用于共享内存并行系统的多线程程序设 计的一套指导性注释( c o m p i l e rd i r e c t i v e ) ,支持的编程语言包括c 语言、c + + 和f o r t r a n 。o p e n m p 提供了对并行算法的高层的抽象描述,程序员通过在源代码 中加入专用的p r a g m a 来指明自己的意图,由此编译器可以自动将程序进行并行 化,并在必要之处加入同步互斥以及通信。当选择忽略这些p r a g m a ,或者编译 器不支持o p e n m p 时,程序又可退化为通常的程序( 一般为串行) ,代码仍然可 以正常运作,只是不能利用多线程来加速程序执行【r 刀。o p e n m p 的第一个标准 于1 9 9 7 正式发表,目前已经有面向f o r t r a n 、c c + + 的编程接口规范。o p e n m p 基 于f o r k j o i n 模型,将程序划分为并行区和串行区,不同处理器间通过共享变量 完成数据交换【1 8 】。在最新3 0 版本之前一般面向循环结构的并行化,在3 0 版本 之后加入了一个称为任务处理的新功能,大大扩展了o p e n m p 的使用范围。 1 3 3 微软n e t 4 的p f x 面对程序设计中的并行趋势,为了降低开发者进行并行程序设计的难度,提 高开发者的生产率,微软在n e t4 中加入了“并行扩展”( p f x ,p a r a l l e le x t e n s i o n s f o rt h e n e tf r a m e w o r k ) 。主要包括以下几个部分1 1 9 2 0 】: 任务并行库( t p l ,t a s kp a r a l l e ll i b r a r y ) : 将开发并行程序的抽象级别从低级别的“线程( t h r e a d ) ”提升到高级别的 “任务( t a s k ) ,开发人员从而只需规定好计算机要执行的任务,然后由 n e t 去管理。这一并行库包含了数据的并行和任务的并行。 并行语言集成查询( p l i n q ,p a r a l l e ll a n g u a g ei n t e g r a t e dq u e r y ) 这是n e t3 0 引入的l i n q 的升级“产品”,让l r n q 可以并行执行。只 5 东北师范大学硕士学位论文 是目前只针对l r n qt oo b j e c t 有效,也就是说可以并行的查询和处理内存中的数 据对象。 c o o r d i n a t i o nd a t as t r u c t u r e s ( c d s ) 主要是用于对并行工作间的协作和状态共享提供支持,包括一系列因满足线 程安全而无需加锁保护的常用数据结构,比如线程安全的队列、堆栈等。 1 3 4 技术方案对比与选择 并行计算的顺利发展,在很大程度上取决于一个适用于不同计算机体系结 构的通用性程序设计语言标准。目前编程语言中加入并行成分有两种方式:第一 种是,在语言中加入描述并行性的语言成分,对原有语言进行扩展,把开发并行 性的主要责任交给编译器;另一种是,提供并行库供编程语言调用。【2 l 】 o p e n m p 通过在所支持的编程语言中加入特定的编译指令,使得实现了 o p e n m p 标准的编译器可以根据这些编译指令生成相应的并行代码。这种实现方 式的好处在于:一旦编译器不支持这些编译指令,或者在编译时选择关掉并行开 关,那么程序还可以按照串行的方式执行1 2 2 j 。但缺点在于:这样做就不得不为 每种支持的编程语言设定特定的编译指令,而且需要修改所有的现有编译器,这 个工作量将会非常巨大。当前虽然有多种编译器支持了o p e n m p 的最新标准 o p e n m p3 0 ,但目前业界最流行的集成开发环境v i s u a ls t u d i o2 0 0 8 只支持到 o p e n m p2 0 2 3 】,将要推出的v i s u a ls t u d i o2 0 1 0 也不支持o p e n m p 3 0 。 p f x 采用了另一种实现方式,他将自身以函数库的形式作为n e t 平台的一 个有机组成部分,供应用程序调用。这样的设计有很多好处:使用p f x 编写并 行程序时,所有代码会被直接编译为对p f x 函数库调用的几指令,整个编译过 程同编译标准的n e t 应用程序没有任何区别。这样以来,对于像n e t 这样跨语 言的平台,构建于其上的各种语言就可以很方便的调用p f x ,并且不需要对这些 语言的编译器进行改变。目前的多核处理器平台架构十分的复杂多样( 2 4 ) ,这 就使得其上的多核设计很困难。而由于调用t p l 的并行程序最终由c l r 负责执 行之,c l r 又相当于一个虚拟机,为程序提供了一个统一的接口,这样就屏蔽 了硬件平台的不同,简化了程序的开发。更主要的是,对于应用软件开发者来说, 可以很快的学会使用p f x 开发并行程序,因为编程方式上没有任何变化,只是 编程时好像多了几个类可用。并且因为v i s u a ls t u d i o2 0 1 0 对其的良好支持,使 得t p l 也是开发并行程序的良好选择。 1 4 本文主要工作 研究对比w i n d o w s 平台上现有的各种并行编程技术,从中筛选出微软 在n e t4 中的并行扩展( p f x ) ,并在其尚未正式推出和资料匮乏的情况下就开 6 东北9 币范大学硕士学位论文 始进行了跟踪的研究,整理并阐述了t p l 的原理、组成,并对v i s u a ls t u d i o2 0 1 0 中相配套的并行开发工具进行了介绍,最后将p f x 中的p l i n q 应用到东北师范 大学研究生培养管理系统中,通过性能测评证明改善了多核服务器上的计算性 能。 7 东北师范大学硕士学位论文 第2 章微软的并行编程模型及其工具 微软正在开发一系列的技术用来简化代码中并行机制的表达,其中很重要的 一部分就是用于n e t 框架的并行扩展( p f x ) 。p f x 是在并行硬件上用于数据 并行、任务并行、任务调度和协作的托管编程模型,它可以使开发者很容易的编 写出能够利用硬件并行优势的程序。下面对它包括的t p l 、p a r a l l e l 类和p l i n q 进行介绍。 2 1 并行编程模型t p l 2 1 1t p l 简介与原理 任务并行库( t p l ,t a s kp a r a l l e ll i b r a r y ) 是一组类和a p i ,位于n e t4 0 的s y s t e m t h r e a d i n g 和s y s t e m t h r e a d i n g t a s k s 这两个命名空间中。其目的是能 够更简单的编写能够使用多核并行代码,以提高开发者的工作效率。t p l 可以通 过动态的调节并发度来最有效的使用所有可用的处理器。而且,t p l 还负责了工 作的划分、线程池中线程的调度、对取消的支持、状态的管理以及其它低级的细 节问题,从而将开发者从琐碎的工作中解放出来,以更加关注于要解决的问题本 身。而且按照微软官方的说法,在n e t4 0 中开发多线程和并行程序,t p l 应当 是优先选择【2 5 。 t p l 中包含用于动态分配任务的复杂算法,并且有很好的负载平衡和适应能 力。同时,库的原语仅仅表达潜在的并行性,但并不保证一定会并行执行。例如, 在单处理器计算机上,p a r a l l e l f o r 循环是顺序执行的,与串行代码的性能紧密匹 配。然而,在双核计算机上,根据工作负荷和配置,1 p l 可以使用两个工作线程 来并行执行该循环。这意味着我们使用t p l 编写的代码,在旧式的单核处理器 计算机上仍然能够很好地运行;同时又可以自动引入并行性,使得编写的应用程 序将会在条件许可时自动使用多核处理器,充分发挥系统效率。使用t p l 开发 并行程序,着眼点是高级别的“任务 而不是低级别的“线程 ,而且任务是 t p l 实现并行计算的基本单位。 一个任务代表某个需要计算机执行的数据处理工作,通过划分任务的方式 有助于应用程序的并行化,其中任务单元是动态生成的,就像在递归结构或w h i l e 循环中一样。 微软的m s d nm a g a z i n e 中介绍了t p l 的原理 2 6 1 :t p l 采用了名为任务窃 东北师范大学硕士学位论文 取( w o r k s t e a l i n g ) 技术将工作项目动态地适应和分配到工作线程上。如图2 1 所示,库有一个“任务调度器( t a s ks c h e d u l e r ) ,默认情况下它会对每个核 使用一个工作线程( 这确保了o s 执行的线程切换次数最少) 。每个工作线程 有其各自等待完成的本地任务队列。每个工作线程通常只是把新任务推入队列 中,并在任务完成时弹出工作。当其本地队列为空时,工作线程自己会寻找工作, 尝试从其他工作线程的队列中“窃取”工作。这种工作方式的优势在于工作线程之 间几乎没有同步,因为工作队列是经过分配的,而且大多数操作对工作线程来说 都是局部的,这对可伸缩性而言至关重要。此外,工作窃取具有已证实的良好缓 存和负载平衡特性。 图2 1 t p l 原理图 2 1 2 以p a r a l l e l 类为核心的并行 t p l 中最容易使用的是s y s t e m t h r e a d i n g t a s k s p a r a l l e l 类,这个类提供了用 于实现三种常用并行程序执行结构的三组方法,每组方法都有很多的重载方法, 可以到m s d n 中查阅。 对于这三组方法,在内部的实现也都是运用的上述的工作窃取机制。 基于p a r a l l e l f o r e a c h 并行访问数据 在如下的串行算法中,迭代的处理了集合中的每一个对象: f o r e a c h ( v a te o u r s e s e l e e ti nr e s u l t s ) p m e e s s ( e o u r s e s e l e c t ) ;处理单个对象 如果一个数据集合r e s u l t s 中单个数据c o u r s e s e l e c t 的处理互相并不依赖的 话,那么,使用p a r a l l e l f o r e a c h 0 方法可以让p r o c e s s ( c o u r s e s e l e e t ) 方法并行的进 行处理: 匦亟匾运虱r e s u l t s ,e o u r s e s e l e e t = p m e e s s ( e o u r s e s e l e e t ) ) ; 在这里,不用担心发生多线程共同访问共享资源r e s u l t s 会发生问题,因为 9 基于p a r a l l e l i n v o k e 并行执行任务 当我们有一系列相互独立的工作需要并行执行时,最简单的方法是使用t p l 的p a r a l l e l 类的i n v o k e ( ) 方法来并行执行它们。 使用p a r r a l l e l i n v o k e ( ) 方法可以让它们并行执行: 叵巫照函 02 p r o c e s s a 0 , ( ) 2 p r o c e s s b 0 , 0 = p r o c e s s c 0 ) ; p a r r a l l e l i n v o k e ( ) 方法的声明如下: p u b l i c s t a t i cv o i di n v o k e ( 酬a c t i o n ha c t i o n s ) ; 请注意其参数中有一个p a r a m s 前缀,表明此方法接收可变数目的参数。您 可以根据需要传给它任意多条语句。 2 1 3 p l i n q p a r a l l e ll i n q ) p a r a l l e ll i n q 就是并行的l i n q ,它是n e tf r a m e w o r k 4 0 中对原有l i n q 的 升级与发展。l r n q ( 语言集成查询,l a n g u a g ei n t e g r a t e dq u e r y ) 是_ n e t3 5 的新 特性,支持v i s u a lb a s i c n e t 以及c 群,用来降低编程语言访问和整合数据信息 的难度,包含了l i n qt oo b j e c t ,l i n qt ox m l ,l r n q t os q l ,l i n qt oa d o n e t 等。n e t4 0 引入的p l i n q 可以并行方式执行l r n q 查询。目前p l i n q 只实现 了l i n qt oo b j e c t 的并行执行,如果数据来自于数据库或文件等其他地方,需要 将这些数据加载到内存对象中才能使用p l i n q 。 从l i n q 到p l i n q 的转换非常简单,在很多情况下只需要添加一个a s p a r a l l e l 子句就行了,而原有l r n q 的编程方法仍然有效,这样就使得技术的升级比较容 易。例如,以下代码将把整数集合中的偶数挑出来: v a rs o u r c e = e n u m e r a b l e r a n g e ( 1 10 0 ) ; v a re v e n n u m s = f r o mn u mi ns o u r c e 匦圈 w h e r e s u m 2 = :0 s e l e c th u m ; 另外,如图2 2 可以看出,p l i n q 在底层调用的是1 1 p l ,也就是说p l i n q 1 0 东北师范大学硕士学位论文 是比t p l 抽象层次更高,所以在并行编程时,应更多考虑p l l n q 。在下一章就 将阐述如何在实际的研究生院培养管理系统( g t m i s ) 中使用以p l i n q 为主的 并行编程技术,提升系统的性能。 凡豫q | u c u t t o n 翱f 翱_ j 、铀辩¥蛔_ 静啤! 伪协锄埔嘲嘲 甜e t m a a t u n , a : 啪 q 持竹。i ,并靛弼 :搠搿巷硒g ;2 5 图2 - 2p f x 结构框架1 2 2v i s u a ls t u d i o2 0 1 0 中的并行支持工具 在多线程的程序开发中调试以及性能分析一直都是存在很多难点,因为对在 多个线程进行跟踪,并要理清它们间的调用关系非常的困难和不直观。而v i s u a l s t u d i o2 0 1 0 中的新增加的两个并行调试工具【2 7 1 和一个并行性能分析工具能够很 方便的帮助我们进行调试和性能分析。 2 2 1 调试工具中新增的p a r a l l e ls t a c k s 工具窗口 在以往版本的v i s u a ls t u d i o 的调试器提供了一个c a l ls t a c k 窗口,帮助开发 人员得到方法间调用堆栈,也就是方法间调用的先后关系。但由于这个窗口是以 线性列表的形式反映的调用关系,所以就在并行的情况下很不方便调试跟踪各个 线程的调用关系。 而p a r a l l e ls t a c k s 调试工具可以展现出程序中线程间调用信息的树形结构。 因为l 中的任务是执行在线程上的,所以线程间的调用关系和任务的调用关 系式相同的,于是p a r a l l e ls t a c k s 就提供了任务和线程两种视图,并且这两种视 图间的切换很方便。同时,还对这两种视图都提供了一种叫方法视图的特性,这 种视图帮助调试者清晰的看到方法的调用者和被调用者 2 8 】 2 9 】【3 0 】。 1 图片来自于:h t t p :h m s d n m i c r o s o f t c o m e n - u s l i b r a r y d d 4 6 0 6 9 3 2 8 v s 1 0 0 2 9 a s p x 1 1 东北师范大学硕士学位论文 2 2 2 调试工具中新增的p a r a l l e lt a s k s 工具窗口 p a r a l l e lt a s k s 窗口和v i s u a ls t u d i o 中已有的线程调试窗口很像,只是它显示 的是任务的信息而不是线程的信息。就像线程一样,任务也反映了可进行并行工 作的异步操作,只不过多个任务可能运行在同一个线程上。 这个工具窗口提供了程序运行中产生的任务对象的各种信息,而且提供了对 这些任务的排序、分组、父子间的调用关系、冻结任务所在线程等诸多功能。从 而帮助我们方便的观察任务的状态,调试各种构建在t p l 上的程序,其中就包 括p l i n q 和p a r a l l e l 类中的众多方法 3 1 】。 2 2 - 3 性能分析器中新增的c o n c u r r e n c yv i s u a l i z e r c o n c u r r e n c yv i s u a l i z e r 能够使开发者看到所编写的多线程程序如何同硬件、 操作系统、自身以及本机上的其他程序进行交互。它提供了图形、表格和文本等 视图来展现应用程序的线程与系统之间的交换关系。于是就能够分析出性能瓶 颈、c p u 使用率、线程竞争、线程的跨核迁移、i 0 调用所带来的性能损失以及 一些其他的信息。而且这些视图尽可能提供从输出的结果到程序源代码或调用堆 栈的链接。同时c o n c u r r e n c yv i s u a l i z e r 与v i s u a ls t u d i o2 0 1 0p r o f i l e r 的紧密集成, 在选择a n a l y z e l a n u c hp e r f o r m a n c ew i z a r d 后在弹出的窗口中进行如图2 3 的 选择,后就能方便的使用了。 瀛s l r t hf 矗n q m : _ _ 罐 矽+ 钟删i 鼍唧一一。似掣一”郴“哆”“忡。4 垮y 节僦:。船! 一? :。j 。电卅。毗崎f4 镌? ;t r * f i l i gy e a rt 摊l i e t t i e at 觑i 口l 轴d i 薯l ,l 摹tp e r f , m m m u 疆拼瑚埔稚i ai - t t t t t i t 睁n 睹- i le h - o tj i 螂e a s i v e ”t h o d s 池y o u r 坤珏i e t t i “孙b a h i a , 加聊髓l i 孵”踟a 蠹”m 姊童“磁舭0 , ;,霸瓜t 埘1 拶班重i 蜷t 蝉ti r ul i l mt 毋, ;霉a 呵s 锵p l i i l g 珏鲁t _ - 啊m 。 i t w 珊伊电。毯d 喇n l 髓t 越1 w ,w w 轴娃;j :矿b t - t l t t i j , 瑟封# # 如m 醢“l 铀槛戚t i n i t l :。 搿矿埘汀- 毫- 埘矗l 薹尊t a t i mt s , 雌x i q o 写 r , ,5 f :蕊 。o 。o 。毒缸,毫;* j i 一鼗;豫t 、;。甍j 二;蔑 图2 - 3c o n c u r r e n c yv i s u a l i z e r 选择方式 但我们也同时需要注意的是,它不支持w e b 项目,并且需要在w i n d o w sv i s t a 及以后版本的操作系统中的e v e n tt r a c i n gf o rw i n d o w s 功能1 3 2 1 。 东北师范大学硕士学位论文 第3 章并行编程技术在研究生培养管理系统中的应用 3 1 研究生培养管理系统( g t m i s ) 架构简介与分析 研究生招生规模的不断扩大,给研究生正常的教学组织和管理带来了巨大的 压力。而研究生的网络化管理不仅可以改进传统的教学管理方式,实现管理过程 的现代化,而且它对于提高管理工作效率,加强研究生管理工作的规范性,保证 培养质量的提高具有重要意义。 研究生培养管理系统就是在这个背景下应运而生的,它是东北师范大学 研究生院信息化的重要组成部分之一,是一个集w i n f o r m 结构和w e b - b a s e d 结 构于一体、涉及研究生培养管理各环节、面向学校各院系以及各层次用户的研究 生培养管理信息系统。这一系统自2 0 0 8 年4 月份试运行以来,已经趋于稳定, 为促进研究生培养管理的科学化、规范化、信息化提供了有力的支持: 根据目前的计算机技术和软件开发技术,系统物理架构采用三层结构,分别 为数据服务器、应用服务器和客户端( 如图3 1 ) 。这样将更好地屏蔽数据服务 器,大大提高了系统的安全

温馨提示

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

评论

0/150

提交评论