Fluent 提供了多种工具来帮助用户优化并行计算的性能。用户可以使用并行检查功能来检查硬件的利用情况。为了确定并行求解器的工作效果,用户可以使用性能计量器测量计算和通信时间以及整体并行效率。用户还可以控制计算节点之间的通信量以优化并行求解器,并利用 Fluent 的自动负载平衡功能。
用户可以使用 Parallel 功能区选项卡中的 Check 命令来检查影响并行性能的各种因素。检查的目的是识别以下问题:
-
CPU 核心负载 -
CPU 时钟被限制 -
系统内存使用率过高 -
有更快的互连可用 -
分区不平衡(如果加载了有效网格)
1 检查并行性能
性能计量器允许用户查看计算过程中经过的wall clock时间以及消息传递统计信息。由于性能计量器始终启用,用户可以在计算完成后显示统计信息以访问它们。要查看当前统计信息,可以单击 Parallel 功能区选项卡中的 Usage 按钮(在 Timer 组框中)。
-
点击Ribbon工具栏中的按钮Parallel → Timer → Usage,性能统计信息将显示在控制台中。
要清除性能计量器,以便从未来的报告中消除过去的统计信息,可以单击 Parallel 功能区选项卡中的 Reset 按钮(在Timer 组框中)。以下示例演示了当前并行统计信息如何显示在控制台中:
Performance Timer for 1 iterations on 4 compute nodes
Average wall-clock time per iteration: 4.901 sec
Global reductions per iteration: 408 ops
Global reductions time per iteration: 0.000 sec (0.0%)
Message count per iteration: 801 messages
Data transfer per iteration: 9.585 MB
LE solves per iteration: 12 solves
LE wall-clock time per iteration: 2.445 sec (49.9%)
LE global solves per iteration: 27 solves
LE global wall-clock time per iteration: 0.246 sec (5.0%)
AMG cycles per iteration: 64 cycles
Relaxation sweeps per iteration: 4160 sweeps
Relaxation exchanges per iteration: 920 exchanges
Total wall-clock time: 4.901 sec
并行统计信息的描述如下:
-
Average wall-clock time per iteration
描述每次迭代的平均实际(wall clock)时间。 -
Global reductions per iteration
描述每次迭代的全局归约操作次数(例如,所有进程上的变量求和)。这需要所有进程之间的通信。全局归约是针对给定作业的所有进程的集合操作,将向量量(长度由进程或节点数决定)约简为标量量(例如,取某个量的和或最大值)。全局归约的次数不能从任何其他已知量中计算出来。这个数量通常取决于所使用的算法和所求解的问题。 -
Global reductions time per iteration
描述每次迭代的全局归约操作时间。 -
Message count per iteration
描述每次迭代所有进程之间发送的消息数量。这在通信延迟方面尤其重要,特别是在高延迟互连上。消息被定义为任意两个进程之间的单点对点发送和接收操作。这不包括全局集合操作,如全局归约。在域分解方面,消息是从管理一个子域的进程传递到管理另一个(通常是相邻的)子域的进程。每次迭代的消息数量通常取决于所使用的算法和所解决的问题。报告的消息数量是所有处理器的总和。
消息数量提供了一些关于通信延迟对并行性能影响的见解。较高的消息数量表明,如果使用高延迟互连,并行性能可能会受到更大的不利影响。以太网的延迟比 InfiniBand 高。因此,较高的消息数量会对以太网的性能产生比 InfiniBand 更大的不利影响。
-
Data transfer per iteration
描述每次迭代处理器之间通信的数据量。这在互连带宽方面很重要。每次迭代的数据传输通常取决于所使用的算法和所解决的问题。这个数量通常随着问题规模、分区数量和物理复杂性的增加而增加。
每次迭代的数据传输可能提供了一些关于通信带宽(速度)对并行性能影响的见解。确切的影响通常难以量化,因为它取决于许多因素,包括:数据传输与计算的比率,以及通信带宽与 CPU 速度的比率。数据传输的单位是字节。
-
LE solves per iteration
描述每次迭代求解的线性系统数量。这个数量取决于物理(非反应流与反应流)和算法(基于压力的求解器与基于密度的求解器),但与网格大小无关。对于基于压力的求解器,这通常是求解的传输方程数量(质量、动量、能量等)。 -
LE wall-clock time per iteration
描述用于线性方程求解器(即多重网格)的时间(wall clock时间)。 -
LE global solves per iteration
描述 AMG 求解器在最粗层次上的每次迭代的求解次数,其中整个线性系统被推送到单个处理器(n0
)。系统被推送到单个处理器以减少该层次上的求解时间。由于在较粗层次上的未知数较少,缩放通常不会受到不利影响。 -
LE global wall-clock time per iteration
描述线性方程全局求解的每次迭代时间(wall clock时间)。 -
AMG cycles per iteration
描述每次迭代的平均多重网格循环次数(V、W、灵活等)。 -
Relaxation sweeps per iteration
描述每次迭代所有层次上所有方程的松弛扫描(或迭代求解)次数。松弛扫描通常是 Gauss-Siedel 或 ILU 的一次迭代。 -
Relaxation exchanges per iteration
描述 AMG 松弛过程中处理器之间的求解通信次数。由于在较粗层次上将线性系统转移到单个节点/进程,这个数量可能少于扫描次数。 -
Time-step updates per iteration
描述每次迭代时间步长的子迭代次数。 -
Time-step wall-clock time per iteration
描述每次子迭代的时间。 -
Total wall-clock time
描述总的wall clock时间。
最相关的量是 Total wall clock time
。通过将这个量与串行分析中的量进行比较,可以用来评估并行性能(加速和效率)。
2 检查延迟和带宽
用户可以通过单击 Parallel 功能区选项卡中的 Latency 和 Bandwidth(Network 组框中),检查整个集群互连的延迟和带宽,以帮助识别影响 Fluent 可扩展性的任何问题。
根据使用的机器和处理器数量,控制台中将显示包含每个节点通信速度信息的表格。该表还将总结两个节点之间的最小和最大延迟。
在检查延迟时,参考以下示例:
Latency (usec) with 1000 samples [1.83128 sec]
------------------------------------------
ID n0 n1 n2 n3 n4 n5
------------------------------------------
n0 48.0 48.2 48.2 48.3 *50
n1 48.0 48.2 48.3 48.3 *48
n2 48.2 48.2 48.8 49.1 *53
n3 48.2 48.3 *49 48.6 48.5
n4 48.3 48.3 49.1 48.6 *50
n5 49.7 48.5 *53 48.5 49.7
------------------------------------------
Min: 47.9956 [n0<-->n1]
Max: 52.6836 [n5<-->n2]
------------------------------------------
在上表中,(*) 是该行中的最大值。延迟越小越好。
”
示例中有六个处理器(n0 到 n5)。n0 和 n1 之间的延迟为 48.0 。同样,n1 和 n2 之间的延迟为 48.2 。从表中可以看出,最小延迟发生在 n0 和 n1 之间,最大延迟发生在 n2 和 n5 之间。当用户在集群上未看到预期的加速时,检查延迟特别有用。
除了检查延迟,用户还可以通过 Parallel → Network → Bandwidth 检查带宽。控制台中将显示包含两个节点之间一秒钟内通信数据量信息的表格。该表还将总结两个节点之间的最小和最大带宽。
在检查带宽时,参考以下示例:
Bandwidth (MB/s) with 5 messages of size 4MB [4.36388 sec]
--------------------------------------------
ID n0 n1 n2 n3 n4 n5
--------------------------------------------
n0 111.8 *55 111.8 97.5 101.3
n1 111.8 69.2 98.7 111.7 *51
n2 54.7 69.2 72.9 104.8 *45
n3 111.8 98.7 72.9 64.0 *45
n4 97.6 111.7 104.8 *64 76.9
n5 101.2 50.9 45.5 *45 76.9
--------------------------------------------
Min: 45.1039 [n5<-->n3]
Max: 111.847 [n0<-->n3]
--------------------------------------------
在上表中,(*) 是该行中的最小值。带宽越大越好。
”
n0 和 n1 之间的带宽为 111.8 MB/s。同样,n1 和 n2 之间的带宽为 69.2 MB/s。表中指出,最小带宽发生在 n3 和 n5 之间,最大带宽发生在 n0 和 n3 之间。当用户在处理相对较大的案例时,检查带宽特别有用,因为这可以帮助用户了解可扩展性问题。
3 优化并行求解器
3.1 增加报告间隔
在 Fluent 中,可以通过增加残差输出/绘图或其他解监控报告的报告间隔来减少通信并提高并行性能。用户可以在 Run Calculation
中修改 Reporting Interval 的值。
请注意,用户将无法在每个报告间隔结束之前中断迭代。
”
3.2 使用GPU加速角系数计算
在使用 Surface to Surface (S2S) 辐射模型时,用户可以通过以下方法加速角系数的计算:
-
使用基于 Cluster to Cluster 的 Hemicube 方法 -
使用Ray Tracing 方法
对于加速的 hemicube 方法,使用 MPI/OpenMP/OpenCL 模型的组合来加速角系数的计算。无论启动了多少 MPI 进程,只有一个 MPI 进程/机器用于计算角系数。在每台机器上,一个 MPI 进程生成多个实际计算角系数的 OpenMP 线程。加速的 hemicube 进程数量将与 Fluent 进程数量相同。如果有 OpenCL 能力的 GPU 可用,则部分角系数计算将在 GPU 上以卸载模式使用 OpenCL 进行,以进一步加速计算。
要使用加速的 hemicube 方法,可以设置 View Factors and Clustering 对话框,然后输入以下文本命令来计算、写入和读取包含表面簇信息和角系数的文件:
/define/models/radiation/s2s-parameters/compute-clusters-and-vf-accelerated
系统会提示用户输入文件名、要使用的 GPU 数量以及 1 个 GPU 与 1 个 CPU OpenMP 线程的工作负载比率(基于 GPU 和 CPU 消耗的时间)。在角系数计算结束时,会打印出未来计算中使用的 GPU/CPU 工作负载比率的建议。
请注意,对于加速的 hemicube 方法,OpenCL 库应通过适当的环境变量(lnamd64 上的 LD_LIBRARY_PATH
或 win64 上的 %path%
)可访问,以便使用 GPU 进行角系数计算。默认情况下,在 lnamd64 上搜索 /usr/lib64
,但如果库安装在其他位置,则应在 LD_LIBRARY_PATH
变量中指定该位置。
在使用 GPU 卸载模式的加速光线追踪方法时,节点 0 上必须有一个(且只有一个) NVIDIA GPU 可用。NVIDIA Optix 库用于追踪光线。目前,Ampere GPU 不支持此方法。
要使用加速的光线追踪方法,可以设置 View Factors and Clustering 对话框,然后输入以下文本命令来计算、写入和读取包含表面簇信息和角系数的文件:
/define/models/radiation/s2s-parameters/compute-clusters-and-vf-accelerated
系统会提示用户输入文件名。
加速角系数计算不支持 CFF (.h5) 格式。
”
3.3 加速离散坐标 (DO) 辐射计算
加速的离散坐标 (DO) 辐射求解器比标准 DO 求解器计算速度更快。请注意,即使加速的 DO 求解器可能需要更多的迭代才能收敛,总体模拟时间也更短。如果在 Fluent 会话中设置了 NVIDIA GPGPU 的卸载模式,加速的 DO 求解器将通过使用 GPGPU 加速 DO 计算;在没有 GPGPU 的情况下,此求解器仍然可以使用 CPU 核心来加速 DO 计算。
在Radiation Model对话框中选择DO模型后,可以使用以下TUI命令启用加速DO求解器:
define/models/radiation/do-acceleration?
注意,加速DO求解器使用一阶迎风格式(并忽略用户在Solution Methods任务页面中为Discrete Ordinates空间离散格式所做的任何选择),以及1.0的显式松弛。
如果计划在加速DO求解器中使用GPGPU,建议在启动Fluent之前通过使用以下命令:nvidia-cuda-mps-control -d
运行NVIDIA的多进程服务器(MPS)。这可以提高多Fluent进程的GPGPU计算的鲁棒性和性能。然后在启动Fluent时,必须指定每台机器使用多少个GPGPU:可以在Fluent Launcher中使用**Solver GPGPUs per Machine (Offload Mode)**设置,或使用-gpgpu=ngpgpus
命令行选项。
请注意,使用GPGPU需要HPC许可证。
一旦Fluent会话运行,可以使用以下TUI命令查看和/或选择系统上的可用GPGPU:
-
parallel/gpgpu/show
显示系统上的可用GPGPU。
-
parallel/gpgpu/select
选择在卸载模式下使用的GPGPU。请注意,用户只能选择启动会话时在命令行或Fluent Launcher中指定的GPGPU数量。
目前,Ampere GPU在Windows平台上不支持加速辐射求解器。
加速DO模型也存在一些与其他设置不兼容的情况。当存在不兼容时,Fluent将在计算开始时自动恢复到标准DO求解器,并打印有关冲突的消息。
目前明确的不兼容包括:
-
壳体 -
轴对称问题 -
欧拉多相流 -
UDF指定的DOM源项 -
UDF指定的发射率加权因子 -
辐射的孔隙度缩放 -
Pixelated interior -
非各向同性散射相函数 -
非参与介质 -
非一致界面 -
仅支持迎风格式和1.0的显式松弛因子。
注:以上内容取自Fluent UserGuide
”
(完)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册