Περίληψη |
Το MPI είναι ένα από τα κυρίαρχα πρωτόκολλα επικοινωνίας που χρησιμοποιούνται
στις πλατφόρμες HPC (Υπολογισμού Υψηλής απόδοσης) σήμερα λόγω της
φορητότητας και της κλιμακοσιμότητας του. Πολλές HPC εφαρμογές κάνουν χρήση
του MPI για να καταστήσουν εφικτή την επικοινωνία μεταξύ διαφορετικών
διεργασιών. Στα πλαίσια του έργου ExaNeST, ένα νέο HPC πρωτότυπο αναπτύχθηκε
στο εργαστήριο CARV του Ι.Τ.Ε αποτελούμενο από συνολικά 512 ARMv8 πυρήνες
συνδυασμένους με λογική FPGA. Το πρωτότυπο αυτό κάνει χρήση ειδικών μονάδων
επικοινωνίας σχεδιασμένων να επιτρέπουν τη διάδοση μηνυμάτων συγχρονισμού με
πολύ μικρή καθυστέρηση (latency) καθώς και την αποδοτική μεταφορά μεγάλων
δεδομένων μέσω του δικτύου Exanet.
Προκειμένου να αξιοποιηθούν οι προαναφερθείσες ικανότητες του πρωτοτύπου,
αναπτύχθηκε μια υψηλά βελτιστοποιημένη MPI υλοποίηση (Exanet MPI) στα πλαίσια
του ίδιου έργου, πριν από την αρχή της δουλειάς μας. Η υλοποίηση αυτή κάνει χρήση
των μονάδων επικοινωνίας του HPC πρωτοτύπου και καταφέρνει να επιτύχει
καλύτερη απόδοση από την γνωστή MPI υλοποίηση MPICH επιτυγχάνοντας μέχρι και
30x μικρότερη καθυστέρηση διάδοσης δεδομένων (latency). Το Exanet MPI
υποστηρίζει ένα eager και ένα long πρωτόκολλο επικοινωνίας για μικρές και μεγάλες
μεταφορές δεδομένων αντίστοιχα. Το πρωτόκολλο long βασίζεται σε
προσομοιωμένα DMA reads (read based) και υποστηρίζει εκκίνηση της επικοινωνίας
αποκλειστικά από τον αποστολέα. Η “εκκίνηση από τον αποστολέα” ορίζεται ως η
ικανότητα του αποστολέα ενός MPI μηνύματος να ξεκινήσει την επικοινωνία με τον
παραλήπτη εκδίδοντας το κατάλληλο μήνυμα συγχρονισμού. Παρά την απλότητα
της, η εκκίνηση αποκλειστικά από τον αποστολέα δεν μας επιτρέπει να
εκμεταλλευτούμε περιπτώσεις όπου ο παραλήπτης καταχωρεί την αίτηση του
νωρίτερα από τον αποστολέα. Επιπρόσθετα, η χρήση προσομοιωμένων DMA reads
απαιτεί από τον παραλήπτη να ενημερώσει τον αποστολέα σχετικά με το τέλος μιας
DMA μεταφοράς μέσω ενός Ack μηνύματος συγχρονισμού, κάτι που επιφέρει
επιπλέον καθυστέρηση (latency).
Σε αυτή την εργασία, σχεδιάζουμε και υλοποιούμε εξ αρχής μια έκδοση του Exanet
MPI βασισμένη σε εγγραφή (write based) η οποία υποστηρίζει εκκίνηση επικοινωνίας
από τον αποστολέα αλλά και από τον παραλήπτη. Με τη χρήση DMA writes,
καθιστούμε τον αποστολέα ικανό να αντιληφθεί το τέλος μιας DMA μεταφοράς δίχως
να χρειάζεται επιβεβαίωση από τον παραλήπτη. Επιπρόσθετα, εκμεταλλευόμαστε
περιπτώσεις όπου η αίτηση παραλαβής καταχωρείται νωρίτερα από την αίτηση
αποστολής επιτρέποντας στον παραλήπτη να μεταφέρει ασύγχρονα στον αποστολέα
όλες τις πληροφορίες που χρειάζονται για μια DMA μεταφορά. Συνεπώς, ο
αποστολέας που θα καταχωρήσει την αίτηση αποστολής μετά τον παραλήπτη,
μπορεί να μεταφέρει άμεσα τα δεδομένα του χωρίς να υπάρχει ανάγκη για
περαιτέρω συγχρονισμό με τον παραλήπτη. Παρ’ όλα αυτά, η απλή προσθήκη της
δυνατότητας εκκίνησης από τον παραλήπτη στο long πρωτόκολλο επιφέρει κάποιες
επιπλοκές συμπεριλαμβανομένης και της μεγάλης αύξησης της καθυστέρησης στο
eager πρωτόκολλο. Προτείνουμε δικές μας μεθόδους για την επιτυχή αντιμετώπιση
των επιπλοκών που προκύπτουν από την υποστήριξη εκκίνησης από τον παραλήπτη
καθώς επίσης βελτιστοποιούμε περαιτέρω το long πρωτόκολλο εξουδετερώνοντας
την ανάγκη χρήσης κάποιων μηνυμάτων συγχρονισμού. Προκειμένου να
αναλύσουμε το όφελος απόδοσης των βελτιστοποιήσεων μας, αναπτύσσουμε
συνολικά τέσσερις παραλλαγές του Exanet MPI βασισμένου σε εγγραφή. Σε κάθε
παραλλαγή, παρέχουμε υλοποιήσεις για τις περισσότερες εκ των point-to-point,
collective, και communicator manipulating συναρτήσεων. Περιγράφουμε τις
περιπτώσεις χρήσης της κάθε παραλλαγής και αξιολογούμε τις παραλλαγές της
υλοποίησής μας έναντι της αρχικής, ήδη βελτιστοποιημένης, read based έκδοσης του
Exanet MPI στο HPC πρωτότυπο. Εμβαθύνουμε στους τρόπους με τους οποίους οι
βελτιστοποιήσεις μας στο μονοπάτι συγχρονισμού βελτιώνουν την απόδοση καθώς
και στους παράγοντες που επιτρέπουν στην υλοποίησή μας να δείξει περισσότερο
όφελος. Για την αξιολόγηση χρησιμοποιούμε τόσο microbenchmarks όσο και
πραγματικές επιστημονικές εφαρμογές. Δείχνουμε ότι η υλοποίησή μας μπορεί να
ξεπεράσει σε απόδοση το read based πρωτόκολλο προσφέροντας έως και 50%
μικρότερη καθυστέρηση (latency) ενώ μπορεί να μειώσει το συνολικό χρόνο
εκτέλεσης ορισμένων εφαρμογών έως και κατά 10%. (ανάλογα με το ποσοστό χρόνου
επικοινωνίας που περιέχουν).
|