Κατανεμημένα Συστήματα Ι Εκλογή αρχηγού και κατασκευή BFS δένδρου σε σύγχρονο γενικό δίκτυο Παναγιώτα Παναγοπούλου
Περίληψη Εκλογή αρχηγού σε γενικά δίκτυα Ορισμός του προβλήματος Ο αλγόριθμος FloodMax Ο αλγόριθμος OptFloodMax Αναζήτηση πρώτα κατά πλάτος Ορισμός του προβλήματος Ο αλγόριθμος SynchBFS Παραλλαγές και εφαρμογές
Εκλογή αρχηγού σε γενικά δίκτυα Ορισμός του προβλήματος Ο αλγόριθμος FloodMax Ο αλγόριθμος OptFloodMax Αναζήτηση πρώτα κατά πλάτος Ορισμός του προβλήματος Ο αλγόριθμος SynchBFS Παραλλαγές και εφαρμογές
Μοντέλο Το κατευθυνόμενο γράφημα G = (V, E) είναι ισχυρά συνεκτικό, δηλαδή υπάρχει κατευθυνόμενο μονοπάτι ανάμεσα σε κάθε ζεύγος κόμβων Υποθέτουμε και πάλι ότι οι κόμβοι/διεργασίες έχουν δείκτες 1, 2,, n (αυθαίρετη ανάθεση στις διεργασίες) Οι διεργασίες δεν ξέρουν τους δείκτες (τους χρησιμοποιούμε εμείς για να αναφερόμαστε στις διεργασίες) Οι διεργασίες έχουν μοναδικές ταυτότητες (UIDs) Κάθε διεργασία γνωρίζει μόνο το δικό της UID
Ισχυρά συνεκτικά δίκτυα Το παραπάνω γράφημα δεν είναι ισχυρά συνεκτικό Τα υπογραφήματα στα περιγράμματα είναι ισχυρά συνεκτικά (αποτελούν τις ισχυρά συνεκτικές συνιστώσες του γραφήματος)
Εκλογή αρχηγού Οι διεργασίες έχουν UIDs από κάποιο ολικά διατεταγμένο σύνολο (πχ N + ) Το UID κάθε διεργασίας είναι διαφορετικό από των υπολοίπων Δεν υπάρχει περιορισμός στο ποια UIDs εμφανίζονται τελικά από το σύνολο Ακριβώς μία διεργασία ορίζει τελικά τον εαυτό της αρχηγό θέτοντας leader true Εκδοχές του προβλήματος: Μπορεί να απαιτείται και οι από τους μη-αρχηγούς να θέσουν leader false Το n και το diam μπορεί να είναι γνωστά ή άγνωστα στις διεργασίες (ή μπορεί απλά να γνωρίζουν άνω φράγματα σε αυτές τις ποσότητες)
Ο αλγόριθμος FloodMax Περιγραφή του αλγορίθμου Οι διεργασίες διατηρούν μια μεταβλητή leader (αρχηγός) η οποία αρχικά είναι false, και μια μεταβλητή max_uid (μέγιστη_ταυτότητα) με αρχική τιμή την ταυτότητα της διεργασίας Σε κάθε γύρο, οι διεργασίες εκπέμπουν το max_uid σε όλους τους γείτονες Μόλις λάβουν μία ταυτότητα απο κάποιον γείτονα, τη συγκρίνουν με τo max_uid Αν είναι μεγαλύτερη, θέτουν τη μεταβλητή στη νέα τιμή Μετά από diam γύρους, αν η μεταβλητή ισούται με την ταυτότητα της διεργασίας, η διεργασία μεταβαίνει στην κατάσταση εκλεγμένη θέτοντας τη μεταβλητή leader στην τιμή true
Ο αλγόριθμος FloodMax Χαρακτηριστικά του αλγορίθμου Οι διεργασίες δεν γνωρίζουν το πλήθος των διεργασιών n Οι διεργασίες γνωρίζουν τη διάμετρο του γραφήματος diam Ο αλγόριθμος βασίζεται σε απλές πράξεις σύγκρισης ταυτοτήτων Ο αλγόριθμος πλημμυρίζει (floods) το δίκτυο με το μέγιστο UID
Ο αλγόριθμος FloodMax Ψευδοκώδικας (1/2) Το αλφάβητο μηνυμάτων M είναι το σύνολο των UIDs states i αποτελείται από: u, ένα UID, αρχικά το UID της i max_uid, ένα UID, αρχικά το UID της i leader {unknown, true, false}, αρχικά unknown rounds, ένας ακέραιος, αρχικά 0 msgs i : if rounds < diam then στείλε max_uid σε κάθε j out_nbrs
Ο αλγόριθμος FloodMax Ψευδοκώδικας (2/2) trans i : rounds rounds + 1 Έστω U το σύνολο των UIDs που έλαβες από in_nbrs max_uid max({max_uid} U) if rounds = diam then if max_uid = u then leader true else leader false
Παράδειγμα εκτέλεσης του αλγορίθμου FloodMax Έστω ένα σύγχρονο κατανεμημένο σύστημα από n = 8 διεργασίες Γενικό δίκτυο, diam = 3 Οι διεργασίες είναι αριθμημένες από 1 έως 8
Παράδειγμα εκτέλεσης του αλγορίθμου FloodMax Έστω ένα σύγχρονο κατανεμημένο σύστημα από n = 8 διεργασίες Γενικό δίκτυο, diam = 3 Οι διεργασίες είναι αριθμημένες από 1 έως 8 Οι διεργασίες έχουν μοναδικές ταυτότητες Δεν γνωρίζουν την ταυτότητα των υπόλοιπων διεργασιών
Παράδειγμα εκτέλεσης του αλγορίθμου FloodMax Έστω ένα σύγχρονο κατανεμημένο σύστημα από n = 8 διεργασίες Γενικό δίκτυο, diam = 3 Οι διεργασίες είναι αριθμημένες από 1 έως 8 Οι διεργασίες έχουν μοναδικές ταυτότητες Δεν γνωρίζουν την ταυτότητα των υπόλοιπων διεργασιών Πρώτος γύρος (αποστολή μηνυμάτων)
Παράδειγμα εκτέλεσης του αλγορίθμου FloodMax Έστω ένα σύγχρονο κατανεμημένο σύστημα από n = 8 διεργασίες Γενικό δίκτυο, diam = 3 Οι διεργασίες είναι αριθμημένες από 1 έως 8 Οι διεργασίες έχουν μοναδικές ταυτότητες Δεν γνωρίζουν την ταυτότητα των υπόλοιπων διεργασιών Πρώτος γύρος (αποστολή μηνυμάτων) Δεύτερος γύρος
Παράδειγμα εκτέλεσης του αλγορίθμου FloodMax Έστω ένα σύγχρονο κατανεμημένο σύστημα από n = 8 διεργασίες Γενικό δίκτυο, diam = 3 Οι διεργασίες είναι αριθμημένες από 1 έως 8 Οι διεργασίες έχουν μοναδικές ταυτότητες Δεν γνωρίζουν την ταυτότητα των υπόλοιπων διεργασιών Πρώτος γύρος (αποστολή μηνυμάτων) Δεύτερος γύρος Εκλογή αρχηγού (διεργασία 2)
Ανάλυση του αλγορίθμου FloodMax Έστω n διεργασίες και m = E κανάλια, όπου η διεργασία με τη μεγαλύτερη ταυτότητα είναι η i max Η διεργασία i max εκλέγεται αρχηγός στο τέλος του γύρου diam Καμμία διεργασία εκτός της i max δεν είναι σε κατάσταση εκλεγμένη Η χρονική πολυπλοκότητα είναι O(diam(G)) Η πολυπλοκότητα επικοινωνίας είναι O(diam(G) m)
Απόδειξη ορθότητας του FloodMax (1/3) Θεώρημα Στον αλγόριθμο FloodMax, η διεργασία i max θέτει leader true και κάθε άλλη διεργασία θέτει leader false σε diam γύρους Απόδειξη Αρκεί να δό στο γύρο r = diam κάθε j V έχει ήδη θέσει ή θέτει max_uid u max Αν ισχύει αυτό, τότε η i max βλέπει max_uid = u max και θέτει leader true, ενώ κάθε j V, j i max βλέπει max_uid = u max > u και θέτει leader false
Απόδειξη ορθότητας του FloodMax (2/3) Απόδειξη (συνέχεια) Αρκεί να δό στο γύρο r = diam κάθε j V έχει ήδη θέσει ή θέτει max_uid u max Παρατηρούμε ότι j V ισχύει ότι dist(i max, j) diam Δηλ μονοπάτι από την i max στην j μήκους x diam i max 1 2 3 4 5 x
Απόδειξη ορθότητας του FloodMax (3/3) Απόδειξη (συνέχεια) i max 1 2 3 4 5 x Αρκεί να δό στο γύρο x, η διεργασία σε απόσταση x από την i max παραλαμβάνει u max Με επαγωγή στον αριθμό των γύρων (βάση) Αρχικά η i max έχει max_uid = u max Άρα στο γύρο 1 η i max στέλνει u max και η 1 το παραλαμβάνει υπόθεση) Έστω ότι στο γύρο r η διεργασία r παραλαμβάνει u max (βήμα) Επειδή u max > u i, i V, i i max, η r θέτει max-uid u max, άρα στο γύρο r + 1 στέλνει u max και η r + 1 παραλαμβάνει στο γύρο r + 1 j V, j i max, στο γύρο dist(i max, j) diam, η j παραλαμβάνει u max και θέτει max_uid u max
Ανάλυση πολυπλοκότητας του FloodMax Χρονική Πολυπλοκότητα
Ανάλυση πολυπλοκότητας του FloodMax Χρονική Πολυπλοκότητα Στο γύρο diam όλοι παίρνουν μια απόφαση, άρα η χρονική πολυπλοκότητα είναι diam γύροι Πολυπλοκότητα Επικοινωνίας
Ανάλυση πολυπλοκότητας του FloodMax Χρονική Πολυπλοκότητα Στο γύρο diam όλοι παίρνουν μια απόφαση, άρα η χρονική πολυπλοκότητα είναι diam γύροι Πολυπλοκότητα Επικοινωνίας Σε κάθε γύρο, κάθε διεργασία στέλνει το max_uid σε όλες τις εξερχόμενες ακμές της Επειδή κάθε e E είναι εξερχόμενη ακριβώς μίας κορυφής, σε κάθε γύρο στέλνεται ακριβώς ένα μήνυμα από την e, άρα E μηνύματα σε κάθε γύρο Αφού ο αριθμός των γύρων είναι diam, συνολικά στέλνονται diam E μηνύματα
Ανάλυση πολυπλοκότητας του FloodMax Χρονική Πολυπλοκότητα Στο γύρο diam όλοι παίρνουν μια απόφαση, άρα η χρονική πολυπλοκότητα είναι diam γύροι Πολυπλοκότητα Επικοινωνίας Σε κάθε γύρο, κάθε διεργασία στέλνει το max_uid σε όλες τις εξερχόμενες ακμές της Επειδή κάθε e E είναι εξερχόμενη ακριβώς μίας κορυφής, σε κάθε γύρο στέλνεται ακριβώς ένα μήνυμα από την e, άρα E μηνύματα σε κάθε γύρο Αφού ο αριθμός των γύρων είναι diam, συνολικά στέλνονται diam E μηνύματα Σημείωση: Ο αλγόριθμος δουλεύει ακόμα και αν οι διεργασίες γνωρίζουν ένα άνω φράγμα d στη διάμετρο (δηλ d diam) Η πολυπλοκότητα τότε εξαρτάται από το d (στη θέση του diam)
Βελτίωση πολυπλοκότητας επικοινωνίας Ιδέα: Οι διεργασίες στέλνουν τις max_uid τιμές τους μόνο όταν τις μαθαίνουν για πρώτη φορά (όχι σε κάθε γύρο) Το u max προωθείται σαν κύμμα προς όλες τις διεργασίες Βελτιώνει στην πράξη αλλά όχι στη χειρότερη περίπτωση (Αλγόριθμος OptFloodMax)
Αλγόριθμος OptFoodMax Ψευδοκώδικας (1/2) Το M είναι το σύνολο των UIDs states i αποτελείται από: u, ένα UID, αρχικά το UID της i max_uid, ένα UID, αρχικά το UID της i leader {unknown, true, false}, αρχικά unknown rounds, ακέραιος, αρχικά 0 new_info, boolean, αρχικά true msgs i : if rounds < diam and new_info =true then στείλε max_uid σε κάθε j out_nbrs
Αλγόριθμος OptFoodMax Ψευδοκώδικας (2/2) trans i : rounds rounds + 1 Έστω U το σύνολο των UIDs που έλαβες από in_nbrs if max(u) > max_uid then new_info true max_uid max(u) else new_info false if rounds = diam then if max_uid = u then leader true else leader false
Απόδειξη ορθότητας του OptFloodMax (1/2) Θεώρημα Στον αλγόριθμο OptFloodMax η διεργασία i max θέτει leader true και κάθε άλλη διεργασία θέτει leader false σε diam γύρους Απόδειξη Θα αποδείξουμε την ορθότητα του OptFloodMax δείχνοντας ότι όταν ξεκινάει από την ίδια ανάθεση UIDs και το ίδιο δίκτυο με τον FloodMax, προσομοιώνει τη συμπεριφορά του Θα αποδείξουμε μια σχέση προσομοίωσης που περιλαμβάνει τις καταστάσεις και των δύο αλγορίθμων μετά τον ίδιο αριθμό γύρων
Απόδειξη ορθότητας του OptFloodMax (2/4) Θα δό r, 0 r diam, μετά από r γύρους οι τιμές των u, max-uid, leader, και rounds μεταβλητών είναι ίδιες στις καταστάσεις και των δύο αλγορίθμων Για τα u, rounds, και leader, ισχύει τετριμμένα για κάθε r < diam
Απόδειξη ορθότητας του OptFloodMax (3/4) Απόδειξη (συνέχεια) Απομένει να δό μετά από κάθε γύρο r, max_uid i = max_uid i, όπου με αναφερόμαστε στον OptFloodMax Αυτό θα συνεπάγεται και leader i = leader i μετά το γύρο diam, δηλαδή ότι και οι δύο αλγόριθμοι παίρνουν τελικά την ίδια απόφαση σε όλες τις διεργασίες
Απόδειξη ορθότητας του OptFloodMax (4/4) Θα δείξουμε ότι μετά από κάθε γύρο r, max_uid i = max_uid i, όπου με αναφερόμαστε στον OptFloodMax Απόδειξη με επαγωγή στον αριθμό των γύρων r: Αν στο γύρο r ισχύει max_uid i = max_uid i, τότε δό ισχύει και στον r + 1 (ισχύει τετριμμένα για r = 0) Η μόνη ενδιαφέρουσα περίπτωση είναι όταν η i δεν στέλνει στον OptFoodMax ενώ στέλνει στον FloodMax Όμως εύκολα μπορούμε να δείξουμε ότι σε αυτή την περίπτωση καμμία διεργασία δεν μπορεί να μη γνωρίζει το max_uid i Άρα η αποστολή του max_uid i από τον FloodMax είναι περιττή
Σημειώσεις για μέθοδο προσομοίωσης Η μέθοδος της προσομοίωσης είναι πολύ χρήσιμη στην απόδειξη της ορθότητας βελτιστοποιημένων εκδοχών κατανεμημένων αλγορίθμων Πρώτα αποδεικνύεται ορθή μία απλή εκδοχή Έπειτα μία πιο αποδοτική αλλά πιο σύνθετη εκδοχή επαληθεύεται αποδεικνύοντας μία τυπική σχέση μεταξύ αυτής και του απλού αλγορίθμου Στους σύγχρονους αλγορίθμους γίνεται γενικά μέσω των καταστάσεων και των δύο αλγορίθμων μετά από τον ίδιο αριθμό γύρων
Παρατηρήσεις Μπορούμε να μειώσουμε λίγο ακόμα το πλήθος των μηνυμάτων του FloodMax: Αν μια διεργασία i λάβει νέο μέγιστο από τη διεργασία j που είναι και εισερχόμενος και εξερχόμενος γείτονάς της, τότε η i δεν χρειάζεται να στείλει μήνυμα στη j στον επόμενο γύρο Ο FloodMax μπορεί να θεωρηθεί γενίκευση του LCR, όμως ο LCR δεν χρειάζεται να ξέρει τη διάμετρο, στον LCR ο αρχηγός εκλέγεται όταν μια διεργασία λάβει μήνυμα με το δικό της UID και όχι μετά από ένα συγκεκριμένο αριθμό γύρων όπως στον FloodMax
Αντιπαράδειγμα για τον OptFloodMax (1/3) Παρουσιάζουμε ένα δίκτυο και μία ανάθεση UIDs στις διεργασίες του, στα οποία ο αλγόριθμος στέλνει Θ(n 3 ) μηνύματα Η πολυπλοκότητα επικοινωνίας του FloodMax είναι diam E = O(n 3 ) Άρα θα έχουμε δείξει ότι ο OptFloodMax δεν βελτιώνει τον FloodMax στη χειρότερη περίπτωση
Αντιπαράδειγμα για τον OptFloodMax n n 1 n 2 n 3 3 2 1 UIDs i, 2 i n, (i, i 1) E (η κατευθυνόμενη γραμμή προς τα δεξιά), u i = i i, j, 1 i < j n, (i, j) E (όλες οι αντίστροφες ακμές - προσοχή, δεν είναι όλες ζωγραφισμένες στην εικόνα) diam = n 1, γιατί dist(n, 1) = n 1 Η διεργασία 1 έχει n 1 εξερχόμενες ακμές και i > 1, η διεργασία i έχει n i + 1 εξερχόμενες ακμές Οι αντίστροφες ακμές δεν συνεισφέρουν νέα γνώση αφού πάντα στέλνουν μικρότερο id σε διεργασία που ξέρει μεγαλύτερο id
Αντιπαράδειγμα για τον OptFloodMax (2/3) n n 1 n 2 n 3 3 2 1 n n 1 n 2 4 3 2 n n 1 5 4 3 n 6 5 4 n n n 1 1 2 3 n 2 n 1 n 1 # transmissions 4
Αντιπαράδειγμα για τον OptFloodMax (3/3) Αριθμός μηνυμάτων: n #messages = (n 1) 2 + (n i + 1) 2 i=2 [ n ] = (n i + 1) 2 2n + 1 i=1 [ n ] = i 2 2n + 1 i=1 = n3 3 + n2 2 + n 6 2n + 1 = Θ(n 3 )
Εκλογή αρχηγού σε γενικά δίκτυα Ορισμός του προβλήματος Ο αλγόριθμος FloodMax Ο αλγόριθμος OptFloodMax Αναζήτηση πρώτα κατά πλάτος Ορισμός του προβλήματος Ο αλγόριθμος SynchBFS Παραλλαγές και εφαρμογές
Ορισμοί Ένα κατευθυνόμενο επικαλυπτικό δέντρο ενός κατευθυνόμενου γραφήματος G = (V, E) είναι ένα δέντρο με ρίζα που αποτελείται απκλειστικά από κατευθυνόμενες ακμές του E, με όλες τις ακμές να έχουν κατεύθυνση από τους γονείς στα παιδιά τους, και που περιέχει κάθε κορυφή του G Ένα κατευθυνόμενο επικαλυπτικό δέντρο του G με ρίζα τον κόμβο i 0 είναι πρώτα κατά πλάτος αν κάθε κόμβος σε απόσταση d από τον i 0 στο G εμφανίζεται σε βάθος d στο δένδρο Κάθε ισχυρά συνεκτικό κατευθυνόμενο γράφημα έχει ένα πρώτα κατά πλάτος κατευθυνόμενο επικαλυπτικό δένδρο
Αναζήτηση πρώτα κατά πλάτος Σε ένα σύγχρονο δίκτυο G, η αναζήτηση πρώτα κατά πλάτος (breadth-first search, BFS) απαιτεί την κατασκευή ενός επικαλυπτικού δέντρου T(G), με ρίζα μια διεργασία i 0, όπου οι κορυφές που είναι σε απόσταση d από την i 0 στο G βρίσκονται στο επίπεδο d του δέντρου T(G) Υποθέτουμε πλήρως συνεκτικό γράφημα Ο αλγόριθμος πρέπει να δίνει ως έξοδο τη δομή ενός πρώτα κατά πλάτος κατευθυνόμενου επικαλυπτικού δένδρου Η έξοδος πρέπει να δίνεται κατανεμημένα: κάθε διεργασία πρέπει να ορίζει το γονέα της
Ο αλγόριθμος SynchBFS Οι διεργασίες διατηρούν μια μεταβλητή μαρκαρισμένη η οποία αρχικά είναι false και μια μεταβλητή γονέας με αρχική τιμή 0
Ο αλγόριθμος SynchBFS Οι διεργασίες διατηρούν μια μεταβλητή μαρκαρισμένη η οποία αρχικά είναι false και μια μεταβλητή γονέας με αρχική τιμή 0 Αρχικά, η διεργασία u 0 θέτει τη μεταβλητή μαρκαρισμένη ως true, τη γονέας ίση με την ταυτότητα της, και στέλνει ένα μήνυμα αναζήτησης σε όλους τους γείτονες της
Ο αλγόριθμος SynchBFS Οι διεργασίες διατηρούν μια μεταβλητή μαρκαρισμένη η οποία αρχικά είναι false και μια μεταβλητή γονέας με αρχική τιμή 0 Αρχικά, η διεργασία u 0 θέτει τη μεταβλητή μαρκαρισμένη ως true, τη γονέας ίση με την ταυτότητα της, και στέλνει ένα μήνυμα αναζήτησης σε όλους τους γείτονες της Σε κάθε γύρο, εάν μια διεργασία λάβει ένα μήνυμα αναζήτησης και η τιμή της μεταβλητής μαρκαρισμένη είναι false, τότε θέτει τη μεταβλητή σε true, θέτει τη γονέας ίση με την ταυτότητα της διεργασίας από όπου έλαβε το μήνυμα, και στον επόμενο γύρο στέλνει ένα μήνυμα αναζήτησης σε όλους τους γείτονες της
Ο αλγόριθμος SynchBFS Οι διεργασίες διατηρούν μια μεταβλητή μαρκαρισμένη η οποία αρχικά είναι false και μια μεταβλητή γονέας με αρχική τιμή 0 Αρχικά, η διεργασία u 0 θέτει τη μεταβλητή μαρκαρισμένη ως true, τη γονέας ίση με την ταυτότητα της, και στέλνει ένα μήνυμα αναζήτησης σε όλους τους γείτονες της Σε κάθε γύρο, εάν μια διεργασία λάβει ένα μήνυμα αναζήτησης και η τιμή της μεταβλητής μαρκαρισμένη είναι false, τότε θέτει τη μεταβλητή σε true, θέτει τη γονέας ίση με την ταυτότητα της διεργασίας από όπου έλαβε το μήνυμα, και στον επόμενο γύρο στέλνει ένα μήνυμα αναζήτησης σε όλους τους γείτονες της Υποθέσεις: Οι διεργασίες δεν γνωρίζουν το πλήθος των διεργασιών n Οι διεργασίες έχουν μοναδικές ταυτότητες
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS Αρχικό δίκτυο Το δίκτυο έχει 9 κόμβους, 14 ακμές Η διεργασία 1 ξεκινά την εκτέλεση του αλγορίθμου Η διεργασία 1 θεωρείται μαρκαρισμένη Όλες οι άλλες διεργασίες δεν είναι μαρκαρισμένες Αρχικό δίκτυο 1 5 2 6 3 7 9 4 8 1
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 1ος γύρος 1ο βήμα Η διεργασία 1 στέλνει μήνυμα αναζήτησης σε όλους του γείτονες της 1ος γύρος 1ο βήμα 1 5 2 6 3 7 9 4 8 1 s s
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 1ος γύρος 1ο βήμα Η διεργασία 1 στέλνει μήνυμα αναζήτησης σε όλους του γείτονες της 1ος γύρος 2ο βήμα Οι διεργασίες 2, 5 μαρκάρονται Οι διεργασίες 2, 5 θέτουν την 1 ως γονέα στο δέντρο 1ος γύρος 2ο βήμα 1 5 2 6 3 7 9 4 8 1 1 1
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 2ος γύρος 1ο βήμα Οι διεργασίες 2, 5 στέλνουν μήνυμα αναζήτησης σε όλους τους γείτονες τους 2ος γύρος 1ο βήμα 1 5 2 6 3 7 9 4 8 1 1 1 s s s s s s s s
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 2ος γύρος 1ο βήμα Οι διεργασίες 2, 5 στέλνουν μήνυμα αναζήτησης σε όλους τους γείτονες τους 3 2ος γύρος 2ο βήμα 5 2ος γύρος 2ο βήμα Η διεργασία 1 αγνοεί τα μηνύματα αναζήτησης που έλαβε Οι διεργασίες 3, 4, 7, 8, 9 μαρκάρονται Οι διεργασίες 3, 8 θέτουν την 5 ως γονέα στο δέντρο 5 1 8 5 9 2 6 4 2 Οι διεργασίες 4, 7 θέτουν την 2 ως γονέα στο δέντρο 1 1 1 2 7 2 Η διεργασία 9 διαλέγει τυχαία την 2 ως γονέα στο δέντρο
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 3ος γύρος 1ο βήμα Οι διεργασίες 3, 4, 7, 8, 9 στέλνουν μήνυμα αναζήτησης σε όλους τους γείτονες τους 3ος γύρος 1ο βήμα 1 5 2 6 3 7 9 4 8 1 1 5 2 1 2 5 2 s s s s s s s s s s s s s s s s
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 3ος γύρος 1ο βήμα Οι διεργασίες 3, 4, 7, 8, 9 στέλνουν μήνυμα αναζήτησης σε όλους τους γείτονες τους 3ος γύρος 2ο βήμα Οι διεργασίες 2, 3, 4, 5, 7, 8, 9 αγνοούν τα μηνύματα αναζήτησης που έλαβαν Η διεργασία 6 μαρκάρεται Η διεργασία 6 διαλέγει τυχαία την 8 ως γονέα στο δέντρο 3ος γύρος 2ο βήμα 1 5 2 6 3 7 9 4 8 1 1 5 2 1 8 2 5 2
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 4ος γύρος 1ο βήμα Η διεργασία 6 στέλνει μήνυμα αναζήτησης σε όλους του γείτονες της 4ος γύρος 1ο βήμα 1 5 2 6 3 7 9 4 8 1 1 5 2 1 8 2 5 2 s s
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS 4ος γύρος 1ο βήμα Η διεργασία 6 στέλνει μήνυμα αναζήτησης σε όλους του γείτονες της 4ος γύρος 2ο βήμα Οι διεργασίες 4, 8 αγνοούν τα μηνύματα αναζήτησης που έλαβαν 4ος γύρος 2ο βήμα 1 5 2 6 3 7 9 4 8 1 1 5 2 1 8 2 5 2
Παράδειγμα εκτέλεσης του αλγορίθμου SynchBFS Τελικό δίκτυο Το δέντρο αναζήτησης κατά εύρος έχει κατασκευαστεί Ο αλγόριθμος εκτελέστηκε σε 4 γύρους Συνολικά μεταδόθηκαν 28 μηνύματα Τελικό δίκτυο 1 5 2 6 3 7 9 4 8 1 1 5 2 1 8 2 5 2
Χαρακτηριστικά του αλγορίθμου SynchBFS Ο αλγόριθμος SynchBFS κατασκευάζει ένα δέντρο αναζήτησης πρώτα κατά πλάτος Η δομή του δέντρου δεν είναι αποθηκευμένη σε κάποια κεντρική διεργασία Η χρονική πολυπλοκότητα είναι το πολύ diam γύροι Στην πραγματικότητα είναι η μέγιστη απόσταση από τη u0 Στο παράδειγμα, η διάμετρος είναι 4, αλλά η μέγιστη απόσταση από τη u 0 είναι 3 Η πολυπλοκότητα επικοινωνίας είναι m
Βελτίωση της πολυπλοκότητας επικοινωνίας Μπορούμε να μειώσουμε τον αριθμό των μηνυμάτων που χρησιμοποιεί ο αλγόριθμος ως εξής: Οι διεργασίες μπορούν να αναγνωρίσουν το κανάλι από το οποίο έλαβαν ένα μήνυμα Οι διεργασίες δεν στέλνουν μηνύματα αναζήτησης στα κανάλια από τα οποία έλαβαν ένα μήνυμα αναζήτησης Στο παράδειγμα εκτέλεσης του SynchBFS τα συνολικά μηνύματα μειώνονται κατά 10
Διάδοση (broadcast) μηνύματος Μπορούμε να χρησιμοποιήσουμε τον αλγόριθμο για τη μετάδοση ενός μηνύματος σε όλο το δίκτυο Η διεργασία u 0 θέλει να στείλει το μήνυμα M σε όλες τις διεργασίες του δικτύου Η διεργασία u 0 ξεκινάει την κατασκευή του δέντρου στέλνοντας το μήνυμα αναζήτησης το οποίο περιέχει και το μήνυμα M Οι άλλες διεργασίες επισυνάπτουν και αυτές με τη σειρά τους το μήνυμα M στα μηνύματα αναζήτησης που στέλνουν Εφόσον το δέντρο περιέχει όλες τις διεργασίες, το μήνυμα M τελικά παραλαμβάνεται από όλες τις διεργασίες του δικτύου
Πλήρης γνώση (1/2) Είναι απαραίτητο κάθε διεργασία να γνωρίζει και τα παιδιά της Τροποποιούμε τον αλγόριθμο SynchBFS ως εξής: Κάθε διεργασία που λαμβάνει ένα μήνυμα αναζήτησης επιστρέφει στον αποστολέα ένα μήνυμα γονέας ή μη-γονέας ανάλογα του αν ο αποστολέας είναι ο γονέας της διεργασίας Χαρακτηριστικά: Κατά την ολοκλήρωση της εκτέλεσης του SynchBFS, όλες οι διεργασίες γνωρίζουν τα παιδιά τους Η χρονική πολυπλοκότητα και η πολυπλοκότητα μηνυμάτων παραμένουν ίδιες (στη χειρότερη περίπτωση)
Πλήρης γνώση (2/2) Μπορούμε να μειώσουμε τον αριθμό των μηνυμάτων που χρησιμοποιεί ο αλγόριθμος Τροποποιούμε τον αλγόριθμο SynchBFS ως εξής: Κάθε διεργασία που λαμβάνει μήνυμα αναζήτησης απαντά στον αποστολέα με ένα μήνυμα γονέας εφόσον ο αποστολέας είναι ο γονέας της διεργασίας Εάν η διεργασία που έστειλε το μήνυμα αναζήτησης σε μία γειτονική διεργασία, δεν λάβει μήνυμα γονέας στον επόμενο γύρο, θεωρεί ότι δεν επιλέχτηκε ως γονέας της γειτονικής διεργασίας Ο αλγόριθμος SynchBFS χρησιμοποιεί m + n 1 μηνύματα
Τερματισμός (1/3) Πώς μπορεί η διεργασία u 0 να μάθει πότε ολοκληρώθηκε η κατασκευή του δέντρου; Δεν είναι γνωστή η διάμετρος του δικτύου και το πλήθος των διεργασιών n Βασιζόμαστε την παραλλαγή SynchBFS όπου οι διεργασίες απαντάνε στον αποστολέα ενός μηνύματος αναζήτησης με ένα μήνυμα γονέας ή μη-γονέας ανάλογα του αν ο αποστολέας είναι ο γονέας της διεργασίας
Τερματισμός (2/3) Επεκτείνουμε τον SynchBFS ως εξής: Εφόσον κάθε μήνυμα αναζήτησης απαντηθεί, κάθε κόμβος ξέρει τα παιδιά του και ότι είναι όλα μαρκαρισμένα Ξεκινώντας από τα φύλα, προωθούμε μήνυμα τερματισμού προς τη ρίζα του δένδρου
Τερματισμός (3/3) Επομένως τα μηνύματα γονέας ή μη-γονέας έχουν δύο χρήσεις: 1 Παροχή πλήρους γνώσης κάθε διεργασία γνωρίζει και τα παιδιά της 2 Ενημέρωση τερματισμού κάθε διεργασία γνωρίζει πότε τα υποδέντρα των παιδιών της έχουν κατασκευαστεί Ο αλγόριθμος SynchBFS τ απαιτεί O(diam(G)) γύρους και χρησιμοποιεί O(m) μηνύματα
Εφαρμογές του αλγορίθμου SynchBFS Διάδοση μηνυμάτων (broadcast) Συλλογή πληροφορίας και υπολογισμοί με κατανεμημένη είσοδο Εκλογή αρχηγού Υπολογισμός της διαμέτρου
Παράδειγμα (1/2) Έλεγχος χώρου στάθμευσης αυτοκινήτων Για λόγους αυτόματου ελέγχου, η εταιρεία τοποθετεί ένα πλήθος από μονάδες εφοδιασμένες με αισθητήρες έτσι ώστε να καλύπτουν όλο το χώρο στάθμευσης Οι μονάδες συνδέονται μέσω ενός ασύρματου δικτύου Το σύστημα υπολογίζει αυτόματα το σύνολο των σταθμευμένων αυτοκινήτων Οι μονάδες έχουν ξεχωριστή διεύθυνση στο δίκτυο Ο χειριστής του συστήματος χρησιμοποιεί έναν τερματικό σταθμό που είναι συνδεδεμένος στο ασύρματο δίκτυο
Παράδειγμα (2/2) Ο τερματικός σταθμός δημιουργεί ένα δέντρο αναζήτησης πρώτα κατά πλάτος Κάθε μονάδα μετράει το πλήθος των αυτοκινήτων που βλέπει και το στέλνει στο γονέα της στο δέντρο Ο γονέας συγκεντρώνει τις τιμές που έλαβε από τα παιδιά της στο δέντρο, τις προσθέτει με τη δικιά της και στέλνει το σύνολο στο δικό της γονέα Το άθροισμα που υπολογίζει η ρίζα του δέντρου είναι το πλήθος των σταθμευμένων αυτοκινήτων