我一直在寻找一种在我的Mac上使用mpi的方法,但一切都非常先进。
我已经使用
成功安装了open-mpibrew install open-mpi
我已经准备好编译和运行.c文件了。当我输入:
mpicc -o <file> <file.c>
接着是
mpirun <file>
我得到了
[xxxxx-MacBook-Pro.local:13623] [[44919,0],0] ORTE_ERROR_LOG:不好 第262行的文件orted / pmix / pmix_server.c中的参数
[xxxxx-MacBook-Pro.local:13623] [[44919,0],0] ORTE_ERROR_LOG:不好 第666行文件ess_hnp_module.c中的参数看起来orte_init由于某种原因失败了;你的并行过程 可能会中止。并行过程有很多原因 在orte_init期间可能会失败;其中一些是由于配置或 环境问题。这种失败似乎是内部失败; 这里有一些额外的信息(可能只与一个相关 打开MPI开发人员):
pmix服务器初始化失败
- &GT;返回值Bad参数(-5)而不是ORTE_SUCCESS
我输入时也收到同样的信息:
mpirun -np 2 <file>
我做错了什么?
答案 0 :(得分:21)
如果我是你,我会关注:
安装Open MPI非常简单
https://www.open-mpi.org/software/ompi/v2.0/
> tar xf openmpi-2.0.2.tar
> cd openmpi-2.0.2/
> ./configure --prefix=$HOME/opt/usr/local
> make all
> make install
> $HOME/opt/usr/local/bin/mpirun --version
mpirun (Open MPI) 2.0.2
Report bugs to http://www.open-mpi.org/community/help/
您可以使用超级简单的hello world进行测试
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int rank;
int world;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &world);
printf("Hello: rank %d, world: %d\n",rank, world);
MPI_Finalize();
}
一切就绪后,只需编译并运行代码
即可$HOME/opt/usr/local/bin/mpicc -o hello ./hello.c
$HOME/opt/usr/local/bin/mpirun -np 2 ./hello
Hello: rank 0, world: 2
Hello: rank 1, world: 2
在macOS上完美运行
答案 1 :(得分:4)
在某些版本的Mac OS X / MacOS Sierra上,默认临时目录位置足够长,以至于应用程序很容易为超过最大允许文件名长度的临时文件创建文件名,这可能导致此错误。
因此您应该使用export TMPDIR=/tmp
答案 2 :(得分:4)
以@ Oo.oO提供的答案为基础。
安装OpenMPI
。
可以使用brew
安装。
brew install openmpi
答案 3 :(得分:1)
如果您安装了anaconda,这对我来说是最快的选择:
conda install -c mpi4py openmpi
答案 4 :(得分:1)
我注意到在执行过程中pmix提供了以下形式的不必要的例外:
PMIX ERROR: ERROR in file gds_ds12_lock_pthread.c at line 206
为防止这种情况,在执行主文件之前,请始终在终端提示符下键入:
export PMIX_MCA_gds=hash
这有助于消除pmix噪声,并且必须在每个会话中重复。
注意: 在Mac中,默认情况下,pmi允许的最大插槽数为2。 “插槽”是可分配单元的Open MPI术语,在这里我们可以 启动一个过程。这决定了我们可以在代码中运行一条指令的时间。 要扩展插槽数量,请执行以下步骤:
1。使用任意名称创建一个主机文件
2。在写入范围内:
localhost slots = <#>
其中#=否。所需的插槽数。
在编译时,在终端提示符下输入以下内容:
mpicc -hostfile -<filename>
在终端提示符下运行时,请执行以下操作:
mpirun -hostfile -np <#>
尽管最后一点很烦,但它并不需要经常使用,并且主机文件的文件扩展可能会成为某些体系结构(例如我自己的x86)的问题。