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

MATLAB εναντίον Fortran!


Vas77

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

Δημοσ.

Η γλώσσα δεν καθορίζει το πόσο γρήγορο είναι ένα πρόγραμμα, αυτό είναι δουλειά του compiler. Κάποιες γλώσσες είναι πιο δύσκολο να γίνουν optimize, κάποιες άλλες όχι. Η γλώσσα Matlab και η Fortran είναι παρόμοιες και έχουν ίδιες δυνατότητες έκφρασης.

 

Ότι έχει έτοιμο η Matlab το έχει και η Fortran απλά πρέπει να ξέρεις που να το βρεις. Οπότε:

 

1) Integration: νικητής η Matlab καθώς το Matlab τα έχει όλα σε ένα πακέτο

 

2) Διαθέσιμες βιβλιοθήκες: η Fortran έχει αμέτρητες βιβλιοθήκες. Το Matlab αρκετές.

 

3) Portability: ΟΛΑ τα μηχανήματα υποστηρίζουν Fortran, τελεία. Το Matlab θέλει Linux/Windows/MacOS X/Solaris (με SPARC).

 

4) Επεκτασιμότητα: το ίδιο, εκεί που γράφεις για το ένα, γράφεις και για το άλλο.

 

5) Βελτιστοποίηση: οι compilers Fortran υπάρχουν πολλά περισσότερα χρόνια και βγάζουν αρκετά καλό κώδικα - ιδίως οι auto-parallelizing. Εκτός του γεγονότος ότι το Matlab κυρίως χρησιμοποιείται μέσω των scripting δυνατοτήτων του, η Mathworks δεν είναι αρκετά μεγάλη για να κάνει τόσο καλά optimizations - και δεν την νοιάζει, απλά κάνει interface ότι υπάρχει γρήγορο στην εκάστοτε πλατφόρμα. Νικητής: fortran (μόνον και μόνον επειδή κάθε επιπλέον abstraction layer προσθέτει >=0 overhead).

 

6) Vendor support: το Matlab τρέχει σε λίγα και μικρά μηχανήματα. Η fortran σε πολλά και μεγάλα (απλά δείτε τι χρησιμοποιούν τα μεγάλα ερευνητικά κέντρα). Μπορείς να πάρεις τον κώδικα fortran και να τον τρέξεις όπου θέλεις. Από την άλλη, ο κώδικας matlab τρέχει μόνον όπου υπάρχει Matlab (και κάποιο υποσύνολο όπου υπάρχει Octave κλπ κλπ). Νικητής: fortran

 

7) Ευκολία χρήσης: το Matlab είναι ένα ενοποιημένο περιβάλλον, με scripting γλώσσα και καλό σύστημα βοήθειας. Η fortran είναι compiled γλώσσα και το IDE/βοήθεια διαφέρει από vendor σε vendor. Νικητής: Matlab

 

Στο τέλος, ο κακός προγραμματιστής Fortran είναι και κακός προγραμματιστής Matlab, οπότε τον ίδιο χάλια κώδικα γράφει και η γλώσσα, ο compiler και ο επεξεργαστής δεν μπορούν να διορθώσουν τίποτα.

 

Οπότε διαλέξτε ποιο/ποια χαρακτηριστικά θέλετε και έχετε αυτό που σας ταιριάζει. Αν δεν είχαν κάποια χρησιμότητα και τα δύο, τότε δεν θα υπήρχαν.

Δημοσ.

η matlab χρειάζεται άδεια, είναι πιο αργή και παρουσιάζει προβλήματα στη διαχείριση μνήμης μετά από ένα επίπεδο, ωστόσο έχει τόσο καλά documented τα εργαλεία της που την κάνουν εξαιρετική επιλογή για να δουλεύεις απρόσκοπτα, μεγάλο της πλεονέκτημα το gui της, βλέπεις με τη μία τι μεταβλητές έχεις δηλώσει και to debugging και το optimization του κώδικα γίνεται πολύ πιο εύκολα και τα γραφήματα της είναι καλύτερα.

 

Αφού φτιάξεις το πρόγραμμα σου σε matlab το μεταφέρεις σε fortran και το αφήνεις να τρέχει απροβλημάτιστα.

 

δισκλέιμερ:δεν είμαι προγραμματιστής, απλά ένας χρήστης που χρειάζεται τον προγραμματισμό.

 

Να σημειώσω πως από φέτος εδώ που δουλεύω, και καλά πάμε στην ενοποίηση των πάντων κάτω από μία πλατφόρμα που είναι και για επιστήμονες αλλά και για το κοινό από το ιντερνετ, η main γράφεται σε java και όλα τα από πίσω, που είναι η ανάλυση, είναι σε C (και C etc) και fortran.

Δημοσ.
η matlab χρειάζεται άδεια, είναι πιο αργή και παρουσιάζει προβλήματα στη διαχείριση μνήμης...

 

1. Πράγματι χρειάζεται (φυσικά υπάρχουν πάντα και τα MATLAB likes for free)

2. Πιο αργή από τι; Από Fortran είναι πιο γρήγορη. Σε vectorized προβλήματα πλησιάζει την ταχύτητα της C και υπάρχουν περιπτώσεις που την ξεπερνάει (compiled σε mex).

3. Αυτό πρώτη φορά το ακούω...Ναι αν έχεις γράψει κώδικα και δεν αποδεσμεύεις την μνήμη σου, όντως έχει πρόβλημα! Είναι σαν να κάνεις malloc και να μην κάνεις free. Θέλω να πω ότι αυτό που λες είναι θέμα κακής χρήσης της γλώσσας και όχι πρόβλημα της γλώσσας της ίδιας.

 

:-)

Δημοσ.

2. Πιο αργή από τι; Από Fortran είναι πιο γρήγορη. Σε vectorized προβλήματα πλησιάζει την ταχύτητα της C και υπάρχουν περιπτώσεις που την ξεπερνάει (compiled σε mex).

 

Από Fortran δε νομίζω ότι είναι πιο γρήγορη. Το θέμα είναι πόσο χρόνο χρειάζεσαι στη Fortran για να κάνεις ένα πολύ optimized implementation.

 

Επίσης διαφωνώ κάθετα με το "Από τη Fortran πιο γρήγορη, πλησιάζει την ταχύτητα της C". Η Fortran είναι σαφώς γρηγορότερη από τη C και υπάρχουν καλοί λόγοι για αυτό: Η χρήση pointers στη C κάνει απαγορευτική τη χρήση κάποιων πολύ επιθετικών optimizations τα οποία θα είχαν ως αποτέλεσμα γρηγορότερο εκτελέσιμο. Αντίθετα στη Fortran δεν υπάρχει ο περιορισμός.

 

Disclaimer: Μισώ τη Fortran, λατρεύω τη C, μου αρέσει η Matlab... Αλλά το σωστό να λέγεται.

Δημοσ.
1. Πράγματι χρειάζεται (φυσικά υπάρχουν πάντα και τα MATLAB likes for free)

2. Πιο αργή από τι; Από Fortran είναι πιο γρήγορη. Σε vectorized προβλήματα πλησιάζει την ταχύτητα της C και υπάρχουν περιπτώσεις που την ξεπερνάει (compiled σε mex).

3. Αυτό πρώτη φορά το ακούω...Ναι αν έχεις γράψει κώδικα και δεν αποδεσμεύεις την μνήμη σου, όντως έχει πρόβλημα! Είναι σαν να κάνεις malloc και να μην κάνεις free. Θέλω να πω ότι αυτό που λες είναι θέμα κακής χρήσης της γλώσσας και όχι πρόβλημα της γλώσσας της ίδιας.

 

:-)

 

2. H φορτραν είναι πιο γρήγορη από τη matlab, τουλάχιστον σε ίδια προγράμματα που έχω φτιάξει.

3. Δεν μπορώ να αποδεσμεύσω τη μνήμη όταν τα raw data είναι 2.5 Gb και το πρώτο βήμα είναι να εφαρμόσω fft πάνω σε αυτά, εκεί μου κρασαρει ή το swapping είναι πιο αργό και από το θάνατο, εξαρτάται από το λειτουργικό.

 

Το ξαναλέω, δεν έχω σπουδάσει πληροφορική, προγραμματίζω διότι είναι κομμάτι της δουλειάς μου για να έχω αποτελέσματα.

Δημοσ.

@Dr.Fuzzy: στο matlab γράφεις A*B, στη Fortran του δίνεις ένα for-loop.

 

Αν θέλεις να είσαι δίκαιος, τότε πρέπει να συγκρίνεις Fortran for-loop με Matlab for-loop.

 

Και μετά το A*B του matlab με Lapack, MKL (http://software.intel.com/en-us/intel-mkl/) ή και ATLAS (http://math-atlas.sourceforge.net/).

 

Αν τα συγκρίνεις, θα σταματήσεις να επιμένεις ότι είναι πιο γρήγορο. Το ότι είναι πιο ΕΥΧΡΗΣΤΟ δεν έχει να κάνει με το γεγονός ότι δεν μπορείς να γράψεις βέλτιστο πρόγραμμα στην Fortran.

Δημοσ.
@Dr.Fuzzy: στο matlab γράφεις A*B, στη Fortran του δίνεις ένα for-loop.

 

Αν θέλεις να είσαι δίκαιος, τότε πρέπει να συγκρίνεις Fortran for-loop με Matlab for-loop.

 

Μα αυτό λέω ότι στο MATLAB πρέπει να αποφεύγονται τα for-loops αφου ο κώδικας μπορεί να γινει vectorized! Άρα γιατί να κάνω τετοια σύγκριση. Είναι άσκοπο!

 

Και μετά το A*B του matlab με Lapack, MKL (http://software.intel.com/en-us/intel-mkl/) ή και ATLAS (http://math-atlas.sourceforge.net/).

 

To MATLAB χρησιμοποιεί την MKL οπως και BLAS, LAPACK (κάποτε ηταν σε FORTRAN και έχουν γίνει rewrite σε C) οπότε και πάλι δεν καταλαβαίνω τι θες να συγκρίνω.

 

Το ότι είναι πιο ΕΥΧΡΗΣΤΟ δεν έχει να κάνει με το γεγονός ότι δεν μπορείς να γράψεις βέλτιστο πρόγραμμα στην Fortran.

 

Βέλτιστο σε FORTRAN εν έτη 2009 δεν θα το έλεγα, βελτιωμένο μπορεί. :-)

Δημοσ.

Όταν συγκρίνεις κάτι, πρέπει να κάνεις δίκαια σύγκριση - και επιπλέον συγκρίνεις το δυνατόν καλύτερο που μπορείς να κάνεις με το καλύτερο που υπάρχει διαθέσιμο. Όλα τα επιστημονικά papers, όλα τα benchmarks έτσι γίνονται.

 

Το A*B του Matlab είναι ένα abstraction που χρησιμοποιεί BLAS/LAPACK/κάτι άλλο. Άμα θέλεις να τα συγκρίνεις, θα συγκρίνεις το abstraction του Matlab με το αντίστοιχο καλύτερο στη Fortran.

 

Το ότι δεν μπορεί ένας χρήστης να χρησιμοποιήσει εύκολα το BLAS είναι δεκτό - και εκεί βασίζεται το Matlab. Δίνει ένα εύχρηστο abstraction.

 

Το να πεις ότι το Matlab Α*Β, που χρησιμοποιεί BLAS, είναι πιο γρήγορο από for-loop στη Fortran είναι προφανές: ειδάλλως το BLAS δε θα υπήρχε. Το να στηρίζεις όμως επιχείρημα σε αυτό, είναι λάθος.

 

Αν χρησιμοποιήσεις για παράδειγμα το http://en.wikipedia.org/wiki/Block_matrix γραμμένο σε απλή fortran, τότε μπορεί και να περάσεις το Μatlab - σίγουρα θα είναι πιο γρήγορο από το απλό matrix multiplication. Και αν ξοδέψεις χρόνο να κάνεις align το κάθε block στην L2 cache, τότε θα πετύχεις τις ταχύτητες του BLAS.

 

Στο κάτω-κάτω, το Matlab δεν έχει την κρυστάλλινη σφαίρα για να βρει την απάντηση. Τρέχει κάποια συνάρτηση που έχει υλοποιηθεί σε C ή Fortran. Και οι δύο τελευταίες έχουν ΚΑΛΥΤΕΡΟΥΣ compilers από τον interpreter της Mathworks.

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

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

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