使用 UCX

UCX 是一个通信库,主要用于 Mellanox InfiniBand 系统,建议在该系统上使用。该库可与 Simcenter STAR-CCM+ 的 Intel MPI 和 Open MPI 发行版一同在 Linux 系统上使用。

x86_64 上的 UCX 库选择

Simcenter STAR-CCM+ 随附了 UCX 1.8.0 和 1.18.1 版本分发。这是为了避免在旧版硬件上使用新版 UCX 时出现性能下降。使用 UCX 时,Simcenter STAR-CCM+ 会自动选定适当的版本,默认情况下,在 Linux 上与 Open MPI 和 Intel MPI 一同使用。自动选定的版本取决于可用网络硬件:

  • 在不支持动态连接 (DC) 传输的 InfiniBand 系统上(即,在 ConnectX-4 之前),将选择 UCX 1.8.0。
  • 在所有其他系统上,选择 UCX 1.18.1。

要查明 Simcenter STAR-CCM+ 正在使用哪个版本的 UCX,则在 starccm+ 命令中加入选项 -fabricverbose 并检查输出。

如果要本地安装 UCX 1.8.0 或更高版本,请遵循以下要求:

  • 本地库位置必须位于系统范围内的库路径中,或者必须使用 -ldlibpath 标志将其库位置传递给 Simcenter STAR-CCM+。
  • 必须将二进制位置添加到系统范围内的 $PATH 环境变量,以便使 Simcenter STAR-CCM+ 可以检测到正确的 UCX 版本。
  • 要避免使用捆绑的 UCX 分发版,必须将专家选项 -xsystemucx 传递给 Simcenter STAR-CCM+。

例如,如果在系统上自动选定“原有”UCX 分发版(即 1.8.0),但想要使用“现代”UCX 分发版(即 1.18.1),可以使用以下内容:

PATH=$([INSTALLDIR]/star/bin/map_ucx -distrib modern -binpath):$PATH [INSTALLDIR]/star/bin/starccm+ -xsystemucx -ldlibpath $([INSTALLDIR]/star/bin/map_ucx -distrib modern -libpath) <...>

每个 UCX 版本都以不同的设置分发。每个设置指代一个特定版本的 Mellanox OFED (MLNX_OFED, MOFED),设置根据它进行配置和构建。在运行时,将检测系统上安装的 MOFED 版本,并选择最合适的 UCX 设置。最合适的 UCX 设置是根据最接近的 MOFED 版本构建的,它并不比系统安装的 MOFED 版本更新。例如,在安装了 MOFED 4.8 的系统上,选择了 MOFED-4.6 设置。

UCX 设置列表如下:

  • MOFED-4.6
  • MOFED-4.9
  • MOFED-5.0
  • MOFED-5.1

所有设置 MOFED-4.9 及更高版本均基于启用上游库的 MOFED 分发(与原有 MLNX 库不同)构建,这是这些版本的默认 MOFED 安装模式。如果已将 MOFED 以非默认配置安装在系统中,可能必须使用系统 UCX 库(请参见上面的描述)。

aarch64 上的 UCX 库选择

在 aarch64 上,与 x86_64 相同的原则适用(请参见上面的描述)。但是,有以下例外情况:

  • 仅分发 UCX 1.18.1。
  • 通过 -xsystemucx 使用的本地安装必须是版本 1.10.0 或更高版本。

UCX 传输选择

UCX 支持不同的传输,具体取决于当前硬件和软件。使用 Intel MPI 时,UCX 传输选择由 Intel MPI 管理。使用 Open MPI 和早于 1.18.1 的 UCX 版本时,以下内容适用:

  • 如果在配备 Mellanox InfiniBand 硬件且进程数小于等于 256 的系统上使用了 UCX 结构(这是在未指定其他结构情况下的默认设置),则将显式选择 UD 传输,从而覆盖 UCX 的默认行为。
  • 在相同情况下,但使用的进程数大于 256,不会对 UD 传输进行限制,即允许所有 UCX 传输。
  • 在 256 进程阈值下观察消耗时间或内存消耗的差异时,应牢记该行为。
  • 可通过设置 UCX_TLS 环境变量替代应用于 UCX 传输的任何 Simcenter STAR-CCM+ 设置,例如 UCX_TLS=all 以允许所有可用 UCX 传输。
  • 有关详细信息,请参见 UCX 文档(在“常见问题 (FAQ)”下搜索网络功能)。

使用 Open MPI 和 UCX 版本 1.18.1 或更高版本时,以下内容适用:

  • 不会对 UCX 传输选择进行任何更改,这意味着 UCX 将自动选择传输,除非用户指定了 UCX_TLS。
  • 此方法可优化性能,但与强制 UD 传输相比,它可能会导致内存消耗增加(见上文)。
  • 如果必须保持较低的内存消耗(可能以牺牲性能为代价),请考虑使用 UCX_TLS=self,sm,ud 强制进行 UD 传输。

进一步的 UCX 调整

对于 UCX 1.18.1,UCX_MM_FIFO_SIZE 在 InfiniBand 系统上设为 64 以避免内存回归。仅当使用 Simcenter STAR-CCM+ 捆绑 UCX 分发版时,才会应用此设置。此外,可以通过将环境变量设为定制值来覆盖此设置。

UCX 1.8.0 的已知问题

UCX 版本 1.8.0 存在一个错误,当 TCP 传输与共享内存传输结合使用时,可能会导致数据损坏。在具有默认设置的 Simcenter STAR-CCM+ 中,UCX 仅在 Mellanox InfiniBand 系统上的并行运行中使用,因此只有在应用特殊用户设置强制将 UCX 用于受影响的传输时,才能发生此问题。

在模拟启动期间,尝试检测可能触发此错误的用户设置。Simcenter STAR-CCM+ 检测到此类设置时,会在输出窗口中生成警告。