Περιεχόμενα. 2 Μαργελης Γεωργιος

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Περιεχόμενα. 2 Μαργελης Γεωργιος"

Transcript

1

2 Περιεχόμενα Περιεχόμενα... 1 Ευρετήριο Διαγραμμάτων... 5 Περίληψη Κεφάλαιο Μια εισαγωγή στα συστήματα-σε-chip Η αρχή Τα πλεονεκτήματα του μικροεπεξεργαστή Η ανάγκη για βελτίωση... 2 Το τίμημα της βελτίωσης Άλλες μέθοδοι ώστε να βελτιώσουμε τις αποδόσεις Η μετά βαση σε πολύ-επεξεργαστικά συστήματα Κεφάλαιο Σχεδιασμός ενός Συστηματος-σε-ενα-Chip Συγκεκριμένη και αποδεκτή προσέγγιση Παραμετροποιησιμοι επεξεργαστές Xtensa Xplorer... 3 Επέκταση εντολών επεξεργαστή (TIEs) Ο Xpress Compiler Διερεύνηση μνήμης - Ενέργειας Κεφάλαιο Ελέγχοντας την απόδοση του επεξεργαστή Αλγόριθμος DES Γενική δομή Η Feistel (F) πράξη Το πρόγραμμα κλειδιών Το πρόγραμμα μέτρησης... 4 Κεφάλαιο Αρχιτεκτονικές υλοποίησης Αρχιτεκτονική ενός επεξεργαστή Αρχιτεκτονική Σωλήνωσης με Δυο Επεξεργαστές Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές Αρχιτεκτονική Παράλληλων Σωληνώσεων με Πέντε Επεξεργαστές Κεφάλαιο Αρχιτεκτονική με ένα επεξεργαστή Αρχικές ρυθμίσεις Διερεύνηση ρυθμίσεων Instruction Cache Διερεύνηση ρυθμίσεων Data Cache Επιλογή βέλτιστων ρυθμίσεων Επιλογή επεκτάσεων TIEs Οι Επιλεγμένες επεκτάσεις: Κεφάλαιο

3 Αρχιτεκτονική Σωλήνωσης με δυο Επεξεργαστές Αρχική υλοποίηση Πρώτος Επεξεργαστής: Διερεύνηση ρυθμίσεων Instruction Cache Εξερεύνηση ρυθμίσεων Data Cache Επιλογή βέλτιστων ρυθμίσεων Επιλογή επεκτάσεων TIEs Δεύτερος Επεξεργαστής: Εξερεύνηση ρυθμίσεων Instruction Cache Εξερεύνηση ρυθμίσεων Data Cache Επιλογή βέλτιστων ρυθμίσεων Επιλογή επεκτάσεων TIEs Αποτελέσματα XTMP προσομοίωσης με βελτιστοποιημένες Cache Κώδικας προσομοίωσης συστήματος Τροποποίηση κώδικα DES.c Κεφάλαιο Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Αρχική υλοποίηση Επεξεργαστής Master: Εξερεύνηση ρυθμίσεων Instruction Cache Εξερεύνηση ρυθμίσεων Data Cache Επιλογή βέλτιστων ρυθμίσεων Επιλογή Επεκτάσεων Tie Επεξεργαστής Slave: Εξερεύνηση ρυθμίσεων Instruction Cache Εξερεύνηση ρυθμίσεων Data Cache Επιλογή βέλτιστων ρυθμίσεων Επιλογή επεκτάσεων TIEs Κώδικας προσομοίωσης συστήματος Τροποποίηση κώδικα DES.c Κεφάλαιο Αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές Αρχικη υλοποίηση Επεξεργαστής Master: Εξερεύνηση ρυθμίσεων Instruction Cache Εξερεύνηση ρυθμίσεων Data Cache Επιλογή επεκτάσεων TIEs Επεξεργαστής Slave: Εξερεύνηση ρυθμίσεων Instruction Cache Εξερεύνηση ρυθμίσεων Data Cache Επιλογή επεκτάσεων TIEs Κώδικας προσομοίωσης συστήματος Τροποποίηση κώδικα DES.c Κεφάλαιο Αρχιτεκτονική Παράλληλων Σωληνωσεων με Πεντε Επεξεργαστές

4 Αρχικη υλοποίηση Επεξεργαστης Master: Εξερέυνηση ρυθμίσεων Instruction Cache Εξερέυνηση ρυθμίσεων Data Cache Επιλογή επεκτάσεων TIEs Επεξεργαστης Slave1: Εξερέυνηση ρυθμίσεων Instruction Cache Εξερέυνηση ρυθμίσεων Data Cache Επιλογή επεκτάσεων TIEs... 2 Επεξεργαστης Slave3: Εξερέυνηση ρυθμίσεων Instruction Cache Εξερέυνηση ρυθμίσεων Data Cache Επιλογή επεκτάσεων TIEs Κωδικας προσομοιωσης συστήματος Τροποποίηση κώδικα DES.c Κεφάλαιο Συμπεράσματα Σύγκριση Ομογενών Συστημάτων Σύγκριση Ετερογενών Συστημάτων με βελτιστοποιημένες Cache Σύγκριση Ετερογενών Συστημάτων με βελτιστοποιημένες Cache και επεκτάσεις ΤΙΕ Ενεργειακη αποδοση ομογενων και ετερογενων συστηματων Σύγκριση Γινομένου «Ενέργεια επί Κύκλων» των Συστημάτων ΠΑΡΑΡΤΗΜΑ Α Κώδικας προγράμματος DES.c ΠΑΡΑΡΤΗΜΑ Β Αναφορές Προσομοίωσης XTMP Αρχιτεκτονικη Σωληνωσης με δυο ομογενεις Επεξεργαστές Αρχιτεκτονικη Σωληνωσης με δυο ετερογενεις Επεξεργαστές Αρχιτεκτονικη Παραλληλης Συνδεσης με Τρεις Ομογενεις Επεξεργαστές Αρχιτεκτονικη Παραλληλης Συνδεσης με Τρεις Ετερογενεις Επεξεργαστές Αρχιτεκτονικη Παραλληλης Συνδεσης με Πεντε Ομογενεις Επεξεργαστές Αρχιτεκτονικη Παραλληλης Συνδεσης με Πεντε Ετερογενεις Επεξεργαστές Αρχιτεκτονική Παραλληλων Σωληνωσεων με Πεντε Ομογενεις Επεξεργαστές Αρχιτεκτονική Παραλληλων Σωληνωσεων με Πεντε ετερογενεις Επεξεργαστές

5 Ευρετήριο Διαγραμμάτων Διάγραμμα 1: Η εξέλιξη των MIPS με το πέρασμα των χρόνων Διάγραμμα 2:Διάγραμμα στοιχείων ενός σύγχρονου βολτόμετρου Διάγραμμα 3: Εξέλιξη της συχνότητας ρολογιού με τον χρόνο Διάγραμμα 4: Γενική αρχιτεκτονική ενός SOC Διάγραμμα 5: Αρχιτεκτονική του chip OMAP Διάγραμμα 6: Χώρος Διερεύνηση επεξεργαστών Xtensa... 3 Διάγραμμα 7: Η αρχιτεκτονική του Xtensa LX Διάγραμμα 8: Γενική δομή αλγόριθμου DES Διάγραμμα 9: Δομή πράξης-f του αλγόριθμου DES Διάγραμμα 1: Το πρόγραμμα κλειδιών του αλγόριθμου DES... 4 Διάγραμμα 11: Αρχιτεκτονική Σωλήνωσης με δυο πυρήνες Διάγραμμα 12: Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Διάγραμμα 13: αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές Διάγραμμα 14: Αρχιτεκτονική Παράλληλων Σωληνώσεων με Πέντε Επεξεργαστές Διάγραμμα 15: Απόδοση αρχικού επεξεργαστή Διάγραμμα 16: Διερεύνηση Cache Εντολών με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 17:Διερεύνηση Cache Εντολών με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 18:Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 19: Διερεύνηση Cache Εντολών με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 2:Διερεύνηση Cache Εντολών με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 21:Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 22:Διερεύνηση Cache Εντολών με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 23: Διερεύνηση Cache Εντολών με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 24: Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 25: Σύγκριση Cache εντολών με καλύτερες επιδόσεις Διάγραμμα 26: Διερεύνηση Cache Δεδομένων με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 27: Διερεύνηση Cache Δεδομένων με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 28:Διερεύνηση Cache Δεδομένων με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 29: Διερεύνηση Cache Δεδομένων με απευθείας συσχετισμό και μέγεθος γραμμής 32bit... 6 Διάγραμμα 3: Διερεύνηση Cache Δεδομένων με διπλό συσχετισμό και μέγεθος γραμμής 32bit

6 Διάγραμμα 31: Διερεύνηση Cache Δεδομένων με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit... 6 Διάγραμμα 32: Διερεύνηση Cache Δεδομένων με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 33: Διερεύνηση Cache Δεδομένων με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 34: Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 35: Σύγκριση Cache δεδομένων με καλύτερες επιδόσεις Διάγραμμα 36: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή Διάγραμμα 37: Διερεύνηση για TIEs Διάγραμμα 38:Απόδοση Βελτιωμένου κατά Cache επεξεργαστή με προσθήκες TIE Διάγραμμα 39: Αρχιτεκτονική Σωλήνωσης με δυο πυρήνες Διάγραμμα 4: Διερεύνηση Cache Εντολών "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 41:Διερεύνηση Cache Εντολών "Producer"με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 42:Διερεύνηση Cache Εντολών "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 43:Διερεύνηση Cache Εντολών "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit... 8 Διάγραμμα 44:Διερεύνηση Cache Εντολών "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 32 bit... 8 Διάγραμμα 45:Διερεύνηση Cache Εντολών "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 64 bit... 8 Διάγραμμα 46:Διερεύνηση Cache Εντολών "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 47: Διερεύνηση Cache Εντολών "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 48: Διερεύνηση Cache Εντολών "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 49: σύγκριση Cache Εντολών "Producer" με καλύτερες επιδόσεις Διάγραμμα 5: Διερεύνηση Cache Δεδομένων "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 51: Διερεύνηση Cache Δεδομένων "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 52: Διερεύνηση Cache Δεδομένων "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 53: Διερεύνηση Cache Δεδομένων "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 54: Διερεύνηση Cache Δεδομένων "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 55: Διερεύνηση Cache Δεδομένων "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 56: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit

7 Διάγραμμα 57: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 58: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 59: Σύγκριση Cache δεδομένων "Producer" με καλύτερες επιδόσεις Διάγραμμα 6: Σύγκριση απόδοσης αρχικού επεξεργαστή και βελτιστοποιημένου Διάγραμμα 61: Διερεύνηση για TIEs στον επεξεργαστή "Producer" Διάγραμμα 62: Σύγκριση απόδοσης με και χωρίς προσθήκες TIE στον "Producer" Διάγραμμα 63: Διερεύνηση Cache Εντολών " Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit... 9 Διάγραμμα 64: Διερεύνηση Cache Εντολών " Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit... 9 Διάγραμμα 65: : Διερεύνηση Cache Εντολών " Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 66: Διερεύνηση Cache Εντολών " Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 67: Διερεύνηση Cache Εντολών " Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 68: Διερεύνηση Cache Εντολών " Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 69: Διερεύνηση Cache Εντολών " Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 7: Διερεύνηση Cache Εντολών " Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 71: Διερεύνηση Cache Εντολών " Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 72: Σύγκριση Cache εντολών "Consumer" με καλύτερες επιδόσεις Διάγραμμα 73: Διερεύνηση Cache Δεδομένων "Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 74: : Διερεύνηση Cache Δεδομένων "Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 75:Διερεύνηση Cache Δεδομένων "Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 76: Διερεύνηση Cache Δεδομένων "Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 77: Διερεύνηση Cache Δεδομένων "Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 78: Διερεύνηση Cache Δεδομένων "Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 79: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 8: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 81: Διάγραμμα 75: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 82: Σύγκριση Cache δεδομένων "Consumer" με καλύτερες επιδόσεις

8 Διάγραμμα 83: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή "consumer" Διάγραμμα 84: Διερεύνηση για TIEs στον επεξεργαστή "consumer"... 1 Διάγραμμα 85: Σύγκριση απόδοσης Consumer με και χωρίς TIEs Διάγραμμα 86: Σύγκριση απόδοσης μέσω XTMP ομογενούς και ετερογενούς συστήματος Διάγραμμα 87: Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Διάγραμμα 88: Διερεύνηση Cache Εντολών "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 89: Διερεύνηση Cache Εντολών "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 9: Διερεύνηση Cache Εντολών "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 91: Διερεύνηση Cache Εντολών "Master" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 92: Διερεύνηση Cache Εντολών "Master" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 93: Διερεύνηση Cache Εντολών "Master" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 94: Διερεύνηση Cache Εντολών "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 95: Διερεύνηση Cache Εντολών "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 96: Διερεύνηση Cache Εντολών "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 97: Σύγκριση Cache δεδομένων "Master" με καλύτερες επιδόσεις Διάγραμμα 98: Διερεύνηση Cache Δεδομένων "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 99: Διερεύνηση Cache Δεδομένων "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 1: Διερεύνηση Cache Δεδομένων "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 11: Διερεύνηση Cache Δεδομένων "Master" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 12: Διερεύνηση Cache Δεδομένων "Master" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 13: Διερεύνηση Cache Δεδομένων "Master" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 14: Διερεύνηση Cache Δεδομένων "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 15: Διερεύνηση Cache Δεδομένων "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 16: Διερεύνηση Cache Δεδομένων "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 17: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή "Master"

9 Διάγραμμα 18: Διερεύνηση για TIEs στον επεξεργαστή Master Διάγραμμα 19: Διερεύνηση Cache Εντολών Slave με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 11: Διερεύνηση Cache Εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 111: Διερεύνηση Cache Εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 112: Διερεύνηση Cache Εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 113: Διερεύνηση Cache Εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 114: Διερεύνηση Cache Εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 115: Διερεύνηση Cache Εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Διάγραμμα 116:Διερεύνηση Cache Εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 117: Διερεύνηση Cache Εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 118: Σύγκριση Cache Εντολών "Slave" με καλύτερες επιδόσεις Διάγραμμα 119: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 12: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 121: : Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 122: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 123: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Διάγραμμα 124: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Διάγραμμα 125: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 126: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 127: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 128: Σύγκριση Cache δεδομένων "Slave" με καλύτερες επιδόσεις Διάγραμμα 129: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή "Slave" Διάγραμμα 13: Διερεύνηση για TIEs στον επεξεργαστή "Slave" Διάγραμμα 131: Σύγκριση απόδοσης "Slave" με και χωρίς επεκτάσεις TIEs Διάγραμμα 132: αρχιτεκτονική Παραλληλης Συνδεσης με Πέντε Επεξεργαστές Διάγραμμα 133: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit

10 Διάγραμμα 134: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 135: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 136: Διερεύνηση Cache εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 137: Διερεύνηση Cache εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 138: Διερεύνηση Cache εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 139: Διερεύνηση Cache εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 14: Διερεύνηση Cache εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 141: Διερεύνηση Cache εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 142: Σύγκριση Cache εντολών "Slave" με καλύτερες επιδόσεις Διάγραμμα 143: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 144: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 145: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 146: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 147: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 148: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 149: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Διάγραμμα 15: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Διάγραμμα 151: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Διάγραμμα 152: Σύγκριση Cache δεδομένων "Slave" με καλύτερες επιδόσεις Διάγραμμα 153: Αρχιτεκτονική Παραλληλων Σωληνωσεων με Πεντε Επεξεργαστές.. 18 Διάγραμμα 154: Διερεύνηση Cache Εντολων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 155: Διερεύνηση Cache Εντολων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 156: Διερεύνηση Cache Εντολων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 157: Διερεύνηση Cache Εντολων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit

11 Διάγραμμα 158: Διερεύνηση Cache Εντολων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 159: Διερεύνηση Cache Εντολων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 16: Διερεύνηση Cache Εντολων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 161: Διερεύνηση Cache Εντολων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 162: Διερεύνηση Cache Εντολων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 163: Συγκριση Cache Εντολων "Slave1" με καλύτερες επιδόσεις Διάγραμμα 164: Διερεύνηση Cache Δεδομενων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 165: Διερεύνηση Cache Δεδομενων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 166: Διερεύνηση Cache Δεδομενων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 167: Διερεύνηση Cache Δεδομενων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 168: Διερεύνηση Cache Δεδομενων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 169: Διερεύνηση Cache Δεδομενων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 17: Διερεύνηση Cache Δεδομενων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 171: Διερεύνηση Cache Δεδομενων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 172: Διερεύνηση Cache Δεδομενων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 173: Συγκριση Cache δεδομενων "Slave1" με καλύτερες επιδόσεις... 2 Διάγραμμα 174: Διερευνηση για TIEs στον "Slave1" Διάγραμμα 175: Συγκριση αποδοσης Slave1 με και χωρις TIEs Διάγραμμα 176: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 177: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 178: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 179: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 18: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 181: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 182: Διερεύνηση Cache Εντολών "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit

12 Διάγραμμα 183: Διερεύνηση Cache Εντολών "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 184: Διερεύνηση Cache Εντολών "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 185: Συγκριση Cache Εντολων "Slave3" με καλύτερες επιδόσεις Διάγραμμα 186: Διερεύνηση Cache Δεδομένων "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 187: Διερεύνηση Cache Δεδομένων "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 188: Διερεύνηση Cache Δεδομένων "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 189: Διερεύνηση Cache Δεδομένων "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 19: Διερεύνηση Cache Δεδομένων "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 191: Διερεύνηση Cache Δεδομένων "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 192: Διερεύνηση Cache Δεδομένων "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit Διάγραμμα 193: Διερεύνηση Cache Δεδομένων "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Διάγραμμα 194: Διερεύνηση Cache Δεδομένων "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit Διάγραμμα 195: Συγκριση Cache Δεδομενων "Slave3" με καλύτερες επιδόσεις Διάγραμμα 196: Διερευνηση για TIEs στον Slave Διάγραμμα 197: Συγκριση Αποδοσης Slave3 με και χωρις TIEs Διάγραμμα 198: Σύγκριση Ομογενών Αρχιτεκτονικών Διάγραμμα 199: Σύγκριση Ετερογενων Αρχιτεκτονικών

13 Περίληψη Στις αρχές του 21 ου αιώνα, βλέπουμε πλέον όλο και συχνότερα να δημιουργούνται υπολογιστικά συστήματα, με περισσότερους από έναν επεξεργαστές. Η βιομηχανία ολοκληρωμένων κυκλωμάτων αγκομαχά για να «προλάβει» τον νόμο του Moore, οι νέοι επεξεργαστές παράγουν θερμότητα που καθιστά αναγκαία εξειδικευμένα συστήματα ψύξης και σιγά σιγά, φαίνεται ότι το μοντέλο του υπερταχυ και μόνου επεξεργαστή δίνει την θέση του στο μοντέλο των πολλών επεξεργαστών που μοιράζονται το φόρτο εργασίας και αποδίδουν καλύτερα. Επιπλέον, αναπτύσσεται και μια νέα ομάδα συστηματων, αυτά με επεξεργαστές εξειδικευμένους για μια εφαρμογή. Πρόκειται για μια παραλλαγή των ASIC κυκλωμάτων, τα λεγόμενα ASIP (Application Specific Integrated Processors). Οι επεξεργαστές αυτοί, βελτιστοποιούνται για μια συγκεκριμένη εφαρμογή, έχοντας ωστόσο τις δυνατότητες να σηκώσουν και άλλες εφαρμογές. Καθιστωνται έτσι ιδιαίτερα ενδιαφέρουσες προτάσεις για μια πληθώρα εφαρμογών. Στην παρούσα εργασία, ασχοληθήκαμε με την υλοποίηση και σύγκριση πολύεπεξεργαστικών συστημάτων, προσαρμοσμένων για την κρυπτογράφηση δεδομένων με τον αλγόριθμο DES. Αναλύεται η απόδοση ενός μόνο-επεξεργαστικού συστήματος στην συγκεκριμένη εφαρμογή και συγκρίνεται με αρχιτεκτονικές που περιλαμβάνουν από δυο εως πέντε επεξεργαστές, σε διάφορες συνδεσμολογίες. Η προσαρμογή των επεξεργαστών γίνεται είτε επιλέγοντας συγκεκριμένες cache εντολών ή cache δεδομένων έτσι ώστε να ελαχιστοποιούνται οι αστοχίες, είτε επεκτείνοντας το σετ εντολών του επεξεργαστή, ώστε συγκεκριμένες εντολές να βελτιώνουν την απόδοση του επεξεργαστή σε εφαρμογές κρυπτογράφησης με τον αλγόριθμο DES. Προκειμένου να γίνουν όλα τα παραπάνω χρησιμοποιήθηκαν μοντέλα των επεξεργαστών Xtensa LX2, της Tensilica, μια γενιά επεξεργαστών με μεγάλες δυνατότητες παραμετροποίησης. Επιπλέον χρησιμοποιήθηκε το περιβάλλον Xtensa Xplorer της Tensilica, το οποίο επιτρέπει εύκολα την μέτρηση της απόδοσης των επεξεργαστών LX2 καθώς και την παραμετροποίηση τους με βάση κάποια συγκεκριμένη εφαρμογή. Στην παρούσα εργασία, η εφαρμογή αυτή ήταν το πρόγραμμα προσομοίωσης της διαδικασίας κρυπτογράφησης με τον αλγόριθμο DES, της σουίτας προγραμμάτων Powerstone. 13

14 Έχουν περάσει 5 χρόνια από την δημιουργία του πρώτου λειτουργικού ολοκληρωμένου κυκλώματος, τον Σεπτέμβριο του Η τεχνολογία των ολοκληρωμένων κυκλωμάτων, έδωσε μεγάλη ώθηση στα ηλεκτρονικά, και ήταν η βάση στο να σχεδιαστούν πολυπλοκοτερα συστήματα, με περισσότερα τρανζίστορ, διαφορετικές αρχιτεκτονικές και πολλαπλάσιες ικανότητες. Η εξέλιξη αυτή σε συνδυασμό με τον νόμο του Moore, οδήγησε τελικά στην δημιουργία ASIC κυκλωμάτων (Application Specific Integrated Circuits), στην δημιουργία του επεξεργαστή και αργότερα, την δεκαετία του 199, στην δημιουργία SOC (System-On-Chip) συστημάτων. H εξέλιξη των υπολογιστικών συστημάτων στο δεύτερο μισό του 2ου αιώνα στηρίχτηκε κυρίως σε δυο βάσεις: Στην πρόβλεψη του Moore ότι ο αριθμός των τρανζίστορ που χωράνε σε ένα ολοκληρωμένο κύκλωμα θα διπλασιάζεται κάθε 18 μήνες (τα τελευταία χρόνια, ο ρυθμός έχει μειωθεί στους 24) Σε δυο συνέπειες των τεχνικών λιθογραφίας που χρησιμοποιείτο μέχρι σήμερα: κάθε νέα βελτίωση των τεχνικών δημιουργίας ολοκληρωμένων κυκλωμάτων, οδηγούσε σε τρανζίστορ που λειτουργούσαν σε μεγαλύτερες συχνότητες και είχαν μικρότερες απαιτήσεις στον τομέα της τροφοδοσίας. Τα παραπάνω είχαν σαν συνέπεια η υπολογιστική ισχύς των υπολογιστικών συστημάτων να ακολουθεί εκθετική άνοδο, όπως φαίνεται και στο παρακάτω διάγραμμα. Διάγραμμα 1: Η εξέλιξη των MIPS με το πέρασμα των χρόνων 14

15 Ωστόσο, όταν η τεχνολογία έφτασε τα 13nm, περίπου στην αρχή του 21ου αιώνα, άρχισε να γίνεται ορατό ότι αυτή η εξέλιξη δεν μπορούσε να συνεχιστεί με τους ίδιους ρυθμούς. Πλέον δεν παρατηρούνται τα άλματα στην ταχύτητα ρολογιού που παρατηρούνταν στο παρελθον. Η εκροή ενέργειας στα 65nm και σε νεότερες τεχνολογίες φτάνει σε μεγάλες τιμές και η μέγιστη συχνότητα λειτουργίας των υπολογιστών αυξάνει μεν αλλά με πολύ αργούς ρυθμούς, ειδικά αν τη συγκρίνουμε με το παρελθόν. Για να επιλυθούν τα προβλήματα αυτά πρέπει να ακολουθηθεί μια διαφορετική πορεία σχεδιασμού ενός συστήματος, που να λαμβάνει υπόψη του τα προβλήματα που δημιουργούνται στις υψηλές συχνότητες, το μικρό μέγεθος των τρανζίστορ στο οποίο έχουμε φτάσει καθώς και τις ενεργειακές παραμέτρους. Μια λύση είναι να αντικαταστήσουμε τον επεξεργαστή που τρέχει σε υψηλή συχνότητα με δυο ή και περισσότερους επεξεργαστές που τρέχουν σε χαμηλότερες συχνότητες. ετσι, μοιράζονται το φόρτο εργασίας δυο επεξεργαστές, η κατανάλωση είναι πολύ μικρότερη (αυτό είναι εμφανές εάν λάβουμε υπόψη μας ότι η κατανάλωση είναι ανάλογη του τετράγωνου της συχνότητας), αλλά αυξάνεται ο χώρος που απαιτείται. Αυτή η λογική παλαιότερα ήταν απαγορευτική, καθώς το μέγεθος των τρανζίστορ έκανε τον χώρο να είναι πολύ σημαντική παράμετρος. Καθώς όμως το μέγεθος των τρανζίστορ μικραίνει, η σημασία του χώρου που καταλαμβάνει το σύστημα μας μειώνεται. Επομένως αυτό που πρέπει να καταφέρουμε, είναι να βάλουμε στην θέση του ενεργοβορου και γρήγορου επεξεργαστή, άλλους μικρότερους και πιο συμφέροντες. Εάν έχουμε επιπλέον και βελτίωση στους κύκλους που απαιτείται για να ολοκληρωθεί μια εφαρμογή, τότε μπορούμε να πούμε ότι βελτιώσαμε συνολικά το σύστημα μας (εξαιρώντας τον παράγοντα του χώρου βέβαια). Αυτό προσπαθήσαμε να κάνουμε στην παρούσα εργασία. Χρησιμοποιώντας σαν μέτρο σύγκρισης το benchmark του αλγόριθμου DES από την σουίτα Powerstone, μελετήσαμε τις αποδόσεις που έχουν συστήματα με ένα επεξεργαστή συγκρινόμενα με συστήματα που περιέχουν δυο ή και περισσότερους επεξεργαστές. Για να γίνει αυτό, χρησιμοποιήσαμε τους επεξεργαστές LX2 της Tensilica, οι οποίοι είναι παραμετροποιησιμοι μέσω της σουίτας Xtensa Xplorer. Μέσα από το περιβάλλον εργασίας, μοντελοποιήθηκαν συστήματα με τους επεξεργαστές σε pipeline σύνδεση, σε παράλληλη σύνδεση καθώς και συνδυασμός των παραπάνω, δηλαδή παράλληλων pipeline συνδέσεων. 15

16 Κεφάλαιο 1 Μια εισαγωγή στα συστήματα-σε-chip Τα συστηματα-σε-ενα-chip (System-On-Chip, από εδώ και πέρα SOC), είναι εξ ορισμού ηλεκτρονικά συστήματα κατασκευασμένα σε ένα και μόνο ολοκληρωμένο κύκλωμα. Μπορεί να περιέχουν αναλογικά κυκλώματα, ψηφιακά κυκλώματα ή και συνδυασμό τους, στοιχεία μνήμης και ταλαντωτές αλλά επίσης εξ ορισμού περιλαμβάνουν τουλάχιστον ένα μικροεπεξεργαστή. Σε νεότερα συστήματα παρατηρείται το φαινόμενο να υπάρχουν και περισσότεροι από ένας επεξεργαστές. Ο σχεδιασμός πολύεπεξεργαστικών SOC είναι πολύπλοκος, αλλά για να αντιληφθούμε το επίπεδο της πολυπλοκότητας πρέπει να καταλάβουμε την εξέλιξη στο σχεδιασμό συστημάτων στα χρόνια που πέρασαν. Η αρχή Η αρχή των ολοκληρωμένων κυκλωμάτων τοποθετείται το 1958 στα εργαστήρια της Texas Instruments. Ο Jack Kilby, παρουσίασε το Σεπτέμβριο του 1958 το πρώτο λειτουργικό ολοκληρωμένο κύκλωμα, μια γεννήτρια ημιτονικου παλμού. Από εκεί και μετά η εξέλιξη ήταν ραγδαία. Καθώς το μέγεθος των τρανζίστορ μειωνόταν, οι σχεδιαστές συνδύαζαν όλο και περισσότερα κυκλώματα, αναλογικά ή ψηφιακά. Στην αρχή ωστόσο τα κυκλώματα αυτά ήταν συνδεμένα μεταξύ τους με αποκλειστικό τρόπο ( hard-wired ). To hardware μέχρι εκείνη την στιγμή κατασκευαζόταν για ένα συγκεκριμένο σκοπό και μπορούσε να επιτελέσει μόνο αυτό τον σκοπό. Όλα αυτά άλλαξαν τον Νοέμβριο του 1971, όταν η Ιntel έβγαλε στην αγορά τον πρώτο εμπορικό μικροεπεξεργαστή, τον

17 Εικόνα 1: ο πρώτος μικροεπεξεργαστής, Intel 44 Πλέον αυτός ήταν ο εγκέφαλος του συστήματος, αυτός όριζε την σειρά λειτουργίας και το πως επικοινωνούσαν μεταξύ τους τα ξεχωριστά μέρη (blocks) του ολοκληρωμένου κυκλώματος. Μια βασική αλλαγή που έφερε ο 44 ήταν η εισαγωγή της έννοιας του firmware. Πλέον δεν αρκούσε, ο σχεδιαστής του κυκλώματος να γνωρίζει πως να σχεδιάζει αναλογικά ή ψηφιακά κυκλώματα αλλά έπρεπε να είχε αρκετές προγραμματιστικές ικανότητες (στην αρχή σε assembly και στη συνέχεια σε γλώσσες προγραμματισμού υψηλότερου επιπέδου) ώστε να μπορεί να προγραμματίσει τον επεξεργαστή, ώστε να κάνει αυτό που θέλει. Μια άλλη βασική αλλαγή που έφερε η εισαγωγή του μικροεπεξεργαστή στα συστήματα, ήταν οι δίαυλοι δεδομένων (data bus). Ενώ πριν τα μέρη ενός συστήματος ήταν συνδεμένα με έναν αποκλειστικό τρόπο και επικοινωνούσαν μόνο με συγκεκριμένα αλλά στοιχεία, πλέον χρησιμοποιούταν ένας δίαυλος, στον οποίο ήταν συνδεμένα όλα τα στοιχεία και ο επεξεργαστής. Χαρακτηριστικό είναι το διάγραμμα στοιχείων ενός τυπικού βολτόμετρου που φαίνεται στο σχήμα 1. 17

18 Διάγραμμα 2:Διάγραμμα στοιχείων ενός σύγχρονου βολτόμετρου Οπως βλέπουμε παραπάνω όλα τα στοιχεία επικοινωνούν μεταξύ τους μόνο μέσω του διαύλου. Αυτό έχει ένα σημαντικό μειονέκτημα. Καθώς υπάρχει μόνο ένας δίαυλος μεταφοράς δεδομένων, η χρήση του μπορεί να γίνει μόνο από δυο στοιχεία ανά πάσα στιγμή, οδηγώντας ετσι σε μια μέθοδο λειτουργίας αυστηρά σειριακή. Για παράδειγμα εάν ο μικροεπεξεργαστής χρειάζεται να ολοκληρώσει μια λειτουργία που απαιτεί να διαβάσει δεδομένα από την RAM ή την ROM και να τα συνδυάσει με δεδομένα που παίρνει από τον A/D μετατροπέα, δεν μπορεί να χρησιμοποιεί ταυτόχρονα τον δίαυλο για να κάνει και τα δυο. Πρέπει είτε πρώτα να ζητήσει τα δεδομένα από τον μετατροπέα και στη συνέχεια αφού τα αποθηκεύσει σε ένα εσωτερικό καταχωρητη, να ζητήσει τα δεδομένα από την RAM. Έπειτα μπορεί να εκτελέσει την απαραίτητη πράξη. Πριν την έλευση του μικροεπεξεργαστή, όπου τα στοιχεία ήταν συνδεμένα με ένα συγκεκριμένο τρόπο, το κύκλωμα που έκανε την πράξη που θέλαμε θα μπορούσε να είχε στην μια είσοδο την έξοδο του μετατροπέα και στην άλλη την έξοδο ενός στοιχείου μνήμης και να διαβάζει παράλληλα και από τις δυο. Η δυνατότητα αυτή χάθηκε με την έλευση του διαύλου (αν και όπως θα δούμε αργότερα, με την προσθήκη περισσότερου του ενός διαύλου αργότερα, εξασφαλίστηκε ένας βαθμός παράλληλης λειτουργίας). Το να μοιράζεται ο δίαυλος σε όλα τα ξεχωριστά στοιχεία του ολοκληρωμένου οδήγησε στη ανάγκη πολυπλεξίας στο χρόνο του διαύλου. Δηλαδή για ένα συγκεκριμένο κομμάτι 18

19 χρόνου ο δίαυλος χρησιμοποιείται για να επικοινωνεί ο μικροεπεξεργαστής με ένα στοιχείο, στο επόμενο κομμάτι χρόνου ο δίαυλος χρησιμοποιείται για να επικοινωνεί ο μικροεπεξεργαστής με ένα άλλο στοιχείο κλπ. αυτό είχε σαν συνέπεια να επιζητούνται όλο και μεγαλύτερες συχνότητες ρολογιού, ετσι ώστε να τα κομμάτια χρόνου που αναφέρθηκαν παραπάνω να είναι αρκετά μικρά ώστε να προλαβαίνουν να εξυπηρετηθούν όλα τα μέρη του κυκλώματος. Καθώς όμως η πολυπλοκότητα του συστήματος αυξάνεται, αυξάνεται και το πλήθος των δεδομένων που πρέπει να μεταφέρονται μέσω του διαύλου. Ο 44 είχε ένα δίαυλο με εύρος 4 bit που σημαίνει ότι για να μεταφέρει μια λέξη των 12 bit χρειαζόταν τρεις κύκλους ρολογιού. Με συχνότητα ρολογιού στα 74kHz και μεταφορές δεδομένων μέσω του διαύλου που χρειαζόντουσαν πολλούς κύκλους, ο 44 ήταν πολύ αργός για αρκετές λειτουργίες και ως εκ τούτου αγνοήθηκε από μεγάλο μέρος της ηλεκτρονικής κοινότητας. Ο δεύτερος μικροεπεξεργαστής του κόσμου, ο 88 της Intel δεν ήταν και πολύ καλύτερος στο θέμα του διαύλου, παρόλο που είχε διπλάσιο σε σχέση με τον προκάτοχο του, 8 bit. Με συχνότητα ρολογιού από 5 έως 8kHz, πάλι υπέφερε από τα ίδια προβλήματα με τον 44. Με την τρίτη προσπάθεια της στους μικροεπεξεργαστές, η Intel έφερε μια θεμελιώδη αλλαγή στα ηλεκτρονικά συστήματα. Ο 88 με συχνότητα ρολογιού στα 2ΜHz και με δυο ξεχωριστούς διαύλους, έναν για δεδομένα εύρους 8 bit και έναν για εντολές εύρους 16bit είχε επιτέλους το απαραίτητο bandwidth και υπολογιστική ικανότητα ώστε να κάνει την διαφορά. Περάσαμε ετσι σε μια νέα εποχή, όπου ο σχεδιασμός των συστημάτων είχε τον επεξεργαστή σαν κεντρικό σημείο. Ωστόσο οι επεξεργαστές δεν είχαν φτάσει ακόμα στο επίπεδο ώστε να είναι οι πανάκεια για κάθε κύκλωμα. Τα ASIC κυκλώματα, χωρίς επεξεργαστές ήταν πιο γρήγορα και πιο μικρά. Το μόνο μειονέκτημα ήταν ο χρόνος σχεδιασμού τους και το περιορισμένο εύρος εφαρμογών ενός ASIC. Μέχρι το 199 ελάχιστα ASIC κυκλώματα περιλάμβαναν έστω και έναν επεξεργαστή. Καθώς όμως οι επεξεργαστές μίκρυναν και έγιναν ισχυρότεροι, όλο και περισσότερα κατέληξαν να τους υιοθετούν. Το 1995, οι μικροεπεξεργαστές με RISC αρχιτεκτονική είχαν αρχίσει να προσφέρουν μια συμφέρουσα λύση στους σχεδιαστές, λόγω του συγκριτικά μικρού αριθμού πυλών που είχαν. Σταδιακά όλο και περισσότερα ASIC άρχισαν να τους ενσωματώνουν με αποτέλεσμα στις αρχές του 21ου αιώνα κάθε ASIC να ενσωματώνει τουλάχιστον ένα επεξεργαστή και να γεννηθεί ετσι μια νέα κατηγόρια συστημάτων, τα SOC Τα πλεονεκτήματα του μικροεπεξεργαστή. Ο μικροεπεξεργαστής (ειδικά από τον 88 και μετά ) σαν δομικό στοιχείο έχει διάφορα σημαντικά πλεονεκτήματα, που οδήγησαν στην υιοθέτηση του για μεγάλο πλήθος εφαρμογών. Ένα από αυτά είναι ότι αποτελεί ένα οικονομικό πακέτο με ενσωματωμένα χιλιάδες τρανζίστορ το οποίο παράγεται σε συγκεκριμένη και ελεγχόμενη μορφή. Καθώς η βιομηχανία των ολοκληρωμένων κυκλωμάτων αναπτύχθηκε, οι μικροεπεξεργαστές 19

20 έγιναν φτηνοί, καταλήγοντας να κοστίζουν ακόμα και λιγότερο από 1 ευρώ ανά chip με ικανότητες συγκριτικά εντυπωσιακές. Το πιο σημαντικό όμως χαρακτηριστικό ενός μικροεπεξεργαστή προκύπτει εύκολα αν σκεφτεί κανείς ότι το υλικό (hardware) είναι πολύ πιο δύσκολο να αλλαχτεί από το λογισμικό (software). Σε ένα ASIC που το hardware του μπορεί να επιτελέσει μια συγκεκριμένη λειτουργία, για να γίνει κάποια αλλαγή στην λειτουργία αυτή πρέπει να επανασχεδιαστεί το κύκλωμα από την αρχή, να ελεγχθεί η απόδοση του κυκλώματος, να σχεδιαστεί η πλακέτα όπου θα ενσωματωθεί και μετά να ελεγχθεί η συνολική απόδοση. Και αυτό κάθε φορά που θέλουμε να κάνουμε μια μικρή αλλαγή. Αντιθέτως στον μικροεπεξεργαστή το μόνο που χρειάζεται είναι να γράψουμε νέο firmware, να γίνει compile και να μεταφερθεί στον μικροεπεξεργαστή. Επιπλέον ο σχεδιαστής ενός συστήματος βασισμένου σε μικροεπεξεργαστές μπορεί να σχεδιάσει το σύστημα, χωρίς να έχει αναλυτικές λεπτομέρειες για τη τελική λειτουργία του κυκλώματος. Η διαδικασία της σχεδίασης μπορεί να ξεκινήσει παράλληλα με την διαδικασία καθορισμού της λειτουργίας και εφόσον γίνει σωστά η πρώτη, μπορεί με μικρές αλλαγές να προσαρμόσει την λειτουργία στην επιθυμητή. Η ανάγκη για βελτίωση Με την ευρεία αποδοχή που έλαβε ο 88, και τις πολλές εφαρμογές οι οποίες υπήρχαν για μικροεπεξεργαστές, υπήρχε συνεχής πίεση στους σχεδιαστές να κατασκευαστούν συστήματα με μεγαλύτερες αποδόσεις. Προκείμενου να γίνει αυτό ακολουθήθηκαν διάφορες τεχνικές, ωστόσο τρεις ήταν αυτές με την μεγαλύτερη αποδοχή. Η πρώτη μέθοδος, ήταν να αυξηθεί η συχνότητα του ρολογιού του επεξεργαστή. Οι κατασκευαστές παρήγαγαν επεξεργαστές με όλο και μεγαλύτερη συχνότητα ρολογιού, παρόλο που σε διαφορετικές αρχιτεκτονικές αυτό δεν επαρκεί σαν μέτρο σύγκρισης. Στο σχήμα 2 βλέπουμε την εξέλιξη της συχνότητας του ρολογιού στους επεξεργαστές από το 1971 έως και το 25. είναι χαρακτηριστικό ότι η Intel χρειάστηκε τέσσερα χρόνια για να φτάσει από τα 2MHz του 88 στα 1MHz του 886, ενώ σε αλλά τέσσερα χρόνια, από το 1993 μέχρι το 1997, πήγε από τα 33ΜHz του i486dx-s στα 2ΜΗz του Pentium Pro. Αναφέρουμε σαν παράδειγμα συμβατές αρχιτεκτονικές της Intel, ωστόσο όπως φαίνεται και στο διάγραμμα, υπήρχε ανάλογη εξέλιξη και σε επεξεργαστές άλλων εταιρειών. 2

21 Διάγραμμα 3: Εξέλιξη της συχνότητας ρολογιού με τον χρόνο Η δεύτερη μέθοδος ήταν να μεγαλώσουν τα μεγέθη των λέξεων δεδομένων καθώς και των διαύλων που τα μεταφέρουν. εύκολα μπορούμε να αντιληφθούμε ότι εάν μεταφέρονται περισσότερα δεδομένα σε ένα παλμό ρολογιού, τότε θα χρειάζονται λιγότεροι παλμοί συνολικά για όλα τα δεδομένα και ως εκ τούτου, η λειτουργία θα ολοκληρωθεί γρηγορότερα. Ένα παράδειγμα αυτής της τεχνικής βελτίωσης είναι ότι ενώ ο 16-bit 886 της Intel είχε δίαυλο δεδομένων εύρους 16bit, ο 32-bit 8386 είχε τον διπλάσιο. Η τρίτη μέθοδος για να βελτιωθούν οι αποδόσεις ήταν να προστεθούν περισσότεροι δίαυλοι. Για παράδειγμα, οι σχεδιαστές του Pentium II εκτός από τον παραδοσιακό δίαυλο, προσέθεσαν και ένα δεύτερο υψηλής ταχύτητας που συνέδεε τον επεξεργαστή με την Cache. Ο επεξεργαστής μπορούσε να επικοινωνεί παράλληλα με τον δίαυλο υψηλής ταχύτητας και με τον δίαυλο που συνέδεε τα υπόλοιπα στοιχεία με τον επεξεργαστή. Οι τρεις αυτές βελτιώσεις οδήγησαν στην αύξηση της υπολογιστικής ικανότητας των επεξεργαστών, όπως φαίνεται στο σχήμα (μετρημένα σε εκατομμύρια εντολές ανά δευτερόλεπτο, Millions Instructions Per Second, MIPS) 21

22 Εικόνα 2: Αύξηση των MIPS σε κάθε γενιά Μικροεπεξεργαστή Το τίμημα της βελτίωσης Μεγαλύτερες συχνότητες ρολογιού, συνδυασμένες με περισσότερους και μεγαλύτερους διαύλους όπως είδαμε βελτιώνουν την απόδοση του συστήματος, αλλά υπάρχει ένα τίμημα. Η ενέργεια που εκλύεται σαν θερμότητα. Η θερμότητα που εκλύεται είναι ανάλογη του τετράγωνου της συχνότητας του ρολογιού του επεξεργαστή, οπότε όπως καταλαβαίνουμε η ενέργεια αυξάνεται εκθετικά εδώ και 35 χρόνια. επιπλέον το μέγεθος των μικροεπεξεργαστών μειώνεται σταθερά τα τελευταία χρόνια και η πυκνότητα των στοιχείων τους αυξάνεται σαν αποτέλεσμα του νόμου του Moore. Συνέπεια όλων των παραπάνω είναι να έχουμε πλέον σχεδόν φτάσει στα όρια εκλυόμενης θερμότητας που μπορούμε να απάγουμε από τον επεξεργαστή. είναι χαρακτηριστικό ότι ενώ ο πρώτος μικροεπεξεργαστής το 1971 δεν χρειαζόταν κάποιο σύστημα ψύξης από τότε η εξέλιξη των συστημάτων ψύξης ακολούθησε την εξής πορεία: σχεδιασμός του συστήματος ετσι ώστε οι πηγές θερμότητας να έχουν όσο το δυνατόν μεγαλύτερες αποστάσεις χρήση ανεμιστήρων για ροή αέρα που θα απάγει την θερμότητα σε όλο το σύστημα. χρήση ανεμιστήρων συνδυασμένα με βάσεις αλουμινίου ή χαλκού στον επεξεργαστή 22

23 ακόμα μεγαλύτερες βάσεις χαλκού με ενσωματωμένους ανεμιστήρες. Χάλκινους σωλήνες απαγωγής θερμότητας συνδεμένους στις βάσεις. Χάλκινους σωλήνες και βάσεις με συστήματα ψύξης με υγρά στοιχεία. Μαγνητο-υδροδυναμικες ψυκτρες ακριβειας. Κάθε εξέλιξη του συστήματος ψύξης απαιτούσε μεγαλύτερο κόστος, περισσότερο χώρο και περισσότερη τροφοδοσία. επιπλέον δημιουργούσε περισσότερο θόρυβο και σε ορισμένες περιπτώσεις ανεπάρκειας μείωνε την αξιοπιστία του συστήματος. Όλα τα παραπάνω είναι δυνατά στους προσωπικούς υπολογιστές ή τουλάχιστον στα επιτραπέζια συστήματα, αλλά όταν έχουμε να κάνουμε με SOC πρέπει να αλλάξουμε την προσέγγιση μας. Σε ένα SOC, έχουμε αρχικά περιορισμένο χώρο. Δεν είναι δυνατόν να ενσωματωθούν μεγάλοι ανεμιστήρες, ούτε σωλήνες απαγωγής θερμότητας. επιπλέον, σε ένα SOC ο επεξεργαστής είναι ένα κεντρικό μεν, αλλά μικρό μέρος του συνολικού συστήματος. Δεν πρέπει να διορθώνουμε το σύστημα με βάση τις ενεργειακές εκροές του επεξεργαστή, αλλά να ρυθμίσουμε τον επεξεργαστή ώστε να έχει αποδεκτή ενεργειακή εκροή από το σύστημα. Συγκριτικά με τους μικροεπεξεργαστές για pc, τα SOC έχουν μια χαρακτηριστική διαφορά: Επειδή για την δημιουργία τους ακολουθείται η διαδικασία σχεδιασμού των ASIC κυκλωμάτων, οι πύλες που είναι τα δομικά τους στοιχεία δεν είναι ατομικά βελτιστοποιημένες ετσι ώστε να είναι ελάχιστα τα critical paths, όπως γίνεται στους επεξεργαστές για pc. ετσι σε αντίθεση με αυτούς που έχουν πλέον συχνότητα ρολογιού της τάξης των μερικών GHz, τα SOC έχουν φτάσει να έχουν συχνότητα ρολογιού μερικών εκατοντάδων MHz. Λαμβάνοντας υπόψη την βραδύτητα με την οποία βλέπουμε να αυξάνονται οι συχνότητες λειτουργίας των επεξεργαστών για pc τα τελευταία χρόνια, είναι λογικό να υποθέσουμε ότι αντιστοίχως τα SOC θα αργήσουν να φτάσουν σε συχνότητες λειτουργίας της τάξης των GHz. Άλλες μέθοδοι ώστε να βελτιώσουμε τις αποδόσεις Βλέπουμε ετσι ότι στα SOC χάνουμε μια από τις βασικές μεθόδους βελτίωσης του συστήματος που αναφέραμε παραπάνω, την αύξηση της συχνότητας λειτουργίας. ωστόσο, μπορούμε να αυξήσουμε το μέγεθος των διαύλων και να χρησιμοποιήσουμε περισσότερους. πρέπει εδώ να σημειώσουμε ότι η δυνατότητα ενός επεξεργαστή να επικοινωνεί με περισσότερους διαύλους, ταυτόχρονα μπορεί δυνητικά να έχει πολύ καλύτερες αποδόσεις από ότι θα πετυχαίναμε αυξάνοντας την συχνότητα λειτουργίας και μάλιστα χωρίς να έχουμε να πληρώσουμε το ίδιο τίμημα. όπως θα φανεί και στην παρούσα εργασία, σε εφαρμογές που μπορούν να χωριστούν σε παράλληλες ή ανεξάρτητες λειτουργίες, έχουμε καλύτερα αποτελέσματα χρησιμοποιώντας δυο επεξεργαστές, με μικρή συχνότητα λειτουργίας παρά έναν με μεγαλύτερη. 23

24 Επιπλέον χρησιμοποιώντας περισσότερους από ένα επεξεργαστή, μπορούμε να έχουμε πραγματική παράλληλη εργασια. Τα συστήματα με ένα επεξεργαστή που προσφέρουν παράλληλες διεργασίες, αυτό που κάνουν ουσιαστικά είναι να μοιράζουν τον χρόνο του επεξεργαστή σε πολλά κομμάτια ξεχωριστών διεργασιών. εάν για παράδειγμα έχουμε την εφαρμογή Α που τρέχει παράλληλα με την εφαρμογή Β αυτό που πραγματικά κάνει ο επεξεργαστής είναι να τρέχει το πρώτο μισό της Α, στη συνέχεια το πρώτο μισό της Β, να ολοκληρώνει την Α και έπειτα να ολοκληρώνει την Β, δίνοντας στον χρήστη την εντύπωση της παραλληλίας. Προκείμενου να μπορεί ο επεξεργαστής να διαχειρίζεται ψευδό-παράλληλα πολλές εργασίες, γίνονταν προσπάθειες να αυξηθεί όσο το δυνατόν γίνεται περισσότερο η συχνότητα λειτουργίας, ετσι ώστε να χωράνε περισσότερα κομμάτια στην μονάδα του χρόνου. αυτό είχε νόημα παλαιότερα που οι επεξεργαστές ήταν ακριβοί και κόστιζαν αρκετές εκατοντάδες ευρω. πλέον, που η τιμή τους έχει πέσει σημαντικά συμφέρει περισσότερο να μοιράσεις τις εφαρμογές, σε επεξεργαστές που θα δουλεύουν παράλληλα, ακόμα και σε μικρότερες συχνότητες και να αντικαταστήσεις τον ένα γρηγορο/ακριβο επεξεργαστή με δυο ή περισσότερους φτηνους/αργους. Το προφανές μειονέκτημα βέβαια είναι ότι αυξάνεται ο χώρος που χρειάζεται το σύστημα, ωστόσο οι βελτιώσεις μπορούν να είναι τέτοιες, που να δικαιολογούν αυτή την προτίμηση. Από την στιγμή που εισάγουμε δυο ή και περισσότερους επεξεργαστές σε ένα σύστημα, δημιουργείται το ερώτημα: Θα πρέπει αυτοί οι επεξεργαστές να είναι ίδιοι; Η ερώτηση δεν έχει ξεκάθαρη απάντηση καθώς εξαρτάται από το τι εφαρμογές καλείται να ολοκληρώσει το σύστημα. Ας πάρουμε για παράδειγμα το κινητό τηλέφωνο της Nokia Ν73. Η συσκευή έχει στο εσωτερικό της δυο επεξεργαστές ARM 9 με συχνότητα ρολογιού στα 22MHz. Ο ένας επεξεργαστής ασχολείται με τις υψηλές διεργασίες του λειτουργικού της συσκευής, όπως το τρέξιμο του ίδιου του λειτουργικού symbian, την αναπαραγωγή μουσικής ή βίντεο κλπ. Ο δεύτερος επεξεργαστής ασχολείται με τις βασικές διεργασίες ενός τηλεπικοινωνιακού δικτύου, επικοινωνία με τις κεραίες του παρόδου, αποστολη/ληψη τηλεφωνικών σημάτων κλπ. Το παραπάνω σύστημα θεωρείται ομογενές, επειδή όλοι οι επεξεργαστές ακόμα και αν κάνουν διαφορετικά πράγματα έχουν ακριβώς τους ίδιους επεξεργαστές. Ίσως όμως θα ήταν καλύτερο να μην είναι ακριβώς ίδιοι, για παράδειγμα ένας από τους δυο να έχει διαφορετική συχνότητα ρολογιού ή ένα πιο εκτεταμένο σετ εντολών. Σε ένα τέτοιο σύστημα, ο επεξεργαστής που ασχολείται με το τρέξιμο του λειτουργικού συστήματος, θα είχε υλικό προσαρμοσμένο σε αυτό, και ως εκ τούτου θα είχε καλύτερες αποδόσεις. επιπλέον θα μπορούσαμε να περιορίσουμε τις δυνατότητες του επεξεργαστή που δεν χρειάζονται για την συγκεκριμένη εφαρμογή ώστε να μειωθεί το μέγεθος του επεξεργαστή. Αναλόγως και για τον άλλο επεξεργαστή. Εννοείται ότι θα πρέπει να φροντίσουμε ώστε να υπάρχει συμβατότητα ανάμεσα στις δυο αρχιτεκτονικές, αλλιώς απαιτούνται μεταφραστικά κυκλώματα και επιπλέον δυσχεραίνεται παρά πολύ το έργο των ομάδων ανάπτυξης. Ένα τέτοιο σύστημα που περιλαμβάνει επεξεργαστές συμβατούς αλλά βελτιστοποιημένους για συγκεκριμένες διεργασίες ονομάζεται ετερογενές. Ένα τέτοιο σύστημα έχει το κινητό τηλέφωνο Ν95. έχει ένα βασικό επεξεργαστή, τον OMAP242 της Texas Instruments με συχνότητα ρολογιού στα 33MHz, o οποίος είναι πλαισιωμένος από Επεξεργαστές που αναλαμβάνουν τα τρισδιάστατα γραφικά ή συγκεκριμένες DSP λειτουργίες. παρόλο που τα ετερογενή συστήματα φαίνονται 24

25 εξορισμού καλύτερα, η απλότητα των ομογενών κάνει την επιλογή ανάμεσα στις δυο μεθόδους όχι και τόσο ξεκάθαρη. αυτό που είναι όμως ξεκάθαρο είναι ότι σταθερά προχωράμε σε μια εποχή όπου ένα σύστημα περιλαμβάνει πολλούς επεξεργαστικούς Επεξεργαστές, περνάμε δηλαδή από τα SOC στα MPSOC (Multiple-Processor SOC). είναι χαρακτηριστικό ότι η επόμενη γενιά επεξεργαστών για pc της Intel Core i7 θα έχουν 4 Επεξεργαστές, η κάρτα γραφικών της NVIDIA Geforce 2 έχει 1 Επεξεργαστές ενώ εντύπωση κάνει ο router CRS-1 του οποίου το chip SPP (Silicon Packet Processor) περιέχει 192 επεξεργαστές της Tensilica. Η μετά βαση σε πολύ-επεξεργαστικά συστήματα H εξέλιξη των SOC σε MPSOC ήταν αναμενόμενη εάν λάβουμε υπόψη μας την εξέλιξη της βιομηχανίας ημιαγωγών των τελευταίων 3 χρόνων. Στα τέλη του 2ου αιώνα, τα περισσότερα συστήματα χρησιμοποιούσαν ένα επεξεργαστή, και για να υποβοηθείται σε συγκεκριμένες εφαρμογές, ξεχωριστά RTL στοιχεία. Ο περιοριστικός παράγοντας, ήταν ο αριθμός των πυλών που χωρούσαν στο chip, καθώς η ASIC τεχνολογία της εποχής κατάφερνε οριακά να χωρέσει σε ένα chip έναν επεξεργαστή και την μνήμη του. Ένας δεύτερος επεξεργαστής στο ίδιο chip ήταν τεχνολογικά ανέφικτο. Για αυτό το λόγο, οποιαδήποτε ψηφιακή λογική δεν μπορούσε να υλοποιήσει σε ικανοποιητικό χρόνο ο επεξεργαστής, υλοποιούταν με προσαρμοσμένα IP blocks. Ο έλεγχος της σωστής λειτουργίας αυτών των στοιχείων στην αρχή ήταν εύκολος καθώς το πλήθος τους ήταν μικρό. Καθώς όμως ο αριθμός των πυλών Μέσα σε αυτά τα στοιχεία αυξανόταν, ακολουθώντας τον νόμο του Moore, η επαλήθευση της σωστής λειτουργίας έγινε ένα δύσκολο έργο, ορισμένες φορές πιο χρονοβόρο και από την σχεδίαση του SOC. είναι χαρακτηριστικό ότι το 26, σε μια τυπική εργασία σχεδίασης και υλοποίησης ενός SOC συστήματος, το 7% του διαθέσιμου χρόνου και χρήματος πήγαινε στην επαλήθευση της σωστής λειτουργίας των ASIC κομματιών. Η σχεδιαστική αυτή προσέγγιση είναι κατάλοιπο του παρελθόντος, του σκεπτικού οικονομία των πυλών, και καθώς πλέον έχουμε τις δυνατότητες να αλλάξουμε αυτά τα ASIC μέρη, με ένα ή περισσότερους επεξεργαστές, τέτοιες λύσεις πρέπει να μελετηθούν και συγκριθούν. 25

26 Κεφάλαιο 2 Σχεδιασμός ενός Συστηματος-σε-ενα-Chip Επειδή τα SOC προέκυψαν σαν μετεξέλιξη των ASIC κυκλωμάτων, η σχεδιαστική προσέγγιση κληρονομήθηκε από αυτά. Αυτό πρακτικά σημαίνει ότι δεν χρειάζεται να αλλάξουμε σημαντικά την τακτική μας για να δημιουργήσουμε ένα SOC, ωστόσο πρέπει να λάβουμε υπόψη μας συγκεκριμένα πλεονεκτήματα και ιδιαιτερότητες ώστε να δημιουργήσουμε ένα καλό SOC. H πολυπλοκότητα ωστόσο και η δυσκολία αυξάνεται κατακόρυφα όταν το σύστημα περιλαμβάνει περισσότερους από ένα Επεξεργαστές. Συγκεκριμένη και αποδεκτή προσέγγιση Η σχεδιαστική προσέγγιση ενός ASIC κυκλώματος είναι γενικά αποδεκτή ως εξής: αρχικά ορίζονται οι προδιαγραφές του τελικού συστήματος. Μετατροπή αυτών των προδιαγραφών σε RTL με χρήση μιας HDL γλώσσας. Εξομοίωση και επαλήθευση λειτουργίας του RTL μοντέλου. Λογική συνθεση του μοντελου. έλεγχος χρονισμού και σωστής λειτουργίας Κατασκευή πρωτοτυπου έλεγχος πρωτοτυπου και επαλήθευση προδιαγραφών. Ωστόσο όταν προσπαθούμε να κατασκευάσουμε ένα SOC τα πράγματα περιπλέκονται. Για παράδειγμα προκείμενου να μετατραπούν οι προδιαγραφές σε ένα ηλεκτρονικό μοντέλο δεν αρκεί να περιγράψουμε απλώς το hardware, πρέπει να γράψουμε και κώδικα ο οποίος θα ελέγχει τον επεξεργαστή του SOC. αυτό με την σειρά του προσθέτει ένα στάδιο αποσφαλματωσης (debugging) του κώδικα. H επαλήθευση λειτουργίας του μοντέλου είναι ένα άλλο στάδιο όπου τα πράγματα είναι πιο δύσκολα. Ειδικά σε 26

27 πολύπλοκα SOC με πολλά IP blocks, μνήμες και άλλο hardware η δημιουργία ενός περιβάλλοντος που να ελέγχει το μοντέλο (το αντίστοιχο ενός testbench), είναι από μόνο του μια ιδιαίτερα δύσκολη και χρονοβόρα διαδικασία. Αντίστοιχες δυσκολίες συναντάμε και στα παρακάτω βήματα. Εξαιτίας των παραπάνω, δεν υπάρχει μια συγκεκριμένη και αποδεκτή προσέγγιση στην σχεδίαση SOC συστημάτων. Αντιθέτως οι κατασκευαστές εφαρμόζουν ανάλογα με τις απαιτήσεις και τις προδιαγραφές ξεχωριστές ad-hoc προσεγγίσεις. Το πρώτο στάδιο για παράδειγμα είναι να έχουμε μια γενική αρχιτεκτονική του συστήματος όπως αυτή που φαίνεται παρακάτω: Διάγραμμα 4: γενική αρχιτεκτονική ενός SOC Η γενικής χρήσης αρχιτεκτονική που φαίνεται παραπάνω, ουσιαστικά απλώς συνδέει τον επεξεργαστή με τα περιφερειακά και την μνήμη του συστήματος. Ορισμένες φορές, μπορεί οι προδιαγραφές του συστήματος να είναι τέτοιες που ακόμα και η απλή αυτή αρχιτεκτονική μπορεί να τις ικανοποιήσει, σε αυτή την περίπτωση όμως, κατά πάσα πιθανότητα υπάρχει ήδη έτοιμο ένα ολοκληρωμένο κύκλωμα που μπορεί να χρησιμοποιηθεί και δεν έχει νόημα να σχεδιάσουμε ένα νέο SOC από την αρχή. Ωστόσο όταν ξεκινάμε με μια γενικής χρήσης αρχιτεκτονική, γίνεται ιδιαίτερα δύσκολο, με αλλαγές μόνο σε firmware να επιτύχουμε δύσκολες προδιαγραφές με αξιόλογες αποδόσεις. Ενα παράδειγμα αυτής της προσέγγισης είναι τα OMAP (που αναφέρθηκαν και στο Κεφάλαιο 1) της Texas Instruments. Στο επόμενο διάγραμμα βλέπουμε τα στοιχεία (block diagram) για τα OMAP chip. 27

28 General-Purpose Control Processor Core and Local Memory Shared SRAM DSP Core and Local DSP Memory DSP Private Peripherals System Shared Peripherals Flash Interface Memory Traffic Controller System DMA Controller SDRAM Interface Control-Processor Private Peripherals LCD Control Διάγραμμα 5: αρχιτεκτονική του chip OMAP Το σύστημα περιλαμβάνει δυο επεξεργαστές, ένα ελεγκτή DMA, ένα κοινό ελεγκτή μνήμης και διάφορα περιφερειακά στοιχεία. είναι χαρακτηριστικό ότι αυτή η αρχιτεκτονική είναι τόσο γενική που δεν είναι ξεκάθαρο αυτό το SOC ακριβώς για ποια εφαρμογή κατασκευάστηκε. Η αρχιτεκτονική μπορεί να αξιοποιηθεί σε διάφορες εφαρμογές και εάν δεν μπορεί να λειτουργήσει με τις απαραίτητες προδιαγραφές τότε ακολουθούνται δυο οδηγίες: εάν ένας επεξεργαστής δεν επαρκεί πρόσθεσε άλλο έναν εάν με την προσθήκη και άλλου επεξεργαστή δεν έχουμε τα κατάλληλα αποτελέσματα, πρόσθεσε ένα εξειδικευμένο υλικό για να επιταχύνει την εφαρμογή που έχει πρόβλημα. Αυτά φαίνονται και στο διάγραμμα. Ο γενικής-χρήσης επεξεργαστής δεν έχει τη δυνατότητα να κάνει DSP πράξεις σύμφωνα με τις προδιαγραφές και για αυτό προστέθηκε ένας δεύτερος επεξεργαστής για αυτό τον σκοπό. Επιπλέον επειδή κανένας από τους δυο επεξεργαστές δεν μπορεί να μεταφέρει δεδομένα με την απαραίτητη ταχύτητα και αξιοπιστία προστέθηκε ένας DΜΑ ελεγκτής. είναι χαρακτηριστικό ότι ο ελεγκτής DMA και οι δυο επεξεργαστές επικοινωνούν σχεδόν με όλα τα μέρη του κυκλώματος κάτι που κάνει το design αρκετά γενικό και κατά συνέπεια όχι βελτιστοποιημένο. Ωστόσο αποδίδει αρκετά καλά για μια πληθώρα εφαρμογών. όμως καθώς αυξάνεται ο αριθμός των επεξεργαστών, το να διαμοιράζονται όλα τα στοιχεία όλοι οι επεξεργαστές μέσω διαύλων μπορεί να οδηγήσει σε διενέξεις μεταξύ μοιρασμένων πόρων. Όσο πολυπλοκοτερο γίνεται το σύστημα, τόσο δυσκολότερο 28

29 γίνεται να επιτευχθούν οι ζητούμενες προδιαγραφές χρησιμοποιώντας σαν βάση μια τόσο γενική αρχιτεκτονική Ενα άλλο ζήτημα που τίθεται σαν συνέπεια της πολυπλοκότητας είναι πως θα γίνεται η σύνδεση των στοιχείων. Η παλαιότερη λογική των διαύλων, σε πολυεπεξεργαστικα συστήματα μπορεί να δημιουργήσει προβλήματα και χάσιμο χρόνου καθώς όταν ένας δίαυλος χρησιμοποιείται από ένα επεξεργαστή δεν μπορεί να χρησιμοποιηθεί από άλλους. Υπαρχουν εναλακτικες μεθοδοι για επικοινωνια οπως: Κοινες μνημες Σειρες FIFO Απευθειας συνδεση, σημειο προς σημειο Δικτυα ενσωματωμενα στα chip Ειδικά οι FIFO παρουσιάζουν συγκεκριμένα σαφή πλεονεκτήματα που τις καθιστούν ιδιαίτερα ενδιαφέρουσες σαν λύσεις. Για παράδειγμα στις FIFO δεν έχουμε διενέξεις για την χρήση τους, καθώς συνδέονται μόνο με ένα επεξεργαστή στην είσοδο και ένα επεξεργαστή στην έξοδο τους. Επιπλέον το μέγεθος τους είναι προσαρμόσιμο ανάλογα με το τι εφαρμογή κάνει ο επεξεργαστής. Στην παρούσα εργασία χρησιμοποιήσαμε κυρίως FIFO όπου χρειάστηκε να έχουμε επικοινωνία μεταξύ διαφορετικών επεξεργαστών και δίαυλους για την επικοινωνία κάθε επεξεργαστή με τις ατομικές του μνήμες. Παραμετροποιησιμοι επεξεργαστές Τέλος ένα σημαντικό ζήτημα είναι η παραμετροποίηση των επεξεργαστών. Οι αλλαγές που μπορούν να γίνουν σε ένα επεξεργαστή είναι πολλές και περιλαμβάνουν: Το μέγεθος των καταχωρητων του επεξεργαστή. Το σύνολο των εντολών που υποστηρίζει ο επεξεργαστής Τα μεγέθη και τα πλήθη των cache διάφορες ενσωματωμένες μνήμες RAM ή ROM που μπορεί να υπάρχουν Διεπαφες εισοδο/εξοδου με διαφορετικά μεγέθη. Εάν επιλέξουμε να παραμετροποιησουμε τον επεξεργαστή με βάση τα παραπάνω στοιχεία, πρέπει να λάβουμε υπόψη μας πως οι αλλαγές επηρεάζουν το συνολικό σύστημα σε παράγοντες όπως χώρος, κατανάλωση και ταχύτητα. Στο παρακάτω σχήμα βλέπουμε με βάση ποιες μεταβλητές μπορεί να παραμετροποιηθει ένας επεξεργαστής Xtensa. 29

30 Τεταρτημοριο Καταστασης Επεξεργαστη Αρχεια Καταχωρητων Εντολες Fusion Τεταρτημοριο Σετ Εντολων Καταχωρητες Εντολες SIMD Αλλα χαρακτηριστηκα του επεξεργαστη Εντολες FLIX Ρύθμιση Cache Και μνημών Διεπαφη Queue Εισοδου Διεπαφες Τοπικων Εντολων και Μνημων Δεδομενων Τεταρτημοριο Configuration Μοναδες εκτελεσης Εντολων Θυρες I/O Διεπαφη Queue Εξοδου Τεταρτημοριο Θυρων Επικοινωνιας Διάγραμμα 6: χώρος Διερεύνηση επεξεργαστών Xtensa Xtensa Xplorer Οπως αναφέρθηκε παραπάνω, ο σχεδιασμός ενός SOC συστήματος μπορεί να είναι ιδιαίτερα δύσκολος, ειδικά Όσο πιο πολύπλοκο είναι αυτό και Όσο μεγαλώνει το πλήθος των επεξεργαστών που περιέχει. Θα ήταν ιδιαίτερο χρήσιμο να υπήρχε ένα εργαλείο, το οποίο να ενσωματώνει λειτουργίες, όπως μοντελοποίηση του SOC συστήματος, έλεγχος λειτουργίας του, παραμετροποίηση του επεξεργαστή, συγγραφή firmware κλπ. Ένα τέτοιο εργαλείο θα διευκόλυνε πολύ την διαδικασία όπως είναι εμφανές. αυτό το περιβάλλον έχει δημιουργήσει η Tensilica, για χρήση με τους επεξεργαστές της Xtensa LX2 και Xtensa 7. Μέχρι την στιγμή συγγραφής αυτής της εργασίας, το περιβάλλον Xtensa Xplorer της Tensilica, ήταν το μόνο στο οποίο ο χρήστης μπορούσε να παραμετροποιησει και να βελτιστοποιήσει τους επεξεργαστές για μια συγκεκριμένη εφαρμογή, να αναπτύξει λογισμικό για τους επεξεργαστές, να τους ενσωματώσει σε ένα μοντέλο πολύ-επεξεργαστικού SOC και να ελέγξει την ορθή λειτουργία τους σε οποιαδήποτε φάση κατά την διαδικασία σχεδίασης. 3

31 Το εργαλείο αυτό φυσικά είναι προσαρμοσμένο για χρήση με τους συγκεκριμένους επεξεργαστές που αναφέραμε, και αυτούς χρησιμοποιήσαμε στην παρούσα εργασία. Συγκεκριμένα χρησιμοποιήσαμε σαν βασικό επεξεργαστή τον Xtensa LX2, τον οποίο παραμετροποιησαμε ανάλογα με τις ανάγκες της εφαρμογής μας. Ο LX2 δεν έχει απόλυτα ορισμένα χαρακτηριστικά, αλλά Αντιθέτως ο σχεδιαστής μπορεί να επιλέξει Αυτά που τον ενδιαφέρουν σύμφωνα με τις ανάγκες του. Μπορούμε να προσαρμόσουμε κατά βούληση την συχνότητα ρολογιού (σε ένα φάσμα που εκτείνεται από τα 15MHz έως και τα 78ΜHz), τα μεγέθη της cache εντολών και cache δεδομένων, των αριθμό των καταχωρητων και εάν Αυτά θα είναι latches ή flip-flops, το εάν θα υπάρχει ΜΑC στα 16bit (Multiplier And Accumulator, πολλαπλασιαστής και αθροιστής), εάν οι απλοί πολλαπλασιαστές θα είναι 32bit ή 16bit, εάν ο επεξεργαστής θα έχει 32bit δίαυλο επικοινωνίας ή πιο μεγάλο, και αλλά στοιχεία. Στο παρακάτω σχήμα βλέπουμε τα βασικά μέρη της αρχιτεκτονικής και τις Επιπλέον δυνατότητες που μπορούν να προστεθούν. Εκτός από τα μέρη της αρχιτεκτονικής που μπορούν να προσαρμοστούν (configurable), υπάρχουν μέρη που είναι προαιρετικά (όπως ο MAC που αναφέρθηκε παραπάνω), ενώ υπάρχει και υποστήριξη για εντελώς νέο υλικό που σχεδιάζεται είτε αυτόματα είτε χειροκίνητα για να υποστηρίξει συγκεκριμένες εξειδικευμένες λειτουργίες. Το υλικό αυτό, ο σχεδιαστής το περιγράφει μέσω της γλώσσας προγραμματισμού TIE, της Tensilica (Tensilica Instructions Extensions). Μεσω της γλωσσας ΤΙΕ, ο σχεδιαστης μπορει: Να προσθεσει νεους καταχωρητες, με μέγεθος προσαρμοσμένο στις ανάγκες των εφαρμορων που θα τρεχει ο επεξεργαστής Να προσθεσει νεες εντολες στο ήδη υπαρχον σετ εντολών του επεξεργαστή. Να προσθεσει νεες θυρες επικοινωνιας απευθειας στην δομη του επεξεργαστή. Ετσι ο επεξεργαστής δεν χρειαζεται να επικοινωνει μόνο μέσω συγκεκριμενω διαύλων. Το μόνο οριο είναι ότι κάθε νεα θυρα μπορεί να έχει μεγιστο μέγεθος τα 124 bit). 31

32 Διάγραμμα 7: Η αρχιτεκτονική του Xtensa LX2 όταν γίνουν compile τα αρχεία.tie που περιγράφουν τα νέα χαρακτηριστικά, η γεννήτρια επεξεργαστών XPG (Xtensa Processor Generator) αναλαμβάνει να δημιουργήσει δομές που υλοποιούν τις περιγραφόμενες λειτουργίες. είναι σημαντικό να αντιληφθούμε εδώ, ότι με TIE περιγράφουμε λειτουργίες και όχι δομές. Αφού γίνει η επεξεργασία των ΤΙΕ από την XPG, παράγονται δυο ομάδες αρχείων. Η πρώτη ομάδα αποτελείται από αρχεία που περιγράφουν την RTL δομή του επεξεργαστή καθώς και αρχεία που έχουν ένα μοντέλο του επεξεργαστή σε SystemC. Η δεύτερη ομάδα αρχείων περιλαμβάνει μια σουίτα εργαλείων όπως debugger, compiler, assembler, profiler και instruction-set simulator. επειδή είχαμε στα χέρια μας την έκδοση του Xtensa Xplorer που δίνεται στα πανεπιστήμια, ένας μέρος από Αυτά τα αρχεία δεν ήταν προσβασιμο σε μας, είχαμε όμως αρκετά ώστε να κάνουμε μια ηλεκτρονική προσομοίωση των επεξεργαστών και να ελέγξουμε τα αποτελέσματα. Επέκταση εντολών επεξεργαστή (TIEs) Οπως αναφέρθηκε παραπάνω, από την στιγμή που θα επιλέξουμε τα βασικά χαρακτηρίστηκα του επεξεργαστή μας, μπορούμε μέσω της γλώσσας TIE να υλοποιήσουμε ειδικό υλικό που βελτιώνει κατά πολύ την απόδοση του επεξεργαστή μας σε συγκεκριμένες λειτουργίες. H πρώτη από τις μεθόδους που αναφέρθηκε παραπάνω με την οποία, η γλώσσα TIE μπορεί να βελτίωση την απόδοση του επεξεργαστή μας σε 32

33 συγκεκριμένες εφαρμογές, είναι με την δημιουργία νέων εντολών, προσαρμοσμένων σε αυτές τις εφαρμογές. Οι νέες αυτές εντολές μπορούν να δημιουργηθούν με τρεις τρόπους: Με εντολες Fusion. Δημιουργωντας SIMD εντολες Με Flix εντολες. Η μέθοδος fusion αυτό που κάνει ουσιαστικά είναι να συνδυάζει εντολές που επαναλαμβάνονται με την ίδια σειρά, σε μια εντολή. Για να δώσουμε ένα παράδειγμα ας πούμε ότι το πρόγραμμα του επεξεργαστή απαιτεί κάποια στιγμή να βγάλει τον μέσο όρο από δυο αριθμούς και ότι αυτή η πράξη επαναλαμβάνεται για 5 δεκαεξαμπιτους αριθμούς. Εάν υποθέσουμε ότι οι δυο αριθμοί Α και Β είναι ένα ζευγάρι από τους 5, τότε το πρόγραμμα θα μπορούσε να έχει ως εξής (τα παρακάτω είναι ψευδοκωδικας): A<=Α+Β Α<= slr Α ( λογική ολίσθηση προς τα δεξιά του A) Αυτό το απλό πρόγραμμα, χωρίς να λάβουμε υπόψη μας τους κύκλους που χρειάζεται για να μεταφέρει τα δεδομένα στους κατάλληλους καταχωρητες πριν την άθροιση, χρειάζεται συνολικά 1 κύκλους για όλους τους αριθμούς. Η μέθοδος fusion ουσιαστικά συνδέει εντολές όπως η παραπάνω, όποτε στην προκειμένη περίπτωση θα δημιουργούταν μια εντολή και το πρόγραμμα θα είχε ως εξής: Α<AddnShift A B (όπου AddnShift η νέα εντολή). Αυτομάτως βλέπουμε ότι το πρόγραμμα πλέον χρειάζεται τους μίσους κύκλους για να ολοκληρωθεί. Το SIMD (Single Instruction, Multiple Data), συνδυάζει πολλαπλές εντολές που κάνουν την ιδια πραξη σε πολλά δεδομένα, σε μια εντολή. Τα δεδομένα συνδυάζονται όλα μαζί σε μια ομάδα, (ένα vector) και η επεξεργασία γίνεται ταυτόχρονα σε όλη την ομαδα. Αυτό οδηγεί σε παραλληλία επεξεργασίας Αφού η επεξεργασία των δεδομένων θα γίνεται ταυτόχρονα. Στο παράδειγμα που αναφέρθηκε παραπάνω με την εύρεση του μέσου όρου ενός ζεύγους αριθμών, μπορεί να δημιουργηθεί ένα 64bit vector, που να περιλαμβάνει τους 16μπιτους A,B,Γ,Δ και μια κατάλληλη εντολή που αθροίζει τα bit της πρώτης δεκαεξάρας με της δεύτερης και της τρίτης με της τέταρτης, ακολουθούμενο από μια shift εντολή πάλι, εξάγοντας από το vector τα bit που αντιστοιχούν στο αποτέλεσμα Έχουμε βελτίωση 1% σε σχέση με το αρχικό παράδειγμα Αφού σε δυο κύκλους έχουμε επεξεργαστή τα διπλάσια δεδομένα. Να σημειώσουμε εδώ, ότι στην εφαρμογή που χρησιμοποιήσαμε εδώ, δεν μπορούσε να εφαρμοστεί αυτή την μέθοδο βελτίωσης, 33

34 καθώς δεν υπήρχε η κατάλληλη δομή στο πρόγραμμα που θα ωφελούταν από μια τέτοια ομαδοποίηση. Η τελευταία μέθοδος βελτίωσης είναι η υιοθέτηση εντολών FLIX. Οι εντολές FLIX είναι το αντίστοιχο των VLIW (Very Long Instruction Word) εντολών που συναντούνται σε άλλες αρχιτεκτονικές. Επιτρέπουν στον επεξεργαστή να πραγματοποιήσει ταυτοχρόνως πολλαπλές, ανεξάρτητες μεταξύ τους πράξεις, κωδικοποιώντας τις εντολές αυτών των πράξεων σε μια μεγαλύτερη εντολή. είναι χαρακτηριστικό ότι ενώ οι εντολές Fusion και SIMD έχουν μέγεθος 24 bit, οι Flix είναι είτε 32 bit είτε 64bit, ετσι ώστε να υπάρχουν αρκετά bit ώστε να μπορούν να κωδικοποιηθούν πολλές εντολές σε Αυτά. Οι παραπάνω τεχνικές μπορούν να εφαρμοστούν ταυτόχρονα στον επεξεργαστή, ο σχεδιαστής όμως πρέπει να λάβει υπόψη του ότι χρειάζεται έξτρα υλικό για να υλοποιηθούν. Ο Xpress Compiler Οι παραπάνω μέθοδοι μπορούν να υλοποιηθούν χειροκίνητα, αφήνοντας τον σχεδιαστή να επιλέξει ποιες εντολές να υλοποιήσει. Ωστόσο ο Xtensa Xplorer περιλαμβάνει ένα πρόγραμμα, τον Xtensa Compiler, ο οποίος μπορεί να ελέγξει μόνος του την εφαρμογή για την οποία σχεδιάζουμε τον επεξεργαστή και να δημιουργήσει δικά του tie αρχεία με τις κατάλληλες λειτουργίες που θα βελτιώνουν την απόδοση του επεξεργαστή για αυτή την συγκεκριμένη εφαρμογή. Η διαδικασία με την οποία γίνεται αυτό θα αναλυθεί αργότερα σε αυτή την εργασία. Για την ώρα αυτό που αρκεί να θυμόμαστε είναι ότι όταν ξεκινάμε την δημιουργία ενός SOC στον Xtensa Xplorer, μπορούμε να εισάγουμε σε κώδικα C ή C++ την εφαρμογή που θα καλείται να τρέξει ο επεξεργαστής. Ο Xplorer, ελέγχει την εφαρμογή, εξομοιώνει την λειτουργία της και βλέπει σε ποια σημεία υπάρχει το μεγαλύτερο φόρτο εργασίας. Στη συνεχεία ο Xpress Compiler ελέγχει τα συγκεκριμένα σημεία και δημιουργεί διάφορα tie αρχεία, τα οποία βελτιστοποιούν τον επεξεργαστή ώστε να έχει καλύτερη απόδοση σε Αυτά τα στοιχεία. είναι στο χέρι του σχεδιαστή εάν θα υιοθετήσει αυτές τις προτάσεις ή εάν θα επιλέξει να δημιουργήσει δικές του tie επεκτάσεις. Διερεύνηση μνήμης - Ενέργειας Παραπάνω είδαμε ότι μια από τις μέθοδος βελτίωσης της απόδοσης ενός επεξεργαστή είναι με την προσθήκη μεγαλύτερης cache ή εξωτερικής μνήμης. Ο Xtensa Xplorer μπορεί μέσω του Cache and Memory Explorer να ελέγξει την απόδοση του επεξεργαστή για διάφορες εκδοχές των μεγεθών βοηθώντας ετσι τον σχεδιαστή να επιλέξει την καλύτερη. Οι μεταβλητές που λαμβάνει υπόψη του για κάθε δεδομένο επεξεργαστή είναι: μέγεθος Instruction Cache. 34

35 μέγεθος γραμμής Instruction Cache. Associativity Instruction Cache. μέγεθος Data Cache. μέγεθος γραμμής Data Cache. Associativity Data Cache. Την καθυστέρηση σε κύκλους που προκαλεί μια ανάγνωση από την μνήμη. Εκτός όμως από τα παραπάνω μπορούμε μέσω του προγράμματος Xenergy να μελετήσουμε τις ενεργειακές απαιτήσεις κάθε configuration. Μέσα από ένα μενού χαρακτηριστικών μπορούμε να επιλέξουμε Αυτά που μας ενδιαφέρουν και το πρόγραμμα θα εξομοιώσει τον επεξεργαστή με τα συγκεκριμένα χαρακτηριστικά και θα μας παρέχει λεπτομερές ενεργειακό προφίλ για αυτόν. Εκτός από τα μεγέθη των μνημών που αναφέρθηκαν παραπάνω, το Xenergy λαμβάνει υπόψη του τις ενεργειακές απαιτήσεις της επικοινωνίας με τον δίαυλο του συστήματος, την συχνότητα του ρολογιού καθώς και την τεχνολογία με την οποία κατασκευάζεται το SOC. 35

36 Κεφάλαιο 3 Ελέγχοντας την απόδοση του επεξεργαστή Η καλύτερη λύση για να μετρηθεί η αποδοτικότητα ενός επεξεργαστή είναι να ελεηθεί με την εφαρμογή ακριβώς που ο επεξεργαστής θα καλείται να τρέξει. Συχνά όμως, η εφαρμογή αυτή δεν είναι έτοιμη όταν ξεκινάμε την σχεδίαση ενός SOC συστήματος, συνεπώς χρησιμοποιούνται προγράμματα μέτρησης επιδόσεων (benchmarks) στην θέση της ακριβής εφαρμογής. Κατά μια έννοια, το ιδανικό πρόγραμμα μέτρησης, είναι η εφαρμογή που θα τρέχει ο επεξεργαστής. Κανένα άλλο πρόγραμμα δεν μπορεί να αντιπροπευσει εξίσου πιστά τις απαιτήσεις της αρχικής εφαρμογής, να προσομοιώσει με τον ίδιο τρόπο τη σειρά με την οποία καλούνται οι εντολές, την χρήση μνημών και καταχωρητων και τις μεταφορές δεδομένων. Ωστόσο η ίδια η εφαρμογή έχει και μειονεκτήματα σαν εργαλείο μέτρησης επιδόσεων. Πρώτα από όλα όπως αναφέρθηκε παραπάνω μπορεί να μην υπάρχει ακόμα όταν σχεδιάζεται το SOC. Επιπλέον θα ελέγξει την απόδοση του επεξεργαστή με μεγάλη εξειδίκευση και δεν θα μας δώσει ακριβή στοιχεία για την απόδοση του επεξεργαστή σε άλλες εφαρμογές. Καθώς ένας επεξεργαστής μπορεί να τρέχει πολλές διαφορετικές εφαρμογές (ακόμα και αν είναι βελτιστοποιημένος για μια) αυτό είναι ένα σημαντικό μειονέκτημα. Ενα άλλο μειονέκτημα είναι η έλλειψη αναλυτικών στοιχείων από την εφαρμογή. Η αρχική εφαρμογή είναι γραμμένη ώστε να κάνει κάτι πολύ συγκεκριμένο και αυτό συνήθως δεν περιλαμβάνει την δημιουργία αναφορών για την απόδοση του επεξεργαστή. Για παράδειγμα έστω ότι βελτιστοποιούμε έναν επεξεργαστή για κωδικοποίηση mpeg. Το πρόγραμμα θα παίρνει τα αρχικά δεδομένα και θα παράγει στο τέλος ένα αρχείο με mpeg κωδικοποίηση, δεν θα παρέχει στοιχεία όμως για το πόσους κύκλους εργασίας χρειάστηκε, πόσες φορές απέτυχε η αναζήτηση στην cache και πόση ενέργεια καταναλώθηκε κατά την διαδικασία. εάν προσθέσουμε αυτές τις δυνατότητες στην εφαρμογή τότε μπορούμε να φτάσουμε στο άλλο άκρο: η εφαρμογή περιλαμβάνει διεργασίες για τις οποίες απαιτεί περισσότερους πόρους και κύκλους με αποτέλεσμα τα στοιχεία που θα πάρουμε στο τέλος να είναι κατά κάποιο τρόπο πολωμένα. Ωστόσο πρέπει να σημειώσουμε ότι παρόλα τα μειονεκτήματα που αναφέρθηκαν, η χρήση της 36

37 αυθεντικής εφαρμογής για σύγκριση της απόδοσης ενός επεξεργαστή παρέχει σημαντικά δεδομένα και πρέπει να δίνεται ιδιαίτερη σημασία σε Αυτά. Στην παρούσα εργασία επιλέξαμε να δημιουργήσουμε ένα SOC σύστημα βελτιστοποιημένο για κρυπτογράφηση και αποκρυπτογράφηση δεδομένων. Μια που υπάρχει πληθώρα κρυπτογραφικών αλγόριθμων με διαφορετικά χαρακτηρίστηκα έπρεπε να επιλέξουμε κάποιον ο οποίος να είναι σχετικά αντιπροσωπευτικός. Ο αλγόριθμος DES, ο οποίος χρησιμοποιήθηκε ευρύτατα στο παρελθόν και χρησιμοποιείται εν μέρη ακόμα με την μορφή του Triple DES ήταν η επιλογή μας. Αλγόριθμος DES Ο αλγόριθμος DES ( Data Encryption Standard) είναι ένας κρυπτογραφικός αλγόριθμος, επιλεγμένος το 1976 σαν το επίσημο πρότυπο κρυπτογράφησης κυβερνητικών πληροφοριών των ΗΠΑ το Σαν συνέπεια της επιλογής του, βρήκε παγκόσμια αποδοχή παγκοσμίως. Ο αλγόριθμος αρχικά επικρίθηκε για το μικρό μέγεθος κλείσου που χρησιμοποιούσε και πλέον θεωρείται ανασφαλής για πολλές εφαρμογές. Τον Ιανουάριο του 1999 το site distributed.net και το Ινστιτούτο Ηλεκτρονικών Συνόρων κατάφεραν να σπάσουν τον αλγόριθμο [δηλαδή να ανακτήσουν το κλειδί κρυπτογράφησης, έχοντας στην διάθεση τους μόνο τα κρυπτογραφημένα δεδομένα] σε μόνο 22 ώρες και 15 λεπτά. Ο αλγόριθμος έχει ακόμα εφαρμογή σε μια παραλλαγή του, τον Τριπλό DES. Τα τελευταία χρόνια, ο αλγόριθμος έχει αντικατασταθεί από τον AES (Advanced Encryption Standard). Ο DES είναι ένας κλασσικός κρυπτογραφικός αλγόριθμος ομάδων δεδομένων (Block cipher). παίρνει ομάδες καθαρού κειμένου (plaintext) και τις μετασχηματίζει με μια σειρά πολύπλοκων πράξεων σε κρυπτογραφημένο κείμενο του ίδιου μήκους. Στην περίπτωση του DES, η ομάδα αποτελείται από 64 bits. Ο DES επίσης χρησιμοποιεί ένα κλειδί κρυπτογράφησης με το οποίο παραμετροποιει τους μετασχηματισμούς, ετσι ώστε θεωρητικά, οι αντίστροφοι μετασχηματισμοί να μπορούν να γίνουν μόνο από κάποιον που ξέρει το κλειδί. Το κλειδί αποτελείται από 64 bits, Ωστόσο μόνο 56 από Αυτά χρησιμοποιούνται για την κρυπτογράφηση από τον αλγοριθμο. Τα υπόλοιπα 8 χρησιμοποιούνται για ελέγχους parity μόνο. Επομένως το πρακτικό μέγεθος του κλειδιού είναι 56 bits. 37

38 Γενική δομή H γενική δομή του αλγόριθμου φαίνεται στο παρακάτω διάγραμμα. υπάρχουν 16 όμοια σταδία επεξεργασίας, 16 γύροι. υπάρχει επίσης μια αρχική και μια τελική μετά θεση δεδομένων oνομαζόμενες IP και FP αντίστοιχα, οι οποίες είναι αντίστροφες μεταξύ τους (δηλαδή η IP αντιστρέφει την λειτουργία της FP και το αντίστροφο). Πριν από τους βασικούς γύρους, το block μοιράζεται σε δυο ομάδες των 32 bit οι οποίες επεξεργάζονται εναλλάξ. αυτό το μοτίβο επεξεργασίας είναι γνωστό σαν δομή Feistel. Η δομή του αλγόριθμου εγγυείται ότι η κρυπτογράφηση και η αποκρυπτογράφηση είναι πανομοιότυπες διαδικασίες. Η μόνη διάφορα είναι ότι τα υποκλείδια που παράγονται από το αρχικό κλειδί, εφαρμόζονται με την αντίστροφη σειρά όταν γίνεται αποκρυπτογράφηση. αυτή η ιδιότητα βοηθάει ιδιαίτερα την υλοποίηση του αλγόριθμου σε hardware, καθώς δεν χρειάζονται ξεχωριστά κυκλώματα κρυπτογραφήσεις και αποκρυπρογραφισης. Το σύμβολο αντιπροσωπεύει μια XOR πράξη. Η πράξη-f ανακατεύει τα δεδομένα κάθε ομάδας με κάποιο από τα υποκλείδια. Η έξοδος της F-πράξης στην συνεχεία συνδυάζεται με την άλλη ομάδα και τα δυο μισά αλλάζουν θέσεις πριν την αρχή του επόμενου γυρου. μόνη εξαίρεση είναι ο τελευταίος γύρος όπου τα δεδομένα δεν αλλάζουν θέση. Διάγραμμα 8: γενική δομή αλγόριθμου DES Η Feistel (F) πράξη H F-πράξη, που απεικονίζεται στο επόμενο διάγραμμα, εφαρμόζεται σε μισό block δεδομένων (32 bit) κάθε γύρο και αποτελείται από τέσσερις πράξεις: 1. Επέκταση: Το 32 bit του block επεκτείνονται σε 48 bit χρησιμοποιώντας μια πράξη επεκτασης/μεταθεσης, η οποία στο διάγραμμα σημειώνεται με E. Στην ουσία απλώς κάποια bit αντιγράφονται ετσι ώστε ο αριθμός της ομάδας να φτάσει τα 48 bit. 38

39 2. Ανάμειξη κλειδιών: Το αποτέλεσμα της επέκτασης, συνδυάζεται με ένα υποκλειδι με μια πράξη XOR. Τα υποκλείδια είναι 16 (ένα για κάθε γύρο), μεγέθους 48 bit και προκύπτουν από το βασικό κλειδί με μια διαδικασία, το πρόγραμμα κλειδιών που θα αναλυθεί παρακάτω. 3. Εναλλαγή: Αφού γίνει η ανάμειξη με το κλειδί το block χωρίζεται σε οκτώ κομμάτια των 6 bit, τα οποία θα επεξεργαστούν από τα κουτιά εναλλαγής. κάθε ένα κουτί αντικαθιστά τα 6 bit των εισόδων του με 4 bit στις εξόδους του χρησιμοποιώντας ένα μη-γραμμικό μετασχηματισμό ( οποίος δίνεται με την μορφή ενός πίνακα). 4. Μετά θεση: Τελικά οι 32 έξοδοι των κουτιών εναλλαγής μετατιθονται με βάση μια συγκεκριμένη διαδικασία, σε ένα κουτί μετά θεσης. Διάγραμμα 9: δομή πράξης-f του αλγόριθμου DES Όλες οι πράξεις επέκτασης, μετά θεσης και εναλλαγής στηρίζονται σε συγκεκριμένους πίνακες (look-up tables). Το πρόγραμμα κλειδιών Στο επόμενο διάγραμμα φαίνεται το πρόγραμμα κλειδιών για την κρυπτογραφιση, δηλαδή η διαδικασία με την οποία παράγονται τα υποκλείδια. αρχικά επιλέγονται 56 bits από τα αρχικά 64 μέσω της πράξης πρώτη επιλεγμένη μετά θεση (Permuted Choice, στο σχήμα PC1). Τα υπόλοιπα είτε χάνονται ή χρησιμοποιούνται για ελέγχους parity. Τα 56 bits που επιλέχθηκαν χωρίζονται σε δυο ομάδες των 28 bit έκαστη. κάθε ομάδα επεξεργάζεται ξεχωριστά. Σε διαδοχικούς γύρους κάθε ομάδα υφίσταται μια περιστροφική ολίσθηση κατά ένα ή δυο bits (ανάλογα με τον γύρο). Έπειτα επιλέγονται 39

40 από την πράξη δεύτερη επιλεγμένη μετά θεση (PC2 στο σχήμα) 24 bit από την μια ομάδα και 24 bit από την άλλη και ετσι δημιουργείται το υποκλειδι των 48 bit. Λόγω της ολίσθησης διαφοροποιούνται τα υποκλείδια που παράγονται σε κάθε γύρο. Διάγραμμα 1: το πρόγραμμα κλειδιών του αλγόριθμου DES Το πρόγραμμα κλειδιών στην αποκρυπτογράφηση είναι όμοιο, μόνο που τα υποκλείδια παράγονται με την αντίστροφη σειρά που παρήχθησαν στην κρυπτογράφηση. Εκτός από αυτό, η διαδικασία είναι όμοια. Το πρόγραμμα μέτρησης Οπως αναφέρθηκε προηγουμένως, η μέτρηση της απόδοσης ενός επεξεργαστή δεν είναι τόσο άμεση διαδικασία Όσο θα περίμενε κάποιος. Στην συγκεκριμένη εργασία θα μπορούσαμε να γράψουμε κώδικα ο οποίος να εξομοιώνει την κρυπτογραφιση δεδομένων με βάση τον DES, Ωστόσο υπάρχει ένα αποδεκτό πρόγραμμα μέτρησης ακριβώς για αυτή την λειτουργία. Το πρόγραμμα είναι μέλος της σουίτας προγραμμάτων μέτρησης της Motorola, Powerstone. Η σουίτα powerstone περιλαμβάνει προγράμματα 4

41 μέτρησης για διάφορες εφαρμογές, από συμπίεση εικόνων με τον αλγόριθμο jpeg μέχρι και Αποστόλη fax με το πρότυπο g3fax. Πρέπει εδώ να σημειωθεί ότι τα προγράμματα της σουίτας Powerstone είναι γραμμένα ετσι ώστε να μπορούν να γίνουν compile σε πολλές διαφορετικές αρχιτεκτονικές και ως εκ τούτου δεν υποστηρίζουν την δημιουργία αναφορών για την απόδοση του επεξεργαστή (Αφού αυτό Αυτομάτως θα προσάρμοζε το πρόγραμμα σε μια συγκεκριμένη αρχιτεκτονική). Ωστόσο αυτό δεν μας πειράζει καθώς τα δεδομένα που χρειαζόμαστε μπορούμε να τα πάρουμε από το περιβάλλον του Xtensa Xplorer. Επίσης πρέπει να λάβουμε υπόψη μας ότι τα προγράμματα Powerstone, είναι γραμμένα για χρήση σε σύστημα που περιλαμβάνει μόνο έναν επεξεργαστή. Δεν υποστηρίζουν την μεταφορά δεδομένων μεταξύ διαφορετικών επεξεργαστών. Ως εκ τούτου, όπου χρειάστηκε αναγκαστήκαμε να πειράξουμε την δομή των προγραμμάτων, ώστε να υποστηρίζουν παράλληλη ή σειριακή επεξεργασία των δεδομένων. Οι αλλαγές αυτές, όπου γίνονται, σημειώνονται και εξηγούνται. Το συγκεκριμένο πρόγραμμα θα αναλυθεί αργότερα σε μεγαλύτερο βάθος. Σε αυτή την φάση και για να αντιληφθούμε καλύτερα τι λειτουργία εξυπηρετούν οι επεξεργαστές σε κάθε αρχιτεκτονική που θα ακολουθήσει αρκεί να θυμόμαστε τα εξής: Ο αλγόριθμος βασίζεται πρώτα στην δημιουργία των υποκλείδιων από το αρχικό κλειδί, και στη συνεχεία την κρυπτογράφηση των δεδομένων σε ομάδες με βάση τα υποκλείδια. Το ίδιο κάνει και το πρόγραμμα. αρχικά χρησιμοποιεί μια function για την δημιουργία των υποκλείδιων, Έπειτα με μια άλλη function για την κρυπτογράφηση των δεδομένων και Τελικά γίνεται ένας έλεγχος ώστε να πιστοποιηθεί ότι το τελικό κρυπτογραφημένο κείμενο είναι αυτό που θα έπρεπε να είναι. 41

42 Κεφάλαιο 4 Αρχιτεκτονικές υλοποίησης Στην παρούσα εργασία μελετήθηκαν οι αποδόσεις διαφόρων MPSOC και μιας SOC αρχιτεκτονικής. Σε κάθε μια συγκρίνεται η απόδοση της αρχιτεκτονικής με τους επεξεργαστές στην αρχική τους μορφή, καθώς και βελτιστοποιημένους με προσθήκες TIE. παρακάτω έχουμε μια σύντομη αναφορά για την κάθε μια αρχιτεκτονική που εξετάστηκε. Πρέπει εδώ να σημειωθεί ότι μέσω XTMP γίνεται η επαλήθευση σωστής λειτουργίας του συστήματος, αλλά η διερευνήσεις γίνονται στο περιβάλλον Xtensa. αυτό σημαίνει ότι κάθε επεξεργαστής εξετάζεται ξεχωριστά από τους υπόλοιπους στο σύστημα, και ως εκ τούτου, δεν φαίνονται οι κύκλοι που απαιτούνται για την επικοινωνία μεταξύ των επεξεργαστών και των μνημών FIFO στο πολυεπεξεργαστικο περιβάλλον. αυτό Ωστόσο δεν ακυρώνει τις διερευνήσεις μας, οι οποίες άλλωστε έχουν στόχο να βελτιώσουν τον επεξεργαστή με βάση τις λειτουργίες που κάνει μόνος του. Επιπλέον μέσω των αναφορών που παίρνουμε από κάθε XTMP προσομοίωση μπορούμε να δούμε πόσους κύκλους περνάει κάθε επεξεργαστής σε κατάσταση αναμονής. Αρχιτεκτονική ενός επεξεργαστή Η αρχιτεκτονική αυτή είναι η απλούστερη που δοκιμάσαμε και η πλέον διαδεδομένη, παρόλο που, όπως αναφέρθηκε στα προηγούμενα κεφάλαια, η τάση αυτή φαίνεται να αλλάζει σταδιακά.. Τo σύστημα αποτελείται από τον επεξεργαστή, ο οποίος έχει ενσωματωμένη μια cache εντολών και μια cache μνήμης. Όλο το πρόγραμμα μέτρησης απόδοσης, που εξομοιώνει λειτουργία αντίστοιχη με την κρυπτογράφηση δεδομένων σύμφωνα με τον αλγόριθμο DES τρέχει στον ίδιο επεξεργαστή. γίνεται ανάλυση των διαφορετικών επιδόσεων του επεξεργαστή για διαφορετικά μεγέθη cache εντολών ή 42

43 cache δεδομένων, διαφορετικές τιμές associativiy των cache, και διαφορετικό μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE για την βελτίωση των επιδόσεων. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. Αρχιτεκτονική Σωλήνωσης με Δυο Επεξεργαστές Η αρχιτεκτονική αυτή, είναι η δεύτερη μικρότερη σε μέγεθος που δοκιμάσαμε και στηρίζεται στην σύνδεση δυο πυρήνων σε pipeline αρχιτεκτονικη. Ο κάθε επεξεργαστής, περιλαμβάνει την δική του cache εντολών και την δική του cache δεδομένων. Δεν υπάρχει κοινή μνήμη μέσω της οποίας να επικοινωνούν οι δυο επεξεργαστές. Αντιθέτως υπάρχει μια ουρά FIFO η οποία συνδέει την έξοδο του πρώτου επεξεργαστή με την είσοδο του δεύτερου. Core 1 FIFO Core 2 Διάγραμμα 11: Αρχιτεκτονική Σωλήνωσης με δυο πυρήνες Το πρόγραμμα μέτρησης εδώ, προκείμενου να υλοποιήσουμε την σωλήνωση, έπρεπε να σπάσει σε δυο μέρη. Η λογική αναλύεται στο αντίστοιχο κεφάλαιο, Ωστόσο εν συντομία μπορούμε να πούμε ότι ο πρώτος επεξεργαστής ασχολείται με την παραγωγή των υποκλείδιων, ενώ ο δεύτερος λαμβάνει τα υποκλείδια από τον πρώτο και εκτελεί την κρυπτογράφηση και τον έλεγχο του αποτελέσματος. όπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Στη συγκεκριμένη αρχιτεκτονική, έχουμε τρεις Επεξεργαστές στο σύστημα, συνδεμένους με FIFO όπως φαίνεται στο σχημα. Οι επεξεργαστές έχουν ο καθένας την δικιά του cache εντολών και cache δεδομένων. πρέπει να σημειώσουμε ότι ο ένας είναι σε λειτουργία 43

44 Master και οι δυο σε λειτουργία Slave. Ο Master χωρίζει τα δεδομένα σε δυο ομάδες και στέλνει το κλειδί κρυπτογράφησης και το αρχικό κείμενο που θα κρυπτογραφηθεί στους δυο Slave. Έπειτα οι δυο Slave εκτελούν την παραγωγή των υποκλείδιων και την κρυπτογράφηση των δεδομένων παράλληλα, ο ένας στα μισά δεδομένα και ο άλλος στα αλλά μισά. τέλος τα δεδομένα στέλνονται ξανά στον Master για έλεγχο σωστής λειτουργίας. FIFO 1 FIFO 3 Slave 1 FIFO 4 Master FIFO 5 FIFO 6 Slave 2 FIFO 2 Διάγραμμα 12: Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Το πρόγραμμα μέτρησης εδώ ουσιαστικά δεν σπάει σε ξεχωριστά μέρη, απλώς μειώνεται ο αριθμός των δεδομένων που επεξεργάζεται ο κάθε Slave. Η μόνη διάφορα από το κανονικό πρόγραμμα μέτρησης, είναι ότι ο έλεγχος της σωστής λειτουργίας γίνεται στον master και ότι τα δεδομένα προς επεξεργασία δεν περιλαμβάνονται στο αρχικό πρόγραμμα, αλλά λαμβάνονται από τις αντίστοιχες FIFO κάθε φορά. προστέθηκε Επιπλέον μια διαφορετική μορφή του προγράμματος, την οποία τρέχει ο Master, στο οποίο απλώς μοιράζεται το plaintext και το αρχικό κλειδί κρυπτογράφησης στους δυο Slaves. Μια βαθύτερη ανάλυση γίνεται στο αντίστοιχο Κεφάλαιο. Οπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. Αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές Η συγκεκριμένη αρχιτεκτονική, είναι μια παραλλαγή της αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές, μόνο που οι Slaves πλέον είναι τέσσερις. Ο Master μοιράζει τα δεδομένα σε τέσσερις ομάδες και όχι σε δυο όπως πριν, κάθε Slave 44

45 επεξεργάζεται την ομάδα των δεδομένων που έχουμε προκαθορίσει και το κρυπτογραφημένο κείμενο επιστρέφει στον Master για έλεγχο σωστής λειτουργίας. FIFO 3 Slave 1 FIFO 4 FIFO 1 FIFO 2 FIFO 7 FIFO 8 Master FIFO 5 FIFO 6 FIFO 9 FIFO 1 Slave 2 Slave 3 FIFO 11 Slave 4 FIFO 12 Διάγραμμα 13: αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές Οπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. Αρχιτεκτονική Παράλληλων Σωληνώσεων με Πέντε Επεξεργαστές 45

46 Η συγκεκριμένη αρχιτεκτονική αποτελείται από έναν επεξεργαστή σε ρόλο Master και δυο παράλληλες pipeline αρχιτεκτονικές όπως αυτές που αναλύθηκαν στο Κεφάλαιο 4.2. Ο Master αναλαμβάνει τον διαμοιρασμό του κλειδιού και του plaintext καθώς και τον έλεγχο του ciphertext όταν ολοκληρωθεί η κρυπτογράφηση. Οι Slave1 και Slave 2 παράγουν τα υποκλείδια με βάση το κλειδί που έχουν πάρει από τον master ενώ οι Slave3 και Slave4 κρυπτογραφούν το plaintext με βάση τα υποκλείδια που λαμβάνουν από τους Slave1 και Slave2. FIFO 1 FIFO 3 Slave 1 FIFO 5 FIFO 9 Slave 3 FIFO 7 Master FIFO 2 FIFO 4 Slave 2 FIFO 6 FIFO 1 Slave 4 FIFO 8 Διάγραμμα 14: Αρχιτεκτονική Παράλληλων Σωληνώσεων με Πέντε Επεξεργαστές Το πρόγραμμα μέτρησης έσπασε εφαρμόζοντας την λογική που αναπτύχθηκε στις προηγούμενες αρχιτεκτονικές. όπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. 46

47 Κεφάλαιο 5 Αρχιτεκτονική με ένα επεξεργαστή Οπως αναφέρθηκε και στο Κεφάλαιο 4 η υλοποίηση μονού επεξεργαστή είναι συγκριτικά η απλούστερη. Όλο το πρόγραμμα μέτρησης, des.c τρέχει στον μοναδικό επεξεργαστή του συστήματος. όπως είναι λογικό αυτή η αρχιτεκτονική είναι η πιο μικρή σε μέγεθος, Αφού περιέχει μόνο έναν επεξεργαστή. Η πορεία που ακολουθήσαμε έχει ως εξής. αρχικά ξεκινήσαμε με έναν επεξεργαστή LX2 βασισμένο στα χαρακτηριστικά που προτείνει η Tensilica ετσι ώστε να είναι μέγιστα παραμετροποιησιμος στη μέγιστη δυνατή συχνότητα λειτουργίας. Με βάση Αυτά τα χαρακτηριστικά, ελέγξαμε την απόδοση της εφαρμογής και σημειώσαμε τους παράγοντες που καθυστερούν την ολοκλήρωση του προγράμματος (σε αυτό το στάδιο ουσιαστικά αστοχίες εύρεσης στην cache δεδομένων ή cache εντολών). Στη συνεχεία έγινε μια διερεύνηση για τις βέλτιστες ρυθμίσεις της Cache εντολών, ώστε να βρεθούν οι ιδανικές παράμετροι ώστε να ελαχιστοποιηθούν οι αποτυχίες (Instruction Cache Misses). Ακολούθησε η ίδια διαδικασία για την Cache δεδομένων. από τις παραπάνω διερευνήσεις προέκυψε μια ομάδα παραμέτρων με βέλτιστα χαρακτηριστικά στο θέμα των αποτυχιών προσπέλασης στις Cache. επειδή οι τιμές που είχαν την καλύτερη επίδοση ήταν περισσότερες από μια, ελέγξαμε την ενεργειακή απόδοση κάθε επιλογης. Ο τελικός παράγοντας επιλογής ήταν το γινόμενο αποτυχίας προσπέλασης της cache επί της ενεργειακής κατανάλωσης που μετρήθηκε μέχρι την ολοκλήρωση του προγράμματος (Instruction Cache Misses * Energy ). πρέπει εδώ να σημειωθεί ότι το μέγεθος της cache είναι μια παράμετρος που επηρεάζει την μέγιστη συχνότητα ρολογιού. Η παραπάνω ομάδα παραμέτρων εμφανίζει τα καλύτερα χαρακτηρίστηκα σε αποτυχίες προσπέλασης και αυτό μεταφράζεται όπως θα δούμε και παρακάτω σε λιγότερους κύκλους λειτουργίας. Προκείμενου να επιλέξουμε την βέλτιστη επιλογή ανάμεσα στις παραπάνω ελέγξαμε την ενεργειακή απόδοση του συστήματος με τις συγκεκριμένες επιλογές καθώς και τον χώρο που απαιτεί κάθε επιλογή. Ο καθοριστικός παράγοντας επιλογής, αποφασίστηκε να είναι το γινόμενο των κύκλων λειτουργίας που χρειάστηκαν για την ολοκλήρωση του des.c επί την ενεργειακή 47

48 κατανάλωση που μετρήθηκε (Cycles * Energy). Περιλαμβάνεται επίσης και το γινόμενο κύκλων λειτουργίας επί ενέργειας επί χώρου (Cycles * Energy * Area), το οποίο όμως αποφασίστηκε να μην είναι το καθοριστικό κριτήριο. Μετά την εύρεση της βέλτιστης επιλογής cache δεδομένων και cache εντολών, χρησιμοποιήσαμε τον Xpress Compiler ώστε να παράγουμε tie προεκτάσεις του αρχικού επεξεργαστή μας. ελέγξαμε την απόδοση κάθε tie προέκτασης που παρήχθη και από αυτές επιλέξαμε αυτή με το μέγιστη βελτίωση στο τομέα των κύκλων που χρειάστηκε για να ολοκληρωθεί ο des.c. Στο τέλος του κεφαλαίου, γίνεται μια σύγκριση της επίδοσης του αρχικού επεξεργαστή, του βελτιστοποιημένου στον τομέα των cache και του τελικού με τις tie επεκτάσεις που δημιουργήσαμε. Αρχικές ρυθμίσεις Ο επεξεργαστής μας ανήκει στην γενιά LX2 των επεξεργαστών της Tensilica και χρησιμοποιεί το σετ εντολών LX2.1. Στηρίχτηκε στο πρότυπο Xpress που προτείνει η Tensilica για την δημιουργία μέγιστα παραμετροποιησιμων επεξεργαστων.το ρολόι του είναι χρονισμενο στα 673MHz, ενώ καταλαμβάνει χώρο,42mm 2. Αυτός ο επεξεργαστής θα λειτουργεί σαν βάση σύγκρισης από εδώ και πέρα και θα είναι ο αρχικός επεξεργαστής σε όλες τις υλοποιήσεις που θα ακολουθησουν.ακολουθουν τα χαρακτηρίστηκα του σετ εντολών του επεξεργαστή: Xtensa ISA version LX2.1 Instruction options 16-bit MAC with 4 bit Accumulator MUL16 MUL32 no yes Fully Pipelined 32 bit integer divider yes Floating Point (coprocessor id ) CLAMPS NSA/NSAU MIN/MAX and MINU/MAXU SEXT no yes yes yes yes 48

49 Boolean Registers yes Number of Coprocessors (NCP) Enable Density Instructions Enable Processor ID Zero-overhead loop instructions Synchronize instruction Conditional store synchronize instruction TIE arbitrary byte enables yes no yes no no no Count of Load/Store units 1 Max instruction width (bytes) 8 L32R hardware support Extended L32R Pipeline length 5 Πίνακας 1: χαρακτηρίστηκα Σετ Εντολών του Αρχικού Επεξεργαστή επίσης ακολουθούν τα χαρακτηρίστηκα διακοπών: Thread Pointer no Interrupts enabled? yes Interrupt count 1 Int type / priority level Timer / 1 High Priority Interrupts yes Interrupt Level count 2 Medium Level Interrupts Timer count no yes Timer count 1 Timer Byte ordering (endianness) Little Endian Number of physical AR registers. 16 forces Call ABI 32 Miscellaneous Special Register count Generate exception on unaligned load/store address Xtensa Exception Architecture XEA2 Πίνακας 2: χαρακτηρίστηκα διακοπών του αρχικού επεξεργαστή align Xtensa Exception Architecture XEA2 49

50 Και τα χαρακτηρίστηκα του διαύλου του επεξεργαστή και των μνημών cache: Enable Processor Interface (PIF) yes Write buffer entries 4 Enable PIF Write Responses no Prioritize Load Before Store no Widths of Cache and Memory Interfaces Width of Instruction Fetch Interface 64 Width of Data Memory/Cache interface 128 Width of PIF interface 32 Width of Interface to instruction cache 64 Instruction Cache size (Bytes) / Line size (Bytes) 124 / 16 Associativity Direct Line Locking no Instruction Cache memory error none Data Cache (Bytes) / Line size (Bytes) 124 / 16 Associativity Direct Write Back no Line Locking no Data Cache memory error none MemoryProtection/MMU Region Protection System RAM start address / size x6 / 512M System ROM start address / size x4 / 128K Πίνακας 3: χαρακτηρίστηκα διαύλου και μνημών του επεξεργαστή Με βάση τα παραπάνω χαρακτηριστικά, ο επεξεργαστής, τρέχοντας την εφαρμογή DES.c της σουίτας Powerstone, είχε την παρακάτω απόδοση: Xtensa Core: "cyn_des_faster_base" ISS Version: Time for Simulation = 1.5 seconds (user = 1.5 system =.) 5

51 Current PC = x6741a Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions 1786 ( 1. ) Instruction fetches ( ) Uncached 185 (.18 ) ICache fetches ( ) ICache misses 1934 ( 1.92 ) 2.46% of ICache fetches Taken branches 1461 ( 1.45 ) Exceptions 29 (.3 ) WindowOverflow 15 (.1 ) WindowUnderflow 14 (.1 ) Loads ( ) Uncached 4 (. ) DCache loads ( ) DCache load misses 1355 ( 1.27 ) 56.39% of DCache loads Stores 2339 ( 2.32 ) Cached 2339 ( 2.32 ) DCache write-thru misses 181 ( 1.79 ) 77.% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions

52 Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead Reset Με έντονο μαύρο βλέπουμε τις αστοχίες των cache. Παρατηρούμε ότι οι αστοχίες της cache δεδομένων ειδικά είναι υπερβολικά πολλές, με 56,39% αστοχία στην φόρτωση δεδομένων και 77% σε αποθηκεύσεις write-through. H cache εντολών από την πλευρά της εμφανίζει καλύτερες επιδόσεις με μόνο 2,46% αστοχιών. συνολικά το σύστημα μας χρειάστηκε κύκλους εργασίας για να ολοκληρώσει το πρόγραμμα. Στο παρακάτω διάγραμμα φαίνονται οι αποτυχίες των cache μνημών, καθώς και ο συνολικός αριθμός κύκλων που χρειάστηκε και η συνολική ενέργεια που δαπανήθηκε σε nj DCache Misses 8. ICache Misses 18. Total Cycles 19. Total Energy Διάγραμμα 15: Απόδοση αρχικού επεξεργαστή. Διερεύνηση ρυθμίσεων Instruction Cache Οπως είδαμε παραπάνω υπάρχουν διάφορες αστοχίες στις μνήμες Cache, οι οποίες καθυστερούν την ολοκλήρωση του προγράμματος. Θα ξεκινήσουμε μια συστηματική 52

53 διερεύνηση, πρώτα της cache εντολών και στη συνεχεία της cache δεδομένων ετσι ώστε να βελτιώσουμε τις συνολικές επιδόσεις του συστήματος. Να σημειώσουμε εδώ ότι το κριτήριο με βάση θα επιλέξουμε την καλύτερη cache είναι οι λιγότερες αστοχίες, καθώς επίσης ότι κατά την διερεύνηση της μιας cache, τα στοιχεία της άλλης μένουν σταθερά. Η μνήμες cache έχουν τρεις μεταβλητές από τις οποίες εξαρτώνται οι επιδόσεις τους: Το associativity, (συσχετισμός) της cache με την υπόλοιπη μνήμη. Σε γενικές γραμμές, η cache είτε είναι απευθείας συσχετισμένη με ένα κομμάτι της μνήμης, είτε είναι συσχετισμένη με 2 ή περισσότερα κομμάτια της μνήμης. Στη συγκεκριμένη περίπτωση, έχουμε να επιλέξουμε ανάμεσα στον απευθείας συσχετισμό ( 1-way associativity) είτε ανάμεσα σε διπλό ή τετραπλό (2-way associativity). Σε γενικές γραμμές όσο πιο πολύπλοκος είναι ο συσχετισμός, τόσο καλύτερες επιδόσεις έχουμε, αλλά αυξάνεται αντίστοιχα το μέγεθος της cache. Το μέγεθος γραμμής της Cache. Αυτό μπορεί να κυμανθεί από 16 έως 64 bit. To συνολικό μέγεθος της Cache. Αυτό κυμαίνεται από 1KB έως 128KB. Προφανώς όσο μεγαλύτερη είναι η cache τόσο λιγότερες είναι οι αστοχίες, Αφού χωράει περισσότερες διευθύνσεις μνήμης, Ωστόσο αυξάνεται σημαντικά ο καταλαμβανόμενος χώρος. Επιπλέον Για μεγάλες τιμές της Cache, μεγαλύτερες των 64KB, αυξάνεται το critical path, και αναγκαζόμαστε να μειώσουμε την συχνότητα ρολογιού του συστήματος. Με βάση τα παραπάνω, έχουμε στην επόμενη σελίδα τις διερευνήσεις της cache εντολών για απευθείας συσχετισμό, διπλό και τετραπλό. Σε κάθε διερεύνηση από τις τρεις μεταβλητές που προηγήθηκαν, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα ακολουθήσουν, η cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στο ίδια διαγράμματα βλέπουμε και τους συνολικούς κύκλους που χρειάστηκαν για να ολοκληρωθεί κάθε φορά η εκτέλεση του προγράμματος DES.c. Όπως θα παρατηρήσουμε, ενώ υπάρχει σημαντική μείωση των αστοχιών της cache εντολών, παρόλα αυτά, οι αστοχίες της cache δεδομένων κρατάνε τους κύκλους σε ένα σταθερό επίπεδο. Αυτός είναι και ο λόγος που χρησιμοποιούμε σαν βασικό κριτήριο τις αστοχίες της cache εντολών και όχι τους συνολικούς κύκλους. Για εποπτικούς λόγους, στα διαγράμματα που ακολουθούν, οι αστοχίες πολλαπλασιάζονται με 1. Η σωστή τιμή βρίσκεται στους πίνακες στο παράρτημα Α. 53

54 Συνολικοι Κυκλοι Λειτουργιας Αστοχιες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 16: Διερεύνηση Cache Εντολών με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοι Κυκλοι Λειτουργιας Αστοχιες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 17:Διερεύνηση Cache Εντολών με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοι Κυκλοι Λειτουργιας Αστοχιες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 18:Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Παρατηρούμε ότι ο πιο σημαντικός παράγοντας είναι το συνολικό μέγεθος της Cache, όπως επίσης ότι μέγεθος 2KB είναι επαρκές. ακολουθούν τα διαγράμματα των αντιστοιχών διερευνησεων για μέγεθος γραμμής 32 bit. 54

55 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 19: Διερεύνηση Cache Εντολών με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 2:Διερεύνηση Cache Εντολών με διπλό συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 21:Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Παρατηρούμε ότι σε σχέση με την διερεύνηση για μέγεθος γραμμής 16bit έχουμε για όλα τα μεγέθη της cache καλύτερες επιδόσεις, όπως είναι άλλωστε και το αναμενόμενο. ακολουθούν τα διαγράμματα των αντίστοιχων διερευνήσεων για μέγεθος γραμμής 64 bit. 55

56 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 22:Διερεύνηση Cache Εντολών με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 23: Διερεύνηση Cache Εντολών με διπλό συσχετισμό και μέγεθος γραμμής 64bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 24: Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Από τις παραπάνω διερευνήσεις παρατηρούμε ότι έχουμε πολλές επιλογές για την cache δεδομένων εάν πάρουμε σαν μοναδικό κριτήριο τις αστοχίες φόρτωσης. Επιπλέον παρατηρούμε ότι υπάρχουν cache με διαφορετικούς συσχετισμούς ή μέγεθος γραμμής αλλά συγκριτικά πολύ μικρή διαφορά στις επιδόσεις. Προκείμενου να κάνουμε την καλύτερη επιλογή από όλα τα παραπάνω, επιλέξαμε από κάθε διερεύνηση που προηγήθηκε, τις τρεις καλύτερες στον τομέα των αστοχιών. Έπειτα βρήκαμε την ενέργεια που καταναλώνει κάθε cache και τον χώρο που καταλαμβάνει. Το τελικό 56

57 κριτήριο επιλέχτηκε να είναι το γινόμενο των συνολικών αστοχιών φόρτωσης επί την ενέργεια που καταναλώθηκε για την ολοκλήρωση της διεργασίας. επίσης το διάγραμμα περιλαμβάνει και το γινόμενο των συνολικών αστοχιών φόρτωσης επί της ενέργειας επί του χώρου που καταλάμβανε κάθε cache, Ωστόσο στην παρούσα εργασία επιλέξαμε να θεωρήσουμε τον χώρο σαν δευτερεύον κριτήριο. Παρατίθεται Ωστόσο για εξαγωγή συμπερασμάτων. Διάγραμμα 25: σύγκριση Cache εντολών με καλύτερες επιδόσεις Οπως μπορούμε να δούμε στους πίνακες με τα αναλυτικά αποτελέσματα, ο συνδυασμός με το μικρότερο γινόμενο αστοχιών επί ενέργειας, είναι, μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 32k και απευθείας συσχετισμός. παρατηρούμε επίσης ότι αυτός ο συνδυασμός χρειάζεται και τους λιγότερους κύκλους λειτουργίας για να ολοκληρώσει το πρόγραμμα. Ωστόσο, δεν είναι η βέλτιστη λύση εάν λάβουμε υπόψη μας και τον καταλαμβανόμενο χώρο. Σε αυτή την περίπτωση ο βέλτιστος συνδυασμός έχει μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 16KΒ και διπλό συσχετισμό. 57

58 Διερεύνηση ρυθμίσεων Data Cache Αναλόγως με προηγουμένως, θα κάνουμε μια συστηματική διερεύνηση των χαρακτηριστικών της cache δεδομένων, ετσι ώστε να καταλήξουμε σε ένα βέλτιστο συνδυασμό. όπως και στην διερεύνηση της cache εντολών, οι μεταβλητές είναι: ο συσχετισμός της cache (απευθείας, διπλός ή τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος. Οπως είχαμε δει η αρχική μορφή της cache δεδομένων είχε ένα μεγάλο αριθμό αστοχιών, συγκεκριμένα 56,39%. από αυτό μπορούμε να συμπεράνουμε, ότι η cache δεδομένων ήταν από τους βασικούς επιβραδυντικούς παράγοντες, και ότι εάν μειώσουμε σημαντικά των αριθμό των αστοχιών, θα έχουμε μεγάλες βελτίωσης στην ταχυτητα. όπως και στην cache εντολών, το καθοριστικό κριτήριο επιλογής του καλύτερου συνδυασμού σε πρώτο επίπεδο ήταν ο αριθμός των αστοχιών, όπου ο μικρότερος αριθμός είναι και ο καλύτερος. Σε κάθε διερεύνηση από τις τρεις μεταβλητές που προηγήθηκαν, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα ακολουθήσουν, η cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στο ίδια διαγράμματα βλέπουμε και τους συνολικούς κύκλους που χρειάστηκαν για να ολοκληρωθεί κάθε φορά η εκτέλεση του προγράμματος DES.c. Να σημειωθεί επίσης ότι στα διαγράμματα που ακολουθούν οι αστοχίες της cache είναι πολλαπλασιασμένες επί 1 για εποπτικούς λόγους. Στις επόμενες σελίδες ακολουθούν τα διαγράμματα με τις μέτρησης που λάβαμε. 58

59 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 26: Διερεύνηση Cache Δεδομένων με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 27: Διερεύνηση Cache Δεδομένων με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 28:Διερεύνηση Cache Δεδομένων με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit 59

60 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 29: Διερεύνηση Cache Δεδομένων με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * 1 Διάγραμμα 3: Διερεύνηση Cache Δεδομένων με διπλό συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * 1 Διάγραμμα 31: Διερεύνηση Cache Δεδομένων με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit 6

61 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 32: Διερεύνηση Cache Δεδομένων με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * 1 Διάγραμμα 33: Διερεύνηση Cache Δεδομένων με διπλό συσχετισμό και μέγεθος γραμμής 64bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομενων * 1 Διάγραμμα 34: Διερεύνηση Cache Εντολών με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Από τις παραπάνω διερευνήσεις παρατηρούμε ότι έχουμε πολλές επιλογές για την cache δεδομένων εάν πάρουμε σαν μοναδικό κριτήριο τις αστοχίες φόρτωσης. Επιπλέον παρατηρούμε ότι υπάρχουν cache με διαφορετικούς συσχετισμούς ή μέγεθος γραμμής αλλά συγκριτικά πολύ μικρή διαφορά στις επιδόσεις. Προκείμενου να κάνουμε την καλύτερη επιλογή από όλα τα παραπάνω, επιλέξαμε από κάθε διερεύνηση που προηγήθηκε, τις τρεις καλύτερες στον τομέα των αστοχιών. Έπειτα βρήκαμε την ενέργεια που καταναλώνει κάθε cache και τον χώρο που καταλαμβάνει. Το τελικό κριτήριο επιλέχτηκε να είναι το γινόμενο των συνολικών αστοχιών φόρτωσης επί την 61

62 ενέργεια που καταναλώθηκε για την ολοκλήρωση της διεργασίας. επίσης το διάγραμμα περιλαμβάνει και το γινόμενο των συνολικών αστοχιών φόρτωσης επί της ενέργειας επί του χώρου που καταλάμβανε κάθε cache, Ωστόσο στην παρούσα εργασία επιλέξαμε να θεωρήσουμε τον χώρο σαν δευτερεύον κριτήριο. Παρατίθεται Ωστόσο για εξαγωγή συμπερασμάτων. Διάγραμμα 35: σύγκριση Cache δεδομένων με καλύτερες επιδόσεις Οπως μπορούμε να δούμε στους πίνακες με τα αναλυτικά αποτελέσματα, ο συνδυασμός με το μικρότερο γινόμενο αστοχιών επί ενέργειας, είναι, μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 64KB και απευθείας συσχετισμός. Ωστόσο, δεν είναι η βέλτιστη λύση εάν λάβουμε υπόψη μας και τον καταλαμβανόμενο χώρο. Σε αυτή την περίπτωση ο βέλτιστος συνδυασμός έχει μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 16KΒ και διπλό συσχετισμό. από τα δεδομένα μας βλέπουμε ότι οι δυο cache χρειάζονται, τον ίδιο αριθμό κύκλων για να ολοκληρώσουν την εκτέλεση του προγράμματος, επομένως σε αυτή την περίπτωση η cache εντολών προφανώς καθυστερεί το σύστημα. Επιλογή βέλτιστων ρυθμίσεων Με βάση τις διερευνήσεις της Cache εντολών και της Cache δεδομένων, καταλήγουμε ότι δυο είναι τα πιθανά βελτιστοποιημένα ζευγάρια των δυο cache: Να έχουμε στην cache εντολών μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 32k και απευθείας συσχετισμό και στην cache δεδομένων μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 64KB και απευθείας συσχετισμό. 62

63 Να έχουμε στην cache εντολών μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 32k και απευθείας συσχετισμό και στην cache δεδομένων μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 16KΒ και διπλό συσχετισμό. Στο παρακάτω διάγραμμα φαίνονται για τις δυο ρυθμίσεις που αναφέρθηκαν παραπάνω αλλά και για τις Αρχικές ρυθμίσεις μας, οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί η εφαρμογή DES.C, το γινόμενο κύκλων επί καταναλισκόμενης ενέργειας καθώς και το γινόμενο των κύκλων επί της καταναλισκόμενης ενέργειας, επί του καταλαμβανόμενου χώρου (διαιρεμενοι με 3x1 4 για εποπτικούς λόγους) Κυκλοι λειτουργιας Κυκλοι λειτουργιας* Ενεργεια/3 Κυκλοι λειτουργιας* Ενεργεια*Καταλαμβανομενος χωρος/3 5 Αρχικες ρυθμισεις Υποψηφιες Ρυθμισεις1 Υπ οψηφιες Ρυθμισεις2 Διάγραμμα 36: σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή Οπου υποψήφιες ρυθμίσεις 1 cache εντολών με μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 32k και απευθείας συσχετισμό και cache δεδομένων με μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 64KB και απευθείας συσχετισμό, και υποψήφιες ρυθμίσεις 2 cache εντολών με μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 32k και απευθείας συσχετισμό και cache δεδομένων με μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 16KΒ και διπλό συσχετισμό. Παρατηρούμε ότι η δεύτερη ομάδα ρυθμίσεων υπερέχει σε όλα τα μέτρα σύγκρισης (αν και όπως μπορούμε να δούμε στους αναλυτικούς πίνακες, έχει αρκετά μεγαλύτερο μέγεθος από το αρχικό μας configuration). Τελικά, ρυθμίζοντας ανάλογα την cache δεδομένων και την cache εντολών, επιτύχαμε μείωση των απαραίτητων κύκλων κατά 45,56%, μείωση της καταναλισκόμενης ενέργειας κατά 23,3% με κόστος την αύξηση του χώρου του συστήματος μας κατά 138% Επιλογή επεκτάσεων TIEs Αφού μετά την διερεύνηση που κάναμε για τις cache του συστήματος καταλήξαμε σε ένα βελτιστοποιημένο configuration, μένει να δούμε πόσο μπορούμε να βελτιώσουμε το σύστημα με επεκτάσεις TIE. Για να επιτευχθεί αυτό, χρησιμοποιήσαμε τον Xpress Compiler, ρυθμίζοντας τον ετσι ώστε να παράγει με όλες τις δυνατές μεθόδους 63

64 επεκτάσεις TIE, και μετά να συγκρίνει τις επιδόσεις τους. Οι επεκτάσεις που παράγονται μπορούν να ενσωματωθούν με δυο τρόπους στον επεξεργαστή: είτε αφήνοντας τον αρχικό επεξεργαστή όπως ήταν και προσθέτοντας το υλικό που χρειάζεται για να πραγματοποιούνται οι επιπλέον λειτουργίες, είτε απομακρύνοντας υλικό που δεν χρειάζεται για τις επιπλέον λειτουργίες και αφήνοντας τελικά μόνο τα απολύτως απαραίτητα. Στο παρακάτω διάγραμμα φαίνονται και οι δυο περιπτώσεις, καθώς και οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs Base + New TIE 17. Minimum + New TIE 21. Total Cycles 2-2 αρχικό configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie xpres(6).tie xpres(7).tie xpres(8).tie xpres(9).tie xpres(1).tie xpres(11).tie xpres(12).tie xpres(13).tie xpres(14).tie xpres(15).tie xpres(16).tie xpres(17).tie xpres(18).tie xpres(19).tie xpres(2).tie xpres(21).tie xpres(22).tie xpres(23).tie xpres(24).tie Διάγραμμα 37: διερεύνηση για TIEs Οπως παρατηρούμε υπάρχουν διάφοροι συνδυασμοί επεκτάσεων οι οποίοι βελτιώνουν κατά πολύ την απόδοση του κυκλώματος, ορισμένοι ακόμα και κατά 1%. επίσης βλέπουμε ότι υπάρχουν επεκτάσεις, οι οποίες εάν ενσωματωθούν σε έναν επεξεργαστή από τον οποίο βγάλουμε όλες τις επιπλέον λειτουργίες εκτός από αυτές που είναι απαραίτητες για τις επεκτάσεις, μειώνεται το μέγεθος του συστήματος και ταυτόχρονα μειώνονται οι κύκλοι λειτουργίας. Ωστόσο Όπως βλέπουμε και στο διάγραμμα, οι επεκτάσεις με τις καλύτερες επιδόσεις ακόμα και αν αφαιρέσουν περιττό υλικό από τον επεξεργαστή, πάλι καταλήγουν να έχουν αυξημένες διαστάσεις σε σχέση με τον αρχικό. Οι επεκτάσεις με τις μεγαλύτερες βελτίωσης στο θέμα των κύκλων λειτουργίας, όπως μπορούμε να δούμε και στον αντίστοιχο πίνακα στο τέλος του κεφαλαίου, είναι οι: 64

65 xpress.tie xpress(1).tie xpress(12).tie xpress(18).tie Βέβαια τα ονόματα αυτά δεν μας δίνουν πληροφορίες για το πως επιτυγχάνονται οι βελτίωσης, αυτό όμως θα μας απασχολήσει μόνο όταν επιλέξουμε ένα τελικό tie. Με βάση αυτά τα TIE, δημιουργήσαμε τις νέες μορφές του επεξεργαστή, ώστε να ελέγξουμε τις ενεργειακές τους απαιτήσεις, καθώς και την βελτίωση που προκαλούν στους κύκλους λειτουργίας. Τα αποτελέσματα φαίνονται στο παρακάτω διάγραμμα, όπου Παρατίθεται και το γινόμενο κύκλων επί ενέργειας (διαιρεμένο με 5x1, για εποπτικούς λόγους) Total Cy cles 18. Total Energy cy cles*energy /5 4 2 Αρχικο Configuration xpres.tie Xpres(1).tie Xpres(12).tie Xpres(18).tie Διάγραμμα 38:απόδοση Βελτιωμένου κατά Cache επεξεργαστή με προσθήκες TIE Οπως βλέπουμε υπάρχει σημαντική βελτίωση και στις τέσσερις περιπτώσεις. Η καλύτερη και των τεσσάρων φαίνεται να είναι η xpress.tie με 5523 κύκλους λειτουργίας και 16936nj ενέργειας. έχουμε δηλαδή μια βελτίωση 56% στους κύκλους εργασίας και 38% στην ενέργεια. Το τίμημα είναι ότι αυξάνεται κατά 32,9% το μέγεθος του επεξεργαστή. Οι Επιλεγμένες επεκτάσεις: Από την ανάλυση του TIE αρχείου που επιλέξαμε βλέπουμε ότι αξιοποιήθηκαν δυο μέθοδοι για την βελτίωση των επιδόσεων: Δημιουργήθηκαν Fusion εντολές, που συνδύαζαν σε ένα κύκλο, δυο ή περισσότερες εντολές Δημιουργήθηκαν FLIX εντολές μήκους 64 bit, χωρισμένες σε δυο τύπους: 65

66 o Σε αυτές που χώριζαν τα 64 bit σε 2 ομάδες ώστε κάθε ομάδα να αντιστοιχεί σε μια μικρότερη εντολή. o Σε αυτές που χώριζαν τα 64 bit σε 3 ομάδες με την αντίστοιχη λογική. Συγκεκριμένα δημιουργήθηκαν οι εξής fusion εντολές: fusion Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SRLI, AND, OR, L32I, EXTUI, ADDX4, OR. fusion Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SRLI, EXTUI, AND, OR, L32I, ADDX4, OR. fusion.extui.addx4.l32i.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: ADDX4, OR, EXTUI, L32I. fusion1 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SRLI, EXTUI, AND, OR, OR, L32I, ADDX4. fusion2 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: EXTUI, EXTUI, AND, EXTUI, AND, OR, L32I, OR, ADDX4, OR. fusion3 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: EXTUI, OR, EXTUI, AND, L32I, ADDX4, OR. fusion4 66

67 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SRC, SSAI, OR, AND, EXTUI, S32I, OR, EXTUI, SLLI. fusion.s32i.addi Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: ADDI, S32I. fusion.l32i.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: L32I, XOR. fusion.xor.src Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SRC, XOR. fusion.extui.addx4.l32i.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: OR, EXTUI, ADDX4, L32I. fusion.l32i.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: L32I, XOR. fusion.slli.slli.or.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SLLI, SLLI, OR, OR. fusion.srli.xor.and Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: AND, SRLI, XOR. 67

68 fusion.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SLLI, XOR. fusion.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, SLLI. fusion5 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: OR, AND, OR, AND, SRLI, SLLI, AND, XOR, XOR, AND, AND, SRLI. fusion.slli.srli.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SLLI, SRLI, OR. fusion1.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, SLLI. fusion2.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SLLI, XOR. fusion.srli.xor.and Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: AND, XOR, SRLI. fusion.slli.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SLLI, 68

69 OR. fusion.extui.addx4 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: ADDX4, EXTUI. fusion.extui.addx4 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: ADDX4, EXTUI. fusion1.extui.addx4 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: ADDX4, EXTUI. fusion2.extui.addx4 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: ADDX4, EXTUI. fusion.or.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: OR, OR. fusion3.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, SLLI. fusion.extui.and Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: EXTUI, AND. fusion6 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, 69

70 XOR, AND, AND, SRLI, XOR, XOR, SLLI, XOR. fusion7 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, AND, EXTUI, XOR, AND, XOR, SLLI, XOR, XOR. fusion4.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, SLLI. fusion5.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, SLLI. fusion.srli.and Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: AND, SRLI. fusion.srli.srli.and.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: OR, AND, SRLI, SRLI. fusion.extui.xor.extui Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: EXTUI, XOR, EXTUI. fusion1.srli.xor.and Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: AND, SRLI, XOR. fusion2.srli.xor.and 7

71 Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: AND, XOR, SRLI. fusion6.slli.xor Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: XOR, SLLI. fusion.slli.srli.or Μια Fusion εντολή που προέκυψε από τον συνδυασμό των εξής εντολών:: SLLI, SRLI, OR.. Ο πρώτος τύπος FLIX εντολών που δημιουργήθηκε πήρε την ονομασία flix64_ και χωρίζει τα 64 bits σε 2 slots σε δυο ομάδες δηλαδή, την flix64 slot και flix64 slot1. Στην flix64 slot μπορούν να κωδικοποιηθούν οι παρακάτω εντολές (περιλαμβάνονται και fusion που δημιουργήθηκαν): ABS, ADD, ADDI, ADDMI, ADDX2, ADDX4, ADDX8, ALL4, ALL8, AND, ANDB, ANDBC, ANY4, ANY8, BALL, BANY, BBC, BBCI, BBS, BBSI, BEQ, BEQI, BEQZ, BF, BGE, BGEI, BGEU, BGEUI, BGEZ, BLT, BLTI, BLTU, BLTUI, BLTZ, BNALL, BNE, BNEI, BNEZ, BNONE, BT, CLAMPS, EXTUI, J, JX, L16SI, L16UI, L32I, L32R, L8UI, MAX, MAXU, MIN, MINU, MOV.N, MOVEQZ, MOVF, MOVGEZ, MOVI, MOVLTZ, MOVNEZ, MOVT, MUL16S, MUL16U, MULL, NEG, NOP, NSA, NSAU, OR, ORB, ORBC, S16I, S32I, S8I, SEXT, SLL, SLLI, SRA, SRAI, SRC, SRL, SRLI, SSA8B, SSA8L, SSAI, SSL, SSR, SUB, SUBX2, SUBX4, SUBX8, XOR, XORB, fusion, fusion.extui.addx4.l32i.or, fusion.l32i.xor, fusion.s32i.addi, fusion.slli.or, fusion.slli.slli.or.or, fusion.slli.srli.or, fusion.slli.xor, fusion.srli.xor.and, fusion.xor.src, fusion, fusion.extui.addx4.l32i.or, fusion.l32i.xor, fusion.slli.xor, fusion.srli.xor.and, fusion1, fusion1.slli.xor, fusion2, fusion2.slli.xor, fusion3, fusion4, fusion5. Στην flix64 slot μπορούν να κωδικοποιηθούν οι παρακάτω εντολές (περιλαμβάνονται και fusion που δημιουργήθηκαν): 71

72 ADDI, ADDMI, AND, xt_widebranch18, BEQZ, BNEZ, EXTUI, MOV.N, MOVI, NOP, OR, SLLI, SRLI, XOR, fusion.extui.addx4, fusion.extui.and, fusion.extui.xor.extui, fusion.or.or, fusion.slli.or, fusion.slli.srli.or, fusion.srli.and, fusion.srli.srli.and.or, fusion.extui.addx4, fusion1.extui.addx4, fusion1.srli.xor.and, fusion2.extui.addx4, fusion2.srli.xor.and, fusion3.slli.xor, fusion4.slli.xor, fusion5.slli.xor, fusion6, fusion6.slli.xor, fusion7. Ο δεύτερος τύπος FLIX εντολών που δημιουργήθηκε πήρε την ονομασία flix64_1 και χωρίζει τα 64 bits σε 3 slots, σε τρεις ομάδες δηλαδή, την flix64_1_slot, flix64_1_slot1 και flix64_1_slot2. Στην flix64_1_slot μπορούν να κωδικοποιηθούν οι παρακάτω εντολές (περιλαμβάνονται και fusion που δημιουργήθηκαν): ABS, ADD, ADDX2, MOV.N, NOP, fusion.slli.srli.or Στην flix64_1_slot1 μπορούν να κωδικοποιηθούν οι παρακάτω εντολές (περιλαμβάνονται και fusion που δημιουργήθηκαν): NOP, fusion.slli.srli.or Στην flix64_1_slot2 μπορούν να κωδικοποιηθούν οι παρακάτω εντολές: J, NOP 72

73 Κεφάλαιο 6 Αρχιτεκτονική Σωλήνωσης με δυο Επεξεργαστές Η δεύτερη αρχιτεκτονική που ελέγξαμε ήταν η αρχιτεκτονική σωλήνωσης με δυο επεξεργαστές. όπως αναφέρθηκε και στο Κεφάλαιο 4, κάθε επεξεργαστής, περιλαμβάνει την δική του cache εντολών και την δική του cache δεδομένων. Δεν υπάρχει κοινή μνήμη μέσω της οποίας να επικοινωνούν οι δυο επεξεργαστές, αλλά μια ουρά FIFO η οποία συνδέει την έξοδο του πρώτου επεξεργαστή με την είσοδο του δεύτερου. Core 1 FIFO Core 2 Διάγραμμα 39: Αρχιτεκτονική Σωλήνωσης με δυο πυρήνες Καθώς αυτό είναι το πρώτο μας σύστημα στο οποίο έχουμε περισσότερους από έναν επεξεργαστή, αναγκαστήκαμε να προσθέσουμε κάποια βήματα στην διερεύνηση μας. Ένα σημαντικό μέρος της προσπάθειας, ήταν να χωρίσουμε το DES.C σε δυο μέρη ετσι ώστε να υπάρχει αρμονική λειτουργία ανάμεσα στους δυο επεξεργαστές. Μια άλλη δυσκολία ήταν το πως θα εξομοιώναμε την λειτουργία του συστήματος. Δυστυχώς το περιβάλλον Xtensa Xplorer, δεν περιλαμβάνει την εξομοίωση ενός πολυεπεξεργαστικου συστήματος, σε γραφικό περιβάλλον. Η διαδικασία είναι λίγο πιο πολύπλοκη και απαιτεί την εργασία σε γραμμή εντολών. Για την εξομοίωση συστημάτων με ένα επεξεργαστή ουσιαστικά αυτό που καλείται μέσα από το γραφικό περιβάλλον Xtensa Xplorer είναι μια εφαρμογή της Tensilica, o εξομοιωτής σετ εντολών (Instruction Set Simulator ISS). αυτό το πρόγραμμα όμως δεν είναι το κατάλληλο για πολυεπεξεργαστικες εξομοιώσεις. Σε αυτές τις περιπτώσεις χρησιμοποιείται το XTMP (Xtensa Modeling Protocol), ένα σύνολο functions και μεταβλητών που μπορούν να περιγράψουν και να εξομοιώσουν ένα πολυπεξεργαστικο σύστημα. ετσι η δουλεία μας συνίσταται σε γράψιμο κώδικα C χρησιμοποιώντας τις κατάλληλες functions από το XTMP. υπάρχουν συγκεκριμένες functions οι οποίες φροντίζουν για την εικονική δημιουργία των επεξεργαστών, μνημών, διαύλων καθώς άλλων περιφερειακών συσκευών. Για όλα τα πολυεπεξεργαστικα συστήματα που θα περιγράφουν και 73

74 αξιολογηθούν παρακάτω υπάρχουν οι αντίστοιχοι κώδικες που τα περιγράφουν στα παραρτήματα. Η πορεία που ακολουθήσαμε είναι ανάλογη με την πορεία που ακολουθήθηκε στο Κεφάλαιο 5. αρχικά περιγράψαμε το σύστημα μας με την χρήση του XTMP, στη συνεχεία προσαρμόσαμε τον κώδικα του DES.c ετσι ώστε να τρέχει σωστά σε ένα σύστημα με δυο Επεξεργαστές. Μετρήσαμε την απόδοση του συστήματος με τον αρχικό μας επεξεργαστή και στη συνεχεία κάναμε μια διερεύνηση για την cache εντολών και για την cache δεδομένων κάθε επεξεργαστή. Αφού επιλέχτηκε η βέλτιστη λύση και για τους δυο επεξεργαστές, δημιουργήσαμε TIE επεκτάσεις και για τους δυο και μετρήσαμε την βέλτιστη απόδοση του συστήματος. Αρχική υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Ο επεξεργαστής που στέλνει δεδομένα στην FIFO αναφέρεται σαν producer ενώ αυτός που λαμβάνει αναφέρεται σαν consumer Τα αποτελέσματα που πήραμε έχουν ως εξής: Xtensa Core: "producer" ISS Version: Current PC = x6127a Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches ( ) Uncached 185 (.29 ) 74

75 ICache fetches ( ) ICache misses 551 (.86 ) 1.24% of ICache fetches Taken branches 972 ( 1.51 ) Exceptions 3 (. ) WindowOverflow 2 (. ) WindowUnderflow 1 (. ) Loads 954 ( ) Uncached 4 (. ) DCache loads 95 ( ) DCache load misses 4866 ( 7.56 ) 51.22% of DCache loads Stores 1527 ( 2.37 ) Cached 1527 ( 2.37 ) DCache write-thru misses 717 ( 1.11 ) 46.95% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays

76 Special instructions Loop overhead TIE global stalls Reset Xtensa Core: "consumer" ISS Version: Current PC = x6127a Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions 4318 ( 1. ) Instruction fetches ( ) Uncached 185 (.43 ) ICache fetches ( 78.28) ICache misses 316 (.73 ).94% of ICache fetches Taken branches 617 ( 1.43 ) Exceptions 29 (.7 ) WindowOverflow 15 (.3 ) WindowUnderflow 14 (.3 ) Loads 9661 ( ) 76

77 Uncached 4 (.1 ) DCache loads 9667 ( ) DCache load misses 4267 ( 9.92 ) 44.14% of DCache loads Stores 2339 ( 5.44 ) Cached 2339 ( 5.44 ) DCache write-thru misses 1454 ( 3.38 ) 62.16% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Με έντονο μαύρο βλέπουμε τις αστοχίες των cache. βλέπουμε ότι και στους δυο επεξεργαστές, οι cache δεδομένων έχουν σημαντικό ποσοστό αστοχιών, Ωστόσο το 77

78 σύστημα μας χρειάστηκε μόνο κύκλους εργασίας για να ολοκληρώσει το πρόγραμμα. Αφού οι δυο επεξεργαστές λειτουργούν στην σειρά, οι κύκλοι λειτουργίας που μας ενδιαφέρουν είναι του τελευταίου επεξεργαστή ο οποίος ολοκληρώνει το πρόγραμμα. Στις επόμενες σελίδες θα δούμε πως με την κατάλληλη διερεύνηση μπορεί να μειωθεί αυτό περισσότερο. Πρέπει να σημειωθεί ότι η διερεύνηση για κάθε επεξεργαστή θα γίνει ξεχωριστά, κάτω από το περιβάλλον του Xtensa Xplorer και όχι μέσω XTMP. Πρώτος Επεξεργαστής: Διερεύνηση ρυθμίσεων Instruction Cache Οπως είδαμε παραπάνω υπάρχουν διάφορες αστοχίες στις μνήμες Cache, οι οποίες καθυστερούν την ολοκλήρωση του προγράμματος. Θα ξεκινήσουμε μια συστηματική διερεύνηση, πρώτα της cache εντολών και στη συνεχεία της cache δεδομένων ετσι ώστε να βελτιώσουμε τις συνολικές επιδόσεις του συστήματος. Να σημειώσουμε εδώ ότι το κριτήριο με βάση το οποίο θα επιλέξουμε την καλύτερη cache είναι οι λιγότερες αστοχίες, καθώς επίσης ότι κατά την διερεύνηση της μιας cache, τα στοιχεία της άλλης μένουν σταθερά. Οπως και στη διερεύνηση για τον μόνο επεξεργαστή, οι cache έχουν τρεις μεταβλητές: τον συσχετισμό (απευθείας, διπλός, τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος Σε κάθε διερεύνηση της cache εντολών, από τις τρεις μεταβλητές που προηγήθηκαν, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα ακολουθήσουν, η cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στα διαγράμματα επίσης εμφανίζονται οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί το πρόγραμμα του επεξεργαστή, που εκτελεί την λειτουργία της παραγωγής των υποκλείδιων, αλλά όχι της κρυπτογραφησης. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 78

79 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 4: Διερεύνηση Cache Εντολών "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 41:Διερεύνηση Cache Εντολών "Producer"με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 42:Διερεύνηση Cache Εντολών "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 64 bit Παρατηρούμε ότι εξαρχής, οι αστοχίες της cache εντολών, δεν ήταν πολλές και ως εκ τούτου, δεν περιμένουμε σημαντικές βελτιωσεις. Ακολουθούν τα διαγράμματα για τις cache εντολών με διπλό συσχετισμό. 79

80 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 43:Διερεύνηση Cache Εντολών "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 44:Διερεύνηση Cache Εντολών "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 45:Διερεύνηση Cache Εντολών "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 64 bit Η εικόνα που βλέπουμε είναι παρόμοια με την εικόνα των cache απευθείας συσχετισμού. Οι κύκλοι παραμένουν υψηλοί και αυτό οφείλεται στην cache δεδομένων, που φρενάρει το σύστημα. ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 8

81 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 46:Διερεύνηση Cache Εντολών "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 47: Διερεύνηση Cache Εντολών "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 48: Διερεύνηση Cache Εντολών "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Τα διαγράμματα μας δίνουν μια εικόνα αντιστοιχεί με τις προηγούμενες. Για να επιλέξουμε στη καλύτερη cache εντολών για την εφαρμογή μας θα λάβουμε υπόψη μας, και τις ενέργεια του συστήματος. από τα παραπάνω διαγράμματα επιλέξαμε τα 3 καλύτερα από το καθένα και τα συγκρίναμε στο παρακάτω διάγραμμα. Το μέτρο σύγκρισης είναι το γινόμενο αστοχιών cache επί την καταναλισκόμενη ενέργεια. επίσης 81

82 το διάγραμμα περιλαμβάνει και το γινόμενο των συνολικών αστοχιών φόρτωσης επί της ενέργειας επί του χώρου που καταλάμβανε κάθε cache. Διάγραμμα 49: σύγκριση Cache Εντολών "Producer" με καλύτερες επιδόσεις από το διάγραμμα (και από τους πίνακες που βρίσκονται στα παραρτήματα) βλέπουμε ότι το καλύτερο γινόμενο αστοχιών επί ενέργειας έχει η cache με απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB. Παρατηρούμε επίσης ότι αυτός ο συνδυασμός χρειάζεται και τους λιγότερους κύκλους λειτουργίας για να ολοκληρώσει το πρόγραμμα και είναι και ο βέλτιστος ακόμα και αν λάβουμε υπόψη μας τον παράγοντα χώρου. Εξερεύνηση ρυθμίσεων Data Cache Αναλόγως με προηγουμένως, θα κάνουμε μια συστηματική διερεύνηση των χαρακτηριστικών της cache δεδομένων, ετσι ώστε να καταλήξουμε σε ένα βέλτιστο συνδυασμό. όπως και στην διερεύνηση της cache εντολών, οι μεταβλητές είναι: ο συσχετισμός της cache (απευθείας, διπλός ή τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος. όπως είχαμε δει, η cache δεδομένων ήταν ένας από τους βασικούς επιβραδυντικούς παράγοντες και ως εκ τούτου περιμένουμε να δούμε ουσιαστικές βελτίωσης στην απόδοση, βελτιστοποιώντας την. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 82

83 5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 5: Διερεύνηση Cache Δεδομένων "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 51: Διερεύνηση Cache Δεδομένων "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 52: Διερεύνηση Cache Δεδομένων "Producer" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό. 83

84 5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 53: Διερεύνηση Cache Δεδομένων "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 54: Διερεύνηση Cache Δεδομένων "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 55: Διερεύνηση Cache Δεδομένων "Producer" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 84

85 5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 56: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 57: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 58: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Σε όλα τα παραπάνω διάγραμμα υπάρχει ένα κοινό στοιχείο: βλέπουμε ότι έχουμε σημαντικές βελτιώσεις όταν η Cache γίνεται 2ΚΒ, και ακόμα καλύτερες αποδόσεις, όταν γίνεται 4KB. Περαιτέρω αύξηση του μεγέθους της Cache δεν ωφελεί, καθώς οι αστοχίες κυμαίνονται στο ίδιο επιπεδο. Θα επιλέξουμε από όλα τα παραπάνω διαγράμματα τις τρεις καλύτερες cache δεδομένων και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενέργειας. 85

86 Διάγραμμα 59: : Σύγκριση Cache δεδομένων "Producer" με καλύτερες επιδόσεις Καταλήξαμε ότι η καλύτερη cache δεδομένων από άποψης αστοχιών επί ενέργειας έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. επιπλέον η ίδια, έχει επίσης τους λιγότερους κύκλους λειτουργίας και χρειάζεται τον μικρότερο χώρο. Επιλογή βέλτιστων ρυθμίσεων Από τα παραπάνω καταλήξαμε ότι η βέλτιστη cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB και η βέλτιστη cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. Στο παρακάτω διάγραμμα βλέπουμε για τον επεξεργαστή με τις παραπάνω cache καθώς και για τον αρχικό μας επεξεργαστή, τους κύκλους που χρειάστηκαν για να ολοκληρωθεί η εφαρμογή (πολλαπλασιασμένοι με 3x1 4 για εποπτικούς λόγους), το γινόμενο κύκλων επί καταναλισκόμενης ενέργειας καθώς και το γινόμενο των κύκλων επί της καταναλισκόμενης ενέργειας, επί του καταλαμβανόμενου χώρου. 86

87 Κύκλοι Λειτ ουργίας *1 Κύκλοι Λειτ ουργίας * Εν έργειας Κύκλοι Λειτ ουργίας * Εν έργειας * Καταλαμβαν ομενος Χωρος 1 5 Αρχικές ρυθμίσεις Βελτιστοποιημένες Διάγραμμα 6: Σύγκριση απόδοσης αρχικού επεξεργαστή και βελτιστοποιημένου Τελικά, ρυθμίζοντας ανάλογα την cache δεδομένων και την cache εντολών, επιτύχαμε μείωση των απαραίτητων κύκλων κατά 44% μείωση της καταναλισκόμενης ενέργειας κατά 37% με κόστος την αύξηση του χώρου του συστήματος μας κατά 43%. Επιλογή επεκτάσεων TIEs Αφού μετά την διερεύνηση που κάναμε για τις cache του συστήματος καταλήξαμε σε ένα βελτιστοποιημένο configuration, μένει να δούμε πόσο μπορούμε να βελτιώσουμε το σύστημα με επεκτάσεις TIE. όπως και προηγουμένως, ρυθμίσαμε τον Xpress Compiler ώστε να παράγει επεκτάσεις TIE. Στο παρακάτω διάγραμμα φαίνονται οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs καθώς και ο χώρος που θα καταλαμβάνει ο επεξεργαστής μας μετά την υλοποίηση του απαραίτητου υλικού για την λειτουργία των επεκτάσεων. 87

88 Base + New TIE 17. Minimum + New TIE 21. Total Cycles -1-2 Αρχικο Configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie xpres(6).tie xpres(7).tie xpres(8).tie xpres(9).tie xpres(1).tie xpres(11).tie xpres(12).tie xpres(13).tie Διάγραμμα 61: διερεύνηση για TIEs στον επεξεργαστή "Producer" Παρατηρούμε ότι υπάρχουν τρία TIE αρχεία, τα οποία έχουν εντυπωσιακή βελτίωση καθώς ρίχνουν τους κύκλους λειτουργίας από τους 7 περίπου στους 25! Οι επεκτάσεις με τις μεγαλύτερες βελτιώσεις στο θέμα των κύκλων λειτουργίας, όπως μπορούμε να δούμε και στον αντίστοιχο πίνακα στο τέλος του κεφαλαίου, είναι οι: xpress.tie xpress(1).tie xpress(6).tie Οπως είχαμε πει και στο παρελθον, τα ονόματα αυτά δεν μας δίνουν πληροφορίες για το πως επιτυγχάνονται οι βελτιώσεις, αυτό όμως θα μας απασχολήσει μόνο όταν επιλέξουμε ένα τελικό tie. 88

89 Total Cycles 18. Total Energy cycles*energy Αρχικο Configuration xpres.tie Xpres(1).tie Xpres(6).tie Διάγραμμα 62: Σύγκριση απόδοσης με και χωρίς προσθήκες TIE στον "Producer" Βλέπουμε ότι υπάρχει σημαντική βελτίωση και στις τρεις περιπτώσεις, και μάλιστα βελτίωση και στην ενέργεια αλλά και στους κύκλους. Το καλύτερο γινόμενο κύκλων επί ενέργειας έχει το Xpress(6).tie, το οποίο χρειάστηκε 2438 κύκλους (περισσότερους από ότι το xpress.tie και το Xpress(1).tie) και την λιγότερη ενέργεια με 5571nj. Πετύχαμε 66% βελτίωση στο θέμα των κύκλων λειτουργίας και 53% βελτίωση σε κύκλους. Το τίμημα ήταν ότι αυξήθηκε κατά 25% ο καταλαμβανόμενος χώρος. Δεύτερος Επεξεργαστής: Εξερεύνηση ρυθμίσεων Instruction Cache Ακολουθούμε την ίδια διαδικασία που κάναμε και για τον πρώτο επεξεργαστή του συστήματος. Σε κάθε διερεύνηση της cache εντολών, από τις τρεις μεταβλητές που 89

90 προηγήθηκαν, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα ακολουθήσουν, η cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στα διαγράμματα επίσης εμφανίζονται οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί το πρόγραμμα του επεξεργαστή, που εκτελεί την λειτουργία της κρυπτογράφησης των δεδομένων και του ελέγχου σωστού αποτελέσματος. Δεν έχουμε παραγωγή υποκλειδίων, καθώς αυτά δημιουργούνται στον πρώτο επεξεργαστη. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 63: Διερεύνηση Cache Εντολών " Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 64: Διερεύνηση Cache Εντολών " Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit 9

91 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 65: : Διερεύνηση Cache Εντολών " Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Όπως βλέπουμε, υπάρχει βελτίωση στον τομέα των αστοχιών, αυτή όμως δεν συνοδεύεται από αντίστοιχη βελτίωση στο θέμα των κύκλων. ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 66: Διερεύνηση Cache Εντολών " Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 67: Διερεύνηση Cache Εντολών " Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 32bit 91

92 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 68: Διερεύνηση Cache Εντολών " Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Βλέπουμε μείωση στις αστοχίες, και σε ορισμένες περιπτώσεις μείωση των κύκλων λειτουργίας κάτω από τους 1. ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 69: Διερεύνηση Cache Εντολών " Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 7: Διερεύνηση Cache Εντολών " Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit 92

93 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 71: Διερεύνηση Cache Εντολών " Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Παρατηρούμε ότι υπάρχει μείωση των αστοχιών, όσο μέχρι τα 8KΒ, και Περαιτέρω αύξηση του μεγέθους δεν οδηγεί σε μείωση των αστοχιών. Σε όλες τις Cache εντολών που ερευνήθηκαν, Παρατηρούμε ότι υπάρχει μικρή βελτίωση στους κύκλους λειτουργίας και αυτό οφείλεται πιθανόν στις πολλές αστοχίες της cache δεδομένων. Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας. Τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: Διάγραμμα 72: Σύγκριση Cache εντολών "Consumer" με καλύτερες επιδόσεις 93

94 Όπως βλέπουμε η βέλτιστη cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 32bit και συνολικό μέγεθος 32KB. εάν λάβουμε υπόψη μας και τον παράγοντα του χώρου, τότε η βέλτιστη λύση θα ήταν η cache εντολών με διπλό συσχετισμό μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. Εξερεύνηση ρυθμίσεων Data Cache Αναλόγως με προηγουμένως, θα κάνουμε μια συστηματική διερεύνηση των χαρακτηριστικών της cache δεδομένων, ετσι ώστε να καταλήξουμε σε ένα βέλτιστο συνδυασμό. όπως και στην διερεύνηση της cache εντολών, οι μεταβλητές είναι: ο συσχετισμός της cache (απευθείας, διπλός ή τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος. Οπως είχαμε δει, η cache δεδομένων ήταν ένας από τους βασικούς επιβραδυντικούς παράγοντες και ως εκ τούτου περιμένουμε να δούμε ουσιαστικές βελτιώσεις στην απόδοση, βελτιστοποιώντας την. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 73: Διερεύνηση Cache Δεδομένων "Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit 94

95 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 74: : Διερεύνηση Cache Δεδομένων "Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 75:Διερεύνηση Cache Δεδομένων "Consumer" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Όπως βλέπουμε, με την αύξηση του μεγέθους της cache έχουμε ταυτόχρονα μείωση των αστοχιών. ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 76: Διερεύνηση Cache Δεδομένων "Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 16bit 95

96 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 77: Διερεύνηση Cache Δεδομένων "Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 78: Διερεύνηση Cache Δεδομένων "Consumer" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Βλέπουμε την ίδια συμπεριφορά όπως και πριν, αυξάνοντας το μέγεθος της cache, μειώνονται οι αστοχίες, μέχρι τα 8KB. ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 79: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit 96

97 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 8: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 81: Διάγραμμα 75: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Σε όλες τις διερευνήσεις που προηγήθηκαν Παρατηρούμε ότι υπάρχει μείωση των αστοχιών, μέχρι τα 8KΒ, και Περαιτέρω αύξηση του μεγέθους δεν οδηγεί σε μείωση των αστοχιών. Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας. Τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: 97

98 Διάγραμμα 82: Σύγκριση Cache δεδομένων "Consumer" με καλύτερες επιδόσεις Με βάση τα παραπάνω καταλήγουμε ότι η βέλτιστη cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 64KB. εάν λάβουμε υπόψη μας και τον παράγοντα του χώρου, τότε η βέλτιστη λύση θα ήταν η cache δεδομένων με απευθείας συσχετισμό μέγεθος γραμμής 64bit και συνολικό μέγεθος 8KB. Επιλογή βέλτιστων ρυθμίσεων Από τα παραπάνω καταλήξαμε ότι η βέλτιστη cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 32bit και συνολικό μέγεθος 32KB και η βέλτιστη cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 64KB. Στο παρακάτω διάγραμμα βλέπουμε για τον επεξεργαστή με τις παραπάνω cache καθώς και για τον αρχικό μας επεξεργαστή, τους κύκλους που χρειάστηκαν για να ολοκληρωθεί η εφαρμογή (πολλαπλασιασμένοι με 1 4 για εποπτικούς λόγους), το γινόμενο κύκλων επί καταναλισκόμενης ενέργειας καθώς και το γινόμενο των κύκλων επί της καταναλισκόμενης ενέργειας, επί του καταλαμβανόμενου χώρου. 98

99 Κύκλοι λειτουργείας *1 Κύκλοι λειτουργείας * Ενέργεια Κύκλοι λειτουργείας * Ενέργεια * Καταλαμβανομενος Χώρος 4 2 Αρχικές Ρυθμίσεις Βελτιστοποιημένες Διάγραμμα 83: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή "consumer" Οπως παρατηρούμε, η προσέγγιση μας μείωσε για άλλη μια φορά τους κύκλους λειτουργίας και την ενέργεια σε κόστος του καταλαμβανόμενου χώρου. Συγκεκριμένα οι κύκλοι λειτουργίας μειώθηκαν κατά 22%. η ενέργεια μειώθηκε κατά 1% ωστόσο ο καταλαμβανόμενος χώρος λόγω των μεγάλων cache αυξήθηκε κατά 26%. Επιλογή επεκτάσεων TIEs Αφού μετά την διερεύνηση που κάναμε για τις cache του συστήματος καταλήξαμε σε ένα βελτιστοποιημένο configuration, μένει να δούμε πόσο μπορούμε να βελτιώσουμε το σύστημα με επεκτάσεις TIE. όπως και προηγουμένως, ρυθμίσαμε τον Xpress Compiler ώστε να παράγει επεκτάσεις TIE. Στο παρακάτω διάγραμμα φαίνονται οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs καθώς και ο χώρος που θα καταλαμβάνει ο επεξεργαστής μας μετά την υλοποίηση του απαραίτητου υλικού για την λειτουργία των επεκτάσεων. 99

100 Base + New TIE 17. Minimum + New TIE 21. Total Cycles -1-2 Αρχικο Configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie xpres(6).tie xpres(7).tie xpres(8).tie xpres(9).tie xpres(1).tie xpres(11).tie xpres(12).tie xpres(13).tie xpres(14).tie xpres(15).tie xpres(16).tie xpres(17).tie xpres(18).tie Διάγραμμα 84: διερεύνηση για TIEs στον επεξεργαστή "consumer" Βλέπουμε ότι υπάρχουν βελτιώσεις, αν και όχι τόσο εντυπωσιακές όσο στο πρόγραμμα του πρώτου επεξεργαστή. Παρατηρούμε ότι υπάρχουν αρκετές ties με παραπλήσιες επιδόσεις: xpress.tie xpress(1).tie xpress(12).tie Με βάση αυτά τα TIE, δημιουργήσαμε τις νέες μορφές του επεξεργαστή, ώστε να ελέγξουμε τις ενεργειακές τους απαιτήσεις, καθώς και την βελτίωση που προκαλούν στους κύκλους λειτουργίας. Τα αποτελέσματα φαίνονται στο παρακάτω διάγραμμα, όπου Παρατίθεται και το γινόμενο κύκλων επί ενέργειας (διαιρεμένο με 5x1 4, για εποπτικούς λόγους). 1

101 Κύκλοι Λειτουργιας Ενέργεια Κύκλοι Λειτουργιας * Ενέργεια / Αρχικο Configuration xpres.tie xpres(1).tie Xpres(12).tie Διάγραμμα 85: Σύγκριση απόδοσης Consumer με και χωρίς TIEs Όπως βλέπουμε υπάρχει παρόμοια βελτίωση και στις τρεις περιπτώσεις. Η καλύτερη και των τεσσάρων φαίνεται να είναι η xpress(1).tie με 4943 κύκλους λειτουργίας και 1333 nj ενέργειας. έχουμε δηλαδή μια βελτίωση 4% στους κύκλους εργασίας και 17% στην ενέργεια. Το τίμημα είναι ότι αυξάνεται κατά 27% το μέγεθος του επεξεργαστή. Αποτελέσματα XTMP προσομοίωσης με βελτιστοποιημένες Cache. Με βάση τις παραπάνω διερευνήσεις προσομοιώσαμε το σύστημα με διαφορετικούς πλέον επεξεργαστές. Στο παρακάτω διάγραμμα βλέπουμε μια Σύγκριση ανάμεσα στο πολυεπεξεργαστικο σύστημα όπου κάθε επεξεργαστής είναι ίδιος (ο επεξεργαστής βάση που έχουμε) και στο πολυεπξεργαστικο σύστημα όπου κάθε επεξεργαστής έχει βελτιστοποιημένες cache. Τα νούμερα είναι ενδεικτικά 11

102 Αστοχίες Cache Δεδομένων Αστοχίες Cache Εντολών *5 Κύκλοι Λειτουργίας /1 5 Πρώτος επ εξεργαστής Δεύτερος επ εξεργαστής Πρώτος επ εξεργαστής Δεύτερος επ εξεργαστής Διάγραμμα 86: Σύγκριση απόδοσης μέσω XTMP ομογενούς και ετερογενούς συστήματος Κώδικας προσομοίωσης συστήματος. Καθώς αυτό είναι το πρώτο πολυεπεξεργαστικο σύστημα που μελετήσαμε, πρέπει να εξηγήσουμε πως αυτό μοντελοποιείται. αυτό που κάναμε είναι να γράψουμε κώδικα σε C ο οποίος να περιγράφει τον επεξεργαστή. παρακάτω φαίνεται ο κώδικας αυτός, καθώς και κάποια βασικά σχόλια. #include <stdlib.h> #include <string.h> #include <stdio.h> #include "mp.h" #include "xtmp_options.h" 12

103 int XTMP_main(int argc, char** argv) { char *xtensasystemdirs[] = { XTENSA_SYSTEM, ; char *tdkfiles[]= {"queue_tdk1", ; char *tdkfiles2[]= {"queue_tdk2", ; XTMP_params params1, params2; XTMP_core producer, consumer; XTMP_memory sysmem1, sysmem2; XTMP_queue fifo1, fifo2; u32 pifwidth; bool bigendian; xtmp_options options; xtmp_options *opt = &options; init_options(opt); opt->summary= true; if (get_options(opt, argc, argv)!= ) { exit(1); params1 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_2cores_pipe_core1", tdkfiles); params2 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_2cores_pipe_core2", tdkfiles2); Οριζουμε τις παραμετρους (μεγεθη μνημων, συχνοτητες ρολογιου κλπ) για τους δυο επεξεργαστές if (!params1) { fprintf(stderr, "Cannot create XTMP_params1 \n"); exit(1); 13

104 if (!params2) { fprintf(stderr, "Cannot create XTMP_params2 \n"); exit(1); producer = XTMP_coreNew("producer", params1, ); consumer = XTMP_coreNew("consumer", params2, ); Οριζουμε τους δυο επεξεργαστές, καθώς και το ποια παράμετρος αντιστοιχεί σε ποιον). if (!producer!consumer) { fprintf(stderr, "Cannot create XTMP_core's\n"); exit(1); bigendian = XTMP_isBigEndian(producer); pifwidth = XTMP_pifWidth(producer); if (pifwidth) { sysmem1 = XTMP_pifMemoryNew("sysmem1", pifwidth, Οριζουμε δυο μνήμες, sysmem1 και bigendian, ); sysmem2 για τον κάθε επεξεργαστή. sysmem2 = XTMP_pifMemoryNew("sysmem2", pifwidth, bigendian, ); XTMP_connectToCore(producer, XTMP_PT_PIF,, sysmem1, ); XTMP_connectToCore(consumer, XTMP_PT_PIF,, sysmem2, ); Συνδεουμε τις δυο μνήμες στον αντισοιχο επεξεργαστή. fifo1 = XTMP_queueNew("fifo1", 4, 4); XTMP_connectQueue(fifo1, producer, "FIFO_OUT1", consumer, "FIFO_IN1"); Οριζουμε μια FIFO και την συνδεουμε στην έξοδο του πρώτου επεξεργαστή και στην είσοδο του δεύτερου XTMP_setEventDriven(producer, true); 14

105 XTMP_setEventDriven(consumer, true); if (!XTMP_loadProgram(producer, "des_core1.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(consumer, "des_core2.out", )) { fprintf(stderr, "Cannot load des_core2\n"); exit(1); XTMP_setRelaxedSimulationCycleLimit(opt->ooo_cycles); if (opt->turbo) { if (XTMP_switchSimMode(producer, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch producer to functional mode\n"); if (XTMP_switchSimMode(consumer, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer to functional mode\n"); if (opt->enable_debug) { u32 port1 = XTMP_enableDebug(producer, opt->debug_port); u32 port2 = XTMP_enableDebug(consumer, opt->debug_port); if (!opt->xxdebug) { fprintf(stderr, "producer waiting for debugger on port %u\n", port1); 15

106 fprintf(stderr, "consumer waiting for debugger on port %u\n", port2); XTMP_setWaitForDebugger(producer, true); XTMP_setWaitForDebugger(consumer, true); if (opt->xxdebug) { fputs(xtmp_getcoreinformation(), stdout); fflush(stdout); XTMP_stepSystem(opt->cycle_limit); if (opt->summary) { XTMP_printSummary(producer, false); XTMP_printSummary(consumer, false); XTMP_cleanup(); return ; Τροποποίηση κώδικα DES.c Εκτός από τον κώδικα που υλοποιει την αρχιτεκτονική του συστήματος, υπάρχει και ένα τελευταιο θέμα, το οποίο πρέπει να σημειωσουμε, για την αρχιτεκτονική σωλήνωσης δυο επεξεργαστών, και αυτό είναι πως αλλάξαμε τον κώδικα του DES.c ετσι ώστε να μοιραζεται η επεξεργασια στους δυο επεξεργαστές. Η main του DES.c αποτελειται από τα παρακάτω: 16

107 main() { struct test8 *t; unsigned char cipher[16]; int i,j; for (i =, t = test8; i < (sizeof(test8) / sizeof(test8[])); i++, t++) { des_set_key(t->key, (struct key *) keys); des_ecb_encrypt(t->plain, cipher, (struct key *) keys, 1); if(beq(cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); return ; printf("des: success\n"); Η συνάρτηση des_set_key αναλαμβάνει να παράγει τα υποκλειδια, ενώ η des_ecb_encrypt αναλαμβάνει να κρυπτογραφήσει το plaintext με βάση αυτά. τέλος υπάρχει ένας έλεγχος, ώστε εάν το παραχθεν ciphertext δεν είναι το αναμενόμενο, η διαδικασία διακόπτεται. Ο σκοπός μας ήταν να σπάσουμε το πρόγραμμα σε δυο μέρη, ετσι ώστε στο πρώτο να γίνεται η παραγωγή των υποκλειδίων και στο δεύτερο, η κρυπτογραφήσει των δεδομένων. ετσι το πρόγραμμα του πρώτου επεξεργαστή έχει ως εξής: main() { struct test8 *t; unsigned char cipher[16]; 17

108 char c; int i,j; for (i =, t = test8; i < (sizeof(test8) / sizeof(test8[])); i++, t++) { des_set_key(t->key, (struct key *) keys); for (j=; j<32; j++) { WriteFifo1(c,keys[j]); return ; Δηλαδή είναι το ίδιο, μέχρι και να ολοκληρωθεί και η des_set_key. Στη συνεχεια τα δεδομένα των υποκλειδίων στέλνονται στην fifo,με την WriteFifo1 ετσι ώστε να τα λαβει ο δεύτερος επεξεργαστής, Στη συνεχεια ακολουθει ο επομενος γυρος παραγωγής κλειδιων κ.ο.κ. Το πρόγραμμα του δεύτερου επεξεργαστή έχει αλλαξει ανάλογα: main() { struct test8 *t; unsigned char cipher[16]; char c; int i,j; unsigned long keys[32]; for (i =, t=test8 ; i < (sizeof(test8) / sizeof(test8[])); i++, t++) 18

109 { for (j=; j<32; j++) { keys[j]=readfifonumber1(); des_ecb_encrypt(t->plain, cipher, (struct key *) keys, 1); if(beq(cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); return ; printf("des: success\n"); return ; Βλέπουμε ότι με το που ξεκινάει η main, αρχικά διαβάζει από την FIFO τα απαραίτητα keys με την Keys[j]=ReadFifoNumber1 και στη συνέχεια ξεκινάει την διαδικασία της κρυπτογράφησης. Το πρόγραμμα στην προσομοίωση μέσω XTMP έβγαλε στο τέλος des:success, που σημαίνει ότι τα δεδομένα μεταφέρθηκαν ορθά. 19

110 Κεφάλαιο 7 Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Η τρίτη αρχιτεκτονική που μελετήσαμε ήταν και η πρώτη που ασχολήθηκε με την παράλληλη επεξεργασία. Στη συγκεκριμένη αρχιτεκτονική, έχουμε τρεις Επεξεργαστές στο σύστημα, συνδεμένους με FIFO όπως φαίνεται στο σχημα. Πρέπει να σημειώσουμε ότι ο ένας είναι σε λειτουργία Master και οι δυο σε λειτουργία Slave. Ο Master χωρίζει τα δεδομένα σε δυο ομάδες και στέλνει το κλειδί κρυπτογράφησης και το αρχικό κείμενο που θα κρυπτογραφηθεί στους δυο Slave. Έπειτα, παράλληλα, οι δυο Slave εκτελούν την παραγωγή των υποκλειδίων και την κρυπτογράφηση των δεδομένων ο ένας στα μισά δεδομένα και ο άλλος στα αλλά μισά. τέλος τα δεδομένα στέλνονται ξανά στον Master για έλεγχο σωστής λειτουργίας. FIFO 1 FIFO 3 Slave 1 FIFO 4 Master FIFO 5 FIFO 6 Slave 2 FIFO 2 Διάγραμμα 87: αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές Σε αυτή την αρχιτεκτονική το πρόγραμμα μέτρησης δεν σπάει σε ξεχωριστά μέρη, απλώς μειώνεται ο αριθμός των δεδομένων που επεξεργάζεται ο κάθε Slave. Η μόνη διαφορά από το κανονικό πρόγραμμα μέτρησης, είναι ότι ο έλεγχος της σωστής λειτουργίας γίνεται στον master και ότι τα δεδομένα προς επεξεργασία δεν περιλαμβάνονται στο αρχικό πρόγραμμα, αλλά λαμβάνονται από τις αντίστοιχες FIFO κάθε φορά. Προστέθηκε επιπλέον μια διαφορετική μορφή του προγράμματος, την οποία τρέχει ο Master, στο 11

111 οποίο απλώς μοιράζεται το plaintext και το αρχικό κλειδί κρυπτογράφησης στους δυο Slaves. περισσότερες λεπτομέρειες θα δοθούν παρακάτω. Οπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. Λόγω της συμμετρίας των δυο Slaves, γίνεται διερεύνηση μόνο για τον ένα. Τα συμπεράσματα προφανώς ισχύουν και για τον άλλο, αφού επιτελούν την ίδια ακριβώς λειτουργία. επίσης ο Master, επειδή δεν επιτελεί κάποια πολύπλοκη διεργασία, παρά μόνο μεταφορά δεδομένων από την μνήμη του στις FIFO, και ελέγχους ισότητας, έχει περιορισμένη δυνατότητα βελτιστοποίησης. Αρχική υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Σαν Master αναφέρεται ο επεξεργαστής που χωρίζει τα δεδομένα, τα στέλνει στους slaves και αφού κρυπτογραφηθούν ελέγχει εάν τα αποτελέσματα είναι σωστα. Οι επεξεργαστές που εκτελούν την διαδικασία της παραγωγής κλειδιών και κρυπτογράφησης είναι οι Slave1 και Slave2. Τα αποτελέσματα που πήραμε έχουν ως εξής: Xtensa Core: "Master" ISS Version: Current PC = x6749a Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions 654 ( 1. ) 111

112 Instruction fetches 395 ( 6.73 ) Uncached 185 ( 2.84 ) ICache fetches 3765 ( ) ICache misses 287 ( 4.41 ) 7.62% of ICache fetches Taken branches 356 ( 5.47 ) Exceptions 29 (.45 ) WindowOverflow 15 (.23 ) WindowUnderflow 14 (.22 ) Loads 1166 ( ) Uncached 4 (.6 ) DCache loads 1162 ( ) DCache load misses 172 ( 2.64 ) 14.8% of DCache loads Stores 139 ( ) Cached 139 ( ) DCache write-thru misses 932 ( ) 89.7% of cached stores Cycles: total = 125 Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches

113 Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Από την ανάλυση του παραπάνω πίνακα βλέπουμε ότι ο επεξεργαστής στο μεγαλύτερο μέρος της λειτουργίας του είναι ανενεργός και ουσιαστικά περιμένει να λάβει το αποτέλεσμα της κρυπτογράφησης. Σε μια άλλη περίπτωση όπου θα υπήρχε και δεύτερη εφαρμογή, ο επεξεργαστής θα μπορούσε να απασχολείται με αυτή, αλλά στην προκειμένη, απλώς αναμένει τα αποτελέσματα. Xtensa Core: "Slave1" ISS Version: Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches 495 ( ) Uncached 185 (.35 ) ICache fetches 472 ( ) 113

114 ICache misses 114 ( 1.93 ) 2.49% of ICache fetches Taken branches 679 ( 1.29 ) Exceptions 5 (.1) WindowOverflow 3 (.1) WindowUnderflow 2 (. ) Loads 8893 ( ) Uncached 4 (.1 ) DCache loads 8889 ( ) DCache load misses 5335 ( 1.16 ) 6.2% of DCache loads Stores 2219 ( 4.23 ) Cached 2219 ( 4.23 ) DCache write-thru misses 1986 ( 3.78 ) 89.5% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions

115 Loop overhead TIE global stalls Reset Xtensa Core: "Slave2" ISS Version: Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches ( ) Uncached 185 (.35 ) ICache fetches ( ) ICache misses 114 ( 1.93 ) 2.56% of ICache fetches Taken branches 679 ( 1.29 ) Exceptions 5 (.1) WindowOverflow 3 (.1) WindowUnderflow 2 (. ) Loads 8893 ( ) Uncached 4 (.1 ) 115

116 DCache loads 8889 ( ) DCache load misses 524 ( 9.56 ) 56.52% of DCache loads Stores 2219 ( 4.22 ) Cached 2219 ( 4.22 ) DCache write-thru misses 296 ( 3.99 ) 94.46% of cached stores Cycles: total = 1154 Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Με έντονο μαύρο βλέπουμε τις αστοχίες των cache. βλέπουμε ότι και στους δυο επεξεργαστές, οι cache δεδομένων έχουν σημαντικό ποσοστό αστοχιών, ωστόσο το σύστημα μας χρειάστηκε μόνο 125 κύκλους εργασίας για να ολοκληρώσει το πρόγραμμα. αφού οι δυο επεξεργαστές λειτουργούν παράλληλα οι κύκλοι λειτουργίας 116

117 που μας ενδιαφέρουν είναι του Master ο οποίος συλλέγει τα κρυπτογραφημένα δεδομένα και ολοκληρώνει το πρόγραμμα. Παρατηρούμε επίσης ότι ο Slave2 έχει ακριβώς τους ίδιους κύκλους λειτουργίας με τον Slave1 (με ένα κύκλο διαφορά). αυτό είναι αναμενόμενο αφού έχουν το ίδιο configuration και εκτελούν την ίδια λειτουργία. Στις επόμενες σελίδες θα δούμε πως με την κατάλληλη διερεύνηση μπορούμε να μειώσουμε περισσότερο τους κύκλους λειτουργίας με σωστή επιλογή των cache. Πρέπει εδώ να σημειωθεί ότι ο καθοριστικός παράγοντας βελτίωσης του κυκλώματος θα είναι οι επεξεργαστές slave οι οποίοι και επιτελούν την κρυπτογράφηση. είναι χαρακτηριστικό το γεγονός ότι οπως βλέπουμε και από τα στατιστικά ο master απλώς περιμένει να τελειώσει η επεξεργασία στους slave. εκτός και αν φτάσουμε στο σημείο οι slaves να ολοκληρώνουν το πρόγραμμα τους, σε χρόνο λιγότερο από όσο χρειάζεται ο master για να ελέγξει τα αποτελέσματα, οποιαδήποτε βελτίωση στον master δεν θα επηρεάσει την απόδοση του συστήματος. Επεξεργαστής Master: Εξερεύνηση ρυθμίσεων Instruction Cache Οπως κάναμε στα προηγούμενα κεφάλαια, ελέγχουμε την απόδοση διάφορων cache εντολών, ώστε να δούμε με ποια έχουμε τις λιγότερες αστοχιες. Έχει αναφερθεί και στα προηγούμενα κεφάλαια ότι οι cache έχουν τρεις μεταβλητές: τον συσχετισμό (απευθείας, διπλός, τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος Σε κάθε Διερεύνηση της cache εντολών, από τις τρεις μεταβλητές που προηγήθηκαν, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα ακολουθήσουν, η cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στα διαγράμματα επίσης εμφανίζονται οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί το πρόγραμμα του Master, που ουσιαστικά συνίσταται στον έλεγχο των σωστών αποτελεσμάτων των slave1 και slave2. Πρέπει εδώ να λάβουμε υπόψη μας ότι η διερευνήσεις των cache του master γίνονται κάτω από τον Xtensa Xplorer, και ο επεξεργαστής αντιμετωπίζεται απομονωμένος από το υπόλοιπο σύστημα. επομένως οι διερευνήσεις δεν θα λάβουν υπόψη τους τις διεργασίες Αποστόλης δεδομένων, ούτε λήψης, αλλά μόνο του ελέγχου του αποτελέσματος. 117

118 Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 88: Διερεύνηση Cache Εντολών "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 89: Διερεύνηση Cache Εντολών "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 9: Διερεύνηση Cache Εντολών "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit 118

119 Βλέπουμε ότι με την αύξηση του μεγέθους έχουμε αντίστοιχη μείωση των αστοχιών, αλλά ακόμα πιο εντυπωσιακή βελτίωση βλέπουμε με την αύξηση του μεγέθους γραμμής. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 91: Διερεύνηση Cache Εντολών "Master" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 92: Διερεύνηση Cache Εντολών "Master" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 93: Διερεύνηση Cache Εντολών "Master" με διπλό συσχετισμό και μέγεθος γραμμής 64bit 119

120 Αντιστοίχως με την διερεύνηση που κάναμε για τις cache απλού συσχετισμού, βλέπουμε ότι το μέγεθος της γραμμής είναι ο καθοριστικός παράγοντας βελτίωσης. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 94: Διερεύνηση Cache Εντολών "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 Διάγραμμα 95: Διερεύνηση Cache Εντολών "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 96: Διερεύνηση Cache Εντολών "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit 12

121 Σε όλες τις διερευνήσεις που προηγήθηκαν παρατηρούμε ότι υπάρχει μείωση των αστοχιών, μέχρι τα 16KΒ, και Περαιτέρω αύξηση του μεγέθους δεν οδηγεί σε μείωση των αστοχιών, ωστόσο όσο μεγαλώνει το μέγεθος γραμμής, βελτιώνονται σημαντικά οι επιδόσεις.. Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε, με βάση το γινόμενο αστοχιών επί ενεργειας. Τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: Διάγραμμα 97: Σύγκριση Cache δεδομένων "Master" με καλύτερες επιδόσεις Με βάση τα παραπάνω καταλήγουμε ότι η βέλτιστη cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 32KB. εάν λάβουμε υπόψη μας και τον παράγοντα του χώρου, τότε η βέλτιστη λύση θα ήταν η cache δεδομένων με διπλό συσχετισμό μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. Εξερεύνηση ρυθμίσεων Data Cache Αναλόγως με προηγουμένως, θα κάνουμε μια συστηματική Διερεύνηση των χαρακτηριστικών της cache δεδομένων, ετσι ώστε να καταλήξουμε σε ένα βέλτιστο συνδυασμό. όπως και στην Διερεύνηση της cache εντολών, οι μεταβλητές είναι: ο συσχετισμός της cache (απευθείας, διπλός ή τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος. όπως είχαμε δει, η cache δεδομένων ήταν ένας από τους βασικούς επιβραδυντικούς παράγοντες και ως εκ τούτου περιμένουμε να δούμε ουσιαστικές βελτιώσεις στην απόδοση, βελτιστοποιώντας την. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 121

122 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 98: Διερεύνηση Cache Δεδομένων "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 99: Διερεύνηση Cache Δεδομένων "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 1: Διερεύνηση Cache Δεδομένων "Master" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Βλέπουμε ότι η αύξηση του συνολικό μεγέθους της Cache βελτιώνει τα αποτελέσματα αλλά ακόμα μεγαλύτερη βελτίωση έχουμε όταν αυξάνουμε το μέγεθος γραμμής της cache. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό. 122

123 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 11: Διερεύνηση Cache Δεδομένων "Master" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 12: Διερεύνηση Cache Δεδομένων "Master" με διπλό συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 13: Διερεύνηση Cache Δεδομένων "Master" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Παρατηρούμε ότι σε σχέση με τις cache απευθείας συσχετισμού, έχουμε βελτίωση ωστόσο πάλι ο καθοριστικός παράγοντας βελτίωσης είναι το μέγεθος της γραμμής της cache. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 123

124 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 14: Διερεύνηση Cache Δεδομένων "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 15: Διερεύνηση Cache Δεδομένων "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 16: Διερεύνηση Cache Δεδομένων "Master" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Ολοκληρώνοντας την Διερεύνηση για την cache δεδομένων, βλέπουμε ότι όσο μεγαλώνει ο συσχετισμός, μειώνονται οι αστοχίες, αλλά όπως είδαμε και στις προηγούμενες περιπτώσεις, ο καθοριστικός παράγοντας είναι το μέγεθος γραμμής. επίσης παρατηρούμε ότι αύξηση του συνολικού μεγέθους πάνω από τα 8KB δεν μειώνει 124

125 Περαιτέρω τις αστοχίες. Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας. Τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: Με βάση τα παραπάνω καταλήγουμε ότι η βέλτιστη cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB. ακόμα και αν λάβουμε υπόψη μας τον παράγοντα του χώρου, πάλι η ίδια cache είναι η βέλτιστη. Επιλογή βέλτιστων ρυθμίσεων Από τα παραπάνω καταλήξαμε ότι η βέλτιστη cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 32KB. και η βέλτιστη cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB Στο παρακάτω διάγραμμα βλέπουμε για τον επεξεργαστή με τις παραπάνω cache καθώς και για τον αρχικό μας επεξεργαστή, τους κύκλους που χρειάστηκαν για να ολοκληρωθεί η εφαρμογή (πολλαπλασιασμένοι με 1 3 για εποπτικούς λόγους), το γινόμενο κύκλων επί καταναλισκόμενης ενέργειας καθώς και το γινόμενο των κύκλων επί της καταναλισκόμενης ενέργειας, επί του καταλαμβανόμενου χώρου. 125

126 Κύκλοι Λειτουργίας* 1 Κύκλοι Λειτουργίας * Καταναλισκωμενη Ενέργεια Κύκλοι Λειτουργίας * Καταναλισκωμενη Ενέργεια* Καταλαμβανομενος Χωρος 4 2 Αρχικές ρύθμισεις Βελτιστοποιημένες Διάγραμμα 17: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή "Master" Οπως παρατηρούμε, η προσέγγιση μας μείωσε τους κύκλους λειτουργίας και την ενέργεια σε κόστος του καταλαμβανόμενου χώρου. Συγκεκριμένα οι κύκλοι λειτουργίας μειώθηκαν κατά 9%. η ενέργεια μειώθηκε κατά 1% ωστόσο ο καταλαμβανόμενος χώρος λόγω των μεγάλων cache αυξήθηκε κατά 88%. Στην παρούσα εργασία, θεωρήσαμε ότι ο καταλαμβανόμενος χώρος είναι παράγοντας ήσσονος σημασίας, ωστόσο είναι θέμα κρίσης, κατά πόσο αξίζει να αυξηθεί τόσο πολύ ο καταλαμβανόμενος χώρος για να επιτύχουμε αυτή την βελτίωση στις επιδόσεις. Επιλογή Επεκτάσεων Tie Αφού μετά την Διερεύνηση που κάναμε για τις cache του συστήματος καταλήξαμε σε ένα βελτιστοποιημένο configuration, μένει να δούμε πόσο μπορούμε να βελτιώσουμε τον επεξεργαστή. με επεκτάσεις TIE. Πρέπει εδώ να σημειώσουμε για άλλη μια φορά, ότι λόγω της απλής φύσης του προγράμματος που τρέχει ο master, ουσιαστικά έναν έλεγχο ισότητας, είναι περιορισμένες οι βελτιώσεις που μπορούν να γίνουν στον επεξεργαστή. επίσης να θυμίσουμε ότι όπως αναφέρθηκε και νωρίτερα, η απόδοση του συστήματος εξαρτάται σχεδόν αποκλειστικά από την απόδοση των slaves και όχι από τον master. Ως εκ τούτου, η Διερεύνηση μας δεν περιμένουμε να έχει πρακτικά αποτελέσματα, ωστόσο Παρατίθεται για λόγους πληρότητας. 126

127 όπως και προηγουμένως, ρυθμίσαμε τον Xpress Compiler ώστε να παράγει επεκτάσεις TIE. Στο παρακάτω διάγραμμα φαίνονται οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs καθώς και ο χώρος που θα καταλαμβάνει ο επεξεργαστής μας μετά την υλοποίηση του απαραίτητου υλικού για την λειτουργία των επεκτάσεων Base + New TIE 17. Minimum + New TIE 22. Total Cycles -5-1 Αρχικό configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie Διάγραμμα 18: Διερεύνηση για TIEs στον επεξεργαστή Master Παρατηρούμε ότι πραγματικά η βελτίωση της απόδοσης μέσω επεκτάσεων Ties, είναι ασήμαντη και ως εκ τούτου κρίθηκε μη απαραίτητη. παρατηρούμε όμως, ότι υπάρχουν περιπτώσεις όπου μπορεί να μειωθεί κατά ένα σεβαστό μέρος το νούμερο των πυλών του επεξεργαστή και παρόλα αυτά να έχουμε παρόμοιες επιδόσεις. Σε αυτή την περίπτωση ωστόσο, θα εξειδικεύαμε τον επεξεργαστή για το πρόγραμμα του DES, και αυτό θα είχε σαν συνέπεια να μειωθεί η απόδοση του σε άλλες εφαρμογές. Επεξεργαστής Slave: Εξερεύνηση ρυθμίσεων Instruction Cache Οπως και για τον επεξεργαστή Master,σε κάθε Διερεύνηση της cache εντολών, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα 127

128 ακολουθήσουν, η cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στα διαγράμματα επίσης εμφανίζονται οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί το πρόγραμμα του slave, που ουσιαστικά πρόκειται για ολόκληρο το DES.C χωρίς όμως τον έλεγχο των αποτελεσμάτων στο τέλος. Πρέπει εδώ να λάβουμε υπόψη μας ότι η διερευνήσεις των cache των slave γίνονται κάτω από τον Xtensa Xplorer, και ο επεξεργαστής αντιμετωπίζεται απομονωμένος από το υπόλοιπο σύστημα. επομένως οι διερευνήσεις δεν θα λάβουν υπόψη τους τις διεργασίες Αποστόλης δεδομένων, ούτε λήψης, αλλά μόνο της παραγωγής κλειδιών και της κρυπτογράφησης. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 19: Διερεύνηση Cache Εντολών Slave με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 11: Διερεύνηση Cache Εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32bit 128

129 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 111: Διερεύνηση Cache Εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Παρατηρούμε ότι όπως είναι αναμενόμενο, αύξηση του μεγέθους γραμμής προκαλεί βελτίωση, όπως επίσης και το συνολικό μέγεθος της Cache.ωστόσο αύξηση πέραν των 4KB δεν μειώνει Περαιτέρω της αστοχίες. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 112: Διερεύνηση Cache Εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 113: Διερεύνηση Cache Εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32bit 129

130 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 114: Διερεύνηση Cache Εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Παρατηρούμε ότι περιέργως, ο διπλός συσχετισμός έχει χειρότερη απόδοση για 1KB cache, ωστόσο καθώς αυξάνεται το μέγεθος της cache φτάνει στις ίδιες επιδόσεις. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 115: Διερεύνηση Cache Εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 116:Διερεύνηση Cache Εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit 13

131 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 117: Διερεύνηση Cache Εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64bit Παρατηρούμε ότι αύξηση του συνολικού μεγέθους πάνω από τα 4KB δεν μειώνει Περαιτέρω τις αστοχίες. Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας. Τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: Διάγραμμα 118: Σύγκριση Cache Εντολών "Slave" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache εντολών και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB. 131

132 Εξερεύνηση ρυθμίσεων Data Cache Αναλόγως με προηγουμένως, θα κάνουμε μια συστηματική Διερεύνηση των χαρακτηριστικών της cache δεδομένων, ετσι ώστε να καταλήξουμε σε ένα βέλτιστο συνδυασμό. όπως και στην Διερεύνηση της cache εντολών, οι μεταβλητές είναι: ο συσχετισμός της cache (απευθείας, διπλός ή τετραπλός) το μεγεθος γραμμης το συνολικο μεγεθος. Οπως είχαμε δει, η cache δεδομένων ήταν ένας από τους βασικούς επιβραδυντικούς παράγοντες και ως εκ τούτου περιμένουμε να δούμε ουσιαστικές βελτιώσεις στην απόδοση, βελτιστοποιώντας την. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 119: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 12: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit 132

133 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 121: : Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64bit Παρατηρούμε ότι καθώς αυξάνεται το μέγεθος της cache έχουμε σημαντική βελτίωση μέχρι τα 8KB. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 122: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 123: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32bit 133

134 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 124: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64bit Οπως και πριν, παρατηρούμε ότι καθώς αυξάνεται το μέγεθος της cache έχουμε σημαντική βελτίωση μέχρι τα 8KB. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 125: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 126: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit 134

135 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 127: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας.τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: Διάγραμμα 128: Σύγκριση Cache δεδομένων "Slave" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache δεδομένων και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. 135

136 Επιλογή βέλτιστων ρυθμίσεων Από τα παραπάνω καταλήξαμε ότι η βέλτιστη cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB και η βέλτιστη cache δεδομένων, έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. Στο παρακάτω διάγραμμα βλέπουμε για τον επεξεργαστή με τις παραπάνω cache καθώς και για τον αρχικό μας επεξεργαστή, τους κύκλους που χρειάστηκαν για να ολοκληρωθεί η εφαρμογή (πολλαπλασιασμένοι με 1 4 για εποπτικούς λόγους), το γινόμενο κύκλων επί καταναλισκόμενης ενέργειας καθώς και το γινόμενο των κύκλων επί της καταναλισκόμενης ενέργειας, επί του καταλαμβανόμενου χώρου Κύκλοι Λειτουργίας* 1 Κύκλοι Λειτουργίας * Καταναλισκωμενη Ενέργεια Κύκλοι Λειτουργίας * Καταναλισκωμενη Ενέργεια* Καταλαμβανομενος Χωρος Αρχικές Ρυθμίσεις Βελτιστοποιημένες Διάγραμμα 129: Σύγκριση απόδοσης Αρχικού και βελτιστοποιημένου επεξεργαστή "Slave" Επιλογή επεκτάσεων TIEs Αφού μετά την Διερεύνηση που κάναμε για τις cache του συστήματος καταλήξαμε σε ένα βελτιστοποιημένο configuration, μένει να δούμε πόσο μπορούμε να βελτιώσουμε τον επεξεργαστή με επεκτάσεις TIE. 136

137 Σε αντίθεση με την Διερεύνηση που κάναμε για τον master, ή οποία έγινε για τυπικούς λόγους όπως εξηγήθηκε παραπάνω, η Διερεύνηση για τους slaves, μπορεί να οδηγήσει σε σημαντικές βελτιώσεις. Οπως και προηγουμένως, ρυθμίσαμε τον Xpress Compiler ώστε να παράγει επεκτάσεις TIE. Στο παρακάτω διάγραμμα φαίνονται οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs καθώς και ο χώρος που θα καταλαμβάνει ο επεξεργαστής μας μετά την υλοποίηση του απαραίτητου υλικού για την λειτουργία των επεκτάσεων Base + New TIE 17. Minimum + New TIE 22. Total Cycles -1-2 Αρχικό configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie xpres(6).tie xpres(7).tie xpres(8).tie xpres(9).tie xpres(1).tie xpres(11).tie xpres(12).tie xpres(13).tie xpres(14).tie xpres(15).tie xpres(16).tie xpres(17).tie xpres(18).tie xpres(19).tie xpres(2).tie xpres(21).tie xpres(22).tie xpres(23).tie xpres(24).tie Διάγραμμα 13: Διερεύνηση για TIEs στον επεξεργαστή "Slave" Από τα παραπάνω βλέπουμε ότι υπάρχουν κάποια ties που προσφέρουν σημαντικές βελτιώσεις και μειωμένους κατά πολύ κύκλους λειτουργίας. Συγκεκριμένα οι πιο αποδοτικές προσθήκες είναι οι: xpress.tie xpress(1).tie xpress(12).tie xpress(18).tie 137

138 Με βάση αυτά τα TIE, δημιουργήσαμε τις νέες μορφές του επεξεργαστή, ώστε να ελέγξουμε τις ενεργειακές τους απαιτήσεις, καθώς και την βελτίωση που προκαλούν στους κύκλους λειτουργίας. Τα αποτελέσματα φαίνονται στο παρακάτω διάγραμμα, όπου Παρατίθεται και το γινόμενο κύκλων επί ενέργειας (διαιρεμένο με 1 4, για εποπτικούς λόγους) Κύκλοι Λειτουργίας Ενέργεια Κύκλοι Λειτουργίας * Ενέργεια /1 1 Αρχικο Configuration xpress.tie Xpress(1).tie Xpress(12).tie Xpress(18).tie Διάγραμμα 131: Σύγκριση απόδοσης "Slave" με και χωρίς επεκτάσεις TIEs Βλέπουμε ότι με βάση το γινόμενο κύκλων επί ενέργειας έχουμε εντυπωσιακή βελτίωση. Την μεγαλύτερη βελτίωση βλέπουμε με το xpress.tie, με το οποίο παρατηρήσαμε μείωση των κύκλων λειτουργίας κατά 61% και μείωση της ενέργειας κατά 43%. Το τίμημα ήταν η αύξηση του καταλαμβανόμενου χώρου κατά 34%. 138

139 Κώδικας προσομοίωσης συστήματος. #include <stdlib.h> #include <string.h> #include <stdio.h> #include "mp.h" #include "xtmp_options.h" int XTMP_main(int argc, char** argv) { char *xtensasystemdirs[] = { XTENSA_SYSTEM, ; char *tdkfiles[]= {"queue_tdk", ; XTMP_params params1, params2, params3; XTMP_core Master, Slave1, Slave2; XTMP_memory sysmem1, sysmem2, sysmem3; XTMP_queue fifo1, fifo2, fifo3, fifo4, fifo5, fifo6; u32 pifwidth; bool bigendian; xtmp_options options; xtmp_options *opt = &options; init_options(opt); opt->summary= true; if (get_options(opt, argc, argv)!= ) { exit(1); 139

140 params1 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); params2 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); params3 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); if (!params1) { fprintf(stderr, "Cannot create XTMP_params1 \n"); exit(1); if (!params2) { fprintf(stderr, "Cannot create XTMP_params2 \n"); exit(1); if (!params3) { fprintf(stderr, "Cannot create XTMP_params2 \n"); exit(1); Master = XTMP_coreNew("Master", params1, ); Slave1 = XTMP_coreNew("Slave1", params2, ); Slave2 = XTMP_coreNew("Slave2", params3, ); if (!Master!Slave1!Slave2) { fprintf(stderr, "Cannot create XTMP_core's\n"); exit(1); bigendian = XTMP_isBigEndian(Master); pifwidth = XTMP_pifWidth(Master); 14

141 if (pifwidth) { sysmem1 = XTMP_pifMemoryNew("sysmem1", pifwidth, bigendian, ); sysmem2 = XTMP_pifMemoryNew("sysmem2", pifwidth, bigendian, ); sysmem3 = XTMP_pifMemoryNew("sysmem2", pifwidth, bigendian, ); XTMP_connectToCore(Master, XTMP_PT_PIF,, sysmem1, ); XTMP_connectToCore(Slave1, XTMP_PT_PIF,, sysmem2, ); XTMP_connectToCore(Slave2, XTMP_PT_PIF,, sysmem3, ); fifo1 = XTMP_queueNew("fifo1", 8, 4); fifo2 = XTMP_queueNew("fifo2", 8, 4); fifo3 = XTMP_queueNew("fifo3", 8, 4); fifo4 = XTMP_queueNew("fifo4", 8, 4); fifo5 = XTMP_queueNew("fifo5", 8, 4); fifo6 = XTMP_queueNew("fifo6", 8, 4); XTMP_connectQueue(fifo1, Slave1, "FIFO_OUT1", Master, "FIFO_IN1"); XTMP_connectQueue(fifo2, Slave2, "FIFO_OUT2", Master, "FIFO_IN2"); XTMP_connectQueue(fifo3, Master, "FIFO_OUT1", Slave1, "FIFO_IN1"); XTMP_connectQueue(fifo4, Master, "FIFO_OUT2", Slave1, "FIFO_IN2"); XTMP_connectQueue(fifo5, Master, "FIFO_OUT3", Slave2, "FIFO_IN3"); XTMP_connectQueue(fifo6, Master, "FIFO_OUT4", Slave2, "FIFO_IN4"); XTMP_setEventDriven(Master, true); XTMP_setEventDriven(Slave1, true); XTMP_setEventDriven(Slave2, true); 141

142 if (!XTMP_loadProgram(Master, "Master.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(Slave1, "des_core1.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(Slave2, "des_core2.out", )) { fprintf(stderr, "Cannot load des_core2\n"); exit(1); XTMP_setRelaxedSimulationCycleLimit(opt->ooo_cycles); if (opt->turbo) { if (XTMP_switchSimMode(Master, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch producer to functional mode\n"); if (XTMP_switchSimMode(Slave1, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer to functional mode\n"); if (XTMP_switchSimMode(Slave2, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer to functional mode\n"); 142

143 if (opt->enable_debug) { u32 port1 = XTMP_enableDebug(Master, opt->debug_port); u32 port2 = XTMP_enableDebug(Slave1, opt->debug_port); u32 port3 = XTMP_enableDebug(Slave2, opt->debug_port); if (!opt->xxdebug) { fprintf(stderr, "producer waiting for debugger on port %u\n", port1); fprintf(stderr, "consumer waiting for debugger on port %u\n", port2); fprintf(stderr, "consumer waiting for debugger on port %u\n", port3); XTMP_setWaitForDebugger(Master, true); XTMP_setWaitForDebugger(Slave1, true); XTMP_setWaitForDebugger(Slave2, true); if (opt->xxdebug) { fputs(xtmp_getcoreinformation(), stdout); fflush(stdout); XTMP_stepSystem(opt->cycle_limit); if (opt->summary) { XTMP_printSummary(Master, false); XTMP_printSummary(Slave1, false); XTMP_printSummary(Slave2, false); 143

144 XTMP_cleanup(); return ; Τροποποίηση κώδικα DES.c Στην παράλληλη συνδεσμολογια που σχεδιασαμε, ο κώδικας χωριστηκε σε δυο μέρη. Ο πρωτος επεξεργαστής, ο master, μοιραζει το κλειδί και το μισο plaintext στους δυο slaves. Αυτοι επειτα, παραγουν τα υποκλειδια και στη συνέχεια κρυπτογραφουν το plaintext που τους αντιστοιχεί. Στη συνέχεια στελνουν το κρυπτογραφημενο κείμενο πισω στον master, όπου γίνεται έλεγχος του αποτελέσματος. Ακολουθει η main του Master: main() { struct test8 *t,*tt; unsigned char cipher[16]; char c; int i,j; for (i =, t = test8; i < 47; i++, t++) { for (j=; j<8; j++) { WriteFifo1(t->key[j]); WriteFifo2(t->plain[j]); WriteFifo3(t->key[j]); WriteFifo4(t->plain[j]); 144

145 for (i =, tt=result, t = test8; i < 24; i++, t++, tt++) { for (j=; j<16; j++) {tt->cipher[j]=readfifo1(); (tt+24)->cipher[j]=readfifo2(); if(beq(tt->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); if(beq((tt+24)->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); printf("des: success\n"); return ; Ακολουθει η main του Slave1: main() { struct test8 *t; unsigned char cipher[16]; char c; int i,j; for (i =, t = test8; i < 47; i++, t++) { for (j=; j<8; j++) 145

146 { t->key[j]=readfifo1(); t->plain[j]=readfifo2(); for (i =, t = test8; i < 24; i++, t++) { des_set_key(t->key, (struct key *) keys); des_ecb_encrypt(t->plain, cipher, (struct key *) keys, 1); for (j=; j<16; j++) { WriteFifo1(t->cipher[j]); cipher[j]=; return ; Και η main του Slave2: main() { struct test8 *t; unsigned char cipher[16]; char c; int i,j; 146

147 for (i =, t = test8; i < 47; i++, t++) { for (j=; j<8; j++) { t->key[j]=readfifo3(); t->plain[j]=readfifo4(); for (i = 24, t = test8 +24; i < 48; i++, t++) { des_set_key(t->key, (struct key *) keys); des_ecb_encrypt(t->plain, cipher, (struct key *) keys, 1); for (j=; j<16; j++) { WriteFifo2(t->cipher[j]); cipher[j]=; return ; 147

148 Κεφάλαιο 8 Αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές Η επομενη αρχιτεκτονική που μελετήσαμε ήταν μια παραλλαγη της αρχιτεκτονικης παραλληλης συνδεσης με τρεις Επεξεργαστές. Στη συγκεκριμενη αρχιτεκτονική, έχουμε πεντε Επεξεργαστές στο σύστημα, συνδεμενους με FIFO όπως φαίνεται στο σχημα.πρεπει να σημειώσουμε ότι ο ένας είναι σε λειτουργία Master και τεσσερις σε λειτουργία Slave. Ο Master χωριζει τα δεδομένα σε τεσσερις ομάδες και στελνει το κλειδί κρυπτογράφησης και το αρχικό κείμενο που θα κρυπτογραφηθει στους τεσσερις Slave. Επειτα, παραλληλα, οι τεσσερις Slave εκτελουν την παραγωγη των υποκλειδίων και την κρυπτογράφηση των δεδομένων ο καθενας στα δεδομένα του.. τέλος τα δεδομένα στελνονται ξανα στον Master για έλεγχο σωστής λειτουργίας. Σε αυτή την αρχιτεκτονική το πρόγραμμα μέτρησης είναι ίδιο με την παράλληλη συνδεση με τρεις Επεξεργαστές, με την μόνη διαφορά ότι υπάρχουν περισσοτεροι slaves και ως εκ τούτου οι τα δεδομένα χωριζονται σε τεσσερις ομάδες και οχι σε δυο. Η μόνη διαφορά από το κανονικο πρόγραμμα μέτρησης, είναι ότι ο έλεγχος της σωστής λειτουργίας γίνεται στον master και ότι τα δεδομένα προς επεξεργασία δεν περιλαμβανονται στο αρχικό πρόγραμμα, αλλά λαμβανονται από τις αντιστοιχες FIFO κάθε φορα. Προστεθηκε επιπλέον μια διαφορετικη μορφή του προγράμματος, την οποία τρέχει ο Master, στο οποίο απλώς μοιράζεται το plaintext και το αρχικό κλειδί κρυπτογράφησης στους δυο Slaves. 148

149 FIFO 3 Slave 1 FIFO 4 FIFO 1 FIFO 2 FIFO 7 FIFO 8 Master FIFO 5 FIFO 6 FIFO 9 FIFO 1 Slave 2 Slave 3 FIFO 11 Slave 4 FIFO 12 Διάγραμμα 132: αρχιτεκτονική Παραλληλης Συνδεσης με Πέντε Επεξεργαστές Οπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρινονται οι επιδόσεις σε ενεργειακη κατανάλωση και χωρο και προτεινεται μια βέλτιστη λύση για την συγκεκριμενη αρχιτεκτονική. Λόγω της συμμετρίας των τεσσάρων Slaves, γίνεται Διερεύνηση μόνο για τον ένα. Τα συμπεράσματα προφανώς ισχύουν και για τους υπολοιπους, αφού επιτελούν την ίδια ακριβώς λειτουργία. επίσης ο Master, επειδή εκτελει ακριβώς την ίδια λειτουργία με τον επεξεργαστή Master της αρχιτεκτονικης του κεφαλαιου 7, παραλληλης συνδεσμολογιας με δυο slaves, δεν χρειάζεται να τον μελετησουμε. Οσα αναφέρθηκαν στο Κεφάλαιο 7 για αυτον, ισχύουν και εδώ. 149

150 Αρχικη υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Σαν Master αναφέρεται ο επεξεργαστής που χωριζει τα δεδομένα, τα στελνει στους slaves και αφού κρυπτογραφηθούν ελέγχει εάν τα αποτελέσματα είναι σωστα.οι επεξεργαστές που εκτελουν την διαδικασία της παραγωγής κλειδιών και κρυπτογράφησης είναι οι Slave1, Slave2, Slave3 και Slave4. Τα αποτελεσματα που πηραμε εχουν ως εξης: Xtensa Core: "Master" ISS Version: Current PC = x6744a Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions 929 ( 1. ) Instruction fetches 5535 ( 59.58) Uncached 185 ( 1.99 ) ICache fetches 535 ( ) ICache misses 279 ( 3. ) 5.21% of ICache fetches Taken branches 344 ( 3.7 ) Exceptions 29 (.31 ) WindowOverflow 15 (.16 ) 15

151 WindowUnderflow 14 (.15 ) Loads 1165 ( ) Uncached 4 (.4 ) DCache loads 1161 ( 12.5 ) DCache load misses 173 ( 1.86 ) 14.9% of DCache loads Stores 139 ( ) Cached 139 ( ) DCache write-thru misses 937 ( 1.9 ) 9.18% of cached stores Cycles: total = 6935 Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset

152 Παρατηρούμε ότι οι κύκλοι είναι περίπου οι μισοι από ότι ήταν στην αρχιτεκτονική με τους δυο slaves συνδεμενους παραλληλα. Xtensa Core: "Slave1" ISS Version: Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches 2139 ( 76.7 ) Uncached 185 (.67 ) ICache fetches 2854 ( 76.2) ICache misses 536 ( 1.95 ) 2.57% of ICache fetches Taken branches 43 ( 1.47 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4477 ( ) Uncached 4 (.2 ) DCache loads ) 152

153 DCache load misses 2674 ( 9.75 ) 59.78% of DCache loads Stores 1499 ( 5.46 ) Cached 1499 ( 5.46 ) DCache write-thru misses 137 ( 4.99 ) 91.39% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Βλέπουμε ότι τα στατιστικά λειτουργίας του Slave1 είναι πολύ κοντα στα στατιστικά λειτουργίας του Slave1 της αρχιτεκτονικης με τους δυο παραλληλους Slave. Η μόνη ουσιαστικη διαφορά είναι ότι οι κύκλοι λειτουργίας έχουν μειωθεί περίπου στο μισο, πραγμα αναμενόμενο αφού κρυπτογραφει πλέον τα μισά δεδομένα. 153

154 Xtensa Core: "Slave2" ISS Version: Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches ( 77.7 ) Uncached 185 (.67 ) ICache fetches 212 ( 76.4) ICache misses 558 ( 2.3 ) 2.66% of ICache fetches Taken branches 43 ( 1.47 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4477 ( ) Uncached 4 (.1 ) DCache loads 4473 (16.27 ) DCache load misses 2696 ( 9.81 ) 6.27% of DCache loads Stores 1499 ( 5.45 ) Cached 1499 ( 5.45 ) DCache write-thru misses 1396 ( 5.8 ) 93.13% of cached stores 154

155 Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Xtensa Core: "Slave3" ISS Version: Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line 155

156 Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches 285 ( ) Uncached 185 (.67 ) ICache fetches 262 ( 75.1) ICache misses 558 ( 2.3 ) 2.71% of ICache fetches Taken branches 43 ( 1.47 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4477 ( ) Uncached 4 (.1 ) DCache loads 4473 (16.27 ) DCache load misses 2587 ( 9.41 ) 57.84% of DCache loads Stores 1499 ( 5.45 ) Cached 1499 ( 5.45 ) DCache write-thru misses 1456 ( 5.3 ) 97.13% of cached stores Cycles: total = 6465 Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses

157 DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Xtensa Core: "Slave4" ISS Version: Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches 244 ( ) Uncached 185 (.67 ) ICache fetches 2219 ( 73.55) ICache misses 558 ( 2.3 ) 2.76% of ICache fetches 157

158 Taken branches 43 ( 1.47 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4477 ( ) Uncached 4 (.1 ) DCache loads 4473 (16.27 ) DCache load misses 2471 ( 8.99 ) 55.24% of DCache loads Stores 1499 ( 5.45 ) Cached 1499 ( 5.45 ) DCache write-thru misses 1414 ( 5.14 ) 94.33% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead

159 TIE global stalls Reset Παρατηρούμε ότι οι επεξεργαστές Slave έχουν πανομοιοτυπη συμπεριφορά. αυτό ήταν αναμενόμενο, αφού εκτελουν ακριβώς την ίδια λειτουργία και το ίδιο σχεδον πρόγραμμα. Επεξεργαστής Master: Εξερεύνηση ρυθμίσεων Instruction Cache Οπως αναφέρθηκε και στην αρχή του κεφαλαιου, ο επεξεργαστής που αναλαμβάνει τον ρολο του master εκτελει την ίδια ακριβώς λειτουργία με τον master της αρχιτεκτονικης που αναλυθηκε στο 7ο Κεφάλαιο. Ως εκ τούτου, και αφού το πρόγραμμα που τρεχουν διαφοροποιειται μόνο στον αριθμό των slaves που στελνουν τα δεδομένα, δεν χρηζει ξεχωριστης διερευνησης, αλλά θα χρησιμοποιησουμε τα ίδια στοιχεια. καταλήγουμε λοιπον ότι και εδώ η βέλτιστη Cache εντολών έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 32KB. Εξερεύνηση ρυθμίσεων Data Cache Αναλόγως με την cache εντολών, στηριζομαστε στα στοιχεια που προηγήθηκαν στο Κεφάλαιο 7 για την cache δεδομένων. Προκυπτει λοιπον ότι η βέλτιστη cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB Επιλογή επεκτάσεων TIEs Οπως εξηγηθηκε και πριν, η βελτίωση του Master, δεν είναι καθοριστικός παράγοντας για την βελτίωση της απόδοσης του συστήματος, αφού ηδη είναι αρκετά γρηγορος ώστε να περιμένει τους slave να ολοκληρώσουν την διεργασία τους. επιπλέον, όπως είδαμε και στο Κεφάλαιο 7, η προσθηκη επεκτάσεων, δεν βελτιωσε σε καποιο ουσιαστικο βαθμο την απόδοση και ως εκ τούτου δεν κρινεται απαραίτητη. 159

160 Επεξεργαστής Slave: Εξερεύνηση ρυθμίσεων Instruction Cache Ενώ για τον επεξεργαστή Master, δεν χρειάστηκε να κάνουμε ξεχωριστη Διερεύνηση, για τους slaves, δεν ειμαστε σιγουροι ότι μπορούμε να στηριχτουμε στα αποτελέσματα που προηγήθηκαν. Ο λογος είναι ότι πλέον κάθε επεξεργαστής έχει να κρυπτογραφησει λιγοτερα δεδομένα και ως εκ τούτου, μικροτερες cache μπορούν να έχουν καλυτερα αποτελέσματα. Θα κάνουμε λοιπον πληρη Διερεύνηση των cache, ξεκινωντας από την Cache εντολών. Σε κάθε Διερεύνηση της cache εντολών, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μέγεθος της γραμμής της Cache, και αλλάξαμε το συνολικό μέγεθος της cache. Για όλες τις διερευνήσεις που θα ακολουθήσουν, η cache δεδομένων έχει απευθείας συσχετισμό, μέγεθος γραμμής 16bit και συνολικό μέγεθος 1KB. Στα διαγράμματα επίσης εμφανίζονται οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί το πρόγραμμα του slave, που ουσιαστικά πρόκειται για ολόκληρο το DES.C χωρίς όμως τον έλεγχο των αποτελεσμάτων στο τέλος. Πρέπει εδώ να λάβουμε υπόψη μας ότι η διερευνήσεις των cache του master γίνονται κάτω από τον Xtensa Xplorer, και ο επεξεργαστής αντιμετωπίζεται απομονωμένος από το υπόλοιπο σύστημα. επομένως οι διερευνήσεις δεν θα λάβουν υπόψη τους τις διεργασίες Αποστόλης δεδομένων, ούτε λήψης, αλλά μόνο της κρυπτογράφησης.. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 133: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit 16

161 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 134: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 135: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64 bit Παρατηρούμε ότι ο καθοριστικός παράγοντας είναι το μέγεθος γραμμής της Cache. επίσης βελτίωση έχουμε και μεγαλωνοντας το μέγεθος της Cache μέχρι τα 4KB.μεγαλύτερο μέγεθος δεν συνεισφερει στις επιδόσεις. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό. 161

162 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 136: Διερεύνηση Cache εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 137: Διερεύνηση Cache εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 138: Διερεύνηση Cache εντολών "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64 bit Οπως και στις cache απευθείας συσχετισμού, ο πρωτευων παράγοντας βελτίωσης είναι το μέγεθος της γραμμής. επίσης, μεγέθη μεγαλυτερα των 4ΚΒ δεν μειωνουν τις αστοχίες. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 162

163 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 139: Διερεύνηση Cache εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 14: Διερεύνηση Cache εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 141: Διερεύνηση Cache εντολών "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit Θα επιλέξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενέργειας. Τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: 163

164 Διάγραμμα 142: Σύγκριση Cache εντολών "Slave" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache εντολών και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 4KB. παρατηρούμε επίσης ότι πρόκειται για την ίδια cache στην οποία είχαμε καταληξει μετά την αντιστοιχεί Διερεύνηση για την αρχιτεκτονική με τους δυο παραλληλους slaves στο Κεφάλαιο 7. Εξερεύνηση ρυθμίσεων Data Cache Αναλόγως με προηγουμένως, θα κάνουμε μια συστηματική Διερεύνηση των χαρακτηριστικών της cache δεδομένων, ετσι ώστε να καταλήξουμε σε ένα βέλτιστο συνδυασμό. Καθώς το μόνο που αλλαξε ουσιαστικά για τον επεξεργαστή που μελεταμε σε σχέση με τον αντίστοιχο slave στην αρχιτεκτονική με τους δυο παραλληλους slave, είναι το πληθος των δεδομένων που επεξεργάζεται, εδώ υπάρχει μια πιθανοτητα να καταλήξουμε σε διαφορετικο αποτέλεσμα. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 164

165 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 143: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 144: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 145: Διερεύνηση Cache Δεδομένων "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 64 bit Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό. 165

166 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 146: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 147: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 148: Διερεύνηση Cache Δεδομένων "Slave" με διπλό συσχετισμό και μέγεθος γραμμής 64 bit Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 166

167 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 149: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 15: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 151: Διερεύνηση Cache Δεδομένων "Slave" με τετραπλό συσχετισμό και μέγεθος γραμμής 64 bit 167

168 Από όλα τα παραπάνω διαγράμματα επιλεγουμε τις τρεις καλύτερες cache εντολών και θα τις συγκρίνουμε όπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας.τα αποτελέσματα της σύγκρισης φαίνονται στο παρακάτω διάγραμμα: Διάγραμμα 152: Σύγκριση Cache δεδομένων "Slave" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache εντολών και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μέγεθος γραμμής 64bit και συνολικό μέγεθος 16KB. Και πάλι καταλήξαμε στην ίδια cache που προεκυψε σαν βέλτιστη για τον slave του κεφαλαιου 7. Επιλογή επεκτάσεων TIEs Μετά από την σχετικη Διερεύνηση, και αφού ο κώδικας του προγράμματος δεν μπορεί να εκμεταλευθει τις SIMD εντολες, προεκυψε ότι την μεγιστη βελτίωση έχει ο ίδιος επεξεργαστής στον οποίο καταλήξαμε στο Κεφάλαιο 7. Τα αποτελέσματα των διερευνήσεων παρατιθονται στα παραρτήματα. 168

169 Κώδικας προσομοίωσης συστήματος. #include <stdlib.h> #include <string.h> #include <stdio.h> #include "mp.h" #include "xtmp_options.h" int XTMP_main(int argc, char** argv) { char *xtensasystemdirs[] = { XTENSA_SYSTEM, ; char *tdkfiles[]= {"queue_tdk", ; XTMP_params params1, params2, params3, params4, params5; XTMP_core Master, Slave1, Slave2, Slave3, Slave4; XTMP_memory sysmem1, sysmem2, sysmem3, sysmem4, sysmem5; XTMP_queue fifo1, fifo2, fifo3, fifo4, fifo5, fifo6, fifo7, fifo8, fifo9, fifo1, fifo11, fifo12; u32 pifwidth; bool bigendian; xtmp_options options; xtmp_options *opt = &options; init_options(opt); opt->summary= true; if (get_options(opt, argc, argv)!= ) { 169

170 exit(1); params1 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cynop_jpeg_base", tdkfiles); params2 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cynop_jpeg_base", tdkfiles); params3 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cynop_jpeg_base", tdkfiles); params4 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cynop_jpeg_base", tdkfiles); params5 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cynop_jpeg_base", tdkfiles); if (!params1) { fprintf(stderr, "Cannot create XTMP_params1 \n"); exit(1); if (!params2) { fprintf(stderr, "Cannot create XTMP_params2 \n"); exit(1); if (!params3) { fprintf(stderr, "Cannot create XTMP_params3 \n"); exit(1); if (!params4) { fprintf(stderr, "Cannot create XTMP_params4 \n"); exit(1); if (!params5) { fprintf(stderr, "Cannot create XTMP_params5 \n"); exit(1); 17

171 Master = XTMP_coreNew("Master", params1, ); Slave1 = XTMP_coreNew("Slave1", params2, ); Slave2 = XTMP_coreNew("Slave2", params3, ); Slave3 = XTMP_coreNew("Slave3", params4, ); Slave4 = XTMP_coreNew("Slave4", params5, ); if (!Master!Slave1!Slave2!Slave3!Slave4) { fprintf(stderr, "Cannot create XTMP_core's\n"); exit(1); bigendian = XTMP_isBigEndian(Master); pifwidth = XTMP_pifWidth(Master); if (pifwidth) { sysmem1 = XTMP_pifMemoryNew("sysmem1", pifwidth, bigendian, ); sysmem2 = XTMP_pifMemoryNew("sysmem2", pifwidth, bigendian, ); sysmem3 = XTMP_pifMemoryNew("sysmem3", pifwidth, bigendian, ); sysmem4 = XTMP_pifMemoryNew("sysmem4", pifwidth, bigendian, ); sysmem5 = XTMP_pifMemoryNew("sysmem5", pifwidth, bigendian, ); XTMP_connectToCore(Master, XTMP_PT_PIF,, sysmem1, ); XTMP_connectToCore(Slave1, XTMP_PT_PIF,, sysmem2, ); XTMP_connectToCore(Slave2, XTMP_PT_PIF,, sysmem3, ); XTMP_connectToCore(Slave3, XTMP_PT_PIF,, sysmem4, ); XTMP_connectToCore(Slave4, XTMP_PT_PIF,, sysmem5, ); 171

172 fifo1 = XTMP_queueNew("fifo1", 8, 4); fifo2 = XTMP_queueNew("fifo2", 8, 4); fifo3 = XTMP_queueNew("fifo3", 8, 4); fifo4 = XTMP_queueNew("fifo4", 8, 4); fifo5 = XTMP_queueNew("fifo5", 8, 4); fifo6 = XTMP_queueNew("fifo6", 8, 4); fifo7 = XTMP_queueNew("fifo7", 8, 4); fifo8 = XTMP_queueNew("fifo8", 8, 4); fifo9 = XTMP_queueNew("fifo9", 8, 4); fifo1 = XTMP_queueNew("fifo1", 8, 4); fifo11 = XTMP_queueNew("fifo11", 8, 4); fifo12 = XTMP_queueNew("fifo12", 8, 4); XTMP_connectQueue(fifo1, Slave1, "FIFO_OUT1", Master, "FIFO_IN1"); XTMP_connectQueue(fifo2, Slave2, "FIFO_OUT2", Master, "FIFO_IN2"); XTMP_connectQueue(fifo7, Slave3, "FIFO_OUT3", Master, "FIFO_IN3"); XTMP_connectQueue(fifo8, Slave4, "FIFO_OUT4", Master, "FIFO_IN4"); XTMP_connectQueue(fifo3, Master, "FIFO_OUT1", Slave1, "FIFO_IN1"); XTMP_connectQueue(fifo4, Master, "FIFO_OUT2", Slave1, "FIFO_IN2"); XTMP_connectQueue(fifo5, Master, "FIFO_OUT3", Slave2, "FIFO_IN3"); XTMP_connectQueue(fifo6, Master, "FIFO_OUT4", Slave2, "FIFO_IN4"); XTMP_connectQueue(fifo9, Master, "FIFO_OUT5", Slave3, "FIFO_IN5"); XTMP_connectQueue(fifo1, Master, "FIFO_OUT6", Slave3, "FIFO_IN6"); XTMP_connectQueue(fifo11, Master, "FIFO_OUT7", Slave4, "FIFO_IN7"); XTMP_connectQueue(fifo12, Master, "FIFO_OUT8", Slave4, "FIFO_IN8"); XTMP_setEventDriven(Master, true); XTMP_setEventDriven(Slave1, true); 172

173 XTMP_setEventDriven(Slave2, true); XTMP_setEventDriven(Slave3, true); XTMP_setEventDriven(Slave4, true); if (!XTMP_loadProgram(Master, "Master.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(Slave1, "des_core1.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(Slave2, "des_core2.out", )) { fprintf(stderr, "Cannot load des_core2\n"); exit(1); if (!XTMP_loadProgram(Slave3, "des_core3.out", )) { fprintf(stderr, "Cannot load des_core3\n"); exit(1); if (!XTMP_loadProgram(Slave4, "des_core4.out", )) { fprintf(stderr, "Cannot load des_core4\n"); exit(1); XTMP_setRelaxedSimulationCycleLimit(opt->ooo_cycles); if (opt->turbo) { 173

174 if (XTMP_switchSimMode(Master, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch producer to functional mode\n"); if (XTMP_switchSimMode(Slave1, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer1 to functional mode\n"); if (XTMP_switchSimMode(Slave2, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer2 to functional mode\n"); if (XTMP_switchSimMode(Slave3, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer3 to functional mode\n"); if (XTMP_switchSimMode(Slave4, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer4 to functional mode\n"); if (opt->enable_debug) { u32 port1 = XTMP_enableDebug(Master, opt->debug_port); u32 port2 = XTMP_enableDebug(Slave1, opt->debug_port); u32 port3 = XTMP_enableDebug(Slave2, opt->debug_port); u32 port4 = XTMP_enableDebug(Slave3, opt->debug_port); u32 port5 = XTMP_enableDebug(Slave4, opt->debug_port); if (!opt->xxdebug) { fprintf(stderr, "producer waiting for debugger on port %u\n", port1); 174

175 fprintf(stderr, "consumer waiting for debugger on port %u\n", port2); fprintf(stderr, "consumer waiting for debugger on port %u\n", port3); fprintf(stderr, "consumer waiting for debugger on port %u\n", port4); fprintf(stderr, "consumer waiting for debugger on port %u\n", port5); XTMP_setWaitForDebugger(Master, true); XTMP_setWaitForDebugger(Slave1, true); XTMP_setWaitForDebugger(Slave2, true); XTMP_setWaitForDebugger(Slave3, true); XTMP_setWaitForDebugger(Slave4, true); if (opt->xxdebug) { fputs(xtmp_getcoreinformation(), stdout); fflush(stdout); XTMP_stepSystem(opt->cycle_limit); if (opt->summary) { XTMP_printSummary(Master, false); XTMP_printSummary(Slave1, false); XTMP_printSummary(Slave2, false); XTMP_printSummary(Slave3, false); XTMP_printSummary(Slave4, false); XTMP_cleanup(); 175

176 return ; Τροποποίηση κώδικα DES.c Στην παράλληλη συνδεσμολογια που σχεδιασαμε, ο κώδικας χωριστηκε σε τεσσερα μέρη. Ο πρωτος επεξεργαστής, ο master, μοιραζει το κλειδί και το plaintext στους τεσσερις slaves. Αυτοι επειτα, παραγουν τα υποκλειδια και στη συνέχεια κρυπτογραφουν το plaintext που τους αντιστοιχεί. Στη συνέχεια στελνουν το κρυπτογραφημενο κείμενο πισω στον master, όπου γίνεται έλεγχος του αποτελέσματος. Ο κώδικας είναι παρομοιος με τον κώδικα του κεφαλαιου 7 και μπορεί ανάλογα να τροποποιηθει για μια αρχιτεκτονική με περισσότερους slave Ακολουθει η main του Master: Μain() { struct test8 *t,*tt; unsigned char cipher[16]; char c; int i,j; for (i =, t = test8; i < 47; i++, t++) { for (j=; j<8; j++) {WriteFifo1(t->key[j]); WriteFifo2(t->plain[j]); WriteFifo3(t->key[j]); WriteFifo4(t->plain[j]); WriteFifo5(t->key[j]); WriteFifo6(t->plain[j]); WriteFifo7(t->key[j]); 176

177 WriteFifo8(t->plain[j]); for (i =, tt=result,t = test8; i < 12; i++, t++, tt++) { for (j=; j<16; j++) {tt->cipher[j]=readfifo1(); (tt+12)->cipher[j]=readfifo2(); (tt+24)->cipher[j]=readfifo3(); (tt+36)->cipher[j]=readfifo4(); if(beq(tt->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); if(beq((tt+12)->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); if(beq((tt+24)->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); if(beq((tt+36)->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); printf("des: success\n"); 177

178 return ; Ακολουθει η main του Slave1: main() { struct test8 *t; unsigned char cipher[16]; char c; int i,j; for (i =, t = test8; i < 47; i++, t++) { for (j=; j<8; j++) { t->key[j]=readfifo1(); t->plain[j]=readfifo2(); for (i =, t = test8; i < 12; i++, t++) { des_set_key(t->key, (struct key *) keys); des_ecb_encrypt(t->plain, cipher, (struct key *) keys, 1); for (j=; j<16; j++) { WriteFifo1(t->cipher[j]); cipher[j]=; 178

179 return ; Αντιστοιχες είναι οι main των υπολοιπων slave, με μόνη διαφορά το μέρος του plaintext που κρυπτογραφειται. δηλαδή στον slave2 η for της κρυπτογράφησης είναι: for (i = 12, t = test8 +12; i < 24; i++, t++) του slave3: for (i = 24, t = test8 +24; i < 36; i++, t++) και του slave4: for (i = 36, t = test8 +36; i < 48; i++, t++) 179

180 Κεφάλαιο 9 Αρχιτεκτονική Παράλληλων Σωληνωσεων με Πεντε Επεξεργαστές Η τελευταια αρχιτεκτονική, που μελετήσαμε είναι και η πιο πολύπλοκη. Στηριζεται σε οσα προηγήθηκαν και περλαμβανει έναν επεξεργαστή σε ρολο master, ο οποίος μοιραζει το plaintext και το κλειδί κρυπτογράφησης σε δυο slaves, όπως εγινε περίπου στο Κεφάλαιο 7. ωστόσο οι, slave1 και slave2 είναι η αρχή μια αρχιτεκτονικης σωλήνωσης και δεν τρεχουν ολόκληρο το πρόγραμμα του DES. Παραγουν μόνο τα υποκλειδια, περίπου όπως εγινε στην αρχιτεκτονική του κεφαλαιου 6 και στη συνέχεια τα στελνουν στο επομενο σταδιο επεξεργασιας, που αποτελειται από τους slave3 και slave4. FIFO 1 FIFO 3 Slave 1 FIFO 5 FIFO 9 Slave 3 FIFO 7 Master FIFO 2 FIFO 4 Slave 2 FIFO 6 FIFO 1 Slave 4 FIFO 8 Διάγραμμα 153: Αρχιτεκτονική Παραλληλων Σωληνωσεων με Πεντε Επεξεργαστές Οι slave3 και slave4 εχωντας πλέον το plaintext και τα υποκλειδια, εκτελουν την κρυπτογράφηση. τέλος τα αποτελέσματα στελνονται πισω στον master για έλεγχο αποτελέσματος. Σε αυτή την αρχιτεκτονική έχουμε τρεις διαφορετικούς επεξεργαστές, οι οποίοι τρεχουν τρία διαφορετικά προγραμματα. Το πρόγραμμα του master είναι ομοιο με αυτό που χρησιμιοποιηθηκε στην αρχιτεκτονική παραλληλης συνδεσμολογιας με δυο 18

181 Επεξεργαστές και ως εκ τούτου δεν χρειάζεται ξεχωριστη διερευνηση.το πρόγραμμα των Slave1 και Slave2 είναι τα ίδια, αφού εκτελουν την ίδια λειτουργία και το μόνο που αλλαζει είναι τα δεδομένα τα οποία επεξεργαζονται. ανάλογα, το πρόγραμμα των Slave3 και Slave4 είναι τα ίδια. Θα ακολουθησει λοιπον Διερεύνηση για τους Slave2 και Slave3. Γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρινονται οι επιδόσεις σε ενεργειακη κατανάλωση και χωρο και προτεινεται μια βέλτιστη λύση για την συγκεκριμενη αρχιτεκτονική. Αρχικη υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Σαν Master αναφέρεται ο επεξεργαστής που χωριζει τα δεδομένα, τα στελνει στους slaves και αφού κρυπτογραφηθούν ελέγχει εάν τα αποτελέσματα είναι σωστα.οι επεξεργαστές που εκτελουν την διαδικασία της παραγωγής κλειδιών είναι οι Slave1, Slave2, και κρυπτογράφησης οι Slave3 και Slave4. Τα αποτελεσματα που πηραμε εχουν ως εξης: Xtensa Core: "Master" ISS Version: Current PC = x6746a Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions 3849 ( 1. ) Instruction fetches 2741 ( ) 181

182 Uncached 185 ( 4.81 ) ICache fetches 2556 ( ) ICache misses 287 ( 7.46 ) 11.23% of ICache fetches Taken branches 31 ( 8.5 ) Exceptions 29 (.75 ) WindowOverflow 15 (.39 ) WindowUnderflow 14 (.36 ) Loads 1182 ( 3.71 ) Uncached 4 (.1 ) DCache loads 1178 ( 3.61 ) DCache load misses 179 ( 4.65 ) 15.2% of DCache loads Stores 319 ( 8.29 ) Cached 319 ( 8.29 ) DCache write-thru misses 22 ( 5.72 ) 68.97% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads

183 Sync replays Special instructions Loop overhead TIE global stalls Reset Xtensa Core: "Slave1" ISS Version: Current PC = x6cb2 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches ( ) Uncached 185 (.52 ) ICache fetches ( ) ICache misses 415 ( 1.16 ) 1.62% of ICache fetches Taken branches 535 ( 1.49 ) Exceptions 3 (.1 ) WindowOverflow 2 (.1 ) WindowUnderflow 1 (. ) 183

184 Loads 573 ( ) Uncached 4 (.1 ) DCache loads 569 ( ) DCache load misses 2813 ( 7.85 ) 55.49% of DCache loads Stores 1175 ( 3.28 ) Cached 1175 ( 3.28 ) DCache write-thru misses 739 ( 2.6 ) 62.89% of cached stores Cycles: total = 6856 Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset

185 Xtensa Core: "Slave2" ISS Version: Current PC = x6cb2 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches 2398 ( ) Uncached 185 (.52 ) ICache fetches ( 66.4 ) ICache misses 415 ( 1.16 ) 1.74% of ICache fetches Taken branches 535 ( 1.49 ) Exceptions 3 (.1 ) WindowOverflow 2 (.1 ) WindowUnderflow 1 (. ) Loads 573 ( ) Uncached 4 (.1 ) DCache loads 569 ( ) DCache load misses 2274 ( 6.35 ) 44.86% of DCache loads Stores 1175 ( 3.28 ) Cached 1175 ( 3.28 ) 185

186 DCache write-thru misses 797 ( 2.22 ) 67.83% of cached stores Cycles: total = Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Xtensa Core: "Slave3" ISS Version: Current PC = x6cca Cache Configuration: 186

187 ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches 1651 ( ) Uncached 185 (.52 ) ICache fetches ( ) ICache misses 99 (.46 ).61% of ICache fetches Taken branches 21 (.93 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4429 ( 2.46 ) Uncached 4 (.2 ) DCache loads 4425 ( 2.44 ) DCache load misses 291 ( 9.66 ) 47.25% of DCache loads Stores 1275 ( 5.89 ) Cached 1275 ( 5.89 ) DCache write-thru misses 955 ( 4.41 ) 74.9% of cached stores Cycles: total = 7568 Summed Summed CPI CPI % Cycle % Cycle Committed instructions

188 Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads Sync replays Special instructions Loop overhead TIE global stalls Reset Xtensa Core: "Slave4" ISS Version: Current PC = x6cca Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line Events Number Number per 1 instrs Committed instructions ( 1. ) Instruction fetches ( ) 188

189 Uncached 185 (.85 ) ICache fetches ( 76.7 ) ICache misses 99 (.46 ).6% of ICache fetches Taken branches 21 (.93 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4429 ( 2.46 ) Uncached 4 (.2 ) DCache loads 4425 ( 2.44 ) DCache load misses 2129 ( 9.83 ) 48.11% of DCache loads Stores 1275 ( 5.89 ) Cached 1275 ( 5.89 ) DCache write-thru misses 979 ( 4.52 ) 76.78% of cached stores Cycles: total = 7599 Summed Summed CPI CPI % Cycle % Cycle Committed instructions Taken branches Pipeline interlocks ICache misses DCache misses Exceptions Uncached ifetches Uncached loads

190 Sync replays Special instructions Loop overhead TIE global stalls Reset Οπως και στις προηγούμενες αρχιτεκτονικες οπου υπήρχε μια μορφή παραλληλιας, παρατηρουμε ότι ο master αφού στειλει τα δεδομενα στους slaves απλώς αναμένει τα αποτελέσματα, οπως φαινεται και από τα περιπου 65 tie global stalls. Το προγραμμα που τρέχει ο master είναι το ιδιο με αυτο που τρέχει ο επεξεργαστης master στις αρχιτεκτονικες των κεφαλαιων 7 και 8. Επομενως ισχύουν τα ιδια για αυτον που ισχυαν και πριν. Επεξεργαστης Master: Εξερέυνηση ρυθμίσεων Instruction Cache Οπως αναφερθηκε και στην αρχη του κεφαλαιου, ο επεξεργαστης που αναλαμβανει τον ρολο του master εκτελει την ιδια ακριβώς λειτουργια με τον master της αρχιτεκτονικης που αναλυθηκε στο 7ο κεφαλαιο. Ως εκ τουτου, και αφού το προγραμμα που τρεχουν διαφοροποιειται μονο στον αριθμο των slaves που στελνουν τα δεδομενα, δεν χρηζει ξεχωριστης διερευνησης, αλλα θα χρησιμοποιησουμε τα ιδια στοιχεια. Καταληγουμε λοιπον ότι και εδω η βέλτιστη Cache εντολων έχει απευθείας συσχετισμό, μεγεθος γραμμης 64bit και συνολικο μεγεθος 32KB. Εξερέυνηση ρυθμίσεων Data Cache Αναλογως με την cache εντολων, στηριζομαστε στα στοιχεια που προηγήθηκαν στο κεφαλαιο 7 για την cache δεδομενων. Προκυπτει λοιπον ότι η βέλτιστη cache δεδομενων έχει απευθείας συσχετισμό, μεγεθος γραμμης 64bit και συνολικο μεγεθος 4KB Επιλογή επεκτάσεων TIEs 19

191 Οπως εξηγηθηκε και πριν, η βελτιωση του Master, δεν είναι καθοριστικός παράγοντας για την βελτιωση της αποδοσης του συστήματος, αφού ηδη είναι αρκετα γρηγορος ωστε να περιμένει τους slave να ολοκληρωσουν την διεργασία τους. Επιπλεον, οπως είδαμε και στο κεφαλαιο 7, η προσθηκη επεκτάσεων, δεν βελτιωσε σε καποιο ουσιαστικο βαθμο την αποδοση και ως εκ τουτου δεν κρινεται απαραίτητη. Επεξεργαστης Slave1: Εξερέυνηση ρυθμίσεων Instruction Cache Ενω για τον επεξεργαστη Master, δεν χρειαστηκε να κανουμε ξεχωριστη διερευνηση, για τους slaves, πρεπει να κανουμε ξεχωριστη διερευνηση. Το πρωτο σταδιο slave επεξεργαστων, που υλοποιουν οι slave1 και slave2 εκτελουν μια εργασια αναλογη με αυτη που εκτελει ο πρωτος επεξεργαστης στην αρχιτεκτονικη σωληνωσης που αναλυθηκε στο κεφαλαιο 7. Λαμβανουν το plaintext και το κλειδί από τον master και παραγουν τα υποκλειδια. επειδή εκτελουν την ιδια διεργασία, η ανάλυση που θα ακολουθησει ισχυει και για τους δυο. Σε καθε διερευνηση της cache εντολων, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μεγεθος της γραμμης της Cache, και αλλάξαμε το συνολικο μεγεθος της cache. Για όλες τις διερευνησεις που θα ακολουθήσουν, η cache δεδομενων έχει απευθείας συσχετισμό, μεγεθος γραμμης 16bit και συνολικο μεγεθος 1KB. Στα διαγράμματα επισης εμφανιζονται οι κυκλοι που χρειάστηκαν για να ολοκληρωθει το προγραμμα του slave1. Πρεπει εδω να λαβουμε υποψη μας ότι η διερευνησεις των cache του slave1 γίνονται κατω από τον Xtensa Xplorer, και ο επεξεργαστης αντιμετωπίζεται απομονωμένος από το υπόλοιπο συστημα. Επομενως οι διερευνησεις δεν θα λάβουν υποψη τους τις διεργασίες Αποστόλης δεδομενων, ούτε λήψης, αλλα μονο της κρυπτογραφησης. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 191

192 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 154: Διερεύνηση Cache Εντολων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 155: Διερεύνηση Cache Εντολων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit 192

193 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 156: Διερεύνηση Cache Εντολων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit Οπως βλέπουμε υπάρχει σημαντική βελτιωση οταν το μεγεθος της cache φτασει τα 2KB, και ελαχιστη βελτιωση οταν φτάσουμε τα 4KB. μεγαλύτερο μεγεθος δεν μειώνει περαιτερω τις αστοχίες. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 157: Διερεύνηση Cache Εντολων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 158: Διερεύνηση Cache Εντολων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit 193

194 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 159: Διερεύνηση Cache Εντολων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Παρατηρουμε ότι αυξηση του συνολικού μεγεθος της cache δεν μειώνει τις αστοχίες. Ο καθοριστικός παράγοντας οταν έχουμε διπλο συσχετισμό, είναι το μεγεθος γραμμης. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 16: Διερεύνηση Cache Εντολων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit 194

195 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 161: Διερεύνηση Cache Εντολων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 162: Διερεύνηση Cache Εντολων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit 195

196 Οπως και πριν, παρατηρουμε ότι η αυξηση του συνολικού μεγεθους της cache δεν μειώνει τις αστοχίες. Ο καθοριστικός παράγοντας είναι το μεγεθος της γραμμης. Για το ιδιο μεγεθος γραμμης αξίζει να σημειωθεί ότι όσο μεγαλυτερος ο συσχετισμός, τόσο καλυτερη είναι η αποδοση, ιδιαιτερα σε μικρες μνημες (1-2 ΚΒ).Θα επιλεξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολων και θα τις συγκρινουμε οπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας.τα αποτελέσματα της σύγκρισης φαινονται στο παρακατω διαγραμμα: Διάγραμμα 163: Συγκριση Cache Εντολων "Slave1" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache εντολων και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μεγεθος γραμμης 64bit και συνολικο μεγεθος 4KB. Εξερέυνηση ρυθμίσεων Data Cache Αναλογως με προηγουμενως, θα κανουμε μια συστηματική διερευνηση των χαρακτηριστηκων της cache δεδομενων, ετσι ωστε να καταληξουμε σε ένα βελτιστο συνδιασμο. Καθώς το μονο που αλλαξε ουσιαστικα για τον επεξεργαστη που μελεταμε σε σχέση με τον αντιστοιχο slave στην αρχιτεκτονικη με τους δυο παραλληλους slave, είναι το πληθος των δεδομενων που επεξεργάζεται, εδω υπάρχει μια πιθανοτητα να καταληξουμε σε διαφορετικο αποτέλεσμα. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 196

197 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 164: Διερεύνηση Cache Δεδομενων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 165: Διερεύνηση Cache Δεδομενων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 166: Διερεύνηση Cache Δεδομενων "Slave1" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit 197

198 Παρατηρουμε ότι ο καθοριστικός παράγοντας είναι το μεγεθος της cache. Στα 8KB έχουν ηδη μειωθει κατά πολυ οι αστοχίες, αν και μεγαλύτερη cache δεν οδηγει σε μεγαλύτερη μείωση. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 167: Διερεύνηση Cache Δεδομενων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 168: Διερεύνηση Cache Δεδομενων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 169: Διερεύνηση Cache Δεδομενων "Slave1" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit 198

199 Οπως και στις cache απευθείας συσχετισμου, οταν έχουμε cache στα 4KB έχουμε τεραστια πτωση στις αστοχίες. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 17: Διερεύνηση Cache Δεδομενων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 171: Διερεύνηση Cache Δεδομενων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 172: Διερεύνηση Cache Δεδομενων "Slave1" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit 199

200 Από ολα τα παραπάνω διαγράμματα επιλεγουμε τις τρεις καλύτερες cache εντολων και θα τις συγκρινουμε οπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας.τα αποτελέσματα της σύγκρισης φαινονται στο παρακατω διαγραμμα: Διάγραμμα 173: Συγκριση Cache δεδομενων "Slave1" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache δεδομένων και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μεγεθος γραμμης 64bit και συνολικο μεγεθος 16KB. Επιλογή επεκτάσεων TIEs Αφού μετά την διερευνηση που καναμε για τις cache του συστήματος καταληξαμε σε ένα βελτιστοποιημενο configuration, μενει να δουμε ποσο μπορουμε να βελτιώσουμε τον επεξεργαστη με επεκτασεις TIE. Σε αντιθεση με την διερευνηση που καναμε για τον master, ή οποια εγινε για τυπικους λόγους οπως εξηγηθηκε παραπάνω, η διερευνηση για τους slaves, μπορεί να οδηγησει σε σημαντικες βελτιωσεις. Οπως και προηγουμενως, ρυθμισαμε τον Xpress Compiler ωστε να παραγει επεκτασεις TIE. Στο παρακατω διαγραμμα φαινονται οι κυκλοι που χρειαζονται για την ολοκληρωση του προγραμματος μετρησης, μετά την ενσωματωση των TIEs καθώς και ο χωρος που θα καταλαμβανει ο επεξεργαστης μας μετά την υλοποιηση του απαραιτητου υλικου για την λειτουργια των επεκτάσεων. 2

201 Base + New TIE 17. Minimum + New TIE 22. Total Cycles -1-2 Αρχικό Configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie xpres(6).tie xpres(7).tie xpres(8).tie xpres(9).tie xpres(1).tie xpres(11).tie xpres(12).tie xpres(13).tie Διάγραμμα 174: Διερευνηση για TIEs στον "Slave1" Οπως ειχαμε δει και στα προηγούμενα κεφάλαια, όσο περισσοτερο υλικο χρειαζεται το tie για την ορθη λειτουργια του, τόσο περισσοτερο βελτιώνει τις επιδόσεις μας. από το διαγραμμα μπορουμε να δουμε ότι έχουμε τρεις ΤΙΕ επεκτασεις με τα καλυτερα αποτελέσματα: xpress.tie xpress(1).tie xpress(6).tie Με βάση αυτά τα TIE, δημιουργησαμε τις νεες μορφες του επεξεργαστη, ωστε να ελεγξουμε τις ενεργειακες τους απαιτησεις, καθώς και την βελτιωση που προκαλουν στους κυκλους λειτουργιας. Τα αποτελέσματα φαινονται στο παρακατω διαγραμμα, οπου παρατιθεται και το γινόμενο κύκλων επί ενέργειας (διαιρεμενο με 1 4, για εποπτικούς λόγους). 21

202 Κύκλοι Λειτουργίας Ενέργεια Κύκλοι Λειτουργίας * Ενέργεια/ Αρχικο Configuration Xpress.tie Xpress(1).tie Xpress(6).tie Διάγραμμα 175: Συγκριση αποδοσης Slave1 με και χωρις TIEs Βλέπουμε ότι με βάση το γινόμενο κύκλων επί ενέργειας έχουμε σημαντική βελτιωση. Την μεγαλύτερη βελτιωση βλέπουμε με το xpress(6).tie, με το οποιο παρατηρησαμε μείωση των κύκλων λειτουργιας κατά 63% και μείωση της ενέργειας κατά 51%. Το τιμημα ηταν η αυξηση του καταλαμβανομενου χώρου κατά 25%. Επεξεργαστης Slave3: Εξερέυνηση ρυθμίσεων Instruction Cache Οπως προηγηθηκε για τους Slave1 και Slave2 θα κανουμε διερευνηση για τους Slave3 και Slave4. Οι επεξεργαστες τρεχουν το ιδιο προγραμμα και ως εκ τουτου τα αποτελέσματα της διερευνησης για τον slave3 εφαρμοζωνται και στον Slave4. Οι επεξεργαστες, δεχονται τα υποκλειδια που έχουν προκυψει από τους Slave1 και Slave2 και στη συνέχεια κρυπτογραφουν τα δεδομενα. Τελος τα ξαναστελνουν στον master για επαληθευση αποτελέσματος. Σε καθε διερευνηση της cache εντολων, κρατήσαμε σταθερές τον συσχετισμό της μνήμης και το μεγεθος της γραμμης της Cache, και αλλάξαμε το συνολικο μεγεθος της cache. Για όλες τις διερευνησεις που θα ακολουθήσουν, η cache δεδομενων έχει απευθείας συσχετισμό, μεγεθος γραμμης 16bit και συνολικο μεγεθος 1KB. Στα διαγράμματα επισης εμφανιζονται οι κυκλοι που χρειάστηκαν για να ολοκληρωθει το προγραμμα του slave1. 22

203 Πρεπει εδω να λαβουμε υποψη μας ότι η διερευνησεις των cache των Slave3 γίνονται κατω από τον Xtensa Xplorer, και ο επεξεργαστης αντιμετωπίζεται απομονωμένος από το υπόλοιπο συστημα. Επομενως οι διερευνησεις δεν θα λάβουν υποψη τους τις διεργασίες Αποστόλης δεδομενων, ούτε λήψης, αλλα μονο της κρυπτογραφησης. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 23

204 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 176: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 177: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 178: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit Βλέπουμε ότι το μεγαλύτερο μεγεθος γραμμης οδηγει σε καλύτερες αποδοσεις. Ωστοσο δεν φαινεται να υπάρχει καποια βελτιωση από την αυξηση του μεγεθους της Cache. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό. 24

205 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 179: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 18: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 181: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Οπως και στις cache απευθείας συσχετισμου, βλέπουμε ότι το μεγαλύτερο μεγεθος γραμμης οδηγει σε καλύτερες αποδοσεις. Ωστοσο δεν φαινεται να υπάρχει καποια βελτιωση από την αυξηση του μεγεθους της Cache. Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 25

206 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 182: Διερεύνηση Cache Εντολών "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 183: Διερεύνηση Cache Εντολών "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 184: Διερεύνηση Cache Εντολών "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit Συγκρινουμε οπως πριν, τις τρεις καλύτερες cache εντολων με βάση το γινόμενο αστοχιών επί ενεργειας.τα αποτελέσματα της σύγκρισης φαινονται στο παρακατω διαγραμμα: 26

207 Διάγραμμα 185: Συγκριση Cache Εντολων "Slave3" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache εντολων και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μεγεθος γραμμης 64bit και συνολικο μεγεθος 4KB. Εξερέυνηση ρυθμίσεων Data Cache Αναλογως με προηγουμενως, θα κανουμε μια συστηματική διερευνηση των χαρακτηριστηκων της cache δεδομενων, ετσι ωστε να καταληξουμε σε ένα βελτιστο συνδιασμο. Οπως ειχαμε δει, η cache δεδομενων ηταν ενας από τους βασικους επιβραδυντικους παράγοντες και ως εκ τουτου περιμενουμε να δουμε ουσιαστικες βελτιωσεις στην αποδοση, βελτιστοποιωντας την. Ακολουθούν τα διαγράμματα για cache με απευθείας συσχετισμό. 27

208 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 186: Διερεύνηση Cache Δεδομένων "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 187: Διερεύνηση Cache Δεδομένων "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 188: Διερεύνηση Cache Δεδομένων "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 64 bit 28

209 Παρατηρουμε ότι και το μεγεθος γραμμης, και το συνολικο μεγεθος παιζουν ρολο, ωστοσο πιο σημαντικο είναι το μεγεθος γραμμης. Ακολουθούν τα διαγράμματα για cache με διπλό συσχετισμό Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 189: Διερεύνηση Cache Δεδομένων "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 19: Διερεύνηση Cache Δεδομένων "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 191: Διερεύνηση Cache Δεδομένων "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 64 bit Ακολουθούν τα διαγράμματα για cache με τετραπλό συσχετισμό. 29

210 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 192: Διερεύνηση Cache Δεδομένων "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 16 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 193: Διερεύνηση Cache Δεδομένων "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 32 bit Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 194: Διερεύνηση Cache Δεδομένων "Slave3" με τετραπλό συσχετισμό και μεγεθος γραμμης 64 bit 21

211 Από τα παραπάνω διαγράμματα βλέπουμε ότι όσο πολυπλοκοτερος ο συσχετισμός τόσο καλυτερα τα αποτελέσματα, ωστοσο ο πιο σημαντικος παράγοντας είναι το μεγεθος της μνήμης συνολικα.ωστοσο παρατηρουμε ότι αυξηση του συνολικού μεγεθους πάνω από τα 8KB δεν μειώνει περαιτερω τις αστοχίες. Θα επιλεξουμε από όλες τα παραπάνω διαγράμματα τις τρεις καλύτερες cache εντολων και θα τις συγκρινουμε οπως πριν, με βάση το γινόμενο αστοχιών επί ενεργειας.τα αποτελέσματα της σύγκρισης φαινονται στο παρακατω διαγραμμα: Διάγραμμα 195: Συγκριση Cache Δεδομενων "Slave3" με καλύτερες επιδόσεις Από τα παραπάνω βλέπουμε ότι η βέλτιστη cache δεδομενων και με τα δυο κριτήρια, έχει απευθείας συσχετισμό, μεγεθος γραμμης 64bit και συνολικο μεγεθος 16KB. Επιλογή επεκτάσεων TIEs Αφού μετά την διερευνηση που καναμε για τις cache του συστήματος καταληξαμε σε ένα βελτιστοποιημενο configuration, μενει να δουμε ποσο μπορουμε να βελτιώσουμε τον επεξεργαστη με επεκτασεις TIE. Οπως και προηγουμενως, ρυθμισαμε τον Xpress Compiler ωστε να παραγει επεκτασεις TIE. Στο παρακατω διαγραμμα φαινονται οι κυκλοι που χρειαζονται για την ολοκληρωση του προγραμματος μετρησης, μετά την ενσωματωση των TIEs καθώς και ο χωρος που θα καταλαμβανει ο επεξεργαστης μας μετά την υλοποιηση του απαραιτητου υλικου για την λειτουργια των επεκτάσεων. 211

212 Base + New TIE 17. Minimum + New TIE 22. Total Cycles Αρχικό Configuration xpres.tie xpres(1).tie xpres(2).tie xpres(3).tie xpres(4).tie xpres(5).tie xpres(6).tie xpres(7).tie xpres(8).tie xpres(9).tie xpres(1).tie xpres(11).tie xpres(12).tie xpres(13).tie xpres(14).tie xpres(15).tie xpres(16).tie Διάγραμμα 196: Διερευνηση για TIEs στον Slave3 Από τα παραπάνω βλέπουμε ότι υπαρχουν καποια ties που προσφερουν σημαντικες βελτιωσεις και μειωμενους κατά πολυ κυκλους λειτουργιας. Συγκεκριμενα οι πιο αποδοτικες προσθηκες ειναι οι: xpress.tie xpress(1).tie xpress(9).tie xpress(1).tie xpress(11).tie Με βάση αυτά τα TIE, δημιουργησαμε τις νεες μορφες του επεξεργαστη, ωστε να ελεγξουμε τις ενεργειακες τους απαιτησεις, καθώς και την βελτιωση που προκαλουν στους κυκλους λειτουργιας. Τα αποτελέσματα φαινονται στο παρακατω διαγραμμα, οπου παρατιθεται και το γινόμενο κύκλων επί ενέργειας (διαιρεμενο με 1 4, για εποπτικούς λόγους). 212

213 Κύκλοι Λε ιτ ουργ ίας Ενέργεια Κύκλοι Λε ιτ ουργ ίας * Ενέργεια/1 1 5 Αρχικό Configuration xpress.tie xpress(1).tie Xpress(9).tie Xpress(1).tie Xpress(11).tie Διάγραμμα 197: Συγκριση Αποδοσης Slave3 με και χωρις TIEs Βλέπουμε ότι με βάση το γινόμενο κύκλων επί ενέργειας έχουμε εντυπωσιακη βελτιωση. Την μεγαλύτερη βελτιωση βλέπουμε με το xpress.tie, με το οποιο παρατηρησαμε μείωση των κύκλων λειτουργιας κατά 46% και μείωση της ενέργειας κατά 26%. Το τιμημα ηταν η αυξηση του καταλαμβανομενου χώρου κατά 27%. 213

214 Κωδικας προσομοιωσης συστήματος. #include <stdlib.h> #include <string.h> #include <stdio.h> #include "mp.h" #include "xtmp_options.h" int XTMP_main(int argc, char** argv) { char *xtensasystemdirs[] = { XTENSA_SYSTEM, ; char *tdkfiles[]= {"queue_tdk", ; XTMP_params params1, params2, params3, params4, params5; XTMP_core Master, Slave1, Slave2, Slave3, Slave4; XTMP_memory sysmem1, sysmem2, sysmem3, sysmem4, sysmem5; XTMP_queue fifo1, fifo2, fifo3, fifo4, fifo5, fifo6, fifo7, fifo8, fifo9, fifo1, fifo11, fifo12; u32 pifwidth; bool bigendian; xtmp_options options; xtmp_options *opt = &options; init_options(opt); opt->summary= true; 214

215 if (get_options(opt, argc, argv)!= ) { exit(1); params1 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); params2 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); params3 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); params4 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); params5 = XTMP_paramsNewFromPath(xtensaSystemDirs, "cyn_des_faster_base", tdkfiles); if (!params1) { fprintf(stderr, "Cannot create XTMP_params1 \n"); exit(1); if (!params2) { fprintf(stderr, "Cannot create XTMP_params2 \n"); exit(1); if (!params3) { fprintf(stderr, "Cannot create XTMP_params3 \n"); exit(1); if (!params4) { fprintf(stderr, "Cannot create XTMP_params4 \n"); exit(1); if (!params5) { fprintf(stderr, "Cannot create XTMP_params5 \n"); 215

216 exit(1); Master = XTMP_coreNew("Master", params1, ); Slave1 = XTMP_coreNew("Slave1", params2, ); Slave2 = XTMP_coreNew("Slave2", params3, ); Slave3 = XTMP_coreNew("Slave3", params4, ); Slave4 = XTMP_coreNew("Slave4", params5, ); if (!Master!Slave1!Slave2!Slave3!Slave4) { fprintf(stderr, "Cannot create XTMP_core's\n"); exit(1); bigendian = XTMP_isBigEndian(Master); pifwidth = XTMP_pifWidth(Master); if (pifwidth) { sysmem1 = XTMP_pifMemoryNew("sysmem1", pifwidth, bigendian, ); sysmem2 = XTMP_pifMemoryNew("sysmem2", pifwidth, bigendian, ); sysmem3 = XTMP_pifMemoryNew("sysmem3", pifwidth, bigendian, ); sysmem4 = XTMP_pifMemoryNew("sysmem4", pifwidth, bigendian, ); sysmem5 = XTMP_pifMemoryNew("sysmem5", pifwidth, bigendian, ); XTMP_connectToCore(Master, XTMP_PT_PIF,, sysmem1, ); XTMP_connectToCore(Slave1, XTMP_PT_PIF,, sysmem2, ); XTMP_connectToCore(Slave2, XTMP_PT_PIF,, sysmem3, ); XTMP_connectToCore(Slave3, XTMP_PT_PIF,, sysmem4, ); XTMP_connectToCore(Slave4, XTMP_PT_PIF,, sysmem5, ); 216

217 fifo1 = XTMP_queueNew("fifo1", 8, 4); fifo2 = XTMP_queueNew("fifo2", 8, 4); fifo3 = XTMP_queueNew("fifo3", 8, 4); fifo4 = XTMP_queueNew("fifo4", 8, 4); fifo5 = XTMP_queueNew("fifo5", 32, 4); fifo6 = XTMP_queueNew("fifo6", 32, 4); fifo7 = XTMP_queueNew("fifo7", 8, 4); fifo8 = XTMP_queueNew("fifo8", 8, 4); fifo9 = XTMP_queueNew("fifo9", 8, 4); fifo1 = XTMP_queueNew("fifo1", 8, 4); XTMP_connectQueue(fifo1, Master, "FIFO_OUT1", Slave1, "FIFO_IN1"); XTMP_connectQueue(fifo2, Master, "FIFO_OUT2", Slave2, "FIFO_IN2"); XTMP_connectQueue(fifo3, Master, "FIFO_OUT3", Slave1, "FIFO_IN3"); XTMP_connectQueue(fifo4, Master, "FIFO_OUT4", Slave2, "FIFO_IN4"); XTMP_connectQueue(fifo5, Slave1, "FIFO_OUT5", Slave3, "FIFO_IN5"); XTMP_connectQueue(fifo6, Slave2, "FIFO_OUT6", Slave4, "FIFO_IN6"); XTMP_connectQueue(fifo7, Slave3, "FIFO_OUT3", Master, "FIFO_IN1"); XTMP_connectQueue(fifo8, Slave4, "FIFO_OUT4", Master, "FIFO_IN2"); XTMP_connectQueue(fifo9, Slave1, "FIFO_OUT3", Slave3, "FIFO_IN3"); XTMP_connectQueue(fifo1, Slave2, "FIFO_OUT4", Slave4, "FIFO_IN4"); XTMP_setEventDriven(Master, true); XTMP_setEventDriven(Slave1, true); XTMP_setEventDriven(Slave2, true); XTMP_setEventDriven(Slave3, true); 217

218 XTMP_setEventDriven(Slave4, true); if (!XTMP_loadProgram(Master, "Master.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(Slave1, "des_core1.out", )) { fprintf(stderr, "Cannot load des_core1\n"); exit(1); if (!XTMP_loadProgram(Slave2, "des_core2.out", )) { fprintf(stderr, "Cannot load des_core2\n"); exit(1); if (!XTMP_loadProgram(Slave3, "des_core3.out", )) { fprintf(stderr, "Cannot load des_core3\n"); exit(1); if (!XTMP_loadProgram(Slave4, "des_core4.out", )) { fprintf(stderr, "Cannot load des_core4\n"); exit(1); XTMP_setRelaxedSimulationCycleLimit(opt->ooo_cycles); 218

219 if (opt->turbo) { if (XTMP_switchSimMode(Master, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch producer to functional mode\n"); if (XTMP_switchSimMode(Slave1, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer1 to functional mode\n"); if (XTMP_switchSimMode(Slave2, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer2 to functional mode\n"); if (XTMP_switchSimMode(Slave3, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer3 to functional mode\n"); if (XTMP_switchSimMode(Slave4, XTMP_FUNCTIONAL)!= XTMP_DEVICE_OK) { fprintf(stderr, "Cannot switch consumer4 to functional mode\n"); if (opt->enable_debug) { u32 port1 = XTMP_enableDebug(Master, opt->debug_port); u32 port2 = XTMP_enableDebug(Slave1, opt->debug_port); u32 port3 = XTMP_enableDebug(Slave2, opt->debug_port); u32 port4 = XTMP_enableDebug(Slave3, opt->debug_port); u32 port5 = XTMP_enableDebug(Slave4, opt->debug_port); if (!opt->xxdebug) { 219

220 fprintf(stderr, "producer waiting for debugger on port %u\n", port1); fprintf(stderr, "consumer waiting for debugger on port %u\n", port2); fprintf(stderr, "consumer waiting for debugger on port %u\n", port3); fprintf(stderr, "consumer waiting for debugger on port %u\n", port4); fprintf(stderr, "consumer waiting for debugger on port %u\n", port5); XTMP_setWaitForDebugger(Master, true); XTMP_setWaitForDebugger(Slave1, true); XTMP_setWaitForDebugger(Slave2, true); XTMP_setWaitForDebugger(Slave3, true); XTMP_setWaitForDebugger(Slave4, true); if (opt->xxdebug) { fputs(xtmp_getcoreinformation(), stdout); fflush(stdout); XTMP_stepSystem(opt->cycle_limit); if (opt->summary) { XTMP_printSummary(Master, false); XTMP_printSummary(Slave1, false); XTMP_printSummary(Slave2, false); XTMP_printSummary(Slave3, false); XTMP_printSummary(Slave4, false); 22

221 XTMP_cleanup(); return ; Τροποποίηση κώδικα DES.c Στην παράλληλη συνδεσμολογια που σχεδιασαμε, ο κωδικας χωριστηκε σε τρια μερη. Ο πρωτος επεξεργαστης, ο master, μοιραζει το κλειδί και το plaintext στους δυο επεξεργαστες slave1 και slave2. Αυτοι επειτα, παραγουν τα υποκλειδια και στη συνέχεια τα στελνουν στος slave3 και slave 4. Αυτοι με την σειρα τους κρυπτογραφουν το plaintext που τους αντιστοιχει. Στη συνέχεια στελνουν το κρυπτογραφημενο κείμενο πισω στον master, οπου γινεται έλεγχος του αποτελέσματος. Ακολουθει η main του Master: main() { struct test8 *t,*tt; unsigned char cipher[16]; char c; int i,j; for (i =, t = test8; i < 24; i++, t++) { for (j=; j<8; j++) { WriteFifo1(t->key[j]); WriteFifo3(t->plain[j]); WriteFifo2((t+24)->key[j]); WriteFifo4((t+24)->plain[j]); 221

222 for (i =, tt=result,t = test8; i < 24; i++, t++, tt++) {tt->cipher[j]=readfifo1(); (tt+24)->cipher[j]=readfifo2(); if(beq(tt->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); if(beq((tt+24)->cipher, t->cipher, sizeof(t->cipher))) continue; printf("des: failed\n"); printf("des: success\n"); return ; printf("des: success\n"); return ; Ακολουθει η main του Slave1, η οποια είναι ιδια με την main του Slave2 με μονη διαφορα το κομματι του key που επεξεργαζονται. main() { struct test8 *t; unsigned char cipher[16]; char c; int i,j,k; 222

223 for (i =, t = test8; i < 24; i++, t++) { for (j=; j<8; j++) { t->key[j]=readfifo1(); t->plain[j]=readfifo3(); des_set_key(t->key, (struct key *) keys); for (j=; j<8; j++) {WriteFifo3(t->plain[j]); for (k=j*4; k<j*4+4; k++) {WriteFifo5(keys[k]); return ; Και τελος η main του Slave3, η οποια ειναι ιδια με την main του Slave4 με μονη διαφορα το κομματι του plaintext που κρυπτογραφειται. main() { struct test8 *t; unsigned char cipher[16]; char c; int i,j,k; 223

224 for (i =, t = test8; i < 24; i++, t++) { for (j=; j<8; j++) { t->plain[j]=readfifo3(); for (k=j*4; k<j*4+4; k++) { keys[k]=readfifo5(); des_ecb_encrypt(t->plain, cipher, (struct key *) keys, 1); for (i =, t = test8; i < 24; i++, t++) { WriteFifo3(t->cipher[j]); return ; 224

225 Κεφάλαιο 1 Συμπεράσματα Στα προηγούμενα κεφάλαια, μελετήσαμε ξεχωριστά κάποιες αρχιτεκτονικές, και μετρήσαμε την απόδοση τους. Έχοντας πλέον όλα τα στοιχεία αναλυτικά μπορούμε να κάνουμε κάποιες βασικές συγκρίσεις και να καταλήξουμε σε κάποια συμπεράσματα. Ξεκινήσαμε αυτή την εργασία προσπαθώντας να βελτιώσουμε την απόδοση του συστήματος μας στην εφαρμογή DES.c και σε αυτό είχαμε επιτυχία. Αρχικά είχαμε έναν μοναδικό επεξεργαστή που έτρεχε το DES.c. Οι μέθοδοι βελτίωσης του συστήματος ήταν τρεις: Προσθήκη περισσοτέρων επεξεργαστών και μοίρασμα του φόρτου εργασίας Βελτιστοποίηση των cache των επεξεργαστών Χρήση επεκτάσεων TIEs για την βελτίωση της απόδοσης των επεξεργαστών για την συγκεκριμένη εφαρμογή Ανάλογα με τις μεθόδους που ακολουθήσαμε, ο βαθμός της επιτυχίας είναι διαφορετικός και αναλύεται παρακάτω. Σαν βάση χρησιμοποιήσαμε την απόδοση του αρχικού μας επεξεργαστή, ο οποίος αναλύθηκε στο κεφάλαιο 5. Σύγκριση Ομογενών Συστημάτων. Όπως είδαμε στα προηγούμενα κεφάλαια, το πρώτο πράγμα που έπρεπε να κάνουμε, στον σχεδιασμό του πολυεπεξεργαστικου συστήματος, ήταν να υλοποιήσουμε το σύστημα, με ομογενείς επεξεργαστές, χωρίς καμία βελτιστοποίηση. Σε αυτή την περίπτωση, η βελτίωση στην απόδοση, που ισοδυναμεί σε λιγότερους κύκλους, προκύπτει επειδή ο φόρτος εργασίας μοιράζεται σε περισσότερους επεξεργαστές. Στο διάγραμμα που ακολουθεί, βλέπουμε τους κύκλους που χρειάστηκε κάθε αρχιτεκτονική για να ολοκληρώσει το πρόγραμμα Είναι χαρακτηριστικό ότι ακόμα και στο ομογενές σύστημα χωρίς καμία διερεύνηση και βελτιστοποίηση έχουμε σημαντική βελτίωση. Συγκεκριμένα, σε σχέση με το μονόεπεξεργαστικό μας σύστημα, το σύστημα με τους τέσσερις παράλληλους επεξεργαστές, είχε βελτίωση στους κύκλους 74%. 225

226 Σύγκριση Απόδοσης Ομογενών Αρχιτεκτονικών 3 25 Κύκλοι λειτουργίας Αρχιτεκ τονικ ή με έναν επεξεργαστή Αρχιτεκ τονικ ή με εναν επεξεργαστή master και τεσσερις slave Αρχιτεκτονικ ή με δυο επεξεργαστες με σύνδεσμολογια σωλήνωσης Αρχιτεκτονικ ή με έναν επεξεργαστή master και δυο παράλληλες συνδεσμολογίες σωλήνωσης Αρχιτεκτονική με εναν επεξεργαστη master και δυο slave Διάγραμμα 198: Σύγκριση Ομογενών Αρχιτεκτονικών Είναι βέβαια προφανές ότι ένα πολυεπεξεργαστικο σύστημα με 5 επεξεργαστές, χρειάζεται και τον πενταπλάσιο χώρο, σε σχέση με το μόνο-επεξεργαστικό μας σύστημα. Η ταχύτερη λύση εδώ, είναι η αρχιτεκτονική με έναν επεξεργαστή master και τέσσερις slave, που χρειάζεται μόνο 6935 κύκλους, την στιγμή που το αρχικό μας σύστημα χρειάστηκε

227 Σύγκριση Ετερογενών Συστημάτων με βελτιστοποιημένες Cache. Η πρώτη μέθοδος βελτίωσης που εφαρμόσαμε, ήταν να αλλάξουμε τις cache κάθε επεξεργαστή στα συστήματα μας, ώστε να επιτύχουμε λιγότερες αστοχίες, και κατά συνέπεια, λιγότερους κύκλους λειτουργίας σε κάθε επεξεργαστή. Η μέθοδος αυτή βελτίωσε σημαντικά τις επιδόσεις, όπως φαίνεται και στο διάγραμμα που ακολουθεί Σύγκριση Απόδοσης Αρχιτεκτονικών με βελτιστοποιήμενες Cache Ετερογενή Συστηματα με βελτιστοπ οιημένες Cache Ομογενή συστήματα 1 5 A B Γ Δ Ε Διάγραμμα 199: Σύγκριση Ετερογενων Αρχιτεκτονικών Αρχιτεκτονική με έναν επεξεργαστή Αρχιτεκτονική με δυο επεξεργαστες με σύνδεσμολογια σωλήνωσης Αρχιτεκτονική με εναν επεξεργαστη master και δυο slave Αρχιτεκτονική με εναν επεξεργαστή master και τεσσερις slave Αρχιτεκτονική με έναν επεξεργαστή master και δυο παράλληλες συνδεσμολογίες σωλήνωσης A B Γ Δ Ε 227

228 Οπως βλέπουμε, σε όλες τις περιπτώσεις είχαμε μείωση των κύκλων λειτουργίας, αν και δεν ήταν σε όλες τις περιπτώσεις ίδια. είναι χαρακτηριστικό ότι το μονο -επεξεργαστικο σύστημα, έπεσε από τους κύκλους στους 12498, δηλαδή σε λιγότερους από τους μισούς, ενώ το πιο γρήγορο ομογενές σύστημα, με τους τέσσερις επεξεργαστές slave έπεσε από τους 6935 στους Σύγκριση Ετερογενών Συστημάτων με βελτιστοποιημένες Cache και επεκτάσεις ΤΙΕ. όπως αναφέραμε παραπάνω, αφού βελτιώσουμε το σύστημα με τις κατάλληλες cache, μπορούμε να βελτιώσουμε ακόμα περισσότερο τις αποδόσεις χρησιμοποιώντας επεκτάσεις TIE. Στα προηγούμενα κεφάλαια, είδαμε σε κάθε επεξεργαστή ξεχωριστά, την βελτίωση που προκάλεσαν τα ΤΙΕ, ωστόσο στο XTMP είναι λίγο πιο περίπλοκη η κατάσταση. Μέσω των TIEs όπως είχαμε πει καταρχάς επεκτείνεται το σετ εντολών του επεξεργαστη.δημιυοργουνται νέες εντολές, είτε αυτές είναι Fusion, είτε αυτές είναι FLIX. Όμως, ενώ κάτω από το περιβάλλον του Xtensa, ο compiler αυτόματα εκμεταλλεύεται τις νέες εντολές για να επιταχυνθεί το πρόγραμμα, κάτω από το XMTP, πρέπει ο κώδικας του προγράμματος να αλλαχτεί από τους προγραμματιστές ώστε να έχουμε τα επιθυμητά αποτελέσματα. Στην παρούσα εργασία, δεν ασχοληθήκαμε με αυτό το κομμάτι, με την αλλαγή δηλαδή της δομής του προγράμματος ώστε να ενσωματωθούν οι νέες εντολές, καθώς κρίθηκε ότι ήταν εκτός των ορίων της διπλωματικής μας εργασίας. Ωστόσο μπορούμε να προσφέρουμε κάποια προσεγγιστικά στοιχεία για την βελτίωση κάθε συστήματος με βάση την βελτίωση των επεξεργαστών ατομικά, όπως μετρήθηκε κάτω από το περιβάλλον του Xtensa Xplorer. Σε κάθε σύστημα που αναλύθηκε, υπάρχει ένας ή περισσότεροι επεξεργαστές που είναι ενδεικτικοί για την απόδοση του συστήματος. Για παράδειγμα στο σύστημα με τους παράλληλους slave, είναι αυτοί οι slave που καθορίζουν την απόδοση του συστήματος, καθώς ο master απλώς αναμένει τα αποτελέσματα στο μεγαλύτερο μέρος του χρόνου. Αναλόγως στο pipeline σύστημα, ο τελευταίος επεξεργαστής που εκτελεί και την κρυπτογραφήσει είναι αντιπροσωπευτικός για την απόδοση του συστήματος. Τέλος, στο σύστημα με τις δυο παράλληλες pipeline συνδεσμολογίες, οι slave3 και slave4 είναι που ρυθμίζουν την απόδοση του συστήματος. Ωστόσο δεν μπορούμε να χρησιμοποιήσουμε την βελτίωση στους κύκλους λειτουργίας απευθείας σαν μέτρο σύγκρισης, καθώς αυτοί περιλαμβάνουν και καθυστερήσεις των πυρήνων που προηγούνται αυτών που μας ενδιαφέρουν. Αποφασίστηκε λοιπόν να χρησιμοποιήσουμε σαν μέτρο σύγκρισης, το πλήθος των εκτελεσθέντων εντολών για τους συγκεκριμένους επεξεργαστές. 228

229 Στο διάγραμμα που ακολουθεί, βλέπουμε για κάθε αρχιτεκτονική την βελτίωση σε εκτελεσμένες εντολές που προέκυψε από τα TIES. Η βελτίωση αυτή, με κάποιο περιθώριο σφάλματος είναι αυτή που θα περιμέναμε να δούμε και στα πολυεπεξεργαστικα συστήματα Με ΤΙΕ Χωρι ς ΤΙΕ 4 2 A B Γ Δ Ε Με ΤΙΕ Χωρις ΤΙΕ Διάγραμμα 2: Εκτελεσμένες Εντολές με και χωρις TIE Βελτίωση % 5 4 Σφάλμα Βελτιωση % A B Γ Δ Ε Διάγραμμα 21: Βελτιωση με TIE στην αποδοση των πολυεπεξεργαστικών συστημάτων 229

230 Με βάση τα παραπάνω περιμένουμε τους κύκλους κάθε συστήματος, μετά τις ΤΙΕ προσθήκες να κυμαίνονται στις τιμές του παρακάτω διαγράμματος: Σφάλμα Κύκλοι Λειτουργίας 2 1 A B Γ Δ Ε Διάγραμμα 22: Θεωρητικοι κυκλοι λειτουργιας πολυεπεξεργαστικών συστημάτων με επεκτάσεις TIE Είναι σημαντικό να σημειώσουμε εδώ, ότι παρόλο που δεν μπορούμε να καθορίσουμε με ακρίβεια το σφάλμα που εισάγεται σε κάθε μέτρηση, αυτό είναι σταθερό σαν ποσοστό, και ως εκ τούτου, η αρχιτεκτονική με τους τέσσερις παράλληλους slave παραμένει η βέλτιστη στο θέμα των κύκλων. Ενεργειακη αποδοση ομογενων και ετερογενων συστηματων Όπως ειδαμε παραπανω, υπηρξε σημαντικη μειωση στους κυκλους λειτουργιας, ωστοσο καθως αυξανεται το πληθος των επεξεργαστων σε ένα συστημα, αυξανονται οι ενεργειακες απαιτησεις συνολικα. Μειωνεται ωστοσο ο χρονος που χρειαζεται προκειμενου να ολοκληρωθει η εφαρμογη. Επομενως κριθηκε ότι είναι αρκετα ενδιαφερον να παραθεσουμε και τις ενεργειακες αποδοσεις κάθε συστηματος, αλλα και την καταναλωση ισχυς κάθε συστηματος. 23

231 ομογενες συστημα Ετερογενες συστημα 1 A Β Γ Δ Διάγραμμα 23: Καταναλωση Ισχύος πολυεπεξεργαστικών συστημάτων (σε mw) ομογενες συστημα Ετερογενες συστημα 1 5 A Β Γ Δ Διάγραμμα 24: Καταναλωση Ενέργειας πολυεπεξεργαστικών συστημάτων (σε uj) 231

232 Σύγκριση Γινομένου «Ενέργεια επί Κύκλων» των Συστημάτων Σε όλες τις διερευνήσεις που προηγήθηκαν, τελικό κριτήριο στις επιλογές μας ήταν το γινόμενο κύκλων λειτουργίας επί ενέργειας. Θα ήταν λοιπόν αμέλεια να μην συγκρίνουμε τα συστήματα μας και με βάση αυτό το κριτήριο. Ακολουθεί το διάγραμμα όπου βλέπουμε το γινόμενο κύκλων λειτουργίας επί ενέργεια για κάθε σύστημα, βασισμένο στον αρχικό μας επεξεργαστή «βάση» καθώς και για τα συστήματα όπου είχαμε βελτιστοποιήσει τις cache. Βελτιστοπ οιημένα κατά Cache Αρχικά Συστήματα Ένας επεξεργαστής Δυο επεξεργαστες με σύνδεσμολογια σωλήνωσης Ένας επεξεργαστης master και δυο slave Ένας επεξεργαστής Ένας επεξεργαστή master και τεσσερις slave master και δυο παράλληλες συνδεσμολογίες σωλήνωσης Διάγραμμα 25 : Σύγκριση όλων των αρχιτεκτονικών με βάση κύκλους επί ενέργεια Βλεπουμε ότι αναλογα με το μετρο συγκρισης που πηραμε καταληγουμε σε διαφορετικο αποτελεσμα, σαν «βελτιστη λυση». Στη συγκεκριμενη περιπτωση ειχαμε τους ελαχιστους κυκλους λειτουργιας στην αρχιτεκτονικη με τους τεσσερις slave. Όμως οπως βλέπουμε στο παραπανω διαγραμμα, με βαση το γινομενο κυκλων επι ενεργειας, με βάση το αρχικό μας σύστημα, με έναν επεξεργαστή, είχαμε την μέγιστη βελτίωση με το σύστημα με τις δυο παράλληλες συνδεσμολογίες σωλήνωσης με βελτίωση 76%. 232

Διαφορές single-processor αρχιτεκτονικών και SoCs

Διαφορές single-processor αρχιτεκτονικών και SoCs 13.1 Τα συστήματα και η επικοινωνία μεταξύ τους γίνονται όλο και περισσότερο πολύπλοκα. Δεν μπορούν να περιγραφούνε επαρκώς στο επίπεδο RTL καθώς αυτή η διαδικασία γίνεται πλέον αρκετά χρονοβόρα. Για αυτό

Διαβάστε περισσότερα

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΙΚΟΣ ΔΙΚΤΥΩΝ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΙΚΟΣ ΔΙΚΤΥΩΝ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΙΚΟΣ ΔΙΚΤΥΩΝ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΕΡΓΑΣΙΑ ΜΕ ΤΙΤΛΟ ΕΠΕΞΕΡΓΑΣΤΕΣ - CPU Μπακρατσάς Γιώργος geback007@yahoo.gr Δεκέμβριος, 2014 Περιεχόμενα ΕΙΣΑΓΩΓΗ... 3 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ... 4 ΧΡΟΝΟΛΟΓΙΕΣ

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Α ) Ενσωματωμένα Συστήματα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Κυκλωμάτων» Χειμερινό εξάμηνο

Κυκλωμάτων» Χειμερινό εξάμηνο «Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο 2016-2017 Εισαγωγή στα Συστήματα Ολοκληρωμένων Κυκλωμάτων Δρ. Παρασκευάς Κίτσος Επίκουρος Καθηγητής http://diceslab.cied.teiwest.gr E-mail: pkitsos@teimes.gr

Διαβάστε περισσότερα

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο ΤΕΙ Δυτικής Ελλάδας Τμήμα Μηχανικών Πληροφορικής ΤΕ Εργαστήριο Σχεδίασης Ψηφιακών Ολοκληρωμένων Κυκλωμάτων και Συστημάτων «Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο 2016-2017 Διάλεξη 1 η :

Διαβάστε περισσότερα

ΧΡΟΝΙΚΗ ΠΕΡΙΟΔΟΣ Γεωργία Πελέκη, Έλντα Μπάλι Τζαφέρι Τζένη, Αλεξία Παπαδοπούλου, Ντοριλέιν Γκαρσία

ΧΡΟΝΙΚΗ ΠΕΡΙΟΔΟΣ Γεωργία Πελέκη, Έλντα Μπάλι Τζαφέρι Τζένη, Αλεξία Παπαδοπούλου, Ντοριλέιν Γκαρσία ΧΡΟΝΙΚΗ ΠΕΡΙΟΔΟΣ 1964 1981 Γεωργία Πελέκη, Έλντα Μπάλι Τζαφέρι Τζένη, Αλεξία Παπαδοπούλου, Ντοριλέιν Γκαρσία Τεχνολογία Επιδόσεις Το 1958, ο Τζακ Κίλμπυ (Jack Kilby) της εταιρείας Texas Instruments κατάφερε

Διαβάστε περισσότερα

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής

Κεφάλαιο 4 ο. Ο Προσωπικός Υπολογιστής Κεφάλαιο 4 ο Ο Προσωπικός Υπολογιστής Μάθημα 4.3 Ο Επεξεργαστής - Εισαγωγή - Συχνότητα λειτουργίας - Εύρος διαδρόμου δεδομένων - Εύρος διαδρόμου διευθύνσεων - Εύρος καταχωρητών Όταν ολοκληρώσεις το μάθημα

Διαβάστε περισσότερα

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ Η Κεντρική Μονάδα Επεξεργασίας (Central Processing Unit -CPU) ή απλούστερα επεξεργαστής αποτελεί το μέρος του υλικού που εκτελεί τις εντολές ενός προγράμματος υπολογιστή

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής)

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής) ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α Γενικού Λυκείου (Μάθημα Επιλογής) Σύγχρονα Υπολογιστικά Συστήματα τους υπερυπολογιστές (supercomputers) που χρησιμοποιούν ερευνητικά εργαστήρια τα μεγάλα συστήματα (mainframes)

Διαβάστε περισσότερα

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Εισαγωγή στην πληροφορική Ενότητα 2: Βασικές αρχές λειτουργίας και χρήσης του υπολογιστή Αγγελίδης Παντελής Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών

Διαβάστε περισσότερα

Συστήματα σε Ολοκληρωμένα Κυκλώματα

Συστήματα σε Ολοκληρωμένα Κυκλώματα Συστήματα σε Ολοκληρωμένα Κυκλώματα Κεφάλαιο 5: Απόδοση και Ευελιξία του Σχεδιασμού Multiple-Processor SoC Διδάσκων: Καθηγητής Οδυσσέας Κουφοπαύλου Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών

Διαβάστε περισσότερα

Μάθημα 4.1 Βασικές μονάδες προσωπικού υπολογιστή

Μάθημα 4.1 Βασικές μονάδες προσωπικού υπολογιστή Μάθημα 4.1 Βασικές μονάδες προσωπικού υπολογιστή - Εισαγωγή - Αρχιτεκτονική προσωπικού υπολογιστή - Βασικά τμήματα ενός προσωπικού υπολογιστή - Η κεντρική μονάδα Όταν ολοκληρώσεις το μάθημα αυτό θα μπορείς:

Διαβάστε περισσότερα

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2 Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου Ενότητα 2 Τι είναι το PLC ΠΕΡΙΕΧΟΜΕΝΑ 2 Τι είναι το PLC. 2.1 Πλεονεκτήματα των PLC. 2.2 Η δομή ενός PLC. 2.3 Τα PLC της αγοράς. 2.4 Αρχή λειτουργίας ενός PLC.

Διαβάστε περισσότερα

Εισαγωγή στα Συστήματα Ψηφιακής Επεξεργασίας Σήματος

Εισαγωγή στα Συστήματα Ψηφιακής Επεξεργασίας Σήματος ΕΣ 08 Επεξεργαστές Ψηφιακών Σημάτων Εισαγωγή στα Συστήματα Ψηφιακής Επεξεργασίας Σήματος Κλήμης Νταλιάνης Λέκτορας Π.Δ.407/80 Τμήμα Επιστήμη και Τεχνολογίας Τηλεπικοινωνιών Πανεπιστήμιο Πελοποννήσου Αρχιτεκτονική

Διαβάστε περισσότερα

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, 2016-2017 ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ Μικροϋπολογιστής Υπολογιστής που χρησιμοποιείται για την είσοδο, επεξεργασία και έξοδο πληροφοριών. Είδη μικροϋπολογιστών:

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Α ) Ενσωματωμένα Συστήματα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC Πλεονεκτήματα MPSoC Είναι ευκολότερο να σχεδιαστούν πολλαπλοί πυρήνες επεξεργαστών από τον σχεδιασμό ενός ισχυρότερου και πολύ πιο σύνθετου μονού επεξεργαστή.

Διαβάστε περισσότερα

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΚΕΦΑΛΑΙΟ 7ο ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Γενικό διάγραμμα υπολογιστικού συστήματος Γενικό διάγραμμα υπολογιστικού συστήματος - Κεντρική Μονάδα Επεξεργασίας ονομάζουμε

Διαβάστε περισσότερα

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication ΡΟΜΠΟΤΙΚΗ ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication ΜΠΑΝΤΗΣ ΑΝΤΩΝΙΟΣ 533 ΤΣΙΚΤΣΙΡΗΣ ΔΗΜΗΤΡΙΟΣ 551 ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΟΥ ΡΟΜΠΟΤ LEGO NXT Το ρομπότ

Διαβάστε περισσότερα

Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε.

Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε. Μάθημα 5: Χαρακτηριστικά της Κ.Μ.Ε. 5.1 Το ρολόι Κάθε μία από αυτές τις λειτουργίες της Κ.Μ.Ε. διαρκεί ένα μικρό χρονικό διάστημα. Για το συγχρονισμό των λειτουργιών αυτών, είναι απαραίτητο κάποιο ρολόι.

Διαβάστε περισσότερα

*Ένας υπολογιστής είναι στην πραγματικότητα ένα σύστημα πολλών μερών που συνεργάζονται μεταξύ τους.

*Ένας υπολογιστής είναι στην πραγματικότητα ένα σύστημα πολλών μερών που συνεργάζονται μεταξύ τους. Ένας υπολογιστής είναι στην πραγματικότητα ένα σύστημα πολλών μερών που συνεργάζονται μεταξύ τους. *Τα φυσικά μέρη που μπορούμε να δούμε και να αγγίξουμε ονομάζονται συνολικά υλικό (hardware). * * υπερυπολογιστές

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 201 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Μικροϋπολογιστές

Διαβάστε περισσότερα

Εισαγωγή στην Αρχιτεκτονική Η/Υ

Εισαγωγή στην Αρχιτεκτονική Η/Υ Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2017-18 Εισαγωγή στην Αρχιτεκτονική (θεμελιώδεις αρχές λειτουργίας των υπολογιστών) http://mixstef.github.io/courses/comparch/ Μ.Στεφανιδάκης

Διαβάστε περισσότερα

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή 1 Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή μνήμη(cache). Η cache είναι πολύ σημαντική, πολύ γρήγορη,

Διαβάστε περισσότερα

4/10/2008. Εισαγωγή στη σχεδίαση συστημάτων VLSI. Περιεχόμενα μαθήματος. Γιώργος Δημητρακόπουλος. Βιβλιογραφία. Ψηφιακά συστήματα.

4/10/2008. Εισαγωγή στη σχεδίαση συστημάτων VLSI. Περιεχόμενα μαθήματος. Γιώργος Δημητρακόπουλος. Βιβλιογραφία. Ψηφιακά συστήματα. Εισαγωγή στη σχεδίαση συστημάτων VLSI Γιώργος Δημητρακόπουλος Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Περιεχόμενα μαθήματος Τα τρανζίστορ NMOS και PMOS Φυσικός σχεδιασμός των ψηφιακών κυκλωμάτων

Διαβάστε περισσότερα

Κεφάλαιο Το υπολογιστικό σύστημα Η εξέλιξη του ανθρώπου πραγματοποιήθηκε χάρη στην ικανότητά στον χειρισμό εργαλείων.

Κεφάλαιο Το υπολογιστικό σύστημα Η εξέλιξη του ανθρώπου πραγματοποιήθηκε χάρη στην ικανότητά στον χειρισμό εργαλείων. Α Γενικού Λυκείου Κεφάλαιο 1 1.1 Το υπολογιστικό σύστημα Η εξέλιξη του ανθρώπου πραγματοποιήθηκε χάρη στην ικανότητά στον χειρισμό εργαλείων. Ιδιαίτερη θέση έχουν οι Υπολογιστικές συσκευές. Μηχανισμός

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α ΤΑΞΗ

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α ΤΑΞΗ ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α ΤΑΞΗ Απαντήσεις στις ερωτήσεις του βιβλίου ΚΕΦΑΛΑΙΟ 3 1. 2. Από ποια στοιχεία αποτελείται το κεντρικό μέρος ενός υπολογιστή και ποια η λειτουργία καθενός; Κεντρική Μονάδα επεξεργασίας

Διαβάστε περισσότερα

Ηλεκτρονικοί Υπολογιστές Δ Εξάμηνο

Ηλεκτρονικοί Υπολογιστές Δ Εξάμηνο AEN ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΠΛΟΙΑΡΧΩΝ Ηλεκτρονικοί Υπολογιστές Δ Εξάμηνο ΘΕΩΡΙΑ 3 η Διάλεξη ΧΑΣΑΝΗΣ ΒΑΣΙΛΕΙΟΣ ΥΠΟΛΟΓΙΣΤΙΚΟ ΣΥΣΤΗΜΑ Υπολογιστικό σύστημα: Ένα δυναμικό σύστημα που: Χρησιμοποιείται για επίλυση προβλημάτων

Διαβάστε περισσότερα

ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΗ ΜΝΗΜΗ ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ. ΔΙΑΡΚΕΙΑ: 1 περίοδος

ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΗ ΜΝΗΜΗ ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ. ΔΙΑΡΚΕΙΑ: 1 περίοδος ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΗ ΜΝΗΜΗ ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ ΔΙΑΡΚΕΙΑ: 1 περίοδος Σε αυτό το μάθημα θα μάθετε να: 1. Αναφέρετε τα διάφορα είδη μνήμης και συσκευές που τις περιέχουν. 2. Περιγράφετε τα σημαντικά χαρακτηριστικά

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Β ) Λειτουργικό Σύστημα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

Chapter 4 ( ή 1 στο βιβλίο σας)

Chapter 4 ( ή 1 στο βιβλίο σας) Η διασύνδεση Υλικού και λογισμικού David A. Patterson και John L. Hennessy Chapter 4 ( ή 1 στο βιβλίο σας) Αξιολόγηση και κατανόηση της απόδοσης Δέκατη (10 η ) δίωρη διάλεξη. Διαφάνειες διδασκαλίας από

Διαβάστε περισσότερα

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Κώδικας μηχανής (E) Ο επεξεργαστής μπορεί να εκτελέσει το αρχιτεκτονικό σύνολο εντολών (instruction set architecture) Οι

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ ΜΑΘΗΜΑ 3 ο ΛΕΙΤΟΥΡΓΙΚΗ ΔΟΜΗ ΥΠΟΛΟΓΙΣΤΗ ΒΑΣΙΚΗ ΜΟΝΑΔΑ ΜΝΗΜΗ & CPU Λειτουργική Δομή Αρχιτεκτονική Von Neumann Όλοι οι υπολογιστές ακολουθούν την αρχιτεκτονική κατά Von-Neumann

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 1 ΥΛΙΚΟ ΥΠΟΛΟΓΙΣΤΩΝ

ΚΕΦΑΛΑΙΟ 1 ΥΛΙΚΟ ΥΠΟΛΟΓΙΣΤΩΝ 1.1 Το Υπολογιστικό Σύστηµα ΚΕΦΑΛΑΙΟ 1 ΥΛΙΚΟ ΥΠΟΛΟΓΙΣΤΩΝ Από τον υπολογιστή των Αντικυθήρων µέχρι τα αυτοκίνητα χωρίς οδηγό Κατηγορίες µε βάση το µέγεθος και τη χρήση: Υπερυπολογιστές (supercomputers)

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Μικροϋπολογιστές

Διαβάστε περισσότερα

Chapter 4 (1) Αξιολόγηση και κατανόηση της απόδοσης

Chapter 4 (1) Αξιολόγηση και κατανόηση της απόδοσης Chapter 4 (1) Αξιολόγηση και κατανόηση της απόδοσης Διαφάνειες διδασκαλίας από το πρωτότυπο αγγλικό βιβλίο (4 η έκδοση), μετάφραση: Καθ. Εφαρμογών Νικόλαος Πετράκης, Τμήματος Ηλεκτρονικών Μηχανικών του

Διαβάστε περισσότερα

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς ΤΕΙ Ηπείρου Παράρτημα Πρέβεζας Τμήμα Λογιστικής Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές Μάθημα 8 Κεντρική Μονάδα Επεξεργασίας και Μνήμη 1 Αρχιτεκτονική του Ηλεκτρονικού Υπολογιστή Μονάδες Εισόδου Κεντρική

Διαβάστε περισσότερα

Συστήματα σε Ολοκληρωμένα Κυκλώματα

Συστήματα σε Ολοκληρωμένα Κυκλώματα Συστήματα σε Ολοκληρωμένα Κυκλώματα Κεφάλαιο 2: Τεχνικές για Σχεδιασμό Χαμηλής Κατανάλωσης Ισχύος στα MPSoCs Διδάσκων: Καθηγητής Οδυσσέας Κουφοπαύλου Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών

Διαβάστε περισσότερα

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM). Μνήμες Ένα από τα βασικά πλεονεκτήματα των ψηφιακών συστημάτων σε σχέση με τα αναλογικά, είναι η ευκολία αποθήκευσης μεγάλων ποσοτήτων πληροφοριών, είτε προσωρινά είτε μόνιμα Οι πληροφορίες αποθηκεύονται

Διαβάστε περισσότερα

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ 1. Τι εννοούμε με τον όρο υπολογιστικό σύστημα και τι με τον όρο μικροϋπολογιστικό σύστημα; Υπολογιστικό

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Γ ) Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών

Διαβάστε περισσότερα

Μαθαίνοντας το hardware του αναπτυξιακού

Μαθαίνοντας το hardware του αναπτυξιακού 1. ΑΣΚΗΣΗ 1 Μαθαίνοντας το hardware του αναπτυξιακού Προϋποθέσεις Το εργαστήριο αυτό προϋποθέτει το διάβασμα και χρήση των εξής: Αρχείο mcbstr9.chm HTML, που δίδεται με τα υπόλοιπα αρχεία του εργαστηρίου.

Διαβάστε περισσότερα

Δομή Ηλεκτρονικού υπολογιστή

Δομή Ηλεκτρονικού υπολογιστή Δομή Ηλεκτρονικού υπολογιστή Η κλασσική δομή του μοντέλου που πρότεινε το 1948 ο Von Neumann Κεντρική Μονάδα Επεξεργασίας Είσοδος Αποθήκη Αποθήκη - Έξοδος Εντολών Δεδομένων Κλασσικό μοντέλο Von Neumann

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ 4 ο Μάθημα. Το Υλικό του Υπολογιστή

ΠΛΗΡΟΦΟΡΙΚΗ 4 ο Μάθημα. Το Υλικό του Υπολογιστή ΠΛΗΡΟΦΟΡΙΚΗ 4 ο Μάθημα Το Υλικό του Υπολογιστή Ηλεκτρονικός Υπολογιστής Πουλιέται οπουδήποτε (ακόμη και σε Super Market) Είναι παντού Ο φορητός έχει τις ίδιες δυνατότητες με τον επιτραπέζιο Γίνονται μικρότεροι

Διαβάστε περισσότερα

Συστήματα σε Ολοκληρωμένα Κυκλώματα

Συστήματα σε Ολοκληρωμένα Κυκλώματα Συστήματα σε Ολοκληρωμένα Κυκλώματα Κεφάλαιο 4: Αρχιτεκτονική των Embedded Μικροεπεξεργαστών Διδάσκων: Καθηγητής Οδυσσέας Κουφοπαύλου Τμήμα Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών ΕΙΣΑΓΩΓΗ Παρουσιάζεται

Διαβάστε περισσότερα

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Κεφάλαιο 1.6: Συσκευές αποθήκευσης Κεφάλαιο 1.6: Συσκευές αποθήκευσης 1.6.1 Συσκευές αποθήκευσης Μνήμη τυχαίας προσπέλασης - RAM Η μνήμη RAM (Random Access Memory Μνήμη Τυχαίας Προσπέλασης), κρατεί όλη την πληροφορία (δεδομένα και εντολές)

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Β ) Λειτουργικό Σύστημα Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής

Διαβάστε περισσότερα

ΤΜΗΜΑΤΑ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΗ

ΤΜΗΜΑΤΑ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΗ ΤΜΗΜΑΤΑ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΗ Τα τμήματα ενός ηλεκτρονικού υπολογιστή είναι: 1. Επεξεργαστής 2. Μνήμη RAM και ROM 3. Κάρτα γραφικών 4. Μητρική Πλακέτα 5. Σκληρός Δίσκος 6. DVD / Blue Ray 7. Τροφοδοτικό

Διαβάστε περισσότερα

Μάθημα 4.2 Η μητρική πλακέτα

Μάθημα 4.2 Η μητρική πλακέτα Μάθημα 4.2 Η μητρική πλακέτα - Εισαγωγή - Οι βάσεις του επεξεργαστή και της μνήμης - Οι υποδοχές της μητρικής πλακέτας - Άλλα μέρη της μητρική πλακέτας - Τυποποιήσεις στην κατασκευή μητρικών πλακετών Όταν

Διαβάστε περισσότερα

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή 1. Ηλεκτρονικός Υπολογιστής Ο Ηλεκτρονικός Υπολογιστής είναι μια συσκευή, μεγάλη ή μικρή, που επεξεργάζεται δεδομένα και εκτελεί την εργασία του σύμφωνα με τα παρακάτω

Διαβάστε περισσότερα

Εφαρμογές μικροελεγκτών

Εφαρμογές μικροελεγκτών Μικροελεγκτές Έναν ορισμό που θα μπορούσαμε να δώσουμε για τους μικροελεγκτές είναι ο εξής: Μικροελεγκτής είναι ένα προγραμματιζόμενο ολοκληρωμένο κύκλωμα το οποίο διαθέτει επεξεργαστή, μνήμη, διάφορα

Διαβάστε περισσότερα

Το μάθημα συνοπτικά (1) Το μάθημα συνοπτικά (2) Τι είναι ένα υπολογιστικό σύστημα ;

Το μάθημα συνοπτικά (1) Το μάθημα συνοπτικά (2) Τι είναι ένα υπολογιστικό σύστημα ; Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2017-18 Εισαγωγή στην Αρχιτεκτονική (θεμελιώδεις αρχές λειτουργίας των υπολογιστών) http://mxstef.gthub.o/courses/comparch/ Μ.Στεφανιδάκης

Διαβάστε περισσότερα

Λιβανός Γιώργος Εξάμηνο 2017Β

Λιβανός Γιώργος Εξάμηνο 2017Β Λιβανός Γιώργος Εξάμηνο 2017Β Υπολογιστικό σύστημα Υλικό (hardware) Λογισμικό (Software) Ολοκληρωμένα κυκλώματα, δίσκοι, οθόνη, κλπ. Λογισμικό συστήματος Προγράμματα εφαρμογών Χρειάζονται ένα συντονιστή!!!

Διαβάστε περισσότερα

Ιστορία των επεξεργαστών (CPUs)

Ιστορία των επεξεργαστών (CPUs) Ιστορία των επεξεργαστών (CPUs) Ο επεξεργαστής ή αλλιώς η Κεντρική Μονάδα Επεξεργασίας (C.P.U. - Central Processing Unit), είναι το βασικό εξάρτημα της λειτουργίας ενός υπολογιστή όπου και εκτελείται το

Διαβάστε περισσότερα

Προγραµµατισµός Συστηµάτων Πραγµατικού Χρόνου

Προγραµµατισµός Συστηµάτων Πραγµατικού Χρόνου Προγραµµατισµός Συστηµάτων Πραγµατικού Χρόνου Εφαρµογές σε µικρά ενσωµατωµένα συστήµατα Ιωάννης Καλόµοιρος Αναπληρωτής Καθηγητής Τµήµα Μηχανικών Πληροφορικής Μάθηµα 2ο Περίληψη και σηµαντικά σηµεία Τα

Διαβάστε περισσότερα

Αρχιτεκτονική Η/Υ Το chipset ενός υπολογιστικού συστήματος. Δρ. Μηνάς Δασυγένης

Αρχιτεκτονική Η/Υ Το chipset ενός υπολογιστικού συστήματος. Δρ. Μηνάς Δασυγένης Αρχιτεκτονική Η/Υ Το chipset ενός υπολογιστικού συστήματος Δρ. Μηνάς Δασυγένης mdasyg@ieee.org 1 1 Οι εταιρείες παραγωγής IC διαφημίζουν εκτός από τους επεξεργαστές και τα chipset τους 2 2 Τι είναι όμως

Διαβάστε περισσότερα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα 1. Ποια είναι η σχέση της έννοιας του μικροεπεξεργαστή με αυτή του μικροελεγκτή; Α. Ο μικροεπεξεργαστής εμπεριέχει τουλάχιστο έναν μικροελεγκτή. Β. Ο

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα : Ψηφιακά Ηλεκτρονικά Τεχνολογία ΙΙ, Θεωρητικής Κατεύθυνσης Ημερομηνία

Διαβάστε περισσότερα

Αρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή

Αρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή Γ Αρχιτεκτονική σχεδίαση με ηλεκτρονικό υπολογιστή Η χρήση των ηλεκτρονικών υπολογιστών στο τεχνικό σχέδιο, και ιδιαίτερα στο αρχιτεκτονικό, αποτελεί πλέον μία πραγματικότητα σε διαρκή εξέλιξη, που επηρεάζει

Διαβάστε περισσότερα

Σχεδιαστικά Προγράμματα Επίπλου

Σχεδιαστικά Προγράμματα Επίπλου Σχεδιαστικά Προγράμματα Επίπλου Καθηγήτρια ΦΕΡΦΥΡΗ ΣΩΤΗΡΙΑ Τμήμα ΣΧΕΔΙΑΣΜΟΥ & ΤΕΧΝΟΛΟΓΙΑΣ ΞΥΛΟΥ - ΕΠΙΠΛΟΥ Σχεδιαστικά Προγράμματα Επίπλου Η σχεδίαση με τον παραδοσιακό τρόπο απαιτεί αυξημένο χρόνο, ενώ

Διαβάστε περισσότερα

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή Αριθμός bit δίαυλου δεδομένων (Data Bus) Αριθμός bit δίαυλου διευθύνσεων (Address Bus) Μέγιστη συχνότητα λειτουργίας (Clock Frequency) Τύποι εντολών Αριθμητική

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη των Υπολογιστών

Εισαγωγή στην Επιστήμη των Υπολογιστών Εισαγωγή στην Επιστήμη των Υπολογιστών Ενότητα 3: Χειρισμός δεδομένων, 2ΔΩ Τμήμα: Αγροτικής Οικονομίας & Ανάπτυξης Διδάσκων: Θεόδωρος Τσιλιγκιρίδης Μαθησιακοί Στόχοι Η Ενότητα 3 διαπραγματεύεται θέματα

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2007

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2007 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2007 Μάθημα : Ψηφιακά Ηλεκτρονικά Τεχνολογία ΙΙ Τεχνικών Σχολών, Θεωρητικής Κατεύθυνσης

Διαβάστε περισσότερα

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ d.fotiadis@kastoria.teikoz.gr

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ d.fotiadis@kastoria.teikoz.gr Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΦΩΤΙΑ ΗΣ Α. ΗΜΗΤΡΗΣ M.Sc. ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ (Σ.Τ.ΕΦ.) ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ d.fotiadis@kastoria.teikoz.gr Ασύγχρονη σειριακή

Διαβάστε περισσότερα

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική Ταχύτητα εκτέλεσης Χρόνος εκτέλεσης = (αριθμός εντολών που εκτελούνται) Τί έχει σημασία: Χ (χρόνος εκτέλεσης εντολής) Αριθμός

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα : Τεχνολογία Αναλογικών και Ψηφιακών Ηλεκτρονικών Τεχνολογία ΙΙ, Πρακτικής

Διαβάστε περισσότερα

Φουκαράκη Χρυσούλα - ΓΕΛ Γαζίου

Φουκαράκη Χρυσούλα - ΓΕΛ Γαζίου ΚΕΦΑΛΑΙΟ 1 Φουκαράκη Χρυσούλα - ΓΕΛ Γαζίου Υπολογιστικά συστήματα σχεδιάστηκαν για να καλύψουν συγκεκριμένες ανάγκες σε συγκεκριμένη χρονική στιγμή και βοηθούν στη συνολική πρόοδο της τεχνολογίας Φουκαράκη

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΑΠΑΝΤΗΣΕΙΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΑΠΑΝΤΗΣΕΙΣ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα : Μικροϋπολογιστές Τεχνολογία Τ.Σ. Ι, Θεωρητικής κατεύθυνσης Ημερομηνία

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Ψηφιακά Ηλεκτρονικά

Διαβάστε περισσότερα

ΣΤΑΤΙΚΕΣ ΚΑΙ ΔΥΝΑΜΙΚΕΣ ΜΝΗΜΕΣ ΤΥΧΑΙΑΣ ΠΡΟΣΠΕΛΑΣΗΣ (Static and Dynamic RAMs). ΔΙΑΡΘΡΩΣΗ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΘΕΜΑΤΙΚΕΣ ΕΝΟΤΗΤΕΣ

ΣΤΑΤΙΚΕΣ ΚΑΙ ΔΥΝΑΜΙΚΕΣ ΜΝΗΜΕΣ ΤΥΧΑΙΑΣ ΠΡΟΣΠΕΛΑΣΗΣ (Static and Dynamic RAMs). ΔΙΑΡΘΡΩΣΗ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΘΕΜΑΤΙΚΕΣ ΕΝΟΤΗΤΕΣ ΣΤΑΤΙΚΕΣ ΚΑΙ ΔΥΝΑΜΙΚΕΣ ΜΝΗΜΕΣ ΤΥΧΑΙΑΣ ΠΡΟΣΠΕΛΑΣΗΣ (Static and Dynamic RAMs). ΔΙΑΡΘΡΩΣΗ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΘΕΜΑΤΙΚΕΣ ΕΝΟΤΗΤΕΣ ΒΑΣΙΚΑ ΣΤΟΙΧΕΙΑ ΗΜΙΑΓΩΓΙΚΩΝ ΜΝΗΜΩΝ. ΒΑΣΙΚΗ ΛΕΙΤΟΥΡΓΙΑ RAM CMOS. ΤΥΠΟΙ ΚΥΤΤΑΡΩΝ ΑΡΧΕΣ

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Μικροϋπολογιστές

Διαβάστε περισσότερα

i Στα σύγχρονα συστήματα η κύρια μνήμη δεν συνδέεται απευθείας με τον επεξεργαστή

i Στα σύγχρονα συστήματα η κύρια μνήμη δεν συνδέεται απευθείας με τον επεξεργαστή Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2015-16 Τεχνολογίες Κύριας (και η ανάγκη για χρήση ιεραρχιών μνήμης) http://di.ionio.gr/~mistral/tp/comparch/ Μ.Στεφανιδάκης i Στα σύγχρονα

Διαβάστε περισσότερα

Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή

Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή 1.5.1 Ανάλυση των μερών ενός υπολογιστή Μονάδα συστήματος Είναι το κουτί του υπολογιστή το οποίο φαίνεται αρκετά συμπαγές, αλλά στην πραγματικότητα αποτελείται

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Τεχνολογία και

Διαβάστε περισσότερα

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική υπολογιστών 1 Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου Αρχιτεκτονική υπολογιστών Ενότητα 2 : Η εξέλιξη και η απόδοση των υπολογιστών Καρβούνης Ευάγγελος 1 Η Γενιά: Λυχνίες κενού Electronic Numerical

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2016 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Τεχνολογία και

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008 Τεχνολογία Ι Θεωρητικής Κατεύθυνσης Τεχνικών Σχολών Μάθημα : Μικροϋπολογιστές

Διαβάστε περισσότερα

Εισαγωγή στην Αρχιτεκτονική Η/Υ

Εισαγωγή στην Αρχιτεκτονική Η/Υ Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2014-15 Εισαγωγή στην Αρχιτεκτονική (θεμελιώδεις αρχές λειτουργίας των υπολογιστών) http://di.ionio.gr/~mistral/tp/comparch/ Μ.Στεφανιδάκης

Διαβάστε περισσότερα

ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση

ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση Αρης Ευθυμίου Απόδοση απλής υλοποίησης Υλοποίηση ενός κύκλου είναι πολύ αργή κάθε κύκλος είναι τόσο μεγάλος όσο χρειάζεται

Διαβάστε περισσότερα

Δίκτυα Θεωρία

Δίκτυα Θεωρία Δίκτυα Θεωρία 2016-17 Κεφάλαιο 5 1. Τι γνωρίζετε για τα Δίκτυα Ευρείας Περιοχής; Τα τοπικά δίκτυα αποτελούν πολύ καλή λύση για επικοινωνία με περιορισμένη, όμως, απόσταση κάλυψης. Για να ικανοποιηθεί η

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ 1.1 ΕΙΣΑΓΩΓΙΚΗ ΑΝΑΦΟΡΑ ΣΤΑ ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ 1 1.1.1 Σήματα ψηφιακών συστημάτων 1 1.1.2 Παράλληλη και σειριακή μεταφορά πληροφορίας 2 1.1.3 Λογική τριών

Διαβάστε περισσότερα

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής Βασισμένο σε μια εργασία των Καζαρλή, Καλόμοιρου, Μαστοροκώστα, Μπαλουκτσή, Καλαϊτζή, Βαλαή, Πετρίδη Εισαγωγή Η Εξελικτική Υπολογιστική

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΣΤΗ ΔΙΟΙΚΗΣΗ ΚΑΙ ΣΤΗΝ ΟΙΚΟΝΟΜΙΑ 1 Ο ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΑΠΟΣΤΟΛΙΑ ΠΑΓΓΕ Πληροφορική Η επιστήμη που ασχολείται με: τη συλλογή την αποθήκευση την

Διαβάστε περισσότερα

1.4 Τεχνολογικές εξελίξεις στο Υλικό Υπολογιστών

1.4 Τεχνολογικές εξελίξεις στο Υλικό Υπολογιστών 1.4 Τεχνολογικές εξελίξεις στο Υλικό Υπολογιστών Μεταξύ του 2700 π.χ. και 2300 π.χ. εμφανίστηκε για πρώτη φορά ο Σουμεριακός Άβακας, ένας πίνακας με διαδοχικές στήλες που οριοθετούσαν τις διαδοχικές τάξεις

Διαβάστε περισσότερα

ΗΛΕΚΤΡΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ

ΗΛΕΚΤΡΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ Άριστος Πασιάς 1 ΗΛΕΚΤΡΟΝΙΚΟΙ ΥΠΟΛΟΓΙΣΤΕΣ Η ΔΟΜΗ ΤΟΥ ΗΛΕΚΤΡΟΝΙΚΟΥ ΥΠΟΛΟΓΙΣΤΗ Άριστος Πασιάς Σεπτέμβριος 2017 2 Στόχοι: Στο τέλος αυτού του μαθήματος ο μαθητή πρέπει: Να μπορεί να αναφέρει τα κύρια χαρακτηριστικά

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5 Ρυθμίζοντας τη Φορά Περιστροφής DC Κινητήρα. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο Πλαίσιο (front

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων Οργάνωση Η/Υ Ενότητα 1η: Εισαγωγή στην Οργάνωση Η/Υ Άσκηση 1: Αναλύστε τη διαδοχική εκτέλεση των παρακάτω εντολών MIPS με βάση τις

Διαβάστε περισσότερα

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας

Μάθημα 3.2: Κεντρική Μονάδα Επεξεργασίας Κεφάλαιο 3 ο Αρχιτεκτονική Υπολογιστών Μάθημα 3.: Κεντρική Μονάδα Επεξεργασίας Όταν ολοκληρώσεις το κεφάλαιο θα μπορείς: Να σχεδιάζεις την εσωτερική δομή της ΚΜΕ και να εξηγείς τη λειτουργία των επιμέρους

Διαβάστε περισσότερα

Η ιεραρχία της μνήμης

Η ιεραρχία της μνήμης Η ιεραρχία της μνήμης Οι περιορισμοί στο σχεδιασμό της μνήμης συνοψίζονται σε τρεις ερωτήσεις : 1) Πόση 2) Πόσο γρήγορη 3) Πόσο ακριβή Ερωτήματα-Απαντήσεις Ερώτημα πόση μνήμη. Είναι ανοικτό. Αν υπάρχει

Διαβάστε περισσότερα

Μαλούτα Θεανώ Σελίδα 1

Μαλούτα Θεανώ Σελίδα 1 ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α' ΛΥΚΕΙΟΥ ΕΝΟΤΗΤΑ 1η ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ 1. Τι ονομάζουμε υλικό και τι λογισμικό ενός υπολογιστικού συστήματος; 2. Τι είναι α) η μητρική πλακέτα ( motherboard), β) η κεντρική μονάδα

Διαβάστε περισσότερα

Τεχνολογίες Κύριας Μνήμης

Τεχνολογίες Κύριας Μνήμης Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών 2016-17 Τεχνολογίες Κύριας (και η ανάγκη για χρήση ιεραρχιών μνήμης) http://mixstef.github.io/courses/comparch/ Μ.Στεφανιδάκης Κύρια Μνήμη

Διαβάστε περισσότερα

5.1.4 Τεχνολογίες Ψηφιακής Συνδρομητικής Γραμμής (xdsl)

5.1.4 Τεχνολογίες Ψηφιακής Συνδρομητικής Γραμμής (xdsl) 5.1.4 Τεχνολογίες Ψηφιακής Συνδρομητικής Γραμμής (xdsl) 1 / 36 Το DSL προέρχεται από τα αρχικά των λέξεων Digital Subscriber Line (Ψηφιακή Συνδρομητική Γραμμή) και στην ουσία αποτελεί μια τεχνολογία που

Διαβάστε περισσότερα

Περιεχόμενα. Πρόλογος... XI. Κεφάλαιο 1. Συστήματα Βασισμένα σε FPGA Κεφάλαιο 2. Τεχνολογία VLSI Εισαγωγή Βασικές Αρχές...

Περιεχόμενα. Πρόλογος... XI. Κεφάλαιο 1. Συστήματα Βασισμένα σε FPGA Κεφάλαιο 2. Τεχνολογία VLSI Εισαγωγή Βασικές Αρχές... Περιεχόμενα Πρόλογος... XI Κεφάλαιο 1. Συστήματα Βασισμένα σε FPGA... 1 1.1 Εισαγωγή... 1 1.2 Βασικές Αρχές... 1 1.2.1 Boolean Άλγεβρα... 1 1.2.2 Σχηματικά και Λογικά Σύμβολα... 6 1.3 Ψηφιακή Σχεδίαση

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Εισαγωγή στην Πληροφορική Χειµερινό Εξάµηνο 2006-07 ρ. Παναγιώτης Χατζηδούκας (Π..407/80) Εισαγωγή στην Πληροφορική 1 Γενικές πληροφορίες Εισαγωγή στην Πληροφορική ιδασκαλία: Παναγιώτης Χατζηδούκας Email:

Διαβάστε περισσότερα

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 1 ο ΚΕΦΑΛΑΙΟ

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 1 ο ΚΕΦΑΛΑΙΟ ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 1 ο ΚΕΦΑΛΑΙΟ ΕΡΩΤΗΣΕΙΣ - ΑΣΚΗΣΕΙΣ 1. Έστω ότι θέλετε να συνδέσετε 20 υπολογιστές με συνδέσεις από σημείο σε σημείο (point-to-point), ώστε να είναι δυνατή η επικοινωνία όλων

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2006 Μάθημα: Τεχνολογία Αναλογικών και Ψηφιακών Ηλεκτρονικών Τεχνολογία Τεχνικών Σχολών

Διαβάστε περισσότερα

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Αρχιτεκτονική Υπολογιστών Ενότητα 13: (Μέρος Γ ) Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών

Διαβάστε περισσότερα

Κεφάλαιο 1 Εισαγωγή.

Κεφάλαιο 1 Εισαγωγή. Κεφάλαιο 1 Εισαγωγή Αντικείμενο της εργασίας είναι η σχεδίαση και κατασκευή του ηλεκτρονικού τμήματος της διάταξης μέτρησης των θερμοκρασιών σε διάφορα σημεία ενός κινητήρα Ο στόχος είναι η ανάκτηση του

Διαβάστε περισσότερα

Μελέτη προβλημάτων ΠΗΙ λόγω λειτουργίας βοηθητικών προωστήριων μηχανισμών

Μελέτη προβλημάτων ΠΗΙ λόγω λειτουργίας βοηθητικών προωστήριων μηχανισμών «ΔιερΕΥνηση Και Aντιμετώπιση προβλημάτων ποιότητας ηλεκτρικής Ισχύος σε Συστήματα Ηλεκτρικής Ενέργειας (ΣΗΕ) πλοίων» (ΔΕΥ.Κ.Α.Λ.Ι.ΩΝ) πράξη ΘΑΛΗΣ-ΕΜΠ, πράξη ένταξης 11012/9.7.2012, MIS: 380164, Κωδ.ΕΔΕΙΛ/ΕΜΠ:

Διαβάστε περισσότερα