电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

并行程序分析范文

来源:文库作者:开心麻花2025-11-191

并行程序分析范文(精选7篇)

并行程序分析 第1篇

关键词:OpenMP,并行程序,FDTD,影响因素

在科学计算中,并行方式通常由于其较低的开销和较短的运算时间而受到人们的广泛关注。目前,并行计算的实现主要基于2种并行标准:MPI(Message Passing Interface)标准[1],用于消息传递方式的并行编程,允许不共享内存的多处理器合作进行并行计算;OpenMP标准[2],用于共享存储方式的并行编程,可以实现在SMP(Symmetrical Multi-Processor)系统内多处理器的多线程并行计算。

OpenMP是一个应用程序接口,包括一套编译指导语句和一个用来支持它的函数库,通过与标准的Fortran,C和C++结合工作。使用OpenMP开发共享存储的多线程程序非常简单和容易,但却很难保证所开发的程序具有很高的性能。同时,若使用不当,也会使程序发生混乱,产生诸如数据竞争,死锁等现象[3],从而导致最终的运算结果有误。OpenMP程序的一些因素对其执行效率也有很大影响[4]。因此,在使用OpenMP语句编写并行代码时,需要对其进行详实而细致的分析,从而保证程序的正确性和高效性。

时域有限差分法(FDTD)是模拟计算电磁场的一种基本算法,其串行方式通常由于问题的复杂程度而花费大量的计算时间。如果使用并行方式进行计算,则能够在很大程度上减少运算所用时间,提高运算效率。本文以一个二维平面波导为例,讨论如何使用OpenMP语句设计电磁场的FDTD并行程序,同时分析各种不同的并行方法对程序性能的影响,从而找到最为高效的并行方式,使之能够在最短的时间内得到正确的结果。

1 电磁场的计算过程

电磁场FDTD算法的基本思想是[5]:使用差分网格,将连续的电磁场问题变为离散系统问题,用各离散点上的数值解来逼近连续场域内的真实解。使用YEE网格得到一系列离散的电磁场计算公式,采用蛙跳格式,利用前一时刻已知的电场和磁场求出当前时刻的电磁场。随着时间的推移,计算过程不断进行下去。

本文所讨论的二维波导结构如图1所示。其中波导的长为3 m,宽为0.18 m,波导左端施加1 GHz的高斯脉冲激励源。设波的传播方向为z方向,垂直方向为x方向。当用FDTD处理该问题时,为将边界点落在网格点上,选取网格步长ΔL为0.015 m将整个场域离散成一个个正方形网格,如图2所示。

电场存在于网格的边线上,磁场位于网格的中心

点。由此得到TM模式上的3个电磁场的计算公式:

(Ηy)i+1/2,k+1/2n+1/2=(Ηy)i+1/2,k+1/2n-1/2+Δtμ×((Ez)i+1,k+1/2n-(Ez)i,k+1/2nΔx+(Ex)i+1/2,kn-(Ex)i+1/2,k+1nΔz)(1)(Ex)i+1/2,kn+1=(Ex)i+1/2,kn+Δtε(Ηy)i+1/2,k-1/2n+1/2-(Ηy)i+1/2,k+1/2n+1/2Δz(2)(Ez)i,k+1/2n+1=(Ez)i,k+1/2n+Δtε(Ηy)i+1/2,k+1/2n+1/2-(Ηy)i-1/2,k+1/2n+1/2Δx(3)

为保证计算数值的稳定性,选取时间步长Δtl/2c,其中c为光速。对左端口,当时间步数小于160步时,使用高斯脉冲激励,其他时刻使用Mur的一阶吸收边界条件。对右端口,为减小反射造成的影响,使用吸收效果更好的三阶廖氏吸收边界条件。激励源及吸收边界条件公式如式(4)~(6):

(Ex)i+1/2,1n=E0exp[-(t-t0Τ)2](4)(Ex)i+1/2,1n+1=(Ex)i+1/2,2n+(cΔt-ΔlcΔt+Δl)[(Ex)i+1/2,2n+1-(Ex)i+1/2,1n](5)(Ex)i+1/2,maxn+1=98(Ex)i+1/2,maxn+94(Ex)i+1/2,max-1n-38(Ex)i+1/2,max-2n-3(Ex)i+1/2,max-1n-1-18(Ex)i+1/2,maxn-2+34(Ex)i+1/2,max-1n-2+38(Ex)i+1/2,max-2n-2(6)

这样,当一次时刻所有场域的电磁场计算完成后,使用迭代过程就可以计算出随时间变化的波导内电磁场的分布情况。在Fortran中,使用Do循环语句可以方便的模拟上述过程。

2 OpenMP并行设计

OpenMP采用的是标准的并行模式——fork/join式并行,使用编译器指导指令实现并行化。当程序开始执行时,只有1个主线程的线程存在。当遇到OpenMP的指导指令要求程序并行化时,主线程派生出很多子线程。在并行区域,主线程和这些派生的子线程协同工作。在并行区结束之后,派生的线程退出或挂起,由主线程继续执行后续部分。因而,OpenMP的并行程序线程数是动态变化的。

采用OpenMP对本文的电磁场问题进行并行设计时,可以有多种实现方法,如使用数据并行或功能并行,改变数据调度类型或改变设置的线程数目等。不同的实现方法在运行的效率上是不同的。下面根据实现方式的不同,分析不同的并行程序在性能上的差异,以此找到最为优化的设计方法。

以下测试均在基于双CPU四线程的多处理器系统上使用Intel Fortran Compiler 9.1编译实现。

2.1 并行结构的不同

OpenMP可以实现两种并行方式:数据并行和功能并行[6]。数据并行是一种普遍意义上的并行方式,在程序中,常有一些循环操作,如果在循环的内部各个计算过程之间不存在相关性,则可以转换成并行循环,即数据并行。在OpenMP中,只需要告诉编译器该循环过程可以被并行执行,则编译器会负责生成派生和会合线程以及调度并行循环的代码,并将循环的任务分配给线程。如果一个程序的某些部分之间互不影响,没有相关性,同时执行这些部分运算的结果是正确的,则可以使用功能并行的方式将这些部分同时分配到不同的线程上并行执行。在OpenMP中,可以为不同的线程分配不同部分的代码,使用parallel sections语句即可帮助编译器实现功能并行。

在电磁场的计算过程中,时间步长上的迭代过程是相互关联,相互影响的。一次迭代需要使用上一次迭代的运算结果,故迭代之间不宜实现并行化。而在一次迭代内部,电场和磁场的计算仅需要前一次时刻的计算结果,各个计算过程之间没有影响,可以使用这两种方式实现并行计算。

在原串行程序上的迭代循环内部,添加“!MYMOMP PARALLEL DO”语句实现1次循环的数据并行,添加 “!MYMOMP PARALLEL SECTIONS”语句将电场和磁场的计算过程分到各个线程上实现功能并行。将2个实现的方式与原串行方式的运行效率做比较,其结果如图3所示。从图3可以看出,并行方式明显要比串行方式效率高,花费的时间少。而数据并行与功能并行两者之间也有很大的差异,数据并行方式性能最佳。当时间迭代次数从1 000次~5 000次变化时,相比数据并行方式,功能并行所花费的时间大约是其两倍左右,而串行方式则逐渐从2倍增加到3倍。由此可见,数据并行是实现并行运算最好的方式。

2.2 调度策略的不同

在对嵌套的循环进行并行操作的过程中,执行不同的调度策略所需的时间差别是相当大的。如果要计算n次的循环过程,每次循环的计算任务需要分配到t个线程中,如果每个线程被分到(n/t)次循环,可能得到较低的并行效率。这是因为各个线程所需完成任务的时间可能是不同的,先完成的线程需要等待所有线程都完成任务后才能继续下一次循环的并行计算。如果将新任务立即交给先完成任务的线程执行,则并行计算的总效率可能是最好的。调度策略的选择,是依照任务的负载不平衡性所决定的。在OpenMP中,使用schedual子句可以指定执行循环调度的策略,即如何将循环过程在线程间分配。OpenMP的调度策略有多种,包括动态调度、静态调度、指导性自调度、运行时调度等。本文只讨论前3种调度形式,并且使用默认的数据分块大小完成调度操作。

在静态调度中,任务在执行之前就已经被分配到各个线程中了,每个线程被分配到(n/t)次连续的循环。

如果使用动态调度,则任务开始时只分配1次循环,当线程执行完这次循环操作后,再将下一次循环任务交给线程执行。

指导性自调度方式是一种启发式自调度方法,开始时每个任务会分配到较大的数据任务块,之后任务每次请求新的任务时会被分配到大小递减的数据任务块,直到所有任务均完成为止。静态调度的开销小,但有明显的负载不平衡现象,动态调度的开销相对大,但可减少负载的不平衡现象。

在效率最高的数据并行方式上,对不同的调度方式做测试,包括静态调度STATIC,动态调度DYNAMIC,指导性自调度GUIDED和不定义调度方式。测试结果如图4所示。

不同的调度策略对程序的整体性能是有影响的。从图4中可以看出,相比其他2种情况,静态的调度方式与未指定调度策略的方式效率最好,运行时间大致相等。这说明在使用FDTD进行电磁场计算的过程中,各个场量的计算所用时间大体上一致,负载的不平衡性较小,可以忽略这种现象而在执行并行计算开始前直接把任务全部分配到线程中去。而倘若使用动态调度或指导性自调度方式,增加负载的不平衡现象,消耗时间,影响效率。可见,在本例中,静态调度方式是最为合适的调度策略。

2.3 设置线程数的不同

在使用OpenMP实现共享存储并行计算的过程中,线程数目的大小并不一定和系统实际的线程数一致,可以事先指定并行区域的线程总数来完成并行操作。线程数的不同会影响到并行程序效率,OpenMP中使用OMP_SET_NUM_THREADS()函数对并行部分的线程数进行定义,线程总数的定义需要在并行操作前的串行部分,若未指定线程数,则默认使用系统最大的线程数完成并行操作。前面关于并行实现方式和调度策略2个测试就是在未指定线程数的大小下完成的。当线程数发生变化时,程序运行时间的变化情况如表1所示。

可以看到,当设置的线程数与实际系统的线程数一致时(表1中线程数为4的列),运行的时间是最短的;当线程数超过系统的最大线程时,为实现并行化,线程之间增加了同步和竞争系统资源系统所需要的时间,这种差距越大,耗时越多;当线程数小于系统的最大线程时,并行计算的过程中总会有一些CPU空闲,计算机并未工作在最佳的状态,因而用时也较多;当线程数设置为1时,此时的并行程序实际上只有一个线程执行,成为串行方式。因此,使用系统默认的最大线程数是实现电磁场并行计算的最有效途径。

3 结 语

目前,个人计算机的CPU逐渐走向多核化,单机多线程的SMP系统也逐渐普及起来,在此类系统上设计并使用并行化程序有着重要的实用价值。本文以二维波导的电磁场FDTD算法为例,研究如何使用OpenMP设计其并行程序,以及分析影响并行效率的几个因素。测试分析的结果表明,采用不同的并行方式,设定不同的调度策略以及修改并行线程数的大小均会对并行程序本身的优化效率性能产生影响。综合考虑各个因素才能设计出最为优化的并行程序。本文所使用的例子虽然简单,但代表了设计此类问题的一般方法,对在使用FDTD算法的电磁场复杂问题有着一定的指导意义。

使用OpenMP设计的基于共享存储标准的电磁场并行程序虽然在效率方面有一些提高,但只能运行在多线程的SMP系统上。如果结合消息传递机制的MPI标准对这一类问题混合编写并行代码,则能够适用于由多处理器计算机组成的多机机群,用途更广、效率也更高。这一问题,将在今后的研究中进行下去。

参考文献

[1]莫则尧,袁国兴.消息传递并行编程环境MPI[M].北京:科学出版社,2001.

[2]OpenMP Architecture Review.OpenMP Application Pro-gramInterface[EB/OL].Version 2.5.http://www.openmp.org,2005.

[3]Paul Petersen,Sanjiv Shah.OpenMP Support inthe Intel ThreadChecker[J].International Workshop on OpenMP Applicationsand Tools,WOMPAT 2003.Toronto,2003:1 12.

[4]Li Jianjiang,Shu Ji wu,Chen Yongjian,et al.Analysis of Fac-tors Affecting Execution Performance of OpenMP Programs[J].Tsinghua Science and Technology,2005,10(3):304308.

[5]王秉中.计算电磁学[M].北京:科学出版社,2002.

并行程序分析 第2篇

关键词:性能分析,线性误差插值,时戳同步

0 引 言

在科学技术突飞猛进的今天,超大规模计算机的不断问世,为越来越多的高复杂性应用问题的解决提供了可能。现代大多数并行计算系统是集群结构,在体系结构、互联技术和软件环境等方面展现出巨大的差异。特别是多核处理器的问世,使基于集群的并行应用程序开发面临着巨大的挑战有效利用日益复杂的延迟层级和单一芯片上的核心之间、对称多处理器SMP(Symmetric Multiple Processor)节点内部及整个网络的带宽。这就产生一种需求,需要功能强大的软件工具来提高应用程序开发的效率并得到满意的运行时性能。

目前,被软件工具广泛使用的一种流行技术是事件跟踪。事件跟踪技术包括几个方面:首先,需要对应用程序的重要部分或用户关注的部分进行插桩;其次,编译并运行插桩后的应用程序,由插入的桩对程序的运行对象、时刻(时戳)、状态、环境等进行采集,形成事件记录,保存到跟踪文件中;最后,通过对跟踪文件进行事后分析、汇总,探查应用程序的通信和同步模式及当时并行活动之间的关系,进而揭示被测量软件的性能问题。因此,事件跟踪对理解消息传递应用程序的性能行为是十分有用的。很明显,分析的准确程度依赖于从不同处理器采集的时戳的可比较性,不准确的时戳可能导致一个特定的时间间隔比它实际更长或更短,或者可能改变事件的逻辑顺序。在性能分析期间,当要量化某些行为的影响时,错误的事件顺序可能导致作出错误的结论。如Scalasca这样的自动跟踪分析工具,在计算某些全局度量(它们依赖于正确的消息事件顺序)时,如果事件顺序错误,则可能产生不仅不正确而且完全矛盾(不可能)的结果,如产生负的时间值。

性能测量时,通过获取处理器的本地时钟来记录事件的发生、结束时刻并计算执行时间。因此,为了测量并行事件间的时间间隔以及确定不同处理器间事件的相对关系,需要一个全局时钟或者完全同步的处理器本地时钟。目前,只有少量的定制集群计算机,如IBM Blue Gene,提供了相对精确的全局时钟,而大多数其它集群计算机并没有提供全局同步的硬件时钟,仅提供处理器本地的时钟,它们要么是完全不同步的,要么仅在完全分离的分区(如SMP节点或多核芯片)内部同步。尽管可以使用网络时间协议NTP(Network Time Protocol)等外部软件时钟同步协议在一定程度上校准时钟,但这对事件跟踪这一目的来说通常是不够精确的。

鉴于此,探寻集群计算机处理器间时钟不同步及测量误差的成因,研究相应的同步方法,对并行程序性能分析有着十分重大的意义,也是必须面对和解决的技术问题。

1 时钟误差及测量误差

1.1 时钟误差

受器件本身物理特性和精度的限制,以及周围环境因素的影响,计算机中配备的时钟与标准时间总会存在一定的误差。假定能够在某个时间点上将时钟与标准时间对准,那么,经过一段时间后,时钟度量的时间值仍然会偏离标准时间,称这种现象为“时钟漂移”。时钟漂移的程度用“漂移率”来描述,它通常是指一个物理时钟在标准时间一秒内偏离标准时间的秒数。时钟漂移率往往并不是恒定的,微处理器本身和它周围的温度变化及现代计算机灵活的电源管理可能影响时钟振荡频率,使时钟产生微小的漂移。文献[1]指出,时钟周围温度的变化可能导致超过10-8的漂移率,这样,程序每运行100秒的时间就会产生超过1微秒的同步误差。漂移往往是一个连续的过程,并且其漂移率通常局限在一个很小的范围。假设时钟漂移率的绝对值小于ρ,则标准时间t与时钟时间C(t)之间的关系可用式(1)表示:

-ρdCdt-1+ρ (1)

如果时钟的漂移率为0,那么时钟的走时就是精确的,是与标准时间同步的;如果时钟的漂移率为正值,那么说明时钟比标准时钟走时快,时钟的运行轨迹在标准时间上方;如果时钟的漂移率为负值,则时钟比标准时钟走时慢,时钟的运行轨迹在标准时间下方。图1描述了具有一定漂移率的物理时钟与标准时间的关系。

不同处理器的时钟除了漂移率有所差异外,每个时钟与标准时间都存在一定的误差,而且大多情况下,它们与标准时间的差值,即起始时钟值也不一样。这种情况一般称为时钟间的“偏差”。因此,不同处理器时钟的误差就包含了两部分内容:偏差和漂移。图2示意了两个时钟的关系,它们具有不同初始值及不同且非恒定的漂移。

一般来说,随着时间的流逝,时钟漂移会不断地累积,处理器时钟间的误差会有越来越大的趋势。假设两个时钟在一年内仅产生1分钟的误差,那么它将导致每秒约2微秒的漂移。那么,程序运行100秒就会产生约200微秒的时间误差。

1.2 测量误差

在基于事件跟踪的并行程序测量中,事件的时戳采集于本地处理器的时钟,当缺少全局同步的时钟时,时钟间的误差会引入到测量误差中。此外,计时器分辨率不足,也可能引入测量误差。而由调度守护进程或处理操作系统中断等异步事件引起的操作系统抖动情况,及使用网络时间协议(NTP)对时钟漂移的反复调整,会使时戳之间的关系更加复杂。

2 时钟条件及时戳同步

2.1 时钟条件

一个消息只有在它被发送后才能被接收,这是消息通信必须满足的时钟条件。式(2)给出了点到点间的发送-接收操作对的正确时间关系,要求一个接收事件最早发生在匹配的发送事件之后再经过dmin时间。其中dmin是最小消息通信延迟。

trecvtsend+dmin (2)

对于集群通信机制,类似的需求可以通过映射它们的语义到点到点通信来获得。而对于同步之类的通信机制,应该是所有进程同时离开同步点。

图3给出了MPI程序中消息通信和OpenMP程序中同步操作在并行程序测量中可能出现的一致和不一致情形。

图3(a)和(b)显示了通过发送(S)和接收(R)事件交换信息的两个进程的时间线。在(b)中,测量暗示一个消息在它被发送之前已经被接收,这当然是不可能的。图3(c)和(d)展示了包括进入(E)和退出(X)两个不同事件类型的OpenMP同步执行情况。(c)中的事件顺序是一致的,而在(d)中,一个线程在另一个线程进入同步之前就已离开,造成一个同步语义的明显违例。

2.2 时戳同步

尽管时钟漂移率通常都很小,但随着漂移的累积,不同处理器上对应事件的时戳就会变得越来越不同步,并最终影响它们的相互关系,不可避免地导致时钟条件违反的情况发生,从而对并行程序执行行为的分析和理解造成严重影响。

并行程序性能测量时,被测量程序以多个进程或线程并行地运行。虽然可以让每个进程按事件发生的先后顺序来记录对象执行的相关情况,但在并行程序性能分析时,为了分析事件间的相互关系,必然要对多个进程的事件记录进行排序(无论是分析之前还是分析过程中)。因此,分析的准确性(依赖于事件记录排序的正确性)取决于在不同处理器上获得的时戳的可比较性(时戳的同步程度)。

并行程序性能分析中,一般并不注重处理器时钟是否与标准时间或其它处理器时钟同步(不是不想,关键是很难实现时钟同步),而是注重参与并行程序运行的各处理器采集的事件时戳的同步性。只要各处理器采集的事件时戳是同步的,就不会引起事件记录的乱序问题,不影响对事件相互关系的分析。

为了同步不同处理器所采集的事件的时戳,通常选择某个进程(如根进程)所在的处理器时钟为参考时钟,然后通过一定的方法将其它处理器采集的事件时戳映射到参考时钟区间中。

3 基于线性插值的时戳同步

对于运行并行程序的各处理器,假定它们具有不同的时钟值和不同的漂移,但漂移是恒定的,那么工作进程worker的本地时间可以通过基于误差测量的线性误差插值映射到事后分析器任选的主进程master的全局时间。master和worker之间的误差,可使用Cristian的概率远程时钟读技术来确定。远程进程worker在时间t1发送一个到主进程master的请求,master进程发送它的当前本地时间t0响应该请求,worker在时间t2收到该回应。假设这两条消息延迟时间一样,可根据公式(3)来计算它们的误差o:

o=t1+t2-t12-t0 (3)

假设每个远程进程worker在开始和最后进行两次测量,当两次测量都发生的时候,分别得到(w1,o1)和(w2,o2),其中w为测量时刻worker进程的本地时间,o为它与master进程的时钟误差。即worker进程的本地时间w1与master进程的时间w1+o1对应匹配,如图4所示。

假定worker进程的任意时间t与master进程的时间m(t)对应,则可以得到公式(4)所示的线性插值方程:

m(t)-(w1+o1)(w2+o2)-(w1+o1)=t-w1w2-w1 (4)

根据式(4)可求出m(t):

m(t)=t-w1w2-w1((w2+o2)-(w1+o1))+w1+o1=t-w1w2-w1((w2-w1)+(o2-o1))+w1+o1=t-w1+o2-o1w2-w1(t-w1)+w1+o1=t+o2-o1w2-w1(t-w1)+o1(5)

式(5)就是根据worker进程的任意时间t将其映射为master进程的相应时间m(t)的计算公式,利用它就可以实现进程间的时戳同步。

在上述的线性误差插值方法中,有两点需要说明。一是消息通信的延迟通常是不规则的。因为网络拓扑和负载都对消息延迟有重大影响,信息要穿过网络的若干个阶段,在每个阶段的处理时间可能因当时的网络负载而有所变化,从而使得同一进程对之间的信息交换可能每次需要的时间都不同。因此在测算进程对之间的通信延迟时必须重复进行多次测量,以求得进程间的最小延迟或平均延迟。二是时钟的漂移通常也不是恒定的,这一点在前面已讨论过,因此上述假定的恒定漂移与实际是有距离的。

4 结 语

线性误差插值方案在短时间内的同步效果是令人满意的,它能够较好地解决基于MPI通信的依赖事件间的时钟条件违反问题,但对于运行时间较长的测量,测量误差和随时间依赖的漂移仍可能造成错误和时钟条件违例。

当某个事件的时戳被修正后,必定会对其前面或后面的事件造成影响,这可能使事件间的间隔被拉长或压缩,或者可能导致新独立事件与依赖事件间的次序错误。因此,我们必须深入研究这些问题,以便尽可能地保持事件间的间隔及次序关系,这可通过前向分摊和后向分摊技术,将某个时戳修正前后的差值分摊到与其相邻的多个事件中,而不是集中于单个事件。另外,线性误差插值方法仅适用于单处理器串行工作,而实际上并行应用运行时往往会获得多个处理器资源,在应用运行结束之后、进行后处理分析时这些资源均已空闲,所以我们还应该研究并行时戳同步算法,以充分利用这些资源,来提高时戳同步效率。这些技术作者将在其它文章中介绍。

参考文献

[1]Daniel Becker,John C Linford,Rolf Rabenseifner,et al.Replay-based synchronization of timestamps in event traces of massively paral-lel applications[J].Scalable Computing:Practice and Experience,2009,10(1):49-60,Special Issue:Simulation in Emergent Computa-tional Systems.

[2]Daniel Becker,Rolf Rabenseifner,Felix Wolf.Implications of non-constant clock drifts for the timestamps of concurrent events[C]//Proc.of the IEEE Cluster Conference(Cluster2008)Tsukuba,Ja-pan,IEEE Computer Society,September2008:59-68.

[3]Daniel Becker,Rolf Rabenseifner,Felix Wolf,et al:Scalable times-tamp synchronization for event traces of message-passing applications[J].Parallel Computing-Selected papers from the14th European PVM/MPI Users Group Meeting,2009,35(12):595-607.

[4]赵英,王旖旎,马严,等.基于拟合偏差的时钟同步[J].计算机工程,2008,34(16):13-15.

[5]全渝娟,刘桂雄,郑玉红.基于时间戳报文流的本地时钟漂移补偿时间同步方案研究[J].内蒙古大学学报:自然科学版,2008,39(2):191-195.

[6]Markus Geimer,Felix Wolf,Brian J N,et al.The Scalasca performance toolset architecture[J].Concurrency and Computation:Practice and Experience,2010,22(6):702-719.

基于MPI的并行程序设计 第3篇

对于MPI的定义是多种多样的, 但不外乎下面三个方面, 它们限定了MPI的内涵和外延。 (1) MPI是一个库而不是一门语言。因此对MPI的使用必须和特定的语言结合起来进行MPI库可以被多种语言调用, 从语法上说, 它遵守所有对库函数/过程的调用规则和一般的函数/过程没有什么区别。 (2) MPI是一种标准或规范的代表而不特指某一个对它的具体实现。 (3) MPI是一种消息传递编程模型并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大但是它的最终目的是服务于进程间通信这一目标的。

MPI (Message Passing Interface) 是消息传递并行程序设计的标准之一, 由MPI论坛开发, 当前通用的是MPI 1.1规范。正在制定的MPI 2.O规范除支持消息传递外, 还支持MPI的L/O规范和进程管理规范。MPI正成为并行程序设计事实上的工业标准。

MPI的目标总结概括起来, 它包括几个在实际使用中都十分重要但有时又是相互矛盾的三个方面:1.较高的通信性能;2.较好的程序可移植性;3.强大的功能。

目前主要MPI的实现有: (1) MPICH是一种最重要的MPI实现, 更为重要的是MPICH是一个与MPI-1规范同步发展的版本每当MPI推出新的版本就会有相应的MPICH的实现版本。目前MPICH的最新版本是MPICH-1.2.1它支持部分的MPI-2的特征。 (2) CHIMP是Edinburgh开发的另一个免费MPI实现是在EPCC Edinburgh ParallelComputingCentre的支持下进行的。 (3) LAM (Local Area Multicomputer) 也是免费的MPI实现, 它目前最新的版本是LAM/MPI 6.3.2, 它主要用于异构的计算机网络计算系统。

2. MPI的特点

MPI库作为可移植的消息传递函数库, 具有以下一些特点: (1) MPI提供缓冲区管理的函数, 用户可以决定由系统对发送、接受缓冲区的管理, 还是用户参与其管理, 以便控制系统缓冲区空间, 提高系统的安全性; (2) MPI不但支持语言本身所提供的各种结构, 而且允许用户构造自己的复杂结构体和数据类型, 使得进程间的通信更加便捷易用; (3) MPI为任务间的通信提供多种方式, 大量的通信接口能够满足科学与工程的需要; (4) MPI提供可靠的数据传输机制, 发送的消息能够保证被对方正确接受, 用户不必自行检查传输错误、传输超时等。也就是说MPI的通信对用户而言是透明的; (5) MPI通过通信域保证通信的安全性, 不同通信域内的并行任务之间的通信不会相互干扰和混淆; (6) MPI具有高度的可重构性, 允许多个用户同时使用并行处理设备。

3. MPI数据打包与解包

打包 (Pack) 和解包 (Upack) 操作是为了发送不连续的数据, 在发送前显示地把数据包装到一个连续的缓冲区, 在接收之后从连续的缓冲区中解包。

MPI_PACK把由inbuf, incount, datatype指定的发送缓冲区中的incount个datatype类型的消息放到起始为outbuf的连续空间。该空间共有outcount个字节, 输入缓冲区可以是MPI_SEND允许的任何通信缓冲区。入口参数position的值是输出缓冲区中用于打包的起始地址。打包后它的值根据打包消息的大小来增加。出口参数position的值是被打包的消息占用的输出缓冲区后面的第一个地址, 通过连续几次对不同位置的消息调用打包操作就将不连续的消息放到了一个连续的空间。comm参数是将在后面用于发送打包的消息时用的通信域。

MPI_UNPACK和MPI_PACK对应它, 从inbuf和insize指定的缓冲区空间将不连续的消息解开放到outbuf, outcount, datatype指定的缓冲区中, 输出缓冲区可以是MPI_RECV允许的任何通信缓冲区。输入缓冲区是一个连续的存储空间, 大小为insize字节, 开始地址为inbuf。入口参数position的初始值是输出缓冲区中被打包消息占用的起始地址, 解包后它的值根据打包消息的大小来增加, 因此出口参数position的值是输出缓冲区中被解包的消息占用空间后面的第一个地址。通过连续几次对已打包的消息调用与打包时相应的解包操作, 就可以将连续的消息解开放到一个不连续的空间。comm参数是用于接收消息的通信域。

一个打包单元可以用MPI_PACKED作为类型发送。发送类型可以是任何点到点通信或者组通信调用。用MPI_PACKED发送的数据可以用任意数据类型来接收, 只要它和实际接收到的消息的数据类型相匹配。以任何类型发送的消息 (包括MPI_PACKED类型) 都可以用MPI_PACKED类型接收。这样的消息于是就可以被调用MPI_UNPACK来解包。

接收到的打包消息可以被解包成几个不连续的消息, 这是通过几个连续的对MPI_UN-PACK调用来实现的, 第一个调用提供position=0, 对于后续的调用, 是以前一个调用输出的position的值作为输入, 而使用和前一个调用相同的inbuf insize和comm值。

为了看清它的用法, 我们把求定积分Get_data函数用这种方法实现:

当需要把一些不同类型的数据发送一次或者少数几次时, 用MPI_Pack/MPI_Unpack打包发送通信开销最小。

结语。MPI的一个最重要的特点就是免费和源代码开放。MPI可以被迅速接受, 和它为自己定下的:高效率、方便移植和功能强大三个主要目标密不可分。由于MPI并行程序是在原来串行程序基础上的扩展, 在许多地方和串行程序是相同的。串行程序设计的许多经验是可以应用到并行程序设计中的, 但是同时我们必须注意在设计MPI程序的时候头脑中必须有程序并行执行的概念而不是原来有序的串行执行这才是串行和并行最主要的区别。当然要想设计出高级的MPI并行程序, 除了要掌握更多的MPI库函数及MPI不同的并行程序模式外, 适应的并行算法的研究也是应必须掌握的技术

摘要:通过对MPI概述及MPI特点的介绍, 说明MPI作为消息传递编程模型, 正成为并行程序设计事实上的工业标准。MPI发送不连续数据, 主要通过数据打包与解包操作, 并且通过列举定积分求解的例子来说明。

关键词:并行程序设计,MPI,数据打包,数据解包

参考文献

[1]都志辉.高性能计算之并行编程技术——MPI并行程序设计.清华大学出版社, 2001年

[2]许丽华, 刘淼.MPI并行程序环境的研究[J].现代计算机 (专业版) , 2003年4期

[3]蒋英, 雷永梅.MPI中的3种数据打包发送方式及其性能分析[J].计算机工程, 2002年8月

[4]张乐君.基于网格的MPI并行程序运行框架的设计与实现[J], 2008年

多核处理器下并行程序设计探析 第4篇

关键词:多核技术,多线程,并行化,效率

1 引言

从20世纪70年代开始, 处理器得到了突飞猛进的发展, 许多知名厂家如Intel、AMD和IBM等都推出了一代又一代的处理器, 造就了处理器发展史上一座又一座的丰碑。随着处理器所集成晶体管的数量的不断增多, 主频的速度越来越快, 而处理器的工作性能也越来越优越。多核处理器系统通过不断增加计算机中物理处理器的数量, 能够有效利用线程级并行性进行数据处理。多核处理器系统支持真正意义上的并行执行, 多个线程或者进程能够在多个处理器内核上同时执行。

并行计算在科学以及工程应用的计算模拟、商业应用的数据挖掘及事务处理等许多领域, 已经产生了巨大的作用和影响力。多核的成本优势与并行化计算对计算性能上的需求相结合, 为促进多核编程的发展提供了坚实的基础。

2 多核技术简介

多核, 即在一个单芯片上面集成两个甚至多个处理器, 每个处理器被称作一个核, 其中每个内核都有自己的逻辑单元、控制单元、中断控制器、运算单元, 一级cache、二级cache共享或独有, 其部件的完整性和单核处理器的内核相比完全一致。这些设计被称为芯片多处理器 (Chip Multiprocessor, CMP) , 是因为它们允许单芯片进行多处理, 多核是CMP或单芯片多处理器的流行的名字。多核CPU, 即单芯片多处理器 (CMP) 是指在一个芯片上集成多个微处理器核心, 可以并行地执行程序代码, 在不提升CPU工作频率的情况下, 降低CPU的功耗, 并获得很高的性能。

在现代的多核硬件结构 (如图1) 中, 多个CPU核可以共享同一内存, CPU核一般都是对称的, 所以多核属于共享存储的对称多处理器。如果要充分发挥多核硬件的性能, 必须要采用多线程或多进程来执行, 使得每个CPU核在同一时刻都有线程在执行。

3 并行程序设计

3.1 并行编程平台

并行平台的逻辑组织是指程序员眼中的平台, 而物理组织指的则是平台的实际硬件组织。在程序员眼中, 表达并行任务的方法以及指定任务间相互作用的机制, 是并行计算的两个重要组成部分。前者称为控制结构, 而后者称为通信模型。

3.2 算法结构模式

3.2.1 任务并行模式

任务并行算法的设计包含三个主要元素:任务和它们被定义的方式、任务间的相关性、调度。在最终决策被制定前, 必须完整地考虑三者。在考虑这些因素之后, 我们看一看整个程序的结构, 然后看一下这个模式的某些重要的特殊情况。

3.2.2 分治模式

分治策略在很多串行算法中得到了应用。利用这种策略, 问题被划分为大量较小的子问题, 通常情况下, 当子问题可以被独立地求解时, 分治问题中的并发性是显然的。通过将任务定义为递归函数的一个调用, 串行分治算法可以被直接地映射到一个任务并行算法。这个设计的递归属性, 其中每一个任务都是动态地产生, 然后每一个子问题吸收一个任务。在递归的某一层, 一个子问题所需要的计算量可能变得很小, 以至于不值得创建一个新的任务来求解它。在这种情况下, 当子问题小于某个阀值时, 在递归的较高层创建新任务的混合程序将转向串行求解, 这样程序将更高效。在选择这个阀值时, 采用某种折衷方式, 具体将依赖于问题的种类和可利用的PE数目。

3.2.3 流水线模式

许多算法可以被表示为递归关系, 并使用一个流水线或者它的较高维概括来实现。定义流水线的阶段, 通常每一个流水线阶段将对应于一个任务。在整个流水线中, 并发量由阶段的数目限制。我们在将计算组织到阶段中时, 每一个阶段所做的工作量要大于通信开销。工作量的大小依赖于特定的体系结构。流水线元素间的数据流如何被表示, 将依赖于目标平台的特性。处理器分配和任务调度, 最简单的方式是将一个PE分配到流水线的每一个阶段。如果PE的数目比流水线的阶段数目少, 则必须将多个阶段分配给同一个PE, 不共享多种资源的几个阶段可以被分配到同一个PE中。如果处理一个数据元素所需要的工作量在阶段间不同, 则包含较少工作量的几个阶段可以被分配到同一个PE中, 从而提高了负载平衡。如果PE数目比流水线的阶段数目较多, 则要考虑使用一种合适的算法结构模式将一个或多个流水线阶段并行化。

3.3 负载平衡的映射技术

当一个计算被分解为多个任务, 这些任务就被映射到不同进程, 以便在最短运行时间内完成所有任务。任务到进程的有效映射必须达到下面两个目标:首先, 减少进程间彼此交互的总时间。其次, 减少一些进程繁忙而其他进程空闲的总时间。并行算法中用到的映射技术可大致分为两类:静态和动态。并行编程模式和任务的特性以及它们之间的交互决定更适合使用静态还是动态映射。静态映射技术在算法执行前将任务分配给进程。对于静态产生的任务, 既可使用静态映射, 又可使用动态映射。这种情况下, 选择好的映射方法取决于几个因素, 包括任务大小是否已知, 与任务相关的数据大小, 任务间交互的特点, 甚至还包括并行编程模式。动态映射技术在算法执行期间在进程间分配任务。假如任务是动态产生的, 那么任务也必须动态地映射。如果任务大小未知, 那么静态映射会引起严重的负载不平衡, 而动态映射往往更合适。

4 小结

多核处理器的优势是显而易见的, 多任务处理、数据分析和网络分流等对计算性能要求较高的应用是多核服务器的主流应用。与目前主流的双核平台相比, 多核服务器平台提供更多内存和I/0, 因此大大减少了通信瓶颈并优化了性能, 内存和I/0共同为每一个处理器提供相关数据, 从而使所有内核能够以最高速度执行计算负载。系统能够让用户将应用整合到数量更少、更加强大的服务器上, 并且控制数据中心的能源开销。然而, 多核处理器的大量使用, 我们就要考虑伴随着多核平台的出现, 计算机产业进入了一个新的时代。传统的串行编程语言和编程方式已经无法方便和高效地开发出适合多核并行硬件的程序, 面向多核的并行化编程技术的研究成为了一项无法回避的重要课题。随着多核并行硬件的更新, 面向多核的并行编程技术也将不断地发展, 对现有的多核编程技术的充分了解将对下一代多核编程技术的研究提供宝贵的参考。

参考文献

[1]沈嘉, 索士强, 全海洋.3GPP长期演进 (LTE) 技术原理与系统设计[M].北京:人民邮电出版社, 2008:43-120.

[2]卡梅隆·休斯, 特蕾西·休斯.C++多核高级编程[M].北京:清华大学出版社, 2010.3-5.

[3]严蔚敏, 吴伟民.数据结构:C语言版[M].北京:清华大学出版社, 2007.125-127.

[4]马双双, 陈发堂.LTE-TDD统中频偏估计算法研究[J].电视技术, 2011, 35 (1) :89-92.

[5]王继钢.论CPU技术[J].民营科技, 2011 (02) :2-5.

并行程序分析 第5篇

1 数据流Java

以现行进程网络模型以及数据流为基本运行环境, 现阶段主要是通过显式数据的方式完成各个运行单元之间的同步功能以及信息沟通功能。同时, 在数据流的运行环境下, 运行单元相互之间无法实现对隐式数据的共享。通过此种方式, 原则上避免了多线程模型在运行过程中可能围绕数据传递出现的竞争以及冲突行为, 从某种程度上来会所使得程序的形式化分析以及验证工作开展更加的有效。实际工作当中, 通过对数据流模型的应用, 程序员能够很轻松的将应用程序所对对应的内部并行特征表现出来, 避免传统意义上因编译器处理而可能导致的并行分析以及优化难度增加问题。由此可知, 在实际工作当中, 构建基于数据流的Java模型有着重要的应用意义与价值。

在基于数据流的Java模型当中, 组间是其中最小, 且独立运行的单元构成。与之相对应的运行称之为进程、线程。在组间单位内部, 执行方式仅能够通过串行方式完成。而对于完整的一个基于数据流的Java模型程序而言, 当中所拥有的组件个数并没有受到明显的限制, 且组件之间仍能够通过对数据输入端口以及输出端口的自定义, 一方面保障其相互之间的运行独立性, 另一方面能够为组件与外部环境的通信构建良好的载体作为支持。在现阶段的技术条件支持下, 组件所对应的数据输入端口主要包括两种类型: (1) 常规数据输入端口; (2) 参数输入端口。常规数据输入端口的特点在于:一旦组件以该端口作为载体, 完成对相对于一个对象的接受, 那么就意味着该对象与组件单元之间构建起了一对一的关系, 这时, 分布在基于数据流的Java模型程序当中的其他相关组件都无法实现对该对象的访问。与此同时, 当对象通过组件输出端口向外发送给模型程序其他组件单元后, 原组件也无法实现对对象的范围, 对该对象的访问权限被转移至了接收组件方面。而对于参数输入端口而言, 其主要特点在表现在:在某个参数输入端口接收到对象后, 与之所形成的关系并非一对一模型, 而是数据共享模式, 能够在完成对初始化参数传递任务的同时, 实现多个组件数据的共享。

2 数据流Java并行程序设计模型

建立在组件与组件相互结合的基本条件下, 可以形成一个完成的网络体系结构。该网络体系结构若不具备与外部环境相连接的通信端口, 则可以将其视作一个完全闭合的网络体系结构, 与之相对应的数据流Java并行程序设计模型同样在运转过程当中表现出了独立性的特征。反过来说, 若该网络体系结构具备与外部环境相连接的通信端口, 则可以将其视作一个开放性的网络体系结构, 与之相对应的数据流Java并行程序设计模型同样在运转过程当中表现出了开放性的特征。

建立在混合式设计理念基础之上所形成的数据流Java并行程序设计模型相对于多线程多核体系结构而言, 实际运行更加的理想与可靠。这主要体现在以下几个方面: (1) 首先, 从细粒度的角度上来说, 在数据流Java并行程序设计模型的运行过程当中, 模型程序当中各个组件与组件相互之间的串行特征得到了有效的保存。换句话来说, 组件运行中所支持的串行算法以及遗产代码对于数据流Java并行程序设计模型同样适用; (2) 其次, 从粗粒度的角度上来说, 由于数据流Java并行程序设计模型当中引入了数据流的基本特征, 使得模型程序组件与组件之间的运行并行性得到了充分的体现。换句话来说, 在整个数据流Java并行程序设计模型实际运行的过程当中, 很容易即可实现映射至硬件当中的线程级并行功能。组件与组件之间通信需求的满足则多建立在通信通道以及参数对象共享的基础之上实现。更加关键的一点是:对于该数据流Java并行程序设计模型所处的整个多线程多核体系结构而言, 各个处理单元之间通信工作机制的高效化发展, 使得通信所产生的开销得到了有效的而控制。但, 还需要注意的是:由于在不同的多线程多核处理器作用之下, 所对应的硬件线程处理能力存在比较大的差异, 且相对于高速缓存所采取的策略方案也有所不同, 因而会对整个程序模型的使用性能产生影响。在数据流Java并行程序设计模型的运行过程当中, 要求系统以模型程序的体系结构以及运行时特征为基本依据, 采取针对性的适应优化方案, 以此种方式来提高整个数据流Java并行程序设计模型的运行质量及水平。

3 内存模型

相对于数据流Java并行程序设计模型而言, 其中所使用的内存模型表现出了突出的分布式、以及共享式特征。在这种内存模型方案的支持下, 数据流Java并行程序设计模型当中所对应的各个组件单元均对应有局部性的内存空间。对于单个组件单元而言, 其所对应内存空间当中所储存的对象仅仅包括两个方面:第一为组件私有性数据对象;第二为组件分配数据对象。内存模型的初始位置均为局部内存空间。这一初始状态在数据对象自某一组件发送至另一组件的情况下被打破。简单来说, 当某个组件单元以通信管道作为载体支持, 将数据对象发送给另一组件的情况下, 该内存模型会产生伴随性的移动动作, 并最终转移至数据对象接收方的局部内存空间当中。

在局部内存空间之外, 各个组件之间拥有共享的全局内存空间。全局内存空间中的对象都是多个组件共享的。一个组件私有的对象如果通过参数端口传递给多个组件共享, 则对象被移动到全局内存空间。当一个组件将私有的对象的引用赋值给一个共享对象时, 该私有对象成为共享对象, 将被移动到全局内存空间。任何一个组件对全局内存空间的访问和修改操作必须是原子的, 并且对其他组件可见。对于多核处理器而言, 组件的局部内存空间可以容易地映射到单个处理单元的局部存储器上, 全局内存空间可以映射为多个处理单元共享的存储器。由于多核处理器内部的通信延迟和通信带宽都远远优于对称多处理器。因此, 局部内存空间之问的数据对象的传输可以通过处理单元之间的快速通信机制完成。

4 数据流多态分析

对于数据流Java并行程序设计模型而言, 其对于Java所具有的面向对象特征加以了保留。同时, 为了能够使模型所对应Java组件的可维护性以及可重用性得到提升, 需要构建建立在数据流多态基础之上的特性。如下图所示 (见图1) 。

图1当中的Rectangle以及Circle分别作为Shape的子类。以上三类分别对应不同的数据输入端口类型。发送的数据对象会在运行时根据其实例类型决定目的端口, 若表现为Shape所对应的子类, 则被发送到B或者C端口当中, 若表现不是Shape所对应的子类, 则会面向D端口进行发送。具体的分派树结构示意图如下图所示 (见图2) 。由于数据流Java并行程序设计模型具有该特性, 从而使得程序员可以在配置网络时, 通过变换连接的方式, 实现对程序行为的合理调整与优化。

5 结束语

总而言之, 该文针对一种建立在数据流基础之上, 能够充分体现数据流特征的Java并行程序设计模型, 同时对应分析了该模型所具有的数据流多态性语言特征。该数据流Java并行程序设计模型可以在实际的Java虚拟机当中加以应用。同时, 由于该数据流Java并行程序设计模型具备与运行时系统进行协同性设计的功能, 从而使得整个数据流Java并行程序设计模型的运行时特征能够及时且有效的为运行时系统所获取, 从而实现对该模型进行针对性的优化, 因此具有极大的实践意义与价值。为了进一步促进数据流Java并行程序设计模型的优化发展, 需要在未来的发展期间, 更进一步的对该模型进行扩展, 重点需要增加数据流Java并行程序设计模型相对于各种通用问题的表达能力, 形成更加有效与全面的数据流Java应用程序。总而言之, 该文主要针对数据流Java并行程序设计模型在设计、实现、以及运行时优这几个方面所涉及到的关键问题做出了简要分析与说明, 希望能够为后续相关研究与实践工作的开展提供一定的参考与帮助。

摘要:文章以数据流Java并行程序设计模型作为研究对象, 提出了一种建立在数据流多态语言特征基础之上的模型, 同常规Java模型相比, 数据流Java并行程序设计模型最为突出的特点就在于:建立在虚拟机内部机制以及类库的基础之上, 通过采纳协同设计方案的方式, 使得虚拟机内部完成包括模型性能优化以及动态设计优化在内的相关工作任务。同时, 还能够通过对数据流Java并行程序设计模型中, 语义限制功能的应用, 最大限度的控制虚拟机在正常运行状态下分析以及优化的资源消耗问题。现针对该数据流Java并行程序设计模型在设计、实现、以及运行时优这三个方面的问题展开详细分析与阐述, 望引起关注。

关键词:数据流,Java并行程序设计模型,实现,运行时优

参考文献

[1]范瑞娟, 黄斌, 刘新友.基于多核CPU的并行程序在指控系统中的应用[J].微型电脑应用, 2008, 24 (12) :48-49.

[2]董明刚, 梁正友.Windows下基于ProActive并行计算的关键技术[J].计算机工程, 2006, 32 (19) :105-107.

[3]李清宝, 张平.基于分布/共享内存层次结构的并行程序设计[J].计算机应用, 2004, 24 (6) :148-150, 158.

[4]许淳, 刘兴平, 田云娜等.基于VC.NET平台和MPI并行程序设计探索[J].延安大学学报 (自然科学版) , 2008, 27 (1) :15-17.

[5]张鹏, 戚梅, 陶晓峰.基于Petri网逐步求精的MPI并行程序设计[C]//青岛大学学报 (工程技术版) , 2006:8-10.

并行管道阴极保护干扰分析 第6篇

如果使用实验方法研究各主要因素对并行管道干扰规律的影响, 这必将花费大量的人力、物力。然而数值模拟方法却可以很容易的通过建立并行管道阴极保护的数值模型, 分析各主要因素对并行管道干扰规律的影响。国内外众多学者利用数值计算方法解决了大量阴极保护的重要问题[3~5], 且Jacques Parlongue发表了一篇名为《阴极保护进入数值模拟时代》的论文[6,7]。显然数值模拟方法已成为一种研究阴极保护的重要方法。本文利用COMSOL建立并行管道的数学模型, 并基于此模型分析土壤电阻率、涂层面电阻、两管道间距对并行敷设管道干扰强度的影响。

1 控制方程及边界设置

国内外对阴极保护体系电位分布的数值研究, 大多数采用拉普拉斯方程为电势分布的控制方程[8~11], 如方程1

其中Φ为电势;σ为电导率;ρ为电阻率。

从数学上讲满足一个偏微分方程的解很多, 必须有特定的边界条件才能得到定解。同样, 对于管道阴极保护控制方程的求解也需要设定合理的边界条件。阳极采用电流边界条件, 阴极考虑了涂层面电阻和电化学反应, 地表面采用法向电流为零。模型中管道直径为0.72 m, 管道的长度为200 m, 两管道的间距为2 m, 管壁厚8 mm, 管道埋深为2 m。

2 结果分析与讨论

当今文献中对杂散电流对阴极保护的研究已有不少, 但是美中不足的是没有提出衡量干扰强度的物理量。因而也就无法定量化干扰强度, 同样也不能给出定量化的防止干扰的理论。经过深入分析, 我们定义了干扰强度量Fpo。物理意义为当只存在一个管道时管道电势与两个管道共同存在时管道电势之差与只存在一个管道时管道电势比值的绝对值。

管道1所受到的干扰强度F1po为:

管道2所受到的干扰强度F2po为:

其中ϕPS1, ϕPS2分别为只存在管道1或管道2时管道表面的ON电势, ϕPM1, ϕMP2分别为存在两管道时管道1, 2表面的极化电势。

计算结果表明, 随着电阻率的增加, 管道ON电势越负, 这主要是增加了阴极保护回路的欧姆压降。土壤电阻率越大, 干扰强度越大。这主要是因为土壤电阻率越大, 电流在土壤中的流动引起的欧姆压降越大, 而管道的电阻率极低。因而阳极发出的电流首先选择电阻最小的路径, 因此部分电流先进入非联合管道, 然后沿着管道流到某部位再离开管道, 流向被保护管道。土壤电阻率越大, 电流流入非联合管道的动力就越大。

从计算结果可以看出随着涂层面电阻的增加, 管道ON电势更负, 这主要是增加了电流流经涂层所引起的欧姆压降。涂层面电阻越大, 干扰强度越小。这也就是说明涂层面电阻越大防干扰能力越强。为了减小电流在土壤中流动所产生的欧姆压降 (IR) , 电流先从非联合保护管道的一个部位流入, 然后沿着管线流到某部位离开管线进入土壤, 最后流到保护管道。一般管道有保护涂层, 而保护涂层的面电阻很大。电流进出管道所引进的欧姆压降越大, 因而保护层面电阻越大, 干扰越小。

从计算结果可以看出可以看出随着两管道间距的增加, 管道ON电势越正, 更接近单管时的ON电势。这主要是随着两管道间距的增加, 两管道相互干扰的强度减小。一个极端的例子如果两管道相距足够远, 那么他们之间就不会有干扰。因而干扰强度也随着两管道距离的增加而降低。

3 结论

本文首先建立了并行管道的数值模型, 然后分析了土壤电阻率、管道涂层面电阻、两管道间距对并行敷设管道阴极保护干扰的影响。通过分析得出如下结论。

(1) 土壤电阻率越大, 干扰越严重。

(2) 管道涂层面电阻越小, 干扰越严重。

(3) 两管道间距越小, 干扰越严重。

参考文献

[1]宋武成.天然气与中国能源[J].石油化工技术经济, 2002, 18 (1) :7-13.

[2]代以斌, 孙春良, 单蕾, 等.长输油气管道并行敷设阴极保护防干扰分析[J].石油与天然气化工, 2010, 39 (6) :557-560.

[3]邱枫, 徐乃欣.用带状牺牲阳极对埋地钢管实施阴极保护时的电位和电流分布[J].中国腐蚀与防护学报, 1997, 17 (2) :10 6-110.

[4]杜艳霞, 张国忠.储罐底板外侧阴极保护电位分布的数值模拟[J].中国腐蚀与防护学报, 2007, 26 (6) :346-350.

[5]杜艳霞, 张国忠.土壤电阻率对罐底外侧阴极保护电位分布的影响[J].石油化工高等学校学报, 2007, 20 (1) :81-84.

[6]王向农.阴极保护进入数值模拟时代[J].防腐保温技术, 2011) 1) :32-33.

[7]ADE Y R, BAYNHAM J.ComputerSimulation as an aid to CP SystemDesign and Interference Prediction;pro-ceedings of the Proceedings of theCEOCOR 2000 conference, Brussels, Belgium, F, 2000[C].

[8]孙吉星.海洋结构物阴极保护优化模型及数值计算[D].中国海洋大学, 2006.

并行程序分析 第7篇

关键词:计算机云计算,SLIQ,并行算法

数目偏多的数据, 经由数据挖掘, 被归整和处理。陈旧的挖掘算法, 只可以输入那种规模偏小的数据量;若数据量递增, 那么这样的算法会缩减速率, 很难提升原有的运算成效。云计算框架下的运算, 能处理这种规模偏大的数据。若能摸索出并行化情形下的数据挖掘, 就可化解掉这样的疑难。SLIQ接纳了新颖的编程模型, 在既有的环境之下, 建构出决策规则情形中的数据挖掘。

1 新颖算法概述

建构在SLIQ框架下的新颖算法, 归属于决策树分类这种算法, 并凸显了代表性。这样的算法, 可处理数目偏多的数据;而陈旧的分类器带有的处理容量, 只能升至600KB左右。因此, 建构在SLIQ框架下的新颖算法, 打破了陈旧算法特有的瓶颈。经由改进的SLIQ, 带有凸显的分布特性, 能与现有的数据挖掘状态契合。

上世纪末这一时段内, 学者经由摸索, 创设出了新颖的SLIQ。这样的新算法, 速率很高, 且能被延展, 它建构在特有的模型之上, 即决策树这种模型。SLIQ可分出三个独特阶段, 即预处理用到的阶段、构建树的独特阶段、修剪树的独特阶段。预处理用到的阶段以内, 要排列出各类别数值带有的属性。在制备出来的类表以内, 对叶的那些节点索引, 朝向决策树搭配着的根节点。建构树用到的阶段以内, 采纳新颖的、递归调用必备的路径。修剪树用到的阶段以内, 特有的修剪算法, 描述的是独特的最小长度。

2 经由改进的新算法

2.1 独特的属性分裂路径

SLIQ框架下的新颖算法, 搭配着可伸缩的新指标。用这样的新指标, 替换掉旧有的信息量。这样一来, 就生成了最适宜的那种决策树。在计算体系带有的特征值时, 索引只考量类值现有的分布情形。对数值型的、带有连续性的独特字段, 在寻找出分裂点的路径中, 可设定出如下几步:设定一个特有的字段a, 经由排序, 可获取到独特数列, 含有m个数值。分裂这样的事件, 会在带有邻近特性的那些节点中产出, 因此, 就运算出了m种这样的可能性。选取数列涵盖着的中点, 当成备选情形下的分裂点。依循由小到大这样的次序, 选取出能用到的分裂点。在这之中, 最小点归属于最佳的备选数值。

对那些带有离散特性的独特字段, 要经由分裂测试, 选取出字段含有的所有子集。把原有的字段, 分出两个独特成分, 运算得来不同的索引。当选取到那个最小状态下的索引时, 就寻找到了最好的那个分裂点。然而, 要遍历字段涵盖着的一切子集, 会耗费掉偏多的时间。

2.2 并行化路径

经由改进, SLIQ框架下的新颖算法, 可以并行化路径。具体而言, 要把体系搭配着的一切类表, 存留在现有的处理机以内。在并行框架下, 建构树用到的阶段, 应被侧重探究, 而剪枝时段, 不会耗费掉偏多的时间。要创设出并行建树必备的路径, 就应寻找出最好的那个分裂点, 同时建构出能用到的新节点。

若要执行这样的分裂路径, 则要更替样本涵盖着的类表, 以及特有的直方图。直方图含有的独特字段, 可借助运算得来索引。还应借助特有的哈希表, 以便存留住分割点搭配着的两侧数值, 并供应并行节点必备的分隔根据。经由改进, SLIQ框架下的算法, 能存留偏多的内存, 提升原有速率;同时, 在很短时段内, 可生成期待中的目标数。

3 可用的改进途径

借助特有的编程模型, 改进了陈旧算法, 获取到SLIQ框架下的新算法。编程模型搭配着的函数, 会把各类别根节点既有的记录, 予以水平方位内的划分。这样一来, 就分出了N个等同规模之下的子集, 并获取到特有的数据块。对N个这样的子集, 增添现有的格式化特性。Map框架下的操作, 会经由扫描, 录入各类别的记录。在这以后, 分出同种类别下的key, 对应到精准的文件内。选取特有的模计算, 把这些文件, 搭配到既有的模型之上。

对那些带有连续属性的独特字段, 要依循由小到大这样的次序, 排列出字段涵盖着的属性值。与此同时, 要生成精准的直方图。初始数值, 被设定成零。要经由运算, 得来分裂点搭配着的索引数值。随时去更替现有的直方图, 对那些离散情形下的连续字段, 可以不排出次序, 也可以不去更替原有的直方图。初次扫描, 可归结出特有的直方图, 运算得来子集搭配着的索引数值。

SLIQ框架下的独特操作, 会依循既有的分裂点, 建构出可用的哈希表。这种表单内, 第m条独特记录, 就表征着源数据含有的第m个独特树节点。比对现有的输出数值, 选取出最小的那种索引, 关联起既有属性, 以及既有的数据表。对各类别工作站含有的偏小的索引, 比对它们搭配着的属性数值。这样一来, 就获取到了最小情形下的指标值, 它就归属于最好的那种分割点。经由年龄框架下的直方图, 可运算得来Age表征着的属性。经由遍历, 可获取到最好的那种分割点, 这就增添了运算实效。

参考文献

[1]杨长春, 沈晓玲.基于云计算的SLIQ并行算法研究[J].计算机工程与科学, 2012 (03) .

[2]王鄂, 李铭.云计算下的海量数据挖掘研究[J].现代计算机 (专业版) , 2009 (11) .

并行程序分析范文

并行程序分析范文(精选7篇)并行程序分析 第1篇关键词:OpenMP,并行程序,FDTD,影响因素在科学计算中,并行方式通常由于其较低的开销和较短...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部