吾生有涯 学海无涯
析模有界 知识无界

Fluent|检查和提升并行性能

内容纲要

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 功能区选项卡中的 LatencyBandwidthNetwork 组框中),检查整个集群互连的延迟和带宽,以帮助识别影响 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 ClusterHemicube 方法
  • 使用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之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《Fluent|检查和提升并行性能》
文章链接:https://www.topcfd.cn/39136/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册