JosefK
Πολύ δραστήριο μέλος
Ο Μιχαήλ αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Tatoo artist. Έχει γράψει 1,361 μηνύματα.
06-12-10
02:01
Κατ' αρχάς μία βαριά εφαρμογή όπως το Matlab δεν μπορεί να φορτωθεί εξ' ολοκλήρου στη μνήμη, αφενός γιατί η μνήμη σου πάει 2-4-6-8GB και αφετέρου γιατί υπάρχουν κι άλλα processes που τρέχουν και χρειάζονται και αυτά RAM.
Έπειτα, εξαρτάται καθαρά από την υλοποίηση το αν χρειάζεται μία πληροφορία να μείνει ή όχι στην RAM. Γιατί πολύ απλά ένα πρόγραμμα μπορεί να έχει δεδομένα και στην cache του επεξεργαστή και αν έχεις μία πολιτική write-back τότε σε περίπτωση που ανανεώσεις τα δεδομένα σου στην cache, δεν τα ανανεώνεις και στην RAM. Επομένως, εάν πας στην RAM και κοιτάξεις την κατάσταση του προγράμματος, μπορεί να μην είναι η πραγματική του εικόνα, καθώς μέσα στον επεξεργαστή έχεις ανανεωμένες τιμές.
Για το λόγο αυτό, μπορεί να επιλέξει ο manufacturer αυτά τα δεδομένα να τα πετάξει στο swap φερ' ειπείν και να φέρει σε εκείνες τις θέσεις κάποιες άλλες χρήσιμες πληροφορίες.
Τις caches τις αναφέρω γιατί είναι το αμέσως χαμηλότερο επίπεδο που θα πάει κάποια πληροφορία άμα φύγει απ' τους registers. Εάν όλα σου τα δεδομένα είναι στις caches, η πρόσβαση RAM δεν θα σου χρειαστεί. Αντίστοιχα, εάν έχεις περισσότερους registers (κάτι που ισχύει στην x64 αρχιτεκτονική -> πηγή) ενδέχεται να χρειαστείς λιγότερες προσβάσεις στην cache -> άρα και στην RAM.
Γιώργο γράφεις πολλά πράγματα. Για να κάνουμε μια ανακεφαλαίωση, όλος ο συλλογισμός σου ώστε να αποδείξεις ότι μπορεί σε x64 αρχιτεκτονική ένα πρόγραμμα να καταλαμβάνει λιγότερη μνήμη είναι νομίζω η τελευταία πρόταση : "Αντίστοιχα, εάν έχεις περισσότερους registers (κάτι που ισχύει στην x64 αρχιτεκτονική -> πηγή) ενδέχεται να χρειαστείς λιγότερες προσβάσεις στην cache -> άρα και στην RAM."
Θεωρητικά έχει κάποια λογική, αλλά πρακτικά νομίζω δεν έχει καμία απολύτως αξία. Πόσους registers έχει η CPU;;;
Εντελώς αμελητέο πλήθος σε σχέση με το μέθεγος της κανονικής μνήμης. Ακόμα κι αν οι compilers φτιάχνουν κώδικα μηχανής που να αξιοποιεί στο μέγιστο τους registers αυτούς, και πάλι η μνήμη που κερδίζεται λογικά δεν καλύπτει το μέγεθος της επιπλεόν μνήμης που χρησιμοποιεί η 64bit αρχιτεκτονική για τους λόγους που έχουμε αναφέρει νωρίτερα. Κι αν πάλι κάποιο πρόγραμμα για το λόγο αυτό μπορεί σε 64bit να καταλαμβάνει λιγότερη RAM, τότε σίγουρα θα πρόκειται για πρόγραμμα που ούτως ή άλλως καταλαμβάνει πολύ λίγη RAM.
Αν επιτρέπεται, όλος αυτός ο συλλογισμός για το πως σε 64bit μπορεί να μειωθεί η χρήση της RAM είναι κάτι που έχεις διαβάσει/ακούσει κάπου ή είναι δικές σου σκέψεις;
Για τα υπόλοιπα που γράφεις με μία γρήγορη ανάγνωση που τους έκανα δε βρίσκω κάτι που να διαφωνώ.
Παναγιώτη, ο λόγος για τον οποίο ζήτησα σε κάποια σημεία από το Γιώργο πηγές γι αυτά που γράφει ήταν επειδή δεν καταλάβαινα τους συλλογισμούς του. Ουσιαστικά δε με ενδιέφερε τόσο η ίδια η πηγή όσο η τεκμηρίωση αυτών που έγραφε.
edit : Ξαναρίχνω μία ματιά στα τελευταία μηνύματά σου. Στο ένα γράφεις
"Αρκετά όμως freeware και open-source προγράμματα έχουν λάβει υπόψιν τέτοιες περιπτώσεις, οπότε αντί να χρησιμοποιήσουν 2 x 32bit blocks, χρησιμοποιούν 1 x 64bit. Έτσι λοιπόν όχι μόνο δεν αυξάνεται η μνήμη που χρησιμοποιείται, αλλά πολλές φορές μπορεί να μειωθεί κιόλας"
ενώ στο τελευταίο γράφεις :
"ενδέχεται να χρειαστείς λιγότερες προσβάσεις στην cache -> άρα και στην RAM."
Δηλαδή άλλο είναι αυτό που γράφεις στο 1ο μήνυμα και άλλο αποδεικνύεις στο 2ο. Σίγουρα η αποδοτική χρήση των registers και της cache μειώνουν την πρόσβαση που απαιτείται στη RAM (αυξάνοντας έτσι την ταχύτητα), αλλά δε μειώνουν τη "μνήμη που χρησιμοποιείται" (δηλαδή τη μνήμη RAM που είναι κατηλλημένη). Αν κάνω λάθος διόρθωσέ με.
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
JosefK
Πολύ δραστήριο μέλος
Ο Μιχαήλ αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Tatoo artist. Έχει γράψει 1,361 μηνύματα.
05-12-10
03:51
Αρκετά όμως freeware και open-source προγράμματα έχουν λάβει υπόψιν τέτοιες περιπτώσεις, οπότε αντί να χρησιμοποιήσουν 2 x 32bit blocks, χρησιμοποιούν 1 x 64bit. Έτσι λοιπόν όχι μόνο δεν αυξάνεται η μνήμη που χρησιμοποιείται, αλλά πολλές φορές μπορεί να μειωθεί κιόλας, γιατί ένα πρόγραμμα μπορεί να εκμεταλλευτεί το γεγονός ότι ένας 64bit επεξεραστής έχει αυξημένο αριθμό καταχωρητών (registers - είναι κάποιου είδους μνήμης που είναι ακριβώς δίπλα στον επεξεργαστή και είναι η γρηγορότερη μνήμη στον Η/Υ σας), με αποτέλεσμα μία πληροφορία να μην χρειαστεί καν να μείνει στην μνήμη, εφόσον υπάρχει στους registers του επεξεργαστή.
Έχεις κάποια πηγή γι αυτό;
Κάθε πρόγραμμα φορτώνεται ολόκληρο στην κύρια μνήμη, όχι στους καταχωρητές του επεξεργαστή. Οι καταχωρητές χρησιμοποιούνται ώστε να γίνονται εκεί οι διάφορες αριθμητικές και λογικές πράξεις. Αυτό που λες για πληροφορία που υπάρχει στους registers και δε χρειάζεται να μείνει στη μνήμη δε το πολυκαταλαβαίνω.
Ένας απλός λόγος που σε αρχιτεκτονική περισσότερων bit το ίδιο λογισμικό μπορεί να απαιτεί περισσότερη μνήμη είναι το γεγονός ότι οι μεταβλητές τύπου pointer καταλαμβάνουν περισσότερα bytes στη μνήμη.
Θα μου πεις τώρα, γιατί αρκετές εταιρίες λοιπόν δεν ξαναγράφουν τον κώδικά τους βγάζοντας και 64-bit έκδοση, όπως φερ' ειπείν η Mathworks που έχει βγάλει Matlab και για 32-bit και για 64-bit;
Σίγουρη απάντηση δεν μπορώ να σου δώσω.
ούτε εγώ. Αυτό που υποθέτω είναι ότι θέλουν να ξαναγράψουν κομμάτια κώδικα ώστε να γίνεται καλύτερη διαχείριση μνήμης. Ακόμα και σε γλώσσες υψηλού επιπέδου όπου δε χρησιμοποιουνται εντολές που διαχειρίζονται απευθείας τη μνήμη, ο τρόπος που γράφεται ένας κώδικας μπορεί να καθορίσει πόσο αποδοτική χρήση μνήμης μπορεί να γίνει. Δεν είναι μόνο θέμα του compiler.
- Κύκλος μηχανής είναι ο χρόνος που μεσολαβεί μεταξύ δύο "χτυπημάτων" του ρολογιού της CPU. Πχ όταν λέμε CPU @ 2.00 GHz, τότε η συχνότητα του ρολογιού είναι 2 GHz, δηλαδή ο κύκλος μηχανής είναι 0.5 nsec.
- Κύκλος εντολής είναι ο χρόνος που μεσολαβεί για την εκτέλεση μίας εντολής. Συνήθως στους μοντέρνους επεξεργαστές είναι κάποιο ακέραιο πολλαπλάσιο του κύκλου μηχανής, καθώς η ... διαδικασία ολοκλήρωσης μίας εντολής έχει "τεμαχιστεί" σε πολλά υπο-στάδια, τα οποία και διαρκούν έναν κύκλο μηχανής. Π.χ. ένα κύκλο για ανάγνωση εντολής, ένα για εκτέλεση πράξης, ένα για write-back του αποτελέσματος στους registers.
Αν και δεν έχει και τόσο σημασία να παίζουμε με τους ορισμούς, το χρόνο μεταξύ δύο χτυπημάτων του ρολογιού της CPU δε το έχω δει πουθενά να αναφέρεται ως "κύκλος μηχανής". Παντού το αναφέρουν ως "κύκλο ρολογιού".
Για τον κύκλο μηχανής έχω βρει διαφορετικούς ορισμούς. Μερικοί ταυτίζουν τον όρο "κύκλο μηχανής" με τον όρο "κύκλο εντολής" ενώ μερικοί άλλοι ως κύκλο μηχανής ορίζουν το καθένα από τα επιμέρους στάδια που λες ότι περιλαμβάνονται σε ένα κύκλο εντολής. Αν δεχτούμε ως σωστό το 2ο ορισμό, και πάλι δεν είναι απόλυτο ότι καθένα από τα στάδια αυτά απαιτεί μόνο ένα κύκλο ρολογιού.
Πάντως κοίτα, εφόσον οι 64-bit επεξεργαστές μπορούν να χειριστούν πολύ μεγαλύτερο data-set, ενδέχεται κάποιες εντολές να χρειαστούν πολύ περισσότερο χρόνο για να εκτελεστούν, λ.χ. εντολές που αφορούν πράξεις κινητής υποδιαστολής. Οπότε θα πρέπει να μου πεις τι εννοείς με το "καλύτερο".
Πηγή και γι αυτό υπάρχει;;
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
JosefK
Πολύ δραστήριο μέλος
Ο Μιχαήλ αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Tatoo artist. Έχει γράψει 1,361 μηνύματα.
30-11-10
02:52
Ισχύει αυτό που λέει ο Morelo και ο Koum αλλά είναι παραπλανητικό γιατί τα windows 7 64 bit καταναλώνουν πολύ περισσότερη μνήμη από ότι τα 32 για τα ίδια πράγματα. Άρα δώρο άδωρο.
Δεν είναι παράλογο να καταναλώνουν περισσότερη μνήμη, αλλά το "δώρο άδωρο" είναι υπερβολή. Αν ήταν έτσι θα είχαμε μείνει στους επεξεργαστές των 8 bit.
Βασικά με την x64 αρχιτεκτονικής κάθε κύκλος μια εντολής μπορεί να έχει 64 bit {0 , 1} άρα σε εναν κύκλο μπορεί να εκτελέσει περισσότερα πράγματα.
Λάθος διατύπωση. Σε κάθε αρχιτεκτονική ένας κύκλος εντολής αποτελείται από μία εντολή, άρα δεν είναι ότι σε 64 bit εκτελεί περισσότερα πράγματα. Απλώς χρησιμοποιεί μεγαλύτερους καταχωρητές, άρα επεξεργάζεται δεδομένα μεγαλύτερου μεγέθους. Επιπλέον, μία εντολή που εκτελείται σε ένα κύκλο συνήθως δεν είναι αποθηκευμένη σε μία μόνο θέση μνήμης (64 bit, 32 bit ή όσο είναι τέλος πάντων μία θέση μνήμης ανάλογα με την αρχιτεκτονική του συστήματος) αλλά σε περισσότερες θέσεις μνήμης, ανάλογα τι είδους εντολή είναι.
Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.