ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2 5ο μάθημα: πρόβλεψη διακλάδωσης, διαφοροποιημένη διοχέτευση, χρονοπρογραμματισμός Αρης Ευθυμίου Πηγές διαφανειών: συνοδευτικές διαφάνειες αγγλικης εκδοσης του βιβλιου
Εξαρτήσεις ελέγχου! Σχετίζονται με διακλαδώσεις: γενικά δεν μπορούμε να αλλάξουμε τη θέση μιας εντολής σε σχέση με μια εντολή διακλάδωσης γενικά, απαγορεύονται μετακινήσεις εντολών από το then κομμάτι, πρίν το if και το ανάποδο! Η ιδιότητα διατήρησης των εξαρτήσεων ελέγχου δεν είναι θεμελιώδης αν το πρόγραμμα παραμείνει σωστό, μπορούμε να αλλάξουμε τη σειρά! Οι θεμελιώδεις ιδιότητες που πρέπει να ισχύουν είναι: Συμπεριφορά διακοπών (excepton behaviour) Ροή δεδομένων (data- flow) 2
ExcepTon behaviour! Οι αλλαγές που κάνουμε δεν πρέπει να μπορούν να αλλάξουν το τρόπο με τον οποίο γίνονται διακοπές στο πρόγραμμα! Aν ο R2 είναι 0, θα έχουμε memory excepton στη LW! Αν η LW μεταφερθεί πρίν τη διακλάδωση (BEQZ), μπορεί να έχουμε διακοπή που δεν θα είχαμε αν η LW έμενε στη θέση της! Δεν υπάρχει εξάρτηση δεδομένων που να απαγορεύει τη μεταφορά της LW! Για να επιτραπεί η μετακίνηση θα έπρεπε να μπορούμε να αγνοούμε τη διακοπή αν η διακλάδωση ακολουθηθεί 3
Ροή δεδομένων! Η ροή δεδομένων είναι η ροή μεταξύ εντολών παραγωγών και καταναλωτών δεδομένων! Οι διακλαδώσεις κάνουν τη ροή δυναμική Η διακλάδωση επιλέγει ποιά τιμή του R1 θα χρησιμοποιηθεί! H εξάρτηση δεδομένων μεταξύ της OR και των DADDU, DSUBU μπορεί να διατηρηθεί αλλά αυτό δεν αρκεί - δεν μπορεί η SUBU να μετακινηθεί πριν τη διακλάδωση 4
Ροή δεδομένων 2! Εστω ότι ο R4 χρησιμοποιείται προσωρινά η τιμή δεν χρειάζεται πουθενά παρακάτω, λέγεται dead από το skip και κάτω η ιδιότητα λέγεται liveness! Τότε η DSUBU να μετακινηθεί πριν την BEQ Αν η διακλαδωση ακολουθηθεί, η DSUBU ήταν άχρηστη, αλλά δεν αλλοιώθηκε το αποτέλεσμα! Η μέθοδος λέγεται sozware speculaton: ο compiler προβλέπει ότι η διακλάδωση δεν θα ακολουθηθεί 5
Πρόβλεψη διακλαδώσεων! Αγγλικός όρος: branch predicton! Στατική πρόβλεψη: από τον μεταγλωτιστή βοηθάει σε ξετύλιγμα βρόγχων, branch delay slots,! Δυναμική πρόβλεψη: από τον επεξεργαστή! Οσο βαθαίνει η διοχέτευση (ή ο αριθμός παράλληλα εκτελούμενων εντολών, τόσο σημαντικότερη είναι η ακρίβεια στη πρόβλεψη 3 διακλαδώσεις στη διοχέτευση με ακρίβεια πρόβλεψης 90%, πιθανότητα σωστής πρόβλεψης και για τις 3 = 0.9 3 = 73% 6
Στατική πρόβλεψη! Predict not taken μεγάλο κέρδος χρόνου όταν είναι σωστή η πρόβλεψη ελάχιστο κόστος σε υλικό σχετικά μικρή ακρίβεια πρόβλεψης, οι περισσότερες διακλαδώσεις ακολουθούνται! Predict taken μικρότερο κέρδος χρόνου: πρέπει πρώτα να αποκωδικοποιηθεί η εντολή! Profile- based Συγκέντρωση πληροφορίας από προηγούμενες εκτελέσεις Συνήθως οι διακλαδώσεις πάνε προς μία κατεύθυνση πάντα (bimodal distributon) 7
Ορια στατικής πρόβλεψης 25% 22% 20% 18% Misprediction rate 15% 10% 5% 12% 11% 12% 5% 6% 9% 10% 15% 0% compress eqntott espresso gcc Integer li doduc ear h ydro2d mdljdp Floating-point su2cor Benchmark 8
Είδη διακλάδωσης! Διακλάδωση υπό συνθήκη (branch)! Υποχρεωτική (χωρίς συνθήκη) διακλάδωση (άλμα jump)! Αμεση (direct) διεύθυνση στόχου είτε σταθερά ή PC+σταθερά! Εμμεση (indirect) διεύθυνση στόχου είναι η τιμή καταχωρητή (ή και μνήμης, π.χ. στοίβα)! Κλήση ή επιστροφή υπορουτίνας 9
Προβλέψεις! Πρόβλεψη στόχου Διεύθυνση «προορισμού» εντολής διακλάδωσης αν ακολουθηθεί Εύκολα προβλέψιμος! Πρόβλεψη κατεύθυνσης Ακολουθείται ή όχι η διακλάδωση! Εκτέλεση διακλάδωσης = επιβεβαίωση της πρόβλεψης! Λάθος πρόβλεψη: ακύρωση εντολών προσκόμιση από τη σωστή διεύθυνση! Ενημέρωση μηχανισμού πρόβλεψης 10
Πρόβλεψη στόχου διακλάδωσης! Αν προβλέψουμε το στόχο διακλάδωσης: 1. ταυτόχρονα με τη προσκόμιση (της εντολής διακλάδωσης) 2. σωστά, όπως επίσης και την κατεύθυνση τότε η ποινή διακλάδωσης εξαλείφεται! Η πρόβλεψη στόχου γίνεται με ένα πίνακα που λέγεται Branch Target Buffer (BTB)! Οταν προσκομίζουμε μια εντολή, διαβάζουμε και το BTB για να προβλέψουμε τη διεύθυνση της επόμενης εντολής 11
Branch target buffer PC of instruction to fetch Look up Predicted PC Number of entries in branchtarget buffer = : instruction is not predicted to be branch; proceed normally Yes: then instruction is branch and predicted PC should be used as the next PC Branch predicted taken or untaken! Αν στο BTB βάζουμε μόνο taken διακλαδώσεις δεν χρειάζεται το bit κατεύθυνσης 12
Πρόβλεψη κατεύθυνσης! Βασίζεται στην προηγούμενη «συμπεριφορά» της εντολής διακλάδωσης! Συνήθως η κατεύθυνση υπολογίζεται μετά από τον στόχο π.χ. στόχος στο στάδιο ID, κατεύθυνση στο στάδιο EXE! Δυναμική πρόβλεψη: μπορεί να αλλάξει κατά τη διάρκεια εκτέλεσης προγράμματος 13
Branch History Table! Μια μικρή μνήμη με διευθύνσεις από κάποια bits του PC αν χρησιμοποιούσε όλα τα bits του PC δεν θα ήταν μικρή!! Κάθε καταχώρηση έχει 1 bit που κρατάει τη κατεύθυνση της διακλάδωσης την προηγούμενη φορά που εκτελέστηκε! Αν διαφορετικές διακλαδώσεις αντιστοιχούν στην ίδια θέση του BHT? (aliasing) η προβλεψη είναι μια υπόδειξη. Αν είναι λάθος, δεν παίρνουμε το κέρδος σε χρόνο. Δεν προκαλεί λάθος αποτελέσματα.! Γιατί όχι ένα πεδίο tag όπως σε cache? τεράστια αύξηση χωρητικότητας BHT 14
Λειτουργία BTB - BHT Send PC to memory and branch-target buffer IF Entry found in branch-target buffer? Yes ID Is instruction a taken branch? Yes Send out predicted PC rmal instruction execution Taken branch? Yes EX Enter branch instruction address and next PC into branchtarget buffer Mispredicted branch, kill fetched instruction; restart fetch at other target; delete entry from target buffer Branch correctly predicted; continue execution with no stalls 15
1 bit δεν αρκεί! Σκεφτείτε τη διακλάδωση στο τέλος ενός βρόγχου! Είναι πάντα taken εκτός από τη τελευταία επανάλληψη! Αν ο βρόγχος βρίσκεται μέσα σε έναν άλλο...! στο τέλος του εσωτερικού βρόγχου το bit του BHT θα γίνει 0 (not- taken)! την επόμενη φορά που θα εκτελεστεί ο εσωτερικός βρόγχος, η πρόβλεψη θα αποτύχει! Αν έχουμε 2- bit μπορούμε να αλλάζουμε τη πρόβλεψη όταν κάνουμε 2 φορές λάθος 16
2- bit state machine! Υπάρχουν αρκετές παραλλαγές (με διαφορετικές μεταβάσεις) παρόμοιες επιδόσεις! Δεν υπάρχει μεγάλο όφελος από περισσότερα bits 17
Πρόβλεψη με μοτίβα Παράδειγμα: for i = 0 to N for j = 0 to 3! Η (τελική) διακλάδωση του βρόγχου j: 11101110111011101110! Μοτίβα: 111 - > 0, 110 - > 1 101 - > 1, 011 - > 1! 100% ακρίβεια πρόβλεψης, εκμάθηση μετά από 4 φορές! Χρειάζεται η διεύθυνση και τα αποτελέσματα των n τελευταίων εκτελέσεων της διακλάδωσης local history 18
Two- Level Local History Predictor! 2 επίπεδα τοπικής «ιστορίας»! Τι αποτελέσματα (μοτίβο) είχε αυτή η διακλάδωση στο παρελθόν! Το μοτίβο διαλέγει θέση (διεύθυνση) στο PHT PC BHR BHR BHR BHR PHT Prediction 19
CorrelaTng branch predictors! Οι predictors που εξετάσαμε χρησιμοποιούν την πληροφορία από τις προηγούμενες εκτελέσεις της διακλάδωσης για να προβλέψουν το μέλλον (local informaton)! Συχνά η ακρίβεια πρόβλεψης βελτιώνεται εξετάζοντας τη συμπεριφορά άλλων διακλαδώσεων 20
CorrelaTng branch predictors! Πώς παίρνει υπόψη τις κατευθύνσεις των m προηγούμενων διακλαδώσεων (m- bit global history)? Σχηματίζει διεύθυνση για το BHT χρησιμοποιώντας m bits από τις προηγούμενες κατευθύνσεις (π.χ. 0- untaken, 1- taken) και κάποια bits από το PC.! Η πληροφορία για τις m προηγούμενες διακλαδώσεις κρατιέται στον Global History Register (GHR) ένας απλός καταχωρητής ολίσθησης (shiz- register) μήκους m bits το αποτέλεσμα κάθε διακλάδωσης καταγράφεται και το παλιότερο αποτέλεσμα χάνεται 21
2- level predictors Γνωστός correlatng predictor: gshare predictor 2- level global predictor PHT Global BHR Prediction 22
Tournament predictors! Πολλαπλοί predictors, επιλογή του πιο πετυχημένου για κάθε διακλάδωση! Συνήθως δύο predictor ένας βασίζεται σε τοπική πληροφορία (για τη συγκεκριμένη διακλάδωση μόνο) ένας σε global πληροφορία (m προηγούμενες διακλαδώσεις)! Ο επιλογέας (selector) διαλέγει ποιού predictor το αποτέλεσμα θα δοθεί ως τελικό συνήθως είναι ένας 2- bit counter (όπως αυτοί στο BHT) που παρακολουθεί ποιός predictor ήταν ο καλύτερος 23
Επιστροφές υπορουτινών! Οι σύγχρονες γλώσσες προγραμματισμού χρησιμοποιούν πολύ συχνά κλήσεις υπορουτινών! Η κατεύθυνση της εντολής επιστροφής θα μαθευτεί από το BTB/BHT αλλά ο στόχος γενικά είναι διαφορετικός κάθε φορά! Αλλά οι κλήσεις υπορουτινών δουλεύουν ως μια στοίβα! Return Address Predictor: μια στοίβα διευθύνσεων επιστροφής σε κάθε κλήση υπορουτίνας η διεύθυνση επιστροφής μπαίνει στη στοίβα σε κάθε επιστροφή, χρησιμοποιείται αντί της τιμής του ΒΤΒ 24
Διαφοροποιημένη διοχέτευση Integer unit EX FP/integer multiply M1 M2 M3 M4 M5 M6 M7 IF ID MEM WB FP adder A1 A2 A3 A4 FP/integer divider DIV 25
Κίνδυνοι δεδομένων! RAW μια εντολή πρέπει να διαβάσει ένα καταχωρητή αφού αυτός έχει γραφτεί από την εντολή που παράγει το αποτέλεσμα. Συνηθισμένη μεταφορά αποτελεσμάτων μεταξύ εντολών! WAW τα αποτελέσματα της τελευταίας εντολής πρέπει να γραφτούν στο καταχωρητή! WAR μια εντολή πρέπει να γράψει σε ένα καταχωρητή αφού και η τελευταία εντολή που χρειάζεται τα προηγούμενα δεδομένα τον έχει διαβάσει δεν μπορεί να συμβεί στην υλοποίηση που εξετάζουμε 26
Κίνδυνοι και προώθηση! Δομικοί κίνδυνοι ο διαιρέτης δεν είναι διοχετευμένος εγγραφές περισσότερων από 1 καταχωρητών μπορεί να χρειαστούν! Κίνδυνοι δεδομένων Συχνότερα παγώματα για αποτελέσματα, λόγω μεγαλύτερης καθυστέρησης μονάδων πιθανό WAW αφού οι εντολές δε φτάνουν στο στάδιο WB με τη σειρά προγράμματος! Προβλήματα υλοποίησης διακοπών εντολές ολοκληρώνονται εκτός σειράς προγράμματος 27
Παραδείγματα! χ 28
Δομικος κίνδυνος θ. εγγραφής! Παρακολούθηση εγγραφών καταχωρητής ολίσθησης παρακολουθεί πότε θα γίνουν εγγραφές στο αρχείο καταχωρητών Αν η εντολή στο στάδιο ID θα γράψει στο αρχείο καταχωρητών στον ίδιο κύκλο με μια παλιότερη εντολή, καθυστερεί η εκκίνησή της (πάγωμα- stall) για ένα κύκλο Πλεονέκτημα: μόνο στο στάδιο ID γίνονται παγώματα! Πάγωμα στο στάδιο WB (ή ΜΕΜ) πρίν την εγγραφή έλεγχος και καθυστέρηση εντολών συχνά δίνεται προτεραιότητα στην εντολή με τη μεγαλύτερη καθυστέρηση 29
Κίνδυνοι WAW! Σπάνιο: πρέπει ένας καταχωρητής να γραφτεί 2 φορές χωρίς στο μεταξύ να διαβάζεται λάθος/μη βέλτιστος κώδικας; Μπορεί να συμβεί σε delay slots διακλάδωσης,...! Αντιμετώπιση καθυστέρηση της 2 ης εντολής ώστε η παλιότερη να έχει γράψει το αποτέλεσμά της ακύρωση της παλιότερης εντολής ώστε το καινούριο αποτέλεσμα να μείνει στον καταχωρητή 30
Υλοποίηση ελέγχου! Δομικοί κίνδυνοι: καθυστέρησε εκκίνηση μέχρι η μονάδα εκτέλεσης να είναι ελεύθερη και η θύρα εγγραφής να είναι διαθέσιμη! Ελεγχος για κίνδυνο RAW: καθυστέρησε εκκίνηση ώστε κανένας καταχωρητής πηγής να μήν περιμένει ακόμη αποτελέσματα στο κύκλο που η εντολή τα χρειάζεται! Ελεγχος για κίνδυνο WAW: (απλοποιημένος) καθυστέρησε εκκίνηση αν κάποια εντολή σε στάδιο εκτέλεσης (Α1-4, D*, M1-7) έχει τον ίδιο καταχωρητή προορισμού! Παρόμοια για προώθηση αποτελεσμάτων... 31
Maintaining precise exceptons! Πρόβλημα: η SUB προκαλεί διακοπή αφού έχει ολοκληρωθεί η ADD αλλά όχι η DIV imprecise excepton: δεν έχουν ολοκληρωθεί όλες οι εντολές πριν από αυτή που προκάλεσε τη διακοπή.! Πρόβλημα: η DIV προκαλεί διακοπή αφού έχει ολοκληρωθεί η ADD 32
Αντιμετώπιση! Αγνόηση του προβλήματος 2 καταστάσεις λειτουργίας: γρήγορη που αγνοεί τις διακοπές, αργή που οι εντολές εκτελουνται με τη σειρά του προγράμματος! Αποθήκευση «προσωρινών» αποτελεσμάτων μέχρι να σιγουρευτούμε ότι δεν υπάρχουν διακοπές! Επίτρεψη imprecise exceptons και «διόρθωση» με sozware προσομοίωση των εντολών που δεν ολοκληρώθηκαν ανάμεσα στη παλιά εντολή που προκαλεί διακοπή και την τελευταία που έχει ολοκληρωθεί! Καθυστέρηση εκκίνησης μέχρι οι προηγούμενες να είναι σίγουρο ότι δεν θα προκαλέσουν διακοπή 33
34
Χρονοπρογραμματισμός! Για βέλτιστη εκμετάλευση της διοχέτευσης χρειάζεται καλός χρονοπρογραμματισμός (scheduling): τοποθέτηση εντολών με σειρά που να ελαχιστοποιεί τις καθυστερήσεις (παγώματα) λόγω κινδύνων! Μπορεί να γίνει στατικά από τον προγραμματιστή ή τον μεταγλωτιστή! Η δυναμικά από τον επεξεργαστή (dynamic scheduling) 35
Dynamic Scheduling! Σε απλές διοχετεύσεις όταν μια εντολή παγώσει στην αρχή της εκτέλεσής της, οι επόμενες εντολές επίσης παγώνουν! Ο δυναμικός χρονοπρογραμματισμός, επιτρέπει σε μετέπειτα εντολές να εκκινηθούν αν είναι ανεξάρτητες! Αποτέλεσμα: εκτέλεση και ολοκλήρωση εκτός σειράς: out- of- order (OOO) executon, completon! Το στάδιο ID χωρίζεται σε δύο Εκκίνηση (Issue) αποκωδικοποίηση, έλεγχος δομικών κινδύνων Ανάγνωση τελεστέων (read operands) περιμένε μέχρι να μην υπάρχουν κίνδυνοι δεδομένων, και μετά διάβασε τελεστέους 36
Scoreboard! Μέθοδος που επιτρέπει εκκινηση εκτός σειράς κρατά όλες τις απαραίτητες πληροφορίες για να γνωρίζουμε τις εξαρτήσεις μεταξύ εντολών ώστε να μη συμβούν λάθη! Κάθε εντολή «περνά» μέσα από το scoreboard στο στάδιο εκκίνησης και καταγράφονται οι εξαρτήσεις της! Το scoreboard αποφασίζει πότε μια εντολή μπορεί να διαβάσει τους τελεστέους της και να αρχίσει να εκτελείται! Επίσης αποφασίζει πότε θα γράψει το αποτέλεσμα στο καταχωρητή προορισμού 37
Εκκίνηση! Αν υπάρχει διαθέσιμη μονάδα εκτέλεσης (functonal unit) και καμία ήδη εκκινημένη εντολή δεν γράφει αποτέλεσμα στον ίδιο καταχωρητή, γίνεται εκκίνηση της εντολής! Αλλιώς παγώνει το στάδιο εκκίνησης και τα προηγούμενα! Εκκίνηση εντολής: αποστολή στη κατάλληλη μονάδα εκτέλεσης! Μερικοί ονομάζουν αυτό το στάδιο (και τη πράξη) dispatch (αποστολή) 38
Ανάγνωση τελεστέων! Το scoreboard παρακολουθεί πότε οι τελεστέοι μιας εκκινημένης εντολής είναι διαθέσιμοι αν καμιά εντολή που εκκινήθηκε νωρίτερα πρόκειται να τον γράψει! Οταν όλοι οι τελεστέοι μιας εντολής είναι διαθέσιμοι, το scoreboard ενημερώνει τη μονάδα εκτέλεσης να προχωρήσει στην ανάγνωση των τελεστέων και να αρχίσει την εκτέλεση της εντολής 39
Εκτέλεση, εγγραφή αποτελεσμάτων! Η εκτέλεση διαρκεί έναν αριθμό από κύκλους! Οταν τελειώσει ενημερώνει το scoreboard! To scoreboard δίνει οδηγία για εγγραφή αποτελεσμάτων! Παγώνει την εγγραφή αν υπάρχει κίνδυνος WAR κάποια εντολή χρειάζεται ακόμα τη παλιά τιμή του καταχωρητή μπορούν να συμβούν γιατί η ανάγνωση τελεσταίων δεν γίνεται πλέον με τη σειρά προγράμματος 40
Προώθηση αποτελεσμάτων! Εντολή περιμένει μέχρι να είναι έτοιμοι και οι δύο τελεστές της! Δεν εκμεταλεύεται τη προώθηση αποτελεσμάτων χάσιμο επίδοσης?! Τα αποτελέσματα γράφονται αμέσως μετά τον υπολογισμό τους αν δεν υπάρχουν κίνδυνοι WAR!... αντί να περιμένουν τη στατικά καθορισμένη χρονική στιγμή που έχουν σε μια συμβατική διοχέτευση (στάδιο WB)! Μικρότερη καθυστέρηση (latency), παρόμοια με αυτή που πετυχαίνουμε με προώθηση 1 επιπλέον κύκλος γιατί ανάγνωση τελεστέων και εγγραφή δεν επικαλύπτονται 41
Παράδειγμα scoreboard Registers Data buses FP mult FP mult 10 cycle latency FP divide 40 cycle latency FP add 2 cycle latency Integer unit Control/ status Scoreboard Control/ status 42
Cycle: 1 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer yes Load F2 R3 Mult1 yes Mult F0 F2 F4 Integer yes Mult2 Add yes Sub F8 F6 F2 Integer yes Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Integer Add Divide 43
Cycle: 2 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Integer yes Mult2 Add yes Sub F8 F6 F2 Integer yes Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 44
Cycle: 3 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Sub F8 F6 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 45
Cycle: 5 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Sub F8 F6 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 46
Cycle: 6 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Yes Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 47
Cycle: 7 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 48
Cycle: 9 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Can t write result WAR hazard Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 49
Cycle: 13 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) started at cycle 3 L.D MUL.D SUB.D F2, 45(R3) F0, F2, F4 F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 50
Cycle: 14 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Yes yes Register result status FU F0 F2 F4 F6 F8 F10... Add Divide 51
Cycle: 15 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add Divide yes Div F10 F0 F6 Register result status FU F0 F2 F4 F6 F8 F10... Divide 52
Cycle: 55 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add Divide yes Div F10 F0 F6 Register result status FU F0 F2 F4 F6 F8 F10... Divide 53
Cycle: 56 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add Divide Register result status FU F0 F2 F4 F6 F8 F10... 54
Scoreboard rules 55