2006/7/20, James Wang <jameswang99@xxxxxxxxx>:
Hi All:
I am trying to write a transactional memory protocol, and I am having trouble to make sense of a few transactions, and I would like to stop execution when particular memory location is modified. Is this possible to do in Ruby, or Simics?
Well, I am not sure, but I think the only way is using a debugger with
Ruby (or with tester.exec) and put some watchpoints over variables
which implement memory locations or breakpoints over functions which
implement data writing. At first, I think you should try to look
inside "generated" directory and source code files regarding
L1_cache_controllers (perform a file search like this one: "L1*" ):
you will find functions which writes in L1_cache; by debugging and
putting breakpoints, try to follow the code and to find all the
functions which write data).
I am also interested in using the tester.exec to run transactional traces. How do I do it? What's the short hand for Begin/End Transaction? Where can I find more documentations?
Thanks for any comment in advance.
Regards
James
At first, I think you should read this:
http://www.cs.wisc.edu/gems/doc/wiki/moin.cgi/How_do_I_understand_a_Protocol
Tester.exec allows you to perform trace-driven simulations; the url
I've given shows you only two kind of memory operations: data load
(LD) and data store (ST); to find other kind of possible operations, I
think you should find a file containing the definition of
"string_to_CacheRequestType" function; this function is called in
TraceRecord::input, and is used to "interpret" the operations (which
could be LD, ST and many others...) you specify in the trace file.
Sorry if I can't be more accurate, but at the moment I have some
personal troubles and I can't see all source code files.
I hope these information are useful for you, and to be more accurate
as soon as possible.
|