Πίσω

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


Το παράδειγμα αποτελείται από τα αρχεία third1.s και third2.s. Το επιπλέον στοιχείο που συναντάμε εδώ είναι η τεχνική της ανάπτυξης βρόχου.

Ο κώδικας του third1.s Ο κώδικας του third2.s
.data .data
.word 2,2,4 .word 2,2,4
.text .text
main: lw r1,$DATA(r0) main: lw r1,$DATA(r0)
lw r3,$DATA +4(r0) lw r3,$DATA +4(r0)
lw r4,$DATA +8(r0) lw r4,$DATA +8(r0)
loop: sub r4,r4,r3 sub r4,r4,r3
sw $DATA(r0),r4 sw $DATA(r0),r4
subi r1,r1,#1 sub r7,r4,r3
bnez r1,loop sw $DATA(r0),r7




Έχουμε τις προωθήσεις:

της τιμής του r3 από την εντολή lw r3,$DATA +4(r0) στη sub r4,r4,r3 της τιμής του r4 από τη sub r4,r4,r3 στη sw $DATA(r0),r4 (2 φορές),της τιμής του r1 από τη subi r1,r1,#1 στη bnez r1,loop (2 φορές). Η διακλάδωση ακολουθείται μόνο την πρώτη φορά.





Στο παράδειγμα third1.s έχουμε τις εξής καθυστερήσεις: στην εντολή sub r4,r4,r3, γιατί έχουμε κίνδυνο δεδομένων RAW στην τιμή του r1, στη sw $DATA(r0),r4 λόγω της τιμής του r4, στη bnez r1,loop λόγω του RAW κινδύνου για την τιμή του r1 (δύο φορές: μία για κάθε φορά που εκτελούνται οι εντολές).


Τα στατιστικά του third1.s



Στο παράδειγμα του third2.s εφαρμόζουμε την ανάπτυξη βρόχου στην ίδια ακολουθία εντολών. Το κέρδος που επιτυγχάνεται με την τεχνική αυτή είναι ότι οι καθυστερήσεις μειώνονται σε δύο (στην sub r4,r4,r3 λόγω της τιμής του r3 και στη sw $DATA(r0),r4 λόγω της τιμής του r4).


Τα στατιστικά του third2.s



Στο third2.s έχουμε τις προωθήσεις: της τιμής του r3 από τη lw r3,$DATA +4(r0) στη sub r4,r4,r3 της τιμής του r4, από τη sub r4,r4,r3 στις sw $DATA(r0),r4 και sub r7,r4,r3 και της τιμής του r7 από τη sub r7,r4,r3 στη sw $DATA(r0),r7.