ΠΑΡΑΛΛΗΛΟΠΟΙΗΣΗ ΤΟΥ ΚΩ ΙΚΑ ΥΠΟΛΟΓΙΣΤΙΚΗΣ ΡΕΥΣΤΟΜΗΧΑΝΙΚΗΣ ADREA-HF ΚΑΙ ΕΦΑΡΜΟΓΗ ΣΕ ΘΕΜΑΤΑ ΙΑΣΠΟΡΑΣ Υ ΡΟΓΟΝΟΥ Η.Χ. Τόλιας, Α.Γ. Βενετσάνος Εργαστήριο Περιβαλλοντικών Ερευνών, Ε.Κ.Ε.Φ.Ε ηµόκριτος, Αγ. Παρασκευή Αττικής, 153 10 Σ. Γ. Γιαννίση Τµήµα Χηµικών Μηχανικών, Εθνικό Μετσόβιο Πολυτεχνείο, Ζωγράφου, 157 80 & Εργαστήριο Περιβαλλοντικών Ερευνών, Ε.Κ.Ε.Φ.Ε. ηµόκριτος, Αγία Παρασκευή Αττικής, 153 10 ΠΕΡΙΛΗΨΗ Στην παρούσα εργασία παρουσιάζεται η νέα δυνατότητα του κώδικα υπολογιστικής ρευστοµηχανικής ADREA-HF σε παράλληλους υπολογισµούς. Η παραλληλοποίηση του κώδικα έγινε τόσο για υπολογιστικά συστήµατα κοινή µνήµης (shared memory) όσο και για κατανεµηµένης (distributed memory). Στην πρώτη περίπτωση η παραλληλοποίηση πραγµατοποιήθηκε µε την χρήση του πακέτου OpenMP, ενώ στη δεύτερη µε χρήση της βιβλιοθήκης MPI. Η αξιολόγηση των δυνατοτήτων του παράλληλου κώδικα έγινε προσοµοιώνοντας ένα σενάριο ατυχήµατος µε έκλυση υδρογόνου σε κλειστό χώρο. Σκοπός της προσοµοίωσης ήταν ο υπολογισµός της συγκέντρωσης του υδρογόνου ώστε να διαπιστωθεί κατά πόσο ο υπάρχων αερισµός µπορεί να τη περιορίσει σε επιτρεπτά επίπεδα. Εξετάστηκε η επιτάχυνση του κώδικα σε συνάρτηση µε το πλήθος των επεξεργαστών για διάφορα µεγέθη πλέγµατος τόσο σε υπολογιστικά συστήµατα κοινής µνήµης όσο και σε κατανεµηµένης, ενώ έγινε και µια προσπάθεια σύγκρισης των δύο αυτών αρχιτεκτονικών. Τα αποτελέσµατα µπορούν να θεωρηθούν πολύ ικανοποιητικά και εξάγουν χρήσιµα συµπεράσµατα για τις δύο αρχιτεκτονικές. Τέλος, όσον αφορά το φυσικό πρόβληµα τα επίπεδα υδρογόνου που υπολογίστηκαν µπορούν να θεωρηθούν ακίνδυνα. ΕΙΣΑΓΩΓΗ Ο κώδικας ADREA-HF είναι ένας ευρέως χρησιµοποιήσιµος κώδικας µοντελοποίησης προβληµάτων ρευστοµηχανικής µε έµφαση στη διασπορά ρυπαντών σε περιβάλλον πολύπλοκης γεωµετρίας [1,2]. Ο κώδικας αναβαθµίζεται συνεχώς τα τελευταία χρόνια δίνοντας του διάφορες επιπλέον δυνατότητες όπως νέα µοντέλα τύρβης, νέες αριθµητικές µεθόδους, γραφικό περιβάλλον φιλικότερο στον χρήστη κ.α. Λόγω των µεγάλων υπολογιστικών απαιτήσεων των προβληµάτων υπολογιστικής µηχανικής, η παραλληλοποίηση τους έχει καταστεί σχεδόν αναγκαία. Στα πλαίσια της συνεχούς αναβάθµισης του κώδικα ADREA-HF, προστέθηκε η δυνατότητα παράλληλων υπολογισµών τόσο σε περιβάλλων κοινής µνήµης (shared memory) όσο και σε περιβάλλον κατανεµηµένης µνήµης (distributed memory). Η παραλληλοποίηση σε περιβάλλον κοινής µνήµης έγινε µε χρήση του πακέτου OpenMP, το οποίο δίνει στον κώδικα την δυνατότητα να εκµεταλλεύεται πλήρως τους πολλαπλούς πυρήνες των σύγχρονων επεξεργαστών, ενώ η
παραλληλοποίηση σε περιβάλλον κατανεµηµένης µνήµης έγινε µε χρήση του πακέτου MPI (Message Passing Interface), η οποία δίνει στον κώδικα την δυνατότητα να εκτέλεσης του σε συστοιχίες υπολογιστών (clusters). ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ Στα πλαίσια του ελέγχου της απόδοσης του νέου παράλληλου κώδικα, έγινε προσοµοίωση της διασποράς υδρογόνου σε µία απλή γεωµετρία για την οποία υπάρχουν πειραµατικά αποτελέσµατα αλλά και αποτελέσµατα από άλλους υπολογιστικούς κώδικες [3,4]. Το σενάριο του πειράµατος είναι η έκλυση υδρογόνου λόγω ατυχήµατος σε έναν κλειστό αεριζόµενο χώρο. Ο χώρος του πειράµατος προσοµοιώνει έναν πραγµατικό βιοµηχανικό διάδροµο στη µισή κλίµακα στον οποίο πραγµατοποιείται η έκλυση. Στο σχήµα 1 απεικονίζεται η γεωµετρία του πειράµατος όπως σχεδιάστηκε µε τη βοήθεια του EDes, του γραφικού περιβάλλοντος του ADREA-HF, όπως επίσης και οι θέσεις των αισθητήρων για την παρακολούθηση της διασποράς του υδρογόνου. Το µήκος του διαδρόµου είναι 2.9 m, το ύψος του 1.22 m και το πλάτος του 0.74 m. Η έκλυση υδρογόνου γίνεται από ένα ορθογώνιο άνοιγµα µε διαστάσεις 0.15 0.22 m στη δεξιά πλευρά του δαπέδου του διαδρόµου. Ο ρυθµός έκλυσης είναι 2 ft 3 /min (κυβικά µέτρα ανά λεπτό) και η έκλυση διαρκεί 20 λεπτά. Στην απέναντι πλευρά του διαδρόµου υπάρχουν δύο ανοίγµατα διαστάσεων 0.30 0.15 m για τον φυσικό εξαερισµό του χώρου, ένα στην οροφή και ένα στην κάτω πλευρά του δεξιού τοίχου. Όλες οι διαστάσεις του προβλήµατος και οι θέσεις στις οποίες είναι τοποθετηµένοι οι αισθητήρες µέτρησης της συγκέντρωσης του υδρογόνου, παρουσιάζονται στους Πίνακες 1 και 2 αντίστοιχα. Πίνακας 1: Κύρια χαρακτηριστικά της γεωµετρίας του προβλήµατος. Η αρχή των αξόνων βρίσκεται στην κάτω αριστερή γωνία του διαδρόµου, και οι θέσεις των ορθογωνίων εξαερισµού και έκλυσης υδρογόνου είναι η απόσταση της πλησιέστερης γωνίας του ορθογωνίου από την αρχή των αξόνων. Χ (m) Y (m) Z (m) ιαστάσεις διαδρόµου 2.9000 0.7400 1.2200 ιαστάσεις ανοίγµατος έκλυσης υδρογόνου 0.1524 0.3048 0.0000 Θέση ανοίγµατος έκλυσης υδρογόνου 0.1524 0.2176 0.0000 ιαστάσεις εξαερισµού οροφής 0.1524 0.3048 0.0000 Θέση εξαερισµού οροφής 2.6000 0.2176 1.2000 ιαστάσεις δεξιού εξαερισµού 0.0000 0.3048 0.1524 Θέση δεξιού εξαερισµού 2.9000 0.2176 0.1524 Πίνακας 2: Συντεταγµένες των σηµείων που βρίσκονται οι αισθητήρες Χ (m) Y (m) Z (m) Αισθητήρας 1 0.1524 0.1440 0.1524 Αισθητήρας 2 0.1524 0.5208 1.0088
Χ (m) Y (m) Z (m) Αισθητήρας 3 2.6762 0.1440 1.0088 Αισθητήρας 4 2.6762 0.5208 0.1524 Σχήµα 1: Η γεωµετρία του προβλήµατος και οι θέσεις των αισθητήρων µέσα από το EDes, το γραφικό περιβάλλον του ADREΑ-HF. ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΜΟΝΤΕΛΟΥ Για την επίλυση του προβλήµατος θεωρείται µίγµα αέρα-αέριου υδρογόνου το οποίο βρίσκεται σε θερµοδυναµική ισορροπία. Για το µίγµα επιλύονται οι εξισώσεις διατήρησης µάζας (συνέχειας), οι εξισώσεις διατήρησης της ορµής (Navier-Stokes) και τέλος η εξίσωση διατήρησης του κλάσµατος µάζας του συστατικού. ρ ρu + i = 0 t x ρu ρu i iu j Ρ u u i j + = + ( µ+µ t) + +ρ gi t x j xi x j x j x i i (1) (2) ρq ρu i jqi µ t q i + = ρ Di + + S t x j x j Sct x j qi (3) Η εξίσωση για το κλάσµα µάζας επιλύεται µόνο για το υδρογόνο και το κλάσµα µάζας του αέρα υπολογίζεται από την απαίτηση να ικανοποιείται η παρακάτω σχέση: q 1 i = (4)
Στις παραπάνω εξισώσεις η πυκνότητα του µίγµατος συνδέεται µε τα κλάσµα µάζας των συστατικών µε τις παρακάτω εξισώσεις: 1 q i qiv q il = = + ρ ρi ρiv ρ (5) il q = q + q (6) i iv il Για την τύρβη χρησιµοποιήθηκε το µοντέλο k-ε µε επιπρόσθετο όρο άνωσης. Το σύστηµα των εξισώσεων διακριτοποιείται µε την µέθοδο των πεπερασµένων όγκων και επιλύεται αριθµητικά µε µία παραλλαγή της µεθόδου SIMPLEX [5]. Για την διακριτοποίηση του χρονικού όρου χρησιµοποιείται πλήρως πεπλεγµένο σχήµα και για τους όρους συναγωγής ανάντη σχήµα πρώτου βαθµού. ΠΑΡΑΛΛΗΛΟΠΟΙΗΣΗ ΤΟΥ ΚΩ ΙΚΑ ΜΕ ΧΡΗΣΗ ΤΟΥ ΟPENMP Η παραλληλοποίηση του κώδικα έγινε για χρήση τόσο σε περιβάλλον κοινής µνήµης όσο και κατανεµηµένης. Στην παρούσα ενότητα θα περιγραφεί η παραλληλοποίηση σε περιβάλλον κοινής µνήµης. Στις αρχιτεκτονικές κοινής µνήµης εντάσσονται οι σύγχρονοι πολυπύρινοι επεξεργαστές, οι οποίοι συνδυάζουν χαµηλό κόστος µε αυξηµένες επιδόσεις. Για την εκµετάλλευση των πολλαπλών πυρήνων απαιτείται η παραλληλοποίηση του κώδικα. Ένας τρόπος για να πραγµατοποιηθεί αυτό είναι το πακέτο OpenMP [6]. Το OpenMP υποστηρίζεται από C/C++ και από fortran compilers και µπορεί να τρέξει ανεξάρτητα από την αρχιτεκτονική του συστήµατος και του λειτουργικού που χρησιµοποιείται. Είναι γενικά ένας εύκολος και γρήγορος τρόπος παραλληλοποίησης ενός προγράµµατος καθώς δεν απαιτεί µεγάλες αλλαγές στον κώδικα. Η παραλληλοποίηση αφορά κυρίως στους βρόγχους επανάληψης (do loops) µε την χρήση εντολών του OpenMP (γνωστών ως OMP-directives) πριν την έναρξη τέτοιον loops. Αυτό που επιτυγχάνεται µε αυτόν τον τρόπο είναι οι επαναλήψεις του βρόγχου να µοιράζονται µεταξύ των επεξεργαστών και να εκτελούνται παράλληλα. Ουσιαστικά δηµιουργούνται τόσα νήµατα όσα έχει ορίσει ο χρήστης τα οποία διαµοιράζονται από το λειτουργικό σύστηµα στους διαθέσιµους επεξεργαστές. Έτσι, για παράδειγµα για έναν βρόγχο 1000 επαναλήψεων και για επιλεγόµενο πλήθος νηµάτων 2, θα αναλάβει 500 επαναλήψεις το ένα νήµα και 500 το άλλο. Το ποιες ακριβώς επαναλήψεις θα εκτελέσει το κάθε νήµα µπορεί να αποφασιστεί από το χρήστη, διαφορετικά καθορίζεται από το OpenMP. Φυσικά, οι βρόγχοι οι οποίοι επιχειρούνται να διασπαστούν πρέπει να µπορούν να παραλληλοποιηθούν, δηλαδή η κάθε επανάληψη να είναι ανεξάρτητη από τις προηγούµενες. Αυτό σηµαίνει πως µεγέθη που υπολογίζονται σε µία επανάληψη του βρόγχου δεν πρέπει να επιζητούνται από τις επόµενες επαναλήψεις. Ένας κώδικας υπολογιστικής µηχανικής αποτελείται από δύο στάδια, το στάδιο της διακριτοποίησης των εξισώσεων και το στάδιο της επίλυσης γραµµικών συστηµάτων. Το στάδιο της διακριτοποίησης των εξισώσεων είναι ένα στάδιο το οποίο περιλαµβάνει βρόγχους που αφορούν το σύνολο των πεπερασµένων όγκων της διακριτοποίησης του χωρίου και κάθε επανάληψη τους είναι ανεξάρτητη από τις προηγούµενες. Έτσι, το κοµµάτι αυτού του κώδικα µπορεί να παραλληλοποιηθεί σχετικά απλά µέσω του OpenMP. Το δεύτερο µεγάλο στάδιο ενός κώδικα υπολογιστικής µηχανικής, το οποίο αποτελεί και το πιο χρονοβόρο τµήµα, είναι αυτό της επίλυσης των αλγεβρικών γραµµικών συστηµάτων
που προκύπτουν από την διακριτοποίηση των εξισώσεων. Τα συστήµατα αυτά είναι µεγάλα σε µέγεθος και αραιά (λίγα µη µηδενικά στοιχεία στον πίνακα των συντελεστών σε σχέση µε το συνολικό µέγεθος τους) και για την επίλυση τους χρησιµοποιούνται µέθοδοι που βασίζονται στη µέθοδο προβολής στον υπόχωρο Krylov (Krylov subspace methods) [7,8]. Αντιπροσωπευτικά παραδείγµατα των µεθόδων αυτών είναι οι αλγόριθµοι BiCGstab και GMRES οι οποίοι είναι ενσωµατωµένοι στον κώδικα ADREA-HF. Οι αλγόριθµοι αυτού του είδους είναι επαναληπτικοί και µπορούν να επιτύχουν ταχύτατη σύγκλιση αν συνδυαστούν µε την µέθοδο της προσταθεροποίησης [7-9]. Με την µέθοδο της προσταθεροποίησης αντί να επιλυθεί το σύστηµα Ax = b (7) όπου A ο n nπίνακας των συντελεστών, x ο 1 n πίνακας των αγνώστων και b ο 1 n πίνακας σταθερών, επιλύεται το 1 1 M Ax = M b (8) όπου M είναι ο πίνακας της προσταθεροποίησης. Με την κατάλληλη επιλογή του M µπορεί να επιτευχθεί καλύτερη κατάσταση του συστήµατος οπότε και ταχύτερη σύγκλιση των επαναληπτικών µεθόδων. Η µόνη αλλαγή που επιφέρει ουσιαστικά η χρήση προσταθεροποιητή στους αλγορίθµους των BiCGstab και GMRES είναι η ανάγκη για την επίλυση ενός επιπλέον συστήµατος µε πίνακα συντελεστών το Μ (προσταθεροποιηµένο σύστηµα) σε κάθε επανάληψη της µεθόδου. Σαν M µπορεί να επιλεγεί µία προσέγγιση του A. Γενικά όσο πιο καλή είναι αυτή η προσέγγιση τόσο πιο πολύς χρόνος απαιτείται για την επίλυση του προσταθεροποιηµένου συστήµατος αλλά και τόσο πιο γρήγορη είναι η σύγκλιση της λύσης του αρχικού. Μία ευρέως χρησιµοποιούµενη µέθοδος προσταθεροποίησης είναι η µέθοδος της προσεγγιστικής παραγοντοποίησης ILU. Στη µέθοδο αυτή σαν πίνακας προσταθεροποίησης M επιλέγεται το γινόµενο ενός άνω τριγωνικού µε έναν κάτω τριγωνικό πίνακα οι οποίοι έχουν δηµιουργηθεί µε εφαρµογή της απαλοιφής Gauss στον αρχικό πίνακα A απορρίπτοντας στοιχεία που εµφανίζονται σε θέσεις όπου ο Α έχει µηδενικά στοιχεία. Η παραπάνω µέθοδος ονοµάζεται ILU(0), ενώ υπάρχουν και οι παραλλαγές ILU(1), ILU(2) οι οποίες επιτρέπουν την εµφάνιση στοιχείων στους τριγωνικούς πίνακες και σε θέσεις στις οποίες ο A είχε µηδενικά στοιχεία. Έχοντας τον πίνακα M σε γινόµενο ενός άνω και ενός κάτω τριγωνικού πίνακα, υπολογίζεται εύκολα η λύση του προσταθεροποιηµένου συστήµατος εφαρµόζοντας µία µπρος και µία πίσω αντικατάσταση. Οι πράξεις που απαιτούν οι παραπάνω επαναληπτικές µέθοδοι επίλυσης είναι ουσιαστικά η πράξη του εσωτερικού γινοµένου δύο διανυσµάτων, του πολλαπλασιασµού διανύσµατος επί πίνακα, τη κατασκευή του προσταθεροποιητή M και τη λύση του προσταθεροποιηµένου συστήµατος. Ο πολλαπλασιασµός πίνακα επί διάνυσµα είναι µια πράξη που µπορεί να παραλληλοποιηθεί εύκολα, αφού υλοποιείται µε βρόγχο του οποίου η κάθε επανάληψη δεν εξαρτάται από την προηγούµενη. Η πράξη του εσωτερικού γινοµένου µπορεί και αυτή να παραλληλοποιηθεί εύκολα, µε την διαφορά ότι απαιτεί στο τέλος της άθροισµα των επιµέρους εσωτερικών γινοµένων που έχουν υπολογιστεί από κάθε επεξεργαστή. Η δυσκολία έγκειται στην παραλληλοποίηση του προσταθεροποιητή (µε την έννοια παραλληλοποίηση του προσταθεροποιητή εννοούµε την παραλληλοποίηση της κατασκευής του και της λύσης του προσταθεροποιηµένου συστήµατος). Τόσο η µέθοδος ILU όσο και άλλοι αποδοτικοί τρόποι
προσταθεροποίησης έχουν µία φυσική σειριακότητα στις πράξεις που εκτελούν µε αποτέλεσµα η παραλληλοποίηση τους να είναι δύσκολη. Από την άλλη µεριά προσταθεροποιητές που είναι εύκολο να παραλληλοποιηθούν δεν ενδείκνυνται για χρήση σε έναν µόνο επεξεργαστή (σειριακοί υπολογισµοί), αφού ο χρόνος που απαιτούν είναι µεγαλύτερος από τους δύσκολα παραλληλοποιήσιµους προσταθεροποιητές όπως οι τύπου ILU [10]. Ο προσταθεροποιητής ο οποίος επιλέχθηκε να χρησιµοποιηθεί στους παράλληλους υπολογισµούς είναι µία block παραλλαγή του ILU [10]. Ο πίνακας Α χωρίζεται σε block διαγώνιους πίνακες, τόσους όσοι και οι επεξεργαστές στους οποίους θέλουµε να τρέξουµε το πρόβληµα µας. Ο προσταθεροποιητής M είναι δηλαδή µία block προσέγγιση του A. Έτσι τώρα το προσταθεροποιηµένο σύστηµα µπορεί να διασπαστεί εύκολα σε ανεξάρτητα γραµµικά συστήµατα, κάθε ένα από τα οποία επιλύεται προσεγγιστικά εφαρµόζοντας την ILU παραγοντοποίηση του A. Ο προσταθεροποιητής αυτός είναι απλός και εύκολα υλοποιήσιµος και δίνει ικανοποιητικά αποτελέσµατα. Το µειονέκτηµα του είναι ότι µε την αύξηση του αριθµού των επεξεργαστών η ποιότητα του προσταθεροποιητή µπορεί να µειωθεί, µε αποτέλεσµα να απαιτούνται περισσότερες επαναλήψεις για την σύγκλιση του αρχικού συστήµατος. ΠΑΡΑΛΛΗΛΟΠΟΙΗΣΗ ΤΟΥ ΚΩ ΙΚΑ ΜΕ ΧΡΗΣΗ ΤΟΥ MPI Η παραλληλοποίηση ενός κώδικα για χρήση σε υπολογιστικά συστήµατα κατανεµηµένης µνήµης είναι πιο περίπλοκη σε σύγκριση µε τα συστήµατα κοινής µνήµης. Υπολογιστές κατανεµηµένης µνήµης είναι τόσο οι µεγάλοι υπερυπολογιστές (supercomputers), οι οποίοι αποτελούνται από εκατοντάδες ή και χιλιάδες επεξεργαστές, όσο και µικρές συστοιχίες επιτραπέζιων υπολογιστών οι οποίοι συνδέονται µεταξύ τους µέσω Ethernet δικτύου (Beowulf cluster). Σε τέτοιου είδους συστήµατα ο κάθε επεξεργαστής (ή η κάθε οµάδα επεξεργαστών) έχει την δική του µνήµη, δηλαδή διαχειρίζεται τα δικά του δεδοµένα. Σε έναν κώδικα, όµως (ο οποίος δεν µπορεί να χωριστεί σε τελείως ανεξάρτητα τµήµατα), θα υπάρξουν στιγµές κατά τις οποίες ο ένας επεξεργαστής θα χρειαστεί δεδοµένα που διαχειρίζεται κάποιος άλλος. Έτσι, η επικοινωνία µεταξύ των επεξεργαστών που έχουν πρόσβαση σε διαφορετική µνήµη είναι αναγκαία προκειµένου να µεταφερθούν τα απαραίτητα δεδοµένα. Η επικοινωνία αυτή γίνεται µέσα από ένα τοπικό δίκτυο µεταξύ των υπολογιστών µε χρήση του πακέτου MPI (Message Passing Interface) [11]. Το MPI είναι ανεξάρτητο της γλώσσας προγραµµατισµού, του υπολογιστικού συστήµατος και του λειτουργικού που χρησιµοποιείται και η χρήση του γίνεται µε κλήση των συναρτήσεων του MPI µέσα από τον κώδικα του προγράµµατος. Με τον τρόπο αυτό µεταβλητές, τις τιµές των οποίων γνωρίζει µόνο ένας επεξεργαστής, µπορούν να γίνουν γνωστές και στους υπόλοιπους κατά την διάρκεια εκτέλεσης του προγράµµατος. Όταν τρέχει ένα πρόγραµµα παράλληλα µέσω του MPI, ο κάθε επεξεργαστής τρέχει το δικό του στιγµιότυπο του προγράµµατος οπότε έχει και τις δικές του µεταβλητές. Το κάθε πρόγραµµα σταµατάει προσωρινά την εκτέλεση του όταν συναντήσει εντολή του MPI, ώστε να επικοινωνήσει µε τον κατάλληλο επεξεργαστή για να δώσει ή να πάρει δεδοµένα. Όταν επιτευχθεί η επικοινωνία το πρόγραµµα συνεχίζει κανονικά την εκτέλεση του. Η παραλληλοποίηση του κώδικα ADREA-HF για υπολογιστικά συστήµατα κατανεµηµένης µνήµης έγινε µε την µέθοδο της κατάτµησης του χωρίου (domain decomposition) [12,13]. Με την µέθοδο αυτή, το συνολικό χωρίο επίλυσης χωρίζεται σε υποχωρία, συνήθως τόσα όσα είναι και το διαθέσιµο πλήθος επεξεργαστών. Με αυτό τον τρόπο, ο κάθε επεξεργαστής είναι υπεύθυνος µόνο για τους υπολογισµούς του χωρίου, το
οποίο έχει αναλάβει. Η επικοινωνία µεταξύ των επεξεργαστών στην περίπτωση των αρχιτεκτονικών κατανεµηµένης µνήµης γίνεται, όπως είπαµε µέσω δικτύου και ο χρόνος για να πραγµατοποιηθεί αυτό δεν είναι αµελητέος. Καθυστέρηση έχουµε τόσο για την προετοιµασία αποστολής ενός νέου µηνύµατος (latency) όσο και κατά την διάρκεια την µεταφοράς του λόγω της περιορισµένης χωρητικότητας του διαύλου του δικτύου (bandwidth). Για τον λόγο αυτό, η µεταφορά των δεδοµένων µεταξύ των επεξεργαστών πρέπει να είναι περιορισµένη και να γίνεται µόνο όταν είναι απολύτως απαραίτητη. Έτσι, ο χωρισµός των χωρίων σε υποχωρία πρέπει να γίνεται κατά τέτοιο τρόπο ώστε να ικανοποιούνται δύο βασικές απαιτήσεις: τα χωρία να έχουν περίπου τον ίδιο αριθµό κελιών (πεπερασµένων όγκων) και οι διεπιφάνειες που τα χωρίζουν να είναι όσο το δυνατόν πιο µικρές. Με την πρώτη απαίτηση επιτυγχάνεται ο ισοκαταµερισµός του φορτίου εργασίας στους επεξεργαστές, έτσι ώστε η αναµονή ενός επεξεργαστή για την ανάκτηση δεδοµένων από κάποιον άλλο να είναι µικρή. Με την δεύτερη απαίτηση επιτυγχάνεται µείωση του όγκου των δεδοµένων που µεταφέρονται µεταξύ των υποχωρίων και εποµένως µειώνεται ο χρόνος επικοινωνίας. Η επικοινωνία µεταξύ των επεξεργαστών µπορεί να χωριστεί σε δύο οµάδες: επικοινωνία ανάµεσα σε δύο επεξεργαστές (point to point communication) και επικοινωνία ανάµεσα σε όλους τους επεξεργαστές (collective communication). Η πρώτη περίπτωση είναι η περίπτωση στην οποία δύο γειτονικά χωρία ανταλλάσσουν δεδοµένα στο σύνορο τους, ενώ η δεύτερη είναι η περίπτωση κατά την οποία απαιτείται να γίνει µία ολική πράξη (π.χ. άθροιση) κάποιας µεταβλητής πάνω σε όλα τα κελιά του πλέγµατος. Ανταλλαγή δεδοµένων στο σύνορο των χωρίων πραγµατοποιείται προκειµένου να µεταφερθούν τιµές µεταβλητών που έχουν υπολογιστεί στο ένα χωρίο και χρειάζονται στο άλλο. Κάτι τέτοιο για παράδειγµα χρειάζεται στην στιγµή όπου οι τιµές των ταχυτήτων και της πίεσης έχουν υπολογιστεί στο τέλος µιας επανάληψης από κάθε επεξεργαστή, και πρέπει να ενηµερωθούν οι τιµές αυτές στο σύνορο των χωρίων, προκειµένου να γίνει στην επόµενη επανάληψη η διακριτοποίηση των εξισώσεων. Επικοινωνία µεταξύ των επεξεργαστών απαιτείται επίσης στις µεθόδους Bi-CGstab και GMRES για να γίνει ο πολλαπλασιασµός πίνακα επί διάνυσµα. Από την άλλη µεριά, επικοινωνία ανάµεσα σε όλους τους επεξεργαστές χρειάζεται, εκτός από τις ολικές αθροίσεις µεταβλητών στα κελιά του πλέγµατος, στη πράξη του εσωτερικού γινοµένου κατά την επίλυση των γραµµικών συστηµάτων µε µεθόδους τύπου Bi-CGstab. Κάθε επεξεργαστής υπολογίζει το τµήµα του εσωτερικού γινοµένου που αφορά το χωρίο που έχει αναλάβει και στο τέλος γίνεται µια άθροιση των τιµών αυτών πάνω σε όλα τα χωρία. Γενικά, από όλα τα παραπάνω συµπεραίνεται ότι η παραλληλία για αρχιτεκτονικές κατανεµηµένης µνήµης σε αντίθεση µε την παραλληλία για αρχιτεκτονικές κοινής µνήµης, είναι πιο δύσκολη και αφορά όλη την έκταση του κώδικα, από την κατασκευή του πλέγµατος µέχρι την αποθήκευση των αποτελεσµάτων για µετά-επεξεργασία, πράγµα που οφείλεται στην µη άµεση πρόσβαση του κάθε επεξεργαστή στο σύνολο των δεδοµένων. Η λογική της παραλληλίας είναι τελείως διαφορετική και δεν βασίζεται στον απλό παραλληλισµό loops. ΑΠΟΤΕΛΕΣΜΑΤΑ Η προσοµοίωση του προβλήµατος έγινε µε δύο διαφορετικά πλέγµατα, ένα µε πλήθος κελιών 30240 (54x20x28 στην x, y και z κατεύθυνση αντίστοιχα) και ένα µε σχεδόν διπλάσιο πλήθος κελιών, 60350 (71x25x34). Στο Σχήµα 2 απεικονίζονται οι προβλεπόµενες συγκεντρώσεις του υδρογόνου έναντι των αντίστοιχων πειραµατικών για τους αισθητήρες του πειράµατος. Τα υπολογιστικά
αποτελέσµατα είναι σε ικανοποιητική συµφωνία µε τα πειραµατικά. Η µέγιστη συγκέντρωση παρατηρείται στον αισθητήρα 3, ο οποίος βρίσκεται κοντά στον αερισµό οροφής και η τιµή της είναι πολύ κοντά στο κατώτερο όριο αναφλεξιµότητας του υδρογόνου (4% κ.ο.). Το επίπεδο αυτό δεν θεωρείται ικανό να διατηρήσει µία ενδεχόµενη ανάφλεξη και είναι ασφαλές [4]. Στο σχήµα 3 απεικονίζεται η κατανοµή του νέφους του υδρογόνου στο χώρο για κατ όγκο συγκέντρωση 4.5%. 6.00E+00 Συγκέντρωση Υδρογόνου (v/v %) 5.00E+00 4.00E+00 3.00E+00 2.00E+00 1.00E+00 0.00E+00 0.00E+00 2.00E+02 4.00E+02 6.00E+02 8.00E+02 1.00E+03 1.20E+03 1.40E+03 Χρόνος (sec) Αισθητήτας 1 (Adrea_hf) Αισθητήτας 2 (Adrea_hf) Αισθητήτας 3 (Adrea_hf) Αισθητήτας 4 (Adrea_hf) Αισθητήτας 1 (Πείραµα) Αισθητήτας 2 (Πείραµα) Αισθητήτας 3 (Πείραµα) Αισθητήτας 4 (Πείραµα) Σχήµα 2: Κατ όγκο συγκέντρωση υδρογόνου % σε συνάρτηση µε τον χρόνο για τους τέσσερις αισθητήρες του πειράµατος. Σύγκριση υπολογιστικών µε πειραµατικών αποτελεσµάτων Σχήµα 3: Κατανοµή του νέφους υδρογόνου συγκέντρωσης 4.5 % κατ όγκο, στα 20 λεπτά από την έναρξη της έκλυσης. Για την εκτέλεση του προβλήµατος σε παράλληλο περιβάλλον κοινής µνήµης, χρησιµοποιήθηκε ο επεξεργαστής Intel Core i5 750, ο οποίος διαθέτει 4 πυρήνες χρονισµένους στα 2.66GHz. Το υπολογιστικό σύστηµα ήταν επίσης εφοδιασµένο µε 4GB µνήµης RAM. Ένας τρόπος για την µέτρηση της παράλληλης απόδοσης του αλγορίθµου είναι ο λόγος τους χρόνου εκτέλεσης του προγράµµατος σε έναν επεξεργαστή (ή πυρήνα) προς τον χρόνο εκτέλεσης σε n πυρήνες (speedup).
χρόνοςεκτέλεσηςσε 1πυρήνα speedup = (9) χρ ό νοςεκτ έ λεσηςσε n πυρ ή νες Η βέλτιστη τιµή του speedup είναι n, δηλαδή ισούται µε το πλήθος των επεξεργαστών στους οποίους τρέχει παράλληλα το πρόγραµµα. Απόκλιση της τιµής από το βέλτιστο µπορεί να προκληθεί λόγω της ύπαρξης τµηµάτων του κώδικα που δεν µπορούν ή δεν έχουν παραλληλιστεί και του κόστους της επικοινωνίας µεταξύ των επεξεργαστών. Στο σχήµα 4 απεικονίζονται τα διαγράµµατα του speedup σε συνάρτηση µε το πλήθος επεξεργαστών για τα δύο πλέγµατα, τόσο για την περίπτωση της παραλληλίας µε χρήση του OpenMP όσο και για MPI. Shared Memory - MPI Shared Memory - OpenMP 4,5 4 3,5 30240 60350 ideal 4,5 4 3,5 30240 60350 ideal Speedup 3 2,5 Speedup 3 2,5 2 2 1,5 1,5 1 1 2 3 4 1 1 2 3 4 Πλήθος επεξεργαστών Πλήθος επεξεργαστών Σχήµα 4: Επιτάχυνση του κώδικα ADREA-HF για shared memory αρχιτεκτονική (intel core i5 750) µε χρήση του OpenMP και του MPI για δύο διαφορετικά πλέγµατα του προβλήµατος διασποράς. Παρατηρούµε ότι η παραλληλία µε χρήση του MPI έδωσε καλύτερη επιτάχυνση στον κώδικα σε σχέση µε το OpenMP, η οποία µπορεί να διαφέρει ακόµα και έως 50%. Αυτή η διαφορά δεν πρέπει να µεταφραστεί σαν µία υπεροχή του MPI έναντι του OpenMP, καθώς η παραλληλία του κώδικα µε τους δύο αυτούς τρόπους είναι εντελώς διαφορετική. Στην περίπτωση του MPI χρησιµοποιήθηκε η µέθοδος του domain decomposition, ενώ η παραλληλία µε χρήση του OpenMP περιορίστηκε µόνο στην παραλληλία των πιο βασικών βρόγχων επανάληψης του κώδικα. Έτσι, ουσιαστικά µε το MPI εκτελείται παράλληλα µεγαλύτερο µέρος του κώδικα σε σχέση µε το OpenMP. Επίσης, από τα παραπάνω διαγράµµατα παρατηρείται ότι για την περίπτωση του MPI η τιµή του speedup επηρεάζεται σηµαντικά µε την αύξηση του µεγέθους του προβλήµατος για τους 3 και 4 επεξεργαστές, κάτι που δεν συµβαίνει µε το OpenMP για τα πλέγµατα που εξετάστηκαν. Για ακόµα µεγαλύτερο πλήθος κελιών πάντως αναµένεται πτώση της επιτάχυνσης ακόµα και στην περίπτωση του OpenMP. Για την εκτέλεση του κώδικα σε αρχιτεκτονική κατανεµηµένης µνήµης χρησιµοποιήθηκε το υπολογιστικό σύστηµα THALES του ινστιτούτο πυρηνικής τεχνολογίας και ακτινοπροστασίας του Ε.Κ.Ε.Φ.Ε ΗΜΟΚΡΙΤΟΣ. O THALES είναι ένα cluster 28 υπολογιστών. Κάθε υπολογιστής διαθέτει 2 επεξεργαστές AMD Opteron 2216 οι οποίοι διαθέτουν 2 πυρήνες χρονισµένους στα 2.4GHz. Έτσι, συνολικά υπάρχουν 56 επεξεργαστές µε 112 πυρήνες. Οι υπολογιστές συνδέονται µεταξύ τους µέσω Ethernet δικτύου. Λόγω του υπολογιστικού φόρτου του cluster, το πρόβληµα εξετάστηκε µόνο για πλήθος επεξεργαστών 1, 2, 3 και 4. Οι επεξεργαστές που επιλέχθηκαν βρίσκονται όλοι σε διαφορετικούς υπολογιστές
καθώς το ζητούµενο ήταν να εξεταστεί η ικανότητα του κώδικα για συστήµατα πλήρως κατανεµηµένης µνήµης. Στο σχήµα 5 απεικονίζεται η επιτάχυνση του κώδικα σε συνάρτηση µε το πλήθος το επεξεργαστών. Παρατηρείται ότι η αύξηση του πλήθους των κελιών οδηγεί σε αύξηση της επιτάχυνσης, ενώ η αύξηση του πλήθος των επεξεργαστών οδηγεί σε µεγαλύτερες αποκλίσεις από το βέλτιστο. Αυτή η συµπεριφορά µπορεί να δικαιολογηθεί αν εξετάσει κανείς το σχήµα 6. Στο σχήµα αυτό απεικονίζεται το ποσοστό του συνολικού χρόνου εκτέλεσης που αφιερώνεται στην επικοινωνία των επεξεργαστών και το ποσοστό που αφιερώνεται στους υπολογισµούς. Όσο µεγαλύτερο είναι το ποσοστό του χρόνου που αφορά την επικοινωνία, τόσο µεγαλύτερη είναι η απόκλιση της επιτάχυνσης από την βέλτιστη τιµή. Παρατηρείται ότι το ποσοστό αυτό αυξάνει µε την αύξηση των επεξεργαστών και µειώνεται µε την αύξηση του πλήθους των κελιών. Χαρακτηριστικά για τους 2 επεξεργαστές το 5.50% του χρόνου χρησιµοποιήθηκε για την εκτέλεση των εντολών του MPI για το πλέγµα µεγέθους 30240, ενώ µόλις το 2.25% για το πυκνότερο πλέγµα. Στην πρώτη περίπτωση η επιτάχυνση που πήραµε ήταν 1.68, ενώ στην δεύτερη 1.83. Distributed Memory (Thales) 4,5 4 3,5 30240 60350 ideal Speedup 3 2,5 2 1,5 1 1 2 3 4 Πλήθος επεξεργαστών Σχήµα 5: Επιτάχυνση του κώδικα ADREA-HF για το υπολογιστικό σύστηµα κατανεµηµένης µνήµης Thales, για δύο διαφορετικά πλέγµατα του προβλήµατος διασποράς. Πλήθος κελιών 30240 Πλήθος κελιών 60350 110 110 100 100 90 90 80 80 70 70 Χρόνος (%) 60 50 Χρόνος (%) 60 50 40 40 30 30 20 20 10 10 0 0 2 3 4 2 3 4 Πλήθος επεξεργαστών Πλήθος επεξεργαστών Χρόνος υπολογισµών Χρόνος επικοινωνίας Χρόνος υπολογισµών Χρόνος επικοινωνίας Σχήµα 6: Ποσοστιαίος χρόνος υπολογισµών και επικοινωνίας των επεξεργαστών στο υπολογιστικό σύστηµα κατανεµηµένης µνήµης Thales, για δύο διαφορετικά πλέγµατα του προβλήµατος διασποράς.
Στη περίπτωση του υπολογιστικού συστήµατος κοινής µνήµης παρατηρείται µείωση της επιτάχυνσης µε αύξηση του πλήθους των επεξεργαστών όπως και στη περίπτωση της κατανεµηµένης µνήµης. Μείωση της επιτάχυνσης στη κοινή µνήµη διαπιστώθηκε και µε αύξηση του µεγέθους του πλέγµατος, σε αντίθεση µε την περίπτωση της κατανεµηµένης µνήµης, όπου η αύξηση των κελιών οδήγησε σε µεγαλύτερες επιταχύνσεις. Τέλος, πρέπει να σηµειωθεί ότι υπάρχει συµφωνία των αποτελεσµάτων από την παράλληλη εκτέλεση του κώδικα µε τη σειριακή εκτέλεσή του, πράγµα που πιστοποιεί την ορθότητα του παράλληλου αλγορίθµου. ΣΥΜΠΕΡΑΣΜΑΤΑ Στην παρούσα εργασία προσοµοιώθηκε µε τον κώδικα υπολογιστικής µηχανικής ADREA-HF ένα πρόβληµα διασποράς υδρογόνου σε κλειστό χώρο µε σκοπό την διερεύνηση των επιδόσεων του κώδικα στην νέα δυνατότητα του για παράλληλους υπολογισµούς. Η παραλληλοποίηση του κώδικα έγινε τόσο µε χρήση του πακέτου OpenMP µε τον παραλληλισµό των βρόγχων επανάληψης του κώδικα για αρχιτεκτονικές κοινής µνήµης όσο και µε το πακέτο MPI µε την µέθοδο domain decomposition για τον παραλληλισµό σε αρχιτεκτονικές κατανεµηµένης µνήµης. Σε αρχιτεκτονικές κοινής µνήµης παρατηρήθηκε ότι η παραλληλία µε MPI υπερέχει αυτής µε OpenMP πράγµα που οφείλεται στον µεγαλύτερο βαθµό παραλληλίας που έχει επιτευχθεί µε το MPI. Επίσης, παρατηρήθηκε µείωση του speedup µε την αύξηση του µεγέθους του προβλήµατος για την περίπτωση του MPI, ενώ η περίπτωση του OpenMP φάνηκε να είναι ανεξάρτητη για τα πλέγµατα που εξετάστηκε. Στις αρχιτεκτονικές κατανεµηµένης µνήµης διαπιστώθηκε ότι η αύξηση του µεγέθους του προβλήµατος οδηγεί σε µεγαλύτερες επιταχύνσεις καθώς το ποσοστό του χρόνου στο οποίο πραγµατοποιείται η επικοινωνία µεταξύ των επεξεργαστών µειώνεται. Και για τις δύο αρχιτεκτονικές η απόδοση του παράλληλου κώδικα κρίνεται πολύ ικανοποιητική. Τέλος, για το πρόβληµα το οποίο εξετάστηκε παρατηρήθηκε ότι τα αποτελέσµατα του κώδικα είναι σε πολύ καλή συµφωνία µε τα πειραµατικά. Η συγκέντρωση του υδρογόνου δεν βρίσκεται σε επικίνδυνα επίπεδα, οπότε ο αερισµός του χώρου είναι επαρκής. ΒΙΒΛΙΟΓΡΑΦΙΑ [1] Bartzis, J.G., ADREA-HF: A three-dimensional finite volume code for vapour cloud dispersion in complex terrain. Report EUR 13580 EN, 1991. [2] Venetsanos, A. G., E. Papanikolaou and J. B. Bartzis, 2010: The ADREA-HF CFD code for consequence assessment of hydrogen applications. Int. J. Hydrogen Energy, 35, 3908-3918. [3] Agranat V, Cheng Z, Tchouvelev A. CFD modelling of hydrogen releases and dispersion in hydrogen energy station. 15th World hydrogen energy conference, Yokohama, Japan, 27 June 2 July (2004). [4] M.R. Swain, E.S. Grilliot and M.N. Swain, Experimental verification of a hydrogen risk assessment method, Chemical Health and Safety (1999), pp. 28 32. [5] Kovalets, I.V., S. Andronopoulos, A.G. Venetsanos and J.G. Bartzis, 2008: Optimization of the numerical algorithms of the ADREA-I mesoscale prognostic meteorological model for real-time applications. Environ. Modell. Softw., 23, 96-108. [6] Rohit Chandra et. al., Parallel Programming in OpenMP, Morgan Kaufmann Publishers, 2001 [7] Saad, Y., 2003: Iterative methods for sparse linear systems, 2 nd Edition, SIAM, Philadelphia. [8] Barret R. et. al., Templates for the solution of linear systems: Building blocks for iterative methods, SIAM, Philadelphia, PA (1994). [9] Michele Benzi, Preconditioning Techniques for Large Linear Systems: A Survey, Journal of Computational Physics 182, 418-477 (2002).
[10] Saad Y., Highly parallel preconditioners for general sparse matrices, in, Recent Advances in Iterative Methods, 165, IMA Volumes in Mathematics and Its Applications, Vol, 60, Springer- Verlag, New York, 1994. [11] Yukiya Aoyama, Jun Nakano, RS/6000 SP: Practical MPI Programming, IBM Redbooks. [12] Smith B., Bjorstad P. and Gropp W., Domain Decomposition. Parallel multilevel methods for elliptic partial differential equations, Cambridge University Press (1996). [13] Tony F. Chan and Tarek P. Mathew. Domain decomposition algorithms. Acta Numerica, 3, pp 61-143 (1994).