MPI_Lookup_name客户端/服务器

时间:2017-05-27 13:54:42

标签: server client mpi

我想执行一个简单的客户端/服务器应用程序,对服务器发布的名称进行客户端搜索(使用MPI_Lookup_name函数)。

我的节目是:

server.c

#include<mpi.h>
#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{

    MPI_Comm   cliente;
    MPI_Status status;
    char       portname[MPI_MAX_PORT_NAME];
    int        size, rank, msg;

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&size);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);

    MPI_Open_port(MPI_INFO_NULL, portname);
    MPI_Publish_name("ocean", MPI_INFO_NULL, portname); 

    MPI_Comm_accept(portname, MPI_INFO_NULL, 0, MPI_COMM_SELF, &cliente);

    printf("client connected\n");
    MPI_Recv(&msg, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, cliente, &status);
    printf("msg: %d\n", msg);
    MPI_Comm_free(&cliente);
    MPI_Close_port(portname);
    MPI_Finalize();

    return 0;
}

client.c

#include<mpi.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int size, rank;

int main(int argc, char *argv[])
{

    MPI_Comm  servidor;
    int       msg, tag, dest;
    char      portname[MPI_MAX_PORT_NAME]; 

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&size);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    MPI_Lookup_name("ocean", MPI_INFO_NULL, portname); 
    MPI_Comm_connect(portname, MPI_INFO_NULL, 0, MPI_COMM_WORLD,&servidor);

    msg = 42; tag = 0; dest = 0;
    MPI_Send(&msg, 1, MPI_INT, dest, tag, servidor);
    MPI_Comm_disconnect(&servidor);
    MPI_Finalize();

    return 0;
}

makefile

EXECS=server client 
MPICC?=mpicc

all: ${EXECS}

server: server.c
     ${MPICC} -o server -g server.c

client: client.c
     ${MPICC} -o client -g client.c

如果我这样做:

mpirun -np 1 ./server

服务器等待,然后我做

mpirun -np 1 ./client

我有:

 *** An error occurred in MPI_Lookup_name 
 *** on communicator MPI_COMM_WORLD
 *** MPI_ERR_NAME: invalid name argument
 *** MPI_ERRORS_ARE_FATAL: your MPI job will now abort

我从http://www.mcs.anl.gov/research/projects/mpi/mpi-standard/mpi-report-2.0/node106.htm获取了这个例子。问题是:我做错了什么?服务器和客户端可以像我一样单独执行吗?

0 个答案:

没有答案