- 发布日期:2024-06-25 10:41 点击次数:107
本文描述在OpenFOAM中使用并行计算的一些问题。
1 查看CPU信息当要计算的问题规模较大时,通常需要采用多CPU并行计算以加快计算。在进行并行计算之前,可以利用命令lscpu查看本机的处理器信息。
如下图所示列出了本机的CPU信息。
图片
其中比较重要的信息包括:
CPU(s):列出了本机的逻辑CPU总数,如上图所示本机CPU共有24核Thread(s)per core:每核线程数。关闭超线程技术后,该参数为1;开启了超线程技术后,该参数通常大于1。Core(s) per socket:每个CPU的核数。如上图所示单颗CPU为12核Socket(s):CPU的数量。如上图所示本机上安装了2个CPU在计算过程中,最重要的信息是可以调用的最大CPU数量。如上图所示的计算机,能调用的最大CPU数量为24。
在Windows操作系统下,可以在任务管理器中查看当前CPU信息。如下图所示。
图片
CPU中的超线程技术(Hyper Threaded)并不能对OpenFOAM的求解计算产生帮助,该技术主要是为了提高CPU的多任务处理能力的,因此一般建议在进行计算之前,关闭CPU的超线程技术。使用超线程的虚拟内核有时会降低计算速度。
并行计算通常有两种形式:
共享内存体系,常见于工作站和便携式计算机分布式内存体系,常见于计算集群和超级计算机下面是共享内存体系示意图:
图片
共享内存体系下面为分布式内存体系示意图:
图片
2 OpenFOAM中的并行计算2.1 基本介绍OpenFOAM中的并行计算具备以下特点:
应用程序通常不需要并行特定的编码。并行编程实现对用户是隐藏的为了并行运行,您需要在系统中安装 MPI 库大多数应用程序和实用程序可以并行运行如果编写新的解算器,它将是并行的(大多数时候)已经能够在多达15000个处理器上并行运行现在可以使用单个或多个GPU运行OpenFOAM在OpenFOAM中并行计算,需要做以下一些工作;
分解计算区域。通常使用工具程序decomposePar对计算区域进行分解, 企业-能美威干果有限公司该工具需要使用字典文件decomposeParDict在处理器或计算节点之间分配作业。OpenFOAM通过使用MPI实现这一功能,肇东市嘉兆电动机有限公司每个处理器在分配给其的计算区域中单独运行求解重建计算区域。计算完毕后通常需要使用工具reconstrucPar完成这一工作。该工具无需任何的字典文件2.2 区域分解计算区域分解需要使用工具decomposePar及配套字典文件decomposePartDict来完成。
在使用的过程中, 安达市科齐服务器有限公司可以在case目录中使用命令foamGet decomposeParDict得到一个字典文件,该文件自动被放置到system文件夹中,如下图所示操作。
图片
该字典文件内容如下所示。
FoamFile{ version 2.0; format ascii; class dictionary; object decomposeParDict;}// * * * * * * * * * * * * * * * * * * * //// 指定参与计算的CPU数量,也是区域被分解的数量numberOfSubdomains 8; /* 可选的方法包括simple、hierarchincal、scotch、metis、manulal、multiLevel、structured等, 这里推荐使用scotch方法,该方法仅需要指定CPU数量即可。这里使用的是hierarchical方法,需要指定各个方向分解的数量*/method hierarchical; simpleCoeffs{ n (4 2 1); // 数量乘积等于numberOfSubdomains delta 0.001;} hierarchicalCoeffs{ n (4 2 1); // 数量乘积等于numberOfSubdomains delta 0.001; order xyz;}
更多关于区域分解方法的介绍,公司简介可以参阅源代码$WM_PROJECT_DIR/src/parallel/decompose/。
decomposePar命令无需任何参数,直接输入命令即可:
decomposePar
利用decomposePar可以将计算区域分解成多个子区域,如下图所示。
图片
在每个处理器目录内,都会存储网格信息、边界条件、初始条件以及该处理器计算结果数据。
2.3 并行运行网格分解后,就可以使用MPI进行并行运行。运行命令形式为:
mpirun -np <NPROCS> <application/utility> -parallel
其中:
np:为CPU的数量,必须与decomposeParDict文件中指定的参数numberOfSubdomains保持一致application/utility:应用程序或工具名称-parallel:并行运行标识,注意使用中不要忘记添加此标识2.4 区域组合当并行计算完毕后,可以使用命令reconstructPar将分散在各处理器目录下的数据收集汇总在一起。
这个命令很简单,不需要任何的参数:
reconstructPar
区域数据组合完毕后,即可进行后处理。
注意:区域组合非常消耗计算资源,且该命令无法在并行模式下运行。
”另一种替代方案为不使用reconstructPar,而在使用paraFoam时带上参数-builtin,即使用下面的命令:
paraFoam -builtin
启动后在paraView中选择Case Type为Decomposed Case。
图片
还有第三种处理方式。在每一个处理器文件夹中创建文件processorN.foam文件(这里的N为处理器编号),然后启动paraFoam并加载每一个processorN.foam文件。
注意:decomposePar与reconstructPar无法在并行模式下运行,因此在进行此类操作时,确保操作主机有足够多的内存,否则对于大规模问题容易发生死机。
在OpenFOAM的求解器与工具程序中,有一些程序不支持并行计算,这可以使用下面的命令进行查找:
find $WM_PROJECT_DIR -type f | xargs grep -sl 'noParallel'
从返回的搜索结果中可以看到那些程序无法使用并行运行。
图片
如最常用的工具decomposePar与reconstructPar无法使用并行,网格生成工具blockMesh也无法以并行模式运行。在使用这些程序时产品介绍,确保计算机上有足够的计算资源。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。