Η ανάλυση σε επίπεδο βρόχου καθορίζει τις εξαρτήσεις μεταξύ των εντολών του κυρίου μέρους του βρόχου και όλων των επαναλήψεων του. Επίσης καθορίζει κατά πόσο τα δεδομένα των μεταγενέστερων επαναλήψεων έχουν εξάρτηση δεδομένων με τα δεδομένα που παράχθηκαν από τις αρχικές επαναλήψεις. Θα ασχοληθούμε μόνο με τις εξαρτήσεις δεδομένων, ενώ οι εξαρτήσεις ονομάτων που υπάρχουν θα αντιμετωπιστούν με τη μέθοδο της μετονομασίας. Οι υπολογισμοί σε κάθε επανάληψη είναι ανεξάρτητοι των προηγούμενων επαναλήψεων.
ΠαράδειγμαΈστω το παρακάτω τμήμα κώδικα
for (i=1; i 1000; i++)
x[i]=x[i]+s;
Απάντηση:
Στο σώμα του βρόχου υπάρχει εξάρτηση μεταξύ της παλιάς και νέας τιμής του x[i], η οποία βρίσκεται, κάθε φορά, μέσα σε μία επανάληψη. Αντιθέτως δεν υπάρχει εξάρτηση μεταξύ εντολών διαφορετικών επαναλήψεων. Επομένως ο βρόχος είναι παράλληλος. Υπενθυμίζουμε ότι για να μειωθούν οι εξαρτήσεις, μετατρέπουμε τον πηγαίο κώδικα σε γλώσσα assembly:
Στον κώδικα, μετά την ανάπτυξη, δημιουργείται εξάρτηση μεταξύ των επαναλήψεων λόγω του καταχωρητή R1.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 4
θεωρούμε το βρόχο:
Υποθέτουμε ότι οι πίνακες A, B και C είναι διαφορετικοί χωρίς επικαλύψεις. Ποιες είναι οι εξαρτήσεις δεδομένων μεταξύ των εντολών S1 και S2 στο βρόχο;
Απάντηση:
Υπάρχουν δύο διαφορετικές εξαρτήσεις :
Θα εξετάσουμε κάθε περίπτωση χωριστά, αγνοώντας κάθε φορά την ύπαρξη της άλλης.
Η πρώτη περίπτωση εξάρτησης, όπου η εντολή S1 (ή S2) εξαρτάται από την εντολή S1 (ή S2) της αμέσως προηγούμενης επανάληψης, ονομάζεται εξάρτηση που μεταφέρεται με τον βρόχο. Η εξάρτηση αυτή, παρουσιάζεται μεταξύ δύο διαδοχικών επαναλήψεων του βρόχου. Επειδή η εντολή S1 εξαρτάται από τον εαυτό της, πρέπει οι επαναλήψεις της εντολής S1 να εκτελούνται με τη σειρά προκειμένου να είναι επιτυχείς. Το ίδιο ισχύει και για την S2.
Η δεύτερη περίπτωση εξάρτησης, όπου η S2 εξαρτάται από την S1, βρίσκεται μέσα σε κάθε επανάληψη, δηλαδή στο εσωτερικό του βρόχου και άρα δεν είναι εξάρτηση που μεταφέρεται με τον βρόχο. Συνεπώς, πολλαπλές επαναλήψεις του βρόχου εκτελούνται παράλληλα, εφόσον διατηρούμε τη σειρά για κάθε ζευγάρι εντολών σε κάθε επανάληψη.
ΔΡΑΣΤΗΡΙΟΤΗΤΑ 5
ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 5 ΔΡΑΣΤΗΡΙΟΤΗΤΑ 6
Ο κώδικας του second1.s | Ο κώδικας του second2.s |
---|---|
.data .word 4,4 .text main: LW r1,$DATA(r0) LW r2,$DATA +4(r0) SUB r3,r1,#2 BNEZ r3,L1 ADD r1,r0,r0 L1: SUB r3,r2,#2 BNEZ r3,L2 ADD r1,r0,r0 L2: SUB r3,r1,r2 | .data .word 4,4 .text main: LW r1,$DATA(r0) LW r2,$DATA +4(r0) SUB r3,r1,#4 BNEZ r3,L1 ADD r1,r0,r0 L1: SUB r3,r2,#4 BNEZ r3,L2 ADD r2,r0,r0 L2: SUB r3,r1,r2 |
|
|