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

Τι λειτουργεί λανθασμένα στην υλοποίηση του ενός κύκλου

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

α)Να προσδιορίσετε τι είναι αυτό που καθορίζεται το μήκος του κύκλου ρολογιού.
β)Για ποιο λόγο η συνολική απόδοση της υλοποίησης της διόδου δεδομένων με χρήση ενός κύκλου ρολογιού για κάθε εντολή, δεν είναι καλή;
Να αιτιολογήσετε την απάντησή σας.

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


Παράδειγμα
Να υποθέσετε ότι ο χρόνος λειτουργίας για τις βασικές μονάδες στην υλοποίηση είναι:

Μονάδες μνήμης : 10ns
ALU και αθροιστές : 10 ns
Αρχείο καταχωρητών (για εγγραφή ή ανάγνωση) : 5ns

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

1. Μία υλοποίηση στην οποία κάθε εντολή λειτουργεί σε ένα κύκλο ρολογιού συγκεκριμένου μήκους.
2. Μία υλοποίηση όπου κάθε εντολή εκτελείται σε ένα κύκλο ρολογιού, χρησιμοποιώντας ένα "μεταβλητό" ρολόι, έτσι ώστε να χρησιμοποιεί κάθε φορά όσο χρόνο χρειάζεται. (Μια τέτοια προσέγγιση δεν είναι πρακτικά εύκολη, αλλά μας επιτρέπει να δούμε τι χάνουμε όταν όλες οι εντολές πρέπει να εκτελεστούν σε ένα κύκλο ρολογιού του ίδιου μήκους.)

Απάντηση

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

χρόνος εκτέλεσης ΚΜΕ = πλήθος εντολών x CPI x χρόνος κύκλου ρολογιού

Αφού το CPI είναι 1, μπορούμε να απλοποιήσουμε την παραπάνω εξίσωση ως εξής :

χρόνος εκτέλεσης ΚΜΕ = πλήθος εντολών x χρόνος κύκλου ρολογιού

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

Τύπος εντολής Λειτουργικές μονάδες που χρησιμοποιούνται από τις εντολές
Τύπου R
Ανάκληση εντολής
Προσπέλαση καταχωρητή
ALU
Προσπέλαση καταχωρητή
.
Φόρτωση
Ανάκληση εντολής
Προσπέλαση καταχωρητή
ALU
Προσπέλαση μνήμης
Προσπέλαση καταχωρητή
Αποθήκευση
Ανάκληση εντολής
Προσπέλαση καταχωρητή
ALU
Προσπέλαση μνήμης
.
Διακλάδωση
Ανάκληση εντολής
Προσπέλαση καταχωρητή
ALU
.
.
Μεταπήδηση
Ανάκληση εντολής
.
.
.
.

Χρησιμοποιώντας τις "κρίσιμες" διαδρομές, μπορούμε να υπολογίσουμε το απαιτούμενο μήκος του κύκλου ρολογιού, για κάθε τύπο εντολής :

Τύπος εντολής Μνήμη εντολών Ανάγνωση του καταχωρητή Λειτουργία ALU Μνήμη δεδομένων Εγγραφή του καταχωρητή Συνολικά
Τύπου R
10
5
10
0
5
30ns
Φόρτωση
10
5
10
10
5
40ns
Αποθήκευση
10
5
10
10
.
35ns
Διακλάδωση
10
5
10
0
.
25ns
Μεταπήδηση
10
.
.
.
.
10ns

Επομένως ο κύκλος ρολογιού για έναν υπολογιστή με σταθερό κύκλο είναι 40ns για όλες τις εντολές, ενώ για έναν υπολογιστή με μεταβλητό κύκλο ρολογιού είναι ανάμεσα στα 10ns και 40ns.

Μπορούμε να υπολογίσουμε το μέσο μήκος του κύκλου ρολογιού για έναν υπολογιστή με μεταβλητό μήκος στον κύκλο ρολογιού, χρησιμοποιώντας τους παραπάνω πίνακες και τη συχνότητα εμφάνισης μιας εντολής. Θεωρώντας γνωστές τις συχνότητες εμφάνισης των εντολών, έχουμε: 22% για τις εντολές φόρτωσης, 11% για τις εντολές αποθήκευσης, 49% για τις εντολές τύπου R, 16% για τις εντολές διακλάδωσης και 2% για τις εντολές μεταπήδησης.

Έτσι ο μέσος χρόνος για κάθε εντολή με μεταβλητό κύκλο ρολογιού είναι:

Κύκλος ρολογιού ΚΜΕ = 40x22% + 35x11% + 30x49% + 25x16% +10x2% = 31.6 ns

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

(Όπου IC = πλήθος εντολών)

Επομένως η υλοποίηση με μεταβλητό κύκλο ρολογιού είναι ταχύτερη κατά 1.27 φορές.

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

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

Ακολουθεί ένα παράδειγμα για την υλοποίηση μιας μονάδας με κινητή υποδιαστολή.

Παράδειγμα
Υποθέτουμε ότι έχουμε μια μονάδα κινητής υποδιαστολής η οποία χρειάζεται 20 ns για την πρόσθεση των αριθμών κινητής υποδιαστολής και 60 ns για τον πολλαπλασιασμό κλασματικών αριθμών. Όλοι οι άλλοι χρόνοι στις λειτουργικές μονάδες είναι ίδιοι με το προηγούμενο παράδειγμα και η εντολή κινητής υποδιαστολής είναι παρόμοια με μια αριθμητική και λογική εντολή, με τη διαφορά ότι χρησιμοποιεί την ALU κινητής υποδιαστολής αντί για την ALU που είχαμε μέχρι τώρα. Χρησιμοποιώντας τις συχνότητες εμφάνισης των εντολών, να βρείτε το λόγο των αποδόσεων ανάμεσα στην εφαρμογή με διαφορετικό κύκλο ρολογιού για κάθε τύπο εντολής και στην εφαρμογή στην οποία όλες οι εντολές έχουν τον ίδιο κύκλο ρολογιού. Να υποθέσετε ότι :

Απάντηση

Από το προηγούμενο παράδειγμα γνωρίζουμε ότι:

Ο κύκλος ρολογιού σε εφαρμογή ενός κύκλου είναι ίσος με τον μεγαλύτερο χρόνο που χρειάζεται μια εντολή, ο οποίος είναι ο χρόνος εκτέλεσης της εντολής του πολλαπλασιασμού αριθμών κινητής υποδιαστολής. Ο χρόνος που απαιτείται για τον πολλαπλασιασμό αριθμών κινητής υποδιαστολής, και ορίζει επομένως τον κύκλο ρολογιού, είναι : 10 + 5 + 60 + 5 = 80 ns.
Έστω ένα υπολογιστής στον οποίο οι εντολές έχουν διαφορετικό κύκλο ρολογιού. Ο χρόνος που απαιτείται για μία εντολή πρόσθεσης κινητής υποδιαστολής είναι 10 + 5 + 20 + 5 = 40 ns. Εάν πάρουμε τη συχνότητα εμφάνισης των εντολών, έχουμε 26% εντολές φόρτωσης, 14% εντολές αποθήκευσης, 31% εντολές τύπου R, 8% εντολές διακλάδωσης, 2% εντολές μεταπήδησης και 19% εντολές κινητής υποδιαστολής (από τις οποίες το 9% είναι πολλαπλασιασμοί και διαιρέσεις και το 10% είναι προσθέσεις, αφαιρέσεις και συγκρίσεις). Έτσι το μέσο μήκος του κύκλου ρολογιού είναι :

Κύκλος ρολογιού ΚΜΕ = 40x26% + 35x14% + 30x31% + 25x8% + 10x2% + 80x9% + 40x10% = 38.0 ns

Η βελτίωση στην απόδοση είναι :

Επομένως ένα μεταβλητό ρολόι βελτιώνει την απόδοση περισσότερο από το διπλάσιο.

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

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

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

Ποια είναι τα μειονεκτήματα όταν χρησιμοποιούμε υλοποίηση ενός κύκλου ρολογιού και τι συμπεραίνετε σχετικά με την απόδοση. Να αιτιολογήσετε την απάντηση σας και να υποδείξετε εναλλακτικούς τρόπους υλοποίησης.

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