c - MPICH:如何发布_name 以便客户端应用程序可以查找_name 呢?

标签 c windows mpi mpich

在 Windows (1.4.1p1) 中使用 MPICH 学习 MPI 时,我发现了一些示例代码 here .最初,当我运行服务器时,我必须复制生成的 port_name 并用它启动客户端。这样,客户端就可以连接到服务器了。我将其修改为在服务器中包含 MPI_Publish_name()。在启动名称为 aaaa 的服务器后,我启动了失败的客户端 MPI_Lookup_name() with

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

以下是代码片段:

服务器.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...*/
}

客户端.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,但我在构建它时遇到了麻烦。有什么建议吗?

最佳答案

我在此处使用 ompi-server 名称服务器的 Ubuntu 上使用 C 语言的客户端和服务器的 OpenMPI 1.6.5 上传了一个工作版本:

OpenMPI nameserver client server example in C

关于c - MPICH:如何发布_name 以便客户端应用程序可以查找_name 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14210558/

相关文章:

windows - 如何使用 npm 在 64 位系统上构建 32 位二进制文​​件?

c++ - MPI 中的静态计算和动态计算有什么区别?

c - 如何找到<值优化出来>的数组的地址?

c - 为什么这是错误的?

c - 如果不从终端启动,GTK+ 独立菜单不会被 shdown

c++ - 在PBGL中使用 `make_distributed_property_map`

arrays - Mpi4Py - 发送无副本的 numpy 子数组(非连续内存)

c++ - 'x' 的声明具有不同的语言链接

windows - Windows 上的 QML : make the window to stay on top

c - 我该如何禁用关闭按钮?