Παράλληλος προγραμματισμός σε αρχιτεκτονικές κατανεμημένης μνήμης: MPI και UPC

Σχετικά έγγραφα
Παράλληλος προγραμματισμός σε αρχιτεκτονικές κατανεμημένης μνήμης: MPI και UPC

Mονόπλευρες επικοινωνίες στο MPI-2

Αρχιτεκτονική κοινής μνήμης

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

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

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

1 Επισκόπηση. 2 Cilk. 3 Threading Building Blocks 4 UPC. 5 Charm++ 2 1/2015 Συστήματα Παράλληλης Επεξεργασίας

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

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


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

Συστήµατα Παράλληλης Επεξεργασίας. Message Passing Interface (MPI)

MPI: Message Passing Interface

ύο μηχανισμοί απαιτούνται: 1. Μία μέθοδος για τη δημιουργία διεργασιών

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

Message Passing Interface (MPI)

MPI: Message Passing Interface

2. Στοιχεία Αρχιτεκτονικής Παράλληλων Υπολογιστών... 45

Παράλληλη Επεξεργασία

Message Passing Interface (MPI)

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Της φοιτήτριας Αριστέας Χρονοπούλου Αρ. Μητρώου: 01 / Επιβλέπων Καθηγητής Αθανάσιος Μάργαρης

Κατανεμημένος και Παράλληλος Προγραμματισμός MPI. Γρήγορος οδηγός αναφοράς 1/4/2017

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο SUN RPC. Κλήση Αποµακρυσµένων ιαδικασιών (RPC) Σύνδεση: Port Mapper.

MPI: Message Passing Interface

Message Passing Interface (MPI)

Εικονική Μνήμη (Virtual Μemory)

Υπολογισμοί Μεταβίβασης Μηνυμάτων

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Παράλληλη Επεξεργασία

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

Παράλληλος Προγραμματισμός με OpenCL

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

Περίληψη. Υπερυπολογιστές. Υπολογιστικά προβλήµατα. TOP 500 (Ιούνιος 2007) TOP 500 (Ιούνιος 2009) Ε-85: Ειδικά Θέµατα Λογισµικού

Η πολυνηματική γλώσσα προγραμματισμού Cilk

Τοπολογίεσ. Κώςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Ε-85: Ειδικά Θέµατα Λογισµικού

Συστήµατα Παράλληλης Επεξεργασίας. Παράλληλοςπρογραµµατισµός: Υλοποίηση παράλληλων προγραµµάτων

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

EM 361: Παράλληλοι Υπολογισμοί

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

Message Passing Interface (MPI)

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

MPI: Βαςικζσ Εντολζσ Επικοινωνίασ. Κώςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ 2011

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Κατανεμημένος και Παράλληλος Προγραμματισμός MPI. MPI Απλές εντολές 03/13/2016. Οδηγίες αποστολής / παραλαβής μηνυμάτων, Υπολογισμός του π (

Επιστημονικοί Υπολογισμοί - Μέρος ΙΙΙ: Παράλληλοι Υπολογισμοί

Παράλληλη Επεξεργασία Κεφάλαιο 1 Γιατί Παράλληλος Προγραμματισμός;

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

Παρουσίαση 3ης Άσκησης

Ε-85: Ειδικά Θέµατα Λογισµικού

Παράλληλος προγραμματισμός: Υλοποίηση παράλληλων προγραμμάτων

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

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

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Παράλληλος προγραµµατισµός

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΑΡΑΛΛΗΛΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΜΕ OpenMP

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

Εισαγωγικά & Βασικές Έννοιες

Τφποι δεδομζνων MPI. Κώςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Εικονική Μνήμη (Virtual Μemory)

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

Το Message Passing Interface (MPI) και η υποστήριξή του στο EGEE Grid

OpenMP. Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ. OpenMP p.

Θέματα Μεταγλωττιστών

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

Παράλληλος προγραμματισμός: Σχεδίαση παράλληλων προγραμμάτων

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

Αρχιτεκτονική Υπολογιστών

QuakeTM: Parallelizing a Complex Sequential Application Using Transactional Memory (Gajinov et al., 2009)

EM 361: Παράλληλοι Υπολογισμοί

Γλώσσες Προγραμματισμού Μεταγλωττιστές

Διασύνδεση Εισόδου-Εξόδου

Προγραμματισμός συστημάτων UNIX/POSIX

Εισαγωγικά & Βασικές Έννοιες

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

ΣΥΣΤΗΜΑΤΑ ΠΑΡΑΛΛΗΛΗΣ ΕΠΕΞΕΡΓΑΣΙΑΣ 9o εξάμηνο ΗΜΜΥ, ακαδημαϊκό έτος

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

2η Προγραµµατιστική Εργασία

Παρουσίαση 5 ης Άσκησης:

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

Παρουσίαση 5 ης Άσκησης:

ΑΝΟΧΗ ΣΦΑΛΜΑΤΩΝ ΣΕ ΕΦΑΡΜΟΓΕΣ MPI ΠΟΥ ΑΚΟΛΟΥΘΟΥΝ ΤΟ ΜΟΝΤΕΛΟ MASTER-WORKER Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ. Υποβάλλεται στην

Τεχνικές για διαμοιρασμό φορτίου και μακροεντολές Broadcast - Scatter για αποδοτικές πολύ-επεξεργαστικές εφαρμογές

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Μεταγλώτιση, σύνδεση

Εισαγωγή στην Πληροφορική

Non-blocking Επικοινωνίεσ και Buffering. Κώςτασ Διαμαντάρασ ΤΕΙ Θεςςαλονίκθσ 2011

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

Το Message Passing Interface (MPI) και η υποστήριξή του στο EGEE Grid

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

Επικοινωνία. Message-Passing Interface (MPI) Βασικές Κλήσεις για Sockets. Μοντέλο Μεταβίβασης Μηνυµάτων. Μοντέλα Παράλληλου Υπολογισµού

Transcript:

Παράλληλος προγραμματισμός σε αρχιτεκτονικές κατανεμημένης μνήμης: MPI και UPC Συστήματα Παράλληλης Επεξεργασίας 9ο Εξάμηνο, ΣΗΜΜΥ Εργ. Υπολογιστικών Συστημάτων Σχολή ΗΜΜΥ, Ε.Μ.Π. Νοέμβριος 2016

1 Επισκόπηση 2 MPI 3 UPC 2 11/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Επισκόπηση 2 MPI 3 UPC 3 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Επισκόπηση Αρχιτεκτονικές και Προγραμματιστικά Μοντέλα από την Οπτική του Προγραμματιστή Προγραμματιστικά Μοντέλα Κοινού Χώρου Διευθύνσεων με Πέρασμα Μηνυμάτων Αρχιτεκτονικές Κοινής μνήμης Κατανεμημένης Μνήμης + Ευκολία Υλοποίησης + Προγραμματιστική Ευκολία + Προγραμματιστική Ευκολία - Δυσκολία Υλοποίησης + Υψηλή Επίδοση - Χαμηλή Επίδοση + Ευκολία Υλοποίησης + Ευκολία Υλοποίησης + Υψηλή Επίδοση + Υψηλή Επίδοση - Προγραμματιστική Δυσκολία - Προγραμματιστική Δυσκολία 4 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Επισκόπηση Ο Xάρτης των Eργαλείων και Γλωσσών Παράλληλου Προγραμματισμού Προγραμματιστικά Μοντέλα Κοινού Χώρου Διευθύνσεων με Πέρασμα Μηνυμάτων Αρχιτεκτονικές Κοινής μνήμης Κατανεμημένης Μνήμης POSIX Threads, OpenMP, CoArray Fortran, Threading Building Blocks, Unified Parallel C (UPC), Cilk, OmpSs Chapel and other PGAS Ομοίως με πέρασμα MPI, PVM (obsolete), μηνυμάτων σε κατανεμημένη Charm++ μνήμη 5 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Σύνοψη Παρουσίασης H διαδρομή του MPI Πριν το MPI Η αρχή του MPI: MPI-1 Νέες αρχιτεκτονικές και ανάγκες: MPI-2 Petascale και Exascale: MPI-3 H γλώσσα UPC ως εναλλακτική Διαϕορές PGAS - Message Passing Χαρακτηριστικά της UPC Λειτουργία: Υλοποίηση και σύστημα χρόνου εκτέλεσης 6 11/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Επισκόπηση 2 MPI 3 UPC 7 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Πριν το MPI Στις αρχές του 90 προέκυψε η ανάγκη για πρακτικό παράλληλο προγραμματισμό σε συστήματα κατανεμημένης μνήμης Eταιρείες και εργαστήρια πρότειναν και διατηρούσαν δικές τους γλώσσες, διεπαϕές και βιβλιοθήκες παράλληλου προγραμματισμού Έλλειψη μεταϕερσιμότητας Μικρές ομάδες χρηστών ανά γλώσσα/διεπαϕή Εργαλεία των 90s: Intel ΝΧ, IBM EUI, IBM CCL, PARMACS, OCCAM, PVM κ.ά. Το MPI προέκυψε από μια προσπάθεια συγκέντρωσης και τυποποίησης των καλύτερων πρακτικών από τα ήδη υπάρχοντα εργαλεία 8 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Σχεδιαστικές απαιτήσεις Το MPI αναπτύχθηκε ως πρότυπο με συγκεκριμένα σχεδιαστικές απαιτήσεις: Βασικές λειτουργίες ανταλλαγής μηνυμάτων και σχετικές λειτουργικότητες (π.χ. συλλογική επικοινωνία) Συνδρομή στην ανάπυτυξη βιβλιοθηκών Υψηλή επίδοση στα υπάρχοντα και μελλοντικά συστήματα Κλιμακώσιμος σχεδιασμός Υποστήριξη για C και Fortran 9 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI MPI-1 To MPI-1 προτάθηκε από το MPI forum το 1994 και όριζε: Point-to-point επικοινωνία MPI_Send, MPI_Recv, MPI_Rsend, MPI_Bsend, MPI_Ssend, MPI_Isend, MPI_Irecv, MPI_Wait, MPI_Waitall, MPI_Probe... Blocking collectives MPI_Barrier, MPI_Bcast, MPI_Gather, MPI_Scatter, MPI_Reduce, MPI_Allreduce, MPI_Alltoall... Static communicators και groups Τοπολογίες διεργασιών Καρτεσιανή τοπολογία, Τοπολογία γράϕου Datatypes (όχι όλα) MPI_Type_struct, MPI_Type_contiguous, MPI_Type_vector, MPI_Type_indexed Διεπαϕή για profiling 10 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI_Comm_split MPI_Init(&argc, &argv); 11 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI_Comm_split MPI_Init(&argc, &argv); MPI_Comm_rank( MPI_COMM_WORLD, &rank); 2 1 0 3 4 5 11 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI_Comm_split MPI_Init(&argc, &argv); MPI_Comm_rank( MPI_COMM_WORLD, &rank); color = rank / 3; MPI_Comm_split(MPI_COMM_WORLD, color, rank, split_comm); 1 3 1 0 2 4 2 1 0 5 0 2 11 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI_Comm_split MPI_Init(&argc, &argv); MPI_Comm_rank( MPI_COMM_WORLD, &rank); color = rank / 3; MPI_Comm_split(MPI_COMM_WORLD, color, rank, split_comm); 1 3 1 0 2 4 2 1 0 5 0 2 Ο communicator MPI_COMM_WORLD συνεχίζει να υπάρχει και μετά την κλήση MPI_Comm_split O communicator split_comm μάς βοηθάει να αναϕερόμαστε στις διεργασίες 0,1,2 και 3,4,5 ως διαϕορετικά groups με νέα ranks MPI_Comm_rank(split_comm, &new_rank); 11 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI_Comm_split MPI_Bcast(&a, 1, MPI_INT, 0, MPI_COMM_WORLD); 2 1 0 3 4 5 12 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI_Comm_split MPI_Bcast(&a, 1, MPI_INT, 0, comm_split); 2 1 0 0 1 2 12 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators Βασικές λειτουργίες MPI_Comm_split(MPI_Comm comm, int color, int rank, MPI_Comm *newcomm) Διαχωρισμός των διεργασιών του communicator comm με βάση το αναγνωριστικό color κάθε διεργασίας στο νέο communicator newcomm MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) Αντιγραϕή (duplication) του communicator comm στο νέο communicator newcomm MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) Δημιουργία νέου communicator newcomm που περιλαμβάνει τις διεργασίες του communicator comm που ανήκουν στο group group MPI_Comm_free(MPI_Comm *comm) Διαγραϕή του communicator comm 13 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Communicators MPI Groups Τα groups είναι ομάδες διεργασιών με δικά τους αναγνωριστικά, ακριβώς όπως οι communicators Μπορούμε να δημιουργήσουμε περισσότερους από έναν communicators για το ίδιο group MPI_Group_create(MPI_Comm comm, MPI_Group group) Δημιουργία του group group που περιλαμβάνει όλες τις διεργασίες του communicator comm MPI_Group_incl(MPI_Group group, int n, int * ranks, MPI_Group *newgroup) Προσθήκη n διεργασιών με αναγνωριστικά ranks από το υπάρχον group group στο νέο group newgroup MPI_Group_excl(MPI_Group group, int n, int * ranks, MPI_Group *newgroup) Αϕαίρεση n διεργασιών με αναγνωριστικά ranks από το υπάρχον group group στο νέο group newgroup 14 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Το MPI παρέχει ρουτίνες για τη δημιουργία νέων communicators όπου η διάταξη των διεργασιών εκϕράζει πιο ϕυσικά την επικοινωνία μεταξύ των διεργασιών Δύο βασικές τοπολογίες: Καρτεσιανή τοπολογία Τοπολογία γράϕου (γενική) 15 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Καρτεσιανή τοπολογία Παράδειγμα: Επίλυση προβλήματος σε διδιάστατο χωρίο Μοιράζουμε έναν 2Δ-χωρίο σε 2Δ-υποχωρία στις διεργασίες του MPI 16 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Καρτεσιανή τοπολογία Παράδειγμα: Επίλυση προβλήματος σε διδιάστατο χωρίο Μοιράζουμε έναν 2Δ-χωρίο σε 2Δ-υποχωρία στις διεργασίες του MPI Οι διεργασίες δημιουργούν ένα εικονικό 2Δ-πλέγμα 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Καρτεσιανή τοπολογία Παράδειγμα: Επίλυση προβλήματος σε διδιάστατο χωρίο Μοιράζουμε έναν 2Δ-χωρίο σε 2Δ-υποχωρία στις διεργασίες του MPI Οι διεργασίες δημιουργούν ένα εικονικό 2Δ-πλέγμα Θέλουμε να μπορούμε να αναϕερόμαστε στις διεργασίες με βάση τη θέση τους στο πλέγμα (0,0) (0,1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3) (2,0) (2,1) (2,2) (2,3) (3,0) (3,1) (3,2) (3,3) 16 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Καρτεσιανή τοπολογία Παράδειγμα: Επίλυση προβλήματος σε διδιάστατο χωρίο Μοιράζουμε έναν 2Δ-χωρίο σε 2Δ-υποχωρία στις διεργασίες του MPI Οι διεργασίες δημιουργούν ένα εικονικό 2Δ-πλέγμα Θέλουμε να μπορούμε να αναϕερόμαστε στις διεργασίες με βάση τη θέση τους στο πλέγμα Η καρτεσιανή τοπολογία του MPI μπορεί να βοηθήσει 16 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Καρτεσιανή τοπολογία MPI_Cart_create(MPI_Comm comm, int ndim, int dims[], int qperiodic[], int qreorder, MPI_Comm *newcomm) Δημιουργία ενός νέου καρτεσιανού communicator newcomm σε ndim διαστάσεις με μέγεθη dims σε κάθε διάσταση. Αν qperiodic[i] = 1, τότε στη διάσταση i το πλέγμα είναι περιοδικό. (0,0) (1,0) (2,0) (3,0) (0,1) (1,1) (2,1) (3,1) (0,2) (1,2) (2,2) (3,2) (0,3) (1,3) (2,3) (3,3) MPI_Comm cart_comm; int ndim = 2; int dims[2]= {4,4}; int qperiodic[2]= {0, 0}; int qreorder = 0; MPI_Cart_create(MPI_COMM_WORLD, ndim, dims, qperiodic, qreorder, &cart_comm); 17 11/2016 Συστήματα Παράλληλης Επεξεργασίας

Εικονικές τοπολογίες Καρτεσιανή τοπολογία MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int coords[]) Εύρεση των καρτεσιανών συντεταγμένων coords της διεργασίας με βαθμό rank στον καρτεσιανό πλέγμα comm MPI_Cart_rank(MPI_Comm comm, const int coords[], int * rank) Εύρεση του βαθμού rank μιας διεργασίας με συντεταγμένες coords στο καρτεσιανό πλέγμα comm MPI_Cart_shift(MPI_Comm comm, int direction, int displ, int * source, int * dest) Εύρεση της διεργασίας dest που απέχει απόσταση displ στην κατεύθυνση direction από τη διεργασία source στο καρτεσιανό πλέγμα comm 18 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI MPI-2 Το MPI-2 (MPI-2.0 το 1997, MPI-2.2 το 2009!) εισήγαγε πολλά νέα στοιχεία στο MPI: Παράλληλο I/O Κλιμακωσιμότητα εϕαρμογών που απαιτούν I/O, περιορισμοί του υλικού, checkpointing Δυναμική διαχείριση διεργασιών (Dynamic Process Management) Ανοχή σε σϕάλματα (fault-tolerance) One-sided επικοινωνία (RMA - Remote Memory Access) Διαϕορετικό προγραμματιστικό μοντέλο - πλέον συμβατό με το σύγχρονο hardware 19 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI I/O Ανάγκη για παράλληλο I/O Οι παράλληλες εϕαρμογές εκτελούν I/O για δύο βασικούς λόγους: 1. Ανάγνωση των αρχικών συνθηκών/δεδομένων 2. Εγγραϕή αριθμητικών αποτελεσμάτων των προσομοιώσεων Σειριακή ανάγνωση: Μία διεργασία διαβάζει τα αρχικά δεδομένα και τα μοιράζει στις υπόλοιπες διεργασίες Σειριακή εγγραϕή: Μία διεργασία συγκεντρώνει τα αποτελέσματα από τις διεργασίες και τα αποθηκεύει σε αρχείο Σπάνια τα δεδομένα χωράνε στη μνήμη μίας διεργασίας! 20 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI I/O Σειριακό I/O Και bottleneck! 21 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI I/O Παράλληλο I/O Πολλαπλές διεργασίες διαβάζουν ή γράϕουν παράλληλα από/σε ένα αρχείο 22 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI I/O Παράλληλο I/O με χρήση MPI Απαραίτητοι μηχανισμοί για παράλληλο I/O: collective operations, τύποι δεδομένων για μη συνεχόμενα δεδομένα στη μνήμη/σε αρχείο Αρκετά όμοιοι μ αυτούς που παρέχει το MPI για την επικοινωνία Από την πλευρά του συστήματος: παράλληλο σύστημα αρχείων και υλικό που να επιτρέπει παράλληλες προσβάσεις 23 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI I/O Software/Harware stack Εϕαρμογή Βιβλιοθήκη I/O υψηλού επιπέδου (π.χ. HDF5, netcdf) MPI-I/O (π.χ. ROMIO) Παράλληλο Σύστημα Αρχείων (π.χ. GPFS, Lustre) Υλικό 24 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI I/O Βασικές λειτουργίες Παράλληλο άνοιγμα αρχείου με MPI_File_open και τα σχετικά modes Παράλληλη ανάγνωση αρχείου με MPI_File_seek και MPI_File_read ή MPI_File_read_at Παράλληλη εγγραϕή αρχείου με MPI_File_set_view και MPI_File_write ή MPI_File_write_at Παράλληλο κλείσιμο αρχείου με MPI_File_close 25 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Δυναμική διαχείριση διεργασιών Η δυναμική διαχείριση διεργασιών επιτρέπει: Την προσθήκη διεργασιών σε κάποια δουλειά που τρέχει ήδη Σε εϕαρμογές που τις χρειάζονται π.χ. σε έναν branch-and-bound αλγόριθμο Όταν νέοι πόροι γίνονται διαθέσιμοι Σε παράλληλο προγραμματισμό τύπου master-slave Τη συνένωση εϕαρμογών που τρέχουν ξεχωριστά Client-server, peer-to-peer κλπ Τη διαχείριση σϕαλμάτων Αν μια διεργασία τερματίσει απρόοπτα Αν ένας κόμβος/ένα switch του δικτύου παρουσιάσει βλάβη 26 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Δημιουργία νέων διεργασιών MPI job MPI_COMM_WORLD 27 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Δημιουργία νέων διεργασιών MPI job MPI_COMM_WORLD MPI_Comm_spawn (και MPI_Comm_spaw_multiple) 27 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Δημιουργία νέων διεργασιών MPI job MPI_Init() MPI_COMM_WORLD MPI_Comm_spawn (και MPI_Comm_spaw_multiple) 27 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Δημιουργία νέων διεργασιών MPI job Child MPI job Intercommunicator MPI_COMM_WORLD MPI_COMM_WORLD MPI_Comm_spawn (και MPI_Comm_spaw_multiple) 27 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Δημιουργία νέων διεργασιών MPI job Child MPI job Intercommunicator MPI_COMM_WORLD MPI_COMM_WORLD MPI_Comm_spawn (και MPI_Comm_spaw_multiple) MPI_Comm_get_parent 27 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Επικοινωνία στη δυναμική διαχείριση διεργασιών Οι διεργασίες πολλαπλών συνδεδεμένων MPI εργασιών επικοινωνούν μέσω συναρτήσεων του MPI πάνω από τον intercommunicator O intercommunicator έχει μέγεθος MPI_UNIVERSE_SIZE Οι διεργασίες παίρνουν αναγνωριστικά από 0 έως MPI_UNIVERSE_SIZE Εκτός από τη μέθοδο που είδαμε (MPI_Comm_spawn), παρέχονται και συναρτήσεις τύπου server-client για την επικοινωνία διαϕορετικών εργασιών MPI Server-side: MPI_Open_port, MPI_Comm_accept, MPI_Close_port Client-side: MPI_Comm_connect 28 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Point-to-point vs One-sided Στην point-to-point επικοινωνία απαιτείται διμερής γνώση Οι δύο διεργασίες πρέπει να ορίζουν ποιες θέσεις μνήμης τροποποιούνται Οι δύο διεργασίες πρέπει να ορίζουν πότε μπορεί να συμβεί η τροποποίηση Send και Recv Στην one-sided επικοινωνία η γνώση είναι μονομερής Μόνο μία διεργασία ορίζει από πού προέρχονται και πού καταλήγουν τα δεδομένα Αυτή η διεργασία κάνει πρόσβαση σε απομακρυσμένο χώρο διευθύνσεων (remote memory access) Διαισθητικά πιο κοντά σε μοντέλο κοινού χώρου διευθύνσεων Put ή Get One-sided Point-to-point P0 store send P1 recv load P0 fence put fence P1 fence fence load ή P0 store fence P1 fence get 29 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Πρόσβαση στην απομακρυσμένη μνήμη στο MPI P0 P1 Get P2 P3 Put Τοπική μνήμη Παράθυρο 30 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Βασικές συναρτήσεις για one-sided επικοινωνία MPI_Win_create(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, MPI_Win *win) Η διεργασία ορίζει ένα παράθυρο στη μνήμη της το οποίο χρησιμοποιείται από τις άλλες διεργασίες του communicator για one-sided επικοινωνία Καλείται συλλογικά από τις διεργασίες του communicator Δημιουργείται ένα αντικείμενο window MPI_Win_free(MPI_Win *win) MPI_Put(const void * sendbuf, int sendcount, MPI_Datatype sendtype, int dest, MPI_Aint dest_disp, int recvcount, MPI_Datatype recvtype, MPI_Win win) Η διεργασία μεταϕέρει δεδομένα από την τοπική της μνήμη σε απομακρυσμένη μνήμη (εγγραφή) MPI_Get(const void * recvbuf, int recvcount, MPI_Datatype recvtype, int source, MPI_Aint source_disp, int sendcount, MPI_Datatype sendtype, MPI_Win win) Η διεργασία μεταϕέρει δεδομένα από απομακρυσμένη μνήμη στην τοπική της μνήμη (ανάγνωση) 31 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Συλλογικός συγχρονισμός στην one-sided επικοινωνία MPI_Win_fence(int assert, MPI_Win win) Ξεκινάει και ολοκληρώνει εποχές (epochs) επικοινωνίας (συλλογικός συγχρονισμός) Όλες οι διεργασίες με πρόσβαση στο αντικείμενο win καλούν την MPI_Win_fence για να ξεκινήσουν μια εποχή Οι διεργασίες καλούν τις MPI_Put, MPI_Get για να διαβάσουν ή να γράψουν απομακρυσμένα Όλες οι διεργασίες καλούν ξανά την MPI_Win_fence για να ολοκληρωθεί η εποχή - όλες οι εγγραϕές/αναγνώσεις ολοκληρώνονται P0 P1 P2 MPI_Put MPI_Put MPI_Get MPI_Get MPI_Put MPI_Win_fence MPI_Win_fence 32 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Ενεργός συγχρονισμός στην one-sided επικοινωνία MPI_Win_post/start(MPI_Group group, int assert, MPI_Win win) MPI_Win_complete/wait(MPI_Win win) Μία διεργασία target ξεκινάει μία εποχή με MPI_Win_post και ολοκληρώνει μια εποχή με MPI_Win_wait κατά την οποία εκθέτει το window σε όλες τις διεργασίες του group Στη διάρκεια της εποχής αυτής, μια διεργασία origin μπορεί να ξεκινήσει μια εποχή προσβάσεων στο window της διεργασίας target με κλήση MPI_Win_start και να την ολοκληρώσει με κλήση MPI_Win_complete target MPI_Win_post MPI_Put origin MPI_Win_start MPI_Get MPI_Win_wait MPI_Win_complete 33 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Σύνοψη του Remote Memory Access Πλεονεκτήματα Επιτρέπει πολλαπλές μεταϕορές δεδομένων χωρίς συγχρονισμό Δεν απαιτεί matching στις ουρές των μηνυμάτων Βοηθάει στον προγραμματισμό όταν η επικοινωνία δεν είναι συμμετρική Στα σύγχρονα δίκτυα διασύνδεσης μπορεί να είναι πολύ πιο γρήγορη από την point-to-point επικοινωνία Αν δεν είναι γνωστό ποιες διεργασίες θα επικοινωνήσουν με ποιες, αλλά είναι γνωστές οι θέσεις μνήμης όπου θα μεταϕερθούν δεδομένα, τότε βοηθά την έκϕραση της επικοινωνίας Μειονεκτήματα Αν δεν υπάρχει υποστήριξη από το υλικό, δεν επιτυγχάνει υψηλή επίδοση Στις περισσότερες περιπτώσεις απαιτείται συγχρονισμός, που δεν κλιμακώνει αποδοτικά Οι προγραμματιστές θεωρούν τις one-sided συναρτήσεις του MPI περίπλοκες και μη αποδοτικές (τροποποιήσεις στο MPI-3) 34 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI MPI-3 Το MPI-3 προτάθηκε το 2012 (MPI-3.1 τον Ιούνιο του 2015), προσπαθώντας να λύσει νέα προβλήματα: Non-blocking collectives Η συλλογική επικοινωνία θα καταναλώνει σημαντικό χρόνο των εϕαρμογών σε συστήματα μεγαλύτερης κλίμακας Η ασύγχρονη συλλογική επικοινωνία βοηθά στο να κρυϕτεί μέρος αυτού του χρόνου Αραιή συλλογική επικοινωνία (blocking και non-blocking) Καλύτερη κλιμάκωση- ευκολότερος προγραμματισμός εϕαρμογών που επικοινωνούν συλλογικά με γείτονες (π.χ. Jacobi!) Σημαντικές επεκτάσεις στην one-sided επικοινωνία Για καλύτερη επίδοση σε υβριδικά συστήματα Για διαχείριση παράλληλων δομών δεδομένων Υποστήριξη για εργαλεία επίδοσης 35 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Non-blocking collectives Στην καλύτερη περίπτωση η συλλογική επικοινωνία κλιμακώνει λογαριθμικά Η ασύγχρονη συλλογική επικοινωνία επιτρέπει επικαλύψεις (overlapping) Τα non-blocking collectives του MPI-3 προέρχονται από την εμπειρία εϕαρμογών του πραγματικού κόσμου MPI_Ialltoall - FFT MPI_Iallreduce - Krylov methods (Conjugate Gradient) MPI_Iscatter, MPI_Igather - stencils... και άλλα, όπως MPI_Ibcast, MPI_Ibarrier 36 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Neighborhood collectives Σε πολλές εϕαρμογές οι διεργασίες επικοινωνούν επαναληπτικά με συγκεκριμένους γείτονες Τα neighborhood collectives δίνουν τη δυνατότητα στον προγραμματιστή Να ορίσει γράϕους γειτόνων (MPI_Dist_graph_neighbors) Να αντικαταστήσει την point-to-point επικοινωνία με μία γραμμή MPI_Neighbor_allgather, MPI_Neighbor_allgatherv (και σε non-blocking) MPI_Neighbor_alltoall, MPI_Neighbor_alltoallv (και σε non-blocking) 37 11/2016 Συστήματα Παράλληλης Επεξεργασίας

MPI Λειτουργίες για δομές δεδομένων Η one-sided επικοινωνία του MPI-2 βοηθά στη διατήρηση κατανεμημένων δομών δεδομένων Το MPI-3 προσθέτει λειτουργίες που σχετίζονται με το συγχρονισμό Non-blocking locks (κάποια ήδη από το MPI-2) MPI_Win_lock, MPI_Win_unlock, MPI_Win_lock_all, MPI_Win_unlock_all κ.ά. Atomic operations MPI_Fetch_and_op, MPI_Compare_and_swap και άλλα 38 11/2016 Συστήματα Παράλληλης Επεξεργασίας

1 Επισκόπηση 2 MPI 3 UPC 39 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC PGAS Languages Global Address Space: ένα thread μπορεί απευθείας να διαβάσει/γράψει απομακρυσμένα δεδομένα Κρύβει τη διάκριση μεταξύ κοινής/κατανεμημένης μνήμης Partitioned Global Address Space (PGAS): τα δεδομένα επισημαίνονται ως local ή global Δεν κρύβει τη διάκριση: κρίσιμο για locality και scaling Χαρακτηριστικά των PGAS γλωσσών: Global address space όπως στα threads (programmability) SPMD παραλληλισμός όπως στο MPI (performance) Διάκριση local/global data (performance) Φιλοσοϕία αντίστοιχη με την one-sided επικοινωνία στο MPI 40 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Εισαγωγή Unified Parallel C (UPC): Παράλληλη επέκταση της ANSI C Γλώσσα προγραμματισμού κατανεμημένης κοινής μνήμης Έχει τη ϕιλοσοϕία της C Προγραμματισμός κοντά στο hardware για performance, αλλά με τα προβλήματα της C Όμοια σύνταξη και semantics Ιστορία Ξεκίνησε το 1999 από το IDA, το UCB και το LLNL UPC consortium: ARSC, Compaq, CSC, Cray Inc., Etnus, GMU, HP, IDA CCS, Intrepid Technologies, LBNL, LLNL, MTU, NSA, SGI, Sun Microsystems, UCB, U. Florida, US DOD PI η Kathy Yelick από το UCB Σήμερα: Berkeley UPC, GNU UPC, IBM XL UPC Compilers, Cray UPC, HP UPC κ.ά. 41 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Μοντέλο εκτέλεσης Μοντέλο εκτέλεσης: Threads δουλεύουν ανεξάρτητα σε SPMD μοντέλο Το πλήθος των threads καθορίζεται στο χρόνο μεταγλώττισης ή στο χρόνο εκτέλεσης μεταβλητή προγράμματος για πλήθος threads: THREADS μεταβλητή προγράμματος για thread id: MYTHREAD upc_barrier: Συγχρονισμός για όλα τα threads (all wait) Δύο επιλογές μεταγλώττισης: Στατικά threads H μεταβλητή THREADS καθορίζεται από το χρήστη στο χρόνο μεταγλώττισης Το πρόγραμμα μπορεί να χρησιμοποιήσει τη μεταβλητή THREADS ως σταθερά Δυναμικά threads O μεταγλωττισμένος κώδικας μπορεί να τρέξει με οποιοδήποτε αριθμό από threads 42 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Shared vs Private variables Private variables:δεσμεύονται στον private χώρο μνήμης του thread, όπως στη C Shared variables: δεσμεύονται μία ϕορα, με το thread 0 shared int ours; /*use shared variables sparingly*/ int mine; Οι shared μεταβλητές δεν μπορούν να έχουν dynamic lifetime: σε συναρτήσεις μπορούν να χρησιμοποιηθούν μόνο αν δηλωθούν ως static Thread0 Thread1 ThreadN Global Address Space ours:... mine: mine:... mine: Shared Private 43 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Pointers in UPC Στη UPC υπάρχουν 4 τύποι pointers, ανάλογα με το πού βρίσκονται και το πού δείχνουν. Πού βρίσκεται ο pointer Πού δείχνει ο pointer Local Shared Private p1 p2 Shared p3 p4 int * p1; /*private pointer to local memory*/ shared int * p2; /*private pointer to shared space*/ int * shared p3; /*shared pointer to local memory*/ shared int * shared p4; /*shared pointer to shared space*/ int * p1: γρήγορος, χρησιμοποιείται για πρόσβαση σε τοπικά δεδομένα σε κώδικα που εκτελεί τοπική δουλειά shared int * p2: χρησιμοποιείται για πρόσβαση σε απομακρυσμένα δεδομένα, αργός γιατί μπορεί να περιλαμβάνει communication int * shared p3: δεν προτείνεται shared int * shared p4: χρησιμοποιείται για μοιραζόμενες δομές δεδομένων 44 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Shared arrays Οι scalar μεταβλητές που είναι shared αποθηκεύονται στο χώρο μνήμης του thread 0 Οι πίνακες που είναι shared κατανέμονται μεταξύ των threads (default: κυκλική ανάθεση) shared int x[threads]; /*1 element per thread*/ shared int y[3][threads]; /*3 elements per thread*/ shared int z[3][3]; /*2-3 elements per thread*/ Για διαϕορετική ανάθεση, χρησιμοποιούνται οι layout specifiers: shared int x[n]: κυκλική ανάθεση shared int [*] x[n]: ανάθεση κατά blocks shared int [0] x[n]: όλος ο πίνακας στο thread 0 shared int [b1][b2]...[bn] x[n]: συγκεκριμένο block size (b1,b2,...,bn) για κάθε thread 45 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Κατανομή εργασίας - upc_forall upc_forall(init; test; loop; affinity) statement; Επανάληψη πάνω σε όλα τα στοιχεία - Δουλειά στα στοιχεία που ανήκουν στον επεξεργαστή Ο προγραμματιστής ορίζει ότι οι επαναλήψεις είναι ανεξάρτητες Απροσδιόριστο αν υπάρχουν εξαρτήσεις μεταξύ των threads Παράδειγμα: Πρόσθεση Διανυσμάτων #define N 100*THREADS shared int v1[n], v2[n], sum[n]; /*default:cyclic distribution*/ void main() { int i; upc_forall( i=0; i<n; i++; i) sum[i]=v1[i]+v2[i]; } 46 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Collective communication Όπως και το MPI, και η UPC υποστηρίζει collective communication. Collectives για υπολογισμούς TYPE bupc_allv_reduce(type, TYPE value, int rootthread, upc_op_t reductionop) TYPE bupc_allv_reduce_all(type, TYPE value, upc_op_t reductionop) Collectives για μεταϕορά δεδομένων TYPE bupc_allv_broadcast(type, TYPE value, int rootthread) TYPE bupc_allv_scatter(type, int rootthread, TYPE *rootsrcarray) TYPE bupc_allv_gather(type, TYPE value, int rootthread, TYPE *rootdestarray) TYPE bupc_allv_gather_all(type, TYPE value, TYPE *destarray) Άλλες εκδόσεις της UPC υποστηρίζουν αυτά και πολλά άλλα collectives (με διαϕορετική σύνταξη). 47 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Άλλα χαρακτηριστικά Dynamic Memory Allocation shared void * upc_global_alloc(size_t nblocks, size_t nbytes) Καλείται από ένα thread - Ένα thread δεσμεύει shared μνήμη shared void * upc_all_alloc(size_t nblocks, size_t nbytes) Καλείται από όλα τα threads - Επιστρέϕει τον ίδιο shared pointer void upc_free(shared void *ptr) Global synchronization upc_barrier Blocking barrier upc_notify, upc_wait Non-blocking barrier Locks upc_lock_t *upc_all_lock_alloc(void), *upc_global_lock_alloc(void) void upc_lock(upc_lock_t *l), void upc_unlock(upc_lock_t *l) void upc_lock_free(upc_lock_t *ptr) 48 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Παράδειγμα: Jacobi-1D - Απλή αλλά μη αποδοτική εκδοχή shared[*] double u_old[n], u[n]; /*block layout*/ void jacobi_sweeps(int T) { int i, t; upc_barrier; for (t=0; t<t; ++t) { upc_forall(i=1; i<n-1; ++i; &(u[i])) u[i]=(u_old[i-1]+u_old[i+1])/2; upc_barrier; upc_forall(i=0; i<n; ++i; &(u[i])) u_old[i]=u[i]; upc_barrier; } } 49 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Παράδειγμα: Jacobi-1D - Λιγότερο απλή αλλά πιο αποδοτική εκδοχή shared double u_bound[2][threads]; /*global - for ghost cells*/ double u_old[n_local+2], u[n_local+2]; /*local*/ void jacobi_sweeps(int T) { int i, t; for (t=0; t<t; ++t) { if (MYTHREAD>0) u_bound[0][mythread-1]=u_old[1]; if (MYTHREAD<THREADS) u_bound[1][mythread+1]=u_old[n_local]; upc_barrier; u_old[0]=u_bound[0][mythread]; u_old[n_local+1]=u_bound[1][mythread]; for(i=1; i<n_local+1; ++i) u[i]=(u_old[i-1]+u_old[i+1])/2; upc_barrier; upc(i=0; i<n_local+1; ++i) u_old[i]=u[i]; } } 50 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator Translator Generated C code 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator Translator Generated C code UPC Runtime System 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator Translator Generated C code UPC Runtime System GASNet Communication System 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator Translator Generated C code UPC Runtime System GASNet Communication System Network Hardware 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator network-independent Translator Generated C code UPC Runtime System GASNet Communication System Network Hardware language-independent 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Implementation UPC code UPC-to-C translator platform-independent network-independent Translator Generated C code UPC Runtime System GASNet Communication System Network Hardware compiler-independent language-independent 51 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC UPC-to-C translator Μεταγλώττιση σε 2 ϕάσεις Φάση 1: Μετάϕραση της UPC σε C, όπου τα features της UPC μεταϕράζονται σε κλήσεις στο runtime Φάση 2: Μεταγλώττιση του κώδικα με τον C compiler του συστήματος και σύνδεση με το runtime system 52 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Runtime system Το runtime system της UPC περιλαμβάνει λειτουργίες όπως: Δημιουργία και διαχείριση των threads Διαχείριση μνήμης Προσβάσεις στη μνήμη (τοπική ή απομακρυσμένη) Συγχρονισμό Polling στο δίκτυο 53 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC One-sided Communication Η UPC χρησιμοποιεί one-sided επικοινωνία: Message = address + data Two-sided: Message = message id + data Δύο βασικά blocking memory-to-memory operations: 1. put (upc_memput): ανανέωση των shared δεδομένων με δεδομένα από τον ιδιωτικό χώρο μνήμης του thread 2. get (upc_memget): αντιγραϕή shared δεδομένων στον ιδιωτικό χώρο μνήμης ενός thread Πλεονέκτημα: αν το network interface υποστηρίζει RDMA, το get/put δεν κάνει interrupt στη CPU, ούτε απαιτεί buffering 54 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC Translator+Runtime: Βελτιστοποιήσεις στον παραγόμενο κώδικα Στη UPC, ο προγραμματιστής δεν ορίζει explicitly την ανταλλαγή δεδομένων Το runtime αναλαμβάνει να πραγματοποιήσει την ανταλλαγή δεδομένων με one-sided communication Ο UPC-to-C translator ενορχηστρώνει τον κώδικα με τις κατάλληλες κλήσεις στο runtime Βασικά optimizations στο translation/compilation: 1. Redundancy elimination: Περιττά accesses στη UPC ενδεχομένως σημαίνουν επικοινωνία πάνω από το δίκτυο 2. Split-phase communication: Διαχωρισμός του communication init και του communication sync για computation/communication overlapping και message pipelining 3. Message coalescing: Πολλά put/get με μικρό μεγέθος μηνύματος συνενώνονται σε μεγάλα μηνύματα 55 11/2016 Συστήματα Παράλληλης Επεξεργασίας

UPC GASNet Το GASNet είναι σύστημα επικοινωνίας σχεδιασμένο για PGAS γλώσσες Υποστηρίζει πολλά δίκτυα διασύνδεσης υψηλής επίδοσης (Infiniband, SGI Altix, Cray, Quadrics, Ethernet-UDP) To GASNet core API παρέχει βασικά network primitives Η υλοποίηση βασίζεται σε active messages Active messages: κάθε μήνυμα έχει στο header του τη διεύθυνση ενός user-space handler, που εκτελείται με την άϕιξη του μηνύματος, με στόχο να απελευθερωθεί γρήγορα το δίκτυο και να μην μπλοκάρει η CPU Το GASNet extended API παρέχει λειτουργίες put/get, collectives, split-phase barriers κ.α. 56 11/2016 Συστήματα Παράλληλης Επεξεργασίας