Checkpoint creates a checkpoint "now", passing a single value creates
a checkpoint in now + that many nanoseconds, and passing two arguments
creates a now+firstnumber+second number*N (where N is 0...large).
Looking at this output that seems to be working. 

M5 has similar
magical instructions and that is how the m5 binary you're executing in
the simulated program is working. Take a look at util/m5/* for some code
that you can include with your program and call to create checkpoints
progamatically. 

Ali 

On Thu, 7 Oct 2010 11:21:28 -0500, Lide Duan 
wrote:  

Sorry, probably I was wrong. This time, I lower the value to
500000 and issue the follows:

/sbin/m5 checkpoint
/sbin/m5 checkpoint
500000
./my_alpha_program
/sbin/m5 checkpoint

Now I got three
checkpoints as:

cpt.1830187114500
cpt.1831068302000
cpt.1833296533000

However, I am
still confused about the tick numbers: why are there so big gaps between
them? Please comment... In particular, is there anything wrong with my
entire approach?

Finally, by using the above approach, I have a
question regarding how to determine the ROI of a multi-threaded program.
For such a workload (e.g. PARSEC, SPLASH2), we are usually interested in
the parallel section. So if I need to create a checkpoint after the
sequential initialization, how can I determine the # of instructions
needs to be skipped (i.e. what value should be set after "m5
checkpoint", as the above)? I know Simics inserts magic instructions
into the source code to pause the simulation to make checkpoints, etc.
Is there any similar mechanism in M5, or should I roughly estimate this
number as in above?

Thank you very much!
Lide

On Thu, Oct 7, 2010 at
10:46 AM, Lide Duan  wrote:
 Hi there,

I am using M5 FS mode to run
Alpha programs. My approach is the following: boot up the Linux using
AtomicSimpleCPU, and make a checkpoint before my region of interest
(ROI) of the program; Next time, restore the checkpoint initially with
AtomicSimpleCPU, and then switch to TimingSimpleCPU (for warmup) and
then DerivO3CPU (for actual measurement). Suppose my ROI begins after
10K instructions of my_alpha_program and the CPU frequency is 2GHz
(which makes 1 cycle be 500 ticks), then my rcS file (to create
checkpoint) is like the following:

#!/bin/sh
cd /benchmarks
/sbin/m5
resetstats
/sbin/m5 checkpoint 5000000
./my_alpha_program
/sbin/m5
exit

In this way, the program runs correctly and the system exits
normally, but the checkpoint is not created. I suspected that 10K
instructions already exceeded the program length, but the checkpoint
won't be created no matter what value the parameter is set to. Finally,
I tried to dump a checkpoint before my_alpha_program starts and another
one after it finishes:

/sbin/m5 checkpoint 

./my_alpha_program
/sbin/m5 checkpoint

now the two checkpoints are
created as cpt.1830187131000 and cpt.1832925222000. We can see that the
tick difference between them is much larger than 5000000, so I am
confused why my ROI checkpoint cannot be created. Am I missing anything
here (regarding the entire approach and the specific rcS
script)??

Thanks,
Lide

 

Links:
------
[1]
mailto:[email protected]
_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to