Che materia stai cercando?

Problema del broadcast e introduzione all'hypercube

Consideriamo un sistema distribuito dove una sola entità x conosce alcune informazioni e vorrebbe condividerle con tutte le altre entità della rete; questo problema è chiamato Broadcasting. Risolvere questo problema significa disegnare un insieme di regole che, quando eseguite dalle entità, guideranno per una configurazione

Esame di Algoritmi e strutture di dati dal corso del docente Prof. M. Di Ianni

Anteprima

ESTRATTO DOCUMENTO

Teorema: prendere il problema del broadcast che è dato dalla tripla <P , P , R> , metterci le

INIT FINAL

seguenti restrizioni:

Unico iniziato

- G è connesso

- Non ci sono fallimenti

- Link bidirezionali

-

allora quello che possiamo dire è che non esiste nessun protocollo che possa usare l’avversario in

tutti i modi possibili dove l’avversario dice che se un protocollo completa correttamente il broadcast

deve necessariamente scambiare il numero totale di messaggi che sarà almeno m (vuol dire che in

media su ogni arco della rete deve passare almeno un messaggio) ossia se il conteggio del numero

di messaggi scambiati dal protocollo è < m significa che almeno un nodo non è stato informato.

Prima di dimostrare questo lower bound, c’è un lower bound più semplice:

sotto le stesse condizioni per ogni protocollo la mexage complexity di questo protocollo P su un

grafo G = (V,E) di n nodi ed m archi, afferma che (P) >= n-1.

Stando su un grafo connesso di n nodi, supponiamo che n>=2 (perché se n = 1 non si deve

dimostrare nulla perché la mexage complexity è 0). Inoltre si ha |V| = m ed |E| = m.

Dim: per vedere il lower bound si può dimostrare che tutti i nodi del grafo devono ricevere una

copia del messaggio e la situazione iniziale del grafo è che solo il nodo sorgente è informato.

Affinchè si arrivi nello stato finale bisogna arrivare nella situazione in cui tutti i nodi sono

informati; questo significa che gli altri nodi possono essere informati attraverso messaggi. Si può

affermare che ciascun nodo dovrà essere informato da una copia distinta del messaggio.

Per ogni a,b appartenente ad V: a diverso da b

Abbiamo immediatamente che la copia Ia che è responsabile di aver informato il suo nodo a deve

essere necessariamente diversa dalla copia che è responsabile di aver informato il nodo b.

Per ogni a,b appartenente ad v, con a diverso da b si ha che Ia è diverso da Ib.

Dato che ogni nodo deve essere informato allora questo significa che ci deve essere una copia per

ogni nodo e quindi il problema del broadcast non può essere risolto su un grafo connesso con un

numero di nodi >=2 in meno di un numero di messaggi n-1. Questo loweb bound dice che un

protocollo ci mette almeno un numero di messaggi n-1 ossia ordine di n. In questo caso si perde la

ridondanza.

Se invece si vuole ottenere un risultato che è in funzione di m, non si può più contare raggruppando

i messaggi rispetto ai nodi, ma raggruppandoli rispetto agli archi ragionando per assurdo ossia se

per assurdo su un arco non passa una copia del messaggio bisogna dimostrare che li succede

qualcosa di catastrofico. Si utilizza quindi la tecnica degli ambienti.

Dim: assumiamo che esiste un ipotetico algoritmo A che esegue il broadcast scambiando un numero

di messaggi strettamente inferiore al numero di archi del grafo. Quindi qualunque sia la sequenza

dei ritardi che fa l’avversario, il protocollo ci deve mettere sempre un numero di messaggi < n.

quello che possiamo vedere è che c’è almeno un arco in G su cui non passa nessun messaggio

(questo avviene per un semplice fatto di conteggio, cioè se gli archi sono m e se si invia un numero

<= n-1 allora facendo gli accoppiamenti c’è un arco che rimane da solo).

Se siamo nell’ipotesi assurda, ci deve essere per forza un arco su cui durante tutta l’esecuzione del

protocollo non passerà nessun messaggio. Ora si può prendere questo stesso protocollo, in

particolare osservando la storia di x e y, su due ambienti diversi.

Si prende il grafo originale, si toglie l’arco x-y e ci si sostituisce con altri 2 archi un ulteriore nodo

z. quindi il grafo anziché avere n nodi ne ha n+1. Da un punto di vista di porte logiche non è

cambiato nulla. Adesso si esegue l’algoritmo P sul grafo G’ e per ipotesi assurda su G tutti i nodi

erano informati. Siccome la storia di x ed y nel nuovo contesto non può essere cambiata (perché nel

grafo originale il protocollo non scambiava niente tra x e y), siccome il nodo z non è collegato con

nient’altro, allora quello che x e y vedono in G’ è lo stesso perché tutti gli stimoli che riceveva x

venivano da archi diversi da y. Da questo si può capire che in E2 ci interessa solo quello che fanno

x ed y perché sono gli unici che potrebbero informare z.

Se si dimostra che ne x e ne y instraderanno niente sugli archi che vanno verso z il protocollo

terminerà. Questo perché se per assurdo su G il protocollo termina allora anche su G’ il protocollo

termina e x ed y saranno informati, ma siccome z non riceverà nessun messaggio da x e y allora z

non potrà mai essere informato.

In questa dimostrazione si è sfruttato il fatto che la storia di x e a storia di y nell’ambiente G sotto

gli stessi stimoli che il protocollo e l’avversario generavano ha permesso di costruire un altro grafo

G’ con un nodo in più in cui x ed y hanno la stessa storia, gli stessi stimoli e siccome nell’ambiente

precedente ne x e ne y spediscono un messaggio sull’arco x-y allora neanche in questo nuovo

ambiente ripetendo la stessa storia nessuno dei due invierà un messaggio sugli archi x-z ed y-z ed z

non verrà informato.

Questo dimostra che se stiamo su un grafo generale, i nodi inizialmente non conoscono niente di

questo grafo tranne le condizioni iniziali (unico iniziator, gli altri stanno nello stato DONE, ecc) e

non c’è un protocollo che riesce ad eseguire il task del broadcast con un numero di messaggi

strettamente inferiore ad m. possiamo inoltre notare che il protocollo flooding che aveva una

mexage complexity di 2m-n+1 confrontandolo con la mexage dell’intero problema (broadcast)

possiamo dire che il problema è ottimale.

HYPERCUBE

La message complexity su grafi densi è molto costosa e per risolvere i vari problemi del mondo distribuito si

può costruire una sottorete (spanning tree) cioè un sottografo molto più sparso; si informano tutti i nodi di

questo nuovo sottografo e, una volta costruito lo spanning di ordine n, quando i nodi si sono messi d’accordo

su un unico spanning tree allora se un nodo vuole inviare un messaggio lo invia lungo l’albero di spanning

2

tree ed ogni operazione costa n e non n .

L’idea quindi è quella di costruire uno spanning tree ed eseguire il flooding nello spanning tree ossia vedere

se sotto certe condizioni si possono fare dei protocolli più “furbi”.

Agli inizi degli anni 80 nacque il calcolo parallelo dove si poteva mettere in uno spazio limitato molti

processori e organizzarli in una struttura topologica. Dati dei nodi, ci sono degli archi su cui vengono

scambiati dei dati e lo scopo è usare questi nodi per svolgere un certo task (es: fare la moltiplicazione tra

matrici). Qui il sistema è sincrono ossia c’è un clock e i processori sono sincronizzati. La matrice viene

selezionata in blocchi, dove ogni processore è responsabile di un blocco, risolve il sottoproblema all’interno

del blocco e poi si trasmettono questi dati agli altri processori in modo tale che tutti i processori convergano

alla stessa soluzione.

Quindi ci piacerebbe che questi processori comunicassero nel modo più efficiente e veloce possibile (si è

tentati a costruire strutture con un diametro molto piccolo e con grado elevato, ossia ad inserire molti archi).

Possiamo rappresentare l’architettura parallela come una griglia (MESH) dove su ogni spigolo c’è un

processore e sono tutti processori identici.

Questo significa che la topologia è a griglia e che il nodo quando ha un dato da comunicare lo può

spedire facendo un cammino di routing per trasmetterlo al nodo destinatario; il nodo può

comunicare al passo successivo solamente sugli altri 4 vicini (nord, sud, ovest, est). Lo scopo è

sempre quello di parallelizzare la computazione.

Più il diametro dell’architettura è lungo e più il numero di hop che un messaggio deve fare per

andare da un posto all’altro diventa elevato; quindi al crescere di n si vorrebbe che il tempo di

trasmissione di un messaggio da un nodo all’altro sia piccolo. L’idea sarebbe di far crescere il grafo

con diametro costante.

Data la topologia Tn ci piacerebbe che il diametro al crescere di n fosse θ, ossia:

(Tn) = θ(1)

Questo non è possibile perché l’unico modo al crescere di n per mantenere questa cosa costante è prendere

grafi densi.

Un risultato in combinatorica dei grafi dice che se si vuole mantenere il diametro costante con una famiglia

2

infinita di grafi allora implica che il numero di archi deve essere per forza n = Ω(n ) e che il grado minimo di

ogni nodo è d(w) = Ω (n) (ossia non si possono scegliere 4 vicini perché se l’architettura raddoppia il

numero di nodi il grado raddoppia).

Quindi si deve prendere una struttura completamente diversa da questa dove per ogni nodo il grado è ordine

di n. Nelle tecnologie Mesh si deve essere in grado di farli incontrare tra di loro. In questa struttura al

crescere delle dimensioni dell’architettura parallela (al crescere di n) il grado di ogni nodo è costante.

Possiamo dire quindi che le architetture parallele hanno come scopo quello di avere il grado piccolo e

diametro piccolo. Il tempo di completamento dell’operazione globale è proporzionale al diametro.

Esiste una famiglia di grafi infiniti simmetrica e connessa che ha le seguenti proprietà, dato Gn:

- Il grado massimo costante al crescere di n è {Gn, con n>=0} con G(n) = O(1)<cost

- Con diametro di G(n) = Θ(logn)  il diametro che quando raddoppia, ossia passa da n a 2n, cresce di

1, quindi la crescita deve essere al più logaritmica.

Adesso prendere una distribuzione uniforme (scegliere un grafo random) e una volta creata la distribuzione

prendere un grafo a caso, allora si può dimostrare con alta probabilità che il grafo random G è un

EXPANDER.

L’expander è un grafo connesso che ha un grado piccolo (coatante) e diametro logaritmico. Gli expander

sono fault tollerant.

Dopo qualche anno si è riusciti a de-randomizzare questa costruzione e a costruire algoritmi efficienti che in

tempo polinomiale in m costruiscono, fissato n, grafi expander con grado costante. L’Hypercube non ha

grado costante come gli expander ma ha:

- Grado d(Gn) = log n

2

- Diametro (Gn) = log n

2

Ossia rispetto agli expander ha un diametro uguale però ha un grado che cresce rispetto ad n con una

funzione piccola; in particolare quando si raddoppia il numero di nodi il grado aumenta solo di una unità.

La struttura è: c’è un Hypercube di dimensione 1, di dimesione 2, ecc … quindi al crescere della dimesione i

nodi raddoppiano.

L’hypercube di dimesione 1 è formato da log 2 nodi di grado 1 e due nodi; quindi n = 2. Con un bit riesco a

2

descrivere tutti i nodi.

Per costruire l’hypercube di dimensione successiva, si sa che la dimensione determina il numero di nodi con

una funzione che è esponenziale quindi: nell’hypercube di dimensione d il numero di nodi è:

d

H  n = 2

d d

Per passare dall’hypercube di dimesione 1 all’hypercube di dimesione 2 (con 4 nodi) si prendono 2

hypercube di dimesione 2, si mettono in orizzontale e si connettono i nodi gemelli (due coppie identiche di

dimesione 2). Quindi:

Si fa una copia 01. Poi si fa un’altra copia e la si chiamano i nodi con lo stesso nome (es: prendere il nodo 0,

si mette sotto di lui il nodo gemello e lo chiamiamo 10). Il nodo gemello è quello che ha il bit a destra

uguale. Poi si connettono solo i nodi gemelli.

2

Quindi il numero di nodi diventa 2 = 4. Con 2 bit si riesce a descrivere in modo univoco con una funzione

biettiva tutti i nodi.

Ad un hypercube tridimensionale si passa cosi: la dimensione diventa 3 e i nodi devono diventare 8. Si

prendono 2 copie dell’hypercube di dimensione 2 e si mettono una sul piano superiore e l’altra su piano

inferiore e si collegano per nodo.

In generale:

- Gli archi sono etichettati

- Le porte logiche sono etichettate con etichette globali (tutti i nodi conoscono le etichette)

- I nodi hanno distanza di Hamming = 1.

L’architettura dell’hypercube è una struttura ricorsiva che viene costruita iterando la combinazione su più

quadrati su più dimensioni. Si differenziano per i bit significativi. Gli archi possono essere etichettati con un

valore che va da 1 ad d.

Adesso bisogna fare qualche considerazione per vedere il perché questa architettura è interessante.

d

Per ogni ¬x, ¬y {0,1} : d (¬x, y) = {numero di bit in cui ¬x ed ¬y differiscono}

∈ H

Per ogni ¬x e ¬y sequenze binarie di 0 e 1 alla d, la distanza di hamming di ¬x, y è uguale al numero di bit

in cui ¬x ed ¬y differiscono.

Se i nodi sono etichettati con sequenze che sono di lunghezza d, lamassima distanza che possono avere due

nodi qualsiasi dell’hypercube è d. Per ottenere il nodo che ha la massima distanza di Hamming switchare i

bit, chiaramente:

u < d (¬x, ¬y) <= d  ¬x = ¬y

H

A livello topologico un hypercube può essere definito come un grafo definito nello spazio degli n nodi e un

insieme di archi:


PAGINE

9

PESO

106.43 KB

AUTORE

d.spina

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea magistrale in informatica
SSD:
A.A.: 2016-2017

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher d.spina di informazioni apprese con la frequenza delle lezioni di Algoritmi e strutture di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Tor Vergata - Uniroma2 o del prof Di Ianni Miriam.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!