c - MPICH:在 MPI_COMM_SPAWN 生成的子节点无法到达父节点之后
问题描述
我正在尝试在两个 2 个节点之间创建进程的主从配置。
Node1 在 Node2 上产生 N 个进程。我的问题是,当生成的进程尝试与其父节点通信时。他们尝试连接到 127.0.1.1 IP,这是在 Node1 的 /etc/hosts 文件中分配给 Node1 的 IP。
我的 /etc/hosts 文件是这样的
节点1 /etc/hosts 文件
127.0.0.1 localhost
127.0.1.1 node1
ip.node.2 node2
...
Node2 /etc/hosts 文件
127.0.0.1 localhost
127.0.1.1 node2
ip.node.1 node1
...
这是我的错误
MPIR_Init_thread(506)............................:
MPID_Init(325)...................................: spawned process group was unable to connect back to the parent on port <tag#0$description#madx$port#60313$ifname#127.0.1.1$>
MPID_Comm_connect(191)...........................:
MPIDI_Comm_connect(834)..........................: Named port tag#0$description#madx$port#60313$ifname#127.0.1.1$ does not exist
MPIDI_Comm_connect(651)..........................:
MPIDI_Create_inter_root_communicator_connect(324): Connection timed out in 180 seconds
还有我的 master.c 代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);
int kernels, servers;
char hostname[256];
gethostname(hostname, 255);
//char nombre[10]; int longitud;
kernels = atoi(argv[1]);
servers = atoi(argv[2]);
MPI_Comm intercomm;
MPI_Info info[2];
MPI_Info_create(&info[0]);
MPI_Info_set(info[0], "hostfile", "host2.txt");
MPI_Info_create(&info[1]);
MPI_Info_set(info[1], "hostfile", "host2.txt");
char *cmds[2] = {"./kernel", "./server"};
int np[2] = {kernels, servers};
int errcodes[2];
MPI_Comm_spawn_multiple(2, cmds, MPI_ARGVS_NULL, np, info, 0, MPI_COMM_WORLD, &intercomm, errcodes);
MPI_Finalize();
}
主机2.txt
host2:4
解决方案
推荐阅读
- django - 屏蔽端口号django在nginx中运行slserver
- cross-domain - 如果第三方 cookie 被阻止,则使用 oidc-client 跨域进行静默续订
- java - Recycler查看快照
- spring-boot - 使用 Zuul 代理服务器时出现“网关超时”错误
- javascript - window.location.reload 在 Chrome 中运行良好,但在 Firefox 中无法运行
- java - 如何处理 Spring Boot 异步函数中未捕获的异常?
- java - 在 O(n^2) 中验证图的连通性
- ipfs - 为什么 IPFS 的 multihash 可以解码?
- exe - 如何使用 pyinstaller 使用 python 脚本打包 .exe 文件
- sql-server - 如何使用 JSON_MODIFY 更新部分 json