First assignment for Course: Architecture of advanced Computer Systems
Τα βασικα στοιχεια που δινονται απο το example αρχειο ειναι τα εξης:
Τυπος CPU:
- AtomicSimpleCPU,
- MinorCPU,
- hpi.
Συμφωνα με την εντολη , εμεις χρησιμοποιησαμε το MinorCPU.
Cache:
L1 L2 cache με fixed cache line size στα 64 bytes
η L1 private και η L2 shared
Στα κομμάτια του συστήματος του παραδειγματος δινονται:
- Το Voltage Domain= 3.3 V
- Το Clock Domain = 1GHz
- cpu.cluster.voltage =1.2 V
- cpu.cluster.clk_domain = 4GHz
- Num.Of.Cores = (default) 1
- Memory type = DDR3_1600_8x8
- mem-channels = 2
- Mem-size = 2Gb
a)
Εχουμε συμφωνα με τα αρχεια :
- clock = 1000 :Line 44 Αρα και (1/1000ticks = 1/[10^(-9)] = 1Ghz)
- Cpu type = MinorCPU :Line 65
- Voltage = 3.3V :Line 1652
- Cpu_cluster.Voltage = 1.2V :Line 1339
- cpu_cluster.clk = 250 :Line 58 Αρα και (1/250ticks = 4/[10^(-9)] = 4Ghz)
- dcache.tags = 64 :Line 213
- numThreads = 1 :Line 113
b) Στο αρχειο stats.txt αναφερει πως :
- Line:14 5028 commited instructions
- Line:15 5834 nmbr of ops commited
Μπορω να καταλαβω μονο πως εχουν διαφορετικο αριθμο γιατι το commitedOps περιλαμβανει και τα micro ops.
c)
Απο το stats.txt :
Number of data accesses 7884 Line:623
Παραδείγματα μοντέλων in-order CPUs που χρησιμοποιει ο Gem5 ειναι τα παρακατω:
- AtomicSimpleCpu : Αυτο το μοντελο χρησιμοποιει Atomic Memory Access. Χρησιμοποιει τον λανθανοντα χρονο για να υπολογισει τον συνολικο χρονο προσβασης της cache.
- MinorCPU : Αυτο είναι ένα ευέλικτο μοντέλο in-order CPU που αναπτύχθηκε για να υποστηρίζει το Arm ISA. Εχει fixed four-stage in-order execution pipeline και διαθέτει ρυθμιζόμενες δομές δεδομένων και συμπεριφορά εκτέλεσης. Επομένως μπορεί να ρυθμιστεί για να μοντελοποιήσει συγκεκριμένο επεξεργαστή. Το four-stage pipeline περιλαμβάνει fetching lines, decomposition into macro-ops, decomposition of macro-ops into micro-ops και execute.
- TimingSimpleCPU: Αυτό ειναι ενα μοντέλο που χρησιμοποιεί Timing memory access, δηλαδή αναμενει το περας της προσπερασης της μνημης μεχρι να συνεχίσει. Θεωρειται ομως αυτά το TimingSimpleCPU είναι επίσης ένα fast-to-run μοντέλο, δεδομένου ότι απλοποιεί ορισμένες πτυχές όπως το pipelining πράγμα που σημαίνει ότι μόνο μία εντολή επεξεργάζεται κάθε στιγμή. Κάθε αριθμητική εντολή εκτελείται από το TimingSimpleCPU σε έναν μόνο κύκλο, ενώ οι προσπελάσεις στη μνήμη απαιτούν πολλαπλούς κύκλους.
a)
Το πρόγραμμα C που φτιάξαμε ελέγχει αν ένας αριθμός είναι μονός ή ζυγός.
- MinorCPU:
- Line 12 : sim_seconds = 0.000039 # Number of seconds simulated
- TimingSimpleCPU:
- Line 12 : sim_seconds = 0.000046 # Number of seconds simulated
b)
Στην περίπτωση του TimingSimpleCPU ο χρόνος είναι μεγαλύτερος απο ότι στον MinorCPU καθώς
στον TimingSimpleCPU, όπως ειπαμε παραπάνω περιμένει το πέρας της προσπέλασης της μνήμης
μέχρι να συνεχίσει και επιπλέον δεν διαθέτει pipeline. Ενώ ο MinorCpu απο την άλλη έχει
pipeline τεσσάρων σταδίων. Ένας ακόμα λόγος που ο MinorCPU έχει μικρότερο χρονο ειναι και ο
συνολικός αρθμός κύκλων των επεξεργαστών όπως φαίνεται παρακάτω.
- TimingSimpleCPU : 92742 # number of cpu cycles simulated
- MinorCPU : 78854 # number of cpu cycles simulated
c)
Αρχικά θα κάνουμε προσομείωση με συχνότητα 500MHz.
- MinorCPU:
- Line 12 : sim_seconds = 0.000046 # Number of seconds simulated
- TimingSimpleCPU:
- Line 12 : sim_seconds = 0.000054 # Number of seconds simulated
Είναι ορατό πως οι χρόνοι αυξήθηκαν , πραάγμα λογικό καθώς μειώσαμε την συχνότητα των επεξεργαστών.
Στη συνέχεια αλλάζουμε την τεχνολογία της μνήμες σε DDR3_2133_8x8
- MinorCPU:
- Line 12 : sim_seconds = 0.000038 # Number of seconds simulated
- TimingSimpleCPU:
- Line 12 : sim_seconds = 0.000045 # Number of seconds simulated
Παρατηρούμε ότι μειώθηκαν οι χρόνοι εκτέλεσης από την αρχική μας περίπτωση. Αυτό είναι λογικό αφού αρχικά είχαμε DDR3_1600_8x8 : (1.6 x 8 x 8 / 8 = 12.8 GBps) και τώρα DDR3_2133_8x8 : (2.133 x 8 x 8 / 8 = 17.0 GBps).