Navigation

News

Courses

Quick Links

Εισαγωγή

Ο SESC είναι ένας cycle-accurate προσομοιωτής μικροαρχιτεκτονικής επεξεργαστών που αναπτύχθηκε στο πανεπιστήμιο Urbana-Champaign του Illinois. Έχει τη δυνατότητα να προσομοιώσει από απλούς μικροεπεξεργαστές, μέχρι πολυ-επεξεργαστές ή επεξεργαστές πολλαπλών νημάτων. Το pipeline που μοντελοποιεί είναι αυτό ενός out-of-order, superscalar επεξεργαστή, με πρόβλεψη διακλάδωσης, caches, διαύλους διασύνδεσης στο υποσύστημα μνήμης, και γενικά όλα τα δομικά στοιχεία ενός μοντέρνου μικροεπεξεργαστή που είναι απαραίτητα για σωστή και ακριβή προσομοίωση.

Το σύνολο εντολών (ISA) που αναγνωρίζει ο SESC είναι αυτό του MIPS, επομένως για να προσομοιώσουμε μια εφαρμογή στον SESC πρέπει να την μεταγλωττίσουμε σε κάποιο MIPS-based Linux σύστημα (είτε native είτε χρησιμοποιώντας cross-development εργαλεία).

Εγκατάσταση του SESC

Για την εγκατάσταση του SESC προϋποτίθεται ότι έχετε κάποια πρόσφατη διανομή GNU/Linux, με τα συνήθη GNU εργαλεία ανάπτυξης λογισμικού (gcc, g++, make, κ.λπ.). Επιπλέον, συνίσταται να έχετε γύρω στα 100MB ελεύθερο χώρο στον σκληρό σας δίσκο.

  1. Αρχικά, δημιουργήστε κάπου μέσα στο home folder σας έναν κατάλογο όπου θα αποθηκεύσετε και θα εγκαταστήσετε τον SESC. Στον ίδιο κατάλογο επιπλέον προτείνεται να αποθηκεύετε τις διάφορες εφαρμογές που θα χρησιμοποιείτε σαν benchmarks στην προσομοίωση μαζί με τα αποτελέσματα της προσομοίωσης. Στο εξής, θα θεωρήσουμε ότι ο κατάλογος αυτός θα λέγεται "sesc-sim".
    [~]$ mkdir ~/sesc-sim
    
  2. Κατεβάστε το tarball με τα sources του sesc από τη σελίδα του μαθήματος, και κάντε το extract στον κατάλογο sesc-sim.
    [~]$ cd ~/sesc-sim	
    [sesc-sim]$ tar zxvf ../sesc.tgz		#Έστω ότι το sesc.tgz βρίσκεται στο home folder
    [sesc-sim]$ ls
    sesc
    
    Δημιουργήθηκε o κατάλογος "sesc" ο οποίος περιέχει τα sources του simulator.
  3. Για να κάνετε build τον simulator, αρχικά δημιουργήστε μέσα στο sesc-sim έναν ξεχωριστό κατάλογο, π.χ. "build", ο οποίος θα περιέχει τελικά το εκτελέσιμο του SESC μαζί με όποια απαραίτητα configuration files, και ο οποίος θα είναι πλήρως ανεξαρτητοποιημένος από τον κατάλογο με τα sources.

    [sesc-sim]$ mkdir build
    [sesc-sim]$ ls
    build  sesc
    
    Στη συνέχεια κάνουμε configure και build τον simulator. Γενικά υπάρχουν διάφορα πρόσθετα χαρακτηριστικά του προσομοιωτή που μπορούν να ενεργοποιηθούν κατά το configuration, όπως π.χ. μοντελοποίηση πολυ-επεξεργαστικών αρχιτεκτονικών, μοντελοποίηση κατανάλωσης ισχύος, μοντέλα θερμοκρασίας, κ.λπ. Μπορείτε να δείτε την πλήρη λίστα με τις πρόσθετες επιλογές, δίνοντας μέσα από τον κατάλογο "build" την εξής εντολή:
    [sesc-sim]$ cd build 
    [build]$ ../sesc/configure --help
    
    Στην προκειμένη περίπτωση, εμείς θα χρησιμοποιήσουμε το όρισμα --enable-smp για να υποστηρίξουμε προσομοίωση πολυ-επεξεργαστικών συστημάτων. Κάνουμε λοιπόν configure ως εξής:
    [build]$ ../sesc/configure --enable-smp
    

    Αφού κάνουμε configure τον simulator, είμαστε έτοιμοι να τον κάνουμε build δίνοντας την εξής εντολή:

    [build]$ make
    
    H διαδικασία μεταγλώττισης μπορεί να πάρει αρκετό χρόνο, ανάλογα με το σύστημά σας. Μετά το πέρας της διαδικασίας, θα πρέπει να έχει παραχθεί στον κατάλογο build το εκτελέσιμο του simulator, δηλαδή το "sesc.smp".
    [build]$ ls
    config.h  config.log  config.status  Make.defs  Makefile  obj  sesc.smp
    

  4. Τα χαρακτηριστικά του συστήματος που προσομοιώνεται κάθε φορά προδιαγράφονται σε κάποιο configuration αρχείο. Ο SESC έχει ήδη έτοιμα κάποια ενδεικτικά configuration αρχεία, τα οποία μπορούν να αλλαχθούν από τον χρήστη κατά το δοκούν. Για αρχή, θα χρησιμοποιήσουμε το default configuration αρχείο για τον προσομοιωτή που προέκυψε από την μεταγλώττιση. Για να δημιουργηθεί το αρχείο αυτό στον κατάλογο build, δίνουμε από τον κατάλογο αυτό την εντολή:

    [build]$ make sesc.conf 
    [build]$ ls
    config.h  config.log  config.status  Make.defs  Makefile  obj  sesc.conf  sesc.smp  shared.conf
    
    Το configuration αρχείο που δημιουργείται είναι το "sesc.conf". Στη γενική περίπτωση, αυτό προδιαγράφει τα διάφορα μικροαρχιτεκτονικά χαρακτηριστικά του επεξεργαστή, και αυτό το αρχείο θα αλλάζουμε κάθε φορά που θέλουμε να μελετήσουμε την απόδοση του επεξεργαστή με διαφορετικές μικροαρχιτεκτονικές παραμέτρους στις δομικές του μονάδες.

Παράδειγμα προσομοίωσης εφαρμογής

Στην ενότητα αυτή θα δώσουμε ένα παράδειγμα για το πώς μπορούμε να προσομοιώσουμε την εκτέλεση μιας εφαρμογής στον SESC. Συγκεκριμένα, θα προσομοιώσουμε την εφαρμογή crafty από την σουίτα μετροπρογραμμάτων SPEC CPU2000 (http://www.spec.org/cpu/CINT2000/186.crafty/docs/186.crafty.html).

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

Συνεπώς, στον αρχικό κατάλογο, δημιουργούμε τον κατάλογο "crafty",

[sesc-sim]$ mkdir crafty
[sesc-sim]$ ls
build  crafty  sesc
και εκεί τοποθετούμε το εκτελέσιμο "crafty" καθώς και το αρχείο εισόδου "crafty.in".
[sesc-sim]$ ls crafty
crafty  crafty.in

Για να εκτελέσουμε την προσομοίωση, καλούμε τον προσομοιωτή από τον κατάλογο crafty με τα εξής ορίσματα:

[sesc-sim]$ cd crafty	
[crafty]$ ../build/sesc.smp -c../build/sesc.conf ./crafty < ./crafty.in
Με το πρώτο όρισμα (-cCONF_FILE_NAME ) ορίζουμε το πλήρες path του configuration αρχείου που προδιαγράφει τα χαρακτηριστικά του επεξεργαστή που θέλουμε να προσομοιώσουμε. Σε αυτή την περίπτωση χρησιμοποιούμε το default configuration αρχείο (sesc.conf) που δημιουργήθηκε κατά την εγκατάσταση του προσομοιωτή στον κατάλογο build.

Τα ορίσματα που ακολουθούν είναι το εκτελέσιμο της εφαρμογής, μαζί με όποιες παραμέτρους αυτή χρειάζεται. Στο παραπάνω παράδειγμα, δίνουμε απλώς στην εφαρμογή crafty τα περιεχόμενα του αρχείου crafty.in σαν standard είσοδο.

Όταν ολοκληρωθεί η προσομοίωση, όλα τα αποτελέσματά της αποθηκεύονται σε ένα αρχείο εξόδου του οποίου το όνομα έχει τη μορφή "sesc_executable.sim_id", όπου "sim_id" είναι μια κατάληξη "μοναδική" για κάθε προσομοίωση. Π.χ. στην παραπάνω εκτέλεση, δημιουργείται το αρχείο "sesc_crafty.OmSeMJ".

[crafty]$ ls 
crafty  crafty.in  game.001  sesc_crafty.OmSeMJ

Στη γενική περίπτωση, για κάθε προσομοίωση θα χρειαστείτε να αλλάζετε μία ή περισσότερες παραμέτρους στο configuration αρχείο προκειμένου να μοντελοποιήσετε τη συμπεριφορά του επεξεργαστή με διαφορετικά χαρακτηριστικά λειτουργίας. Προκειμένου τα αρχεία εξόδου που θα προκύψουν από κάθε προσομοίωση να είναι "αναγνωρίσιμα" και ενδεικτικά των αλλαγών που κάνετε κάθε φορά (και να μην έχουν όλα τη μορφή π.χ. sesc_crafty.*), προτείνεται να χρησιμοποιήσετε επιπλέον το όρισμα -xΚΕΥ στη γραμμή εντολών, όπου KEY είναι μια "λέξη-κλειδί" ενδεικτική της αλλαγής που έχετε κάνει στις παραμέτρους. Αυτό έχει σαν αποτέλεσμα το όνομα του αρχείου εξόδου της προσομοίωσης να έχει τελικά τη μορφή "sesc_KEY_executable.sim_id".

π.χ. έχοντας αλλάξει τον default branch predictor στο default configuration αρχείο σε έναν "Not-taken" predictor, εκτελούμε την προσομοίωση με τα εξής ορίσματα:

[crafty]$ ../build/sesc.smp -c../build/sesc.conf -xnottaken ./crafty < ./crafty.in

και τελικά παράγεται το αρχείο εξόδου προσομοίοωσης sesc_nottaken_crafty.5tBMmv

[crafty]$ ls 
crafty  crafty.in  game.001  sesc_crafty.OmSeMJ  sesc_nottaken_crafty.5tBMmv

Αποτελέσματα προσομοίωσης

Ένα αρχείο εξόδου προσομοίωσης περιλαμβάνει στην αρχή του ένα αντίγραφο του configuration αρχείου που χρησιμοποιήθηκε στην προσομοίωση, την πλήρη εντολή μαζί με όλα τα ορίσματα που δόθηκαν στη γραμμή εντολών για να εκτελεστεί η προσομοίωση, και ένα μεγάλο σύνολο από αποτελέσματα προσομοίωσης. Ο όγκος των πληροφοριών αυτών είναι αρκετά μεγάλος, εξαιτίας του ότι προσομοιώνεται η λειτουργία πολλών κομματιών του επεξεργαστή για τα οποία καταμετρώνται διάφορα γεγονότα. Ως εκ τούτου, οι πληροφορίες αυτές δεν είναι εύκολα αναγνώσιμες, και για τον σκοπό αυτό προτείνεται η χρήση του script "report.pl" μέσα από τον κατάλογο sesc/scripts/, το οποίο δέχεται σαν είσοδο το αρχικό αρχείο εξόδου και επεξεργάζεται τα περιεχόμενά του παράγοντας κάπως πιο συγκεντρωτικά και ευανάγνωστα αποτελέσματα.

Σε συνέχεια του παραδείγματος της προηγούμενης ενότητας, μέσα από τον κατάλογο crafty καλούμε το script ως εξής:

[crafty]$ ../sesc/scripts/report.pl ./sesc_nottaken_crafty.5tBMmv

# Bench : ../build/sesc.smp -c../build/sesc.conf -xnottaken ./crafty
# File  : ./sesc_nottaken_crafty.5tBMmv :       Sat Mar 22 23:51:38 2008
      Exe Speed        Exe MHz         Exe Time         Sim Time (5000MHz)
    329.630 KIPS      1.2847 MHz      62.670 secs      16.103 msec
Proc  Avg.Time BPType       Total          RAS           BPred          BTB		BTAC
   0   33.730  nottaken     29.60% ( 99.85% of   5.89%)  25.21% (  0.00% of		   0.00%)   0.00%
           nInst     BJ    Load   Store      INT      FP  : LD Forward , Replay: Worst Unit (clk)
   0    20657909  15.06%  12.38%   7.62%  64.95%   0.00%  :     10.49%     335   inst/repl  :  LDSTIssueX 0.16
Proc  IPC        Cycles  Busy   LDQ   STQ  IWin   ROB  Regs Ports   TLB  maxBr	MisBr Br4Clk  Other
   0  0.26     80514219   6.4   0.0   8.2   2.0   0.0  12.7   0.0   0.0   0.0   70.6    0.0    0.0
################################################################################
Proc  Cache Occ MissRate (RD, WR) %DMemAcc MB/s : ... 	
   0  DL1 0.0   2.69% ( 1.1%, 1.6%) 93.50%  0.21GB/s :  L1L2 2837.54 MB/s :  SysBus 0 MB/s :  MemoryBus 0 MB/s :
################################################################################
Proc  Cache Occ MissRate (RD, WR) %DMemAcc MB/s : ...
   0  IL1 0.0   1.06% ( 1.1%, 0.0%) 145.26%  0.13GB/s :  L1L2 2837.54 MB/s :  SysBus 0 MB/s :  MemoryBus 0 MB/s :
Τα αποτελέσματα που επιστρέφει το report.pl μας πληροφορούν μεταξύ άλλων για τα εξής: Οι υπόλοιπες πληροφορίες αφορούν την απόδοση του υποσυστήματος πρόβλεψης διακλαδώσεων, του υποσυστήματος κρυφής μνήμης κ.λπ. Σημειώστε στα παραπάνω ότι για να προσομοιώσουμε την εκτέλεση μιας εφαρμογής που θα έπαιρνε μόλις 16.103 msec στο προσομοιούμενο σύστημα, χρειάστηκαν 62 δευτερόλεπτα στο πραγματικό σύστημα!

Links

  1. H σελίδα του SESC στο sourceforge.
  2. Κείμενο που περιγράφει την εσωτερική δομή του SESC.