Κωνσταντίνος Τ. Δελησταύρου & Κωνσταντίνος Γ. Μαργαρίτης Περιβάλλον παράλληλου προγραμματισμού για την εκπαίδευση Οδηγίες εγκατάστασης συστοιχίας υπολογιστών και προγραμματιστικών εργαλείων παράλληλης επεξεργασίας βασισμένων σε λογισμικό ανοιχτού κώδικα Εργαστήριο Παράλληλης Κατανεμημένης Επεξεργασίας Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Θεσσαλονίκη 2011 έκδοση (v 0.59) για το pdplab
Περιεχόμενα Μέρος 1 Εγκατάσταση του λειτουργικού συστήματος Ubuntu Linux στους υπολογιστές.... 4 Εγκατάσταση του λειτουργικού συστήματος... 5 Μέρος 2 Εγκατάσταση μιας απλής συστοιχίας χρησιμοποιώντας την πλατφόρμα διαβίβασης μηνυμάτων MPICH2 σε υπολογιστές με λειτουργικό σύστημα Ubuntu GNU/Linux.... 23 Ορισμός ονομάτων υπολογιστών κόμβων της συστοιχίας... 24 Εγκατάσταση του NFS... 24 Επισήμανση για τις διαδρομές αρχείων (και ευρετηρίων)... 26 Δημιουργία κοινού χρήστη... 26 Εγκατάσταση εξυπηρετητή SSH... 27 Εγκατάσταση προγραμματιστικών εργαλείων... 29 Επισκόπηση ρυθμίσεων δικτύου... 29 Διευθύνσεις IP των υπολογιστών/κόμβων της συστοιχίας υπολογιστών... 29 Ρυθμίσεις DNS... 30 Στατική διεύθυνση IP σε κάθε κόμβο... 30 Ομάδες υπολογιστών (workgroup)... 31 Εγκατάσταση Java... 31 Πρώτος εναλλακτικός τρόπος εγκατάστασης της Java... 31 Δεύτερος εναλλακτικός τρόπος εγκατάστασης της Java... 34 Επισήμανση για αλλαγές σε μεταβλητές συστήματος... 36 Εγκατάσταση του MPICH2... 37 Έλεγχος καλής λειτουργίας του MPICH2... 38 Μέρος 3 Εγκατάσταση του Eclipse, της πλατφόρμας Eclipse PTP και επιπρόσθετων εφαρμογών της, για την ανάπτυξη, την εκτέλεση, την αποσφαλμάτωση και την ανάλυση απόδοσης παράλληλων προγραμμάτων.... 40 Σχόλιο για τις εκδόσεις των πακέτων... 50 Εναλλακτική offline εγκατάσταση ή/και ενημέρωση... 51 Ενημέρωση του Eclipse για χρήση κοινόχρηστων plugins... 58 Δημιουργία εικονιδίου για το Eclipse... 60 Δημιουργία έργου παράλληλου κώδικα MPI στο Eclipse... 61 Εκτέλεση παράλληλου προγράμματος MPI μέσα από το Eclipse... 72 Αποσφαλμάτωση παράλληλου κώδικα MPI μέσα από το Eclipse... 84 Δημιουργία έργου, εκτέλεση και αποσφαλμάτωση κώδικα OpenMP μέσα από το Eclipse... 85 Εγκατάσταση του επιπρόσθετου συστήματος TAU για την ανάλυση απόδοσης και την ανίχνευση παράλληλου κώδικα... 87 Εγκατάσταση του Apache Derby (JavaDB)... 87 Εγκατάσταση του Program Database Toolkit (PDT)... 88 Εγκατάσταση του PAPI (προαιρετικά)... 91 Εγκατάσταση του TAU (για ανάλυση απόδοσης (δημιουργία προφίλ) κώδικα MPI, αλλά και για ανίχνευση)... 93
Έλεγχος της εγκατάστασης του TAU... 97 Χρήση του TAU για ανάλυση απόδοσης κώδικα MPI από γραμμή εντολών (Εναλλακτικός έλεγχος καλής λειτουργίας του TAU)... 98 Ρύθμιση των PerfExplorer και ParaProf... 100 Βασική λειτουργία των PerfExplorer και ParaProf από τη γραμμή εντολών... 104 Χρήση του TAU για ανίχνευση κώδικα MPI από τη γραμμή εντολών και οπτικοποίηση με το Jumpshot... 109 Εναλλακτικό σύνολο ρυθμίσεων του TAU για το PAPI (εάν έχει εγκατασταθεί το PAPI)... 111 Εναλλακτικό σύνολο ρυθμίσεων του TAU για την ανάλυση απόδοσης παράλληλου κώδικα OpenMP... 112 Χρήση του TAU για ανάλυση απόδοσης κώδικα OpenMP από γραμμή εντολών (Έλεγχος καλής λειτουργίας του συνόλου ρυθμίσεων του TAU για κώδικα OpenMP)... 113 Χρήση του TAU για την ανίχνευση κώδικα OpenMP από γραμμή εντολών (Δεύτερος έλεγχος καλής λειτουργίας του συνόλου ρυθμίσεων του TAU για κώδικα OpenMP)... 115 Ενσωμάτωση του TAU στο περιβάλλον του Eclipse... 115 Ανάλυση απόδοσης παράλληλου κώδικα MPI χρησιμοποιώντας το TAU μέσα από το Eclipse PTP... 117 Ανίχνευση γεγονότων κατά την εκτέλεση παράλληλου κώδικα MPI χρησιμοποιώντας το TAU μέσα από το Eclipse PTP (ισχύει και για παράλληλα προγράμματα OpenMP)... 125 Ανάλυση απόδοσης παράλληλου κώδικα OpenMP χρησιμοποιώντας το TAU μέσα από το Eclipse PTP... 126 Εγκατάσταση του ISP και του GEM για το Eclipse PTP... 127 Εγκατάσταση ISP... 127 Βασική χρήση του ISP... 129 Εγκατάσταση του GEM... 135 Βασική χρήση του GEM (περιγραφεται μια υποθετική τυπική λειτουργία μέχρι o Αlan Humphrey να δώσει μια καλύτερη λύση)... 137
Μέρος 1 Εγκατάσταση του λειτουργικού συστήματος Ubuntu Linux στους υπολογιστές. Αναφορές https://help.ubuntu.com/community/installation/lowmemorysystems http://www.ubuntu.com/ http://mirror.sov.uk.goscomb.net/ubuntu-releases//10.04/ubuntu-10.04-alternate-i386.iso Έστω ότι διαθέτουμε ένα σύνολο διασυνδεμένων κοινών, μη-εξειδικευμένων υπολογιστών τους οποίους θα ορίσουμε να συνεργάζονται ως συστοιχία υπολογιστών τύπου Beowulf. Τα ονόματά τους είναι: n00 αυτού που θα παίζει το ρόλο του συντονιστή της συστοιχίας (master) και n01, n03, n04, των υπολοίπων (worker). Οι worker δεν απαιτείται να διαθέτουν γραφικό περιβάλλον εργασίας (GUI). Τα επιλεγμένα ονόματα κόμβων, ομάδας εργασίας, αλλά και οι διευθύνσεις IP μπορούν να αλλάξουν ανάλογα με τις προδιαγραφές και απαιτήσεις του εκάστοτε περιβάλλοντος. Στον υπολογιστή n00 (με τις αυξημένες δυνατότητες) θα γίνει εγκατάσταση του λειτουργικού με γραφική διεπαφή χρήστη, ενώ στους υπολογιστές n01, n02 και n03 θα εγκατασταθεί το λειτουργικό σύστημα με υποστήριξη διεπαφής γραμμής εντολών μόνο. Ως λειτουργικό σύστημα των υπολογιστών της συστοιχίας έχει επιλεγεί το Linux και η διανομή Ubuntu έκδοση Desktop 10.04 LTS. H διανομή Ubuntu της εταιρίας Canonical βασίζεται στην Debian και είναι στις μέρες μας μία από τις δημοφιλέστερες (http://www.ubuntu.com/). Έχουμε κατεβάσει την εκδοχή Alternate installer (http://mirror.sov.uk.goscomb.net/ubuntu-releases//10.04/ubuntu-10.04-alternate-i386.iso) καθώς διαθέτει περιβάλλον εγκατάστασης βασισμένο σε κείμενο και όχι σε γραφικό περιβάλλον και επιτρέπει την επιλεκτική εγκατάσταση του λειτουργικού συστήματος ώστε αυτό να διαθέτει γραφική διεπαφή χρήστη ή μόνο διεπαφή γραμμής εντολών.
Εγκατάσταση του λειτουργικού συστήματος Για εγκατάσταση του λειτουργικού θα πρέπει πρώτα να γράψουμε το αρχείο εικόνας CD- ROM (.iso) που κατεβάσαμε σε ένα άδειο CD-R/RW ώστε να γίνει η εγκατάσταση από τη συσκευή CD-ROM. Για να μπορεί να γίνει εγκατάσταση του λειτουργικού συστήματος από το CD-ROM, θα πρέπει πριν την εγκατάσταση να γίνει, κατάλληλη ρύθμιση στο BIOS των υπολογιστών ή επιλογή στο Boot Menu ώστε να ανιχνεύουν ως πρώτη συσκευή εκκίνησης του συστήματος τη συσκευή CD-ROM. Ως γλώσσα των συστημάτων της συστοιχία επιλέγεται για τις παρούσες οδηγίες η Αγγλική.
Μετά τη γλώσσα του βασικού μενού επιλέγουμε πατώντας το πλήκτρο F4, για το μεν n00 την εγκατάσταση Normal, για τα δε n01, n02, n03 την εγκατάσταση Install a command-line system, και στη συνέχεια το Install Ubuntu από το βασικό μενού.
Στη συνέχεια επιλέγουμε ως γλώσσα εργασίας στα νέα μας συστήματα την Αγγλική.
Για τη γλώσσα πληκτρολογίου επιλέγουμε other, μετά Europe, μετά Greece. Κατόπιν μπορούμε να χρησιμοποιήσουμε την αυτόματη ανίχνευση ή απαντώντας No να επιλέξουμε Greece από τη λίστα και ως Keyboard layout πάλι Greece εκτός αν
χρησιμοποιούμε άλλο τύπο πληκτρολογίου εκτός του κοινού και δημοφιλέστερου πληκτρολογίου των 105 πλήκτρων. Επιλέγουμε και το συνδυασμό πλήκτρων για την αλλαγή πληκτρολογίου από Ελληνικό σε Λατινικό.
Είναι προτιμότερο να ρυθμίσουμε χειροκίνητα το τοπικό δίκτυο της συστοιχίας χρησιμοποιώντας στατικές διευθύνσεις IP. Για το λόγο αυτό μπορούμε να έχουμε αποσυνδέσει το καλώδιο της κάρτας δικτύου ή να κλείσουμε το switch ή το router που συνδέει τους υπολογιστές του τοπικού δικτύου ή τον υπολογιστή μας με αυτό, ώστε να μην ανιχνευθούν αυτόματα οι ρυθμίσεις δικτύου πιθανώς από διαθέσιμο DHCP server, αλλά η ανίχνευση να αποτύχει και να ρυθμίσουμε τις παραμέτρους αυτές χειροκίνητα. Προσοχή! Σε αυτή την περίπτωση που τεχνητά έχουμε διακόψει τη σύνδεση του υπολογιστή στο δίκτυο, θα πρέπει μετά την αποτυχία ανίχνευσης DHCP server από το Ubuntu, να αποκαταστήσουμε τη σύνδεση του υπολογιστή στο δίκτυο πριν τις χειροκίνητες ρυθμίσεις δικτύου, ώστε να μην αποτύχουν και αυτές.
Τις ρυθμίσεις για το τοπικό δίκτυο (διεύθυνση IP, πύλη, μάσκα υποδικτύου, DNS/name server) γνωρίζει ο διαχειριστής του δικτύου υπολογιστών του εργαστηρίου.
Κατόπιν δηλώνουμε το όνομα του υπολογιστή και το όνομα του τομέα/ομάδας εργασίας.
Στη συνέχεια επιλέγουμε τη σωστή ζώνη ώρας.
Στην περίπτωση εγκατάστασης σε υπολογιστή που θα διαθέτει μόνο το Ubuntu, επιλέγουμε τη χρήση όλου του δίσκου για την εγκατάσταση του λειτουργικού συστήματος (Guided - use entire disk) και κατόπιν τον επιθυμητό δίσκο. Προσοχή! Αν εγκαθιστούμε σε υπολογιστή που διαθέτει και άλλα λειτουργικά συστήματα επιλέγουμε κατάλληλα και αν υπάρχει διαχειριστής του, συνεννοούμαστε πριν προχωρήσουμε καθώς υπάρχει κίνδυνος να διαγράψουμε τα υπόλοιπα partition του δίσκου εγκατάστασης.
Πριν προχωρήσει σε διαμόρφωση των partition του δίσκου, το Ubuntu εμφανίζει μια οθόνη όπου μας αναλύει τις προτεινόμενες κατατμήσεις. Απαντούμε No για αλλαγές ή Yes για να προχωρήσει στην εφαρμογή των προτεινόμενων αλλαγών. Στο σημείο αυτό έχουμε μια τελευταία ευκαιρία να σώσουμε τα δεδομένα πιθανών άλλων κατατμήσεων του δίσκου και
τον κόπο πολλών ωρών εργασίας του διαχειριστή του, οπότε πρέπει να είμαστε σίγουροι για το τι κάνουμε πριν προχωρήσουμε. Στη συνέχεια ορίζουμε έναν χρήστη, δίνοντας το ονοματεπώνυμό του mycluster user, το όνομα χρήστη mcuser και το συνθηματικό του usermc. Στην περίπτωση που το Ubuntu διαμαρτυρηθεί ότι πρόκειται για ασθενές συνθηματικό μπορούμε να το αλλάξουμε ή να το κρατήσουμε.
Για τους σκοπούς των παρόντων οδηγιών επιλέγουμε να μην κρυπτογραφήσουμε τον προσωπικό φάκελο αρχείων του νέου χρήστη.
Στη συνέχεια θα πρέπει να δηλώσουμε αν απαιτείται η χρήση proxy server για την πρόσβαση στον παγκόσμιο ιστό. Αν η εγκατάσταση γίνεται σε υπολογιστές κάποιου ιδρύματος ή εργαστηρίου υπάρχει πιθανότητα να υπάρχει αντίστοιχος διακομιστής. Τις σχετικές πληροφορίες γνωρίζει ο διαχειριστής του δικτύου. Στην περίπτωση εγκατάστασης σε προσωπικό δίκτυο το πιθανότερο είναι να μην χρειάζεται τέτοια ρύθμιση, οπότε αφήνουμε κενό το πεδίο και συνεχίζουμε. Αν αποτύχουν οι ρυθμίσεις του πακέτου apt που ακολουθούν και η εγκατάσταση λογισμικού, τότε πρέπει να επιστρέψουμε στις προηγούμενες οθόνες ρυθμίσεων και να τις διορθώσουμε αν έχουμε κάποιο λάθος ή να ελέγξουμε τη σωστή λειτουργία του δικτύου υπολογιστών μας.
Πριν απαντήσουμε στην ερώτηση για την εγγραφή του boot loader στο δίσκο θα πρέπει να βεβαιωθούμε σύμφωνα με τα προηγούμενα ότι ο υπολογιστής δεν διαθέτει άλλα λειτουργικά συστήματα τα οποία πιθανώς να καταστούν απροσπέλαστα με αυτή την ενέργεια. Θα πρέπει να προηγηθεί συνεννόηση με το διαχειριστή του εργαστηρίου/δικτύου υπολογιστών. Στην περίπτωση που είχαμε επιλέξει τη χρήση όλου του δίσκου για την εγκατάσταση του λειτουργικού συστήματος, δεν υπάρχει κάποιος κίνδυνος.
Στην ερώτηση για χρήση του Coordinated Universal Time απαντούμε θετικά εκτός αν ο υπολογιστής διαθέτει και άλλο λειτουργικό σύστημα, οπότε θα πρέπει να συνεννοηθούμε με το διαχειριστή για την επιλογή μας. Στο σημείο αυτό ολοκληρώνεται η εγκατάσταση του Ubuntu Linux. Αφαιρέστε το CD-R/RW από τη μονάδα CD-ROM και ακολουθήστε τις οδηγίες για επανεκκίνηση του συστήματος.
Καλό είναι μετά την επανεκκίνηση να γίνει ενημέρωση του λειτουργικού συστήματος πριν τα επόμενα βήματα. Στο γραφικό περιβάλλον το πιθανότερο είναι να εμφανιστεί ένα παράθυρο που θα σας προτρέπει να κάνετε ενημέρωση. Σε κάθε περίπτωση μπορείτε να ξεκινήσετε χειροκίνητα τη διαδικασία ενημέρωσης δίνοντας από ένα τερματικό τις εντολές sudo apt-get update sudo apt-get upgrade Μέρος 2 Εγκατάσταση μιας απλής συστοιχίας χρησιμοποιώντας την πλατφόρμα διαβίβασης μηνυμάτων MPICH2 σε υπολογιστές με λειτουργικό σύστημα Ubuntu GNU/Linux. Αναφορές https://help.ubuntu.com/community/mpichcluster https://help.ubuntu.com/8.04/serverguide/c/network-file-system.html http://www.informit.com/articles/printerfriendly.aspx?p=1226928 http://www.debian-administration.org/article/152/password-less_logins_with_openssh http://ubuntuforums.org/showthread.php?t=315093 https://help.ubuntu.com/community/addusershowto http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-1.3- installguide.pdf http://www.mcs.anl.gov/research/projects/mpich2/documentation/files/mpich2-1.3- userguide.pdf http://www.eng.hawaii.edu/tutor/vi.html
http://www.oracle.com/technetwork/java/javase/downloads/index.html http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads Έχουμε τέσσερεις υπολογιστές που τρέχουν Ubuntu 10.04. Ο n00 διαθέτει γραφικό περιβάλλον εργασίας και οι n01, n03, n04, διαθέτουν περιβάλλον γραμμής εντολών μόνο. Ορισμός ονομάτων υπολογιστών κόμβων της συστοιχίας Το πρώτο βήμα είναι να ορίσουμε τα ονόματα των όλων υπολογιστών της συστοιχίας στο αρχείο /etc/hosts του κάθε υπολογιστή της συστοιχίας. 192.168.100.241 n00.mycluster n00 192.168.100.242 n01.mycluster n01 192.168.100.243 n02.mycluster n02 192.168.100.244 n03.mycluster n03 Θα πρέπει το αρχείο /etc/hosts να μοιάζει με αυτό της εικόνας (πιθανώς με άλλες διευθύνσεις IP). Προσοχή! Οι διευθύνσεις loopback (π.χ. 127.0.0.1) θα πρέπει να παραπέμπουν στο όνομα localhost όπως στην εικόνα και όχι στο όνομα κάποιου υπολογιστή κόμβου της συστοιχίας. Εγκατάσταση του NFS Καθώς τα προγράμματα που εκτελούνται στη συστοιχία μας χρησιμοποιώντας το πρότυπο MPI θα πρέπει να είναι κοινά σε κάθε κόμβο, συνεχίζουμε με την εγκατάσταση του συστήματος NFS ώστε να έχουμε έναν κοινό φάκελο, συγχρονισμένο μεταξύ των κόμβων της
συστοιχίας. Έτσι θα τοποθετούμε τον εκτελέσιμο κώδικα στον κοινό φάκελο και αυτός θα είναι διαθέσιμος σε κάθε κόμβο. Δημιουργούμε σε κάθε κόμβο ένα φάκελο για την αποθήκευση των κοινών αρχείων. sudo mkdir /mirror Εγκαθιστούμε μόνο στον κόμβο n00 τον πυρήνα του NFS, απαντώντας Υ όταν ερωτηθούμε sudo apt-get install nfs-kernel-server Εγκαθιστούμε μόνο στους κόμβους n01, n02, n03 το σύστημα συγχρονισμού, απαντώντας Υ όταν ερωτηθούμε sudo aptitude install nfs-common Τροποποιούμε μόνο στο n00 το αρχείο /etc/exports ώστε να περιλαμβάνει την επιπλέον γραμμή /mirror *(rw, sync) Μένει η σύνδεση του φακέλου /mirror του n00 με τους φακέλους /mirror στους υπόλοιπους κόμβους. Για να γίνεται σε κάθε εκκίνηση των υπολογιστών, ενημερώνουμε το αρχείο /etc/fstab των κόμβων n01, n02, n03 προσθέτοντας την ακόλουθη γραμμή n00:/mirror /mirror nfs
Στη συνέχεια κάνουμε μια επανεκκίνηση όλων των κόμβων. Είναι προτιμότερο ο n00 να λειτουργεί όταν εκκινούν οι n01, n02, n03, ώστε να βρίσκουν οι αντίστοιχοι clients τον NFS server σε λειτουργία. Επισήμανση για τις διαδρομές αρχείων (και ευρετηρίων) Οι οδηγίες αυτές μπορούν να χρησιμοποιηθούν εξ ολοκλήρου για την εγκατάσταση από την αρχή μιας συστοιχίας υπολογιστών και των σχετικών προγραμματιστικών εργαλείων είτε τμηματικά όταν υπάρχουν ήδη διαθέσιμα λογισμικά των οποίων περιγράφεται η εγκατάσταση. Σε αυτή την περίπτωση και όσο αφορά αρχεία (και ευρετήρια) που δημιουργεί ο χρήστης ή ο διαχειριστής ενός συστήματος και όχι τυποποιημένα αρχεία (και ευρετήρια) του λειτουργικού συστήματος, τα ονόματα των αντίστοιχων διαδρομών μπορεί να διαφέρουν κάπως. Καθώς όμως στο σύνολο των οδηγιών γίνεται προσπάθεια περιγραφής πέρα από τα βήματα και της λογικής των ενεργειών, δεν είναι δύσκολο να γίνουν αντιληπτές οι αντίστοιχες θέσεις των εκάστοτε αναφερόμενων αρχείων (και ευρετηρίων). Δημιουργία κοινού χρήστη Σε κάθε κόμβο ορίζουμε ένα νέο χρήστη με κοινό όνομα το mpiuser και το ίδιο user id, με προσωπικό φάκελο τον /mirror/mpiuser και συνθηματικό το mpiuser για ευκολία (μπορούμε φυσικά να διαλέξουμε κάποιο περισσότερο ασφαλές). sudo adduser home /mirror/mpiuser mpiuser
Στο n00 ορίζουμε τον mpiuser ως ιδιοκτήτη του φακέλου /mirror/mpiuser sudo chown mpiuser /mirror/mpiuser Σε κάθε κόμβο δίνουμε στον mpiuser δικαιώματα διαχειριστή. Αυτό μπορεί να γίνει εντάσσοντάς των στην ομάδα διαχειριστών συστήματος του αρχείου /etc/sudoers. Δίνουμε sudo visudo και χρησιμοποιώντας το συντάκτη κειμένου που ενεργοποιείται, προσθέτουμε την ακόλουθη γραμμή στην ενότητα #User privilege specification (συνήθως μετά την αντίστοιχη γραμμή που αφορά το χρήστη root) mpiuser ALL=(ALL) ALL Εγκατάσταση εξυπηρετητή SSH Ακολουθεί η εγκατάσταση ενός SSH server χρησιμοποιώντας το λογισμικό OpenSSH. Αυτός απαιτείται για την ασφαλή επικοινωνία σε επίπεδο shell μεταξύ των κόμβων της συστοιχίας. Εκτελούμε σε κάθε κόμβο την εντολή sudo apt-get install openssh-server Στη συνέχεια ορίζουμε τη σύνδεση μέσω SSH χωρίς τη χρήση συνθηματικού για την επικοινωνία μεταξύ των κόμβων. Εργαζόμαστε μόνο στον κόμβο n00, αφού μέσω του NFS ενημερώνονται αυτόματα τα περιεχόμενα του φακέλου /mirror/mpiuser σε κάθε κόμβο. Στον κόμβο n00 λοιπόν, συνδεόμαστε ως mpiuser. su mpiuser Κατόπιν δίνουμε τις ακόλουθες εντολές για τη δημιουργία των κλειδιών, αφήνοντας τη φράση του συνθηματικού κενή ssh-keygen -t rsa
Συνεχίζουμε να εργαζόμαστε στον κόμβο n00 και δίνουμε τις ακόλουθες εντολές για την αντιγραφή των κλειδιών για κάθε κόμβο της συστοιχίας απαντώντας με yes σε κάθε προτροπή για συνέχεια της σύνδεσης. ssh-copy-id i ~/.ssh/id_rsa.pub mpiuser@n01 ssh-copy-id i ~/.ssh/id_rsa.pub mpiuser@n02 ssh-copy-id i ~/.ssh/id_rsa.pub mpiuser@n03 Μπορείτε να δοκιμάσετε τη λειτουργία του SSH δίνοντας εντολές σύνδεσης με άλλους υπολογιστές κόμβους της συστοιχίας. Η σύνδεση θα πρέπει να γίνεται δίχως να χρειάζεται να δώσετε συνθηματικό. ssh n01 hostname ssh n02 date ssh n03 pwd
Εγκατάσταση προγραμματιστικών εργαλείων Η συστοιχία εγκαθίσταται για να αποτελέσει τη βάση έρευνας, πειραματισμού και ανάπτυξης ενός διδακτικού και εκπαιδευτικού περιβάλλοντος παράλληλου προγραμματισμού, το οποίο θα χρησιμοποιεί εργαλεία παραγωγικού προσανατολισμού ανοιχτού κώδικα. Ακολουθεί λοιπόν η εγκατάσταση εργαλείων όπως μεταγλωττιστές, μηχανές λειτουργίας και περιβάλλοντα γλωσσών, γραφικά περιβάλλοντα προγραμματισμού, αποσφαλμάτωσης και ελέγχου απόδοσης, τα οποία θα χρησιμοποιούνται κατά τη λειτουργία της συστοιχίας. Καθώς το σύνολο των εργαλείων παραλληλισμού θα βασιστούν στο λογαριασμό χρήστη mpiuser, αποσυνδεόμαστε από mcuser με exit (διαδοχικά αν χρειαστεί μέχρι να εμφανιστεί η προτροπή login) και συνδεόμαστε ως mpiuser. Στο εξής θα εργαζόμαστε ως mpiuser. Ξεκινούμε με την εγκατάσταση των βασικών εργαλείων μεταγλώττισης. Η εγκατάστασή τους θα πρέπει να γίνει σε κάθε κόμβο της συστοιχίας. sudo apt-get install build-essential Ελέγχουμε την εγκατάσταση και την ύπαρξη των κατάλληλων εργαλείων δίνοντας gcc -v gdb -v make -v python -V Είναι πιθανό στους κόμβους n01, n02, n03 να μην έχει εγκατασταθεί το εργαλείο αποσφαλμάτωσης gdb. Σε αυτή την περίπτωση το εγκαθιστούμε δίνοντας sudo apt-get install gdb Επισκόπηση ρυθμίσεων δικτύου Για την αποφυγή προβλημάτων στα επόμενα βήματα των οδηγιών γίνεται μια επισκόπηση των ρυθμίσεων δικτύου για την καλή λειτουργία του δικτύου μεταξύ των υπολογιστών της συστοιχίας. Διευθύνσεις IP των υπολογιστών/κόμβων της συστοιχίας υπολογιστών Αρχείο: /etc/hosts Θα πρέπει σε κάθε κόμβο της συστοιχίας να οριστεί η διεύθυνση IP του, καθώς και κάθε άλλου κόμβου της. Προσοχή: Δεν θα πρέπει σε κανέναν κόμβο να δηλωθεί το όνομα κάποιου ότι έχει διεύθυνση 127.0.0.1! 127.0.0.1 localhost 192.168.100.241 n00.mycluster n00 192.168.100.242 n01.mycluster n01
192.168.100.243 n02.mycluster n02 192.168.100.244 n03.mycluster n03 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters Ρυθμίσεις DNS Αρχείο: /etc/resolv.conf Θα πρέπει σε κάθε κόμβο της συστοιχίας να οριστεί το όνομα της ομάδας υπολογιστών (workgroup) και ως πρώτος εξυπηρετητής DNS η πύλη (συνήθως ο δρομολογητής) του τοπικού δικτύου προς το διαδίκτυο. Οι υπόλοιποι DNS εξυπηρετητές είναι καλό να οριστούν, αν και δεν είναι απαραίτητοι και οι διευθύνσεις του εξαρτώνται από τον εκάστοτε πάροχο διαδικτυακής πρόσβασης (π.χ. GUNet). search mycluster nameserver 192.168.100.249 nameserver 193.92.110.1 nameserver 194.219.227.2 nameserver 193.92.150.3 nameserver 193.92.30.19 Στατική διεύθυνση IP σε κάθε κόμβο Αρχείο: /etc/network/interfaces Αφορά κάθε υπολογιστή/κόμβο της συστοιχίας. # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.100.241 netmask 255.255.255.240 network 192.168.100.240 broadcast 192.168.100.255 gateway 192.168.100.249 # dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 192.168.100.249 dns-search mycluster Ομάδες υπολογιστών (workgroup) Αρχείο: /etc/networks Αφορά κάθε υπολογιστή/κόμβο της συστοιχίας. default 0.0.0.0 loopback 127.0.0.0 link-local 169.254.0.0 mycluster 192.168.100.240 Εγκατάσταση Java Τα περισσότερα εργαλεία λογισμικού που θα εγκατασταθούν στα επόμενα βήματα απαιτούν την ύπαρξη του περιβάλλοντος Java της Oracle (πρώην Sun). Για το λόγο αυτό παραθέτουμε δύο εναλλακτικούς τρόπους εγκατάστασης του περιβάλλοντος ανάπτυξης και εκτέλεσης εφαρμογών Java της Oracle. Πρώτος εναλλακτικός τρόπος εγκατάστασης της Java Για να γίνει εγκατάσταση της Oracle (πρώην Sun) Java άμεσα από το διαδίκτυο μέσω του αυτοματοποιημένου συστήματος που διαθέτει το Ubuntu ως βασισμένο στο Debian Linux ακολουθούμε την εξής διαδικασία. Αρχικά προσθέτουμε στο σύστημα n00 το σχετικό αποθετήριο λογισμικού. Μετά ενημερώνουμε το αποθετήριο λογισμικού του συστήματος. sudo add-apt-repository "deb http://archive.canonical.com/ubuntu $(lsb_release -s -c) partner" sudo apt-get update Κατόπιν εγκαθιστούμε το JDK και το JRE της Sun sudo apt-get install sun-java6-jre sun-java6-jdk Στην ερώτηση αποδοχής των δικαιωμάτων χρήσης απαντούμε θετικα επιλέγοντας με το πλήκτρο TAB και το Enter αρχικά το Ok και κατόπιν το Yes.
Τέλος δίνουμε την ακόλουθη εντολή για να ελέγξουμε την έκδοση Java. java -version
Με την ευκαιρία εγκαθιστούμε και το σχετικό επιπρόσθετο (plug-in) ώστε να μπορούν να εκτελεστούν εφαρμογές Java και μέσω του περιβάλλοντος λογισμικού πλοήγησης στον παγκόσμιο ιστό. sudo apt-get install sun-java6-plugin Στη συνέχεια μεταβαίνουμε στη διεύθυνση http://www.java.com/en/download/installed.jsp για να επικυρώσουμε την εγκατάσταση του επιπρόσθετου, πατώντας το Verify Java version.
Στην περίπτωση που έχουμε εγκατεστημένες περισσότερες από μία εκδόσεις Java, όπως συμβαίνει στην περίπτωσή μας μπορούμε να τις δούμε με την εντολή update-java-alternatives -l και μπορούμε να επιλέξουμε την έκδοση της Sun ως βασική με την ακόλουθη εντολή. sudo update-java-alternatives -s java-6-sun Δεύτερος εναλλακτικός τρόπος εγκατάστασης της Java Στη συνέχεια ανοίγουμε το Firefox (ή άλλο λογισμικό πλοήγησης στον παγκόσμιο ιστό) και μεταβαίνουμε στη διεύθυνση http://www.oracle.com/technetwork/java/javase/downloads/index.html και επιλέγουμε να κατεβάσουμε το JDK ή το JRE ακολουθώντας τις οδηγίες της ιστοσελίδας. Μας ενδιαφέρουν εκδόδεις για Linux και πακέτα/εκτελέσιμα που προορίζονται για τη διανομή Ubuntu ή τη Debian (δηλαδή είτε deb, είτε γενικής χρήσης, αν δεν διευκρινίζεται διαφορετικά - πάντως όχι πακέτα rpm για τη διανομή Red Hat). Εσκεμμένα δεν δίνονται σε αυτό το σημείο οδηγίες βήμα-προς-βήμα, αφού οι ιστοσελίδες συχνά αλλάζουν και αυτό θα οδηγούσε σε σύγχυση. Τον καιρό συγγραφής του παρόντος οδηγού επιλέχτηκε η πλατφόρμα Linux και το πακέτο jdk-6u22-linux-i586.bin (jre-6u22-linux-i586.bin για το JRE αντίστοιχα).
Μετά το κατέβασμα το εκτελέσιμο αποθηκεύεται στο φάκελο Downloads μέσα στον προσωπικό φάκελο του mpiuser. Αφού μεταβούμε εκεί, εκτελούμε την εγκατάσταση του JDK cd ~/Downloads/ sh jdk-6u22-linux-i586.bin Στη συνέχεια αντιγράφουμε το φάκελο jdk1.6.0_22 που δημιουργείται, στη θέση /opt, δίνοντας sudo cp -R jdk1.6.0_22/ /opt και ενημερώνουμε στο αρχείο.bashrc τη μεταβλητή PATH για τη θέση των εκτελέσιμων αρχείων της Java στο σύστημά μας, που είναι η /opt/jdk1.6.0_22/bin. vi.bashrc Προσοχή! Για να έχει προτεραιότητα το περιβάλλον Java της Oracle που μόλις εγκαταστήσαμε, έναντι κάποιου ήδη εγκατεστημένου μαζί με το λειτουργικό σύστημα, όπως το OpenJDK στην περίπτωσή μας, θα πρέπει να γραφεί η διαδρομή του Oracle JDK πριν τη διαδρομή /usr/bin στην PATH.
Εφαρμόζομε τις αλλαγές δίνοντας..bashrc Η Java θα είναι πλέον διαθέσιμη, οπότε μπορούμε να δώσουμε την ακόλουθη εντολή για να ελέγξουμε την έκδοση της java -version Στην επόμενη εικόνα φαίνεται η προτεραιότητα της μηχανής Java της Oracle που μόλις εγκαταστήσαμε, έναντι της εγκατεστημένης με το λειτουργικό σύστημα μηχανής OpenJDK. Η Java απαιτείται για την εκτέλεση του γραφικού περιβάλλοντος προγραμματισμού Eclipse και ορισμένων από τις επιπρόσθετες εφαρμογές του, οι οποίες θα εκτελούνται μόνο από το n00, οπότε δεν απαιτείται η εγκατάστασή της Java στους υπολογιστές n01, n02, n03, εκτός αν και οι worker διαθέτουν γραφικό περιβάλλον εργασίας και θέλουμε να εκτελούνται το Eclipse και τα επιπρόσθετα εργαλεία του και σε αυτούς τοπικά. Επισήμανση για αλλαγές σε μεταβλητές συστήματος Αναφορά http://ubuntuforums.org/archive/index.php/t-969.html Αλλαγές στη μεταβλητή PATH ή ο ορισμός νέων μεταβλητών αφορούν το χρήστη mpiuser, και θα μπορούσαν να γίνονται στο αρχείο /etc/environment όπου επηρεάζουν όλο το σύστημα. Προτιμάται όμως οι αλλαγές να γίνονται στο αρχείο.bashrc του προσωπικού ευρετηρίου εργασίας του χρήστη mpiuser, όπου αφορούν μόνο το περιβάλλον εργασίας του συγκεκριμένου χρήστη.
Ιδιαίτερη προσοχή πρέπει θα δοθεί στην εφαρμογή αλλαγών σε συστήματα που εξυπηρετούν και άλλους χρήστες ή και άλλους σκοπούς πέραν της συστοιχίας των οδηγιών αυτών. Τότε οι αλλαγές θα πρέπει να γίνονται σε συνεννόηση με το διαχειριστή του συστήματος. Τυχόν αλλαγές στην τιμή της μεταβλητής PATH ή ενεργοποίηση νέων μεταβλητών που προστέθηκαν στο αρχείο.bashrc μπορούν να εφαρμοστούν άμεσα σε περιβάλλοντα εργασίας όπου δεν επιτρέπονται συχνές επανεκκινήσεις, δίνοντας την εντολή..bashrc Εγκατάσταση του MPICH2 Ακολουθεί η εγκατάσταση του πλαισίου παράλληλου προγραμματισμού MPICH2. Επιλέγουμε να το εγκαταστήσουμε από τον πηγαίο του κώδικα. Επισκεπτόμαστε τον ιστότοπο http://www.mcs.anl.gov/research/projects/mpich2/downloads/index.php?s=downloads απ όπου επιλέγουμε το σύνδεσμο MPICH2 Source (UNIX and Windows) για να κατεβάσουμε την τελευταία έκδοση του MPICH2. Αν η τελευταία έκδοση είναι έστω η mpich2-1.3.1.tar.gr, μπορούμε να την κατεβάσουμε και από τη γραμμή εντολών δίνοντας
wget http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs \ /1.3.2p1/mpich2-1.3.1.tar.gz Μεταβαίνουμε στον φάκελο (έστω Downloads) όπου βρίσκεται το αρχείο mpich2-1.3.1.tar.gz και το αποσυμπιέζουμε cd ~/Downloads/ tar xfz mpich2-1.3.1.tar.gz Αυτό δημιουργεί το φάκελο mpich2-1.3.1 τον οποίο μετακινούμε στη θέση /mirror/mpiuser και μετονομάζουμε σε mpich2-1.3.1-source mv mpich2-1.3.1 /mirror/mpiuser cd /mirror/mpiuser mv mpich2-1.3.1 mpich2-1.3.1-source Θα εγκαταστήσουμε το MPICH2 στο φάκελο /mirror/mpiuser/mpich2-install οπότε τον δημιουργούμε και αφού μεταβούμε στον φάκελο με τον πηγαίο κώδικα, εκτελούμε τη ρύθμιση του MPICH2, δημιουργούμε την εγκατάσταση και εγκαθιστούμε το λογισμικό. mkdir mpich2-install cd mpich2-1.3.1-source./configure -prefix=/mirror/mpich2-1.3.2p1-install/ --with-pm=mpd make make install Μετά την εγκατάσταση ενημερώνουμε τη μεταβλητή PATH στο αρχείο.bashrc προσθέτοντας τη διαδρομή των προγραμμάτων του MPICH2. Εφαρμόζουμε τις αλλαγές με..bashrc Έπειτα δημιουργούμε στον προσωπικό φάκελο του χρήστη mpiuser το αρχείο με όνομα.mpd.conf για την αποθήκευση του συνθηματικού που απαιτεί για την λειτουργία του το MPICH2. Δημιουργούμε επίσης στο προσωπικό φάκελο του χρήστη mpiuser και το αρχείο mpd.hosts όπου καταγράφουμε (ένα σε κάθε γραμμή) τα ονόματα των υπολογιστών κόμβων της συστοιχίας. Μπορούμε να χρησιμοποιήσουμε και πλήρη ονόματα που να περιλαμβάνουν και το όνομα του τομέα δικτύου ή της ομάδας εργασίας. Με αυτές τις ενέργειες ολοκληρώνεται η εγκατάσταση του MPICH2 στον κοινόχρηστο μέσω του NFS φάκελο των κόμβων της συστοιχίας. Για να λειτουργούν όμως σωστά τα εργαλεία του σε κάθε κόμβο, αρκεί να προστεθεί η διαδρομή των προγραμμάτων του MPICH2 στη μεταβλητή PATH των κόμβων n01, n02, n03, όπως έγινε στον n00. Έλεγχος καλής λειτουργίας του MPICH2 Μπορούμε να ελέγξουμε την εγκατάσταση με ορισμένες εντολές όπως οι επόμενες που δίνουν τη διαδρομή που βρίσκονται τα αντίστοιχα εργαλεία του MPICH2.
which mpd which mpicc which mpiexec which mpirun Ο διαχειριστής διεργασιών που επιλέξαμε να εγκαταστήσουμε με το MPICH2 είναι ο MPD. Για να ξεκινήσει πρέπει να δώσουμε την ακόλουθη εντολή στην οποία περιγράφεται το πλήθος των κόμβων που θέλουμε να χρησιμοποιήσουμε από τη συστοιχία μας, για την εκτέλεση παράλληλων προγραμμάτων και το αρχείο που είναι αποθηκευμένα τα ονόματα των κόμβων. mpdboot -n 4 -f mpd.hosts Ελέγχουμε την ένταξη και λειτουργία του διαχειριστή εργασιών στους κόμβους της συστοιχίας και το χρόνο κυκλικής μετάδοσης ενός μηνύματος δίνοντας mpdtrace mpdringtest Έχουμε πλέον στη διάθεσή μας μια συστοιχία τεσσάρων υπολογιστών που μπορεί να χρησιμοποιηθεί για την ανάπτυξη παράλληλων προγραμμάτων χρησιμοποιώντας το πρότυπο MPI.
Μέρος 3 Εγκατάσταση του Eclipse, της πλατφόρμας Eclipse PTP και επιπρόσθετων εφαρμογών της, για την ανάπτυξη, την εκτέλεση, την αποσφαλμάτωση και την ανάλυση απόδοσης παράλληλων προγραμμάτων. Αναφορές http://help.eclipse.org/helios/index.jsp?nav=/42 http://wiki.eclipse.org/ptp/release_notes/4.0 http://help.eclipse.org/helios/topic/org.eclipse.ptp.help/html/06pardebugging.html http://www.eclipse.org/downloads/ http://download.eclipse.org/releases/helios http://download.eclipse.org/tools/cdt/releases/helios/ http://wiki.eclipse.org/ptp/builds/4.0.5 http://help.eclipse.org/helios/topic/org.eclipse.ptp.help/html/06pardebugging.html. Το Eclipse PTP είναι μια πλατφόρμα εργαλείων παραλληλισμού που βασίζεται στην πλατφόρμα εμπλουτισμένων μέσων Eclipse του ομώνυμου ιδρύματος. Το Eclipse PTP προσφέρει δυνατότητες ανάπτυξης, εκτέλεσης και αποσφαλμάτωσης παράλληλων προγραμμάτων. Επιπλέον υποστηρίζει την ενσωμάτωση και άλλων εργαλείων στο περιβάλλον του, με τη μορφή επιπρόσθετων εφαρμογών. Στις παρούσες οδηγίες θα εγκαταστήσουμε αρχικά το Eclipse, μετά την πλατφόρμα Eclipse PTP και τέλος μια σειρά από επιπρόσθετα για την ανάλυση του κώδικα και της απόδοσης παράλληλων προγραμμάτων. Το πρώτο βήμα μας είναι να μεταβούμε στον ιστότοπο του Eclipse απ όπου θα κατεβάσουμε την έκδοση Classic (http://www.eclipse.org/downloads/) για λειτουργικό σύστημα Linux 32bit.
Μπορούμε εναλλακτικά να χρησιμοποιήσουμε την εντολή wget για να κατεβάσουμε από τη γραμμή εντολών το επιθυμητό πακέτο στο τρέχον ευρετήριο εργασίας. Το πακέτο αποθηκεύεται ως /mirror/mpiuser/downloads/eclipse-sdk-3.6.1-linux-gtk.tar.gz. Το αποσυμπιέζουμε (με δεξί κλικ, Extract Here) και το αντιγράφουμε στο φάκελο /opt/eclipse. sudo mv eclipse /opt
Μεταβαίνουμε στο φάκελο /opt/eclipse και εκτελούμε το Eclipse cd /opt/eclipse./eclipse & Κατά την εκκίνηση το Eclipse μας ζητά να ορίσουμε το φάκελο του Workspace. Αν δεν θέλουμε να ερωτηθούμε στο μέλλον ενεργοποιούμε το Use this as the default and do not ask again, κάτι το οποίο δεν προτείνεται τουλάχιστον για αρχάριους χρήστες ή όταν θέλουμε να δοκιμάζουμε διαφορετικές ρυθμίσεις. Αφήνουμε για την ώρα την προεπιλεγμένη διαδρομή και συνεχίζουμε πατώντας το πλήκτρο ΟΚ. Μόλις φορτωθεί το περιβάλλον εργασίας του Eclipse, επιλέγουμε από τη γραμμή μενού, το Help, Install New Software
Στο παράθυρο διαλόγου που εμφανίζεται επιλέγουμε για το πεδίο Work with την τιμή Helios_-_http://download.eclipse.org/releases/helios από την αναδιπλούμενη λίστα ώστε να προσπελάσουμε το αποθετήριο της έκδοσης Helios η οποία τον καιρό συγγραφής των οδηγιών είναι η τελευταία. Μετά από λίγο και εφόσον υπάρχει τη δεδομένη στιγμή σύνδεση στο διαδίκτυο, αναπτύσσεται στην περιοχή πάνω από τα πλήκτρα Select All και Deselect All η λίστα των διαθέσιμων πακέτων επιπρόσθετων εφαρμογών που περιλαμβάνονται στην έκδοση Helios του περιβάλλοντος Eclipse.
Μας ενδιαφέρει να εγκαταστήσουμε σε πρώτη φάση το πακέτο Eclipse PTP και το Eclipse CDT που είναι προαπαιτούμενο για το Eclipse PTP ώστε να μπορούμε να δημιουργούμε project παράλληλου κώδικα και να τα εκτελούμε στην τοπική μας συστοιχία υπολογιστών. Επιλέγουμε από τα Programming Languages το C/C++ Development Tools και από τα General Purpose Tools το Parallel Tools Platform (PTP) End-User Runtime. Μπορούμε αν θέλουμε να δώσουμε κάποια λέξη κλειδί στο πλαίσιο κειμένου που βρίσκεται πάνω από τη λίστα πακέτων ώστε να εφαρμοστεί φίλτρο και να βλέπουμε στην περιοχή της λίστας μόνο τα πακέτα που ταιριάζουν. Στη στήλη Version μπορούμε να δούμε την έκδοση κάθε πακέτου. Είναι σημαντικό να είμαστε γνώστες της έκδοσης κάθε λογισμικού που εγκαθιστούμε στο Eclipse.
Το Eclipse διαθέτει και ένα σύνολο επιπρόσθετων που βασίζονται στο PTP. Κάποια από αυτά θα τα εγκαταστήσουμε αργότερα. Συνεχίζουμε πατώντας το Next και εμφανίζεται η καρτέλα ανασκόπησης των προς εγκατάσταση λογισμικών.
Πατούμε το Next και εμφανίζεται η καρτέλα ανασκόπησης των αδειών χρήσης των προς εγκατάσταση λογισμικών. Εδώ πρέπει να επιλέξουμε ότι συμφωνούμε για να ενεργοποιηθεί το πλήκτρο Finish που θα ξεκινήσει την εγκατάσταση. Επιλέγουμε λοιπόν το I accept the terms of the license agreement και πατούμε το Finish.
Η διαδικασία ξεκινά με κατέβασμα των απαιτούμενων αρχείων από το διαδίκτυο και την εγκατάστασή τους στη συνέχεια στο τοπικό σύστημα αρχείων του n00.
Μετά από λίγο (η αναμονή εξαρτάται από την ταχύτητα μεταφόρτωσης από το διαδίκτυο) ολοκληρώνεται η εγκατάσταση και προχωρούμε σε επανεκκίνηση του Eclipse. Μετά την επανεκκίνηση του Eclipse, η αρχική οθόνη δηλώνει την εγκατάσταση του Eclipse PTP. Είμαστε πλέον σε θέση να προγραμματίσουμε παράλληλες εφαρμογές χρησιμοποιώντας το πρότυπο MPI παράλληλου προγραμματισμού με μεταβίβαση μηνυμάτων, μέσω του γραφικού περιβάλλοντος του Eclipse PTP.
Επιλέγοντας το Parallel Tools Platform ή το Parallel Language Development Tools μπορείτε να μάθετε περισσότερα από το περιεχόμενο που διατίθεται μέσω του συστήματος βοήθειας του Eclipse SDK. Σχόλιο για τις εκδόσεις των πακέτων
Στο σημείο αυτό αξίζει να γίνει μια επισήμανση σχετικά με τις εκδόσεις των εργαλείων. Τα εργαλεία που παρέχει το Eclipse είναι στη συντριπτική τους πλειοψηφία ανοιχτού κώδικα και αναπτύσσονται από προγραμματιστές που συνεισφέρουν οργανωμένα μέσω των εταιριών στις οποίες εργάζονται ή των ιδρυμάτων στα οποία είναι καθηγητές ή ερευνητές. Είναι λίγοι οι προγραμματιστές που συνεισφέρουν στο Eclipse και ειδικά στο Eclipse PTP ατομικά, στον ελεύθερο χρόνο τους. Το Eclipse PTP, αν και ισχυρό και πολλά υποσχόμενο εργαλείο, βρίσκεται ακόμα σε μια κάπως «ρευστή» κατάσταση. Αυτό έχει ως συνέπεια να προκύπτουν συχνά προβλήματα που αντιμετωπίζονται με συχνές νέες εκδόσεις και ενημερώσεις των πακέτων. Άρα είναι καλύτερο να εγκαθιστούμε τις τελευταίες ενημερώσεις. Εναλλακτική offline εγκατάσταση ή/και ενημέρωση Μπορούμε εναλλακτικά να εγκαταστήσουμε το Eclipse PTP και το προαπαιτούμενό του Eclipse CDT, αφού πρώτα τα κατεβάσουμε στον n00. Η διαδικασία αυτή λειτουργεί και σαν αναβάθμιση, εάν τα πακέτα που πρόκειται να εγκαταστήσουμε είναι ήδη εγκατεστημένα. Από τον ιστότοπο http://download.eclipse.org/tools/cdt/releases/helios/ κατεβάζουμε την τελευταία έκδοση (σήμερα η 7.0.1) του πακέτου Eclipse CDT. Από τον ιστότοπο http://wiki.eclipse.org/ptp/builds/4.0.5 κατεβάζουμε την τελευταία έκδοση (σήμερα η 4.0.5) του πακέτου Eclipse PTP.
Κατόπιν επιλέγουμε από το μενού Help το Install New Software και στο παράθυρο διαλόγου Install που ανοίγει πατούμε το Add Στο παράθυρο Add Repository που ανοίγει επιλέγουμε Archive και εντοπίζουμε το πακέτο για το CDT στο σύστημα αρχείων και πατούμε ΟΚ.
Αυτό γεμίζει το πεδίο Location με τη διαδρομή του επιλεγμένου αρχείου. Πατούμε ΟΚ. Πίσω στο παράθυρο Install επιλέγουμε όλες τις διαθέσιμες επιλογές. Κατόπιν πατούμε το Next.
Το Eclipse αντιλαμβάνεται αν έχει ήδη εγκατασταθεί το πακέτο και αν ναι (όπως στην εικόνα) μας ειδοποιεί ότι πρόκειται να εκτελέσει αναβάθμιση της υπάρχουσας εγκατάστασης του πακέτου.
Στη συνέχεια αποδεχόμαστε την άδεια χρήσης και προχωρούμε στην εγκατάσταση.
Μετά την εγκατάσταση κάνουμε επανεκκίνηση του Eclipse απαντώντας ανάλογα στο παράθυρο διαλόγου που εμφανίζεται στο πέρας της εγκατάστασης/ενημέρωσης. Επαναλαμβάνουμε τη διαδικασία ενσωματώνοντας το πακέτο του Eclipse PTP. Στην καρτέλα Available Software του παράθυρου διαλόγου Install, δεν μας ενδιαφέρουν τα εργαλεία ανάπτυξης με Fortran (Fortran Development Tools (Photran)), ούτε τα εργαλεία απομακρυσμένης ανάπτυξης (Remote Development Tools), οπότε επιλέγουμε μόνο το Parallel Tools Platform. Θα δείξουμε σε επόμενη ενότητα την εγκατάσταση εργαλείων όπως το TAU για το Eclipse PTP. Καλύτερα λοιπόν να μην επιλέξουμε προς το παρόν τα σχετικά επιπρόσθετα (PTP External Tools Framework TAU Extension, PTP External Tools Framework TAU Extension for Fortran). Επιπρόσθετα σαν το TAU αποτελούν ουσιαστικά γραφική διεπαφή εργαλείων που πρέπει να εγκατασταθούν χωριστά από το Eclipse στο σύστημά μας. Τα εργαλεία αυτά λειτουργούν ως μηχανές υποστήριξης των αντίστοιχων λειτουργιών του γραφικού περιβάλλοντος. Η μη ύπαρξή τους έχει ως αποτέλεσμα επιλογές στα μενού του Eclipse χωρίς αντίκρισμα, δηλαδή
επιλογές που δεν κάνουν κάτι ή που εμφανίζουν μηνύματα λάθους για κάποια ανύπαρκτη ή κακώς ρυθμισμένη λειτουργία. Το Eclipse εμφανίζει στην περιοχή Details του παραθύρου διαλόγου Install οδηγίες και πληροφορίες για το εκάστοτε επιλεγμένο επιπρόσθετο, οι οποίες όμως δεν είναι οι αναλυτικότερες και πληρέστερες που θα περίμενε κανείς. Υπάρχουν βέβαια περιπτώσεις που το Eclipse εγκαθιστά λειτουργίες που δεν χρειαζόμαστε, δίχως να τις επιλέξουμε. Σε γενικές γραμμές η σπατάλη χώρου στο σύστημα αρχείων δεν είναι μεγάλη, οπότε τις δεχόμαστε. Ο πλεονασμός που επιβάλει από μόνο του το σύστημα δεν είναι συχνά αντιληπτός ούτε καθιστά το περιβάλλον εργασίας αντιπαραγωγικό. Για να συνεχιστεί η εγκατάσταση/ενημέρωση του Eclipse PTP πατούμε Next. Στη συνέχεια ακολουθούμε τα βήματα του οδηγού όπως και για το Eclipse CDT. Είμαστε σχεδόν έτοιμοι να προχωρήσουμε στην πρώτη μας δοκιμή. Όπως έχουμε επισημάνει σε προηγούμενο σημείο μας ενδιαφέρει να είμαστε σε θέση να δημιουργούμε έργα παράλληλου κώδικα και να τα εκτελούμε στην τοπική μας συστοιχία υπολογιστών. Βέβαια το Eclipse PTP διαθέτει δυνατότητες διαχείρισης έργων και εκτέλεσης κώδικα σε
απομακρυσμένα παράλληλα συστήματα, διαφόρων κατασκευαστών, αλλά αυτό είναι εκτός του πεδίου ενδιαφέροντος των οδηγιών μας. Ενημέρωση του Eclipse για χρήση κοινόχρηστων plugins Για να μπορέσουμε λοιπόν να εκτελέσουμε παράλληλο κώδικα στην τοπική συστοιχία, το PTP απαιτεί την ύπαρξη του SDM, ενός διαχειριστή του λογισμικού αποσφαλμάτωσης GDB της GNU. Εγκαθιστούμε το SDM από τον πηγαίο του κώδικα ως εξής. Όντας στον κόμβο n00 και συνδεδεμένοι στο σύστημα ως mpiuser, ανοίγουμε ένα τερματικό (παράθυρο γραμμής εντολών). Δημιουργούμε στον προσωπικό μας φάκελο έναν φάκελο με όνομα eclipse-plugins. Τοποθετούμε στον προσωπικό φάκελο του χρήστη mpiuser το φάκελο με τα plugins καθώς αυτός είναι κοινόχρηστος μέσω του NFS που εγκαταστήσαμε σε προηγούμενη ενότητα. Μπορεί να μην διαθέτουν γραφικό περιβάλλον όλοι οι υπολογιστές της συστοιχίας μας, αλλά κάποια αρχεία πρέπει να είναι διαθέσιμα σε κάθε υπολογιστή της συστοιχίας για να μπορεί να γίνουν κάποιες εργασίες, όπως η εκτέλεση και η αποσφαλμάτωση παράλληλου κώδικα. Μεταβαίνουμε στο φάκελο plugins που βρίσκεται μέσα στο φάκελο της εγκατάστασης του Eclipse. mkdir ecliplse-plugins cd /opt/eclipse/plugins Εντοπίζουμε τους φακέλους org.eclipse.ptp.utils_4.0.5.201011100956 org.eclipse.ptp.proxy_4.0.5.201011100956 org.eclipse.ptp.debug.sdm_4.0.5.201011100956 και τους αντιγράφουμε στον φάκελο eclipse-plugins που μόλις δημιουργήσαμε. Καθώς οι εκδόσεις των πακέτων μπορεί να είναι διαφορετικές πρέπει να επισημάνουμε ότι το κρίσιμο είναι να εντοπίσουμε τους φακέλους το όνομα των οποίων ξεκινά από org.eclipse.ptp.utils_ org.eclipse.ptp.proxy_ org.eclipse.ptp.debug.sdm_ και να επιλέξουμε την τελευταία έκδοση καθενός, που στην περίπτωσή μας είναι η 4.0.5. ls org.eclipse.ptp.utils_* -d cp -R org.eclipse.ptp.utils_4.0.5.201011100956/ \ /mirror/mpiuser/eclipse-plugins/ ls org.eclipse.ptp.proxy_* -d cp -R org.eclipse.ptp.proxy_4.0.5.201011100956/ \ /mirror/mpiuser/eclipse-plugins/ ls org.eclipse.ptp.debug.sdm_* -d cp -R org.eclipse.ptp.debug.sdm_4.0.5.201011100956/ \
/mirror/mpiuser/eclipse-plugins/ Θα πρέπει επίσης να εντοπίσουμε το φάκελο που αφορά το λειτουργικό σύστημα που χρησιμοποιούμε και την αρχιτεκτονική του. Στην περίπτωσή μας το λειτουργικό είναι το Linux και αρχιτεκτονική η x86 των 32bit. ls -d org.eclipse.ptp.linux.x86* cp -R org.eclipse.ptp.linux.x86_4.0.5.201011100956/ \ /mirror/mpiuser/eclipse-plugins/ Στη συνέχεια μεταβαίνουμε στο φάκελο eclipse-plugins που δημιουργήσαμε μέσα στον προσωπικό φάκελο του mpiuser και εκεί στον org.eclipse.ptp.linux.x86_4.0.5.201011100956 που μόλις αντιγράψαμε και εκτελούμε την εγκατάσταση των plugins. Προσοχή, όχι στον φάκελο org.eclipse.ptp.linux.x86_4.0.5.201011100956 που βρίσκεται μέσα στο /opt/eclipse/plugins! cd /mirror/mpiuser/eclipse-plugins/ cd org.eclipse.ptp.linux.x86_4.0.5.201011100956/ sh BUILD Μετά το πέρας της εγκατάστασης θα πρέπει μέσα στο φάκελο bin να υπάρχει τουλάχιστον το εκτελέσιμο αρχείο του SDM.
Δημιουργία εικονιδίου για το Eclipse Μπορούμε να δημιουργήσουμε ένα εικονίδιο στην επιφάνεια εργασίας, για τη γρήγορη εκκίνηση του Eclipse. Κάνουμε δεξί-κλικ στην επιφάνεια εργασίας ώστε να εμφανιστεί το τοπικό μενού. Επιλέγουμε Create Launcher Στο παράθυρο που εμφανίζεται πατάμε το εικονίδιο με το ελατήριο για να επιλέξουμε το εικονίδιο του Eclipse. Μεταβαίνουμε στο φάκελο εγκατάστασης του Eclipse, στη θέση /opt/eclipse και αφού επιλέγουμε το αρχείο icon.xpm και εμφανιστεί το σύμβολο του Eclipse στην προεπισκόπηση, πατούμε το Open.
Γράφουμε το όνομα της εφαρμογής στο Name, τη διαδρομή του εκτελέσιμου αρχείου στο Command και πατούμε το ΟΚ. Το εικονίδιο του Eclipse εμφανίζεται στην επιφάνεια εργασίας του κόμβου n00. Δημιουργία έργου παράλληλου κώδικα MPI στο Eclipse Ξεκινούμε το Eclipse είτε από το εικονίδιο της επιφάνειας εργασίας είτε ανοίγοντας ένα τερματικό και δίνοντας /opt/eclipse/eclipse &
Στην αρχική οθόνη καλωσορίσματος μπορούμε να πατήσουμε τη συντόμευση Workbench για να μεταβούμε στο περιβάλλον εργασίας. Επιλέγουμε File, New, Project
Στην ομάδα C/C++ επιλέγουμε C Project και πατάμε Next.
Στην καρτέλα C Project επιλέγουμε MPI C Pi Project και αμέσως το Eclipse μας ρωτά αν θέλουμε να γίνουν ρυθμίσεις για το MPI. Απαντούμε Yes. Στο παράθυρο Preferences που ανοίγει πατάμε το New και στο διάλογο επιλογής φακέλου που ανοίγει επιλέγουμε το φάκελο include του φακέλου mpich2-install από τον προσωπικό φάκελο του χρήστη mpiuser.
Πατάμε το ΟΚ στο διάλογο επιλογής φακέλου και το ΟΚ στο παράθυρο Preferences των ρυθμίσεων του MPI.
Πίσω στην καρτέλα C Project δίνουμε ένα όνομα στο project (έστω test), επιλέγουμε τη χρήση των εργαλείων μεταγλώττισης, διασύνδεσης, αποσφαλμάτωσης Linux GCC και πατάμε το Next.
Στην καρτέλα Basic Settings δίνουμε κάποιες πληροφορίες για το project όπως το όνομα του δημιουργού. Συνεχίζουμε πατώντας το Next.
Στην καρτέλα MPI Project Settings απενεργοποιούμε το Use default information και ορίζουμε ως Library name το mpich. Συνεχίζουμε πατώντας Next.
Στην καρτέλα Select Configurations δεν κάνουμε καμία αλλαγή και στην καρτέλα Test Page πατούμε το Finish.
Μόλις πατήσουμε το Finish εμφανίζεται η προτροπή να προβάλει το Eclipse το περιβάλλον εργασίας (Perspective) C/C++. Απαντούμε θετικά.
Από το πλαίσιο (View) Project Explorer μπορούμε να πλοηγηθούμε στα αρχεία του project και στον πηγαίο κώδικα του παράλληλου προγράμματος test.c. Εκτέλεση παράλληλου προγράμματος MPI μέσα από το Eclipse Πριν την εκτέλεση παράλληλου κώδικα MPI βεβαιωνόμαστε ότι λειτουργεί o διαχειριστής εργασιών MPD του MPICH2. Αν όχι, τον ξεκινούμε, ελέγχουμε τη λειτουργία του. mpdtrace mpdboot -n 4 -f mpd.hosts mpdtrace
Αν προερχόμαστε από εγκαταστάσεις, απεγκαταστάσεις ή ενημερώσεις πακέτων, όπως στην περίπτωσή μας, καλό είναι να κάνουμε μια «καθαρή» εκκίνηση του Eclipse, ανανεώνοντας τους καταχωρητές του περιβάλλοντος. Για το λόγο αυτό αν το Eclipse εκτελείται το τερματίζουμε και ξεκινούμε τη λειτουργία του από ένα τερματικό δίνοντας την εντολή /opt/eclipse/eclipse -clean & Στο Eclipse επιλέγουμε την προβολή του περιβάλλοντος εργασίας (Perspective) Parallel Runtime. Για να το πετύχουμε επιλέγουμε στο μενού Window, Open Perspective, Other Στο παράθυρο Open Perspective που ανοίγει επιλέγουμε στη λίστα το Parallel Runtime και πατούμε το ΟΚ.
To περιβάλλον εργασίας του Eclipse γυρίζει σε Parallel Runtime.
Κάνουμε δεξί-κλικ μέσα στο πλαίσιο Resource Managers και από το τοπικό μενού επιλέγουμε Add Resource Manager Στο παράθυρο Choose Resource Manager Type επιλέγουμε τον τύπο MPICH2 και πατούμε το Next. Στην επόμενη καρτέλα πατούμε πάλι το Next αφού δουλεύουμε τοπικά, καθώς το Eclipse εκτελείται στον υπολογιστή n00 που ανήκει στη συστοιχία υπολογιστών μας.
Προσπερνούμε και την επόμενη καρτέλα με Next αφού δεν χρειάζεται κάποια αλλαγή.
Στην τελευταία καρτέλα πατούμε το Finish. Στο πλαίσιο Resource Managers εμφανίζεται πλέον ο νέος resource manager. Κάνουμε δεξίκλικ στο όνομά του και επιλέγουμε Start Resource Manager από το τοπικό μενού. Τότε εμφανίζονται στα διάφορα πλαίσια του περιβάλλοντος εργασίας πληροφορίες σχετικά με τον ενεργό διαχειριστή διεργασιών του MPICH2.
Για να μεταγλωττιστεί ο πηγαίος κώδικας του project test και να παραχθεί το εκτελέσιμο αρχείο επιλέγουμε στο μενού Project, Build All ή πατούμε Ctrl+B στο πληκτρολόγιο. Τότε εμφανίζεται το αποτέλεσμα της μεταγλώττισης και διασύνδεσης στο πλαίσιο Console, στο οποίο εμφανίζονται και τα αποτελέσματα της εκτέλεσης του παράλληλου κώδικα. Για να εκτελέσουμε τον παράλληλο κώδικα επιλέγουμε στο μενού Run το Run Configurations
Στο παράθυρο διαλόγου που ανοίγει επιλέγουμε με διπλό-κλικ το Parallel Application και τότε δημιουργείται ένα νέο σύνολο ρυθμίσεων (Configuration) για το έργο test.
Στην καρτέλα Resources ορίζουμε τον αριθμό διεργασιών σε 4, αφού η συστοιχία μας αποτελείται από τέσσερεις υπολογιστές. Στην καρτέλα Application, πατούμε το πλήκτρο Browse του Application program και εντοπίζουμε το εκτελέσιμο αρχείο της εφαρμογής test.
Στη συνέχεια μεταβαίνουμε στην καρτέλα Debugger. Καθώς η καρτέλα δεν φαίνεται στο παράθυρο διαλόγου Run Configurations θα πρέπει να πάμε δεξιά από τις ετικέτες των καρτελών, στο σημείο που εμφανίζεται το πλήκτρο >> 3 με το πλήθος των κρυμμένων καρτελών. Το πατούμε και επιλέγουμε την καρτέλα Debugger.
Την πρώτη φορά που θα βρεθούμε στην καρτέλα Debugger εμφανίζεται ένα κόκκινο σημάδι με ένα λευκό x, δίπλα στο εικονίδιο της καρτέλας. Αυτό το σημάδι εμφανίζεται σε κάθε καρτέλα στην οποία εκκρεμεί ή δεν έχει γίνει κάποια σωστή ρύθμιση. Στην προκειμένη περίπτωση δεν έχουμε ορίσει ακόμη τη σωστή διαδρομή για το εκτελέσιμο του SDM. Πατούμε το πλήκτρο Browse και επιλέγουμε το εκτελέσιμο που βρίσκεται στη θέση /mirror/mpiuser/eclipse-plugins/org.eclipse.ptp.debug.sdm_4.0.5.201011100956/sdm. Όπως τονίστηκε και παραπάνω κάποια εργαλεία θα πρέπει να βρίσκονται στον προσωπικό φάκελο του mpiuser, κοινού χρήστη της συστοιχίας, ώστε να είναι προσπελάσιμα από κάθε υπολογιστή της συστοιχίας μας.
Επιστρέφοντας στο παράθυρο Run Configurations πατούμε το Run και ο παράλληλος κώδικας εκτελείται στην τοπική μας συστοιχία.
Στο πλαίσιο Console βλέπουμε τα αποτελέσματα της επιτυχούς εκτέλεσης του παράλληλου κώδικα. Για να δούμε όλα τα αποτελέσματα πρέπει να χρησιμοποιήσουμε την οριζόντια γραμμή κύλισης, καθώς η κονσόλα του Eclipse μάλλον αγνοεί τους χαρακτήρες αλλαγής γραμμής και μια σύντομη έρευνα στον παγκόσμιο ιστό έδειξε ότι πρόκειται για σφάλμα (bug) που εκκρεμεί η διόρθωσή του από την κοινότητα προγραμματιστών του Eclipse. Αποσφαλμάτωση παράλληλου κώδικα MPI μέσα από το Eclipse Η αποσφαλμάτωση γίνεται με παρόμοιο τρόπο με την εκτέλεση. Προϋπόθεση είναι να λειτουργεί, όπως και πριν την εκτέλεση, ο διαχειριστής εργασιών mpd του MPICH2 και βέβαια ο Resource Manager του Eclipse. Αν αυτά συμβαίνουν ξεκινούμε επιλέγοντας από το μενού Run το Debug Configurations και αν δεν έχουμε να κάνουμε κάποια άλλη αλλαγή όπως τον αριθμό διεργασιών πατούμε το Debug και ξεκινά η βηματική εκτέλεση για την αποσφαλμάτωση του πηγαίου παράλληλου κώδικα.
Η αποσφαλμάτωση παράλληλου κώδικα είναι λίγο διαφορετική από αυτή του σειριακού, καθώς το σύστημα δεν παρακολουθεί μία διεργασία άλλα περισσότερες, εξαρτώμενες η μία από την άλλη. Έναν σύντομο οδηγό για την αποσφαλμάτωση παράλληλου κώδικα μέσα από το περιβάλλον του Eclipse PTP μπορούμε να βρούμε στη διεύθυνση http://help.eclipse.org/helios/topic/org.eclipse.ptp.help/html/06pardebugging.html. Δημιουργία έργου, εκτέλεση και αποσφαλμάτωση κώδικα OpenMP μέσα από το Eclipse Αναφορές http://www.openmp.org/pipermail/omp/2007/000882.html Δημιουργούμε νέο έργο λογισμικού C (File, New, Project, C/C++, C Project, OpenMP Empty C Project). Οι OpenMP Preferences δεν έχουν οριστεί. Απαντούμε θετικά στη δημιουργία τους. Πατούμε το πλήκτρο New για τα OpenMP include paths και ορίζουμε τη διαδρομή /usr/include. Πατούμε ΟΚ. Πατούμε Apply και μετά ΟΚ. Επιλέγουμε Toolchain Linux GCC. Δίνουμε όνομα Project name το piopenmp και πατούμε Next.
Στην καρτέλα OpenMP Project Settings αφήνουμε επιλεγμένο το Add OpenMP project settings to this project και πατούμε Next. Στην καρτέλα Select Configurations πατούμε Next και στην κενή Test Page πατούμε Finish. Δεχόμαστε την αλλαγή προβολής. Στην περιοχή Project Explorer του παραθύρου του Eclipse εντοπίζουμε το έργο piopenmp, κάνουμε δεξί κλικ και επιλέγουμε New, Source File. Ονομάζουμε το αρχείο πηγαίου κώδικα piopenmp.c. Το ανοίγουμε και επικολλούμε τον ακόλουθο κώδικα #include <stdio.h> #include <omp.h> #define NBIN 100000 #define MAX_THREADS 100 void main() { int nthreads,tid; double step,sum[max_threads]={0.0},pi=0.0; step = 1.0/NBIN; #pragma omp parallel private(tid) { int i; double x; } nthreads = omp_get_num_threads(); tid = omp_get_thread_num(); for (i=tid; i<nbin; i+=nthreads) { x = (i+0.5)*step; sum[tid] += 4.0/(1.0+x*x); } } for(tid=0; tid<nthreads; tid++) pi += sum[tid]*step; printf("pi = %f\n",pi); αποθηκεύουμε και επιλέγουμε από το μενού Project, Build All. Πριν την εκτέλεση του κώδικα OpenMP θα πρέπει να ορίσουμε τη μεταβλητή OMP_NUM_THREADS στο περιβάλλον εκτέλεσης του Eclipse. Επιλέγουμε στο μενού Run, Run Configurations, κάνουμε διπλό κλικ στο C/C++ Application και επιλέγουμε την καρτέλα Environment. Εκεί πατούμε New και ορίζουμε στο παράθυρο New Environment Variable, ως Name το OMP_NUM_THREADS και ως Value τον αριθμό νημάτων που επιθυμούμε, έστω 10. Πίσω στην καρτέλα Environment πατούμε Apply και Run. Η αποσφαλμάτωση γίνεται όπως σε ένα απλό πρόγραμμα C. Run, Debug Configurations, C/C++ Application. Το Eclipse δεν παρουσιάζει χωριστούς δείκτες εντολών (μετρητές προγράμματος) για κάθε νήμα, όπως κάνει στην περίπτωση αποσφαλμάτωσης παράλληλου κώδικα MPI.
Εγκατάσταση του επιπρόσθετου συστήματος TAU για την ανάλυση απόδοσης και την ανίχνευση παράλληλου κώδικα Ένα αξιόλογο σύστημα για την ανάλυση της απόδοσης παράλληλων προγραμμάτων και την ανίχνευση παράλληλου πηγαίου κώδικα είναι το τ ή αλλιώς Tuning and Analysis Utilities (TAU) του Πανεπιστημίου του Oregon. Πριν την εγκατάστασή του σαν επιπρόσθετο του Eclipse PTP πρέπει να γίνει η εγκατάσταση του αντίστοιχου λογισμικού στη συστοιχία μας. Αυτό αποτελεί τη μηχανή που υποστηρίζει τη λειτουργία του αντίστοιχου επιπρόσθετου μέσα στο γραφικό περιβάλλον του Eclipse. Το TAU συνεργάζεται και απαιτεί την ύπαρξη και άλλων λογισμικών. Τα βασικότερα είναι, το σύστημα διαχείρισης βάσεων δεδομένων Derby, η εργαλειοθήκη PDT και το σύστημα προσπέλασης μετρητών απόδοσης επεξεργαστών PAPI. Στη συνέχεια θα δείξουμε πως γίνεται η εγκατάσταση καθενός από αυτά, η εγκατάσταση του TAU και η ενσωμάτωσή του στο περιβάλλον του Eclipse. Εγκατάσταση του Apache Derby (JavaDB) Αναφορές http://www.stuartellis.eu/articles/derby-javadb Το Apache Derby είναι ένα σύστημα διαχείρισης βάσεων δεδομένων που μπορεί να χρησιμοποιήσει το TAU σε συνεργασία με το PDT για την αποθήκευση μετρήσεων. Για την εγκατάστασή του ανοίγουμε ένα τερματικό εντολών και δίνουμε sudo apt-get install sun-javadb-client sun-javadb-core Αφού εισάγουμε το συνθηματικό του χρήστη mpiuser και απαντήσουμε θετικά στην αντίστοιχη ερώτηση, ξεκινά η εγκατάσταση η οποία ολοκληρώνεται μετά από λίγο με προϋπόθεση την ενεργή σύνδεση του κόμβου n00 στο διαδίκτυο.
Για να λειτουργήσει το Derby θα πρέπει να ενημερωθεί η μεταβλητή συστήματος PATH με τη θέση των εκτελέσιμων αρχείων του και να ορίσουμε επίσης τη μεταβλητή DERBY_HOME. Για να είναι οι αλλαγές αυτές μόνιμες και σε επίπεδο συστήματος, τροποποιούμε το αρχείο.bashrc προσθέτοντας στη μεταβλητή PATH τη διαδρομή /usr/share/javadb/bin. Προσθέτουμε και τη μεταβλητή DERBY_HOME με τιμή /usr/share/javadb. Μετά την ενημέρωση εφαρμόζουμε τις αλλαγές με..bashrc Εγκατάσταση του Program Database Toolkit (PDT) Αναφορές http://www.cs.uoregon.edu/research/pdt/docs.php
Το Program Database Toolkit (PDT) είναι ένα πλαίσιο ανάλυσης πηγαίου κώδικα γραμμένου σε διάφορες γλώσσες προγραμματισμού και για την παροχή εμπλουτισμένων πληροφοριών για κάθε πρόγραμμα σε προγραμματιστές στατικών και δυναμικών εργαλείων ανάλυσης. Πρώτα πρέπει να κατεβάσουμε την τελευταία έκδοση του λογισμικού. Στο κεντρικό μενού του ιστοτόπου του λογισμικού http://www.cs.uoregon.edu/research/pdt/home.php επιλέγουμε το Downloads και αφού συμπληρώσουμε τα στοιχεία μας κατεβάζουμε το αρχείο pdtoolkit-3.16.tar.gz (http://www.cs.uoregon.edu/research/paracomp/pdtoolkit/download/pdt_latest.tar.gz) που περιλαμβάνει την τελευταία έκδοση του λογισμικού. cd Downloads/ gunzip pdt_latest.tar.gz tar -xf pdt_latest.tar mv pdtoolkit-3.16../pdtoolkit-3.16-source cd ~ mkdir pdtoolkit-3.16-install cd pdtoolkit-3.16-source
./configure -prefix=/mirror/mpiuser/pdtoolkit-3.16-install Κατόπιν δίνουμε τις ακόλουθες εντολές για να πραγματοποιηθεί η εγκατάσταση του λογισμικού και να διαγραφούν περιττά αρχεία μετά το πέρας της. make make install Στη συνέχεια, σύμφωνα με προηγούμενη υπόδειξη, προσθέτουμε τη διαδρομή /mirror/mpiuser/pdtoolkit-3.16-install/linux//bin στη μεταβλητή PATH του n00, με επεξεργασία του αρχείου.bashrc. sudo vi.bashrc Ενεργοποιούμε τις αλλαγές με..bashrc
Μετά μπορούμε να παράγουμε τα αρχεία τεκμηρίωσης της βιβλιοθήκης DUCTAPE που χρησιμοποιεί το PDT. Μεταβαίνουμε στο φάκελο pdtoolkit-3.16-source/ductape/inc/ όπου δίνουμε τις εντολές cd pdtoolkit-3.16-source/ductape/inc/./makehtmldocu Αυτό έχει ως αποτέλεσμα την ανάπτυξη αρχείων HTML της τεκμηρίωσης. Η κεντρική σελίδα απ όπου μπορούμε να τη διαβάσουμε είναι η /mirror/mpiuser/pdtoolkit-3.16- source/ductape/html/primer.html. Εγκατάσταση του PAPI (προαιρετικά) Αναφορές http://icl.cs.utk.edu/papi/ Το Performance Application Programming Interface (PAPI) είναι μια διεπαφή και μεθοδολογία χρήσης των μετρητών απόδοσης που υπάρχουν στο υλικό των πιο διαδεδομένων μικροεπεξεργαστών. Το PAPI επιτρέπει στους μηχανικούς λογισμικού να ανακαλύψουν σχεδόν σε πραγματικό χρόνο τη σχέση μεταξύ της απόδοσης του λογισμικού και των γεγονότων του επεξεργαστή.
Κατεβάζουμε την τελευταία έκδοση του λογισμικού από τον ιστότοπο του έργου http://icl.cs.utk.edu/papi/ και δίνουμε τις ακόλουθες εντολές για να αποσυμπιέσουμε τα αρχεία εγκατάστασης, από το φάκελο Downloads, σε κατάλληλο φάκελο μέσα στο προσωπικό ευρετήριο του χρήστη mpiuser. cd Downloads gunzip papi-4.1.1.tar.gz tar -xf papi-4.1.1.tar mv papi-4.1.1../papi-4.1.1-source cd mkdir papi-4.1.1-install cd papi-4.1.1-source cd src./configure --prefix=/mirror/mpiuser/papi-4.1.1-install make make install
Μετά την εγκατάσταση μπορούμε να μεταβούμε στο φάκελο /mirror/mpiuser/papi-4.1.1- install/bin και να δούμε κάποιες πληροφορίες για το PAPI και το σύστημά μας. cd /mirror/mpiuser/papi-4.1.1-install/bin./papi_avail./papi_cost./papi_version./papi_clockres Εγκατάσταση του TAU (για ανάλυση απόδοσης (δημιουργία προφίλ) κώδικα MPI, αλλά και για ανίχνευση) Αναφορές http://www.cs.uoregon.edu/research/tau/docs.php Για την εγκατάσταση του TAU αρχικά μεταβαίνουμε στον ιστότοπο του έργου http://www.cs.uoregon.edu/research/tau/home.php.
Εκεί επιλέγουμε το Downloads για να κατεβάσουμε την τελευταία έκδοση του TAU. Στην περίπτωσή μας ήταν η έκδοση 2.20. Το λογισμικό αποθηκεύεται με όνομα tau_latest.tar.gz στο ευρετήριο Downloads του προσωπικού ευρετηρίου του χρήστη mpiuser. Από εκεί θα το αποσυμπιέσουμε και θα
μετακινήσουμε τα περιεχόμενά του πηγαίου κώδικα σε νέο ευρετήριο για να εγκαταστήσουμε το λογισμικό. Δίνουμε λοιπόν τις ακόλουθες εντολές από ένα τερματικό εντολών. cd Downloads gunzip tau_latest.tar.gz tar -xf tau_latest.tar mv tau-2.20../tau-2.20-source cd mkdir tau-2.20-install cd tau-2.20-source Δίνουμε τις ακόλουθες εντολές για τη ρύθμιση της εγκατάστασης και την υλοποίησή της../configure -cc=gcc -mpi -pdt=/mirror/mpiuser/pdtoolkit-3.16-install \ -mpiinc=/mirror/mpiuser/mpich2-install/include \ -mpilib=/mirror/mpiuser/mpich2-install/lib \ -mpilibrary='-lmpich -lmpl' -tag=config-01 \ -PROFILE -prefix=/mirror/mpiuser/tau-2.20.2-install make install ή αν έχει εγκατασταθεί το MPICH2 στην εξ ορισμού θέση /usr/bin, δίνουμε./configure -cc=gcc -mpi -pdt=/mirror/pdtoolkit-3.16-install \ -mpiinc=/usr/include/mpich2/ \ -mpilib=/usr/lib \ -mpilibrary='-lmpich' -tag=config-01 \ -PROFILE -prefix=/mirror/tau-2.20.2-install make install Σημείωση: Στη δεύτερη περίπτωση δεν χρησιμοποιήθηκε η παράμετρος -lmpl αναφοράς στη βιβλιοθήκη MPL, διότι όταν αυτή χρησιμοποιούταν δεν μπορούσε να ολοκληρωθεί η εγκατάσταση. Χρησιμοποιήθηκε μόνο η -lmpich.
Για να έχει τη δυνατότητα το TAU να παράγει και αρχεία ανίχνευσης γεγονότων κατά την εκτέλεση παράλλου κώδικα MPI δίνουμε επιπλέον και την παράμετρο TRACE. (Σημείωση: Η προβολή αρχείων ανίχνευσης γεγονότων δεν υποστηρίζεται αυτόματα από το TAU μέσα από το γραφικό περιβάλλον του Eclipse.)./configure -cc=gcc -mpi -pdt=/mirror/mpiuser/pdtoolkit-3.16-install \ -mpiinc=/mirror/mpiuser/mpich2-install/include \ -mpilib=/mirror/mpiuser/mpich2-install/lib \ -mpilibrary='-lmpich -lmpl' -tag=config-02 \ -PROFILE -TRACE -prefix=/mirror/mpiuser/tau-2.20.2-install make install ή αν έχει εγκατασταθεί το MPICH2 στην εξ ορισμού θέση /usr/bin, δίνουμε./configure -cc=gcc -mpi -pdt=/mirror/pdtoolkit-3.16-install \ -mpiinc=/usr/include/mpich2/ \ -mpilib=/usr/lib \ -mpilibrary='-lmpich' -tag=config-02 \ -PROFILE -TRACE -prefix=/mirror/tau-2.20.2-install make install Σημείωση: Στη δεύτερη περίπτωση δεν χρησιμοποιήθηκε η παράμετρος -lmpl αναφοράς στη βιβλιοθήκη MPL, διότι όταν αυτή χρησιμοποιούταν δεν μπορούσε να ολοκληρωθεί η εγκατάσταση. Χρησιμοποιήθηκε μόνο η -lmpich. Κατόπιν και σύμφωνα με την υπόδειξη της configure ενημερώνουμε το αρχείο.bashrc ώστε να προσθέσουμε τη διαδρομή /mirror/mpiuser/tau-2.20.2-install/i386_linux/bin στη μεταβλητή συστήματος PATH. Επιπλέον δημιουργούμε τη μεταβλητή TAU_MAKEFILE με τιμή /mirror/mpiuser/tau-2.20.2-install/i386_linux/lib/makefile.tau-config-01-prof-pdtmpi-pdt. sudo vi.bashrc Ενημερώνουμε το περιβάλλον του χρήστη mpiuser δίνοντας..bashrc
Ή μπορούμε να ενεργοποιήσουμε συγκεκριμένο αρχείο ρυθμίσεων πριν τη χρήση του, χωρίς αλλαες στο.bashrc, δίνοντας απευθείας από τη γραμμή εντολών export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/makefile.tau-config-01-mpi-pdt ή export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/akefile.tau-config-02-mpi-pdt-profile-trace Έλεγχος της εγκατάστασης του TAU Το TAU δίνει τη δυνατότητα να δημιουργούμε πολλαπλά σύνολα ρυθμίσεων (configuration) για διαφορετικά συνεργαζόμενα εργαλεία (PDT, PAPI, κ.α.), για ανάλυση απόδοσης (profiling) ή ανίχνευση γεγονότων (tracing), κ.ο.κ. Κάθε σύνολο ρυθμίσεων διαθέτει δικό της αρχείο οδηγιών μεταγλώττισης και δημιουργίας εκτελέσιμου κώδικα (makefile). Μπορούμε να ελέγξουμε τη λειτουργία του TAU για κάθε συνδυασμό δυνατοτήτων των υπαρχόντων αρχείων Makefile, χρησιμοποιώντας το tau_validate. Στην περίπτωσή μας έχουμε ένα Makefile, αλλά αυτό δεν αποτελεί πρόβλημα. Σημείωση: Η μεταβλητή TAU_MAKEFILE δείχνει στο αρχείο Makefile που χρησιμοποιούμε κάθε φορά. Στην προηγούμενη ενότητα ορίστηκε η μεταβλητή TAU_MAKEFILE να έχει συγκεκριμένη τιμή, να δείχνει δηλαδή σε ένα συγκεκριμένο Makefile για λόγους απλούστευσης των τρεχουσών οδηγιών. Στην πραγματικότητα η τιμή της ορίζεται πριν από κάθε μεταγλώττιση με χρήση των εργαλείων του TAU, δείχνοντας στο κατάλληλο Makefile για το εκάστοτε σύνολο ρυθμίσεων. cd /mirror/mpiuser/tau-2.20-source/./tau_validate../tau-2.20-install/i386_linux/
Αν και στο τέλος αναφέρονται 5 σφάλματα παρατηρούμε ότι πέρασαν επιτυχώς τον έλεγχο οι περιπτώσεις που μας ενδιαφέρουν: MPI (C), PDT-MPI (C), PDT-MPI (C++). Χρήση του TAU για ανάλυση απόδοσης κώδικα MPI από γραμμή εντολών (Εναλλακτικός έλεγχος καλής λειτουργίας του TAU) Ένας άλλος τρόπος για να είμαστε σίγουροι ότι το TAU εγκαταστάθηκε και λειτουργεί σωστά είναι εκτελώντας μια δειγματική ανάλυση απόδοσης παράλληλου κώδικα. Ξεκινούμε λοιπόν το διαχειριστή εργασιών του MPICH2. Έπειτα μεταγλωττίζουμε ένα από τα υπάρχοντα παραδείγματα του TAU, την πρώτη φορά χρησιμοποιώντας το μεταγλωττιστή του MPICH2 και το εκτελούμε. Tη δεύτερη φορά το μεταγλωττίζουμε χρησιμοποιώντας ένα από τα εργαλεία του TAU, το οποίο προσθέτει πληροφορίες ενοργάνωσης (instrumentation) και το εκτελούμε παρατηρώντας ότι εκτελείται με τον ίδιο τρόπο, με τη διαφορά ότι στο φάκελο δημιουργούνται αρχεία που περιέχουν πληροφορίες που προκύπτουν από την ανάλυση απόδοσης (profiling) του παράλληλου κώδικα. mpdboot -n 4 -f mpd.hosts mpdtrace cd tau-2.20-source/examples/taucompiler/c mpicc ring.c -o ring1 mpirun -np 4./ring1
tau_cc.sh ring.c -o ring2 mpirun -np 4./ring2 ls
Για να μπορέσουμε να δούμε οπτικοποιημένα τα περιεχόμενα των αρχείων ανάλυσης απόδοσης του παράλληλου κώδικα, μπορούμε να χρησιμοποιήσουμε τα εργαλεία ParaProf και PerfExplorer που διαθέτει το TAU. Πριν τη χρήση τους απαιτείται μια διαδικασία ρύθμισης της κοινής βάσης δεδομένων που χρησιμοποιούν, μετά από την οποία λειτουργούν και τα δύο εργαλεία. Ρύθμιση των PerfExplorer και ParaProf
Για να λειτουργήσουν τα δύο εργαλεία οπτικοποίησης θα πρέπει να ρυθμιστεί η λειτουργία ενός συστήματος διαχείρισης βάσεων δεδομένων που θα χειρίζεται τη βάση δεδομένων των αποτελεσμάτων των πειραμάτων, όπως ονομάζονται οι διαφορετικές εκτελέσεις παράλληλου κώδικα, για την ανάλυση της απόδοσής τους. Επιλέγουμε το σύστημα διαχείρισης βάσεων δεδομένων Apache Derby το οποίο προτείνεται από τους δημιουργούς του TAU και το οποίο εγκαταστήσαμε σε προηγούμενη ενότητα. Για ρυθμίσουμε τη λειτουργία της βάσης δεδομένων δίνουμε perfdfm_configure Ονομάζουμε το σύνολο ρυθμίσεων ως config-01, δεν αλλάζουμε τις προεπιλεγμένες τιμές πατώντας απλά το Enter, δίνουμε κενό username και password και απαντούμε θετικά στην ερώτηση αποθήκευσης του password της βάσης δεδομένων.
Στη συνέχεια δίνουμε την ακόλουθη εντολή για να ρυθμίσουμε τη λειτουργία του PerfExplorer. perfexplorer_configure Δίνουμε το όνομα config-01 των προηγούμενων ρυθμίσεων στην προτροπή What is the name of your PerfDMF Configuration. Απαντούμε θετικά σε κάθε ερώτηση. Είναι απαραίτητη η σύνδεση του κόμβου n00 στο διαδίκτυο κατά τη διενέργεια των ρυθμίσεων.
Μετά τις ρυθμίσεις αυτές μπορεί να λειτουργήσει τόσο το PerfExplorer όσο και το ParaProf. Η μορφή των αρχείων ανάλυσης απόδοσης του TAU είναι η ίδια είτε αναλύεται η απόδοση κώδικα MPI, είτε κώδικα OpenMP. Καλό είναι όμως για την ομαδοποίηση των μετρήσεων που προέρχονται από ανάλυση απόδοσης κώδικα MPI χωριστά από αυτών που προέρχονται από ανάλυση κώδικα OpenMP, να δημιουργηθεί και μια δεύτερη βάση δεδομένων μετρήσεων με διαφορετικό όνομα (όπως περιγράφεται την ενότητα αυτή).
Βασική λειτουργία των PerfExplorer και ParaProf από τη γραμμή εντολών Ξεκινούμε το PerfExplorer δίνοντας perfexplorer Εμφανίζεται τότε το παράθυρο PerfExplorer Console και μετά το PerfExplorer Client. Από το μενού File επιλέγουμε Load Profile Data για να φορτώσουμε τα αρχεία ανάλυσης απόδοσης (προφίλ) που προέκυψαν από τη δοκιμή λειτουργίας του TAU.
Στο παράθυρο διαλόγου TAU: ParaProf: Load Trial επιλέγουμε στο Trial Type το Tau profiles και πατούμε το Select File(s) για να εντοπίσουμε το φάκελο των αρχείων. Επιλέγουμε σταδιακά τη διαδρομή /mirror/mpiuser/tau-2.20-source/examples/taucompiler/c που βρίσκονται τα αρχεία και πατούμε το Select.
Στο παράθυρο TAU: ParaProf: Load Trial πατούμε το Ok για να φορτωθούν τα αρχεία προφίλ στο περιβάλλον του εργαλείου. Στο παράθυρο PerfExplorer Client εμφανίζονται με ιεραρχική μορφή οι πληροφορίες για το συγκεκριμένο πείραμα. Επιλέγοντας τις συναρτήσεις μπορούμε να δούμε τις πληροφορίες που έχουν συγκεντρωθεί. Από τα μενού του παραθύρου μπορούμε να επιλέξουμε διαφορετικές προβολές και γραφήματα, όπως για παράδειγμα από το μενού Charts το Stacked Bar Chart και από το Visualization το Do 3D Correlation Cube.
Ξεκινούμε το ParaProf δίνοντας paraprof Στο κεντρικό παράθυρο TAU ParaProf Manager μπορούμε να δούμε αποτελέσματα για το σύνολο των πειραμάτων που έχουν εκτελεστεί ως εκείνη τη στιγμή, συμπεριλαμβανομένων των πειραμάτων που έχουν χρησιμοποιηθεί από το PerfExplorer, αφού τα δύο εργαλεία
διαθέτουν κοινή βάση δεδομένων. Μπορούμε επίσης να επιλέξουμε από το μενού File, Open το άνοιγμα και την ενσωμάτωση στη βάση δεδομένων και άλλων αρχείων προφίλ. Αν επιλέξουμε τη μέτρηση ενός πειράματος με διπλό κλικ τότε ανοίγει το παράθυρο TAU: ParaProf: Application x, Experiment y, Trial z στο οποίο παρουσιάζονται οι σχετικές πληροφορίες με διάφορες μορφές, ανάλογα με το ποιες επιλέγουμε από το μενού του παραθύρου. Για παράδειγμα μπορούμε από το μενού Window να επιλέξουμε το 3D Visualization.
Χρήση του TAU για ανίχνευση κώδικα MPI από τη γραμμή εντολών και οπτικοποίηση με το Jumpshot Αν έχει προηγηθεί εγκατάσταση του TAU με εναλλακτικό αρχείο ρυθμίσεων (configuration makefile) για την παραγωγή αρχείων ανίχνευσης γεγονότων με χρήση της παραμέτρου - TRACE τότε μπορεί να γίνει μετατροπή των αρχείων ανίχνευσης στην ανοιχτού κώδικα μορφή SLOG2 και τα αρχεία ανίχνευσης να οπτικοποιηθούν μέσω της ανοιχτού κώδικα εφαρμογής Jumpshot. Πρέπει να σημειωθεί ότι ακόμη και αν δεν έχει προηγηθεί μπορεί να γίνουν και στη συνέχεια πολλαπλές επανεγκαταστάσεις του TAU διαφορετικές κάθε φορά ρυθμίσεις, για την κάλυψη διαφορετικού συνόλου ρυθμίσεων κάθε φορά. Τα αρχεία ρυθμισεων κάθε διαφορετικής εγκατάστασης αποθηκεύονται στο ευρετήριο /mirror/tau-2.20.2-install/i386_linux/lib με ονόματα Makefile.tau-config-xx-<χαρακτηριστικά> όπου config-xx η ετικέτα της εγκατάστασης όπως αυτή έχει οριστεί με την παράμετρο -tag της εντολής configure κατά τη ρύθμιση πριν την εγκατάσταση και όπου <χαρακτηριστικά> ένα όνομα που δημιουργεί αυτόματα το TAU για να περιγράψει κατά το δυνατό μονοσήμαντα το σύνολο ρυθμίσεων που έχουν επιλεγεί. Η διαδικασία εγκατάστασης περιγράφεται αναλυτικά σε προηγούμενη ενότητα. Πριν την εκτέλεση των tau_cc.sh και mpirun όπως έχει περιγραφεί παραπάνω για την παραγωγή αρχείων προφίλ και αρχείων ανίχνευσης, θα πρέπει να έχει προηγηθεί η αλλαγή της τιμής της μεταβλητής TAU_MAKEFILE στο αρχείο.bashrc ώστε αυτή να δείχνει στο εναλλακτικό σύνολο ρυθμίσεων για την ανίχνευση κώδικα, ως εξής
TAU_MAKEFILE=/mirror/tau-2.20.2-install/i386_linux/lib/Makefile.tauconfig-02-mpi-pdt-profile-trace export TAU_MAKEFILE Κατόπιν θα πρέπει να ενεργοποιηθούν οι αλλαγες στο.bashrc δίνοντας..bashrc Εναλλακτικά, αν δεν επιθυμούμε να κάνουμε αλλαγές στο αρχείο.bashrc δίνουμε απευθείας από τη γραμμή εντολών export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/akefile.tau-config-02-mpi-pdt-profile-trace Σημείωση: Η προβολή αρχείων ανίχνευσης γεγονότων δεν υποστηρίζεται αυτόματα από το TAU μέσα από το γραφικό περιβάλλον του Eclipse. Από τη γραμμή εντολών μεταβαίνουμε στο ευτερτήριο που υπάρχει ο πηγαίος κώδικας του οποίου την εκτέλεση θέλουμε να ανιχνεύσουμε και από εκεί μεταγλωττίζουμε και εκτελούμε χρησιμοποιώντας τα παρεχόμενα από το TAU σενάρια. Εκκινούμε το mpd αν δεν εκτελείται ήδη. mpdboot -n 4 -f mpd.hosts mpdtrace cd tau-2.20-source/examples/taucompiler/c tau_cc.sh ring.c -o ring2 mpirun -np 4./ring2 Βλέποντας τα περιεχόμενα του ευρετηρίου μετά την εκτέλεση παρατηρούμε ότι έχουν δημιουργηθεί από το TAU διαφορετικά αρχεία προφίλ (.edf) και ανίχνευσης (.trc) για κάθε διεργασία. Συγχωνεύουμε τα αρχεία σε δύο. Ένα αρχείο προφίλ και ένα αρχείο ανίχνευσης για όλες τις διεργασίες. tau_treemerge.pl Κατόπιν μετατρέπουμε τα δύο αρχεία σε ένα, μορφής SLOG2 tau2slog2 tau.trc tau.edf -o tau.slog2 Το αρχείο tau.slog2 μπορεί να οπτικοποιηθεί χρησιμοποιώντας το λογισμικό Jumpshot. jumpshot tau.slog2 Κατά την πρώτη εκτέλεση του Jumpshot αποθηκεύονται κάποιες ρυθμίσεις
και στη συνέχεια εμφανίζεται το γραφικό περιβάλλον ανίχνευσης των γεγονότων κατά την εκτέλεση του παράλληλου κώδικα. Εναλλακτικό σύνολο ρυθμίσεων του TAU για το PAPI (εάν έχει εγκατασταθεί το PAPI) Μεταβαίνουμε στο φάκελο /mirror/mpiuser/tau-2.20.2-source απ όπου εκτελούμε την εντολή δημιουργίας ενός δεύτερου συνόλου ρυθμίσεων που να συμπεριλαμβάνει και μετρικές του πακέτου PAPI. Δίνουμε./configure -cc=gcc -mpi -pdt=/mirror/pdtoolkit-3.16-install \ -mpiinc=/mirror/mpich2-install/include \ -mpilib=/mirror/mpich2-install/lib \ -mpilibrary='-lmpich -lmpl' -tag=config-03 \ -PROFILE -prefix=/mirror/tau-2.20.2-install \
-papi=/mirror/papi-4.1.3-install make install ή αν έχει εγκατασταθεί το MPICH2 στην εξ ορισμού θέση /usr/bin, δίνουμε./configure -cc=gcc -mpi -pdt=/mirror/pdtoolkit-3.16-install \ -mpiinc=/usr/include/mpich2/ \ -mpilib=/usr/lib \ -mpilibrary='-lmpich' -tag=config-03 \ -PROFILE -prefix=/mirror/tau-2.20.2-install \ -papi=/mirror/papi-4.1.3-install make install Αυτές οι εντολές θα δημιουργήσουν στο φάκελο /mirror/mpiuser/tau-2.20- install/i386_linux/lib ένα νέο Makefile. Κατόπιν το μόνο που θα έχουμε να κάνουμε είναι να αλλάζουμε την τιμή της μεταβλητής $TAU_MAKEFILE όταν θέλουμε να χρησιμοποιήσουμε και το PAPI στις μετρήσεις μας, δίνοντας export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/makefile.tau-config-03-papi-mpi-pdt πριν τη χρήση του σεναρίου μεταγλώττισης tau_cc.sh ή αλλάζοντας την τιμή της μεταβλητής στο αρχείο.bashrc και ενεργοποιώντας με..bashrc Εναλλακτικό σύνολο ρυθμίσεων του TAU για την ανάλυση απόδοσης παράλληλου κώδικα OpenMP Μεταβαίνουμε στο φάκελο /mirror/mpiuser/tau-2.20.2-source απ όπου εκτελούμε την εντολή δημιουργίας ενός τρίτου συνόλου ρυθμίσεων που να υποστηρίζει την ανάλυση κώδικα OpenMP. Για εγκατάσταση χωρίς υποστήριξη του PAPI δίνουμε./configure -cc=gcc -pdt=/mirror/pdtoolkit-3.16-install \ -openmp -opari -tag=config-04 -PROFILE \ -prefix=/mirror/tau-2.20.2-install make install Για εγκατάσταση με υποστήριξη του PAPI και δυνατότητα ανίχνευσης γεγονότων κατά την εκτέλεση παράλληλου κώδικα OpenMP δίνουμε./configure -cc=gcc -pdt=/mirror/pdtoolkit-3.16-install \ -openmp -opari -tag=config-05 -PROFILE -TRACE \ -prefix=/mirror/tau-2.20.2-install \ -papi=/mirror/papi-4.1.3-install make install
(Σημείωση: Η προβολή αρχείων ανίχνευσης γεγονότων δεν υποστηρίζεται αυτόματα από το TAU μέσα από το γραφικό περιβάλλον του Eclipse.) Αυτές οι εντολές θα δημιουργήσουν στο φάκελο /mirror/mpiuser/tau-2.20.2- install/i386_linux/lib ένα νέο Makefile. Κατόπιν το μόνο που θα έχουμε να κάνουμε είναι να αλλάζουμε την τιμή της μεταβλητής $TAU_MAKEFILE όταν θέλουμε να αναλύσουμε κώδικα διαμοιραζόμενης (κοινόχρηστης) μνήμης OpenMP, δίνοντας export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/makefile.tau-config-04-pdt-openmp-opari ή export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/makefile.tau-config-05-papi-pdt-openmp-opariprofile-trace πριν τη χρήση του σεναρίου μεταγλώττισης tau_cc.sh ή αλλάζοντας την τιμή της μεταβλητής στο αρχείο.bashrc και ενεργοποιώντας με..bashrc Χρήση του TAU για ανάλυση απόδοσης κώδικα OpenMP από γραμμή εντολών (Έλεγχος καλής λειτουργίας του συνόλου ρυθμίσεων του TAU για κώδικα OpenMP) Για να σιγουρευτούμε ότι λειτουργεί σωστά το σύνολο ρυθμίσεων του TAU για κώδικα OpenMP είναι εκτελώντας μια δειγματική ανάλυση απόδοσης πολυνηματικού παράλληλου κώδικα. Θεωρούμε το επόμενο πρόγραμμα OpenMP για τον υπολογισμό της τιμής του αριθμού π (χωρίς κρίσιμο τμήμα) το οποίο αποθηκεύουμε σε ένα αρχείο με όνομα piopenmp.c: #include <stdio.h> #include <omp.h> #define NBIN 100000 #define MAX_THREADS 100 void main() { int nthreads,tid; double step,sum[max_threads]={0.0},pi=0.0; step = 1.0/NBIN; #pragma omp parallel private(tid) { int i; double x;
} nthreads = omp_get_num_threads(); tid = omp_get_thread_num(); for (i=tid; i<nbin; i+=nthreads) { x = (i+0.5)*step; sum[tid] += 4.0/(1.0+x*x); } } for(tid=0; tid<nthreads; tid++) pi += sum[tid]*step; printf("pi = %f\n",pi); Πριν τη μεταγλώττιση και εκτέλεση του κώδικα OpenMP ορίζουμε την τιμή της μεταβλητής συστήματος η οποία καθορίζει το πλήθος των νημάτων που θα χρησιμοποιηθούν για την εκτέλεση του κώδικα. export OMP_NUM_THREADS=10 Το OpenMP χρησιμοποιεί νήματα επεξεργασίας και δεν απαιτείται η ύπαρξη διαχειριστή εργασιών όπως στο MPI (MPICH2). Σαν μια πρώτη δοκιμή μεταγλωττίζουμε τον κώδικα OpenMP χρησιμοποιώντας το gcc, προσθέτοντας την παράμετρο fopenmp, και εκτελούμε το πρόγραμμα gcc piopenmp.c fopenmp o pi./pi Για να αναλύσουμε αυτό το πρόγραμμα με το TAU θα πρέπει να ορίσουμε νέα τιμή στη μεταβλητή συστήματος TAU_MAKEFILE ώστε να «δείχνει» στο σύνολο ρυθμίσεων που έχει δημιουργηθεί για την ανάλυση απόδοσης κώδικα OpenMP. Δίνουμε export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/makefile.tau-config-04-pdt-openmp-opari Κατόπιν μεταγλωττίζουμε και εκτελούμε τον κώδικα του piopenmp.c tau_cc.sh piopenmp.c -o pi./pi Μπορούμε στη συνέχεια να δούμε τα γραφικά της ανάλυσης απόδοσης δίνοντας paraprof Για να μπορέσουμε να δούμε οπτικοποιημένα τα περιεχόμενα των αρχείων ανάλυσης απόδοσης θα πρέπει να έχει ρυθμιστεί η λειτουργία των ParaProf και PerfExplorer. Δεν απαιτείται ειδική ρύθμιση για την οπτικοποίηση της ανάλυσης απόδοσης κώδικα OpenMP. Η μορφή των αρχείων ανάλυσης απόδοσης του TAU είναι η ίδια είτε αναλύεται η απόδοση κώδικα MPI, είτε κώδικα OpenMP. Καλό είναι όμως για την ομαδοποίηση των μετρήσεων που προέρχονται από ανάλυση απόδοσης κώδικα MPI χωριστά από αυτών που προέρχονται από ανάλυση κώδικα OpenMP, να δημιουργηθεί μια δεύτερη βάση δεδομένων μετρήσεων με
διαφορετικό όνομα (όπως περιγράφεται στην ενότητα «Ρύθμιση των PerfExplorer και ParaProf»). Χρήση του TAU για την ανίχνευση κώδικα OpenMP από γραμμή εντολών (Δεύτερος έλεγχος καλής λειτουργίας του συνόλου ρυθμίσεων του TAU για κώδικα OpenMP) Θεωρούμε το προηγούμενο πρόγραμμα OpenMP για τον υπολογισμό της τιμής του αριθμού π piopenmp.c. Θα πρέπει να έχουμε ορίσει την τιμή της μεταβλητής συστήματος η οποία καθορίζει το πλήθος των νημάτων που θα χρησιμοποιηθούν για την εκτέλεση του κώδικα. export OMP_NUM_THREADS=10 Για να ανιχνεύσουμε το πρόγραμμα με το TAU θα πρέπει να ορίσουμε νέα τιμή στη μεταβλητή συστήματος TAU_MAKEFILE ώστε να «δείχνει» στο σύνολο ρυθμίσεων που έχει δημιουργηθεί για την ανίχνευση κώδικα OpenMP. Δίνουμε export TAU_MAKEFILE=/mirror/tau-2.20.2- install/i386_linux/lib/makefile.tau-config-05-papi-pdt-openmp-opariprofile-trace Κατόπιν μεταγλωττίζουμε και εκτελούμε τον κώδικα του piopenmp.c tau_cc.sh piopenmp.c -o pi./pi Στη συνέχεια συγχωνεύουμε τα αρχεία ανίχνευσης δίνοντας tau_treemerge.pl Μετατρέπουμε τα αρχεία σε μορφή SLOG2 tau2slog2 tau.trc tau.edf -o tau.slog2 Τέλος οπτικοποιούμε τα αποτελέσματα της ανίχνευσης χρησιμοποιώντας το λογισμικό Jumpshot. jumpshot tau.slog2 Ενσωμάτωση του TAU στο περιβάλλον του Eclipse Αναφορές http://wiki.eclipse.org/ptp/designs/perf_tools_framework/tau
Για να λειτουργήσουν τα εργαλεία του TAU μέσα από το γραφικό περιβάλλον του Eclipse, θα πρέπει να εγκαταστήσουμε στο Eclipse το σχετικό επιπρόσθετο (plug-in) του TAU. Όπως περιγράφηκε στην ενότητα εγκατάστασης του Eclipse ξεκινούμε το Eclipse και πηγαίνουμε στο μενού Help, Install New Software Στο παράθυρο Install που ανοίγει επιλέγουμε στο Work with το Helios - http://download.eclipse.org/releases/helios. Στη λίστα που αναφέρει τα διαθέσιμα επιπρόσθετα επιλέγουμε την ομάδα General Purpose Tools και το PTP External Tools Framework TAU Extension. Παρατηρούμε ότι το Parallel Tools Platform (PTP) End-User Runtime εμφανίζεται με λευκό εικονίδιο γεγονός που σημαίνει ότι έχει ήδη εγκατασταθεί. Επιλέγουμε τα πλήκτρα Next σε κάθε καρτέλα και αφού αποδεχθούμε τους όρους της άδειας χρήσης, πατούμε το Finish για να ξεκινήσει η εγκατάσταση του επιπρόσθετου. Μετά το πέρας της επανεκκινούμε το Eclipse, επιλέγοντας Restart Now στο σχετικό παράθυρο διαλόγου ή επιλέγουμε να το κλείσουμε αργότερα.
Στη συνέχεια θα πρέπει να εγκαταστήσουμε στο φάκελο του Eclipse ένα σύνολο αρχείων που απαιτούνται για να λειτουργήσει το TAU μέσα από το περιβάλλον του Eclipse. Σε ένα τερματικό εντολών δίνουμε τις ακόλουθες. cd tau-2.20.2-source/tools/src/eclipse./install_plugins.sh /opt/eclipse Θα χρειαστεί επανεκκίνηση του Eclipse, οπότε εάν εκτελείται το τερματίζουμε και το ξεκινούμε από ένα τερματικό εντολών χρησιμοποιώντας την παράμετρο clean. Ανάλυση απόδοσης παράλληλου κώδικα MPI χρησιμοποιώντας το TAU μέσα από το Eclipse PTP Για να εκτελέσουμε και να αναλύσουμε την απόδοση παράλληλου κώδικα στη συστοιχία μας θα πρέπει ήδη να λειτουργεί ο διαχειριστής διεργασιών mpd του MPICH2. Έστω ότι θα εργαστούμε με το έργο test που δημιουργήσαμε σε προηγούμενη ενότητα. Δίνουμε λοιπόν mpdboot -n 4 -f mpd.hosts mpdtrace /opt/eclipse/eclipse clean & Στο περιβάλλον το Eclipse θα πρέπει αρχικά να ενεργοποιήσουμε το διαχειριστή διεργασιών για το MPICH2. Επιλέγουμε στο μενού Window, Open Perspective το Parallel Runtime.
Στο πλαίσιο Resource Managers, κάνουμε δεξί κλικ πάνω στον MPICH2 (MPICH2) και επιλέγουμε Start Resource Manager στο τοπικό μενού. Στο μενού Run επιλέγουμε Profile Configurations και εκεί κάνουμε διπλό κλικ στο Parallel Performance Analysis για να δημιουργήσουμε ένα νέο σύνολο ρυθμίσεων. Στην καρτέλα Application επιλέγουμε το Application program από τη θέση /mirror/mpiuser/workspace/test/debug/test, πατώντας στο Browse.
Στην καρτέλα Resources επιλέγουμε το πλήθος διεργασιών εκτέλεσης του παράλληλου κώδικα. Στην καρτέλα Debugger επιλέγουμε τη θέση /mirror/mpiuser/eclipseplugins/org.eclipse.ptp.debug.sdm_4.0.5.201011100956 που βρίσκεται το εκτελέσιμο του αποσφαλματωτή sdm.
Στη συνέχεια μεταβαίνουμε στην καρτέλα Performance Analysis. Καθώς η καρτέλα δεν φαίνεται στο παράθυρο διαλόγου Profile Configurations θα πρέπει να πάμε δεξιά από τις ετικέτες των καρτελών, στο σημείο που εμφανίζεται το πλήκτρο με το πλήθος των κρυμμένων καρτελών. Το πατούμε και επιλέγουμε την καρτέλα Performance Analysis. Εκεί επιλέγουμε ως Select Tool το TAU.
Με τον ίδιο τρόπο επιλέγουμε την καρτέλα TAU όπου απλά επιλέγουμε στην καρτέλα του Analysis Options την ενοργάνωση με το PDT. Εάν έχουμε δημιουργήσει επιπλέον σύνολο ρυθμίσεων του TAU (άρα και το αντίστοιχο Makefile) για τη χρήση του PAPI, τότε επιλέγουμε το PAPI και στο Select Makefile το αντίστοιχο Makefile που αφορά το εναλλακτικό σετ ρυθμίσεων. Στην καρτέλα Data Collection επιλέγουμε στο Select Database τη βάση δεδομένων που έχουμε δημιουργήσει για τη συλλογή των δεδομένων ανάλυσης απόδοσης (προφίλ) κώδικα MPI.
Πατούμε το πλήκτρο Profile και μετά από μερικά δευτερόλεπτα παρατηρούμε ότι στο πλαίσιο Performance Data εμφανίζεται μια νέα καταχώρηση στη βάση δεδομένων συλλογής των δεδομένων ανάλυσης απόδοσης (προφίλ) κώδικα MPI, για το έργο test με την ημερομηνία και ώρα της εκτέλεσης του παράλληλου κώδικα.
Κάνοντας διπλό κλικ σε αυτή την καταχώρηση ανοίγει το εργαλείο ParaProf του TAU και μπορούμε να δούμε οπτικοποιημένα τα αποτελέσματα της ανάλυσης, μέσα από το διαλογικό γραφικό περιβάλλον εργασίας του εργαλείου.
Ανίχνευση γεγονότων κατά την εκτέλεση παράλληλου κώδικα MPI χρησιμοποιώντας το TAU μέσα από το Eclipse PTP (ισχύει και για παράλληλα προγράμματα OpenMP) Η ανίχνευση (tracing) κώδικα μπορεί να γίνει αν έχει δημιουργηθεί σύνολο ρυθμίσεων (configuration file) για το TAU στο οποίο να χρησιμοποιείται η παράμετρος TRACE. Τότε μπορεί μέσα από το Eclipse κατά τη διάρκεια ρυθμίσεων στο παράθυρο Profile Configurations, καρτέλα TAU, καρτέλα Alanysis Options, να καταργηθεί η επιλογή του PAPI και να επιλεγεί το Trace. Πατώντας το πλήκτρο Profile θα γίνει η ανίχνευση αλλά χωρίς να γίνει ανάλυση απόδοσης. Γι αυτό θα εμφανιστεί με το πέρας της ανάλυσης το μήνυμα λάθους No profile data was located. Please sure profile data is available. γιατί δεν θα έχουν δημιουργηθεί αρχεία προφίλ από την ανάλυση απόδοσης. Θα έχουν όμως δημιουργηθεί αρχεία ανίχνευσης. Θα πρέπει από γραμμή εντολών να ακολουθηθεί η δια διαδικασία που περιγράφεται στην παράγραφο Χρήση του TAU για ανίχνευση κώδικα MPI από γραμμή εντολών ώστε να μετατραπούν τα αρχεία ανίχνευσης στη μορφή SLOG2 και να οπτικοποιηθούν τα αρχεία ανίχνευσης μορφής SLOG2 με την κλήση του JumpShot από τη γραμμή εντολών.
Ανάλυση απόδοσης παράλληλου κώδικα OpenMP χρησιμοποιώντας το TAU μέσα από το Eclipse PTP Για να εκτελέσουμε και να αναλύσουμε την απόδοση παράλληλου κώδικα OpenMP δεν απαιτείται η λειτουργία διαχειριστή διεργασιών αφού η εκτέλεση κώδικα γίνεται με πολλαπλά νήματα στον ίδιο επεξεργαστή. Στο μενού Run επιλέγουμε Profile Configurations και εκεί κάνουμε διπλό κλικ στο Performance Analysis για να δημιουργήσουμε ένα νέο σύνολο ρυθμίσεων. Στην καρτέλα Main επιλέγουμε το έργο (project) και το εκτελέσιμό του αν δεν έχουν ήδη επιλεγεί. Στην καρτέλα Environment ορίζουμε τη μεταβλητή OMP_NUM_THREADS και της δίνουμε τιμή το πλήθος των επιθυμητών νημάτων που θα χρησιμοποιηθούν για την εκτέλεση του κώδικα, έστω 10. Στη συνέχεια μεταβαίνουμε στην καρτέλα Performance Analysis. Καθώς η καρτέλα δεν φαίνεται στο παράθυρο διαλόγου Profile Configurations θα πρέπει να πάμε δεξιά από τις ετικέτες των καρτελών, στο σημείο που εμφανίζεται το πλήκτρο με το πλήθος των κρυμμένων καρτελών. Το πατούμε και επιλέγουμε την καρτέλα Performance Analysis. Εκεί επιλέγουμε ως Select Tool το TAU. Με τον ίδιο τρόπο επιλέγουμε την καρτέλα TAU, όπου στην καρτέλα Analysis Options καταργούμε την επιλογή MPI και επιλέγουμε τις OPARI, OpenMP και την ενοργάνωση με το PDT. Στο Select Makefile επιλέγουμε από τη λίστα το Makefile που αφορά το εναλλακτικό σύνολο ρυθμίσεων που έχουμε δημιουργήσει για την ανάλυση απόδοσης κώδικα OpenMP. Στην καρτέλα Data Collection επιλέγουμε στο Select Database τη βάση δεδομένων που έχουμε δημιουργήσει για τη συλλογή των δεδομένων ανάλυσης απόδοσης (προφίλ) κώδικα OpenMP. Πατούμε το πλήκτρο Profile και μετά από μερικά δευτερόλεπτα παρατηρούμε ότι στο πλαίσιο Performance Data εμφανίζεται μια νέα καταχώρηση για το επιλεγμένο έργο στη βάση δεδομένων προφίλ κώδικα OpenMP, με την ημερομηνία και ώρα της εκτέλεσης του παράλληλου κώδικα. Κάνοντας διπλό κλικ σε αυτή την καταχώρηση ανοίγει το εργαλείο ParaProf του TAU και μπορούμε να δούμε οπτικοποιημένα τα αποτελέσματα της ανάλυσης, μέσα από το διαλογικό γραφικό περιβάλλον εργασίας του εργαλείου.
Εγκατάσταση του ISP και του GEM για το Eclipse PTP Το In-situ Partial Order (ISP) είναι ένα εργαλείο ανάλυσης δυσλειτουργιών παράλληλου κώδικα MPI, όπως συμφορήσεων, αδιεξόδων, κ.λπ. Μπορεί να λειτουργήσει από τη γραμμή εντολών, αλλά και χάρη στο επιπρόσθετο Graphical Explorer of MPI Programs (GEM), μέσα από το γραφικό περιβάλλον του Eclipse PTP. Το ISP πρέπει να εγκατασταθεί πριν το GEM. Ευχαριστούμε θερμά για την υποστήριξη, την ομάδα ανάπτυξης των συγκεκριμένων εργαλείων από το School of Computing του University of Utah. Επικεφαλής της είναι ο Καθηγητής Ganesh Gopalakrishnan, και συμμετέχουν οι Alan Humphrey, Anh Vo και Chris Derrick. Εγκατάσταση ISP http://www.cs.utah.edu/formal_verification/isp-release/ http://www.cs.utah.edu/formal_verification/isp-release/isp-user-manual.pdf Το In-situ Partial Order (ISP) είναι ένα εργαλείο ανάλυσης παράλληλου πηγαίου κώδικα για τον εντοπισμό δυσλειτουργιών όπως οι συμφορήσεις. Για να αποκτήσουμε την τελευταία έκδοση του λογισμικού επισκεπτόμαστε τον ιστότοπο του έργου, στη διεύθυνση http://www.cs.utah.edu/formal_verification/isp-release/. Σημείωση: Λόγω προβλημάτων στην τελευταία έκδοση του ISP τον καιρό που γράφονταν οι παρούσες οδηγίες και αφού αυτά ξεπεράστηκαν, η ομάδα ανάπτυξης του ISP δημιούργησε για χάρη μας μια ειδική έκδοση ώστε να μην περιμένουμε την επόμενη επίσημη που θα καθυστερούσε. Έτσι, για τις ανάγκες των οδηγιών μας, κατεβάσαμε και χρησιμοποιήσαμε το πακέτο που βρίσκεται στη διεύθυνση http://www.cs.utah.edu/formal_verification/gem/misc/isp-0.2.0-constantinos.tar.gz.
Το λογισμικό αποθηκεύεται στον προσωπικό φάκελο του χρήστη mpiuser. Μεταβαίνουμε εκεί και αποσυμπιέζουμε, για να ξεκινήσουμε την εγκατάσταση. cd Downloads gunzip isp-0.2.0-constantinos.tar.gz tar -xf isp-0.2.0-constantinos.tar mv isp-0.2.0../isp-0.2.0-source cd ~/isp-0.2.0-source mkdir../isp-0.2.0-install./configure --with-mpi-dir=/mirror/mpiuser/mpich2-install \ --prefix=/mirror/mpiuser/isp-0.2.0-install
ή./configure --with-mpi-dir=/usr/bin \ --with-mpi-inc-dir=/usr/include/mpich2/ \ --prefix=/mirror/isp-0.3.0-install make make install Στη συνέχεια συμπληρώνουμε στη μεταβλητή PATH τη διαδρομή /mirror/isp-0.3.0-install/bin προς τα εκτελέσιμα αρχεία του ISP, ενημερώνοντας κατάλληλα το αρχείο.bashrc. vi.bashrc Εφαρμόζουμε τις αλλαγές με..bashrc Βασική χρήση του ISP Το mpd θα πρέπει να εκτελείται πριν εκτελεστεί το ISP. Για το λόγο αυτό ξεκινούμε ή/και ελέγχουμε τη λειτουργία του mpd. mpdboot -n 4 -f mpd.hosts mpdtrace Για τη δοκιμή της λειτουργίας του ISP δημιουργούμε ένα αρχείο κειμένου με όνομα testisp.c και περιεχόμενο τον ακόλουθο κώδικα, που πήραμε από το εγχειρίδιο χρήσης του ISP. /* -*- Mode: C; -*- */ /* Creator: Bronis R. de Supinski (bronis@llnl.gov) Tue Aug 26 2003 */ /* any_src-can-deadlock9.c -- deadlock occurs if task 0 receives */ /* from task 2 first; sleeps generally */ /* make order 2 before 1 with all task */ /* 0 ops being posted after both 1 and 2 */
/* same as any_src-can-deadlock5.c */ /* except tasks 1 and 2 are interchanged */ #include <stdio.h> #include <isp.h> #include <string.h> #define buf_size 128 int main (int argc, char **argv) { int nprocs = -1; int rank = -1; char processor_name[128]; int namelen = 128; int buf0[buf_size]; int buf1[buf_size]; MPI_Status status; MPI_Request req; /* init */ MPI_Init (&argc, &argv); MPI_Comm_size (MPI_COMM_WORLD, &nprocs); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Get_processor_name (processor_name, &namelen); printf ("(%d) is alive on %s\n", rank, processor_name); fflush (stdout); MPI_Barrier (MPI_COMM_WORLD); if (nprocs < 3) { printf ("not enough tasks\n"); } else if (rank == 0) { //sleep (60); MPI_Irecv (buf0, buf_size, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &req); MPI_Recv (buf1, buf_size, MPI_INT, 2, 0, MPI_COMM_WORLD, &status); MPI_Send (buf1, buf_size, MPI_INT, 2, 0, MPI_COMM_WORLD); MPI_Recv (buf1, buf_size, MPI_INT, MPI_ANY_SOURCE, 0, MPI_COMM_WORLD, &status); MPI_Wait (&req, &status); } else if (rank == 2) { memset (buf0, 0, buf_size); MPI_Send (buf0, buf_size, MPI_INT, 0, 0, MPI_COMM_WORLD); MPI_Recv (buf1, buf_size, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); MPI_Send (buf1, buf_size, MPI_INT, 0, 0, MPI_COMM_WORLD); } else if (rank == 1) { memset (buf1, 1, buf_size);
// sleep (30); MPI_Send (buf1, buf_size, MPI_INT, 0, 0, MPI_COMM_WORLD); } MPI_Barrier (MPI_COMM_WORLD); MPI_Finalize (); printf ("(%d) Finished normally\n", rank); } /* EOF */ Κατόπιν μεταγλωττίζουμε και εκτελούμε τον κώδικα του testisp.c, παίρνοντας τα αποτελέσματα και σε ένα αρχείο καταγραφής με όνομα testisp.log. ispcc testisp.c -o testisp isp -n 4 -h n00 -l testisp.log./testisp Στη ανάλυση της εκτέλεσης βλέπουμε ότι εσκεμμένα υπάρχει ένα αδιέξοδο.
Στη συνέχεια εκτελούμε το ispui, το γραφικό περιβάλλον οπτικοποίησης αρχείων καταγραφής του ISP. ispui Στο μενού File επιλέγουμε Open Trace και με τη βοήθεια του παραθύρου διαλόγου ανοίγουμε το αρχείο testisp.log.
Στο γραφικό περιβάλλον του ispui μπορούμε να δούμε διαγραμματικά τις κλήσεις διεργασιών μεταξύ των κόμβων και τον πηγαίο κώδικα που εκτελέστηκε σε κάθε κόμβο.
Εγκατάσταση του GEM Αναφορές http://www.cs.utah.edu/formal_verification/gem ή http://www.cs.utah.edu/formal_verification/isp-eclipse/ Όπως έχει ήδη αναφερθεί μπορούμε να χρησιμοποιήσουμε το ISP και μέσα από το γραφικό περιβάλλον του Eclipse, αρκεί μετά την εγκατάσταση του ISP να εγκαταστήσουμε στο Eclipse το επιπρόσθετο Graphical Explorer of MPI Programs (GEM). Για να το πετύχουμε ανοίγουμε το Eclipse και πηγαίνουμε στο μενού Help απ όπου επιλέγουμε το Install New Software Στο παράθυρο Install και την καρτέλα του Available Software, πατούμε το πλήκτρο Add δεξιά του πεδίου Work with για να προσθέσουμε ένα νέο αποθετήριο λογισμικού απ όπου θα γίνει η λήψη του GEM. Στο παράθυρο που ανοίγει δίνουμε ένα όνομα, έστω GEM, και τη διεύθυνση http://www.cs.utah.edu/formal_verification/gem/ και πατούμε το OK. Πίσω στο παράθυρο Install καταργούμε την επιλογή Group items by category και τότε εμφανίζεται στην πιο πάνω λίστα η καταχώρηση του GEM την οποία και επιλέγουμε για εγκατάσταση. Μετά πατούμε το πλήκτρο Next.
Στην καρτέλα Install Details απλά πατούμε το Next. Στην καρτέλα Review Licenses επιλέγουμε το I accept the terms of the license agreement και πατούμε Finish. Στη συνέχεια εμφανίζεται το παράθυρο της εγκατάστασης Installing Software και σε λίγο το παράθυρο Security Warning το οποίο μας ειδοποιεί για μη υπογεγραμμένο ψηφιακά περιεχόμενο και τους ενδεχόμενους κινδύνους από την εγκατάστασή του. Απαντούμε θετικά στη συνέχισή της πατώντας το ΟΚ.
Μετά το πέρας της εγκατάστασης επιλέγουμε το Restart Now για την επανεκκίνηση του Eclipse και την εφαρμογή των αλλαγών. Βασική χρήση του GEM (περιγραφεται μια υποθετική τυπική λειτουργία μέχρι o Αlan Humphrey να δώσει μια καλύτερη λύση) Μετά την επανεκκίνηση του Eclipse παρατηρούμε ότι εμφανίστηκε στη γραμμή εργαλείων του περιβάλλοντος εργασίας ένα νέο εργαλείο, το Formally Verify MPI Program, με εικονίδιο μια τρίαινα. Πατώντας το μικρό βέλος που βρίσκεται δίπλα στην τρίαινα εμφανίζεται ένα μενού απ όπου μπορούμε να επιλέξουμε το πλήθος των διεργασιών που θα συμμετέχουν στην ανάλυση (Set Number of Processes), να εκτελέσουμε την ανάλυση (Formally Verify MPI Program) ή να εμφανίσουμε την κονσόλα του GEM (Show GEM Console). Για να πραγματοποιηθεί ανάλυση θα πρέπει να εκτελείται ο διαχειριστής εργασιών του mpd αλλά και ο αντίστοιχος του Eclipse. Άρα θα πρέπει από ένα τερματικό εντολών να ελέγξουμε τη λειτουργία του πρώτου δίνοντας την εντολή mdptrace και από το περιβάλλον του Ecplipse θα πρέπει να ενεργοποιήσουμε το δεύτερο (μενού Window, Open Perspective, Other, Parallel Runtime, δεξί κλικ στον MPICH2 του πλαισίου Resource Managers και εκεί Start Resource Manager).
Όταν πατούμε την τρίαινα για να εκτελέσουμε την ανάλυση κώδικα, εμφανίζονται οι καρτέλες GEM Browser και GEM Analyzer. Στον GEM Browser εμφανίζονται τα αποτελέσματα της ανάλυσης με μορφή μηνυμάτων κατανεμημένων στις καρτέλες Deadlocks, Assertion Violations, Leaks, Irrelevant Barriers και Type Mismatches.
Στον GEM Analyzer εμφανίζονται οι κλήσεις MPI συναρτήσεων του πηγαίου κώδικα και μπορούμε να πλοηγηθούμε στις μεταβάσεις από διεργασία σε διεργασία. Περισσότερες πληροφορίες για το GEM μπορούμε να πάρουμε από τον ιστότοπο του έργου http://www.cs.utah.edu/formal_verification/gem/.