[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