Σε αυτο το εργαστήριο, κάναμε μια εισαγωγή στον gem5, τρέξαμε κάποια μικρά benchmarks, πειράξαμε λίγο τις προδιαγραφές και παρατηρήσαμε διαφορές στα τελικά στατιστικά.
Στο αρχείο starter_se.py ορίζονται τα βασικά χαρακτηριστικά του συστήματος, τα οποία παρουσιάζονται στον παρακάτω πίνακα :
Χαρακτηριστικά | Τιμές |
---|---|
Τύπος CPU | MinorCPU |
Συχνότητα λειτουργίας CPU | 4GHz |
Αριθμός πυρήνων επεξεργαστή | 1 |
Τύπος μνήμης | DDR3 |
Συχνότητα λειτουργίας μνήμης | 1600ΜΗz |
Μέγεθος μνήμης | 2GB |
Κανάλια μνήμης | 2 |
Μέγεθος cache line | 64 bytes |
Βολτ του συστήματος | 3.3V |
Συχνότητα λειτουργίας Συστήματος | 1GHz |
Τρέχουμε τη προσομοίωση στο gem5 με τις παραπάνω προδιαγραφές
Ξεκινόντας, τρέχουμε το precompiled αρχείο hello, που υλοποιεί ένα απλό πρόγραμμα, το οποίο τυπώνει "Hello world" στο terminal. Ως configuration αρχείο χρησιμοποιούμε το starter_se.py , με τις default τιμές που ορίζει, εκτός απο το cpu model το οποίο ορίσαμε εμείς ως "minor".
CPU type
Number of CPU's , CPU Frequency
Memory and Cache line size
System Frequency
System's Volts
Στον gem5, μας δίνεται η δυνατότητα επιλογής μοντέλων in-order-CPUs, οι οποίες περιγράφονται συνοπτικά παρακάτω:
-
Χρησιμοποιεί Atomic memory access. Στον gem5, τρέχει όλες τις διεργασίες για μια εντολή σε κάθε tick, έτσι μπορεί να παρέχει μια σχετική εκτίμηση του χρόνου πρόσβασης στην μνήμη cache, χρησιμοποιόντας τις εκτιμήσεις καθυστέρησης των atomic accesses. Συνήθως, το AtomicSimpleCPU παρέχει τη γρηγορότερη προσομοίωση, και χρησιμοποιείται έτσι ώστε να φτάσουμε γρήγορα σε περιοχές ενδιαφέροντος (Region Of Interest) στο gem5.
-
Αντί για atomic, χρησιμοποιεί timing memory access. Αυτό σημαίνει ότι περιμένει να επιστρέψει το αποτέλεσμα της μνήμης, πριν προχωρήσει παρακάτω. Ο παραπάνω τρόπος πρόσβασης στη μνήμη, είναι πιο ρεαλιστικός απο τον atomic, και δίνει πιο πραγματικά αποτελέσματα όσο αναφορά τους χρόνους προσομοίωσης. Το TimingSimple, αποτελέι ένα γρήγορο για προσομοίωση μοντέλο, καθώς απλοποιεί κάποιες έννοιες όπως το pipelining, δηλαδή τρέχει μία εντολή σε κάθε χρονικό διάστημα. Κάθε αριθμητική πράξη εκτελείται σε 1 κύκλο ρολογιού, ενώ η πρόσβαση στη μνήμη παίρνει παραπάνω απο 1.
-
Το MinorCPU, είναι ένα ευέλικτο in-orderCPU μοντέλο, πιο αναλυτικό και περιεκτικό απο τα άλλα δύο, το οποίο χρησιμοποιούμε για να προσομοιώσουμε πραγματικά συστήματα. Έχει pipeline 4 σταδίων, παραμετροποιήσιμες δομές δεδομένων και εκτελέσιμη συμπεριφορά. Επομένως, μπορεί να παραμετροποιηθεί σε επίπεδο μικροαρχιτεκτονικής, έτσι ώστε να προσομοιώνει έναν συγκεκριμένο επεξεργαστή.
-
Χρησιμοποιεί ως βάση του το MinorCPU και είναι βασιμένο στην ARM αρχιτεκτονική. Το HPI CPU μοντέλο, είναι ρυθμισμένο, έτσι ώστε να αποτελέι την αναπαράσταση ενός μοντέρνου in-order Armv8-A. Έχει το ίδιο 4 σταδίων pipeline με το MinorCPU. Διαθέτει Interrupt Controller, το οποίο επιτρέπει στο software, να δημιουργεί, να σβήνει και να ιεραρχεί(σε επίπεδο hardware) interrupts απο συγκεκριμένες πηγές, αλλά και να δημιουργεί interupts στο software. Επιπρόσθετα, έχει Floating-Point και Data Processing Units, τα οποία μπορούν να μοντελοποιηθούν απο το στάδιο της εκτέλεσης του pipeline στο MinorCPU. Διαθέτει διαφορετικά instruction και data buses, δηλαδή έχει instruction cache(ICache) και data cache (DCache). Άρα έχει ξεχωριστά instruction και data L1 buses, και κοινή L2 Cache. Τέλος, στο Memory Management Unit, μια πολύ σημαντική λειτουργία, είναι η δυνατότητα που δίνει στο σύστημα, να τρέχει πολλαπλά ανεξάρτητα προγράμματα, στη δικιά τους virtual memory, χωρίς να χρειάζεται να ξέρουν την πραγματική τους φυσική θέση στο hardware.
Όλα τα benchmarks, τρέξανε για το ίδιο πρόγραμμα, γραμμένο σε γλώσσα C
-
Συμφωνα με τα στατιστικά αρχεία που προέκυψαν, για το MinorCPU και TimingSimpleCPU, προκύπτουν τα παρακάτω συμπεράσματα.
- Το μοντέλο του MinorCPU, περατώνει το προς προσομοίωση πρόγραμμα πιο γρήγορα, κάτι που είναι λογικό, καθώς διαθέτει τεσσάρων σταδίων pipeline, το οποίο, λέιπει απο το TimingSimple.
- Ο Gem5, τρέχει πιο γρήορα στο TimingSimple, καθώς είναι πιο απλό μοντέλο, απο το Minor.
-
Συμφωνα με τα αρχεία MinorCPU 2GHz και MinorCPU 4GHz, προκύπει ότι :
- Το μοντέλο με τα 4GHz τρέχει το πρόγραμμα σαφώς πιο γρήγορα
- Ο Gem5 τρέχει την προσομοίωση σχεδόν στον ίδιο χρόνο, αφού πρόκειται για το ίδιο μοντέλο CPU, με την ελάχιστη διαφορά που παρατηρείται, να οφείλεται στη διαφορά χρόνου ολοκλήρωσης του μοντέλου των 2ghz με αυτό των 4ghz για το προς προσομοίωση πρόγραμμα.
-
Σύμφωνα με τα αρχεία TimingSimple 2GHz και TimingSimple 4GHz, βλέπουμε ότι και εδώ:
- Το μοντέλο με τα 4GHz τρέχει το πρόγραμμα αρκετά πιο γρήγορα, καθώς χρειάζεται περίπου κατί παραπάνω απο τα μισά ticks της προσομοίωσης με τα 2GHz -Ο Gem5 και εδώ τρέχει την προσομοίωση περίπου στον ίδιο χρόνο με διαφορά ενός κλάσματος του δευτερολέπτου για τον ίδιο λόγο με παραπάνω.
-
Σύμφωνα με τα αρχεία MinorCPU DDR3 και MinorCPU DDR4 προκύπτει ότι :
- Παρατηρείται μια πολύ μικρή διαφορά στα ticks περάτωσης των δύο προσομοιώσεων, όπου μεγαλύτερο αριθμό ticks έχει η προσομοίωση με την μνήμη DDR3.Αυτό οφείλεται στο γεγονός ότι το πρόγραμμα που έχουμε γράψει είναι ένα πολύ απλό και μικρό πρόγραμμα με αποτέλεσμα το σύστημα που τρέχει αυτό το πρόγραμμα να αναγκάζεται πολύ λίγες φορές να χρησιμοποιήσει την μνήμη RAM.
-
Σύμφωνα με τα αρχεία TimingSimpleCPU DDR3 και TimingSimpleCPU DDR4 προκύπτει ότι :
- Παρατηρείται μια πολύ μικρή διαφορά στα ticks περάτωσης των δύο προσομοιώσεων, όπου μεγαλύτερο αριθμό ticks έχει η προσομοίωση με την μνήμη DDR3.Αυτό οφείλεται, όπως και στην παραπάνω σύγκρηση, στο γεγονός ότι το πρόγραμμα που έχουμε γράψει είναι ένα πολύ απλό και μικρό πρόγραμμα με αποτέλεσμα το σύστημα που τρέχει αυτό το πρόγραμμα να αναγκάζεται πολύ λίγες φορές να χρησιμοποιήσει την μνήμη RAM.
-
- Η πολυπλοκότητα του προγράμματος που είχαμε να υλοποιήσουμε, ήταν στην ευχέρεια μας, κάτι πολύ θετικό, καθώς μπορούσαμε να πειραματιστούμε με το gem5, για διάφορες υλοποιήσεις. Επιπλέον, υπήρχε σχετική προειδοποίηση, έτσι ώστε να μην το παρακάνουμε με το μέγεθος του προγράμματος, γιατί σε διαφορετική περίπτωση, θα αργούσε πολύ ο gem5.
- Η βιβλιογραφία που χρειάστηκε να ψάξουμε μόνοι μας, ήταν λίγο ζόρικη σαν διαδικασία, καθώς το site που δίνονταν ως έναυσμα, δε μας φάνηκε ιδιαίτερα χρήσιμο. Ωστόσο, δεν χρειάστηκε πάνω απο 1 ώρα αναζήτησης, για να βρούμε αυτό που θέλαμε.
- Οι οδηγίες εγκατάστασεις του gem5 ήταν αναλυτικές και πολύ εύκολες, χωρίς να αφήνουν καμία αμφιβολία για τη πορεία της διαδικασίας.
- Η εκφώνηση ήταν πολύ ρητά γραμμένη, με μόνο γκρι σημείο, το κομμάτι 3γ, το οποίο μπορεί να αναγνωστεί με παραπάνω απο 1 τρόπους.
- Σε αντίθεση με τις οδηγίες εγκατάστασης και την εκφώνηση, στην εντολή που μας δίνονταν όπου άλλαζε το CPUType, υπήρχε συντακτικό λάθος, κάτι το οποίο μας πήγε λίγο πίσω για 2 λόγους. 1) Επειδή κάναμε troubleshooting στα σωστά κομμάτια του κώδικα, και 2) Επειδή έπρεπε να ψάξουμε τη σύνταξη μόνοι μας.
-
- Η εξέταση της άσκησης ήταν σωστή, ενώ στα θετικά συγκαταλέγεται επίσης και το γεγονός πως υπήρχαν 4 καθηγητές, οι οποίοι βοηθούσαν και εξηγούσαν τυχόν απορίες κατά τη διάρκεια της.
- Αρνητική η έλλειψη οργάνωσης που παρατηρήθηκε, καθώς το εργαστήριο ξεκίνησε με καθυστέριση 40 λεπτών, για κάτι το οποίο θα μπορούσε να προληφθεί, πριν την έναρξη του εργαστηρίου.