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

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

Message Passing Interface (MPI)

Message Passing Interface (MPI)

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

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

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

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

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

MPI: Message Passing Interface

Message Passing Interface (MPI)

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

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

Message Passing Interface (MPI)

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

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

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

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

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

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΤΟ ΠΡΩΤΟΚΟΛΛΟ TARRY ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

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

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

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

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

MPI: Message Passing Interface

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΕΙΣΑΓΩΓΗ ΣΤO MESSAGE PASSING INTERFACE - MPI ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β.

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

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

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

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

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

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

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

MPI: Message Passing Interface

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

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

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

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

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΡΟΛΟΓΙΑ ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

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

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

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


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

Εισαγωγή. Λογισµικό & Προγραµµατισµός Συστηµάτων Υψηλής Επίδοσης

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

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

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

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

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

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΓΕΝΙΚΟΙ ΓΡΑΦΟΙ ΣΤΟ MPI ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

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

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

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

30/4/2012 Συστήματα κατανεμημένης μνήμης και ο προγραμματισμός τους (Ι) Β. Δημακόπουλος

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

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

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

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

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

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

Εκφωνήσεις ασκήσεων εργαστηρίου 1

Minimum Spanning Tree: Prim's Algorithm

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Παραλληλισμός δεδομένων ή Φυσικός παραλληλισμός

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Αντικειµενοστρεφής Προγραµµατισµός

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Network Algorithms and Complexity Παραλληλοποίηση του αλγορίθμου του Prim. Αικατερίνη Κούκιου

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

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

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

Κατανεμημένος και Παράλληλος Προγραμματισμός

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

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

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

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

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

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

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

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

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

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

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (pthreads)

Transcript:

Προγραµµατισµός µε ανταλλαγή µηνυµάτων Ι. Εισαγωγή στο MPI. Εφαρµογές Ανεξάρτητου Παραλληλισµού. Λογισµικό & Προγραµµατισµός Συστηµάτων Υψηλής Επίδοσης Οµάδα Παράλληλων & Κατανεµηµένων Συστηµάτων http://pdsgroup.hpclab.ceid.upatras.gr/ Εργαστήριο Πληροφοριακών Συστηµάτων Υψηλών Επιδόσεων Τµήµα Μηχανικών Η/Υ και Πληροφορικής 07 Οκτωβρίου 2010

Ανταλλαγή Μηνυµάτων Για ποιες πλατφόρµες προορίζεται Υλικό: Σηµαντικά κλιµακώσιµες µηχανές κατανεµηµένης µνήµης (Clusters). ίκτυα υπολογιστικών συστηµάτων (NOWs). Υπολογιστικά Πλέγµατα (Computational Grids). Λογισµικό: Βασική Οντότητα: ιεργασία. Χαρακτηριστικό: Ο διαχωρισµένος συνολικός χώρος διευθύνσεων (distinct address spaces)

Μοντέλα Παράλληλης Εκτέλεσης MPMD Μοντέλο πολλαπλών διεργασιών που επενεργούν σε πολλαπλά δεδοµένα Multiple Processes Multiple Data - MPMD Πηγαίος Κώδικας Α Πηγαίος Κώδικας B Μετάφραση στην αντίστοιχη αρχιτεκτονική Εκτελέσιμος Κώδικας Α για Αρχιτεκτονική Χ Εκτελέσιμος Κώδικας Β για Αρχιτεκτονική Υ Συνεργατική Εκτέλεση Core 0 Core p-1

Μοντέλα Παράλληλης Εκτέλεσης SPMD Μοντέλο µοναδικής διεργασίας που επενεργεί σε πολλαπλά δεδοµένα Single Process Multiple Data - SPMD Πηγαίος Κώδικας Α Μετάφραση στην αντίστοιχη αρχιτεκτονική Εκτελέσιμος Κώδικας Α για Αρχιτεκτονική Χ Εκτελέσιμος Κώδικας A για Αρχιτεκτονική Υ Συνεργατική Εκτέλεση Core 0 Core p-1

Τί είναι; Message Passing Interface - MPI Προσπάθεια προτυποποίησης του παράλληλου προγραµµατισµού µε ανταλλαγή µηνυµάτων. Πρότυπο που περιγράφει ένα σύνολο προδιαγραφών http://www.mpi-forum.org/. Ευρεία γκάµα υλοποιήσεων: Ελεύθερες: Open MPI, MPICH2 Εµπορικές: Intel MPI, HP MPI, MPI/Pro. Βιβλιοθήκη χρόνου εκτέλεσης (όχι γλώσσα προγραµµατισµού).

Βασική διεπαφή Message Passing Interface - MPI Περιγραφή Μια µατιά στις ϐασικές λειτουργίες: Πλήθος στοιχείων Προορισµός Communicator MPI_Send (buf, count, datatype, dest, tag, comm) ιεύθυνση του send buffer Τύπος στοιχείων Ετικέτα Πλήθος στοιχείων Προέλευση Communicator MPI_Recv (buf, count, datatype, src, tag, comm, status) ιεύθυνση του send buffer Τύπος στοιχείων Ετικέτα Κατάσταση µετά τη λήψη

Ranks Message Passing Interface - MPI Περιγραφή Οι διεργασίες οργανώνονται σε οµάδες (groups) Σε κάθε µία ανατίθεται ένα αναγνωριστικό rank. Η ανάγκη για αναγνωριστικά: Αντιστοίχιση των διεργασιών που επικοινωνούν. ιαχωρισµός λειτουργιών στο προγραµµατιστικό µοντέλο (SPMD): i f ( rank % 2 == 0) MPI_Send ( buf, len, MPI_INT, rank +1, tag, comm) ; i f ( rank % 2! = 0) MPI_Recv ( buf, len, MPI_INT, rank 1, tag, comm, s t a t u s ) ;

Message Passing Interface - MPI Tags και Communicators Περιγραφή Ετικέτες µηνυµάτων (tags): Αντιστοίχιση σε επίπεδο µηνυµάτων. υνατότητα χρήσης wildcard ετικέτας (MPI_ANY_TAG) Communicators: Ο ορισµός τους καθορίζει νέες οµάδες διεργασιών που επικοινωνούν µεταξύ τους. Επιτρέπουν τον ορισµό εικονικών τοπολογιών. Χρησιµοποιούνται σαν όρισµα στις περισσότερες συναρτήσεις. Υπάρχει ένας προκαθορισµένος για όλες τις διεργασίες (MPI_COMM_WORLD)

Τύποι εδοµένων Message Passing Interface - MPI Περιγραφή Προκαθορισµένοι τύποι δεδοµένων: MPI_CHAR MPI_SHORT MPI_INT MPI_LONG MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED_LONG MPI_UNSIGNED MPI_FLOAT MPI_DOUBLE MPI_LONG_DOUBLE MPI_BYTE MPI_PACKED char short int int long int unsigned char unsigned short int unsigned long_int unsigned int float double long double

Message Passing Interface - MPI Το πρώτο πρόγραµµα (έκδοση 1) Περιγραφή # include < s t d i o. h> # include < s t d l i b. h> # include <mpi. h> i n t main ( i n t argc, char argv ) { i n t rank, s i z e ; M P I _ I n i t (&argc, &argv ) ; MPI_Comm_size (MPI_COMM_WORLD, & s i z e ) ; MPI_Comm_rank (MPI_COMM_WORLD, &rank ) ; p r i n t f ( " H e l l o World from process %d ( t o t a l %d)\ n ", rank, s i z e ) ; M P I _ F i n a l i z e ( ) ; r e t u r n 0 ;

Message Passing Interface - MPI Το πρώτο πρόγραµµα (έκδοση 2) i n t main ( i n t argc, char argv ) { i n t i, rank, s i z e ; char msg [ 2 5 6 ] ; M P I _ S t a t u s s t a t u s ; M P I _ I n i t (&argc, &argv ) ; MPI_Comm_size (MPI_COMM_WORLD, & s i z e ) ; MPI_Comm_rank (MPI_COMM_WORLD, &rank ) ; Περιγραφή i f ( rank == 0 ) { s t r n c p y ( msg, " H e l l o World\n ", 2 0 ) ; f o r ( i = 0 ; i < s i z e ; i ++) MPI_Send ( msg, 13, MPI_CHAR, i, MPI_ANY_TYPE, MPI_COMM_WORLD ) ; e l s e MPI_Recv ( msg, 256, MPI_CHAR, 0, MPI_ANY_TYPE, MPI_COMM_WORLD, &s t a t u s ) ; p r i n t f ( " [%d ] %s \n ", rank, msg ) ; M P I _ F i n a l i z e ( ) ; r e t u r n 0 ;

Message Passing Interface - MPI Καθορισµός συστηµάτων Προετοιµασία & Εκτέλεση Καθορισµός συστηµάτων. user@control node> v i machines. t x t node10 node11 node12 node13 Μέριµνα για την κατάλληλη τοποθέτηση των εκτελέσιµων αρχείων και των αρχείων εισόδου (είτε χειροκίνητα είτε µέσω NFS). Προετοιµασία για την ασφαλή πιστοιποίηση: Πιστοποίηση µε χρήση δηµόσιου κλειδιού (Αναζητήστε HOWTOs για OpenSSH Public-key Authentication). ηµιουργία κλειδιών την πρώτη ϕορά. Εκκίνηση και πιστοποίηση µέσω ssh-agent πριν από κάθε πείραµα. Χρήση προγράµµατος screen ( > man screen ) για πιο ευέλικτη διαχείριση τερµατικών από απόσταση.

Εκτέλεση Message Passing Interface - MPI Προετοιµασία & Εκτέλεση Μετάφραση µε mpicc user@control node> mpicc o h e l l o h e l l o. c Εκκίνηση εκτέλεσης µε mpirun user@control node> mpirun np 4 m a c h i n e f i l e nodes. t x t h e l l o [ 0 ] H e l l o World [ 2 ] H e l l o World [ 3 ] H e l l o World [ 1 ] H e l l o World

Εφαρµογές Εφαρµογές Ανεξαρτητου Παραλληλισµού Γνωστές ευρέως ως Tasks of Independent Parallelism ή Embarrasingly Parallel Applications. Ο υπολογισµός που επιτελούν διαµοιράζεται σε ένα πλήθος ανεξάρτητων µερών. Γι αυτό το λόγο προσφέρονται για παράλληλη εκτέλεση. Χαρακτηριστικές Κατηγορίες: Γεωµετρικοί µετασχηµατισµοί σε εικόνες (Μετατόπιση, Κλιµάκωση, Περιστροφή, Περικοπή). Υπολογισµός σε σύνολα Mandelbrot (Fractals). Μέθοδοι Monte Carlo. Επίλυση µέσω στατιστικής δειγµατοληψίας (statistical sampling).

Υπολογισµός του π Εφαρµογές Monte Carlo I Ο λόγος r των εµβαδών ενός κύκλου ακτίνας 1 και του τετραγώνου πλευράς 2 που τον περιέχει είναι r = π/4 Η ιδέα του υπολογισµού του π ως π = 4r µέσω προσέγγισης Monte Carlo στηρίζεται στην παραγωγή τυχαίων σηµείων (x, y) τα οποία ϐρίσκονται µέσα στο τετράγωνο. Το π υπολογίζεται από το ποσοστό r όσων εξ αυτών ϐρίσκονται ταυτόχρονα και µέσα στον κύκλο (x 2 + y 2 < 1) [1][3][4].

Υπολογισµός του π [1] # include < stdio. h> # include < s t d l i b. h> # include <math. h> # include <mpi. h> # define CHUNKSIZE 1000 # define EPSILON 0.000001 # define REQUEST 1 / message tags / # define REPLY 2 Εφαρµογές Monte Carlo I i n t main ( i n t argc, char argv ) { i n t i t e r, in, out, i, r a n k s [ 1 ], done ; double x, y, Pi, e r r o r ; i n t numprocs, myid, server, totalin, totalout, workerid ; i n t rands [ CHUNKSIZE ], request ; MPI_Comm world, workers ; MPI_Group world_group, worker_group ; MPI_Status status ; M P I _ I n i t (&argc,& argv ) ; world = MPI_COMM_WORLD ; MPI_Comm_size ( world,&numprocs ) ; MPI_Comm_rank ( world,&myid ) ; s e r v e r = numprocs 1; / l a s t proc i s server / MPI_Comm_group ( world, &world_group ) ; ranks [ 0 ] = s e r v e r ; MPI_Group_excl ( world_group, 1, ranks, &worker_group ) ; MPI_Comm_create ( world, worker_group, &workers ) ; MPI_Group_free (&worker_group ) ;

Υπολογισµός του π Εφαρµογές Monte Carlo I i f ( myid == server ) { / I am the rand s e r v e r / do { MPI_Recv(& request, 1, MPI_INT, MPI_ANY_SOURCE, REQUEST, world, &status ) ; i f ( request ) { for ( i = 0 ; i < CHUNKSIZE ; ) { rands [ i ] = random ( ) ; i f ( rands [ i ] <= RAND_MAX) i ++; MPI_Send ( rands, CHUNKSIZE, MPI_INT, status. MPI_SOURCE, REPLY, world ) ; w h i le ( request >0 ) ; e l s e { / I am a worker process / request = 1 ; done = i n = out = 0 ; MPI_Send ( &request, 1, MPI_INT, server, REQUEST, world ) ; MPI_Comm_rank ( workers, &workerid ) ; i t e r = 0 ; w h i l e (! done ) { i t e r ++; request = 1 ; MPI_Recv ( rands, CHUNKSIZE, MPI_INT, server, REPLY, world, &status ) ; f o r ( i = 0 ; i <CHUNKSIZE 1; ) { x = ( ( double ) rands [ i ++])/RAND_MAX ; y = ( ( double ) rands [ i ++])/RAND_MAX ; i f ( x x + y y < 1. 0 ) i n ++; e l s e out ++;

Υπολογισµός του π Εφαρµογές Monte Carlo I MPI_Allreduce (& in, &totalin, 1, MPI_INT, MPI_SUM, workers ) ; MPI_Allreduce (&out, &totalout, 1, MPI_INT, MPI_SUM, workers ) ; P i = (4.0 t o t a l i n ) / ( t o t a l i n + t o t a l o u t ) ; e r r o r = fabs ( Pi 3.141592653589793238462643); done = e r r o r < EPSILON ; request = ( done )? 0 : 1 ; i f ( myid == 0) { p r i n t f ( " \ r p i = %23.20 f ", P i ) ; MPI_Send ( &request, 1, MPI_INT, server, REQUEST, world ) ; e l s e { i f ( request ) MPI_Send(& request, 1, MPI_INT, server, REQUEST, world ) ; MPI_Comm_free(& workers ) ; i f ( myid == 0) { p r i n t f ( " \ n p o i n t s : %d\ n i n : %d, out : %d\n ", t o t a l i n + t o t a l o u t, t o t a l i n, t o t a l o u t ) ; M P I _ F i n a l i z e ( ) ; r e t u r n 0 ;

Εφαρµογές Monte Carlo II Υπολογισµός ϑερµοκρασίας σηµείου Ζητούµενο: Ο υπολογισµός της ϑερµοκρασίας ενός σηµείου σε ϑερµαινόµενη µεταλλική πλάκα (2 διαστάσεις). Η ϑερµοκρασία ενός εσωτερικού σηµείου υπολογίζεται ως ο µέσος όρος της ϑερµοκρασίας των σηµείων που το περιβάλλουν (Εξίσωση Laplace: 2 T = 0). Μια επίλυση του προβλήµατος µε µέθοδο Monte Carlo έχεις ως εξής [4]: Υπολογίζουµε τη ϑερµοκρασία του σηµείου S επιλέγοντας τυχαία ένα από τα 4 γειτονικά του σηµεία. Η ϑερµοκρασία του γείτονα προστίθεται σε ένα συνολικό άθροισµα. Αφού γίνει δειγµατοληψία n δειγµάτων, το άθροισµα διαιρείται µε το πλήθος των δειγµάτων. Ο µέσος όρος που προκύπτει έχει αναµενόµενη τιµή (T n + T s + T e + T w)/4) η οποία αντιστοιχεί στη ϑερµοκρασία του σηµείου. Επειδή γνωστές είναι µόνο η ϑερµοκρασίας που εφαρµόζονται στα άκρα της πλάκας η παραπάνω διαδικασία εκτελείτε αναδροµικά. Η αναδροµική δειγµατοληψία αντιστοιχεί σε ένα τυχαίο περίπατο µεταξύ των σηµείων της πλάκας. Κάθε τέτοιος τυχαίος περίπατος τερµατίζει µετά από πεπερασµένο αριθµό ϐηµάτων γιατί η ϑερµοκρασία στα άκρα είναι γνωστή.

Εφαρµογές Monte Carlo II Υπολογισµός ϑερµοκρασίας σηµείου # include < stdio. h> # include < s t d l i b. h> # include <mpi. h> # include <time. h> # include <math. h> # define MAXITER 1000 # define EPSILON 0.0001 void i n i t P l a t e ( f l o a t plate, i n t WIDTH, i n t HEIGHT ) { i n t i, j, count ; unsigned seed ; F I L E randfd = fopen ( " / dev / urandom ", " r " ) ; f o r ( i = 1 ; i < WIDTH 1; i ++) f o r ( j = 1 ; j < HEIGHT 1; j ++) plate [ i ] [ j ] = 1.0; for ( i = 0 ; i < WIDTH ; i ++){ plate [ i ] [ 0 ] = 0. 0 ; plate [ i ] [ HEIGHT 1] = 0. 0 ; f o r ( j = 1 ; j < HEIGHT 1; j ++){ plate [ 0 ] [ j ] = 0. 0 ; plate [ WIDTH 1][ j ] = 1 0 0.0; count = fread (&seed, sizeof ( unsigned ), 1, randfd ) ; i f ( count > 0 ) { p r i n t f ( " Using / dev / urandom w i t h seed %u\n ", seed ) ; srandom ( seed ) ;

Εφαρµογές Monte Carlo II Υπολογισµός ϑερµοκρασίας σηµείου void findpointtemp ( float plate, i n t xcoord, i n t ycoord, i n t samples ) { i n t i t e r = 0, where = 0 ; f l o a t val, d i f f ; f l o a t tempnew = 0.0, tempold = 0. 0 ; i n t i, x, y ; do { tempnew = 0. 0 ; f o r ( i = 0 ; i < samples ; i + + ) { x = xcoord ; y = ycoord ; do { where = random ( ) & 3 ; s w i t c h ( where ) { case 0 : v a l = plate[ x ] [ y ] ; case 1 : v a l = plate [ x ] [ + + y ] ; case 2 : v a l = plate [++ x ] [ y ] ; case 3 : v a l = plate [ x][ y ] ; w h i l e ( v a l < 0. 0 ) ; tempnew += val ; tempnew = tempnew / samples ; d i f f = f a b s f (tempnew tempold ) ; tempold = tempnew ; w h i l e ( d i f f > EPSILON && ++ i t e r < MAXITER ) ; p r i n t f ( " Temperature at (%d, %d) i s %f ( a f t e r d i f f = %.6 f and i t e r = %d)\ n ", xcoord, ycoord, tempold, d i

Εφαρµογές Monte Carlo II Υπολογισµός ϑερµοκρασίας σηµείου void printplate ( float plate, i n t WIDTH, i n t HEIGHT ) { i n t i, j ; p r i n t f ( " P l a t e : \ n " ) ; for ( i = 0 ; i < WIDTH ; i ++){ for ( j = 0 ; j < HEIGHT ; j ++){ p r i n t f ( " %.2 f \ t ", plate [ i ] [ j ] ) ; p r i n t f ( " \n " ) ; i n t main ( i n t argc, char argv ) { i n t i ; i n t WIDTH = a t o i ( argv [ 1 ] ) ; i n t HEIGHT = a t o i ( argv [ 2 ] ) ; i n t samples = a t o i ( argv [ 3 ] ) ; float plate = malloc ( WIDTH sizeof ( float ) ) ; plate [ 0 ] = malloc ( WIDTH HEIGHT s i z e o f ( f l o a t ) ) ; f o r ( i = 1 ; i < WIDTH ; i ++) plate [ i ] = plate [ i 1] + HEIGHT ; i n i t P l a t e ( plate, WIDTH, HEIGHT ) ; printplate ( plate, WIDTH, HEIGHT ) ; findpointtemp ( plate, WIDTH /2 1, HEIGHT /2 1, samples ) ; r e t u r n 0 ;

Ασκήσεις Εξάσκηση Προετοιµάστε το προγραµµατιστικό περιβάλλον στους λογαριασµούς που σας έχουν δοθεί και εκτελέστε το πρώτο σας πρόγραµµα σε MPI. ώστε κατάλληλες παραµέτρους ώστε να διαπιστώσετε πως κατανέµονται οι διεργασίες στους πιθανούς συνδυασµούς κόµβων και διεργασιών. Εκτελέστε το πρόγραµµα που υπολογίζει το π µε µέθοδο Monte Carlo και χρονοµετρήστε την εκτέλεση µε τη συνάρτηση MPI_Wtime. ηµιουργείστε µια παράλληλη έκδοση του προγράµµατος που υπολογίζει τη ϑερµοκρασία σηµείου χρησιµοποιώντας απλές κλήσεις Send/Receive και εκτιµήστε την επιτάχυνση (speedup) που επιτυγχάνεται.

Εξάσκηση Συµπληρωµατική Βιβλιογραφία και Αναφορές [1] William Gropp, Ewing Lusk, and Anthony Skjellum. Using MPI (2nd ed.): portable parallel programming with the message-passing interface. MIT Press, Cambridge, MA, USA, 1999. [ Examples and Tutorials ] [2] Marc Snir, Steve Otto, David Walker, Jack Dongarra, and Steven Huss-Lederman. MPI: The Complete Reference. MIT Press, Cambridge, MA, USA, 1995. [ Available Online ] [3] Barry Wilkinson and Michael Allen. Parallel Programming: Techniques and Applications using Networked Workstations and Parallel Computers. Prentice-Hall, Inc., Upper Saddle River, NJ, USA, second edition, 2004. [4] Michael J. Quinn. Parallel Programming in C with MPI and OpenMP. McGraw-Hill Education Group, 2003. [5] MPI Tutorials. [ Link ]

Συζήτηση/Ερωτήσεις Εξάσκηση Ερωτήσεις;