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

Προγραμματισμός μεταγλωττιστή για κίνδυνους δεδομένων

  

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

· Θυμάστε τον τρόπο που δημιουργείται ο κώδικας για την εκτέλεση της πράξης:
Α = Β + C
όπου A, B, C είναι διευθύνσεις μνήμης; Για περισσότερες λεπτομέρειες καλό θα ήταν να ανατρέξετε στις σημειώσεις «Αρχιτεκτονική Υπολογιστών Ι» και συγκεκριμένα στο 2ο κεφάλαιο: «Αρχιτεκτονικές Συνόλου Εντολών».
· Να γράψετε την ακολουθία εντολών η οποία εκτελεί την παραπάνω πράξη.

 

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


  Το τυπικό σχέδιο δημιουργίας ενός κώδικα για μία πράξη όπως A = B + C όπου Α, Β, C είναι διευθύνσεις στη μνήμη, παράγει καθυστέρηση για μία φόρτωση της δεύτερης τιμής δεδομένων της C. Στο σχήμα 1.5.1 παρουσιάζεται η ακολουθία εντολών στον υπολογιστή DLX, για την πράξη της πρόσθεσης.

Σχήμα 1.5.1 - Η ακολουθία κώδικα DLX υπολογιστή για την εντολή A = B + C . Η ADD εντολή πρέπει να καθυστερήσει έτσι ώστε να επιτρέψει στη φόρτωση της C να ολοκληρωθεί. Η SW δεν χρειάζεται να καθυστερήσει άλλο, επειδή το υλικό προώθησης περνά το αποτέλεσμα από τον καταχωρητή MEM/WB απευθείας στην είσοδο της μνήμης δεδομένων για αποθήκευση.

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

Παράδειγμα

Δημιουργήστε DLX κώδικα που αποφεύγει τις καθυστερήσεις σωλήνωσης για την παρακάτω ακολουθία:

a = b + c;
d = e – f ;

όπου a, b, c, d, e, f είναι διευθύνσεις μνήμης. Υποθέστε ότι οι φορτώσεις έχουν αδράνεια ενός κύκλου ρολογιού.

Απάντηση:
Ο κώδικας για τη δεδομένη ακολουθία εντολών , ώστε να αποφεύγονται οι καθυστερήσεις είναι:
LW Rb, b
LW Rc, c
LW Re, e ; ανταλλαγή της θέσης των εντολών για αποφυγή της καθυστέρησης
ADD Ra, Rb, Rc
LW Rf, f
SW a, Ra ; ανταλλαγή αποθήκευσης/φόρτωσης για να αποφύγουμε καθυστερήσεις
SUB Rb, Re, Rf
SW d, Rd

Παρατηρήστε ότι η χρήση διαφορετικών καταχωρητών για την πρώτη και δεύτερη δήλωση είναι απαραίτητη, για να είναι σωστός ο προγραμματισμός. Αν η μεταβλητή e φορτωνόταν στον ίδιο καταχωρητή με τη μεταβλητή b ή τη μεταβλητή c, ο προγραμματισμός δε θα ήταν σωστός.