Μικροαρχιτεκτονική

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

 Το Α.Σ.Ε. είναι περίπου το ίδιο με τον τύπο του προγραμματισμού που χρησιμοποιείται σε έναν επεξεργαστή, όπως υλοποιείται με την συμβολική γλώσσα προγραμματισμού Assembly. Το Α.Σ.Ε. μεταξύ άλλων, αφορά το μοντέλο εκτέλεσης, τους καταχωρητές του επεξεργαστή, τις διευθύνσεις και τον τύπο των δεδομένων. Η μικροαρχιτεκτονική περιλαμβάνει τα συστατικά μέρη του επεξεργαστή και τον τρόπο με τον οποίο αυτά διασυνδέονται και λειτουργούν, ως ένα σύνολο, με σκοπό την υλοποίηση του Α.Σ.Ε. . Η μικροαρχιτεκτονική μιας μηχανής συνήθως αναπαριστάται με διαγράμματα (περισσότερο ή λιγότερο λεπτομερή) στα οποία περιγράφονται οι διασυνδέσεις των διαφόρων μικροαρχιτεκτονικών στοιχείων της μηχανής, τα οποία μπορεί να είναι τα πάντα, από απλές λογικές πύλες και καταχωρητές έως ολοκληρωμένα αριθμητικά και λογικά κυκλώματα (ALU) ή και ακόμα πιο πολύπλοκα στοιχεία. Σε γενικές γραμμές, αυτά τα διαγράμματα διαχωρίζουν τη διαδρομή των δεδομένων (δηλ. το που και πως θα τοποθετηθούν τα δεδομένα) και τη διαδρομή των εντολών ελέγχου (που κατευθύνουν τα δεδομένα). Το ίδιο Α.Σ.Ε. μπορεί να χρησιμοποιείται ακόμα και από μηχανές με διαφορετικές μικροαρχιτεκτονικές, και συνεπώς είναι ικανές να τρέξουν ακριβώς τα ίδια προγράμματα. Αυτό που κάνει τις νεότερες γενιές επεξεργαστών να πετυχαίνουν υψηλότερες επιδόσεις (από τις προγενέστερες) με το ίδιο Α.Σ.Ε. είναι η βελτίωση των μικροαρχιτεκονικών σχεδιασμών ή η επινόηση νέων σε συνδυασμό με την πρόοδο στη μηχανική και κατασκευή των ημιαγωγών. Η διοχέτευση των δεδομένων μέσα από προκαθορισμένες διαδρομές, είναι αυτή που έχει επικρατήσει σήμερα στο σχεδιασμό μιας μικροαρχιτεκτονικής. Η τεχνική αυτή χρησιμοποιείται σε όλους τους σύγχρονους επεξεργαστές και ελεγκτές. Η συγκεκριμένη τεχνοτροπία της διοχέτευσης, επιτρέπει στις εντολές να υπερκαλύπτουν η μία την άλλη. Ο αγωγός (μέσα από τον οποίο διοχετεύονται τα δεδομένα) περιλαμβάνει διάφορα στάδια τα οποία είναι θεμελιώδους σημασίας στο σχεδιασμό των μικροαρχιτεκτονικών. Μερικά από αυτά τα στάδια είναι η προσκόμιση των εντολών, η αποκωδικοποίηση τους, η εκτέλεσή τους και η επανεγγραφή τους. Μερικές μικροαρχιτεκτονικές περιλαμβάνουν και κάποια επιπλέον στάδια, όπως π.χ. η προσπέλαση μνήμης. Ο σχεδιασμός των αγωγών αυτών είναι ένα από τα κεντρικά μελήματα για την υλοποίηση μιας μικροαρχιτεκτονικής. Ζωτικής σημασίας είναι επίσης οι μονάδες εκτέλεσης. Οι μονάδες αυτές περιλαμβάνουν αριθμητικές/λογικές μονάδες, μονάδες κινητής υποδιαστολής, ελεγκτές διακλαδώσεων. Αυτές οι μονάδες εκτελούν όλες τις εργασίες και τους υπολογισμούς σε έναν επεξεργαστή. Σχεδιαστική προτεραιότητα αποτελούν επίσης η επιλογή του αριθμού των μονάδων εκτέλεσης και η δυναμικότητά τους. Επίσης σημαντικά ζητήματα είναι το μέγεθος, η λανθάνουσα κατάσταση και η συνδεσιμότητα των μνημών που απαρτίζουν το σύστημα. Σε επίπεδο συστήματος, σχεδιαστικές αποφάσεις όπως η συμπερίληψη ή μη των περιφερειακών υποσυστημάτων, όπως ελεγκτές μνήμης, μπορούν να θεωρηθούν μέρος της διαδικασίας σχεδιασμού της μικροαρχιτεκτονικής. Περιλαμβάνει επίσης αποφάσεις για το επίπεδο των επιδόσεων και την σύνδεση αυτών τον περιφερειακών. Σε αντίθεση με άλλους αρχιτεκτονικούς σχεδιασμούς όπου ο κύριος στόχος είναι η επίτευξη συγκεκριμένων επιδόσεων, ο μικροαρχιτεκτονικός σχεδιασμός δίνει περισσότερη έμφαση σε άλλους τομείς. Δεδομένου ότι οι αποφάσεις κατά τον σχεδιασμό της μικροαρχιτεκτονικής επηρεάζει άμεσα τι συμβαίνει στο σύστημα, πρέπει να δοθεί προσοχή σε ζητήματα όπως: • Εμβαδόν/Κόστος του τσιπ • Κατανάλωση ενέργειας • Λογική πολυπλοκότητα • Ευκολία σύνδεσης • Βιομηχανική χρήση • Ευκολία στον εντοπισμό σφαλμάτων • Δυνατότητα δοκιμών Σε γενικές γραμμές, οι επεξεργαστές απλού πυρήνα όπως επίσης και οι υλοποιήσεις επεξεργαστών με πολλαπλά τσιπ, τρέχουν τα προγράμματα εκτελώντας τα ακόλουθα βήματα : 1. Ανάγνωση και αποκωδικοποίηση μιας εντολής. 2. Εύρεση όλων των σχετικών δεδομένων που χρειάζονται για την διεκπεραίωση της εντολής. 3. Εκτέλεση της εντολής. 4. Εξαγωγή των αποτελεσμάτων. Αυτό που περιπλέκει αυτή τη σειρά των βημάτων, είναι το σύνολο της μνήμης ( η οποία περιλαμβάνει την κρυφή μνήμη-cache, την κεντρική μνήμη-ram, και τα μη πτητικά μέσα αποθήκευσης-σκληροί δίσκοι), εκεί δηλαδή που αποθηκεύονται όλες οι οδηγίες και τα δεδομένα των προγραμμάτων, πάντα ήταν και είναι πιο αργό από την ταχύτητα του επεξεργαστή. Ειδικά στο βήμα 2, παρατηρείται μια χρονική καθυστέρηση καθώς τα δεδομένα φτάνουν από τον δίαυλο. Έχουν γίνει εκτεταμένες έρευνες και βελτιώσεις στο σχεδιασμό έτσι ώστε να αποφεύγονται τέτοιου είδους καθυστερήσεις. Με το πέρασμα των ετών, έγινε πιο επιτακτική από ποτέ η ανάγκη για την παράλληλη εκτέλεση περισσότερων εντολών, το οποίο αύξησε σημαντικά την πραγματική ταχύτητα εκτέλεσης των προγραμμάτων. Οι βελτιώσεις αυτές είχαν ως αποτέλεσμα την εισαγωγή πιο περίπλοκων δομικών λογικών κυκλωμάτων. Αρχικά αυτές οι τεχνικές εφαρμόστηκαν μόνο σε ακριβά συστήματα ή υπερυπολογστές λόγω του όγκου των απαιτούμενων κυκλωμάτων. Με τη ραγδαία όμως πρόοδο της μηχανικής των ημιαγωγών, όλο και περισσότερες τεχνοτροπίες μπορούσαν να εφαρμοστούν σε ένα και μόνο τσιπ. Με το πέρασμα των χρόνων τα Α.Σ.Ε. έχουν τροποποιηθεί, από πολύ απλοϊκά έως σε ορισμένες περιπτώσεις πολύ πολύπλοκα. Ωστόσο, η επιλογή του Α.Σ.Ε. μπορεί να επηρεάσει σε μεγάλο βαθμό, τη πολυπλοκότητα της εφαρμογής της σε συσκευές υψηλής απόδοσης. Η εξέχουσα στρατηγική που χρησιμοποιήθηκε για την κατασκευή των πρώτων επεξεργαστών με την τεχνοτροπία RISC, είχε ως στόχο την απλοποίηση των εντολών στην με ελάχιστη πολυπλοκότητα σε συνδυασμό με υψηλή κανονικότητα αποκωδικοποίησης. Τέτοιες εντολές προσκομίζονται εύκολα, αποκωδικοποιούνται και εκτελούνται με τον τρόπο της διοχέτευσης (μέσω ενός αγωγού), και με μια στρατηγική έτσι ώστε να μειώνεται ο αριθμός των λογικών επιπέδων, έτσι ώστε να επιτυγχάνονται υψηλές συχνότητες λειτουργίας. Μια από τις πρώτες και πιο ισχυρές, τεχνικές για τη βελτίωση της απόδοσης είναι η χρήση της διοχέτευσης των εντολών μέσω αγωγών. Στους πρώιμους επεξεργαστές, πρώτα εκτελούνταν όλα τα παραπάνω βήματα για μια εντολή πριν από την μετάβαση στην επόμενη. Μεγάλα τμήματα όμως του επεξεργαστή έμεναν αδρανή, όποτε ολοκληρώνονταν ένα βήμα. Για παράδειγμα, το κύκλωμα αποκωδικοποίησης θα είναι αδρανή καθ όλη τη διάρκεια εκτέλεσης της εντολής. Η μέθοδος αυτή βελτιώνει την απόδοση, επιτρέποντας μια σειρά από εντολές να συνεχίσουν την πορεία τους μέσα από τον επεξεργαστή την ίδια χρονική στιγμή. Κατά την ίδια βασική λογική, ο επεξεργαστής θα αρχίζει να αποκωδικοποιεί μια εντολή (βήμα 1) ενώ το τελευταίο τμήμα θα περιμένει για τα αποτελέσματα. Αυτό επιτρέπει μέχρι και σε 4 εντολές να είναι “εν κινήσει”, και έτσι ο επεξεργαστής μοιάζει σαν να τρέχει 4 φορές πιο γρήγορα. Παρά το γεγονός ότι κάθε εντολή χρειάζεται ένα συγκεκριμένο χρονικό διάστημα για να διεκπεραιωθεί, ο επεξεργαστής σαν σύνολο αποσύρει εντολές (από το ένα βήμα στο άλλο) πιο γρήγορα και μπορεί να τρέξει με μεγαλύτερο χρονισμό ρολογιού. Η τεχνοτροπία RISC, κάνει τους αγωγούς πιο μικρούς και πιο εύκολα κατασκευάσιμους, διαχωρίζοντας καθαρά το κάθε στάδιο της εκτέλεσης μιας εντολής, και δίνοντάς σε κάθε στάδιο ίσο χρονικό διάστημα για την διεκπεραίωση τους, δηλαδή έναν κύκλο ρολογιού. Ο επεξεργαστής στο σύνολο του, λειτουργεί όπως μια γραμμή συναρμολόγησης, από τη μια μεριά εισέρχονται οι εντολές και από την άλλη εξέρχονται τα αποτελέσματα. Οι πρώτοι σχεδιασμοί SPARC και MIPS έτρεχαν 10 φορές πιο γρήγορα από ότι οι επεξεργαστές της Intel και της Motorola, στην ίδια ταχύτητα ρολογιών και στην ίδια τιμή. Η χρήση τέτοιων αγωγών, σε καμιά περίπτωση δεν περιορίζονται μόνο σε υλοποιήσεις RISC. Σχεδόν όλοι οι σύγχρονοι επεξεργαστές χρησιμοποιούν τη διοχέτευση των εντολών, ενώ αυτοί που δεν κάνουν χρήση αυτής της τεχνοτροπίας αλλά λειτουργούν μόνο με ένα μικροκώδικα χρησιμοποιούνται σε περιορισμένης έκτασης συστήματα. Οι μεγάλες υλοποιήσεις τεχνοτροπίας CISC, από τον VAX 8800 μέχρι τους Pentium 4 και τους Athlon, υλοποιούνται με συνδυασμό μικροκώδικα και διοχέτευσης. Οι βελτιώσεις στη μέθοδο της διοχέτευσης και στην αποθήκευση, αποτελούν δυο μεγάλες προόδους στη μικροαρχιτεκτονική που επέτρεψαν στην απόδοση των επεξεργαστών να συμβαδίσουν με την εξέλιξη στη τεχνολογία των κυκλωμάτων, στα οποία βασίζονται. Οι συνεχείς βελτιώσεις στην κατασκευή ολοκληρωμένων κυκλωμάτων, επέτρεψαν ενσωμάτωση πάνω σε ένα τσιπ, περισσότερων κυκλωμάτων, και οι σχεδιαστές άρχισαν να ψάχνουν τρόπους να τα αξιοποιήσουν. Ένας από τους πιο συνήθεις τρόπους αξιοποίησης, ήταν το ποσό της κρυφής μνήμης (σε ένα τσιπ). Η κρυφή μνήμη είναι απλά μια πολύ γρήγορη μνήμη, η οποία μπορεί να προσπελαστεί σε ελάχιστους κύκλους ρολογιού, σε σύγκριση με τους κύκλους που χρειάζονται για την προσπέλαση της κύριας μνήμης (RAM). Ο επεξεργαστής περιλαμβάνει έναν ελεγκτή για την μνήμη αυτή, μέσω του οποίου αυτοματοποιείται η ανάγνωση και η εγγραφή από και προς τη κρυφή μνήμη. Εάν τα απαιτούμενα δεδομένα δεν υπάρχουν στην κρυφή μνήμη, ο επεξεργαστής διακόπτει προσωρινά τις λειτουργίες του, μέχρι ο ελεγκτής να διαβάσει τα απαιτούμενα δεδομένα. Στις υλοποιήσεις με την αρχιτεκτονική RISC, άρχισε να προστίθεται επιπλέον κρυφή μνήμη στα μέσα της δεκαετίας του ’80, 4 kB συνολικά. Ο αριθμός αυτός αυξήθηκε με την πάροδο του χρόνου, με τους σύγχρονους επεξεργαστές να έχουν κρυφή μνήμη ακόμα και της τάξεως των 12ΜΒ, οργανωμένη ιεραρχικά σε πολλαπλά επίπεδα. Σε γενικές γραμμές, περισσότερη κρυφή μνήμη σημαίνει μεγαλύτερες επιδόσεις, χάρη στη μείωση του χρόνου που ο επεξεργαστής μένει σε κατάσταση αναμονής. Τεχνολογικά, η κρυφή μνήμη ταίριαξε απόλυτα με τη φιλοσοφία της διοχέτευσης των εντολών. Τα προηγούμενα χρόνια, το να σχεδιάσεις έναν αγωγό/δίαυλο που ήταν πιο γρήγορος από το χρόνο προσπέλασης της μνήμης, δεν έβγαζε νόημα. Όμως με τη χρησιμοποίηση κρυφής μνήμης, ένας αγωγός/δίαυλος ήταν δυνατό να έχει ταχύτητα ίση με την ταχύτητα προσπέλασης αυτής της μνήμης (που σημαίνει πολύ λιγότερος χρόνος). Αυτός ήταν ο κύριος λόγος για τον οποίο ο ρυθμός αύξησης της συχνότητας των επεξεργαστών ήταν πολύ μεγαλύτερος σε σχέση με τη συχνότητα των μνημών. Οι βελτιώσεις στη μηχανική των ημιαγωγών, σύντομα επέτρεψαν την ενσωμάτωση περισσότερων λογικών πυλών, ακόμη και με όλη την πολυπλοκότητα των πυλών που προαναφέρθηκαν. Τα προγράμματα των υπολογιστών θα μπορούσαν να εκτελεστούν γρηγορότερα, εάν πολλαπλές οδηγίες εκτελούνταν ταυτόχρονα. Αυτό είναι που πετυχαίνουν οι επεξεργαστές βαθμιδωτής διάταξης, αναπαράγοντας λειτουργικές μονάδες (όπως π.χ. οι αριθμητικές/λογικές μονάδες). Μέχρι τα τέλη της δεκαετίας του ’80 αυτά τα σχέδια εισήλθαν στην αγορά. Στους σύγχρονους σχεδιασμούς, συναντάμε μια μονάδα αποθήκευσης ( πολλές εντολές δεν έχουν αποτελέσματα για αποθήκευση), 2 ή περισσότερες μονάδες ακεραίων αριθμών, 2 ή περισσότερες μονάδες δεκαδικών αριθμών και συνήθως μια μονάδα πολλαπλών δεδομένων. Η λογική της εκτέλεσης των εντολών γίνεται πολύπλοκη, καθώς θα πρέπει να διαβάζονται οι εντολές από ένα τεράστιο πλήθος στη μνήμη και να οδηγούνται στις κατάλληλες μονάδες εκτέλεσης, λαμβάνοντας επίσης υπ’ όψιν, το ποιες είναι σε αναμονή εκείνη τη στιγμή. Στη συνέχεια τα αποτελέσματα συγκεντρώνονται και επαναταξινομούνται στο τέλος. Η προσθήκη κρυφών μνημών, μειώνει σημαντικά τη συχνότητα και τη διάρκεια των περιόδων αναμονής του επεξεργαστή, (που περιμένει την ανάκληση των δεδομένων από αυτές τις μνήμες), αλλά δεν απαλλάσσεται τελείως από αυτές. Στους αρχικούς σχεδιασμούς, μια αστοχία της κρυφής μνήμης θα ανάγκαζε τον ελεγκτή της μνήμης αυτής να βάλει τον επεξεργαστεί σε κατάσταση αναμονής και να περιμένει. Φυσικά, θα πρέπει να υπάρχουν κάποιες εντολές στο πρόγραμμα τα δεδομένα του οποίου να είναι διαθέσιμα στη κρυφή μνήμη σε εκείνο το σημείο. Η “εκτός λειτουργίας” εκτέλεση, επιτρέπει σε μια έτοιμη εντολή να εκτελεστεί όταν μια προηγούμενη βρίσκεται σε αναμονή στη κρυφή μνήμη, έπειτα επαναταξινομεί τα αποτελέσματα έτσι ώστε να φαίνεται ότι όλα έγιναν όπως ορίζονται από τη σειρά εκτέλεσης των εντολών. Η μετονομασία των καταχωρητών, αναφέρεται σε μια τεχνική που χρησιμοποιείται για να αποφευχθεί η άσκοπη συνεχής εκτέλεση των εντολών ενός προγράμματος λόγω της επαναχρησιμοποίησης των ίδιων καταχωρητών από αυτές τις εντολές. Οι αρχιτέκτονες των υπολογιστών εμποδίζονται από την συνεχόμενη αναντιστοιχία μεταξύ της εξέλιξης στη συχνότητα λειτουργίας των επεξεργαστών και της συχνότητας λειτουργίας των μνημών. Όμως καμία από αυτές τις τεχνικές που εκμεταλλεύονται την παράλληλη επεξεργασία των εντολών, δεν θα μπορούσε να αντισταθμίσει τις μεγάλες αναμονές όταν τα δεδομένα θα πρέπει να προσκομιστούν από την κύρια μνήμη. Επιπλέον, ο μεγάλος αριθμός των τρανζίστορ και οι υψηλές συχνότητες λειτουργίας που χρειάζονται για τις πιο προηγμένες τεχνικές, απαιτούν μεγάλα επίπεδα κατανάλωσης ισχύος. Ο ρυθμός απόδοσης ενός υπολογιστικού συστήματος είναι μια ιδέα που προήλθε από την μεσαία τάξη τη αγοράς. Δίνεται έμφαση όχι μόνο στην επεξεργασία των συναλλαγών online, αλλά και στην ικανότητα αντιμετώπισης μαζικά, μεγάλου αριθμού συναλλαγών. Την τελευταία δεκαετία οι εφαρμογές για την διεκπεραίωση συναλλαγών (όπως η δρομολόγηση δικτύων και ιστοσελίδων) έχουν εξελιχθεί σημαντικά και ως αποτέλεσμα η βιομηχανία των υπολογιστών έχει δώσει εκ νέου έμφαση στα ζητήματα απόδοσης. Μια τεχνική για το πώς επιτυγχάνεται αυτός ο παραλληλισμός είναι μέσω των πολύεπεξεργαστικών συστημάτων, δηλαδή υπολογιστών με πολλαπλούς επεξεργαστές. Σήμερα οι εξυπηρετητές που αποτελούνται από πολλαπλούς επεξεργαστές έχουν γίνει κομμάτι της καθημερινότητας ανάμεσα στις επιχειρήσεις, ενώ από τη δεκαετία του 1990 έχουν κάνει την εμφάνισή τους και προσωπικοί υπολογιστές (PC) με περισσότερους από έναν επεξεργαστές. Με τη περαιτέρω μείωση του μεγέθους των τρανζίστορ, λόγω της προόδου της τεχνολογίας των ημιαγωγών, την θέση τους κατέλαβαν οι επεξεργαστές πολλαπλών πυρήνων, δηλαδή πολλαπλά επεξεργαστικά τσιπ ενοποιημένα σε ένα και μόνο τσιπ πυριτίου. Μια άλλη τεχνική η οποία συνδέεται στενά με την πολυεπεξεργασία και έγινε δημοφιλής είναι η ‘’’πολυνημάτωση ή πολυδιεργασία’’’. Στη πολυνημάτωση, όταν ο επεξεργαστής χρειάζεται να φέρει δεδομένα από αργές μνήμες του συστήματος δεν τίθεται σε κατάσταση αναμονής μέχρι να φτάσουν τα απαραίτητα δεδομένα, αλλά στρέφει την προσοχή του σε κάποιο άλλο πρόγραμμα ή σε κάποια διεργασία (νήμα) ενός προγράμματος το οποίο είναι έτοιμο να εκτελεστεί. Παρ’ όλο που δεν επιτυγχάνεται έτσι μεγαλύτερη ταχύτητα σε κάποιο συγκεκριμένο πρόγραμμα/διεργασία, αυξάνεται όμως η γενική υπολογιστική απόδοση του συστήματος γιατί μειώνεται περεταίρω το χρονικό διάστημα που ο επεξεργαστής τίθεται σε αναμονή. Μια πολυνηματική μονάδα επεξεργασίας μπορεί να μεταπηδήσει σε κάποια διεργασία(νήμα) σε 1 επεξεργαστικό κύκλο. Αυτό επιτυγχάνεται με την αποτύπωση της κατάστασης των συσκευών (όπως το αρχεία μητρώου και τον μετρητή του προγράμματος) για κάθε ενεργή διεργασία. Μια περαιτέρω εξέλιξη της τεχνικής αυτής είναι η παράλληλη πολυνημάτωση. Αυτή η τεχνική επιτρέπει την ταυτόχρονη εκτέλεση εντολών από διαφορετικά προγράμματα/διεργασίες στον ίδιο κύκλο επεξεργασίας. x86