Για να βελτιώσουμε την απόδοση της παραλληλίας σε επίπεδο εντολής πρέπει να μειώσουμε το CPI ώστε να γίνει μικρότερο της μονάδας. Όμως, αν διευθετούμε μόνο μία εντολή σε κάθε κύκλο ρολογιού το CPI δεν μπορεί να μειωθεί.
Οι επεξεργαστές πολλαπλής διευθέτησης επιτρέπουν σε πολλαπλές εντολές να διευθετούνται σε ένα κύκλο ρολογιού. Η μεγαλύτερη πρόκληση για όλους τους επεξεργαστές πολλαπλής διευθέτησης είναι να προσπαθήσουν να εκμεταλλευτούν όσο γίνεται τη παραλληλία σε επίπεδο εντολής.
Υπάρχουν δύο κατηγορίες επεξεργαστών πολλαπλής διευθέτησης:
Οι υπερβαθμωτοί επεξεργαστές διευθετούν μεταβαλλόμενο αριθμό εντολών σε κάθε κύκλο ρολογιού. Αυτοί είναι είτε στατικά προγραμματισμένοι από τον μεταγλωττιστή, είτε δυναμικά χρησιμοποιώντας τις τεχνικές του πίνακα αποτελεσμάτων και του Tomasulo.
Οι VLIW επεξεργαστές διευθετούν ένα καθορισμένο αριθμό εντολών, σε κάθε κύκλο ρολογιού, διαμορφωμένο είτε σαν μια μεγάλη εντολή, είτε σαν ένα καθορισμένο πακέτο εντολών. Αυτοί είναι στατικά προγραμματισμένοι από τον μεταγλωττιστή.
Σε όλα τα παραδείγματα που θα ακολουθήσουν υποθέτουμε ότι έχουμε τις καθυστερήσεις του πίνακα 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!= μηδέν |
|
|