Μηχανές RISC, VLIW, παράλληλες αρχιτεκτονικές, προσομοίωση
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
RISC: Οι δυνάμεις αλλαγής
- Μελέτες πραγματικών προγραμμάτων
- Ταχύτερη μνήμη RAM
- Βελτιώσεις στην τεχνολογία των μεταγλωττιστών
- Μικρότερο κόστος αποθηκευτικού χώρου
Οι παραπάνω δυνάμεις οδήγησαν στη σχεδίαση
Μηχανών Περιορισμένου Συνόλου Εντολών (Reduced Instruction Set Computer)
(RISC).
Σχεδιασμός RISC
Η παρακάτω διαδικασία σχεδίασης ακολουθείται για κάθε είδος πόρου
του επεξεργαστή
(εντολές, κρυφή μνήμη, διαχείριση μνήμης, εντολές κινητής υποδιαστολής).
- Ανάλυση πραγματικών εφαρμογών και εύρεση βασικών λειτουργιών
- Σχεδίαση διαδρομής δεδομένων για τις παραπάνω λειτουργίες
- Σχεδίαση εντολών που εκτελούν τις παραπάνω λειτουργίες με τη χρήση
της συγκεκριμένης διαδρομής δεδομένων
- Προσθήκη νέων εντολών μόνο αν δεν επιβραδύνουν τη μηχανή
Σύγκριση χαρακτηριστικών CISC / RISC
Χαρακτηριστικό |
IBM 370 | Intel 486, P5, P6 | MIPS R4000 | PowerPC 601 |
Έτος | 1973 | 1989-1999 | 1991 | 1993 |
# Εντολές | 208 | 235 | 94 | 206 |
Μέγεθος εντολής (bytes) | 2-6 | 1-11 | 4 | 4 |
Τρόποι διευθυνσιοδότησης | 4 | 11 | 1 | 2 |
Αριθμός καταχωρητών γενικής χρήσης | 16 | 8 | 32 | 32 |
Σύγκριση κώδικα CISC / RISC
Κώδικας C
/*
* Print tabs to indent the following character by indent_level
*/
void
indent(void)
{
int i;
for (i = 0; i < indent_level; i++)
putchar('\t');
}
Κώδικας Pentium
Διακρίνουμε τη χρήση ειδικών καταχωρητών και τις σύνθετες εντολές.
indent:
pushl %ebp
movl %esp,%ebp
pushl %ebx
xorl %ebx,%ebx
cmpl indent_level,%ebx
jge .L18
.p2align 4,,7
.L20:
pushl stdout
pushl $9
call _IO_putc
addl $8,%esp
incl %ebx
cmpl indent_level,%ebx
jl .L20
.L18:
movl -4(%ebp),%ebx
leave
ret
Κώδικας ARM
Διακρίνουμε εντολές με τρεις τελεστέους και την πρόσβαση στη μνήμη μέσω
καταχωρητών.
_indent:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, current_function_anonymous_args = 0
mov ip, sp
stmfd sp!, {r4, r5, r6, r7, fp, ip, lr, pc}
ldr r6, L199
ldr r3, [r6, #0]
sub fp, ip, #4
mov r4, #0
cmp r4, r3
ldmgeea fp, {r4, r5, r6, r7, fp, sp, pc}
mov r7, #9
ldr r5, L199+4
L9:
ldr r3, [r5, #8]
sub r2, r3, #1
str r2, [r5, #8]
cmp r2, #0
bge L10
ldr r3, [r5, #24]
cmp r2, r3
blt L11
L10:
ldr r3, [r5, #0]
strb r7, [r3], #1
str r3, [r5, #0]
b L8
L11:
mov r0, #9
mov r1, r5
bl ___swbuf
L8:
ldr r3, [r6, #0]
add r4, r4, #1
cmp r4, r3
blt L9
ldmea fp, {r4, r5, r6, r7, fp, sp, pc}
L200:
.align 0
L199:
.word _indent_level
.word ___sF+88
Lfe3:
.size _indent,Lfe3-_indent
.align 0
Κώδικας SPARC
Διακρίνουμε τη χρήση παραθύρου καταχωρητών εισερχομένων παραμέτρων (i)
τοπικών μεταβλητών (l) και εξερχομένων παραμέτρων (o).
indent__Fv:
.LLFB4:
!#PROLOGUE# 0
save %sp, -112, %sp
.LLCFI3:
!#PROLOGUE# 1
sethi %hi(indent_level), %o0
ld [%o0+%lo(indent_level)], %o1
mov 0, %l0
cmp %l0, %o1
bge .LL10
mov %o0, %l4
sethi %hi(__iob+16), %l2
or %l2, %lo(__iob+16), %l1
mov 9, %l3
ld [%l2+%lo(__iob+16)], %o0
.LL171:
add %o0, -1, %o0
cmp %o0, 0
bge .LL7
st %o0, [%l2+%lo(__iob+16)]
mov 9, %o0
call __flsbuf, 0
mov %l1, %o1
b .LL170
ld [%l4+%lo(indent_level)], %o0
.LL7:
ld [%l1+4], %o0
stb %l3, [%o0]
add %o0, 1, %o0
st %o0, [%l1+4]
ld [%l4+%lo(indent_level)], %o0
.LL170:
add %l0, 1, %l0
cmp %l0, %o0
bl .LL171
ld [%l2+%lo(__iob+16)], %o0
.LL10:
ret
restore
Παράλληλες αρχιτεκτονικές
Μπορούμε να διακρίνουμε τις παρακάτω κατηγορίες αρχιτεκτονικών ως προς την παραλληλία:
Οι αρχιτεκτονικές SIMD όταν επιδρούν σε διανύσματα επιτυγχάνουν αύξηση της
ταχύτητα διότι
αξιοποιούν τις παρακάτω ιδιότητες για την επεξεργασία
των δεδομένων σε παραγματικά προγράμματα:
- Κάθε αποτέλεσμα δεν εξαρτάται από το προηγούμενο
- Μια εντολή μπορεί να επιδράσει πολλά δεδομένα (δεν καθυστερεί ο επεξεργαστής
από την πρόσβαση στις εντολές
- Η πρόσβαση στη μνήμη είναι γνωστή και μπορεί να βελτιστοποιηθεί
(π.χ. με τη χρήση παράλληλων δομών μνήμης)
- Ελαχιστοποιούνται οι κίνδυνοι ελέγχου αφού πολλοί βρόχοι εκτελούνται ως
μια εντολή.
Οι αρχιτεκτονικές MIMD μπορούν να κατηγοριοποιηθούν ανάλογα με το αν χρησιμοποιούν
ιδιωτική ή κοινόχρηστη μνήμη.
Η σύνδεση των υπολογιστικών στοιχείων σε αρχιτεκτονικές MIMD με χωριστή μνήμη
μπορεί να είναι:
Αρχιτεκτονικές VLIW
Μια άλλη προσέγγιση στην αρχιτεκτονική των υπολογιστών είναι η παρουσίαση
στον προγραμματιστή / μεταγλωττιστή της πλήρους εσωτερικής δομής του
επεξεργαστή.
Οι εντολές πρέπει τότε να περιέχουν στοιχεία ανάλογα σε λεπτομέρεια με αυτά
του μικροπρογράμματος.
Για το λόγο αυτό οι επεξεργαστές χαρακτηρίζονται ως
εξαιρετικά εκτεταμένου μήκους εντολών (very long instruction word).
Το πλεονέκτημα τις προσέγγισης αυτής είναι πως ο μεταγλωττιστής μπορεί να
βελτιστοποιήσει καθολικά τη χρήση των πόρων του επεξεργαστή αφού έχει
την πλήρη εικόνα του προγράμματος και όχι λίγων μόνο εντολών.
Με τον τρόπο αυτό ελαχιτοποιούνται διάφοροι κίνδυνοι (δομικοί, ελέγχου, δεδομένων).
Επιπλέον,
η πρόοδος στην τεχνολογία του μεταγλωττιστή οδηγεί άμεσα σε ταχύτερα
προγράμματα χωρίς να απαιτηθεί αλλαγή στον μικροκώδικα του επεξεργαστή.
Προσομοίωση
Όταν μια αρχιτεκτονική φτάσει στο τέλος της ζωής της παραμένει το πρόβλημα
της χρήσης του λογισμικού που βασίζεται στην αρχιτεκτονική αυτή.
Συχνά η μεταγλώττιση του πηγαίου κώδικα σε άλλη αρχιτεκτονική δεν είναι δυνατή.
Στις περιπτώσεις αυτές η λύση είναι η προσομοίωση της παλιάς αρχιτεκτονικής
στη νέα.
Διακρίνουμε τις παρακάτω προσεγγίσεις:
- Υποστήριξη των εντολών της παλιάς αρχιτεκτονικής από την νέα σε επίπεδο
μικροκώδικα (Vax-PDP11, Pentium-8086).
- Στατική μεταγλώττιση των προγραμμάτων από τις εντολές της παλιάς
αρχιτεκτονικής στις εντολές της νέας (AS400, PowerPC).
- Διερμηνεία των εντολών της παλιάς αρχιτεκτονικής από την νέα
(SoftPC σε επεξεργαστές Motorolla).
- Μικτές προσεγγίσεις με διερμηνεία και δυναμική μεταγλώττιση σημείων
που απαιτούν πολλούς υπολογιστικούς πόρους (JavaVM Just in Time Compilers).
Συχνά η νέα αρχιτεκτονική παρέχει ορισμένα χαρακτηριστικά για να διευκολύνει
τη διαδικασία της μεταγλώττισης ή της διερμηνείας (καταχωρητές, εντολές, παγίδες).
Τεχνικές διερμηνείας είναι ακόμα απαραίτητας κατά το στάδιο σχεδιασμού μιας αρχιτεκτονικής.
Με τη χρήση της προσομοίωσης της νέας αρχιτεκτονικής μπορούμε να εξάγουμε
χαρακτηριστικά της απόδοσης των προγραμμάτων χωρίς να χρειαστεί να κατασκευάσουμε
τον επεξεργαστή.
Πηγές στο Internet
Βιβλιογραφία
- Andrew S. Tanenbaum
Η αρχιτεκτονική των υπολογιστών: μια δομημένη προσέγγιση.
Τρίτη αμερικάνικη έκδοση. σ. 507-627, 467-502. Κλειδάριθμος 1995.
- P.J. Denning.
Computer architecture: Some old ideas that haven't quite made it yet.
CACM, 24(9):553–554, 1981.
- J. Hennessy
and T. Gross.
Postpass code optimization of pipeline constraints.
ACM Transactions on Programming Languages and Systems, 1983.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach, pages 351–397, E1–E24.
Morgan Kaufmann Publishers, 1990.
- J. Hennessy.
Vlsi processor architecture.
IEEE Transactions on Computers, 1984.
- A. Lunde.
Empirical evaluation of some features of instruction set processor
architectures.
CACM, 1972.
- D.A.
Patterson and D.R. Ditzel.
The case for the reduced instruction set computer.
Computer Architecture News, 8(6), 1980.
- D.A.
Patterson and C.H. Sequin.
Risc 1: a reduced instruction set vlsi computer.
8th. Ann. Symp. on Computer Architecture, pages 443–457, 1981.
- D.A.
Patterson and C.H. Sequin.
A vlsi risc.
Computer, 15(9):8–21, 1982.
- D. Patterson.
Reduced instruction set computers.
CACM, 1985.
- A. Tanenbaum.
Implications of structured programming for machine architecture.
CACM, 1978.