Όλοι γνωρίζουμε, έστω σε αδρές γραμμές, τη σημασία των GHz και των πυρήνων στον επεξεργαστή. Στα χαρακτηριστικά του κάθε επεξεργαστή, όμως, θα συναντήσουμε και τη μυστηριώδη μνήμη Cache, και μάλιστα σε παραλλαγές (L2 Cache, L3 Cache κλπ). Τι είναι λοιπόν η μνήμη Cache και πώς επηρεάζει τις επιδόσεις του επεξεργαστή?
Προτάσεις συνεργασίας
Τα νέα άρθρα του PCsteps
Γίνε VIP μέλος στο PCSteps
Η ανάγκη για τη μνήμη cache
Η μνήμη cache είναι απαραίτητη σε οποιοδήποτε σύγχρονο επεξεργαστή, από τον ακριβότερο Xeon για Server μέχρι τον μικρότερο ARM για το κινητό μας.
Ο λόγος είναι η διαφορά ανάμεσα στην ταχύτητα του επεξεργαστή και της μνήμης RAM.
Όσοι γνωρίζουμε πώς λειτουργεί ο υπολογιστής ξέρουμε πως ουσιαστικά ένα πρόγραμμα φορτώνεται από το σκληρό δίσκο στη μνήμη RAM, και από εκεί ο επεξεργαστής αναλαμβάνει την εκτέλεσή του.
Ως εκ τούτου, είναι σημαντικό η ταχύτητα με την οποία η RAM να μπορεί να μεταφέρει δεδομένα να είναι όσο γίνεται πιο κοντά στην ταχύτητα με την οποία ο επεξεργαστής μπορεί να τα υπολογίσει.
Αλλιώς, αν ο επεξεργαστής είναι πολύ πιο γρήγορος, θα έχει τελειώσει την επεξεργασία και θα κάθεται άπραγος, περιμένοντας τη RAM να τελειώσει να στέλνει τα νέα δεδομένα, καθυστερώντας σημαντικά το σύστημα.
Το πρόβλημα είναι πως την τελευταία φορά που ο επεξεργαστής είχε την ίδια ταχύτητα με τη RAM ήταν το 1980.
Η λύση για αυτό ήταν ο επεξεργαστής να ενσωματώνει ένα μικρό μέγεθος πολύ ταχύτερης μνήμης cache, σαν ένα ενδιάμεσο βήμα μεταξύ της RAM και του επεξεργαστή.
Η βασική διαφορά αυτής της μνήμης cache είναι πως είναι τύπου SRAM, και όχι DRAM.
H διαφορά DRAM και SRAM
Η μνήμη που αποκαλούμε ως RAM στην πραγματικότητα είναι τύπου Dynamic RAM (DRAM).
Η DRAM έχει το πλεονέκτημα πως είναι σχετικά απλή στην κατασκευή. Κάθε bit πληροφορίας (τα 0 και τα 1 που αποτελούν το δυαδικό σύστημα) αποθηκεύεται σε έναν απειροελάχιστα μικροσκοπικό πυκνωτή, που συνοδεύεται από ένα transistor.
Κάθε chip μνήμης περιέχει δισεκατομμύρια από αυτούς τους πυκνωτές και τα transistor.
Το πρόβλημα είναι πως κάθε transistor έχει ηλεκτρικές απώλειες, και οι πυκνωτές σταδιακά αποφορτίζονται. Χρειάζεται λοιπόν να γίνεται refresh στην πληροφορία για να μην χαθεί. Ουσιαστικά η μνήμη διαβάζεται και ξαναγράφεται στο ίδιο σημείο.
Συνήθως αυτό το refresh γίνεται κάθε 64ms (χιλιοστά του δευτερολέπτου) ή και συχνότερα. Οι συνεχείς αναγνώσεις και εγγραφές για το refresh, επιβραδύνουν τη συνολική λειτουργία της DRAM.
Η SRAM (Static RAM) είναι σχεδιασμένη ώστε να μην χρειάζεται refresh. Για να διατηρούνται τα δεδομένα χρησιμοποιείται ένας περίπλοκος συνδυασμός πυκνωτών και transistors, που συνήθως περιλαμβάνει έξι πυκνωτές και transistor για κάθε ένα bit πληροφορίας.
Λόγω του ότι δεν χρειάζεται refresh η SRAM είναι σημαντικά ταχύτερη από τη DRAM. Όμως, η κατασκευή της είναι πιο περίπλοκη, που ανεβάζει πολύ το κόστος.
Ενδεικτικά, το 2010 1GB SRAM θα κόστιζε περίπου 5.000 δολάρια.
Αυτός είναι ο λόγος που η μνήμη cache στους επεξεργαστές είναι από μερικές εκατοντάδες kilobytes μέχρι μερικά megabytes.
Προσοχή! Ενώ οι σύγχρονες μνήμες αναφέρονται ως SDRAM, το “S” σημαίνει Synchronous, επειδή συγχρονίζονται με το system bus της μητρικής, δεν έχει καμία απολύτως σχέση με το Static των SRAM. Λειτουργούν κανονικά ως DRAM.
Πώς λειτουργεί η μνήμη cache στον επεξεργαστή
Για να γίνει κατανοητό το πώς ακριβώς λειτουργεί η cache, ας φέρουμε ένα παράδειγμα εκτός υπολογιστών.
Ας υποθέσουμε πως η RAM είναι μια βιβλιοθήκη πανεπιστημίου, ο επεξεργαστής είναι ένας διδακτορικός φοιτητής, και πως υπάρχει ένας βιβλιοθηκάριος.
Ας πάρουμε το παράδειγμα χωρίς cache. Ας πούμε πως ο φοιτητής χρειάζεται να δει κάτι σε ένα βιβλίο για την ανατομία. Το ζητάει στον βιβλιοθηκάριο, ο βιβλιοθηκάριος το ψάχνει στα ράφια και του το φέρνει.
Η όλη διαδικασία, το πήγαινε-έλα και η αναζήτηση, παίρνει κάποιο χρόνο, μερικά λεπτά. Όταν ο φοιτητής επιστρέψει το βιβλίο, ο βιβλιοθηκάριος το πηγαίνει στη θέση του, που επίσης έχει κάποιο κόστος σε χρόνο.
Το πρόβλημα είναι πως, αν σε μισή ώρα ο φοιτητής χρειαστεί ξανά το βιβλίο της ανατομίας, όλη η διαδικασία πρέπει να επαναληφθεί αυτούσια, και χάνεται πολύς χρόνος.
Ας πούμε τώρα πως ο βιβλιοθηκάριος έχει ένα ραφάκι κάτω από τον πάγκο, που χωράει 10 βιβλία, το οποίο συμβολίζει τη μνήμη cache.
Την πρώτη φορά που ο φοιτητής θα χρειαστεί το βιβλίο της ανατομίας, ο βιβλιοθηκάριος θα πρέπει να το βρει ανάμεσα στα εκατοντάδες χιλιάδες βιβλία της. Μόλις όμως ο φοιτητής το επιστρέψει, ο βιβλιοθηκάριος το βάζει στο ραφάκι.
Την επόμενη φορά που ο φοιτητής θα χρειαστεί ξανά το βιβλίο της ανατομίας, ο βιβλιοθηκάριος κοιτάζει στο ραφάκι, το βρίσκει εκεί, και το δίνει άμεσα, χωρίς να χάνεται τόσος χρόνος.
Μάλιστα, αν ο βιβλιοθηκάριος είναι τσίφτης και ατσίδας, μπορεί να ξέρει πως ο φοιτητής που ζήτησε το βιβλίο της ανατομίας, είναι πολύ πιθανό να χρειαστεί αμέσως μετά ένα βιβλίο πχ χειρουργικής.
Οπότε, όσο ο φοιτητής ασχολείται με το βιβλίο της ανατομίας, ο βιβλιοθηκάριος πηγαίνει και φέρνει το βιβλίο χειρουργικής, για να το έχει έτοιμο στο ραφάκι του.
Μόλις ο φοιτητής επιστρέψει το βιβλίο της ανατομίας και ζητήσει αυτό της χειρουργικής, το παίρνει άμεσα, και έχει χαθεί μηδέν χρόνος.
Αυτή είναι σε αδρές γραμμές η λειτουργία της cache. Περιέχει τις πληροφορίες που μόλις χρησιμοποίησε ο επεξεργαστής, καθώς και αυτές που θα χρειαστεί στο μέλλον, ώστε να έχει όσο γίνεται πιο γρήγορη πρόσβαση σε αυτές.
Το να βρει ο επεξεργαστής την πληροφορία που θέλει στην Cache ονομάζεται Cache Hit, αλλιώς είναι Cache Miss. Με τη χρήση περίπλοκων αλγορίθμων, σε συνδυασμό με τον κώδικα του προγράμματος, η επόμενη πληροφορία που θα χρειαστεί ο επεξεργαστής προβλέπεται σωστά σε ποσοστό μέχρι και 95%.
Μάλιστα, για τη βέλτιστη ταχύτητα, κάθε σύγχρονος επεξεργαστής έχει πολλαπλές βαθμίδες μνήμης cache. Είναι σαν ο βιβλιοθηκάριος, εκτός από το ραφάκι, να έχει ένα έπιπλο ακριβώς πίσω του που χωράει 50 βιβλία, και ένα έπιπλο λίγο παραπίσω που να χωράει 200 βιβλία.
Έτσι, σε περίπτωση που δεν βρεθεί στην πιο γρήγορη αλλά και πιο μικρή “Level 1” (L1) Cache η πληροφορία που χρειάζεται, να έχει το περιθώριο να ψάξει στην μεγαλύτερη και πιο αργή Level 2 (L2 cache) ή και την ακόμα μεγαλύτερη και ακόμα πιο αργή Level 3 (L3 cache).
Πόση μνήμη cache έχει ένας σύγχρονος επεξεργαστής
Το πόση μνήμη cache περιέχει ένας επεξεργαστής, σε πόσα επίπεδα είναι χωρισμένη, και πως είναι μοιρασμένη ανάμεσα στους πυρήνες, εξαρτάται από το σχεδιασμό του επεξεργαστή.
Αυτή τη στιγμή, όλοι οι επεξεργαστές της Intel έχουν 64KB L1 Cache (χωρισμένη σε 32KB instruction cache και 32kb data cache) και 256KB L2 Cache σε κάθε πυρήνα, ενώ η L3 cache είναι για όλους τους πυρήνες και διαφέρει ανάλογα με τον επεξεργαστή.
Αυτές οι προδιαγραφές από τον φθηνότερο διπύρηνο Intel Celeron G1620 των 35 ευρώ, ο οποίος έχει 2MB L3 cache…
…μέχρι τον τετραπύρηνο Core i5 4690, που διαθέτει 6MB μνήμη L3 cache…
…μέχρι τον Xeon E5-2697 V2 των 3200+ ευρώ, ο οποίος περιέχει 12 πυρήνες και 30MB L3 cache.
Η AMD ακολουθεί διαφορετική σχεδιαστική λογική. Ο πιο φθηνός Sempron 2650 έχει επίσης 64KB L1 cache σε κάθε πυρήνα (χωρισμένη σε instruction και write-back), αλλά έχει μόνο 1MB L2 cache που τη μοιράζονται οι πυρήνες του, και καθόλου L3 cache.
Στον πιο ακριβό της επεξεργαστή, FX-9590, με οχτώ πυρήνες, θα βρούμε την L1 instruction cache να μοιράζεται ανά δύο πυρήνες, την L1 data cache να είναι ξεχωριστή σε κάθε πυρήνα, την L3 cache να μοιράζεται ανά δύο πυρήνες σε κομμάτια των 2MB και 8MB L3 cache για όλους τους πυρήνες.
Περισσότερη μνήμη cache = καλύτερος επεξεργαστής?
Κάτι που είναι εξαιρετικά σημαντικό να θυμόμαστε, και που φαίνεται σε ένα βαθμό και από την προηγούμενη ενότητα του άρθρου, είναι πως είναι αδύνατον να συγκρίνουμε επεξεργαστές διαφορετικού σχεδιασμού με βάση οποιοδήποτε επιμέρους χαρακτηριστικό.
H Intel έχει σχεδιάσει τους επεξεργαστές της διαφορετικά από την AMD, και χρησιμοποιεί με διαφορετικούς τρόπους τη μνήμη cache.
Το ίδιο ισχύει και για οποιοδήποτε επιμέρους χαρακτηριστικό, όπως η συχνότητα ή ο αριθμός των πυρήνων. Μόνο σε επεξεργαστές της ίδιας εταιρείας, της ίδιας γενιάς και της ίδιας σειράς έχει νόημα η σύγκριση όσον αφορά συχνότητα, αριθμό πυρήνων και cache.
Μόνο οι μετρήσεις μπορούν να αναδείξουν ποιος επεξεργαστής είναι καλύτερος, και συχνά μάλιστα χρειάζονται εξειδικευμένες μετρήσεις σε συγκεκριμένα προγράμματα, για να δούμε ποιος υπερέχει πραγματικά για την εφαρμογή που μας ενδιαφέρει.
Σε επόμενο οδηγό θα αναλύσουμε το πώς μπορούμε να επιλέξουμε τον κατάλληλο επεξεργαστή για τις εφαρμογές που θέλουμε, και σε ποιες μετρήσεις να δώσουμε μεγαλύτερο βάρος.
Μείνετε συντονισμένοι!