Difusão e Coleta em uma rede. Algoritmos Distribuídos Andrews (C. Geyer) Difusão e Coleta: Probe/Echo 1

Texto

(1)

Algoritmos de

Algoritmos de Probe Probe//Echo Echo

Difusão e Coleta em uma rede

(2)

Autor Autor

Autor

� 1ª versão: Ricardo Castro Mattia

Revisões:

� C. Geyer

Local

� Instituto de Informática

� UFRGS

� disciplina : Programação Distribuída e Paralela

� Versão: v23.1

outubro de 2012

(3)

Súmula Súmula

Súmula

� difusão

difusão em um sistema distribuído (rede)

conceitos

spanning tree

conjunto de vizinhos

árvore

grafo

(4)

Súmula Súmula

Súmula

� coleta

conforme Andrews

modelo de processos

topologia árvore

topologia grafo

otimização Cássio Vogel

(5)

Bibliografia Bibliografia

Bibliografia

� [AND 91] ANDREWS, G.R. “Concurrent Programming - Principles and Practice”. The Benjamim/Cummings, Redwood City, 1991.

Cap 7, seção 7.6

� [AND 00] ANDREWS, G. R. Foundations of Multithreaded,

Parallel, and Distributed Programming. Addison-Wesley; 1st edition, 2000. 664p.

Cap. 9, seção 9.4

� [LYN 96] LYNCH, N. A. Distributed Algorithms. Morgan Kaufmann Publishers, Inc., 1996. 872p.

Cap. 5, seções sobre Spanning Tree

� [TEL 2000] Tel, G. Introduction to Distributed Algorithms.

(6)

Características Características

Conceito de algoritmo probe/echo

� É executado sobre uma estrutura de árvore ou grafo

muitos problemas distribuídos podem ser tratados sobre grafos

� Grafo

Nós: um processo em um computador

Arcos

Indicam possibilidades de comunicação entre 2 nós, ponto a ponto

Por exemplo, um link físico, um canal de comunicação, ...

Direcionados: somente em um sentido

Não direcionados (mais comuns): em ambos os sentidos

(7)

Conceito de algoritmo probe/echo

� Probe :

mensagem enviada por um nó ao seu vizinho no grafo

� Echo:

resposta do vizinho (filho) ao nó de quem recebeu o probe (pai)

� Nem todos os autores usam esses termos (probe e echo)

� Alguns usam o termo “ack” para as respostas

Características

Características

(8)

Características Características

Características

� processamento concorrente:

(seqüência de) probes são enviados assíncronamente a todos os vizinhos

vizinhos, após receberem probe, trabalham de forma concorrente entre si

O grafo é percorrido de forma concorrente

Alguns ramos (partes) do grafo são percorridos mais rapidamente que outros

Depende da banda e latência estáticas e do uso dinâmico da rede

Banda: capacidade em bits por tempo (seg, ms, ...) da rede

Latência: custo fixo para o envio de uma mensagem

(9)

Características Características

Características

� analogias

pesquisa em profundidade (DFS: depth-first search) seqüencial sobre árvore ou grafo -> difusão por probe

coleta de informações em grafo ou árvore -> algoritmo de coleta com probe/echo

aplicação (exemplo): determinação de topologia

(10)

Características

� Muitos outros algoritmos da mesma família ou relacionados

Geração (distribuída) de Spanning Tree (ST)

Qualquer ST

Ótima ST segundo certo critério, por exemplo, menor caminho entre a raiz e qualquer nó

Somente com pais

Com pais e filhos

Eleição de líder com ST

Fontes: [LYNCH 1996], [TEL 2000]

Características

Características

(11)

Difusão em uma Rede Difusão em uma Rede

Difusão

� nó i quer enviar uma informação a todos os nós de uma rede

� A) usando uma spanning tree

nó i conhece toda a topologia

� B) usando conjunto de vizinhos (conceito de grafo)

nó i conhece apenas seus vizinhos

por exemplo, nó 1 conhece nós 2 e 3 (próximo slide)

Mas não conhece nós 4, 5 e 6

B.1) grafo é uma árvore

B.2) grafo não é uma árvore: possui ciclos

(12)

Difusão em uma Rede Difusão em uma Rede

i

6 5

3 4

2

Exemplo de Grafo

(13)

Difusão com spanning tree Difusão com spanning tree

Difusão com spanning tree

� spanning tree

árvore construída sobre um grafo com

um nó é escolhido como raiz

todos os nós do grafo estão na árvore

os eventuais ciclos são eliminados

alguns arcos são eliminados

existem algoritmos seqüenciais (ou locais) para sua construção

ver livros sobre algoritmos para grafos

requisito: nó deve conhecer o grafo

também pode ser construída por um algoritmo distribuído

ver [Lynch 1996]

(14)

Difusão com spanning tree Difusão com spanning tree

Difusão com spanning tree

� algoritmo: nó i difunde uma informação (D)

construir spanning tree (ST) onde i é a raiz com algoritmo seqüencial (ou tendo uma ST)

nó i envia mensagem com D e ST aos seus filhos na ST

nós receptores analisam ST, descobrem seus filhos e enviam a mensagem aos filhos

alguns nós, as folhas, não tendo filhos, provocam o fim do algoritmo

sendo a ST uma árvore, não há ciclos -> um nó só recebe a

mensagem uma única vez

(15)

Difusão com spanning tree Difusão com spanning tree

Difusão com spanning tree (cont.)

� links eliminados: E ou ---

i

E

E

E

(16)

Difusão com spanning tree Difusão com spanning tree

Difusão com spanning tree (cont.)

� Conceito de canal em SR

Compartilhado automaticamente por todos os processos

� código:

channel mens[1:N] (tree T, info D); // N canais do mesmo tipo // tree and info: tipos predefinidos process iniciador::

int i;

info D; // informação a difundir; input graph G; // grafo topologia; input

tree T; // spanning tree

cria_spanning_tree(G, T); // dado grafo G, cria SP (T)

send mens[i] (T, D); // envia T e D a nó i

end process;

(17)

Difusão com spanning tree Difusão com spanning tree

Difusão com spanning tree (cont.)

� código (cont.) :

process nodos[k: 1..N]:: // N processos do mesmo tipo

info D; // informação recebida

tree T; // spanning tree recebida

receive mens[k] (T, D); // recebe mens. com T e D for (i= 1; i <= N; i++) {

if (“nó i é meu filho em T”) // se nó i é filho, difunde a i send mens[i] (T, D);

end process; };

(18)

Considerações sobre solução com ST

� ST é necessária

-> algoritmo para criá-la

Se local (não distribuído): necessita conhecimento do grafo

� Mensagens são sobrecarregadas com a ST (estrutura)

Difusão com spanning tree

Difusão com spanning tree

(19)

Difusão sobre árvore Difusão sobre árvore

Difusão sobre árvore

� a topologia da rede é uma árvore

� Solução informal

nó i difunde uma informação (D)

nó i envia mensagem com D a todos vizinhos (filhos)

cada nó k, k não = i

recebe mensagem de algum nó qualquer (pai)

envia mensagem a seus outros vizinhos (filhos)

se folha: nada envia

� Propriedades

(20)

Difusão sobre árvore Difusão sobre árvore

Difusão sobre árvore

� nó i difunde uma informação (D) (cont.)

Variação: algoritmo simétrico ([Andrews 2000])

um processo iniciador, no nó i, envia ao processo geral nó i

processo nó i tem comportamento idêntico ao de todos os outros (k)

Mas há dois tipos de processo: iniciador e comum

Abordagens para simetria

Códigos iguais

[LYNCH1996]

Nó iniciador tem um estado inicial distinto

[TEL2000]

Dois tipos de nós diferenciados por um variável

(21)

Difusão sobre árvore Difusão sobre árvore

Difusão sobre árvore(cont.):

� código:

// N canais do mesmo tipo // info: defined type

channel mens[1:N] (int nodo, info D);

process iniciador:: // ID distinto: 0 int i;

info D; // informação a difundir; input send mens[i] (0, D); // envia D a nó i

end process;

(22)

Difusão sobre árvore Difusão sobre árvore

� process nodos[k: 1..N]:: // N processos do mesmo tipo int p; // ID do emissor

info D; // informação recebida

receive mens[k] (p, D); // recebe mensagem com D for (i= 1; i <= N; i++) {

// se nó i é vizinho e não é o emissor if ((“nó i é meu vizinho”) & (i != p))

// difunde a i

send mens[i] (k, D);

}; // end for

end process;

(23)

Difusão sobre Grafo Difusão sobre Grafo

Difusão sobre grafo

� problema da solução anterior executada sobre grafo

mais de uma mensagem pode ser enviada a um mesmo nó

se essas mensagens não forem recebidas e o programa continuar a execução, elas permanecerão nos respectivos canais

poderão então ser lidas em uma etapa posterior da execução do programa

pode ser simplesmente uma nova execução do

algoritmo de difusão

(24)

Difusão sobre Grafo Difusão sobre Grafo

Difusão sobre grafo (cont.)

� problema da solução anterior sobre grafo (cont.)

exemplo: mensagem C->D (ou B->D) não seria lida

A

D

B C

(25)

Difusão sobre Grafo Difusão sobre Grafo

Difusão sobre grafo (cont.)

� base da solução

receber todas as mensagens imediatamente (no algoritmo)

� idéia do algoritmo

recebe uma mensagem de nó qualquer

envia mensagem a todos os seus vizinhos, inclusive de quem recebeu

recebe V - 1 mensagens de qualquer nó, onde V é o número

de vizinhos

(26)

Difusão sobre Grafo Difusão sobre Grafo

� código:

channel mens[1:N] (info D); // N canais do mesmo tipo;

// info é user type process iniciador::

int i;

info D; // informação a difundir; input send mens[i] (0, D) // envia D a nó i

end process;

(27)

Difusão sobre Grafo Difusão sobre Grafo

� process nodos[k: 1..N]:: // N processos do mesmo tipo int V = “número de vizinhos”

int p; // ID do emissor

info D; // informação recebida

receive mens[k] (D); // recebe mensagem com D for (i= 1; i <= N; i++) {

if (“nó i é meu vizinho”) // se nó i é vizinho send mens[i] (D); // difunde a i }; end for

for (i = 1; i <= V - 1; i++) { // recebe outras mensagens receive mens[k] (D) };

end process;

(28)

Análise Análise

Discussão

� Explique porque é necessário enviar uma mensagem ao nó “pai”

(nó origem do 1º receive)?

Dicas:

Receive bloqueante

Mensagens enviadas e não recebidas devem ser retiradas do canal

A origem do 1º receive em cada nó é não- determinística no caso geral

Loop do 3º passo tem um tamanho estático: # de

vizinhos menos 1

(29)

Análise Análise

Complexidade

� Métricas

M: quantidade de mensagens

T: quantidade de mensagens encadeadas

� Parâmetros

N: quantidade de nós (processos, ...)

E: quantidade de arcos não direcionados (ou bi)

� Outros parâmetros (outros algoritmos)

diam: diâmetro, ou maior menor distância entre 2 nós

� Em geral

(30)

Análise Análise

Complexidade

� Algoritmo com spanning tree

base: estrutura em árvore

quantidade de mensagens: N – 1

tempo:

altura da ST

obs.:

a altura da ST pode ser N (uma lista de nós)

depende do algoritmo de geração da ST

(31)

Análise Análise

Complexidade

� Algoritmo com vizinhos (árvore ou grafo)

base: dependente da topologia

regra geral: 2 mensagens por link

em geral, bem mais que na spanning tree

quantidade de mensagens

árvore: N – 1 => (N)

grafo completo: N (N - 1)

obs.: arcos do grafo: N(N-1)/2

grafo qualquer: 2E

(32)

Análise Análise

Complexidade

� Algoritmo com vizinhos (árvore ou grafo)

Tempo

T: N mensagens (encadeadas)

obs.: considera-se o pior caso

Por exemplo, percorrer um anel bidirecional pode ser muito mais rápido por um lado que pelo outro

[Lynch 1996]

T: diam: (distância máxima)

porque por exemplo percorrer todo o anel

bidirecional por um lado não pode ser mais lento que percorrer metade (diam) do anel

Há um limite no tempo de 1 (uma) mensagem; pode

ser mais rápido mas não mais lento que limite

(33)

Análise Análise

Complexidade

� Banda

tamanho das mensagens na spanning tree é maior: inclui a ST

(34)

Análise Análise

Limitações

� Ambos algoritmos não suportam falhas ( de nós e de links)

� Ambos algoritmos não suportam redes dinâmicas, por exemplo, com a inclusão de nós durante a difusão

� Ambos os algoritmos não suportam várias difusões simultâneas

(35)

Análise Análise

Limitações

� Algoritmos de difusão reais

Na internet por exemplo

Criam rotas com os melhores caminhos entre 2 nós

Há vários critérios para o melhor caminho

Por exemplo, menor seqüência de mensagens (menor caminho no grafo)

O critério (medida) pode ser dependente do estado atual da rede

Por exemplo, banda

Deve ser constantemente medido e a rota refeita

Esse processo tem custo adicional, inclusive em

(36)

Resumo

� Algoritmo distribuído (AD)

� Grafo para AD

� Classe de ADs sobre grafos para difusão, coleta, STs, ...

� Difusão

Conceito

Com ST

Sobre árvore

Sobre grafo qualquer

� Idéia geral sobre grafo

� Complexidade em M e em T

Análise

Análise

(37)

Exercícios Exercícios

Exercícios

� A) modele a difusão usando uma API para sockets TCP

Java; Unix/C; ...

� B) idem usando API sockets UDP

� C) analise o código do Andrews verificando se ele ficou realmente simétrico para cada nó com a inclusão do processo iniciador

Dica: verifique a quantidade de vizinhos em certos nós

� D) desenhe o grafo de uma rede com 4 nós e as mensagens da difusão

� E) para um nó do caso acima, indique a ordem geral dos eventos

de send e receive (combinados)

(38)

Exercícios

� F) para o caso acima, indique se a ordem é constante ou se

depende de parâmetros de cada execução como banda, latência e disponibilidade de cpu em cada link e nó

� G) projete um algoritmo melhor se o grafo for a) anel; b) estrela

Compare a complexidade

� H) Calcule a complexidade em tempo

Ações internas: custo zero

1 mensagem: custo 1

Várias mensagens encadeadas: somar as mensagens

Complexidade: maior tempo a partir do nó iniciador

Exercícios

Exercícios

(39)

Exercícios

� I) Desenvolva uma variação que permita várias difusões simultâneas

� J) Desenvolva uma variação que guarde (gere) uma ST distribuída

Só com pai

Com pai e filhos

Exercícios

Exercícios

(40)

Revisão da Difusão Revisão da Difusão

Revisão

� qual a função do algoritmo de difusão?

� qual o contexto, restrições, ...?

� quais os dois principais passos de cada nó (processo)?

� qual e porque há um terceiro passo?

� porque deve-se reenviar a mensagem ao nó antecessor?

� qual a complexidade em termos de mensagens?

� qual a complexidade em termos de passos (mensagens sincronizadas, com dependências entre nós)?

� como a complexidade pode ser reduzida?

(41)

Algoritmos Distribuídos Algoritmos Distribuídos

Coleta por Probe/Echo

(42)

Sumário Sumário

Algoritmos para difusão e coleta

� coleta

conforme Andrews

modelo de processos

topologia árvore

topologia grafo

otimização Cássio Vogel

(43)

Bibliografia Bibliografia

Bibliografia

� [AND 91] ANDREWS, G.R. “Concurrent Programming - Principles and Practice”. The Benjamim/Cummings, Redwood City, 1991.

Cap 7, seção 7.6

� [AND 00] ANDREWS, G. R. Foundations of Multithreaded,

Parallel, and Distributed Programming. Addison-Wesley; 1

st

edition, 2000. 664p.

� [LYN 96] LYNCH, N. A. Distributed Algorithms. Morgan

Kaufmann Publishers, Inc., 1996. 872p.

(44)

Coleta Coleta

Requisitos e características da coleta

� similar à difusão do Andrews

� um processo

solicita a coleta

recebe toda as informações parciais

� nós não podem comunicar-se com não vizinhos

� duas versões Andrews

topologia em árvore: mais simples

topologia em grafo

tratamento dos vários caminhos

evitar ciclos

(45)

Coleta Coleta

Requisitos e características da coleta

� processo iniciador, único

torna código do nó origem similar aos outros

observar quantidade de vizinhos no código

� dois tipos de mensagens

Probe: pedido de coleta

Echo: resposta com a informação solicitada

(46)

Coleta em árvore Coleta em árvore

Idéia geral da solução para árvore

� nó recebe 1o Probe, de qualquer vizinho

vizinho torna-se pai

� nó repassa Probes a todos os vizinhos menos o pai

� nó recebe Echos de todos os vizinhos menos o pai

acumula a informação recebida mais a sua

� nó envia ao pai a informação acumulada

� Subindo a árvore, a informação total chega ao nó iniciador

(47)

Coleta em árvore Coleta em árvore

Código simétrico

� assimetria

nó iniciador não recebe 1a mensagem

� código simétrico

processo adicional, único, envia 1o probe ao nó iniciador

nó iniciador envia resultado final ao processo adicional

código do nó iniciador idêntico ao dos outros

processo adicional = iniciador

(48)

Coleta em árvore Coleta em árvore

Código simétrico

� grafo com processo iniciador

Processo

iniciador Nó iniciador

Probe

Echo final

(49)

Coleta em árvore Coleta em árvore

Código simétrico

� exercício

verifique a quantidade de nós vizinhos do nó iniciador X

valores adequados para execução do código

Processo

iniciador

(50)

Coleta em árvore Coleta em árvore

Caso exemplo

� coleta de topologia da rede

� nó iniciador terá ao final uma matriz n*n

cada elemento indica:

true: nó linha é vizinho de nó coluna

false: não são vizinhos

(51)

Coleta em árvore Coleta em árvore

Algoritmos Probe/Echo (cont.)

� determinação de topologia de árvore

# índice do nó que inicia o algoritmo const fonte = i

chan probe [1:n] (emissor : int)

# topologia parcial

chan echo [1:n] (localtop [1:n, 1:n] : bool)

# topologia final

chan echo_final (localtop [1:n, 1:n] : bool)

# livro: erro: é um vetor

(52)

Coleta em árvore Coleta em árvore

Algoritmos Probe/Echo (cont.)

� Nodo [p: 1..n]::

var links [1:n] : bool := “vizinhos do nó p”

var localtop [1:n, 1:n] : bool := ([n * n] false)

# inicializa topologia local com vizinhos localtop [p, 1:n] := links

var novotop [1:n, 1:n] : bool

var pai : int # nó de quem recebe probe

(53)

Coleta em árvore Coleta em árvore

Algoritmos Probe/Echo (cont.)

� determinação de topologia de árvore (cont.)

# recebe 1a mensagem receive probe [p] (pai)

# envia a outros vizinhos menos pai

fa q := 1 to n st links [q] and q <> pai ->

# envio de probe aos filhos send probe [q] (p)

af # recebe echos com topologia local

# tantos receives quantos vizinhos menos pai fa q := 1 to n st links [q] and q <> pai ->

receive echo [p] (novotop)

(54)

Algoritmos Probe/Echo (cont.)

� determinação de topologia de árvore (cont.) if p = fonte -> send echo_final [p] (localtop)

# p é a raiz da árvore

[] p <> fonte -> send echo [pai] (localtop) fi

Coleta em árvore

Coleta em árvore

(55)

Coleta em árvore Coleta em árvore

� Iniciador::

var top [1:n, 1:n] : bool

send probe [fonte] (fonte) # inicia probe no nó local

receive echo_final [fonte] (top)

(56)

Coleta em árvore Coleta em árvore

Comentários adicionais sobre o código

� porque 2 canais, Probe e Echo?

� porque canal Echo_final?

� porque mensagem Probe contem ID do nó emissor?

� quem usa canais [i] para recepção?

� quem usa canais [i] para envio?

(57)

Coleta em árvore Coleta em árvore

Comentários adicionais sobre o código

� porque 2 canais, Probe e Echo?

tipo da mensagem é diferente

� porque canal Echo_final?

para evitar que nó iniciador não receba mensagens dos filhos do nó raiz

� porque mensagem Probe contem ID do nó emissor?

para que nós filhos não enviem mensagens ao pai

� quem usa canais [i] para recepção?

nó i

� quem usa canais [i] para envio?

(58)

Coleta em grafo Coleta em grafo

Coleta para topologia em grafo

� grafo possui ciclos

� vizinhos poderão ser filhos de outro nó

� dois vizinhos “se” enviam probes

� código para árvore prevê recepção de um único probe

Pai do 3 Pai do 4

3 4

probe probe

probe

probe

(59)

Coleta em grafo Coleta em grafo

Coleta para topologia em grafo

� solução Andrews

probes adicionais são realmente recebidos e descartados

questão a)

nós esperam (v - 1) echos

v = número de vizinhos

solução a)

probes são respondidos com echos vazios

echo vazio deve ser consistente com operação de

acumulação da informação coletada

(60)

Coleta em grafo Coleta em grafo

Coleta para topologia em grafo

� solução Andrews

idéia geral do código

recebe 1o probe

loop de sends de probes aos vizinhos menos pai

loop de receives até (v - 1) echos

se probe envia echo vazio

se echo acumula

envia echo final ao pai

(61)

Coleta em grafo Coleta em grafo

Algoritmos Probe/Echo (cont.)

� determinação de topologia de grafo

# índice do nó que inicia o algoritmo const fonte = i

type tipo_mens = enum(PROBE, ECHO)

# canais

chan probe_echo [1:n] (tipo_mens, emissor : int, localtop[1:n, 1:n] : bool)

# topologia final

chan echo_final (localtop [1:n, 1:n] : bool)

# livro: erro: é um vetor

(62)

Coleta em grafo Coleta em grafo

� Nodo [p: 1..n]::

var links [1:n] : bool := “vizinhos do nó p”

var localtop [1:n, 1:n] : bool := ([n * n] false)

# inicializa topologia local com vizinhos localtop [p, 1:n] := links

# campo mensagem: topologia vizinho var novotop [1:n, 1:n] : bool

# nó de quem recebe primeiro probe var primeiro : int

# campo mensagem: tipo var tipo: tipo_mens

var emissor: int

# p/controle dos echoes

var falta_echo: int := 0 #

livro: erro: usa “num_vizinhos - 1”

# nó i não recebe um echo

(63)

Coleta em grafo Coleta em grafo

Algoritmos Probe/Echo (cont.)

� determinação de topologia de grafo (cont.)

receive probe_echo [p] (tipo, emissor, novotop) primeiro := emissor;

fa q := 1 to n st links [q] and q <> primeiro ->

# envio de probe aos filhos

send probe_echo [q] (PROBE, p, �);

falta_echo +:= 1

af

(64)

Coleta em grafo Coleta em grafo

Algoritmos Probe/Echo (cont.)

� # recebe echos com topologia local ou probes

# vazios

do falta_echo > 0 ->

receive probe_echo [p] (tipo, emissor, novotop)

if tipo = PROBE ->

send probe_echo [emissor]

(ECHO, p, �) [] tipo = ECHO ->

localtop := localtop or novotop

falta_echo := falta_echo - 1

od fi

(65)

Coleta em grafo Coleta em grafo

Algoritmos Probe/Echo (cont.)

� # p é a raiz da árvore

if p = fonte -> send echo_final [p] (localtop)

[] p <> fonte -> send probe_echo [primeiro] (ECHO, p, localtop)

fi

(66)

Coleta em grafo Coleta em grafo

Algoritmos Probe/Echo (cont.)

� determinação de topologia de grafo (cont.) Iniciador::

var top [1:n, 1:n] : bool

send probe_echo [fonte] (PROBE, fonte, �) # inicia probe no nó local

receive echo_final [fonte] (top)

(67)

Complexidade Complexidade

Quantidade de mensagens em grafo

� mensagens entre pai - filho

2: probe e echo

� mensagens entre 2 vizinhos

4: 2 probe e 2 echos

� relacionamentos pai-filho geram uma spanning tree

todos os nós do grafo

raiz é o nó iniciador

sem ciclos

quantidade de links = N - 1

(68)

Complexidade Complexidade

Quantidade de mensagens em grafo

1:

pai do 2

3:

pai de 4

e 5 2:

filho de i

4:

filho de 3

5:

filho

de 3

(69)

Complexidade Complexidade

Quantidade de mensagens em grafo

� quantidade total de mensagens

quantidade de pai-filho?

igual quantidade de nós: constante para um grafo

=> quantidade total de mensagens fixa para um grafo

2N + 4LA

LA: links adicionais do grafo

suprimidos na spanning tree

(70)

Complexidade Complexidade

Quantidade de passos?

(71)

Outros algoritmos Outros algoritmos

Outros algoritmos

� existem inúmeros outros algoritmos relacionados

� exemplos

geração distribuída da spanning tree

árvore para pesquisa em largura

� ótima fonte

[LIN 96]

(72)

Coleta em grafo Coleta em grafo

Questões

� código: porque um canal único para probe e echos?

� # mensagens?

dados N e L (total de links do grafo)

(73)

Resumo

� Coleta

Conceito

Sobre árvore

Sobre grafo qualquer

� Idéia geral sobre grafo

� Complexidade em M e em T

� Otimização Cássio Vogel

Reduzir a # de mensagens

Resumo

Resumo

(74)

Exercícios Exercícios

Exercícios

� A) modele a difusão ou a coleta usando Java e sockets TCP

em especial: gerência das conexões (IPs, portas, C/S, ...), classes e APIs de send/receive

� B) idem com Java sockets UDP

� C) mostre todas as mensagens em um grafo com 4 nós

� D) no grafo acima (ou outro) mostre a ordem total de eventos send e receive em um nó

� E) explique se a ordem acima é determinística ou não

� F) explique porque a mensagem final é enviada em um canal próprio (código SR)

� G) analise o código para verificar se a inclusão do processo iniciador realmente tornou o código homogêneo em cada nó

dicas: mensagens, contador de vizinhos

(75)

Exercícios Exercícios

Exercícios

� H) qual a vantagem do padrão de uso dos canais por processo, ou seja, envio no canal do destino e recepção no canal do receptor?

caso fosse feita uma inversão, por exemplo, recepção no canal do emissor e envio pelo canal do emissor?

� I) código SR: explique se os receives da fase 3 ocorrem de forma

ordenada pelo índice do vizinho (conforme loop)

(76)

Revisão

� Algoritmos Distribuídos

Uso de grafos: significados, tipos, propriedades, ...?

Complexidades usuais?

Modelo de comunicação básico?

Revisão da Difusão

Revisão da Difusão

(77)

Revisão da Difusão Revisão da Difusão

Revisão da difusão

� qual a função do algoritmo de difusão?

� qual o contexto, restrições, ...?

� o que é uma spanning tree?

� para que serve em difusão?

� como pode ser gerada?

� qual a idéia geral de difusão com ST gerada no nó iniciador?

(78)

Revisão Revisão

Revisão da difusão

� difusão sobre árvore

quais os dois principais passos de cada nó (processo)?

qual a complexidade em termos de mensagens?

qual a complexidade em termos de passos (mensagens sincronizadas, com dependências entre nós)?

� Código Andrews

Canais: semântica? Propriedades, atributos? Viabilidade?

Política de programação no uso de um elemento? Quem envia

e quem recebe?

(79)

Revisão Revisão

Revisão da difusão

� difusão sobre grafo

quais os dois principais passos de cada nó (processo)?

qual e porque há um terceiro passo?

porque deve-se reenviar a mensagem ao nó antecessor?

qual a complexidade em termos de mensagens?

qual a complexidade em termos de passos (mensagens sincronizadas, com dependências entre nós)?

como a complexidade pode ser reduzida?

(80)

Revisão Revisão

Revisão da coleta

� idéia geral do algoritmo? Qual a relação com a difusão?

� solução para grafo árvore?

� idem para grafo não árvore?

� otimização Cassio Vogel?

� quantidade de mensagens?

por aresta?

por árvore?

por grafo “grafo”?

(81)

���������������������������������������������������������������������������

���������������������������������������������������������������������������������

�����������������������������������������������������

Imagem

Referências

temas relacionados :