Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 3 Αριθμητική Υπολογιστών Έβδομη (7 η ) δίωρη διάλεξη. Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του Τ.Ε.Ι. Κρήτης. Τελευταία τροποποίηση: 2017-2018 εαρινό εξάμηνο.
Αριθμητική Υπολογιστών Πράξεις με ακεραίους Πρόσθεση (addition) και αφαίρεση (subtraction) Πολλαπλασιασμός (multiplication) και διαίρεση (division) Χειρισμός της υπερχείλισης (overflow) Πραγματικοί αριθμοί κινητής υποδιαστολής (Floating-point) Αναπαράσταση αριθμών και πράξεις Chapter 3 Arithmetic for Computers 2
Πρόσθεση ακεραίων Παράδειγμα: 7 + 6 Κρατούμενα Έχουμε υπερχείλιση (overflow) εάν το αποτέλεσμα είναι εκτός ορίων (δηλ. δεν μπορεί να αναπαρασταθεί στο διαθέσιμο υλικό) Προσθέτοντας ένα θετικό και ένα αρνητικό τελεστέο, δεν μπορεί να προκύψει υπερχείλιση Προσθέτοντας δύο θετικούς τελεστέους Έχουμε υπερχείλιση αν το πρόσημο του αποτελέσματος είναι αρνητικό (sign bit = 1) Προσθέτοντας δύο αρνητικούς τελεστέους Έχουμε υπερχείλιση αν το πρόσημο του αποτελέσματος είναι θετικό (sign bit = 0) Chapter 3 Arithmetic for Computers 3
Αφαίρεση ακεραίων Για να κάνουμε αφαίρεση, προσθέτουμε στον πρώτο τελεστέο τον αντίθετο του δεύτερου τελεστέου Παράδειγμα: 7 6 = 7 + ( 6) +7: 0000 0000 0000 0111 6: 1111 1111 1111 1010 +1: 0000 0000 0000 0001 Έχουμε υπερχείλιση αν το αποτέλεσμα είναι εκτός ορίων Αφαιρώντας δύο θετικούς ή δύο αρνητικούς τελεστέους, δεν μπορεί να προκύψει υπερχείλιση Αφαιρώντας ένα θετικό από ένα αρνητικό τελεστέο Έχουμε υπερχείλιση αν το πρόσημο του αποτελέσματος είναι θετικό (sign bit = 0) Αφαιρώντας ένα αρνητικό από ένα θετικό τελεστέο Έχουμε υπερχείλιση αν το πρόσημο του αποτελέσματος είναι αρνητικό (sign bit = 1) Chapter 3 Arithmetic for Computers 4
Χειρισμός υπερχείλισης Κάποιες γλώσσες προγραμματισμού (π.χ., η C) αγνοούν την υπερχείλιση Στον MIPS μπορούμε να χρησιμοποιήσουμε τις απρόσημες (unsigned) εντολές: addu, addiu, subu. Άλλες γλώσσες (π.χ., Ada, Fortran) απαιτούν την πρόκληση μιας εξαίρεσης (exception) Στον MIPS μπορούμε να χρησιμοποιήσουμε τις εντολές: add, addi, sub. Στην υπερχείλιση, επικαλεστείτε τον χειρισμό εξαιρέσεων (invoke exception handler) Αποθηκεύστε τον PC στον καταχωρητή EPC (Exception Program Counter) [πρακτικά κρατάει την διεύθυνση της επόμενης εντολής από αυτήν που προκάλεσε την εξαίρεση]. Κάντε άλμα στην προκαθορισμένη διεύθυνση χειρισμού της εξαίρεσης (predefined handler address) Η εντολή mfc0 (move from coprocessor register) μπορεί να προσκομίσει την τιμή από το EPC, για την επιστροφή μετά από την διορθωτική δράση. Π.χ. mfc0 $t1, $14 όπου το $14 είναι το EPC. Chapter 3 Arithmetic for Computers 5
Εντοπισμός Παγίδευση υπερχείλισης (1) Ακολουθία εντολών MIPS για την παγίδευση της υπερχείλισης στην προσημασμένη πρόσθεση: ($t0 <- $t1 + $t2) addu $t0, $t1, $t2 # άθροισμα, όχι εξαίρεση xor $t3, $t1, $t2 # διαφέρουν τα πρόσημα; slt $t3, $t3, $zero # αν ναι, $t3 <- 1 αλλιώς 0 bne $t3, $zero, No_overflow # διαφέρουν, όχι υπερχειλ. xor $t3, $t0, $t1 # πρόσημα τελεστ. ίδια slt $t3, $t3, $zero # αν πρόσημο αθροίσματος bne $t3, $zero, Overflow # διαφορετικό, τότε υπερχ. No_overflow: Overflow: Chapter 3 Arithmetic for Computers 6
Εντοπισμός Παγίδευση υπερχείλισης (2) Ακολουθία εντολών MIPS για την παγίδευση της υπερχείλισης στην απρόσημη πρόσθεση: ($t0 <- $t1 + $t2) addu $t0, $t1, $t2 # άθροισμα, αλλά όχι εξαίρεση nor $t3, $t1, $zero # $t3 <- NOT ($t1) {Δηλαδή, συμπλήρωμα ως προς ένα ή συμπλ. ως προς δύο -1 : 2 32 - $t1-1 } sltu $t3, $t3, $t2 # 2 32 - $t1-1 < $t2 bne {Δηλαδή: 2 32 1 < $t1 + $t2 } $t3, $zero, Overflow # διαφέρουν, τότε υπερχείληση. Overflow: Chapter 3 Arithmetic for Computers 7
Αριθμητική για Πολυμέσα (Multimedia) Η επεξεργασία γραφικών και πολυμέσων λειτουργεί πάνω σε διανύσματα δεδομένων των 8 και των 16 bit Χρήση αθροιστή (adder) 64-bit, με επιμερισμένη αλυσίδα κρατουμένου (carry) Λειτουργεί με διανύσματα 8 8-bit, 4 16-bit, ή 2 32-bit SIMD (single-instruction, multiple-data) Κορεσμένες Πράξεις (Saturating operations) Στην υπερχείλιση, αποτέλεσμα είναι η μέγιστη απεικονίσιμη τιμή Σε αντίθεση με την αριθμητική συμπληρώματος ως προς δύο (c.f. 2scomplement modulo arithmetic) Π.χ. το κτύπημα «ψαλιδισμός» στον ήχο (clipping in audio), κορεσμός στο βίντεο (saturation in video) Chapter 3 Arithmetic for Computers 8
Πολλαπλασιασμός (Multiplication) Ας ξεκινήσουμε με την σειριακή έκδοση πολλαπλασιαστέος (multiplicand) πολλαπλασιαστής (multiplier) γινόμενο (product) 1000 1001 1000 0000 0000 1000 1001000 Αρχικά ο πολλαπλασιαστέος 000 00 32 bits Αρχικά ο πολλαπλασιαστής SI= 0 LSB Το μήκος του γινομένου δύναται να ισούται με το άθροισμα των μηκών των τελεστέων. Αρχικά 0 Chapter 3 Arithmetic for Computers 9
Υλικό πολλαπλασιασμού και αλγόριθμος Αρχικά 0 Chapter 3 Arithmetic for Computers 10
Βελτιωμένος πολλαπλασιαστής Εκτέλεση βημάτων (πράξεων) παράλληλα: πρόσθεση/ολίσθηση Αρχικά ο πολλαπλασιαστής 000 00 32 bits LSB Ένας κύκλος για κάθε πρόσθεση μερικού γινομένου Ικανοποιητικό, αν συχνότητα εκτέλεσης πολλαπλασιασμών είναι χαμηλή Chapter 3 Arithmetic for Computers 11
Ταχύτερος Πολλαπλασιαστής Χρησιμοποιεί πολλούς αθροιστές Αναζήτηση χρυσής τομής κόστους/απόδοσης (Cost/performance tradeoff) Μπορεί να εισαχθεί διοχέτευση (pipeline) Μερικοί πολλαπλασιασμοί εκτελούνται παράλληλα Chapter 3 Arithmetic for Computers 12
Ο πολλαπλασιασμός στον MIPS Δύο καταχωρητές 32-bit για το γινόμενο Hi: έχει τα 32 σημαντικότερα δυαδικά ψηφία Lo: έχει τα 32 λιγότερο σημαντικά δυαδικά ψηφία Εντολές mult rs, rt / multu rs, rt Το γινόμενο έχει 64-bit και ευρίσκεται στους Hi/Lo mfhi rd / mflo rd Μεταφέρει τα περιεχόμενα των Hi/Lo στον καταχωρητή rd Μπορούμε να ελέγξουμε την τιμή του καταχωρητή Hi για να δούμε αν το γινόμενο υπερχείλισε (πέρα από τα 32 bits) mul rd, rs, rt {multiplication without overflow} Ψευδοεντολή η οποία μεταφέρει τα 32 λιγότερο σημαντικά δυαδικά ψηφία του γινομένου (των rs x rt) στον καταχωρητή rd Chapter 3 Arithmetic for Computers 13
Διαίρεση (Division) διαιρέτης (divisor) πηλίκο (quotient) διαιρετέος (dividend) υπόλοιπο (remainder) 1001 1000 1001010-1000 10 101 1010-1000 10 Τελεστέοι με n δυαδικά ψηφία παράγουν πηλίκο και υπόλοιπο με n δυαδικά ψηφία το καθένα. Έλεγχος για διαιρέτη μηδέν (0) Η απλή τεχνική της διαίρεσης Εάν ο διαιρέτης διαιρετέο Τοποθετείται 1 στο πηλίκο, αφαίρεση Διαφορετικά 0 στο πηλίκο, και κατεβάζουμε το επόμενο δυαδικό ψηφίο του διαιρετέου Διαίρεση με επαναφορά ή αποκατάσταση (Restoring division) Εκτελείται η αφαίρεση, και αν το υπόλοιπο γίνει < 0, προστίθεται πίσω ο διαιρέτης Προσημασμένη διαίρεση (Signed division) Διαίρεση κατά απόλυτες τιμές Ρύθμιση πρόσημων πηλίκου και υπολοίπου κατά απαίτηση Chapter 3 Arithmetic for Computers 14
Υλικό διαίρεσης Αρχικά ο διαιρέτης στο αριστερό μισό Το πηλίκο με αρχική τιμή 0 32 bits 0000 00 000 00 32 bits Αρχικά ο διαιρετέος στο δεξιό μισό Chapter 3 Arithmetic for Computers 15
Βελτιωμένο κύκλωμα διαίρεσης διαιρέτης Αρχικά ο διαιρετέος στο αριστερό μισό Διαίρεση (Πολλαπλασιασμός ) διαιρετέος 000 00 υπόλοιπο πηλίκο Στο τέλος έχουμε το υπόλοιπο αριστερά και το πηλίκο δεξιά Ένας κύκλος ανά αφαίρεση μερικού υπολοίπου Μοιάζει πολύ με κύκλωμα πολλαπλασιασμού Το ίδιο υλικό μπορεί να χρησιμοποιηθεί και για τις δύο πράξεις Chapter 3 Arithmetic for Computers 16
Ταχύτερη διαίρεση Δεν μπορούμε να χρησιμοποιήσουμε παράλληλο υλικό όπως στον πολλαπλασιασμό Η αφαίρεση εξαρτάται από το πρόσημο του μερικού υπολοίπου Ταχύτεροι διαιρέτες, όπως η τεχνική της διαίρεσης SRT (Sweeney-Robertson-Tocher) παράγουν περισσότερα δυαδικά ψηφία πηλίκου ανά βήμα (τυπική τιμή 4 bit) Εξακολουθούν να απαιτούν πολλά βήματα Chapter 3 Arithmetic for Computers 17
Η διαίρεση στον MIPS Χρησιμοποιεί τους καταχωρητές Hi/Lo για τα αποτελέσματα της πράξης Hi: το υπόλοιπο (remainder) σε 32 bits Lo: το πηλίκο (quotient) σε 32 bits Εντολές div rs, rt / divu rs, rt Δεν γίνεται έλεγχος υπερχείλισης (overflow) ή διαίρεσης διά του μηδενός (divide-by-0) Το λογισμικό πρέπει να ελέγχει, αν απαιτείται Χρησιμοποιείστε mfhi, mflo για πρόσβαση στα αποτελέσματα Chapter 3 Arithmetic for Computers 18