Κεφάλαιο 2 | Ενότητα 8 | Ερωτήσεις επισκόπησης | Προηγούμενο | Επόμενο| Λεξικό όρων

Σωλήνωση λογισμικού-Συμβολική ανάπτυξη του βρόχου

   Γνωρίζουμε ότι μία τεχνική του μεταγλωττιστή, για αποκάλυψη περισσότερης παραλληλίας ανάμεσα στις εντολές, είναι η ανάπτυξη του βρόχου. Υπάρχουν άλλες δύο σημαντικές τεχνικές που αναπτύχθηκαν γι' αυτό το σκοπό. Αυτές είναι :

  1. Σωλήνωση λογισμικού.
  2. Προγραμματισμός ανίχνευσης.

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

Παράδειγμα

Για τον παρακάτω βρόχο δίνεται ο αντίστοιχος πίνακας με τις επιλεγμένες εντολές από τις διαφορετικές επαναλήψεις του βρόχου :

loop: LD F0, 0(R1) ; F0 = στοιχείο πίνακα
ADDD F4, F0, F2 ; πρόσθεση με το βαθμωτό μέγεθος του F2
SD 0(R1), F4 ; αποθήκευση του αποτελέσματος
SUBI R1, R1, #8 ; μείωση δείκτη 8 bytes (για κάθε DW)
BNEZ R1, loop; διακλάδωση R1!= μηδέν

Στον πίνακα έχουμε πέντε αντίγραφα των εντολών LD, ADDD και SD από διαφορετικές επαναλήψεις του βρόχου και ένα αντίγραφο των εντολών SUBI και BNEZ.

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


Σχήμα 1 - Λογισμική σωληνωμένη επανάληψη

Παράδειγμα

Δίνεται ο παρακάτω βρόχος:

loop: LD F0, 0(R1) ; F0 = στοιχείο πίνακα
ADDD F4, F0, F2 ; πρόσθεση με το βαθμωτό μέγεθος του F2
SD 0(R1), F4 ; αποθήκευση του αποτελέσματος
SUBI R1, R1, #8 ; μείωση δείκτη 8 bytes (για κάθε DW)
BNEZ R1, loop; διακλάδωση R1!= μηδέν

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

Απάντηση:

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

Επανάληψη i : LD F0, 0 (R1)
ADDD F4, F0, F2
SD 16(R1), F4
Επανάληψη i + 1 : LD F0, 0 (R1)
ADDD F4, F0, F2
SD 16 (R1), F4
Επανάληψη i + 2 : LD F0, 0 (R1)
ADDD F4, F0, F2
SD 16 (R1), F4
Μετά, επιλέγουμε εντολές από κάθε επανάληψη και τις τοποθετούμε στο βρόχο μαζί με τις εντολές ελέγχου, SUBI και BNEZ. Έτσι έχω :

loop: SD 0 (R1), F4 ; αποθηκεύει στο Μ[i]
ADDD F4, F0, F2 ; προσθέτει στο Μ[i-1]
LD F0, 0 (R1) ; φορτώνει το Μ[i-2]
SUBI R1, R1, #8 ;
BNEZ R1, loop;

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

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

ΔΡΑΣΤΗΡΙΟΤΗΤΑ 4

Μπορείτε να προσδιορίσετε ποιο είναι το πλεονέκτημα της σωλήνωσης λογισμικού;

 

ΑΠΑΝΤΗΣΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑΣ 4