37
κατάλληλο τρόπο. Ο αλγόριθμος πρέπει να διαχωριστεί κατάλληλα, ώστε το αποτέλεσμα του
αλγορίθμου να μην βασίζεται στην σειριακή εκτέλεση των διεργασιών, αφού η σειρά εκτέλεσης
τους δεν είναι προκαθορισμένη. Επιπλέον, σε περίπτωση που πραγματοποιείται πολύ συχνή
επικοινωνία μεταξύ διεργασιών, η χρήση του MPI μπορεί να οδηγήσει σε πιο αργή εκτέλεση
από τον σειριακό προγραμματισμό. Ως εκ τούτου, η χρήση του MPI αποτελεί μια πιο
προχωρημένη τεχνική προγραμματισμού, που μπορεί όμως να προσφέρει σημαντική βελτίωση
στον χρόνο εκτέλεσης του κώδικα.
Παρακάτω, αναφέρονται μερικές από τις πιο βασικές εντολές που χρησιμοποιούνται.
Αρχικά, πριν την χρήση οποιασδήποτε άλλης εντολής απαιτείται η εντολή
MPI.COMM_WORLD, η οποία δημιουργεί μια ομάδα από διεργασίες που επικοινωνούν
μεταξύ τους. Η εντολή πρέπει να προηγείται από τις υπόλοιπες εντολές του MPI, και η σύνταξη
της φαίνεται στο παρακάτω σχήμα (
).
Σχήμα 15 Σύνταξη της εντολής MPI.COMM_WORLD για την αρχικοποίηση των συναρτήσεων του MPI που θα
χρησιμοποιηθούν στην συνέχεια του αλγορίθμου.
Δύο από τις πιο βασικές συναρτήσεις του MPI είναι οι comm.Get_rank() και η
comm.Get_size(), οι οποίες επιστρέφουν τον αριθμό της διεργασίας που εκτελείται και το
συνολικό αριθμό των διεργασιών που εκτελούνται αντίστοιχα.
Σχήμα 16 Παράδειγμα κλήσης των συναρτήσεων comm.Get_rank() και comm.Get_size() και αποθήκευση των
τιμών, που επιστρέφουν στις μεταβλητές rank και size αντίστοιχα.
Στο παραπάνω σχήμα (
) οι συναρτήσεις καλούνται και αποθηκεύουν τις τιμές που
επιστρέφουν στις μεταβλητές rank και size. Οι συναρτήσεις αυτές είναι απαραίτητες στον
προγραμματιστή, ώστε να διαπιστώσει των αριθμό των διεργασιών που χρησιμοποιούνται από
τον χρήστη με την μεταβλητή size και να κατανείμει ανάλογα τον φόρτο την μεταβλητή rank.
Για τον συντονισμό των διεργασιών χρησιμοποιείται η επικοινωνία από σημείο σε
σημείο (point to point communication) ή η συλλογική επικοινωνία (collective communication).
Η επικοινωνία από σημείο σε σημείο αφορά στην ανταλλαγή δεδομένων μεταξύ δύο
διεργασιών, κατά τη οποία η μια διεργασία στέλνει δεδομένα και η δεύτερη τα λαμβάνει. Η