Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |  

This web mail archive is frozen.

This page is part of a frozen web archive of this mailing list.

You can still navigate around this archive, but know that no new mails have been added to it since July of 2016.

Click here to be taken to the new web archives of this list; it includes all the mails that are in this frozen archive plus all new mails that have been sent to the list since it was migrated to the new archives.

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