gpt4 book ai didi

c - MPI_Bcasts 卡在奴隶上

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:35 26 4
gpt4 key购买 nike

我试图在一台计算机上输入一个数字,然后使用 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

它提示我在主机上输入,然后在我输入数字后用 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(...) 并且出现连接被拒绝错误,但是如果我在单台计算机上运行该示例,一切正常。我假设我的配置/集群不正常。下一个例子工作正常:

#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 key ,我可以使用 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

解决问题。

关于c - MPI_Bcasts 卡在奴隶上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34344043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com