Καλησπέρα,
Μια καλή πρακτική για να αυτοματοποιήσετε τη διαδικασία των πειραμάτων, χωρίς να χρειάζεται να περιμένετε να τελειώνει μια προσομοίωση, να αλλάζετε παραμέτρους, να εκτελείτε την επόμενη, κ.ο.κ., είναι να καλείτε τον simics μέσα από ένα bash script, απ' όπου θα αλλάζετε τις ζητούμενες παραμέτρους. Συγκεκριμένα, μπορείτε να χρησιμοποιήσετε το option του simics "-e <simics command>" για να περνάτε από το command line εντολές στον simics. Αυτό σας επιτρέπει να κάνετε αρχικοποιήσεις ως εξής:
Στο simics script δεν αρχικοποιείτε τις παραμέτρους που σας ενδιαφέρουν με σταθερές τιμές, αλλά με μεταβλητές του simics. Π.χ., στο cache-hierarchy.simics, μπορείτε να αλλάξετε τις γραμμές:
@l2c.config_line_number = 4096 @l2c.config_assoc = 8
σε
@l2c.config_line_number = simenv.L2_LINES @l2c.config_assoc = simenv.L2_ASSOC
Με αυτές τις αναθέσεις υποννοείται ότι υπάρχουν δύο simics μεταβλητές, οι $L2_LINES και $L2_ASSOC, οι οποίες χρησιμοποιούνται για να αρχικοποιήσουν τα αντίστοιχα πεδία του αντικειμένου l2c (η πρόσβαση σε μεταβλητές του simics μέσα από εντολές της Python γίνεται χρησιμοποιώντας το simenv name space).
To μόνο που μένει τώρα είναι η αρχικοποίηση των simics μεταβλητών. Αυτό γίνεται από το command line ως εξής:
./simics -stall -e '$L2_ASSOC'=8 -e '$L2_LINES'=4096 -x ./runbenchmark.simics &> output.txt
Επιπλέον, όπου είναι δυνατόν, μπορείτε να χρησιμοποιείτε for loops για να καλύψετε τις διαφορετικές περιπτώσεις ενός πειράματος.
Π.χ.:
#!/bin/bash
for l2lines in 64 128 256 do for l2assoc in 2 4 8 do ./simics -stall -e '$L2_ASSOC'=$l2assoc -e '$L2_LINES'=$l2lines -x ./runbenchmark.simics &> output.txt done done
Προσοχή: για να τερματίσει ο simics μετά το πέρας της προσομοίωσης και να μπορεί να εκτελεστεί η επόμενη, πρέπει να βάλετε την εντολή "exit" στο τέλος του runbenchmark.simics
N.
advcomparch@lists.cslab.ece.ntua.gr