Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

καλησπερα σας.. μηπως γνωριζει κανεις κανενα link η μηπως εχει κατι που να βοηθησει στη κατανοηση για τα βασικα του παραλληλου προγραμματισμου με χρηση MPI και OPM?

εστω πως μπορεις να βγαλεις στο περιπου το παραλληλο προγραμμα.

Δημοσ. (επεξεργασμένο)

Το βασικό που πρέπει να ξέρεις είναι ότι η πρώτη πρώτη διεργασία, πρέπει να κανονίσει τι δεδομένα θα πάνε στις υπόλοιπες διεργασίες. Για παράδειγμα, αν έχεις ένα πίνακα και θες να βγάλεις άθροισμα των στοιχείων του, μπορείς να δώσεις στην κάθε διεργασία (Αριθμός στοιχείων/Αριθμός Επεξεργαστών) στοιχεία τα οποία θα κάνει η κάθε διεργασία, πρόσθεση τοπικά. Ύστερα θα πάρεις από κάθε διεργασία το άθροισμα που έβγαλε τοπικά και θα το κάνεις πάλι στη root διεργασία πρόσθεση σε ένα τελικό. Σημειώνω πως αυτό δεν είναι βέλτιστο, αλλά είναι πολύ βασικό και εύκολο. Το βέλτιστο είναι να χειρίζεσαι τα αποτελέσματα σαν ένα άλλο πίνακα μέχρι να μείνουν δύο μόνα τους στη root διεργασία.

π.χ [1, 2, 3, 4, 5, 6, 7, 8] και 4 πυρήνες. Ο πρώτος θα κάνει 1 + 2, ο δεύτερος 3 + 4 κλπ.

Στο τέλος έχεις [3, 7, 11, 15]

Τώρα σύμφωνα με τον βέλτιστο τρόπο θα έπαιρνε ο πρώτος το 3 και 7, ο δεύτερος το 11 και 15 και στο τέλος θα έκανε ο root την πρόσθεση 10 + 26.

Με τον απλό τρόπο απλά ο root θα έκανε 3 + 7 + 11 + 15.

Αυτό που περιέγραψα, το κάνεις εύκολα με MPI_Scatter και Gather. Μπορείς να κάνεις το ίδιο με MPI_Send και MPI_Recv αλλά είναι πιο manual τα πράγματα. Οι πρώτες, κατανέμουν πιο εύκολα το array. Αν θες να έχεις περιπτώσεις που οι επεξεργαστές δεν διαιρούν ακριβώς τα στοιχεία (π.χ 10/4), χρησιμοποιείς Scatterv και Gatherv. Είναι λίγο tricky στη χρήση τους.

Επεξ/σία από Dinos_12345

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...