MPICH:如何publish_name使得客户端应用程序可以lookup_name呢?(MPICH

2019-07-17 23:08发布

虽然在Windows(1.4.1p1)使用MPICH学习MPI我发现一些示例代码在这里 。 原来,当我跑的服务器,我会复制生成的port_name ,并开始使用它的客户端。 这样一来,客户端可以连接到服务器。 我修改了它包括MPI_Publish_name()服务器来代替。 用的名称启动服务器后aaaa ,我启动它失败的客户端MPI_Lookup_name()

Invalid service name (see MPI_Publish_name), error stack:
MPID_NS_Lookup(87): Lookup failed for service name aaaa

下面是代码剪断位:

server.c

MPI_Comm client; 
MPI_Status status; 
char port_name[MPI_MAX_PORT_NAME];
char serv_name[256];
double buf[MAX_DATA]; 
int size, again; 
int res = 0;

MPI_Init( &argc, &argv ); 
MPI_Comm_size(MPI_COMM_WORLD, &size); 
MPI_Open_port(MPI_INFO_NULL, port_name);
sprintf(serv_name, "aaaa");
MPI_Publish_name(serv_name, MPI_INFO_NULL, port_name);

while (1) 
{ 
    MPI_Comm_accept( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &client );
    /*...snip...*/
}

client.c

MPI_Comm server; 
double buf[MAX_DATA]; 
char port_name[MPI_MAX_PORT_NAME]; 
memset(port_name,'\0',MPI_MAX_PORT_NAME);
char serv_name[256];
memset(serv_name,'\0',256);

strcpy(serv_name, argv[1] )
MPI_Lookup_name(serv_name, MPI_INFO_NULL, port_name);
MPI_Comm_connect( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &server ); 
MPI_Send( buf, 0, MPI_DOUBLE, 0, tag, server ); 
MPI_Comm_disconnect( &server ); 
MPI_Finalize(); 
return 0; 

我找不到有关更改公布名称的可见性的任何信息,如果是连的问题。 MPICH似乎没有执行与MPI_INFO什么。 我想尝试的openmpi,但我有麻烦只是建立它。 有什么建议?

Answer 1:

发布的名字,看着他们,并连接到他们的这种做法是相对于正常的MPI使用古怪。

该标准模式是使用mpirun来指定一组节点的在其上发射的过程给定的次数。 的常见的实现的操作mpirun实现中解释的另一个问题

一旦过程都推出了作为一个并行作业的一部分,MPI库读取的任何信息中提供的发射MPI_Init成立MPI_COMM_WORLD ,在组内作业的所有进程的传播者。

使用该通信,并行应用程序可以分配工作,交流信息,等等。 它会做到这一点使用共同MPI_SendMPI_Recv程序,在其所有的变型,集体行动,等等。



Answer 2:

我上传了使用的openmpi在Ubuntu的ç,这里使用OMPI服务器名称服务器客户端和服务器1.6.5工作版本:

用C的openmpi域名服务器的客户端服务器例如



文章来源: MPICH: How to publish_name such that a client application can lookup_name it?