Κεφάλαιο 4 | Ενότητα 1 | Ερωτήσεις επισκόπησης | Επόμενο| Προηγούμενο | Λεξικό όρων

Aνεξάρτητες τράπεζες μνήμης - Αποφυγή συγκρούσεων

Για να επιτευχθεί μεγαλύτερο εύρος ζώνης χρησιμοποιούνται τράπεζες μνήμης με εναλλασσόμενες σειριακές προσβάσεις. Μια γενίκευση της μεθόδου εναλλαγής είναι να επιτρέπονται πολλαπλές ανεξάρτητες προσβάσεις όπου πολλαπλοί ελεγκτές μνήμης θα επιτρέπουν στις τράπεζες να λειτουργούν ανεξάρτητα. Μ'έναν ελεγκτή μνήμης οι τράπεζες μπορούν να μοιράζονται τις γραμμές διευθύνσεων και έτσι η καθεμιά μπορεί να χρησιμοποιεί την πληροφορία που βρίσκεται στην αρτηρία μνήμης. Κάθε τράπεζα χρειάζεται ξεχωριστές γραμμές διευθυνσιοδότησης και πιθανόν άλλη αρτηρία δεδομένων. Για παράδειγμα μια συσκευή Εισόδου/Εξόδου μπορεί να χρησιμοποιήσει έναν ελεγκτή και μία τράπεζα, η ανάγνωση της κρυφής μνήμης να χρησιμοποιήσει έναν άλλον και η εγγραφή της έναν τρίτο ταυτόχρονα. Τέτοια σχεδίαση έχει νόημα να γίνει μόνο με τράπεζες μνήμης διαφορετικά οι πολλαπλές αναγνώσεις θα εξυπηρετούνται από μια μνήμη και θα έχουν μόνο μικρό όφελος από αυτή τη δυνατότητα. Όπως βλέπουμε ο όρος τράπεζα μνήμης έχει δύο διαφορετικούς ορισμούς. Γι' αυτό χρησιμοποιούμε τον όρο υπέρ-τράπεζα εννοώντας όλη την ενεργή μνήμη κατά τη μεταφορά ενός block και τον όρο τράπεζα για το μέρος της υπέρ-μνήμης που είναι εναλλασσόμενης λέξης. Το σχήμα 4.1.7, δείχνει την σχέση αυτή.

Aριθμός Υπερ-τράπεζας
Mετατόπιση Υπέρ-τράπεζας
Aριθμός Τράπεζας
Mετατόπιση τράπεζας

Σχήμα 4.1.7 - H σχέση των υπερ-τραπεζών και των τραπεζών

Aποφυγή των συγκρούσεων των τραπεζών μνήμης

  Όταν το σύστημα μνήμης είναι σχεδιασμένο να υποστηρίζει πολλαπλές ανεξάρτητες αιτήσεις (όπως στην περίπτωση των συσκευών Εισόδου/Εξόδου που έχουν απευθείας πρόσβαση στη μνήμη και μπορούν να γράφουν και να διαβάζουν δεδομένα από μη συνεχόμενες διευθύνσεις) η αποδοτικότητα του συστήματος εξαρτάται από την συχνότητα που οι ανεξάρτητες αιτήσεις πηγαίνουν σε διαφορετικές τράπεζες.

Η σειριακή προσπέλαση δεδομένων, όπως επίσης και οι προσβάσεις που οι διευθύνσεις διαφέρουν κατά περιττό αριθμό δουλεύουν καλά με την κλασσική εναλλασσόμενη μνήμη. Το πρόβλημα υπάρχει όταν η διαφορά των διευθύνσεων είναι άρτιος αριθμός γιατί τότε τα δεδομένα είναι πολύ πιθανόν να βρίσκονται στην ίδια τράπεζα. Μία λύση που προτάθηκε ήταν να μειωθεί το ποσοστό αυτό με την αύξηση του αριθμού των τραπεζών. Το πρόβλημα με αυτή τη λύση είναι ότι οι αναφορές στα δεδομένα της μνήμης δεν είναι τυχαίες και μπορούν να πάνε στην ίδια τράπεζα ανεξάρτητα από τον αριθμό των τραπεζών που υπάρχουν.

ΠαράδειγμαΠαράδειγμα

Για παράδειγμα υποθέτουμε ότι έχουμε 128 τράπεζες μνήμης και εκτελούμε τον παρακάτω κώδικα:
   

    int x[256][512]
    for (j = 0; j < 512; j = j + 1)
    for (i = 0; i < 256; i =i + 1)
    x[i][j] = 2 * x[i][j];

Απάντηση:

Με τον κώδικα αυτό διαβάζουμε όλα τα στοιχεία του πίνακα κατά στήλες, δηλαδή κατά σειρά x[0,0] , x[1,0] , x[2,0] κ.ο.κ. Τα στοιχεία αυτά όμως επειδή το 512 που είναι ο αριθμός των στηλών είναι άρτιο πολλαπλάσιο του 128 (που είναι ο αριθμός των τραπεζών), τα στοιχεία κάθε στήλης θα είναι στην ίδια τράπεζα. Πιο ειδικά, τα στοιχεία της στήλης 0 θα βρίσκονται στην τράπεζα 0, της στήλης 1 στην τράπεζα 1 κ.ο.κ. Έτσι το σύστημα θα κολλάει σε αποτυχίες της κρυφής μνήμης άσχετα με το πόσο πολύπλοκη ή σύγχρονη είναι η ΚΜΕ ή το σύστημα μνήμης.

  Για την επίλυση του προβλήματος υπάρχουν λύσεις με λογισμικό αλλά και λύσεις με υλικό. Ο μεταγλωττιστής θα μπορούσε να κάνει βελτιστοποίηση της εναλλαγής του βρόχου για να αποφύγει το πρόβλημα ή πιο απλά να επεκτείνει το μέγεθος του πίνακα ώστε αυτό να μην είναι δύναμη του 2 έτσι ώστε οι παραπάνω διευθύνσεις να πάνε σε διαφορετικές τράπεζες. Υποδηλώνει το τέλος του παραδείγματος

Η αντιστοίχηση των διευθύνσεων σε μία θέση της τράπεζας μνήμης γίνεται με τις εξής εξισώσεις των τύπων 1,2:

Αριθμός τράπεζας = (Διεύθυνση) ΜΟD (Συνολικός αριθμός τραπεζών) (τύπος 4.2)
Διεύθυνση μέσα στην τράπεζα = Διεύθυνση / Συνολικό αριθμό τραπεζών (τύπος 4.3)

Η λύση μέσω υλικού που δόθηκε για την μείωση των συγκρούσεων των τραπεζών μνήμης είναι ο περιορισμός το πλήθος των τραπεζών να είναι πρώτος αριθμός. Τέτοιοι αριθμοί απαιτούν συνήθως πολύπλοκους υπολογισμούς για να βρεθεί το υπόλοιπο και το πηλίκο αλλά υπάρχουν αρκετά σχήματα για να γίνει αυτός ο υπολογισμός γρήγορα. Σ' αυτή την περίπτωση η διαίρεση αντικαθίσταται από τον εξής υπολογισμό:

  
Διεύθυνση μέσα στην τράπεζα = (Διεύθυνση) ΜΟD (Αριθμός λέξεων στην τράπεζα)

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

Τα 3 στοιχεία μνήμης στα αριστερά του σχήματος 4.1.8, απαιτούν μια διαίρεση για την διευθυνσιοδότηση της λέξης μέσα στο στοιχείο ενώ η νέα αντιστοίχηση απαιτεί μόνο το υπόλοιπο μιας δύναμης του 2.


Σχήμα 4.1.8 - παρουσιάζονται 3 στοιχεία μνήμης (0, 1, 2) το καθένα με 8 λέξεις δείχνοντας την κλασσική σειριακή εναλλασσόμενη αντιστοίχηση στα αριστερά και τη νέα αντιστοίχηση κατά modulo στα δεξιά


ΠαράδειγμαΠαράδειγμα

   Για τη διεύθυνση 5 έχουμε:

  • Για την κλασσική αντιστοίχηση:
    Αριθμός τράπεζας = 5 MOD 3 = 2
    Διεύθυνση μέσα στην τράπεζα = 5 / 3 = 1
    'Aρα η διεύθυνση 5 αντιστοιχίζεται στην διεύθυνση 1 της τράπεζας (στοιχείου) 2.
  • Για την νέα αντιστοίχηση:
    Αριθμός τράπεζας = 5 MOD 3 = 2
    Διεύθυνση μέσα στην τράπεζα = 5 ΜΟD 8 = 5
    'Aρα η διεύθυνση 5 αντιστοιχεί στην διεύθυνση 5 της τράπεζας (στοιχείου) 2.  Υποδηλώνει το τέλος του παραδείγματος

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 8

Με ποιον τρόπο αποφεύγονται οι συγκρούσεις των τραπεζών μνήμης; Να συγκρίνετε την απάντησή σας με την παράγραφο που μόλις διαβάσατε: «Αποφυγή των συγκρούσεων των τραπεζών μνήμης».


ΔΡΑΣΤΗΡΙΟΤΗΤΑ 9

Να βρεθεί η διεύθυνση 7, σε ένα σύστημα μνήμης που χρησιμοποιεί 4 τράπεζες μνήμης (0,1,2,3), η κάθε μία με 8 λέξεις, με:
* Κλασσική αντιστοίχηση
* Νέα αντιστοίχηση

ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 9