随静态二进制文件一起提供mpiexec/mpirun

随静态二进制文件一起提供mpiexec/mpirun,mpi,binaryfiles,openmpi,mpich,Mpi,Binaryfiles,Openmpi,Mpich,我有一个使用MPI的并行代码。使用此代码的正确方法是从PC/群集上的源代码进行编译,然后作为: mpiexec -n X ./application -options 不幸的是,一些使用此代码的人受到了“尼克斯”的挑战,他们觉得从源代码构建有点令人望而生畏,不要问为什么。这些用户仅在自己的台式机/笔记本电脑上使用代码 对于这样的用户,我只是在一个足够旧的操作系统上编译一个静态二进制文件,该操作系统具有足够旧的glibc,可以在大多数运行Linux的pc上运行。然后,用户可以按如下方式运行代码:

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

mpiexec -n X ./application -options
不幸的是,一些使用此代码的人受到了“尼克斯”的挑战,他们觉得从源代码构建有点令人望而生畏,不要问为什么。这些用户仅在自己的台式机/笔记本电脑上使用代码

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

./application -options
./mpiexec.hydra -n 2 ./application -options
现在我的问题是,如何将mpiexec/mpirun与静态二进制文件一起发布,以便用户可以执行以下操作:

./mpiexec -n 2 ./application -options
这样,他们还可以利用台式机上的多个内核。到目前为止,我一直在告诉他们做正确的事情,即安装MPI并从源代码编译我的代码

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

./application -options
./mpiexec.hydra -n 2 ./application -options
但我不确定这是不是正确的方法?这会引起什么问题吗?我正在考虑对运行在Cygwin中的Windoze二进制文件执行相同的操作


另一个选项是VBox映像,所有内容都是预先构建的,但是下载一个大文件会成为一个问题。

因为您使用的是Hydra,所以我假设您使用的是MPICH或基于它的其他东西

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

然而,还有一个更重要的情况要考虑。如果他们已经安装了MPI,但它不是您要运送的MPI,您需要确保您的MPI是最先找到的MPI。在Windows中,只需将二进制文件和库放在同一文件夹中,Windows就会首先找到它们。Linux有点棘手,但您可以操纵PATH和LD_LIBRARY_PATH来首先获得您的路径。另一个选项是将mpirun调用包装到脚本中。这使得路径设置更容易,更高级的用户可以忽略它