Parallel Matlab — about time

H όρεξη για upgrade του υπολογιστή μου δε μου έρχεται ποτέ όταν παίζω παιχνίδια — έρχεται όταν τρέχω simulations ή estimations για τη δουλειά. Συνήθως κάτι τέτοιο το κάνω στο Matlab.

Όπως λοιπόν περιμένω να βγούνε κάποια αποτελέσματα, σκεφτόμουν πάλι, μετά από πολύ καιρό, για upgrades. To θέμα είναι πως, τη σήμερον ημέρα, το πιο λογικό upgrade που μπορώ να κάνω από τον Athlon 64 3500+ που έχω, θα ήταν ένας dual core Athlon X2. Το πρόβλημα είναι πως το Matlab είναι singlethreaded.

Oι καινούργιοι dual core επεξεργαστές, να το πούμε απλά, είναι απλώς δύο επεξεργαστές στο ίδιο chip. Θεωρητικά, αυτό σημαίνει πως έχουμε τη διπλάσια δύναμη. Στην πράξη όμως, αν ένα πρόγραμμα είναι γραμμένο για να τρέχει σε ένα μόνον επεξεργαστή, δεν πρόκειται να κερδίσουμε τίποτα, γιατί δε μπορεί να αξιοποιήσει τον δεύτερο — το πρόγραμμα είναι γραμμένο έτσι ώστε για να κάνει τους επόμενους του υπολογισμούς (που θα μπορούσαν να γίνουν στον δεύτερο επεξεργαστή), πρέπει να βγουν τα αποτελέσματα από τον πρώτο.

Όπως ίσως καταλαβαίνετε, κάποια προγράμματα δε γίνεται να γίνουν parallelized — να γραφτούν, δηλαδή, για πολλούς επεξεργαστές. Άλλα γίνεται, απλώς είναι δύσκολο για τους προγραμματιστές να ξαναγράψουν τα προγράμματα τους από την αρχή για να κάνουν κάτι τέτοιο.

Η Mathworks έχει μια FAQ-style σελίδα για το γιατί το Matlab είναι single-threaded. Εκεί παραπέμπουν σ’ ένα παλιότερο τους newsletter.

Έχουν το θράσος να παραπέμπουν θα έπρεπε να πω, διότι το άρθρο είναι από το ‘95. Τότε είχαν απολύτως δίκιο — ένα multithreaded Matlab δε θα έβγαζε νόημα, για διάφορους λόγους. Σήμερα όμως, που πολύ σύντομα οι περισσότεροι επεξεργαστές θα είναι διπλοί, και μοιράζονται την ίδια μνήμη (και cache, από το τέλος της χρονιάς), αν δε κάνω κάποιο λάθος δεν ισχύει πλέον κανένας από τους λόγους τους. Και βγάζει απολύτως νόημα ως business move. Ας ελπίσουμε να μη βαρεθούνε και να το κάνουνε!

3 Responses to “Parallel Matlab — about time”


  1. 1 Δημήτρης Apr 3rd, 2006 at 11:43 pm

    χμ … ενδιαφέρον αυτό. Αν δε κάνω λάθος όμως, υπάρχει ένα parallel toolkit για το Matlab. Δεν έχω κάποια ιδέα όμως σχετικά με το ποιές λειτουργείες επιτελεί.

    Αυτές τις μέρες, χρησιμοποιώ το R14 σε ένα Mac G4, όπου υποτίθεται ότι το λογισμικό έχει αριστοποιηθεί για να τρέχει στο συγκεκριμένο επεξεργαστή. Σκέφτομαι να κάνω την κίνηση αγοράς ενός G5, όσο είναι ακόμα καιρός (πείτε ότι θέλετε). Έχει μήπως υπόψιν του κανείς κάποιο benchmark του πώς τρέχει αυτή η συγκεκριμένη έκδοση στον G5?

  2. 2 Kostis Apr 4th, 2006 at 12:38 am

    Ενδιαφέρον, δεν το γνώριζα. Still όμως, είναι third party solution, δεν είναι fully supported σε όλες τις εκδόσεις, και χρειάζεται ένα Matlab license per επεξεργαστή. Όχι ό,τι καλύτερο. Αν μη τι άλλο, η ύπαρξει τέτοιων 3rd party προγραμμάτων αποδεικνύει ότι η Mathworks μπορεί και θα έπρεπε πλέον να δημιουργήσει ένα multithreaded Matlab. Ας ελπίσουμε πως ως την 2007α θα υπάρχει ως ένα σημείο.

  3. 3 cosmix Apr 4th, 2006 at 12:18 pm

    Το Parallel Toolkit δεν έχει μεγάλη σχέση με αυτό που ζητάς Κωστή, οπότε και που δε το γνώριζες δεν αλλάζει κάτι. Επιπλέον ούτε αποδεικνύει τίποτα σχετικά με το τι μπορεί και πρέπει να κάνει η Μathworks ούτε αποτελεί λύση για ένα ιδιαίτερα μεγάλο μέρος των εφαρμογών σε μάτλαμπ δυστυχώς. Ουσιαστικά το Parallel Toolkit είναι ενα wrapper/front-end για το MPI. Δεν αυτοματοποιεί πλήρως το ‘μοίρασμα’ σε επεξεργαστές, όπως θα ήθελες, ούτε είναι ιδιαίτερα γρήγορο (καμία σχέση με kernel threads σε οποιοδήποτε λειτουργικό). Επίσης όπως θα είδες αναφέρεται σε εφαρμογές με ιδιαίτερα μειωμένο interprocess communication. Ένας εξοικειωμένος προγραμματιστής με αρκετές γνώσεις σε διανεμημένη/παράλληλη επεξεργασία συχνά πρέπει να σκεφτεί πως θα κατασκευάσει το λογισμικό του ώστε να μην δημιουργηθούν bottlenecks, out-of-order calculations ή απλά μεγαλύτερη καθυστέρηση από το ‘μοίρασμα’ από την υπάρχουσα καθυστέρηση επεξεργασίας σε ένα (ή λιγότερους) επεξεργαστες — πως θα ‘μοιράσει’ δηλαδή τη δουλειά. Προφανώς με δυο επεξεργαστές είναι σαφώς ευκολότερο απ’ότι είναι όταν προγραμματίζεις ένα cluster με δεκάδες ή εκατοντάδες PEs αλλά και πάλι ξεφεύγει αρκετά από αυτό που αναζητάς που είναι η απολύτως διαφανής μοιρασιά της εργασίας στους υπάρχοντες τοπικούς επεξεργαστές μέσω kernel threads.

    Λογισμικό σαν το μάτλαμπ είναι γραμμένο σε ένα thread για αρκετούς λόγους, μερικούς από τους οποίους έχεις ήδη αναφέρει. Κάποια στιγμή θα αναγκαστούν να το ξαναγράψουν με πολυνηματική αρχιτεκτονική, αν και αυτό σε ‘πλατφόρμες ανάπτυξης’ όπως το matlab είναι δυσκολότερο απ’ότι σε ένα ‘απλό’ πρόγραμμα. Η mathworks όπως και οι περισσότερες εταιρίες στον χώρο, προτιμά να εκμεταλλευτεί λογισμικό 10-15ετίας (βλ. η adobe με το photoshop, microsoft με τα windows, apple με το MacOS Classic μέχρι το 2001 κλπ.) παρά να το ξαναγράψει με σύγχρονη τεχνολογία, κάτι ακριβό και όχι απαράιτητα επικερδές όταν είσαι market leader και, όπως στη συγκεκριμένη περίπτωση, σχεδόν έχεις το μόνοπώλιο.

Leave a Reply