Shougata,
It sounds like tourmaline, or at least a more robust
version of it, would be perfect for you. If that works for
you, it'll be the fastest way for you to get what you want.
But, I suspect that system interactions will prevent you
from running the transactions in some of the benchmarks.
You should definitely use GEMS 1.4. If for no other reason
than it will run much faster than GEMS 1.3. To get ruby
with LogTM to run as fast as possible configure the memory
system to use a very large (and associative) L1 cache. GEMS
1.4 supports fast L1 hits (1-cycle) for LogTM, but GEMS 1.3
doesn't. I'd recommend using large L1 caches and seeing if
the ruby slowdown is tolerable.
--Kevin
Dan Gibson wrote:
Shougata,
Shougata Ghosh wrote:
Hi
I am trying to run SPLASH-2 benchmarks with logTM. I have replaced the
locks in the code with magic instructions (xaction begin and commit).
The cache coherence protocol I'm using is MESI_SMP_LogTM_directory. My
version of simics is 2.2.19 and GEMS is 1.3 (not hooking up opal).
I want to collect the memory traces (along with xaction begins, commits
and aborts) and analyse them offline. I don't really care about the
timing info generated by ruby. Running with ruby slows it down too much!
And since I don't need the timing info that ruby provides, I think this
slowdown is unjustified in my case!
I thought of running it with the PERFECT_MEMORY_SYSTEM=true and setting
PERFECT_MEMORY_RESPONSE_LATENCY = 0, but then I figured out that will
probably break the transactional memory part of the memory system. When
PERFECT_MEMORY_SYSTEM is true, ruby seems to completely bypass the cache
and simply return PERFECT_MEMORY_RESPONSE_LATENCY. That way, the xaction
conflicts will never be detected. Can someone verify this?
The PERFECT_MEMORY_SYSTEM flags will indeed completely bypass LogTM.
SPLASH would behave as an unsynchronized program. I would also expect
Ruby to behave in strange and unexpected ways if transactional binaries
were run with PERFECT_MEMORY_SYSTEM = true.
One alternative I thought of was using Tourmaline. While tourmaline
worked for some small microbenchmarks, it always breaks when I'm trying
to run the SPLASH2 benchmarks.
The released controllers that attempt to allow transactional concurrency
were not very richly developed. They have a hard time handling
virtualization events. However, the Serializer controller is fast and
simple, and much more robust. I don't know the specifics of your
requirements, however... if you need non-transactional CPUs to be making
meaningful requests then obviously Serializer is not an option.
Another option I tried is to let ruby do its thing but always return 0
to simics for stall cycles. Basically, in ruby_operate(), I call
mh_memorytracer_possible_cache_miss(mem_op) and then return 0. This
would slow the execution down somewhat but atleast it won't stall
simics. Conceptually this made sense to me but when I ran it, it gave me
the following error right after the first xaction_begin:
simics-common: system/Sequencer.C:487: void Sequencer::makeRequest(const
CacheMsg&): Assertion `isReady(request)' failed.
*** Simics getting shaky, switching to 'safe' mode.
*** Simics (main thread) received an abort signal, probably an assertion.
Ruby manipulates Simics's stall condition in two ways.
1) By returning non-zero values from mh_memorytracer_possible_cache_miss().
2) By calling SIMICS_stall_cycle(), usually to unstall a processor
I would expect the above behaviour to persist if most of Ruby thinks the
processor is stalled when it is, in fact, not stalled. There are several
conditions that could be violated in isReady(), many of which are not
related to LogTM.
Regardless, forbidding Ruby from stalling Simics will break LogTM
anyway, since LogTM relies first if stalling to prevent aborts, rather
than aborting outright.
I understand there were some logTM bugs in this version of GEMS (1.3)
which were fixed in the last release (1.4). Is this error being caused
by one of those bugs? Is it worth the trouble to install GEMS 1.4 and
try this method out or is there something fundamentally wrong with what
I'm doing and won't work in 1.4 either?
I'm sure one of the LogTM architects will be glad to comment on this. I,
for one, would reccomend the latest version, simply because its not
always straightforward to manually re-solve bugs in older versions of GEMS.
Any other ways of achieving whaty+simics (where ruby stalls simics)
setup and I notic I'm trying to do?
If you're not interested in timing, try running with Ruby with
SIMICS_RUBY_MULTIPLIER = 1, L1 latency 1, L2 latency 2, and MM latency
3, link latencies small if needed, and make cache sizes huge (~GBs).
Empirically, we know that a lot of the Simics+Ruby slowdown occurs
because Simics is spinning on stalled processors. Reducing all the
latencies should help substantially.
Also, marginal increases in cpu-switch-time (eg from 1 to 5 or 10) would
probably speed things along somewhat, again at the expense of timing
accuracy.
Btw, I did try running barnes with the regular ruby+simics (where ruby
stalls simics) setup and I noticed ruby always returned 2000000000
cycles as the stall cycle! What's causing this???
2 Billion is used as "an arbitrarily long stall time" -- Ruby never
returns an exact number of cycles because Ruby will explicitly unstall
Simics when the request has completed. One cannot know reliably at
request-time the number of cycles that will be required for a given
request, hence Ruby simply stalls Simics (for 2 billion cycles), then
when the request has been satisfied (by Ruby's EventQueue.C and its
consumers), Ruby calls SIMICS_stall_cycle() to unstall Simics.
I'd really appreciate any ideas.
Thanks in advance
shougata
_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/" to your search.
|