Οποιαδήποτε εντολή επεξεργαστή έχει πολλαπλά στάδια στη λειτουργία της. Κάθε ένα από αυτά τα στάδια χρειάζεται έναν μόνο κύκλο CPU για να ολοκληρωθεί. Αυτά τα στάδια είναι η ανάκτηση εντολών, η αποκωδικοποίηση εντολών, η εκτέλεση, η πρόσβαση στη μνήμη και η επανάληψη εγγραφής. Αντίστοιχα αυτά παίρνουν την οδηγία που πρέπει να ολοκληρωθεί, διαχωρίζουν τη λειτουργία από τις τιμές που λειτουργούν on, εκτελέστε τη διαδικασία, ανοίξτε τον καταχωρητή στον οποίο θα γραφτεί το αποτέλεσμα και γράψτε το αποτέλεσμα στο άνοιγμα κανω ΕΓΓΡΑΦΗ.
Historical In Order Processors
Στους πρώιμους υπολογιστές, η CPU δεν χρησιμοποιούσε γραμμή εντολών. Σε αυτές τις CPU, κάθε λειτουργία ενός κύκλου έπρεπε να συμβαίνει για κάθε εντολή. Αυτό σήμαινε ότι χρειάστηκαν πέντε κύκλοι ρολογιού για να υποβληθεί σε πλήρη επεξεργασία η μέση εντολή πριν ξεκινήσει η επόμενη. Ορισμένες λειτουργίες ενδέχεται να μην χρειάζεται να γράψουν κανένα αποτέλεσμα σε έναν καταχωρητή, πράγμα που σημαίνει ότι τα στάδια πρόσβασης στη μνήμη και εγγραφής μπορούν να παραλειφθούν.
Ωστόσο, υπάρχει ένα πρόβλημα που κρύβεται όταν εκτελείτε μια πλήρη εντολή με τη σειρά προτού μπορέσετε να προχωρήσετε στην επόμενη εντολή. Το πρόβλημα είναι η έλλειψη προσωρινής μνήμης. Η CPU αποθηκεύει δεδομένα που επεξεργάζεται ενεργά στο μητρώο. Αυτό μπορεί να προσπελαστεί με καθυστέρηση ενός κύκλου. Το πρόβλημα είναι ότι ο καταχωρητής είναι μικρός επειδή είναι ενσωματωμένος στον πυρήνα του επεξεργαστή. Η CPU πρέπει να μεταβεί στη μεγαλύτερη αλλά πιο αργή κρυφή μνήμη L1, εάν τα δεδομένα δεν έχουν ήδη φορτωθεί. Εάν δεν υπάρχει, πρέπει να μεταβεί ξανά στη μεγαλύτερη και πιο αργή μνήμη cache L2. Το επόμενο βήμα είναι η προσωρινή μνήμη L3. η τελική επιλογή είναι η μνήμη RAM του συστήματος. Κάθε μία από αυτές τις επιλογές απαιτεί όλο και περισσότερους κύκλους CPU για έλεγχο.
Τώρα, αυτή η επιπλέον πρόσθετη καθυστέρηση μπορεί να είναι ένα μεγάλο πρόβλημα σε ένα σύστημα που πρέπει να ολοκληρώσει κάθε εντολή με τη σειρά πλήρως πριν ξεκινήσει την επόμενη εντολή. Αυτό που ήταν ένας επεξεργαστής 5 κύκλων ανά εντολή, μπορεί ξαφνικά να κρεμαστεί σε μία εντολή για δεκάδες ή εκατοντάδες κύκλους ρολογιού. Όλο αυτό το διάστημα, τίποτα άλλο δεν μπορεί να συμβεί στον υπολογιστή. Τεχνικά, αυτό μπορεί να μετριαστεί κάπως έχοντας δύο ανεξάρτητους πυρήνες. Τίποτα, ωστόσο, δεν τους εμποδίζει να κάνουν και οι δύο το ίδιο πράγμα, ενδεχομένως ταυτόχρονα. Επομένως, η μετάβαση στη διαδρομή πολλαπλών πυρήνων δεν το διορθώνει.
Ο κλασικός αγωγός RISC
Το RISC σημαίνει Υπολογιστής μειωμένου συνόλου εντολών. Είναι ένα στυλ σχεδίασης επεξεργαστή που βελτιστοποιεί την απόδοση διευκολύνοντας την αποκωδικοποίηση κάθε εντολής. Αυτό είναι σε σύγκριση με το CISC ή το Complex Instruction Set Computer, το οποίο σχεδιάζει πιο σύνθετα σύνολα εντολών επιτρέποντας να απαιτούνται λιγότερες οδηγίες για την εκτέλεση των ίδιων εργασιών.
Ο κλασικός σχεδιασμός RISC περιλαμβάνει μια διοχέτευση εντολών. Αντί να εκτελείται οποιοδήποτε από τα πέντε στάδια εντολών σε οποιονδήποτε δεδομένο κύκλο, η διοχέτευση επιτρέπει την εκτέλεση και των πέντε σταδίων. Φυσικά, δεν μπορείτε να εκτελέσετε και τα πέντε στάδια μιας εντολής σε έναν κύκλο. Αλλά μπορείτε να βάλετε σε ουρά πέντε διαδοχικές εντολές με μετατόπιση ενός σταδίου η καθεμία. Με αυτόν τον τρόπο, μια νέα εντολή μπορεί να ολοκληρωθεί σε κάθε κύκλο ρολογιού. Προσφέροντας μια πιθανή αύξηση απόδοσης 5 φορές για μια σχετικά χαμηλή αύξηση της πολυπλοκότητας του πυρήνα.
Οι επεξεργαστές που δεν έχουν διοχέτευση μπορεί να είναι μόνο υποβαθμωτοί, καθώς δεν μπορούν να εκτελέσουν μία πλήρη εντολή ανά κύκλο. Με αυτήν την κύρια διοχέτευση πέντε σταδίων, μπορείτε να φτιάξετε μια βαθμωτή CPU που μπορεί να ολοκληρώσει μια οδηγία για κάθε διαδικασία. Με τη δημιουργία ακόμη πιο εκτεταμένων αγωγών, μπορείτε να δημιουργήσετε υπερκλιμακωτές CPU που μπορούν να εκτελέσουν περισσότερες από μία εντολές ανά κύκλο ρολογιού. Φυσικά, υπάρχουν ακόμη πιθανά προβλήματα.
Ακόμα διαδοχικά
Τίποτα από αυτά δεν λύνει το ζήτημα της αναμονής πολλών κύκλων για απάντηση όταν χρειάζεται να ρωτήσετε τα διαφορετικά επίπεδα μνήμης cache και RAM. Επίσης εισάγει ένα νέο πρόβλημα. Τι γίνεται αν μια εντολή βασίζεται στην έξοδο της προηγούμενης εντολής; Αυτά τα προβλήματα επιλύονται ανεξάρτητα με έναν προηγμένο αποστολέα. Σχεδιάζει προσεκτικά τη σειρά εκτέλεσης, έτσι ώστε να μην είναι πολύ κοντά εντολές που βασίζονται στην έξοδο κάποιου άλλου. Χειρίζεται επίσης τις αστοχίες της κρυφής μνήμης παρκάροντας μια οδηγία και αντικαθιστώντας την στη διοχέτευση με άλλη οδηγίες που είναι έτοιμες να εκτελεστούν και δεν απαιτούν το αποτέλεσμά τους, επαναλαμβάνοντας την εντολή όταν είναι έτοιμος.
Αυτές οι λύσεις μπορούν να λειτουργήσουν σε επεξεργαστές χωρίς σωλήνωση, αλλά απαιτούνται για έναν υπερκλιμακωτό επεξεργαστή που εκτελεί περισσότερες από μία εντολές ανά ρολόι. Ένας δείκτης πρόβλεψης κλάδου είναι επίσης πολύ χρήσιμος, καθώς μπορεί να προσπαθήσει να προβλέψει το αποτέλεσμα μιας εντολής με περισσότερα από ένα πιθανά αποτελέσματα και να συνεχίσει να υποθέτει ότι είναι σωστό, εκτός εάν αποδειχθεί το αντίθετο.
συμπέρασμα
Ένας σωλήνας επιτρέπει τη χρήση όλων των ξεχωριστών δυνατοτήτων του επεξεργαστή σε κάθε κύκλο. Αυτό το κάνει εκτελώντας διαφορετικά στάδια διαφορετικών εντολών ταυτόχρονα. Αυτό δεν προσθέτει μεγάλη πολυπλοκότητα στο σχεδιασμό της CPU. Ανοίγει επίσης το δρόμο για να επιτραπεί σε περισσότερες από μία εντολές να εκτελούν ένα μόνο στάδιο ανά κύκλο.