MPI_Bcasts 挂在奴隶上

MPI_Bcasts hangs on slave

我正在尝试在一台计算机上输入一个数字,然后使用 MPI 将其广播到所有其他计算机。

#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"

int main (int argc, char** argv)
{

int myid, numprocs, processor_name_length;
char processor_name[MPI_MAX_PROCESSOR_NAME];

MPI_Init (0, 0);
MPI_Comm_rank (MPI_COMM_WORLD, &myid);
MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
MPI_Get_processor_name (processor_name, &processor_name_length);

int number = 0;
if (myid == 0) {
    printf ("Input number: ");
    scanf ("%d", &number);
}

MPI_Bcast(&number, 1, MPI_INT, 0, MPI_COMM_WORLD);
printf ("Hello from process %d of %d. Number: %d [%s]\n", myid, numprocs, number, processor_name);

MPI_Finalize ();
return 0;

}

当我编译它并且运行它时:

mpicc -o bcast bcast.c
mpiexec -hosts umaster,uslavea -n 2 ./bcast

它提示我在 master 机器上输入,然后在我输入数字后用 printf 打印这条消息,然后挂起..

输出:

Input number: 10
Hello from process 0 of 2. Number: 10 [umaster]

应该有消息:

Hello from process 1 of 2. Number: 10 [uslavea]

编辑:

如果我 运行 使用此命令:

mpiexec -hosts master -n 4 ./bcast

一切正常,我还有另一个示例,我使用 MPI_Send(...) 并且出现连接被拒绝的错误,但是如果我 运行 该示例在单台计算机上一切正常。我假设我的 configuration/cluster 不正常。下一个例子工作正常:

#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"

int main (int argc, char** argv)
{
    int myid, numprocs;

    MPI_Init (0, 0);
    MPI_Comm_rank (MPI_COMM_WORLD, &myid);
    MPI_Comm_size (MPI_COMM_WORLD, &numprocs);
    printf ("Hello from process %d of %d.\n", myid, numprocs);
    MPI_Finalize ();
    return 0;
}

运行将其与:

mpiexec -hosts master,uslavea,uslaveb,uslavec -n 4 ./hello

我已经创建了 4 个虚拟机,生成了 dsa 密钥,我可以使用 ssh 从每个虚拟机登录到每个虚拟机而无需输入密码。 (来自主人:例如 ssh mpiuser@uslavea)。在所有机器上,用户都是 mpiuser,每台机器的密码都相同。

可能是什么问题?我重复 运行 只在 master 上用 -n X 工作正常。

我明白了。问题是我使用服务器名称而不是 IP 地址。 运行它

mpiexec -hosts 192.168.100.100,192.168.100.101,192.168.100.102,192.168.100.103 -n 4 ./bcast

解决问题。