[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
Γενικά για CPU Cache
Για να βελτιώσουν την απόδοσή τους μερικοί από τους επεξεργαστές της οικογένειας 68k
μπορούν να κρατάνε στην cache διευθύνσεις μνήμης.
Στα Caches αναφερόμαστε παντα με λογικές διευθύνσεις, συμπεριλαμβανομένου του
κώδικα συνάρτησης της πρόσβασης. Αυτό σημαίνει ότι η πρόσβαση σε User Mode και
Supervisor Mode θα δημιουργήσει διαφορετικές καταχωρήσεις Cache (παρακαλώ συμβουλευτείτε τα εγχειρίδια της Motorola
για περισσότερες πληροφορίες).
Ακολουθεί μια περιγραφή των δυνατοτήτων caching στους 68k CPU:
- 68000
τίποτα
- 68010
- Instruction Prefetch
δύο words prefetch, ένας καταχωρητής αποκωδικοποίησης word
- Loop Mode
εδώ μπαίνει όταν μια εντολή word ακολουθείται από ένα loop DBcc στην προηγούμενη
εντολή, και δεν γίνονται άλλες λήψεις εντολών μέχρι το τέλος του loop
- 68020
- Instruction Prefetch
μία long word
- Instruction Cache
16 γραμμές á 16 byte = 256 byte
μπορεί να ενεργοποιηθεί ή να παγώσει μέσω του CACR
Η λειτουργία Burst εξαναγκάζει όλες τις γραμμές cache να αναγνωστούν αμέσως αν το υποστηρίζει το hardware
- 68030
- Instruction Prefetch
μία long word
- Instruction Cache
16 γραμμές á 16 byte = 256 byte
μπορεί να ενεργοποιηθεί ή να παγώσει μέσω του CACR
- Data Cache
16 γραμμές á 16 byte = 256 byte
μπορεί να ενεργοποιηθεί ή να παγώσει μέσω του CACR
πάντα WriteThrough
επιλεγόμενη λειτουργία Write Allocation για εξαναγκασμό εγγραφής λειτουργιών άλλων
καταχωρήσεων user/supervisor ώστε να ακυρωθούν
- 68040
- Instruction Prefetch
μία long word
- Instruction Cache
256 γραμμές á 16 byte = 4096 byte
μπορεί να ενεργοποιηθεί μέσω του CACR
- Data Cache
256 γραμμές á 16 byte = 4096 byte
μπορεί να ενεργοποιηθεί μέσω του CACR
επιλεγόμενες λειτουργίες CopyBack/WriteThrough μέσω MMU
- 68060
- Instruction Prefetch
μία long word
- Instruction Cache
512 γραμμές á 16 byte = 8192 byte
μπορεί να ενεργοποιηθεί, να παγώσει και να μειωθεί στο μισό μέγεθος μέσω του CACR
- Branch Cache
μπορεί να ενεργοποιηθεί μέσω του CACR
δεν επηρρεάζεται από την ρύθμιση MMU!
- Superscalar Dispatch
μπορεί να ενεργοποιηθεί μέσω του CACR
- Data Cache
512 γραμμές á 16 byte = 8192 byte
μπορεί να ενεργοποιηθεί, να παγώσει και να μειωθεί στο μισό μέγεθος μέσω του CACR
επιλεγόμενες λειτουργίες CopyBack/WriteThrough μέσω MMU
- Push Buffer
μπορεί να απενεργοποιηθεί μέσω του PCR
- Store Buffer
μπορεί να ενεργοποιηθεί μέσω του CACR
Οι σελίδες δεν πρέπει να είναι NonCachable Serialized (ακριβώς)
Το πιο σημαντικό πράγμα που πρέπει να κατανοηθεί είναι ότι τα caches στους 68030..68060
ελέγχονται από τον Cache Control Register (CACR) και η MMU!
Στον CACR τα caches θα είναι καθολικά ενεργοποιημένα ή απενεργοποιημένα. Με τη χρήση της
MMU μεμονωμένες Σελίδες (των 4 KByte με το WHDLoad) θα σημειωθούν πως μπορούν να είναι cached.
Στον 68030 μία σελίδα μνήμης μπορεί να είναι Cacheable ή NotCacheable. Σε έναν
68040/68060 μπορεί να είναι cachable WriteThrough, cachable CopyBack, NonCachable
(ασαφώς) ή NonCachable Serialized (ακριβώς).
Εάν το MMU δεν χρησιμοποιηθεί από το WHDLoad, τότε ελέγχει μόνο τον CACR.
Προεπιλεγμένες Ρυθμίσεις Cache
Από προεπιλογή οι περιοχές του WHDLoad, του Slave και ExpMem σημειώνονται ως
cacheable CopyBack. Η περιοχή BaseMem σημειώνεται ως NonCachable, και τα Data
και Instruction Cache ενεργοποιούνται στον CACR. Οπότε το πρόγραμμα που βρίσκεται
στην περιοχή BaseMem τρέχει χωρίς Caches αλλά το WHDLoad, το Slave και η ExpMem χρησιμοποιούν
τα Caches για καλύτερη απόδοση. Εάν η MMU δεν χρησιμοποιείται από το WHDLoad αυτή η ρύθμιση
έχει ως αποτέλεσμα να απενεργοποιηθούν όλα τα Caches γιατί χωρίς την MMU δεν είναι δυνατό να ρυθμιστούν
διαφορετικά ξεχωριστές περιοχές μνήμης, οπότε εάν κάποια περιοχή έχει οριστεί ως NonCacheable τότε
όλα τα Caches πρέπει να απενεργοποιηθούν.
Έλεγχος Cache για Προγραμματιστές
Υπάρχουν δύο συναρτήσεις resload που ελέγχουν τα Caches: resload_SetCACR
και resload_SetCPU. Η resload_SetCACR είναι η
ιστορικά παλιότερη ρουτίνα και μπορεί να αντικατασταθεί πλήρως από την resload_SetCPU (Το WHDLoad
εσωτερικά κρατάει τις παραμέτρους της resload_SetCACR και καλεί την resload_SetCPU).
Τελικά η χρήση της resload_SetCACR συνιστάται για όλους τους ανθρώπους που δεν ξέρουν
αρκετά για τα Caches και τη συμπεριφορά τους σε ένα σύστημα Amiga. Χρησιμοποιώντας
την resload_SetCACR τα instruction και data cache μπορούν ανεξάρτητα να ενεργοποιηθούν ή
να απενεργοποιηθούν. Η resload_SetCACR επηρρεάζει μόνο τη δυνατότητα cache της περιοχής BaseMem.
Έλεγχος Cache για Χρήστες
Αν ο προγραμματιστής έχει κάνει καλά τη δουλειά του τότε ο χρήστης δεν έχει τίποτα να κάνει
σχετικά με τα Caches γιατί όλες οι απαραίτητες ρυθμίσεις έχουν ήδη γίνει από το
Slave.
Ωστόσο ίσως υπάρχουν δύο λόγοι για να αλλάξει χειροκίνητα η ρύθμιση Cache.
Πρώτον να κάνετε μια εγκατάσταση να δουλέψει σωστά γιατί έχει πρόβλημα επειδή τρέχει πολύ
γρήγορα (π.χ. δημιουργεί παράσιτα στα γραφικά) και δεύτερον για να κάνετε ένα εγκατεστημένο
πρόγραμμα πιο γρήγορο.
Για να κάνετε ένα πρόγραμμα που δεν λειτουργεί να λειτουργήσει, η επιλογή
NoCache μπορεί να χρησιμοποιηθεί. Αυτή η επιλογή
απενεργοποιεί όλα τα τα caches και σημειώνει όλη τη μνήμη ως NonCachable Serialized (ακριβώς). Αν το μηχάνημα
έχει 32-bit Chip-Memory θα συνεχίσει να είναι γρηγορότερο από μία αυθεντική A500.
Για να κάνετε ένα εγκατεστημένο πρόγραμμα γρηγορότερο μπορούν να οριστούν μερικές επιλογές που θα ενεργοποιήσουν
τα Caches. Αυτό θα αντικαταστήσει τις ρυθμίσεις του Slave. Σε έναν 68020 η επιλογή
Cache μπορεί να οριστεί. Σε 68030 επίσης η επιλογή
DCache μπορεί να οριστεί που συμπεριλαμβάνει την επιλογή Cache.
Στον 68060 υπάρχουν περισσότερες επιλογές: BranchCache,
StoreBuffer και
SuperScalar. Η επιλογή
ChipNoCache/S μπορεί να βελτιώσει την απόδοση
σε 68040 και 68060, δείτε παρακάτω.
Δυνατότητα Cache της Μνήμης Chip
Η δυνατότητα cache μπορεί να οριστεί όχι μόνο για τον ίδιο τον επεξεργαστή (CACR) και τις ρυθμίσεις της MMU,
αλλά επίσης και για εξωτερικό hardware. Ο CPU δίνει σήμα στο bus αν προσπαθεί να
βάλει στην cache μια πρόσβαση. Και το εξωτερικό hardware μπορεί να στείλει σήμα στον CPU (μετά από
τοποθέτηση μιας διεύθυνσης στο address bus κατά τη διάρκεια πρόσβασης μνήμης) ότι κάποια
πρόσβαση δεν πρέπει να μπεί στην cache.
Ο μηχανισμός που το hardware στέλνει σήμα στην CPU ότι η μνήμη πρέπει ή δεν πρέπει
να μπει στη cache χρησιμοποιείται σε όλες τις (όσο ξέρω) Amiga και τα CPU-Boards που περιέχουν
CPU >= 68030 (επειδή έχουν data cache). Επηρρεαζόμενες είναι όλη η
Chip-Memory και το IO-Space (Cia/Custom/RTC) που δεν πρέπει να μπουν στη cache
από το data cache. Αυτό είναι απαραίτητο για να αποφευχθούν ασυμφωνίες της cache, για
παράδειγμα λόγω δραστηριότητας DMA.
Η αντίδραση του CPU σε μια άρνηση από hardware για τοποθέτηση πρόσβασης στην cache
διαφέρει σε διαφορετικούς CPU. Στον 68030 δεν υπάρχει επίπτωση στην απόδοση της
πρόσβασης, τα δεδομένα απλά δεν θα μπούν στη cache. Στον 68040 οι προσβάσεις ανάγνωσης θα γίνουν
σε πλήρη ταχύτητα αλλά οι προσβάσεις εγγραφής (CopyBack) θα
ακυρωθούν και θα ξεκινήσουν πάλι χωρίς να μπαίνουν στη cache
με αποτέλεσμα περίπου 5 φορές (εξαρτάται από το
hardware και την ταχύτητα της CPU) αργότερη πρόσβαση σε σύγκριση
με μία πρόσβαση χωρίς cache. Στον 68060 οι προσβάσεις ανάγνωσης και εγγραφής θα ακυρωθούν
και θα ξεκινήσουν πάλι. Οι προσβάσεις ανάγνωσης
θα είναι περίπου 3 φορές αργότερες και οι προσβάσεις εγγραφής θα είναι περίπου 5 φορές αργότερες.
Τα αναφερόμενα θέματα σχετίζονται με προσβάσεις δεδομένων. Οι προσβάσεις εντολών συνήθως
δεν επηρρεάζονται και είναι cacheable μέσα στην Chip-Memory.
Υπάρχει κάποιο (ίσως προβληματικό) hardware που δεν επιτρέπει εντολές να
μπαίνουν στη cache από την Chip-Memory. Σε τέτοιο hardware η επιλογή ChipNoCache/S πρέπει να χρησιμοποιηθεί για να
αποφευχθεί μεγάλη καθυστέρηση στην ταχύτητα εκτέλεσης γιατί διαφορετικά οι προσβάσεις εντολών θα είναι
περίπου 2 φορές αργότερες.
Αυτή η συμπεριφορά μπορεί να ελεχθεί εκτελώντας την Speed.Slave
που περιέχεται στον κατάλογο src/memory-speed του αρχείου προγραμματιστών.
Burst Mode
Η λειτουργία Burst στον 68030 αναφέρει στην CPU να διαβάσει πάντα μια
γεμάτη γραμμή cache (16 bytes), εάν προκύψει μια έλλειψη cache αντί για μια μόνο long word
που ζητήθηκε. Η λειτουργία Burst θα πρέπει να υποστηρίζεται από το hardware, αν όχι τότε
δεν γίνεται κάποιο Burst χωρίς κάποια ποινή στον συγχρονισμό. Η λειτουργία Burst μπορεί
να ενεργοποιηθεί ξεχωριστά για την instruction και data cache. Επειδή η πρόσβαση Burst
χρειάζεται περισσότερο χρόνο από μια απλή πρόσβαση, η λειτουργία Burst δίνει μόνο ένα
πλεονέκτημα επίδοσης, εάν οι περισσότερες από της καταχωρήσεις στην γραμμή cache έχουν
χρησιμοποιηθεί πριν καθαριστούν οι γραμμές cache. Για την instructions cache η λειτουργία
Burst συνήθως βελτιώνει την επίδοση. Για την data cache, συχνά μόνο σε σενάρια όπου γίνονται
συνεχείς αναγνώσεις μνήμης. Το WHDLoad ενεργοποιεί την instruction Burst μαζί με την instruction
cache, ξεκινώντας από την έκδοση 18.0. Η data Burst δεν θα ενεργοποιηθεί από το WHDLoad.
Write Allocation
Η Write Allocation ελέγχει το χειρισμό της cache στον 68030 όταν συμβαίνει αστοχία cache
σε μια διαδικασία εγγραφής. Η Write Allocation πρέπει να είναι ενεργοποιημένη όταν μέρη του
εγκατεστημένου προγράμματος τρέχουν σε User Mode. Αν το εγκατεστημένο πρόγραμμα τρέχει μόνο σε
Supervisor Mode, η Write Allocation μπορεί να απενεργοποιηθεί, όπου μπορεί να δώσει ένα μικρό
βοήθημα απόδοσης.
Branch Cache
Η Branch Cache είναι διαθέσιμη μόνο σε 68060. Είναι ένα είδος
cache εντολών για εντολές branch. Αλλά σε αντίθεση με την
cache εντολών δεν επηρρεάζεται από τις ρυθμίσεις της MMU! Αυτό σημαίνει ότι ακόμα και όταν
η κατάλληλη σελίδα μνήμης έχει σημειωθεί ως Non Cacheable, οι εντολές branch
θα είναι cached εάν η Branch Cache είναι ενεργοποιημένη.
Διαβάστε τα Motorola Microprocessors User Manuals για περισσότερες πληροφορίες.
Εάν έχετε κάτι να προσθέσετε ή να διορθώσετε σε αυτή τη σελίδα παρακαλώ επικοινωνήστε μαζί μου.
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]