Well, one thing immediately leaps to the eye. You compute Neven based on the number of procs in the job, which you set when executing mpirun. However, the number of members you put in your group is fixed. Then you pass Neven to the MPI_Group call as the parameter telling it how many entries are in your member array!
On Aug 16, 2012, at 5:07 AM, maryam moein <maryam_moein2...@yahoo.com> wrote: > I'm new memeber in this weblog, and I should deliver my assignment as soon as > possible, but I have a big problem that I can't solve it. Please help me. In > MPI I should divide my group into two groups. But all the time when I want to > run a program I got error about mpi_group_incl. This is my error: > > [ubuntu:3346] *** An error occurred in MPI_Group_incl > [ubuntu:3346] *** on communicator MPI_COMM_WORLD > [ubuntu:3346] *** MPI_ERR_RANK: invalid rank > [ubuntu:3346] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort) > -------------------------------------------------------------------------- > mpiexec has exited due to process rank 0 with PID 3345 on > node ubuntu exiting without calling "finalize". This may > have caused other processes in the application to be > terminated by signals sent by mpiexec (as reported here). > > > I should mention that I run this program with diffrent number of process but > I got same errors. In below you can find my c program. > > #include <stdio.h> > #include "mpi.h" > #include <unistd.h> > #include <time.h> > #include <stdlib.h> > #include <string.h> > void main(int argc, char *argv[]) > { > int Iam, p; > int Neven, Nodd, members[6], even_rank, odd_rank; > MPI_Group group_world, even_group, odd_group; > /* Starts MPI processes ... */ > MPI_Init(&argc, &argv); /* starts MPI */ > MPI_Comm_rank(MPI_COMM_WORLD, &Iam); /* get current process id */ > MPI_Comm_size(MPI_COMM_WORLD, &p); /* get number of processes */ > Neven = (p + 1)/2; /* All processes of MPI_COMM_WORLD are divided */ > Nodd = p - Neven; /* into 2 groups, odd- and even-numbered groups > */ > members[0] = 2; > members[1] = 0; > members[2] = 4; > MPI_Comm_group(MPI_COMM_WORLD, &group_world); > MPI_Group_incl(group_world, Neven, members, &even_group); > MPI_Group_excl(group_world, Neven, members, &odd_group); > > MPI_Barrier(MPI_COMM_WORLD); > if(Iam == 0) { > printf("MPI_Group_incl/excl Usage Example\n"); > printf("\n"); > printf("Number of processes is %d\n", p); > printf("Number of odd processes is %d\n", Nodd); > printf("Number of even processes is %d\n", Neven); > printf("\n"); > printf(" Iam even odd\n"); > } > MPI_Barrier(MPI_COMM_WORLD); > > MPI_Group_rank(even_group, &even_rank); > MPI_Group_rank( odd_group, &odd_rank); > printf("%d %d %d\n",Iam, even_rank, odd_rank); > > MPI_Finalize(); /* let MPI finish up ... */ > } > > _______________________________________________ > users mailing list > us...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/users