Coder Social home page Coder Social logo

architecture_lab's Introduction

Architecture_lab1

Πρώτο εργαστήριο

Σε αυτο το εργαστήριο, κάναμε μια εισαγωγή στον 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

cputype

Number of CPU's , CPU Frequency

Στο cpu_cluster.cpus, έχει μόνο έναν cpu, με cpu_id = 0.

cpyfreq

Memory and Cache line size

memory

System Frequency

SystemFrequency

System's Volts

Volts

In-Order-CPU models στον GEM5

Στον gem5, μας δίνεται η δυνατότητα επιλογής μοντέλων in-order-CPUs, οι οποίες περιγράφονται συνοπτικά παρακάτω:

  • AtomicSimpleCPU

    Χρησιμοποιεί Atomic memory access. Στον gem5, τρέχει όλες τις διεργασίες για μια εντολή σε κάθε tick, έτσι μπορεί να παρέχει μια σχετική εκτίμηση του χρόνου πρόσβασης στην μνήμη cache, χρησιμοποιόντας τις εκτιμήσεις καθυστέρησης των atomic accesses. Συνήθως, το AtomicSimpleCPU παρέχει τη γρηγορότερη προσομοίωση, και χρησιμοποιείται έτσι ώστε να φτάσουμε γρήγορα σε περιοχές ενδιαφέροντος (Region Of Interest) στο gem5.

  • TimingSimpleCPU

    Αντί για atomic, χρησιμοποιεί timing memory access. Αυτό σημαίνει ότι περιμένει να επιστρέψει το αποτέλεσμα της μνήμης, πριν προχωρήσει παρακάτω. Ο παραπάνω τρόπος πρόσβασης στη μνήμη, είναι πιο ρεαλιστικός απο τον atomic, και δίνει πιο πραγματικά αποτελέσματα όσο αναφορά τους χρόνους προσομοίωσης. Το TimingSimple, αποτελέι ένα γρήγορο για προσομοίωση μοντέλο, καθώς απλοποιεί κάποιες έννοιες όπως το pipelining, δηλαδή τρέχει μία εντολή σε κάθε χρονικό διάστημα. Κάθε αριθμητική πράξη εκτελείται σε 1 κύκλο ρολογιού, ενώ η πρόσβαση στη μνήμη παίρνει παραπάνω απο 1.

  • MinorCPU

    Το MinorCPU, είναι ένα ευέλικτο in-orderCPU μοντέλο, πιο αναλυτικό και περιεκτικό απο τα άλλα δύο, το οποίο χρησιμοποιούμε για να προσομοιώσουμε πραγματικά συστήματα. Έχει pipeline 4 σταδίων, παραμετροποιήσιμες δομές δεδομένων και εκτελέσιμη συμπεριφορά. Επομένως, μπορεί να παραμετροποιηθεί σε επίπεδο μικροαρχιτεκτονικής, έτσι ώστε να προσομοιώνει έναν συγκεκριμένο επεξεργαστή.

  • HPI (High-Performance In-order CPU)

    Χρησιμοποιεί ως βάση του το 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 vs TimingSimpleCPU

    Συμφωνα με τα στατιστικά αρχεία που προέκυψαν, για το MinorCPU και TimingSimpleCPU, προκύπτουν τα παρακάτω συμπεράσματα.

    • Το μοντέλο του MinorCPU, περατώνει το προς προσομοίωση πρόγραμμα πιο γρήγορα, κάτι που είναι λογικό, καθώς διαθέτει τεσσάρων σταδίων pipeline, το οποίο, λέιπει απο το TimingSimple.
    • Ο Gem5, τρέχει πιο γρήορα στο TimingSimple, καθώς είναι πιο απλό μοντέλο, απο το Minor.
  • MinorCPU 2GHz vs MinorCPU 4GHz

    Συμφωνα με τα αρχεία MinorCPU 2GHz και MinorCPU 4GHz, προκύπει ότι :

    • Το μοντέλο με τα 4GHz τρέχει το πρόγραμμα σαφώς πιο γρήγορα
    • Ο Gem5 τρέχει την προσομοίωση σχεδόν στον ίδιο χρόνο, αφού πρόκειται για το ίδιο μοντέλο CPU, με την ελάχιστη διαφορά που παρατηρείται, να οφείλεται στη διαφορά χρόνου ολοκλήρωσης του μοντέλου των 2ghz με αυτό των 4ghz για το προς προσομοίωση πρόγραμμα.
  • TimingSimpleCPU 2GHz vs TimingSimpleCPU 4GHz

    Σύμφωνα με τα αρχεία TimingSimple 2GHz και TimingSimple 4GHz, βλέπουμε ότι και εδώ:

    • Το μοντέλο με τα 4GHz τρέχει το πρόγραμμα αρκετά πιο γρήγορα, καθώς χρειάζεται περίπου κατί παραπάνω απο τα μισά ticks της προσομοίωσης με τα 2GHzGem5 και εδώ τρέχει την προσομοίωση περίπου στον ίδιο χρόνο με διαφορά ενός κλάσματος του δευτερολέπτου για τον ίδιο λόγο με παραπάνω.
  • MinorCPU DDR3_1600_8x8 vs MinorCPU DDR4_2400_8x8

    Σύμφωνα με τα αρχεία MinorCPU DDR3 και MinorCPU DDR4 προκύπτει ότι :

    • Παρατηρείται μια πολύ μικρή διαφορά στα ticks περάτωσης των δύο προσομοιώσεων, όπου μεγαλύτερο αριθμό ticks έχει η προσομοίωση με την μνήμη DDR3.Αυτό οφείλεται στο γεγονός ότι το πρόγραμμα που έχουμε γράψει είναι ένα πολύ απλό και μικρό πρόγραμμα με αποτέλεσμα το σύστημα που τρέχει αυτό το πρόγραμμα να αναγκάζεται πολύ λίγες φορές να χρησιμοποιήσει την μνήμη RAM.
  • TimingSimpleCPU DDR3_1600_8x8 vs TimingSimpleCPU DDR4_2400_8x8

    Σύμφωνα με τα αρχεία TimingSimpleCPU DDR3 και TimingSimpleCPU DDR4 προκύπτει ότι :

    • Παρατηρείται μια πολύ μικρή διαφορά στα ticks περάτωσης των δύο προσομοιώσεων, όπου μεγαλύτερο αριθμό ticks έχει η προσομοίωση με την μνήμη DDR3.Αυτό οφείλεται, όπως και στην παραπάνω σύγκρηση, στο γεγονός ότι το πρόγραμμα που έχουμε γράψει είναι ένα πολύ απλό και μικρό πρόγραμμα με αποτέλεσμα το σύστημα που τρέχει αυτό το πρόγραμμα να αναγκάζεται πολύ λίγες φορές να χρησιμοποιήσει την μνήμη RAM.

Αξιολόγηση εργαστηρίου

  • Προεργασία και προετοιμασία απο το σπίτι

    • Η πολυπλοκότητα του προγράμματος που είχαμε να υλοποιήσουμε, ήταν στην ευχέρεια μας, κάτι πολύ θετικό, καθώς μπορούσαμε να πειραματιστούμε με το gem5, για διάφορες υλοποιήσεις. Επιπλέον, υπήρχε σχετική προειδοποίηση, έτσι ώστε να μην το παρακάνουμε με το μέγεθος του προγράμματος, γιατί σε διαφορετική περίπτωση, θα αργούσε πολύ ο gem5.
    • Η βιβλιογραφία που χρειάστηκε να ψάξουμε μόνοι μας, ήταν λίγο ζόρικη σαν διαδικασία, καθώς το site που δίνονταν ως έναυσμα, δε μας φάνηκε ιδιαίτερα χρήσιμο. Ωστόσο, δεν χρειάστηκε πάνω απο 1 ώρα αναζήτησης, για να βρούμε αυτό που θέλαμε.
    • Οι οδηγίες εγκατάστασεις του gem5 ήταν αναλυτικές και πολύ εύκολες, χωρίς να αφήνουν καμία αμφιβολία για τη πορεία της διαδικασίας.
    • Η εκφώνηση ήταν πολύ ρητά γραμμένη, με μόνο γκρι σημείο, το κομμάτι 3γ, το οποίο μπορεί να αναγνωστεί με παραπάνω απο 1 τρόπους.
    • Σε αντίθεση με τις οδηγίες εγκατάστασης και την εκφώνηση, στην εντολή που μας δίνονταν όπου άλλαζε το CPUType, υπήρχε συντακτικό λάθος, κάτι το οποίο μας πήγε λίγο πίσω για 2 λόγους. 1) Επειδή κάναμε troubleshooting στα σωστά κομμάτια του κώδικα, και 2) Επειδή έπρεπε να ψάξουμε τη σύνταξη μόνοι μας.
  • Εργαστήριο

    • Η εξέταση της άσκησης ήταν σωστή, ενώ στα θετικά συγκαταλέγεται επίσης και το γεγονός πως υπήρχαν 4 καθηγητές, οι οποίοι βοηθούσαν και εξηγούσαν τυχόν απορίες κατά τη διάρκεια της.
    • Αρνητική η έλλειψη οργάνωσης που παρατηρήθηκε, καθώς το εργαστήριο ξεκίνησε με καθυστέριση 40 λεπτών, για κάτι το οποίο θα μπορούσε να προληφθεί, πριν την έναρξη του εργαστηρίου.

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

architecture_lab's People

Contributors

nikifori avatar xristosioan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.