3.1.2. Open MPI v4.1.x 系列
本文件包含Open MPI v4.1.x系列的所有NEWS更新内容,按时间倒序排列。
3.1.2.1. Open MPI 版本 4.1.6
- Date:
2023年9月
修复XCode 15的配置问题。
将嵌入式PMIx更新至3.2.5版本。PMIx 3.2.5修复了CVE-2023-41915漏洞。
注意
Open MPI的早期版本(及其关联的PMIx实现)不受此CVE影响,因为Open MPI从不会代表非特权用户使用提升权限。我们进行反向移植此变更,既因为风险较低,也为了避免CVE扫描器发出警报。
修复了缓冲发送与基于MTL接口(Libfabric、PSM、Portals)的问题。
将缺失的
MPI_F_STATUS_SIZE添加到mpi.h中。感谢@jprotze报告此问题。更新Fortran
mpi模块的配置检查使其更加准确。感谢Sergey Kosukhin发现该问题并提供修复方案。更新以正确支持PMIx v>=4.2.3版本。感谢Bruno Chareyre、Github用户@sukanka以及Christof Koehler提出兼容性问题并协助测试修复方案。
修复了一些小问题,并在OFI支持下进行了一些小的性能优化。
支持MPI标准为并行IO推荐的
striping_factor和striping_unitMPI_Info名称修复了UCX支持中的一些小问题。
针对0字节MPI_Alltoallw的小幅优化(即将其设为无操作)。
3.1.2.2. Open MPI 版本 4.1.5
- Date:
2023年2月
修复了在某些进程布局下单向应用中的崩溃问题。
更新嵌入式OpenPMIx至版本3.2.4
修复在MacOS上使用
ifort构建时的问题。为Libevent回传补丁以修复CVE-2016-10195、CVE-2016-10196和CVE-2016-10197漏洞。
注意
Open MPI内部使用的libevent并未涉及Libevent代码库中受影响的部分。
SHMEM 改进:
修复SHMEM接口中的初始化程序错误。
修复无符号类型比较产生的警告。
修复
shmem_ds_reset中清除后使用的问题。
UCX改进
修复了当UCX已构建但未被选择时可能发生的内存注册错误。
减少使用
add_procs与intercommunicators时的开销。默认启用
multi_send_nb。在等待UCX栅栏操作完成时调用
opal_progress。
修复osc/rdma组件中的数据损坏错误。
修复alltoall集合操作中的溢出错误
修复显示拓扑时崩溃的问题。
添加一些
MPI_F_XXX常量,这些常量在mpi.h中缺失。修复了coll/ucc中的错误。
3.1.2.3. Open MPI 版本 4.1.4
- Date:
2022年5月
修复了多个非阻塞集体操作中可能出现的长度整数溢出问题。
修复了在调用
MPI_Init之前如果MPI工具接口被终止时UCX中出现的段错误问题。移除configure中对
/usr/bin/python的依赖。修复OMPIO中长双精度类型(etype)的问题。
更新treematch拓扑组件以修复多个正确性问题。
修复UCX MCA参数注册中的内存泄漏问题。
修复在非Linux系统上长时间操作关闭文件描述符的问题,该问题对用户可能表现为程序挂起。
修复了GCC 11上由于指针别名导致的属性处理问题。
修复UCX PML数据类型处理中的多线程竞争问题。
修复CUDA Reduce算法中的一个正确性问题。
修复了支持CUDA GPUDirect RDMA时的编译问题。
修复了
shmem_calloc(..., 0)以符合OpenSHMEM规范的问题。添加UCC集合组件。
修复OMPI IO组件中的除零错误问题。
修复当libnl不在标准搜索位置时的编译问题。
3.1.2.4. Open MPI 版本 4.1.3
- Date:
2022年3月
修复了
smcudaBTL中的段错误。感谢Moritz Kreutzer和@Stadik报告此问题。在
mpi_f08模块的MPI句柄比较函数中增加了对ELEMENTAL的支持。感谢Salvatore Filippone提出这个问题。基于CUDA的代码路径中次要数据类型性能改进。
修复当与
MPI_IN_PLACE一起使用时MPI_ALLTOALLV的问题。修复了非阻塞集合操作中对
MPI_BOTTOM的处理问题。感谢Lisandro Dalcin报告此问题。默认启用UCX的OPAL内存钩子。
修复了许多编译器警告,特别是针对较新版本的GCC。
修复了大型负载集合操作中的跨通信器溢出问题。同时针对
MPI_REDUCE_SCATTER_BLOCK中类似的大型负载集合操作问题进行了修复。将ROMIO 3.3的修复反向移植,在GPFS上使用stat64()替代stat()。
修复了多个非阻塞MPI集合操作中因浮点精度导致的分数舍入问题。
修复了
--enable-heterogeneous的编译失败问题。同时更新了README文件,说明--enable-heterogeneous功能可用,但仍不建议在大多数环境中使用。对OMPIO的小幅修复,包括:
修复共享内存共享文件指针的开放行为。感谢Axel Huebl报告此问题
修复了关闭文件时清理锁文件的问题。感谢Eric Chamberland报告此问题。
更新LSF配置失败输出,使其更加清晰(例如在RHEL平台上)。
更新
if_[in|ex]clude在btl_tcp和oob_tcp中的行为,以选择所有落在指定子网范围内的接口。
3.1.2.5. Open MPI 版本 4.1.2
- Date:
2021年11月
针对OpenBSD的ROMIO可移植性修复
修复了
MPI_IN_PLACE与MPI_ALLTOALLW的处理问题,并提升了MPI_ALLTOALL和MPI_ALLTOALLV在使用MPI_IN_PLACE时的性能。修复Post-Start-Wait-Complete同步模式下空组的一侧问题。
修复在某些涉及广义请求的使用场景中的Fortran状态返回值问题
修复了Romio数据类型相关的错误。
修复当
main()返回非零值时oshmem_shmem_finalize()的问题。修复LSF下使用membind选项时的错误亲和性设置。
修复
count==0情况下的MPI_REDUCE和MPI_IREDUCE问题。修复当用户在shell启动文件中设置了
set -u时,在Bourne风格shell中启动ssh的问题。正确处理使用
mpirun --host选项时的0 slots情况。确保在Open MPI会话目录已存在时取消链接并重新绑定套接字。
修复了
mpirun --disable-dissable-map中的段错误问题。修复内存钩子处理中潜在的挂起问题。
在
MPI_WAITALL运行时性能略有提升,特别是在MPI_THREAD_MULTIPLE模式下。修复hcoll数据类型映射和根操作行为。
修正了一些修改
MPI_Status的操作。当MPI标准不允许时,MPI_ERROR。UCX更新:
修复数据类型引用计数问题。
释放窗口时分离动态窗口内存。
修复数据类型处理中的内存泄漏问题。
修复各种原子操作问题。
mpirun: 尝试将curses窗口大小设置为派生任务的伪终端。感谢Stack Overflow用户@Seriously报告此问题。
PMIx 更新:
修复与外部PMIx v4.x安装的兼容性问题。
修复对PMIx v3.x编译器/链接器标志的处理。感谢Erik Schnetter报告此问题。
在适当情况下跳过SLURM提供的PMIx检测。感谢Alexander Grund报告此问题。
修复C++编译器在包含STL"
"头文件时的处理问题,该操作最终会包含Open MPI的文本VERSION文件(这不是C代码)。感谢@srpgilles报告此问题。 修复对
MPI_LONG的MPI_Op支持。使MPI C++绑定库(libmpi_cxx)明确依赖于OPAL内部库(libopen-pal)。感谢叶洛报告此问题。
修复对
--with-libevent=/usr的配置处理。修复了打开Lustre文件时的内存泄漏问题。感谢Bert Wesarg提交修复方案。
修复
MPI_SENDRECV_REPLACE以正确处理数据类型错误。 感谢Lisandro Dalcin报告此问题。修复
MPI_SENDRECV_REPLACE以正确处理大数据。感谢Jakub Benda报告此问题并提供修复建议。添加针对TCP“连接断开”错误的临时解决方案,大幅降低此类问题发生的可能性。
OMPIO 更新:
修复当未设置AMODE时的处理问题。感谢Rainer Keller报告此问题并提供修复方案。
修复FBTL "posix"组件的链接问题。感谢李洪刚报告此问题。
修复了在0大小文件视图上使用
MPI_FILE_GET_BYTE_OFFSET时的段错误。感谢GitHub用户@shanedsnyder提交该问题。
OFI更新:
多平面/多网卡网卡选择清理
增加对将Open MPI内存监控器导出到Libfabric的支持。
确保Cisco usNIC设备永远不会被OFI MTL选中。
修复了OFI网络设置中的缓冲区溢出问题。感谢Alexander Grund报告此问题并提供修复方案。
修复标签匹配网络上的SSEND问题。
修复多个MPI集合操作中的错误处理。
修复了
MPI_COMM_SPLIT_TYPE的排序问题。感谢Wolfgang Bangerth提出该问题。不再安装orted-mpir库(这是一个内部/Libtool便利库)。感谢Andrew Hesford提供的修复。
PSM2 更新:
允许高级用户禁用PSM2版本检查。
修复以允许psm2.h的非默认安装位置。
3.1.2.6. Open MPI 版本 4.1.1
- Date:
2021年4月
修复了多个数据类型问题,包括对部分数据类型处理不当可能导致应用程序意外失败的问题。
默认情况下,修改UCX PML使其在
MPI_Finalize()期间不再警告MPI_Request泄漏问题。如需恢复旧有行为,可通过mca_pml_ucx_request_leak_check MCA参数实现。撤销了针对SLURM v20.11.{0,1,2}版本中启动问题的临时解决方案。SchedMD建议用户避免使用这些版本,并升级至v20.11.3或更高版本。
将PMIx更新至v3.2.2版本。
修复了在Apple Silicon上使用Homebrew时出现的配置问题。感谢François-Xavier Coudert报告此问题。
默认在aarch64平台上禁用gcc内置原子操作。
检测到UCX v1.8.0时禁用UCX PML。UCX 1.8.0版本存在一个缺陷,当TCP传输与共享内存传输同时使用时可能导致数据损坏。v1.8.0之前的UCX版本不受此问题影响。感谢@ksiazekm报告该问题。
修复了可用UCX传输/设备的检测问题,以更好地指导PML优先级设置。
修复了SLURM支持,将ORTE守护进程标记为非MPI任务。
改进了AVX检测功能,能更准确地识别支持的平台。同时优化了生成的AVX代码,并将op/avx组件切换为使用基于单词的MCA参数(替代原来的数字大标志)。
改进了OFI兼容性支持,并修复了错误处理路径中的内存泄漏问题。
改进了HAN集合操作,新增了对Barrier和Scatter的支持。感谢@EmmanuelBRELLE的这些改动以及相关的错误修复。
修复了MPI调试器支持(即
MPIR_Breakpoint()符号)。感谢@louisespellacy-arm报告此问题。修复了ORTE中阻止调试器读取MPIR_Proctable的错误。
从UCX PML中移除了PML一致性检查以解决性能退化问题。
修复了
MPI_Init_thread(3)中关于C++绑定的说明,并更新了关于MPI_THREAD_MULTIPLE.的引用。感谢Andreas Lösel将过时的文档问题提请我们注意。在Flux PMIx支持中添加了
fence_nb以解决段错误问题。确保POSIX FBTL组件中AIO请求的进展,防止在MacOS上超出最大待处理请求数。
在orted中利用OPAL的多线程支持,通过原子操作实现对象引用计数。
修复了在使用静态TCP端口启动时出现的段错误。
修复了
--debug-daemonsmpirun命令行选项。修复了mpirun在托管作业分配中未遵守
--host参数的bug。将托管分配过滤器应用于主机文件/主机列表。
修复了将已初始化的通用请求标记为待处理的错误。
修复了外部PMIx v4.x的检查问题。
修复了使用
--enable-mem-debug构建OSHMEM的问题。修复了在使用旧版本GCC时,当
__ATOMIC_SEQ_CST被使用时观察到的性能退化问题。感谢@BiplabRaut报告此问题。修复了在使用非连续数据类型时,二项树散射算法中的缓冲区分配错误。感谢@sadcat11报告此问题。
修复了osc/rdma组件中与累积操作和原子功能相关的错误。
修复了在使用
MPI_THREAD_MULTIPLE线程级别时观察到的MPI组操作中的竞态条件问题。修复了TCP BTL连接匹配逻辑中的死锁问题。
修复了启用CUDA支持时pml/ob1的编译错误。
修复了由于不必要的头文件包含导致的Lustre构建问题。
修复了与IMB LSF工作负载管理器的构建问题。
修复了UCX SPML的链接器错误。
3.1.2.7. Open MPI 版本 4.1.0
- Date:
2020年12月
集合操作:新增HAN和ADAPT自适应集合操作组件。 这两个组件默认关闭,可通过指定
mpirun --mca coll_adapt_priority 100 --mca coll_han_priority 100 ...来启用。我们计划在Open MPI 5.0中默认启用这两个组件。OMPIO现在已成为所有文件系统(包括Lustre)上MPI-IO的默认实现(在此之前,ROMIO是Lustre的默认实现)。特别感谢Mark Dixon发现MPI I/O问题并提供Lustre系统进行测试。
针对macOS Big Sur的更新。感谢FX Coudert报告此问题并提供解决方案。
小幅提升MPI单边RDMA性能。
修复hcoll
MPI_SCATTERV与MPI_IN_PLACE的问题。为MPI集合操作添加AVX支持。
更新了mpirun(1)中关于"slots"和PE=x值的相关内容。
修复大型环境变量的缓冲区分配问题。感谢@zrss报告此问题。
将嵌入式OpenPMIx升级至v3.2.2版本。
在创建完全可复现构建方面取得更多进展(参见https://reproducible-builds.org/)。感谢Bernhard M. Wiedemann提请我们关注此事。
修复MCA文件中超长值的问题。感谢GitHub用户@zrss向我们报告此问题。
UCX:修复零大小数据类型的传输问题。
修复非统一模式下的
--cpu-list功能。修复Arm平台上由于缺少内存屏障导致的PMIx回调问题。
OFI MTL: 多个错误修复。
修复了
MPI_TYPE_CREATE_RESIZED在对非标准对齐数据类型创建时会产生意外范围的数据类型的问题。集合操作:调整多种集体算法的默认调优阈值
运行时:修复rank-by参数无效的情况
Portals4: 清理错误处理的边界情况
运行时:移除
--enable-install-libpmix选项,该选项自添加以来一直无效opal: 在MacOS上禁用内存修补组件
UCX: 允许将UCX 1.8与btl uct一起使用
UCX: 将已弃用的UCX非阻塞API替换为NBX
OMPIO: 添加对IME文件系统的支持
OFI/libfabric:新增了对多网卡的支持
OFI/libfabric: 新增了对可扩展端点(Scalable Endpoints)的支持
OFI/libfabric:添加了用于单边通信支持的btl
OFI/libfabric: 多个小错误修复
libnbc: 新增多种性能优化算法