Πίσω

Παράδειγμα

   Αναπτύξτε τον παραπάνω βρόχο, χωρίς προγραμματισμό και με προγραμματισμό, ώστε να υπάρχουν τέσσερα αντίγραφα του σώματος του βρόχου (LD, ADDD, SD) υποθέτοντας ότι ο R1 είναι αρχικά πολλαπλάσιο του 32, δηλαδή ότι ο αριθμός των επαναλήψεων του βρόχου είναι πολλαπλάσιο του 4. Μειώστε τυχόν περιττούς υπολογισμούς και χρησιμοποιήστε κάθε καταχωρητή μία φορά.

Aπάντηση

Με ανάπτυξη του βρόχου και χωρίς προγραμματισμό, έχουμε:

Συγχωνεύουμε τις SUBI εντολές και παραλείπουμε τις μη αναγκαίες BNEZ εντολές. Έχουμε εξαλείψει τρεις εντολές διακλάδωσης (BNEZ) και τρεις εντολές ελάττωσης (SUBI) του R1. Οι διευθύνσεις των εντολών φόρτωσης (loads) και αποθήκευσης (stores) μας επέτρεψαν να συγχωνεύσουμε τις SUBI εντολές με κατάλληλη τιμή στον R1. Χωρίς προγραμματισμό, κάθε εντολή ακολουθείται από μία εξαρτώμενη εντολή, με αποτέλεσμα τη δημιουργία καθυστέρησης. Αυτός ο βρόχος, θα εκτελεστεί σε 28 κύκλους ρολογιού αφού:

  • Κάθε εντολή LD έχει καθυστέρηση κατά ένα κύκλο ρολογιού.
  • Κάθε εντολή ADDD έχει καθυστέρηση κατά δύο κύκλους ρολογιού.
  • Η εντολή SUBI έχει καθυστέρηση κατά ένα κύκλο ρολογιού.
  • Η εντολή διακλάδωσης BNEZ έχει καθυστέρηση κατά ένα κύκλο ρολογιού.

Επιπλέον, χρειάζονται 14 κύκλοι ρολογιού για την διευθέτηση της κάθε εντολής ή 7 κύκλοι ρολογιού για κάθε ένα από τα τέσσερα αντίγραφα του βρόχου. Αυτή η ανάπτυξη βρόχου είναι πιο αργή από τον αρχικό βρόχο με προγραμματισμό. Εάν προγραμματίσουμε τον ανεπτυγμένο βρόχο, τότε θα έχουμε βελτίωση της επίδοσης.
Με ανάπτυξη του βρόχου και προγραμματισμό, έχουμε:

Συγκεντρωτικά έχουμε:
Χωρίς προγραμματισμό και χωρίς ανάπτυξη βρόχου 10 κύκλους ρολογιού.
Με προγραμματισμό και χωρίς ανάπτυξη βρόχου 6 κύκλους ρολογιού.
Με ανάπτυξη βρόχου και χωρίς προγραμματισμό 28 ή 7 κύκλους ρολογιού ανά αντίγραφο.
Με ανάπτυξη βρόχου και με προγραμματισμό 14 ή 3.5 κύκλους ρολογιού ανά αντίγραφο.

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