一种基于tbb线程构建块的连续系统仿真多核并行方法

文档序号:6575519阅读:200来源:国知局

专利名称::一种基于tbb线程构建块的连续系统仿真多核并行方法
技术领域
:本发明涉及一种基于TBB线程构建块(ThreadBuildingBlocking)的连续系统仿真多核并行方法,属于计算机仿真与算法优化领域。
背景技术
:连续系统仿真广泛应用于航空、航天、气象和电子等领域。随着这些学科技术的发展,由此建立的仿真模型也日益复杂,仿真计算量不断加大。连续系统仿真通常使用微分方程组来建立数学模型,微分方程组有成熟的数值解法,如龙格-库塔法,亚当姆斯法等。但传统的串行方法在解决大规模问题时计算时间过长,难以满足仿真的实时性要求,有的复杂问题使用串行算法甚至无法求解。提高连续系统仿真速度的一种有效方法是采用并行技术,人们在连续系统微分方程组的并行化上做了大量工作,在串行算法的基础上提出了各种各样的并行算法。在早期的研究工作中,Nievergelt提出设置多个初始值进行并行计算,然后对计算结果进行修正的并行算法,Shampine和Watts提出了隐式板块方法和预估-校正执行方式,Miranker和Liniger也做了预估-校正法的并行研究工作,此外还给出了龙格-库塔法二阶、三阶的计算格式,并推导出了MIMD型龙格-库塔法计算公式,具体做法是采用逼近法来计算导数值以打断差值之间的相关链,并适当选择参数构造出稳定的并行计算格式。但是传统的并行算法实现方式繁杂,线程管理、数据交换等过程需要程序员管理,这使得并行程序的编写需要耗费大量的时间和精力,这就阻碍了并行技术在仿真计算中的应用。随着计算机技术向着多处理器及多核架构发展,单机上的并行数据处理成为可能。TBB是最新推出的多核处理器并行计算平台,基于任务的算法、容器和同步基元可简化并行应用程序的开发工作,它提供完善的提取模板、容器和类别支持并行处理器,可以和MPI、OpenMP等结合使用,是一种简单高效的并行方法。伹是,TBB和连续系统仿真结合的相关研究工作还处于初始阶段。
发明内容本发明的目的是为了解决上述问题,提出一种基于TBB线程构建块的连续系统仿真多核并行方法,提高连续系统仿真计算的速度,以缩短仿真研究的周期,满足仿真的实时性要求。连续系统仿真一般采用微分方程组建立模型,仿真计算的时间主要花费在微分方程组的求解上。本发明采用基于TBB的预估-校正并行算法,在该算法中,预估计算和校正计算是每一步积分计算中的主要内容,他们占据了仿真计算时间中的绝大部分。通过使用TBB并行技术,将预估计算和校正计算作为两个并行的子任务,为它们各分配一个线程,两个子任务在各自的线程上并行执行。TBB采用基于任务概念的封装,这使得并行方法的实现更为简易。通过相关的模版类,将并行计算的部分分配到各个单独的线程,预估计算和校正计算两个子任务分别在两个单独的线程中执行,这样可以充分利用多个处理器内核的资源,达到加快计算速度的目的。一种基于TBB线程构建块的连续系统仿真多核并行方法,主要包括以下步骤步骤一搭建TBB并行计算平台;步骤二构造并行ParaODES模版类;步骤三模型初始化;步骤四TBB任务调度初始化;步骤五仿真时间范围判断;步骤六调用并行模版类ParaODES;步骤七仿真结果传递;步骤八结束TBB任务调度。本发明的优点在于(1)本发明利用TBB实现连续系统仿真的并行化处理,提高了仿真运算的速度,从而满足仿真的实时性要求,縮短了仿真研究周期;(2)本发明利用TBB进行并行化处理,过程简单灵活,易于操作,具有很好的扩展性;(3)TBB采用多核架构,符合当今并行技术向多核平台发展的方向。图l是本发明的方法流程图2是本发明在两个处理内核P,、P2上并行执行示意图3是传统的串行方法和本发明所述的基于TBB的并行方法的运行时间曲线比较图。具体实施例方式下面将结合附图和实例对本发明作进一步的详细说明。本发明的一种基于TBB线程构建块的连续系统仿真多核并行方法,流程如图l所示,包括以下步骤步骤一搭建TBB并行计算平台;在计算机中置入TBB文件包,在VC目录中添加TBB的包含文件、库文件及可执行文件,最后添加TBB20—INSTALL_DIR的值为C:\Programfiles\Intel\TBB\2.0到系统环境变量。步骤二构造并行ParaODES模版类;预估计算和校正计算是可以并行处理的子任务,根据并行化处理对象的特点选择使用parallelJor模版类。parallel_for模版类是TBB中最常用的一个并行模版类,它把一个循环划分为多个块,然后在不同的线程中并行处理,它要求循环中不存在循环依赖。根据parallel—for模版编写需要的并行类,并将其命名为ParaODES模版类,该名称是由用户自己定义的,名称的异同对结果没有影响。ParaODES模版类的调用最终完成预估计算和校正计算。具体步骤为1、编写预估计算和校正计箅的程序。模版类ParaODES中的预估计算和校正计算按以下公式进行预估计算,+1(8尸-5^+4乂:2-D(1)H《)(2)校正计算/=^+^(9,+19",-5乂:2+/:3)(3)r=/(")(4)其中尸=化,力(5)乂〉/K)(6)式中力表示状态变量下一步的估计值,乂表示状态变量当前步的校正值,A表示状态变量上一步的校正值,y;p表示状态变量导数当前步的估计值,/:表示状态变量导数下一步的估计值,y>/:、>/:分别表示状态变量导数当前步、前一步、前两步和前三步的校正值,A表示当前时刻,"表示上一时刻。如图2所示,将式(1)、(2)和式(3)、(4)分别在两个处理内核P,、&上并行执行,在P,中计算(,然后根据(的值计算厶V,在P2中计算乂,然后根据乂的值计算7T。PpP2在结束了一步计算之后进行通讯,而没有在计算过程中进行通讯,从而提高了计算速度。根据上述的ParaODES模版类中的预估计算和校正计算,编写预估计算和校正计算程序,程序中预估计算和校正计算的部分必须是循环体结构,预估计算和校正计算本来不是循环结构,但可以改写为循环结构。例如在预估计算和校正计算程序前各自增加一个i-l或i=2的执行条件语句,通过判断循环变量i的值分别执行即可。预估计算和校正计算为循环体结构,是为了方便使用paralleLfor模版类。循环体结构中的代码要尽量使用局部变量或模版类ParaODES的成员变量,而不能使用全局变量,否则不仅不能加快运行速度,反而会增加程序运行时间。2、在模版类ParaODES的operator接口中将循环参数修改为blocked_range模板类。在模版类ParaODES中,operator接口是并行处理的主要部分,它对并行循环进行优6化,将最外层循环参数修改成TBB中定义的blockecLrange模板类,使之能够支持循环体内任务的并行划分,在调用并行计算的模板类ParaODES时,由模板类参数指定循环处理的数值范围以及任务粒度参数,循环体内实现预估计算和校正计算过程。并行计算模版类ParaODES构造完成。步骤三模型初始化;在仿真开始时,首先对仿真模型进行初始化,即设置连续系统微分方程组右函数、问题规模n,n为方程组中方程的数目、仿真总时间Tmax、积分步长h;导数、状态量、中间量的变量声明以及各变量赋初值。步骤四TBB任务调度初始化;TBB由任务调度器对象task—scheduler一init实现多任务的分配和并行计算,支持对多线程的划分。由于TBB任务调度的初始化会带来相对较大的额外开销,因此,只需进行一次初始化。在任务调度初始化以后,才可能进行连续系统仿真多核并^^计算。步骤五仿真时间范围判断;判断当前时间t是否超出仿真时间范围Tmax,若KTmax,则执行步骤六,否则执行步骤八。步骤六调用并行模版类ParaODES;调用步骤二中的ParaODES模版类完成预估-校正的并行计算,通过ParaODES模版类创建一个线程计算,+1的估计值,并根据,+1计算导数的估计值^;通过ParaODES模版类创建另一个线程并行计算乂的精确值,并根据乂计算导数的精确值尸;最终得到仿真结果乂°在上述过程中,需要用到的导数值当前步导数估计值y;p、前一步导数校正值y;:、前两步导数校正值/:和前三步导数校正值0并得到新的导数估计值y;:和导数校正值",计算厶p,和尸是为了能进行下一步仿真而进行的。'在连续系统仿真中,一般需要进行多步积分计算,通过循环调用ParaODES模版类来实现。步骤七仿真结果传递;将步骤六中的当前步导数估计值y;p、前一步导数校正值y;:、前两步导数校正值o前三步导数校正值《,和状态变量当前步的校正值,这五个参数的值传递给当前变量"后一步,即将/二的值传递给《,将《,的值传递给《,将r的值传递给《,将y;^的值传递给〃,将乂的值传递给>^,时间t增加一个单位长度。返回步骤五。'步骤八结束TBB任务调度。完成并行计算任务,结束TBB任务调度。和TBB任务调度初始化一样,TBB任务调度的结束也会带来较大的额外开销,所以本方法只进行一次TBB的初始化和结束,否则额外的时间开销会降低并行程序的运行速度。实施例并行处理的对象是如下所示的连续系统一阶微分方程组Wo)",o"'=1,2"""。式中>^2,..乂为状态变量,乂。为状态变量初始值,y,0。)为/。时刻的状态变量值,^为初始时间,t为时间,n代表方程组规模,即方程组所含方程数目。积分步长h设为O.Ol,仿真时间范围从0.04到20。分别采用传统的串行方法和本发明的TBB并行方法,在lntel酷睿2双核1.83GHz处理器上,进行连续系统仿真,结果如表1所示表1连续系统仿真结果<table>tableseeoriginaldocumentpage8</column></row><table>从表1可以看出分别采用传统的串行方法和本发明的TBB并行方法,在方程组规模分别为200、400、600、800的时候,并行方法加速比分别为1.04、1.22、1.42、1.73,并行方法加速比随着方程组规模的增大而增大。本发明的TBB并行方法微分方程的解算速度比传统的串行方法速度快。运行时间如图3所示,横坐标为方程数目,纵坐标为解算时间,从图中可以看出在方程组数目相同的情况下,本发明的TBB并行方法的解算时间要少,当方程数目扩大到800后,本发明的TBB并行方法的解算时间缩短到原来的57.58%,大大加快了方程的求解速度。通过对CPU利用情况的比较,可以得出并行化处理后,CPU的使用率得到了提高。串行算法的CPU最大使用率为70%,没有充分利用两个处理核心的资源,而使用TBB并行化处理后,以方程组规模为400时为例,CPU的最大使用率达到了100%,这就充分利用了多核CPU的计算能力,从而提高了连续系统仿真的速度。权利要求1、一种基于TBB线程构建块的连续系统仿真多核并行方法,其特征在于,包括以下步骤步骤一搭建TBB并行计算平台;在计算机中置入TBB文件包,在VC目录中添加TBB的包含文件、库文件及可执行文件,最后添加TBB20_INSTALL_DIR的值为C:\Programfiles\Intel\TBB\2.0到系统环境变量;步骤二构造并行ParaODES模版类;预估计算和校正计算使用parallel_for模版类,根据parallel_for模版构造并行类,并将其命名为ParaODES模版类;具体步骤为一、编写预估计算和校正计算的程序;模版类ParaODES中的预估计算和校正计算按以下公式进行预估计算<mathsid="math0001"num="0001"><math><![CDATA[<mrow><msubsup><mi>y</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo>=</mo><msubsup><mi>y</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>c</mi></msubsup><mo>+</mo><mfrac><mi>h</mi><mn>3</mn></mfrac><mrow><mo>(</mo><mn>8</mn><msubsup><mi>f</mi><mi>i</mi><mi>p</mi></msubsup><mo>-</mo><mn>5</mn><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>c</mi></msubsup><mo>+</mo><mn>4</mn><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>2</mn></mrow><mi>c</mi></msubsup><mo>-</mo><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>3</mn></mrow><mi>c</mi></msubsup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math></maths><mathsid="math0002"num="0002"><math><![CDATA[<mrow><msubsup><mi>f</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>t</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow></msub><mo>,</mo><msubsup><mi>y</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math></maths>校正计算<mathsid="math0003"num="0003"><math><![CDATA[<mrow><msubsup><mi>y</mi><mi>i</mi><mi>c</mi></msubsup><mo>=</mo><msubsup><mi>y</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>c</mi></msubsup><mo>+</mo><mfrac><mi>h</mi><mn>24</mn></mfrac><mrow><mo>(</mo><mn>9</mn><msubsup><mi>f</mi><mi>i</mi><mi>p</mi></msubsup><mo>+</mo><mn>19</mn><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>c</mi></msubsup><mo>-</mo><mn>5</mn><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>2</mn></mrow><mi>c</mi></msubsup><mo>+</mo><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>3</mn></mrow><mi>c</mi></msubsup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math></maths><mathsid="math0004"num="0004"><math><![CDATA[<mrow><msubsup><mi>f</mi><mi>i</mi><mi>c</mi></msubsup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>t</mi><mi>i</mi></msub><mo>,</mo><msubsup><mi>y</mi><mi>i</mi><mi>c</mi></msubsup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math></maths>其中<mathsid="math0005"num="0005"><math><![CDATA[<mrow><msubsup><mi>f</mi><mi>i</mi><mi>p</mi></msubsup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>t</mi><mi>i</mi></msub><mo>,</mo><msubsup><mi>y</mi><mi>i</mi><mi>p</mi></msubsup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math></maths><mathsid="math0006"num="0006"><math><![CDATA[<mrow><msubsup><mi>f</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>c</mi></msubsup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>t</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msubsup><mi>y</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow><mi>c</mi></msubsup><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow>]]></math></maths>式中yi+1p表示状态变量下一步的估计值,yic表示状态变量当前步的校正值,yi-1c表示状态变量上一步的校正值,fip表示状态变量导数当前步的估计值,fi+1p表示状态变量导数下一步的估计值,fic、fi-1c、fi-2c、fi-3c分别表示状态变量导数当前步、前一步、前两步和前三步的校正值,ti表示当前时刻,ti-1表示上一时刻;式(1)、(2)和式(3)、(4)分别在两个处理内核P1、P2上并行执行,在P1中计算yi+1p,然后根据yi+1p的值计算fi+1p;在P2中计算yic,然后根据yic的值计算fic;P1、P2在结束了一步计算之后进行通讯;二、在模版类ParaODES的operator接口中将循环参数修改为blocked_range模板类;将operator接口的最外层循环参数修改成TBB中定义的blocked_range模板类,使之能够支持循环体内任务的并行划分;并行计算模版类ParaODES构造完成;步骤三模型初始化;在仿真开始时,首先对仿真模型进行初始化,即设置连续系统微分方程组右函数、问题规模n、仿真总时间Tmax、积分步长h;导数、状态量、中间量的变量声明以及各变量赋初值,其中n为方程组中方程的数目;步骤四TBB任务调度初始化;步骤五仿真时间范围判断;判断当前时间t是否超出仿真时间范围Tmax,若t<Tmax,则执行步骤六,否则执行步骤八;步骤六调用并行模版类ParaODES;调用步骤二中的ParaODES模版类完成预估-校正的并行计算,通过ParaODES模版类创建一个线程计算yi+1p的估计值,并根据yi+1p计算导数的估计值fi+1p;通过ParaODES模版类创建另一个线程并行计算yic的精确值,并根据yic计算导数的精确值fic;最终得到仿真结果yic;在上述过程中,需要用到的导数值当前步导数估计值fip、前一步导数校正值fi-1c、前两步导数校正值fi-2c和前三步导数校正值fi-3c,并得到新的导数估计值fi+1p和导数校正值fic;步骤七仿真结果传递;将步骤六中的当前步导数估计值fip、前一步导数校正值fi-1p、前两步导数校正值fi-2c、前三步导数校正值fi-3c和状态变量当前步的校正值yic这五个参数的值传递给当前变量的后一步,即将fi-2c的值传递给fi-3c,将fi-1c的值传递给fi-2c,将fic的值传递给fi-1c,将fi+1p的值传递给fip,将yic的值传递给yi-1c;时间t增加一个单位长度;返回步骤五;步骤八结束TBB任务调度;完成并行计算任务,结束TBB任务调度。2、根据权利要求1所述的一种基于TBB线程构建块的连续系统仿真多核并行方法,其特征在于步骤二中所述的编写预估计算和校正计算程序,程序中预估计算和校正计算的部分是循环体结构,循环体结构中的代码使用局部变量或模版类ParaODES的成员变量。3、根据权利要求1所述的一种基于TBB线程构建块的连续系统仿真多核并行方法,其特征在于步骤四所述的TBB任务调度初始化具体为TBB由任务调度器对象task_scheduler_init实现多任务的分配和并行计算,支持对多线程的划分。全文摘要本发明公开了一种基于TBB的连续系统仿真多核并行方法,主要包括以下步骤步骤一,搭建TBB并行计算平台;步骤二,构造并行ParaODES模版类;步骤三,模型初始化;步骤四,TBB任务调度初始化;步骤五,仿真时间范围判断;步骤六,调用并行模版类ParaODES;步骤七,仿真结果传递;步骤八,结束TBB任务调度。本发明利用TBB实现连续系统仿真的并行化处理,提高了仿真运算的速度,从而满足仿真的实时性要求,缩短了仿真研究周期;利用TBB进行并行化处理,过程简单灵活,易于操作,具有很好的扩展性;TBB采用多核架构,符合当今并行技术向多核平台发展的方向。文档编号G06F9/46GK101639788SQ20091009240公开日2010年2月3日申请日期2009年9月10日优先权日2009年9月10日发明者唐力勇,妮李申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1