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

Debate: C/C++ VS Fortran


V.I.Smirnov

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

Θα θελα να πω για τους μιγαδικούς. Αν αναλύσουμε σωστά το θέμα δεν θα υπάρχουν και προβλήματα. Κανε μια class Imagine και κανε overload τα operators +-=/... klpa. Ορίστε πήρες και έναν μιγαδικό που στο μέλλον δεν θα διαφέρει στην χρήση από ένα απλό int. Η C++ έχει αλλα ωραία που προφανώς δεν τα έχει η fortran αρκεί να την ξέρεις σωστά. Παρα πολλοί μιλάνε για την c++ ενώ δεν ξέρουν να γραφουν σαούτιν την γλώσσα και ξέρουν λίγα πράγματα θεωρητικά μονο, παρα πολλοί γραφουν procedural κώδικα σε c++ και νομίζουν ότι έτσι πρέπει να γράφονται τα προγράμματα σε c++.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 58
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Βλέπεις μονόπλευρα το ζήτημα.

Kαταρχήν, αν δεν υπάρχει άλλος λόγος (όπως απαίτηση ισχυρής διασύνδεσης με το λειτουργικό, ανάπτυξη πολύπλοκου

γραφικού interface κ.α.) γιατί να παιδευτείς με την C++ ; Είναι μάλλον μαζοχισμός.

Για την απλή περίπτωση, γίνεται όπως λες αλλά συνήθως δεν είναι αυτό το μόνο ζητούμενο.

 

Πχ. πρόσφατα έφτιαξα κάποιες ρουτίνες για Η/Μ ακτινοβολία από κεραίες.

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

Η χρήση των μιγαδικών σε πίνακες, η μίξη τους με πραγματικούς,

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

η ευκολία στον παραλληλισμό, η σαφήνεια/συντομία στην έκφραση των μαθηματικών κλπ ΔΕΝ αναπληρώνονται.

Γίνονται και στην C++ αλλά αρκετά πιο δύσκολα. Δυστυχώς έτσι είναι.

Συνήθως στον βασικό κώδικα τέτοιων προγραμμάτων η αντικειμενοστρεφής οργάνωση δίνει μικρό ως ελάχιστο

ουσιαστικό όφελος οπότε η C++ γενικά μειονεκτεί.Αν πρόκειται για ένα πραγματικά μεγάλο πρόγραμμα εμπορικής

ή βιομηχανικής χρήσης υπεισέρχονται κι άλλα κριτήρια που μπορεί να βαρύνουν προς την επιλογή της C++.

 

Ένα είναι το γεγονός : η C++ δεν είναι η καταλληλότερη για αριθμητικές διεργασίες και η χρήση της σε τέτοιες υπαγορεύεται κύρια από άλλους παράγοντες.

Αντίθετα, η Fortran υπερτερεί φανερά σ' αυτές αλλά δεν είναι κατάλληλη/διαδεδομένη για πλήρη γενική χρήση.

Στον τομέα της όμως ζει και βασιλεύει αντίθετα απ' ότι νομίζουν πολλοί απληροφόρητοι.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βλέπεις μονόπλευρα το ζήτημα.

Kαταρχήν, αν δεν υπάρχει άλλος λόγος (όπως απαίτηση ισχυρής διασύνδεσης με το λειτουργικό, ανάπτυξη πολύπλοκου

γραφικού interface κ.α.) γιατί να παιδευτείς με την C++ ; Είναι μάλλον μαζοχισμός.

Για την απλή περίπτωση, γίνεται όπως λες αλλά συνήθως δεν είναι αυτό το μόνο ζητούμενο.

 

Πχ. πρόσφατα έφτιαξα κάποιες ρουτίνες για Η/Μ ακτινοβολία από κεραίες.

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

Η χρήση των μιγαδικών σε πίνακες, η μίξη τους με πραγματικούς,

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

η ευκολία στον παραλληλισμό, η σαφήνεια/συντομία στην έκφραση των μαθηματικών κλπ ΔΕΝ αναπληρώνονται.

Γίνονται και στην C++ αλλά αρκετά πιο δύσκολα. Δυστυχώς έτσι είναι.

Συνήθως στον βασικό κώδικα τέτοιων προγραμμάτων η αντικειμενοστρεφής οργάνωση δίνει μικρό ως ελάχιστο

ουσιαστικό όφελος οπότε η C++ γενικά μειονεκτεί.Αν πρόκειται για ένα πραγματικά μεγάλο πρόγραμμα εμπορικής

ή βιομηχανικής χρήσης υπεισέρχονται κι άλλα κριτήρια που μπορεί να βαρύνουν προς την επιλογή της C++.

 

Ένα είναι το γεγονός : η C++ δεν είναι η καταλληλότερη για αριθμητικές διεργασίες και η χρήση της σε τέτοιες υπαγορεύεται κύρια από άλλους παράγοντες.

Αντίθετα, η Fortran υπερτερεί φανερά σ' αυτές αλλά δεν είναι κατάλληλη/διαδεδομένη για πλήρη γενική χρήση.

Στον τομέα της όμως ζει και βασιλεύει αντίθετα απ' ότι νομίζουν πολλοί απληροφόρητοι.

 

H STL by the way σου επιτρέπει την χρήση μιγαδικών αριθμών μέσω της complex άρα και η C++ μπορεί να γίνει βολική σε αυτή την δουλειά. Εγώ αυτό που έχω να δηλώσω είναι ότι σίγουρα κάθε γλώσσα φτιάχτηκε για κάποιο σκοπό και άλλη είναι δυνατή σε ένα σημείο και άλλη σε άλλο. Μάθε όσο το δυνατόν καλύτερα αυτή που σου αρέσει και θα κάνεις θαύματα..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

H STL by the way σου επιτρέπει την χρήση μιγαδικών αριθμών μέσω της complex άρα και η C++ μπορεί να γίνει βολική σε αυτή την δουλειά. Εγώ αυτό που έχω να δηλώσω είναι ότι σίγουρα κάθε γλώσσα φτιάχτηκε για κάποιο σκοπό και άλλη είναι δυνατή σε ένα σημείο και άλλη σε άλλο. Μάθε όσο το δυνατόν καλύτερα αυτή που σου αρέσει και θα κάνεις θαύματα..

 

Λες να μην το ξέρω για την STL ;

Αυτό δεν αναιρεί ότι είπα πριν.

Πχ. ξέρεις πόσο πιο αργά συμπεριφέρονται οι ρουτίνες της STL από τις ενδογενείς ;

Και πχ. ότι για να χειρίζεσαι τμήματα πινάκων (τα slices κατά την ορολογία της STL)

προκύπτουν μακροσκελείς εκφράσεις που δυσκολεύουν υπερβολικά την ανάγνωση και εποπτεία του κώδικα ;

 

Τα υπόλοιπα που λες τα είπαμε ήδη, εξαντλήθηκε το θέμα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

To Μathematica είναι πιο ισχυρό από το Μatlab για συμβολικούς υπολογισμούς (και δυστυχώς και πιο δύσχρηστο)...

Αλλά αυτά έχουν άλλο σκοπό από τις κλασσικές γλώσσες προγραμματισμού.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

To Μathematica είναι πιο ισχυρό από το Μatlab για συμβολικούς υπολογισμούς (και δυστυχώς και πιο δύσχρηστο)...

Αλλά αυτά έχουν άλλο σκοπό από τις κλασσικές γλώσσες προγραμματισμού.

 

Το Μathematica είναι άλλη υπόθεση, συγκρίνουμε ανόμοια πράγματα. Πάντως (γνωρίζοντας Fortran) δεν βλέπω τον ουσιαστικό λόγο πλέον (ίσως για legendary code ή μεγάλα projects που είναι δύσκολο να γίνουν recode) κάποιος να τη χρησιμοποιεί αντί του MATLAB (μη ξεχνάμε και το Octave που είναι free). Ωραία επίσης περίπτωση που έπαιζα τώρα τελευταία είναι Python με NumPy+SciPy.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Τ

Πάντως (γνωρίζοντας Fortran) δεν βλέπω τον ουσιαστικό λόγο πλέον (ίσως για legendary code ή μεγάλα projects που είναι δύσκολο να γίνουν recode) κάποιος να τη χρησιμοποιεί αντί του MATLAB (μη ξεχνάμε και το Octave που είναι free).

Ωραία επίσης περίπτωση που έπαιζα τώρα τελευταία είναι Python με NumPy+SciPy.

 

Το matlab είναι αρκετά ως πολύ πιο αργό από την fortran και την C++.

Aκόμα και ο compiled κώδικας που παράγει δεν μπορεί να συγκριθεί στην ταχύτητα με τις παραδοσιακές γλώσσες.

Και αν το αποτέλεσμα χρειάζεται μια ώρα ή δυο ή τρεις περιμένεις.

Αν θέλει όμως μια μέρα ή περισσότερο...

Πχ. σε μοντέλο που έφτιαξα πρόσφατα και που προσομοιώνει την διάδοση κύματος σε έναν άνθρωπο χρειαζόταν 4 μέρες για να λυθεί.

Με matlab ή Python θα ήθελε πολύ παραπάνω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το matlab είναι αρκετά ως πολύ πιο αργό από την fortran και την C++.

Aκόμα και ο compiled κώδικας που παράγει δεν μπορεί να συγκριθεί στην ταχύτητα με τις παραδοσιακές γλώσσες.

Και αν το αποτέλεσμα χρειάζεται μια ώρα ή δυο ή τρεις περιμένεις.

Αν θέλει όμως μια μέρα ή περισσότερο...

Πχ. σε μοντέλο που έφτιαξα πρόσφατα και που προσομοιώνει την διάδοση κύματος σε έναν άνθρωπο χρειαζόταν 4 μέρες για να λυθεί.

Με matlab ή Python θα ήθελε πολύ παραπάνω.

 

Κάνεις λάθος. Το MATLAB αν μιλάμε για vectorized κώδικα είναι πολύ πιο γρήγορο από τη C, C++ με for-loops. Υπάρχουν άπειρα παραδείγματα αν το ψάξεις.

 

Τώρα όσον αφορά τη Fortran vs MATLAB, δοκίμασε τα δύο παραδείγματα στον ίδιο υπολογιστή και πες μου πιο είναι πιο γρήγορο.

 

Fortran κώδικας

 

>
program test

REAL a(500,500), b(500,500), c(500,500), ti, t2

call cpu_time(t1)

call RANDOM_NUMBER(a)
call RANDOM_NUMBER(

do i=1,10
c = MATMUL(a,
enddo

call cpu_time(t2)
write(*,*) 'Time: ',t2-t1

end program

 

MATLAB κώδικας με χρήση for-loops, που μπορεί να βελτιωθεί.

 

>
tic
A = rand(500);
B = rand(500);
C = zeros(500);
for i = 1:10,
   C = A * B;
end
toc

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

@Τechnology Fan

 

Σε πολλές.

Όμως ο χειρισμός πινάκων από την fortran είναι πλήρης και το matlab δεν θα πρόσφερε παρά ελάχιστα παραπάνω ευκολία.

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

Το πλεονέκτημα θα ήταν η ενδογενής επεξεργασία γραφικών (visualization).

Aλλά αυτό το κάνω εκ των υστέρων μετά.

 

 

@Dr Fuzzy

 

Φίλε μου ξέρω από που πήρες το παράδειγμά σου και δεν λες και όλη την αλήθεια.

Συνοπτικά, το vectorization και ο αυτόματος παραλληλισμός εξαρτώνται από τις δυνατότητες του

εκάστοτε compiler για βελτιστοποίηση, το layout της μνήμης (L2 cache allign κλπ) και πολλούς άλλους παράγοντες.

Το matlab χρησιμοποιεί ειδικές βελτιστοποιημένες ρουτίνες που είναι γρηγορότερες από το απλό matmul.

Aν στη fortran χρησιμοποιηθεί η MKL ή κάτι σαν το lapack, θα είναι το ίδιο ή πιο γρήγορη.

Τώρα θα μου πεις ο απλός χρήστης δεν ξέρει να χρησιμοποιήσει την MKL ή το BLASS. Αυτό όμως δεν είναι αδυναμία της fortran ή της C++.

Πιο δίκαιο είναι να συγκρίνεις τον πολλαπλασιαμό πχ. με for loops και με σχήμα (ijk) που συμπίπτει με το column

major των πινάκων...

Εξάλλου το matlab δεν είναι μαγικό, βελτιστοποιημένες συναρτήσεις από βιβλιοθήκες της C και της fortran τρέχουν από κάτω.

Είναι μεγάλο το θέμα και ας μην το ανοίξουμε εδώ...

 

Πέραν αυτού, για το συνολικό στήσιμο του συγκεκριμένου προγράμματός μου το matlab δεν βόλευε.

Kανένα εμπορικό πρόγραμμα τέτοιου ή παρόμοιου είδους δεν γράφεται σε matlab για ευνόητους λόγους...

Επεξ/σία από V.I.Smirnov
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Δεν καταλαβαίνω τι εννοείς οτι δε λέω την αλήθεια! Το αρχικό παράδειγμα με μικρές αλλαγές είναι απο εδώ:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/23949

 

Μιλάμε για Fortran αυτούσια χωρίς ΒLAS κλπ. Αυτό συγκρίνω και εκεί το MATLAB είναι πιο γρήγορο.

 

Υπάρχουν επίσης αρκετές εμπορικές εφαρμογές σε MATLAB, μη ξεχνας οτι μπορείς να φτιάξεις standalone ή και server side εφαρμογή.

Επεξ/σία από Dr.Fuzzy
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Xμ...εγώ το βρήκα σε πλήθος forums που συζητούν αυτό το θέμα.

Και σ' αυτά δίνονται εξηγήσεις για το αποτέλεσμα.

 

Όσο για το άλλο, είπαμε, το matlab χρησιμοποιεί ενδογενώς βελτιστοποιημένες συναρτήσεις από βιβλιοθήκες της C και fortran.

Αλλά το θέμα δεν αφορά τα συμβολικά πακέτα,αυτά έχουν διαφορετικό σκοπό.

Με το matlab ή το mathematica δεν μπορώ να φτιάξω εκτελέσιμο πρόγραμμα και να το δώσω σε πελάτες, είναι μόνον για το εργαστήριο.

Δεν αμφισβητώ την χρησιμότητά τους σε καμιά περίπτωση....

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

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