PyroSim:使用MPI的解决方案

FDS的MPI并行版本可与多个网格一起使用,减少PyroSim /  FDS解决方案的时间。从PyroSim 2019.1开始,MPI多进程执行行为的变化要求用户在网格数量逻辑处理器数量时手动将网格分配处理器。这篇文章将提供一些背景以及如何使用MPI加快解决方案的示例


在PyroSim 2019.1之前,用户单击“并运行FDS”,PyroSim就会为网格启动过程。如果网格(进程)的数量超过逻辑处理器数量,则FDS MPI实现将“循环”遍历应有进程,从而自动平衡处理器负载。PyroSim 2019.1中的FDS 6.7.1更改为新的FDS MPI实施。现在,如果启动的进程数现在被限制为逻辑处理器的数量。如果用户单击“并运行FDS”,这可能较长的运行时间由于网格都分配给了 And finally, 处理器,因此网格数量超过了处理器数量。


在本文中,我们将重点介绍在具有多核处理器的单台Windows计算机上运行MPI。我们将专注于一种的方法,但是用户应该认识到,可能会有选择可以进一步提高您的解决方案的速度。 


《FDS用户指南》在第3张“运行FDS”中对使用多个处理器有很好的的背景介绍。在下面的描述中,引号中的句子取自(PDF用户指南)。


核心与逻辑处理器

您将需要知道计算机的核心和逻辑处理器的数量。对于典型的Windows计算机,插槽有CPU。CPU通常具有多个核心,核心实质上是独立的处理单元,共享对点源和内存的访问。英特尔制造的处理器一种名为“超线程”的技术,该技术可使视在处理器的数量增加一倍。这些处理器成为逻辑处理器,以区别于物理核心。为了地运行FDS,启动的进程不得超过罗杰处理器的数量。


请注意,取决于处理器的配置,即时处理器具有超线程功能,逻辑核心的数量也可能不是物理核心数量的两倍。


要遭Windows中查找套接字、核心和逻辑处理器的数量,请启动任务管理器,然后单击“性能”选项卡。计算机的值将显示在CPU部分中,如图1所示。(顺便说一句,要更改“任务管理器”图,从显示单个处理器的总体CPU使用率,请邮件单击该图,然后选择“将图更改为”,然后点击逻辑处理器。)


                图1:任务管理器信息,显示CPU,核心和逻辑处理器的数量



请注意,处理器的数量取决于您的计算机,而进程的数量是在运行时定义的,表示在解决方案中使用多个可用处理器。


使用MPI的策略

要将MPI用于并行解决方案,您具有多个网格。可能有约束条件决定了网格的排列方式。如果对或进行建模,通常使用具有较小单元机的网格进行火灾,并使用原理原理火的具有较大单元的网格。如此长的打通大厅或新房的几何形状可能会拖加约束。风扇和HVAC流量的建模可能需要良好的网格分辨率。


在这些约束条件下,我们将描述两种基本方法,他们将接近 Best的求解时间。然后,我们将提供示例。


的方法:网格数小于或等于逻辑处理器数

对于 Easiest  的方法,请使用以下准则:

如果可能,请对问题进行网格划分,以使网格数等于计算机上的核心数。如果不可能,则使网格数小于或等于逻辑处理器数。

网格都应具有大约相同数量的像元


种方法:网格数超过逻辑处理器数

如果网格数量超过可用逻辑处理器的数量,则用户将网格手动分配给进程。然后将“运行FDS群集”选项用于解决方案。


目前,将网格分配给流程手动操作,在将FDS网格分配给的MPI 流程中进行了描述。使用以下准则:

根据解决方案的要求对问题进行网格划分。

确定您将使用多少进程。不错的起点是使用计算机上的内核数量。

将网格分配给过程。

分配网格,以使分配给过程的像元总数大致相同。请注意,进程的编号从零开始,因此八个进程将从0到7编号。

使用“运行FDS群集”选项运行模式,这将打开“群集FDS参数”对话框。指定进程数。如果在步骤3中分配网格是使用了八个过程,请在此对话框中指定8.

要运行模拟,亲自啊“群集FDS参数”对话框中单击“确定”。您可能需要输入计算机密码。另外,您可以按照以下说明设置密码以备将来使用。请参阅下面有关长时间运行问题的提示。

步骤2在图2和图3中说明,它们显示了使用8个过程对32个网格进行的模拟。在这种情况下,将网格1到4分配给MPI_PROCESS 0(图2 ),将网格5到8分配给MPI_PROCESS 1,直到网格32分配给MPI_PROCESS 7 (图3)。网格的线程数均指定为一(N_THPEADS 1)。


图4 中显示了步骤4,该图显示了“运行FDS群集”对话框以及如何分配8个进程。



如何验证处理器负载平衡

“在计算结束时,FDS将打印出名为CHID_cpu.csv的文件,该文件记录MPI进程主要例程中花费的CPU时间。例如,列标题VELO代表与计算流速有关的子例程。MASS代表与计算物种质量分数和密度有关的子例程。”


图5显示了一些网格未分配给过程的情况。结果,And finally 过程分配了剩余的网格。这是的总运行时间更长,因为随着时间的推移,大多数流程等待过载的流程。


图6显示了网格数和处理数相同,负载均衡的情况。


图5:案例的CHID-cpu.csv文件使用了16个进程并且有32个未分配的网格,末尾过程解决16个网格。

图6:使用8个进程并且有8个未分配的情况CHID-cpu.csv文件。过程的负载都是平衡的。

例子

使用MPI的解决方案

图7中的模型用于测试使用不同数量的网格和MPI过程的效果。几何形状保持不变,但案例使用1到32个网格。在模型中,案例的总数为0.8M,1.6M和6.4M。模型中没有指定的流量或火灾。顶部边界是OPEN 曲面。


使用的单元格可以增加求解时间。例如,如果您的模型具有1M个像元,则在X,Y和Z方向上将像元的大小减小1/2即可得到8个像元。此外,时间步长将减少两倍。因此,地将网格细化两倍,将运行时间增加大约16倍网格的原因。


     图7:用于测试网格的模型(具有0.8M至6.4M单元),没有火灾或障碍物,边界是open曲面。

                                                          溶液结束时间为10秒。


解决方案时间如图8所示。如上所述,计算机具有8个内核和16个逻辑处理器。对于网格处理器的数量与网格的数量相同,单击Run FDS Parallel即可运行解决方案。对于32网格情况,为16个过程中的过程分配了2个网格,解决方案使用Run FDS Cluster。


测试计算机具有8个核心。对于测试问题,Shortest 的解决时间是在MPI进程数量与核心数量(8个网格和8个核心)匹配的情况下。不能匹配MPI进程和核的数量总是会在很短的时间内完成,但这提供了应该给出的合理结果的指导。


您还可以从结果中看到,随着添加网格和关联的过程,收益递减。如果有一台服务器计算机可能具有多大32个或更多的物理核心,则可以通过同事运行多个模型或案例来使用计算资源。由于从4到8网格移动所获得的速度,因此您可以通过使用相同的16个内核同事运行4个4网格同时发生的问题,而不是每种情况都使用16网格来更快完成更多的总工作按顺序。


8:求解时间与网格的关系,该计算机具有16个逻辑处理,对于网格处理器的数量与网格的数量相同,对于32网格的情况,过程分配2个网格。


几种变化

我们将简要讨论此测试问题的三种变体。


一种情况是80万像元,16个网格和8个进程,进程有2个线程。运行时间为66.12秒,比 Best  时间58.37秒稍慢

种情况是0.8M单元,32个网格和8个过程,其中4各网格以线性模式分配给过程(图10)。这给出了78.05秒的运行时间,在此慢于 Best  时间58.37秒。

第三种情况是80万个像元,32个网格和8个过程,并以界面模式将4个网格分配给过程(图10)。运行时间为80.04秒,比 Best  时间58.37秒要慢。

对于该测试问题,显而易见的结论是,匹配的岩心和网格可以使时间 Shortest。


火灾模拟

的火灾模拟说明了火灾附近使用精致的单元格并在远离火灾的位置使用较大的单元格。该模型使用了8个网格。火的放热率为2MW。对于2兆瓦的火,D*/10=0.126536m,因此火周围网格的单元大小为12.5厘米。远离火源,使用25.0厘米的像元大小。使用1.5M个像元,软件具有200000个像元的网格均被使用,Mesh01的100000个像元除外。


                            图11:用于不同像元的设计模型

该溶液运行100秒。目视检查结果显示,跨小网格和大网格的网络边界平滑过渡。

      图12:在火灾模型中冒烟,注意,在具有不同像元大小的网格边界上注意到了较小变化



热门产品

2020-08-10 14:26
首页    技术文档    PyroSim:使用MPI的解决方案