Hi Paul,
This number is indeed the timestamp of the current request, in
femtoseconds. There are a few reasons why it could advance
non-monotonically:
- Before the region of interest (ROI), there are no core timing models
so simulated time does not advance. It does so in the memory models,
which is why you are seeing non-zero values at all, but the cores
reset time to zero for each new request. Depending on the path the
request took to reach your DRAM controller (a core close-by or through
a NoC), the value can in this case be up to some tens of nanoseconds
(which is in the order of 10^7 in femtoseconds).
- During detailed simulation, because Sniper is a multi-threaded
simulator with relaxed synchronization, each core maintains its own
timestamp. By having a barrier across simulated cores, by default
every 100 simulated nanoseconds, these times are mostly synchronized
-- but since each core will be making requests using its own local
timestamp you should expect to see time jump back and forth by up 100
ns.
- Finally, Sniper models memory requests instantaneously. This means
that when a core makes an access, the address is checked at all cache
levels and potentially goes to DRAM, and the latency of the completed
access is returned to the core. If the core models an out-of-order
processor, this core model may then issue new requests that have a
starting time that is earlier than the completion time of the previous
request.
For some more background on the last two points, also see [1].
Obviously these are two design choices that can affect accuracy, but
they do increase simulation speed significantly so -- if you are using
Sniper for the right type of research -- this is a trade-off we are
willing to make.
If you are seeing other variations that cannot be explained by any of
these points (i.e., variations inside of ROI that are larger than a
few hundred nanoseconds) do let us know as you may have found a bug
;-)
Regards,
Wim
[1]
http://snipersim.org/w/Causality