Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: [OMPI users] Cluster : received unexpected process identifier
From: Rohan Deshpande (rohand87_at_[hidden])
Date: 2012-04-03 22:30:40


Hi,

I am running a MPI program using cluster and tcp communication.

To run I am using: *mpirun --prefix /usr/local/ --mca btl tcp,self
--hostfile slaves -np 6 scatter*

I am getting following output:

Process 0 on host host1 has elements 0 1 2 3
Process 1 on host host1 has elements 4 5 6 7
Process 2 on host host1 has elements 8 9 10 11
Process 3 on host host1 has elements 12 13 14 15
[slave1][[24708,1],5][btl_tcp_endpoint.c:486:mca_btl_tcp_endpoint_recv_connect_ack]
received unexpected process identifier [[24708,1],4]

When trying to communicate with slave1 i get received unexpected process
identifier error.

My PATH and LD_LIBRARY_PATH are correctly set in .bashrc file.

Source code -

#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"
#define MAXPROC 8 /* Max number of procsses */
#define LENGTH 24 /* length of buffer */

int main(int argc, char* argv[]) {
  int i, j, np, me;
  const int nametag = 40; /* Tag value for sending name */
  const int datatag = 45; /* Tag value for sending data */
  const int root = 0; /* Root process in scatter */
  MPI_Status status; /* Status object for receive */

  char myname[MPI_MAX_PROCESSOR_NAME]; /* Local host name string */
  char hostname[MAXPROC][MPI_MAX_PROCESSOR_NAME]; /* Received host names
*/
  int namelen;

  int x[LENGTH]; /* Send buffer */
  int y[LENGTH]; /* Receive buffer */

  MPI_Init(&argc, &argv); /* Initialize MPI */
  MPI_Comm_size(MPI_COMM_WORLD, &np); /* Get nr of processes */
  MPI_Comm_rank(MPI_COMM_WORLD, &me); /* Get own identifier */

  MPI_Get_processor_name(myname, &namelen); /* Get host name */
  myname[namelen++] = (char)0; /* Terminating null byte */

  /* Check that we have an even number of processes and at most MAXPROC */
  if (np>MAXPROC || np%2 != 0) {
    if (me == 0) {
      printf("You have to use an even number of processes (at most %d)\n",
MAXPROC);
    }
    MPI_Finalize();
    exit(0);
  }

  if (me == 0) { /* Process 0 does this */

    /* Initialize the array x with values 0 .. LENGTH-1 */
    for (i=0; i<LENGTH; i++) {
      x[i] = i;
    }

    printf("Process %d on host %s is distributing array x to all %d
processes\n\n",
       me, myname, np);

    /* Scatter the array x to all proceses, place it in y */
    MPI_Scatter(x, LENGTH/np, MPI_INT, y, LENGTH/np, MPI_INT, root,
        MPI_COMM_WORLD);

    /* Print out own portion of the scattered array */
    printf("Process %d on host %s has elements", me, myname);
    for (i=0; i<LENGTH/np; i++) {
      printf(" %d", y[i]);
    }
    printf("\n");

    /* Receive messages with hostname and the scattered data */
    /* from all other processes */
    for (i=1; i<np; i++) {
      MPI_Recv (hostname[i], namelen, MPI_CHAR, i, nametag, MPI_COMM_WORLD,
        &status);
      MPI_Recv (y, LENGTH/np, MPI_INT, i, datatag, MPI_COMM_WORLD,
&status);
      printf("Process %d on host %s has elements", i, hostname[i]);
      for (j=0; j<LENGTH/np; j++) {
    printf(" %d", y[j]);
      }
      printf("\n");
    }

    printf("Ready\n");

  } else { /* all other processes do this */

    /* Receive the scattered array from process 0, place it in array y */
    MPI_Scatter(x, LENGTH/np, MPI_INT, y, LENGTH/np, MPI_INT, root, \
        MPI_COMM_WORLD);
    /* Send own name back to process 0 */
    MPI_Send (myname, namelen, MPI_CHAR, 0, nametag, MPI_COMM_WORLD);
    /* Send the received array back to process 0 */
    MPI_Send (y, LENGTH/np, MPI_INT, 0, datatag, MPI_COMM_WORLD);

  }

  MPI_Finalize();
  exit(0);
}

Any idea what could be wrong?

Thanks