发布 mpiexec/mpirun 以及静态二进制文件



我有一个使用 MPI 的并行代码。使用此代码的正确方法是从 PC/Cluster 上的源代码编译,然后运行为:

mpiexec -n X ./application -options

不幸的是,一些使用此代码的人受到 *nix 挑战,他们发现从源代码构建有点令人生畏(不要问为什么(。这些用户仅在自己的台式机/笔记本电脑上使用代码。

对于这样的用户,我只是编译一个静态二进制文件(在一个足够旧的操作系统上,一个足够旧的glibc,它可以在大多数运行Linux的PC上运行(。然后,用户可以按如下方式运行代码:

./application -options

所以现在我的问题是,我怎样才能将 mpiexec/mpirun 与我的静态二进制文件一起发布,以便用户可以执行以下操作:

./mpiexec -n 2 ./application -options

这样,他们还可以利用桌面上的多个内核。到目前为止,我一直在告诉他们做正确的事情,即安装 MPI 并从源代码编译我的代码。

通过做一些测试,我发现如果我编译 hydra 并与 hydra_pmi_proxy 一起交付mpiexec.hydra,那么我可以按如下方式运行代码:

./mpiexec.hydra -n 2 ./application -options

但我不确定这是否是正确的方法?这会导致任何问题吗?我正在考虑为Windoze二进制文件(在Cygwin中运行(做同样的事情。

另一种选择是 VBox 映像,其中包含所有预构建的内容,但下载大文件成为一个问题。

既然你使用的是Hydra,我假设你使用的是MPICH或基于它的东西。

仅提供完整安装的一小部分的问题在于可能会缺少功能。 您可以假设不愿意自己设置 MPI 的用户只会使用某些功能,如果他们需要更多功能,只需告诉他们正确安装它。

不过,还有一个更令人担忧的情况需要考虑。 如果他们已经安装了 MPI,并且它不是您要运送的那个,则需要确保你的是第一个找到的。 在Windows中,只需将二进制文件和库放在同一个文件夹中,Windows就会首先找到它们。 Linux有点棘手,但你可以操纵PATH和LD_LIBRARY_PATH来首先获得你的。 另一种选择是将 mpirun 调用包装在脚本中。 这样可以更轻松地按照所需的方式设置路径,而更高级的用户可以忽略它。