1

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

mpiexec -n X ./application -options

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

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

./application -options

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

./mpiexec -n 2 ./application -options

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

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

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

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

另一种选择是预先构建所有内容的 VBox 图像,但下载大文件成为问题。

4

1 回答 1

0

由于您使用的是 Hydra,我将假设您使用的是 MPICH 或基于它的东西。

仅交付一小部分完整安装的问题是功能可能会丢失。您可以假设不愿意自己设置 MPI 的用户只会使用某些功能,如果他们需要更多功能,只需告诉他们正确安装即可。

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

于 2014-04-17T15:32:41.640 回答