Παράλληλη/Κατανεμημένη Επεξεργασία και Εφαρμογές Εισαγωγή στο Message Passing Interface (MPI)
Περιεχόμενα Ταξινόμηση Flynn Οργάνωση μνήμης σε παράλληλους υπολογιστές Speedup και efficiency Σύγχρονη/Ασύγχρονη επικοινωνία MPI εντολές
Ταξινόμηση Flynn SISD MISD SIMD MIMD Von Neumann model Κανένα εμπορικό παράλληλο σύστημα δεν έχει γίνει SIMD Αποδοτικά σε παραλληλισμό δεδομένων MIMD Multicore
Οργάνωση μνήμης σε παράλληλους υπολογιστές Distributed memory Κάθε υπολογιστής έχει τη δικιά του τοπική μνήμη Για να έχει πρόσβαση στην τοπική μνήμη ενός υπολογιστή ένας άλλος: MPI Shared memory Προσοχή στις προσπελάσεις μνήμης
Speedup και efficiency Cost of a parallel program: Cp(n) = p Tp(n) n: input size p: processors Speedup Sp(n) = T*(n) / Tp(n) T*(n): Ο καλύτερος χρόνος του σειριακού προγράμματος Tp(n): Ο χρόνος του παράλληλου προγράμματος
Speedup και efficiency Ep(n) = T*(n) / (p Tp(n)) Το ιδανικό speedup που είναι ίσο με τον αριθμό των processors αντιστοιχεί σε efficiency 1.
Σύγχρονη/Ασύγχρονη επικοινωνία Σύγχρονη επικοινωνία Δεν τελειώνει η επικοινωνία αν και οι 2 διεργασίες δεν έχουν αρχίσει τις λειτουργίες απαραίτητες για επικοινωνία Ασύγχρονη επικοινωνία Η αποστολή δεδομένων μπορεί να ξεκινήσει χωρίς καμιά συνεργασία με τη διεργασία που θα λάβει
MPI εντολές int MPI_Init( int *argc, char ***argv ) int MPI_Finalize( void ) Τερματίζει το περιβάλλον του MPI int MPI_Comm_rank( MPI_Comm comm, int *rank ) comm: communicator rank: σε αυτή τη μεταβλητή αποθηκεύεται το id της διεργασίας
MPI εντολές int MPI_Comm_size( MPI_Comm comm, int *size ) comm: communicator size: σε αυτή τη μεταβλητή αποθηκεύεται ο αριθμός των διεργασιών κατά το χρόνο εκτέλεσης
MPI εντολές int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) buf: δεδομένα για αποστολή count: Πλήθος των στοιχείων που θα αποσταλούν datatype: Τύπος δεδομένων που θα αποσταλούν dest: Αριθμός διεργασίας στην οποία θα πάνε τα δεδομένα tag: Χρησιμοποιείται για να διαχωρίζονται τα μηνύματα από τον ίδιο αποστολέα comm: Δηλώνει τον communicator που θα χρησιμοποιηθεί
MPI εντολές int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) buf: Θέση μνήμης όπου θα αποθηκευτούν τα δεδομένα count: μέγιστος αριθμός δεδομένων που μπορούν να ληφθούν datatype: τύπος δεδομένων που θα ληφθούν source: διεργασία από την οποία θα ληφθούν δεδομένα tag: Χρησιμοποιείται για να διαχωρίζονται τα μηνύματα που λαμβάνονται comm: ο communicator που θα χρησιμοποιηθεί status: Πληροφορίες για το μήνυμα που λήφθηκε
Αναφορές Rauber – Runger, Parallel Programming, Springer