Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 2 Εντολές : Η γλώσσα του υπολογιστή Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του Τ.Ε.Ι. Κρήτης. Τελευταία τροποποίηση: 2014-2015 χειμερινό εξάμηνο.
Σύνολο εντολών Το λεξιλόγιο των «διαταγών» που είναι κατανοητές από ένα υπολογιστή Διαφορετικοί υπολογιστές έχουν διαφορετικά σύνολα εντολών Αλλά με παρόμοιες θεμελιώδεις αρχές Επειδή υπάρχουν βασικές λειτουργίες που όλοι οι υπολογιστές πρέπει να παρέχουν Επειδή οι σχεδιαστές έχουν έναν κοινό στόχο: Μεγιστοποίηση απόδοσης και ελαχιστοποίηση κόστους Οι πρώτοι υπολογιστές είχαν πολύ απλά σύνολα εντολών Απλοποιημένη υλοποίηση Πολλοί σύγχρονοι (μοντέρνοι) υπολογιστές έχουν επίσης απλά σύνολα εντολών Chapter 2 Instructions: Language of the Computer 2
Δύο διαφορετικές φιλοσοφίες (στρατηγικές) σχεδίασης επεξεργαστών CISC (Complex Instruction Set Computer) Όταν μέσα σε ενιαίες εντολές εκτελούνται κάμποσες λειτουργίες χαμηλού επιπέδου (π.χ. φόρτωμα από την μνήμη, αριθμητική πράξη, αποθήκευση στην μνήμη). Τέτοια παραδείγματα είναι: IBM System/360, PDP-11, VAX, Motorola 68k, και Intel x86. RISC (Reduced Instruction Set Computer) Στηρίζεται στην ιδέα ότι το απλοποιημένο σύνολο εντολών μπορεί να προσφέρει υψηλότερη απόδοση αν συνδυαστεί με μικροεπεξεργαστή ικανό να τις εκτελεί με λιγότερους κύκλους/εντολή. Τέτοια παραδείγματα είναι: DEC Alpha, AMD 29k, ARC, ARM, Atmel AVR, Intel i860 και i960, MIPS, Motorola 88000, Power (PowerPC) και SPARC. Chapter 2 Instructions: Language of the Computer 3
MIPS Ακρωνύμιο από: Microprocessor without Interlocked Pipeline Stages (Μικροεπεξεργαστής χωρίς αλληλεμπλεκόμενα στάδια διοχέτευσης) Υπάρχουν πολλές εκδόσεις συνόλου εντολών MIPS (MIPS I, MIPS II,, MIPS V, MIPS32, MIPS64) Εμείς θα μελετήσουμε την τρέχουσα έκδοση MIPS32, που είναι μια 32-μπιτη υλοποίηση. Επίσης, είναι διαθέσιμες προαιρετικές επεκτάσεις, όπως: MIPS-3D (απλό σύνολο εντολών κινητής υποδιαστολής SIMD, εξειδικευμένο για 3D εργασίες), MDMX (πιο επεκταμένο σύνολο εντολών SIMD για ακεραίους χρησιμοποιώντας τους 64μπιτους καταχωρητές κινητής υποδιαστολής, MIPS MT (Προσθέτει δυνατότητες MultiThreading), κ.α. Chapter 2 Instructions: Language of the Computer 4
Το σύνολο των εντολών του MIPS Χρησιμοποιείται ως παράδειγμα σε όλο το βιβλίο Το ερευνητικό έργο Stanford MIPS το εκμεταλλεύτηκε εμπορικά η MIPS Technologies (www.mips.com) (αρχικά ονομαζόταν MIPS Computer Systems) Μεγάλη μερίδα της αγοράς των ενσωματωμένων πυρήνων (Μόνο το 2002 κατασκευάστηκαν ~100 εκατομ.) Εφαρμογές σε καταναλωτικά ηλεκτρονικά, εξοπλισμό δικτύωσης/αποθήκευσης, φωτογραφικές μηχανές, εκτυπωτές, κινητά τηλέφωνα, Τυπικό παράδειγμα πολλών μοντέρνων ISAs Βλέπε την πράσινη κάρτα με τα δεδομένα αναφοράς MIPS (μετά το 1980) Chapter 2 Instructions: Language of the Computer 5
Μικροεπεξεργαστές MIPS Βρίσκονται σε προϊόντα των εταιρειών: ATI Technologies, Broadcom, Cisco, NEC, Nintendo, Silicon Graphics, Sony, Texas Instruments, Toshiba, κ.α. Chapter 2 Instructions: Language of the Computer 6
Αριθμητικές πράξεις Πρόσθεση και αφαίρεση, τρεις τελεστέοι Δύο προέλευσης και ένας προορισμού add a, b, c # βάλε στο a το b + c a b+c Όλες οι αριθμητικές πράξεις έχουν αυτή την μορφή Σχεδιαστική αρχή 1: Η απλότητα ευνοεί την κανονικότητα Η κανονικότητα απλοποιεί την υλοποίηση Η απλότητα επιφέρει μεγαλύτερη απόδοση με μικρότερο κόστος Υπολογίστε το άθροισμα τεσσάρων μεταβλητών Chapter 2 Instructions: Language of the Computer 7
Αριθμητικό παράδειγμα Κώδικας σε C : a = b + c; d = a e; Κώδικας MIPS : add a, b, c sub d, a, e # a = b + c? # d = a - e Chapter 2 Instructions: Language of the Computer 8
Κι άλλο αριθμητικό παράδειγμα Κώδικας σε C : f = (g + h) - (i + j); Κώδικας MIPS : add t0, g, h # temp t0 = g + h add t1, i, j #? temp t1 = i + j sub f, t0, t1 # f = t0 - t1 Chapter 2 Instructions: Language of the Computer 9
Τελεστέοι υλικού των υπολογιστών Οι αριθμητικές εντολές χρησιμοποιούν ως τελεστέους τα περιεχόμενα καταχωρητών (register operands) Ο MIPS έχει 32 καταχωρητές με 32 μπιτ έκαστος Χρησιμοποιούνται στα συχνά προσπελάσιμα δεδομένα Είναι αριθμημένοι από το 0 έως το 31 Ομάδες δεδομένων των 32 μπιτ ονομάζονται «λέξεις» (words) Σύμβαση για τα ονόματα στον συμβολομεταφραστή $t0, $t1,, $t9 για προσωρινούς (temporary) καταχωρητές $s0, $s1,, $s7 για αποθηκευμένους (saved) καταχωρητές Σχεδιαστική αρχή 2: Το μικρότερο είναι ταχύτερο Πολύ μεγαλύτερος αριθμός καταχωρητών θα μπορούσε να αυξήσει δραματικά τον χρόνο κύκλου ρολογιού Σε αντίθεση με την κύρια μνήμη που έχει εκατομμύρια ή ακόμα και δισεκατομμύρια θέσεων Chapter 2 Instructions: Language of the Computer 10
το ίδιο με χρήση καταχωρητών Κώδικας σε C: f = (g + h) - (i + j); (Όπου: το f στο $s0, το g στο $s1, το h στο $s2, το i στο $s3, το j στο $s4, και επιπλέον χρησιμοποιούνται ως προσωρινοί καταχωρητές οι $t0 και $t1) Κώδικας MIPS: add $t0, $s1, $s2 # $t0 g + h add $t1, $s3, $s4 # $t1 i + j sub $s0, $t0, $t1 # f $t0 - $t1 (το οποίο είναι το: (g + h) - (i + j)) Chapter 2 Instructions: Language of the Computer 11
Τελεστέοι Μνήμης Η κύρια μνήμη χρησιμοποιείται για σύνθετα δεδομένα Πίνακες (arrays), δομές (structures), δυναμικά δεδομένα Για να πραγματοποιηθούν αριθμητικές πράξεις Φορτώνονται (load) οι τιμές από την μνήμη στους καταχωρητές Αποθηκεύονται (store) τα αποτελέσματα από τους καταχωρητές στη μνήμη Η μνήμη διευθυνσιοδοτείται σε επίπεδο ψηφιολέξης Κάθε διεύθυνση καθορίζει (ταυτοποιεί) μια ψηφιολέξη (byte) Οι λέξεις στη μνήμη είναι ευθυγραμμισμένες (aligned) Η διεύθυνση (μια λέξης) πρέπει να είναι πολλαπλάσιο του 4 Ο MIPS είναι τύπου Big Endian (μεγάλου άκρου) Το σημαντικότερο byte στη μικρότερη διεύθυνση Σε αντίθεση με το Little Endian (μικρού άκρου) όπου το λιγότερο σημαντικό byte ευρίσκεται στην μικρότερη διεύθυνση Τι συμβαίνει με τον προσομοιωτή SPIM; Chapter 2 Instructions: Language of the Computer 12
Τελεστέοι Μνήμης (παράδειγμα 1) Κώδικας σε C: g = h + A[8]; (Όπου: το g στο $s1, το h στο $s2, και διεύθυνση βάσης του Α στο $s3 και επιπλέον χρησιμοποιείται ως προσωρινός καταχωρητής ο $t0) Κώδικας MIPS: Ο αριθμοδείκτης 8 απαιτεί σχετική απόσταση ίση με 32 4 ψηφιολέξεις (bytes) ανά λέξη (word) lw $t0, 32($s3) add $s1, $s2, $t0 Θεωρείστε ότι ο πίνακας Α είναι πίνακας 32-μπιτων ακεραίων (δηλαδή, ο καθένας απαιτεί χώρο τεσσάρων ψηφιολέξεων ) # load word σχετική απόσταση (offset) καταχωρητής βάσης (base register) Chapter 2 Instructions: Language of the Computer 13
Τελεστέοι Μνήμης (παράδειγμα 2) Κώδικας C: A[9] = h + A[8]; (Όπου: το h στο $s2, και η διεύθυνση βάσης του Α στο $s3 και επιπλέον χρησιμοποιείται ως προσωρινός καταχωρητής ο $t0) Κώδικας MIPS: Ο αριθμοδείκτης 8 απαιτεί σχετική απόσταση 32, ενώ ο 9 απαιτεί 36. lw $t0, 32($s3) add $t0, $s2, $t0 sw $t0, 36($s3) # load word # store word Chapter 2 Instructions: Language of the Computer 14
Καταχωρητές εναντίον Μνήμης Οι καταχωρητές παρέχουν ταχύτερη πρόσβαση από την μνήμη Η λειτουργία με δεδομένα που βρίσκονται στην μνήμη απαιτεί φορτώσεις (loads) και αποθηκεύσεις (stores) Πρέπει να εκτελεστούν περισσότερες εντολές Ο μεταγλωττιστής πρέπει να χρησιμοποιεί τους καταχωρητές για τις μεταβλητές όσο το δυνατόν περισσότερο Σκόρπισμα (spill) στη μνήμη μόνο των λιγότερο συχνά χρησιμοποιούμενων μεταβλητών ή αυτών που θα χρησιμοποιηθούν εντατικά αργότερα Η αποδοτική χρήση των καταχωρητών είναι σημαντική! Chapter 2 Instructions: Language of the Computer 15
Σταθεροί ή άμεσοι τελεστέοι Σταθερές που καθορίζονται σε μια εντολή, π.χ. άμεση πρόσθεση (add immediate): addi $s3, $s3, 4 # $s3 <- $s3 + 4 Δεν υπάρχει εντολή άμεσης αφαίρεσης Απλά προσθέτουμε μια αρνητική σταθερά addi $s2, $s1, -1 # $s2 <- $s1-1 Σχεδιαστική Αρχή 3: Κάνε την συνηθισμένη περίπτωση γρήγορη Μικρές σταθερές τιμές εμφανίζονται συχνά Η χρήση άμεσου τελεστή μας γλυτώνει από μια εντολή φόρτωσης από την μνήμη Chapter 2 Instructions: Language of the Computer 16
Η σταθερά Μηδέν (Zero) Ο καταχωρητής 0 του MIPS ($zero) είναι η σταθερά μηδέν (0) Δεν μπορεί να αλλάξει περιεχόμενο Πολύ χρήσιμος για τετριμμένες λειτουργίες π.χ., μεταφορά μεταξύ καταχωρητών add $t2, $s1, $zero # $t2 <- $s1 ή αρχικοποίηση μεταβλητών addi $t3, $zero, 10 # $t3 <- 10 and $t4, $t4, $zero # $t4 <- 0 Chapter 2 Instructions: Language of the Computer 17