Skip to content

Repository files navigation

1ο ΜΕΡΟΣ

Από το αρχείο starter_se.py μπορούμε να βγάλουμε τα παρακάτω συμπεράσματα:

1)

  • cpu_types = {
    • "atomic" : ( AtomicSimpleCPU, None, None, None, None),
    • "minor" :
      • (MinorCPU, devices.L1I, devices.L1D, devices.WalkCache, devices.L2),
    • "hpi" :
      • ( HPI.HPI, HPI.HPI_ICache, HPI.HPI_DCache, HPI.HPI_WalkCache, HPI.HPI_L2) }

Στην περίπτωση μας χρησιμοποιήσαμε τύπου "minor", άρα και τις L1 L2 caches. O minorCPU είναι ενας in-order CPU. Περισσότερες πληροφορίες στην αντίστοιχη ενότητα στο συνημμένο

  • clk_voltage="3.3V"
  • clock="1GHz"
  • cpu_cluster="1.2V"
  • mem-type, default="DDR3_1600_8x8"
  • memoryMode() == "timing"
  • cpu-freq, default="4GHz"
  • num-cores, default=1
  • mem-size, default="2GB"

2)

a)
  Στα αρχεία config.ini και config.json βρίσκουμε τα παρακάτω που επιβεβαιώνουν 
  κάποια από τα παραπάνω.
  mem_mode=timing
  sys_clk :
  voltage=3.3V
  clock=1000 ticks δηλαδή 1GHz 

  Cpu_cluster :
  voltage=1.2V
  clock=250 ticks δηλαδή 4GHz
  
  memory size
  range=0:2147483648:0:128 δηλαδή 2Gb

b)
   Από το αρχείο stats.txt προκύπτει ότι :
   system.cpu_cluster.cpus.committedInsts  5028  # Number of instructions committed
   sim_insts 5028 # Number of instructions simulated
   Κάνοντας και την πράξη numCycles/CPI = 97284/19.348449 = 5027,99 το ίδιο σχεδόν με 
   παραπάνω.

c) 
   system.cpu_cluster.l2.overall_accesses::total 479 
   # number of overall (read+write) accesses
   Αν δεν μας έδινε τα συνολικά θα έπρεπε να προσθέσουμε όλα τα ξεχωριστά accesses 

3)

Όπως αναφέρεται και παραπάνω στο συνημμένο περιέχοντε πληροφορίες για τα μοντέλα in-order CPU του gem5 που θα αναλύσω περιλιπτικά παρακάτω :

  • AtomicSimpleCPU
    • O AtomicSimpleCPU χρησιμοποιεί ατομική προσπέλαση στην μνήμη, η οποία είναι και η πιο γρήγορη από τα είδη των προσπελάσεων στην μνήμη και πραγματοποεί ένα transaction σε μια μόνο κλήση συνάρτησης. Ο AtomicSimpleCPU πραγματοποιεί όλες τις απαραίτητες ενέργειες για μια εντολή σε κάθε CPU tick , και μπορεί να κάνει έναν υπολογισμό από όλα τα cache accesses που έγιναν , υπολογίζοντας το latency από τις ατομικές προσπελάσεις. Φυσιολογικά , ο AtomicSimpleCPU έχει την πιο γρήγορη προσωμοίωση ,και χρησιμοποιείται για fast-forwarding ώστε να βρεθεί στο Region of Interest (ROI) στον gem5.
  • TimingSimpleCPU
    • O TimingSimpleCPU χρησιμοποιεί Timing προσπέλαση στην μνήμη. Αυτό σημαίνει οτί περιμένει η προσπέλαση στην μνήμη να επιστρέψει πριν προχωρήσει , και για αυτό προσδίδει κάποιο επίπεδο χρονισμού. O TimingSimpleCPU είναι επίσης και fast-to-run μοντέλο, αφού απλοποιεί κάποιες πτυχές συμπεριλαμβάνοντας το pipelining, που σημαίνει ότι μόνο μια εντολή επεξεργάζεται κάθε στιγμή. Κάθε αριθμιτική εντολή εκτελείται σε ένα κύκλο , ενώ η προσπέλαση στη μνήμη απαιτεί πολλαπλούς κύκλους.
  • MinorCPU
    • O MinorCPU ,που χρησιμοποιούμε και εμείς, είναι ένα εύελικτο in-order μοντέλο επεξεργαστή που αναπτύχθηκε από την ARM ISA. Ο MinorCPU έχει ένα προσαρμσμένο 4-σταδίων execution pipeline, ενώ έχει διαμορφώσιμες δομές δεδομένων και συμπεριφορά εκτέλεσης. Για αυτό μπορεί να διαμορφωθεί σε μικρο-αρχιτεκτονικό επίπεδο , να μοντελοποιήσει έναν συγκεκριμένο επεξεργαστή.
  • High-Perfomance In-Order CPU.
    • O HPI CPU timing model είναι ρυθμιζόμενος ώστε να είναι αντιπροσωπευτικός ενός in-order ARMv8-A.

a)

 MinorCPU 
 sim_seconds : 0.000032   # Number of seconds simulated
 system.cpu.numCycles : 64058  # number of cpu cycles simulated
 system.cpu.committedInsts : 8313   # Number of instructions committed
 
 TimingSimpleCPU 
 sim_seconds : 0.000037    # Number of seconds simulated
 system.cpu.numCycles : 73088   # number of cpu cycles simulated
 system.cpu.committedInsts : 8258  # Number of instructions committed

b)

  Ο χρόνος του MinorCPU είναι μικρότερος από τον χρόνο του TimingSimpleCPU , όπως και αναμέναμε, αφού ο TimingSimpleCPU περιμένει να τελειώσει η προσπέλαση στην μνήμη. Δε διαθέτει pipeling αντιθέτως με το MinorCPU , που διαθέτει 4-σταδιών execution pipeline. Παρόλο που ο TimingSimpleCPU έκανε περισσότερους κύκλους ,εκτέλεσε λιγότερες εντολές από τον MinorCPU καθώς η προσπέλαση στην μνήνη απαιτεί πολλαπλούς κύκλους όπως και αναφέρθηκε.

c)

Αλλάζουμε πρώτα την συχνότητα από 1GHz σε 400ΜHz :

  • MinorCPU
    • sim_seconds : 0.000041 # Number of seconds simulated
  • TimingSimpleCPU
    • sim_seconds : 0.000045 # Number of seconds simulated

Παρατηρούμε ότι οι χρόνοι είναι μεγαλύτεροι από πριν, καθώς μειώσαμε την συχνότητα. Αλλάζουμε την τεχνολογία μνήμης από την default DDR3_1600_8x8 σε DDR4_2400_8x8 :

  • MinorCPU
    • sim_seconds : 0.000030 # Number of seconds simulated
  • TiminingSimpleCPU
    • sim_seconds : 0.000036 # Number of seconds simulated

Παρατηρούμε ότι οι χρόνοι είναι μικρότεροι από πριν, όπως και αναμέναμε αφού βάλαμε καλύτερης τεχνολογίας μνήμη.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages