Hi All,
I'm trying to dump a trace of memory accesses that ruby sees. While
deciding which is the best place to do this, I found that there is a
discrepancy between what Simics feeds ruby [in SimicsProcessor.C -
makeRequest()] and what the ruby sequencer actually sees [in Sequencer.C
- doRequest()]. I only trace user level accesses and ignore I-cache
misses. The format I use to print is: { <cpu> <address> <"LD"/"ST">
}. I put my tracing code in both places so they print out simultaneously
and this is what I got when I executed just 10 instructions (c 10):
Ruby Sequencer: 0 [0x4db3a8c, line 0x4db3a80] LD
Simics: 13 [0xf238020, line 0xf238000] LD
Simics: 14 [0x2d16cc, line 0x2d16c0] LD
Simics: 15 [0x2d174c, line 0x2d1740] LD
Ruby Sequencer: 0 [0x4db3a04, line 0x4db3a00] LD
Simics: 1 [0x2d0f4c, line 0x2d0f40] ST
Simics: 3 [0xf2a8020, line 0xf2a8000] LD
Simics: 4 [0x2d11cc, line 0x2d11c0] LD
Simics: 5 [0x2d124c, line 0x2d1240] LD
Simics: 7 [0xf294020, line 0xf294000] LD
Simics: 12 [0x30a840, line 0x30a840] LD
Simics: 13 [0xf23804c, line 0xf238040] LD
Simics: 14 [0x2d16cc, line 0x2d16c0] ST
Simics: 15 [0x2d174c, line 0x2d1740] ST
Ruby Sequencer: 0 [0x4da7e74, line 0x4da7e40] LD
Ruby Sequencer: 0 [0x4db3a50, line 0x4db3a40] LD
Simics: 2 [0x2d10cc, line 0x2d10c0] LD
Simics: 3 [0xf2a804c, line 0xf2a8040] LD
Simics: 4 [0x2d11cc, line 0x2d11c0] ST
Simics: 5 [0x2d124c, line 0x2d1240] ST
Simics: 6 [0x2d12cc, line 0x2d12c0] ST
Simics: 7 [0xf29404c, line 0xf294040] LD
Simics: 8 [0x2d13cc, line 0x2d13c0] LD
By comparing the L1D stats after dumping ruby stats, I can see that the
trace from SimicsProcessor is more accurate. But I want to move this
code into the Sequencer because I want the same tracing code to be
invoked when Opal is also loaded. Why does the sequencer see fewer
requests compared to SimicsProcessor, and why does it only see requests
from cpu0 (I'm assuming m_version refers to the cpu number)? I know I am
definitely missing something here, any help would be greatly appreciated.
Thanks,
- Vivek
|