9.4. 与旧版Open MPI的ABI兼容性

Open MPI v5.0.x 系列保持了C语言MPI绑定与上一个主要Open MPI版本的应用二进制接口(ABI)兼容性。具体来说,使用Open MPI v4.x编译的应用程序可以在不重新编译的情况下直接通过Open MPI v5.0.x运行。

重要

ABI 也针对大多数 Fortran MPI 绑定进行了维护——更多信息请参阅下文。

然而,在某些情况下,使用Open MPI v4.x编译的应用程序可能无法在Open MPI 5.0中正确执行。

  • Fortran编译器在不同版本之间提供的ABI保证程度不一。因此,Open MPI只能在与使用Fortran MPI绑定的MPI应用程序之间提供ABI保证,前提是所有三个实体——Open MPI v4.x、Open MPI v5.0.x和MPI应用程序——都使用完全相同的Fortran编译器及环境构建。

    如果满足这些条件,Open MPI在v4.x和v5.0.x系列之间的ABI兼容性保证将生效,但以下情况除外:

    • 当使用GCC编译器v4.8之前版本配合Fortran mpi模块绑定时,从Open MPI v5.0.0开始移除了对MPI_Comm_spawn_multipleMPI_TestallMPI_TestsomeMPI_WaitallMPI_Waitsome的非标准Fortran接口支持。

    • 当在现代Fortran编译器(例如GNU Fortran ≥ v4.9)中使用Fortran mpi模块时,Open MPI v5.0.0移除了接口中仅包含单个子程序且该子程序名称与接口名称完全匹配时的MPI接口名称。这一变更可能使Open MPI v5.0.x的mpi模块绑定比Open MPI v4.x限制更少,但可能也会产生ABI影响(具体取决于您的Fortran编译器)。

      查看此git提交信息获取更多详情。

      重要提示

      这很可能是一个与编译器相关的问题,可能需要在实际环境中进行测试验证。

    • 当在Fortran INTEGER为8字节而C int为4字节的环境中使用Fortran mpi_f08模块绑定时,从Open MPI v5.0.0开始,Type(MPI_Status)的大小有所增加。

  • Open MPI v5.0.0移除了对MPI C++绑定的支持。如果应用程序使用了已被弃用且现已移除的C++绑定,将无法在Open MPI v5.0.0中编译或运行。有关已弃用和移除函数的详细信息,请参阅移除的MPI结构弃用警告