Γενικά για CPU Cache
Για να βελτιώσουν την απόδοσή τους μερικοί από τους επεξεργαστές της οικογένειας 68k
μπορούν να κρατάνε στην cache διευθύνσεις μνήμης.
Στα Caches αναφερόμαστε παντα με λογικές διευθύνσεις, συμπεριλαμβανομένου του
κώδικα συνάρτησης της πρόσβασης. Αυτό σημαίνει ότι η πρόσβαση σε User Mode και
Supervisor Mode θα δημιουργήσει διαφορετικές καταχωρήσεις Cache (παρακαλώ συμβουλευτείτε τα εγχειρίδια της Motorola
για περισσότερες πληροφορίες).
Ακολουθεί μία περιγραφή των δυνατοτήτων caching στους 68k CPU:
- 68000
τίποτα
- 68010
- Instruction Prefetch
δύο words prefetch, ένας καταχωρητής αποκωδικοποίησης word
- Loop Mode
εδώ μπαίνει όταν μία εντολή word ακολουθείται από ένα DBcc, δεν υπάρχουν
άλλες λήψεις εντολών μέχρι το τέλος του loop
- 68020
- Instruction Prefetch
μία long word
- Instruction Cache
16 γραμμές á 16 byte = 256 byte
μπορεί να ενεργοποιηθεί ή να παγώσει μέσω του CACR
- 68030
- Instruction Prefetch
μία long word
- Instruction Cache
16 γραμμές á 16 byte = 256 byte
μπορεί να ενεργοποιηθεί ή να παγώσει μέσω του CACR
- Data Cache
16 γραμμές á 16 byte = 256 byte
μπορεί να ενεργοποιηθεί ή να παγώσει μέσω του CACR
πάντα WriteThrough
επιλεγόμενο Write Allocation mode
- 68040
- Instruction Prefetch
μία long word
- Instruction Cache
256 γραμμές á 16 byte = 4096 byte
can be enabled via the CACR
- Data Cache
256 γραμμές á 16 byte = 4096 byte
μπορεί να ενεργοποιηθεί μέσω του CACR
επιλεγόμενα modes CopyBack/WriteThrough μέσω MMU
- 68060
- Instruction Prefetch
μία long word
- Instruction Cache
512 γραμμές á 16 byte = 8192 byte
μπορεί να ενεργοποιηθεί, να παγώσει και να μειωθεί στο μισό μέγεθος μέσω του CACR
- Branch Cache
μπορεί να ενεργοποιηθεί μέσω του CACR
δεν επηρρεάζεται από το MMU setup!
- Superscalar Dispatch
μπορεί να ενεργοποιηθεί μέσω του CACR
- Data Cache
512 γραμμές á 16 byte = 8192 byte
μπορεί να ενεργοποιηθεί, να παγώσει και να μειωθεί στο μισό μέγεθος μέσω του CACR
επιλεγόμενα modes CopyBack/WriteThrough μέσω MMU
- Push Buffer
μπορεί να απενεργοποιηθεί μέσω του PCR
- Store Buffer
μπορεί να ενεργοποιηθεί μέσω του CACR
Οι σελίδες δεν πρέπει να είναι NonCachable Serialized (precise)
Το πρώτο σημαντικό πράγμα που πρέπει να κατανοηθεί είναι ότι τα caches στους 68030..68060
ελέγχονται από τον Cache Control Register (CACR) και το MMU
(με την προϋπόθεση ότι το WHDLoad χρησιμοποιεί και ελέγχει το MMU)!
Στον CACR τα caches θα είναι καθολικά ενεργοποιημένα ή απενεργοποιημένα. Με τη χρήση του
MMU συγκεκριμένες Σελίδες (των 4 KByte με το WHDLoad) θα σημειωθούν για το ότι μπορούν
να είναι cached.
Στον 68030 μία σελίδα μνήμης μπορεί να είναι Cacheable ή NotCacheable. Σε έναν
68040/68060 μπορεί να είναι cachable WriteThrough, cachable CopyBack, NonCachable
(impercise) ή NonCachable Serialized (precise).
Εάν το MMU δεν χρησιμοποιηθεί από το WHDLoad, τότε ελέγχει μόνο τον CACR.
Προεπιλεγμένες Ρυθμίσεις Cache
Από προεπιλογή οι περιοχές του WHDLoad, του Slave και ExpMem σημειώνονται ως
cacheable CopyBack. Η περιοχή BaseMem σημειώνεται ως NonCachable, και τα Data
και Instruction Cache ενεργοποιούνται στον CACR. Οπότε το πρόγραμμα που βρίσκεται
στην περιοχή BaseMem τρέχει χωρίς Caches αλλά το WHDLoad και το Slave χρησιμοποιούν
τα 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 (precise). Αν το μηχάνημα
έχει 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 χρησιμοποιείται σε όλες τις (AFAIK) 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 του αρχείου προγραμματιστών.
Write Allocation
Η Write Allocation ελέγχει το χειρισμό της cache στον 68030 όταν συμβαίνει αστοχία cache
σε μία διαδικασία εγγραφής. Η Write Allocation πρέπει να είναι ενεργοποιημένη όταν μέρη του
εγκατεστημένου προγράμματος τρέχουν σε User Mode. Αν το εγκατεστημένο πρόγραμμα τρέχει μόνο σε
Supervisor Mode η Write Alloction μπορεί να απενεργοποιηθεί, που μπορεί να δώσει ένα μικρό
βοήθημα απόδοσης.
Branch Cache
Η Branch Cache είναι διαθέσιμη μόνο σε 68060. Είναι ένα είδος
cache εντολών για εντολές branch. Αλλά σε αντίθεση με την
cache εντολών δεν επηρρεάζεται από τις ρυθμίσεις του MMU! Αυτό σημαίνει ότι ακόμα και όταν
η κατάλληλη Σελίδα μνήμης έχει σημειωθεί ως Non Cacheable, οι εντολές branch
θα είναι cached εάν η Branch Cache είναι ενεργοποιημένη.
Διαβάστε τα Motorola Microprocessors User Manuals για περισσότερες πληροφορίες.
Εάν έχετε κάτι να προσθέσετε ή να διορθώσετε σε αυτή τη σελίδα παρακαλώ επικοινωνήστε μαζί μου.