IV112 Projekt z programování paralelních aplikací
Projekt číslo 8: Dynamická detekce ukončení distribuovaného výpočtu
Termín odevzdání: 23. 11. 2016 20:00
Odevzdávarna: Zadání: Vaším úkolem je implementovat detekci ukončení v distribuované paměti. Vycházejte z algoritmu známého jako Safrův algoritmus (Safra's algorithm).
K dispozici máte dva soubory - main.cpp a communication.h. V souboru communication.h je k dispozici třída Communication, která zastřešuje funkce z knihovny MPI a poskytuje wrappery pro asynchronní bufferované operace poslání a přijímání zpráv. Není povinné tuto třídu použít.
V souboru main.cpp je třída Worker, která náhodně generuje čísla, která posílá náhodným příjemcům v systému. Aby bylo zaručeno, že algoritmus skončí, je postupně snižována pravděpodobnost, že bude vygenerováno další číslo. Po určitém čase se tedy činnost v systému zastaví a jednotlivé procesy budou čekat. Vaším úkolem je implementovat detekci této situace a korektně algoritmus ukončit.
Pro splnění tohoto úkolu potřebujete implementovat metodu `bool finish()` a trochu upravit metody `void receive()`, `void next( double )`, konstruktor a destruktor. Dále bude nutné rozšířit třídu Worker o další atributy, případně definice další třídy/struktury.
K implementaci a testování použijte stanice nymfe*, kde je předinstalováno prostředí MPI. Detaily Safrova algorimu pro dynamickou detekci ukončení načtěte třeba zde: cdp-8-mpi-2-4up.pdf.
Projekt:
Odevzdávarna: Zadání: Vaším úkolem je implementovat detekci ukončení v distribuované paměti. Vycházejte z algoritmu známého jako Safrův algoritmus (Safra's algorithm).
K dispozici máte dva soubory - main.cpp a communication.h. V souboru communication.h je k dispozici třída Communication, která zastřešuje funkce z knihovny MPI a poskytuje wrappery pro asynchronní bufferované operace poslání a přijímání zpráv. Není povinné tuto třídu použít.
V souboru main.cpp je třída Worker, která náhodně generuje čísla, která posílá náhodným příjemcům v systému. Aby bylo zaručeno, že algoritmus skončí, je postupně snižována pravděpodobnost, že bude vygenerováno další číslo. Po určitém čase se tedy činnost v systému zastaví a jednotlivé procesy budou čekat. Vaším úkolem je implementovat detekci této situace a korektně algoritmus ukončit.
Pro splnění tohoto úkolu potřebujete implementovat metodu `bool finish()` a trochu upravit metody `void receive()`, `void next( double )`, konstruktor a destruktor. Dále bude nutné rozšířit třídu Worker o další atributy, případně definice další třídy/struktury.
K implementaci a testování použijte stanice nymfe*, kde je předinstalováno prostředí MPI. Detaily Safrova algorimu pro dynamickou detekci ukončení načtěte třeba zde: cdp-8-mpi-2-4up.pdf.
Projekt:
Následující