Algorytmy Równoległe


Zadanie 1 - dekompozycja domenowa

Celem zadania jest implementacja i eksperymentalna weryfikacja kilku wariantów algorytmu równoległego dla numerycznego problemu rozpływu ciepła.
  1. Równanie ciepła i jego dyskretyzajca oraz warianty algorytmu równoległego są opisane tutaj.
  2. Proszę opisać przedstawiony algorytm równoległy (dowolnie wybrany wariant) zgodnie z metodologią PCAM.
  3. Proszę zaimplementować algorytm sekwencyjny oraz opisane 4 warianty algorytmu równoległego wykorzystując MPI.
  4. Korzystając z dostępu do klasta Zeus, proszę eksperymentalnie wyznaczyć przyspieszenie i efektywność 4 wariantów algorytmu równoległego. Dla algorytmów z reduntantnymi obliczeniami ("Overlapped") proszę przetestować kilka wartości parametru r. Eksperymenty powinny być wykonywane dla różnych (w tym dużych!) rozmiarów problemu i różnej liczby wykorzystywanych węzłów obliczeniowych.
  5. Proszę wybrać najefektywniejszy algorytm równoległy i dodać do niego zapisywanie danych na dysk w celach późniejszej wizualizacji. Proszę to zrobić jak najefektywniej, tak żeby wpływ na same obliczenia był jak najmniejszy. Przykładowo nie trzeba zapisywać wszystkich punktów i każdego kroku czasowego. Proszę zmierzyć przyspieszenie algorytmu z włączonym zapisem danych.
  6. Proszę napisać prostą wizualizację (mapa kolorów, animowany gif) w celu demonstracji wyników i poprawności algorytmu.
  7. Sprawozdanie powinno zawierać: opis algorytmu według schematu PCAM, wyniki eksperymentów (wykresy i opis), oraz interpretację tych wyników.
Terminy:
  • Konsultacje: 16.10.2017.
  • Termin nadsyłania sprawozdania (format PDF, niespakowany): 29.10.2017.
  • Termin oddawania zadania: 30.10.2017.

Zadanie 2 - dekompozycja funkcjonalna

Opis zadania

Implementacja

  • Implementację proszę wykonać w oparciu o podejście wielowątkowe w Javie.
  • Proszę zaimplementować dwie strategie szeregowania: work stealing i work sharing (więcej na ten temat).
  • Strategię work stealing proszę zaimplementować przy pomocy Fork Join framework.
  • Przykład wykorzystania RecursiveTask

Testowanie

Do testowania proszę wykorzystać dostępne w sieci zbiory danych, np.:

Badanie algorytmu

Proszę porównwać obydwie strategie szeregowania: work sharing i work stealing. Dalsze szczegóły w pliku PDF.

Oddawanie zadania

  • Sprawozdanie zawierające wyniki badań proszę przesyłać w formacie PDF do dnia 26.11.2017.
  • Demonstracja implementacji: na zajęciach 27.11.2017.

Zadanie 3 - algorytmy grafowe (Page Rank i spójna składowa)

Wstęp do Page Rank oraz systemu Apache Spark: slajdy oraz notatki

Scalability? At what COST?

Zadanie:

  1. Uruchomić przykłady PageRank lokalnie i na Zeusie.
  2. Zaimplementować algorytm obliczania spójnej składowej (connected components) zgodnie z modelem Pregel.

    Zasada działania algorytmu:

    1. Na początku każdy wierzchołek oznaczamy innym znacznikiem (liczbą).
    2. Każdy wierzchołek wysyła swój znacznik do wszystkich sąsiadów.
    3. Jeżeli minimum z otrzymanych zniaczników jest mniejsze od własnego, wierzchołek zastępuje swój znacznik przez minimum otrzymanych.
    4. Powtarzamy krok 2 aż przestaną zachodzić zmiany

    Algorytm zaimplementować w trzech wariantach:

    1. Implementując graf bezpośrednio na abstrakcji RDD. W tym celu proszę przerobić przykład PageRank, m.in. dodając warunek stopu.
    2. Korzystając z Pregel API biblioteki GraphX.
    3. Wywołując gotową implementację algorytmu z biblioteki GraphX.

  3. Porównać czas obliczeń wszystkich trzech implementacji testując na dużych grafach:
    1. rzeczywistych: https://snap.stanford.edu/data/index.html#web
    2. wygenerowanych losowo (przykład z użyciem org.apache.spark.graphx.util.GraphGenerators) https://spark.apache.org/docs/latest/graphx-programming-guide.html
  4. Przetestować jaki wpływ ma sposób podziału danych http://ampcamp.berkeley.edu/wp-content/uploads/2012/06/matei-zaharia-amp-camp-2012-advanced-spark.pdf (przykład od slajdu 22).
Termin oddawania zadań: na zajęciach 15.01.2018


Linki

Dostęp do infrastruktury PL-Grid (klaster Zeus)

Platforma vCluster

Przypomnienie z TPR: tutorial MPI



Bartosz Balis, balis at agh edu pl