Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <mpi.h>
- using namespace std;
- int main(int argc, char * argv[])
- {
- MPI_Init(&argc, &argv);
- int size;
- int rank;
- MPI_Status status;
- MPI_Comm_size(MPI_COMM_WORLD, &size);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Group grupaGlobalna;
- MPI_Comm_group(MPI_COMM_WORLD, &grupaGlobalna);
- MPI_Group grupaParzysta;
- MPI_Group grupaNieparzysta;
- //nieparzyste
- int* np = new int[size/2];
- for (int i=0; i<(size/2); i++)
- np[i]=2*i+1;
- //parzyste
- int r;
- if (size%2==1) r=(size/2)+1;
- else r=(size/2);
- int* p = new int[r];
- for (int i=0; i<(r); i++)
- p[i]=2*i;
- MPI_Group_incl(grupaGlobalna, r, p, &grupaParzysta);
- MPI_Group_incl(grupaGlobalna, size/2, np, &grupaNieparzysta);
- MPI_Comm komunikatorParzysty;
- MPI_Comm komunikatorNieparzysty;
- MPI_Comm_create(MPI_COMM_WORLD, grupaParzysta, &komunikatorParzysty);
- MPI_Comm_create(MPI_COMM_WORLD, grupaNieparzysta, &komunikatorNieparzysty);
- int suma=0;
- int op, onp;
- if (size%2==0)
- {
- op=size-2;
- onp=size-1;
- }
- else
- {
- op=size-1;
- onp=size-2;
- }
- MPI_Reduce(&rank, &suma, 1, MPI_INT, MPI_SUM, size-1, MPI_COMM_WORLD);
- if (rank==size-1) cout<<"ID: "<<rank<<". Suma globalnych ID: "<<suma<<"."<<endl;
- suma=0;
- MPI_Reduce(&rank, &suma, 1, MPI_INT, MPI_SUM, op, komunikatorParzysty);
- if (rank==op) cout<<"ID: "<<rank<<". Suma parzystych ID: "<<suma<<"."<<endl;
- MPI_Finalize();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement