如何分发可移植MPI应用程序



我在一家模拟软件供应商工作。我们现在开始为我们的软件使用MPI来实现分布式计算。我真的不明白我们应该如何分发我们的MPI软件产品。

所以,MPI是一个接口规范,所以实际的MPI实现应该是可替换的,对吧?无论谁运行集群,都可以为他们使用的硬件/通信层提供非常专业的MPI实现。这对我来说很有道理。

另一方面,当我运行ldd mympiapp时,我看到

libmpi.so.12 => /home/mpiuser/mpich-3.2-install/lib/libmpi.so.12 (0x00007fae34684000)

似乎在构建之后,我的应用程序就链接到了我的特定版本的MPI上。我们已经为不同的操作系统提供了不同版本的应用程序。我们现在是否也应该为不同的MPI实现添加组合?还是应该将共享库与应用程序一起分发?用户/集群提供商的期望是什么?

我读了很多网络资源,但我发现的大多数东西都是从编译它的人也运行它的角度写的

MPI实现附带mpicc是有原因的。

高性能软件与普通软件的不同之处在于,性能是至关重要的。编译单个二进制文件进行分发通常是不可接受的,因为硬件抽象在高性能方面存在漏洞。

许多大规模高性能软件的供应商要么通过各种硬件/软件组合的不同二进制文件的集合来分发,要么派一名工程师现场为客户的系统编译和调优软件,或者在某些情况下,我听说过一些较小的公司将源代码提供给客户(签订了非常严格的合同)。

需要专门针对客户系统进行编译的三个原因:

  1. 为了使用硬件的正确MPI和OpenMP实现,

  2. 因此,可以使用特定于平台的编译器来生成尽可能高效的指令,

  3. 这样就可以调整硬件(处理器、内存和互连)的编译时算法参数。代码使用的通信模式应该取决于互连,块大小应该取决于处理器缓存大小,等等

这种对耦合硬件和编译字节的需求通常会导致商业MPI软件的销售周期过长。

这个问题与您想要以二进制格式提供的任何其他软件类似。

如果你想支持多个平台和多个操作系统,你必须提供二进制包。通过这种方式(如果适用),您可以强制执行一些要求(例如RPM中的要求)。

您还可以提供包含为给定平台编译的库的二进制代码(并确保将您的二进制代码与这些库链接,例如使用rpath)。

这里没有简单的解决方案,因为您希望支持不同的平台、不同的操作系统和(很可能)不同的编译器。另一种选择是将代码的MPI部分作为源代码分发,并将要"隐藏"的代码提供为共享库。但这在很大程度上取决于具体情况。

最新更新