我有一个非常简单的 MPI 程序,其中节点 0 向节点 1 发送一个字符,但是每当我使用两台或更多不同的机器时,发送和接收都会卡住。当我仅在一台机器上使用多个进程时,该程序运行良好。好像是沟通的问题,但是我不知道是什么问题......
这是代码:
int main(int argc, char *argv[]) {
int numtasks, rank, tag = 1;
char inmsg, outmsg = 'x';
MPI_Status stat;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if ( rank == 0 ) {
MPI_Send(&outmsg, 1, MPI_CHAR, 1, tag, MPI_COMM_WORLD);
}
else if ( rank == 1 ) {
MPI_Recv(&inmsg, 1, MPI_CHAR, 0, tag, MPI_COMM_WORLD, &stat);
}
MPI_Finalize();
}
另外,这里有一些重要的注意事项:
- 我在 Google Compute Engine 中使用 2 个虚拟机集群:mpi-test-uaiw和mpi-test-130b;
- 我已经在两个虚拟机之间配置了无密码ssh,也就是说,从mpi-test-uaiw我可以输入ssh mpi-test-130b并且它工作正常(反之亦然);
- 使用 MPI 的简单“Hello World”适用于该集群,但它不包含任何发送或接收操作;
- 防火墙已停用。
任何帮助,将不胜感激。谢谢!