Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική
Ταχύτητα εκτέλεσης Χρόνος εκτέλεσης = (αριθμός εντολών που εκτελούνται) Τί έχει σημασία: Χ (χρόνος εκτέλεσης εντολής) Αριθμός εντολών Καθορίζεται από το λογισμικό: κατάλληλος αλγόριθμος, καλός μεταφραστής,... Γρήγορη εκτέλεση εντολών Καθορίζεται από το υλικό Πώς μπορεί το υλικό να εκτελέσει εντολές γρηγορότερα μείωση χρόνου κύκλου ρολογιού (ή μεγαλύτερη συχνότητα) εκτέλεση πολλών «δουλειών» σε ένα κύκλο 2
Διοχέτευση (pipelining) Στην απλή σχεδίαση, τα περισσότερα κυκλώματα «περιμένουν» να έρθει η σειρά τους για να κάνουν τη δουλειά τους Μπορούμε να κάνουμε κάθε βήμα (λέγεται στάδιο pipeline stage) να δουλεύει σε διαφορετική εντολή: Όταν εκτελείται μια εντολή, ταυτόχρονα, αποκωδικοποιούμε την επόμενη και προσκομίζουμε την μεθεπόμενη Μοιάζει με γραμμή παραγωγής σε ένα εργοστάσιο 3
Κέρδος διοχέτευσης Σε κάθε κύκλο ξεκινάει μια νέα εντολή Τι κερδίζουμε; Ο χρόνος του κύκλου διαιρείται περίπου τόσο όσο ο αριθμός των σταδίων της διοχέτευσης Ο χρόνος εκτέλεσης μιας μεμονωμένης εντολής αυξάνεται λίγο χρειάζονται επιπλέον κυκλώματα αποθήκευσης μεταξύ βημάτων Αλλά ο ρυθμός εκτέλεσης είναι μία εντολή ανά (γρηγορότερο τώρα) κύκλο ρολογιού 4
Προβλήματα διοχέτευσης Εξάρτηση εντολών instruction dependencies Όταν εκτελείται μια εντολή διακλάδωσης, γιατί να προσκομίσουμε την επόμενη; Δεν είναι σίγουρο ότι θα εκτελεστεί. Πρέπει είτε να περιμένουμε το αποτέλεσμα της διακλάδωσης ή να μπορούμε να ακυρώσουμε τις εντολές που δεν έπρεπε να εκτελεστούν Λέγεται εξάρτηση ελέγχου control dependence Πολλές εντολές χρειάζονται τα αποτελέσματα που παράγουν οι προηγούμενες για να εκτελεστούν εξάρτηση δεδομένων data dependence 5
Πάγωμα διοχέτευσης Σε τέτοιες περιπτώσεις πρέπει να παγώσουμε τη διοχέτευση, μέχρι να μην υπάρχει η εξάρτηση λέγεται pipeline stall Ή, εναλλακτικά, να απαγορέψουμε εξαρτημένες εντολές να είναι η μια μετά/κοντά (σ)την άλλη αν δεν βρει ο μεταφραστής κάποια άλλη εντολή να βάλει ανάμεσά τους, μπορεί να προσθέσει μια εντολή που δεν κάνει τίποτα λέγεται NOP (no operation) Ή, σε πολλές περιπτώσεις να μεταφέρουμε το αποτέλεσμα κατευθείαν εκεί που χρειάζεται αν είναι έτοιμο 6
Ακόμα γρηγορότερα; Εκτέλεση πολλών εντολών ταυτόχρονα Αντί για μία μονάδα εκτέλεσης πράξεων μπορούμε να έχουμε πολλές Πρέπει να φέρνουμε πολλές εντολές από τη μνήμη ταυτόχρονα πώς; Οργάνωση: πολύ μεγάλες ανεξάρτητες εντολές (VLIW) ο μεταφραστής εξασφαλίζει την ανεξαρτησία ο επεξεργαστής έχει την ευθύνη να βρει/ελέγξει αν οι εντολές είναι ανεξάρτητες (Υπερβαθμωτός επεξεργαστής superscalar) 7
Αλλάζοντας τη σειρά εκτέλεσης Το πρόβλημα με τους superscalar είναι ότι οι εξαρτήσεις μεταξύ εντολών είναι πολλές και η παράλληλη εκτέλεση σταματάει συχνά Η λύση είναι να επιτρέπουμε την εκτέλεση εντολών πίσω από εντολές που περιμένουν ακόμα αποτελέσματα, αρκεί αυτές να μπορούν να εκτελεστούν Λέγεται εκτέλεση εκτός σειράς (out of order issue/execution) Αλλά τι συμβαίνει με τα αποτελέσματα αυτών των εντολών αν η παγωμένη εντολή τελικά αποτύχει; 8
Εκτέλεση εκτός σειράς Η εγγραφή αποτελεσμάτων σπάει σε δύο στάδια: εγγραφή και παράδοση (commit) Τα αποτελέσματα εντολών γράφονται σε προσωρινό χώρο αποθήκευσης και μπορούν να χρησιμοποιηθούν από επόμενες εντολές Αλλά η εντολή δεν έχει τελειώσει ακόμη μέχρι το στάδιο της παράδοσης (που γίνεται με τη σειρά του προγράμματος) Οι πραγματικές τιμές ανανεώνονται μόνο όταν μια εντολή φτάσει στο στάδιο παράδοσης 9
Προβλήματα 2 Οι εντολές διακλάδωσης περιορίζουν τον αριθμό εντολών που μπορούν να εκτελεστούν ταυτόχρονα το πρόβλημα υπάρχει και σε απλούς διοχετευμένους υπολογιστές Δεν μπορούμε να περιμένουμε το αποτέλεσμα/απόφαση της εντολής διακλάδωσης είναι πολύ συχνές Λύση: πρόβλεψη διακλάδωσης (branch prediction) 10
Πρόβλεψη διακλάδωσης Γενικά οι διακλαδώσεις μεταβιβάζουν τη ροή του προγράμματος στο ίδιο σημείο τις (συντριπτικά) περισσότερες φορές π.χ. διακλάδωση στην αρχή ενός βρόγχου while. Ένας απλός τρόπος πρόβλεψης είναι αν η διακλάδωση είναι προς τα πίσω (υπονοείται επανάληψη) ή προς τα εμπρός (μάλλον συνθήκη) Αν η πρόβλεψη είναι σωστή, δε χρειάζεται καμία δράση Αν είναι λάθος, πρέπει να αρχίσει να φέρνει ο επεξεργαστής τις κατάλληλες εντολές και να ακυρώσει αυτές που έχει ήδη φέρει από λάθος 11
Πρόβλεψη διακλάδωσης Κρατώντας πληροφορίες για την προηγούμενη «συμπεριφορά» των διακλαδώσεων, μπορούμε να προβλέψουμε τι απόφαση θα πάρουν τώρα Δύο είδη ιστορίας: τι έκανε η συγκεκριμένη εντολή διακλάδωσης στο παρελθόν τι έκαναν οι προηγούμενες N διακλαδώσεις (συνεχόμενες διακλαδώσεις σχετίζονται: π.χ. πολλαπλά if-then-else-if- ) Η «ιστορία» κρατιέται σε πίνακες και όταν φέρνει ο επεξεργαστής μια εντολή από τη μνήμη, κοιτάει αν η διεύθυνση είναι στον πίνακα και τί πρόβλεψη υπάρχει για την διεύθυνση της επόμενης εντολής 12
Φτάνοντας στα όρια Σε ένα πρόγραμμα που επινοήθηκε για να εκτελείται σειριακά, με τα παραπάνω φτάνουμε στα όρια του πόσο γρήγορα μπορούμε να το εκτελέσουμε δηλαδή πόσο παραλληλισμό μπορούμε να ανακαλύψουμε χωρίς να αλλάξει το πρόγραμμα (instruction-level parallelism) Για ακόμη ταχύτερη εκτέλεση χρειάζεται παραλληλισμός σε επίπεδο προγράμματος η εφαρμογή πρέπει να «σπάσει» σε προγράμματα/νήματα (threads) που μπορούν να εκτελεστούν παράλληλα και να συνεργαστούν 13
Multi/hyper threading «Ταυτόχρονη» εκτέλεση δύο (ή περισσότερων) νημάτων στον ίδιο πυρήνα Κάποια στοιχεία του πυρήνα είναι κοινά αριθμητικές λογικές μονάδες, θύρες μνήμης,.. Και κάποια σε πολλά αντίγραφα καταχωρητές, PC, Βασική ιδέα: εκμετάλευση των μονάδων που δεν μπορεί να αξιοποιήσει ένα νήμα από άλλα αν ένα νήμα «κολήσει» περιμένοντας, π.χ. την κύρια μνήμη, ένα άλλο συνεχίζει ή εναλλαγή νημάτων: ένα διαφορετικό σε κάθε κύκλο ρολογιού 14
Πολυεπεξεργασία Πραγματικά ξεχωριστοί πυρήνες εκτελούν ανεξάρτητα ή συνεργαζόμενα προγράμματα Καλύτερος τρόπος εκμετάλευσης του νόμου του Moore τα πλεονεκτήματα αύξησης ρυθμού ρολογιού ή/και αριθμητικών μονάδων είναι μικρότερα Συχνά μοιράζονται κάποια επίπεδα κρυφής μνήμης 15
Μονάδες ειδικού σκοπού Στο παρελθόν: μονάδες εκτέλεσης πράξεων κινητής υποδιαστολής Τώρα: Μονάδες επεξεργασίας γραφικών (GPU graphics processing unit) εξειδικευμενοι, παράλληλοι επεξεργαστές για υπολογισμούς σχετικούς με γραφικά χρησιμοποιούνται επίσης και για γενικού σκοπού υπολογισμούς με κάποιους περιορισμούς 16
Μονάδες διανυσμάτων Εκτέλεση πράξεων σε διανύσματα δλδ πολλούς αριθμούς ταυτόχρονα Γνωστές ως SIMD: single-instruction multiple data Εντολές σε x86 λέγονται MMX, SSEx Συνηθισμένοι υπολογιστές είναι SISD (.. single data) 17
Προσπέλαση μνήμης Τα προηγούμενα υπέθεταν ότι η μνήμη είναι τόσο γρήγορη που μπορεί να προσπελαστεί σε 1 κύκλο ρολογιού Στην πραγματικότητα η μνήμη είναι διαφορετική από την «όψη» που έχει για τον προγραμματιστή: ένας τεράστιος πίνακας αποθήκευσης με σταθερό (μικρό) χρόνο προσπέλασης Υπάρχει μια ιεραρχία διαφορετικών δομών μνήμης που δίνει την παραπάνω ψευδαίσθηση ως προς το μικρό χρόνο προσπέλασης 18
Τεχνολογίες μνήμης Δεν υπάρχει (σήμερα) κατάλληλη τεχνολογία για να κατασκευαστεί μνήμη όπως υποθέτει το θεωρητικό μοντέλο ενός υπολογιστή που χρησιμοποιούν οι γλώσσες προγραμματισμού Χωρητικότητα Κόστος/τιμή Ταχύτητα - + + καταχωρητές κρυφή μνήμη κύρια μνήμη + - - δίσκος 19
Αρχή του Pareto Γενική παρατήρηση σε διάφορους τομείς: χονδρικά το 80% των αποτελεσμάτων προέρχεται από το 20% των αιτιών, π.χ. το 80% του αρακά προέρχεται από το 20% των περικάρπιων! Στην επιστήμη των υπολογιστών: το 80% των προσπελάσεων μνήμης προέρχεται από το 20% των εντολών (γλώσσας μηχανής) Σχετικά με τη μνήμη, το παραπάνω προκαλεί τη τοπικότητα των αναφορών (locality of reference): χρονική τοπικότητα (temporal locality) χωρική τοπικότητα (spatial locality) 20
Τοπικότητα αναφορών Χρονική μια θέση μνήμης που προσπελαύνεται είναι πολύ πιθανό να προσπελαστεί ξανά σύντομα στο μέλλον Χωρική αν μια θέση μνήμης προσπελαστεί, τότε είναι πολύ πιθανό να προσπελαστούν κοντινές θέσεις μνήμης Εκμετάλευση της τοπικότητας αναφορών από τη κρυφή μνήμη (cache memory): μια μικρή, γρήγορη μνήμη που κρατάει αντίγραφα των δεδομένων της κύριας μνήμης που έχουν προσπελαστεί πρόσφατα και άλλα δεδομένα που βρίσκονται κοντά σε αυτά 21
Κρυφή μνήμη Κατασκευασμένη από ακριβή, γρήγορη στατική μνήμη (SRAM) και ενσωματωμένη (πλέον) στο ίδιο Ο.Κ. με τον επεξεργαστή Όταν ο επεξεργαστής ζητάει μια λέξη μνήμης (π.χ. 32 bit), για πρώτη φορά, η λέξη και άλλες γειτονικές (λέγεται γραμμή, cache line ή cache block) διαβάζεται από την κύρια μνήμη και αντιγράφεται στην κρυφή. Όταν αργότερα γίνει προσπέλαση στην ίδια ή κάποια γειτονική λέξη, η κρυφή μνήμη αποκρίνεται γρήγορα Χρόνοι προσπέλασης Κρυφή μνήμη: λίγοι (1-5) κύκλοι ρολογιού Κύρια μνήμη: ~1000άδες κύκλοι ρολογιού 22