iwoof Δημοσ. 10 Μαΐου 2016 Δημοσ. 10 Μαΐου 2016 Πρόσφατα συναρμολόγησα ένα i5-6600 με 16gb ram. Παρατήρησα ότι όταν τρέχω κώδικες matlab (κυρίως ode) η χρήση της cpu δεν ξεπερνά το 25-27%, δηλ. δουλεύει μόνο ο ένας από τους τέσσερις πυρήνες. Η ram βρίσκεται και αυτή χαμηλά στο 30-33%. Η χρήση αυτή με καθυστερεί πολύ. Ξέρει κανείς τί ρυθμίσεις πρέπει να κάνω ώστε να εκμεταλλευτώ όλους τους πυρήνες ; Χρειάζεται κώδικα ή κάτι άλλο ; Δοκίμασα να αλλάξω τις ρυθμίσεις parallel preferences αλλά δεν είδα κάποια διαφορά. Κάθε βοήθεια ευπρόσδεκτη.
Moderators Kercyn Δημοσ. 10 Μαΐου 2016 Moderators Δημοσ. 10 Μαΐου 2016 Κάποιες συναρτήσεις εκτελούνται αυτόματα σε πολλούς πυρήνες (αν υπάρχει η δυνατότητα). Από κει και πέρα, ίσως το bottleneck σου βρίσκεται σε κώδικα που έχεις γράψει εσύ και δεν είναι multithreaded.
iwoof Δημοσ. 10 Μαΐου 2016 Μέλος Δημοσ. 10 Μαΐου 2016 Άρα πρέπει να κοιτάξω πώς να κάνω τον κώδικά μου multithreaded ; Χρησιμοποιώ τους λύτες της matlab που είναι 4ης-5ης τάξης runge-kutta.
Moderators Kercyn Δημοσ. 10 Μαΐου 2016 Moderators Δημοσ. 10 Μαΐου 2016 Δυστυχώς δεν ξέρω τι είναι αυτό που κάνεις για να μπορώ να σε βοηθήσω παραπάνω, απλώς αν θες ο κώδικας που έχεις γράψει εσύ να τρέχει σε περισσότερους από έναν επεξεργαστές, χρειάζεται να τον γράψεις έτσι ώστε να μπορεί να το κάνει αυτό. Ρίξε μια ματιά και σ' αυτό. http://www.mathworks.com/discovery/matlab-multicore.html
iwoof Δημοσ. 10 Μαΐου 2016 Μέλος Δημοσ. 10 Μαΐου 2016 Οκ, ήταν καλό το tip σου. Με αυτούς τους λύτες μάλλον δεν γίνεται γιατί στο κάθε βήμα του υπολογισμού πρέπει να χρησιμοποιείς τα προηγούμενα και αυτή η αλληλουχία δεν μπορεί να γίνει παράλληλα. Τέλεια... ευχαριστώ
groot Δημοσ. 10 Μαΐου 2016 Δημοσ. 10 Μαΐου 2016 Εάν σε κάθε βήμα θέλεις τα προηγούμενα, τότε γίνεται να κάνεις "vectorization". Γενικά το MATLAB αποδίδει καλύτερα όταν αλλάζεις τα loops με ισοδύναμες πράξεις πινάκων. Αυτή, βασικά, είναι η ΜΕΓΑΛΗ του δύναμη. Όσο για το parallel, έχεις δύο επιλογές στο MATLAB. 1) parfor 2) spmd Διαλέγεις και παίρνεις.
V.I.Smirnov Δημοσ. 10 Μαΐου 2016 Δημοσ. 10 Μαΐου 2016 Με το MPI γίνεται - αν ξέρεις να το κάνεις - αλλά πρέπει να είσαι πολύ θαρραλέος για το γράψεις εκεί. Πρέπει να χρησιμοποιηθεί η τεχνοτροπία SPMD οποία δεν είναι εύκολη. Γενικά μην περιμένεις με αυτοματισμούς να έχεις καλή κλιμάκωση. -
iwoof Δημοσ. 10 Μαΐου 2016 Μέλος Δημοσ. 10 Μαΐου 2016 Vectorization δεν μπορεί να γίνει γιατί ο λύτης μπορεί να μεταβάλλει το μέγεθος του βήματος κάθε φορά ώστε να ικανοποιεί τις τιμές των RelTol, AbsTol οι οποίες εξαρτώνται από το κάθε πρόβλημα (τιμές παραμέτρων, αρχικές συνθήκες κλπ). Δεν έχω βρόγχους στους οποίους επαναλαμβάνεται μια ρουτίνα, απλά καλώ μια συνάρτηση και αυτή κάνει την δουλειά. http://www.mathworks.com/matlabcentral/answers/168391-is-the-ode-suite-multi-threaded Και η συνάρτηση αυτή δεν είναι multithreaded. Νόμιζα ότι θα γινόταν εύκολα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα