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_factorstriping_unit MPI_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月

  • 修复了smcuda BTL中的段错误。感谢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]cludebtl_tcpoob_tcp中的行为,以选择所有落在指定子网范围内的接口。

3.1.2.5. Open MPI 版本 4.1.2

Date:

2021年11月

  • 针对OpenBSD的ROMIO可移植性修复

  • 修复了MPI_IN_PLACEMPI_ALLTOALLW的处理问题,并提升了MPI_ALLTOALLMPI_ALLTOALLV在使用MPI_IN_PLACE时的性能。

  • 修复Post-Start-Wait-Complete同步模式下空组的一侧问题。

  • 修复在某些涉及广义请求的使用场景中的Fortran状态返回值问题

  • 修复了Romio数据类型相关的错误。

  • 修复当main()返回非零值时oshmem_shmem_finalize()的问题。

  • 修复LSF下使用membind选项时的错误亲和性设置。

  • 修复 count==0 情况下的 MPI_REDUCEMPI_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_LONGMPI_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-daemons mpirun命令行选项。

  • 修复了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_SCATTERVMPI_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: 新增多种性能优化算法