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

Προγραμματισμός MPI ή openmp


grigfor

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

Δημοσ.

Καλησπέρααα!! Έχω αρκετές απορίες όσον αφορά μία εργασία που έχει να κάνει με την

ΠΑΡΑΛΛΗΛΗ ΤΑΞΙΝΟΜΗΣΗ ΔΕΝΤΡΟΥ με C .

Εχω κώδικα που υλοποιεί τον quicksort σε c και πρέπει να το παραλληλοποιήσω, αλλά η αληθεια είναι ότι δυσκολεύομαι αρκετά να τα βάλω σε μία σειρά και να τα καταλάβω.

Δηλαδή ,τι θα στέλνω στις διεργασίες , κα ..

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

Οποιαδήποτε βοήθεια ,θα ήταν πολύ χρήσιμη ..

Ευχαριστώ...:-)

 

 

http://www.codeproject.com/KB/threads/Parallel_Quicksort.aspx

 

http://www.it.uom.gr/project/parallel/Probl/parall.htm

Δημοσ.

Ξεκίνα με το να καταλάβεις ποια κομμάτια του κώδικα μπορούν να τρέξουν παράλληλα. Βάλε τα σε συναρτήσεις μόνα τους και κοίτα πόσες κλήσεις από αυτές τις συναρτήσεις είναι ανεξάρτητες.

 

Συνέχισε από εκεί...

Δημοσ.

Το OpenMPI είναι κυρίως για συστήματα με ανεξάρτητη μνήμη ενώ το OpenMP αποκλειστικά για κοινή μνήμη. Και με τα 2 μπορείς να κάνεις περίπου το ίδιο πράγμα αλλά με διαφορετικό τρόπο. Το OpenMP είναι βέβαια λιγάκι πιο εύκολο νομίζω γ αυτό που θες

Δημοσ.

@godlike: Το OpenMPI είναι μια υλοποίηση του MPI. H διαφορά των δύο έγκειται στο ότι το MPI είναι SPMD τρόπος προγραμματισμού με explicit message passing. Το πρόγραμμά σου ξεκινάει SPMD και παραμένει για όλη τη διάρκεια της εκτέλεσης.

 

Το OpenMP βασίζεται στο μοντέλο fork-join, δηλαδή ο κώδικάς σου είναι σειριακός μέχρι να συναντήσεις OpenMP εντολές. Μόλις γίνει το fork το πρόγραμμα είναι SPMD μέχρι να συναντήσεις το join.

 

Υπάρχουν MPI υλοποιήσεις για shared-memory όπως υπάρχει και υλοποίηση OpenMP για distributed.

Δημοσ.
@godlike: Το OpenMPI είναι μια υλοποίηση του MPI. H διαφορά των δύο έγκειται στο ότι το MPI είναι SPMD τρόπος προγραμματισμού με explicit message passing. Το πρόγραμμά σου ξεκινάει SPMD και παραμένει για όλη τη διάρκεια της εκτέλεσης.

 

Το OpenMP βασίζεται στο μοντέλο fork-join, δηλαδή ο κώδικάς σου είναι σειριακός μέχρι να συναντήσεις OpenMP εντολές.

 

Υπάρχουν MPI υλοποιήσεις για shared-memory όπως υπάρχει και υλοποίηση OpenMP για distributed.

 

Βασικά για το OpenMPI το ήξερα αλλά για το ότι το OpenMP κάνει και για distributed ομολογώ ότι το αγνοούσα. Άλλωστε στην wikepedia γράφει:

 

The OpenMP (Open Multi-Processing) is an application programming interface (API) that supports multi-platform shared memory multiprocessing programming

Δημοσ.

Το Cluster OpenMP (http://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers/) είναι μία υλοποίηση του OpenMP γιαdistributed memory αρχιτεκτονικές. Αναφέρεται και στο άρθρο στη wikipedia.

 

Εν πάση περιπτώση, ναι βολεύει για shared-memory αρχιτεκτονικές, αλλά είναι αρκετά γενικό για να τρέχει σε distributed memory.

Δημοσ.
Το Cluster OpenMP (http://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers/) είναι μία υλοποίηση του OpenMP γιαdistributed memory αρχιτεκτονικές. Αναφέρεται και στο άρθρο στη wikipedia.

 

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

 

Τώρα δε θα το έλεγες και "τρέχει" σε distributed memory. Μουσουλάει ή σέρνεται θα ήταν πιο ακριβές :-)

Δημοσ.

Εξαρτάται το πως είναι γραμμένο το πρόγραμμα. Αν δεν έχεις shared variables, τότε δεν υπάρχει λόγος να είναι πιο αργό από το MPI. Αλλά και πάλι, αν κάνεις emulation των shared variables σε MPI θα καταλήξεις στην ίδια αργή λειτουργία.

 

Και εν πάση περιπτώση, όλοι συμφωνούν πως οι shared variables είναι κακές όταν τρέχεις παράλληλα προγράμματα :)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...