ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 2
Το τυπικό σχέδιο δημιουργίας ενός κώδικα για μία πράξη όπως A = B + C όπου Α, Β, C είναι διευθύνσεις στη μνήμη, παράγει καθυστέρηση για μία φόρτωση της δεύτερης τιμής δεδομένων της C. Στο σχήμα 1.5.1 παρουσιάζεται η ακολουθία εντολών στον υπολογιστή DLX, για την πράξη της πρόσθεσης.
Σχήμα 1.5.1 - Η ακολουθία κώδικα DLX υπολογιστή για την εντολή A = B + C . Η ADD εντολή πρέπει να καθυστερήσει έτσι ώστε να επιτρέψει στη φόρτωση της C να ολοκληρωθεί. Η SW δεν χρειάζεται να καθυστερήσει άλλο, επειδή το υλικό προώθησης περνά το αποτέλεσμα από τον καταχωρητή MEM/WB απευθείας στην είσοδο της μνήμης δεδομένων για αποθήκευση.
Ο μεταγλωττιστής σε έναν σωληνωμένο υπολογιστή προσπαθεί να προγραμματίσει τη σωλήνωση, έτσι ώστε να αποφύγει τις καθυστερήσεις, αλλάζοντας τη σειρά εκτέλεσης των εντολών για να εξαλείψει των κίνδυνο δεδομένων. Για παράδειγμα ο μεταγλωττιστής μπορεί να δοκιμάσει να αποφύγει να παράγει ένα κώδικα με μια εντολή φόρτωσης, η οποία θα ακολουθείται από την άμεση χρήση του καταχωρητή προορισμού της εντολής φόρτωσης. Η τεχνική αυτή ονομάζεται προγραμματισμός σωλήνωσης ή προγραμματισμός εντολών.
Παράδειγμα a = b + c; Απάντηση:
Δημιουργήστε DLX κώδικα που αποφεύγει τις καθυστερήσεις σωλήνωσης για την παρακάτω ακολουθία:
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, ο προγραμματισμός δε θα ήταν σωστός.
|
|