[MPICH] Is ther a limitation with MPI_Comm_spawn_multiple
    Rajesh Sudarsan 
    rajesh.sudarsan at gmail.com
       
    Wed Apr  5 18:15:23 CDT 2006
    
    
  
Hi,
I am using the MPI_Comm_spawn_multiple command in my program to 
dynamically spawn new processes. But the command does not seem to work 
when the number of spawned processes is greater than or equal to 5. I 
tested this using a simple master worker example. I have pasted the 
sample programs below. Could anyone tell me where I am going wrong or is 
this a limitation with the implementation?
MASTER:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include <mpi.h>
void
main(int argc, char **argv)
{
        int             tag = 0;
        int             my_rank;
        int             num_proc;
        char         slave[20];
        int             array_of_errcodes[10];
        int             num,k;
        MPI_Status      status;
        MPI_Comm        inter_comm;
        char **commands;
        MPI_Info *info;
        int *maxprocs;
        char ***args=NULL;
        int i=1;   
     
        char *host =(char*)"host";
       num = 8;
       commands=(char**)malloc(sizeof(char)*num);
       commands[0]="./hello";
       commands[1]="./hello";
       commands[2]="./hello";
       commands[3]="./hello";
       commands[4]="./hello";
       commands[5]="./hello";
       commands[6]="./hello";
       commands[7]="./hello";
        maxprocs=(int *)malloc(sizeof(int)*num);
        maxprocs[0]=i;
        maxprocs[1]=i;
        maxprocs[2]=i;
        maxprocs[3]=i;
        maxprocs[4]=i;
        maxprocs[5]=i;
        maxprocs[6]=i;
        maxprocs[7]=i;
 
 
        MPI_Init(&argc, &argv);
        MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
        MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
        info=(MPI_Info *)malloc(sizeof(MPI_Info)*num);
        MPI_Info_create (&info[0]);
        MPI_Info_create (&info[1]);
        MPI_Info_create (&info[2]);
        MPI_Info_create (&info[3]);
        MPI_Info_create (&info[4]);
        MPI_Info_create (&info[5]);
        MPI_Info_create (&info[6]);
        MPI_Info_create (&info[7]);
        MPI_Info_set (info[0],host, "n1026");
        MPI_Info_set (info[1],host, "n1027");
        MPI_Info_set (info[2],host, "n1028");
        MPI_Info_set (info[3],host, "n1029");
        MPI_Info_set (info[4],host, "n1050");
        MPI_Info_set (info[5],host, "n1051");
        MPI_Info_set (info[5],host, "n1052");
        MPI_Info_set (info[5],host, "n1053");
    printf("Master %d running on host\n",my_rank);
    printf("MASTER : spawning  %d slaves ... \n",num);
   
        /* spawn slave and send it a message */ 
    MPI_Comm_spawn_multiple(num, commands, args, maxprocs, info,0, 
MPI_COMM_WORLD, &inter_comm, array_of_errcodes);
     MPI_Finalize();
}
WORKER:
#include <stdio.h>
#include <mpi.h>
main (int argc, char **argv)
{
   int node,k;
   int data1[1],data2[1]=10;
   MPI_Status *status;
   char host[20];
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &node);
    status = (MPI_Status*)malloc(sizeof(MPI_Status));
   if (node == 0) {
     printf("Rank 0 is present in C version of Hello World.\n");
     k=gethostname(host,20);
     printf("hostname = %s\n",host);
     data1[1]=11;
      printf("data received on proc %d\n",node);
       printf("%d\n",data2[1]);
   }
    else {
     k=gethostname(host,20);
     printf("hostname = %s\n",host);
     data1[1]=16;
     printf("  Rank %d of C version says: Hello world!\n", node);
     printf("data received on proc %d\n",node);
     printf("-- %d\n",data2[1]);
   }
    MPI_Finalize();
}
Regards,
Rajesh Sudarsan
    
    
More information about the mpich-discuss
mailing list