Advertisement
ithoran

MPI Lab2 Zad4

May 10th, 2017
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <mpi.h>
  3. #include <string.h>
  4. #include <ctime>
  5. #include <time.h>
  6.  
  7. int main(int argc, char* argv[])
  8. {
  9.     int rank, brp, prenos, i;
  10.     int sum = 0;
  11.     int buff[10];
  12.     int randbuff[320];
  13.  
  14.     MPI_Init(&argc, &argv);
  15.     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  16.     MPI_Comm_size(MPI_COMM_WORLD, &brp);
  17.  
  18.     if (rank == brp - 1)
  19.     {
  20.         srand(time(NULL));
  21.  
  22.         for (i = 0; i < brp * 10; i++)
  23.         {
  24.             randbuff[i] = rand() % 1000;
  25.         }
  26.  
  27.         for (i = 0; i < 10; i++)
  28.             sum = sum + randbuff[i];
  29.  
  30.         if (sum % 2 == 0)
  31.         {
  32.             prenos = 1;
  33.  
  34.             MPI_Send(&prenos, 1, MPI_INT, brp - 2, 0, MPI_COMM_WORLD);
  35.         }
  36.         else
  37.         {
  38.             prenos = 0;
  39.  
  40.             MPI_Send(&prenos, 1, MPI_INT, brp - 2, 0, MPI_COMM_WORLD);
  41.         }
  42.     }
  43.  
  44.     MPI_Scatter(randbuff, 10, MPI_INT, buff, 10, MPI_INT, brp - 1, MPI_COMM_WORLD);
  45.  
  46.     if (rank != 0 && rank != brp - 1)
  47.     {
  48.         MPI_Recv(&prenos, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD, MPI_STATUSES_IGNORE);
  49.  
  50.         prenos = prenos << 1;
  51.  
  52.         for (i = 0; i < 10; i++)
  53.             sum = sum + buff[i];
  54.  
  55.         if (sum % 2 == 0)
  56.         {
  57.             prenos++;
  58.  
  59.             MPI_Send(&prenos, 1, MPI_INT, rank - 1, 0, MPI_COMM_WORLD);
  60.         }
  61.         else
  62.         {
  63.             MPI_Send(&prenos, 1, MPI_INT, rank - 1, 0, MPI_COMM_WORLD);
  64.         }
  65.     }
  66.  
  67.     if (rank == 0)
  68.     {
  69.         MPI_Recv(&prenos, 1, MPI_INT, rank + 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
  70.  
  71.         for (int i = 1; i < brp; i++)
  72.         {
  73.             //std::cout << "Proces: " << i << " ima prenos: " << prenos <<"\n";
  74.             if ((prenos >> 0) & 1)
  75.                 std::cout << "Proces: " << i << " ima parnu sumu bafera\n";
  76.             prenos = prenos >> 1;
  77.         }
  78.     }
  79.  
  80.     MPI_Finalize();
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement