我有一个使用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图像,其中包含预先构建的所有内容,但随后下载大文件成为一个问题。
答案 0 :(得分:0)
由于您正在使用Hydra,我将假设您正在使用MPICH或基于它的东西。
仅运送完整安装的一小部分的问题是可能缺少功能。您可以假设不愿意自行设置MPI的用户只会使用某些功能,如果他们需要更多,则只需告诉他们正确安装它。
但是,有一个更令人担忧的情况需要考虑。如果他们已经安装了MPI,并且它不是您要发货的那个,那么您需要确定您的MPI是首先发现的。在Windows中,只需将二进制文件和库放在同一个文件夹中,Windows就会先找到它们。 Linux有点棘手,但你可以操纵PATH和LD_LIBRARY_PATH来获得你的第一个。另一种选择是将mpirun调用包装在脚本中。这样可以更轻松地按照您的需要设置路径,更高级的用户可以忽略它。