Professional Documents
Culture Documents
Οργάνωση Και Σχεδίαση Υπολογιστών Μπέλλας Νικόλαος Πανεπιστήμιο Θεσσαλίας
Οργάνωση Και Σχεδίαση Υπολογιστών Μπέλλας Νικόλαος Πανεπιστήμιο Θεσσαλίας
Νίκος Μπέλλας
Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων
Πανεπιστήμιο Θεσσαλίας
Διάλεξη 1
Εισαγωγή στο μάθημα
• Βιβλίο:
– Patterson &Hennessy, Οργάνωση και Σχεδιασμός Υπολογιστών,
4η έκδοση, Εκδόσεις Κλειδάριθμος, Τόμοι Α & Β
– Κεφ. 1-5 και παραρτήματα
– Οι καλύτερη πηγή πληροφόρησης σε θέματα
Αρχιτεκτονικής είναι το Internet
Οργάνωση και Σχεδίαση Υπολογιστών 3
(HY232)
NVIDIA GPU
• Απάντηση: -1
0
1111
0000
– Χρειαζόμαστε και επιπλέον 1 0001
πληροφορία σχετικά με το εάν ο
… …
αριθμός είναι προσημασμένος
5 0101
– 1110 (απρόσημος)
6 0110
– -510 (προσημασμένος)
Οργάνωση και Σχεδίαση Υπολογιστών
(HY232)
7 0111
19
Υπολογισμός αντιθέτου
• Αντιστρέψτε και προσθέστε 1
– Αντιστροφή σημαίνει 1 → 0, 0 → 1
x + x = 1111...1112 = 1
x +1 = x
Παράδειγμα: το αντίθετο του +2
+2 = 0000 0000 … 00102
–2 = 1111 1111 … 11012 + 1
= 1111 1111 … 11102
C compiler
– Υπολογιστές αποθηκευμένου (machine code)
προγράμματος (stored program
computer)
Payroll
• Αυτό σημαίνει ότι τα προγράμματα data
μπορούν να αποθηκευθούν και να
μεταφερθούν σε αρχεία (files) Source code in
C for Acct prg
• Είτε σε μορφή πηγαίου κώδικα (source
code) είτε σε μορφή δυαδικού κώδικα
(binary code)
Οργάνωση και Σχεδίαση Υπολογιστών 25
(HY232)
Θεμελιώδεις Αρχές των Μοντέρνων Υπολογιστών
• Αρχή της σειριακής εκτέλεσης εντολών
• Στην κανονική ροή του προγράμματος οι εντολές
εκτελούνται η μία μετά την άλλη
• Χρήση ενός ειδικού καταχωρητή (32-bits ή 64-bit)
ως μετρητή προγράμματος (Program Counter ή PC),
ο οποίος διατηρεί τη διεύθυνση της τρέχουσας
εντολής στη μνήμη
• Έλεγχος ροής προγράμματος με άλματα και
διακλαδώσεις (σε άλλες διευθύνσεις)
Διάλεξη 2
Οργάνωση μνήμης
Καταχωρητές του MIPS
Εντολές του MIPS 1
Σύνολο Εντολών
• Το ρεπερτόριο των εντολών ενός υπολογιστή
• Διαφορετικοί υπολογιστές έχουν διαφορετικά
σύνολα εντολών
– Αλλά με πολλά κοινά χαρακτηριστικά
• Οι πρώτοι υπολογιστές είχαν πολύ απλά σύνολα
εντολών
– Απλοποιημένη υλοποίηση
• Πολλοί μοντέρνοι υπολογιστές έχουν επίσης απλά
σύνολα εντολών
• Ο σχεδιασμός ενός επιτυχημένου συνόλου εντολών
για έναν επεξεργαστή είναι η σημαντικότερη
δουλειά ενός αρχιτέκτονα υπολογιστών (Computer
Architect)
Οργάνωση και Σχεδίαση Υπoλογιστών 2
(HY232)
...
232-1 230-1
Οργάνωση μνήμης
• Η τοποθέτηση των λέξεων στη μνήμη πρέπει να
γίνεται με ευθυγραμμισμένο τρόπο (alignment),
δηλ. η διεύθυνση του πρώτου byte να είναι
πολλαπλάσιo του 4
0 1 2 3
Aligned
Not
Aligned
31 24 7 0
0 Οργάνωση 0
23 16 μνήμης 15 8
1 1
15 8 23 16
2 2
7 0 31 24
3 3
big endian
little endian
31 24 23 16 15 8 7 0
καταχωρητής
8
Οργάνωση και Σχεδίαση Υπoλογιστών
(HY232)
Οργάνωση μνήμης
0 ΑΑ 0 AA
1 ΒΒ 1 BB
2 CC Οργάνωση 2 CC
μνήμης
3 DD 3 DD
31 24 23 16 15 8 7 0
AA BB CC DD
big endian 31 24 23 16 15 8 7 0
DD CC BB AA
little endian
9
Οργάνωση και Σχεδίαση Υπoλογιστών
(HY232)
Επέκταση προσήμου
• Αναπαράσταση αριθμού με περισσότερα bits
– Διατηρώντας την αριθμητική τιμή του
• Αντιγράψτε το πρόσημο αριστερά
– π.χ. απρόσημες τιμές: επεκτείνονται με μηδενικά
• Παραδείγματα: 8-bit σε 16-bit
– +2: 0000 0010 => 0000 0000 0000 0010
– –2: 1111 1110 => 1111 1111 1111 1110
...
base register + data
register
...
offset
Οργάνωση και Σχεδίαση Υπoλογιστών 16
(HY232)
Εντολές μεταφοράς
• Παράδειγμα προσπέλασης σύνθετης δομής.
Εάν έχουμε έναν integer πίνακα Α (int A[100]) του
οποίου η διεύθυνση βάσης (δηλ. η διεύθυνση του
πρώτου στοιχείου) βρίσκεται στον καταχωρητή
βάσης $s1, τότε η εντολή:
lw $s0,32($s1)
φορτώνει το όγδοο στοιχείο του πίνακα στον
καταχωρητή $s0, ενώ η εντολή:
sw $s0,48($s1)
αποθηκεύει το εν λόγω στοιχείο - από τον $s0 - στη
θέση του δωδέκατου στοιχείου (δηλ. Α[12] = Α[8])
Οργάνωση και Σχεδίαση Υπoλογιστών 17
(HY232)
Παράδειγμα
$s3 = &A[0]
Α[0] Α[1] Α[2] Α[3] Α[4] Α[5] Α[6] Α[7] Α[8] Α[9] ….
Απόσταση (Offset)
• Κώδικας C:
g = h + A[8];
– Το g είναι στον $s1, το h στον $s2, και η διεύθυνση
(βάση) του A στον $s3
• Μεταγλωττισμένος κώδικας MIPS:
– Η θέση 8 βρίσκεται 32 bytes μετά την αρχή του Α
• 4 bytes ανά λέξη
lw $t0, 32($s3) # load word
add $s1, $s2, Οργάνωση
$t0 και Σχεδίαση Υπoλογιστών
(HY232) 18
$t1: 0xFF 0xFF 0xFF 0xFF $t1: 0xFF 0xFF 0xFF 0xFF
lwl $t1, 1($t0) # Load Word Left lwr $t1, 6($t0) # Load Word Right
$t1: 0x02 0x01 0xFF 0xFF $t1: 0xFF 0xFF 0xDD 0xCC
• Πεδία εντολής
– op: opcode (κώδικας λειτουργίας)
– rs: τελεστέος προέλευσης 1ου καταχωρητή
– rt: τελεστέος προέλευσης 2ου καταχωρητή
– rd: τελεστέος καταχωρητή προορισμού
– shamt: ποσότητα ολίσθησης (shift amount) (00000 για
τώρα)
– funct: κωδικός συνάρτησης (function code)
0 17 18 8 0 32
000000100011001001000000001000002 = 0232402016
Λογικές πράξεις
• Εντολές για χειρισμό ακεραίων σε επίπεδο bit
op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Πράξη AND
• Χρήσιμη ως μάσκα ("καλύπτει" κάποια bits
στη λέξη)
– Επέλεξε κάποια bits, κάνε τα υπόλοιπα 0
and $t0, $t1, $t2
$t2 0000 0000 0000 0000 0000 1101 1100 0000
Άμεσοι Τελεστέοι
• Σταθερά δεδομένα που εμφανίζονται σε μια εντολή
addi $s3, $s3, 4
• Δεν υπάρχει εντολή για άμεση αφαίρεση
– Απλά χρησιμοποιείστε μια αρνητική σταθερά.
addi $s2, $s1, -1
• Ο καταχωρητής $0 του MIPS ($zero) είναι η σταθερά
0
– Η τιμή του καταχωρητή αυτού δε μπορεί να
διαγραφεί/μεταβληθεί
• Χρήσιμος για πολλές πράξεις
– π.χ., μετακίνηση δεδομένων σε άλλο καταχωρητή
add $t2, $s1, $zero
Οργάνωση και Σχεδίαση
Υπoλογιστών (HY232) 16
Σχεδιαστική Αρχή
• Κάντε τη συνηθισμένη περίπτωση γρήγορη.
– Μικρές σταθερές είναι συνήθεις
– Με τη χρήση άμεσων τελεστέων αποφεύγουμε τη
χρήση μιας επιπλέον εντολής load.
Μεταγλώττιση εντολών if
• κώδικας C :
if (i==j) f = g+h;
else f = g-h;
– f, g,h… στους $s0, $s1, …
• Μεταγλωττισμένος κώδικας MIPS:
bne $s3, $s4, Else
add $s0, $s1, $s2
j Exit
Else: sub $s0, $s1, $s2
Exit: …
Ο assembler (συμβολομεταφραστής)
υπολογίζει τις διευθύνσεις
Οργάνωση και Σχεδίαση Υπoλογιστών 20
(HY232)
Μεταγλώττιση βρόχων
• Κώδικας C:
int save[100];
• Αντίστοιχη ψευδο-εντολή
blt $s1, $s2, L
Οργάνωση και Σχεδίαση Υπoλογιστών 22
(HY232)
Σχεδίαση εντολών διακλάδωσης
• Γιατί δεν υπάρχουν οι πραγματικές εντολές
blt, bge, κτλ?
• Ο υπολογισμός του <, ≥, … είναι πιο αργός
από τον υπολογισμό του =, ≠
– Ο συνδυασμός σύγκρισης με διακλάδωση χρειάζεται
περισσότερη δουλειά ανά εντολή και απαιτεί πιο αργό
ρολόι.
– Αυτό καθυστερεί όλες τις εντολές!
• beq και bne είναι οι πιο συνήθεις εντολές
• Αυτό είναι παράδειγμα συμβιβασμού (trade-
off) Οργάνωση και Σχεδίαση Υπoλογιστών 23
(HY232)
Ψευδοεντολές
• Οι περισσότερες εντολές του συμβολο-
μεταφραστή έχουν μία προς μία αντιστοιχία με
εντολές της γλώσσας μηχανής.
• Ψευδοεντολές: δεν είναι μέρος του συνόλου
εντολών (ISA)
move $t0, $t1 → add $t0, $zero, $t1
blt $t0, $t1, L → slt $at, $t0, $t1
bne $at, $zero, L
– $at ($1): δεν μπορεί να χρησιμοποιηθεί από τον
χρήστη, παρά μόνο από τον συμβολομεταφραστή
Οργάνωση και Σχεδίαση Υπoλογιστών 24
(HY232)
Προσημασμένο / Απρόσημο
• Προσημασμένη σύγκριση: slt, slti
• Απρόσημη σύγκριση: sltu, sltui
• Παράδειγμα:
– $s0 = 1111 1111 1111 1111 1111 1111 1111 1111
– $s1 = 0000 0000 0000 0000 0000 0000 0000 0001
– slt $t0, $s0, $s1 # signed
• –1 < +1 $t0 = 1
– sltu $t0, $s0, $s1 # unsigned
• +4,294,967,295 > +1 $t0 = 0
Διευθυνσιοδότηση διακλαδώσεων
• Οι εντολές διακλαδώσεων προσδιορίζουν:
– Opcode, δύο καταχωρητές, διεύθυνση προορισμού
– Μορφή-Ι
• Ο προορισμός είναι συνήθως κοντά
– Είτε πιο μπροστά είτε πιο πίσω
– Η address δείχνει αριθμό 32-bit words , και όχι bytes
op rs rt constant or address
6 bits 5 bits 5 bits 16 bits
op address
6 bits 26 bits
Παράδειγμα
• Το Loop αρχίζει στη διεύθυνση 0x80000
Διάλεξη 4
Συναρτήσεις-Διαδικασίες
Διαδικασίες (procedures)
Γνωστές και σαν υπορουτίνες (subroutines)
Διαδικασίες (procedures)
Γνωστές και σαν υπορουτίνες (subroutines)
• Η διαδικασία γράφεται σαν ένα ανεξάρτητο πρόγραμμα που
ορίζει και επεξεργάζεται τις δικές της - εσωτερικές -
μεταβλητές ή δεδομένα, κάτι που συνεπάγεται ότι:
– Δεσμεύει δικό της τμήμα δεδομένων στον αντίστοιχο χώρο της
μνήμης
– Έχει τη δυνατότητα να χρησιμοποιήσει τους ίδιους καταχωρητές με
το κυρίως πρόγραμμα για την επεξεργασία των δεδομένων της
• Η χρήση κοινών καταχωρητών σημαίνει ότι εκείνοι που
χρειάζονται από το κυρίως πρόγραμμα θα πρέπει να
αποθηκευτούν σε κάποιο χώρο μνήμης κατά την κλήση της
διαδικασίας, και αργότερα να ανακτηθούν από το χώρο
αυτό με την επιστροφή από τη διαδικασία
– Η δομή μνήμης που χρησιμοποιείται για την αποθήκευση και
ανάκτηση των περιεχομένων Υπολογιστών είναι η στοίβα (stack)
καταχωρητών
Οργάνωση και Σχεδίαση 3
(ΗΥ232)
Υποστήριξη διαδικασιών (procedures)
στον MIPS
• Στον MIPS, ένα πρόγραμμα πρέπει να ακολουθήσει
τα παρακάτω βήματα όταν καλεί μια διαδικασία
(caller calls a callee) :
1. O καλών (caller) τοποθετεί τις παράμετρους της
διεργασίας (callee) κάπου που να μπορεί τις ανακτήσει η
διεργασία αυτή.
• Καταχωρητές ορίσματος $a0-$a3 (argument registers) ($4-$7)
• Για περισσότερα από 4 ορίσματα, ο καλών(caller) χρησιμοποιεί
την μνήμα στοίβας (stack)
2. O καλών μεταβιβάζει τον έλεγχο στη διαδικασία
• Χρησιμοποιώντας μια εντολή αλλαγής ροής χωρίς συνθήκη
(εντολή άλματος και σύνδεσης, jal)
Υποστήριξη διαδικασιών(procedures)
στον MIPS
3. H διαδικασία (callee) καταλαμβάνει μνήμη στην στοίβα
(stack) που θα χρειαστεί κατά την εκτέλεση της.
• Αυτόματες μεταβλητές (automatic variables) της διαδικασίας
(callee) τοποθετούνται στην στοίβα.
• Επίσης, όσοι καταχωρητές διαγράφονται μέσα στην διαδικασία,
ενώ η παλιά τους τιμή χρειάζεται από τον καλούντα
αποθηκεύονται στην στοίβα από τον καλούντα.
4. H διαδικασία εκτελείται
5. H διαδικασία τοποθετεί το αποτελέσμα σε καταχωρητή
(για να το προσπελάσει η καλούσα διαδικασία)
• Καταχωρητές τιμής $v0-$v1 (value registers) ($2-$3)
6. H διαδικασία επιστρέφει στο σημείο κλήσης
• Χρησιμοποιώντας μια εντολή αλλαγής ροής χωρίς συνθήκη
(jump register, jr)
Οργάνωση και Σχεδίαση Υπολογιστών 5
(ΗΥ232)
Χρήση καταχωρητών
• Κατά την εκτέλεση μιας διαδικασίας, πολλοί από
τους καταχωρητές του MIPS, έχουν ειδική σημασία:
Χρήση καταχωρητών
• $gp: καθολικός δείκτης (global pointer) στατικών δεδομένων
($28)
• $sp: δείκτης στοίβας (stack pointer) ($29)
• $fp: δείκτης πλαισίου (30)
• pc: μετρητής προγράμματος (program counter)
0x1000: jal L1
0x1004 ....
– Η διεύθυνση της επόμενης εντολής τοποθετείται
στον $ra ($ra = 0x1004)
– Μεταπήδηση στη διεύθυνση προορισμού L1
Οργάνωση και Σχεδίαση Υπολογιστών 8
(ΗΥ232)
Στοίβα (Stack)
Κατανομή μνήμης
• Κείμενο (Text): κώδικας
• Στατικά δεδομένα (static
data segment): καθολικές
μεταβλητές
– πχ., στατικές μεταβλητές C,
πίνακες, συμβολοσειρές
– $gp : επιτρέπει εύκολη
πρόσβαση στο τμήμα
• Δυναμικά δεδομένα: σωρός
(heap)
– π.χ., malloc στη C,
new στη Java
• Τοπικές ματαβλητές: Στοίβα
(Stack)
Οργάνωση και Σχεδίαση Υπολογιστών 13
(ΗΥ232)
Παράδειγμα:
Διαδικασία-φύλλο (Leaf procedure)
Διαδικασίες-φύλλα
int leaf_ex (int g, int h, int i, int j) {
int f;
f = (g + h) - (i + j);
return f;
• κώδικας MIPS: }
leaf_ex:
addi $sp, $sp, -4
Αποθήκευση $s0
sw $s0, 0($sp) στη στοίβα
add $t0, $a0, $a1
add $t1, $a2, $a3 Σώμα διαδικασίας
sub $s0, $t0, $t1
move $v0, $s0 Αποτέλεσμα
lw $s0, 0($sp) Επαναφορά $s0
addi $sp, $sp, 4
jr $ra Επιστροφή
Παράδειγμα (assembly)
• Κώδικας MIPS:
strcpy:
addi $sp, $sp, -4 # ρύθμιση στοίβας για 1 τιμή
sw $s0, 0($sp) # αποθήκευση $s0
li $s0, $zero # i = 0
L1: add $t1, $s0, $a1 # διευθ. του y[i] στον $t1
lb $t2, 0($t1) # $t2 = y[i]
add $t3, $s0, $a0 # διευθ. του x[i] στον $t3
sb $t2, 0($t3) # x[i] = y[i]
beq $t2, $zero, L2 # εξοδος αν y[i] == 0
addi $s0, $s0, 1 # i = i + 1
j L1 # επόμενη επανάληψη
L2: lw $s0, 0($sp) # επαναφορά $s0
addi $sp, $sp, 4 # αφαίρ. τιμής από στοίβα
jr $ra # και επιστροφή
Bubble Sort
Input: Πίνακας από Ν στοιχεία
Α[0] Α[1] Α[2] Α[3] Α[4]
3 4 10 5 3
Βασική ιδέα:
Τοποθέτησε το εκάστοτε μικρότερο στοιχείο στην αρχή του πίνακα
Α[0] Α[1] Α[2] Α[3] Α[4] Α[0] Α[1] Α[2] Α[3] Α[4]
3 4 10 3 5 3 3 4 5 10
Α[0] Α[1] Α[2] Α[3] Α[4] Α[0] Α[1] Α[2] Α[3] Α[4]
3 4 3 10 5 3 3 4 5 10
Α[0] Α[1] Α[2] Α[3] Α[4] Α[0] Α[1] Α[2] Α[3] Α[4]
3 3 4 10 5 3 3 4 5 10
Διάλεξη 6
Αναδρομή
Υπολογισμός Παραγοντικού n!
if n<1, 1
n! = 1*2..(n-1)*n =
else, n*(n-1)!
fact:
int main () {
tak (18, 12, 6);
}
Παράδειγμα αναδρομής
int tak(int x, int y, int z) {
if (y < x) {
return 1 + tak(tak(x-1,y,z),
tak(y-1,z,x),
tak(z-1,x,y));
}
else
return z;
}
int main () {
tak (18, 12, 6);
}
tak:
subu $sp, $sp, 20 # θέσεις για 5 καταχωρητές στην
sw $ra, 16($sp) # στοίβα: $ra, $s0..$s3
sw $s0, 12($sp)
sw $s1, 8($sp)
sw $s2, 4($sp)
sw $s3, 0($sp)
move $s0, $a0 # $s0 = x
move $s1, $a1 # $s1 = y
move $s2, $a2 # $s2 = z
bge $s1, $s0, L1 # if (y >= x) goto L1
addiu $a0, $s0, -1 # κώδικας για y < x
move $a1, $s1
move $a2, $s2
jal tak
move $s3, $v0 # $s3= tak(x-1, y, z)
Οργάνωση και Σχεδίαση Υπoλογιστών 7
(HY232)
Παράδειγμα αναδρομής
int tak(int x, int y, int z) {
if (y < x) {
return 1 + tak(tak(x-1,y,z),
tak(y-1,z,x),
tak(z-1,x,y));
}
else
return z;
}
int main () {
tak (18, 12, 6);
}
Παράδειγμα αναδρομής
int tak(int x, int y, int z) {
if (y < x) {
return 1 + tak(tak(x-1,y,z),
tak(y-1,z,x),
tak(z-1,x,y));
}
else
return z;
}
int main () {
tak (18, 12, 6);
}
…… High Address
Όρισμα 6
Όρισμα 5
$fp Saved Registers
[$ra, $a0-$a3, $s0-$s7, $fp]
procedure
Automatic frame
variables
$sp
Low Address
Οργάνωση και Σχεδίαση Υπoλογιστών 10
(HY232)
for (i=0;i<10;i++)
local[i] = i;
return &local[0];
}
Αριθμητική Υπολογιστών
Πρόσθεση ακεραίων
• Παράδειγμα: 7 + 6
Υπερχείλιση (overflow)
• Υπερχείλιση: κατάσταση μη έγκυρου αποτελέσματος (το
αποτέλεσμα μιας πράξης χρειάζεται περισσότερα από τα
διαθέσιμα ψηφία για να αναπαρασταθεί)
• Παράδειγμα μη προσημασμένης πρόσθεσης
– Έστω ότι θέλουμε να προσθέσουμε δύο απρόσημους αριθμούς , και
να τοποθετήσουμε το αποτέλεσμα σε ένα καταχωρητή των 4-bits.
+14: 1110
+ 3: 0011
+17: 10001
– Το πιο σημαντικό bit δεν χωράει στον καταχωρητή overflow
– Άρα, όταν το κρατούμενο είναι cn = 1, τότε έχουμε υπερχείλιση στην
πρόσθεση
Υπερχείλιση (overflow)
• Παράδειγμα προσημασμένης πρόσθεσης
– Έστω ότι θέλουμε να προσθέσουμε δύο προσημασμένους,
αρνητικούς αριθμούς , και να τοποθετήσουμε το αποτέλεσμα σε ένα
καταχωρητή των 5-bits.
-12: 10100
- 8: 11000
-20: 101100
– Άρα, όταν το κρατούμενο είναι cn <> cn-1, τότε έχουμε υπερχείλιση
στην πρόσθεση προσημασμένων αριθμών. Εδώ cn =1, cn-1 =0
– Δεν μπορούμε ποτέ να έχουμε υπερχείλιση όταν προσθέτουμε έναν
θετικό και έναν αρνητικό αριθμό
– Δεν μπορούμε ποτέ να έχουμε υπερχείλιση όταν αφαιρούμε έναν
θετικό από έναν θετικό αριθμό ή το αντίθετο
Πολλαπλασιασμός Ακεραίων
Μη προσημασμένοι ακέραιοι: ακριβώς όπως και στον
πολλαπλασιασμό στο δεκαδικό σύστημα
πολλαπλασιαστέος
1000 (8)
πολλαπλασιαστής
× 1001 (9)
1000
0000
0000
1000
γινόμενο 01001000 (72)
add
4-bit ALU shift
right
product
multiplier Control
0000 0101 =5
add 0110 0101
0011 0010
add 0011 0010
0001 1001
add 0111 1001
0011 1100
add 0 0 1Οργάνωση
1 1100
και Σχεδίαση Η/Y (HY232) 11
0001 1 1 1 0 = 30
Προσημασμένος πολλαπλασιασμός
• Ο απλούστερος τρόπος να (-8) x (+10) με m=n=5
πολλαπλασιάσουμε δύο
προσημασμένους αριθμούς n 1. Πολλ/σμός (+8)x(+10)
Παράλληλος Πολλαπλασιαστής
• Χρήση ενός δέντρου (tree) από αθροιστές
• Όλες οι προσθέσεις γίνονται παράλληλα
• Παράδειγμα: 8x9 = 72
1 0 0 0
1
1 0 0 0
0
0 0 1 0 0 0
0 0 0 1 1
0 1 0 0 1 0 0 0
Διαίρεση
Διαιρετέος Διαιρέτης • Έλεγχος για διαιρέτη 0
• Ο κλασσικός αλγόριθμος
– Αν ο διαιρέτης χωράει στο διαιρετέο
1001010 1000 • 1 στο πηλίκο, αφαίρεση
-1000 – Αλλιώς
10 1001
• 0 στο πηλίκο, κατεβαίνει επόμενο ψηφίο
101
1010 • Προσημασμένη διαίρεση
Πηλίκο – Κάνουμε διαίρεση χρησιμοποιώντας
-1000
10 απόλυτες τιμές
– Διορθώνουμε το πρόσημο του πηλίκου και
74 = 8*9 + 2 του υπολοίπου αναλόγως
Υπόλοιπο
Π Εκθέτης Κλάσμα
Π Εκθέτης Κλάσμα
(- largestE) (- largestE)
(+ largestE) (+ largestE)
s E (exponent) F (fraction)
1 bit 11 bits 20 bits
F (fraction continued)
Οργάνωση 32
και bits
Σχεδίαση Η/Y (HY232) 25
1. Ευθυγράμμιση υποδιαστολής
Ολίσθηση αριθμού με μικρότερο εκθέτη (E2) κατά Ε1-Ε2
θέσεις
1,0002 × 2–1 + –0,1112 × 2–1
• Πρόσθεση σημαντικών
0,0101100100010 + -1,0011001110000 = 0,0101100100010 +
10,1100110010000 = 11,0010010110010 = -0,1101101001110
• Sum = A+B = -0,1101101001110 x 213 = -1,101101001110 x 212
Ακριβής Αριθμητική
• H στρογγυλοποίηση (rounding) χρησιμοποιείται για προσέγγιση
πραγματικών αριθμών από το πεπερασμένο πλήθος των
αριθμών κινητής υποδιαστολής
– Η στρογγυλοποίηση ενδιάμεσων αποτελεσμάτων στην πρόσθεση και
πολλαπλασιασμό μπορεί να επιφέρει χαμηλότερη προσέγγιση
– Υποθέστε μόνο 3 σημαντικά ψηφία στην παρακάτω πρόσθεση
Στρογγυλοποίηση χωρίς extra bits Στρογγυλοποίηση με guard και round bits
για ενδιάμεσα αποτελέσματα
2,56 x 100 + 2,34 x 102 = 2,56 x 100 + 2,34 x 102 =
0,0256 x 102 + 2,34 x 102 (Το 0,0256 0,0256 x 102 + 2,34 x 102 =
πρέπει να στρογγυλοποιηθεί στο 0,02, 2,3656x 102
επειδή τα ψηφία 5,6 χάνονται στην
ολίσθηση) Στρογγυλοποίηση στο 2,37x 102 για 3
Άρα : 0,02 x 102 + 2,34 x 102 = 2,36 x 102 σημαντικά ψηφία
Y+Z = 1,5 x 1038 + 1,0 = 1,5 x 1038 X+Y = -1,5 x 1038 + 1,5 x 1038 =
X+(Y+Z) = -1,5 x 1038 + 1,5 x 1038 0,0
= 0,0 (X+Y)+Z = 0,0 + 1,0 = 1,0
• Πολύ πιο
πολύπλοκος από
αθροιστή ακεραίων
• Συνήθως απαιτεί
πολλαπλούς
κύκλους μηχανής
• Τμήμα του Floating
Point Unit (FPU)
του επεξεργαστή
Παράδειγμα: °F σε °C
• Κώδικας C:
float f2c (float fahr) {
return ((5.0/9.0)*(fahr - 32.0));
}
– fahr στον $f12, αποτέλεσμα στον $f0, σταθερές στο
global memory space
– Αντίθετα με τους καταχωρητές ακεραίων, ο $f0 μπορεί να
περιέχει έναν αριθμό
– Υποθέτουμε ότι ο μεταγλωττιστής τοποθετεί τις τρεις
σταθερές 5, 9, 32 στο .data section για να είναι
προσπελάσιμες από τον καθολικό δείκτη $gp.
Διάλεξη 7
Μετρικές Απόδοσης
• Χρόνος Απόκρισης (ή Χρόνος Εκτέλεσης)
– Latency (Execution time)
– Πόσος χρόνος απαιτείται για την εκτέλεση μιας εργασίας
• Throughput
– Συνολική ποσότητα εργασίας που διεκπεραιώνεται σε ένα
δεδομένο χρόνο
• πχ εργασίες/ώρα, bytes/sec, κοκ.
• Ο Χρόνος Απόκρισης και το Throughput δεν είναι το
ίδιο σημαντικές μετρικές για διαφορετικά
συστήματα
– Database transaction systems (latency)
– Graphics rendering system (GPU) (throughput)
Οργάνωση και Σχεδίαση Η/Υ (ΗΥ232) 3
Συγκριτική Απόδοση
• Ορισμός: Απόδοση = 1 / Χρόνος Εκτέλεσης
• “Το ότι το σύστημα Χ είναι n φορές πιο
γρήγορο από το σύστημα Υ σημαίνει: ”
ΑπόδοσηX ΑπόδοσηY
Χρόνος Εκτέλεσης Y Χρόνος Εκτέλεσης X n
Για παράδειγμα, ο χρόνος εκτέλεσης ενός
προγράμματος:
• 10s on A, 15s on B
• Execution TimeB / Execution TimeA
= 15s / 10s = 1.5
• O A είναι 1.5 φορές γρηγορότερος από τον Β
Οργάνωση και Σχεδίαση Η/Υ (ΗΥ232) 4
Κύκλοι ρολογιού
Μεταφορά Δεδομένων
Και Υπολογισμοί
Αλλαγή Κατάστασης
Ακμοπυροδότητο D flip-flop:
η είσοδος D περνάει στην έξοδο Q
μόνο την χρονική στιγμή της θετικής
ακμής του ρολογιού.
Σε οποιαδήποτε άλλη χρονική module dff (input D, CLK,
output reg Q);
στιγμή, η είσοδος D αγνοείται
always @(posedge clk)
begin
D Q<=D;
end
endmodule;
CLK
7
Χρονισμός του D flip-flop (I)
t
≤ PD
t
≥ CD
CLK
tPD: maximum propagation delay, CLK Q
tCD: minimum contamination delay, CLK Q D
D Q logic D Q
reg1 reg2
CLK
tPD,reg1
CLK
tPD,logic
tCD,reg1
t ≥t
CD,logic SETUP,reg2
Χρόνος CPU
Χρόνος CPU Αριθμός Κύκλων CPU Περίοδος Ρολογιού
Αριθμός Κύκλων CPU
Συχνότητα Ρολογιού
Πρόγραμμα 1: ΑΕ = 5 Πρόγραμμα 2 : ΑΕ = 6
Αριθμός Κύκλων Αριθμός Κύκλων
= 2×1 + 1×2 + 2×3 = 4×1 + 1×2 + 1×3
= 10 =9
Μέσο CPI = 10/5 = 2.0 Μέσο CPI = 9/6 = 1.5
(4 *106 3) 2.0 2 ns 16 us
κατά 1.33Χ
ΧρόνοςCPUB 16
1.33
ΧρόνοςCPUA 12Οργάνωση και Σχεδίαση Η/Υ (ΗΥ232) 17
Διάλεξη 8
Discrete-event Simulation
• Basic idea: only do work when something changes
• Centered around an event queue
– Contains events labeled with the simulated time at which
they are to be executed
• Basic simulation paradigm
– Execute every event for the current simulated time
– Doing this changes system state and may schedule events
in the future
– When there are no events left at the current time instance,
advance simulated time soonest event in the queue
Stimulus
Response
Result
checker
Timing Simulation
• Timing simulation occurs after
– synthesis and
– after Place and Route (P&R)
• It includes gate and wire delays to make
simulation more realistic
• Before P&R, the simulator uses gate delays
models and (if available) wire delay models
• After P&R, more detailed wire delay
information can be fed back to the simulator
Οργάνωση και Σχεδίαση Η/Y (ΗΥ232) 6
Learn by Example: Combinational Logic
Adder: a circuit that does addition
Here’s an example of binary addition:
Adding two N-bit 1101
numbers produces an
(N+1)-bit result +0101
10010
“Ripple-
carry
adder”
1-bit Adder
Α Β Cin S Cout
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0 Sum: S A B C
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1 Carry Out:
1 1 0 0 1 CO A'BC AB'C ABC' ABC
1 1 1 1 1 (A' A)BC (B' B)AC AB(C' C)
BC AC AB
assign s = x ^ y ^ Cin;
assign Cout = (x & y) | (x & Cin) | (y & Cin);
Another one
module addern #(paramtere n=32) (carryin, X, Y, S, carryout, overflow);
input carryin;
input [n-1:0] X, Y;
output [n-1:0] S;
output carryout, overflow;
reg [n-1:0] S; S, X, Y are arrays
reg carryout, overflow;
endmodule
Behavioral Description
Οργάνωση και Σχεδίαση Η/Y (ΗΥ232) 12
Language Elements and Expressions
Numbers in Verilog
• Integer numbers
– Simple decimal notation
• 32, -15
– Base format notation : [size in bits]’base value
– Base is one of d or D (decimal), o or O (octal), b or B (binary), h
or H (hex). Use s for signed.
• 5’O37 // 5 bit octal number 37
• 4’D2 // 4 bit decimal number 2
• 4’B1x_01 // 4 bit binary number 1x01.
• 7’Hx // 7 bit hex xxxxxxx
• 8’shFF // Signed hex equal to -1
• 4’d-4 // Not legal. The sign is before the size.
• -4’d4 // 4-bit binary number -4. The sign is before the size
• (2+3)d’10 // Not legal. Size cannot be an expression
– The underscore character (_) is legal anywhere in a number
except as the first character, where it is ignored
– When used in a number, the question mark (?) character is the
Verilog alternative for the z character.
Οργάνωση και Σχεδίαση Η/Y (ΗΥ232) 14
Numbers in Verilog
• Real numbers
– Decimal notation
• 32.0, -11.06
• 2. // Not legal. Must have a digit on either side of
decimal
– Scientific notation
• 23.51e2 // 2351.0
• 23_5.1e1 // 2351.0
• 5E-4
Strings in Verilog
• A string is a sequence of chars within double
quotes
– “Verilog is cool!”
• 0, 1
– Obvious
• Z (high impedance)
– Output of an undriven tri-state driver
– Models case where nothing is setting a wire’s value
• X (unknown or undecided)
– Models when the simulator can’t decide the value
– Initial state of registers
– When a wire is being driven to 0 and 1 simultaneously
– Output of a gate with Z inputs
Operators
• Arithmetic operators
• X = (A+B)-C // binary plus and minus
• X = -Y // unary minus
• X = Y*Z // multiplication
• X = A/B // division
• X = A%B // modulus is the remainder with
// the sign of the dividend.
// 7%4 = 3, -7%4 = -3, 7%-4 = 3
• X = A**B // exponent (Only in Verilog 2001)
Operators
• Equality operators.
– 2’b10 == 4’b0010 // true
– ‘b11x0 == ‘b11x0 // unknown because there
is a bit in in either operand which is x (or z)
– ‘b11x0 === ‘b11x0 // true. In case equality, x
and z are compared strictly as values
Operators
• Bit-wise operators
– ~A (unary negation)
– & (binary and)
– | (binary or)
– ^ (binary xor)
– ~^ (binary XNOR)
0 1 X Z 0 1 X Z
0 0 0 0 0 0 0 1 X X
1 0 1 X X 1 1 1 1 1
X 0 X X X X X 1 X X
Z 0 X X X Z X 1 X X
Operators
• Shift operators
– A >> B // logical right shift
– A << B // logical left shift
– A >>> B // right shift for signed numbers (Only
Verilog 2001)
– A <<< B // left shift for signed numbers (Only
Verilog 2001)
• Conditional operator
– cond_expr? expr1 : expr2
Οργάνωση και Σχεδίαση Η/Y (ΗΥ232) 26
Operators
• Concatenation and Replication operators
– wire [7:0] Dbus
– wire [11:0] Abus
– assign Dbus = {Dbus[3:0], Dbus[7:4]} //
concatenation: swap nibbles
– Abus ={3{4’b1011}} // 12’b1011_1011_1011
Structural Modeling
• When Verilog was first developed (1984) most
logic simulators operated on netlists
• Netlist: list of gates and how they’re
connected
• A natural representation of a digital logic
circuit
• Not the most convenient way to express test
benches
g2(f2, b, sel);
or g3(f, f1, f2); a f1
nsel g1
not g4(nsel, sel); g4
g3 f
b
endmodule sel
g2
f2
assign f = sel ? b : a;
a
endmodule
f
b
sel
…
endmodule
Οργάνωση και Σχεδίαση Η/Y (ΗΥ232) 37
Instantiating a Module
• Instances of
• look like
Switch-level Primitives
• Verilog also provides mechanisms for modeling CMOS
transistors that behave like switches
• A more detailed modeling scheme that can catch some
additional electrical problems when transistors are
used in this way
• Rarely used because circuits generally aren’t built this
way
• More seriously, model is not detailed enough to catch
many of the problems
• These circuits are usually simulated using SPICE-like
simulators based on nonlinear differential equation
solvers
Timing Controls
• Two forms of timing control:
– Delay control
– Event control
e.g.
#2 input = 4’b0101; // wait for 2 units, and then make
the assignment
input = #1 x // assign to input the value that x will have after
1 time unit. Different than #1 input = x
Event Controls
• Edge-triggered event control is of the form
@ event <procedural statement>
e.g. @ (posedge clk) curr_state = next_state
@ (X or Y) A <= 0; // when X or Y change
initial begin
#10 a = 1; b = 0;
#10 a = 0; b = 1;
end
sum = a + b + cin;
case (op)
2’b00: y = a + b;
2’b01: y = a – b;
2’b10: y = a ^ b;
default: y = ‘hxxxx;
endcase
For Loops
• A increasing sequence of values on an output
i = 0;
while (i <= 15) begin
output = i;
#10 i = i + 1;
end
• Fundamental problem:
– In a synchronous system, all flip-flops sample
simultaneously
– In Verilog, always @(posedge clk) blocks run in
some undefined sequence
Non-blocking Assignments
Nonblocking rule:
RHS evaluated when
• This version does work: assignment runs
1 a
a <= 1;
b <= a;
c <= b; b
New
Memory
State
Device Current
State Combinational
LOAD Logic
Input Output
CLK
t
≤ PD
t
≥ CD
CLK
n n
Q D
Registers
CLK
next
state S'D
inputs Comb. Registers
Q
Comb. Outputs
x0...xn
Logic Logic yk = fk(S)
CLK
n
present state S
•Mealy FSM:
next
state S'D
inputs Comb.
Q
Registers Comb. Outputs
x0...xn
Logic Logic yk = fk(S, x0...xn)
CLK
n
present state S
Level to
L Pulse P
Whenever input L goes Converter ...output P produces a single
from low to high... pulse, one clock period wide.
CLK
CLK
+
S0 = L
Testbenches
Writing Testbenches
Inputs to device under test
module test;
reg a, b, sel; Device under test (DUT)
Writing Testbenches
module first_counter_tb();
// Declare inputs as regs and outputs as wires
reg clock, reset, enable;
wire [3:0] counter_out;
// Clock generator
always begin
#5 clock = ~clock; // Toggle clock every 5 ticks
end
1-bit ALU
(and, or, add)
32-bit ALU
(ripple-carry configuration)
Εισαγωγή στους Η/Υ (HY134) 86
Αριθμητική και λογική μονάδα
32-bit ALU
(and, or, add, sub, nor, slt)
32-bit ALU
with zero detection
(for beq, bne)
Εισαγωγή στους Η/Υ (HY134) 90
Αριθμητική και λογική μονάδα
Τα 3 σήματα ελέγχου Ainvert, Bnegate,
Operation καθορίζουν και την λειτουργία της
Αριθμητικής και Λογικής μονάδας (ALU)
Simulating Verilog
Simulation Behavior
• Scheduled using an event queue
• Non-preemptive, no priorities
• A process must explicitly request a context
switch
• Events at a particular time unordered
• #42
– Schedule process to resume 42 time units from now
• wait(cf & of)
– Resume when expression “cf & of” becomes true
• @(a or b or y)
– Resume when a, b, or y changes
• @(posedge clk)
– Resume when clk changes from 0 to 1
Simulation Behavior
• Infinite loops are possible and the simulator does not
check for them
• This runs forever: no context switch allowed, so ready
can never change
while (~ready)
count = count + 1;
• Instead, use
wait(ready);
• Major vendors
– Synopsys Design Compiler, FPGA Express
– Cadence BuildGates
– Synplicity (FPGAs)
– Exemplar (FPGAs)
• Academic tools
– SIS (UC Berkeley)
Logic Optimization
• Netlist optimization the critical enabling technology
• Takes a slow or large netlist and transforms it into one
that implements the same function more cheaply
• Typical operations
– Constant propagation
– Common subexpression elimination
– Function factoring
• Time-consuming operation
– Can take hours for large chips
Register Inference
• The main trick
• Rule:
• Combinational if outputs always depend
exclusively on sensitivity list
• Sequential if outputs may also depend on
previous values
Register Inference
• A common mistake is not completely specifying a
case statement
• This implies a latch:
always @(a or b)
case ({a, b})
2’b00 : f = 0;
f is not assigned when {a,b} = 2b’11
2’b01 : f = 1;
2’b10 : f = 1;
endcase
Οργάνωση και Σχεδίαση Η/Y (ΗΥ232) 108
Register Inference
• The solution is to always have a default case
always @(a or b)
case ({a, b}) f is always assigned
2’b00: f = 0;
2’b01: f = 1;
2’b10: f = 1;
default: f = 0;
endcase
Simulation-synthesis Mismatches
• Many possible sources of conflict
• Παραδείγματα:
• x86 αρχιτεκτονική (Intel),
• Intel Core i7, Core 2 Duo υλοποιήσεις του x86
• Αρχιτεκτονική MIPS
• Μικροαρχιτεκτονική ενός κύκλου μηχανής του MIPS
(κάθε εντολή assembly ολοκληρώνεται σε έναν κύκλο
μηχανής)
• Μικροαρχιτεκτονική πολλαπλών κύκλων μηχανής του
MIPS (κάθε εντολή assembly ολοκληρώνεται σε
πολλαπλούς κύκλους μηχανής)
• Μικροαρχιτεκτονική διοχέτευσης (pipeline) του MIPS
(κάθε εντολή assembly ολοκληρώνεται πολλαπλούς
κύκλους μηχανής, και πολλαπλές εντολές εκτελούνται
ταυτόχρονα)
PC_new [29]
PC_new [1]
PC_new [31]
PC_new [30]
PC_new [0]
PC_new
………
CLK
always @(posedge CLK or
negedge reset)
PC [31]
PC [30]
PC [29]
PC [1]
PC [0]
if (reset == 1’b0)
PC <= 0;
else
PC <= PC_new Memory (input ren, wen,
input [31:0] addr, din,
output [31:0] dout); // 4k words mem
input ren, wen;
input [31:0] addr, din;
output [31:0] dout;
reg [31:0] data[4095:0];
wire [31:0] dout;
assign dout = ((wen==1'b0) && (ren==1'b1)) ?
data[addr[11:0]] : 32'bx;
always @(din or wen or ren or addr)
begin
if ((wen == 1'b1) && (ren==1'b0))
data[addr[11:0]] = din;
end
Οργάνωση και Σχεδίαση Η/Υ (HY232) 5
Η’8FA8FFFC
$sp = H’7FFF_EFFC
D’29
B’1111_1111_1111_1111_1111_1111_1111_1100 =
B’1111_1111_1111_1100
H’FFFF_FFFC
πρόσθεση στην ALU 100011 11101 01000 1111 1111 1111 1100
lw $t0, –4($sp)
= H’7FFF_EFFC
H’7FFF_EFF8
H’FFFF_FFFC
D’8
H’AB00CD00
Οργάνωση και Σχεδίαση Η/Υ (HY232) 10
Υλοποίηση της πρώτης μας εντολής: lw
Βήμα 6: Βρες την διεύθυνση της
επόμενης εντολής PC <= PC+4
3:0
OR 100101 OR 0001
Υλοποίηση εντολής or
op rs rt rd shamt func
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Υλοποίηση εντολής j
000010 address
31:26 25:0
Instruction Op 5:0 RegWrite RegDst AluSrc Branch MemWrite MemToReg ALUOp 1:0 Jump
R-type 000000 1 1 0 0 0 0 1 0 0
lw 100011 1 0 1 0 0 1 0 0 0
sw 101011 0 x 1 0 1 x 0 0 0
beq 000100 0 x 0 1 0 x 0 1 0
addi 001000 1 0 1 0 0 0 0 0 0
j 000010 0 x x x 0 x x x 1
Περίοδος Ρολογιού
D Q logic D Q
reg1 reg2
CLK
Register setup
tsetup 20
Multiplexer tmux 25
Θέματα Απόδοσης
• Αν και απλή, η υλοποίηση ενός κύκλου ρολογιού είναι
πολύ αργή
– Μεγάλη περίοδος ρολογιού
– Ο χρόνος εκτέλεσης είναι ο ίδιος για όλες τις εντολές και ίσος με
τον χρόνο εκτέλεσης της πιο αργής εντολής
• Αυτό παραβιάζει μια βασική σχεδιαστική αρχή
– Βελτιστοποίησε την εκτέλεση της πιο συχνής εντολής
• Η χρήση της διοχέτευσης (pipeline) μειώνει δραστικά την
περίοδο ρολογιού
Γιατί Διοχέτευση;
Κύκλος μηχανής
1 2 3 4 5 6 7 8 9
lw $t0, 4($sp) IF ID EX MEM WB
lw $t1, 8($sp) IF ID EX MEM WB
lw $t2, 12($sp) IF ID EX MEM WB
lw $t3, 16($sp) IF ID EX MEM WB
lw $t4, 20($sp) IF ID EX MEM WB
γέμισμα
• Χρόνος εκτέλεσης σε ένα ιδανικό pipeline (CPI=1):
– Χρόνος να γεμίσει το pipeline με εντολές + ένας κύκλος ανά
εντολή
– Για Ν εντολές χρειαζόμαστε 4+N κύκλους μηχανής.
– Χρόνος pipeline CPU = (4+N)*200ps = 200.8ns για N=1000
• Χρόνος εκτέλεσης σε έναν επεξεργαστή ενός κύκλου
– Χρόνος single-cycle CPU = N*800ps = 800ns
• Επιτάχυνση = 800/200.8 = 4
Οργάνωση και Σχεδίαση Η/Υ
4
(HY232)
Pipelining για τις υπόλοιπες εντολές
• Η εντολή lw χρησιμοποιεί και τα 5 στάδια του pipeline
• Εντολές με R-format δεν χρειάζονται το στάδιο μνήμης MEM, μόνο
τα 4 στάδια IF, ID, EX, και WB
• Τι θα συμβεί εάν βάλουμε στο pipeline την lw με εντολές R-format;
Κύκλος μηχανής
1 2 3 4 5 6 7 8 9
add $sp, $sp, -4 IF ID EX WB
sub $v0, $a0, $a1 IF ID EX WB
lw $t0, 4($sp) IF ID EX MEM WB
or $s0, $s1, $s2 IF ID EX WB
lw $t1, 8($sp) IF ID EX MEM WB
Clock cycle
1 2 3 4 5 6 7 8 9
add $sp, $sp, -4 IF ID EX WB
sub $v0, $a0, $a1 IF ID EX WB
lw $t0, 4($sp) IF ID EX MEM WB
or $s0, $s1, $s2 IF ID EX WB
lw $t1, 8($sp) IF ID EX MEM WB
Clock cycle
1 2 3 4 5 6 7 8 9
add $sp, $sp, -4 IF ID EX NOP WB
sub $v0, $a0, $a1 IF ID EX NOP WB
lw $t0, 4($sp) IF ID EX MEM WB
or $s0, $s1, $s2 IF ID EX NOP WB
lw $t1, 8($sp) IF ID EX MEM WB
Καταχωρητές Διοχέτευσης
PCSrc
Read Read
register 1 data 1 MemWrite
ALU
Read Instruction Zero
Read Read
address [31-0] 0
register 2 data 2 Result Address
Write
1 Data
Instruction register MemToReg
memory
memory Registers ALUOp
Write
data ALUSrc Write Read
1
data data
Instr [15 - 0] Sign
RegDst
extend MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
Προώθηση δεδομένων
• Οι τιμές των δεδομένων που χρειάζονται σε επόμενα στάδια της
διοχέτευσης πρέπει να μεταφερθούν μέσω των καταχωρητών
διοχέτευσης
• Ο καταχωρητής προορισμού rd είναι ένα χαρακτηριστικό
παράδειγμα.
– To πεδίο rd της εντολής ανακτάται στο πρώτο στάδιο (Instruction Fetch, IF).
Αλλά χρησιμοποιείται μόνο μετά από 5 κύκλους στο στάδιο Write Back, WB.
– Συνεπώς, το πεδίο rd πρέπει να μεταφερθεί από όλους τους καταχωρητές
διοχέτευσης μέχρι το 5ο στάδιο.
• Δεν μπορούμε να το κρατήσουμε σε ένα απλό καταχωρητή εντολής
(instruction register) γιατί σε κάθε κύκλο μηχανής μια νέα εντολή
εισέρχεται στον επεξεργαστή από την μνήμη εντολών.
PCSrc
Read Read
register 1 data 1 MemWrite
ALU
Read Instruction Zero
Read Read
address [31-0] 0
register 2 data 2 Result Address
Write
1 Data
Instruction register MemToReg
memory
memory Registers ALUOp
Write
data ALUSrc Write Read
1
data data
Instr [15 - 0] Sign
RegDst
extend MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
Σήματα Ελέγχου
• H δημιουργία των σημάτων ελέγχου γίνεται ακριβώς όπως στην
περίπτωση του επεξεργαστή ενός κύκλου.
– Μετά το Instruction Fetch η εντολή αποκωδικοποιείται από την μονάδα ελέγχου
και δημιουργούνται τα σήματα ελέγχου.
• Όπως και πριν, κάποια σήματα ελέγχου θα χρειαστούν στα
τελευταία στάδια του pipeline (πχ 4ο ή 5ο)
• Όπως ακριβώς και τα δεδομένα, έτσι και αυτά τα σήματα ελέγχου
θα πρέπει να προωθηθούν μέσω των καταχωρητών διοχέτευσης
στα επόμενα στάδια μέχρι να χρησιμοποιηθούν.
0
ID/EX
WB EX/MEM
PCSrc
Control M WB MEM/WB
IF/ID EX M WB
4
Add
P Add
C Shift
RegWrite left 2
Read Read
register 1 data 1 MemWrite
ALU
Read Instruction Zero
Read Read
address [31-0] 0
register 2 data 2 Result Address
Write
1 Data
Instruction register MemToReg
memory
memory Registers ALUOp
Write
data ALUSrc Write Read
1
data data
Instr [15 - 0] Sign
RegDst
extend MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
WB RegWrite MemToReg
0 ID/EX
WB EX/MEM
PCSrc
Control M WB MEM/WB
IF/ID EX M WB
4 Add
P Add
C Shift
RegWrite left 2
Read Read
register 1 data 1 ALUZero MemWrite
Read Instruction Read Read
address [31-0] 0 Result Address
register 2 data 2
Write
Instruction Data MemToReg
register 1
memory Registers ALUOp memory
Write
data ALUSrc Write Read 1
data data
Instr [15 - 0] Sign RegDst
extend MemRead
Instr [20 - 16] 0
0
Instr [15 - 11]
1
• Υποθέτουμε ότι:
– Η αρχική τιμή κάθε καταχωρητή $Ν είναι Ν+100. Για παράδειγμα, ο $8
($t0) περιέχει την τιμή d’108.
– Αρχικά, όλες οι θέσεις μνήμης περιέχουν την τιμή 99.
– Το Χ στο διάγραμμα είναι Don’t Care.
– Τα ερωτηματικά ??? σημαίνει ότι η τιμή του σήματος είναι άγνωστη
– Παρατηρείστε ότι οι εντολές είναι ανεξάρτητες; δεν υπάρχουν εξαρτήσεις
μεταξύ καταχωρητών εξόδου μιας εντολής και εισόδου των επόμενων.
• Περισσότερα για αυτό στα επόμενα μαθήματα
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P _____
Add
C Shift
RegWrite (?) left 2
???
Κύκλος 2 (γέμισμα)
IF: sub $2, $4, $5 ID: lw $8, 4($29) EX: ??? MEM: ??? WB: ???
1
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P 1008
Add
C Shift
RegWrite (?) left 2
???
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P 1012
Add
C Shift
RegWrite (?) left 2
4 104 ___
1008 Read Read
register 1 data 1 MemWrite (?)
ALU
Read Instruction 5 __ Zero
Read Read 105 ???
address [31-0] 0
register 2 data 2 Result Address
__
??? Write ___ MemToReg
1 Data
Instruction register (?)
memory
memory ??? Registers ALUOp (___)
Write
??? Write ???
data ALUSrc (___) Read
1
data data
X Sign __
RegDst (___)
extend MemRead (?) ???
0
X __
0 ___ ??? ???
2 __
1
???
Κύκλος 4 (γέμισμα)
IF: or $16, $17, $18 ID: and $9, $10, $11 EX: sub $2, $4, $5 MEM: lw $8, 4($29) WB: ???
1
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P 1016
Add
C Shift
RegWrite (?) left 2
10 110 104
1012 Read Read
register 1 data 1 MemWrite (___)
ALU
Read Instruction 11 105 Zero
Read Read 111 ___
address [31-0] 0
register 2 data 2 Result Address
–1
??? Write MemToReg
1 Data
Instruction register (?)
memory
memory ??? Registers ALUOp (sub)
Write
___ ???
data ALUSrc (0) __ Write Read
1
data data
X Sign X
RegDst (1)
extend MemRead (___) ???
0
X X
0 2 ___ ???
9 2
1
???
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P 1020
Add
C Shift
RegWrite (___) left 2
17 117 110
1016 Read Read
register 1 data 1 MemWrite (0)
ALU
Read Instruction 18 111 Zero
Read Read 118 -1
address [31-0] 0
register 2 data 2 Result Address
__ Write 110 MemToReg
1 Data
Instruction register (___)
memory
memory __ Registers ALUOp (and)
Write
X ___
data ALUSrc (0) 105 Write Read
1
data data
X Sign X
RegDst (1)
extend MemRead (0) ____
0
X X
0 9 2 ___
16 9
1
___
Κύκλος 6 (άδειασμα)
IF: ??? ID: add $13, $14, $0 EX: or $16, $17, $18 MEM: and $9, $10, $11 WB: sub
$2, $4, $5
1
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P ???
Add
C Shift
RegWrite (1) left 2
14 114 117
1020 Read Read
register 1 data 1 MemWrite (0)
ALU
Read Instruction 0 0 118 Zero
Read Read 110
address [31-0] 0
register 2 data 2 Result Address
2 Write 119 MemToReg
1 Data
Instruction register (0)
memory
memory -1 Registers ALUOp (or)
Write
X
data ALUSrc (0) 111 Write Read
1
data data
X Sign X
RegDst (1)
extend MemRead (0)
0
X X
0 16 9
13 16
1
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P ???
Add
C Shift
RegWrite (1) left 2
110
Κύκλος 8 (άδειασμα)
IF: ??? ID: ??? EX: ??? MEM: add $13, $14, $0 WB: or $16,
$17, $18
1
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P ???
Add
C Shift
RegWrite (1) left 2
119
0 ID/EX
WB EX/MEM
PCSrc Control M WB MEM/WB
IF/ID EX M WB
4
Add
P ???
Add
C Shift
RegWrite (1) left 2
114
Προσοχή
Τα πάντα κινούνται από αριστερά στα δεξιά εκτός:
1. Της απόφασης διακλάδωσης
2. Του 1Write Back
0
PCSrc
4 Add
P Add
Shift
C
RegWrite left 2
Read Read
register 1 data 1 MemWrite
ALU
Read Instruction Zero
Read Read
address [31-0] 0
register 2 data 2 Result Address
Write
Data
Instruction register 1 MemToReg
Registers ALUOp memory
memory Write
data ALUSrc Write Read
1
data data
Instr [15 - 0] Sign
RegDst
extend MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
Διάλεξη 11
Προώθηση (Forwarding)
Η μέχρι τώρα μικρο-αρχιτεκτονική του MIPS
1
0
ID/EX
WB EX/MEM
PCSrc
Control M WB MEM/WB
IF/ID EX M WB
4
Add
P Add
C
RegWrite <<2
Read Read
register 1 data 1 MemWrite
ALU
Read Instruction Zero
Read Read
address [31-0] 0
register 2 data 2 Result Address
Write
1 Data
Instruction register MemToReg
memory
memory Registers ALUOp
Write
data ALUSrc Write Read
1
data data
Instr [15 - 0] Sign
RegDst
extend MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
Διάγραμμα Διοχέτευσης
Κύκλοι μηχανής
1 2 3 4 5 6 7 8 9
IM Reg DM Reg
sub $2, $1, $3
Κίνδυνοι δεδομένων
• Είναι αναγκαίο να απαλειφθούν οι κίνδυνοι δεδομένων ώστε οι
εντολές and και or να χρησιμοποιήσουν την πραγματική τιμή
του καταχωρητή $2. Αλλιώς η μικρο-αρχιτεκτονική μας είναι λάθος
• Πότε ακριβώς δημιουργείται η νέα τιμή του καταχωρητή $2 από την
εντολή sub;
– Στο τέλος του σταδίου EX στον κύκλο 3
• Πότε ακριβώς χρειάζεται η νέα τιμή του καταχωρητή $2 από την
εντολές and και or;
– Στο στάδιο EX στους κύκλους 4 και 5
Clock cycle
1 2 3 4 5 6 7
IM Reg DM Reg
sub $2, $1, $3
PC ALU output
available here
ALU
Registers
Instruction
memory
Data
memory
Rt 0
0
Rd
1
IM Reg DM Reg
sub $2, $1, $3
PC
0
1
2
Registers ForwardA
Instruction ALU
memory 0
1 Data
2 memory
1
ForwardB
Rt 0
0
Rd
1
IM Reg DM Reg
sub $2, $1, $3
Εξισώσεις EX/MEM
• Εξίσωση για την πρώτη είσοδο της ALU
if (EX/MEM.RegWrite = 1 and
EX/MEM.RegisterRd != 0 and
EX/MEM.RegisterRd = ID/EX.RegisterRs)
then ForwardA = 2
• Εξίσωση για την δεύτερη είσοδο της ALU
if (EX/MEM.RegWrite = 1 and
EX/MEM.RegisterRd != 0 and
EX/MEM.RegisterRd = ID/EX.RegisterRt)
then ForwardB = 2
IM Reg DM Reg
sub $2, $1, $3
Εξισώσεις MEM/WB
PC
0
1
2
ForwardA
Registers
Instruction ALU
memory 0
1 Data
2 memory
1
ForwardB
Rt 0
0
Rd
1 EX/MEM.RegisterRd
Rs ID/EX.
RegisterRt
Forwarding
EX/MEM.RegWrite
Unit MEM/WB.RegisterRd
ID/EX.
MEM/WB.RegWrite
RegisterRs
PC
101
2 0
102 101
1
2
5
0
Registers
Instruction ALU
103
memory X 105 0
103
1 -2 Data
X 2 memory
1
0
5 (Rt) 0
0
12 (Rd) 2
2
1 EX/MEM.RegisterRd
2 (Rs) ID/EX.
RegisterRt
Forwarding
3
Unit
ID/EX. 1 MEM/WB.RegisterRd
RegisterRs
PC
102
6 0
106 -2
1
2
2
2
Registers
Instruction ALU -2
105
memory X 102 0
105
1 104
Data
X 2 memory
1
0
2 (Rt) 0
0
12
13 (Rd) 12
1 EX/MEM.RegisterRd
6 (Rs) ID/EX.
RegisterRt
2
Forwarding
5
Unit
2 MEM/WB.RegisterRd
ID/EX.
RegisterRs
-2
PC
106
2 0
-2 106
1
2
2
0
Registers
Instruction ALU 104
102
memory 2 -2 0
-2
1 -2
Data
-2 2
-2 memory
X
1
-2
1
2 (Rt) 0
0
13
14 (Rd) 13
1 EX/MEM.RegisterRd 2
2 (Rs) ID/EX.
RegisterRt
12
Forwarding
2 Unit
ID/EX. 6 2 MEM/WB.RegisterRd
RegisterRs
104
-2
PC
Read Read 0
register 1 data 1 1
Addr Instr 2
Read ALU
register 2 Zero
ALUSrc
Write Read Result Address
0
Instruction register data 2
1 0 Data
memory
Write Registers 2 memory
data 1
Write Read
Instr [15 - 0] 1
RegDst data data
Extend
Rt 0
0
Rd
1 EX/MEM.RegisterRd
Rs
Forwarding
Unit
MEM/WB.RegisterRd
1 2 3 4 5 6
PC
Read Read 0
register 1 data 1 1
Addr Instr 2
Read ALU
register 2 2 Zero
ALUSrc
Write Read Result Address
0
Instruction register data 2
1 0 Data
memory
Write Registers 2 memory
data 1
Write Read
Instr [15 - 0] 1
RegDst data data
Extend
Rt 0
0
Rd
1 EX/MEM.RegisterRd
Rs
1
Forwarding
Unit
ID/EX.
1
RegisterRs
MEM/WB.RegisterRd
Ακριβώς η ίδια
περίπτωση εάν έχουμε
Οργάνωση και Σχεδίαση Η/Υ
loads (HY232)
25
Προώθηση με την store (IΙ)
EX: sw $1, 0($4) MEM: add $1, $2, $3
PC
Read Read 0
register 1 data 1 1
Addr Instr 2
Read ALU
register 2 Zero
ALUSrc
Write Read Result Address
0
Instruction register data 2
1 0 Data
memory
Write Registers 2 memory
data 1
Write Read
Instr [15 - 0] 1
RegDst data data
Extend
Rt 2 0
0 0
Rd
1 EX/MEM.RegisterRd
Rs
1
1
Forwarding
Unit
MEM/WB.RegisterRd
1 2 3 4 5 6
PC 1
Read Read 0
register 1 data 1 1
Addr Instr 2
Read ALU
register 2 Zero
ALUSrc
Write Read Result Address
0
Instruction register data 2
1 0 Data
memory
Write Registers 2 memory
data 1
Write Read
Instr [15 - 0] data data 1
RegDst
Extend
Rt 0
0
Rd
1 EX/MEM.RegisterRd
Rs
Forwarding
Αυτή όμως η Unit
αλληλουχία;
MEM/WB.RegisterRd
lw $1, 0($2)
sw $2, 0($1)
Οργάνωση και Σχεδίαση Η/Υ
28
(HY232)
Η συνολική εικόνα
• H απλότητα της αρχιτεκτονικής MIPS κάνει το πρόβλημα της
προώθησης πολύ εύκολο.
• Κάθε εντολή MIPS μπορεί να γράψει το πολύ σε έναν καταχωρητή
– Αυτή η ιδιότητα απλουστεύει πολύ την σχεδίαση της μονάδας προώθησης
μιας και υπάρχει μόνο ένας καταχωρητής προορισμού που πρέπει να
προωθηθεί.
• Η προώθηση είναι πολύ σημαντική σε μικρο-αρχιτεκτονικές με
πολλά στάδια διοχέτευσης (super-pipelining)
– Η σύγχρονοι επεξεργαστές έχουν 20+ στάδια διοχέτευσης
– Γιατί τόσα πολλά;
Κύκλος μηχανής
1 2 3 4 5 6 7
IM Reg DM Reg
sub $2, $1, $3
Προώθηση Δεδομένων
• Η τελική τιμή του καταχωρητή $2 ($1 - $3) έχει ήδη υπολογιστεί
από τον κύκλο 3 (στάδιο EX) , απλά δεν έχει γραφεί ακόμα στον $2.
• Η προώθηση δεδομένων επιτρέπει δεδομένα να τροφοδοτούνται
μέσω των καταχωρητών διοχέτευσης κατευθείαν στην ALU χωρίς
την ανάγκη να διαβαστεί ο καταχωρητής.
Κύκλος μηχανής
1 2 3 4 5 6 7
IM Reg DM Reg
sub $2, $1, $3
Κύκλος Μηχανής
1 2 3 4 5 6
IM Reg DM Reg
lw $2, 20($3)
Καθυστέρηση (Stall)
• H λύση είναι να καθυστερήσουμε το pipeline για έναν κύκλο
• Μπορούμε να καθυστερήσουμε την εντολή and με το να τοποθετήσουμε μία
φυσαλίδα (bubble) ενός κύκλου.
• Αυτό θα καθυστερήσει την and και όλες τις εντολές μετά από αυτήν κατά ένα
κύκλο.
Κύκλος μηχανής
1 2 3 4 5 6 7
IM Reg DM Reg
lw $2, 20($3)
Κύκλος μηχανής
1 2 3 4 5 6 7 8
IM Reg DM Reg
lw $2, 20($3)
Κύκλος μηχανής
1 2 3 4 5 6 7 8
IM Reg DM Reg
lw $2, 20($3)
IM Reg DM Reg
lw $2, 20($3)
IM Reg DM Reg
lw $2, 20($3)
mem\wb
ex/mem
id/ex
and $12, $2, $5
if/id
if/id
IM Reg Reg DM Reg
• H ανίχνευση της καθυστέρησης γίνεται όταν η εντολή lw είναι στο EX στάδιο και η
επόμενη εξαρτώμενη εντολή (and)είναι στο ID στάδιο.
• Καθυστέρηση υπάρχει όταν η εντολή στο EX στάδιο είναι LOAD
ID/EX.MemRead = 1
και ο προορισμός του LOAD είναι ένας από τους καταχωρητές εισόδου της επόμενης
εντολής (στο ID στάδιο).
ID/EX.RegisterRt = IF/ID.RegisterRs
or
ID/EX.RegisterRt = IF/ID.RegisterRt
• Συνοπτικά:
if (ID/EX.MemRead = 1 and
(ID/EX.RegisterRt = IF/ID.RegisterRs or
ID/EX.RegisterRt = IF/ID.RegisterRt))
then stall
Οργάνωση και Σχεδίαση Η/Υ (HY232) 12
ID/EX
PC Write
Rs Rt 0 0 WB EX/MEM
M WB MEM/WB
Control 1
EX M WB
PC
IF/ID
Read Read 0
register 1 data 1 1
Addr Instr 2
Read ALU
register 2 Zero
ALUSrc
Write Read Result Address
0
Instruction register data 2
1 0 Data
memory
Write Registers 2 memory
data 1
Write Read
Instr [15 - 0] 1
RegDst data data
Extend
Rt 0
0
Rd
1 EX/MEM.RegisterRd
Rs
Forwarding
Unit
MEM/WB.RegisterRd
IM Reg DM Reg
lw r13, 0(r11) IF ID EX M1 M2 WB
add r7, r8, r9 IF ID EX M1 M2 WB
add r15, r7, r13 IF ID ID EX M1 M2 WB
Hazard
Unit ID/EX.RegisterRt
IF/ID Write
ID/EX
Rs Rt 0 0 WB EX/MEM
M WB MEM/WB
Control 1
EX M WB
PC
IF/ID
Read Read 0
register 1 data 1 1
Addr Instr 2
Read ALU
register 2 Zero
ALUSrc
Write Read Result Address
0
Instruction register data 2
1 0 Data
memory
Write Registers 2 memory
data 1
Write Read
Instr [15 - 0] 1
RegDst data data
Extend
Rt 0
0
Rd
1 EX/MEM.RegisterRd
Rs
Forwarding
Unit
MEM/WB.RegisterRd
0 ID/EX
WB EX/MEM
PCSrc M WB
Control MEM/WB
IF/ID EX M WB
4 Branch
Add
P Add Zero PCSrc
C
RegWrite << 2
Read Read
register 1 data 1 Zero MemWrite
ALU
Read Instruction Read
address [31-0] register 2 0
Read Result Address
data 2
Write
register Data
Instruction 1 MemToReg
Registers ALUOp memory
memory Write
data
ALUSrc Write Read
1
data data
Sign
extend RegDst
MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
? ? ? IM Reg DM Reg
Πρόβλεψη διακλάδωσης
• Αφού μειώσαμε τους κύκλους καθυστέρησης από 3 σε 1 ας δούμε πως
μπορούμε να μειώσουμε ακόμα περαιτέρω τους κινδύνους ελέγχου
• Μπορούμε να “μαντέψουμε” την απόφαση της διακλάδωσης με διάφορους
τρόπους
– Η πιο απλή προσέγγιση είναι να θεωρήσουμε ότι η διακλάδωση είναι πάντα NOT
TAKEN.
– Απλά αύξησε τον PC<=PC+4 και φέρε την επόμενη εντολή ως σαν να μην είχαμε
διακλάδωση
• Εάν αποδειχθούμε σωστοί, τότε το pipeline προχωράει full speed χωρίς καμία
Κύκλος μηχανής
απολύτως καθυστέρηση.
1 2 3 4 5 6 7
IM Reg DM Reg
επόμενη εντολή 2
next instruction 1 IM
flush
Πρόβλεψη 2-bit
• Χρησιμοποιώντας μια μηχανή πεπερασμένων καταστάσεων
μπορούμε να αποφύγουμε να αλλάζουμε απόφαση την πρώτη
φορά που έχουμε λανθασμένη πρόβλεψη
4
Memory-mapped I/O
FFFF
• Σύμφωνα με το μοντέλο memory-mapped I/O, ο
Memory
χώρος διευθύνσεων της μνήμης διαιρείται σε 2
τμήματα: I/O
D000
C000
– Ένα τμήμα που αναφέρεται στην φυσική κύρια μνήμη
– Ένα τμήμα που αναφέρεται σε περιφερειακές συσκευές.
• Για παράδειγμα, ο παλιός Apple IIe είχε 16-bit
χώρο διευθύνσεων και μπορούσε να προσπελάσει
64 KB κύριας μνήμης. Memory
– Οι διευθύνσεις C000-CFFF χρησιμοποιούνταν για να
προσπελασθούν οι περιφερειακές συσκευές.
– Η διεύθυνση C010 αναφέρεται στο πληκτρολόγιο ενώ η
C030 αναφέρεται στo ηχείο.
– Μερικές σε περιφερειακές συσκευές χρειάζονται 0000
πολλαπλές θέσεις μνήμης
5
6
Isolated I/O
• Σε αντιδιαστολή με την προηγούμενη μέθοδο, το FFFFFFFF
isolated I/O, υποστηρίζει διαφορετικούς χώρους
διευθύνσεων για την κύρια μνήμη και τις
περιφερειακές συσκευές. Ειδικές εντολές
assembly χρησιμοποιούνται για την προσπέλαση
αυτή. Main
memory
• H αρχιτεκτονική 8086 έχει 32-bit χώρο
διευθύνσεων:
– Η εντολή MOV χρησιμοποιείται για την
προσπέλαση της κύριας μνήμης RAM.
– Οι ειδικές εντολές IN και OUT για την 00000000
προσπέλαση ενός ξεχωριστού 64KB χώρου
περιφερειακών συσκευών.
0000FFFF
– Η διεύθυνση 0000FFFF μπορεί να αντιστοιχεί I/O
είτε στην κύρια μνήμη είτε σε κάποια devices
περιφερειακή συσκευή 00000000
Interrupt-driven I/O
• Χρησιμοποιώντας διακοπές (interrupts) λύνουμε CPU sends read
request to device
το πρόβλημα τις μη-αποδοτικής χρήσης του
επεξεργαστή
• Μετά την αίτηση σε μια συσκευή, ο CPU does other stuff
Yes
10
Διακοπές - Interrupts
• Οι διακοπές (Interrupts) είναι γεγονότα που συμβαίνουν
εκτός του επεξεργαστή και χρειάζονται την προσοχή του.
– Περιφερειακές συσκευές που χρειάζονται να επικοινωνήσουν με τον
επεξεργαστή δημιουργούν interrupts
– Timers (χρονομέτρες) είναι συσκευές που ειδοποιούν ότι έχει περάσει
ένα συγκεκριμένο χρονικό διάστημα.
• Οι διακοπές είναι φυσιολογικές λειτουργίες του συστήματος
– Δεν είναι λάθη
– Όλες οι διακοπές είναι εξυπηρετήσιμες και η κανονική ροή του
προγράμματος συνεχίζει μετά την εξυπηρέτηση της διακοπής
• Το λειτουργικό σύστημα είναι υπεύθυνο για την εξυπηρέτηση
της διακοπής
11
Εξαιρέσεις (Exceptions)
• Oι εξαιρέσεις (exceptions) είναι συνήθως λάθη κατά την
διάρκεια εκτέλεσης ενός προγράμματος από τον επεξεργαστή
– Ο επεξεργαστής προσπαθεί να εκτελέσει μια εντολή με μη-έγκυρο
opcode.
– Overflow σε μια αριθμητική πράξη ή διαίρεση με το 0.
– Μια εντολή load ή store δεν μπορεί να ολοκληρωθεί γιατί η διεύθυνση
που προσπαθεί να προσπελάσει δεν είναι στην μνήμη αλλά στον
σκληρό δίσκο –Εικονική μνήμη (virtual memory) – Θα επανέλθουμε σε
αυτό αργότερα.
• Υπάρχουν δύο πιθανοί τρόποι αντιμετώπισης των εξαιρέσεων
– Εάν το λάθος ΔΕΝ είναι επανορθώσιμο, το λειτουργικό σύστημα
τερματίζει το πρόγραμμα.
– Εάν το λάθος είναι επανορθώσιμο το λειτουργικό σύστημα ή το ίδιο το
πρόγραμμα μπορεί να διορθώσει την κατάσταση.
12
Παράδειγμα εξαίρεσης:
Προσομοίωση εντολών (Instruction emulation)
• Πολλές φορές σύνολα εντολών επεκτείνονται με νέες εντολές
– Πχ. MMX, SSE, SSE2, για τις εντολές 80x86 της Intel
• Προγράμματα που χρησιμοποιούν αυτές τις νέες εντολές δεν
μπορούν να εκτελεσθούν σε παλαιότερους επεξεργαστές
– Αυτό είναι μεγάλο πρόβλημα. Πρόβλημα “forward compatibility”.
• Ειδικό software προσομοίωσης εντολών χρησιμοποιείται για
την εκτέλεση τέτοιων εντολών σε παλαιότερους
επεξεργαστές. Decode inst in software;
Kernel Return from
Perform its functionality exception
13
Status register
(6 hard - 2 soft)
Cause register
(6 hard - 2 soft)
Παράδειγμα εξαίρεσης
Καταχωρητής
EPC που
παίρνει την
τιμή PC+4 όταν
γίνει εξαίρεση
H Μικρο-αρχιτεκτονική μας
Το data path είναι σε καλή κατάσταση.
Οι μνήμες όμως;
Είναι πολύ πιο πολύπλοκες από ότι
1 φαίνεται στο σχήμα
0 ID/EX
WB EX/MEM
PCSrc M WB
Control MEM/WB
IF/ID EX M WB
4
Add
P Add PCSrc
C Shift
left 2
RegWrite
Read Read
register 1 data 1
MemWrite
ALU
Read Instruction
address [31-0]
Read
register 2
= 0
Read Result Address
data 2
Write
register Data
Instruction 1 MemToReg
Registers ALUOp memory
memory Write
data
ALUSrc Write Read
1
data data
Sign
extend RegDst
MemRead
0
Instr [20 - 16]
0
Instr [15 - 11]
1
Ιεραρχία Μνήμης
Large and Fast
• Έχουμε δει ήδη κάποιες βασικές τεχνικές για να επιταχύνουμε την
επεξεργασία δεδομένων στην CPU (πχ διοχέτευση)
• Δεν έχουμε πει όμως τίποτε για τις μνήμες.
– Χρειαζόμαστε μεγάλες μνήμες για να αποθηκεύσουμε εντολές και δεδομένα
για μεγάλες εφαρμογές όπως βάσεις δεδομένων, video και μουσική, κτλ
– Χρειαζόμαστε γρήγορες μνήμες για να μπορούμε να παρέχουμε εντολές και
δεδομένα με τον ίδιο ρυθμό που μας ζητάει η CPU. Αλλιώς η CPU θα
περιμένει συνέχεια χωρίς να κάνει τίποτα.
• Το μοντέλο ότι έχουμε μια μεγάλη επίπεδη μνήμη η οποία μπορεί
να παρέχει εντολές και δεδομένα σε έναν κύκλο και έχει
ανεξάντλητο μέγεθος δεν ισχύει.
• Σε αυτήν την ενότητα θα δούμε πως μπορούμε να σχεδιάσουμε τις
μνήμες εντολών και δεδομένων ώστε να προσομοιάζει όσο το
δυνατόν το παραπάνω μοντέλο.
– Κρυφές μνήμες (cache memories).
– Εικονικές μνήμες (virtual memories)
Οργάνωση και Σχεδίαση Η/Υ
4
(HY232)
Είδη μνήμης
• Η τεχνολογία μνημών είναι είτε γρήγορη και ακριβή (SRAMs), είτε αργή και
φθηνή (Magnetic Disks)
• Η πιο γρήγορη μνήμη (SRAM) είναι πολύ ακριβή για να χρησιμοποιηθεί εξ’
ολοκλήρου σε μια CPU .
• Από την άλλη, η δυναμική μνήμη (DRAM) έχει χαμηλότερη ταχύτητα από την
λογική που χρησιμοποιείται στην μικρο-αρχιτεκτονική. Εάν χρησιμοποιηθεί
εξ’ολοκλήρου σε μια CPU, το σύστημα θα πρέπει να καθυστερεί πολλούς κύκλους
για να διαβάζουμε δεδομένα ή εντολές.
Είδος Μνήμης Ταχύτητα Κόστος/MB Χωρητικότητα
Static RAM H πιο γρήγορη Ακριβή Μικρή
Dynamic RAM Αργή Φθηνή Μεγάλη
Hard disks Η πιο αργή Η πιο Φθηνή Η μεγαλύτερη
Μνήμη Cache
• To ιδανικό λοιπόν είναι να βρούμε μια ισορροπία μεταξύ γρήγορης και
φθηνής μνήμης. Πως μπορούμε να έχουμε τον καλύτερο συνδυασμό CPU
των δύο αυτών κόσμων;
• Η λανθάνουσα μνήμη (cache memory) είναι μια μικρή και γρήγορη
μνήμη που ανταποκρίνεται σε αυτές τις προδιαγραφές. Επειδή είναι
μικρή σε μέγεθος σε σχέση με την κύρια μνήμη δεν είναι πολύ ακριβή.
– Η cache βρίσκεται ανάμεσα στον επεξεργαστή και στην (μεγαλύτερη Μικρή στατική
μνήμη(cache)
και πιο αργή) κύρια μνήμη.
– Κρατάει αντίγραφα των πιο συχνά εκτελούμενων εντολών και
δεδομένων.
• Η προσπέλαση δεδομένων και εντολών μειώνεται με το να κάνουμε την
συχνή περίπτωση πιο γρήγορη. Μεγάλη δυναμική
μνήμη (RAM)
• Η κύρια μνήμη χρειάζεται να προσπελασθεί μόνο για δεδομένα που δεν
είναι στην cache. Αυτά είναι συνήθως δεδομένα που δεν εκτελούνται
τόσο συχνά
sum = 0;
for (i = 0; i < MAX; i++)
sum = sum + f(i);
Block
index 8-bit data
000
001
010
011
100
101
110
111
Οργάνωση και Σχεδίαση Η/Υ
15
(HY232)
Tag
= Hit
Cache Misses
• Μιας και οι μνήμες cache είναι πολύ μικρότερες από την κύρια
μνήμη, είναι αναπόφευκτο να υπάρχουν φορές που δεν βρίσκουμε
τα δεδομένα στην cache (cache miss).
• H κύρια μνήμη είναι μερικά GB, ενώ μια τυπική cache 16-32 ΚΒ
• Το ποσοστό των cache hits ανάμεσα σε όλες τις προσπελάσεις τις
cache, λέγεται hit rate. Το ποσοστό των cache misses λέγεται miss
rate.
• Σε περίπτωση ενός cache miss, η CPU φέρνει τα δεδομένα από την
κύρια μνήμη και ταυτόχρονα τα μεταφέρει και στην cache.
• Θεωρούμε για απλούστευση ότι μέχρι να έρθουν τα δεδομένα στην
cache η CPU κάνει stall. Αυτό το stall μπορεί να διαρκέσει δεκάδες ή
και εκατοντάδες κύκλους μηχανής.
...
Data ...
1
Οργάνωση και Σχεδίαση Η/Υ
31
(HY232)
• Αυτό είναι μια απλή λύση, αν και συνήθως δημιουργεί υψηλό overhead
• Δημιουργεί την ανάγκη να στέλνουμε συνέχεια δεδομένα στην κύρια
μνήμη πολλές φορές χωρίς λόγο.
Write-back caches
• Σε μια write-back cache γράφουμε μόνο στην cache αμέσως αλλά όχι στην κύρια
μνήμη.
• H κύρια μνήμη ανανεώνεται με τα πιο πρόσφατα δεδομένα μόνο όταν το cache
block το οποίο γράψαμε αντικαθίσταται και πρέπει να γραφεί πίσω στην μνήμη.
• Αυτό σημαίνει ότι για κάποιο χρονικό διάστημα το δεδομένα της κύριας μνήμης
δεν είναι τα σωστά (πρόβλημα ασυνέπειας μνήμης = inconsistency)
• Κάθε μελλοντικό διάβασμα (read) από το ίδιο block θα εξυπηρετηθεί από την
cache.
• Χρειάζεται ένα extra bit (dirty bit) για κάθε block στην cache. Γίνεται 1 όταν η CPU
γράψει οποιαδήποτε byte στο block αυτό.
– Μόνο όταν dirty bit = 1, χρειάζεται να ανανεωθεί η κύρια μνήμη σε
περίπτωση αντικατάστασης ενός block.
Mem[1101 0110] = 21763
Write misses
• Η δεύτερη περίπτωση είναι να γράψουμε σε μια διεύθυνση που δεν
είναι στην cache (write miss). Θεωρείστε μια direct-mapped cache.
• Έστω ότι θέλουμε να γράψουμε:
Mem[11010 110] = 21763 // Write Miss
• Πως αντιμετωπίζουμε αυτήν την περίπτωση;
No Write Allocate
Λειτουργεί καλά αυτή η στρατηγική για τον παρακάτω κώδικα;
Όχι, δεν έχει νόημα να βάζουμε στην cache δεδομένα όπως ο πίνακας a[.]
που δεν θα ξαναχρησιμοποιηθούν για μεγάλο χρονικό διάστημα.
όπου
Κύκλοι καθυστέρησης στις μνήμες = Προσπελάσεις στις μνήμες/Πρόγραμμα *
Ρυθμός Αστοχίας * Ποινή αστοχίας σε κύκλους =
Αριθμός Αστοχιών /Πρόγραμμα * Ποινή αστοχίας σε κύκλους =
Εντολές /Πρόγραμμα * Αστοχία/Εντολή * Ποινή αστοχίας σε κύκλους
Απόδοση CPU
• Αν και η απόδοση της κύριας μνήμης DRAM αυξάνεται με τα χρόνια, εν’ τούτοις
αυξάνεται πολύ πιο αργά σε σχέση με την απόδοση του επεξεργαστή.
• Αυτό σημαίνει ότι η ποινή αστοχίας από μερικούς κύκλους την δεκαετία του ‘80, έχει
φτάσει να είναι εκατοντάδες κύκλους τα τελευταία χρόνια.
• Η εξίσωση για το ΑΜΑΤ, μας δείχνει την σημασία να μειωθεί o Ρυθμός Αστοχίας και
Ποινή Αστοχίας σε Κύκλους
Οργάνωση και Σχεδίαση Η/Υ (HY232) 7
• Μέχρι στιγμής έχουμε εξετάσει μια απλή οργάνωση της cache, δηλ.
θεωρούμε cache άμεσης απεικόνισης (direct mapped) και με
μέγεθος του cache block ίσο με ένα byte.
• Ας δούμε σήμερα πως μπορούμε να επεκτείνουμε την
αρχιτεκτονική της μνήμης cache για να βελτιώσουμε την απόδοσή
της (να μειώσουμε τον ρυθμό αστοχίας, miss rate).
• Υπάρχουν 2 βασικοί τρόποι
– Βελτίωση της χωρικής τοπικότητας
– Βελτίωση της χρονικής τοπικότητας
Παράδειγμα 1
• Έστω μια direct-mapped μνήμη cache με 64 blocks, 16
bytes/block
– Σε ποιο block θα αποθηκευθούν τα δεδομένα της διεύθυνσης
1200?
• 1200 = 00..001 001011 0000
• Block number = 11
• Block offset = 0
31 10 9 4 3 0
Tag Index Offset
22 bits 6 bits 4 bits
Hit Data
Παράδειγμα 2
Tag Index (2 bits)
Address (4 bits) n nn n Block offset
1 2
1
Ποιο byte διαβάζεται για
κάθε μία από τις
Index Valid Tag Data
παρακάτω διευθύνσεις;
0 1 0 0xCA 0xFE 1010 (0xDE)
1 1 1 0xDE 0xAD 1110 (miss, invalid)
2 1 0 0xBE 0xEF
0 1 0xFE 0xED
0001 (0xFE)
3
8 8
1101 (miss, tag mismatch)
=
0 Mux 1
Hit Data
Hit Data
Οργάνωση και Σχεδίαση Η/Υ
15
(HY232)
διεύθυνση 6146
(00..01 1000000000 Index Valid
...
Tag Data
10). 512
...
• Ο cache controller θα Tag 8 8 8 8
φέρει στην cache όλο =
8
Hit Data
35%
30%
1 KB
25%
Miss rate
8 KB
20% 16 KB
64 KB
15%
10%
5%
0%
4 16 64 256
Block size (bytes)
Fully-associative cache
• Οι fully-associative caches είναι όμως ακριβές γιατί πιάνει πολύ
χρόνο το να διαπιστώσουμε εάν έχουμε Hit OR Miss.
– Δεν υπάρχει πεδίο index στην διεύθυνση
– Τα δεδομένα μπορούν να είναι παντού στην cache, το οποίο σημαίνει ότι θα
πρέπει να ελέγξουμε τα tags κάθε block για να δούμε εάν δεδομένα είναι
στην cache.
– Αυτό χρειάζεται πολλούς συγκριτές και παίρνει πολύ χρόνο.
= Hit
Παράδειγμα Associativity
• Έστω μια μνήμη cache με 4 blocks
– Direct mapped, 2-way set associative,
fully associative
– Αλληλουχία διευθύνσεων που προσπελαύνουμε: 0, 8, 0, 6, 8
• Direct mapped
• Fully associative
Block Hit/miss Cache content after access
address
0 miss Mem[0]
8 miss Mem[0] Mem[8]
0 hit Mem[0] Mem[8]
6 miss Mem[0] Mem[8] Mem[6]
8 hit Mem[0] Mem[8] Mem[6]
Παράδειγμα Associativity
• Υποθέστε ότι έχουμε μια μνήμη cache με 8 blocks, 16 bytes/blocks. Σε ποιο cache block
θα τοποθετηθούν τα δεδομένα που βρίσκονται στην διεύθυνση 6195, για κάθε μία από
τις 3 περιπτώσεις οργάνωσης της cache;
• Το 6195 στο δυαδικό σύστημα είναι 00...01100000110011.
• Κάθε block έχει 16 bytes, άρα τα 4 LSB είναι το Block offset.
• Η direct mapped cache έχει 8 sets, και άρα τα επόμενα 3 bits (011) είναι ο set index.
Η 2-way set associative cache έχει 4 sets, και άρα τα επόμενα 2 bits (11) είναι ο set
index.
Η 4-way set associative cache έχει 2 sets, και άρα τo επόμενα 1 bit (1) είναι ο set index.
• Tα δεδομένα μπορούν να μπουν σε κάθε block από τα πράσινα στην cache.
direct mapped 2-way associativity 4-way associativity
8 sets, 1 block each 4 sets, 2 blocks each 2 sets, 4 blocks each
Set Set Set
0
1 0
2 0
1
3
4
2
5 1
6 3
7
Οργάνωση και Σχεδίαση Η/Υ
26
(HY232)
Αντικατάσταση blocks
• Εάν δεν υπάρχουν άδεια blocks σε ένα σύνολο (set) όταν
προσπαθούμε να φέρουμε ένα νέο block στην cache, o ελεγκτής
της cache (cache controller) θα αντικαταστήσει το block που έχει
να χρησιμοποιηθεί τον περισσότερο χρόνο (Least Recently Used,
LRU).
– Αυτός είναι ο πιο συνηθισμένος αλγόριθμος, αλλά δεν είναι και ο μόνος
12%
9%
Miss rate
1 KB
2 KB
4 KB
6% 8 KB
3%
0%
One-way Two-way Four-way Eight-way
Associativity
Local Miss Rate (L2) : ο ρυθμός αστοχίας της L2 Cache από τις
προσπελάσεις που έρχονται από την L1 Cache.
Global Miss Rate (L2) = Miss Rate (L1) * Local Miss Rate (L2): ο
ρυθμός αστοχίας της L2 Cache από τις συνολικές προσπελάσεις
που έρχονται από την CPU
Διάλεξη 16
Εικονική Μνήμη
(Virtual memory)
Προβλήματα φυσικής μνήμης (1)
• Τι θα συμβεί εάν η μνήμη που χρειάζεται το πρόγραμμά
μας είναι περισσότερη από το μέγεθος της κύριας
μνήμης;
– Θα μπορούσαμε να αποθηκεύσουμε όλο το πρόγραμμα στον
σκληρό δίσκο, και να χρησιμοποιήσουμε την κύρια μνήμη σαν
cache του σκληρού δίσκου
– Αυτό είναι η εικονική μνήμη (virtual memory): μια τεχνική που
επιτρέπει την χρησιμοποίηση της κύριας μνήμης ως cache του
σκληρού δίσκου.
– Πριν την εφεύρεση της εικονικής μνήμης, οι προγραμματιστές
έπρεπε να προνοήσουν να μεταφέρουν προγράμματα και
δεδομένα μεταξύ δίσκου και κύριας μνήμης κάθε φορά που
αυτά δεν χωρούσαν στην κύρια μνήμη.
• Πολύπλοκο, κουραστικό και γεμάτο κινδύνους για λάθη. Οι
προγραμματιστές παλαιότερα έπρεπε να κάνουν πολύ περισσότερα από
το απλώς να γράφουν ένα πρόγραμμα για μια εφαρμογή.
Οργάνωση και Σχεδιάση Η/Y
2
(HY232)
Name
Thing
• Έμμεση προσπέλαση
Name
Thing
Thing
Πχ.
Disk int *ptr = (int *)
0x1000FFFF;
Η διεύθυνση 0x1000FFFF είναι
εικονική.
Virtual Address
Virtual Address
0x1000FFFF
0x1000FFFF
Disk
Virtual Address
Virtual Address
Disk
Prefetching
• Πολλά συστήματα υψηλής απόδοσης κάνουν aggressive data and
instruction prefetching.
… 0x114
subl $8, %esp 0x110
movl $123, -8(%ebp)
movl $456, -4(%ebp) 0x10c
leal -4(%ebp), %eax
pushl %eax
leal -8(%ebp), %eax Key:
pushl %eax sub = subtract
call swap l = long (32-bit operation)
... $8 = literal 8
%esp= stack pointer register
ESP = ESP - 8
Πρόλογος swap
void swap(int *xp, int *yp)
{ 0x124
int t0 = *xp;
int t1 = *yp; 0x120
*xp = t1; %ebp
*yp = t0; 0x11c
}
456 0x118
123 0x114
0x104
Πρόλογος swap
void swap(int *xp, int *yp)
{ 0x124
int t0 = *xp;
int t1 = *yp; 0x120
*xp = t1;
*yp = t0; 0x11c
}
456 0x118
123 0x114
Σώζουμε τον καταχωρητή ebx γιατί θα γίνει overwrite στην swap (callee saved).
esp ebp
%ecx 0x100
Διακλαδώσεις
• Ο έλεγχος ροής ενός προγράμματος αποτελείται από δύο
βήματα :
– Θέτουμε ένα condition flag στον καταχωρητή EFLAGS
• Αυτό γίνεται σαν παρενέργεια των περισσότερων αριθμητικών εντολών ή
μέσω της εντολής cmp
– Διακλαδώνουμε βασιζόμενοι στο condition flag
int sum(int n) {
int i, sum = 0;
for (i = 1 ; i <= n ; ++ i) {
sum += i;
}
return sum;
}
Παράδειγμα με διακλαδώσεις
int sum(int n) {
int i, sum = 0;
for (i = 1 ; i <= n ; ++ i) {
sum += i;
}
return sum;
}
sum: pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %ecx # n (was argument)
movl $1, %edx # i = 1
xorl %eax, %eax # sum = 0
cmpl %ecx, %edx # (i ? n), sets cond. codes
jg .L8 # branch if (i > n)
.L6:
addl %edx, %eax # sum += i
incl %edx # i += 1
cmpl %ecx, %edx # (i ? n)
jle .L6 # branch if (i <= n)
.L8:
Data-Level Parallelism
Linking & Loading
Παραλληλισμός σε εφαρμογές
• Πολλά σημαντικά υπολογιστικά προβλήματα έχουν έμφυτη την
ιδιότητα του παραλληλισμού
• Παραλληλισμός πολλαπλών επιπέδων
• Computer games:
– Γραφικά, ήχος, AI, μπορούν να γίνουν εντελώς παράλληλα μεταξύ τους
– Επίσης, κάθε ένα από αυτά τα κομμάτια έχουν εσωτερικά παράλληλους
υπολογισμούς
• Κάθε Pixel στην οθόνη του υπολογιστή μπορεί να υπολογισθεί και να
απεικονισθεί εντελώς ανεξάρτητα από τα υπόλοιπα
• Η κίνηση αντικειμένων που δεν αλληλοεπιδρούν μπορεί να γίνει εντελώς
παράλληλα
• Stereo sound το ίδιο
• Google queries:
– Κάθε google search μπορεί να γίνει εντελώς παράλληλα με οποιοδήποτε
άλλο
Οργάνωση Η/Y (ECE 232) 2
Data Level Parallelism
• Έστω ο παρακάτω κώδικας C που προσθέτει δύο πίνακες
void
array_add(int A[], int B[], int C[], int length) {
int i;
for (i = 0 ; i < length ; ++ i) {
C[i] = A[i] + B[i];
}
}
• Σε assembly MIPS
lw $t0, 0($a0)
lw $t1, 0($a1)
add $t0, $t1, $t2
sw $t2, 0($a2)
void
array_add(int A[], int B[], int C[], int length) {
int i;
for (i = 0 ; i < length ; ++ i) {
C[i] = A[i] + B[i];
}
}
Οργάνωση Η/Y (ECE 232) 4
Data Level Parallelism
Ένα στοιχείο την φόρα
void
array_add(int A[], int B[], int C[], int length) {
int i;
for (i = 0 ; i < length ; ++ i) {
C[i] = A[i] + B[i];
}
}
Οργάνωση Η/Y (ECE 232) 5
+ + ++ Single Instruction,
Multiple Data (SIMD)
void
array_add(int A[], int B[], int C[], int length) {
int i;
for (i = 0 ; i < length ; ++ i) {
C[i] = A[i] + B[i];
}
}
Οργάνωση Η/Y (ECE 232) 6
Data Level Parallelism
Μία εντολή επενεργεί σε πολλαπλά δεδομένα
+ + ++ Single Instruction,
Multiple Data (SIMD)
void
array_add(int A[], int B[], int C[], int length) {
int i;
for (i = 0 ; i < length ; ++ i) {
C[i] = A[i] + B[i];
}
}
Οργάνωση Η/Y (ECE 232) 7
4.0 (32 bits) 4.0 (32 bits) 3.5 (32 bits) -2.0 (32 bits)
+ -1.5 (32 bits) 2.0 (32 bits) 1.7 (32 bits) 2.3 (32 bits)
2.5 (32 bits) 6.0 (32 bits) 5.2 (32 bits) 0.3 (32 bits)
p = packed
Παράδειγμα ΙΙ
unsigned
sum_array2(unsigned *array, int length) {
unsigned total, i;
unsigned temp[4] = {0, 0, 0, 0};
for (i = 0 ; i < length & ~0x3 ; i += 4) {
temp[0] += array[i];
temp[1] += array[i+1];
temp[2] += array[i+2];
temp[3] += array[i+3];
}
total = temp[0] + temp[1] + temp[2] + temp[3];
for ( ; i < length ; ++ i) {
total += array[i];
}
return total;
}
Οργάνωση Η/Y (ECE 232) 12
Linking & Loading
Στατική
σύνδεση
Εργασίες συμβολο-μεταφραστή
2. Παραγωγή αντικειμενικών υπομονάδων
• Ο μεταγλωττιστής ή ο συμβολομεταφραστής μετατρέπει το
αρχικό πρόγραμμα σε ένα αντικειμενικό αρχείο (object file)
• Το αντικειμενικό αρχείο περιέχει
– το πρόγραμμα μεταγλωττισμένο σε εντολές γλώσσας μηχανής
– επιπλέον πληροφορίες και δεδομένα που χρειάζονται για την
εκτέλεση του προγράμματος