Σωλήνωση (υπολογιστές)

Η διοχέτευση εντολών είναι μια τεχνική που χρησιμοποιείται στη σχεδίαση σύγχρονων μικροεπεξεργαστών, μικροελεγκτών και CPU για την αύξηση της απόδοσης των εντολών τους (ο αριθμός των εντολών που μπορούν να εκτελεστούν σε μια μονάδα χρόνου).

Η βασική ιδέα είναι να διαιρεθεί (και να ονομαστεί "διαχωρισμός") η επεξεργασία μιας εντολής της ΚΜΕ, όπως ορίζεται από τον μικροκώδικα εντολής, σε μια σειρά ανεξάρτητων βημάτων μικρολειτουργιών (που ονομάζονται επίσης "μικροεντολές", "μικρο-οπ" ή "μοπ"), με αποθήκευση στο τέλος κάθε βήματος. Αυτό επιτρέπει στη λογική ελέγχου των ΚΜΕ να χειρίζεται τις εντολές με το ρυθμό επεξεργασίας του πιο αργού βήματος, ο οποίος είναι πολύ ταχύτερος από το χρόνο που απαιτείται για την επεξεργασία της εντολής ως ενιαίο βήμα.

Ο όρος αγωγός αναφέρεται στο γεγονός ότι κάθε βήμα μεταφέρει μια μοναδική μικροεντολή (όπως μια σταγόνα νερού) και κάθε βήμα συνδέεται με ένα άλλο βήμα (αναλογία, παρόμοια με τους σωλήνες νερού).

Οι περισσότερες σύγχρονες CPU οδηγούνται από ένα ρολόι. Η CPU αποτελείται εσωτερικά από λογική και μνήμη (flip flops). Όταν φθάνει το σήμα ρολογιού, τα flip flops αποθηκεύουν τη νέα τους τιμή και στη συνέχεια η λογική απαιτεί μια χρονική περίοδο για να αποκωδικοποιήσει τις νέες τιμές των flip flops. Στη συνέχεια, φτάνει ο επόμενος παλμός ρολογιού και τα flip flops αποθηκεύουν άλλες τιμές κ.ο.κ. Με το σπάσιμο της λογικής σε μικρότερα κομμάτια και την εισαγωγή flip flops μεταξύ των κομματιών της λογικής, μειώνεται ο χρόνος που απαιτείται από τη λογική (για την αποκωδικοποίηση των τιμών μέχρι τη δημιουργία έγκυρων εξόδων ανάλογα με αυτές τις τιμές). Με αυτόν τον τρόπο μπορεί να μειωθεί η περίοδος ρολογιού.
Για παράδειγμα, ο αγωγός RISC χωρίζεται σε πέντε στάδια με ένα σύνολο flip flops μεταξύ κάθε σταδίου ως εξής:

  1. Λήψη εντολής
  2. Αποκωδικοποίηση εντολών και ανάκτηση καταχωρητών
  3. Εκτέλεση
  4. Πρόσβαση στη μνήμη
  5. Εγγραφή μητρώου

Οι επεξεργαστές με διοχέτευση αποτελούνται εσωτερικά από στάδια (ενότητες) τα οποία μπορούν να εργάζονται ημιανεξάρτητα σε ξεχωριστές μικροεντολές. Κάθε στάδιο συνδέεται µε flip flops µε το επόµενο στάδιο (σαν "αλυσίδα"), έτσι ώστε η έξοδος του σταδίου να αποτελεί είσοδο σε ένα άλλο στάδιο µέχρι να ολοκληρωθεί η εργασία της επεξεργασίας των εντολών. Μια τέτοια οργάνωση των εσωτερικών μονάδων του επεξεργαστή μειώνει το συνολικό χρόνο επεξεργασίας της εντολής.

Μια αρχιτεκτονική χωρίς γραμμή αγωγών δεν είναι τόσο αποδοτική, επειδή ορισμένες μονάδες ΚΜΕ είναι αδρανείς, ενώ μια άλλη μονάδα είναι ενεργή κατά τη διάρκεια του κύκλου εντολών. Η αγωγιμοποίηση δεν καταργεί εντελώς τον χρόνο αδράνειας σε μια CPU με αγωγιμοποίηση, αλλά η παράλληλη λειτουργία των μονάδων της CPU αυξάνει την απόδοση των εντολών.

Ένας αγωγός εντολών λέγεται ότι είναι πλήρως αγωγιμοποιημένος εάν μπορεί να δέχεται μια νέα εντολή σε κάθε κύκλο ρολογιού. Ένας αγωγός που δεν είναι πλήρως αγωγιμοποιημένος έχει κύκλους αναμονής που καθυστερούν την πρόοδο του αγωγού.

Βασικός αγωγός πέντε σταδίων σε μια μηχανή RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Ο κάθετος άξονας είναι οι διαδοχικές εντολές, ο οριζόντιος άξονας είναι ο χρόνος. Έτσι, στην πράσινη στήλη, η πρωιμότερη εντολή βρίσκεται στο στάδιο WB και η πιο πρόσφατη εντολή βρίσκεται σε διαδικασία ανάκτησης εντολών.Zoom
Βασικός αγωγός πέντε σταδίων σε μια μηχανή RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Ο κάθετος άξονας είναι οι διαδοχικές εντολές, ο οριζόντιος άξονας είναι ο χρόνος. Έτσι, στην πράσινη στήλη, η πρωιμότερη εντολή βρίσκεται στο στάδιο WB και η πιο πρόσφατη εντολή βρίσκεται σε διαδικασία ανάκτησης εντολών.

Πλεονεκτήματα και μειονεκτήματα της διοχέτευσης με αγωγούς

Πλεονεκτήματα του Pipelining:

  1. Ο χρόνος κύκλου του επεξεργαστή μειώνεται, αυξάνοντας την απόδοση των εντολών. Η διοχέτευση δεν μειώνει τον χρόνο που απαιτείται για την ολοκλήρωση μιας εντολής- αντίθετα, αυξάνει τον αριθμό των εντολών που μπορούν να επεξεργαστούν ταυτόχρονα ("ταυτόχρονα") και μειώνει την καθυστέρηση μεταξύ των ολοκληρωμένων εντολών (που ονομάζεται "απόδοση").
    Όσο περισσότερα στάδια αγωγών διαθέτει ένας επεξεργαστής, τόσο περισσότερες εντολές μπορεί να επεξεργαστεί "ταυτόχρονα" και τόσο μικρότερη καθυστέρηση υπάρχει μεταξύ των ολοκληρωμένων εντολών. Κάθε επικρατέστερος μικροεπεξεργαστής
     γενικής χρήσης που κατασκευάζεται σήμερα χρησιμοποιεί τουλάχιστον 2 στάδια αγωγού έως και 30 ή 40 στάδια.
  2. Αν χρησιμοποιηθεί η διοχέτευση, η αριθμητική λογική μονάδα της ΚΜΕ μπορεί να σχεδιαστεί ταχύτερα, αλλά θα είναι πιο πολύπλοκη.
  3. Η διοχέτευση με αγωγούς αυξάνει θεωρητικά την απόδοση σε σχέση με έναν πυρήνα χωρίς αγωγούς κατά έναν παράγοντα του αριθμού των σταδίων (υποθέτοντας ότι η συχνότητα ρολογιού αυξάνεται επίσης κατά τον ίδιο παράγοντα) και ο κώδικας είναι ιδανικός για εκτέλεση με αγωγούς.
  4. Οι CPU με σωληνώσεις λειτουργούν γενικά σε υψηλότερη συχνότητα ρολογιού από τη συχνότητα ρολογιού της RAM (από τις τεχνολογίες του 2008, οι RAM λειτουργούν σε χαμηλές συχνότητες σε σύγκριση με τις συχνότητες των CPU), αυξάνοντας τη συνολική απόδοση των υπολογιστών.

Μειονεκτήματα του Pipelining:

Η αγωγιμοποίηση έχει πολλά μειονεκτήματα, αν και υπάρχουν πολλές τεχνικές που χρησιμοποιούνται από τους σχεδιαστές επεξεργαστών και μεταγλωττιστών για να ξεπεραστούν τα περισσότερα από αυτά.Ακολουθεί ένας κατάλογος των κοινών μειονεκτημάτων:

  1. Ο σχεδιασμός ενός μη-pipelined επεξεργαστή είναι απλούστερος και φθηνότερος στην κατασκευή, ο μη-pipelined επεξεργαστής εκτελεί μόνο μία εντολή κάθε φορά. Με τον τρόπο αυτό αποφεύγονται οι καθυστερήσεις διακλαδώσεων (στην αγωγιμοποίηση, κάθε διακλάδωση καθυστερεί) καθώς και τα προβλήματα κατά την ταυτόχρονη εκτέλεση σειριακών εντολών.
  2. Στον επεξεργαστή με σωληνογραμμή, η εισαγωγή flip flops μεταξύ των μονάδων αυξάνει την καθυστέρηση εντολών σε σύγκριση με έναν επεξεργαστή χωρίς σωληνογραμμή.
  3. Ένας μη-pipelined επεξεργαστής θα έχει καθορισμένη απόδοση εντολών. Η απόδοση ενός επεξεργαστή με αγωγιμοποίηση είναι πολύ πιο δύσκολο να προβλεφθεί και μπορεί να διαφέρει σημαντικά για διαφορετικά προγράμματα.
  4. Πολλά σχέδια περιλαμβάνουν αγωγούς μήκους 7, 10, 20, 31 και ακόμη περισσότερων σταδίων- ένα μειονέκτημα ενός μεγάλου αγωγού είναι ότι όταν ένα πρόγραμμα διακλαδίζεται, ολόκληρος ο αγωγός πρέπει να ξεπλυθεί (να καθαριστεί). Η υψηλότερη απόδοση των αγωγών δεν επαρκεί όταν ο εκτελούμενος κώδικας περιέχει πολλές διακλαδώσεις: ο επεξεργαστής δεν μπορεί να γνωρίζει εκ των προτέρων πού θα διαβάσει την επόμενη εντολή και πρέπει να περιμένει να τελειώσει η εντολή διακλάδωσης, αφήνοντας τον αγωγό πίσω της άδειο. Αυτό το μειονέκτημα μπορεί να μειωθεί με την πρόβλεψη του κατά πόσον η εντολή διακλάδωσης υπό συνθήκη θα διακλαδωθεί με βάση την προηγούμενη δραστηριότητα. Αφού επιλυθεί η διακλάδωση, η επόμενη εντολή πρέπει να διανύσει όλη τη διαδρομή μέσω του αγωγού πριν το αποτέλεσμά της γίνει διαθέσιμο και ο επεξεργαστής συνεχίσει να "εργάζεται" και πάλι. Σε τέτοιες ακραίες περιπτώσεις, η απόδοση ενός επεξεργαστή με αγωγό μπορεί να είναι χειρότερη από έναν επεξεργαστή χωρίς αγωγό.
  5. Δυστυχώς, δεν είναι όλες οι οδηγίες ανεξάρτητες. Σε έναν απλό αγωγό, η ολοκλήρωση μιας εντολής μπορεί να απαιτεί 5 στάδια. Για να λειτουργήσει με πλήρη απόδοση, αυτός ο αγωγός θα πρέπει να εκτελέσει 4 επόμενες ανεξάρτητες εντολές ενώ η πρώτη ολοκληρώνεται. Οποιαδήποτε από αυτές τις 4 εντολές μπορεί να εξαρτάται από την έξοδο της πρώτης εντολής, προκαλώντας τη λογική ελέγχου του αγωγού να περιμένει και να εισάγει μια καθυστέρηση ή έναν χαμένο κύκλο ρολογιού στον αγωγό μέχρι να επιλυθεί η εξάρτηση. Ευτυχώς, τεχνικές όπως η προώθηση μπορούν να μειώσουν σημαντικά τις περιπτώσεις όπου απαιτείται καθυστέρηση.
  6. Τα αυτοτροποποιούμενα προγράμματα ενδέχεται να μην εκτελούνται σωστά σε μια αρχιτεκτονική pipelined όταν οι εντολές που τροποποιούνται βρίσκονται κοντά στις εντολές που εκτελούνται. Αυτό μπορεί να οφείλεται στο γεγονός ότι οι εντολές μπορεί να βρίσκονται ήδη στην ουρά εισόδου Prefetch, οπότε η τροποποίηση μπορεί να μην ισχύσει για την επερχόμενη εκτέλεση των εντολών. Οι κρυφές μνήμες εντολών κάνουν το πρόβλημα ακόμη χειρότερο.
  7. Κίνδυνοι: Όταν ένας προγραμματιστής (ή ένας μεταγλωττιστής) γράφει κώδικα assembly, γενικά υποθέτει ότι κάθε εντολή εκτελείται πριν από την εκτέλεση της επόμενης εντολής. Όταν αυτή η υπόθεση δεν επικυρώνεται με την αγωγιμοποίηση προκαλεί λανθασμένη συμπεριφορά του προγράμματος, η κατάσταση είναι γνωστή ως κίνδυνος. Υπάρχουν
    διάφορες
    τεχνικές για την επίλυση των κινδύνων ή την αντιμετώπιση τους, όπως η προώθηση και η καθυστέρηση (με την εισαγωγή μιας καθυστέρησης ή ενός χαμένου κύκλου ρολογιού).

Παραδείγματα

Γενικός αγωγός

Στα δεξιά είναι ένας γενικός αγωγός με τέσσερα στάδια:

  1. Φέρτε
  2. Αποκωδικοποίηση
  3. Εκτέλεση
  4. Επιστροφή εγγραφής

Το επάνω γκρι πλαίσιο είναι ο κατάλογος των εντολών που περιμένουν να εκτελεστούν- το κάτω γκρι πλαίσιο είναι ο κατάλογος των εντολών που έχουν ολοκληρωθεί- και το μεσαίο λευκό πλαίσιο είναι ο αγωγός.

Η εκτέλεση έχει ως εξής:

Χρόνος

Εκτέλεση

0

Τέσσερις εντολές περιμένουν να εκτελεστούν

1

  • η πράσινη εντολή λαμβάνεται από τη μνήμη

2

  • η πράσινη εντολή αποκωδικοποιείται
  • η μοβ εντολή λαμβάνεται από τη μνήμη

3

  • εκτελείται η πράσινη εντολή (εκτελείται η πραγματική λειτουργία)
  • η μοβ εντολή αποκωδικοποιείται
  • η μπλε εντολή λαμβάνεται

4

  • τα αποτελέσματα της πράσινης εντολής εγγράφονται πίσω στο αρχείο καταχωρητών ή στη μνήμη
  • εκτελείται η μοβ εντολή
  • η μπλε εντολή αποκωδικοποιείται
  • η κόκκινη εντολή λαμβάνεται

5

  • η πράσινη εντολή έχει ολοκληρωθεί
  • η μοβ εντολή γράφεται πίσω
  • εκτελείται η μπλε εντολή
  • η κόκκινη εντολή αποκωδικοποιείται

6

  • Η μοβ εντολή έχει ολοκληρωθεί
  • η μπλε εντολή γράφεται πίσω
  • εκτελείται η κόκκινη εντολή

7

  • η μπλε εντολή έχει ολοκληρωθεί
  • η κόκκινη εντολή γράφεται πίσω

8

  • η κόκκινη εντολή έχει ολοκληρωθεί

9

Όλες οι εντολές εκτελούνται

Φούσκα

Όταν συμβαίνει μια "λόξυγγα" (διακοπή) στην εκτέλεση, δημιουργείται μια "φούσκα" στον αγωγό, στην οποία δεν συμβαίνει τίποτα χρήσιμο. Στον κύκλο 2, η λήψη της μοβ εντολής καθυστερεί και το στάδιο αποκωδικοποίησης στον κύκλο 3 περιέχει τώρα μια φούσκα. Όλα όσα βρίσκονται πίσω από τη μοβ εντολή καθυστερούν επίσης, αλλά όλα όσα βρίσκονται μπροστά από τη μοβ εντολή συνεχίζουν την εκτέλεση.

Σαφώς, σε σύγκριση με την παραπάνω εκτέλεση, η φούσκα αποδίδει συνολικό χρόνο εκτέλεσης 8 χρονικών στιγμών αντί για 7.

Οι φυσαλίδες είναι σαν καθυστερήσεις, στις οποίες δεν θα συμβεί τίποτα χρήσιμο για τη λήψη, αποκωδικοποίηση, εκτέλεση και εγγραφή. Είναι σαν ένας κώδικας NOP (συντομογραφία για No OPeration).

Παράδειγμα 1

Μια τυπική εντολή για την πρόσθεση δύο αριθμών θα μπορούσε να είναι η ADD A, B, C, η οποία προσθέτει τις τιμές που βρίσκονται στις θέσεις μνήμης A και B και στη συνέχεια τοποθετεί το αποτέλεσμα στη θέση μνήμης C. Σε έναν επεξεργαστή με αγωγούς ο ελεγκτής αγωγών θα μπορούσε να το διαχωρίσει αυτό σε μια σειρά από εργασίες παρόμοιες με:

LOAD A, R1 LOAD B, R2 ADD R1, R2, R3 STORE R3, C LOAD επόμενη εντολή

Οι θέσεις 'R1' και 'R2' είναι καταχωρητές στη CPU. Οι τιμές που είναι αποθηκευμένες στις θέσεις μνήμης με τις ενδείξεις 'A' και 'B' φορτώνονται (αντιγράφονται) σε αυτούς τους καταχωρητές, στη συνέχεια προστίθενται και το αποτέλεσμα αποθηκεύεται σε μια θέση μνήμης με την ένδειξη 'C'.

Σε αυτό το παράδειγμα, ο αγωγός αποτελείται από τρία στάδια - φόρτωση, εκτέλεση και αποθήκευση. Κάθε ένα από τα στάδια ονομάζεται στάδια του αγωγού.

Σε έναν επεξεργαστή που δεν διαθέτει αγωγούς με διαδοχικά κυκλώματα, μόνο ένα στάδιο μπορεί να εργάζεται κάθε φορά, οπότε ολόκληρη η εντολή πρέπει να ολοκληρωθεί πριν αρχίσει η επόμενη εντολή. Σε έναν επεξεργαστή με σωλήνωση, όλα τα στάδια μπορούν να εργάζονται ταυτόχρονα σε διαφορετικές εντολές. Έτσι, όταν αυτή η εντολή βρίσκεται στο στάδιο εκτέλεσης, μια δεύτερη εντολή θα βρίσκεται στο στάδιο αποκωδικοποίησης και μια 3η εντολή θα βρίσκεται στο στάδιο ανάκτησης.

Παράδειγμα 2

Για την καλύτερη κατανόηση της έννοιας, μπορούμε να εξετάσουμε έναν θεωρητικό αγωγό 3 σταδίων:

Στάδιο

Περιγραφή

Φορτίο

Εντολή ανάγνωσης από τη μνήμη

Εκτέλεση

Εκτέλεση εντολής

Κατάστημα

Αποθήκευση του αποτελέσματος στη μνήμη ή/και στους καταχωρητές

και μια λίστα ψευδοκώδικα συναρμολόγησης προς εκτέλεση:

LOAD #40, A ; φορτώστε 40 στο A MOVE A, B ; αντιγράψτε το A στο B ADD #20, B ; προσθέστε 20 στο B STORE B, 0x300 ; αποθηκεύστε το B στο κελί μνήμης 0x300

Αυτό είναι το πώς θα εκτελεστεί:

Ρολόι 1

Φορτίο

Εκτέλεση

Κατάστημα

ΦΟΡΤΊΟ

 

 

Η εντολή LOAD λαμβάνεται από τη μνήμη.

Ρολόι 2

Φορτίο

Εκτέλεση

Κατάστημα

MOVE

ΦΟΡΤΊΟ

 

Η εντολή LOAD εκτελείται, ενώ η εντολή MOVE ανακτάται από τη μνήμη.

Ρολόι 3

Φορτίο

Εκτέλεση

Κατάστημα

ADD

MOVE

ΦΟΡΤΊΟ

Η εντολή LOAD βρίσκεται στο στάδιο Store, όπου το αποτέλεσμά της (ο αριθμός 40) θα αποθηκευτεί στον καταχωρητή Α. Εν τω μεταξύ, εκτελείται η εντολή MOVE. Δεδομένου ότι πρέπει να μετακινήσει τα περιεχόμενα του A στον B, πρέπει να περιμένει το τέλος της εντολής LOAD.

Ρολόι 4

Φορτίο

Εκτέλεση

Κατάστημα

STORE

ADD

MOVE

Η εντολή STORE φορτώνεται, ενώ η εντολή MOVE ολοκληρώνεται και η ADD υπολογίζεται.

Και ούτω καθεξής. Σημειώστε ότι, μερικές φορές, μια εντολή εξαρτάται από το αποτέλεσμα μιας άλλης (όπως το παράδειγμα MOVE). Όταν περισσότερες από μία εντολές αναφέρονται σε μια συγκεκριμένη θέση για έναν τελεστή, είτε διαβάζοντάς τον (ως είσοδο) είτε γράφοντάς τον (ως έξοδο), η εκτέλεση αυτών των εντολών με σειρά διαφορετική από την αρχική σειρά του προγράμματος μπορεί να οδηγήσει στην κατάσταση κινδύνου (που αναφέρθηκε παραπάνω).

Γενικός αγωγός 4 σταδίων- τα χρωματιστά κουτιά αντιπροσωπεύουν εντολές ανεξάρτητες μεταξύ τουςZoom
Γενικός αγωγός 4 σταδίων- τα χρωματιστά κουτιά αντιπροσωπεύουν εντολές ανεξάρτητες μεταξύ τους

Μια φούσκα στον κύκλο 3 καθυστερεί την εκτέλεσηZoom
Μια φούσκα στον κύκλο 3 καθυστερεί την εκτέλεση

Σχετικές σελίδες

  • Αγωγός (πληροφορική)
  • Παράλληλοι υπολογισμοί
  • Παραλληλισμός σε επίπεδο εντολών

Ερωτήσεις και απαντήσεις

Q: Τι είναι η διοχέτευση εντολών σε σωλήνες;


Α: Η διοχέτευση εντολών είναι μια τεχνική που χρησιμοποιείται στη σχεδίαση των σύγχρονων μικροεπεξεργαστών, μικροελεγκτών και CPU για την αύξηση της απόδοσης των εντολών τους, διαιρώντας την επεξεργασία μιας εντολής CPU σε μια σειρά ανεξάρτητων βημάτων με αποθήκευση στο τέλος κάθε βήματος.

Ερ: Πώς λειτουργεί η διοχέτευση;


Α: Η αγωγιμοποίηση λειτουργεί με τη διάσπαση της λογικής σε μικρότερα κομμάτια και την εισαγωγή flip flops μεταξύ των κομματιών της λογικής, γεγονός που μειώνει το χρόνο που απαιτείται για την αποκωδικοποίηση τιμών από τη λογική μέχρι τη δημιουργία έγκυρων εξόδων ανάλογα με τις τιμές αυτές. Αυτό επιτρέπει ταχύτερες περιόδους ρολογιού.

Ερ: Ποια είναι μερικά παραδείγματα αγωγών;


Α: Ένα παράδειγμα αγωγού είναι ο αγωγός RISC, ο οποίος χωρίζεται σε πέντε στάδια με ένα σύνολο flip flops μεταξύ κάθε σταδίου.

Ερ: Πώς αυξάνει η διοχέτευση με αγωγούς την απόδοση των εντολών;


Α: Η διοχέτευση αυξάνει την απόδοση εντολών επιτρέποντας στις μονάδες της ΚΜΕ να εργάζονται παράλληλα, γεγονός που μειώνει τον χρόνο αδράνειας κατά τη διάρκεια ενός κύκλου εντολών και αυξάνει τον συνολικό χρόνο επεξεργασίας.

Ερ: Είναι κάθε αγωγός αγωγιμοποίησης πλήρως αγωγιμοποιημένος;


Α: Όχι, δεν είναι όλοι οι αγωγοί πλήρως διοχετευμένοι- ορισμένοι αγωγοί έχουν κύκλους αναμονής που καθυστερούν την πρόοδο στον αγωγό.

AlegsaOnline.com - 2020 / 2023 - License CC3