【发布时间】:2019-12-02 16:27:17
【问题描述】:
我用 C++ 编写了一个使用 MPI 并行化的包。但是,由于模板繁多,编译完成需要半个小时左右。对此,自然有不少用户抱怨。
为了解决这个问题,我认为最好的做法是预编译所有代码。然后将所有共享对象捆绑为一个,但不链接到 MPI。最终用户将根据他们的平台获取共享对象,并将其链接到他们系统上的 MPI 实现。
但是在这样做并采取“nm -B --undefined-only”之后。我看到有些符号只在 openmpi 中定义(我使用的头文件来自 openmpi),例如 ompi_mpi_op_sum 或 ompi_mpi_int。
虽然我在头文件中使用标准定义,但有一些宏可以做到这一点:
MPI_Sum-> ompi_mpi_op_sum MPI_Int-> ompi_mpi_int
我环顾四周,找不到任何关于这个主题的东西。有没有办法克服这个?或解决此问题的其他方法?
【问题讨论】:
-
长话短说,MPI 是源代码级别的标准。您不能说使用 MPICH 编译您的应用程序并将其与 Open MPI 链接,因为该标准不要求二进制接口。来自同一供应商的两个版本甚至可能不兼容二进制。
标签: linker shared-libraries mpi