Πίσω

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


Το παράδειγμα αυτό είναι μια κλασσική περίπτωση εξάρτησης δεδομένων. Αποτελείται από τα αρχεία first1.s και first2.s, τα οποία είναι πανομοιότυπα, με μόνη διαφορά τις αρχικές τιμές των καταχωρητών που χρησιμοποιούν οι εντολές.

Ο κώδικας του first1.s Ο κώδικας του first2.s
.data .data
.word 0,0,5,7,8 .word 0,3,5,7,8
.text .text
main: main:
lw r2,$DATA(r0) lw r2,$DATA(r0)
lw r3,$DATA +4(r0) lw r3,$DATA +4(r0)
lw r5,$DATA +8(r0) lw r5,$DATA +8(r0)
lw r6,$DATA +12(r0) lw r6,$DATA +12(r0)
lw r8,$DATA +16(r0) lw r8,$DATA +16(r0)
add r1,r2,r3 add r1,r2,r3
beqz r1,L sub r1,r5,r6 beqz r1,L sub r1,r5,r6
L: add r7,r1,r8 L: add r7,r1,r8




Στο παράδειγμα first1 έχουμε μια καθυστέρηση ενός κύκλου λόγω της εντολής διακλάδωσης beqz r1,L και προώθηση της τιμής του r1 από την εντολή add r1,r2,r3 στη beqz r1,L. Οι τιμές των r2,r3 είναι τέτοιες ώστε να ακολουθείται η διακλάδωση και η εντολή sub να μην εκτελείται ποτέ.





Με τη βοήθεια αυτού του παραθύρου πληροφορούμαστε σχετικά με τις λειτουργίες που γίνινται στα 5 στάδια της κάθε εντολής. Η συγκεκριμένη διαφάνεια αφορά στην εντολή beqz r1,L.




Τα στατιστικά για το first1.s


Τα στατιστικά για το first2.s



Η διαφορά στο first2 είναι ότι οι τιμές των r2 και r3 είναι έτσι επιλεγμένες ώστε να αληθεύει η συνθήκη διακλάδωσης και να εκτελείται η εντολή sub r1,r5,r6. Τέλος, στο first2 γίνεται προώθηση της τιμής του r1 από τη sub στην εντολή add.