Re: [Gems-users] Ruby and Simics stall flag


Date: Thu, 15 Mar 2007 11:23:09 +0100
From: "Thomas De Schampheleire" <patrickdepinguin@xxxxxxxxx>
Subject: Re: [Gems-users] Ruby and Simics stall flag
Hi,
Thanks for your reply.

I've done some simple 10s simulation with the default, -fast en -stall
options, and I get these results (different runs)
order: default - stall - fast
1: 30s - 1m08s - 15s
2: 15s - 1m07s - 15s
3: 15s - 1m07s - 21s
4: 25s - 2m12s - 26s
5: 28s - 2m04s - 27s

These indicate that the default is -fast in my version in Simics. This
is also in accordance with what the manual says:
"The fast simulation mode is default in Simics 2.2, but the -fast
startup flag still exists for backward compatibility."

About c and cc, c is continue and cc is continue-cycles. The help says:
c: Tells Simics to start or continue executing instructions. If a
count argument is provided, Simics will execute count number of
instructions and stop.
cc: Tells Simics to start or continue executing instructions. If a
count argument is provided, Simics will execute count number of cycles
and stop.

I will run a shorter experiment now with ruby (with and without -stall
and with the g_RANDOM_SEED param) and I will compare the results. I
will let you know...

Thomas


Thomas,
A lot of your data confirms what we know about the Simics+Ruby
interaction. Let me address each of your observations separately, below.

Thomas De Schampheleire wrote:

>Hi,
>
>I am doing some initial simulations of a Solaris OS using Simics
>2.2.19 and Gems 1.2. The simulations simply involve sitting at the
>shell prompt (no real workload, except for the background services of
>Solaris).
>I am trying different combinations of several parameters, like the
>cpu-switch-time option of Simics, the Simics -stall flag, with and
>without Ruby loaded.
>
>
First of all, my understanding of the -stall flag is this:
1) Ruby must run in "stall mode"
2) Stall mode is the default mode for Simics 2.2.19. (there might be
some debate on this...certainly your data indicates a small difference
between -stall and default)
3) Simics 3.0+'s default is -fast (this is certainly true, as Ruby won't
operate unless -stall is specified).
4) Stall mode uses a different processor model than -fast, which allows
stalling.

>I am using the following command in Simics to do the simulation:
>date; cc 75000000; date
>Since the processors in this machine are all @ 75MHz, this should be
>1s in simulated time.
>
>I am getting the following results:
>
>no ruby, no -stall
>cpu-switch-time 1:      61s
>cpu-switch-time 10:      15s
>cpu-switch-time 100:      3s
>cpu-switch-time 1000:      2s
>cpu-switch-time 10000:      2s
>
>
>
This is consistent with what we know about the behaviour of Simics.
Whether this is directly due to some internal working of Simics or
simply due to locality in the host's memory hierarcy, we do not know.

>no ruby, with -stall
>cpu-switch-time 1:      60s
>cpu-switch-time 10:      15s
>cpu-switch-time 100:      9s
>cpu-switch-time 1000:      8s
>cpu-switch-time 10000:      8s
>
>
>
This data is interesting. As in my obervation #2 above, I had thought
that -stall was the default for Simics 2.2.x. This data suggests otherwise.
Can you run this expirment with the -fast option? (no ruby, with -fast,
w/o -stall)

>These simulations without ruby show that the -stall flag has most
>impact with big cpu-switch-times.
>
>When adding ruby, I get:
>with ruby, no -stall
>cpu-switch-time 1:      31m
>cpu-switch-time 10:      24m
>cpu-switch-time 100:      11m
>cpu-switch-time 1000:      9m
>cpu-switch-time 10000:      9m
>
>
This is curious. Do the results (eg. Ruby_cycles) match (allowing for
differences due to random seed) the results below? If so, then I would
speculate that the -stall option isn't needed for Simics 2.2.X....

>with ruby, with -stall
>cpu-switch-time 1:      (still to run)
>cpu-switch-time 10:      (still running, > 2h)
>cpu-switch-time 100:      2h
>cpu-switch-time 1000:      2h
>cpu-switch-time 10000:      1h37m
>
>Looking at a cpu-switch-time of 1, the slowdowns respectively are 60x
>(without ruby), 1800x (with ruby, without -stall) and more than 7200x
>(with ruby, with stall).
>
>
Ruby *should* have no effect if -stall is not enabled. Again, I am
curious as to what the default behaviour is. If the default behaviour is
not -stall, then Ruby should never even be called by Simics... but, that
contradicts the (ruby no -stall) experiment above.

When the cpu-switch-time 1 experiment (ruby, -stall) finishes, could you
compare the ruby output to that of the (ruby, no -stall) experiment above?

>I found some example figures in the ISCA tutorial, but I am unsure how
>to relate my figures to those. I thought that I was simulating 1s, but
>now on a second thought, using 4 processors @ 75MHz, the simulated
>75000000 cycles would ideally take only 250ms, right? In that case,
>the slowdown factors I gave above are per processor, and the whole
>should be multiplied by 4 to get the total slowdown. Is this correct?
>Are the results I am getting reasonable?
>
>
I don't have a Simics reference nearby, but IF I remember correctly, and
I might not: *cc* is an abbreviation for instruction-step, *c* is an
abbreviation for cycle-step. I don't know how those commands are
affected with the number of processors....

>In addition, I am a bit confused about the interaction between the
>-stall flag and ruby. In my understanding, the -stall flag adds some
>realism to memory transactions, by respecting some latency. Ruby adds
>cache structures, and thus adds latency due to cache misses. Is that
>correct?
>
>
I'm forced to also admit confusion, given your data. I eagerly await the
notable differences in the Ruby output... from there I might be able to
shed some light on your questions.

>In the Ruby documentation, it is stated that the -stall flag should
>always be used to ensure forward-compatibility with Simics 3. But in
>Simics 2 I can choose to run with or without the -stall flag, so what
>is the difference between both scenarios?
>
>
Certainly, we have observed that -stall is needed to run with Simics 3+.
Again, I'd like to see the notable differences in Ruby's output between
the -stall and no -stall experiments. If you wouldn't mind re-running
the simulations with the same g_RANDOM_SEED param, that would help quite
a bit as well. (cpu-switch-time 1 would be the most meaningful to me).

There is one other option you might consider: the PERFECT_MEMORY_SYSTEM
flag. I don't think this was released in GEMS 1.2, but you can have a
look at its implmentation in GEMS 1.4 -- it is straightforward.

Basically, turning on the PERFECT_MEMORY_SYSTEM flag causes all requests
to take precisely PERFECT_MEMORY_SYSTEM_LATENCY cycles. Setting this
latency to zero yields identical latencies to a simulation running
without Ruby, and you can use this to measure the raw slowdown of Simics
itself due to the presence of a timing module.

>Thanks, Thomas
>
>
Regards,
Dan

>_______________________________________________
>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.
>
>
>
>


------------------------------

Message: 6
Date: Tue, 13 Mar 2007 16:23:24 -0400
From: "avadh patel" <apatel@xxxxxxxxxxxxxxxxx>
Subject: [Gems-users] convert MOSI_SMP_bcast to MOSI_CMP_bcast
To: "Gems Users" <gems-users@xxxxxxxxxxx>
Message-ID:
        <c09e7eee0703131323u72bca4ffoc8344e85b17ae955@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="iso-8859-1"

Hello Everyone,

I would like to use the bus based snooping protocol for my project in CMP
system.
I saw the list of protocols supported by the GEMS doesn't contain any bus
based snooping protocol for CMP systems.

I would like to change the current MOSI_SMP_bcast to MOSI_CMP_bcast
protocol, but as I dont know the SLICC in detail and how should I change the
network configuration used.
So I am requesting to this group to help me out to create this new protocol.
I have following questions:

1) Can I simply change the network topology in MOSI_SMP_bcast protocol to
look like MOSI_CMP_bcast?

2) Why is directory used in MOSI_SMP_bcast? as it is a bus based snooping
protocol, it shouldn't require any directory.

Thanks in advance.

- Avadh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.wisc.edu/archive/gems-users/attachments/20070313/2e2f7341/attachment.html

------------------------------

Message: 7
Date: Tue, 13 Mar 2007 15:33:21 -0500 (CDT)
From: Mike Marty <mikem@xxxxxxxxxxx>
Subject: Re: [Gems-users] convert MOSI_SMP_bcast to MOSI_CMP_bcast
To: Gems Users <gems-users@xxxxxxxxxxx>
Message-ID: <Pine.LNX.4.58.0703131531440.10752@xxxxxxxxxxxxxxxx>
Content-Type: TEXT/PLAIN; charset=US-ASCII

>
> I would like to use the bus based snooping protocol for my project in CMP
> system.
> I saw the list of protocols supported by the GEMS doesn't contain any bus
> based snooping protocol for CMP systems.
>
> I would like to change the current MOSI_SMP_bcast to MOSI_CMP_bcast
> protocol, but as I dont know the SLICC in detail and how should I change the
> network configuration used.
> So I am requesting to this group to help me out to create this new protocol.
> I have following questions:
>
> 1) Can I simply change the network topology in MOSI_SMP_bcast protocol to
> look like MOSI_CMP_bcast?
>

Yes, if you are ok with private L1/L2 caches in the same controller.

MOSI_SMP_bcast also creates a DirectoryController for every processor.
You will want to change this.

> 2) Why is directory used in MOSI_SMP_bcast? as it is a bus based snooping
> protocol, it shouldn't require any directory.
>

Ruby does *not* implement shared lines.  Thus a "directory" holds an owner
bit to determine if memory shoudl respond with data.

Ruby doesn't have a true bus interconnect.  It uses an ordered
hierarchical switch.

--Mike




------------------------------

Message: 8
Date: Wed, 14 Mar 2007 17:32:46 -0700 (PDT)
From: "Dave Z." <zhu_dave@xxxxxxxxx>
Subject: [Gems-users] adding a new component
To: gems <gems-users@xxxxxxxxxxx>
Message-ID: <303239.27899.qm@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset=iso-8859-1

Hello,

I'm trying to add a new component to each chip in the system. I've created a C++ file in $GEMS/ruby/system/ and modified SLICC files as necessary. I've defined:

Vector < XXX * > m_L1Cache_XXX_vec in AbstractChip.h

to be able to do the following:

XXX* x_ptr = g_system_ptr->getChip(...)->getXXX();

Within this component I'd like to be able to access the sequencer as well (I don't know if this changes anything). I'm getting 'm_size != 0' assertion, even though the vector size is set to 0 just like the sequencer vector. I'm probably overlooking something. Could you please show me some pointers?

Thanks,

Dave






____________________________________________________________________________________
Food fight? Enjoy some healthy debate
in the Yahoo! Answers Food & Drink Q&A.
http://answers.yahoo.com/dir/?link=list&sid=396545367



------------------------------

Message: 9
Date: Thu, 15 Mar 2007 09:14:06 +0800
From: "hongxia sun" <sunhx.seraph@xxxxxxxxx>
Subject: Re: [Gems-users] adding a new component
To: "Gems Users" <gems-users@xxxxxxxxxxx>
Message-ID:
        <37fd3bbc0703141814of1f11ccidf2b7ec67e1126b9@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="iso-8859-1"

Hi Dave,

I think it should be enough. And where would you like to access the
sequencer? Maybe in SLICC files, it is much more easy to do this.

Good luck!

Hongxia SUN


2007/3/15, Dave Z. <zhu_dave@xxxxxxxxx>:
>
> Hello,
>
> I'm trying to add a new component to each chip in the system. I've created
> a C++ file in $GEMS/ruby/system/ and modified SLICC files as necessary. I've
> defined:
>
> Vector < XXX * > m_L1Cache_XXX_vec in AbstractChip.h
>
> to be able to do the following:
>
> XXX* x_ptr = g_system_ptr->getChip(...)->getXXX();
>
> Within this component I'd like to be able to access the sequencer as well
> (I don't know if this changes anything). I'm getting 'm_size != 0'
> assertion, even though the vector size is set to 0 just like the sequencer
> vector. I'm probably overlooking something. Could you please show me some
> pointers?
>
> Thanks,
>
> Dave
>
>
>
>
>
>
>
> ____________________________________________________________________________________
> Food fight? Enjoy some healthy debate
> in the Yahoo! Answers Food & Drink Q&A.
> http://answers.yahoo.com/dir/?link=list&sid=396545367
>
> _______________________________________________
> 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.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.wisc.edu/archive/gems-users/attachments/20070315/c5203fab/attachment.html

------------------------------

Message: 10
Date: Wed, 14 Mar 2007 18:28:26 -0700 (PDT)
From: "Dave Z." <zhu_dave@xxxxxxxxx>
Subject: Re: [Gems-users] adding a new component
To: Gems Users <gems-users@xxxxxxxxxxx>
Message-ID: <952599.47104.qm@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
Content-Type: text/plain; charset="iso-8859-1"

Hi Hongxia,

I'd like to access the sequencer in the XXX component. But I think I don't have any problems with accessing the sequencer. Ruby is complaining that my vector size is not 0 (failed assertion 'm_size != 0' at fn const TYPE& Vector<TYPE>::ref(int) ... in ../common/Vector.h:156.

Thanks,

Dave

----- Original Message ----
From: hongxia sun <sunhx.seraph@xxxxxxxxx>
To: Gems Users <gems-users@xxxxxxxxxxx>
Sent: Wednesday, March 14, 2007 6:14:06 PM
Subject: Re: [Gems-users] adding a new component

Hi Dave,



I think it should be enough. And where would you like to access the sequencer? Maybe in SLICC files, it is much more easy to do this.



Good luck!



Hongxia SUN



2007/3/15, Dave Z. <zhu_dave@xxxxxxxxx>:
Hello,

I'm trying to add a new component to each chip in the system. I've created a C++ file in $GEMS/ruby/system/ and modified SLICC files as necessary. I've defined:


Vector < XXX * > m_L1Cache_XXX_vec in AbstractChip.h

to be able to do the following:

XXX* x_ptr = g_system_ptr->getChip(...)->getXXX();

Within this component I'd like to be able to access the sequencer as well (I don't know if this changes anything). I'm getting 'm_size != 0' assertion, even though the vector size is set to 0 just like the sequencer vector. I'm probably overlooking something. Could you please show me some pointers?


Thanks,

Dave






____________________________________________________________________________________
Food fight? Enjoy some healthy debate
in the Yahoo! Answers Food & Drink Q&A.

http://answers.yahoo.com/dir/?link=list&sid=396545367

_______________________________________________
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.









____________________________________________________________________________________
Don't get soaked.  Take a quick peek at the forecast
with the Yahoo! Search weather shortcut.
http://tools.search.yahoo.com/shortcuts/#loc_weather
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.wisc.edu/archive/gems-users/attachments/20070314/53f4ae8e/attachment.html

------------------------------

Message: 11
Date: Thu, 15 Mar 2007 09:40:41 +0800
From: "hongxia sun" <sunhx.seraph@xxxxxxxxx>
Subject: Re: [Gems-users] adding a new component
To: "Gems Users" <gems-users@xxxxxxxxxxx>
Message-ID:
        <37fd3bbc0703141840j378fa1c7xf1624d45fa2d315d@xxxxxxxxxxxxxx>
Content-Type: text/plain; charset="iso-8859-1"

Hi Dave,

How did you define your component? When did you get the error? Compiling
time or running time?

You can try to define your component's constructor as following:

XXX(AbstractChip *chip_ptr);
XXX(AbstractChip *chip_ptr, int version);

In fact, this error also came up when I added a new component to Ruby. But I
cannot remember exactly how to solve it. Please try the about method.

Good luck!

Hongxia SUN


2007/3/15, Dave Z. <zhu_dave@xxxxxxxxx>:
>
>  Hi Hongxia,
>
> I'd like to access the sequencer in the XXX component. But I think I don't
> have any problems with accessing the sequencer. Ruby is complaining that my
> vector size is not 0 (failed assertion 'm_size != 0' at fn const TYPE&
> Vector<TYPE>::ref(int) ... in ../common/Vector.h:156.
>
> Thanks,
>
> Dave
>
> ----- Original Message ----
> From: hongxia sun <sunhx.seraph@xxxxxxxxx>
> To: Gems Users <gems-users@xxxxxxxxxxx>
> Sent: Wednesday, March 14, 2007 6:14:06 PM
> Subject: Re: [Gems-users] adding a new component
>
> Hi Dave,
>
> I think it should be enough. And where would you like to access the
> sequencer? Maybe in SLICC files, it is much more easy to do this.
>
> Good luck!
>
> Hongxia SUN
>
>
> 2007/3/15, Dave Z. <zhu_dave@xxxxxxxxx>:
> >
> > Hello,
> >
> > I'm trying to add a new component to each chip in the system. I've
> > created a C++ file in $GEMS/ruby/system/ and modified SLICC files as
> > necessary. I've defined:
> >
> > Vector < XXX * > m_L1Cache_XXX_vec in AbstractChip.h
> >
> > to be able to do the following:
> >
> > XXX* x_ptr = g_system_ptr->getChip(...)->getXXX();
> >
> > Within this component I'd like to be able to access the sequencer as
> > well (I don't know if this changes anything). I'm getting 'm_size != 0'
> > assertion, even though the vector size is set to 0 just like the sequencer
> > vector. I'm probably overlooking something. Could you please show me some
> > pointers?
> >
> > Thanks,
> >
> > Dave
> >
> >
> >
> >
> >
> >
> >
> > ____________________________________________________________________________________
> > Food fight? Enjoy some healthy debate
> > in the Yahoo! Answers Food & Drink Q&A.
> > http://answers.yahoo.com/dir/?link=list&sid=396545367
> >
> > _______________________________________________
> > 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/";<https://lists.cs.wisc.edu/archive/gems-users/%22>;
> to your search.
>
>
>
>
> ------------------------------
> TV dinner still cooling?
> Check out "Tonight's Picks"<http://us.rd.yahoo.com/evt=49979/*http://tv.yahoo.com/>on Yahoo! TV.
>
> _______________________________________________
> 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.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.wisc.edu/archive/gems-users/attachments/20070315/c0e2e584/attachment.html

------------------------------

_______________________________________________
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.

End of Gems-users Digest, Vol 82, Issue 3
*****************************************


[← Prev in Thread] Current Thread [Next in Thread→]