Σύντομες οδηγίες για τη χρήση του (Open)MPI

Στους υπολογιστές των εργαστηρίων έχουν εγκατασταθεί τουλάχιστον 3 πακέτα που υλοποιούν το MPI. Εξ ορισμού, χρησιμοποιείτε το OpenMPI, που είναι ανοικτού κώδικα και υλοποιεί τις κλήσεις του MPI-2. Εδώ παρουσιάζονται σύντομες οδηγίες για να μπορέσει κάποιος να το χρησιμοποιήσει. Περισσότερες πληροφορίες υπάρχουν στο παραπάνω site του OpenMPI καθώς και στα manual pages (εκτελέστε "man mpirun" ή "man mpicc").

ΡΥΘΜΙΣΕΙΣ SSH ΓΙΑ ΤΗΝ ΠΡΩΤΗ ΧΡΗΣΗ

Κατά την εκτέλεση του προγράμματός σας, γίνεται χρήση του ssh προκειμένου να τρέξουν οι διεργασίες σε πολλαπλούς υπολογιστές. Για να γίνει αυτό όμως, θα πρέπει να μην σας ζητάει password το ssh όταν συνδέεται από το ένα μηχάνημα στο άλλο. Απαιτείται ειδική διαδικασία ώστε να γίνει αυτό. Για να δείτε αν πρέπει να κάνετε αυτή τη διαδικασία, δοκιμάστε το εξής: ας πούμε ότι δουλεύετε στο μηχάνημα hp6000ws03. Εκτελέσετε ssh προς ένα άλλο μηχάνημα, π.χ.

         % ssh hp6000ws02 ls 

Αν δεν σας ζητηθεί password τελειώσατε, αλλιώς, θα πρέπει να κάνετε τη διασικασία ρύθμισης του ssh που δίνεται παρακάτω. Η ρύθμιση γίνεται μία φορά και ισχύει για πάντα.

Ρύθμιση του ssh ώστε να μη ζητάει password:

 
  1. Εκτελέστε:
    			% ssh-keygen -t rsa
    Δώστε τρία enter (δηλαδή να δημιουργήσει το default αρχείο, και να χρησιμοποιήσει κενό pass phrase).
  2. Θα δημιουργηθεί ένα directory .ssh στο λογαρισασμό σας Μπείτε στο .ssh και κάντε ls -l. Θα πρέπει να δείτε τα παρακάτω:
    			-rw-------  id_rsa
    			-rw-r--r--  id_rsa.pub
    Αν το αρχείο id_rsa.pub δεν έχει αυτά τα permissions, θα πρέπει να εκτελέσετε:
    			% chmod 0644 id_rsa.pub 
  3. Αντιγράψτε το αρχείο id_rsa.pub ως εξής:
    			% cp id_rsa.pub authorized_keys 
  4. Από εδώ και στο εξής, δεν θα πρέπει να σας ζητά password το ssh. Απλά, αν επιθυμείτε να χρησιμοποιήσετε τα μηχανήματα π.χ. Α και Β με το MPI, εκτελέστε μία φορά ssh προς καθένα από αυτά για να τα "μάθει":
    			% ssh <μηχάνημα Α> ls
    			% ssh <μηχάνημα Β> ls 
    Ίσως το ssh σας ρωτήσει αν όντως επιθυμείτε τη σύνδεση (απαντήστε "yes") και θα προσθέσει τα μηχανήματα Α και Β στη λίστα των "γνωστών" του μηχανημάτων. Την επόμενη φορά που θα κάνετε ssh σε αυτά τα μηχανήματα, δεν θα σας ζητηθεί τίποτε.
    Μπορείτε πλέον να αρχίσετε να χρησιμοποιείτε το MPI.

Δημιουργια κομβων εικονικου cluster

Θα πρέπει να δημιουργήσετε ένα αρχείο με τα μηχανήματα που θέλετε να συμμετέχουν στον εικονικό παράλληλο υπολογιστή σας (ένα όνομα σε κάθε γραμμή του αρχείου). Για παράδειγμα, θα μπορούσατε να έχετε το παρακάτω αρχείο, που ας πούμε ότι ονομάζεται "mynodes" και το οποίο δημιουργεί ένα παράλληλο σύστημα με τρεις κόμβους, συμπεριλαμβανομένου και του υπολογιστή στον οποίο βρίσκεστε:

         localhost
         hp6000ws01
         hp6000ws02

Προσέξετε, σε όλα τα μηχανήματα που αναφέρονται στο αρχείο αυτό να έχετε κάνει πριν τουλάχιστον μία φορά ssh, ώστε να μη ζητείται password.

Μεταγλωττιση προγραμματων (compilation)

Σε κάθε πρόγραμμα C θα πρέπει να γίνεται:

         #include  

Μεταγλώττιση γίνεται με την εντολή mpicc, η οποία αναλαμβάνει να περιλάβει όλα τα απαραίτητα αρχεία και βιβλιοθήκες:

         % mpicc <αρχείο C> 

Εδώ μπορείτε να βρείτε ένα δοκιμαστικό αρχείο, στο οποίο δύο διεργασίες ανταλλάσουν διαρκώς μηνύματα.

Αν το πρόγραμμά σας κάνει χρήση και του OpenMP (υβριδικός προγραμματισμός), κατά τη μεταγλώττιση θα πρέπει να περάσετε και το όρισμα -fopenmp διότι εσωτερικά το mpicc χρησιμοποιεί τον μεταφραστή gcc ο οποίος απαιτεί το συγκεκριμένο όρισμα προκειμένου να αναγνωρίσει και να μεταφράσει οδηγίες του OpenMP:

         % mpicc -fopenmp <αρχείο C> 

Εκτελεση προγραμματων

Η εκτέλεση γίνεται μέσω του mpirun. Γράψτε:

         % mpirun -np N -hostfile mynodes <εκτελέσιμο αρχείο> 

όπου N είναι ο αριθμός των διεργασιών που θέλετε να δημιουργηθούν. Οι διεργασίες μοιράζονται και εκτελούνται στους κόμβους του εικονικού cluster που προσδιορίσατε στο αρχείο mynodes.

Πώς μοιράζονται οι διεργασίες: Αν το πλήθος των διεργασιών (N) είναι μεγαλύτερο από το πλήθος των μηχανημάτων, η διαμοίραση των εργασιών γίνεται κυκλικά. Στο παραπάνω αρχείο mynodes, η 1η διεργασία θα εκτελεστεί στο localhost, η 2η στο hp6000ws01, η 3η στο hp6000ws02, η 4η στο localhost, κ.ο.κ.

Ειδικότερο μοίρασμα σε πολυπύρηνα συστήματα: Αν κάποιος κόμβος διαθέτει πολλούς πυρήνες, θα μπορούσατε να κατανείμετε τις διεργασίες διαφορετικά (αν θέλετε). Για να γίνει αυτό, θα πρέπει το MPI να γνωρίζει όχι μόνο τα ονόματα των κόμβων αλλά και το πλήθος των συνεχόμενων διεργασιών που θέλετε καθένας να πάρει (συνήθως, ίσο με το πλήθος των πυρήνων του). Για παράδειγμα, αν οι παραπάνω κόμβοι είναι 4-πύρηνοι, μπορείτε να ορίσετε το αρχείο "mynodes" ως εξής:

         localhost  slots=4
         hp6000ws01 slots=4
         hp6000ws02 slots=4

Τότε, οι 4 πρώτες διεργασίες θα εκτελεστούν στο localhost, οι 4 επόμενες στο hp6000ws01, οι 4 επόμενες στο hp6000ws02, οι 4 επόμενες στο localhost, κ.ο.κ.
Για περισσότερες πληροφορίες, man mpirun.