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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

Περιεχόμενα Περιεχόμενα... 1 Ευρετήριο Διαγραμμάτων... 5 Περίληψη... 13 Κεφάλαιο 1... 16 Μια εισαγωγή στα συστήματα-σε-chip... 16 Η αρχή... 16 Τα πλεονεκτήματα του μικροεπεξεργαστή... 19 Η ανάγκη για βελτίωση... 2 Το τίμημα της βελτίωσης... 22 Άλλες μέθοδοι ώστε να βελτιώσουμε τις αποδόσεις... 23 Η μετά βαση σε πολύ-επεξεργαστικά συστήματα... 25 Κεφάλαιο 2... 26 Σχεδιασμός ενός... 26 Συστηματος-σε-ενα-Chip... 26 Συγκεκριμένη και αποδεκτή προσέγγιση... 26 Παραμετροποιησιμοι επεξεργαστές... 29 Xtensa Xplorer... 3 Επέκταση εντολών επεξεργαστή (TIEs)... 32 Ο Xpress Compiler... 34 Διερεύνηση μνήμης - Ενέργειας... 34 Κεφάλαιο 3... 36 Ελέγχοντας την απόδοση... 36 του επεξεργαστή... 36 Αλγόριθμος DES... 37 Γενική δομή... 38 Η Feistel (F) πράξη... 38 Το πρόγραμμα κλειδιών... 39 Το πρόγραμμα μέτρησης... 4 Κεφάλαιο 4... 42 Αρχιτεκτονικές υλοποίησης... 42 Αρχιτεκτονική ενός επεξεργαστή... 42 Αρχιτεκτονική Σωλήνωσης με Δυο Επεξεργαστές... 43 Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές... 43 Αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές... 44 Αρχιτεκτονική Παράλληλων Σωληνώσεων με Πέντε Επεξεργαστές... 45 Κεφάλαιο 5... 47 Αρχιτεκτονική... 47 με ένα επεξεργαστή... 47 Αρχικές ρυθμίσεις... 48 Διερεύνηση ρυθμίσεων Instruction Cache... 52 Διερεύνηση ρυθμίσεων Data Cache... 58 Επιλογή βέλτιστων ρυθμίσεων... 62 Επιλογή επεκτάσεων TIEs... 63 Οι Επιλεγμένες επεκτάσεις:... 65 Κεφάλαιο 6... 73 2

Αρχιτεκτονική Σωλήνωσης... 73 με δυο Επεξεργαστές... 73 Αρχική υλοποίηση... 74 Πρώτος Επεξεργαστής:... 78 Διερεύνηση ρυθμίσεων Instruction Cache... 78 Εξερεύνηση ρυθμίσεων Data Cache... 82 Επιλογή βέλτιστων ρυθμίσεων... 86 Επιλογή επεκτάσεων TIEs... 87 Δεύτερος Επεξεργαστής:... 89 Εξερεύνηση ρυθμίσεων Instruction Cache... 89 Εξερεύνηση ρυθμίσεων Data Cache... 94 Επιλογή βέλτιστων ρυθμίσεων... 98 Επιλογή επεκτάσεων TIEs... 99 Αποτελέσματα XTMP προσομοίωσης με βελτιστοποιημένες Cache... 11 Κώδικας προσομοίωσης συστήματος.... 12 Τροποποίηση κώδικα DES.c... 16 Κεφάλαιο 7... 11 Αρχιτεκτονική Παράλληλης Σύνδεσης με Τρεις Επεξεργαστές... 11 Αρχική υλοποίηση... 111 Επεξεργαστής Master:... 117 Εξερεύνηση ρυθμίσεων Instruction Cache... 117 Εξερεύνηση ρυθμίσεων Data Cache... 121 Επιλογή βέλτιστων ρυθμίσεων... 125 Επιλογή Επεκτάσεων Tie... 126 Επεξεργαστής Slave:... 127 Εξερεύνηση ρυθμίσεων Instruction Cache... 127 Εξερεύνηση ρυθμίσεων Data Cache... 132 Επιλογή βέλτιστων ρυθμίσεων... 136 Επιλογή επεκτάσεων TIEs... 136 Κώδικας προσομοίωσης συστήματος.... 139 Τροποποίηση κώδικα DES.c... 144 Κεφάλαιο 8... 148 Αρχιτεκτονική Παράλληλης Σύνδεσης με Πέντε Επεξεργαστές... 148 Αρχικη υλοποίηση... 15 Επεξεργαστής Master:... 159 Εξερεύνηση ρυθμίσεων Instruction Cache... 159 Εξερεύνηση ρυθμίσεων Data Cache... 159 Επιλογή επεκτάσεων TIEs... 159 Επεξεργαστής Slave:... 16 Εξερεύνηση ρυθμίσεων Instruction Cache... 16 Εξερεύνηση ρυθμίσεων Data Cache... 164 Επιλογή επεκτάσεων TIEs... 168 Κώδικας προσομοίωσης συστήματος.... 169 Τροποποίηση κώδικα DES.c... 176 Κεφάλαιο 9... 18 Αρχιτεκτονική Παράλληλων Σωληνωσεων με Πεντε Επεξεργαστές... 18 3

Αρχικη υλοποίηση... 181 Επεξεργαστης Master:... 19 Εξερέυνηση ρυθμίσεων Instruction Cache... 19 Εξερέυνηση ρυθμίσεων Data Cache... 19 Επιλογή επεκτάσεων TIEs... 19 Επεξεργαστης Slave1:... 191 Εξερέυνηση ρυθμίσεων Instruction Cache... 191 Εξερέυνηση ρυθμίσεων Data Cache... 196 Επιλογή επεκτάσεων TIEs... 2 Επεξεργαστης Slave3:... 22 Εξερέυνηση ρυθμίσεων Instruction Cache... 22 Εξερέυνηση ρυθμίσεων Data Cache... 27 Επιλογή επεκτάσεων TIEs... 211 Κωδικας προσομοιωσης συστήματος.... 214 Τροποποίηση κώδικα DES.c... 221 Κεφάλαιο 1... 225 Συμπεράσματα... 225 Σύγκριση Ομογενών Συστημάτων... 225 Σύγκριση Ετερογενών Συστημάτων με βελτιστοποιημένες Cache.... 227 Σύγκριση Ετερογενών Συστημάτων με βελτιστοποιημένες Cache και επεκτάσεις ΤΙΕ.... 228 Ενεργειακη αποδοση ομογενων και ετερογενων συστηματων... 23 Σύγκριση Γινομένου «Ενέργεια επί Κύκλων» των Συστημάτων... 232 ΠΑΡΑΡΤΗΜΑ Α... 233 Κώδικας προγράμματος DES.c... 233 ΠΑΡΑΡΤΗΜΑ Β... 263 Αναφορές Προσομοίωσης XTMP... 263 Αρχιτεκτονικη Σωληνωσης με δυο ομογενεις Επεξεργαστές... 263 Αρχιτεκτονικη Σωληνωσης με δυο ετερογενεις Επεξεργαστές... 265 Αρχιτεκτονικη Παραλληλης Συνδεσης με Τρεις Ομογενεις Επεξεργαστές... 267 Αρχιτεκτονικη Παραλληλης Συνδεσης με Τρεις Ετερογενεις Επεξεργαστές... 269 Αρχιτεκτονικη Παραλληλης Συνδεσης με Πεντε Ομογενεις Επεξεργαστές... 272 Αρχιτεκτονικη Παραλληλης Συνδεσης με Πεντε Ετερογενεις Επεξεργαστές... 277 Αρχιτεκτονική Παραλληλων Σωληνωσεων με Πεντε Ομογενεις Επεξεργαστές... 281 Αρχιτεκτονική Παραλληλων Σωληνωσεων με Πεντε ετερογενεις Επεξεργαστές... 286 4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

έγιναν φτηνοί, καταλήγοντας να κοστίζουν ακόμα και λιγότερο από 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

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

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

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

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

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

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

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

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

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

Τεταρτημοριο Καταστασης Επεξεργαστη Αρχεια Καταχωρητων Εντολες 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

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

Διάγραμμα 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

συγκεκριμένες εφαρμογές, είναι με την δημιουργία νέων εντολών, προσαρμοσμένων σε αυτές τις εφαρμογές. Οι νέες αυτές εντολές μπορούν να δημιουργηθούν με τρεις τρόπους: Με εντολες 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

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

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

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

αυθεντικής εφαρμογής για σύγκριση της απόδοσης ενός επεξεργαστή παρέχει σημαντικά δεδομένα και πρέπει να δίνεται ιδιαίτερη σημασία σε Αυτά. Στην παρούσα εργασία επιλέξαμε να δημιουργήσουμε ένα SOC σύστημα βελτιστοποιημένο για κρυπτογράφηση και αποκρυπτογράφηση δεδομένων. Μια που υπάρχει πληθώρα κρυπτογραφικών αλγόριθμων με διαφορετικά χαρακτηρίστηκα έπρεπε να επιλέξουμε κάποιον ο οποίος να είναι σχετικά αντιπροσωπευτικός. Ο αλγόριθμος DES, ο οποίος χρησιμοποιήθηκε ευρύτατα στο παρελθόν και χρησιμοποιείται εν μέρη ακόμα με την μορφή του Triple DES ήταν η επιλογή μας. Αλγόριθμος DES Ο αλγόριθμος DES ( Data Encryption Standard) είναι ένας κρυπτογραφικός αλγόριθμος, επιλεγμένος το 1976 σαν το επίσημο πρότυπο κρυπτογράφησης κυβερνητικών πληροφοριών των ΗΠΑ το 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

Γενική δομή 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

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

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

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

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

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

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

επεξεργάζεται την ομάδα των δεδομένων που έχουμε προκαθορίσει και το κρυπτογραφημένο κείμενο επιστρέφει στον 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

Η συγκεκριμένη αρχιτεκτονική αποτελείται από έναν επεξεργαστή σε ρόλο 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

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

κατανάλωση που μετρήθηκε (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

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

Και τα χαρακτηρίστηκα του διαύλου του επεξεργαστή και των μνημών 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: 7.1.1.1 Time for Simulation = 1.5 seconds (user = 1.5 system =.) 5

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 78772 ( 78.16 ) Uncached 185 (.18 ) ICache fetches 78587 ( 77.97 ) 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 18367 ( 18.22 ) Uncached 4 (. ) DCache loads 18363 ( 18.22 ) 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 = 22828 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 1786 1. 1. 44.2 44.2 Taken branches 2947.292 1.292 1.29 45.49 Pipeline interlocks 1.1 1.32.4 45.54 ICache misses 17868.1773 1.275 7.84 53.37 DCache misses 14234 1.342 2.2417 45.71 99.8 Exceptions 149.15 2.2432.7 99.15 51

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

διερεύνηση, πρώτα της 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

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

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

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

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

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

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

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

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

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

Να έχουμε στην cache εντολών μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 32k και απευθείας συσχετισμό και στην cache δεδομένων μέγεθος γραμμής 64bit, συνολικό μέγεθος cache 16KΒ και διπλό συσχετισμό. Στο παρακάτω διάγραμμα φαίνονται για τις δυο ρυθμίσεις που αναφέρθηκαν παραπάνω αλλά και για τις Αρχικές ρυθμίσεις μας, οι κύκλοι που χρειάστηκαν για να ολοκληρωθεί η εφαρμογή DES.C, το γινόμενο κύκλων επί καταναλισκόμενης ενέργειας καθώς και το γινόμενο των κύκλων επί της καταναλισκόμενης ενέργειας, επί του καταλαμβανόμενου χώρου (διαιρεμενοι με 3x1 4 για εποπτικούς λόγους). 3 25 2 15 1 Κυκλοι λειτουργιας Κυκλοι λειτουργιας* Ενεργεια/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

επεκτάσεις TIE, και μετά να συγκρίνει τις επιδόσεις τους. Οι επεκτάσεις που παράγονται μπορούν να ενσωματωθούν με δυο τρόπους στον επεξεργαστή: είτε αφήνοντας τον αρχικό επεξεργαστή όπως ήταν και προσθέτοντας το υλικό που χρειάζεται για να πραγματοποιούνται οι επιπλέον λειτουργίες, είτε απομακρύνοντας υλικό που δεν χρειάζεται για τις επιπλέον λειτουργίες και αφήνοντας τελικά μόνο τα απολύτως απαραίτητα. Στο παρακάτω διάγραμμα φαίνονται και οι δυο περιπτώσεις, καθώς και οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs. 14 12 1 8 6 4 3. 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

xpress.tie xpress(1).tie xpress(12).tie xpress(18).tie Βέβαια τα ονόματα αυτά δεν μας δίνουν πληροφορίες για το πως επιτυγχάνονται οι βελτίωσης, αυτό όμως θα μας απασχολήσει μόνο όταν επιλέξουμε ένα τελικό tie. Με βάση αυτά τα TIE, δημιουργήσαμε τις νέες μορφές του επεξεργαστή, ώστε να ελέγξουμε τις ενεργειακές τους απαιτήσεις, καθώς και την βελτίωση που προκαλούν στους κύκλους λειτουργίας. Τα αποτελέσματα φαίνονται στο παρακάτω διάγραμμα, όπου Παρατίθεται και το γινόμενο κύκλων επί ενέργειας (διαιρεμένο με 5x1, για εποπτικούς λόγους). 14 12 1 8 6 17. 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

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

Μια 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

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

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

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

Μια 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

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

Κεφάλαιο 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

αξιολογηθούν παρακάτω υπάρχουν οι αντίστοιχοι κώδικες που τα περιγράφουν στα παραρτήματα. Η πορεία που ακολουθήσαμε είναι ανάλογη με την πορεία που ακολουθήθηκε στο Κεφάλαιο 5. αρχικά περιγράψαμε το σύστημα μας με την χρήση του XTMP, στη συνεχεία προσαρμόσαμε τον κώδικα του DES.c ετσι ώστε να τρέχει σωστά σε ένα σύστημα με δυο Επεξεργαστές. Μετρήσαμε την απόδοση του συστήματος με τον αρχικό μας επεξεργαστή και στη συνεχεία κάναμε μια διερεύνηση για την cache εντολών και για την cache δεδομένων κάθε επεξεργαστή. Αφού επιλέχτηκε η βέλτιστη λύση και για τους δυο επεξεργαστές, δημιουργήσαμε TIE επεκτάσεις και για τους δυο και μετρήσαμε την βέλτιστη απόδοση του συστήματος. Αρχική υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Ο επεξεργαστής που στέλνει δεδομένα στην FIFO αναφέρεται σαν producer ενώ αυτός που λαμβάνει αναφέρεται σαν consumer Τα αποτελέσματα που πήραμε έχουν ως εξής: Xtensa Core: "producer" ISS Version: 7.1.1.1 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 64331 ( 1. ) Instruction fetches 44534 ( 69.23 ) Uncached 185 (.29 ) 74

ICache fetches 44349 ( 68.94 ) ICache misses 551 (.86 ) 1.24% of ICache fetches Taken branches 972 ( 1.51 ) Exceptions 3 (. ) WindowOverflow 2 (. ) WindowUnderflow 1 (. ) Loads 954 ( 14.77 ) Uncached 4 (. ) DCache loads 95 ( 14.77 ) 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 = 11671 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 64331 1. 1. 55.12 55.12 Taken branches 2131.331 1.331 1.83 56.95 Pipeline interlocks 37.6 1.337.3 56.98 ICache misses 4247.66 1.997 3.64 6.62 DCache misses 4483.6853 1.785 37.77 98.39 Exceptions 15.2 1.7852.1 98.4 Uncached ifetches 1115.173 1.825.96 99.36 Uncached loads 24.4 1.829.2 99.38 Sync replays 38.59 1.888.33 99.7 75

Special instructions 76.12 1.81.7 99.77 Loop overhead 94.15 1.8115.8 99.85 TIE global stalls 172.27 1.8141.15 1. Reset 5. 1.8142. 1. Xtensa Core: "consumer" ISS Version: 7.1.1.1 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 33858 ( 78.71 ) Uncached 185 (.43 ) ICache fetches 33673 ( 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 ( 22.48 ) 76

Uncached 4 (.1 ) DCache loads 9667 ( 22.47 ) 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 = 12317 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 4318 1. 1. 34.93 34.93 Taken branches 1259.293 1.293 1.2 35.95 Pipeline interlocks 95.22 1.315.8 36.3 ICache misses 284.652 1.967 2.28 38.3 DCache misses 3848.8945 1.9912 31.24 69.54 Exceptions 147.34 1.9946.12 69.66 Uncached ifetches 1115.259 2.25.91 7.57 Uncached loads 24.6 2.211.2 7.59 Sync replays 385.89 2.3.31 7.9 Special instructions 88.2 2.321.7 7.97 Loop overhead 143.33 2.354.12 71.9 TIE global stalls 3567.8277 2.8631 28.91 1. Reset 5.1 2.8632. 1. Με έντονο μαύρο βλέπουμε τις αστοχίες των cache. βλέπουμε ότι και στους δυο επεξεργαστές, οι cache δεδομένων έχουν σημαντικό ποσοστό αστοχιών, Ωστόσο το 77

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

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

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

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

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

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

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

5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 2 1 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 56: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 16bit 5 45 4 35 3 25 2 15 1 5 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 57: Διερεύνηση Cache Δεδομένων "Producer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit 5 45 4 35 3 25 2 15 1 5 1 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

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

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

8 7 6 5 4 3 2 1 3. 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

9 8 7 6 5 4 17. Total Cycles 18. Total Energy cycles*energy1 3 2 1 Αρχικο 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

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

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

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

14 12 1 8 6 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολων * 1 4 2 1 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

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

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

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

18 16 14 12 1 8 6 4 2 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 Διάγραμμα 8: Διερεύνηση Cache Δεδομένων "Consumer" με τετραπλό συσχετισμό και μέγεθος γραμμής 32bit 16 14 12 1 8 6 4 2 1 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

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

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

8 7 6 5 4 3 2 1 3. 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

9 8 7 6 5 4 Κύκλοι Λειτουργιας Ενέργεια Κύκλοι Λειτουργιας * Ενέργεια / 5 3 2 1 Αρχικο 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

5 45 4 35 3 25 2 15 1 Αστοχίες 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

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

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

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

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

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

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

{ 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

Κεφάλαιο 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

οποίο απλώς μοιράζεται το plaintext και το αρχικό κλειδί κρυπτογράφησης στους δυο Slaves. περισσότερες λεπτομέρειες θα δοθούν παρακάτω. Οπως και προηγουμένως γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρίνονται οι επιδόσεις σε ενεργειακή κατανάλωση και χώρο και προτείνεται μια βέλτιστη λύση για την συγκεκριμένη αρχιτεκτονική. Λόγω της συμμετρίας των δυο Slaves, γίνεται διερεύνηση μόνο για τον ένα. Τα συμπεράσματα προφανώς ισχύουν και για τον άλλο, αφού επιτελούν την ίδια ακριβώς λειτουργία. επίσης ο Master, επειδή δεν επιτελεί κάποια πολύπλοκη διεργασία, παρά μόνο μεταφορά δεδομένων από την μνήμη του στις FIFO, και ελέγχους ισότητας, έχει περιορισμένη δυνατότητα βελτιστοποίησης. Αρχική υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Σαν Master αναφέρεται ο επεξεργαστής που χωρίζει τα δεδομένα, τα στέλνει στους slaves και αφού κρυπτογραφηθούν ελέγχει εάν τα αποτελέσματα είναι σωστα. Οι επεξεργαστές που εκτελούν την διαδικασία της παραγωγής κλειδιών και κρυπτογράφησης είναι οι Slave1 και Slave2. Τα αποτελέσματα που πήραμε έχουν ως εξής: Xtensa Core: "Master" ISS Version: 7.1.1.1 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

Instruction fetches 395 ( 6.73 ) Uncached 185 ( 2.84 ) ICache fetches 3765 ( 57.89 ) 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 ( 17.93 ) Uncached 4 (.6 ) DCache loads 1162 ( 17.87 ) DCache load misses 172 ( 2.64 ) 14.8% of DCache loads Stores 139 ( 15.97 ) Cached 139 ( 15.97 ) DCache write-thru misses 932 ( 14.33 ) 89.7% of cached stores Cycles: total = 125 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 654 1. 1. 5.42 5.42 Taken branches 738.1135 1.1135.61 6.3 Pipeline interlocks 1.154 1.1288.8 6.12 ICache misses 2517.387 1.5158 2.1 8.21 DCache misses 1619.2489 1.7648 1.35 9.56 Exceptions 149.229 1.7877.12 9.69 Uncached ifetches 1115.1714 1.9591.93 1.61 112

Uncached loads 24.37 1.9628.2 1.63 Sync replays 385.592 2.22.32 1.95 Special instructions 88.135 2.355.7 11.3 Loop overhead 73.112 2.467.6 11.9 TIE global stalls 16733 16.414 18.4571 88.91 1. Reset 5.8 18.4579. 1. Από την ανάλυση του παραπάνω πίνακα βλέπουμε ότι ο επεξεργαστής στο μεγαλύτερο μέρος της λειτουργίας του είναι ανενεργός και ουσιαστικά περιμένει να λάβει το αποτέλεσμα της κρυπτογράφησης. Σε μια άλλη περίπτωση όπου θα υπήρχε και δεύτερη εφαρμογή, ο επεξεργαστής θα μπορούσε να απασχολείται με αυτή, αλλά στην προκειμένη, απλώς αναμένει τα αποτελέσματα. Xtensa Core: "Slave1" ISS Version: 7.1.1.1 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 52487 ( 1. ) Instruction fetches 495 ( 77.93 ) Uncached 185 (.35 ) ICache fetches 472 ( 77.58 ) 113

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 ( 16.94 ) Uncached 4 (.1 ) DCache loads 8889 ( 16.94 ) 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 = 115399 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 52487 1. 1. 45.48 45.48 Taken branches 1453.277 1.277 1.26 46.74 Pipeline interlocks 37.7 1.284.3 46.77 ICache misses 9336.1779 1.263 8.9 54.86 DCache misses 48133.917 2.1233 41.71 96.57 Exceptions 25.5 2.1238.2 96.6 Uncached ifetches 1115.212 2.145.97 97.56 Uncached loads 24.5 2.1455.2 97.58 Sync replays 38.72 2.1527.33 97.91 Special instructions 76.14 2.1542.7 97.98 114

Loop overhead 119.23 2.1564.1 98.8 TIE global stalls 229.421 2.1985 1.91 1. Reset 5.1 2.1986. 1. Xtensa Core: "Slave2" ISS Version: 7.1.1.1 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 52533 ( 1. ) Instruction fetches 39851 ( 75.86 ) Uncached 185 (.35 ) ICache fetches 39666 ( 75.51 ) 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 ( 16.93 ) Uncached 4 (.1 ) 115

DCache loads 8889 ( 16.92 ) 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 52533 1. 1. 45.52 45.52 Taken branches 1453.277 1.277 1.26 46.78 Pipeline interlocks 37.7 1.284.3 46.81 ICache misses 9284.1767 1.251 8.5 54.86 DCache misses 45346.8632 2.683 39.29 94.15 Exceptions 25.5 2.688.2 94.18 Uncached ifetches 1115.212 2.9.97 95.14 Uncached loads 24.5 2.94.2 95.16 Sync replays 38.72 2.977.33 95.49 Special instructions 76.14 2.991.7 95.56 Loop overhead 119.23 2.114.1 95.66 TIE global stalls 53.952 2.1966 4.34 1. Reset 5.1 2.1987. 1. Με έντονο μαύρο βλέπουμε τις αστοχίες των cache. βλέπουμε ότι και στους δυο επεξεργαστές, οι cache δεδομένων έχουν σημαντικό ποσοστό αστοχιών, ωστόσο το σύστημα μας χρειάστηκε μόνο 125 κύκλους εργασίας για να ολοκληρώσει το πρόγραμμα. αφού οι δυο επεξεργαστές λειτουργούν παράλληλα οι κύκλοι λειτουργίας 116

που μας ενδιαφέρουν είναι του 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

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

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

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

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

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

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

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

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

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

όπως και προηγουμένως, ρυθμίσαμε τον Xpress Compiler ώστε να παράγει επεκτάσεις TIE. Στο παρακάτω διάγραμμα φαίνονται οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs καθώς και ο χώρος που θα καταλαμβάνει ο επεξεργαστής μας μετά την υλοποίηση του απαραίτητου υλικού για την λειτουργία των επεκτάσεων. 2 15 1 5 3. 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

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

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

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

12 1 8 6 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 4 2 1 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

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

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

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

6 5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Δεδομένων * 1 2 1 1 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

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

Σε αντίθεση με την Διερεύνηση που κάναμε για τον master, ή οποία έγινε για τυπικούς λόγους όπως εξηγήθηκε παραπάνω, η Διερεύνηση για τους slaves, μπορεί να οδηγήσει σε σημαντικές βελτιώσεις. Οπως και προηγουμένως, ρυθμίσαμε τον Xpress Compiler ώστε να παράγει επεκτάσεις TIE. Στο παρακάτω διάγραμμα φαίνονται οι κύκλοι που χρειάζονται για την ολοκλήρωση του προγράμματος μέτρησης, μετά την ενσωμάτωση των TIEs καθώς και ο χώρος που θα καταλαμβάνει ο επεξεργαστής μας μετά την υλοποίηση του απαραίτητου υλικού για την λειτουργία των επεκτάσεων. 7 6 5 4 3 2 1 3. 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

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

Κώδικας προσομοίωσης συστήματος. #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

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

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

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

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

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

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

{ 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

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

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

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

Αρχικη υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Σαν Master αναφέρεται ο επεξεργαστής που χωριζει τα δεδομένα, τα στελνει στους slaves και αφού κρυπτογραφηθούν ελέγχει εάν τα αποτελέσματα είναι σωστα.οι επεξεργαστές που εκτελουν την διαδικασία της παραγωγής κλειδιών και κρυπτογράφησης είναι οι Slave1, Slave2, Slave3 και Slave4. Τα αποτελεσματα που πηραμε εχουν ως εξης: Xtensa Core: "Master" ISS Version: 7.1.1.1 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 ( 57.59 ) ICache misses 279 ( 3. ) 5.21% of ICache fetches Taken branches 344 ( 3.7 ) Exceptions 29 (.31 ) WindowOverflow 15 (.16 ) 15

WindowUnderflow 14 (.15 ) Loads 1165 ( 12.54 ) Uncached 4 (.4 ) DCache loads 1161 ( 12.5 ) DCache load misses 173 ( 1.86 ) 14.9% of DCache loads Stores 139 ( 11.18 ) Cached 139 ( 11.18 ) DCache write-thru misses 937 ( 1.9 ) 9.18% of cached stores Cycles: total = 6935 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 929 1. 1. 13.4 13.4 Taken branches 715.77 1.77 1.3 14.43 Pipeline interlocks 99.17 1.876.14 14.57 ICache misses 247.2591 1.3467 3.47 18.4 DCache misses 1636.1761 1.5228 2.36 2.4 Exceptions 149.16 1.5389.21 2.61 Uncached ifetches 1115.12 1.6589 1.61 22.22 Uncached loads 24.26 1.6615.3 22.26 Sync replays 385.414 1.729.56 22.81 Special instructions 88.95 1.7124.13 22.94 Loop overhead 61.66 1.7189.9 23.3 TIE global stalls 53376 5.7455 7.4645 76.97 99.99 Reset 5.5 7.465.1 1. 151

Παρατηρούμε ότι οι κύκλοι είναι περίπου οι μισοι από ότι ήταν στην αρχιτεκτονική με τους δυο slaves συνδεμενους παραλληλα. Xtensa Core: "Slave1" ISS Version: 7.1.1.1 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 27431 ( 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 ( 16.32 ) Uncached 4 (.2 ) DCache loads 4473 16.31 ) 152

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 = 64647 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 27431 1. 1. 42.43 42.43 Taken branches 853.311 1.311 1.32 43.75 Pipeline interlocks 37.13 1.324.6 43.81 ICache misses 4866.1774 1.298 7.53 51.34 DCache misses 24146.882 2.91 37.35 88.69 Exceptions 25.9 2.91.4 88.72 Uncached ifetches 1115.46 2.1316 1.72 9.45 Uncached loads 24.9 2.1325.4 9.49 Sync replays 38.139 2.1464.59 91.7 Special instructions 76.28 2.1491.12 91.19 Loop overhead 83.3 2.1522.13 91.32 TIE global stalls 566.244 2.3565 8.67 99.99 Reset 5.2 2.3567.1 1. Βλέπουμε ότι τα στατιστικά λειτουργίας του Slave1 είναι πολύ κοντα στα στατιστικά λειτουργίας του Slave1 της αρχιτεκτονικης με τους δυο παραλληλους Slave. Η μόνη ουσιαστικη διαφορά είναι ότι οι κύκλοι λειτουργίας έχουν μειωθεί περίπου στο μισο, πραγμα αναμενόμενο αφού κρυπτογραφει πλέον τα μισά δεδομένα. 153

Xtensa Core: "Slave2" ISS Version: 7.1.1.1 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 27489 ( 1. ) Instruction fetches 21187 ( 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 ( 16.29 ) 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

Cycles: total = 64649 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 27489 1. 1. 42.52 42.52 Taken branches 853.311 1.311 1.32 43.84 Pipeline interlocks 37.13 1.324.6 43.9 ICache misses 58.1848 1.2172 7.86 51.75 DCache misses 24343.8856 2.127 37.65 89.41 Exceptions 25.9 2.136.4 89.45 Uncached ifetches 1115.46 2.1442 1.72 91.17 Uncached loads 24.9 2.1451.4 91.21 Sync replays 38.138 2.1451.59 91.7 Special instructions 76.28 2.1491.12 91.19 Loop overhead 83.3 2.1647.13 92.4 TIE global stalls 5139.1869 2.3516 7.95 99.99 Reset 5.2 2.3518.1 1. Xtensa Core: "Slave3" ISS Version: 7.1.1.1 Current PC = x6d12 Cache Configuration: ICache: 124 bytes (1KB), direct-mapped, 16-byte line DCache: 124 bytes (1KB), direct-mapped, 16-byte line 155

Events Number Number per 1 instrs Committed instructions 27489 ( 1. ) Instruction fetches 285 ( 75.68 ) 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 ( 16.29 ) 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 27489 1. 1. 42.52 42.52 Taken branches 853.311 1.311 1.32 43.84 Pipeline interlocks 37.13 1.324.6 43.9 ICache misses 549.1837 1.2161 7.81 51.71 156

DCache misses 23371.852 2.662 36.15 89.62 Exceptions 25.9 2.672.4 89.45 Uncached ifetches 1115.46 2.177 1.72 89.62 Uncached loads 24.9 2.186.4 89.66 Sync replays 38.138 2.1224.59 9.24 Special instructions 76.28 2.1252.12 9.36 Loop overhead 83.3 2.1282.13 9.49 TIE global stalls 6143.2235 2.3517 9.5 99.99 Reset 5.2 2.3518.1 1. Xtensa Core: "Slave4" ISS Version: 7.1.1.1 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 27489 ( 1. ) Instruction fetches 244 ( 74.23 ) Uncached 185 (.67 ) ICache fetches 2219 ( 73.55) ICache misses 558 ( 2.3 ) 2.76% of ICache fetches 157

Taken branches 43 ( 1.47 ) Exceptions 5 (.2 ) WindowOverflow 3 (.1 ) WindowUnderflow 2 (.1 ) Loads 4477 ( 16.29 ) 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 = 64651 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 27489 1. 1. 42.52 42.52 Taken branches 853.31 1.31 1.32 43.84 Pipeline interlocks 37.13 1.324.6 43.9 ICache misses 56.1841 1.2165 7.83 51.72 DCache misses 22325.8121 2.286 34.53 86.25 Exceptions 25.9 2.295.4 86.29 Uncached ifetches 1115.46 2.71 1.72 88.2 Uncached loads 24.9 2.79.4 88.5 Sync replays 38.138 2.848.59 88.64 Special instructions 76.28 2.875.12 88.76 Loop overhead 83.3 2.95.13 88.89 158

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

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

6 5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 2 1 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Διάγραμμα 134: Διερεύνηση Cache εντολών "Slave" με απευθείας συσχετισμό και μέγεθος γραμμής 32 bit 6 5 4 3 Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 2 1 1 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

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

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

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

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

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

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

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

Κώδικας προσομοίωσης συστήματος. #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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο 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

Επεξεργαστές και ως εκ τούτου δεν χρειάζεται ξεχωριστη διερευνηση.το πρόγραμμα των Slave1 και Slave2 είναι τα ίδια, αφού εκτελουν την ίδια λειτουργία και το μόνο που αλλαζει είναι τα δεδομένα τα οποία επεξεργαζονται. ανάλογα, το πρόγραμμα των Slave3 και Slave4 είναι τα ίδια. Θα ακολουθησει λοιπον Διερεύνηση για τους Slave2 και Slave3. Γίνεται ανάλυση των επιδόσεων για διαφορετικά μεγέθη των μνημών cache, associativity και μέγεθος γραμμής, καθώς και δημιουργία επεκτάσεων TIE. Συγκρινονται οι επιδόσεις σε ενεργειακη κατανάλωση και χωρο και προτεινεται μια βέλτιστη λύση για την συγκεκριμενη αρχιτεκτονική. Αρχικη υλοποίηση Στην αρχή όπως αναφέρθηκε χρησιμοποιήθηκε ο επεξεργαστής που περιγράφηκε και στο Κεφάλαιο 5. Σαν Master αναφέρεται ο επεξεργαστής που χωριζει τα δεδομένα, τα στελνει στους slaves και αφού κρυπτογραφηθούν ελέγχει εάν τα αποτελέσματα είναι σωστα.οι επεξεργαστές που εκτελουν την διαδικασία της παραγωγής κλειδιών είναι οι Slave1, Slave2, και κρυπτογράφησης οι Slave3 και Slave4. Τα αποτελεσματα που πηραμε εχουν ως εξης: Xtensa Core: "Master" ISS Version: 7.1.1.1 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 ( 71.21 ) 181

Uncached 185 ( 4.81 ) ICache fetches 2556 ( 66.41 ) 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 = 75328 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 3849 1. 1. 5.11 5.11 Taken branches 646.1678 1.1678.86 5.97 Pipeline interlocks 1.26 1.1938.13 6.1 ICache misses 2483.6451 1.8389 3.3 9.4 DCache misses 1691.4393 2.2783 2.24 11.64 Exceptions 149.387 2.317.2 11.84 Uncached ifetches 1115.2897 2.667 1.48 13.32 Uncached loads 24.62 2.6129.3 13.35 182

Sync replays 385.1 2.7129.51 13.86 Special instructions 88.229 2.7358.12 13.98 Loop overhead 27.7 2.7428.4 14.1 TIE global stalls 64766 16.8267 19.5695 85.98 99.99 Reset 5.13 19.578.1 1. Xtensa Core: "Slave1" ISS Version: 7.1.1.1 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 35835 ( 1. ) Instruction fetches 25864 ( 72.18 ) Uncached 185 (.52 ) ICache fetches 25679 ( 71.66 ) ICache misses 415 ( 1.16 ) 1.62% of ICache fetches Taken branches 535 ( 1.49 ) Exceptions 3 (.1 ) WindowOverflow 2 (.1 ) WindowUnderflow 1 (. ) 183

Loads 573 ( 14.16 ) Uncached 4 (.1 ) DCache loads 569 ( 14.15 ) 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 35835 1. 1. 52.27 52.27 Taken branches 1165.325 1.325 1.7 53.97 Pipeline interlocks 36.1 1.335.5 54.2 ICache misses 3444.961 1.1296 5.2 59.4 DCache misses 25465.716 1.842 37.14 96.19 Exceptions 15.4 1.847.2 96.21 Uncached ifetches 1115.311 1.8718 1.63 97.83 Uncached loads 24.7 1.8724.4 97.87 Sync replays 38.16 1.883.55 98.42 Special instructions 76.21 1.8852.11 98.53 Loop overhead 72.2 1.8872.11 98.64 TIE global stalls 928.259 1.9131 1.35 99.99 Reset 5.1 1.9132.1 1. 184

Xtensa Core: "Slave2" ISS Version: 7.1.1.1 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 35835 ( 1. ) Instruction fetches 2398 ( 66.92 ) Uncached 185 (.52 ) ICache fetches 23795 ( 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 ( 14.16 ) Uncached 4 (.1 ) DCache loads 569 ( 14.15 ) DCache load misses 2274 ( 6.35 ) 44.86% of DCache loads Stores 1175 ( 3.28 ) Cached 1175 ( 3.28 ) 185

DCache write-thru misses 797 ( 2.22 ) 67.83% of cached stores Cycles: total = 68793 Summed Summed CPI CPI % Cycle % Cycle Committed instructions 35835 1. 1. 52.9 52.9 Taken branches 1165.325 1.325 1.69 53.78 Pipeline interlocks 36.1 1.335.5 53.84 ICache misses 351.977 1.1312 5.9 58.93 DCache misses 2597.5748 1.76 29.94 88.87 Exceptions 15.4 1.764.2 88.89 Uncached ifetches 1115.311 1.7375 1.62 9.51 Uncached loads 24.7 1.7382.3 9.54 Sync replays 38.16 1.7488.55 91.1 Special instructions 76.21 1.759.11 91.21 Loop overhead 72.2 1.7529.1 91.31 TIE global stalls 5972.1667 1.9196 8.68 99.99 Reset 5.1 1. 9197.1 1. Xtensa Core: "Slave3" ISS Version: 7.1.1.1 Current PC = x6cca Cache Configuration: 186

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 35835 ( 1. ) Instruction fetches 1651 ( 76.22 ) Uncached 185 (.52 ) ICache fetches 16316 ( 75.37 ) 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 21649 1. 1. 3.68 3.68 187

Taken branches 42.186 1.186.57 31.25 Pipeline interlocks 37.17 1.23.5 31.3 ICache misses 351.977 1.1312 5.9 58.93 DCache misses 1885.877 1.9291 26.71 59.18 Exceptions 25.12 1.933.4 59.22 Uncached ifetches 1115.515 1.9818 1.58 6.8 Uncached loads 24.11 1.9829.3 6.83 Sync replays 38.176 2.4.54 61.37 Special instructions 76.35 2.39.11 61.48 Loop overhead 49.23 2.62.7 61.55 TIE global stalls 27131 1.2532 3.2594 38.45 99.99 Reset 5.2 3.2596.1 1. Xtensa Core: "Slave4" ISS Version: 7.1.1.1 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 21649 ( 1. ) Instruction fetches 16654 ( 76.93 ) 188

Uncached 185 (.85 ) ICache fetches 16469 ( 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 21649 1. 1. 3.66 3.66 Taken branches 42.186 1.186.57 31.23 Pipeline interlocks 37.17 1.23.5 31.29 ICache misses 825.381 1.584 1.17 32.46 DCache misses 19192.8865 1.9449 27.18 59.64 Exceptions 25.12 1.946.4 59.68 Uncached ifetches 1115.515 1.9976 1.58 61.25 Uncached loads 24.11 1.9987.3 61.29 189

Sync replays 38.176 2.162.54 61.83 Special instructions 76.35 2.197.11 61.93 Loop overhead 49.23 2.22.7 62. TIE global stalls 2682 1.2389 3.268 37.99 99.99 Reset 5.2 3.2611.1 1. Οπως και στις προηγούμενες αρχιτεκτονικες οπου υπήρχε μια μορφή παραλληλιας, παρατηρουμε ότι ο 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

Οπως εξηγηθηκε και πριν, η βελτιωση του 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

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

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

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

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

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

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

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

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

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

5 4 3 2 1 3. 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

4 35 3 25 2 Κύκλοι Λειτουργίας Ενέργεια Κύκλοι Λειτουργίας * Ενέργεια/1 15 1 5 Αρχικο 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

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

45 4 35 3 25 2 15 1 5 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 176: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 16 bit 45 4 35 3 25 2 15 1 5 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 177: Διερεύνηση Cache Εντολών "Slave3" με απευθείας συσχετισμό και μεγεθος γραμμης 32 bit 45 4 35 3 25 2 15 1 5 1 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

45 4 35 3 25 2 15 1 5 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 179: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 16 bit 45 4 35 3 25 2 15 1 5 1 Kbyte 2 Kbyte 4 Kbyte 8 Kbyte 16 Kbyte 32 Kbyte 64 Kbyte 128 Kbyte Συνολικοί Κυκλοί Λειτουργίας Αστοχίες Cache Εντολών * 1 Διάγραμμα 18: Διερεύνηση Cache Εντολών "Slave3" με διπλό συσχετισμό και μεγεθος γραμμης 32 bit 45 4 35 3 25 2 15 1 5 1 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

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

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

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

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

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

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

3 25 2 15 1 5-5 3. Base + New TIE 17. Minimum + New TIE 22. Total Cycles -1-15 Αρχικό 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

25 2 15 Κύκλοι Λε ιτ ουργ ίας Ενέργεια Κύκλοι Λε ιτ ουργ ίας * Ενέργεια/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

Κωδικας προσομοιωσης συστήματος. #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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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