3.1.1. Open MPI v5.0.x 系列

本文件包含Open MPI v5.0.x系列的所有NEWS更新内容,按时间倒序排列。

3.1.1.1. Open MPI 版本 v5.0.8

Date:

2025年5月30日

  • 内部 PMIx 和 PRRTe 版本: - PMIx (v5.0.8)。仓库:https://github.com/openpmix/openpmix。提交哈希:907b1ccaeec61a1197f0ee5264d4fef20b257b84。 - PRRTE (v3.0.11)。仓库:https://github.com/openpmix/prrte。提交哈希:222f03fbb98b71abd293aa205b38fa9a38e57965

  • 功能增强 - UCC集合操作:改进了allgather、allgatherv、alltoall、alltoallv、gather、gatherv、scatter和scatterv操作中对MPI_IN_PLACE的处理 - UCX OSC:新增支持"no_locks"信息键以禁用锁表使用 - OFI MTL:增强CXI提供程序支持以获得更好的兼容性 - AARCH64:在aarch64操作组件中新增SVE检测与NEON并存 - Fortran:修复了公共符号大小和对齐问题以提高兼容性

  • 错误修复与小功能改进 - 大页内存池:修复了大页尺寸设置以优化内存管理 - 配置系统:修复了--with-prrte=internal选项的处理逻辑 - 文档:更新了共享内存与网络通信文档 - 构建系统:修复了OSX系统对flang编译器的支持 - 移除了未使用的spread贡献示例脚本 - 多项文档更新与改进 - 持续集成:从测试矩阵中移除了Ubuntu 18和RHEL 7系统 - 修复了共享内存组件中的类型不匹配错误 - 针对最新Fedora版本更新了Java配置 - 修复了UCX动态窗口中的内存区域引用计数问题

3.1.1.2. Open MPI 版本 v5.0.7

Date:

2025年1月14日

  • 内部 PMIx 和 PRRTe 版本: - PMIx (v5.0.5)。仓库:https://github.com/openpmix/openpmix。提交哈希:707920c99de946a5c3a1850da457340f38c0caf2。 - PRRTE (v3.0.8)。仓库:https://github.com/openpmix/prrte。提交哈希:f6f5c181c1dec317c31f61effd73f960ce2eac25

  • 将UCX版本要求更新至v1.9

  • 文档改进 - 更新了coll tuned规则文件文档以反映版本和功能变更。 - 更新了CUDA相关网络文档以保持一致性。 - 改进了mpirun选项的描述,包括--pmixmca--prtemca。 - 修复了mpirun手册页中的拼写错误和格式问题。

  • 功能增强 - 改进了MPI_Comm_create_from_groupMPI_Intercomm_create_from_groups的参数检查,以符合MPI 4.0标准。 - 通过添加区分器解决了PMIx_Group_construct调用中潜在的竞态条件问题。 - 修复了MPI_Wtime,使其相对于MPI_Init初始化计时,以实现精确的会话级测量。 - 在coll tuned规则文件中添加了对alltoall_algorithm_max_requests参数的支持,同时保持向后兼容性。 - 为coll tuned规则文件引入了版本标识符,以便更好地进行解析器处理。 - 调整了多个组件中的MCA变量作用域,允许通过MPI_T接口进行设置:coll adapt,ucc, han, basic, hcoll

  • 错误修复与小功能改进 - 确保单例正确创建自己的会话目录树。 - 修复社区Jenkins构建管道以正确处理分支提交。 - 解决mpi_f08 Fortran库中缺失的性能分析符号问题。 - 修正coll/cuda函数中的参数不匹配以避免类型问题。 - 修复Hurd系统上的构建问题。 - 移除rcache基础结构中未使用的部分。 - 修复oshmem基础段地址交换问题。 - 解决UCC集体回退问题。 - 更新Nvidia/Mellanox平台文件

3.1.1.3. Open MPI 版本 v5.0.6

Date:

2024年11月14日

  • 内部PMIx和PRRTe版本:

    • PMIx (v5.0.4)。代码库:https://github.com/openpmix/openpmix。提交哈希值:20ad9b16fe49ede4a76e7489bdf0e2ea05c3de95

    • PRRTE (v3.0.7). 代码库: https://github.com/openpmix/prrte. 提交哈希值: b2f4163e40a84fe777fa36dfbffa4db23d8d31dd.

    • 会话管理功能增强:

    • 终止控制:确保当对OPAL实用工具层的引用归零时,各类能正确终止。已新增冒烟测试来验证该行为。

    • 测试与持续集成新增内容:为会话管理引入了冒烟测试,并集成到macOS GitHub CI中,以确保跨平台的稳定性。

    • 识别来自同一实例而非同一通信器的请求,修复了Waitall/Waitany/Testall/Testany的问题。

    • 多重初始化/终止处理:改进了对会话多次初始化和终止的处理,解决了参数管理和会话销毁方面的问题。

    • CUDA与NVIDIA HPC编译器兼容性:

    • 流序分配:在opal/cuda中处理CUDA流序分配和分配主设备上下文的调整(Akshay Venkatesh)。

    • nvfortran 兼容性:配置脚本已更新以支持 NVIDIA 的 nvfortran 编译器,能够正确使用 -fPIC 标志编译共享库(Gilles Gouaillardet)。

    • CUDA内存地址管理:改进了CUDA应用程序中虚拟内存管理器(VMM)指针的处理,以防止运行时问题。

    • MPI通信与资源管理:

    • 信息复制:增强的MPI_Info_dup功能,确保在复制的信息对象间保持一致的键管理,支持更好的内存和资源处理。

    • OFI/初始化改进:重构了OFI通用组件的代码,以支持符合MPI 4标准的基于会话的初始化模型。

    • 资源泄漏修复:解决了多个组件中的内存泄漏和引用计数问题,以提升高负载环境下的内存管理和稳定性。

    • 详细锁定协议:修改了UFS组件中的默认文件锁定协议,以确保数据一致性,特别是在使用需要更广泛锁定的数据筛选操作时。

    • MPI_T接口增强:修改了MCA参数设置,允许通过MPI_T接口在运行时调整集合操作,为集合操作中的动态规则增加了灵活性。

    • 修正了多处文档中的拼写错误,并澄清了多个API参考中的参数设置,提升了最终用户的可读性和易用性。

3.1.1.4. Open MPI 版本 v5.0.5

Date:

2024年7月23日

注意

这是一个快速跟进版本,修复了v5.0.4在macOS(arm64)平台上无法通过内置Apple clang编译器(/usr/bin/gcc)编译的问题。v5.0.5相比v5.0.4的唯一改动就是修复了这个编译问题。

  • 内部 PMIx 和 PRRTe 版本:

    • PMIx (v5.0.3)。提交哈希值:8ab6d680b90afd6e61766220a8724065a1b554a7

    • PRRTE (v3.0.6)。提交哈希值:b68a0acb32cfc0d3c19249e5514820555bcf438b

  • 错误修复与变更

    • 修复了一个在arm64平台的macOS上使用Apple clang编译器时导致构建失败的拼写错误。 非常感谢Lisandro Dalcin报告此问题。

3.1.1.5. Open MPI 版本 v5.0.4

Date:

2024年7月19日

  • 内部PMIx和PRRTe版本:

    • PMIx (v5.0.3)。提交哈希值:8ab6d680b90afd6e61766220a8724065a1b554a7

    • PRRTE (v3.0.6)。提交哈希值:b68a0acb32cfc0d3c19249e5514820555bcf438b

  • 错误修复与变更

    • btl/ofi: 重试发布接收缓冲区

    • btl/uct: 检查某些uct函数的返回状态

    • fortran: 如果支持的话,使用 -Wl,-ld_classic

    • fortran: 通过配置选项 --with-mpi-moduledir 参数化Fortran MPI绑定模块文件的安装位置

    • fortran: 多项配置改进

    • use-mpi-f08: 在mpi_f08模块中添加缺失的子例程

    • pml/base: 移除冗余的ompi_mpi_thread_multiple副本

    • pml/cm: 在发送完成回调中释放数据类型对象

    • pml/ucx: 为所有工作线程创建传播MPI序列化线程模式

    • pml/ob1: 将事件数量设为MCA参数

    • oshmem/shmem: 修复了关于shmem中类型和未使用变量的警告

    • 为NEON和SVE ISA添加AARCH64 OP组件

    • 修复错误输出中的MPI函数名称

    • 修复MPI_Neighbor_alltoall{v,w}_init以处理NULL参数

    • 修复了intercomm创建中的一个错误

    • 修复ompi_comm_lookup函数中的一个bug,以处理部分就绪的通信器

    • 修复 ompi_comm_get_rproc 中的错误消息

    • 修复单字符文件名情况下的opal_basename函数

    • 修复rpm构建测试

    • 修复信息订阅机制和隐藏的信息键

    • 修复 ishrink/agree/iagree 中的 ulfm 错误

    • 改进libcuda.so查找命令以跟踪符号链接

    • 改进脚本封装器中的pkgconfig安装逻辑

    • 将默认的tar格式更改为tar-pax

    • 多项文档更新

  • 衷心感谢Open MPI社区的以下成员: Alex Margolin, Benjamin Kitor, Burlen Loring, Ethan Townsend, Geoffroy Vallee, Jeff Hammond, Junchao Zhang, Lisandro Dalcin, Nuno Nobre, Rainer Keller, Roie Danino, Thomas Vegas

3.1.1.6. Open MPI 版本 v5.0.3

Date:

2024年4月9日

  • 内部PMIx和PRRTe版本:

    • PMIx (v5.0.2)。提交哈希值:33e93469e1e1f69904ff3e3827394719aa6b3671

    • PRRTE (v3.0.5)。提交哈希值:3a70fac9a21700b31c4a9f9958afa207a627f0fa

  • 错误修复与变更

    • 修复HAN MPI_Scatter节点内数据计数和类型问题

    • 在btl/smcuda中添加缺失的写内存屏障

    • 修复MPI_Alltoallv和MPI_Ialltoallv的数据计数与类型检查

    • 通过检测默认的--with-cuda-lib值来增强cuda-aware构建

    • 优化ofi网卡选择逻辑

    • 修复了mtl/ofi中的一个非法内存访问错误

    • 修复了rocm加速器中的多个错误

    • 修复了oshmem中的一个双重释放错误

    • 添加缺失的oshmem头文件

    • 修复 btl/usnic 中未初始化的锁

    • 修复 file_open 中未初始化的互斥锁

    • 修复关于未使用的cid_base变量的编译器警告

    • 增强autogen子模块检查

    • 多项文档更新

  • 衷心感谢Open MPI社区的以下成员: Christoph Niethammer, Christoph van Wüllen, Jakub Klinkovský, Lisandro Dalcin

3.1.1.7. Open MPI 版本 v5.0.2

Date:

2024年2月6日

  • 内部PMIx和PRRTe版本:

    • PMIx (v4.2.8)。提交哈希值:d1c1ed0c2e64f19ad49291241a43630ea7fdce28

    • PRRTE (v3.0.3)。提交哈希值:e383f5ad70c2633420d3425e9fb67e69b6bfd9c4

    注意

    由于Open MPI v5.0.2版本的发布时间安排,其内部捆绑的PMIx和PRRTE版本与Open MPI v5.0.1保持一致:PMIx v4.2.8和PRRTE v3.0.3。因此,新版PMIx和PRRTE中的变更与错误修复未包含在Open MPI v5.0.2中,主要包括:

    PRRTE

    • 修复map-by pe-list选项

    • 使用pmix_path_nfs检测共享文件系统

    • psets: 修复了PMIX_QUERY_PSET_MEMBERSHIP查询的一些问题。 PMIX_QUERY_PSET_MEMBERSHIP查询的错误修复。

    PMIx

    • 恢复默认设置以在Git仓库中启用开发检查

    • 防止mca_base_param_files环境变量定义为空

    • PMIx_Query_info: 移除了重复的PMIX_RELEASE

    • 对于非开发检查构建,不要添加no-unused-parameter

    • 在将宏转换为函数时转换几个参数

    • 修复了从未定义排名“get”的另一个问题点

    • 修复未定义排名的键的“get”操作

    • 解决栈变量和realloc的问题

    • 恢复对共享文件系统检测的支持

    • 修复README中的失效链接

  • 错误修复与变更(按时间顺序排列)

    • 修复fs/lustre组件的构建问题

    • 修复mtl/ofi多线程竞争条件错误

    • 根据MPI 4.0标准添加缺失的Fortran性能分析接口

    • 允许在opal/accelerator中进行零大小数据拷贝

    • 修复了btl/ofi和mtl/ofi提供程序选择的一个错误

    • 正确初始化 mca_rcache_base_module_t 成员

    • 修复单例启动时的段错误

    • 添加对GCC13的支持,并保持MacOS兼容性

  • 衷心感谢Open MPI社区成员,包括: Erik Schnetter

3.1.1.8. Open MPI 版本 v5.0.1

Date:

2023年12月20日

  • 内部PMIx和PRRTe版本:

    • PMIx (v4.2.8)。提交哈希值:d1c1ed0c2e64f19ad49291241a43630ea7fdce28

    • PRRTE (v3.0.3)。提交哈希值:e383f5ad70c2633420d3425e9fb67e69b6bfd9c4

  • 错误修复与变更(按时间顺序排列)

    • 与文档相关的多项更新和变更

    • 修复了一系列编译器警告

    • 会话:修复Fortran MPI_Session_get_nth_pset接口的问题

    • 正确访问通信器名称为MSGQ

    • accelerator/cuda: 修复makefile.am中的错误,防止在非标准位置出现链接问题

    • btlsmcuda: 修复makefile的问题

    • 修复rcache/gpusm和rcache/rgpsum

    • 正确处理MPI_COMM_WORLD上的属性。

    • 修复了以下组件中的轻微内存泄漏问题: btl/tcp、mca_base_framework、ob1

    • 修复递归互斥锁的静态初始化问题

    • Spack: 修复dlopen符号缺失问题

    • opal/mca/accelerator: 修复ROCm 6.0兼容性问题

    • opal_var_dump_color_keys: 修复数组溢出问题

    • SHMEM_LOCKS: SHMEM锁的MCS实现

    • 配置工具:支持 flang-new

    • 更新“display_map”信息键的处理

    • dpm: 更新PMIX属性

  • 衷心感谢Open MPI社区的以下成员: Tony Curtis、David Edwards Linaro、Niv Shpak 的贡献。

3.1.1.9. Open MPI 版本 5.0.0

Date:

2023年10月25日

MPIR API 已被移除

正如2017年夏季所宣布的,Open MPI从5.0.0版本开始已移除对基于MPIR工具的支持。

Open MPI 现在使用 PRRTE 运行时环境,该环境支持 PMIx 工具 API(取代传统的 MPIR API)来 调试并行作业。

仍需要旧版MPIR支持的用户,请参阅 https://github.com/hpc/mpir-to-pmix-guide获取更多信息。

建议使用Zlib以获得更好的性能

PMIx 可选择性地使用 Zlib 来压缩大数据流。相比不使用压缩,这可能会带来更快的启动时间和更小的内存占用。

Open MPI社区建议在构建PMIx时启用Zlib支持,无论您使用的是外部安装的PMIx还是Open MPI发行版压缩包中自带的PMIx。

请注意,虽然Zlib库可能默认存在于许多系统中,但构建支持Zlib的PMIx所需的Zlib头文件,在构建PMIx之前可能需要单独安装。

警告

Open MPI 已更改其构建和链接必需的第三方软件包的默认行为: LibeventHardware LocalityPMIxPRRTE

  1. 与之前版本的Open MPI不同,Open MPI 5.0及后续版本将优先选择符合我们版本要求的外部软件包,即使它比我们的内部版本更旧。

  2. 为了简化依赖管理,Open MPI v5.0.x捆绑的所有必需软件包都将安装在Open MPI的安装前缀目录下,且不会进行名称混淆。

    例如,如果找不到有效的Libevent安装,Open MPI因此构建其捆绑版本时,会在Open MPI的安装目录中安装一个libevent.so。这与之前的版本不同,在旧版本中Open MPI会对Libevent符号进行名称混淆,然后静态地将该库链接到libmpi.so中。

  • 内部PMIx和PRRTe版本:

    • PMIx 发布标签 v4.2.7。提交哈希值:57c405c52ad76bab0be9f95e29a6df660673081e

    • PRRTE 发布标签 v3.0.2。提交哈希值:1552e36f0852bbc6d901ec95983369f0a3c283f6

  • v5.0.0版本的其他重要更新:

    • MPI-4.0 更新与新增内容:

      • 已添加对MPI会话的支持。

      • 新增了使用持久发送和持久接收的分区通信功能。

      • MPI_命名空间中新增了持久集合操作 (这些功能之前是通过MPIX_前缀提供的)。

      • 新增了MPI_Isendrecv()及其变体函数。

      • 新增了对MPI_Comm_idup_with_info()的支持。

      • 新增了对MPI_Info_get_string()的支持。

      • 新增支持 initial_error_handlerERRORS_ABORT 基础架构。

      • MPI_COMM_SELF添加了未绑定错误的错误处理。

      • 使MPI_Comm_get_info()MPI_File_get_info()MPI_Win_get_info()符合标准规范。

      • 移除了通信器、文件和窗口上未知/被忽略的信息键。

      • 添加了MPI_COMM_TYPE_HW_GUIDEDMPI_COMM_TYPE_HW_GUIDED的初始实现。

      • MPI_Info_get()MPI_Info_get_valuelen() 现已弃用。

      • 当对非阻塞发送请求调用MPI_Cancel()时,发出弃用警告。

    • 新功能:

      • 已添加ULFM容错支持。详见ULFM部分

      • 现在ofi MTL中已支持CUDA。

      • 新增了一个线程框架,支持使用不同的线程库构建Open MPI。目前支持ArgobotsQthreads和Pthreads。请参阅configure命令中的--with-threads选项。感谢Shintaro Iwasaki和Jan Ciesko对此功能的贡献。

      • 新增线程本地存储API:移除TLS结构的全局可见性,并支持动态TLS处理。

      • 新增了Accelerator框架。原有的CUDA专用代码被替换为通用框架,该框架标准化了各种设备特性,如拷贝操作或指针类型检测。这使得各类设备(如新引入的ROCm加速器组件)能够以模块化方式实现。重新设计后,Open MPI构建版本可在不依赖CUDA库的情况下默认启用CUDA支持。

      • 为AArch64架构新增了加载链接(load-linked)和条件存储(store-conditional)原子操作支持。

      • ompio组件添加了原子性支持。

      • osc/rdma: 增加了对MPI最小对齐键的支持。

      • memory_patcher添加检测补丁内存的能力。感谢Rich Welch的贡献。

      • coll/ucc: 新增了对 MPI_Scatter()MPI_Iscatter() 集合操作的支持。

      • 新增了基于论文《Sparbit:一种新型对数成本且数据局部性感知的MPI Allgather算法》的Allgather和Allgatherv新算法。默认算法选择规则保持不变;如需使用这些算法,请在mpirun命令中添加:--mca coll_tuned_allgather_algorithm sparbit和/或--mca coll_tuned_allgatherv_algorithm sparbit。感谢Wilton Jaciel Loch和Guilherme Koslovski的贡献。

    • 传输更新与改进

      • 单边通信:

        • 针对tcp BTL的许多MPI单边和RDMA仿真修复。

          本补丁系列修复了在使用--mca osc rdma --mca btl tcp(即TCP支持单边MPI调用)运行时出现的多个问题。

        • 针对uct BTL的多项MPI单边通信修复。

        • 为单边通信组件ucx添加了对acc_single_intrinsic的支持。

        • 移除了传统的pt2pt单边通信组件。用户现在应该使用rdma单边通信组件替代。rdma组件将使用BTL组件(例如TCP BTL)来实现单边通信。

      • 更新了tcp BTL,使用图解法进行对等节点间的全局接口匹配,以提升MPI_Init()的连线建立性能。

      • OFI

        • 增强了对HPE SS11网络的支持。

        • 新增了缓存绕过机制。这修复了与Libfabric的冲突问题,因为Libfabric自身带有注册缓存。该机制添加了一个绕过标志,可用于已知拥有自身注册缓存的提供者。

      • 共享内存:

        • 更新新的sm BTL,使其不在用户命名空间中使用Linux跨内存附加(CMA)。

        • 修复了在使用新的sm BTL时,当编译启用了Linux跨内存附加(XPMEM)功能时出现的崩溃问题。感谢George Katevenis报告此问题。

      • 更新了-mca pml选项,现在仅接受单个PML而非列表。

    • 弃用和移除的内容:

      • 传统的sm(共享内存)BTL已被移除。新一代共享内存BTL vader取代了它,并已重命名为smvader仍可作为别名使用)。

      • ORTE,底层的Open MPI启动器已被移除,并替换为PMIx参考运行时环境(PRTE)。

      • Open MPI 已移除对 PMI 的支持;现在仅支持 PMIx。感谢 Zach Osman 的贡献。

      • 以下组件已被移除,并由UCX支持替代:PML yalla、PML mxm、SPML ikrit

      • MTL psm 组件已被移除,不再受支持。

      • 移除了所有检查点重启(C/R)支持的残留代码。

      • 现在仅支持通过符合C11标准的编译器使用32位原子操作。

      • 显式禁用对 GNU gcc < v4.8.1 的支持(注意:RHEL 7 中包含的默认 gcc 编译器版本为 v4.8.5)。

      • 移除了多种原子操作支持:S390/s390x、Sparc v9、带CMA支持的ARMv4和ARMv5架构。

      • MPI C++绑定已被移除。

      • mpirun 的选项 --am--amca 已被弃用。

      • 贡献库libompitrace已被移除。该库功能不完整且无人维护。如有需要,可在v4.x系列中找到。

      • rankfile格式不再支持物理处理器位置,仅支持逻辑处理器位置。

      • 32位构建已被禁用。不再支持在32位环境中构建Open MPI。32位支持在v4.x系列中仍然可用。

    • 其他更新和错误修复:

      • 将Open MPI更新为使用ROMIO v3.4.1版本。

      • 添加缺失的MPI_Status转换子程序: MPI_Status_c2f08()MPI_Status_f082c()MPI_Status_f082f()MPI_Status_f2f08()以及 PMPI_*相关子程序。

      • MPI模块:为Fortran添加了mpi_f08 TYPE(MPI_*)类型。感谢George Katevenis的报告和对补丁的贡献。

      • 默认的原子操作已更改为使用GCC,C11作为备选方案。C11原子操作会导致顺序内存排序,这在大多数情况下并不理想。

      • 默认构建模式已从将Open MPI组件构建为动态共享对象(DSO)更改为静态包含在各自的库中。

        重要提示

        这对打包人员有重要影响。请务必阅读GNU Libtool依赖扁平化小节。

      • 修复了多种数据类型相关的错误并进行了性能优化。

      • 修复了多个打包/解包相关的错误并进行了性能优化。

      • 多项OSHMEM错误修复与性能优化。

      • 感谢Jeff Hammond、Pak Lui、Felix Uhl、Naribayashi Akira、Julien Emmanuel和Yaz Saito的宝贵贡献。

    • 文档更新与改进:

      • Open MPI 已整合并转换其所有文档,以使用 ReStructured TextSphinx

        • 生成的文档现已托管在 https://docs.open-mpi.org (通过 ReadTheDocs)。

        • The documentation is also wholly available offline via Open MPI distribution tarballs, in the docs/_build/html directory.

      • 来自Open MPI社区的众多成员为整体文档工作做出了贡献——不仅仅是那些在Git提交日志中列出的人。事实上,许多Open MPI核心开发者贡献了他们的时间和精力,同样还有相当大一批非核心开发者(例如那些仅参与帮助文档改进的人员),包括(但不限于):

        • 拉克伦·贝尔

        • 西蒙·伯恩

        • 塞缪尔·赵

        • 托尼·柯蒂斯

        • Lisandro Dalcin

        • Sophia Fang

        • 里克·格莱茨

        • 科尔顿·卡姆斯

        • 罗伯特·兰菲尔德

        • 尼克·帕皮奥尔

        • 卢兹·帕斯

        • 亚历克斯·罗斯

        • 郝彤

        • 米切尔·托帕洛格鲁

        • 吴思雨

        • 方聪 尹

        • 赛斯·泽格尔斯坦

        • 张艺欣