7. 版本号与兼容性
Open MPI 有两组版本号,终端用户/系统管理员可能会感兴趣:
软件版本号
共享库版本号
两者都基于Open MPI对"向后兼容性"的定义。
7.1. 向后兼容性
Open MPI版本Y与Open MPI版本X向后兼容(其中Y>X),如果用户能够:
使用版本X编译MPI/OpenSHMEM应用程序,用版本Y运行
mpirun/oshrun,并获得相同的用户可观察行为。在版本X和Y中使用相同的命令行选项调用
ompi_info,并获得相同的用户可观察行为。
请注意,该定义涵盖以下几个方面:
应用程序二进制接口 (ABI)
MPI / OpenSHMEM 运行时系统
mpirun/oshrun命令行选项MCA参数名称/值/含义
然而,该定义仅适用于在单个MPI作业中所有运行时实例和MPI/OpenSHMEM进程使用相同版本的OpenMPI时。如果各处的版本不完全相同,OpenMPI在任何情况下都无法保证正常工作。
向后兼容性在用户应用程序动态链接到某个版本的Open MPI/OSHMEM库时效果最佳,并且可以在运行时更新以链接到新版本的Open MPI/OSHMEM库。
例如,如果一个MPI/OSHMEM应用程序静态链接了Open MPI vX版本的库,那么尝试使用Open MPI vY版本的mpirun/oshrun来启动该应用程序并不能保证正常工作(因为这会混合使用Open MPI的vX和vY版本在同一任务中)。
类似地,如果使用内部捆绑了Open MPI vX所有库的容器技术,尝试用Open MPI vY的mpirun/oshrun启动该容器并不能保证正常工作。
7.1.1. Open MPI v5.0.x MCA参数兼容性
在Open MPI v5.0.x版本中,多个MCA参数已被弃用,完整列表请参阅此表格。
7.2. 软件版本号
官方Open MPI版本采用常见的"A.B.C"版本标识格式。这三个数字各自具有特定含义:
主版本号:主版本号是版本字符串中的第一个整数。主版本号的变更通常表示代码库和/或终端用户功能有重大变化,同时也意味着向后兼容性的中断。具体来说:OpenMPI不同主版本号的发行版彼此之间不保证向后兼容。
重要提示
此规则不适用于v1.10.0之前的版本。具体而言:v1.10.x不保证与其他v1.x版本向后兼容。
次版本号:次版本号是版本字符串中的第二个整数。次版本号的变更表示代码库和/或终端用户功能发生了用户可感知的变化。与具有相同主版本号的先前版本仍保持向后兼容性(例如,v2.5.3与v2.3.1向后兼容)。
发布版本:版本号中的第三个数字代表发布版本号。发布版本号的变更通常表示代码库和/或终端用户功能的错误修复。例如,如果某个发布版本仅包含错误修复,而没有其他用户可观察到的变更或新功能,则仅增加第三个数字(例如,从v4.3.0变为v4.3.1)。
“A.B.C”版本号可以选择性地后跟一个限定符字符串:
aX: 表示alpha测试版本。X是一个整数,表示该alpha版本的序号(例如,v1.10.3a5表示1.10.3版本的第5个alpha测试版本)。bX: 表示测试版发布。X是一个整数,表示测试版的序号(例如,v1.10.3b3表示1.10.3版本的第3个测试版)。rcX: 表示发布候选版本。X是一个整数,表示该候选版本的序号(例如,v1.10.3rc4表示版本1.10.3的第4个发布候选版本)。
夜间开发快照压缩包采用不同的版本号方案;它们包含三个不同的值:
创建该压缩包所用的git分支名称。
日期/时间戳,格式为
YYYYMMDDHHMM。创建该压缩包时对应的git提交哈希值。
例如,一个名为openmpi-v2.x-201703070235-e4798fb.tar.bz2的快照压缩包文件名表示该压缩包是从v2.x分支创建的,创建时间为2017年3月7日格林尼治标准时间凌晨2:35,基于git哈希值e4798fb。
7.4. API与ABI兼容性
Open MPI 为应用程序提供以下应用程序编程接口(API)和应用程序二进制接口(ABI)兼容性保证:
Open MPI在所有版本间保持源代码兼容性(即API兼容)。这意味着您可以针对支持您应用程序所编写MPI标准版本的任何Open MPI版本来编译和链接符合规范的MPI应用程序。
Open MPI从v1.3.2版本开始,为MPI应用程序提供了主版本系列内的前向应用二进制接口(ABI)兼容性。在该版本之前,不提供ABI兼容性保证。
Open MPI保留在新主版本系列中破坏ABI兼容性的权利。
7.4.1. Open MPI v5.0.x ABI兼容性
Open MPI v5.0.x系列的共享库与Open MPI v4.0.x和v4.1.x保持ABI兼容性,仅Fortran部分存在少量例外情况。
如果您的Fortran应用程序编译时使用的整数大小与C语言中的整数大小不同,您需要针对Open MPI v5.0.x重新构建并重新链接您的应用程序。
此外,Fortran API 也涉及意图和
ASYNCHRONOUS的变更,部分接口从具名改为匿名。这些变更可能需要修改应用程序的源代码,然后重新编译和链接。