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

Σχετικά έγγραφα
MPI: Message Passing Interface

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

Probleme de transmitere în modul standard. MPI - Message Passing Interface. Comunicarea punct la punct

Message Passing Interface (MPI)

MPI: Message Passing Interface

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

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

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

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

Message Passing Interface (MPI)

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

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

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

MPI: Message Passing Interface

Message Passing Interface (MPI)

Message Passing Interface (MPI)

Προγραµµατισµός µε ανταλλαγή µηνυµάτων Ι. Εισαγωγή στο MPI. Εφαρµογές Ανεξάρτητου Παραλληλισµού.

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

Παράλληλα και Κατανεµηµένα Συστήµατα. Εισαγωγή

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

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

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

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

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

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

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

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

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

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

Το Message Passing Interface (MPI) και η υποστήριξή του στο EGEE Grid. Vangelis Koukis 01-GRNET and HG EKT admin team

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

Ανταλλαγι Μθνυμάτων. Κϊςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

17. Πολυδιάςτατοι πίνακεσ

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


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

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

Δομές δεδομένων (2) Αλγόριθμοι

16. Πίνακεσ και Συναρτήςεισ

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

EM 361: Παξάιιεινη Υπνινγηζκνί

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

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. Διαφάνειεσ: Βαςικζσ Αρχζσ Προγραμματιςμοφ Α.Π.Θ. Δθμιτρθσ Βράκασ

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

Υπολογιςτική πολυπλοκότητα αλγορίθμων γραμμικοφ προγραμματιςμοφ

Εισαγωγή στον Προγραμματισμό

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

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

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μεταβίβαση μηνυμάτων. Κεφάλαιο 5 (νέο βιβλίο) Κεφάλαιο 8 (παλιές σημειώσεις)

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

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

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Οντοκεντρικόσ Προγραμματιςμόσ

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομζσ Δεδομζνων Πίνακεσ

Αριθμητικοί αλγόριθμοι

ΕΝΟΤΘΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΘ. ΚΕΦΑΛΑΙΟ 6: Θ «Βοικεια» ςτον Υπολογιςτι

Ιδιότθτεσ πεδίων Γενικζσ.

Ειδικά Θζματα Βάςεων Δεδομζνων

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Τυπικζσ Γλϊςςεσ Περιγραφισ Υλικοφ Διάλεξθ 4

Διάλεξη 22η: Επιπλέον στοιχεία της C

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Προγραμματισμό για ΗΜΥ

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Τα Δίκτυα Perceptron και ADALINE. Κϊςτασ Διαμαντάρασ Τμιμα Πλθροφορικισ ΤΕΙ Θεςςαλονίκθσ

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Προγραμματισμό για ΗΜΥ

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

Ειδικά Θζματα Βάςεων Δεδομζνων

Αναπαράςταςθ Γνώςθσ ςτον Παγκόςμιο Ιςτό Ενότθτα 2: XML Δομθμζνα Ζγγραφα Ιςτοφ, Μζροσ 4 ο XPath

Γενικά Μαθηματικά ΙΙ

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

Γράφοι. Δομζσ Δεδομζνων Διάλεξθ 9

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

Μεθόδων Επίλυσης Προβλημάτων

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Τάξη Β. Φυςικθ Γενικθσ Παιδείασ. Τράπεζα ιεμάτων Κεφ.1 ο ΘΕΜΑ Δ. Για όλεσ τισ αςκθςεισ δίνεται η ηλεκτρικθ ςταιερά

Ανάπτυξη και Σχεδίαση Λογισμικού

Γομέρ Γεδομένων (Data Structures) Χαπμανδάπηρ Δςάγγελορ, Τμήμα Δθαπμοζμένων Μαθημαηικών, Δαπινό Δξάμηνο 2010/11. Διζαγωγή: Σύνηομη Δπιζκόπηζη ηηρ C++

Κεφάλαιο VIΙΙ Β. Δημακόπουλος

Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6)

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

Προγραμματισμός με Μεταβίβαση Μηνυμάτων

Οντοκεντρικόσ Προγραμματιςμόσ

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

Απάντηση. // We write in a header file named my_header.h #ifndef my_header_h #define my_header_h #define divides(x,y) (((y)%(x)==0)?

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Ψθφιακι Επεξεργαςία ιματοσ

Ειδικζσ Ναυπηγικζσ Καταςκευζσ και Ιςτιοφόρα κάφη (Ε)

Προγραμματισμός Δομές Δεδομένων

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

Παράςταςη ςυμπλήρωμα ωσ προσ 1

Transcript:

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

MPI datatypes Σκοπόσ MPI datatypes: θ ςυνεργαςία μεταξφ ετερογενών υπολογιςτών και αρχιτεκτονικών Η χριςθ μθ ςυνεχών κζςεων μνιμθσ. Δομζσ δεδομζνων και arrays με μθ μοναδιαίο βιμα Ο χριςτθσ μπορεί να ορίςει δικά του datatypes κατά το χρόνο εκτζλεςθσ (runtime) = derived datatypes 2 Κ. Διαμαντάρας MPI

Τφποι δεδομζνων Βαςικοί (elementary): Οριςμζνοι ςτθ γλώςςα MPI (πχ., MPI_INT ι MPI_DOUBLE_PRECISION ) Διανυςματικοί (vector): Στακερι απόςταςθ μεταξφ ςτοιχείων = «βιμα» (stride) Συνεχείσ (contiguous): Διάνυςμα με βιμα 1 Hvector: Διάνυςμα με βιμα ςε bytes Δείκτεσ (Indexed): Πίνακεσ δεικτών (για scatter/gather) Hindexed: Indexed, με δείκτεσ ςε bytes Struct: Γενικοί μικτοί τφποι (για C structs κλπ.) 3 Κ. Διαμαντάρας MPI

Βαςικοί τφποι C Τύπος MPI MPI_CHAR MPI_SHORT MPI_INT MPI_LONG MPI_UNSIGNED_CHAR MPI_UNISGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_FLOAT MPI_DOUBLE MPI_LONG_DOUBLE MPI_BYTE MPI_PACKED 4 Κ. Διαμαντάρας MPI Τύπος C signed char signed short int signed int signed long int unsigned char unsigned short int unsigned int unsigned long int float double long double

Διανφςματα (vectors) (1) 28 29 30 31 32 33 34 21 22 23 24 25 26 27 14 15 16 17 18 19 20 7 8 9 10 11 12 13 0 1 2 3 4 5 6 5 Κ. Διαμαντάρας MPI

Διανφςματα (2) Για να ορίςουμε αυτι τθ γραμμι ςτθ C χρθςιμοποιοφμε MPI_Type_vector( count, blocklen, stride, oldtype, &newtype ); MPI_Type_commit( &newtype ); Ο ακριβισ κώδικασ είναι MPI_Type_vector( 5, 1, 7, MPI_DOUBLE, &newtype ); MPI_Type_commit( &newtype ); 6 Κ. Διαμαντάρας MPI

MPI_Type_vector Δθμιουργεί ζνα τφπο δεδομζνων διανφςματοσ με βιμα (stride) #include "mpi.h" int MPI_Type_vector( int count, int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype *newtype ) Παράμετροι Εισόδου count = πλικοσ blocks blocklength = πλικοσ ςτοιχείων ςε κάκε block stride = πλικοσ ςτοιχείων μεταξφ των αρχών διαδοχικών blocks oldtype = παλαιό datatype Παράμετροι Εξόδου newtype = νζο datatype 7 Κ. Διαμαντάρας MPI

Δομζσ (structs) Οι τφποι δομών (structs) περιγράφονται από 3 πίνακεσ Πίνακασ με το μικοσ των block (array_of_len) Πίνακασ με μετατοπίςεισ (array_of_displs) Πίνακασ τφπων δεδομζνων (array_of_types) MPI_Type_struct( count, array_of_len, array_of_displs, array_of_types, &newtype ); 8 Κ. Διαμαντάρας MPI

MPI_Type_struct Δθμιουργεί ζνα τφπο δεδομζνων struct #include "mpi.h" int MPI_Type_struct(int count, int blocklens[], MPI_Aint indices[], MPI_Datatype old_types[], MPI_Datatype *newtype ) Παράμετροι Εισόδου count = πλικοσ blocks blocklens = πλικοσ ςτοιχείων ςε κάκε block (πίνακασ) indices = μετατόπιςθ κάκε block (πίνακασ) old_types = τφποι δεδομζνων κάκε block (πίνακασ) Παράμετροι Εξόδου newtype = νζο datatype 9 Κ. Διαμαντάρας MPI

Παράδειγμα struct (1) struct { char display[50]; /* Name of display */ int maxiter; /* max # of iterations */ double xmin, ymin; /* lower left corner of rectangle */ double xmax, ymax; /* upper right corner */ int width; /* of display in pixels */ int height; /* of display in pixels */ } cmdline; 10 Κ. Διαμαντάρας MPI

Παράδειγμα struct (2) /* 4 blocks */ int blockcounts[4] = {50,1,4,2}; MPI_Datatype types[4]; MPI_Aint displ[4]; MPI_Datatype cmdtype; /* initialize types and displacements with addresses of items */ MPI_Address( &cmdline.display, &displ[0] ); MPI_Address( &cmdline.maxiter, &displ[1] ); MPI_Address( &cmdline.xmin, &displ[2] ); MPI_Address( &cmdline.width, &displ[3] ); types[0] = MPI_CHAR; types[1] = MPI_INT; types[2] = MPI_DOUBLE; types[3] = MPI_INT; for (i = 3; i >= 0; i--) { displ[i] -= displ[0]; } MPI_Type_struct( 4, blockcounts, displ, types, &cmdtype ); MPI_Type_commit( &cmdtype ); 11 Κ. Διαμαντάρας MPI

Παράδειγμα struct (3) struct { int a; char b; } foo; blen[0] = 1; indices[0] = 0; oldtypes[0] = MPI_INT; blen[1] = 1; indices[1] = &foo.b - &foo; oldtypes[1] = MPI_CHAR; blen[2] = 1; indices[2] = sizeof(foo); oldtypes[2] = MPI_UB; MPI_Type_struct( 3, blen, indices, oldtypes, &newtype ); Τφποσ MPI_UB δθμιουργεί το απαραίτθτο padding 12 Κ. Διαμαντάρας MPI

Οι τφποι MPI_LB, MPI_UB Η ζκταςθ (extend) ενόσ τφπου δεδομζνων ορίηεται από τθν απόςταςθ μεταξφ του πρώτου και του τελευταίου δεδομζνου Μποροφμε να ορίςουμε τθν ζκταςθ ορίηοντασ δικά μασ MPI_LB, MPI_UB 13 Κ. Διαμαντάρας MPI

Τφποσ Διάνυςμα-γραμμι int blen[2], displ[2]; MPI_Datatype types[2], rowtype; blen[0] = 1; blen[1] = 1; displ[0] = 0; displ[1] = number_in_column * sizeof(double); types[0] = MPI_DOUBLE; types[1] = MPI_UB; MPI_Type_struct( 2, blen, displ, types, &rowtype ); MPI_Type_commit( &rowtype ); 14 Κ. Διαμαντάρας MPI

Τφποσ struct ξανά /* initialize types and displs with addresses of items */ MPI_Address( &cmdline.display, &displ[0] ); MPI_Address( &cmdline.maxiter, &displ[1] ); MPI_Address( &cmdline.xmin, &displ[2] ); MPI_Address( &cmdline.width, &displ[3] ); MPI_Address( &cmdline+1, &displ[4] ); types[0] = MPI_CHAR; types[1] = MPI_INT; types[2] = MPI_DOUBLE; types[3] = MPI_INT; types[4] = MPI_UB; for (i = 4; i >= 0; i--) { displ[i] -= displ[0]; } MPI_Type_struct( 5, blockcounts, displ, types, &cmdtype ); MPI_Type_commit( &cmdtype ); 15 Κ. Διαμαντάρας MPI

Interleaving Θζλω να ςτείλω 0-3, 8-11, 16-19, 24-27 ςτθ διεργαςία 0 4-7, 12-15, 20-23, 28-31 ςτθ διεργαςία 1 16 Κ. Διαμαντάρας MPI 0 8 16 24 32 1 9 17 25 33 2 10 18 26 34 3 11 19 27 35 4 12 20 28 36 5 13 21 29 37 6 14 22 30 38 7 15 23 31 39

Interleaving (2) /* define a block of this matrix. */ MPI_Type_vector( 4, 4, 8, MPI_DOUBLE, &vec ); /* define a block whose extent is just 1 entry */ blen[0] = 1; blen[1] = 1; types[0] = vec; types[1] = MPI_UB; displ[0] = 0; displ[1] = sizeof(double); MPI_Type_struct( 2, blen, displ, types, &block ); 17 Κ. Διαμαντάρας MPI

MPI_Scatterv Τεμαχίηει ζνα buffer και τον μοιράηει ςτισ διεργαςίεσ ενόσ communicator #include "mpi.h" int MPI_Scatterv ( void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm ) Παράμετροι Εισόδου sendbuf = διεφκυνςθ του send buffer sendcounts = array που ορίηει το πλικοσ των ςτοιχείων που κα ςτείλουμε ςε κάκε διεργαςία displs = array του οποίου το ςτοιχείο i ορίηει τθ μετατόπιςθ του δεδομζνου που κα ςταλεί ςτθ διεργαςία i sendtype = τφποσ δεδομζνων των ςτοιχείων του sendbuff recvcount = πλικοσ ςτοιχείων ςτον receive buffer recvtype = τφποσ δεδομζνων των ςτοιχείων του receive buffer root = rank τθσ διεργαςίασ αποςτολζα comm = communicator Παράμετροι Εξόδου recvbuf = διεφκυνςθ του receive buffer 18 Κ. Διαμαντάρας MPI

Interleaving και Scatterv scdispl[0] = 0; scdispl[1] = 4; scdispl[2] = 32; scdispl[3] = 36; MPI_Scatterv( sendbuf, sendcounts, scdispl, block, recvbuf, nx * ny, MPI_DOUBLE, 0, MPI_COMM_WORLD ); 19 Κ. Διαμαντάρας MPI