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 ... */ }