并行模型(共9篇)
并行模型 篇1
0 引 言
微粒群算法 (PSO) 是由Kennedy和Eberhart等[1]于1995年开发的一种演化计算技术, 来源于对一个简化社会模型的研究[2]。微粒群算法是一种基于群体智能的随机优化算法, 通过微粒追随自己找到的最好解和群体找到的最好解来完成。自微粒群算法提出以来, 由于它的计算快速性和算法本身的易实现性, 引起了国际上相关领域众多学者的关注和研究[3]。
在微粒群算法中, 应用问题的规模直接决定了PSO的执行效率。然而并行计算是实现高性能、高可用计算机的主要途径。因此, 并行PSO的研究对于大规模或超大规模的多变量求解具有很重要的意义。近年来, 已有学者对并行微粒群算法从不同角度进行研究。文献[4]提出的并行仿真, 使每个粒子的行为成为一个独立的线程, 进化中的粒子个体充分表现出独立性、种群表现出异步性。文献[5]主要研究的是并行PSO算法中三种不同的通信策略。依据算法中各个参数之间的关联程度不同, 提出了三种不同的通信策略。文献[6]提出基于岛屿群体模型的并行PSO算法不仅提高了求解效率, 而且改善了早收敛现象。文献[7]将设计的并行PSO算法应用于生物力学的一个实例中, 文献[8]研究一种细粒度的并行微粒群算法, 将它应用于系统辨识, 结果表明:并行PSO算法具有很好的效果。
本文首先介绍BSP并行计算模型, 接着提出了基于BSP并行计算模型的并行PSO算法。该算法改变了标准PSO算法的结构, 提高了算法的求解效率。
1 并行BSP计算模型
并行计算模型是并行计算机基本特征的抽象, 是并行算法设计和分析的基础。并行算法的设计不能局限于某种具体的并行计算机, 而必须借助抽象的计算模型。并行计算模型与并行算法设计、并行机之间有密切联系。
一个BSP计算机由n个处理机/存储器组成, 通过通信网络进行互联。在BSP模型中, 计算系由一系列用全局同步分开的周期为L的超级步 (superstep) 所组成。在各超级步中, 每个处理器均执行局部计算, 并通过选路器接收和发送消息;然后作一全局检查, 以确定该超级步是否已由所有的处理器完成;若是, 则前进到下一超级步, 否则下一个L周期被分配给未曾完成的超级步。
一个BSP程序有n个进程, 每个驻留在一个节点上, 程序按严格的超步顺序执行, 超步间采用路障同步, 如图1所示。每个超步分成如下有序的三个部分:
(1) 计算
一个或多个处理器执行若干局部计算操作。操作的所有数据只能是局部存储器中的数据, 这些数据是在程序启动时或由以前超步中的通信操作存放在局部存储器中的。结合BSPPSO算法, 多个子群体被分配在不同的处理器上独立地进化计算, 利用子群体内各个粒子的历史最好位置和群体最好位置, 搜寻子群体内部的最好解。
(2) 通信
处理器之间相互交换数据, 通信总是以点对点的方式进行。在BSPPSO算法中各个子群体相互交换信息, 不断更新全局最好位置。
(3) 同步
确保通信过程中交换的数据被传送到目的处理器上, 并使一个超步中的计算和通信必须全部完成之后, 才能开始下一个超步中的任何动作。在BSPPSO算法中, 等到所有子种群体局部进化结束, 相互比较最好信息, 得出当前的全局最好位置, 再开始继续循环整个进化过程。
BSP的一个特点是, 它将计算任务和通信任务分开。它简化了算法的设计和分析, 当然就牺牲了运行时间, 因为所谓的整体大同步意味着所有的进程均必须等待最慢者。考虑异步方式的耦合性更高, 更容易产生通信瓶颈。本文采用的是同步方式。
2 并行BSPPSO算法
算法流程描述如下:
Step1:初始化整个种群。对每个粒子的随机位置和速度进行初始设定。每个粒子由计算得到初始的适应值和初始的个体最好位置Pi及初始的群体最好位置Pg。
Step2:将整个种群分为几个子种群。各个子种群独立进化。
2.1:
在每个子种群中, 根据粒子自身的最好位置Pi和全局最好位置Pg按照进化方程进化, 然后计算粒子的适应值。
2.2:
在各个子种群独立的进化中, 若某个子种群中粒子的适应值比全局最好位置Pg的适应值好, 则它作为当前的全局最好位置Pg。其它子种群依据该Pg值继续进化, 直到进化最慢的子种群更新完全局最好位置Pg。
Step3:若未达到结束条件 (足够好的适应值) , 则返回步骤2.1, 各子种群继续循环迭代, 直到满足条件。
分析BSPPSO算法:各个子种群内部独立的利用各个粒子的历史最好位置和群体的全局最好位置按照进化方程独立进化。由于各个子种群进化快慢不同, 当进化较快的一些子群体经过比较, 得出当前的最好位置Pg, 则该Pg会影响到正在进化中的其它子种群, 能引导它们的粒子更快地朝最好位置飞去。加快了算法的收敛。这样, 各个子种群既能充分利用自身的值进行搜索, 不会迷失自己的方向, 又能及时得到全局最好位置Pg的引导, 达到最好值。
3 仿真实验
本文采用两个无约束优化基准测试函数, 分别用经典PSO和BSPPSO进行仿真实验, 并对实验结果进行比较, 以验证BSPPSO的寻优性能。测试函数是:
F1:Sphere函数
F2:Rosenbrock函数
为了提高可比性, 本文在两种算法中取同样的调整参数。惯性权重W的取值在整个搜索过程中从1.0减至0.4。粒子总个数为60。在BSPPSO中将整个群体划分为三个子群体, 每个子群体为20个粒子。各个子种群用不同的线程独立进化。实验在Windows环境下用多线程技术对BSPPSO进行模拟, 开发环境为VC++6.0。实验结果如表1所示。
在实验中分别对两种算法重复运行50次取平均。由于文章篇幅所限, 只列出其中性能改善较明显的两个函数。从结果中看, 对标准PSO很难收敛的Rosenbrock函数, BSPPSO算法极大地提高了它的收敛率和收敛速度。对于100维的Sphere函数, 在平均收敛代数近似相同的情况下, 收敛率比标准PSO要提高很多。从图2~图3中, 我们可以看到在两种算法下, 随着迭代次数的增加, 适应值的变化情况不同。总之, BSPPSO与PSO相比, 收敛性得到了加强, 适应值更好。
4 结 论
本文将BSP并行计算模型引入标准PSO, 从结构上改变了标准PSO算法的模式。基于BSP模型设计了一种全新的并行粒子群优化算法, 并将它进行并行实现。该并行算法提高了搜索效率, 同时使算法性能得到了很大改善。
摘要:在对标准微粒群算法分析的基础上, 将它与BSP并行计算模型相结合, 设计并实现了一种基于BSP并行计算模型的并行微粒群算法。这种基于BSP并行计算模型的并行微粒群算法改变了标准微粒群算法的结构, 提高了算法求解效率。实验结果表明, 该并行算法的性能比标准微粒群算法有了很大的提高。
关键词:演化计算,BSP并行计算模型,微粒群算法
参考文献
[1]Kennedy J, Eberhart R.Particle swarm optimization[A].proc IEEE Int Conf on Neural Networks, perth, 1995:19421948.
[2]谢晓峰, 张文俊, 杨之廉.微粒群算法综述.控制与决策, 2003, 18 (2) :129134.
[3]曾建潮, 介静, 崔志华.微粒群算法.北京:科学出版社, 2004.
[4]罗建宏, 张忠能.并行仿真的粒子群优化算法异步模式研究.计算机仿真, 2005, 22 (6) :6870.
[5]Chang Juifang, Chu Shuchuan, John f Roddick Pan Jengshyang.A Par-allel Particle Swarm Optimization Algorithm with communication strate-gies.Journal of information science and engineering, 2005, 21:809818.
[6]黄芳, 樊晓平.基于岛屿群体模型的并行粒子群优化算法.控制与决策, 2006, 21 (2) :175179.
[7]Schutte J F, Reinbol J A, Fregly B J, et al.Parallel Global Optimization With the Particle Swarm Algorithm.Int.J.Numer.Meth.Engng, 2003.
[8]Schutte J F, Fregly B J.A parallel particle[C].Proc5th World Con-gress of structural and Multidisciplinary Optimization, Italy:Venice, 2003:1923.
并行模型 篇2
职级评定要跳出“单位级别依赖”
公务员职级改革的重难点是公务员的考评、奖惩、升降的公平性,它应严格约束长官意志,建立民主评定、申诉和调查、举证义务、责任追究等制度。
《意见》明确了公务员职级制度改革,无疑令人期待,它也是对十八届三中全会提出的“建立公务员的职务与职级并行、职级与待遇挂钩制度”的呼应。而需要明确的是,公务员职级制度是法治政府相关的“文官制度”的一部分,它需要恪守法治原则,也理应在技术方法、机制设计、关联制度等方面下工夫。
就制度改革本身而言,我认为至少应注意几个方面:首先,应解剖现行制度积弊的体制性成因。一直以来,公务员的职级与职务是紧紧挂钩的。弊端之一是,没有职务,职级就无法晋升。县以上有处级的调研员、巡视员等虚职;科级及其以下没有虚职。弊端之二是,公务员职级过度依赖其单位的级别,导致庙大和尚大、庙小和尚小,县级公安局一个能干的老刑警到退休可能只是科级,而国家部委中的能力普通者退休前至少是处级,明显不公平。这是体制性问题,须进行制度设计上的调整。
其次,应尽可能明确这项改革的目标:处级目标应是职级与职务相对分离,分开考评、升降,并建立相应待遇制度。职级对应的考评、调整,应主要以德、能、实绩、资历为依据,但也要考虑其所在单位的级别。县以下公务员的职级,可以到处级,特别突出者可以到司局级;或者按公务员分级,合理确定职级的上下区间。
至于各级、各类、各个公务员的工资待遇和财产状况,须严格遵循透明原则,接受全社会监督。对其任何不正当利益均应依法处理,贪污受贿必要时应降级直至开除;接受任何馈赠,均应及时报告、公开,并举证证明其不违法性。
而公务员职级改革,还需诸多关联性制度改革措施的配套。例如,应健全公务员的退出机制,取消事实上的铁饭碗。对每个公务员职位,须作尽可能明确的职责规定,并对其履职状况进行内外部评价。比照事业单位的聘期制,对部分公务员也实行聘期、任期制,打破终身制。又如,对不同种类的、同职级的公务员,应按照公务的复杂性、危险性、紧迫性程度,实行合理的差别待遇:如刑警的待遇应高于大多数种类的公务员。
另一重难点是公务员的考评、奖惩、升降的公平性及相关激励机制问题。长期以来,长官意志说了算的提任机制为害颇深。而相关改革应严格约束长官意志,建立民主评定、申诉和调查、举证义务、责任追究等制度。如果负责人特别主张提升某人的职级,则应公开对组织、公众承担证明义务,并对被晋级者的德、能、绩及法治意识、守法状况承担“担保责任”;对于不公平、不正当的升降,应严格追究负责人的责任。概言之,在此项改革中,要注重对症下药、方法缜密、公开公平、厉行法治,特别是管束好各级负责人,丝毫不能含糊。
就怕“职务职级并行”执行难
现实中的公务员考核里,虽然要求公务员考核要尽量体现公平和真实的文件不少,可囿于人情世故、利益固化等因素,实际执行效果并不理想。
作为基层公务员一名,听到“不当官也能享受官员待遇”的消息,看到职级改革有了纲领性文件,挺欣慰的:毕竟,这有利于解决由于职务的瓶颈导致福利待遇长期停留在低位的问题。
但欣慰之余,我也生出几丝隐忧:该制度的推行,从整体社会效益上讲,从促进基层待遇公平方面讲,都是大好事;但对基层公务员个体而言,却并不必然意味着工资待遇及心理感觉的必然公平。
县以下基层公务员实施职务与职级并行,或有两个明显的涵义,一是政策推行目的是激励基层勤勉公务员更努力地工作;二是必须切实公正地选出具有勤勉特质的公务员予以激励,才能起到涨士气的作用。
但现实中的公务员考核里,虽然有关方面出台了公务员考核要尽量体现公平和真实的意见和制度,可实际执行效果并不理想,很大程度上陷入了“你好我好大家好”的怪圈中,不论勤勉与否,不论工作成绩大小,只要不是有明显问题,考核都会是“称职”以上等次。而这种人情与关系绑架下的考核,很可能让勤勉的公务员和混日子的都能实现晋级涨工资,但却很难体现出能力、绩效的差异来;而这种“干好干坏一个样”的隐性不公,到头来,还会与实施基层公务员职务与职级并行的初衷相悖。
说起来,职务与职级并行,是《公务员法》赋予包括基层在内的一项基本制度,但它落不到实处也有好一阵子了。原因有多方面的:比如基层财力有限,比如职务与待遇挂钩的惯性认知——某种程度上,官员待遇也是种显示地位、刷优越感的方式。而到头来,它也使得一些地方领导手中的权力收益最大化,如把副主任科员、主任科员等当“官”卖,通过这些“官”职的私相授受寻租。而一些基层公务员为达到待遇晋升,不得不千军万马争“官”干,加剧了基层官场的腐败和跑官要官等现象。这不仅是某些“局中人”的亲身感受,很多民众对此也不乏认识。
给基层公务员一个增加福利待遇的通道,确实鼓舞人心,但出台职务与职级并行制度只是简单的第一步,关键是怎么啃“硬骨头”,让改革的韧性掰得赢固化利益圈的手腕,破除那些执行中的隐性不公。
任务并行编程模型研究与进展 篇3
采用单芯片多处理器的多核处理器系统设计模式, 这样的处理器核工作相互独立, 各个核的硬件都单独存在一个环境, 这样就能一同执行很多条指令。从高速缓存这个方面的设计来说, 每个核的缓存设计都是单独存在的, 各个核的最后一集缓存是单独的片上缓存的。基于多核处理器的系统特性, 在多核环境下并行程序的影响因素主要有存储带宽、负载均衡和片上缓存一致性。在多核处理器的系统运行过程中, 每个核所共享的是缓存的最后一级, 但是同一时间多个线程位于不同的核上的对不同的数据集进行操作, 这将会使最后一级的缓存与主缓存之间频繁地进行数据传送。
片上缓存一致性。多核处理器系统中的每个芯片的位置在同一个存储备空间的数据。负载均衡。程序性能是每个核的负载均衡影响的重要因素之一, 其中如果有的核上正在进行计算的同一时间其它的核在空置等待的问题发生, 这样就是不均衡的负载, 多核资源负载的利用率没有达到要求。怎样减少存储带宽上有限的资源利用。对于很多相同的核在一个大的数据上进行操作的问题, 如果数据集容量的最后一级共享缓存超过大小, 但是因为不同核的操作数据不同, 就会在主存和高速缓存之间频繁的数据传送, 那些不需要传送的数据可以使用cache块技术减少。
现在设计的多核处理器并行编辑模型是一种基于任务密取的把任务作为处理对象的并行程序库, 主要包含了单任务数据并行和多任务并行、原子操作类、cache行对齐的内存管理、栅栏机制的一些基本的功能特性。多核处理器提供了一种快捷便利高效的在平台下开发并行程序的接口。同时如果想解决更多困难, 多核处理器并行编程模型所提供单任务数据并行和多任务数据并行的两种并行处理的方式。可以将单任务数据并行和多任务数据并行分为一个任务操作的一个大数据平均分配到多个核上去操作, 然后再合并所有的核上计算所得到的结果。在多核处理器的环境中, 片上缓存的一致性有的时候会严重影响并行程序的操作效果, 所以一个高性能多核并行程序的重要前提是能有效的开发管理和分配内存。
2异构并行系统的多任务流编程模型
伴随着CPU在通用计算机领域的快速进步与不断发展, 很多的研究机构和组织都开展了针对GPU异构并行系统的编程的研究与探索, 为了开发出性能更加优化效果更加高效的并行系统的编程, 将高效语言程序自动转化成CUDA程序。异构并行编程模型依靠编程接口及编译和运行时系统解决技术调整, 其主要任务要保证任务的映射, 就是任务具体哪个设备或者计算单元上执行和以哪种顺序执行。更要对任务的数据分布和通信、划分以及同步机制进行全面系统的优化升级。建立单一的GPU上下文以降低开销, 同时要实现任务流内消息的通信传递和任务数据流内的数据共享通信, 这样就可以提高数据通信的效率, 并减少开发的困难。
多任务流模型中的数据通信包括并行任务间的通信和单个任务间的通信两个方面。但因为GPU异构并行系统具有分布式的存储信息和共享存储信息的特性, 并行任务之间使用的消息传递的通信方法与传统的消息通信接口MPI相同, 这样可以更便捷的让用户使用和掌握, 并且对于开发应用也保持了良好的扩展性和有效的并行应用继承。对于单个的任务流内提供数据共享的通信机制, 降低不同存储给编程开发带来的复杂性, 减轻应用开发负担。基于程序对于共享空间的读写访问属性, 按照不同的读写操作进行状态转换和数据更新。4种访问操作下的状态转换, 保持读写的一致性更新状态的转换, 其有3种共享空间存在状态。这种类型的访问更新数据操作可以保障程序访问的数据为最新的数据。
建立一种多任务流编程模型, 这种设计实现了半场运行时支持系统原型GMMP, 利用多级硬件并行性特点实现了应用程序的数据级并行和任务级并行, 模型采用了任务内数据共享与任务之间消息传递的通信方式, 如此不但可以简便开发移植的过程, 而且还能降低程序的开放困难。
3结束语
近些年来, 任务并行编辑模型是多芯片出现后为了简化并行编程而开发研究出来的一种新型的并行编程模型。并行性的问题是运行时系统进行负载平衡的任务窃取调度。虽然现在任务窃取调度在共享存储多核芯片的基础上, 采用移动计算机而不移动数据的方式。但经过很多年的发展进步, 任务并行机制已经被很多的并行语言所支持, 现在所有的任务并行机制已经可以更加广阔的表述的出并行性。而且这样的管理机制支持很多种的数据属性和任务调度技术的专业研究。虽然这几年来, 软件和硬件的各种反面都发生了翻天覆地的变化, 任务并行编程的研究与更新也在稳定的发展。
参考文献
[1]田跃欣.基于SMP集群系统的并行编程模式研究[J].福建电脑, 2008 (02) .
[2]王船海, 曾贤敏.Windows环境下河网水流多线程并行计算[J].河海大学学报 (自然科学版) , 2008 (01) .
[3]彭林, 谢伦国, 张小强.事务存储系统[J].计算机研究与发展, 2009 (08) .
[4]李艳, 柳青, 彭世宇.面向构件的并行程序设计[J].计算机与信息技术, 2005 (05) .
实践与活动并行 篇4
今天我们的团队在晚上组织了娱乐活动,活动地点是村里的小广场。在活动之前,我们做足了准备,写了详细的活动策划,进行了活动之前的道具准备。
对于本晚的活动,缺点是参加人员不多,可能因为之前宣传力度不够,知道消息的人太少,参加的多是小孩子,大叔大妈们因为不太理解,参与积极性不高,活动开始前,大家多是在广场周围坐着,并不走到场地中间来参加活动,我们的`队长海宾充分调动大家的积极兴,向村民们解释我们的来意。我们也走到场边劝说大妈们参加活动。
本来是亲子联欢活动,被迫的改成了小朋友的单人游戏,不过这正表现了我们的随机应变能力,不是吗?活动就这样开始了,本晚活动由两个游戏组成,传递钥匙环和熟读绕口令。场上有劲爆的音乐,活泼的参赛选手,热情的队员。每个环节我们都角逐出一二三等奖,给获胜者颁发奖品,有飞行棋、水杯、本子、糖果。本着只要你参与,就会有奖励的原则。最终活动圆满成功,也多谢村民们的配合。
并行模型 篇5
混沌是存在于非线性系统中的一种较为普遍的现象.混沌运动宏观上无序无律, 具有内在的随机性、非周期性和局部不稳定性;微观上有序有律, 并不是完全的随机运动, 具有无穷嵌套的自相似几何结构、存在普适性规律, 并不是杂乱无章的.利用混沌运动的这些性质进行优化搜索能较好地避免粒子群算法陷入局部解.目前利用混沌优化的粒子群算法大都采用Logistic映射, 然而Logistic映射所产生的序列极不均匀, 因此较大地浪费了计算时间, 使得算法收敛速度慢.并行计算是实现高性能、高可用计算机的主要途径.采用并行方式, 将粒子群的追踪过程在各个相对独立的进程内完成, 能较大提高粒子收敛速度, 同时能保证各个种群的多样性, 不易陷入局部解.
1. BSP并行计算模型
BSP模型 (Bulk Synchroneous Parallel) 是由Valiant提出的“块”同步模型, 是一种分布存储的MIMD计算模型, 支持消息传递系统, 块内异步并行, 块间显式同步.
在BSP模型中, 计算由一系列全局同步分开的长度至少为L的超步组成.在每个超步中, 每个处理器均执行局部计算, 并通过网络接收和发送至多h条消息 (称为h-relation) , 然后作同步检查, 以确定该超步是否完成.在每个超步开始时, 处理器仅对已经有效的局部数据进行操作, 若数据未准备好, 则推迟到下一个超步开始时再进行计算.BSP模型主要由3个参数表示, 分别是:p为处理单元的数目;g为整个系统的计算能力与网络传送消息的通信能力的比值;L为路障同步时间.
2. 粒子群算法
2.1 标准粒子群算法
PSO初始化为一群随机粒子 (随机解) , 速度vi= (vi1, vi2, …, vid) 决定粒子在搜索空间单位迭代次数的位移, 其中第i个粒子在d维解空间的位置表示为xi= (xi1, xi2, …, xid) , 然后通过迭代找到最优解.在每一次迭代中, 粒子通过动态跟踪两个“极值”来更新其速度和位置, 第一个就是粒子本身所找到的最优解, 这个解叫做个体极值pi= (pi1, pi2, …, pid) , 另一个极值是整个种群目前找到的最优解, 这个极值是全局极值pg= (pi1, pi2, …, pid) .另外也可以不用整个种群而只是用其中一部分作为粒子的邻居, 那么在所有邻居中的极值就是局部极值.粒子在找到上述两个极值后, 就根据如下公式来更新其速度和位置:
其中c1, c2称为学习因子, 通常取c1=c2=2, rand1, rand2是均匀分布在0和1之间的随机函数, w是加权系数, 取值在0.1至0.9之间.
2.2 混沌粒子群算法
假定粒子群优化算法目前在迭代的第n步, 现在算法中有如上的三个参数x1=w, x2=c1=c2待优化, 利用混沌搜寻来得到这三个参数的合适的值, 然后再更新粒子的速度和位置, 进入到下一步迭代.假定群体的第 (n-1) 步迭代中所有的结果已知, 现在利用两个混沌变量独立运行m步, 得到m组参数的值, 分别计算这m组参数值对应的群体更新后的速度和位置变量, 产生新的第n步的粒子群.为了评估这m组参数的优劣, 需要计算每组参数对应的粒子群优化得到的当前全局最优解, 以此作为每组参数的适应值函数, 取其中最优的解对应的参数作为第n步的参数值, 然后开始第 (n+1) 步迭代, 所有步骤和上面一样.在计算的过程中, 如果有一组参数得到的最优适应值在可接受的范围内, 则可以立即结束程序.
3. BSP混沌粒子群算法
步骤1:初始化整个种群.对每个粒子的随机位置和速度进行初始设定.每个粒子由计算得到初始的适应值和初始的个体最好位置pi及初始的群体最好位置pg.
步骤2:将整个种群分为几个子群体, 各个子群体用混沌算子优化粒子群.
(1) 设定初始参数xr0, r=1, 2, 并对其实施变换
(2) 利用混沌搜索得到M个tr, 反变换为xr.
(3) 计算每组参数对应的适应值, 取其中最优的一组作为当前步的参数.
步骤3各个子群体相互交换信息, 用新的参数不断更新全局最好位置.若某个子群体中粒子的适应值比全局最好位置pg的适应值好, 则它作为当前的全局最好位置pg.其他子群体依据该pg值继续进化, 直到进化最慢的子群体更新完全局最好位置pg.
步骤4进行粒子群优化, 更新粒子群速度和位置.若未达到结束条件, 则返回步骤2.2, 各子群体继续循环迭代, 直到满足条件.
4. 仿真实验
为了测试算法的有效性, 选用了标准PSO与本文算法BSPCPSO进行比较实验, 测试函数为Rosenbrock函数和Rastrigrin函数, 算法的初始参数为:w=0.9, 学习因子c1=c2=1.1, 种群规模90, 每个子群体有30个粒子.对每种测试函数连续进行30次实验, 实验环境VC++6.0.表2为函数寻优的实验结果.
一种并行高速读取的存储器模型 篇6
在现有计算机系统中,主存储器一般采用DRAM(动态随机存储器)制造,其容量提高较快,但读取速度和CPU相比,仍存在着数量级的差距[1,2,3,4,5]。为解决高速CPU与低速内存之间的速度差异,改善数据读取的“瓶颈”问题,提高整机系统性能,本文提出一种并行高速读取的存储器模型,以实现高速读取成组连续数据。
1 存储器基本模型
主要由以下几个部分组成。
如图1所示,对DRAM阵列的访问有两组相互对称并各自独立的读写控制电路(图中L表示左端口信号,R表示右端口信号)。
●DRAM阵列:用于暂存数据,其容量为n×m×k位,即n行,每行m列,每列包含k位。
●行地址和刷新控制:提供行地址选通信号RAS和DRAM阵列刷新信号Ref。
●行地址锁存器:在行地址和刷新控制信号有效时保存地址总线传送过来的地址。
●最后读出行地址锁存器:保存地址总线上一周期传送过来的行地址。
●10位比较器:当新的地址传送过来后,和最后读出行地址锁存器中的地址进行比较,判断是否相同。
●列地址锁存器:在列选通信号CAS有效时接收列地址。
●m×位SRAM(cache):小容量高速缓冲存储器cache,用于接收DRAM中被选中的某一行。
●I/O控制和数据锁存器:向数据总线D0~Dk-1输出数据,或者接收来自数据总线D0~Dk-1的数据。
●读出放大和列写选择:当DRAM阵列中某一行被选中,该行m×k位数据被选通到该读出放大单元,每个逻辑电平被鉴别而且锁存和重写,并被送到SRAM (cache)阵列。
●行译码器:接收行地址并进行译码,对n×m×k位DRAM阵列进行行选择。
●列译码器:接收列地址并进行译码,对m×k位SRAM阵列选择某一位组(含k位数据)。
●判别逻辑:判断左右地址是否冲突,若冲突则决定首先执行左地址还是右地址操作。
2 基本工作原理
2.1 猝发式读取
猝发式读取是指中央处理器访问存储器时,提供不变的行地址和连续变化的列地址,存储器相应位组将连续读出。在传统的EDRAM芯片中,由于集成了动态存储器DRAM和静态存储器SRAM,通过猝发式方式有助于高速读取数据[6,7,8,9,10]。
在本模型中,由于在DRAM阵列存储器的基础上集成了两个SRAM实现的小容量高速缓冲存储器(cache),从而使RAM的性能得到了显著提高。当进行第一次读操作时,行选通RAS信号有效,地址A0~Ai(i≥log2n)被同时送到行地址译码器和最后读出行地址锁存器,行译码器接收行地址A0~Ai,完成译码操作,对DRAM阵列进行行选择,选中其中某行的m×k位并经内部总线送至读出放大和列写选择部件,经由该部件将数据送至m×k位SRAM存储器。接着列选通信号CAS有效,地址A0~Aj(j=log2m-1)接收列地址并将其送到列地址译码器,经译码后选中SRAM中某k位数据,经由D0~Dk-1送至数据总线上。
当进行第二次读操作时,新的行地址A0~Ai与最后读出行地址锁存器的内容在(i+1)位比较器中进行比较。若比较相符则SRAM命中,由输入的列地址从SRAM中选择某一位组(含k位数据)送出至数据总线。若比较不相符,则需要驱动DRAM阵列,更新SRAM和最后读出行地址锁存器的内容。可见,以SRAM保存一行内容的读取方法,有利于进行成组传送,充分体现了猝发式读取的特点。
2.2 双端口高速存储原理
双端口存储器中由于使用了两组相互独立的读写控制线路,可以进行并行的独立操作,同样也能够使存储器高速工作[11]。当左地址(A0~Ai)L≠右地址(A0~Ai)R时,不会出现冲突;当左地址(A0~Ai)L=右地址(A0~Ai)R时,则出现冲突。对此设置了BUSY标志,判别逻辑电路决定对哪个端口先进行读写控制,而对另一个被延迟的端口设置BUSY有效标志,直到优先端口完成读写操作后,才将被延迟端口的BUSY标志复位。
2.3 双端口猝发式存储器成组连续数据传送算法
使用该模型读取DRAM所有数据时,假设左端口地址访问DRAM偶数行地址,右端口地址访问DRAM奇数行地址,DRAM同时将相邻2行m×k位数据送到左SRAM和右SRAM进行吐出,基本算法如下:
步骤1:DRAM接收左右输入行地址并同时选中第0、1行m×k位数据分别输出至左右SRAM;
步骤2:左右SRAM同时接收DRAM送来的第0、1行数据后,连续吐出k位数据,共操作m次;
步骤3:步骤2操作的同时,DRAM开始将第2、3行m×k位数据送到左右SRAM以备接收,SRAM完成m次数据吐出后,立即接收第2、3行数据并开始连续吐出k位数据。
以下操作依次类推直到完成n行数据读取。
3 定量分析
3.1 流水线时空分析图
存储器工作任务为DRAM操作和SRAM操作,D:从DRAM读取相邻两行m×k位数据并输出;S:SRAM接收该行并吐出k位数据(SL、SR表示左右SRAM)。图2为流水线时空图(该图表示读取4行m×k位数据,纵坐标U表示执行任务,横坐标T表示时间)。
由图2看出,SRAM仅在DRAM读取第0、1行数据时等待,其余时间内始终处于满载的工作状态,左右端口并行吐出数据,充分体现出双端口猝发式读取的优点。
3.2 成组连续数据读取时间估算
现忽略读出放大和列写选择电路以及I/O控制和数据锁存器时间,分别估算传统DRAM、一般猝发式DRAM、双端口存储器和双端口并行猝发式存储器读取DRAM中的n×m×k位数据(n>=2)所需时间,设DRAM完成一次读取时间为TD,其行读取时间为TDL(TD>TDL),SRAM完成一次读取时间为TS,且有(1)TD>TS;(2)SRAM完成m次数据吐出时间大于TD。传统DRAM完成读取时间估算:
一般猝发式DRAM完成读取时间估算:
一般双端口存储器完成读取时间估算(不存在地址冲突情况下):
双端口猝发式存储器读取时间估算:
4 仿真实验
为方便观测比较,在实验中使用Visual Basic 6.0开发仿真程序,选择二进制文件作为DRAM并存储n行512×2位数据(数据可用0或1的任意组合表示),比较上述四种存储器的数据读取时间。设置三个定时器工作,DRAM定时器Timer1间隔时间interval为TD=2(ms),定时器Timer2间隔时间interval为TDL=1(ms),SRAM定时器interval为TS=1(ms),其它逻辑部件工作时间忽略。编写时间统计函数f_totaltime (Dim index As Integer),统计各类存储器工作时间,index取值范围1~4,分别表示四类存储器。现以读取n行512×2位数据(n依次取2、10、100、500、1000)为例,计算所需时间如表1所示。
由表可看出,随着行数n的提高,双端口猝发式存储器读取总时间始终最少,速度保持最快。
5 结论
通过结合一般猝发式存储器和双端口存储器的特点,提出该模型并对其功能和成组连续数据读取时间进行了分析,最后通过仿真实验验证了其正确性和有效性,为解决高速CPU与低速内存之间的速度差异问题提供了一种较好的方法,所形成的体系结构适用于高速存取数据的场合。
参考文献
[1]魏素英,彭洪,林正浩.高速缓冲存储器的设计与实现[J].现代电子技术,2005(18):86-88.
[2]白中英.计算机组成原理[M].科学出版社,2003:80-105.
[3]姚燕南,薛钧义.微型计算机原理[M].西安电子科技大学出版社,2002:45-70.
[4]Mano M M.Computer System Architecture,3rd ed.Prentice Hall,清华大学出版社,1997.
[5]Stallings W.Computer Organization and Architecture:designing for per- formance,4th ed.Prentice Hall,清华大学出版社,1997.
[6]Rivers J A,Tyson G S,et al.On high-bandwidth data cache design for multi-issue processors.The 30th Symposium on Mi.crnarchitecture,Tri- angle Park,North Carolina,1997.
[7]Alexander T,Kedem G.Distributed prefetch-huffer/cache design for high performance memory systems.In Proc.of the 2nd Int'l Symposium on High-Performance Computer Architecture.Piscataway:IEEE Press, 1996:254-263.
[8]Rixner S,Dally W J,Kapasi U J,Mattson P,Owens J D.Memory access scheduling.In:Proc.of the 27th Annual Int'l Symposium.On Comput- er Architecture.IEEE/ACM Press,2000:128-138.
[9]Iyer S,Kompella R R,McKeown N.Analysis of a memory architecture for fast packet buffers.In:IEEE High Performance Switching and Rou- ting.2001:368-373.
[10]Wang P,Jin D P,Zeng L G.Analysis of a tri-stage memory array for high-speed packet buffers.In:Proc.of the SPIE,Vol.5625:873-883.
并行模型 篇7
1 并行程序的计算时间设计
在计算机数据通信的并行程序设计中, 确定并行计算程序的计算时间是非常关键的。这是因为在并行程序的运行中, 不同的处理器之间需要实现数据通信的同步进行, 以保证数据通信的实时性。而要达到这种同步传输要求, 就必须要正确精准的计算并行程序的计算时间。通常认为并行程序的计算时间是由同步时间、通信时间和聚合操作时间组成。基于本文主要探讨的是计算机并行程序的执行模型, 因而在此重点分析并行操作时间中的同步时间和聚合操作时间。
同步时间是不同计算机进程间的同步计算时间, 在实现点对点的通信过程中, n个节点要实现同步要经过logn步通信, 在第k步通信中, 进程i发送给消息给进程 (i+2k) %n, 并接收从进程 (i-2k+n) %n发来的消息。其同步操作的性能是由点对点通信的性能和所使用的算法以及通信拓扑结构共同决定的。而聚合时间也是指点对点通信的实现时间。这些聚合操作的性能也是由点对点通信的性能和其算法所使用的通信拓扑结构来决定的。因而可以说, 同步时间和聚合操作时间都可以认为是点对点通信时间, 因此在并行程序的执行模型设计中, 应当重点优化点对点通信时间的设计。
2 并行计算程序的数据通信过程
在并行程序的执行模块设计中, 我们可以将数据通信过程中的所有环节分为三个阶段, 即数据准备阶段、通信准备阶段和数据传输阶段。其各自的设计内容分别如下所示:
2.1 数据准备阶段
该阶段所包含的主要执行环节有数据筛选、数据压缩、发送空间或接收空间的申请、数据在内存间的拷贝过程等几个环节。在并行计算程序的数据通信优化设计中, 数据筛选环节可以通过对所需要传输的数据库进行筛选, 去掉冗余部分, 再巧妙设计数据传输顺序来实现数据通信的优化效果。数据压缩环节中, 需要重点对压缩速度与压缩强度进行优化设计, 以达到提高数据通信效率的目的。发送空间或接收空间的申请环节中, 可以通过减少系统内存申请函数的调用频率来实现数据通信的优化。而数据内存间的拷贝环节中, 则可以通过尽量减少拷贝次数来避免出现重复作业, 从而提高数据通信系统的运行速度。
2.2 通信准备阶段
通信准备过程包含了套接字的初始化以及设置过程, 通信信道以及通信拓扑的建立过程, 通信信道以及通信拓扑的管理等。
程序在进行通信之前需要对通信信道进行初始化, 这在不同的网络设备/网络协议下其过程和操作也不一样, 例如在以太网TCP/IP环境下, 就需要首先建立套接字, 并设置套接字的各种属性 (发送/接收的buffe:大小, 是否禁用Nagle算法以及是否非阻塞模式等) 。另外上文已经提到, MPI程序中经过TCP三路握手之后并不代表这个信道已经建立好了, 因为在MPI程序中是使用进程编号值而不是IP地址或主机名来标示每个进程, 因此监听在端口上的接收方只知道对方的IP地址或主机名, 并不知道对方的进程编号, 因此通信发起的一方还需要再发送其进程编号给接收方。
此外, 通信信道的管理也是相当重要的一个方面, 因为程序在运行时, 其通信拓扑会随着其通信操作的不同而变化, 因此每个进程都有可能会与其它任意结点进行直接通信, 在大规模并行系统上每个结点潜在的通信对象就会高达数万甚至数十万, 因此如何高效的管理这些结点也是并行计算的研究内容之一。
2.3 数据传输阶段
数据传输过程的性能牵涉到系统的I/O多路复用的效率, readv/writev函数的效率, 网卡驱动/内核的效率, 网络协议, 路由协议以及网络设备硬件等性能。因为牵涉到许多软件、硬件以及软硬件之间的交互, 因此整个数据传输过程是极其复杂和难以预测的。
I/O多路复用的效率严重影响着整个传输的效率, 在同时管理多个网络连接的时候, I/0多路复用很大程度上决定着网络连接的延迟, MPICH2实现中的连接状态机能高效运行的前提便是其poll函数能快速的响应各套接字的状态变化。在不同的平台上, 系统的I/O多路复用函数也不一样, 当然其效率也各有差别, 选择一个高效的I/0多路复用函数也是MPI实现的前提保障, 例如Open MPI中, 使用了epoll而不是poll来提高管理大量套接字的响应时间, 是考虑了在结点数目巨大, 每个结点需要管理很多套接字时, epoll的效率要远远高于poll的效率。
另外, ready/writev函数的效率以及内核的效率也毋庸置疑的影响着传输的效率。进程在内核态与用户态之间过度的交替必然导致传输效率的低下, 网卡的驱动程序也是影响着整个传输的重要因素。需要一些策略来进行拼包处理, 否则必然导致整个机器性能的下降。这些策略以及实现都是由网卡驱动和系统内核来实现的, 这也是影响数据传输性能的重要原因。
3 结论
总之, 计算机并行程序的数据通信系统本身就是一个具有较高复杂性的系统, 在其数据通信的优化过程中, 首先需要注重对其并行时间的合理设计和计算, 以保证点与点之间的通信效率。另外还要分别从数据准备阶段、通信准备阶段和数据传输阶段等整个数据通信的全过程中的每个环节出发, 积极找出提高数据通信效率和可靠性的优化方法, 以此来综合提升数据通信优化的并行程序执行效果。当然, 面向数据通信的并行程序执行模型设计优化过程中还有很多问题需要解决, 本文只是简单研究了其中的一部分问题, 还有很多实质性问题需要在具体案例中进行针对性分析, 因此数据通信的优化问题还需要我们继续研究和探索。
参考文献
[1]吕海.多核处理器芯片计算平台中并行程序性能优化的研究[D].北京:北京工业大学, 2012.
[2]胡悦.并行计算时间与存储空间关系研究[D].上海:上海大学, 2011.
并行模型 篇8
随着社会经济的不断发展,电力负荷不断增加,远方电源供电比重增大,以致在负荷高峰期传输容量有可能接近极限,增加了出现电压崩溃并发展成为全网性事故的可能性。因此,以维持电压合理水平,降低网络损耗和确保系统电压稳定的多目标无功优化已成为自动电压控制系统的发展趋势。迄今,国内外学者已在这方面取得了大量有价值的研究成果[1,2,3,4,5,6,7,8,9,10,11,12,13]。文献[1]提出了一种同时考虑系统动态、静态稳定特性的协同控制方法,对静态电压的评估采用特征值法;文献[2-5]用不同的多目标优化算法求解综合无功优化问题,并且都采用常规收敛潮流雅可比矩阵的最小奇异值(MSV)评估系统的静态电压稳定情况;文献[6]利用专家系统在综合无功优化中实现提升系统电压稳定裕度的目的;文献[7-8]则应用粒子群算法求解综合无功优化问题;文献[6-8]评估系统电压稳定采用的都是L指标。文献[1-8]的综合无功优化都可归入采用状态指标评估系统的电压稳定程度,具有实现简便,计算快速的优点,但状态指标仅能反映系统当前状态的稳定水平,却无法反映实际电力系统在运行点改变后,系统是否还能保持稳定;文献[9-10]的无功优化模型计算出系统在某种负荷增长模式下的功率裕度,以此为基础进行无功优化或规划,简化了计算,但缺乏应对系统变化的灵活性,所采用的负荷增长模式可能与实际情况相差较大,同时计算效率不够高,难以实行实时控制;文献[11-13]分层处理优化网损和提高稳定裕度目标,首先以降低网损为目标得到优化解集,再采用连续潮流法或优化算法评估所得到解的电压稳定裕度,选取其中稳定裕度最大的解作为最终解,此方法具有工程上易于实现的优点,但根据多目标寻优理论可知,其解实际上是在前一层所得解集中的局部寻优,很可能不是多目标优化的Pareto最优解,另外计算效率也有待提高。
本文提出根据系统短时负荷预测得到系统可能的负荷变化趋势,由此计算系统负荷稳定裕度作为综合无功优化的电压稳定评估指标;同时,针对由于负荷裕度的引入导致计算耗时过多,提出的基于ε-支配域的并行算法,具有实现简便,便于扩展的特点。
1 电压稳定指标分析
目前综合无功优化采用的状态指标主要包括:常规收敛潮流雅可比矩阵的最小奇异值(MSV)和L指标。用Kessel提出的L指标[14]和A.Tiranuchit等人提出的最小奇异值指标[15]评估系统静态电压稳定水平时,都只需用到系统当前运行状态的信息,计算量小,应用方便,但线性性不理想,对电压崩溃点的预测精度也不够精确。图1显示了分别用L指标,最小奇异值法求解IEEE14、IEEE30节点系统电压稳定的情况,计算采用恒功率负荷模型,负荷增长方式采用恒功率因数增长。由图1可见,L指标和MSV线性性都不太理想,当系统负荷较轻时,计算结果变化不大,但靠近临界点时值却迅速变化。其中,MSV指标靠近临界点处,值出现“跃变”,这是因为MSV对矩阵的维数敏感,当发电机达到无功出力极限时,PV节点转化为PQ节点,相应的潮流方程的雅可比矩阵将会增加一行和一列。另一方面,虽然L指标的稳定性要优于MSV指标,但由L指标的定义可以推导出:当以L指标评估电压稳定水平求取多目标优化问题的Pareto解集时,所得到的解会使全网电压普遍靠近上限运行(详细推导参见附录)。这样,当希望系统稳定裕度尽量大,同时又希望电网电压维持在适中的水平时,不适合应用L指标。
考虑到实际系统负荷是不断变化的,因此希望无功优化用到的电压稳定性指标应具有能够表示系统负荷的变化即运行点变化的能力,相对于上述状态指标,功率裕度指标不仅由于其线性性好,能提供一种直观的表征系统电压崩溃程度的度量,同时还能够跟踪负荷变化给出系统的电压稳定裕度,因此受到广泛的重视。本文采用文献[16]的负荷裕度指标评估系统的电压稳定程度。根据文献[16],无论是鞍结分岔还是极限诱导分岔,静态电压稳定裕度都可归结为以下的优化问题:
式中:λ∈R1为反应负荷水平的参数;yd∈Rm为负荷变化方向,m为等式约束数目;f(x,λ)=[f1(x),…,fm(x)]T为扩展潮流方程;x∈Rn为状态参数;h(x)为常规潮流方程。G(x)=[G1(x),…,Gr(x)]T为系统不等式约束,包括电压约束和发电机节点有功、无功约束,共r个。(l,u)∈Rr为松弛变量。式(1)中设λ=0,对应于初始运行点,显然式(1)的解λ反映系统的稳定裕度的大小,也对应着分岔。由式(1)的KKT条件和采用文献[17]的数据格式,式(1)可用式(2)迭代求解:
式中
其中:▽2hi(x)与▽2Gi(x)为hi(x)与Gi(x)的Hessian矩阵;(L,U,Z,W)∈Rr×r,为对角元素为(l,u,z,w)的对角阵;E=[1…1]T∈Rr。详细的求解过程参见文献[16,17],求出崩溃点后可用以下判据来确定系统的分岔类型:1)如果系统中所有发电机在分岔处都不满足式(3),则为鞍结分岔;2)如果系统中至少有1台发电机在分岔处满足式(3),则为极限诱导分岔。式(3)中,Qlim,i,Vs,i分别为发电机节点i的无功极限和端电压设定值。
2 综合无功优化模型设计
2.1 ε-支配域并行计算算法
由于负荷裕度的计算量相对于状态指标而言大大增加,因此还鲜有研究将其直接用作多目标优化的适应度评估函数。本文将基于ε-支配域的eMOEA算法[2,18]改进为并行算法,来解决引入负荷裕度计算的时间瓶颈问题。eMOEA算法能在大幅提高多目标优化速度的同时得到良好分布的Pareto优化结果。其思想是:在寻优空间中对两个解进行支配关系比较时,当两个解的第i维目标之差小于εi时,认为这两个解对目标i而言没有差异。如图2,假设有一二维目标矢量a(f1,f2),由ε支配域思想aε-支配于空间AUB,而由普通支配域定义,矢量a支配于空间B。显然,ε-支配域目标空间的复杂度要低于普通支配域的目标空间复杂度。从物理意义上解释,εi反映了对目标函数fi的“容忍度”。
eMOEA算法的比较复杂度为O(2MN)[2],但当优化目标或约束条件本身计算很复杂时,算法整体计算复杂度也将增加,由于eMOEA算法采用“串行”计算模式,其计算复杂度将是每个目标适应度计算的叠加。因此,将算法适应度计算改为“并行”计算模式,则该部分的计算复杂度将仅等于适应度计算中复杂度最大的一项。针对本文应用,实现并行计算需解决几个关键问题:1)尽量简化共享数据规模,简少数据交互负担;2)尽量均衡分配各并行计算线程计算量;3)保证各并行计算线程数据和结果时间上同步。
当负荷裕度计算采用直角坐标扩展潮流方程时,▽2hi(x)与▽2Gi(x)都是仅与电网结构有关的高度稀疏的常数对称矩阵,因此可采用稀疏存储技术保存上三角阵的元素,不用每次迭代重新计算。这样,负荷裕度目标的计算量得到减少,可以用两个线程分别计算负荷裕度和网损。线程间只共享母线、线路和发电机等系统参数,数据交互由全局变量完成,只有两个线程都执行完成时主程序才继续执行,避免了大量的数据通讯,保证了线程数据和结果的同步。并行计算流程图如图3。
并行计算中,加速比和效率是对并行方案和程序进行评价的重要指标。加速比定义为:单个节点上的运行时间和P个节点上运行时间的比;并行效率的定义为:加速比和计算节点个数之比[19]。因此可推得本文算法并行效率的近似公式(4)。其中,R是与数据交互和计算速度有关的比例常数;p是CPU处理器核数;n为系统规模;s是参与计算矩阵的稀疏度。因此,在CPU核数一定时,系统规模越大,并行效率越高。
并行eMOEA算法流程为:
1)载入电网参数及eMOEA算法参数;
2)生成初始种群P,并行计算每个个体的目标函数值;并将P的ε-非支配集作为初始存档种群E;
3)从P中随机选出两个个体(优化解),将其中占支配地位的个体与从E中随机选择的个体进行交叉,生成子代个体c,再并行计算c的目标函数值;
4)将c与P中的每个个体进行比较,如果c支配于任一个体,则用c替换该个体,否则不接收c;同时,将c与E中的每个个体进行比较,如果cε-支配于任一个体,则用c替换该个体,否则不接收c;
5)如果未达到迭代次数,则到步骤2),否则输出E。
2.2 模型数学表达式
本文综合无功优化模型如式(5)。
式中:Ploss为系统有功网损;Fv为节点电压偏差指标,数学表达式如式(6);λ为负荷裕度。其中yd为式(7)所示的负荷变化矢量,反映了系统负荷在t时刻可能的变化趋势,Pf(t+Δt)为系统在t+Δt时刻的负荷矢量,其值可由短时负荷估计等方式得到,P(t)为当前时刻负荷实际值,为了保证算法的收敛性,Δt不宜取太大;h(x)为潮流方程约束,f(x,λ)为扩展潮流方程约束,g(x)为不等式约束,包括变压器档位限制,节点电压幅值限制,发电机无功出力限制,补偿电容器无功容量以及发电机端电压限制,详细表述同文献[2]。
其中,
3 算例分析
由于本文方法求解的是Pareto近似解集,单独比较单个解的值不能反映所用方法对优化结果的影响,所以设计以下四种算法(表1),其中方法A为本文所采用方法,并比较其Pareto解集各目标的平均值和标准方差,优化目标重要程度关系根据“安全第一、经济第二”的原则依次为:1)负荷裕度;2)电压偏差;3)网损。
在IEEE14,30,118节点系统上进行计算,系统各节点负荷特性分为四类:①行政办公、商业金融、文化娱乐、体育用地;②医疗卫生、教育科研;③居住用地;④工业;典型曲线如图4所示。本文中在每整点算法计算一次,实际应用中可根据需要灵活设定计算间隔,每次计算采用超短期或短期负荷预测的结果作为下一时刻负荷量。并行eMOEA算法各参数取值同文献[2],εi=0.001(i=1,2,3),进化代数2 000,参与比较的算法采用的随机数Rn列于表格左上角。所有算法用VC++6.0环境编写,所用计算机CPU为双核2.2 GHz,3 G内存。表2列出了IEEE30节点系统用方法A,C,D在11点的优化结果,为了便于比较,每个解都计算了L指标。每列中第一项数据为平均值,第二项为标准差,黑体字标出的是各项指标的最优值。
由表2可见,电压稳定裕度和电压偏差量两项指标使用方法A所得结果都是最好的;方法C所得到的网损最小但电压偏差度最差,并且解集节点电压普遍靠电压上限,加大的设备的绝缘要求及老化程度。根据各目标的重要程度关系,方法A的优化结果综合性能更好,并且结合公式(3)可以判定系统可能的分岔是鞍结分岔。表3,4是1 1点时IEEE14,1 18节点系统的计算结果,方法A的优化结果都要好于方法C、D,并且方法A对负荷裕度优化的同时,L指标也得到了优化,而方法C、D优化了L指标,却有可能降低系统的负荷裕度。24个时刻的计算结果表明,方法A都是优于另两种方法,因此可以认为负荷裕度指标更适合用于考虑电压稳定的综合无功优化Pareto解集的求取。
图5是A、B两种方法计算时间的比较。方法A与方法B相比在计算速度上的提升是明显的,前者计算时间分别为后者的85.5%,63.2%,47.2%,随着系统规模的增加,并行算法计算效率的提高也随之增大,这与公式(4)结果是相符的。
4 结论
(1)目前在多目标无功优化中广泛应用的电压稳定状态指标(最小奇异值和L指标),由于线性性不理想,难以准确估计崩溃点,Pareto寻优能力不强。特别是L指标得到的解会使全网电压普遍靠近上限运行。
(2)本文采用的考虑负荷变化影响的综合无功优化模型所得的结果既能考虑系统当前电压稳定性,又能反映实时负荷增长方式下系统的负荷裕度和可能崩溃类型。
并行模型 篇9
本文将对以上提到的三种并行编程模型进行研究,并对计算π的算法分别进行了三种编程模型的程序设计,最后用以多核处理器作为节点的曙光TC5000作为实验工具,对所设计的程序进行实现,并进行了性能比较。
1 MPI编程模型和OpenMP编程模型
在并行计算领域内,主要的并行编程模型有三类模型:数据并行、消息传递、共享变量。其中基于消息传递的MPI编程模型和基于共享变量的OpenMP编程模型是最为流行的并行编程模型。
1.1 MPI编程模型
消息传递界面MPI(Message Passing Interface)是一种消息传递接口,是目前国内外最主流的编程模型之一。并行语言MPI库可以被FORTRAN77、C、FORTRAN90、C++调用,MPI允许静态任务调度,显示并行提供了良好的性能和移植性,用MPI编写的程序可直接在多核集群上运行[1]。在集群系统中,集群的各节点之间可以采用MPI编程模型进行程序设计,每个节点都有自己的内存,可以对本地的指令和数据直接进行访问,各节点之间通过互联网络进行消息传递,这样设计具有很好的可移植性,完备的异步通信功能,较强的可扩展性等优点。
MPI模型存在一些不足,包括:程序的分解、开发和调试相对困难,而且通常要求对代码做大量的改动;通信会造成很大的开销,为了最小化延迟,通常需要大的代码粒度[2];细粒度的并行会引发大量的通信;动态负载平衡困难;并行化改进需要大量地修改原有的串行代码,调试难度比较大[3]。
1.2 OpenMP编程模型
OpenMP标准是一种共享存储体系结构上的并行编程模型,使用Fork-Join并行执行模型,程序开始于一个单独的主线程执行程序,该线程一直串行地执行,直到遇到第一个并行化制导语句后才开始并行执行。过程如下:(1)Fork:主线程创建一队并行的线程,然后并行域中的代码在不同的线程对中并行执行;(2)Join:当主线程在并行域中执行完之后,它们或被同步或中断,最后只有主线程在执行[4]。
OpenMP实现的是线程级的并行,并行化设计是通过向C,C++或Fortran源程序插入编译制导语句实现的[5],编程相对于MPI比较简单,且容易实现,同时OpenMP充分利用了共享存储体系结构的特点,避免了消息传递的巨大开销,允许运行时进行调度,并且提供了细粒度和粗粒度并行机制,然而不足之处是可扩展性差,共享内存使得可计算单元受限,当问题规模增大,很难扩充资源提高加速比[6]。
通过对两种模型的介绍,可以总结出两者明显的不同之处,如表1所示。
2 多核集群下的混合编程模型
2.1 多核集群的体系结构
随着多核技术的不断发展,使用以多核处理机作为节点的集群系统实现高性能计算已经成为一大发展趋势。这种多核集群系统具有层次结构,在节点间采用消息传递的分布式存储结构,节点内部采用共享存储模型。也就是说这种具有层次结构的集群体系结构既有松耦合的基于分布存储的网络传输的多计算机系统的体系结构特性又有紧耦合的基于共享存储的总线传输的多处理器系统的体系结构特性(如图1)。针对这种体系结构,如何能够充分的利用两种存储的优势来进行程序设计成为了迫切需要解决的问题。
曙光TC 5000集群即为多核集群体系结构的并行机,集群的每个刀片节点都是多核SMP处理机。根据多核集群多层次的结构特点,采用MPI和OpenMP的混合编程模型(图2),充分利用节点间和节点内的并行机制,在节点间采用基于消息传递的MPI模型,节点内使用共享模式的OpenMP编程模型。当执行任务时,首先要进行MPI分解,每个MPI进程被分配到一个节点上,进程间通过消息传递技术来进行通讯;然后在每个节点上的进程中OpenMP制导指令将创建一组线程,每个线程被分配到节点上不同处理器的多个内核上并行执行。
2.2 MPI和OpenMP混合编程的优势
1)降低通信开销
单独采用MPI模型时,节点间的进程需要消息传递,而混合模型中,节点内部采用共享存储的方式进行访问,这样就可以减少所需的进程数量,即减少了节点间的通信次数从而降低通信开销。
2)有效的改善MPI代码可扩展性
因负载均衡的原因MPI代码不易进行扩展,它的一些不规则的应用都存在负载不均衡问题[7],采用混合编程模式,能够实现更好的并行粒度。MPI仅仅负责结点间的通信,实行粗粒度并行:OpenMP实现结点内部的并行,因为OpenMP不存在负载均衡问题,从而提高了性能。
3)实现通信和计算重叠
大部分MPI都是通过单线程来实现,然而单个的MPI进程不能同时进行通信和计算,这样大大降低了效率。采用混合模型可以选择主线程或指定一个线程进行通信,而其它的线程执行计算的部分,这样便实现了通信和计算的重叠。
4)充分的利用CPU
在某些情况下,MPI应用实现的性能并不随处理器数量的增加而提高,而是有一个最优值。这时使用混合编程模式会比较有益,因为可以用OpenMP线程来替代进程这样就可以减少所需进程数量,从而运行理想数目的MPI进程,再用OpenMP进一步分解任务,使得所有处理器高效运行。
5)提高每个节点内的计算效率
在节点内使用OpenMP进行编程使程序在节点内部运行的时候更充分的利用了多核并行计算的优势。同时线程比MPI进程耗费更少的资源,比单纯使用MPI的运算效率大为提高[8]。
在一般情况下,使用混合编程模型具有更好地效率和性能,但是它也存在几方面需要注意的问题,比如对于纯MPI编程模型的应用,参与通信的CPU可以饱和结点间的带宽,而混合编程模型中若分出一个线程进行通信很难做到这一点。同时还要注意混合编程模型中MPI进程内的线程之间进行点对点通讯时的正确发送与接收、OpenMP产生的系统开销等问题。
3 实验结果与分析
3.1 测试环境
本文的主要在曙光TC5000集群上对所设计的求π程序进行实验,该集群以6个CB65刀片作为计算节点,以一台曙光A620rH服务器作为登陆管理节点,每个节点拥有两个AMD CPU(主频2.4GHz),每个CPU有4个核,即每个节点具有8个核。因此在曙光集群上执行程序时线程分组如图3所示:
集群采用SUSE 10 SP2作为操作系统,网络协议使用的是IPv4,OpenMP编译器采用OMPi-1.4版,消息传递库为MPICH2,在编译采用MPI+OpenMP混合编程模型设计的程序时使用的是GCC4.2.4编译器,编译时需加参数-lmpich和-fopenmp,在MPICH2的环境下运行。
3.2 测试程序
本文以计算π为例,采用MPI+OpenMP混合编程模型进行了程序设计。求π的方法有很多,在此选择了用数值积分法求π近似值的方法,也就是求在区间[0,1]内函数曲线4/(1+x2)下的面积。因此需要求出在区间[0,1]内函数的定积分,首先将区间[01]划分为N个等间隔的子区间,那么每个子区间的宽度为1/N,通过计算可以求出各子区间的函数值,进而求出π的近似值。其计算公式如下:
等分间隔数N的值越大计算的π值越精确,同时计算时间延长。
3.3 实验及结论
本文中所做的实验是在N=106的情况下进行的,将所设计的MPI和MPI+OpenMP的两个并行程序在曙光集群上以不同的节点个数进行了测试。
一般来说,在处理器上采用越多的线程计算机的计算性能越高,但在运行MPI+OpenMP混合编程模式下的程序时,节点内采用的线程数不宜过多[9],因为过多线程的启动和终止的开销会使计算性能下降[10]。如表2所示的运行程序时采用的线程数和执行时间的数据,可以发现当线程数和集群中处理器数(CPU:2*6=12)相等时,即节点内的每个处理器上只启动一个线程时,执行时间最短。当线程数小于这个数值时集群的性能不能发挥到最大,而当线程数大于这个数值时,系统会因为线程之间竞争总线带宽而导致总体的性能下降。虽然这种现象与具体求解问题相关,但在研究过程中绝大部分的测试程序都会出现这种现象[11]。
同时实验对纯MPI和MPI+OpenMP混合编程的加速比进行了比较,加速比即混合编程模式在一个处理机上串行计算所用时间与模式并行计算所用时间之比[12]。实验结果如图4所示,可以看出在以不同的节点数和线程数进行的同规模并行计算中MPI+OpenMP混合编程并行算法的加速比明显高于MPI并行算法,因此可以得出在一定情况下,混合并行算法具有更好的扩展性和加速比,采用MPI+OpenMP混合编程并行算法能够提高集群的计算性能。
4 结束语
本文通过结合一个具体的程序案例,详细描述了适用于多核集群的并行编程模型,并在曙光TC5000集群上进行了实验,实验表明采用MPI+OpenMP混合编程模型比采用纯MPI编程模型能更充分利用多核集群系统。随着多核集群系统的飞速发展,对并行计算模型的研究仍需继续,在本文的基础上,我们会对多核集群系统上的并行计算的性能优化做更深层的研究,从而使多核集群系统的性能进一步提高。
参考文献
[1]祝永志,张丹丹,曹宝香,等.基于SMP机群的层次化并行编程技术的研究[J].电子学报,2012,40(11):2206-2210.
[2]郑汉垣,刘智翔,封卫兵,等.MPI+OpenMP混合编程模型在大规模三对角线性方程组求解中的应用[J].微电子学与计算机,2011,28(8):158-161.
[3]张军,万剑怡.多核集群系统上的混合编程模型研究[J].计算机与现代化,2009(5):1-4.
[4]陈国良.并行计算—结构.算法.编程[M].北京:高等教育出版社,2003.
[5]BARBARA CHAPMAN,GABRIELE JOST,RUUD VAN DERPAS.Using OpenMP[M].The MIT Press,2007.
[6]Bull J M,Enright J P,Ameer N.A microb-enchmark suite for mixed-mode OpenMP/MPI[C]//Müller M S,de Supinski B R,Chapman BM.IWOMP 2009.LNCS,vol.5568,Springer,Heidelberg,2009:118-131.
[7]魏伟.基于SMP集群的性能优化方法的研究[D].兰州:兰州大学,2006.
[8]胡斌,袁道华.TBB多核编程及其混合编程模型的研究[J].计算机技术与发展,2009,19(2):98-101.
[9]杨际祥,谭国真,王荣生.多核软件的几个关键问题及其研究进展[J].电子学报,2010,38(9):2140-2145.
[10]Rabenseifner R.Hybrid Parallel Programming on HPC Platforms[C]//Proceedings of the Fifth European Workshop on OpenMP.EWOMP 2003,Aachen,Germany,September 22-26,2003:185-194.
[11]王惠春.基于SMP集群的MPI+OpenMP混合并行编程模型研究与应用[D].湘潭:湘潭大学,2008.