[mpich-discuss] mpi_comm_spawn problem

Rajeev Thakur thakur at mcs.anl.gov
Wed Feb 22 12:22:57 CST 2012


You need to call the second spawn with comm instead of intercomm.

On Feb 22, 2012, at 12:05 PM, Umit wrote:

> Hello All, 
> 
> 
> 
> I am running a mpi program with 4 processes and I am spawning 4 more processes and adding them in a new intracommunicator with mpi_intercomm_merge and having a intracommunicator with 8 processes. I am successful until this point.
> 
> And then I want to call with these 8 processes 4 new processes and add them in a new communicator and get 12 processes in my intracommunicator. But I couldn’t spawn the new processes with these 8 processes.
> 
> Spawned processes and other processes are calling mpi_comm_spawn separately. At first 4 processes are calling mpi_comm_spawn and then first spawned processes are calling mpi_comm_spawn and I am getting two intracommunicatiors each with 8 processes. 
> 
> How can I make mpi_comm_spawn to call the new processes with new crated intracommunicator? Is this possible? 
> 
> 
> 
> Here is my code and the output of my program:
> 
> 
> 
> Code:
> 
> #include "mpi.h"
> 
> #include <stdio.h>
> 
> #include <stdlib.h>
> 
> #include <string.h>
> 
> #include <stdint.h>
> 
>  
> #define NUM_SPAWNS 4
> 
>     MPI_Comm comm;
> 
>     MPI_Comm parentcomm, intercomm;
> 
>     int np = NUM_SPAWNS;        
> 
>     int errcodes[4];
> 
>     char argv[1];
> 
>     int rank;
> 
> int main( int argc, char *argv[] )
> 
> {
> 
>     MPI_Init( &argc, &argv );
> 
>     MPI_Comm_get_parent( &parentcomm );
> 
>     int i = atoi(argv[1]);
> 
>     if (parentcomm == MPI_COMM_NULL)
> 
>     {
> 
>        argv[0] = "1";
> 
>         MPI_Comm_spawn( "/home/umit/Desktop/merge/./a.out", argv, np, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, errcodes );
> 
>                 MPI_Intercomm_merge( intercomm, 0, &comm );
> 
>                 MPI_Comm_rank (comm, &rank);
> 
>                 printf("I am not spawned my rank is %d \n", rank);       
> 
>     }   
> 
>     else
> 
>     {
> 
>                 MPI_Intercomm_merge( parentcomm, 1, &comm );
> 
>                 MPI_Comm_rank (comm, &rank);
> 
>                 printf("I am spawned at %d. call my rank is %d \n", i, rank);
> 
>  
>                 if (i==2) goto jump; ///Here secondly spawned processes jump.           
> 
>     }
> 
>     argv[0] = "2";
> 
>     MPI_Comm_spawn( "/home/umit/Desktop/merge/./a.out", argv, np, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, errcodes );
> 
>     MPI_Intercomm_merge( intercomm, 0, &comm );
> 
>     MPI_Comm_rank (comm, &rank);
> 
>     jump:              
> 
>     MPI_Finalize();
> 
>     return 0;
> 
> }
> 
>  
> Output is:
> 
> umit at ubuntu:~/Desktop/merge$ mpirun -np 4 ./a.out 0
> 
> I am spawned at 1. call my rank is 7
> 
> I am not spawned my rank is 3
> 
> I am spawned at 1. call my rank is 5
> 
> I am not spawned my rank is 1
> 
> I am spawned at 1. call my rank is 4
> 
> I am not spawned my rank is 2
> 
> I am spawned at 1. call my rank is 6
> 
> I am not spawned my rank is 0
> 
> I am spawned at 2. call my rank is 4
> 
> I am spawned at 2. call my rank is 6
> 
> I am spawned at 2. call my rank is 7
> 
> I am spawned at 2. call my rank is 5
> 
> I am spawned at 2. call my rank is 5
> 
> I am spawned at 2. call my rank is 4
> 
> I am spawned at 2. call my rank is 6
> 
> I am spawned at 2. call my rank is 7
> 
>  
> 
> 
> Best Regards, 
> 
> 
> 
>  
>  
>  
> _______________________________________________
> mpich-discuss mailing list     mpich-discuss at mcs.anl.gov
> To manage subscription options or unsubscribe:
> https://lists.mcs.anl.gov/mailman/listinfo/mpich-discuss



More information about the mpich-discuss mailing list