silveira neto

carbon-based lifeform. virgo supercluster

Menu Close

MPI client/server

Here is the file servidor.c:

#include<mpi.h>
#include<stdio.h>
#include<stdlib.h>
 
int size, rank, msg;
 
int main(int argc, char *argv[]){
   MPI_Comm cliente;
   MPI_Status status;
   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_Open_port(MPI_INFO_NULL, portname);
   printf("portname: %s\n", 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();
}

and here is the file cliente.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);
   if (argc >= 2){
      printf("Trying connect to %s\n", argv[1]);
      strcpy(portname, argv[1]);
      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();
}

I compiled them with:

mpicc servidor.c -o servidor
mpicc cliente.c -o cliente

First I run the server with:

$ mpirun -np 1 servidor
portname: 0.1.0:2000

so I get the portname and use it as parameter for the client:

$ mpirun -np 1 cliente 0.1.0:2000

and get this error:

Trying connect to 0.1.0:2000
[irmaos:13280] [0,1,0] ORTE_ERROR_LOG: Pack data mismatch in file dss/dss_unpack.c at line 171
[irmaos:13280] [0,1,0] ORTE_ERROR_LOG: Pack data mismatch in file dss/dss_unpack.c at line 145
[irmaos:13280] *** An error occurred in MPI_Comm_connect
[irmaos:13280] *** on communicator MPI_COMM_WORLD
[irmaos:13280] *** MPI_ERR_UNKNOWN: unknown error
[irmaos:13280] *** MPI_ERRORS_ARE_FATAL (goodbye)

(where irmaos is mine machine’s name)

I also tried this:

$ mpirun -np 1 cliente 127.0.0.1:2000
Trying connect to 127.0.0.1:2000

But nothing happens.

Anyone knows what I’m doing wrong?

I’m using MPICH version 1.2.7p1. I’m going to try this in another machine to see the results, but I guess it will be the same.

3 Comments

Add yours →

  1. rerey says:

    i’ve got error message when i run this command (in /usr/bin) : mpicc -o master masterprocess.c
    mpicc: no such file or directory.I need your help, please….

  2. Silveira says:

    @rerey try using “./mpicc” or “/usr/bin/mpicc”.

  3. Hi, i got a solution.
    Server:
    mpirun -np 1 ./Server and the result are
    portname: tag#0$description#guilhermefabrin$port#41422$ifname#69.28.93.21$

    and

    mpirun -np 1 ./Client ‘tag#0$description#guilhermefabrin$port#41422$ifname#69.28.93.21$’
    Trying connect to tag#0$description#guilhermefabrin$port#41422$ifname#69.28.93.21$

    Works after i put portname between ‘, and add ./ before compiled source.

    I hope its help. ;)

Leave a Reply

© 2016 silveira neto. All rights reserved.

Theme by Anders Norén.