Programowanie Równoległe i Rozproszone

III rok Informatyka WSZiB


Część 3 - Komunikacja nieblokująca

  • Zadanie: Zwiększyć wydajność programu life poprzez wykonywanie komunikacji i obliczeń jednocześnie.
    1. Zamienić komunikację z blokującej na nieblokującą w następujący sposób:
      Pierwsze wywołanie funkcji MPI_Sendrecv() zmienić na MPI_Send, MPI_Irecv, a pózniej MPI_Wait.
      Drugą funkcję MPI_Sendrecv() zmienić na MPI_Isend, MPI_Recv i MPI_Wait.
    2. Wykonywanie obliczeń jednocześnie z komunikacją:
      1. Zamienic wszystkie pozostale wywolania na nieblokujace
      2. Po zainicjalizowaniu nieblokującej komunikacji procesy obliczają "życie" w wierszach "wewnętrznych" od 2 do K-1,
      3. Wykonują operację oczekiwania na odebranie którejkolwiek z zakładek funkcją MPI_Waitany,
      4. Obliczają "życie" w wierszu 1 lub K-tym w zależności od tego, która komunikacja została zakończona w wyniku MPI_Waitany()
      5. Oczekują na odebranie drugiej zakładki
      6. Dokonują obliczenia "życia" w wierszu 1 lub K-tym (w zależności, która zakładka została odebrana)
      7. Przy pomocy MPI_Waitall() zapewniamy, ze komunikacja Isend sie zakonczyla.
      Wskazówka:
      Potrzebne będą dwie dwuelementowe tablice typu MPI_Request, jedna dla operacji Isend i druga dla operacji Irecv. W tych tablicach przechowywane będą uchwyty służące do zakończenia operacji nieblokujących. Tablice uchwytów przekazywane będą do funkcji MPI_Wait*.
  • Przeprowadzić pomiar czasu spędzonego w głównej pętli algorytmu w każdym procesie. Pomiar czasu w MPI.
    Marcin Radecki