1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-28 21:04:19 +00:00
appunti-steffo/9 - Algoritmi distribuiti/3 - Computazione distribuita/4 - Algoritmi di computazione distribuita/tecnica di saturazione per grafi aciclici.md

2.5 KiB

algoritmo di computazione in grafi aciclici.

[!Summary] Si distribuisce un dato a ogni entità, che effettua la computazione per i dati dei suoi figli e ne invia il risultato al genitore.

Processati tutti i dati, viene effettuato un broadcast problem dalle due entità rimaste per distribuire i risultati dell'algoritmo a tutti.

comportamento

INITIATOR

Inviano un wake-up problem a tutte le altre entità, poi tutte passano ad ACTIVE.

ACTIVE

Riceve informazioni finchè non ne ha ricevute tante quante il numero dei suoi vicini meno uno (i suoi figli).

Effettua il calcolo sulle informazioni che ha, poi ne invia il risultato al vicino rimasto, passando a PROCESSING.

PROCESSING

Attende un ulteriore messaggio, che arriverà solo quando i due lati del grafo aciclico si incontreranno in due entità.

Le entità PROCESSING che ricevono il messaggio effettuano nuovamente l'elaborazione tra il loro risultato e quello ricevuto, e poi lo mandano a tutti i loro vicini tranne il mittente, passando a DONE.

DONE

Un'entità DONE conosce il risultato della computazione, e non fa nient'altro.

algoritmo corretto

[!Success] Eventualmente, i messaggi convergeranno obbligatoriamente a due entità, e la loro notifica di terminazione raggiungerà eventualmente tutte le altre.

==Come si chiamano i problemi risolvibili con la saturazione?==

costo computazionale distribuito

comunicazione

Attivazione

La fase di wake-up problem ad ACTIVE richiede: (2 \cdot Channels - (Entities - Initiators)) Dato che gli iniziatori possono essere tutte le entità eccetto una, al massimo i messaggi inviati saranno: \color{LightCoral} (2 \cdot Channels - (Entities - 1))

Saturazione

La fase di ACTIVE invia un messaggio per ogni entità: \color{SkyBlue} (Entities)

Risoluzione

La fase di PROCESSING richiede un ulteriore messaggio per ogni entità, tranne le due saturate inizialmente: \color{SpringGreen} (Entities - 2)

Totale

In totale, nel caso peggiore i messaggi scambiati saranno: {\color{LightCoral} (2 \cdot Channels - (Entities - 1))} + {\color{SkyBlue} (Entities)} + {\color{SpringGreen} (Entities - 2)} Ovvero: 4 \cdot Entities - 4

Che notazione asintotica è: \Large O(Entities)