如果你想跟随这个教程来尝试这个功能,可以下载相关的示例文件。
在火灾动力学模拟器(FDS)的典型建筑设计计算中,需要模拟大体积空间。为描述此计算体积,整体体积的一个或多个子区域被称为”网格(mesh)”,在输入文件中通过 &MESH 条目定义。在许多情况下,需要多个不同分辨率的网格来正确定义模拟的计算域。
大多数现代计算机每个处理器有多个”核心”或”线程”,通过消息传递接口(MPI)功能,FDS 允许使用 MPI_PROCESS 关键字将每个网格分配到特定线程。此功能允许将任意数量的网格同时分配到同一处理器,以提高计算效率。
MPI_PROCESS 和网格分配
有关 MESH 记录上 MPI_PROCESS 和 N_THREADS 参数的更多信息,可在 FDS 用户指南第 6.3.3 节”多网格”中找到。以下是该部分相关内容的引用:
通常在 MPI 计算中,每个网格分配其自己的进程,每个进程分配其自己的处理器。然而,可以将多个网格分配到单个进程,也可以将多个进程分配到单个处理器。
考虑一个包含六个网格的案例:
&MESH ID='mesh1', IJK=…,XB=…,MPI_PROCESS=0 / &MESH ID='mesh2', IJK=…,XB=…,MPI_PROCESS=1 / &MESH ID='mesh3', IJK=…,XB=…,MPI_PROCESS=1 / &MESH ID='mesh4′, IJK=…, XB=…, MPI_PROCESS=2 / &MESH ID='mesh5', IJK=…,XB=…,MPI_PROCESS=3 / &MESH ID='mesh6', IJK=…,XB=…,MPI_PROCESS=3 /
参数 MPI_PROCESS 指示 FDS 将该特定网格分配到给定进程。在此案例中,只启动编号为 0 到 3 的四个进程。进程需要按升序调用,从 0 开始。
为什么要这样做?假设您只有四个处理器可用于此作业。通过只启动四个进程而不是六个,可以节省时间,因为 mesh2 和 mesh3 可以直接相互通信,而无需使用 MPI 调用通过网络传输数据。mesh5 和 mesh6 同理。从本质上讲,就好像这些网格对是邻居,不需要通过邮政系统互发邮件,只需走几步到隔壁即可。
PyroSim 中的网格分配功能

PyroSim 之前版本不允许在 MESH 行上使用高此进行阶记录。此限制要求用户从 PyroSim 导出 FDS 输入文件,在文本编辑器中手动编辑以添加 MPI_PROCESS 参数,然后从命令行启动 FDS 模拟。此流程无法利用通过 PyroSim 启动和监控模拟的简便方法。
在 PyroSim 2015.4.1208 中,网格编辑对话框的高阶选项卡中添加了附加字段表格。此新功能允许将附加的 MPI 和 OpenMP 参数添加到 PyroSim 中的每个 MESH 行,无需导出文件后手动编辑并从命令行运行。
使用 Run FDS Cluster 选项

重要说明:PyroSim 中的Run FDS Parallel 选项会自动将 MPI 进程数设置为等于模型中的网格数。要在 PyroSim 中使用高阶 MPI_PROCESS 功能,需要控制模拟启动的 MPI 进程总数。建议使用Run FDS Cluster 选项而不是Run FDS Parallel。
在图 2 中,可以看到如何使用单个主机名表示本地计算机。虽然右侧列表中显示 8 个网格,但该主机的进程数被设置为 4。在这种情况下,将启动 4 个进程,每个进程将按 MPI_PROCESS 参数指定的方式分配 2 个网格。
总结
此类功能改进了 PyroSim 的内置能力,为用户设置和运行 FDS 模拟节省了时间和精力。通过合理分配网格到 MPI 进程,用户可以更有效地利用多核计算资源,特别是在网格数量多于可用处理器数量时,可以显著减少进程间通信开销。
-e1750215042767.png)