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_group和MPI_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 已更改其构建和链接必需的第三方软件包的默认行为: Libevent、Hardware Locality、PMIx 和 PRRTE。
与之前版本的Open MPI不同,Open MPI 5.0及后续版本将优先选择符合我们版本要求的外部软件包,即使它比我们的内部版本更旧。
为了简化依赖管理,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_handler和ERRORS_ABORT基础架构。为
MPI_COMM_SELF添加了未绑定错误的错误处理。使
MPI_Comm_get_info()、MPI_File_get_info()和MPI_Win_get_info()符合标准规范。移除了通信器、文件和窗口上未知/被忽略的信息键。
添加了
MPI_COMM_TYPE_HW_GUIDED和MPI_COMM_TYPE_HW_GUIDED的初始实现。MPI_Info_get()和MPI_Info_get_valuelen()现已弃用。当对非阻塞发送请求调用
MPI_Cancel()时,发出弃用警告。
新功能:
已添加ULFM容错支持。详见ULFM部分。
现在
ofiMTL中已支持CUDA。新增了一个线程框架,支持使用不同的线程库构建Open MPI。目前支持Argobots、Qthreads和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的贡献。
传输更新与改进
单边通信:
针对
tcpBTL的许多MPI单边和RDMA仿真修复。本补丁系列修复了在使用
--mca osc rdma --mca btl tcp(即TCP支持单边MPI调用)运行时出现的多个问题。针对
uctBTL的多项MPI单边通信修复。为单边通信组件
ucx添加了对acc_single_intrinsic的支持。移除了传统的
pt2pt单边通信组件。用户现在应该使用rdma单边通信组件替代。rdma组件将使用BTL组件(例如TCP BTL)来实现单边通信。
更新了
tcpBTL,使用图解法进行对等节点间的全局接口匹配,以提升MPI_Init()的连线建立性能。OFI
增强了对HPE SS11网络的支持。
新增了缓存绕过机制。这修复了与Libfabric的冲突问题,因为Libfabric自身带有注册缓存。该机制添加了一个绕过标志,可用于已知拥有自身注册缓存的提供者。
共享内存:
更新新的
smBTL,使其不在用户命名空间中使用Linux跨内存附加(CMA)。修复了在使用新的
smBTL时,当编译启用了Linux跨内存附加(XPMEM)功能时出现的崩溃问题。感谢George Katevenis报告此问题。
更新了
-mca pml选项,现在仅接受单个PML而非列表。
弃用和移除的内容:
传统的
sm(共享内存)BTL已被移除。新一代共享内存BTLvader取代了它,并已重命名为sm(vader仍可作为别名使用)。ORTE,底层的Open MPI启动器已被移除,并替换为PMIx参考运行时环境(
PRTE)。Open MPI 已移除对 PMI 的支持;现在仅支持 PMIx。感谢 Zach Osman 的贡献。
以下组件已被移除,并由UCX支持替代:PML
yalla、PMLmxm、SPMLikrit。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更新为使用
ROMIOv3.4.1版本。添加缺失的
MPI_Status转换子程序:MPI_Status_c2f08()、MPI_Status_f082c()、MPI_Status_f082f()、MPI_Status_f2f08()以及PMPI_*相关子程序。MPI模块:为Fortran添加了
mpi_f08TYPE(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 Text 和 Sphinx。
生成的文档现已托管在 https://docs.open-mpi.org (通过 ReadTheDocs)。
The documentation is also wholly available offline via Open MPI distribution tarballs, in the
docs/_build/htmldirectory.
来自Open MPI社区的众多成员为整体文档工作做出了贡献——不仅仅是那些在Git提交日志中列出的人。事实上,许多Open MPI核心开发者贡献了他们的时间和精力,同样还有相当大一批非核心开发者(例如那些仅参与帮助文档改进的人员),包括(但不限于):
拉克伦·贝尔
西蒙·伯恩
塞缪尔·赵
托尼·柯蒂斯
Lisandro Dalcin
Sophia Fang
里克·格莱茨
科尔顿·卡姆斯
罗伯特·兰菲尔德
尼克·帕皮奥尔
卢兹·帕斯
亚历克斯·罗斯
郝彤
米切尔·托帕洛格鲁
吴思雨
方聪 尹
赛斯·泽格尔斯坦
张艺欣