Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <mpi.h>
- #include <fstream>
- #include <iostream>
- using namespace std;
- int main (int argc, char * argv[])
- {
- srand(time(NULL));
- int rank;
- int numProcessors;
- int myNum;
- int B;
- int A;
- int localNum;
- MPI_Init(&argc, &argv);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
- MPI_Comm_size(MPI_COMM_WORLD, &numProcessors);
- int *tab = new int[numProcessors];
- if(rank > 0)
- {
- MPI_Recv(&myNum, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
- }
- if(rank == 0)
- {
- cout << "Nieposortowana tablica..." << endl;
- myNum = rand();
- cout << "[0]" << myNum << endl;
- for (int i = 1; i < numProcessors; i++) // for all the numbers in the file
- {
- localNum = rand();
- cout << "["<<i<<"] "<< localNum << endl;
- MPI_Send(&localNum, 1, MPI_INT, i, 0, MPI_COMM_WORLD); // broadcast the number to its assigned processor i
- }
- localNum = NULL;
- }
- if (rank %2 == 0)
- {
- A = rank + 1;
- B = rank - 1;
- }
- else
- {
- A = rank - 1;
- B = rank + 1;
- }
- if ((A == -1) || (A==numProcessors))
- A = rank;
- if ((B == -1) || (B == numProcessors))
- B = rank;
- // begin the main sorting loop
- for (int i = 0; i<numProcessors; i++)
- {
- if (i %2 == 0)
- {
- MPI_Sendrecv(&myNum, 1, MPI_INT, B, 8, &localNum, 1, MPI_INT , B, 8, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
- }
- else
- {
- MPI_Sendrecv(&myNum, 1, MPI_INT, A, 9, &localNum, 1, MPI_INT, A, 9, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
- }
- if (i %2 == 0)
- {
- if (rank %2 == 0 && localNum > myNum)
- myNum = localNum;
- if (rank %2 == 1 && localNum < myNum)
- myNum=localNum;
- MPI_Barrier(MPI_Comm MPI_COMM_WORLD);
- }
- else
- {
- if (rank %2 == 0 && localNum < myNum)
- myNum = localNum;
- if (rank %2 == 1 && localNum > myNum)
- myNum=localNum;
- MPI_Barrier(MPI_Comm MPI_COMM_WORLD);
- }
- MPI_Barrier(MPI_Comm MPI_COMM_WORLD);
- }
- if (rank > 0)
- MPI_Send(&myNum, 1, MPI_INT, 0, 5, MPI_COMM_WORLD);
- else if(rank == 0)
- {
- tab[0] = myNum;
- for (int i = 1; i < numProcessors; i++)
- {
- MPI_Recv(&tab[i], 1, MPI_INT, i, 5, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
- }
- std::cout << "Posortowana tablica: \n" << std::endl;
- for (int i = 0; i < numProcessors; i++)
- std::cout << "["<<i<<"] " << tab[i] << std::endl;
- }
- MPI_Finalize();
- free(tab);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement