Μηχανές RISC, VLIW, παράλληλες αρχιτεκτονικές, προσομοίωση

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

RISC: Οι δυνάμεις αλλαγής

Οι παραπάνω δυνάμεις οδήγησαν στη σχεδίαση Μηχανών Περιορισμένου Συνόλου Εντολών (Reduced Instruction Set Computer) (RISC).

Σχεδιασμός RISC

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

Σύγκριση χαρακτηριστικών 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). Το πλεονέκτημα τις προσέγγισης αυτής είναι πως ο μεταγλωττιστής μπορεί να βελτιστοποιήσει καθολικά τη χρήση των πόρων του επεξεργαστή αφού έχει την πλήρη εικόνα του προγράμματος και όχι λίγων μόνο εντολών. Με τον τρόπο αυτό ελαχιτοποιούνται διάφοροι κίνδυνοι (δομικοί, ελέγχου, δεδομένων). Επιπλέον, η πρόοδος στην τεχνολογία του μεταγλωττιστή οδηγεί άμεσα σε ταχύτερα προγράμματα χωρίς να απαιτηθεί αλλαγή στον μικροκώδικα του επεξεργαστή.

Προσομοίωση

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

Τεχνικές διερμηνείας είναι ακόμα απαραίτητας κατά το στάδιο σχεδιασμού μιας αρχιτεκτονικής. Με τη χρήση της προσομοίωσης της νέας αρχιτεκτονικής μπορούμε να εξάγουμε χαρακτηριστικά της απόδοσης των προγραμμάτων χωρίς να χρειαστεί να κατασκευάσουμε τον επεξεργαστή.

Πηγές στο Internet

Βιβλιογραφία