HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Σχετικά έγγραφα
ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

HY-486 Αρχές Κατανεμημένου Υπολογισμού

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 1 ο Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 1 ο Μέρος

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 2 ο Μέρος

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

Ψευδοκώδικας. November 7, 2011

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο και 3 ο Μέρος

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Προγραµµατιστική Εργασία 1 ο Μέρος


ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

Κατανεμημένα Συστήματα

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο Μέρος

Οδηγός Λειτουργίας Τράπεζας Χρόνου Ηρακλείου

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΗ ΑΣΚΗΣΗ 3

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Να το ξαναγράψετε χρησιμοποιώντας αντί για την εντολή Για Τέλος_επανάληψης: α. την εντολή Όσο Τέλος_επανάληψης

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

Απαντήσεις. Απάντηση. Απάντηση

Διάλεξη 12: Διάχυση Μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΗΥ335 - Δίκτυα Υπολογιστών Χειμερινό εξάμηνο Φροντιστήριο Ασκήσεις στο TCP

Λειτουργικά Συστήματα (Λ/Σ)

ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Εγκατάσταση Λογαριασμού Αλληλογραφίας στο ελληνικό Outlook Express Περιεχόμενα

Προγραµµατιστική Εργασία - 2 ο Μέρος

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Επισκόπηση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Simulation Commands

ΣΥΣΤΗΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΔΙΑΚΥΒΕΡΝΗΣΗΣ ΔΗΜΟΥ ΔΕΛΦΩΝ

Αµοιβαίοςαποκλεισµός. Κατανεµηµένα Συστήµατα 03-1

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

ΕΚΔΟΣΗ 1.1 ΜΑΙΟΣ, 2018 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΑΛΓΟΡΙΘΜΟΣ POLLING ΚΥΜΑΤΙΚΟΣ ΑΛΓΟΡΙΘΜΟΣ ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β.

Διάλεξη 1: Εισαγωγή στον Κατανεμημένο Υπολογισμό. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

Εργασία για το μεταπτυχιακό μάθημα Παράλληλοι υπολογισμοί από τον φοιτητή Μουζακίδη Αλέξανδρο AM M 853

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Κατανεμημένα Συστήματα με Java. Ενότητα # 4: Αμοιβαίος αποκλεισμός Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

Δρομολόγηση (Routing)

Τι θα απαντούσατε αλήθεια στην ίδια ερώτηση για την περίπτωση της επόμενης εικόνας;

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 10/3/2017

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Κατανεμημένα Συστήματα. Ενότητα # 2: Εκλογή αρχηγού Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Κατανεμημένα Συστήματα. Javascript LCR example

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Κατανεµηµένος Υπολογισµός Εαρινό Εξάµηνο Ακ. Έτους ιδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία

Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Κέντρο Επαγγελματικής Κατάρτισης. Σταδίου 5, Σύνταγμα

Πρόβλημα 37 / σελίδα 207

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Εισαγωγή. Interface της εφαρμογής. Κ24: Προγραμματισμός Συστήματος - 1η Εργασία, Εαρινό Εξάμηνο 2019 Προθεσμία Υποβολής: Παρασκευή 15 Μαρτίου, 23:59

«Σύστημα ΔΕΠ» ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ. Έκδοση 1.1

Κατανεμημένα Συστήματα Ι

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

Προγραμματιστικό Περιβάλλον

Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Προγραμματιστική Εργασία Μέρος Β. Δρακωνάκης Κώστας Παπαϊωάννου Αντώνης

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

7.9.2 Άμεση δρομολόγηση 1

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ

Κατανεμημένα Συστήματα Ι

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΕΦΑΡΜΟΓΗΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΥΠΟΒΟΛΗΣ ΙΣΟΖΥΓΙΩΝ ΚΡΕΑΤΟΣ

1. Τι είναι ακεραιότητα δεδομένων, με ποιους μηχανισμούς επιτυγχάνετε κ πότε θα χρησιμοποιούσατε τον καθένα εξ αυτών;

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Παράλληλη Επεξεργασία Εργαστηριακή Ασκηση Εαρινού Εξαµήνου 2008

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Προγραµµατιστική Εργασία 2 ο Μέρος

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Δροµολόγηση (Routing)

Transcript:

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2016-2017 Δέυτερη Προγραμματιστική Εργασία Προθεσμία παράδοσης: 19/6/2017 1. Γενική Περιγραφή Στην δεύτερη προγραμματιστική εργασία καλείστε να υλοποιήσετε ένα κατανεμημένο σύστημα Έκδοσης/Εγγραφής (Publish/Subscribe), καθώς και τα γεγονότα (events) που διέπουν τη λειτουργία ενός τέτοιου συστήματος. Η προγραμματιστική εργασία θα πρέπει να υλοποιηθεί στην γλώσσα C με τη χρήση του Message Passing Interface (MPI) που υπάρχει εγκατεστημένο στα μηχανήματα της σχολής. 2. Υλοποίηση ενός κατανεμημένου συστήματος Publish/Subscibe Στην εργασία αυτή θα υλοποιήσετε ένα σύστημα publish/subscribe. Σε ένα τέτοιο σύστημα υπάρχουν διεργασίες που είναι Publishers και διεργασίες που είναι Subscribers. Οι διεργασίες Publishers παράγουν δημοσιεύσεις σε συγκεκριμένες κατηγορίες θεμάτων, ενώ, αντίστοιχα, οι διεργασίες Subscribers δηλώνουν για ποιες κατηγορίες θεμάτων ενδιαφέρονται. Θα πρέπει να δημιουργείτε κάποιες MPI διεργασίες οι οποίες θα λειτουργούν ως publishers κι άλλες οι οποίες θα λειτουργούν ως subscribers. Κάθε διεργασία publisher θα παράγει δημοσιεύσεις σε τρεις κατηγορίες θεμάτων. Επίσης, η κάθε διεργασία publisher θα κρατάει στατιστικά για τον αριθμό των δημοσιεύσεων που έχει πραγματοποιήσει σε κάθε θέμα αλλά και για τις εγγεγραμμένες διεργασίες σε κάθε ένα από τα θέματα στα οποία παράγει δημοσιεύσεις.

Σχήμα 1 Οι κόμβοι των publishers δημιουργούν ένα λογικό δίκτυο που έχει τη μορφή πλέγματος (Grid) μεγέθους 4x4, όπως φαίνεται στο Σχήμα 1. Ο κόμβος με συντεταγμένες <x,y> στο πλέγμα έχει έναν ή δύο γείτονες στη γραμμή στην οποία ανήκει και έναν ή δύο γείτονες στη στήλη στην οποία ανήκει στο πλέγμα. Αν ο κόμβος έχει δύο γείτονες στη γραμμή στην οποία ανήκει τότε ο αριστερός του γείτονας έχει συντεταγμένες <x-1, y> ενώ ο δεξιός του γείτονας έχει συντεταγμένες <x+1, y>. Επίσης, ο πάνω γείτονας του κόμβου είναι ο κόμβος με συντεταγμένες <x,y+1> ενώ ο κάτω γείτονας έχει συντεταγμένες <x,y-1>. Ο κόμβος με συντεταγμένες <0,y> δεν έχει αριστερό γείτονα, ενώ ο δεξιός του γείτονας έχει συντεταγμένες <1,y>. Παρομοίως, ο κόμβος με συντεταγμένες <3,y> δεν έχει δεξιό γείτονα, ενώ ο αριστερός του γείτονας έχει συντεταγμένες <2,y>. Επιπρόσθετα, οι κόμβοι με συντεταγμένες <x,0> δεν έχουν κάτω γείτονες και οι κόμβοι με συντεταγμένες <x,3> δεν έχουν πάνω γείτονα. Για να υλοποιηθεί αυτό το πλέγμα θα πρέπει ο κάθε κόμβος publisher να κρατάει πληροφορίες για τους γειτονικούς του κόμβους στο πλέγμα. Σημαντικό μέρος της άσκησης είναι η υλοποίηση ενός αλγόριθμου δρομολόγησης μηνυμάτων στο πλέγμα των κόμβων publisher. Επιπρόσθετα, κάθε διεργασία publisher κρατάει πληροφορίες για τις κατηγορίες δημοσιεύσεων του, τη λίστα με τους εγγεγραμμένους subscriber κόμβους σε κάθε κατηγορία, αλλά και στατιστικά όπως τον αριθμό των δημοσιεύσεων και των εγγεγραμμένων subscribers σε αυτόν. Το σύστημα θα υποστηρίζει τις ακόλουθες λειτουργίες: (1) δημιουργίας (Join) νέου publisher, και (2) δημιουργίας νέου subscriber, (3) εγγραφής (Subscribe) ενός subscriber σε κάποιο θέμα,

(4) δημοσίευσης (Publish) ενός νέου άρθρου πάνω σε κάποιο θέμα, (5) αποχώρησης (Leave) ενός subscriber και (6) εκτύπωσης στατιστικών (η οποία θα πραγματοποιείται από τους publishers). Οι κόμβοι subscribers δεν διασυνδέονται σε κάποιο δίκτυο με ειδική συνδεσμολογία. Κάθε κόμβος subscriber θα πρέπει να κρατάει πληροφορία αναφορικά με το σε ποιους publishers είναι εγγεγραμμένος αλλά και πόσες δημοσιεύσεις έχει λάβει. Στο σύστημα υπάρχει ένας κόμβoς MPI στον οποίο εκτελείται μια διεργασία συντονιστής (coordinator). Συγκεκριμένα, ο Coordinator του συστήματος θα είναι υπεύθυνος για την ανάγνωση του αρχείου γεγονότων και την επικοινωνία με τον/τους εκάστοτε κόμβο/ους που χρειάζεται να κάνουν ενέργειες για να εκτελεστεί αυτό το γεγονός. Σημειώνεται ότι το αρχείο γεγονότων περιέχει αρχικά όλα τα γεγονότα δημιουργίας εκδοτών (create publishers), έτσι ώστε να δημιουργηθεί το πλέγμα των publishers πριν να ξεκινήσει η εκτέλεση των υπολοίπων γεγονότων. Τα γεγονότα που θα ακολουθούν θα αφορούν την εισαγωγή subscribers και την εκτέλεση των υπόλοιπων λειτουργιών. 3. Message Passing Interface Για την υλοποίηση της εργασίας θα πρέπει να χρησιμοποιήσετε τη βιβλιοθήκη Message Passing Interface (ΜPI). Η βιβλιοθήκη αυτή παρέχει τη δυνατότητα ανταλλαγής μηνυμάτων μεταξύ διεργασιών (που μπορεί να εκτελούνται στο ίδιο ή σε διαφορετικά μηχανήματα) μέσω ενός καθιερωμένου Applicaton Programming Interface (API), ανεξαρτήτου γλώσσας και υλοποίησης. Το API αυτό παρέχει τη δυνατότητα ανταλλαγής μηνυμάτων μεταξύ των διεργασιών όχι μόνο με τη χρήση μηνυμάτων σημείο-προς-σημείο (point-to-point messaging), αλλά και με συλλογικό τρόπο, π.χ. υποστηρίζει επικοινωνία μεταξύ ομάδων διεργασιών (multicast), καθώς και καθολική επικοινωνία (broadcasts). Σε κάθε μηχάνημα μπορούν να εκτελούνται μία ή περισσότερες MPI διεργασίες. Για την προσομοίωση που ζητείται, κάθε κόμβος του συστήματος publish/subscribe θα προσομειώνεται από μια διεργασία MPI. Είναι αξιοσημείωτο ότι περισσότερες από μια διεργασίες MPI μπορεί να τρέχουν στο ίδιο μηχάνημα (παρότι προσoμοιώνουν διαφορετικούς κόμβους του διομότιμου συστήματος). Το σύστημα MPI είναι εγκατεστημένο στα μηχανήματα του Τμήματος. Οι δύο βασικές εντολές που απαιτούνται για τη λειτουργία του είναι οι mpicc και mpirun. H εντολή mpicc χρησιμοποιείται για τη μεταγλώττιση προγραμμάτων που χρησιμοποιούν το API του MPI. Με την εντολή mpirun μπορείτε να τρέξετε το εκτελέσιμο ταυτόχρονα σε περισσότερα του ενός μηχανήματα του Τμήματος τα οποία έχουν εγκατεστημένο το MPI. Ένα παράδειγμα χρήσης παρατίθεται στη συνέχεια: $ mpirun -<np> <count> --<hostfile> <file containing hostnames> <executable>

Η επιλογή <np> καθορίζει το συνολικό αριθμό των MPI διεργασιών που θα εκτελούν το εκτελέσιμο αρχείο που δίνεται σαν τελευταίο όρισμα στην παραπάνω γραμμή εντολών. Στην επιλογή <hostfile> δίνεται το όνομα του αρχείου στο οποίο περιέχονται τα hostnames των μηχανημάτων όπου θα εκτελεστούν διεργασίες MPI. Κάθε διεργασία που εκκινείται με τη χρήση της εντολής mpirun έχει ένα ξεχωριστό αναγνωριστικό στο σύστημα MPI, το οποίο ονομάζεται βαθμός (rank) MPI. Επίσης, μπορεί να μάθει πόσες άλλες διεργασίες MPI τρέχουν στο σύστημα και να τους στείλει μηνύματα, χρησιμοποιώντας το rank τους σαν αναγνωριστικό. Είναι αξιοσημείωτο πως μία διεργασία μπορεί να στείλει μηνύματα μόνο σε διεργασίες που έχουν ξεκινήσει από την ίδια εντολή mpirun και είναι κατά συνέπεια μέλη του ίδιου κόσμου MPI. Για παραπάνω πληροφορίες μπορείτε να διαβάσετε το υλικό που βρίσκεται στους παρακάτω συνδέσμους: https://computing.llnl.gov/tutorials/mpi/ http://mpitutorial.com/tutorials/ 4. Οργάνωση Συστήματος Το σύστημα publish/subscribe που περιγράφεται παραπάνω μπορεί να προσομοιωθεί με διάφορους τρόπους, αλλά για λόγους απλότητας η προσομοίωση θα γίνει μέσω μιας διεργασίας συντονιστή. Η επιλογή της διεργασίας συντονιστή μπορεί να γίνει απλά, π.χ. αναθέτοντας στη διεργασία η οποία θα λάβει το αναγνωριστικό(rank) 0, να εκτελέσει τις απαραίτητες εργασίες συντονισμού (δηλαδή να είναι ο συντονιστής). Η διεργασία συντονιστής θα πρέπει να κρατάει πληροφορίες για το ποιοι κόμβοι συμμετέχουν στο σύστημα publish/subscribe κάθε χρονική στιγμή (δηλαδή ποιοι κόμβοι έχουν προσέλθει στο σύστημα και δεν έχουν ακόμη αποχωρήσει από αυτό) και για το ποια διεργασία αντιστοιχεί σε κάθε έναν από αυτούς τους κόμβους. Η πληροφορία αυτή θα πρέπει να αποθηκεύεται σε έναν πίνακα κατακερματισμού (hash table). Το κλειδί που θα αποτελεί το όρισμα της συνάρτησης κατακερματισμού θα είναι το αναγνωριστικό του κόμβου στο σύστημα publish/subscribe. Το αναγνωριστικό αυτό παρέχεται ως όρισμα στους διάφορους τύπους γεγονότων που περιγράφονται στην ενότητα «Τύποι Γεγονότων». Είναι αξιοσημείωτο ότι το συνολικό πλήθος διεργασιών που είναι ενεργές στο MPI σύστημα ανά πάσα στιγμή δεν αλλάζει και είναι ίσο με <np> (ανεξάρτητα από το πόσοι κόμβοι είναι ενεργοί στο σύστημα publish/subscribe την εκάστοτε χρονική στιγμή). Οι διεργασίες που αντιστοιχούν σε κόμβους που έχουν αποχωρήσει από το σύστημα publish/subscribe παραμένουν ενεργές αλλά έχουν περιορισμένη λειτουργικότητα (συγκεκριμένα, δεν πραγματοποιούν καμία ενέργεια αν δεν λάβουν εκ νέου κάποιο μήνυμα από το συντονιστή). Προσέξτε πως κάθε διεργασία μπορεί να έχει δύο αναγνωριστικά. Το πρώτο αναγνωριστικό καθορίζεται από το rank της διεργασίας στο σύστημα MPI και χρησιμεύει στην ανταλλαγή μηνυμάτων μεταξύ των διεργασιών. Κάθε μια από τις <np> ενεργές διεργασίες στο σύστημα έχει ένα μοναδικό τέτοιο αναγνωριστικό (ανεξάρτητα από το αν η διεργασία αυτή αντιστοιχεί

σε κάποιο ενεργό κόμβο του διομότιμου συστήματος ή όχι). Η διεργασία μπορεί να έχει και δεύτερο αναγνωριστικό σε περίπτωση που αντιστοιχεί σε κάποιο ενεργό κόμβο του συστήματος publish/subscribe. Τα μηνύματα μπορούν να είναι δύο τύπων: μηνύματα γεγονότων τα οποία αποστέλλονται μόνο από τη διεργασία συντονιστή, και μηνύματα επικοινωνίας τα οποία μπορούν να έρθουν από οποιαδήποτε άλλη διεργασία εντός του συστήματος publish/subscribe. Η διεργασία συντονιστής διαβάζει γεγονότα από ένα αρχείο εισόδου. Ανάλογα με τον τύπο του γεγονότος στέλνει ένα μήνυμα γεγονότος στον κατάλληλο κόμβο του συστήματος publish/subscribe (δηλαδή στη διεργασία που αντιστοιχεί στον κόμβο αυτό), ο οποίος θα εκκινεί την προσομοίωση του γεγονότος. Η προσομοίωση ενός γεγονότος μπορεί να απαιτεί την αποστολή διαφόρων μηνυμάτων επικοινωνίας. Η κατάλληλη διεργασία παραλήπτης για κάθε μήνυμα γεγονότος εξαρτάται από τον τύπο του γεγονότος και από το ποιοι κόμβοι βρίσκονται στο σύστημα τη χρονική στιγμή της προσομοίωσης. Αφού στείλει ένα μήνυμα γεγονότος και λάβει acknowledgement για την ολοκλήρωσή του, η διεργασία συντονιστής διαβάζει και επεξεργάζεται το επόμενο γεγονός από το αρχείο εισόδου. Επομένως, η επεξεργασία των γεγονότων γίνεται σειριακά. Για κάθε ένα γεγονός που προσομοιώνεται επιτυχώς, η διεργασία συντονιστής θα πρέπει να ενημερώνεται από τον κόμβο που εκκίνησε την προσομοίωση του γεγονότος αυτού. Όταν όλα τα γεγονότα του αρχείου εισόδου έχουν προσομοιωθεί, η διεργασία συντονιστής θα πρέπει να ειδοποιεί τις υπόλοιπες διεργασίες πως πρέπει να τερματίσουν την εκτέλεση τους και μετά να τερματίζει και η ίδια. Ο συντονιστής θα κρατάει τον αριθμό των publishers και των subscribers καθώς και ό,τι άλλες πληροφορίες χρειάζονται προκειμένου να μπορεί να επικοινωνήσει μαζί τους. Οι υπόλοιπες διεργασίες, δηλαδή εκείνες που δεν εκτελούν χρέη συντονιστή, θα πρέπει να περιμένουν μηνύματα και να τα εξυπηρετούν με τη σειρά που έρχονται. 4. Γεγονότα Τα γεγονότα του αρχείου εισόδου είναι τα ακόλουθα: J <pid> <cid1> <cid2> <cid3> Το συγκεκριμένο γεγονός (join publisher) σηματοδοτεί την εισαγωγή μιας διεργασίας τύπου publisher, με αναγνωριστικό <pid>, στο σύστημα publish/subscriber. H διεργασία τύπου subscriber θα δημοσιεύει πληροφορία στις κατηγορίες <cid1>, <cid2> και <cid3>. Μια από τις MPI διεργασίες που είναι ενεργές πρέπει να αντιστοιχιστεί με τη νέα διεργασία publisher. Η διεργασία αυτή δεν θα πρέπει να έχει ήδη αντιστοιχιστεί σε κάποια ήδη υπάρχουσα διεργασία του συστήματος publish/subscribe. Συγκεκριμένα, ο coordinator όταν διαβάσει ένα event τέτοιου τύπου, θα πρέπει να επιλέξει μία από τις διαθέσιμες MPI διεργασίες και να της στείλει το συγκεκριμένο μήνυμα. Είναι αξιοσημείωτο ότι η διεργασία αυτή θα είναι ενεργή στο MPI σύστημα, αλλά δεν θα είναι ακόμα ενεργή στο σύστημα Publish/Subscribe που προσομοιώνεται. Επομένως, ο coordinator θα πρέπει να γνωρίζει ποιες MPI διεργασίες είναι ανενεργές και ποιες όχι στο σύστημα που προσομοιώνεται. Επίσης, ο συντονιστής θα πρέπει να αναθέσει μια θέση στο πλέγμα στη νέα διεργασία. Πληροφορίες για τη νέα διεργασία θα πρέπει να αποθηκευτούν στον πίνακα κατακερματισμού του συντονιστή (οι πληροφορίες αυτές θα πρέπει να

συμπεριλαμβάνουν και τις κατηγορίες θεμάτων στις οποίες θα δημοσιεύει πληροφορίες η διεργασία subscriber). Η νέα διεργασία θα πρέπει να ενημερωθεί για τους γειτονικούς της κόμβους στο πλέγμα ώστε να μπορεί να ανταλλάσει μηνύματα μαζί τους. Αντίστοιχα, οι γειτονικοί της κόμβοι θα πρέπει να ενημερωθούν για τη νέα διεργασία (για τον ίδιο λόγο). Για παράδειγμα, έστω ότι εισέρχεται η έκτη διεργασία publisher στο σύστημα. Αυτή η διεργασία θα έχει συντεταγμένες <1,1> στο πλέγμα Ο coordinator αρχικά θα επιλέξει μια διαθέσιμη (μη ενεργή) διεργασία MPI και θα της στείλει μήνυμα έτσι ώστε να της αναθέσει το ρόλο του publisher. Το αρχικό μήνυμα θα περιέχει το αναγνωριστικό <pid> του νέου κόμβου, (2) τις συντεταγμένες <1,1> έτσι ώστε ο νέος κόμβος να ξέρει τη θέση του στο πλέγμα,,(3) τα ids των τριών κατηγοριών που ο νέος κόμβος διαχειρίζεται, καθώς και (4) τα MPI ranks. των δύο γειτονικών του κόμβων ώστε να μπορεί να επικοινωνήσει μαζί τους (οι δύο αυτοί γειτονικοί κόμβοι είναι οι κόμβοι με συντεταγμένες <1,0> και <0,1>). Τέλος, ο καινούργιος κόμβος θα ενημερώσει τους γειτονικούς του κόμβους ότι μπήκε στο σύστημα (στέλνοντας το MPI rank του, το id του και τις συντεταγμένες του σε αυτούς) και κάθε ένας από αυτούς θα θέσει τον καινούργιο κόμβο ως γείτονά του και θα του στείλει ένα ack. Όταν ο νέος κόμβος λάβει όλα τα ack, θα ενημερώνει τον coordinator για την ολοκλήρωση της εκτέλεσης του γεγονότος. Οι δομές που θα πρέπει να αρχικοποιηθούν σε αυτό το γεγονός είναι η λίστα με τα cids, και οι μεταβλητές που θα κρατούν πληροφορίες για τους γείτονες της καινούργιας διεργασίας αλλά και οι counters των στατιστικών. Σημαντικό είναι ότι κάθε κόμβος της λίστας με τα cids θα πρέπει να έχει μια λίστα με τους εγγεγραμμένους subscribers στην εκάστοτε κατηγορία. Όταν η διεργασία αυτή ολοκληρώσει την αρχικοποίηση των δομών της και είναι έτοιμη να λάβει νέα μηνύματα, θα πρέπει να τυπώνει το ακόλουθο μήνυμα: όπου το <MPI_RANK> θα είναι το αναγνωριστικό της διεργασίας που ανέλαβε αυτόν τον ρόλο στο MPI. T <sid> Το συγκεκριμένο γεγονός (join subscriber) σηματοδοτεί την εισαγωγή μιας νέας διεργασίας τύπου subscriber στο σύστημα. Ο coordinator θα πρέπει να αποστείλει αυτό το μήνυμα σε μια διαθέσιμη διεργασία, η οποία θα αρχίσει να λειτουργεί ως subscriber με αναγνωρισικό <sid>. Στην συνέχεια, ο coordinator θα πρέπει να περιμένει ένα μήνυμα τύπου ACK από τον καινούργιο subscriber, το οποίο θα σηματοδοτεί ότι ο subscriber έχει ολοκληρώσει την αρχικοποίηση του, δηλαδή ότι έχει αρχικοποιήσει τους counter στατιστικών, τη λίστα με τους publishers που έχει εγγραφεί (κενή στην αρχή) και είναι έτοιμος να λάβει μηνύματα.

Όταν η διεργασία που ανέλαβε τον ρόλο του νέου subscriber ολοκληρώσει την αρχικοποίηση των δομών της και είναι έτοιμη να λάβει νέα μηνύματα, θα πρέπει να τυπώνει το ακόλουθο μήνυμα: Οπου ΜPI_RANK1 είναι το αναγνωριστικό της διεργασίας του subscriber και MPI_RANK2 το αναγνωριστικό του publisher. S <sid> <cid1> <cid2> <cid3> Το συγκεκριμένο γεγονός (subscribe) σηματοδοτεί την εγγραφή του subscriber με αναγνωριστικό <sid> σε όλους τους publishers που δημοσιεύουν πληροφορίες στις κατηγορίες θεμάτων <cid1>, <cid2> και <cid3>. Για την εκτέλεση του γεγονότος αυτού, ο coordinator θα πρέπει να στέλνει το κατάλληλο μήνυμα στον subscriber <0,0> ο οποίος θα εκκινήσει τη δρομολόγηση του μηνύματος και στους υπόλοιπους publishers. Συγκεκριμένα, το μήνυμα θα πρέπει να διασχίσει το πλέγμα των publishers με την ακόλουθη σειρά; <0,0>, <1,0>, <2,0>, <3,0>, <3,1>, <2,1>, <1,1>,<3,1>, <0,1>, <0,2>, <1,2>, <2,2>,... (δηλαδή το μήνυμα ταξιδεύει στο πλέγμα γραμμή ανά γραμμή). Κάθε κόμβος που λαμβάνει ένα μήνυμα που πρέπει να διασχίσει το πλέγμα, θα πρέπει να γνωρίζει σε ποιον κόμβο πρέπει να προωθήσει το μήνυμα αυτό. Ο publisher που είναι τελευταίος στο πλέγμα θα πρέπει να στέλνει ένα μήνυμα ολοκλήρωσης της διάσχισης του πλέγματος στον coordinator. Θα πρέπει να στέλνει επίσης και ένα μήνυμα στον subscriber το οποίο θα περιέχει τον αριθμό των publishers που τον έχουν εγγράψει σε κάποια από τις θεματικές του κατηγορίες. Όταν ο subscriber λάβει τόσα μηνύματα από subscribers ξέρει πως έχει ολοκληρωθεί το γεγονός και στέλνει αντίστοιχο μήνυμα στον coordinator. Όταν ο coordinator πάρει μήνυμα ολοκλήρωσης του γεγονότος, τόσο από τον τελευταίο κόμβο στο πλέγμα όσο και από το νέο subscriber, προχωρά στην επεξεργασία του επόμενου γεγονότος. Όταν ο publisher λάβει το μήνυμα εγγραφής του νέου subscriber και τον καταχωρήσει στην λίστα του, θα πρέπει να τυπώνει το ακόλουθο μήνυμα: Όπου το <MPI_RANK1> είναι το αναγνωριστικό του subscriber στο MPI, ενώ το <MPI_RANK2> είναι το αναγνωριστικό του publisher στο MPI.

P <pid> <cid> Το συγκεκριμένο γεγονός (publish) σηματοδοτεί τη δημοσίευση ενός νέου άρθρου στην θεματική κατηγορία <cid> από τον publisher με αναγνωριστκό <pid>. Ο coordinator θα πρέπει να αποστέλλει το γεγονός αυτό απευθείας στον publisher με αυτό το αναγνωριστικό, ο οποίος με την σειρά του θα πρέπει να στέλνει ένα μήνυμα σε κάθε subscriber που έχει κάνει εγγραφή σε αυτή την θεματική κατηγορία. Ακόμη, κάθε publisher θα πρέπει να διατηρεί έναν μετρητή που θα περιγράφει πόσες δημοσιεύσεις έχει κάνει και, αντίστοιχα, οι subscribers θα πρέπει επίσης να μετράνε πόσες δημοσιεύσεις έχουν λάβει. Όταν ο publisher ενημερώσει όλους τους subscribers του θα πρέπει να τυπώνει το ακόλουθο μήνυμα: όπου <Ν> είναι ο αριθμός των subscribers που ενημερώθηκαν και sid τα id των subscribers που ενημερώθηκαν. Όταν ο publisher έχει στείλει πληροφορία για το δημοσιευμένο άρθρο σε όλους τους subscribers που είναι εγγεγραμμένοι στην θεματική κατηγορία με αναγνωριστικό <cid> θα πρέπει να στέλνει ένα μήνυμα με τον αριθμό των subscribers αυτών στον coordinator. Κάθε τέτοιος subscriber θα πρέπει να στέλνει επίσης μήνυμα επιβεβαίωσης παραλαβής του άρθρου στον coordinator. Όταν ο συντονιστής λάβει όσες επιβεβαιώσεις απαιτούνται, τότε προχωρά στην προσομοίωση του επόμενου γεγονότος. L <sid> Το συγκεκριμένο γεγονός (leave subscriber) σηματοδοτεί την αποχώρηση του subscriber με αναγνωριστκό <sid> από το σύστημα. Στην περίπτωση αυτή ο coordinator θα πρέπει να αποστέλλει το μήνυμα σε έναν τυχαίο publisher, ο οποίος θα ξεκινά την δρομολόγηση του μηνύματος μέσα στο grid. Ο publisher θα στέλνει το μήνυμα σε όλους τους γείτονές του στην ίδια γραμμή (έναν ή δύο, ανάλογα με τη θέση του publisher στο πλέγμα). Κάθε διεργασία subscriber που λαμβάνει το μήνυμα από τα δεξιά θα πρέπει να το προωθεί στο δεξιό της γειτονικό κόμβο (αν δεν υπάρχει τέτοιος κόμβος, το μήνυμα θα πρέπει να προωθείται στον από πάνω κόμβο της επόμενης γραμμής του πλέγματος όπως φαίνεται στο σχήμα. Αν ο subscriber λάβει το μήνυμα από αριστερά θα πρέπει να το προωθεί στον αριστερό γειτονικό του κόμβο (αν δεν υπάρχει τέτοιος κόμβος, το μήνυμα θα πρέπει να προωθείται στον ακριβώς από πάνω κόμβο της επόμενης γραμμής του πλέγματος). Κάθε publisher που λαμβάνει το μήνυμα, ελέγχει τη δομή με τους subscribers κάθε κατηγορίας που διαχειρίζεται και αν αυτή περιέχει τον εν λόγω subscriber, θα πρέπει να τον διαγράφει.

Σε κάθε περίπτωση, όλοι οι publishers θα στέλνουν ένα μήνυμα τύπου ACK στον coordinator. Όταν ο coordinator λάβει ACKs από όλους τους publishers (άρα ο subscriber δεν υπάρχει σε καμία λίστα εγγραφών), θα πρέπει να ενημερώνει την διεργασία του subscriber ώστε να τερματίζει. Όταν o subscriber λάβει το μήνυμα τερματισμού του από τον coordinator, θα πρέπει να τυπώνει την ακόλουθη πληροφορία: G Το συγκεκριμένο γεγονός (global statistics) σηματοδοτεί την εκτύπωση στατιστικών από τους publishers και τους subscribers. Συγκεκριμένα, ο coordinator θα προωθεί αυτό το μήνυμα σε κάθε άλλη ενεργή διεργασία του MPI που συμμετέχει στο προσομοιωμένο σύστημα, η οποία με την σειρά της θα τυπώνει τον αριθμό των subscribers/publishers της και τον αριθμό των δημοσιεύσεων που έχει κάνει/λάβει ανάλογα με τον ρόλο της στο σύστημα. Έπειτα, κάθε διεργασία θα στέλνει στον Coordinator τα στατιστικά της έτσι ώστε αυτός με τη σειρά του να τα τυπώσει. Ο Coordinator θα πρέπει να περιμένει όσα μηνύματα όσος είναι ο αριθμός των publishers και των subscribers. Πιο συγκεκριμένα, κάθε subscribers θα πρεπει να στέλνει το ακόλουθο μήνυμα: Όπου <N> θα είναι ο αριθμός των publishers στους οποίους έχει κάνει εγγραφή ο συγκεκριμένος subscriber και <M> θα είναι ο αριθμός των δημοσιεύσεων που έχει λάβει. Αντίστοιχα, κάθε publisher θα πρέπει να στέλνει:

Όπου <N> θα είναι ο αριθμός των subscribers που έχουν εγγραφεί στον συγκεκριμένο publisher και <M> θα είναι ο αριθμός των δημοσιεύσεων που έχει κάνει ο publisher. 5. Παράδοση Εργασίας Για την παράδοση της εργασίας θα πρέπει να χρησιμοποιήσετε το πρόγραμμα turnin, που υπάρχει εγκατεστημένο στα μηχανήματα του τμήματος. Συγκεκριμένα, η εντολή παράδοσης είναι: turnin project2@hy486 Για να επιβεβαιώσετε ότι η υποβολή της εργασίας σας ήταν επιτυχής μπορείτε να χρησιμοποιήσετε την εντολή: verify-turnin project2@hy486 Προσοχή, τα παραδοτέα σας θα πρέπει να περιέχουν ό,τι χρειάζεται και να είναι σωστά δομημένα ώστε να κάνουν compile και να εκτελούνται στα μηχανήματα της σχολής, όπου και θα γίνει η εξέταση της εργασίας. Η προθεσμία παράδοσης της εργασίας είναι την: <placeholder>