SLIDE 1
rt tt r s - - PowerPoint PPT Presentation
rt tt r s - - PowerPoint PPT Presentation
rt tt r s tts r r r s
SLIDE 2
SLIDE 3
❖✉t❧✐♥❡
❛❧❣✲❧❡✈❡❧
❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥✿ ❛❧❣♦r✐t❤♠ ❧❡✈❡❧ ❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥✿ ❛✇❛✐t✲❜❛s❡❞ ♣r♦❣r❛♠
SLIDE 4
❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥ ❛❧❣♦r✐t❤♠✿ ♦✈❡r✈✐❡✇
❛❧❣✲❧❡✈❡❧
❉✐str✐❜✉t❡❞ ♣r♦❣r❛♠ TdDiffusingDist st❛rts ❛ ✜❢♦ ❝❤❛♥♥❡❧ ❛♥❞ ❛ s②st❡♠ ❛t ❡❛❝❤ ❛❞❞r j ▼❛✐♥t❛✐♥s ❛ ❞✐str✐❜✉t❡❞ ♦✉t✲tr❡❡ r♦♦t❡❞ ❛t a0 ♦✈❡r ❛❝t✐✈❡ ✉s❡rs ❡①❛❝t❧② ♦♥❡ ❞✐r❡❝t❡❞ ♣❛t❤ ❢r♦♠ a0 t♦ ❡✈❡r② ❛❝t✐✈❡ ✉s❡r ♣❛t❤ ♠❛② ❣♦ ✈✐❛ ♥♦♥✲❧❡❛❢ ✐♥❛❝t✐✈❡ ✉s❡rs ♥♦ ♦t❤❡r ❡❞❣❡s✱ ✐❡✱ ♥♦ ✉♥❞✐r❡❝t❡❞ ❝②❝❧❡ ❈r❡❛t❡s [j,k] ✇❤❡♥ ♥♦♥✲tr❡❡ k r❝✈s ❛ j✲♠s❣ ❉❡❧❡t❡s [j,k] ✇❤❡♥ k ✐s ❛ ❧❡❛❢ ❛♥❞ ✐♥❛❝t✐✈❡ a0 ❞❡t❡❝ts t❡r♠✐♥❛t✐♦♥ ✇❤❡♥ ✐t ✐s ✐♥❛❝t✐✈❡ ❛♥❞ ❛ ❧❡❛❢ ❯s❡r ✜♥❞s ♦✉t ✐t ✐s ❛ ❧❡❛❢ ✈✐❛ ❛❝❦s t♦ ✉s❡r ♠s❣s
SLIDE 5
❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥ ❛❧❣♦r✐t❤♠
❛❧❣✲❧❡✈❡❧
❙②st❡♠s✱ ❡❛❝❤ ✇✐t❤ ❛ ✉s❡r✱ ❛tt❛❝❤❡❞ t♦ ❛ ✜❢♦ ❝❤❛♥♥❡❧ ❯s❡rs ❡①❝❤❛♥❣❡ ♠s❣s✱ ✇❤✐❝❤ s②st❡♠s r❡❧❛② ♦✈❡r ✜❢♦ ❝❤❛♥♥❡❧ ❙②st❡♠ ♠❡ss❛❣❡s ❞❛t❛ ♠s❣ [ DAT, sender addr, user msg ] ❛❝❦ ♠s❣ [ ACK ] ❙②st❡♠ j ✈❛rs active✿ ✐♥✐t✐❛❧❧② tr✉❡ ❢♦r a0✱ ♦✴✇ ❢❛❧s❡ engager✿ ✐♥✐t✐❛❧❧② a0 ❢♦r a0✱ ♦✴✇ null / / ✏✉♣✲str❡❛♠✑ ♥❡✐❣❜♦r ✐❢ j ✐♥ t❤❡ tr❡❡✱ ♦✴✇ ♥✉❧❧ unAcked✿ ✐♥✐t✐❛❧❧② 0 / / ★ ♦❢ ✉♥❛❝❦❡❞ ♦✉t❣♦✐♥❣ ❞❛t❛ ♠s❣s
SLIDE 6
❙②st❡♠ j r✉❧❡s ✕ ✶
❛❧❣✲❧❡✈❡❧
♦♥❧② ✐❢ active = tr✉❡✿ active ← ❢❛❧s❡ ♦♥❧② ✐❢ active s❡♥❞ [DAT,j,umsg] t♦ k unAcked + + r❡❝❡✐✈❡ [DAT,k,dmsg]✿ active ← true ✐❢ engager = null engager ← k ❡❧s❡ s❡♥❞ [ACK] t♦ k
SLIDE 7
❙②st❡♠ j r✉❧❡s ✕ ✷
❛❧❣✲❧❡✈❡❧
r❡❝❡✐✈❡ [ACK] unAcked-- ❉✐s❡♥❣❛❣❡ ♦♥❧② ✐❢ ✭♥♦t active ❛♥❞ unAcked = 0 ❛♥❞ engager = null✮ ✐❢ j = a0 s✐❣♥❛❧ t❡r♠✐♥❛t✐♦♥ ❡❧s❡ s❡♥❞ [ACK] t♦ engager engager ← null ❆ss✉♠♣t✐♦♥s r✉❧❡s ❛r❡ ❛t♦♠✐❝ ✇❡❛❦ ❢❛✐r♥❡ss ❢♦r ❞✐s❡♥❣❛❣❡
SLIDE 8
❆♥❛❧②s✐s ❛✉①✐❧✐❛r② q✉❛♥t✐t✐❡s
❛❧❣✲❧❡✈❡❧
numDAT(j)✿ # ❞❛t❛ ♠s❣s ✐♥ tr❛♥s✐t ♦✉t❣♦✐♥❣ ❢r♦♠ j numACK(j)✿ # ❛❝❦ ♠s❣s ✐♥ tr❛♥s✐t ✐♥❝♦♠✐♥❣ t♦ j termination✿ forall(j: not j.active and numDAT(j) = 0) eNodes✿ set(j: j.engager = null) / / ❡♥❣❛❣❡❞ ♥♦❞❡s eEdges✿ bag([k.engager, k]: k = a0, k.engager = null) / / ❡♥❣❛❣❡♠❡♥t ❡❞❣❡s eGraph✿ [eNodes, eEdges] / / ❡♥❣❛❣❡♠❡♥t ❞✐❣r❛♣❤
SLIDE 9
❆ss❡rt✐♦♥s t♦ ❜❡ ♣r♦✈❡❞
❛❧❣✲❧❡✈❡❧
❙❛❢❡t② A✶ : ■♥✈ (a0.unAcked = 0 and not a0.active) ⇒ termination Pr♦❣r❡ss A✷ : termination ❧❡❛❞s✲t♦ (a0.unAcked = 0 and not a0.active)
SLIDE 10
Pr♦♦❢ ♦❢ A✶
❛❧❣✲❧❡✈❡❧
■♥t❡r♠❡❞✐❛t❡ ♣r❡❞✐❝❛t❡s B✶ : eGraph ✐s ❛♥ ♦✉t✲tr❡❡ r♦♦t❡❞ ❛t a0 B✷ : j.unAcked = numDAT(j) + numACK(j) + sum([j,k]: [j,k] in eEdges) B✸ : j.engager = [] ⇒ (not j.active and j.unAcked = 0) ■♥✈ B✶✕B✸✿ B✶✕B✸ s❛t✐s✜❡s ✐♥✈❛r✐❛♥❝❡ r✉❧❡ B✶✕B✸ ✐♠♣❧✐❡s A✶✬s ♣r❡❞✐❝❛t❡ ❤❡♥❝❡ A✶ ❤♦❧❞s
SLIDE 11
Pr♦♦❢ ♦❢ A✷
❛❧❣✲❧❡✈❡❧
A✷ : termination ❧❡❛❞s✲t♦ (a0.unAcked = 0 and not a0.active) ❆ss✉♠❡ termination / / ❛❧❧ ✐♥❛❝t✐✈❡✱ ♥♦ ❞❛t❛ ♠s❣s ✐♥ tr❛♥s✐t ❆ss✉♠❡ eEdges ✐s ♥♦t ❡♠♣t② s♦ t❤❡r❡ ✐s ❛ ❧❡❛❢ ♥♦❞❡ j j ❤❛s ♥♦ ♦✉t❣♦✐♥❣ ❞❛t❛ ♠s❣s ♦r ✐♥❝♦♠✐♥❣ ❡❞❣❡s j✬s ✐♥❝♦♠✐♥❣ ❛❝❦s ❛r❡ ❡✈❡♥t✉❛❧❧② r❝✈❞ s♦ j.unAcked ❜❡❝♦♠❡s 0 ❛♥❞ st❛②s s♦ s♦ j s❡♥❞s ❛♥ ❛❝❦ t♦ ✐ts ❡♥❣❛❣❡r ❛♥❞ ❧❡❛✈❡s t❤❡ tr❡❡ ❊✈❡♥t✉❛❧❧② eEdges ✐s ❡♠♣t② ❛♥❞ a0.unAcked ✐s 0
SLIDE 12
❖✉t❧✐♥❡
❛✇❛✐t ♣r♦❣r❛♠
❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥✿ ❛❧❣♦r✐t❤♠ ❧❡✈❡❧ ❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥✿ ❛✇❛✐t✲❜❛s❡❞ ♣r♦❣r❛♠
SLIDE 13
❚❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥ ♣r♦❣r❛♠
❛✇❛✐t ♣r♦❣r❛♠
❉✐str✐❜✉t❡❞ ♣r♦❣r❛♠ TdDiffusingDist ( ADDR, a0 ) / / ✐♠♣❧❡♠❡♥ts TdChannel ❢♦r ♦♥❧② ❛✵ ✐♥✐t✐❛❧❧② ❛❝t✐✈❡ {cj} ← st❛rt FifoChannel(ADDR) ❢♦r j ✐♥ ADDR vj ← st❛rt TdDiffusing (ADDR, j, a0, cj) r❡t✉r♥ {vj} TdDiffusing✿ ❛✇❛✐t ♣r♦❣r❛♠✱ r❡✜♥❡s ❛❧❣✲❧❡✈❡❧ s②st❡♠ ✐♥♣✉t ❢♥s✿ tx✱ rx✱ inactive✱ isTerminated ✭♦♥❧② ❛t a0✮ ♦✉t♣✉t ❝❛❧❧s✿ tx✱ rx ♦❢ ❝❤❛♥♥❡❧ ❛❝❝❡ss s②st❡♠
SLIDE 14
Pr♦❣r❛♠ TdDiffusing✿ ♦✈❡r✈✐❡✇
❛✇❛✐t ♣r♦❣r❛♠
P❛r❛♠❡t❡rs ADDR✱ ❧♦❝❛❧ ❛❞❞r j✱ s✐♥❦ ❛❞❞r a0✱ ❝❤❛♥♥❡❧ ❛❝❝❡ss s②st❡♠ cj ■♥♣✉t ❢♥s ✭❝❛❧❧❡❞ ❜② ✉s❡r✮ tx(k,msg) rx() inactive() / / ✐♥❞✐❝❛t❡s ✉s❡r ✐♥❛❝t✐✈❡ isTerminated() ✭♦♥❧② ❛t a0✮ / / r❡t✉r♥ ♦♥❧② ✐❢ t❡r♠✐♥❛t✐♦♥ ▲♦❝❛❧ ❢♥ doRx()✱ ❡①❡❝✉t❡❞ ❜② ❧♦❝❛❧ t❤r❡❛❞ r❝✈s ♠s❣ ❢r♦♠ ❝❤❛♥♥❡❧✱ ✉♣❞❛t❡ t❞ st❛t❡ ❛❞❞ ✉s❡r ♠s❣ ✭✐❢ ❛♥②✮ t♦ ❛ ❜✉✛❡r / / ✉s❡r r❝✈s ❢r♦♠ ❜✉✛❡r / / ✐t✬s ♣❛rt ♦❢ ✉s❡r ✇rt t❞ st❛t❡
SLIDE 15
Pr♦❣r❛♠ TdDiffusing ✕ ✶
❛✇❛✐t ♣r♦❣r❛♠
▼❛✐♥ active ← (j = a0) engager ← if (j = a0) a0 else null unAcked ← 0 rxq ← [] / / ❜✉✛❡r ❢♦r r❝✈❞ ✉s❡r ♠s❣s startThread ( doRx() ) / / r❝✈s ♠s❣s ❢r♦♠ ❝❤❛♥♥❡❧ ✐♥♣✉t mysid.tx(k, msg) ❛✇❛✐t (true) unAcked + + cj.tx(k, [DAT, j, msg]) r❡t✉r♥
SLIDE 16
Pr♦❣r❛♠ TdDiffusing ✕ ✷
❛✇❛✐t ♣r♦❣r❛♠
✐♥♣✉t mysid.rx() ❛✇❛✐t (rxq.size > 0) msg ← rxq[0] rxq.remove() r❡t✉r♥ msg / / r❡t✉r♥ [msg,k] ✐♥♣✉t mysid.inactive() ❛✇❛✐t (true) ✐❢ rxq = [] active ← false ✐❢ ✭❥ = ❛✵ ❛♥❞ ✉♥❆❝❦❡❞ = ✵✮ cj.tx( engager, [ACK] ) / / ❞✐s❡♥❣❛❣❡ engager ← null
SLIDE 17
Pr♦❣r❛♠ TdDiffusing ✕ ✸
❛✇❛✐t ♣r♦❣r❛♠
❢✉♥❝t✐♦♥ doRx() / / ❡①❡❝✉t❡❞ ❜② ❛ ❧♦❝❛❧ t❤r❡❛❞ ✇❤✐❧❡ true msg ← cj.rx() / / ✐❛ {msg ✐s [DAT, k, msg]✱ [ACK]} ❛✇❛✐t true ✐❢ msg = [DAT, k, msg] rxq.append(msg) active ← true ✐❢ (engager = null) engager ← k ❡❧s❡ cj.tx(k, [ACK]) ❡❧s❡ ✐❢ msg = [ACK] unAcked -- ✐❢ ✭j = a0 and unAcked = 0 and not active✮ cj.tx( engager, [ACK] ) / / ❞✐s❡♥❣❛❣❡ engager ← null
SLIDE 18
Pr♦❣r❛♠ TdDiffusing ✕ ✹
❛✇❛✐t ♣r♦❣r❛♠
✐♥♣✉t mysid.isTerminated() ✐❛ {j = a0} / / ♦♥❧② ❛t a0 ❛✇❛✐t not active and unAcked = 0 r❡t✉r♥ ❛t♦♠✐❝✐t② ❛ss✉♠♣t✐♦♥ {awaits} ♣r♦❣r❡ss ❛ss✉♠♣t✐♦♥ {✇❢❛✐r t❤r❡❛❞s}
SLIDE 19
❆♥❛❧②s✐s✿ ♦✈❡r✈✐❡✇
❛✇❛✐t ♣r♦❣r❛♠
❚♦ ♣r♦✈❡✿ TdDiffusingDist ( ADDR, a0 ) ✐♠♣❧❡♠❡♥ts TdChannel ( ADDR, a0, a0 ) ❯s✉❛❧ st❡♣s ❞❡✜♥❡ ♣r♦❣r❛♠ ♦❢ ✐♠♣❧❡♠❡♥t❛t✐♦♥ {vj} ❛♥❞ s❡r✈✐❝❡ ✐♥✈❡rs❡ si ✐❞❡♥t✐❢② ❡✛❡❝t✐✈❡ ❛t♦♠✐❝✐t② ❜r❡❛❦♣♦✐♥ts ♦❜t❛✐♥ ❛ss❡rt✐♦♥s ♣r♦✈❡ ♣r♦❣r❛♠ s❛t✐s✜❡s ❛ss❡rt✐♦♥s / / ❡❛s② ❣✐✈❡♥ ⋆ ❆ss❡rt✐♦♥s ❞❡❛❧ ✇✐t❤ t✇♦ ✐ss✉❡s ✜❢♦ ❝❤❛♥♥❡❧ t❡r♠✐♥❛t✐♦♥ ❞❡t❡❝t✐♦♥
SLIDE 20
❆♥❛❧②s✐s✿ ✜❢♦ ❝❤❛♥♥❡❧ ❛ss❡rt✐♦♥s
❛✇❛✐t ♣r♦❣r❛♠
[msg,k] r❡t✉r♥❡❞ ❜② j.rx ♥❡①t ✐♥ ✜❢♦ ♦r❞❡r ❢r♦♠ k r❡❝❛❧❧ ✜❢♦ ❝❤❛♥♥❡❧ r① ❤❛s ✐♥t❡r♥❛❧ ♣❛r❛♠ s❡♥❞❡r✲❛❞❞r k s♦ ❛✉❣♠❡♥t j.rx r❡t✉r♥ ✭❛♥❞ j.rxq ❡♥tr✐❡s✮ ✇✐t❤ k Pr♦♦❢✿ si.rxhk,j ◦ (rxq k✲❡♥tr✐❡s) = (chan.rxhk,j ❞❛t❛ ❡♥tr✐❡s) msg ✐♥ tr❛♥s✐t ✐s ❡✈❡♥t✉❛❧❧② r❝✈❞ ✐❢ j.rx ♦♥❣♦✐♥❣ Pr♦♦❢✿ msg ❡♥t❡rs j.rxq ✭❝❤❛♥♥❡❧ ♣r♦❣✮✱ t❤❡♥ ✉s❡r ✭❛✇❛✐t ❢❛✐r♥❡ss✮ ♦♥❣♦✐♥❣ j.tx ❡✈❡♥t✉❛❧❧② r❡t✉r♥s Pr♦♦❢✿ j.tx ✐s ♥♦♥✲❜❧♦❝❦✐♥❣✱ ❛✇❛✐t ❢❛✐r♥❡ss
SLIDE 21