我是使用 MPI 的初学者。这里我写了一个非常简单的程序来测试 MPI 是否可以运行。这是我的hello.c:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
int numprocs, rank, namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Get_processor_name(processor_name, &namelen);
MPI_Barrier(MPI_COMM_WORLD);
printf("Process %d on %s out of %d\n", rank, processor_name, numprocs);
MPI_Finalize();
}
我用to node来测试,hostfile是:node1 node2
所以我有两台机器,名称为 node1 和 node2。我可以在没有密码的情况下互相 ssh。
我通过键入启动程序:mpirun -np 2 -f hostfile ./hello
。
可执行文件 hello 位于两台机器的同一目录中。
然后在我运行之后,我得到一个错误:
PMPI_Barrier 中的致命错误:其他 MPI 错误,错误堆栈:PMPI_Barrier(425)............:MPI_Barrier(MPI_COMM_WORLD) 失败 MPIR_Barrier_impl(331)......:集体 MPIR_Barrier_impl(313) 期间失败...... .: MPIR_Barrier_intra(83)....: dequeue_and_set_error(596): 等级为 0 的通信错误 PMPI_Barrier 中的致命错误:其他 MPI 错误,错误堆栈:PMPI_Barrier(425).......: MPI_Barrier(MPI_COMM_WORLD ) 失败 MPIR_Barrier_impl(331)....: 集体 MPIR_Barrier_impl(313)....期间失败....: MPIR_Barrier_intra(83)....: dequeue_and_set_error(596): 等级 1 的通信错误
如果我注释掉 MPI_Barrier(),它可以正常工作。机器之间的通讯好像有问题?或者我没有正确安装openmpi?有任何想法吗?
我正在使用 Ubuntu 12.10
我得到了一些提示:这在 MPICH2 中效果不佳,如果我使用 openmpi,那么它可以工作。我只是通过 sudo apt-get install mpich2 安装了 MPICH。我错过了什么吗?mpich2的大小比openmpi小很多